+
    @žÀj¾‹  ã                   ó¢   € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
Ht ^ RIHt ^ RIHtHtHt ^ RIHtHt  ! R R4      tR# )é    N)Ú
HaltServerÚAppImportError)ÚPidfile)ÚsockÚsystemdÚutil)Ú__version__ÚSERVER_SOFTWAREc                   ó  a€ ] tR t^t oRt^t^t/ t. t/ t	]
P                  tRP                  4        U u. uF  p \        \        RV ,          4      NK  	  up t]! R ]! ]
4       4       4      tR tR tR t]! ]]4      tR tR	 tR
 tR t
R tR tR t]tR tR t R t!R t"R t#R t$R t%R t&R t'R t(R t)R2R lt*R3R lt+R4R lt,R t-R t.R  t/R! t0R" t1R# t2R$ t3R% t4R& t5R' t6R( t7R) t8R* t9R+ t:R, t;R- t<R. t=R/ t>R0 t?R1t@VtAR# u up i )5ÚArbiterz‹
Arbiter maintain the workers processes alive. It launches or
kills them if needed. It also manages application reloading
via SIGHUP/USR2.
z+HUP QUIT INT TERM TTIN TTOU USR1 USR2 WINCHzSIG%sc              #  ó°   "  € T FL  pVR ,          R8X  g   K  V^,          R8w  g   K#  \        \        V4      VR,          P                  4       3x € KN  	  R# 5i):Né   NÚSIGÚ_:r   NNN)ÚgetattrÚsignalÚlower)Ú.0Únames   & Úd/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.14/site-packages/gunicorn/arbiter.pyÚ	<genexpr>ÚArbiter.<genexpr>0   sK   é € ð Ù>I°dØ��8�uÑô 	2Ø!% a¥¨C¡ô 	2Œ”˜Ó	  R¥§¡Ó 0Õ1»kùs   ‚A—A§/Ac                ó,  € \         \        P                  R &   RV n        RV n        RV n        \        P                  ! 4       V n        V P                  V4       RV n
        RV n        ^ V n        ^ V n        ^ V n        RV n        ^ V n        RV n        RV n        RV n        RRR^ R^ R^ /V n        \*        P,                  ! 4       p\.        P0                  R,          pVP3                  ^ \.        P4                  4       R	VR
V^ \.        P4                  /V n        R# )r
   NFÚMasterÚ
start_timeÚworkers_spawnedÚworkers_killedÚreloads:NNNÚargsÚcwd)r
   ÚosÚenvironÚ_num_workersÚ _last_logged_active_worker_countÚlogÚqueueÚSimpleQueueÚ	SIG_QUEUEÚsetupÚpidfiler   Ú
worker_ageÚ
reexec_pidÚ
master_pidÚmaster_nameÚdirty_arbiter_pidÚdirty_arbiterÚdirty_pidfileÚ_control_serverÚ_statsr   ÚgetcwdÚsysÚargvÚinsertÚ
executableÚ	START_CTX)ÚselfÚappr    r   s   &&  r   Ú__init__ÚArbiter.__init__5   sý   € Ü(7Œ�
‰
Ð$Ñ%à ˆÔØ04ˆÔ-ØˆŒô ×*Ò*Ó,ˆŒà�
‰
�3ŒàˆŒØˆŒØˆŒØˆŒØˆŒØ#ˆÔð "#ˆÔØ!ˆÔØ!ˆÔð  $ˆÔð ˜$Ø˜qØ˜aØ�qð	
ˆŒô �kŠk‹mˆä�x‰x˜�{ˆØ�‰�A”s—~‘~Ô&ð �DØ�3ØŒs�~‰~ð
ˆŽó    c                ó   € V P                   # ©N)r#   ©r:   s   &r   Ú_get_num_workersÚArbiter._get_num_workersd   s   € Ø× Ñ Ð r>   c                ób   € V P                   pWn         V P                  P                  WV4       R # r@   )r#   ÚcfgÚnworkers_changed)r:   ÚvalueÚ	old_values   && r   Ú_set_num_workersÚArbiter._set_num_workersg   s'   € Ø×%Ñ%ˆ	Ø!ÔØ�‰×!Ñ! $¨yÖ9r>   c                ó~  € Wn         VP                  V n        V P                  f,   V P                  P                  VP                  4      V n        M<V P                  P                  p V P                  P	                  VP                  4       R\        P                  9   d   V P                  P                  4        V P                  P                   V n        V P                  P"                  V n        V P                  P$                  V n        V P                  P(                  V n        V P                  P*                  V n        V P                  P-                  RP/                  RP1                  R \3        V P                  P4                  P7                  4       R	 R
7       4       4      4      4       V P                  P8                  '       dA   V P                  P8                  P7                  4        F  w  r4V\        P                  V&   K  	  V P                  P:                  '       d   V P                   P=                  4        R # R #   \
         dë    \        R\        P                  R7       \        P                  ! 4        \        P                  P                  4         T P                  P	                  T4       T P                  P                  R4        ELM  \
         dT    \        R\        P                  R7       \        P                  ! 4        \        P                  P                  4          ELªi ; ii ; i)NzK
Error: reloading the logger configuration failed, keeping the previous one©ÚfilezCreloading the logger configuration failed, keeping the previous onez9Error: restoring the previous logger configuration failedÚGUNICORN_PIDzCurrent configuration:
{0}Ú
c              3   ó\   "  € T F"  w  rR P                  WP                  4      x € K$  	  R# 5i)z
  {0}: {1}N)ÚformatrG   )r   ÚconfigrG   s   &  r   r   Ú Arbiter.setup.<locals>.<genexpr>˜   s2   é € ð ;ñ:ñ "�Fð ×#Ñ# F¯K©K×8Ð8ó:ùs   ‚*,c                 ó   € V ^,          # ©é   © )Úsettings   &r   Ú<lambda>ÚArbiter.setup.<locals>.<lambda>œ   s   € ¨g°a®jr>   ©Úkey)r;   rE   r%   Úlogger_classr)   Ú	ExceptionÚprintr5   ÚstderrÚ	tracebackÚ	print_excÚflushÚerrorr!   r"   Úreopen_filesÚworker_classÚaddressÚworkersÚnum_workersÚtimeoutÚ	proc_nameÚdebugrQ   ÚjoinÚsortedÚsettingsÚitemsÚenvÚpreload_appÚwsgi)r:   r;   Úprev_cfgÚkÚvs   &&   r   r)   ÚArbiter.setupm   sB  € ØŒØ—7‘7ˆŒà�8‰8ÒØ—x‘x×,Ñ,¨S¯W©WÓ5ˆD�Hð —x‘x—|‘|ˆHðGØ—‘—‘˜sŸw™wÔ'ð, œRŸZ™ZÔ'Ø�H‰H×!Ñ!Ô#à ŸH™H×1Ñ1ˆÔØ—x‘x×'Ñ'ˆŒØŸ8™8×+Ñ+ˆÔØ—x‘x×'Ñ'ˆŒØŸ™×+Ñ+ˆŒà�‰�‰Ð4×;Ñ;Ø�I‰Iñ ;ô ˜$Ÿ(™(×+Ñ+×1Ñ1Ó3Ù8õ:ó;ó ;ó<ô 	=ð �8‰8�<�<ˆ<ØŸ™Ÿ™×*Ñ*Ö,‘�Ø !”—
‘
˜1“ñ -ð �8‰8××ÐØ�H‰H�M‰MŽOñ  øôU ô Gô
 ð 1Ü7:·z±zõCä×#Ò#Ô%Ü—
‘
× Ñ Ô"ð	GØ—H‘H—N‘N 8Ô,ð —H‘H—N‘Nð $F÷ Gøô !ô 'Üð 1Ü7:·z±zõCä×'Ò'Ô)Ü—J‘J×$Ñ$×&Ð&ð	'úðGús2   Á(%I ÉAL<Ê!KÊ<L<ËAL8Ì3L<Ì7L8Ì8L<c                ó   € V P                   P                  R\        4       \        P                  ! 4       V P                  R&   R\
        P                  9   dM   \        \
        P                  P                  R4      4      V n	        V P                  R,           V n
        RV n        \
        P                  ! 4       V n        V P                  P                  ef   V P                  P                  pV P                  ^ 8w  d
   VR,          p\!        V4      V n        V P                  P#                  V P                  4       V P                  P%                  V 4       V P'                  4        V P(                  '       Eg   Rp\*        P,                  ! 4       pV'       d8   RV n        \/        \*        P0                  \*        P0                  V,           4      pMcV P                  '       dR   . p\
        P                  P3                  R4      P5                  R	4       F  pVP7                  \        V4      4       K  	  V P                  P8                  '       d   \;        \<        R
4      '       g2   \>        P@                  ! V P                  V P                   V4      V n        R	PC                  V P(                   Uu. uF  p\E        V4      NK  	  up4      pV P                   PG                  R4       V P                   P                  RW`P                  4       V P                   P                  RV P                  PH                  4       \*        PJ                  ! RV P                   4       \;        V PL                  R4      '       d1   V PL                  PO                  V P                  V P                   4       V P                  PP                  ^ 8”  d-   V P                  PR                  '       d   V PU                  4        V P                  PW                  V 4       R# u upi )zKInitialize the arbiter. Start listening and set pidfile if needed.
        zStarting gunicorn %sr   rN   z.2zMaster.2NTÚGUNICORN_FDÚ,ÚSO_REUSEPORTzArbiter bootedzListening at: %s (%s)zUsing worker: %sz&READY=1
STATUS=Gunicorn arbiter bootedÚcheck_config),r%   Úinfor	   Útimer3   r!   r"   ÚintÚgetr-   rk   r.   ÚgetpidÚpidrE   r*   r   ÚcreateÚon_startingÚinit_signalsÚ	LISTENERSr   Ú
listen_fdsÚrangeÚSD_LISTEN_FDS_STARTÚpopÚsplitÚappendÚ
reuse_portÚhasattrÚsocketr   Úcreate_socketsrm   Ústrrl   Úworker_class_strÚ	sd_notifyrf   r|   Údirty_workersÚ
dirty_appsÚspawn_dirty_arbiterÚ
when_ready)r:   ÚpidnameÚfdsr‡   ÚfdÚlnrÚlisteners_strs   &      r   ÚstartÚArbiter.start¦   s¬  € ð 	�‰�‰Ð,¬kÔ:ô %)§I¢I£Kˆ�‰�LÑ!àœRŸZ™ZÔ'Ü!¤"§*¡*§.¡.°Ó"@ÓAˆDŒOØ!Ÿ^™^¨dÕ2ˆDŒNØ)ˆDÔä—9’9“;ˆŒØ�8‰8×ÑÒ'Ø—h‘h×&Ñ&ˆGØ�‰ !Ô#Ø˜4•�Ü" 7Ó+ˆDŒLØ�L‰L×Ñ §¡Ô)Ø�‰×Ñ˜TÔ"à×ÑÔà�~�~‰~ØˆCÜ ×+Ò+Ó-ˆJßØ#�”ÜœG×7Ñ7Ü#×7Ñ7¸*ÕDóF‘ð ——�Ø�ÜŸ*™*Ÿ.™.¨Ó7×=Ñ=¸cÖB�BØ—J‘Jœs 2›wÖ'ñ Cð —H‘H×'×'Ð'¬G´F¸N×,KÒ,KÜ!%×!4Ò!4°T·X±X¸t¿x¹xÈÓ!M�”àŸ™°d·n²nÓ!E±n¨s¤# c¦(±nÑ!EÓFˆØ�‰�‰Ð'Ô(Ø�‰�‰Ð-¨}¿h¹hÔGØ�‰�‰Ð(¨$¯(©(×*CÑ*CÔDÜ×ÒÐCÀTÇXÁXÔNô �4×$Ñ$ n×5Ò5Ø×Ñ×*Ñ*¨4¯8©8°T·X±XÔ>ð �8‰8×!Ñ! AÔ%¨$¯(©(×*=×*=Ð*=Ø×$Ñ$Ô&ð
 	�‰×Ñ˜DÖ!ùò# "Fs   Ê.Pc                óþ   € V P                   P                  4        V P                   F#  p\        P                  ! WP                  4       K%  	  \        P                  ! \        P                  V P
                  4       R# )zjInitialize master signal handling. Most of the signals
are queued. Child signals only wake up the master.
N)r%   Úclose_on_execÚSIGNALSr   ÚSIGCHLDÚsignal_chld)r:   Úss   & r   r…   ÚArbiter.init_signalsâ   sL   € ð
 	�‰×ÑÔ ð —”ˆAÜ�MŠM˜!Ÿ[™[Ö)ñ ä�Š”f—n‘n d×&6Ñ&6Ö7r>   c                ó<   € V P                   P                  V4       R# )z3Signal handler - NO LOGGING, just queue the signal.N©r(   Ú
put_nowait©r:   ÚsigÚframes   &&&r   r   ÚArbiter.signalî   ó   € à�‰×!Ñ! #Ö&r>   c                óâ  € V P                  4        \        P                  ! RV P                  ,          4        V P	                  4        V P                  4         V P                  4        V P                  RR7       F×  pWP                  9  d   V P                  P                  RV4       K1  V P                  P                  V4      p\        V RV,          R4      pV'       g   V P                  P                  RV4       K†  V\        P                  8X  d   V P                  P                   MV P                  P                  pV! R	V4       V! 4        KÙ  	  V P#                  4        V P	                  4        V P%                  4        EK1    \&        \(        3 d    T P+                  4         R# \,         d3   pT P+                  TP.                  TP0                  R
7        Rp?R# Rp?i\2         d    h \4         dq    T P                  P                  RRR7       T P7                  R4       T P8                  e   T P8                  P;                  4        \<        P>                  ! R4        R# i ; i)zMain master loop.úmaster [%s]Tç      ð?)rj   zIgnoring unknown signal: %sz	handle_%sNzUnhandled signal: %szHandling signal: %s)ÚreasonÚexit_statusz Unhandled exception in main loop©Úexc_infoFéÿÿÿÿ) r�   r   Ú_setproctitlerk   Úmanage_workersÚ_start_control_serverÚmaybe_promote_masterÚwait_for_signalsÚ	SIG_NAMESr%   r}   r€   r   rd   r   r¢   rl   Úmurder_workersÚmanage_dirty_arbiterÚStopIterationÚKeyboardInterruptÚhaltr   r±   r²   Ú
SystemExitr^   Ústopr*   Úunlinkr5   Úexit)r:   rª   ÚsignameÚhandlerÚ	log_levelÚinsts   &     r   ÚrunÚArbiter.runò   sÆ  € à�
‰
ŒÜ×Ò˜=¨4¯>©>Õ9Ô:ð)	Ø×ÑÔ!ð ×&Ñ&Ô(àØ×)Ñ)Ô+ð  ×0Ñ0¸Ð0Ö=�CØ§.¡.Ô0ØŸ™Ÿ™Ð&CÀSÔIÙ à"Ÿn™n×0Ñ0°Ó5�GÜ% d¨K¸'Õ,AÀ4ÓH�Gß"ØŸ™Ÿ™Ð'=¸wÔGÙ à25¼¿¹Ô2G §¡§¢ÈTÏXÉXÏ]É]�IÙÐ3°WÔ=Ù–Iñ >ð ×#Ñ#Ô%Ø×#Ñ#Ô%Ø×)Ñ)×+øÜÔ0Ð1ô 	Ø�I‰I�KÜô 	HØ�I‰I˜TŸ[™[°d×6FÑ6FˆI×GÒGûÜô 	ØÜô 	Ø�H‰H�N‰NÐ=Ø$(ð ô *à�I‰I�eÔØ�|‰|Ò'Ø—‘×#Ñ#Ô%Ü�HŠH�R�Lð	ús7   ¹EF
 Æ
!I.Æ.I.Æ7I.Æ8'G%Ç%I.Ç2
I.Ç=A-I.É-I.c                ó<   € V P                   P                  V4       R# )z;SIGCHLD signal handler - NO LOGGING, just queue the signal.Nr§   r©   s   &&&r   r£   ÚArbiter.signal_chld"  r­   r>   c                óF   € V P                  4        V P                  4        R# )z6SIGCHLD handling - called from main loop, safe to log.N)Úreap_dirty_arbiterÚreap_workersrA   s   &r   Úhandle_chldÚArbiter.handle_chld&  s   € ð
 	×ÑÔ!Ø×ÑÖr>   c                óØ   € V P                   P                  RV P                  4       V P                  4        V P                  '       d"   V P                  \        P                  4       R# R# )zŽHUP handling.
- Reload configuration
- Start the new worker processes with a new configuration
- Gracefully shutdown the old worker processes
zHang up: %sN)r%   r}   r.   Úreloadr/   Úkill_dirty_arbiterr   ÚSIGHUPrA   s   &r   Ú
handle_hupÚArbiter.handle_hup2  sH   € ð 	�‰�‰�m T×%5Ñ%5Ô6Ø�‰Œà×!×!Ð!Ø×#Ñ#¤F§M¡MÖ2ñ "r>   c                ó   € \         h)zSIGTERM handling)r¾   rA   s   &r   Úhandle_termÚArbiter.handle_term?  s   € äÐr>   c                ó0   € V P                  R4       \        h)zSIGINT handlingF©rÂ   r¾   rA   s   &r   Ú
handle_intÚArbiter.handle_intC  ó   € à�	‰	�%ÔÜÐr>   c                ó0   € V P                  R4       \        h)zSIGQUIT handlingFrÜ   rA   s   &r   Úhandle_quitÚArbiter.handle_quitH  rß   r>   c                óX   € V ;P                   ^,          un         V P                  4        R# )z:SIGTTIN handling.
Increases the number of workers by one.
N©ri   r·   rA   s   &r   Úhandle_ttinÚArbiter.handle_ttinM  s!   € ð
 	×Ò˜AÕÕØ×ÑÖr>   c                ó~   € V P                   ^8:  d   R# V ;P                   ^,          un         V P                  4        R# )z:SIGTTOU handling.
Decreases the number of workers by one.
Nrä   rA   s   &r   Úhandle_ttouÚArbiter.handle_ttouU  s2   € ð
 ×Ñ˜qÔ ÙØ×Ò˜AÕÕØ×ÑÖr>   c                óÞ   € V P                   P                  4        V P                  \        P                  4       V P
                  '       d"   V P                  \        P                  4       R# R# )z=SIGUSR1 handling.
Kill all workers by sending them a SIGUSR1
N)r%   re   Úkill_workersr   ÚSIGUSR1r/   rÔ   rA   s   &r   Úhandle_usr1ÚArbiter.handle_usr1_  sI   € ð
 	�‰×ÑÔØ×Ñœ&Ÿ.™.Ô)à×!×!Ð!Ø×#Ñ#¤F§N¡NÖ3ñ "r>   c                ó&   € V P                  4        R# )z¸SIGUSR2 handling.
Creates a new arbiter/worker set as a fork of the current
arbiter without affecting old workers. Use this to do live
deployment with the ability to backout a change.
N)ÚreexecrA   s   &r   Úhandle_usr2ÚArbiter.handle_usr2j  s   € ð 	�‰Žr>   c                óú   € V P                   P                  '       dD   V P                  P                  R4       ^ V n        V P                  \        P                  4       R# V P                  P                  R4       R# )zSIGWINCH handlingzgraceful stop of workersz SIGWINCH ignored. Not daemonizedN)	rE   Údaemonr%   r}   ri   rë   r   ÚSIGTERMrl   rA   s   &r   Úhandle_winchÚArbiter.handle_winchs  sK   € à�8‰8�?�?ˆ?Ø�H‰H�M‰MÐ4Ô5Ø ˆDÔØ×ÑœfŸn™nÖ-à�H‰H�N‰NÐ=Ö>r>   c                óê  € V P                   ^ 8X  d   R# V P                   \        P                  ! 4       8w  d¼   V P                  P	                  R4       RV n        ^ V n         V P                  P                  V n        \        P                  R V P                  e0   V P                  P                  V P                  P                  4       \        P                  ! RV P                  ,          4       R# R# )r   NzMaster has been promoted.r   rN   r¯   )r-   r!   Úgetppidr%   r}   r.   rE   rk   r"   r*   Úrenamer   r¶   rA   s   &r   r¹   ÚArbiter.maybe_promote_master|  s¢   € Ø�?‰?˜aÔÙà�?‰?œbŸjšj›lÔ*Ø�H‰H�M‰MÐ5Ô6à'ˆDÔØˆDŒOØ!ŸX™X×/Ñ/ˆDŒNÜ—
‘
˜>Ð*à�|‰|Ò'Ø—‘×#Ñ# D§H¡H×$4Ñ$4Ô5ä×Ò˜}¨t¯~©~Õ=Ö>ñ +r>   c                óP   € V P                   P                  V P                  4       R# )z Wake up the arbiter's main loop.N)r(   r¨   ÚWAKEUP_REQUESTrA   s   &r   ÚwakeupÚArbiter.wakeup�  s   € à�‰×!Ñ! $×"5Ñ"5Ö6r>   Nc                óž  € V P                  4        V P                  4        V^ 8X  d   V P                  P                  MV P                  P                  pV! RV P
                  4       Ve
   V! RV4       V P                  e   V P                  P                  4        V P                  P                  V 4       \        P                  ! V4       R# )zhalt arbiter zShutting down: %sNz
Reason: %s)Ú_stop_control_serverrÂ   r%   r}   rd   r.   r*   rÃ   rE   Úon_exitr5   rÄ   )r:   r±   r²   Úlog_funcs   &&& r   rÀ   ÚArbiter.halt‘  s�   € ð 	×!Ñ!Ô#à�	‰	Œà$/°1Ô$4�4—8‘8—=’=¸$¿(¹(¿.¹.ˆÙÐ$ d×&6Ñ&6Ô7ØÒÙ�\ 6Ô*à�<‰<Ò#Ø�L‰L×ÑÔ!Ø�‰×Ñ˜ÔÜ�Š�Ör>   c                óº  € . p V P                   P                  RVR7      pW0P                  8w  d   VP                  V4         V P                   P	                  4       pW0P                  8w  d   VP                  V4       K?  KA    \
        P                   d     T# i ; i  \
        P                   d     T# \         d    \        P                  ! 4         T# i ; i)zMWait for signals with timeout.
Returns a list of signals that were received.
T)Úblockrj   )
r(   r€   rý   rŒ   Ú
get_nowaitr&   ÚEmptyr¿   r5   rÄ   )r:   rj   Úsignalsrª   s   &&  r   rº   ÚArbiter.wait_for_signals¢  sÇ   € ð
 ˆð	à—.‘.×$Ñ$¨4¸Ð$ÓAˆCØ×)Ñ)Ô)Ø—‘˜sÔ#àðØŸ.™.×3Ñ3Ó5�CØ×1Ñ1Ô1ØŸ™ sÖ+ñ 2øä—{‘{ô Øð
 ˆðûä�{‰{ô 	Øð ˆô !ô 	Ü�HŠH�JØˆð	úsA   „?B Á;B Á?B ÂBÂB ÂBÂB ÂCÂ7CÃ CÃCc                óÞ  € V P                   V P                  u;8H  ;'       d    ^ 8H  Mu ;'       d5    V P                  '       * ;'       d    V P                  P                  '       * p\
        P                  ! V P                  V4       . V n        \        P                  pV'       g   \        P                  p\        P                  ! 4       V P                  P                  ,           pV P                  '       d   V P                  V4       V P                  V4       V'       * pV P                   '       g   V P                  '       Ed&   \        P                  ! 4       V8  Ed   V'       gÊ    V P"                  P%                  4       pV\        P&                  \        P                  39   dŠ   V P(                  P+                  R4       RpV P                  \        P                  4       V P                  '       d    V P                  \        P                  4       \        P                  ! 4       R,           pV P/                  4        V P1                  4        \        P2                  ! R4       EKJ  V P                  \        P4                  4       V P                  '       d    V P                  \        P4                  4       V P/                  4        V P1                  4        R#   \,         d     L¸i ; i)z�Stop workers

:attr graceful: boolean, If True (the default) workers will be
killed gracefully  (ie. trying to wait for the current connection)
zQuick shutdown requestedTç       @çš™™™™™¹?N)r,   r-   r   rE   r�   r   Úclose_socketsr†   r   rõ   ÚSIGQUITr~   Úgraceful_timeoutr/   rÔ   rë   ÚWORKERSr(   r  ÚSIGINTr%   r}   r^   rÏ   rÎ   ÚsleepÚSIGKILL)r:   ÚgracefulrÃ   rª   ÚlimitÚquick_shutdownÚpending_sigs   &&     r   rÂ   ÚArbiter.stop»  sõ  € ð �O‰O˜tŸ™×3Ô3°!Ô3÷ (ð (Ø—L‘LÔ ÷(ð (à—H‘H×'Ñ'Ô'ð 	ô
 	×Ò˜4Ÿ>™>¨6Ô2àˆŒÜ�n‰nˆßÜ—.‘.ˆCÜ—	’	“˜dŸh™h×7Ñ7Õ7ˆð ×!×!Ð!Ø×#Ñ# CÔ(ð 	×Ñ˜#Ôà%œˆØ�|�|ˆ|˜t×5×5Ñ5¼4¿9º9»;ÈÕ;Nç!ðØ"&§.¡.×";Ñ";Ó"=�KØ"¤v§}¡}´f·n±nÐ&EÔEØŸ™Ÿ™Ð&@ÔAØ)-˜Ø×)Ñ)¬&¯.©.Ô9Ø×1×1Ð1Ø ×3Ñ3´F·N±NÔCä $§	¢	£¨cÕ 1˜ð ×ÑÔØ×#Ñ#Ô%Ü�JŠJ�s�Oà×Ñœ&Ÿ.™.Ô)Ø×!×!Ð!Ø×#Ñ#¤F§N¡NÔ3à×ÑÔØ×ÑÖ!øô !ô Ùðús   Å+BK Ç8;K ËK,Ë+K,c                ó’  € V P                   ^ 8w  d   V P                  P                  R4       R# V P                  ^ 8w  d   V P                  P                  R4       R# \        P
                  ! 4       p\        P                  ! 4       V n         V P                   ^ 8w  d   R# V P                  P                  V 4       V P                  P                  P                  4       p\        V4      VR&   V P                  '       dD   \        \        P
                  ! 4       4      VR&   \        \        V P                  4      4      VR&   M%RP                  R V P                   4       4      VR	&   \        P                   ! V P"                  R
,          4       \        P$                  ! V P"                  ^ ,          V P"                  R,          V4       R# )z)Relaunch the master and workers.
        z"USR2 signal ignored. Child exists.Nz#USR2 signal ignored. Parent exists.rN   Ú
LISTEN_PIDÚ
LISTEN_FDSrz   c              3   óT   "  € T F  p\        VP                  4       4      x € K   	  R # 5ir@   )r‘   Úfileno)r   r›   s   & r   r   Ú!Arbiter.reexec.<locals>.<genexpr>  s!   é € ð .=Ù-; c”�C—J‘J“L×!Ð!«^ùs   ‚&(ry   r    r   )r,   r%   Úwarningr-   r!   r�   ÚforkrE   Úpre_execÚenv_origÚcopyr‘   r   Úlenr†   rm   Úchdirr9   Úexecvpe)r:   r-   r"   s   &  r   rð   ÚArbiter.reexecñ  s<  € ð �?‰?˜aÔØ�H‰H×ÑÐAÔBÙà�?‰?˜aÔØ�H‰H×ÑÐBÔCÙä—Y’Y“[ˆ
ÜŸ'š'›)ˆŒØ�?‰?˜aÔÙà�‰×Ñ˜$Ôà—(‘(×#Ñ#×(Ñ(Ó*ˆÜ"% j£/ˆ�Ñà�<�<ˆ<Ü$'¬¯	ª	«Ó$4ˆG�LÑ!Ü$'¬¨D¯N©NÓ(;Ó$<ˆG�LÒ!à%(§X¡Xñ .=Ø-1¯^ª^ó.=ó &=ˆG�MÑ"ô 	�Š�—‘ Õ&Ô'ô 	�
Š
�4—>‘> !Õ$ d§n¡n°VÕ&<¸gÖFr>   c                óT  € V P                   R ;;,          ^,          uu&   V P                  P                  pV P                  P                   F_  pW P                  P                  9   d1   V P                  P                  V,          \
        P                  V&   KM   \
        P                  V Ka  	  V P                  P                  4        V P                  V P                  4       V P                  P                  4        WP                  P                  8w  d¤   V P                   F  pVP                  4        K  	  \        P                   ! V P                  V P                  4      V n        RP#                  V P                   Uu. uF  p\%        V4      NK  	  up4      pV P                  P'                  RV4       V P                  P)                  V 4       V P*                  e   V P*                  P-                  4        V P                  P*                  eJ   \/        V P                  P*                  4      V n        V P*                  P1                  V P2                  4       \4        P6                  ! RV P8                  ,          4       V P:                  p\=        V P                  P>                  4       F  pV PA                  4        K  	  V PC                  4        \D        PF                  ! 4       V P                  PH                  ,           p\D        PF                  ! 4       V8  do   V PJ                  '       g   R# \M        R V PJ                  PO                  4        4       4      pW…8”  d   R# V PQ                  4        \D        PR                  ! R4       Kˆ  R#   \         d     EKU  i ; iu upi )r   rz   zListening at: %sNr¯   c              3   ó8   "  € T F  qP                   x € K  	  R # 5ir@   ©Úage)r   Úws   & r   r   Ú!Arbiter.reload.<locals>.<genexpr>V  s   é € Ð>Ñ(= 1ŸžÓ(=ùs   ‚r  )*r3   rE   rg   rq   r#  r!   r"   ÚKeyErrorr;   rÓ   r)   r%   re   r†   Úcloser   r�   rm   r‘   r}   Ú	on_reloadr*   rÃ   r   rƒ   r‚   r   r¶   rk   r+   rˆ   rh   Úspawn_workerr·   r~   Ú	monotonicr  r  ÚminÚvaluesrÏ   r  )	r:   Úold_addressru   r›   rœ   Úlast_worker_ager   ÚdeadlineÚoldests	   &        r   rÓ   ÚArbiter.reload  sƒ  € à�‰�I× !Õ#Óà—h‘h×&Ñ&ˆð —‘—”ˆAØ—H‘H×%Ñ%Ô%ð !%§¡× 1Ñ 1°!Õ 4”—
‘
˜1“ðÜŸ
™
 1šñ ð 	�‰�‰ÔØ�
‰
�4—8‘8Ôð 	�‰×ÑÔð Ÿ(™(×*Ñ*Ô*à—~”~�Ø—	‘	–ñ &ô "×0Ò0°·±¸4¿8¹8ÓDˆDŒNØŸH™H¸$¿.º.Ó%I¹.°3¤c¨#¦h¹.Ñ%IÓJˆMØ�H‰H�M‰MÐ,¨mÔ<ð 	�‰×Ñ˜4Ô ð �<‰<Ò#Ø�L‰L×ÑÔ!ð �8‰8×ÑÒ'Ü" 4§8¡8×#3Ñ#3Ó4ˆDŒLØ�L‰L×Ñ §¡Ô)ô 	×Ò˜=¨4¯>©>Õ9Ô:ð Ÿ/™/ˆô �t—x‘x×'Ñ'Ö(ˆAØ×ÑÖñ )ð 	×ÑÔô —>’>Ó# d§h¡h×&?Ñ&?Õ?ˆÜ�nŠnÓ Ô)Ø—<—<�<ÙäÑ>¨¯©×(;Ñ(;Ô(=Ó>Ó>ˆFØÔ'ÙØ×ÑÔÜ�JŠJ�sŽOñ *øô_  ô Ûðüò" &Js   ÂNÆN%ÎN"Î!N"c                ó6  € V P                   '       g   R# \        V P                  P                  4       4      pV FÃ  w  r# \        P
                  ! 4       VP                  P                  4       ,
          V P                   8:  d   KK   TP                  '       gF   T P                  P                  RT4       RTn
        T P                  T\        P                  4       K£  T P                  T\        P                   4       KÅ  	  R#   \        \        3 d     KÝ  i ; i)z!Kill unused/idle workers
        NzWORKER TIMEOUT (pid:%s)T)rj   Úlistr  rp   r~   r3  ÚtmpÚlast_updateÚOSErrorÚ
ValueErrorÚabortedr%   ÚcriticalÚkill_workerr   ÚSIGABRTr  )r:   rh   r‚   Úworkers   &   r   r¼   ÚArbiter.murder_workers\  sÎ   € ð �|�|ˆ|ÙÜ�t—|‘|×)Ñ)Ó+Ó,ˆÛ$‰MˆSðÜ—>’>Ó# f§j¡j×&<Ñ&<Ó&>Õ>À$Ç,Á,ÔNÙð Oð
 —>—>�>Ø—‘×!Ñ!Ð";¸SÔAØ!%�”Ø× Ñ  ¤f§n¡nÖ5à× Ñ  ¤f§n¡nÖ5ó %øô œZÐ(ô Úðús   Á ADÄDÄDc                óª  €   \         P                  ! R	\         P                  4      w  rV'       g   R# V P                  V8X  d
   ^ V n        KL  V P                  V8X  d   V P                  W4       Kp  V P                  P                  VR4      pVf   V P                  P                  RW4       K®  Rp\         P                  ! V4      '       d   \         P                  ! V4      pMç\         P                  ! V4      '       dÌ   \         P                  ! V4      p \        P                  ! V4      P                   pRpW.pV\        P&                  8X  d)   VR,          pV P                  P(                  ! V.VO5!   MRV\        P*                  8X  d    V P                  P,                  ! V.VO5!   MV P                  P.                  ! V.VO5!   Ve$   V^ 8w  d   V P                  P)                  RW4       W@P0                  8X  d   Rp	\3        W�P0                  4      hW@P4                  8X  d   Rp	\3        W�P4                  4      hVP6                  P9                  4        V P:                  P=                  W4       EKw    \"         d    RP%                  T4      p EL`i ; i  \>         d,   p
T
P@                  \@        PB                  8w  d   h  Rp
?
R# Rp
?
ii ; i)
z/Reap workers to avoid zombie processes
        Nz0Reaped unknown child process (pid:%s, status:%s)z	signal {}zWorker (pid:%s) was sent %s!z Perhaps out of memory?z$Worker (pid:%s) exited with code %s.zWorker failed to boot.zApp failed to load.rµ   )"r!   ÚwaitpidÚWNOHANGr,   r/   Úhandle_dirty_arbiter_exitr  rŠ   r%   rl   Ú	WIFEXITEDÚWEXITSTATUSÚWIFSIGNALEDÚWTERMSIGr   ÚSignalsr   r@  rQ   r  rd   rõ   r}   r   ÚWORKER_BOOT_ERRORr   ÚAPP_LOAD_ERRORr=  r0  rE   Ú
child_exitr?  ÚerrnoÚECHILD)r:   ÚwpidÚstatusrE  Úexitcoderª   Úsig_nameÚmsgÚmsg_argsr±   Úes   &          r   rÏ   ÚArbiter.reap_workersq  s5  € ð@	ØÜ!Ÿzšz¨"¬b¯j©jÓ9‘�ßÙØ—?‘? dÔ*Ø&'�D–OØ×+Ñ+¨tÔ3ð ×2Ñ2°4Ö@ð "Ÿ\™\×-Ñ-¨d°DÓ9�FØ’~ØŸ™Ÿ™ØNØ ô*ñ !ð
  $�HÜ—|’| F×+Ò+Ü#%§>¢>°&Ó#9™ÜŸš¨×/Ò/Ü Ÿkšk¨&Ó1˜ð?Ü'-§~¢~°cÓ':×'?Ñ'?˜Hð =˜Ø$(Ð#3˜ð ¤&§.¡.Ô0ØÐ#<Õ<˜CØ ŸH™HŸNšN¨3Ð:°Õ:Ø ¤F§N¡NÔ2à ŸH™HŸMšM¨#Ð9°Õ9ð !ŸH™H×,Ò,¨SÐ<°8Ô<àÒ+°¸A´ØŸ™Ÿ™Ð'MØ'+ô7ð  ×#9Ñ#9Ô9Ø!9˜Ü(¨×1GÑ1GÓHÐHØ×#6Ñ#6Ô6Ø!6˜Ü(¨×1DÑ1DÓEÐEà—J‘J×$Ñ$Ô&Ø—H‘H×'Ñ'¨×5øô9  *ô ?Ø'2×'9Ñ'9¸#Ó'>›Hð?ûô: ô 	Ø�w‰wœ%Ÿ,™,Ô&Øõ 'ûð	úsN   ‚0J ´BJ Ã2J ÄJ Ä I9 Ä8EJ É9JÊJ ÊJÊJ ÊKÊ' KËKc           	     óî  € \        V P                  4      V P                  8  d   V P                  4        V P                  P	                  4       p\        VR R7      p\        V4      V P                  8”  d6   VP                  ^ 4      w  r#V P                  V\        P                  4       KO  \        V4      pV P                  V8w  d9   W@n
        V P                  P                  RP                  V4      RRRVRR/R	7       V P                  P                  '       dZ   \!        R
 V P"                   4       4      pV^ 8¼  d5   V P                  P                  RP                  V4      RRRVRR/R	7       R# R# R# )zCMaintain the number of workers by spawning or killing
as required.
c                 ó(   € V ^,          P                   # rU   r+  )r-  s   &r   rY   Ú(Arbiter.manage_workers.<locals>.<lambda>À  s   € °°!µ·²r>   r[   z{0} workersÚmetriczgunicorn.workersrG   ÚmtypeÚgauge)Úextrac              3   óX   "  € T F   pVP                   ! 4       ;'       g    ^ x € K"  	  R# 5i)r   N)Úget_backlog)r   r   s   & r   r   Ú)Arbiter.manage_workers.<locals>.<genexpr>Î  s+   é € ð 6Ù&4˜dð ×*Ò*Ó,×1Ð1°Ô1Û&4ùs   ‚*Ÿ*zsocket backlog: {0}zgunicorn.backlogÚ	histogramN)r%  r  ri   Úspawn_workersrp   rn   rŠ   rC  r   rõ   r$   r%   rl   rQ   rE   Úenable_backlog_metricÚsumr†   )r:   rh   r‚   r   Úactive_worker_countÚbacklogs   &     r   r·   ÚArbiter.manage_workers·  sK  € ô
 ˆt�|‰|Ó˜t×/Ñ/Ô/Ø×ÑÔ à—,‘,×$Ñ$Ó&ˆÜ˜Ñ&8Ô9ˆÜ�'‹l˜T×-Ñ-Ô-Ø—{‘{ 1“~‰HˆSØ×Ñ˜S¤&§.¡.Ö1ä! '›lÐØ×0Ñ0Ð4GÔGØ4GÔ1Ø�H‰H�N‰N˜=×/Ñ/Ð0CÓDØ"*Ð,>Ø")Ð+>Ø")¨7ð"4ð ô 5ð
 �8‰8×)×)Ð)Üñ 6Ø&*§n¢nó6ó 6ˆGð ˜!Œ|Ø—‘—‘Ð4×;Ñ;¸GÓDØ&.Ð0BØ&-¨wØ&-¨{ð&<ð ö =ñ ñ	 *r>   c           	     ób	  € V ;P                   ^,          un         V P                  V P                   V P                  V P                  V P                  V P
                  R,          V P                  V P                  4      pV P                  P                  W4       \        P                  ! 4       pV^ 8w  d6   W!n        WP                  V&   V P                  R;;,          ^,          uu&   V# V P                  P                  4        F  pVP                  P                  4        K  	  \        P                   ! 4       Vn         \"        P$                  ! RV P&                  ,          4       V P                  P)                  RVP                  4       V P                  P*                  '       d1   \,        P.                  ! V P                  V P                  4      Vn        V P                  P3                  W4       VP5                  4        \6        P8                  ! ^ 4       T P                  P)                  RTP                  4        TP                  P                  4        T P                  PQ                  Y4       R
#   \:         d    h \<         dˆ   pT P                  P?                  RRR7       \A        RT,          \6        PB                  R	7       \6        PB                  PE                  4        \6        P8                  ! T PF                  4        R
p?LöR
p?i\H         d¯   pT P                  PK                  R4       \A        RT,          \6        PB                  R	7       \6        PB                  PE                  4        TPL                  '       g!   \6        P8                  ! T PN                  4       \6        P8                  ! R4        R
p?EL­R
p?ii ; i  \H         d4    T P                  PS                  R\T        PV                  ! 4       4        R
# i ; i  T P                  P)                  RTP                  4        TP                  P                  4        T P                  PQ                  Y4       i   \H         d3    T P                  PS                  R\T        PV                  ! 4       4        i i ; i; i)rV   r  r   zworker [%s]zBooting worker with pid: %sz'Exception while loading the applicationTr³   z%srL   NzException in worker processzWorker exiting (pid: %s)z Exception during worker exit:
%srµ   ),r+   rf   r‚   r†   r;   rj   rE   r%   Úpre_forkr!   r!  r  r3   r5  r=  r0  r�   r   r¶   rk   r}   r�   r   r�   ÚsocketsÚ	post_forkÚinit_processr5   rÄ   rÁ   r   rl   r_   r`   rc   rQ  r^   Ú	exceptionÚbootedrP  Úworker_exitr   ra   Ú
format_exc)r:   rE  r‚   Úsiblingr[  s   &    r   r2  ÚArbiter.spawn_worker×  s  € Ø�Š˜1Õ�Ø×"Ñ" 4§?¡?°D·H±H¸d¿n¹nØ#'§8¡8¨T¯\©\¸CÕ-?Ø#'§8¡8¨T¯X©Xó7ˆð 	�‰×Ñ˜$Ô'ä�gŠg‹iˆØ�!Œ8ØŒJØ &�L‰L˜ÑØ�K‰KÐ)×*¨aÕ/Ó*ØˆJð —|‘|×*Ñ*Ö,ˆGØ�K‰K×ÑÖñ -ô —Y’Y“[ˆŒ
ð	9Ü×Ò˜}¨t¯~©~Õ=Ô>Ø�H‰H�M‰MÐ7¸¿¹ÔDØ�x‰x×"×"Ð"Ü!%×!4Ò!4°T·X±X¸t¿x¹xÓ!H�”Ø�H‰H×Ñ˜tÔ,Ø×ÑÔ!Ü�HŠH�QŒKð" �H‰H�M‰MÐ4°f·j±jÔAð9Ø—
‘
× Ñ Ô"Ø—‘×$Ñ$ TÖ2øô' ô 	ØÜô 	*Ø�H‰H�N‰NÐDØ$(ð ô *ä�$˜•(¤§¡Õ,Ü�J‰J×ÑÔÜ�HŠH�T×(Ñ(×)Ñ)ûÜô 	Ø�H‰H×ÑÐ<Ô=Ü�$˜•(¤§¡Õ,Ü�J‰J×ÑÔØ—=—=�=Ü—’˜×/Ñ/Ô0Ü�HŠH�R�LŠLûð	ûô ô 9Ø—‘× Ñ Ð!DÜ!*×!5Ò!5Ó!7÷9ð9ûð	 �H‰H�M‰MÐ4°f·j±jÔAð9Ø—
‘
× Ñ Ô"Ø—‘×$Ñ$ TÕ2øÜô 9Ø—‘× Ñ Ð!DÜ!*×!5Ò!5Ó!7ö9ð9ýs�   Å CI8 É5O É8OÊOÊA=LÌP ÌOÌOÌB#OÏP ÏOÏP Ï:PÐPÐ'R.Ð85Q.Ñ-R.Ñ.:R+Ò(R.Ò*R+Ò+R.c                óò   € \        V P                  \        V P                  4      ,
          4       FC  pV P	                  4        \
        P                  ! R\        P                  ! 4       ,          4       KE  	  R# )ziSpawn new workers as needed.

This is where a worker process leaves the main loop
of the master process.
r  N)rˆ   ri   r%  r  r2  r~   r  Úrandom)r:   r   s   & r   rh  ÚArbiter.spawn_workers  sJ   € ô �t×'Ñ'¬#¨d¯l©lÓ*;Õ;Ö<ˆAØ×ÑÔÜ�JŠJ�sœVŸ]š]›_Õ,Ö-ó =r>   c                ó€   € \        V P                  P                  4       4      pV F  pV P                  W14       K  	  R# )zFKill all workers with the signal `sig`
:attr sig: `signal.SIG*` value
N)r<  r  ÚkeysrC  )r:   rª   Úworker_pidsr‚   s   &&  r   rë   ÚArbiter.kill_workers  s3   € ô
 ˜4Ÿ<™<×,Ñ,Ó.Ó/ˆÛˆCØ×Ñ˜SÖ&ó r>   c                ó  €  \         P                  ! W4       V\        P                  \        P                  39   d"   V P
                  R;;,          ^,          uu&   R# R#   \         d™   pTP                  \        P                  8X  dt    T P                  P                  T4      pTP                  P                  4        T P                  P                  Y4        Rp?R#   \        \        3 d	      Rp?R# i ; ih Rp?ii ; i)zJKill a worker

:attr pid: int, worker pid
:attr sig: `signal.SIG*` value
 r   N)r!   Úkillr   rõ   r  r3   r?  rS  ÚESRCHr  rŠ   r=  r0  rE   ru  r/  )r:   r‚   rª   r[  rE  s   &&&  r   rC  ÚArbiter.kill_worker   sº   € ð	Ü�GŠG�CÔà”v—~‘~¤v§~¡~Ð6Ô6Ø—‘Ð,×-°Õ2Õ-ñ 7øäô 		Ø�w‰wœ%Ÿ+™+Ô%ðØ!Ÿ\™\×-Ñ-¨cÓ2�FØ—J‘J×$Ñ$Ô&Ø—H‘H×(Ñ(¨Ô6ÝøÜ ¤'Ð*ô Þðúàûð		ús7   ‚AA  Á DÁ+C>ÂAC!Ã!C:Ã2C>Ã9C:Ã:C>Ã>Dc                óÆ   € ^ RI pV P                  P                  RR4      P                  RR4      p\        P                  P                  VP                  4       RV R24      # )a	  Get the well-known PID file path for orphan detection.

Uses self.proc_name (not self.cfg.proc_name) so that during USR2
the new master gets a different PID file path ("myapp.2" vs "myapp").
This prevents the old dirty arbiter from removing the new one's PID file.
NÚ/r   Ú zgunicorn-dirty-z.pid)Útempfilerk   Úreplacer!   Úpathrm   Ú
gettempdir)r:   r‡  Ú	safe_names   &  r   Ú_get_dirty_pidfile_pathÚArbiter._get_dirty_pidfile_path;  sQ   € ó 	Ø—N‘N×*Ñ*¨3°Ó4×<Ñ<¸SÀ#ÓFˆ	Ü�w‰w�|‰|˜H×/Ñ/Ó1°_ÀYÀKÈtÐ3TÓUÐUr>   c                ót  € V P                   ^ 8w  d   R# V P                  4       p\        P                  P	                  V4      '       g   R#  \        V4      ;_uu_ 4       p\        VP                  4       P                  4       4      pRRR4       \        P                  ! X^ 4       V P                  P                  RV4       \        P                  ! V\        P                  4       \        ^
4       F1  p\        P                   ! R4        \        P                  ! V^ 4       K3  	  \        P                  ! V\        P$                  4         \        P*                  ! V4       R#   + '       g   i     Lç; i  \"         d      K;  i ; i  \&        \(        \"        3 d     LWi ; i  \"         d     R# i ; i)zuKill any orphaned dirty arbiter from a previous crash.

Only runs on fresh start (master_pid == 0), not during USR2.
Nz(Killing orphaned dirty arbiter (pid: %s)r  )r-   rŒ  r!   r‰  ÚexistsÚopenr   ÚreadÚstripr�  r%   r   r   rõ   rˆ   r~   r  r?  r  r@  ÚIOErrorrÃ   )r:   r*   ÚfÚold_pidr   s   &    r   Ú_cleanup_orphaned_dirty_arbiterÚ'Arbiter._cleanup_orphaned_dirty_arbiterF  s3  € ð �?‰?˜aÔÙà×.Ñ.Ó0ˆÜ�w‰w�~‰~˜g×&Ò&Ùð	Ü�g—” !Ü˜aŸf™f›hŸn™nÓ.Ó/�÷ ô �GŠG�G˜QÔà�H‰H×ÑÐGÈÔQÜ�GŠG�GœVŸ^™^Ô,ä˜2–Y�Ü—
’
˜3”ðÜ—G’G˜G QÖ'ñ ô —’˜¤§¡Õ0ð
	Ü�IŠI�gÖ÷- —ûô ô Ûðûô œG¤WÐ-ô 	Ùð	ûô ô 	Úð	úsa   ÁF Á(E&ÂBF ÄE9Ä#)F ÅF( Å&E6	Å1F Å9F	ÆF ÆF	Æ	F ÆF%Æ$F%Æ(F7Æ6F7c                óÄ  € ^ RI HpHp V P                  '       d   R# V P	                  4        V P                  4       V n        V! V P                  V P                  V P                  R7      V n	        V P                  P                  p\        P                  ! 4       pV^ 8w  d@   W@n        V! V4       V\        P                  R&   V P                  P                  RWC4       V#  V P                  P                  4        \         P"                  ! ^ 4       R#   \$         d    h \&         d6    T P                  P)                  R4       \         P"                  ! R4        R# i ; i)z~Spawn the dirty arbiter process.

The dirty arbiter manages a separate pool of workers for
long-running, blocking operations.
)ÚDirtyArbiterÚset_dirty_socket_pathN)r*   ÚGUNICORN_DIRTY_SOCKETz%Spawned dirty arbiter (pid: %s) at %sz"Exception in dirty arbiter processrµ   )Úgunicorn.dirtyr™  rš  r/   r–  rŒ  r1   rE   r%   r0   Úsocket_pathr!   r!  r"   r}   rÉ   r5   rÄ   rÁ   r^   rs  )r:   r™  rš  r�  r‚   s   &    r   r–   ÚArbiter.spawn_dirty_arbitern  s  € ÷ 	Gà×!×!Ð!Ùð 	×,Ñ,Ô.ð "×9Ñ9Ó;ˆÔá)Ø�H‰H�d—h‘hØ×&Ñ&ô
ˆÔð ×(Ñ(×4Ñ4ˆä�gŠg‹iˆØ�!Œ8à%(Ô"á! +Ô.Ø2=ŒB�J‰JÐ.Ñ/Ø�H‰H�M‰MÐAØô,àˆJð	Ø×Ñ×"Ñ"Ô$Ü�HŠH�QŽKøÜô 	ØÜô 	Ø�H‰H×ÑÐCÔDÜ�HŠH�R�Lð	ús   Ã"0D ÄEÄ)2EÅEc                ó
  € V P                   '       g   R#  \        P                  ! V P                   V4       R#   \         d?   pTP                  \        P
                  8X  d   ^ T n         RT n         Rp?R#  Rp?R# Rp?ii ; i)zDSend a signal to the dirty arbiter.

:attr sig: `signal.SIG*` value
N)r/   r!   r�  r?  rS  r‚  r0   )r:   rª   r[  s   && r   rÔ   ÚArbiter.kill_dirty_arbiterœ  sd   € ð ×%×%Ð%Ùð	*Ü�GŠG�D×*Ñ*¨CÖ0øÜô 	*Ø�w‰wœ%Ÿ+™+Ô%Ø)*�Ô&Ø%)�×"Ò"õ &ûð	*ús   –!9 ¹BÁ-A=Á=Bc                ó¤  € \         P                  ! V4      '       dX   \         P                  ! V4      pV^ 8w  d   V P                  P	                  RW4       MkV P                  P                  RV4       MN\         P                  ! V4      '       d3   \         P                  ! V4      pV P                  P                  RW4       ^ V n	        RV n
        R# )z¼Report the dirty arbiter exit status and forget the process.

Called from both reaping paths: the targeted waitpid below, and
reap_workers() when its waitpid(-1) claims the process first.
z*Dirty arbiter (pid:%s) exited with code %szDirty arbiter (pid:%s) exitedz*Dirty arbiter (pid:%s) killed by signal %sN)r!   rK  rL  r%   rd   r}   rM  rN  r   r/   r0   )r:   rU  rV  rW  rª   s   &&&  r   rJ  Ú!Arbiter.handle_dirty_arbiter_exit¬  sš   € ô �<Š<˜×ÒÜ—~’~ fÓ-ˆHØ˜1Œ}Ø—‘—‘ÐKØ#õ/ð —‘—‘Ð=¸tÕDÜ�^Š^˜F×#Ò#Ü—+’+˜fÓ%ˆCØ�H‰H×ÑÐIØ!ô(ð "#ˆÔØ!ˆÖr>   c                ó`  € V P                   '       g   R#  \        P                  ! V P                   \        P                  4      w  rV'       g   R# V P	                  W4       R#   \
         d?   pTP                  \        P                  8X  d   ^ T n         RT n         Rp?R#  Rp?R# Rp?ii ; i)z9Reap the dirty arbiter process if it has exited.
        N)	r/   r!   rH  rI  rJ  r?  rS  rT  r0   )r:   rU  rV  r[  s   &   r   rÎ   ÚArbiter.reap_dirty_arbiterÂ  s€   € ð ×%×%Ð%Ùð		*ÜŸ:š: d×&<Ñ&<¼b¿j¹jÓI‰LˆDßÙà×*Ñ*¨4Ö8øÜô 	*Ø�w‰wœ%Ÿ,™,Ô&Ø)*�Ô&Ø%)�×"Ò"õ 'ûð	*ús   –9A$ ÁA$ Á$B-Á/-B(Â(B-c                óú   € V P                   '       d   R# V P                  P                  ^ 8”  dL   V P                  P                  '       d.   V P                  P                  R4       V P                  4        R# R# R# )zDMaintain the dirty arbiter process by respawning if needed.
        NzSpawning dirty arbiter...)r/   rE   r”   r•   r%   r}   r–   rA   s   &r   r½   ÚArbiter.manage_dirty_arbiterÔ  sY   € ð ×!×!Ð!Ùà�8‰8×!Ñ! AÔ%¨$¯(©(×*=×*=Ð*=Ø�H‰H�M‰MÐ5Ô6Ø×$Ñ$Ö&ñ +>Ñ%r>   c                óâ   € V P                   P                  p\        P                  P	                  V4      '       g4   \        P                  P                  \        P                  ! 4       V4      pV# )z<Get the control socket path, making relative paths absolute.)rE   Úcontrol_socketr!   r‰  Úisabsrm   r   r4   )r:   r�  s   & r   Ú_get_control_socket_pathÚ Arbiter._get_control_socket_pathã  sD   € à—h‘h×-Ñ-ˆÜ�w‰w�}‰}˜[×)Ò)ÜŸ'™'Ÿ,™,¤t§{¢{£}°kÓBˆKØÐr>   c                óš  € V P                   P                  '       d   V P                  P                  R4       R# ^ RIHp V P                  4       pV P                   P                  p V! WV4      V n        V P                  P                  4        R#   \         d/   pT P                  P                  RT4       RT n         Rp?R# Rp?ii ; i)zoStart the control socket server.

The server runs in a background thread and accepts commands
via Unix socket.
zControl socket disabledN)ÚControlSocketServerz"Failed to start control socket: %s)rE   Úcontrol_socket_disabler%   rl   Úgunicorn.ctl.serverr­  rª  Úcontrol_socket_moder2   r�   r^   r   )r:   r­  r�  Úsocket_moder[  s   &    r   r¸   ÚArbiter._start_control_serverê  s¥   € ð �8‰8×*×*Ð*Ø�H‰H�N‰NÐ4Ô5Ùõ 	<à×3Ñ3Ó5ˆØ—h‘h×2Ñ2ˆð	(Ù#6Ø ;ó$ˆDÔ ð × Ñ ×&Ñ&Ö(øÜô 	(Ø�H‰H×ÑÐAÀ1ÔEØ#'ˆD× Ò ûð	(ús   Á'(B ÂC
Â#CÃC
c                óÚ   € V P                   '       d%    V P                   P                  4        RV n         R# R#   \         d'   pT P                  P	                  RT4        Rp?L7Rp?ii ; i)z(Stop the control socket server.
        z!Error stopping control server: %sN)r2   rÂ   r^   r%   rl   )r:   r[  s   & r   r  ÚArbiter._stop_control_server  sa   € ð ××ÐðGØ×$Ñ$×)Ñ)Ô+ð $(ˆDÖ ñ  øô ô GØ—‘—‘ÐBÀA×FÑFûðGús   ”9 ¹A*ÁA%Á%A*)r†   r(   r9   r2   r$   r#   r3   rg   r;   rE   r0   r/   r1   r%   r.   r-   ri   r‚   r*   rk   r,   r   rj   r+   rf   )Nr   )r°   )T)BÚ__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rP  rQ  r9   r†   r  r   ÚNSIGrý   r‹   r   r¡   ÚdictÚdirr»   r<   rB   rI   Úpropertyri   r)   r�   r…   rÉ   r£   rÐ   Ú
handle_cldrÖ   rÙ   rÝ   rá   rå   rè   rí   rñ   rö   r¹   rþ   rÀ   rº   rÂ   rð   rÓ   r¼   rÏ   r·   r2  rh  rë   rC  rŒ  r–  r–   rÔ   rJ  rÎ   r½   rª  r¸   r  Ú__static_attributes__Ú__classdictcell__)ÚxÚ__classdict__s   0@r   r   r      sŽ  ø‡ € ñð Ðð €Nà€Ià€IØ€Gð —[‘[€Nð F×KÑKÔMóOÙM�1ô ”v˜w¨�{Ö+ÙMñO€Gáñ Ù>AÀ&¼kóó €Iò
-
ò^!ò:ñ Ð+Ð-=Ó>€Kò7òr:"òx
8ò'ò.ò`'òð €Jò3òòò
ò
òò	4òò?ò?ò"7ôô"ô24"òl GòDGòR6ò*DòL=ò@29òh
.ò'òò6	Vò&òP,ò\*ò "ò,*ò$	'òò(÷4	(ð 	(ùòmOs   ´ Dr   )rS  r!   r&   rz  r   r5   r~   ra   r�   Úgunicorn.errorsr   r   Úgunicorn.pidfiler   Úgunicornr   r   r   r	   r
   r   rW   r>   r   Ú<module>rÆ     s=   ðó Û 	Û Û Û Û 
Û Û Û ç 6Ý $ß (Ñ (ç 1÷
v(ó v(r>   