
    +hJ                        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	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Zd dlZ	 d dlmZ d dlmZ d dlmZ d dlZ ee
dd      Z  e!djE                               Z#	 d dl$m$Z$ d Z%d
 Z&	 	 d/dZ'ejP                  jR                  ejP                  jT                  fZ+d Z,d Z-d0dZ.d Z/ej`                  jc                  d      rd0dZ2d Z3ne
jh                  Z3d Z4d Z5d1dZ6d Z7d Z8d Z9	 d dl
m:Z: d Z;d0dZ<d0dZ=d Z>d Z?d  Z@d! ZAd2d"ZBd# ZCd0d$ZDd% ZEd& ZFd3d'ZGd( ZHd) ZId* ZJd+ ZKd2d,ZLd- ZMd. ZNy# eef$ r d dlZY w xY w# e$ r d	 Z%Y w xY w# e$ r d Z:Y mw xY w)4    N)AppImportError)SUPPORTED_WORKERSdevnullz	/dev/nullz
    connection keep-alive proxy-authenticate proxy-authorization
    te trailers transfer-encoding upgrade
    server date
    setproctitlec                      t        d| z         y )Nzgunicorn: %sr   titles    @/var/www/html/venv/lib/python3.12/site-packages/gunicorn/util.py_setproctitler   5   s    ^e+,    c                      y N r	   s    r   r   r   8   s    r   c                     t        j                  |       }|j                  D cg c]"  }|j                  |k(  r|j                  |k(  r|$ }}|st        d||fd      |d   j                         S c c}w )NzEntry point z
 not foundr   )importlib_metadatadistributionentry_pointsgroupnameImportErrorload)r   r   r   dist_objepepss         r   load_entry_pointr   <   st    !..|<H -- 5"hh%BGGtO  5C 5GHHq6;;=	5s   'A3c                 h   t        j                  |       r| S | j                  d      r8| j                  d      d   }	 |j	                  dd      \  }}	 t        |||      S | j                  d      }t        |      dk(  rF	 | j                  d      r| dd  } | t        v rt        |    j                  d      }n	 t        d||       S |j                  d      }		 t        j                  dj!                  |            }
t#        |
|	      S # t
        $ r |}|}Y w xY w# t        $ r' t        j                         }d}t        || |fz        w xY w# t        $ r' t        j                         }d}t        || |fz        w xY w# t        $ r' t        j                         }d}t        || |fz        w xY w)Nzegg:   #z)class uri %r invalid or not found: 

[%s].gunicorn)inspectisclass
startswithsplitrsplit
ValueErrorr   	Exception	traceback
format_excRuntimeErrorlenr   pop	importlibimport_modulejoingetattr)uridefaultsection	entry_strdistr   excmsg
componentsklassmods              r   
load_classr=   E   s   s

~~fIIf%a(		"))#q1JD$
	1#D'488 YYs^
z?a>>#&ab'C++!23!7!=!=c!BJ9+"GS  r"	1))#((:*>?C
 sE""M  	DD	  	1&&(C?Csc3Z/00	1& ! 9#..0CGC&sc3Z'7889  	1&&(C?Csc3Z/00	1s5   D D 9E $F DD0E0E>0F1c                     t        j                  |       }d}|j                  j                         D ]  }|j                  t
        v s|dz  } |S )Nr   r   )r#   	signature
parametersvalueskindpositionals)fsigarityparams       r   	get_arityrH   }   sO    


A
CE&&( ::$QJE Lr   c                 @    t        j                  |       j                  S )z get the username for a user id)pwdgetpwuidpw_name)uids    r   get_usernamerN      s    <<$$$r   c                 L   |ra| r	 t        |       }t        |      dz  }|rt        j                  |       n,|t        j
                         k7  rt        j                  |       | r.| t        j                         k7  rt        j                  |        yyy# t        $ r d}Y w xY w)z) set user and group of workers processes FiN)	rN   KeyErrorabsos
initgroupsgetgidsetgidgetuidsetuid)rM   gidrS   usernames       r   set_owner_processrZ      s     #', #h#MM(C(BIIKIIcN
sbiik!
		# "s  #"
#s   B B#"B#c                 2    t        j                  | ||       y r   )rR   chown)pathrM   rX   s      r   r\   r\      s    HHT3r   winc                 8    | |       |r|}n(t         j                  j                  |      \  }}|xs d}d}|dk  r?t        j                  |      }|r|sy |v ry t	        j
                  |       |dz  }|dk  r?t        j                  d|z   t        d       y )Nr    gMbP?g      ?   z)tests may fail, delete still pending for    )
stacklevel)	rR   r]   r&   listdirtimesleepwarningswarnRuntimeWarning)funcpathnamewaitalldirnamer   timeoutLs          r   _waitforro      s    XGGGMM(3MGTnG m 

7#A1 &*QYJJwqLG m 	AHL$	4r   c                 8    t        t        j                  |        y r   )ro   rR   unlink)filenames    r   _unlinkrs      s    H%r   c                     	 t        |        y # t        $ r7}|j                  t        j                  t        j                  fvr Y d }~y d }~ww xY wr   )rs   OSErrorerrnoENOENTENOTDIR)rr   errors     r   rq   rq      s@     ;;u||U]];; <s    	A-A		Ac                     	 t        j                  t         j                  |        y# t         j                  $ r Y yt        $ r Y yw xY w)NFT)socket	inet_ptonAF_INET6ry   r(   )addrs    r   is_ipv6r      sC    $/
 	 <<  s   $' AAAc                 b   t        j                  d|       rt        j                  d|       d   S | j                  d      r| dd  }	 t	        |      S | j                  d      r| j                  d      d   } | |}}d| v r4d	| v r0| j                  d	      d
   dd  }| j                  d      |gz   d   }n)d| v r| j                  d      |gz   d d \  }}n	| dk(  rd|}}	 t	        |      }|j                         |fS # t
        $ r t        d|z        d w xY w# t
        $ r t        d|z        w xY w)Nz
unix:(//)?r"   zfd://   z"%r is not a valid file descriptor.ztcp://r   []r   z]::r`    z0.0.0.0z%r is not a valid port number.)rematchr&   r%   intr(   r,   lower)netlocdefault_portfdhostports        r   parse_addressr      s]   	xxv&xxv.r22!ABZ	Tr7N "h'*$D
f}||C #AB'T"l^3Q7	ll3'<.8"1=
d	2dD4y ::<)  	TCbHItS	T"  D;dBCCDs   
C: D :DD.c                     t        j                   | t         j                        }|t         j                  z  }t        j                   | t         j                  |       y r   )fcntlF_GETFD
FD_CLOEXECF_SETFDr   flagss     r   close_on_execr     s:    KKEMM*E	UE	KKEMM5)r   c                     t        j                   | t         j                        t        j                  z  }t        j                   | t         j                  |       y r   )r   F_GETFLrR   
O_NONBLOCKF_SETFLr   s     r   set_non_blockingr     s3    KKEMM*R]]:E	KKEMM5)r   c                 X    	 | j                          y # t        j                  $ r Y y w xY wr   )closer{   ry   )socks    r   r   r     s&    

<< s    )))
closerangec                 p    t        | |      D ]  }	 t        j                  |        y # t        $ r Y 'w xY wr   )rangerR   r   ru   )fd_lowfd_highr   s      r   r   r     s<    ( 	B	  s   )	55c                     t        |t              r|j                  d      }dt        |      z  }dj	                  |j                  d      |dg      }| j                  |       y )Nzutf-8z%X
r   s   
)
isinstancestrencoder-   r1   sendall)r   data
chunk_sizechunks       r   write_chunkr      sT    ${{7#CI%JHHj''0$@AELLr   c                 B    |rt        | |      S | j                  |       y r   )r   r   )r   r   chunkeds      r   writer   (  s    4&&LLr   c                     | j                         }|dk7  r0	 | j                  d       t        | ||      | j                  d       S t        | ||      S # | j                  d       w xY w)Ng        r   r   )
gettimeoutsetblockingr   )r   r   r   rm   s       r   write_nonblockr   .  sc    ooG#~	 QtW-QT4)) Qs   A A&c                     t        j                  d      |t        j                  |      dz  }t        j                  d      t	        |      |t        |      |fz  }t        | |j                  d             y )Nz    <html>
      <head>
        <title>%(reason)s</title>
      </head>
      <body>
        <h1><p>%(reason)s</p></h1>
        %(mesg)s
      </body>
    </html>
    )reasonmesgzl    HTTP/1.1 %s %s
    Connection: close
    Content-Type: text/html
    Content-Length: %d
    
    %slatin1)textwrapdedenthtmlescaper   r-   r   r   )r   
status_intr   r   
html_errorhttps         r   write_errorr   :  ss     
" 
	 dkk$&78
9J ?? 
  *ovs:
CDD 4X./r   c                     t        j                         d   }	 |4|j                  j                  | j                  u r	 ~y|j
                  }|4	 ~y# ~w xY w)zCheck whether calling a function raised a ``TypeError`` because
    the call failed or because something in the function raised the
    error.

    :param f: The function that was called.
    :return: ``True`` if the call failed.
    r`   FT)sysexc_infotb_framef_code__code__tb_next)rD   tbs     r   _called_with_wrong_argsr   Q  s\     
	Bn{{!!QZZ/  B n  Bs   $A  A Ac           	      @   | j                  dd      }t        |      dk(  rd}n
|d   |d   }} 	 t        j                  |       }	 t        j                  |d	      j                  }t        |t        j                         r|j"                  }d x}}nt        |t        j$                        rt        |j&                  t        j                         st        d|z        |j&                  j"                  }	 |j(                  D 	cg c]  }	t        j*                  |	       }}	|j,                  D 
ci c],  }
|
j.                  t        j*                  |
j0                        . }}
nt        d
|z        t4        j6                  j8                  t4        j:                  k(  }	 t=        ||      }|		  ||i |}|t        d|z        tS        |      st        d      |S # t        $ rW | j                  d      rDt        j                  j                  |       r%d}t	        || j                  dd      d   |fz         w xY w# t        $ r t        d
|z        w xY wc c}	w c c}
w # t2        $ r t        d|z        w xY w# t>        $ r9 |r$tA        jB                  tE        jF                           t        d|d| d      w xY w# tH        $ rQ}tK        |      r@t        djM                  tA        jN                  tH        |            jQ                                d }~ww xY w)Nr   r   applicationr   z.pyz1Failed to find application, did you mean '%s:%s'?r    eval)modez9Failed to parse %r as an attribute name or function call.z,Function reference must be a simple name: %rz/Failed to parse arguments as literal values: %rzFailed to find attribute z in r   z%Failed to find application object: %rz$Application object must be callable.)*r&   r-   r/   r0   r   endswithrR   r]   existsr'   astparsebodySyntaxErrorr   r   NameidCallri   argsliteral_evalkeywordsargvaluer(   loggingrootlevelDEBUGr2   AttributeErrorr*   print_exceptionr   r   	TypeErrorr   r1   format_exception_onlystripcallable)modulepartsobjr<   r9   
expressionr   r   kwargsr   kwis_debugappes                 r   
import_appr   k  s   LLa E
5zQAha%%f-
YYs055
 *chh'}}v	J	)*//3884 !ORU!UVV!!	5?__EcC$$S)EDECMCVCVWRbffc..rxx88WFW G#M
 	
 ||!!W]]2HTc4  	t&v&C {DsJKKC=CDDJO  ??5!bggnnV&<ECcV]]3%:1%=s$CCDD	  
G#M
 	

" FW 	 !ACG 	  T%%s||~6T6RSST  	 's+$GGI;;IqIJPPR  	sh   G !H> 4I# II# .1II# I> +K A H;>I
I# #I;>AK 	LALLc                     	 t        j                  t         j                  d         } t        j                  t        j                               }| j                  |j                  k(  r.| j
                  |j
                  k(  rt         j                  d   }|S t        j                         }	 |S # t        $ r t        j                         }Y |S w xY w)NPWD)rR   statenvirongetcwdst_inost_devr)   )abcwds      r   r   r     s    GGBJJu%&GGBIIK 88qxxAHH$8**U#C
 J ))+C J  iikJs   BB- B- -CCc                 v    | t        j                          } t        j                  j                  | dd      }|S )z@Return the current date and time formatted for a message header.FT)	localtimeusegmt)rd   emailutils
formatdate)	timestampss     r   	http_dater    s3    IIK	yE$GAHr   c                 J    | j                         j                         t        v S r   )r   r   hop_headers)headers    r   
is_hoppishr    s    <<>![00r   c                 b   dt         j                  vrt        j                         rt        j                  d       t        j                          t        j                         rt        j                  d       t        j
                  d       | st        dd       t        j                  t        t         j                        t        j                  d       dk7  rt        j                  d       t        j                  d       t        j                  d       y	t        j                  t        t         j                        dk7  r+t        j                  d       t        j                  d       fd} |t        j                  d        |t        j                  d       y	y	)
zo    Standard daemonization of a process.
    http://www.faqs.org/faqs/unix-faq/programmer/faq/ section 1.7
    GUNICORN_FDr         Tr   r`   c                     	 | j                         }||k(  r=| j                         r,t        j                  |       t        j                  |       y y y # t
        $ r Y y w xY wr   )filenoisattyrR   r   dup2r   )stream	fd_expectr   fd_nulls      r   redirectzdaemonize.<locals>.redirect!  sV    BY6==?, ,; & s   AA 	A"!A"N)rR   r   fork_exitsetsidumaskr   openREDIRECT_TOO_RDWRset_inheritabler  r   r   stdoutstderr)enable_stdio_inheritancer  r  s     @r   	daemonizer    s   
 BJJ&779HHQK
		779HHQK
 (
 q!ggk2995Gw- !|#GGGQGGGQ ggk2995G
 !|#4 SZZ#SZZ#] 'r   c                      	 t        j                  t        j                  d             y # t        $ rA t        j                  t        j
                         dt        j                                Y y w xY w)N@   r    )randomseedrR   urandomNotImplementedErrorrd   getpidr   r   r   r"  r"  .  sG    :BJJrN# :tyy{BIIK89:s   (+ AA54A5c                     	 t        | d      5 }|j                          d d d        y # 1 sw Y   y xY w# t        $ r}t        d| d|d      d }~ww xY w)Nr   zError: 'z' isn't writable [r   )r  r   IOErrorr,   )r]   rD   r   s      r   check_is_writabler(  5  sR    J$_ 	GGI	 	 	 JaHIIJs(   4 (4 14 4 	AAAc                     t        | t              r| S t        | t              st        d| z        | j	                  |      S )z+Converts a string argument to a byte stringz%r is not a string)r   bytesr   r   r   )r   encodings     r   to_bytestringr,  =  s;    %eS!,u455<<!!r   c                     t        | d      sy	 | j                          y# t        t        t        j
                  f$ r Y yw xY w)Nr  FT)hasattrr  r   r'  ioUnsupportedOperation)r   s    r   
has_filenor1  G  sC    3!

  GR%<%<= s     A Ac                 B   t        dt        j                         | j                         }t	        |      D ]-  \  }}|dk(  rd|z  }t        d|z  t        j                         / t        dt        j                         t        j                  j                          y )Nz!!!)filer   zWARNING: %sz!!! %sz!!!
)printr   r  
splitlines	enumerateflush)r9   linesilines       r   rg   rg   T  sw    	%cjj!NNEU# 046 4'DhoCJJ/0
 
'

#JJr   c                 (     t                 fd}|S )Nc           
      H     |dddt        t                    fg       gS )Nz500 Internal Server Error)zContent-Typez
text/plainzContent-Length)r   r-   )r   start_responser9   s     r   r   zmake_fail_app.<locals>.appd  s/    2*s3s8}-5
 	 ur   )r,  )r9   r   s   ` r   make_fail_appr>  a  s    

C Jr   c                     | j                  d      rAt        j                  j                  d| z         }|j	                  |j
                  dd        S t        j                  j                  |       S )Nz//r    r   )r]   )r%   urllibr   urlsplit_replacer]   )r3   r   s     r   split_request_urirC  n  sX    
~~d
 %%cCi0~~5::ab>~22<<  %%r   c                 j    	 | |        }|j                   |ur|j                  |      |# d }d }w xY wr   )__traceback__with_traceback)tpr   r   s      r   reraiserH  {  sC    =DEb(&&r**s   *, 2c                 >    t        | t              r| S t        | d      S )Nr   )r   r   )r   s    r   bytes_to_strrJ    s    !Sq(r   c                 ^    t         j                  j                  |       j                  d      S )Nzlatin-1)r@  r   unquote_to_bytesdecode)strings    r   unquote_to_wsgi_strrO    s"    <<((077	BBr   )z gunicorn.workers.sync.SyncWorkerzgunicorn.workers)F)8000r   )utf8)Or   email.utilsr   rv   r   r   r/   r#   r/  r   rR   rJ   r!  r   r{   r   r   rd   r*   rf   importlib.metadatametadatar   ModuleNotFoundErrorr   gunicorn.errorsr   gunicorn.workersr   urllib.parser@  r2   r  setr&   r  r   r   r   r=   	ParameterPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDrC   rH   rN   rZ   r\   platformr%   ro   rs   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r(  r,  r1  rg   r>  rC  rH  rJ  rO  r   r   r   <module>r^     s  
        	  	 
  	  
    3 + . b)[1   		)- ?)/#f %%++%
. <<5!4B& iiG>**
		*0.4Pf1S$l:J"


	&	Ce 	[) 8  ~  s6   E 	E. E< E+*E+.E98E9<FF