1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
+ w* RtRtRtRt^RIHt^RIt^RIt^RI t ^RI t ^RI t ^RI t ^RI t ^RIt^RIt^RIt^RIt]]]3t.RdOtRtRt]^,tRtRt^dt^dt^tRt Rt!Rt"Rt#Rt$Rt%Rt&Rt'R t(R!t)R"t*R#t+R$t,R%t-R&t.^t/^t0^t1]1t2] ]!]"]#]&]'](]$]%])]*]+3 t3] ]!](]+3t4])]*]+3t5Ret60Rfmt7R+]8R,]8R(]8R)]9R*]9R']9/t:]PvR-8XdR.tR0t?R1t@^]23R2ltAR3tBR]R3R4ltCR5tD!R6R]E4tF!R7R ]F4tG!R8R ]F4tH!R9R ]F4tI!R:R ]F4tJ!R;R ]F4tK!R<R=]K4tL!R>R?]K4tM!R@RA]K4tN!RBRC]K4tO!RDRE]K4tP!RFRG4tQ!RHRI4tR!RJRK]S4tT!RLRM]S4tU!RNRO] P4tW!RPR]F4tX!RQR]X4tY!RRR]X4tZ!RSR]X4t[!RTR]X4t\!RUR]X4t]!RVR]X4t^]X]]G3t_RgRWlt`RXtaRYtbRZtcR[]aR\]bR]]c/td]S!4te]P!R^4tg!R_R]S4th!R`R]S4tiRatj]iP tRbtk]lRc8Xd ]k!4R#R# ]dRtEL:i;i ]dRtELEi;i)hz,Read from and write to tar format archives. z0.9.0u"Lars Gustäbel (lars@gustaebel.de)u4Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.)openNTarFileTarInfoTarError ReadErrorCompressionError StreamError ExtractError HeaderError FilterErrorAbsoluteLinkErrorOutsideDestinationErrorSpecialFileErrorAbsolutePathErrorLinkOutsideDestinationErrorLinkFallbackErrorisustar sustar0001234567LKSxgXsizemtimeuidgidatimectimentutf-8cVf \R4hVPW#4pVRVV\V4, \,,#)z8Convert a string to a null-terminated bytes object. Nzmetadata cannot contain None) ValueErrorencodelenNUL)slengthencodingerrorss&&&&-D:/M/msys64/mingw64/lib/python3.14/tarfile.pystnr3sA y788 "A Wf:#a&C/ //c^VPR4pVR8wdVRVpVPW4#)z8Convert a null-terminated bytes object to a string. rN)finddecode)r.r0r1ps&&& r2ntsr:s2 u ABw bqE 88H %%r4cV^,R9du^p\\V4^, 4F"pV^,pWV^,,, pK$ V^,^8Xd"R\V4^, ,V, )pV#\VRR4p\VP 4;'gR^4pV# \ d \ R4hi;i)z/Convert a number field to a python number. asciistrict0invalid header))ranger,r:intstripr*InvalidHeaderError)r.nis& r2ntirIs  t~ s1vz"A !GA 1q5MA# Q45=#a&1*%)*A H  7Aw)AAGGI$$a(A H 7$%56 6 7s(B7-B77CcTp\V4p^Tu;8:d^V^, ,8d-MM)\RV^, V3,R4\,pV#V\8XdRV^, ,)Tu;8:dRV^, ,8dqMMmV^8d\ ^.4pM\ ^.4pRV,V,p\ V^, 4F%pVP ^V^,4V^,pK' V#\R4h)z/Convert a python number to a number field. z%0*or=r<zoverflow in number field)rDbytesr- GNU_FORMAT bytearrayrCinsertr*)rGdigitsformat original_nr.rHs&&& r2itnrRsJ AAA!fqj!! &FQJ?*G 4s : H : 36A:#6"6!"Qcfqj>Q"Q 65'"A5'"Av !Avz"A HHQE " !GA# H344r4cR\\P!RV44,pR\\P!RV44,pW3#)azCalculate the checksum for a member's header by summing up all characters except for the chksum field which is treated as if it was filled with spaces. According to the GNU tar sources, some tars (Sun and NeXT) calculate chksum with signed char, which will be different if there are chars in the buffer with the high bit set. So we calculate two checksums, unsigned and signed. r< 148B8x356B 148b8x356b)sumstruct unpack_from)bufunsigned_chksum signed_chksums& r2 calc_chksumsr\sEC 2 2< EFFO#f00sCDDM  ))r4cT;'gRpV^8XdR#Vf\P!WV4R#\W$4wrV\V4F=pVP V4p\ V4V8d V!R4hVP V4K? V^8wd;VP V4p\ V4V8d V!R4hVP V4R#)z_Copy length bytes from fileobj src to fileobj dst. If length is None, copy the entire content. Nunexpected end of datai@)shutil copyfileobjdivmodrCreadr,write) srcdstr/ exceptionbufsizeblocks remainderbrYs &&&&& r2r`r`s""G { ~3W-v/F 6]hhw s8g 45 5 #  A~hhy! s8i 45 5 # r4c\\PRR4pVe"VPVR4P V4p\ VRR7R#)r0Nbackslashreplace )end)getattrsysstdoutr+r8print)r.r0s& r2 _safe_printrss@szz:t4H HHX1 2 9 9( C !r4c]tRtRtRtRtR#)ri zBase exception.N__name__ __module__ __qualname____firstlineno____doc____static_attributes__rur4r2rr sr4c]tRtRtRtRtR#)r iz%General exception for extract errors.ruNrvrur4r2r r s/r4c]tRtRtRtRtR#)riz&Exception for unreadable tar archives.ruNrvrur4r2rrs0r4c]tRtRtRtRtR#)riz.Exception for unavailable compression methods.ruNrvrur4r2rrs8r4c]tRtRtRtRtR#)riz=Exception for unsupported operations on stream-like TarFiles.ruNrvrur4r2rrsGr4c]tRtRtRtRtR#)r iz!Base exception for header errors.ruNrvrur4r2r r s+r4c]tRtRtRtRtR#)EmptyHeaderErrorizException for empty headers.ruNrvrur4r2rrs&r4rc]tRtRtRtRtR#)TruncatedHeaderErrori!z Exception for truncated headers.ruNrvrur4r2rr!s*r4rc]tRtRtRtRtR#)EOFHeaderErrori$z"Exception for end of file headers.ruNrvrur4r2rr$s,r4rc]tRtRtRtRtR#)rFi'zException for invalid headers.ruNrvrur4r2rFrF's(r4rFc]tRtRtRtRtR#)SubsequentHeaderErrori*z3Exception for missing and invalid extended headers.ruNrvrur4r2rr*s=r4rc<a]tRtRtoRtRtRtRtRtRt Vt R#) _LowLevelFilei1zwLow-level file object. Supports reading and writing. It is used instead of a regular file object for streaming access. c>R\PR\P\P,\P,/V,p\ \R4'dV\P ,p\P!WR4VnR#)rwO_BINARYiN) osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrrrfd)selfnamemodes&&&r2__init___LowLevelFile.__init__7sf  rzz)BJJ6   2z " " BKK D''$e,r4cF\P!VP4R#N)rcloserrs&r2r_LowLevelFile.close@s r4cD\P!VPV4#r)rrbrrr!s&&r2rb_LowLevelFile.readCswwtww%%r4cH\P!VPV4R#r)rrcrrr.s&&r2rc_LowLevelFile.writeFs !r4)rN) rwrxryrzr{rrrbrcr|__classdictcell__ __classdict__s@r2rr1s# -&r4rcpa]tRtRtoRtRtRtRtRtRt Rt R t R t RR lt R tR tRtRtVtR#)_StreamiIaClass that serves as an adapter between TarFile and a stream-like object. The stream-like object only needs to have a read() or write() method that works with bytes, and the method is accessed blockwise. Use of gzip or bzip2 compression is possible. A stream-like object could be for example: sys.stdin.buffer, sys.stdout.buffer, a socket, a tape device etc. _Stream is intended to be used only internally. c |RVnVf\W4pRVnVR8Xd\V4pVP4pVe\P !V4MRVnW nW0nW@n WPn RVn ^Vn RVn VR8Xd_^RIpYnTP#R4TnTR 8Xd$TP&TnTP+4R#TP-T4R#VR 8XdN^RIp TR 8Xd*RTnT P34Tn\6TnR#T P9T4TnR#VR 8XdU^RIp TR 8Xd0RTnT P=4TnT P>TnR#T PATR7TnR#VR8XdU^RI!H"p TR 8Xd0RTnT PG4TnT PHTnR#T PK4TnR#VR8wd\!RV,4hR# \d\!R4Rhi;i \d\!R 4Rhi;i \d\!R 4Rhi;i \d\!R4Rhi;i TP'gTPPM4RTn h;i)z$Construct a _Stream object. TNF*r4gzzzlib module is not availablerbz2bz2 module is not availablexzlzma module is not availablepresetzst)zstd(compression.zstd module is not availabletarunknown compression type %r)' _extfileobjr _StreamProxy getcomptyperfspathrrcomptypefileobjrgrYposclosedzlib ImportErrorrcrc32crcerrorrf _init_read_gz_init_write_gzrdbufBZ2DecompressorcmpOSError BZ2CompressorlzmaLZMADecompressor LZMAErrorLZMACompressor compressionrZstdDecompressor ZstdErrorZstdCompressorr) rrrrrrg compresslevelrrrrrs &&&&&&&& r2r_Stream.__init__Us  ?#D/G$D  s?#7+G**,H+/+; $      7 4U! ::c?3;%)ZZDN&&('' 6U"T3; #DI"224DH%,DN"00?DHT!U3; #DI#446DH%)^^DN#22&2ADHU"a03; #DI#446DH%)^^DN#224DHU"&'Dx'OPP#Y#U*+IJPTTU#T*+HItST#U*+IJPTTU#a*+UV\``a ### ""$DK sJHAJ!J4J<H4.J0JJI4J J#J+I*14J'J>JH11J4I  JI''J*JJ6J;cv\VR4'd'VP'gVP4R#R#R#)rN)rrrrs&r2__del___Stream.__del__s( 4 " "4;;; JJL,7 "r4c VPPVVPPVPP)VPP^4Vn\ P!R\\P!444pVPRV,R,4VPPR4'dVPRRVn \PPVP4Vn VPVPP!RR4\",4R#) z6Initialize for writing with gzip compression. DEr4c :VPR8Xd+VPPWP4VnV;P\ V4, unVPR8wdVP PV4pVPV4R#)z&Write string s to the stream. rrN) rrrrrr,rcompressrrs&&r2rc _Stream.writese ==D yyq((3DH CF ==E !!!!$A Qr4c $V;PV, un\VP4VP8dSVPP VPRVP4VPVPRVnKvR#)zJWrite string s to the stream if a whole new block is ready to be written. N)rYr,rgrrcrs&&r2__write_Stream.__writesa A $((mdll* LL  txx 6 7xx .DH+r4c ZVP'dR#RVnVPR8XdCVPR8wd2V;PVPP 4, unVPR8XdVP'dVP PVP4RVnVPR8Xd|VP P\P!RVP44VP P\P!RVPR,44VP'gVP P4R#R# TP'gTP P4ii;i) zHClose the _Stream object. No operation should be done on it afterwards. NTrrr4rrl)rrrrYrflushrrcrWrrrrrrs&r2r _Stream.closes ;;;   %yyCDMMU$:DHHNN,,yyCDHHH ""488,==D(LL&&v{{4'BCLL&&v{{4J9N'OP### ""$$4### ""$$sA5E;B8E;;/F*c 8VPPVPP)4VnRVnVP ^4R8wd \ R4hVP ^4R8wd \R4h\VP ^44pVP ^4V^,'dR\VP ^44R\VP ^44,,pVPV4V^,'d)VP ^4pV'dV\8XgK'V^,'d)VP ^4pV'dV\8XgK'V^,'dVP ^4R#R#)z:Initialize for reading a gzip compressed fileobj. r4snot a gzip filezunsupported compression methodr<N) r decompressobjrrr _Stream__readrrordrbr-)rflagxlenr.s& r2r_Stream._init_read_gzs%99**DII,?,?+?@  ;;q>[ (-. . ;;q>W $"#CD D4;;q>" A !88t{{1~&s4;;q>/B)BBD IIdO !88KKNAH "99KKNAH !88 KKN r4c VP#)z3Return the stream's file pointer position. )rrs&r2tell _Stream.tells xxr4c *WP, ^8ds\WP, VP4wr#\V4FpVP VP4K VP V4VP#\ R4h)zESet the stream's file pointer to pos. Negative seeking is forbidden. z seeking backwards is not allowed)rrargrCrbr)rrrhrirHs&& r2seek _Stream.seeksn >Q  &sXX~t|| D F6] $,,'# IIi xx@A Ar4c xVfQhVPV4pV;P\V4, unV#)z5Return the next size number of bytes from the stream.)_readrr,)rr!rYs&& r2rb _Stream.reads3jj CH r4c HVPR8XdVPV4#\VP4pVP.pW!8dVP'dVPpRVnM.VP P VP4pV'gMAVPPV4pTPT4T\T4, pKRPV4pW1RVnVRV# TPdp\R4ThRp?ii;i)z+Return size bytes from the stream. rr4zinvalid compressed dataN)rrr,rrYrrbrgr decompressrfrappendjoin)rr!ctrYes&& r2r _Stream._reads ==E !;;t$ $  N YYKhxxxhhll'' 5 Bhh))#. HHSM SMA HHQKeH $x >> B 9:A Bs C??D! DD!c 6\VP4pVP.pW!8dTVPPVP4pV'gM%VP V4V\V4, pKYRP V4pW1RVnVRV#)z`Return size bytes from stream. If internal buffer is empty, read another block from the stream. r4N)r,rYrrbrgr r )rr!r rrYs&& r2__read_Stream.__read7sz M XXJh,,##DLL1C HHSM SMA HHQKU8$xr4)rrYrgrrrrrrfrrrrrN))rwrxryrzr{rrrrcrrrrrrbrrr|rrs@r2rrIsN ObF"/%,> 6r4rc<a]tRtRtoRtRtRtRtRtRt Vt R#) riHzhSmall proxy class that enables transparent compression detection for the Stream interface (mode 'r|*'). cZWnVPP\4VnR#r)rrb BLOCKSIZErY)rrs&&r2r_StreamProxy.__init__Ms <<$$Y/r4cPVPPVnVP#r)rrbrYrs&&r2rb_StreamProxy.readQsLL%% xxr4c<VPPR4'dR#VPR,R8XdVPR,R8XdR#VPPR 4'dR#VPPR4'dR #R #) sr:rNsBZh: Ns1AY&SYrrs(/rr)s]s7zXZ)rY startswithrs&r2r_StreamProxy.getcomptypeUsq 88   / / XXc]f $$9)D XX !C D D XX !4 5 5r4c:VPP4R#r)rrrs&r2r_StreamProxy.closeas r4)rYrrbN) rwrxryrzr{rrbrrr|rrs@r2rrHs#0 r4rca]tRtRtoRtRRltRt]R4tRt Rt R t R t ] P3R ltRR ltR tRtRtVtR#) _FileInFileihzmA thin wrapper around an existing file object that provides a part of its data as an individual file object. NcWnW nW0n^VnW@nRVnVf^V3.p^Vn.Vn^pVPpVF^wr#W&8dVPPRWbR34VPPRW"V,V34Ws, pW#,pK` W`P8d+VPPRW`PR34R#R#)rFNT) roffsetr!positionrr map_indexmapr )rrr&r!r blockinfolastposrealposs&&&&&& r2r_FileInFile.__init__ns       T I++%LF >? HHOOT6D='B C OGmG & YY  HHOOUGYY= > r4cR#rrurs&r2r_FileInFile.flushs r4cR#)rbrurs&r2r_FileInFile.modesr4cR#Trurs&r2readable_FileInFile.readablesr4cR#)Frurs&r2writable_FileInFile.writablesr4c6VPP4#r)rseekablers&r2r;_FileInFile.seekables||$$&&r4c VP#)z*Return the current file position. )r'rs&r2r_FileInFile.tell}}r4c XV\P8Xd2\\V^4VP4VnVP #V\P 8XdoV^8d/\VP V,^4VnVP #\VP V,VP4VnVP #V\P8XdC\\VPV,VP4^4VnVP #\R4h)z(Seek to a position in the file. zInvalid argument) ioSEEK_SETminmaxr!r'SEEK_CURSEEK_ENDr*)rr'whences&&&r2r_FileInFile.seeks R[[ Ha 0$)) r4r$c2aa]tRtRtoV3RltRtVtV;t#) ExFileObjectic<\VPVPVPVPVP 4p\ SV`V4R#r)r$r offset_datar!rsparsesuperr)rtarfiletarinfor __class__s&&& r2rExFileObject.__init__s;goow/B/B gllGNN< !r4rurwrxryrzrr|r __classcell__r\rs@@r2rUrUs""r4rUc]tRtRtRtR#)r iruN)rwrxryrzr|rur4r2r r sr4c2aa]tRtRtoV3RltRtVtV;t#)ricP<Wn\SV` RVP: R24R#)zmember z has an absolute pathNr[rYrrrr[r\s&&r2rAbsolutePathError.__init__s$  77<<"22GHIr4r[r^r`s@@r2rrsJJr4c2aa]tRtRtoV3RltRtVtV;t#)r icp<WnW n\SV` VP: RV: R2R,4R#)z would be extracted to , which is outside the destinationNr[_pathrYrrrr[rr\s&&&r2r OutsideDestinationError.__init__s7   GLL++B4("M=> ?r4rmr[r^r`s@@r2r r ??r4c2aa]tRtRtoV3RltRtVtV;t#)ricN<Wn\SV` VP: R24R#)z is a special fileNrdres&&r2rSpecialFileError.__init__s"  GLL++=>?r4rgr^r`s@@r2rrs@@r4c2aa]tRtRtoV3RltRtVtV;t#)r icN<Wn\SV` VP: R24R#)z is a link to an absolute pathNrdres&&r2rAbsoluteLinkError.__init__s"  GLL++IJKr4rgr^r`s@@r2r r sLLr4c2aa]tRtRtoV3RltRtVtV;t#)ricp<WnW n\SV` VP: RV: R2R,4R#)z would link to rjrkNrlrns&&&r2r$LinkOutsideDestinationError.__init__s6   GLL+?4("E=> ?r4rpr^r`s@@r2rrrqr4c2aa]tRtRtoV3RltRtVtV;t#)rict<WnW n\SV` RVP: R2RV: R2,4R#)zlink z would be extracted as a zcopy of z, which was rejectedNrlrns&&&r2rLinkFallbackError.__init__s?   5 00IJ%dX-ABC Dr4rpr^r`s@@r2rrsDDr4c/pVPp\PPV\PPR7pVP R\P 34'd5VPPR\P ,4;qCR&\PPV4'd \V4h\PP\PPW4\PPR7p\PPWQ.4V8wd \W4hVPpVeVR,pV'dVP4'gVP4'd#V^@,'g VR ,pVR,pM:VP!4'gVP#4'dRpM \%V4hW`P8wdWcR&V'EdVP&eRVR&VP(eRVR&VP*eRVR &VP,eRVR &VP4'gVP#4'Edj\PPVP.4'd \1V4h\PP3VP.4pWpP.8wdWsR &VP#4'dJ\PPV\PP5V4VP.4pM*\PPVVP.4p\PPV\PPR7p\PPWQ.4V8wd \7W4hV#) )r>/rNirr#r$unamegnamelinknamei)rrrrealpath ALLOW_MISSINGrseplstripisabsrr  commonpathr risregislnkisdirissymrr#r$rrrr normpathdirnamer)member dest_pathfor_data new_attrsr target_pathr normalizeds&&& r2_get_filtered_attrsr sI ;;D  2773H3H II RVV}%%#);;#5#5cBFFl#CC  ww}}T ''''""277<< #@*,''*?*?#AK ww;23y@%f:: ;;D e| ||~~e||FND 6<<>>'v.. ;;  $f x :: !#Ie  :: !#Ie  << #!%Ig  << #!%Ig  <<>>V\\^^ww}}V__--'//))&//:J__,(2*%||~~ ggll9+-77??4+@+1??< !ggll9+1??< ''**;24''2G2G+IKww!!;":;yH1&FF r4cV#rru)rrs&&r2fully_trusted_filterrQs Mr4cZ\WR4pV'dVP!R/VBRR/B#V#)Fdeeprurrrrrs&& r2 tar_filterrTs-#Fu=I~~6 666 Mr4cZ\WR4pV'dVP!R/VBRR/B#V#)TrFrurrs&& r2 data_filterrZs-#Ft4t]R?4t]R@4t]RA4t]RB4t RCt!RDt"REt#RFt$RGt%RHt&RIt'RJt(RKt)RLt*RMt+RNt,ROt-RPt.RQt/RRt0RSt1RTt2RUt3RVt4RWt5RXt6Vt7R&#)[ripzInformational class which holds the details about an archive member given by a tar header block. TarInfo objects are returned by TarFile.getmember(), TarFile.getmembers() and TarFile.gettarinfo() and are usually created internally. rzName of the archive member.rzPermission bits.r#z6User ID of the user who originally stored this member.r$z7Group ID of the user who originally stored this member.r!zSize in bytes.r"zTime of last modification.chksumzHeader checksum.typezFile type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.rzcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.rz User name.rz Group name.devmajorzDevice major number.devminorzDevice minor number.r&zThe tar header starts here.rWzThe file's data starts here. pax_headerszMA dictionary containing key-value pairs of an associated pax extended header.rXzSparse member information._tarfileN_sparse_structs _link_targetc WnRVn^Vn^Vn^Vn^Vn^Vn\VnRVn RVn RVn ^Vn ^Vn ^Vn^VnRVn/VnR#)zEConstruct a TarInfo object. name is the optional name of the member. irN)rrr#r$r!r"rREGTYPErrrrrrr&rWrXrrrs&&r2rTarInfo.__init__s{             r4cR^RIpVPR\^R7VP#rN) stacklevelzhThe undocumented "tarfile" attribute of TarInfo objects is deprecated and will be removed in Python 3.16warningswarnDeprecationWarningr)rrs& r2rZTarInfo.tarfiles-  A 1  .}}r4cJ^RIpVPR\^R7WnR#rr)rrZrs&& r2rZrs(  A 1  . r4c VP#)z(In pax headers, "name" is called "path".rrs&r2r TarInfo.pathsyyr4cWnR#rrrs&&r2rrs r4c VP#)z0In pax headers, "linkname" is called "linkpath".rrs&r2linkpathTarInfo.linkpathr?r4cWnR#rr)rrs&&r2rrs r4chRVPPVP\V43,#)z<%s %r at %#x>)r\rwridrs&r2__repr__TarInfo.__repr__s&4>>#:#:499RX"NNNr4rT_KEEPc  V 'd\P!V4p M\P!V4p WJdWnW*JdW+nW:JdW;nWJJdWKnWZJdW[nWjJdWknWzJdW{nWJdWn V #)zGReturn a deep copy of self with the given attributes replaced. ) copydeepcopyrr"rrr#r$rr) rrr"rrr#r$rrrrresults &$$$$$$$$$$ r2rTarInfo.replaces ]]4(FYYt_F  K   L  K  &O  J  J   L   L r4c VPfRpMVPR,pRVPRVRVPRVPRVPRVP R VP R VPR VPR VPR VPRVPRVP/ pVR ,\8Xd4VR,PR4'gVR;;,R, uu&V#)z9Return the TarInfo's attributes as a dictionary. Nrrr#r$r!r"rrrrrrrr)rrr#r$r!r"rrrrrrrDIRTYPEr)rrinfos& r2get_infoTarInfo.get_infos 99 D99v%D                <7 "4<+@+@+E+E LC L r4surrogateescapec BVP4pVP4FwrVVeK \RV,4h V\8XdVP WBV4#V\ 8XdVP WBV4#V\8XdVPWB4#\R4h)zNPXa aC((z8LLLr4c \VR&VPP4pRR\3RR\3R R 3FIwrEpWS9dKW,P RR4\Y,4T8gK?Y,Y5&KK RFwrGRpW,p \V \4p V 'd \V 4MT p ^T u;8:d^V^, ,8g M^W&R pMV 'dWV&R pV'gKrWC9gKz\V 4W4&K V'dVPV\V4p MR p WPV\RR 4,# \ dY,Y5&EK3i;i)zReturn the object as a ustar header block. If it cannot be represented this way, prepend a pax extended header sequence with supplement information. rrrrrr=r>FTr4r)rr )rrr))r#)r$r)r! )r"r)rrrrrr+UnicodeEncodeErrorr, isinstancefloatroundstr_create_pax_generic_headerXHDTYPErr) rrr0rrhnamer/rO needs_paxval val_is_floatval_intrYs &&& r2rTarInfo.create_pax_header6sb $W &&++- - J /T&(>$@ D#  !!'84 4:'%)Z "!$@(RLDI*C%c51L$0eCjcG3! "33  %T  yT4$'H !%R* 11+wQCC((|WiPPPG& %)Z " sEE,+E,c 0VPV\R4#)zAReturn the object as a pax global header block sequence. r()rXGLTYPE)clsrs&&r2create_pax_global_header TarInfo.create_pax_global_headerps--k7GLLr4c XVPR4p\^\V44FvpRPVRV4pRPWER4p\VP W#44\ 8:gKO\VP W#44\ 8:gKtWa3# \R4h)zBSplit a name longer than 100 chars into a prefix and a name part. rNzname is too long)splitrCr,r r+ LENGTH_PREFIXrr*)rrr0r1 componentsrHrs&&&& r2rTarInfo._posix_split_namevsZZ_ q#j/*AXXj!n-F88JrN+D6==23}D H56+E|+/0 0r4c VPR4\\39pV'd<\VPR^4^V4p\VPR^4^V4pM\ R^W#4p\ R^W#4pVPR\ 4pVf \ R4h\ VPRR4^dW#4\VPR^4R ,^V4\VPR ^4^V4\VPR ^4^V4\VPR ^4^ V4\VPR ^4^ V4RV\ VPRR4^dW#4VPR\4\ VPRR4^ W#4\ VPRR4^ W#4VV\ VPRR4^W#4.p\P!R\,RPV44p \V \)R4^,p V RR\RV ,R4,V RR,p V #)zqReturn a header block. info is a dictionary with file information, format must be one of the *_FORMAT constants. rrrrNzTarInfo.type must not be Nonerrrr#r$r!r"s rrrrrz%dsr4z%06or=ii)getCHRTYPEBLKTYPErRr3rr*rrWrrr r\rK) rrPr0r1has_device_fieldsrrfiletypepartsrYrs &&&& r2rTarInfo._create_headers !HHV,'0BB 488J2Av>H488J2Av>H2q(3H2q(3H88FG,  <= = $c8 < #f,a 8 "Av . "Av . #R 0 !$b& 1   R(#x @ HHWk * "%r8 < "%r8 <   2&X > $kk%)+SXXe_=c9*+./2%4j5F!2G<Tr4s21 hdrcharset=BINARY rr= = z././@PaxHeaderrrr!rr) rr+rr,rrKrrrr) rrrr0binarykeywordrrecordslrGr9rs &&&& r2r"TarInfo._create_pax_generic_headersp)//1NG  Wh/2  0 0G)//1NGnnW-G X/@A W-G s5z)A-AIACF O6 uSVW-4w>EMPUU UG!2('V V 7|V #W !!$ gyI##G,- -I&  sE33 FFc V\V4^8Xd \R4h\V4\8wd \R4hVP \ 4\8Xd \ R4h\VR,4pV\V49d \R4hV!4p\VR,W#4Vn \VR,4Vn \VR,4Vn \VR ,4Vn\VR ,4Vn\VR ,4VnWEnVR ,Vn\VR ,W#4Vn\VR,W#4Vn\VR,W#4Vn\VR,4Vn\VR,4Vn\VR,W#4pVP$\08Xd-VPP3R4'd \4VnVP$\68XdRp.p\9^4FNp \WV^ ,4p \W^ ,V^,4p TP=Y34T^, pKP \?VR,4p \VR,4p WV 3Vn VPC4'd!VPPER4Vn V'd5VP$\F9d VR,VP,Vn V# \:dKi;i)zAConstruct a TarInfo object from a 512 byte bytes object. z empty headerztruncated headerzend of file header:Nz bad checksum:rdN:rlN:r tN:r!|N:r"N:r#rN:rN:r$iN:i i)N:i)iIN:iIiQN:iQiYN:iYiNrii:iiN)$r,rrrcountr-rrIr\rFr:rrr#r$r!r"rrrrrrrAREGTYPErrGNUTYPE_SPARSErCr*r boolrrrstrip GNU_TYPES)rrYr0r1robjrrstructsrHr&numbytes isextendedorigsizes&&&& r2frombufTarInfo.frombufss s8q=">2 2 s8y &'9: : 99S>Y & !56 6S\" c* *$^4 4es5z84s7|$c'l#c'l#s7|$G %  w<3w<: G h7 G h7 3w<( 3w<( S\84 88x CHH$5$5c$:$:CH 88~ %CG1X r!23F"3Rxb#9:H12r c#hJ3w<(H#*"AC  99;;xxs+CH chhi/|chh.CH "s)/L L('L(c VPP\4pVPW!PVP 4pVPP 4\, VnVPV4#)z>'* *%%g. .r4c VPP4VnVPpVP4'gVP\ 9d"W P VP4, pW!nVPVPVPVP4VP4'd!VPPR4VnV#)zSProcess a builtin type or an unknown type which will be treated as a regular file. r)rrrWrrSUPPORTED_TYPES_blockr!r&_apply_pax_inforr0r1rrr))rrZr&s&& r2r;TarInfo._proc_builtin_s#??//1!! ::<<499O; kk$)), ,F W00'2B2BGNNS ::<< ((-DI r4c ZVPPVPVP44pVP V4pTPTnTP\8Xd'\Y!PTP4TnM:TP\8Xd&\Y!PTP4TnTP#4'd!TPP%R4TnT# \ dp\ \T44RhRp?ii;i)z@Process the blocks that hold a GNU longname or longlink member. Nr)rrbr?r!r4r rrr&rrr:r0r1rrrr removesuffix)rrZrYnextrs&& r2r7TarInfo._proc_gnulongusoo""4;;tyy#9: :##G,D kk 99( (C!1!17>>BDI YY* *%5%5w~~FDM ::<< ..s3DI ! :'A/T 9 :sD D*D%%D*c ZVPwr#pV=V'dVPP\4p^p\ ^4F^p\ WVV^ ,4p\ WV^ ,V^,4p T'dT 'dTPY34T^, pK` \VR,4pKW n VPP4Vn VPVPVP4,VnW@n V# \ dKi;i)z8Process a GNU sparse header plus extra headers. i)rrrbrrCrIr*r r(rXrrWr?r!r&) rrZr,r.r/rYrrHr&r-s && r2r8TarInfo._proc_sparses)-(<(<%X  //&&y1CC2Y r!23F"3Rxb#9:HhNNF#56r c#hJ "??//1))DKK ,BB  "s /D D*)D*c VPPVPVP44pVP\ 8XdVP pMVP P4p^pRp.p\V4V8Ed8W$,^8wEd*\PW$4;p'g \R4h\VP^44pT^8d \R4hYH,\T48d \R4hTP^4T,^, p Y'P!^4^,T p T P#R4wrp T 'dT R8wgY),^ 8wd \R4hTP%YT 34T R8XdTfT R8XdTP&pMRpYH, pEKHVfRpVFywrp VP)V RRVP*4pV\,9d)VP)WVP&VP*4pMVP)V RRVP*4pWV&K{ VP/V4pRT9dTP7TT4MXRT9dTP9TT4M>TP;R 4R 8Xd)TP;R 4R 8XdTP=TY14TP\>\@39dTPCY1P&TP*4TPDTn"R T9daTPFpTPI4'gTP\J9d#TTPTP4, pTTn"T# \d \R4hi;i \0dp\3\5T44RhRp?ii;i)zCProcess an extended or global header as described in POSIX.1-2008. Nr@rs hdrcharsetsBINARYr(GNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorr?r!)&rrbr?r!rrrrr,_header_length_prefix_rematchrFrDgroupr*rKrn partitionr r0_decode_pax_fieldr1PAX_NAME_FIELDSr4r rr_proc_gnusparse_01_proc_gnusparse_00r_proc_gnusparse_10rr9r@r&rWrr>)rrZrYrrr0 raw_headersrMr/header_value_end_offsetkeyword_and_value raw_keywordequals raw_valuerrrDrr&s&& r2r:TarInfo._proc_paxsW oo""4;;tyy#9: 99 !--K!--224K  #hnT!15;;CEEEE()9:: ;U[[^, z()9::|c#h&()9::&+kk!nv&=&A # #IIaL1$45L M ->-H-H-N *K&D.C4PTX4X()9::   Y? @m+0@ )&//H&H MC  H/: *F,,['7NN$G/)..yGDTDT(..y'7($) #/:( :##G,D { *  # #D+ 6 + -  # #D+ 6 __/ 0C 7KOOL^<_cf.> O++DK$))::<<499O#Cdkk$))44F!' y ;()9:: ;| :'A/T 9 :s$?NNN O(N==Oc .p.pVFjwrVpVR8Xd,VP\VP444K8VR8XgKAVP\VP444Kl \ \ W444VnR# \d \ R4hi;i \d \ R4hi;i)z?Process a GNU tar extended sparse header, version 0.0. sGNU.sparse.offsetr@sGNU.sparse.numbytesN)r rDr8r*rFlistziprX)rrDrUoffsetsr-_rrs&&& r2rSTarInfo._proc_gnusparse_00%s!, A..?NN3u||~#6722?OOC $78"-3w12 "?,-=>>? "?,-=>>?s(B (B*B'*Cc VR,PR4Uu.uFp\V4NK pp\\VR,VR,44VnR#uupi)z?Process a GNU tar extended sparse header, version 0.1. rI,NNNreN)rrDr]r^rX)rrDrxrXs&&& r2rRTarInfo._proc_gnusparse_019sP#..>"?"E"Ec"JK"JQ#a&"JK3vc{F4L9: LsAc Rp.pVPP\4pVPR^4wrF\ V4p\ V4V^,8d]RV9d&WcPP\4, pVPR^4wrvVP \ V44KsVPP4Vn\\VR,VR,44Vn R#)z?Process a GNU tar extended sparse header, version 1.0. Nrrdrf) rrbrrrDr,r rrWr]r^rX)rrDrrZfieldsrXrYnumbers&&&& r2rTTarInfo._proc_gnusparse_10?soo""9-iiq) V&kFQJ&C++I66))E1-KF MM#f+ &"??//13vc{F4L9: r4c VP4FwrEVR8Xd\VRV4KVR8Xd\VR\V44K:VR8Xd\VR\V44KYV\9gKfV\9d\V,!V4pVR8XdVP R4p\WV4K VP4VnR# \ d^pLNi;i)z\Replace fields with supplemental information from a previous pax extended or global header. zGNU.sparse.namerrJr!zGNU.sparse.realsizerN) rsetattrrD PAX_FIELDSPAX_NUMBER_FIELDSr*r)rr)rrr0r1rrs&&&& r2r@TarInfo._apply_pax_infoOs*//1NG++fe,--fc%j111fc%j1J&//" 1' :5 Af$!LL-Eu-2"'++- &" !"sC C%$C%c lVPVR4# \dTPY44u#i;i)z1Decode a single field from a pax record. r>)r8UnicodeDecodeError)rrr0fallback_encodingfallback_errorss&&&&&r2rPTarInfo._decode_pax_fieldfs: D<<(3 3! D<< 1C C Ds 33c V^8d \R4h\V\4wr#V'd V^, pV\,#)zLRound up a byte count by BLOCKSIZE and return it, e.g. _block(834) => 1024. zinvalid offset)rFrar)rr%rhris&& r2r?TarInfo._blockns= 19$%56 6"5)4  aKF !!r4c (VP\9#z4Return True if the Tarinfo object is a regular file.)r REGULAR_TYPESrs&r2r TarInfo.isregzsyyM))r4c "VP4#r{)rrs&r2isfileTarInfo.isfile~szz|r4c (VP\8H#)z!Return True if it is a directory.)rrrs&r2r TarInfo.isdiryyG##r4c (VP\8H#)z%Return True if it is a symbolic link.)rSYMTYPErs&r2r TarInfo.issymrr4c (VP\8H#)z!Return True if it is a hard link.)rLNKTYPErs&r2r TarInfo.islnkrr4c (VP\8H#)z(Return True if it is a character device.)rrrs&r2ischr TarInfo.ischrrr4c (VP\8H#)z$Return True if it is a block device.)rrrs&r2isblk TarInfo.isblkrr4c (VP\8H#)zReturn True if it is a FIFO.)rFIFOTYPErs&r2isfifoTarInfo.isfifosyyH$$r4cVPRJ#r)rXrs&r2issparseTarInfo.issparses{{$&&r4c >VP\\\39#)zCReturn True if it is one of character device, block device or FIFO.)rrrrrs&r2isdev TarInfo.isdevsyyWgx888r4)rrrrr$rrrr"rr&rWrr!rXrr#rru)r)8rwrxryrzr{dict __slots__rrSrZsetterrrrrrrDEFAULT_FORMATENCODINGrrrr classmethodrr staticmethodrrrrr0r4r3r;r7r8r:rSrRrTr@rPr?rrrrrrrrrrr|rrs@r2rrps , ! G H    -  $ > F   * *! "/# $5% &9' *.+ ,- ./ 01 I60 ^^   [[__!!O"'.3>C$,19>"'88*HEV/" I M8QtMM  ''R** 0-0-d<<|))( /,68wr3(; ; ..D "*$$$$$%'99r4c (a]tRtRtoRt^tRtRt^t] t ] t Rt ]t]tRtRBRlt]RRR]3Rl4t]RCRl4t]RDR l4t]RDR l4t]RER l4t]RFR l4tR RRRRRRRRR/tRtRtRtRt RGRlt!RHRR/Rllt"RIRR/Rllt#RJR lt$R!t%RKR"RRR/R#llt&R$t'RLR"RRR/R%llt(R&t)RJR'lt*R(t+R)t,R*t-RMR+RR,R/R-llt.R.t/R/t0R0t1R1t2R2t3R3t4R4t5R5t6R6t7R7t8R8t9RNR9lt:R:t;RJR;ltR>t?R?t@R@tARAtBVtCR#)Oriz=The TarFile Class provides an interface to tar archives. FNrc RRRRRRRR/pW/9d \R 4hW nW,VnV'gbVPR8Xd4\PP V4'gRVnRVn\ WP4pR VnMrVfE\VR 4'd3\VP\\34'd VPp\VR 4'dVPVnRVnV'd \PPV4MR Vn W0nWnVeW@nVeWPnVeW`nVeWpnVeWnWnV eVP \,8XdWnM/VnV eWnV eWnWnR Vn.VnR VnVPP=4Vn/Vn /Vn!/Vn"VPR8XdR Vn#VPI4Vn#VPR8Xd`VPPKVP>4VP"PMV4pVP8POV4K_VPR9dRVnVP.'dsVP"PWVP.PY44pVPP[V4V;P>\]V4, unR #R #R # \Pd*TPPKTP>4K\Rdp\U\T44R hR p?ii;i TP'gTPP_4RTnh;i)aOpen an (uncompressed) tar archive 'name'. 'mode' is either 'r' to read from an existing archive, 'a' to append data to an existing file or 'w' to create a new file overwriting an existing one. 'mode' defaults to 'r'. If 'fileobj' is given, it is used for reading or writing data. If it can be determined, 'mode' is overridden by 'fileobj's mode. 'fileobj' is not closed, when TarFile is closed. rr1azr+brwbrhxb!mode must be 'r', 'a', 'w' or 'x'FNrrTrrrh)0r*r_moderrexists bltn_openrrrrrrKabspathrstreamrPr[ dereference ignore_zerosr0r1rrdebug errorlevel copybufsizermembers_loadedrr&inodes_unames_gnames firstmemberrDrr4r rr rrrrcr,r)rrrrrPr[rrr0r1rrrrrmodesrrYs&&&&&&&&&&&&&&& r2rTarFile.__init__sdCT3=  @A A [ yyCt(<(< ! jj1G$D  &!9!97<<#u66||w''$\\ #D -1BGGOOD)t      K  "L  "*   # ,   $M  "t{{j'@* !D   J  !(O'   ll'')     yyC#' #'99; yyCLL%%dkk2:"&,,":":4"@ ++G4yyO+# ###,,??@P@P@U@U@WXCLL&&s+KK3s8+K$, * ))$++6&:'A/T9: ### ""$DK sJA$N,6M"+NA0N0N4N7NNNNN6Oc aV'gV'g \R4hVR9dV3Rlp.p\SPVR7F@p\SSPV,4p VeVP 4p V !VRV3/VBu# RPV4p \ R V 24hR V9dxVPR ^4wrT ;'gRp T;'gR pVSP9d\SSPV,4p M\ R V,4hV !WV3/VB#R V9dVPR ^4wrT ;'gRp T;'gR pV R9d \R4hRV9dVR9d \R4hRV9dVR9d \R4hVPR^ 4pVPRR4p\WWVW4pS!WV3/VBpRTnT#VR9dSP!WV3/VB#\R4h \ \ 3d:p TPRT RT : 24TeTPX 4Rp ? EK Rp ? ii;i TP4h;i)aOpen a tar archive for reading, writing or appending. Return an appropriate TarFile class. mode: 'r' or 'r:*' open for reading with transparent compression 'r:' open for reading exclusively uncompressed 'r:gz' open for reading with gzip compression 'r:bz2' open for reading with bzip2 compression 'r:xz' open for reading with lzma compression 'r:zst' open for reading with zstd compression 'a' or 'a:' open for appending, creating the file if necessary 'w' or 'w:' open for writing without compression 'w:gz' open for writing with gzip compression 'w:bz2' open for writing with bzip2 compression 'w:xz' open for writing with lzma compression 'w:zst' open for writing with zstd compression 'x' or 'x:' create a tarfile exclusively without compression, raise an exception if the file is already created 'x:gz' create a gzip compressed tarfile, raise an exception if the file is already created 'x:bz2' create a bzip2 compressed tarfile, raise an exception if the file is already created 'x:xz' create an lzma compressed tarfile, raise an exception if the file is already created 'x:zst' create a zstd compressed tarfile, raise an exception if the file is already created 'r|*' open a stream of tar blocks with transparent compression 'r|' open an uncompressed stream of tar blocks for reading 'r|gz' open a gzip compressed stream of tar blocks 'r|bz2' open a bzip2 compressed stream of tar blocks 'r|xz' open an lzma compressed stream of tar blocks 'r|zst' open a zstd compressed stream of tar blocks 'w|' open an uncompressed stream for writing 'w|gz' open a gzip compressed stream for writing 'w|bz2' open a bzip2 compressed stream for writing 'w|xz' open an lzma compressed stream for writing 'w|zst' open a zstd compressed stream for writing znothing to openrc0<SPV,R8H#)taropen) OPEN_METH)rrs&r2not_compressed$TarFile.open..not_compressedas}}X.);;r4)keyNz - method z:  z'file could not be opened successfully: :rr|zmode must be 'r' or 'w'rz4compresslevel is only valid for w|gz and w|bz2 modesrz"preset is only valid for w|xz modeFzundiscernible mode)rr:*)rr)rr)rr)r*sortedrrorrrr rr rpoprrrr)rrrrrgkwargsr error_msgsrfunc saved_posrerror_msgs_summaryfilemoderrrrsf&&&&, r2r TarFile.open1s{VG./ / <  <J"3==nEsCMM($;<& ' Ic7=f== F"&:!6 FGYFZ[\ \ D[!%C!3 H3H((5H3==(sCMM($;<&'Dx'OPP:6: : D[!%C!3 H3H((5Hz) !:;;&(X]-J J6!hg&= !EFF"JJ:MZZ$/FTX*4F 9&9"AMH _ $;;t7=f= =-..e"#34%% (2aU&CD* Y/ R  s$8 H II-I  II'c :VR9d \R4hV!WV3/VB#)zCOpen uncompressed tar archive name for reading or writing. r)rrrrh)r*)rrrrrs&&&&,r2rTarFile.taropens+ + +@A A4w1&11r4c VR 9d \R4h^RIHpT!YR,YC4pTP!YT3/TBpRTn T# \d\ R4Rhi;i \ dpTeTR8Xd \ R4ThhRp?ii;i \ d*pTP4TR8Xd \ R4ThhRp?iTP4h;i) zXOpen gzip compressed tar archive name for reading or writing. Appending is not allowed. rmode must be 'r', 'w' or 'x')GzipFilezgzip module is not availableNrjrFrrrh) r*gziprrrrrrrr) rrrrrrrrrs &&&&&, r2gzopenTarFile.gzopens  &;< < M % tCZHG  D:6:A + M"#AB L M  "ts{ 129    MMOs{ 129   MMO s9A A$B A!$ B /BB  C$B>>Cc jVR 9d \R4h^RIHpT!T;'gTY$R7pTP !YT3/TBpRTn T# \d\ R4Rhi;i \ \3d*pTP4TR8Xd \R4ThhRp?iTP4h;i) zYOpen bzip2 compressed tar archive name for reading or writing. Appending is not allowed. rr)BZ2FilerN)rznot a bzip2 fileFr) r*rrrrrrEOFErrorrrr) rrrrrrrrrs &&&&&, r2bz2openTarFile.bz2opens  &;< < L #'//T4M  D:6:A ! L"#@At K L"  MMOs{ 23:   MMO s"A A' A$'B28$BB2c fVR 9d \R4h^RIHpHpT!T;'gTY$R7pTP !YT3/TBpRTn T# \d\ R4Rhi;i T\3d*p TP4TR8Xd \R4T hhRp ? iTP4h;i) zXOpen lzma compressed tar archive name for reading or writing. Appending is not allowed. rr)LZMAFilerrNrznot an lzma fileFr) r*rrrrrrrrrr) rrrrrrrrrrs &&&&&, r2xzopenTarFile.xzopens  &;< < M 07??dD@  D:6:A ! M"#AB L M8$  MMOs{ 23:   MMO s"AA)A&) B06$BB0c VR 9d \R4h^RIHpHp T!T;'gTTTTTR7pTP !YT3/TBp RT n T # \d\ R4Rhi;i T \3d*p TP4TR8Xd \R4T hhRp ? i\dTP4hi;i) zXOpen zstd compressed tar archive name for reading or writing. Appending is not allowed. rr)ZstdFilerrN)leveloptions zstd_dictznot a zstd fileFr) r*compression.zstdrrrrrrrr Exceptionr) rrrrrrrrrrrrs &&&&&&&, r2zstopenTarFile.zstopens  &;< < Y < OOt     D:6:A - Y"#MNTX X Y8$  MMOs{ 129   MMO  s(AA,A), B=9$B B=*B=rrrrrrrrrrc rVP'dR#RVnVPR9dVPP\\ ^,,4V;P \ ^,, un\VP \4wrV^8d2VPP\\V, ,4VP'gVPP4R#R# TP'gTPP4ii;i)zYClose the TarFile. In write-mode, two finishing zero blocks are appended to the archive. NTr) rrrrcr-rr&ra RECORDSIZErr)rrhris& r2r TarFile.close.s ;;;   %yyO+ ""3)a-#89 A . %+4;; $C!q=LL&&sj9.D'EF### ""$$4### ""$$s B:D/D6c rVPVPR44pVf\RV,4hV#)zReturn a TarInfo object for member 'name'. If 'name' can not be found in the archive, KeyError is raised. If a member occurs more than once in the archive, its last occurrence is assumed to be the most up-to-date version. rzfilename %r not found) _getmemberr)KeyError)rrr[s&& r2 getmemberTarFile.getmemberCs6 //$++c"23 ?2T9: :r4c ~VP4VP'gVP4VP#)z{Return the members of the archive as a list of TarInfo objects. The list has the same order as the members in the archive. )_checkr_loadrrs&r2 getmembersTarFile.getmembersNs) ||| JJL||r4c ^VP4Uu.uFqPNK up#uupi)zxReturn the members of the archive as a list of their names. It has the same order as the list returned by getmembers(). )rr)rr[s& r2getnamesTarFile.getnamesXs'-1OO,=>,= ,=>>>s*c VPR4Ve VPpVfTp\PP V4wrBVP \P R4pVPR4pVP4pWn VfAVP'g\P!V4pM;\P!V4pM$\P!VP44pRpVPp\P !V4'dVP"VP$3p VP'gSVP&^8dBWP(9d2W P(V ,8wd\*p VP(V ,pM\,p V ^,'dW P(V &M\P.!V4'd\0p M\P2!V4'd\4p M\P6!V4'd\8p \P:!V4pMH\P<!V4'd\>p M%\P@!V4'd\Bp MR#W%nWn"VPFVn$VPJVn&V \,8XdVPNVn(M^Vn(VPRVn*Wn+Wun,\Z'd}VPHVP\9d@\ZP^!VPH4^,VP\VPH&VP\VPH,Vn1\d'd}VPLVPf9d@\dPh!VPL4^,VPfVPL&VPfVPL,Vn5V \>\B39dw\m\R4'da\m\R4'dK\Pn!VPp4Vn9\Pt!VPp4Vn;V# \`dRTP\TPH&ELZi;i \`dRTPfTPL&Li;i)aCreate a TarInfo object from the result of os.stat or equivalent on an existing file. The file is either named by 'name', or specified as a file object 'fileobj' with a file descriptor. If given, 'arcname' specifies an alternative name for the file in the archive, otherwise, the name is taken from the 'name' attribute of 'fileobj', or the 'name' argument. The name should be a text string. awxNrrmajorminor)R(>R<$R98R9<$S#"S#rc  \\P\\P\ \P \\P\\P\\P/pVP4VfTpVEF3pV'Ed}VPf \R4MKVP!VP"^4p\\P$!WTP,44\VP&;'g VP(: RVP*;'g VP,: 24VP/4'gVP14'd1\RRVP2VP43,,4M\RVP6,4VP8f \R4M7\R\:P<!VP84R ,,4\VP>VPA4'dRMR ,4V'deVPC4'd\R VPD,4VPG4'd\R VPD,4\I4EK6 R#) zPrint a table of contents to sys.stdout. If 'verbose' is False, only the names of the members are printed. If it is True, an 'ls -l'-like output is produced. 'members' is optional and must be a subset of the list returned by getmembers(). Nz ??????????rz%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02d:NNrz-> zlink to )%rrS_IFREGrS_IFLNKrS_IFIFOrS_IFCHRrS_IFDIRrS_IFBLKrrrsrrrrr#rr$rrrrr!r"r localtimerrrrrrr)rverboser type2moder[modetypes&&$ r2r] TarFile.listsdllGT\\t||WdlldllGT\\C  ?GGw<<' -(}}W\\1=H h.E FGw}}'C'C 'C'.}}'C'C 'CEF==??gmmoo$(8(8':J:J'KK!MN  56==( 56 ="&.."?"C!DE  w}}BG H==??(8(8 89==?? W-=-= => G7r4filterc VPR4VfTpVPeJ\PP V4VP8XdVP ^RV,4R#VP ^V4VP W4pVfVP ^RV,4R#Ve(V!V4pVfVP ^RV,4R#VP4'd1\VR4;_uu_4pVPWV4RRR4R#VP4'dVPV4V'dw\\P!V44FQpVP\PPW4\PPW&4W4R7KS R#R#VPV4R# +'giR#;i)aAdd the file 'name' to the archive. 'name' may be any type of file (directory, fifo, symbolic link, etc.). If given, 'arcname' specifies an alternative name for the file in the archive. Directories are added recursively by default. This can be avoided by setting 'recursive' to False. 'filter' is a function that expects a TarInfo object argument and returns the changed TarInfo object, if it returns None the TarInfo object will be excluded from the archive. rNztarfile: Skipped %rztarfile: Unsupported type %rtarfile: Excluded %rr1)r*)rrrrr_dbgrrraddfilerrlistdiraddr )rrr recursiver*r[fs&&&&$ r2r0 TarFile.addsq E ?G 99 RWW__T%:dii%G IIa.5 6  !T//$0 ? IIa7$> ?   WoG !3d:; ==??4&&! W('&]]__ LL ! 4 01AHHRWW\\$2BGGLL4L%62 LL !'&&s G G- c 8VPR4Vf3VP4'dVP^8wd \R4h\P!V4pVP VP VPVP4pVPPV4V;P\V4, un VPpVe\W PVPVR7\VP\ 4wrVV^8d;VPP\"\ V, ,4V^, pV;PV\ ,, un VP$P'V4R#)aAdd the TarInfo object 'tarinfo' to the archive. If 'tarinfo' represents a non zero-size regular file, the 'fileobj' argument should be a binary file, and tarinfo.size bytes are read from it and added to the archive. You can create TarInfo objects directly, or by using gettarinfo(). rNz3fileobj not provided for non zero-size regular file)rg)rrr!r*rrrPr0r1rrcr&r,rr`rarr-rr )rr[rrYrgrhris&&& r2r.TarFile.addfile& s E ?w}}7<<13DRS S))G$mmDKK D 3 s3x      w||W M &w||Y ? F1} ""3)i*?#@A!  KK6I- -K G$r4cVf:VPpVf\#\V\4'd \ R4hV#\ V4'dV#\ V,# \d\RT: R24Rhi;i)Nzfilter z not foundzrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.) extraction_filterrrr TypeErrorcallable_NAMED_FILTERSrr*)rr*s&&r2_get_filter_functionTarFile._get_filter_functionB s >++F~""&#&&677M F  M G!&) ) Gwvj ;<$ F Gs  AA< numeric_ownerc  .pVPV4pVfTpVFlpVPWvV4wrVfKVP4'dVPV 4VP WVP4'*VVR7Kn VP RRR7VFp V!W4pTfTPT R4K%\PPYP4p \P!T 4p \P !T P"4'gTPTR4KTP%YTR 7TP'Y4TP)Y4K R# \ d(p TPT \T 44Rp ? EKRp ? ii;i \dTPTR4EK0i;i \*dp TP-T 4Rp ? EKWRp ? ii;i) a-Extract all members from the archive to the current working directory and set owner, modification time and permissions on directories afterwards. 'path' specifies a different directory to extract to. 'members' is optional and must be a subset of the list returned by getmembers(). If 'numeric_owner' is True, only the numbers for user/group names are used and not the names. The 'filter' function will be called on each member just before extraction. It can return a changed TarInfo or None to skip the member. String names of common filters are accepted. N) set_attrsr=filter_functioncVP#rr)rs&r2$TarFile.extractall..w sqvvr4T)rreversezexcluded by filtermissingznot a directory)r=)r;_get_extract_tarinforr  _extract_onesort_FILTER_ERRORS_log_no_directory_fixupreprrrr rrFileNotFoundErrorrrrchownutimechmodr _handle_nonfatal_error)rrrr=r* directoriesr@rr[ unfilteredexcdirpathrrs&&&$$ r2 extractallTarFile.extractallT s 33F; ?GF"&";";#/ G}}"":.   g7==?7J,9.=  ? -t<&J /-j?G?001EG'',,t\\:HHW-E||EMM2200:KL 7= I 7, 7,5& &00T#YG)00)D  /++A.. /sr'E</G)G1F1%G-G5G< F.F)"G)F..G1GGGG G>!G99G>cPVP^RVP: RV: R24R#)rez!tarfile: Not fixing up directory z ()N)r-r)rrreasons&&&r2rJTarFile._log_no_directory_fixup s !;;( )r4c VPV4pVPWV4wrxVeVPWrW44R#R#)aDExtract 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 TarInfo object. You can specify a different directory using 'path'. File attributes (owner, mtime, mode) are set unless 'set_attrs' is False. If 'numeric_owner' is True, only the numbers for user/group names are used and not the names. The 'filter' function will be called before extraction. It can return a changed TarInfo or None to skip the member. String names of common filters are accepted. N)r;rFrG) rrrr?r=r*r@r[rRs &&&&$$ r2extractTarFile.extract sG33F;"77 T+     gY F r4c (\V\4'dVPV4pMTpRpV!WC4pVf&VP^RVP,4R#VP4'dE\P!V4p\PPW5P 4VnWT3# \\\ 3dpTP T4Rp?LRp?i\dpTPT4Rp?LRp?ii;i)zrGet (filtered, unfiltered) TarInfos from *member* *member* might be a string. Return (None, None) if not found. Nr,)NN)rrrrrr _handle_fatal_errorr rPr-rrrrrr rr)rrr@rrRfilteredrs&&&& r2rFTarFile._get_extract_tarinfo s fc " "/JJ +&z8H   IIa/*//A B  >>  yy*H$&GGLL7H7H$IH !##+[9 (  $ $Q ' ' +  ' ' * * +s)B<<DC(( D5D6D  Dc  PVPR4VPV\PP W!P 4VVVVR7R# \ \3dpTPT4Rp?R#Rp?i\dpTPT4Rp?R#Rp?ii;i)zExtract from filtered tarinfo to disk. filter_function is only used when extracting a *different* member (e.g. as fallback to creating a symlink) r)r?r=r@extraction_rootN) r_extract_memberrrr rrrr_r rP)rr[rr?r=r@rs&&&&&& r2rGTarFile._extract_one s C +  "'',,t\\*J+4/<1@15 ! 7 +, (  $ $Q ' ' +  ' ' * * +s)>AB%$A;; B%B% B  B%c \VP^8dhVP^RV,4R#)z=Handle non-fatal error (ExtractError) according to errorlevel tarfile: %sN)rr-rrs&&r2rPTarFile._handle_nonfatal_error s$ ??Q   IIa* +r4c vVP^8dh\V\4'ddVPf&VP ^RVP ,4R#VP ^RVP : RVP: 24R#VP ^R\ V4P: RV: 24R#)z1Handle "fatal" error according to self.errorlevelNrgz tarfile: rm)rrrfilenamer-strerrorrrwrhs&&r2r_TarFile._handle_fatal_error sw ??Q   7 # #zz! !]QZZ78 !QZZHI IIaT!W-=-=qA Br4c VPR4\V\4'dVPV4pMTpVP 4'gVP \ 9dVPW4#VP4'gVP4'dL\VP\4'd \R4hVPVPV44#R#)a(Extract a member from the archive as a file object. 'member' may be a filename or a TarInfo object. If 'member' is a regular file or a link, an io.BufferedReader object is returned. For all other existing members, None is returned. If 'member' does not appear in the archive, KeyError is raised. rz'cannot extract (sym)link as file objectN)rrrrrrr> fileobjectrrrrr extractfile_find_link_target)rrr[s&& r2rpTarFile.extractfile s C fc " "nnV,GG ==??gll/A??41 1 ]]__ $,,00""KLL''(>(>w(GHHr4r@rcc (VPR4pVPR\P4p\PP V4pV'd>\PP V4'g\P!VRR7VP4'gVP4'd/VP^VP: RVP: 24MVP^VP4VP4'dVPW4EMVP4'dVP!W4MVP#4'dVP%W4MVP'4'gVP)4'dVP+W4MyVP4'gVP4'dVP-WVVR7M8VP.\09dVP3W4MVPW4V'dOVP5WV4VP4'g%VP7W4VP9W4R#R#R#)zExtract the filtered TarInfo object tarinfo to a physical file called targetpath. filter_function is only used when extracting a *different* member (e.g. as fallback to creating a symlink) rT)exist_okz -> r@rcN)r)rrrrrrmakedirsrrr-rrrmakefilermakedirrmakefiforrmakedevmakelink_with_filterrr> makeunknownrMrOrN)rr[ targetpathr?r=r@rc upperdirss&&&&&$$ r2rdTarFile._extract_member s &&s+ ''RVV4 GGOOJ/ RWW^^I66 KK D 1 ==??gmmoo IIaw||W5E5EF G IIa & ==?? MM' . ]]__ LL - ^^   MM' . ]]__  LL - ]]__   % % / / & 1\\ 0   W 1 MM' .  JJwM :==?? 7/ 7/# r4c VPf\P!V4R#\P!VR4R# \d+\PP T4'ghR#i;i)z,Make a directory called targetpath. Ni)rrmkdirFileExistsErrorrrrr[r}s&&&r2rxTarFile.makedirN sW ||#$U+ 77==,,- s$AA/A61A65A6c  VPpVPVP4VPp\ VR4;_uu_4pVP eeVP F(wrgVPV4\ W5V\V4K* VPVP4VP4M\ W5VP\V4RRR4R# +'giR#;i)z'Make a file called targetpath. rN) rrrWrrrXr`rr!truncate)rr[r}sourcergtargetr&r!s&&& r2rwTarFile.makefile] s G''("" z4 ( (F~~)$+NNLFKK'iI%3 GLL)!FGLL)WM) ( ( (s BC!! C2 c nVPW4VP^RVP,4R#)zFMake a file from a TarInfo object with an unknown type at targetpath. z9tarfile: Unknown file type %r, extracted as regular file.N)rwr-rrs&&&r2r|TarFile.makeunknownm s1 g* !24;LLA Br4c t\\R4'd\P!V4R#\R4h)z'Make a fifo called targetpath. mkfifozfifo not supported by systemN)rrrr rs&&&r2ryTarFile.makefifou s) 2x IIj !=> >r4c \\R4'd\\R4'g \R4hVPpVfRpVP 4'dV\ P ,pMV\ P,p\P!W#\P!VPVP44R#)z.>? Ar4c(VPWRR4#r)r{rs&&&r2makelinkTarFile.makelink s((dDIIr4c fRpVP4'd_\PPV4'd\P!V4\P !VP V4R#\PPVP4'd_\PPV4'd\P!V4\P!VPV4R#VPV4pTfTpMTf \R4hT!Yd4pTeTP#YrTTR7R#R# \dRpL\i;i \dT'd \R4Rhhi;i \dp\YP 4ThRp?ii;i)aMake a (symbolic) link called targetpath. If it cannot be created (platform limitation), we try to make a copy of the referenced file instead of a link. filter_function is only used when extracting a *different* member (e.g. as fallback to creating a link). FNTz%unable to resolve link inside archiveruz[makelink_with_filter: if filter_function is not None, extraction_root must also not be None)rrrlexistsunlinksymlinkrrrlinksymlink_exceptionrqrr rIrrrd) rr[r}r@rckeyerror_to_extracterrorrRr`causes &&&&& r2r{TarFile.makelink_with_filter s~$)  ,}}77??:..IIj) 7++Z877>>'"6"677wwz22 *-GGG00*= 8 //8J  "!H&">?? M*:G    1@1@ ! B /! ,'+ $ ,  '";=BFG   " M'AuL MsWE$E7E8.E'$E 7EE&/F  E#"E#&F9F F0F++F0c *\\R4'Ed5\P!4^8XEdVPpVPpV'g\ 'd:VP 'd(\ P!VP 4^,p\'d:TP'd(\P!TP4^,pVfRpVfRpVP4'd0\\R4'd\P!W%V4R#\P!W%V4R#R#R# \dLi;i \dLi;i \\ 3dp\#R4ThRp?ii;i)zSet owner of targetpath according to tarinfo. If numeric_owner is True, use .gid/.uid instead of .gname/.uname. If numeric_owner is False, fall back to .gid/.uid when the search based on name fails. geteuidNlchownzcould not change ownerr6)rrrr$r#rrgetgrnamrrrgetpwnamrrrMr OverflowErrorr )rr[r}r=gurs&&&& r2rM TarFile.chown s) 2y ! !bjjla&7 A A sw}}}LL7:sw}}}LL7:yy D==??wr8'<'<IIjQ/HHZA./'8 !   ]+ D"#; ?s 4 A A  Ac VPpVfR#\\R4'gR#\P!W#V34R# \dp\ R4ThRp?ii;i)zBSet modification time of targetpath according to tarinfo. NrNz"could not change modification time)r"rrrNrr )rr[r}r"rs&&& r2rN TarFile.utime s[  = r7##  L HHZ 0 LCD! K LsA A" AA"c VPR4VPeVPpRVnV#VPVPP 48wdlVP^8XdR#VPP VP^, 4VPP ^4'g \R4hRpVPPV4pTe0TP0'gTP2P5T4T#RTnT# \depTP'dITP^RTPT3,4T;P\, unRp?KRp?LRp?i\dpTP'dJTP^RTPT3,4T;P\, unRp?EK-TP^8Xd\\T44RhRp?EL!>?KK9,K%& 6$$$IIat{{A.>!>?KK9,K[[A%#CF+5&# <;;!##L1t;$' 6;;!##CF+5$( 2A'T1 !!ZZ00',qc(:;E"G s D%% L0AF LLAH$8&H$$ L1LLL&J LLJ++ L8L:0K**K88K;;Lc VP4pRpVeVPV4pVRVpV'd \PP V4p\ V4FrpV'd VPVP8XdRpK*V'd+\PP VP4pM VPpW8XgKpVu# V'd \V4hR# \dRpLi;i)zjFind an archive member by name from bottom to top. If tarinfo is given, it is used as the starting point. FNT) rindexr*rrrreversedr&r) rrr[ normalizerskippingrr member_names &&&& r2rTarFile._getmemberD s //#   * g."&5/ 77##D)Dw'F>>V]]2$H gg..v{{; $kk " ( W% % 1   sC++ C;:C;c dVP'gVP4eKRVnR#R#)zvRead through the entire archive file and look for readable members. This should not run if the file is set to stream. NT)rrDrrs&r2r TarFile._loadl s({{{))+)DLr4c VP'd'\RVPP,4hVe0VPV9d\RVP,4hR#R#)z[Check if TarFile is still open, and if the operation's mode corresponds to TarFile's mode. z %s is closedNzbad operation for mode %r)rrr\rwr)rrs&&r2rTarFile._checku sU ;;;.4>>+B+BBC C    55 AB B!6 r4c BVP4'dRRP\R\PP VP 4VP344pRpMVPpTpVPW#RR7pVf\RV,4hV#)zGFind the target member of a symlink or hardlink member in the archive. rNT)r[rzlinkname %r not found) rr r*rrrrrrr)rr[rlimitrs&& r2rqTarFile._find_link_target~ s ==??xxtbggoogll.KWM]M]-^ _`HE''HEDI >2X=> > r4c# "VP'dVPRjxL R#^pVPeVP4pV^, pVxV\ VP48dVPV,pM6VP'g#VP4pV'g RVnR#MR#V^, pVxKtL5i)z$Provide an iterator object. NT)rrrrDr,)rrr[s& r2__iter__TarFile.__iter__ s <<<|| # #     'iikG QJEMs4<<((,,u-\\\))+#'DL QJEM3 $s"CC A3CC1Cc `WP8:d\V\PR7R#R#)z.Write debugging output to sys.stderr. fileN)rrrrpstderr)rrmsgs&&&r2r- TarFile._dbg s! JJ  #CJJ ' r4c&VP4V#r)rrs&r2 __enter__TarFile.__enter__ s  r4cVfVP4R#VP'gVPP4RVnR#NT)rrrr)rrr tracebacks&&&&r2__exit__TarFile.__exit__ s5 < JJL### ""$DKr4)rrrrrrrrrr0rr1rrrPrrrrrr&rrr[)NrNNNNNNrNNNNF)rN)rN )rNN)rNNNN)NNNr4rr).N)rT)TF)NF)Drwrxryrzr{rrrrrrPrr0r1rr[rUror7rrrrrrrrrrrrrrrr]r0r.r;rUrJr\rFrGrPr_rprdrxrwr|ryrzrr{rMrOrNrDrrrrqrr-rrr|rrs@r2rrs  EKLJFH FGJff#tZj/j/X22@66  H y x y x y I%* ? hT)D)V1"1"f%8G$C/%C/C/J)GGG($<+(, C@10@D10(,10p N B?A$J3Bj DD? L>F&&P C&>( r4c\VR4'd/VP4p\VR7pVPV4M \V4pVP 4R# \ dR#i;i)zReturn True if name points to a tar archive that we are able to handle, else return False. 'name' should be a string, file, or file-like object. rb)rTF)rrrrrr)rrrs& r2 is_tarfiler s[  4 ))+CT"A IIcNT A   sAA A.-A.c ^RIpRpVPVRR7pVPRRRRR R 7VPR R \R R7VP RR7pVPRRRRR7VPRRRRrNz3A simple command-line interface for tarfile module.T) descriptioncolorz-vz --verbose store_trueFzVerbose output)actiondefaulthelpz--filterz zFilter for extraction)metavarchoicesr)requiredz-lz--list zShow listing of a tarfile)rrz-ez --extract+zExtract tarfile into target dir)nargsrrz-cz--createzCreate tarfile from sourcesz-tz--testzTest if a tarfile is validz&--filter is only valid for extraction rrz{!r} is a tar archive.z{!r} is not a tar archive. r)r&)rr*rz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.rrz.tgzz.xzrz.txzz.bz2rz.tbzz.tbz2z.tb2z.zstrz.tzstzw:rz{!r} file created.)rz )zz)argparseArgumentParser add_argumentr:add_mutually_exclusive_group parse_argsr*r\exittestrrrrrrprr&rPr]rr,rcurdir format_helprUcreaterrsplitextr0)rrparserrNargsrdrtfrrtar_namer`ext compressionstar_mode tar_files file_names r2mainr sGK  $ $D $ IF k,-/  N .46  / / / >E tX{79 t[<=? tZs39; tX{8:    D {{{t||+ A@A yyii c??c33 cnn&SZZ8 |||.55c:; KK9@@E F  ii c??c5))R -*) KK9@@E F  ! t||  !,,q/CYYF  ! #,,KC KK6--/ 0 c??c5))R 6$++ >*|||S=3::3?C2396#3Fc  KK9@@E F  ;;??1%!!(+ 4 D 4 D E E U E E U 03/B4,++KK \\( - -& y!'. <<< &--h7 8 5 !M *))*))D. -s02:R(R<SS$( R9 < S  S! $ S4 __main__)rrrrrrrr r rrrLrrrrrrr r r rrrr)rrr!r"r#r$rr>rrrrr4)mr{version __author__ __credits__builtinsrrrprrAr_rrrWrrerrrAttributeErrorNotImplementedErrorrr__all__r-rrrrrrrrr&rrrrrrCONTTYPErrr'rrr9rrLrrr>r|r*rprQrrDrqrrgetfilesystemencodingr3r:rIrRr\r`rsrrr rrrr rrrrFrrrobjectrr$BufferedReaderrUr rr rr rrrIrrrrr:rcompilerLrrrrrwrur4r2rs86 H ' $%8'B ?   ^                    HgGXWg#%5! #(>+ /   . 9  U U U 3 3 C 77d?H((*H 0& (N < *"&$ 2 y  8    x  (  (  {  ;  [    K 0||~6@i&iX"2$$" ( J J ?k?@{@ L L ?+?D Dw 5BH ) : K ::&89o 9fo 9d`f`L)$||`9D zFY` C Cs"I&I6& I32I36 JJ