Sh3ll
OdayForums


Server : LiteSpeed
System : Linux premium84.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
User : claqxcrl ( 523)
PHP Version : 8.1.32
Disable Function : NONE
Directory :  /opt/alt/python310/lib64/python3.10/email/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //opt/alt/python310/lib64/python3.10/email/__pycache__/_header_value_parser.cpython-310.opt-2.pyc
o

S�g���	@s�	ddlZddlZddlZddlmZddlmZddlmZ	ddlm
Z
ddlmZed�Z
e
ed�BZed	�Zee
BZeed
�Zeed�Zeed�Bed
�Zee
BZeed
�BZee
BZeed�ZddhZeeBZdd�Zdd�Ze�dejejB�ZGdd�de �Z!Gdd�de!�Z"Gdd�de!�Z#Gdd�de!�Z$Gdd�de!�Z%Gd d!�d!e"�Z&Gd"d#�d#e!�Z'Gd$d%�d%e!�Z(Gd&d'�d'e!�Z)Gd(d)�d)e!�Z*Gd*d+�d+e*�Z+Gd,d-�d-e"�Z,Gd.d/�d/e!�Z-Gd0d1�d1e!�Z.Gd2d3�d3e!�Z/Gd4d5�d5e!�Z0Gd6d7�d7e!�Z1Gd8d9�d9e!�Z2Gd:d;�d;e!�Z3Gd<d=�d=e!�Z4Gd>d?�d?e!�Z5Gd@dA�dAe!�Z6GdBdC�dCe!�Z7GdDdE�dEe!�Z8GdFdG�dGe!�Z9GdHdI�dIe!�Z:GdJdK�dKe!�Z;GdLdM�dMe!�Z<GdNdO�dOe$�Z=GdPdQ�dQe!�Z>GdRdS�dSe!�Z?GdTdU�dUe!�Z@GdVdW�dWe!�ZAGdXdY�dYeA�ZBGdZd[�d[e!�ZCGd\d]�d]e!�ZDGd^d_�d_e!�ZEGd`da�dae!�ZFGdbdc�dce!�ZGGddde�deeG�ZHGdfdg�dgeG�ZIGdhdi�die!�ZJGdjdk�dke!�ZKGdldm�dme!�ZLGdndo�doeL�ZMGdpdq�dqeM�ZNGdrds�dse!�ZOGdtdu�dueP�ZQGdvdw�dweQ�ZRGdxdy�dyeQ�ZSGdzd{�d{eR�ZTGd|d}�d}e
jU�ZVeSd
d~�ZWeSdd��ZXeSd�d��ZYe�d��Zd��[e
���j\Z]e�d��Ze�^d��[e����j_Z`e�d��jaZbe�d��Ze�^d��[e����j_Zce�d��Ze�^d��[e����j_Zde�d��Ze�^d��[e����j_Zed�d��Zfd�d��Zgd�d��Zhd�d�d��Zid�d��Zjd�d��Zkd�d��Zld�d��Zmd�d��Znd�d��Zod�d��Zpd�d��Zqd�d��Zrd�d��Zsd�d��Ztd�d��Zud�d��Zvd�d��Zwd�d��Zxd�d��Zyd�d��Zzd�d��Z{d�d��Z|d�d��Z}d�d��Z~d�d��Zd�d��Z�d�d��Z�d�d��Z�d�dÄZ�d�dńZ�d�dDŽZ�d�dɄZ�d�d˄Z�d�d̈́Z�d�dτZ�d�dфZ�d�dӄZ�d�dՄZ�d�dׄZ�d�dلZ�d�dۄZ�d�d݄Z�d�d߄Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�dS)��N)�	hexdigits)�
itemgetter)�_encoded_words)�errors)�utilsz 	�(z
()<>@,:;.\"[]�.z."(z/?=z*'%�%�
�
cCs	t|��dd��dd�S)N�\�\\�"z\")�str�replace��value�r�A/opt/alt/python310/lib64/python3.10/email/_header_value_parser.py�make_quoted_pairscsrcCst|�}d|�d�S)Nr)r)rZescapedrrr�quote_stringhsrz�
   =\?            # literal =?
   [^?]*          # charset
   \?             # literal ?
   [qQbB]         # literal 'q' or 'b', case insensitive
   \?             # literal ?
  .*?             # encoded word
  \?=             # literal ?=
cs�eZdZdZdZdZ�fdd�Zdd�Z�fdd�Ze	d	d
��Z
e	dd��Zd
d�Ze	dd��Z
e	dd��Zdd�Zddd�Zddd�Zddd�Z�ZS)�	TokenListNTcst�j|i|��g|_dS�N)�super�__init__�defects)�self�args�kw��	__class__rrr�s
zTokenList.__init__cC�d�dd�|D��S)N�cs��|]}t|�VqdSr�r��.0�xrrr�	<genexpr>���z$TokenList.__str__.<locals>.<genexpr>��join�rrrr�__str__��zTokenList.__str__c�d�|jjt����S�Nz{}({})��formatr �__name__r�__repr__r,rrrr4�s
�zTokenList.__repr__cCr!)Nr"css�|]	}|jr|jVqdSrrr%rrrr(�s�z"TokenList.value.<locals>.<genexpr>r*r,rrrr��zTokenList.valuecCstdd�|D�|j�S)Ncs��|]}|jVqdSr)�all_defectsr%rrrr(���z(TokenList.all_defects.<locals>.<genexpr>)�sumrr,rrrr7�szTokenList.all_defectscCs|d��S�Nr)�startswith_fwsr,rrrr;��zTokenList.startswith_fwscCs	tdd�|D��S)Ncsr6r)�
as_ew_allowed)r&�partrrrr(�r8z*TokenList.as_ew_allowed.<locals>.<genexpr>)�allr,rrrr=�szTokenList.as_ew_allowedcCsg}|D]}|�|j�q|Sr)�extend�comments)rrA�tokenrrrrA�szTokenList.commentscCst||d�S)N��policy)�_refold_parse_tree�rrDrrr�fold�r<zTokenList.foldr"cCst|j|d��dS)N��indent)�print�ppstr�rrIrrr�pprint�r.zTokenList.pprintcCsd�|j|d��S)Nr
rH)r+�_pprLrrrrK�szTokenList.ppstrccs|�d�||jj|j�V|D]}t|d�s|d�|�Vq|�|d�EdHq|jr3d�|j�}nd}d�||�VdS)Nz{}{}/{}(rNz*    !! invalid element in token list: {!r}z    z Defects: {}r"z{}){})r2r r3�
token_type�hasattrrNr)rrIrBZextrarrrrN�s ��
�z
TokenList._pp�r")r3�
__module__�__qualname__rO�syntactic_break�ew_combine_allowedrr-r4�propertyrr7r;r=rArGrMrKrN�
__classcell__rrrrr}s(





rc@s$eZdZedd��Zedd��ZdS)�WhiteSpaceTokenListcC�dS�N� rr,rrrr��zWhiteSpaceTokenList.valuecC�dd�|D�S)NcS�g|]
}|jdkr|j�qS)�comment)rO�contentr%rrr�
<listcomp>��z0WhiteSpaceTokenList.comments.<locals>.<listcomp>rr,rrrrA��zWhiteSpaceTokenList.commentsN)r3rRrSrVrrArrrrrX�s

rXc@�eZdZdZdS)�UnstructuredTokenList�unstructuredN�r3rRrSrOrrrrre��rec@rd)�Phrase�phraseNrgrrrrri�rhric@rd)�WordZwordNrgrrrrrk�rhrkc@rd)�CFWSList�cfwsNrgrrrrrl�rhrlc@rd)�Atom�atomNrgrrrrrn�rhrnc@�eZdZdZdZdS)�TokenrBFN)r3rRrSrOZencode_as_ewrrrrrq��rqc@seZdZdZdZdZdZdS)�EncodedWord�encoded-wordN)r3rRrSrO�cte�charset�langrrrrrs��
rsc@�4eZdZdZedd��Zedd��Zedd��ZdS)	�QuotedString�
quoted-stringcC�"|D]}|jdkr|jSqdS�N�bare-quoted-string�rOr�rr'rrrr`��


��zQuotedString.contentcCs>g}|D]}|jdkr|�t|��q|�|j�qd�|�S)Nr~r")rO�appendrrr+)r�resr'rrr�quoted_value�s

zQuotedString.quoted_valuecCr|r}r�rrBrrr�stripped_value�r�zQuotedString.stripped_valueN)r3rRrSrOrVr`r�r�rrrrrz�s

	rzc@s$eZdZdZdd�Zedd��ZdS)�BareQuotedStringr~cCstd�dd�|D���S)Nr"csr#rr$r%rrrr(
r)z+BareQuotedString.__str__.<locals>.<genexpr>)rr+r,rrrr-	szBareQuotedString.__str__cCr!)Nr"csr#rr$r%rrrr(r)z)BareQuotedString.value.<locals>.<genexpr>r*r,rrrrr5zBareQuotedString.valueN)r3rRrSrOr-rVrrrrrr�s
r�c@s8eZdZdZdd�Zdd�Zedd��Zedd	��Zd
S)�Commentr_cs(d�tdg�fdd��D�dggg��S)Nr"rcsg|]}��|��qSr)�quoter%r,rrrasz#Comment.__str__.<locals>.<listcomp>�))r+r9r,rr,rr-s��zComment.__str__cCs2|jdkr	t|�St|��dd��dd��dd�S)Nr_rr
rz\(r�z\))rOrr)rrrrrr�s
���z
Comment.quotecCr!)Nr"csr#rr$r%rrrr(%r)z"Comment.content.<locals>.<genexpr>r*r,rrrr`#r5zComment.contentcCs|jgSr)r`r,rrrrA'szComment.commentsN)	r3rRrSrOr-r�rVr`rArrrrr�s
r�c@ry)	�AddressListzaddress-listcCr])NcS�g|]	}|jdkr|�qS)�address�rOr%rrrra1�z)AddressList.addresses.<locals>.<listcomp>rr,rrr�	addresses/rczAddressList.addressescC�tdd�|D�g�S)Ncs� �|]}|jdkr|jVqdS�r�N�rO�	mailboxesr%rrrr(5����z(AddressList.mailboxes.<locals>.<genexpr>�r9r,rrrr�3�
��zAddressList.mailboxescCr�)Ncsr�r��rO�
all_mailboxesr%rrrr(:r�z,AddressList.all_mailboxes.<locals>.<genexpr>r�r,rrrr�8r�zAddressList.all_mailboxesN)r3rRrSrOrVr�r�r�rrrrr�+s

r�c@ry)	�Addressr�cC�|djdkr|djSdS)Nr�group�rO�display_namer,rrrr�B�
�zAddress.display_namecCs4|djdkr|dgS|djdkrgS|djS�Nr�mailbox�invalid-mailboxr�r,rrrr�Gs


zAddress.mailboxescCs:|djdkr|dgS|djdkr|dgS|djSr�r�r,rrrr�Os



zAddress.all_mailboxesN)r3rRrSrOrVr�r�r�rrrrr�>s

r�c@�(eZdZdZedd��Zedd��ZdS)�MailboxList�mailbox-listcCr])NcSr�)r�r�r%rrrra]r�z)MailboxList.mailboxes.<locals>.<listcomp>rr,rrrr�[rczMailboxList.mailboxescCr])NcSsg|]	}|jdvr|�qS))r�r�r�r%rrrraas
�z-MailboxList.all_mailboxes.<locals>.<listcomp>rr,rrrr�_rczMailboxList.all_mailboxesN�r3rRrSrOrVr�r�rrrrr�Ws
r�c@r�)�	GroupList�
group-listcC� |r	|djdkrgS|djS�Nrr�r�r,rrrr�i�
zGroupList.mailboxescCr�r�r�r,rrrr�or�zGroupList.all_mailboxesNr�rrrrr�es
r�c@ry)	�Groupr�cC�|djdkr	gS|djS�N�r�r�r,rrrr�z�
zGroup.mailboxescCr�r�r�r,rrrr��r�zGroup.all_mailboxescC�
|djSr:)r�r,rrrr���
zGroup.display_nameN)r3rRrSrOrVr�r�r�rrrrr�vs

r�c@�LeZdZdZedd��Zedd��Zedd��Zedd	��Zed
d��Z	dS)
�NameAddr�	name-addrcCst|�dkrdS|djS�N�r)�lenr�r,rrrr���
zNameAddr.display_namecCr��N�����
local_partr,rrrr��r�zNameAddr.local_partcCr�r���domainr,rrrr��r�zNameAddr.domaincCr�r�)�router,rrrr��r�zNameAddr.routecCr�r���	addr_specr,rrrr��r�zNameAddr.addr_specN�
r3rRrSrOrVr�r�r�r�r�rrrrr��s



r�c@s@eZdZdZedd��Zedd��Zedd��Zedd	��Zd
S)�	AngleAddrz
angle-addrcCr|�N�	addr-spec)rOr�r�rrrr��r�zAngleAddr.local_partcCr|r��rOr�r�rrrr��r�zAngleAddr.domaincCr|)N�	obs-route)rO�domainsr�rrrr��r�zAngleAddr.routecCs<|D]}|jdkr|jr|jSt|j�|jSqdS)Nr�z<>)rOr�r�rr�rrrr��s

�zAngleAddr.addr_specN)	r3rRrSrOrVr�r�r�r�rrrrr��s


r�c@�eZdZdZedd��ZdS)�ObsRouter�cCr])NcSr^r�r�r%rrrra�rbz$ObsRoute.domains.<locals>.<listcomp>rr,rrrr��rczObsRoute.domainsN)r3rRrSrOrVr�rrrrr���r�c@r�)
�Mailboxr�cCr��Nrr�r�r,rrrr��r�zMailbox.display_namecCr�r:r�r,rrrr��r�zMailbox.local_partcCr�r:r�r,rrrr��r�zMailbox.domaincCr�r�)rOr�r,rrrr��r�z
Mailbox.routecCr�r:r�r,rrrr��r�zMailbox.addr_specNr�rrrrr��s



r�c@s,eZdZdZedd��ZeZZZZ	dS)�InvalidMailboxr�cC�dSrrr,rrrr��r\zInvalidMailbox.display_nameNr�rrrrr��s

r�cs(eZdZdZdZe�fdd��Z�ZS)�Domainr�Fc�d�t�j���S�Nr"�r+rr�splitr,rrrr���z
Domain.domain)r3rRrSrOr=rVr�rWrrrrr��s
r�c@rd)�DotAtom�dot-atomNrgrrrrr�rhr�c@rp)�DotAtomTextz
dot-atom-textTN�r3rRrSrOr=rrrrr�rrr�c@rp)�
NoFoldLiteralzno-fold-literalFNr�rrrrr�
rrr�c@sDeZdZdZdZedd��Zedd��Zedd��Zed	d
��Z	dS)�AddrSpecr�FcCr�r:r�r,rrrr�r�zAddrSpec.local_partcCst|�dkrdS|djS)N�r�)r�r�r,rrrr�r�zAddrSpec.domaincCs<t|�dkr|djS|dj��|dj|dj��S)Nr�rr�r�)r�r�rstrip�lstripr,rrrrs
&zAddrSpec.valuecCsLt|j�}t|�t|t�krt|j�}n|j}|jdur$|d|jS|S)N�@)�setr�r��
DOT_ATOM_ENDSrr�)rZnamesetZlprrrr�$s

zAddrSpec.addr_specN)
r3rRrSrOr=rVr�r�rr�rrrrr�s


r�c@rp)�ObsLocalPartzobs-local-partFNr�rrrrr�0�r�cs4eZdZdZdZedd��Ze�fdd��Z�ZS)�DisplayNamezdisplay-nameFcCs�t|�}t|�dkr
|jS|djdkr|�d�n|ddjdkr/t|ddd��|d<|djdkr=|��|jS|ddjdkrRt|ddd��|d<|jS)Nrrmr�r�)rr�rrO�pop)rr�rrrr�;s�zDisplayName.display_namecs�d}|jrd}n|D]	}|jdkrd}q
t|�dkrM|rMd}}|djdks0|ddjdkr2d}|djdksB|ddjdkrDd}|t|j�|St�jS)	NFTr{rr"rmr[r�)rrOr�rr�rr)rr�r'ZpreZpostrrrrLs
�  zDisplayName.value)	r3rRrSrOrUrVr�rrWrrrrr�6s
r�c@s,eZdZdZdZedd��Zedd��ZdS)�	LocalPartz
local-partFcCs"|djdkr|djS|djS)Nrr{)rOr�rr,rrrres

zLocalPart.valuecCs�tg}t}d}|dtgD]J}|jdkrq|r.|jdkr.|djdkr.t|dd��|d<t|t�}|rM|jdkrM|djdkrM|�t|dd���n|�|�|d}|}qt|dd��}|jS)NFrrm�dotr�r�)�DOTrOr�
isinstancer�r)rr�ZlastZ
last_is_tl�tokZis_tlrrrr�ls$


zLocalPart.local_partN)r3rRrSrOr=rVrr�rrrrr�`s
r�cs4eZdZdZdZe�fdd��Zedd��Z�ZS)�
DomainLiteralzdomain-literalFcr�r�r�r,rrrr��r�zDomainLiteral.domaincCr|)N�ptextrr�rrr�ip�r�zDomainLiteral.ip)	r3rRrSrOr=rVr�r�rWrrrrr��sr�c@seZdZdZdZdZdS)�MIMEVersionzmime-versionN)r3rRrSrO�major�minorrrrrr��sr�c@s4eZdZdZdZdZdZedd��Zedd��Z	dS)	�	Parameter�	parameterF�us-asciicCs|jr|djSdSr�)�	sectioned�numberr,rrr�section_number�szParameter.section_numbercCsf|D].}|jdkr|jS|jdkr0|D]}|jdkr/|D]}|jdkr.|jSqqqdS)Nrr{r~r")rOr�r�rrr�param_value�s




��zParameter.param_valueN)
r3rRrSrOr��extendedrvrVr�r�rrrrr��s
r�c@rd)�InvalidParameter�invalid-parameterNrgrrrrr��sr�c@r�)�	Attribute�	attributecCs$|D]
}|j�d�r|jSqdS)N�attrtext)rO�endswithrr�rrrr��s

��zAttribute.stripped_valueN�r3rRrSrOrVr�rrrrr��r�r�c@seZdZdZdZdS)�Section�sectionN)r3rRrSrOr�rrrrr�r�rc@r�)�ValuercCs2|d}|jdkr
|d}|j�d�r|jS|jS)Nrrmr�)r{r�zextended-attribute)rOrr�rr�rrrr��s
�zValue.stripped_valueNrrrrrr�r�rc@s(eZdZdZdZedd��Zdd�ZdS)�MimeParameters�mime-parametersFccs��i}|D]*}|j�d�sq|djdkrq|dj��}||vr%g||<||�|j|f�q|��D]�\}}t|td�d�}|dd}|j	}|j
smt|�dkrm|dddkrm|ddj�t
�d��|dd�}g}d}|D]n\}	}
|	|kr�|
j
s�|
j�t
�d��qs|
j�t
�d��|d7}|
j}|
j
r�ztj�|�}Wnty�tjj|d	d
�}Yn(wz|�|d�}Wnttfy�|�dd�}Ynwt�|�r�|
j�t
���|�|�qsd
�|�}||fVq4dS)Nr�rr�)�keyr�z.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingzlatin-1)�encoding�surrogateescaper�r")rOrr�stripr�r��items�sortedrrvr�r�rr�InvalidHeaderDefectr��urllib�parseZunquote_to_bytes�UnicodeEncodeErrorZunquote�decode�LookupErrorr�_has_surrogates�UndecodableBytesDefectr+)r�paramsrB�name�partsZfirst_paramrvZvalue_parts�ir��paramrrrrr�sh��
�
���

�zMimeParameters.paramscCsTg}|jD]\}}|r|�d�|t|���q|�|�qd�|�}|r(d|SdS)N�{}={}z; r[r")rr�r2rr+)rrrrrrrr-&s
zMimeParameters.__str__N)r3rRrSrOrTrVrr-rrrrr�s
Erc@r�)�ParameterizedHeaderValueFcCs&t|�D]}|jdkr|jSqiS)Nr)�reversedrOrr�rrrr7s


�zParameterizedHeaderValue.paramsN)r3rRrSrTrVrrrrrr1src@seZdZdZdZdZdZdS)�ContentTypezcontent-typeF�textZplainN)r3rRrSrOr=�maintype�subtyperrrrr?rxrc@seZdZdZdZdZdS)�ContentDispositionzcontent-dispositionFN)r3rRrSrOr=�content_dispositionrrrrr!F�r!c@seZdZdZdZdZdS)�ContentTransferEncodingzcontent-transfer-encodingFZ7bitN)r3rRrSrOr=rurrrrr$Lr#r$c@rp)�HeaderLabelzheader-labelFNr�rrrrr%Rrrr%c@seZdZdZdZdd�ZdS)�MsgIDzmsg-idFcCst|�|jSr)r�lineseprFrrrrG[rcz
MsgID.foldN)r3rRrSrOr=rGrrrrr&Wsr&c@rd)�	MessageIDz
message-idNrgrrrrr(`rhr(c@rd)�InvalidMessageIDzinvalid-message-idNrgrrrrr)drhr)c@rd)�Header�headerNrgrrrrr*hrhr*csreZdZdZdZdZ�fdd�Z�fdd�Zdd�Ze	dd	��Z
d�fdd�	Zd
d�Ze	dd��Z
dd�Z�ZS)�TerminalTcst��||�}||_g|_|Sr)r�__new__rOr)�clsrrOrrrrr-vszTerminal.__new__cr/r0r1r,rrrr4|szTerminal.__repr__cCst|jjd|j�dS)N�/)rJr r3rOr,rrrrMszTerminal.pprintcCs
t|j�Sr)�listrr,rrrr7�r�zTerminal.all_defectsr"c	s6d�||jj|jt���|jsd�gSd�|j��gS)Nz
{}{}/{}({}){}r"z {})r2r r3rOrr4rrLrrrrN�s�
�zTerminal._ppcCr�rrr,rrr�pop_trailing_ws�r\zTerminal.pop_trailing_wscCsgSrrr,rrrrA�r\zTerminal.commentscCst|�|jfSr)rrOr,rrr�__getnewargs__�szTerminal.__getnewargs__rQ)r3rRrSr=rUrTr-r4rMrVr7rNr1rAr2rWrrrrr,ps
	
r,c@� eZdZedd��Zdd�ZdS)�WhiteSpaceTerminalcCrYrZrr,rrrr�r\zWhiteSpaceTerminal.valuecCrY)NTrr,rrrr;��z!WhiteSpaceTerminal.startswith_fwsN�r3rRrSrVrr;rrrrr4��
r4c@r3)�
ValueTerminalcCs|Srrr,rrrr�r\zValueTerminal.valuecCrY)NFrr,rrrr;�r5zValueTerminal.startswith_fwsNr6rrrrr8�r7r8c@r3)�EWWhiteSpaceTerminalcCrYr�rr,rrrr�r\zEWWhiteSpaceTerminal.valuecCrYr�rr,rrrr-�r5zEWWhiteSpaceTerminal.__str__N)r3rRrSrVrr-rrrrr9�r7r9c@seZdZdS)�_InvalidEwErrorN)r3rRrSrrrrr:�sr:r��,�list-separatorr�zroute-component-markerz([{}]+)r"z[^{}]+z[\x00-\x20\x7F]cCsD	t|�}|r|j�t�|��t�|�r |j�t�d��dSdS)Nz*Non-ASCII characters found in header token)�_non_printable_finderrr�rZNonPrintableDefectrrr)�xtextZnon_printablesrrr�_validate_xtext�s


��r?cCs�	t|d�^}}g}d}d}tt|��D]&}||dkr&|r#d}d}nd}q|r+d}n|||vr3n|�||�q|d}d�|�d�||d�g|�|fS)Nr�FrTr")�
_wsp_splitter�ranger�r�r+)r�endcharsZfragment�	remainderZvchars�escape�had_qp�posrrr�_get_ptext_to_endchars�s&$rGcCs0	|��}t|dt|�t|��d�}||fS)N�fws)r�r4r�)rZnewvaluerHrrr�get_fwssrI�vtextc	Cs�	t�}|�d�st�d�|���|dd��dd�^}}||dd�kr-t�d�|���d�|�}t|�dkrY|dtvrY|dtvrY|�	d�dkrY|�dd�^}}|d|}t|���dkrj|j
�t�d	��||_
d�|�}zt�d|d�\}}}	}
Wnttfy�td
�|j
���w||_|	|_|j
�|
�|r�|dtvr�t|�\}}|�|�q�t|d�^}}t||�}
t|
�|�|
�d�|�}|s�|r�|dtvr�|j
�t�d��||fS)N�=?z"expected encoded word but found {}r�z?=r�r"r�?zwhitespace inside encoded wordz!encoded word format invalid: '{}'z.missing trailing whitespace after encoded-word)rs�
startswithr�HeaderParseErrorr2r�r+r�r�countrr�r
ru�_ewr�
ValueError�KeyErrorr:rvrwr@�WSPrIr@r8r?)rZ
terminal_typeZewr�rCZremstr�restrrvrwrrB�charsrJrrr�get_encoded_wordsd
��

�

��



�
�rVcCsB	t�}|r�|dtvrt|�\}}|�|�qd}|�d�ruz	t|d�\}}Wnty3d}YnBtjy<Yn9wd}t	|�dkrW|dj
dkrW|j�t�d��d}|rot	|�d	kro|d
j
dkrot
|dd�|d<|�|�qt|d	�^}}|r�t�|�r�|�d�^}}t|d�}t|�|�|�d�|�}|s|S)
NrTrKZutextFr�rHz&missing whitespace before encoded wordr����rtr")rerSrIr�rMrVr:rrNr�rOrr
r9r@�rfc2047_matcher�search�	partitionr8r?r+)rrfrB�valid_ewZhave_wsr�rCrJrrr�get_unstructuredIsN

�
��



�)r\cC�,	t|d�\}}}t|d�}t|�||fS)Nz()r�)rGr4r?�rr��_rrr�get_qp_ctext�s

r`cCr])Nrr�)rGr8r?r^rrr�get_qcontent�s
	
racC�P	t|�}|st�d�|���|��}|t|�d�}t|d�}t|�||fS)Nzexpected atext but found '{}'�atext)�_non_atom_end_matcherrrNr2r�r�r8r?)r�mrcrrr�	get_atext�s�
rfcCsp	|ddkrt�d�|���t�}|dd�}|r+|ddkr+t|�\}}|�|�|r�|ddkr�|dtvr@t|�\}}nT|dd�dkr�d}zt|�\}}|j	�t�
d��d	}Wntjymt|�\}}Ynw|r�t|�dkr�|d
jdkr�|djd
kr�t
|d
d�|d
<nt|�\}}|�|�|r�|ddks3|s�|j	�t�
d��||fS||dd�fS)Nrrzexpected '"' but found '{}'r�r�rKFz!encoded word inside quoted stringTr�rHrWrtz"end of header inside quoted string)rrNr2r�rar�rSrIrVrr
r�rOr9)rZbare_quoted_stringrBr[rrr�get_bare_quoted_string�sP�

����
�
�rgcCs�	|r|ddkrt�d�|���t�}|dd�}|rO|ddkrO|dtvr/t|�\}}n|ddkr<t|�\}}nt|�\}}|�|�|rO|ddks"|s^|j	�t�
d��||fS||dd�fS)Nrrzexpected '(' but found '{}'r�r�zend of header inside comment)rrNr2r�rSrI�get_commentr`r�rr
)rr_rBrrrrh�s*�
�
�rhcCs`	t�}|r,|dtvr,|dtvrt|�\}}nt|�\}}|�|�|r,|dtvs||fSr:)rl�CFWS_LEADERrSrIrhr�)rrmrBrrr�get_cfwss
�rjcCsr	t�}|r|dtvrt|�\}}|�|�t|�\}}|�|�|r5|dtvr5t|�\}}|�|�||fSr:)rzrirjr�rg)rZ
quoted_stringrBrrr�get_quoted_string
s


rkcCs�	t�}|r|dtvrt|�\}}|�|�|r'|dtvr't�d�|���|�d�rEzt	|�\}}WntjyDt
|�\}}Ynwt
|�\}}|�|�|rc|dtvrct|�\}}|�|�||fS)Nrzexpected atom but found '{}'rK)rnrirjr��	ATOM_ENDSrrNr2rMrVrf)rrorBrrr�get_atoms*
�
�

rmcCs�	t�}|r|dtvrt�d�|���|rB|dtvrBt|�\}}|�|�|r:|ddkr:|�t�|dd�}|rB|dtvs|dturRt�d�d|���||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'rr�r�z4expected atom at end of dot-atom-text but found '{}')r�rlrrNr2rfr�r�)rZ
dot_atom_textrBrrr�get_dot_atom_text:s$�

�
�rncCs�	t�}|dtvrt|�\}}|�|�|�d�r3zt|�\}}Wntjy2t|�\}}Ynwt|�\}}|�|�|rQ|dtvrQt|�\}}|�|�||fS)NrrK)	r�rirjr�rMrVrrNrn)rZdot_atomrBrrr�get_dot_atomMs"

�

rocCs�	|dtvrt|�\}}nd}|st�d��|ddkr$t|�\}}n|dtvr2t�d�|���t|�\}}|durC|g|dd�<||fS)Nrz5Expected 'atom' or 'quoted-string' but found nothing.rz1Expected 'atom' or 'quoted-string' but found '{}')rirjrrNrk�SPECIALSr2rm)r�leaderrBrrr�get_wordfs$��rrcCs	t�}z
t|�\}}|�|�Wntjy$|j�t�d��Ynw|r|dtvr|ddkrH|�t�|j�t�	d��|dd�}n/zt|�\}}Wn!tjyq|dt
vrnt|�\}}|j�t�	d��n�Ynw|�|�|r|dtvs-||fS)Nzphrase does not start with wordrrzperiod in 'phrase'r�zcomment found without atom)rirrr�rrNrr
�PHRASE_ENDSr��ObsoleteHeaderDefectrirj)rrjrBrrr�
get_phrase�s>

��

�
���
�rucCsn	t�}d}|dtvrt|�\}}|st�d�|���zt|�\}}Wn-tjyQzt|�\}}WntjyN|ddkrI|dtvrI�t	�}YnwYnw|dur]|g|dd�<|�
|�|r�|ddksp|dtvr�tt|�|�\}}|j
dkr�|j�
t�d��n	|j�
t�d��||d<z|j�d�W||fSty�|j�
t�d��Y||fSw)	Nrz"expected local-part but found '{}'r�invalid-obs-local-partz<local-part is not dot-atom, quoted-string, or obs-local-partz,local-part is not a dot-atom (contains CFWS)�asciiz)local-part contains non-ASCII characters))r�rirjrrNr2rorrrsrr��get_obs_local_partrrOrr
rtr�encoderZNonASCIILocalPartDefect)rr�rqrB�obs_local_partrrr�get_local_part�sV�
���


�
��
��r{cCs�	t�}d}|r�|ddks|dtvr�|ddkr3|r%|j�t�d��|�t�d}|dd�}q|ddkrU|�t|dd��|dd�}|j�t�d	��d}q|rg|d
jdkrg|j�t�d��z
t	|�\}}d}Wntj
y�|dtvr��t|�\}}Ynw|�|�|r�|ddks|dtvs|djdks�|djd
kr�|djdkr�|j�t�d��|d
jdks�|d
jd
kr�|djdkr�|j�t�d��|jr�d|_||fS)NFrrrzinvalid repeated '.'Tr��misplaced-specialz/'\' character outside of quoted-string/ccontentr�r�zmissing '.' between wordsrmz!Invalid leading '.' in local partrWz"Invalid trailing '.' in local partrv)
r�rsrr�rr
r�r8rOrrrNrirj)rrzZlast_non_ws_was_dotrBrrrrx�sh
�
�
�
��
�
�
�rxcCsB	t|d�\}}}t|d�}|r|j�t�d��t|�||fS)Nz[]r�z(quoted printable found in domain-literal)rGr8rr�rrtr?)rr�rErrr�	get_dtexts

�r}cCs,|rdS|�t�d��|�tdd��dS)NFz"end of input inside domain-literal�]�domain-literal-endT)r�rr
r8)r�domain_literalrrr�_check_for_early_dl_ends�r�cCsf	t�}|dtvrt|�\}}|�|�|st�d��|ddkr*t�d�|���|dd�}t||�r9||fS|�tdd��|dt	vrRt
|�\}}|�|�t|�\}}|�|�t||�rf||fS|dt	vrwt
|�\}}|�|�t||�r�||fS|ddkr�t�d�|���|�tdd	��|dd�}|r�|dtvr�t|�\}}|�|�||fS)
Nrzexpected domain-literal�[z6expected '[' at start of domain-literal but found '{}'r�zdomain-literal-startr~z4expected ']' at end of domain-literal but found '{}'r)r�rirjr�rrNr2r�r8rSrIr})rr�rBrrr�get_domain_literal sJ

�





�
r�cCst	t�}d}|dtvrt|�\}}|st�d�|���|ddkr<t|�\}}|dur3|g|dd�<|�|�||fSzt|�\}}WntjyTt	|�\}}Ynw|rb|ddkrbt�d��|durm|g|dd�<|�|�|r�|ddkr�|j
�t�d��|djdkr�|d|dd�<|r�|ddkr�|�t
�t	|d	d��\}}|�|�|r�|ddks�||fS)
Nrzexpected domain but found '{}'r�r�zInvalid Domainrz(domain is not a dot-atom (contains CFWS)r�r�)r�rirjrrNr2r�r�rormrrtrOr�)rr�rqrBrrr�
get_domainGsJ�
�


�

�r�cCs~	t�}t|�\}}|�|�|r|ddkr$|j�t�d��||fS|�tdd��t|dd��\}}|�|�||fS)Nrr�z#addr-spec local part with no domain�address-at-symbolr�)r�r{r�rrr
r8r�)rr�rBrrr�
get_addr_specms

�
r�cCs�	t�}|rC|ddks|dtvrC|dtvr$t|�\}}|�|�n|ddkr5|�t�|dd�}|rC|ddks|dtvs|rK|ddkrSt�d�|���|�t�t	|dd��\}}|�|�|r�|ddkr�|�t�|dd�}|s}n3|dtvr�t|�\}}|�|�|ddkr�|�t�t	|dd��\}}|�|�|r�|ddkso|s�t�d��|ddkr�t�d�|���|�t
dd	��||dd�fS)
Nrr;r�r�z(expected obs-route domain but found '{}'z%end of header while parsing obs-route�:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker)r�rirjr��
ListSeparatorrrNr2�RouteComponentMarkerr�r8)rZ	obs_routerBrrr�
get_obs_route}sL
��





�
�r�cCs�	t�}|dtvrt|�\}}|�|�|r|ddkr%t�d�|���|�tdd��|dd�}|ddkrT|�tdd��|j�t�	d��|dd�}||fSzt
|�\}}Wn7tjy�zt|�\}}|j�t�d	��Wntjy�t�d
�|���w|�|�t
|�\}}Ynw|�|�|r�|ddkr�|dd�}n	|j�t�	d��|�tdd��|r�|dtvr�t|�\}}|�|�||fS)Nr�<z"expected angle-addr but found '{}'zangle-addr-startr��>zangle-addr-endznull addr-spec in angle-addrz*obsolete route specification in angle-addrz.expected addr-spec or obs-route but found '{}'z"missing trailing '>' on angle-addr)
r�rirjr�rrNr2r8rr
r�r�rt)rZ
angle_addrrBrrr�get_angle_addr�sZ
�
�

���
�


�
r�cCs>	t�}t|�\}}|�|dd��|jdd�|_||fSr)r�rur@r)rr�rBrrr�get_display_name�sr�cCs�	t�}d}|dtvrt|�\}}|st�d�|���|ddkrT|dtvr0t�d�|���t|�\}}|s@t�d�|���|durO|g|ddd�<d}|�|�t	|�\}}|dure|g|dd�<|�|�||fS)Nrz!expected name-addr but found '{}'r�)
r�rirjrrNr2rsr�r�r�)rZ	name_addrrqrBrrr�
get_name_addr�s8���

r�cCs�	t�}zt|�\}}Wn#tjy/zt|�\}}Wntjy,t�d�|���wYnwtdd�|jD��r=d|_|�	|�||fS)Nzexpected mailbox but found '{}'cs��|]	}t|tj�VqdSr)r�rr
r%rrrr(���zget_mailbox.<locals>.<genexpr>r�)
r�r�rrNr�r2�anyr7rOr�)rr�rBrrr�get_mailboxs(�����
r�cCst	t�}|r6|d|vr6|dtvr#|�t|dd��|dd�}nt|�\}}|�|�|r6|d|vs||fS)Nrr|r�)r�rsr�r8ru)rrBZinvalid_mailboxrBrrr�get_invalid_mailbox��
�r�cCs�	t�}|r�|ddkr�z
t|�\}}|�|�Wn�tjy�d}|dtvrgt|�\}}|r7|ddvrF|�|�|j�t�d��nQt	|d�\}}|durX|g|dd�<|�|�|j�t�
d��n0|ddkrw|j�t�d��n t	|d�\}}|dur�|g|dd�<|�|�|j�t�
d��Ynw|r�|ddvr�|d}d|_t	|d�\}}|�|�|j�t�
d��|r�|ddkr�|�t
�|d	d�}|r�|ddks||fS)
Nr�;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listr;r�r�r�)r�r�r�rrNrirjrrtr�r
rOr@r�)rZmailbox_listrBrqr�rrr�get_mailbox_list(s`

�

�
�

���

�
�)r�cCs	t�}|s|j�t�d��||fSd}|rF|dtvrFt|�\}}|s7|j�t�d��|�|�||fS|ddkrF|�|�||fSt|�\}}t|j	�dkrn|dur\|�|�|�
|�|j�t�d��||fS|dury|g|dd�<|�|�||fS)Nzend of header before group-listrzend of header in group-listr�zgroup-list with empty entries)r�rr�rr
rirjr�r�r�r@rt)rZ
group_listrqrBrrr�get_group_listas@
�
�




�
r�cCs	t�}t|�\}}|r|ddkrt�d�|���|�|�|�tdd��|dd�}|rE|ddkrE|�tdd��||dd�fSt|�\}}|�|�|s\|j�t�	d��n|ddkrjt�d	�|���|�tdd��|dd�}|r�|dt
vr�t|�\}}|�|�||fS)
Nrr�z8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorr�r�zgroup-terminatorzend of header in groupz)expected ';' at end of group but found {})r�r�rrNr2r�r8r�rr
rirj)rr�rBrrr�	get_group�s:�


��
r�cCsr	t�}zt|�\}}Wn#tjy/zt|�\}}Wntjy,t�d�|���wYnw|�|�||fS)Nzexpected address but found '{}')r�r�rrNr�r2r�)rr�rBrrr�get_address�s ����
r�c
Cs�	t�}|r�z
t|�\}}|�|�Wn�tjy�}z�d}|dtvret|�\}}|r2|ddkrA|�|�|j�t�d��nWt	|d�\}}|durS|g|dd�<|�t
|g��|j�t�d��n3|ddkru|j�t�d��n#t	|d�\}}|dur�|g|dd�<|�t
|g��|j�t�d��WYd}~nd}~ww|r�|ddkr�|dd}d|_t	|d�\}}|�
|�|j�t�d��|r�|�tdd��|d	d�}|s||fS)
Nrr;z"address-list entry with no contentzinvalid address in address-listzempty element in address-listr�r�r<r�)r�r�r�rrNrirjrrtr�r�r
rOr@r8)rZaddress_listrB�errrqr�rrr�get_address_list�s`	

�
�
�
���

��)r�cCs�	t�}|st�d�|���|ddkrt�d�|���|�tdd��|dd�}t|�\}}|�|�|r=|ddkrEt�d�|���|�tdd	��||dd�fS)
Nz'expected no-fold-literal but found '{}'rr�z;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startr�r~z9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)r�rrNr2r�r8r})rZno_fold_literalrBrrr�get_no_fold_literal�s,��
�r�cCsr	t�}|r|dtvrt|�\}}|�|�|r|ddkr't�d�|���|�tdd��|dd�}zt|�\}}Wn,tjyizt	|�\}}|j
�t�d��Wntjyft�d�|���wYnw|�|�|rw|ddkr�|j
�t�d	��|r�|dd
kr�|�td
d��|dd�}||fS|�tdd��|dd�}zt|�\}}WnHtjy�zt
|�\}}Wn5tjy�}z(zt|�\}}|j
�t�d
��Wntjy�t�d�|���wWYd}~nd}~wwYnw|�|�|�r|dd
k�r|dd�}n	|j
�t�d��|�td
d��|�r5|dtv�r5t|�\}}|�|�||fS)Nrr�zexpected msg-id but found '{}'zmsg-id-startr�zobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'r�zmsg-id with no id-rightr�z
msg-id-endr�zobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)r&rirjr�rrNr2r8rnrxrrtr
r�r�)rZmsg_idrB�errr�
get_msg_ids�
�

�����


�

��������

�
r�c
Cs�	t�}z
t|�\}}|�|�Wn(tjy9}zt|�}t|�}|j�t�d�	|���WYd}~|Sd}~ww|rH|j�t�d�	|���|S)NzInvalid msg-id: {!r}zUnexpected {!r})
r(r�r�rrNr\r)rr
r2)rZ
message_idrBZexrrr�parse_message_idSs&���
�r�cCs�	t�}|s|j�t�d��|S|dtvr-t|�\}}|�|�|s-|j�t�d��d}|rW|ddkrW|dtvrW||d7}|dd�}|rW|ddkrW|dtvs=|��sp|j�t�d�	|���|�t
|d��n
t|�|_|�t
|d	��|r�|dtvr�t|�\}}|�|�|r�|ddkr�|jdur�|j�t�d
��|r�|�t
|d��|S|�t
dd��|dd�}|r�|dtvr�t|�\}}|�|�|s�|jdur�|j�t�d
��|Sd}|�r|dtv�r||d7}|dd�}|�r|dtvs�|���s |j�t�d�	|���|�t
|d��n
t|�|_
|�t
|d	��|�rB|dtv�rBt|�\}}|�|�|�rV|j�t�d
��|�t
|d��|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSr"rr�z1Expected MIME major version number but found {!r}r>�digitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)r�rr�r�HeaderMissingRequiredValuerirj�isdigitr
r2r8�intr�r�)rZmime_versionrBr�rrr�parse_mime_versionos�
�

��
�



�


��

�


�r�cCst	t�}|r6|ddkr6|dtvr#|�t|dd��|dd�}nt|�\}}|�|�|r6|ddks||fS)Nrr�r|r�)r�rsr�r8ru)rZinvalid_parameterrBrrr�get_invalid_parameter�r�r�cCrb)Nzexpected ttext but found '{}'�ttext)�_non_token_end_matcherrrNr2r�r�r8r?)rrer�rrr�	get_ttext���
r�cC�	t�}|r|dtvrt|�\}}|�|�|r'|dtvr't�d�|���t|�\}}|�|�|rE|dtvrEt|�\}}|�|�||fS�Nrzexpected token but found '{}')	rqrirjr��
TOKEN_ENDSrrNr2r�)rZmtokenrBrrr�	get_token��
�

r�cCrb)Nz expected attrtext but found {!r}r�)�_non_attribute_end_matcherrrNr2r�r�r8r?�rrer�rrr�get_attrtext�r�r�cCr�r�)	r�rirjr��ATTRIBUTE_ENDSrrNr2r��rr�rBrrr�
get_attribute	r�r�cCrb)Nz)expected extended attrtext but found {!r}�extended-attrtext)�#_non_extended_attribute_end_matcherrrNr2r�r�r8r?r�rrr�get_extended_attrtext	s�
r�cCr�r�)	r�rirjr��EXTENDED_ATTRIBUTE_ENDSrrNr2r�r�rrr�get_extended_attribute+	s
�

r�cCs�	t�}|r|ddkrt�d�|���|�tdd��|dd�}|r*|d��s2t�d�|���d}|rP|d��rP||d7}|dd�}|rP|d��s<|ddkrc|dkrc|j�t�d	��t	|�|_
|�t|d
��||fS)Nr�*zExpected section but found {}zsection-markerr�z$Expected section number but found {}r"�0z'section number has an invalid leading 0r�)rrrNr2r�r8r�rr
r�r�)rrr�rrr�get_sectionA	s0���
�
r�cCs�	t�}|st�d��d}|dtvrt|�\}}|s#t�d�|���|ddkr0t|�\}}nt|�\}}|durA|g|dd�<|�|�||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r)	rrrNrirjr2rkr�r�)r�vrqrBrrr�	get_value_	s$
�
r�cCsz	t�}t|�\}}|�|�|r|ddkr'|j�t�d�|���||fS|ddkrfzt|�\}}d|_|�|�Wn
tj	yGYnw|sOt�	d��|ddkrf|�t
dd��|dd�}d|_|dd	krqt�	d
��|�t
d	d��|dd�}d}|r�|dtvr�t
|�\}}|�|�d}|}|j�r|�r|ddk�rt|�\}}|j}d
}|jdkr�|r�|ddkr�d}n#t|�\}}	|	r�|	ddkr�d}nzt|�\}}	WnYn|	s�d}|�r
|j�t�d��|�|�|D]}
|
jdk�r	g|
dd�<|
}nq�|}nd}|j�t�d��|�r%|ddk�r%d}nt|�\}}|j�r5|jdk�rX|�r?|ddk�rO|�|�|du�rK|}||fS|j�t�d��|�ss|j�t�d��|�|�|du�rr||fSnw|du�r�|D]}
|
jdk�r�n�qz|
jdk|�|
�|
j|_|ddk�r�t�	d�|���|�t
dd��|dd�}|�r�|ddk�r�t|�\}}|�|�|j|_|�r�|ddk�r�t�	d�|���|�t
dd��|dd�}|du�r't�}|�r$|dtv�rt|�\}}n|ddk�rt
dd�}|dd�}nt|�\}}|�|�|�s�|}nt|�\}}|�|�|du�r9|}||fS)Nrr�z)Parameter contains name ({}) but no valuer�TzIncomplete parameterzextended-parameter-markerr��=zParameter not followed by '='�parameter-separatorrF�'z5Quoted string value for extended parameter is invalidr~zZParameter marked as extended but appears to have a quoted string value that is non-encodedzcApparent initial-extended-value but attribute was not marked as extended or was not initial sectionz(Missing required charset/lang delimitersr�r�z=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}ZDQUOTE)r�r�r�rrr
r2r�r�rNr8r�rirjrkr�r�r�r�rOr�rrvrwrrSrIra)rrrBrqrCZappendtoZqstringZinner_valueZ
semi_validrT�tr�rrr�
get_parameteru	s�

��



�
�
�
�


�
�

�
�

�
�


�	

r�c
Csn	t�}|r�z
t|�\}}|�|�Wnitjy|}z\d}|dtvr*t|�\}}|s9|�|�|WYd}~S|ddkrR|durH|�|�|j�t�d��n t	|�\}}|ra|g|dd�<|�|�|j�t�d�
|���WYd}~nd}~ww|r�|ddkr�|d}d|_t	|�\}}|�|�|j�t�d�
|���|r�|�t
dd��|d	d�}|s|S)
Nrr�zparameter entry with no contentzinvalid parameter {!r}r�r�z)parameter with invalid trailing text {!r}r�r�)rr�r�rrNrirjrr
r�r2rOr@r8)rZmime_parametersrBr�rqrrrr�parse_mime_parameters
sR


�

���

��$r�cCs�	|r3|ddkr3|dtvr |�t|dd��|dd�}nt|�\}}|�|�|r3|ddks	|s7dS|�tdd��|�t|dd���dS)Nrr�r|r�r�)rsr�r8rur�)Z	tokenlistrrBrrr�_find_mime_parameters7
s
�r�c
Cs�	t�}d}|s|j�t�d��|Szt|�\}}Wntjy8|j�t�d�|���t	||�|YSw|�|�|rF|ddkrX|j�t�d��|rVt	||�|S|j
����|_
|�tdd��|dd�}zt|�\}}Wntjy�|j�t�d	�|���t	||�|YSw|�|�|j
����|_|s�|S|dd
kr�|j�t�d�|���|`
|`t	||�|S|�td
d��|�t|dd���|S)
NFz"Missing content type specificationz(Expected content maintype but found {!r}rr/zInvalid content typezcontent-type-separatorr�z'Expected content subtype but found {!r}r�z<Only parameters are valid after content type, but found {!r}r�)rrr�rr�r�rNr
r2r�rr
�lowerrr8r r�)rZctypeZrecoverrBrrr�parse_content_type_headerG
sh
�
�
�

�

�
�

�
r�c
Cs�	t�}|s|j�t�d��|Szt|�\}}Wntjy6|j�t�d�|���t	||�|YSw|�|�|j
����|_
|sH|S|ddkra|j�t�d�|���t	||�|S|�tdd��|�t|dd���|S)NzMissing content dispositionz+Expected content disposition but found {!r}rr�zCOnly parameters are valid after content disposition, but found {!r}r�r�)r!rr�rr�r�rNr
r2r�rr
r�r"r8r�)rZdisp_headerrBrrr� parse_content_disposition_header�
s<
�
�
�

�
r�c
Cs�	t�}|s|j�t�d��|Szt|�\}}Wntjy/|j�t�d�|���Ynw|�|�|j	�
���|_|sA|S|rp|j�t�d��|dt
vrc|�t|dd��|dd�}nt|�\}}|�|�|sC|S)Nz!Missing content transfer encodingz1Expected content transfer encoding but found {!r}z*Extra text after content transfer encodingrr|r�)r$rr�rr�r�rNr
r2rr
r�rursr8ru)rZ
cte_headerrBrrr�&parse_content_transfer_encoding_header�
s:
�

��

�
�	r�cCsDd}|r |dr |ddtvr |dd}|ddd�|d<|S)Nr"r�)rS)�linesZwsprrr�_steal_trailing_WSP_if_exists�
s
r�cCs�	|jptj}|jrdnd}dg}d}d}d}tdd�}t|�}	|	�rl|	�d�}
|
|ur1|d8}q t|
�}|sI|
jdvrCt	�
|�}nt�
|�}z	|�|�|}Wnt
yltd	d
�|
jD��rfd}nd}d}Ynw|
jd
krzt|
|||�q |r�|s�|
js�d}d}|
jr�|
j|d�dt|j��}
|j|
vr�t|
�|t|d�kr�t|�}|�|�|d|
7<q t|
d�s�t|
�|	}	n
t|||||
j|�}d}q t|�|t|d�kr�|d|7<q |
j�r	t|�d|k�r	t|�}|s�|
���r	|�||�d}q t|
d��s>t|
�}|
jdk�r,tdd�gdd�|D�tdd�g}|
j�s9|d7}|�|�||	}	q |
j�rN|�sN|	�d|
�d}q t|�}|�sZ|
���rb|�||�n|d|7<|	s#|j�|�|jS)N�utf-8r�r"rF�wrap_as_ew_blockedr�)r�rJcsr�r)r�rrr%rrrr(�
r�z%_refold_parse_tree.<locals>.<genexpr>�unknown-8bitTrrCr�ryr~rr�cSsg|]	}tt|�d��qS)r�)r8r)r&�prrrra1s�z&_refold_parse_tree.<locals>.<listcomp>)Zmax_line_length�sys�maxsize�utf8r,r0r�rrO�
SPECIALSNL�
isdisjoint�NLSETryrr�r7�_fold_mime_parametersr=rTrGr�r'r�r�rP�_fold_as_ewrUr;r8�insertr+)Z
parse_treerD�maxlenrr��last_ewr�Z
want_encodingZend_ew_not_allowedrr>�tstrrvZencoded_part�newlineZnewpartsrrrrE�
s�



��
	



�
��
��
�erEcCs�	|dur|rtt|d|d�|��}|dd|�|d<|dtvrF|d}|dd�}t|d�|kr>|�t|��|d|7<d}|dtvrX|d}|dd�}|durbt|d�n|}|dkrjdn|}	t|	�d}
|
d|kr}t�d��|r�|t|d�}||
}|dkr�|�d	�q}|d|�}
tj	|
|	d
�}t|�|}|dkr�|
dd�}
tj	|
|	d
�}t|�|}|dks�|d|7<|t|
�d�}|r�|�d	�t|d�}|s|d|7<|r�|SdS)Nr�rr�r"r�r��z3max_line_length is too small to fit an encoded wordr[)rv)
rr\rSr�r�r�rrNrPry)Z	to_encoder�r�r�rUrvZleading_wspZtrailing_wspZnew_last_ewZ	encode_as�
chrome_lenZremaining_spaceZ
text_spaceZto_encode_wordZencoded_wordZexcessrrrr�HsZ
��
�
�r�c	Cs�	|jD]�\}}|d���d�s|dd7<|}d}z	|�|�d}Wnty=d}t�|�r9d}d}nd}Ynw|rQtjj	|d	|d
�}	d�
|||	�}
nd�
|t|��}
t|d�t|
�d
|krr|dd|
|d<qt|
�d|kr�|�
d|
�qd}|d}|r�t|�tt|��dt|�}
||
dkr�d}||
d}}	|d|�}tjj	|d	|d
�}	t|	�|kr�n|d
8}q�|�
d�
||||	��d	}|d
7}||d�}|r�|dd7<|s�qdS)Nr�r��strictFTr�r	r�r")Zsaferz
{}*={}''{}rr�r[r�rz''r��Nz {}*{}*={}{})rr�rryrrrrrr�r2rr�r�r)r>r�r�rrrrvZ
error_handlerZencoding_requiredZ
encoded_valuer�rZextra_chromer�Z
splitpointZmaxchars�partialrrrr��sp

��� ������r�)rJ)��rer�r�stringr�operatorrZemailrrPrrr�rSrirprlr�rsZ	TSPECIALSr�Z	ASPECIALSr�r�r�r�rr�compile�VERBOSE�	MULTILINErXr0rrXrerirkrlrnrqrsrzr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr!r$r%r&r(r)r*rr,r4r8r9rNr:r�r�r�r2r+r�r@rD�matchrd�findallr=r�r�r�r?rGrIrVr\r`rarfrgrhrjrkrmrnrorrrur{rxr}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�r�r�r�r�r�r�r�r�r�r�rEr�r�rrrr�<module>sFE
�C"	
!*$
V	+





��������

1C+
"&'/'&).9%7ED49/tA

ZeroDay Forums Mini