
    ՟f                        d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZ ddlZddlmZ ddlmZmZmZ ddlmZmZmZmZ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' ddl(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: erddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZA ddl.mBZB  ede      ZC edede+f         ZD edd      ZE ed      ZF ed      ZG ed      ZH edd       ZIg d!ZJd"ZK G d# d ee0e1e4e2e/e3f         ZLeLe)d   e'j                  eeef   eeef   eeef   e+e'j                     f   ZNy)$zEThis module contains the Builder classes for the telegram.ext module.    )Queue)Path)TYPE_CHECKINGAnyCallable
Collection	CoroutineDictGenericOptionalTypeTypeVarUnionN)Bot)DEFAULT_FALSEDEFAULT_NONEDefaultValue)DVInputDVTypeFilePathInputHTTPVersionODVInput	SocketOpt)warn)Application)BaseUpdateProcessorSimpleUpdateProcessor)ContextTypes)ExtBot)JobQueue)Updater)BDBTCCTCDJQUD)BaseRequest)HTTPXRequest)PTBDeprecationWarning)Update)BasePersistenceBaseRateLimiterCallbackContextDefaults)RLARGSInBT)boundInJQInCCTr.   InUDInCDInBDBuilderTypeApplicationBuilder))requestrequest instance)get_updates_requestget_updates_request instance)connection_pool_sizer>   )proxyr?   )socket_optionsr@   )pool_timeoutrA   )connect_timeoutrB   )read_timeoutrC   )write_timeoutrD   )media_write_timeoutrE   )http_versionrF   ) get_updates_connection_pool_sizerG   )get_updates_proxyrH   )get_updates_socket_optionsrI   )get_updates_pool_timeoutrJ   )get_updates_connect_timeoutrK   )get_updates_read_timeoutrL   )get_updates_write_timeoutrM   )get_updates_http_versionrN   )base_file_urlrO   )base_urlrP   )tokenrQ   )defaultsrR   )arbitrary_callback_datarS   )private_keyrT   )rate_limiterzrate_limiter instance)
local_modezlocal_mode settingz5The parameter `{}` may only be set, if no {} was set.c                      e Zd ZdZdZdgdZdedefdZde	fdZ
d	edd
fdZd	edd
fdZdddeeeeeeef   fdZ	 dhdedeeeeeeeef      deeeef      defdZdededefdZdededefdZdededefdZdedd
fdZ d	ededd
fdZ!dededefdZ"dede#defdZ$dededefdZ%ded e&ee'jP                  e'jR                  f   defd!Z*ded"e+e,   defd#Z-ded$ee.   defd%Z/ded&ee.   defd'Z0ded(ee.   defd)Z1ded*ee.   defd+Z2ded,ee.   defd-Z3ded.e4defd/Z5ded0edefd1Z6ded2e#defd3Z7ded4edefd5Z8ded6e&ee'jP                  e'jR                  f   defd7Z9ded8e+e,   defd9Z:ded:ee.   defd;Z;ded<ee.   defd=Z<ded>ee.   defd?Z=ded@ee.   defdAZ>dedBe4defdCZ?	 dhdedDe&e@eAf   dEee&e@eAf      defdFZBdedGdHdefdIZCdedJe&ee#f   defdKZDdedLedefdMZEdddNeFddOfdPZGdedQdRdefdSZHdedTe&ee#dUf   defdVZIdddWeJddXfdYZKdedZd[defd\ZL	 	 	 	 	 	 did]ZMded^eeN   defd_ZOded`ePegeQeed
f   f   defdaZRdedbePegeQeed
f   f   defdcZSdeddePegeQeed
f   f   defdeZT	 	 	 	 	 	 djdfZUy
)kr9   aJ  This class serves as initializer for :class:`telegram.ext.Application` via the so called
    `builder pattern`_. To build a :class:`telegram.ext.Application`, one first initializes an
    instance of this class. Arguments for the :class:`telegram.ext.Application` to build are then
    added by subsequently calling the methods of the builder. Finally, the
    :class:`telegram.ext.Application` is built by calling :meth:`build`. In the simplest case this
    can look like the following example.

    Example:
        .. code:: python

            application = ApplicationBuilder().token("TOKEN").build()

    Please see the description of the individual methods for information on which arguments can be
    set and what the defaults are when not called. When no default is mentioned, the argument will
    not be used by default.

    Note:
        * Some arguments are mutually exclusive. E.g. after calling :meth:`token`, you can't set
          a custom bot with :meth:`bot` and vice versa.
        * Unless a custom :class:`telegram.Bot` instance is set via :meth:`bot`, :meth:`build` will
          use :class:`telegram.ext.ExtBot` for the bot.

    .. seealso:: :wiki:`Your First Bot <Extensions---Your-first-Bot>`,
        :wiki:`Builder Pattern <Builder-Pattern>`

    .. _`builder pattern`: https://en.wikipedia.org/wiki/Builder_pattern
    )(_application_class_application_kwargs_arbitrary_callback_data_base_file_url	_base_url_bot_connect_timeout_connection_pool_size_context_types	_defaults_get_updates_connect_timeout!_get_updates_connection_pool_size_get_updates_http_version_get_updates_pool_timeout_get_updates_proxy_get_updates_read_timeout_get_updates_request_get_updates_socket_options_get_updates_write_timeout_http_version
_job_queue_local_mode_media_write_timeout_persistence_pool_timeout
_post_init_post_shutdown
_post_stop_private_key_private_key_password_proxy_rate_limiter_read_timeout_request_socket_options_token_update_processor_update_queue_updater_write_timeoutselfc                 R   t        d      | _        t        d      | _        t        d      | _        t        | _        t        | _        t        | _        t        | _        t        | _	        t        | _
        t        | _        t        | _        t        | _        t        | _        t        | _        t        | _        t        | _        t        | _        t        | _        t        | _        t        | _        t        d      | _        t        | _        t        | _        t        | _        t4        | _        t4        | _        t        | _        t        t=                     | _        	 t        tA                     | _!        t        | _$        t        tK                     | _&        t        tN              | _(        i | _)        tU        d      | _+        t        | _,        d | _-        d | _.        d | _/        t        | _0        t        d      | _1        y # tD        $ r#}dtG        |      vr t        | _!        Y d }~d }~ww xY w)N zhttps://api.telegram.org/botz!https://api.telegram.org/file/bot1.1zPTB must be installed via   )max_concurrent_updates)2r   r{   r\   r[   r   r_   rv   rz   r^   rx   r   rn   rp   ry   rc   rf   ri   rb   rg   rj   re   rh   rd   rt   ru   ra   r   rZ   rm   r]   r   r}   r    rl   RuntimeErrorstrro   r   r`   r   rX   rY   r   r|   r~   rq   rr   rs   rw   rk   )r   excs     [/var/www/cvtools/html/venv/lib/python3.12/site-packages/telegram/ext/_applicationbuilder.py__init__zApplicationBuilder.__init__   s   #/#3&23Q&R+78[+\3?"CO?K1=.:/;5A!.:.:?K.O[KW(=I):F&;G':F&:F!7CE7J&-96B"-9HU%)6".	COPUPWCX	+2>xz2JDO 8D4@4P=I+=V68 6K#$7
 ,8X\\`X\8D+7+>#  	+*#c(:*DOO	+s   G: :	H&H!!H&get_updatesreturnc                    |rdnd}t        t        | | d      t              st        | | d      S t        j                  t        | | d            }t        j                  t        | | d            }|r't        j                  t        | | d            xs d}n&t        j                  t        | | d            xs d}t        | | d	      t        | | d
      t        | | d      t        | | d      d}|s| j                  |d<   |j                         D ci c]  \  }}t        |t              r|| }	}}t        j                  t        | | d            xs d}
t        d|||
|d|	S c c}}w )N_get_updates__r:   r?   r@   r>   r      rB   rC   rD   rA   rB   rC   rD   rA   rE   rF   r   )r>   r?   rF   r@    )
isinstancegetattrr   	get_valuern   itemsr)   )r   r   prefixr?   r@   r>   timeoutskeyvalueeffective_timeoutsrF   s              r   _build_requestz!ApplicationBuilder._build_request   s   $/S'$6('(:;\J4F87!344&&wtxu5E'FG%//>W0XY&&wtx?S5T'UV[Z[ !
 &&wtx?S5T'UV]Z] !
  'tx-GH#DVHL*AB$TfX]+CD#DVHL*AB	
 .2.G.GH*+ *2)9
%3ES_A`CJ
 
 $--gdvhl<S.TU^Y^ 
!5%)	

 !
 	

s   %E<>E<c                    t        | j                  t              rt        d      t	        | j                  t        j
                  | j                        t        j
                  | j                        t        j
                  | j                        t        j
                  | j                        t        j
                  | j                        t        j
                  | j                        | j                  d      | j                  d      t        j
                  | j                        t        j
                  | j                              S )NzNo bot token was set.Fr   T)rQ   rP   rO   rT   private_key_passwordrR   rS   r:   r<   rU   rV   )r   r{   r   r   r   r   r\   r[   rt   ru   ra   rZ   r   rw   rm   )r   s    r   _build_ext_botz!ApplicationBuilder._build_ext_bot  s    dkk<0677++!++DNN;&001D1DE$..t/@/@A!-!7!78R8R!S!++DNN;$0$:$:4;X;X$Y''E': $ 3 3 3 E%//0B0BC#--d.>.>?
 	
    nameNc                 f    | j                   t        urt        t        j	                  |d            y )Nbot instance)r]   r   r   _TWO_ARGS_REQformatr   r   s     r   
_bot_checkzApplicationBuilder._bot_check  s+    99L(}33D.IJJ )r   c                 j    | j                   t        d fvrt        t        j	                  |d            y )Nupdater)r~   r   r   r   r   r   s     r   _updater_checkz!ApplicationBuilder._updater_check"  s0    ==t 44}33D)DEE 5r   +ApplicationBuilder[BT, CCT, UD, CD, BD, JQ]c                 n   t        j                  | j                        }t        j                  | j                        }t	        | j
                  t               s| j
                  st	        | j                  t               r| j                         }n| j                  }t        j                  | j                        }| j
                  d}nFt        ||      }n8| j
                  }| j
                  j                  }| j
                  j                  } t        j                  | j                        d|||| j                  ||t        j                  | j                        | j                  | j                   | j"                  d
| j$                  }||j'                  |       ||j)                  |       |S )a  Builds a :class:`telegram.ext.Application` with the provided arguments.

        Calls :meth:`telegram.ext.JobQueue.set_application` and
        :meth:`telegram.ext.BasePersistence.set_bot` if appropriate.

        Returns:
            :class:`telegram.ext.Application`
        N)botupdate_queue)
r   r   r   update_processor	job_queuepersistencecontext_types	post_initpost_shutdown	post_stopr   )r   r   rl   ro   r   r~   r]   r   r}   r!   r   r   rX   r|   r`   rq   rr   rs   rY   set_applicationset_bot)r   r   r   r   r   r   applications          r   buildzApplicationBuilder.build&  sp    !**4??;	",,T->->?dmm\2dmm6K$))\2..0ii'11$2D2DEL}}$!cEmmG--##C==55L=
L<R<R##=
 =
 %!33#&001D1DEoo--oo=
 &&=
   %%k2" $r   application_classkwargsc                 *    || _         |xs i | _        | S )a  Sets a custom subclass instead of :class:`telegram.ext.Application`. The
        subclass's ``__init__`` should look like this

        .. code:: python

            def __init__(self, custom_arg_1, custom_arg_2, ..., **kwargs):
                super().__init__(**kwargs)
                self.custom_arg_1 = custom_arg_1
                self.custom_arg_2 = custom_arg_2

        Args:
            application_class (:obj:`type`): A subclass of :class:`telegram.ext.Application`
            kwargs (Dict[:obj:`str`, :obj:`object`], optional): Keyword arguments for the
                initialization. Defaults to an empty dict.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        )rX   rY   )r   r   r   s      r   r   z$ApplicationBuilder.application_class_  s    . #4#)<R r   rQ   c                 X    | j                  d       | j                  d       || _        | S )zSets the token for :attr:`telegram.ext.Application.bot`.

        Args:
            token (:obj:`str`): The token.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rQ   )r   r   r{   )r   rQ   s     r   rQ   zApplicationBuilder.tokenz  s*     	 G$r   rP   c                 X    | j                  d       | j                  d       || _        | S )a  Sets the base URL for :attr:`telegram.ext.Application.bot`. If not called,
        will default to ``'https://api.telegram.org/bot'``.

        .. seealso:: :paramref:`telegram.Bot.base_url`,
            :wiki:`Local Bot API Server <Local-Bot-API-Server>`, :meth:`base_file_url`

        Args:
            base_url (:obj:`str`): The URL.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rP   )r   r   r\   )r   rP   s     r   rP   zApplicationBuilder.base_url  s*     	
#J'!r   rO   c                 X    | j                  d       | j                  d       || _        | S )a  Sets the base file URL for :attr:`telegram.ext.Application.bot`. If not
        called, will default to ``'https://api.telegram.org/file/bot'``.

        .. seealso:: :paramref:`telegram.Bot.base_file_url`,
            :wiki:`Local Bot API Server <Local-Bot-API-Server>`, :meth:`base_url`

        Args:
            base_file_url (:obj:`str`): The URL.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rO   )r   r   r[   )r   rO   s     r   rO   z ApplicationBuilder.base_file_url  s+     	(O,+r   c           	      B   |rdnd}|dz   }g d}|s|j                  d       |D ]@  }t        t        | d| |       t              r#t	        t
        j                  ||             t        t        | d| d      t              st	        t
        j                  |d            t        t        | d| d      t              st	        t
        j                  |d            t        t        | d| d	      t              st	        t
        j                  |d	            t        t        | d| d
      t              st	        t
        j                  |d
            | j                  |       | j                  t        d fvrt	        t
        j                  |d            y )Nget_updates_r   r:   r   rE   r   r>   r?   r@   rF   updater instance)
appendr   r   r   r   r   r   r   r~   r   )r   r   r   r   r   attrs         r   _request_checkz!ApplicationBuilder._request_check  sy   #.B	!WOO12  	EDgdaxv,>?N"=#7#7d#CDD	E '$!F83G(HI<X}33D:PQRR'$!F85(9:LI}33D'BCC'$!F8>(BC\R}33D:JKLL'$!F8<(@A<P}33D.IJJ==t 44}33D:LMNN 5r   c                    |r4| j                   t        ur"t        t        j	                  d| d            | j
                  t        urt        t        j	                  |d            | j                  t        ur/t        t        j	                  |rd| d            |d            | j                  t        d fvr/t        t        j	                  |rd| d            |d            y )Nr   r=   r;   r   r   )rh   r   r   r   r   ry   r]   r~   )r   r   r   s      r   _request_param_checkz'ApplicationBuilder._request_param_check  s    444LH$$|D6%:<Z[  ==,}33D:LMNN99L($$-8l4&)N >BN  ==t 44$$k|D6%:U^_ OSU^_  5r   r:   c                 8    | j                  d       || _        | S )a  Sets a :class:`telegram.request.BaseRequest` instance for the
        :paramref:`telegram.Bot.request` parameter of :attr:`telegram.ext.Application.bot`.

        .. seealso:: :meth:`get_updates_request`

        Args:
            request (:class:`telegram.request.BaseRequest`): The request instance.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        Fr   )r   ry   )r   r:   s     r   r:   zApplicationBuilder.request  s!     	.r   r>   c                 :    | j                  dd       || _        | S )a  Sets the size of the connection pool for the
        :paramref:`~telegram.request.HTTPXRequest.connection_pool_size` parameter of
        :attr:`telegram.Bot.request`. Defaults to ``256``.

        .. include:: inclusions/pool_size_tip.rst

        .. seealso:: :meth:`get_updates_connection_pool_size`

        Args:
            connection_pool_size (:obj:`int`): The size of the connection pool.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        r>   Fr   r   )r   r_   )r   r>   s     r   r>   z'ApplicationBuilder.connection_pool_size  s%     	!!'=5!Q%9"r   	proxy_urlc                 R    t        t        dd      d       | j                  |      S )a  Legacy name for :meth:`proxy`, kept for backward compatibility.

        .. seealso:: :meth:`get_updates_proxy`

        .. deprecated:: 20.7

        Args:
            proxy_url (:obj:`str` | ``httpx.Proxy`` | ``httpx.URL``): See
                :paramref:`telegram.ext.ApplicationBuilder.proxy.proxy`.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        20.7zU`ApplicationBuilder.proxy_url` is deprecated. Use `ApplicationBuilder.proxy` instead.   
stacklevel)r   r*   r?   )r   r   s     r   r   zApplicationBuilder.proxy_url  s2     	!
 	
 zz)$$r   r?   c                 :    | j                  dd       || _        | S )a]  Sets the proxy for the :paramref:`~telegram.request.HTTPXRequest.proxy`
        parameter of :attr:`telegram.Bot.request`. Defaults to :obj:`None`.

        .. seealso:: :meth:`get_updates_proxy`

        .. versionadded:: 20.7

        Args:
            proxy (:obj:`str` | ``httpx.Proxy`` | ``httpx.URL``): The URL to a proxy
                server, a ``httpx.Proxy`` object or a ``httpx.URL`` object. See
                :paramref:`telegram.request.HTTPXRequest.proxy` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        r?   Fr   )r   rv   )r   r?   s     r   r?   zApplicationBuilder.proxy  s#      	!!wE!Br   r@   c                 :    | j                  dd       || _        | S )a*  Sets the options for the :paramref:`~telegram.request.HTTPXRequest.socket_options`
        parameter of :attr:`telegram.Bot.request`. Defaults to :obj:`None`.

        .. seealso:: :meth:`get_updates_socket_options`

        .. versionadded:: 20.7

        Args:
            socket_options (Collection[:obj:`tuple`], optional): Socket options. See
                :paramref:`telegram.request.HTTPXRequest.socket_options` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        r@   Fr   )r   rz   )r   r@   s     r   r@   z!ApplicationBuilder.socket_options.  s%     	!!'7U!K-r   rB   c                 :    | j                  dd       || _        | S )a  Sets the connection attempt timeout for the
        :paramref:`~telegram.request.HTTPXRequest.connect_timeout` parameter of
        :attr:`telegram.Bot.request`. Defaults to ``5.0``.

        .. seealso:: :meth:`get_updates_connect_timeout`

        Args:
            connect_timeout (:obj:`float`): See
                :paramref:`telegram.request.HTTPXRequest.connect_timeout` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rB   Fr   )r   r^   )r   rB   s     r   rB   z"ApplicationBuilder.connect_timeoutA  s%     	!!'8e!L /r   rC   c                 :    | j                  dd       || _        | S )a  Sets the waiting timeout for the
        :paramref:`~telegram.request.HTTPXRequest.read_timeout` parameter of
        :attr:`telegram.Bot.request`. Defaults to ``5.0``.

        .. seealso:: :meth:`get_updates_read_timeout`

        Args:
            read_timeout (:obj:`float`): See
                :paramref:`telegram.request.HTTPXRequest.read_timeout` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rC   Fr   )r   rx   )r   rC   s     r   rC   zApplicationBuilder.read_timeoutS  s$     	!!~5!I)r   rD   c                 :    | j                  dd       || _        | S )a  Sets the write operation timeout for the
        :paramref:`~telegram.request.HTTPXRequest.write_timeout` parameter of
        :attr:`telegram.Bot.request`. Defaults to ``5.0``.

        .. seealso:: :meth:`get_updates_write_timeout`

        Args:
            write_timeout (:obj:`float`): See
                :paramref:`telegram.request.HTTPXRequest.write_timeout` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rD   Fr   )r   r   )r   rD   s     r   rD   z ApplicationBuilder.write_timeoute  s$     	!!E!J+r   rE   c                 :    | j                  dd       || _        | S )a  Sets the media write operation timeout for the
        :paramref:`~telegram.request.HTTPXRequest.media_write_timeout` parameter of
        :attr:`telegram.Bot.request`. Defaults to ``20``.

        .. versionadded:: 21.0

        Args:
            media_write_timeout (:obj:`float`): See
                :paramref:`telegram.request.HTTPXRequest.media_write_timeout` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rE   Fr   )r   rn   )r   rE   s     r   rE   z&ApplicationBuilder.media_write_timeoutw  s%      	!!'<%!P$7!r   rA   c                 :    | j                  dd       || _        | S )a8  Sets the connection pool's connection freeing timeout for the
        :paramref:`~telegram.request.HTTPXRequest.pool_timeout` parameter of
        :attr:`telegram.Bot.request`. Defaults to ``1.0``.

        .. include:: inclusions/pool_size_tip.rst

        .. seealso:: :meth:`get_updates_pool_timeout`

        Args:
            pool_timeout (:obj:`float`): See
                :paramref:`telegram.request.HTTPXRequest.pool_timeout` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rA   Fr   )r   rp   )r   rA   s     r   rA   zApplicationBuilder.pool_timeout  s$      	!!~5!I)r   rF   c                 :    | j                  dd       || _        | S )a  Sets the HTTP protocol version which is used for the
        :paramref:`~telegram.request.HTTPXRequest.http_version` parameter of
        :attr:`telegram.Bot.request`. By default, HTTP/1.1 is used.

        .. seealso:: :meth:`get_updates_http_version`

        Note:
            Users have observed stability issues with HTTP/2, which happen due to how the `h2
            library handles <https://github.com/python-hyper/h2/issues/1181>`_ cancellations of
            keepalive connections. See `#3556 <https://github.com/python-telegram-bot/
            python-telegram-bot/issues/3556>`_ for a discussion.

            If you want to use HTTP/2, you must install PTB with the optional requirement
            ``http2``, i.e.

            .. code-block:: bash

               pip install "python-telegram-bot[http2]"

            Keep in mind that the HTTP/1.1 implementation may be considered the `"more
            robust option at this time" <https://www.python-httpx.org/http2#enabling-http2>`_.

        .. versionadded:: 20.1
        .. versionchanged:: 20.2
            Reset the default version to 1.1.

        Args:
            http_version (:obj:`str`): Pass ``"2"`` or ``"2.0"`` if you'd like to use HTTP/2 for
                making requests to Telegram. Defaults to ``"1.1"``, in which case HTTP/1.1 is used.

                .. versionchanged:: 20.5
                    Accept ``"2"`` as a valid value.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rF   Fr   )r   rk   )r   rF   s     r   rF   zApplicationBuilder.http_version  s%    J 	!!~5!I)r   r<   c                 8    | j                  d       || _        | S )a  Sets a :class:`telegram.request.BaseRequest` instance for the
        :paramref:`~telegram.Bot.get_updates_request` parameter of
        :attr:`telegram.ext.Application.bot`.

        .. seealso:: :meth:`request`

        Args:
            get_updates_request (:class:`telegram.request.BaseRequest`): The request instance.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        Tr   )r   rh   )r   r<   s     r   r<   z&ApplicationBuilder.get_updates_request  s"     	-$7!r   rG   c                 :    | j                  dd       || _        | S )a  Sets the size of the connection pool for the
        :paramref:`telegram.request.HTTPXRequest.connection_pool_size` parameter which is used
        for the :meth:`telegram.Bot.get_updates` request. Defaults to ``1``.

        .. seealso:: :meth:`connection_pool_size`

        Args:
            get_updates_connection_pool_size (:obj:`int`): The size of the connection pool.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        r>   Tr   )r   rc   )r   rG   s     r   rG   z3ApplicationBuilder.get_updates_connection_pool_size  s%     	!!'=4!P1Q.r   get_updates_proxy_urlc                 R    t        t        dd      d       | j                  |      S )a  Legacy name for :meth:`get_updates_proxy`, kept for backward compatibility.

        .. seealso:: :meth:`proxy`

        .. deprecated:: 20.7

        Args:
            get_updates_proxy_url (:obj:`str` | ``httpx.Proxy`` | ``httpx.URL``): See
                :paramref:`telegram.ext.ApplicationBuilder.get_updates_proxy.get_updates_proxy`.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        r   zm`ApplicationBuilder.get_updates_proxy_url` is deprecated. Use `ApplicationBuilder.get_updates_proxy` instead.r   r   )r   r*   rH   )r   r   s     r   r   z(ApplicationBuilder.get_updates_proxy_url  s6     	!B
 	
 %%&;<<r   rH   c                 :    | j                  dd       || _        | S )ac  Sets the proxy for the :paramref:`telegram.request.HTTPXRequest.proxy`
        parameter which is used for :meth:`telegram.Bot.get_updates`. Defaults to :obj:`None`.

        .. seealso:: :meth:`proxy`

        .. versionadded:: 20.7

        Args:
            proxy (:obj:`str` | ``httpx.Proxy`` | ``httpx.URL``): The URL to a proxy server,
                a ``httpx.Proxy`` object or a ``httpx.URL`` object. See
                :paramref:`telegram.request.HTTPXRequest.proxy` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        r?   Tr   )r   rf   )r   rH   s     r   rH   z$ApplicationBuilder.get_updates_proxy  s$    $ 	!!wD!A"3r   rI   c                 :    | j                  dd       || _        | S )a:  Sets the options for the :paramref:`~telegram.request.HTTPXRequest.socket_options`
        parameter of :paramref:`telegram.Bot.get_updates_request`. Defaults to :obj:`None`.

        .. seealso:: :meth:`socket_options`

        .. versionadded:: 20.7

        Args:
            get_updates_socket_options (Collection[:obj:`tuple`], optional): Socket options. See
                :paramref:`telegram.request.HTTPXRequest.socket_options` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        r@   Tr   )r   ri   )r   rI   s     r   rI   z-ApplicationBuilder.get_updates_socket_options  s%    " 	!!'7T!J+E(r   rK   c                 :    | j                  dd       || _        | S )a  Sets the connection attempt timeout for the
        :paramref:`telegram.request.HTTPXRequest.connect_timeout` parameter which is used for
        the :meth:`telegram.Bot.get_updates` request. Defaults to ``5.0``.

        .. seealso:: :meth:`connect_timeout`

        Args:
            get_updates_connect_timeout (:obj:`float`): See
                :paramref:`telegram.request.HTTPXRequest.connect_timeout` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rB   Tr   )r   rb   )r   rK   s     r   rK   z.ApplicationBuilder.get_updates_connect_timeout/  s%      	!!'8d!K,G)r   rL   c                 :    | j                  dd       || _        | S )a  Sets the waiting timeout for the
        :paramref:`telegram.request.HTTPXRequest.read_timeout` parameter which is used for the
        :meth:`telegram.Bot.get_updates` request. Defaults to ``5.0``.

        .. seealso:: :meth:`read_timeout`

        Args:
            get_updates_read_timeout (:obj:`float`): See
                :paramref:`telegram.request.HTTPXRequest.read_timeout` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rC   Tr   )r   rg   )r   rL   s     r   rL   z+ApplicationBuilder.get_updates_read_timeoutC  $      	!!~4!H)A&r   rM   c                 :    | j                  dd       || _        | S )a  Sets the write operation timeout for the
        :paramref:`telegram.request.HTTPXRequest.write_timeout` parameter which is used for
        the :meth:`telegram.Bot.get_updates` request. Defaults to ``5.0``.

        .. seealso:: :meth:`write_timeout`

        Args:
            get_updates_write_timeout (:obj:`float`): See
                :paramref:`telegram.request.HTTPXRequest.write_timeout` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rD   Tr   )r   rj   )r   rM   s     r   rM   z,ApplicationBuilder.get_updates_write_timeoutW  s$      	!!D!I*C'r   rJ   c                 :    | j                  dd       || _        | S )a$  Sets the connection pool's connection freeing timeout for the
        :paramref:`~telegram.request.HTTPXRequest.pool_timeout` parameter which is used for the
        :meth:`telegram.Bot.get_updates` request. Defaults to ``1.0``.

        .. seealso:: :meth:`pool_timeout`

        Args:
            get_updates_pool_timeout (:obj:`float`): See
                :paramref:`telegram.request.HTTPXRequest.pool_timeout` for more information.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rA   Tr   )r   re   )r   rJ   s     r   rJ   z+ApplicationBuilder.get_updates_pool_timeoutk  r   r   rN   c                 :    | j                  dd       || _        | S )a  Sets the HTTP protocol version which is used for the
        :paramref:`~telegram.request.HTTPXRequest.http_version` parameter which is used in the
        :meth:`telegram.Bot.get_updates` request. By default, HTTP/1.1 is used.

        .. seealso:: :meth:`http_version`

        Note:
            Users have observed stability issues with HTTP/2, which happen due to how the `h2
            library handles <https://github.com/python-hyper/h2/issues/1181>`_ cancellations of
            keepalive connections. See `#3556 <https://github.com/python-telegram-bot/
            python-telegram-bot/issues/3556>`_ for a discussion.

            You will also need to install the http2 dependency. Keep in mind that the HTTP/1.1
            implementation may be considered the `"more robust option at this time"
            <https://www.python-httpx.org/http2#enabling-http2>`_.

            .. code-block:: bash

               pip install httpx[http2]

        .. versionadded:: 20.1
        .. versionchanged:: 20.2
            Reset the default version to 1.1.

        Args:
            get_updates_http_version (:obj:`str`): Pass ``"2"`` or ``"2.0"`` if you'd like to use
                HTTP/2 for making requests to Telegram. Defaults to ``"1.1"``, in which case
                HTTP/1.1 is used.

                .. versionchanged:: 20.5
                    Accept ``"2"`` as a valid value.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rF   Tr   )r   rd   )r   rN   s     r   rN   z+ApplicationBuilder.get_updates_http_version  s%    L 	!!~4!H)A&r   rT   passwordc                    | j                  d       | j                  d       t        |t              r|nt	        |      j                         | _        |t        |t              r	|| _        | S t	        |      j                         | _        | S )a  Sets the private key and corresponding password for decryption of telegram passport data
        for :attr:`telegram.ext.Application.bot`.

        Examples:
            :any:`Passport Bot <examples.passportbot>`

        .. seealso:: :wiki:`Telegram Passports <Telegram-Passport>`

        Args:
            private_key (:obj:`bytes` | :obj:`str` | :obj:`pathlib.Path`): The private key or the
                file path of a file that contains the key. In the latter case, the file's content
                will be read automatically.
            password (:obj:`bytes` | :obj:`str` | :obj:`pathlib.Path`, optional): The corresponding
                password or the file path of a file that contains the password. In the latter case,
                the file's content will be read automatically.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rT   )r   r   r   bytesr   
read_bytesrt   ru   )r   rT   r   s      r   rT   zApplicationBuilder.private_key  s    0 	&M* &k59KtK?P?[?[?] 	 z(E:)1D&  *.h)B)B)DD&r   rR   r/   c                 X    | j                  d       | j                  d       || _        | S )a  Sets the :class:`telegram.ext.Defaults` instance for
        :attr:`telegram.ext.Application.bot`.

        .. seealso:: :wiki:`Adding Defaults to Your Bot <Adding-defaults-to-your-bot>`

        Args:
            defaults (:class:`telegram.ext.Defaults`): The defaults instance.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rR   )r   r   ra   )r   rR   s     r   rR   zApplicationBuilder.defaults  s*     	
#J'!r   rS   c                 X    | j                  d       | j                  d       || _        | S )aI  Specifies whether :attr:`telegram.ext.Application.bot` should allow arbitrary objects as
        callback data for :class:`telegram.InlineKeyboardButton` and how many keyboards should be
        cached in memory. If not called, only strings can be used as callback data and no data will
        be stored in memory.

        Important:
            If you want to use this feature, you must install PTB with the optional requirement
            ``callback-data``, i.e.

            .. code-block:: bash

               pip install "python-telegram-bot[callback-data]"

        Examples:
            :any:`Arbitrary callback_data Bot <examples.arbitrarycallbackdatabot>`

        .. seealso:: :wiki:`Arbitrary callback_data <Arbitrary-callback_data>`

        Args:
            arbitrary_callback_data (:obj:`bool` | :obj:`int`): If :obj:`True` is passed, the
                default cache size of ``1024`` will be used. Pass an integer to specify a different
                cache size.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rS   )r   r   rZ   )r   rS   s     r   rS   z*ApplicationBuilder.arbitrary_callback_data  s-    : 	1256(?%r   rV   c                 X    | j                  d       | j                  d       || _        | S )a  Specifies the value for :paramref:`~telegram.Bot.local_mode` for the
        :attr:`telegram.ext.Application.bot`.
        If not called, will default to :obj:`False`.

        .. seealso:: :wiki:`Local Bot API Server <Local-Bot-API-Server>`

        Args:
            local_mode (:obj:`bool`): Whether the bot should run in local mode.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rV   )r   r   rm   )r   rV   s     r   rV   zApplicationBuilder.local_mode  s+     	%L)%r   r   z-ApplicationBuilder[InBT, CCT, UD, CD, BD, JQ]c                     | j                  d       t        D ]A  \  }}t        t        | d|       t              r$t        t        j                  d|             || _        | S )aZ  Sets a :class:`telegram.Bot` instance for
        :attr:`telegram.ext.Application.bot`. Instances of subclasses like
        :class:`telegram.ext.ExtBot` are also valid.

        Args:
            bot (:class:`telegram.Bot`): The bot.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        r   r   )	r   _BOT_CHECKSr   r   r   r   r   r   r]   )r   r   r   errors       r   r   zApplicationBuilder.bot  sd     	E"& 	GKD%gdavJ7F"=#7#7u#EFF	G 	r   r   zQueue[object]c                 z    | j                   t        dfvrt        t        j	                  dd            || _        | S )a  Sets a :class:`asyncio.Queue` instance for
        :attr:`telegram.ext.Application.update_queue`, i.e. the queue that the application will
        fetch updates from. Will also be used for the :attr:`telegram.ext.Application.updater`.
        If not called, a queue will be instantiated.

        .. seealso:: :attr:`telegram.ext.Updater.update_queue`

        Args:
            update_queue (:class:`asyncio.Queue`): The queue.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        Nr   r   )r~   r   r   r   r   r}   )r   r   s     r   r   zApplicationBuilder.update_queue(  s;     ==t 44}33NDVWXX)r   concurrent_updatesr   c                 d    |du rd}n|du rd}t        |t              rt        |      }|| _        | S )aD  Specifies if and how many updates may be processed concurrently instead of one by one.
        If not called, updates will be processed one by one.

        Warning:
            Processing updates concurrently is not recommended when stateful handlers like
            :class:`telegram.ext.ConversationHandler` are used. Only use this if you are sure
            that your bot does not (explicitly or implicitly) rely on updates being processed
            sequentially.

        .. include:: inclusions/pool_size_tip.rst

        .. seealso:: :attr:`telegram.ext.Application.concurrent_updates`

        Args:
            concurrent_updates (:obj:`bool` | :obj:`int` | :class:`BaseUpdateProcessor`): Passing
                :obj:`True` will allow for ``256`` updates to be processed concurrently using
                :class:`telegram.ext.SimpleUpdateProcessor`. Pass an integer to specify a different
                number of updates that may be processed concurrently. Pass an instance of
                :class:`telegram.ext.BaseUpdateProcessor` to use that instance for handling updates
                concurrently.

                .. versionchanged:: 20.4
                    Now accepts :class:`BaseUpdateProcessor` instances.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        Tr   Fr   )r   intr   r|   )r   r   s     r   r   z%ApplicationBuilder.concurrent_updates;  sI    > %!$5(!"
 (#.!67I!J 7Ir   r   z-ApplicationBuilder[BT, CCT, UD, CD, BD, InJQ]c                     || _         | S )a  Sets a :class:`telegram.ext.JobQueue` instance for
        :attr:`telegram.ext.Application.job_queue`. If not called, a job queue will be
        instantiated if the requirements of :class:`telegram.ext.JobQueue` are installed.

        Examples:
            :any:`Timer Bot <examples.timerbot>`

        .. seealso:: :wiki:`Job Queue <Extensions---JobQueue>`

        Note:
            * :meth:`telegram.ext.JobQueue.set_application` will be called automatically by
              :meth:`build`.
            * The job queue will be automatically started and stopped by
              :meth:`telegram.ext.Application.start` and :meth:`telegram.ext.Application.stop`,
              respectively.
            * When passing :obj:`None` or when the requirements of :class:`telegram.ext.JobQueue`
              are not installed, :attr:`telegram.ext.ConversationHandler.conversation_timeout`
              can not be used, as this uses :attr:`telegram.ext.Application.job_queue` internally.

        Args:
            job_queue (:class:`telegram.ext.JobQueue`): The job queue. Pass :obj:`None` if you
                don't want to use a job queue.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        )rl   )r   r   s     r   r   zApplicationBuilder.job_queuej  s    < $r   r   zBasePersistence[Any, Any, Any]c                     || _         | S )a  Sets a :class:`telegram.ext.BasePersistence` instance for
        :attr:`telegram.ext.Application.persistence`.

        Note:
            When using a persistence, note that all
            data stored in :attr:`context.user_data <telegram.ext.CallbackContext.user_data>`,
            :attr:`context.chat_data <telegram.ext.CallbackContext.chat_data>`,
            :attr:`context.bot_data <telegram.ext.CallbackContext.bot_data>` and
            in :attr:`telegram.ext.ExtBot.callback_data_cache` must be copyable with
            :func:`copy.deepcopy`. This is due to the data being deep copied before handing it over
            to the persistence in order to avoid race conditions.

        Examples:
            :any:`Persistent Conversation Bot <examples.persistentconversationbot>`

        .. seealso:: :wiki:`Making Your Bot Persistent <Making-your-bot-persistent>`

        Warning:
            If a :class:`telegram.ext.ContextTypes` instance is set via :meth:`context_types`,
            the persistence instance must use the same types!

        Args:
            persistence (:class:`telegram.ext.BasePersistence`): The persistence instance.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        )ro   )r   r   s     r   r   zApplicationBuilder.persistence  s    < (r   c                     || _         | S )a  Sets a :class:`telegram.ext.ContextTypes` instance for
        :attr:`telegram.ext.Application.context_types`.

        Examples:
            :any:`Context Types Bot <examples.contexttypesbot>`

        Args:
            context_types (:class:`telegram.ext.ContextTypes`): The context types.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        )r`   )r   r   s     r   r   z ApplicationBuilder.context_types  s      ,r   r   c                 d   |	|| _         | S | j                  df| j                  dffD ]4  \  }}t        |t              rt        t        j                  d|             t        D ]A  \  }}t        t        | d|       t              r$t        t        j                  d|             || _         | S )aY  Sets a :class:`telegram.ext.Updater` instance for
        :attr:`telegram.ext.Application.updater`. The :attr:`telegram.ext.Updater.bot` and
        :attr:`telegram.ext.Updater.update_queue` will be used for
        :attr:`telegram.ext.Application.bot` and :attr:`telegram.ext.Application.update_queue`,
        respectively.

        Args:
            updater (:class:`telegram.ext.Updater` | :obj:`None`): The updater instance or
                :obj:`None` if no updater should be used.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        r   r   r   r   )
r~   r]   r}   r   r   r   r   r   r   r   )r   r   r   r   	attr_names        r   r   zApplicationBuilder.updater  s     ?#DMK YY'0
 	KKD% dL1"=#7#7	5#IJJ	K !, 	KIugda	{O<lK"=#7#7	5#IJJ	K  r   r   c                     || _         | S )a0  
        Sets a callback to be executed by :meth:`Application.run_polling` and
        :meth:`Application.run_webhook` *after* executing :meth:`Application.initialize` but
        *before* executing :meth:`Updater.start_polling` or :meth:`Updater.start_webhook`,
        respectively.

        Tip:
            This can be used for custom startup logic that requires to await coroutines, e.g.
            setting up the bots commands via :meth:`~telegram.Bot.set_my_commands`.

        Example:
            .. code::

                async def post_init(application: Application) -> None:
                    await application.bot.set_my_commands([('start', 'Starts the bot')])

                application = Application.builder().token("TOKEN").post_init(post_init).build()

        Note:
            |post_methods_note|

        .. seealso:: :meth:`post_stop`, :meth:`post_shutdown`

        Args:
            post_init (:term:`coroutine function`): The custom callback. Must be a
                :term:`coroutine function` and must accept exactly one positional argument, which
                is the :class:`~telegram.ext.Application`::

                    async def post_init(application: Application) -> None:

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        )rq   )r   r   s     r   r   zApplicationBuilder.post_init  s    H $r   r   c                     || _         | S )a+  
        Sets a callback to be executed by :meth:`Application.run_polling` and
        :meth:`Application.run_webhook` *after* executing :meth:`Updater.shutdown`
        and :meth:`Application.shutdown`.

        Tip:
            This can be used for custom shutdown logic that requires to await coroutines, e.g.
            closing a database connection

        Example:
            .. code::

                async def post_shutdown(application: Application) -> None:
                    await application.bot_data['database'].close()

                application = Application.builder()
                                        .token("TOKEN")
                                        .post_shutdown(post_shutdown)
                                        .build()

        Note:
            |post_methods_note|

        .. seealso:: :meth:`post_init`, :meth:`post_stop`

        Args:
            post_shutdown (:term:`coroutine function`): The custom callback. Must be a
                :term:`coroutine function` and must accept exactly one positional argument, which
                is the :class:`~telegram.ext.Application`::

                    async def post_shutdown(application: Application) -> None:

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        )rr   )r   r   s     r   r   z ApplicationBuilder.post_shutdown  s    L ,r   r   c                     || _         | S )a  
        Sets a callback to be executed by :meth:`Application.run_polling` and
        :meth:`Application.run_webhook` *after* executing :meth:`Updater.stop`
        and :meth:`Application.stop`.

        .. versionadded:: 20.1

        Tip:
            This can be used for custom stop logic that requires to await coroutines, e.g.
            sending message to a chat before shutting down the bot.

        Hint:
            The callback will be called only, if :meth:`Application.stop` was indeed called
            successfully. For example, if the application is stopped early by calling
            :meth:`Application.stop_running` within :meth:`post_init`, then the set callback will
            *not* be called.

        Example:
            .. code::

                async def post_stop(application: Application) -> None:
                    await application.bot.send_message(123456, "Shutting down...")

                application = Application.builder()
                                        .token("TOKEN")
                                        .post_stop(post_stop)
                                        .build()

        Note:
            |post_methods_note|

        .. seealso:: :meth:`post_init`, :meth:`post_shutdown`

        Args:
            post_stop (:term:`coroutine function`): The custom callback. Must be a
                :term:`coroutine function` and must accept exactly one positional argument, which
                is the :class:`~telegram.ext.Application`::

                    async def post_stop(application: Application) -> None:

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        )rs   )r   r   s     r   r   zApplicationBuilder.post_stop/  s    \ $r   c                 X    | j                  d       | j                  d       || _        | S )a  Sets a :class:`telegram.ext.BaseRateLimiter` instance for the
        :paramref:`telegram.ext.ExtBot.rate_limiter` parameter of
        :attr:`telegram.ext.Application.bot`.

        Args:
            rate_limiter (:class:`telegram.ext.BaseRateLimiter`): The rate limiter.

        Returns:
            :class:`ApplicationBuilder`: The same builder with the updated argument.
        rU   )r   r   rw   )r   rU   s     r   rU   zApplicationBuilder.rate_limiter`  s+     	'N+)r   )r   InitApplicationBuilder)N)r   r   r   z%ContextTypes[InCCT, InUD, InCD, InBD]r   z3ApplicationBuilder[BT, InCCT, InUD, InCD, InBD, JQ])r   r   rU   zBaseRateLimiter[RLARGS]r   z7ApplicationBuilder[ExtBot[RLARGS], CCT, UD, CD, BD, JQ])V__name__
__module____qualname____doc__	__slots__r   boolr(   r   r   r   r   r   r   r   r#   r$   r'   r%   r"   r&   r   r8   r   r   r   r
   objectr   rQ   rP   rO   r   r   r:   r   r>   r   r   httpxProxyURLr?   r   r   r@   floatrB   rC   rD   rE   rA   r   rF   r<   rG   r   rH   rI   rK   rL   rM   rJ   rN   r   r   rT   rR   rS   rV   r1   r   r   r   r3   r   r   r   r!   r   r   r	   r   r   r   rU   r   r   r   r9   r9   h   s:   8)IV1?f'
$ '
; '
R
 
$Ks Kt KF3 F4 F7;7	Rb"b",	-7x /3Cc3S,H IJ c6k*+ 
	6K   { c k $K   $O$ O4 O> 4 D (k K K  ; c k &% % % %0K c5;;		.I(J { ([ *Y:O T_ &k HUO P[ $; huo + $K  K $08	(; huo + ('; 'k 'k 'R+ K T_ "=@	&=K = =P[ =0.3Ceii4O.P	,7A)7L	*8@	(5=e_	(6>uo	(5=e_	(((5@(	(Z ;?##5-/0# 5!567# 
	#J{ j [ "  49$)4D 	 D $ ; $; 
9*; o + &--/4T3@U5U/V-	-^; 
9B(H	B;> 
?&k HW,= + @%%&.}iSRV>W/W&X%	%N''*2K=)CQTVZNB[3[*\'	'R//&.}iSRV>W/W&X/	/b;/ 
Cr   )Or  asyncior   pathlibr   typingr   r   r   r   r	   r
   r   r   r   r   r   r  telegram._botr   telegram._utils.defaultvaluer   r   r   telegram._utils.typesr   r   r   r   r   r   telegram._utils.warningsr   telegram.ext._applicationr   !telegram.ext._baseupdateprocessorr   r   telegram.ext._contexttypesr   telegram.ext._extbotr   telegram.ext._jobqueuer    telegram.ext._updaterr!   telegram.ext._utils.typesr"   r#   r$   r%   r&   r'   telegram.requestr(   telegram.request._httpxrequestr)   telegram.warningsr*   telegramr+   telegram.extr,   r-   r.   r/   r0   r1   r3   r4   r5   r6   r7   r8   r   r   r9   DEFAULT_TYPEr   r   r   r   <module>r     sG  & L        R R b b ) 1 X 3 ' + ) = = ( 7 3XX0 vS!vU4>2301vvvm+?@< HIS"b"b!89 IZ( t!!S#XS#XS#X**+	- r   