+
    VN÷hn ã                   óÚ  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt  ^ RI t ^ RI"t"^ RI"H#t# ^ RI"H$t$ ^ RI"H%t% ^ RI"H&t& ^ R	I"H't' ^ R
I"H(t( ^ RI"H)t) ^ RI"H*t* ^ RI+H,t, ^ RI+H-t- ^ RI+H.t. ^ RI+H/t/ ^ RI+H0t0 ]('       d   ^ RI1H2t2 . RNRNRNRNRNRNRNRNRNRNRNRNRNR NR!NR"NR#NR$NR%NR&NR'NR(NR)NR*NR+NR,NR-NR.NR/NR0NR1NR2NR3NR4NR5NR6NR7NR8NR9NR:NR;NR<NR=NR>NR?NR@NRANRBNRCNRDNRENRFNRGNRHNRINRJNRKNRLNRMNRNNRONRPNRQNRRNRSNRTNRUNRVNRWNRXNRYNRZNR[NR\NR]Nt3R^]Ph                  9   t5R_]
Pl                  9   ;'       g    R`]
Pl                  9   t7]7t8Ra]
Pl                  9   t9Rb]
Pl                  9   t:]Pv                  Rº8„  t<]Pz                  ! 4       P}                  4       R»9   t?]Pz                  ! 4       Rc8H  t@].Rd 4       tA]%'       d   ]A! 4       R¼8„  tB]A! 4       R½8¬  tCMRetBRetC^
tDR¾tER¿tF^tG]8'       d%   ]D^,          tD]G^,          tG]E^,          tE]F^,          tF]
P�                  Rf8X  d   Rg]
P’                  ! 4        Rh2tJMRi]
P’                  ! 4        Rh2tJRjtKRkP™                  RlRm4      tM]Pœ                  ! 4       P}                  4       RÀ9   tO]
P                   P£                  ]
P                   P¥                  ]
P                   P§                  ]T4      RnRn4      4      tU]
Pl                  P­                  Ro]
P                   P¥                  ]URp4      4      tW]
P                   P£                  ]
P                   P§                  ]T4      4      tX]Y! ]"P´                  Rq4      t[]Y! ]"P´                  Rr4      t\]Y! ]"Rs4      t]]Y! ]"P´                  Rt4      t^]Y! ]"P´                  Ru4      t_](;'       d    ])'       * t`]Y! ]"Rv4      ta]Y! ]"P´                  Rw4      tb]Y! ]"P´                  Rx4      tc]Y! ]"P´                  Ry4      td]Y! ]"Rz4      te]Y! ]"R{4      tf]Y! ]"R|4      tg]Y! ]"P´                  R}4      th]%;'       g    ]#;'       d    ]
PÒ                  ! 4       ^ 8g  tj ]e;'       d    ]k! ]"PØ                  ! 4       4      tm ]Y! ]"R~4      ;'       d    ]k! ]"Pæ                  ! 4       4      ttR tu]u! 4       w  tvtw]x! ]
Pò                  R€4      tz]PÞ                  ! ]zPö                  4       ]|! ]"4       U u. uF$  q Pû                  R�4      '       g   K  ]~! ]"V 4      NK&  	  up t]~! ]R‚]€! 4       4      t�]‚! 4       tƒ]‚! 4       t„ ! Rƒ RF4      t…]†]…EP                  nn        ] f$   ]…t ]…]EP                  R„&   ]…EP                  4         ! R… R;]EP                  4      t‹R† tŒ]ŒRÁR‡ l4       t�]ŒRˆ 4       tŽR‰ t�]ŒRŠ 4       t�]ŒR‹ 4       t‘]EP$                  ]G3RŒ lt“RÂR� lt”RŽ t•R� t– ! R� R‘4      t—]—! ]"EP0                  R]GR’R“7      R” 4       t™]—! ]š]†3R]GR’R“7      RÃR• l4       t›]—! ]†] EP                  PÜ                  3R]GR’R“7      R– 4       tœR— t�R˜ tž]EP>                  R™ 4       t Rš t¡RÁR› lt¢RÄRœ lt£ ! R� RA]EPH                  4      t¥] EPL                  EPO                  ]5RžRŸ7       ! R  R@]¥4      4       t¨R¡ t©R¢ tªR£ t« ! R¤ RB4      t¬ ! R¥ RC4      t­]D3R¦ lt®RÁR§ lt¯RÁR¨ lt°RÅR© lt±]]R3Rª lt²]P>                  3R« lt³RÆR¬ lt´R­ tµ]EP>                  R® 4       t¶R¯ t·R° t¸R± t¹R² tºR³ t»R´ t¼Rµ t½]('       d   ]EP>                  RÇR¶ l4       t¾M]EP>                  RÇR· l4       t¾]PÞ                  R¸ 4       t¿]('       d"   ]P"                  ! ]EP$                  R¹ 4       R# R#   ]! d    Rt  ELVi ; i  ]n d9    ]PÞ                  ! ]Pà                  ! ]q]Pä                  ! 4       4      4       Retm EL^i ; i  ]n d9    ]PÞ                  ! ]Pà                  ! ]q]Pä                  ! 4       4      4       Rett ELwi ; iu up i )ÈzTest utilities.N)ÚAF_INET)ÚAF_INET6)ÚSOCK_STREAM)ÚAIX)ÚLINUX)ÚMACOS)ÚNETBSD)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)Úbytes2human)Údebug)Úmemoize)Úprint_color)Úsupports_ipv6)Úwait_pidÚDEVNULLÚGLOBAL_TIMEOUTÚTOLERANCE_SYS_MEMÚ
NO_RETRIESÚPYPYÚ
PYTHON_EXEÚPYTHON_EXE_ENVÚROOT_DIRÚSCRIPTS_DIRÚTESTFN_PREFIXÚUNICODE_SUFFIXÚINVALID_UNICODE_SUFFIXÚ
CI_TESTINGÚVALID_PROC_STATUSESÚTOLERANCE_DISK_USAGEÚIS_64BITÚHAS_CPU_AFFINITYÚHAS_CPU_FREQÚHAS_ENVIRONÚHAS_PROC_IO_COUNTERSÚ
HAS_IONICEÚHAS_MEMORY_MAPSÚHAS_PROC_CPU_NUMÚ
HAS_RLIMITÚHAS_SENSORS_BATTERYÚHAS_BATTERYÚHAS_SENSORS_FANSÚHAS_SENSORS_TEMPERATURESÚHAS_NET_CONNECTIONS_UNIXÚMACOS_11PLUSÚMACOS_12PLUSÚCOVERAGEÚAARCH64ÚPYTEST_PARALLELÚpyrunÚ	terminateÚreap_childrenÚspawn_subprocÚspawn_zombieÚspawn_children_pairÚ
ThreadTaskÚunittestÚskip_on_access_deniedÚskip_on_not_implementedÚretry_on_failureÚTestMemoryLeakÚPsutilTestCaseÚprocess_namespaceÚsystem_namespaceÚprint_sysinfoÚis_win_secure_system_procÚfake_pytestÚchdirÚsafe_rmpathÚcreate_py_exeÚcreate_c_exeÚ
get_testfnÚ
get_winverÚkernel_versionÚ
call_untilÚwait_for_pidÚwait_for_fileÚcheck_net_addressÚfilter_proc_net_connectionsÚget_free_portÚbind_socketÚbind_unix_socketÚtcp_socketpairÚunix_socketpairÚcreate_socketsÚreload_moduleÚimport_module_by_pathÚwarnÚcopyload_shared_libÚis_namedtupleÚ__pypy__ÚGITHUB_ACTIONSÚCIBUILDWHEELÚCOVERAGE_RUNÚPYTEST_XDIST_WORKERÚriscv64c                  ób  € \         P                  ! 4       ^ ,          p \        \        \        V P                  R4      R,          4      4      pVR
8X  d]   \        P                  ! \        P                  RRR.RR/RR	7      p \        \        \        V P                  R4      R,          4      4      pV# )é    Ú.ºNé   Nz-sSú-cz-import platform; print(platform.mac_ver()[0])ÚSYSTEM_VERSION_COMPATÚ0T)ÚenvÚuniversal_newlines)é
   é   )
ÚplatformÚmac_verÚtupleÚmapÚintÚsplitÚ
subprocessÚcheck_outputÚsysÚ
executable)Úversion_strÚversions     Ú7/usr/lib/python3/dist-packages/psutil/tests/__init__.pyÚmacos_versionr}   z   sš   € ä×"Ò"Ó$ QÕ'€KÜ”Cœ˜[×.Ñ.¨sÓ3°BÕ7Ó8Ó9€GØ�(Ôô !×-Ò-ä—‘ØØØ?ð	ð )¨#Ð.Ø#ô	
ˆô œœC ×!2Ñ!2°3Ó!7¸Õ!;Ó<Ó=ˆØ€Nó    FÚjavaz$psutil-Ú-z@psutil-u   -Æ’Å‘Å‘s   fÀ€Úutf8Úsurrogateescapez..ÚPSUTIL_SCRIPTS_DIRÚscriptsÚcpu_affinityÚenvironÚ
getloadavgÚioniceÚmemory_mapsÚnet_io_countersÚcpu_numÚio_countersÚrlimitÚsensors_batteryÚsensors_fansÚsensors_temperaturesÚthreadsÚcpu_freqc                  ó¦  € R  p \         P                  P                  4       p\        \        RR4      p\
        '       d0   \        P                  R8¼  d   Ve   \        P                  VR&   W!3# \        '       d   \        P                  V3# \        '       dà   V ! \        P                  4      ;'       g¬    V ! \         P                  P                  \        P                  4      4      ;'       gq    V ! \        P                  ! RP                  ! \        P                  R,          !  4      4      ;'       g*    V ! \        P                   ! 4       P#                  4       4      pV'       g   \%        R4      hW13# \         P                  P                  \        P                  4      p\         P                  P'                  V4      '       g   Q V4       hW13# )c                 ó®   €  \         P                  ! V R .\         P                  \         P                  R7       V #   \         P                   d     R# i ; i)z-V)ÚstdoutÚstderrN)rv   Ú
check_callÚPIPEÚCalledProcessError)Úexes   &r|   ÚattemptÚ_get_py_exe.<locals>.attemptà   sI   € ð	Ü×!Ò!Ø�d�¤J§O¡O¼J¿O¹Oõð ˆJøô ×,Ñ,ô 	Úð	ús   ‚7; »AÁAÚ_base_executableNÚ__PYVENV_LAUNCHER__zpython{}.{}rg   z"can't find python exe real abspath)é   é   )Úosr†   ÚcopyÚgetattrrx   r   Úversion_infory   r_   r   ÚpathÚrealpathÚshutilÚwhichÚformatÚpsutilÚProcessrš   Ú
ValueErrorÚexists)r›   rl   Úbaserš   s       r|   Ú_get_py_exer¯   ß   sV  € òô �*‰*�/‰/Ó
€Cô ”3Ð*¨DÓ1€Dßƒw”3×#Ñ# vÔ-°$Ò2Bô &)§^¡^ˆÐ!Ñ"ØˆyÐß	‹Ü�~‰~˜sÐ"Ð"ß	‹á”C—N‘NÓ#÷ /ð /Ù”r—w‘w×'Ñ'¬¯©Ó7Ó8÷/ð /áÜ—’˜]×1Ò1´3×3CÑ3CÀBÕ3GÑHÓIó÷/ð /ñ
 ”v—~’~Ó'×+Ñ+Ó-Ó.ð 	÷ ÜÐAÓBÐBØˆxˆä�g‰g×ÑœsŸ~™~Ó.ˆÜ�w‰w�~‰~˜c×"Ò"Ð' CÓ'Ð"Øˆxˆr~   zr+ÚSTATUS_ÚAF_UNIXc                   ó¨   a € ] tR tRt o Rt]R 4       t]R 4       t]RR l4       t]RR l4       t	]RR l4       t
]RR	 l4       t ! R
 R4      tRtV tR# )rF   i  zÙA class that mimics some basic pytest APIs. This is meant for
when unit tests are run in production, where pytest may not be
installed. Still, the user can test psutil installation via:

    $ python3 -m psutil.tests
c                 ó8   € R  p \         P                  ! V 4       R# )c                  ó@   € \         P                  ! R \        ^R7       R# )z<Fake pytest module was used. Test results may be inaccurate.©Ú
stacklevelN©Úwarningsr[   ÚUserWarning© r~   r|   Ú_warn_on_exitÚ0fake_pytest._warn_on_exit.<locals>._warn_on_exit'  s   € Ü�MŠMØNÜØ÷r~   N)ÚatexitÚregister)r»   s    r|   r»   Úfake_pytest._warn_on_exit%  s   € ò	ô 	�Š˜Ö&r~   c                 ó¢   € \         P                  ! 4       P                  \        4      p\         P                  ! ^R7      P                  V4       V# )zrMimics pytest.main(). It has the same effect as running
`python3 -m unittest -v` from the project root directory.
)Ú	verbosity)r<   Ú
TestLoaderÚdiscoverÚHEREÚTextTestRunnerÚrun)ÚargsÚkwÚsuites   *, r|   ÚmainÚfake_pytest.main0  s;   € ô
 ×#Ò#Ó%×.Ñ.¬tÓ4ˆÜ×Ò¨!Ô,×0Ñ0°Ô7Øˆr~   Nc                ó`   a€  ! R R4      o\         P                  RV3R ll4       pV! WR7      # )zMimics `pytest.raises`.c                   ó4   a € ] tR tRt o Rt]R 4       tRtV tR# )Ú)fake_pytest.raises.<locals>.ExceptionInfoi=  Nc                ó   € V P                   # ©N)Ú_exc©Úselfs   &r|   ÚvalueÚ/fake_pytest.raises.<locals>.ExceptionInfo.value@  s   € à—y‘yÐ r~   rº   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rÑ   ÚpropertyrÔ   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r|   ÚExceptionInforÎ   =  s   ø‡ € ØˆDàñ!ó ö!r~   rß   c              3   óü   <"  € S! 4       p Vx € \        V : R 24      h  T  dT   pT'       d;   \        P                  ! T\        T4      4      '       g   RT RT R2p\        T4      hY2n         Rp?R# Rp?ii ; i5i)z not raisedÚ"z" does not match "N)ÚAssertionErrorÚreÚsearchÚstrrÑ   )ÚexcÚmatchÚeinfoÚerrÚmsgrß   s   &&   €r|   ÚcontextÚ#fake_pytest.raises.<locals>.contextD  sz   øé € á!“OˆEð<Ø’ô %¨¡w¨kÐ%:Ó;Ð;øð ô !ß¤§¢¨5´#°c³(×!;Ò!;Ø˜e˜WÐ$6°s°e¸1Ð=�CÜ(¨Ó-Ð-Ø —
’
ûð	!üs+   ƒA<Œ �A<ŸA9¦AA4Á.A<Á4A9Á9A<)rç   rÐ   )Ú
contextlibÚcontextmanager)ræ   rç   rë   rß   s   && @r|   ÚraisesÚfake_pytest.raises9  s4   ø€ ÷	!ñ 	!ô 
×	"Ñ	"ö
	<ó 
#ð
	<ñ �sÔ(Ð(r~   c                ó¢   € V'       d%   \         P                  ! 4       P                  W4      # \         P                  ! 4       P                  V 4      # )zMimics `pytest.warns`.)r<   ÚTestCaseÚassertWarnsRegexÚassertWarns)Úwarningrç   s   &&r|   ÚwarnsÚfake_pytest.warnsS  s;   € ÷ Ü×$Ò$Ó&×7Ñ7¸ÓGÐGÜ× Ò Ó"×.Ñ.¨wÓ7Ð7r~   c                ó.   € \         P                  ! V 4      h)zMimics `unittest.SkipTest`.)r<   ÚSkipTest©Úreasons   &r|   ÚskipÚfake_pytest.skipZ  s   € ô ×Ò Ó'Ð'r~   c                óJ   € \         P                  ! 4       P                  V 4      # )zMimics `pytest.fail`.)r<   rò   Úfailrú   s   &r|   rÿ   Úfake_pytest.fail_  s   € ô × Ò Ó"×'Ñ'¨Ó/Ð/r~   c                   óH   a € ] tR tRt o ]RR l4       t ! R R4      tRtV tR# )Úfake_pytest.markid  c                ó.   € \         P                  ! W4      # )z'Mimics `@pytest.mark.skipif` decorator.)r<   ÚskipIf)Ú	conditionrû   s   &&r|   ÚskipifÚfake_pytest.mark.skipiff  s   € ô —?’? 9Ó5Ð5r~   c                   ó4   a € ] tR tRt o RtRR ltR tRtV tR# )Úfake_pytest.mark.xdist_groupik  z4Mimics `@pytest.mark.xdist_group` decorator (no-op).Nc                ó   € R # rÐ   rº   ©rÓ   Únames   &&r|   Ú__init__Ú%fake_pytest.mark.xdist_group.__init__n  s   € Ùr~   c                ó   € V# rÐ   rº   )rÓ   Úcls_or_meths   &&r|   Ú__call__Ú%fake_pytest.mark.xdist_group.__call__q  s   € Ø"Ð"r~   rº   rÐ   )	rÖ   r×   rØ   rÙ   Ú__doc__r  r  rÛ   rÜ   rÝ   s   @r|   Úxdist_groupr	  k  s   ø‡ € ÙFô÷#ð #r~   r  rº   N©Ú )	rÖ   r×   rØ   rÙ   Ústaticmethodr  r  rÛ   rÜ   rÝ   s   @r|   Úmarkr  d  s!   ø‡ € à	ó	6ó 
ð	6÷	#÷ 	#r~   r  rº   rÐ   r  )rÖ   r×   rØ   rÙ   r  r  r»   rÊ   rï   rö   rü   rÿ   r  rÛ   rÜ   rÝ   s   @r|   rF   rF     sŒ   ø‡ € ñð ñ'ó ð'ð ñó ðð ó)ó ð)ð2 ó8ó ð8ð ó(ó ð(ð ó0ó ð0÷#÷ #r~   Úpytestc                   óZ   a a€ ] tR tRt oRtV 3R ltR tR tR tR t	R t
R	 tR
tVtV ;t# )r;   i…  z6A thread task which does nothing expect staying alive.c                ót   <€ \         SV `  4        R V n        RV n        \        P
                  ! 4       V n        R# )Fçü©ñÒMbP?N)Úsuperr  Ú_runningÚ	_intervalÚ	threadingÚEventÚ_flag)rÓ   Ú	__class__s   &€r|   r  ÚThreadTask.__init__ˆ  s*   ø€ Ü‰ÑÔØˆŒØˆŒÜ—_’_Ó&ˆŽ
r~   c                ón   € V P                   P                  pR V RV P                   R\        V 4      R R2# )Ú<z	 running=z at z#xÚ>)r#  rÖ   r  Úidr  s   & r|   Ú__repr__ÚThreadTask.__repr__Ž  s6   € Ø�~‰~×&Ñ&ˆØ�4�&˜	 $§-¡- °´R¸³X¸b°MÀÐCÐCr~   c                ó&   € V P                  4        V # rÐ   )ÚstartrÒ   s   &r|   Ú	__enter__ÚThreadTask.__enter__’  s   € Ø�
‰
ŒØˆr~   c                ó&   € V P                  4        R # rÐ   )Ústop)rÓ   rÇ   Úkwargss   &*,r|   Ú__exit__ÚThreadTask.__exit__–  s   € Ø�	‰	Žr~   c                ó²   € V P                   '       d   \        R4      h\        P                  P	                  V 4       V P
                  P                  4        R# )zoStart thread and keep it running until an explicit
stop() request. Polls for shutdown every 'timeout' seconds.
zalready startedN)r  r¬   r   ÚThreadr,  r"  ÚwaitrÒ   s   &r|   r,  ÚThreadTask.start™  s;   € ð �=�=ˆ=ÜÐ.Ó/Ð/Ü×Ñ×Ñ˜tÔ$Ø�
‰
�‰Ör~   c                ó°   € R V n         V P                  P                  4        V P                   '       d#   \        P                  ! V P
                  4       K4  R# )TN)r  r"  ÚsetÚtimeÚsleepr  rÒ   s   &r|   rÆ   ÚThreadTask.run¢  s5   € ØˆŒØ�
‰
�‰ÔØ�m�mˆmÜ�JŠJ�t—~‘~Ö&ñ r~   c                ón   € V P                   '       g   \        R4      hRV n         V P                  4        R# )z8Stop thread execution and and waits until it is stopped.zalready stoppedFN)r  r¬   ÚjoinrÒ   s   &r|   r0  ÚThreadTask.stop¨  s'   € à�}�}ˆ}ÜÐ.Ó/Ð/ØˆŒØ�	‰	Žr~   )r"  r  r  )rÖ   r×   rØ   rÙ   r  r  r)  r-  r2  r,  rÆ   r0  rÛ   rÜ   Ú__classcell__)r#  rÞ   s   @@r|   r;   r;   …  s1   ù‡ € Ù@õ'òDòòòò'÷ò r~   c                 óF   a € \         P                  ! S 4      V 3R  l4       pV# )c                  óJ   <€  S! V / VB #   \          d    \        4        h i ; irÐ   )Ú	Exceptionr7   )rÇ   r1  Úfuns   *,€r|   ÚwrapperÚ&_reap_children_on_err.<locals>.wrapper¶  s/   ø€ ð	Ù˜Ð' Ñ'Ð'øÜô 	ÜŒOØð	ús   ƒ ‹"©Ú	functoolsÚwraps)rD  rE  s   f r|   Ú_reap_children_on_errrJ  µ  s%   ø€ Ü‡_‚_�SÓôó ðð €Nr~   c                óÀ  € VP                  R\        4       VP                  R\        4       VP                  R\        P                  ! 4       4       VP                  R\        4       \
        '       d   RpVP                  RV4       V f‚   \        \        P                  ! 4       R7      p \        V4       RV R	2p\        R
V.p \        P                  ! V 3/ VB p\        P                  V4       \        VRRR7       \        V4       V# \        P                  ! V 3/ VB p\        P                  V4       \        VP                  4       V#   \        T4       i ; i)ac  Create a python subprocess which does nothing for some secs and
return it as a subprocess.Popen instance.
If "cmd" is specified that is used instead of python.
By default stdin and stdout are redirected to /dev/null.
It also attempts to make sure the process is in a reasonably
initialized state.
The process is registered for cleanup on reap_children().
Ústdinr•   Úcwdrl   é   Úcreationflags©Údirzimport time;open(r'z6', 'w').close();[time.sleep(0.1) for x in range(100)];ri   T©ÚdeleteÚempty)Ú
setdefaultr   r¡   Úgetcwdr   r   rK   rH   r   rv   ÚPopenÚ_subprocesses_startedÚaddrP   rO   Úpid)ÚcmdÚkwdsÚCREATE_NO_WINDOWÚtestfnÚpylineÚsprocs   &,    r|   r8   r8   Á  s'  € ð 	‡O�O�GœWÔ%Ø‡O�O�HœgÔ&Ø‡O�O�Eœ2Ÿ9š9›;Ô'Ø‡O�O�Eœ>Ô*ßƒwð %ÐØ�‰˜Ð)9Ô:Ø
‚{Ü¤§	¢	£Ô,ˆð	 Ü˜ÔðØ ˜ð "9ð9ð ô
 ˜t VÐ,ˆCÜ×$Ò$ SÑ1¨DÑ1ˆEÜ!×%Ñ% eÔ,Ü˜&¨°TÕ:ä˜Ôð
 €Lô × Ò  Ñ-¨Ñ-ˆÜ×!Ñ! %Ô(Ü�U—Y‘YÔØ€Løô ˜Õús   Â,AE ÅEc                 óT  € Rp \        \        P                  ! 4       R7      p \        P                  ! R\        P
                  P                  V4       R\         R24      p\        '       d   \        V^ R7      w  r0M\        V4      w  r0\        P                  ! VP                  4      p\        \        VRRR	7      4      p\        P!                  V4       \        P                  ! V4      pWF3\#        V4       V e   \#        V 4       # #   \#        T4       T e   \#        T 4       i i ; i)
zóCreate a subprocess which creates another one as in:
A (us) -> B (child) -> C (grandchild).
Return a (child, grandchild) tuple.
The 2 processes are fully initialized and will live for 60 secs
and are registered for cleanup on reap_children().
NrP  zl            import subprocess, os, sys, time
            s = "import os, time;"
            s += "f = open('z¸', 'w');"
            s += "f.write(str(os.getpid()));"
            s += "f.close();"
            s += "[time.sleep(0.1) for x in range(100 * 6)];"
            p = subprocess.Popen([r'z.', '-c', s])
            p.wait()
            )rO  TFrR  )rK   r¡   rV  ÚtextwrapÚdedentr¥   Úbasenamer   r   r5   rª   r«   rZ  rt   rP   Ú_pids_startedrY  rH   )Útfiler^  ÚsÚsubpÚchildÚgrandchild_pidÚ
grandchilds          r|   r:   r:   ë  s  € ð €EÜœBŸIšI›KÔ(€FðÜ�OŠOð !ô  ŸW™W×-Ñ-¨fÓ5Ð6ð 7%ô &0 Lð 1ð	ó 	ˆ÷ ‹7Ü °Ô3‰KˆD�%ä ›(‰KˆDÜ—’˜tŸx™xÓ(ˆÜœ]¨6¸$ÀeÔLÓMˆÜ×Ñ˜.Ô)Ü—^’^ NÓ3ˆ
ØÐ"ä�FÔØÒÜ˜Õð øô 	�FÔØÒÜ˜Õð ús   £CD
 Ä
D'c                 ó
  a€ \         P                  '       g   Q h\        4       p \        P                  ! RV  R24      pRp\        V 4      p VP                  \        4       \        V4      w  rBVP                  4       w  rV \        P                  ! VP                  4       .. . \        4       \        VP                  R4      4      p\        P                  V4       \         P                   ! V4      o\#        V3R l4       VS3VP%                  4        VP%                  4        \'        V 4       Ve   \'        V4       # #   TP%                  4        i ; i  TP%                  4        \'        T 4       Te   \'        T4       i i ; i)z¥Create a zombie process and return a (parent, zombie) process tuple.
In order to kill the zombie parent must be terminate()d first, then
zombie must be wait()ed on.
a          import os, sys, time, socket, contextlib
        child_pid = os.fork()
        if child_pid > 0:
            time.sleep(3000)
        else:
            # this is the zombie process
            with socket.socket(socket.AF_UNIX) as s:
                s.connect('za')
                pid = bytes(str(os.getpid()), 'ascii')
                s.sendall(pid)
        Né   c                  óF   <€ S P                  4       \        P                  8H  # rÐ   )Ústatusrª   ÚSTATUS_ZOMBIE)Úzombies   €r|   Ú<lambda>Úspawn_zombie.<locals>.<lambda>0  s   ø€ ˜vŸ}™}›´&×2FÑ2FÒFr~   )rª   r
   rK   rb  rc  rU   Ú
settimeoutr   r5   ÚacceptÚselectÚfilenort   Úrecvre  rY  r«   rN   ÚcloserH   )	Ú	unix_fileÚsrcrf  ÚsockÚparentÚconnÚ_Úzpidrq  s	           @r|   r9   r9     s5  ø€ ô
 �<�<ˆ<Ðˆ<Ü“€IÜ
�/Š/ð ð &˜;ð '	ðó €Cð €EÜ˜IÓ&€DðØ�‰œÔ'Ü˜c›
‰ˆØ—+‘+“-‰ˆð	Ü�MŠM˜4Ÿ;™;›=˜/¨2¨r´>ÔBÜ�t—y‘y “Ó'ˆDÜ×Ñ˜dÔ#Ü—^’^ DÓ)ˆFÜÔFÔGØ˜FÐ#à�J‰JŒLà�
‰
ŒÜ�IÔØÒÜ˜Õð øð	 �J‰J�Lûà�
‰
ŒÜ�IÔØÒÜ˜Õð ús%   Á4E ÂBE  ÄE Å EÅE Å-Fc                ó€  € VP                  RR4       VP                  RR4       \        4       p \        VR4      ;_uu_ 4       pVP                  V 4       RRR4       \	        \
        XP                  .3/ VB p\        VP                  4       WB3#   + '       g   i     LD; i  \         d    \        T4       h i ; i)z‘Run python 'src' code string in a separate interpreter.
Returns a subprocess.Popen instance and the test file where the source
code was written.
r•   Nr–   Úw)rU  rK   ÚopenÚwriter8   r   r  rO   rZ  rC  rH   )r{  r\  ÚsrcfileÚfrh  s   &,   r|   r5   r5   ;  s›   € ð 	‡O�O�H˜dÔ#Ø‡O�O�H˜dÔ#Ü‹l€GðÜ�'˜3×Ô 1Ø�G‰G�CŒL÷  äœj¨!¯&©&Ð1Ñ:°TÑ:ˆÜ�T—X‘XÔØˆÐ÷	  ×ûô
 ô Ü�GÔØðús#   °B% ÁBÁ;B% ÂB"	ÂB% Â%B=c                óp  € \         '       d   RM^ pVP                  R\        P                  4       VP                  R\        P                  4       VP                  RR4       VP                  RV4       \	        V \
        4      '       d   \        P                  ! V 4      p \        P                  ! V 3/ VB p\        P                  V4       VP                  \        R7      w  rEVP                  ^ 8w  d   \        WE,           4      hV'       d   \        V4       VP!                  R4      '       d   VR	R
 pV# )zMRun cmd in a subprocess and return its output.
raises RuntimeError on error.
rN  r•   r–   rm   TrO  ©ÚtimeoutÚ
Néÿÿÿÿ)r   rU  rv   r˜   Ú
isinstancerå   Úshlexru   rW  rX  rY  Úcommunicater   Ú
returncodeÚRuntimeErrorr[   Úendswith)r[  r\  ÚflagsÚpr•   r–   s   &,    r|   Úshr”  O  sâ   € ÷ !›‰I a€EØ‡O�O�HœjŸo™oÔ.Ø‡O�O�HœjŸo™oÔ.Ø‡O�OÐ(¨$Ô/Ø‡O�O�O UÔ+Ü�#”s×ÒÜ�kŠk˜#ÓˆÜ×Ò˜Ñ% Ñ%€AÜ×Ñ˜aÔ Ø—]‘]¬>�]Ó:�N€FØ‡|�|�qÔÜ˜6�?Ó+Ð+ßÜˆVŒØ‡��t×ÒØ˜˜�ˆØ€Mr~   c                ój  aaa	a
€ R o
R oVVV
3R lpVVV
3R lo	V	3R lpR pT p \        V\        4      '       dˆ   V! Wb4      \        V\        P                  \        P                  34      '       d	   V! V4       \        V\        4      '       d   TMVP
                  p\        P                  ! V4      '       d   Q V4       h# \        V\        P                  \        P                  34      '       dˆ   S	! Wb4      \        V\        P                  \        P                  34      '       d	   V! V4       \        V\        4      '       d   TMVP
                  p\        P                  ! V4      '       d   Q V4       h# \        V\        P                  4      '       dˆ   V! Wb4      \        V\        P                  \        P                  34      '       d	   V! V4       \        V\        4      '       d   TMVP
                  p\        P                  ! V4      '       d   Q V4       h# \        RV: 24      h  \        T\        P                  \        P                  34      '       d	   T! T4       \        T\        4      '       d   TMTP
                  p\        P                  ! T4      '       d   Q T4       hi ; i)ax  Terminate a process and wait() for it.
Process can be a PID or an instance of psutil.Process(),
subprocess.Popen() or psutil.Popen().
If it's a subprocess.Popen() or psutil.Popen() instance also closes
its stdin / stdout / stderr fds.
PID is wait()ed even if the process is already gone (kills zombies).
Does nothing if the process does not exist.
Return process exit status.
c                 ó  € V P                  V4       \        '       dS   \        V \        P                  4      '       d1    \
        P                  ! V P                  4      P                  V4      # R # R #   \
        P                   d     R # i ; irÐ   )	r6  r   rŒ  rv   rW  rª   r«   rZ  ÚNoSuchProcess)Úprocr‰  s   &&r|   r6  Úterminate.<locals>.waits  si   € Ø�	‰	�'Ôß‹7”z $¬
×(8Ñ(8×9Ò9ðÜ—~’~ d§h¡hÓ/×4Ñ4°WÓ=Ð=ñ :‰7øô ×'Ñ'ô Úðús   ¿.A2 Á2BÂ
Bc                 óø   € \         '       d   \        '       d   \        P                  p\        '       d5   V\        P                  8w  d    V P                  \        P                  4       V P                  V4       R # rÐ   )r   r_   ÚsignalÚSIGKILLr
   Úsend_signalÚSIGCONT)r˜  Úsigs   &&r|   ÚsendsigÚterminate.<locals>.sendsig|  sF   € ç‹5—^“^Ü—.‘.ˆC÷ ‹5�SœFŸN™NÔ*Ø×ÑœVŸ^™^Ô,Ø×Ñ˜Ör~   c                 ó¤   <€  S! V S4       S! Y4      #   \          d     L\         d%   p\        '       d   TP                  ^8X  d    h Rp?ii ; i)é   N)ÚProcessLookupErrorÚOSErrorr   Úwinerror)r˜  r‰  ré   r   rŸ  r6  s   && €€€r|   Úterm_subprocess_procÚ'terminate.<locals>.term_subprocess_proc†  sR   ø€ ð	Ù�D˜#Ôñ �DÓ"Ð"øô "ô 	ÙÜô 	ß‹w˜3Ÿ<™<¨1Ô,ØØûð	ús   ƒ	 ”A¡AªA«A
Á
Ac                 ó^   <€  S! V S4       S! W4      #   \         P                   d     Li ; irÐ   )rª   r—  )r˜  r‰  r   rŸ  r6  s   &&€€€r|   Úterm_psutil_procÚ#terminate.<locals>.term_psutil_proc‘  s9   ø€ ð	Ù�D˜#Ôñ �DÓ"Ð"øô ×#Ñ#ô 	Ùð	ús   ƒ	 ”,«,c                 ó¬   <€  \         P                  ! V 4      pS! W!4      #   \         P                   d    \        '       d   \	        Y4      u #  R # i ; irÐ   )rª   r«   r—  r
   r   )rZ  r‰  r˜  rª  s   && €r|   Úterm_pidÚterminate.<locals>.term_pid˜  sO   ø€ ð	3Ü—>’> #Ó&ˆDñ $ DÓ2Ð2øô ×#Ñ#ô 	.ç‹uÜ Ó-Ò-ò ð	.ús   ƒ! ¡ AÁAÁAc                 ó  € V P                   '       d   V P                   P                  4        V P                  '       d   V P                  P                  4        V P                  '       d   V P                  P                  4        R # R # rÐ   )r•   ry  r–   rL  )r˜  s   &r|   Úflush_popenÚterminate.<locals>.flush_popen¢  sR   € Ø�;�;ˆ;Ø�K‰K×ÑÔØ�;�;ˆ;Ø�K‰K×ÑÔà�:�:ˆ:Ø�J‰J×ÑÖñ r~   zwrong type )	rŒ  rt   rv   rW  rª   rZ  Ú
pid_existsr«   Ú	TypeError)Úproc_or_pidrŸ  Úwait_timeoutr§  r­  r°  r“  rZ  r   rª  r6  s   &f&     @@@r|   r6   r6   h  s  û€ òò÷	#÷#õ3òð 	€Að/Ü�aœ×ÒÙ˜AÓ,ô �aœ*×*Ñ*¬F¯L©LÐ9×:Ò:Ù˜ŒNÜ˜a¤×%Ò%‰a¨1¯5©5ˆÜ×$Ò$ S×)Ò)Ð.¨3Ó.Ð)Ð)ô ˜œFŸN™N¬F¯L©LÐ9×:Ò:Ù# AÓ4ô �aœ*×*Ñ*¬F¯L©LÐ9×:Ò:Ù˜ŒNÜ˜a¤×%Ò%‰a¨1¯5©5ˆÜ×$Ò$ S×)Ò)Ð.¨3Ó.Ð)Ð)ô ˜œ:×+Ñ+×,Ò,Ù'¨Ó8ô �aœ*×*Ñ*¬F¯L©LÐ9×:Ò:Ù˜ŒNÜ˜a¤×%Ò%‰a¨1¯5©5ˆÜ×$Ò$ S×)Ò)Ð.¨3Ó.Ð)Ð)ô ˜k¨!©Ð/Ó0Ð0øä�aœ*×*Ñ*¬F¯L©LÐ9×:Ò:Ù˜ŒNÜ˜a¤×%Ò%‰a¨1¯5©5ˆÜ×$Ò$ S×)Ò)Ð.¨3Ó.Ð)Ð)ús)   §H1 ½H1 Ã7H1 Å;'H1 È"H1 È1A8J2Ê*J2c                óè  € \         P                  ! 4       P                  V R7      p\        '       d"   \        P	                  4       p\        V4       K-  \        '       d"   \        P	                  4       p\        V4       K-  V'       dk   V F  p\        VRR7       K  	  \         P                  ! V\        R7      w  rVV F.  p\        RV: R24       \        V\        P                  R7       K0  	  R# R# )a  Terminate and wait() any subprocess started by this test suite
and any children currently running, ensuring that no processes stick
around to hog resources.
If recursive is True it also tries to terminate and wait()
all grandchildren started by this process.
©Ú	recursiveN)rµ  rˆ  zcouldn't terminate process z; attempting kill())rŸ  )rª   r«   ÚchildrenrX  Úpopr6   re  Ú
wait_procsr   r[   r›  rœ  )r¸  r¹  rh  rZ  r“  r  Úalives   &      r|   r7   r7   ¼  s´   € ô �~Š~Ó×(Ñ(°9Ð(Ó=€H÷  Ó
Ü$×(Ñ(Ó*ˆÜ�$Ž÷ ‹-Ü×ÑÓ!ˆÜ�#Ž÷ ÛˆAÜ�a d×+ñ ä×$Ò$ X´~ÔF‰ˆÛˆAÜÐ.¨q©eÐ3FÐGÔHÜ�aœVŸ^™^×,ó ñ	 r~   c                 óØ  € \         '       g   \        R4      hRp \        P                  ! 4       ^,          pV F*  pVP	                  4       '       g   VR8X  d   W,          p K*   M	  V '       g   \        RV: 24      h^ p^ pV P                  R4      p\        V^ ,          4      p\        V4      ^8¼  d   \        V^,          4      p\        V4      ^8¼  d   \        V^,          4      pWcV3# )z"Return a tuple such as (2, 6, 36).z	not POSIXr  rf   zcan't parse )	r
   ÚNotImplementedErrorr¡   ÚunameÚisdigitr¬   ru   rt   Úlen)rg  r¿  ÚcÚminorÚmicroÚnumsÚmajors          r|   rM   rM   á  sÁ   € ç‹5Ü! +Ó.Ð.Ø
€AÜ�HŠH‹J�q�M€EÛˆØ�9‰9�;Š;˜!˜sœ(Ø�FŠAáñ	 ÷
 Ü˜<¨¡yÐ1Ó2Ð2Ø€EØ€EØ�7‰7�3‹<€DÜ��Q•‹L€EÜ
ˆ4ƒy�A„~Ü�D˜•G“ˆÜ
ˆ4ƒy�A„~Ü�D˜•G“ˆØ˜%Ð Ð r~   c                  ó¬   € \         '       g   \        R 4      h\        P                  ! 4       p V P                  ;'       g    ^ pV ^ ,          V ^,          V3# )znot WINDOWS)r   r¾  rx   ÚgetwindowsversionÚservice_pack_major)ÚwvÚsps     r|   rL   rL   ù  sH   € ß‹7Ü! -Ó0Ð0Ü	×	Ò	Ó	 €BØ	×	Ñ	×	#Ð	# !€BØˆq�E�2�a•5˜"ÐÐr~   c                   óJ   a € ] tR tRt o Rt]RRRR3R ltR tR tR t	R	t
V tR# )
Úretryi  zA retry decorator.Nr  c                óx   € V'       d   V'       d   \        R 4      hWn        W n        W0n        W@n        WPn        R# )z/timeout and retries args are mutually exclusiveN)r¬   Ú	exceptionr‰  ÚretriesÚintervalÚlogfun)rÓ   rÏ  r‰  rÐ  rÑ  rÒ  s   &&&&&&r|   r  Úretry.__init__	  s.   € ÷ —wÜÐNÓOÐOØ"ŒØŒØŒØ ŒØŽr~   c              #  ó4  "  € V P                   '       dI   \        P                  ! 4       V P                   ,           p\        P                  ! 4       V8  d   R x € K   R # V P                  '       d#   \        V P                  4       F  pR x € K	  	  R #  R x € K  5irÐ   )r‰  r:  rÐ  Úrange)rÓ   Ústop_atr  s   &  r|   Ú__iter__Úretry.__iter__  s_   é € Ø�<�<ˆ<Ü—i’i“k D§L¡LÕ0ˆGÜ—)’)“+ Ô'Ýñ (à�\�\ˆ\Ü˜4Ÿ<™<Ö(�Ýó )ð Ýùs   ‚A,BÁ/)Bc                óf   € V P                   e#   \        P                  ! V P                   4       R # R # rÐ   )rÑ  r:  r;  rÒ   s   &r|   r;  Úretry.sleep%  s!   € Ø�=‰=Ò$Ü�JŠJ�t—}‘}Ö%ñ %r~   c                óX   a a€ \         P                  ! S4      VV 3R  l4       pS Vn        V# )c                  óÐ   <€ R pS F  p S! V / VB u # 	  Vh  SP                    d=   pTpSP                  e   SP                  T4       SP                  4         R p?KZ  R p?ii ; irÐ   )rÏ  rÒ  r;  )rÇ   r1  ræ   r  rD  rÓ   s   *,  €€r|   rE  Úretry.__call__.<locals>.wrapper*  sk   ø€ àˆCÛ�ðÙ Ð/¨Ñ/Ò/ñ ð ˆIøð —~‘~ô Ø�CØ—{‘{Ò.ØŸ™ CÔ(Ø—J‘J”LÝûðús   Š˜A%©1A Á A%)rH  rI  Ú	decorator)rÓ   rD  rE  s   ff r|   r  Úretry.__call__)  s-   ù€ Ü	�Š˜Ó	õ	ó 
ð	ð  !ˆÔØˆr~   )rÏ  rÑ  rÒ  rÐ  r‰  )rÖ   r×   rØ   rÙ   r  rC  r  r×  r;  r  rÛ   rÜ   rÝ   s   @r|   rÍ  rÍ    s2   ø‡ € Ùð ØØØØôò 
ò&÷ð r~   rÍ  r  )rÏ  rÒ  r‰  rÑ  c                ó’   € V \         P                  ! 4       9  d   \         P                  ! V 4      h\         P                  ! V 4       R# )z|Wait for pid to show up in the process list then return.
Used in the test suite to give time the sub process to initialize.
N)rª   Úpidsr—  r«   )rZ  s   &r|   rO   rO   ?  s/   € ð ”&—+’+“-ÔÜ×"Ò" 3Ó'Ð'Ü
‡N‚N�3Ör~   c                óÐ   € \        V R4      ;_uu_ 4       pVP                  4       pRRR4       V'       g   X'       g   Q hV'       d   \        V 4       X#   + '       g   i     L7; i)z8Wait for a file to be written on disk with some content.ÚrbN)rƒ  ÚreadrH   )ÚfnamerS  rT  r†  Údatas   &&&  r|   rP   rP   N  sF   € ô 
ˆe�T×	Ô	˜aØ�v‰v‹xˆ÷ 
çßˆˆtßÜ�EÔØ€K÷ 
×	ús   •AÁA%	c                ó(   € V ! 4       pV'       g   Q hV# )z1Keep calling function until it evaluates to True.rº   )rD  Úrets   & r|   rN   rN   _  s   € ñ ‹%€Cß€Jˆ3Ø€Jr~   c                óz  € R p \         P                  ! V 4      p\        P                  ! VP                  4      '       d'   \        P
                  ! \        P                  V 4      pM%\        P
                  ! \         P                  V 4      p\        '       d
   V! 4        R# V! V4       R#   \         d     R# i ; i)z?Convenience function for removing temporary test files or dirs.c                 ó"  € \         P                   ! 4       \        ,           p\         P                   ! 4       V8  d	    V ! 4       # Xh  \         d     M'\         d   pTp\	        R T 24        Rp?MRp?ii ; i\         P
                  ! R4       Kp  )z	ignoring Ng{®Gáz„?)r:  r   ÚFileNotFoundErrorr¥  r[   r;  )rD  rÖ  r  ré   s   &   r|   Ú	retry_funÚsafe_rmpath.<locals>.retry_funt  sw   € ô
 —)’)“+¤Õ.ˆÜ�iŠi‹k˜GÔ#ð(Ù“u�ð ˆ	øô %ô ÙÜô (Ø�Ü�y  Ð&×'Ñ'ûð(úô �JŠJ�tÖs#   ¼A ÁA6ÁA6ÁA6ÁA1Á1A6N)r¡   ÚstatÚS_ISDIRÚst_moderH  Úpartialr§   ÚrmtreeÚremover
   rë  )r¥   rì  ÚstrD  s   &   r|   rH   rH   q  s{   € òð"Ü�WŠW�T‹]ˆÜ�<Š<˜Ÿ
™
×#Ò#Ü×#Ò#¤F§M¡M°4Ó8‰Cä×#Ò#¤B§I¡I¨tÓ4ˆCß‹5ÙŽEá�cŽNøÜô Úðús$   …;B+ ÁAB+ ÂB+ Â!B+ Â+B:Â9B:c                óX   €  \         P                  ! V 4       R#   \         d     R# i ; i)z.Convenience function for creating a directory.N)r¡   ÚmkdirÚFileExistsErrorrP  s   &r|   Ú
safe_mkdirrø  “  s$   € ðÜ
�Š�ŽøÜô Úðús   ‚ š)¨)c              #  óÐ   "  € \         P                  ! 4       p \         P                  ! V 4       Rx € \         P                  ! V4       R#   \         P                  ! T4       i ; i5i)z@Context manager which temporarily changes the current directory.N)r¡   rV  rG   )ÚdirnameÚcurdirs   & r|   rG   rG   ›  s>   é € ô �YŠY‹[€FðÜ
�Š�ÔÛä
�Š�ÖøŒ�Š�Õüs   ‚A&™A ³A&ÁA#Á#A&c                óx  € \         P                  P                  V 4      '       d   Q V 4       h\        P                  ! \
        V 4       \        P                  ! \        V 4       \        '       dL   \         P                  ! V 4      p\         P                  ! WP                  \        P                  ,          4       V # )z6Create a Python executable file in the given location.)r¡   r¥   r­   r½   r¾   rH   r§   Úcopyfiler   r
   rî  Úchmodrð  ÚS_IEXEC)r¥   rô  s   & r|   rI   rI   ¦  sl   € ä�w‰w�~‰~˜d×#Ò#Ð) TÓ)Ð#Ü
‡O‚O”K Ô&Ü
‡O‚O”J Ô%ßƒuÜ�WŠW�T‹]ˆÜ
�Š�—z‘z¤D§L¡LÕ0Ô1Ø€Kr~   c                ó¦  € \         P                  P                  V 4      '       d   Q V 4       h\        P                  ! R4      '       g   \
        P                  ! R4      hVf   \        P                  ! R4      pM\        V\        4      '       g   Q V4       h\        P                  ! \        V 4       \        \        RR7      R4      ;_uu_ 4       pVP!                  V4       RRR4        \"        P$                  ! RXP&                  RV .4       \        VP&                  4       V #   + '       g   i     LL; i  \        XP&                  4       i ; i)	z5Create a compiled C executable in the given location.Úgcczgcc is not installedNz‡
            #include <unistd.h>
            int main() {
                pause();
                return 1;
            }
            z.c©Úsuffixr‚  z-o)r¡   r¥   r­   r§   r¨   r  rü   rb  rc  rŒ  rå   r½   r¾   rH   rƒ  rK   r„  rv   r—   r  )r¥   Úc_coder†  s   && r|   rJ   rJ   ±  sì   € ä�w‰w�~‰~˜d×#Ò#Ð) TÓ)Ð#Ü�<Š<˜×ÒÜ�kŠkÐ0Ó1Ð1Ø‚~Ü—’ð "ó ‰ô ˜&¤#×&Ò&Ð.¨Ó.Ð&ä
‡O‚O”K Ô&Ü	Œj Ô% s×	+Ô	+¨qØ	�‰�Œ÷ 
,ðÜ×Ò˜u a§f¡f¨d°DÐ9Ô:ä�A—F‘FÔØ€K÷ 
,×	+ûô
 	�A—F‘FÕús   ÃD&Ã+$D9 Ä&D6	Ä9Ec                ó  €  \         P                  ! \        WR7      p\        P                  P                  V4      '       d   KD  \        P                  P                  V4      p\        P                  ! \        V4       V# )zÞReturn an absolute pathname of a file or dir that did not
exist at the time this call is made. Also schedule it for safe
deletion at interpreter exit. It's technically racy but probably
not really due to the time variant.
)Úprefixr  rQ  )
ÚtempfileÚmktempr   r¡   r¥   r­   r¦   r½   r¾   rH   )r  rQ  r  r¥   s   &&  r|   rK   rK   Ë  sQ   € ð Ü�Š¤m¸FÔLˆÜ�w‰w�~‰~˜d×#Ô#Ü—7‘7×#Ñ# DÓ)ˆDÜ�OŠOœK¨Ô.ØˆKr~   c                   ój   a € ] tR tRt o RtR tRR ltR tR tR t	R	 t
R
 tR tR tR tR tRtV tR# )rA   iÞ  z’Test class providing auto-cleanup wrappers on top of process
test utilities. All test classes should derive from this one, even
if we use pytest.
c                óÐ   € V P                   P                  pVP                  R 4      '       g
   RV,           pRP                  VV P                   P                  V P
                  4      # )zpsutil.zpsutil.tests.z{}.{}.{})r#  r×   Ú
startswithr©   rÖ   Ú_testMethodName)rÓ   Úfqmods   & r|   Ú__str__ÚPsutilTestCase.__str__ç  sX   € Ø—‘×)Ñ)ˆØ×Ñ 	×*Ò*Ø# eÕ+ˆEØ× Ñ ØØ�N‰N×#Ñ#Ø× Ñ ó
ð 	
r~   Nc                óJ   € \        WR 7      pV P                  \        V4       V# ))r  rQ  )rK   Ú
addCleanuprH   )rÓ   r  rQ  rå  s   &&& r|   rK   ÚPsutilTestCase.get_testfnñ  s   € Ü &Ô2ˆØ�‰œ UÔ+Øˆr~   c                óH   € \        V/ VB pV P                  \        V4       V# rÐ   )r8   r  r6   )rÓ   rÇ   r\  r`  s   &*, r|   r8   ÚPsutilTestCase.spawn_subprocö  s$   € Ü˜tÐ, tÑ,ˆØ�‰œ	 5Ô)Øˆr~   c                óÒ   € V P                   ! V/ VB p \        P                  ! VP                  4      #   \        P                   d    T P                  TP                  4       h i ; irÐ   )r8   rª   r«   rZ  r—  Úassert_pid_gone)rÓ   rÇ   r1  r`  s   &*, r|   Úspawn_psprocÚPsutilTestCase.spawn_psprocû  sY   € Ø×"Ò" DÐ3¨FÑ3ˆð	Ü—>’> %§)¡)Ó,Ð,øÜ×#Ñ#ô 	Ø× Ñ  §¡Ô+Øð	ús	   ”4 ´2A&c                óx   € \        4       w  rV P                  \        V4       V P                  \        V4       W3# rÐ   )r:   r  r6   )rÓ   Úchild1Úchild2s   &  r|   r:   Ú"PsutilTestCase.spawn_children_pair  s1   € Ü,Ó.‰ˆØ�‰œ	 6Ô*Ø�‰œ	 6Ô*ØÐÐr~   c                óx   € \        4       w  rV P                  \        V4       V P                  \        V4       W3# rÐ   )r9   r  r6   )rÓ   r}  rq  s   &  r|   r9   ÚPsutilTestCase.spawn_zombie	  s0   € Ü%›‰ˆØ�‰œ	 6Ô*Ø�‰œ	 6Ô*ØÐÐr~   c                óx   € \        V/ VB w  r4V P                  \        V4       V P                  \        V4       V# rÐ   )r5   r  rH   r6   )rÓ   rÇ   r\  r`  r…  s   &*,  r|   r5   ÚPsutilTestCase.pyrun  s4   € Ü Ð-¨Ñ-‰ˆØ�‰œ WÔ-Ø�‰œ	 5Ô)Øˆr~   c                óò  € \        V\        P                  4      '       g   Q hVP                  VP                  8X  g   Q hVP                  VP
                  8X  g   Q hVP                  '       d   VP                  '       g   Q h\        V\        P                  4      '       d?   VP                  VP                  8X  g   Q hVP                  e   VP                  ^ 8¼  g   Q h\        V4       \        V4       R # rÐ   )rŒ  rª   ÚErrorrZ  r  Ú_nameÚZombieProcessÚppidÚ_ppidrå   Úrepr)rÓ   r˜  ræ   s   &&&r|   Ú_check_proc_excÚPsutilTestCase._check_proc_exc  s¬   € Ü˜#œvŸ|™|×,Ò,Ð,Ð,Ø�w‰w˜$Ÿ(™(Ô"Ð"Ð"Ø�x‰x˜4Ÿ:™:Ô%Ð%Ð%Ø�8�8ˆ8Ø—8—8�8ˆO�8Ü�cœ6×/Ñ/×0Ò0Ø—8‘8˜tŸz™zÔ)Ð)Ð)Ø�x‰xÒ#Ø—x‘x 1”}Ð$�}ÜˆCŒÜˆSŽ	r~   c                ó„  € \         P                  ! \        P                  4      ;_uu_ 4       p \        P                  ! V4        RRR4       XP                  P                  T8X  g   Q hTP                  P                  e   Q h\        P                  ! T4      '       d   Q T4       hT\        P                  ! 4       9  g   Q hT\        P                  ! 4        Uu. uF  q3P                  NK  	  up9  g   Q hR#   \        P
                   d    \         P                  ! R 4      hi ; i  + '       g   i     Lì; iu upi )z&wasn't supposed to raise ZombieProcessN)r  rï   rª   r—  r«   r$  rÿ   rÔ   rZ  r  r²  rá  Úprocess_iter)rÓ   rZ  ÚcmÚxs   &&  r|   r  ÚPsutilTestCase.assert_pid_gone"  sí   € Ü�]Š]œ6×/Ñ/×0Ô0°BðLÜ—’˜sÕ#÷ 1ð
 �x‰x�|‰|˜sÔ"Ð"Ð"Ø�x‰x�}‰}Ò$Ð$Ð$Ü×$Ò$ S×)Ò)Ð.¨3Ó.Ð)Øœ&Ÿ+š+›-Ô'Ð'Ð'Ø¬&×*=Ò*=Ô*?Ó@Ñ*? QŸ5œ5Ñ*?Ñ@Ô@Ð@Ò@øô ×'Ñ'ô LÜ—k’kÐ"JÓKÐKðLú÷ 1×0üò As"   ­D*¯C;ÃD=Ã;,D'Ä'D*Ä*D:	c                ó  € V P                  VP                  4       \        V4      pVP                  VP                  R R7       FD  w  r4V P                  \        V4      VR7      ;_uu_ 4         V! 4       pRV RV: 2p\        V4      h	  VP                  ^ R7       R#   \        P                   d    h \        P                   d   pT P                  Y4        Rp?MRp?ii ; i RRR4       K¯    + '       g   i     KÀ  ; i)T©Úclear_cache©r˜  r  zProcess.z!() didn't raise NSP and returned Nrˆ  )r  rZ  rB   ÚiterÚallÚsubTestrå   râ   rª   r$  r—  r(  r6  )rÓ   r˜  ÚnsrD  r  rè  rê   ræ   s   &&      r|   Úassert_proc_goneÚPsutilTestCase.assert_proc_gone.  sä   € Ø×Ñ˜TŸX™XÔ&Ü˜tÓ$ˆØŸ™ §¡°T˜Ö:‰IˆCØ—‘¤3 t£9°4�×8Õ8ð.Ù›%�Cð # 4 &ð )Ø™7ð$ð ô )¨Ó-Ð-ñ ;ð 	�	‰	˜!ˆ	Öøô ×+Ñ+ô ØÜ×+Ñ+ô 4Ø×(Ñ(¨×3Ñ3ûð4úØ3÷ 9×8×8Ò8ús<   Á-C3Á/B Á6C3Â (C%	Ã	C%	Ã
C 	ÃC3Ã C%	Ã%C3Ã3Dc                óô	  € \         P                  ! VP                  4      pW8X  g   Q h\        '       g4   \        '       g(   \
        '       g   \        V4      \        V4      8X  g   Q hVP                  4       \         P                  8X  g   Q hVP                  4       '       g   Q h\         P                  ! VP                  4      '       g   Q hVP                  4        VP                  \         P                  ! 4       9   g   Q hVP                  \         P                  ! 4        Uu. uF  q3P                  NK  	  up9   g   Q h/ \         n        VP                  \         P                  ! 4        Uu. uF  q3P                  NK  	  up9   g   Q h\        V4      pVP!                  VP"                  R R7       F:  w  rVV P%                  \'        V4      VR7      ;_uu_ 4         V! 4        RRR4       K<  	  \.        '       Ed"   \0        P2                  ! \         P(                  4      ;_uu_ 4       pVP5                  4        RRR4       V P-                  VXP6                  4       \0        P2                  ! \         P(                  4      ;_uu_ 4       pVP9                  4        RRR4       V P-                  WP6                  4       \0        P2                  ! \         P(                  4      ;_uu_ 4       pVP;                  4        RRR4       V P-                  WP6                  4       VP=                  4        VP?                  4        VPA                  4        VPC                  4        VP                  4       '       g   Q h\         P                  ! VP                  4      '       g   Q hVP                  \         P                  ! 4       9   g   Q hVP                  \         P                  ! 4        Uu. uF  q3P                  NK  	  up9   g   Q h/ \         n        VP                  \         P                  ! 4        Uu. uF  q3P                  NK  	  up9   g   Q hR# u upi u upi   \         P(                  \         P*                  3 d   pT P-                  Y4        Rp?EL±Rp?ii ; i  + '       g   i     EKý  ; i  + '       g   i     EL�; i  + '       g   i     EL4; i  + '       g   i     ELè; iu upi u upi )Tr0  r2  N)"rª   r«   rZ  r	   r   r   Úhashro  rp  Ú
is_runningr²  Úas_dictrá  r+  Ú_pmaprB   r3  r4  r5  rå   r$  ÚAccessDeniedr(  r   r  rï   ÚcmdlinerÔ   rš   r‰   ÚsuspendÚresumer6   Úkill)	rÓ   r˜  Úcloner-  r6  rD  r  ræ   r,  s	   &&       r|   Úassert_proc_zombieÚ!PsutilTestCase.assert_proc_zombieA  sT  € ä—’˜tŸx™xÓ(ˆð
 Œ}Ðˆ}ß“Ÿ6›6§U£UÜ˜“:¤ e£Ô,Ð,Ð,à�{‰{‹}¤× 4Ñ 4Ô4Ð4Ð4à�‰× Ò Ð Ð Ü× Ò  §¡×*Ò*Ð*Ð*à�‰Œà�x‰xœ6Ÿ;š;›=Ô(Ð(Ð(Ø�x‰x¬6×+>Ò+>Ô+@ÓAÑ+@ aŸEœEÑ+@ÑAÔAÐAÐAØŒŒØ�x‰x¬6×+>Ò+>Ô+@ÓAÑ+@ aŸEœEÑ+@ÑAÔAÐAÐAä˜tÓ$ˆØŸ™ §¡°T˜Ö:‰IˆCØ—‘¤3 t£9°4�×8Õ8ð4Ù”E÷ 9Ñ8ñ ;÷ Œ5ä—’œv×3Ñ3×4Ô4¸Ø—‘”÷ 5à× Ñ   r§x¡xÔ0Ü—’œv×3Ñ3×4Ô4¸Ø—‘”
÷ 5à× Ñ  §x¡xÔ0Ü—’œv×3Ñ3×4Ô4¸Ø× Ñ Ô"÷ 5à× Ñ  §x¡xÔ0à�‰ŒØ�‰ŒØ�‰ÔØ�	‰	ŒØ�‰× Ò Ð Ð Ü× Ò  §¡×*Ò*Ð*Ð*Ø�x‰xœ6Ÿ;š;›=Ô(Ð(Ð(Ø�x‰x¬6×+>Ò+>Ô+@ÓAÑ+@ aŸEœEÑ+@ÑAÔAÐAÐAØŒŒØ�x‰x¬6×+>Ò+>Ô+@ÓAÑ+@ aŸEœEÑ+@ÑAÔAÐAÒAùòA BùâAøô ×,Ñ,¬f×.AÑ.AÐBô 4Ø×(Ñ(¨×3Ò3ûð4ú÷ 9×8Ñ8ú÷ 5×4Ð4ú÷ 5×4Ð4ú÷ 5×4Ð4üò BùâAsl   Ä%QÅ/QÇRÇQÈ+R4ÊSË,SÏ(S0Ð2S5Ñ%R	Ò R	ÒRÒR	ÒRÒR1Ò4S	ÓS	ÓS-	rº   ©r  N)rÖ   r×   rØ   rÙ   r  r  rK   r8   r  r:   r9   r5   r(  r  r7  rD  rÛ   rÜ   rÝ   s   @r|   rA   rA   Þ  sI   ø‡ € ñò
ôò
ò
ò ò òòò
Aò÷&3Bð 3Br~   zunreliable on PYPYrú   c                   óø   a € ] tR tRt o Rt^Èt^
t^ t]'       d   ^
M^t	Rt
]P                  ! 4       t]! ]P                   ! R4      4      t]R 4       t]R 4       tR tR tR	 tR
 tR tR tR tRR ltR tRtV tR# )r@   i…  a�  Test framework class for detecting function memory leaks,
typically functions implemented in C which forgot to free() memory
from the heap. It does so by checking whether the process memory
usage increased before and after calling the function many times.

Note that this is hard (probably impossible) to do reliably, due
to how the OS handles memory, the GC and so on (memory can even
decrease!). In order to avoid false positives, in case of failure
(mem > 0) we retry the test for up to 5 times, increasing call
repetitions each time. If the memory keeps increasing then it's a
failure.

If available (Linux, OSX, Windows), USS memory is used for comparison,
since it's supposed to be more precise, see:
https://gmpy.dev/blog/2016/real-process-memory-and-environ-in-python
If not, RSS memory is used. mallinfo() on Linux and _heapwalk() on
Windows may give even more precision, but at the moment are not
implemented.

PyPy appears to be completely unstable for this framework, probably
because of its JIT, so tests on PYPY are skipped.

Usage:

    class TestLeaks(psutil.tests.TestMemoryLeak):

        def test_fun(self):
            self.execute(some_function)
TÚPSUTIL_DEBUGc                ó2   € \         P                  ! R 4       R# )FN)rª   Ú
_set_debug©Úclss   &r|   Ú
setUpClassÚTestMemoryLeak.setUpClass®  s   € ä×Ò˜%Ö r~   c                óF   € \         P                  ! V P                  4       R # rÐ   )rª   rJ  Ú_psutil_debug_origrK  s   &r|   ÚtearDownClassÚTestMemoryLeak.tearDownClass²  s   € ä×Ò˜#×0Ñ0Ö1r~   c                ód   € V P                   P                  4       p\        VR VP                  4      # )Úuss)Ú	_thisprocÚmemory_full_infor£   Úrss)rÓ   Úmems   & r|   Ú_get_memÚTestMemoryLeak._get_mem¶  s)   € ð �n‰n×-Ñ-Ó/ˆÜ�s˜E 3§7¡7Ó+Ð+r~   c                ó‚   € \         '       d   V P                  P                  4       # V P                  P                  4       # rÐ   )r
   rU  Únum_fdsÚnum_handlesrÒ   s   &r|   Ú_get_num_fdsÚTestMemoryLeak._get_num_fds¼  s-   € ß‹5Ø—>‘>×)Ñ)Ó+Ð+à—>‘>×-Ñ-Ó/Ð/r~   c                óf   € V P                   '       d   \        VR \        P                  R7       R# R# )Úyellow)ÚcolorÚfileN)Úverboser   rx   r–   )rÓ   rê   s   &&r|   Ú_logÚTestMemoryLeak._logÂ  s    € Ø�<�<ˆ<Ü˜ 8´#·*±*×=ñ r~   c                óP  € V P                  4       pV P                  V4       V P                  4       pW2,
          pV^ 8  d   RV: R2p\        P                  ! V4      hV^ 8”  dB   \        '       d   RMRpV^8”  d
   VR,          pV RV RV: 2p\        P                  ! V4      hR# )	z£Makes sure num_fds() (POSIX) or num_handles() (Windows) does
not increase after calling a function.  Used to discover forgotten
close(2) and CloseHandle syscalls.
znegative diff z8 (gc probably collected a resource from a previous test)ÚfdÚhandlerg  z
 unclosed z after calling N)r^  Úcallr  rÿ   r
   )rÓ   rD  ÚbeforeÚafterÚdiffrê   Útype_s   &&     r|   Ú
_check_fdsÚTestMemoryLeak._check_fdsÆ  s¬   € ð
 ×"Ñ"Ó$ˆØ�	‰	�#ŒØ×!Ñ!Ó#ˆØ�~ˆØ�!Œ8à  ¡ð )2ð 2ð ô —+’+˜cÓ"Ð"Ø�!Œ8ß!›E‘D xˆEØ�aŒxØ˜•�Ø�F˜* U G¨?¸3¹'ÐBˆCÜ—+’+˜cÓ"Ð"ñ r~   c                ó*  € \         P                  ! ^R7       V P                  4       p\        V4       F  pV P	                  V4      p??K  	  \         P                  ! ^R7       V P                  4       p\         P
                  . 8X  g   Q hWc,
          pV# )zpGet 2 distinct memory samples, before and after having
called fun repeatedly, and return the memory difference.
)Ú
generation)ÚgcÚcollectrY  rÕ  rj  Úgarbage)rÓ   rD  ÚtimesÚmem1r-  rè  Úmem2rm  s   &&&     r|   Ú_call_ntimesÚTestMemoryLeak._call_ntimesÜ  sr   € ô 	�
Š
˜aÕ Ø�}‰}‹ˆÜ�u–ˆAØ—)‘)˜C“.ˆCØ’3ñ ô 	�
Š
˜aÕ Ø�}‰}‹ˆÜ�z‰z˜RÔÐÐØ�{ˆØˆr~   c           	     óæ  € . p^ pTp\        ^V^,           4       F°  pV P                  W4      p	RP                  V\        V	4      \        W’,          4      V4      p
VP	                  V
4       W”8*  ;'       g    W–8*  pV'       d   V^8”  d   V P                  V
4        R# V^8X  d   \        4        V P                  V
4       W',          pT	pK²  	  \        P                  ! RP                  V4      4      h)re   z,Run #{}: extra-mem={}, per-call={}, calls={}Nz. )
rÕ  ry  r©   r   Úappendre  Úprintr  rÿ   r>  )rÓ   rD  rv  rÐ  Ú	toleranceÚmessagesÚprev_memÚincreaseÚidxrX  rê   Úsuccesss   &&&&&       r|   Ú
_check_memÚTestMemoryLeak._check_memë  sÔ   € ØˆØˆØˆÜ˜˜G a�KÖ(ˆCØ×#Ñ# CÓ/ˆCØ@×GÑGØÜ˜CÓ Ü˜C�KÓ(Øó	ˆCð �O‰O˜CÔ ØÑ&×9Ð9¨#©/ˆGßØ˜”7Ø—I‘I˜c”NÚà˜!”8Ü”GØ—	‘	˜#”ØÕ!�Ø’ñ' )ô( �kŠk˜$Ÿ)™) HÓ-Ó.Ð.r~   c                ó   € V! 4       # rÐ   rº   )rÓ   rD  s   &&r|   rj  ÚTestMemoryLeak.call  s	   € Ù‹uˆr~   Nc                óÂ  € Ve   TMV P                   pVe   TMV P                  pVe   TMV P                  pVe   TMV P                  p V^8¼  g   Q R4       hV^ 8¼  g   Q R4       hV^ 8¼  g   Q R4       hV^ 8¼  g   Q R4       h T P                  Y4       T P                  T4       T P                  YYER7       R#   \         d   p\        \        T4      4      hRp?ii ; i)zTest a callable.Nztimes must be >= 1zwarmup_times must be >= 0zretries must be >= 0ztolerance must be >= 0)rv  rÐ  r~  )
rv  Úwarmup_timesrÐ  r~  râ   r¬   rå   ry  ro  r„  )rÓ   rD  rv  r‰  rÐ  r~  ré   s   &&&&&& r|   ÚexecuteÚTestMemoryLeak.execute
  sç   € ð Ò*‘°·
±
ˆà(Ò4‰L¸$×:KÑ:Kð 	ð %Ò0‘'°d·l±lˆØ!*Ò!6‘I¸D¿N¹Nˆ	ð	'Ø˜A”:Ð3Ð3Ó3�:Ø 1Ô$ÐAÐ&AÓAÐ$Ø˜a”<Ð7Ð!7Ó7�<Ø ”>Ð;Ð#;Ó;‘>ð 	×Ñ˜#Ô,Ø�‰˜ÔØ�‰˜°'ˆÖOøô ô 	'ÜœS ›XÓ&Ð&ûð	'ús   Á
8B: Â:CÃCÃCc                ó>   aa€ VV3R lpV P                   ! V3/ VB  R# )z^Convenience method to test a callable while making sure it
raises an exception on every call.
c                  óf   <€  S! 4        \         P                  ! S R S  24      h  S  d     R# i ; i)z did not raise N)r  rÿ   )ræ   rD  s   €€r|   rj  Ú*TestMemoryLeak.execute_w_exc.<locals>.call%  s>   ø€ ð@Ù”ô —k’k S E¨¸¸Ð">Ó?Ð?øð ô Úðús   ƒ% ¥0¯0N)rŠ  )rÓ   ræ   rD  r1  rj  s   &ff, r|   Úexecute_w_excÚTestMemoryLeak.execute_w_exc   s   ù€ ö
	@ð 	�Š�TÑ$˜VÔ$r~   rº   )NNNN) rÖ   r×   rØ   rÙ   r  rv  r‰  r~  r   rÐ  rd  rª   r«   rU  Úboolr¡   ÚgetenvrP  ÚclassmethodrM  rQ  rY  r^  re  ro  ry  r„  rj  rŠ  r�  rÛ   rÜ   rÝ   s   @r|   r@   r@   …  s¢   ø‡ € ñð> €EØ€LØ€Iß‰b A€GØ€GØ—’Ó €IÙ˜bŸiši¨Ó7Ó8Ðàñ!ó ð!ð ñ2ó ð2ò,ò0ò>ò#ò,ò/ò8ôP÷,%ð %r~   c                  óÎ  € ^ RI p ^ RIp^ RIp^ RIp^ RIp ^ RIp ^ RIpV P                  4       p\        P                  '       d-   \        P                  ! R4      '       d   \        R4      VR&   EM\        P                  '       d$   R\        P                   ! 4       ^ ,           2VR&   MÈ\        P"                  '       dƒ   RRP%                  \'        \(        \        P*                  ! 4       4      4      ,           VR&   \-        \        R4      '       d0   VR;;,          R	\        P.                  ! 4       ,           ,          uu&   M0\        P0                  ! 4        R\        P2                  ! 4        2VR&   R	P%                  \5        \        P6                  ! 4       4      \        P8                  ! 4       .,           4      VR
&   \        P:                  '       d    \        P<                  ! 4       ^,          VR&   R	P%                  \        P>                  ! 4       \        P@                  ! 4       \        PB                  ! 4       .4      VR&   \E        VRR4      VR&   Ve$   VR;;,          RVPF                   R2,          uu&   \        P:                  '       d|   \        P                  ! R4      '       d3   \        RR.4      p\)        V4      PI                  R4      ^ ,          VR&   MRVR&   \        PJ                  ! 4       ^,          p	V	'       d   W—R&   \L        PN                  ! 4       VR&   VPQ                  4       p
V
^ ,           R	V
^,           2VR&   VP                  PS                  \        PT                  ! 4       4      PW                  R4      VR&   VP                  PY                  4       PW                  R4      VR&   VP[                  4       VR&   \\        P^                  Pa                  R4      VR&   \\        Pb                  ! 4       VR&   \d        VR&   \        Pf                  ! 4       VR &   \\        Ph                  ! 4       VR!&   \        Pj                  ! 4       VR"&   R#Pl                  ! \n        ;QJ d'    . R$ \        Pp                  ! 4        4       F  NK  	  5M ! R$ \        Pp                  ! 4        4       4      !  VR%&   \        Pr                  ! 4       pR&Pm                  \u        VPv                  4      \y        VPz                  4      \y        VP|                  4      4      VR'&   \        P~                  ! 4       pR&Pm                  \u        VPv                  4      \y        VPz                  4      \y        VP|                  4      4      VR(&   \�        \ƒ        4       P…                  4        UUu. uF'  w  rÞVP‡                  4       '       g   K  VR)J g   K%  VNK)  	  upp4      pR*P%                  V4      VR+&   \‰        \        PŠ                  ! 4       4      VR,&   \        PŒ                  ! 4       P�                  4       pVP‘                  R-R4       \�        \\        P’                  4       Uu/ uF  qÝ\\        P’                  V,          bK  	  upVR.&   VP•                  V4      VR/&   \—        R3\L        P˜                  R07       VP…                  4        F7  w  rÞ\—        R1Pm                  VR2,           V4      \L        P˜                  R07       K9  	  \—        R3\L        P˜                  R07       \L        Pš                  P�                  4        R#   \         d    Rp EL*i ; i  \         d    Rp EL9i ; iu uppi u upi )4re   NÚlsb_releasezlsb_release -d -sÚOSzDarwin zWindows Ú Úwin32_editionz, ÚarchÚkernelÚpythonÚ__version__znot installedÚpipz (wheel=Ú)r  z	--versionrŠ  Úglibczfs-encodingÚlangz%Y-%m-%d %H:%M:%Sz	boot-timer:  ÚuserÚ~ÚhomerM  ÚpyexeÚhostnameÚPIDÚcpusz{:.1f}%, {:.1f}%, {:.1f}%c              3   óf   "  € T F'  q\         P                  ! 4       ,          ^d,          x € K)  	  R# 5i)éd   N)rª   Ú	cpu_count)Ú.0r-  s   & r|   Ú	<genexpr>Ú print_sysinfo.<locals>.<genexpr>z  s&   é € ÐIÑ5H°”6×#Ò#Ó%Õ%¨×+Ò+Ó5Hùs   ‚/1Úloadavgz{}%%, used={}, total={}ÚmemoryÚswapTz
                  Ú	constantsrá  r‰   r†   r˜  ©rc  z	{:<17} {}Ú:zF======================================================================)OÚcollectionsÚdatetimeÚgetpassÚlocaleÚpprintr�  ÚImportErrorÚwheelÚOrderedDictrª   r   r§   r¨   r”  ÚOSXrp   rq   r   r>  rs   rå   Ú	win32_verÚhasattrr˜  Úsystemr{   ÚlistÚarchitectureÚmachiner
   r¿  Úpython_implementationÚpython_versionÚpython_compilerr£   rœ  ru   Úlibc_verrx   ÚgetfilesystemencodingÚ	getlocaleÚfromtimestampÚ	boot_timeÚstrftimeÚnowÚgetuserr¡   r¥   Ú
expanduserrV  r   ÚnodeÚgetpidrª  r©   rr   r‡   Úvirtual_memoryrt   Úpercentr   ÚusedÚtotalÚswap_memoryÚsortedÚglobalsÚitemsÚisupperrÁ  rá  r«   r<  rº  r†   Úpformatr}  r–   r•   Úflush)r´  rµ  r¶  r·  r¸  r�  rº  ÚinfoÚoutrg  r   rX  r°  ÚkÚvr±  Úpinfos                    r|   rD   rD   0  sx  € ÛÛÛÛÛðÛðÛð ×"Ñ"Ó$€Dô ‡|‡|€|œŸš ]×3Ò3ÜÐ+Ó,ˆˆT‹
Ü	��ˆØœx×/Ò/Ó1°!Õ4Ð5Ð6ˆˆTŠ
Ü	��ˆØ #§(¡(¬3¬s´H×4FÒ4FÓ4HÓ+IÓ"JÕJˆˆT‰
Ü”8˜_×-Ò-Ø��J˜$¤×!7Ò!7Ó!9Õ9Õ9‹Jøä ŸšÓ)Ð*¨!¬H×,<Ò,<Ó,>Ð+?Ð@ˆˆT‰
Ø—9‘9ÜŒX×"Ò"Ó$Ó%¬×)9Ò)9Ó);Ð(<Õ<ó€Dˆ�Lô ‡|‡|€|Ü!ŸšÓ)¨!Õ,ˆˆX‰ð —Y‘YÜ×&Ò&Ó(Ü×ÒÓ!Ü× Ò Ó"ð ó €Dˆ�Nô
 ˜#˜}¨oÓ>€Dˆ�KØÒØˆU�˜ %×"3Ñ"3Ð!4°AÐ6Õ6‹ô ‡|‡|€|Ü�<Š<˜×ÒÜ�e˜[Ð)Ó*ˆCÜ˜c›(Ÿ.™.¨Ó.¨qÕ1ˆD�ŠKà)ˆD�‰KÜ×ÒÓ Õ"ˆßØ�‰Mô ×3Ò3Ó5€DˆÑØ×ÑÓ€DØ˜1•g�Y˜b  a¥ 	Ð*€Dˆ�LØ ×)Ñ)×7Ñ7Ü×ÒÓóç�hÐ"Ó#ð 	ˆÑð ×$Ñ$×(Ñ(Ó*×3Ñ3Ð4GÓH€Dˆ�LØ—?‘?Ó$€Dˆ�LÜ—7‘7×%Ñ% cÓ*€Dˆ�LÜ—)’)“+€Dˆ�KÜ€Dˆ�MÜ—}’}“€DˆÑÜ—)’)“+€Dˆ�Kô ×#Ò#Ó%€Dˆ�LØ1×8Ò8ß	ŒÑI´V×5FÒ5FÔ5HÓI�‰ÑI´V×5FÒ5FÔ5HÓIÓ	Iñ€Dˆ�Oô ×
Ò
Ó
!€CØ.×5Ñ5ÜˆC�K‰KÓÜ�C—H‘HÓÜ�C—I‘IÓó€Dˆ�Nô
 ×ÒÓ€DØ,×3Ñ3ÜˆD�L‰LÓÜ�D—I‘IÓÜ�D—J‘JÓó€Dˆ�Lô Ü“y—‘Ô(ÔFÑ(‰tˆq¨A¯I©I¯KŒ¸AÀ¸I�ˆÑ(ÒFó€Ið /×3Ñ3°IÓ>€DˆÑô ”v—{’{“}Ó%€Dˆ�LÜ�NŠNÓ×$Ñ$Ó&€EØ	‡I�Iˆm˜TÔ"Ü28¼¿¹Ô2DÓEÑ2D¨Qœ2Ÿ:™: a�=Ò(Ñ2DÑE€Eˆ)ÑØ—>‘> %Ó(€Dˆ�Lô 
ˆ(œŸ™Õ$Ø—
‘
–‰ˆÜˆk× Ñ   S¥¨!Ó,´3·:±:×>ñ ä	ˆ(œŸ™Õ$Ü‡J�J×ÑÖøôE ô Ø‹ðûô ô Ø‹ðüó\ 	Gùò Fs:   –\4 ›] Ö]
Ö>]
×]
Ù ]"Ü4]Ý]Ý]Ý]c                 ób   € \         R  4       p V! 4       V ,          R8H  #   \         d     R# i ; i)c                  ó   € / p \        R 4      pVP                  4       R,           FP  pVP                  R4       Uu. uF  q3P                  RR4      NK  	  ppV^ ,          \	        V^,          4      reWPV&   KR  	  V # u upi )ztasklist.exe /NH /FO csv:é   NNÚ,rá   r  )r”  Ú
splitlinesru   Úreplacert   )rè  rÝ  Úliner-  Úbitsr  rZ  s          r|   Ú	get_procsÚ,is_win_secure_system_proc.<locals>.get_procs   sw   € àˆÜÐ+Ó,ˆØ—N‘NÓ$ R×(Ð(ˆDØ04·
±
¸3´Ó@±¨1—I‘I˜c 2Ö&±ˆDÐ@Ø˜Q�¤ T¨!¥W£�#Ø�‹Hñ )ð ˆ
ùò As   »A;zSecure SystemF)r   ÚKeyError)rZ  ré  s   & r|   rE   rE   ž  s=   € äñó ððÙ‹{˜3Õ ?Ñ2Ð2øÜô Úðús   Ž Ÿ.­.c                  óà   € \         P                  ! 4       p \        V R 4      '       d   V P                  4       # \        V R4      '       d%   \        P
                  ! V P                  4       4      # ^ # )r‹   r…   )rª   r«   r¾  r‹   ÚrandomÚchoicer…   )r“  s    r|   Ú_get_eligible_cpurï  °  sM   € Ü�ŠÓ€AÜˆq�)×ÒØ�y‰y‹{ÐÜ	��N×	#Ò	#Ü�}Š}˜QŸ^™^Ó-Ó.Ð.Ùr~   c                   ón  a € ] tR tRt o RtRR=/ 3RR=/ 3.tRR=/ 3RR=RR/3R	R=/ 3R
R=/ 3RR=/ 3RR=/ 3RR=/ 3RR=/ 3RR>/ 3.	tRR=/ 3RR=/ 3RR=/ 3RR=/ 3RR=/ 3RR=/ 3RR=/ 3RR=/ 3RR=RR/3RR=/ 3RR=/ 3RR=/ 3RR=/ 3RR=/ 3R R=/ 3R!R=/ 3R"R=/ 3.t]'       d5   ]R#R=/ 3.,          t]R$R=/ 3.,          t]R%R=/ 3.,          t]R&R=/ 3.,          t]	'       d   ]R'R=/ 3.,          t]
'       d   ]R(R=/ 3.,          t]'       d   ]R)]P                  3/ 3.,          t]'       d   ]R*R=/ 3.,          t]'       d   ]R+R=/ 3.,          t]'       d   ]R,R=/ 3.,          t]'       d   ]R-R=/ 3.,          t]'       d   ]R.R=R/R0/3.,          t. t]'       d   ]RR>/ 3.,          tM]R]P(                  3/ 3.,          t]'       d   ]R)]P                  R?3/ 3.,          t]
'       d;   ]'       d   ]R(]P,                  ^ 3/ 3.,          tM]R(]P.                  3/ 3.,          t]'       d   ]R*]! 4       .3/ 3.,          tR1]P4                  3/ 3R2R=/ 3R3R=/ 3R4R=/ 3R5R=/ 3.t]'       d1   ]R1]P8                  3/ 3.,          t]R1]P:                  3/ 3.,          t]],           ],           ],           tR6 tR@R7 lt R8 t!]"R9 4       t#]"R: 4       t$R;t%V t&R<# )ArB   i¹  a  A container that lists all Process class method names + some
reasonable parameters to be called with. Utility methods (parent(),
children(), ...) are excluded.

>>> ns = process_namespace(psutil.Process())
>>> for fun, name in ns.iter(ns.getters):
...    fun()
Úcpu_percentÚmemory_percentr<  r¹  r¸  TÚconnectionsr;  Úoneshotr}  ÚparentsrZ  r6  r?  Ú	cpu_timesÚcreate_timerM  rš   rV  Úmemory_infor  Únet_connectionsÚkindr4  ÚniceÚnum_ctx_switchesÚnum_threadsÚ
open_filesr%  ro  r‘   ÚusernameÚuidsÚgidsÚterminalr\  rŒ   rˆ   r�   r…   r‹   r†   r]  r‰   ÚgroupedFr�  r@  rA  r6   rB  c                ó   € Wn         R # rÐ   ©Ú_proc)rÓ   r˜  s   &&r|   r  Úprocess_namespace.__init__  s   € ØŽ
r~   c              #  ó  "  € \        V4      p\        P                  ! V4       V FS  w  r4pV'       d   V P                  4        \	        V P
                  V4      p\        P                  ! V.VO5/ VB pWc3x € KU  	  R# 5i©zOGiven a list of tuples yields a set of (fun, fun_name) tuples
in random order.
N)rÀ  rí  Úshuffler1  r£   r  rH  rñ  )rÓ   Úlsr1  Úfun_namerÇ   r\  rD  s   &&&    r|   r3  Úprocess_namespace.iter  sl   é € ô �"‹XˆÜ�Š�rÔÛ$&Ñ ˆH˜DßØ× Ñ Ô"Ü˜$Ÿ*™* hÓ/ˆCÜ×#Ò# CÐ7¨$Ò7°$Ñ7ˆCØ�/Ô!ó %'ùs   ‚A=A?c                óh   € V P                   P                  V P                   P                  RR7       R# )z&Clear the cache of a Process instance.T)Ú_ignore_nspN)r  Ú_initrZ  rÒ   s   &r|   r1  Úprocess_namespace.clear_cache&  s!   € à�
‰
×Ñ˜Ÿ™Ÿ™°TÐÖ:r~   c                ó¦   € V FJ  w  p pRV,           p\        W4      '       d   K#  VP                  P                  : RV: R2p\        V4      h	  R# )zmGiven a TestCase instance and a list of tuples checks that
the class defines the required test method names.
Útest_z class should define a z methodN)r¾  r#  rÖ   ÚAttributeError)rL  Ú
test_classr  r  r  Ú	meth_namerê   s   &&&    r|   Útest_class_coverageÚ%process_namespace.test_class_coverage*  s^   € ó
 !‰NˆH�a˜Ø (Õ*ˆIÜ˜:×1Ô1à!×+Ñ+×4Ñ4Ñ7ð 8Ø!‘} Gð-ð ô % SÓ)Ð)ó !r~   c                ób  € V P                    Uu0 uF  q^ ,          kK  	  ppV P                   Uu0 uF  q^ ,          kK  	  pp\        \        P                  4       Uu0 uF  q^ ,          R8w  g   K  VkK  	  ppW#,          V,          pV'       d   \        RV: 24      hR# u upi u upi u upi )re   r  zuncovered Process class names: N)r4  ÚignoredrQ  rª   r«   r¬   )rL  r-  Úthisr  ÚklassÚleftouts   &     r|   ÚtestÚprocess_namespace.test8  s•   € à!ŸgšgÓ&™g˜�!—�™gˆÐ&Ø!$§¢Ó-¡˜A�Q—4�4¡ˆÐ-Ü¤§¡Ô/Ó?Ñ/�q°Qµ4¸3±;—�Ñ/ˆÐ?Ø•> UÕ*ˆßÜÐ>¸w¹kÐJÓKÐKñ ùò	 'ùÚ-ùÚ?s   �B"°B'ÁB,Á2B,r  Nrº   ©re   )rm  i   )T)'rÖ   r×   rØ   rÙ   r  Úutilsr  Úgettersr
   r&   r'   r*   rª   ÚRLIMIT_NOFILEr#   r)   r%   r   r(   ÚsettersÚNORMAL_PRIORITY_CLASSr   ÚIOPRIO_CLASS_NONEÚIOPRIO_NORMALrï  r›  ÚSIGTERMÚkillersÚCTRL_C_EVENTÚCTRL_BREAK_EVENTr4  r  r3  r1  r“  r  r  rÛ   rÜ   rÝ   s   @r|   rB   rB   ¹  sç  ø‡ € ñð ˜R Ð$Ð'7¸¸RÐ&@ÐA€Eð 
�B˜ÐØ	�R˜+ tÐ,Ð-Ø	˜˜BÐØ	�r˜2ÐØ	�B˜ÐØ	�2�rÐØ	�B˜ÐØ	��BˆØ	��rÐð
€Gð 
�B˜ÐØ	�b˜"ÐØ	˜˜BÐØ	��BˆØ	��BˆØ	˜R Ð$Ø	˜˜BÐØ	��RÐØ	˜B ¨ Ð0Ø	��RÐØ	˜R Ð$Ø	˜˜BÐØ	�r˜2ÐØ	��RÐØ	�2�rÐØ	�B˜ÐØ	�R˜Ðð#€G÷& Ø�V˜R Ð$Ð%Õ%ˆØ�V˜R Ð$Ð%Õ%ˆØ�Z  RÐ(Ð)Õ)ˆØ�Y  BÐ'Ð(Õ(ˆßØ�] B¨Ð+Ð,Õ,ˆßØ�X˜r 2Ð&Ð'Õ'ˆßØ�X × 4Ñ 4Ð6¸Ð;Ð<Õ<ˆßØ�^ R¨Ð,Ð-Õ-ˆßØ�Y  BÐ'Ð(Õ(ˆßØ�Y  BÐ'Ð(Õ(ˆßØ�] B¨Ð+Ð,Õ,ˆßØ�] B¨°EÐ(:Ð;Ð<Õ<ˆà€GßØ�V˜T 2Ð&Ð'Õ'‰à�V˜f×:Ñ:Ð<¸bÐAÐBÕBˆßØ�X × 4Ñ 4°lÐCÀRÐHÐIÕIˆßßØ˜ F×$<Ñ$<¸aÐ#@À"ÐEÐFÕF‰Gà˜ F×$8Ñ$8Ð#:¸BÐ?Ð@Õ@ˆGßØ�^Ñ'8Ó':Ð&;Ð%=¸rÐBÐCÕCˆð 
˜Ÿ™Ð)¨2Ð.Ø	�B˜ÐØ	�2�rÐØ	�b˜"ÐØ	��RÐð€G÷ Ø�] V×%8Ñ%8Ð$:¸BÐ?Ð@Õ@ˆØ�] V×%<Ñ%<Ð$>ÀÐCÐDÕDˆà
�'�/˜GÕ
# gÕ
-€Còô"ò;ð ñ*ó ð*ð ñLó öLr~   c                   óÆ  a € ] tR tRt o RtRR'/ 3RR'RR/3RR'RR/3RR'/ 3R	R'R
R/3R	R'R
R/3RR'RR/3RR'RR/3R]P                  ! 4       3/ 3RR'RR/3RR'/ 3RR'/ 3RR'RR/3R]P                  ! 4       3/ 3RR'/ 3RR'/ 3RR'/ 3RR'/ 3.t]	'       d!   ]
'       d
   ]'       d   M]RR'R
R/3.,          t]'       d   ]RR'/ 3.,          t]'       d   ]RR'/ 3.,          t]'       d   ]RR'/ 3.,          t]'       d   ]RR'/ 3.,          t]'       d   ]R R'/ 3.,          t]R!R)/ 3.,          tR"R'/ 3R#]P$                  ! 4       .3/ 3R$R'/ 3R%R'/ 3.t]t]R& 4       t]P0                  tR'tV tR(# )*rC   iB  zÉA container that lists all the module-level, system-related APIs.
Utilities such as cpu_percent() are excluded. Usage:

>>> ns = system_namespace
>>> for fun, name in ns.iter(ns.getters):
...    fun()
rÊ  rª  ÚlogicalFTÚ	cpu_statsrö  ÚpercpuÚdisk_io_countersÚperdiskÚdisk_partitionsr4  Ú
disk_usagerù  rú  Únet_if_addrsÚnet_if_statsrŠ   Úpernicr²  rá  rÕ  ÚusersrÑ  r’   r‡   r�   r�   rŽ   Úwin_service_iterÚwin_service_getr+  r»  rñ  Úcpu_times_percentc              #  óÆ   "  € \        V 4      p \        P                  ! V 4       V  F5  w  rp\        \        V4      p\
        P                  ! V.VO5/ VB pWA3x € K7  	  R# 5ir	  )rÀ  rí  r
  r£   rª   rH  rñ  )r  r  rÇ   r\  rD  s   &    r|   r3  Úsystem_namespace.itery  sY   é € ô
 �"‹XˆÜ�Š�rÔÛ$&Ñ ˆH˜DÜœ& (Ó+ˆCÜ×#Ò# CÐ7¨$Ò7°$Ñ7ˆCØ�/Ô!ó %'ùs   ‚AA!rº   N)Úalg)rÖ   r×   rØ   rÙ   r  r¡   rV  rÐ  r"  r$   r   r3   ÚHAS_GETLOADAVGr.   r-   r+   r   rª   r«   r  r4  r  r3  rB   r  rÛ   rÜ   rÝ   s   @r|   rC   rC   B  s  ø‡ € ñð 
�b˜"ÐØ	�b˜9 eÐ,Ð-Ø	�b˜9 dÐ+Ð,Ø	�b˜"ÐØ	�b˜8 UÐ+Ð,Ø	�b˜8 TÐ*Ð+Ø	˜R )¨TÐ!2Ð3Ø	˜B ¨ Ð.Ø	˜Ÿ	š	›�~ rÐ*Ø	˜B ¨ Ð0Ø	˜˜RÐ Ø	˜˜RÐ Ø	˜B ¨4Ð 0Ð1Ø	˜Ÿ	š	›�~ rÐ*Ø	��RÐØ	˜˜BÐØ	�"�bÐØ	˜2˜rÐ"ð%€G÷( ß—WØà˜ R¨(°DÐ)9Ð:Ð;Õ;ˆGßØ�\ 2 rÐ*Ð+Õ+ˆßØÐ+¨R°Ð4Ð5Õ5ˆßØ�^ R¨Ð,Ð-Õ-ˆßØÐ&¨¨BÐ/Ð0Õ0ˆßØÐ'¨¨RÐ0Ð1Õ1ˆØÐ&¨°"Ð5Ð6Õ6ˆð 
˜˜RÐ Ø	˜ŸšÓ)Ð*Ð,¨bÐ1Ø	˜˜BÐØ	˜b "Ð%ð	€Gð €Càñ	"ó ð	"ð ,×?Ñ?Ör~   c                ób   € R p\        \        \        P                  P                  3RV VR7      # )zRDecorator which runs a test function and retries N times before
actually failing.
c                 óD   € \        V : R 2\        P                  R7       R# )z
, retryingr²  N)r}  rx   r–   )ræ   s   &r|   rÒ  Ú retry_on_failure.<locals>.logfun�  s   € Ü�‘�zÐ"¬¯©×4r~   N)rÏ  r‰  rÐ  rÒ  )rÍ  râ   r  rÿ   rC  )rÐ  rÒ  s   & r|   r?   r?   ˆ  s1   € ò
5ô Ü!¤6§;¡;×#8Ñ#8Ð9ØØØô	ð r~   c                ó   a € V 3R lpV# )z,Decorator to Ignore AccessDenied exceptions.c                 óJ   <a € \         P                  ! S 4      V V3R  l4       pV# )c                  óŽ   <€  S! V / VB #   \         P                   d%    Se
   S'       g   h \        P                  ! R4      hi ; i)Nzraises AccessDenied)rª   r>  r  rü   )rÇ   r1  rD  Úonly_ifs   *,€€r|   rE  Ú9skip_on_access_denied.<locals>.decorator.<locals>.wrapperœ  sI   ø€ ð9Ù˜DÐ+ FÑ+Ð+øÜ×&Ñ&ô 9ØÒ&ß"ØÜ—k’kÐ"7Ó8Ð8ð	9ús   ƒ ‹ A¬ArG  ©rD  rE  rE  s   f €r|   rÞ  Ú(skip_on_access_denied.<locals>.decorator›  s%   ù€ Ü	�Š˜Ó	õ	9ó 
ð	9ð ˆr~   rº   ©rE  rÞ  s   f r|   r=   r=   ˜  s   ø€ õð Ðr~   c                ó   a € V 3R lpV# )z3Decorator to Ignore NotImplementedError exceptions.c                 óJ   <a € \         P                  ! S 4      V V3R  l4       pV# )c                  óš   <€  S! V / VB #   \          d5    Se
   S'       g   h SP                  : R2p\        P                  ! T4      hi ; i)Nz2 was skipped because it raised NotImplementedError)r¾  rÖ   r  rü   )rÇ   r1  rê   rD  rE  s   *, €€r|   rE  Ú;skip_on_not_implemented.<locals>.decorator.<locals>.wrapper¯  s]   ø€ ð
'Ù˜DÐ+ FÑ+Ð+øÜ&ô 'ØÒ&ß"Øà—|‘|Ñ&ð '+ð +ð ô —k’k #Ó&Ð&ð'ús   ƒ ‹A
¢(A
rG  rG  s   f €r|   rÞ  Ú*skip_on_not_implemented.<locals>.decorator®  s%   ù€ Ü	�Š˜Ó	õ	'ó 
ð	'ð ˆr~   rº   rI  s   f r|   r>   r>   «  s   ø€ õð" Ðr~   c                óÎ   € \         P                   ! 4       ;_uu_ 4       pVP                  V ^ 34       VP                  4       ^,          uuRRR4       #   + '       g   i     R# ; i)z6Return an unused TCP port. Subject to race conditions.N)ÚsocketÚbindÚgetsockname)Úhostr|  s   & r|   rS   rS   È  s<   € ä	�Š�Œ˜DØ�	‰	�4˜�)ÔØ×ÑÓ! !Õ$÷ 
��‹ús   ž*AÁA$	c                ó˜  € Vf   V \         \        09   d   Rp\        P                  ! W4      p \        P                  R9  d0   VP                  \        P                  \        P                  ^4       VP                  V4       V\        P                  8X  d   VP                  ^4       V#   \         d    TP                  4        h i ; i)zBinds a generic socket.©r  re   >   ÚntÚcygwin)r   r   rP  r¡   r  Ú
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRrQ  r   ÚlistenrC  ry  )ÚfamilyÚtypeÚaddrr|  s   &&& r|   rT   rT   Ï  s˜   € à‚|˜¤7¬HÐ"5Ô5ØˆÜ�=Š=˜Ó&€Dð	Ü�7‰7Ð*Ô*Ø�O‰OœF×-Ñ-¬v×/BÑ/BÀAÔFØ�	‰	�$ŒØ”6×%Ñ%Ô%Ø�K‰K˜ŒNØˆøÜô Ø�
‰
ŒØðús   ¯A<B, Â,C	c                óˆ  € \         P                  '       g   Q h\        P                  P	                  V 4      '       d   Q V 4       h\
        P
                  ! \
        P                  V4      p VP                  V 4       V\
        P                  8X  d   VP                  ^4       V#   \         d    TP                  4        h i ; i)zBind a UNIX socket.)rª   r
   r¡   r¥   r­   rP  r±   rQ  r   r[  rC  ry  )r  r]  r|  s   && r|   rU   rU   à  s�   € ä�<�<ˆ<Ðˆ<Ü�w‰w�~‰~˜d×#Ò#Ð) TÓ)Ð#Ü�=Š=œŸ™¨Ó.€DðØ�	‰	�$ŒØ”6×%Ñ%Ô%Ø�K‰K˜ŒNð €Køô ô Ø�
‰
ŒØðús   Á+7B$ Â$Cc                ó   € \         P                   ! V \        4      ;_uu_ 4       pVP                  V4       VP                  ^4       VP	                  4       p\         P                   ! V \        4      p VP                  V4       VP	                  4       p VP                  4       w  rQW8X  d   WS3uuRRR4       # VP                  4        K8    \         d    TP                  4        h i ; i  + '       g   i     R# ; i)zVBuild a pair of TCP sockets connected to each other.
Return a (server, client) tuple.
N)	rP  r   rQ  r[  rR  Úconnectru  ry  r¥  )r\  r^  ÚllrÂ  ÚcaddrÚas   &&    r|   rV   rV   ï  s¸   € ô 
�Š�vœ{×	+Ô	+¨rØ
�‰�ŒØ
�	‰	�!ŒØ�~‰~ÓˆÜ�MŠM˜&¤+Ó.ˆð	Ø�I‰I�dŒOØ—M‘M“OˆEØØŸ)™)›+‘�à”=Ø˜6÷ 
,Ò	+ð —‘–	øÜô 	Ø�G‰GŒIØð	ú÷ 
,×	+Ð	+ús$   ¤AC,Á3<CÂ:CÃC)Ã)C,Ã,C=	c                ó²  € \         P                  '       g   Q hR;r \        V \        P                  R7      pVP                  ^ 4       \        P                  ! \        P                  \        P                  4      pVP                  ^ 4       VP                  V 4       W3#   \         d+    Te   TP                  4        Te   TP                  4        h i ; i)zwBuild a pair of UNIX sockets connected to each other through
the same UNIX file name.
Return a (server, client) tuple.
N©r]  )
rª   r
   rU   rP  r   Úsetblockingr±   ra  rC  ry  )r  ÚserverÚclients   &  r|   rW   rW     s°   € ô
 �<�<ˆ<Ðˆ<ØÐ€FðÜ! $¬V×-?Ñ-?Ô@ˆØ×Ñ˜1ÔÜ—’œvŸ~™~¬v×/AÑ/AÓBˆØ×Ñ˜1ÔØ�‰�tÔð ÐÐøô ô ØÒØ�L‰LŒNØÒØ�L‰LŒNØðús   �BB! Â!5Cc               #  óx  "  € . p R;r V P                  \        \        P                  \        P                  4      \        \        P                  \        P
                  4      34       \        4       '       d`   V P                  \        \        P                  \        P                  4      \        \        P                  \        P
                  4      34       \        '       de   \        '       dY   \        4       p\        4       p\        V4      w  r4\        V\        P
                  R7      pW4V3 F  pV P                  V4       K  	  V x € V  F  pVP                  4        K  	  W3 F  pVf   K	  \        V4       K  	  R#   T  F  pTP                  4        K  	  Y3 F  pTf   K	  \        T4       K  	  i ; i5i)z1Open as many socket families / types as possible.Nrf  )ÚextendrT   rP  r   r   Ú
SOCK_DGRAMr   r   r
   r/   rK   rW   rU   r|  ry  rH   )ÚsocksÚfname1Úfname2Ús1Ús2Ús3rg  rå  s           r|   rX   rX     sJ  é € ð €EØÐ€Fð#Ø�‰ÜœŸ™¬×(:Ñ(:Ó;ÜœŸ™¬×(9Ñ(9Ó:ð
ô 	ô �?Š?Ø�L‰LÜœFŸO™O¬V×-?Ñ-?Ó@ÜœFŸO™O¬V×->Ñ->Ó?ðô ÷ ‹5×-Ó-Ü“\ˆFÜ“\ˆFÜ$ VÓ,‰FˆBÜ! &¬v×/@Ñ/@ÔAˆBØ˜b“\�Ø—‘˜Q–ñ "àŠãˆAØ�G‰GŽIñ àÓ%ˆEØÔ Ü˜EÖ"ó &øó ˆAØ�G‰GŽIñ àÓ%ˆEØÔ Ü˜EÖ"ò &üs6   ‚F:‰CF Ã#F Ã/AF Å F:Å0F:Æ!F7Æ'F7Æ7F:c                ó¢  € \        V\        P                  4      '       g   Q V4       hV\        P                  8X  d€   V P                  R4       Uu. uF  p\        V4      NK  	  pp\        V4      ^8X  g   Q V 4       hV F!  p^ Tu;8:  d   ^ÿ8:  d   K  Q V 4       h Q V 4       h	  \        P                  ! V 4       R# V\        P                  8X  d6   \        V \        4      '       g   Q V 4       h\        P                  ! V 4       R# V\        P                  8X  d#   \        P                   ! RV 4      f   Q V 4       hR# \#        RV: 24      hu upi )zSCheck a net address validity. Supported families are IPv4,
IPv6 and MAC addresses.
rf   z([a-fA-F0-9]{2}[:|\-]?){6}Nzunknown family )rŒ  ÚenumÚIntEnumrP  r   ru   rt   rÁ  Ú	ipaddressÚIPv4Addressr   rå   ÚIPv6Addressrª   ÚAF_LINKrã   rç   r¬   )r^  r\  r-  ÚoctsÚnums   &&   r|   rQ   rQ   <  s
  € ô �fœdŸl™l×+Ò+Ð3¨VÓ3Ð+Ø”—‘ÔØ $§
¡
¨3¤Ó0¡˜1”�A–¡ˆÐ0Ü�4‹y˜AŒ~Ð#˜tÓ#ˆ~ÛˆCØ˜–?˜s–?Ð( DÓ(‘?Ð( DÓ(�?ñ ä×Ò˜dÖ#Ø	”6—?‘?Ô	"Ü˜$¤×$Ò$Ð* dÓ*Ð$Ü×Ò˜dÖ#Ø	”6—>‘>Ô	!Ü�xŠxÐ5°tÓ<ÒHÐNÈ$ÓNÒHä˜?¨6©*Ð5Ó6Ð6ùò 1s   ÁEc                ót   € R pR pR pR pR pV! V 4       V! V 4       V! V 4       V! V 4       V! V 4       R# )z*Check validity of a connection namedtuple.c                 ó´  € \        V 4      ^8H  p\        V 4      R9   g   Q \        V 4      4       hV ^ ,          V P                  8X  g   Q V P                  4       hV ^,          V P                  8X  g   Q V P                  4       hV ^,          V P                  8X  g   Q V P                  4       hV ^,          V P                  8X  g   Q V P                  4       hV ^,          V P
                  8X  g   Q V P
                  4       hV ^,          V P                  8X  g   Q V P                  4       hV'       d,   V ^,          V P                  8X  g   Q V P                  4       hR# R# )r    N>   r£  r    )rÁ  rh  r\  r]  ÚladdrÚraddrro  rZ  )r~  Úhas_pids   & r|   Úcheck_ntupleÚ-check_connection_ntuple.<locals>.check_ntupleS  s  € Ü�d“)˜q‘.ˆÜ�4‹y˜FÔ"Ð-¤C¨£IÓ-Ð"Ø�A�w˜$Ÿ'™'Ô!Ð* 4§7¡7Ó*Ð!Ø�A�w˜$Ÿ+™+Ô%Ð2 t§{¡{Ó2Ð%Ø�A�w˜$Ÿ)™)Ô#Ð. T§Y¡YÓ.Ð#Ø�A�w˜$Ÿ*™*Ô$Ð0 d§j¡jÓ0Ð$Ø�A�w˜$Ÿ*™*Ô$Ð0 d§j¡jÓ0Ð$Ø�A�w˜$Ÿ+™+Ô%Ð2 t§{¡{Ó2Ð%ßØ˜•7˜dŸh™hÔ&Ð0¨¯©Ó0Ò&ñ r~   c                 óà  € V P                   \        \        \        09   g   Q V P                   4       h\	        V P                   \
        P                  4      '       g   Q V 4       hV P                   \        8X  dd   \        P                  ! V P                   V P                  4      ;_uu_ 4       p VP                  V P                  ^ ,          ^ 34       RRR4       R# V P                   \        8X  d3   V P                  \        P                   8X  g   Q V P                  4       hR# R#   \         d+   pTP                  \        P                  8w  d   h  Rp?LƒRp?ii ; i  + '       g   i     R# ; i)re   N)r\  r   r   r±   rŒ  rt  ru  rP  r]  rQ  r~  r¥  ÚerrnoÚEADDRNOTAVAILro  rª   Ú	CONN_NONE)r~  rg  ré   s   &  r|   Úcheck_familyÚ-check_connection_ntuple.<locals>.check_family_  sÿ   € Ø�{‰{œw¬´'Ð:Ô:ÐG¸D¿K¹KÓGÐ:Ü˜$Ÿ+™+¤t§|¡|×4Ò4Ð:°dÓ:Ð4Ø�;‰;œ'Ô!ô
 —’˜tŸ{™{¨D¯I©I×6Ô6¸!ðØ—F‘F˜DŸJ™J q�M¨1Ð-Ô.÷ 7Ñ6ð �[‰[œGÔ#Ø—;‘;¤&×"2Ñ"2Ô2Ð?°D·K±KÓ?Ò2ñ $øô ô Ø—y‘y¤E×$7Ñ$7Ô7Øô 8ûðú÷ 7×6Ð6ús0   Â+EÂ-$D$Ä$EÄ/ EÅEÅEÅEÅE-	c                 ó¾  € \        \        R \        4       4      pV P                  \        P                  \        P
                  V09   g   Q V P                  4       h\        V P                  \        P                  4      '       g   Q V 4       hV P                  \        P
                  8X  d3   V P                  \        P                  8X  g   Q V P                  4       hR# R# )ÚSOCK_SEQPACKETN)r£   rP  Úobjectr]  r   rl  rŒ  rt  ru  ro  rª   r†  )r~  rŠ  s   & r|   Ú
check_typeÚ+check_connection_ntuple.<locals>.check_typep  s«   € ä ¤Ð)9¼6»8ÓDˆØ�y‰yÜ×ÑÜ×ÑØð
ô 
ð 	ð �9‰9ó		ð 
ô
 ˜$Ÿ)™)¤T§\¡\×2Ò2Ð8°DÓ8Ð2Ø�9‰9œ×)Ñ)Ô)Ø—;‘;¤&×"2Ñ"2Ô2Ð?°D·K±KÓ?Ò2ñ *r~   c                 óh  € V P                   V P                  3 EF  pV P                  \        \        09   d¹   \        V\        4      '       g   Q \        V4      4       hV'       g   KO  \        VP                  \        4      '       g   Q \        VP                  4      4       h^ VP                  u;8:  d   R8:  g   M Q VP                  4       h\        VP                  V P                  4       K×  V P                  \        8X  g   Kî  \        V\        4      '       d   EK  Q \        V4      4       h	  R# )re   iÿÿ  N)r~  r  r\  r   r   rŒ  rr   r]  Úportrt   rQ   Úipr±   rå   )r~  r^  s   & r|   Úcheck_addrsÚ,check_connection_ntuple.<locals>.check_addrs|  sÊ   € à—Z‘Z §¡Ô,ˆDØ�{‰{œw¬Ð1Ô1Ü! $¬×.Ò.Ð:´°T³
Ó:Ð.ßÙÜ! $§)¡)¬S×1Ò1ÐB´4¸¿	¹	³?ÓBÐ1Ø˜DŸI™IÖ.¨Ö.Ð9°·	±	Ó9Ð.Ü! $§'¡'¨4¯;©;Ö7Ø—‘¤Ö'Ü! $¬×,Õ,Ð8¬d°4«jÓ8Ð,ó -r~   c                 ób  € \        V P                  \        4      '       g   Q V P                  4       h\        \        4       Uu. uF+  qP                  R 4      '       g   K  \        \        V4      NK-  	  ppV P                  V9   g   Q V P                  4       hV P                  \        \        09   dH   V P                  \        8X  d3   V P                  \        P                  8w  g   Q V P                  4       hR# V P                  \        P                  8X  g   Q V P                  4       hR# u upi )ÚCONN_N)rŒ  ro  rå   rQ  rª   r  r£   r\  r   r   r]  r   r†  )r~  r-  Úvalidss   &  r|   Úcheck_statusÚ-check_connection_ntuple.<locals>.check_status‰  sÕ   € Ü˜$Ÿ+™+¤s×+Ò+Ð8¨T¯[©[Ó8Ð+ä(+¬F¬ó
Ù(3 1·|±|ÀG×7LÔŒG”F˜AÖ©ð 	ð 
ð �{‰{˜fÔ$Ð1 d§k¡kÓ1Ð$Ø�;‰;œ7¤HÐ-Ô-°$·)±)¼{Ô2JØ—;‘;¤&×"2Ñ"2Ô2Ð?°D·K±KÓ?Ò2à—;‘;¤&×"2Ñ"2Ô2Ð?°D·K±KÓ?Ò2ùò
s   ÁD,Á D,Nrº   )r~  r�  r‡  rŒ  r‘  r–  s   &     r|   Úcheck_connection_ntupler˜  P  sH   € ò
1ò@ò"
@ò9ò	@ñ �ÔÙ�ÔÙˆtÔÙ�ÔÙ�Ör~   c                óî   € . pV  Fl  p\         '       dM   VP                  \        P                  8X  d.   \        '       d"   RVP
                  9   d   \        RV 24       K[  VP                  V4       Kn  	  V# )zlOur process may start with some open UNIX sockets which are not
initialized by us, invalidating unit tests.
z/syslogz	skipping )r
   r\  rP  r±   r   r  r   r|  )ÚconsÚnewr~  s   &  r|   rR   rR   ›  s\   € ð €CÛˆß‹5�T—[‘[¤F§N¡NÔ2ß‹u˜ d§j¡jÔ0Ü˜	 $ Ð(Ô)ÙØ�
‰
�4Öñ ð €Jr~   c                 ó.   € \         P                  ! V 4      # rÐ   )Ú	importlibÚreload)Úmodules   &r|   rY   rY   ®  s   € Ü×Ò˜FÓ#Ð#r~   c                 ó>  € \         P                  P                  \         P                  P                  V 4      4      ^ ,          p\        P
                  P                  W4      p\        P
                  P                  V4      pVP                  P                  V4       V# r   )
r¡   r¥   Úsplitextrd  r�  ÚutilÚspec_from_file_locationÚmodule_from_specÚloaderÚexec_module)r¥   r  ÚspecÚmods   &   r|   rZ   rZ   ²  si   € Ü�7‰7×ÑœBŸG™G×,Ñ,¨TÓ2Ó3°AÕ6€DÜ�>‰>×1Ñ1°$Ó=€DÜ
�.‰.×
)Ñ
)¨$Ó
/€CØ‡K�K×Ñ˜CÔ Ø€Jr~   c                ó@   € \         P                  ! V \        ^R7       R# )zRaise a warning msg.rµ   Nr·   )rê   s   &r|   r[   r[   ¿  s   € ä‡M‚M�#”{¨q×1r~   c                ó(  € \        V 4      pVP                  p\        V4      ^8w  g   V^ ,          \        Jd   R# \	        VRR4      p\        V\        4      '       g   R# \        ;QJ d    R V 4       F  '       d   K   R# 	  R# ! R V 4       4      # )z-Check if object is an instance of namedtuple.FÚ_fieldsNc              3   óB   "  € T F  p\        V\        4      x € K  	  R # 5irÐ   )rŒ  rå   )r«  Úns   & r|   r¬  Ú is_namedtuple.<locals>.<genexpr>Í  s   é € Ð-©1 aŒz˜!œS×!Ð!«1ùs   ‚T)r]  Ú	__bases__rÁ  rr   r£   rŒ  r4  )r-  ÚtÚbr†  s   &   r|   r]   r]   Ä  st   € äˆQ‹€AØ	�‰€AÜ
ˆ1ƒv�„{�a˜•d¤%Ó'ÙÜ��9˜dÓ#€AÜ�aœ×ÒÙß‹3Ñ-©1Ó-�3Œ3Ð-Š3Ð-ˆ3Ñ-©1Ó-Ó-Ð-r~   c              #  óJ  "  € \         '       d   RMRpRp\        W,           R7      p\        P                  ! 4       P	                  4        Uu. uFf  p\
        P                  P                  VP                  4      ^,          V8X  g   K:  WP                  P                  4       9   g   KZ  VP                  NKh  	  pp\        P                  ! V4      p\        P                  ! Wc4        \        P                  ! V4       Vx € \        V4       R# u upi   \        T4       i ; i5i)zªCtx manager which picks up a random shared CO lib used
by this process, copies it in another location and loads it
in memory via ctypes. Return the new absolutized path.
Úpypyr›  z.sor  N)r   rK   rª   r«   r‰   r¡   r¥   r¡  Úlowerrí  rî  r§   rý  ÚctypesÚCDLLrH   )r  rš   ÚextÚdstr-  Úlibsr{  s   &      r|   r\   r\   Ò  sÚ   é € ÷ ›‰f (ˆØˆÜ ¥Ô-ˆô —^’^Ó%×1Ñ1Ô3ó
á3�Ü�w‰w×Ñ §¡Ó'¨Õ*¨cÑ1ô à69¿V¹V¿\¹\»^Ñ6Kô ˆA�FŒFÙ3ð 	ð 
ô
 �mŠm˜DÓ!ˆÜ�Š˜Ô!ð	Ü�KŠK˜ÔØŠIä˜Öùò
øô ˜Õüs6   ‚A
D#Á7DÂDÂ(DÂ8.D#Ã'D ÄD#ÄD Ä D#c              #  óF  "  € ^ RI Hp ^ RI Hp Rp\        W,           R7      p\        P
                  ! 4       P                  4        Uu. uFŸ  pVP                  P                  4       P                  V4      '       g   K4  R\        P                  P                  VP                  4      P                  4       9   g   Kr  RVP                  P                  4       9  g   K“  VP                  NK¡  	  pp\        '       dƒ   V'       g{   \        P
                  ! 4       P                  4        Uu. uFM  pR\        P                  P                  VP                  4      P                  4       9   g   KA  VP                  NKO  	  pp\        P                  ! V4      p\        P                   ! Wt4       Rp \         P"                  ! V4      pVx € VeW   \         P$                  P&                  P(                  p	VP*                  .V	n        V	! VP.                  4      p
V
^ 8X  d   V! 4       h\1        V4       R# u upi u upi   TeW   \         P$                  P&                  P(                  p	TP*                  .T	n        T	! TP.                  4      p
T
^ 8X  d   T! 4       h\1        T4       i ; i5i)	z¶Ctx manager which picks up a random shared DLL lib used
by this process, copies it in another location and loads it
in memory via ctypes.
Return the new absolutized, normcased path.
)ÚWinError)Úwintypesz.dllr  r›  Úwow64r³  N)rµ  r»  r¼  rK   rª   r«   r‰   r¥   r´  r‘  r¡   rd  r   rí  rî  r§   rý  ÚWinDLLÚwindllÚkernel32ÚFreeLibraryÚHMODULEÚargtypesÚ_handlerH   )r  r»  r¼  r·  r¸  r-  r¹  r{  ÚcfilerÁ  rè  s   &          r|   r\   r\   ê  s  é € õ 	$Ý#àˆÜ ¥Ô-ˆô —^’^Ó%×1Ñ1Ô3ó
á3�Ø�v‰v�|‰|‹~×&Ñ& s×+ô ð œBŸG™G×,Ñ,¨Q¯V©VÓ4×:Ñ:Ó<Ñ<ô ð ˜qŸv™vŸ|™|›~Ñ-ô	 ˆA�FŒFÙ3ð 	ð 
÷ ‹4Ÿô  ŸšÓ)×5Ñ5Ô7óá7�AØœRŸW™W×-Ñ-¨a¯f©fÓ5×;Ñ;Ó=Ñ=ô �—”Ù7ð ð ô
 �mŠm˜DÓ!ˆÜ�Š˜Ô!Øˆð	Ü—M’M #Ó&ˆEØŠIð Ò Ü$Ÿm™m×4Ñ4×@Ñ@�Ø(0×(8Ñ(8Ð'9�Ô$Ù! %§-¡-Ó0�Ø˜!”8Ù"›*Ð$Ü˜Öùò?
ùòøð" Ò Ü$Ÿm™m×4Ñ4×@Ñ@�Ø(0×(8Ñ(8Ð'9�Ô$Ù! %§-¡-Ó0�Ø˜!”8Ù"›*Ð$Ü˜ÕüsV   ‚AJ!Á1H-Á>9H-Â<H-ÃH-Ã-J!Ä%J!Ä(>H2Å+H2Å;0J!Æ,H7 ÇA1J!È7A'JÊJ!c                  ó   € \        R R7       R# )Tr·  N)r7   rº   r~   r|   Úcleanup_test_procsrÇ    s
   € ä˜D×!r~   c                 ó.   € \         P                  ! V 4      # rÐ   )rx   Úexit)rŸ  r  s   &&r|   rr  rr  (  s   € ´·²¸#´r~   l        >   Úarm64Úaarch64)rn   é   )é   re   i  P i    >   Úasciiúus-asciirÐ   )F)TFrF  )z	127.0.0.1)rU  r  )Àr  r½   rí   rµ  rt  r„  rH  rs  r�  rv  r¡   rp   rí  rã   rv  r�  r§   r›  rP  rî  rv   rx   r  rb  r   r:  Ú	tracebackr<   r¸   r   r   r   r  r¹  rª   r   r   r   r   r	   r
   r   r   Úpsutil._commonr   r   r   r   r   Úpsutil._psposixr   Ú__all__Úbuiltin_module_namesr   r†   r_   r   r2   r4   Úmaxsizer"   rÂ  r´  r3   ÚRISCV64r}   r0   r1   r   r   r!   r   r  rÐ  r   r   Údecoder   rÇ  ÚASCII_FSr¥   r¦   r>  rú  Ú__file__r   Úgetr   rÄ   r¾  r«   r#   r%   r>  r'   r(   r/   ÚHAS_NET_IO_COUNTERSr)   r&   r*   r+   r-   r.   ÚHAS_THREADSÚgetuidÚSKIP_SYSCONSr‘  rŽ   r,   rC  r¾   rñ  r}  Ú
format_excr’   r$   r¯   r   r   rƒ  Údevnullr   ry  rQ  r  r£   r    r‹  r±   r9  rX  re  rF   râ   rÿ   Úmodulesr»   r5  r;   rJ  r8   r:   r9   r5   r”  r(  r6   r7   rM   rL   rÍ  r—  rO   rë  rP   rN   rH   rø  rî   rG   rI   rJ   rK   rò   rA   r  r  r@   rD   rE   rï  rB   rC   r?   r=   r>   rS   rT   rU   rV   rW   rX   rQ   r˜  rR   rY   rZ   r[   r]   r\   rÇ  )r-  s   0r|   Ú<module>râ     sô
  ðñ
 ã Û Û Û Û Û Û 	Û Û Û 	Û Û Û 	Û Û Û Û Û Û Û Û 
Û Û Û Û Û Û Û Ý Ý Ý ðÛó Ý Ý Ý Ý Ý Ý Ý Ý Ý &Ý  Ý "Ý &Ý (çÝ(ð#àð#àð#à!4ð#à6Bð#ð ð#ð ð#ð +ð#ð -7ð#ð 9Fð#ð ð	#ð &ð	#ð (@ð	#ð
 ð#ð
 (ð#ð
 *@ð#ð
 BLð#ð ð#ð 'ð#ð )6ð#ð 8Nð#ð ð#ð $ð#ð &8ð#ð :Fð#ð ð#ð )ð#ð +=ð#ð ð#ð !;ð#ð =Kð#ð ð#ð ð#ð !*ð#ð ,=ð#ð ð#ð ð#ð *ð#ð ,;ð#ð =Kð#ð ð#ð ð#ð" ð##ð" (ð##ð" *Cð##ð$ ð%#ð$ )ð%#ð$ +;ð%#ð& ð'#ð& ,ð'#ð& .=ð'#ð(  ð)#ð( "/ð)#ð, ð-#ð, ð-#ð, ,ð-#ð, .<ð-#ð, >Jð-#ð0 ð1#ð0 #ð1#ð4 ð5#ð4 !ð5#ð4 #2ð5#ð8 ð9#ð8 7ð9#ð: ð;#ð: #ð;#ð: %7ð;#ð: 9Ið;#ð< ð=#ð< (ð=#ð@ ðA#ð@ -ðA#ðD ðE#ðD "ðE#ðD $3ðE#€ðZ �S×-Ñ-Ñ-€à! R§Z¡ZÑ/×OÐO°>ÀRÇZÁZÑ3O€Ø€
Ø˜RŸZ™ZÑ'€Ø'¨2¯:©:Ñ5€à�;‰;˜Ñ€à
×
Ò
Ó
×
"Ñ
"Ó
$Ð(<Ñ
<€Ø
×
Ò
Ó
 	Ñ
)€ð 	ñó 	ð÷( 	Ù “? XÑ-€LÙ “? gÑ-�Là€LØ€Lð €
à#Ð Ø'Ð à€çØ�!…O€JØ�aÕ€NØ˜ÕÐØ˜AÕÐð
 ‡7�7ˆfÔà˜rŸyšy›{˜m¨1Ð-�Mà˜rŸyšy›{˜m¨1Ð-€MØ€à%×,Ñ,¨VÐ5FÓGÐ Ø×$Ò$Ó&×,Ñ,Ó.Ð2GÑG€ð �7‰7×ÑØ‡G�G‡L�L�—‘—‘ Ó*¨D°$Ó7ó€ð �j‰j�n‰nØ˜"Ÿ'™'Ÿ,™, x°Ó;ó€ð 
‡w�w×Ñ˜Ÿ™Ÿ™¨Ó1Ó2€ñ ˜6Ÿ>™>¨>Ó:Ð Ù�f—n‘n iÓ0€Ù˜ Ó.€Ù�V—^‘^ XÓ.€
Ù˜&Ÿ.™.¨-Ó8€Ø ×.Ð.¨¤YÐ Ù˜fÐ&7Ó8Ð Ù˜6Ÿ>™>¨9Ó5Ð Ù˜vŸ~™~¨}Ó=Ð Ù�V—^‘^ XÓ.€
Ù˜fÐ&7Ó8Ð Ù˜6 >Ó2Ð Ù" 6Ð+AÓBÐ Ù�f—n‘n iÓ0€Ø—�˜×2Ð2 "§)¢)£+°Ñ"2€ðØ%×HÐH©$¨v×/EÒ/EÓ/GÓ*H€KðÙ˜6 :Ó.×JÐJ±4¸¿ºÓ8IÓ3J€Lò)ñX )›]Ñ €
ˆNÙ
ˆr�z‰z˜4Ó
 €Ø ‡‚�—‘Ô ñ !$ F¤óÙ +˜1¯|©|¸I×/FÔ�GˆF�AÖ¡ñÐ ñ �&˜)¡V£XÓ
.€á›Ð Ù“€÷U#ñ U#ðr ,€× Ò Ô ð 
‚>Ø€Fà'€C‡K‚K�ÑØ×ÒÔô(�×!Ò!ô (ò`	ð ó&ó ð&ðR ñ#ó ð#òL&ðR ñó ðð& ñó ðð0  &Ÿ~š~¸Nô Q/ôh-òJ!ò0÷6ñ 6ñr Ø×"Ò"ØØØô	ñóðñ Ø  .Ð1ØØØô	óóðñ Ø˜vŸ{š{×4Ñ4Ð5ØØØô	ñóðòòDð ×Òñó ðòôô4ô&VB�X×&Ò&ô VBðN ‡‚×Ò�DÐ!5ÐÓ6ôg%�^ó g%ó 7ðg%òTkò\ò$÷FLñ FL÷RC@ñ C@ðL (ô ô ô&ô:%ð  [°tô ð" !'× 2Ñ 2ô ôò.ð. ×Òñ#ó ð#ò<7ò(HòVò&$òò2ò
	.÷ 	à×Òóó ñð. ×Òó*ó ð*ðf ‡�ñ"ó ð"÷ 	Ø
‡M‚M�&—.’.Ñ">Ö?ñ 	øð}? ô ØƒFðûðR ô Ø
‡O‚O�I×%Ò% e¨Y×-AÒ-AÓ-CÓDÔEØƒKðûð
 ô Ø
‡O‚O�I×%Ò% e¨Y×-AÒ-AÓ-CÓDÔEØƒLðüòpsN   Â_ Ò#_$ Ò,_$ Ó`& Ó`& Ô3a(Õa(ß	_!ß _!ß$;`#à"`#à&;a%á$a%