Pc @sdZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z yddl Z e j Z Wn e k reZ ej Z nXddddddd d d g Zdefd YZd efd YZeZdd>dZdd>Zdd>dZdZdZdZdZejeZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(eje'Z)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5d Z6d!Z7d"Z8d#Z9dZ:d$Z;d%Z<d&Z=d'Z>eje=Z?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKd(ZLd)ZMejeLZNd*ZOd+ZPejeOZQdZRdZSdZTdZUdZVdZWdZXdZYdZZdZ[d,Z\d-Z]d.Z^d/Z_de`fd0YZad1fd2YZbd3e jcfd4YZdd fd5YZed eefd6YZfed7Zgehd8kregndS(9s Read and write ZIP files. iNt BadZipfileterrort ZIP_STOREDt ZIP_DEFLATEDt is_zipfiletZipInfotZipFilet PyZipFilet LargeZipFilecBseZRS((t__name__t __module__(((s..\python\lib\zipfile.pyRscBseZdZRS(su Raised when writing a zipfile, the zipfile requires ZIP64 extensions and those extensions are disabled. (R R t__doc__(((s..\python\lib\zipfile.pyRsiiiiis<4s4H2LHsPKiiiiiii s<4s4B4HL2L5H2LsPKi i i i iiiis <4s2B4HL2L2HsPKs<4sLQLsPKs <4sQ2H2L4QsPKcCs,yt|rtSWntk r'nXtS(N(t _EndRecDatatTruetIOErrortFalse(tfp((s..\python\lib\zipfile.pyt_check_zipfiles   cCsgt}yIt|dr*td|}n$t|d}t|}WdQXWntk rbnX|S(sQuickly see if a file is a ZIP file by checking the magic number. The filename argument may be a file or file-like object too. treadRtrbN(RthasattrRtopenR(tfilenametresultR((s..\python\lib\zipfile.pyRs c CsBy|j|tdWntk r,|SX|jt}tjt|\}}}}|tkrj|S|dks|dkrtdn|j|tt d|jt }tjt |\ }}} } } } } }}}|t kr|S||t <| |t <| |t<| |t<||t<||t<||t<|S(sM Read the ZIP64 end-of-archive records and use that to update endrec iiis3zipfiles that span multiple disks are not supported(tseektsizeEndCentDir64LocatorRRtstructtunpacktstructEndArchive64LocatortstringEndArchive64LocatorRtsizeEndCentDir64tstructEndArchive64tstringEndArchive64t_ECD_SIGNATUREt_ECD_DISK_NUMBERt_ECD_DISK_STARTt_ECD_ENTRIES_THIS_DISKt_ECD_ENTRIES_TOTALt _ECD_SIZEt _ECD_OFFSET(tfpintoffsettendrectdatatsigtdisknotrelofftdiskstsztcreate_versiont read_versiontdisk_numtdisk_dirtdircountt dircount2tdirsizet diroffset((s..\python\lib\zipfile.pyt _EndRecData64s.  0        cCs|jdd|j}y|jt dWntk rEd SX|j}|dd!tkr|ddkrtjt |}t |}|j d|j |tt |t |St |d td}|j|d|j}|jt}|dkr|||t!}t tjt |}||t}|tt|kr|j ||j ||t |||||Snd S( sReturn data from the "End of Central Directory" record, or None. The data is a list of the nine items in the ZIP "End of central dir" record followed by a tenth item, the file seek offset of this record.iiiittiiNi(RttelltsizeEndCentDirRtNoneRtstringEndArchiveRRtstructEndArchivetlisttappendR9tmaxtrfindt_ECD_COMMENT_SIZEtlen(R(tfilesizeR+R*tmaxCommentStarttstarttrecDatatcomment((s..\python\lib\zipfile.pyR s6   #      cBsGeZdZdZdddZdZdZdZdZRS(s>Class with attributes describing each file in the ZIP archive.t orig_filenameRt date_timet compress_typeRKtextrat create_systemR1textract_versiontreservedt flag_bitstvolumet internal_attrt external_attrt header_offsettCRCt compress_sizet file_sizet _raw_timetNoNameiiicCs||_|jtd}|dkr:|d|!}ntjdkrptj|krp|jtjd}n||_||_t|_ d|_ d|_ t j dkrd|_n d|_d|_d|_d|_d|_d|_d|_d|_dS(Nit/R;twin32ii(RLtfindtchrtostseptreplaceRRMRRNRKROtsystplatformRPR1RQRRRSRTRURV(tselfRRMt null_byte((s..\python\lib\zipfile.pyt__init__s*               c Cs|j}|ddd>|dd>B|dB}|dd>|d d>B|ddB}|jd @rsd}}}n|j}|j}|j}|j}|tks|tkrd }|tj|dtj |d ||}d }d }t d |j |_ t d |j |_ n|j \} } tjtt|j |j| |j|||||t| t| } | | |S(s'Return the per-file header as a string.iii iiiii iisZdZejdZddZ ddZ ddZ d Z dd Z d Zd ZRS(sZFile-like object for reading an archive member. Is returned by ZipFile.open(). iiis*^(?P[^\r\n]+)|(?P\n|\r\n?)cCs||_||_|j|_|j|_|j|_|jtkrZtj d|_ nd|_ d|_ d|_ d|k|_d|_|jdk r|jd8_n||_|j|_t|dr|j|_tdd@|_n d|_dS(NiR;itUi RXl(t_fileobjt _decrypterRNt_compress_typeRYt_compress_sizet_compress_leftRtzlibt decompressobjt _decompressort _unconsumedt _readbuffert_offsett _universalR>tnewlinestmodeRtnameRRXt _expected_crctcrc32t _running_crc(RftfileobjRtzipinfot decrypter((s..\python\lib\zipfile.pyRhs(            icCs|j ra|dkra|jjd|jd}|dkra|j|j|!}||_|Sn|js}tjj||Sd}x|dkst||kr|jd}|dkr|S|j j |}|j d}|dk rJ|j dkr g|_ n||j kr-|j j|n|jt|7_|dS|j d}|dkr|||t| }n|jt|7_||7}qW|S( srRead and return a line from the stream. If limit is specified, at most limit bytes will be read. is iR;itnewlinetchunkN(RRR_RtiotBufferedIOBasetreadlineRFtpeektPATTERNtsearchtgroupR>RRB(RftlimitRtlinet readaheadtmatchRR((s..\python\lib\zipfile.pyRs8   !     cCs[|t|j|jkrC|j|}|jt|8_n|j|j|jd!S(s6Returns buffered bytes without advancing the position.i(RFRRR(RftnR((s..\python\lib\zipfile.pyR.scCstS(N(R (Rf((s..\python\lib\zipfile.pytreadable7scCsd}|dkrd}nxztr|dkrB|j|}n2|t|krp|j|t|}n|St|dkr|S||7}qWdS(sRead and return up to n bytes. If the argument is omitted, None, or negative, data is read and returned until EOF is reached.. R;iiN(R>R tread1RF(RfRtbufR+((s..\python\lib\zipfile.pyR:s    cCs^|jdkrdSt||jd@|_|rZ|j|jkrZtd|jndS(NlsBad CRC-32 for file %r(RR>RRRR(Rftnewdatateof((s..\python\lib\zipfile.pyt _update_crcLs c Csg|dks|dkr$|j}nt|j|j}|jdkrW||t|jkrW||t|j}t||j}t ||j}|j j |}|jt|8_|r|j dk rdj t|j |}n|jtkrE|j|d|jdk|j|j||_d|_qW|j|7_nt|jdkr4||kr4|jtkr4|jj|jt|||j}|jj|_t|jdko|jdk}|r||jj7}n|j|d||j|j||_d|_n|j|j|j|!}|jt|7_|S(s7Read up to n bytes with at most one read() system call.iR;RN(R>tMAX_NRFRRRRRCt MIN_READ_SIZEtminRRRtjointmapRRRRRt decompresstunconsumed_tailtflush(RfRtlen_readbuffertnbytesR+R((s..\python\lib\zipfile.pyRVs> ( ! $ iN(R R R RRtretcompileRR>RhRRRRRR(((s..\python\lib\zipfile.pyRs  2   cBseZdZdZdeedZdZdZ dZ dZ dZ dZ d Zd Zd Zd Zdd ZdddZdddZddddZdZdZdddZddZdZdZRS(sd Class with methods to open, read, write, close, list zip files. z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=False) file: Either the path to the file, or a file-like object. If it is a path, the file will be opened and closed by ZipFile. mode: The mode can be either read "r", write "w" or append "a". compression: ZIP_STORED (no compression) or ZIP_DEFLATED (requires zlib). allowZip64: if True ZipFile will create files with ZIP64 extensions when needed, otherwise it will raise an exception when this would be necessary. trcCsB|dkrtdn|tkr*n*|tkrKtsTtdqTn td||_t|_d|_i|_g|_ ||_ |j dd d|_ }d|_d |_t|trXd|_||_id d6d d6d d6}yt||||_Wqtk rT|dkrNd}}t||||_qUqXn'd |_||_t|dd|_|dkr|jn|dkrt|_n|dkry$|j|jj|jdWq>tk r|jjddt|_q>Xn+|js5|jjd|_ntddS(s>Open the ZIP file with mode read "r", write "w" or append "a".Rtwtas(ZipFile() requires mode "r", "w", or "a"s.Compression requires the (missing) zlib modules(That compression method is not supporteditbR;Rtwbsr+biRisMode must be "r", "w" or "a"N(RRR(R|RRRt _allowZip64Rt _didModifytdebugt NameToInfotfilelistt compressionRcRR>RRKRvt basestringt _filePassedRRRRtgetattrt _GetContentsR t_RealGetContentsRt start_dirRtclose(RftfileRRt allowZip64tkeytmodeDict((s..\python\lib\zipfile.pyRhs^                               cCs|S(N((Rf((s..\python\lib\zipfile.pyt __enter__scCs|jdS(N(R(Rfttypetvaluet traceback((s..\python\lib\zipfile.pyt__exit__scCsKy|jWn6tk rF|js@|jjd|_nnXdS(sORead the directory, making sure we close the file if the format is bad.N(RRRRRR>(Rf((s..\python\lib\zipfile.pyRs    c Cs'|j}yt|}Wntk r8tdnX|sKtdn|jdkrb|GHn|t}|t}|t|_|t ||}|t t kr|t t 8}n|jdkr||}dG|G|G|GHn|||_|j|jd|j|}tj|}d}x||kr"|jt} | dd!tkrdtdntjt| } |jdkr| GHn|j| t} t| } |j| t| _|j| t| _| t| _| dd!\ | _| _ | _!| _"| _#| _$} } | _%| _&| _'| d d !\| _(| _)| _*| | _+| d ?d | d ?d @| d@| d?| d ?d@| d@df| _,| j-| j|| _| j.| _/|j0j1| | |j2| j/<|t| t| t| t}|jdkr*dG|GHq*q*WdS(s/Read in the table of contents for the ZIP file.sFile is not a zip fileiisgiven, inferred, offsetiis&Bad magic number for central directoryi iii iiii i?ttotalN(3RR RRRR&R't _ECD_COMMENTRKt _ECD_LOCATIONR!R RRRRRt cStringIOtStringIOtsizeCentralDirtstringCentralDirRRtstructCentralDirt_CD_FILENAME_LENGTHRt_CD_EXTRA_FIELD_LENGTHROt_CD_COMMENT_LENGTHt_CD_LOCAL_HEADER_OFFSETRWR1RPRQRRRSRNRXRYRZRTRURVR[RMRR{RRRBR(RfRR*tsize_cdt offset_cdtconcattinferredR+RtcentdirRtxtttd((s..\python\lib\zipfile.pyRs`           I & "cCs.g}x!|jD]}|j|jqW|S(s+Return a list of file names in the archive.(RRBR(RftlR+((s..\python\lib\zipfile.pytnamelist4scCs|jS(sJReturn a list of class ZipInfo instances for files in the archive.(R(Rf((s..\python\lib\zipfile.pytinfolist;scCsJdd GHx:|jD]/}d|jd }d|j||jfGHqWdS( s+Print a table of contents for the zip file.s%-46s %19s %12ss File Names Modified tSizes%d-%02d-%02d %02d:%02d:%02dis %-46s %s %12dN(s File Names Modified R(RRMRRZ(Rftzinfotdate((s..\python\lib\zipfile.pytprintdir@s cCsed}xX|jD]M}y/|j|jd}x|j|rCq1WWqtk r\|jSXqWdS(s%Read all the files and check the CRC.iiRNi(RRRRR(Rft chunk_sizeRtf((s..\python\lib\zipfile.pyttestzipGs cCs5|jj|}|dkr1td|n|S(s,Return the instance of ZipInfo given 'name'.s(There is no item named %r in the archiveN(RtgetR>tKeyError(RfRtinfo((s..\python\lib\zipfile.pytgetinfoTs  cCs ||_dS(s)Set default password for encrypted files.N(R(RfR((s..\python\lib\zipfile.pyt setpassword]scCs|j|d|jS(s)Return file bytes (as a string) for name.R(RR(RfRR((s..\python\lib\zipfile.pyRasc Cs |dkrtdn|js-tdn|jrB|j}nt|jd}t|trl|}n|j|}|j|j d|j t }|dd!t krt d ntjt|}|j |t}|tr|j |tn||jkr't d |j|fn|jd @}d} |r|sR|j}n|shtd |nt|} |j d } t| | dd !} |jd@r|jd?d@} n|jd?d@} t| d| krtd|qnt|||| S(s#Return file-like object for 'name'.RRtrUs&open() requires mode "r", "U", or "rU"s3Attempt to read ZIP archive that was already closedRiis Bad magic number for file headers3File name in directory "%s" and header "%s" differ.is6File %s is encrypted, password required for extractioni iiii sBad password for file(RRsrUN(R|RRRRRvRR RRWRtsizeFileHeaderRnRRRRmt_FH_FILENAME_LENGTHt_FH_EXTRA_FIELD_LENGTHRLRSR>RRRR[RXRR( RfRRRtzef_fileRtfheadertfnamet is_encryptedtzdtbytestht check_byte((s..\python\lib\zipfile.pyResP              cCsOt|ts!|j|}n|dkr<tj}n|j|||S(s#Extract a member from the archive to the current working directory, using its full name. Its file information is extracted as accurately as possible. `member' may be a filename or a ZipInfo object. You can specify a different directory using `path'. N(RvRR R>Ratgetcwdt_extract_member(RftmembertpathR((s..\python\lib\zipfile.pytextracts  cCsC|dkr|j}nx!|D]}|j|||q"WdS(sExtract all members from the archive to the current working directory. `path' specifies a different directory to extract to. `members' is optional and must be a subset of the list returned by namelist(). N(R>RR(RfRtmembersRR((s..\python\lib\zipfile.pyt extractalls  cCsm|dtjjtjjfkrQttjj|ddkrQ|d }n|jddkrtjj||jd}ntjj||j}tjj|}tjj |}|rtjj | rtj |n|jddkr!tjj |stj |n|S|j|d|}t|d}tj|||j|j|S(sbExtract the ZipInfo object 'member' to a physical file on the path targetpath. iiiR]RR(RaRRbtaltsepRFt splitdriveRRtnormpathtdirnametexiststmakedirstisdirtmkdirRRtshutilt copyfileobjR(RfRt targetpathRt upperdirstsourcettarget((s..\python\lib\zipfile.pyRs(""   cCs|j|jkr-|jr-dG|jGHq-n|jd krHtdn|js]tdn|jtkrt rtdn|jt tfkrtdn|j t kr|j st dqn|jt kr|j st d qnd S( s6Check for errors before writing a file to the archive.sDuplicate name:RRs write() requires mode "w" or "a"s4Attempt to write ZIP archive that was already closeds.Compression requires the (missing) zlib modules(That compression method is not supporteds'Filesize would require ZIP64 extensionss+Zipfile size would require ZIP64 extensionsN(RR(RRRRR|RRNRRRRZRiRRRW(RfR((s..\python\lib\zipfile.pyt _writechecks(        cCs|jstdntj|}tj|j}tj|j}|dd!}|dkrm|}ntj j tj j |d}x*|dtj tjfkr|d}qW|r|d7}nt||}|dd@d>|_|dkr|j|_n ||_|j|_d|_|jj|_|j|t|_|rd|_d|_d|_|jj|||j|j <|jj!|j"dSt#|d } d|_} d|_} d|_} |jj!|j"|jt$kr+t%j&t%j't%j(d } nd} xw| j)d}|sMPn| t*|} t+|| d @} | r| j,|}| t*|} n|jj!|q4WdQX| r| j-}| t*|} |jj!|| |_n | |_| |_| |_|jj}|jj.|jdd|jj!t/j0d|j|j|j|jj.|d|jj|||j|j RR#R"RbR!RRVRRNtst_sizeRZRSR<RWR/R RRYRXRRBRRtwriteRtRRRt compressobjtZ_DEFAULT_COMPRESSIONtDEFLATEDRRFRtcompressRRRRj(RfRtarcnameRNtstR'tmtimeRMRRRXRYRZtcmprRtposition((s..\python\lib\zipfile.pyR7s     "                    cCst|tsOtd|dtjtjd }|j|_d |_n|}|jsmtdn|d k r||_nt ||_ |jj |_ |j|t|_t|d@|_|jtkr$tjtjtjd}|j||j}t ||_n |j |_|jj |_ |jj|j|jj||jj|jd @r|jjtjd |j|j|j n|j j!|||j"|j#RFRZR<RWR/R RRRXRRR8R9R:R;RRYR7RtRSRRjRRBRR(Rftzinfo_or_arcnameRRNRtco((s..\python\lib\zipfile.pytwritestrQs>             cCs|jdS(s2Call the "close()" method in case the user forgot.N(R(Rf((s..\python\lib\zipfile.pyt__del__|scCs|jdkrdS|jdkr|jrd}|jj}x|jD]}|d}|j}|ddd>|dd>B|d B}|d d >|d d>B|dd B}g}|jtks|j tkr|j |j|j |j d }d } n|j}|j } |j tkr<|j |j d } n |j } |j } |rt jddt|ddt||| } td|j} td|j} n|j} |j} y|j\}}t jtt| |j| |j||j|||j| |t|t| t|jd|j|j| }Wntk rtjtt| |j| |j|j |j|||j| |t|j!t| t|jd|j|j| fIJnX|jj"||jj"||jj"| |jj"|jqJW|jj}|}||}|}|t#ksc|tksc|tkrt jt$t%ddddd|||| }|jj"|t jt&t'd|d}|jj"|t(|d}t(|d }t(|d }nt|jt)kr?|j*dkr,dt)}n|jt) |_nt jt+t,dd||||t|j }|jj"||jj"|j|jj-n|j.s|jj/nd|_dS(sJClose the file, and for mode "w" and "a" write the ending records.NRRiiii iiii ilsRRR<RRMRZRiRYRBRWRORRjRFRCRQR1RlRRRPRRRNRXRKRURVtDeprecationWarningRdtstderrRSRR7tZIP_FILECOUNT_LIMITRR RRRtZIP_MAX_COMMENTRR@R?RRR(Rftcounttpos1RRoRpRqRORZRYRWt extra_dataRQR1RRSRtpos2t centDirCountt centDirSizet centDirOffsett zip64endrect zip64locrectmsgR*((s..\python\lib\zipfile.pyRs  &&              !          N(R R R R>RRRRhRRRRRRRRR R RRRR RR/R7RCRDR(((s..\python\lib\zipfile.pyRs. C   C     E % Q + cBs#eZdZddZdZRS(sDClass to create ZIP archives with Python library files and packages.R;c Cstjj|\}}tjj|r|tjj|d}tjj|r|rjd||f}n|}|jrdG|GdG|GHn|j|dd!|\}}|jrdG|GHn|j||tj |}|j dx|D]} tjj|| } tjj | \} } tjj| rptjjtjj| dr|j | |qq| dkr|j| dd!|\}}|jrdG|GHn|j||qqWq|jrd G|GHnxtj |D]} tjj|| } tjj | \} } | dkr|j| dd!|\}}|jrbdG|GHn|j||qqWn`|ddkrt d n|j|dd!|\}}|jrd G|GHn|j||d S( s,Add all files from "pathname" to the ZIP archive. If pathname is a package directory, search the directory and all package subdirectories recursively for all *.py and enter the modules into the archive. If pathname is a plain directory, listdir *.py and enter all modules. Else, pathname must be a Python *.py file and the module will be put into the archive. Added modules are always module.pyo or module.pyc. This method will compile the module.py into module.pyc if necessary. s __init__.pys%s/%ssAdding package intasiitAddings.pysAdding files from directorys.Files added with writepy() must end with ".py"s Adding fileN(RaRtsplitR'RtisfileRt _get_codenameR7tlistdirtremovetsplitexttwritepyR|( RftpathnametbasenametdirRtinitnameRR<tdirlistRRtroottext((s..\python\lib\zipfile.pyR\sZ      !           c Cs8|d}|d}|d}tjj|r]tj|jtj|jkr]|}ntjj| stj|jtj|jkrddl}|jrdG|GHny|j||dt Wn|j k r}|j GHnX|}n|}tjj |d} |r.d|| f} n|| fS( sReturn (filename, archivename) for the path. Given a module name path, return the correct file path and archive name, compiling if necessary. For example, given /python/lib/string, return (/python/lib/string.pyc, string). s.pys.pycs.pyoiNt Compilingis%s/%s( RaRRWR0R5t py_compileRRR>R tPyCompileErrorRSRV( RfR]R^tfile_pytfile_pyctfile_pyoRReterrt archivename((s..\python\lib\zipfile.pyRX3s*   $ $     (R R R R\RX(((s..\python\lib\zipfile.pyRs Ac sddl}|jd}|dkr7tjd}n| sN|ddkrc|GHtjdn|ddkrt|d kr|GHtjdnt|dd }|j|j n,|ddkr9t|d kr|GHtjdnt|dd }|j }|r1d j |GHnd GHn|ddkrSt|d krp|GHtjdnt|dd }|d }x|j D]}|j drtjj||d }ntjj||}tjj|}tjj|stj|nt|d} | j|j|WdQXqW|j n|ddkrt|d kr|GHtjdnfdt|dddt}x.|d D]"} || tjj| qW|j ndS(NisE 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 iis-ls-cs-es-tiRs.The following enclosed file is corrupted: {!r}s Done testingis./Rcstjj|r(|j||tn]tjj|rxHtj|D]4}|tjj||tjj||qJWndS(N(RaRRWR7RR'RYR(tzfRtzippathtnm(taddToZip(s..\python\lib\zipfile.pyRos RR(s-ls-cs-es-t(ttextwraptdedentR>RdtargvtexitRFRRRRtformatRt startswithRaRRR$R%R&RR7RR R^( targsRptUSAGERltbadfiletoutRttgtttgtdirRtsrc((Ros..\python\lib\zipfile.pytmainRsb           t__main__(iR RRaR3RdR)tbinasciiRR0RRRRt ImportErrorR>t__all__t ExceptionRRRRiRHRIRRR@R?RkR=R!R"R#R$R%R&R'RERRRRRt _CD_SIGNATUREt_CD_CREATE_VERSIONt_CD_CREATE_SYSTEMt_CD_EXTRACT_VERSIONt_CD_EXTRACT_SYSTEMt _CD_FLAG_BITSt_CD_COMPRESS_TYPEt_CD_TIMEt_CD_DATEt_CD_CRCt_CD_COMPRESSED_SIZEt_CD_UNCOMPRESSED_SIZERRRt_CD_DISK_NUMBER_STARTt_CD_INTERNAL_FILE_ATTRIBUTESt_CD_EXTERNAL_FILE_ATTRIBUTESRRmRnRt _FH_SIGNATUREt_FH_EXTRACT_VERSIONt_FH_EXTRACT_SYSTEMt_FH_GENERAL_PURPOSE_FLAG_BITSt_FH_COMPRESSION_METHODt_FH_LAST_MOD_TIMEt_FH_LAST_MOD_DATEt_FH_CRCt_FH_COMPRESSED_SIZEt_FH_UNCOMPRESSED_SIZERRRRRRR Rt_CD64_SIGNATUREt_CD64_DIRECTORY_RECSIZEt_CD64_CREATE_VERSIONt_CD64_EXTRACT_VERSIONt_CD64_DISK_NUMBERt_CD64_DISK_NUMBER_STARTt_CD64_NUMBER_ENTRIES_THIS_DISKt_CD64_NUMBER_ENTRIES_TOTALt_CD64_DIRECTORY_SIZEt_CD64_OFFSET_START_CENTDIRRRR9R tobjectRRRRRRR}R (((s..\python\lib\zipfile.pyts<$           ' :;ec J