Files
docs/micro_utils/index.html
InsanusMokrassar afd6b6b6f8 deploy: c95f3251bb
2025-08-18 05:19:39 +00:00

1172 lines
48 KiB
HTML

<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8"/>
<meta content="width=device-width,initial-scale=1" name="viewport"/>
<meta content="Single documentation place for all Insanus Mokrassar libraries" name="description"/>
<meta content="Ovsiannikov Aleksei" name="author"/>
<link href="https://docs.inmo.dev/micro_utils/index.html" rel="canonical"/>
<link href="../index.html" rel="prev"/>
<link href="resources.html" rel="next"/>
<link href="/resources/images/favicon.png" rel="icon"/>
<meta content="mkdocs-1.6.1, mkdocs-material-9.6.17" name="generator"/>
<title>MicroUtils - InMo Docs</title>
<link href="../assets/stylesheets/main.7e37652d.min.css" rel="stylesheet"/>
<link href="../assets/stylesheets/palette.06af60db.min.css" rel="stylesheet"/>
<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
<link href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&amp;display=fallback" rel="stylesheet"/>
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link href="/resources/stylesheets/navigation.css" rel="stylesheet"/>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-615VY8CQSM"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-615VY8CQSM",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-615VY8CQSM",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script>
<script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
</head>
<body data-md-color-accent="cyan" data-md-color-primary="teal" data-md-color-scheme="default" dir="ltr">
<input autocomplete="off" class="md-toggle" data-md-toggle="drawer" id="__drawer" type="checkbox"/>
<input autocomplete="off" class="md-toggle" data-md-toggle="search" id="__search" type="checkbox"/>
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a class="md-skip" href="#microutils">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav aria-label="Header" class="md-header__inner md-grid">
<a aria-label="InMo Docs" class="md-header__button md-logo" data-md-component="logo" href="../index.html" title="InMo Docs">
<img alt="logo" src="/resources/images/logo.png"/>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"></path></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
InMo Docs
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
MicroUtils
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input aria-label="Switch to dark mode" class="md-option" data-md-color-accent="cyan" data-md-color-media="" data-md-color-primary="teal" data-md-color-scheme="default" id="__palette_0" name="__palette" type="radio"/>
<label class="md-header__button md-icon" for="__palette_1" hidden="" title="Switch to dark mode">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"></path></svg>
</label>
<input aria-label="Switch to light mode" class="md-option" data-md-color-accent="light-blue" data-md-color-media="" data-md-color-primary="blue-grey" data-md-color-scheme="slate" id="__palette_1" name="__palette" type="radio"/>
<label class="md-header__button md-icon" for="__palette_0" hidden="" title="Switch to light mode">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"></path></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input aria-label="Search" autocapitalize="off" autocomplete="off" autocorrect="off" class="md-search__input" data-md-component="search-query" name="query" placeholder="Search" required="" spellcheck="false" type="text"/>
<label class="md-search__icon md-icon" for="__search">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"></path></svg>
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"></path></svg>
</label>
<nav aria-label="Search" class="md-search__options">
<a aria-label="Share" class="md-search__icon md-icon" data-clipboard="" data-clipboard-text="" data-md-component="search-share" href="javascript:void(0)" tabindex="-1" title="Share">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"></path></svg>
</a>
<button aria-label="Clear" class="md-search__icon md-icon" tabindex="-1" title="Clear" type="reset">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"></path></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix="" tabindex="0">
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a class="md-source" data-md-component="source" href="https://github.com/InsanusMokrassar/docs" title="Go to repository">
<div class="md-source__icon md-icon">
<svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4" fill="currentColor"></path></svg>
</div>
<div class="md-source__repository">
InsanusMokrassar/docs
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav aria-label="Tabs" class="md-tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a class="md-tabs__link" href="../index.html">
Home
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a class="md-tabs__link" href="index.html">
MicroUtils
</a>
</li>
<li class="md-tabs__item">
<a class="md-tabs__link" href="../tgbotapi/index.html">
Telegram Bot API
</a>
</li>
<li class="md-tabs__item">
<a class="md-tabs__link" href="../plagubot/index.html">
PlaguBot (TBD)
</a>
</li>
<li class="md-tabs__item">
<a class="md-tabs__link" href="../krontab/index.html">
Krontab
</a>
</li>
<li class="md-tabs__item">
<a class="md-tabs__link" href="../kslog/index.html">
KSLog
</a>
</li>
<li class="md-tabs__item">
<a class="md-tabs__link" href="https://insanusmokrassar.github.io/navigation/">
Navigation
</a>
</li>
<li class="md-tabs__item">
<a class="md-tabs__link" href="../services/index.html">
Services
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav aria-label="Navigation" class="md-nav md-nav--primary md-nav--lifted" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a aria-label="InMo Docs" class="md-nav__button md-logo" data-md-component="logo" href="../index.html" title="InMo Docs">
<img alt="logo" src="/resources/images/logo.png"/>
</a>
InMo Docs
</label>
<div class="md-nav__source">
<a class="md-source" data-md-component="source" href="https://github.com/InsanusMokrassar/docs" title="Go to repository">
<div class="md-source__icon md-icon">
<svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4" fill="currentColor"></path></svg>
</div>
<div class="md-source__repository">
InsanusMokrassar/docs
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../index.html">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input checked="" class="md-nav__toggle md-toggle" id="__nav_2" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link md-nav__link--active" href="index.html">
<span class="md-ellipsis">
MicroUtils
</span>
</a>
<label class="md-nav__link md-nav__link--active" for="__nav_2" id="__nav_2_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav aria-expanded="true" aria-labelledby="__nav_2_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
MicroUtils
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="https://microutils.inmo.dev/index.html">
<span class="md-ellipsis">
KDocs
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="resources.html">
<span class="md-ellipsis">
Resources
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="startup.html">
<span class="md-ellipsis">
Startup
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="colors.html">
<span class="md-ellipsis">
Colors
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_2_6" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="repos/index.html">
<span class="md-ellipsis">
Repos
</span>
</a>
<label class="md-nav__link" for="__nav_2_6" id="__nav_2_6_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_2_6_label" class="md-nav" data-md-level="2">
<label class="md-nav__title" for="__nav_2_6">
<span class="md-nav__icon md-icon"></span>
Repos
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="repos/inmemory.html">
<span class="md-ellipsis">
In memory
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_3" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="../tgbotapi/index.html">
<span class="md-ellipsis">
Telegram Bot API
</span>
</a>
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_3_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Telegram Bot API
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="https://tgbotapi.inmo.dev">
<span class="md-ellipsis">
KDocs
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/faq.html">
<span class="md-ellipsis">
FAQ
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logs.html">
<span class="md-ellipsis">
Logging
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_3_5" type="checkbox"/>
<label class="md-nav__link" for="__nav_3_5" id="__nav_3_5_label" tabindex="0">
<span class="md-ellipsis">
Introduction
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav aria-expanded="false" aria-labelledby="__nav_3_5_label" class="md-nav" data-md-level="2">
<label class="md-nav__title" for="__nav_3_5">
<span class="md-nav__icon md-icon"></span>
Introduction
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/introduction/before-any-bot-project.html">
<span class="md-ellipsis">
Before any bot project
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/introduction/including-in-your-project.html">
<span class="md-ellipsis">
Including in your project
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/introduction/proxy-setup.html">
<span class="md-ellipsis">
Proxy setup
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/introduction/first-bot.html">
<span class="md-ellipsis">
First bot
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_3_6" type="checkbox"/>
<label class="md-nav__link" for="__nav_3_6" id="__nav_3_6_label" tabindex="0">
<span class="md-ellipsis">
Guides
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav aria-expanded="false" aria-labelledby="__nav_3_6_label" class="md-nav" data-md-level="2">
<label class="md-nav__title" for="__nav_3_6">
<span class="md-nav__icon md-icon"></span>
Guides
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/guides/keyboards.html">
<span class="md-ellipsis">
Keyboards Guide
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_3_7" type="checkbox"/>
<label class="md-nav__link" for="__nav_3_7" id="__nav_3_7_label" tabindex="0">
<span class="md-ellipsis">
Updates retrieving
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav aria-expanded="false" aria-labelledby="__nav_3_7_label" class="md-nav" data-md-level="2">
<label class="md-nav__title" for="__nav_3_7">
<span class="md-nav__icon md-icon"></span>
Updates retrieving
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/updates/updates-filters.html">
<span class="md-ellipsis">
Updates filters
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/updates/long-polling.html">
<span class="md-ellipsis">
Long polling
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/updates/webhooks.html">
<span class="md-ellipsis">
Webhooks
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/updates/heroku.html">
<span class="md-ellipsis">
Heroku
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_3_8" type="checkbox"/>
<label class="md-nav__link" for="__nav_3_8" id="__nav_3_8_label" tabindex="0">
<span class="md-ellipsis">
Logic handling
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav aria-expanded="false" aria-labelledby="__nav_3_8_label" class="md-nav" data-md-level="2">
<label class="md-nav__title" for="__nav_3_8">
<span class="md-nav__icon md-icon"></span>
Logic handling
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logic/api-extensions.html">
<span class="md-ellipsis">
API Extensions
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logic/behaviour-builder-with-fsm.html">
<span class="md-ellipsis">
Behaviour Builder with FSM
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logic/behaviour-builder.html">
<span class="md-ellipsis">
Behaviour Builder
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logic/exceptions-handling.html">
<span class="md-ellipsis">
Exceptions handling
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logic/files-handling.html">
<span class="md-ellipsis">
Files handling
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logic/low-level-work-with-bots.html">
<span class="md-ellipsis">
Low-level work with bots
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logic/media-groups.html">
<span class="md-ellipsis">
Media Groups
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logic/types-conversations.html">
<span class="md-ellipsis">
Types conversations
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/logic/updates-with-flows.html">
<span class="md-ellipsis">
Updates with flows
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_3_9" type="checkbox"/>
<label class="md-nav__link" for="__nav_3_9" id="__nav_3_9_label" tabindex="0">
<span class="md-ellipsis">
DSLs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav aria-expanded="false" aria-labelledby="__nav_3_9_label" class="md-nav" data-md-level="2">
<label class="md-nav__title" for="__nav_3_9">
<span class="md-nav__icon md-icon"></span>
DSLs
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/dsls/keyboards.html">
<span class="md-ellipsis">
Keyboards
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/dsls/live-location.html">
<span class="md-ellipsis">
Live Location
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../tgbotapi/dsls/text.html">
<span class="md-ellipsis">
Text
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_4" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="../plagubot/index.html">
<span class="md-ellipsis">
PlaguBot (TBD)
</span>
</a>
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_4_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
PlaguBot (TBD)
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../plagubot/opportunities_out_of_the_box.html">
<span class="md-ellipsis">
Opportunities out of the box
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_5" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="../krontab/index.html">
<span class="md-ellipsis">
Krontab
</span>
</a>
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_5_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Krontab
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="https://krontab.inmo.dev/">
<span class="md-ellipsis">
KDocs
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="https://insanusmokrassar.github.io/KrontabPredictor">
<span class="md-ellipsis">
Predictor
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_5_4" type="checkbox"/>
<label class="md-nav__link" for="__nav_5_4" id="__nav_5_4_label" tabindex="0">
<span class="md-ellipsis">
Introduction
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav aria-expanded="false" aria-labelledby="__nav_5_4_label" class="md-nav" data-md-level="2">
<label class="md-nav__title" for="__nav_5_4">
<span class="md-nav__icon md-icon"></span>
Introduction
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../krontab/introduction/including-in-project.html">
<span class="md-ellipsis">
Including in project
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../krontab/introduction/how-to-use.html">
<span class="md-ellipsis">
How to use
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../krontab/introduction/faq.html">
<span class="md-ellipsis">
FAQ
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_5_5" type="checkbox"/>
<label class="md-nav__link" for="__nav_5_5" id="__nav_5_5_label" tabindex="0">
<span class="md-ellipsis">
Describing
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav aria-expanded="false" aria-labelledby="__nav_5_5_label" class="md-nav" data-md-level="2">
<label class="md-nav__title" for="__nav_5_5">
<span class="md-nav__icon md-icon"></span>
Describing
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="../krontab/describing/string-format.html">
<span class="md-ellipsis">
String format
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../krontab/describing/krontabscheduler.html">
<span class="md-ellipsis">
KrontabScheduler
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_6" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="../kslog/index.html">
<span class="md-ellipsis">
KSLog
</span>
</a>
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_6_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
KSLog
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="https://kslog.inmo.dev/">
<span class="md-ellipsis">
KDocs
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../kslog/setup.html">
<span class="md-ellipsis">
Setup
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../kslog/logging.html">
<span class="md-ellipsis">
Logging
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_7" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="../navigation/index.html">
<span class="md-ellipsis">
Navigation
</span>
</a>
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_7_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Navigation
</label>
<ul class="md-nav__list" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="https://insanusmokrassar.github.io/navigation/">
<span class="md-ellipsis">
Sample
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../navigation/getting-started.html">
<span class="md-ellipsis">
Getting started (TBD)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle" id="__nav_8" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="../services/index.html">
<span class="md-ellipsis">
Services
</span>
</a>
</div>
<nav aria-expanded="false" aria-labelledby="__nav_8_label" class="md-nav" data-md-level="1">
<label class="md-nav__title" for="__nav_8">
<span class="md-nav__icon md-icon"></span>
Services
</label>
<ul class="md-nav__list" data-md-scrollfix="">
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav aria-label="Table of contents" class="md-nav md-nav--secondary">
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a class="md-content__button md-icon" href="https://github.com/InsanusMokrassar/docs/edit/master/docs/micro_utils/index.md" rel="edit" title="Edit this page">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"></path></svg>
</a>
<a class="md-content__button md-icon" href="https://github.com/InsanusMokrassar/docs/raw/master/docs/micro_utils/index.md" title="View source of this page">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"></path></svg>
</a>
<h1 id="microutils">MicroUtils<a class="headerlink" href="#microutils" title="Permanent link"></a></h1>
<p><code>MicroUtils</code> is a set of libraries to help me (and, I hope, you too) in some routine doings of coding.</p>
<p>First of all, this library collection is oriented to use next technologies:</p>
<ul>
<li><a href="https://github.com/Kotlin/kotlinx.coroutines"><code>Kotlin Coroutines</code></a></li>
<li><a href="https://github.com/Kotlin/kotlinx.serialization"><code>Kotlin Serialization</code></a></li>
<li><a href="https://github.com/JetBrains/Exposed"><code>Kotlin Exposed</code></a></li>
<li><a href="https://ktor.io"><code>Ktor</code></a></li>
<li><a href="https://insert-koin.io"><code>Koin</code></a></li>
<li><a href="https://docs.korge.org"><code>Korlibs</code></a></li>
</ul>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>
Due to complexity of this library, it is possible that some things will be missed or inactual.
Me and the users of this library will try hard to keep its docs as actual as possible, but in case
you will find some inconsistency of docs and library work (signatures, behaviour, API) you may write
me directly in my <a href="https://t.me/InsanusMokrassar">telegram</a></p>
</div>
<div class="mermaid">flowchart LR
%% Project Build &amp; Infrastructure
subgraph "Project Build &amp; Infrastructure"
gradleWrapper("Gradle Wrapper &amp; Plugins"):::buildInfra
CI("CI Workflows"):::buildInfra
templates("Gradle Templates"):::buildInfra
end
%% Core Utility Layer
subgraph "Core Utility Layer"
common("common"):::core
colors("colors"):::core
safe_wrapper("safe_wrapper"):::core
resources("resources"):::core
end
%% Feature-Specific Modules
subgraph "Feature-Specific Modules"
crypto("crypto"):::feature
mime_types("mime_types"):::feature
language_codes("language_codes"):::feature
matrix("matrix"):::feature
selector("selector"):::feature
transactions("transactions"):::feature
end
%% Asynchronous Helpers
subgraph "Asynchronous Helpers"
coroutines("coroutines"):::async
compose("coroutines/compose"):::async
end
%% Serialization Helpers
subgraph "Serialization Helpers"
base64("serialization/base64"):::serialization
encapsulator("serialization/encapsulator"):::serialization
mapper("serialization/mapper"):::serialization
typed_serializer("serialization/typed_serializer"):::serialization
end
%% Repository Abstractions
subgraph "Repository Abstractions"
repos_common("repos/common (API)"):::repos
repos_inmemory("repos/inmemory"):::repos
repos_cache("repos/cache"):::repos
repos_exposed("repos/exposed"):::repos
repos_ktor_client("repos/ktor/client"):::repos
repos_ktor_common("repos/ktor/common"):::repos
repos_ktor_server("repos/ktor/server"):::repos
end
%% Ktor Extensions
subgraph "Ktor Extensions"
ktor_common("ktor/common"):::ktor
ktor_client("ktor/client"):::ktor
ktor_server("ktor/server"):::ktor
end
%% Dependency Injection (Koin)
subgraph "Dependency Injection (Koin)"
koin_api("koin/src"):::di
koin_generator("koin/generator"):::di
end
%% KSP Code-Generation Modules
subgraph "KSP Code-Generation Modules"
ksp_classcasts("ksp/classcasts"):::ksp
ksp_sealed("ksp/sealed"):::ksp
ksp_variations("ksp/variations"):::ksp
ksp_generator("ksp/generator"):::ksp
end
%% Android UI Wrappers
subgraph "Android UI Wrappers"
alerts("android/alerts"):::android
pickers("android/pickers"):::android
recyclerview("android/recyclerview"):::android
smalltextfield("android/smalltextfield"):::android
end
%% Startup Plugins &amp; Templates
subgraph "Startup Plugins &amp; Templates"
startup_plugin("startup/plugin"):::startup
startup_launcher("startup/launcher"):::startup
startup_template("startup/template"):::startup
end
%% Dependencies Arrows
common --&gt;|feeds into| crypto
common --&gt;|feeds into| mime_types
common --&gt;|feeds into| language_codes
common --&gt;|feeds into| matrix
common --&gt;|feeds into| selector
common --&gt;|feeds into| transactions
common --&gt;|feeds into| coroutines
coroutines --&gt;|extends| compose
common --&gt;|feeds into| base64
common --&gt;|feeds into| encapsulator
common --&gt;|feeds into| mapper
common --&gt;|feeds into| typed_serializer
common --&gt;|feeds into| repos_common
repos_common --&gt;|implemented by| repos_inmemory
repos_common --&gt;|implemented by| repos_cache
repos_common --&gt;|implemented by| repos_exposed
repos_common --&gt;|implemented by| repos_ktor_client
repos_common --&gt;|implemented by| repos_ktor_common
repos_common --&gt;|implemented by| repos_ktor_server
ktor_common --&gt;|used by| ktor_client
ktor_common --&gt;|used by| ktor_server
ksp_generator --&gt;|used by| koin_generator
ksp_generator --&gt;|used by| ksp_classcasts
ksp_generator --&gt;|used by| ksp_sealed
ksp_generator --&gt;|used by| ksp_variations
common --&gt;|feeds into| alerts
common --&gt;|feeds into| pickers
common --&gt;|feeds into| recyclerview
common --&gt;|feeds into| smalltextfield
%% Click Events
click templates "https://github.com/insanusmokrassar/microutils/tree/master/gradle/templates/"
click common "https://github.com/insanusmokrassar/microutils/tree/master/common/"
click colors "https://github.com/insanusmokrassar/microutils/tree/master/colors/"
click safe_wrapper "https://github.com/insanusmokrassar/microutils/tree/master/safe_wrapper/"
click resources "https://github.com/insanusmokrassar/microutils/tree/master/resources/"
click crypto "https://github.com/insanusmokrassar/microutils/tree/master/crypto/"
click mime_types "https://github.com/insanusmokrassar/microutils/tree/master/mime_types/"
click language_codes "https://github.com/insanusmokrassar/microutils/tree/master/language_codes/"
click matrix "https://github.com/insanusmokrassar/microutils/tree/master/matrix/"
click selector "https://github.com/insanusmokrassar/microutils/tree/master/selector/"
click transactions "https://github.com/insanusmokrassar/microutils/tree/master/transactions/"
click coroutines "https://github.com/insanusmokrassar/microutils/tree/master/coroutines/"
click compose "https://github.com/insanusmokrassar/microutils/tree/master/coroutines/compose/"
click base64 "https://github.com/insanusmokrassar/microutils/tree/master/serialization/base64/"
click encapsulator "https://github.com/insanusmokrassar/microutils/tree/master/serialization/encapsulator/"
click mapper "https://github.com/insanusmokrassar/microutils/tree/master/serialization/mapper/"
click typed_serializer "https://github.com/insanusmokrassar/microutils/tree/master/serialization/typed_serializer/"
click repos_common "https://github.com/insanusmokrassar/microutils/tree/master/repos/common/"
click repos_inmemory "https://github.com/insanusmokrassar/microutils/tree/master/repos/inmemory/"
click repos_cache "https://github.com/insanusmokrassar/microutils/tree/master/repos/cache/"
click repos_exposed "https://github.com/insanusmokrassar/microutils/tree/master/repos/exposed/"
click repos_ktor_client "https://github.com/insanusmokrassar/microutils/tree/master/repos/ktor/client/"
click repos_ktor_common "https://github.com/insanusmokrassar/microutils/tree/master/repos/ktor/common/"
click repos_ktor_server "https://github.com/insanusmokrassar/microutils/tree/master/repos/ktor/server/"
click koin_api "https://github.com/insanusmokrassar/microutils/tree/master/koin/src/"
click koin_generator "https://github.com/insanusmokrassar/microutils/tree/master/koin/generator/"
click ksp_classcasts "https://github.com/insanusmokrassar/microutils/tree/master/ksp/classcasts/"
click ksp_sealed "https://github.com/insanusmokrassar/microutils/tree/master/ksp/sealed/"
click ksp_variations "https://github.com/insanusmokrassar/microutils/tree/master/ksp/variations/"
click ksp_generator "https://github.com/insanusmokrassar/microutils/tree/master/ksp/generator/"
click alerts "https://github.com/insanusmokrassar/microutils/tree/master/android/alerts/"
click pickers "https://github.com/insanusmokrassar/microutils/tree/master/android/pickers/"
click recyclerview "https://github.com/insanusmokrassar/microutils/tree/master/android/recyclerview/"
click smalltextfield "https://github.com/insanusmokrassar/microutils/tree/master/android/smalltextfield/"
click startup_plugin "https://github.com/insanusmokrassar/microutils/tree/master/startup/plugin/"
click startup_launcher "https://github.com/insanusmokrassar/microutils/tree/master/startup/launcher/"
click startup_template "https://github.com/insanusmokrassar/microutils/tree/master/startup/template/"
%% Styles
%% classDef buildInfra fill:#eee,stroke:#666,stroke-width:1px;
%% classDef core fill:#cce5ff,stroke:#004085,stroke-width:1px;
%% classDef feature fill:#e2e3e5,stroke:#636f83,stroke-width:1px;
%% classDef async fill:#d1ecf1,stroke:#0c5460,stroke-width:1px;
%% classDef serialization fill:#fff3cd,stroke:#856404,stroke-width:1px;
%% classDef repos fill:#d4edda,stroke:#155724,stroke-width:1px;
%% classDef ktor fill:#ffe5b4,stroke:#ff8c00,stroke-width:1px;
%% classDef di fill:#f5c6cb,stroke:#721c24,stroke-width:1px;
%% classDef ksp fill:#f8d7da,stroke:#721c24,stroke-width:1px;
%% classDef android fill:#e2e7ec,stroke:#1f2a36,stroke-width:1px;
%% classDef startup fill:#f0f3bd,stroke:#a2a04f,stroke-width:1px;
</div>
<p>Generated with <a href="https://gitdiagram.com/insanusmokrassar/microutils">gitdiagram</a> and edited then</p>
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button class="md-top md-icon" data-md-component="top" hidden="" type="button">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"></path></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<nav aria-label="Footer" class="md-footer__inner md-grid">
<a aria-label="Previous: Home" class="md-footer__link md-footer__link--prev" href="../index.html">
<div class="md-footer__button md-icon">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"></path></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
Home
</div>
</div>
</a>
<a aria-label="Next: Resources" class="md-footer__link md-footer__link--next" href="resources.html">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Resources
</div>
</div>
<div class="md-footer__button md-icon">
<svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"></path></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" rel="noopener" target="_blank">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a class="md-social__link" href="https://github.com/InsanusMokrassar" rel="noopener" target="_blank" title="github.com">
<svg viewbox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2" fill="currentColor"></path></svg>
</a>
<a class="md-social__link" href="https://hub.docker.com/r/insanusmokrassar" rel="noopener" target="_blank" title="hub.docker.com">
<svg viewbox="0 0 640 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M349.9 236.3h-66.1v-59.4h66.1zm0-204.3h-66.1v60.7h66.1zm78.2 144.8H362v59.4h66.1zm-156.3-72.1h-66.1v60.1h66.1zm78.1 0h-66.1v60.1h66.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1zm78.1 0h-66.1v59.4h66.1zm-78.1-72.1h-66.1v60.1h66.1z" fill="currentColor"></path></svg>
</a>
<a class="md-social__link" href="https://t.me/InsanusMokrassar" rel="noopener" target="_blank" title="t.me">
<svg viewbox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M256 8a248 248 0 1 0 0 496 248 248 0 1 0 0-496m115 168.7c-3.7 39.2-19.9 134.4-28.1 178.3-3.5 18.6-10.3 24.8-16.9 25.4-14.4 1.3-25.3-9.5-39.3-18.7-21.8-14.3-34.2-23.2-55.3-37.2-24.5-16.1-8.6-25 5.3-39.5 3.7-3.8 67.1-61.5 68.3-66.7.2-.7.3-3.1-1.2-4.4s-3.6-.8-5.1-.5c-2.2.5-37.1 23.5-104.6 69.1-9.9 6.8-18.9 10.1-26.9 9.9-8.9-.2-25.9-5-38.6-9.1-15.5-5-27.9-7.7-26.8-16.3.6-4.5 6.7-9 18.4-13.7 72.3-31.5 120.5-52.3 144.6-62.3 68.9-28.6 83.2-33.6 92.5-33.8 2.1 0 6.6.5 9.6 2.9 2 1.7 3.2 4.1 3.5 6.7.5 3.2.6 6.5.4 9.8z" fill="currentColor"></path></svg>
</a>
<a class="md-social__link" href="https://twitter.com/InsanusMokrassa" rel="noopener" target="_blank" title="twitter.com">
<svg viewbox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 7.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3" fill="currentColor"></path></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["announce.dismiss", "content.action.edit", "content.action.view", "content.code.annotate", "content.code.copy", "content.tabs.link", "content.tooltips", "navigation.footer", "navigation.indexes", "navigation.sections", "navigation.tabs", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.92b07e13.min.js"></script>
<script type="module">import mermaid from "https://unpkg.com/mermaid@10.4.0/dist/mermaid.esm.min.mjs";
mermaid.initialize({
theme: (JSON.parse(__md_get("__palette").index == 1)) ? 'dark' : 'light'
});</script></body>
</html>