U e5dۿ�@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl mZddl mZddl mZddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddlmZdZe jdkr�ed��dd�ZGdd�dej�ZGdd�dej �Z!Gdd�dej"ej#�Z$Gdd�dej%�Z&Gdd�d�Z'dd�Z(Gd d!�d!e'�Z)Gd"d#�d#e)�Z*Gd$d%�d%e)�Z+Gd&d'�d'e'�Z,Gd(d)�d)e'�Z-Gd*d+�d+ej.�Z/eZ0e/Z1dS),z2Selector event loop for Unix with signal handling.�N�)� base_events)�base_subprocess)� constants)� coroutines)�events)� exceptions)�futures)�selector_events)�tasks)� transports)�logger)�SelectorEventLoop�AbstractChildWatcher�SafeChildWatcher�FastChildWatcher�MultiLoopChildWatcher�ThreadedChildWatcher�DefaultEventLoopPolicyZwin32z+Signals are not really supported on WindowscCsdS)zDummy signal handler.N�)�signum�framerr�+/usr/lib64/python3.8/asyncio/unix_events.py�_sighandler_noop*srcs�eZdZdZd)�fdd� Z�fdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z d*dd�Z d+dd�Z d,dd�Z dd�Zd-ddddd�dd�Zd.dddddd�dd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Z�ZS)/�_UnixSelectorEventLoopzdUnix event loop. Adds signal handling and UNIX Domain Socket support to SelectorEventLoop. Ncst��|�i|_dS�N)�super�__init__�_signal_handlers)�self�selector�� __class__rrr5s z_UnixSelectorEventLoop.__init__csZt���t��s.t|j�D]}|�|�qn(|jrVtjd|�d�t |d�|j� �dS)NzClosing the loop z@ on interpreter shutdown stage, skipping signal handlers removal��source) r�close�sys� is_finalizing�listr�remove_signal_handler�warnings�warn�ResourceWarning�clear�r�sigr!rrr%9s �z_UnixSelectorEventLoop.closecCs|D]}|sq|�|�qdSr)�_handle_signal)r�datarrrr�_process_self_dataGsz)_UnixSelectorEventLoop._process_self_datac GsLt�|�st�|�rtd��|�|�|��zt�|j� ��Wn2t t fk rt}zt t |���W5d}~XYnXt�|||d�}||j|<zt�|t�t�|d�Wn�t k �rF}zz|j|=|j�szt�d�Wn4t t fk �r}zt�d|�W5d}~XYnX|jtjk�r4t d|�d���n�W5d}~XYnXdS)z�Add a handler for a signal. UNIX only. Raise ValueError if the signal number is invalid or uncatchable. Raise RuntimeError if there is a problem setting up the handler. z3coroutines cannot be used with add_signal_handler()NF������set_wakeup_fd(-1) failed: %s�sig � cannot be caught)rZ iscoroutineZiscoroutinefunction� TypeError� _check_signalZ _check_closed�signal� set_wakeup_fdZ_csock�fileno� ValueError�OSError� RuntimeError�strrZHandlerr� siginterruptr �info�errno�EINVAL)rr/�callback�args�exc�handleZnexcrrr�add_signal_handlerNs2 �   z)_UnixSelectorEventLoop.add_signal_handlercCs8|j�|�}|dkrdS|jr*|�|�n |�|�dS)z2Internal helper that is the actual signal handler.N)r�getZ _cancelledr)Z_add_callback_signalsafe)rr/rGrrrr0{s   z%_UnixSelectorEventLoop._handle_signalc Cs�|�|�z |j|=Wntk r,YdSX|tjkr@tj}ntj}zt�||�WnBtk r�}z$|jtj kr�t d|�d���n�W5d}~XYnX|js�zt� d�Wn2t tfk r�}zt �d|�W5d}~XYnXdS)zwRemove a handler for a signal. UNIX only. Return True if a signal handler was removed, False if not. Fr5r6Nr3r4T)r8r�KeyErrorr9�SIGINT�default_int_handler�SIG_DFLr=rBrCr>r:r<r rA)rr/�handlerrFrrrr)�s(    z,_UnixSelectorEventLoop.remove_signal_handlercCs6t|t�std|����|t��kr2td|����dS)z�Internal helper to validate a signal. Raise ValueError if the signal number is invalid or uncatchable. Raise RuntimeError if there is a problem setting up the handler. zsig must be an int, not zinvalid signal number N)� isinstance�intr7r9� valid_signalsr<r.rrrr8�s  z$_UnixSelectorEventLoop._check_signalcCst|||||�Sr)�_UnixReadPipeTransport�r�pipe�protocol�waiter�extrarrr�_make_read_pipe_transport�sz0_UnixSelectorEventLoop._make_read_pipe_transportcCst|||||�Sr)�_UnixWritePipeTransportrSrrr�_make_write_pipe_transport�sz1_UnixSelectorEventLoop._make_write_pipe_transportc �s�t����} | ��std��|��} t||||||||f| |d�| ��} | �| ��|j| �z| IdHWnDt t fk r��Yn,t k r�| � �| � �IdH�YnXW5QRX| S)NzRasyncio.get_child_watcher() is not activated, subprocess support is not installed.)rVrW)r�get_child_watcher� is_activer>� create_future�_UnixSubprocessTransport�add_child_handlerZget_pid�_child_watcher_callback� SystemExit�KeyboardInterrupt� BaseExceptionr%Z_wait) rrUrE�shell�stdin�stdout�stderr�bufsizerW�kwargs�watcherrV�transprrr�_make_subprocess_transport�s8  ��� �z1_UnixSelectorEventLoop._make_subprocess_transportcCs|�|j|�dSr)�call_soon_threadsafeZ_process_exited)r�pid� returncoderkrrrr`�sz._UnixSelectorEventLoop._child_watcher_callback)�ssl�sock�server_hostname�ssl_handshake_timeoutc �s |dkst|t�st�|r,|dkrLtd��n |dk r.cb)Zadd_done_callback)rr�rqr�rr�rr��sz6_UnixSelectorEventLoop._sock_add_cancellation_callback)N)NN)NN)N)N)N)�__name__� __module__� __qualname__�__doc__rr%r2rHr0r)r8rXrZrlr`r�r�r�r�r�r�� __classcell__rrr!rr/sH -   � � � �� .�� CFrcs�eZdZdZd�fdd� Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z e jfdd�Zddd�Zdd�Zdd�Z�ZS) rRiNcs�t��|�||jd<||_||_|��|_||_d|_d|_ t � |j�j }t �|�s�t �|�s�t �|�s�d|_d|_d|_td��t �|jd�|j�|jj|�|j�|jj|j|j�|dk r�|j�tj|d�dS)NrTFz)Pipe transport is for pipes/sockets only.)rr�_extra�_loop�_piper;�_fileno� _protocol�_closing�_pausedrxr�r�r��S_ISFIFOr��S_ISCHRr<� set_blocking� call_soon�connection_made� _add_reader� _read_readyr �_set_result_unless_cancelled)rr�rTrUrVrW�moder!rrr�s:    �� � �z_UnixReadPipeTransport.__init__cCs�|jjg}|jdkr |�d�n|jr0|�d�|�d|j���t|jdd�}|jdk r�|dk r�t� ||jt j �}|r�|�d�q�|�d�n |jdk r�|�d�n |�d�d� d � |��S) N�closed�closing�fd=� _selector�polling�idle�open�<{}>� )r"r�r��appendr�r��getattrr�r �_test_selector_event� selectorsZ EVENT_READ�format�join)rrAr r�rrr�__repr__�s(    �     z_UnixReadPipeTransport.__repr__c Cs�zt�|j|j�}WnDttfk r,Yn�tk rX}z|�|d�W5d}~XYn^X|rl|j� |�nJ|j � �r�t � d|�d|_|j �|j�|j �|jj�|j �|jd�dS)Nz"Fatal read error on pipe transport�%r was closed by peerT)rx�readr��max_sizer�r�r=� _fatal_errorr�Z data_receivedr�� get_debugr rAr��_remove_readerr�Z eof_received�_call_connection_lost)rr1rFrrrr��s  z"_UnixReadPipeTransport._read_readycCs>|js |jrdSd|_|j�|j�|j��r:t�d|�dS)NTz%r pauses reading)r�r�r�r�r�r�r �debug�rrrr� pause_reading�s   z$_UnixReadPipeTransport.pause_readingcCsB|js |jsdSd|_|j�|j|j�|j��r>t�d|�dS)NFz%r resumes reading) r�r�r�r�r�r�r�r r�r�rrr�resume_readings   z%_UnixReadPipeTransport.resume_readingcCs ||_dSr�r��rrUrrr� set_protocol sz#_UnixReadPipeTransport.set_protocolcCs|jSrr�r�rrr� get_protocolsz#_UnixReadPipeTransport.get_protocolcCs|jSr�r�r�rrr� is_closingsz!_UnixReadPipeTransport.is_closingcCs|js|�d�dSr)r��_closer�rrrr%sz_UnixReadPipeTransport.closecCs,|jdk r(|d|��t|d�|j��dS�Nzunclosed transport r#�r�r,r%�r�_warnrrr�__del__s z_UnixReadPipeTransport.__del__�Fatal error on pipe transportcCsZt|t�r4|jtjkr4|j��rLtjd||dd�n|j�||||j d��|� |�dS�Nz%r: %sT��exc_info)�message� exceptionr�rU) rOr=rBZEIOr�r�r r��call_exception_handlerr�r��rrFr�rrrr�s �z#_UnixReadPipeTransport._fatal_errorcCs(d|_|j�|j�|j�|j|�dS�NT)r�r�r�r�r�r��rrFrrrr�-sz_UnixReadPipeTransport._closecCs4z|j�|�W5|j��d|_d|_d|_XdSr�r�r%r�r�Zconnection_lostr�rrrr�2s  z,_UnixReadPipeTransport._call_connection_lost)NN)r�)r�r�r�r�rr�r�r�r�r�r�r�r%r*r+r�r�r�r�r�rrr!rrR�s rRcs�eZdZd%�fdd� Zdd�Zdd�Zdd �Zd d �Zd d �Zdd�Z dd�Z dd�Z dd�Z dd�Z dd�Zejfdd�Zdd�Zd&dd �Zd'd!d"�Zd#d$�Z�ZS)(rYNc s�t��||�||jd<||_|��|_||_t�|_d|_ d|_ t � |j�j }t�|�}t�|�}t�|�} |s�|s�| s�d|_d|_d|_td��t �|jd�|j�|jj|�| s�|r�tj�d�s�|j�|jj|j|j�|dk r�|j�tj|d�dS)NrTrFz?Pipe transport is only for pipes, sockets and character devicesZaix)rrr�r�r;r�r�� bytearray�_buffer� _conn_lostr�rxr�r�r�r�r�r�r<r�r�r�r�r&�platform� startswithr�r�r r�) rr�rTrUrVrWr�Zis_charZis_fifoZ is_socketr!rrr?s:       � �z _UnixWritePipeTransport.__init__cCs�|jjg}|jdkr |�d�n|jr0|�d�|�d|j���t|jdd�}|jdk r�|dk r�t� ||jt j �}|r�|�d�n |�d�|� �}|�d|���n |jdk r�|�d�n |�d�d � d �|��S) Nr�r�r�r�r�r�zbufsize=r�r�r�)r"r�r�r�r�r�r�r�r r�r�Z EVENT_WRITE�get_write_buffer_sizer�r�)rrAr r�rhrrrr�ds,    �     z _UnixWritePipeTransport.__repr__cCs t|j�Sr)�lenr�r�rrrr�|sz-_UnixWritePipeTransport.get_write_buffer_sizecCs6|j��rt�d|�|jr*|�t��n|��dS)Nr�)r�r�r rAr�r��BrokenPipeErrorr�rrrr�s   z#_UnixWritePipeTransport._read_readyc CsRt|tttf�stt|���t|t�r.t|�}|s6dS|jsB|jrj|jtj krXt � d�|jd7_dS|j �s8zt �|j|�}Wntttfk r�d}YnZttfk r��YnBtk r�}z$|jd7_|�|d�WY�dSd}~XYnX|t|�k�r dS|dk�r&t|�|d�}|j�|j|j�|j |7_ |��dS)Nz=pipe closed by peer or os.write(pipe, data) raised exception.rr�#Fatal write error on pipe transport)rO�bytesr�� memoryviewrw�reprr�r�rZ!LOG_THRESHOLD_FOR_CONNLOST_WRITESr �warningr�rx�writer�r�r�rarbrcr�r�r�Z _add_writer� _write_readyZ_maybe_pause_protocol)rr1�nrFrrrr�s8      z_UnixWritePipeTransport.writec Cs|jstd��zt�|j|j�}Wn�ttfk r:Yn�ttfk rR�Yn�t k r�}z6|j� �|j d7_ |j � |j�|�|d�W5d}~XYnhX|t|j�kr�|j� �|j � |j�|��|jr�|j �|j�|�d�dS|dk�r |jd|�=dS)NzData should not be emptyrrr)r�rwrxrr�r�r�rarbrcr-r�r��_remove_writerr�r�Z_maybe_resume_protocolr�r�r�)rrrFrrrr�s,    z$_UnixWritePipeTransport._write_readycCsdSr�rr�rrr� can_write_eof�sz%_UnixWritePipeTransport.can_write_eofcCsB|jr dS|jst�d|_|js>|j�|j�|j�|jd�dSr�) r�r�rwr�r�r�r�r�r�r�rrr� write_eof�s z!_UnixWritePipeTransport.write_eofcCs ||_dSrr�r�rrrr��sz$_UnixWritePipeTransport.set_protocolcCs|jSrr�r�rrrr��sz$_UnixWritePipeTransport.get_protocolcCs|jSrr�r�rrrr��sz"_UnixWritePipeTransport.is_closingcCs|jdk r|js|��dSr)r�r�r r�rrrr%�sz_UnixWritePipeTransport.closecCs,|jdk r(|d|��t|d�|j��dSr�r�r�rrrr��s z_UnixWritePipeTransport.__del__cCs|�d�dSr)r�r�rrr�abort�sz_UnixWritePipeTransport.abortr�cCsNt|t�r(|j��r@tjd||dd�n|j�||||jd��|�|�dSr�) rOr=r�r�r r�r�r�r�r�rrrr��s  �z$_UnixWritePipeTransport._fatal_errorcCsFd|_|jr|j�|j�|j��|j�|j�|j�|j|�dSr�) r�r�r�r r�r-r�r�r�r�rrrr��s  z_UnixWritePipeTransport._closecCs4z|j�|�W5|j��d|_d|_d|_XdSrr�r�rrrr��s  z-_UnixWritePipeTransport._call_connection_lost)NN)r�)N)r�r�r�rr�r�r�rrr r r�r�r�r%r*r+r�r r�r�r�r�rrr!rrY<s"% #   rYc@seZdZdd�ZdS)r^c Ks�d}|tjkrt��\}}zPtj|f||||d|d�|��|_|dk rh|��t|��d|d�|j_ d}W5|dk r�|��|��XdS)NF)rdrerfrgZuniversal_newlinesrh�wb)� buffering) � subprocess�PIPErzZ socketpairr%�Popen�_procr��detachre) rrErdrerfrgrhriZstdin_wrrr�_start s.  ���z_UnixSubprocessTransport._startN)r�r�r�rrrrrr^ sr^c@sHeZdZdZdd�Zdd�Zdd�Zdd �Zd d �Zd d �Z dd�Z dS)raHAbstract base class for monitoring child processes. Objects derived from this class monitor a collection of subprocesses and report their termination or interruption by a signal. New callbacks are registered with .add_child_handler(). Starting a new process must be done within a 'with' block to allow the watcher to suspend its activity until the new process if fully registered (this is needed to prevent a race condition in some implementations). Example: with watcher: proc = subprocess.Popen("sleep 1") watcher.add_child_handler(proc.pid, callback) Notes: Implementations of this class must be thread-safe. Since child watcher objects may catch the SIGCHLD signal and call waitpid(-1), there should be only one active object per process. cGs t��dS)aRegister a new child handler. Arrange for callback(pid, returncode, *args) to be called when process 'pid' terminates. Specifying another callback for the same process replaces the previous handler. Note: callback() must be thread-safe. N��NotImplementedError�rrnrDrErrrr_9s z&AbstractChildWatcher.add_child_handlercCs t��dS)z�Removes the handler for process 'pid'. The function returns True if the handler was successfully removed, False if there was nothing to remove.Nr�rrnrrr�remove_child_handlerDsz)AbstractChildWatcher.remove_child_handlercCs t��dS)z�Attach the watcher to an event loop. If the watcher was previously attached to an event loop, then it is first detached before attaching to the new loop. Note: loop may be None. Nr�rr�rrr� attach_loopLsz AbstractChildWatcher.attach_loopcCs t��dS)zlClose the watcher. This must be called to make sure that any underlying resource is freed. Nrr�rrrr%VszAbstractChildWatcher.closecCs t��dS)z�Return ``True`` if the watcher is active and is used by the event loop. Return True if the watcher is installed and ready to handle process exit notifications. Nrr�rrrr\]szAbstractChildWatcher.is_activecCs t��dS)zdEnter the watcher's context and allow starting new processes This function must return selfNrr�rrr� __enter__fszAbstractChildWatcher.__enter__cCs t��dS)zExit the watcher's contextNr�r�a�b�crrr�__exit__lszAbstractChildWatcher.__exit__N) r�r�r�r�r_rrr%r\rr!rrrrr"s   rcCs2t�|�rt�|� St�|�r*t�|�S|SdSr)rx� WIFSIGNALED�WTERMSIG� WIFEXITED� WEXITSTATUS)�statusrrr�_compute_returncodeqs     r'c@sDeZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dS)�BaseChildWatchercCsd|_i|_dSr)r�� _callbacksr�rrrr�szBaseChildWatcher.__init__cCs|�d�dSr)rr�rrrr%�szBaseChildWatcher.closecCs|jdk o|j��Sr)r�Z is_runningr�rrrr\�szBaseChildWatcher.is_activecCs t��dSrr)r� expected_pidrrr� _do_waitpid�szBaseChildWatcher._do_waitpidcCs t��dSrrr�rrr�_do_waitpid_all�sz BaseChildWatcher._do_waitpid_allcCs~|dkst|tj�st�|jdk r<|dkr<|jrrr%r�r!rrr%s  zFastChildWatcher.closec Cs0|j� |jd7_|W5QR�SQRXdS)Nr)r=r?r�rrrrszFastChildWatcher.__enter__c Cs^|j�B|jd8_|js"|js0W5QR�dSt|j�}|j��W5QRXt�d|�dS)Nrz5Caught subprocesses termination from unknown pids: %s)r=r?r>r?r-r r)rrrr Zcollateral_victimsrrrr!s  �zFastChildWatcher.__exit__c Gst|jstd��|j�Fz|j�|�}Wn.tk rT||f|j|<YW5QR�dSXW5QRX|||f|��dS)NzMust use the context manager)r?rwr=r>r;rJr))rrnrDrErorrrr_'sz"FastChildWatcher.add_child_handlercCs*z|j|=WdStk r$YdSXdSr1r2rrrrr5s z%FastChildWatcher.remove_child_handlerc Cs�zt�dtj�\}}Wntk r,YdSX|dkr:dSt|�}|j��z|j�|�\}}WnNtk r�|j r�||j |<|j � �r�t �d||�YW5QR�qd}YnX|j � �r�t �d||�W5QRX|dkr�t �d||�q|||f|��qdS)Nr3rz,unknown process %s exited with returncode %sr6z8Caught subprocess termination from unknown pid: %d -> %d)rxr8r9r:r'r=r)r;rJr?r>r�r�r r�r)rrnr&rorDrErrrr,<s@  �  ��z FastChildWatcher._do_waitpid_all) r�r�r�r�rr%rr!r_rr,r�rrr!rr�s  rc@sheZdZdZdd�Zdd�Zdd�Zdd �Zd d �Zd d �Z dd�Z dd�Z dd�Z dd�Z dd�ZdS)ra~A watcher that doesn't require running loop in the main thread. This implementation registers a SIGCHLD signal handler on instantiation (which may conflict with other code that install own handler for this signal). The solution is safe but it has a significant overhead when handling a big number of processes (*O(n)* each time a SIGCHLD is received). cCsi|_d|_dSr)r)�_saved_sighandlerr�rrrrzszMultiLoopChildWatcher.__init__cCs |jdk Sr)r@r�rrrr\~szMultiLoopChildWatcher.is_activecCsT|j��|jdkrdSt�tj�}||jkr:t�d�nt�tj|j�d|_dS)Nz+SIGCHLD handler was changed by outside code) r)r-r@r9� getsignalr.r/r r)rrNrrrr%�s     zMultiLoopChildWatcher.closecCs|Srrr�rrrr�szMultiLoopChildWatcher.__enter__cCsdSrr�r�exc_typeZexc_valZexc_tbrrrr!�szMultiLoopChildWatcher.__exit__cGs&t��}|||f|j|<|�|�dSr)r�get_running_loopr)r+)rrnrDrEr�rrrr_�sz'MultiLoopChildWatcher.add_child_handlercCs*z|j|=WdStk r$YdSXdSr1r2rrrrr�s z*MultiLoopChildWatcher.remove_child_handlercCsN|jdk rdSt�tj|j�|_|jdkr�s�z6ThreadedChildWatcher._join_threads..N)r(rI�valuesr�)r�threadsrOrrrrJ�sz"ThreadedChildWatcher._join_threadscCs|Srrr�rrrrszThreadedChildWatcher.__enter__cCsdSrrrBrrrr!szThreadedChildWatcher.__exit__cCs6dd�t|j���D�}|r2||j�d�t|d�dS)NcSsg|]}|��r|�qSr)rKrMrrrrP s�z0ThreadedChildWatcher.__del__..z0 has registered but not finished child processesr#)r(rIrQr"r,)rr�rRrrrr�s  �zThreadedChildWatcher.__del__cGsFt��}tj|jdt|j���||||fdd�}||j|<|��dS)Nzwaitpid-T)�target�namerErL) rrDr<ZThreadr+�nextrHrI�start)rrnrDrEr�rOrrrr_s � z&ThreadedChildWatcher.add_child_handlercCsdSr�rrrrrrsz)ThreadedChildWatcher.remove_child_handlercCsdSrrrrrrrsz ThreadedChildWatcher.attach_loopcCs�|dks t�zt�|d�\}}Wn(tk rH|}d}t�d|�Yn Xt|�}|��rht�d||�|� �r�t�d||�n|j |||f|��|j � |�dS)Nrr4r5r6rE) rwrxr8r:r rr'r�r�rFrmrIr;)rr�r*rDrErnr&rorrrr+"s( � �z ThreadedChildWatcher._do_waitpidN)r�r�r�r�rr\r%rJrr!r*r+r�r_rrr+rrrrr�s  rcsHeZdZdZeZ�fdd�Zdd�Z�fdd�Zdd �Z d d �Z �Z S) �_UnixDefaultEventLoopPolicyz:UNIX event loop policy with a watcher for child processes.cst���d|_dSr)rr�_watcherr�r!rrrAs z$_UnixDefaultEventLoopPolicy.__init__c CsHtj�8|jdkr:t�|_tt��tj�r:|j�|j j �W5QRXdSr) rr=rXrrOr<�current_thread� _MainThreadr�_localr�r�rrr� _init_watcherEs �z)_UnixDefaultEventLoopPolicy._init_watchercs6t��|�|jdk r2tt��tj�r2|j�|�dS)z�Set the event loop. As a side effect, if a child watcher was set before, then calling .set_event_loop() from the main thread will call .attach_loop(loop) on the child watcher. N)r�set_event_looprXrOr<rYrZrrr!rrr]Ms   �z*_UnixDefaultEventLoopPolicy.set_event_loopcCs|jdkr|��|jS)z~Get the watcher for child processes. If not yet set, a ThreadedChildWatcher object is automatically created. N)rXr\r�rrrr[[s z-_UnixDefaultEventLoopPolicy.get_child_watchercCs4|dkst|t�st�|jdk r*|j��||_dS)z$Set the watcher for child processes.N)rOrrwrXr%)rrjrrr�set_child_watcheres  z-_UnixDefaultEventLoopPolicy.set_child_watcher) r�r�r�r�rZ _loop_factoryrr\r]r[r^r�rrr!rrW=s   rW)2r�rBr�rGrxr�r9rzr�rr&r<r*�rrrrrrr r r r �logr �__all__r�� ImportErrorrZBaseSelectorEventLooprZ ReadTransportrRZ_FlowControlMixinZWriteTransportrYZBaseSubprocessTransportr^rr'r(rrrrZBaseDefaultEventLoopPolicyrWrrrrrr�s`             �NO5Ji}Y3