§
    „ßj³›  ã                  ó"  — U d Z ddlmZ ddlZddlZddlZddlZ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 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 ddlmZ ddlmZ ddlmZ ddlmZ 	 ddlZe ej!        ej"        fZ#de$d<   n+# e%$ r#  G d„ d¦  «        Z& e&¦   «         Ze ej!        fZ#Y nw xY wdZ'ej(        dk    r	  e)d¦  «         n# e%$ r dZ'Y nw xY w e*ed¦  «        Z+e+rej,        Z,n G d„ d¦  «        Z,	 ej-        Z.n# e/$ r dZ.Y nw xY wdZ0ej1        ej2        de3e4ej1        e4         f         ej5        d         f                  Z6ej7        rddl8m9Z9 dd l8m:Z: dd!l;m<Z< dd"l=m>Z>  G d#„ d$ej?        ¦  «        Z@ G d%„ d&e¦  «        ZAdgd+„ZB	 dhdid/„ZC	 djdkd3„ZDdld4„ZE	 djdmd9„ZFdhdnd=„ZGdodA„ZHdpdD„ZIdqdE„ZJ G dF„ dGe¦  «        ZK G dH„ dIejL        eK¦  «        ZM G dJ„ dKe,eK¦  «        ZN	 	 	 	 	 	 drdsdV„ZOdtdW„ZP	 	 	 	 	 	 	 	 	 	 	 	 	 dudvdf„ZQdS )waØ  A WSGI and HTTP server for use **during development only**. This
server is convenient to use, but is not designed to be particularly
stable, secure, or efficient. Use a dedicate WSGI server and HTTP
server when deploying to production.

It provides features like interactive debugging and code reloading. Use
``run_simple`` to start the server. Put this in a ``run.py`` script:

.. code-block:: python

    from myapp import create_app
    from werkzeug import run_simple
é    )ÚannotationsN)Údatetime)Ú	timedelta)Útimezone)ÚBaseHTTPRequestHandler)Ú
HTTPServer)Úunquote)Úurlsplité   ©Ú_log)Ú_wsgi_encoding_dance)ÚInternalServerError)Úparse_set_header)Ú
uri_to_iriztuple[type[Exception], ...]Úconnection_dropped_errorsc                  ó   — e Zd Zdd„ZdS )Ú	_SslDummyÚnameÚstrÚreturnút.Anyc                ó    — t          d¦  «        ‚)NzUSSL is unavailable because this Python runtime was not compiled with SSL/TLS support.)ÚRuntimeError)Úselfr   s     úC/var/www/html/venv/lib/python3.11/site-packages/werkzeug/serving.pyÚ__getattr__z_SslDummy.__getattr__2   s   € Ýð2ñô ð ó    N©r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r   1   s(   € € € € € ð	ð 	ð 	ð 	ð 	ð 	r   r   TÚntÚcoloramaFÚforkc                  ó   — e Zd ZdS )ÚForkingMixInN)r    r!   r"   r#   r   r   r(   r(   I   s   € € € € € Øˆr   r(   é€   ússl.SSLContextÚadhoc)ÚWSGIApplication)ÚWSGIEnvironment)ÚRSAPrivateKeyWithSerialization)ÚCertificatec                  ó2   — e Zd ZdZdd„Zdd„Zdd
„Zdd„ZdS )ÚDechunkedInputz8An input stream that handles Transfer-Encoding 'chunked'Úrfileút.IO[bytes]r   ÚNonec                ó0   — || _         d| _        d| _        d S )NFr   )Ú_rfileÚ_doneÚ_len)r   r2   s     r   Ú__init__zDechunkedInput.__init__d   s   € ØˆŒØˆŒ
ØˆŒ	ˆ	ˆ	r   Úboolc                ó   — dS )NTr#   ©r   s    r   ÚreadablezDechunkedInput.readablei   s   € Øˆtr   Úintc                ó  — 	 | j                              ¦   «                              d¦  «        }t          |                     ¦   «         d¦  «        }n"# t
          $ r}t          d¦  «        |‚d }~ww xY w|dk     rt          d¦  «        ‚|S )NÚlatin1é   zInvalid chunk headerr   z!Negative chunk length not allowed)r6   ÚreadlineÚdecoder>   ÚstripÚ
ValueErrorÚOSError)r   Úliner8   Úes       r   Úread_chunk_lenzDechunkedInput.read_chunk_lenl   sŽ   € ð	9Ø”;×'Ò'Ñ)Ô)×0Ò0°Ñ:Ô:ˆDÝ�t—z’z‘|”| RÑ(Ô(ˆDˆDøÝð 	9ð 	9ð 	9ÝÐ0Ñ1Ô1°qÐ8øøøøð	9øøøà�!Š8ˆ8ÝÐ=Ñ>Ô>Ð>Øˆs   ‚AA Á
A0ÁA+Á+A0ÚbufÚ	bytearrayc                ó  — d}| j         �su|t          |¦  «        k     �ra| j        dk    r|                      ¦   «         | _        | j        dk    rd| _         | j        dk    rÎt	          t          |¦  «        | j        ¦  «        }||z   t          |¦  «        k    r_| j                             t          |¦  «        |z
  ¦  «        ||d …<   | xj        t          |¦  «        |z
  z  c_        t          |¦  «        }n7| j                             |¦  «        ||||z   …<   | xj        |z  c_        ||z  }| j        dk    r,| j                             ¦   «         }|dvrt          d¦  «        ‚| j         s|t          |¦  «        k     �°a|S )Nr   T)ó   
ó   
ó   z!Missing chunk terminating newline)	r7   Úlenr8   rI   Úminr6   ÚreadrB   rF   )r   rJ   rR   ÚnÚ
terminators        r   ÚreadintozDechunkedInput.readintov   sv  € ØˆØ”*ñ "	G ­¨C©¬¢¡ØŒy˜AŠ~ˆ~ð !×/Ò/Ñ1Ô1�”	àŒy˜AŠ~ˆ~ð "�”
àŒy˜1Š}ˆ}õ �˜C™œ $¤)Ñ,Ô,�ð
 ˜!‘8�c #™hœhÒ&Ð&Ø!%¤×!1Ò!1µ#°c±(´(¸T±/Ñ!BÔ!B�C˜˜˜‘JØ�I”I¥ S¡¤¨D¡Ñ0�I”IÝ˜s™8œ8�D�Dà+/¬;×+;Ò+;¸AÑ+>Ô+>�C˜˜t a™x˜Ñ(Ø�I”I ‘N�I”IØ˜A‘I�DàŒy˜AŠ~ˆ~ð "œ[×1Ò1Ñ3Ô3�
ØÐ%<Ð<Ð<Ý!Ð"EÑFÔFÐFðE ”*ð "	G ­¨C©¬¢¡ðH ˆr   N)r2   r3   r   r4   ©r   r:   ©r   r>   )rJ   rK   r   r>   )r    r!   r"   Ú__doc__r9   r=   rI   rU   r#   r   r   r1   r1   a   sj   € € € € € ØBÐBðð ð ð ð
ð ð ð ðð ð ð ð&ð &ð &ð &ð &ð &r   r1   c                  ó*  ‡ — e Zd ZU dZded<   ed*d„¦   «         Zd+d„Zd,d
„Zd,ˆ fd„Z		 d-d.d„Z
d/ˆ fd„Zd*d„Zd0d„Ze                     d„ g  ed¦  «        ¢ edd¦  «        ¢D ¦   «         ¦  «        Zde ed¦  «        <   d1d2d"„Zd3d%„Zd3d&„Zd4d)„Zˆ xZS )5ÚWSGIRequestHandlerz3A request handler that implements WSGI dispatching.ÚBaseWSGIServerÚserverr   r   c                ó   — | j         j        S ©N)r\   Ú_server_versionr<   s    r   Úserver_versionz!WSGIRequestHandler.server_version¤   s   € àŒ{Ô*Ð*r   r-   c                óÀ  — t          | j        ¦  «        }| j        j        €dnd}| j        sd| _        n(t          | j        t          ¦  «        r| j        df| _        |j        s|j        rd|j        › |j        › �}n|j        }t          |¦  «        }i dd“d|“d	| j
        “d
t          j        “d| j        j        “d| j        j        “dd“d| j        “d| j        “d| j        “dd“dt%          |¦  «        “dt%          |j        ¦  «        “dt%          | j        ¦  «        “dt%          | j        ¦  «        “d|                      ¦   «         “d|                      ¦   «         “| j        j        d         t          | j        j        d         ¦  «        | j        dœ¥}| j                             ¦   «         D ]g\  }}d|v rŒ
|                     ¦   «                              dd¦  «        }|                     dd¦  «        }|dvrd |› �}||v r||         › d!|› �}|||<   Œhd"t9          |                     d#¦  «        ¦  «        v rd$|d%<   t=          |d	         ¦  «        |d	<   |j        r|j        r
|j        |d&<   	 | j                             d$¬'¦  «        }|�tA          j!        |¦  «        |d(<   n6# tD          $ r | j         #                    d)d*¦  «         Y ntH          $ r Y nw xY w|S )+NÚhttpÚhttps)ú<local>r   r   ú/zwsgi.version)r   r   zwsgi.url_schemez
wsgi.inputzwsgi.errorszwsgi.multithreadzwsgi.multiprocesszwsgi.run_onceFzwerkzeug.socketÚSERVER_SOFTWAREÚREQUEST_METHODÚSCRIPT_NAMEÚ Ú	PATH_INFOÚQUERY_STRINGÚREQUEST_URIÚRAW_URIÚREMOTE_ADDRÚREMOTE_PORTr   )ÚSERVER_NAMEÚSERVER_PORTÚSERVER_PROTOCOLÚ_ú-z
)ÚCONTENT_TYPEÚCONTENT_LENGTHÚHTTP_ú,ÚchunkedÚHTTP_TRANSFER_ENCODINGTzwsgi.input_terminatedÚ	HTTP_HOST)Úbinary_formÚSSL_CLIENT_CERTÚerrorz&Cannot fetch SSL peer certificate info)%r
   Úpathr\   Ússl_contextÚclient_addressÚ
isinstancer   ÚschemeÚnetlocr	   r2   ÚsysÚstderrÚmultithreadÚmultiprocessÚ
connectionr`   Úcommandr   ÚqueryÚaddress_stringÚport_integerÚserver_addressÚrequest_versionÚheadersÚitemsÚupperÚreplacer   Úgetr1   ÚgetpeercertÚsslÚDER_cert_to_PEM_certrE   ÚlogÚAttributeError)r   Úrequest_urlÚ
url_schemeÚ	path_infoÚenvironÚkeyÚvalueÚ	peer_certs           r   Úmake_environzWSGIRequestHandler.make_environ¨   s¢  € Ý˜tœyÑ)Ô)ˆØ#œ{Ô6Ð>�V�VÀGˆ
àÔ"ð 	;Ø"0ˆDÔÐÝ˜Ô+­SÑ1Ô1ð 	;Ø#'Ô#6¸Ð":ˆDÔð
 Ô!ð 	) kÔ&8ð 	)ØB˜KÔ.ÐB°Ô0@ÐBÐBˆIˆIà#Ô(ˆIå˜IÑ&Ô&ˆ	ð$
Ø˜Fð$
à˜zð$
ð ˜$œ*ð$
ð �3œ:ð	$
ð
  ¤Ô 7ð$
ð   ¤Ô!9ð$
ð ˜Uð$
ð ˜tœð$
ð ˜tÔ2ð$
ð ˜dœlð$
ð ˜2ð$
ð Õ-¨iÑ8Ô8ð$
ð Õ0°Ô1BÑCÔCð$
ð Õ/°´	Ñ:Ô:ð$
ð" Õ+¨D¬IÑ6Ô6ð#$
ð$ ˜4×.Ò.Ñ0Ô0ð%$
ð& ˜4×,Ò,Ñ.Ô.ð'$
ð(  œ;Ô5°aÔ8Ý˜tœ{Ô9¸!Ô<Ñ=Ô=Ø#Ô3ð-$
ð $
ð $
ˆð2 œ,×,Ò,Ñ.Ô.ð 
	!ð 
	!‰JˆC�Ø�cˆzˆzØà—)’)‘+”+×%Ò% c¨3Ñ/Ô/ˆCØ—M’M &¨"Ñ-Ô-ˆEØÐ<Ð<Ð<Ø#˜c�m�m�Ø˜'�>�>Ø& sœ|Ð5Ð5¨eÐ5Ð5�EØ ˆG�C‰LˆLàÕ(¨¯ªÐ5MÑ)NÔ)NÑOÔOÐOÐOØ/3ˆGÐ+Ñ,Ý$2°7¸<Ô3HÑ$IÔ$IˆG�LÑ!ð Ôð 	6 +Ô"4ð 	6Ø#.Ô#5ˆG�KÑ ð	ð œ×3Ò3ÀÐ3ÑEÔEˆIØÐ$å-0Ô-EÀiÑ-PÔ-P�Ð)Ñ*øøÝð 	Oð 	Oð 	OàŒK�OŠO˜GÐ%MÑNÔNÐNÐNÐNÝð 	ð 	ð 	àˆDð	øøøð ˆs   É34J( Ê(%KË	KËKr4   c                ó  ‡ ‡‡‡‡‡	‡
‡‡— ‰ j                              dd¦  «                             ¦   «                              ¦   «         dk    r‰ j                             d¦  «         ‰                      ¦   «         x‰ _        Šd Šd Šd Š
d ŠdŠdˆˆˆˆˆ ˆ
ˆfd
„Šdˆˆˆˆfd„	Š	dˆˆˆˆ ˆ	ˆfd„}	  |‰ j        j	        ¦  «         d S # t          $ r!}‰                      |‰¦  «         Y d }~d S d }~wt          $ r“}‰ j        j        r‚ ‰
�	‰rd‰ _        	 ‰
€d Šd Š |t          ¦   «         ¦  «         n# t          $ r Y nw xY wddlm}  ||¦  «                             ¦   «         }‰ j                             dd|› �¦  «         Y d }~d S d }~ww xY w)NÚExpectri   z100-continues   HTTP/1.1 100 Continue

FÚdataÚbytesr   r4   c                ó(  •— ‰€
J d¦   «         ‚‰
€
J d¦   «         ‚‰�€‰Š‰
Š		 ‰                      d d¦  «        \  }}n# t          $ r ‰d}}Y nw xY wt          |¦  «        }‰                     ||¦  «         t	          ¦   «         }‰	D ]B\  }}‰                     ||¦  «         |                     |                     ¦   «         ¦  «         ŒCd|v sB‰d         dk    s6d|cxk    rdk     s)n |d	v s#‰j        d
k    rdŠ‰                     dd¦  «         ‰                     dd¦  «         ‰ 	                    ¦   «          t          | t          ¦  «        s
J d¦   «         ‚| r ‰rh‰j                             t          t          | ¦  «        ¦  «        dd …                              ¦   «         ¦  «         ‰j                             d¦  «         ‰j                             | ¦  «         ‰r‰j                             d¦  «         ‰j                             ¦   «          d S )Nzwrite() before start_responser   ri   zcontent-lengthrg   ÚHEADéd   éÈ   >   é0  éÌ   úHTTP/1.1TzTransfer-Encodingry   Ú
ConnectionÚclosezapplications must write bytesé   rN   )ÚsplitrE   r>   Úsend_responseÚsetÚsend_headerÚaddÚlowerÚprotocol_versionÚend_headersr‚   r¥   ÚwfileÚwriteÚhexrP   ÚencodeÚflush)r¤   Úcode_strÚmsgÚcodeÚheader_keysrž   rŸ   Úchunk_responser�   Úheaders_sentÚheaders_setr   Ústatus_sentÚ
status_sets          €€€€€€€r   r¹   z*WSGIRequestHandler.run_wsgi.<locals>.write  s[  ø€ àÐ)Ð)Ð+JÑ)Ô)Ð)ØÐ*Ð*Ð,KÑ*Ô*Ð*ØÑ"Ø(�Ø*�ð4Ø$/×$5Ò$5°d¸AÑ$>Ô$>‘M�H˜c˜cøÝ!ð 4ð 4ð 4Ø$/°˜c�H�H�Hð4øøøå˜8‘}”}�Ø×"Ò" 4¨Ñ-Ô-Ð-Ý!™eœe�Ø".ð 1ð 1‘J�C˜Ø×$Ò$ S¨%Ñ0Ô0Ð0Ø—O’O C§I¢I¡K¤KÑ0Ô0Ð0Ð0ð )¨KÐ7Ð7Ø"Ð#3Ô4¸Ò>Ð>Ø 4Ð-Ð-Ò-Ð-¨#Ò-Ð-Ð-Ð-Ø :Ð-Ð-àÔ-°Ò;Ð;à%)�NØ×$Ò$Ð%8¸)ÑDÔDÐDð × Ò  ¨wÑ7Ô7Ð7Ø× Ò Ñ"Ô"Ð"å˜d¥EÑ*Ô*ÐKÐKÐ,KÑKÔKÐKàð .Ø!ð .Ø”J×$Ò$¥S­¨T©¬¡^¤^°A°B°BÔ%7×%>Ò%>Ñ%@Ô%@ÑAÔAÐAØ”J×$Ò$ WÑ-Ô-Ð-à”
× Ò  Ñ&Ô&Ð&à!ð .Ø”J×$Ò$ WÑ-Ô-Ð-àŒJ×ÒÑÔÐÐÐs   ¢< ¼AÁAc                ó”   •— |r/	 ‰r!|d                               |d         ¦  «        ‚	 d }n# d }w xY w‰rt          d¦  «        ‚| Š|Š‰S )Nr   r¯   zHeaders already set)Úwith_tracebackÚAssertionError)Ústatusr�   Úexc_inforÂ   rÃ   rÅ   r¹   s      €€€€r   Ústart_responsez3WSGIRequestHandler.run_wsgi.<locals>.start_response=  sw   ø€ àð <ð$Ø#ð FØ& qœk×8Ò8¸À!¼ÑEÔEÐEðFð  $�H�Hø˜t�H�O�O�O�OØð <Ý$Ð%:Ñ;Ô;Ð;ØˆJØ!ˆKØˆLs   …#, ¬0Úappr,   c                ó$  •—  | ‰‰
¦  «        }	 |D ]} ‰|¦  «         Œ‰s ‰d¦  «         ‰r‰	j                              d¦  «         t          j        ¦   «         }|                     ‰	j        t          j        ¦  «         d}d}|                     d¬¦  «        rV‰	j         	                    d¦  «        }|t          |¦  «        z  }|dz  }|r|dk    s|d	k    rn|                     d¬¦  «        °V|                     ¦   «          t          |d
¦  «        r|                     ¦   «          d S d S # t          j        ¦   «         }|                     ‰	j        t          j        ¦  «         d}d}|                     d¬¦  «        rV‰	j         	                    d¦  «        }|t          |¦  «        z  }|dz  }|r|dk    s|d	k    rn|                     d¬¦  «        °V|                     ¦   «          t          |d
¦  «        r|                     ¦   «          w w xY w)Nr   s   0

r   g{®Gáz„?)Útimeouti€–˜ r   l    d(	 iè  r®   )r¸   r¹   Ú	selectorsÚDefaultSelectorÚregisterr‰   Ú
EVENT_READÚselectr2   rR   rP   r®   Úhasattr)rÌ   Úapplication_iterr¤   ÚselectorÚ
total_sizeÚtotal_readsrÁ   r�   rÂ   r   rË   r¹   s         €€€€€€r   Úexecutez,WSGIRequestHandler.run_wsgi.<locals>.executeK  s]  ø€ Ø"˜s 7¨NÑ;Ô;Ðð#-Ø,ð  ð  �DØ�E˜$‘K”K�K�KØ#ð Ø�E˜#‘J”J�JØ!ð 3Ø”J×$Ò$ \Ñ2Ô2Ð2õ %Ô4Ñ6Ô6�Ø×!Ò! $¤/µ9Ô3GÑHÔHÐHØ�
Ø�ð —o’o¨d�oÑ3Ô3ð 	àœ:Ÿ?š?¨:Ñ6Ô6�DØ¥# d¡)¤)Ñ+�JØ 1Ñ$�Kð  ð  :°Ò#?Ð#?À;ÐQUÒCUÐCUØð —o’o¨d�oÑ3Ô3ð 	ð —’Ñ Ô Ð åÐ+¨WÑ5Ô5ð -Ø$×*Ò*Ñ,Ô,Ð,Ð,Ð,ð-ð -øõ) %Ô4Ñ6Ô6�Ø×!Ò! $¤/µ9Ô3GÑHÔHÐHØ�
Ø�ð —o’o¨d�oÑ3Ô3ð 	àœ:Ÿ?š?¨:Ñ6Ô6�DØ¥# d¡)¤)Ñ+�JØ 1Ñ$�Kð  ð  :°Ò#?Ð#?À;ÐQUÒCUÐCUØð —o’o¨d�oÑ3Ô3ð 	ð —’Ñ Ô Ð åÐ+¨WÑ5Ô5ð -Ø$×*Ò*Ñ,Ô,Ð,Ð,ð-øøøs   �9D, Ä,C#HTr   )ÚDebugTracebackr~   zError on request:
)r¤   r¥   r   r4   r^   )rÌ   r,   r   r4   )r�   r”   rµ   rD   r¸   r¹   r¡   r�   r\   rÌ   r   Úconnection_droppedÚ	ExceptionÚpassthrough_errorsÚclose_connectionr   Údebug.tbtoolsrÚ   Úrender_traceback_textr˜   )r   rÙ   rH   rÚ   r¾   rÁ   r�   rÂ   rÃ   rË   rÄ   rÅ   r¹   s   `    @@@@@@@@r   Úrun_wsgizWSGIRequestHandler.run_wsgiù   s  øøøøøøøøø€ ØŒ<×Ò˜H bÑ)Ô)×/Ò/Ñ1Ô1×7Ò7Ñ9Ô9¸^ÒKÐKØŒJ×ÒÐ=Ñ>Ô>Ð>à!%×!2Ò!2Ñ!4Ô!4Ð4ˆŒ�wØ!%ˆ
Ø48ˆØ"&ˆØ59ˆØ$ˆð7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	ðr	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð%	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ð %	-ðN	BØˆG�D”K”OÑ$Ô$Ð$Ð$Ð$øÝ(ð 	0ð 	0ð 	0Ø×#Ò# A wÑ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/øøøøÝð 	Bð 	Bð 	BØŒ{Ô-ð ØàÐ&¨>Ð&Ø(,�Ô%ðð Ð&Ø!%�JØ"&�KØ�Õ+Ñ-Ô-Ñ.Ô.Ð.Ð.øÝð ð ð Ø�ðøøøð 6Ð5Ð5Ð5Ð5Ð5à �. Ñ#Ô#×9Ò9Ñ;Ô;ˆCØŒK�OŠO˜GÐ%@¸3Ð%@Ð%@ÑAÔAÐAÐAÐAÐAÐAÐAÐAøøøøð)	BøøøsI   Â-C Ã
F
ÃC*Ã*F
Ã7FÄD.Ä-FÄ.
D;Ä8FÄ:D;Ä;AFÆF
c                óH  •— 	 t          ¦   «                              ¦   «          dS # t          t          j        f$ r }|                      |¦  «         Y d}~dS d}~wt          $ r>}| j        j        �&t          |¦  «        r|  
                    d|¦  «         n‚ Y d}~dS d}~ww xY w)z/Handles a request ignoring dropped connections.NzSSL error occurred: %s)ÚsuperÚhandleÚConnectionErrorÚsocketrÎ   rÛ   rÜ   r\   r€   Úis_ssl_errorÚ	log_error)r   rH   Ú	__class__s     €r   rä   zWSGIRequestHandler.handleŒ  sÉ   ø€ ð	Ý‰GŒG�NŠNÑÔÐÐÐøÝ¥¤Ð0ð 	'ð 	'ð 	'Ø×#Ò# AÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&øøøøÝð 	ð 	ð 	ØŒ{Ô&Ð2µ|ÀA±´Ð2Ø—’Ð7¸Ñ;Ô;Ð;Ð;àð <Ð;Ð;Ð;Ð;Ð;øøøøð	øøøs    ƒ % ¥B!»AÁB!Á#3BÂB!Nr~   ÚBaseExceptionr�   úWSGIEnvironment | Nonec                ó   — dS )z`Called if the connection was closed by the client.  By default
        nothing happens.
        Nr#   )r   r~   r�   s      r   rÛ   z%WSGIRequestHandler.connection_dropped˜  s   € € € r   r   r   c                ót   •— |                      d¦  «        r| j        S t          t          ¦   «         |¦  «        S )NÚdo_)Ú
startswithrá   Úgetattrrã   )r   r   ré   s     €r   r   zWSGIRequestHandler.__getattr__Ÿ  s5   ø€ à�?Š?˜5Ñ!Ô!ð 	!Ø”=Ð õ •u‘w”w Ñ%Ô%Ð%r   c                ój   — t          | dd ¦  «        r| j        d         S | j        sdS | j        d         S )Nr�   rn   rd   r   )rð   r�   r�   r<   s    r   rŒ   z!WSGIRequestHandler.address_string§  sA   € Ý�4˜ DÑ)Ô)ð 	/Ø”< Ô.Ð.àÔ"ð 	Ø�9àÔ" 1Ô%Ð%r   r>   c                ó   — | j         d         S )Nr   )r�   r<   s    r   r�   zWSGIRequestHandler.port_integer°  s   € ØÔ" 1Ô%Ð%r   c                ó   — i | ]	}|d |d›�“Œ
S )z\xÚ02xr#   )Ú.0Úcs     r   ú
<dictcomp>zWSGIRequestHandler.<dictcomp>µ  s"   € ÐFÐFÐF˜aˆˆM�!ˆMˆMˆMÐFÐFÐFr   é    é   é    z\\ú\rt   r¿   ú	int | strÚsizec                óH  — 	 t          | j        ¦  «        }| j        › d|› d| j        › �}n# t          $ r
 | j        }Y nw xY w|                     | j        ¦  «        }t          |¦  «        }|d         dk    rt          |d¦  «        }n�|dk    rnz|dk    rt          |d¦  «        }nc|d         dk    rt          |d	¦  «        }nF|d
k    rt          |d¦  «        }n/|d         dk    rt          |dd¦  «        }nt          |dd¦  «        }|  
                    dd|||¦  «         d S )Nú r   Ú1ÚboldÚ200Ú304ÚcyanÚ3ÚgreenÚ404ÚyellowÚ4ÚredÚmagentaÚinfoz
"%s" %s %s)r   r   rŠ   r�   r™   ÚrequestlineÚ	translateÚ_control_char_tabler   Ú_ansi_styler˜   )r   r¿   rý   r   r¾   s        r   Úlog_requestzWSGIRequestHandler.log_request¹  sM  € ð	#Ý˜dœiÑ(Ô(ˆDØ”\ÐAÐA DÐAÐA¨4Ô+?ÐAÐAˆCˆCøÝð 	#ð 	#ð 	#àÔ"ˆCˆCˆCð	#øøøð
 �mŠm˜DÔ4Ñ5Ô5ˆÝ�4‰yŒyˆà�Œ7�cŠ>ˆ>Ý˜c 6Ñ*Ô*ˆCˆCØ�UŠ]ˆ]ØØ�UŠ]ˆ]Ý˜c 6Ñ*Ô*ˆCˆCØ�!ŒW˜Š^ˆ^Ý˜c 7Ñ+Ô+ˆCˆCØ�UŠ]ˆ]Ý˜c 8Ñ,Ô,ˆCˆCØ�!ŒW˜Š^ˆ^Ý˜c 6¨5Ñ1Ô1ˆCˆCå˜c 6¨9Ñ5Ô5ˆCà�Š�˜ s¨D°$Ñ7Ô7Ð7Ð7Ð7s   ‚(+ «?¾?ÚformatÚargsc                ó$   —  | j         d|g|¢R Ž  d S )Nr~   ©r˜   ©r   r  r  s      r   rè   zWSGIRequestHandler.log_errorÖ  s$   € ØˆŒ�˜&Ð( 4Ð(Ð(Ð(Ð(Ð(Ð(r   c                ó$   —  | j         d|g|¢R Ž  d S )Nr  r  r  s      r   Úlog_messagezWSGIRequestHandler.log_messageÙ  s$   € ØˆŒ�˜Ð' $Ð'Ð'Ð'Ð'Ð'Ð'r   ÚtypeÚmessagec           	     ó¨   — |                       ¦   «                              dd¦  «        }t          ||› d|                      ¦   «         › d|› d�g|¢R Ž  d S )Nú%z%%z - - [z] ú
)rŒ   r“   r   Úlog_date_time_string)r   r  r  r  rŒ   s        r   r˜   zWSGIRequestHandler.logÜ  sy   € à×,Ò,Ñ.Ô.×6Ò6°s¸DÑAÔAˆÝØØÐOÐO T×%>Ò%>Ñ%@Ô%@ÐOÐOÀGÐOÐOÐOð	
ð ð	
ð 	
ð 	
ð 	
ð 	
ð 	
r   )r   r   )r   r-   ©r   r4   r^   )r~   rê   r�   rë   r   r4   r   rW   )rt   rt   )r¿   rü   rý   rü   r   r4   )r  r   r  r   r   r4   ©r  r   r  r   r  r   r   r4   )r    r!   r"   rX   Ú__annotations__Úpropertyr`   r¡   rá   rä   rÛ   r   rŒ   r�   r   Ú	maketransÚranger  Úordr  rè   r  r˜   Ú__classcell__©ré   s   @r   rZ   rZ   Ÿ   s»  ø€ € € € € € Ø=Ð=àÐÐÑàð+ð +ð +ñ „Xð+ðOð Oð Oð OðbQBð QBð QBð QBðf
ð 
ð 
ð 
ð 
ð 
ð GKðð ð ð ð ð&ð &ð &ð &ð &ð &ð&ð &ð &ð &ð&ð &ð &ð &ð Ÿ-š-ØFÐFÐ#E U U¨4¡[¤[Ð#E°5°5¸¸tÑ3DÔ3DÐ#EÐFÑFÔFñô Ðð &+Ð˜˜˜D™	œ	Ñ"ð8ð 8ð 8ð 8ð 8ð:)ð )ð )ð )ð(ð (ð (ð (ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   rZ   rŸ   r   Ústylesr   c                óV   — t           s| S dddddddœ}|D ]}d||         › d	| › �} Œ| › d
�S )Nr   é   rø   é!   é#   é$   )r  r
  r  r  r  r  z[Úmz[0m)Ú_log_add_style)rŸ   r(  ÚcodesÚstyles       r   r  r  æ  sj   € Ýð Øˆð ØØØØØðð €Eð ð /ð /ˆØ.˜˜eœÐ.Ð. uÐ.Ð.ˆˆàÐÐÐÐr   Úcnú
str | Noneú2tuple[Certificate, RSAPrivateKeyWithSerialization]c           	     ó®  — 	 ddl m} ddlm} ddlm} ddlm} ddlm	} n# t          $ r t          d¦  «        d ‚w xY w |¦   «         }|                     dd	|¬
¦  «        }| €d} |                     |                     |j        d¦  «        |                     |j        | ¦  «        g¦  «        } |¦   «         }|                     ¦   «                              |¦  «                             |¦  «                             |                     ¦   «         ¦  «                             |                     ¦   «         ¦  «                             t1          j        t4          j        ¦  «        ¦  «                             t1          j        t4          j        ¦  «        t;          d¬¦  «        z   ¦  «                             |                     |j         g¦  «        d¬¦  «                             | !                    | "                    | ¦  «        | "                    d| › �¦  «        g¦  «        d¬¦  «         #                    || $                    ¦   «         |¦  «        }	|	|fS )Nr   )Úx509)Údefault_backend)Úhashes)Úrsa)ÚNameOIDz<Using ad-hoc certificates requires the cryptography library.i  i   )Úpublic_exponentÚkey_sizeÚbackendÚ*zDummy Certificateim  )ÚdaysF)Úcriticalz*.)%Úcryptographyr6  Úcryptography.hazmat.backendsr7  Úcryptography.hazmat.primitivesr8  Ú)cryptography.hazmat.primitives.asymmetricr9  Úcryptography.x509.oidr:  ÚImportErrorÚ	TypeErrorÚgenerate_private_keyÚNameÚNameAttributeÚORGANIZATION_NAMEÚCOMMON_NAMEÚCertificateBuilderÚsubject_nameÚissuer_nameÚ
public_keyÚserial_numberÚrandom_serial_numberÚnot_valid_beforeÚdtÚnowr   ÚutcÚnot_valid_afterr   Úadd_extensionÚExtendedKeyUsageÚOID_SERVER_AUTHÚSubjectAlternativeNameÚDNSNameÚsignÚSHA256)
r2  r6  r7  r8  r9  r:  r=  ÚpkeyÚsubjectÚcerts
             r   Úgenerate_adhoc_ssl_pairrb  ù  s_  € ð	Ø%Ð%Ð%Ð%Ð%Ð%Ø@Ð@Ð@Ð@Ð@Ð@Ø9Ð9Ð9Ð9Ð9Ð9ØAÐAÐAÐAÐAÐAØ1Ð1Ð1Ð1Ð1Ð1Ð1øÝð ð ð ÝØJñ
ô 
àð	ðøøøð
 ˆoÑÔ€GØ×#Ò#Ø¨°gð $ñ ô €Dð
 
€zØˆà�iŠià×Ò˜wÔ8Ð:MÑNÔNØ×Ò˜wÔ2°BÑ7Ô7ð	
ñô €Gð ˆoÑÔ€Gà×ÒÑ!Ô!ß	Š�gÑ	Ô	ß	Š�WÑ	Ô	ß	Š�D—O’OÑ%Ô%Ñ	&Ô	&ß	Š�t×0Ò0Ñ2Ô2Ñ	3Ô	3ß	Ò	�"œ&¥¤Ñ.Ô.Ñ	/Ô	/ß	Š�œ¥¤Ñ-Ô-µ	¸sÐ0CÑ0CÔ0CÑCÑ	DÔ	Dß	Š�t×,Ò,¨dÔ.BÐ-CÑDÔDÈuˆÑ	UÔ	Uß	ŠØ×'Ò'¨¯ª°bÑ)9Ô)9¸4¿<º<È	ÈRÈ	È	Ñ;RÔ;RÐ(SÑTÔTØð 
ñ 

ô 

÷ 
Šˆd�F—M’M‘O”O WÑ	-Ô	-ð 	ð �ˆ:Ðs   ‚! ¡<Ú	base_pathÚhostútuple[str, str]c           	     óþ  — |�|}t          |¬¦  «        \  }}ddlm} | › d�}| › d�}t          |d¦  «        5 }|                     |                     |j        j        ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   t          |d¦  «        5 }|                     |                     |j        j        |j	        j
        |                     ¦   «         ¬¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   ||fS )	aÂ  Creates an SSL key for development.  This should be used instead of
    the ``'adhoc'`` key which generates a new cert on each server start.
    It accepts a path for where it should store the key and cert and
    either a host or CN.  If a host is given it will use the CN
    ``*.host/CN=host``.

    For more information see :func:`run_simple`.

    .. versionadded:: 0.9

    :param base_path: the path to the certificate and key.  The extension
                      ``.crt`` is added for the certificate, ``.key`` is
                      added for the key.
    :param host: the name of the host.  This can be used as an alternative
                 for the `cn`.
    :param cn: the `CN` to use.
    N)r2  r   ©Úserializationz.crtz.keyÚwb©Úencodingr  Úencryption_algorithm)rb  rC  rh  Úopenr¹   Úpublic_bytesÚEncodingÚPEMÚprivate_bytesÚPrivateFormatÚTraditionalOpenSSLÚNoEncryption)	rc  rd  r2  ra  r_  rh  Ú	cert_fileÚ	pkey_fileÚfs	            r   Úmake_ssl_devcertrx  *  s—  € ð* ÐØˆÝ(¨BÐ/Ñ/Ô/�J€Dˆ$à<Ð<Ð<Ð<Ð<Ð<àÐ"Ð"Ð"€IØÐ"Ð"Ð"€Iå	ˆi˜Ñ	Ô	ð ? !Ø	�Š�×!Ò! -Ô"8Ô"<Ñ=Ô=Ñ>Ô>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?å	ˆi˜Ñ	Ô	ð 
 !Ø	�ŠØ×ÒØ&Ô/Ô3Ø$Ô2ÔEØ%2×%?Ò%?Ñ%AÔ%Að ñ ô ñ	
ô 	
ð 	
ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð �iÐÐs$   ¸3A7Á7A;Á>A;ÂAC0Ã0C4Ã7C4c            	     ó–  — ddl } ddl}t          ¦   «         \  }}ddlm} |                     ¦   «         \  }}|                     ¦   «         \  }}|                      t          j        |¦  «         |                      t          j        |¦  «         t          j	        || 
                    |j        j        ¦  «        ¦  «         t          j	        ||                     |j        j        |j        j        |                     ¦   «         ¬¦  «        ¦  «         t          j        |¦  «         t          j        |¦  «         t%          ||¦  «        }	|	S )z:Generates an adhoc SSL context for the development server.r   Nrg  rj  )ÚatexitÚtempfilerb  rC  rh  ÚmkstemprÑ   ÚosÚremover¹   rn  ro  rp  rq  rr  rs  rt  r®   Úload_ssl_context)
rz  r{  ra  r_  rh  Úcert_handleru  Úpkey_handlerv  Úctxs
             r   Úgenerate_adhoc_ssl_contextrƒ  V  s9  € à€M€M€MØ€O€O€Oå(Ñ*Ô*�J€Dˆ$à<Ð<Ð<Ð<Ð<Ð<à%×-Ò-Ñ/Ô/Ñ€K�Ø%×-Ò-Ñ/Ô/Ñ€K�Ø
‡O‚O•B”I˜yÑ)Ô)Ð)Ø
‡O‚O•B”I˜yÑ)Ô)Ð)å„Hˆ[˜$×+Ò+¨MÔ,BÔ,FÑGÔGÑHÔHÐHÝ„HØØ×ÒØ"Ô+Ô/Ø Ô.ÔAØ!.×!;Ò!;Ñ!=Ô!=ð 	ñ 	
ô 	
ñô ð õ „Hˆ[ÑÔÐÝ„Hˆ[ÑÔÐÝ
˜9 iÑ
0Ô
0€CØ€Jr   ru  rv  Úprotocolú
int | Nonec                óv   — |€t           j        }t          j        |¦  «        }|                     | |¦  «         |S )aã  Loads SSL context from cert/private key files and optional protocol.
    Many parameters are directly taken from the API of
    :py:class:`ssl.SSLContext`.

    :param cert_file: Path of the certificate to use.
    :param pkey_file: Path of the private key to use. If not given, the key
                      will be obtained from the certificate file.
    :param protocol: A ``PROTOCOL`` constant from the :mod:`ssl` module.
        Defaults to :data:`ssl.PROTOCOL_TLS_SERVER`.
    )r–   ÚPROTOCOL_TLS_SERVERÚ
SSLContextÚload_cert_chain)ru  rv  r„  r‚  s       r   r  r  t  s<   € ð ÐÝÔ*ˆå
Œ.˜Ñ
"Ô
"€CØ×Ò˜	 9Ñ-Ô-Ð-Ø€Jr   r~   úException | Noner:   c                óœ   — | €1t          j        t          t          j        ¦   «         d         ¦  «        } t          | t          j        ¦  «        S )z?Checks if the given error (or the current one) is an SSL error.Nr   )ÚtÚcastrÜ   r…   rÊ   r‚   r–   ÚSSLError)r~   s    r   rç   rç   ‰  s5   € à€}Ý”•y¥#¤,¡.¤.°Ô"3Ñ4Ô4ˆÝ�e�Sœ\Ñ*Ô*Ð*r   Úportr>   úsocket.AddressFamilyc                ó¦   — |                       d¦  «        rt          j        S d| v r!t          t          d¦  «        rt          j        S t          j        S )zUReturn ``AF_INET4``, ``AF_INET6``, or ``AF_UNIX`` depending on
    the host and port.zunix://ú:ÚAF_INET6)rï   ræ   ÚAF_UNIXrÔ   r“  ÚAF_INET)rd  r�  s     r   Úselect_address_familyr–  �  sG   € ð ‡‚�yÑ!Ô!ð ÝŒ~ÐØ	�ˆˆ�¥¨Ñ4Ô4ˆÝŒÐÝŒ>Ðr   Úfamilyútuple[str, int] | strc                ó2  — |t           k    r8t          j                             |                      d¦  «        d         ¦  «        S 	 t          j        | ||t
          j        t
          j        ¦  «        }n# t
          j	        $ r | |fcY S w xY w|d         d         S )zVReturn a fully qualified socket address that can be passed to
    :func:`socket.bind`.ú://r¯   r   é   )
Úaf_unixr}  r   ÚabspathÚ	partitionræ   ÚgetaddrinfoÚSOCK_STREAMÚIPPROTO_TCPÚgaierror)rd  r�  r—  Úress       r   Úget_sockaddrr¤  š  s›   € ð
 •ÒÐåŒw�Š˜tŸ~š~¨eÑ4Ô4°QÔ7Ñ8Ô8Ð8ðÝÔ Ø�$˜¥Ô 2µFÔ4Fñ
ô 
ˆˆøõ Œ?ð ð ð Ø�TˆzÐÐÐðøøøàˆqŒ6�!Œ9Ðs   Á,A2 Á2BÂBc                ób  — | t           j        k    rdnd}t          j         | t           j        ¦  «        5 }	 |                     |df¦  «         n0# t          $ r# | t           j        k    rdndcY cddd¦  «         S w xY w|                     ¦   «         d         cddd¦  «         S # 1 swxY w Y   dS )zˆGet the IP address of an external interface. Used when binding to
    0.0.0.0 or ::1 to show a more useful URL.

    :meta private:
    zfd31:f903:5ab5:1::1z10.253.155.219i2ã  z::1ú	127.0.0.1Nr   )ræ   r“  Ú
SOCK_DGRAMÚconnectrF   Úgetsockname)r—  rd  Úss      r   Úget_interface_ipr«  «  s#  € ð %+­f¬oÒ$=Ð$=Ð Ð ÐCS€Då	Œ�v�vÔ0Ñ	1Ô	1ð "°Qð	GØ�IŠI�t˜U�mÑ$Ô$Ð$Ð$øÝð 	Gð 	Gð 	GØ"¥f¤oÒ5Ð5�5�5¸;ÐFÐFð	"ð "ð "ð "ñ "ô "ð "ð "ð	Gøøøð �}Š}‰Œ˜qÔ!ð"ð "ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð "ð "s4   ´B$¶AÁB$ÁA;Á,B$Á:A;Á;B$Â$B(Â+B(c                  óh   ‡ — e Zd ZdZdZdZeZdZ	 	 	 	 d$d%ˆ fd„Z	d&d„Z
d'd(ˆ fd„Zd)ˆ fd"„Zd*d#„Zˆ xZS )+r[   zuA WSGI server that that handles one request at a time.

    Use :func:`make_server` to create a server instance.
    FTNrd  r   r�  r>   rÌ   r,   Úhandlerútype[WSGIRequestHandler] | NonerÝ   r:   r€   ú_TSSLContextArg | NoneÚfdr…  r   r4   c                ó"  •— |€t           }dt          |¦  «        vr| j        s| j        rd|_        || _        || _        || _        || _        t          ||¦  «        x| _
        }t          |t          |¦  «        |¦  «        }	|t          k    rO|€Mt          j        t           |	¦  «        }	t"          j                             |	¦  «        rt#          j        |	¦  «         t+          ¦   «                              |	|d¬¦  «         |�€	 |                      ¦   «          |                      ¦   «          �n9# t2          $ r·}
|                      ¦   «          t7          |
j        t:          j        ¬¦  «         |
j        t>          j         k    rPt7          d|› d�t:          j        ¬¦  «         t:          j!        dk    r!|d	k    rt7          d
t:          j        ¬¦  «         t;          j"        d¦  «         Y d }
~
n}d }
~
wtF          $ r |                      ¦   «          ‚ w xY w|                      ¦   «          tI          j%        ||tH          j&        ¦  «        | _$        | j$         '                    ¦   «         | _(        |t          k    r| j(        d         | _        |�\tS          |tT          ¦  «        r
tW          |Ž }n|dk    rtY          ¦   «         }| -                    | j$        d¬¦  «        | _$        || _.        nd | _.        dd l/}d|j0         1                    d¦  «        › �| _2        d S )Nr¶   r¬   F)Úbind_and_activate)ÚfilezPort zp is in use by another program. Either identify and stop that program, or start the server with a different port.Údarwiniˆ  zPOn macOS, try searching for and disabling 'AirPlay Receiver' in System Settings.r   r+   T)Úserver_sider   z	Werkzeug/Úwerkzeug)3rZ   Úvarsr‡   rˆ   r¶   rd  r�  rÌ   rÝ   r–  Úaddress_familyr¤  r>   rœ  rŒ  r�  r   r}  r   ÚexistsÚunlinkrã   r9   Úserver_bindÚserver_activaterF   Úserver_closeÚprintÚstrerrorr…   r†   ÚerrnoÚ
EADDRINUSEÚplatformÚexitrê   ræ   Úfromfdr   r©  rŽ   r‚   Útupler  rƒ  Úwrap_socketr€   Úimportlib.metadataÚmetadataÚversionr_   )r   rd  r�  rÌ   r­  rÝ   r€   r°  r¸  rŽ   rH   Ú	importlibré   s               €r   r9   zBaseWSGIServer.__init__È  s5  ø€ ð ˆ?Ý(ˆGð
 ¥T¨'¡]¤]Ð2Ð2ØÔð 3Ø $Ô 1ð 3ð (2ˆGÔ$àˆŒ	ØˆŒ	ØˆŒØ"4ˆÔå/DÀTÈ4Ñ/PÔ/PÐPˆÔ˜nÝ% d­C°©I¬I°~ÑFÔFˆð �WÒ$Ð$¨¨ÝœV¥C¨Ñ8Ô8ˆNåŒw�~Š~˜nÑ-Ô-ð *Ý”	˜.Ñ)Ô)Ð)õ 	‰Œ×ÒØØØ#ð 	ñ 	
ô 	
ð 	
ð ‰:ðØ× Ò Ñ"Ô"Ð"Ø×$Ò$Ñ&Ô&Ð&Ñ&øÝð ð ð ð ×!Ò!Ñ#Ô#Ð#Ý�a”j¥s¤zÐ2Ñ2Ô2Ð2à”7�eÔ.Ò.Ð.Ýð! ð !ð !ð !õ !œZð	ñ ô ð õ ”| xÒ/Ð/°D¸D²L°LÝðFå!$¤ðñ ô ð õ ”˜‘”������øøøøÝ ð ð ð Ø×!Ò!Ñ#Ô#Ð#Øðøøøð ×ÒÑÔÐõ !œ-¨¨N½FÔ<NÑOÔOˆDŒKØ"&¤+×"9Ò"9Ñ";Ô";ˆDÔà�WÒ$Ð$àÔ+¨AÔ.ˆDŒIàÐ"Ý˜+¥uÑ-Ô-ð ;Ý.°Ð<��Ø Ò'Ð'Ý8Ñ:Ô:�à%×1Ò1°$´+È4Ð1ÑPÔPˆDŒKØ6AˆDÔÐà#ˆDÔà!Ð!Ð!Ð!àS¨9Ô+=×+EÒ+EÀjÑ+QÔ+QÐSÐSˆÔÐÐs   Ä(D. Ä.
HÄ8B-G*Ç*#Hr  r  r  r   c                ó"   — t          ||g|¢R Ž  d S r^   r   )r   r  r  r  s       r   r˜   zBaseWSGIServer.log/  s    € ÝˆT�7Ð"˜TÐ"Ð"Ð"Ð"Ð"Ð"r   ç      à?Úpoll_intervalÚfloatc                óÊ   •— 	 t          ¦   «                              |¬¦  «         n# t          $ r Y nw xY w|                      ¦   «          d S # |                      ¦   «          w xY w)N)rÍ  )rã   Úserve_foreverÚKeyboardInterruptr½  )r   rÍ  ré   s     €r   rÐ  zBaseWSGIServer.serve_forever2  sx   ø€ ð	 Ý‰GŒG×!Ò!°Ð!Ñ>Ô>Ð>Ð>øÝ ð 	ð 	ð 	ØˆDð	øøøð ×ÒÑÔÐÐÐøˆD×ÒÑÔÐÐøøøs!   ƒ"& ¥A ¦
3°A ²3³A ÁA"Úrequestr�   r˜  c                óX   •— | j         r‚ t          ¦   «                              ||¦  «        S r^   )rÝ   rã   Úhandle_error)r   rÒ  r�   ré   s      €r   rÔ  zBaseWSGIServer.handle_error:  s-   ø€ ð Ô"ð 	Øå‰wŒw×#Ò# G¨^Ñ<Ô<Ð<r   c                ój  — d}t          |dd¦  «        }|g}| j        t          k    r|                     d| j        › �¦  «         nË| j        €dnd}| j        }| j        dv rƒ|                     d	| j        › d
�¦  «         | j        dk    rd}t          t          j        ¦  «        }nd}t          t          j	        ¦  «        }|                     d|› d|› d| j
        › �¦  «         d|v rd|› d�}|                     d|› d|› d| j
        › �¦  «         t          dd                     |¦  «        ¦  «         dS )z<Show information about the address when starting the server.zvWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.r  r
  z * Running on Nrb   rc   >   ú::ú0.0.0.0z * Running on all addresses (ú)r×  r¦  z[::1]rš  r’  ú[ú]r  r  )r  r¸  rœ  Úappendrd  r€   r«  ræ   r•  r“  r�  r   Újoin)r   Údev_warningÚmessagesrƒ   Údisplay_hostnameÚ	localhosts         r   Úlog_startupzBaseWSGIServer.log_startupB  sq  € ðAð 	õ " +¨v°uÑ=Ô=ˆØ�=ˆàÔ¥'Ò)Ð)Ø�OŠOÐ8¨T¬YÐ8Ð8Ñ9Ô9Ð9Ð9à#Ô/Ð7�V�V¸WˆFØ#œyÐàŒyÐ-Ð-Ð-Ø—’Ð LÀÄ	Ð LÐ LÐ LÑMÔMÐMà”9 	Ò)Ð)Ø +�IÝ'7½¼Ñ'GÔ'GÐ$Ð$à '�IÝ'7½¼Ñ'HÔ'HÐ$à—’Ð S°Ð SÐ S¸IÐ SÐ SÈÌ	Ð SÐ SÑTÔTÐTàÐ&Ð&Ð&Ø#:Ð'7Ð#:Ð#:Ð#:Ð à�OŠOÐV¨VÐVÐVÐ8HÐVÐVÈ4Ì9ÐVÐVÑWÔWÐWåˆV�T—Y’Y˜xÑ(Ô(Ñ)Ô)Ð)Ð)Ð)r   )NFNN)rd  r   r�  r>   rÌ   r,   r­  r®  rÝ   r:   r€   r¯  r°  r…  r   r4   r   )rÌ  )rÍ  rÎ  r   r4   )rÒ  r   r�   r˜  r   r4   r  )r    r!   r"   rX   r‡   rˆ   ÚLISTEN_QUEUEÚrequest_queue_sizeÚallow_reuse_addressr9   r˜   rÐ  rÔ  rá  r&  r'  s   @r   r[   r[   ½  sê   ø€ € € € € ðð ð
 €KØ€LØ%ÐØÐð 48Ø#(Ø.2ØðeTð eTð eTð eTð eTð eTð eTðN#ð #ð #ð #ð ð  ð  ð  ð  ð  ð  ð=ð =ð =ð =ð =ð =ð *ð  *ð  *ð  *ð  *ð  *ð  *ð  *r   r[   c                  ó   — e Zd ZdZdZdZdS )ÚThreadedWSGIServerz†A WSGI server that handles concurrent requests in separate
    threads.

    Use :func:`make_server` to create a server instance.
    TN)r    r!   r"   rX   r‡   Údaemon_threadsr#   r   r   ræ  ræ  e  s$   € € € € € ðð ð €KØ€N€N€Nr   ræ  c                  ó4   ‡ — e Zd ZdZdZ	 	 	 	 	 ddˆ fd„Zˆ xZS )ÚForkingWSGIServerz�A WSGI server that handles concurrent requests in separate forked
    processes.

    Use :func:`make_server` to create a server instance.
    Té(   NFrd  r   r�  r>   rÌ   r,   Ú	processesr­  r®  rÝ   r:   r€   r¯  r°  r…  r   r4   c	           	     ó�   •— t           st          d¦  «        ‚t          ¦   «                              |||||||¦  «         || _        d S )Nz'Your platform does not support forking.)Úcan_forkrE   rã   r9   Úmax_children)
r   rd  r�  rÌ   rë  r­  rÝ   r€   r°  ré   s
            €r   r9   zForkingWSGIServer.__init__y  sQ   ø€ õ ð 	HÝÐFÑGÔGÐGå‰Œ×Ò˜˜t S¨'Ð3EÀ{ÐTVÑWÔWÐWØ%ˆÔÐÐr   )rê  NFNN)rd  r   r�  r>   rÌ   r,   rë  r>   r­  r®  rÝ   r:   r€   r¯  r°  r…  r   r4   )r    r!   r"   rX   rˆ   r9   r&  r'  s   @r   ré  ré  p  sd   ø€ € € € € ðð ð €Lð Ø37Ø#(Ø.2Øð&ð &ð &ð &ð &ð &ð &ð &ð &ð &ð &r   ré  rÌ   r,   Úthreadedrë  Úrequest_handlerr®  rÝ   r€   r¯  r°  c	           
     óÆ   — |r|dk    rt          d¦  «        ‚|rt          | ||||||¬¦  «        S |dk    rt          | |||||||¬¦  «        S t          | ||||||¬¦  «        S )a6  Create an appropriate WSGI server instance based on the value of
    ``threaded`` and ``processes``.

    This is called from :func:`run_simple`, but can be used separately
    to have access to the server object, such as to run it in a separate
    thread.

    See :func:`run_simple` for parameter docs.
    r   z4Cannot have a multi-thread and multi-process server.©r°  )rE   ræ  ré  r[   )	rd  r�  rÌ   rï  rë  rð  rÝ   r€   r°  s	            r   Úmake_serverró  ‹  s·   € ð( ð Q�I ’M�MÝÐOÑPÔPÐPàð 
Ý!Ø�$˜˜_Ð.@À+ÐRTð
ñ 
ô 
ð 	
ð �1‚}€}Ý ØØØØØØØØð	
ñ 	
ô 	
ð 		
õ Øˆd�C˜Ð*<¸kÈbðñ ô ð r   c                 óH   — t           j                             d¦  «        dk    S )zqCheck if the server is running as a subprocess within the
    Werkzeug reloader.

    .. versionadded:: 0.10
    ÚWERKZEUG_RUN_MAINÚtrue)r}  r�   r”   r#   r   r   Úis_running_from_reloaderr÷  ¸  s   € õ Œ:�>Š>Ð-Ñ.Ô.°&Ò8Ð8r   ÚautoÚhostnameÚapplicationÚuse_reloaderÚuse_debuggerÚ
use_evalexÚextra_filesút.Iterable[str] | NoneÚexclude_patternsÚreloader_intervalÚreloader_typeÚstatic_filesú'dict[str, str | tuple[str, str]] | Noner4   c                ó6  — t          |t          ¦  «        st          d¦  «        ‚|rddlm}  |||¦  «        }|r-ddlm}  |||¬¦  «        }|j                             | ¦  «         t          ¦   «         sd}nt          t          j        d         ¦  «        }t          | |||
|||||¬¦	  «	        }|j                             d	¦  «         t          |                     ¦   «         ¦  «        t          j        d<   t          ¦   «         s2|                     ¦   «          t%          d
t'          dd¦  «        ¦  «         |rKddlm} 	  ||j        ||||	¬¦  «         |                     ¦   «          dS # |                     ¦   «          w xY w|                     ¦   «          dS )a  Start a development server for a WSGI application. Various
    optional features can be enabled.

    .. warning::

        Do not use the development server when deploying to production.
        It is intended for use only during local development. It is not
        designed to be particularly efficient, stable, or secure.

    :param hostname: The host to bind to, for example ``'localhost'``.
        Can be a domain, IPv4 or IPv6 address, or file path starting
        with ``unix://`` for a Unix socket.
    :param port: The port to bind to, for example ``8080``. Using ``0``
        tells the OS to pick a random free port.
    :param application: The WSGI application to run.
    :param use_reloader: Use a reloader process to restart the server
        process when files are changed.
    :param use_debugger: Use Werkzeug's debugger, which will show
        formatted tracebacks on unhandled exceptions.
    :param use_evalex: Make the debugger interactive. A Python terminal
        can be opened for any frame in the traceback. Some protection is
        provided by requiring a PIN, but this should never be enabled
        on a publicly visible server.
    :param extra_files: The reloader will watch these files for changes
        in addition to Python modules. For example, watch a
        configuration file.
    :param exclude_patterns: The reloader will ignore changes to any
        files matching these :mod:`fnmatch` patterns. For example,
        ignore cache files.
    :param reloader_interval: How often the reloader tries to check for
        changes.
    :param reloader_type: The reloader to use. The ``'stat'`` reloader
        is built in, but may require significant CPU to watch files. The
        ``'watchdog'`` reloader is much more efficient but requires
        installing the ``watchdog`` package first.
    :param threaded: Handle concurrent requests using threads. Cannot be
        used with ``processes``.
    :param processes: Handle concurrent requests using up to this number
        of processes. Cannot be used with ``threaded``.
    :param request_handler: Use a different
        :class:`~BaseHTTPServer.BaseHTTPRequestHandler` subclass to
        handle requests.
    :param static_files: A dict mapping URL prefixes to directories to
        serve static files from using
        :class:`~werkzeug.middleware.SharedDataMiddleware`.
    :param passthrough_errors: Don't catch unhandled exceptions at the
        server level, let the server crash instead. If ``use_debugger``
        is enabled, the debugger will still catch such errors.
    :param ssl_context: Configure TLS to serve over HTTPS. Can be an
        :class:`ssl.SSLContext` object, a ``(cert_file, key_file)``
        tuple to create a typical context, or the string ``'adhoc'`` to
        generate a temporary self-signed certificate.

    .. versionchanged:: 2.1
        Instructions are shown for dealing with an "address already in
        use" error.

    .. versionchanged:: 2.1
        Running on ``0.0.0.0`` or ``::`` shows the loopback IP in
        addition to a real IP.

    .. versionchanged:: 2.1
        The command-line interface was removed.

    .. versionchanged:: 2.0
        Running on ``0.0.0.0`` or ``::`` shows a real IP address that
        was bound as well as a warning not to run the development server
        in production.

    .. versionchanged:: 2.0
        The ``exclude_patterns`` parameter was added.

    .. versionchanged:: 0.15
        Bind to a Unix socket by passing a ``hostname`` that starts with
        ``unix://``.

    .. versionchanged:: 0.10
        Improved the reloader and added support for changing the backend
        through the ``reloader_type`` parameter.

    .. versionchanged:: 0.9
        A command-line interface was added.

    .. versionchanged:: 0.8
        ``ssl_context`` can be a tuple of paths to the certificate and
        private key files.

    .. versionchanged:: 0.6
        The ``ssl_context`` parameter was added.

    .. versionchanged:: 0.5
       The ``static_files`` and ``passthrough_errors`` parameters were
       added.
    zport must be an integerr   )ÚSharedDataMiddleware)ÚDebuggedApplication)ÚevalexNÚWERKZEUG_SERVER_FDrò  Tr  zPress CTRL+C to quitr  )Úrun_with_reloader)rþ  r   Úintervalr  )r‚   r>   rG  Úmiddleware.shared_datar  Údebugr  Útrusted_hostsrÛ  r÷  r}  r�   ró  ræ   Úset_inheritabler   Úfilenorá  r   r  Ú	_reloaderr
  rÐ  r½  )rù  r�  rú  rû  rü  rý  rþ  r   r  r  rï  rë  rð  r  rÝ   r€   r  r  r°  Úsrvr
  s                        r   Ú
run_simpler  Á  sø  € õ` �d�CÑ Ô ð 3ÝÐ1Ñ2Ô2Ð2àð FØ@Ð@Ð@Ð@Ð@Ð@à*Ð*¨;¸ÑEÔEˆàð 3Ø.Ð.Ð.Ð.Ð.Ð.à)Ð)¨+¸jÐIÑIÔIˆð 	Ô!×(Ò(¨Ñ2Ô2Ð2å#Ñ%Ô%ð 3Øˆˆå•”Ð0Ô1Ñ2Ô2ˆå
ØØØØØØØØØð
ñ 
ô 
€Cð „J×Ò˜tÑ$Ô$Ð$Ý'*¨3¯:ª:©<¬<Ñ'8Ô'8…B„JÐ#Ñ$å#Ñ%Ô%ð DØ�ŠÑÔÐÝˆV•[Ð!7¸ÑBÔBÑCÔCÐCàð Ø0Ð0Ð0Ð0Ð0Ð0ð		ØÐØÔ!Ø'Ø!1Ø*Ø+ðñ ô ð ð ×ÒÑÔÐÐÐøˆC×ÒÑÔÐÐøøøà×ÒÑÔÐÐÐs   ÅE, Å,F)rŸ   r   r(  r   r   r   r^   )r2  r3  r   r4  )NN)rc  r   rd  r3  r2  r3  r   re  )r   r*   )ru  r   rv  r3  r„  r…  r   r*   )r~   rŠ  r   r:   )rd  r   r�  r>   r   r�  )rd  r   r�  r>   r—  r�  r   r˜  )r—  r�  r   r   )Fr   NFNN)rd  r   r�  r>   rÌ   r,   rï  r:   rë  r>   rð  r®  rÝ   r:   r€   r¯  r°  r…  r   r[   rV   )FFTNNr   rø  Fr   NNFN)"rù  r   r�  r>   rú  r,   rû  r:   rü  r:   rý  r:   rþ  rÿ  r   rÿ  r  r>   r  r   rï  r:   rë  r>   rð  r®  r  r  rÝ   r:   r€   r¯  r   r4   )RrX   Ú
__future__r   rÀ  Úior}  rÏ   ræ   Úsocketserverr…   ÚtypingrŒ  r   rT  r   r   Úhttp.serverr   r   Úurllib.parser	   r
   Ú	_internalr   r   Ú
exceptionsr   rb   r   Úurlsr   r–   rå   rÎ   ÚSSLEOFErrorr   r!  rF  r   r/  r   Ú
__import__rÔ   rí  r(   r”  rœ  r™   râ  ÚOptionalÚUnionrÅ  r   ÚLiteralÚ_TSSLContextArgÚTYPE_CHECKINGÚ_typeshed.wsgir,   r-   Ú-cryptography.hazmat.primitives.asymmetric.rsar.   Úcryptography.x509r/   Ú	RawIOBaser1   rZ   r  rb  rx  rƒ  r  rç   r–  r¤  r«  r[   ÚThreadingMixInræ  ré  ró  r÷  r  r#   r   r   ú<module>r)     sÄ  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ø "Ð "Ð "Ð "Ð "Ð "Ø  Ð  Ð  Ð  Ð  Ð  Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø +Ð +Ð +Ð +Ð +Ð +Ø "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð ðBØ€J€J€Jð 	ØŒØŒð>Ðð ð ð ñ ð øð
 ð 
Bð 
Bð 
Bðð ð ð ð ñ ô ð ð ˆ)‰+Œ+€CØ!0°&´.Ð AÐÐÐð
Bøøøð €à„7ˆd‚?€?ðØˆ
�:ÑÔÐÐøØð ð ð Øˆˆˆðøøøð ˆ7�2�vÑÔ€àð ØÔ,€L€Lðð ð ð ð ñ ô ð ðØŒn€G€GøØð ð ð Ø€G€G€Gðøøøð €à”*Ø„GÐ˜e C¨¬°C¬Ð$8Ô9¸1¼9ÀWÔ;MÐMÔNô€ð „?ð .Ø.Ð.Ð.Ð.Ð.Ð.Ø.Ð.Ð.Ð.Ð.Ð.ðð ð ð ð ð ð .Ð-Ð-Ð-Ð-Ð-ð;ð ;ð ;ð ;ð ;�R”\ñ ;ô ;ð ;ð|D
ð D
ð D
ð D
ð D
Ð/ñ D
ô D
ð D
ðN
ð ð ð ð( ð.ð .ð .ð .ð .ðd ?Cð) ð ) ð ) ð ) ð ) ðXð ð ð ð> JNðð ð ð ð ð*+ð +ð +ð +ð +ðð ð ð ðð ð ð ð""ð "ð "ð "ð$e*ð e*ð e*ð e*ð e*�Zñ e*ô e*ð e*ðPð ð ð ð ˜Ô4°nñ ô ð ð&ð &ð &ð &ð &˜ nñ &ô &ð &ð> ØØ7;Ø$Ø*.Øð*ð *ð *ð *ð *ðZ9ð 9ð 9ð 9ð ØØØ*.Ø/3ØØØØØ7;Ø<@Ø$Ø*.ð!eð eð eð eð eð eð es6   Á3B Â%B4Â3B4ÃC ÃCÃCÄD
 Ä
DÄD