ó
    ¡7�j®G  ã                   óÀ  • S 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
r
SSKrSSKrSSKJrJrJr  SSKJrJr  \R(                  " S5      R*                  rS\SS4S jrSr\R2                  " \5      rS	r " S
 S\R:                  5      r " S S\R>                  5      r  " S S5      r! " S S\\RD                  5      r" " S S\5      r# " S S5      r$g)zKBi-directional asyncio.Transport implementations based on file descriptors.é    N)ÚAnyÚClassVarÚSequenceé   )Ú
JsonObjectÚget_intÚargsÚreturnc                  ó2   • [        U 6 S:w  a  [        S5      eg )Nr   zprctl() failed)Ú	sys_prctlÚOSError)r	   s    Ú4/usr/lib/python3/dist-packages/cockpit/transports.pyÚprctlr   '   s    € Ü�$Ð˜1ÓÜÐ&Ó'Ð'ð ó    i   c                   óD  ^ • \ rS rSr% Sr\\   \S'   \R                  \S'   \R                  \S'   S\S'   \\S'   \\S	'   \\S
'   \\S'   \\S'   Sr\\S'     S0S\R                  S\R                  S\S\SS4
U 4S jjjrS1S jrS\4S jrS1S jrS1S jrS1S jrS1S jrS2S3S jjrS\4S jrS1S  jrS\4S! jrS4S" jrS5S6S# jjrS1S$ jrS1S% jrS1S& jrS'\SS4S( jrS'\SS4S) jrS1S* jr S\RB                  4S+ jr"S\4S, jr#S\RB                  SS4S- jr$S1S. jr%S/r&U =r'$ )7Ú
_Transporté3   i   Ú
BLOCK_SIZEÚ_loopÚ	_protocolzcollections.deque[bytes] | NoneÚ_queueÚ_in_fdÚ_out_fdÚ_closingÚ_is_readingÚ_eofFÚ_eio_is_eofNÚloopÚprotocolÚin_fdÚout_fdÚextrazdict[str, object] | Nonec                 óv  >• [         TU ]  U5        Xl        X l        [        R                  SXX45        S U l        SU l        SU l        SU l	        X0l
        X@l        [        R                  " US5        XC:w  a  [        R                  " US5        U R                  R                  U 5        U R                  5         g )Nz/Created transport %s for protocol %s, fds %d %dF)ÚsuperÚ__init__r   r   ÚloggerÚdebugr   r   r   r   r   r   ÚosÚset_blockingÚconnection_madeÚresume_reading)Úselfr   r   r    r!   r"   Ú	__class__s         €r   r%   Ú_Transport.__init__B   s”   ø€ ô
 	‰Ñ˜ÔàŒ
Ø!Œä�‰ÐFÈÐX]ÔfàˆŒØ ˆÔØˆŒ	ØˆŒàŒØŒä
�Š˜˜uÔ%Ø‹?Ü�OŠO˜F EÔ*à�‰×&Ñ& tÔ,Ø×ÑÕr   r
   c                 ó¼  • [         R                  SX R                  U R                  5         [        R
                  " U R                  [        R                  5      nUS:w  a;  [         R                  S[        U5      5        U R                  R                  U5        g [         R                  S5        U R!                  5         U R                  R#                  5       nU(       d  U R%                  5         g g ! [         a     g [         aQ  nU R                  (       a%  UR                  [        R                  :X  a  Sn S nANäU R                  U5         S nAg S nAff = f)NzRead ready on %s %s %dr   z  read %d bytesz	  got EOF)r&   r'   r   r   r(   Úreadr   r   ÚBlockingIOErrorr   r   ÚerrnoÚEIOÚabortÚlenÚdata_receivedÚ_close_readerÚeof_receivedÚclose)r,   ÚdataÚexcÚ	keep_opens       r   Ú_read_readyÚ_Transport._read_ready]   sí   € Ü�‰Ð-¨t·^±^ÀTÇ[Á[ÔQð	Ü—7’7˜4Ÿ;™;¬
×(=Ñ(=Ó>ˆDð �3‹;Ü�L‰LÐ*¬C°«IÔ6Ø�N‰N×(Ñ(¨Õ.ä�L‰L˜Ô%Ø×ÑÔ ØŸ™×3Ñ3Ó5ˆIÞØ—
‘
•ð øô% ó 	ÙÜó 	Ø×× C§I¡I´·±Ó$:à•ð —
‘
˜3”Üûð	ús#   ­/C5 Ã5
EÄ	EÄ
1EÅ EÅEc                 ó   • U R                   $ ©N)r   ©r,   s    r   Ú
is_readingÚ_Transport.is_readingv   ó   € Ø×ÑÐr   c                 ó2   • U R                  5         SU l        g ©Néÿÿÿÿ)Úpause_readingr   rA   s    r   r7   Ú_Transport._close_readery   s   € Ø×ÑÔØˆ�r   c                 ó€   • U R                   (       a-  U R                  R                  U R                  5        SU l         g g ©NF)r   r   Úremove_readerr   rA   s    r   rH   Ú_Transport.pause_reading}   s.   € Ø××Ø�J‰J×$Ñ$ T§[¡[Ô1Ø$ˆDÕð r   c                 ó¸   • U R                   (       dI  U R                  S:w  a8  U R                  R                  U R                  U R                  5        SU l         g g g )NrG   T)r   r   r   Ú
add_readerr=   rA   s    r   r+   Ú_Transport.resume_reading‚   sF   € ð ×× D§K¡K°2Ó$5Ø�J‰J×!Ñ! $§+¡+¨t×/?Ñ/?Ô@Ø#ˆDÕð %6Ðr   c                 ó   • g r@   © rA   s    r   Ú_closeÚ_Transport._closeŠ   s   € Ør   c                 óÒ   • SU l         U R                  5         U R                  5         U R                  R	                  U R
                  R                  U5        U R                  5         g ©NT)r   r7   Ú_remove_write_queuer   Ú	call_soonr   Úconnection_lostrS   )r,   r;   s     r   r4   Ú_Transport.abort�   sH   € ØˆŒØ×ÑÔØ× Ñ Ô"Ø�
‰
×Ñ˜TŸ^™^×;Ñ;¸SÔAØ�‰�r   c                 ó   • [         er@   ©ÚNotImplementedErrorrA   s    r   Úcan_write_eofÚ_Transport.can_write_eof”   ó   € Ü!Ð!r   c                 óÌ   • U R                   (       a   eSU l         U R                  c'  [        R                  SU 5        U R	                  5         g [        R                  SU 5        g )NTz%s got EOF.  closing backend.z,%s got EOF.  bytes in queue, deferring close)r   r   r&   r'   Ú_write_eof_nowrA   s    r   Ú	write_eofÚ_Transport.write_eof—   sI   € Ø—9—9Ðˆ}ØˆŒ	Ø�;‰;ÑÜ�L‰LÐ8¸$Ô?Ø×ÑÕ!ä�L‰LÐGÈÕNr   c                 óV   • U R                   c  g[        S U R                    5       5      $ )Nr   c              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr@   )r5   )Ú.0Úblocks     r   Ú	<genexpr>Ú3_Transport.get_write_buffer_size.<locals>.<genexpr>£   s   é € Ð7ª; %”3�u—:�:ª;ùs   ‚)r   ÚsumrA   s    r   Úget_write_buffer_sizeÚ _Transport.get_write_buffer_size    s$   € Ø�;‰;ÑØÜÑ7¨4¯;ª;Ó7Ó7Ð7r   c                 ó   • g)N)r   r   rR   rA   s    r   Úget_write_buffer_limitsÚ"_Transport.get_write_buffer_limits¥   s   € Ør   c                 ó2   • Ub  US:X  d   eUb	  US:X  d   eg g ©Nr   rR   )r,   ÚhighÚlows      r   Úset_write_buffer_limitsÚ"_Transport.set_write_buffer_limits¨   s(   € Ø‰|˜t q›yÐ(Ð(Ø‰{˜c Q›hÐ&Ð&˜hˆ{r   c                 ó   • [         er@   r\   rA   s    r   rb   Ú_Transport._write_eof_now¬   r`   r   c                 ó|  • [         R                  SU 5        U R                  c   e [        R                  " U R
                  U R                  5      n[         R                  SU5        U(       a‰  U R                  R                  5       n[        U5      U:”  a3  [         R                  S5        U R                  R                  X1S  5        O-U[        U5      -  n[         R                  SU5        U(       a  M‰  U R                  (       d~  [         R                  S5        U R                  5         U R                  (       a%  [         R                  S5        U R                  5         U R                  (       a  U R                  5         g g g ! [         a    Sn GNE[         a  nU R                  U5         S nAg S nAff = f)Nz%s _write_readyr   z,  successfully wrote %d bytes from the queuez  incomplete block.  Stop.z&  removed complete block.  %d remains.z%s queue drained.z'%s queue drained.  closing backend now.)r&   r'   r   r(   Úwritevr   r1   r   r4   Úpopleftr5   Ú
appendleftrW   r   rb   r   )r,   Ún_bytesr;   rh   s       r   Ú_write_readyÚ_Transport._write_ready¯   sC  € Ü�‰Ð&¨Ô-Ø�{‰{Ñ&Ð&Ð&ð	Ü—i’i §¡¨d¯k©kÓ:ˆGô 	�‰ÐCÀWÔMæØ—K‘K×'Ñ'Ó)ˆEÜ�5‹z˜GÓ#ä—‘Ð9Ô:Ø—‘×&Ñ& u¨X Ô7ØØ”s˜5“zÑ!ˆGÜ�L‰LÐAÀ7ÔK÷ ˆgð �{�{Ü�L‰LÐ,Ô-Ø×$Ñ$Ô&Ø�y�yÜ—‘ÐFÔGØ×#Ñ#Ô%Ø�}�}Ø—
‘
•ð ð øô% ó 	Ø‹GÜó 	Ø�J‰J�sŒOÜûð	ús   §+F ÆF;Æ	F;Æ F6Æ6F;c                 ó¬   • U R                   bG  U R                  R                  5         U R                  R	                  U R
                  5        S U l         g g r@   )r   r   Úresume_writingr   Úremove_writerr   rA   s    r   rW   Ú_Transport._remove_write_queueÐ   s>   € Ø�;‰;Ñ"Ø�N‰N×)Ñ)Ô+Ø�J‰J×$Ñ$ T§\¡\Ô2ØˆD�Kð #r   r:   c                 ó.  • [         R                  SX R                  5        U R                  b   eU R                  R                  U R                  U R                  5        [        R                  " U45      U l        U R                  R                  5         g )Nz!%s creating write queue for fd %s)r&   r'   r   r   r   Ú
add_writerr~   ÚcollectionsÚdequer   Úpause_writing©r,   r:   s     r   Ú_create_write_queueÚ_Transport._create_write_queueÖ   sg   € Ü�‰Ð8¸$ÇÁÔMØ�{‰{Ñ"Ð"Ð"Ø�
‰
×Ñ˜dŸl™l¨D×,=Ñ,=Ô>Ü!×'Ò'¨¨Ó0ˆŒØ�‰×$Ñ$Õ&r   c                 ó®  • U R                   (       a!  [        R                  SU R                  5        g U R                  (       a   eU R
                  b‰  U R
                  R                  U5        [        U R
                  5      [        :”  aP  SR                  U R
                  5      nU R
                  R                  5         U R
                  R                  U5        g  [        R                  " U R                  U5      nU[        U5      :w  a  U R!                  XS  5        g g ! [         a    Sn N2[         a  nU R                  U5         S nAg S nAff = f)Nz+ignoring write() to closing transport fd %ir   r   )r   r&   r'   r   r   r   Úappendr5   ÚIOV_MAXÚjoinÚclearr(   Úwriter1   r   r4   rŠ   )r,   r:   Úall_datar}   r;   s        r   r‘   Ú_Transport.writeÝ   sþ   € ð �=�=Ü�L‰LÐFÈÏÉÔUØà—9—9Ðˆ}à�;‰;Ñ"Ø�K‰K×Ñ˜tÔ$ô �4—;‘;Ó¤'Ó)ØŸ8™8 D§K¡KÓ0�Ø—‘×!Ñ!Ô#Ø—‘×"Ñ" 8Ô,àð	Ü—h’h˜tŸ|™|¨TÓ2ˆGð ”c˜$“iÓØ×$Ñ$ T¨( ^Õ4ð  øô ó 	ØŠGÜó 	Ø�J‰J�sŒOÜûð	ús   Ã!D" Ä"EÄ0	EÄ9EÅEc                 ó’   • U R                   (       a  g SU l         U R                  5         U R                  b  g U R                  5         g rV   )r   r7   r   r4   rA   s    r   r9   Ú_Transport.closeý   s5   € Ø�=�=ØàˆŒØ×ÑÔà�;‰;Ñ"àà�
‰
�r   c                 ó   • U R                   $ r@   )r   rA   s    r   Úget_protocolÚ_Transport.get_protocol
  s   € Ø�~‰~Ðr   c                 ó   • U R                   $ r@   )r   rA   s    r   Ú
is_closingÚ_Transport.is_closing  s   € Ø�}‰}Ðr   c                 ó   • [         er@   r\   )r,   r   s     r   Úset_protocolÚ_Transport.set_protocol  r`   r   c                 ó$   • U R                  5         g r@   )rS   rA   s    r   Ú__del__Ú_Transport.__del__  s   € Ø�‰�r   )r   r   r   r   r   r   r   r   )rG   rG   N©r
   Nr@   )r;   zException | Noner
   N)r
   ztuple[int, int])NN)rs   ú
int | Nonert   r£   r
   N)(Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   ÚintÚ__annotations__ÚasyncioÚAbstractEventLoopÚProtocolÚboolr   r%   r=   rB   r7   rH   r+   rS   r4   r^   rc   rl   ro   ru   rb   r~   rW   ÚbytesrŠ   r‘   r9   ÚBaseProtocolr—   rš   r�   r    Ú__static_attributes__Ú__classcell__©r-   s   @r   r   r   3   sp  ø‡ Ø +€J�˜‘Ó+ð ×$Ñ$Ó$Ø×ÑÓà-Ó-ØƒKØƒLØƒNØÓØ
ƒJØ€K�Óð
 13Ø59ñ	Ø×0Ñ0ðà"×+Ñ+ðð ðð +.ðð 3÷	ð ô6ð2 ˜Dô  ôô%ô
$ôöð"˜tô "ôOð8 sô 8ô
ö'ô"ôôBð'¨ð '°$ô 'ð5˜%ð 5 Dô 5ô@ð˜g×2Ñ2ô ð˜Dô ð" W×%9Ñ%9ð "¸dô "÷ò r   r   c                   ó"   • \ rS rSrSrSS jrSrg)ÚSubprocessProtocoli  zBAn extension to asyncio.Protocol for use with SubprocessTransport.Nc                 ó   • [         e)z"Called when subprocess has exited.r\   rA   s    r   Úprocess_exitedÚ!SubprocessProtocol.process_exited  s   € ä!Ð!r   rR   r¢   )r¤   r¥   r¦   r§   Ú__doc__r¶   r°   rR   r   r   r´   r´     s
   † ÙL÷"r   r´   c                   ó"   • \ rS rSrS\4S jrSrg)Ú
WindowSizei  Úvaluec                 óH   • [        US5      U l        [        US5      U l        g )NÚrowsÚcols)r   r½   r¾   )r,   r»   s     r   r%   ÚWindowSize.__init__  s   € Ü˜E 6Ó*ˆŒ	Ü˜E 6Ó*ˆ�	r   )r¾   r½   N)r¤   r¥   r¦   r§   r   r%   r°   rR   r   r   rº   rº     s   † ð+˜j÷ +r   rº   c                   ór  ^ • \ rS rSr% SrSrS\S'   SrS\S'   SrS\S'   S	\S
'   SS.S\	S\
4S jjrS(S jrSSS.S\R                  S\S\\
   S\	SSS\4U 4S jjjrS\SS4S jrS\	4S jrS)S jrS\4S jrS*S jrS \S\R4                  4S! jrS"\R:                  SS4S# jrS)S$ jrS)S% jr S)S& jr!S'r"U =r#$ )+ÚSubprocessTransporti$  a½  A bi-directional transport speaking with stdin/out of a subprocess.

Note: this is not really a normal SubprocessTransport.  Although it
implements the entire API of asyncio.SubprocessTransport, it is not
designed to be used with asyncio.SubprocessProtocol objects.  Instead, it
pair with normal Protocol objects which also implement the
SubprocessProtocol defined in this module (which only has a
process_exited() method).  Whatever the protocol writes is sent to stdin,
and whatever comes from stdout is given to the Protocol via the
.data_received() function.

If stderr is configured as a pipe, the transport will separately collect
data from it, making it available via the .get_stderr() method.
Nr£   Ú_pty_fdzsubprocess.Popen[bytes] | NoneÚ_processÚ_returncodezSpooler | NoneÚ_stderrF©ÚresetrÇ   r
   c                ój   • U R                   b&  U R                   R                  US9R                  SS9$ g)NrÆ   Úreplace)ÚerrorsÚ )rÅ   ÚgetÚdecode)r,   rÇ   s     r   Ú
get_stderrÚSubprocessTransport.get_stderr9  s5   € Ø�<‰<Ñ#Ø—<‘<×#Ñ#¨%Ð#Ð0×7Ñ7¸yÐ7ÐIÐIàr   c                 ó  ^ ^^^• SU 4S jjmSUUUU 4S jjnS[         S[         SS 4UUU 4S jjn [        R                  " TR                  5      mT R                  R                  TU5        g ! [        [        4 a�    Sn[        T R                  US 5      nUcF  [        R                  " 5       nUR                  T R                  5        [        T R                  XE5        UR                  TR                  U5         g f = f)	Nr
   c                  óà   >• [        T R                  [        5      (       d   e[        R	                  ST R
                  5        T R                  (       d  T R                  R                  5         g g )NzProcess exited with status %d)Ú
isinstancer   r´   r&   r'   rÄ   r   r¶   rA   s   €r   Ú	flag_exitÚ1SubprocessTransport.watch_exit.<locals>.flag_exit@  sL   ø€ Ü˜dŸn™nÔ.@×AÑAÐAÐAÜ�L‰LÐ8¸$×:JÑ:JÔKØ—=—=Ø—‘×-Ñ-Õ/ð !r   c                  óF  >• [         R                  " TR                  S5      u  pU TR                  :X  d   e [         R                  " U5      Tl        TR                  R                  T5        [         R                  " T5        T" 5         g ! [
         a
    UTl         NLf = frr   )	r(   ÚwaitpidÚpidÚwaitstatus_to_exitcoderÄ   Ú
ValueErrorr   rL   r9   )r×   ÚstatusrÓ   ÚpidfdÚprocessr,   s     €€€€r   Úpidfd_readyÚ3SubprocessTransport.watch_exit.<locals>.pidfd_readyF  s€   ø€ ÜŸ*š* W§[¡[°!Ó4‰KˆCØ˜'Ÿ+™+Ó%Ð%Ð%ð*Ü#%×#<Ò#<¸VÓ#D�Ô ð �J‰J×$Ñ$ UÔ+Ü�HŠH�UŒOÙ�Køô	 ó *Ø#)�Ö ð*ús   ¸B ÂB ÂB r×   Úcodec                 óF   >• TR                   U :X  d   eUTl        T" 5         g r@   )r×   rÄ   )r×   rß   rÓ   rÜ   r,   s     €€€r   Úchild_watch_firedÚ9SubprocessTransport.watch_exit.<locals>.child_watch_firedQ  s"   ø€ Ø—;‘; #Ó%Ð%Ð%Ø#ˆDÔÙ�Kr   Ú!_cockpit_transports_child_watcherr¢   )r¨   r(   Ú
pidfd_openr×   r   rO   ÚAttributeErrorr   Úgetattrrª   ÚSafeChildWatcherÚattach_loopÚsetattrÚadd_child_handler)r,   rÜ   rÝ   rá   ÚquarkÚwatcherrÓ   rÛ   s   ``    @@r   Ú
watch_exitÚSubprocessTransport.watch_exit?  sÒ   û€ ÷	0÷		ò 		ð	¤3ð 	¬cð 	°d÷ 	ñ 	ð	FÜ—M’M '§+¡+Ó.ˆEØ�J‰J×!Ñ! %¨Õ5øÜ¤Ð(ó 		FØ7ˆEÜ˜dŸj™j¨%°Ó6ˆGà‰Ü!×2Ò2Ó4�Ø×#Ñ# D§J¡JÔ/Ü˜Ÿ
™
 EÔ3à×%Ñ% g§k¡kÐ3DÖEð		Fús   ±<A. Á.BC?Ã>C?)ÚptyÚwindowr   r   r	   rï   rð   zWindowSize | NoneÚkwargsc                ó®  >^• SU4S jjnT(       aŠ  [         R                  " 5       u  U l        nUb  U R                  U5        X†S'   [        R
                  " U4XˆUSS.UD6U l        [         R                  " U5        U R                  U R                  p©SU l        O¾[        R
                  " U4[        R                  [        R                  US.UD6U l        U R                  R                  (       d   eU R                  R                  (       d   eU R                  R                  R                  5       n	U R                  R                  R                  5       n
U R                  R                  b3  [        XR                  R                  R                  5       5      U l        OS U l        [         TU ]E  XXš5        U R%                  U R                  5        g )Nc                  óž   >• [        [        [        R                  5        T (       a'  [        R
                  " S[        R                  S5        g g rr   )r   ÚSET_PDEATHSIGÚsignalÚSIGTERMÚfcntlÚioctlÚtermiosÚ	TIOCSCTTY)rï   s   €r   Ú
preexec_fnÚ0SubprocessTransport.__init__.<locals>.preexec_fnt  s/   ø€ Ü”-¤§¡Ô0ÞÜ—’˜Aœw×0Ñ0°!Õ4ð r   ÚstderrT)ÚstdinÚstdoutrû   Ústart_new_session)rþ   rÿ   rû   r¢   )r(   ÚopenptyrÂ   Úset_window_sizeÚ
subprocessÚPopenrÃ   r9   r   ÚPIPErþ   rÿ   Úfilenorý   ÚSpoolerrÅ   r$   r%   rí   )r,   r   r   r	   rï   rð   rñ   rû   Ú
session_fdr    r!   r-   s       `      €r   r%   ÚSubprocessTransport.__init__j  sp  ù€ ÷	5ö
 Ü')§z¢z£|Ñ$ˆDŒL˜*àÑ!Ø×$Ñ$ VÔ,à)�8ÑÜ&×,Ò,¨Tð fØ3=Ø8BÐVZñfà^dñfˆDŒMô �HŠH�ZÔ à ŸL™L¨$¯,©,�6Ø#ˆDÕô '×,Ò,¨Tð N¼¿¹ÔQ[×Q`ÑQ`Ø8BñNØFLñNˆDŒMà—=‘=×&×&Ð&Ð&Ø—=‘=×'×'Ð'Ð'Ø—M‘M×(Ñ(×/Ñ/Ó1ˆEØ—]‘]×(Ñ(×/Ñ/Ó1ˆFà�=‰=×ÑÑ+Ü" 4¯©×)=Ñ)=×)DÑ)DÓ)FÓGˆD�LàˆDŒLä‰Ñ˜¨Ô7Ø�‰˜Ÿ™Õ&r   Úsizec           	      óÖ   • U R                   c   e[        R                  " U R                   [        R                  [
        R                  " SUR                  UR                  5      5        g )NÚ2H4x)	rÂ   r÷   rø   rù   Ú
TIOCSWINSZÚstructÚpackr½   r¾   )r,   r
  s     r   r  Ú#SubprocessTransport.set_window_size˜  sD   € Ø�|‰|Ñ'Ð'Ð'Ü�Š�D—L‘L¤'×"4Ñ"4´f·k²kÀ&È$Ï)É)ÐUY×U^ÑU^Ó6_Õ`r   c                 óP   • U R                   c   eU R                   R                  S L$ r@   )rÃ   rþ   rA   s    r   r^   Ú!SubprocessTransport.can_write_eofœ  s'   € Ø�}‰}Ñ(Ð(Ð(Ø�}‰}×"Ñ"¨$Ð.Ð.r   c                 óª   • U R                   c   eU R                   R                  c   eU R                   R                  R                  5         SU l        g rF   )rÃ   rþ   r9   r   rA   s    r   rb   Ú"SubprocessTransport._write_eof_now   sE   € Ø�}‰}Ñ(Ð(Ð(Ø�}‰}×"Ñ"Ñ.Ð.Ð.Ø�‰×Ñ×!Ñ!Ô#Øˆ�r   c                 óL   • U R                   c   eU R                   R                  $ r@   )rÃ   r×   rA   s    r   Úget_pidÚSubprocessTransport.get_pid¦  s"   € Ø�}‰}Ñ(Ð(Ð(Ø�}‰}× Ñ Ð r   c                 ó   • U R                   $ r@   )rÄ   rA   s    r   Úget_returncodeÚ"SubprocessTransport.get_returncodeª  rD   r   Úfdc                 ó   • [         er@   r\   )r,   r  s     r   Úget_pipe_transportÚ&SubprocessTransport.get_pipe_transport­  r`   r   Úsigc                 ó²  • U R                   c   eU R                  b+  [        R                  SXR                   R                  5        g  [
        R                  " U R                   R                  U5        [        R                  SXR                   R                  5        g ! [         a-    [        R                  SXR                   R                  5         g f = f)Nz3won't attempt %s to process %i.  It exited already.zsent %s to process %iz3can't send %s to process %i.  It's exited just now.)rÃ   rÄ   r&   r'   r×   r(   ÚkillÚProcessLookupError)r,   r  s     r   Úsend_signalÚSubprocessTransport.send_signal°  s£   € Ø�}‰}Ñ(Ð(Ð(ð ×ÑÑ'Ü�L‰LÐNÐPS×UbÑUb×UfÑUfÔgØð	hÜ�GŠG�D—M‘M×%Ñ% sÔ+Ü�L‰LÐ0°#·}±}×7HÑ7HÕIøÜ!ó 	hä�L‰LÐNÐPS×UbÑUb×UfÑUfÖgð	hús   Á	AB Â4CÃCc                 óB   • U R                  [        R                  5        g r@   )r#  rõ   rö   rA   s    r   Ú	terminateÚSubprocessTransport.terminateÈ  ó   € Ø×ÑœŸ™Õ(r   c                 óB   • U R                  [        R                  5        g r@   )r#  rõ   ÚSIGKILLrA   s    r   r!  ÚSubprocessTransport.killË  r(  r   c                 ó¶  • U R                   b'  [        R                  " U R                   5        S U l         U R                  b^  U R                  R                  b5  U R                  R                  R                  5         S U R                  l         U R                  5         g g ! [         a-    [        R                  SU R                  R                  5         g f = f)Nzcan't kill %i due to EPERM)
rÂ   r(   r9   rÃ   rþ   r&  ÚPermissionErrorr&   r'   r×   rA   s    r   rS   ÚSubprocessTransport._closeÎ  s    € Ø�<‰<Ñ#Ü�HŠH�T—\‘\Ô"ØˆDŒLà�=‰=Ñ$Ø�}‰}×"Ñ"Ñ.Ø—‘×#Ñ#×)Ñ)Ô+Ø&*�—‘Ô#ðNØ—‘Õ ð %øô #ó NÜ—‘Ð9¸4¿=¹=×;LÑ;LÖMðNús   ÂB! Â!4CÃC)r   r   rÃ   rÂ   rÄ   rÅ   )rÜ   zsubprocess.Popen[bytes]r
   Nr¢   )r
   r£   )$r¤   r¥   r¦   r§   r¸   rÂ   r©   rÃ   rÄ   r­   ÚstrrÎ   rí   rª   r«   r´   r   r   r%   rº   r  r^   rb   r¨   r  r  Ú	Transportr  rõ   ÚSignalsr#  r&  r!  rS   r°   r±   r²   s   @r   rÁ   rÁ   $  s"  ø‡ ñð !€Gˆ\Ó Ø15€HÐ.Ó5Ø $€K�Ó$ØÓà*/ò  4ð °Cõ ô)Fð` #Ø/3ò,'Ø×0Ñ0ð,'à-ð,'ð   ‘}ð,'ð
 ð,'ð -ð,'ð ÷,'ð ,'ð\a Jð a°4ô að/˜tô /ôð!˜ô !ô ð" Sð "¨W×->Ñ->ô "ðh˜vŸ~™~ð h°$ô hô0)ô)÷Nò Nr   rÁ   c            	       ó„   ^ • \ rS rSrSrSS\R                  S\R                  S\S\4U 4S jjjr	S\
4S	 jrSS
 jrSrU =r$ )ÚStdioTransportiÝ  z°A bi-directional transport that corresponds to stdin/out.

Can talk to just about anything:
    - files
    - pipes
    - character devices (including terminals)
    - sockets
r   r   rþ   rÿ   c                 ó&   >• [         TU ]  XX45        g r@   )r$   r%   )r,   r   r   rþ   rÿ   r-   s        €r   r%   ÚStdioTransport.__init__ç  s   ø€ Ü‰Ñ˜¨Õ7r   r
   c                 ó   • grK   rR   rA   s    r   r^   ÚStdioTransport.can_write_eofê  s   € Ør   c                 ó   • [        S5      e)NzCan't write EOF to stdout)ÚRuntimeErrorrA   s    r   rb   ÚStdioTransport._write_eof_nowí  s   € ÜÐ6Ó7Ð7r   rR   )r   r   r¢   )r¤   r¥   r¦   r§   r¸   rª   r«   r¬   r¨   r%   r­   r^   rb   r°   r±   r²   s   @r   r3  r3  Ý  sR   ø† ññ8˜W×6Ñ6ð 8À'×BRÑBRð 8Ð[^ð 8Ðlo÷ 8ð 8ð˜tô ÷8ò 8r   r3  c                   ó¸   • \ rS rSr% Sr\R                  \S'   \\S'   S\S'   S\R                  S\4S	 jr	SS jr
S
\4S jrSS.S\S
\4S jjrSS jrSS jrSrg)r  iñ  z‚Consumes data from an fd, storing it in a buffer.

This makes a copy of the fd, so you don't have to worry about holding it
open.
r   Ú_fdzlist[bytes]Ú	_contentsr   r  c                 óð   • Xl         SU l        / U l        [        R                  " U5      U l        [        R
                  " U R                  S5        UR                  U R                  U R                  5        g )NrG   F)r   r<  r=  r(   Údupr)   rO   r=   )r,   r   r  s      r   r%   ÚSpooler.__init__ü  sN   € ØŒ
ØˆŒØˆŒä—6’6˜"“:ˆŒä
�Š˜Ÿ™ %Ô(Ø�‰˜Ÿ™ $×"2Ñ"2Õ3r   r
   Nc                 óæ   •  [         R                  " U R                  S5      nUS:w  a  U R
                  R                  U5        g U R                  5         g ! [         a     g [         a    Sn NLf = f)Ni    r   )r(   r0   r<  r1   r   r=  r�   r9   r‰   s     r   r=   ÚSpooler._read_ready  s`   € ð	Ü—7’7˜4Ÿ8™8 TÓ*ˆDð �3‹;Ø�N‰N×!Ñ! $Õ'à�J‰J�Løô ó 	ÙÜó 	àŠDð	ús   ‚!A Á
A0Á"A0Á/A0c                 óx   • U R                   S:X  a  g[        R                  " U R                   // / S5      / / / 4:g  $ )NrG   Fr   )r<  ÚselectrA   s    r   Ú	_is_readyÚSpooler._is_ready  s6   € Ø�8‰8�r‹>ØÜ�}Š}˜dŸh™h˜Z¨¨R°Ó3¸¸BÀ°|ÑCÐCr   FrÆ   rÇ   c                óÐ   • U R                  5       (       a'  U R                  5         U R                  5       (       a  M'  SR                  U R                  5      nU(       a  / U l        U$ )Nr   )rE  r=   r�   r=  )r,   rÇ   Úresults      r   rÌ   ÚSpooler.get  sM   € Ø�n‰n×ÑØ×ÑÔð �n‰n×Óð —‘˜$Ÿ.™.Ó)ˆÞØˆDŒNØˆr   c                 ó¾   • U R                   S:w  aM  U R                  R                  U R                   5        [        R                  " U R                   5        SU l         g g rF   )r<  r   rL   r(   r9   rA   s    r   r9   ÚSpooler.close"  s?   € Ø�8‰8�r‹>Ø�J‰J×$Ñ$ T§X¡XÔ.Ü�HŠH�T—X‘XÔØˆD�Hð r   c                 ó$   • U R                  5         g r@   )r9   rA   s    r   r    ÚSpooler.__del__(  s   € Ø�
‰
�r   )r=  r<  r   r¢   )r¤   r¥   r¦   r§   r¸   rª   r«   r©   r¨   r%   r=   r­   rE  r®   rÌ   r9   r    r°   rR   r   r   r  r  ñ  sn   ‡ ñð ×$Ñ$Ó$Ø	ƒHØÓð4˜W×6Ñ6ð 4¸Cô 4ôðD˜4ô Dð
 $)ò ˜Dð ¨Uõ ô÷r   r  )%r¸   rª   r†   Úctypesr2   r÷   Úloggingr(   rD  rõ   r  r  rù   Útypingr   r   r   Újsonutilr   r   ÚCDLLr   r   r¨   rô   Ú	getLoggerr¤   r&   rŽ   r0  r   r¬   r´   rº   rÁ   r3  r  rR   r   r   Ú<module>rT     sÝ   ðñ$ Rã Û Û Û Û Û Û 	Û Û Û Û Û ß *Ñ *ç )à�KŠK˜Ó×#Ñ#€	ð(�ð (˜ô (ð
 €ð 
×	Ò	˜8Ó	$€Ø
€ôa�×"Ñ"ô aôH"˜×)Ñ)ô "÷+ñ +ôvN˜* g×&AÑ&Aô vNôr8�Zô 8÷(8ò 8r   