B
    Å S]5d  ã               @   s  d Z dZddlZddlZddlZddl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 dd
lmZ ddlmZ ddlmZ G dd„ dejejƒZG dd„ deejƒZG dd„ deejƒZG dd„ deƒZG dd„ deeejƒZG dd„ deeejƒZG dd„ dejƒZdS )z¦Event loop using a proactor and related classes.

A proactor is a "notify-on-completion" multiplexer.  Currently a
proactor is only implemented on Windows with IOCP.
)ÚBaseProactorEventLoopé    Né   )Úbase_events)Ú	constants)Úevents)Úfutures)Ú	protocols)Ússlproto)Ú
transports)Úloggerc                   s|   e Zd ZdZd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zddd„Zdd„ Zdd„ Zdd„ Z‡  ZS )Ú_ProactorBasePipeTransportz*Base class for pipe and socket transports.Nc                sœ   t ƒ  ||¡ |  |¡ || _|  |¡ || _d | _d | _d | _d| _	d| _
d| _d| _| jd k	rl| j ¡  | j | jj| ¡ |d k	r˜| j tj|d ¡ d S )Nr   F)ÚsuperÚ__init__Ú
_set_extraÚ_sockÚset_protocolÚ_serverÚ_bufferÚ	_read_futÚ
_write_futÚ_pending_writeÚ
_conn_lostÚ_closingÚ_eof_writtenZ_attachÚ_loopÚ	call_soonÚ	_protocolZconnection_mader   Z_set_result_unless_cancelled)ÚselfÚloopÚsockÚprotocolÚwaiterÚextraÚserver)Ú	__class__© ú(lib/python3.7/asyncio/proactor_events.pyr      s$    




z#_ProactorBasePipeTransport.__init__c             C   sÄ   | j jg}| jd kr | d¡ n| jr0| d¡ | jd k	rP| d| j ¡ › ¡ | jd k	rl| d| j›¡ | jd k	rˆ| d| j›¡ | jr¤| dt	| jƒ› ¡ | j
r´| d¡ d d	 |¡¡S )
NÚclosedÚclosingzfd=zread=zwrite=zwrite_bufsize=zEOF writtenz<{}>ú )r$   Ú__name__r   Úappendr   Úfilenor   r   r   Úlenr   ÚformatÚjoin)r   Úinfor%   r%   r&   Ú__repr__2   s     






z#_ProactorBasePipeTransport.__repr__c             C   s   || j d< d S )NÚpipe)Ú_extra)r   r   r%   r%   r&   r   D   s    z%_ProactorBasePipeTransport._set_extrac             C   s
   || _ d S )N)r   )r   r    r%   r%   r&   r   G   s    z'_ProactorBasePipeTransport.set_protocolc             C   s   | j S )N)r   )r   r%   r%   r&   Úget_protocolJ   s    z'_ProactorBasePipeTransport.get_protocolc             C   s   | j S )N)r   )r   r%   r%   r&   Ú
is_closingM   s    z%_ProactorBasePipeTransport.is_closingc             C   s\   | j r
d S d| _ |  jd7  _| js>| jd kr>| j | jd ¡ | jd k	rX| j ¡  d | _d S )NTr   )	r   r   r   r   r   r   Ú_call_connection_lostr   Úcancel)r   r%   r%   r&   ÚcloseP   s    

z _ProactorBasePipeTransport.closec             C   s,   | j d k	r(tjd| ›t| d |  ¡  d S )Nzunclosed transport )Úsource)r   ÚwarningsÚwarnÚResourceWarningr8   )r   r%   r%   r&   Ú__del__[   s    
z"_ProactorBasePipeTransport.__del__úFatal error on pipe transportc          	   C   sV   zDt |tƒr*| j ¡ rBtjd| |dd n| j ||| | jdœ¡ W d |  |¡ X d S )Nz%r: %sT)Úexc_info)ÚmessageÚ	exceptionZ	transportr    )	Ú
isinstanceÚOSErrorr   Ú	get_debugr   ÚdebugÚcall_exception_handlerr   Ú_force_close)r   Úexcr@   r%   r%   r&   Ú_fatal_errora   s    

z'_ProactorBasePipeTransport._fatal_errorc             C   s    | j d k	r6| j  ¡ s6|d kr*| j  d ¡ n| j  |¡ | jr@d S d| _|  jd7  _| jrj| j ¡  d | _| jr€| j ¡  d | _d| _	d | _
| j | j|¡ d S )NTr   r   )Ú_empty_waiterÚdoneÚ
set_resultZset_exceptionr   r   r   r7   r   r   r   r   r   r6   )r   rH   r%   r%   r&   rG   p   s"    

z'_ProactorBasePipeTransport._force_closec          	   C   s^   z| j  |¡ W d t| jdƒr,| j tj¡ | j ¡  d | _| j}|d k	rX| 	¡  d | _X d S )NÚshutdown)
r   Zconnection_lostÚhasattrr   rM   ÚsocketZ	SHUT_RDWRr8   r   Z_detach)r   rH   r#   r%   r%   r&   r6   „   s    
z0_ProactorBasePipeTransport._call_connection_lostc             C   s"   | j }| jd k	r|t| jƒ7 }|S )N)r   r   r-   )r   Úsizer%   r%   r&   Úget_write_buffer_size•   s    
z0_ProactorBasePipeTransport.get_write_buffer_size)NNN)r>   )r*   Ú
__module__Ú__qualname__Ú__doc__r   r1   r   r   r4   r5   r8   r=   rI   rG   r6   rQ   Ú__classcell__r%   r%   )r$   r&   r      s    
r   c                   sT   e Zd ZdZd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	ddd„Z
‡  ZS )Ú_ProactorReadPipeTransportzTransport for read pipes.Nc                s:   d | _ d| _tƒ  ||||||¡ | j | j¡ d| _d S )NTF)Ú_pending_dataÚ_pausedr   r   r   r   Ú_loop_reading)r   r   r   r    r!   r"   r#   )r$   r%   r&   r       s
    z#_ProactorReadPipeTransport.__init__c             C   s   | j  o| j S )N)rX   r   )r   r%   r%   r&   Ú
is_reading©   s    z%_ProactorReadPipeTransport.is_readingc             C   s0   | j s| jrd S d| _| j ¡ r,t d| ¡ d S )NTz%r pauses reading)r   rX   r   rD   r   rE   )r   r%   r%   r&   Úpause_reading¬   s
    
z(_ProactorReadPipeTransport.pause_readingc             C   sn   | j s| jsd S d| _| jd kr0| j | jd ¡ | j}d | _|d k	rT| j | j|¡ | j ¡ rjt	 
d| ¡ d S )NFz%r resumes reading)r   rX   r   r   r   rY   rW   Ú_data_receivedrD   r   rE   )r   Údatar%   r%   r&   Úresume_reading¿   s    

z)_ProactorReadPipeTransport.resume_readingc          
   C   sd   | j  ¡ rt d| ¡ y| j ¡ }W n. tk
rR } z|  |d¡ d S d }~X Y nX |s`|  ¡  d S )Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.)	r   rD   r   rE   r   Zeof_receivedÚ	ExceptionrI   r8   )r   Z	keep_openrH   r%   r%   r&   Ú_eof_receivedÑ   s    
z(_ProactorReadPipeTransport._eof_receivedc          
   C   s   | j r| jd kst‚|| _d S |s.|  ¡  d S t| jtjƒr€yt | j|¡ W qŒ t	k
r| } z|  
|d¡ d S d }~X Y qŒX n| j |¡ d S )Nz3Fatal error: protocol.buffer_updated() call failed.)rX   rW   ÚAssertionErrorr`   rB   r   r   ZBufferedProtocolZ_feed_data_to_buffered_protor_   rI   Zdata_received)r   r]   rH   r%   r%   r&   r\   ß   s    z)_ProactorReadPipeTransport._data_receivedc          
   C   s‚  d }z`y~|d k	rP| j |ks0| j d kr,| js0t‚d | _ | ¡ rH| ¡ }n| ¡  | jr^d }d S |dkrjd S | js„| jj 	| j
d¡| _ W nÆ tk
rÔ } z0| js¬|  |d¡ n| j ¡ rÄtjddd W d d }~X Y n tk
rþ } z|  |¡ W d d }~X Y nf tk
r, } z|  |d¡ W d d }~X Y n8 tjk
rL   | jsH‚ Y nX | jsd| j  | j¡ W d |d k	r||  |¡ X d S )Nó    i €  z"Fatal read error on pipe transportz*Read error on pipe transport while closingT)r?   )r   r   ra   rK   Úresultr7   rX   r   Ú	_proactorÚrecvr   ÚConnectionAbortedErrorrI   rD   r   rE   ÚConnectionResetErrorrG   rC   r   ÚCancelledErrorÚadd_done_callbackrY   r\   )r   Úfutr]   rH   r%   r%   r&   rY   ö   sB    



z(_ProactorReadPipeTransport._loop_reading)NNN)N)r*   rR   rS   rT   r   rZ   r[   r^   r`   r\   rY   rU   r%   r%   )r$   r&   rV   œ   s    rV   c                   s^   e Zd ZdZdZ‡ fdd„Zdd„ Zddd	„Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )Ú_ProactorBaseWritePipeTransportzTransport for write pipes.Tc                s   t ƒ j||Ž d | _d S )N)r   r   rJ   )r   ÚargsÚkw)r$   r%   r&   r   .  s    z(_ProactorBaseWritePipeTransport.__init__c             C   sÖ   t |tttfƒs$tdt|ƒj› ƒ‚| jr2tdƒ‚| j	d k	rDtdƒ‚|sLd S | j
rz| j
tjkrht d¡ |  j
d7  _
d S | jd kr¤| jd ks’t‚| jt|ƒd n.| js¾t|ƒ| _|  ¡  n| j |¡ |  ¡  d S )Nz/data argument must be a bytes-like object, not zwrite_eof() already calledz(unable to write; sendfile is in progresszsocket.send() raised exception.r   )r]   )rB   ÚbytesÚ	bytearrayÚ
memoryviewÚ	TypeErrorÚtyper*   r   ÚRuntimeErrorrJ   r   r   Z!LOG_THRESHOLD_FOR_CONNLOST_WRITESr   Úwarningr   r   ra   Ú_loop_writingÚ_maybe_pause_protocolÚextend)r   r]   r%   r%   r&   Úwrite2  s,    




z%_ProactorBaseWritePipeTransport.writeNc          
   C   sv  y|d k	r | j d kr | jr d S || j ks.t‚d | _ d| _|rF| ¡  |d krZ| j}d | _|s’| jrt| j | jd ¡ | j	rˆ| j
 tj¡ |  ¡  n\| jj | j
|¡| _ | j  ¡ sà| jdks¾t‚t|ƒ| _| j  | j¡ |  ¡  n| j  | j¡ | jd k	r| j d kr| j d ¡ W n\ tk
rB } z|  |¡ W d d }~X Y n0 tk
rp } z|  |d¡ W d d }~X Y nX d S )Nr   z#Fatal write error on pipe transport)r   r   ra   r   rc   r   r   r   r6   r   r   rM   rO   ÚSHUT_WRZ_maybe_resume_protocolrd   ÚsendrK   r-   ri   ru   rv   rJ   rL   rg   rG   rC   rI   )r   Úfr]   rH   r%   r%   r&   ru   X  s<    



z-_ProactorBaseWritePipeTransport._loop_writingc             C   s   dS )NTr%   )r   r%   r%   r&   Úcan_write_eof  s    z-_ProactorBaseWritePipeTransport.can_write_eofc             C   s   |   ¡  d S )N)r8   )r   r%   r%   r&   Ú	write_eof„  s    z)_ProactorBaseWritePipeTransport.write_eofc             C   s   |   d ¡ d S )N)rG   )r   r%   r%   r&   Úabort‡  s    z%_ProactorBaseWritePipeTransport.abortc             C   s:   | j d k	rtdƒ‚| j ¡ | _ | jd kr4| j  d ¡ | j S )NzEmpty waiter is already set)rJ   rs   r   Zcreate_futurer   rL   )r   r%   r%   r&   Ú_make_empty_waiterŠ  s    

z2_ProactorBaseWritePipeTransport._make_empty_waiterc             C   s
   d | _ d S )N)rJ   )r   r%   r%   r&   Ú_reset_empty_waiter’  s    z3_ProactorBaseWritePipeTransport._reset_empty_waiter)NN)r*   rR   rS   rT   Z_start_tls_compatibler   rx   ru   r|   r}   r~   r   r€   rU   r%   r%   )r$   r&   rk   (  s   &
)rk   c                   s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú_ProactorWritePipeTransportc                s4   t ƒ j||Ž | jj | jd¡| _| j | j¡ d S )Né   )	r   r   r   rd   re   r   r   ri   Ú_pipe_closed)r   rl   rm   )r$   r%   r&   r   —  s    z$_ProactorWritePipeTransport.__init__c             C   sv   |  ¡ rd S | ¡ dkst‚| jr4| jd ks0t‚d S || jksLt|| jfƒ‚d | _| jd k	rj|  tƒ ¡ n|  ¡  d S )Nrb   )	Z	cancelledrc   ra   r   r   r   rG   ÚBrokenPipeErrorr8   )r   rj   r%   r%   r&   rƒ   œ  s    
z(_ProactorWritePipeTransport._pipe_closed)r*   rR   rS   r   rƒ   rU   r%   r%   )r$   r&   r   –  s   r   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú_ProactorDuplexPipeTransportzTransport for duplex pipes.c             C   s   dS )NFr%   )r   r%   r%   r&   r|   ±  s    z*_ProactorDuplexPipeTransport.can_write_eofc             C   s   t ‚d S )N)ÚNotImplementedError)r   r%   r%   r&   r}   ´  s    z&_ProactorDuplexPipeTransport.write_eofN)r*   rR   rS   rT   r|   r}   r%   r%   r%   r&   r…   ¬  s   r…   c                   sB   e Zd ZdZejjZd‡ fdd„	Zdd„ Z	dd„ Z
d	d
„ Z‡  ZS )Ú_ProactorSocketTransportz Transport for connected sockets.Nc                s$   t ƒ  ||||||¡ t |¡ d S )N)r   r   r   Z_set_nodelay)r   r   r   r    r!   r"   r#   )r$   r%   r&   r   ¿  s    z!_ProactorSocketTransport.__init__c          	   C   s¨   || j d< y| ¡ | j d< W n4 tjtfk
rP   | j ¡ rLtjd|dd Y nX d| j kr¤y| 	¡ | j d< W n4 tjtfk
r¢   | j ¡ ržtjd|dd Y nX d S )NrO   Zsocknamezgetsockname() failed on %rT)r?   Úpeernamezgetpeername() failed on %r)
r3   ZgetsocknamerO   ÚerrorÚAttributeErrorr   rD   r   rt   Zgetpeername)r   r   r%   r%   r&   r   Ä  s    



z#_ProactorSocketTransport._set_extrac             C   s   dS )NTr%   )r   r%   r%   r&   r|   Ö  s    z&_ProactorSocketTransport.can_write_eofc             C   s2   | j s| jrd S d| _| jd kr.| j tj¡ d S )NT)r   r   r   r   rM   rO   ry   )r   r%   r%   r&   r}   Ù  s
    
z"_ProactorSocketTransport.write_eof)NNN)r*   rR   rS   rT   r   Z_SendfileModeZ
TRY_NATIVEZ_sendfile_compatibler   r   r|   r}   rU   r%   r%   )r$   r&   r‡   ¸  s    r‡   c                   sä   e Zd Z‡ fdd„Zd1dd„Zd2ddddddœdd	„Zd3d
d„Zd4dd„Zd5dd„Z‡ fdd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd6d$d%„Zd&d'„ Zd7d)d*„Zd+d,„ Zd-d.„ Zd/d0„ Z‡  ZS )8r   c                sH   t ƒ  ¡  t d|jj¡ || _|| _d | _i | _	| 
| ¡ |  ¡  d S )NzUsing proactor: %s)r   r   r   rE   r$   r*   rd   Ú	_selectorÚ_self_reading_futureÚ_accept_futuresZset_loopÚ_make_self_pipe)r   Zproactor)r$   r%   r&   r   ã  s    

zBaseProactorEventLoop.__init__Nc             C   s   t | |||||ƒS )N)r‡   )r   r   r    r!   r"   r#   r%   r%   r&   Ú_make_socket_transportí  s    
z,BaseProactorEventLoop._make_socket_transportF)Úserver_sideÚserver_hostnamer"   r#   Ússl_handshake_timeoutc         	   C   s0   t j| ||||||	d}
t| ||
||d |
jS )N)r’   )r"   r#   )r	   ZSSLProtocolr‡   Z_app_transport)r   Zrawsockr    Ú
sslcontextr!   r   r‘   r"   r#   r’   Zssl_protocolr%   r%   r&   Ú_make_ssl_transportò  s    
z)BaseProactorEventLoop._make_ssl_transportc             C   s   t | ||||ƒS )N)r…   )r   r   r    r!   r"   r%   r%   r&   Ú_make_duplex_pipe_transportÿ  s    z1BaseProactorEventLoop._make_duplex_pipe_transportc             C   s   t | ||||ƒS )N)rV   )r   r   r    r!   r"   r%   r%   r&   Ú_make_read_pipe_transport  s    z/BaseProactorEventLoop._make_read_pipe_transportc             C   s   t | ||||ƒS )N)r   )r   r   r    r!   r"   r%   r%   r&   Ú_make_write_pipe_transport  s    z0BaseProactorEventLoop._make_write_pipe_transportc                sP   |   ¡ rtdƒ‚|  ¡ rd S |  ¡  |  ¡  | j ¡  d | _d | _tƒ  ¡  d S )Nz!Cannot close a running event loop)	Z
is_runningrs   Ú	is_closedÚ_stop_accept_futuresÚ_close_self_piperd   r8   r‹   r   )r   )r$   r%   r&   r8     s    
zBaseProactorEventLoop.closec             Ã   s   | j  ||¡I d H S )N)rd   re   )r   r   Únr%   r%   r&   Ú	sock_recv   s    zBaseProactorEventLoop.sock_recvc             Ã   s   | j  ||¡I d H S )N)rd   Z	recv_into)r   r   Zbufr%   r%   r&   Úsock_recv_into#  s    z$BaseProactorEventLoop.sock_recv_intoc             Ã   s   | j  ||¡I d H S )N)rd   rz   )r   r   r]   r%   r%   r&   Úsock_sendall&  s    z"BaseProactorEventLoop.sock_sendallc             Ã   s   | j  ||¡I d H S )N)rd   Zconnect)r   r   Zaddressr%   r%   r&   Úsock_connect)  s    z"BaseProactorEventLoop.sock_connectc             Ã   s   | j  |¡I d H S )N)rd   Úaccept)r   r   r%   r%   r&   Úsock_accept,  s    z!BaseProactorEventLoop.sock_acceptc          
   Ã   s(  y|  ¡ }W n2 ttjfk
r> } zt d¡‚W d d }~X Y nX yt |¡j}W n, t	k
r| } zt d¡‚W d d }~X Y nX |r†|n|}|s’dS t
|dƒ}|r®t
|| |ƒn|}	t
||ƒ}d}
zLxFt
|	| |ƒ}|dkrÞ|
S | j ||||¡I d H  ||7 }|
|7 }
qÄW W d |
dkr"| |¡ X d S )Nznot a regular filer   l   ÿÿ )r,   rŠ   ÚioÚUnsupportedOperationr   ZSendfileNotAvailableErrorÚosÚfstatÚst_sizerC   Úminrd   ÚsendfileÚseek)r   r   ÚfileÚoffsetÚcountr,   ÚerrZfsizeZ	blocksizeZend_posZ
total_sentr%   r%   r&   Ú_sock_sendfile_native/  s2    


z+BaseProactorEventLoop._sock_sendfile_nativec             Ã   sV   |  ¡ }| ¡  | ¡ I d H  z| j|j|||ddI d H S | ¡  |rP| ¡  X d S )NF)Zfallback)rZ   r[   r   Zsock_sendfiler   r€   r^   )r   Ztransprª   r«   r¬   r^   r%   r%   r&   Ú_sendfile_nativeL  s    z&BaseProactorEventLoop._sendfile_nativec             C   sL   | j d k	r| j  ¡  d | _ | j ¡  d | _| j ¡  d | _|  jd8  _d S )Nr   )rŒ   r7   Ú_ssockr8   Ú_csockÚ_internal_fds)r   r%   r%   r&   rš   X  s    



z&BaseProactorEventLoop._close_self_pipec             C   sF   t  ¡ \| _| _| j d¡ | j d¡ |  jd7  _|  | j¡ d S )NFr   )rO   Z
socketpairr°   r±   Zsetblockingr²   r   Ú_loop_self_reading)r   r%   r%   r&   rŽ   b  s
    z%BaseProactorEventLoop._make_self_pipec          
   C   s„   y$|d k	r|  ¡  | j | jd¡}W nH tjk
r:   d S  tk
rl } z|  d|| dœ¡ W d d }~X Y nX || _| 	| j
¡ d S )Ni   z.Error on reading from the event loop self pipe)r@   rA   r   )rc   rd   re   r°   r   rh   r_   rF   rŒ   ri   r³   )r   r{   rH   r%   r%   r&   r³   j  s    z(BaseProactorEventLoop._loop_self_readingc             C   s>   y| j  d¡ W n( tk
r8   | jr4tjddd Y nX d S )Nó    z3Fail to write a null byte into the self-pipe socketT)r?   )r±   rz   rC   Ú_debugr   rE   )r   r%   r%   r&   Ú_write_to_self|  s    z$BaseProactorEventLoop._write_to_selféd   c                s(   d‡ ‡‡‡‡‡‡fdd„	‰ ˆ  ˆ ¡ d S )Nc          
      s$  yˆ| d k	rn|   ¡ \}}ˆjr,t dˆ||¡ ˆƒ }ˆd k	rXˆj||ˆdd|iˆˆd nˆj||d|iˆd ˆ ¡ rzd S ˆj ˆ¡} W n~ t	k
rè } zBˆ 
¡ dkrÂˆ d|ˆdœ¡ ˆ ¡  nˆjrØtjd	ˆdd
 W d d }~X Y n8 tjk
r   ˆ ¡  Y nX | ˆjˆ 
¡ < |  ˆ ¡ d S )Nz#%r got a new connection from %r: %rTrˆ   )r   r"   r#   r’   )r"   r#   éÿÿÿÿzAccept failed on a socket)r@   rA   rO   zAccept failed on socket %r)r?   )rc   rµ   r   rE   r”   r   r˜   rd   r    rC   r,   rF   r8   r   rh   r   ri   )r{   ZconnZaddrr    rH   )r   Úprotocol_factoryr   r#   r   r’   r“   r%   r&   r   ‰  s@    



z2BaseProactorEventLoop._start_serving.<locals>.loop)N)r   )r   r¹   r   r“   r#   Zbacklogr’   r%   )r   r¹   r   r#   r   r’   r“   r&   Ú_start_serving…  s    %z$BaseProactorEventLoop._start_servingc             C   s   d S )Nr%   )r   Z
event_listr%   r%   r&   Ú_process_events°  s    z%BaseProactorEventLoop._process_eventsc             C   s*   x| j  ¡ D ]}| ¡  qW | j  ¡  d S )N)r   Úvaluesr7   Úclear)r   Úfuturer%   r%   r&   r™   ´  s    z*BaseProactorEventLoop._stop_accept_futuresc             C   s6   | j  | ¡ d ¡}|r| ¡  | j |¡ | ¡  d S )N)r   Úpopr,   r7   rd   Ú_stop_servingr8   )r   r   r¾   r%   r%   r&   rÀ   ¹  s
    z#BaseProactorEventLoop._stop_serving)NNN)N)NN)NN)NN)N)NNr·   N)r*   rR   rS   r   r   r”   r•   r–   r—   r8   rœ   r   rž   rŸ   r¡   r®   r¯   rš   rŽ   r³   r¶   rº   r»   r™   rÀ   rU   r%   r%   )r$   r&   r   á  s<   
 
	 
 
 



 
)r   )rT   Ú__all__r¢   r¤   rO   r:   Ú r   r   r   r   r   r	   r
   Úlogr   Z_FlowControlMixinZBaseTransportr   ZReadTransportrV   ZWriteTransportrk   r   Z	Transportr…   r‡   ZBaseEventLoopr   r%   r%   r%   r&   Ú<module>   s:     m
'