§
    ç·jcX  ã                   ó  — d dl Zd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
ej        dk    rdZndZd                     e ej        ¦   «         ¦  «        Zedz   Zej        dk    rd dlZ ej        de¦  «        ZdZej        d	k    rn ej        ¦   «         j        d
k    rUedz   Z	 e                      ej        ¦   «         ¦  «          ede›d ej        ¦   «         ›d�¦  «         dZnj# e$ r Y ncw xY wn^ej        dvrU	 d                      ej        ¦   «         ¦  «         n1# e$ r) ed                      ej        ¦   «         d¦  «        z   ZY nw xY wdZdD ]6Z	  ej         ej        e¦  «        ¦  «        ek    re‚	 eZ n# e$ r Y Œ3w xY w ej         ¦   «         Z!dZ"dD ]DZ	 e                      ej        ¦   «         ¦  «         Œ&# e$ r  ej        e¦  «        ez   Z"Y  nw xY wereez   Z#ndZ#e#peZ$d„ Z%da&d„ Z'd„ Z(da)d„ Z*d„ Z+da,d„ Z-d„ Z.da/d„ Z0d„ Z1d„ Z2d „ Z3ej         4                    d!¦  «        rd;d#„Z5d$„ Z6d%„ Z7d&„ Z8d'„ Z9nej3        Z6ej:        Z7d(„ Z8d)„ Z9d*„ Z:d+„ Z;ej<        d<d,„¦   «         Z=ej<        d;d-„¦   «         Z>ej<        d=d/„¦   «         Z?d0„ Z@ej<        d1„ ¦   «         ZAd2„ ZB G d3„ d4¦  «        ZCd5„ ZD eEed6¦  «        rej<        d7„ ¦   «         ZFnej<        d8„ ¦   «         ZF G d9„ d:ejG        jH        ¦  «        ZIdS )>é    NÚjavaz$testz@testz	{}_{}_tmpu   -Ã Ã²É˜Å�ÄŸÚdarwinÚNFDÚnté   u   -å…±Å�â™¡Í£í²€zWARNING: The filename z, CAN be encoded by the filesystem encoding (z.). Unicode filename tests may not be effective>   Úwasir   Ú
emscriptenó   ÿs   -ÿÚsurrogateescapeÚ )õ   Ã¦u   Ä°u   Å�u   Ï†u   Ðšu   ×�u   ØŒu   Øªu   à¸�õ   Â u   â‚¬)s   çwðr
   s   ®Õí²€s   í´€s   �˜c                  ó   — t          t          d¦  «        } 	 |                      ¦   «         |                      ¦   «          t	          t          ¦  «         S # |                      ¦   «          t	          t          ¦  «         w xY w)z`
    Create an invalid file descriptor by opening and closing a file and return
    its fd.
    Úwb)ÚopenÚTESTFNÚfilenoÚcloseÚunlink©Úfiles    ú-/usr/lib/python3.11/test/support/os_helper.pyÚmake_bad_fdr   š   s]   € õ
 •˜ÑÔ€DðØ�{Š{‰}Œ}à�
Š
‰ŒˆÝ�v‰Œˆˆøð 	�
Š
‰ŒˆÝ�v‰Œˆˆøøøs   —A Á*A=c                  ó  — t           �t           S t          j                             t          ¦  «        } | dz   }	 t          j        | |¦  «         d}t          j        |¦  «         n# t          t          t          f$ r d}Y nw xY w|a |S )NÚcan_symlinkTF)
Ú_can_symlinkÚosÚpathÚabspathr   ÚsymlinkÚremoveÚOSErrorÚNotImplementedErrorÚAttributeError)ÚsrcÚsymlink_pathÚcans      r   r   r   ª   s˜   € åÐÝÐõ Œ'�/Š/�&Ñ
!Ô
!€CØ˜Ñ&€Lð Ý
Œ
�3˜Ñ%Ô%Ð%Øˆõ 	Œ	�,ÑÔÐÐøõ Õ(­.Ð9ð ð ð Øˆˆˆðøøøð €LØ€Js   ¹A% Á%BÂ Bc                 ód   — t          ¦   «         }d}|r| n t          j        |¦  «        | ¦  «        S )z8Skip decorator for tests that require functional symlinkz*Requires functional symlink implementation)r   ÚunittestÚskip©ÚtestÚokÚmsgs      r   Úskip_unless_symlinkr/   ¾   s4   € å	‰Œ€BØ
6€CØÐ3ˆ4ˆ4Ð-�8œ=¨Ñ-Ô-¨dÑ3Ô3Ð3ó    c                  óh  — dd l } t          �t          S t          t          d¦  «        sd}�n„dd l}|                      ¦   «         }|                      |¬¦  «        \  }}	 t          t          d¦  «        5 }	 t          j	        |dd¦  «         t          j	        |dd	¦  «         t          j	        | 
                    ¦   «         dd¦  «         |                     ¦   «         }t          j        d
|¦  «        }|d u p%t          |                     d¦  «        ¦  «        dk    }n# t           $ r d}Y nw xY wd d d ¦  «         n# 1 swxY w Y   t#          t          ¦  «         t#          |¦  «         t%          |¦  «         n7# t#          t          ¦  «         t#          |¦  «         t%          |¦  «         w xY w|a|S )Nr   ÚsetxattrF©Údirr   s	   user.testr0   s   trusted.foos   42z2.6.(\d{1,2})é   é'   )ÚtempfileÚ
_can_xattrÚhasattrr   ÚplatformÚmkdtempÚmkstempr   r   r2   r   ÚreleaseÚreÚmatchÚintÚgroupr"   r   Úrmdir)	r7   r'   r:   Útmp_dirÚtmp_fpÚtmp_nameÚfpÚkernel_versionÚms	            r   Ú	can_xattrrI   È   sá  € Ø€O€O€OåÐÝÐÝ•2�zÑ"Ô"ð Øˆ‰àˆˆˆØ×"Ò"Ñ$Ô$ˆØ#×+Ò+°Ð+Ñ8Ô8Ñˆ�ð	Ý•f˜dÑ#Ô#ð   rð õ ”K ¨°cÑ:Ô:Ð:Ý”K ¨.¸%Ñ@Ô@Ð@Ý”K §	¢	¡¤¨\¸3Ñ?Ô?Ð?à%-×%5Ò%5Ñ%7Ô%7�NÝœÐ!1°>ÑBÔB�AØ˜t˜)Ð<¥s¨1¯7ª7°1©:¬:¡¤¸"Ò'<�C�CøÝð  ð  ð  Ø�C�C�Cð øøøð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  õ •6‰NŒNˆNÝ�8ÑÔÐÝ�'‰NŒNˆNˆNøõ •6‰NŒNˆNÝ�8ÑÔÐÝ�'‰NŒNˆNˆNøøøØ€JØ€JsU   ÁE9 Á3D;Á5B'DÄD;ÄD,Ä)D;Ä+D,Ä,D;Ä/E9 Ä;D?Ä?E9 ÅD?ÅE9 Å94F-c                 ód   — t          ¦   «         }d}|r| n t          j        |¦  «        | ¦  «        S )zDSkip decorator for tests that require functional extended attributesz(no non-broken extended attribute support)rI   r)   r*   r+   s      r   Úskip_unless_xattrrK   é   s4   € å	‰Œ€BØ
4€CØÐ3ˆ4ˆ4Ð-�8œ=¨Ñ-Ô-¨dÑ3Ô3Ð3r0   c                  ó„  — t           �t           S t          t          d¦  «        s	da t           S 	 t          t          d¦  «        5 } 	 t          j        t          d¦  «         t          j        t          ¦  «        j        }t          j        t          d¦  «         t          j        t          ¦  «        j        }t          j        |¦  «        t          j        |¦  «        k    }n# t          $ r}d}Y d }~nd }~ww xY wd d d ¦  «         n# 1 swxY w Y   t          t          ¦  «         n# t          t          ¦  «         w xY w|a |S )NÚchownFr   iÿ  i¶  )Ú
_can_chmodr9   r   r   r   ÚchmodÚstatÚst_modeÚS_IMODEr"   r   )ÚfÚmode1Úmode2r'   Úes        r   Ú	can_chmodrW   ò   sg  € åÐÝÐÝ•2�wÑÔð Øˆ
ÝÐðÝ•&˜$ÑÔð 		A 1ðAÝ”� Ñ'Ô'Ð'Ýœ¥™œÔ/�Ý”� Ñ'Ô'Ð'Ýœ¥™œÔ/�õ ”l 5Ñ)Ô)­T¬\¸%Ñ-@Ô-@Ò@��øõ ð ð ð Ø������øøøøðøøøð		Að 		Að 		Añ 		Aô 		Að 		Að 		Að 		Að 		Að 		Að 		Aøøøð 		Að 		Að 		Að 		Aõ 	�v‰Œˆˆø��v‰ŒˆˆøøøØ€JØ€JsZ   ®D% ÁDÁA0C Â5+DÃ 
C6Ã*C1Ã,DÃ1C6Ã6DÃ9D% ÄD	Ä	D% ÄD	ÄD% Ä%D;c                 ód   — t          ¦   «         }d}|r| n t          j        |¦  «        | ¦  «        S )z`Skip tests that require working os.chmod()

    WASI SDK 15.0 cannot change file mode bits.
    zrequires working os.chmod())rW   r)   r*   r+   s      r   Úskip_unless_working_chmodrY   
  s6   € õ
 
‰Œ€BØ
'€CØÐ3ˆ4ˆ4Ð-�8œ=¨Ñ-Ô-¨dÑ3Ô3Ð3r0   c                  óÀ  — t          ¦   «         sdat          �t          S 	 t          t          d¦  «        5 } t	          j        t          d¦  «         	 t          t          d¦  «        5  	 d d d ¦  «         n# 1 swxY w Y   dan# t          $ r daY nw xY wd d d ¦  «         n# 1 swxY w Y   t          t          ¦  «         n# t          t          ¦  «         w xY wt          S )NFr   é   T)rW   Ú_can_dac_overrider   r   r   rO   r"   r   )rS   s    r   Úcan_dac_overrider]     sa  € õ ‰;Œ;ð "Ø!ÐÝÐ$Ý Ð ðÝ•&˜$ÑÔð 	) 1ÝŒH•V˜UÑ#Ô#Ð#ð)Ý�& $Ñ'Ô'ð ð Øðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 %)Ð!Ð!øõ ð *ð *ð *Ø$)Ð!Ð!Ð!ð*øøøð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)õ 	�v‰Œˆˆø��v‰ŒˆˆøøøåÐsv    C  µB ÁBÁ&A4Á(BÁ4A8	Á8BÁ;A8	Á<BÁ?B ÂBÂB ÂBÂB ÂC  Â B$Â$C  Â'B$Â(C  Ã Cc                 óf   — t          ¦   «          }d}|r| n t          j        |¦  «        | ¦  «        S )Nz"incompatible with CAP_DAC_OVERRIDE©r]   r)   r*   r+   s      r   Úskip_if_dac_overrider`   2  s9   € ÝÑÔÐ	€BØ
.€CØÐ3ˆ4ˆ4Ð-�8œ=¨Ñ-Ô-¨dÑ3Ô3Ð3r0   c                 ód   — t          ¦   «         }d}|r| n t          j        |¦  «        | ¦  «        S )Nzrequires CAP_DAC_OVERRIDEr_   r+   s      r   Úskip_unless_dac_overriderb   8  s6   € Ý	Ñ	Ô	€BØ
%€CØÐ3ˆ4ˆ4Ð-�8œ=¨Ñ-Ô-¨dÑ3Ô3Ð3r0   c                 óV   — 	 t          | ¦  «         d S # t          t          f$ r Y d S w xY w©N)Ú_unlinkÚFileNotFoundErrorÚNotADirectoryError©Úfilenames    r   r   r   >  sC   € ðÝ�ÑÔÐÐÐøÝÕ1Ð2ð ð ð Øˆˆðøøøs   ‚ “(§(ÚwinFc                 ó<  —  | |¦  «         |r|}n&t           j                             |¦  «        \  }}|pd}d}|dk     r>t          j        |¦  «        }|r|sn||v sd S t	          j        |¦  «         |dz  }|dk     °>t          j        d|z   t          d¬¦  «         d S )Nú.gü©ñÒMbP?g      ð?r   z)tests may fail, delete still pending for é   ©Ú
stacklevel)	r   r   ÚsplitÚlistdirÚtimeÚsleepÚwarningsÚwarnÚRuntimeWarning)ÚfuncÚpathnameÚwaitallÚdirnameÚnameÚtimeoutÚLs          r   Ú_waitforr~   F  sÖ   € àˆˆX‰Œˆàð 	%ØˆGˆGåœGŸMšM¨(Ñ3Ô3‰MˆG�TØ�n ˆGð ˆØ˜Šmˆmõ ”
˜7Ñ#Ô#ˆAØ ð �Að ð  d¨a i iØ�åŒJ�wÑÔÐØ�q‰LˆGð ˜Šmˆmõ 	ŒÐAÀHÑLÝ$°ð	4ñ 	4ô 	4ð 	4ð 	4ð 	4r0   c                 ó:   — t          t          j        | ¦  «         d S rd   )r~   r   r   rh   s    r   re   re   g  s   € Ý•”˜HÑ%Ô%Ð%Ð%Ð%r0   c                 ó:   — t          t          j        | ¦  «         d S rd   )r~   r   rB   ©rz   s    r   Ú_rmdirr‚   j  s   € Ý•”˜7Ñ#Ô#Ð#Ð#Ð#r0   c                 ól   ‡‡— ddl mŠ ˆˆfd„Št          ‰| d¬¦  «         t          ˆfd„| ¦  «         d S )Nr   ©Ú
_force_runc                 óÐ  •—  ‰| t           j        | ¦  «        D ]Ì}t           j                             | |¦  «        }	 t          j        |¦  «        j        }n:# t          $ r-}t          d|›d|›�t          j	        ¬¦  «         d}Y d }~nd }~ww xY wt          j        |¦  «        r*t          ‰|d¬¦  «          ‰|t           j        |¦  «         Œµ ‰|t           j        |¦  «         ŒÍd S )Nzsupport.rmtree(): os.lstat(z) failed with r   r   T©ry   )r   rq   r   ÚjoinÚlstatrQ   r"   ÚprintÚsysÚ
__stderr__rP   ÚS_ISDIRr~   rB   r   )r   r{   ÚfullnameÚmodeÚexcr…   Ú_rmtree_inners        €€r   r‘   z_rmtree.<locals>._rmtree_innerp  s  ø€ Ø"˜
 4­¬°TÑ:Ô:ð >ð >�Ýœ7Ÿ<š<¨¨dÑ3Ô3�ðÝœ8 HÑ-Ô-Ô5�D�DøÝð ð ð Ý�EØ%˜X˜X s sð,å"œ~ð/ñ /ô /ð /ð �D�D�D�D�D�Døøøøð	øøøõ
 ”< Ñ%Ô%ð >Ý˜]¨H¸dÐCÑCÔCÐCØ�J˜x­¬°8Ñ<Ô<Ð<Ð<à�J˜x­¬°HÑ=Ô=Ð=Ð=ð>ð >s   ¼AÁ
BÁ #BÂBTr‡   c                 ó2   •—  ‰| t           j        | ¦  «        S rd   )r   rB   )Úpr…   s    €r   ú<lambda>z_rmtree.<locals>.<lambda>€  s   ø€ ˜:˜: a­¬°1Ñ5Ô5€ r0   )Útest.supportr…   r~   )r   r…   r‘   s    @@r   Ú_rmtreer–   m  sk   øø€ Ø+Ð+Ð+Ð+Ð+Ð+ð	>ð 	>ð 	>ð 	>ð 	>ð 	>õ 	� ¨dÐ3Ñ3Ô3Ð3ÝÐ5Ð5Ð5Ð5°tÑ<Ô<Ð<Ð<Ð<r0   c                 óð   — 	 dd l }|                     t          | ¦  «        dz  ¦  «        }|j        j                             | |t          |¦  «        ¦  «        }|r
|d |…         S n# t          $ r Y nw xY w| S )Nr   r   )ÚctypesÚcreate_unicode_bufferÚlenÚwindllÚkernel32ÚGetLongPathNameWÚImportError)r   r˜   ÚbufferÚlengths       r   Ú	_longpathr¡   ‚  sœ   € ð
	'ØˆMˆMˆMð
 ×1Ò1µ#°d±)´)¸a±-Ñ@Ô@ˆFØ”]Ô+×<Ò<¸TÀ6Ý=@À¹[¼[ñJô JˆFàð 'Ø˜g˜v˜g”Ð&ð'øõ ð 	ð 	ð 	àˆDð	øøøð ˆs   ‚A& Á&
A3Á2A3c                 ó¨   ‡— dd l }	 |                     | ¦  «         d S # t          $ r Y nw xY wˆfd„Š ‰| ¦  «         t          j        | ¦  «         d S )Nr   c                 ó~  •— ddl m}  || t          j        | ¦  «        D ]�}t          j                             | |¦  «        }	 t          j        |¦  «        j        }n# t          $ r d}Y nw xY wt          j
        |¦  «        r# ‰|¦  «          || t          j        |¦  «         Œ† || t          j        |¦  «         Œžd S )Nr   r„   )r•   r…   r   rq   r   rˆ   r‰   rQ   r"   rP   r�   rB   r   )r   r…   r{   rŽ   r�   r‘   s        €r   r‘   z_rmtree.<locals>._rmtree_inner›  sä   ø€ Ø/Ð/Ð/Ð/Ð/Ð/Ø"˜
 4­¬°TÑ:Ô:ð 
:ð 
:�Ýœ7Ÿ<š<¨¨dÑ3Ô3�ðÝœ8 HÑ-Ô-Ô5�D�DøÝð ð ð Ø�D�D�Dðøøøå”< Ñ%Ô%ð :Ø!�M (Ñ+Ô+Ð+Ø�J˜t¥R¤X¨xÑ8Ô8Ð8Ð8à�J˜t¥R¤Y°Ñ9Ô9Ð9Ð9ð
:ð 
:s   ÁAÁA+Á*A+)ÚshutilÚrmtreer"   r   rB   )r   r¤   r‘   s     @r   r–   r–   “  s„   ø€ Øˆˆˆð	Ø�MŠM˜$ÑÔÐØˆFøÝð 	ð 	ð 	ØˆDð	øøøð	:ð 	:ð 	:ð 	:ð 	:ð 	ˆ�dÑÔÐÝ
Œ�‰Œˆˆˆs   ‡ ž
+ª+c                 ó   — | S rd   © ©r   s    r   r¡   r¡   «  ó   € Øˆr0   c                 óH   — 	 t          | ¦  «         d S # t          $ r Y d S w xY wrd   )r‚   rf   r�   s    r   rB   rB   ¯  s8   € ðÝˆw‰ŒˆˆˆøÝð ð ð Øˆˆðøøøó   ‚ “
! !c                 óH   — 	 t          | ¦  «         d S # t          $ r Y d S w xY wrd   )r–   rf   r¨   s    r   r¥   r¥   ¶  s8   € ðÝ�‰ŒˆˆˆøÝð ð ð Øˆˆðøøør«   c              #   ó  K  — ddl }d}| €6|                     ¦   «         } d}t          j                             | ¦  «        } nT	 t          j        | ¦  «         d}n<# t          $ r/}|s‚ t          j        d| ›d|› �t          d¬¦  «         Y d}~nd}~ww xY w|rt          j
        ¦   «         }	 | V — |r(|t          j
        ¦   «         k    rt          | ¦  «         dS dS dS # |r'|t          j
        ¦   «         k    rt          | ¦  «         w w w xY w)	a¢  Return a context manager that creates a temporary directory.

    Arguments:

      path: the directory to create temporarily.  If omitted or None,
        defaults to creating a temporary directory using tempfile.mkdtemp.

      quiet: if False (the default), the context manager raises an exception
        on error.  Otherwise, if the path is specified and cannot be
        created, only a warning is issued.

    r   NFTz5tests may fail, unable to create temporary directory ú: é   rn   )r7   r;   r   r   ÚrealpathÚmkdirr"   rt   ru   rv   Úgetpidr¥   )r   Úquietr7   Údir_createdr�   Úpids         r   Útemp_dirr¶   ½  sr  è è € ð €O€O€OØ€KØ€|Ø×ÒÑ!Ô!ˆØˆÝŒw×Ò Ñ%Ô%ˆˆð	8ÝŒH�T‰NŒNˆNØˆKˆKøÝð 	8ð 	8ð 	8Øð ØÝŒMð AØ15ðAð AØ;>ðAð Aå(°Qð8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøøð	8øøøð ð ÝŒi‰kŒkˆðØˆ
ˆ
ˆ
ð ð 	˜3¥"¤)¡+¤+Ò-Ð-Ý�4‰LŒLˆLˆLˆLð	ð 	Ð-Ð-øˆ;ð 	˜3¥"¤)¡+¤+Ò-Ð-Ý�4‰LŒLˆLˆLð	Ð-øøøs$   ÁA Á
BÁ#%BÂBÂ+C Ã,D	c              #   ó”  K  — t          j        ¦   «         }	 t          j        t           j                             | ¦  «        ¦  «         n<# t
          $ r/}|s‚ t          j        d| ›d|› �t          d¬¦  «         Y d}~nd}~ww xY w	 t          j        ¦   «         V — t          j        |¦  «         dS # t          j        |¦  «         w xY w)ag  Return a context manager that changes the current working directory.

    Arguments:

      path: the directory to use as the temporary current working directory.

      quiet: if False (the default), the context manager raises an exception
        on error.  Otherwise, it issues only a warning and keeps the current
        working directory the same.

    zBtests may fail, unable to change the current working directory to r®   r¯   rn   N)	r   ÚgetcwdÚchdirr   r°   r"   rt   ru   rv   )r   r³   Ú	saved_dirr�   s       r   Ú
change_cwdr»   æ  sþ   è è € õ ”	‘”€Ið4Ý
Œ•”×!Ò! $Ñ'Ô'Ñ(Ô(Ð(Ð(øÝð 4ð 4ð 4Øð 	ØÝŒð 6Ø&*ð6ð 6Ø03ð6ð 6å$°ð	4ñ 	4ô 	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4øøøøð4øøøðÝŒi‰kŒkÐÐÐå
Œ�ÑÔÐÐÐø�Œ�ÑÔÐÐøøøs#   —1A	 Á	
BÁ%A=Á=BÂB1 Â1CÚtempcwdc              #   ó¸   K  — t          | |¬¦  «        5 }t          ||¬¦  «        5 }|V — ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )aö  
    Context manager that temporarily creates and changes the CWD.

    The function temporarily changes the current working directory
    after creating a temporary directory in the current directory with
    name *name*.  If *name* is None, the temporary directory is
    created using tempfile.mkdtemp.

    If *quiet* is False (default) and it is not possible to
    create or change the CWD, an error is raised.  If *quiet* is True,
    only a warning is raised and the original CWD is used.

    )r   r³   )r³   N)r¶   r»   )r{   r³   Ú	temp_pathÚcwd_dirs       r   Útemp_cwdrÀ     sê   è è € õ 
�t 5Ð	)Ñ	)Ô	)ð ¨YÝ˜	¨Ð/Ñ/Ô/ð 	°7ØˆMˆMˆMð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s,   ”A¦7«A·;	»A¾;	¿AÁAÁAc                 ó    — t          j        | t           j        t           j        z  t           j        z  ¦  «        }t          j        |¦  «         dS )z>Create an empty file. If the file already exists, truncate it.N)r   r   ÚO_WRONLYÚO_CREATÚO_TRUNCr   )ri   Úfds     r   Úcreate_empty_filerÆ     s4   € å	Œ��2œ;­¬Ñ3µb´jÑ@Ñ	AÔ	A€BÝ„HˆR�L„L€L€L€Lr0   c              #   ó:  K  — t           j                             | ¦  «        sJ ‚t           j        }t	          t           d¦  «        r|t           j        z  }t          j        | |¦  «        }	 |V — t          j        |¦  «         dS # t          j        |¦  «         w xY w)z&Open a file descriptor to a directory.ÚO_DIRECTORYN)r   r   ÚisdirÚO_RDONLYr9   rÈ   r   r   )r   ÚflagsÚdir_fds      r   Úopen_dir_fdrÍ     s’   è è € õ Œ7�=Š=˜ÑÔÐÐÐÝŒK€EÝ�r�=Ñ!Ô!ð  Ø•”ÑˆÝŒW�T˜5Ñ!Ô!€FðØˆˆˆå
Œ�ÑÔÐÐÐø�Œ�ÑÔÐÐøøøs   Á*B ÂBc                 óN  — ddl }|                     | ¬¦  «        5 }|j        }|                     ¦   «         }||k    r|                     ¦   «         }	 t
          j                             ||¦  «        cddd¦  «         S # t          $ r Y ddd¦  «         dS w xY w# 1 swxY w Y   dS )zODetects if the file system for the specified directory
    is case-insensitive.r   Nr3   F)	r7   ÚNamedTemporaryFiler{   ÚupperÚlowerr   r   Úsamefilerf   )Ú	directoryr7   ÚbaseÚ	base_pathÚ	case_paths        r   Úfs_is_case_insensitiver×   *  s  € ð €O€O€OØ	×	$Ò	$¨Ð	$Ñ	3Ô	3ð °tØ”Iˆ	Ø—O’OÑ%Ô%ˆ	Ø˜	Ò!Ð!Ø!ŸšÑ)Ô)ˆIð	Ý”7×#Ò# I¨yÑ9Ô9ðð ð ð ñ ô ð ð øõ !ð 	ð 	ð 	Øðð ð ñ ô ð ð ð ð	øøøðð ð ð øøøð ð ð ð ð ð s/   ›6BÁA>Á>
BÂBÂBÂBÂBÂ!Bc                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚFakePathz.Simple implementing of the path protocol.
    c                 ó   — || _         d S rd   r¨   )Úselfr   s     r   Ú__init__zFakePath.__init__<  s   € ØˆŒ	ˆ	ˆ	r0   c                 ó   — d| j         ›d�S )Nz
<FakePath ú>r¨   ©rÛ   s    r   Ú__repr__zFakePath.__repr__?  s   € Ø*˜DœIÐ*Ð*Ð*Ð*r0   c                 óº   — t          | j        t          ¦  «        s4t          | j        t          ¦  «        r!t	          | j        t          ¦  «        r| j        ‚| j        S rd   )Ú
isinstancer   ÚBaseExceptionÚtypeÚ
issubclassrß   s    r   Ú
__fspath__zFakePath.__fspath__B  sO   € Ý�t”y¥-Ñ0Ô0ð 	Ý�t”y¥$Ñ'Ô'ð	å˜4œ9¥mÑ4Ô4ð	ð ”)ˆOà”9Ðr0   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rÜ   rà   ræ   r§   r0   r   rÙ   rÙ   9  sK   € € € € € ðð ðð ð ð+ð +ð +ðð ð ð ð r0   rÙ   c                  óÀ  — t           j                             d¦  «        r7	 t          j        d¦  «        } t          | ¦  «        dz
  S # t          $ r Y nw xY wd}t          t          d¦  «        r&	 t          j        d¦  «        }n# t          $ r Y nw xY wd}t           j        dk    rV	 d	dl
}|j         i }|j        |j        |j        fD ]}|                     |d	¦  «        ||<   Œn# t          t           f$ r Y nw xY w	 d	}t#          |¦  «        D ]]}	 t          j        |¦  «        }t          j        |¦  «         |dz  }Œ1# t          $ r }|j        t(          j        k    r‚ Y d}~ŒVd}~ww xY w	 |�3|j        |j        |j        fD ]}|                     |||         ¦  «         Œn;# |�3|j        |j        |j        fD ]}|                     |||         ¦  «         Œw w xY w|S )
z/Count the number of open file descriptors.
    )ÚlinuxÚfreebsdr	   z/proc/self/fdr5   r[   ÚsysconfÚSC_OPEN_MAXNÚwin32r   )r‹   r:   Ú
startswithr   rq   rš   rf   r9   rî   r"   ÚmsvcrtÚCrtSetReportModeÚCRT_WARNÚ	CRT_ERRORÚ
CRT_ASSERTr$   rž   ÚrangeÚdupr   ÚerrnoÚEBADF)	ÚnamesÚMAXFDÚ	old_modesrò   Úreport_typeÚcountrÅ   Úfd2rV   s	            r   Úfd_countr  K  s¢  € õ „|×ÒÐAÑBÔBð ð	Ý”J˜Ñ/Ô/ˆEõ �u‘:”: ‘>Ð!øÝ ð 	ð 	ð 	ØˆDð	øøøð €EÝ�r�9ÑÔð ð	Ý”J˜}Ñ-Ô-ˆEˆEøÝð 	ð 	ð 	ØˆDð	øøøð €IÝ
„|�wÒÐð	DØˆMˆMˆMØÔ#Ð#ð
 ˆIØ &¤Ø &Ô 0Ø &Ô 1ð 3ð Dð D�ð *0×)@Ò)@ÀØABñ*Dô *D�	˜+Ñ&Ð&ðDøõ ¥Ð,ð 	ð 	ð 	àˆDð	øøøðMØˆÝ˜‘,”,ð 
	ð 
	ˆBð	õ ”f˜R‘j”j�õ
 ”˜‘”�Ø˜‘
��øõ ð ð ð Ø”7�eœkÒ)Ð)Øð *Ð)Ð)Ð)Ð)øøøøðøøøð
	ð Ð Ø &¤Ø &Ô 0Ø &Ô 1ð 3ð Mð M�ð ×'Ò'¨°Y¸{Ô5KÑLÔLÐLÐLøøð	 Ð Ø &¤Ø &Ô 0Ø &Ô 1ð 3ð Mð M�ð ×'Ò'¨°Y¸{Ô5KÑLÔLÐLÐLð	 !ðMøøøð
 €Lsk   ¡%A Á
AÁAÁ/B Â
BÂBÂ'C% Ã%C9Ã8C9Ã=F# ÄD?Ä%F# Ä?
E)Å	E$ÅF# Å$E)Å)F# Æ#8GÚumaskc              #   ó–   K  — t          j        | ¦  «        }	 dV — t          j        |¦  «         dS # t          j        |¦  «         w xY w)z8Context manager that temporarily sets the process umask.N)r   r  )r  Úoldmasks     r   Ú
temp_umaskr  ˆ  sO   è è € õ ”(˜5‘/”/ˆð	ØˆEˆEˆEåŒH�WÑÔÐÐÐø�BŒH�WÑÔÐÐøøøs	   ˜2 ²Ac              #   ó   K  — dV — dS )z"no-op on platforms without umask()Nr§   )r  s    r   r  r  ‘  s   è è € ð 	ˆˆˆˆˆr0   c                   óZ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ ZdS )ÚEnvironmentVarGuardz_Class to help protect the environment variable properly.  Can be used as
    a context manager.c                 ó6   — t           j        | _        i | _        d S rd   )r   ÚenvironÚ_environÚ_changedrß   s    r   rÜ   zEnvironmentVarGuard.__init__œ  s   € Ýœ
ˆŒØˆŒˆˆr0   c                 ó   — | j         |         S rd   )r  ©rÛ   Úenvvars     r   Ú__getitem__zEnvironmentVarGuard.__getitem__   s   € ØŒ}˜VÔ$Ð$r0   c                 óp   — || j         vr"| j                             |¦  «        | j         |<   || j        |<   d S rd   ©r  r  Úget©rÛ   r  Úvalues      r   Ú__setitem__zEnvironmentVarGuard.__setitem__£  s=   € à˜œÐ&Ð&Ø$(¤M×$5Ò$5°fÑ$=Ô$=ˆDŒM˜&Ñ!Ø %ˆŒ�fÑÐÐr0   c                 ó‚   — || j         vr"| j                             |¦  «        | j         |<   || j        v r
| j        |= d S d S rd   r  r  s     r   Ú__delitem__zEnvironmentVarGuard.__delitem__©  sP   € à˜œÐ&Ð&Ø$(¤M×$5Ò$5°fÑ$=Ô$=ˆDŒM˜&Ñ!Ø�T”]Ð"Ð"Ø”˜fÐ%Ð%Ð%ð #Ð"r0   c                 ó4   — | j                              ¦   «         S rd   )r  Úkeysrß   s    r   r  zEnvironmentVarGuard.keys°  s   € ØŒ}×!Ò!Ñ#Ô#Ð#r0   c                 ó*   — t          | j        ¦  «        S rd   )Úiterr  rß   s    r   Ú__iter__zEnvironmentVarGuard.__iter__³  s   € Ý�D”MÑ"Ô"Ð"r0   c                 ó*   — t          | j        ¦  «        S rd   )rš   r  rß   s    r   Ú__len__zEnvironmentVarGuard.__len__¶  s   € Ý�4”=Ñ!Ô!Ð!r0   c                 ó   — || |<   d S rd   r§   r  s      r   ÚsetzEnvironmentVarGuard.set¹  s   € ØˆˆV‰ˆˆr0   c                 ó   — | |= d S rd   r§   r  s     r   ÚunsetzEnvironmentVarGuard.unset¼  s   € Ø�ˆLˆLˆLr0   c                 ó    — t          | ¦  «        S rd   )Údictrß   s    r   ÚcopyzEnvironmentVarGuard.copy¿  s   € å�D‰zŒzÐr0   c                 ó   — | S rd   r§   rß   s    r   Ú	__enter__zEnvironmentVarGuard.__enter__Ã  r©   r0   c                 ó¢   — | j                              ¦   «         D ]#\  }}|€|| j        v r| j        |= Œ|| j        |<   Œ$| j        t          _        d S rd   )r  Úitemsr  r   r
  )rÛ   Ú
ignore_excÚkÚvs       r   Ú__exit__zEnvironmentVarGuard.__exit__Æ  s\   € Ø”m×)Ò)Ñ+Ô+ð 	%ð 	%‰FˆQ�ØˆyØ˜œÐ%Ð%Øœ aÐ(øà#$�”˜aÑ Ð Ø”]�Œ
ˆ
ˆ
r0   N)rç   rè   ré   rê   rÜ   r  r  r  r  r  r  r!  r#  r&  r(  r.  r§   r0   r   r  r  —  sÒ   € € € € € ðð ðð ð ð%ð %ð %ð&ð &ð &ð&ð &ð &ð$ð $ð $ð#ð #ð #ð"ð "ð "ðð ð ðð ð ðð ð ðð ð ð#ð #ð #ð #ð #r0   r  )F)NF)r¼   F)JÚcollections.abcÚcollectionsÚ
contextlibrù   r   r>   rP   r‹   rr   r)   rt   r{   ÚTESTFN_ASCIIÚformatr²   ÚTESTFN_UNICODEr:   ÚunicodedataÚ	normalizeÚTESTFN_UNENCODABLEÚgetwindowsversionÚencodeÚgetfilesystemencodingrŠ   ÚUnicodeEncodeErrorÚdecodeÚUnicodeDecodeErrorÚFS_NONASCIIÚ	characterÚfsdecodeÚfsencodeÚUnicodeErrorr¸   ÚSAVEDCWDÚTESTFN_UNDECODABLEÚTESTFN_NONASCIIr   r   r   r   r/   r8   rI   rK   rN   rW   rY   r\   r]   r`   rb   r   rñ   r~   re   r‚   r–   r¡   rB   r¥   Úcontextmanagerr¶   r»   rÀ   rÆ   rÍ   r×   rÙ   r  r9   r  ÚabcÚMutableMappingr  r§   r0   r   ú<module>rI     sM  ðØ Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø €€€ð „7ˆfÒÐà€L€Là€Lð ×!Ò! ,°	°´	±´Ñ<Ô<€ð Ð =Ñ=€Ø„<�8ÒÐð ÐÐÐØ*�[Ô*¨5°.ÑAÔA€Nð
 Ð Ø„7ˆd‚?€?à€sÔÑÔÔ'¨1Ò,Ð,ð *Ð,MÑMÐð	&Ø×%Ò%Ð&? cÔ&?Ñ&AÔ&AÑBÔBÐBð ˆEˆEà'Ð'Ð'Ð)B¨Ô)BÑ)DÔ)DÐ)DÐ)DðFñ Gô Gð Gð "&ÐÐøð "ð 	ð 	ð 	ØˆDð	øøøð -ð 	„\Ð9Ð9Ð9ð
à�ŠÐ0�sÔ0Ñ2Ô2Ñ3Ô3Ð3ð 	øð ð Nð Nð Nà)Ø�oŠoÐ7˜cÔ7Ñ9Ô9Ð;LÑMÔMñNÐÐÐðNøøøð €ð ð +ð +€IðB
ð ˆ2Œ;�{�r”{ 9Ñ-Ô-Ñ.Ô.°)Ò;Ð;ØÐð <ð
  ˆØˆøð	 ð ð ð Øˆðøøøð ˆ2Œ9‰;Œ;€ð Ð ðð ð €Dð"Ø�ŠÐ-�CÔ-Ñ/Ô/Ñ0Ô0Ð0Ð0øØð ð ð Ø(˜Rœ[¨Ñ6Ô6¸Ñ=ÐØˆˆðøøøð ð Ø" [Ñ0€O€Oà€OØ	Ð	(˜L€ð
ð 
ð 
ð €ðð ð ð(4ð 4ð 4ð €
ðð ð ðB4ð 4ð 4ð €
ðð ð ð04ð 4ð 4ð Ð ðð ð ð04ð 4ð 4ð4ð 4ð 4ðð ð ð „<×Ò˜5Ñ!Ô!ð gð4ð 4ð 4ð 4ðB&ð &ð &ð$ð $ð $ð=ð =ð =ð*ð ð ð ð Œi€GØŒX€Fðð ð ð0ð ð ðð ð ðð ð ð Ôð%ð %ð %ñ Ôð%ðP Ôðð ð ñ Ôðð6 Ôðð ð ñ Ôðð&ð ð ð Ôð
ð 
ñ Ôð
ðð ð ðð ð ð ð ñ ô ð ð$9ð 9ð 9ðx €7ˆ2ˆwÑÔð ØÔðð ñ Ôðð ð Ôðð ñ Ôðð
6#ð 6#ð 6#ð 6#ð 6#˜+œ/Ô8ñ 6#ô 6#ð 6#ð 6#ð 6#sH   Â,"C0 Ã0C8Ã7C8Ä"D) Ä)+EÅEÅ!$F
Æ
FÆFÆ+"GÇG*Ç)G*