3 �L�j48�2@s�ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z y ddl Z Wne k rxddl Z YnXyddlZejZWne k r�dZe jZYnXy ddlZWne k r�dZYnXy ddlZWne k r�dZYnXdddddddd d d d d g ZGdd�de�ZGdd �d e�ZeZZdeZdgZdiZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%e j&e$�Z'dZ(dZ)dZ*dZ+dZ,dZ-d Z.d!Z/dZ0d"Z1d#Z2d$Z3e j&e2�Z4dZ5dZ6dZ7dZ8dZ9dZ:d Z;d!Zd%Z?d&Z@dZAd'ZBdZCd(ZDdZEd)ZFd*ZGd+ZHd,ZIe j&eH�ZJdZKdZLdZMdZNdZOdZPd ZQd!ZRdZSd"ZTd%ZUd&ZVd-ZWd.ZXe j&eW�ZYd/ZZd0Z[e j&eZ�Z\dZ]dZ^dZ_dZ`dZadZbd Zcd!ZddZed"Zfd1Zge jhd2�Zid3d4�Zjd5d6�Zkd7d �Zld8d9�Zmd:d;�ZnGd�d>�ZqGd?d@�d@�ZrGdAdB�dB�ZsdCdDdEdEdEdEdFdGdHdIdFdJdKdLdMdNdOdP�ZtdQdR�ZudSdT�ZvdUdV�ZwGdWdX�dX�ZxGdYdZ�dZ�ZyGd[d\�d\ejz�Z{Gd]d^�d^ejz�Z|Gd_d �d �Z}Gd`d �d e}�Z~djdadb�Ze�dck�r�e�dS)k�N� BadZipFile� BadZipfile�error� ZIP_STORED� ZIP_DEFLATED� ZIP_BZIP2�ZIP_LZMA� is_zipfile�ZipInfo�ZipFile� PyZipFile� LargeZipFilec@s eZdZdS)rN)�__name__� __module__� __qualname__�rr�/usr/lib64/python3.6/zipfile.pyr+sc@s eZdZdS)r N)rrrrrrrr /s����� ���-�.�?s<4s4H2LHsPK������� z<4s4B4HL2L5H2LsPK� � � ���z <4s2B4HL2L2HsPKz<4sLQLsPKz <4sQ2H2L4QsPKiPKz        r6c@sReZdZd(Zd*dd�Zdd�Zd+dd�Zd d!�Zd"d#�Ze d,d$d%��Z d&d'�Z dS)-r � orig_filenamer>� date_time� compress_typer^r0� create_systemrS�extract_version�reserved� flag_bits�volume� internal_attr� external_attr� header_offset�CRC� compress_size� file_size� _raw_time� _end_offset�NoName�rrcCs�||_|jtd��}|dkr(|d|�}tjdkrJtj|krJ|jtjd�}||_||_|ddkrjtd��t |_ d|_ d|_ t jdkr�d|_nd|_t|_t|_d|_d|_d|_d|_d|_d|_dS)Nr�/i�z+ZIP does not support timestamps before 1980r*Zwin32r)r_�find�chr�os�sep�replacer>r`� ValueErrorrrar^r0�sys�platformrb�DEFAULT_VERSIONrSrcrdrerfrgrhrn)�selfr>r`Z null_byterrr�__init__Xs0   zZipInfo.__init__cCs�d|jj|jfg}|jtkr8|jdtj|j|j��|jd?}|jd@}|rd|jdt j |��|rv|jd|�|j �}| s�|j r�|jd|j �| s�|j r�|jtks�|j |j kr�|jd|j �|jd �d j|�S) Nz<%s filename=%rz compress_type=%sri��z filemode=%rz external_attr=%#xz file_size=%rz compress_size=%r�>�)� __class__rr>rarr.�compressor_names�getrh�stat�filemode�is_dirrlrkr/)r{r?�hi�lo�isdirrrr�__repr__�s(         zZipInfo.__repr__NcCs||j}|ddd>|dd>B|dB}|dd>|d d>B|ddB}|jd @rfd}}}n|j}|j}|j}|j}d} |dkr�|tkp�|tk}|r�d } |tj| dtj | �d ||�}|tks�|tkr�|s�t d ��d }d }t } |j t k�rtt| �} n|j tk�rtt| �} t| |j�|_t| |j�|_|j�\} } tjtt|j|j| |j |||||t| �t|�� } | | |S)Nri�r#rr rrr%rrzre�headerrrr� FileHeader�sF$$        zZipInfo.FileHeaderc Cs>y|jjd�|jfStk r8|jjd�|jdBfSXdS)N�asciizutf-8i)r>�encodere�UnicodeEncodeError)r{rrrr��szZipInfo._encodeFilenameFlagscCs(|j}tj}�xt|�dk�r"|d|dd��\}}|dk�r|dkrZ|d|dd��}nV|dkrv|d|dd ��}n:|d kr�|d |dd ��}n|d kr�f}ntd||f��d }|jdkr�|||_|d7}|jdkr�|||_|d7}|jdk�r|j}|||_|d7}||dd�}qWdS)Nrz|_|r�d|_|jdO_n|j|_|S)Nrr!rrqi��r)� isinstancert�PathLike�fspathr��S_ISDIR�st_mode�time� localtime�st_mtime�path�normpath� splitdriveru�altseprhrl�st_size)�clsr>�arcname�str��mtimer`�zinforrr� from_file�s(       zZipInfo.from_filecCs|jddkS)Nrrq�����)r>)r{rrrr�szZipInfo.is_dir)r_r>r`rar^r0rbrSrcrdrerfrgrhrirjrkrlrmrn�rprrrrr)ror�)N)N) rrr� __slots__r|r�r�r�r�� classmethodr�r�rrrrr >s8 + .$ !c@s8eZdZdd�ZdZdd�Zdd�Zdd �Zd d �ZdS) � _ZipDecryptercCshd}dgd}xTtd�D]H}|}x6td�D]*}|d@rH|d?d@|A}q*|d?d@}q*W|||<qW|S)Nl q[r�rri���)�range)Zpoly�tabler3�crcr4rrr�_GenerateCRCTable%s  z_ZipDecrypter._GenerateCRCTableNcCs|d?d@|j||Ad@AS)Nri�����)�crctable)r{Zchr�rrr�_crc329sz_ZipDecrypter._crc32cCsBtjdkrtj�t_d|_d|_d|_x|D]}|j|�q,WdS)NixV4i�gE#i�xV4)r�r�r��key0�key1�key2� _UpdateKeys)r{�pwd�prrrr|=s   z_ZipDecrypter.__init__cCsX|j||j�|_|j|jd@d@|_|jddd@|_|j|jd?d@|j�|_dS)Nr�l��i�rr�)r�r�r�r�)r{�crrrr�Fsz_ZipDecrypter._UpdateKeyscCs0|jdB}|||dAd?d@A}|j|�|S)Nrrrr�)r�r�)r{r��krrr�__call__Ls  z_ZipDecrypter.__call__) rrrr�r�r�r|r�r�rrrrr�s   r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) �LZMACompressorcCs d|_dS)N)�_comp)r{rrrr|WszLZMACompressor.__init__cCsFtjdtji�}tjtjtjtj|�gd�|_tjdddt |��|S)N�id)�filtersz�namer<rj� _expected_crc�crc32� _running_crc� _seekabler�rV�_orig_compress_start�_orig_compress_size�_orig_file_size�_orig_start_crc�AttributeError)r{r�r �zipinfoZ decrypterZ close_fileobjrrrr|s:      zZipExtFile.__init__cCsvd|jj|jjfg}|jsX|jd|j|jf�|jtkrb|jdt j |j|j��n |jd�|jd�dj |�S)Nz<%s.%sz name=%r mode=%rz compress_type=%sz [closed]r}r~) rrr�closedr.r r rrr�r�r/)r{r?rrrr�?s   zZipExtFile.__repr__cCsL|dkr>|jjd|j�d}|dkr>|j|j|�}||_|Stjj||�S)Nr� r)rrrr�io�BufferedIOBase�readline)r{�limitr3�linerrrrMszZipExtFile.readlinecCsr|t|j�|jkr\|j|�}t|�|jkrJ||j|jd�|_d|_n|jt|�8_|j|j|jd�S)Nri)r-rrr:)r{r��chunkrrr�peek]s zZipExtFile.peekcCsdS)NTr)r{rrr�readablejszZipExtFile.readablecCs |dks|dkrL|j|jd�}d|_d|_x|jsF||j|j�7}q.W|S||j}|t|j�kr~|j|j|�}||_|S|t|j�}|j|jd�}d|_d|_x^|dko�|j �r|j|�}|t|�kr�||_||_||d|�7}P||7}|t|�8}q�W|S)Nrr*)rrr�_read1�MAX_Nr-)r{r��buf�endrRrrrr:ms4   zZipExtFile.readcCs@|jdkrdSt||j�|_|jr<|j|jkr      zZipExtFile.read1cCs"|js|dkrdS|jtkrH|jj}|t|�krR||j|t|��7}n |j|�}|jtkrj|jdk|_nx|jtkr�t ||j �}|jj ||�}|jj p�|jdko�|jj |_|jr�||jj �7}n |jj |�}|jj p�|jdk|_|d|j�}|jt|�8_|jdk�rd|_|j|�|S)Nrr*T)rrrrZunconsumed_tailr-�_read2rrr[� MIN_READ_SIZEr�r�r�rr$)r{r�rRrrrr�s2           zZipExtFile._read1cCsj|jdkrdSt||j�}t||j�}|jj|�}|jt|�8_|sLt�|jdk rft t |j|��}|S)Nrr*) rr[r'�minr�r:r-�EOFErrorr��bytes�map)r{r�rRrrrr&�s     zZipExtFile._read2c s&z|jr|jj�Wdt�j�XdS)N)rr�r��super)r{)rrrr��szZipExtFile.closecCs|jS)N)r)r{rrrr��szZipExtFile.seekablercCs,|jstjd��|j�}|dkr&|}n.|dkr8||}n|dkrL|j|}ntd��||jkrd|j}|dkrpd}||}||j}|dkr�|t|j�kr�||_d}nR|dkr�|j j |j �|j |_ |j|_|j|_d|_d|_tj|j�|_d|_|}x,|dk�r"t|j|�}|j|�||8}q�W|j�S)Nz!underlying stream is not seekablerrrzCwhence must be os.SEEK_SET (0), os.SEEK_CUR (1), or os.SEEK_END (2)r*F)rr�UnsupportedOperationrVrrwrr-rr�r@rrr rrrZzipfiler�rrrr(� MAX_SEEK_READr:)r{rPr�Zcurr_posZnew_posZ read_offsetZ buff_offsetZread_lenrrrr@�sD         zZipExtFile.seekcCs0|jstjd��|j|jt|j�|j}|S)Nz!underlying stream is not seekable)rrr-rrr-rr)r{ZfileposrrrrV*s zZipExtFile.tell�i@i)NFr�)r�)rr�)r�)r)rrrr r'r.r|r�rrrr:r$r%rr&r�r�r@rV� __classcell__rr)rrr�s$ *   ! %$  /r�cs@eZdZdd�Zedd��Zdd�Zdd�Z�fd d �Z�Z S) � _ZipWriteFilecCs4||_||_||_t|j�|_d|_d|_d|_dS)Nr) �_zinfo�_zip64�_zipfiler�ra� _compressor� _file_size�_compress_size�_crc)r{�zfr�r�rrrr|2s z_ZipWriteFile.__init__cCs|jjS)N)r4r8)r{rrrr�;sz_ZipWriteFile._fileobjcCsdS)NTr)r{rrr�writable?sz_ZipWriteFile.writablecCsf|jrtd��t|�}|j|7_t||j�|_|jrV|jj|�}|jt|�7_|j j |�|S)NzI/O operation on closed file.) rrwr-r6r r8r5r�r7r�r�)r{rR�nbytesrrrr�Bs  z_ZipWriteFile.writecsX|jr dSt�j�|jrN|jj�}|jt|�7_|jj|�|j|j _ n |j |j _ |j |j _ |j |j _|j jd@r�|jr�dnd}|jjtj|t|j j |j j |j j��|jj�|j_nn|js�|j tkr�td��|jtkr�td��|jj�|j_|jj|j j�|jj|j j|j��|jj|jj�d|j_|jjj|j �|j |jj|j j <dS)Nrz)r{r!r�)rrrr�Ns8          z_ZipWriteFile.close) rrrr|�propertyr�r:r�r�r0rr)rrr11s   r1c@seZdZdZdZdedfdd�Zdd�Zdd �Zd d �Z d d �Z dd�Z dd�Z d;dd�Z dd�Zdd�Zdd�Zedd��Zejdd��Zdd#d$�Zd?d%d&�Zd@d'd(�Zed)d*��Zd+d,�Zd-d.�ZdAd/d0�ZdBd1d2�Zd3d4�Zd5d6�Z d7d8�Z!d9d:�Z"dS)Cr N�rTcCsF|dkrtd��t|�||_d|_d|_i|_g|_||_||_d|_ d|_ t |t j �rdt j|�}t |t�r�d|_||_d d d d d d dd�}||}x^ytj||�|_Wn(tk r�||kr�||}w��YnXPq�Wnd|_||_t|dd�|_d|_tj�|_d|_d|_�y|dk�r*|j�n�|dk�r�d|_y|jj�|_Wn2t tfk �r|t!|j�|_d|_d|_Yn6Xy|jj"|j�Wn t tfk �r�d|_YnXnf|dk�ry|j�|jj"|j�Wn6t#k �r|jj"dd�d|_|jj�|_YnXntd��Wn$|j}d|_|j$|��YnXdS)NrA�w�x�az+ZipFile requires mode 'r', 'w', 'x', or 'a'Frr*r;zw+bzx+bzr+b�wbZxb)rArBrCrDzr+bzw+bzx+brr Trz"Mode must be 'r', 'w', 'x', or 'a')rArBrCrD)rBrC)%rwr�� _allowZip64� _didModify�debugr?r>r�r r��_commentr�rtr�r��str� _filePassedr>rr=r8r7�getattr� _fileRefCnt� threading�RLockr�rr��_RealGetContentsrVr=rr�r@r�_fpclose)r{r�r r�� allowZip64ZmodeDictr�r8rrrr|�s�             zZipFile.__init__cCs|S)Nr)r{rrr� __enter__�szZipFile.__enter__cCs |j�dS)N)r�)r{�type�value� tracebackrrr�__exit__�szZipFile.__exit__cCs�d|jj|jjfg}|jdk rd|jr8|jd|j�n|jdk rR|jd|j�|jd|j�n |jd�|jd�dj|�S)Nz<%s.%sz file=%rz filename=%rz mode=%rz [closed]r}r~) rrrr8rKr.r>r r/)r{r?rrrr��s    zZipFile.__repr__cCs�|j}y t|�}Wntk r.td��YnX|sIsz*ZipFile._RealGetContents..T)�key�reverse);r8r6r7rrH�printrMrN� _ECD_COMMENTrI� _ECD_LOCATIONrHrGrErAr=r@r:r�BytesIO�sizeCentralDirr-rBr,�structCentralDir� _CD_SIGNATURE�stringCentralDir�_CD_FILENAME_LENGTH�decoder �_CD_EXTRA_FIELD_LENGTHr0�_CD_COMMENT_LENGTHr^�_CD_LOCAL_HEADER_OFFSETrirSrbrcrdrerarjrkrl�MAX_EXTRACT_VERSIONr�rfrgrhrmr`r�r>r.r?r>�sortedrn)r{r8rQZsize_cdZ offset_cd�concatZinferredrRrY�centdirr>�flagsrC�t�dZ end_offsetr�rrrrP�s|                4        zZipFile._RealGetContentscCsdd�|jD�S)NcSsg|] }|j�qSr)r>)�.0rRrrr� Psz$ZipFile.namelist..)r>)r{rrr�namelistNszZipFile.namelistcCs|jS)N)r>)r{rrr�infolistRszZipFile.infolistcCsPtdd |d�x:|jD]0}d|jdd�}td|j||jf|d�qWdS) Nz%-46s %19s %12s� File Name� Modified �Size)r�z%d-%02d-%02d %02d:%02d:%02dr!z %-46s %s %12d)rurvrw)r]r>r`r>rl)r{r�r�Zdaterrr�printdirWs  zZipFile.printdircCs^d}xT|jD]J}y.|j|jd��}x|j|�r0q$WWdQRXWq tk rT|jSXq WdS)NrrrAi)r>r=r>r:r)r{Z chunk_sizer��frrr�testzip`s  zZipFile.testzipcCs$|jj|�}|dkr td|��|S)Nz(There is no item named %r in the archive)r?r��KeyError)r{r �inforrr�getinfoms   zZipFile.getinfocCs8|r"t|t� r"tdt|�j��|r.||_nd|_dS)Nzpwd: expected bytes, got %s)r�r*� TypeErrorrTrr�)r{r�rrr� setpasswordvs zZipFile.setpasswordcCs|jS)N)rI)r{rrrr^szZipFile.commentcCs^t|t�stdt|�j��t|�tkrNddl}|jdtdd�|dt�}||_ d|_ dS)Nzcomment: expected bytes, got %srz3Archive comment is too long; truncating to %d bytesr)� stacklevelT) r�r*r~rTrr-�ZIP_MAX_COMMENT�warnings�warnrIrG)r{r^r�rrrr^�s    c Cs"|j|d|�� }|j�SQRXdS)NrA)r=r:)r{r r�r8rrrr:�sz ZipFile.readF)� force_zip64c s�|d!krtd��|r2t|t� r2tdt|�j��|rF|dkrFtd���jsTtd��t|t�rd|}n$|dkr~t|�}�j|_ n �j |�}|dkr��j ||d�S�j r�td���j d 7_ t�j|j�j�j�fd d ��}�y�|jt�}t|�tk�r�td ��tjt|�}|ttk�r td ��|j|t�}|t�rF|j|t�|jd@�rZtd��|jd@�rntd��|jd@�r�|jd�} n |jd�} | |j k�r�td|j |f��|j!dk �r�|j"�|j#|j!k�r�td|j �d���|jd @} d} | �r�|�s�j$}|�st%d|��t&|�} |jd�} t't(| | dd���} |jd@�rX|j)d?d@}n|j*d?d@}| d|k�r�t%d|��t+|||| d �S|j,��YnXdS)"NrArBzopen() requires mode "r" or "w"zpwd: expected bytes, got %sz'pwd is only supported for reading filesz2Attempt to use ZIP archive that was already closed)r�zyCan't read from the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.rcs�jS)N)r�r)r{rrrZ�szZipFile.open..zTruncated file headerz Bad magic number for file header� z$compressed patched data (flag bit 5)�@zstrong encryption (flag bit 6)izutf-8rXz/File name in directory %r and header %r differ.zOverlapped entries: z (possible zip bomb)z6File %r is encrypted, password required for extractionrrrr�r�r%zBad password for file %rT>rBrA)-rwr�r*r~rTrr8r r�rar}�_open_to_writer�rMr�rirQr�r:�sizeFileHeaderr-rrBr,r�� _FH_SIGNATUREr��_FH_FILENAME_LENGTH�_FH_EXTRA_FIELD_LENGTHrer�rfr_rnrVrkr�r�r�rZr+rmrjr�r�)r{r r r�r�r�Zzef_fileZfheader�fnameZ fname_strZ is_encryptedZzdr��hZ check_byter)r{rr=�s�                   z ZipFile.opencCs�|r|j rtd��|jr"td��t|d�s2d|_d|_d|_d|_|jt kr\|jdO_|j sp|jdO_|j s|d |_ |jo�|p�|jd t k}|j r�|j j|j�|j j�|_|j|�d |_|j j|j|��d |_t|||�S) NzHforce_zip64 is True, but allowZip64 was False when opening the ZIP file.zzCan't write to the ZIP file while there is another write handle open on it. Close the first handle before opening another.rlrrri�rg�������?Ti�)rFrwr�r<rlrkrjrerarrrhr�r8r@r=rVri� _writecheckrGr�r�r1)r{r�r�r�rrrr� s4     zZipFile._open_to_writecCs*|dkrtj�}n tj|�}|j|||�S)N)rt�getcwdr��_extract_member)r{�memberr�r�rrr�extract6s  zZipFile.extractcCsL|dkr|j�}|dkr"tj�}n tj|�}x|D]}|j|||�q2WdS)N)rsrtr�r�r�)r{r��membersr�rrrr� extractallCs   zZipFile.extractallcCs^|j}|s(d}tj|dt|��}||_|j|�}dd�|j|�D�}|jdd�|D��}|S)Nz:<>|"?*�_css|]}|jd�VqdS)�.N)�rstrip)rqrCrrr� ^sz1ZipFile._sanitize_windows_name..css|]}|r|VqdS)Nr)rqrCrrrr�`s)�!_windows_illegal_name_trans_tablerJ� maketransr-� translate�splitr/)r�r��pathsepr�Zillegalrrr�_sanitize_windows_nameTs zZipFile._sanitize_windows_namecsNt|t�s|j|�}|jjdtjj�}tjjrB|jtjjtjj�}tjj |�d}dtjj tjj f�tjjj �fdd�|j tjj�D��}tjjdkr�|j|tjj�}tjj ||�}tjj|�}tjj|�}|r�tjj|� r�tj|�|j��rtjj|��s tj|�|S|j||d��(}t|d��}tj||�WdQRXWdQRX|S) Nrqrr~c3s|]}|�kr|VqdS)Nr)rqrC)�invalid_path_partsrrr�tsz*ZipFile._extract_member..�\)r�rE)r�r r}r>rvrtr�rur�r��curdir�pardirr/r�r�r��dirname�exists�makedirsr�r��mkdirr=�shutil� copyfileobj)r{r�Z targetpathr�r�Z upperdirs�source�targetr)r�rr�cs.  &        zZipFile._extract_membercCs�|j|jkr(ddl}|jd|jdd�|jdkr:td��|jsHtd ��t|j�|j s�d}t |j �t krpd }n|j tkr�d }n|jtkr�d }|r�t|d ��dS)NrzDuplicate name: %rr)r�rBrCrDz&write() requires mode 'w', 'x', or 'a'z4Attempt to write ZIP archive that was already closedz Files countZFilesizez Zipfile sizez would require ZIP64 extensions)rBrCrD)r>r?r�r�r rwr8r�rarFr-r>�ZIP_FILECOUNT_LIMITrlr�rir )r{r�r��requires_zip64rrrr��s(     zZipFile._writecheckcCs0|jstd��|jrtd��tj||�}|j�r>d|_d|_n|dk rN||_n|j |_|j�r�|j ��|j rz|jj |j �|jj�|_|jtkr�|jdO_|j|�d|_|jj|�||j|j<|jj|jd��|jj�|_ WdQRXnCan't write to ZIP archive while an open writing handle existsrrTFr;rBiri )r8rwr�r r�r�rkrjrar�r�rr@r=rVrirrer�rGr>r.r?r>r�r�r=r�r�)r{r>r�rar��src�destrrrr��s8      z ZipFile.writecCs�t|t�r|jd�}t|t�spt|tjtj��dd�d�}|j|_|jd dkrhd|_ |j dO_ qtd|_ n|}|j s�t d ��|j r�t d ��|dk r�||_t |�|_|j�*|j|d d ��}|j|�WdQRXWdQRXdS)Nzutf-8r!)r>r`rrqi�Ari�z7Attempt to write to ZIP archive that was already closedz?Can't write to ZIP archive while an open writing handle exists.rB)r r�i�Ai�)r�rJr�r r�r�r�rar>rhr8rwr�r-rlr�r=r�)r{Zzinfo_or_arcnamerRrar�r�rrr�writestr�s.    zZipFile.writestrcCs |j�dS)N)r�)r{rrr�__del__�szZipFile.__del__cCs||jdkrdS|jrtd��zB|jdkr\|jr\|j�"|jrJ|jj|j�|j �WdQRXWd|j}d|_|j |�XdS)NzvCan't close the ZIP file while there is an open writing handle on it. Close the writing handle before closing the zip.rBrCrD)rBrCrD) r8r�rwr rGr�rr@r=�_write_end_recordrQ)r{r8rrrr��s z ZipFile.closecCsr�xP|jD�]D}|j}|ddd>|dd>B|dB}|dd>|d d>B|ddB}g}|jtksv|jtkr�|j|j�|j|j�d }d }n |j}|j}|jtkr�|j|j�d }n|j}|j} d} |�rt| d�} t j d d t |�dd t |�f|��| } t } |j tk�r(tt| �} n|j tk�r>tt| �} t| |j�} t| |j�} yZ|j�\} }t j tt| |j| |j||j |||j||t | �t | �t |j�d|j|j|�}Wnltk �rttt| |j| |j|j |j |||j||t |j!�t | �t |j�d|j|j|ft"j#d��YnX|j$j%|�|j$j%| �|j$j%| �|j$j%|j�q W|j$j&�}t |j�}||j'}|j'}d}|t(k�r�d}n|tk�r�d}n|tk�r�d}|�r*|j)�s�t*|d��t j t+t,ddddd||||� }|j$j%|�t j t-t.d|d�}|j$j%|�t/|d�}t/|d �}t/|d �}t j t0t1dd||||t |j2�� }|j$j%|�|j$j%|j2�|j$j3�dS)Nri�r#rr rrr%rl��zr`rlr�rkr.rir0r5rBr�r-r�rarr[r�rr�rcrSr�rbrdrbrdrjr^rgrh�DeprecationWarningr]rer>rx�stderrr8r�rVr=r�rFr rFrGrCrDr(rYrXrIr�)r{r�r�r�r�r0rlrkriZ extra_datar�rcrSr>rermZpos2Z centDirCountZ centDirSizeZ centDirOffsetr�Z zip64endrecZ zip64locrecrQrrrr� s�$$                                     zZipFile._write_end_recordcCs*|jd8_|j r&|j r&|j�dS)Nr)rMrKr�)r{r8rrrrQrszZipFile._fpclose)N)N)rAN)F)NN)NNN)NN)N)#rrrr8r�rr|rSrWr�rPrsrtrxrzr}rr@r^�setterr:r=r�r�r�r�r�r�r�r�r�r�r�r�rQrrrrr {s:WT     u +  * * $fc@s0eZdZdedd fdd�Zd dd �Zd d �ZdS)r rATrcCstj|||||d�||_dS)N)r r�rR)r r|� _optimize)r{r�r r�rR�optimizerrrr||s zPyZipFile.__init__r~NcCs�tj|�}|rF||� rF|jrBtjj|�r.dnd}td||f�dStjj|�\}}tjj|��rntjj|d�}tjj|��r�|r�d||f}n|}|jr�td|d|�|j |dd�|�\}} |jr�td | �|j || �tj |�} | j d�x�| D]�} tjj|| �} tjj | �\} }tjj| ��rRtjjtjj| d���r�|j| ||d �q�|d kr�|�r�|| � �r�|jr�td | �q�|j | dd�|�\}} |j�r�td | �|j || �q�Wn�|j�r�td|�x�tj |�D]�} tjj|| �} tjj | �\} }|d k�r�|�r0|| � �r0|j�r�td | ��q�|j | dd�|�\}} |j�rZtd | �|j || ��q�WnP|dd�d k�r�td��|j |dd�|�\}} |j�r�td| �|j || �dS)Nr�r�z%s %r skipped by filterfuncz __init__.pyz%s/%szAdding package in�asrrZAdding)� filterfuncz.pyzfile %r skipped by filterfunczAdding files from directoryz.Files added with writepy() must end with ".py"z Adding file�����r�r�r�r�)rtr�rHr�r�r]r�r/�isfile� _get_codenamer��listdir�remove�splitext�writepyr�)r{�pathname�basenamer�Zlabel�dirr Zinitnamer�r�Zdirlistr>r��rootZextrrrr��sx                zPyZipFile.writepyc sd�fdd� }|d}|d}tjj|dd�}tjj|dd�}tjj|dd�}�jdk�r\tjj|�r�tj|�jtj|�jkr�|} } n�tjj|�r�tj|�jtj|�jkr�|} |} n�tjj|�r�tj|�jtj|�jkr�|} |} nvtjj|��rtj|�jtj|�jk�r|} |} nD||��rRt j j d k�r4|} nt j j dk�rH|} n|} |} n|} } n��jd k�rr|} |} n<|} �jdk�r�|} n&�jdk�r�|} nd j �j�} t | ��tjj| ��o�tj| �jtj|�jk�s�||�jd ��s�|} } tjj| �d} |�rd || f} | | fS)Nrcs^ddl}�jrtd|�y|j|d|d�Wn,|jk rX}zt|j�dSd}~XnXdS)NrZ CompilingT)�doraiser�F)� py_compilerHr]�compile�PyCompileError�msg)r�r�r��err)r{rr�_compile�s  z)PyZipFile._get_codename.._compilez.pyz.pycr~)� optimizationrrz"invalid value for 'optimize': {!r})r�z%s/%sr�)r�r�)� importlib�util�cache_from_sourcer�rtr�r�r�r�rxrnr��formatrwr�) r{r�r�r�Zfile_pyZfile_pycZ pycache_opt0Z pycache_opt1Z pycache_opt2r�r�r�Z archivenamer)r{rr��s`             zPyZipFile._get_codenamer�)r~N)rrrrr|r�r�rrrrr ys Rc sddl}|jd�}|dkr(tjdd�}| s:|ddkrLt|�tjd�|ddkr�t|�dkrvt|�tjd�t|dd ��}|j�WdQRX�n||ddk�r t|�dkr�t|�tjd�t|dd ��}|j �}WdQRX|�r�td j |��td ��n|ddk�rbt|�d k�r8t|�tjd�t|dd ��}|j |d�WdQRXn�|ddk�rt|�d k�r�t|�tjd��fd d��t|dd��h}x`|dd�D]P}t j j|�}|�s�t j jt j j|��}|dt jt jfk�r�d}�|||��q�WWdQRXdS)NraE Usage: zipfile.py -l zipfile.zip # Show listing of a zipfile zipfile.py -t zipfile.zip # Test if a zipfile is valid zipfile.py -e zipfile.zip target # Extract zipfile into target dir zipfile.py -c zipfile.zip src ... # Create zipfile from sources r�-l�-c�-e�-trrAz.The following enclosed file is corrupted: {!r}z Done testingrcsptjj|�r|j||t�nPtjj|�rl|r8|j||�x2tj|�D]$}�|tjj||�tjj||��qDWdS)N)rtr�r�r�rr�r�r/)r9r��zippathZnm)�addToZiprrr�Us   zmain..addToZiprBr~)r�r�r�r�)�textwrap�dedentrx�argvr]�exitr-r rxrzr�r�rtr�r�r�r�r�)�argsr�ZUSAGEr9Zbadfiler�r�r)r�r�main'sT           r��__main__li���ii��ii��)N)�rrt�re�importlib.utilr�rxr�r�r�rBZbinasciirN� ImportErrorZdummy_threadingr�r r�r��__all__� Exceptionrr rrr�r�r�rrrrrzr�r�r�rjrYrXr�rWrHrIrJrKrLrMrNr]r^r_rbrdrarcZ_CD_CREATE_VERSIONZ_CD_CREATE_SYSTEMZ_CD_EXTRACT_VERSIONZ_CD_EXTRACT_SYSTEMZ _CD_FLAG_BITSZ_CD_COMPRESS_TYPEZ_CD_TIMEZ_CD_DATEZ_CD_CRCZ_CD_COMPRESSED_SIZEZ_CD_UNCOMPRESSED_SIZErergrhZ_CD_DISK_NUMBER_STARTZ_CD_INTERNAL_FILE_ATTRIBUTESZ_CD_EXTERNAL_FILE_ATTRIBUTESrir�r�r�r�Z_FH_EXTRACT_VERSIONZ_FH_EXTRACT_SYSTEMZ_FH_GENERAL_PURPOSE_FLAG_BITSZ_FH_COMPRESSION_METHODZ_FH_LAST_MOD_TIMEZ_FH_LAST_MOD_DATEZ_FH_CRCZ_FH_COMPRESSED_SIZEZ_FH_UNCOMPRESSED_SIZEr�r�rCrDrArFrGrEZ_CD64_SIGNATUREZ_CD64_DIRECTORY_RECSIZEZ_CD64_CREATE_VERSIONZ_CD64_EXTRACT_VERSIONZ_CD64_DISK_NUMBERZ_CD64_DISK_NUMBER_STARTZ_CD64_NUMBER_ENTRIES_THIS_DISKZ_CD64_NUMBER_ENTRIES_TOTALZ_CD64_DIRECTORY_SIZEZ_CD64_OFFSET_START_CENTDIRr<ZStructr+r5r9r rTr6�objectr r�r�r�r�r�r�r�r�r�rr�r1r r r�rrrrr�sB              +=[= &-J/ B