
    }i                        U d dl Z 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	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlmZ ddlmZ dd	lm Z  dd
l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@ ddlAmBZB dZCed   ZD eEej                        ZGeeeH      eId<    ej                  d      ZKeeH   eId<    ej                  deK d      ZMeeeH      eId<    ej                  d      ZNeeeH      eId<    ej                  dej                        ZPeeeH      eId<    ej                  dej                        ZQeeeH      eId<    ej                  d      ZReeeS      eId<    eTh d       ZUeeTeH      eId!<    G d" d#e      ZV G d$ d%e      ZW ed&eVeW      ZX G d' d(e      ZY G d) d*e      ZZ G d+ d,      Z[d-eeH   d.e\fd/Z] G d0 d1e j                  eeX         Z_ G d2 d3e_eV         Z` G d4 d5e_eW         Za G d6 d7      Zb G d8 d9      Zce`ZdeaZeeVZfeWZg	 e-sdd:lhm`Z`maZamVZVmWZW e`ZieaZjeVZkeWZlyy# em$ r Y yw xY w);    N)suppress)IntEnum)AnyClassVarFinalGenericListLiteral
NamedTupleOptionalPatternSetTupleTypeTypeVarUnion)CIMultiDictCIMultiDictProxyistr)URL   )hdrs)BaseProtocol)DEFAULT_MAX_DECOMPRESS_SIZE
HAS_BROTLIHAS_ZSTDBrotliDecompressorZLibDecompressorZSTDDecompressor)_EXC_SENTINELDEBUGEMPTY_BODY_METHODSEMPTY_BODY_STATUS_CODESNO_EXTENSIONSBaseTimerContextset_exception)
BadHttpMessageBadHttpMethodBadStatusLineContentEncodingErrorContentLengthErrorDecompressSizeErrorInvalidHeaderInvalidURLErrorLineTooLongTransferEncodingError)HttpVersionHttpVersion10)EMPTY_PAYLOADStreamReader)
RawHeaders)HeadersParser
HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessage)   
   
ASCIISETz!#$%&'*+-.^_`|~_TCHAR_SPECIALSz
[0-9A-Za-zz]+TOKENREz[\x00-\x08\x0a-\x1f\x7f]_FIELD_VALUE_FORBIDDEN_CTL_REzHTTP/(\d)\.(\d)VERSREz\d+DIGITSs   [0-9a-fA-F]+	HEXDIGITS>
   
user-agentcontent-typemax-forwardscontent-rangecontent-lengthcontent-locationtransfer-encodingetaghostserverSINGLETON_HEADERSc                   x    e Zd ZU eed<   eed<   eed<   ded<   eed<   eed<   ee   ed<   eed	<   eed
<   e	ed<   y)r:   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closecompressionupgradechunkedurlN)
__name__
__module____qualname__str__annotations__r1   r5   boolr   r        F/var/www/files/kim/lib/python3.12/site-packages/aiohttp/http_parser.pyr:   r:   q   s=    K
I$$#MM	Hrc   r:   c                   t    e Zd ZU eed<   eed<   eed<   ee   ed<   eed<   e	ed<   e
e   ed<   e	ed<   e	ed	<   y
)r;   rS   codereasonrU   rV   rW   rX   rY   rZ   N)r\   r]   r^   r1   r`   intr_   r   r5   ra   r   rb   rc   rd   r;   r;   ~   s=    
IKc""#MMrc   r;   _MsgTc                       e Zd ZdZdZdZdZy)
ParseStater   r         N)r\   r]   r^   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFrb   rc   rd   rk   rk      s    JLMOrc   rk   c                        e Zd ZdZdZdZdZdZy)
ChunkStater   r   rl   rm      N)r\   r]   r^   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSrb   rc   rd   rs   rs      s    Nrc   rs   c                   R    e Zd Z	 	 	 	 ddededededdf
dZdee   ded	e	f   fd
Z
y)r6   max_line_sizemax_headersmax_field_sizelaxreturnNc                 <    || _         || _        || _        || _        y N)r{   r|   r}   _lax)selfr{   r|   r}   r~   s        rd   __init__zHeadersParser.__init__   s#     +&,	rc   linesrT   c                    t               }g }d}||   }t        |      }|r	 |j                  dd      \  }}t        |      dk(  rt	        |      |d   |d   hddhz  rt	        |      |j                  d      }|j                  dd	      }	t        j                  |	      st	        |      |dz  }||   }| j                  xr |xr |d   d
v }
|
rt        |      }|g}|
r|t        |      z  }|| j                  kD  r3|dz   dj                  |      z   }t        |d d dz   | j                        |j                  |       |dz  }||k  r||   }|r|d   d
v }
nd}n|
rdj                  |      }|j                  d      }|j                  dd	      }| j                  rd|v sd|v sd|v r+t	        |      t        j!                  |      rt	        |      | j                  s)|	|v r%|	j#                         t$        v rt'        d|	 d      |j)                  |	|       |j                  ||f       |rt+        |      t-        |      fS # t        $ r t	        |      d w xY w)Nr      :r       	   s    	utf-8surrogateescape)r   r   s   : rc   d      ...
 zDuplicate 'z' header found.)r   lensplit
ValueErrorr-   lstripdecoder@   	fullmatchr   r}   joinr/   appendstriprA   searchlowerrO   r'   addr   tuple)r   r   rU   rV   	lines_idxline
line_countbnamebvaluenamecontinuationheader_length
bvalue_lstheader_linevalues                  rd   parse_headerszHeadersParser.parse_headers   s    %0M	YZ
4 $

4 3v 5zQ#E** a%)$Aw.#D))]]6*F<<):;D$$T*#E** NI#D  99DD$q'W2DL  #F$X
"!SY.M$t':'::&+emchhz6J&J)'-68K8K  %%d+ NI :-$Y/+/7g+=L"# #$ *-\\&)FMM'+<=E yy5=DEMVu_'//.55e<#F++99TZZ\EV5V${4&%HIIKKe$v/ B !)5+=>>{  4#D)t34s   I I$)  i   r   F)r\   r]   r^   rh   ra   r   r	   bytesr   r5   r   rb   rc   rd   r6   r6      sl     " "

 
 	

 
 

L?%[L?	&
2	3L?rc   r6   rU   r   c                     | j                  t        j                  d      }|j                         xr |j	                         dv S )z)Check if the upgrade header is supported. >   tcp	websocket)getr   UPGRADEisasciir   )rU   us     rd   _is_supported_upgrader      s3    DLL"%A99;<1779(<<<rc   c                      e Zd ZU dZee   ed<   	 	 	 	 	 	 	 	 	 	 	 	 	 d%dee   dee	j                     dededed	ed
ee   dee   dee   deee      dedededdfdZej$                  dee   defd       Zej$                  dedefd       Zdee   fdZddej4                  ej6                  ej8                  fdededededededeeeee f      eef   fd Z!dee   ded!e"ee   ee   eef   fd"Z#d#eddfd$Z$y)&r7   Fr~   Nprotocollooplimitr{   r|   r}   timerrf   rQ   payload_exceptionresponse_with_bodyread_until_eofauto_decompressr   c                 H   || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _        || _	        || _
        g | _        d| _        d| _        d | _        d | _        || _        || _        t%        |||| j&                        | _        y )Nrc   F)r   r   r{   r|   r}   r   rf   rQ   r   r   r   _lines_tail	_upgraded_payload_payload_parser_auto_decompress_limitr6   r~   _headers_parser)r   r   r   r   r{   r|   r}   r   rf   rQ   r   r   r   r   s                 rd   r   zHttpParser.__init__  s      !	*&,&
	!2"4,#%
<@ /,; 
rc   r   c                      y r   rb   )r   r   s     rd   parse_messagezHttpParser.parse_message+  s    :=rc   tec                      y r   rb   r   r   s     rd   _is_chunked_tezHttpParser._is_chunked_te.  s    /2rc   c                    | j                   "| j                   j                          d | _         y | j                  r%| j                  j	                  | j                         | j                  ra| j                  d   dk7  r| j                  j	                  d       t        t              5  | j                  | j                        cd d d        S y # 1 sw Y   y xY w)Nr   z
rc   )r   feed_eofr   r   r   r   	Exceptionr   r   s    rd   r   zHttpParser.feed_eof1  s    +  ))+#'D   zz""4::.{{;;r?f,KK&&s+i( ;--dkk:; ;;s   (CCr<   rc   dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1c                    g }| j                   r| j                   |z   dc}| _         t        |      }d}	| j                  }
| j                  }d}|	|k  r`| j                  | j
                  s|j                  ||	      }||	k(  r| j                  s|t        |      z   }	R||	k\  r,|rt        d      ||	| }|dk(  r|j                  d      }t        |      |kD  rt        |d d dz   |      | j                  j                  |       | j                  }t        | j                        | j                  kD  rt        d	      |t        |      z   }	| j                  d
   |k(  rJ| j                  t        | j                        z
  }	 | j                  | j                        | j                  j                          dt         t"           ffd} |       }|j$                  v rt'        |      j(                  xr t+        j$                        | _        t-        d| j.                        }t-        dd      }| j0                  J |t2        v xs t5        |xr |t6        v       }|s||dkD  sj8                  r| j
                  st;        | j0                  | j<                  |
| j>                        }tA        ||j8                  |jB                  | jD                  | jF                  | jH                  | jJ                  | jL                  | j                  | j                  |      }|jN                  s}|| _        nt||k(  rtQ        tR              sJ t;        | j0                  | j<                  |
| j>                        }d| _        tA        |j.                  jB                  | jH                  | jJ                  | jL                  | j                  | j                  |	      | _        n|s|| jT                  rt;        | j0                  | j<                  |
| j>                        }tA        ||j8                  |jB                  | jD                  | jF                  | jH                  | jJ                  | jL                  | j                  | j                  |      }|jN                  s|| _        ntV        }|j                  |f       jX                  }n||	d  | _         t        | j                         | j                  kD  r&t        | j                   d d dz   | j                        |}n| j                  | j
                  r| j                  rJ nf|r\|	|k  rW| j                  rJ | j                  J 	 | j                  j[                  ||	d  |      \  }}|rd}	t        |      }d | _        ^n|	|k  r`|r|	|k  r||	d  }n|}|| j
                  |fS # | j                  j                          w xY w# t\        $ rn}|}| j^                  | j_                  ta        |            }tc        | j                  jd                  ||       d}d}tQ        |t&        tf        f      r Y d }~d }~ww xY w)Nrc   r   FzData after `Connection: close`r=      r   r   zToo many headers receivedr   r   c                      j                   j                        } | y t        j                  |       st	              t        |       S r   )rU   r   rC   r   r-   rh   )
length_hdrr   msgs    rd   get_content_lengthz0HttpParser.feed_data.<locals>.get_content_length}  sC    ),)HJ)1'+
 $*#3#3J#?&3N&C C#&z?2rc   rQ   rf   )r   r   r   )lengthrZ   rQ   rX   rf   r   r   r~   headers_parserr{   r}   max_trailersT)rQ   rX   r   r~   r   r{   r}   r   )4r   r   r   r{   r   r   findr   r'   rstripr/   r   r}   r|   r   clearr   rh   rU   r-   rY   r   getattrrQ   r   r#   ra   r"   rZ   r4   r   r   HttpPayloadParserrX   rf   r   r   r~   r   done
isinstancer:   r   r3   rW   	feed_dataBaseExceptionr   r_   r&   payloadr0   )r   r   r   r   r   r   r   messagesdata_len	start_posr   max_line_lengthrW   posr   r   r   r   rQ   rf   
empty_bodyr   payload_parsereofunderlying_excreraised_excr   s       `                     @rd   r   zHttpParser.feed_dataA  s    ::#zzD0#D$*t9	yy,,(" ##+DNNiiY/)#DKK #c#hI)##,-MNN  	#.De|#{{514y?2)$t*v*=OOKK&&t,&*&9&9O4;;'$*:*::,-HII #c#hI {{2%/'+'7'7#dkk:J'J0)-););DKK)HC KK--/3HSM 3 "4!5-<"/0B"CC), *9NKK: ")h!D&sFA6#}}888%)-D%D &"Cv1C'CI
  *$0VaZCKK$(NN&2 $&*jj%)&*kk	'G .? ''-(+'-,/OO%)YY373J3J040E0E$(HH/3/C/C.2.@.@/3/B/B-9.N $2#6#67E 4#|3#-c3D#EE#E&2 $&*jj%)&*kk	'G .2DN3D ''*zz,/OO040E0E$(HH/3/C/C.2.@.@/3/B/B-9
4D0 ",4CVCV&2 $&*jj%)&*kk	'G .? ''-(+'-,/OO%)YY373J3J040E0E$(HH/3/C/C.2.@.@/3/B/B-9.N $2#6#67E 4&3G g7'*'7'7!%ij!1DJ4::););;)$**Tc*:V*CTEWEWXX D %%-$..;;& )h.;;&++777 $ 4 4 > >tIJ?OQT UIC&  !I"4yH+/D({ ("~ I(	
#DD-- !KK--/@ % #1L--9'+'='=c.>Q'R!,,44$& CD!&8M(N s%   W 3"W2 W/2	Y);A$Y$$Y)rT   c                    | j                   j                  |      \  }}d}d}d}d}|j                  t        j                  d      }|r|D 	
ch c]A  }	d |	j                  d      D        D ]$  }
|
r |
j                         r|
j                         & C }}	}
d|v rd}nd|v rd}d	|v r!|j                  t        j                        rd}|j                  t        j                  d
      }|j                         r|j                         dv r|}|j                  t        j                        }|0| j                  |      rd}t        j                  |v rt        d      ||||||fS c c}
}	w )zParses RFC 5322 headers from a stream.

        Line continuations are supported. Returns list of header name
        and value pairs. Header name is in upper case.
        NFrb   c              3   >   K   | ]  }|j                  d         yw) 	N)r   ).0parts     rd   	<genexpr>z+HttpParser.parse_headers.<locals>.<genexpr>3  s     RDdjj/Rs   ,closeTz
keep-aliverY   r   >   brgzipzstddeflatez6Transfer-Encoding can't be present with Content-Length)r   r   getallr   
CONNECTIONr   r   r   r   r   CONTENT_ENCODINGTRANSFER_ENCODINGr   r   r'   )r   r   rU   rV   
close_connencodingrY   rZ   conn_values
conn_valuetokenconn_tokensencr   s                 rd   r   zHttpParser.parse_headers  sv     $33AA%H
 nnT__b9 #.RJ<L<LS<QR U]]_ K  +%!
,"
 K'GKK,E kk$//4;;=SYY[,MMH [[//0>""2&""g-$L  j(GWMMAs   AE&valc                     || _         y)zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )r   r  s     rd   set_upgradedzHttpParser.set_upgradedR  s    
 rc   )NNi   r      r   NNNNTFT)%r\   r]   r^   r~   r   ra   r`   r   r   asyncioAbstractEventLooprh   r%   r_   r   r   r   abcabstractmethodr	   r   ri   r   r   r   r   r   r   r   _SEPr   r   r4   r   r5   r   r  rb   rc   rd   r7   r7      s!   C$ ,048!",0" $;?#'$ $&
<(&
 w001&
 	&

 &
 &
 &
 ()&
 sm&
 &
 $D$78&
 !&
 &
 &
 
&
P 	=4;=5= =222 2(5/ & #22 --#'#:#:Y.Y. Y. 	Y.
 Y. Y. !Y. 
tE%-./u<	=Y.v4N%[4N	Xd^Xc]DRVV
4Nl  rc   r7   c                   6    e Zd ZdZdee   defdZdede	fdZ
y)r8   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    r   r   c                    |d   j                  dd      }	 |j                  dd      \  }}}t        j                  |      st        |      t        j                  |      }|t        |      t        t        |j                  d            t        |j                  d                  }|dk(  rt        j                  |d	
      }n|j                  d      rD|j                  d      \  }	}
}|	j                  d      \  }	}}t        j                  |	||d	      }n^|dk(  r|dk(  rt        |d	      }nFt        |d	      }|j                  dk(  r*t!        |j#                  d      j                  d            | j%                  |dd        \  }}}}}}||t&        k  rd	}nd}t)        ||||||||||
      S # t        $ r t        |      d w xY w)Nr   r   r    rl   maxsplitr   CONNECTT)	authorityencoded/#?)rR   query_stringfragmentr  *OPTIONS)r  r   )errorslatin1F)r   r   r   r(   r@   r   rB   r)   r1   rh   groupr   build
startswith	partitionschemer.   encoder   r2   r:   )r   r   r   rQ   rR   rS   match	version_or[   	path_part_hash_separatorurl_fragment_question_mark_separatorqs_partrU   rV   r   rX   rY   rZ   s                       rd   r   zHttpRequestParser.parse_messageb  s   Qxw(9:	0$(JJsQJ$?!FD'
   (''   )=%%EKKN 3SQ5HI	Y ))dD9C__S! 8<~~c7J4I;D;N;Ns;S8I/ ))$%	C S[Vy0dD)C dD)CzzR%KK'8K9@@J  uQRy)	
 =M) 
 	
}  	0%4/	0s   F; ;Gr   c                     |j                  dd      d   j                  d      }|j                         r|j                         dk(  ryt	        d      )	Nr   r   r  r   r   rZ   Tz'Request has invalid `Transfer-Encoding`)rsplitr   r   r   r'   r   s     rd   r   z HttpRequestParser._is_chunked_te  sI    YYsQY'+11%8::<BHHJ)3FGGrc   N)r\   r]   r^   __doc__r	   r   r:   r   r_   ra   r   rb   rc   rd   r8   r8   Z  s9    N
4; N
3D N
`H H Hrc   r8   c                        e Zd ZdZe Z	 ddedee   de	de	de
ee
eef      eef   f
 fdZdee   defd	Zd
edefdZ xZS )r9   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    r   r   argskwargsr   c                 D    |
t         rdnd}t        |   ||g|i |S )Nr<   r=   )r!   superr   )r   r   r   r7  r8  	__class__s        rd   r   zHttpResponseParser.feed_data  s/     ;"'Cw s<T<V<<rc   r   c                 6   |d   j                  dd      }	 |j                  d      \  }}	 |j                  d      \  }}t
        j                  |      }|t        |      t        t        |j                  d            t        |j                  d                  }t        |      dk7  st        j                  |      st        |      t        |      }| j                  |dd        \  }	}
}}}}|I|t        k  rd	}n=d
|cxk  rdk  sn |dv rd}n)t        j                  |	v st        j                   |	v rd}nd	}t#        |||j	                         |	|
||||	      S # t        $ r t        |      d w xY w# t        $ r |j	                         }d}Y Uw xY w)Nr   r   r   r   r  r   rl   rm   Tr      >   0     F)r   r   r   r)   r   rB   r   r1   rh   r&  r   rC   r   r2   r   r   r  r;   )r   r   r   rS   statusrg   r,  r-  status_irU   rV   r   rX   rY   rZ   s                  rd   r   z HttpResponseParser.parse_message  s   Qxw(9:	0"jj!j4OGV	#\\1\5NFF   )=%%EKKN 3SQ5HI	 v;!6#3#3F#;%%v; uQRy)	
 =M)&3&(j*@$$/43I3IW3T !LLN

 
	
U  	0%4/	0
  	\\^FF	s   E  E9  E69FFr   c                 n    |j                  dd      d   j                  d      j                         dk(  S )Nr   r   r  r   r   rZ   )r4  r   r   r   s     rd   r   z!HttpResponseParser._is_chunked_te
  s3    yyqy)"-33E:@@BiOOrc   r   )r\   r]   r^   r5  r!   r~   r   r   r  r   r   r	   r;   r4   ra   r   r   r_   r   __classcell__)r;  s   @rd   r9   r9     s     )C
 #	=	= d^	= 		=
 	= 
tE,l:;<dEI	J	=8
4; 8
3E 8
tP P Prc   r9   c                       e Zd Z	 	 	 	 	 	 	 	 ddddddedee   dedee   d	ee   d
ee   dedededededededdfdZ	ddZ
	 ddedededeeef   fdZy)r   Nr   r  )r{   r}   r   r   r   rZ   rX   rf   rQ   r   r   r~   r   r{   r}   r   r   c
                p   d| _         t        j                  | _        t        j
                  | _        d| _        d| _        || _	        |	| _
        |
| _        || _        || _        || _        g | _        d| _        |r|r| j                  rt#        ||      }n|}|s4t        j$                  | _        |j'                          d| _        || _        y |rt        j(                  | _        || _        y |Bt        j*                  | _        || _         | j                   dk(  r|j'                          d| _        || _        y )Nr   rc   FT)_lengthrk   rq   _typers   ru   _chunk_chunk_size_chunk_tailr   r   r   _max_line_size_max_field_size_max_trailers_trailer_linesr   DeflateBufferrn   r   rp   ro   r   )r   r   r   rZ   rX   rf   rQ   r   r   r~   r   r{   r}   r   real_payloads                  rd   r   zHttpPayloadParser.__init__  s$   " //
 33 /	-+-)+-	 +$2G2G?L@L #L "#..DJ!!#DI $ #11DJ $ #00DJ!DL||q %%' 	#rc   c                    | j                   t        j                  k(  r| j                  j	                          y | j                   t        j
                  k(  rt        d      | j                   t        j                  k(  rt        d      y )Nz1Not enough data to satisfy content length header.z2Not enough data to satisfy transfer length header.)	rG  rk   rq   r   r   ro   r+   rp   r0   r   s    rd   r   zHttpPayloadParser.feed_eofH  so    ::333LL!!#ZZ:222$C  ZZ:333'D  4rc   chunkr   	CHUNK_EXTc                    | j                   t        j                  k(  r| j                  }t	        |      }||k\  rP||z
  | _        | j
                  j                  ||       | j                  dk(  rb| j
                  j                          yd| _        | j
                  j                  |d | |       | j
                  j                          d||d  fS y| j                   t        j                  k(  r| j                  r| j                  t        j                  k7  sJ | j                  }| j                  t        j                  k(  r| j                  }t	        | j                        |kD  rt!        | j                  d d dz   |      | j                  |z   }d| _	        |rp| j                  t        j"                  k(  rv|j%                  |      }|dk\  rW|j%                  |d|      }|dk\  r4|d | }	d||| x}
v r+t'        d|
      }t)        | j
                  |       ||d | }	| j*                  r|	j-                         }	t/        j0                  t2        |	      s6t'        |d | j5                  d	d
            }t)        | j
                  |       |t7        t9        |	      d      }||t	        |      z   d  }|dk(  r8t        j                  | _
        | j*                  rV|j;                  d      rE|dd  }n?t        j                  | _
        || _        | j
                  j?                          n|| _	        y| j                  t        j                  k(  r| j<                  }t	        |      }||kD  r'||z
  | _        | j
                  j                  ||       yd| _        | j
                  j                  |d | |       ||d  }t        j@                  | _
        | j
                  jC                          | j                  t        j@                  k(  r| j*                  r|j;                  d      r|dd  }|d t	        |       |k(  r$|t	        |      d  }t        j"                  | _
        nSt	        |      t	        |      k\  s||d t	        |       k7  r#t'        d      }t)        | j
                  |       ||| _	        y| j                  t        j                  k(  r9|j%                  |      }|dk  r|| _	        y|d | }||t	        |      z   d  }|dk(  r|jE                  d      }t	        |      | j                  kD  rt!        |d d dz   | j                        | jF                  jI                  |       t	        | jF                        | jJ                  kD  rtM        d      | jF                  d   dk(  ra	 | jN                  jQ                  | jF                        \  }}| jF                  jS                          | j
                  j                          d|fS |rpy| j                   t        jT                  k(  r%| j
                  j                  |t	        |             y# | jF                  jS                          w xY w)Nr   )Trc   Tr   r   rc   r=   z"Unexpected LF in chunk-extension: asciir      r   r   )Frc   z3Chunk size mismatch: expected CRLF after chunk datazToo many trailers receivedr   )+rG  rk   ro   rF  r   r   r   r   rp   rJ  rH  rs   rv   rK  ry   rL  r/   ru   r   r0   r&   r   r   rer   rD   r   rh   r   r(  rI  begin_http_chunk_receivingrw   end_http_chunk_receivingr   rN  r   rM  r'   r   r   r   rq   )r   rR  r   rS  required	chunk_lenr   r   isize_bextexcsizer   trailersraw_trailerss                   rd   r   zHttpPayloadParser.feed_dataT  s    ::000||HE
I9$')3&&ui8<<1$LL))+$ &&uYh'7B%%'U89---B } ZZ:333{{j&D&DDDD"&"5"5;;*";";;&*&:&:Ot''(?:%d&6&6t&<v&EWW((50#&  ;;*"?"??**S/Cax!JJy!S96%*2AYF$a)<=&;&H$P'" !.dllC @&)	%*4C[F99%+\\^F!||Iv>"7 %ds 2 27<M N#C *$,,<"%I"5="5 %cCHn&6 719*4*C*CDK#yyU-=-=e-D(-ab	*4*H*HDK/3D, LLCCE+0() ;;*"@"@@#//H #E
I)++3i+?(..ui@)+,(..uYh/?J %hi 0&0&H&H==? ;;*"D"DDyyU%5%5e%< %ab	Zs3x(C/ %c#hj 1&0&C&CUs3x/5C#e*<M3M3Q &dllC8!	+0();;*";";;**S/CQw+0() #;D!#C."23Ee|#{{514y4#7#77)$t*v*=t?S?STT''..t44../$2D2DD,-IJJ **2.#58595I5I5W5W $ 3 362Hl !//557--/#U{*U `  ZZ:555LL""5#e*5 !//557s   )(Y Y-)NFNNNTTFr   N)r<      ;)r\   r]   r^   r4   r   rh   ra   r_   r6   r   r   r   r  r   r   rb   rc   rd   r   r     s    !%%)" $#' $6$ ""6$6$ 6$ 	6$
 c]6$ sm6$ 6$ !6$ 6$ 6$ &6$ 6$ 6$ 6$  
!6$p
 EISS!%S<AS	tU{	Src   r   c            	           e Zd ZU dZeed<   efdedee	   de
ddfdZefd	ed
eddfdZdede
ddfdZddZddZddZy)rO  zDDeflateStream decompress stream and feed data into specified stream.decompressoroutr  max_decompress_sizer   Nc                 F   || _         d| _        | j                  |_        || _        d| _        |  |dk(  r(t
        st        d      t               | _        || _        y |dk(  r(t        st        d      t               | _        || _        y t        |      | _        || _        y )Nr   Fr   zECan not decode content-encoding: brotli (br). Please install `Brotli`r   zRCan not decode content-encoding: zstandard (zstd). Please install `backports.zstd`)r  )rg  r`  total_compressed_bytesr  _started_decodingr   r*   r   rf  r   r   r   _max_decompress_size)r   rg  r  rh  s       rd   r   zDeflateBuffer.__init__  s     	%)YY" !&t*.  !3 4D %8! *6  !1 2D %8! !1( CD$7!rc   r_  	exc_causec                 2    t        | j                  ||       y r   )r&   rg  )r   r_  rm  s      rd   r&   zDeflateBuffer.set_exception  s    
 	dhhY/rc   rR  r`  c                 L   |sy | xj                   |z  c_         | j                   | j                  _        | j                  s6| j                  dk(  r'|d   dz  dk7  rt        | j                  d      | _        	 | j                  j                  || j                  dz         }d| _        t        |      | j                  kD  rt        d
| j                  z        |r&| j                  j                  |t        |             y y # t        $ r t        d	| j                  z        w xY w)Nr   r         T)r  suppress_deflate_headerr   )
max_lengthz#Can not decode content-encoding: %sz:Decompressed data exceeds the configured limit of %d bytes)r`  rg  rj  rk  r  r   rf  decompress_syncrl  r   r*   r   r,   r   )r   rR  r`  s      rd   r   zDeflateBuffer.feed_data  s   		T	*.))' &&*a3!# !1!D	%%55$";";a"? 6 E "& u:111%L++, 
 HHuc%j1   	&5E 	s   7*D "D#c                 8   | j                   j                         }|s| j                  dkD  rU| j                  j	                  |t        |             | j                  dk(  r!| j                   j                  st        d      | j                  j                          y )Nr   r   )
rf  flushr`  rg  r   r   r  r   r*   r   )r   rR  s     rd   r   zDeflateBuffer.feed_eofA  sp    !!'')DIIMHHuc%j1}}	)$2C2C2G2G*955rc   c                 8    | j                   j                          y r   )rg  rX  r   s    rd   rX  z(DeflateBuffer.begin_http_chunk_receivingK  s    ++-rc   c                 8    | j                   j                          y r   )rg  rY  r   s    rd   rY  z&DeflateBuffer.end_http_chunk_receivingN  s    ))+rc   rc  )r\   r]   r^   r5  r   r`   r   r4   r   r_   rh   r   r    r   r&   r   r   r   rX  rY  rb   rc   rd   rO  rO    s    N $?	88 3-8 !	8
 
8F $100 !0 
	0)2u )2C )2D )2V.,rc   rO  )r8   r9   r:   r;   )nr  r  rW  string
contextlibr   enumr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   	multidictr   r   r   yarlr   r   r   base_protocolr   compression_utilsr   r   r   r   r   r   helpersr    r!   r"   r#   r$   r%   r&   http_exceptionsr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   http_writerr1   r2   streamsr3   r4   typedefsr5   __all__r  set	printabler>   r_   r`   escaper?   compiler@   rA   ASCIIrB   rC   rD   r   	frozensetrO   r:   r;   ri   rk   rs   r6   ra   r   ABCr7   r8   r9   r   rO  HttpRequestParserPyHttpResponseParserPyRawRequestMessagePyRawResponseMessagePy_http_parserHttpRequestParserCHttpResponseParserCRawRequestMessageCRawResponseMessageCImportErrorrb   rc   rd   <module>r     s   
  	      " : 9   '      4 0   ~ 0 01%C/ 1 (bii(9:s :)rzzJ6Gr*JKws|	 K5?RZZ6 uWS\2  )bjj);RXXFgcl F(bjj:gcl :#-2::.>#?	5  ? ,5, 53(  

 
	 	 	*,>?  Y? Y?x=#3C#8 =T =W'%. Wt
^H
#45 ^HBQP$67 QPhX Xve, e,P ( ) ' ) 		
 	
 /0.0   		s   I I%$I%