§
    ­eîi�£  ã                   óž  — d Z ddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZ 	 ddlmZ ddlmZ dZn# e$ r dZY nw xY w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mZ erddl m!Z! erddl"m#Z$ ddl%m&Z&  e' e(d¦  «        ¦  «        Z) ee*d¬¦  «        Z+de,de-fd„Z. G d„ de	e         ¦  «        Z/ G d„ de	e         ¦  «        Z#dS )z2This module contains the classes JobQueue and Job.é    N)ÚTYPE_CHECKINGÚAnyÚGenericÚcastÚoverload)ÚAsyncIOExecutor)ÚAsyncIOSchedulerTF)ÚUTCÚlocalize)Ú
get_logger)Úbuild_repr_with_selected_attrs)ÚJSONDict)ÚExtBot)ÚCCTÚJobCallback)ÚIterable)ÚJob)ÚApplicationé   ÚJobQueue)Ú
class_nameÚcallbackÚreturnc                 ó<   — t          | dd¦  «        p| j        j        S )a  Get the name of a callback function or callable object.

    Args:
        callback: A callable object (function, method, or callable class instance)

    Returns:
        The name of the callback, using __name__ if available, otherwise the class name.
    Ú__name__N)ÚgetattrÚ	__class__r   )r   s    úZ/home/div/.hermes/hermes-agent/venv/lib/python3.11/site-packages/telegram/ext/_jobqueue.pyÚ_get_callback_namer   7   s!   € õ �8˜Z¨Ñ.Ô.ÐM°(Ô2DÔ2MÐMó    c                   ó¬  — e Zd ZdZdZdZd3d„Zdefd„Ze	d4d	„¦   «         Z
e	defd
„¦   «         Zdej        fd„Zed5dddeddfd„¦   «         Ze	 d5deej        z  ej        z  ej        z  dedej        fd„¦   «         Z	 d5deej        z  ej        z  ej        z  dz  dedej        dz  fd„Z	 	 	 	 d6d„Zed7d„¦   «         Z	 	 	 	 	 d8dee         deej        z  ej        z  ej        z  dedz  dedz  dedz  dedz  dedz  ddfd „Z	 	 	 	 	 	 	 d9dee         d!eej        z  d"eej        z  ej        z  ej        z  dz  d#eej        z  ej        z  ej        z  dz  dedz  dedz  dedz  dedz  dedz  ddfd$„Z	 	 	 	 	 d8dee         dej        d%ededz  dedz  dedz  dedz  dedz  ddfd&„Ze dddddfdee         dej        d'e!ed(f         dedz  dedz  dedz  dedz  dedz  ddfd)„Z"	 	 	 	 d:dee         dededz  dedz  dedz  dedz  ddfd*„Z#d3d+„Z$d;d-eddfd.„Z%d<d/ee&j'        e         z  dz  de!d0         fd1„Z(dede!d0         fd2„Z)dS )=r   aÀ  This class allows you to periodically perform tasks with the bot. It is a convenience
    wrapper for the APScheduler library.

    This class is a :class:`~typing.Generic` class and accepts one type variable that specifies
    the type of the argument ``context`` of the job callbacks (:paramref:`~run_once.callback`) of
    :meth:`run_once` and the other scheduling methods.

    Important:
        If you want to use this class, you must install PTB with the optional requirement
        ``job-queue``, i.e.

        .. code-block:: bash

           pip install "python-telegram-bot[job-queue]"

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

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

    .. versionchanged:: 20.0
        To use this class, PTB must be installed via
        ``pip install "python-telegram-bot[job-queue]"``.

    Attributes:
        scheduler (:class:`apscheduler.schedulers.asyncio.AsyncIOScheduler`): The scheduler.

            Warning:
                This scheduler is configured by :meth:`set_application`. Additional configuration
                settings can be made by users. However, calling
                :meth:`~apscheduler.schedulers.base.BaseScheduler.configure` will delete any
                previous configuration settings. Therefore, please make sure to pass the values
                returned by :attr:`scheduler_configuration` to the method call in addition to your
                custom values.
                Alternatively, you can also use methods like
                :meth:`~apscheduler.schedulers.base.BaseScheduler.add_jobstore` to avoid using
                :meth:`~apscheduler.schedulers.base.BaseScheduler.configure` altogether.

            .. versionchanged:: 20.0
                Uses :class:`~apscheduler.schedulers.asyncio.AsyncIOScheduler` instead of
                :class:`~apscheduler.schedulers.background.BackgroundScheduler`

    )Ú_applicationÚ	_executorÚ	scheduler)ÚsunÚmonÚtueÚwedÚthuÚfriÚsatr   Nc                 ó’   — t           st          d¦  «        ‚d | _        t          ¦   «         | _        t          di | j        ¤Ž| _        d S )Nz\To use `JobQueue`, PTB must be installed via `pip install "python-telegram-bot[job-queue]"`.© )ÚAPS_AVAILABLEÚRuntimeErrorr"   r   r#   r	   Úscheduler_configurationr$   ©Úselfs    r   Ú__init__zJobQueue.__init__t   s_   € Ýð 	Ýð5ñô ð ð
 HLˆÔÝ(Ñ*Ô*ˆŒÝ-=ð .
ð .
ØÔ*ð.
ð .
ˆŒˆˆr    c                 ó.   — t          | | j        ¬¦  «        S )a$  Give a string representation of the JobQueue in the form ``JobQueue[application=...]``.

        As this class doesn't implement :meth:`object.__str__`, the default implementation
        will be used, which is equivalent to :meth:`__repr__`.

        Returns:
            :obj:`str`
        )Úapplication)r   r5   r1   s    r   Ú__repr__zJobQueue.__repr__�   s   € õ .¨dÀÔ@PÐQÑQÔQÐQr    ú3Application[Any, CCT, Any, Any, Any, JobQueue[CCT]]c                 ó|   — | j         €t          d¦  «        ‚|                       ¦   «         }|�|S t          d¦  «        ‚)z1The application this JobQueue is associated with.Nz)No application was set for this JobQueue.z,The application instance is no longer alive.)r"   r/   ©r2   r5   s     r   r5   zJobQueue.applicationŒ   sH   € ð ÔÐ$ÝÐJÑKÔKÐKØ×'Ò'Ñ)Ô)ˆØÐ"ØÐÝÐIÑJÔJÐJr    c                 óÐ   — t           }| j        rMt          | j        j        t
          ¦  «        r.| j        j        j        r| j        j        j        j        pt           }|d| j        idœS )a_  Provides configuration values that are used by :class:`JobQueue` for :attr:`scheduler`.

        Tip:
            Since calling
            :meth:`scheduler.configure() <apscheduler.schedulers.base.BaseScheduler.configure>`
            deletes any previous setting, please make sure to pass these values to the method call
            in addition to your custom values:

            .. code-block:: python

                scheduler.configure(..., **job_queue.scheduler_configuration)

            Alternatively, you can also use methods like
            :meth:`~apscheduler.schedulers.base.BaseScheduler.add_jobstore` to avoid using
            :meth:`~apscheduler.schedulers.base.BaseScheduler.configure` altogether.

        .. versionadded:: 20.7

        Returns:
            dict[:obj:`str`, :obj:`object`]: The configuration values as dictionary.

        Údefault)ÚtimezoneÚ	executors)	r
   r"   Ú
isinstancer5   Úbotr   ÚdefaultsÚtzinfor#   )r2   r<   s     r   r0   z JobQueue.scheduler_configuration–   sx   € õ0  #ˆàÔð	Cå˜4Ô+Ô/µÑ8Ô8ð	Cð Ô Ô$Ô-ð	Cð
 Ô'Ô+Ô4Ô;ÐB½sˆHð !Ø# T¤^Ð4ð
ð 
ð 	
r    c                 óT   — t           j                             | j        j        ¦  «        S ©N)ÚdtmÚdatetimeÚnowr$   r<   r1   s    r   Ú_tz_nowzJobQueue._tz_now»   s   € ÝŒ|×Ò ¤Ô 7Ñ8Ô8Ð8r    FÚtimeÚ	shift_dayc                 ó   — d S rC   r-   ©r2   rH   rI   s      r   Ú_parse_time_inputzJobQueue._parse_time_input¾   s   € ØNQÈcr    c                 ó   — d S rC   r-   rK   s      r   rL   zJobQueue._parse_time_inputÁ   s	   € ð
 �sr    c                 ó¾  — |€d S t          |t          t          z  ¦  «        r*|                      ¦   «         t	          j        |¬¦  «        z   S t          |t          j        ¦  «        r|                      ¦   «         |z   S t          |t          j        ¦  «        rÆt          j                             t          j         	                    |j
        p| j        j        ¬¦  «                             ¦   «         |¦  «        }|j
        €t          || j        j        ¦  «        }|r@|t          j         	                    t          ¦  «        k    r|t	          j        d¬¦  «        z  }|S |S )N)Úseconds)Útzé   )Údays)r>   ÚintÚfloatrG   rD   Ú	timedeltarH   rE   ÚcombinerF   rA   r$   r<   Údater   r
   )r2   rH   rI   Ú	date_times       r   rL   zJobQueue._parse_time_inputÈ   s-  € ð
 ˆ<Ø�4Ý�d�C¥%™KÑ(Ô(ð 	@Ø—<’<‘>”>¥C¤M¸$Ð$?Ñ$?Ô$?Ñ?Ð?Ý�d�CœMÑ*Ô*ð 	)Ø—<’<‘>”> DÑ(Ð(Ý�d�CœHÑ%Ô%ð 
	Ýœ×,Ò,Ý”× Ò  D¤KÐ$J°4´>Ô3JÐ ÑKÔK×PÒPÑRÔRÐTXñô ˆIð ÔÐ'õ % Y°´Ô0GÑHÔH�	Øð 3˜Y­#¬,×*:Ò*:½3Ñ*?Ô*?Ò?Ð?Ø�Sœ]°Ð2Ñ2Ô2Ñ2�	ØÐØˆr    r5   c                 óf   — t          j        |¦  «        | _         | j        j        di | j        ¤Ž dS )z—Set the application to be used by this JobQueue.

        Args:
            application (:class:`telegram.ext.Application`): The application.

        Nr-   )ÚweakrefÚrefr"   r$   Ú	configurer0   r9   s     r   Úset_applicationzJobQueue.set_applicationà   s:   € õ $œK¨Ñ4Ô4ˆÔØ ˆŒÔ Ð@Ð@ 4Ô#?Ð@Ð@Ð@Ð@Ð@r    Ú	job_queueúJobQueue[CCT]ÚjobúJob[CCT]c              ƒ   óJ   K  — |                      | j        ¦  «        ƒ d{V —† dS )a‘  This method is used as a callback for the APScheduler jobs.

        More precisely, the ``func`` argument of :class:`apscheduler.job.Job` is set to this method
        and the ``arg`` argument (representing positional arguments to ``func``) is set to a tuple
        containing the :class:`JobQueue` itself and the :class:`~telegram.ext.Job` instance.

        Tip:
            This method is a static method rather than a bound method. This makes the arguments
            more transparent and allows for easier handling of PTBs integration of APScheduler
            when utilizing advanced features of APScheduler.

        Hint:
            This method is effectively a wrapper for :meth:`telegram.ext.Job.run`.

        .. versionadded:: 20.4

        Args:
            job_queue (:class:`JobQueue`): The job queue that created the job.
            job (:class:`~telegram.ext.Job`): The job to run.
        N)Úrunr5   )r^   r`   s     r   Újob_callbackzJobQueue.job_callbackì   s5   è è € ð, �gŠg�iÔ+Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r    r   ÚwhenÚdataÚnameÚchat_idÚuser_idÚ
job_kwargsc           	      óö   — |si }|pt          |¦  «        }t          |||||¬¦  «        }|                      |d¬¦  «        }	 | j        j        | j        f|d|	| |f|	j        p| j        j        dœ|¤Ž}
|
|_        |S )a·  Creates a new :class:`Job` instance that runs once and adds it to the queue.

        Args:
            callback (:term:`coroutine function`): The callback function that should be executed by
                the new job. Callback signature::

                    async def callback(context: CallbackContext)

            when (:obj:`int` | :obj:`float` | :obj:`datetime.timedelta` |                                           :obj:`datetime.datetime` | :obj:`datetime.time`):
                Time in or at which the job should run. This parameter will be interpreted
                depending on its type.

                * :obj:`int` or :obj:`float` will be interpreted as "seconds from now" in which the
                  job should run.
                * :obj:`datetime.timedelta` will be interpreted as "time from now" in which the
                  job should run.
                * :obj:`datetime.datetime` will be interpreted as a specific date and time at
                  which the job should run. If the timezone (:attr:`datetime.datetime.tzinfo`) is
                  :obj:`None`, the default timezone of the bot will be used, which is UTC unless
                  :attr:`telegram.ext.Defaults.tzinfo` is used.
                * :obj:`datetime.time` will be interpreted as a specific time of day at which the
                  job should run. This could be either today or, if the time has already passed,
                  tomorrow. If the timezone (:attr:`datetime.time.tzinfo`) is :obj:`None`, the
                  default timezone of the bot will be used, which is UTC unless
                  :attr:`telegram.ext.Defaults.tzinfo` is used.

            chat_id (:obj:`int`, optional): Chat id of the chat associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.chat_data` will
                be available in the callback.

                .. versionadded:: 20.0

            user_id (:obj:`int`, optional): User id of the user associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.user_data` will
                be available in the callback.

                .. versionadded:: 20.0
            data (:obj:`object`, optional): Additional data needed for the callback function.
                Can be accessed through :attr:`Job.data` in the callback. Defaults to
                :obj:`None`.

                .. versionchanged:: 20.0
                    Renamed the parameter ``context`` to :paramref:`data`.
            name (:obj:`str`, optional): The name of the new job. Defaults to
                :external:attr:`callback.__name__ <definition.__name__>`.
            job_kwargs (:obj:`dict`, optional): Arbitrary keyword arguments to pass to the
                :meth:`apscheduler.schedulers.base.BaseScheduler.add_job()`.

        Returns:
            :class:`telegram.ext.Job`: The new :class:`Job` instance that has been added to the job
            queue.

        ©r   rf   rg   rh   ri   T)rI   rW   )rg   ÚtriggerÚrun_dateÚargsr<   )	r   r   rL   r$   Úadd_jobrd   rA   r<   Ú_job)r2   r   re   rf   rg   rh   ri   rj   r`   rX   Újs              r   Úrun_oncezJobQueue.run_once  s´   € ð@ ð 	ØˆJàÐ3Õ)¨(Ñ3Ô3ˆÝ˜8¨$°TÀ7ÐT[Ð\Ñ\Ô\ˆØ×*Ò*¨4¸4Ð*Ñ@Ô@ˆ	à"ˆDŒNÔ"ØÔð
àØØØ˜�ØÔ%Ð@¨¬Ô)@ð
ð 
ð ð
ð 
ˆð ˆŒØˆ
r    ÚintervalÚfirstÚlastc
           
      óŠ  — |	si }	|pt          |¦  «        }t          |||||¬¦  «        }
|                      |¦  «        }|                      |¦  «        }|r|r||k     rt          d¦  «        ‚t	          |t
          j        ¦  «        r|                     ¦   «         } | j        j	        | j
        fd| |
f||||dœ|	¤Ž}||
_        |
S )a~  Creates a new :class:`Job` instance that runs at specified intervals and adds it to the
        queue.

        Note:
            For a note about DST, please see the documentation of `APScheduler`_.

        .. _`APScheduler`: https://apscheduler.readthedocs.io/en/stable/modules/triggers/cron.html
                           #daylight-saving-time-behavior

        Args:
            callback (:term:`coroutine function`): The callback function that should be executed by
                the new job. Callback signature::

                    async def callback(context: CallbackContext)

            interval (:obj:`int` | :obj:`float` | :obj:`datetime.timedelta`): The interval in which
                the job will run. If it is an :obj:`int` or a :obj:`float`, it will be interpreted
                as seconds.
            first (:obj:`int` | :obj:`float` | :obj:`datetime.timedelta` |                                           :obj:`datetime.datetime` | :obj:`datetime.time`, optional):
                Time in or at which the job should run. This parameter will be interpreted
                depending on its type.

                * :obj:`int` or :obj:`float` will be interpreted as "seconds from now" in which the
                  job should run.
                * :obj:`datetime.timedelta` will be interpreted as "time from now" in which the
                  job should run.
                * :obj:`datetime.datetime` will be interpreted as a specific date and time at
                  which the job should run. If the timezone (:attr:`datetime.datetime.tzinfo`) is
                  :obj:`None`, the default timezone of the bot will be used.
                * :obj:`datetime.time` will be interpreted as a specific time of day at which the
                  job should run. This could be either today or, if the time has already passed,
                  tomorrow. If the timezone (:attr:`datetime.time.tzinfo`) is :obj:`None`, the
                  default timezone of the bot will be used, which is UTC unless
                  :attr:`telegram.ext.Defaults.tzinfo` is used.

                Defaults to :paramref:`interval`

                Note:
                    Setting :paramref:`first` to ``0``, ``datetime.datetime.now()`` or another
                    value that indicates that the job should run immediately will not work due
                    to how the APScheduler library works. If you want to run a job immediately,
                    we recommend to use an approach along the lines of::

                        job = context.job_queue.run_repeating(callback, interval=5)
                        await job.run(context.application)

                    .. seealso:: :meth:`telegram.ext.Job.run`

            last (:obj:`int` | :obj:`float` | :obj:`datetime.timedelta` |                                           :obj:`datetime.datetime` | :obj:`datetime.time`, optional):
                Latest possible time for the job to run. This parameter will be interpreted
                depending on its type. See :paramref:`first` for details.

                If :paramref:`last` is :obj:`datetime.datetime` or :obj:`datetime.time` type
                and ``last.tzinfo`` is :obj:`None`, the default timezone of the bot will be
                assumed, which is UTC unless :attr:`telegram.ext.Defaults.tzinfo` is used.

                Defaults to :obj:`None`.
            data (:obj:`object`, optional): Additional data needed for the callback function.
                Can be accessed through :attr:`Job.data` in the callback. Defaults to
                :obj:`None`.

                .. versionchanged:: 20.0
                    Renamed the parameter ``context`` to :paramref:`data`.
            name (:obj:`str`, optional): The name of the new job. Defaults to
                :external:attr:`callback.__name__ <definition.__name__>`.
            chat_id (:obj:`int`, optional): Chat id of the chat associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.chat_data` will
                be available in the callback.

                .. versionadded:: 20.0

            user_id (:obj:`int`, optional): User id of the user associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.user_data` will
                be available in the callback.

                .. versionadded:: 20.0
            job_kwargs (:obj:`dict`, optional): Arbitrary keyword arguments to pass to the
                :meth:`apscheduler.schedulers.base.BaseScheduler.add_job()`.

        Returns:
            :class:`telegram.ext.Job`: The new :class:`Job` instance that has been added to the job
            queue.

        rl   z"'last' must not be before 'first'!rt   )rm   ro   Ú
start_dateÚend_daterO   rg   )r   r   rL   Ú
ValueErrorr>   rD   rU   Útotal_secondsr$   rp   rd   rq   )r2   r   rt   ru   rv   rf   rg   rh   ri   rj   r`   Údt_firstÚdt_lastrr   s                 r   Úrun_repeatingzJobQueue.run_repeatingX  s  € ðD ð 	ØˆJàÐ3Õ)¨(Ñ3Ô3ˆÝ˜8¨$°TÀ7ÐT[Ð\Ñ\Ô\ˆà×)Ò)¨%Ñ0Ô0ˆØ×(Ò(¨Ñ.Ô.ˆàð 	C�xð 	C G¨hÒ$6Ð$6ÝÐAÑBÔBÐBå�h¥¤Ñ.Ô.ð 	0Ø×-Ò-Ñ/Ô/ˆHà"ˆDŒNÔ"ØÔð	
àØ˜�ØØØØð	
ð 	
ð ð	
ð 	
ˆð ˆŒØˆ
r    Údayc	                 óü   — |si }|pt          |¦  «        }t          |||||¬¦  «        }	 | j        j        | j        fd| |	f||dk    rdn||j        |j        |j        |j        p| j        j	        dœ|¤Ž}
|
|	_
        |	S )a¾	  Creates a new :class:`Job` that runs on a monthly basis and adds it to the queue.

        .. versionchanged:: 20.0
            The ``day_is_strict`` argument was removed. Instead one can now pass ``-1`` to the
            :paramref:`day` parameter to have the job run on the last day of the month.

        Args:
            callback (:term:`coroutine function`): The callback function that should be executed by
                the new job. Callback signature::

                    async def callback(context: CallbackContext)

            when (:obj:`datetime.time`): Time of day at which the job should run. If the timezone
                (``when.tzinfo``) is :obj:`None`, the default timezone of the bot will be used,
                which is UTC unless :attr:`telegram.ext.Defaults.tzinfo` is used.
            day (:obj:`int`): Defines the day of the month whereby the job would run. It should
                be within the range of ``1`` and ``31``, inclusive. If a month has fewer days than
                this number, the job will not run in this month. Passing ``-1`` leads to the job
                running on the last day of the month.
            data (:obj:`object`, optional): Additional data needed for the callback function.
                Can be accessed through :attr:`Job.data` in the callback. Defaults to
                :obj:`None`.

                .. versionchanged:: 20.0
                    Renamed the parameter ``context`` to :paramref:`data`.
            name (:obj:`str`, optional): The name of the new job. Defaults to
                :external:attr:`callback.__name__ <definition.__name__>`.
            chat_id (:obj:`int`, optional): Chat id of the chat associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.chat_data` will
                be available in the callback.

                .. versionadded:: 20.0

            user_id (:obj:`int`, optional): User id of the user associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.user_data` will
                be available in the callback.

                .. versionadded:: 20.0
            job_kwargs (:obj:`dict`, optional): Arbitrary keyword arguments to pass to the
                :meth:`apscheduler.schedulers.base.BaseScheduler.add_job()`.

        Returns:
            :class:`telegram.ext.Job`: The new :class:`Job` instance that has been added to the job
            queue.

        rl   Úcronéÿÿÿÿrv   )rm   ro   rg   r   ÚhourÚminuteÚsecondr<   )r   r   r$   rp   rd   rƒ   r„   r…   rA   r<   rq   )r2   r   re   r   rf   rg   rh   ri   rj   r`   rr   s              r   Úrun_monthlyzJobQueue.run_monthly×  s¶   € ðr ð 	ØˆJàÐ3Õ)¨(Ñ3Ô3ˆÝ˜8¨$°TÀ7ÐT[Ð\Ñ\Ô\ˆà"ˆDŒNÔ"ØÔð
àØ˜�ØØ š)˜)��¨Ø”Ø”;Ø”;Ø”[Ð; D¤NÔ$;ð
ð 
ð ð
ð 
ˆð ˆŒØˆ
r    rR   .c	                 ó,  ‡ — |si }|pt          |¦  «        }t          |||||¬¦  «        }	 ‰ j        j        ‰ j        f|‰ |	fdd                     ˆ fd„|D ¦   «         ¦  «        |j        |j        |j        |j	        p‰ j        j
        dœ|¤Ž}
|
|	_        |	S )aÿ	  Creates a new :class:`Job` that runs on a daily basis and adds it to the queue.

        Note:
            For a note about DST, please see the documentation of `APScheduler`_.

        .. _`APScheduler`: https://apscheduler.readthedocs.io/en/stable/modules/triggers/cron.html
                           #daylight-saving-time-behavior

        Args:
            callback (:term:`coroutine function`): The callback function that should be executed by
                the new job. Callback signature::

                    async def callback(context: CallbackContext)

            time (:obj:`datetime.time`): Time of day at which the job should run. If the timezone
                (:obj:`datetime.time.tzinfo`) is :obj:`None`, the default timezone of the bot will
                be used, which is UTC unless :attr:`telegram.ext.Defaults.tzinfo` is used.
            days (tuple[:obj:`int`], optional): Defines on which days of the week the job should
                run (where ``0-6`` correspond to sunday - saturday). By default, the job will run
                every day.

                .. versionchanged:: 20.0
                    Changed day of the week mapping of 0-6 from monday-sunday to sunday-saturday.

            data (:obj:`object`, optional): Additional data needed for the callback function.
                Can be accessed through :attr:`Job.data` in the callback. Defaults to
                :obj:`None`.

                .. versionchanged:: 20.0
                    Renamed the parameter ``context`` to :paramref:`data`.
            name (:obj:`str`, optional): The name of the new job. Defaults to
                :external:attr:`callback.__name__ <definition.__name__>`.
            chat_id (:obj:`int`, optional): Chat id of the chat associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.chat_data` will
                be available in the callback.

                .. versionadded:: 20.0

            user_id (:obj:`int`, optional): User id of the user associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.user_data` will
                be available in the callback.

                .. versionadded:: 20.0
            job_kwargs (:obj:`dict`, optional): Arbitrary keyword arguments to pass to the
                :meth:`apscheduler.schedulers.base.BaseScheduler.add_job()`.

        Returns:
            :class:`telegram.ext.Job`: The new :class:`Job` instance that has been added to the job
            queue.

        rl   r�   Ú,c                 ó*   •— g | ]}‰j         |         ‘ŒS r-   )Ú_CRON_MAPPING)Ú.0Údr2   s     €r   ú
<listcomp>z&JobQueue.run_daily.<locals>.<listcomp>n  s!   ø€ Ð!FÐ!FÐ!F¸A $Ô"4°QÔ"7Ð!FÐ!FÐ!Fr    )rg   ro   rm   Úday_of_weekrƒ   r„   r…   r<   )r   r   r$   rp   rd   Újoinrƒ   r„   r…   rA   r<   rq   )r2   r   rH   rR   rf   rg   rh   ri   rj   r`   rr   s   `          r   Ú	run_dailyzJobQueue.run_daily%  sÌ   ø€ ð| ð 	ØˆJàÐ3Õ)¨(Ñ3Ô3ˆÝ˜8¨$°TÀ7ÐT[Ð\Ñ\Ô\ˆà"ˆDŒNÔ"ØÔð
àØ˜�ØØŸšÐ!FÐ!FÐ!FÐ!FÀÐ!FÑ!FÔ!FÑGÔGØ”Ø”;Ø”;Ø”[Ð; D¤NÔ$;ð
ð 
ð ð
ð 
ˆð ˆŒØˆ
r    c                 ó˜   — |pt          |¦  «        }t          |||||¬¦  «        } | j        j        | j        f| |f|dœ|¤Ž}||_        |S )aL  Creates a new custom defined :class:`Job`.

        Args:
            callback (:term:`coroutine function`): The callback function that should be executed by
                the new job. Callback signature::

                    async def callback(context: CallbackContext)

            job_kwargs (:obj:`dict`): Arbitrary keyword arguments. Used as arguments for
                :meth:`apscheduler.schedulers.base.BaseScheduler.add_job`.
            data (:obj:`object`, optional): Additional data needed for the callback function.
                Can be accessed through :attr:`Job.data` in the callback. Defaults to
                :obj:`None`.

                .. versionchanged:: 20.0
                    Renamed the parameter ``context`` to :paramref:`data`.
            name (:obj:`str`, optional): The name of the new job. Defaults to
                :external:attr:`callback.__name__ <definition.__name__>`.
            chat_id (:obj:`int`, optional): Chat id of the chat associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.chat_data` will
                be available in the callback.

                .. versionadded:: 20.0

            user_id (:obj:`int`, optional): User id of the user associated with this job. If
                passed, the corresponding :attr:`~telegram.ext.CallbackContext.user_data` will
                be available in the callback.

                .. versionadded:: 20.0

        Returns:
            :class:`telegram.ext.Job`: The new :class:`Job` instance that has been added to the job
            queue.

        rl   )ro   rg   )r   r   r$   rp   rd   rq   )	r2   r   rj   rf   rg   rh   ri   r`   rr   s	            r   Ú
run_customzJobQueue.run_customy  sh   € ðX Ð3Õ)¨(Ñ3Ô3ˆÝ˜8¨$°TÀ7ÐT[Ð\Ñ\Ô\ˆà"ˆDŒNÔ" 4Ô#4Ð`¸DÀ#¸;ÈTÐ`Ð`ÐU_Ð`Ð`ˆàˆŒØˆ
r    c              ƒ   óX   K  — | j         j        s| j                              ¦   «          dS dS )z+Starts the :class:`~telegram.ext.JobQueue`.N)r$   ÚrunningÚstartr1   s    r   r•   zJobQueue.start­  s9   è è € ð Œ~Ô%ð 	#ØŒN× Ò Ñ"Ô"Ð"Ð"Ð"ð	#ð 	#r    TÚwaitc              ƒ   óÖ   K  — |r!t          j        | j        j        ddiŽƒ d{V —† | j        j        r7| j                             |¬¦  «         t          j        d¦  «        ƒ d{V —† dS dS )zÛShuts down the :class:`~telegram.ext.JobQueue`.

        Args:
            wait (:obj:`bool`, optional): Whether to wait until all currently running jobs
                have finished. Defaults to :obj:`True`.

        Úreturn_exceptionsTN)r–   g{®Gáz„?)ÚasyncioÚgatherr#   Ú_pending_futuresr$   r”   ÚshutdownÚsleep)r2   r–   s     r   ÚstopzJobQueue.stop³  s®   è è € ð ð 	å”.Ø”Ô0ðà"&ðð ð ð ð ð ð ð ð ð Œ>Ô!ð 	&ØŒN×#Ò#¨Ð#Ñ.Ô.Ð.õ ”- Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð		&ð 	&r    Úpattern)ra   .c                 ó¢   ‡— d„ | j                              ¦   «         D ¦   «         }‰€t          |¦  «        S t          ˆfd„|D ¦   «         ¦  «        S )a%  Returns a tuple of all *scheduled* jobs that are currently in the :class:`JobQueue`.

        Args:
            pattern (:obj:`str` | :obj:`re.Pattern`, optional): A regular expression pattern. If
                passed, only jobs whose name matches the pattern will be returned.
                Defaults to :obj:`None`.

                Hint:
                    This uses :func:`re.search` and not :func:`re.match`.

                .. versionadded:: 21.10

        Returns:
            tuple[:class:`Job`]: Tuple of all *scheduled* jobs.
        c              3   óJ   K  — | ]}t                                |¦  «        V — Œd S rC   )r   Úfrom_aps_job)r‹   r`   s     r   ú	<genexpr>z JobQueue.jobs.<locals>.<genexpr>Ú  sA   è è € ð )
ð )
Ø&)�C×Ò˜SÑ!Ô!ð)
ð )
ð )
ð )
ð )
ð )
r    Nc              3   ó‚   •K  — | ]9}|j         ¯	t          j        ‰¦  «                             |j         ¦  «        ¯5|V — Œ:d S rC   )rg   ÚreÚcompileÚsearch)r‹   r`   rŸ   s     €r   r£   z JobQueue.jobs.<locals>.<genexpr>ß  sb   øè è € ð 
ð 
Ø¨c¬hð
Ý;=¼:ÀgÑ;NÔ;N×;UÒ;UÐVYÔV^Ñ;_Ô;_ð
Øð
ð 
ð 
ð 
ð 
ð 
r    )r$   Úget_jobsÚtuple)r2   rŸ   Újobs_generators    ` r   ÚjobszJobQueue.jobsÊ  s|   ø€ ð )
ð )
Ø-1¬^×-DÒ-DÑ-FÔ-Fð)
ñ )
ô )
ˆð ˆ?Ý˜Ñ(Ô(Ð(Ýð 
ð 
ð 
ð 
Ø)ð
ñ 
ô 
ñ 
ô 
ð 	
r    c                 óX   — |                       dt          j        |¦  «        › d�¦  «        S )af  Returns a tuple of all *scheduled* jobs with the given name that are currently
        in the :class:`JobQueue`.

        Hint:
            This method is a convenience wrapper for :meth:`jobs` with a pattern that matches the
            given name.

        Returns:
            tuple[:class:`Job`]: Tuple of all *scheduled* jobs matching the name.
        ú^ú$)r«   r¥   Úescape)r2   rg   s     r   Úget_jobs_by_namezJobQueue.get_jobs_by_nameã  s*   € ð �yŠyÐ/�RœY t™_œ_Ð/Ð/Ð/Ñ0Ô0Ð0r    ©r   N)r   r7   )F©r5   r7   r   N)r^   r_   r`   ra   r   N)NNNNN)NNNNNNN©NNNN)TrC   )*r   Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__rŠ   r3   Ústrr6   Úpropertyr5   r   r0   rD   rE   rG   r   ÚboolrL   rT   rU   rH   r]   Ústaticmethodrd   r   r   ÚobjectrS   rs   r~   r†   Ú	_ALL_DAYSr©   r�   r’   r•   rž   r¥   ÚPatternr«   r°   r-   r    r   r   r   C   s   € € € € € ð+ð +ðZ ;€IØE€Mð
ð 
ð 
ð 
ð	R˜#ð 	Rð 	Rð 	Rð 	Rð ðKð Kð Kñ „XðKð ð"
¨ð "
ð "
ð "
ñ „Xð"
ðH9˜œð 9ð 9ð 9ð 9ð ØQÐQ dÐQ°tÐQÈÐQÐQÐQñ „XØQàð  ðð à�c”mÑ# c¤lÑ2°S´XÑ=ðð ðð 
Œð	ð ð ñ „Xðð  ðð à�c”mÑ# c¤lÑ2°S´XÑ=ÀÑDðð ðð 
Œ˜Ñ	ð	ð ð ð ð0
AØPð
Aà	ð
Að 
Að 
Að 
Að ð-ð -ð -ñ „\ð-ð6 #ØØ"Ø"Ø&*ðRð Rà˜cÔ"ðRð �c”mÑ# c¤lÑ2°S´XÑ=ðRð �t‰mð	Rð
 �D‰jðRð �t‘ðRð �t‘ðRð ˜t‘OðRð 
ðRð Rð Rð Rðp IMØGKØ"ØØ"Ø"Ø&*ð}ð }à˜cÔ"ð}ð ˜#œ-Ñ'ð}ð �s”}Ñ$ s¤|Ñ3°c´hÑ>ÀÑEð	}ð
 �c”mÑ# c¤lÑ2°S´XÑ=ÀÑDð}ð �t‰mð}ð �D‰jð}ð �t‘ð}ð �t‘ð}ð ˜t‘Oð}ð 
ð}ð }ð }ð }ðH #ØØ"Ø"Ø&*ðLð Là˜cÔ"ðLð ŒhðLð ð	Lð
 �t‰mðLð �D‰jðLð �t‘ðLð �t‘ðLð ˜t‘OðLð 
ðLð Lð Lð Lðd !*Ø"ØØ"Ø"Ø&*ðRð Rà˜cÔ"ðRð ŒhðRð �C˜�HŒoð	Rð
 �t‰mðRð �D‰jðRð �t‘ðRð �t‘ðRð ˜t‘OðRð 
ðRð Rð Rð Rðp #ØØ"Ø"ð2ð 2à˜cÔ"ð2ð ð2ð �t‰mð	2ð
 �D‰jð2ð �t‘ð2ð �t‘ð2ð 
ð2ð 2ð 2ð 2ðh#ð #ð #ð #ð&ð &˜tð &¨tð &ð &ð &ð &ð.
ð 
˜C "¤*¨S¤/Ñ1°DÑ8ð 
ÀEÈ/ÔDZð 
ð 
ð 
ð 
ð21 Sð 1¨U°?Ô-Cð 1ð 1ð 1ð 1ð 1ð 1r    c                   ó~  — e Zd ZdZdZ	 	 	 	 d dee         dedz  dedz  de	dz  de	dz  f
d	„Z
d
edefd„Zdedefd„Zde	fd„Zdefd„Zed!d„¦   «         Zedefd„¦   «         Zedefd„¦   «         Zej        deddfd„¦   «         Zedej        dz  fd„¦   «         Zed"d„¦   «         Z	 	 	 	 d#d„Z	 	 	 	 d#d„Zd$d„ZdS )%r   aþ
  This class is a convenience wrapper for the jobs held in a :class:`telegram.ext.JobQueue`.
    With the current backend APScheduler, :attr:`job` holds a :class:`apscheduler.job.Job`
    instance.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :class:`id <apscheduler.job.Job>` is equal.

    This class is a :class:`~typing.Generic` class and accepts one type variable that specifies
    the type of the argument ``context`` of :paramref:`callback`.

    Important:
        If you want to use this class, you must install PTB with the optional requirement
        ``job-queue``, i.e.

        .. code-block:: bash

           pip install "python-telegram-bot[job-queue]"

    Note:
        All attributes and instance methods of :attr:`job` are also directly available as
        attributes/methods of the corresponding :class:`telegram.ext.Job` object.

    Warning:
        This class should not be instantiated manually.
        Use the methods of :class:`telegram.ext.JobQueue` to schedule jobs.

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

    .. versionchanged:: 20.0

       * Removed argument and attribute ``job_queue``.
       * Renamed ``Job.context`` to :attr:`Job.data`.
       * Removed argument ``job``
       * To use this class, PTB must be installed via
         ``pip install "python-telegram-bot[job-queue]"``.

    Args:
        callback (:term:`coroutine function`): The callback function that should be executed by the
            new job. Callback signature::

                async def callback(context: CallbackContext)

        data (:obj:`object`, optional): Additional data needed for the :paramref:`callback`
            function. Can be accessed through :attr:`Job.data` in the callback. Defaults to
            :obj:`None`.
        name (:obj:`str`, optional): The name of the new job. Defaults to
            :external:obj:`callback.__name__ <definition.__name__>`.
        chat_id (:obj:`int`, optional): Chat id of the chat that this job is associated with.

            .. versionadded:: 20.0
        user_id (:obj:`int`, optional): User id of the user that this job is associated with.

            .. versionadded:: 20.0
    Attributes:
        callback (:term:`coroutine function`): The callback function that should be executed by the
            new job.
        data (:obj:`object`): Optional. Additional data needed for the :attr:`callback` function.
        name (:obj:`str`): Optional. The name of the new job.
        chat_id (:obj:`int`): Optional. Chat id of the chat that this job is associated with.

            .. versionadded:: 20.0
        user_id (:obj:`int`): Optional. User id of the user that this job is associated with.

            .. versionadded:: 20.0
    )Ú_enabledrq   Ú_removedr   rh   rf   rg   ri   Nr   rf   rg   rh   ri   c                 óÜ   — t           st          d¦  «        ‚|| _        || _        |pt	          |¦  «        | _        || _        || _        d| _        d| _	        t          dd ¦  «        | _        d S )NzWTo use `Job`, PTB must be installed via `pip install "python-telegram-bot[job-queue]"`.FÚAPSJob)r.   r/   r   rf   r   rg   rh   ri   rÁ   rÀ   r   rq   )r2   r   rf   rg   rh   ri   s         r   r3   zJob.__init__?  sy   € õ ð 	Ýð5ñô ð ð
 +3ˆŒØ#'ˆŒ	Ø $Ð DÕ(:¸8Ñ(DÔ(DˆŒ	Ø#*ˆŒØ#*ˆŒàˆŒØˆŒå˜ 4Ñ(Ô(ˆŒ	ˆ	ˆ	r    Úitemr   c                 óz   — 	 t          | j        |¦  «        S # t          $ r}t          d|› d�¦  «        |‚d}~ww xY w)aú  Overrides :py:meth:`object.__getattr__` to get specific attribute of the
        :class:`telegram.ext.Job` object or of its attribute :class:`apscheduler.job.Job`,
        if exists.

        Args:
           item (:obj:`str`): The name of the attribute.

        Returns:
            :object: The value of the attribute.

        Raises:
            :exc:`AttributeError`: If the attribute does not exist in both
                :class:`telegram.ext.Job` and :class:`apscheduler.job.Job` objects.
        zDNeither 'telegram.ext.Job' nor 'apscheduler.job.Job' has attribute 'ú'N)r   r`   ÚAttributeError)r2   rÄ   Úexcs      r   Ú__getattr__zJob.__getattr__X  s\   € ð	Ý˜4œ8 TÑ*Ô*Ð*øÝð 	ð 	ð 	Ý Ø^ÐW[Ð^Ð^Ð^ñô àðøøøøð	øøøs   ‚ —
:¡5µ:Úotherc                 óP   — t          || j        ¦  «        r| j        |j        k    S dS )aP  Defines equality condition for the :class:`telegram.ext.Job` object.
        Two objects of this class are considered to be equal if their
        :class:`id <apscheduler.job.Job>` are equal.

        Returns:
            :obj:`True` if both objects have :paramref:`id` parameters identical.
            :obj:`False` otherwise.
        F)r>   r   Úid)r2   rÊ   s     r   Ú__eq__z
Job.__eq__n  s,   € õ �e˜Tœ^Ñ,Ô,ð 	'Ø”7˜eœhÒ&Ð&Øˆur    c                 ó*   — t          | j        ¦  «        S )zèBuilds a hash value for this object such that the hash of two objects is
        equal if and only if the objects are equal in terms of :meth:`__eq__`.

        Returns:
            :obj:`int`: The hash value of the object.
        )ÚhashrÌ   r1   s    r   Ú__hash__zJob.__hash__{  s   € õ �D”G‰}Œ}Ðr    c                 ó€   — t          | | j        j        | j        t	          | j        ¦  «        | j        j        ¬¦  «        S )a>  Give a string representation of the job in the form
        ``Job[id=..., name=..., callback=..., trigger=...]``.

        As this class doesn't implement :meth:`object.__str__`, the default implementation
        will be used, which is equivalent to :meth:`__repr__`.

        Returns:
            :obj:`str`
        )rÌ   rg   r   rm   )r   r`   rÌ   rg   r   r   rm   r1   s    r   r6   zJob.__repr__„  s?   € õ .ØØŒxŒ{Ø”Ý'¨¬Ñ6Ô6Ø”HÔ$ð
ñ 
ô 
ð 	
r    rÃ   c                 ó   — | j         S )z›:class:`apscheduler.job.Job`: The APS Job this job is a wrapper for.

        .. versionchanged:: 20.0
            This property is now read-only.
        )rq   r1   s    r   r`   zJob.job–  s   € ð ŒyÐr    c                 ó   — | j         S )z3:obj:`bool`: Whether this job is due to be removed.)rÁ   r1   s    r   ÚremovedzJob.removedŸ  ó   € ð Œ}Ðr    c                 ó   — | j         S )z):obj:`bool`: Whether this job is enabled.)rÀ   r1   s    r   ÚenabledzJob.enabled¤  rÕ   r    Ústatusc                 ó~   — |r| j                              ¦   «          n| j                              ¦   «          || _        d S rC   )r`   ÚresumeÚpauserÀ   )r2   rØ   s     r   r×   zJob.enabled©  s<   € àð 	ØŒH�OŠOÑÔÐÐàŒH�NŠNÑÔÐØˆŒˆˆr    c                 ó   — | j         j        S )a³  
        :class:`datetime.datetime`: Datetime for the next job execution.
        Datetime is localized according to :attr:`datetime.datetime.tzinfo`.
        If job is removed or already ran it equals to :obj:`None`.

        Warning:
            This attribute is only available, if the :class:`telegram.ext.JobQueue` this job
            belongs to is already started. Otherwise APScheduler raises an :exc:`AttributeError`.
        )r`   Únext_run_timer1   s    r   Únext_tz
Job.next_t±  s   € ð ŒxÔ%Ð%r    Úaps_jobra   c                 ó.   — |j         d         }||_        |S )a­  Provides the :class:`telegram.ext.Job` that is associated with the given APScheduler
        job.

        Tip:
            This method can be useful when using advanced APScheduler features along with
            :class:`telegram.ext.JobQueue`.

        .. versionadded:: 20.4

        Args:
            aps_job (:class:`apscheduler.job.Job`): The APScheduler job

        Returns:
            :class:`telegram.ext.Job`
        rQ   )ro   rq   )Úclsrß   Úext_jobs      r   r¢   zJob.from_aps_job¾  s   € ð" ”,˜q”/ˆØˆŒØˆr    r5   r7   c              ƒ   ód   K  — t          j        |                      |¦  «        ¦  «        ƒ d{V —† dS )a…  Executes the callback function independently of the jobs schedule. Also calls
        :meth:`telegram.ext.Application.update_persistence`.

        .. versionchanged:: 20.0
            Calls :meth:`telegram.ext.Application.update_persistence`.

        Args:
            application (:class:`telegram.ext.Application`): The application this job is associated
                with.
        N)r™   ÚshieldÚ_runr9   s     r   rc   zJob.runÓ  s<   è è € õ Œn˜TŸYšY {Ñ3Ô3Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4r    c              ƒ   ód  K  — 	 	 |j         j                             | |¦  «        }nP# t          $ rC}t                               d| j        |¬¦  «         Y d }~|                     | ¬¦  «         d S d }~ww xY w|                     ¦   «         ƒ d {V —† |  	                    |¦  «        ƒ d {V —† nS# t          $ rF}| 
                    |                     d || ¬¦  «        d| j        › d�¬¦  «        ƒ d {V —† Y d }~nd }~ww xY w|                     | ¬¦  «         d S # |                     | ¬¦  «         w xY w)NzEError while building CallbackContext for job %s. Job will not be run.)Úexc_info)r`   zJob:z:run:process_error)rg   )Úcontext_typesÚcontextÚfrom_jobÚ	ExceptionÚ_LOGGERÚcriticalrq   Ú_mark_for_persistence_updateÚrefresh_datar   Úcreate_taskÚprocess_errorrÌ   )r2   r5   ré   rÈ   s       r   rå   zJob._runã  sÂ  è è € ð	?ðØ%Ô3Ô;×DÒDÀTÈ;ÑWÔW��øÝð ð ð Ý× Ò Ø[Ø”IØ ð !ñ ô ð ð
 ���ð ×4Ò4¸Ð4Ñ>Ô>Ð>Ð>Ð>øøøøð#øøøð ×&Ò&Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø—-’- Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(øÝð 	ð 	ð 	Ø×)Ò)Ø×)Ò)¨$°¸Ð)Ñ>Ô>Ø7˜DœGÐ7Ð7Ð7ð *ñ ô ð ð ð ð ð ð ð ð ð ð ð ð øøøøð	øøøð ×4Ò4¸Ð4Ñ>Ô>Ð>Ð>Ð>øˆK×4Ò4¸Ð4Ñ>Ô>Ð>Ð>øøøsO   … & ¥B, ¦
A3°"A.ÁB, Á.A3Á38B, Â+D Â,
C<Â6<C7Ã2D Ã7C<Ã<D ÄD/c                 óF   — | j                              ¦   «          d| _        dS )z–
        Schedules this job for removal from the :class:`JobQueue`. It will be removed without
        executing its callback function again.
        TN)r`   ÚremoverÁ   r1   s    r   Úschedule_removalzJob.schedule_removalü  s!   € ð
 	Œ�ŠÑÔÐØˆŒˆˆr    r³   )r   rÃ   )rß   rÃ   r   ra   r²   r±   )r   r´   rµ   r¶   r·   r   r   r¼   r¸   rS   r3   rÉ   rº   rÍ   rÐ   r6   r¹   r`   rÔ   r×   ÚsetterrD   rE   rÞ   Úclassmethodr¢   rc   rå   rô   r-   r    r   r   r   ñ  sV  € € € € € ð@ð @ðD	€Ið #ØØ"Ø"ð)ð )à˜cÔ"ð)ð �t‰mð)ð �D‰jð	)ð
 �t‘ð)ð �t‘ð)ð )ð )ð )ð2 ð ¨ð ð ð ð ð,˜Fð  tð ð ð ð ð˜#ð ð ð ð ð
˜#ð 
ð 
ð 
ð 
ð$ ðð ð ñ „Xðð ð˜ð ð ð ñ „Xðð ð˜ð ð ð ñ „Xðð „^ð˜dð  tð ð ð ñ „^ðð ð
&˜œ tÑ+ð 
&ð 
&ð 
&ñ „Xð
&ð ðð ð ñ „[ðð(5ØPð5à	ð5ð 5ð 5ð 5ð ?ØPð?à	ð?ð ?ð ?ð ?ð2ð ð ð ð ð r    r   )0r¶   r™   rE   rD   r¥   rZ   Útypingr   r   r   r   r   Úapscheduler.executors.asyncior   Úapscheduler.schedulers.asyncior	   r.   ÚImportErrorÚtelegram._utils.datetimer
   r   Útelegram._utils.loggingr   Útelegram._utils.reprr   Útelegram._utils.typesr   Útelegram.ext._extbotr   Útelegram.ext._utils.typesr   r   Úcollections.abcr   Úapscheduler.jobr   rÃ   Útelegram.extr   r©   Úranger½   r   rì   r¼   r¸   r   r   r-   r    r   ú<module>r     s>  ðð& 9Ð 8à €€€Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >ðØ=Ð=Ð=Ð=Ð=Ð=Ø?Ð?Ð?Ð?Ð?Ð?à€M€MøØð ð ð Ø€M€M€Mðøøøð 3Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø .Ð .Ð .Ð .Ð .Ð .Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø *Ð *Ð *Ð *Ð *Ð *Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6àð )Ø(Ð(Ð(Ð(Ð(Ð(àð 2Ø1Ð1Ð1Ð1Ð1Ð1à(Ð(Ð(Ð(Ð(Ð(ð ˆE�%�%˜‘(”(‰OŒO€	Ø
ˆ*�X¨*Ð
5Ñ
5Ô
5€ð	N ð 	N¨Cð 	Nð 	Nð 	Nð 	Nðk
1ð k
1ð k
1ð k
1ð k
1ˆw�sŒ|ñ k
1ô k
1ð k
1ð\Qð Qð Qð Qð Qˆ'�#Œ,ñ Qô Qð Qð Qð Qs   ¢1 ±;º;