
    <hOQ                       S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKJr  SSKJrJr  SSKJr  \R*                  (       a5  SSKJr  SS	KJrJr  SS
KJr  \R:                  \S\4   r\R@                  \   r!S+S jr"S+S jr#S\RH                  ;   r%S\RH                  ;   r& " S S\RN                  5      r(\ " S S5      5       r)\)" 5       r*\*RV                  r+\*RX                  r,\*RZ                  r-\*R\                  r.\*R^                  r/\*R`                  r0\*Rb                  r1\*Rd                  r2\*Rf                  r3\*Rh                  r4\*Rj                  r5\*Rl                  r6\*Rn                  r7\*Rp                  r8\*Rr                  r9\*Rt                  r:\*Rv                  r;\*Rx                  r<\*Rz                  r=\*R|                  r>\*R~                  r?\*R                  r@\*R                  rA\*R                  rB\*R                  rC\*R                  rD\*R                  rE " S S5      rF " S S5      rGS,S-S jjrHS,S-S jjrIS.S jrJS.S jrKS.S jrLS.S jrMS.S jrNS.S jrOS.S jrPS.S  jrQS.S! jrRS.S" jrSS.S# jrTS/S$ jrUS0S% jrVS1S& jrWS2S' jrX\R                  S3S4S( jj5       rZ\R                  S,S5S) jj5       rZS,S6S* jjrZg)7zThis is (mostly) a standalone module used to write logging
information about Meson runs. Some output goes to screen,
some to logging dir and some goes to both.    )annotationsN)contextmanager)	dataclassfield)Path)Literal   )StringProtocolSizedStringProtocol)BaseNodeAnsiDecoratorc                 R    [         R                  " 5       R                  5       n U S:H  $ )Nwindows)platformsystemlower)platnames    p/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/mlog.py
is_windowsr   !   s"     &&(Hy      c                 :   SSK Jn Jn  SSKJn  U R
                  nUR                  S5      nU" 5       nUR                  XA" U5      5      (       d  g[        UR                  XER                  S-  5      =(       d    [        R                  R                  S5      5      $ )Nr   )windllbyref)DWORDiF   ANSICON)ctypesr   r   ctypes.wintypesr   kernel32GetStdHandleGetConsoleModeboolSetConsoleModevalueosenvironget)r   r   r   kernelstdoutmodes         r   _windows_ansir+   %   sv    $%__F  %F7D  t55 %%fjj3.>?\2::>>R[C\]]r   CIGITHUB_ACTIONSc                      \ rS rSr\R
                  " 5       r\R
                  " 5       r\R
                  " 5       r\R
                  " 5       r	Sr
g)	_Severity8    N)__name__
__module____qualname____firstlineno__enumautoNOTICEWARNINGERRORDEPRECATION__static_attributes__r1   r   r   r/   r/   8   s.    YY[FiikGIIKE))+Kr   r/   c                  p   \ rS rSr% SrS\S'   \" \S9rS\S'   Sr	S	\S
'   Sr
S\S'   SrS\S'   SrSrSr\" \S9rS\S'   SrSrS\S'   SrS\S'   \S?S j5       r\S?S j5       rS@S jrS@S jrSAS jrSBS jrS@S jrS@S jrSCSDS jjrSESFS! jjrSSS".   SGS# jjrSSS S$.     SHS% jjr SS SSS S&.         SIS' jjr!SJS( jr"SKS) jr#SSS SSS S*.           SLS+ jjr$SMS, jr%SNS- jr&SS SS SSS S..               SOS/ jjr'SS SS SSS0.             SPS1 jjr(SS SS SSS0.             SPS2 jjr)SS SS SSS0.             SPS3 jjr*SS SS SSS0.             SPS4 jjr+SQSRS5 jjr,\SSSTS6 jj5       r-SUS7 jr.SVS8 jr/\S?S9 j5       r0SVS: jr1SWS; jr2SXS< jr3S@S= jr4S>r5g)Y_Logger?   NT.Optional[str]log_dir)default_factoryT.List[str]	log_depthFr"   log_to_stderrzT.Optional[T.TextIO]log_filezT.Optional[float]log_timestamp_startzT.Set[T.Tuple[str, ...]]logged_oncer   zT.Optional['subprocess.Popen']	log_pagerzmeson-log.txtzT.ClassVar[str]
_LOG_FNAMEc              #  J   #    SU l          S v   SU l         g ! SU l         f = f7f)NTFlog_disable_stdoutselfs    r   
no_logging_Logger.no_loggingP   s%     "&	,&+D#eD#s   # #	 #c              #  ^   #    U R                   nSU l          S v   Xl         g ! Xl         f = f7fNFrL   )rO   restores     r   force_logging_Logger.force_loggingX   s,     ))"'	.&-#g#   -" -*-c                    SU l         g )NTlog_errors_onlyrN   s    r   	set_quiet_Logger.set_quieta   s
    #r   c                    SU l         g rS   rY   rN   s    r   set_verbose_Logger.set_verbosed   s
    $r   c                    Xl         g N)rG   )rO   starts     r   set_timestamp_start_Logger.set_timestamp_startg   s    #( r   c                    U R                   b;  U R                   R                  nU R                   nS U l         UR                  5         U$ U R                  5         g ra   )rF   nameclose
stop_pager)rO   pathexception_around_goers      r   shutdown_Logger.shutdownj   sJ    ==$==%%D$(MM! DM!'')Kr   c                $   U R                  5       (       d  g / nS[        R                  ;   a(  [        R                  " [        R                  S   5      nO[
        R                  " S5      nU(       dh  [        5       (       aY  [
        R                  " S5      nU(       a<  [        U5      R                  S   S-  S-  n[
        R                  " S[        U5      S9nU(       a  U/nU(       d  g  [        R                  R                  5       nSU;  a  S	US'   S
U;  a  SUS
'   [        R                  " U[        R                  SSUS9U l        g ! [          a8  nS[        R                  ;   a  SSKJn  U" S[        U5       35      e S nAg S nAff = f)NPAGERlessgitr	   usrbin)ri   LESSRXFLVz-cTutf-8)stdintextencodingenv)MesonExceptionzFailed to start pager: )colorize_consoler%   r&   shlexsplitshutilwhichr   r   parentsstrcopy
subprocessPopenPIPErI   	Exceptionmesonlibr{   )rO   	pager_cmdro   rp   ri   rz   er{   s           r   start_pager_Logger.start_pagert   s>   $$&&	bjj BJJw$78I<<'DJLLll5)9,,Q/%7%?D!<<SY?D!F		I **//#CS #F3 D	'--iz37'sTDN 	I"**$4$'>s1vh%GHH %	Is   -AE 
F.F

Fc                   U R                   (       ak   U R                   R                  R                  5         U R                   R                  R                  5         U R                   R                  5         S U l         g g ! [         a     N/f = fra   )rI   rw   flushrg   OSErrorwaitrN   s    r   rh   _Logger.stop_pager   sl    >>$$**,$$**, NN!!DN   s   AA> >
B
Bc                    Xl         [        [        R                  R	                  XR
                  5      SSS9U l        X l        g )Nwrv   ry   )rA   openr%   ri   joinrJ   rF   log_fatal_warnings)rO   logdirfatal_warningss      r   
initialize_Logger.initialize   s/    RWW\\&//BCRYZ"0r   Tc                   / nU R                   b9  U(       a2  SR                  [        R                  " 5       U R                   -
  5      /nU H  nUc  M  [	        U[
        5      (       a  UR                  U5        M0  [	        U[        5      (       a"  UR                  UR                  U5      5        Mg  UR                  [        U5      5        M     U$ )Nz[{:.3f}])	rG   formattime	monotonic
isinstancer   appendr   get_text)rO   argskeepdisplay_timestamparrargs         r   process_markup_Logger.process_markup   s    ##/4E$$T^^%58P8P%PQRCC{#s##

3C//

3<<-.

3s8$  
r   )sependc                  U R                   (       a  g [        R                  " 5       n[        XBX5S.6  UR	                  5       nU R
                  (       ar  U(       a  U R
                  S   S-   OSn/ nUR                  S5       H/  n	U	R                  5       n	UR                  U	(       a  Xy-   OS5        M1     SR                  U5      nU R                  (       a  U R                  R                  n
O2U R                  (       a  [        R                  n
O[        R                  n
 [        USU
S9  g ! [          a/    UR#                  SS5      R%                  S5      n[        USU
S9   g f = f)	N)r   r   filez|  
)r   r   asciireplace)rM   ioStringIOprintgetvaluerD   r~   stripr   r   rI   rw   rE   sysstderrr)   UnicodeEncodeErrorencodedecode)rO   nestedr   r   r   iostrrawprependlinesloutputcleaneds               r   force_print_Logger.force_print   s   ""t#2nn>>39dnnR(4/rGEYYt_GGIAW[26 % ))E"C >>^^))FZZFZZF	0#2F+! 	0jj)4;;GDG'r/	0s   !D- -6E&%E&)r   r   r   c                   [        USU5      nU R                  b0  [        XPR                  XS.6  U R                  R                  5         g g )NFr   r   r   )r   rF   r   r   )rO   r   r   r   r   r   s         r   debug_Logger.debug   s>    T5*;<==$3]]=MM! %r   is_errorr   r   r   r   c               "   [        USU5      nU R                  b/  [        XpR                  X4S.6  U R                  R                  5         U R	                  5       (       a  [        USU5      nU R
                  (       a  U(       a  [        XrX4S.6  g g )NFr   T)r   r   r   )r   rF   r   r   r|   rZ   r   )rO   r   r   r   r   r   r   r   s           r   _log_Logger._log   ss     T5*;<==$3]]=MM!  "" t->?C##x> (0r   c                    [         (       d  g U Vs/ s H	  nSU S3PM     nnU R                  SR                  USR                  U5      5      5        g s  snf )N"z!meson_ci!/{} {} )_in_cir   r   r   )rO   cmdr   xs       r   _debug_log_cmd_Logger._debug_log_cmd   sM    v"&'$Q!A3a$'

%,,S#((4.AB (s   Ac                *    U R                  SU/5        g )N
ci_include)r   )rO   r   s     r   cmd_ci_include_Logger.cmd_ci_include   s    L4&1r   )r   oncer   r   r   r   c          	     Z    U R                   " USU06(       a  U R                  " XqX4XVS.6  g g )Nr   r   )_should_logr   )rO   r   r   r   r   r   r   r   s           r   log_Logger.log   s,    
 T--IItvCu .r   c                F    U R                   (       a  U R                  " U6   g g ra   )rG   r   rO   r   s     r   log_timestamp_Logger.log_timestamp   s    ##HHdO $r   c                  ^ SS jmU(       d  g[        U4S jU 5       5      nX0R                  ;   a  gU R                  R                  U5        g)Nc                    [        U [        5      (       a  U $ [        U [        5      (       a  U R                  $ [        U 5      $ ra   )r   r   r   rx   )r   s    r   to_str#_Logger._should_log.<locals>.to_str   s3    !S!!!]++vvq6Mr   Tc              3  4   >#    U  H  nT" U5      v   M     g 7fra   r1   ).0ar   s     r   	<genexpr>&_Logger._should_log.<locals>.<genexpr>  s     *T&))Ts   F)r   TV_Loggablereturnr   )tuplerH   add)rO   r   r   tr   s       @r   r   _Logger._should_log   sF    	 *T**   Qr   r   fatallocationr   r   r   r   c                  SSK Jn
Jn  U[        R                  L a  [        S5      /nO_U[        R                  L a  [        S5      /nO?U[        R                  L a  [        S5      /nOU[        R                  L a  [        S5      /nW[        U	5      -   nU R                  " USU06(       d  g UbX  U" UR                  [        R                  " 5       5      n[!        XR"                  5      n[$        R&                  " SU/5      nUU-   nU R(                  " XXgUS	.6  U =R*                  S-  sl        U R,                  (       a  U(       a  U
" S
5      eg g )Nr	   )r{   relpathzNOTICE:zWARNING:ERROR:zDEPRECATION:r   TV_LoggableList)r   r   r   r   z Fatal warnings enabled, aborting)r   r{   r   r/   r8   boldr9   yellowr:   redr;   listr   filenamer%   getcwdget_error_location_stringlinenoTcastr   log_warnings_counterr   )rO   severityr   r   r   r   r   r   r   rargsr{   r   labelr   location_filelocation_strlocation_lists                    r   
_log_error_Logger._log_error  s    	6 y'''&*9o%6E***J'(E(]OE...()EtE{"1D1#H$5$5ryy{CM4]OOTL FF#4|nEM 4'D		4C8L!!Q&!""u !CDD (-"r   )r   r   r   r   r   r   c               R    U R                   " [        R                  /UQ7XUXEUSS.6$ NTr   )r  r/   r:   rO   r   r   r   r   r   r   r   s           r   error_Logger.error3  s7    
 y O ODX`&,3O 	Or   c               R    U R                   " [        R                  /UQ7XUXEUSS.6$ r  )r  r/   r9   r  s           r   warning_Logger.warning;  s9    
 y00 O4 OdZb&,3O 	Or   c               R    U R                   " [        R                  /UQ7XUXEUSS.6$ r  )r  r/   r;   r  s           r   deprecation_Logger.deprecationC  s9    
 y44 Ot O$^f&,3O 	Or   c               R    U R                   " [        R                  /UQ7XUXEUSS.6$ )NFr   )r  r/   r8   r  s           r   notice_Logger.noticeK  s9    
 y// P$ PTYa&,3P 	Pr   c                (  ^ Uc  [        S5      nU R                  5         / n[        U4S jS 5       5      (       ai  [        [	        TR
                  5      [	        [        R                  " 5       5      5      nUR                  U STR                   STR                   S35        U(       a  UR                  U5        UR                  [        T5      5        U R                  5          U R                  " USS06  S S S 5        g ! , (       d  f       g = f)Nr   c              3  B   >#    U  H  n[        TUS 5      S Lv   M     g 7fra   )getattr)r   r   r   s     r   r   $_Logger.exception.<locals>.<genexpr>X  s!     T8S1wq!T"$.8Ss   )r   r  colno:r   T)r   r   allget_relative_pathr   r   r%   r   r   r  r   r   rU   )rO   r   prefixr   ri   s    `   r   	exception_Logger.exceptionS  s    >]F
46T8STTT %T!&&\4		3DEDKK4&!((1QWWIQ78KKCF!HHd*T* "!!s   'D
Dc              #     #    U R                   R                  U5         S v   U R                   R                  5         g ! U R                   R                  5         f = f7fra   )rD   r   pop)rO   rf   s     r   r   _Logger.nestedd  s?     d#	!NN DNN s   A> AAAc                    U R                   $ ra   )rA   rN   s    r   get_log_dir_Logger.get_log_dirl  s    ||r   c                ,    [        U R                  5      $ ra   )lenrD   rN   s    r   get_log_depth_Logger.get_log_deptho  s    4>>""r   c              #  ^   #    U R                   nSU l          S v   Xl         g ! Xl         f = f7f)Nr   r  )rO   olds     r   nested_warnings_Logger.nested_warningsr  s,     ''$%!	,(+%%rW   c                    U R                   $ ra   r2  rN   s    r   get_warning_count_Logger.get_warning_count{  s    (((r   c                    Xl         g ra   )rE   )rO   	to_stderrs     r   redirect_Logger.redirect~  s    &r   c                   U R                   (       a  [        R                  O[        R                  n[	        USS 5      nUb  U$  [        5       (       a6  [        R                  " UR                  5       5      =(       a
    [        5       nOO[        R                  " UR                  5       5      =(       a#    [        R                  R                  SS5      S:g  n X!l        U$ ! [         a    Sn Nf = f)Nr|   TERMdumbF)rE   r   r   r)   r  r   r%   isattyfilenor+   r&   r'   r   r|   )rO   r   _colorize_consoles      r   r|   _Logger.colorize_console  s    #11szz")&2Dd"K($$	&||$&IIfmmo$>$R=?!$&IIfmmo$>$k2::>>RXZ`CaekCk! #4    	& %	&s   AC! 
AC! !C0/C0c                    U R                   (       a  [        R                  O[        R                  n[	        5       (       a   [        US5        g g ! [         a     g f = f)Nr|   )rE   r   r   r)   r   delattrAttributeError)rO   r   s     r   setup_console_Logger.setup_console  sK      $11szz<< 23  " s   A 
AA)	rA   rM   rZ   r   rF   rI   rG   rE   r  )r   zT.Iterator[None])r   None)rb   floatr   rI  )r   r@   F)r   r   r   r"   r   rI  T)r   zT.Sequence[TV_Loggable]r   r"   r   r"   r   rC   )
r   r   r   r"   r   r@   r   r@   r   rI  )
r   r   r   r@   r   r@   r   r"   r   rI  )r   r   r   r"   r   r"   r   r@   r   r@   r   r"   r   rI  )r   r   r   rC   r   rI  )r   r   r   rI  )r   r   r   r"   r   r"   r   r"   r   r@   r   r@   r   r"   r   rI  )r   r   r   rI  )r   r   r   r"   r   r"   )r  r/   r  r   r   r"   r   r"   r   T.Optional[BaseNode]r   r"   r   r@   r   r@   r   r"   r   rI  )r   r   r   r"   r   r"   r   rM  r   r"   r   r@   r   r@   r   rI  ra   )r   r   r$  zT.Optional[AnsiDecorator]r   rI  )r   )rf   r   r   zT.Generator[None, None, None]r   r   r   int)r:  r"   r   rI  r   r"   )6r2   r3   r4   r5   rA   __annotations__r   r   rD   rE   rF   rG   r   rM   rZ   setrH   r  rI   rJ   r   rP   rU   r[   r^   rc   rk   r   rh   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r%  r   r+  r/  r4  r7  r;  r|   rG  r<   r1   r   r   r>   r>   ?   s     $G_#"48I{8M4%)H")-1*1O,1#,FK)F04I-4"1J1, , . .$%)$IL"1
 LP+/0(0480: @D%)T""">B"NR" 9> $(D
?
?'6
?!
?=A
?MQ
?C2 8=t#'#'&*	vv(,v v !v  $	v 04	v  !&T48"&t*.$(%E%E.2%E1%E  %E .=%E (	%E
 "%E
 .2%EP !/3!$%)	OO)-O,O O )8O #	O /3	O #$15#D'+	OO+/O.O O +:O %	O 15	O "'d59#'+/	OO/3O2O !O />O )	O 59	O "04"4&*	PP*.P-P P *9P $	P 04	P+" ! !# , ,)'!	r   r>   c                  D    \ rS rSrSrS	S
S jjrSS jrSS jrSS jrSr	g)r   i  z[0mc                (    Xl         X l        X0l        g ra   )rx   codequoted)rO   rx   rV  rW  s       r   __init__AnsiDecorator.__init__  s    		r   c                    U R                   nU(       a;  U R                  (       a*  U R                  U R                   -   [        R                  -   nU R                  (       a  SU S3nU$ )Nr   )rx   rV  r   
plain_coderW  )rO   
with_codesrx   s      r   r   AnsiDecorator.get_text  sJ    yy$))99tyy(=+C+CCD;;tfA;Dr   c                ,    [        U R                  5      $ ra   )r.  rx   rN   s    r   __len__AnsiDecorator.__len__  s    499~r   c                4    U R                  [        5       5      $ ra   )r   r|   rN   s    r   __str__AnsiDecorator.__str__  s    }}-/00r   )rV  rW  rx   NrK  )rx   r   rV  r   rW  r"   )r\  r"   r   r   rO  rN  )
r2   r3   r4   r5   r[  rX  r   r_  rb  r<   r1   r   r   r   r     s    J
1r   c                  2    \ rS rSrSS jrSS jrS	S jrSrg)
AnsiTexti  c                    Xl         g ra   r   r   s     r   rX  AnsiText.__init__  s    	r   c                :    [        S U R                   5       5      $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7fra   )r.  r   r   s     r   r   #AnsiText.__len__.<locals>.<genexpr>  s     -9a3q669   )sumr   rN   s    r   r_  AnsiText.__len__  s    -499---r   c                F    SR                  S U R                   5       5      $ )Nr   c              3  8   #    U  H  n[        U5      v   M     g 7fra   )r   rk  s     r   r   #AnsiText.__str__.<locals>.<genexpr>  s     1y!s1vvyrm  )r   r   rN   s    r   rb  AnsiText.__str__  s    ww1tyy111r   rg  N)r   z'SizedStringProtocol'rO  rN  )r2   r3   r4   r5   rX  r_  rb  r<   r1   r   r   re  re    s    .2r   re  c                    [        U SUS9$ )Nz[1mrW  r   rx   rW  s     r   r   r         y88r   c                    [        U SUS9$ )Nz[3mru  rv  rw  s     r   italicrz    rx  r   c                    [        U S5      $ )Nr   rv  rx   s    r   plainr}    s    r""r   c                    [        U S5      $ )Nz[1;31mrv  r|  s    r   r   r         |,,r   c                    [        U S5      $ )Nz[1;32mrv  r|  s    r   greenr    r  r   c                    [        U S5      $ )Nz[1;33mrv  r|  s    r   r   r     r  r   c                    [        U S5      $ )Nz[1;34mrv  r|  s    r   bluer    r  r   c                    [        U S5      $ )Nz[1;36mrv  r|  s    r   cyanr    r  r   c                    [        U S5      $ )Nz[31mrv  r|  s    r   
normal_redr        z**r   c                    [        U S5      $ )Nz[32mrv  r|  s    r   normal_greenr    r  r   c                    [        U S5      $ )Nz[33mrv  r|  s    r   normal_yellowr    r  r   c                    [        U S5      $ )Nz[34mrv  r|  s    r   normal_bluer    r  r   c                    [        U S5      $ )Nz[36mrv  r|  s    r   normal_cyanr    r  r   c                    U  SU S3$ )Nr!  r1   )fnamer  s     r   r  r     s    WAfXQr   c                    S/nU/UR                   Q H"  n U R                  U5      n[        / UQUP76 s  $    U $ ! [         a     Of = fUS/-  nM@  )z#Get the path to target from current.z..)r   relative_tor   
ValueError)targetcurrentaccpartri   s        r   r#  r#    so     %C+7??+	%%d+D##d## , M  		vs   ;
AAc                    [        U 5      nUS:  a(  SR                  SR                  U S S 5      U S   /5      $ US:X  a  SR                  U 5      $ US:X  a  U S   $ g)N   z and z, r   r	   r   r   )r.  r   )
input_listr   s     r   format_listr    sc    JA1u||TYYz#27BHII	
a||J''	
a!}r   c                    U  SU SSU-   S3$ )zPrint a line with a caret pointing to the colno

:param text: A message to display before the line
:param line: The line of code to be pointed to
:param colno: The column number to point at
:return: A formatted string of the text, line, and a caret
r   r   ^r1   )rx   liner   s      r   	code_liner     s!     V2dV2cEk]!,,r   c                    g ra   r1   r  bannerforces      r   ci_fold_filer  *  s    ehr   c                    g ra   r1   r  s      r   r  r  -  s    svr   c                ^   [         (       d  U(       d  g [        (       a	  SU S3nSnOGU(       a  UnSnO;S[        R                  ;   a&  S[        R                  R                  U 5       S3nSnOg [        U SSS	9 nUR                  5       nS S S 5        U S
W S
U S
3$ ! , (       d  f       N= f)Nz::group::==== z ====z::endgroup::r   MESON_FORCE_SHOW_LOGSz!==== Forcing display of logs for rrv   r   r   )r   _ci_is_githubr%   r&   ri   basenamer   read)r  r  r  headerfooterfdatas          r   r  r  0  s    6%}!&/		 BJJ	.4RWW5E5Ee5L4MUS 	eS7	+qvvx 
,XRvRxr** 
,	+s   :B
B,rQ  rK  )rx   r   rW  r"   r   r   )rx   r   r   r   )r  r
   r  rP  r   r   )r  r   r  r   r   r   )r  rC   r   r   )rx   r   r  r   r   rP  r   r   rL  )r  T.Union[str, os.PathLike]r  r   r  zLiteral[True]r   r   )r  r  r  r   r  zLiteral[False]r   r@   )r  r  r  r   r  r"   r   r@   )[__doc__
__future__r   r6   r%   r   r   r   r   r}   r   r   typingr  
contextlibr   dataclassesr   r   pathlibr   TYPE_CHECKINGtyping_extensionsr   _typingr
   r   mparserr   Unionr   r   Listr   r   r+   r&   r   r  Enumr/   r>   _loggerr   r|   r   r  r  r%  r   r/  r+  r7  r   r   r   r   r4  rP   r  r   r;  r[   rc   r^   rG  rk   r   rh   r  r   re  r   rz  r}  r   r  r   r  r  r  r  r  r  r  r  r#  r  r  overloadr  r1   r   r   <module>r     s|  . #  	 	 
       % ( ??)<!''#>?Kff[)O!^ 
	 BJJ.		  Y Y Yv
 )''++ !!	!!%%!!-- 
kk%%	))
	''	11 !!%%!!

//1 1,2 299#-----+++++ "	-  h  h v  v+r   