
    ܙdp                        d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d d
l+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z<m=Z= d dl>m?Z?m@Z@mAZA  G d de?          ZB eB            ZCdeC_D        g dZE G d d edeE                    ZF edg d          ZGd ZHd ZIdeCi fdZJd,dZK G d deL          ZM G d deN          ZO G d d eP          ZQd! ZR G d" d#eL          ZS G d$ d%eS          ZT G d& d'eL          ZUdeTfd(ZVd)dddeTfd*ZWd+ ZXdS )-    )
namedtupleN)event)	utilserrorstypinginterpreterbytecodepostprocconfigcallconvcpu)ParforDiagnostics)CompilerError)lookup_environment)PassManager)ExtractByteCodeTranslateByteCode	FixupArgsIRProcessingDeadBranchPruneRewriteSemanticConstantsInlineClosureLikesGenericRewritesWithLiftingInlineInlinablesFindLiterallyCallsMakeFunctionToJitFunctionCanonicalizeLoopExitCanonicalizeLoopEntryLiteralUnrollReconstructSSARewriteDynamicRaises!LiteralPropagationSubPipelinePass)NopythonTypeInferenceAnnotateTypesNopythonRewritesPreParforPass
ParforPassDumpParforDiagnosticsIRLegalizationNoPythonBackendInlineOverloadsPreLowerStripPhisNativeLoweringNativeParforLowering"NoPythonSupportedFeatureValidationParforFusionPassParforPreLoweringPass)ObjectModeFrontEndObjectModeBackEnd)TargetConfigOptionConfigStackc                      e Zd Z eedd          Z eedd          Z eedd          Z eedd          Z eedd          Z	 eedd	          Z
 eedd
          Z eedd
          Z eedd
          Z eedd          Z eedd
          Z eedd
          Z eej         ej        d          d          Z eedd
          Z eedd
          Z eedd
          Z eej         ej        d          d
          Z eedd
          Z eej         ej        d          d
          Z eedd          Z eedd          Z eedd          Z eedd          Z dS )FlagsFzEnable loop-lifting)typedefaultdocz!Enable pyobject mode (in general)z(Enable pyobject mode inside lifted loopsTz
Enable SSAz-Force pyobject mode inside the whole functionz&Release GIL inside the native functionTODOz7Force inlining of the function. Overrides _dbg_optnone.zEnable automatic parallel optimization, can be fine-tuned by
taking a dictionary of sub-options instead of a boolean, see parfor.py for
detailpythonneverr   backendzTExtend variable lifetime for debugging. This automatically turns on with debug=True.z\Disable optimization for debug. Equivalent to adding optnone attribute in the LLVM Function.zDMake debug emissions directives-only. Used when generating lineinfo.N)!__name__
__module____qualname__r6   boolenable_loopliftenable_pyobjectenable_pyobject_looplift
enable_ssaforce_pyobjectrelease_gil
no_compile	debuginfoboundscheckforceinlineno_cpython_wrapperno_cfunc_wrapperr   ParallelOptionsauto_parallelnrtno_rewritesstrerror_modelFastMathOptionsfastmathnoaliasInlineOptionsinlinetarget_backenddbg_extend_lifetimesdbg_optnonedbg_directives_only     3lib/python3.11/site-packages/numba/core/compiler.pyr9   r9   *   sC       f!  O
 f/  O
  &v6     
   J
 V;  N
 &4  K
   J
   I
 &  K
 &E  K
    
 v  
 F ##E**
  M &  C
 &  K
 &  K
 v ##E**  H
 f  G
 V!!'**  F V  N "6<   &L  K !&.  ra   r9   T)typing_contexttarget_contextentry_pointtyping_errortype_annotation	signature
objectmodeliftedfndesclibrarycall_helperenvironmentmetadatareload_initreferenced_envsc                   V    e Zd ZdZdZd Zd Zed             Ze	d             Z
d
dZd	S )CompileResultzI
    A structure holding results from the compilation of a function.
    r`   c                    | j                                         }t          | j                  }| j        }dx|_        |_        |                                 }|| j        | j        | j	        | j
        | j        || j        t          |          f	S )zA
        Reduce a CompileResult to picklable components.
        N)rl   serialize_using_object_coderU   rg   rk   typemap	calltypes_find_referenced_environmentsrn   rh   ri   rj   rp   tuple)selflibdatatypeannrk   rq   s        rb   _reducezCompileResult._reduce   s     ,::<<d*++,00)<<>>d&6gt7Go&&( 	(ra   c                     | j         j        }g }|j        D ]X}|j        }|                    d          r:t          |          }|)|                                r|                    |           Y|S )z2Returns a list of referenced environments
        _ZN08NumbaEnv)rl   _final_moduleglobal_variablesname
startswithr   	can_cacheappend)rz   modrq   gvgvnenvs         rb   rx   z+CompileResult._find_referenced_environments   s}     l(& 	4 	4B'C~~o.. 4(--?}} 4'..s333ra   c                 ,   |	r|	D ]} |             |                                                     |          }|                    |||          } | ||j        ||||||||d d d |	|
          }|
D ]"}|j                             |j        |           #|S )N)rd   rc   rl   rn   re   rk   rg   rh   ri   rj   rf   rm   ro   rp   rq   )codegenunserialize_libraryget_executablerc   set_envenv_name)clsrd   r{   rk   r   rh   ri   rj   r|   rp   rq   fnrl   cfunccrs                  rb   _rebuildzCompileResult._rebuild   s      	!   ((**>>wGG--gvsCCS . =  "!($&"!(!0  $ # 	7 	7CO##CL#6666	ra   c                 4    | j                                         S N)rd   r   rz   s    rb   r   zCompileResult.codegen
  s    "**,,,ra    c                     t          | dt          |           j         d| j                    | j                            |dz              t          | d           d S )NzDUMP  z  )tabzEND DUMP)printr:   rA   re   rh   dump)rz   r   s     rb   r   zCompileResult.dump  sl    CC4::.CC1ACCDDDd
+++ra   N)r   )rA   rB   rC   __doc__	__slots__r}   rx   classmethodr   propertyr   r   r`   ra   rb   rs   rs      s          I( ( (      [B - - X-           ra   rs   _CompileResult_LowerResult)rk   rm   r   r   c                     t          |                                           }t          t                    }||z
  }|r	t          | ||z
  }|D ]}d | |<   | d         }||                    d           | d<   | S )Nrf   )setkeys	CR_FIELDS	NameErrorwith_traceback)entriesr   fieldsetbadnamesmissingkerrs          rb   sanitize_compile_result_entriesr     s    w||~~D9~~HhH #""oG  


.
!C
"%"4"4T":":Nra   c                  8    t          |           } t          di | S Nr`   )r   rs   )r   s    rb   compile_resultr   ,  s#    -g66G##7###ra   c           
          ddl m} t          j                    }t	          j        |d          }|                    ||          5  t          ||| ||||          cddd           S # 1 swxY w Y   dS )zp
    Compile the function in an isolated environment (typing and target
    context).
    Good for testing.
    r   )
cpu_targetr   )targetN)numba.core.registryr   r   Contextr   
CPUContextnested_contextcompile_extra)funcargsreturn_typeflagslocalsr   	typingctx	targetctxs           rb   compile_isolatedr   1  s     /.....  Iy777I		"	"9i	8	8 , ,Y	4{"F, ,, , , , , , , , , , , , , , , , , ,s   A((A,/A,Fc                    t           j                            |           }t          j        |          }t          j        |          }|                    |          }|r:ddlm}  ||t          j
        d          i d          }|                                 t          j        |          }	|	                    |           |S )a  
    Run the compiler frontend over the given Python function, and return
    the function's canonical Numba IR.

    If inline_closures is Truthy then closure inlining will be run
    If emit_dels is Truthy the ir.Del nodes will be emitted appropriately
    )func_idr   )InlineClosureCallPassF)r	   FunctionIdentityfrom_functionr   InterpreterByteCode	interpretnumba.core.inline_closurecallr   r   rQ   runr
   PostProcessor)
r   inline_closures	emit_delsr   interpbcfunc_irr   inline_pass	post_procs
             rb   run_frontendr   A  s     '55d;;G$W--F		7	+	+	+Br""G GGGGGG++GS5H5O5O,.7 7&w//IMM)Nra   c                   &    e Zd ZdZddgZd Zd ZdS )_CompileStatuszC
    Describes the state of compilation. Used like a C record.
    fail_reasoncan_fallbackc                 "    d | _         || _        d S r   )r   r   )rz   r   s     rb   __init__z_CompileStatus.__init__^  s    (ra   c           
          g }| j         D ]:}|                    d                    |t          | |                               ;d                    |          S )Nz{k}={v})r   vz, )r   r   formatgetattrjoin)rz   valsr   s      rb   __repr__z_CompileStatus.__repr__b  s\     	C 	CAKK	((1a0@0@(AABBBByyra   N)rA   rB   rC   r   r   r   r   r`   ra   rb   r   r   X  sH          /I) ) )    ra   r   c                       e Zd ZdZd ZdS )_EarlyPipelineCompletionz@
    Raised to indicate that a pipeline has completed early
    c                     || _         d S r   )result)rz   r   s     rb   r   z!_EarlyPipelineCompletion.__init__n  s    ra   N)rA   rB   rC   r   r   r`   ra   rb   r   r   i  s-             ra   r   c                       e Zd ZdZd Zd ZdS )	StateDictz
    A dictionary that has an overloaded getattr and setattr to permit getting
    and setting key/values through the use of attributes.
    c                 N    	 | |         S # t           $ r t          |          w xY wr   )KeyErrorAttributeError)rz   attrs     rb   __getattr__zStateDict.__getattr__x  s:    	': 	' 	' 	' &&&	's   
 $c                     || |<   d S r   r`   )rz   r   values      rb   __setattr__zStateDict.__setattr__~  s    T


ra   N)rA   rB   rC   r   r   r   r`   ra   rb   r   r   r  s<         
' ' '    ra   r   c                     i }|j         rd|d<   |j        rd|d<   |j        rd|d<   |j        r
|j        |d<   |j        r
|j        |d<   t          j        |j        |           }||d<    | j        di |S )	zL
    Make a new target context from the given target context and flags.
    Tenable_debuginfoenable_boundscheck
enable_nrtrR   rX   rV   r`   )	rL   rM   rS   rR   rX   r   create_error_modelrV   	subtarget)r   r   subtargetoptionsrV   s       rb   _make_subtargetr     s      4/3+, 615-.y .)-& @,1,?)~ 6',~$-e.?KKK&1]#922!1222ra   c                   >    e Zd ZdZd Zd ZddZd Zd Zd	 Z	d
 Z
dS )CompilerBasez4
    Stores and manages states for the compiler
    c                 @   t          j                     |                                 |                                 t                      | _        || j        _        t          ||          | j        _        || j        _        || j        _	        || j        _
        || j        _        || j        _        d | j        _        d | j        _        d | j        _        d | j        _        d | j        _        d | j        _        d | j        _        d | j        _        i | j        _        g | j        _        | | j        _        t1                      | j        _        | j        j        | j        j        d<   i | j        j        d<   t5          | j        j        j                  | j        _        d S )Nparfor_diagnosticsparfors)r   )r   reload_configrefreshr   stater   r   r   rl   r   r   r   r   r   r   r   rj   lifted_fromrv   rw   rg   ro   rp   pipeliner   r   r   rF   status)rz   r   r   rl   r   r   r   r   s           rb   r   zCompilerBase.__init__  sc    	[[
(
.y%@@
$

!,
 
"
 
!
!
 
!%
!
#
%)
" 
!#
"
 ):(;(;
%J) 	
01)+
I&*)9
 
 

ra   c                     t           j                            |          | j        _        t                                          | j                   d| j        _        d | j        _        | 	                                S r   )
r	   r   r   r  r   r   run_passrj   r  _compile_bytecode)rz   r   s     rb   r   zCompilerBase.compile_extra  s_    %6DDTJJ
""4:...
!%
%%'''ra   r`   Nc                    |j         | j        _         || j        _        || j        _        || j        _        | j        j        j        | j        _        t                                          | j                   | 	                                S r   )
r   r  rj   r  r   	arg_countnargsr   r  _compile_ir)rz   r   rj   r  s       rb   
compile_irzCompilerBase.compile_ir  sj    $_
"
!,
$
:-7
TZ(((!!!ra   c                     t                      )zGChild classes override this to customize the pipelines in use.
        )NotImplementedErrorr   s    rb   define_pipelineszCompilerBase.define_pipelines  s     "###ra   c                 t   t                                          | j        j                                                  5  |                                 }|D ]}|j        }| j        j        j        d| j        j        j	        }t          d|d|           ||j        i| j        j        d<   ||d         k    }d}	 |                    | j                   | j        j         n# t          $ r}|j        }Y d}~ nmd}~wt"          $ rN}t%          j                    rt)          |t*          j                  s||| j        j        _        |r|Y d}~d}~ww xY wt3          d          d| j        _        ||cddd           S | j        j        J | j        j        cddd           S # 1 swxY w Y   dS )z4
        Populate and run compiler pipeline
        .z
Pipeline: z for pipeline_timesNz!All available pipelines exhausted)r7   enterr  r   copyr  pipeline_namer   modnamefunc_qualnamer   
exec_timesro   r   r   r   r   	Exceptionr   use_new_style_errors
isinstancer   
NumbaErrorr  r   r   r  )rz   pmspmr  	func_nameis_final_pipelinereses           rb   _compile_corezCompilerBase._compile_core  sl    ]]  !1!6!6!8!899 (	% (	%''))C I I " 0'+z'9'A'A'A'+z'9'G'GI	 }}}iiHIII9F9;9H
#$45$&#b'M! FF4:&&&z}0 1/   (CEEEEE       244  &q&*;<< 45DJ%1(             $$GHHH #'DJ K(	% (	% (	% (	% (	% (	% (	% (	%N z}000z}Q(	% (	% (	% (	% (	% (	% (	% (	% (	% (	% (	% (	% (	% (	% (	% (	% (	% (	%sU   A?F->&C'$F-'
E1C>8F->EAEF-E!F-F--F14F1c                 F    | j         j        J |                                 S )z>
        Populate and run pipeline for bytecode input
        r  r   r$  r   s    rb   r  zCompilerBase._compile_bytecode  s'     z!)))!!###ra   c                 F    | j         j        J |                                 S )z8
        Populate and run pipeline for IR input
        r&  r   s    rb   r  zCompilerBase._compile_ir  s'     z!---!!###ra   )r`   N)rA   rB   rC   r   r   r   r  r  r$  r  r  r`   ra   rb   r   r     s         (
 (
 (
T( ( (" " " "$ $ $
,% ,% ,%\$ $ $$ $ $ $ $ra   r   c                       e Zd ZdZd ZdS )CompilerzThe default compiler
    c                 8   g }| j         j        j        s2|                    t                              | j                              | j         j        j        s| j         j        j        r2|                    t                              | j                              |S r   )	r  r   rI   r   DefaultPassBuilderdefine_nopython_pipeliner  r   define_objectmode_pipeline)rz   r  s     rb   r  zCompiler.define_pipelines  s    z. 	PJJ)BB4:NNOOO:) 	TZ-=-L 	JJ"==djII   
ra   N)rA   rB   rC   r   r  r`   ra   rb   r)  r)    s-         	 	 	 	 	ra   r)  c                       e Zd ZdZedd            Zedd            Ze	 dd            Zedd	            Zedd            Z	edd            Z
edd            ZdS )r+  z
    This is the default pass builder, it contains the "classic" default
    pipelines as pre-canned PassManager instances:
      - nopython
      - objectmode
      - interpreted
      - typed
      - untyped
      - nopython lowering
    nopythonc                    t           }t          |          }|                    |           }|j                            |j                   |                    |           }|j                            |j                   |                    |           }|j                            |j                   |                                 |S )z<Returns an nopython mode pipeline based PassManager
        )r+  r   define_untyped_pipelinepassesextenddefine_typed_pipeline!define_nopython_lowering_pipelinefinalize)r  r   dpbr  untyped_passestyped_passeslowering_passess          rb   r,  z+DefaultPassBuilder.define_nopython_pipeline5  s    
 !44U;;
	.///0077
	,---??FF
	/000
	ra   nopython_loweringc                    t          |          }|                    t          d           |                    t          d           |                    t          d           | j        j        j        r|                    t          d           n|                    t          d           |                    t          d           |                    t          d           |                                 |S )N3ensure features that are in use are in a valid form$ensure IR is legal prior to loweringannotate typesnative parfor loweringnative loweringnopython mode backendzdump parfor diagnostics)r   add_passr0   r*   r%   r   rR   enabledr/   r.   r+   r)   r6  r  r   r  s      rb   r5  z4DefaultPassBuilder.define_nopython_lowering_pipelineH  s    
6I	K 	K 	K
N:	< 	< 	< 	M#3444;$, 	;KK,.FGGGGKK(9:::
O%<===
)+DEEE
	ra   parfor_gufunc_nopython_loweringc                    t          |          }|                    t          d           |                    t          d           |                    t          d           | j        j        j        r|                    t          d           n|                    t          d           |                    t          d           |                                 |S )Nr=  r>  r?  r@  rA  rB  )r   rC  r0   r*   r%   r   rR   rD  r/   r.   r+   r6  rE  s      rb   /define_parfor_gufunc_nopython_lowering_pipelinezBDefaultPassBuilder.define_parfor_gufunc_nopython_lowering_pipeline\  s     
6I	K 	K 	K
N:	< 	< 	< 	M#3444;$, 	;KK,.FGGGGKK(9:::
O%<===
	ra   typedc                 X   t          |          }|                    t          d           |                    t          d           |                    t          d           | j        j        j        r|                    t          d           | j        j	        s|                    t          d           | j        j        j        rQ|                    t          d           |                    t          d           |                    t          d           |                                 |S )	/Returns the typed part of the nopython pipelinenopython frontendremove phis nodeszinline overloaded functionszPreprocessing for parforsnopython rewriteszconvert to parforszfuse parforsparfor prelowering)r   rC  r$   r-   r,   r   rR   rD  r'   rT   r&   r(   r1   r2   r6  rE  s      rb   r4  z(DefaultPassBuilder.define_typed_pipelinep  s    
)+>??? 	%':;;; 	O%BCCC;$, 	DKK'BCCC{& 	?KK(*=>>>;$, 	EKK
$8999KK(.999KK-/CDDD
	ra   parfor_gufunc_typedc                     t          |          }| j        sJ |                    t          d           |                    t          d           |                    t
          d           |                                 |S )rK  processing IRrL  rO  )r   r   rC  r   r$   r2   r6  rE  s      rb   define_parfor_gufunc_pipelinez0DefaultPassBuilder.define_parfor_gufunc_pipeline  sq     }
L/222
)+>???
)+?@@@
	ra   untypedc                    t          |          }| j        6|                    t          d           |                    t          d           |                    t
          d           |                    t          d           |                    t          d           | j        j	        sQ|                    t          d           |                    t          d           |                    t          d	           |                    t          d
           |                    t          d           |                    t          d           | j        j	        s|                    t          d           |                    t           d           |                    t"          d           | j        j        r|                    t&          d           |                    t(          d           |                                 |S )z0Returns an untyped part of the nopython pipelineNanalyzing bytecodefix up argsrR  zHandle with contexts(inline calls to locally defined closureszrewrite semantic constantszdead branch pruningrN  zrewrite dynamic raises(convert make_function into JIT functionszinline inlinable functionszfind literally callszhandles literal_unrollssazLiteral propagation)r   r   rC  r   r   r   r   r   r   rT   r   r   r   r"   r   r   r   r    rH   r!   r#   r6  rE  s      rb   r1  z*DefaultPassBuilder.define_untyped_pipeline  s    = KK)+?@@@KK	=111
L/222
K!7888 	&>	@ 	@ 	@ {& 	>KK02NOOOKK)>???KK)<===
(*BCCC 	->	@ 	@ 	@ 	$&BCCC{& 	@KK)>???
&(>???
M#;<<<;! 	/KK...
57LMMM
	ra   objectc                    t          |          }| j        7|                    t          d           |                    t          d           n|                    t
          d           |                    t          d           |                    t          d           |                    t          d           |                    t          d           |                    t          d	           |                    t          d
           |                    t          d           |                    t          d           |                    t          d           |                                 |S )z:Returns an object-mode pipeline based PassManager
        NrV  rW  rM  rR  zcanonicalize loop entryzcanonicalize loop exitzobject mode frontendrX  rY  r>  r?  zobject mode backend)r   r   rC  r   r   r-   r   r   r   r3   r   r   r*   r%   r4   r6  rE  s      rb   r-  z-DefaultPassBuilder.define_objectmode_pipeline  sH    = KK)+?@@@KK	=1111 KK)+>???
L/222 	)+DEEE
(*BCCC
&(>???
&>	@ 	@ 	@ 	->	@ 	@ 	@
N$JKKK
M#3444
%'<===
	ra   N)r/  )r;  )rF  )rI  )rP  )rT  )r[  )rA   rB   rC   r   staticmethodr,  r5  rH  r4  rS  r1  r-  r`   ra   rb   r+  r+  *  s       	 	    \$    \& 9   \&    \. 	 	 	 \	 * * * \*X    \  ra   r+  c	           	      N     || ||||||          }	|	                     |          S )aD  Compiler entry point

    Parameter
    ---------
    typingctx :
        typing context
    targetctx :
        target context
    func : function
        the python function to be compiled
    args : tuple, list
        argument types
    return_type :
        Use ``None`` to indicate void return
    flags : numba.compiler.Flags
        compiler flags
    library : numba.codegen.CodeLibrary
        Used to store the compiled code.
        If it is ``None``, a new CodeLibrary is used.
    pipeline_class : type like numba.compiler.CompilerBase
        compiler pipeline
    )r   )
r   r   r   r   r   r   r   rl   pipeline_classr  s
             rb   r   r     s:    0 ~iG"K@ @H!!$'''ra   r`   c           	         
 |	rt          j        |          }d|_        
 f	d} ||                                 |          }d}|j        szt          j                    5  t          j        dt          j                   	  ||                                 |          }n# t          $ r Y nw xY wddd           n# 1 swxY w Y   ||}n|}|S   
|          }|	                    |          S )zK
    Compile a function with the given IR.

    For internal use only.
    Tc           	      V   	  
	|          }|                     |           S )Nr   rj   r  )r  )the_ir	the_flagsr  r   rl   rj   r  r   r_  r   r   r   s      rb   compile_localz!compile_ir.<locals>.compile_local  sL    %~iG&*KFL LH&&vf3> ' @ @ @ra   Nignorerb  )
r  deepcopyrT   warningscatch_warningssimplefilterr   NumbaWarningr  r  )r   r   r   r   r   r   r   rj   r  is_lifted_looprl   r_  
norw_flagsre  	norw_cresrw_crescresr  s   `` `` ``` ``      rb   r  r    s     3< ]5))
!%
	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ "M',,..*==	
   	(**  %h0CDDD+mGLLNNEBBGG    D	               DDD ">)Y"&UFD D""76/: # < < 	<s6   . C
B.-C
.
B;8C
:B;;C

CCc           	      V    t          | ||||||          }|                    |          S )z 
    For internal use only.
    )r)  r   )	r   r   rl   r   r   r   r   r   r  s	            rb   compile_internalrr  =  s6    
 	9gk5&: :H!!$'''ra   )FF)Ycollectionsr   r  rh  numba.core.tracingr   
numba.corer   r   r   r   r	   r
   r   r   r   numba.parfors.parforr   numba.core.errorsr   numba.core.environmentr   numba.core.compiler_machineryr   numba.core.untyped_passesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   numba.core.typed_passesr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   numba.core.object_mode_passesr3   r4   numba.core.targetconfigr5   r6   r7   r9   DEFAULT_FLAGSrS   r   rs   r   r   r   r   r   r[  r   r  r   dictr   r   r   r)  r+  r   r  rr  r`   ra   rb   <module>r     s*   " " " " " "   $ $ $ $ $ $/ / / / / / / / / / / / / / / / / / / / / / 2 2 2 2 2 2 + + + + + + 5 5 5 5 5 5 5 5 5 5 5 5) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '> > > > > > > > E E E E E E E E E E} } } } }L } } }@    	(O  O  O  O  O JJ/;; O  O  O d z. + + +     $ $ $
 .2, , , ,    .    V   "    y           3 3 3*@$ @$ @$ @$ @$6 @$ @$ @$F    |    s s s s s s s sn #'x( ( ( (< !d5H=< =< =< =<@( ( ( ( (ra   