o
     JAf                     @   s   	 d dl Z d dlZd dlZd dlZd dlZd dlZz	d dlZ[dZW n ey-   dZY nw z	d dl	Z	[	dZ
W n eyB   dZ
Y nw z	d dlZ[dZW n eyW   dZY nw e jdkZd ZZe jdkrkd dlZnerqd dlZerudndZee doejd	aeoeed
ZdZg dZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ G dd deZ!dd Z"dd Z#efdd Z$dd!d"Z%d#d$ Z&d%d& Z'd'd( Z(dd)d*d+Z)dd)d,d-Z*ee d.rdd)d/d0Z+nd1d0 Z+dd)d2d3Z,dd)d4d5Z-dd)d6d7Z.d8d9 Z/	dd:d;Z0dde.ddfd<d=Z1ee j2d>r?d?d@ Z3dAdB Z4ndCd@ Z3dDdB Z4dEdF Z5dGdH Z6e j7e je j8e j9he j:koie j;e j<v oie je j=v Z>ddIdJZ?e>e?_@dKdL ZAe.fdMdNZBdOdP ZCdQdR ZDdSdT ZEdUdV ZF	 	ddXdYZG	 	ddZd[ZHd\eGd]gd^dfiZIereGd_gd`dfeIda< eHg dbdfeIdc< e
reGddgdedfeIdf< ereGdggdhdfeIdi< djdk ZJddmdnZKdodp ZL	 	ddqdrZMdsdt ZNdudv ZO		lddwdxZPdydz ZQd{d| ZRd}d~ ZSdd ZTdgeTg d^fdgeSg dbfdZUerddgeTg d`feUda< e
r+ddgeTg defeUdf< er8ddgeTg dhfeUdi< dd ZVdddZWee drceXd eYddZZdeZj[_\deZj]_\deZj^_\dd Z_nerueXd eYddZZdd Z_dddZ`dddZadd Zbe jce jdB dfddZedS )    NTFntposixi   i   sendfilelinux
_fcopyfilez%.COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC)copyfileobjcopyfilecopymodecopystatcopycopy2copytreemovermtreeErrorSpecialFileError	ExecErrormake_archiveget_archive_formatsregister_archive_formatunregister_archive_formatget_unpack_formatsregister_unpack_formatunregister_unpack_formatunpack_archiveignore_patternschownwhichget_terminal_sizeSameFileErrorc                   @      e Zd ZdS )r   N__name__
__module____qualname__ r%   r%   /usr/lib/python3.10/shutil.pyr   ;       r   c                   @   r    )r   Nr!   r%   r%   r%   r&   r   >   r'   r   c                   @   r    )r   Nr!   r%   r%   r%   r&   r   A   r'   r   c                   @   r    )r   Nr!   r%   r%   r%   r&   r   E   r'   r   c                   @   r    )	ReadErrorNr!   r%   r%   r%   r&   r(   H   r'   r(   c                   @   r    )RegistryErrorNr!   r%   r%   r%   r&   r)   K   r'   r)   c                   @   r    )_GiveupOnFastCopyNr!   r%   r%   r%   r&   r*   O   r'   r*   c              
   C   s   	 z
|   }|  }W n ty } zt|d }~ww z
t||| W d S  tyJ } z| j|_|j|_|j	t	j
t	jhv rCt||d d }~ww N)fileno	Exceptionr*   r   r   OSErrornamefilename	filename2errnoEINVALENOTSUP)fsrcfdstflagsinfdoutfderrr%   r%   r&   _fastcopy_fcopyfileT   s$   r;   c              
   C   s&  	 z
|   }|  }W n ty } zt|d }~ww ztt|jd}W n ty2   d}Y nw tj	dk r=t
|d}d}	 z
t||||}W n= ty } z1| j|_|j|_|jtjkrfdat||jtjkro|d |dkrt|dtjdkrt||d }~ww |dkrd S ||7 }q@)Ni   i   l        i   @r   TF)r,   r-   r*   maxosfstatst_sizer.   sysmaxsizeminr   r/   r0   r1   r2   ENOTSOCK_USE_CP_SENDFILEENOSPClseekSEEK_CUR)r5   r6   r8   r9   r:   	blocksizeoffsetsentr%   r%   r&   _fastcopy_sendfileh   sH   

rK   c              	   C   s   	 | j }|j}tt|6}	 ||}|sn%||k r6|d | }|| W d    n1 s0w   Y  n|| qW d    d S 1 sFw   Y  d S r+   )readintowrite
memoryview	bytearray)r5   r6   lengthfsrc_readinto
fdst_writemvnsmvr%   r%   r&   _copyfileobj_readinto   s"   "rV   c                 C   s2   	 |st }| j}|j}	 ||}|sd S || qr+   )COPY_BUFSIZEreadrM   )r5   r6   rP   	fsrc_readrR   bufr%   r%   r&   r      s   r   c                 C   s   t | tjr$ttjdr$ztj|  t|W S  ty#   Y dS w ttjdr=ztj| |W S  ty<   Y dS w tj	tj
| tj	tj
|kS )NsamestatFsamefile)
isinstancer=   DirEntryhasattrpathr[   statr.   r\   normcaseabspathsrcdstr%   r%   r&   	_samefile   s   rg   c                 C   s   t | tjr
|  S t| S r+   )r]   r=   r^   ra   fnr%   r%   r&   _stat   s   rj   c                 C   s    t | tjr
|  S tj| S r+   )r]   r=   r^   
is_symlinkr`   islinkrh   r%   r%   r&   _islink   s    rm   follow_symlinksc          
      C   s<  	 t d| | t| |rtd| |d}t| |gD ]4\}}zt|}W n	 ty0   Y qw t	|j
rHt|tjr@|jn|}td| trQ|dkrQ|j}q|sct| rctt| | |S t| d}zt|du}trzt||tj |W W  d    W W  d    S  ty   Y nDw trzt|| |W W  d    W W  d    S  ty   Y n!w tr|dkrt||t|t |W  d    W W  d    S t || W d    n1 sw   Y  W n t!y
 }	 ztj"|st#d| |	 d }	~	ww W d    |S 1 sw   Y  |S )Nzshutil.copyfilez{!r} and {!r} are the same filer   z`%s` is a named piperbwbzDirectory does not exist: )$r@   auditrg   r   format	enumeraterj   r.   ra   S_ISFIFOst_moder]   r=   r^   r`   r   _WINDOWSr?   rm   symlinkreadlinkopen_HAS_FCOPYFILEr;   r   _COPYFILE_DATAr*   rD   rK   rV   rB   rW   r   IsADirectoryErrorexistsFileNotFoundError)
re   rf   ro   	file_sizeiri   str5   r6   er%   r%   r&   r      sx   
"

  r   c                C   sp   	 t d| | |s#t| r#tj|r#ttdr!tjtj}}nd S t	tj
}}|| }||t|j d S )Nzshutil.copymodelchmod)r@   rr   rm   r=   r`   rl   r_   lstatr   rj   chmodra   S_IMODErv   )re   rf   ro   	stat_func
chmod_funcr   r%   r%   r&   r	      s   
r	   	listxattrc                C   s   	 z	t j| |d}W n ty) } z|jtjtjtjfvr W Y d }~d S d }~ww |D ]5}zt j| ||d}t j||||d W q, tya } z|jtj	tjtjtjfvrW W Y d }~q,d }~ww d S Nrn   )
r=   r   r.   r2   r4   ENODATAr3   getxattrsetxattrEPERM)re   rf   ro   namesr   r/   valuer%   r%   r&   
_copyxattr6  s,   r   c                  O      d S r+   r%   )argskwargsr%   r%   r&   r   N     c          	   
      sZ  	 t d| | d d ddd |pt| otj| }|r& fdd}n fdd}t| tjr9| j|d}n|d	| |d}t	|j
}|d
||j|jf|d t| ||d z|d|||d W n	 tyo   Y nw t|drz|d||j|d W d S  ty } zdD ]}tt|r|jtt|kr nq W Y d }~d S d }~ww d S )Nzshutil.copystat)nsro   c                 W   r   r+   r%   )r   ro   r   r%   r%   r&   _nop_  r   zcopystat.<locals>._nopc                    s   t t|  S r+   )getattrr=   r/   r   r%   r&   lookupf     zcopystat.<locals>.lookupc                    s   t t|  }|tjv r|S  S r+   )r   r=   supports_follow_symlinks)r/   ri   r   r%   r&   r   k  s   
rn   ra   utimer   st_flagschflags)
EOPNOTSUPPr4   )r@   rr   rm   r=   r`   rl   r]   r^   ra   r   rv   st_atime_nsst_mtime_nsr   NotImplementedErrorr_   r   r.   r2   r   )	re   rf   ro   followr   r   modewhyr:   r%   r   r&   r
   Q  sB   
r
   c                C   D   	 t j|rt j|t j| }t| ||d t| ||d |S r   )r=   r`   isdirjoinbasenamer   r	   re   rf   ro   r%   r%   r&   r     s   r   c                C   r   r   )r=   r`   r   r   r   r   r
   r   r%   r%   r&   r     s   
r   c                     s   	  fdd}|S )Nc                    s(   g } D ]}| t|| qt|S r+   )extendfnmatchfilterset)r`   r   ignored_namespatternpatternsr%   r&   _ignore_patterns  s   z)ignore_patterns.<locals>._ignore_patternsr%   )r   r   r%   r   r&   r     s   r   c                 C   s2  |d ur|t |dd | D }nt }t j||d g }	|tu p%|tu }
| D ]}|j|v r0q(t j||j}t j||j}|
rD|n|}zf|	 }|r`t jdkr`|j
dd}|jt
jkr`d}|rt |}|rxt || t||| d n3t j|s|rW q(| rt||||||d n||| n| rt||||||d n||| W q( ty } z|	|jd  W Y d }~q(d }~w ty } z|	||t|f W Y d }~q(d }~ww zt|| W n& ty } zt|d	d d u r|	||t|f W Y d }~nd }~ww |	rt|	|S )
Nc                 S   s   g | ]}|j qS r%   r   ).0xr%   r%   r&   
<listcomp>  s    z_copytree.<locals>.<listcomp>)exist_okr   Frn   )dirs_exist_okr   winerror)r=   fspathr   makedirsr   r   r/   r`   r   rk   ra   st_reparse_tagIO_REPARSE_TAG_MOUNT_POINTry   rx   r
   r~   is_dirr   r   r   r   r.   appendstrr   )entriesre   rf   symlinksignorecopy_functionignore_dangling_symlinksr   r   errorsuse_srcentrysrcentrysrcnamedstnamesrcobjrk   r   linktor:   r   r%   r%   r&   	_copytree  sj   



 r   c           	   
   C   sZ   	 t d| | t| }t|}W d    n1 sw   Y  t|| ||||||dS )Nzshutil.copytree)r   re   rf   r   r   r   r   r   )r@   rr   r=   scandirlistr   )	re   rf   r   r   r   r   r   itrr   r%   r%   r&   r     s   &

r   st_file_attributesc                 C   sJ   z| j dd}t |jo|jt j@ o|jt jk W S  ty$   Y dS w NFrn   )ra   S_ISDIRrv   r   FILE_ATTRIBUTE_REPARSE_POINTr   r   r.   )entryr   r%   r%   r&   _rmtree_isdir7  s   
r   c                 C   sF   zt | }t|jp|jtj@ o|jtjkW S  t	y"   Y dS w )NF)
r=   r   ra   S_ISLNKrv   r   r   r   r   r.   )r`   r   r%   r%   r&   _rmtree_islink@  s   

r   c                 C   s$   z| j ddW S  ty   Y dS w r   )r   r.   )r   r%   r%   r&   r   I  s
   c                 C   s   t j| S r+   )r=   r`   rl   )r`   r%   r%   r&   r   O  r   c              	   C   s*  zt | }t|}W d    n1 sw   Y  W n ty/   |t j| t  g }Y nw |D ]F}|j}t|r_z
| rDtdW n tyX   |t jj	|t  Y q2w t
|| q2zt | W q2 tyx   |t j|t  Y q2w zt |  W d S  ty   |t j| t  Y d S w )N%Cannot call rmtree on a symbolic link)r=   r   r   r.   r@   exc_infor`   r   rk   rl   _rmtree_unsafeunlinkrmdir)r`   onerror
scandir_itr   r   fullnamer%   r%   r&   r   S  s>   
r   c              
   C   sD  zt | }t|}W d    n1 sw   Y  W n ty: } z||_|t j|t  W Y d }~d S d }~ww |D ]}t j||j	}z|j
dd}W n tyZ   d}Y n$w |r~z|jdd}	t|	j}W n ty}   |t j|t  Y q=w |rzt j|j	t j| d}
d}W n ty   |t j|t  Y q=w zUt j|	t |
rt|
|| zt |
 d}t j|j	| d W n* ty   |t j|t  Y nw ztd ty   |t jj|t  Y nw W |st |
 q=|st |
 w w z
t j|j	| d W q= ty   |t j|t  Y q=w d S )NFrn   )dir_fdTr   )r=   r   r   r.   r0   r@   r   r`   r   r/   r   ra   r   rv   r   rz   O_RDONLYr[   r>   _rmtree_safe_fdcloser   rl   r   )topfdr`   r   r   r   r:   r   r   r   orig_stdirfddirfd_closedr%   r%   r&   r   r  sz   


r   c              	   C   s  	 t d|  |rdd }n|d u rdd }trt| tr"t| } zt| }W n ty<   |tj| t 	  Y d S w zt
| tj}d}W n ty[   |tj
| t 	  Y d S w zUtj|t|rt|| | zt| d}t|  W n* ty   |tj| t 	  Y nw ztd ty   |tjj| t 	  Y nw W |st| d S d S |st| w w z
t| rtdW n ty   |tjj| t 	  Y d S w t| |S )Nzshutil.rmtreec                  W   r   r+   r%   r   r%   r%   r&   r     r   zrmtree.<locals>.onerrorc                   W   s    r+   r%   r   r%   r%   r&   r     s   FTr   )r@   rr   _use_fd_functionsr]   bytesr=   fsdecoder   r-   r   rz   r   r`   r[   r>   r   r   r   r.   rl   r   r   )r`   ignore_errorsr   r   fd	fd_closedr%   r%   r&   r     sh   





r   c                 C   s2   	 t | } t jjt jjpd }t j| |S N )r=   r   r`   sepaltsepr   rstrip)r`   r   r%   r%   r&   	_basename  s   
r   c              	   C   sP  	 t d| | |}tj|r2t| |rt| | d S tj|t| }tj	|r2t
d| z	t| | W |S  ty   tj| r[t| }t|| t|  Y |S tj| rt| |rnt
d| |f t| st| tjst| rt jdkrtd| | f t| ||dd t|  Y |S || | t|  Y |S w )Nzshutil.movez$Destination path '%s' already existsz.Cannot move a directory '%s' into itself '%s'.darwinzKCannot move the non-empty directory '%s': Lacking write permission to '%s'.T)r   r   )r@   rr   r=   r`   r   rg   renamer   r   r~   r   r.   rl   ry   rx   r   
_destinsrc_is_immutableaccessW_OKlistdirplatformPermissionErrorr   r   )re   rf   r   real_dstr   r%   r%   r&   r     sT   





r   c                 C   sV   t j| } t j|}| t jjs| t jj7 } |t jjs&|t jj7 }|| S r+   )r=   r`   rc   endswithr   
startswithrd   r%   r%   r&   r   G  s   
r   c                 C   s(   t | }tjtjg}t|do|j|v S )Nr   )rj   ra   UF_IMMUTABLESF_IMMUTABLEr_   r   )re   r   immutable_statesr%   r%   r&   r   P  s   r   c                 C   l   	 | d u rd S zddl m} W n
 ty   Y d S w z|| }W n ty+   d }Y nw |d ur4|d S d S )Nr   )getgrnam   )grpr	  ImportErrorKeyError)r/   r	  resultr%   r%   r&   _get_gidU      r  c                 C   r  )Nr   )getpwnamr
  )pwdr  r  r  )r/   r  r  r%   r%   r&   _get_uidg  r  r  gzipc	                    sX  	 |d u rd}	n"t r|dkrd}	ntr|dkrd}	ntr#|dkr#d}	ntd|dd l}
|r4d	|	 nd}| d
 | }tj|}|r[tj	|s[|d urT|
d| |s[t| |d urd|
d tt  fdd}|s|
|d|	 }|}|d urtj||}z|j|||d W |  n|  w |d urtj|}|S )Nr   r  gzbzip2bz2xzzCbad value for 'compress', or compression format not supported : {0}r   ..tarcreating %szCreating tar archivec                    s,    d ur
 | _ | _d ur| _| _| S r+   )gidgnameuiduname)tarinfor  groupownerr  r%   r&   _set_uid_gid  s   z#_make_tarball.<locals>._set_uid_gidzw|%s)r   )_ZLIB_SUPPORTED_BZ2_SUPPORTED_LZMA_SUPPORTED
ValueErrorrs   tarfiler=   r`   dirnamer~   infor   r  r  rz   r   addr   rc   )	base_namebase_dircompressverbosedry_runr#  r"  loggerroot_dirtar_compressionr)  compress_extarchive_namearchive_dirr$  tararcnamer%   r!  r&   _make_tarbally  sJ   

	r:  c                 C   s  	 dd l }| d }	tj| }
|
r(tj|
s(|d ur!|d|
 |s(t|
 |d ur3|d|	| |s|j|	d|jd}tj	|}|d urPtj
||}tj	|}|tjkrk||| |d urk|d| t|D ]l\}}}|}|d urtj||}tj	|}t|D ] }tj
||}tj
||}||| |d ur|d| q|D ],}tj
||}tj	|}tj|rtj
||}||| |d ur|d| qqpW d    n1 sw   Y  |d urtj|	}	|	S )Nr   .zipr  z#creating '%s' and adding '%s' to itw)compressionzadding '%s')zipfiler=   r`   r*  r~   r+  r   ZipFileZIP_DEFLATEDnormpathr   curdirrM   walkrelpathsortedisfilerc   )r-  r.  r0  r1  r2  r#  r"  r3  r>  zip_filenamer7  zfr9  dirpathdirnames	filenames
arcdirpathr/   r`   r%   r%   r&   _make_zipfile  sj   

rM  r8  )r/  Nzuncompressed tar file)r/  r  zgzip'ed tar-filegztarzZIP filezip)r/  r  zbzip2'ed tar-filebztar)r/  r  zxz'ed tar-filexztarc                  C       	 dd t  D } |   | S )Nc                 S   s   g | ]
\}}||d  fqS )r
  r%   )r   r/   registryr%   r%   r&   r     s    z'get_archive_formats.<locals>.<listcomp>)_ARCHIVE_FORMATSitemssortformatsr%   r%   r&   r     s   r   r   c                 C   sx   	 |d u rg }t |std| t|ttfstd|D ]}t|ttfr-t|dkr1tdq|||dft| < d S )NzThe %s object is not callablez!extra_args needs to be a sequencer
  z+extra_args elements are : (arg_name, value)F)callable	TypeErrorr]   tupler   lenrT  )r/   function
extra_argsdescriptionelementr%   r%   r&   r     s   r   c                 C   s
   t | = d S r+   )rT  r   r%   r%   r&   r   .  s   
r   c	              
   C   sH  	 t d| ||| zt| }	W n ty   td| d w ||||d}
|	d }|	d D ]\}}||
|< q.|d u r>tj}|	d }d }|d uro|rTt| } ||
d< nt }|d urb|	d| tj
| } |sot| z|| |fi |
}W |d ur|d ur|	d	| t| |S |d ur|d ur|	d	| t| w w )
Nzshutil.make_archivezunknown archive format '%s')r1  r2  r#  r"  r         r3  zchanging into '%s'zchanging back to '%s')r@   rr   rT  r  r(  r=   rB  r   getcwddebugr`   rc   chdir)r-  rs   r3  r.  r0  r1  r#  r"  r2  format_infor   funcargvalsupport_root_dirsave_cwdr0   r%   r%   r&   r   1  sN   




r   c                  C   rR  )Nc                 S   s"   g | ]\}}||d  |d fqS )r   rb  r%   )r   r/   r+  r%   r%   r&   r   s  s   " z&get_unpack_formats.<locals>.<listcomp>)_UNPACK_FORMATSrU  rV  rW  r%   r%   r&   r   m  s   r   c           	      C   sl   	 i }t  D ]\}}|d D ]}|||< qq| D ]}||v r+d}t|||| f qt|s4tdd S )Nr   z!%s is already registered for "%s"z*The registered function must be a callable)rl  rU  r)   rY  rZ  )	
extensionsr]  r^  existing_extensionsr/   r+  ext	extensionmsgr%   r%   r&   _check_unpack_optionsx  s    
rr  c                 C   s.   	 |d u rg }t ||| ||||ft| < d S r+   )rr  rl  )r/   rm  r]  r^  r_  r%   r%   r&   r     s
   r   c                 C   s   	 t | = d S r+   )rl  r   r%   r%   r&   r     s   
r   c                 C   s,   	 t j| }t j|st | d S d S r+   )r=   r`   r*  r   r   )r`   r*  r%   r%   r&   _ensure_directory  s
   rs  c           	   
   C   s   	 dd l }|| std|  || }zd| D ]X}|j}|ds(d|v r)qtjj	|g|
dR  }|s9qt| |dsr||d"}t|d}t|| W d    n1 s^w   Y  W d    n1 smw   Y  qW |  d S |  w )Nr   z%s is not a zip file/z..rrq   )r>  
is_zipfiler(   r?  infolistr0   r  r=   r`   r   splitrs  r  rz   r   r   )	r0   extract_dirr>  rO  r+  r/   
targetpathsourcetargetr%   r%   r&   _unpack_zipfile  s4   


 r}  c                 C   sZ   	 dd l }z|| }W n |jy   td|  w z|| W |  d S |  w )Nr   z/%s is not a compressed or uncompressed tar file)r)  rz   TarErrorr(   
extractallr   )r0   ry  r)  tarobjr%   r%   r&   _unpack_tarfile  s   r  r  r;  )r8  rO  z.tar.gzz.tgzz.tar.bz2z.tbz2z.tar.xzz.txzc                 C   s:   t  D ]\}}|d D ]}| |r|    S qqd S )Nr   )rl  rU  r  )r0   r/   r+  rp  r%   r%   r&   _find_unpack_format  s   
r  c                 C   s   	 t d| || |d u rt }t|}t| } |d urHzt| }W n ty4   td|d w |d }|| |fi t	|d  d S t
| }|d u rWtd| t| d }t	t| d }|| |fi | d S )Nzshutil.unpack_archivezUnknown unpack format '{0}'ra  r
  zUnknown archive format '{0}')r@   rr   r=   rc  r   rl  r  r(  rs   dictr  r(   )r0   ry  rs   rf  rg  r   r%   r%   r&   r     s(   

r   statvfs
disk_usageusageztotal used freezTotal space in byteszUsed space in byteszFree space in bytesc                 C   sB   	 t | }|j|j }|j|j }|j|j |j }t|||S r+   )r=   r  f_bavailf_frsizef_blocksf_bfree_ntuple_diskusage)r`   r   freetotalusedr%   r%   r&   r  %  s   
c                 C   s$   	 t | \}}|| }t|||S r+   )r   Z_getdiskusager  )r`   r  r  r  r%   r%   r&   r  6  s   c                 C   s   	 t d| || |d u r|d u rtd|}|}|d u r d}nt|tr4t|}|d u r4td||d u r;d}nt|tsOt	|}|d u rOtd|t
| || d S )Nzshutil.chownzuser and/or group must be setzno such user: {!r}zno such group: {!r})r@   rr   r(  r]   r   r  LookupErrorrs   intr  r=   r   )r`   userr"  _user_groupr%   r%   r&   r   A  s&   

r   P      c              
   C   s   	 z	t tjd }W n ttfy   d}Y nw z	t tjd }W n ttfy.   d}Y nw |dks7|dkraz
ttj }W n t	tt
fyR   t| }Y nw |dkrZ|j}|dkra|j}t||fS )NCOLUMNSr   LINES)r  r=   environr  r(  r   r@   
__stdout__r,   AttributeErrorr.   terminal_sizecolumnslines)fallbackr  r  sizer%   r%   r&   r   a  s,   r   c                 C   s&   t j| ot | |ot j|  S r+   )r=   r`   r~   r   r   )ri   r   r%   r%   r&   _access_check  s   r  c              	      s  	 t j rt |r S d S t t}|d u r:t jdd }|d u r:zt d}W n t	t
fy9   t j}Y nw |s>d S |rOt |}|t t j}nt |}|t j}tjdkrt j}|rit |}||vrs|d| t dpyt}dd |t jD }|rdd |D }t fd	d
|D r g}n fdd|D }n g}t }|D ](}	t j|	}
|
|vr||
 |D ]}t j|	|}t||r|    S qqd S )NPATHCS_PATHwin32r   PATHEXTc                 S   s   g | ]}|r|qS r%   r%   r   ro  r%   r%   r&   r         zwhich.<locals>.<listcomp>c                 S   s   g | ]}t |qS r%   )r=   fsencoder  r%   r%   r&   r     s    c                 3   s"    | ]}   |  V  qd S r+   )lowerr  r  cmdr%   r&   	<genexpr>  s     zwhich.<locals>.<genexpr>c                    s   g | ]} | qS r%   r%   r  r  r%   r&   r     r  )r=   r`   r*  r  r]   r   r  getconfstrr  r(  defpathr  rx  pathsepr   r@   r   rB  insertgetenv_WIN_DEFAULT_PATHEXTanyr   rb   r,  r   )r  r   r`   	use_bytesrB  pathext_sourcepathextfilesseendirnormdirthefiler/   r%   r  r&   r     s^   








r   )r   )F)FN)r  r   r   NNNN)r   r   NNNNr   )NNr   r   NNN)NN)r  )fr=   r@   ra   r   collectionsr2   zlibr%  r  r  r&  lzmar'  r/   rw   r   r   rW   r_   r   r  rD   r{   r  __all__r.   r   r   r   r   r(   r-   r)   r*   r;   rK   rV   r   rg   rj   rm   r   r	   r   r
   r   r   r   r   r   stat_resultr   r   r   r   rz   r   r   supports_dir_fdr   supports_fdr   r   r   avoids_symlink_attacksr   r   r   r   r  r  r:  rM  rT  r   r   r   r   r   rr  r   r   rs  r}  r  rl  r  r   r   
namedtupler  r  __doc__r  r  r  r   r   r  F_OKX_OKr   r%   r%   r%   r&   <module>   s>   



@
@B
A
0
		8


BB	
F
?


<




*




 1