
    =OgV                    d   	 d Z dZdZddlmZ ddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZ	 ddlZn# e$ r dZY nw xY w	 ddlZn# e$ r dZY nw xY weefZ	 eefz  Zn# e$ r Y nw xY wg dZdZdZed	z  Zd
ZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2e2Z3e!e"e#e$e'e(e)e%e&e*e+e,fZ4e!e"e)e,fZ5e*e+e,fZ6dZ7h dZ8e9e9e9e:e:e:d Z;ej<        d!k    rd"Z=n ej>                    Z=d# Z?d$ Z@d% ZAd&e3fd'ZBd( ZCdedfd)ZDd* ZE G d+ d,eF          ZG G d- d.eG          ZH G d/ d0eG          ZI G d1 d2eG          ZJ G d3 d4eG          ZK G d5 d6eG          ZL G d7 d8eL          ZM G d9 d:eL          ZN G d; d<eL          ZO G d= d>eL          ZP G d? d@eL          ZQ G dA dB          ZR G dC dD          ZS G dE dFeT          ZU G dG dHeT          ZV G dI dJejW                  ZX G dK dLeG          ZY G dM dNeY          ZZ G dO dPeY          Z[ G dQ dReY          Z\ G dS dTeY          Z] G dU dVeY          Z^dedXZ_dY Z`dZ Zad[ Zbe`eaebd\Zc eT            Zd eje        d]          Zf G d^ d_eT          Zg G d` daeT          Zhdb Ziehj        Zdc Zjekddk    r ej             dS dS )fz0.9.0u"   Lars Gustäbel (lars@gustaebel.de)u4   Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.    )openN)TarFileTarInfo
is_tarfileTarError	ReadErrorCompressionErrorStreamErrorExtractErrorHeaderErrorENCODINGUSTAR_FORMAT
GNU_FORMAT
PAX_FORMATDEFAULT_FORMATr       i      s   ustar   s   ustar 00d         0   1   2   3   4   5   6   7   L   K   S   x   g   X      )pathlinkpathsizemtimeuidgidunamegname>   r&   r-   r,   r'   )atimectimer)   r*   r+   r(   ntutf-8c                     	 | t          d          |                     ||          } | d |         |t          |           z
  t          z  z   S )Nzmetadata cannot contain None)
ValueErrorencodelenNUL)slengthencodingerrorss        /usr/lib64/python3.11/tarfile.pystnr<      sP    y7888	6""AWfW:#a&&C///    c                 z    	 |                      d          }|dk    r
| d |         } |                     ||          S )Nr   )finddecode)r7   r9   r:   ps       r;   ntsrC      s@    	uABwwbqbE88Hf%%%r=   c                 ~   	 | d         dv r]d}t          t          |           dz
            D ]}|dz  }|| |dz            z  }| d         dk    rdt          |           dz
  z  |z
   }nT	 t          | dd          } t          |                                 pd	d          }n# t
          $ r t          d
          w xY w|S )Nr   )      r$      rF      asciistrict0invalid header)ranger5   rC   intstripr3   InvalidHeaderError)r7   nis      r;   ntirS      s     	t~s1vvz"" 	 	A!GA1q5MAAQ45==#a&&1*%)*A	7Aw))AAGGII$a((AA 	7 	7 	7$%5666	7Hs   *5B   B:rG   c                    	 | }t          |           } d| cxk    rd|dz
  z  k     r$n n!t          d|dz
  | fz  d          t          z   }n|t          k    rd|dz
  z   | cxk    rd|dz
  z  k     rfn nc| dk    rt	          dg          }nt	          dg          }d|z  | z   } t          |dz
            D ] }|                    d| dz             | dz  } !nt          d	          |S )
Nr   rG   r$   z%0*orI   rH   rE   rF   zoverflow in number field)rN   bytesr6   r   	bytearrayrM   insertr3   )rQ   digitsformat
original_nr7   rR   s         r;   itnr[      s8    JAAA!!!!fqj!!!!!!&FQJ?*G44s:	:		36A:#6"6!"Q"Q"Q"Qcfqj>Q"Q"Q"Q"Q"Q665'""AA5'""Av!Avz"" 	 	AHHQE	"""!GAA	 3444Hr=   c                     	 dt          t          j        d|                     z   }dt          t          j        d|                     z   }||fS )NrH   
148B8x356B
148b8x356b)sumstructunpack_from)bufunsigned_chksumsigned_chksums      r;   calc_chksumsre      sR     C 2< E EFFFO#f0sCCDDDMM))r=   c                    	 |pd}|dk    rd S |t          j        | ||           d S t          ||          \  }}t          |          D ]J}|                     |          }t          |          |k     r |d          |                    |           K|dk    rH|                     |          }t          |          |k     r |d          |                    |           d S )Ni @  r   unexpected end of data)shutilcopyfileobjdivmodrM   readr5   write)	srcdstr8   	exceptionbufsizeblocks	remainderbrb   s	            r;   ri   ri      s     "G{{~3W---vw//FI6]]  hhws88g)4555		#A~~hhy!!s88i)4555		#
Fr=   c                     t          t          j        dd           }|)|                     |d                              |          } t          | d           d S )Nr9   backslashreplace )end)getattrsysstdoutr4   rA   print)r7   r9   s     r;   _safe_printr|     sV    sz:t44HHHX12299(CC	!r=   c                       e Zd Z	 dS )r   N__name__
__module____qualname__ r=   r;   r   r     s        Dr=   r   c                       e Zd Z	 dS )r   Nr~   r   r=   r;   r   r     s        /Dr=   r   c                       e Zd Z	 dS )r   Nr~   r   r=   r;   r   r     s        0Dr=   r   c                       e Zd Z	 dS )r	   Nr~   r   r=   r;   r	   r	     s        8Dr=   r	   c                       e Zd Z	 dS )r
   Nr~   r   r=   r;   r
   r
     s        GDr=   r
   c                       e Zd Z	 dS )r   Nr~   r   r=   r;   r   r     s        +Dr=   r   c                       e Zd Z	 dS )EmptyHeaderErrorNr~   r   r=   r;   r   r   !  s        &Dr=   r   c                       e Zd Z	 dS )TruncatedHeaderErrorNr~   r   r=   r;   r   r   $  s        *Dr=   r   c                       e Zd Z	 dS )EOFHeaderErrorNr~   r   r=   r;   r   r   '  s        ,Dr=   r   c                       e Zd Z	 dS )rP   Nr~   r   r=   r;   rP   rP   *  s        (Dr=   rP   c                       e Zd Z	 dS )SubsequentHeaderErrorNr~   r   r=   r;   r   r   -  s        =Dr=   r   c                   (    e Zd Z	 d Zd Zd Zd ZdS )_LowLevelFilec                     t           j        t           j        t           j        z  t           j        z  d|         }t          t           d          r|t           j        z  }t          j        ||d          | _        d S )NrwO_BINARYi  )	osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrr   r   fd)selfnamemodes      r;   __init__z_LowLevelFile.__init__:  si    rz)BJ6
 
  2z"" 	 BKD'$e,,r=   c                 8    t          j        | j                   d S N)r   closer   r   s    r;   r   z_LowLevelFile.closeC  s    
r=   c                 6    t          j        | j        |          S r   )r   rk   r   r   r(   s     r;   rk   z_LowLevelFile.readF  s    wtw%%%r=   c                 :    t          j        | j        |           d S r   )r   rl   r   r   r7   s     r;   rl   z_LowLevelFile.writeI  s    
!r=   N)r   r   r   r   r   rk   rl   r   r=   r;   r   r   4  sU        
- - -  & & &    r=   r   c                   Z    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
dd
Zd Zd Zd ZdS )_Streamc                    	 d| _         |t          ||          }d| _         |dk    r#t          |          }|                                }|pd| _        || _        || _        || _        || _        d| _	        d| _
        d| _        	 |dk    r	 dd l}n# t          $ r t          d          d w xY w|| _        |                    d          | _        |d	k    r"|j        | _        |                                  d S |                                  d S |d
k    rs	 dd l}n# t          $ r t          d          d w xY w|d	k    r.d| _        |                                | _        t2          | _        d S |                                | _        d S |dk    rs	 dd l}n# t          $ r t          d          d w xY w|d	k    r.d| _        |                                | _        |j        | _        d S |                                | _        d S |dk    rt          d|z            d S #  | j         s| j                                         d| _         xY w)NTF* r=   r   gzzzlib module is not availabler   bz2bz2 module is not availablexzlzma module is not availabletarunknown compression type %r) _extfileobjr   _StreamProxygetcomptyper   r   comptypefileobjrp   rb   posclosedzlibImportErrorr	   crc32crcerrorro   _init_read_gz_init_write_gzr   dbufBZ2DecompressorcmpOSErrorBZ2CompressorlzmaLZMADecompressor	LZMAErrorLZMACompressorr   )	r   r   r   r   r   rp   r   r   r   s	            r;   r   z_Stream.__init__X  s   	?#D$//G$Ds?? #7++G**,,H
		 -	4UKKKK" U U U*+IJJPTTU 	::c??3;;%)ZDN&&((((('')))))U""TJJJJ" T T T*+HIItST3;; #DI"2244DH%,DNNN"0022DHHHT!!UKKKK" U U U*+IJJPTTU3;; #DI#4466DH%)^DNNN#2244DHHHU""&'Dx'OPPP #"	# %""$$$DKsy   H B H B--A
H 9H H D H D665H -H H F H F//5H &H H *Ic                 d    t          | d          r| j        s|                                  d S d S d S )Nr   )r   r   r   r   s    r;   __del__z_Stream.__del__  sB    4"" 	4; 	JJLLLLL	 	 	 	r=   c                 B   	 | j                             d| j         j        | j         j         | j         j        d          | _        t          j        dt          t          j	                                        }| 
                    d|z   dz              | j                            d          r| j        d d         | _        t          j                            | j                  | _        | 
                    | j                            dd	          t"          z              d S )
N	   r   <Ls   s   .gzz
iso-8859-1replace)r   compressobjDEFLATED	MAX_WBITSDEF_MEM_LEVELr   r`   packrN   time_Stream__writer   endswithr   r&   basenamer4   r6   )r   	timestamps     r;   r   z_Stream._init_write_gz  s    	9((DI,>-1Y-@,@,0I,C,-/ / Kc$)++&6&677	(94{BCCC9e$$ 	'	#2#DIG$$TY//	TY%%lI>>DEEEEEr=   c                    	 | j         dk    r%| j                            || j                  | _        | xj        t          |          z  c_        | j         dk    r| j                            |          }|                     |           d S )Nr   r   )	r   r   r   r   r   r5   r   compressr   r   s     r;   rl   z_Stream.write  sx    	=D  yq$(33DHCFF=E!!!!!$$AQr=   c                 *   	 | xj         |z  c_         t          | j                   | j        k    rd| j                            | j         d | j                            | j         | j        d          | _         t          | j                   | j        k    bd S d S r   )rb   r5   rp   r   rl   r   s     r;   __writez_Stream.__write  s    	 	A$(mmdl**Ltx6777x.DH $(mmdl******r=   c                    	 | j         rd S d| _         	 | j        dk    r2| j        dk    r'| xj        | j                                        z  c_        | j        dk    r| j        r| j                            | j                   d| _        | j        dk    rg| j                            t          j	        d| j
                             | j                            t          j	        d| j        dz                       | j        s| j                                         d S d S # | j        s| j                                         w w xY w)NTr   r   r=   r   r   l    )r   r   r   rb   r   flushr   rl   r`   r   r   r   r   r   r   s    r;   r   z_Stream.close  s?   	 ; 	F	%yCDMU$:$:DHNN,,,yCDH""48,,,=D((L&&v{4'B'BCCCL&&v{4J9N'O'OPPP# %""$$$$$% %4# %""$$$$%s   C'D #Ec                    	 | j                             | j         j                   | _        d| _        |                     d          dk    rt          d          |                     d          dk    rt          d          t          |                     d                    }|                     d           |d	z  r]t          |                     d                    d
t          |                     d                    z  z   }| 	                    |           |dz  r%	 |                     d          }|r|t          k    rn$|dz  r%	 |                     d          }|r|t          k    rn$|dz  r|                     d           d S d S )Nr=   r%   s   not a gzip filer$      zunsupported compression method      rH   rG   T   )r   decompressobjr   r   r   _Stream__readr   r	   ordrk   r6   )r   flagxlenr7   s       r;   r   z_Stream._init_read_gz  s   	9**DI,?+?@@	 ;;q>>[((-...;;q>>W$$"#CDDD4;;q>>""A!8 	t{{1~~&&s4;;q>>/B/B)BBDIIdOOO!8 	KKNN AHH "9 	KKNN AHH !8 	KKNNNNN	 	r=   c                     	 | j         S r   )r   r   s    r;   tellz_Stream.tell  s    	xr=   r   c                    	 || j         z
  dk    rbt          || j         z
  | j                  \  }}t          |          D ]}|                     | j                   |                     |           nt          d          | j         S )Nr   z seeking backwards is not allowed)r   rj   rp   rM   rk   r
   )r   r   rq   rr   rR   s        r;   seekz_Stream.seek  s    	 >Q &sTX~t| D DFI6]] ( (		$,''''IIi    @AAAxr=   c                 l    	 |                      |          }| xj        t          |          z  c_        |S r   )_readr   r5   )r   r(   rb   s      r;   rk   z_Stream.read  s1    CjjCHH
r=   c                 *   	 | j         dk    r|                     |          S t          | j                  }| j        g}||k     r| j        r| j        }d| _        n"| j                            | j                  }|snk	 | j        	                    |          }n"# | j
        $ r}t          d          |d }~ww xY w|                    |           |t          |          z  }||k     d                    |          }||d          | _        |d |         S )Nr   r=   zinvalid compressed data)r   r   r5   r   rb   r   rk   rp   r   
decompressro   r   appendjoin)r   r(   ctrb   es         r;   r   z_Stream._read  s*   	=E!!;;t$$$	NNYK$hhx hl''55 Bh))#..> B B B 9::ABHHSMMMSMA $hh HHQKKdeeH	$xs   =B 
B7"B22B7c                 B   	 t          | j                  }| j        g}||k     rO| j                            | j                  }|sn-|                    |           |t          |          z  }||k     Od                    |          }||d          | _        |d |         S )Nr=   )r5   rb   r   rk   rp   r   r   )r   r(   r   r   rb   s        r;   __readz_Stream.__read.  s    	 MMXJ$hh,##DL11C HHSMMMSMA $hh HHQKKTUU8$xr=   N)r   )r   r   r   r   r   r   rl   r   r   r   r   r   rk   r   r   r   r=   r;   r   r   L  s        	D D DL  F F F   / / /% % %,  >  
       6    r=   r   c                   (    e Zd Z	 d Zd Zd Zd ZdS )r   c                 \    || _         | j                             t                    | _        d S r   )r   rk   	BLOCKSIZErb   )r   r   s     r;   r   z_StreamProxy.__init__D  s$    <$$Y//r=   c                 2    | j         j        | _        | j        S r   )r   rk   rb   r   s     r;   rk   z_StreamProxy.readH  s    L%	xr=   c                     | j                             d          rdS | j         dd         dk    r| j         dd         dk    rd	S | j                             d
          rdS dS )Ns   r   r      s   BZhr   
   s   1AY&SYr   )s   ]  s   7zXZr   r   )rb   
startswithr   s    r;   r   z_StreamProxy.getcomptypeL  sp    8// 	4Xac]f$$!B$9)D)D5X  !CDD 	45r=   c                 8    | j                                          d S r   )r   r   r   s    r;   r   z_StreamProxy.closeV  s    r=   N)r   r   r   r   rk   r   r   r   r=   r;   r   r   ?  sU        0 0 0        r=   r   c                   ^    e Zd Z	 ddZd Zd Zd Zd Zd Ze	j
        fdZdd	Zd
 Zd ZdS )_FileInFileNc                    || _         || _        || _        d| _        t	          |dd           | _        d| _        |d|fg}d| _        g | _        d}| j        }|D ]T\  }}||k    r| j        	                    d||d f           | j        	                    d|||z   |f           ||z  }||z   }U|| j        k     r%| j        	                    d|| j        d f           d S d S )Nr   r   FT)
r   offsetr(   positionrx   r   r   	map_indexmapr   )r   r   r  r(   	blockinfolastposrealposs          r;   r   z_FileInFile.__init__c  s   	GVT22	TI +% 	$ 	$LFD >???HOOT66D='BCCCtOGtmGGTYHOOUGTY=>>>>> r=   c                     d S r   r   r   s    r;   r   z_FileInFile.flush|  s    r=   c                     dS NTr   r   s    r;   readablez_FileInFile.readable  s    tr=   c                     dS NFr   r   s    r;   writablez_FileInFile.writable  s    ur=   c                 4    | j                                         S r   )r   seekabler   s    r;   r  z_FileInFile.seekable  s    |$$&&&r=   c                     	 | j         S r   )r  r   s    r;   r   z_FileInFile.tell  s    	}r=   c                    	 |t           j        k    r)t          t          |d          | j                  | _        n|t           j        k    rG|dk     rt          | j        |z   d          | _        nst          | j        |z   | j                  | _        nP|t           j        k    r1t          t          | j        |z   | j                  d          | _        nt          d          | j        S )Nr   zInvalid argument)	ioSEEK_SETminmaxr(   r  SEEK_CURSEEK_ENDr3   )r   r  whences      r;   r   z_FileInFile.seek  s    	R[  Ha 0 0$)<<DMMr{""!|| #DMH$<a @ @ #DMH$<di H Hr{""DI$8$) D DaHHDMM/000}r=   c                    	 || j         | j        z
  }nt          || j         | j        z
            }d}|dk    r	 | j        | j                 \  }}}}|| j        cxk    r|k     rn nn5| xj        dz  c_        | j        t          | j                  k    rd| _        bt          ||| j        z
            }|rg| j                            || j        |z
  z              | j                            |          }t          |          |k    rt          d          ||z  }n|t          |z  z  }||z  }| xj        |z  c_        |dk    |S )Nr=   r   Tr$   rg   )r(   r  r   r  r  r5   r   r   rk   r   r6   )	r   r(   rb   datastartstopr  r8   rs   s	            r;   rk   z_FileInFile.read  sq   	<9t},DDtTY677DQhh+,0HT^,D)eT6DM0000D00000NNa'NN~TX66)*+ tdm344F $!!&DME,A"BCCCL%%f--q66V###$<===qsV|#FNDMMV#MM' Qhh( 
r=   c                     |                      t          |                    }||d t          |          <   t          |          S r   )rk   r5   )r   rs   rb   s      r;   readintoz_FileInFile.readinto  s7    iiA)3s88)3xxr=   c                     d| _         d S r  )r   r   s    r;   r   z_FileInFile.close  s    r=   r   )r   r   r   r   r   r  r  r  r   r  r  r   rk   r*  r   r   r=   r;   r
  r
  ]  s        
? ? ? ?2      ' ' '  
 %'K        >  
    r=   r
  c                        e Zd Z fdZ xZS )ExFileObjectc                     t          |j        |j        |j        |j                  }t                                          |           d S r   )r
  r   offset_datar(   sparsesuperr   )r   tarfiletarinfor   	__class__s       r;   r   zExFileObject.__init__  sB    gow/Bgn. .!!!!!r=   r   r   r   r   __classcell__r4  s   @r;   r-  r-    s8        " " " " " " " " "r=   r-  c                       e Zd ZdS )FilterErrorNr~   r   r=   r;   r9  r9    s        Dr=   r9  c                        e Zd Z fdZ xZS )AbsolutePathErrorc                 j    || _         t                                          d|j        d           d S )Nzmember z has an absolute pathr3  r1  r   r   r   r3  r4  s     r;   r   zAbsolutePathError.__init__  s6    H7<HHHIIIIIr=   r5  r7  s   @r;   r;  r;    sA        J J J J J J J J Jr=   r;  c                        e Zd Z fdZ xZS )OutsideDestinationErrorc                     || _         || _        t                                          |j        d|ddz              d S )Nz would be extracted to ,  which is outside the destinationr3  _pathr1  r   r   r   r3  r&   r4  s      r;   r   z OutsideDestinationError.__init__  sT    
GLMM4MMM=> 	? 	? 	? 	? 	?r=   r5  r7  s   @r;   r@  r@    8        ? ? ? ? ? ? ? ? ?r=   r@  c                        e Zd Z fdZ xZS )SpecialFileErrorc                 h    || _         t                                          |j        d           d S )Nz is a special filer=  r>  s     r;   r   zSpecialFileError.__init__  s3    GL>>>?????r=   r5  r7  s   @r;   rI  rI    sA        @ @ @ @ @ @ @ @ @r=   rI  c                        e Zd Z fdZ xZS )AbsoluteLinkErrorc                 h    || _         t                                          |j        d           d S )Nz is a link to an absolute pathr=  r>  s     r;   r   zAbsoluteLinkError.__init__  s3    GLJJJKKKKKr=   r5  r7  s   @r;   rL  rL    sA        L L L L L L L L Lr=   rL  c                        e Zd Z fdZ xZS )LinkOutsideDestinationErrorc                     || _         || _        t                                          |j        d|ddz              d S )Nz would link to rB  rC  rD  rF  s      r;   r   z$LinkOutsideDestinationError.__init__  sT    
GLEE4EEE=> 	? 	? 	? 	? 	?r=   r5  r7  s   @r;   rO  rO    rG  r=   rO  Tc                    i }| j         }t          j                            |          }|                    dt          j        f          r,| j                            dt          j        z             x}|d<   t          j                            |          rt          |           t          j                            t          j        	                    ||                    }t          j        
                    ||g          |k    rt          | |          | j        }||dz  }|rr|                                 s|                                 r|dz  s|dz  }|dz  }n:|                                 s|                                 rd }nt#          |           || j        k    r||d<   |r]| j        d |d<   | j        d |d	<   | j        d |d
<   | j        d |d<   |                                 s|                                 rt          j                            | j                  rt/          |           |                                 rDt          j        	                    |t          j                            |          | j                  }n%t          j        	                    || j                  }t          j                            |          }t          j        
                    ||g          |k    rt3          | |          |S )N/r   i  @   i  r   r*   r+   r,   r-   )r   r   r&   realpathr  seplstripisabsr;  r   
commonpathr@  r   isregislnkisdirissymrI  r*   r+   r,   r-   linknamerL  dirnamerO  )member	dest_pathfor_data	new_attrsr   target_pathr   s          r;   _get_filtered_attrsre    s   I;D  ++I RV}%% D#);#5#5cBFl#C#CCy 	w}}T (  ''''""27<<	4#@#@AAK	w;	233y@@%fk:::;De| 	/||~~ / /e| #FND /6<<>> / 'v...6; $If G:!#Ie:!#Ie<#!%Ig<#!%Ig<<>> 	GV\\^^ 	Gw}}V_-- 0'///||~~ < gll9+-7??4+@+@+1?< < !gll9+1?< <'**;77Kw!!;	":;;yHH1&+FFFr=   c                     | S r   r   )r`  ra  s     r;   fully_trusted_filterrg  1  s    Mr=   c                 N    t          | |d          }|r | j        di |ddiS | S )NFdeepr   re  r   r`  ra  rc  s      r;   
tar_filterrl  4  sC    #FIu==I 7v~66	666666Mr=   c                 N    t          | |d          }|r | j        di |ddiS | S )NTri  Fr   rj  rk  s      r;   data_filterrn  :  sC    #FIt<<I 7v~66	666666Mr=   )fully_trustedr   r&  s   ([0-9]{1,20}) c                   p   e Zd Z	  edTi ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d$d&d$ZdUd(Zed)             Zej        d*             Zed+             Z	e	j        d,             Z	d- Z
eeeeeeeed.ed/
d0Zd1 Zeed2fd3Zd4 Zd5 Zd6 Zed7             Zd8 Zed9             Zed:             Zed;             Zed<             Zed=             Zed>             Zd? Zd@ ZdA Z dB Z!dC Z"dD Z#dE Z$dF Z%dG Z&dH Z'dI Z(dJ Z)dK Z*dL Z+dM Z,dN Z-dO Z.dP Z/dQ Z0dR Z1dS Z2d$S )Vr   r   zName of the archive member.r   zPermission bits.r*   z6User ID of the user who originally stored this member.r+   z7Group ID of the user who originally stored this member.r(   zSize in bytes.r)   zTime of last modification.chksumzHeader checksum.typezFile type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.r^  zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.r,   z
User name.r-   zGroup name.devmajorzDevice major number.devminorzDevice minor number.r  zThe tar header starts here.r/  zThe file's data starts here.pax_headerszMA dictionary containing key-value pairs of an associated pax extended header.r0  zSparse member information.r2  N_sparse_structs_link_targetr   c                     	 || _         d| _        d| _        d| _        d| _        d| _        d| _        t          | _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d | _        i | _        d S )Ni  r   r   )r   r   r*   r+   r(   r)   rq  REGTYPErr  r^  r,   r-   rs  rt  r  r/  r0  ru  r   r   s     r;   r   zTarInfo.__init__s  s    	 			
	

r=   c                     	 | j         S r   r   r   s    r;   r&   zTarInfo.path  s    2yr=   c                     || _         d S r   r|  rz  s     r;   r&   zTarInfo.path  s    			r=   c                     	 | j         S r   r^  r   s    r;   r'   zTarInfo.linkpath  s    :}r=   c                     || _         d S r   r  )r   r^  s     r;   r'   zTarInfo.linkpath  s     r=   c                 J    d| j         j        | j        t          |           fz  S )Nz<%s %r at %#x>)r4  r   r   idr   s    r;   __repr__zTarInfo.__repr__  s!    4>#:49RXX"NNNr=   T)
r   r)   r   r^  r*   r+   r,   r-   ri  _KEEPc       
            	 |	rt          j        |           }nt          j         |           }||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_	        |S r   )
copydeepcopyr   r)   r   r^  r*   r+   r,   r-   )r   r   r)   r   r^  r*   r+   r,   r-   ri  r  results               r;   r   zTarInfo.replace  s    	 	%]4((FFYt__FuFK FLuFK5  &FOeFJeFJ FL FLr=   c                 @   	 | j         d }n
| j         dz  }| j        || j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        d}|d         t          k    r+|d                             d          s|dxx         dz  cc<   |S )N  )r   r   r*   r+   r(   r)   rq  rr  r^  r,   r-   rs  rt  rr  r   rR  )r   r   r*   r+   r(   r)   rq  rr  r^  r,   r-   rs  rt  DIRTYPEr   )r   r   infos      r;   get_infozTarInfo.get_info  s    	9DD9v%D		
	


 
  <7""4<+@+@+E+E"LLLCLLLr=   surrogateescapec                 p   	 |                                  }|                                D ]\  }}|t          d|z            |t          k    r|                     |||          S |t
          k    r|                     |||          S |t          k    r|                     ||          S t          d          )Nz%s may not be Nonezinvalid format)	r  itemsr3   r   create_ustar_headerr   create_gnu_headerr   create_pax_header)r   rY   r9   r:   r  r   values          r;   tobufzTarInfo.tobuf  s    	}}::<< 	> 	>KD%} !5!<===  \!!++D(FCCCz!!))$&AAAz!!))$999-...r=   c                    	 t           |d<   t          |d                             ||                    t          k    rt	          d          t          |d                             ||                    t
          k    r&|                     |d         ||          \  |d<   |d<   |                     |t          ||          S )Nmagicr^  zlinkname is too longr   prefix)	POSIX_MAGICr5   r4   LENGTH_LINKr3   LENGTH_NAME_posix_split_name_create_headerr   )r   r  r9   r:   s       r;   r  zTarInfo.create_ustar_header  s    	#WtJ&&x8899KGG3444tF|""8V4455CC+/+A+A$v,PXZ`+a+a(DNDL""4xHHHr=   c                    	 t           |d<   d}t          |d                             ||                    t          k    r&||                     |d         t
          ||          z  }t          |d                             ||                    t          k    r&||                     |d         t          ||          z  }||                     |t          ||          z   S )Nr  r=   r^  r   )
	GNU_MAGICr5   r4   r  _create_gnu_long_headerGNUTYPE_LONGLINKr  GNUTYPE_LONGNAMEr  r   )r   r  r9   r:   rb   s        r;   r  zTarInfo.create_gnu_header  s    	!WtJ&&x8899KGG4//Z0@BRT\^deeeCtF|""8V4455CC4//V>NPXZ`aaaCT((z8VLLLLr=   c                    	 t           |d<   | j                                        }ddt          fddt          fddfD ]h\  }}}||v r	 ||                             dd	           n# t          $ r ||         ||<   Y @w xY wt          ||                   |k    r||         ||<   id
D ]u\  }}d}||         }	t          |	t                    }
|
rt          |	          n|	}d|cxk    rd|dz
  z  k     s
n d||<   d}n	|
r|||<   d}|r||vrt          |	          ||<   v|r|                     |t          |          }nd}||                     |t          dd          z   S )Nr  r   r&   r^  r'   )r,   r,       )r-   r-   r  rI   rJ   ))r*   rG   )r+   rG   )r(      )r)   r  Fr   rG   r$   Tr=   r   )r  ru  r  r  r  r4   UnicodeEncodeErrorr5   
isinstancefloatroundstr_create_pax_generic_headerXHDTYPEr  r   )r   r  r9   ru  r   hnamer8   rX   	needs_paxvalval_is_floatval_intrb   s                r;   r  zTarInfo.create_pax_header  s   	 $W&++--
 -
J/T&(>$@ 	0 	0D% ##T
!!'84444%   %)$ZE" 4:''%)$ZE" R 	- 	-LD&It*C%c511L$09eCjjjcG3333!
"33333T
 		 ! %T
 	  -T44$'HHD!  	11+wQQCCCT((|WiPPPPs   A$$A<;A<c                 <    	 |                      |t          d          S )Nr1   )r  XGLTYPE)clsru  s     r;   create_pax_global_headerz TarInfo.create_pax_global_header>  s    	--k7GLLLr=   c                    	 |                     d          }t          dt          |                    D ]}d                    |d |                   }d                    ||d                    }t          |                    ||                    t
          k    r.t          |                    ||                    t          k    r nt          d          ||fS )NrR  r$   zname is too long)splitrM   r5   r   r4   LENGTH_PREFIXr  r3   )r   r   r9   r:   
componentsrR   r  s          r;   r  zTarInfo._posix_split_nameD  s    	 ZZ__
q#j//** 	1 	1AXXj!n--F88JqrrN++D6==62233}DDHf5566+EE/000t|r=   c                    	 |                      d          t          t          fv }|rKt          |                      dd          d|          }t          |                      dd          d|          }n$t	          dd||          }t	          dd||          }|                      dt
                    }|t          d          t	          |                      dd          d	||          t          |                      d
d          dz  d|          t          |                      dd          d|          t          |                      dd          d|          t          |                      dd          d|          t          |                      dd          d|          d|t	          |                      dd          d	||          |                      dt                    t	          |                      dd          d||          t	          |                      dd          d||          ||t	          |                      dd          d||          g}t          j	        dt          z  d                    |                    }	t          |	t           d                    d         }
|	d d         t          d|
z  d          z   |	dd          z   }	|	S )Nrr  rs  r   rG   rt  r   zTarInfo.type must not be Noner   r   r   r  r*   r+   r(   r  r)   s           r^  r  r,   r  r-   r  r   z%dsr=   iz%06o rI   i)getCHRTYPEBLKTYPEr[   r<   ry  r3   r  r`   r   r  r   re   rU   )r  rY   r9   r:   has_device_fieldsrs  rt  filetypepartsrb   rq  s              r;   r  zTarInfo._create_headerT  s   	 !HHV,,'0BB 	4488J22Av>>H488J22Av>>HH2q(F33H2q(F33H 88FG,,<=== $$c8V<<##f,a88""Av..""Av..##R00!$$b&11R((#x@@HHWk**"%%r8V<<"%%r8V<<2&&Xv>>
$ k%)+SXXe__==c9*++.//2%4%j5F!2G<<<s455zI
r=   c                     	 t          t          |           t                    \  }}|dk    r| t          |z
  t          z  z  } | S )Nr   )rj   r5   r  r6   )payloadrq   rr   s      r;   _create_payloadzTarInfo._create_payload~  sE    	 #3w<<;;	q==	I-44Gr=   c                     	 |                     ||          t          z   }i }d|d<   ||d<   t          |          |d<   t          |d<   |                     |t
          ||          |                     |          z   S )Nz././@LongLinkr   rr  r(   r  )r4   r6   r5   r  r  r   r  )r  r   rr  r9   r:   r  s         r;   r  zTarInfo._create_gnu_long_header  s    	 {{8V,,s2&VV4yyV!W !!$hGG##D))* 	*r=   c                    	 d}|                                 D ]/\  }}	 |                    dd           # t          $ r d}Y  nw xY wd}|r|dz  }|                                 D ]\  }}|                    d          }|r|                    |d          }n|                    d          }t          |          t          |          z   dz   }d	x}	}
	 |t          t	          |
                    z   }	|	|
k    rn|	}
)|t          t	          |
          d
          dz   |z   dz   |z   dz   z  }i }d|d<   ||d<   t          |          |d<   t          |d<   |                     |t          d
d          | 	                    |          z   S )NFr1   rJ   Tr=   s   21 hdrcharset=BINARY
r  r  r   rI          =   
z././@PaxHeaderr   rr  r(   r  r   )
r  r4   r  r5   r  rU   r  r  r   r  )r  ru  rr  r9   binarykeywordr  recordslrQ   rB   r  s               r;   r  z"TarInfo._create_pax_generic_header  s   	 )//11 	 	NGUWh////%     	100G)//11 	V 	VNGUnnW--G . X/@AAW--Gs5zz)A-AIACFFO66	
 uSVVW--4w>EMPUUUGG 'VV7||V#W !!$gyII##G,,- 	-s   5AAc                    	 t          |          dk    rt          d          t          |          t          k    rt          d          |                    t
                    t          k    rt          d          t          |dd                   }|t          |          vrt          d           |             }t          |dd         ||          |_        t          |dd	                   |_        t          |d	d
                   |_        t          |d
d                   |_        t          |dd                   |_        t          |dd                   |_        ||_        |dd         |_        t          |dd         ||          |_        t          |dd         ||          |_        t          |dd         ||          |_        t          |dd                   |_        t          |dd                   |_        t          |dd         ||          }|j        t0          k    r&|j                            d          rt4          |_        |j        t6          k    rd}g }t9          d          D ]h}		 t          |||dz                      }
t          ||dz   |dz                      }n# t:          $ r Y  n!w xY w|                    |
|f           |dz  }it?          |d                   }t          |dd                   }|||f|_         |!                                r|j        "                    d          |_        |r |j        tF          vr|dz   |j        z   |_        |S )Nr   zempty headerztruncated headerzend of file header      zbad checksumr   l   t   |         i  i	  i)  iI  iQ  iY  i  rR  i  r   r     i  i  i  )$r5   r   r  r   countr6   r   rS   re   rP   rC   r   r   r*   r+   r(   r)   rq  rr  r^  r,   r-   rs  rt  AREGTYPEr   r  GNUTYPE_SPARSErM   r3   r   boolrv  r\  rstrip	GNU_TYPES)r  rb   r9   r:   rq  objr  r   structsrR   r  numbytes
isextendedorigsizes                 r;   frombufzTarInfo.frombuf  sI   	s88q==">222s88y  &'9:::99S>>Y&& !5666SS\""c****$^444cees1S5z8V44s3s7|$$c#c'l##c#c'l##s3s7|$$CG%%	
s3w<3s3w<6::CGh77	CGh77	3s3w<((3s3w<((SS\8V44 8xCH$5$5c$:$:CH
 8~%%CG1XX   Sr\!233F"3sRxb'8#9::HH!   EE1222r	c#hJ3s3w<((H#*J"AC 99;; 	,xs++CH  	/chi//|ch.CH
s   7J==
K
Kc                     	 |j                             t                    }|                     ||j        |j                  }|j                                         t          z
  |_        |                    |          S r   )	r   rk   r  r  r9   r:   r   r  _proc_member)r  r2  rb   r  s       r;   fromtarfilezTarInfo.fromtarfile  sf    	 o""9--kk#w/@@_))++i7
(((r=   c                 ,   	 | j         t          t          fv r|                     |          S | j         t          k    r|                     |          S | j         t          t          t          fv r| 	                    |          S | 
                    |          S r   )rr  r  r  _proc_gnulongr  _proc_sparser  r  SOLARIS_XHDTYPE	_proc_pax_proc_builtin)r   r2  s     r;   r  zTarInfo._proc_member   s    	 9)+;<<<%%g...Y.(($$W---Y7G_===>>'***%%g...r=   c                    	 |j                                         | _        | j        }|                                 s| j        t
          vr||                     | j                  z  }||_        | 	                    |j
        |j        |j                   |                                 r| j                            d          | _        | S NrR  )r   r   r/  rZ  rr  SUPPORTED_TYPES_blockr(   r  _apply_pax_inforu  r9   r:   r\  r   r  )r   r2  r  s      r;   r  zTarInfo._proc_builtin-  s    	 #?//11!::<< 	-49O;;dkk$),,,F 	W0'2BGNSSS ::<< 	.	((--DIr=   c                 8   	 |j                             |                     | j                            }	 |                     |          }n/# t
          $ r"}t          t          |                    d d }~ww xY w| j        |_        | j	        t          k    r!t          ||j        |j                  |_        n0| j	        t          k    r t          ||j        |j                  |_        |                                r|j                            d          |_        |S r  )r   rk   r  r(   r  r   r   r  r  rr  r  rC   r9   r:   r   r  r^  r\  removesuffix)r   r2  rb   nextr   s        r;   r  zTarInfo._proc_gnulongC  s   	 o""4;;ty#9#9::	:##G,,DD 	: 	: 	:'A//T9	:
 k9(((C!17>BBDIIY***W%5w~FFDM ::<< 	4	..s33DIs   A 
A7A22A7c                 4   	 | j         \  }}}| ` |r|j                            t                    }d}t	          d          D ]l}	 t          |||dz                      }t          ||dz   |dz                      }	n# t          $ r Y  n%w xY w|r|	r|                    ||	f           |dz  }mt          |d                   }||| _	        |j        
                                | _        | j        |                     | j                  z   |_        || _        | S )Nr      r  r  i  )rv  r   rk   r  rM   rS   r3   r   r  r0  r   r/  r  r(   r  )
r   r2  r  r  r  rb   r   rR   r  r  s
             r;   r  zTarInfo._proc_sparse^  sK   	 )-(<%X   	(/&&y11CC2YY   Sr\!233F"3sRxb'8#9::HH!   EE 7h 7NNFH#5666r	c#hJ  	( "?//11)DKK	,B,BB	s   7A<<
B
	B
c                    	 |j                             |                     | j                            }| j        t
          k    r|j        }n|j                                        }d}d }g }t          |          |k    r||         dk    rst          
                    ||          x}st          d          	 t          |                    d                    }n# t          $ r t          d          w xY w|dk     rt          d          ||z   t          |          k    rt          d          |                    d          |z   dz
  }	||                    d          dz   |	         }
|
                    d          \  }}}|r|dk    s||	         dk    rt          d          |                    |||f           |dk    r||dk    r|j        }nd	}||z  }t          |          |k    r||         dk    s|d	}|D ]q\  }}}|                     |d	d	|j                  }|t,          v r#|                     |||j        |j                  }n|                     |d	d	|j                  }|||<   r	 |                     |          }n/# t0          $ r"}t3          t5          |                    d d }~ww xY wd
|v r|                     ||           ndd|v r|                     ||           nI|                    d          dk    r0|                    d          dk    r|                     |||           | j        t>          t@          fv r~|!                    ||j        |j                   | j"        |_"        d|v rM|j#        }|$                                s|j        tJ          vr||                    |j                  z  }||_"        |S )Nr   rL   r$      r  r  s
   hdrcharsets   BINARYr1   GNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrK   r(   )&r   rk   r  r(   rr  r  ru  r  r5   _header_length_prefix_rematchrP   rN   groupr3   r'  rw   	partitionr   r9   _decode_pax_fieldr:   PAX_NAME_FIELDSr  r   r   r  _proc_gnusparse_01_proc_gnusparse_00r  _proc_gnusparse_10r  r  r  r  r/  rZ  r  )r   r2  rb   ru  r   r9   raw_headersr  r8   header_value_end_offsetkeyword_and_valueraw_keywordequals	raw_valuer  r  r  r   r  s                      r;   r  zTarInfo._proc_paxz  sF   	 o""4;;ty#9#9::
 9!-KK!-2244K #hhnnST!1!15;;CEEEE ;()9:::;U[[^^,, ; ; ;()9:::; zz()9:::V|c#hh&&()9:::&+kk!nnv&=&A# #EIIaLL1$45L$L M->-H-H-N-N*K  ;&D..C8O4PTX4X4X()9:::Y?@@@ m++0@	))&/HH&H6MCM #hhnnST!1!1R H /: 	) 	)*FK ,,['7N$ $G/))..y(GDT( ( ..y'7( ( $)K  	:##G,,DD 	: 	: 	:'A//T9	: {**##D+6666+--##D+6666__/00C77KOOL^<_<_cf<f<f##D+w???9/222  g.>OOO+DK$$ )::<< 549O#C#Cdkk$)444F!'s$   9"C C68J 
J:J55J:c                    	 g }g }|D ]\  }}}|dk    rS	 |                     t          |                                                     B# t          $ r t	          d          w xY w|dk    rS	 |                     t          |                                                     # t          $ r t	          d          w xY wt          t          ||                    |_        d S )Ns   GNU.sparse.offsetrL   s   GNU.sparse.numbytes)r   rN   rA   r3   rP   listzipr0  )r   r  r  offsetsr  _r  r  s           r;   r  zTarInfo._proc_gnusparse_00  s   	!, 	? 	?Aw...?NN3u||~~#6#67777! ? ? ?,-=>>>? 222?OOC$7$78888! ? ? ?,-=>>>? 3 3w1122s   4A

A$.4B##B=c           	          	 d |d                              d          D             }t          t          |d d d         |dd d                             |_        d S )Nc                 ,    g | ]}t          |          S r   )rN   ).0xs     r;   
<listcomp>z.TarInfo._proc_gnusparse_01.<locals>.<listcomp>
  s    KKKQ#a&&KKKr=   r  ,r%   r$   )r  r
  r  r0  )r   r  ru  r0  s       r;   r   zTarInfo._proc_gnusparse_01  s_    	KK+.>"?"E"Ec"J"JKKK3vccc{F14a4L99::r=   c           	      \   	 d }g }|j                             t                    }|                    dd          \  }}t	          |          }t          |          |dz  k     rwd|vr"||j                             t                    z  }|                    dd          \  }}|                    t	          |                     t          |          |dz  k     w|j                                         |_        t          t          |d d d         |dd d                             |_        d S )Nr  r$   r%   )r   rk   r  r  rN   r5   r   r   r/  r
  r  r0  )r   r  ru  r2  fieldsr0  rb   numbers           r;   r  zTarInfo._proc_gnusparse_10  s   	o""9--iiq))V&kkFQJ&&Cw++I666))E1--KFCMM#f++&&&	 &kkFQJ&&
 #?//113vccc{F14a4L99::r=   c                     	 |                                 D ]\  }}|dk    rt          | d|           |dk    rt          | dt          |                     B|dk    rt          | dt          |                     g|t          v r^|t          v r)	 t	          |         |          }n# t
          $ r d}Y nw xY w|dk    r|                    d          }t          | ||           |                                | _        d S )NzGNU.sparse.namer&   r  r(   zGNU.sparse.realsizer   rR  )	r  setattrrN   
PAX_FIELDSPAX_NUMBER_FIELDSr3   r  r  ru  )r   ru  r9   r:   r  r  s         r;   r  zTarInfo._apply_pax_info  s4   	 *//11 	. 	.NGU+++fe,,,,---fc%jj1111111fc%jj1111J&&///" 1' :5 A A% " " " !"f$$!LL--Egu---&++--s   B&&B54B5c                 ~    	 	 |                     |d          S # t          $ r |                     ||          cY S w xY w)NrJ   )rA   UnicodeDecodeError)r   r  r9   fallback_encodingfallback_errorss        r;   r  zTarInfo._decode_pax_field4  s[    		D<<(333! 	D 	D 	D<< 1?CCCCC	Ds     <<c                 V    	 t          |t                    \  }}|r|dz  }|t          z  S )Nr$   )rj   r  )r   r  rq   rr   s       r;   r  zTarInfo._block<  s9    	 #5)44	 	aKF	!!r=   c                      	 | j         t          v S r   )rr  REGULAR_TYPESr   s    r;   rZ  zTarInfo.isregE  s    >yM))r=   c                 ,    	 |                                  S r   )rZ  r   s    r;   isfilezTarInfo.isfileI  s    >zz||r=   c                 $    	 | j         t          k    S r   )rr  r  r   s    r;   r\  zTarInfo.isdirM      +yG##r=   c                 $    	 | j         t          k    S r   )rr  SYMTYPEr   s    r;   r]  zTarInfo.issymQ  s    /yG##r=   c                 $    	 | j         t          k    S r   )rr  LNKTYPEr   s    r;   r[  zTarInfo.islnkU  r%  r=   c                 $    	 | j         t          k    S r   )rr  r  r   s    r;   ischrzTarInfo.ischrY  s    2yG##r=   c                 $    	 | j         t          k    S r   )rr  r  r   s    r;   isblkzTarInfo.isblk]  s    .yG##r=   c                 $    	 | j         t          k    S r   )rr  FIFOTYPEr   s    r;   isfifozTarInfo.isfifoa  s    &yH$$r=   c                     | j         d uS r   )r0  r   s    r;   issparsezTarInfo.issparsee  s    {$&&r=   c                 :    	 | j         t          t          t          fv S r   )rr  r  r  r/  r   s    r;   isdevzTarInfo.isdevh  s    MyWgx888r=   r   )r   )3r   r   r   dict	__slots__r   propertyr&   setterr'   r  r  r   r  r   r   r  r  r  r  classmethodr  r  staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  rZ  r#  r\  r]  r[  r+  r-  r0  r2  r4  r   r=   r;   r   r   P  sv         
 
 
,,
!!
 GF
 HG	

  
 -,
 $#
> >
F F
 
 
 *)
  *)!
" /.#
$ 54%
&9 9'
* .-+
, $-
. $/
0 t1
I6   0   X 
[  [   X _! ! _!O O O %eeuE    8  8 *HEV / / / /"I I IM M M8Q 8Q 8Qt M M [M
    ' ' \'R   \ * * [*  0- 0- [0-d < < [<| ) ) [)(/ / /  ,  6  8w w wr3 3 3(; ; ;; ; ; . . ..D D D" " "* * *  $ $ $$ $ $$ $ $$ $ $$ $ $% % %' ' '9 9 9 9 9r=   r   c                      e Zd Z	 dZdZdZdZeZe	Z
dZeZeZdZ	 	 	 	 d<dZedddefd            Zed=d	            Zed>d            Zed>d            Zed?d            ZdddddZd Zd Zd Zd Zd@dZdAdddZdBdddZ dCdZ!d Z"dDddd d!Z#dEddd d#Z$d$ Z%d% Z&d& Z'd' Z(d( Z)	 	 dFd)Z*d* Z+d+ Z,d, Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4dGd4Z5d5 Z6dCd6Z7d7 Z8d8 Z9d9 Z:d: Z;d; Z<dS )Hr   r   Fr$   Nr   r  c                    	 ddddd}||vrt          d          || _        ||         | _        |sU| j        dk    r-t          j                            |          sd| _        d| _        t          || j                  }d	| _        n]|8t          |d
          r(t          |j
        t          t          f          r|j
        }t          |d          r|j        | _        d| _        |rt          j                            |          nd | _
        || _        ||| _        ||| _        ||| _        ||| _        ||| _        |	| _        |
| j        t*          k    r|
| _        ni | _        ||| _        ||| _        || _        d	| _        g | _        d	| _        | j                                        | _        i | _        	 | j        dk    r d | _         | !                                | _         | j        dk    r	 | j        "                    | j                   	 | j        #                    |           }| j        $                    |           nY# tJ          $ r" | j        "                    | j                   Y n/tL          $ r"}tO          t          |                    d d }~ww xY w| j        dv rxd| _        | j        rl| j        (                    | j        )                                          }| j        *                    |           | xj        tW          |          z  c_        d S d S d S #  | j        s| j        ,                                 d| _         xY w)Nrbzr+bwbxbr   ar   r  !mode must be 'r', 'a', 'w' or 'x'rA  r   Fr   r   Tr   rA  r   r  )-r3   r   _moder   r&   exists	bltn_openr   r   r  r   r  rU   abspathr   rY   r3  dereferenceignore_zerosr9   r:   r   ru  debug
errorlevelcopybufsizer   members_loadedr   r  inodesfirstmemberr  r   r  r   r   r   r   r  r  rl   r5   r   )r   r   r   r   rY   r3  rH  rI  r9   r:   ru  rJ  rK  rL  modesr   rb   s                    r;   r   zTarFile.__init__  s   	 T==u@AAA	4[
 	$yCt(<(<	!
dj11G$D&!9!97<#u66 |w'' *$\
#D-1;BGOOD)))t	  DK"DL"*D# ,D$DM"t{j'@'@*D!DDJ!(DO 'l''))	yC#' #'99;; yC	:L%%dk222:"&,":":4"@"@++G4444)   ))$+666& : : :'A//T9:	: yO++## ,,??@P@U@U@W@WXXCL&&s+++KK3s88+KKKK ,+, ,	# %""$$$DKs>   <AL' 4I L' )J1L' 3	J<JJBL' '*Mc                     	 |s|st          d          |dv rՈ fd}g }t           j        |          D ]}t            j        |                   }	||                                }
	  |	|d|fi |c S # t
          t          f$ r<}|                    d| d|           ||                    |
           Y d }~d }~ww xY wd	                    |          }t          d	|           d
|v rc|
                    d
d          \  }}|pd}|pd}| j        v rt            j        |                   }	nt          d|z             |	|||fi |S d|v rw|
                    dd          \  }}|pd}|pd}|dvrt          d          t          |||||          }	   |||fi |}n#  |                                  xY wd|_        |S |dv r  j        |||fi |S t          d          )Nznothing to open)r   r:*c                 &    j         |          dk    S )Ntaropen)	OPEN_METH)r   r  s    r;   not_compressedz$TarFile.open.<locals>.not_compressed"  s    }X.);;r=   )keyr   z	- method z: 
z'file could not be opened successfully:
:r$   r   r   |r   zmode must be 'r' or 'w'FrC  zundiscernible mode)r3   sortedrV  rx   r   r   r	   r   r   r   r  r   r   r   rU  )r  r   r   r   rp   kwargsrW  
error_msgsr   func	saved_posr   error_msgs_summaryfilemodestreamr   s   `               r;   r   zTarFile.open  s   !	F  	0G 	0.///<< < < < <J"3=nEEE 
 
sCM($;<<& 'I4c7==f=====!#34   %%&C(&C&Ca&C&CDDD*Y///HHHH	
 "&:!6!6[GY[[\\\D[[!%C!3!3Hh3H(5H 3=((sCM($;<<&'Dx'OPPP4h::6:::D[[!%C!3!3Hh3H(5Hz)) !:;;;T8XwHHFCh99&99!AMH_$$3;tT7==f===-...s$   +
A88C	2C  C"F. .Gc                 @    	 |dvrt          d           | |||fi |S )Nr@  rB  )r3   )r  r   r   r   r]  s        r;   rU  zTarFile.taropenV  s>    	+++@AAAs4w11&111r=   r   c                    	 |dvrt          d          	 ddlm} n# t          $ r t	          d          d w xY w	  |||dz   ||          }n+# t
          $ r}||dk    rt          d          | d }~ww xY w	  | j        |||fi |}nR# t
          $ r0}|                                 |dk    rt          d          | d }~w |                                  xY wd	|_	        |S )
Nr   r   r  mode must be 'r', 'w' or 'x'r   )GzipFilezgzip module is not availablers   r   r   F)
r3   gziprh  r   r	   r   r   rU  r   r   )	r  r   r   r   compresslevelr]  rh  r   r   s	            r;   gzopenzTarFile.gzopen^  sX   	 &&;<<<	M%%%%%%% 	M 	M 	M"#ABBL	M	htTCZHHGG 	 	 	"ts{{ 1229	
		D$::6::AA 	 	 	MMOOOs{{ 1229	MMOOOs7    8A 
A6A11A6:B 
C+C  Cc                 ~   	 |dvrt          d          	 ddlm} n# t          $ r t	          d          d w xY w ||p|||          }	  | j        |||fi |}nY# t          t          f$ r0}|                                 |dk    rt          d          | d }~w |                                  xY wd	|_
        |S )
Nrf  rg  r   )BZ2Filer   )rj  r   znot a bzip2 fileF)r3   r   rm  r   r	   rU  r   EOFErrorr   r   r   )	r  r   r   r   rj  r]  rm  r   r   s	            r;   bz2openzTarFile.bz2open  s   	 &&;<<<	L####### 	L 	L 	L"#@AAtK	L ''/T4}MMM		D$::6::AA" 	 	 	MMOOOs{{ 233:	MMOOOs     8A B3.+BB3c                 x   	 |dvrt          d          	 ddlm}m} n# t          $ r t          d          d w xY w ||p|||          }	  | j        |||fi |}nT# |t          f$ r0}	|                                 |dk    rt          d          |	 d }	~	w |                                  xY wd	|_
        |S )
Nrf  rg  r   )LZMAFiler   r   )presetr   znot an lzma fileF)r3   r   rq  r   r   r	   rU  rn  r   r   r   )
r  r   r   r   rr  r]  rq  r   r   r   s
             r;   xzopenzTarFile.xzopen  s   	 &&;<<<	M000000000 	M 	M 	M"#ABBL	M (7?dD@@@		D$::6::AA8$ 	 	 	MMOOOs{{ 233:	MMOOOs     :A B0++BB0rU  rk  ro  rs  )r   r   r   r   c                    	 | j         rd S d| _         	 | j        dv r| j                            t          t
          dz  z             | xj        t
          dz  z  c_        t          | j        t                    \  }}|dk    r*| j                            t          t          |z
  z             | j	        s| j        
                                 d S d S # | j	        s| j        
                                 w w xY w)NTrC  r%   r   )r   r   r   rl   r6   r  r  rj   
RECORDSIZEr   r   )r   rq   rr   s      r;   r   zTarFile.close  s    	 ; 	F	%yO++""3)a-#8999	A. %+4;
$C$C!	q==L&&sj9.D'EFFF# %""$$$$$% %4# %""$$$$%s   BC #C2c                     	 |                      |                    d                    }|t          d|z            |S )NrR  zfilename %r not found)
_getmemberr  KeyError)r   r   r3  s      r;   	getmemberzTarFile.getmember  sD    	
 //$++c"2"233?2T9:::r=   c                 p    	 |                                   | j        s|                                  | j        S r   )_checkrN  _loadrM  r   s    r;   
getmemberszTarFile.getmembers  s5    	 	| 	JJLLL|r=   c                 @    	 d |                                  D             S )Nc                     g | ]	}|j         
S r   r|  )r  r3  s     r;   r  z$TarFile.getnames.<locals>.<listcomp>  s    >>>>>>r=   )r}  r   s    r;   getnameszTarFile.getnames  s'    	 ?>DOO,=,=>>>>r=   c                    	 |                      d           ||j        }||}t          j                            |          \  }}|                    t          j        d          }|                    d          }|                                 }| |_	        |1| j
        st          j        |          }n;t          j        |          }n&t          j        |                                          }d}|j        }t          j        |          ri|j        |j        f}	| j
        s:|j        dk    r/|	| j        v r&|| j        |	         k    rt*          }
| j        |	         }nt,          }
|	d         r
|| j        |	<   nt          j        |          rt0          }
nt          j        |          rt4          }
njt          j        |          rt8          }
t          j        |          }n:t          j        |          rt>          }
nt          j         |          rtB          }
nd S ||_        ||_"        |j#        |_$        |j%        |_&        |
t,          k    r|j'        |_(        nd|_(        |j)        |_*        |
|_+        ||_,        tZ          r6	 t[          j.        |j$                  d         |_/        n# t`          $ r Y nw xY wtb          r6	 tc          j2        |j&                  d         |_3        n# t`          $ r Y nw xY w|
t>          tB          fv rfti          t          d          rQti          t          d          r<t          j5        |j6                  |_7        t          j8        |j6                  |_9        |S )NawxrR  r   r$   r   majorminor):r{  r   r   r&   
splitdriver   rV  rW  r3  r2  rH  lstatstatfstatfilenost_modeS_ISREGst_inost_devst_nlinkrO  r)  ry  S_ISDIRr  S_ISFIFOr/  S_ISLNKr'  readlinkS_ISCHRr  S_ISBLKr  r   st_uidr*   st_gidr+   st_sizer(   st_mtimer)   rr  r^  pwdgetpwuidr,   rx  grpgetgrgidr-   r   r  st_rdevrs  r  rt  )r   r   arcnamer   drvr3  statresr^  stmdinoderr  s              r;   
gettarinfozTarFile.gettarinfo  sB   	 	E <D
 ?Gw))'22W//"&#....%% ,,.. ?# ((4..'$--hw~~//00G< 	^W^4E# 1(81(<(<T[((WE8J-J-J ;u- 8 1)0DK&\$ 	DD]4   
	DD\$ 	D{4((HH\$ 	DD\$ 	DD4 nn7??"?GLLGL(# 	 #W[ 9 9! <    	 #W[ 9 9! <    GW%%%r7## =G(<(< =#%8GO#<#< #%8GO#<#< s$   >$J# #
J0/J0;$K   
K-,K-T)rM  c                   	 |                                   || }|D ]}|r|j        t          d           n&t          t          j        |j                             t          |j        p|j        d|j        p|j                   |	                                s|
                                r"t          dd|j        |j        fz  z             nt          d|j        z             |j        t          d           n1t          dt          j        |j                  d d         z             t          |j        |                                rdnd	z              |rV|                                rt          d
|j        z              |                                rt          d|j        z              t-                       d S )Nz
??????????rR  z%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02dr   r   z-> zlink to )r{  r   r|   r  rb  r,   r*   r-   r+   r+  r-  rs  rt  r(   r)   r   	localtimer   r\  r]  r^  r[  r{   )r   verboserM  r3  s       r;   r
  zTarFile.listU  s   	
 	?G 	 	G E<'----gl ; ;<<<w}'C'C'C'.}'C'CE F F F==?? 7gmmoo 7$(8':J'KK!M N N N N   5666=( 56666 ="&."?"?"C!D E E E w}}(FBGHHH ?==?? :(8 8999==?? ?
W-= =>>>GGGG5	 	r=   filterc                   	 |                      d           ||}| j        Ct          j                            |          | j        k    r|                     dd|z             d S |                     d|           |                     ||          }||                     dd|z             d S |( ||          }||                     dd|z             d S |                                rAt          |d          5 }| 	                    ||           d d d            d S # 1 swxY w Y   d S |
                                r| 	                    |           |ryt          t          j        |                    D ]Y}|                     t          j                            ||          t          j                            ||          ||           Xd S d S | 	                    |           d S )	Nr  r%   ztarfile: Skipped %rr$   ztarfile: Unsupported type %rtarfile: Excluded %rr=  r  )r{  r   r   r&   rG  _dbgr  rZ  rF  addfiler\  r\  listdiraddr   )r   r   r  	recursiver  r3  fs          r;   r  zTarFile.add{  sI   	 	E?G 9 RW__T%:%:di%G%GIIa.5666F		!T //$00?IIa7$>???F fWooG		!3d:;;; ==?? 	"4&& )!Wa((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ]]__ 	"LL!!! 6
4 0 011 6 6AHHRW\\$22BGLL!4L4L%f  6 6 6 66 66 6
 LL!!!!!s   <D  D$'D$c                 h   	 |                      d           t          j        |          }|                    | j        | j        | j                  }| j                            |           | xj        t          |          z  c_        | j
        }|t          || j        |j        |           t          |j        t                    \  }}|dk    r/| j                            t          t          |z
  z             |dz  }| xj        |t          z  z  c_        | j                            |           d S )Nr  )rp   r   r$   )r{  r  r  rY   r9   r:   r   rl   r  r5   rL  ri   r(   rj   r  r6   rM  r   )r   r3  r   rb   rp   rq   rr   s          r;   r  zTarFile.addfile  s   	
 	E)G$$mmDKDD3s3xx w|WMMMM &w|Y ? ?FI1}}""3)i*?#@AAA!KK6I--KKG$$$$$r=   c                     |6| j         }|t          S t          |t                    rt	          d          |S t          |          r|S 	 t          |         S # t          $ r t          d|d          d w xY w)NzrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.zfilter z
 not found)	extraction_filterrg  r  r  	TypeErrorcallable_NAMED_FILTERSrx  r3   )r   r  s     r;   _get_filter_functionzTarFile._get_filter_function  s    >+F~++&#&& 767 7 7 MF 	M	G!&)) 	G 	G 	G;v;;;<<$F	Gs   A A7.)numeric_ownerr  c                   	 g }|                      |          }|| }|D ]q}|                     |||          }||                                r|                    |           |                     |||                                 |           r|                    d d           |D ]}t          j                            ||j	                  }		 | 
                    ||	|           |                     ||	           |                     ||	           m# t          $ r}
|                     |
           Y d }
~
d }
~
ww xY wd S )N	set_attrsr  c                     | j         S r   r|  )rA  s    r;   <lambda>z$TarFile.extractall.<locals>.<lambda>  s    qv r=   T)rX  reverse)r  )r  _get_extract_tarinfor\  r   _extract_onesortr   r&   r   r   chownutimechmodr   _handle_nonfatal_error)r   r&   rM  r  r  directoriesfilter_functionr`  r3  dirpathr   s              r;   
extractallzTarFile.extractall  s   	 33F;;?G 
	; 
	;F//NNG}} , ""7+++gt7==??7J,9  ; ; ; ; 	--t<<< # 	/ 	/Ggll466G/

7G=
III

7G,,,

7G,,,, / / /++A......../	/ 	/s   AD
E"D<<Er   c                    	 |                      |          }|                     |||          }||                     ||||           d S d S r   )r  r  r  )r   r`  r&   r  r  r  r  r3  s           r;   extractzTarFile.extract	  sa    	 33F;;++FOTJJgtYFFFFF r=   c                    	 t          |t                    r|                     |          }n|}|}	  |||          }nZ# t          t          f$ r}|                     |           Y d }~n/d }~wt          $ r}|                     |           Y d }~nd }~ww xY w| |                     dd|j	        z             d S |
                                r>t          j        |          }t          j                            ||j                  |_        |S )Nr%   r  )r  r  ry  r   r9  _handle_fatal_errorr   r  r  r   r[  r  r   r&   r   r^  rw  )r   r`  r  r&   r3  
unfilteredr   s          r;   r  zTarFile._get_extract_tarinfo	  s2   Nfc"" 	nnV,,GGG
	+%ogt44GG% 	( 	( 	($$Q'''''''' 	+ 	+ 	+''********	+?IIa/*/ABBB4==?? 	Hi((G#%7<<g6F#G#GG s!   ? BA**B7BBc                 V   	 |                      d           	 |                     |t          j                            ||j                  ||           d S # t          $ r }|                     |           Y d }~d S d }~wt          $ r }| 	                    |           Y d }~d S d }~ww xY w)Nr   r  )
r{  _extract_memberr   r&   r   r   r   r  r   r  )r   r3  r&   r  r  r   s         r;   r  zTarFile._extract_one0	  s    3C	+  "',,tW\*J*J+4/< ! > > > > >  	( 	( 	($$Q''''''''' 	+ 	+ 	+''*********	+s#   <A 
B( A;;B(B##B(c                 R    	 | j         dk    r |                     dd|z             d S )Nr$   tarfile: %s)rK  r  r   r   s     r;   r  zTarFile._handle_nonfatal_error=	  s4    K?QIIa*+++++r=   c                 D   	 | j         dk    r t          |t                    rO|j         |                     dd|j        z             d S |                     dd|j        d|j                   d S |                     ddt          |          j        d|           d S )Nr   r$   r  z	tarfile: rv   )rK  r  r   filenamer  strerrorrr  r   r  s     r;   r  zTarFile._handle_fatal_errorD	  s    ??Q7## 	Cz!		!]QZ788888		!!QZZHIIIIIIIaaT!WW-=-=-=qqABBBBBr=   c                    	 |                      d           t          |t                    r|                     |          }n|}|                                s|j        t          vr|                     | |          S |                                s|	                                rQt          | j
        t                    rt          d          |                     |                     |                    S d S )Nr   z'cannot extract (sym)link as file object)r{  r  r  ry  rZ  rr  r  
fileobjectr[  r]  r   r   r
   extractfile_find_link_target)r   r`  r3  s      r;   r  zTarFile.extractfileP	  s    	 	Cfc"" 	nnV,,GGG==?? 	gl/AA??4111]]__ 	 	$,00 I ""KLLL ''(>(>w(G(GHHH 4r=   c                    	 |                     d          }|                    dt          j                  }t          j                            |          }|r3t          j                            |          st          j        |           |                                s|	                                r&| 
                    d|j        d|j                   n| 
                    d|j                   |                                r|                     ||           n|                                r|                     ||           n|                                r|                     ||           n|                                s|                                r|                     ||           nz|                                s|	                                r|                     ||           n;|j        t0          vr|                     ||           n|                     ||           |rY|                     |||           |	                                s0|                     ||           |                     ||           d S d S d S )NrR  r$   z -> )r  r   r   rV  r&   r_  rE  makedirsr[  r]  r  r   r^  rZ  makefiler\  makedirr0  makefifor+  r-  makedevmakelinkrr  r  makeunknownr  r  r  )r   r3  
targetpathr  r  	upperdirss         r;   r  zTarFile._extract_memberp	  sa   	  &&s++
''RV44
 GOOJ//	 	#RW^^I66 	# K	"""==?? 	'gmmoo 	'IIaw|||W5E5EFGGGGIIa&&&==?? 	/MM':....]]__ 	/LL*----^^ 		/MM':....]]__ 	/ 	/LL*----]]__ 	/ 	/MM':....\00Wj1111MM':... 	0JJw
M:::==?? 0

7J///

7J/////		0 	00 0r=   c                     	 	 |j         t          j        |           d S t          j        |d           d S # t          $ r$ t          j                            |          s Y d S w xY w)Ni  )r   r   mkdirFileExistsErrorr&   r\  r   r3  r  s      r;   r  zTarFile.makedir	  s    	
	|#$$$$$ U+++++ 	 	 	7==,,   	s   7 7 *A%$A%c           	         	 | j         }|                    |j                   | j        }t	          |d          5 }|j        i|j        D ]2\  }}|                    |           t          |||t          |           3|                    |j                   |	                                 nt          |||j        t          |           d d d            d S # 1 swxY w Y   d S )Nr>  )
r   r   r/  rL  rF  r0  ri   r   r(   truncate)r   r3  r  sourcerp   targetr  r(   s           r;   r  zTarFile.makefile	  s8   	G'((("z4(( 	NF~)$+N J JLFDKK'''iIIIIGL)))!!!!FFGL)WMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	Ns   BCCCc                 p    	 |                      ||           |                     dd|j        z             d S )Nr$   z9tarfile: Unknown file type %r, extracted as regular file.)r  r  rr  r  s      r;   r  zTarFile.makeunknown	  sT    	 	gz***		! 24;LA 	B 	B 	B 	B 	Br=   c                 x    	 t          t          d          rt          j        |           d S t          d          )Nmkfifozfifo not supported by system)r   r   r  r   r  s      r;   r  zTarFile.makefifo	  s>    	2x   	?Ij!!!!!=>>>r=   c                 \   	 t          t          d          rt          t          d          st          d          |j        }|d}|                                r|t
          j        z  }n|t
          j        z  }t          j        ||t          j	        |j
        |j                             d S )Nmknodr  z'special devices not supported by systemrT  )r   r   r   r   r-  r  S_IFBLKS_IFCHRr  r  rs  rt  )r   r3  r  r   s       r;   r  zTarFile.makedev	  s    	r7## 	J72y+A+A 	JHIII|<D==?? 	!DL DDDL D
TG,g.>??	A 	A 	A 	A 	Ar=   c                 T   	 	 |                                 rOt          j                            |          rt          j        |           t          j        |j        |           d S t          j                            |j                  rt          j	        |j        |           d S | 
                    |                     |          |           d S # t          $ rL 	 | 
                    |                     |          |           Y d S # t          $ r t          d          d w xY ww xY w)Nz%unable to resolve link inside archive)r]  r   r&   lexistsunlinksymlinkr^  rE  rw  linkr  r  symlink_exceptionrx  r   r  s      r;   r  zTarFile.makelink	  sW   		V}} 
57??:.. *Ij)))
7+Z888887>>'"677 5GG0*=====(()?)?)H)H)35 5 5 5 5  	V 	V 	VV$$T%;%;G%D%D%/1 1 1 1 1 1 V V V"#JKKQUUV		Vs*   A!C &>C &)C 
D')DD##D'c                    	 t          t          d          r*t          j                    dk    r|j        }|j        }|s~	 t
          r&|j        rt          j        |j                  d         }n# t          $ r Y nw xY w	 t          r&|j
        rt          j        |j
                  d         }n# t          $ r Y nw xY w|d}|d}	 |                                r-t          t          d          rt          j        |||           d S t          j        |||           d S # t          $ r}t!          d          |d }~ww xY wd S d S )Ngeteuidr   r%   r?   lchownzcould not change owner)r   r   r  r+   r*   r  r-   getgrnamrx  r  r,   getpwnamr]  r  r  r   r   )r   r3  r  r  gur   s          r;   r  zTarFile.chown	  s   	
 2y!! 	Dbjlla&7&7AA  
 ;w} ;L77:   D ;w} ;L77:   DyyD==?? /wr8'<'< /Ij!Q/////HZA..... D D D"#;<<!CD1	D 	D&7&7sB   -A/ /
A<;A< -B. .
B;:B;?D  D   
D?*D::D?c                     	 |j         d S 	 t          j        ||j                    d S # t          $ r}t	          d          |d }~ww xY w)Nzcould not change mode)r   r   r  r   r   )r   r3  r  r   s       r;   r  zTarFile.chmod
  sc    	<F	?HZ..... 	? 	? 	?677Q>	?s   ( 
AAAc                     	 |j         }|d S t          t          d          sd S 	 t          j        |||f           d S # t          $ r}t          d          |d }~ww xY w)Nr  z"could not change modification time)r)   r   r   r  r   r   )r   r3  r  r)   r   s        r;   r  zTarFile.utime&
  s    	=Fr7## 	F	LHZ%00000 	L 	L 	LCDD!K	Ls   > 
AAAc                 2   	 |                      d           | j        | j        }d | _        |S | j        | j                                        k    rX| j        dk    rd S | j                            | j        dz
             | j                            d          st          d          d }	 	 | j        	                    |           }n# t          $ rL}| j        r:|                     dd| j        |fz             | xj        t          z  c_        Y d }~iY d }~nYd }~wt          $ rs}| j        r:|                     dd| j        |fz             | xj        t          z  c_        Y d }~| j        dk    rt          t          |                    d Y d }~nd }~wt           $ r | j        dk    rt          d          d Y nt"          $ r2}| j        dk    rt          t          |                    d Y d }~n~d }~wt$          $ r"}t          t          |                    d d }~wt&          $ rD}	 dd l}t+          ||j                  rt          d	|           d |# t.          $ r |w xY wd }~ww xY w	 || j                            |           nd| _        |S )
Nrar   r$   rg   Tr%   z0x%X: %sz
empty filezzlib error: )r{  rP  r  r   r   r   rk   r   r3  r  r   rI  r  r  rP   r  r   r   r   	Exceptionr   r  r   r   rM  r   rN  )r   mr3  r   r   s        r;   r  zTarFile.next4
  s6   	 	D' A#DH ;$,++----{atLdkAo...<$$Q'' : 8999  	,22488!   $ IIat{A.>!>???KK9,KKHHHH     & 6 6 6$ 6IIat{A.>!>???KK9,KKHHHH[A%%#CFF++5 &%%%%# < < <;!###L11t; $#' 6 6 6;!###CFF++5 $####( 2 2 2A''T1   KKK!!TZ00  '(:q(:(:;;E"   G L((((DLs`   ,C 
I/<DI/&<F'(F(I/>	I/(G44I/HI/,.II''I**I/c                    	 |                                  }d}|3	 |                    |          }|d |         }n# t          $ r d}Y nw xY w|rt          j                            |          }t          |          D ]O}|r|j        |j        k    rd}|r%t          j                            |j                  }n|j        }||k    r|c S P|rt          |          d S )NFT)	r}  indexr3   r   r&   normpathreversedr  r   )	r   r   r3  	normalizerM  skippingr	  r`  member_names	            r;   rw  zTarFile._getmemberu
  s,   	 //## *g.. "&5&/            	*7##D))Dw'' 	 	F >V]22$H * g..v{;;$k{"" #  	&W%%%	& 	&s   ; A
	A
c                 H    	 	 |                                  }|nd| _        d S r  )r  rN  )r   r3  s     r;   r|  zTarFile._load
  s3    		iikkG	 r=   c                     	 | j         rt          d| j        j        z            | | j        |vrt          d| j        z            d S d S )Nz%s is closedzbad operation for mode %r)r   r   r4  r   r   )r   r   s     r;   r{  zTarFile._check
  sb    	 ; 	D.4>+BBCCC	 5 55	ABBB  5 5r=   c                 8   	 |                                 rOd                    t          d t          j                            |j                  |j        f                    }d }n	|j        }|}|                     ||d          }|t          d|z            |S )NrR  T)r3  r  zlinkname %r not found)
r]  r   r  r   r&   r_  r   r^  rw  rx  )r   r3  r^  limitr`  s        r;   r  zTarFile._find_link_target
  s    	 ==?? 	xxtbgoogl.K.KWM]-^ _ _``HEE 'HE5DII>2X=>>>r=   c              #   4  K   	 | j         r| j        E d {V  d S d}| j        |                                 }|dz  }|V  	 |t	          | j                  k     r| j        |         }n)| j         s |                                 }|s	d| _         d S nd S |dz  }|V  Y)Nr   r$   T)rN  rM  rP  r  r5   )r   r	  r3  s      r;   __iter__zTarFile.__iter__
  s      	< 	|#######F  'iikkGQJEMMM	s4<((((,u-\ ))++ #'DLF QJEMMM	r=   c                 X    	 || j         k    rt          |t          j                   d S d S )Nfile)rJ  r{   ry   stderr)r   levelmsgs      r;   r  zTarFile._dbg
  s7    	DJ#CJ'''''' r=   c                 .    |                                   | S r   )r{  r   s    r;   	__enter__zTarFile.__enter__
  s    r=   c                     ||                                   d S | j        s| j                                          d| _        d S r  )r   r   r   r   )r   rr  r  	tracebacks       r;   __exit__zTarFile.__exit__
  sD    <JJLLLLL # %""$$$DKKKr=   )Nr   NNNNNNr  NNNN)r   N)r   Nr   )r   NN)NNNTr  r   )r  N)r   T)TFr  )=r   r   r   rJ  rH  rI  rK  r   rY   r   r9   r:   r   r3  r-  r  r  r   r9  ru  r   rU  rk  ro  rs  rV  r   ry  r}  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rw  r|  r{  r  r  r  r  r  r   r=   r;   r   r   m  s        EK L J FHFGJAEHL>B)-b b b b^ #tZ [/ [/ [/ [[/z 2 2 2 [2    [@    [6    [: 	 I% % %*	 	 	  ? ? ?a a a aF$D $ $ $ $ $L1" 1" 1" 1" 1" 1"f% % % %2G G G$+/%+/ +/ +/ +/ +/ZGG G G G G&  .+ + +, , ,
C 
C 
C  @ >B&+*0 *0 *0 *0b  N N N B B B? ? ?A A A$V V V2D D DB? ? ?L L L< < <B&& && && &&P  C C C C  &  >( ( (      r=   r   c                    	 	 t          | d          r:|                                 }t          |           }|                     |           nt          |           }|                                 dS # t
          $ r Y dS w xY w)Nrk   )r   TF)r   r   r   r   r   r   )r   r   r   s      r;   r   r   
  s    

4   	))++CT"""AIIcNNNNT

A				t   uus   A-A2 2
B ?B c            	      z	   dd l } d}|                     |          }|                    ddddd	           |                    d
dt          d           |                    d          }|                    dddd           |                    ddddd           |                    ddddd           |                    dd dd!           |                                }|j        r|j        |                    d"d#           |j	        |j	        }t          |          rt          |d$          5 }|                                 t          |                                t          j        %           d d d            n# 1 swxY w Y   |j        r$t          d&                    |                     d S d S |                    d"d'                    |                     d S |j        |j        }t          |          rQt&                              |d(          5 }|                    |j        )           d d d            d S # 1 swxY w Y   d S |                    d"d'                    |                     d S |j        Rt)          |j                  d"k    r|j        d         }t*          j        }nKt)          |j                  d*k    r|j        \  }}n(|                    d"|                                           t          |          rt&                              |d(          5 }|                    ||j        +           d d d            n# 1 swxY w Y   |j        rC|d,k    rd-                    |          }	nd.                    ||          }	t          |	           d S d S |                    d"d'                    |                     d S |j        |j                            d          }
t*          j                            |
          \  }}d/d/d0d0d1d1d1d1d2}||v rd3||         z   nd4}|j        }t&                              |
|          5 }|D ]}|                    |           	 d d d            n# 1 swxY w Y   |j        r&t          d5                    |
                     d S d S d S )6Nr   z3A simple command-line interface for tarfile module.)descriptionz-vz	--verbose
store_trueFzVerbose output)actiondefaulthelpz--filterz<filtername>zFilter for extraction)metavarchoicesr'  T)requiredz-lz--list	<tarfile>zShow listing of a tarfile)r(  r'  z-ez	--extract+)r+  z<output_dir>zExtract tarfile into target dir)nargsr(  r'  z-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr$   z&--filter is only valid for extraction
r   r  z{!r} is a tar archive.z{!r} is not a tar archive.
rS  )r  r%   )r&   r  r  z{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r   r   r   )r   z.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:r   z{!r} file created.)argparseArgumentParseradd_argumentr  add_mutually_exclusive_group
parse_argsr  r  exittestr   r   r}  r{   ry   r  r  rY   r
  r   r5   r   curdirformat_helpr  createpopr&   splitextr  )r.  r#  parserr  argsrm   r   tfr5  r  tar_namer  extcompressionstar_mode	tar_files	file_names                    r;   mainrC    s$   OOOGK$$$==F
k,-  / / /

N .4  6 6 6 ///>>E	tX{7  9 9 9	t[<=  ? ? ? 
tZs39  ; ; ; 
tX{8  : : : D{ Bt|+A@AAAyic?? 	Gc3 93   cnn&&SZ88889 9 9 9 9 9 9 9 9 9 9 9 9 9 9 | <.55c::;;;;;< < KK9@@EEFFFFF		ic?? 	Gc5)) .R---. . . . . . . . . . . . . . . . . . KK9@@EEFFFFF		!t|!!,q/CYFF!##,KCKK6--//000c?? 	Gc5)) ?R6$+>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| S==3::3??CC2396#v3F3F c




  KK9@@EEFFFFF		 ;??1%%!!(++3 
 
 03l/B/B4,s+++K	\\(H-- 	"& " "	y!!!!"	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" < 	9&--h77888881 
!	 .	9 	9sI   6AFFFIII/MMMRR
R__main__r   )lversion
__author____credits__builtinsr   rF  ry   r   r  rh   r  r   r`   r  rewarningsr  r   r  AttributeErrorNotImplementedErrorr  r   	NameError__all__r6   r  ru  r  r  r  r  r  ry  r  r)  r'  r  r  r  r/  CONTTYPEr  r  r  r  r  r  r   r   r   r   r  r!  r  r  r  r  rN   r  r   r   getfilesystemencodingr<   rC   rS   r[   re   ri   r|   r  r   r   r   r	   r
   r   r   r   r   rP   r   r   r   objectr   r
  BufferedReaderr-  r9  r;  r@  rI  rL  rO  re  rg  rl  rn  r  r  compiler  r   r   r   rC  r   r   r=   r;   <module>rT     s  : 6
H
 ' & & & & & 



 				 				      				 JJJJ   
CCCJJJJ   
CCC $%89 	 '# 	 	 	D	% % % 	^
	





  



 HgGXWg#%5!	# (>+ /	.
 988
    7d??HH(s(**H0 0 0& & &  ( N    <* * * "&$    2  	 	 	 	 	y 	 	 		 	 	 	 	8 	 	 		 	 	 	 	 	 	 		 	 	 	 	x 	 	 		 	 	 	 	( 	 	 		 	 	 	 	( 	 	 		 	 	 	 	{ 	 	 		 	 	 	 	; 	 	 		 	 	 	 	[ 	 	 		 	 	 	 	 	 	 		 	 	 	 	K 	 	 	       0p p p p p p p pf    6   <e e e e e& e e eP" " " " "2$ " " "	 	 	 	 	( 	 	 	J J J J J J J J
? ? ? ? ?k ? ? ?@ @ @ @ @{ @ @ @
L L L L L L L L
? ? ? ? ?+ ? ? ?= = = =~       *  	 &2:&899 Z9 Z9 Z9 Z9 Z9f Z9 Z9 Z9zG G G G Gf G G GZ$  $ |]9 ]9 ]9~ zDFFFFF s3   < AA
A AA!A( (A0/A0