
   ҽ;t            	       *   	 d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ	 d dlm
Z
 d dlmZ  ed          Ze ed          z  Z ed	          Zeez  Ze ed
          z
  Ze ed          z
  Ze ed          z   ed
          z
  Zeez  Ze ed          z  Zeez  Ze ed          z
  ZddhZeez  Zd Zd Zd Z e j        de j        e j        z            Z  G d de!          Z" G d de"          Z# G d de"          Z$ G d de"          Z% G d de"          Z& G d d e#          Z' G d! d"e"          Z( G d# d$e"          Z) G d% d&e"          Z* G d' d(e"          Z+ G d) d*e+          Z, G d+ d,e#          Z- G d- d.e"          Z. G d/ d0e"          Z/ G d1 d2e"          Z0 G d3 d4e"          Z1 G d5 d6e"          Z2 G d7 d8e"          Z3 G d9 d:e"          Z4 G d; d<e"          Z5 G d= d>e"          Z6 G d? d@e"          Z7 G dA dBe"          Z8 G dC dDe"          Z9 G dE dFe"          Z: G dG dHe"          Z; G dI dJe"          Z< G dK dLe"          Z= G dM dNe%          Z> G dO dPe"          Z? G dQ dRe"          Z@ G dS dTe"          ZA G dU dVe"          ZB G dW dXeB          ZC G dY dZe"          ZD G d[ d\e"          ZE G d] d^e"          ZF G d_ d`e"          ZG G da dbe"          ZH G dc ddeH          ZI G de dfeH          ZJ G dg dhe"          ZK G di dje"          ZL G dk dle"          ZM G dm dneM          ZN G do dpeN          ZO G dq dre"          ZP G ds dteQ          ZR G du dveR          ZS G dw dxeR          ZT G dy dzeS          ZU G d{ d|e
jV                  ZW eTd
d}          ZX eTd~d          ZYdeY_Z        deY_[         eTdd          Z\ e j        d]                    d^                    e                              j_        Z` e j        d]                     e ja        d^                    e                                        jb        Zc e j        d          jd        Ze e j        d]                     e ja        d^                    e                                        jb        Zf e j        d]                     e ja        d^                    e                                        jb        Zg e j        d]                     e ja        d^                    e                                        jb        Zhd Zid Zjd ZkddZld Zmd Znd Zod Zpd Zqd Zrd Zsd Ztd Zud Zvd Zwd Zxd Zyd Zzd Z{d Z|d Z}d Z~d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )    N)	hexdigits)
itemgetter)_encoded_words)errors)utilsz 	(z()<>@,:;.\"[].z."(z/?=z*'%%
c                 r    	 t          |                               dd                              dd          S )N\\\"z\"strreplacevalues    h/nix/store/c6yb989sl77467xxwhylnkph1pqyi47p-python3-3.11.15/lib/python3.11/email/_header_value_parser.pymake_quoted_pairsr   c   s1    Eu::dF++33C???    c                     	 t          |                               dd                              dd                              dd          S )Nr   r   r   \()\)r   r   s    r   make_parenthesis_pairsr   h   s@    Du::dF++	e		WWS%001r   c                 ,    t          |           }d| dS )Nr   )r   )r   escapeds     r   quote_stringr    n   s    &&Gw>>>r   z
   =\?            # literal =?
   [^?]*          # charset
   \?             # literal ?
   [qQbB]         # literal 'q' or 'b', case insensitive
   \?             # literal ?
  .*?             # encoded word
  \?=             # literal ?=
c                        e Zd ZdZdZdZ fdZd Z fdZe	d             Z
e	d             Zd Ze	d	             Ze	d
             Zd ZddZddZddZ xZS )	TokenListNTc                 H     t                      j        |i | g | _        d S N)super__init__defects)selfargskw	__class__s      r   r&   zTokenList.__init__   s*    $%"%%%r   c                 @    d                     d | D                       S )N c              3   4   K   | ]}t          |          V  d S r$   r   .0xs     r   	<genexpr>z$TokenList.__str__.<locals>.<genexpr>   (      ,,!s1vv,,,,,,r   joinr(   s    r   __str__zTokenList.__str__   s#    ww,,t,,,,,,r   c                     d                     | j        j        t                                                                S Nz{}({})formatr+   __name__r%   __repr__r(   r+   s    r   r>   zTokenList.__repr__   s3    t~6"WW--//1 1 	1r   c                 @    d                     d | D                       S )Nr-   c              3   2   K   | ]}|j         	|j         V  d S r$   r   r0   s     r   r3   z"TokenList.value.<locals>.<genexpr>   s+      8818qw888888r   r5   r7   s    r   r   zTokenList.value   s#    ww88888888r   c                 @    t          d | D             | j                  S )Nc              3   $   K   | ]}|j         V  d S r$   )all_defectsr0   s     r   r3   z(TokenList.all_defects.<locals>.<genexpr>   s$      00aAM000000r   )sumr'   r7   s    r   rD   zTokenList.all_defects   s#    004000$,???r   c                 6    | d                                          S Nr   )startswith_fwsr7   s    r   rH   zTokenList.startswith_fws   s    Aw%%'''r   c                 6    	 t          d | D                       S )Nc              3   $   K   | ]}|j         V  d S r$   )as_ew_allowed)r1   parts     r   r3   z*TokenList.as_ew_allowed.<locals>.<genexpr>   s%      77$4%777777r   )allr7   s    r   rK   zTokenList.as_ew_allowed   s"    O77$777777r   c                 H    g }| D ]}|                     |j                   |S r$   )extendcomments)r(   rP   tokens      r   rP   zTokenList.comments   s2     	, 	,EOOEN++++r   c                $    t          | |          S )Npolicy)_refold_parse_treer(   rT   s     r   foldzTokenList.fold   s    !$v6666r   r-   c                 L    t          |                     |                     d S )Nindent)printppstrr(   rZ   s     r   pprintzTokenList.pprint   s$    djjj''(((((r   c                 T    d                     |                     |                    S )Nr   rY   )r6   _ppr]   s     r   r\   zTokenList.ppstr   s"    yy00111r   c              #   n  K   d                     || j        j        | j                  V  | D ]K}t	          |d          s|d                     |          z   V  -|                    |dz             E d {V  L| j        rd                     | j                  }nd}d                     ||          V  d S )Nz{}{}/{}(r`   z*    !! invalid element in token list: {!r}z    z Defects: {}r-   z{}){})r<   r+   r=   
token_typehasattrr`   r'   )r(   rZ   rQ   extras       r   r`   zTokenList._pp   s      N#O  	 	 	  	4 	4E5%(( 4 !55;VE]]C D D D D !99VF]3333333333< 	"))$,77EEEnnVU+++++++r   r-   )r=   
__module____qualname__rb   syntactic_breakew_combine_allowedr&   r8   r>   propertyr   rD   rH   rK   rP   rW   r^   r\   r`   __classcell__r+   s   @r   r"   r"      s9       JO    - - -1 1 1 1 1 9 9 X9 @ @ X@( ( ( 8 8 X8   X7 7 7) ) ) )2 2 2 2, , , , , , , ,r   r"   c                   :    e Zd Zed             Zed             ZdS )WhiteSpaceTokenListc                     dS N  r7   s    r   r   zWhiteSpaceTokenList.value       sr   c                     d | D             S )Nc                 2    g | ]}|j         d k    |j        S )comment)rb   contentr0   s     r   
<listcomp>z0WhiteSpaceTokenList.comments.<locals>.<listcomp>   s&    CCCa1<+B+B	+B+B+Br   rr   r7   s    r   rP   zWhiteSpaceTokenList.comments   s    CC4CCCCr   N)r=   rf   rg   rj   r   rP   rr   r   r   rn   rn      sM          X D D XD D Dr   rn   c                       e Zd ZdZdS )UnstructuredTokenListunstructuredNr=   rf   rg   rb   rr   r   r   rz   rz      s        JJJr   rz   c                       e Zd ZdZdS )PhrasephraseNr|   rr   r   r   r~   r~              JJJr   r~   c                       e Zd ZdZdS )WordwordNr|   rr   r   r   r   r              JJJr   r   c                       e Zd ZdZdS )CFWSListcfwsNr|   rr   r   r   r   r      r   r   r   c                       e Zd ZdZdS )AtomatomNr|   rr   r   r   r   r      r   r   r   c                       e Zd ZdZdZdS )TokenrQ   FN)r=   rf   rg   rb   encode_as_ewrr   r   r   r   r      s        JLLLr   r   c                       e Zd ZdZdZdZdZdS )EncodedWordencoded-wordN)r=   rf   rg   rb   ctecharsetlangrr   r   r   r   r      s"        J
CGDDDr   r   c                   T    e Zd ZdZed             Zed             Zed             ZdS )QuotedStringquoted-stringc                 8    | D ]}|j         dk    r	|j        c S d S Nbare-quoted-stringrb   r   r(   r2   s     r   rw   zQuotedString.content   s9     	 	A|333w 4	 	r   c                     g }| D ]J}|j         dk    r#|                    t          |                     0|                    |j                   Kd                    |          S )Nr   r-   )rb   appendr   r   r6   )r(   resr2   s      r   quoted_valuezQuotedString.quoted_value   sf     	$ 	$A|333

3q66""""

17####wws||r   c                 8    | D ]}|j         dk    r	|j        c S d S r   r   r(   rQ   s     r   stripped_valuezQuotedString.stripped_value  s=     	# 	#E#777{""" 8	# 	#r   N)r=   rf   rg   rb   rj   rw   r   r   rr   r   r   r   r      sh         J  X
   X # # X# # #r   r   c                   .    e Zd ZdZd Zed             ZdS )BareQuotedStringr   c                 Z    t          d                    d | D                                 S )Nr-   c              3   4   K   | ]}t          |          V  d S r$   r/   r0   s     r   r3   z+BareQuotedString.__str__.<locals>.<genexpr>  s(      #9#9qCFF#9#9#9#9#9#9r   )r    r6   r7   s    r   r8   zBareQuotedString.__str__  s+    BGG#9#9D#9#9#999:::r   c                 @    d                     d | D                       S )Nr-   c              3   4   K   | ]}t          |          V  d S r$   r/   r0   s     r   r3   z)BareQuotedString.value.<locals>.<genexpr>  r4   r   r5   r7   s    r   r   zBareQuotedString.value  #    ww,,t,,,,,,r   N)r=   rf   rg   rb   r8   rj   r   rr   r   r   r   r     sC        %J; ; ; - - X- - -r   r   c                   J    e Zd ZdZd Zd Zed             Zed             ZdS )Commentrv   c                 l     d                     t          dg fd D             dggg                     S )Nr-   r   c                 :    g | ]}                     |          S rr   )quote)r1   r2   r(   s     r   rx   z#Comment.__str__.<locals>.<listcomp>  s#    999qTZZ]]999r   r   )r6   rE   r7   s   `r   r8   zComment.__str__  sP    wws E9999D999 E  "	# # $ $ 	$r   c                     |j         dk    rt          |          S t          |                              dd                              dd                              dd          S )Nrv   r   r   r   r   r   r   )rb   r   r   )r(   r   s     r   r   zComment.quote"  sc    y((u::5zz!!$//77"%u. ..5g"%u/. /.	.r   c                 @    d                     d | D                       S )Nr-   c              3   4   K   | ]}t          |          V  d S r$   r/   r0   s     r   r3   z"Comment.content.<locals>.<genexpr>+  r4   r   r5   r7   s    r   rw   zComment.content)  r   r   c                     | j         gS r$   )rw   r7   s    r   rP   zComment.comments-  s    ~r   N)	r=   rf   rg   rb   r8   r   rj   rw   rP   rr   r   r   r   r     sm        J$ $ $. . . - - X-   X  r   r   c                   T    e Zd ZdZed             Zed             Zed             ZdS )AddressListzaddress-listc                     d | D             S )Nc                 (    g | ]}|j         d k    |S )addressrb   r0   s     r   rx   z)AddressList.addresses.<locals>.<listcomp>7  $    ;;;a1<#:#:#:#:#:r   rr   r7   s    r   	addresseszAddressList.addresses5      ;;4;;;;r   c                 6    t          d | D             g           S )Nc              3   :   K   | ]}|j         d k    |j        V  dS r   Nrb   	mailboxesr0   s     r   r3   z(AddressList.mailboxes.<locals>.<genexpr>;  s<       > >Q\9%<%< K%<%<%<%<> >r   rE   r7   s    r   r   zAddressList.mailboxes9  6     > >!> > >?AC C 	Cr   c                 6    t          d | D             g           S )Nc              3   :   K   | ]}|j         d k    |j        V  dS r   rb   all_mailboxesr0   s     r   r3   z,AddressList.all_mailboxes.<locals>.<genexpr>@  s<       > >Q\9%<%< O%<%<%<%<> >r   r   r7   s    r   r   zAddressList.all_mailboxes>  r   r   N)r=   rf   rg   rb   rj   r   r   r   rr   r   r   r   r   1  sp        J< < X< C C XC C C XC C Cr   r   c                   T    e Zd ZdZed             Zed             Zed             ZdS )Addressr   c                 B    | d         j         dk    r| d         j        S d S )Nr   grouprb   display_namer7   s    r   r   zAddress.display_nameH  s)    7((7'' )(r   c                 v    | d         j         dk    r	| d         gS | d         j         dk    rg S | d         j        S Nr   mailboxinvalid-mailboxr   r7   s    r   r   zAddress.mailboxesM  sE    7**G9!W#444IAw  r   c                     | d         j         dk    r	| d         gS | d         j         dk    r	| d         gS | d         j        S r   r   r7   s    r   r   zAddress.all_mailboxesU  sL    7**G9!W#444G9Aw$$r   N)r=   rf   rg   rb   rj   r   r   r   rr   r   r   r   r   D  sh        J( ( X( ! ! X! % % X% % %r   r   c                   >    e Zd ZdZed             Zed             ZdS )MailboxListmailbox-listc                     d | D             S )Nc                 (    g | ]}|j         d k    |S )r   r   r0   s     r   rx   z)MailboxList.mailboxes.<locals>.<listcomp>c  r   r   rr   r7   s    r   r   zMailboxList.mailboxesa  r   r   c                     d | D             S )Nc                 $    g | ]}|j         d v |S ))r   r   r   r0   s     r   rx   z-MailboxList.all_mailboxes.<locals>.<listcomp>g  s/     ? ? ?a|=== ===r   rr   r7   s    r   r   zMailboxList.all_mailboxese  s"    ? ?4 ? ? ? 	?r   Nr=   rf   rg   rb   rj   r   r   rr   r   r   r   r   ]  sM        J< < X< ? ? X? ? ?r   r   c                   >    e Zd ZdZed             Zed             ZdS )	GroupList
group-listc                 F    | r| d         j         dk    rg S | d         j        S Nr   r   r   r7   s    r   r   zGroupList.mailboxeso  s-     	tAw)^;;IAw  r   c                 F    | r| d         j         dk    rg S | d         j        S r   r   r7   s    r   r   zGroupList.all_mailboxesu  s-     	tAw)^;;IAw$$r   Nr   rr   r   r   r   r   k  sM        J! ! X!
 % % X% % %r   r   c                   T    e Zd ZdZed             Zed             Zed             ZdS )Groupr   c                 B    | d         j         dk    rg S | d         j        S N   r   r   r7   s    r   r   zGroup.mailboxes  s&    7--IAw  r   c                 B    | d         j         dk    rg S | d         j        S r   r   r7   s    r   r   zGroup.all_mailboxes  s&    7--IAw$$r   c                     | d         j         S rG   )r   r7   s    r   r   zGroup.display_name  s    Aw##r   N)r=   rf   rg   rb   rj   r   r   r   rr   r   r   r   r   |  sh        J! ! X!
 % % X%
 $ $ X$ $ $r   r   c                       e Zd ZdZed             Zed             Zed             Zed             Zed             Z	dS )NameAddr	name-addrc                 F    t          |           dk    rd S | d         j        S N   r   )lenr   r7   s    r   r   zNameAddr.display_name  s#    t99>>4Aw##r   c                     | d         j         S N
local_partr7   s    r   r   zNameAddr.local_part  s    Bx""r   c                     | d         j         S r   domainr7   s    r   r   zNameAddr.domain  s    Bxr   c                     | d         j         S r   )router7   s    r   r   zNameAddr.route  s    Bx~r   c                     | d         j         S r   	addr_specr7   s    r   r   zNameAddr.addr_spec  s    Bx!!r   N
r=   rf   rg   rb   rj   r   r   r   r   r   rr   r   r   r   r     s        J$ $ X$
 # # X#   X   X " " X" " "r   r   c                   j    e Zd ZdZed             Zed             Zed             Zed             ZdS )	AngleAddrz
angle-addrc                 8    | D ]}|j         dk    r	|j        c S d S N	addr-spec)rb   r   r   s     r   r   zAngleAddr.local_part  s;     	$ 	$A|{**|### +	$ 	$r   c                 8    | D ]}|j         dk    r	|j        c S d S r   rb   r   r   s     r   r   zAngleAddr.domain  s8     	  	 A|{**x +	  	 r   c                 8    | D ]}|j         dk    r	|j        c S d S )N	obs-route)rb   domainsr   s     r   r   zAngleAddr.route  s;     	! 	!A|{**y    +	! 	!r   c                     | D ];}|j         dk    r.|j        r	|j        c S t          |j                  |j        z   c S <dS )Nr   z<>)rb   r   r   r    r   s     r   r   zAngleAddr.addr_spec  s`     	 	A|{**< D;&&&'55CCCC	 + 4r   N)	r=   rf   rg   rb   rj   r   r   r   r   rr   r   r   r   r     s        J$ $ X$
     X 
 ! ! X!
   X  r   r   c                   (    e Zd ZdZed             ZdS )ObsRouter  c                     d | D             S )Nc                 2    g | ]}|j         d k    |j        S r   r  r0   s     r   rx   z$ObsRoute.domains.<locals>.<listcomp>  s&    CCCQ!,(*B*B*B*B*Br   rr   r7   s    r   r  zObsRoute.domains  s    CC$CCCCr   N)r=   rf   rg   rb   rj   r  rr   r   r   r  r    s7        JD D XD D Dr   r  c                       e Zd ZdZed             Zed             Zed             Zed             Zed             Z	dS )Mailboxr   c                 B    | d         j         dk    r| d         j        S d S Nr   r   r   r7   s    r   r   zMailbox.display_name  s)    7,,7'' -,r   c                     | d         j         S rG   r   r7   s    r   r   zMailbox.local_part      Aw!!r   c                     | d         j         S rG   r   r7   s    r   r   zMailbox.domain  s    Aw~r   c                 B    | d         j         dk    r| d         j        S d S r  )rb   r   r7   s    r   r   zMailbox.route  s(    7,,7=  -,r   c                     | d         j         S rG   r   r7   s    r   r   zMailbox.addr_spec  s    Aw  r   Nr   rr   r   r   r  r    s        J( ( X( " " X"   X ! ! X! ! ! X! ! !r   r  c                   8    e Zd ZdZed             ZexZxZxZZ	dS )InvalidMailboxr   c                     d S r$   rr   r7   s    r   r   zInvalidMailbox.display_name      tr   Nr   rr   r   r   r  r    sB        "J  X /;:J::%)))r   r  c                   6     e Zd ZdZdZe fd            Z xZS )Domainr   Fc                 t    d                     t                      j                                                  S Nr-   r6   r%   r   splitr?   s    r   r   zDomain.domain  '    wwuww}**,,---r   )r=   rf   rg   rb   rK   rj   r   rk   rl   s   @r   r  r    sL        JM. . . . X. . . . .r   r  c                       e Zd ZdZdS )DotAtomdot-atomNr|   rr   r   r   r   r     s        JJJr   r   c                       e Zd ZdZdZdS )DotAtomTextzdot-atom-textTNr=   rf   rg   rb   rK   rr   r   r   r#  r#    s         JMMMr   r#  c                       e Zd ZdZdZdS )NoFoldLiteralzno-fold-literalFNr$  rr   r   r   r&  r&    s        "JMMMr   r&  c                   n    e Zd ZdZdZed             Zed             Zed             Zed             Z	dS )AddrSpecr   Fc                     | d         j         S rG   r   r7   s    r   r   zAddrSpec.local_part  r  r   c                 F    t          |           dk     rd S | d         j        S )N   r   )r   r   r7   s    r   r   zAddrSpec.domain  s"    t99q==4Bxr   c                     t          |           dk     r| d         j        S | d         j                                        | d         j        z   | d         j                                        z   S )Nr+  r   r   r   )r   r   rstriplstripr7   s    r   r   zAddrSpec.value$  sW    t99q==7= Aw}##%%d1gm3DGM4H4H4J4JJJr   c                     t          | j                  }t          |          t          |t          z
            k    rt	          | j                  }n| j        }| j        |dz   | j        z   S |S )N@)setr   r   DOT_ATOM_ENDSr    r   )r(   namesetlps      r   r   zAddrSpec.addr_spec*  se    do&&w<<#gm34444do..BBB;"8dk))	r   N)
r=   rf   rg   rb   rK   rj   r   r   r   r   rr   r   r   r(  r(    s        JM" " X"   X
 K K XK
   X  r   r(  c                       e Zd ZdZdZdS )ObsLocalPartzobs-local-partFNr$  rr   r   r   r6  r6  6  s        !JMMMr   r6  c                   L     e Zd ZdZdZed             Ze fd            Z xZS )DisplayNamezdisplay-nameFc                    t          |           }t          |          dk    r|j        S |d         j        dk    r|                    d           n7|d         d         j        dk    r t          |d         dd                    |d<   |d         j        dk    r|                                 n7|d         d         j        dk    r t          |d         d d                   |d<   |j        S )Nr   r   r   r   )r"   r   r   rb   pop)r(   r   s     r   r   zDisplayName.display_nameA  s    oos88q==9q6&&GGAJJJJ1vay#v--"3q6!"":..Ar7''GGIIII2wr{%//#CGCRCL11Byr   c                 t   d}| j         rd}n| D ]}|j        dk    rd}t          |           dk    rt|rrdx}}| d         j        dk    s| d         d         j        dk    rd}| d         j        dk    s| d         d         j        dk    rd}|t          | j                  z   |z   S t                      j        S )	NFTr   r   r-   r   rq   r   )r'   rb   r   r    r   r%   r   )r(   r   r2   prepostr+   s        r   r   zDisplayName.valueR  s    < 	!EE ! !<?22 Et99>>e>OC$Aw!6))T!WQZ-BF-J-JBx"F**d2hrl.Ev.M.M|D$5666t;;77= r   )	r=   rf   rg   rb   ri   rj   r   r   rk   rl   s   @r   r8  r8  <  sh        J  X  ! ! ! ! X! ! ! ! !r   r8  c                   B    e Zd ZdZdZed             Zed             ZdS )	LocalPartz
local-partFc                 X    | d         j         dk    r| d         j        S | d         j        S )Nr   r   )rb   r   r   r7   s    r   r   zLocalPart.valuek  s-    7007''7= r   c                 
   t           g}t           }d}| d         t           gz   D ]}|j        dk    r|r6|j        dk    r+|d         j        dk    rt          |d d                   |d<   t          |t                    }|rG|j        dk    r<|d         j        dk    r+|                    t          |dd                               n|                    |           |d         }|}t          |dd                   }|j        S )NFr   r   dotr   r   )DOTrb   r"   
isinstancer   r   )r(   r   last
last_is_tltokis_tls         r   r   zLocalPart.local_partr  s    e
7cU? 	 	C~'' /s~66H'611#D"I..BsI..E  $/U22F%//

9SW--....

3r7DJJAbD	""yr   N)r=   rf   rg   rb   rK   rj   r   r   rr   r   r   r?  r?  f  sR        JM! ! X!   X  r   r?  c                   L     e Zd ZdZdZe fd            Zed             Z xZS )DomainLiteralzdomain-literalFc                 t    d                     t                      j                                                  S r  r  r?   s    r   r   zDomainLiteral.domain  r  r   c                 8    | D ]}|j         dk    r	|j        c S d S )Nptextr   r   s     r   ipzDomainLiteral.ip  s8     	 	A|w&&w '	 	r   )	r=   rf   rg   rb   rK   rj   r   rN  rk   rl   s   @r   rJ  rJ    sg        !JM. . . . X.   X    r   rJ  c                       e Zd ZdZdZdZdS )MIMEVersionzmime-versionN)r=   rf   rg   rb   majorminorrr   r   r   rP  rP    s        JEEEEr   rP  c                   J    e Zd ZdZdZdZdZed             Zed             Z	dS )	Parameter	parameterFus-asciic                 .    | j         r| d         j        ndS r   )	sectionednumberr7   s    r   section_numberzParameter.section_number  s     "&6tAw~~Q6r   c                     | D ]N}|j         dk    r	|j        c S |j         dk    r-|D ]*}|j         dk    r|D ]}|j         dk    r|j        c c c S +OdS )Nr   r   r   r-   )rb   r   r   s     r   param_valuezParameter.param_value  s      	< 	<E7**++++?22" < <E'+???%* < <E$/7::','; ; ; ; ; ; ; ;  ;rr   N)
r=   rf   rg   rb   rX  extendedr   rj   rZ  r\  rr   r   r   rT  rT    s\        JIHG7 7 X7
   X  r   rT  c                       e Zd ZdZdS )InvalidParameterinvalid-parameterNr|   rr   r   r   r_  r_    s        $JJJr   r_  c                   (    e Zd ZdZed             ZdS )	Attribute	attributec                 V    | D ]%}|j                             d          r	|j        c S &d S )Nattrtext)rb   endswithr   r   s     r   r   zAttribute.stripped_value  sG     	# 	#E((44 #{"""#	# 	#r   Nr=   rf   rg   rb   rj   r   rr   r   r   rb  rb    s2        J# # X# # #r   rb  c                       e Zd ZdZdZdS )SectionsectionN)r=   rf   rg   rb   rY  rr   r   r   ri  ri    s        JFFFr   ri  c                   (    e Zd ZdZed             ZdS )Valuer   c                     | d         }|j         dk    r| d         }|j                             d          r|j        S | j        S )Nr   r   r   )r   rc  zextended-attribute)rb   rf  r   r   r   s     r   r   zValue.stripped_value  sS    Qv%%GE$$DF F 	(''zr   Nrg  rr   r   r   rl  rl    s2        J  X  r   rl  c                   2    e Zd ZdZdZed             Zd ZdS )MimeParametersmime-parametersFc              #     K   i }| D ]y}|j                             d          s|d         j         dk    r/|d         j                                        }||vrg ||<   ||                             |j        |f           z|                                D ]4\  }}t          |t          d                    }|d         d         }|j	        }|j
        sgt          |          dk    rT|d         d         dk    rB|d         d         j                            t          j        d                     |d d         }g }d}|D ]j\  }	}
|	|k    r`|
j
        s-|
j                            t          j        d                     @|
j                            t          j        d                     |dz  }|
j        }|
j
        r	 t           j                            |          }	 |                    |d	          }n-# t(          t*          f$ r |                    d
d	          }Y nw xY wt-          j        |          r+|
j                            t          j                               n1# t*          $ r$ t           j                            |d          }Y nw xY w|                    |           ld                    |          }||fV  6d S )NrU  r   rc  )keyr   z.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingsurrogateescaperV  zlatin-1)encodingr-   )rb   rf  r   stripr   rZ  itemssortedr   r   r]  r   r'   r   InvalidHeaderDefectr\  urllibparseunquote_to_bytesdecodeLookupErrorUnicodeEncodeErrorr   _has_surrogatesUndecodableBytesDefectunquoter6   )r(   paramsrQ   namepartsfirst_paramr   value_partsirZ  paramr   s               r   r  zMimeParameters.params  sF       	? 	?E#,,[99 Qx"k118>''))D6!!!t4L!5u =>>>>!<<>> 3	 3	KD%5jmm444E(1+K!)G ' &CJJNN8A;!##!HQK'..v/IH0J 0J K K K!"1"IE KA). !* !*%!Q&& !> I,,V-GI.K .K L L L ,,V-GF.H .H I I IQ)> RR & = =e D DP$)LL:K$L$LEE +-?@ P P P
 %*LL=N$O$OEEEP !077 R!M001N1P1PQQQ . P P P !' 4 4UY 4 O O	P  ""5))))GGK((E+g3	 3	s$   I&"G99'H#"H#&+JJc           	          g }| j         D ]S\  }}|r7|                    d                    |t          |                               >|                    |           Td                    |          }|rd|z   ndS )N{}={}z; rq   r-   )r  r   r<   r    r6   )r(   r  r  r   s       r   r8   zMimeParameters.__str__,  s    ; 	$ 	$KD% $gnnT<3F3FGGHHHHd####6""%-sV||2-r   N)r=   rf   rg   rb   rh   rj   r  r8   rr   r   r   ro  ro    sJ        "JOC C XCJ. . . . .r   ro  c                   (    e Zd ZdZed             ZdS )ParameterizedHeaderValueFc                 R    t          |           D ]}|j        dk    r	|j        c S i S )Nrp  )reversedrb   r  r   s     r   r  zParameterizedHeaderValue.params=  s>    d^^ 	$ 	$E#444|### 5	r   N)r=   rf   rg   rh   rj   r  rr   r   r   r  r  7  s4         O  X  r   r  c                       e Zd ZdZdZdZdZdS )ContentTypezcontent-typeFtextplainN)r=   rf   rg   rb   rK   maintypesubtyperr   r   r   r  r  E  s"        JMHGGGr   r  c                       e Zd ZdZdZdZdS )ContentDispositionzcontent-dispositionFN)r=   rf   rg   rb   rK   content_dispositionrr   r   r   r  r  L  s         &JMr   r  c                       e Zd ZdZdZdZdS )ContentTransferEncodingzcontent-transfer-encodingF7bitN)r=   rf   rg   rb   rK   r   rr   r   r   r  r  R  s        ,JM
CCCr   r  c                       e Zd ZdZdZdS )HeaderLabelzheader-labelFNr$  rr   r   r   r  r  X  s        JMMMr   r  c                       e Zd ZdZdZd ZdS )MsgIDzmsg-idFc                 0    t          |           |j        z   S r$   )r   lineseprV   s     r   rW   z
MsgID.folda  s    4yy6>))r   N)r=   rf   rg   rb   rK   rW   rr   r   r   r  r  ]  s-        JM* * * * *r   r  c                       e Zd ZdZdS )	MessageIDz
message-idNr|   rr   r   r   r  r  f  s        JJJr   r  c                       e Zd ZdZdS )InvalidMessageIDzinvalid-message-idNr|   rr   r   r   r  r  j  s        %JJJr   r  c                       e Zd ZdZdS )HeaderheaderNr|   rr   r   r   r  r  n  r   r   r  c                   ~     e Zd ZdZdZdZ fdZ fdZd Ze	d             Z
d fd	Zd Ze	d	             Zd
 Z xZS )TerminalTc                 h    t                                          | |          }||_        g |_        |S r$   )r%   __new__rb   r'   )clsr   rb   r(   r+   s       r   r  zTerminal.__new__|  s-    wwsE**$r   c                     d                     | j        j        t                                                                S r:   r;   r?   s    r   r>   zTerminal.__repr__  s,    t~68H8H8J8JKKKr   c                 N    t          | j        j        dz   | j        z              d S )N/)r[   r+   r=   rb   r7   s    r   r^   zTerminal.pprint  s'    dn%+do=>>>>>r   c                 *    t          | j                  S r$   )listr'   r7   s    r   rD   zTerminal.all_defects  s    DL!!!r   r-   c           	          d                     || j        j        | j        t	                                                      | j        sdnd                     | j                            gS )Nz{}{}/{}({}){}r-   z {})r<   r+   r=   rb   r%   r>   r'   )r(   rZ   r+   s     r   r`   zTerminal._pp  s_    &&N#OGGlBBBT\(B(B   	r   c                     d S r$   rr   r7   s    r   pop_trailing_wszTerminal.pop_trailing_ws  r  r   c                     g S r$   rr   r7   s    r   rP   zTerminal.comments  s    	r   c                 .    t          |           | j        fS r$   )r   rb   r7   s    r   __getnewargs__zTerminal.__getnewargs__  s    4yy$/**r   re   )r=   rf   rg   rK   ri   rh   r  r>   r^   rj   rD   r`   r  rP   r  rk   rl   s   @r   r  r  v  s        MO    L L L L L? ? ? " " X"          X+ + + + + + +r   r  c                   *    e Zd Zed             Zd ZdS )WhiteSpaceTerminalc                     dS rp   rr   r7   s    r   r   zWhiteSpaceTerminal.value  rs   r   c                 $    | o| d         t           v S rG   WSPr7   s    r   rH   z!WhiteSpaceTerminal.startswith_fws  s    &Q3&r   Nr=   rf   rg   rj   r   rH   rr   r   r   r  r    s<          X' ' ' ' 'r   r  c                   *    e Zd Zed             Zd ZdS )ValueTerminalc                     | S r$   rr   r7   s    r   r   zValueTerminal.value  s    r   c                     dS )NFrr   r7   s    r   rH   zValueTerminal.startswith_fws  s    ur   Nr  rr   r   r   r  r    s<          X    r   r  c                   *    e Zd Zed             Zd ZdS )EWWhiteSpaceTerminalc                     dS r  rr   r7   s    r   r   zEWWhiteSpaceTerminal.value  s    rr   c                     dS r  rr   r7   s    r   r8   zEWWhiteSpaceTerminal.__str__  s    rr   N)r=   rf   rg   rj   r   r8   rr   r   r   r  r    s<          X    r   r  c                       e Zd ZdS )_InvalidEwErrorN)r=   rf   rg   rr   r   r   r  r    s        ;;r   r  rB  ,zlist-separatorFr0  zroute-component-markerz([{}]+)r-   z[^{}]+z[\x00-\x20\x7F]c                    	 t          |           }|r,| j                            t          j        |                     t          j        |           r.| j                            t          j        d                     d S d S )Nz*Non-ASCII characters found in header token)_non_printable_finderr'   r   r   NonPrintableDefectr   r  r  )xtextnon_printabless     r   _validate_xtextr    s    J*511N HV6~FFGGGU## ;V:8: : 	; 	; 	; 	; 	;; ;r   c                 n   	 t          | d          ^}}g }d}d}t          t          |                    D ]D}||         dk    r
|rd}d}nd}|rd}n||         |v r n!|                    ||                    E|dz   }d                    |          d                    ||d          g|z             |fS )Nr   Fr   Tr-   )_wsp_splitterranger   r   r6   )r   endcharsfragment	remaindervcharsescapehad_qpposs           r   _get_ptext_to_endcharsr    s     )22HyFFFS]]##  C=D    	FFc]h&&Ehsm$$$$Ag776??BGGXcdd^$4y$@AA6IIr   c                     	 |                                  }t          | d t          |           t          |          z
           d          }||fS )Nfws)r.  r  r   )r   newvaluer  s      r   get_fwsr    sK     ||~~H
U#<CJJs8}}$<#<=u
E
EC=r   vtextc                    	 t                      }|                     d          s't          j        d                    |                     | dd                              dd          ^}}|| dd          k    r't          j        d                    |                     d                    |          }t          |          dk    rW|d         t          v rH|d         t          v r9|	                    d          dk     r |                    dd          ^}}|dz   |z   }t          |                                          dk    r,|j
                            t          j        d	                     | |_        d                    |          } 	 t          j        d|z   dz             \  }}}	}
n<# t           t"          f$ r( t%          d
                    |j                            w xY w||_        |	|_        |j
                            |
           |r|d         t,          v r(t/          |          \  }}|                    |           9t1          |d          ^}}t3          ||          }t5          |           |                    |           d                    |          }|| r;| d         t,          vr,|j
                            t          j        d                     || fS )N=?z"expected encoded word but found {}r   z?=r   r-   r   ?zwhitespace inside encoded wordz!encoded word format invalid: '{}'z.missing trailing whitespace after encoded-word)r   
startswithr   HeaderParseErrorr<   r  r6   r   r   countr'   r   rx  r   _ewr|  
ValueErrorKeyErrorr  r   r   rO   r  r  r  r  r  )r   terminal_typeewrG  r  remstrrestr  r   r   r'   rQ   charsr  s                 r   get_encoded_wordr     s    
BD!! @%077>>@ @ 	@ABBioodA..OC)
eABBi%077>>@ @ 	@WWYFFaq	Yq	Y		#!<<a00yDj4
399;;!

&4,. . 	/ 	/ 	/BFGGIE@'*z$*t2C'D'D$gtWW! @ @ @/66rv>>@ @ 	@@ BJBGJg
 	"7c>>!$--KE4IIe)$22	e]33
		%wwy!!  	"  ?q$$

&4<> > 	? 	? 	?u9s   F. .9G'c                    	 t                      }| r| d         t          v r(t          |           \  }} |                    |           :d}|                     d          r	 t          | d          \  }} d}t          |          dk    r?|d         j        dk    r.|j                            t          j
        d                     d}|r=t          |          d	k    r*|d
         j        dk    rt          |d         d          |d<   |                    |           # t          $ r d}Y nt          j        $ r Y nw xY wt          | d	          ^}}|r1t                              |          r|                     d          ^}}t%          |d          }t'          |           |                    |           d                    |          } | |S )Nr   Tr  utextr   r  z&missing whitespace before encoded wordFr   r   r-   )rz   r  r  r   r  r  r   rb   r'   r   rx  r  r  r  r  rfc2047_matchersearch	partitionr  r  r6   )r   r{   rQ   valid_ewhave_wsrG  r  r  s           r   get_unstructuredr  Q  s)   , )**L
 (#8s??"5>>LE5&&&D!! 	/w??u |$$q((#B'2e;;$,33F4ND5F 5F G G G"' 5s<00144#B'2nDD+?(,e,5 ,5R(##E***% # ! ! ! *    " (q11i  	4..s33 	4#ood33OC)c7++E"""	""Q  (#R s   "D D>-D>=D>c                 r    	 t          | d          \  }} }t          |d          }t          |           || fS )Nz()rM  )r  r  r  r   rM  _s      r   get_qp_ctextr    sE    
 -UD99OE5!ug..EE%<r   c                 r    	 t          | d          \  }} }t          |d          }t          |           || fS )Nr   rM  )r  r  r  r  s      r   get_qcontentr    sE     -UC88OE5!%))EE%<r   c                    	 t          |           }|s't          j        d                    |                     |                                }| t          |          d          } t          |d          }t          |           || fS )Nzexpected atext but found '{}'atext)_non_atom_end_matcherr   r  r<   r   r   r  r  )r   mr  s      r   	get_atextr    s    
 	e$$A ;%+22599; ; 	;GGIIE#e**++E%))EE%<r   c                    	 | d         dk    r't          j        d                    |                     t                      }| dd          } | r3| d         dk    r't	          |           \  }} |                    |           | r/| d         dk    r"| d         t          v rt          |           \  }} n| d d         dk    rd}	 t          |           \  }} |j	                            t          j
        d                     d	}n'# t           j        $ r t	          |           \  }} Y nw xY w|rNt          |          dk    r;|d
         j        dk    r*|d         j        dk    rt          |d
         d          |d
<   nt	          |           \  }} |                    |           | r| d         dk    "| s0|j	                            t          j
        d                     || fS || dd          fS )Nr   r   zexpected '"' but found '{}'r   r   r  Fz!encoded word inside quoted stringTr   r  r  r   z"end of header inside quoted string)r   r  r<   r   r  r   r  r  r  r'   rx  r   rb   r  )r   bare_quoted_stringrQ   r  s       r   get_bare_quoted_stringr    sJ    Qx3%*11%88: : 	:)++!""IE )qS#E**u!!%(((
 )E!HOO8s??"5>>LE552A2Y$H3/66u"*11&2L739 39 : : :* 3 3 3+E22uuu3  7C 233a77&r*5>>*2.9^KK-A*2..7 .7&r* (..LE5!!%(((+  )E!HOO,  )"))&*D0+2 +2 	3 	3 	3!5((uQRRy((s   A D !D*)D*c                 "   	 | r3| d         dk    r't          j        d                    |                     t                      }| dd          } | r| d         dk    rv| d         t          v rt          |           \  }} n1| d         dk    rt          |           \  }} nt          |           \  }} |                    |           | r| d         dk    v| s0|j	                            t          j
        d                     || fS || dd          fS )Nr   r   zexpected '(' but found '{}'r   r   zend of header inside comment)r   r  r<   r   r  r  get_commentr  r   r'   rx  )r   rv   rQ   s      r   r  r    s7   
  9qS%)00779 9 	9iiG!""IE
 E!HOO8s??"5>>LE551X__&u--LE55'..LE5u  E!HOO  v9* ,  , 	- 	- 	-~E!""Ir   c                     	 t                      }| ri| d         t          v rZ| d         t          v rt          |           \  }} nt	          |           \  }} |                    |           | r| d         t          v Z|| fS rG   )r   CFWS_LEADERr  r  r  r   )r   r   rQ   s      r   get_cfwsr
    s     ::D
 E!H++8s??"5>>LE55&u--LE5E  E!H++ ;r   c                 V   	 t                      }| r6| d         t          v r't          |           \  }} |                    |           t	          |           \  }} |                    |           | r6| d         t          v r't          |           \  }} |                    |           || fS rG   )r   r	  r
  r   r  )r   quoted_stringrQ   s      r   get_quoted_stringr    s     !NNM $q[((uU###)%00LE5 $q[((uU###%r   c                 f   	 t                      }| r6| d         t          v r't          |           \  }} |                    |           | r6| d         t          v r't          j        d                    |                     |                     d          r;	 t          |           \  }} n9# t
          j        $ r t          |           \  }} Y nw xY wt          |           \  }} |                    |           | r6| d         t          v r't          |           \  }} |                    |           || fS )Nr   zexpected atom but found '{}'r  )r   r	  r
  r   	ATOM_ENDSr   r  r<   r  r  r  )r   r   rQ   s      r   get_atomr  '  sN    66D q[((uE :qY&&%*11%88: : 	: (	,+E22LE55& 	, 	, 	, %U++LE555	,
 !''uKK q[((uE;s   B) )!CCc                     	 t                      }| r| d         t          v r't          j        d                    |                     | ry| d         t          vrjt          |           \  }} |                    |           | r0| d         dk    r$|                    t                     | dd          } | r| d         t          vj|d         t          u r*t          j        d                    d| z                       || fS )Nr   z8expected atom at a start of dot-atom-text but found '{}'r	   r   r   z4expected atom at end of dot-atom-text but found '{}')r#  r  r   r  r<   r  r   rC  )r   dot_atom_textrQ   s      r   get_dot_atom_textr  B  s     MMM :E!H	))% '++16%==: : 	:
 E!HI-- ''uU### 	U1X__  %%%!""IE  E!HI-- RC% '#VCI..0 0 	0%r   c                    	 t                      }| d         t          v r't          |           \  }} |                    |           |                     d          r;	 t          |           \  }} n9# t          j        $ r t          |           \  }} Y nw xY wt          |           \  }} |                    |           | r6| d         t          v r't          |           \  }} |                    |           || fS )Nr   r  )	r   r	  r
  r   r  r  r   r  r  )r   dot_atomrQ   s      r   get_dot_atomr  U  s   
 yyHQx;u 0	4+E22LE55& 	4 	4 	4 -U33LE555	4
 )//uOOE q[((uU?s   A/ /!BBc                 b   	 | d         t           v rt          |           \  }} nd }| st          j        d          | d         dk    rt	          |           \  }} nH| d         t
          v r't          j        d                    |                     t          |           \  }} ||g|d d<   || fS )Nr   z5Expected 'atom' or 'quoted-string' but found nothing.r   z1Expected 'atom' or 'quoted-string' but found '{}')r	  r
  r   r  r  SPECIALSr<   r  )r   leaderrQ   s      r   get_wordr  n  s     Qx;  E%CE E 	EQx}}(//uu	qX		% '77=ve}}F F 	F  uHbqb	%<r   c                    	 t                      }	 t          |           \  }} |                    |           nA# t          j        $ r/ |j                            t          j        d                     Y nw xY w| r
| d         t          vr| d         dk    rQ|                    t                     |j                            t          j	        d                     | dd          } n	 t          |           \  }} nd# t          j        $ rR | d         t          v r?t          |           \  }} |j                            t          j	        d                     n Y nw xY w|                    |           | r| d         t          v|| fS )Nzphrase does not start with wordr   r	   zperiod in 'phrase'r   zcomment found without atom)r~   r  r   r   r  r'   rx  PHRASE_ENDSrC  ObsoleteHeaderDefectr	  r
  )r   r   rQ   s      r   
get_phraser    s   
 XXF0ue" 0 0 0f8-/ / 	0 	0 	0 	0 	00  !E!HK//8S==MM#N!!&"=$#& #& ' ' '!""IEE'uu*   8{**#+E??LE5N))&*E4+6 +6 7 7 7 7 7 7 MM%   !  !E!HK//" 5=s"   '9 ;A76A7*C= =AEEc                    	 t                      }d }| d         t          v rt          |           \  }} | s't          j        d                    |                     	 t          |           \  }} nh# t          j        $ rV 	 t          |           \  }} n?# t          j        $ r- | d         dk    r| d         t          v r t                      }Y nw xY wY nw xY w||g|d d<   |
                    |           | r| d         dk    s| d         t          vrt          t          |          | z             \  }} |j        dk    r-|j        
                    t          j        d                     n,|j        
                    t          j        d                     ||d<   	 |j                            d           n<# t&          $ r/ |j        
                    t          j        d                     Y nw xY w|| fS )	Nr   z"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?  r	  r
  r   r  r<   r  r  r  r"   r   get_obs_local_partr   rb   r'   rx  r  r   encoder~  NonASCIILocalPartDefect)r   r   r  rQ   obs_local_parts        r   get_local_partr&    sl    JFQx;  @%077>>@ @ 	@ #E**uu"      	 #E??LE55& 	  	  	 Qx4E!H$;$;KKEEE	   Hbqb	e '%(D..E!HK$?$? 23z??U3J K K$(@@@%%f&@N'P 'P Q Q Q Q %%f&A>'@ '@ A A A&
1>(((( > > >!!&"@;#= #= 	> 	> 	> 	> 	>> usH   A0 0C BC9CCCCC F; ;6G43G4c                     	 t                      }d}| r| d         dk    s| d         t          vr| d         dk    rU|r,|j                            t	          j        d                     |                    t                     d}| dd          } | d         dk    rb|                    t          | d         d                     | dd          } |j                            t	          j        d	                     d}|r=|d
         j        dk    r,|j                            t	          j        d                     	 t          |           \  }} d}n7# t          j
        $ r% | d         t          vr t          |           \  }} Y nw xY w|                    |           | r| d         dk    | d         t          v|d         j        dk    s"|d         j        dk    r=|d         j        dk    r,|j                            t	          j        d                     |d
         j        dk    s"|d
         j        dk    r=|d         j        dk    r,|j                            t	          j        d                     |j        rd|_        || fS )NFr   r   r	   zinvalid repeated '.'Tr   misplaced-specialz/'\' character outside of quoted-string/ccontentr   rB  zmissing '.' between wordsr   z!Invalid leading '.' in local partr  z"Invalid trailing '.' in local partr   )r6  r  r'   r   r   rx  rC  r  rb   r  r  r	  r
  )r   r%  last_non_ws_was_dotrQ   s       r   r"  r"    s   !^^N
 %U1Xt^^uQx{'B'B8s??" -&--f.H*/, /, - - -!!#&&&"&!""IE1Xt^^!!-a0C#E #E F F F!""IE"))&*DB+D +D E E E"' 	.nR0;uDD"))&*D++- +- . . .	+#E??LE5"'& 	+ 	+ 	+Qx{**#E??LE555	+ 	e$$$7  %U1Xt^^uQx{'B'B8 	q$--1(&001(%//%%f&@/'1 '1 	2 	2 	2r%..2)6112)500%%f&@0'2 '2 	3 	3 	3 =$<!5  s    E 1F	F	c                     	 t          | d          \  }} }t          |d          }|r,|j                            t	          j        d                     t          |           || fS )Nz[]rM  z(quoted printable found in domain-literal)r  r  r'   r   r   r  r  )r   rM  r  s      r   	get_dtextr+    sz    
 2%>>E5&%))E 9V868 8 	9 	9 	9E%<r   c                     | rdS |                     t          j        d                     |                     t          dd                     dS )NFz"end of input inside domain-literal]domain-literal-endT)r   r   rx  r  )r   domain_literals     r   _check_for_early_dl_endr0     s]     u&4,. . / / /--ABBCCC4r   c                 N   	 t                      }| d         t          v r't          |           \  }} |                    |           | st	          j        d          | d         dk    r't	          j        d                    |                     | dd          } t          | |          r|| fS |                    t          dd                     | d         t          v r't          |           \  }} |                    |           t          |           \  }} |                    |           t          | |          r|| fS | d         t          v r't          |           \  }} |                    |           t          | |          r|| fS | d         dk    r't	          j        d                    |                     |                    t          dd	                     | dd          } | r6| d         t          v r't          |           \  }} |                    |           || fS )
Nr   zexpected domain-literal[z6expected '[' at start of domain-literal but found '{}'r   zdomain-literal-startr-  z4expected ']' at end of domain-literal but found '{}'r.  )rJ  r	  r
  r   r   r  r<   r0  r  r  r  r+  )r   r/  rQ   s      r   get_domain_literalr3  (  s;    #__NQx;ue$$$ A%&?@@@Qx3% '!!'0 0 	0!""IEun55 %u$$--CDDEEEQx3u~~ue$$$U##LE5%   un55 %u$$Qx3u~~ue$$$un55 %u$$Qx3% '!!'0 0 	0--ABBCCC!""IE %q[((ue$$$5  r   c                    	 t                      }d }| d         t          v rt          |           \  }} | s't          j        d                    |                     | d         dk    r5t          |           \  }} ||g|d d<   |                    |           || fS 	 t          |           \  }} n'# t          j        $ r t          |           \  }} Y nw xY w| r | d         dk    rt          j        d          ||g|d d<   |                    |           | r| d         dk    r|j
                            t          j        d                     |d         j        dk    r|d         |d d <   | rc| d         dk    rW|                    t                     t          | d	d                    \  }} |                    |           | r| d         dk    W|| fS )
Nr   zexpected domain but found '{}'r2  r0  zInvalid Domainr	   z(domain is not a dot-atom (contains CFWS)r!  r   )r  r	  r
  r   r  r<   r3  r   r  r  r'   r  rb   rC  )r   r   r  rQ   s       r   
get_domainr5  O  s    XXFFQx;  <%,33E::< < 	<Qx3)%00uE"1"Ieu}'#E**uu" ' ' 'uuu' 8qS%&6777Hbqb	
MM% !qSf968 8 	9 	9 	9!9:--q	F111I 	!aCMM##E!""I..LE5MM%     	!aC 5=s   B1 1!CCc                    	 t                      }t          |           \  }} |                    |           | r| d         dk    r0|j                            t	          j        d                     || fS |                    t          dd                     t          | dd                    \  }} |                    |           || fS )Nr   r0  z#addr-spec local part with no domainaddress-at-symbolr   )r(  r&  r   r'   r   rx  r  r5  )r   r   rQ   s      r   get_addr_specr8  u  s     

I!%((LE5U  E!HOO  !;1"3 "3 	4 	4 	4%]3(;<<===eABBi((LE5Uer   c                    	 t                      }| r| d         dk    s| d         t          v r| d         t          v r(t          |           \  }} |                    |           n0| d         dk    r$|                    t                     | dd          } | r| d         dk    u| d         t          v | r| d         dk    r't          j        d                    |                     |                    t                     t          | dd                    \  }} |                    |           | r| d         dk    r|                    t                     | dd          } | sn| d         t          v r't          |           \  }} |                    |           | d         dk    rI|                    t                     t          | dd                    \  }} |                    |           | r| d         dk    | st          j        d          | d         dk    r't          j        d                    |                     |                    t          dd	                     || dd          fS )
Nr   r  r   r0  z(expected obs-route domain but found '{}'z%end of header while parsing obs-route:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker)r  r	  r
  r   ListSeparatorr   r  r<   RouteComponentMarkerr5  r  )r   	obs_routerQ   s      r   get_obs_router>    s    

I
 U1Xs]]eAh+&=&=8{""#E??LE5U####1X__]+++!""IE  U1Xs]]eAh+&=&=  FE!HOO%6==eDDF F 	F)***eABBi((LE5U
 $E!HcMM'''abb	 	8{""#E??LE5U###8s??1222%eABBi00LE5U###  $E!HcMM  O%&MNNNQx3% (''-ve}}6 6 	6]3(ABBCCCeABBir   c                 (   	 t                      }| d         t          v r't          |           \  }} |                    |           | r| d         dk    r't	          j        d                    |                     |                    t          dd                     | dd          } | d         dk    r]|                    t          dd                     |j                            t	          j	        d                     | dd          } || fS 	 t          |           \  }} n# t          j        $ r 	 t          |           \  }} |j                            t	          j        d	                     n:# t          j        $ r( t	          j        d
                    |                     w xY w|                    |           t          |           \  }} Y nw xY w|                    |           | r| d         dk    r| dd          } n,|j                            t	          j	        d                     |                    t          dd                     | r6| d         t          v r't          |           \  }} |                    |           || fS )Nr   <z"expected angle-addr but found '{}'zangle-addr-startr   >zangle-addr-endznull 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   r	  r
  r   r   r  r<   r  r'   rx  r8  r>  r  )r   
angle_addrrQ   s      r   get_angle_addrrC    s    JQx;u%    @E!HOO%077>>@ @ 	@mC);<<===!""IE Qx3--=>>???!!&"<*#, #, 	- 	- 	-abb	5  ,$U++uu" 	, 	, 	,	P(//LE5%%f&A<'> '> ? ? ? ?& 	P 	P 	P)@GGNNP P P	P 	%   $U++uuu	, e 3qSabb	!!&"<0#2 #2 	3 	3 	3mC)9::;;; !q[((u%   us*   D% %G5>E43G47F++*GGc                     	 t                      }t          |           \  }} |                    |d d                     |j        d d          |_        || fS r$   )r8  r  rO   r'   )r   r   rQ   s      r   get_display_namerE    s]     ==Le$$LE5aaa!!! =+Lr   c                 j   	 t                      }d }| d         t          v r;t          |           \  }} | s't          j        d                    |                    | d         dk    r| d         t          v r't          j        d                    |                     t          |           \  }} | s't          j        d                    |                    ||g|d         d d<   d }|                    |           t          |           \  }} ||g|d d<   |                    |           || fS )Nr   z!expected name-addr but found '{}'r@  )
r   r	  r
  r   r  r<   r  rE  r   rC  )r   	name_addrr  rQ   s       r   get_name_addrrH    sf    

IFQx;  	D)3::6BBD D DQx38{"")3::5AAC C C'..u 	C)3::5AAC C C"8E!HRaRLF!%((LE5Hbqb	Uer   c                    	 t                      }	 t          |           \  }} nc# t          j        $ rQ 	 t	          |           \  }} n:# t          j        $ r( t          j        d                    |                     w xY wY nw xY wt          d |j        D                       rd|_        |	                    |           || fS )Nzexpected mailbox but found '{}'c              3   J   K   | ]}t          |t          j                  V  d S r$   )rD  r   rx  r0   s     r   r3   zget_mailbox.<locals>.<genexpr>  sC       3 3 a344 3 3 3 3 3 3r   r   )
r  rH  r   r  r8  r<   anyrD   rb   r   )r   r   rQ   s      r   get_mailboxrL  	  s   
 iiGA$U++uu" A A A	A(//LE55& 	A 	A 	A)188??A A A	A 5A  3 3 % 13 3 3 3 3 /.NN5E>&   $ BAB7A>>BBc                 ,   	 t                      }| r| d         |vrv| d         t          v r4|                    t          | d         d                     | dd          } n't	          |           \  }} |                    |           | r
| d         |vv|| fS )Nr   r(  r   )r  r  r   r  r  )r   r  invalid_mailboxrQ   s       r   get_invalid_mailboxrP    s     %&&O
 *E!HH,,8{""""=q1D$F $F G G G!""IEE%e,,LE5""5)))  *E!HH,, E!!r   c                    	 t                      }| rd| d         dk    rW	 t          |           \  }} |                    |           n}# t          j        $ rj d }| d         t
          v rt          |           \  }} | r
| d         dv rB|                    |           |j                            t          j        d                     nt          | d          \  }} ||g|d d<   |                    |           |j                            t          j
        d                     n| d         dk    r-|j                            t          j        d                     n^t          | d          \  }} ||g|d d<   |                    |           |j                            t          j
        d                     Y nw xY w| rm| d         dvrc|d         }d|_        t          | d          \  }} |                    |           |j                            t          j
        d                     | r0| d         dk    r$|                    t                     | d	d          } | r| d         dk    W|| fS )
Nr   ;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listr  r   r   r   )r   rL  r   r   r  r	  r
  r'   r  rP  rx  rb   rO   r;  )r   mailbox_listrQ   r  r   s        r   get_mailbox_listrT  0  s   
 ==L
 (E!HOO	8&u--LE5&&&&& 	8 	8 	8FQx;&& ( 
<aD 0 0 ''/// (//0K719 19 : : : : $7ud#C#CLE5)%+Hbqb	 ''... (//0J91; 1; < < < <qS$++F,G3-5 -5 6 6 6 6  35$??u%!'E"1"I##E***$++F,F5-7 -7 8 8 8/	82  	4U1XT)) #2&G!2G.ud;;LE5NN5!!! ''(B1)3 )3 4 4 4 	U1X__...!""IEQ  (E!HOOR s   'A
 
E7GGc                    	 t                      }| s0|j                            t          j        d                     || fS d }| r| d         t
          v r~t          |           \  }} | sE|j                            t          j        d                     |                    |           || fS | d         dk    r|                    |           || fS t          |           \  }} t          |j	                  dk    r\||                    |           |
                    |           |j                            t          j        d                     || fS ||g|d d<   |                    |           || fS )Nzend of header before group-listr   zend of header in group-listrR  zgroup-list with empty entries)r   r'   r   r   rx  r	  r
  rT  r   r   rO   r  )r   
group_listr  rQ   s       r   get_group_listrW  i  s    J !!!&"<-#/ #/ 	0 	0 	05  F %q[((  	% %%f&@-'/ '/ 0 0 0f%%%u$$8s??f%%%u$$#E**LE5
5""f%%%%   !!&"=+#- #- 	. 	. 	.5  Hbqb	eur   c                    	 t                      }t          |           \  }} | r| d         dk    r't          j        d                    |                     |                    |           |                    t          dd                     | dd          } | r;| d         dk    r/|                    t          dd                     || dd          fS t          |           \  }} |                    |           | s-|j                            t          j	        d                     n3| d         dk    r't          j        d	                    |                     |                    t          dd                     | dd          } | r6| d         t          v r't          |           \  }} |                    |           || fS )
Nr   r:  z8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorr   rR  zgroup-terminatorzend of header in groupz)expected ';' at end of group but found {})r   rE  r   r  r<   r   r  rW  r'   rx  r	  r
  )r   r   rQ   s      r   	get_grouprY    s    GGE#E**LE5 9E!HOO% '**0&--9 9 	9	LL	LLs$CDDEEE!""IE  qS]3(:;;<<<eABBi!%((LE5	LL GV7$& & 	' 	' 	' 	'	qS%7>>uEEG G 	G	LLs$677888!""IE q[((uU%<r   c                 @   	 t                      }	 t          |           \  }} nc# t          j        $ rQ 	 t	          |           \  }} n:# t          j        $ r( t          j        d                    |                     w xY wY nw xY w|                    |           || fS )Nzexpected address but found '{}')r   rY  r   r  rL  r<   r   )r   r   rQ   s      r   get_addressr[    s      iiGA ''uu" A A A	A&u--LE55& 	A 	A 	A)188??A A A	A 5A NN5E>rM  c                    	 t                      }| rm	 t          |           \  }} |                    |           n# t          j        $ r}d }| d         t
          v rt          |           \  }} | r| d         dk    rC|                    |           |j                            t          j        d                     nt          | d          \  }} ||g|d d<   |                    t          |g                     |j                            t          j        d                     n| d         dk    r-|j                            t          j        d                     nlt          | d          \  }} ||g|d d<   |                    t          |g                     |j                            t          j        d                     Y d }~nd }~ww xY w| ru| d         dk    ri|d         d         }d|_        t          | d          \  }} |                    |           |j                            t          j        d                     | r$|                    t                     | dd          } | m|| fS )	Nr   r  z"address-list entry with no contentzinvalid address in address-listzempty element in address-listr   r   r   )r   r[  r   r   r  r	  r
  r'   r  rP  r   rx  rb   rO   r;  )r   address_listrQ   errr  r   s         r   get_address_listr_    s    ==L
 (	8&u--LE5&&&&& 	8 	8 	8FQx;&& ( 
<aC ''/// (//0K<1> 1> ? ? ? ? $7uc#B#BLE5)%+Hbqb	 ''(8(8999 (//0J91; 1; < < < <qS$++F,G3-5 -5 6 6 6 6  35#>>u%!'E"1"I##GUG$4$4555$++F,F5-7 -7 8 8 8/	82  	4U1X__ #2&q)G!2G.uc::LE5NN5!!! ''(B1)3 )3 4 4 4 	...!""IEQ  (R s   '= GFGGc                 H   	 t                      }| s't          j        d                    |                     | d         dk    r't          j        d                    |                     |                    t          dd                     | dd          } t          |           \  }} |                    |           | r| d         dk    r't          j        d                    |                     |                    t          dd	                     || dd          fS )
Nz'expected no-fold-literal but found '{}'r   r2  z;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startr   r-  z9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)r&  r   r  r<   r   r  r+  )r   no_fold_literalrQ   s      r   get_no_fold_literalrb     s4   #ooO E%5<<UCCE E 	EQx3%#VE]], , 	, =.EFFGGG!""IEU##LE55!!! ,E!HOO%#VE]], , 	, =.CDDEEEE!""I%%r   c                 (   	 t                      }| r6| d         t          v r't          |           \  }} |                    |           | r| d         dk    r't	          j        d                    |                     |                    t          dd                     | dd          } 	 t          |           \  }} n# t          j        $ r} 	 t          |           \  }} |j
                            t	          j        d                     n:# t          j        $ r( t	          j        d                    |                     w xY wY nw xY w|                    |           | r| d         dk    rk|j
                            t	          j        d	                     | r9| d         d
k    r-|                    t          d
d                     | dd          } || fS |                    t          dd                     | dd          } 	 t          |           \  }} n# t          j        $ r 	 t          |           \  }} n# t          j        $ r}	 t          |           \  }} |j
                            t	          j        d                     n:# t          j        $ r( t	          j        d                    |                     w xY wY d }~nd }~ww xY wY nw xY w|                    |           | r| d         d
k    r| dd          } n,|j
                            t	          j        d                     |                    t          d
d                     | r6| d         t          v r't          |           \  }} |                    |           || fS )Nr   r@  zexpected msg-id but found '{}'zmsg-id-startr   zobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'r0  zmsg-id with no id-rightrA  z
msg-id-endr7  zobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)r  r	  r
  r   r   r  r<   r  r  r"  r'   r  rx  rb  r5  )r   msg_idrQ   es       r   
get_msg_idrf    s   
 WWF q[((ue <E!HOO%,33E::< < 	<
MM-^44555!""IE1(//uu" 	1 	1 	1	1-e44LE5N!!&"=,#. #. / / / /& 	1 	1 	1)""(&--1 1 1	1/ /		1 MM% 	E!HOOf8%' ' 	( 	( 	(
  	U1X__MM-\::;;;!""IEu}
MM-%899:::!""IE5(//uu" 5 5 5
	5.u55LE55& 	5 	5 	55)%00u%%f&A1'3 '3 4 4 4 4* 5 5 5-&&,fUmm5 5 554 4 4 4 4	55 MM% /qSabb	f8,. . 	/ 	/ 	/
MM-\22333 q[((ue5=sx   +B> >E
>DE
7EE
	E
	H K,H?>K?K>JK7KKKKKKc                    	 t                      }	 t          |           \  }} |                    |           | r?|j                            t	          j        d                    |                                ny# t          j        $ rg}t          |           }t          |          }|j                            t	          j        d                    |                               Y d }~nd }~ww xY w|S )NzUnexpected {!r}zInvalid msg-id: {!r})
r  rf  r   r'   r   rx  r<   r  r  r  )r   
message_idrQ   exs       r   parse_message_idrj  [  s#   J2!%((u%     	2%%f&@!((//'1 '1 2 2 2 " K K K ''%e,,
!!&'='D'DR'H'HII	K 	K 	K 	K 	K 	K 	K 	KK s   'A: :C0	AC++C0c                    	 t                      }| s.|j                            t          j        d                     |S | d         t
          v rUt          |           \  }} |                    |           | s,|j                            t          j        d                     d}| rM| d         dk    rA| d         t
          vr2|| d         z  }| dd          } | r| d         dk    r| d         t
          v2|                                sc|j                            t          j        d	                    |                               |                    t          |d                     n7t          |          |_        |                    t          |d	                     | r6| d         t
          v r't          |           \  }} |                    |           | r| d         dk    rZ|j        ,|j                            t          j        d
                     | r#|                    t          | d                     |S |                    t          dd                     | dd          } | r6| d         t
          v r't          |           \  }} |                    |           | s5|j        ,|j                            t          j        d
                     |S d}| r5| d         t
          vr&|| d         z  }| dd          } | r| d         t
          v&|                                sc|j                            t          j        d	                    |                               |                    t          |d                     n7t          |          |_        |                    t          |d	                     | r6| d         t
          v r't          |           \  }} |                    |           | rO|j                            t          j        d                     |                    t          | d                     |S )Nz%Missing MIME version number (eg: 1.0)r   z0Expected MIME version number but found only CFWSr-   r	   r   z1Expected MIME major version number but found {!r}r  digitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)rP  r'   r   r   HeaderMissingRequiredValuer	  r
  isdigitrx  r<   r  intrQ  rR  )r   mime_versionrQ   rl  s       r   parse_mime_versionrq  w  s   
 ==L ##F$E3%5 %5 	6 	6 	6Qx;uE""" 	E ''(IB)D )D E E EF
 E!HOOa(C(C%(abb	  E!HOOa(C(C >> =##F$>?FFvNN%P %P 	Q 	Q 	QM&'::;;;; [[M&(;;<<< #q[((uE""" E!HOO) ''(BB)D )D E E E 	?eW = =>>>c+>??@@@!""IE #q[((uE""" ) ''(BB)D )D E E EF
 E!HK//%(abb	  E!HK// >> =##F$>?FFvNN%P %P 	Q 	Q 	QM&'::;;;; [[M&(;;<<< #q[((uE""" ;##F$>5%7 %7 	8 	8 	8M%99:::r   c                 4   	 t                      }| r| d         dk    rx| d         t          v r4|                    t          | d         d                     | dd          } n't	          |           \  }} |                    |           | r| d         dk    x|| fS )Nr   rR  r(  r   )r_  r  r   r  r  )r   invalid_parameterrQ   s      r   get_invalid_parameterrt    s     )**
 ,E!HOO8{""$$]583F&H &H I I I!""IEE%e,,LE5$$U+++  ,E!HOO e##r   c                    	 t          |           }|s't          j        d                    |                     |                                }| t          |          d          } t          |d          }t          |           || fS )Nzexpected ttext but found '{}'ttext)_non_token_end_matcherr   r  r<   r   r   r  r  )r   r  rv  s      r   	get_ttextrx    s     	u%%A ;%+22599; ; 	;GGIIE#e**++E%))EE%<r   c                    	 t                      }| r6| d         t          v r't          |           \  }} |                    |           | r6| d         t          v r't          j        d                    |                     t          |           \  }} |                    |           | r6| d         t          v r't          |           \  }} |                    |           || fS Nr   zexpected token but found '{}')	r   r	  r
  r   
TOKEN_ENDSr   r  r<   rx  )r   mtokenrQ   s      r   	get_tokenr}    s     WWF q[((ue ;qZ''%+22599; ; 	;U##LE5
MM% q[((ue5=r   c                    	 t          |           }|s't          j        d                    |                     |                                }| t          |          d          } t          |d          }t          |           || fS )Nz expected attrtext but found {!r}re  )_non_attribute_end_matcherr   r  r<   r   r   r  r  r   r  re  s      r   get_attrtextr    s     	#5))A >%.55e<<> > 	>wwyyH#h--..!EXz22HHU?r   c                    	 t                      }| r6| d         t          v r't          |           \  }} |                    |           | r6| d         t          v r't          j        d                    |                     t          |           \  }} |                    |           | r6| d         t          v r't          |           \  }} |                    |           || fS rz  )	rb  r	  r
  r   ATTRIBUTE_ENDSr   r  r<   r  r   rc  rQ   s      r   get_attributer  
	  s     I  q[((u ;q^++%+22599; ; 	;&&LE5U  q[((uer   c                    	 t          |           }|s't          j        d                    |                     |                                }| t          |          d          } t          |d          }t          |           || fS )Nz)expected extended attrtext but found {!r}extended-attrtext)#_non_extended_attribute_end_matcherr   r  r<   r   r   r  r  r  s      r   get_extended_attrtextr  !	  s     	,E22A G%7>>uEEG G 	GwwyyH#h--..!EX':;;HHU?r   c                    	 t                      }| r6| d         t          v r't          |           \  }} |                    |           | r6| d         t          v r't          j        d                    |                     t          |           \  }} |                    |           | r6| d         t          v r't          |           \  }} |                    |           || fS rz  )	rb  r	  r
  r   EXTENDED_ATTRIBUTE_ENDSr   r  r<   r  r  s      r   get_extended_attributer  3	  s     I  q[((u ;q444%+22599; ; 	;(//LE5U  q[((uer   c                    	 t                      }| r| d         dk    r't          j        d                    |                     |                    t          dd                     | dd          } | r| d                                         s't          j        d                    |                     d}| rK| d                                         r1|| d         z  }| dd          } | r| d                                         1|d         dk    r2|dk    r,|j                            t          j        d	                     t          |          |_
        |                    t          |d
                     || fS )Nr   *zExpected section but found {}zsection-markerr   z$Expected section number but found {}r-   0z'section number has an invalid leading 0rl  )ri  r   r  r<   r   r  rn  r'   rx  ro  rY  )r   rj  rl  s      r   get_sectionr  I	  s    iiG 0E!HOO%&E&L&L(-'/ '/ 0 0 	0NN=&677888!""IE @a((** @% '117@ @ 	@F
 E!H$$&& %(abb	  E!H$$&&  ayCFcMMv99 ;  ; 	< 	< 	<[[GNNN=22333E>r   c                    	 t                      }| st          j        d          d }| d         t          v rt	          |           \  }} | s't          j        d                    |                    | d         dk    rt          |           \  }} nt          |           \  }} ||g|d d<   |                    |           || fS )Nz&Expected value but found end of stringr   z Expected value but found only {}r   )	rl  r   r  r	  r
  r<   r  r  r   )r   vr  rQ   s       r   	get_valuer  g	  s     	A P%&NOOOFQx;  @% '006v@ @ 	@Qx3(//uu-e44uHbqb	HHUOOOe8Or   c                 T   	 t                      }t          |           \  }} |                    |           | r| d         dk    rC|j                            t	          j        d                    |                               || fS | d         dk    r	 t          |           \  }} d|_        |                    |           n# t          j	        $ r Y nw xY w| st	          j	        d          | d         dk    r4|                    t          dd                     | dd          } d|_        | d         d	k    rt	          j	        d
          |                    t          d	d                     | dd          } d }| r6| d         t          v r't          |           \  }} |                    |           d }|}|j        r| r| d         dk    rt          |           \  }}|j        }d}|j        dk    r4|r|d         dk    rd}nBt#          |          \  }}	|	r|	d         dk    rd}n	 t%          |          \  }}	|	sd}n#  Y nxY w|r_|j                            t	          j        d                     |                    |           |D ]}
|
j        dk    rg |
d d <   |
} n|} n.d }|j                            t	          j        d                     | r| d         dk    rd }nt)          |           \  }} |j        r|j        dk    rW| r| d         dk    r|                    |           ||} || fS |j                            t	          j        d                     | sI|j                            t	          j        d                     |                    |           ||| fS nC|>|D ]}
|
j        dk    r n|
j        dk     |                    |
           |
j        |_        | d         dk    r't	          j	        d                    |                     |                    t          dd                     | dd          } | rt| d         dk    rht#          |           \  }} |                    |           |j        |_        | r| d         dk    r't	          j	        d                    |                     |                    t          dd                     | dd          } |t1                      }| rr| d         t2          v rt5          |           \  }} n9| d         dk    rt          dd          }| dd          } nt7          |           \  }} |                    |           | r|}nt)          |           \  }} |                    |           ||} || fS )Nr   rR  z)Parameter contains name ({}) but no valuer  TzIncomplete parameterzextended-parameter-markerr   =zParameter not followed by '='parameter-separatorr   F'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  re  z=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}DQUOTE)rT  r  r   r'   r   rx  r<   r  rX  r  r  r]  r	  r
  r  r   rZ  r  r  rb   r  r   r   r   rl  r  r  r  )r   r  rQ   r  r  appendtoqstringinner_value
semi_validr  tr  s               r   get_parameterr  }	  s    KKE ''LE5	LL E!HOOV7 9%%+VE]]4 4 	5 	5 	5e|Qx3	&u--LE5"EOLL& 	 	 	D	 	B)*@AAA8s??LLs,GHHIII!""IE!ENQx3%&EFFF	LLs$9::;;;!""IEF q[((uUIH~ $<% $<E!HOO /u55,
1$$ &{1~44!

*;77t &DGsNN!%J&3K@@t  &!%J	  	<M  !;G"I "I J J JLL!!!  <#777AaaaD HE 8  EEIM  !;:"; "; < < <  (qS ''u> 	FU1A55 	 aCOOE"""$!%<V7DE E 	F 	F 	F  V768 8 	9 	9 	9%<    <#666E 7LJ&&OOAGEM8s??) +FFLfUmmU U Uc+>??@@@abb	 	KU1X__'..LE5OOE"""EJ KE!HOO- /<<BF5MMK K Kc+>??@@@abb	GG 	Qx3&u~~uuqS%c844abb	+E22uHHUOOO  	  ''uOOE%<s   .C CC-I Ic                 $   	 t                      }| r	 t          |           \  }} |                    |           n# t          j        $ r}d }| d         t
          v rt          |           \  }} | s|                    |           |cY d }~S | d         dk    rD||                    |           |j                            t          j        d                     npt          |           \  }} |r|g|d d<   |                    |           |j                            t          j        d
                    |                               Y d }~nd }~ww xY w| r| d         dk    ru|d         }d|_        t          |           \  }} |                    |           |j                            t          j        d
                    |                               | r-|                    t          dd                     | d	d          } | |S )
Nr   rR  zparameter entry with no contentzinvalid parameter {!r}r   r`  z)parameter with invalid trailing text {!r}r  r   )ro  r  r   r   r  r	  r
  r'   rx  rt  r<   rb   rO   r  )r   mime_parametersrQ   r^  r  r  s         r   parse_mime_parametersr  
  sl    %&&O
 #	=(//LE5""5))))& 	= 	= 	=FQx;&& ( '&&v...&&&&&&&Qx3%#**6222'..v/I507 07 8 8 8 8  5U;;u )!'E"1"I&&u---'..v/I,33E::0< 0< = = =#	=&  	LU1X__ $B'E2E077LE5LL#**6+E;BB5II,K ,K L L L 	""=6K#L#LMMM!""IEG  #H s"   '= E;EEC EEc                    	 |r|d         dk    rx|d         t           v r4|                     t          |d         d                     |dd          }n't          |          \  }}|                     |           |r|d         dk    x|sd S |                     t          dd                     |                     t	          |dd                               d S )Nr   rR  r(  r   r  )r  r   r  r  r  )	tokenlistr   rQ   s      r   _find_mime_parametersr  ?
  s      $E!HOO8{""]585HIIJJJ!""IEE%e,,LE5U###  $E!HOO  ]3(=>>???*595566666r   c                    	 t                      }d}| s.|j                            t          j        d                     |S 	 t          |           \  }} nf# t          j        $ rT |j                            t          j        d                    |                                t          ||            |cY S w xY w|                    |           | r| d         dk    r@|j                            t          j        d                     | rt          ||            |S |j
                                                                        |_        |                    t          dd                     | dd          } 	 t          |           \  }} nf# t          j        $ rT |j                            t          j        d	                    |                                t          ||            |cY S w xY w|                    |           |j
                                                                        |_        | s|S | d         d
k    rU|j                            t          j        d                    |                                |`|`t          ||            |S |                    t          d
d                     |                    t!          | dd                               |S )NFz"Missing content type specificationz(Expected content maintype but found {!r}r   r  zInvalid content typezcontent-type-separatorr   z'Expected content subtype but found {!r}rR  z<Only parameters are valid after content type, but found {!r}r  )r  r'   r   r   rm  r}  r  rx  r<   r  r   ru  lowerr  r  r  r  )r   ctyperecoverrQ   s       r   parse_content_type_headerr  O
  s    MMEG V>02 2 	3 	3 	3 ''uu"   V76==eDDF F 	G 	G 	GeU+++	
 
LL  E!HOOV7"$ $ 	% 	% 	% 	0!%///[&&((..00EN	LLs$<==>>>!""IE ''uu"   V75<<UCCE E 	F 	F 	FeU+++	
 
LLK%%''--//EM Qx3V7( ( 	) 	) 	) NEMeU+++	LLs$9::;;;	LL&uQRRy11222Ls&   A A B98B9=F A G32G3c                 ^   	 t                      }| s.|j                            t          j        d                     |S 	 t          |           \  }} nf# t          j        $ rT |j                            t          j        d                    |                                t          ||            |cY S w xY w|                    |           |j
                                                                        |_        | s|S | d         dk    rQ|j                            t          j        d                    |                                t          ||            |S |                    t          dd                     |                    t          | dd                               |S )NzMissing content dispositionz+Expected content disposition but found {!r}r   rR  zCOnly parameters are valid after content disposition, but found {!r}r  r   )r  r'   r   r   rm  r}  r  rx  r<   r  r   ru  r  r  r  r  )r   disp_headerrQ   s      r    parse_content_disposition_headerr  
  s    %&&K ""6#D)$+ $+ 	, 	, 	, ''uu"   ""6#=9@@GG$I $I 	J 	J 	Jk5111	
 u&+k&7&7&9&9&?&?&A&AK# Qx3""6#=$( $( 	) 	) 	) 	k5111}S*?@@AAA,U122Y77888s   A A B76B7c                    	 t                      }| s.|j                            t          j        d                     |S 	 t          |           \  }} |                    |           |j                                                                        |_	        nT# t          j
        $ rB |j                            t          j        d                    |                                Y nw xY w| s|S | r|j                            t          j        d                     | d         t          v r4|                    t          | d         d                     | dd          } n't          |           \  }} |                    |           | |S )Nz!Missing content transfer encodingz1Expected content transfer encoding but found {!r}z*Extra text after content transfer encodingr   r(  r   )r  r'   r   r   rm  r}  r   ru  r  r   r  rx  r<   r  r  r  )r   
cte_headerrQ   s      r   &parse_content_transfer_encoding_headerr  
  s    )**J !!&"C/#1 #1 	2 	2 	25 ''u
 	%   **,,2244
 " P P P!!&"<?FFuMM#O #O 	P 	P 	P 	P 	PP  
 %!!&"<8#: #: 	; 	; 	;8{""mE!H6IJJKKK!""IEE%e,,LE5e$$$  % s   B AC*)C*c                     d}| r>| d         r6| d         d         t           v r!| d         d         }| d         d d         | d<   |S )Nr-   r   r  )lineswsps     r   _steal_trailing_WSP_if_existsr  
  sS    
C #r #uRy}33Bim"IcrcNb	Jr   c                d   	 |j         pt          j        }|j        rdnd}dg}d }d }d}d}t	          dd          }	t          |           }
|
r|
                    d          }||	u r|dz  }"t          |          }|s@|j        dv rt          
                    |           }nt          
                    |           }	 |                    |           |}n5# t          $ r( t          d	 |j        D                       rd
}nd}d}Y nw xY w|j        dk    rt!          ||||           |r|s|j        sd}d }|j        r|                    |          d t)          |j                            }|j        |vr_t)          |          |t)          |d                   z
  k    r$t-          |          }|                    |           |dxx         |z  cc<   t1          |d          st          |          |
z   }
d}|j        r;|||k    r|d
k    s|dk    r|dk    rd }t3          |||||j        |          }|}d}d }d}t)          |          |t)          |d                   z
  k    r|dxx         |z  cc<   7|j        rWt)          |          dz   |k    rAt-          |          }|s|                                r|                    ||z              d }t1          |d          st          |          }|j        dk    r0t9          dd          gd |D             z   t9          dd          gz   }|j        dk    r0t9          dd          gd |D             z   t9          dd          gz   }|j        s|dz  }|                    |	           ||
z   }
R|j        r|s|
                    d|           d}ut-          |          }|s|                                r|                    ||z              n|dxx         |z  cc<   |
|j                            |          |j        z   S )Nutf-8rV  r-   r   Fwrap_as_ew_blockedr   )rM  r  c              3   J   K   | ]}t          |t          j                  V  d S r$   )rD  r   r  r0   s     r   r3   z%_refold_parse_tree.<locals>.<genexpr>
  sC       . . a!>?? . . . . . .r   unknown-8bitTrp  rS   r   r#  r   r   rM  c                 H    g | ]}t          t          |          d            S rM  )r  r   r1   ps     r   rx   z&_refold_parse_tree.<locals>.<listcomp>I  s;     ( ( ( ##4Q#7#7AA ( ( (r   rv   r   c                 b    g | ],}|j         d k    rt          t          |          d           n|-S r  )rb   r  r   r  s     r   rx   z&_refold_parse_tree.<locals>.<listcomp>O  sP     ( ( ( // ##9!#<#<gFFF56( ( (r   r   )max_line_lengthsysmaxsizeutf8r  r  r:  r   rb   
SPECIALSNL
isdisjointNLSETr#  r~  rK  rD   _fold_mime_parametersrK   rh   rW   r   r  r  r   rc   _fold_as_ewri   rH   r  insertr6   )
parse_treerT   maxlenrt  r  last_ewlast_charsetr  want_encodingend_ew_not_allowedr  rL   tstrr   encoded_partnewlinenewpartss                    r   rU   rU   
  s_    #2s{F +5ww:HDEGLM!"&:;;E
 zyy||%%%!#4yy 	;"444$.$9$9$$?$? ? %*$4$4T$:$: :	!KK!!!GG! 	! 	! 	! . . ,. . . . . "( " MMM	! ?///!$vx@@@ )	&!3 )	&% ! %' 
!#'99F9#;#;<Qc&.>Q>Q=Q<Q#RL~\99|,,vE"I/FFF&CE&J&JG!LL111b			\1			 
 4** &T

U* %# & '|++!^33!W,,J1F1F"G%dE67&*&=wH H& %  % t99U2Y///"IIIIII   	D		A''3E::G $--// Wt^,,,tX&& 	DzzH"666
 #3001( (&( ( (( #30012 
 )++"3001( (&( ( (( #3001	2  % 4"a'" 2333u$E 	&8 	 LLD!!! M/66 	d))++ 	LL4(((( "IIIIIIu  zv >u%%66s   >C /DDc                 z   	 |B|r@t          t          |d         |d          | z                       } |d         d |         |d<   | d         t          v r]| d         }| dd          } t          |d                   |k    r"|                    t          |                     |dxx         |z  cc<   d}| d         t          v r| d         }| d d         } |t          |d                   n|}|dk    rdn|}	t          |	          dz   }
|
dz   |k    rt          j        d          | r|t          |d                   z
  }||
z
  }|dk    r|                    d	           ;| d |         }t          j	        ||	
          }t          |          |z
  }|dk    r8|d d         }t          j	        ||	
          }t          |          |z
  }|dk    8|dxx         |z  cc<   | t          |          d          } | r*|                    d	           t          |d                   }| |dxx         |z  cc<   |r|nd S )Nr   r   r   r-   rV  r     z3max_line_length is too small to fit an encoded wordrq   )r   )
r   r  r  r   r   r  r   r  r  r#  )	to_encoder  r  r  ri   r   leading_wsptrailing_wspnew_last_ew	encode_as
chrome_lenremaining_space
text_spaceto_encode_wordencoded_wordexcesss                   r   r  r  g  s   	 1U2Ywxx09<==? ?	"Ihwh'b	|s  labbM	b	NNf$$LL6u==>>>b			[ 			L} }crcN	$+O#eBi...K"j00gI Y!#JQ6!!%AC C 	C  ) 3uRy>>1$z1
??LL";J;/z.)DDD\""_4qjj ,CRC0N:niHHHL&&8F qjj 	b			\!			c.11223	 	)LLeBi..K+  ), 
"IIIIII,6;;$6r   c           	         	 | j         D ]O\  }}|d                                                             d          s|dxx         dz  cc<   |}d}	 |                    |           d}n-# t          $ r  d}t          j        |          rd}d}nd}Y nw xY w|r:t          j        	                    |d	|
          }	d
                    |||	          }
n#d
                    |t          |                    }
t          |d                   t          |
          z   dz   |k     r|d         dz   |
z   |d<   +t          |
          dz   |k    r|                    d|
z              [d}|dz   }|rt          |          t          t          |                    z   dz   t          |          z   }||dz   k    rd}||z
  dz
  x}}	 |d |         }t          j        	                    |d	|
          }	t          |	          |k    rn|dz  }F|                    d
                    ||||	                     d	}|dz  }||d          }|r|dxx         dz  cc<   |Qd S )Nr   rR  strictFTr  rs  r  r-   )safer   z
{}*={}''{}r  r   rq   r   r   z''r+  N   z {}*{}*={}{})r  r-  rf  r#  r~  r   r  ry  rz  r   r<   r    r   r   r   )rL   r  r  rt  r  r   r   error_handlerencoding_requiredencoded_valuer  rj  extra_chromer  
splitpointmaxcharspartials                    r   r  r    s    { :! :!e Ry!!**3// 	"IIIIII 		"LL""" %! 	" 	" 	" $$U++ "( 1!	"  	="L..B} / 6 6M&&tWmDDDD>>$U(;(;<<DuRy>>CII%)F22b	C$.E"IYY]f$$LLt$$$ ~ 	!TSW%6%66:S=N=NNJa''
 $*Z$7!$;;J , & 2 2"] !3 !< !<}%%11a
  LL..g|]< < = = =LqLG*++&E !b			S 			-  	!I:! :!s   A))'BB)r  )rer  ry  stringr   operatorr   emailr   r  r   r   r1  r  r	  r  r  r2  r  	TSPECIALSr{  	ASPECIALSr  r  r  r  r   r   r    compileVERBOSE	MULTILINEr  r  r"   rn   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r#  r&  r(  r6  r8  r?  rJ  rP  rT  r_  rb  ri  rl  ro  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  rC  r;  rK   rh   r<  r<   r6   r  r  r  matchr   findallr  rw  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r&  r"  r+  r0  r3  r5  r8  r>  rC  rE  rH  rL  rP  rT  rW  rY  r[  r_  rb  rf  rj  rq  rt  rx  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  rU   r  r  rr   r   r   <module>r     s  CJ 
			 



              ' ' ' ' ' '             
c%jjCCHHn3  sN	CCHH$U#E

"cc#hh.	_
E

"	S(33s883 	t
@ @ @
1 1 1   "*  Z",   @, @, @, @, @, @, @, @,FD D D D D) D D D         I          Y       9       "       9       I   
    )   # # # # #9 # # #6	- 	- 	- 	- 	-| 	- 	- 	-    !   4C C C C C) C C C&% % % % %i % % %2? ? ? ? ?) ? ? ?% % % % %	 % % %"$ $ $ $ $I $ $ $*" " " " "y " " "6    	   DD D D D Dy D D D! ! ! ! !i ! ! !6; ; ; ; ;Y ; ; ;. . . . .Y . . .    i       )   
    I   
    y   B    9   '! '! '! '! '!& '! '! '!T! ! ! ! !	 ! ! !H    I        )       	   8% % % % %y % % %
# # # # #	 # # #    i       I   S. S. S. S. S.Y S. S. S.l    y       *       1       i       )   
* * * * *I * * *       & & & & &y & & &    Y   (+ (+ (+ (+ (+s (+ (+ (+V' ' ' ' ' ' ' '    H       -   < < < < <f- < < < mCc#344#  % $}S*BCC . 
:,,RWWS\\::;;A"
9#3#3BIbggi  !!$# $# $ $$) "
#566> #I$4$4BIbggj!!""%$ %$ % %%* 'RZ	(8(8BIbggn%%&&)( )( ) )). &0bj1A1ABIbgg-..//21 21 '2 '227 $; ; ;J J J<
 
 
/ / / /bA A AF  "     )) )) ))V  2       $  6     &  2     D$ $ $L% % %N-! -! -!^  (  %! %! %!N$ $ $L   '  '  ' R, , ,\    <  *" " "$6 6 6r# # #J  <  :4 4 4n& & &,B B BJ  8B B BH$ $ $$  &  .  &  .  $  ,  <  ,L L L\2 2 2h7 7 7 7 7 7r  <  ^  I7 I7 I7V?7 ?7 ?7BI! I! I! I! I!r   