Ë
    £2Úi¤™  ã                  óŽ  — 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ZdZ ejB                  dk(  r		  e"d«        e#ed«      Z$e$rejJ                  Z%n
 G d„ d«      Z%	 ejL                  Z'dZ)ejT                  ejV                  dejX                  e-ejT                  e-   f   ej\                  d   f      Z/ej`                  rddl1m2Z2 ddl1m3Z3 ddl4m5Z5 ddl6m7Z7  G d „ d!ejp                  «      Z9 G d"„ d#e«      Z:d6d$„Z;	 d7	 	 	 d8d%„Z<	 d9	 	 	 	 	 	 	 d:d&„Z=d;d'„Z>	 d9	 	 	 	 	 	 	 d<d(„Z?d7d=d)„Z@d>d*„ZA	 	 	 	 	 	 	 	 d?d+„ZBd@d,„ZC G d-„ d.e«      ZD G d/„ d0ejŠ                  eD«      ZF G d1„ d2e%eD«      ZG	 	 	 	 	 	 dA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dBd3„ZHdCd4„ZI	 	 	 	 	 	 	 	 	 	 	 	 	 dD	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dEd5„ZJy# e$ r  G d„ d«      Z e«       ZY �Œ·w xY w# e$ r dZ Y �Œ«w xY w# e($ r dZ'Y �ŒŠw xY w)FaØ  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)Ú
uri_to_iric                  ó   — e Zd Zdd„Zy)Ú	_SslDummyc                ó   — t        d«      ‚)NzUSSL is unavailable because this Python runtime was not compiled with SSL/TLS support.)ÚRuntimeError)ÚselfÚnames     úG/var/www/html/acx/venv/lib/python3.12/site-packages/werkzeug/serving.pyÚ__getattr__z_SslDummy.__getattr__*   s   € Üð2óð ó    N©r   ÚstrÚreturnút.Any)Ú__name__Ú
__module__Ú__qualname__r   © r   r   r   r   )   s   „ ô	r   r   TÚntÚcoloramaFÚforkc                  ó   — e Zd Zy)ÚForkingMixInN)r   r   r    r!   r   r   r&   r&   @   s   „ Ør   r&   é€   ússl.SSLContextÚadhoc)ÚWSGIApplication)ÚWSGIEnvironment)ÚRSAPrivateKeyWithSerialization)ÚCertificatec                  ó0   — e Zd ZdZdd„Zdd„Zd	d„Zd
d„Zy)ÚDechunkedInputz8An input stream that handles Transfer-Encoding 'chunked'c                ó.   — || _         d| _        d| _        y )NFr   )Ú_rfileÚ_doneÚ_len)r   Úrfiles     r   Ú__init__zDechunkedInput.__init__[   s   € ØˆŒØˆŒ
Øˆ�	r   c                 ó   — y)NTr!   ©r   s    r   ÚreadablezDechunkedInput.readable`   s   € Ør   c                óè   — 	 | j                   j                  «       j                  d«      }t        |j	                  «       d«      }|dk  rt        d«      ‚|S # t
        $ r}t        d«      |‚d }~ww xY w)NÚlatin1é   zInvalid chunk headerr   z!Negative chunk length not allowed)r1   ÚreadlineÚdecodeÚintÚstripÚ
ValueErrorÚOSError)r   Úliner3   Úes       r   Úread_chunk_lenzDechunkedInput.read_chunk_lenc   sp   € ð	9Ø—;‘;×'Ñ'Ó)×0Ñ0°Ó:ˆDÜ�t—z‘z“| RÓ(ˆDð �!Š8ÜÐ=Ó>Ð>Øˆøô	 ò 	9ÜÐ0Ó1°qÐ8ûð	9ús   ‚AA Á	A1Á A,Á,A1c                ó   — d}| j                   �sn|t        |«      k  �r_| j                  dk(  r| j                  «       | _        | j                  dk(  rd| _         | j                  dkD  rÂt	        t        |«      | j                  «      }||z   t        |«      kD  rW| j
                  j                  t        |«      |z
  «      ||d  | xj                  t        |«      |z
  z  c_        t        |«      }n;| j
                  j                  |«      ||||z    | xj                  |z  c_        ||z  }| j                  dk(  r)| j
                  j                  «       }|dvrt        d«      ‚| j                   s|t        |«      k  r�Œ_|S )Nr   T)ó   
ó   
ó   z!Missing chunk terminating newline)	r2   Úlenr3   rD   Úminr1   Úreadr<   rA   )r   ÚbufrK   ÚnÚ
terminators        r   ÚreadintozDechunkedInput.readintom   sB  € ØˆØ—*“* ¬¨C«£Ø�y‰y˜AŠ~ð !×/Ñ/Ó1�”	à�y‰y˜AŠ~ð "�”
à�y‰y˜1Š}ô œ˜C› $§)¡)Ó,�ð
 ˜!‘8œc #›hÒ&Ø!%§¡×!1Ñ!1´#°c³(¸T±/Ó!B�C˜˜�JØ—I’I¤ S£¨D¡Ñ0•IÜ˜s›8‘Dà+/¯;©;×+;Ñ+;¸AÓ+>�C˜˜t a™xÐ(Ø—I’I ‘N•IØ˜A‘I�Dà�y‰y˜AŠ~ð "Ÿ[™[×1Ñ1Ó3�
ØÐ%<Ñ<Ü!Ð"EÓFÐFðE —*’* ¬¨C«¤ðH ˆr   N)r4   zt.IO[bytes]r   ÚNone©r   Úbool©r   r>   )rL   Ú	bytearrayr   r>   )r   r   r    Ú__doc__r5   r8   rD   rO   r!   r   r   r/   r/   X   s   „ ÙBóó
óô&r   r/   c            
      ó6  ‡— 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dd„Zej                  g  ed«      ¢ edd«      ¢D � �ci c]	  }|d|d›�“Œ c}} «      Zde ed«      <   ddd„Zd d„Zd d„Zd!d„ZˆxZS c c}} w )"ÚWSGIRequestHandlerz3A request handler that implements WSGI dispatching.ÚBaseWSGIServerÚserverc                ó.   — | j                   j                  S ©N)rY   Ú_server_versionr7   s    r   Úserver_versionz!WSGIRequestHandler.server_version›   s   € à�{‰{×*Ñ*Ð*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| j)                  «       “d| j+                  «       “| j                  j,                  d   t        | j                  j,                  d   «      | j.                  dœ¥}| j0                  j3                  «       D ]X  \  }}d|v rŒ|j5                  «       j7                  dd«      }|j7                  dd«      }|dvrd |› �}||v r
||   › d!|› �}|||<   ŒZ |j9                  d"d«      j;                  «       j=                  «       d#k(  rd$|d%<   t?        |d	   «      |d	<   |j                  r|j                  r|j                  |d&<   	 | j                  jA                  d$¬'«      }|�tC        jD                  |«      |d(<   |S # tF        $ r  | j                  jI                  d)d*«       Y |S tJ        $ r Y |S w xY w)+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_ú,ÚHTTP_TRANSFER_ENCODINGÚchunkedTzwsgi.input_terminatedÚ	HTTP_HOST)Úbinary_formÚSSL_CLIENT_CERTÚerrorz&Cannot fetch SSL peer certificate info)&r
   ÚpathrY   Ússl_contextÚclient_addressÚ
isinstancer   ÚschemeÚnetlocr	   r4   ÚsysÚstderrÚmultithreadÚmultiprocessÚ
connectionr]   Úcommandr   ÚqueryÚaddress_stringÚport_integerÚserver_addressÚrequest_versionÚheadersÚitemsÚupperÚreplaceÚgetr?   Úlowerr/   ÚgetpeercertÚsslÚDER_cert_to_PEM_certr@   ÚlogÚAttributeError)r   Úrequest_urlÚ
url_schemeÚ	path_infoÚenvironÚkeyÚvalueÚ	peer_certs           r   Úmake_environzWSGIRequestHandler.make_environŸ   s  € Ü˜tŸy™yÓ)ˆØ#Ÿ{™{×6Ñ6Ð>‘VÀGˆ
à×"Ò"Ø"0ˆDÕÜ˜×+Ñ+¬SÔ1Ø#'×#6Ñ#6¸Ð":ˆDÔð
 ×!Ò! k×&8Ò&8Ø˜K×.Ñ.Ð/°×0@Ñ0@Ð/AÐB‰Ià#×(Ñ(ˆIä˜IÓ&ˆ	ð$
Ø˜Fð$
à˜zð$
ð ˜$Ÿ*™*ð$
ð œ3Ÿ:™:ð	$
ð
  §¡× 7Ñ 7ð$
ð   §¡×!9Ñ!9ð$
ð ˜Uð$
ð ˜tŸ™ð$
ð ˜t×2Ñ2ð$
ð ˜dŸl™lð$
ð ˜2ð$
ð Ô-¨iÓ8ð$
ð Ô0°×1BÑ1BÓCð$
ð Ô/°·	±	Ó:ð$
ð" Ô+¨D¯I©IÓ6ð#$
ð$ ˜4×.Ñ.Ó0ð%$
ð& ˜4×,Ñ,Ó.ð'$
ð(  Ÿ;™;×5Ñ5°aÑ8Ü˜tŸ{™{×9Ñ9¸!Ñ<Ó=Ø#×3Ñ3ò-$
ˆð2 Ÿ,™,×,Ñ,Ó.ò 
	!‰JˆC�Ø�c‰zØà—)‘)“+×%Ñ% c¨3Ó/ˆCØ—M‘M &¨"Ó-ˆEØÐ<Ñ<Ø˜c˜U�m�Ø˜'‘>Ø& s™|˜n¨A¨e¨WÐ5�EØ ˆG�CŠLð
	!ð �;‰;Ð/°Ó4×:Ñ:Ó<×BÑBÓDÈ	ÒQØ/3ˆGÐ+Ñ,Ü$2°7¸<Ñ3HÓ$IˆG�LÑ!ð ×Ò +×"4Ò"4Ø#.×#5Ñ#5ˆG�KÑ ð	ð Ÿ™×3Ñ3ÀÐ3ÓEˆIØÐ$ä-0×-EÑ-EÀiÓ-P�Ð)Ñ*ð ˆøô ò 	Oà�K‰K�O‰O˜GÐ%MÕNð
 ˆô	 ò 	ààˆð		ús   Ë6L Ì%MÌ8MÍMc                ó  ‡ ‡‡‡‡‡	‡
‡‡— ‰ j                   j                  dd«      j                  «       j                  «       dk(  r‰ j                  j                  d«       ‰ j                  «       x‰ _        Šd Šd Šd Š
d ŠdŠdˆˆˆˆˆ ˆ
ˆfd„Šdˆˆˆˆfd„	Š	dˆˆˆˆ ˆ	ˆfd„}	  |‰ j                  j                  «       y # t        t        j                  f$ r}‰ j                  |‰«       Y d }~y 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)                  «       }‰ j                  j+                  dd|› �«       Y d }~y d }~ww xY w)NÚExpectrf   z100-continues   HTTP/1.1 100 Continue

Fc                óž  •— ‰€J d«       ‚‰
€J d«       ‚‰€Þ‰Š‰
Š		 ‰j                  d d«      \  }}t        |«      }‰j                  ||«       t	        «       }‰	D ]6  \  }}‰j                  ||«       |j                  |j                  «       «       Œ8 d|v s<‰d   dk(  s4d|cxk  rdk  s)n |d	v s#‰j                  d
k\  rdŠ‰j                  dd«       ‰j                  dd«       ‰j                  «        t        | t        «      sJ d«       ‚| r“‰rY‰j                  j                  t        t        | «      «      dd  j!                  «       «       ‰j                  j                  d«       ‰j                  j                  | «       ‰r‰j                  j                  d«       ‰j                  j#                  «        y # t        $ r ‰d}}Y �Œ›w xY w)Nzwrite() before start_responser   rf   zcontent-lengthrd   ÚHEADéd   éÈ   >   é0  éÌ   úHTTP/1.1TzTransfer-Encodingrw   Ú
ConnectionÚclosezapplications must write bytesé   rG   )Úsplitr@   r>   Úsend_responseÚsetÚsend_headerÚaddr’   Úprotocol_versionÚend_headersr   ÚbytesÚwfileÚwriteÚhexrI   ÚencodeÚflush)ÚdataÚ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Ð+JÓJÐ)ØÐ*ÐKÐ,KÓKÐ*ØÐ"Ø(�Ø*�ð4Ø$/×$5Ñ$5°d¸AÓ$>‘M�H˜cô ˜8“}�Ø×"Ñ" 4¨Ô-Ü!›e�Ø".ò 1‘J�C˜Ø×$Ñ$ S¨%Ô0Ø—O‘O C§I¡I£KÕ0ð1ð )¨KÑ7Ø"Ð#3Ñ4¸Ò>Ø 4Ô-¨#Ô-Ø :Ñ-à×-Ñ-°Ò;à%)�NØ×$Ñ$Ð%8¸)ÔDð × Ñ  ¨wÔ7Ø× Ñ Ô"ä˜d¤EÔ*ÐKÐ,KÓKÐ*áÙ!Ø—J‘J×$Ñ$¤S¬¨T«£^°A°BÐ%7×%>Ñ%>Ó%@ÔAØ—J‘J×$Ñ$ WÔ-à—
‘
× Ñ  Ô&á!Ø—J‘J×$Ñ$ WÔ-à�J‰J×ÑÕøô] "ò 4Ø$/°˜c“Hð4ús   ›F; Æ;GÇGc                óx   •— |r	 ‰r|d   j                  |d   «      ‚	 d }n‰rt        d«      ‚| Š|Š‰S # d }w xY w)Nr   r«   zHeaders already set)Úwith_tracebackÚAssertionError)Ústatusr�   Úexc_infor¿   rÀ   rÂ   rµ   s      €€€€r   Ústart_responsez3WSGIRequestHandler.run_wsgi.<locals>.start_response4  sZ   ø€ áð$Ù#Ø& q™k×8Ñ8¸À!¹ÓEÐEð $ð  $‘HÙÜ$Ð%:Ó;Ð;ØˆJØ!ˆKØˆLøð  $‘Hús   …5 µ9c                óÌ  •—  | ‰‰
«      }	 |D ]
  } ‰|«       Œ ‰s ‰d«       ‰r‰	j                   j                  d«       t        j                  «       }|j	                  ‰	j
                  t        j                  «       d}d}|j                  d¬«      rN‰	j                  j                  d«      }|t        |«      z  }|dz  }|r
|dk\  s|d	kD  rn|j                  d¬«      rŒN|j                  «        t        |d
«      r|j                  «        y y # t        j                  «       }|j	                  ‰	j
                  t        j                  «       d}d}|j                  d¬«      rN‰	j                  j                  d«      }|t        |«      z  }|dz  }|r
|dk\  s|d	kD  rn|j                  d¬«      rŒN|j                  «        t        |d
«      r|j                  «        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Úselectr4   rK   rI   rª   Úhasattr)ÚappÚapplication_iterr¹   ÚselectorÚ
total_sizeÚtotal_readsr¾   r›   r¿   r   rÈ   rµ   s         €€€€€€r   Úexecutez,WSGIRequestHandler.run_wsgi.<locals>.executeB  sÆ  ø€ Ù" 7¨NÓ;Ðð#-Ø,ò  �DÙ˜$•Kð á#Ù˜#”JÙ!Ø—J‘J×$Ñ$ \Ô2ô %×4Ñ4Ó6�Ø×!Ñ! $§/¡/´9×3GÑ3GÔHØ�
Ø�ð —o‘o¨d�oÔ3àŸ:™:Ÿ?™?¨:Ó6�DØ¤# d£)Ñ+�JØ 1Ñ$�Kñ   :°Ò#?À;ÐQUÒCUØð —o‘o¨d�oÕ3ð —‘Ô äÐ+¨WÔ5Ø$×*Ñ*Õ,ð 6øô) %×4Ñ4Ó6�Ø×!Ñ! $§/¡/´9×3GÑ3GÔHØ�
Ø�ð —o‘o¨d�oÔ3àŸ:™:Ÿ?™?¨:Ó6�DØ¤# d£)Ñ+�JØ 1Ñ$�Kñ   :°Ò#?À;ÐQUÒCUØð —o‘o¨d�oÕ3ð —‘Ô äÐ+¨WÔ5Ø$×*Ñ*Õ,ð 6ús   Œ6D ÄB"G#Æ5.G#Tr   )ÚDebugTracebackr{   zError on request:
)r¹   r³   r   rP   r[   )rÑ   r*   r   rP   )r�   r‘   r’   r?   r´   rµ   rŸ   r›   rY   rÑ   ÚConnectionErrorÚsocketrÊ   Úconnection_droppedÚ	ExceptionÚpassthrough_errorsÚclose_connectionr   Údebug.tbtoolsr×   Úrender_traceback_textr–   )r   rÖ   rC   r×   r»   r¾   r›   r¿   rÀ   rÈ   rÁ   rÂ   rµ   s   `    @@@@@@@@r   Úrun_wsgizWSGIRequestHandler.run_wsgið   sg  ÿø€ Ø�<‰<×Ñ˜H bÓ)×/Ñ/Ó1×7Ñ7Ó9¸^ÒKØ�J‰J×ÑÐ=Ô>à!%×!2Ñ!2Ó!4Ð4ˆŒ�wØ!%ˆ
Ø48ˆØ"&ˆØ59ˆØ$ˆ÷7	ó 7	÷r	ð 	÷%	-ò %	-ðN	BÙ�D—K‘K—O‘OÕ$øÜ¤§¡Ð0ò 	0Ø×#Ñ# A w×/Ñ/ûÜò 	BØ�{‰{×-Ò-ØàÐ&©>Ø(,�Ô%ðð Ð&Ø!%�JØ"&�KÙÔ+Ó-Õ.øÜò Ùðúõ 6á  Ó#×9Ñ9Ó;ˆCØ�K‰K�O‰O˜GÐ':¸3¸%Ð%@×AÑAûð)	BúsH   Â"B? Â?F	ÃC/Ã/F	Ã;"FÄD5Ä4FÄ5	EÄ>FÅ EÅ>FÆF	c                ó  •— 	 t         ‰| �  «        y# t        t        j                  f$ r}| j                  |«       Y d}~yd}~wt        $ r?}| j                  j                  �t        |«      r| j                  d|«       n‚ Y d}~yd}~ww xY w)z/Handles a request ignoring dropped connections.NzSSL error occurred: %s)ÚsuperÚhandlerØ   rÙ   rÊ   rÚ   rÛ   rY   r}   Úis_ssl_errorÚ	log_error)r   rC   Ú	__class__s     €r   rã   zWSGIRequestHandler.handleƒ  sr   ø€ ð	Ü‰G‰NÕøÜ¤§¡Ð0ò 	'Ø×#Ñ# A×&Ñ&ûÜò 	Ø�{‰{×&Ñ&Ð2´|ÀA´Ø—‘Ð7¸Õ;àô <ûð	ús    ƒ ’B«AÁBÁ5BÂBc                 ó   — y)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   c                óf   •— |j                  d«      r| j                  S t        t        «       |«      S )NÚdo_)Ú
startswithrà   Úgetattrrâ   )r   r   ræ   s     €r   r   zWSGIRequestHandler.__getattr__–  s*   ø€ à�?‰?˜5Ô!Ø—=‘=Ð ô ”u“w Ó%Ð%r   c                ór   — t        | dd «      r| j                  d   S | j                  sy| j                  d   S )Nr›   rk   ra   r   )rë   r›   r~   r7   s    r   r‰   z!WSGIRequestHandler.address_stringž  s:   € Ü�4˜ DÔ)Ø—<‘< Ñ.Ð.à×"Ò"Øà×"Ñ" 1Ñ%Ð%r   c                ó    — | j                   d   S )Nr   )r~   r7   s    r   rŠ   zWSGIRequestHandler.port_integer§  s   € Ø×"Ñ" 1Ñ%Ð%r   é    é   é    z\xÚ02xz\\ú\c                ó  — 	 t        | j                  «      }| j                  › d|› d| j                  › �}|j                  | j                  «      }t        |«      }|d   dk(  rt        |d«      }nb|dk(  rn\|dk(  rt        |d«      }nJ|d   dk(  rt        |d	«      }n5|d
k(  rt        |d«      }n#|d   dk(  rt        |dd«      }nt        |dd«      }| j                  dd|||«       y # t        $ r | j
                  }Y ŒÊw xY w)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¼   Úsizer|   r»   s        r   Úlog_requestzWSGIRequestHandler.log_request°  s
  € ð	#Ü˜dŸi™iÓ(ˆDØ—\‘\�N ! D 6¨¨4×+?Ñ+?Ð*@ÐAˆCð �m‰m˜D×4Ñ4Ó5ˆÜ�4‹yˆà�‰7�cŠ>Ü˜c 6Ó*‰CØ�UŠ]ØØ�UŠ]Ü˜c 6Ó*‰CØ�!‰W˜Š^Ü˜c 7Ó+‰CØ�UŠ]Ü˜c 8Ó,‰CØ�!‰W˜Š^Ü˜c 6¨5Ó1‰Cä˜c 6¨9Ó5ˆCà�‰�˜ s¨D°$Õ7øô/ ò 	#à×"Ñ"ŠCð	#ús   ‚3C( Ã(D Ã?D c                ó,   —  | j                   d|g|¢­Ž  y )Nr{   ©r–   ©r   ÚformatÚargss      r   rå   zWSGIRequestHandler.log_errorÍ  s   € Øˆ�‰�˜&Ð( 4Ô(r   c                ó,   —  | j                   d|g|¢­Ž  y )Nr  r	  r
  s      r   Úlog_messagezWSGIRequestHandler.log_messageÐ  s   € Øˆ�‰�˜Ð' $Ô'r   c           	     óh   — t        || j                  «       › d| j                  «       › d|› d�g|¢­Ž  y )Nz - - [z] ú
)r   r‰   Úlog_date_time_string©r   ÚtypeÚmessager  s       r   r–   zWSGIRequestHandler.logÓ  sB   € ÜØØ×"Ñ"Ó$Ð% V¨D×,EÑ,EÓ,GÐ+HÈÈ7È)ÐSUÐVð	
ð ô	
r   )r   r   )r   r+   ©r   rP   r[   )r{   ÚBaseExceptionr›   zWSGIEnvironment | Noner   rP   r   rS   )rq   rq   )r¼   ú	int | strr  r  r   rP   )r  r   r  r   r   rP   ©r  r   r  r   r  r   r   rP   )r   r   r    rU   Ú__annotations__Úpropertyr]   rŸ   rà   rã   rÚ   r   r‰   rŠ   r   Ú	maketransÚranger  Úordr  rå   r  r–   Ú__classcell__)Ú.0Úcræ   s   00@r   rW   rW   –   sÒ   ø… Ù=àÓàò+ó ð+óOóbQBõf
ð GKðØ"ðØ-Cðà	óõ&ó&ó&ð Ÿ-™-Ø#E¡U¨4£[Ð#E±5¸¸tÓ3DÐ#E×F˜aˆˆr�!�C�ˆMÑ	ÓFóÐð &+Ð™˜D›	Ñ"ô8ó:)ó(÷
ùóO 	Gs   ÁB
rW   c                óR   — 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�   ÚstylesÚcodesÚstyles       r   r  r  Û  s[   € ÝØˆð ØØØØØñ€Eð ò /ˆØ˜˜e™�~ Q u gÐ.‰ð/ð ˆW�GÐÐr   c                óò  — 	 ddl m} ddlm} ddlm} ddlm} ddlm	}  |«       }|j                  dd	|¬
«      }| €d} |j                  |j                  |j                  d«      |j                  |j                   | «      g«      } |«       }|j#                  «       j%                  |«      j'                  |«      j)                  |j)                  «       «      j+                  |j-                  «       «      j/                  t1        j2                  t4        j6                  «      «      j9                  t1        j2                  t4        j6                  «      t;        d¬«      z   «      j=                  |j?                  |j@                  g«      d¬«      j=                  |jC                  |jE                  | «      g«      d¬«      jG                  ||jI                  «       |«      }	|	|fS # t        $ r t        d«      d ‚w xY w)Nr   )Úx509)ÚNameOID)Údefault_backend)Úhashes)Úrsaz<Using ad-hoc certificates requires the cryptography library.i  i   )Úpublic_exponentÚkey_sizeÚbackendÚ*zDummy Certificateim  )ÚdaysF)Úcritical)%Úcryptographyr,  Úcryptography.x509.oidr-  Úcryptography.hazmat.backendsr.  Úcryptography.hazmat.primitivesr/  Ú)cryptography.hazmat.primitives.asymmetricr0  Ú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)
Úcnr,  r-  r.  r/  r0  r3  ÚpkeyÚsubjectÚcerts
             r   Úgenerate_adhoc_ssl_pairrY  î  s¡  € ð	Ý%Ý1Ý@Ý9ÝAñ Ó€GØ×#Ñ#Ø¨°gð $ó €Dð
 
€zØˆà�i‰ià×Ñ˜w×8Ñ8Ð:MÓNØ×Ñ˜w×2Ñ2°BÓ7ð	
ó€Gñ Ó€Gà×ÑÓ!ß	‰�gÓ	ß	‰�WÓ	ß	‰�D—O‘OÓ%Ó	&ß	‰�t×0Ñ0Ó2Ó	3ß	Ñ	œ"Ÿ&™&¤§¡Ó.Ó	/ß	‰œŸ™¤§¡Ó-´	¸sÔ0CÑCÓ	Dß	‰�t×,Ñ,¨d×.BÑ.BÐ-CÓDÈuˆÓ	Uß	‰�t×2Ñ2°D·L±LÀÓ4DÐ3EÓFÐQVˆÓ	Wß	‰ˆd�F—M‘M“O WÓ	-ð 	ð �ˆ:ÐøôE ò ÜØJó
àð	ðús   ‚G  Ç G6c           	     ó   — |�d|› d|› �}t        |¬«      \  }}ddlm} | › d�}| › d�}t        |d	«      5 }|j	                  |j                  |j                  j                  «      «       ddd«       t        |d	«      5 }|j	                  |j                  |j                  j                  |j                  j                  |j                  «       ¬
«      «       ddd«       ||fS # 1 sw Y   Œ{xY w# 1 sw Y   ||fS xY w)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.
    Nz*.z/CN=)rU  r   ©Úserializationz.crtz.keyÚwb©Úencodingr  Úencryption_algorithm)rY  r:  r\  Úopenrµ   Úpublic_bytesÚEncodingÚPEMÚprivate_bytesÚPrivateFormatÚTraditionalOpenSSLÚNoEncryption)	Ú	base_pathÚhostrU  rX  rV  r\  Ú	cert_fileÚ	pkey_fileÚfs	            r   Úmake_ssl_devcertrn    s  € ð* ÐØ�$��t˜D˜6Ð"ˆÜ(¨BÔ/�J€Dˆ$å<à�+˜TÐ"€IØ�+˜TÐ"€Iä	ˆi˜Ó	ð ? !Ø	�‰�×!Ñ! -×"8Ñ"8×"<Ñ"<Ó=Ô>÷?ä	ˆi˜Ó	ð 
 !Ø	�‰Ø×ÑØ&×/Ñ/×3Ñ3Ø$×2Ñ2×EÑEØ%2×%?Ñ%?Ó%Að ó ô	
÷
ð �iÐÐ÷?ð ?ú÷
ð �iÐÐús   ¶5C%Á?AC1Ã%C.Ã1C=c            	     ó¢  — ddl } ddl}t        «       \  }}ddlm} | j                  «       \  }}| j                  «       \  }}|j                  t        j                  |«       |j                  t        j                  |«       t        j                  ||j                  |j                  j                  «      «       t        j                  ||j                  |j                  j                  |j                  j                  |j!                  «       ¬«      «       t        j"                  |«       t        j"                  |«       t%        ||«      }	|	S )z:Generates an adhoc SSL context for the development server.r   Nr[  r^  )ÚtempfileÚatexitrY  r:  r\  ÚmkstemprÍ   ÚosÚremoverµ   rb  rc  rd  re  rf  rg  rh  rª   Úload_ssl_context)
rp  rq  rX  rV  r\  Úcert_handlerk  Úpkey_handlerl  Úctxs
             r   Úgenerate_adhoc_ssl_contextry  H  sý   € ãÛä(Ó*�J€Dˆ$å<à%×-Ñ-Ó/Ñ€K�Ø%×-Ñ-Ó/Ñ€K�Ø
‡O�O”B—I‘I˜yÔ)Ø
‡O�O”B—I‘I˜yÔ)ä‡H�Hˆ[˜$×+Ñ+¨M×,BÑ,B×,FÑ,FÓGÔHÜ‡H�HØØ×ÑØ"×+Ñ+×/Ñ/Ø ×.Ñ.×AÑAØ!.×!;Ñ!;Ó!=ð 	ó 	
ôô ‡H�Hˆ[ÔÜ‡H�Hˆ[ÔÜ
˜9 iÓ
0€CØ€Jr   c                óx   — |€t         j                  }t        j                  |«      }|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)rk  rl  Úprotocolrx  s       r   ru  ru  f  s8   € ð ÐÜ×*Ñ*ˆä
�.‰.˜Ó
"€CØ×Ñ˜	 9Ô-Ø€Jr   c                ó˜   — | €/t        j                  t        t        j                  «       d   «      } t        | t        j                  «      S )z?Checks if the given error (or the current one) is an SSL error.r   )ÚtÚcastrÛ   r‚   rÇ   r   r”   ÚSSLError)r{   s    r   rä   rä   {  s3   € à€}Ü—‘”y¤#§,¡,£.°Ñ"3Ó4ˆÜ�eœSŸ\™\Ó*Ð*r   c                ó¬   — | j                  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)rj  Úports     r   Úselect_address_familyr‰  ‚  s>   € ð ‡��yÔ!Ü�~‰~ÐØ	�‰œ¤¨Ô4Ü�‰ÐÜ�>‰>Ðr   c                ó,  — |t         k(  r1t        j                  j                  | j	                  d«      d   «      S 	 t        j                  | ||t
        j                  t
        j                  «      }|d   d   S # t
        j                  $ r | |fcY S w xY w)zVReturn a fully qualified socket address that can be passed to
    :func:`socket.bind`.ú://r«   r   é   )
Úaf_unixrs  r|   ÚabspathÚ	partitionrÙ   ÚgetaddrinfoÚSOCK_STREAMÚIPPROTO_TCPÚgaierror)rj  rˆ  ÚfamilyÚress       r   Úget_sockaddrr–  Œ  sˆ   € ð
 ”Òä�w‰w�‰˜tŸ~™~¨eÓ4°QÑ7Ó8Ð8ðÜ× Ñ Ø�$˜¤× 2Ñ 2´F×4FÑ4Fó
ˆð
 ˆq‰6�!‰9Ðøô �?‰?ò Ø�TˆzÒðús   ¼5A9 Á9BÂBc                óP  — | t         j                  k(  rdnd}t        j                   | t         j                  «      5 }	 |j                  |df«       |j                  «       d   cddd«       S # t        $ r# | t         j                  k(  rdndcY cddd«       S w xY w# 1 sw Y   yxY w)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ÚconnectrA   Úgetsockname)r”  rj  Úss      r   Úget_interface_ipr�  �  sž   € ð %+¬f¯o©oÒ$=Ñ ÐCS€Dä	�‰�vœv×0Ñ0Ó	1ð "°Qð	GØ�I‰I�t˜U�mÔ$ð �}‰}‹˜qÑ!÷"ñ "øô ò 	GØ"¤f§o¡oÒ5‘5¸;ÑF÷	"ñ "ð	Gú÷"ð "ús.   ¼B¾A-ÁBÁ- BÂBÂBÂBÂB%c                  ó’   ‡ — 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 )rX   zuA WSGI server that that handles one request at a time.

    Use :func:`make_server` to create a server instance.
    FTc                óØ  •— |€t         }dt        |«      vr| j                  s| j                  rd|_        || _        || _        || _        || _        t        ||«      x| _
        }t        |t        |«      |«      }	|t        k(  rP|€Nt        j                  t         |	«      }	t"        j$                  j'                  |	«      rt#        j(                  |	«       t*        ‰| �Y  |	|d¬«       |€"	 | j/                  «        | j1                  «        nY| j5                  «        tI        jJ                  ||tH        jL                  «      | _$        | jH                  jO                  «       | _(        |t        k7  r| jP                  d   | _        |�RtS        |tT        «      r	tW        |Ž }n|dk(  r
tY        «       }|j[                  | jH                  d¬«      | _$        || _.        nd | _.        dd l/}d|j`                  jc                  d«      › �| _2        y # t2        $ rÄ}
| j5                  «        t7        |
j8                  t:        j<                  ¬«       |
j>                  t>        j@                  k(  rRt7        d|› d�t:        j<                  ¬«       t:        jB                  dk(  r |d	k(  rt7        d
t:        j<                  ¬«       t;        jD                  d«       Y d }
~
�Œhd }
~
wtF        $ r | j5                  «        ‚ w xY w)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ˆ  zoOn macOS, try disabling the 'AirPlay Receiver' service from System Preferences -> General -> AirDrop & Handoff.r   r)   T)Úserver_sider   z	Werkzeug/Úwerkzeug)3rW   Úvarsr„   r…   r±   rj  rˆ  rÑ   rÜ   r‰  Úaddress_familyr–  r>   r�  r€  r�  r   rs  r|   ÚexistsÚunlinkrâ   r5   Úserver_bindÚserver_activaterA   Úserver_closeÚprintÚstrerrorr‚   rƒ   ÚerrnoÚ
EADDRINUSEÚplatformÚexitr  rÙ   Úfromfdr‘  r›  r‹   r   Útupleru  ry  Úwrap_socketr}   Úimportlib.metadataÚmetadataÚversionr\   )r   rj  rˆ  rÑ   ÚhandlerrÜ   r}   Úfdr¦  r‹   rC   Ú	importlibræ   s               €r   r5   zBaseWSGIServer.__init__º  s|  ø€ ð ˆ?Ü(ˆGð
 ¤T¨'£]Ñ2Ø×Ò × 1Ò 1à'1ˆGÔ$àˆŒ	ØˆŒ	ØˆŒØ"4ˆÔä/DÀTÈ4Ó/PÐPˆÔ˜nÜ% d¬C°«I°~ÓFˆð œWÒ$¨¨ÜŸV™V¤C¨Ó8ˆNä�w‰w�~‰~˜nÔ-Ü—	‘	˜.Ô)ô 	‰ÑØØØ#ð 	ô 	
ð ˆ:ðØ× Ñ Ô"Ø×$Ñ$Õ&ð: ×ÑÔô !Ÿ-™-¨¨N¼F×<NÑ<NÓOˆDŒKØ"&§+¡+×"9Ñ"9Ó";ˆDÔàœWÒ$à×+Ñ+¨AÑ.ˆDŒIàÐ"Ü˜+¤uÔ-Ü.°Ð<‘Ø Ò'Ü8Ó:�à%×1Ñ1°$·+±+È4Ð1ÓPˆDŒKØ6AˆDÕà#ˆDÔã!à!*¨9×+=Ñ+=×+EÑ+EÀjÓ+QÐ*RÐSˆÕøôg ò ð ×!Ñ!Ô#Ü�a—j‘j¤s§z¡zÕ2à—7‘7œe×.Ñ.Ò.ÜØ ˜vð &!ð !ô !ŸZ™Zõ	ô —|‘| xÒ/°D¸D²LÜðXä!$§¡õô —‘˜—’ûÜ ò Ø×!Ñ!Ô#Øðús   Ã) H È	K)ÈB9KËK)c                ó   — t        ||g|¢­Ž  y r[   r   r  s       r   r–   zBaseWSGIServer.log!  s   € ÜˆT�7Ð"˜TÔ"r   c                ó�   •— 	 t         ‰| �  |¬«       | j                  «        y # t        $ r Y Œw xY w# | j                  «        w xY w)N)Úpoll_interval)râ   Úserve_foreverÚKeyboardInterruptr«  )r   r½  ræ   s     €r   r¾  zBaseWSGIServer.serve_forever$  sI   ø€ ð	 Ü‰GÑ!°Ð!Ô>ð ×ÑÕøô !ò 	Ùð	ûð ×ÑÕús   ƒ$ ¤	0­3 ¯0°3 ³Ac                ó>   •— | j                   r‚ t        ‰| �	  ||«      S r[   )rÜ   râ   Úhandle_error)r   Úrequestr~   ræ   s      €r   rÁ  zBaseWSGIServer.handle_error,  s#   ø€ ð ×"Ò"Øä‰wÑ# G¨^Ó<Ð<r   c                ó„  — d}t        |dd«      }|g}| j                  t        k(  r|j                  d| j                  › �«       ná| j
                  €dnd}| j                  }| j                  dv r‰|j                  d	| j                  › d
�«       | j                  dk(  rd}t        t        j                  «      }nd}t        t        j                  «      }|j                  d|› d|› d| j                  › �«       d|v rd|› d�}|j                  d|› d|› d| j                  › �«       t        ddj                  |«      «       y)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 Nr_   r`   >   ú::ú0.0.0.0z * Running on all addresses (ú)rÅ  r˜  z[::1]r‹  r„  ú[ú]r  r  )r  r¦  r�  Úappendrj  r}   r�  rÙ   r‡  r…  rˆ  r   Újoin)r   Údev_warningÚmessagesr€   Údisplay_hostnameÚ	localhosts         r   Úlog_startupzBaseWSGIServer.log_startup4  s5  € ðAð 	ô " +¨v°uÓ=ˆØ�=ˆà×Ñ¤'Ò)Ø�O‰O˜n¨T¯Y©Y¨KÐ8Õ9à#×/Ñ/Ð7‘V¸WˆFØ#Ÿy™yÐà�y‰yÐ-Ñ-Ø—‘Ð"?ÀÇ	Á	¸{È!Ð LÔMà—9‘9 	Ò)Ø +�IÜ'7¼¿¹Ó'GÑ$à '�IÜ'7¼¿¹Ó'HÐ$à—‘ .°°¸¸I¸;ÀaÈÏ	É	À{Ð SÔTàÐ&Ñ&Ø%&Ð'7Ð&8¸Ð#:Ð à�O‰O˜n¨V¨H°CÐ8HÐ7IÈÈ4Ï9É9È+ÐVÔWäˆV�T—Y‘Y˜xÓ(Õ)r   )NFNN)rj  r   rˆ  r>   rÑ   r*   r¸  útype[WSGIRequestHandler] | NonerÜ   rR   r}   ú_TSSLContextArg | Noner¹  ú
int | Noner   rP   r  )g      à?)r½  Úfloatr   rP   )rÂ  r   r~   útuple[str, int] | strr   rP   r  )r   r   r    rU   r„   r…   ÚLISTEN_QUEUEÚrequest_queue_sizeÚallow_reuse_addressr5   r–   r¾  rÁ  rÏ  r  ©ræ   s   @r   rX   rX   ¯  sÀ   ø„ ñð
 €KØ€LØ%ÐØÐð 48Ø#(Ø.2ØðeTàðeTð ðeTð ð	eTð
 1ðeTð !ðeTð ,ðeTð ðeTð 
õeTóN#ö ð=Øð=Ø.Cð=à	õ=÷ *r   rX   c                  ó   — e Zd ZdZdZdZy)ÚThreadedWSGIServerz†A WSGI server that handles concurrent requests in separate
    threads.

    Use :func:`make_server` to create a server instance.
    TN)r   r   r    rU   r„   Údaemon_threadsr!   r   r   rÚ  rÚ  W  s   „ ñð €KØ�Nr   rÚ  c                  óV   ‡ — 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.
    Tc	           	     ó`   •— t         st        d«      ‚t        ‰	| �  |||||||«       || _        y )Nz'Your platform does not support forking.)Úcan_forkr@   râ   r5   Úmax_children)
r   rj  rˆ  rÑ   Ú	processesr¸  rÜ   r}   r¹  ræ   s
            €r   r5   zForkingWSGIServer.__init__k  s7   ø€ õ ÜÐFÓGÐGä‰Ñ˜˜t S¨'Ð3EÀ{ÐTVÔWØ%ˆÕr   )é(   NFNN)rj  r   rˆ  r>   rÑ   r*   rá  r>   r¸  rÐ  rÜ   rR   r}   rÑ  r¹  rÒ  r   rP   )r   r   r    rU   r…   r5   r  rØ  s   @r   rÝ  rÝ  b  s‚   ø„ ñð €Lð Ø37Ø#(Ø.2Øð&àð&ð ð&ð ð	&ð
 ð&ð 1ð&ð !ð&ð ,ð&ð ð&ð 
÷&ñ &r   rÝ  c	           
     ó¢   — |r|dkD  rt        d«      ‚|rt        | ||||||¬«      S |dkD  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¹  )r@   rÚ  rÝ  rX   )	rj  rˆ  rÑ   Úthreadedrá  Úrequest_handlerrÜ   r}   r¹  s	            r   Úmake_serverrç  }  s‡   € ñ( �I ’MÜÐOÓPÐPáÜ!Ø�$˜˜_Ð.@À+ÐRTô
ð 	
ð �1‚}Ü ØØØØØØØØô	
ð 		
ô Øˆd�C˜Ð*<¸kÈbôð r   c                 óF   — t         j                  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)rs  r›   r‘   r!   r   r   Úis_running_from_reloaderrë  ª  s   € ô �:‰:�>‰>Ð-Ó.°&Ñ8Ð8r   c                ó�  — t        |t        «      st        d«      ‚|rddlm}  |||«      }|rddlm}  |||¬«      }t        «       sd}nt        t        j                  d   «      }t        | |||
|||||¬«	      }|j                  j                  d	«       t        |j                  «       «      t        j                  d<   t        «       s&|j                  «        t!        d
t#        dd«      «       |r/ddlm} 	  ||j(                  ||||	¬«       |j+                  «        y|j)                  «        y# |j+                  «        w xY w)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)Úextra_filesÚexclude_patternsÚintervalÚreloader_type)r   r>   r=  Úmiddleware.shared_datarí  Údebugrî  rë  rs  r›   rç  rÙ   Úset_inheritabler   ÚfilenorÏ  r   r  Ú	_reloaderrñ  r¾  r«  )Úhostnamerˆ  ÚapplicationÚuse_reloaderÚuse_debuggerÚ
use_evalexrò  ró  Úreloader_intervalrõ  rå  rá  ræ  Ústatic_filesrÜ   r}   rí  rî  r¹  Úsrvrñ  s                        r   Ú
run_simpler  ³  s%  € ô` �dœCÔ ÜÐ1Ó2Ð2áÝ@á*¨;¸ÓEˆáÝ.á)¨+¸jÔIˆä#Ô%Ø‰ä”—‘Ð0Ñ1Ó2ˆä
ØØØØØØØØØô
€Cð ‡J�J×Ñ˜tÔ$Ü'*¨3¯:©:«<Ó'8„B‡J�JÐ#Ñ$ä#Ô%Ø�‰ÔÜˆV”[Ð!7¸ÓBÔCáÝ0ð		ÙØ×!Ñ!Ø'Ø!1Ø*Ø+õð ×ÑÕà×ÑÕøð ×ÑÕús   Ã:D3 Ä3E)r�   r   r(  r   r   r   r[   )rU  ú
str | Noner   z2tuple[Certificate, RSAPrivateKeyWithSerialization])NN)ri  r   rj  r  rU  r  r   ztuple[str, str])r   r(   )rk  r   rl  r  r~  rÒ  r   r(   )r{   zException | Noner   rR   )rj  r   rˆ  r>   r   úsocket.AddressFamily)rj  r   rˆ  r>   r”  r  r   rÔ  )r”  r  r   r   )Fr   NFNN)rj  r   rˆ  r>   rÑ   r*   rå  rR   rá  r>   ræ  rÐ  rÜ   rR   r}   rÑ  r¹  rÒ  r   rX   rQ   )FFTNNr   ÚautoFr   NNFN)"rû  r   rˆ  r>   rü  r*   rý  rR   rþ  rR   rÿ  rR   rò  út.Iterable[str] | Noneró  r  r   r>   rõ  r   rå  rR   rá  r>   ræ  rÐ  r  z'dict[str, str | tuple[str, str]] | NonerÜ   rR   r}   rÑ  r   rP   )KrU   Ú
__future__r   r®  Úiors  rË   rÙ   Úsocketserverr‚   Útypingr€  r   rJ  r   r   Úhttp.serverr   r   Úurllib.parser	   r
   Ú	_internalr   r   Ú
exceptionsr   Úurlsr   r”   r<  r   r'  r   Ú
__import__rÐ   rß  r&   r†  r�  r—   rÕ  ÚOptionalÚUnionÚTupler   ÚLiteralÚ_TSSLContextArgÚTYPE_CHECKINGÚ_typeshed.wsgir*   r+   Ú-cryptography.hazmat.primitives.asymmetric.rsar,   Úcryptography.x509r-   Ú	RawIOBaser/   rW   r  rY  rn  ry  ru  rä   r‰  r–  r�  rX   ÚThreadingMixInrÚ  rÝ  rç  rë  r  r!   r   r   ú<module>r     s»  ðñõ #ã Û 	Û 	Û Û Û Û 
Û Ý #Ý Ý Ý .Ý "Ý  Ý !å Ý +Ý +Ý ðÛð €à‡7�7ˆd‚?ðÙ�:Ôñ �2�vÓ€áØ×,Ñ,�L÷ñ ðØ�n‰n€Gð €à—*‘*Ø‡G�GÐ˜aŸg™g c¨1¯:©:°c©?Ð&:Ñ;¸Q¿Y¹YÀwÑ=OÐOÑPñ€ð ‡?‚?Ý.Ý.õõ .ô;�R—\‘\ô ;ô|B
Ð/ô B
óJ
ð( ð+Øð+à7ó+ð^ ?Cð) Øð) Ø$ð) Ø1;ð) àó) óXð> JNðØðØ)ðØ<Fðàóô*+óðØ
ðØðØ"6ðàóó""ô$e*�Zô e*ôP˜×4Ñ4°nô ô&˜ nô &ð> ØØ7;Ø$Ø*.Øð*Ø
ð*à
ð*ð 
ð*ð ð	*ð
 ð*ð 5ð*ð ð*ð (ð*ð 	ð*ð ó*óZ9ð ØØØ*.Ø/3ØØØØØ7;Ø<@Ø$Ø*.ð!bØðbà
ðbð !ðbð ð	bð
 ðbð ðbð (ðbð -ðbð ðbð ðbð ðbð ðbð 5ðbð :ðbð ðbð  (ð!bð" 
ô#bøðY ò 	÷ñ ñ ‹+ƒCð	ûð  ò Ø‹ðûð ò ØƒGðús6   Á,H ÂH+ Â-H9 ÈH(È'H(È+H6È5H6È9IÉI