Wc(dZdZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl m Z dd l mZdd l mZdd l mZdd l mZdd lmZdZGddej*ej,ZGddeej0ZGddeej4ZGddeZGddeej:ZGddeeej>Z Gddeeej>Z!Gdde jDZ#dS)zEvent 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. )BaseProactorEventLoopN) base_events) constants)futures) exceptions) protocols)sslproto) transports)trsock)loggerctj||jd< |j|jd<d|jvr! |j|jd<dSdS#tj $r8|j jrtjd|dY|wxYw#tj $rd|jd<YdSwxYw)Nsocketsocknamezgetsockname() failed on %rTexc_infopeername) r TransportSocket_extra getsocknamererror_loop get_debugr warning getpeername) transportsocks 0/usr/lib64/python3.12/asyncio/proactor_events.py_set_socket_extrars!'!7!7!=IXC'+'7'7'9 $ )))) 0+/+;+;+=I  Z ( ( (*) <<CCC ?? $ $ & & NN,dT C C CC|| 0 0 0+/I  Z ( ( ( ( 0s$A5C5A CC#C+*C+ceZdZdZ dfd ZdZdZdZdZdZ d Z e jfd Z dd Zd ZdZdZxZS)_ProactorBasePipeTransportz*Base class for pipe and socket transports.Nc(tj|||j|||_|j |||_d|_d|_d|_d|_ d|_ d|_ d|_ d|_ |j |j j|jj!|j"j$||/|jj!t&j(|ddSdS)NrF)super__init__ _set_extra_sock set_protocol_server_buffer _read_fut _write_fut_pending_write _conn_lost_closing_called_connection_lost _eof_written_attachr call_soon _protocolconnection_mader_set_result_unless_cancelledselflooprprotocolwaiterextraserver __class__s rr$z#_ProactorBasePipeTransport.__init__2s %%   (##   ',$! << # LL " " T^^;;TBB   JJ !E!E!' / / / /  c|jjg}|j|jdn|jr|jd|j.|jd|jj |j |jd|j |j|jd|j|jr*|jdt|j|jr|jddjd j|S) Nclosedclosingzfd=zread=zwrite=zwrite_bufsize=z EOF writtenz<{}> ) r=__name__r&appendr.filenor*r+r)lenr0formatjoin)r7infos r__repr__z#_ProactorBasePipeTransport.__repr__Is''( ::  KK ! ! ! ]]] KK " " :: ! KK3djj//133 4 4 >> % KK222 3 3 ?? & KK444 5 5 <<< KK<T\\):<< = =     KK & &}}SXXd^,,r>c$||jd<dS)Npipe)rr7rs rr%z%_ProactorBasePipeTransport._set_extra[s" Fr>c||_dSNr3)r7r9s rr'z'_ProactorBasePipeTransport.set_protocol^s !r>c|jSrOrPr7s r get_protocolz'_ProactorBasePipeTransport.get_protocolas ~~r>c|jSrO)r.rRs r is_closingz%_ProactorBasePipeTransport.is_closingds }}r>c8|jrdSd|_|xjdz c_|js3|j'|jj |j d|j$|jjd|_dSdS)NTr) r.r-r)r+rr2_call_connection_lostr*cancelrRs rclosez _ProactorBasePipeTransport.closegs === F  1||| 7 JJ !;!;T B B >> % NN ! ! # #!DNNN & %r>c|j1|d|t||jjdSdS)Nzunclosed transport )source)r&ResourceWarningrY)r7_warns r__del__z"_ProactorBasePipeTransport.__del__rsJ :: ! E000/$ O O O JJ       " !r>Fatal error on pipe transportcD t|tr7|jjrGt j d||dn+|jj ||||jd|j|dS#|j|wxYw)Nz%r: %sTr)message exceptionrr9) isinstanceOSErrorrrr debugcall_exception_handlerr3 _force_close)r7excras r _fatal_errorz'_ProactorBasePipeTransport._fatal_errorws ##w''::''))LL44HHHH 11&!$!% $ 33   c " " " "D  c " " " " " "s A5B BcX|jV|jjs;||jjdn|jj||jr|j rdSd|_|xj dz c_|jr"|jjd|_|jr"|jjd|_ d|_ d|_ |jj|j|dS)NTrr) _empty_waiterdone set_result set_exceptionr.r/r-r+rXr*r,r)rr2rW)r7rhs rrgz'_ProactorBasePipeTransport._force_closes    )$2D2D2I2I2K2K{""--d333""0055 ===T999 F  1 ??? OO " " $ $"DO >>> NN ! ! # #!DN  T77====r>c |jj|t|jdrJ|jj dkr+|jj t j|jjd|_|j}||jd|_ d|_ dS#t|jdrJ|jj dkr+|jj t j|jjd|_|j}||jd|_ d|_ wxYw)NshutdownT) r3connection_losthasattrr&rErpr SHUT_RDWRrYr(_detachr/)r7rhr<s rrWz0_ProactorBasePipeTransport._call_connection_lostsC 0 NN * *3 / / tzz:..4::3D3D3F"3L3L ##F$4$455 JJ    DJ\\F!  # +/D ( ( (tzz:..4::3D3D3F"3L3L ##F$4$455 JJ    DJ\\F!  # +/D ( / / / /s CB3Fcj|j}|j|t|jz }|SrO)r,r)rF)r7sizes rget_write_buffer_sizez0_ProactorBasePipeTransport.get_write_buffer_sizes/"" << # C % %D r>NNN)r_)rC __module__ __qualname____doc__r$rJr%r'rSrUrYwarningswarnr^rirgrWrx __classcell__r=s@rr!r!.s4448$(//////.---$###""" " " "%MM # # # #>>>(000$r>r!cNeZdZdZ d fd ZdZdZdZdZd Z d d Z xZ S) _ProactorReadPipeTransportzTransport for read pipes.Ncd|_d|_tj||||||t ||_|j j|jd|_dS)NrqTF) _pending_data_length_pausedr#r$ bytearray_datarr2 _loop_reading) r7r8rr9r:r;r< buffer_sizer=s rr$z#_ProactorReadPipeTransport.__init__sa$&!  tXvufEE{+  T//00 r>c6|j o |j SrO)rr.rRs r is_readingz%_ProactorReadPipeTransport.is_readings<<5 $55r>c|js |jrdSd|_|jjrt j d|dSdS)NTz%r pauses reading)r.rrrr rerRs r pause_readingz(_ProactorReadPipeTransport.pause_readingsT ===DLLL F  ::   ! ! LL,d 3 3 3 3 " !r>c|js |jsdSd|_|j'|jj |j d|j }d|_|dkr5|jj |j|jd|||jjrtjd|dSdS)NFrqz%r resumes reading) r.rr*rr2rr_data_receivedrrr re)r7lengths rresume_readingz)_ProactorReadPipeTransport.resume_readings === F >> ! JJ !3!3T : :**$&! B;; JJ !4!4djj&6I6 R R ::   ! ! LL-t 4 4 4 4 " !r>cF|jjrtjd| |jj }|s|jdSdS#t tf$rt$r}|j|dYd}~dSd}~wwxYw)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) rrr rer3 eof_received SystemExitKeyboardInterrupt BaseExceptionrirY)r7 keep_openrhs r _eof_receivedz(_ProactorReadPipeTransport._eof_receiveds ::   ! ! LL*D 1 1 335Iy JJLLLLy-.          H J J FFFFF sA''B BB c|jr ||_dS|dkr|jdSt|jt j r% t j|j|dS|jj|dS#ttf$rt$r}|j|dYd}~dSd}~wwxYw)Nrz3Fatal error: protocol.buffer_updated() call failed.) rrrrcr3r BufferedProtocol_feed_data_to_buffered_protorrrri data_received)r7datarrhs rrz)_ProactorReadPipeTransport._data_receiveds <<<)/D % F Q;;    F dnni&@&@ A A 66t~~tLLLL NN ( ( . . . . 12       !!##122  s"BC4C  Cc`d}d} |nd|_|jrE|j}|dkr |dkr|j||dSdS|jd|}n|j |j r |dkr|j||dSdS|js@|jjj|j|j|_|js'|jj|j |dkr|j||dSdS#t$r^}|j s|j|dn4|jj!rt#j$ddYd}~d}~wt&$r}|j)|Yd}~d}~wt*$r}|j|dYd}~d}~wt,j.$r|j sYwxYw#|dkr|j||wxYw)Nrqrz"Fatal read error on pipe transportz*Read error on pipe transport while closingTr)r*rlresultrrrXr.rr _proactor recv_intor&add_done_callbackrConnectionAbortedErrorrirr reConnectionResetErrorrgrdrCancelledError)r7futrrrhs rrz(_ProactorReadPipeTransport._loop_readings- 2"&88:: ZZ\F{{D{{##D&1111{A ::gv.DDJJLL}}}2{{##D&1111{)<<H HG(#H($H HHHH-)NNNrrO) rCrzr{r|r$rrrrrrrrs@rrrs##486;666444&555$ ///20202020202020202r>rcReZdZdZdZfdZdZd dZdZdZ d Z d Z d Z xZ S) _ProactorBaseWritePipeTransportzTransport for write pipes.TcNtj|i|d|_dSrO)r#r$rkr7argskwr=s rr$z(_ProactorBaseWritePipeTransport.__init__Ks.$%"%%%!r>ct|tttfs%t dt |j |jr td|j td|sdS|jrM|jtjkrtjd|xjdz c_ dS|j |j!t|dS|j"s%t||_|j%dS|j"j'||j%dS)Nz/data argument must be a bytes-like object, not zwrite_eof() already calledz(unable to write; sendfile is in progresszsocket.send() raised exception.r)r)rcbytesr memoryview TypeErrortyperCr0 RuntimeErrorrkr-r!LOG_THRESHOLD_FOR_CONNLOST_WRITESr rr+ _loop_writingr)_maybe_pause_protocolextend)r7rs rwritez%_ProactorBaseWritePipeTransport.writeOsA$ : >??-Dz**--. .    ;< <    )IJ Jt F ???)"M"MMM@AA OOOq OO F ?? "   E$K  0 0 0 0$T?DL  & & ( ( ( ( LL   % %  & & ( ( ( (r>Nc: ||j|jrdSd|_d|_|r|j||j}d|_|s||jr'|j j |jd|jr+|jjtj|jn|j jj|j||_|jj!sJt#||_|jj%|j&|j)n&|jj%|j&|j*,|j|j*j-ddSdSdS#t.$r}|j1|Yd}~dSd}~wt2$r}|j5|dYd}~dSd}~wwxYw)Nrz#Fatal write error on pipe transport)r+r.r,rr)rr2rWr0r&rprSHUT_WR_maybe_resume_protocolrsendrlrFrrrrkrmrrgrdri)r7frrhs rrz-_ProactorBaseWritePipeTransport._loop_writingus & J}!8T]]]"DO"#D q |||# 4===JJ(()C)CTJJ$$$JJ''77 ++---"&**"6"6";";DJJ"M++--*-d)D'OO55d6H6HII..000OO55d6H6HII!!-$//2I""--d33333J2I--# # # #   c " " " " " " " " J J J   c#H I I I I I I I I Js)G F)G HG// H<HHcdSNTrRs r can_write_eofz-_ProactorBaseWritePipeTransport.can_write_eoftr>c(|jdSrO)rYrRs r write_eofz)_ProactorBaseWritePipeTransport.write_eofs r>c*|jddSrOrgrRs rabortz%_ProactorBaseWritePipeTransport.abort $r>c|j td|jj|_|j|jj d|jS)NzEmpty waiter is already set)rkrr create_futurer+rmrRs r_make_empty_waiterz2_ProactorBaseWritePipeTransport._make_empty_waiters\    )<= =!ZZ557 ?? "    ) )$ / /!!!r>cd|_dSrO)rkrRs r_reset_empty_waiterz3_ProactorBaseWritePipeTransport._reset_empty_waiters!r>NN)rCrzr{r|_start_tls_compatibler$rrrrrrrrrs@rrrEs$$ """""$)$)$)L'J'J'J'JR   """"""""""r>rc$eZdZfdZdZxZS)_ProactorWritePipeTransportctj|i||jjj |j d|_|j j|jdS)N) r#r$rrrecvr&r*r _pipe_closedrs rr$z$_ProactorWritePipeTransport.__init__sc$%"%%%--224::rB (():):;;;;r>c|jrdS|jrdSd|_|j|j t dS|j dSrO) cancelledr.r*r+rgBrokenPipeErrorrY)r7rs rrz(_ProactorWritePipeTransport._pipe_closedsZ ==?? F === F ?? &   o/ 0 0 0 0 JJLLLLr>)rCrzr{r$rrrs@rrrsG<<<<<       r>rcReZdZdZ d fd ZdZdZdZd dZd dZ d d Z xZ S) _ProactorDatagramTransportiNc||_d|_d|_tj |||||t j |_|jj|jdS)Nr)r:r;) _addressrk _buffer_sizer#r$ collectionsdequer)rr2r)r7r8rr9addressr:r;r=s rr$z#_ProactorDatagramTransport.__init__sm ! tXfEJJ#((*  T//0000r>c"t||dSrOrrMs rr%z%_ProactorDatagramTransport._set_extra$%%%%r>c|jSrO)rrRs rrxz0_ProactorDatagramTransport.get_write_buffer_sizes   r>c*|jddSrOrrRs rrz _ProactorDatagramTransport.abortrr>ct|tttfst dt ||sdS|j *|d|j fvrtd|j |jrY|j rM|jtjkrtjd|xjdz c_dS|jjt||f|xjt!|z c_|j"|j%|j'dS)Nz,data argument must be bytes-like object (%r)z!Invalid address: must be None or z!socket.sendto() raised exception.r)rcrrrrrr ValueErrorr-rrr rr)rDrrFr+rr)r7raddrs rsendtoz!_ProactorDatagramTransport.sendtos.$ : >??J J( (t F == $dDMM5J)J)JCDMMCCE E ???t}}})"M"MMMBCC OOOq OO F U4[$/00 SY& ?? "     ""$$$$r>c |jrdSd|_|r|j|jr|jrA|jr5|j r'|j j|jddS|jj\}}|xjt|zc_ |j7|j jj|j||_n8|j jj|j|||_|jj!|j"|j%dS#t&$r'}|j(j+|Yd}~dSd}~wt,$r}|j/|dYd}~dSd}~wwxYw)N)rz'Fatal write error on datagram transport)r-r+rr)rr.rr2rWpopleftrrFrrr&rrrrrdr3error_received Exceptionri)r7rrrrhs rrz(_ProactorDatagramTransport._loop_writings *#DOs <<!>tzz?C}}"N~~)001C1CDDDt00t<<<<t / / / NN ) )# . . . . . . .((   ===!= t00t<< = = = =sM F3(F3,F3B F33H3 H=GH$HHHH!H)ryrO) rCrzr{rr$r%rxrrrrrrs@rrrsH59$( 1 1 1 1 1 1&&&!!!   %%%%: * * * *D)=)=)=)=)=)=)=)=r>rceZdZdZdZdZdS)_ProactorDuplexPipeTransportzTransport for duplex pipes.cdS)NFrrRs rrz*_ProactorDuplexPipeTransport.can_write_eofRsur>ctrO)NotImplementedErrorrRs rrz&_ProactorDuplexPipeTransport.write_eofUs!!r>N)rCrzr{r|rrrr>rrrMs:&%"""""r>rcfeZdZdZej j Z dfd ZdZ dZ dZ xZ S)_ProactorSocketTransportz Transport for connected sockets.Ncxtj||||||tj|dSrO)r#r$r _set_nodelayr6s rr$z!_ProactorSocketTransport.__init__`s7 tXvufEE  &&&&r>c"t||dSrOrrMs rr%z#_ProactorSocketTransport._set_extraerr>cdSrrrRs rrz&_ProactorSocketTransport.can_write_eofhrr>c|js |jrdSd|_|j-|jj t j dSdSr)r.r0r+r&rprrrRs rrz"_ProactorSocketTransport.write_eofksT ===D--- F  ?? " JJ   / / / / # "r>ry) rCrzr{r|r _SendfileMode TRY_NATIVE_sendfile_compatibler$r%rrrrs@rrrYs+*$22==48$('''''' &&&0000000r>rceZdZfdZ d dZ d!ddddddddZ d dZ d"dZ d"d Z d"d Z fd Z d Z d Z dZ d#dZdZdZdZdZdZdZdZdZd!dZdZ d$dZdZdZdZxZS)%rctjtjd|jj ||_||_d|_i|_ |j||jtjtjur2tj |j"j%dSdS)NzUsing proactor: %s)r#r$r rer=rCr _selector_self_reading_future_accept_futuresset_loop_make_self_pipe threadingcurrent_thread main_threadsignal set_wakeup_fd_csockrE)r7proactorr=s rr$zBaseProactorEventLoop.__init__us  )8+=+=+F+FGG!!$(!!$   # # %)>)>)@ @ @  !3!3!5 6 6 6 6 A @r>Nc&t||||||SrO)r)r7rr9r:r;r<s r_make_socket_transportz,BaseProactorEventLoop._make_socket_transports'dHf(-v7 7r>F) server_sideserver_hostnamer;r<ssl_handshake_timeoutssl_shutdown_timeoutc |tj||||||| | } t||| ||| jS)N)rrr;r<)r SSLProtocolr_app_transport) r7rawsockr9 sslcontextr:rrr;r<rr ssl_protocols r_make_ssl_transportz)BaseProactorEventLoop._make_ssl_transportsX  ++h F_&;%9 ;; !w ',V = = =***r>c&t||||||SrO)r)r7rr9rr:r;s r_make_datagram_transportz.BaseProactorEventLoop._make_datagram_transports)$h*0%9 9r>c$t|||||SrO)rr7rr9r:r;s r_make_duplex_pipe_transportz1BaseProactorEventLoop._make_duplex_pipe_transports+D,0(FEK Kr>c$t|||||SrO)rr!s r_make_read_pipe_transportz/BaseProactorEventLoop._make_read_pipe_transports)$hNNr>c$t|||||SrO)rr!s r_make_write_pipe_transportz0BaseProactorEventLoop._make_write_pipe_transports+4+/65J Jr>c|jr td|jrdStjtj urt jd|j|j|jjd|_ d|_ tjdS)Nz!Cannot close a running event looprq) is_runningr is_closedr r r r r _stop_accept_futures_close_self_piperrYrr#)r7r=s rrYzBaseProactorEventLoop.closes ??  BC C >>   F  # # %)>)>)@ @ @   $ $ !!##    r>cPK|jj||d{S7rO)rr)r7rns r sock_recvzBaseProactorEventLoop.sock_recvs3^^((q111111111&cPK|jj||d{S7rO)rr)r7rbufs rsock_recv_intoz$BaseProactorEventLoop.sock_recv_intos3^^--dC888888888r/cPK|jj||d{S7rO)rr)r7rbufsizes r sock_recvfromz#BaseProactorEventLoop.sock_recvfroms3^^,,T7;;;;;;;;;r/rcpK|s t|}|jj|||d{S7rO)rFr recvfrom_into)r7rr1nbytess rsock_recvfrom_intoz(BaseProactorEventLoop.sock_recvfrom_intosCvXF^^11$VDDDDDDDDDs6cPK|jj||d{S7rO)rr)r7rrs r sock_sendallz"BaseProactorEventLoop.sock_sendalls3^^((t444444444r/cTK|jj||d|d{S7)Nr)rr)r7rrrs r sock_sendtoz!BaseProactorEventLoop.sock_sendtos7^^**4q'BBBBBBBBBs(cPK|jj||d{S7rO)rconnect)r7rrs r sock_connectz"BaseProactorEventLoop.sock_connects3^^++D':::::::::r/cNK|jj|d{S7rO)racceptrMs r sock_acceptz!BaseProactorEventLoop.sock_accepts1^^**4000000000s%cK |j} t j|j}|r|n|}|sdSt|d}|rt||z|n|} t||}d} t| |z |}|dkr| | dkr|j|SS|jj||||d{||z }| |z } b#ttjf$r}t j dd}~wwxYw#t$rt j dwxYw7m#| dkr|j|wxYw)Nznot a regular filerl)rEAttributeErrorioUnsupportedOperationrSendfileNotAvailableErrorosfstatst_sizerdminseekrsendfile) r7rfileoffsetcountrEerrfsize blocksizeend_pos total_sents r_sock_sendfile_nativez+BaseProactorEventLoop._sock_sendfile_natives M[[]F MHHV$,,E#UEE y1 ;/ 05#fune,,5VU#  "& 0)< >>% A~~ &!!! nn--dD&)LLLLLLL)#i'  7 78 M M M667KL L M M M M667KL L MMA~~ &!! " " " "sFC!D5D9(!D9 D7 D9D3D  D"D47D99EcnK|j}|j|jd{ |j|j|||dd{ |j |r|j SS7Q7+#|j |r|j wxYw)NF)fallback)rrr sock_sendfiler&rr)r7transprOrPrQrs r_sendfile_nativez&BaseProactorEventLoop._sendfile_natives**,''))))))) (++FLL$5:,<<<<<<< <  & & ( (~%%''' *<  & & ( (~%%'' ( ( ( (s"B #B B !B B&B4c|j"|jjd|_|jjd|_|jjd|_|xj dzc_dS)Nr)rrX_ssockrYr _internal_fdsrRs rr+z&BaseProactorEventLoop._close_self_pipes|  $ $ 0  % % , , . .(,D %     ar>ctj\|_|_|jj d|jj d|xj dz c_dS)NFr)r socketpairr^r setblockingr_rRs rrz%BaseProactorEventLoop._make_self_pipe s`#)#4#4#6  T[ && && ar>c ||j|j|urdS|jj|jd}||_|j |j dS#tj$rYdSttf$rt$r!}|jd||dYd}~dSd}~wwxYw)Niz.Error on reading from the event loop self pipe)rarbr8) rrrrr^r_loop_self_readingrrrrrrf)r7rrhs rrdz(BaseProactorEventLoop._loop_self_readings 9} ((11##DKK6A)*D %   7 7 8 8 8 8((    FF-.         ' 'K ))         s"!A1'A11CC"B>>Cc|j}|dS |jddS#t$r,|jrt j ddYdSYdSwxYw)Nz3Fail to write a null byte into the self-pipe socketTr)rrrd_debugr re)r7csocks r_write_to_selfz$BaseProactorEventLoop._write_to_self/s   = F , JJu     , , ,{{{ 0&*,,,,,,{{ ,s&/AAdc Tdfd jdS)Nc D |y|j\}}jrtjd||} j || dd|i nj ||d|ij rdSjj }|j j<|jdS#t$r} jdkr=jd|tj d j!n2jr tjd d Yd}~dSYd}~dSYd}~dSd}~wt"j$$r j!YdSwxYw) Nz#%r got a new connection from %r: %rTr)rr;r<rrrrqzAccept failed on a socket)rarbrzAccept failed on socket %rr)rrgr rerrr)rrBrrErrdrfr rrYrr) rconnrr9rhr8protocol_factoryr7r<rrrrs rr8z2BaseProactorEventLoop._start_serving..loopFs # *=!"JD${{{ %J%+T499//1H!-00 (JD#-t"4V2G1E 1GGG 33 (#-t"4V4EE>>##FNN))$/78$$T[[]3##D)))) 6 6 6;;=B&&//#>%("("8"8">11 JJLLL[[[LL!=!%666666666![[[[[!LLLLL,,     s%B CC F)A8E33(FFrO)r2) r7rnrrr<backlogrrr8s ````` ``@r_start_servingz$BaseProactorEventLoop._start_servingAsc $ *$ *$ *$ *$ *$ *$ *$ *$ *$ *$ *$ *$ *L tr>cdSrOr)r7 event_lists r_process_eventsz%BaseProactorEventLoop._process_eventsns r>c|jjD]}|j|jjdSrO)rvaluesrXclear)r7futures rr*z*BaseProactorEventLoop._stop_accept_futuresrsH**113  F MMOOO ""$$$$r>c|jj|jd}|r|j|jj ||j dSrO)rpoprErXr _stop_servingrY)r7rrws rrzz#BaseProactorEventLoop._stop_servingwsT%%))$++-> 6 MMOO $$T** r>ryrOr)r)NNrjNN)rCrzr{r$rrrr"r$r&rYr.r2r5r9r;r=r@rCrWr\r+rrdrirprsr*rzrrs@rrrssS 7 7 7 7 7=A267777 9= + $t"&!% + + + + + CG9999 BF*.KKKK @D(,OOOOAE)-JJJJ (222999<<<EEEE 555CCC;;;111""": ( ( (      99998,,,&>A-1,0++++Z   %%% r>r)$r|__all__rFrIrr}r r rrrrrr r r r logr r_FlowControlMixin BaseTransportr! ReadTransportrWriteTransportrrDatagramTransportr Transportrr BaseEventLooprrr>rrs #  000$BBBBB!=!=!+!9!9BBJO2O2O2O2O2!;!+!9!9O2O2dk"k"k"k"k"&@&0&?&?k"k"\"A,A=A=A=A=A=!;!+!=!=A=A=H " " " " "#=#B#-#7#7 " "000009>)33004IIIIIK55IIIIr>