ó
    t0c«g  ã                   ó|  • S SK JrJrJrJrJrJrJrJrJ	r	  SSK
JrJrJrJrJrJrJr  SSKJrJrJr  SSKJrJr  SSKJr  SSKJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%  SSK&J'r'J(r(J)r)  SS	K*J+r+J,r,  / S
Qr- " S S\)\)S9r. " S S\)\)S9r/Sr0S\	\\4   S\14S jr2S\3S\	\\4   S\\4\	\S   \\5   4   4   4S jr6 " S S5      r7g)é    )	ÚAnyÚCallableÚcastÚDictÚListÚOptionalÚTupleÚTypeÚUnioné   )ÚConnectionClosedÚDataÚEndOfMessageÚEventÚInformationalResponseÚRequestÚResponse)Úget_comma_headerÚhas_expect_100_continueÚset_comma_header)ÚREADERSÚReadersType)ÚReceiveBuffer)
Ú_SWITCH_CONNECTÚ_SWITCH_UPGRADEÚCLIENTÚConnectionStateÚDONEÚERRORÚMIGHT_SWITCH_PROTOCOLÚ	SEND_BODYÚSERVERÚSWITCHED_PROTOCOL)ÚLocalProtocolErrorÚRemoteProtocolErrorÚSentinel)ÚWRITERSÚWritersType)Ú
ConnectionÚ	NEED_DATAÚPAUSEDc                   ó   • \ rS rSrSrg)r*   é(   © N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r.   ó    Ú1/usr/lib/python3/dist-packages/h11/_connection.pyr*   r*   (   ó   † Úr5   r*   )Ú	metaclassc                   ó   • \ rS rSrSrg)r+   é,   r.   Nr/   r.   r5   r6   r+   r+   ,   r7   r5   r+   i @  ÚeventÚreturnc                 ób   • [        U R                  S5      nSU;   a  g[        U SS5      S:  a  gg)Nó
   connectionó   closeFÚhttp_versionó   1.1T)r   ÚheadersÚgetattr)r;   Ú
connections     r6   Ú_keep_aliverE   H   s4   € Ü! %§-¡-°Ó?€JØ�:ÓØÜˆu�n fÓ-°Ó6ØØr5   Úrequest_methodr.   c                 óÂ  • [        U5      [        [        4;   d   e[        U5      [        L aJ  UR                  S;   d'  U S:X  d!  U S:X  a  SUR                  s=::  a  S:  a   g  OgUR                  S:¼  d   e[	        UR
                  S5      nU(       a
  US/:X  d   eg	[	        UR
                  S
5      nU(       a  S[        US   5      44$ [        U5      [        L a  gg)N)éÌ   i0  ó   HEADó   CONNECTéÈ   é,  )úcontent-length)r   ó   transfer-encodingó   chunked)Úchunkedr.   ó   content-lengthrM   r   )úhttp/1.0r.   )Útyper   r   Ústatus_coder   rB   Úint)rF   r;   Útransfer_encodingsÚcontent_lengthss       r6   Ú_body_framingrX   Q   sç   € ô �‹;œ7¤HÐ-Ó-Ð-Ð-ô ˆEƒ{”hÒà×Ñ Ó+Ø Ó(Ø *Ó,°¸×8IÑ8IÕ1OÈCÔ1Oà+ñ 2Pà+ð × Ñ  CÓ'Ð'Ð'ô *¨%¯-©-Ð9MÓNÐÞØ! j \Ó1Ð1Ð1Øô ' u§}¡}Ð6GÓH€OÞØ ¤3 °qÑ'9Ó#:Ð"<Ð=Ð=ô ˆEƒ{”gÒØ'àr5   c                   ób  • \ rS rSrSr\4S\\   S\SS4S jjr	\
S\\\   \\   4   4S j5       r\
S\\   4S	 j5       r\
S\\   4S
 j5       r\
S\4S j5       rS"S jrS\\   SS4S jrS\S\\\      4S jrS\\   S\SS4S jrS\\   S\\   S\\\4   S\\S\4      4S jr S#S\\\   \\   4   S\\   SS4S jjr\
S\\\4   4S j5       r S\SS4S jr!S\\\\"   \\#   4   4S jr$S\\\\"   \\#   4   4S jr%S\S\\   4S jr&S\S\\'\      4S jr(S"S jr)S\*S\*4S  jr+S!r,g)$r)   é‹   a  An object encapsulating the state of an HTTP connection.

Args:
    our_role: If you're implementing a client, pass :data:`h11.CLIENT`. If
        you're implementing a server, pass :data:`h11.SERVER`.

    max_incomplete_event_size (int):
        The maximum number of bytes we're willing to buffer of an
        incomplete event. In practice this mostly sets a limit on the
        maximum size of the request/response line + headers. If this is
        exceeded, then :meth:`next_event` will raise
        :exc:`RemoteProtocolError`.

Úour_roleÚmax_incomplete_event_sizer<   Nc                 óÀ  • X l         U[        [        4;  a  [        SR	                  U5      5      eXl        U   U[        L a  [        U l        O[        U l        [        5       U l        U R                  U R
                  S [        5      U l        U R                  U R                  S [        5      U l        [        5       U l        SU l        S U l        S U l        SU l        g )Nz#expected CLIENT or SERVER, not {!r}F)Ú_max_incomplete_event_sizer   r"   Ú
ValueErrorÚformatr[   Ú
their_roler   Ú_cstateÚ_get_io_objectr'   Ú_writerr   Ú_readerr   Ú_receive_bufferÚ_receive_buffer_closedÚtheir_http_versionÚ_request_methodÚ"client_is_waiting_for_100_continue)Úselfr[   r\   s      r6   Ú__init__ÚConnection.__init__›   s¿   € ð
 +DÔ'àœF¤FÐ+Ó+ÜÐB×IÑIÈ(ÓSÓTÐTØ ŒÙØ”vÒÜ$ˆD�Oä$ˆDŒOÜ&Ó(ˆŒð ×*Ñ*¨4¯=©=¸$ÄÓHˆŒØ×*Ñ*¨4¯?©?¸DÄ'ÓJˆŒô  -›ˆÔð ',ˆÔ#ð 48ˆÔØ04ˆÔð 38ˆÕ/r5   c                 ó@   • [        U R                  R                  5      $ )zqA dictionary like::

   {CLIENT: <client state>, SERVER: <server state>}

See :ref:`state-machine` for details.

)Údictrb   Ústates©rk   s    r6   rp   ÚConnection.statesÂ   s   € ô �D—L‘L×'Ñ'Ó(Ð(r5   c                 óH   • U R                   R                  U R                     $ )zZThe current state of whichever role we are playing. See
:ref:`state-machine` for details.
)rb   rp   r[   rq   s    r6   Ú	our_stateÚConnection.our_stateÍ   s   € ð
 �|‰|×"Ñ" 4§=¡=Ñ1Ð1r5   c                 óH   • U R                   R                  U R                     $ )z^The current state of whichever role we are NOT playing. See
:ref:`state-machine` for details.
)rb   rp   ra   rq   s    r6   Útheir_stateÚConnection.their_stateÔ   s   € ð
 �|‰|×"Ñ" 4§?¡?Ñ3Ð3r5   c                 óL   • U R                   [        L =(       a    U R                  $ ©N)ra   r   rj   rq   s    r6   Ú!they_are_waiting_for_100_continueÚ,Connection.they_are_waiting_for_100_continueÛ   s   € à�‰¤&Ð(×T¨T×-TÑ-TÐTr5   c                 óÌ   • [        U R                  R                  5      nU R                  R                  5         SU l        U R
                  (       a   eU R                  U5        g)aI  Attempt to reset our connection state for a new request/response
cycle.

If both client and server are in :data:`DONE` state, then resets them
both to :data:`IDLE` state in preparation for a new request/response
cycle on this same connection. Otherwise, raises a
:exc:`LocalProtocolError`.

See :ref:`keepalive-and-pipelining`.

N)ro   rb   rp   Ústart_next_cycleri   rj   Ú_respond_to_state_changes)rk   Ú
old_statess     r6   r~   ÚConnection.start_next_cycleß   sO   € ô ˜$Ÿ,™,×-Ñ-Ó.ˆ
Ø�‰×%Ñ%Ô'Ø#ˆÔð ×:×:Ð:Ð:Ø×&Ñ& zÕ2r5   Úrolec                 óš   • [        U R                  R                  5      nU R                  R                  U5        U R	                  U5        g rz   )ro   rb   rp   Úprocess_errorr   )rk   r‚   r€   s      r6   Ú_process_errorÚConnection._process_erroró   s6   € Ü˜$Ÿ,™,×-Ñ-Ó.ˆ
Ø�‰×"Ñ" 4Ô(Ø×&Ñ& zÕ2r5   r;   c                 óô   • [        U5      [        L a  UR                  S:X  a  [        $ [        U5      [        L a>  [
        U R                  R                  ;   a   SUR                  s=::  a  S:  a	   [
        $   g g )Née   rK   rL   )rS   r   rT   r   r   r   rb   Úpending_switch_proposals)rk   r;   s     r6   Ú_server_switch_eventÚConnection._server_switch_eventø   sc   € Ü�‹;Ô/Ò/°E×4EÑ4EÈÓ4LÜ"Ð"Ü�‹;œ(Ò"ä 4§<¡<×#HÑ#HÓHØ˜5×,Ñ,Õ2¨sÔ2ä&Ð&ð 3ñ r5   c                 ó”  • [        U R                  R                  5      nU[        L a{  [	        U5      [
        L ai  UR                  S:X  a  U R                  R                  [        5        [        UR                  S5      (       a  U R                  R                  [        5        S nU[        L a  U R                  U5      nU R                  R                  U[	        U5      U5        [	        U5      [
        L a  UR                  U l        XR                   L aQ  [	        U5      [
        ["        [$        4;   a3  ['        [(        [
        ["        [$        4   U5      nUR*                  U l        [	        U5      [
        ["        4;   aE  [/        ['        [(        [
        ["        4   U5      5      (       d  U R                  R1                  5         [	        U5      [
        L a  [3        U5      (       a  SU l        [	        U5      [$        ["        4;   a  SU l        U[        L a   [	        U5      [6        [8        4;   a  SU l        U R;                  X25        g )NrJ   s   upgradeTF)ro   rb   rp   r   rS   r   ÚmethodÚprocess_client_switch_proposalr   r   rB   r   r"   rŠ   Úprocess_eventri   ra   r   r   r   r   r@   rh   rE   Úprocess_keep_alive_disabledr   rj   r   r   r   )rk   r‚   r;   r€   Úserver_switch_events        r6   Ú_process_eventÚConnection._process_event  s·  € ô ˜$Ÿ,™,×-Ñ-Ó.ˆ
Ø”6Š>œd 5›k¬WÒ4Ø�|‰|˜zÓ)Ø—‘×;Ñ;¼OÔLÜ §¡¨z×:Ñ:Ø—‘×;Ñ;¼OÔLØ"ÐØ”6Š>Ø"&×";Ñ";¸EÓ"BÐØ�‰×"Ñ" 4¬¨e«Ð6IÔJô �‹;œ'Ò!Ø#(§<¡<ˆDÔ à—?‘?Ò"¤t¨E£{ÜÜÜ!ð7
ó (
ô
 œœw¬Ô2GÐGÑHÈ%ÓPˆEØ&+×&8Ñ&8ˆDÔ#ô �‹;œ7¤HÐ-Ó-´kÜ””w¤Ð(Ñ)¨5Ó1÷7
ñ 7
ð �L‰L×4Ñ4Ô6ô �‹;œ'Ò!Ô&=¸e×&DÑ&DØ6:ˆDÔ3Ü�‹;Ô0´(Ð;Ó;Ø6;ˆDÔ3Ø”6Š>œd 5›k¬d´LÐ-AÓAØ6;ˆDÔ3à×&Ñ& zÕ9r5   Úio_dict.c                 ó
  • U R                   R                  U   nU[        L aP  [        [	        [
        U R                  5      [	        [        [        [        4   U5      5      u  pVU[           U   " U6 $ UR                  X45      $ rz   )rb   rp   r!   rX   r   Úbytesri   r   r   r   Úget)rk   r‚   r;   r”   ÚstateÚframing_typeÚargss          r6   rc   ÚConnection._get_io_object4  s}   € ð —‘×#Ñ# DÑ)ˆØ”IÒô "/Ü”U˜D×0Ñ0Ó1´4¼¼gÄxÐ>OÑ8PÐRWÓ3Xó"ÑˆLð œ9Ñ% lÒ3°TÐ:Ð:ð —;‘; ˜}Ó-Ð-r5   r€   c                 ó  • U R                   XR                     :w  a&  U R                  U R                  U[        5      U l        U R
                  XR                     :w  a'  U R                  U R                  U[        5      U l        g g rz   )	rt   r[   rc   r'   rd   rw   ra   r   re   )rk   r€   r;   s      r6   r   Ú$Connection._respond_to_state_changesJ  se   € ð �>‰>˜Z¯©Ñ6Ó6Ø×.Ñ.¨t¯}©}¸eÄWÓMˆDŒLØ×Ñ˜z¯/©/Ñ:Ó:Ø×.Ñ.¨t¯©ÀÄwÓOˆD�Lð ;r5   c                 óD   • [        U R                  5      U R                  4$ )a:  Data that has been received, but not yet processed, represented as
a tuple with two elements, where the first is a byte-string containing
the unprocessed data itself, and the second is a bool that is True if
the receive connection was closed.

See :ref:`switching-protocols` for discussion of why you'd want this.
)r–   rf   rg   rq   s    r6   Útrailing_dataÚConnection.trailing_dataU  s    € ô �d×*Ñ*Ó+¨T×-HÑ-HÐIÐIr5   Údatac                 ó„   • U(       a2  U R                   (       a  [        S5      eU =R                  U-  sl        gSU l         g)að  Add data to our internal receive buffer.

This does not actually do any processing on the data, just stores
it. To trigger processing, you have to call :meth:`next_event`.

Args:
    data (:term:`bytes-like object`):
        The new data that was just received.

        Special case: If *data* is an empty byte-string like ``b""``,
        then this indicates that the remote side has closed the
        connection (end of file). Normally this is convenient, because
        standard Python APIs like :meth:`file.read` or
        :meth:`socket.recv` use ``b""`` to indicate end-of-file, while
        other failures to read are indicated using other mechanisms
        like raising :exc:`TimeoutError`. When using such an API you
        can just blindly pass through whatever you get from ``read``
        to :meth:`receive_data`, and everything will work.

        But, if you have an API where reading an empty string is a
        valid non-EOF condition, then you need to be aware of this and
        make sure to check for such strings and avoid passing them to
        :meth:`receive_data`.

Returns:
    Nothing, but after calling this you should call :meth:`next_event`
    to parse the newly received data.

Raises:
    RuntimeError:
        Raised if you pass an empty *data*, indicating EOF, and then
        pass a non-empty *data*, indicating more data that somehow
        arrived after the EOF.

        (Calling ``receive_data(b"")`` multiple times is fine,
        and equivalent to calling it once.)

z(received close, then received more data?TN)rg   ÚRuntimeErrorrf   )rk   r¡   s     r6   Úreceive_dataÚConnection.receive_data`  s6   € öN Ø×*×*Ü"Ð#MÓNÐNØ× Ò  DÑ(Ö à*.ˆDÕ'r5   c                 ó¾  • U R                   nU[        L a  U R                  (       a  [        $ U[        L d	  U[
        L a  [        $ U R                  c   eU R                  U R                  5      nUcb  U R                  (       dQ  U R                  (       a@  [        U R                  S5      (       a  U R                  R                  5       nO
[        5       nUc  [        nU$ )NÚread_eof)rw   r   rf   r+   r    r#   re   rg   Úhasattrr§   r   r*   )rk   r˜   r;   s      r6   Ú_extract_next_receive_eventÚ&Connection._extract_next_receive_eventŽ  s±   € ð × Ñ ˆð
 ”DŠ=˜T×1×1ÜˆMØÔ)Ò)¨UÔ6GÒ-GÜˆMØ�|‰|Ñ'Ð'Ð'Ø—‘˜T×1Ñ1Ó2ˆØ‰=Ø×'×'¨D×,G×,Gô
 ˜4Ÿ<™<¨×4Ñ4Ø ŸL™L×1Ñ1Ó3‘Eä,Ó.�EØ‰=ÜˆEØˆr5   c                 ó,  • U R                   [        L a  [        S5      e U R                  5       nU[        [
        4;  a*  U R                  U R                  [        [        U5      5        U[        L aI  [        U R                  5      U R                  :”  a
  [        SSS9eU R                  (       a  [        S5      eU$ ! [         aK  nU R                  U R                  5        [!        U["        5      (       a  UR%                  5          SnAge SnAff = f)an  Parse the next event out of our receive buffer, update our internal
state, and return it.

This is a mutating operation -- think of it like calling :func:`next`
on an iterator.

Returns:
    : One of three things:

    1) An event object -- see :ref:`events`.

    2) The special constant :data:`NEED_DATA`, which indicates that
       you need to read more data from your socket and pass it to
       :meth:`receive_data` before this method will be able to return
       any more events.

    3) The special constant :data:`PAUSED`, which indicates that we
       are not in a state where we can process incoming data (usually
       because the peer has finished their part of the current
       request/response cycle, and you have not yet called
       :meth:`start_next_cycle`). See :ref:`flow-control` for details.

Raises:
    RemoteProtocolError:
        The peer has misbehaved. You should close the connection
        (possibly after sending some kind of 4xx response).

Once this method returns :class:`ConnectionClosed` once, then all
subsequent calls will also return :class:`ConnectionClosed`.

If this method raises any exception besides :exc:`RemoteProtocolError`
then that's a bug -- if it happens please file a bug report!

If this method raises any exception then it also sets
:attr:`Connection.their_state` to :data:`ERROR` -- see
:ref:`error-handling` for discussion.

z+Can't receive data when peer state is ERRORzReceive buffer too longi¯  )Úerror_status_hintz#peer unexpectedly closed connectionN)rw   r   r%   r©   r*   r+   r’   ra   r   r   Úlenrf   r^   rg   ÚBaseExceptionr…   Ú
isinstancer$   Ú!_reraise_as_remote_protocol_error)rk   r;   Úexcs      r6   Ú
next_eventÚConnection.next_eventª  sï   € ðP ×ÑœuÒ$Ü%Ð&SÓTÐTð	Ø×4Ñ4Ó6ˆEØœY¬Ð/Ó/Ø×#Ñ# D§O¡O´T¼%ÀÓ5GÔHØœ	Ò!Ü�t×+Ñ+Ó,¨t×/NÑ/NÓNô .Ø1ÀSñð ð ×.×.ô .Ð.SÓTÐTØˆLøÜó 	Ø×Ñ §¡Ô0Ü˜#Ô1×2Ñ2Ø×5Ñ5×7Ñ7àûð	ús    BB> Â>
DÃA DÄDÄDc                 óN   • U R                  U5      nUc  gSR                  U5      $ )aC  Convert a high-level event into bytes that can be sent to the peer,
while updating our internal state machine.

Args:
    event: The :ref:`event <events>` to send.

Returns:
    If ``type(event) is ConnectionClosed``, then returns
    ``None``. Otherwise, returns a :term:`bytes-like object`.

Raises:
    LocalProtocolError:
        Sending this event at this time would violate our
        understanding of the HTTP/1.1 protocol.

If this method raises any exception then it also sets
:attr:`Connection.our_state` to :data:`ERROR` -- see
:ref:`error-handling` for discussion.

Nr5   )Úsend_with_data_passthroughÚjoin)rk   r;   Ú	data_lists      r6   ÚsendÚConnection.sendë  s,   € ð* ×3Ñ3°EÓ:ˆ	ØÑØà—8‘8˜IÓ&Ð&r5   c                 ót  • U R                   [        L a  [        S5      e [        U5      [        L a  U R                  U5      nU R                  nU R                  U R                  U5        [        U5      [        L a  gUc   e/ nU" XR                  5        U$ !   U R                  U R                  5        e = f)a@  Identical to :meth:`send`, except that in situations where
:meth:`send` returns a single :term:`bytes-like object`, this instead
returns a list of them -- and when sending a :class:`Data` event, this
list is guaranteed to contain the exact object you passed in as
:attr:`Data.data`. See :ref:`sendfile` for discussion.

z'Can't send data when our state is ERRORN)rt   r   r$   rS   r   Ú&_clean_up_response_headers_for_sendingrd   r’   r[   r   Úappendr…   )rk   r;   Úwriterr·   s       r6   rµ   Ú%Connection.send_with_data_passthrough  s¯   € ð �>‰>œUÒ"Ü$Ð%NÓOÐOð	Ü�E‹{œhÒ&Ø×CÑCÀEÓJ�ð —\‘\ˆFØ×Ñ §¡¨uÔ5Ü�E‹{Ô.Ò.Øð Ñ)Ð)Ð)Ø)+�	Ù�u×.Ñ.Ô/Ø Ð øð	Ø×Ñ §¡Ô.Øús    AB Á>B ÂB7c                 ó:   • U R                  U R                  5        g)zÁNotify the state machine that we failed to send the data it gave
us.

This causes :attr:`Connection.our_state` to immediately become
:data:`ERROR` -- see :ref:`error-handling` for discussion.

N)r…   r[   rq   s    r6   Úsend_failedÚConnection.send_failed'  s   € ð 	×Ñ˜DŸM™MÕ*r5   Úresponsec                 ó’  • [        U5      [        L d   eUR                  nSn[        [        U R
                  5      nUS:X  a  Sn[        XA5      u  pVUS;   aX  [        US/ 5      nU R                  b  U R                  S:  a   [        US/ 5      nU R
                  S:w  a  SnO[        USS	/5      nU R                  R                  (       a  U(       aM  [        [        US
5      5      nUR                  S5        UR                  S5        [        US
[        U5      5      n[        UUR                   UR"                  UR$                  S9$ )NFrI   s   GET)rP   rR   rQ   rA   rN   TrO   r>   s
   keep-aliver?   )rB   rT   r@   Úreason)rS   r   rB   r   r–   ri   rX   r   rh   rb   Ú
keep_aliveÚsetr   ÚdiscardÚaddÚsortedrT   r@   rÄ   )rk   rÂ   rB   Ú
need_closeÚmethod_for_choosing_headersr™   Ú_rD   s           r6   r»   Ú1Connection._clean_up_response_headers_for_sending@  s6  € Ü�H‹~¤Ò)Ð)Ð)à×"Ñ"ˆØˆ
ô '+¬5°$×2FÑ2FÓ&GÐ#Ø&¨'Ó1Ø*0Ð'Ü'Ð(CÓN‰ˆØÐ2Ó2ô ' wÐ0AÀ2ÓFˆGØ×&Ñ&Ñ.°$×2IÑ2IÈFÓ2Rô
 +¨7Ð4HÈ"ÓM�ð
 ×'Ñ'¨7Ó2Ø!%�Jøä*¨7Ð4HÈ:È,ÓW�à�|‰|×&×&®*äÔ-¨g°}ÓEÓFˆJØ×Ñ˜}Ô-Ø�N‰N˜8Ô$Ü& w°¼vÀjÓ?QÓRˆGäØØ ×,Ñ,Ø!×.Ñ.Ø—?‘?ñ	
ð 	
r5   )rb   r^   re   rf   rg   ri   rd   rj   r[   rh   ra   )r<   Nrz   )-r0   r1   r2   r3   Ú__doc__Ú!DEFAULT_MAX_INCOMPLETE_EVENT_SIZEr
   r&   rU   rl   Úpropertyr   rp   rt   rw   Úboolr{   r~   r…   r   r   rŠ   r’   r   r   r(   r   r   rc   r   r	   r–   rŸ   r¤   r*   r+   r©   r²   r¸   r   rµ   rÀ   r   r»   r4   r.   r5   r6   r)   r)   ‹   sg  † ñð$ *Kñ%8à�x‘.ð%8ð $'ð%8ð 
õ	%8ðN ð)˜˜T (™^¨T°(©^Ð;Ñ<ó )ó ð)ð ð2˜4 ™>ó 2ó ð2ð ð4˜T (™^ó 4ó ð4ð ðU°4ó Uó ðUô3ð(3 4¨¡>ð 3°dô 3ð
	¨%ð 	°H¸TÀ(¹^Ñ4Lô 	ð.: 4¨¡>ð .:¸%ð .:ÀDô .:ð`.à�8‰nð.ð ˜‰ð.ð �{ KÐ/Ñ0ð	.ð
 
�(˜3 ˜8Ñ$Ñ	%ô.ð2 "&ñ	Pà˜˜h™¨¨h©Ð7Ñ8ð	Pð ˜‰ð	Pð 
õ		Pð ðJ˜u U¨D [Ñ1ó Jó ðJð,/ ð ,/¨4ô ,/ð\à	ˆu�d˜9‘o t¨F¡|Ð3Ñ	4ôð8?˜E %¨¨i©¸$¸v¹,Ð"FÑGô ?ðB'˜%ð ' H¨U¡Oô 'ð6°ð ¸(À4ÈÁ;Ñ:Oô ôB+ð29
¸xð 9
ÈH÷ 9
r5   r)   N)8Útypingr   r   r   r   r   r   r	   r
   r   Ú_eventsr   r   r   r   r   r   r   Ú_headersr   r   r   Ú_readersr   r   Ú_receivebufferr   Ú_stater   r   r   r   r   r   r    r!   r"   r#   Ú_utilr$   r%   r&   Ú_writersr'   r(   Ú__all__r*   r+   rÏ   rÑ   rE   r–   ÚstrrU   rX   r)   r.   r5   r6   Ú<module>rÜ      så   ð÷ Q× PÕ P÷÷ ñ ÷ RÑ Qß *Ý )÷÷ ÷ ÷ñ ÷
 +ò 0€ô	� Hò 	ô	ˆX ò 	ð %.Ð !ð�u˜W hÐ.Ñ/ð °Dô ð0 Øð0 Ø"'¨°Ð(9Ñ":ð0 à
ˆ3��e˜B‘i  s¡Ð+Ñ,Ð,Ñ-ô0 ÷tn
ò n
r5   