§
    ±Ûg;  ã                   ól  — d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ej"        j#        Z# ej$        ¦   «         Z%dZ&d„ Z' G d „ d!e¦  «        Z( G d"„ d#e(¦  «        Z)ej*         +                    e d$¬%¦  «         G d&„ d'e¦  «        ¦   «         Z, G d(„ d)e¦  «        Z-dS )*a©  Tests for detecting function memory leaks (typically the ones
implemented in C). It does so by calling a function many times and
checking whether process memory usage keeps increasing between
calls or over time.
Note that this may produce false positives (especially on Windows
for some reason).
PyPy appears to be completely unstable for this framework, probably
because of how its JIT handles memory, so tests are skipped.
é    N)ÚLINUX)ÚMACOS)ÚOPENBSD)ÚPOSIX)ÚSUNOS)ÚWINDOWS)ÚHAS_CPU_AFFINITY)ÚHAS_CPU_FREQ)ÚHAS_ENVIRON)Ú
HAS_IONICE)ÚHAS_MEMORY_MAPS)ÚHAS_NET_IO_COUNTERS)ÚHAS_PROC_CPU_NUM)ÚHAS_PROC_IO_COUNTERS)Ú
HAS_RLIMIT)ÚHAS_SENSORS_BATTERY)ÚHAS_SENSORS_FANS)ÚHAS_SENSORS_TEMPERATURES)ÚTestMemoryLeak)Úcreate_sockets)Ú
get_testfn)Úprocess_namespace)Úpytest)Úskip_on_access_denied)Úspawn_testproc)Úsystem_namespace)Ú	terminateé   c                  ó   — d„ } | S )zsDecorator for those Linux functions which are implemented in pure
    Python, and which we want to run faster.
    c                 óF   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }|S )Nc                 ó¸   •— t           rG| j        j        }	 t          | j        _         ‰| g|¢R i |¤Ž|| j        _        S # || j        _        w xY w ‰| g|¢R i |¤ŽS ©N)r   Ú	__class__ÚtimesÚ	FEW_TIMES)ÚselfÚargsÚkwargsÚbeforeÚfuns       €úP/granary/edev/quantum/lib/python3.11/site-packages/psutil/tests/test_memleaks.pyÚwrapperz5fewtimes_if_linux.<locals>.decorator.<locals>.wrapper@   s„   ø€ åð 2ØœÔ-�ð2Ý+4�D”NÔ(Ø˜3˜tÐ5 dÐ5Ð5Ð5¨fÐ5Ð5à+1�D”NÔ(Ð(ø¨6�D”NÔ(Ð1Ð1Ð1Ð1à�s˜4Ð1 $Ð1Ð1Ð1¨&Ð1Ð1Ð1s	   –? ¿A)Ú	functoolsÚwraps)r*   r,   s   ` r+   Ú	decoratorz$fewtimes_if_linux.<locals>.decorator?   s8   ø€ Ý	Œ˜Ñ	Ô	ð		2ð 		2ð 		2ð 		2ñ 
Ô	ð		2ð ˆó    © )r/   s    r+   Úfewtimes_if_linuxr2   :   s   € ð
ð ð ð Ðr0   c                   ój	  — e Zd ZdZeZd„ Z e¦   «         d„ ¦   «         Z e¦   «         d„ ¦   «         Z	 e¦   «         d„ ¦   «         Z
 e¦   «         d„ ¦   «         Zej                             e d¬¦  «         e¦   «         d	„ ¦   «         ¦   «         Zej                             e d¬¦  «         e¦   «         d
„ ¦   «         ¦   «         Z e¦   «         d„ ¦   «         Zd„ Zd„ Zej                             e d¬¦  «        d„ ¦   «         Zej                             e d¬¦  «        d„ ¦   «         Zej                             e d¬¦  «         e¦   «         d„ ¦   «         ¦   «         Zej                             ed¬¦  «        d„ ¦   «         Z e¦   «         d„ ¦   «         Z e¦   «          ee¬¦  «        d„ ¦   «         ¦   «         Zej                             e d¬¦  «        d„ ¦   «         Z ej                             e d¬¦  «         e¦   «         d„ ¦   «         ¦   «         Z! e¦   «         d„ ¦   «         Z" e¦   «          ee¬¦  «        d„ ¦   «         ¦   «         Z# e¦   «         d„ ¦   «         Z$ e¦   «         ej                             e% d¬¦  «        d„ ¦   «         ¦   «         Z& e¦   «         d„ ¦   «         Z' e¦   «         d„ ¦   «         Z(ej                             e d¬¦  «         e¦   «         d „ ¦   «         ¦   «         Z)d!„ Z* e¦   «         d"„ ¦   «         Z+ej                             e, d¬¦  «        d#„ ¦   «         Z-ej                             e, d¬¦  «        d$„ ¦   «         Z. e¦   «         d%„ ¦   «         Z/ej                             e0 d¬¦  «         e¦   «         d&„ ¦   «         ¦   «         Z1ej                             e2 d'¬¦  «        ej                             e3 d¬¦  «        d(„ ¦   «         ¦   «         Z4ej                             e2 d'¬¦  «        ej                             e3 d¬¦  «        d)„ ¦   «         ¦   «         Z5 e¦   «         ej                             ed*¬¦  «        d+„ ¦   «         ¦   «         Z6ej                             e7 d¬¦  «        d,„ ¦   «         Z8ej                             e d¬¦  «        d-„ ¦   «         Z9d.S )/ÚTestProcessObjectLeaksz$Test leaks of Process class methods.c                 ój   — t          d ¦  «        }|                     | |j        |j        z   ¦  «         d S r"   )r   Útest_class_coverageÚgettersÚsetters©r&   Únss     r+   Útest_coveragez$TestProcessObjectLeaks.test_coverage[   s4   € Ý˜tÑ$Ô$ˆØ
×Ò˜t R¤Z°"´*Ñ%<Ñ=Ô=Ð=Ð=Ð=r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )ÚexecuteÚprocÚname©r&   s    r+   Ú	test_namez TestProcessObjectLeaks.test_name_   ó   € à�Š�T”Y”^Ñ$Ô$Ð$Ð$Ð$r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úcmdliner@   s    r+   Útest_cmdlinez#TestProcessObjectLeaks.test_cmdlinec   ó   € à�Š�T”YÔ&Ñ'Ô'Ð'Ð'Ð'r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úexer@   s    r+   Útest_exezTestProcessObjectLeaks.test_exeg   ó   € à�Š�T”Y”]Ñ#Ô#Ð#Ð#Ð#r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úppidr@   s    r+   Ú	test_ppidz TestProcessObjectLeaks.test_ppidk   rB   r0   z
POSIX only©Úreasonc                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úuidsr@   s    r+   Ú	test_uidsz TestProcessObjectLeaks.test_uidso   ó    € ð 	�Š�T”Y”^Ñ$Ô$Ð$Ð$Ð$r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úgidsr@   s    r+   Ú	test_gidsz TestProcessObjectLeaks.test_gidst   rS   r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Ústatusr@   s    r+   Útest_statusz"TestProcessObjectLeaks.test_statusy   ó   € à�Š�T”YÔ%Ñ&Ô&Ð&Ð&Ð&r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Únicer@   s    r+   Ú	test_nicez TestProcessObjectLeaks.test_nice}   s   € Ø�Š�T”Y”^Ñ$Ô$Ð$Ð$Ð$r0   c                 ón   ‡ ‡— t                                ¦   «         Š‰                      ˆˆ fd„¦  «         d S )Nc                  ó8   •— ‰j                              ‰ ¦  «        S r"   )r>   r\   )Únicenessr&   s   €€r+   ú<lambda>z6TestProcessObjectLeaks.test_nice_set.<locals>.<lambda>‚   s   ø€ ˜TœYŸ^š^¨HÑ5Ô5€ r0   )Úthisprocr\   r=   )r&   r`   s   `@r+   Útest_nice_setz$TestProcessObjectLeaks.test_nice_set€   s6   øø€ Ý—=’=‘?”?ˆØ�ŠÐ5Ð5Ð5Ð5Ð5Ñ6Ô6Ð6Ð6Ð6r0   únot supportedc                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úionicer@   s    r+   Útest_ionicez"TestProcessObjectLeaks.test_ionice„   rZ   r0   c                 óJ  ‡ ‡— t           r4t                               ¦   «         Š‰                      ˆ ˆfd„¦  «         d S ‰                      ˆ fd„¦  «         t	          j        t          j        t          j	        ¦   «         dd¦  «        }‰  
                    t          |¦  «         d S )Nc                  ó8   •— ‰ j                              ‰¦  «        S r"   )r>   rf   )r&   Úvalues   €€r+   ra   z8TestProcessObjectLeaks.test_ionice_set.<locals>.<lambda>Œ   s   ø€  ¤×!1Ò!1°%Ñ!8Ô!8€ r0   c                  óL   •— ‰ j                              t          j        ¦  «        S r"   )r>   rf   ÚpsutilÚIOPRIO_CLASS_NONEr@   s   €r+   ra   z8TestProcessObjectLeaks.test_ionice_set.<locals>.<lambda>Ž   s   ø€  ¤×!1Ò!1µ&Ô2JÑ!KÔ!K€ r0   éÿÿÿÿr   )r   rb   rf   r=   r-   ÚpartialÚcextÚproc_ioprio_setÚosÚgetpidÚexecute_w_excÚOSError)r&   r*   rj   s   ` @r+   Útest_ionice_setz&TestProcessObjectLeaks.test_ionice_setˆ   s—   øø€ åð 	-Ý—O’OÑ%Ô%ˆEØ�LŠLÐ8Ð8Ð8Ð8Ð8Ñ9Ô9Ð9Ð9Ð9à�LŠLÐKÐKÐKÐKÑLÔLÐLÝÔ#¥DÔ$8½"¼)¹+¼+ÀrÈ1ÑMÔMˆCØ×Ò�w¨Ñ,Ô,Ð,Ð,Ð,r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úio_countersr@   s    r+   Útest_io_countersz'TestProcessObjectLeaks.test_io_counters’   ó!   € ð 	�Š�T”YÔ*Ñ+Ô+Ð+Ð+Ð+r0   zworthless on POSIXc                 óŽ   — t          j        ¦   «                              ¦   «          |                      | j        j        ¦  «         d S r"   )rl   ÚProcessÚusernamer=   r>   r@   s    r+   Útest_usernamez$TestProcessObjectLeaks.test_username—   s;   € õ 	ŒÑÔ×!Ò!Ñ#Ô#Ð#Ø�Š�T”YÔ'Ñ(Ô(Ð(Ð(Ð(r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úcreate_timer@   s    r+   Útest_create_timez'TestProcessObjectLeaks.test_create_time�   ó   € à�Š�T”YÔ*Ñ+Ô+Ð+Ð+Ð+r0   )Úonly_ifc                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Únum_threadsr@   s    r+   Útest_num_threadsz'TestProcessObjectLeaks.test_num_threads¡   rz   r0   úWINDOWS onlyc                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Únum_handlesr@   s    r+   Útest_num_handlesz'TestProcessObjectLeaks.test_num_handles¦   r‚   r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Únum_fdsr@   s    r+   Útest_num_fdsz#TestProcessObjectLeaks.test_num_fdsª   ó!   € ð 	�Š�T”YÔ&Ñ'Ô'Ð'Ð'Ð'r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Únum_ctx_switchesr@   s    r+   Útest_num_ctx_switchesz,TestProcessObjectLeaks.test_num_ctx_switches¯   ó   € à�Š�T”YÔ/Ñ0Ô0Ð0Ð0Ð0r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úthreadsr@   s    r+   Útest_threadsz#TestProcessObjectLeaks.test_threads³   rŽ   r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Ú	cpu_timesr@   s    r+   Útest_cpu_timesz%TestProcessObjectLeaks.test_cpu_times¸   s   € à�Š�T”YÔ(Ñ)Ô)Ð)Ð)Ð)r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úcpu_numr@   s    r+   Útest_cpu_numz#TestProcessObjectLeaks.test_cpu_num¼   rŽ   r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úmemory_infor@   s    r+   Útest_memory_infoz'TestProcessObjectLeaks.test_memory_infoÁ   r‚   r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úmemory_full_infor@   s    r+   Útest_memory_full_infoz,TestProcessObjectLeaks.test_memory_full_infoÅ   r’   r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úterminalr@   s    r+   Útest_terminalz$TestProcessObjectLeaks.test_terminalÉ   s!   € ð 	�Š�T”YÔ'Ñ(Ô(Ð(Ð(Ð(r0   c                 ór   — t           rt          n| j        }|                      | j        j        |¬¦  «         d S )N©r$   )r   r%   r$   r=   r>   Úresume©r&   r$   s     r+   Útest_resumez"TestProcessObjectLeaks.test_resumeÎ   s3   € Ý"Ð2•	�	¨¬
ˆØ�Š�T”YÔ%¨UˆÑ3Ô3Ð3Ð3Ð3r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úcwdr@   s    r+   Útest_cwdzTestProcessObjectLeaks.test_cwdÒ   rJ   r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úcpu_affinityr@   s    r+   Útest_cpu_affinityz(TestProcessObjectLeaks.test_cpu_affinityÖ   s   € à�Š�T”YÔ+Ñ,Ô,Ð,Ð,Ð,r0   c                 óª   ‡ ‡— t                                ¦   «         Š‰                      ˆˆ fd„¦  «         ‰                      t          ˆ fd„¦  «         d S )Nc                  ó8   •— ‰j                              ‰ ¦  «        S r"   ©r>   r®   )Úaffinityr&   s   €€r+   ra   z>TestProcessObjectLeaks.test_cpu_affinity_set.<locals>.<lambda>Ý   s   ø€ ˜TœY×3Ò3°HÑ=Ô=€ r0   c                  ó:   •— ‰ j                              dg¦  «        S ©Nrn   r²   r@   s   €r+   ra   z>TestProcessObjectLeaks.test_cpu_affinity_set.<locals>.<lambda>Þ   s   ø€ ¨t¬y×/EÒ/EÀrÀdÑ/KÔ/K€ r0   )rb   r®   r=   rt   Ú
ValueError)r&   r³   s   `@r+   Útest_cpu_affinity_setz,TestProcessObjectLeaks.test_cpu_affinity_setÚ   sZ   øø€ å×(Ò(Ñ*Ô*ˆØ�ŠÐ=Ð=Ð=Ð=Ð=Ñ>Ô>Ð>Ø×Ò�:Ð'KÐ'KÐ'KÐ'KÑLÔLÐLÐLÐLr0   c                 ó®   — t          t          ¦   «         d¦  «        5  |                      | j        j        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚw)Úopenr   r=   r>   Ú
open_filesr@   s    r+   Útest_open_filesz&TestProcessObjectLeaks.test_open_filesà   s‘   € å•*‘,”, Ñ$Ô$ð 	/ð 	/Ø�LŠL˜œÔ-Ñ.Ô.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/s   � A
Á
AÁAc                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úmemory_mapsr@   s    r+   Útest_memory_mapsz'TestProcessObjectLeaks.test_memory_mapså   rz   r0   z
LINUX onlyc                 ó8   ‡ — ‰                       ˆ fd„¦  «         d S )Nc                  óL   •— ‰ j                              t          j        ¦  «        S r"   ©r>   Úrlimitrl   ÚRLIMIT_NOFILEr@   s   €r+   ra   z4TestProcessObjectLeaks.test_rlimit.<locals>.<lambda>í   s   ø€ ˜TœY×-Ò-­fÔ.BÑCÔC€ r0   ©r=   r@   s   `r+   Útest_rlimitz"TestProcessObjectLeaks.test_rlimitê   s'   ø€ ð 	�ŠÐCÐCÐCÐCÑDÔDÐDÐDÐDr0   c                 óÎ   ‡ ‡— t                                t          j        ¦  «        Š‰                      ˆˆ fd„¦  «         ‰                      t          t          fˆ fd„¦  «         d S )Nc                  óN   •— ‰j                              t          j        ‰ ¦  «        S r"   rÂ   )Úlimitr&   s   €€r+   ra   z8TestProcessObjectLeaks.test_rlimit_set.<locals>.<lambda>ó   s   ø€ ˜TœY×-Ò-­fÔ.BÀEÑJÔJ€ r0   c                  ó8   •— ‰ j                              d¦  «        S rµ   )r>   rÃ   r@   s   €r+   ra   z8TestProcessObjectLeaks.test_rlimit_set.<locals>.<lambda>ô   s   ø€ ¸$¼)×:JÒ:JÈ2Ñ:NÔ:N€ r0   )rb   rÃ   rl   rÄ   r=   rt   ru   r¶   )r&   rÉ   s   `@r+   Útest_rlimit_setz&TestProcessObjectLeaks.test_rlimit_setï   sd   øø€ õ —’¥Ô 4Ñ5Ô5ˆØ�ŠÐJÐJÐJÐJÐJÑKÔKÐKØ×Ò�G¥ZÐ0Ð2NÐ2NÐ2NÐ2NÑOÔOÐOÐOÐOr0   zworthless on WINDOWSc                 ó    ‡ ‡— t          ¦   «         5  t          rdndŠ‰                      ˆˆ fd„¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NÚinetÚallc                  ó8   •— ‰j                              ‰ ¦  «        S r"   )r>   Únet_connections)Úkindr&   s   €€r+   ra   z=TestProcessObjectLeaks.test_net_connections.<locals>.<lambda>   s   ø€  ¤×!:Ò!:¸4Ñ!@Ô!@€ r0   )r   r   r=   )r&   rÑ   s   `@r+   Útest_net_connectionsz+TestProcessObjectLeaks.test_net_connectionsö   s·   øø€ õ ÑÔð 	Bð 	BÝ"Ð-�6�6¨ˆDØ�LŠLÐ@Ð@Ð@Ð@Ð@ÑAÔAÐAð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bs   ‘%AÁAÁ
Ac                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úenvironr@   s    r+   Útest_environz#TestProcessObjectLeaks.test_environ  rF   r0   c                 ó2   — |                       d„ ¦  «         d S )Nc                  óX   — t                                t          j        ¦   «         ¦  «        S r"   )rp   Ú	proc_inforr   rs   r1   r0   r+   ra   z7TestProcessObjectLeaks.test_proc_info.<locals>.<lambda>  s   € �TŸ^š^­B¬I©K¬KÑ8Ô8€ r0   rÅ   r@   s    r+   Útest_proc_infoz%TestProcessObjectLeaks.test_proc_info  s   € à�ŠÐ8Ð8Ñ9Ô9Ð9Ð9Ð9r0   N):Ú__name__Ú
__module__Ú__qualname__Ú__doc__rb   r>   r;   r2   rA   rE   rI   rM   r   ÚmarkÚskipifr   rR   rV   rY   r]   rc   r   rg   rv   r   ry   r~   r�   r   r   r†   r   rŠ   r�   r‘   r•   r˜   r   r›   rž   r¡   r¤   r©   r¬   r	   r¯   r·   r¼   r   r¿   r   r   rÆ   rË   rÒ   r   rÕ   rÙ   r1   r0   r+   r4   r4   V   s-  € € € € € Ø.Ð.à€Dð>ð >ð >ð ÐÑÔð%ð %ñ Ôð%ð ÐÑÔð(ð (ñ Ôð(ð ÐÑÔð$ð $ñ Ôð$ð ÐÑÔð%ð %ñ Ôð%ð „[×Ò˜E˜	¨,ÐÑ7Ô7ØÐÑÔð%ð %ñ Ôñ 8Ô7ð%ð „[×Ò˜E˜	¨,ÐÑ7Ô7ØÐÑÔð%ð %ñ Ôñ 8Ô7ð%ð ÐÑÔð'ð 'ñ Ôð'ð%ð %ð %ð7ð 7ð 7ð „[×Ò˜J˜¨ÐÑ?Ô?ð'ð 'ñ @Ô?ð'ð „[×Ò˜J˜¨ÐÑ?Ô?ð-ð -ñ @Ô?ð-ð „[×ÒÐ0Ð0¸ÐÑIÔIØÐÑÔð,ð ,ñ Ôñ JÔIð,ð „[×Ò˜Ð&:ÐÑ;Ô;ð)ð )ñ <Ô;ð)ð
 ÐÑÔð,ð ,ñ Ôð,ð ÐÑÔØÐ 7Ð+Ñ+Ô+ð,ð ,ñ ,Ô+ñ Ôð,ð „[×Ò˜G˜¨NÐÑ;Ô;ð,ð ,ñ <Ô;ð,ð „[×Ò˜E˜	¨,ÐÑ7Ô7ØÐÑÔð(ð (ñ Ôñ 8Ô7ð(ð ÐÑÔð1ð 1ñ Ôð1ð ÐÑÔØÐ 7Ð+Ñ+Ô+ð(ð (ñ ,Ô+ñ Ôð(ð ÐÑÔð*ð *ñ Ôð*ð ÐÑÔØ„[×ÒÐ,Ð,°_ÐÑEÔEð(ð (ñ FÔEñ Ôð(ð ÐÑÔð,ð ,ñ Ôð,ð ÐÑÔð1ð 1ñ Ôð1ð „[×Ò˜E˜	¨,ÐÑ7Ô7ØÐÑÔð)ð )ñ Ôñ 8Ô7ð)ð4ð 4ð 4ð ÐÑÔð$ð $ñ Ôð$ð „[×ÒÐ,Ð,°_ÐÑEÔEð-ð -ñ FÔEð-ð „[×ÒÐ,Ð,°_ÐÑEÔEðMð Mñ FÔEðMð
 ÐÑÔð/ð /ñ Ôð/ð „[×Ò˜OÐ+°OÐÑDÔDØÐÑÔð,ð ,ñ Ôñ EÔDð,ð „[×Ò˜E˜	¨,ÐÑ7Ô7Ø„[×Ò˜J˜¨ÐÑ?Ô?ðEð Eñ @Ô?ñ 8Ô7ðEð „[×Ò˜E˜	¨,ÐÑ7Ô7Ø„[×Ò˜J˜¨ÐÑ?Ô?ðPð Pñ @Ô?ñ 8Ô7ðPð
 ÐÑÔð „[×Ò˜Ð(>ÐÑ?Ô?ðBð Bñ @Ô?ñ ÔðBð „[×Ò˜K˜°ÐÑ@Ô@ð(ð (ñ AÔ@ð(ð „[×Ò˜G˜¨NÐÑ;Ô;ð:ð :ñ <Ô;ð:ð :ð :r0   r4   c                   ó‚   ‡ — e Zd ZdZeˆ fd„¦   «         Zeˆ fd„¦   «         Zd„ Zerd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zˆ xZS ˆ xZS )ÚTestTerminatedProcessLeakszñRepeat the tests above looking for leaks occurring when dealing
    with terminated processes raising NoSuchProcess exception.
    The C functions are still invoked but will follow different code
    paths. We'll check those code paths.
    c                 ó  •— t          ¦   «                              ¦   «          t          ¦   «         | _        t	          j        | j        j        ¦  «        | _        | j                             ¦   «          | j         	                    ¦   «          d S r"   )
ÚsuperÚ
setUpClassr   Úsubprl   r|   Úpidr>   ÚkillÚwait©Úclsr#   s    €r+   rä   z%TestTerminatedProcessLeaks.setUpClass  s]   ø€ å‰Œ×ÒÑÔÐÝ!Ñ#Ô#ˆŒÝ”> #¤(¤,Ñ/Ô/ˆŒØŒ�Š‰ŒˆØŒ�Š‰Œˆˆˆr0   c                 óp   •— t          ¦   «                              ¦   «          t          | j        ¦  «         d S r"   )rã   ÚtearDownClassr   rå   ré   s    €r+   rì   z(TestTerminatedProcessLeaks.tearDownClass  s/   ø€ å‰Œ×ÒÑÔÐÝ�#”(ÑÔÐÐÐr0   c                 óH   — 	  |¦   «          d S # t           j        $ r Y d S w xY wr"   )rl   ÚNoSuchProcess)r&   r*   s     r+   ÚcallzTestTerminatedProcessLeaks.call  s;   € ð	ØˆC‰EŒEˆEˆEˆEøÝÔ#ð 	ð 	ð 	ØˆDˆDð	øøøs   ‚
 Ž! !c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   rç   r@   s    r+   Ú	test_killz$TestTerminatedProcessLeaks.test_kill'  ó   € Ø�LŠL˜œœÑ(Ô(Ð(Ð(Ð(r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   r   r@   s    r+   Útest_terminatez)TestTerminatedProcessLeaks.test_terminate*  s   € Ø�LŠL˜œÔ,Ñ-Ô-Ð-Ð-Ð-r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   Úsuspendr@   s    r+   Útest_suspendz'TestTerminatedProcessLeaks.test_suspend-  s   € Ø�LŠL˜œÔ*Ñ+Ô+Ð+Ð+Ð+r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   r§   r@   s    r+   r©   z&TestTerminatedProcessLeaks.test_resume0  s   € Ø�LŠL˜œÔ)Ñ*Ô*Ð*Ð*Ð*r0   c                 óD   — |                       | j        j        ¦  «         d S r"   )r=   r>   rè   r@   s    r+   Ú	test_waitz$TestTerminatedProcessLeaks.test_wait3  rò   r0   c                 ó<   ‡ — ˆ fd„}‰                       |¦  «         d S )Nc                  óp   •— 	 t                                ‰ j        j        ¦  «        S # t          $ r Y d S w xY wr"   )rp   rØ   r>   ræ   ÚProcessLookupErrorr@   s   €r+   rï   z7TestTerminatedProcessLeaks.test_proc_info.<locals>.call8  s@   ø€ ðÝŸ>š>¨$¬)¬-Ñ8Ô8Ð8øÝ)ð ð ð Ø�D�Dðøøøs   ƒ#' §
5´5rÅ   )r&   rï   s   ` r+   rÙ   z)TestTerminatedProcessLeaks.test_proc_info6  s6   ø€ ðð ð ð ð ð �LŠL˜ÑÔÐÐÐr0   )rÚ   rÛ   rÜ   rÝ   Úclassmethodrä   rì   rï   r   rñ   rô   r÷   r©   rú   rÙ   Ú__classcell__)r#   s   @r+   rá   rá     sú   ø€ € € € € ðð ð ðð ð ð ñ „[ðð ðð ð ð ñ „[ððð ð ð ð ð	)ð 	)ð 	)ð	.ð 	.ð 	.ð	,ð 	,ð 	,ð	+ð 	+ð 	+ð	)ð 	)ð 	)ð	ð 	ð 	ð 	ð 	ð 	ð 	ð#ð ð ð r0   rá   r‡   rN   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTestProcessDualImplementationc                 ó2   — |                       d„ ¦  «         d S )Nc                  ó\   — t                                t          j        ¦   «         d¬¦  «        S )NT©Úuse_peb©rp   Úproc_cmdlinerr   rs   r1   r0   r+   ra   zETestProcessDualImplementation.test_cmdline_peb_true.<locals>.<lambda>D  s   € �T×.Ò.­r¬y©{¬{ÀDÐ.ÑIÔI€ r0   rÅ   r@   s    r+   Útest_cmdline_peb_truez3TestProcessDualImplementation.test_cmdline_peb_trueC  s   € Ø�ŠÐIÐIÑJÔJÐJÐJÐJr0   c                 ó2   — |                       d„ ¦  «         d S )Nc                  ó\   — t                                t          j        ¦   «         d¬¦  «        S )NFr  r  r1   r0   r+   ra   zFTestProcessDualImplementation.test_cmdline_peb_false.<locals>.<lambda>G  s   € �T×.Ò.­r¬y©{¬{ÀEÐ.ÑJÔJ€ r0   rÅ   r@   s    r+   Útest_cmdline_peb_falsez4TestProcessDualImplementation.test_cmdline_peb_falseF  s   € Ø�ŠÐJÐJÑKÔKÐKÐKÐKr0   N)rÚ   rÛ   rÜ   r  r  r1   r0   r+   r  r  A  s:   € € € € € ðKð Kð KðLð Lð Lð Lð Lr0   r  c                   óÄ  — e Zd ZdZd„ Z e¦   «         d„ ¦   «         Z e¦   «         d„ ¦   «         Z e¦   «         d„ ¦   «         Z e¦   «         d„ ¦   «         Z	 e¦   «         d„ ¦   «         Z
 e¦   «         ej                             eo ej        ¦   «         dk    d	¬
¦  «        ej                             e d¬
¦  «        d„ ¦   «         ¦   «         ¦   «         Zej                             e d¬
¦  «        d„ ¦   «         Zd„ Zej                             ed¬
¦  «        d„ ¦   «         Zd„ Zd„ Zd„ Zej                             eoej                             d¦  «         d¬
¦  «         e¦   «         d„ ¦   «         ¦   «         Z e¦   «         d„ ¦   «         Z  e¦   «         ej                             e! d¬
¦  «        d„ ¦   «         ¦   «         Z" e¦   «         ej                             eo ej#        ¦   «         dk    d¬
¦  «        d„ ¦   «         ¦   «         Z$d„ Z%d„ Z& e¦   «         ej                             e' d¬
¦  «        d„ ¦   «         ¦   «         Z( e¦   «         ej                             e) d¬
¦  «        d „ ¦   «         ¦   «         Z* e¦   «         ej                             e+ d¬
¦  «        d!„ ¦   «         ¦   «         Z, e¦   «         d"„ ¦   «         Z-d#„ Z.d$„ Z/erd%„ Z0d&„ Z1d'„ Z2d(„ Z3d)„ Z4d*S d*S )+ÚTestModuleFunctionsLeaksz&Test leaks of psutil module functions.c                 óX   — t          ¦   «         }|                     | |j        ¦  «         d S r"   )r   r6   rÎ   r9   s     r+   r;   z&TestModuleFunctionsLeaks.test_coverageR  s+   € ÝÑÔˆØ
×Ò˜t R¤VÑ,Ô,Ð,Ð,Ð,r0   c                 ó2   — |                       d„ ¦  «         d S )Nc                  ó,   — t          j        d¬¦  «        S )NT©Úlogical©rl   Ú	cpu_countr1   r0   r+   ra   z9TestModuleFunctionsLeaks.test_cpu_count.<locals>.<lambda>Z  s   € �VÔ-°dÐ;Ñ;Ô;€ r0   rÅ   r@   s    r+   Útest_cpu_countz'TestModuleFunctionsLeaks.test_cpu_countX  s   € à�ŠÐ;Ð;Ñ<Ô<Ð<Ð<Ð<r0   c                 ó2   — |                       d„ ¦  «         d S )Nc                  ó,   — t          j        d¬¦  «        S )NFr  r  r1   r0   r+   ra   z?TestModuleFunctionsLeaks.test_cpu_count_cores.<locals>.<lambda>^  s   € �VÔ-°eÐ<Ñ<Ô<€ r0   rÅ   r@   s    r+   Útest_cpu_count_coresz-TestModuleFunctionsLeaks.test_cpu_count_cores\  s   € à�ŠÐ<Ð<Ñ=Ô=Ð=Ð=Ð=r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   r—   r@   s    r+   r˜   z'TestModuleFunctionsLeaks.test_cpu_times`  ó   € à�Š•VÔ%Ñ&Ô&Ð&Ð&Ð&r0   c                 ó2   — |                       d„ ¦  «         d S )Nc                  ó,   — t          j        d¬¦  «        S )NT)Úpercpu)rl   r—   r1   r0   r+   ra   z=TestModuleFunctionsLeaks.test_per_cpu_times.<locals>.<lambda>f  s   € �VÔ-°TÐ:Ñ:Ô:€ r0   rÅ   r@   s    r+   Útest_per_cpu_timesz+TestModuleFunctionsLeaks.test_per_cpu_timesd  s   € à�ŠÐ:Ð:Ñ;Ô;Ð;Ð;Ð;r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Ú	cpu_statsr@   s    r+   Útest_cpu_statsz'TestModuleFunctionsLeaks.test_cpu_statsh  r  r0   Úarm64zskipped due to #1892rN   rd   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Úcpu_freqr@   s    r+   Útest_cpu_freqz&TestModuleFunctionsLeaks.test_cpu_freql  s   € ð 	�Š•V”_Ñ%Ô%Ð%Ð%Ð%r0   r‡   c                 ój   — t          j        ¦   «          |                      t           j        ¦  «         d S r"   )rl   Ú
getloadavgr=   r@   s    r+   Útest_getloadavgz(TestModuleFunctionsLeaks.test_getloadavgu  s,   € åÔÑÔÐØ�Š•VÔ&Ñ'Ô'Ð'Ð'Ð'r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Úvirtual_memoryr@   s    r+   Útest_virtual_memoryz,TestModuleFunctionsLeaks.test_virtual_memory|  s   € Ø�Š•VÔ*Ñ+Ô+Ð+Ð+Ð+r0   z&worthless on SUNOS (uses a subprocess)c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Úswap_memoryr@   s    r+   Útest_swap_memoryz)TestModuleFunctionsLeaks.test_swap_memory€  s   € à�Š•VÔ'Ñ(Ô(Ð(Ð(Ð(r0   c                 ó`   — t           rt          n| j        }|                      d„ |¬¦  «         d S )Nc                  óL   — t          j        t          j        ¦   «         ¦  «        S r"   )rl   Ú
pid_existsrr   rs   r1   r0   r+   ra   z:TestModuleFunctionsLeaks.test_pid_exists.<locals>.<lambda>†  s   € �VÔ.­r¬y©{¬{Ñ;Ô;€ r0   r¦   ©r   r%   r$   r=   r¨   s     r+   Útest_pid_existsz(TestModuleFunctionsLeaks.test_pid_exists„  s2   € Ý"Ð2•	�	¨¬
ˆØ�ŠÐ;Ð;À5ˆÑIÔIÐIÐIÐIr0   c                 ó`   — t           rt          n| j        }|                      d„ |¬¦  «         d S )Nc                  ó*   — t          j        d¦  «        S )Nú.)rl   Ú
disk_usager1   r0   r+   ra   z:TestModuleFunctionsLeaks.test_disk_usage.<locals>.<lambda>Œ  s   € �VÔ.¨sÑ3Ô3€ r0   r¦   r2  r¨   s     r+   Útest_disk_usagez(TestModuleFunctionsLeaks.test_disk_usageŠ  s2   € Ý"Ð2•	�	¨¬
ˆØ�ŠÐ3Ð3¸5ˆÑAÔAÐAÐAÐAr0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Údisk_partitionsr@   s    r+   Útest_disk_partitionsz-TestModuleFunctionsLeaks.test_disk_partitionsŽ  s   € Ø�Š•VÔ+Ñ,Ô,Ð,Ð,Ð,r0   z/proc/diskstatsz3/proc/diskstats not available on this Linux versionc                 ó2   — |                       d„ ¦  «         d S )Nc                  ó,   — t          j        d¬¦  «        S ©NF)Únowrap)rl   Údisk_io_countersr1   r0   r+   ra   z@TestModuleFunctionsLeaks.test_disk_io_counters.<locals>.<lambda>—  s   € �VÔ4¸EÐBÑBÔB€ r0   rÅ   r@   s    r+   Útest_disk_io_countersz.TestModuleFunctionsLeaks.test_disk_io_counters‘  s    € ð 	�ŠÐBÐBÑCÔCÐCÐCÐCr0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Úpidsr@   s    r+   Ú	test_pidsz"TestModuleFunctionsLeaks.test_pids›  s   € à�Š•V”[Ñ!Ô!Ð!Ð!Ð!r0   c                 ó2   — |                       d„ ¦  «         d S )Nc                  ó,   — t          j        d¬¦  «        S r>  )rl   Únet_io_countersr1   r0   r+   ra   z?TestModuleFunctionsLeaks.test_net_io_counters.<locals>.<lambda>¤  s   € �VÔ3¸5ÐAÑAÔA€ r0   rÅ   r@   s    r+   Útest_net_io_countersz-TestModuleFunctionsLeaks.test_net_io_counters¡  s    € ð 	�ŠÐAÐAÑBÔBÐBÐBÐBr0   r   zneed root accessc                 óª   — t          j        d¬¦  «         t          ¦   «         5  |                      d„ ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NrÎ   ©rÑ   c                  ó,   — t          j        d¬¦  «        S )NrÎ   rJ  )rl   rÐ   r1   r0   r+   ra   z?TestModuleFunctionsLeaks.test_net_connections.<locals>.<lambda>¬  s   € ¥Ô!7¸UÐ!CÑ!CÔ!C€ r0   )rl   rÐ   r   r=   r@   s    r+   rÒ   z-TestModuleFunctionsLeaks.test_net_connections¦  s²   € õ 	Ô EÐ*Ñ*Ô*Ð*ÝÑÔð 	Eð 	EØ�LŠLÐCÐCÑDÔDÐDð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eð 	Eð 	Es   ¤AÁAÁAc                 óh   — t           rdn| j        }|                      t          j        |¬¦  «         d S )Ni @ )Ú	tolerance)r   rM  r=   rl   Únet_if_addrs)r&   rM  s     r+   Útest_net_if_addrsz*TestModuleFunctionsLeaks.test_net_if_addrs®  s1   € å!(Ð<�I�I¨d¬nˆ	Ø�Š•VÔ(°IˆÑ>Ô>Ð>Ð>Ð>r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Únet_if_statsr@   s    r+   Útest_net_if_statsz*TestModuleFunctionsLeaks.test_net_if_stats³  s   € Ø�Š•VÔ(Ñ)Ô)Ð)Ð)Ð)r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Úsensors_batteryr@   s    r+   Útest_sensors_batteryz-TestModuleFunctionsLeaks.test_sensors_battery¸  s   € ð 	�Š•VÔ+Ñ,Ô,Ð,Ð,Ð,r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Úsensors_temperaturesr@   s    r+   Útest_sensors_temperaturesz2TestModuleFunctionsLeaks.test_sensors_temperatures½  s   € ð 	�Š•VÔ0Ñ1Ô1Ð1Ð1Ð1r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Úsensors_fansr@   s    r+   Útest_sensors_fansz*TestModuleFunctionsLeaks.test_sensors_fansÂ  s   € ð 	�Š•VÔ(Ñ)Ô)Ð)Ð)Ð)r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Ú	boot_timer@   s    r+   Útest_boot_timez'TestModuleFunctionsLeaks.test_boot_timeÉ  r  r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rl   Úusersr@   s    r+   Ú
test_usersz#TestModuleFunctionsLeaks.test_usersÍ  s   € Ø�Š•V”\Ñ"Ô"Ð"Ð"Ð"r0   c                 ó2   — |                       d„ ¦  «         d S )Nc                  ó*   — t          j        d¦  «        S )NF)rl   Ú
_set_debugr1   r0   r+   ra   z9TestModuleFunctionsLeaks.test_set_debug.<locals>.<lambda>Ñ  s   € �VÔ.¨uÑ5Ô5€ r0   rÅ   r@   s    r+   Útest_set_debugz'TestModuleFunctionsLeaks.test_set_debugÐ  s   € Ø�ŠÐ5Ð5Ñ6Ô6Ð6Ð6Ð6r0   c                 óD   — |                       t          j        ¦  «         d S r"   )r=   rp   Úwinservice_enumerater@   s    r+   Útest_win_service_iterz.TestModuleFunctionsLeaks.test_win_service_iter×  s   € Ø�LŠL�Ô2Ñ3Ô3Ð3Ð3Ð3r0   c                 ó   — d S r"   r1   r@   s    r+   Útest_win_service_getz-TestModuleFunctionsLeaks.test_win_service_getÚ  s   € ØˆDr0   c                 óœ   ‡— t          t          j        ¦   «         ¦  «                             ¦   «         Š|                      ˆfd„¦  «         d S )Nc                  ó8   •— t                                ‰ ¦  «        S r"   )rp   Úwinservice_query_config©r?   s   €r+   ra   zFTestModuleFunctionsLeaks.test_win_service_get_config.<locals>.<lambda>ß  ó   ø€ ¥×!=Ò!=¸dÑ!CÔ!C€ r0   ©Únextrl   Úwin_service_iterr?   r=   ©r&   r?   s    @r+   Útest_win_service_get_configz4TestModuleFunctionsLeaks.test_win_service_get_configÝ  óG   ø€ Ý�Ô/Ñ1Ô1Ñ2Ô2×7Ò7Ñ9Ô9ˆDØ�LŠLÐCÐCÐCÐCÑDÔDÐDÐDÐDr0   c                 óœ   ‡— t          t          j        ¦   «         ¦  «                             ¦   «         Š|                      ˆfd„¦  «         d S )Nc                  ó8   •— t                                ‰ ¦  «        S r"   )rp   Úwinservice_query_statusrn  s   €r+   ra   zFTestModuleFunctionsLeaks.test_win_service_get_status.<locals>.<lambda>ã  ro  r0   rp  rs  s    @r+   Útest_win_service_get_statusz4TestModuleFunctionsLeaks.test_win_service_get_statusá  ru  r0   c                 óœ   ‡— t          t          j        ¦   «         ¦  «                             ¦   «         Š|                      ˆfd„¦  «         d S )Nc                  ó8   •— t                                ‰ ¦  «        S r"   )rp   Úwinservice_query_descrrn  s   €r+   ra   zKTestModuleFunctionsLeaks.test_win_service_get_description.<locals>.<lambda>ç  s   ø€ ¥×!<Ò!<¸TÑ!BÔ!B€ r0   rp  rs  s    @r+   Ú test_win_service_get_descriptionz9TestModuleFunctionsLeaks.test_win_service_get_descriptionå  sG   ø€ Ý�Ô/Ñ1Ô1Ñ2Ô2×7Ò7Ñ9Ô9ˆDØ�LŠLÐBÐBÐBÐBÑCÔCÐCÐCÐCr0   N)5rÚ   rÛ   rÜ   rÝ   r;   r2   r  r  r˜   r  r!  r   rÞ   rß   r   ÚplatformÚmachiner
   r%  r   r(  r+  r   r.  r3  r8  r;  r   rr   ÚpathÚexistsrA  rD  r   rH  ÚgetuidrÒ   rO  rR  r   rU  r   rX  r   r[  r^  ra  re  rh  rj  rt  ry  r}  r1   r0   r+   r  r  O  sú  € € € € € Ø0Ð0ð-ð -ð -ð ÐÑÔð=ð =ñ Ôð=ð ÐÑÔð>ð >ñ Ôð>ð ÐÑÔð'ð 'ñ Ôð'ð ÐÑÔð<ð <ñ Ôð<ð ÐÑÔð'ð 'ñ Ôð'ð ÐÑÔà„[×ÒØÐ/Ð"�(Ô"Ñ$Ô$¨Ò/Ð8Nð ñ ô ð „[×Ò˜LÐ(°ÐÑAÔAð&ð &ñ BÔAñô ñ Ôð&ð „[×Ò˜G˜¨NÐÑ;Ô;ð(ð (ñ <Ô;ð(ð,ð ,ð ,ð „[×Ò˜Ð&NÐÑOÔOð)ð )ñ PÔOð)ðJð Jð JðBð Bð Bð-ð -ð -ð „[×ÒØÐ7�b”g—n’nÐ%6Ñ7Ô7Ð7ØDð ñ ô ð ÐÑÔðDð Dñ Ôñ	ô ð
Dð
 ÐÑÔð"ð "ñ Ôð"ð
 ÐÑÔØ„[×ÒÐ/Ð/¸ÐÑHÔHðCð Cñ IÔHñ ÔðCð ÐÑÔØ„[×Ò˜Ð2 ) "¤)¡+¤+°Ò"2Ð;MÐÑNÔNðEð Eñ OÔNñ ÔðEð?ð ?ð ?ð
*ð *ð *ð
 ÐÑÔØ„[×ÒÐ/Ð/¸ÐÑHÔHð-ð -ñ IÔHñ Ôð-ð ÐÑÔØ„[×ÒÐ4Ð4¸_ÐÑMÔMð2ð 2ñ NÔMñ Ôð2ð ÐÑÔØ„[×ÒÐ,Ð,°_ÐÑEÔEð*ð *ñ FÔEñ Ôð*ð
 ÐÑÔð'ð 'ñ Ôð'ð#ð #ð #ð7ð 7ð 7ð ð Dð	4ð 	4ð 	4ð	ð 	ð 	ð	Eð 	Eð 	Eð	Eð 	Eð 	Eð	Dð 	Dð 	Dð 	Dð 	Dð%Dð Dr0   r  ).rÝ   r-   rr   r~  rl   Úpsutil._commonr   r   r   r   r   r   Úpsutil.testsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú_psplatformrp   r|   rb   r%   r2   r4   rá   rÞ   rß   r  r  r1   r0   r+   ú<module>r†     sW  ððð ð Ð Ð Ð Ø 	€	€	€	Ø €€€à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø %Ð %Ð %Ð %Ð %Ð %Ø $Ð $Ð $Ð $Ð $Ð $Ø #Ð #Ð #Ð #Ð #Ð #Ø (Ð (Ð (Ð (Ð (Ð (Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø )Ð )Ð )Ð )Ð )Ð )Ø -Ð -Ð -Ð -Ð -Ð -Ø #Ð #Ð #Ð #Ð #Ð #Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø )Ð )Ð )Ð )Ð )Ð )Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø #Ð #Ð #Ð #Ð #Ð #Ø *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø )Ð )Ð )Ð )Ð )Ð )Ø "Ð "Ð "Ð "Ð "Ð "ð ÔÔ€Øˆ6Œ>ÑÔ€Ø€	ðð ð ð8r:ð r:ð r:ð r:ð r:˜^ñ r:ô r:ð r:ðj3ð 3ð 3ð 3ð 3Ð!7ñ 3ô 3ð 3ðl „×Ò˜�K¨ÐÑ7Ô7ðLð Lð Lð Lð L Nñ Lô Lñ 8Ô7ðLðXDð XDð XDð XDð XD˜~ñ XDô XDð XDð XDð XDr0   