U e5dT�@s�dZddddgZdZdZdZdZzd d lmZmZWne k rPd Zd ZYnXd d �Z dd�Z ddd�Z ddd�Z ddd�Zddd�Zdd�Zdd�Zdd�Zedkr�e�d S) zHConversions to/from quoted-printable transport encoding as per RFC 1521.�encode�decode� encodestring� decodestring�=�Ls0123456789ABCDEF��)�a2b_qp�b2a_qpNcCsHt|t�st�|dkr|S|dkr&|S|tkpFd|ko@dkn S)z�Decide whether a particular byte ordinal needs to be quoted. The 'quotetabs' flag indicates whether embedded tabs and spaces should be quoted. Note that line-ending tabs and spaces are always encoded, as per RFC 1521. � �_� �~)� isinstance�bytes�AssertionError�ESCAPE)�c� quotetabs�header�r�/usr/lib64/python3.8/quopri.py� needsquotings rcCsBt|t�rt|�dkst�t|�}ttt|dt|df�S)zQuote a single character.��)rr�lenr�ordr�HEX�rrrr�quote$srFc Cs2tdk r,|��}t|||d�}|�|�dS|dfdd�}d}|��}|sN�qg} d} |dd�dkrv|dd�}d} |D]D} t| f�} t| ||�r�t| �} |r�| dkr�| �d �qz| �| �qz|dk r�||�t� | �} t | �t k�r|| dt d �d d �| t d d�} q�| }q>|dk �r.||| d �dS) avRead 'input', apply quoted-printable encoding, and write to 'output'. 'input' and 'output' are binary file objects. The 'quotetabs' flag indicates whether embedded tabs and spaces should be quoted. Note that line-ending tabs and spaces are always encoded, as per RFC 1521. The 'header' flag indicates whether we are encoding spaces as _ as per RFC 1522.N�rr� cSsj|r<|dd�dkr<|�|dd�t|dd��|�n*|dkrX|�t|�|�n|�||�dS)N�����r �.)�writer)�s�output�lineEndrrrr$;s (zencode..writerr"r r rs= )r') r �readr$�readlinerrr�append� EMPTYSTRING�joinr� MAXLINESIZE) �inputr&rr�data�odatar$Zprevline�lineZoutline�strippedrZthislinerrrr,s>           cCsFtdk rt|||d�Sddlm}||�}|�}t||||�|��S)Nr r��BytesIO)r �ior4r�getvalue)r%rrr4�infp�outfprrrrjs c Cs�tdk r*|��}t||d�}|�|�dSd}|��}|s>�q�dt|�}}|dkr�||d|�dkr�d} |d}|dkr�||d|�dkr�|d}qtnd} ||k�r�|||d�} | dkr�|r�|d }|d}q�| tkr�|| }|d}q�|d|k�r| �sd} �q�q�|d|k�rJ||d|d �tk�rJ|t}|d }q�|d |k�r�t||d|d ���r�t||d |d ���r�|tt||d|d ��f�}|d }q�|| }|d}q�| s.|�|d�d}q.|�r�|�|�dS) z�Read 'input', apply quoted-printable decoding, and write to 'output'. 'input' and 'output' are binary file objects. If 'header' is true, decode underscore as space (per RFC 1522).N�rrrrr!s r r ��) r r(r$r)rr�ishexr�unhex) r.r&rr/r0�newr1�i�n�partialrrrrrusP       ( B"  cCsDtdk rt||d�Sddlm}||�}|�}t|||d�|��S)Nr9rr3)r r5r4rr6)r%rr4r7r8rrrr�s  cCsVt|t�st�d|ko dknpTd|ko8dknpTd|koPdkSS)zDReturn true if the byte ordinal 'c' is a hexadecimal digit in ASCII.�0�9�a�f�A�F)rrrrrrrr<�sr<cCs�d}|D]�}t|f�}d|kr*dkr8nn td�}n`d|krLdkr^nntd�d}n:d |krrd kr�nntd �d}nd s�td t|���|d t|�|}q|S)z.Get the integer value of a hexadecimal number.rrBrC�0rDrE�a� rFrGFznon-hex digit r)rrr�repr)r%�bitsrr?rrrr=�s  r=c Cs�ddl}ddl}z|�|jdd�d�\}}WnV|jk r�}z6|j|_t|�td�td�td�|�d�W5d}~XYnXd}d}|D] \}}|dkr�d}|d kr�d}q�|r�|r�|j|_td �|�d�|s�d g}d} |D]�} | d kr�|jj } nTzt | d �} WnDt k �rP}z$|j� d | |f�d} WY�q�W5d}~XYnXz*|�rjt| |jj �nt| |jj |�W5| d k�r�| � �Xq�| �r�|�| �dS)NrrZtdz"usage: quopri [-t | -d] [file] ...z-t: quote tabsz-d: decode; default encoder:z-tz-dz -t and -d are mutually exclusive�-�rbz%s: can't open (%s) )�sys�getopt�argv�error�stderr�stdout�print�exit�stdin�buffer�open�OSErrorr$�closerr) rOrPZopts�args�msgZdecoZtabs�orI�sts�file�fprrr�main�sT     rb�__main__)F)FF)F)F)�__doc__�__all__rr-rr+Zbinasciir r � ImportErrorrrrrrrr<r=rb�__name__rrrr�s*   > + .