Ë
    è×ïi†  ã                   ó¸  — d Z ddlZddlZddlZddlZddl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 ddl
mZ ddlmZ ddlmZ g d¢Zej0                  dk(  r ed«      ‚d„ Z G d„ dej6                  «      Z eed«      rd„ ZnddlZd„ Z G d„ dej@                  «      Z! G d„ dejD                  ejF                  «      Z$ eed«      rejJ                  Z&nddlZd„ Z& G d„ dejN                  «      Z( G d „ d!«      Z) G d"„ d#e)«      Z* G d$„ d%e*«      Z+ G d&„ d'e*«      Z, G d(„ d)ejZ                  «      Z.eZ/e.Z0y)*z2Selector event loop for Unix with signal handling.é    Né   )Úbase_events)Úbase_subprocess)Ú	constants)Ú
coroutines)Úevents)Úfutures)Úselector_events)Ú	selectors)Ú
transports)Ú	coroutine)Úlogger)ÚSelectorEventLoopÚAbstractChildWatcherÚSafeChildWatcherÚFastChildWatcherÚDefaultEventLoopPolicyÚwin32z+Signals are not really supported on Windowsc                  ó   — y)zDummy signal handler.N© )ÚsignumÚframes     úM/var/www/html/aiagents/fe/lib/python3.12/site-packages/asyncio/unix_events.pyÚ_sighandler_noopr   $   s   € àó    c                   óº   ‡ — e Zd ZdZdˆ fd„	Zd„ Zˆ fd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Z	 	 dd„Z	 	 dd„Ze	 dd„«       Zd„ Zeddddœd„«       Zedddddœd„«       Zˆ xZS )Ú_UnixSelectorEventLoopzdUnix event loop.

    Adds signal handling and UNIX Domain Socket support to SelectorEventLoop.
    Nc                 ó2   •— t         ‰| �  |«       i | _        y ©N)ÚsuperÚ__init__Ú_signal_handlers)ÚselfÚselectorÚ	__class__s     €r   r!   z_UnixSelectorEventLoop.__init__/   s   ø€ Ü‰Ñ˜Ô"Ø "ˆÕr   c                 ó*   — t        j                  «       S r   )ÚsocketÚ
socketpair©r#   s    r   Ú_socketpairz"_UnixSelectorEventLoop._socketpair3   s   € Ü× Ñ Ó"Ð"r   c                 óx   •— t         ‰| �  «        t        | j                  «      D ]  }| j	                  |«       Œ y r   )r    ÚcloseÚlistr"   Úremove_signal_handler)r#   Úsigr%   s     €r   r,   z_UnixSelectorEventLoop.close6   s4   ø€ Ü‰‰ŒÜ˜×-Ñ-Ó.ò 	,ˆCØ×&Ñ& sÕ+ñ	,r   c                 ó:   — |D ]  }|sŒ| j                  |«       Œ y r   )Ú_handle_signal)r#   Údatar   s      r   Ú_process_self_dataz)_UnixSelectorEventLoop._process_self_data;   s%   € Øò 	(ˆFÙàØ×Ñ Õ'ñ		(r   c                 óf  — t        j                  |«      st        j                  |«      rt        d«      ‚| j	                  |«       | j                  «        	 t        j                  | j                  j                  «       «       t        j                  ||| «      }|| j                   |<   	 t        j                  |t"        «       t        j$                  |d«       y# t        t        f$ r}t        t        |«      «      ‚d}~ww xY w# t        $ rŸ}| j                   |= | j                   sI	 t        j                  d«       n2# t        t        f$ r }t'        j(                  d|«       Y d}~nd}~ww xY w|j*                  t*        j,                  k(  rt        dj/                  |«      «      ‚‚ d}~ww xY w)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)r   ÚiscoroutineÚiscoroutinefunctionÚ	TypeErrorÚ_check_signalÚ_check_closedÚsignalÚset_wakeup_fdÚ_csockÚfilenoÚ
ValueErrorÚOSErrorÚRuntimeErrorÚstrr   ÚHandler"   r   Úsiginterruptr   ÚinfoÚerrnoÚEINVALÚformat)r#   r/   ÚcallbackÚargsÚexcÚhandleÚnexcs          r   Úadd_signal_handlerz)_UnixSelectorEventLoop.add_signal_handlerB   sq  € ô ×"Ñ" 8Ô,Ü×)Ñ)¨(Ô3Üð 8ó 9ð 9à×Ñ˜3ÔØ×ÑÔð	)ô
 × Ñ  §¡×!3Ñ!3Ó!5Ô6ô —‘˜x¨¨tÓ4ˆØ%+ˆ×Ñ˜cÑ"ð	ô �M‰M˜#Ô/Ô0ô ×Ñ  UÕ+øô œGÐ$ò 	)Üœs 3›xÓ(Ð(ûð	)ûô ò 	Ø×%Ñ% cÐ*Ø×(Ò(ðFÜ×(Ñ(¨Õ,øÜ"¤GÐ,ò FÜ—K‘KÐ >À×EÑEûðFúð �y‰yœEŸL™LÒ(Ü"Ð#<×#CÑ#CÀCÓ#HÓIÐIàûð	úsZ   Á-C Â,0D ÃDÃ,D Ä DÄ	F0ÄF+Ä+EÅ F+ÅE0ÅE+Å&F+Å+E0Å0;F+Æ+F0c                 óž   — | j                   j                  |«      }|€y|j                  r| j                  |«       y| j	                  |«       y)z2Internal helper that is the actual signal handler.N)r"   ÚgetÚ
_cancelledr.   Ú_add_callback_signalsafe)r#   r/   rN   s      r   r1   z%_UnixSelectorEventLoop._handle_signalo   sE   € à×&Ñ&×*Ñ*¨3Ó/ˆØˆ>ØØ×ÒØ×&Ñ& sÕ+à×)Ñ)¨&Õ1r   c                 ó2  — | j                  |«       	 | j                  |= |t        j                  k(  rt        j
                  }nt        j                  }	 t        j                  ||«       | j                  s	 t        j                  d«       yy# t        $ r Y yw xY w# t        $ r=}|j                  t        j                  k(  rt        dj                  |«      «      ‚‚ d}~ww xY w# t        t        f$ r }t        j                  d|«       Y d}~yd}~ww xY w)zwRemove a handler for a signal.  UNIX only.

        Return True if a signal handler was removed, False if not.
        Fr7   Nr5   r6   T)r;   r"   ÚKeyErrorr=   ÚSIGINTÚdefault_int_handlerÚSIG_DFLrB   rH   rI   rC   rJ   r>   rA   r   rG   )r#   r/   ÚhandlerrM   s       r   r.   z,_UnixSelectorEventLoop.remove_signal_handlery   sú   € ð
 	×Ñ˜3Ôð	Ø×%Ñ% cÐ*ð ”&—-‘-ÒÜ×0Ñ0‰Gä—n‘nˆGð	Ü�M‰M˜#˜wÔ'ð ×$Ò$ðAÜ×$Ñ$ RÔ(ñ øô- ò 	Ùð	ûô ò 	Ø�y‰yœEŸL™LÒ(Ü"Ð#<×#CÑ#CÀCÓ#HÓIÐIàûð		ûô ¤Ð(ò AÜ—‘Ð:¸C×@Ð@àûðAúsA   “B ÁB Á8C' Â	BÂBÂ	C$Â'8CÃC$Ã'DÃ6DÄDc                 óà   — t        |t        «      st        dj                  |«      «      ‚d|cxk  rt        j
                  k  s+n t        dj                  |t        j
                  «      «      ‚y)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.
        zsig must be an int, not {!r}r   zsig {} out of range(1, {})N)Ú
isinstanceÚintr:   rJ   r=   ÚNSIGrA   )r#   r/   s     r   r;   z$_UnixSelectorEventLoop._check_signal™   s^   € ô ˜#œsÔ#ÜÐ:×AÑAÀ#ÓFÓGÐGà�SÔ&œ6Ÿ;™;Ô&ÜØ,×3Ñ3°C¼¿¹ÓEóGð Gð 'r   c                 ó    — t        | ||||«      S r   )Ú_UnixReadPipeTransport©r#   ÚpipeÚprotocolÚwaiterÚextras        r   Ú_make_read_pipe_transportz0_UnixSelectorEventLoop._make_read_pipe_transport¦   s   € ä% d¨D°(¸FÀEÓJÐJr   c                 ó    — t        | ||||«      S r   )Ú_UnixWritePipeTransportra   s        r   Ú_make_write_pipe_transportz1_UnixSelectorEventLoop._make_write_pipe_transportª   s   € ä& t¨T°8¸VÀUÓKÐKr   c	              +   ó¼  K  — t        j                  «       5 }
t        j                  | ¬«      }t	        | |||||||f||dœ|	¤Ž}|
j                  |j                  «       | j                  |«       	 |E d {  –—†  d }|�*|j                  «        |j                  «       E d {  –—†  |‚	 d d d «       |S 7 Œ=# t        $ r}|}Y d }~ŒId }~ww xY w7 Œ+# 1 sw Y   S xY w­w)N)Úloop)rd   re   )r   Úget_child_watcherr	   ÚFutureÚ_UnixSubprocessTransportÚadd_child_handlerÚget_pidÚ_child_watcher_callbackÚ	Exceptionr,   Ú_wait)r#   rc   rL   ÚshellÚstdinÚstdoutÚstderrÚbufsizere   ÚkwargsÚwatcherrd   ÚtranspÚerrrM   s                  r   Ú_make_subprocess_transportz1_UnixSelectorEventLoop._make_subprocess_transport®   só   è ø€ ô ×%Ñ%Ó'ð 	¨7Ü—^‘^¨Ô.ˆFÜ-¨d°H¸dÀEØ.3°V¸VÀWð8à5;À5ñ8ð 17ñ8ˆFð
 ×%Ñ% f§n¡nÓ&6Ø&*×&BÑ&BÀFôLðØ!×!Ð!ð �àˆØ—‘”Ø!Ÿ<™<›>×)Ð)Ø�	ð ÷'	ð0 ˆð "ùÜò ð •ûð	úð *ø÷+	ð0 ˆüse   ‚C—ACÁ0B5Á5B3Á6B5Á:'CÂ!CÂ"CÂ)
CÂ3B5Â5	C
Â>CÃ CÃC
Ã
CÃCÃCc                 ó<   — | j                  |j                  |«       y r   )Úcall_soon_threadsafeÚ_process_exited)r#   ÚpidÚ
returncoder{   s       r   rq   z._UnixSelectorEventLoop._child_watcher_callbackÌ   s   € Ø×!Ñ! &×"8Ñ"8¸*ÕEr   )ÚsslÚsockÚserver_hostnamec             #   óþ  K  — |�t        |t        «      sJ ‚|r|€t        d«      ‚|�t        d«      ‚|�m|�t        d«      ‚t        j                  t        j                  t        j
                  d«      }	 |j                  d«       | j                  ||«      E d {  –—†  n|€t        d«      ‚|j                  d«       | j                  ||||«      E d {  –—† \  }}||fS 7 ŒF#  |j                  «        ‚ xY w7 Œ#­w)Nz/you have to pass server_hostname when using sslz+server_hostname is only meaningful with sslú3path and sock can not be specified at the same timer   Fzno path and sock were specified)
r\   rD   rA   r'   ÚAF_UNIXÚSOCK_STREAMÚsetblockingÚsock_connectr,   Ú_create_connection_transport)r#   Úprotocol_factoryÚpathrƒ   r„   r…   Ú	transportrc   s           r   Úcreate_unix_connectionz-_UnixSelectorEventLoop.create_unix_connectionÏ   s  è ø€ ð Ð&¬*°_ÄcÔ*JÐJÐJÙØÐ&Ü ØEóGð Gð Ð*Ü Ð!NÓOÐOàÐØÐÜ ØIóKð Kô —=‘=¤§¡´×1CÑ1CÀQÓGˆDðØ× Ñ  Ô'Ø×,Ñ,¨T°4Ó8×8Ñ8ð ˆ|Ü Ð!BÓCÐCØ×Ñ˜UÔ#à)-×)JÑ)JØÐ" C¨ó*:÷ :Ñˆ	�8à˜(Ð"Ð"ð 9ùðØ—
‘
”Øúð:ús<   ‚A3C=Á6&C% ÂC#ÂC% Â!6C=ÃC;ÃC=Ã#C% Ã%C8Ã8C=éd   )r„   Úbacklogrƒ   c                óþ  — t        |t        «      rt        d«      ‚|�R|�t        d«      ‚t	        j                  t        j
                  t        j                  «      }	 |j                  |«       nD|€t        d«      ‚|j                  t        j
                  k7  rt        dj                  |«      «      ‚t        j                  | |g«      }|j!                  |«       |j#                  d«       | j%                  ||||«       |S # t        $ r_}|j                  «        |j                  t        j                  k(  r,dj                  |«      }t        t        j                  |«      d ‚‚ d }~w |j                  «        ‚ xY w)Nz*ssl argument must be an SSLContext or Noner‡   zAddress {!r} is already in usez-path was not specified, and no sock specifiedz+A UNIX Domain Socket was expected, got {!r}F)r\   Úboolr:   rA   r'   rˆ   r‰   ÚbindrB   r,   rH   Ú
EADDRINUSErJ   Úfamilyr   ÚServerÚlistenrŠ   Ú_start_serving)	r#   r�   rŽ   r„   r’   rƒ   rM   ÚmsgÚservers	            r   Úcreate_unix_serverz)_UnixSelectorEventLoop.create_unix_serverò   sY  € ô �cœ4Ô ÜÐHÓIÐIàÐØÐÜ ØIóKð Kô —=‘=¤§¡´×1CÑ1CÓDˆDðØ—	‘	˜$•ð ˆ|Ü ØCóEð Eð �{‰{œfŸn™nÒ,Ü ØA×HÑHÈÓNóPð Pô ×#Ñ# D¨4¨&Ó1ˆØ�‰�GÔØ×Ñ˜ÔØ×ÑÐ,¨d°C¸Ô@Øˆøô3 ò Ø—
‘
”Ø—9‘9¤× 0Ñ 0Ò0ð ;×AÑAÀ$ÓG�CÜ!¤%×"2Ñ"2°CÓ8¸dÐBàûðØ—
‘
”Øús   ÁD Ä	E<ÄAE&Å&E<r   ©NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r*   r,   r3   rP   r1   r.   r;   rf   ri   r   r}   rq   r�   r�   Ú__classcell__©r%   s   @r   r   r   )   s¯   ø„ ñõ
#ò#ô,ò
(ò+òZ2òò@Gð @DØ(,óKð AEØ)-óLð ð *.òó ðò:Fð à#'¨dØ/3ó #ó ð #ðD ð'Ø $¨c°tó'ó ô'r   r   Úset_blockingc                 ó0   — t        j                  | d«       y )NF)Úosr¥   )Úfds    r   Ú_set_nonblockingr©     s   € Ü
�‰˜˜EÕ"r   c                 ó¼   — t        j                   | t         j                  «      }|t        j                  z  }t        j                   | t         j                  |«       y r   )ÚfcntlÚF_GETFLr§   Ú
O_NONBLOCKÚF_SETFL)r¨   Úflagss     r   r©   r©   #  s8   € Ü—‘˜B¤§¡Ó.ˆØœŸ™Ñ%ˆÜ�‰�BœŸ™ uÕ-r   c                   óz   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	e
j                  dk\  rd	„ Zdd
„Zd„ Zd„ Zˆ xZS )r`   i   c                 óð  •— t         ‰| �  |«       || j                  d<   || _        || _        |j                  «       | _        t        j                  | j                  «      j                  }t        j                  |«      s5t        j                  |«      s t        j                  |«      st        d«      ‚t        | j                  «       || _        d| _        | j                  j%                  | j                   j&                  | «       | j                  j%                  | j                  j(                  | j                  | j*                  «       |�'| j                  j%                  |j,                  d «       y y )Nrb   z)Pipe transport is for pipes/sockets only.F)r    r!   Ú_extraÚ_loopÚ_piper@   Ú_filenor§   ÚfstatÚst_modeÚstatÚS_ISFIFOÚS_ISSOCKÚS_ISCHRrA   r©   Ú	_protocolÚ_closingÚ	call_soonÚconnection_madeÚ
add_readerÚ_read_readyÚ_set_result_unless_cancelled)r#   rk   rb   rc   rd   re   Úmoder%   s          €r   r!   z_UnixReadPipeTransport.__init__-  s  ø€ Ü‰Ñ˜ÔØ"ˆ�‰�FÑØˆŒ
ØˆŒ
Ø—{‘{“}ˆŒÜ�x‰x˜Ÿ™Ó%×-Ñ-ˆÜ—‘˜dÔ#Ü—‘˜dÔ#Ü—‘˜TÔ"ÜÐHÓIÐIÜ˜Ÿ™Ô&Ø!ˆŒØˆŒØ�
‰
×Ñ˜TŸ^™^×;Ñ;¸TÔBà�
‰
×Ñ˜TŸZ™Z×2Ñ2Ø!Ÿ\™\¨4×+;Ñ+;ô	=àÐà�J‰J× Ñ  ×!DÑ!DÀdÕKð r   c                 ó  — | j                   j                  g}| j                  €|j                  d«       n| j                  r|j                  d«       |j                  d| j
                  z  «       | j                  �it        j                  | j                  j                  | j
                  t        j                  «      }|r|j                  d«       n#|j                  d«       n|j                  d«       ddj                  |«      z  S )NÚclosedÚclosingúfd=%sÚpollingÚidleú<%s>ú )r%   rŸ   r´   Úappendr½   rµ   r
   Ú_test_selector_eventr³   Ú	_selectorr   Ú
EVENT_READÚjoin)r#   rG   rÈ   s      r   Ú__repr__z_UnixReadPipeTransport.__repr__C  sÄ   € Ø—‘×'Ñ'Ð(ˆØ�:‰:ÐØ�K‰K˜Õ!Ø�]Š]Ø�K‰K˜	Ô"Ø�‰�G˜dŸl™lÑ*Ô+Ø�:‰:Ð!Ü%×:Ñ:ØŸ*™*×.Ñ.ØŸ,™,¬	×(<Ñ(<ó>ˆGñ Ø—‘˜IÕ&à—‘˜FÕ#à�K‰K˜Ô!Ø˜Ÿ™ ›Ñ&Ð&r   c                 óh  — 	 t        j                  | j                  | j                  «      }|r| j                  j                  |«       y | j                  j                  «       rt        j                  d| «       d| _
        | j                  j                  | j                  «       | j                  j                  | j                  j                  «       | j                  j                  | j                  d «       y # t        t         f$ r Y y t"        $ r}| j%                  |d«       Y d }~y d }~ww xY w)Nú%r was closed by peerTz"Fatal read error on pipe transport)r§   Úreadrµ   Úmax_sizer¼   Údata_receivedr³   Ú	get_debugr   rG   r½   Úremove_readerr¾   Úeof_receivedÚ_call_connection_lostÚBlockingIOErrorÚInterruptedErrorrB   Ú_fatal_error)r#   r2   rM   s      r   rÁ   z"_UnixReadPipeTransport._read_readyV  sâ   € ð	GÜ—7‘7˜4Ÿ<™<¨¯©Ó7ˆDñ Ø—‘×,Ñ,¨TÕ2à—:‘:×'Ñ'Ô)Ü—K‘KÐ 7¸Ô>Ø $�”Ø—
‘
×(Ñ(¨¯©Ô6Ø—
‘
×$Ñ$ T§^¡^×%@Ñ%@ÔAØ—
‘
×$Ñ$ T×%?Ñ%?ÀÕFøô  Ô!1Ð2ò 	ÙÜò 	IØ×Ñ˜cÐ#G×HÑHûð	Iús   ‚*C< Ã<D1ÄD1ÄD,Ä,D1c                 óN   — | j                   j                  | j                  «       y r   )r³   rØ   rµ   r)   s    r   Úpause_readingz$_UnixReadPipeTransport.pause_readingh  s   € Ø�
‰
× Ñ  §¡Õ.r   c                 ód   — | j                   j                  | j                  | j                  «       y r   )r³   rÀ   rµ   rÁ   r)   s    r   Úresume_readingz%_UnixReadPipeTransport.resume_readingk  s    € Ø�
‰
×Ñ˜dŸl™l¨D×,<Ñ,<Õ=r   c                 ó@   — | j                   s| j                  d «       y y r   )r½   Ú_closer)   s    r   r,   z_UnixReadPipeTransport.closen  s   € Ø�}Š}Ø�K‰K˜Õð r   ©é   é   c                 óŒ   — | j                   �8t        j                  d| z  t        «       | j                   j	                  «        y y ©Nzunclosed transport %r©r´   ÚwarningsÚwarnÚResourceWarningr,   r)   s    r   Ú__del__z_UnixReadPipeTransport.__del__v  ó5   € Ø�z‰zÐ%Ü—‘Ð5¸Ñ<¼oÔNØ—
‘
× Ñ Õ"ð &r   c                 ó<  — t        |t        «      rQ|j                  t        j                  k(  r4| j                  j                  «       rDt        j                  d| |d¬«       n*| j                  j                  ||| | j                  dœ«       | j                  |«       y ©Nz%r: %sT©Úexc_info)ÚmessageÚ	exceptionr�   rc   )r\   rB   rH   ÚEIOr³   r×   r   ÚdebugÚcall_exception_handlerr¼   rã   ©r#   rM   ró   s      r   rÝ   z#_UnixReadPipeTransport._fatal_error{  sr   € ä�sœGÔ$¨¯©´e·i±iÒ)?Ø�z‰z×#Ñ#Ô%Ü—‘˜X t¨W¸tÖDà�J‰J×-Ñ-Ø"Ø Ø!Ø ŸN™Nñ	/ô ð 	�‰�CÕr   c                 ó¨   — d| _         | j                  j                  | j                  «       | j                  j	                  | j
                  |«       y ©NT)r½   r³   rØ   rµ   r¾   rÚ   ©r#   rM   s     r   rã   z_UnixReadPipeTransport._close‰  s9   € ØˆŒØ�
‰
× Ñ  §¡Ô.Ø�
‰
×Ñ˜T×7Ñ7¸Õ=r   c                 ó  — 	 | j                   j                  |«       | j                  j                  «        d | _        d | _         d | _        y # | j                  j                  «        d | _        d | _         d | _        w xY wr   ©r¼   Úconnection_lostr´   r,   r³   rû   s     r   rÚ   z,_UnixReadPipeTransport._call_connection_lostŽ  óg   € ð	Ø�N‰N×*Ñ*¨3Ô/à�J‰J×ÑÔØˆDŒJØ!ˆDŒNØˆD�Jøð �J‰J×ÑÔØˆDŒJØ!ˆDŒNØˆD�Júó   ‚A Á1A>rž   ©zFatal error on pipe transport)rŸ   r    r¡   rÕ   r!   rÑ   rÁ   rß   rá   r,   ÚsysÚversion_inforí   rÝ   rã   rÚ   r£   r¤   s   @r   r`   r`   )  sL   ø„ à€HõLò,'ò&Gò$/ò>òð ×Ñ˜6Ò!ò	#ó
ò>ö
r   r`   c                   ó�   ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zej                  d
k\  rd„ Zd„ Zdd„Zdd„Zd„ Zˆ xZS )rh   c                 óF  •— t         ‰| �  ||«       || j                  d<   || _        |j	                  «       | _        t        j                  | j
                  «      j                  }t        j                  |«      }|s5t        j                  |«      s t        j                  |«      st        d«      ‚t        | j
                  «       || _        g | _        d| _        d| _        | j&                  j)                  | j                  j*                  | «       |st,        j.                  j1                  d«      sE| j&                  j)                  | j&                  j2                  | j
                  | j4                  «       |�'| j&                  j)                  |j6                  d «       y y )Nrb   z?Pipe transport is only for pipes, sockets and character devicesr   FÚaix)r    r!   r²   r´   r@   rµ   r§   r¶   r·   r¸   rº   r¹   r»   rA   r©   r¼   Ú_bufferÚ
_conn_lostr½   r³   r¾   r¿   r  ÚplatformÚ
startswithrÀ   rÁ   rÂ   )	r#   rk   rb   rc   rd   re   rÃ   Ú	is_socketr%   s	           €r   r!   z _UnixWritePipeTransport.__init__›  s;  ø€ Ü‰Ñ˜ Ô%Ø"ˆ�‰�FÑØˆŒ
Ø—{‘{“}ˆŒÜ�x‰x˜Ÿ™Ó%×-Ñ-ˆÜ—M‘M $Ó'ˆ	ÙÜ—‘˜dÔ#Ü—‘˜TÔ"Üð Dó Eð Eä˜Ÿ™Ô&Ø!ˆŒØˆŒØˆŒØˆŒà�
‰
×Ñ˜TŸ^™^×;Ñ;¸TÔBñ
 œCŸL™L×3Ñ3°EÔ:à�J‰J× Ñ  §¡×!6Ñ!6Ø!%§¡¨t×/?Ñ/?ôAð Ðà�J‰J× Ñ  ×!DÑ!DÀdÕKð r   c                 ó^  — | j                   j                  g}| j                  €|j                  d«       n| j                  r|j                  d«       |j                  d| j
                  z  «       | j                  ��t        j                  | j                  j                  | j
                  t        j                  «      }|r|j                  d«       n|j                  d«       | j                  «       }|j                  d|z  «       n|j                  d«       ddj                  |«      z  S )	NrÅ   rÆ   rÇ   rÈ   rÉ   z
bufsize=%srÊ   rË   )r%   rŸ   r´   rÌ   r½   rµ   r
   rÍ   r³   rÎ   r   ÚEVENT_WRITEÚget_write_buffer_sizerÐ   )r#   rG   rÈ   rx   s       r   rÑ   z _UnixWritePipeTransport.__repr__»  sã   € Ø—‘×'Ñ'Ð(ˆØ�:‰:ÐØ�K‰K˜Õ!Ø�]Š]Ø�K‰K˜	Ô"Ø�‰�G˜dŸl™lÑ*Ô+Ø�:‰:Ð!Ü%×:Ñ:ØŸ*™*×.Ñ.ØŸ,™,¬	×(=Ñ(=ó?ˆGñ Ø—‘˜IÕ&à—‘˜FÔ#à×0Ñ0Ó2ˆGØ�K‰K˜ wÑ.Õ/à�K‰K˜Ô!Ø˜Ÿ™ ›Ñ&Ð&r   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Úlen)Ú.0r2   s     r   ú	<genexpr>z@_UnixWritePipeTransport.get_write_buffer_size.<locals>.<genexpr>Ò  s   è ø€ Ò6 ”3�t—9Ñ6ùs   ‚)Úsumr  r)   s    r   r  z-_UnixWritePipeTransport.get_write_buffer_sizeÑ  s   € ÜÑ6¨¯©Ô6Ó6Ð6r   c                 óÐ   — | j                   j                  «       rt        j                  d| «       | j                  r| j                  t        «       «       y | j                  «        y )NrÓ   )r³   r×   r   rG   r  rã   ÚBrokenPipeErrorr)   s    r   rÁ   z#_UnixWritePipeTransport._read_readyÔ  s@   € à�:‰:×ÑÔ!Ü�K‰KÐ/°Ô6Ø�<Š<Ø�K‰KœÓ)Õ*à�K‰K�Mr   c                 ó6  — t        |t        t        t        f«      sJ t	        |«      «       ‚t        |t        «      rt        |«      }|sy | j
                  s| j                  rH| j
                  t        j                  k\  rt        j                  d«       | xj
                  dz  c_        y | j                  sj	 t        j                  | j                  |«      }|t'        |«      k(  ry |dkD  r||d  }| j(                  j+                  | j                  | j,                  «       | j                  j/                  |«       | j1                  «        y # t        t         f$ r d}Y Œˆt"        $ r1}| xj
                  dz  c_        | j%                  |d«       Y d }~y d }~ww xY w)Nz=pipe closed by peer or os.write(pipe, data) raised exception.r   r   ú#Fatal write error on pipe transport)r\   ÚbytesÚ	bytearrayÚ
memoryviewÚreprr  r½   r   Ú!LOG_THRESHOLD_FOR_CONNLOST_WRITESr   Úwarningr  r§   Úwriterµ   rÛ   rÜ   rr   rÝ   r  r³   Ú
add_writerÚ_write_readyrÌ   Ú_maybe_pause_protocol©r#   r2   ÚnrM   s       r   r  z_UnixWritePipeTransport.writeÝ  sD  € Ü˜$¤¬	´:Ð >Ô?ÐKÄÀdÃÓKÐ?Ü�dœIÔ&Ü˜dÓ#ˆDÙØà�?Š?˜dŸmšmØ�‰¤)×"MÑ"MÒMÜ—‘ð  Hô Ià�OŠO˜qÑ �OØà�|Š|ðÜ—H‘H˜TŸ\™\¨4Ó0�ð ”C˜“IŠ~ØØ�Q’Ø˜A˜B�x�Ø�J‰J×!Ñ! $§,¡,°×0AÑ0AÔBà�‰×Ñ˜DÔ!Ø×"Ñ"Õ$øô $Ô%5Ð6ò Ø’Üò Ø—’ 1Ñ$•Ø×!Ñ! #Ð'LÔMÜûðús   Â7 E ÅFÅFÅ''FÆFc                 óJ  — dj                  | j                  «      }|sJ d«       ‚| j                  j                  «        	 t        j                  | j
                  |«      }|t        |«      k(  r„| j                  j                  | j
                  «       | j                  «        | j                  sB| j                  r6| j                  j                  | j
                  «       | j                  d «       y |dkD  r||d  }| j                  j                  |«       y # t        t        f$ r | j                  j                  |«       Y y t         $ rV}| xj"                  dz  c_        | j                  j                  | j
                  «       | j%                  |d«       Y d }~y d }~ww xY w)Nr   zData should not be emptyr   r   r  )rÐ   r  Úclearr§   r  rµ   r  r³   Úremove_writerÚ_maybe_resume_protocolr½   rØ   rÚ   rÌ   rÛ   rÜ   rr   r  rÝ   r#  s       r   r!  z$_UnixWritePipeTransport._write_readyþ  s@  € Ø�x‰x˜Ÿ™Ó%ˆÙÐ/Ð/Ó/ˆtà�‰×ÑÔð	&Ü—‘˜Ÿ™ tÓ,ˆAð ”C˜“IŠ~Ø—
‘
×(Ñ(¨¯©Ô6Ø×+Ñ+Ô-Ø—|’|¨¯ªØ—J‘J×,Ñ,¨T¯\©\Ô:Ø×.Ñ.¨tÔ4ØØ�Q’Ø˜A˜B�x�à�L‰L×Ñ Õ%øô'  Ô!1Ð2ò 	&Ø�L‰L×Ñ Ö%Üò 	JØ�OŠO˜qÑ �Oð �J‰J×$Ñ$ T§\¡\Ô2Ø×Ñ˜cÐ#H×IÑIûð	Jús   Á  D Ä*F"ÅF"ÅAFÆF"c                  ó   — yrú   r   r)   s    r   Úcan_write_eofz%_UnixWritePipeTransport.can_write_eof  s   € Ør   c                 óø   — | j                   ry | j                  sJ ‚d| _         | j                  sL| j                  j	                  | j
                  «       | j                  j                  | j                  d «       y y rú   )r½   r´   r  r³   rØ   rµ   r¾   rÚ   r)   s    r   Ú	write_eofz!_UnixWritePipeTransport.write_eof  s[   € Ø�=Š=ØØ�zŠzÐˆzØˆŒØ�|Š|Ø�J‰J×$Ñ$ T§\¡\Ô2Ø�J‰J× Ñ  ×!;Ñ!;¸TÕBð r   c                 óX   — | j                   �| j                  s| j                  «        y y y r   )r´   r½   r,  r)   s    r   r,   z_UnixWritePipeTransport.close&  s$   € Ø�:‰:Ð!¨$¯-ª-à�N‰NÕð +8Ð!r   rä   c                 óŒ   — | j                   �8t        j                  d| z  t        «       | j                   j	                  «        y y rè   ré   r)   s    r   rí   z_UnixWritePipeTransport.__del__/  rî   r   c                 ó&   — | j                  d «       y r   )rã   r)   s    r   Úabortz_UnixWritePipeTransport.abort4  s   € Ø�‰�DÕr   c                 ó  — t        |t        t        f«      r4| j                  j	                  «       rDt        j                  d| |d¬«       n*| j                  j                  ||| | j                  dœ«       | j                  |«       y rð   )
r\   r  ÚConnectionResetErrorr³   r×   r   rö   r÷   r¼   rã   rø   s      r   rÝ   z$_UnixWritePipeTransport._fatal_error7  si   € ä�cœOÔ-AÐBÔCØ�z‰z×#Ñ#Ô%Ü—‘˜X t¨W¸tÖDà�J‰J×-Ñ-Ø"Ø Ø!Ø ŸN™Nñ	/ô ð 	�‰�CÕr   c                 ó>  — d| _         | j                  r%| j                  j                  | j                  «       | j                  j                  «        | j                  j                  | j                  «       | j                  j                  | j                  |«       y rú   )	r½   r  r³   r'  rµ   r&  rØ   r¾   rÚ   rû   s     r   rã   z_UnixWritePipeTransport._closeE  sf   € ØˆŒØ�<Š<Ø�J‰J×$Ñ$ T§\¡\Ô2Ø�‰×ÑÔØ�
‰
× Ñ  §¡Ô.Ø�
‰
×Ñ˜T×7Ñ7¸Õ=r   c                 ó  — 	 | j                   j                  |«       | j                  j                  «        d | _        d | _         d | _        y # | j                  j                  «        d | _        d | _         d | _        w xY wr   rý   rû   s     r   rÚ   z-_UnixWritePipeTransport._call_connection_lostM  rÿ   r   rž   r  r   )rŸ   r    r¡   r!   rÑ   r  rÁ   r  r!  r*  r,  r,   r  r  rí   r0  rÝ   rã   rÚ   r£   r¤   s   @r   rh   rh   ˜  s]   ø„ õLò@'ò,7òò%òB&ò8òCòð ×Ñ˜6Ò!ò	#ò
óó>ör   rh   Úset_inheritablec                 ó  — t        t        dd«      }t        j                  | t        j                  «      }|s)t        j                  | t        j                  ||z  «       y t        j                  | t        j                  || z  «       y )NÚ
FD_CLOEXECr   )Úgetattrr«   ÚF_GETFDÚF_SETFD)r¨   ÚinheritableÚcloexec_flagÚolds       r   Ú_set_inheritabler>  ]  s[   € Üœu l°AÓ6ˆä�k‰k˜"œeŸm™mÓ,ˆÙÜ�K‰K˜œEŸM™M¨3°Ñ+=Õ>ä�K‰K˜œEŸM™M¨3°,°Ñ+>Õ?r   c                   ó   — e Zd Zd„ Zy)rn   c           
      ó\  — d }|t         j                  k(  r7| j                  j                  «       \  }}t	        |j                  «       d«       t        j                  |f||||d|dœ|¤Ž| _        |�<|j                  «        t        |j                  «       d|¬«      | j                  _        y y )NF)rt   ru   rv   rw   Úuniversal_newlinesrx   Úwb)Ú	buffering)Ú
subprocessÚPIPEr³   r*   r>  r@   ÚPopenÚ_procr,   ÚopenÚdetachru   )	r#   rL   rt   ru   rv   rw   rx   ry   Ústdin_ws	            r   Ú_startz_UnixSubprocessTransport._starti  s£   € ØˆØ”J—O‘OÒ#ð "ŸZ™Z×3Ñ3Ó5‰NˆE�7ô ˜WŸ^™^Ó-¨uÔ5Ü×%Ñ%ØðAØ U°6À&Ø$¨gñAà9?ñAˆŒ
ð ÐØ�K‰KŒMÜ# G§N¡NÓ$4°dÀgÔNˆD�J‰JÕð r   N)rŸ   r    r¡   rK  r   r   r   rn   rn   g  s   „ óOr   rn   c                   ó4   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	r   aH  Abstract 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.
    c                 ó   — t        «       ‚)a  Register 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.
        ©ÚNotImplementedError©r#   r�   rK   rL   s       r   ro   z&AbstractChildWatcher.add_child_handler—  s   € ô "Ó#Ð#r   c                 ó   — t        «       ‚)z Removes the handler for process 'pid'.

        The function returns True if the handler was successfully removed,
        False if there was nothing to remove.rN  ©r#   r�   s     r   Úremove_child_handlerz)AbstractChildWatcher.remove_child_handler¢  s   € ô "Ó#Ð#r   c                 ó   — t        «       ‚)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.
        rN  ©r#   rk   s     r   Úattach_loopz AbstractChildWatcher.attach_loopª  s   € ô "Ó#Ð#r   c                 ó   — t        «       ‚)zlClose the watcher.

        This must be called to make sure that any underlying resource is freed.
        rN  r)   s    r   r,   zAbstractChildWatcher.close´  s   € ô
 "Ó#Ð#r   c                 ó   — t        «       ‚)zdEnter the watcher's context and allow starting new processes

        This function must return selfrN  r)   s    r   Ú	__enter__zAbstractChildWatcher.__enter__»  s   € ô "Ó#Ð#r   c                 ó   — t        «       ‚)zExit the watcher's contextrN  ©r#   ÚaÚbÚcs       r   Ú__exit__zAbstractChildWatcher.__exit__Á  s   € ä!Ó#Ð#r   N)
rŸ   r    r¡   r¢   ro   rS  rV  r,   rY  r_  r   r   r   r   r   €  s%   „ ñò,	$ò$ò$ò$ò$ó$r   r   c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚBaseChildWatcherc                 ó   — d | _         y r   )r³   r)   s    r   r!   zBaseChildWatcher.__init__È  s	   € Øˆ�
r   c                 ó&   — | j                  d «       y r   )rV  r)   s    r   r,   zBaseChildWatcher.closeË  s   € Ø×Ñ˜Õr   c                 ó   — t        «       ‚r   rN  )r#   Úexpected_pids     r   Ú_do_waitpidzBaseChildWatcher._do_waitpidÎ  ó   € Ü!Ó#Ð#r   c                 ó   — t        «       ‚r   rN  r)   s    r   Ú_do_waitpid_allz BaseChildWatcher._do_waitpid_allÑ  rg  r   c                 ó2  — |�t        |t        j                  «      sJ ‚| j                  �)| j                  j	                  t
        j                  «       || _        |�;|j                  t
        j                  | j                  «       | j                  «        y y r   )
r\   r   ÚAbstractEventLoopr³   r.   r=   ÚSIGCHLDrP   Ú	_sig_chldri  rU  s     r   rV  zBaseChildWatcher.attach_loopÔ  st   € Øˆ|œz¨$´×0HÑ0HÔIÐIÐIà�:‰:Ð!Ø�J‰J×,Ñ,¬V¯^©^Ô<àˆŒ
ØÐØ×#Ñ#¤F§N¡N°D·N±NÔCð × Ñ Õ"ð r   c                 óŽ   — 	 | j                  «        y # t        $ r(}| j                  j                  d|dœ«       Y d }~y d }~ww xY w)Nz$Unknown exception in SIGCHLD handler)ró   rô   )ri  rr   r³   r÷   rû   s     r   rm  zBaseChildWatcher._sig_chldâ  sG   € ð		Ø× Ñ Õ"øÜò 	ð �J‰J×-Ñ-ØAØ ñ/÷ ñ ûð		ús   ‚ “	Aœ?¿Ac                 ó°   — t        j                  |«      rt        j                  |«       S t        j                  |«      rt        j                  |«      S |S r   )r§   ÚWIFSIGNALEDÚWTERMSIGÚ	WIFEXITEDÚWEXITSTATUS)r#   Ústatuss     r   Ú_compute_returncodez$BaseChildWatcher._compute_returncodeî  sB   € Ü�>‰>˜&Ô!ä—K‘K Ó'Ð'Ð'Ü�\‰\˜&Ô!ä—>‘> &Ó)Ð)ð
 ˆMr   N)
rŸ   r    r¡   r!   r,   rf  ri  rV  rm  ru  r   r   r   ra  ra  Æ  s%   „ òòò$ò$ò#ò
ór   ra  c                   óP   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zˆ xZS )
r   ad  'Safe' child watcher implementation.

    This implementation avoids disrupting other code spawning processes by
    polling explicitly each process in the SIGCHLD handler instead of calling
    os.waitpid(-1).

    This is a safe solution but it has a significant overhead when handling a
    big number of children (O(n) each time SIGCHLD is raised)
    c                 ó0   •— t         ‰| �  «        i | _        y r   )r    r!   Ú
_callbacks©r#   r%   s    €r   r!   zSafeChildWatcher.__init__  s   ø€ Ü‰ÑÔØˆ�r   c                 óV   •— | j                   j                  «        t        ‰| �  «        y r   )rx  r&  r    r,   ry  s    €r   r,   zSafeChildWatcher.close  s   ø€ Ø�‰×ÑÔÜ‰‰�r   c                 ó   — | S r   r   r)   s    r   rY  zSafeChildWatcher.__enter__  s   € Øˆr   c                  ó   — y r   r   r[  s       r   r_  zSafeChildWatcher.__exit__  s   € Ør   c                 óH   — ||f| j                   |<   | j                  |«       y r   )rx  rf  rP  s       r   ro   z"SafeChildWatcher.add_child_handler  s%   € Ø (¨$Ð/ˆ�‰˜Ñð 	×Ñ˜Õr   c                 ó>   — 	 | j                   |= y# t        $ r Y yw xY w©NTF©rx  rV   rR  s     r   rS  z%SafeChildWatcher.remove_child_handler  ó(   € ð	Ø—‘ Ð$ØøÜò 	Ùð	úó   ‚ �	›c                 óZ   — t        | j                  «      D ]  }| j                  |«       Œ y r   )r-   rx  rf  rR  s     r   ri  z SafeChildWatcher._do_waitpid_all"  s(   € ä˜Ÿ™Ó(ò 	"ˆCØ×Ñ˜SÕ!ñ	"r   c                 ó  — |dkD  sJ ‚	 t        j                  |t         j                  «      \  }}|dk(  ry | j                  |«      }| j                  j                  «       rt        j                  d||«       	 	 | j                  j                  |«      \  }} |||g|¢­Ž  y # t        $ r |}d}t        j                  d|«       Y ŒOw xY w# t        $ r7 | j                  j                  «       rt        j                  d|d¬«       Y y Y y w xY w)Nr   ú$process %s exited with returncode %séÿ   z8Unknown child process pid %d, will report returncode 255z'Child watcher got an unexpected pid: %rTrñ   )r§   ÚwaitpidÚWNOHANGru  r³   r×   r   rö   ÚChildProcessErrorr  rx  ÚpoprV   )r#   re  r�   rt  r‚   rK   rL   s          r   rf  zSafeChildWatcher._do_waitpid'  s  € Ø˜aÒÐÐð	7ÜŸ*™* \´2·:±:Ó>‰KˆC�ð �aŠxàà×1Ñ1°&Ó9ˆJØ�z‰z×#Ñ#Ô%Ü—‘ÐCØ)¨:õ7ð		-Ø!Ÿ_™_×0Ñ0°Ó5‰NˆH�dñ �S˜*Ð, tÔ,øô7 !ò 	ð ˆCØˆJÜ�N‰NØJØöð	ûô( ò 	3ð �z‰z×#Ñ#Ô%Ü—‘ÐHØ"¨T÷3ñ &ð	3ús#   ‰'B# Á:C Â##C	ÃC	Ã;DÄD)rŸ   r    r¡   r¢   r!   r,   rY  r_  ro   rS  ri  rf  r£   r¤   s   @r   r   r   ü  s0   ø„ ñôôòòòòò"ö
 -r   r   c                   óJ   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	r   aW  'Fast' child watcher implementation.

    This implementation reaps every terminated processes by calling
    os.waitpid(-1) directly, possibly breaking other code spawning processes
    and waiting for their termination.

    There is no noticeable overhead when handling a big number of children
    (O(1) each time a child terminates).
    c                 ó~   •— t         ‰| �  «        i | _        t        j                  «       | _        i | _        d| _        y )Nr   )r    r!   rx  Ú	threadingÚLockÚ_lockÚ_zombiesÚ_forksry  s    €r   r!   zFastChildWatcher.__init__T  s1   ø€ Ü‰ÑÔØˆŒÜ—^‘^Ó%ˆŒ
ØˆŒØˆ�r   c                 óŠ   •— | j                   j                  «        | j                  j                  «        t        ‰| �  «        y r   )rx  r&  r�  r    r,   ry  s    €r   r,   zFastChildWatcher.close[  s,   ø€ Ø�‰×ÑÔØ�‰×ÑÔÜ‰‰�r   c                 ót   — | j                   5  | xj                  dz  c_        | cd d d «       S # 1 sw Y   y xY w)Nr   )r�  r‘  r)   s    r   rY  zFastChildWatcher.__enter__`  s/   € Ø�Z‰Zñ 	Ø�KŠK˜1Ñ�Kà÷	÷ 	ò 	ús   �.®7c                 ó>  — | j                   5  | xj                  dz  c_        | j                  s| j                  s
	 d d d «       y t        | j                  «      }| j                  j	                  «        d d d «       t        j                  d«       y # 1 sw Y   Œ xY w)Nr   z5Caught subprocesses termination from unknown pids: %s)r�  r‘  r�  rD   r&  r   r  )r#   r\  r]  r^  Úcollateral_victimss        r   r_  zFastChildWatcher.__exit__f  s{   € Ø�Z‰Zñ 	"Ø�KŠK˜1Ñ�Kà�{Š{ $§-¢-Ø÷		"ð 	"ô "% T§]¡]Ó!3ÐØ�M‰M×ÑÔ!÷	"ô 	�‰ØCØõ	 ÷	"ð 	"ús   �/BÁ/BÂBc                 ó
  — | j                   sJ d«       ‚| j                  5  	 | j                  j                  |«      }	 d d d «        ||g|¢­Ž  y # t        $ r ||f| j
                  |<   Y d d d «       y w xY w# 1 sw Y   Œ<xY w)NzMust use the context manager)r‘  r�  r�  rŠ  rV   rx  )r#   r�   rK   rL   r‚   s        r   ro   z"FastChildWatcher.add_child_handlert  sŠ   € Ø�{Š{Ð:Ð:Ó:ˆ{Ø�Z‰Zñ 	ðØ!Ÿ]™]×.Ñ.¨sÓ3‘
÷	ñ 	��jÐ( 4Ô(øô ò à'/° ~�—‘ Ñ$Ø÷	ð 	ðú÷	ð 	ús(    A9¢AÁA6Á+A9Á5A6Á6A9Á9Bc                 ó>   — 	 | j                   |= y# t        $ r Y yw xY wr  r€  rR  s     r   rS  z%FastChildWatcher.remove_child_handler�  r�  r‚  c                 óž  — 	 	 t        j                  dt         j                  «      \  }}|dk(  ry | j                  |«      }| j
                  5  	 | j                  j                  |«      \  }}| j                  j                  «       rt        j                  d||«       	 d d d «       €t        j                  d||«       n
 |||g¢­Ž  ŒÊ# t        $ r Y y w xY w# t        $ r\ | j                  rK|| j                  |<   | j                  j                  «       rt        j                  d||«       Y d d d «       �Œ:d }Y Œ w xY w# 1 sw Y   Œ¥xY w)Nr5   r   r…  z,unknown process %s exited with returncode %sz8Caught subprocess termination from unknown pid: %d -> %d)r§   r‡  rˆ  ru  r‰  r�  rx  rŠ  r³   r×   r   rö   rV   r‘  r�  r  )r#   r�   rt  r‚   rK   rL   s         r   ri  z FastChildWatcher._do_waitpid_allˆ  sI  € ð ð
>Ü Ÿj™j¨¬R¯Z©ZÓ8‘��Vð
 ˜!’8àà!×5Ñ5°fÓ=�
à—‘ñ 6ð6Ø%)§_¡_×%8Ñ%8¸Ó%=‘N�H˜dð —z‘z×+Ñ+Ô-ÜŸ™Ð%KØ%(¨*õ6÷!6ð& ÐÜ—‘ðØ # Zõ1ñ ˜˜jÐ0¨4Ó0ðK øô %ò áðûô  ò 
$à—{’{à-7˜Ÿ™ cÑ*ØŸ:™:×/Ñ/Ô1Ü"ŸL™Lð *>à),¨jô:ð !÷6ñ 6ð  $’Hð
$ú÷6ð 6úsN   ƒ'C ÁEÁCÁ-2EÃ	CÃCÃAE Ä0EÄ;E Ä=EÄ?E Å EÅE)rŸ   r    r¡   r¢   r!   r,   rY  r_  ro   rS  ri  r£   r¤   s   @r   r   r   J  s+   ø„ ñôôò
ò ò)òö(1r   r   c                   óB   ‡ — e Zd ZdZeZˆ fd„Zd„ Zˆ fd„Zd„ Z	d„ Z
ˆ xZS )Ú_UnixDefaultEventLoopPolicyz:UNIX event loop policy with a watcher for child processes.c                 ó0   •— t         ‰| �  «        d | _        y r   )r    r!   Ú_watcherry  s    €r   r!   z$_UnixDefaultEventLoopPolicy.__init__·  s   ø€ Ü‰ÑÔØˆ�r   c                 ó:  — t         j                  5  | j                  €jt        «       | _        t	        t        j                  «       t
        j                  «      r/| j                  j                  | j                  j                  «       d d d «       y # 1 sw Y   y xY wr   )r   r�  rœ  r   r\   r�  Úcurrent_threadÚ_MainThreadrV  Ú_localr³   r)   s    r   Ú_init_watcherz)_UnixDefaultEventLoopPolicy._init_watcher»  sn   € Ü�\‰\ñ 	AØ�}‰}Ð$Ü 0Ó 2�”Üœi×6Ñ6Ó8Ü'×3Ñ3ô5à—M‘M×-Ñ-¨d¯k©k×.?Ñ.?Ô@÷	A÷ 	Añ 	Aús   ‘A7BÂBc                 óÎ   •— t         ‰| �  |«       | j                  �It        t	        j
                  «       t        j                  «      r| j                  j                  |«       yyy)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_looprœ  r\   r�  rž  rŸ  rV  )r#   rk   r%   s     €r   r£  z*_UnixDefaultEventLoopPolicy.set_event_loopÃ  sR   ø€ ô 	‰Ñ˜tÔ$à�=‰=Ð$Ü”y×/Ñ/Ó1´9×3HÑ3HÔIØ�M‰M×%Ñ% dÕ+ð Jð %r   c                 óR   — | j                   €| j                  «        | j                   S )zzGet the watcher for child processes.

        If not yet set, a SafeChildWatcher object is automatically created.
        )rœ  r¡  r)   s    r   rl   z-_UnixDefaultEventLoopPolicy.get_child_watcherÑ  s$   € ð
 �=‰=Ð Ø×ÑÔ à�}‰}Ðr   c                 ó†   — |�t        |t        «      sJ ‚| j                  �| j                  j                  «        || _        y)z$Set the watcher for child processes.N)r\   r   rœ  r,   )r#   rz   s     r   Úset_child_watcherz-_UnixDefaultEventLoopPolicy.set_child_watcherÛ  s:   € ð ˆ¤*¨WÔ6JÔ"KÐKÐKà�=‰=Ð$Ø�M‰M×ÑÔ!àˆ�r   )rŸ   r    r¡   r¢   r   Ú_loop_factoryr!   r¡  r£  rl   r¦  r£   r¤   s   @r   rš  rš  ³  s%   ø„ ÙDØ*€MôòAô,òö r   rš  )1r¢   rH   r§   r=   r'   r¸   rD  r  r�  rê   Ú r   r   r   r   r   r	   r
   r   r   r   Úlogr   Ú__all__r	  ÚImportErrorr   ÚBaseSelectorEventLoopr   Úhasattrr©   r«   ÚReadTransportr`   Ú_FlowControlMixinÚWriteTransportrh   r5  r>  ÚBaseSubprocessTransportrn   r   ra  r   r   ÚBaseDefaultEventLoopPolicyrš  r   r   r   r   r   ú<module>r³     sa  ðÙ 8ã Û 	Û Û Û Û Û 
Û Û õ Ý Ý Ý Ý Ý Ý Ý Ý Ý !Ý ò€ð
 ‡<�<�7ÒÙ
ÐCÓ
DÐDò	ô
q˜_×BÑBô qñh ˆ2ˆ~Ôó#ó ò.ôl˜Z×5Ñ5ô lô^|˜j×:Ñ:Ø(×7Ñ7ô|ñ~ ˆ2Ð Ô!à×)Ñ)Ñãò@ôO˜×FÑFô O÷2C$ñ C$ôL3Ð+ô 3ôlK-Ð'ô K-ô\f1Ð'ô f1ôR0  &×"CÑ"Cô 0 ðd +Ð Ø4Ñ r   