ó
    •JÕiÞ§  ã                   óî  • / S Qr SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
Jr  SSK
JrJr  SSKJr  \R                   r SSKrSSKrSSKJrJrJrJr  S	rS
r\	R8                  " 5       rSrSrS/r \!" \S5      (       a  Sr\ S/-  r \R2                  S:X  a  Sr\ S/-  r \4S jr"S r#S r$S r%S r& " S S5      r'\(       a   " S S\'5      r( " S S\'5      r) " S S\*5      r+SDS jr,\R2                  S:w  a  SES jr-OSES jr- " S S \*5      r.S! r/\R2                  S:X  a   " S" S#\*5      r0S$ r1S%r2S&r3S'r4S(r5\6" 1 S)k5      r7\8" S* \7 5       5      r9S+r:S,r;\:\;4r<S- r=S. r>S/ r?SFS0\@4S1 jjrAS0\@4S2 jrB " S3 S4\*5      rCS5 rDS6 rE " S7 S8\+5      rFS9 rG\R2                  S:X  a!  S: rH\R’                  \R”                  1rKSGS; jrLO0SSKMrM\!" \MS<5      (       a  \MRœ                  rOO\MR                   rOSGS= jrL\R2                  S:X  a3  S> rQS? rR\R¦                  " \)\Q5        S@ rTSA rU\R¦                  " \(\T5        gSB rQSC rR\R¦                  " \)\Q5        g! \ a    \R2                  S:X  a  e Sr GNf = f)H)ÚClientÚListenerÚPipeÚwaité    Né   )Úutil)ÚAuthenticationErrorÚBufferTooShort)Ú	reduction)ÚWAIT_OBJECT_0ÚWAIT_ABANDONED_0ÚWAIT_TIMEOUTÚINFINITEÚwin32i    g      4@éd   ÚAF_INETÚAF_UNIXÚAF_PIPEc                 ó2   • [         R                  " 5       U -   $ ©N©ÚtimeÚ	monotonic)Útimeouts    Ú!Lib\multiprocessing\connection.pyÚ_init_timeoutr   =   s   € Ü�>Š>Ó˜gÑ%Ð%ó    c                 ó2   • [         R                  " 5       U :„  $ r   r   )Úts    r   Ú_check_timeoutr    @   s   € Ü�>Š>Ó˜aÑÐr   c                 ó"  • U S:X  a  gU S:X  a(  [         R                  " S[        R                  " 5       S9$ U S:X  aJ  S[        R
                  " 5       [        [        5      [        R                  " S5      R                  5       4-  $ [        S	5      e)
z7
Return an arbitrary free address for the given family
r   )Ú	localhostr   r   zsock-)ÚprefixÚdirr   z\\.\pipe\pyc-%d-%d-%sé   zunrecognized family)ÚtempfileÚmktempr   Úget_temp_dirÚosÚgetpidÚnextÚ_mmap_counterÚurandomÚhexÚ
ValueError©Úfamilys    r   Úarbitrary_addressr2   G   s|   € ð �ÓØØ	�9Ó	Ü�Š g´4×3DÒ3DÓ3FÑGÐGØ	�9Ó	Ø(Ü—’“œd¤=Ó1´2·:²:¸a³=×3DÑ3DÓ3FÐGñHð 	Iô Ð.Ó/Ð/r   c                 óÒ   • [         R                  S:w  a  U S:X  a  [        SU -  5      e[         R                  S:X  a+  U S:X  a$  [        [        U 5      (       d  [        SU -  5      eggg)z<
Checks if the family is valid for the current environment.
r   r   zFamily %s is not recognized.r   N)ÚsysÚplatformr/   ÚhasattrÚsocketr0   s    r   Ú_validate_familyr8   U   sf   € ô ‡|�|�wÓ 6¨YÓ#6ÜÐ7¸&Ñ@ÓAÐAä
‡|�|�wÓ 6¨YÓ#6ä”v˜v×&Ñ&ÜÐ;¸fÑDÓEÐEð 'ð $7Ðr   c                 óô   • [        U 5      [        :X  a  g[        U 5      [        L a  U R                  S5      (       a  g[        U 5      [        L d  [        R
                  " U 5      (       a  g[        SU -  5      e)zQ
Return the types of the address

This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
r   z\\r   r   zaddress type of %r unrecognized)ÚtypeÚtupleÚstrÚ
startswithr   Úis_abstract_socket_namespacer/   )Úaddresss    r   Úaddress_typer@   a   sb   € ô ˆGƒ}œÓØÜ	ˆg‹œ#Ò	 '×"4Ñ"4°V×"<Ñ"<ØÜ	ˆg‹œ#Ò	¤×!BÒ!BÀ7×!KÑ!KØäÐ:¸WÑDÓEÐEr   c                   ó¼   • \ rS rSrSrSS jrS rS rS rS r	S r
\S	 5       r\S
 5       r\S 5       rS rS rSS jrS rSS jrSS jrS rSS jrS rS rSrg)Ú_ConnectionBaseét   Nc                 óœ   • UR                  5       nUS:  a  [        S5      eU(       d  U(       d  [        S5      eXl        X l        X0l        g )Nr   zinvalid handlez6at least one of `readable` and `writable` must be True)Ú	__index__r/   Ú_handleÚ	_readableÚ	_writable)ÚselfÚhandleÚreadableÚwritables       r   Ú__init__Ú_ConnectionBase.__init__w   sI   € Ø×!Ñ!Ó#ˆØ�A‹:ÜÐ-Ó.Ð.Þ¦ÜØHóJð JàŒØ!ŒØ!�r   c                 ó@   • U R                   b  U R                  5         g g r   ©rF   Ú_close©rI   s    r   Ú__del__Ú_ConnectionBase.__del__„   s   € Ø�<‰<Ñ#Ø�K‰K�Mð $r   c                 ó4   • U R                   c  [        S5      eg )Núhandle is closed)rF   ÚOSErrorrR   s    r   Ú_check_closedÚ_ConnectionBase._check_closedˆ   s   € Ø�<‰<ÑÜÐ,Ó-Ð-ð  r   c                 ó<   • U R                   (       d  [        S5      eg )Nzconnection is write-only)rG   rW   rR   s    r   Ú_check_readableÚ_ConnectionBase._check_readableŒ   s   € Ø�~�~ÜÐ4Ó5Ð5ð r   c                 ó<   • U R                   (       d  [        S5      eg )Nzconnection is read-only)rH   rW   rR   s    r   Ú_check_writableÚ_ConnectionBase._check_writable�   s   € Ø�~�~ÜÐ3Ó4Ð4ð r   c                 ój   • U R                   (       a  SU l        OU R                  5         [        S5      e)NFzbad message length)rH   rG   ÚcloserW   rR   s    r   Ú_bad_message_lengthÚ#_ConnectionBase._bad_message_length”   s%   € Ø�>�>Ø"ˆD�Nà�J‰JŒLÜÐ*Ó+Ð+r   c                 ó   • U R                   SL $ )z True if the connection is closedN©rF   rR   s    r   ÚclosedÚ_ConnectionBase.closed›   s   € ð �|‰|˜tÐ#Ð#r   c                 ó   • U R                   $ )z"True if the connection is readable)rG   rR   s    r   rK   Ú_ConnectionBase.readable    ó   € ð �~‰~Ðr   c                 ó   • U R                   $ )z"True if the connection is writable)rH   rR   s    r   rL   Ú_ConnectionBase.writable¥   rj   r   c                 ó:   • U R                  5         U R                  $ )z+File descriptor or handle of the connection)rX   rF   rR   s    r   ÚfilenoÚ_ConnectionBase.filenoª   s   € à×ÑÔØ�|‰|Ðr   c                 óh   • U R                   b   U R                  5         SU l         gg! SU l         f = f)zClose the connectionNrP   rR   s    r   ra   Ú_ConnectionBase.close¯   s1   € à�<‰<Ñ#ð$Ø—‘”à#�•ð	 $øð  $�•ús   �( ¨	1c                 óx  • U R                  5         U R                  5         [        U5      nUR                  S:”  a  UR	                  S5      nUR
                  nUS:  a  [        S5      eXR:  a  [        S5      eUc  XR-
  nO$US:  a  [        S5      eX#-   U:”  a  [        S5      eU R                  XBX#-    5        g)	z,Send the bytes data from a bytes-like objectr   ÚBr   zoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rX   r^   Ú
memoryviewÚitemsizeÚcastÚnbytesr/   Ú_send_bytes)rI   ÚbufÚoffsetÚsizeÚmÚns         r   Ú
send_bytesÚ_ConnectionBase.send_bytes·   s²   € à×ÑÔØ×ÑÔÜ�s‹OˆØ�:‰:˜‹>Ø—‘�s“ˆAØ�H‰HˆØ�A‹:ÜÐ1Ó2Ð2Ø‹:ÜÐ5Ó6Ð6Ø‰<Ø‘:‰DØ�A‹XÜÐ/Ó0Ð0Ø‰]˜QÓÜÐ<Ó=Ð=Ø×Ñ˜ &¡-Ð0Õ1r   c                 óŒ   • U R                  5         U R                  5         U R                  [        R	                  U5      5        g)zSend a (picklable) objectN)rX   r^   rx   Ú_ForkingPicklerÚdumps©rI   Úobjs     r   ÚsendÚ_ConnectionBase.sendË   s3   € à×ÑÔØ×ÑÔØ×Ñœ×.Ñ.¨sÓ3Õ4r   c                 óÒ   • U R                  5         U R                  5         Ub  US:  a  [        S5      eU R                  U5      nUc  U R	                  5         UR                  5       $ )z'
Receive bytes data as a bytes object.
r   znegative maxlength)rX   r[   r/   Ú_recv_bytesrb   Úgetvalue)rI   Ú	maxlengthry   s      r   Ú
recv_bytesÚ_ConnectionBase.recv_bytesÑ   sa   € ð 	×ÑÔØ×ÑÔØÑ  Y°£]ÜÐ1Ó2Ð2Ø×Ñ˜yÓ)ˆØ‰;Ø×$Ñ$Ô&Ø�|‰|‹~Ðr   c                 óâ  • U R                  5         U R                  5         [        U5       nUR                  nU[	        U5      -  nUS:  a  [        S5      eX%:”  a  [        S5      eU R                  5       nUR                  5       nXRU-   :  a  [        UR                  5       5      eUR                  S5        UR                  X2U-  X'-   U-   5        UsSSS5        $ ! , (       d  f       g= f)zY
Receive bytes data into a writeable bytes-like object.
Return the number of bytes read.
r   znegative offsetzoffset too largeN)rX   r[   rt   ru   Úlenr/   rˆ   Útellr
   r‰   ÚseekÚreadinto)rI   ry   rz   r|   ru   ÚbytesizeÚresultr{   s           r   Úrecv_bytes_intoÚ_ConnectionBase.recv_bytes_intoÞ   sÐ   € ð
 	×ÑÔØ×ÑÔÜ˜Œ_ à—z‘zˆHØ¤# a£&Ñ(ˆHØ˜‹zÜ Ð!2Ó3Ð3ØÓ"Ü Ð!3Ó4Ð4Ø×%Ñ%Ó'ˆFØ—;‘;“=ˆDØ 4™-Ó'Ü$ V§_¡_Ó%6Ó7Ð7à�K‰K˜ŒNØ�O‰O˜A¨Ñ0Ø%™}°Ñ9ð;ô <à÷! �_�_ús   ¬B*C Ã 
C.c                 ó¨   • U R                  5         U R                  5         U R                  5       n[        R	                  UR                  5       5      $ )zReceive a (picklable) object)rX   r[   rˆ   r�   ÚloadsÚ	getbuffer)rI   ry   s     r   ÚrecvÚ_ConnectionBase.recv÷   s?   € à×ÑÔØ×ÑÔØ×ÑÓ ˆÜ×$Ñ$ S§]¡]£_Ó5Ð5r   c                 ód   • U R                  5         U R                  5         U R                  U5      $ )z/Whether there is any input available to be read)rX   r[   Ú_poll©rI   r   s     r   ÚpollÚ_ConnectionBase.pollþ   s)   € à×ÑÔØ×ÑÔØ�z‰z˜'Ó"Ð"r   c                 ó   • U $ r   © rR   s    r   Ú	__enter__Ú_ConnectionBase.__enter__  ó   € Øˆr   c                 ó$   • U R                  5         g r   ©ra   ©rI   Úexc_typeÚ	exc_valueÚexc_tbs       r   Ú__exit__Ú_ConnectionBase.__exit__  ó   € Ø�
‰
�r   )rF   rG   rH   )TT)r   Nr   )r   )g        )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rF   rM   rS   rX   r[   r^   rb   Úpropertyrf   rK   rL   rn   ra   r~   r…   r‹   r”   r™   rž   r¢   r«   Ú__static_attributes__r¡   r   r   rB   rB   t   s“   † Ø€Gô	"òò.ò6ò5ò,ð ñ$ó ð$ð ñó ðð ñó ðòò
$ô2ò(5ôôò26ô#òõr   rB   c                   ó\   • \ rS rSrSrSrSr\R                  4S jr	S r
SS jrS rS	 rS
rg)ÚPipeConnectioni  zŠ
Connection class based on a Windows named pipe.
Overlapped I/O is used, so the handles must have been created
with FILE_FLAG_OVERLAPPED.
FNc                 óf   • U R                   nUb  UR                  5         U" U R                  5        g r   )Ú_send_ovÚcancelrF   )rI   Ú_CloseHandleÚovs      r   rQ   ÚPipeConnection._close  s%   € Ø—‘ˆBØ‰~à—	‘	”Ù˜Ÿ™Õ&r   c                 ó@  • U R                   b  [        S5      e[        R                  " U R                  USS9u  p#X l          U[        R
                  :X  a3  [        R                  " UR                  /S[        5      nU[        :X  d   eS U l         UR                  S5      u  pSU[        R                  :X  a  [        [        R                  S5      eUS:X  d   eU[!        U5      :X  d   eg !   UR                  5         e = f! S U l         UR                  S5      u  pSf = f)Nz/concurrent send_bytes() calls are not supportedT©Ú
overlappedFrV   r   )r·   r/   Ú_winapiÚ	WriteFilerF   ÚERROR_IO_PENDINGÚWaitForMultipleObjectsÚeventr   r   r¸   ÚGetOverlappedResultÚERROR_OPERATION_ABORTEDrW   ÚerrnoÚEPIPErŽ   )rI   ry   rº   ÚerrÚwaitresÚnwrittens         r   rx   ÚPipeConnection._send_bytes  s  € Ø�}‰}Ñ(ä ð "5ó 6ð 6ä×'Ò'¨¯©°cÀdÑK‰GˆBØŒMð
=Øœ'×2Ñ2Ó2Ü%×<Ò<ØŸ™˜
 E¬8ó5�Gà"¤mÓ3Ð3Ð3ð
 !%�”Ø "× 6Ñ 6°tÓ <‘�Ø”g×5Ñ5Ó5ô œeŸk™kÐ+=Ó>Ð>Ø˜!“8ˆO�8Øœs 3›xÓ'Ð'Ñ'øðØ—	‘	”Øûà $�”Ø "× 6Ñ 6°tÓ <‘�˜#ús   ÁAC+ Ã+C>Ã>D ÄDc                 óð  • U R                   (       a  SU l         [        R                  " 5       $ Uc  SO[        US5      n [        R
                  " U R                  USS9u  p4 U[        R                  :X  a3  [        R                  " UR                  /S[        5      nU[        :X  d   eUR                  S5      u  pdUS:X  a6  [        R                  " 5       nUR                  UR                  5       5        U$ U[        R                   :X  a  U R#                  X15      $  [-        S5      e!   UR                  5         e = f! UR                  S5      u  pdUS:X  a:  [        R                  " 5       nUR                  UR                  5       5        Us  s $ U[        R                   :X  a  U R#                  X15      s  s $ f = f! [$         a*  nUR&                  [        R(                  :X  a  [*        ee S nAff = f)NFé€   Tr½   r   z.shouldn't get here; expected KeyboardInterrupt)Ú_got_empty_messageÚioÚBytesIOÚminr¿   ÚReadFilerF   rÁ   rÂ   rÃ   r   r   r¸   rÄ   Úwriter˜   ÚERROR_MORE_DATAÚ_get_more_datarW   ÚwinerrorÚERROR_BROKEN_PIPEÚEOFErrorÚRuntimeError)	rI   ÚmaxsizeÚbsizerº   rÈ   rÉ   ÚnreadÚfÚes	            r   rˆ   ÚPipeConnection._recv_bytes7  sž  € Ø×&×&Ø*/�Ô'Ü—z’z“|Ð#à&™™´C¸ÀÓ4E�ðÜ%×.Ò.¨t¯|©|¸UØ;?ñA‘G�BðDØ¤'×":Ñ":Ó:Ü&-×&DÒ&DØ!#§¡ 
¨E´8ó'=˜Gà#*¬mÓ#;Ð;Ð#;ð
 &(×%;Ñ%;¸DÓ%A™
˜Ø !›8Ü "§
¢
£˜AØŸG™G B§L¡L£NÔ3Ø#$˜HØ ¤G×$;Ñ$;Ó;Ø#'×#6Ñ#6°rÓ#CÐCð <ô ÐOÓPÐPøð!ØŸ	™	œØûà%'×%;Ñ%;¸DÓ%A™
˜Ø !›8Ü "§
¢
£˜AØŸG™G B§L¡L£NÔ3Ø#$œHØ ¤G×$;Ñ$;Ó;Ø#'×#6Ñ#6°rÓ#CÔCð <ûäó Ø—z‘z¤W×%>Ñ%>Ó>Ü&˜àûð	ús]   Á "G Á#AD* Â*AG Ã9$G Ä*D=Ä=E  Å AF>ÆG Æ'F>Æ;G Æ=F>Æ>G Ç
G5Ç%G0Ç0G5c                 ó    • U R                   (       d'  [        R                  " U R                  5      S   S:w  a  g[	        [        U /U5      5      $ )Nr   T)rÎ   r¿   ÚPeekNamedPiperF   Úboolr   r�   s     r   rœ   ÚPipeConnection._pollW  s>   € Ø×'×'Ü×-Ò-¨d¯l©lÓ;¸AÑ>À!ÓCØÜœ˜d˜V WÓ-Ó.Ð.r   c                 óØ  • UR                  5       n[        R                  " 5       nUR                  U5        [        R
                  " U R                  5      S   nUS:”  d   eUb"  [        U5      U-   U:”  a  U R                  5         [        R                  " U R                  USS9u  pUR                  S5      u  pvUS:X  d   eXu:X  d   eUR                  UR                  5       5        U$ )Nr   r   Tr½   )r˜   rÏ   rÐ   rÓ   r¿   rá   rF   rŽ   rb   rÒ   rÄ   )rI   rº   rÚ   ry   rÝ   ÚleftrÈ   Úrbytess           r   rÕ   ÚPipeConnection._get_more_data]  sÀ   € Ø—,‘,“.ˆCÜ—
’
“ˆAØ�G‰G�CŒLÜ×(Ò(¨¯©Ó6°qÑ9ˆDØ˜!“8ˆO�8ØÑ"¤s¨3£x°$¡¸Ó'@Ø×(Ñ(Ô*Ü×&Ò& t§|¡|°TÀdÑK‰GˆBØ×0Ñ0°Ó6‰KˆFØ˜!“8ˆO�8Ø“>Ð!�>Ø�G‰G�B—L‘L“NÔ#ØˆHr   )rÎ   r·   r   )r®   r¯   r°   r±   Ú__doc__rÎ   r·   r¿   ÚCloseHandlerQ   rx   rˆ   rœ   rÕ   r³   r¡   r   r   rµ   rµ     s8   † ñ	ð
 #ÐØˆà&-×&9Ñ&9ô 	'ò	(ô4	Qò@	/õ	r   rµ   c                   óö   • \ rS rSrSr\(       a)  \R                  4S jr\R                  r
\R                  rO(\R                  4S jr\R                  r
\R                   r\
4S jr\4S jrS rSS	 jrS
 rSrg)Ú
Connectionim  zc
Connection class based on an arbitrary file descriptor (Unix only), or
a socket handle (Windows).
c                 ó(   • U" U R                   5        g r   re   ©rI   rQ   s     r   rQ   ÚConnection._closet  ó   € Ù�4—<‘<Õ r   c                 ó(   • U" U R                   5        g r   re   rí   s     r   rQ   rî   y  rï   r   c                 ób   • [        U5      n U" U R                  U5      nX4-  nUS:X  a  g XS  nM$  ©Nr   )rŽ   rF   )rI   ry   rÓ   Ú	remainingr}   s        r   Ú_sendÚConnection._send~  s=   € Ü˜“Hˆ	ØÙ�d—l‘l CÓ(ˆAØ‰NˆIØ˜A‹~ØØ�b�'ˆCñ r   c                 óð   • [         R                  " 5       nU R                  nUnUS:”  aL  U" XE5      n[        U5      nUS:X  a  XQ:X  a  [        e[        S5      eUR                  U5        XW-  nUS:”  a  ML  U$ )Nr   zgot end of file during message)rÏ   rÐ   rF   rŽ   rØ   rW   rÓ   )rI   r{   Úreadry   rJ   ró   Úchunkr}   s           r   Ú_recvÚConnection._recv‡  sv   € Ü�jŠj‹lˆØ—‘ˆØˆ	Ø˜!‹mÙ˜Ó+ˆEÜ�E“
ˆAØ�A‹vØÓ$Ü"�Nä!Ð"BÓCÐCØ�I‰I�eÔØ‰NˆIð ˜!�mð ˆ
r   c                 ó�  • [        U5      nUS:”  ab  [        R                  " SS5      n[        R                  " SU5      nU R                  U5        U R                  U5        U R                  U5        g [        R                  " SU5      nUS:”  a#  U R                  U5        U R                  U5        g U R                  XA-   5        g )Niÿÿÿú!iéÿÿÿÿú!Qi @  )rŽ   ÚstructÚpackrô   )rI   ry   r}   Ú
pre_headerÚheaders        r   rx   ÚConnection._send_bytes—  s—   € Ü�‹HˆØˆz‹>ÜŸš T¨2Ó.ˆJÜ—[’[  qÓ)ˆFØ�J‰J�zÔ"Ø�J‰J�vÔØ�J‰J�s�Oô —[’[  qÓ)ˆFØ�5‹yð —
‘
˜6Ô"Ø—
‘
˜3•ð —
‘
˜6™<Õ(r   Nc                 ó"  • U R                  S5      n[        R                  " SUR                  5       5      u  nUS:X  a8  U R                  S5      n[        R                  " SUR                  5       5      u  nUb  X1:”  a  g U R                  U5      $ )Né   rü   rý   r%   rþ   )rù   rÿ   Úunpackr‰   )rI   rÚ   ry   r{   s       r   rˆ   ÚConnection._recv_bytes®  so   € Ø�j‰j˜‹mˆÜ—’˜d C§L¡L£NÓ3‰ˆØ�2‹:Ø—*‘*˜Q“-ˆCÜ—M’M $¨¯©«Ó7‰EˆDØÑ 4£>ØØ�z‰z˜$ÓÐr   c                 ó2   • [        U /U5      n[        U5      $ r   )r   râ   )rI   r   Úrs      r   rœ   ÚConnection._poll¸  s   € Ü�$�˜Ó!ˆÜ�A‹wˆr   r¡   r   )r®   r¯   r°   r±   rè   r¿   Ú_multiprocessingÚclosesocketrQ   r…   Ú_writer™   Ú_readr)   ra   rÓ   r÷   rô   rù   rx   rˆ   rœ   r³   r¡   r   r   rë   rë   m  so   † ñö
 Ø 0× <Ñ <ô 	!à!×&Ñ&ˆØ ×%Ñ%‰à "§¡ô 	!à—‘ˆØ—‘ˆà%ô ð  %ô ò )ô. õr   rë   c                   óZ   • \ rS rSrSrSS jrS rS r\S 5       r	\S 5       r
S	 rS
 rSrg)r   iÁ  z…
Returns a listener object.

This is a wrapper for a bound socket which is 'listening' for
connections, or for a Windows named pipe.
Nc                 ó\  • U=(       d!    U=(       a    [        U5      =(       d    [        n[        U5        Ub   [        U[        5      (       d  [        S5      eUS:X  aQ  U(       a  [        X5      U l        O^[        R                  " 5        H  n[        U5      n [        X5      U l          O(   O%U=(       d    [        U5      n[#        XU5      U l        X@l        g ! [         aE  nU[        :¼  a  e UR                  [        R                  [        R                   4;  a  e  S nAMš  S nAff = f)Núauthkey should be a byte stringr   )r@   Údefault_familyr8   Ú
isinstanceÚbytesÚ	TypeErrorÚPipeListenerÚ	_listenerÚ	itertoolsÚcountr2   rW   Ú_MAX_PIPE_ATTEMPTSrÖ   r¿   ÚERROR_PIPE_BUSYÚERROR_ACCESS_DENIEDÚSocketListenerÚ_authkey)rI   r?   r1   ÚbacklogÚauthkeyÚattemptsrÞ   s          r   rM   ÚListener.__init__È  sÿ   € Ø÷ #˜G×=¬°WÓ(=÷ #Ü"ð 	ä˜Ô ØÑ¤z°'¼5×'AÑ'AÜÐ=Ó>Ð>à�YÓÞÜ!-¨gÓ!?�•ä )§¢Ö 1�HÜ/°Ó7�Gð"Ü)5°gÓ)G˜œÙò	 !2ð ×:Ô!2°6Ó!:ˆGÜ+¨G¸WÓEˆDŒNà�øô #ó "Ø#Ô'9Ó9Ø!ØŸ:™:¬g×.EÑ.EÜ.5×.IÑ.Ið.Kó Kà!õKûð"ús   ÂCÃ
D+Ã&:D&Ä&D+c                 óØ   • U R                   c  [        S5      eU R                   R                  5       nU R                  b*  [	        XR                  5        [        XR                  5        U$ )zb
Accept a connection on the bound socket or named pipe of `self`.

Returns a `Connection` object.
zlistener is closed)r  rW   Úacceptr  Údeliver_challengeÚanswer_challenge)rI   Úcs     r   r$  ÚListener.acceptä  sS   € ð �>‰>Ñ!ÜÐ.Ó/Ð/à�N‰N×!Ñ!Ó#ˆØ�=‰=Ñ$Ü˜a§¡Ô/Ü˜Q§¡Ô.Øˆr   c                 óR   • U R                   nUb  SU l         UR                  5         gg)z1
Close the bound socket or named pipe of `self`.
N)r  ra   )rI   Úlisteners     r   ra   ÚListener.closeó  s)   € ð —>‘>ˆØÑØ!ˆDŒNØ�N‰NÕð  r   c                 ó.   • U R                   R                  $ r   )r  Ú_addressrR   s    r   r?   ÚListener.addressü  s   € à�~‰~×&Ñ&Ð&r   c                 ó.   • U R                   R                  $ r   )r  Ú_last_acceptedrR   s    r   Úlast_acceptedÚListener.last_accepted   s   € à�~‰~×,Ñ,Ð,r   c                 ó   • U $ r   r¡   rR   s    r   r¢   ÚListener.__enter__  r¤   r   c                 ó$   • U R                  5         g r   r¦   r§   s       r   r«   ÚListener.__exit__  r­   r   )r  r  )NNr   N)r®   r¯   r°   r±   rè   rM   r$  ra   r²   r?   r1  r¢   r«   r³   r¡   r   r   r   r   Á  sH   † ñô ò8òð ñ'ó ð'ð ñ-ó ð-òõr   r   c                 óö   • U=(       d    [        U 5      n[        U5        US:X  a  [        U 5      nO[        U 5      nUb   [	        U[
        5      (       d  [        S5      eUb  [        X25        [        X25        U$ )z5
Returns a connection to the address of a `Listener`
r   r  )	r@   r8   Ú
PipeClientÚSocketClientr  r  r  r&  r%  )r?   r1   r   r'  s       r   r   r     sp   € ð ×,”| GÓ,€FÜ�VÔØ�ÓÜ�wÓ‰ä˜Ó!ˆàÑ¤:¨g´u×#=Ñ#=ÜÐ9Ó:Ð:àÑÜ˜Ô$Ü˜!Ô%à€Hr   c                 óH  • U (       an  [         R                  " 5       u  pUR                  S5        UR                  S5        [        UR	                  5       5      n[        UR	                  5       5      nX44$ [
        R                  " 5       u  pV[        USS9n[        USS9nX44$ )ú<
Returns pair of connection objects at either end of a pipe
TF©rL   ©rK   )r7   Ú
socketpairÚsetblockingrë   Údetachr)   Úpipe)ÚduplexÚs1Ús2Úc1Úc2Úfd1Úfd2s          r   r   r   "  s†   € ö Ü×&Ò&Ó(‰FˆBØ�N‰N˜4Ô Ø�N‰N˜4Ô Ü˜BŸI™I›KÓ(ˆBÜ˜BŸI™I›KÓ(ˆBð ˆvˆô	 —w’w“y‰HˆCÜ˜C¨%Ñ0ˆBÜ˜C¨%Ñ0ˆBàˆvˆr   c                 ó`  • U (       a=  [         R                  n[         R                  [         R                  -  n[        [        pCO'[         R
                  n[         R                  nS[        pC[        R                  " 5        H˜  n[        S5      n [         R                  " Xa[         R                  -  [         R                  -  [         R                  [         R                  -  [         R                  -  SX4[         R                  [         R                   5      n  O   [         R,                  " WUS[         R                   [         R.                  [         R                  [         R                   5      n	[         R0                  " U	[         R                  SS5        [         R2                  " WSS9n
U
R5                  S5      u  p¼US:X  d   e[7        XpS9n[7        X�S9nXÞ4$ ! ["         aF  nU[$        :¼  a  e UR&                  [         R(                  [         R*                  4;  a  e  SnAGM§  SnAff = f)	r;  r   r   r   NTr½   r<  r=  )r¿   ÚPIPE_ACCESS_DUPLEXÚGENERIC_READÚGENERIC_WRITEÚBUFSIZEÚPIPE_ACCESS_INBOUNDr  r  r2   ÚCreateNamedPipeÚFILE_FLAG_OVERLAPPEDÚFILE_FLAG_FIRST_PIPE_INSTANCEÚPIPE_TYPE_MESSAGEÚPIPE_READMODE_MESSAGEÚ	PIPE_WAITÚNMPWAIT_WAIT_FOREVERÚNULLrW   r  rÖ   r  r  Ú
CreateFileÚOPEN_EXISTINGÚSetNamedPipeHandleStateÚConnectNamedPiperÄ   rµ   )rB  ÚopenmodeÚaccessÚobsizeÚibsizer!  r?   Úh1rÞ   Úh2r¾   Ú_rÈ   rE  rF  s                  r   r   r   5  s¿  € ö Ü×1Ñ1ˆHÜ×)Ñ)¬G×,AÑ,AÑAˆFÜ$¤g‘Fä×2Ñ2ˆHÜ×*Ñ*ˆFØ¤�Fä!ŸšÖ)ˆHÜ'¨	Ó2ˆGðÜ×,Ò,Ø¬×(DÑ(DÑDÜ×9Ñ9ñ:ä×-Ñ-´×0MÑ0MÑMÜ×%Ñ%ñ&à�v¤w×'CÑ'Cä—L‘Ló�ñ ñ *ô& ×ÒØ�V˜Q¤§¡¬g×.CÑ.CÜ×(Ñ(¬'¯,©,óˆô 	×'Ò'Ø”×-Ñ-¨t°Tô	ô ×-Ò-¨b¸TÑBˆ
Ø×/Ñ/°Ó5‰ˆØ�a‹xˆˆxä˜BÑ0ˆÜ˜BÑ0ˆàˆvˆøô+ ó ØÔ1Ó1ØØ—:‘:¤g×&=Ñ&=Ü&-×&AÑ&Að&Có CàöCûðús   ÂB	GÇ
H-Ç':H(È(H-c                   ó.   • \ rS rSrSrSS jrS rS rSrg)	r  ij  zG
Representation of a socket which is bound to an address and listening
c                 óæ  • [         R                   " [        [         U5      5      U l         [        R                  S:X  a9  U R                  R                  [         R                  [         R                  S5        U R                  R                  S5        U R                  R                  U5        U R                  R                  U5        U R                  R                  5       U l        X l        S U l        US:X  aG  ["        R$                  " U5      (       d,  ["        R&                  " U [        R(                  U4SS9U l        g S U l        g ! [         a    U R                  R                  5         e f = f)NÚposixr   Tr   r   ©ÚargsÚexitpriority)r7   ÚgetattrÚ_socketr)   ÚnameÚ
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRr?  ÚbindÚlistenÚgetsocknamer-  rW   ra   Ú_familyr0  r   r>   ÚFinalizeÚunlinkÚ_unlink)rI   r?   r1   r  s       r   rM   ÚSocketListener.__init__n  s  € Ü—}’}¤W¬V°VÓ%<Ó=ˆŒð	ä�w‰w˜'Ó!Ø—‘×'Ñ'¬×(9Ñ(9Ü(.×(;Ñ(;¸Qô@à�L‰L×$Ñ$ TÔ*Ø�L‰L×Ñ˜gÔ&Ø�L‰L×Ñ Ô(Ø ŸL™L×4Ñ4Ó6ˆDŒMð ŒØ"ˆÔà�YÓ¤t×'HÒ'HÈ×'QÑ'QäŸ=š=Ø”b—i‘i w j¸qñˆD�Lð  ˆD�Løô ó 	Ø�L‰L×ÑÔ Øð	ús   «B=E
 Å
&E0c                 ó˜   • U R                   R                  5       u  ol        UR                  S5        [	        UR                  5       5      $ )NT)ri  r$  r0  r?  rë   r@  ©rI   Úss     r   r$  ÚSocketListener.accept‡  s7   € Ø!%§¡×!4Ñ!4Ó!6ÑˆÔØ	�‰�dÔÜ˜!Ÿ(™(›*Ó%Ð%r   c                 ó¼   •  U R                   R                  5         U R                  nUb  S U l        U" 5         g g ! U R                  nUb  S U l        U" 5         f f = fr   )ri  ra   rt  )rI   rs  s     r   ra   ÚSocketListener.closeŒ  s[   € ð	Ø�L‰L×ÑÔ à—\‘\ˆFØÑ!Ø#�”Ù•ð "øð —\‘\ˆFØÑ!Ø#�”Ù•ð "ús	   ‚; » A)r-  rq  r0  ri  rt  N)r   )	r®   r¯   r°   r±   rè   rM   r$  ra   r³   r¡   r   r   r  r  j  s   † ñô ò2&õ
r   r  c                 ó  • [        U 5      n[        R                  " [        [        U5      5       nUR                  S5        UR	                  U 5        [        UR                  5       5      sSSS5        $ ! , (       d  f       g= f)zG
Return a connection object connected to the socket given by `address`
TN)r@   r7   rh  r?  Úconnectrë   r@  )r?   r1   rx  s      r   r9  r9  –  sU   € ô ˜'Ó"€FÜ	�Šœ¤¨Ó/Ô	1°QØ	�‰�dÔØ	�	‰	�'ÔÜ˜!Ÿ(™(›*Ó%÷ 
2×	1×	1ús   °;A5Á5
Bc                   óB   • \ rS rSrSrS	S jrS
S jrS r\S 5       r	Sr
g)r  i¦  z 
Representation of a named pipe
Nc                 ó
  • Xl         U R                  SS9/U l        S U l        [        R
                  " SU R                   5        [        R                  " U [        R                  U R                  U R                   4SS9U l	        g )NT)Úfirstz listener created with address=%rr   re  )
r-  Ú_new_handleÚ_handle_queuer0  r   Ú	sub_debugrr  r  Ú_finalize_pipe_listenerra   )rI   r?   r  s      r   rM   ÚPipeListener.__init__ª  sj   € Ø#ŒMØ"&×"2Ñ"2¸Ð"2Ð">Ð!?ˆDÔà"&ˆDÔÜ�NŠNÐ=¸t¿}¹}ÔMÜŸšØ”l×:Ñ:Ø×(Ñ(¨$¯-©-Ð8ÀqñˆD�Jr   c           
      óŠ  • [         R                  [         R                  -  nU(       a  U[         R                  -  n[         R                  " U R
                  U[         R                  [         R                  -  [         R                  -  [         R                  [        [        [         R                  [         R                  5      $ r   )r¿   rJ  rP  rQ  rO  r-  rR  rS  rT  ÚPIPE_UNLIMITED_INSTANCESrM  rU  rV  )rI   r€  Úflagss      r   r�  ÚPipeListener._new_handleµ  s…   € Ü×.Ñ.´×1MÑ1MÑMˆEÞØœ×>Ñ>Ñ>�Ü×*Ò*Ø—‘˜uÜ×)Ñ)¬G×,IÑ,IÑIÜ×!Ñ!ñ"ä×0Ñ0´'¼7Ü×,Ñ,¬g¯l©lóð r   c                 óZ  • U R                   R                  U R                  5       5        U R                   R                  S5      n [        R
                  " USS9n [        R                  " UR                  /S[        5      n UR                  S5      u  pEUS:X  d   e [        U5      $ !   UR                  5         [        R                  " U5        e = f! UR                  S5      u  pEUS:X  d   ef = f! [         a)  nUR                  [        R                  :w  a  e  S nAN…S nAff = f)Nr   Tr½   F)r‚  Úappendr�  Úpopr¿   rZ  rÂ   rÃ   r   r¸   ré   rÄ   rW   rÖ   ÚERROR_NO_DATArµ   )rI   rJ   rº   Úresra  rÈ   rÞ   s          r   r$  ÚPipeListener.acceptÁ  s  € Ø×Ñ×%Ñ% d×&6Ñ&6Ó&8Ô9Ø×'Ñ'×+Ñ+¨AÓ.ˆFð$Ü×-Ò-¨fÀÑF�ð	$Ü!×8Ò8ØŸ™˜
 E¬8ó5‘Cð  ×3Ñ3°DÓ9‘F�AØ !›8�O™8Ü! &Ó)Ð)øðØ—I‘I”KÜ×'Ò'¨Ô/Øûà×3Ñ3°DÓ9‘F�AØ !›8�O™8ûô ó Ø—:‘:¤×!6Ñ!6Ó6Øô 7ûðús0   ÁC7 Á'B+ Â+)CÃC ÃC4Ã7
D*ÄD%Ä%D*c                 óp   • [         R                  " SU5        U  H  n[        R                  " U5        M     g )Nz closing listener with address=%r)r   rƒ  r¿   ré   )Úqueuer?   rJ   s      r   r„  Ú$PipeListener._finalize_pipe_listenerØ  s)   € ä�NŠNÐ=¸wÔGÛ�Ü×#Ò# FÖ+ò  r   )r-  r‚  r0  ra   r   )F)r®   r¯   r°   r±   rè   rM   r�  r$  Ústaticmethodr„  r³   r¡   r   r   r  r  ¦  s*   † ñ	ô		ô
	ò	*ð. 
ñ	,ó 
ó	,r   r  c           	      óF  • [        5       n  [        R                  " U S5        [        R                  " U [        R                  [        R
                  -  S[        R                  [        R                  [        R                  [        R                  5      n [        R                  " U[        R                  SS5        [!        U5      $ ! [         aI  nUR                  [        R                  [        R                  4;  d  [        U5      (       a  e  SnAOSnAff = fGM  )zE
Return a connection object connected to the pipe given by `address`
éè  r   N)r   r¿   ÚWaitNamedPiperW  rK  rL  rV  rX  rP  rW   rÖ   ÚERROR_SEM_TIMEOUTr  r    rY  rS  rµ   )r?   r   ÚhrÞ   s       r   r8  r8  Þ  sé   € ô ‹OˆØðÜ×%Ò% g¨tÔ4Ü×&Ò&ØœW×1Ñ1´G×4IÑ4IÑIØ”w—|‘|¤W×%:Ñ%:Ü×0Ñ0´'·,±,ó�ð ô 	×'Ò'ØŒw×,Ñ,¨d°Dô	ô ˜aÓ Ð øô ó Ø—:‘:¤g×&?Ñ&?Ü&-×&=Ñ&=ð&?ó ?ÜBPÐQR×BSÑBSØô CTûðúò s   �B
C
 Ã

DÃ?DÄDé(   s   #CHALLENGE#s	   #WELCOME#s	   #FAILURE#>   ó   md5ó   sha256ó   sha384ó   sha3_256ó   sha3_384c              #   ó8   #   • U  H  n[        U5      v •  M     g 7fr   )rŽ   )Ú.0ra  s     r   Ú	<genexpr>r¡  \  s   é € Ð7Ò&6 ”c˜!—f�fÒ&6ùs   ‚é   é   c                 ó  • [        U 5      [        ;   a  SU 4$ U R                  S5      (       aI  U R                  SS[        S-   5      =nS:”  a)  U SU nU[
        ;   a  XS-   S nUR                  S5      U4$ [        S	U < 35      e)
zóReturns a digest name and the payload for a response hash.

If a legacy protocol is detected based on the message length
or contents the digest name returned will be empty to indicate
legacy mode where MD5 and no digest prefix should be sent.
Ú ó   {ó   }r   é   r   NÚasciizRunsupported message length, missing digest prefix, or unsupported digest: message=)rŽ   Ú_LEGACY_LENGTHSr=   ÚfindÚ_MAX_DIGEST_LENÚ_ALLOWED_DIGESTSÚdecoder	   )ÚmessageÚcurlyÚdigestÚpayloads       r   Ú_get_digest_name_and_payloadr³  g  sŸ   € ô ˆ7ƒ|”Ó&ð
 �7ˆ{ÐØ×Ñ˜4× Ñ Ø—,‘,˜t Q¬¸Ñ(9Ó:Ð	:ˆ¸aÓ?Ø˜˜5Ð!ˆØÔ%Ó%Ø A™g˜hÐ'ˆGØ—=‘= Ó)¨7Ð2Ð2Ü
ð/Ø&-¡Zð1ó2ð 2r   c                 ó  • SSK n[        U5      S   nU(       d!   UR                  XS5      R                  5       $ UR                  XU5      R                  5       nSUR                  S5      U4-  $ ! [         a    Sn NDf = f)ao  Create a MAC based on authkey and message

The MAC algorithm defaults to HMAC-MD5, unless MD5 is not available or
the message has a '{digest_name}' prefix. For legacy HMAC-MD5, the response
is the raw MAC, otherwise the response is prefixed with '{digest_name}',
e.g. b'{sha256}abcdefg...'

Note: The MAC protects the entire message including the digest_name prefix.
r   NÚmd5Úsha256ó   {%s}%sr©  )Úhmacr³  Únewr±  r/   Úencode)r   r¯  r¸  Údigest_nameÚresponses        r   Ú_create_responser½  �  s†   € ó Ü.¨wÓ7¸Ñ:€Kæð	#Ø—8‘8˜G¨eÓ4×;Ñ;Ó=Ð=ð �x‰x˜¨+Ó6×=Ñ=Ó?€HØ˜×*Ñ*¨7Ó3°XÐ>Ñ>Ð>øô ó 	#ð #ŠKð		#ús   ›A1 Á1B Á?B c           
      óz  • SSK n[        U5      u  pEU=(       d    Sn UR                  XU5      R                  5       n[        U5      [        U5      :w  a'  [        SU< S[        U5       S[        U5       35      eUR                  Xe5      (       d  [        S	5      eg! [         a    [        SU< S35      ef = f)
aH  Verify MAC challenge

If our message did not include a digest_name prefix, the client is allowed
to select a stronger digest_name from _ALLOWED_DIGESTS.

In case our message is prefixed, a client cannot downgrade to a weaker
algorithm, because the MAC is calculated over the entire message
including the '{digest_name}' prefix.
r   Nrµ  zresponse_digest=z unsupportedz	expected z of length z got zdigest received was wrong)r¸  r³  r¹  r±  r/   r	   rŽ   Úcompare_digest)r   r¯  r¼  r¸  Úresponse_digestÚresponse_macÚexpecteds          r   Ú_verify_challengerÃ  �  sÒ   € ó Ü$@ÀÓ$JÑ!€OØ%×.¨€OðEØ—8‘8˜G¨oÓ>×EÑEÓGˆô ˆ8ƒ}œ˜LÓ)Ó)Ü!Ø˜OÑ.¨k¼#¸h»-¸ð IÜ˜<Ó(Ð)ð+ó,ð 	,ð ×Ñ˜x×6Ñ6Ü!Ð"=Ó>Ð>ð 7øô ó EÜ!Ð%5 _Ñ$6°lÐ"CÓDÐDðEús   ž B ÂB:r   c                 óÜ  • [        U[        5      (       d#  [        SR                  [	        U5      5      5      e[
        [        :”  d   S5       e[        R                  " [
        5      nSUR                  S5      U4-  nU R                  [        U-   5        U R                  S5      n [        XU5        U R                  [        5        g ! [         a    U R                  [         5        e f = f)Nú Authkey must be bytes, not {0!s}zprotocol constraintr·  r©  é   )r  r  r/   Úformatr:   ÚMESSAGE_LENGTHÚ_MD5ONLY_MESSAGE_LENGTHr)   r-   rº  r~   Ú
_CHALLENGEr‹   rÃ  Ú_WELCOMEr	   Ú_FAILURE)Ú
connectionr   r»  r¯  r¼  s        r   r%  r%  ¶  sÓ   € Ü�gœu×%Ñ%ÜØ.×5Ñ5´d¸7³mÓDóFð 	FäÔ3Ó3ÐJÐ5JÓJÐ3Ü�jŠjœÓ(€GØ˜;×-Ñ-¨gÓ6¸Ð@Ñ@€Gð ×Ñœ* wÑ.Ô/Ø×$Ñ$ SÓ)€Hð(Ü˜'¨HÔ5ð
 	×ÑœhÕ'øô	 ó Ø×ÑœhÔ'Øðús   Â(C
 Ã
!C+c                 óæ  • [        U[        5      (       d#  [        SR                  [	        U5      5      5      eU R                  S5      nUR                  [        5      (       d  [        SU< 35      eU[        [        5      S  n[        U5      [        :  a  [        S[        U5       S35      e[        X5      nU R                  U5        U R                  S5      nU[        :w  a  [        S5      eg )NrÅ  rÆ  z,Protocol error, expected challenge: message=zchallenge too short: z byteszdigest sent was rejected)r  r  r/   rÇ  r:   r‹   r=   rÊ  r	   rŽ   rÉ  r½  r~   rË  )rÍ  r   r¯  r±  r¼  s        r   r&  r&  Ë  sâ   € Ü�gœu×%Ñ%ÜØ.×5Ñ5´d¸7³mÓDóFð 	Fà×#Ñ# CÓ(€GØ×Ñœj×)Ñ)Ü!Ø?°w±jÐAóCð 	Cà”cœ*“oÐ&Ð'€GÜ
ˆ7ƒ|Ô-Ó-Ü!Ð$9¼#¸g»,¸ÀvÐ"NÓOÐOÜ˜gÓ/€FØ×Ñ˜&Ô!Ø×$Ñ$ SÓ)€HØ”8ÓÜ!Ð"<Ó=Ð=ð r   c                   ó&   • \ rS rSrS rS rS rSrg)ÚConnectionWrapperià  c                 óh   • Xl         X l        X0l        S H  n[        X5      n[	        XU5        M     g )N)rn   ra   rž   r‹   r~   )Ú_connÚ_dumpsÚ_loadsrh  Úsetattr)rI   Úconnr‚   r—   Úattrr„   s         r   rM   ÚConnectionWrapper.__init__á  s0   € ØŒ
ØŒØŒÛKˆDÜ˜$Ó%ˆCÜ�D Ö$ò Lr   c                 ó\   • U R                  U5      nU R                  R                  U5        g r   )rÓ  rÒ  r~   )rI   r„   rx  s      r   r…   ÚConnectionWrapper.sendè  s"   € Ø�K‰K˜ÓˆØ�
‰
×Ñ˜aÕ r   c                 óX   • U R                   R                  5       nU R                  U5      $ r   )rÒ  r‹   rÔ  rw  s     r   r™   ÚConnectionWrapper.recvë  s"   € Ø�J‰J×!Ñ!Ó#ˆØ�{‰{˜1‹~Ðr   )rÒ  rÓ  rÔ  N)r®   r¯   r°   r±   rM   r…   r™   r³   r¡   r   r   rÐ  rÐ  à  s   † ò%ò!õr   rÐ  c                 óT   • [         R                  U 4S S S S5      R                  S5      $ )Nr   úutf-8)Ú	xmlrpclibr‚   rº  )r„   s    r   Ú
_xml_dumpsrà  ï  s&   € Ü�?‰?˜C˜6 4¨¨t°QÓ7×>Ñ>¸wÓGÐGr   c                 óV   • [         R                  U R                  S5      5      u  u  pU$ )NrÞ  )rß  r—   r®  )rx  r„   Úmethods      r   Ú
_xml_loadsrã  ò  s"   € Ü—_‘_ Q§X¡X¨gÓ%6Ó7�N�F€SØ€Jr   c                   ó   • \ rS rSrS rSrg)ÚXmlListeneriö  c                 ób   • SS K Jq  [        R	                  U 5      n[        U[        [        5      $ rò   )Úxmlrpc.clientÚclientrß  r   r$  rÐ  rà  rã  rƒ   s     r   r$  ÚXmlListener.accept÷  s"   € å)Ü�o‰o˜dÓ#ˆÜ  ¤j´*Ó=Ð=r   r¡   N)r®   r¯   r°   r±   r$  r³   r¡   r   r   rå  rå  ö  s   † õ>r   rå  c                  óJ   • SS K Jq  [        [	        U 0 UD6[
        [        5      $ rò   )rç  rè  rß  rÐ  r   rà  rã  )rf  Úkwdss     r   Ú	XmlClientrì  ý  s   € å%ÜœV TÐ2¨TÑ2´JÄ
ÓKÐKr   c                 óú  ^• [        U 5      m/ n[        T5      S:”  au   [        R                  " TSU5      nUR                  U4S jU 5       5        U(       a8  [        T5       VVs/ s H  u  pEXCS   U-  s=:”  a  U;  d  M  O  M  UPM!     snnmSnT(       aÉ  [        T5      S:”  a  TS S OTn[        R                  " USU5      nU[        :X  a   U$ [        Us=::  a  [        [        T5      -   :  a  O  O
U[        -  nO9[        Us=::  a  [        [        T5      -   :  a  O  O
U[        -  nO[        S5      eUR                  TU   5        TUS-   S  mSnT(       a  MÉ  U$ ! [         a    / s $ f = fs  snnf )Né<   Fc              3   ó.   >#   • U  H
  nTU   v •  M     g 7fr   r¡   )r   ÚiÚLs     €r   r¡  Ú#_exhaustive_wait.<locals>.<genexpr>  s   øé € Ð+¢s !˜˜1ž¢sùó   ƒr   zShould not get herer   )ÚlistrŽ   r¿   ÚBatchedWaitForMultipleObjectsÚTimeoutErrorÚextendÚ	enumeraterÂ   r   r   r   rÙ   r‹  )Úhandlesr   ÚreadyrŽ  rð  r˜  Úshort_Lrñ  s          @r   Ú_exhaustive_waitrü    sc  ø€ ô �‹MˆØˆô ˆq‹6�B‹;ðÜ×;Ò;¸A¸uÀgÓN�ð �L‰LÔ+¡sÓ+Ô+ÞÜ#,¨Q¤<ÔM¢<™4˜1°1¸1±vÀ±zÕ3LÈÑ3L“QÑ3L•Q¡<ÒM�ØˆGÞÜ # A£¨£�a˜˜‘f°ˆGÜ×0Ò0°¸%ÀÓIˆCØ”lÓ"Øð ˆô  #Õ>¬¼¸A»Ñ(>Ö>Ø”}Ñ$‘Ü! SÕDÔ+;¼cÀ!»fÑ+DÖDØÔ'Ñ'‘ä"Ð#8Ó9Ð9Ø�L‰L˜˜3™Ô Ø�#�a‘%�&�	ˆAØˆG÷ ˆað ˆøô)  ó Ø’	ðüó Ns#   ŸE% Á'E7ÂE7ÂE7Å%E4Å3E4c                 óÖ  ^• Uc  [         nOUS:  a  SnO[        US-  S-   5      n[        U 5      n 0 m/ n[        5       n[        5       n U  HÏ  n [	        US5      n [
        R                  " U" 5       SS5      u  pxU[
        R                  :X  a"  UR                  U5        UTUR                  '   Mf  U(       aO  [        R                  " 5       SS S:¼  a3   UR                  S	5      u  p¨U(       d  [!        US
5      (       a  SUl        UR%                  U5        SnMÑ     [+        TR-                  5       U5      nU H  nUR/                  5         M     U Ho  n UR                  S5      u  p¨U[
        R0                  :w  d  M-  TUR                     nUR%                  U5        US:X  d  MU  [!        US
5      (       d  Mh  SUl        Mq     UR3                  U4S jU 5       5        U  Vs/ s H  oUU;   d  M
  UPM     sn$ ! [         a#  n	SU	R                  p‡U[        ;  a  e  Sn	A	GN¨Sn	A	ff = f! [         a  n	U	R                  n Sn	A	GN_Sn	A	ff = f! [&         a    UTUR)                  5       '    GM%  f = f! [         a"  n	U	R                  nU[        ;  a  e  Sn	A	GN1Sn	A	ff = f! U H  nUR/                  5         M     U Hž  n UR                  S5      u  p¨O.! [         a!  n	U	R                  nU[        ;  a  e  Sn	A	OSn	A	ff = fU[
        R0                  :w  d  M\  TUR                     nUR%                  U5        US:X  d  M„  [!        US
5      (       d  M—  SUl        M      f = fs  snf )ú
Wait till an object in object_list is ready/readable.

Returns list of those objects in object_list which are ready/readable.
Nr   r•  g      à?rn   Tr¨  )é   r¨  FrÎ   c              3   ó.   >#   • U  H
  nTU   v •  M     g 7fr   r¡   )r   r˜  Úwaithandle_to_objs     €r   r¡  Úwait.<locals>.<genexpr>u  s   øé € ÐIº=°aÐ.¨qÖ1º=ùró  )r   Úintrô  Úsetrh  r¿   rÒ   rW   rÖ   Ú_ready_errorsrÁ   r‹  rÃ   r4   ÚgetwindowsversionrÄ   r6   rÎ   ÚaddÚAttributeErrorrE   rü  Úkeysr¸   rÅ   Úupdate)Úobject_listr   Úov_listÚready_objectsÚready_handlesÚorn   rº   rÈ   rÞ   ra  r  s              @r   r   r   *  s,  ø€ ð ‰?Ü‰GØ�q‹[Ø‰Gä˜' D™.¨3Ñ.Ó/ˆGä˜;Ó'ˆØÐØˆÜ›ˆÜ›ˆð6	8Û �ð$Ü$ Q¨Ó1�Fð
"Ü")×"2Ò"2±6³8¸QÀÓ"E™˜ð
 œg×6Ñ6Ó6ØŸ™ rÔ*Ø67Ð)¨"¯(©(Ó3ö
 ¤#×"7Ò"7Ó"9¸"¸1Ð"=ÀÓ"Gð1Ø)+×)?Ñ)?ÀÓ)F¡ ö $'¬7°1Ð6J×+KÑ+KØ7; Ô 4Ø%×)Ñ)¨!Ô,Ø"#šñ= !ô@ -Ð->×-CÑ-CÓ-EÀwÓOˆMó �Ø—	‘	–ñ ó �ðØ×3Ñ3°DÓ9‘F�Að
 œ'×9Ñ9Õ9Ø)¨"¯(©(Ñ3�AØ!×%Ñ% aÔ(Ø˜a•xô # 1Ð&:×;Ó;Ø37˜AÖ0ñ ð  	×ÑÔI¹=ÓIÔIÙ&Ó=š;�a¨}Ñ*<—™;Ñ=Ð=øô_ #ó "Ø"&¨¯
©
˜CØ¤mÓ3Ø!õ 4ûð"ûô  $+ó 1Ø&'§j¡j¦ûð1ûô- &ó 9Ø78Ð% a§k¡k£mÕ4ð9ûôN ó ØŸ*™*�CØ¤-Ó/Øõ 0ûðûó �Ø—	‘	–ñ ó �ðØ×3Ñ3°DÓ9‘F�A�søÜó ØŸ*™*�CØ¤-Ó/Øô 0ûðúð œ'×9Ñ9Õ9Ø)¨"¯(©(Ñ3�AØ!×%Ñ% aÔ(Ø˜a•xô # 1Ð&:×;Ó;Ø37˜AÖ0ò üò" >sà   Á
J$ ÁIÁG<Á<AJ$ ÃH,Ã)AJ$ ÅI5Ç&	M&Ç3M&Ç<
H)ÈH$ÈJ$ È$H)È)J$ È,
IÈ6IÉJ$ ÉIÉJ$ ÉI2É-J$ É1I2É2J$ É5
J!É?JÊJ!Ê$M#ËKËM#Ë
L	Ë"K>	Ë9M#Ë>L	ÌM#Ì$M#ÍM#ÍM#ÚPollSelectorc                 ó°  • [        5        nU  H#  nUR                  U[        R                  5        M%     Ub  [        R
                  " 5       U-   n UR                  U5      nU(       a*  U VVs/ s H  u  pgUR                  PM     snnsSSS5        $ Ub)  W[        R
                  " 5       -
  nUS:  a  UsSSS5        $ Mp  s  snnf ! , (       d  f       g= f)rþ  Nr   )Ú_WaitSelectorÚregisterÚ	selectorsÚ
EVENT_READr   r   ÚselectÚfileobj)r  r   Úselectorr„   Údeadlinerú  ÚkeyÚeventss           r   r   r   „  s´   € ô Œ_ Û"�Ø×!Ñ! #¤y×';Ñ';Ö<ñ #ð Ñ"ÜŸ>š>Ó+¨gÑ5�àØ Ÿ™¨Ó0�ÞÙ=BÔCºU©M¨S˜CŸKœK¹UÒC÷ ‰_ð Ñ*Ø"*¬T¯^ª^Ó-=Ñ"=˜Ø" Q›;Ø#(÷ ‰_ñ ùó D÷ �_ús$   ‹A#CÁ.CÂCÂ"CÂ?CÃ
Cc                 ó*  • U R                  5       n[        R                  " U[        R                  [        R                  5       nSSKJn  UR                  U5      n[        X@R                  U R                  44sS S S 5        $ ! , (       d  f       g = f)Nr   )Úresource_sharer)rn   r7   Úfromfdr   ÚSOCK_STREAMr¥  r  Ú	DupSocketÚrebuild_connectionrK   rL   )rÖ  rJ   rx  r  Údss        r   Úreduce_connectionr#     s^   € Ø—‘“ˆÜ�]Š]˜6¤6§>¡>´6×3EÑ3EÔFÈ!Ý)Ø ×*Ñ*¨1Ó-ˆBÜ%¨¯M©M¸4¿=¹=Ð'IÐI÷ G×F×Fús   Á5BÂ
Bc                 óV   • U R                  5       n[        UR                  5       X5      $ r   ©r@  rë   )r"  rK   rL   Úsocks       r   r!  r!  ¦  s    € Ø�y‰y‹{ˆÜ˜$Ÿ+™+›-¨Ó<Ð<r   c                 ó  • U R                   (       a  [        R                  OSU R                  (       a  [        R                  OS-  n[
        R                  " U R                  5       U5      n[        X R                   U R                  44$ rò   )	rK   r¿   ÚFILE_GENERIC_READrL   ÚFILE_GENERIC_WRITEr   Ú	DupHandlern   Úrebuild_pipe_connection)rÖ  r\  Údhs      r   Úreduce_pipe_connectionr-  «  s\   € Ø04··”7×,Ò,À1Ø15··”7×-Ò-ÀAñGˆä× Ò  §¡£°Ó7ˆÜ&¨¯]©]¸D¿M¹MÐ(JÐJÐJr   c                 ó:   • U R                  5       n[        X1U5      $ r   )r@  rµ   )r,  rK   rL   rJ   s       r   r+  r+  °  s   € Ø—‘“ˆÜ˜f°Ó9Ð9r   c                 ó†   • [         R                  " U R                  5       5      n[        XR                  U R
                  44$ r   )r   ÚDupFdrn   r!  rK   rL   )rÖ  Údfs     r   r#  r#  ¶  s.   € Ü�_Š_˜TŸ[™[›]Ó+ˆÜ! B¯©°t·}±}Ð#EÐEÐEr   c                 ó:   • U R                  5       n[        X1U5      $ r   r%  )r1  rK   rL   Úfds       r   r!  r!  ¹  s   € Ø�Y‰Y‹[ˆÜ˜"¨Ó1Ð1r   )NN)T)r¶  r   )VÚ__all__rÆ   rÏ   r)   r4   r7   rÿ   r   r&   r  r¥  r   r	   r
   Úcontextr   ÚForkingPicklerr�   r  r¿   r   r   r   r   ÚImportErrorr5   rM  ÚCONNECTION_TIMEOUTr  r,   r  r  Úfamiliesr6   r   r    r2   r8   r@   rB   rµ   rë   Úobjectr   r   r   r  r9  r  r8  rÈ  rÊ  rË  rÌ  Ú	frozensetr­  Úmaxr¬  rÉ  Ú_MD5_DIGEST_LENrª  r³  r½  rÃ  r  r%  r&  rÐ  rà  rã  rå  rì  rü  r×   ÚERROR_NETNAME_DELETEDr  r   r  r  r  ÚSelectSelectorr#  r!  r  r-  r+  r¡   r   r   Ú<module>r@     só  ðò 3€ã Û 	Û 	Û 
Û Û Û Û Û õ ç 1Ý Ø×*Ñ*€ðÛÛßOÓOð €àÐ à—’Ó!€ØÐ à€Øˆ;€á
ˆ6�9×ÑØ€NØ��Ñ€Hà‡<�<�7ÓØ€NØ��Ñ€Hð -ô &ò ò0ò
FòF÷&Tñ Tön ô]˜ô ]ô@M�ô MôhGˆvô GôTð* ‡<�<�7Óõô&/ôj)�Vô )òX&ð ‡<�<�7Óô6,�vô 6,òp!ð> €à€
Ø€Ø€ñr Ú@óBÐ áÑ7Ñ&6Ó7Ó7€ð Ð Ø€Ø*¨OÐ<€ò2ò4?ò8?ñ2(¨5õ (ð*>¨%ô >ô*˜ô òHòô>�(ô >òLð ‡<�<�7Óòð@ ×.Ñ.°×0MÑ0MÐN€MõL>ó` ñ
 ˆy˜.×)Ñ)Ø!×.Ñ.‰à!×0Ñ0ˆô)ð6 ‡<�<�7ÓòJò=ð ×Ò�zÐ#4Ô5òKò
:ð ×Ò�~Ð'=Õ>òFò2ð ×Ò�zÐ#4Õ5øðw$ ó Ø
‡|�|�wÓØØƒGðús   Á
I ÉI4É3I4