
    @ܶi]G                        U d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddl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# d
dl$m%Z%m&Z&m'Z'm(Z( d
dl)m*Z*m+Z+m,Z, d
dl
m-Z-m.Z.m/Z/ d
dl0m1Z1m2Z2 dZ3ee
j4                 e5d<   	 ddl6Z3n# e7$ r dZ3Y nw xY we!j8        Z8dZ9 ej:        e;          Z< ed          Z=deej>                 deej>                 fdZ?de@de@fdZAd ZBd ZCdejD        jE        dedededeFe         f
dZGdedeHfd ZIedej>        dej>        fd!            ZJedeeFe         eKed"f         eLeef         f         deMfd#            ZJdedeej>        eMf         fd$ZJde@fd%ZNdsde@d'e
jO        d(e@ddfd)ZPdd*d+e.d,eQd-ed.ed/eQde-fd0ZR G d1 d2          ZS G d3 d4          ZT G d5 d6          ZU G d7 d8          ZV G d9 d:          ZWd'e@de@fd;ZXd'e@de@fd<ZYd'e@de@fd=ZZd>e@de@fd?Z[d'e@de@fd@Z\	 	 	 dtdAedBed"ef         dCeQdDeeQ         dEeeQ         dFeQddfdGZ]dHej^        deFej>                 ded"ef         fdIZ_	 	 dudLeMdMeMdNeHdOeMde@f
dPZ`eja        dQdfdReeQ         dSeeQ         dTejb        dUee@ejc        f         dVeQdej>        fdWZd edX          ZedeHfdYZfdBee=eef         dZedee=eef         fd[Zgdd\ d]d^ehd_e@d`e@dZedaee@         dbeed"ef         ged"ef         f         dehfdcZidBee=eef         dee=eef         fddZjdBee=eef         dee=eef         fdeZkdBee=eef         dee=eef         fdfZldBee=eef         dee=eef         fdgZmdBee=eef         dee=eef         fdhZndBee=eef         dee=eef         fdiZodBee=eef         dee=eef         fdjZpdBee=eef         dee=eef         fdkZqdvdmeHddfdnZrdoee=eef         dpe=js        dqe=jt        deefdrZudS )wa1  Testing utilities and infrastructure for Dynamo.

This module provides a comprehensive set of testing utilities including:
- Test result collection and validation
- Graph manipulation and comparison tools
- Test case management and execution helpers
- Specialized test decorators for different Python versions and features
- RNG state management
- Compilation counting and monitoring
- Debug utilities for bytecode transformation

The utilities in this module are used across Dynamo's test suite to ensure
consistent testing patterns and proper test isolation.
    N)CallableSequence)AnyOptionaloverloadTypeVarUnion)	ParamSpec)patch)fx)	aot_eager)OutputGraph   )config
eval_frameoptimize_assertreset)create_instructiondebug_checksis_generatortransform_code_object)CheckFunctionManager	CompileIdGuardedCode)ConvertFrameReturnDynamoFrameTypewrap_guarded_code)CompileCounterIntsamenp   _Pxreturnc                     | d S |                                                                                      | j                  S N)detachclonerequires_grad_requires_gradr#   s    Z/root/projects/openclaw-proxy/venv/lib64/python3.11/site-packages/torch/_dynamo/testing.pyclone_mer-   ?   s6    yt88::,,Q_===    namec                 .    t          j        dd|           S )Nz^_orig_mod[.] resub)r/   s    r,   remove_optimized_module_prefixr5   E       6"B---r.   c                     ddl m d d fd}  t          j        |d          |           |i | j        fS )Nr   )InstructionTranslatorc                 H    |                                  j        j        | S r&   )
current_txoutputregion_tracker)_gmargskwargsr8   gmr<   s      r,   extract_graph_backendz8extract_graph_and_tracker.<locals>.extract_graph_backendO   s&     .99;;BQ
r.   T)backend	fullgraph)torch._dynamo.symbolic_convertr8   torchcompilegraph)fnr>   r?   rA   r8   r@   r<   s       @@@r,   extract_graph_and_trackerrI   I   s    DDDDDD	BN       E@EM/4@@@DDdUfUUU8^##r.   c                     t                      }  t          j        |          |           |i |}||j        |j        |j        fS )N)rB   )AotEagerAndRecordGraphsrE   rF   graphs	fw_graphs	bw_graphs)rH   r>   r?   rB   results        r,   extract_graphrP   Z   sP    %''G/+U]7+++B//@@@F7>7#4g6GGGr.   model
predictionlossexample_inputsc                 J   g }|                     |           |                     |           i }i }|                                 D ]_\  }}t          | t          j                  rt          |          }|}	|j        }
|j        t          j        |          }
|
||dz   <   |	||<   `|                     |           |                     |           i }| 	                                D ]3\  }}t          | t          j                  rt          |          }|||<   4|                     |           |D ]r}t          |t          t          f          r |                    d |D                        >t          |t          j                  r|                     |j                   s|S )Nz.gradc              3   X   K   | ]%}t          |t          j                  |j        V  &d S r&   )
isinstancerE   Tensorgrad).0inps     r,   	<genexpr>z"collect_results.<locals>.<genexpr>   s5      XX*S%,:W:WX38XXXXXXr.   )appendnamed_parametersrW   r   OptimizedModuler5   rY   rE   
zeros_likenamed_bufferstuplelistextendrX   )rQ   rR   rS   rT   resultsgradsparamsr/   param
param_copyrY   buffersbufferexamples                 r,   collect_resultsrm   `   s    GNN:NN4 EF--// 	" 	"eeZ788 	81$77D
z:#E**D $dWn!tNN5NN6G++--  feZ788 	81$77DNN7! - -gt}-- 	-NNXXwXXXXXXX'5<00 -w|,,,Nr.   outc                    t          | t          j                  r| j        S t          | t          t
          f          rt          d | D                       S | dS t          | t                    rdS t          dt          |                     )Nc              3   4   K   | ]}t          |          V  d S r&   )requires_bwd_passrZ   r#   s     r,   r\   z$requires_bwd_pass.<locals>.<genexpr>   s+      55A$Q''555555r.   FDon't know how to reduce)
rW   rE   rX   r*   rc   rb   anyintNotImplementedErrortypern   s    r,   rq   rq      s    #u|$$   	C$	'	' 55555555	u	C		 u
8$s))
D
DDr.   c                     d S r&    rx   s    r,   reduce_to_scalar_lossr{      s    >Acr.   .c                     d S r&   rz   rx   s    r,   r{   r{      s	     Cr.   c                    t          | t          j                  r)|                                 |                                 z  S t          | t
          t          f          r)t          d | D                       t          |           z  S t          |           j	        dv rt          | j                  S t          |           j	        dk    r| j                                        S t          | t                    rMt          d |                                 D                       t          |                                           z  S t!          dt          |                     )z/Reduce the output of a model to get scalar lossc              3   4   K   | ]}t          |          V  d S r&   r{   rr   s     r,   r\   z(reduce_to_scalar_loss.<locals>.<genexpr>   s+      99(++999999r.   )MaskedLMOutputSeq2SeqLMOutput!CausalLMOutputWithCrossAttentionsSquashedNormalc              3   4   K   | ]}t          |          V  d S r&   r   )rZ   values     r,   r\   z(reduce_to_scalar_loss.<locals>.<genexpr>   s+      JJE(//JJJJJJr.   rs   )rW   rE   rX   sumnumelrc   rb   lenrw   __name__r{   logitsmeandictvalueskeysrv   rx   s    r,   r{   r{      s1   #u|$$ 
wwyy399;;&&	C$	'	' 
99S99999CHHDD	c	   
 

 %SZ000	c	/	/	/x||~~	C		 
JJSZZ\\JJJJJSHHJJN
 N
 
 	
 8$s))
D
DDr.   c                      t           j                            t           j                            t                    d          } t           j                            |           st          j        |            | S )Nz../debug)ospathjoindirname__file__existsmkdir)r   s    r,   	debug_dirr      sM    7<<11:>>D7>>$ 
Kr.   r1   codeextrac           	      x   t          t          j                            t	                      |           d          5 }|                    t          j        |                                           dt          j        |                                           d| d           d d d            d S # 1 swxY w Y   d S )Nwz


)	openr   r   r   r   writedisBytecodeinfo)r/   r   r   fds       r,   
debug_dumpr      s    	bgll9;;--s	3	3 
r
|D!!&&((UUcl4.@.@.D.D.F.FUUEUUU	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   A'B//B36B3)skipframe
cache_sizehooks_r   c                   dt           t                   dt          ddfd}t          j        j                                        }t          j        j                            d          5  |5  t          | j                  r&t                      cddd           cddd           S t          | j                   t          | j        |          \  }}t          i dddg dd	it                      t                      | j        g d
          }t          t!          |t#          | j        |          j        t'          d	d	                              cddd           cddd           S # 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )zused to debug jump updatesinstructionscode_optionsr$   Nc                     |                      dt          d                     |                      dt          d                     d S )Nr   NOP)insertr   )r   r   s     r,   insert_nopsz&debug_insert_nops.<locals>.insert_nops   sF    A1%88999A1%8899999r.   debug_insert_nopsF_idr   )r   compiler_fnroot_txexportexport_constraintsframe_statelocal_scopeglobal_scopef_codetorch_function_mode_stackpackage)frame_idframe_compile_id)rc   r   rE   _dynamoutilsget_metrics_contextdynamo_timedr   r   r   r   r   r   localsglobalsr   r   r   guard_managerr   )	r   r   r   r   r   r   metrics_contextr   rG   s	            r,   r   r      sX   
:$s) :3 :4 : : : : m)==??O			)	)*=	>	> 
 
 
 
%% 	(%''
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 	U\"""'kBBa!
 <&(
 
 
 !$U\599G1q999 
 
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sC   'E?*"E'E?%B)E'E?'E+	+E?.E+	/E??FFc                   l    e Zd Zd	dZdej        j        deej                 de	de
f         fdZd	dZdS )
CompileCounterr$   Nc                 <    d| _         |                                  d S Nr   )frame_countclearselfs    r,   __init__zCompileCounter.__init__   s    :;

r.   r@   rT   .c                     | xj         dz  c_         |j        j        D ]}d|j        v r| xj        dz  c_        |j        S )Nr   call)r   rG   nodesopop_countforward)r   r@   rT   nodes       r,   __call__zCompileCounter.__call__   sQ     	AHN 	# 	#D  "zr.   c                 d    t           j        rt          d          | _        nd| _        d| _        d S r   )r   debug_disable_compile_counterr   r   r   r   s    r,   r   zCompileCounter.clear   s3    / 	!033D Dr.   r$   N)r   
__module____qualname__r   rE   r   GraphModulerc   rX   r   r   r   r   rz   r.   r,   r   r      s}           (&8<U\8J	#s(	        r.   r   c                   t    e Zd ZdeddfdZdej        j        deej	                 de
def         fdZd
d	ZdS )CompileCounterWithBackendrB   r$   Nc                 X    d| _         || _        g | _        |                                  d S r   )r   rB   rL   r   )r   rB   s     r,   r   z"CompileCounterWithBackend.__init__  s)    :;24

r.   r@   rT   .c                     ddl m} | xj        dz  c_        |j        j        D ]}d|j        v r| xj        dz  c_        | j                            |             || j	                  ||          S )Nr   )lookup_backendr   )
backends.registryr   r   rG   r   r   r   rL   r]   rB   )r   r@   rT   r   r   s        r,   r   z"CompileCounterWithBackend.__call__  s     	655555AHN 	# 	#D  "2+~~dl++B???r.   c                 r    t           j        rt          d          | _        nd| _        d| _        g | _        d S r   )r   r   r   r   r   rL   r   s    r,   r   zCompileCounterWithBackend.clear  s:    / 	!033D Dr.   r   )r   r   r   strr   rE   r   r   rc   rX   r   r   r   r   rz   r.   r,   r   r      s             
@(&
@8<U\8J
@	#s(	
@ 
@ 
@ 
@     r.   r   c                   d    e Zd ZddZdej        j        deej                 de	de
f         fdZdS )	EagerAndRecordGraphsr$   Nc                     g | _         d S r&   )rL   r   s    r,   r   zEagerAndRecordGraphs.__init__  s    24r.   r@   rT   .c                 D    | j                             |           |j        S r&   )rL   r]   r   )r   r@   rT   s      r,   r   zEagerAndRecordGraphs.__call__"  s"     	2zr.   r   r   r   r   r   rE   r   r   rc   rX   r   r   r   rz   r.   r,   r   r     si        5 5 5 5(&8<U\8J	#s(	     r.   r   c                   d    e Zd ZddZdej        j        deej                 de	de
f         fdZdS )	rK   r$   Nc                 0    g | _         g | _        g | _        d S r&   )rL   rM   rN   r   s    r,   r   z AotEagerAndRecordGraphs.__init__*  s    245757r.   r@   rT   .c                 f     j                             |           dt          j        j        dt
          t          j                 dt          dt          f         f fd}dt          j        j        dt
          t          j                 dt          dt          f         f fd}t          ||||          S )Nr@   rT   r$   .c                 F    j                             |            | j        S r&   )rM   r]   r   r@   rT   r   s     r,   fw_compilerz5AotEagerAndRecordGraphs.__call__.<locals>.fw_compiler4  #     N!!"%%%:r.   c                 F    j                             |            | j        S r&   )rN   r]   r   r   s     r,   bw_compilerz5AotEagerAndRecordGraphs.__call__.<locals>.bw_compiler:  r   r.   )r   r   )
rL   r]   rE   r   r   rc   rX   r   r   r   )r   r@   rT   r   r   s   `    r,   r   z AotEagerAndRecordGraphs.__call__/  s     	2	$	6:5<6H	c3h	 	 	 	 	 		$	6:5<6H	c3h	 	 	 	 	 	 ##	
 
 
 	
r.   r   r   rz   r.   r,   rK   rK   )  si        8 8 8 8

(&
8<U\8J
	#s(	
 
 
 
 
 
r.   rK   c                       e Zd ZddZd ZdS )InductorAndRecordGraphsr$   Nc                 "    g | _         g | _        d S r&   )rL   inductor_graphsr   s    r,   r   z InductorAndRecordGraphs.__init__I  s    24;=r.   c                      dd l mc m}  j                            |           |j         fd}t          j        |d|          5  |                    ||          cd d d            S # 1 swxY w Y   d S )Nr   c                  T    j                             | d                     | i |S r   )r   r]   )r>   r?   old_compile_fx_innerr   s     r,   patchedz1InductorAndRecordGraphs.__call__.<locals>.patchedT  s4     ''Q000''8888r.   _compile_fx_inner)new)torch._inductor.compile_fx	_inductor
compile_fxrL   r]   r   r   object)r   r@   rT   compile_fx_modr   r   s   `    @r,   r   z InductorAndRecordGraphs.__call__M  s   ;;;;;;;;;2-?	9 	9 	9 	9 	9 	9 \.*=7KKK 	A 	A!,,R@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   
A--A14A1r   )r   r   r   r   r   rz   r.   r,   r   r   H  s<        > > > >A A A A Ar.   r   c                 .    t          j        dd|           S )Nz(?m)^ *#.*\n?r1   r2   r   s    r,   strip_commentr  \  r6   r.   c                 f    d                     d |                     d          D                       S )Nr   c                 6    g | ]}|                                 S rz   )rstrip)rZ   lines     r,   
<listcomp>z)remove_trailing_space.<locals>.<listcomp>a  s     AAAdkkmmAAAr.   )r   splitr  s    r,   remove_trailing_spacer  `  s/    99AA

40@0@AAABBBr.   c                     |                      d          }g }d}|D ]7}|                                dk    r|rd}nd}|                    |           8d                    |          S )Nr   Fr1   T)r
  stripr]   r   )r   linesrO   	saw_blankr  s        r,   _squash_blank_linesr  d  s}    JJtEFI  ::<<2 IIId99Vr.   gm_strc                 \    t          |           }t          |          }t          |          S r&   )r  r  r  )r  strippedno_trailings      r,   normalize_gmr  s  s,     V$$H'11K{+++r.   c                 2    t          j        dd|           }|S )z-
    Normalize code: remove empty lines.
    z[\r\n]+r   r2   )r   normal_codes     r,   empty_line_normalizerr  {  s     &T400Kr.   r   rH   nargsexpected_opsexpected_ops_dynamicexpected_frame_countc                    t           j        s||}t                      }d t          |          D             }d t          |          D             } || }	 || }
t	                        t          |          |          } || } || } || } || }t	                       |                     t          ||	                     |                     t          ||	                     |                     t          ||
                     |                     t          ||
                     |                     |j	        |           ||                     |j
        |           d S d S )Nc                 8    g | ]}t          j        d d           S 
   rE   randnrZ   r   s     r,   r	  z!standard_test.<locals>.<listcomp>  $    777QU[R  777r.   c                 8    g | ]}t          j        d d           S r  r!  r#  s     r,   r	  z!standard_test.<locals>.<listcomp>  r$  r.   )r   assume_static_by_defaultr   ranger   r   
assertTruer   assertEqualr   r   )r   rH   r  r  r  r  actualargs1args2correct1correct2opt_fnval1aval2aval1bval2bs                   r,   standard_testr4    sx    * ,/C/O+F77%,,777E77%,,777Er5zHr5zH	GGG$_V$$R((FFENEFENEFENEFENE	GGGOOD))***OOD))***OOD))***OOD))***V')=>>>,77777  r.   r@   c                     | j         S r&   )r   )r@   rT   s     r,   dummy_fx_compiler6    s     :r.   T皙?speeduppvalue
is_correctpvalue_thresholdc                 4    |sdS ||k    r| ddS | dd|dS )NERRORz.3fzx SAMEzx p=z.2frz   )r8  r9  r:  r;  s       r,   format_speedupr>    sI      w   %%%%%+++v++++r.   cpusizestridedtypedevice
extra_sizec                    |}t          d | D                       r-|t          d t          | |          D                       dz   z  }|j        rZ|j        dk    r7	 t          j        |t
          j        |                              |          }n0t          j        |||          }nt          j	        |g||          }t          j
        || |          S )Nc              3   "   K   | ]
}|d k    V  dS )r   Nrz   )rZ   ss     r,   r\   zrand_strided.<locals>.<genexpr>  s&      

Q1q5





r.   c              3   ,   K   | ]\  }}|d z
  |z  V  dS )r   Nrz   )rZ   shaperA  s      r,   r\   zrand_strided.<locals>.<genexpr>  s/      LLf$LLLLLLr.   r   )rB  rC  )rB  )r@  rB  rC  )allr   zipis_floating_pointitemsizerE   r"  float16tozeros
as_strided)r@  rA  rB  rC  rD  needed_sizerk   s          r,   rand_stridedrS    s     K


$


 
LL#dF:K:KLLLLLqP	
  M>Q [EM&QQQTT U  FF [E&IIIFF;-uVLLLFD&111r.   _Tc                      t           j         S r&   )r   r&  rz   r.   r,   check_dynamic_shape_capturerV    s    ...r.   patchesc                      t          j                   dt          j        dt          j        dt
          f fd            }|S )Nr>   r?   r$   c            	          t          j                    5 }D ]/\  }}}|                    t          j        |||                     0 | i |cd d d            S # 1 swxY w Y   d S r&   )
contextlib	ExitStackenter_contextr   r   )r>   r?   stackmoduleattrvalrH   rW  s         r,   _fnz"_make_fn_with_patches.<locals>._fn  s    !## 	'u%, E E!c##ELs$C$CDDDD2t&v&&		' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   :AA #A )	functoolswrapsr"   r>   r?   rT  )rH   rW  ra  s   `` r,   _make_fn_with_patchesrd    s\    _R'27 'bi 'B ' ' ' ' ' ' ' Jr.   c                     | S r&   rz   r+   s    r,   <lambda>rf    s    a r.   )
xfail_prop	decoratorcls
cls_prefix	fn_suffixrg  rh  c          	      <   t          | | j         | j        i           }|j        |_        t	          |           D ]}|                    d          rt          | |          }t          |          s t          ||t          | |                     V| | }	t          |g|R  }
|	|
_        |$t          ||          rt          j        |
          }
t          ||	 ||
                     t          ||          st          ||t          | |                     |S )Ntest_)rw   r   	__bases__r   dir
startswithgetattrcallablesetattrrd  hasattrunittestexpectedFailure)ri  rj  rk  rg  rh  rW  DummyTestClassr/   rH   new_namenew_fns              r,   make_test_cls_with_patchesrz    s9    Z777KKN"0"9NC > >??7## 	>d##BB<< gc4.@.@AAA+	++H*28888F&FO%'"j*A*A%!1&99NHii.?.?@@@@.. 	>ND'#t*<*<===r.   c                 N    t           j        dk    r| S t          j        |           S )N)r!      sysversion_inforu  r   rH   s    r,   skipIfNotPy311r    s%    
7""	=r.   c                 `    t           j        dk    r| S  t          j        d          |           S )Nr!      zRequires Python 3.12+r}  r  s    r,   skipIfNotPy312r    s0    
7""	18=011"555r.   c                     t           j        dk    st           j        dk     r t          j        d          |           S | S )N)r!      r  zRequires Python 3.12r}  r  s    r,   skipIfOnlyNotPy312r    s=    
7""c&6&@&@4x}344R888Ir.   c                 N    t           j        dk    rt          j        |           S | S )Nr  )r~  r  ru  rv  r  s    r,   xfailIfPy312r    s&    
7""'+++Ir.   c                 `    t           j        dk    r t          j        d          |           S | S )Nr  zNot supported in Python 3.12+r}  r  s    r,   skipIfPy312r     s0    
7""=x}<==bAAAIr.   c                     d| _         | S NT)_expected_failure_dynamicr  s    r,   expectedFailureDynamicr  (  s    #'B Ir.   c                     d| _         | S r  )!_expected_failure_codegen_dynamicr  s    r,   expectedFailureCodegenDynamicr  .      +/B(Ir.   c                     d| _         | S r  )!_expected_failure_dynamic_wrapperr  s    r,   expectedFailureDynamicWrapperr  4  r  r.   Fuse_xlac                 &   t          j        d           t          j        d           t          rt          j                            d           | r@dd lmc m} |                    dt          |
                                                     d S d S )Ni9  r   )rE   manual_seedrandomseedr    torch_xla.core.xla_modelcore	xla_modelset_rng_stater   
xla_device)r  xms     r,   reset_rng_stater  9  s    	d
K	 
	t 5---------
s2==??33444445 5r.   fr>   r?   c                      | |i |S r&   rz   )r  r>   r?   s      r,   &_skipped_function_for_test_reconstructr  D  s     1dfr.   )r1   )NNr   )Tr7  )F)v__doc__rZ  r   rb  loggingos.pathr   r  r3   r~  typesru  collections.abcr   r   typingr   r   r   r   r	   typing_extensionsr
   unittest.mockr   rE   r    torch._dynamo.backends.debuggingr   torch._dynamo.output_graphr   r1   r   r   r   r   bytecode_transformationr   r   r   r   guardsr   r   r   r   r   r   r   r   r   r    
ModuleType__annotations__numpyModuleNotFoundErrorunsupportedthree	getLoggerr   logr"   rX   r-   r   r5   rI   rP   nnModulerc   rm   boolrq   r{   rb   r   floatr   CodeTyper   ru   r   r   r   r   rK   r   r  r  r  r  r  r4  r   r6  r>  float32rB  rC  rS  rT  rV  rd  rw   rz  r  r  r  r  r  r  r  r  r  r>   r?   r  rz   r.   r,   <module>r     s
         



        				 



   . . . . . . . . : : : : : : : : : : : : : : ' ' ' ' ' '              6 6 6 6 6 6 2 2 2 2 2 2 8 8 8 8 8 8 8 8 8 8 8 8            A @ @ @ @ @ @ @ @ @ I I I I I I I I I I * * * * * * * * "&HU % % %   	BBB $	g!!Yt__>& >8EL+A > > > >. . . . . .$ $ $"H H H%8?%(+%36%HK%	#Y% % % %P	E3 	E4 	E 	E 	E 	E 
 Au| A A A A 
 A 
	tCy%S/4S>9	:
   

Es EuU\5-@'A E E E E,3    
 
S 
 
s 
D 
 
 
 
 QR%
 %
 %
%
(+%
47%
<?%
JM%
%
 %
 %
 %
P       ,       <       
 
 
 
 
 
 
 
>A A A A A A A A(. . . . . .C C C C C Cc c    , , , , , ,      #'*. !8 8
8c8 8 3-	8
 #3-8 8 
8 8 8 8B
(,U\(:c3h    !	
, 
,
,
, 
, 	
,
 	
, 
, 
, 
,  ',2 2
3-2SM2 ;2 #u|#$	2
 2 \2 2 2 2: WT]]/T / / / /
	hr2v. 	# 	(2r6BR 	 	 	 	" !%DOK  	  	
  #s(+,hsCx.@@A 
   >xB' HRV,<    6xB' 6HRV,< 6 6 6 68BF+ R0@    Xb"f% (2r6*:    HRV$ "b&)9    xB/ HRV4D    hr2v&6 8BF;K    hr2v&6 8BF;K    
5 5T 5d 5 5 5 5B "359     s   +B0 0B:9B: