Ë
    ¥2ÚiN0  ã                   ó  — 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m	Z	 d dl
mZmZ d dl
mZ dZ ej                  d«      Z ej"                  e«      Z G d„ d	e«      Z G d
„ de j,                  «      Zd„ Zd„ Zd„ Zd„ Z G d„ de«      Zy)é    N)Ú	HEADER_RE)ÚInvalidHeaderÚInvalidHeaderName)ÚSERVER_SOFTWAREÚSERVER)Úutiliÿÿÿ?z[\x00-\x1F\x7F]c                   ó   — e Zd Zdd„Zd„ Zy)ÚFileWrapperc                 ó\   — || _         || _        t        |d«      r|j                  | _        y y )NÚclose)ÚfilelikeÚblksizeÚhasattrr   )Úselfr   r   s      úI/var/www/html/acx/venv/lib/python3.12/site-packages/gunicorn/http/wsgi.pyÚ__init__zFileWrapper.__init__   s*   € Ø ˆŒØˆŒÜ�8˜WÔ%Ø!Ÿ™ˆD�Jð &ó    c                 ó`   — | j                   j                  | j                  «      }|r|S t        ‚©N)r   Úreadr   Ú
IndexError)r   ÚkeyÚdatas      r   Ú__getitem__zFileWrapper.__getitem__"   s(   € Ø�}‰}×!Ñ! $§,¡,Ó/ˆÙØˆKÜÐr   N)i    )Ú__name__Ú
__module__Ú__qualname__r   r   © r   r   r
   r
      s   „ ó(ór   r
   c                   ó   — e Zd Zd„ Zd„ Zy)ÚWSGIErrorsWrapperc                 ó@  — t        j                  d«      }|j                  }g | _        |j                  dk(  r.| j                  j                  t        j                  «       |dd  }|D ]4  }t        |d«      sŒ| j                  j                  |j                  «       Œ6 y )Nzgunicorn.errorú-é   Ústream)
ÚloggingÚ	getLoggerÚhandlersÚstreamsÚerrorlogÚappendÚsysÚstderrr   r$   )r   Úcfgr)   r'   Úhs        r   r   zWSGIErrorsWrapper.__init__+   sƒ   € ô ×$Ñ$Ð%5Ó6ˆØ×$Ñ$ˆØˆŒà�<‰<˜3ÒØ�L‰L×Ñ¤§
¡
Ô+Ø  �|ˆHàò 	.ˆAÜ�q˜(Õ#Ø—‘×#Ñ# A§H¡HÕ-ñ	.r   c                 óÈ   — | j                   D ]$  }	 |j                  |«       |j	                  «        Œ& y # t        $ r# |j                  |j                  d«      «       Y Œ>w xY w)NzUTF-8)r(   ÚwriteÚUnicodeErrorÚencodeÚflush)r   r   r$   s      r   r0   zWSGIErrorsWrapper.write;   sW   € Ø—l‘lò 	ˆFð3Ø—‘˜TÔ"ð �L‰L�Nñ	øô  ò 3Ø—‘˜TŸ[™[¨Ó1Ö2ð3ús   ‘5µ)A!Á A!N)r   r   r   r   r0   r   r   r   r    r    )   s   „ ò.ó r   r    c           	      óT   — t        | «      dd| j                  dkD  dt        dt        dœS )N©r#   r   Fr#   T)zwsgi.errorszwsgi.versionzwsgi.multithreadzwsgi.multiprocesszwsgi.run_oncezwsgi.file_wrapperzwsgi.input_terminatedr   )r    Úworkersr
   r   )r-   s    r   Úbase_environr7   D   s1   € ä(¨Ó-ØØ!Ø!Ÿk™k¨A™oØÜ(Ø!%Ü*ñ	ð 	r   c                 ó  — t        |«      }|j                  | j                  || j                  | j                  | j
                  ddj                  | j                  D �cg c]  }t        |«      ‘Œ c}«      z  dœ«       |S c c}w )NzHTTP/%sú.)z
wsgi.inputzgunicorn.socketÚREQUEST_METHODÚQUERY_STRINGÚRAW_URIÚSERVER_PROTOCOL)	r7   ÚupdateÚbodyÚmethodÚqueryÚuriÚjoinÚversionÚstr)ÚreqÚsockr-   ÚenvÚvs        r   Údefault_environrJ   Q   sm   € Ü
�sÓ
€CØ‡J�JØ—h‘hØØŸ*™*ØŸ	™	Ø—7‘7Ø$ s§x¡xÀÇÁÖ0M¸A´°QµÒ0MÓ'NÑNñô ð €Jùò 1Ns   ÁBc                 ót   — | j                   }|si S |d   |d   t        |d   «      |d   t        |d   «      dœS )NÚproxy_protocolÚclient_addrÚclient_portÚ
proxy_addrÚ
proxy_port)ÚPROXY_PROTOCOLÚREMOTE_ADDRÚREMOTE_PORTÚ
PROXY_ADDRÚ
PROXY_PORT)Úproxy_protocol_inforE   )rF   Úinfos     r   Úproxy_environrX   ^   sT   € Ø×"Ñ"€DáØˆ	ð Ð/Ñ0Ø˜MÑ*Ü˜4 Ñ.Ó/Ø˜<Ñ(Ü˜$˜|Ñ,Ó-ñð r   c                 ó®  — t        | ||«      }t        | ||«      }d }t        j                  j	                  dd«      }| j
                  D ]}  \  }	}
|	dk(  r%|
j                  «       dk(  r8|j                  d«       n&|	dk(  r|
}n|	dk(  r|
}n|	dk(  r|
|d<   ŒK|	d	k(  r|
|d
<   ŒVd|	j                  dd«      z   }||v r
||   ›d|
›�}
|
||<   Œ | j                  |d<   t        |t        «      r||d<   n=t        |t        «      r|j                  «       |d<   n|d   |d<   t        |d   «      |d<   t        |t        «      r¥|j                  d«      }t        |«      dk(  r†|rs|j                  d«      }t        |«      dk(  re| j                  dk(  r|j!                  d«       nD| j                  dk(  r|j!                  d«       n#|j!                  d«       n|j!                  d«       |d   |d<   t        |d   «      |d<   | j"                  }|r|j                  |d«      d   }t%        j&                  |«      |d<   ||d<   |j)                  t+        | «      «       ||fS )NÚSCRIPT_NAMEÚ ÚEXPECTz100-continues   HTTP/1.1 100 Continue

ÚHOSTzCONTENT-TYPEÚCONTENT_TYPEzCONTENT-LENGTHÚCONTENT_LENGTHÚHTTP_r"   Ú_ú,zwsgi.url_schemerR   r   r#   rS   ú:ÚhttpéP   Úhttpsi»  ÚSERVER_NAMEÚSERVER_PORTÚ	PATH_INFO)ÚResponserJ   ÚosÚenvironÚgetÚheadersÚlowerÚsendÚreplaceÚschemeÚ
isinstancerE   ÚbytesÚdecodeÚsplitÚlenr*   Úpathr   Úunquote_to_wsgi_strr>   rX   )rF   rG   ÚclientÚserverr-   Úresprl   ÚhostÚscript_nameÚhdr_nameÚ	hdr_valuer   Ú	path_infos                r   Úcreater‚   m   s`  € Ü�C˜˜sÓ#€Dô ˜c 4¨Ó-€Gð €DÜ—*‘*—.‘. °Ó3€Kð  #Ÿ{™{ò !Ñˆ�)Ø�xÒà�‰Ó  NÒ2Ø—	‘	Ð:Õ;Ø˜ÒØ‰DØ˜Ò&Ø#‰KØ˜Ò'Ø&/ˆG�NÑ#ØØÐ)Ò)Ø(1ˆGÐ$Ñ%Øà˜×(Ñ(¨¨cÓ2Ñ2ˆØ�'‰>Ø#*¨3£<±Ð;ˆIØ ˆ�Šð'!ð, "%§¡€GÐÑô �&œ#ÔØ!'ˆ�ÒÜ	�FœEÔ	"Ø!'§¡£ˆ�Òà!'¨¡ˆ�ÑÜ!$ V¨A¡Y£ˆ�Ñô �&œ#ÔØ—‘˜cÓ"ˆÜˆv‹;˜!ÒáØŸ™ C›�Ü�v“; !Ò#Ø—z‘z VÒ+ØŸ™ bÕ)ØŸ™ wÒ.ØŸ™ cÕ*àŸ™ bÕ)ð —‘˜bÔ!Ø# A™Y€GˆMÑÜ  ¨¡›^€GˆMÑð —‘€IÙØ—O‘O K°Ó3°AÑ6ˆ	Ü×3Ñ3°IÓ>€GˆKÑØ(€GˆMÑð ‡N�N”= Ó%Ô&Ø�ˆ=Ðr   c                   ó\   — e Zd Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zy)rj   c                 ó´   — || _         || _        t        | _        d | _        d| _        d| _        g | _        d| _        d | _	        d| _
        d| _        || _        y )NFr   )rF   rG   r   rD   ÚstatusÚchunkedÚ
must_closern   Úheaders_sentÚresponse_lengthÚsentÚupgrader-   )r   rF   rG   r-   s       r   r   zResponse.__init__Ã   sX   € ØˆŒØˆŒ	ÜˆŒØˆŒØˆŒØˆŒØˆŒØ!ˆÔØ#ˆÔØˆŒ	ØˆŒØˆ�r   c                 ó   — d| _         y )NT)r‡   ©r   s    r   Úforce_closezResponse.force_closeÑ   s	   € Øˆ�r   c                 óô   — | j                   s| j                  j                  «       ry| j                  €| j                  ry| j                  j
                  dk(  ry| j                  dk  s| j                  dv ryy)NTFÚHEADéÈ   ©éÌ   i0  )r‡   rF   Úshould_closer‰   r†   r@   Ústatus_coder�   s    r   r”   zResponse.should_closeÔ   sd   € Ø�?Š?˜dŸh™h×3Ñ3Ô5ØØ×ÑÐ+¨t¯|ª|ØØ�8‰8�?‰?˜fÒ$ØØ×Ñ˜cÒ! T×%5Ñ%5¸Ñ%CØØr   Nc                 ó°  — |r<	 | j                   r,| j                  r t        j                  |d   |d   |d   «       d }n| j                   �t	        d«      ‚|| _         	 t        | j                   j                  «       d   «      | _        | j                  |«       | j                  «       | _        | j                  S # d }w xY w# t        $ r
 d | _        Y ŒKw xY w)Nr   r#   é   zResponse headers already set!)r…   rˆ   r   ÚreraiseÚAssertionErrorÚintrv   r•   Ú
ValueErrorÚprocess_headersÚ
is_chunkedr†   r0   )r   r…   rn   Úexc_infos       r   Ústart_responsezResponse.start_responseß   sÄ   € Ùð Ø—;’; 4×#4Ò#4Ü—L‘L ¨!¡¨h°q©k¸8ÀA¹;ÔGà‘Ø�[‰[Ð$Ü Ð!@ÓAÐAàˆŒð
	$Ü" 4§;¡;×#4Ñ#4Ó#6°qÑ#9Ó:ˆDÔð 	×Ñ˜WÔ%Ø—‘Ó(ˆŒØ�z‰zÐøð!  ‘ûô ò 	$Ø#ˆDÖð	$ús   „8B; Á+C Â;B?ÃCÃCc                 ó*  — |D �]�  \  }}t        |t        «      st        d|z  «      ‚t        j                  |«      rt        d|z  «      ‚t        |t        «      st        d|z  «      ‚t        j	                  |«      rt        d|z  «      ‚|j                  «       }|j                  «       j                  «       }|dk(  rt        |«      | _        n–t        j                  |«      r�|dk(  r)|j                  «       j                  «       dk(  rYd| _        nQ|dk(  rL|j                  «       j                  «       dk(  r+| j                  j!                  |j                  «       |f«       �Œc| j                  j!                  |j                  «       |f«       �Œ� y )Nz%r is not a stringz%rzcontent-lengthÚ
connectionr‹   TÚ	websocket)rs   rE   Ú	TypeErrorr   Úsearchr   ÚHEADER_VALUE_REr   Ústripro   rš   r‰   r   Ú
is_hoppishr‹   rn   r*   )r   rn   ÚnameÚvalueÚlnames        r   rœ   zResponse.process_headers÷   sI  € Ø"ó 	7‰KˆD�%Ü˜d¤CÔ(ÜÐ 4°tÑ ;Ó<Ð<ä×Ñ Ô%Ü'¨¨t©Ó4Ð4ä˜e¤SÔ)ÜÐ 4°uÑ <Ó=Ð=ä×%Ñ% eÔ,Ü# D¨5¡LÓ1Ð1à—K‘K“MˆEØ—J‘J“L×&Ñ&Ó(ˆEØÐ(Ò(Ü'*¨5£z�Õ$Ü—‘ Ô&Ø˜LÒ(à—{‘{“}×*Ñ*Ó,°	Ò9Ø'+˜�Ø˜iÒ'Ø—{‘{“}×*Ñ*Ó,°Ò;ØŸ™×+Ñ+¨T¯Z©Z«\¸5Ð,AÔBñ Ø�L‰L×Ñ §¡£¨uÐ 5Ö6ñ9	7r   c                 ó¤   — | j                   �y| j                  j                  dk  ry| j                  j                  dk(  ry| j                  dv ryy)NFr5   r�   r’   T)r‰   rF   rD   r@   r•   r�   s    r   r�   zResponse.is_chunked  sQ   € ð ×ÑÐ+ØØ�X‰X×Ñ Ò'ØØ�X‰X�_‰_ Ò&àØ×Ñ Ñ+ð Ør   c                 ób  — | j                   rd}n| j                  «       rd}nd}d| j                  j                  d   ›d| j                  j                  d   ›d| j                  ›d	�d
| j                  z  dt        j                  «       z  d|z  g}| j                  r|j                  d«       |S )Nr‹   r   z
keep-alivezHTTP/r   r9   r#   ú ú
zServer: %s
z
Date: %s
zConnection: %s
zTransfer-Encoding: chunked
)	r‹   r”   rF   rD   r…   r   Ú	http_dater†   r*   )r   r¡   rn   s      r   Údefault_headerszResponse.default_headers'  sœ   € à�<Š<Ø"‰JØ×ÑÔ Ø ‰Jà%ˆJøð $(§8¡8×#3Ñ#3°AÓ#6Ø#'§8¡8×#3Ñ#3°AÓ#6¸¿»ðEà˜tŸ|™|Ñ+ØœTŸ^™^Ó-Ñ-Ø  :Ñ-ð
ˆð �<Š<Ø�N‰NÐ;Ô<Øˆr   c           
      óP  — | j                   ry | j                  «       }|j                  | j                  D ��cg c]  \  }}|›d|›d�‘Œ c}}«       ddj	                  |«      z  }t        j                  | j                  t        j                  |d«      «       d| _         y c c}}w )Nz: r®   z%s
r[   zlatin-1T)	rˆ   r°   Úextendrn   rC   r   r0   rG   Úto_bytestring)r   ÚtosendÚkrI   Ú
header_strs        r   Úsend_headerszResponse.send_headers;  s   € Ø×ÒØØ×%Ñ%Ó'ˆØ�‰¸¿¹×F±°°A¢qª!Ò,ÓFÔGà §¡¨£Ñ/ˆ
Ü�
‰
�4—9‘9œd×0Ñ0°¸YÓGÔHØ ˆÕùó	 Gs   ¸B"
c                 óÄ  — | j                  «        t        |t        «      st        d|z  «      ‚t	        |«      }|}| j
                  �G| j                  | j
                  k\  ry t        | j
                  | j                  z
  |«      }||k  r|d | }| j                  r|dk(  ry | xj                  |z  c_        t        j                  | j                  || j                  «       y )Nz%r is not a byter   )r·   rs   rt   r£   rw   r‰   rŠ   Úminr†   r   r0   rG   )r   ÚargÚarglenr´   s       r   r0   zResponse.writeE  s½   € Ø×ÑÔÜ˜#œuÔ%ÜÐ.°Ñ4Ó5Ð5Ü�S“ˆØˆØ×ÑÐ+Ø�y‰y˜D×0Ñ0Ò0àä˜×-Ñ-°·	±	Ñ9¸6ÓBˆFØ˜ŠØ˜'˜6�l�ð �<Š<˜F ašKØà�	Š	�VÑ�	Ü�
‰
�4—9‘9˜c 4§<¡<Õ0r   c                 ó2   — | j                   j                  duS )NF)r-   Úsendfiler�   s    r   Úcan_sendfilezResponse.can_sendfile\  s   € Ø�x‰x× Ñ ¨Ð-Ð-r   c                 ób  — | j                   j                  s| j                  «       syt        j                  |j
                  «      sy|j
                  j                  «       }	 t        j                  |dt        j                  «      }| j                  €%t        j                  |«      j                  }||z
  }n| j                  }| j!                  «        | j#                  «       r/d|z  }| j$                  j'                  |j)                  d«      «       |dkD  r(| j$                  j+                  |j
                  ||¬«       | j#                  «       r| j$                  j'                  d«       t        j                  ||t        j,                  «       y# t        t        j                  f$ r Y yw xY w)NFr   z%X
zutf-8)ÚoffsetÚcounts   
T)r-   Úis_sslr¾   r   Ú
has_filenor   Úfilenork   ÚlseekÚSEEK_CURr‰   ÚfstatÚst_sizeÚOSErrorÚioÚUnsupportedOperationr·   r�   rG   Úsendallr2   r½   ÚSEEK_SET)r   ÚrespiterrÄ   rÀ   ÚfilesizeÚnbytesÚ
chunk_sizes          r   r½   zResponse.sendfile_  sK  € Ø�8‰8�?Š? $×"3Ñ"3Ô"5Øä�‰˜x×0Ñ0Ô1Øà×"Ñ"×)Ñ)Ó+ˆð	Ü—X‘X˜f a¬¯©Ó5ˆFØ×#Ñ#Ð+ÜŸ8™8 FÓ+×3Ñ3�Ø! FÑ*‘à×-Ñ-�ð 	×ÑÔà�?‰?ÔØ! FÑ*ˆJØ�I‰I×Ñ˜j×/Ñ/°Ó8Ô9Ø�AŠ:Ø�I‰I×Ñ˜x×0Ñ0¸ÀvÐÔNà�?‰?ÔØ�I‰I×Ñ˜gÔ&ä
�‰�˜¤§¡Ô-àøô! œ×0Ñ0Ð1ò 	Ùð	ús   Á#A"F ÆF.Æ-F.c                 óX   — | j                  |«      s|D ]  }| j                  |«       Œ y y r   )r½   r0   )r   rÎ   Úitems      r   Ú
write_filezResponse.write_file€  s.   € Ø�}‰}˜XÔ&Ø ò !�Ø—
‘
˜4Õ ñ!ð 'r   c                 ó–   — | j                   s| j                  «        | j                  r!t        j                  | j
                  d«       y y )Nr   )rˆ   r·   r†   r   Úwrite_chunkrG   r�   s    r   r   zResponse.close…  s7   € Ø× Ò Ø×ÑÔØ�<Š<Ü×Ñ˜TŸY™Y¨Õ,ð r   r   )r   r   r   r   rŽ   r”   rŸ   rœ   r�   r°   r·   r0   r¾   r½   rÔ   r   r   r   r   rj   rj   Á   sD   „ òòò	óò07ò>ò"ò(!ò1ò..òòB!ó
-r   rj   )rÊ   r%   rk   Úrer+   Úgunicorn.http.messager   Úgunicorn.http.errorsr   r   Úgunicornr   r   r   ÚBLKSIZEÚcompiler¥   r&   r   ÚlogÚobjectr
   Ú	RawIOBaser    r7   rJ   rX   r‚   rj   r   r   r   ú<module>rà      sŒ   ðó 
Û Û 	Û 	Û 
å +ß Aß ,Ý ð €à�"—*‘*Ð/Ó0€à€g×Ñ˜Ó!€ô�&ô ô˜Ÿ™ô ò6
ò
òòQôhH-ˆvõ H-r   