docs/navigation/index.html
2024-12-26 02:49:30 +00:00

1282 lines
49 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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/navigation/index.html" rel="canonical"/>
<link href="../kslog/logging.html" rel="prev"/>
<link href="getting-started.html" rel="next"/>
<link href="/resources/images/favicon.png" rel="icon"/>
<meta content="mkdocs-1.6.1, mkdocs-material-9.5.36" name="generator"/>
<title>Navigation - InMo Docs</title>
<link href="../assets/stylesheets/main.06209087.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="#navigation">
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">
Navigation
</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 6.6.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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"></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">
<a class="md-tabs__link" href="../micro_utils/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 md-tabs__item--active">
<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 6.6.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 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"></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--nested">
<input class="md-nav__toggle md-toggle" id="__nav_2" type="checkbox"/>
<div class="md-nav__link md-nav__container">
<a class="md-nav__link" href="../micro_utils/index.html">
<span class="md-ellipsis">
MicroUtils
</span>
</a>
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav aria-expanded="false" 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="../micro_utils/resources.html">
<span class="md-ellipsis">
Resources
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../micro_utils/startup.html">
<span class="md-ellipsis">
Startup
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="../micro_utils/colors.html">
<span class="md-ellipsis">
Colors
</span>
</a>
</li>
<li class="md-nav__item 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="../micro_utils/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="0">
<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="../micro_utils/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--active md-nav__item--section md-nav__item--nested">
<input checked="" class="md-nav__toggle md-toggle" id="__nav_7" 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">
Navigation
</span>
</a>
<label class="md-nav__link md-nav__link--active" for="__nav_7" id="__nav_7_label" tabindex="">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav aria-expanded="true" 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="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">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
<li class="md-nav__item">
<a class="md-nav__link" href="#work-explanation">
<span class="md-ellipsis">
Work explanation
</span>
</a>
<nav aria-label="Work explanation" class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a class="md-nav__link" href="#nodes-behaviour">
<span class="md-ellipsis">
Nodes behaviour
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#chains-behaviour">
<span class="md-ellipsis">
Chains behaviour
</span>
</a>
</li>
<li class="md-nav__item">
<a class="md-nav__link" href="#large-tree-sample">
<span class="md-ellipsis">
Large tree sample
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</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/navigation/index.md" 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/navigation/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="navigation">Navigation<a class="headerlink" href="#navigation" title="Permanent link"></a></h1>
<p><strong>This library uses koin as preferred DI in MVVM part</strong></p>
<p>Navigation is a library for simple management for your app views (or some other logics). In this library there are several
important terms:</p>
<ul>
<li><code>Node</code> - is a core thing. Node itself contains current config and its state</li>
<li><code>Chain</code> - some sequence of nodes. In one chain <strong>only the last one</strong> node can be active</li>
</ul>
<h2 id="work-explanation">Work explanation<a class="headerlink" href="#work-explanation" title="Permanent link"></a></h2>
<ul>
<li>Only the last (most deep) <code>node</code> can be <code>RESUMED</code></li>
<li>All the <code>chain</code>s of resumed <code>node</code> will have status <code>RESUMED</code></li>
<li>Only in the <code>chain</code> with status <code>RESUMED</code> there are <code>RESUMED</code> nodes</li>
</ul>
<details class="info">
<summary>Statuses</summary>
<p>There are 4 real statuses:</p>
<ul>
<li>New - Means that Node/Chain is just created (even before constructor) or has been fully destroyed (in context of navigation)</li>
<li>Created - Means that Node/Chain is created or preparing for destroing</li>
<li>Started - Means that Node/Chain is hidden and can be resumed/stopped at any time</li>
<li>Resumed - Means that Node/Chain now active</li>
</ul>
<p>In fact node will retrieve 6 changes of statuses:</p>
<div class="mermaid">flowchart TB
New -.-&gt; Create
Create -.-&gt; Created
Created -.-&gt; Start -.-&gt; Started
Started --&gt; Resume --&gt; Resumed
Resumed --&gt; Pause --&gt; Started
Started --&gt; Stop --&gt; Created
Created --&gt; Destroy
Destroy --&gt; New
DashedLineLegendTitle(Dashed line) -.-&gt; DashedLineLegend(Possible direction before `Created` state)
SolidLineLegendTitle(Solid line) --&gt; SolidLineLegend(Possible direction after `Created` state)
class New navigation-new;
class Destroyed navigation-new;
class Created navigation-created;
class Started navigation-started;
class Resumed navigation-resumed;
</div>
</details>
<hr/>
<h3 id="nodes-behaviour">Nodes behaviour<a class="headerlink" href="#nodes-behaviour" title="Permanent link"></a></h3>
<p>Lets see the next sample:</p>
<div class="mermaid">flowchart LR
subgraph Nodes/Chains tree
NodeN1(N1)
NodeN2(N2)
class NodeN1 navigation-started;
class NodeN2 navigation-resumed;
subgraph RootChain
direction LR
NodeN1 --&gt; NodeN2
end
class RootChain navigation-resumed;
end
</div>
<p>we may say several things about the sample above:</p>
<ul>
<li>N2 is the latest node and it is <code>RESUMED</code></li>
<li>N1 <code>PAUSED</code></li>
<li>RootChain is <code>RESUMED</code></li>
</ul>
<p>So, we would like to add new node in the end of stack:</p>
<div class="mermaid">flowchart LR
subgraph Nodes/Chains tree
NodeN1(N1)
NodeN2(N2)
NodeN3(N3)
class NodeN1 navigation-started;
class NodeN2 navigation-started;
class NodeN3 navigation-resumed;
subgraph RootChain
direction LR
NodeN1 --&gt; NodeN2
NodeN2 --&gt; NodeN3
end
class RootChain navigation-resumed;
end
</div>
<p>As we can see, N3 became <code>RESUMED</code> and N2 <code>PAUSED</code>. Lets try to remove N3:</p>
<div class="mermaid">flowchart LR
subgraph Nodes/Chains tree
NodeN1(N1)
NodeN2(N2)
class NodeN1 navigation-started;
class NodeN2 navigation-resumed;
subgraph RootChain
direction LR
NodeN1 --&gt; NodeN2
end
class RootChain navigation-resumed;
end
</div>
<h3 id="chains-behaviour">Chains behaviour<a class="headerlink" href="#chains-behaviour" title="Permanent link"></a></h3>
<p>So, lets continue with the sample above. Lets imagine, we need to add new subchain for N2 node.
Whole tree will look like:</p>
<div class="mermaid">flowchart LR
subgraph Nodes/Chains tree
direction LR
NodeN1(N1)
NodeN2(N2)
NodeN3(N3)
class NodeN1 navigation-started;
class NodeN2 navigation-resumed;
class NodeN3 navigation-resumed;
subgraph RootChain
direction LR
NodeN1 --&gt; NodeN2
NodeN2
end
NodeN2 --&gt; N2Subchain
subgraph N2Subchain
direction LR
NodeN3
end
class RootChain navigation-resumed;
class N2Subchain navigation-resumed;
end
</div>
<p>Here has been created new N2Subchain with N3 node. Both them resumed because of:</p>
<ul>
<li>N2 is resumed. So, N2Subchain supposed to be resumed</li>
<li>Due to N2Subhain is resumed and N3 is the latest node, it will be resumed too</li>
</ul>
<p>We may add new subchain to N1:</p>
<div class="mermaid">flowchart LR
subgraph Nodes/Chains tree
direction LR
NodeN1(N1)
NodeN2(N2)
NodeN3(N3)
NodeN4(N4)
class NodeN1 navigation-started;
class NodeN2 navigation-resumed;
class NodeN3 navigation-resumed;
class NodeN4 navigation-started;
subgraph RootChain
direction LR
NodeN1 --&gt; NodeN2
NodeN2
end
NodeN1 --&gt; N1Subchain
NodeN2 --&gt; N2Subchain
subgraph N1Subchain
direction LR
NodeN4
end
subgraph N2Subchain
direction LR
NodeN3
end
class RootChain navigation-resumed;
class N1Subchain navigation-started;
class N2Subchain navigation-resumed;
end
</div>
<p>So, it has been added, but:</p>
<ul>
<li>Due to N1 paused state, N1Subchain have inherited it</li>
<li>Due to N1Subhain is paused, all its nodes paused too</li>
</ul>
<p>And now we may remove N2 node. This action will trigger next changes:</p>
<div class="mermaid">flowchart LR
subgraph Changes
subgraph OldNodesChainsTree [Old Nodes/Chains tree]
direction TB
OldNodeN1(N1)
OldNodeN2(N2)
OldNodeN3(N3)
OldNodeN4(N4)
class OldNodeN1 navigation-started;
class OldNodeN2 navigation-created;
class OldNodeN3 navigation-created;
class OldNodeN4 navigation-started;
subgraph OldRootChain [RootChain]
direction TB
OldNodeN1 --&gt; OldNodeN2
OldNodeN2
end
OldNodeN1 --&gt; OldN1Subchain
OldNodeN2 --&gt; OldN2Subchain
subgraph OldN1Subchain [N1Subchain]
direction TB
OldNodeN4
end
subgraph OldN2Subchain [N2Subchain]
direction TB
OldNodeN3
end
class OldRootChain navigation-resumed;
class OldN1Subchain navigation-started;
class OldN2Subchain navigation-created;
end
subgraph NewNodesChainsTree [New Nodes/Chains tree]
direction TB
NewNodeN1(N1)
NewNodeN4(N4)
class NewNodeN1 navigation-resumed;
class NewNodeN4 navigation-resumed;
subgraph NewRootChain [RootChain]
direction TB
NewNodeN1
end
NewNodeN1 ---&gt; NewN1Subchain
subgraph NewN1Subchain [N1Subchain]
direction TB
NewNodeN4
end
class NewRootChain navigation-resumed;
class NewN1Subchain navigation-resumed;
end
%% OldNodesChainsTree -.-&gt; NewNodesChainsTree
OldNodeN1-.-&gt;|Become resumed| NewNodeN1
OldNodeN4-.-&gt;|Become resumed| NewNodeN4
end
</div>
<p>What has happened:</p>
<ol>
<li>We solved to remove N2 node. Status is changing to stopped</li>
<li>N2Subchain must be stopped</li>
<li>N3 must be stopped as well</li>
</ol>
<div class="admonition tip">
<p class="admonition-title">Stopping in context of navigation means destroying</p>
</div>
<h3 id="large-tree-sample">Large tree sample<a class="headerlink" href="#large-tree-sample" title="Permanent link"></a></h3>
<div class="mermaid">flowchart TB
NodeN1(N1)
NodeN2(N2)
NodeN3(N3)
class NodeN1 navigation-started;
class NodeN2 navigation-started;
class NodeN3 navigation-resumed;
subgraph RootChain
direction TB
NodeN1--&gt;NodeN2
NodeN2--&gt;NodeN3
end
class RootChain navigation-resumed;
NodeN4(N4)
NodeN5(N5)
NodeN6(N6)
class NodeN4 navigation-started;
class NodeN5 navigation-started;
class NodeN6 navigation-started;
subgraph N2Subchain
direction TB
NodeN4--&gt;NodeN5
NodeN5--&gt;NodeN6
end
class N2Subchain navigation-started;
NodeN2 --&gt; N2Subchain
NodeN7(N7)
NodeN8(N8)
class NodeN7 navigation-started;
class NodeN8 navigation-resumed;
subgraph N3Subchain
direction TB
NodeN7 --&gt; NodeN8
end
class N3Subchain navigation-resumed;
NodeN3 --&gt; N3Subchain
NodeN9(N9)
NodeN10(N10)
class NodeN9 navigation-started;
class NodeN10 navigation-resumed;
subgraph N3Subchain2
direction TB
NodeN9 --&gt; NodeN10
end
class N3Subchain2 navigation-resumed;
NodeN3 --&gt; N3Subchain2
</div>
</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: Logging" class="md-footer__link md-footer__link--prev" href="../kslog/logging.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">
Logging
</div>
</div>
</a>
<a aria-label="Next: Getting started (TBD)" class="md-footer__link md-footer__link--next" href="getting-started.html">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
Getting started (TBD)
</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 496 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.6.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 2024 Fonticons, Inc.--><path d="M165.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.9M244.8 8C106.1 8 0 113.3 0 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.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.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"></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 6.6.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 2024 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"></path></svg>
</a>
<a class="md-social__link" href="https://t.me/InsanusMokrassar" rel="noopener" target="_blank" title="t.me">
<svg viewbox="0 0 496 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.6.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 2024 Fonticons, Inc.--><path d="M248 8C111.033 8 0 119.033 0 256s111.033 248 248 248 248-111.033 248-248S384.967 8 248 8m114.952 168.66c-3.732 39.215-19.881 134.378-28.1 178.3-3.476 18.584-10.322 24.816-16.948 25.425-14.4 1.326-25.338-9.517-39.287-18.661-21.827-14.308-34.158-23.215-55.346-37.177-24.485-16.135-8.612-25 5.342-39.5 3.652-3.793 67.107-61.51 68.335-66.746.153-.655.3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283.746-104.608 69.142-14.845 10.194-26.894 9.934c-8.855-.191-25.888-5.006-38.551-9.123-15.531-5.048-27.875-7.717-26.8-16.291q.84-6.7 18.45-13.7 108.446-47.248 144.628-62.3c68.872-28.647 83.183-33.623 92.511-33.789 2.052-.034 6.639.474 9.61 2.885a10.45 10.45 0 0 1 3.53 6.716 43.8 43.8 0 0 1 .417 9.769"></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 6.6.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 2024 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253"></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.6ce7567c.min.js", "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"}}</script>
<script src="../assets/javascripts/bundle.56dfad97.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>