§
    �’j\;  ã                  óØ  — d Z ddlm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
mZ ddl	mZ ddlmZ ddlmZmZmZmZ ddlmZ  ej        e¦  «        Zeez   Z	 ddlZeez  Zn # e$ r e                     d	¦  «         Y nw xY w	 ddlZeez  Zn # e$ r e                     d
¦  «         Y nw xY wd2d„Zd3d„Zd4d„Z ddœd5d„Z!d2d„Z"d6d„Z#d7d!„Z$d8d9d&„Z%d:d'„Z&d;d,„Z'd<d.„Z(	 d=d>d1„Z)dS )?zUtilities related archives.é    )ÚannotationsN)ÚIterable)ÚZipInfo)ÚInstallationError)ÚBZ2_EXTENSIONSÚTAR_EXTENSIONSÚXZ_EXTENSIONSÚZIP_EXTENSIONS)Ú
ensure_dirzbz2 module is not availablezlzma module is not availableÚreturnÚintc                 óV   — t          j        d¦  «        } t          j        | ¦  «         | S )zBGet the current umask which involves having to set it temporarily.r   )ÚosÚumask)Úmasks    úKC:\Projects\DSCons\.venv\Lib\site-packages\pip\_internal\utils\unpacking.pyÚcurrent_umaskr   -   s!   € åŒ8�A‰;Œ;€DÝ„HˆT�N„N€NØ€Kó    ÚpathÚstrú	list[str]c                ó*  — |                       d¦  «                              d¦  «        } d| v rJd| v r,|                      d¦  «        |                      d¦  «        k     sd| vr|                      dd¦  «        S d| v r|                      dd¦  «        S | dgS )Nú/ú\é   Ú )ÚlstripÚfindÚsplit©r   s    r   Úsplit_leading_dirr!   4   s–   € Ø�;Š;�sÑÔ×"Ò" 4Ñ(Ô(€DØ
ˆd€{€{Ø	�ˆˆ˜$Ÿ)š) C™.œ.¨4¯9ª9°T©?¬?Ò:Ð:¸tÈ4Ð?OÐ?Oà�zŠz˜#˜qÑ!Ô!Ð!Ø	�ˆˆØ�zŠz˜$ Ñ"Ô"Ð"à�bˆzÐr   ÚpathsúIterable[str]Úboolc                ó^   — d}| D ]'}t          |¦  «        \  }}|s dS |€|}Œ||k    r dS Œ(dS )zyReturns true if all the paths have the same leading path name
    (i.e., everything is in one subdirectory in an archive)NFT)r!   )r"   Úcommon_prefixr   ÚprefixÚrests        r   Úhas_leading_dirr)   @   sa   € ð €MØð ð ˆÝ(¨Ñ.Ô.‰ˆ�Øð 	Ø�5�5ØÐ"Ø"ˆMˆMØ�}Ò$Ð$Ø�5�5ð %àˆ4r   F©Úresolve_symlinksÚ	directoryÚtargetr+   c               óP  — |r?t           j                             | ¦  «        }t           j                             |¦  «        }n>t           j                             | ¦  «        }t           j                             |¦  «        }||k    p!|                     |t           j        z   ¦  «        S )a  
    Return true if the absolute path of target is within the directory
    (including when target is equal to the directory).

    When ``resolve_symlinks`` is true, resolve symlinks before comparing so
    traversal through a symlink (e.g. "link/../file") is also caught.
    )r   r   ÚrealpathÚabspathÚ
startswithÚsep)r,   r-   r+   Úabs_directoryÚ
abs_targets        r   Úis_within_directoryr5   O   s…   € ð ð -Ýœ×(Ò(¨Ñ3Ô3ˆÝ”W×%Ò% fÑ-Ô-ˆ
ˆ
åœŸš¨	Ñ2Ô2ˆÝ”W—_’_ VÑ,Ô,ˆ
à˜Ò&ÐW¨*×*?Ò*?ÀÕPRÔPVÑ@VÑ*WÔ*WÐWr   c                 ó,   — dt          ¦   «          z  dz  S )Niÿ  éI   )r   © r   r   Ú!_get_default_mode_plus_executabler9   c   s   € Ø•M‘O”OÐ#Ñ# eÑ+Ð+r   ÚNonec                óH   — t          j        | t          ¦   «         ¦  «         dS )zx
    Make file present at path have execute for user/group/world
    (chmod +x) is no-op on windows per python docs
    N)r   Úchmodr9   r    s    r   Ú2set_extracted_file_to_default_mode_plus_executabler=   g   s#   € õ
 „HˆTÕ4Ñ6Ô6Ñ7Ô7Ð7Ð7Ð7r   Úinfor   c                óf   — | j         dz	  }t          |ot          j        |¦  «        o|dz  ¦  «        S )Né   r7   )Úexternal_attrr$   ÚstatÚS_ISREG)r>   Úmodes     r   Úzip_item_is_executablerE   o   s7   € ØÔ Ñ#€Dõ �Ð<�œ dÑ+Ô+Ð<°°u±Ñ=Ô=Ð=r   TÚfilenameÚlocationÚflattenc                óR  — t          |¦  «         t          | d¦  «        }	 t          j        |d¬¦  «        }t	          |                     ¦   «         ¦  «        o|}|                     ¦   «         D �]‰}|j        }|}|rt          |¦  «        d         }t          j
                             ||¦  «        }t          j
                             |¦  «        }	t          ||¦  «        s&d}
t          |
                     | ||¦  «        ¦  «        ‚|                     d¦  «        rt          |¦  «         Œ½t          |	¦  «         |                     |¦  «        }	 t          |d¦  «        5 }t#          j        ||¦  «         ddd¦  «         n# 1 swxY w Y   |                     ¦   «          t)          |¦  «        rt+          |¦  «         �ŒS# |                     ¦   «          t)          |¦  «        rt+          |¦  «         w w xY w	 |                     ¦   «          dS # |                     ¦   «          w xY w)	aŸ  
    Unzip the file (with path `filename`) to the destination `location`.  All
    files are written based on system defaults and umask (i.e. permissions are
    not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied after being
    written. Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    ÚrbT)Ú
allowZip64r   zQThe zip file ({}) has a file ({}) trying to install outside target directory ({}))r   r   ÚwbN)r   ÚopenÚzipfileÚZipFiler)   ÚnamelistÚinfolistrF   r!   r   r   ÚjoinÚdirnamer5   r   ÚformatÚendswithÚshutilÚcopyfileobjÚcloserE   r=   )rF   rG   rH   ÚzipfpÚzipÚleadingr>   ÚnameÚfnÚdirÚmessageÚfpÚdestfps                r   Ú
unzip_filerb   v   sD  € õ ˆxÑÔÐÝ�˜4Ñ Ô €Eð ÝŒo˜e°Ð5Ñ5Ô5ˆÝ! #§,¢,¡.¤.Ñ1Ô1Ð=°gˆØ—L’L‘N”Nð 	Oñ 	OˆDØ”=ˆDØˆBØð 0Ý& tÑ,Ô,¨QÔ/�Ý”—’˜h¨Ñ+Ô+ˆBÝ”'—/’/ "Ñ%Ô%ˆCÝ& x°Ñ4Ô4ð Pð4ð õ (¨¯ª°xÀÀXÑ(NÔ(NÑOÔOÐOØ�{Š{˜;Ñ'Ô'ð Oå˜2‘”��å˜3‘”�ð —X’X˜d‘^”^�ðOÝ˜b $™œð 7¨6ÝÔ*¨2¨vÑ6Ô6Ð6ð7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7ð —H’H‘J”J�JÝ-¨dÑ3Ô3ð OÝJÈ2ÑNÔNÐNùøð —H’H‘J”J�JÝ-¨dÑ3Ô3ð OÝJÈ2ÑNÔNÐNÐNðOøøøð5	Oð: 	�Š‰Œˆˆˆøˆ�Š‰ŒˆˆøøøsH   ¡D.H ÅGÅ FÅ6GÆF	ÆGÆ	F	Æ
GÆ4H Ç5G6Ç6H ÈH&c                ó’  ‡ ‡‡‡— t          ‰¦  «         ‰                      ¦   «                              d¦  «        s'‰                      ¦   «                              d¦  «        rd}n¥‰                      ¦   «                              t          ¦  «        rd}nv‰                      ¦   «                              t          ¦  «        rd}nG‰                      ¦   «                              d¦  «        rd}nt
                               d‰ ¦  «         d	}t          j        ‰ |d
¬¦  «        }	 t          d„ | 
                    ¦   «         D ¦   «         ¦  «        }	 t          j        Št          ¦   «         Š|rm| 
                    ¦   «         D ]X}t          |j        ¦  «        \  }}||_        |                     ¦   «         r$t          |j        ¦  «        \  }}	||k    r|	|_        ŒYdˆˆˆ ˆfd„}
|                     ‰|
¬¦  «         n"# t$          $ r t'          ‰ ‰||¦  «         Y nw xY w|                     ¦   «          dS # |                     ¦   «          w xY w)a¡  
    Untar the file (with path `filename`) to the destination `location`.
    All files are written based on system defaults and umask (i.e. permissions
    are not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied on top of the
    default.  Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    z.gzz.tgzzr:gzzr:bz2zr:xzz.tarÚrz-Cannot determine compression type for file %szr:*zutf-8)Úencodingc                ó   — g | ]	}|j         ‘Œ
S r8   )r\   )Ú.0Úmembers     r   ú
<listcomp>zuntar_file.<locals>.<listcomp>¿   s   € Ð"NÐ"NÐ"N°6 6¤;Ð"NÐ"NÐ"Nr   rh   útarfile.TarInfor   r   r   c                ó‚  •— | j         }	 	  ‰| ‰¦  «        } nB# t          j        $ r0 t          j        d d…         dv rt          j        | ‰¦  «        } n‚ Y nw xY wn<# t          j        $ r*}d}t          |                     ‰|¦  «        ¦  «        ‚d }~ww xY w|  	                    ¦   «         r|dz  r‰| _         nd | _         | S )Né   >   ©rl   é	   é   ©rl   é
   é   ©rl   é   é   z%Invalid member in the tar file {}: {}r7   )
rD   ÚtarfileÚLinkOutsideDestinationErrorÚsysÚversion_infoÚ
tar_filterÚTarErrorr   rT   Úisfile)	rh   r   Ú	orig_modeÚexcr_   Údata_filterÚdefault_mode_plus_executablerF   rG   s	        €€€€r   Ú
pip_filterzuntar_file.<locals>.pip_filter×   s  ø€ Ø"œK�	ðð"Ø!, ¨V°XÑ!>Ô!>˜˜øÝ"Ô>ð "ð "ð "ÝÔ+¨B¨Q¨BÔ/ð 4ð ð õ &-Ô%7¸ÀÑ%IÔ%I˜F˜Fà!ð #˜Fð"øøøøøõ Ô'ð 	ð 	ð 	ØE�Gõ ,ØŸšØ$Øñô ñô ð øøøøð		øøøð —=’=‘?”?ð ' y°5Ñ'8ð 'Ø">�F”K�Kð #'�F”KØ�s2   ‹ —A ˜<AÁA ÁAÁA ÁBÁ*%BÂB)ÚfilterN)rh   rj   r   r   r   rj   )r   ÚlowerrU   r   r	   ÚloggerÚwarningrv   rM   r)   Ú
getmembersr   r9   r!   r\   ÚislnkÚlinknameÚ
extractallÚAttributeErrorÚ_untar_without_filterrX   )rF   rG   rD   Útarr[   rh   Ú	name_leadÚ	name_restÚlnk_leadÚlnk_restr�   r   r€   s   ``         @@r   Ú
untar_filer‘   ¤   sr  øøøø€ õ ˆxÑÔÐØ‡~‚~ÑÔ× Ò  Ñ'Ô'ð ¨8¯>ª>Ñ+;Ô+;×+DÒ+DÀVÑ+LÔ+Lð ØˆˆØ	�ŠÑ	Ô	×	"Ò	"¥>Ñ	2Ô	2ð ØˆˆØ	�ŠÑ	Ô	×	"Ò	"¥=Ñ	1Ô	1ð 	ØˆˆØ	�ŠÑ	Ô	×	"Ò	" 6Ñ	*Ô	*ð Øˆˆå�ŠØ;Øñ	
ô 	
ð 	
ð ˆå
Œ,�x °Ð
8Ñ
8Ô
8€CðCÝ!Ð"NÐ"N¸S¿^º^Ñ=MÔ=MÐ"NÑ"NÔ"NÑOÔOˆð
:	8Ý!Ô-ˆKõ ,MÑ+NÔ+NÐ(àð 
7ð "ŸnšnÑ.Ô.ð 7ð 7�FÝ+<¸V¼[Ñ+IÔ+IÑ(�I˜yØ"+�F”KØ—|’|‘~”~ð 7Ý->¸v¼Ñ-OÔ-OÑ*˜ (Ø# yÒ0Ð0Ø.6˜FœOøð%ð %ð %ð %ð %ð %ð %ð %ð %ðN �NŠN˜8¨JˆNÑ7Ô7Ð7Ð7øõq ð 	Dð 	Dð 	DÝ! (¨H°c¸7ÑCÔCÐCÐCÐCð	Døøøðv 	�	Š	‰Œˆˆˆøˆ�	Š	‰Œˆˆøøøs1   Ä"+H0 ÅG8 ÅBH0 Ç8HÈH0 ÈHÈH0 È0IrŒ   útarfile.TarFileÚtarinforj   c                óL  — t           j                             t           j                             |j        ¦  «        |j        ¦  «        }t           j                             |¦  «        }|                     dd¦  «        }	 |                      |¦  «         dS # t          $ r Y dS w xY w)zGCheck if the file pointed to by the symbolic link is in the tar archiver   r   TF)
r   r   rR   rS   r\   rˆ   ÚnormpathÚreplaceÚ	getmemberÚKeyError)rŒ   r“   rˆ   s      r   Úis_symlink_target_in_tarr™     s’   € åŒw�|Š|�BœGŸOšO¨G¬LÑ9Ô9¸7Ô;KÑLÔL€HåŒw×Ò Ñ)Ô)€HØ×Ò  cÑ*Ô*€HðØ�Š�hÑÔÐØˆtøÝð ð ð Øˆuˆuðøøøs   Á>B Â
B#Â"B#r[   c                óô  — |                      ¦   «         D �]á}|j        }|rt          |¦  «        d         }t          j                             ||¦  «        }t          ||¦  «        rt          ||d¬¦  «        s&d}t          |                     | ||¦  «        ¦  «        ‚| 	                    ¦   «         rt          |¦  «         Œ­|                     ¦   «         �rt          j                             t          j                             |¦  «        |j        ¦  «        }t          ||d¬¦  «        s0d}t          |                     | |j        |j        ¦  «        ¦  «        ‚t          ||¦  «        s0d}t          |                     | |j        |j        ¦  «        ¦  «        ‚	 |                     ||¦  «         �ŒŸ# t           $ r-}	t"                               d| |j        |	¦  «         Y d}	~	�ŒÑd}	~	ww xY w	 |                     |¦  «        }
nA# t(          t*          f$ r-}	t"                               d| |j        |	¦  «         Y d}	~	�Œ)d}	~	ww xY wt          t          j                             |¦  «        ¦  «         |
€J ‚t-          |d¦  «        5 }t/          j        |
|¦  «         ddd¦  «         n# 1 swxY w Y   |
                     ¦   «          |                     ||¦  «         |j        dz  rt9          |¦  «         �ŒãdS )	z/Fallback for Python without tarfile.data_filterr   Tr*   zQThe tar file ({}) has a file ({}) trying to install outside target directory ({})z/In the tar file %s the member %s is invalid: %sNrL   r7   )r†   r\   r!   r   r   rR   r5   r   rT   Úisdirr   ÚissymrS   rˆ   r™   Ú_extract_memberÚ	Exceptionr„   r…   Úextractfiler˜   rŠ   rM   rV   rW   rX   ÚutimerD   r=   )rF   rG   rŒ   r[   rh   r]   r   r_   r-   r~   r`   ra   s               r   r‹   r‹     sn  € ð —.’.Ñ"Ô"ð IIñ IIˆØŒ[ˆØð 	*Ý" 2Ñ&Ô& qÔ)ˆBÝŒw�|Š|˜H bÑ)Ô)ˆõ
 # 8¨TÑ2Ô2ð 	NÕ:MØ�d¨Tð;
ñ ;
ô ;
ð 	Nð0ð õ $ G§N¢N°8¸TÀ8Ñ$LÔ$LÑMÔMÐMØ�<Š<‰>Œ>ð 8	IÝ�tÑÔÐÐØ�\Š\‰^Œ^ñ 6	Iõ ”W—\’\¥"¤'§/¢/°$Ñ"7Ô"7¸¼ÑIÔIˆFÝ& x°È$ÐOÑOÔOð ð4ð õ (Ø—N’N 8¨V¬[¸&¼/ÑJÔJñô ð õ ,¨C°Ñ8Ô8ð ð4ð õ (Ø—N’N 8¨V¬[¸&¼/ÑJÔJñô ð ðØ×#Ò# F¨DÑ1Ô1Ð1Ñ1øÝð 	ð 	ð 	õ —’ØEØØ”KØñ	ô ð ð ���‘øøøøð	øøøðØ—_’_ VÑ,Ô,��øÝ�nÐ-ð 	ð 	ð 	õ —’ØEØØ”KØñ	ô ð ð ���‘øøøøð	øøøõ •r”w—’ tÑ,Ô,Ñ-Ô-Ð-Ø�>�>�>Ý�d˜DÑ!Ô!ð / VÝÔ" 2 vÑ.Ô.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /à�HŠH‰JŒJˆJà�IŠI�f˜dÑ#Ô#Ð#àŒ{˜UÑ"ð IÝBÀ4ÑHÔHÐHùðSIIð IIsB   ÆF4Æ4
G+Æ>"G&Ç&G+Ç/HÈIÈ"H>È>IÊJ(Ê(J,	Ê/J,	Úcontent_typeú
str | Nonec                óì  ‡ ‡‡— t           j                             ‰ ¦  «        Š ‰                      d¦  «         Šdˆ ˆˆfd„}dˆ ˆfd„}|dk    r
 |¦   «         S |dk    r
 |¦   «         S ‰                      ¦   «                              t
          ¦  «        r
 |¦   «         S ‰                      ¦   «                              t          t          z   t          z   ¦  «        r
 |¦   «         S t          j
        ‰ ¦  «        }t          j        ‰ ¦  «        }|r|s
 |¦   «         S |r|s
 |¦   «         S |r|rt                               d‰ ¦  «         t                               d	‰ ‰|¦  «         t!          d
‰› �¦  «        ‚)zÑUnpack ``filename`` into ``location``.

    Archive format is chosen in order of decreasing reliability:
    ``content_type``, then filename extension, then magic signature
    (unambiguous matches only).
    z.whlr   r:   c                 ó,   •— t          ‰ ‰‰¬¦  «         d S )N)rH   )rb   )rF   rG   Úzip_flattens   €€€r   Ú_unzipzunpack_file.<locals>._unzipv  s   ø€ Ý�8˜X¨{Ð;Ñ;Ô;Ð;Ð;Ð;r   c                 ó(   •— t          ‰ ‰¦  «         d S ©N)r‘   )rF   rG   s   €€r   Ú_untarzunpack_file.<locals>._untary  s   ø€ Ý�8˜XÑ&Ô&Ð&Ð&Ð&r   zapplication/zipzapplication/x-gzipzAmbiguous file signature in %s.zZCannot unpack file %s (downloaded from %s, content-type: %s); cannot detect archive formatz#Cannot determine archive format of N)r   r:   )r   r   r/   rU   rƒ   r
   r   r   r	   rN   Ú
is_zipfilerv   Ú
is_tarfiler„   ÚerrorÚcriticalr   )rF   rG   r¡   r¦   r©   rª   r«   r¥   s   ``     @r   Úunpack_filer®   h  sÆ  øøø€ õ Œw×Ò Ñ)Ô)€HØ×'Ò'¨Ñ/Ô/Ð/€Kð<ð <ð <ð <ð <ð <ð <ð <ð'ð 'ð 'ð 'ð 'ð 'ð 'ð Ð(Ò(Ð(Øˆv‰xŒxˆØÐ+Ò+Ð+Øˆv‰xŒxˆà‡~‚~ÑÔ× Ò ¥Ñ0Ô0ð Øˆv‰xŒxˆØ‡~‚~ÑÔ× Ò ¥µ.Ñ!@Å=Ñ!PÑQÔQð Øˆv‰xŒxˆõ Ô# HÑ-Ô-€JÝÔ# HÑ-Ô-€JØð ˜*ð Øˆv‰xŒxˆØð ˜*ð Øˆv‰xŒxˆØð B�jð BÝ�ŠÐ6¸ÑAÔAÐAå
‡O‚Oð	'àØØñô ð õ ÐLÀ(ÐLÐLÑ
MÔ
MÐMr   )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$   )T)rF   r   rG   r   rH   r$   r   r:   )rF   r   rG   r   r   r:   )rŒ   r’   r“   rj   r   r$   )
rF   r   rG   r   rŒ   r’   r[   r$   r   r:   r¨   )rF   r   rG   r   r¡   r¢   r   r:   )*Ú__doc__Ú
__future__r   Úloggingr   rV   rB   rx   rv   rN   Úcollections.abcr   r   Úpip._internal.exceptionsr   Úpip._internal.utils.filetypesr   r   r	   r
   Úpip._internal.utils.miscr   Ú	getLoggerÚ__name__r„   ÚSUPPORTED_EXTENSIONSÚbz2ÚImportErrorÚdebugÚlzmar   r!   r)   r5   r9   r=   rE   rb   r‘   r™   r‹   r®   r8   r   r   ú<module>r½      sÖ  ðØ !Ð !à "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à 6Ð 6Ð 6Ð 6Ð 6Ð 6ðð ð ð ð ð ð ð ð ð ð ð ð 0Ð /Ð /Ð /Ð /Ð /à	ˆÔ	˜8Ñ	$Ô	$€ð &¨Ñ6Ð ð0Ø€J€J€Jà˜NÑ*ÐÐøØð 0ð 0ð 0Ø
‡L‚LÐ.Ñ/Ô/Ð/Ð/Ð/ð0øøøð1à€K€K€Kà˜MÑ)ÐÐøØð 1ð 1ð 1Ø
‡L‚LÐ/Ñ0Ô0Ð0Ð0Ð0ð1øøøðð ð ð ð	ð 	ð 	ð 	ðð ð ð ð  >CðXð Xð Xð Xð Xð Xð(,ð ,ð ,ð ,ð8ð 8ð 8ð 8ð>ð >ð >ð >ð+ð +ð +ð +ð +ð\]ð ]ð ]ð ]ð@ð ð ð ðSIð SIð SIð SIðr  $ð/Nð /Nð /Nð /Nð /Nð /Nð /Ns$   Á	A) Á)BÂBÂ
	B ÂB1Â0B1