?
Current File : //opt/alt/python313/lib64/python3.13/multiprocessing/__pycache__/connection.cpython-313.pyc
�

:��iާ����/SQrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
Jr SSK
JrJ
r
 SSKJr \R rSSKrSSKrSSKJrJrJrJr S	rS
r\	R8"5rSrSrS/r \!"\S
5(aS
r\ S
/-
r \R2S:XaSr\ S/-
r \4Sjr"Sr#Sr$Sr%Sr&"SS5r'\(a"SS\'5r("SS\'5r)"SS\*5r+SDSjr,\R2S:waSESjr-OSESjr-"SS \*5r.S!r/\R2S:Xa"S"S#\*5r0S$r1S%r2S&r3S'r4S(r5\6"1S)k5r7\8"S*\755r9S+r:S,r;\:\;4r<S-r=S.r>S/r?SFS0\@4S1jjrAS0\@4S2jrB"S3S4\*5rCS5rDS6rE"S7S8\+5rFS9rG\R2S:Xa!S:rH\R�\R�1rKSGS;jrLO0SSKMrM\!"\MS<5(a
\MR�rOO\MR�rOSGS=jrL\R2S:Xa3S>rQS?rR\R�"\)\Q5 S@rTSArU\R�"\(\T5 gSBrQSCrR\R�"\)\Q5 g!\a \R2S:XaeSrGNf=f)H)�Client�Listener�Pipe�wait�N�)�util)�AuthenticationError�BufferTooShort)�	reduction)�
WAIT_OBJECT_0�WAIT_ABANDONED_0�WAIT_TIMEOUT�INFINITE�win32i g4@�d�AF_INET�AF_UNIX�AF_PIPEc�2�[R"5U-$�N��time�	monotonic)�timeouts �A/opt/alt/python313/lib64/python3.13/multiprocessing/connection.py�
_init_timeoutr=s���>�>��g�%�%�c�2�[R"5U:�$rr)�ts r�_check_timeoutr @s���>�>��a��rc�"�US:XagUS:Xa([R"S[R"5S9$US:XaJS[R
"5[
[5[R"S5R54-$[S	5e)
z7
Return an arbitrary free address for the given family
r)�	localhostrrzsock-)�prefix�dirrz\\.\pipe\pyc-%d-%d-%s�zunrecognized family)�tempfile�mktempr�get_temp_dir�os�getpid�next�
_mmap_counter�urandom�hex�
ValueError��familys r�arbitrary_addressr2Gs|������	�9�	����g�4�3D�3D�3F�G�G�	�9�	�(�����d�=�1�2�:�:�a�=�3D�3D�3F�G�H�	I��.�/�/rc���[RS:waUS:Xa[SU-5e[RS:Xa+US:Xa$[[U5(d[SU-5eggg)z<
Checks if the family is valid for the current environment.
rrzFamily %s is not recognized.rN)�sys�platformr/�hasattr�socketr0s r�_validate_familyr8Usf���|�|�w��6�Y�#6��7�&�@�A�A�
�|�|�w��6�Y�#6��v�v�&�&��;�f�D�E�E�'�$7�rc���[U5[:Xag[U5[LaURS5(ag[U5[Ld[R
"U5(ag[
SU-5e)zQ
Return the types of the address

This can be 'AF_INET', 'AF_UNIX', or 'AF_PIPE'
rz\\rrzaddress type of %r unrecognized)�type�tuple�str�
startswithr�is_abstract_socket_namespacer/)�addresss r�address_typer@asb���G�}����	
�g��#�	�'�"4�"4�V�"<�"<��	
�g��#�	��!B�!B�7�!K�!K���:�W�D�E�Erc��\rSrSrSrSSjrSrSrSrSr	Sr
\S	5r\S
5r
\S5rSrS
rSSjrSrSSjrSSjrSrSSjrSrSrSrg)�_ConnectionBase�tNc��UR5nUS:a[S5eU(dU(d[S5eXlX lX0lg)Nrzinvalid handlez6at least one of `readable` and `writable` must be True)�	__index__r/�_handle�	_readable�	_writable)�self�handle�readable�writables    r�__init__�_ConnectionBase.__init__wsI���!�!�#���A�:��-�.�.����H�J�
J���!��!�rc�@�URbUR5 ggr�rF�_close�rIs r�__del__�_ConnectionBase.__del__�s���<�<�#��K�K�M�$rc�4�URc[S5eg)N�handle is closed)rF�OSErrorrRs r�
_check_closed�_ConnectionBase._check_closed�s���<�<���,�-�-� rc�<�UR(d[S5eg)Nzconnection is write-only)rGrWrRs r�_check_readable�_ConnectionBase._check_readable�s���~�~��4�5�5�rc�<�UR(d[S5eg)Nzconnection is read-only)rHrWrRs r�_check_writable�_ConnectionBase._check_writable�s���~�~��3�4�4�rc�j�UR(aSUlOUR5 [S5e)NFzbad message length)rHrG�closerWrRs r�_bad_message_length�#_ConnectionBase._bad_message_length�s%���>�>�"�D�N��J�J�L��*�+�+rc��URSL$)z True if the connection is closedN�rFrRs r�closed�_ConnectionBase.closed�s���|�|�t�#�#rc��UR$)z"True if the connection is readable)rGrRs rrK�_ConnectionBase.readable�����~�~�rc��UR$)z"True if the connection is writable)rHrRs rrL�_ConnectionBase.writable�rjrc�:�UR5 UR$)z+File descriptor or handle of the connection)rXrFrRs r�fileno�_ConnectionBase.fileno�s�������|�|�rc�h�URbUR5 SUlgg!SUlf=f)zClose the connectionNrPrRs rra�_ConnectionBase.close�s1���<�<�#�
$����
�#���	$�� $���s�(�	1c�x�UR5 UR5 [U5nURS:�aUR	S5nUR
nUS:a[
S5eXR:a[
S5eUcXR-
nO$US:a[
S5eX#-U:�a[
S5eURXBX#-5 g)	z,Send the bytes data from a bytes-like objectr�Brzoffset is negativezbuffer length < offsetNzsize is negativezbuffer length < offset + size)rXr^�
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�1rc��UR5 UR5 UR[R	U55 g)zSend a (picklable) objectN)rXr^rx�_ForkingPickler�dumps�rI�objs  r�send�_ConnectionBase.send�s3��������������.�.�s�3�4rc���UR5 UR5 UbUS:a[S5eURU5nUcUR	5 UR5$)z'
Receive bytes data as a bytes object.
rznegative maxlength)rXr[r/�_recv_bytesrb�getvalue)rI�	maxlengthrys   r�
recv_bytes�_ConnectionBase.recv_bytes�sa��	
��������� �Y��]��1�2�2����y�)���;��$�$�&��|�|�~�rc���UR5 UR5 [U5nURnU[	U5-nUS:a[S5eX%:�a[S5eUR
5nUR5nXRU-:a[UR55eURS5 URX2U-X'-U-5 UsSSS5 $!,(df   g=f)zY
Receive bytes data into a writeable bytes-like object.
Return the number of bytes read.
rznegative offsetzoffset too largeN)rXr[rtru�lenr/r��tellr
r��seek�readinto)rIryrzr|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��UR5 UR5 UR5n[R	UR55$)zReceive a (picklable) object)rXr[r�r��loads�	getbuffer)rIrys  r�recv�_ConnectionBase.recv�s?������������� ���$�$�S�]�]�_�5�5rc�d�UR5 UR5 URU5$)z/Whether there is any input available to be read)rXr[�_poll�rIrs  r�poll�_ConnectionBase.poll�s)�����������z�z�'�"�"rc��U$r�rRs r�	__enter__�_ConnectionBase.__enter__����rc�$�UR5 gr�ra�rI�exc_type�	exc_value�exc_tbs    r�__exit__�_ConnectionBase.__exit__����
�
�r)rFrGrH)TT)rNr)r)g)�__name__�
__module__�__qualname__�__firstlineno__rFrMrSrXr[r^rb�propertyrfrKrLrnrar~r�r�r�r�r�r�r��__static_attributes__r�rrrBrBts����G�	"��.�6�5�,��$��$����������
$�2�(5���26�#��rrBc�\�\rSrSrSrSrSr\R4Sjr	Sr
SSjrSrS	r
S
rg)�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�URnUbUR5 U"UR5 gr)�_send_ov�cancelrF)rI�_CloseHandle�ovs   rrQ�PipeConnection._closes%�����B��~��	�	������&rc�@�URb[S5e[R"URUSS9up#X lU[R
:Xa3[R"UR/S[5nU[:XdeSUlURS5upSU[R:Xa[[RS5eUS:XdeU[!U5:Xdeg! UR5 e=f!SUlURS5upSf=f)Nz/concurrent send_bytes() calls are not supportedT��
overlappedFrVr)r�r/�_winapi�	WriteFilerF�ERROR_IO_PENDING�WaitForMultipleObjects�eventrrr��GetOverlappedResult�ERROR_OPERATION_ABORTEDrW�errno�EPIPEr�)rIryr��err�waitres�nwrittens      rrx�PipeConnection._send_bytess���}�}�(� �"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�AC+�+C>�>D�Dc���UR(aSUl[R"5$UcSO[US5n[R
"URUSS9up4U[R:Xa3[R"UR/S[5nU[:XdeURS5updUS:Xa6[R"5nURUR55 U$U[R :XaUR#X15$[-S5e! UR5 e=f!URS5updUS:Xa:[R"5nURUR55 Us s$U[R :XaUR#X15s s$f=f![$a*nUR&[R(:Xa[*eeSnAff=f)NF�Tr�rz.shouldn't get here; expected KeyboardInterrupt)�_got_empty_message�io�BytesIO�minr��ReadFilerFr�r�r�rrr�r��writer��ERROR_MORE_DATA�_get_more_datarW�winerror�ERROR_BROKEN_PIPE�EOFError�RuntimeError)	rI�maxsize�bsizer�r�r��nread�f�es	         rr��PipeConnection._recv_bytes7s����&�&�*/��'��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�#AD*�*AG�9$G�*D=�=E�AF>�G�'F>�;G�=F>�>G�
G5�%G0�0G5c��UR(d'[R"UR5SS:wag[	[U/U55$)NrT)r�r��
PeekNamedPiperF�boolrr�s  rr��PipeConnection._pollWs>���'�'��-�-�d�l�l�;�A�>�!�C����d�V�W�-�.�.rc���UR5n[R"5nURU5 [R
"UR5SnUS:�deUb"[U5U-U:�aUR5 [R"URUSS9upURS5upvUS:XdeXu:XdeURUR55 U$)NrrTr�)r�r�r�r�r�r�rFr�rbr�r�)rIr�r�ryr��leftr��rbytess        rr��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��CloseHandlerQrxr�r�r�r�r�rrr�r�
s8��	�
#����&-�&9�&9�	'�	(�4	Q�@	/�
	rr�c��\rSrSrSr\(a)\R4Sjr\Rr
\RrO(\
R4Sjr\
Rr
\
R r\
4Sjr\4SjrSrSS	jrS
rSrg)
�
Connectionimzc
Connection class based on an arbitrary file descriptor (Unix only), or
a socket handle (Windows).
c�(�U"UR5 grre�rIrQs  rrQ�Connection._closet����4�<�<� rc�(�U"UR5 grrer�s  rrQr�yr�rc�b�[U5nU"URU5nX4-nUS:XagXSnM$�Nr)r�rF)rIryr��	remainingr}s     r�_send�Connection._send~s=����H�	���d�l�l�C�(�A��N�I��A�~���b�'�C�rc���[R"5nURnUnUS:�aLU"XE5n[U5nUS:XaXQ:Xa[e[S5eUR
U5 XW-nUS:�aMLU$)Nrzgot end of file during message)r�r�rFr�r�rWr�)rIr{�readryrJr��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��
rc��[U5nUS:�ab[R"SS5n[R"SU5nURU5 URU5 URU5 g[R"SU5nUS:�a#URU5 URU5 gURXA-5 g)Ni����!i����!Qi@)r��struct�packr�)rIryr}�
pre_header�headers     rrx�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�<�(rNc�"�URS5n[R"SUR55unUS:Xa8URS5n[R"SUR55unUbX1:�agURU5$)N�r�r�r%r�)r�r��unpackr�)rIr�ryr{s    rr��Connection._recv_bytes�so���j�j��m���
�
�d�C�L�L�N�3����2�:��*�*�Q�-�C��M�M�$�����7�E�D���4�>���z�z�$��rc�2�[U/U5n[U5$r)rr�)rIr�rs   rr��Connection._poll�s���$���!���A�w�rr�r)r�r�r�r�r�r��_multiprocessing�closesocketrQr��_writer��_readr)rar�r�r�r�rxr�r�r�r�rrr�r�mso���
� 0� <� <�	!�!�&�&�� �%�%�� "���	!���������%�� %�� )�. �rr�c�Z�\rSrSrSrSSjrSrSr\S5r	\S5r
S	rS
rSr
g)
ri�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 [U5=(d [n[U5 Ub [U[5(d[S5eUS:XaQU(a[
X5UlO^[R"5Hn[U5n[
X5Ul O( O%U=(d [U5n[#XU5UlX@lg![aEnU[:�aeUR[R[R 4;aeSnAM�SnAff=f)N�authkey should be a byte stringr)r@�default_familyr8�
isinstance�bytes�	TypeError�PipeListener�	_listener�	itertools�countr2rW�_MAX_PIPE_ATTEMPTSr�r��ERROR_PIPE_BUSY�ERROR_ACCESS_DENIED�SocketListener�_authkey)rIr?r1�backlog�authkey�attemptsr�s       rrM�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���URc[S5eURR5nURb*[	XR5 [XR5 U$)zb
Accept a connection on the bound socket or named pipe of `self`.

Returns a `Connection` object.
zlistener is closed)rrW�acceptr�deliver_challenge�answer_challenge)rI�cs  rr$�Listener.accept�sS���>�>�!��.�/�/��N�N�!�!�#���=�=�$��a���/��Q�
�
�.��rc�R�URnUbSUlUR5 gg)z1
Close the bound socket or named pipe of `self`.
N)rra)rI�listeners  rra�Listener.close�s)���>�>����!�D�N��N�N�� rc�.�URR$r)r�_addressrRs rr?�Listener.address�s���~�~�&�&�&rc�.�URR$r)r�_last_acceptedrRs r�
last_accepted�Listener.last_accepteds���~�~�,�,�,rc��U$rr�rRs rr��Listener.__enter__r�rc�$�UR5 grr�r�s    rr��Listener.__exit__r�r)rr)NNrN)r�r�r�r�r�rMr$rar�r?r1r�r�r�r�rrrr�sH��� �8
���'��'��-��-��rrc��U=(d [U5n[U5 US:Xa[U5nO[U5nUb [	U[
5(d[
S5eUb[X25 [X25 U$)z5
Returns a connection to the address of a `Listener`
rr)	r@r8�
PipeClient�SocketClientrrrr&r%)r?r1r r's    rrrsp���
,�|�G�,�F��V��
����w�����!����:�g�u�#=�#=��9�:�:�����$��!�%��Hrc�H�U(an[R"5upURS5 URS5 [UR	55n[UR	55nX44$[
R"5upV[USS9n[USS9nX44$)�<
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       rrr"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�
rc�`�U(a=[Rn[R[R-n[[pCO'[R
n[RnS[pC[R"5H�n[S5n[R"Xa[R-[R-[R[R-[R-SX4[R[R 5n O [R,"WUS[R [R.[R[R 5n	[R0"U	[RSS5 [R2"WSS9n
U
R5S5up�US:Xde[7XpS9n
[7X�S9nX�4$!["aFnU[$:�aeUR&[R([R*4;aeSnAGM�SnAff=f)	r;rrrNTr�r<r=)r��PIPE_ACCESS_DUPLEX�GENERIC_READ�
GENERIC_WRITE�BUFSIZE�PIPE_ACCESS_INBOUNDrrr2�CreateNamedPipe�FILE_FLAG_OVERLAPPED�FILE_FLAG_FIRST_PIPE_INSTANCE�PIPE_TYPE_MESSAGE�PIPE_READMODE_MESSAGE�	PIPE_WAIT�NMPWAIT_WAIT_FOREVER�NULLrWrr�rr�
CreateFile�
OPEN_EXISTING�SetNamedPipeHandleState�ConnectNamedPiper�r�)rB�openmode�access�obsize�ibsizer!r?�h1r��h2r��_r�rErFs               rrr5s�����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�.�\rSrSrSrSSjrSrSrSrg)	rijzG
Representation of a socket which is bound to an address and listening
c���[R"[[U55Ul[RS:Xa9URR[R[RS5 URRS5 URRU5 URRU5 URR5UlX lSUlUS:XaG["R$"U5(d,["R&"U[R(U4SS9UlgSUlg![a URR5 ef=f)N�posixrTrr��args�exitpriority)r7�getattr�_socketr)�name�
setsockopt�
SOL_SOCKET�SO_REUSEADDRr?�bind�listen�getsocknamer-rWra�_familyr0rr>�Finalize�unlink�_unlink)rIr?r1rs    rrM�SocketListener.__init__ns
���}�}�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
�
&E0c��URR5uolURS5 [	UR55$)NT)rir$r0r?r�r@�rI�ss  rr$�SocketListener.accept�s7��!%���!4�!4�!6����	�
�
�d���!�(�(�*�%�%rc��URR5 URnUbSUlU"5 gg!URnUbSUlU"5 ff=fr)rirart)rIrss  rra�SocketListener.close�s[��	��L�L��� ��\�\�F��!�#�����"���\�\�F��!�#�����"�s	�;� A)r-rqr0rirtN)r)	r�r�r�r�r�rMr$rar�r�rrrrjs��� �2&�
rrc��[U5n[R"[[U55nURS5 UR	U5 [UR
55sSSS5 $!,(df   g=f)zG
Return a connection object connected to the socket given by `address`
TN)r@r7rhr?�connectr�r@)r?r1rxs   rr9r9�sU���'�
"�F�	������/�	1�Q�	�
�
�d��	�	�	�'���!�(�(�*�%�
2�	1�	1�s�;A5�5
Bc�B�\rSrSrSrS	SjrS
SjrSr\S5r	Sr
g)ri�z 
Representation of a named pipe
Nc�
�XlURSS9/UlSUl[R
"SUR5 [R"U[RURUR4SS9Ul	g)NT)�firstz listener created with address=%rrre)
r-�_new_handle�
_handle_queuer0r�	sub_debugrrr�_finalize_pipe_listenerra)rIr?rs   rrM�PipeListener.__init__�sj��#�M�"&�"2�"2��"2�">�!?�D��"&�D���N�N�=�t�}�}�M�����l�:�:��(�(�$�-�-�8�q��D�Jrc
��[R[R-nU(aU[R-n[R"UR
U[R[R-[R-[R[[[R[R5$r)
r�rJrPrQrOr-rRrSrT�PIPE_UNLIMITED_INSTANCESrMrUrV)rIr��flagss   rr��PipeListener._new_handle�s����.�.��1M�1M�M�E����>�>�>���*�*��
�
�u��)�)�G�,I�,I�I��!�!�"��0�0�'�7��,�,�g�l�l��
rc�Z�URRUR55 URRS5n[R
"USS9n[R"UR/S[5nURS5upEUS:Xde[U5$! UR5 [R"U5 e=f!URS5upEUS:Xdef=f![a)nUR[R:waeSnAN�SnAff=f)NrTr�F)r��appendr��popr�rZr�r�rr�r�r�rWr��
ERROR_NO_DATAr�)rIrJr��resrar�r�s       rr$�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"SU5 UHn[R"U5 M g)Nz closing listener with address=%r)rr�r�r�)�queuer?rJs   rr��$PipeListener._finalize_pipe_listener�s)���N�N�=�w�G����#�#�F�+� r)r-r�r0rar)F)r�r�r�r�r�rMr�r$�staticmethodr�r�r�rrrr�s*��	�		�
	�	*�.
�	,�
�	,rrc	�F�[5n[R"US5 [R"U[R[R
-S[R[R[R[R5n[R"U[RSS5 [!U5$![aInUR[R[R4;d[U5(aeSnAOSnAff=fGM)zE
Return a connection object connected to the pipe given by `address`
��rN)rr��
WaitNamedPiperWrKrLrVrXrPrWr��ERROR_SEM_TIMEOUTrr rYrSr�)r?r�hr�s    rr8r8�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��CT��
��s�B
C
�

D�?D�D�(s#CHALLENGE#s	#WELCOME#s	#FAILURE#>�md5�sha256�sha384�sha3_256�sha3_384c#�8# �UHn[U5v� M g7fr)r�)�.0ras  r�	<genexpr>r�\s���7�&6��c�!�f�f�&6�s���c��[U5[;aSU4$URS5(aIURSS[S-5=nS:�a)USUnU[
;aXS-SnUR
S5U4$[S	U<35e)
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�rN�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�gs����7�|��&�
�7�{�����4� � ��,�,�t�Q���(9�:�	:��a�?���5�!���%�%��A�g�h�'�G��=�=��)�7�2�2�
�
/�&-�Z�
1�2�2rc��SSKn[U5SnU(d!URXS5R5$URXU5R5nSURS5U4-$![a SnNDf=f)aoCreate 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.
rN�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�?Bc
�z�SSKn[U5upEU=(d SnURXU5R5n[
U5[
U5:wa'[SU<S[
U5S[
U535eURXe5(d[S	5eg![a [SU<S35ef=f)
aHVerify 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.
rNr�zresponse_digest=z unsupportedz	expected z of length z got zdigest 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#[SR[	U555e[
[:�dS5e[R"[
5nSURS5U4-nUR[U-5 URS5n[XU5 UR[5 g![a UR[ 5 ef=f)N� Authkey must be bytes, not {0!s}zprotocol constraintr�r��)rrr/�formatr:�MESSAGE_LENGTH�_MD5ONLY_MESSAGE_LENGTHr)r-r�r~�
_CHALLENGEr�r��_WELCOMEr	�_FAILURE)�
connectionr r�r�r�s     rr%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#[SR[	U555eURS5nUR
[5(d[SU<35eU[[5Sn[U5[:a[S[U5S35e[X5nURU5 URS5nU[:wa[S5eg)Nr�r�z,Protocol error, expected challenge: message=zchallenge too short: z byteszdigest sent was rejected)rrr/r�r:r�r=r�r	r�r�r�r~r�)r�r r�r�r�s     rr&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��!�"<�=�=�rc�&�\rSrSrSrSrSrSrg)�ConnectionWrapperi�c�h�XlX lX0lSHn[X5n[	XU5 M g)N)rnrar�r�r~)�_conn�_dumps�_loadsrh�setattr)rI�connr�r��attrr�s      rrM�ConnectionWrapper.__init__�s0���
�����K�D��$�%�C��D��$�Lrc�\�URU5nURRU5 gr)r�r�r~)rIr�rxs   rr��ConnectionWrapper.send�s"���K�K�����
�
���a� rc�X�URR5nURU5$r)r�r�r�rws  rr��ConnectionWrapper.recv�s"���J�J�!�!�#���{�{�1�~�r)r�r�r�N)r�r�r�r�rMr�r�r�r�rrr�r��s��%�!�rr�c�T�[RU4SSSS5RS5$)Nr�utf-8)�	xmlrpclibr�r�)r�s r�
_xml_dumpsr��s&���?�?�C�6�4��t�Q�7�>�>�w�G�Grc�V�[RURS55uupU$)Nr�)r�r�r�)rxr��methods   r�
_xml_loadsr��s"���_�_�Q�X�X�g�%6�7�N�F�S��Jrc��\rSrSrSrSrg)�XmlListeneri�c�b�SSKJq [R	U5n[U[[5$r�)�
xmlrpc.client�clientr�rr$r�r�r�r�s  rr$�XmlListener.accept�s"��)��o�o�d�#�� ��j�*�=�=rr�N)r�r�r�r�r$r�r�rrr�r��s��>rr�c�J�SSKJq [[	U0UD6[
[5$r�)r�r�r�r�rr�r�)rf�kwdss  r�	XmlClientr��s��%��V�T�2�T�2�J�
�K�Krc�^�[U5m/n[T5S:�au[R"TSU5nURU4SjU55 U(a8[
T5VVs/sHupEXCSU-s=:�aU;dMO MUPM! snnmSnT(a�[T5S:�aTSSOTn[R"USU5nU[:XaU$[Us=::a[[T5-:a
O O
U[-nO9[Us=::a[[T5-:a
O O
U[-nO[S5eURTU5 TUS-SmSnT(aM�U$![a /s$f=fs snnf)N�<Fc3�.># �UH
nTUv� M g7frr�)r��i�Ls  �rr��#_exhaustive_wait.<locals>.<genexpr>s����+�s�!��1��s���rzShould not get herer)
�listr�r��BatchedWaitForMultipleObjects�TimeoutError�extend�	enumerater�rr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����) �
��	�
��Ns#�E%�'E7�E7�E7�%E4�3E4c��^�Uc[nOUS:aSnO[US-S-5n[U5n0m/n[5n[5nUH�n[	US5n[
R"U"5SS5upxU[
R:Xa"URU5 UTUR'MfU(aO[R"5SSS:�a3URS	5up�U(d[!US
5(aSUlUR%U5 SnM� [+TR-5U5nUHnUR/5 M UHonURS5up�U[
R0:wdM-TURnUR%U5 US:XdMU[!US
5(dMhSUlMq UR3U4SjU55 UVs/sHoUU;dM
UPM sn$![a#n	SU	Rp�U[;aeSn	A	GN�Sn	A	ff=f![an	U	RnSn	A	GN_Sn	A	ff=f![&a UTUR)5'GM%f=f![a"n	U	RnU[;aeSn	A	GN1Sn	A	ff=f!UHnUR/5 M UH�nURS5up�O.![a!n	U	RnU[;aeSn	A	OSn	A	ff=fU[
R0:wdM\TURnUR%U5 US:XdM�[!US
5(dM�SUlM� f=fs snf)�
Wait till an object in object_list is ready/readable.

Returns list of those objects in object_list which are ready/readable.
Nrr�g�?rnTr�)�r�Fr�c3�.># �UH
nTUv� M g7frr�)r�r��waithandle_to_objs  �rr��wait.<locals>.<genexpr>us����I�=�a�.�q�1�=�r�)r�intr��setrhr�r�rWr��
_ready_errorsr�r�r�r4�getwindowsversionr�r6r��add�AttributeErrorrEr��keysr�r��update)�object_listr�ov_list�
ready_objects�
ready_handles�ornr�r�r�rars           @rrr*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<�<AJ$�H,�)AJ$�I5�&	M&�3M&�<
H)�H$�J$�$H)�)J$�,
I
�6I�J$�I
�
J$�I2�-J$�1I2�2J$�5
J!�?J�J!�$M#�K�M#�
L	�"K>	�9M#�>L	�M#�$M#�M#�M#�PollSelectorc��[5nUH#nURU[R5 M% Ub[R
"5U-nUR
U5nU(a*UVVs/sHupgURPM snnsSSS5 $Ub)W[R
"5-
nUS:aUsSSS5 $Mps snnf!,(df   g=f)r�Nr)�
_WaitSelector�register�	selectors�
EVENT_READrr�select�fileobj)rr�selectorr��deadliner��key�eventss        rrr�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�
Cc�*�UR5n[R"U[R[R5nSSKJn URU5n[X@RUR44sSSS5 $!,(df   g=f)Nr)�resource_sharer)rnr7�fromfdr�SOCK_STREAMr�r�	DupSocket�rebuild_connectionrKrL)r�rJrxr�dss     r�reduce_connectionr#�s^�������
�]�]�6�6�>�>�6�3E�3E�
F�!�)� �*�*�1�-�B�%��M�M�4�=�=�'I�I�G�
F�
F�s�5B�
Bc�V�UR5n[UR5X5$r�r@r�)r"rKrL�socks    rr!r!�s ���y�y�{���$�+�+�-��<�<rc��UR(a[ROSUR(a[ROS-n[
R"UR5U5n[X RUR44$r�)	rKr��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�Jrc�:�UR5n[X1U5$r)r@r�)r,rKrLrJs    rr+r+�s��������f��9�9rc��[R"UR55n[XRUR
44$r)r�DupFdrnr!rKrL)r��dfs  rr#r#�s.��
�_�_�T�[�[�]�
+��!�B�
�
�t�}�}�#E�E�Erc�:�UR5n[X1U5$rr%)r1rKrL�fds    rr!r!�s��
�Y�Y�[���"��1�1r)NN)T)r�r)V�__all__r�r�r)r4r7r�rr&rr�rr	r
�contextr�ForkingPicklerr�rr�rr
rr�ImportErrorr5rM�CONNECTION_TIMEOUTrr,rr�familiesr6rr r2r8r@rBr�r��objectrrrrr9rr8r�r�r�r��	frozensetr��maxr�r��_MD5_DIGEST_LENr�r�r�r�rr%r&r�r�r�r�r�r�r��ERROR_NETNAME_DELETEDrrrrr�SelectSelectorr#r!rr-r+r�rr�<module>r@s���3���	�	�
�
�
�����1���*�*�����O�O��������!�
������;��
�6�9����N�����H��<�<�7���N�����H�-�&� �0�
F�
F�&T�T�n�]��]�@M��M�hG�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�3I4