o
     JAf&                     @   sD  	 g d Z ddlZddlmZmZmZ dZdZdZdd e	d	D Z
e
dd Ze
dd Zd
ed ed D ]Zeeee< q:deed< dD ]Zeeee< qKdd Zdd Zdd Zdd Zd*ddZdd Zdd Zd+ddZedd Zd D ]Zeeee< q~d!efd"d#Zefd$d%ZeZeZd&d' Zd(d) ZdS ),)
body_decodebody_encodebody_lengthdecodedecodestringheader_decodeheader_encodeheader_lengthquoteunquote    N)ascii_lettersdigits	hexdigits

 c                 C   s   g | ]}d | qS )z=%02X ).0cr   r   '/usr/lib/python3.10/email/quoprimime.py
<listcomp>7   s    r      s   -!*+/ascii_ s_    !"#$%&'()*+,-./0123456789:;<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	c                 C      	 t | t|  kS N)chr_QUOPRI_HEADER_MAPoctetr   r   r   header_checkJ      r!   c                 C   r   r   )r   _QUOPRI_BODY_MAPr   r   r   r   
body_checkO   r"   r$   c                 C      	 t dd | D S )Nc                 s       | ]	}t t| V  qd S r   )lenr   r   r    r   r   r   	<genexpr>^       z header_length.<locals>.<genexpr>sum	bytearrayr   r   r   r   T   s   	r   c                 C   r%   )Nc                 s   r&   r   )r'   r#   r(   r   r   r   r)   h   r*   zbody_length.<locals>.<genexpr>r+   r-   r   r   r   r   a   s   r   c                 C   sj   t |ts	t|}| s| |  d S t| d t| |kr,| d  || 7  < d S | |  d S )N)
isinstancestrr   appendlstripr'   )Lsmaxlenextrar   r   r   _max_appendk   s   
r8   c                 C   s   	 t t| dd dS )N         )r   intr5   r   r   r   r
   v   s   r
   c                 C   s   t t|  S r   )_QUOPRI_MAPord)r   r   r   r   r	   {   s   r	   
iso-8859-1c                 C   s&   	 | sdS |  dt}d||f S )Nr   latin1z=?%s?q?%s?=)r   	translater   )Zheader_bytescharsetencodedr   r   r   r      s
   r   s   
L   c                 C   s  	 |dk r	t d| s| S | t} d| }|d }g }|j}|  D ]}d}t|d | }	||	krs|| }
||
d  dkrN||||
d   |
d }n!||
d  dkrc||||
  |
d }n||||
 d  |
}||	ks3|r|d dv r||	 }|d	krt|d }n|dkr|d | }n|t|d  }|||d |  q#|||d   q#| d tv r|d
 ||S )N   zmaxlinelen must be at least 4=r9   r      r/   z 	r:   r   )	
ValueErrorrB   _QUOPRI_BODY_ENCODE_MAPr2   
splitlinesr'   r	   CRLFjoin)bodyZ
maxlineleneolZ
soft_breakZmaxlinelen1Zencoded_bodyr2   linestartZ	laststartstopZroomqr   r   r   r      sH   



r   c                 C   s  	 | s| S d}|   D ]n}| }|s||7 }qd}t|}||k ry|| }|dkr3||7 }|d7 }n:|d |kr>|d7 }q|d |k re||d  tv re||d  tv re|t|||d  7 }|d7 }n||7 }|d7 }||kru||7 }||k s"q| d dvr||r|d d }|S )	Nr   r   rG   r9   rH   r:   r/   r   )rK   rstripr'   r   r
   endswith)rD   rO   ZdecodedrP   inr   r   r   r   r      s>   
,
r   c                 C   s   	 |  d}t|S )Nr   )groupr
   )matchr5   r   r   r   _unquote_match  s   
rZ   c                 C   s"   	 |  dd} tjdt| tjdS )Nr   r   z=[a-fA-F0-9]{2})flags)replaceresubrZ   ASCIIr=   r   r   r   r   #  s   r   )r   )r@   ) __all__r]   stringr   r   r   rL   NLZEMPTYSTRINGranger>   r   r#   encoder   r   r?   r!   r$   r   r   r8   r
   r	   r   rJ   r   r   r   r   rZ   r   r   r   r   r   <module>   s@   


O0