
    Rh                         d Z ddlZddlZddlZddlZ ej
                  ed       g dZ G d de      Z	ddd	d
Z
ddZd Zedk(  r e        yy)zImplementation of the UUencode and UUdecode functions.

encode(in_file, out_file [,name, mode], *, backtick=False)
decode(in_file [, out_file, mode, quiet])
    N)      )remove)Errorencodedecodec                       e Zd Zy)r   N)__name__
__module____qualname__     /usr/lib/python3.12/uu.pyr   r   *   s    r   r   Fbacktickc                   g }	 | dk(  rt         j                  j                  } npt        | t              r`|t
        j                  j                  |       }| 	 t        j                  |       j                  }t        | d      } |j                  |        |dk(  rt         j                  j                  }n-t        |t              rt        |d      }|j                  |       |d}|d}|j                  dd      }|j                  dd	      }|j                  d
|dz  |fz  j!                  d             | j#                  d      }t%        |      dkD  rF|j                  t'        j(                  ||             | j#                  d      }t%        |      dkD  rF|r|j                  d       n|j                  d       |D ]  }|j+                           y# t        $ r Y lw xY w# |D ]  }|j+                           w xY w)zUuencode file-Nrbwbi  
z\nz\rzbegin %o %s
i  ascii-   r   r   s   `
end
s    
end
)sysstdinbuffer
isinstancestrospathbasenamestatst_modeAttributeErroropenappendstdoutreplacewriter   readlenbinasciib2a_uuclose)in_fileout_filenamemoder   opened_filesdatafs           r   r   r   -   s   
 L1c>ii&&G%|ww''0|777+33D 7D)G( s?zz((H#&Hd+H) <D<D
 ||D'||D'
 	D5L4*@@HHQR||B$i!mNN8??4(CD<<#D $i!m NN;'NN;' 	AGGI	O & N  	AGGI	s7   AG' G 7D"G' %G' 	G$ G' #G$$G' 'H c                    g }| dk(  rt         j                  j                  } n-t        | t              rt        | d      } |j                  |        	 	 | j                         }|st        d      |j                  d      s0|j                  dd      }t        |      dk(  r|d   dk(  r	 t        |d	   d
       ni||d   j                  d      j                  d      }t         j"                  j%                  |      rt        d|       |j                  t         j&                        sYdt         j&                   |v sDt         j(                  rC|j                  t         j(                        sdt         j(                   |v rt        d| d      |t        |d	   d
      }|dk(  rt         j*                  j                  }nEt        |t              r5t        |d      }t!        j,                  ||       |}|j                  |       | j                         }|rb|j/                  d      dk7  rN	 t1        j2                  |      }	|j7                  |	       | j                         }|r|j/                  d      dk7  rN|st        d      	 |D ]  }|j9                           y# t        $ r Y w xY w# t0        j                  $ rZ}
|d   dz
  dz  dz  dz   dz  }t1        j2                  |d|       }	|s"t         j4                  j7                  d|
z         Y d}
~
d}
~
ww xY w# |D ]  }|j9                           w xY w)zDecode uuencoded filer   r   z'No valid begin line found in input files   begin       r   r         Ns    	
r   z Cannot overwrite existing file: z..zRefusing to write to z due to directory traversalr   s   end    ?         zWarning: %s
zTruncated input file)r   r   r   r   r   r%   r&   readliner   
startswithsplitr+   int
ValueErrorrstripr   r   r    existssepaltsepr'   chmodstripr,   a2b_uustderrr)   r.   )r/   r0   r2   quietr3   hdr	hdrfieldsfpsr4   vnbytesr5   s                r   r   r   g   s   
 L#~))""	GS	!w%G$< ""$CEFF>>(+		$*I9~"y|x'?	!a(   |**<8??HHww~~h'>xjIJJ##BFF+RVVH)II((3"))%13H:=XYZZ<y|Q'D s?zz((H#&h%BHHXt$H) AGGL)V3:q) NN4   "A AGGL)V3 .//   	AGGI	Y " B >> :aDGr>Q.2q8q&z2JJ$$_q%89:  	AGGI	sc   AL$ *J$ 9E7L$ 1J4 7L$ >L$ $	J1-L$ 0J11L$ 4L!ALL$ L!!L$ $L=c                     ddl } | j                  d      }|j                  ddddd	d
       |j                  ddddd	d
       |j                         \  }}t	        |      dkD  r&|j                  d       t        j                  d       t        j                  j                  }t        j                  j                  }t	        |      dkD  r|d   }t	        |      dkD  r|d   }|j                  rh|j                  rOt        |t              rt        |d      }n2t!        t        j"                  d   d       t        j                  d       t        ||       y|j                  rOt        |t              rt        |d      }n2t!        t        j"                  d   d       t        j                  d       t%        ||       y)zuuencode/uudecode main programr   Nz'usage: %prog [-d] [-t] [input [output]])usagez-dz--decoder   zDecode (instead of encode)?F
store_true)desthelpdefaultactionz-tz--texttextz2data is text, encoded format unix-compatible text?r8   zincorrect number of argumentsr9   r   z: cannot do -t to stdoutr   z: cannot do -t from stdin)optparseOptionParser
add_option
parse_argsr+   errorr   exitr   r   r'   r   rZ   r   r   r%   printargvr   )r[   parseroptionsargsinputoutputs         r   testrh      sl    "")R"SF
dJX<Ychq}~
dH68lv{  EQ  R'')OWd
4y1}45 IIEZZF
4y1}Q
4y1}a~~<<&#&fd+chhqk#=>uf<<%%UD)chhqk#>?ufr   __main__)NN)NNF)__doc__r,   r   r   warnings_deprecatedr
   __all__	Exceptionr   r   r   rh   r   r   r   <module>ro      si   6  	 
    Xg .
'	I 	7 7tHT$L zF r   