§
    ç·jâz  ã                   óP  — d dl Z d dlZd dlZ	 d dlZn# e$ r dZY nw xY w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 e�ej        ej        fZ G d„ d	ej        ¦  «        Z G d
„ dej        ¦  «        Zd„ Zd„ Z G d„ de	j        e	j        ¦  «        Z G d„ dej        ¦  «        ZdS )é    Né   )Ú	constants)Ú
exceptions)Ú	protocols)Ú
transports)Úloggerc                   ó"   — e Zd ZdZdZdZdZdZdS )ÚSSLProtocolStateÚ	UNWRAPPEDÚDO_HANDSHAKEÚWRAPPEDÚFLUSHINGÚSHUTDOWNN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   © ó    ú'/usr/lib/python3.11/asyncio/sslproto.pyr
   r
      s'   € € € € € Ø€IØ!€LØ€GØ€HØ€H€H€Hr   r
   c                   ó   — e Zd ZdZdZdZdZdS )ÚAppProtocolStateÚ
STATE_INITÚSTATE_CON_MADEÚ	STATE_EOFÚSTATE_CON_LOSTN)r   r   r   r   r   r   r   r   r   r   r   r      s$   € € € € € ð €JØ%€NØ€IØ%€N€N€Nr   r   c                 ó`   — | rt          d¦  «        ‚t          j        ¦   «         }|sd|_        |S )Nz(Server side SSL needs a valid SSLContextF)Ú
ValueErrorÚsslÚcreate_default_contextÚcheck_hostname)Úserver_sideÚserver_hostnameÚ
sslcontexts      r   Ú_create_transport_contextr$   +   s@   € Øð EÝÐCÑDÔDÐDõ Ô+Ñ-Ô-€JØð *Ø$)ˆ
Ô!ØÐr   c                 ó�   — | €|€|dz  }n
|}d|z  }n| }|€|dz  }n|}||cxk    rdk    sn t          d|›d|›d�¦  «        ‚||fS )Ni   é   r   zhigh (z) must be >= low (z) must be >= 0)r   )ÚhighÚlowÚkbÚhiÚlos        r   Úadd_flowcontrol_defaultsr,   9   s‰   € Ø€|Øˆ;Ø�d‘ˆBˆBàˆBØ�R‘ˆBˆBàˆØ
€{Ø�1‰Wˆˆàˆà�ˆ=ˆ=Š=ˆ=�qŠ=ˆ=ˆ=ˆ=ÝˆjØ˜"˜"˜b˜b˜bð"ñ #ô #ð 	#ð ˆrˆ6€Mr   c                   óÔ   — e Zd ZdZej        j        Zd„ Zdd„Z	d„ Z
d„ Zd„ Zd„ Zefd	„Zd
„ Zd„ Zd„ Zdd„Zd„ Zd„ Zdd„Zd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!dS )Ú_SSLProtocolTransportTc                 ó0   — || _         || _        d| _        d S )NF)Ú_loopÚ_ssl_protocolÚ_closed)ÚselfÚloopÚssl_protocols      r   Ú__init__z_SSLProtocolTransport.__init__T   s   € ØˆŒ
Ø)ˆÔØˆŒˆˆr   Nc                 ó8   — | j                              ||¦  «        S )z#Get optional transport information.)r1   Ú_get_extra_info©r3   ÚnameÚdefaults      r   Úget_extra_infoz$_SSLProtocolTransport.get_extra_infoY   s   € àÔ!×1Ò1°$¸Ñ@Ô@Ð@r   c                 ó:   — | j                              |¦  «         d S ©N)r1   Ú_set_app_protocol)r3   Úprotocols     r   Úset_protocolz"_SSLProtocolTransport.set_protocol]   s   € ØÔ×,Ò,¨XÑ6Ô6Ð6Ð6Ð6r   c                 ó   — | j         j        S r>   )r1   Ú_app_protocol©r3   s    r   Úget_protocolz"_SSLProtocolTransport.get_protocol`   s   € ØÔ!Ô/Ð/r   c                 ó   — | j         S r>   )r2   rD   s    r   Ú
is_closingz _SSLProtocolTransport.is_closingc   s
   € ØŒ|Ðr   c                 óf   — | j         s"d| _         | j                             ¦   «          dS d| _        dS )a  Close the transport.

        Buffered data will be flushed asynchronously.  No more data
        will be received.  After all buffered data is flushed, the
        protocol's connection_lost() method will (eventually) called
        with None as its argument.
        TN)r2   r1   Ú_start_shutdownrD   s    r   Úclosez_SSLProtocolTransport.closef   s>   € ð Œ|ð 	&ØˆDŒLØÔ×.Ò.Ñ0Ô0Ð0Ð0Ð0à!%ˆDÔÐÐr   c                 ó\   — | j         s$d| _         |                     dt          ¦  «         d S d S )NTz9unclosed transport <asyncio._SSLProtocolTransport object>)r2   ÚwarnÚResourceWarning)r3   Ú	_warningss     r   Ú__del__z_SSLProtocolTransport.__del__t   sE   € ØŒ|ð 	,ØˆDŒLØ�NŠNðÝ*ñ,ô ,ð ,ð ,ð ,ð	,ð 	,r   c                 ó   — | j         j         S r>   )r1   Ú_app_reading_pausedrD   s    r   Ú
is_readingz _SSLProtocolTransport.is_reading{   s   € ØÔ%Ô9Ð9Ð9r   c                 ó8   — | j                              ¦   «          dS )z”Pause the receiving end.

        No data will be passed to the protocol's data_received()
        method until resume_reading() is called.
        N)r1   Ú_pause_readingrD   s    r   Úpause_readingz#_SSLProtocolTransport.pause_reading~   s   € ð 	Ô×)Ò)Ñ+Ô+Ð+Ð+Ð+r   c                 ó8   — | j                              ¦   «          dS )z…Resume the receiving end.

        Data received will once again be passed to the protocol's
        data_received() method.
        N)r1   Ú_resume_readingrD   s    r   Úresume_readingz$_SSLProtocolTransport.resume_reading†   s   € ð 	Ô×*Ò*Ñ,Ô,Ð,Ð,Ð,r   c                 ón   — | j                              ||¦  «         | j                              ¦   «          dS )a¦  Set the high- and low-water limits for write flow control.

        These two values control when to call the protocol's
        pause_writing() and resume_writing() methods.  If specified,
        the low-water limit must be less than or equal to the
        high-water limit.  Neither value can be negative.

        The defaults are implementation-specific.  If only the
        high-water limit is given, the low-water limit defaults to an
        implementation-specific value less than or equal to the
        high-water limit.  Setting high to zero forces low to zero as
        well, and causes pause_writing() to be called whenever the
        buffer becomes non-empty.  Setting low to zero causes
        resume_writing() to be called only once the buffer is empty.
        Use of zero for either limit is generally sub-optimal as it
        reduces opportunities for doing I/O and computation
        concurrently.
        N)r1   Ú_set_write_buffer_limitsÚ_control_app_writing©r3   r'   r(   s      r   Úset_write_buffer_limitsz-_SSLProtocolTransport.set_write_buffer_limitsŽ   s8   € ð& 	Ô×3Ò3°D¸#Ñ>Ô>Ð>ØÔ×/Ò/Ñ1Ô1Ð1Ð1Ð1r   c                 ó2   — | j         j        | j         j        fS r>   )r1   Ú_outgoing_low_waterÚ_outgoing_high_waterrD   s    r   Úget_write_buffer_limitsz-_SSLProtocolTransport.get_write_buffer_limits¤   ó   € ØÔ"Ô6ØÔ"Ô7ð9ð 	9r   c                 ó4   — | j                              ¦   «         S )z-Return the current size of the write buffers.)r1   Ú_get_write_buffer_sizerD   s    r   Úget_write_buffer_sizez+_SSLProtocolTransport.get_write_buffer_size¨   s   € àÔ!×8Ò8Ñ:Ô:Ð:r   c                 ón   — | j                              ||¦  «         | j                              ¦   «          dS )a¯  Set the high- and low-water limits for read flow control.

        These two values control when to call the upstream transport's
        pause_reading() and resume_reading() methods.  If specified,
        the low-water limit must be less than or equal to the
        high-water limit.  Neither value can be negative.

        The defaults are implementation-specific.  If only the
        high-water limit is given, the low-water limit defaults to an
        implementation-specific value less than or equal to the
        high-water limit.  Setting high to zero forces low to zero as
        well, and causes pause_reading() to be called whenever the
        buffer becomes non-empty.  Setting low to zero causes
        resume_reading() to be called only once the buffer is empty.
        Use of zero for either limit is generally sub-optimal as it
        reduces opportunities for doing I/O and computation
        concurrently.
        N)r1   Ú_set_read_buffer_limitsÚ_control_ssl_readingr\   s      r   Úset_read_buffer_limitsz,_SSLProtocolTransport.set_read_buffer_limits¬   s8   € ð& 	Ô×2Ò2°4¸Ñ=Ô=Ð=ØÔ×/Ò/Ñ1Ô1Ð1Ð1Ð1r   c                 ó2   — | j         j        | j         j        fS r>   )r1   Ú_incoming_low_waterÚ_incoming_high_waterrD   s    r   Úget_read_buffer_limitsz,_SSLProtocolTransport.get_read_buffer_limitsÂ   rb   r   c                 ó4   — | j                              ¦   «         S )z+Return the current size of the read buffer.)r1   Ú_get_read_buffer_sizerD   s    r   Úget_read_buffer_sizez*_SSLProtocolTransport.get_read_buffer_sizeÆ   s   € àÔ!×7Ò7Ñ9Ô9Ð9r   c                 ó   — | j         j        S r>   )r1   Ú_app_writing_pausedrD   s    r   Ú_protocol_pausedz&_SSLProtocolTransport._protocol_pausedÊ   s   € ð Ô!Ô5Ð5r   c                 óÐ   — t          |t          t          t          f¦  «        s$t	          dt          |¦  «        j        › �¦  «        ‚|sdS | j                             |f¦  «         dS )z�Write some data bytes to the transport.

        This does not block; it buffers the data and arranges for it
        to be sent out asynchronously.
        z+data: expecting a bytes-like instance, got N)	Ú
isinstanceÚbytesÚ	bytearrayÚ
memoryviewÚ	TypeErrorÚtyper   r1   Ú_write_appdata©r3   Údatas     r   Úwritez_SSLProtocolTransport.writeÏ   sv   € õ ˜$¥­	µ:Ð >Ñ?Ô?ð 	:Ýð 9Ý#'¨¡:¤:Ô#6ð9ð 9ñ :ô :ð :àð 	ØˆFØÔ×)Ò)¨4¨'Ñ2Ô2Ð2Ð2Ð2r   c                 ó:   — | j                              |¦  «         dS )z¯Write a list (or any iterable) of data bytes to the transport.

        The default implementation concatenates the arguments and
        calls write() on the result.
        N)r1   r{   )r3   Úlist_of_datas     r   Ú
writelinesz _SSLProtocolTransport.writelinesÜ   s!   € ð 	Ô×)Ò)¨,Ñ7Ô7Ð7Ð7Ð7r   c                 ó   — t           ‚)zuClose the write end after flushing buffered data.

        This raises :exc:`NotImplementedError` right now.
        )ÚNotImplementedErrorrD   s    r   Ú	write_eofz_SSLProtocolTransport.write_eofä   s
   € õ
 "Ð!r   c                 ó   — dS )zAReturn True if this transport supports write_eof(), False if not.Fr   rD   s    r   Úcan_write_eofz#_SSLProtocolTransport.can_write_eofë   s   € àˆur   c                 óF   — d| _         | j                             ¦   «          dS )zÝClose the transport immediately.

        Buffered data will be lost.  No more data will be received.
        The protocol's connection_lost() method will (eventually) be
        called with None as its argument.
        TN©r2   r1   Ú_abortrD   s    r   Úabortz_SSLProtocolTransport.abortï   s&   € ð ˆŒØÔ×!Ò!Ñ#Ô#Ð#Ð#Ð#r   c                 óH   — d| _         | j                             |¦  «         d S ©NTrˆ   ©r3   Úexcs     r   Ú_force_closez"_SSLProtocolTransport._force_closeù   s&   € ØˆŒØÔ×!Ò! #Ñ&Ô&Ð&Ð&Ð&r   c                 óˆ   — | j         j                             |¦  «         | j         xj        t	          |¦  «        z  c_        d S r>   )r1   Ú_write_backlogÚappendÚ_write_buffer_sizeÚlenr|   s     r   Ú_test__append_write_backlogz1_SSLProtocolTransport._test__append_write_backlogý   s?   € àÔÔ)×0Ò0°Ñ6Ô6Ð6ØÔÐ-Ô-µ°T±´Ñ:Ð-Ô-Ð-Ð-r   r>   ©NN)"r   r   r   Ú_start_tls_compatibler   Ú_SendfileModeÚFALLBACKÚ_sendfile_compatibler6   r<   rA   rE   rG   rJ   ÚwarningsrO   rR   rU   rX   r]   ra   re   ri   rm   rp   Úpropertyrs   r~   r�   r„   r†   rŠ   r�   r•   r   r   r   r.   r.   N   s¹  € € € € € ð !ÐØ$Ô2Ô;Ððð ð ð
Að Að Að Að7ð 7ð 7ð0ð 0ð 0ðð ð ð&ð &ð &ð !)ð ,ð ,ð ,ð ,ð:ð :ð :ð,ð ,ð ,ð-ð -ð -ð2ð 2ð 2ð 2ð,9ð 9ð 9ð;ð ;ð ;ð2ð 2ð 2ð 2ð,9ð 9ð 9ð:ð :ð :ð ð6ð 6ñ „Xð6ð3ð 3ð 3ð8ð 8ð 8ð"ð "ð "ðð ð ð$ð $ð $ð'ð 'ð 'ð;ð ;ð ;ð ;ð ;r   r.   c                   ó  — e Zd ZdZdZdZdZ	 	 	 	 d-d„Zd„ Zd.d„Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd.d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d „ Z"d!„ Z#d"„ Z$d/d#„Z%d$„ Z&d%„ Z'd&„ Z(d/d'„Z)d(„ Z*d)„ Z+d*„ Z,d0d,„Z-dS )1ÚSSLProtocoli   NFTc
                 óÊ  — t           €t          d¦  «        ‚t          | j        ¦  «        | _        t          | j        ¦  «        | _        |€t          j        }n|dk    rt          d|› �¦  «        ‚|	€t          j
        }	n|	dk    rt          d|	› �¦  «        ‚|st          ||¦  «        }|| _        |r
|s|| _        nd | _        || _        t          |¬¦  «        | _        t#          j        ¦   «         | _        d| _        || _        || _        |                      |¦  «         d | _        d| _        d | _        || _        |	| _        t          j        ¦   «         | _        t          j        ¦   «         | _        t@          j!        | _"        d| _#        |rtH          j%        | _&        ntH          j'        | _&        | j         (                    | j        | j        | j        | j        ¬¦  «        | _)        d| _*        d| _+        d| _,        d| _-        d| _.        |  /                    ¦   «          d| _0        d| _1        d| _2        d| _3        |  4                    ¦   «          |  5                    ¦   «          d S )Nzstdlib ssl module not availabler   z7ssl_handshake_timeout should be a positive number, got z6ssl_shutdown_timeout should be a positive number, got )r#   F)r!   r"   )6r   ÚRuntimeErrorrw   Úmax_sizeÚ_ssl_bufferrx   Ú_ssl_buffer_viewr   ÚSSL_HANDSHAKE_TIMEOUTr   ÚSSL_SHUTDOWN_TIMEOUTr$   Ú_server_sideÚ_server_hostnameÚ_sslcontextÚdictÚ_extraÚcollectionsÚdequer‘   r“   Ú_waiterr0   r?   Ú_app_transportÚ_app_transport_createdÚ
_transportÚ_ssl_handshake_timeoutÚ_ssl_shutdown_timeoutÚ	MemoryBIOÚ	_incomingÚ	_outgoingr
   r   Ú_stateÚ
_conn_lostr   r   Ú
_app_stater   Úwrap_bioÚ_sslobjÚ_ssl_writing_pausedrQ   Ú_ssl_reading_pausedrl   rk   rg   Ú_eof_receivedrr   r`   r_   rZ   Ú_get_app_transport)
r3   r4   Úapp_protocolr#   Úwaiterr!   r"   Úcall_connection_madeÚssl_handshake_timeoutÚssl_shutdown_timeouts
             r   r6   zSSLProtocol.__init__
  sŽ  € õ
 ˆ;ÝÐ@ÑAÔAÐAå$ T¤]Ñ3Ô3ˆÔÝ *¨4Ô+;Ñ <Ô <ˆÔà Ð(Ý$-Ô$CÐ!Ð!Ø" aÒ'Ð'Ýð/Ø,ð/ð /ñ0ô 0ð 0ð  Ð'Ý#,Ô#AÐ Ð Ø! QÒ&Ð&Ýð.Ø+ð.ð .ñ/ô /ð /ð ð 	.Ý2Ø˜_ñ.ô .ˆJð (ˆÔØð 	) ;ð 	)Ø$3ˆDÔ!Ð!à$(ˆDÔ!Ø%ˆÔõ  jÐ1Ñ1Ô1ˆŒõ *Ô/Ñ1Ô1ˆÔØ"#ˆÔàˆŒØˆŒ
Ø×Ò˜|Ñ,Ô,Ð,Ø"ˆÔØ&+ˆÔ#àˆŒØ&;ˆÔ#Ø%9ˆÔ"åœ™œˆŒÝœ™œˆŒÝ&Ô0ˆŒØˆŒØð 	>Ý.Ô9ˆDŒOˆOå.Ô=ˆDŒOØÔ'×0Ò0ØŒN˜DœNØÔ)Ø Ô1ð 1ñ 3ô 3ˆŒð $)ˆÔ à#(ˆÔ à#(ˆÔ Ø$%ˆÔ!Ø#$ˆÔ Ø×$Ò$Ñ&Ô&Ð&Ø"ˆÔà#(ˆÔ Ø$%ˆÔ!Ø#$ˆÔ Ø×%Ò%Ñ'Ô'Ð'Ø×ÒÑ!Ô!Ð!Ð!Ð!r   c                 ó¸   — || _         t          |d¦  «        r;t          |t          j        ¦  «        r!|j        | _        |j        | _        d| _	        d S d| _	        d S )NÚ
get_bufferTF)
rC   Úhasattrru   r   ÚBufferedProtocolrÅ   Ú_app_protocol_get_bufferÚbuffer_updatedÚ_app_protocol_buffer_updatedÚ_app_protocol_is_buffer)r3   r¿   s     r   r?   zSSLProtocol._set_app_protocol]  sc   € Ø)ˆÔå�L ,Ñ/Ô/ð 	1Ý˜<­Ô)CÑDÔDð	1à,8Ô,CˆDÔ)Ø0<Ô0KˆDÔ-Ø+/ˆDÔ(Ð(Ð(à+0ˆDÔ(Ð(Ð(r   c                 óÆ   — | j         €d S | j                              ¦   «         s7|�| j                              |¦  «         n| j                              d ¦  «         d | _         d S r>   )r­   Ú	cancelledÚset_exceptionÚ
set_resultr�   s     r   Ú_wakeup_waiterzSSLProtocol._wakeup_waiterh  sd   € ØŒ<ÐØˆFØŒ|×%Ò%Ñ'Ô'ð 	.ØˆØ”×*Ò*¨3Ñ/Ô/Ð/Ð/à”×'Ò'¨Ñ-Ô-Ð-ØˆŒˆˆr   c                 óŒ   — | j         €7| j        rt          d¦  «        ‚t          | j        | ¦  «        | _         d| _        | j         S )Nz$Creating _SSLProtocolTransport twiceT)r®   r¯   r    r.   r0   rD   s    r   r¾   zSSLProtocol._get_app_transportr  sK   € ØÔÐ&ØÔ*ð KÝ"Ð#IÑJÔJÐJÝ"7¸¼
ÀDÑ"IÔ"IˆDÔØ*.ˆDÔ'ØÔ"Ð"r   c                 ó<   — || _         |                      ¦   «          dS )zXCalled when the low-level connection is made.

        Start the SSL handshake.
        N)r°   Ú_start_handshake)r3   Ú	transports     r   Úconnection_madezSSLProtocol.connection_madez  s#   € ð
 $ˆŒØ×ÒÑÔÐÐÐr   c                 óÌ  — | j                              ¦   «          | j                             ¦   «          | xj        dz  c_        | j        �d| j        _        | j        t          j	        k    r`| j
        t          j        k    s| j
        t          j        k    r6t          j        | _
        | j                             | j        j        |¦  «         |                      t          j        ¦  «         d| _        d| _        d| _        |                      |¦  «         | j        r | j                             ¦   «          d| _        | j        r"| j                             ¦   «          d| _        dS dS )zÝCalled when the low-level connection is lost or closed.

        The argument is an exception object or None (the latter
        meaning a regular EOF is received or the connection was
        aborted or closed).
        r   NT)r‘   Úclearrµ   Úreadr·   r®   r2   r¶   r
   r   r¸   r   r   r   r   r0   Ú	call_soonrC   Úconnection_lostÚ
_set_stater   r°   rÐ   Ú_shutdown_timeout_handleÚcancelÚ_handshake_timeout_handler�   s     r   rÚ   zSSLProtocol.connection_lost‚  sO  € ð 	Ô×!Ò!Ñ#Ô#Ð#ØŒ×ÒÑÔÐØˆŒ˜1ÑˆŒð ÔÐ*Ø*.ˆDÔÔ'àŒ;Õ*Ô7Ò7Ð7à”Õ#3Ô#BÒBÐBØ”Õ#3Ô#=Ò=Ð=å"2Ô"A�”Ø”
×$Ò$ TÔ%7Ô%GÈÑMÔMÐMØ�ŠÕ(Ô2Ñ3Ô3Ð3ØˆŒØ"ˆÔØ!ˆÔØ×Ò˜CÑ Ô Ð àÔ(ð 	1ØÔ)×0Ò0Ñ2Ô2Ð2Ø,0ˆDÔ)ØÔ)ð 	2ØÔ*×1Ò1Ñ3Ô3Ð3Ø-1ˆDÔ*Ð*Ð*ð	2ð 	2r   c                 óÎ   — |}|dk    s|| j         k    r| j         }t          | j        ¦  «        |k     r-t          |¦  «        | _        t	          | j        ¦  «        | _        | j        S ©Nr   )r¡   r”   r¢   rw   rx   r£   )r3   ÚnÚwants      r   rÅ   zSSLProtocol.get_buffer¦  sc   € ØˆØ�1Š9ˆ9˜˜tœ}Ò,Ð,Ø”=ˆDÝˆtÔÑ Ô  4Ò'Ð'Ý(¨™œˆDÔÝ$.¨tÔ/?Ñ$@Ô$@ˆDÔ!ØÔ$Ð$r   c                 ó¬  — | j                              | j        d |…         ¦  «         | j        t          j        k    r|                      ¦   «          d S | j        t          j        k    r|                      ¦   «          d S | j        t          j	        k    r|  
                    ¦   «          d S | j        t          j        k    r|                      ¦   «          d S d S r>   )r´   r~   r£   r¶   r
   r   Ú_do_handshaker   Ú_do_readr   Ú	_do_flushr   Ú_do_shutdown)r3   Únbytess     r   rÉ   zSSLProtocol.buffer_updated¯  sÇ   € ØŒ×Ò˜TÔ2°7°F°7Ô;Ñ<Ô<Ð<àŒ;Õ*Ô7Ò7Ð7Ø×ÒÑ Ô Ð Ð Ð àŒ[Õ,Ô4Ò4Ð4Ø�MŠM‰OŒOˆOˆOˆOàŒ[Õ,Ô5Ò5Ð5Ø�NŠNÑÔÐÐÐàŒ[Õ,Ô5Ò5Ð5Ø×ÒÑÔÐÐÐð 6Ð5r   c                 óÜ  — d| _         	 | j                             ¦   «         rt          j        d| ¦  «         | j        t          j        k    r|                      t          ¦  «         dS | j        t          j
        k    r>|                      t          j        ¦  «         | j        rdS |                      ¦   «          dS | j        t          j        k    rI|                      ¦   «          |                      t          j        ¦  «         |                      ¦   «          dS | j        t          j        k    r|                      ¦   «          dS dS # t$          $ r | j                             ¦   «          ‚ w xY w)a  Called when the other end of the low-level stream
        is half-closed.

        If this returns a false value (including None), the transport
        will close itself.  If it returns a true value, closing the
        transport is up to the protocol.
        Tz%r received EOFN)r½   r0   Ú	get_debugr   Údebugr¶   r
   r   Ú_on_handshake_completeÚConnectionResetErrorr   rÛ   r   rQ   ræ   Ú	_do_writer   rç   Ú	Exceptionr°   rJ   rD   s    r   Úeof_receivedzSSLProtocol.eof_received¾  sg  € ð "ˆÔð	ØŒz×#Ò#Ñ%Ô%ð 6Ý”Ð.°Ñ5Ô5Ð5àŒ{Õ.Ô;Ò;Ð;Ø×+Ò+Õ,@ÑAÔAÐAÐAÐAà”Õ 0Ô 8Ò8Ð8Ø—’Õ 0Ô 9Ñ:Ô:Ð:ØÔ+ð %Ø˜4à—N’NÑ$Ô$Ð$Ð$Ð$à”Õ 0Ô 9Ò9Ð9Ø—’Ñ Ô Ð Ø—’Õ 0Ô 9Ñ:Ô:Ð:Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#à”Õ 0Ô 9Ò9Ð9Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#ð :Ð9øõ ð 	ð 	ð 	ØŒO×!Ò!Ñ#Ô#Ð#Øð	øøøs%   ‰AE Á(;E Â%E Â;AE Ä)E Å%E+c                 óv   — || j         v r| j         |         S | j        �| j                             ||¦  «        S |S r>   )rª   r°   r<   r9   s      r   r8   zSSLProtocol._get_extra_infoá  sA   € Ø�4”;ÐÐØ”;˜tÔ$Ð$ØŒ_Ð(Ø”?×1Ò1°$¸Ñ@Ô@Ð@àˆNr   c                 óÐ  — d}|t           j        k    rd}nŸ| j        t           j        k    r|t           j        k    rd}nw| j        t           j        k    r|t           j        k    rd}nO| j        t           j        k    r|t           j        k    rd}n'| j        t           j        k    r|t           j        k    rd}|r	|| _        d S t          d                     | j        |¦  «        ¦  «        ‚)NFTz!cannot switch state from {} to {})	r
   r   r¶   r   r   r   r   r    Úformat)r3   Ú	new_stateÚalloweds      r   rÛ   zSSLProtocol._set_stateé  s   € ØˆàÕ(Ô2Ò2Ð2ØˆGˆGð ŒKÕ+Ô5Ò5Ð5ØÕ)Ô6Ò6Ð6àˆGˆGð ŒKÕ+Ô8Ò8Ð8ØÕ)Ô1Ò1Ð1àˆGˆGð ŒKÕ+Ô3Ò3Ð3ØÕ)Ô2Ò2Ð2àˆGˆGð ŒKÕ+Ô4Ò4Ð4ØÕ)Ô2Ò2Ð2àˆGàð 	-Ø#ˆDŒKˆKˆKõ Ø3×:Ò:Ø”K ñ,ô ,ñ-ô -ð -r   c                 óf  ‡ — ‰ j                              ¦   «         r4t          j        d‰ ¦  «         ‰ j                              ¦   «         ‰ _        nd ‰ _        ‰                      t          j        ¦  «         ‰ j          	                    ‰ j
        ˆ fd„¦  «        ‰ _        ‰                      ¦   «          d S )Nz%r starts SSL handshakec                  ó,   •— ‰                       ¦   «         S r>   )Ú_check_handshake_timeoutrD   s   €r   ú<lambda>z.SSLProtocol._start_handshake.<locals>.<lambda>  s   ø€ ¨$×*GÒ*GÑ*IÔ*I€ r   )r0   rê   r   rë   ÚtimeÚ_handshake_start_timerÛ   r
   r   Ú
call_laterr±   rÞ   rä   rD   s   `r   rÓ   zSSLProtocol._start_handshake  s­   ø€ ØŒ:×ÒÑ!Ô!ð 	.ÝŒLÐ2°DÑ9Ô9Ð9Ø)-¬¯ªÑ):Ô):ˆDÔ&Ð&à)-ˆDÔ&à�ŠÕ(Ô5Ñ6Ô6Ð6ð ŒJ×!Ò! $Ô"=Ø"IÐ"IÐ"IÐ"IñKô Kð 	Ô&ð 	×ÒÑÔÐÐÐr   c                 óŽ   — | j         t          j        k    r/d| j        › d�}|                      t          |¦  «        ¦  «         d S d S )Nz$SSL handshake is taking longer than z! seconds: aborting the connection)r¶   r
   r   r±   Ú_fatal_errorÚConnectionAbortedError)r3   Úmsgs     r   rø   z$SSLProtocol._check_handshake_timeout!  s_   € ØŒ;Õ*Ô7Ò7Ð7ð+ØÔ.ð+ð +ð +ð ð
 ×ÒÕ4°SÑ9Ô9Ñ:Ô:Ð:Ð:Ð:ð 8Ð7r   c                 ó  — 	 | j                              ¦   «          |                      d ¦  «         d S # t          $ r |                      ¦   «          Y d S t
          j        $ r }|                      |¦  «         Y d }~d S d }~ww xY wr>   )rº   Údo_handshakerì   ÚSSLAgainErrorsÚ_process_outgoingr   ÚSSLErrorr�   s     r   rä   zSSLProtocol._do_handshake*  s­   € ð	.ØŒL×%Ò%Ñ'Ô'Ð'ð ×'Ò'¨Ñ-Ô-Ð-Ð-Ð-øõ ð 	%ð 	%ð 	%Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$Ð$ÝŒ|ð 	-ð 	-ð 	-Ø×'Ò'¨Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øøøøð	-øøøs   ‚2 ²BÁBÁ!A<Á<Bc                 óö  — | j         � | j                              ¦   «          d | _         | j        }	 |€ |                      t          j        ¦  «         n|‚|                     ¦   «         }n�# t          $ rt}|                      t          j        ¦  «         t          |t          j        ¦  «        rd}nd}|                      ||¦  «         |                      |¦  «         Y d }~d S d }~ww xY w| j                             ¦   «         r:| j                             ¦   «         | j        z
  }t%          j        d| |dz  ¦  «         | j                             ||                     ¦   «         |                     ¦   «         |¬¦  «         | j        t2          j        k    r=t2          j        | _        | j                             |                      ¦   «         ¦  «         |                      ¦   «          |                      ¦   «          d S )Nz1SSL handshake failed on verifying the certificatezSSL handshake failedz%r: SSL handshake took %.1f msg     @�@)ÚpeercertÚcipherÚcompressionÚ
ssl_object) rÞ   rÝ   rº   rÛ   r
   r   Úgetpeercertrï   r   ru   r   ÚCertificateErrorrþ   rÐ   r0   rê   rú   rû   r   rë   rª   Úupdater  r	  r¸   r   r   r   rC   rÕ   r¾   rå   )r3   Úhandshake_excÚsslobjr  rŽ   r   Údts          r   rì   z"SSLProtocol._on_handshake_complete4  sç  € ØÔ)Ð5ØÔ*×1Ò1Ñ3Ô3Ð3Ø-1ˆDÔ*à”ˆð	ØÐ$Ø—’Õ 0Ô 8Ñ9Ô9Ð9Ð9à#Ð#à×)Ò)Ñ+Ô+ˆHˆHøÝð 	ð 	ð 	Ø�OŠOÕ,Ô6Ñ7Ô7Ð7Ý˜#�sÔ3Ñ4Ô4ð -ØI��à,�Ø×Ò˜c 3Ñ'Ô'Ð'Ø×Ò Ñ$Ô$Ð$ØˆFˆFˆFˆFˆFøøøøð	øøøð Œ:×ÒÑ!Ô!ð 	KØ”—’Ñ"Ô" TÔ%?Ñ?ˆBÝŒLÐ9¸4ÀÀcÁÑJÔJÐJð 	Œ×Ò HØ"(§-¢-¡/¤/Ø'-×'9Ò'9Ñ';Ô';Ø&,ð 	ñ 	.ô 	.ð 	.ð Œ?Õ.Ô9Ò9Ð9Ý.Ô=ˆDŒOØÔ×.Ò.¨t×/FÒ/FÑ/HÔ/HÑIÔIÐIØ×ÒÑÔÐØ�Š‰Œˆˆˆs   °8A) Á)
C'Á3A)C"Ã"C'c                 ó’  ‡ — ‰ j         t          j        t          j        t          j        fv rd S ‰ j        �d‰ j        _        ‰ j         t          j        k    r‰                      ¦   «          d S ‰  	                    t          j        ¦  «         ‰ j
                             ‰ j        ˆ fd„¦  «        ‰ _        ‰                      ¦   «          d S )NTc                  ó,   •— ‰                       ¦   «         S r>   )Ú_check_shutdown_timeoutrD   s   €r   rù   z-SSLProtocol._start_shutdown.<locals>.<lambda>m  s   ø€ ˜×4Ò4Ñ6Ô6€ r   )r¶   r
   r   r   r   r®   r2   r   r‰   rÛ   r0   rü   r²   rÜ   ræ   rD   s   `r   rI   zSSLProtocol._start_shutdown\  sÀ   ø€ àŒKÝ Ô)Ý Ô)Ý Ô*ðð ð ð ˆFØÔÐ*Ø*.ˆDÔÔ'ØŒ;Õ*Ô7Ò7Ð7Ø�KŠK‰MŒMˆMˆMˆMà�OŠOÕ,Ô5Ñ6Ô6Ð6Ø,0¬J×,AÒ,AØÔ*Ø6Ð6Ð6Ð6ñ-ô -ˆDÔ)ð �NŠNÑÔÐÐÐr   c                 ó    — | j         t          j        t          j        fv r.| j                             t          j        d¦  «        ¦  «         d S d S )NzSSL shutdown timed out)r¶   r
   r   r   r°   r�   r   ÚTimeoutErrorrD   s    r   r  z#SSLProtocol._check_shutdown_timeoutq  sf   € àŒKÝ Ô)Ý Ô)ðð ð ð
 ŒO×(Ò(ÝÔ'Ð(@ÑAÔAñCô Cð Cð Cð Cðð r   c                 ó”   — |                       ¦   «          |                      t          j        ¦  «         |                      ¦   «          d S r>   )rå   rÛ   r
   r   rç   rD   s    r   ræ   zSSLProtocol._do_flush{  s=   € Ø�Š‰ŒˆØ�ŠÕ(Ô1Ñ2Ô2Ð2Ø×ÒÑÔÐÐÐr   c                 óf  — 	 | j         s| j                             ¦   «          |                      ¦   «          |                      ¦   «          |                      d ¦  «         d S # t          $ r |                      ¦   «          Y d S t          j        $ r }|                      |¦  «         Y d }~d S d }~ww xY wr>   )	r½   rº   Úunwrapr  Ú_call_eof_receivedÚ_on_shutdown_completer  r   r  r�   s     r   rç   zSSLProtocol._do_shutdown€  sÜ   € ð
	-ØÔ%ð &Ø”×#Ò#Ñ%Ô%Ð%ð ×"Ò"Ñ$Ô$Ð$Ø×#Ò#Ñ%Ô%Ð%Ø×&Ò& tÑ,Ô,Ð,Ð,Ð,øõ ð 	%ð 	%ð 	%Ø×"Ò"Ñ$Ô$Ð$Ð$Ð$Ð$ÝŒ|ð 	,ð 	,ð 	,Ø×&Ò& sÑ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+øøøøð	,øøøs   ‚ A! Á!B0ÂB0ÂB+Â+B0c                 óÎ   — | j         � | j                              ¦   «          d | _         |r|                      |¦  «         d S | j                             | j        j        ¦  «         d S r>   )rÜ   rÝ   rþ   r0   rÙ   r°   rJ   )r3   Úshutdown_excs     r   r  z!SSLProtocol._on_shutdown_complete�  sk   € ØÔ(Ð4ØÔ)×0Ò0Ñ2Ô2Ð2Ø,0ˆDÔ)àð 	8Ø×Ò˜lÑ+Ô+Ð+Ð+Ð+àŒJ× Ò  ¤Ô!6Ñ7Ô7Ð7Ð7Ð7r   c                 óˆ   — |                       t          j        ¦  «         | j        �| j                             ¦   «          d S d S r>   )rÛ   r
   r   r°   rŠ   rD   s    r   r‰   zSSLProtocol._abort—  sB   € Ø�ŠÕ(Ô2Ñ3Ô3Ð3ØŒ?Ð&ØŒO×!Ò!Ñ#Ô#Ð#Ð#Ð#ð 'Ð&r   c                 óü  — | j         t          j        t          j        t          j        fv r;| j        t          j        k    rt          j	        d¦  «         | xj        dz  c_        d S |D ]9}| j
                             |¦  «         | xj        t          |¦  «        z  c_        Œ:	 | j         t          j        k    r|                      ¦   «          d S d S # t           $ r!}|                      |d¦  «         Y d }~d S d }~ww xY w)NzSSL connection is closedr   úFatal error on SSL protocol)r¶   r
   r   r   r   r·   r   Ú!LOG_THRESHOLD_FOR_CONNLOST_WRITESr   Úwarningr‘   r’   r“   r”   r   rî   rï   rþ   )r3   r€   r}   Úexs       r   r{   zSSLProtocol._write_appdataž  s&  € àŒKÝ Ô)Ý Ô)Ý Ô*ðð ð ð Œ¥)Ô"MÒMÐMÝ”Ð9Ñ:Ô:Ð:ØˆOŒO˜qÑ ˆOŒOØˆFà ð 	1ð 	1ˆDØÔ×&Ò& tÑ,Ô,Ð,ØÐ#Ô#¥s¨4¡y¤yÑ0Ð#Ô#Ð#ð	AØŒ{Õ.Ô6Ò6Ð6Ø—’Ñ Ô Ð Ð Ð ð 7Ð6øõ ð 	Að 	Að 	AØ×Ò˜bÐ"?Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@øøøøð	Aøøøs   Â#)C Ã
C;ÃC6Ã6C;c                 ó\  — 	 | j         r~| j         d         }| j                             |¦  «        }t          |¦  «        }||k     r#||d …         | j         d<   | xj        |z  c_        n| j         d= | xj        |z  c_        | j         °~n# t
          $ r Y nw xY w|                      ¦   «          d S rà   )r‘   rº   r~   r”   r“   r  r  )r3   r}   ÚcountÚdata_lens       r   rî   zSSLProtocol._do_write¶  sÝ   € ð	ØÔ%ð 	8ØÔ*¨1Ô-�Øœ×*Ò*¨4Ñ0Ô0�Ý˜t™9œ9�Ø˜8Ò#Ð#Ø-1°%°&°&¬\�DÔ'¨Ñ*ØÐ+Ô+¨uÑ4Ð+Ô+Ð+àÔ+¨AÐ.ØÐ+Ô+¨xÑ7Ð+Ô+ð Ô%ð 	8øøõ ð 	ð 	ð 	ØˆDð	øøøà×ÒÑ Ô Ð Ð Ð s   ‚BB Â
BÂBc                 óÀ   — | j         sB| j                             ¦   «         }t          |¦  «        r| j                             |¦  «         |                      ¦   «          d S r>   )r»   rµ   rØ   r”   r°   r~   r[   r|   s     r   r  zSSLProtocol._process_outgoingÆ  s\   € ØÔ'ð 	,Ø”>×&Ò&Ñ(Ô(ˆDÝ�4‰yŒyð ,Ø”×%Ò% dÑ+Ô+Ð+Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#r   c                 óœ  — | j         t          j        t          j        fvrd S 	 | j        s`| j        r|                      ¦   «          n|                      ¦   «          | j        r|  	                    ¦   «          n|  
                    ¦   «          |                      ¦   «          d S # t          $ r!}|                      |d¦  «         Y d }~d S d }~ww xY w)Nr  )r¶   r
   r   r   rQ   rË   Ú_do_read__bufferedÚ_do_read__copiedr‘   rî   r  rh   rï   rþ   )r3   r"  s     r   rå   zSSLProtocol._do_readÏ  s   € àŒKÝ Ô(Ý Ô)ð ð ð ð
 ˆFð	AØÔ+ð -ØÔ/ð ,Ø×+Ò+Ñ-Ô-Ð-Ð-à×)Ò)Ñ+Ô+Ð+ØÔ&ð -Ø—N’NÑ$Ô$Ð$Ð$à×*Ò*Ñ,Ô,Ð,Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'øÝð 	Að 	Að 	AØ×Ò˜bÐ"?Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@øøøøð	Aøøøs   £A;B  Â 
CÂ*CÃCc                 ó,  ‡ — d}d}‰                       ‰                      ¦   «         ¦  «        }t          |¦  «        }	 ‰ j                             ||¦  «        }|dk    r^|}||k     r9‰ j                             ||z
  ||d …         ¦  «        }|dk    r||z  }nn#||k     °9‰ j                             ˆ fd„¦  «         n# t          $ r Y nw xY w|dk    r‰                      |¦  «         |s*‰  	                    ¦   «          ‰  
                    ¦   «          d S d S )Nr   r   c                  ó,   •— ‰                       ¦   «         S r>   )rå   rD   s   €r   rù   z0SSLProtocol._do_read__buffered.<locals>.<lambda>ø  s   ø€ °·²±´€ r   )rÈ   ro   r”   rº   rØ   r0   rÙ   r  rÊ   r  rI   )r3   Úoffsetr$  ÚbufÚwantss   `    r   r(  zSSLProtocol._do_read__bufferedå  sK  ø€ ØˆØˆà×+Ò+¨D×,FÒ,FÑ,HÔ,HÑIÔIˆÝ�C‘”ˆð	Ø”L×%Ò% e¨SÑ1Ô1ˆEà�qŠyˆyØ�Ø˜u’n�nØ œL×-Ò-¨e°f©n¸cÀ&À'À'¼lÑKÔK�EØ˜q’y�yØ %™˜˜àð ˜u’n�nð ”J×(Ò(Ð)@Ð)@Ð)@Ð)@ÑAÔAÐAøøÝð 	ð 	ð 	ØˆDð	øøøà�AŠ:ˆ:Ø×-Ò-¨fÑ5Ô5Ð5Øð 	#à×#Ò#Ñ%Ô%Ð%Ø× Ò Ñ"Ô"Ð"Ð"Ð"ð	#ð 	#s   ½A?B= Â=
C
Ã	C
c                 ó¼  — d}d}d}	 	 | j                              | j        ¦  «        }|sn(|rd}d}|}n|rd}||g}n|                     |¦  «         ŒJn# t          $ r Y nw xY w|r| j                             |¦  «         n/|s-| j                             d                     |¦  «        ¦  «         |s*|                      ¦   «          |  	                    ¦   «          d S d S )Nó   1TFr   )
rº   rØ   r¡   r’   r  rC   Údata_receivedÚjoinr  rI   )r3   ÚchunkÚzeroÚoneÚfirstr}   s         r   r)  zSSLProtocol._do_read__copied  s3  € ØˆØˆØˆð	ð'Øœ×)Ò)¨$¬-Ñ8Ô8�Øð ØØð 'Ø �DØ�CØ!�E�EØð 'Ø�CØ! 5˜>�D�Dà—K’K Ñ&Ô&Ð&ð'ð øõ ð 	ð 	ð 	ØˆDð	øøøàð 	=ØÔ×,Ò,¨UÑ3Ô3Ð3Ð3Øð 	=ØÔ×,Ò,¨S¯XªX°d©^¬^Ñ<Ô<Ð<Øð 	#à×#Ò#Ñ%Ô%Ð%Ø× Ò Ñ"Ô"Ð"Ð"Ð"ð	#ð 	#s   ˆAA Á
A!Á A!c                 ó8  — 	 | j         t          j        k    rBt          j        | _         | j                             ¦   «         }|rt          j        d¦  «         d S d S d S # t          t          f$ r ‚ t          $ r!}|                      |d¦  «         Y d }~d S d }~ww xY w)Nz?returning true from eof_received() has no effect when using sslzError calling eof_received())r¸   r   r   r   rC   rð   r   r!  ÚKeyboardInterruptÚ
SystemExitÚBaseExceptionrþ   )r3   Ú	keep_openr"  s      r   r  zSSLProtocol._call_eof_received   sæ   € ð
	BØŒÕ"2Ô"AÒAÐAÝ"2Ô"<�”Ø Ô.×;Ò;Ñ=Ô=�	Øð CÝ”Nð $Bñ Cô Cð Cð Cð Cð	 BÐAðCð Cøõ "¥:Ð.ð 	ð 	ð 	ØÝð 	Bð 	Bð 	BØ×Ò˜bÐ"@ÑAÔAÐAÐAÐAÐAÐAÐAÐAøøøøð	Bøøøs   ‚AA ÁBÁ8BÂBc                 ó:  — |                       ¦   «         }|| j        k    rw| j        spd| _        	 | j                             ¦   «          d S # t
          t          f$ r ‚ t          $ r/}| j         	                    d|| j
        | dœ¦  «         Y d }~d S d }~ww xY w|| j        k    rw| j        rrd| _        	 | j                             ¦   «          d S # t
          t          f$ r ‚ t          $ r/}| j         	                    d|| j
        | dœ¦  «         Y d }~d S d }~ww xY wd S d S )NTzprotocol.pause_writing() failed©ÚmessageÚ	exceptionrÔ   r@   Fz protocol.resume_writing() failed)rd   r`   rr   rC   Úpause_writingr8  r9  r:  r0   Úcall_exception_handlerr®   r_   Úresume_writing)r3   ÚsizerŽ   s      r   r[   z SSLProtocol._control_app_writing/  s³  € Ø×*Ò*Ñ,Ô,ˆØ�4Ô,Ò,Ð,°TÔ5MÐ,Ø'+ˆDÔ$ð
ØÔ"×0Ò0Ñ2Ô2Ð2Ð2Ð2øÝ%¥zÐ2ð ð ð ØÝ ð ð ð Ø”
×1Ò1Ø@Ø!$Ø!%Ô!4Ø $ð	3ð 3ñ ô ð ð ð ð ð ð ð øøøøðøøøð �TÔ-Ò-Ð-°$Ô2JÐ-Ø',ˆDÔ$ð
ØÔ"×1Ò1Ñ3Ô3Ð3Ð3Ð3øÝ%¥zÐ2ð ð ð ØÝ ð ð ð Ø”
×1Ò1ØAØ!$Ø!%Ô!4Ø $ð	3ð 3ñ ô ð ð ð ð ð ð ð øøøøðøøøð .Ð-Ð-Ð-s/   ¯A
 Á
BÁ%$BÂBÂ1C ÃDÃ'$DÄDc                 ó*   — | j         j        | j        z   S r>   )rµ   Úpendingr“   rD   s    r   rd   z"SSLProtocol._get_write_buffer_sizeL  s   € ØŒ~Ô%¨Ô(?Ñ?Ð?r   c                 ó^   — t          ||t          j        ¦  «        \  }}|| _        || _        d S r>   )r,   r   Ú!FLOW_CONTROL_HIGH_WATER_SSL_WRITEr`   r_   r\   s      r   rZ   z$SSLProtocol._set_write_buffer_limitsO  s7   € Ý,Ø�#•yÔBñDô D‰	ˆˆcà$(ˆÔ!Ø#&ˆÔ Ð Ð r   c                 ó   — d| _         d S rŒ   )rQ   rD   s    r   rT   zSSLProtocol._pause_readingW  s   € Ø#'ˆÔ Ð Ð r   c                 óf   ‡ — ‰ j         r(d‰ _         ˆ fd„}‰ j                             |¦  «         d S d S )NFc                  ó
  •— ‰ j         t          j        k    r‰                      ¦   «          d S ‰ j         t          j        k    r‰                      ¦   «          d S ‰ j         t          j        k    r‰                      ¦   «          d S d S r>   )r¶   r
   r   rå   r   ræ   r   rç   rD   s   €r   Úresumez+SSLProtocol._resume_reading.<locals>.resume^  s}   ø€ Ø”;Õ"2Ô":Ò:Ð:Ø—M’M‘O”O�O�O�OØ”[Õ$4Ô$=Ò=Ð=Ø—N’NÑ$Ô$Ð$Ð$Ð$Ø”[Õ$4Ô$=Ò=Ð=Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'ð >Ð=r   )rQ   r0   rÙ   )r3   rK  s   ` r   rW   zSSLProtocol._resume_readingZ  sW   ø€ ØÔ#ð 
	)Ø',ˆDÔ$ð(ð (ð (ð (ð (ð ŒJ× Ò  Ñ(Ô(Ð(Ð(Ð(ð
	)ð 
	)r   c                 ó  — |                       ¦   «         }|| j        k    r)| j        s"d| _        | j                             ¦   «          d S || j        k    r)| j        r$d| _        | j                             ¦   «          d S d S d S )NTF)ro   rl   r¼   r°   rU   rk   rX   )r3   rC  s     r   rh   z SSLProtocol._control_ssl_readingi  s‘   € Ø×)Ò)Ñ+Ô+ˆØ�4Ô,Ò,Ð,°TÔ5MÐ,Ø'+ˆDÔ$ØŒO×)Ò)Ñ+Ô+Ð+Ð+Ð+Ø�TÔ-Ò-Ð-°$Ô2JÐ-Ø',ˆDÔ$ØŒO×*Ò*Ñ,Ô,Ð,Ð,Ð,ð .Ð-Ð-Ð-r   c                 ó^   — t          ||t          j        ¦  «        \  }}|| _        || _        d S r>   )r,   r   Ú FLOW_CONTROL_HIGH_WATER_SSL_READrl   rk   r\   s      r   rg   z#SSLProtocol._set_read_buffer_limitsr  s7   € Ý,Ø�#•yÔAñCô C‰	ˆˆcà$(ˆÔ!Ø#&ˆÔ Ð Ð r   c                 ó   — | j         j        S r>   )r´   rE  rD   s    r   ro   z!SSLProtocol._get_read_buffer_sizex  s   € ØŒ~Ô%Ð%r   c                 ó&   — | j         rJ ‚d| _         dS )z\Called when the low-level transport's buffer goes over
        the high-water mark.
        TN)r»   rD   s    r   r@  zSSLProtocol.pause_writing}  s!   € ð Ô+Ð+Ð+Ð+Ø#'ˆÔ Ð Ð r   c                 óN   — | j         sJ ‚d| _         |                      ¦   «          dS )z^Called when the low-level transport's buffer drains below
        the low-water mark.
        FN)r»   r  rD   s    r   rB  zSSLProtocol.resume_writing„  s3   € ð Ô'Ð'Ð'Ð'Ø#(ˆÔ Ø×ÒÑ Ô Ð Ð Ð r   úFatal error on transportc                 ó\  — | j         r| j                              |¦  «         t          |t          ¦  «        r5| j                             ¦   «         rt          j        d| |d¬¦  «         d S d S t          |t          j	        ¦  «        s&| j         
                    ||| j         | dœ¦  «         d S d S )Nz%r: %sT)Úexc_infor=  )r°   r�   ru   ÚOSErrorr0   rê   r   rë   r   ÚCancelledErrorrA  )r3   rŽ   r>  s      r   rþ   zSSLProtocol._fatal_errorŒ  sÑ   € ØŒ?ð 	.ØŒO×(Ò(¨Ñ-Ô-Ð-å�c�7Ñ#Ô#ð 		ØŒz×#Ò#Ñ%Ô%ð EÝ”˜X t¨W¸tÐDÑDÔDÐDÐDÐDðEð Eå˜C¥Ô!:Ñ;Ô;ð 	ØŒJ×-Ò-Ø"Ø Ø!œ_Ø ð	/ð /ñ ô ð ð ð ð	ð 	r   )FNTNNr>   r–   )rR  ).r   r   r   r¡   rû   rÞ   rÜ   r6   r?   rÐ   r¾   rÕ   rÚ   rÅ   rÉ   rð   r8   rÛ   rÓ   rø   rä   rì   rI   r  ræ   rç   r  r‰   r{   rî   r  rå   r(  r)  r  r[   rd   rZ   rT   rW   rh   rg   ro   r@  rB  rþ   r   r   r   rž   rž     s¸  € € € € € Ø€Hà ÐØ $ÐØ#Ðð 59Ø&*Ø'+Ø&*ð	Q"ð Q"ð Q"ð Q"ðf	1ð 	1ð 	1ðð ð ð ð#ð #ð #ð ð  ð  ð"2ð "2ð "2ðH%ð %ð %ð ð  ð  ð!ð !ð !ðFð ð ð ð$-ð $-ð $-ðPð ð ð ;ð ;ð ;ð.ð .ð .ð$ð $ð $ðPð ð ð*Cð Cð Cðð ð ð
-ð -ð -ð8ð 8ð 8ð$ð $ð $ðAð Að Að0!ð !ð !ð $ð $ð $ðAð Að Að,#ð #ð #ð:#ð #ð #ð<Bð Bð Bðð ð ð:@ð @ð @ð'ð 'ð 'ð 'ð(ð (ð (ð)ð )ð )ð-ð -ð -ð'ð 'ð 'ð 'ð&ð &ð &ð
(ð (ð (ð!ð !ð !ðð ð ð ð ð r   rž   )r«   Úenumr›   r   ÚImportErrorÚ r   r   r   r   Úlogr   ÚSSLWantReadErrorÚSSLSyscallErrorr  ÚEnumr
   r   r$   r,   Ú_FlowControlMixinÚ	Transportr.   rÇ   rž   r   r   r   ú<module>r`     s»  ðØ Ð Ð Ð Ø €€€Ø €€€ðØ€J€J€J€JøØð ð ð Ø
€C€C€Cðøøøð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à€?ØÔ*¨CÔ,?Ð@€Nðð ð ð ð �t”yñ ô ð ð&ð &ð &ð &ð &�t”yñ &ô &ð &ð ð ð ðð ð ð*r;ð r;ð r;ð r;ð r;˜JÔ8Ø&Ô0ñr;ô r;ð r;ðjV
ð V
ð V
ð V
ð V
�)Ô,ñ V
ô V
ð V
ð V
ð V
s   Ž “œ