
    3                       % S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
Jr  S SKJr  S SKJr  S SKrS SKJrJrJr  S SKJr  S SKJr  \" \5      r\R6                  " 5       rS	\S
'   \R                  R<                  qS\S'   \" \5      r / SQr!\RE                  S5      \ RE                  S5      \ RE                  S5      SSS j5       5       5       r#\RE                  S5      SSS j5       r$\RE                  S5      SSS j5       r%\RE                  S/ SQS9\ RE                  S/ SQS9SSS j5       5       r&\RE                  SS/S9SSS j5       r'\RE                  S5      SSS j5       r(\RE                  S5      SSS j5       r)\RE                  S 5      SSS! j5       r*\RE                  S"/ SQS9SSS# j5       r+\RE                  S$S/S9\ RE                  S$SS%/S9SSS& j5       5       r,\RE                  S'5      \RE                  S(S)S*0S+9STS, j5       5       r-\RE                  S-5      SSS. j5       r.\RE                  S/S0S/S9SSS1 j5       r/\RE                  S25      SSS3 j5       r0\RE                  S4S0S/S9SSS5 j5       r1\RE                  S65      SSS7 j5       r2\RE                  S85      SSS9 j5       r3\RE                  S:/ SQS9SSS; j5       r4\RE                  S<5      SSS= j5       r5\RE                  S>5      SSS? j5       r6\RE                  S@5      \ RE                  S@5      SSSA j5       5       r7\RE                  SB5      SSSC j5       r8\RE                  SDS0SE/S9SSSF j5       r9\ Rt                  SUSG j5       r;\ RE                  SH5      SSSI j5       r<\ RE                  SJ5      SSSK j5       r=\ RE                  SL5      SSSM j5       r>\ RE                  SSS%/S9SSSN j5       r?\ RE                  SO5      SVSP j5       r@\ RE                  SQ5      SSSR j5       rAg)W    )annotationsN)BytesIO)Path)Iterator)Responsemake_responserequest)ResponseReturnValue)	QuartTriozcollections.Counter[str]RETRY_TEST_NAMESzdatetime.datetimeLAST_RETRY_AFTER_REQ))zAccess-Control-Allow-Origin*)zCross-Origin-Opener-Policyzsame-origin)zCross-Origin-Embedder-Policyzrequire-corp)zFeature-Policyzsync-xhr *;)zAccess-Control-Allow-Headersr   /z/indexc                 4   #    [        S5      I S h  vN $  N7f)NzDummy server!r        6platform/gsutil/third_party/urllib3/dummyserver/app.pyindexr   %   s      ////s   z/alpn_protocolc                 f   #    [         R                  S   S   S   n [        U 5      I Sh  vN $  N7f)#Return the requester's certificate.
extensionstlsalpn_protocolN)r	   scoper   )r   s    r   r   r   ,   s0      MM,/6GM}----   (1/1z/certificatec                    #    [        S[        R                  5        [        R                  S   S   S   n [        S U R	                  S5       5       5      n[        U5      I Sh  vN $  N7f)r   r   r   r   client_cert_namec              3  B   #    U  H  oR                  S 5      v   M     g7f)=N)split).0parts     r   	<genexpr>certificate.<locals>.<genexpr>8   s     K7Jt::c??7Js   z, N)printr	   r   dictr!   r   )subjectsubject_as_dicts     r   certificater*   3   sX      
'7==!mmL)%01CDGKw}}T7JKKO////s   A#A,%A*&A,z/specific_method)GETPOSTPUT)methodsc                 >  #    [         R                  I Sh  vN R                  SS5      n [         R                  R	                  5       U R	                  5       :X  a  [        SS5      I Sh  vN $ [        SU  S[         R                   3S5      I Sh  vN $  N N. N7f)z8Confirm that the request matches the desired method typeNmethod    zWrong method:  !=   )r	   valuesgetr0   upperr   )method_params    r   specific_methodr9   <   s      "..(--h;L~~!3!3!55"2s+++"\N$w~~.>?
 
 	
 ) ,
s4   BBAB*B+'BBBBBz/uploadr,   c                 <  #    [         R                  I Sh  vN n U R                  S5      nU R                  S5      n[        U R                  SS5      5      n[         R                  I Sh  vN R                  U5      nUc   e[        U5      S:w  a#  [        SU S[        U5       3S	5      I Sh  vN $ US
   n[        R                  " UR                  5       nUR                  5       nSSS5        [        U5      [        W5      :w  a,  [        S[        U5       S[        U5       3S	5      I Sh  vN $ X%R                  :w  a$  [        SU SUR                   3S	5      I Sh  vN $ [        5       I Sh  vN $  GNg GN N! , (       d  f       N= f Nb N1 N!7f)z8Confirm that the uploaded file conforms to specificationNupload_paramupload_filenameupload_size0   zExpected 1 file for 'z', not r4   r   zWrong size: r3   zWrong filename: )r	   formr6   intfilesgetlistlenr   
contextlibclosingstreamreadfilename)paramsparamfilename_paramsizefiles_file_rG   datas           r   uploadrQ   J   sk     <<FJJ~&EZZ 12Nvzz--.DMM!**51F
6{a"#E7'#f+?
 
 	
 1IE			ELL	)V{{} 
* 4yCI"\#d)DT#LcRRR'"~.d5>>2BCS
 
 	
   3   "
 
*	) S
 !s~   FE=AF+F ,AF1F2)FF,AF3F42F&F'F8F9F FF
FFFFz/chunkedc                 H   #    SS jn [        U " 5       5      I S h  vN $  N7f)Nc               3  8   #    [        S5       H  n Sv   M	     g 7f)N   123)range)_s    r   generatechunked.<locals>.generatek   s     qAK s   )returnzIterator[str]r   rX   s    r   chunkedr\   i   s      xz****s   " "z/chunked_gzipc                 N   #    SS jn [        U " 5       SS/5      I S h  vN $  N7f)Nc               3     #    [         R                  " S[         R                  S[         R                  -   5      n S/S-   H  nU R	                  U5      v   M     U R                  5       v   g 7f)N      s   123rT   )zlibcompressobjDEFLATED	MAX_WBITScompressflush)
compressoruncompresseds     r   rX   chunked_gzip.<locals>.generatet   sV     %%aT^^8KL
#HqLL%%l33 )  s   A+A-r2   Content-Encodinggzip)rZ   zIterator[bytes]r   r[   s    r   chunked_gziprm   r   s'     ! xz31M0NOOOOs   %#%z
/keepalivec                    #    [         R                  R                  SS5      S:X  a  S/n [        SSU 5      I S h  vN $ S/n [        SSU 5      I S h  vN $  N N7f)	Nclose   0   1)
Connectionro   Closingr2   )rr   z
keep-alivezKeeping alive)r	   argsr6   r   )headerss    r   	keepaliverv   ~   s\     ||&$.*+"9c7;;;+,GW=== < >s!   8AAAAAAz/echoc                    #    [         R                  S:X  a!  [        [         R                  5      I Sh  vN $ [        [         R                  " 5       I Sh  vN 5      I Sh  vN $  N2 N N7f)zEcho back the paramsr+   N)r	   r0   r   query_stringget_datar   r   r   echorz      sL      ~~"7#7#7888W%5%5%77888 978s3   1A,A&!A,A(A,!A*"A,(A,*A,z
/echo_jsonOPTIONSc                    #    [         R                  S:X  a  [        SS5      I Sh  vN $ [         R                  " 5       I Sh  vN n [        U S[         R                  5      I Sh  vN $  ND N) N7f)zEcho back the JSONr{   r1   r2   N)r	   r0   r   ry   ru   )rP   s    r   	echo_jsonr}      sU      ~~""2s+++!!##DtS'//::: ,#:s3   $A1A+A1A-"A1&A/'A1-A1/A1z/echo_uri/<path:rest>z	/echo_urirestr1   )defaultsc                v   #    [         R                  c   e[        [         R                  5      I Sh  vN $  N7f)zEcho back the requested URIN)r	   	full_pathr   )r~   s    r   echo_urir      s0      (((w001111s   0979z/echo_paramsc                    #    [         R                  " 5       I Sh  vN   [        S [         R                  R	                  5        5       5      n [        [        U 5      5      I Sh  vN $  NN N7f)zEcho back the query parametersNc              3  ,   #    U  H
  u  pX4v   M     g 7fNr   )r"   kvs      r   r$   echo_params.<locals>.<genexpr>   s     ;&:daA6&:s   )r	   ry   sortedrt   itemsr   repr)echods    r   echo_paramsr      sP      


;gll&8&8&:;;EtE{+++ +s"   A.A*A	A.%A,&A.,A.z/headersr+   c                 ~   #    [        [        [        R                  R	                  5       5      5      I S h  vN $  N7fr   )r   r'   r	   ru   r   r   r   r   ru   ru      s(     tGOO$9$9$;<====s   4=;=z/headers_and_paramsc                    #    [        [        [        R                  5      [        R                  S.5      I S h  vN $  N7f)N)ru   rJ   )r   r'   r	   ru   rt   r   r   r   headers_and_paramsr      s4     GOO,ll	
   s   7A >A z/multi_headersc                 f   #    [        S[        [        R                  5      05      I S h  vN $  N7f)Nru   )r   listr	   ru   r   r   r   multi_headersr      s$     	4+@ABBBBr   z/multi_redirectc                   #    [         R                  n U R                  SS5      nSU;   a  UR                  SS5      OUS4u  p#Uc   eUnU(       d  [	        SU5      I Sh  vN $ SSU 34/n[	        S	XE5      I Sh  vN $  N  N7f)
z5Performs a redirect chain based on ``redirect_codes``redirect_codes200,r?   NzDone redirectingLocationz/multi_redirect?redirect_codes=r1   )r	   rt   r6   r!   r   )rJ   codesheadtailstatusru   s         r   multi_redirectr      s      \\FJJ'/E(+uS!$5$-JDF"#5v>>>=dVDEFGr6333 ? 4s$   AB B!B<B=BBz/encodingrequestc                   #    Sn [         R                  R                  SS5      n/ nUS:X  ab  S/n[        5       n[        R
                  " [        R                  " SSUS95       nUR                  U 5        SSS5        UR                  5       n O7US	:X  a  S
/n[        R                  " U 5      n OUS:X  a  S/nSn OUS:X  a  S
/nSn [        U SU5      I Sh  vN $ ! , (       d  f       Nk= f N7f)z,Check for UA accepting gzip/deflate encodings   hello, world!zAccept-Encodingr1   rl   rj   w)modefileobjNdeflate)rk   r   zgarbage-gzips   garbagezgarbage-deflater2   )r	   ru   r6   r   rE   rF   rl   GzipFilewritegetvaluera   re   r   )rP   encodingru   rO   zipfiles        r   encodingrequestr      s      D""#4b9HG6/0	bsE JKwMM$ L~~	Y	23}}T"	^	#/0	&	&23tS'222 LK 3s+   A"C.$C6A C.C,C.
C)%C.z	/redirectc                    #    [         R                  I Sh  vN n U R                  SS5      nU R                  SS5      nUR                  S5      S   nSU4/n[	        S	X45      I Sh  vN $  NU N7f)
 Perform a redirect to ``target``Ntargetr   r   z303 See Other r   r   r1   r	   r5   r6   r!   r   )r5   r   r   status_coderu   s        r   redirectr      sm      >>!FZZ#&FZZ/2F,,s#A&KF#$Gr;888 " 9s"   A0A,AA0'A.(A0.A0z/redirect_afterc                   #    [         R                  n U R                  S5      nU(       ai  [        R                  R	                  [        U5      [        R                  R                  S9n[        R                  R                  USS9n[        U5      nOSnU R                  SS5      nSU4S	U4/n[        S
SU5      I Sh  vN $  N7f)r   date)tzT)usegmt1r   r   r   Retry-Afterr1   i/  N)r	   rt   r6   datetimefromtimestampfloattimezoneutcemailutilsformat_datetimestrr   )rJ   r   dthttp_dtretry_afterr   ru   s          r   redirect_afterr      s      \\F::fD,,U4[X=N=N=R=R,S++--b->'lZZ#&FF#m[%ABGr30000s   B>C CCz/retry_afterc                   #    [         R                  n [        R                  R                  5       [        -
  [        R
                  " SS9:  a<  U R                  SS5      nUR                  S5      S   n[        SUS/5      I S h  vN $ [        R                  R                  5       q[        SS	5      I S h  vN $  N6 N7f)
Nr?   )secondsr   z429 Too Many Requestsr   r   r1   )r   r   r2   )	r	   rt   r   nowr   	timedeltar6   r!   r   )rJ   r   r   s      r   r   r     s      \\F!558J8JST8UUH&=>ll3'*"2{5I4JKKK#,,002r3''' L (s$   BC B<1C 7B>8C >C z/statusc                    #    [         R                  I S h  vN n U R                  SS5      nUR                  S5      S   n[	        SU5      I S h  vN $  N> N7f)Nr   z200 OKr   r   r1   r   )r5   r   r   s      r   r   r     sP      >>!FZZ(+F,,s#A&Kr;/// " 0s!   AA9AAAAz/source_addressc                 P   #    [        [        R                  5      I Sh  vN $  N7f)z"Return the requester's IP address.N)r   r	   remote_addrr   r   r   source_addressr     s      w223333s   &$&z/successful_retryr-   c                   #    [         R                  R                  SS5      n U (       d  [        SS5      I Sh  vN $ [        U ==   S-  ss'   [        U    S:  a  [        SS5      I Sh  vN $ [        S	S
5      I Sh  vN $  NJ N N7f)zqFirst return an error and then success

It's not currently very flexible as the number of retries is hard-coded.
z	test-nameNztest-name header not setr4   r?      zRetry successful!r2   zneed to keep retrying!i  )r	   ru   r6   r   r   )	test_names    r   successful_retryr     s~      ##K6I"#=sCCCY1$	"a'"#6<<<"#;SAAA D
 =As3   7B
B1B
+B,B
?B B
B
B
c                @    [          H  u  pX R                  U'   M     U $ r   )DEFAULT_HEADERSru   )responseheadervalues      r   apply_cachingr   1  s!    (#(  )Or   z/slowc                 v   #    [         R                  " S5      I S h  vN   [        SS5      I S h  vN $  N N7f)N
   zTEN SECONDS LATERr2   )triosleepr   r   r   r   slowr   8  s/     
**R.2C888 8s   959799z/bigfilec                 @   #    SS-  n [        U S5      I S h  vN $  N7f)Ni      WOOO YAY BOOYAKAHr2   r   bigdatas    r   bigfiler   >  s%      ,,Gw,,,,   z/mediumfilec                 @   #    SS-  n [        U S5      I S h  vN $  N7f)Ni   r   r2   r   r   s    r   
mediumfiler   F  s%      ))Gw,,,,r   c                   #    [         R                  S:X  a  [        SS5      I S h  vN $ [         R                  " SS9I S h  vN n [	        U 5      S:w  a  [        SS5      I S h  vN $ [         R
                  I S h  vN n[         R                  I S h  vN nUS	   S
:w  d	  US   S:w  a  [        SS5      I S h  vN $ [	        U5      S:w  d  UR                  S
5      c  [        SS5      I S h  vN $ US
   nUR                  S:w  a!  [        SUR                   3S5      I S h  vN $ [        R                  " U5         UR                  5       R                  S5      nS S S 5        WS:w  a  [        SU 3S5      I S h  vN $ [        SS5      I S h  vN $  GNt GN[ GN; GN& GN N N N! , (       d  f       NT= f N> N,7f)Nr{   r1   r2   T)parse_form_datar   zBad upload data  r;   	filefieldr<   z
lolcat.txtzBad upload form valuesr?   zMissing file in formzFile name incorrect zutf-8z2I'm in ur multipart form-data, hazing a cheezburgrzFile data incorrect zUploaded file correct)r	   r0   r   ry   rD   rB   r@   r6   rI   namerE   rF   rH   decode)
spare_datarB   r@   filerP   s        r   pyodide_uploadr   M  sx    ~~""2s+++''==J
:!"#4c:::--EDN{*d3D.E.U"#;SAAA
5zQ%))K08"#93???D}}$"%9$))#EsKKK			D	!yy{!!'* 
"CC"%9$#@#FFF6<<<# ,=:A? L	!	! G<s   $GFGF"G%F &G=F#>GF&%G;F)<4G0F+15G&F-'G F/! GG GGGG G#G&G)G+G-G/
F=9GGz/pyodide/<py_file>c                ,  #    [        [        R                  S   U 5      nUR                  5       (       aG  [        R
                  " U5      u  p#U(       d  Sn[        UR                  5       SSU4/5      I S h  vN $ [        SS5      I S h  vN $  N N7f)Npyodide_dist_dirz
text/plainr2   zContent-Typer1   r   )r   pyodide_testing_appconfigexists	mimetypes
guess_typer   
read_bytes)py_file	file_path	mime_typer   s       r   pyodider   d  s     (//0BCWMI'229=	$I"  "C>9*E)F
 
 	
 #2s+++	
 ,s$   A5B7B8BBBBz/wheel/dist.whlc                 X  #    [        [        5      R                  R                  S-  n [        U R	                  S5      5      n[        U5      S:  a=  US   nSSUR                   S34/n[        UR                  5       SU5      I S h  vN nU$ [        SU  3S	5      I S h  vN $  N N7f)
Ndistz*.whlr   zContent-Dispositionzinline; filename=''r2   zNO WHEEL IN r   )	r   __file__parentr   globrD   r   r   r   )wheel_folderwheelswheelru   resps        r   r   r   r  s      >((//&8L,##G,-F
6{Qq	)-?

|1+MNO"5#3#3#5sGDD"\,#@#FFF E Gs$   BB*B&	B*!B("B*(B*)rZ   r
   )r~   r   rZ   r
   )r   r   rZ   r
   )r   r   rZ   r
   )B
__future__r   collectionsrE   r   email.utilsr   rl   r   ra   ior   pathlibr   typingr   r   quartr   r   r	   quart.typingr
   
quart_trior   __name__hypercorn_appCounterr   __annotations__minr   r   r   router   r   r*   r9   rQ   r\   rm   rv   rz   r}   r   r   ru   r   r   r   r   r   r   r   r   r   r   after_requestr   r   r   r   r   r   r   r   r   r   <module>r     s   "            2 2 ,  (# .9-@-@-B * B*2*;*;*?*? ' ?  )  S38$0 %   0 %&. '. ^$0 %0 '1GH-7MN	
 O I	
 Y1! 2!< Z + !+ _%P &P \"> #> W&<=9 >9 \F84<&)1DE; F 5; ,-[FB<82 9 .2 ^$, %, Z%9> :> *+ , %v?C @C &'4 (4 '(3 )3. [*@A9 B9 &'1 (1 ^$
( %
( Y9%0 &  0 &'4 (4
 (5%.AB BB" "" # 7#9 $9
 :&- '- =)- *- 9vy.AB= C=, /0
, 1
, ,-
G .
Gr   