
    2NjO                       U d dl mZ d dlZd dlmZmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZmZ e	ZdHd
Z G d dee         Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d d e      Z# G d! d"e      Z$ G d# d$e      Z% G d% d&e      Z& G d' d(e      Z' G d) d*e      Z( G d+ d,e      Z) G d- d.e      Z* G d/ d0e      Z+ G d1 d2e      Z,i ejZ                  eejZ                  eejZ                  eejZ                  eejZ                  eejZ                  eejZ                  ee jZ                  e e!jZ                  e!e"jZ                  e"e#jZ                  e#e$jZ                  e$e%jZ                  e%e&jZ                  e&e'jZ                  e'e(jZ                  e(e)jZ                  e)e*jZ                  e*e+jZ                  e+e,jZ                  e,iZ.d3e/d4<   dId5Z0	 	 dJ	 	 	 	 	 	 	 	 	 dKd6Z1d7d8d9dLd:Z2d7d;dMd<Z3d=d>dNd?Z4d@dAdBdOdCZ5dPdDZ6d=d>	 	 	 	 	 	 	 dQdEZ7d@dAdB	 	 	 	 	 	 	 	 	 dRdFZ8dSdGZ9y)T    )annotationsN)	GeneratorIterableIterator)datetime)AnyClassVar)Self)MessageEntityType)MessageEntityUser)add_surrogateshtml_decorationmarkdown_decorationremove_surrogatesc                <    t        | j                  d            dz  S )Nz	utf-16-le   )lenencode)values    v/var/www/bonuses.adamproject.app/telegram_bots/cheremosh/venv/lib/python3.12/site-packages/aiogram/utils/formatting.pysizeofr      s    u||K()Q..    c                     e Zd ZU dZdZded<   dZ	 	 	 	 	 	 ddZed d	       Z	d
ddd	 	 	 	 	 	 	 d!dZ
d"dZddddd	 	 	 	 	 	 	 	 	 d#dZddd$dZddd$dZddd$dZddd$dZd%dZd%dZd&dZd'd(dZd)dZd*dZd+dZd,dZy)-Textz
    Simple text element
    NzClassVar[str | None]type_body_paramsc                     || _         || _        y Nr   )selfbodyparamss      r   __init__zText.__init__#   s    
 ,0
'-r   textentitiesc           	     `     | t        t        |      |rt        |d              S g        S )Nc                    | j                   S r!   offset)items    r   <lambda>z$Text.from_entities.<locals>.<lambda>0   s
    4;; r   key)r&   r'   )_unparse_entitiesr   sorted)clsr&   r'   s      r   from_entitieszText.from_entities+   sB    #D)KS.FG
 	
 Z\
 	
r   r   T_offset_sort_collect_entitiesc                  d}g }|}| j                   D ]o  }t        |t              st        |      }||z  }|t	        |      z  }2|j                  |d|      \  }}	||z  }|t	        |      z  }|s_|j                  |	       q |r1| j                  r%|j                  | j                  |||z
               |r|r|j                  d        ||fS )zS
        Render elements tree as text with entities list

        :return:
         Fr4   r+   lengthc                    | j                   S r!   r*   )entitys    r   r-   zText.render.<locals>.<lambda>Y   s
    V]] r   r.   )r   
isinstancer   strr   renderextendr   append_render_entitysort)
r"   r5   r6   r7   r&   r'   r+   node	node_textnode_entitiess
             r   r@   zText.render4   s     JJ 	3DdD)4y&,&+/;;"&7 ,7 ,(	=
 	!&++$OOM2	3  OOD//wvPWGW/XYMM:M;X~r   c               n    | j                   J d       t        d| j                   ||d| j                  S )Nz-Node without type can't be rendered as entity)r   r+   r;    )r   r   r   )r"   r+   r;   s      r   rC   zText._render_entity]   s7    yy$U&UU$Z$))F6ZT\\ZZr   
parse_mode)text_keyentities_keyreplace_parse_modeparse_mode_keyc               F    | j                         \  }}||||i}|rd||<   |S )af  
        Render element tree as keyword arguments for usage in an API call, for example:

        .. code-block:: python

            entities = Text(...)
            await message.answer(**entities.as_kwargs())

        :param text_key:
        :param entities_key:
        :param replace_parse_mode:
        :param parse_mode_key:
        :return:
        N)r@   )r"   rK   rL   rM   rN   
text_valueentities_valueresults           r   	as_kwargszText.as_kwargsa   s9    , &*[[]"
Nj."
 %)F>"r   )rM   c               *    | j                  dd|      S )af  
        Shortcut for :meth:`as_kwargs` for usage with API calls that take
        ``caption`` as a parameter.

        .. code-block:: python

            entities = Text(...)
            await message.answer_photo(**entities.as_caption_kwargs(), photo=phot)

        :param replace_parse_mode: Will be passed to :meth:`as_kwargs`.
        :return:
        captioncaption_entities)rK   rL   rM   rS   r"   rM   s     r   as_caption_kwargszText.as_caption_kwargs   s#     ~~+1  
 	
r   c               ,    | j                  ddd|      S )at  
        Shortcut for :meth:`as_kwargs` for usage with
        method :class:`aiogram.methods.send_poll.SendPoll`.

        .. code-block:: python

            entities = Text(...)
            await message.answer_poll(**entities.as_poll_question_kwargs(), options=options)

        :param replace_parse_mode: Will be passed to :meth:`as_kwargs`.
        :return:
        questionquestion_entitiesquestion_parse_moderK   rL   rN   rM   rW   rX   s     r   as_poll_question_kwargszText.as_poll_question_kwargs   s&     ~~,01	  
 	
r   c               ,    | j                  ddd|      S )a'  
        Shortcut for :meth:`as_kwargs` for usage with
        method :class:`aiogram.methods.send_poll.SendPoll`.

        .. code-block:: python

            question_entities = Text(...)
            explanation_entities = Text(...)
            await message.answer_poll(
                **question_entities.as_poll_question_kwargs(),
                options=options,
                **explanation_entities.as_poll_explanation_kwargs(),
            )

        :param replace_parse_mode: Will be passed to :meth:`as_kwargs`.
        :return:
        explanationexplanation_entitiesexplanation_parse_moder^   rW   rX   s     r   as_poll_explanation_kwargszText.as_poll_explanation_kwargs   s&    $ ~~"/31	  
 	
r   c               ,    | j                  ddd|      S )a{  
        Shortcut for :meth:`as_kwargs` for usage with
        method :class:`aiogram.methods.send_gift.SendGift`.

        .. code-block:: python

            entities = Text(...)
            await bot.send_gift(gift_id=gift_id, user_id=user_id, **entities.as_gift_text_kwargs())

        :param replace_parse_mode: Will be passed to :meth:`as_kwargs`.
        :return:
        r&   text_entitiestext_parse_moder^   rW   rX   s     r   as_gift_text_kwargszText.as_gift_text_kwargs   s&     ~~(,1	  
 	
r   c                T    | j                         \  }}t        j                  ||      S )z5
        Render elements tree as HTML markup
        )r@   r   unparser"   r&   r'   s      r   as_htmlzText.as_html   s&     h&&tX66r   c                T    | j                         \  }}t        j                  ||      S )z;
        Render elements tree as MarkdownV2 markup
        )r@   r   rj   rk   s      r   as_markdownzText.as_markdown   s&     h"**4::r   c                @     t        |       |i i | j                  |S r!   )r   r   )r"   argskwargss      r   replacezText.replace   s'    tDz4>#=dll#=f#=>>r   c                   rdnd}|j                  fd| j                  D              }|j                  d | j                  j                         D              }g }|r|j	                  |       |r|j	                  |       |j                  |      }rt        j                  d|z   dz   d      }t        |       j                   d| dS )	Nz,
z, c              3  x   K   | ]1  }t        |t              r|j                         n
t        |       3 yw))indentN)r>   r   as_pretty_stringrepr).0r,   ru   s     r   	<genexpr>z(Text.as_pretty_string.<locals>.<genexpr>   s<      
 5?tT4JD!!!0PTUYPZZ
s   7:c              3  6   K   | ]  \  }}|	| d|  y w)N=rI   )rx   kvs      r   ry   z(Text.as_pretty_string.<locals>.<genexpr>   s"     Y41a1=QCq,Ys   

z    ())	joinr   r   itemsrB   textwrapru   r   __name__)r"   ru   sepr#   r$   rp   args_strs    `     r   rv   zText.as_pretty_string   s    e4xx 



 
 Y4<<3E3E3GYYKKKK88D>th'=vFHt*%%&az33r   c                `   t        |t              rR|j                  | j                  k(  r9| j                  |j                  k(  r  t        |       g | |i | j                  S t        |       t        u r0t        |t              r  t        |       g | |i | j                  S t        | |      S r!   )r>   r   r   r   r?   )r"   others     r   __add__zText.__add__   s    eT"uzzTYY'>4<<SXS`S`C`4:<t<e<t||<<:*UC"84:;t;U;dll;;D%  r   c              #  8   K   | j                   E d {    y 7 wr!   )r   )r"   s    r   __iter__zText.__iter__   s     ::s   c                B    | j                  d      \  }}t        |      S )NF)r7   )r@   r   )r"   r&   _s      r   __len__zText.__len__  s     +++6ad|r   c                X   t        |t              sd}t        |      |j                  |j                  dk(  r%|j                   | j
                  | j                   S |j                  dn|j                  }|j                  t        |       n|j                  }||k(  r| j                         S g }d}| j                  D ]Z  }t        |      }|}	||z  }||k  r|	|kD  r n;t        d||	z
  f      }
t        |||	z
  f      }||
| }|sJ|j                  |       \  | j
                  | S )NzCan only be slicedr   )r>   slice	TypeErrorstartstoprr   r   r   maxminrB   )r"   r,   msgr   r   nodespositionrE   	node_sizecurrent_positionabnew_nodes                r   __getitem__zText.__getitem__  s2   $&&CC. JJ$**/tyy7H4<<,,ZZ'TZZ II-s4y499D=<<>!JJ 	#DD	I'	!H%$&Q 0012AY'7 789AAayHLL"	# t||U##r   r#   NodeTyper$   r   returnNone)r&   r?   r'   list[MessageEntity]r   r   )r5   intr6   boolr7   r   r   ztuple[str, list[MessageEntity]])r+   r   r;   r   r   r   )
rK   r?   rL   r?   rM   r   rN   r?   r   dict[str, Any])rM   r   r   r   )r   r?   )r"   r
   rp   r   rq   r   r   r
   )F)ru   r   r   r?   )r   r   r   r   )r   zIterator[NodeType])r   r   )r,   r   r   r   )r   
__module____qualname____doc__r   __annotations__	__slots__r%   classmethodr3   r@   rC   rS   rY   r_   rd   rh   rl   rn   rr   rv   r   r   r   r   rI   r   r   r   r      s)    "&D
%$I.. . 
	. 
 
 "&' ' 	'
  ' 
)'R[ &#'*  	
 !  
> ?C 
& EI 
( HL 
2 AE 
(7;?4&!$r   r   c                  <     e Zd ZdZej
                  Zd fdZ xZS )HashTaga   
    Hashtag element.

    .. warning::

        The value should always start with '#' symbol

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.HASHTAG`
    c                    t        |      dk7  rd}t        |      t        |d   t              sd}t        |      |d   j	                  d      s	d|d   z   f}t        |   |i | y )N   z$Hashtag can contain only one elementr   zHashtag can contain only string#r   
ValueErrorr>   r?   
startswithsuperr%   r"   r#   r$   r   	__class__s       r   r%   zHashTag.__init__4  n    t9>8CS/!$q'3'3CS/!Aw!!#&$q'M#D$)&)r   r   )	r   r   r   r   r   HASHTAGr   r%   __classcell__r   s   @r   r   r   &      	 $$D	* 	*r   r   c                  <     e Zd ZdZej
                  Zd fdZ xZS )CashTaga   
    Cashtag element.

    .. warning::

        The value should always start with '$' symbol

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.CASHTAG`
    c                    t        |      dk7  rd}t        |      t        |d   t              sd}t        |      |d   j	                  d      s	d|d   z   f}t        |   |i | y )Nr   z$Cashtag can contain only one elementr   zCashtag can contain only string$r   r   s       r   r%   zCashTag.__init__N  r   r   r   )	r   r   r   r   r   CASHTAGr   r%   r   r   s   @r   r   r   @  r   r   r   c                  (    e Zd ZdZej
                  Zy)
BotCommanda  
    Bot command element.

    .. warning::

        The value should always start with '/' symbol

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.BOT_COMMAND`
    N)r   r   r   r   r   BOT_COMMANDr   rI   r   r   r   r   Z  s    	 ((Dr   r   c                  (    e Zd ZdZej
                  Zy)Urlz
    Url element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.URL`
    N)r   r   r   r   r   URLr   rI   r   r   r   r   i  s       Dr   r   c                  (    e Zd ZdZej
                  Zy)Emailz
    Email element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.EMAIL`
    N)r   r   r   r   r   EMAILr   rI   r   r   r   r   t  s     ""Dr   r   c                  (    e Zd ZdZej
                  Zy)PhoneNumberz
    Phone number element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.PHONE_NUMBER`
    N)r   r   r   r   r   PHONE_NUMBERr   rI   r   r   r   r     s     ))Dr   r   c                  (    e Zd ZdZej
                  Zy)Boldz
    Bold element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.BOLD`
    N)r   r   r   r   r   BOLDr   rI   r   r   r   r          !!Dr   r   c                  (    e Zd ZdZej
                  Zy)Italicz
    Italic element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.ITALIC`
    N)r   r   r   r   r   ITALICr   rI   r   r   r   r     s     ##Dr   r   c                  (    e Zd ZdZej
                  Zy)	Underlinez
    Underline element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.UNDERLINE`
    N)r   r   r   r   r   	UNDERLINEr   rI   r   r   r   r     s     &&Dr   r   c                  (    e Zd ZdZej
                  Zy)Strikethroughz
    Strikethrough element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.STRIKETHROUGH`
    N)r   r   r   r   r   STRIKETHROUGHr   rI   r   r   r   r     s     **Dr   r   c                  (    e Zd ZdZej
                  Zy)Spoilerz
    Spoiler element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.SPOILER`
    N)r   r   r   r   r   SPOILERr   rI   r   r   r   r     s     $$Dr   r   c                  (    e Zd ZdZej
                  Zy)Codez
    Code element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.CODE`
    N)r   r   r   r   r   CODEr   rI   r   r   r   r     r   r   r   c                  B     e Zd ZdZej
                  Zddd fdZ xZS )Prez
    Pre element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.PRE`
    N)languagec               (    t        |   |d|i| y )Nr   r   r%   )r"   r   r#   r$   r   s       r   r%   zPre.__init__  s    $<<V<r   )r#   r   r   
str | Noner$   r   r   r   )	r   r   r   r   r   PREr   r%   r   r   s   @r   r   r     s"       D?C = =r   r   c                  <     e Zd ZdZej
                  Zd fdZ xZS )TextLinkz
    Text link element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.TEXT_LINK`
    c               (    t        |   |d|i| y )Nurlr   )r"   r   r#   r$   r   s       r   r%   zTextLink.__init__  s    $2C262r   )r#   r   r   r?   r$   r   r   r   )	r   r   r   r   r   	TEXT_LINKr   r%   r   r   s   @r   r   r     s     &&D3 3r   r   c                  <     e Zd ZdZej
                  Zd fdZ xZS )TextMentionz
    Text mention element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.TEXT_MENTION`
    c               (    t        |   |d|i| y )Nuserr   )r"   r   r#   r$   r   s       r   r%   zTextMention.__init__  s    $4T4V4r   )r#   r   r   r   r$   r   r   r   )	r   r   r   r   r   TEXT_MENTIONr   r%   r   r   s   @r   r   r     s     ))D5 5r   r   c                  <     e Zd ZdZej
                  Zd fdZ xZS )CustomEmojiz
    Custom emoji element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.CUSTOM_EMOJI`
    c               (    t        |   |d|i| y )Ncustom_emoji_idr   )r"   r   r#   r$   r   s       r   r%   zCustomEmoji.__init__   s    $JJ6Jr   )r#   r   r   r?   r$   r   r   r   )	r   r   r   r   r   CUSTOM_EMOJIr   r%   r   r   s   @r   r   r     s!     ))DK Kr   r   c                  (    e Zd ZdZej
                  Zy)
BlockQuotez
    Block quote element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.BLOCKQUOTE`
    N)r   r   r   r   r   
BLOCKQUOTEr   rI   r   r   r   r     s     ''Dr   r   c                  (    e Zd ZdZej
                  Zy)ExpandableBlockQuotez
    Expandable block quote element.

    Will be wrapped into :obj:`aiogram.types.message_entity.MessageEntity`
    with type :obj:`aiogram.enums.message_entity_type.MessageEntityType.EXPANDABLE_BLOCKQUOTE`
    N)r   r   r   r   r   EXPANDABLE_BLOCKQUOTEr   rI   r   r   r   r     s     22Dr   r   c                  P     e Zd Zej                  Zdd	 	 	 	 	 	 	 	 	 d fdZ xZS )DateTimeN)date_time_formatc               |    t        |t              rt        |j                               }t	        |   |||d| y )N)	unix_timer   )r>   r   r   	timestampr   r%   )r"   r  r   r#   r$   r   s        r   r%   zDateTime.__init__  sB     i*I//12I-	
 		
r   )
r#   r   r  zint | datetimer   r   r$   r   r   r   )r   r   r   r   	DATE_TIMEr   r%   r   r   s   @r   r   r     sM    &&D (,	

 "
 %	

 
 

 
r   r   zdict[str | None, type[Text]]
NODE_TYPESc                    t         j                  | j                  t              } ||i | j	                  h dd      S )zW
    Apply single entity to text

    :param entity:
    :param text:
    :return:
    >   r   r;   r+   F)excludewarnings)r  getr   r   
model_dump)r=   r   	node_types      r   _apply_entityr  F  sA     v{{D1I	


$@5

Q r   c           
   #    K   d|xs t        |       }t        |      D ]  \  }}|j                  dz  k  r|j                  dz  kD  rt        | |j                  dz          |j                  dz  }|j                  dz  |j                  dz  z   t        t        fd||dz   d              }t        |gt        | ||         |k  rt        | |        y y w)Nr   r   c                0    | j                   dz  xs dk  S )Nr   r   r*   )er+   s    r   r-   z#_unparse_entities.<locals>.<lambda>g  s    QXX\V[q-I r   r   r:   )	r   	enumerater+   r   r;   listfilterr  r0   )r&   r'   r+   r;   indexr=   r   sub_entitiess     `     r   r0   r0   U  s     ~ s4yF"8, 
v==1v%==1v%#D&--!2C$DEE!"V]]Q%66F#I8TY\]T]T_K`ab
t\%O
 	

 VF 344 s   C'C*r~   r9   )endr   c                    |r=g }|dd D ]  }|j                  ||g        |j                  |d   | g       t        | S g || }t        | S )z
    Wrap multiple nodes into line with :code:`\\n` at the end of line.

    :param items: Text or Any
    :param end: ending of the line, by default is :code:`\\n`
    :param sep: separator between items, by default is empty string
    :return: Text
    N)rA   r   )r  r   r   r   r,   s        r   as_liner  q  sk     #2J 	&DLL$%	&eBi%& < %<r   )r   c                x    g }|dd D ]  }|j                  || g        |j                  |d          t        | S )z^
    Wrap each element to separated lines

    :param items:
    :param sep:
    :return:
    Nr  )rA   rB   r   )r   r   r   r,   s       r   as_listr    sH     Ecr
 "dC[!"	LLr<r   z- )markerc                &     t         fd|D         S )z~
    Wrap elements as marked list

    :param items:
    :param marker: line marker, by default is '- '
    :return: Text
    c              3  6   K   | ]  }t        |        y wr!   r   )rx   r,   r  s     r   ry   z!as_marked_list.<locals>.<genexpr>  s     :DT&$':s   )r  )r  r   s   ` r   as_marked_listr    s     :E:;;r   r   z{}. r   fmtc                :    t        fdt        ||       D         S )z
    Wrap elements as numbered list

    :param items:
    :param start: initial number, by default 1
    :param fmt: number format, by default '{}. '
    :return: Text
    c              3  Z   K   | ]"  \  }}t        j                  |      |       $ y wr!   )r   format)rx   r  r,   r   s      r   ry   z#as_numbered_list.<locals>.<genexpr>  s%     ^{udT#**U+T2^s   (+)r  r  )r   r   r   s    ` r   as_numbered_listr$    s     ^iPUW\F]^__r   c                    t        | dg| S )z{
    Wrap elements as simple section, section has title and body

    :param title:
    :param body:
    :return: Text
    r~   r  )titler#   s     r   
as_sectionr'    s     t#d##r   c               ,    t        | t        |d|i      S )zw
    Wrap elements as section with marked list

    :param title:
    :param body:
    :param marker:
    :return:
    r  )r'  r  )r&  r  r#   s      r   as_marked_sectionr)    s     e^TA&ABBr   c          	     .    t        | t        |||d      S )z
    Wrap elements as section with numbered list

    :param title:
    :param body:
    :param start:
    :param fmt:
    :return:
    r  )r'  r$  )r&  r   r   r#   s       r   as_numbered_sectionr+    s     e-t5cJKKr   c                0    t        t        | d      d|      S )z
    Wrap elements pair as key-value line. (:code:`<b>{key}:</b> {value}`)

    :param key:
    :param value:
    :return: Text
    : )r   r   )r/   r   s     r   as_key_valuer/    s     S#U++r   )r   r?   r   r   )r=   r   r   r   r   r   )NN)
r&   bytesr'   r   r+   
int | Noner;   r1  r   zGenerator[NodeType, None, None])r   r   r  r?   r   r?   r   r   )r   r   r   r?   r   r   )r   r   r  r?   r   r   )r   r   r   r   r   r?   r   r   )r&  r   r#   r   r   r   )r&  r   r#   r   r  r?   r   r   )
r&  r   r#   r   r   r   r   r?   r   r   )r/   r   r   r   r   r   ):
__future__r   r   collections.abcr   r   r   r   typingr   r	   typing_extensionsr
   aiogram.enumsr   aiogram.typesr   r   aiogram.utils.text_decorationsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r0   r  r  r  r$  r'  r)  r+  r/  rI   r   r   <module>r9     sc   "  9 9    " + -  /I$8H I$X*d *4*d *4) )!$ !#D #*$ *"4 "$T $' '+D +%d %"4 "=$ =3t 35$ 5K$ K( (34 3
t 
(,IIt,LL', LL', OOZ	,
 HHc, 
JJ, k, 	IIt, KK, NNI, , LL', 	IIt, HHc, MM8,  k!," k#,$ OOZ3MM8),
( 0$ 	5
5!5 5 	5
 %58 *." & *.  48 < 56& 	`$ CCC C 
	C& 	LLL L 
	L
 
L$,r   