Ë
    S²j¥Z  ã                  óÔ  — d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	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 d d	l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# d dl$m%Z%m&Z& d dl'm(Z( e
rd dl)m*Z*m+Z+m,Z,m-Z-  edg d¢«      Z.	 	 	 	 	 	 d'd„Z/	 	 	 	 	 	 d(d„Z0d)d„Z1 G d„ d«      Z2d*d„Z3e2jh                  e2jj                  e2jl                  e2jn                  e2jp                  e2jr                  e2jt                  dde2jv                  dddddddddd d!d"d#d$f	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+d%„Z<e=d&k(  r e3«        yy),é    )ÚannotationsN)Ú
namedtuple)ÚPath)ÚAnyÚTYPE_CHECKING)Ú	setValueT)ÚBaseCppType)Ú	GenLazyIRÚGenLazyNativeFuncDefinitionÚGenTSLazyIR)Úget_grouped_native_functionsÚparse_native_yaml)Úerror_on_missing_kernelsÚgen_dispatcher_registrationsÚ"gen_dispatchkey_nativefunc_headersÚparse_backend_yaml)ÚNativeFunctionÚNativeFunctionsGroupÚOperatorName)ÚSelectiveBuilder)ÚFileManagerÚNamespaceHelper)Ú
YamlLoader)ÚCallableÚIterableÚIteratorÚSequenceÚParsedExternalYaml)Úbackend_keyÚautograd_keyÚcpp_namespaceÚbackend_indicesÚfull_codegenc                óÄ  — t        | «      5 }t        j                  |t        ¬«      }d d d «       t	        t
        «      st        dt        |«      › �«      ‚|j                  dg «      }|j                  dg «      }|j                  dg «      }t	        |t        «      st        dt        |«      › �«      ‚t	        |t        «      st        dt        |«      › �«      ‚t	        |t        «      st        dt        |«      › �«      ‚|D �cg c]  }t        j                  |«      ‘Œ }}|D �cg c]  }t        j                  |«      ‘Œ }	}|||	fS # 1 sw Y   �Œ%xY wc c}w c c}w )	N)ÚLoaderzExpected dict from YAML, got r#   Ú
non_nativeÚir_genz&Expected full_codegen to be list, got z$Expected non_native to be list, got z Expected ir_gen to be list, got )ÚopenÚyamlÚloadr   Ú
isinstanceÚdictÚAssertionErrorÚtypeÚpopÚlistr   Úparse)
Úbackend_yaml_pathÚgrouped_native_functionsÚfÚyaml_valuesr#   r&   r'   ÚnameÚfull_codegen_opnamesÚir_gen_opnamess
             úW/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torchgen/gen_lazy_tensor.pyÚparse_native_functions_keysr:   b   sF  € ô 
ÐÓ	 ð 6 AÜ—i‘i ¬*Ô5ˆ÷6ä�k¤4Ô(ÜÐ<¼TÀ+Ó=NÐ<OÐPÓQÐQà—?‘? >°2Ó6€LØ—‘ ¨rÓ2€JØ�_‰_˜X rÓ*€FÜ�l¤DÔ)ÜØ4´T¸,Ó5GÐ4HÐIó
ð 	
ô �j¤$Ô'ÜÐCÄDÈÓDTÐCUÐVÓWÐWÜ�fœdÔ#ÜÐ?ÄÀVÃ¸~ÐNÓOÐOØAMÖN¸œL×.Ñ.¨tÕ4ÐNÐÐNØ;AÖB°4”l×(Ñ(¨Õ.ÐB€NÐBØ ¨^Ð;Ð;÷%6ñ 6üò  OùÚBs   ŒEÄEÄ(EÅEc                ól  — 	 t        | «      5 }|j                  «       }t        |j                  d«      «      }d d d «       |D �cg c]	  }|vsŒ|‘Œ }}|r.t        d| › dt        j                  j                  |«      › �«      ‚y # 1 sw Y   ŒNxY w# t        $ r}t        d| › �«      |‚d }~ww xY wc c}w )Nú
z<Unable to read from the specified shape_inference_hdr file: zGMissing shape inference function.

Please add declare this function in zD:

and implement it in the corresponding shape_inference.cpp file.

)
r(   ÚreadÚsetÚsplitÚOSErrorr-   Ú	ExceptionÚosÚlinesepÚjoin)Úshape_inference_hdrÚexpected_shape_infr_declsr4   Úshape_infr_declsÚshape_infr_decl_linesÚeÚdeclÚmissing_declss           r9   Úvalidate_shape_inference_headerrL   {   sâ   € ðÜÐ%Ó&ð 	F¨!Ø Ÿv™v›xÐÜ$'Ð(8×(>Ñ(>¸tÓ(DÓ$EÐ!÷	Fð 3öØ°dÐBWÒ6WŠð€Mð ñ Üð%Ø%8Ð$9ð :ä‡�‡��ÓÐ  ð$ó
ð 	
ð ÷	Fð 	Fûô ò ÜØJÐK^ÐJ_Ð`ó
àð	ûðüòs9   ‚B �+B¸B Á	B1ÁB1ÂBÂ
B Â	B.ÂB)Â)B.c                  ó   — y)Naå  at::Tensor to_meta(const at::Tensor& tensor) {
  // undefined tensors can't be converted to the meta device, since they don't have sizes/strides
  if (!tensor.defined()) return tensor;
  auto out = at::native::empty_strided_meta_symint(tensor.sym_sizes(), tensor.sym_strides(), /*dtype=*/tensor.scalar_type(), /*layout=*/tensor.layout(), /*device=*/c10::Device(c10::kMeta), /*pin_memory=*/std::nullopt);
  // needs to handle wrapped numbers, so dtype promotion works properly.
  if (tensor.unsafeGetTensorImpl()->is_wrapped_number()) {
    out.unsafeGetTensorImpl()->set_wrapped_number(true);
  }
  return out;
}
std::optional<at::Tensor> to_meta(const std::optional<at::Tensor>& tensor) {
  if (tensor.has_value()) {
    return to_meta(*tensor);
  }
  return std::nullopt;
}

std::vector<at::Tensor> to_meta(at::ITensorListRef t_list) {
  std::vector<at::Tensor> outs;
  outs.reserve(t_list.size());
  for (const auto& tensor : t_list) {
    outs.push_back(to_meta(tensor));
  }
  return outs;
}
© rN   ó    r9   Úget_ltc_helper_fnsrP   –   s   € ðrO   c                  ó~   — e Zd ZU dZded<   dZded<   dZded<   d	Zded
<   dZded<   e	Z
ded<   eZded<   dZded<   y)Údefault_argsÚNodeÚstrÚ	node_baseNú
str | NoneÚnode_base_hdrú&torch/csrc/lazy/core/shape_inference.hrE   ztorch::lazy::LazyTensorÚtensor_classztorch/csrc/lazy/core/tensor.hÚtensor_class_hdrútype[GenLazyIR]Úlazy_ir_generatorú!type[GenLazyNativeFuncDefinition]Ú native_func_definition_generatorÚTorchScriptÚbackend_name)Ú__name__Ú
__module__Ú__qualname__rU   Ú__annotations__rW   rE   rY   rZ   r
   r\   r   r^   r`   rN   rO   r9   rR   rR   ¶   s]   … Ø€IˆsÓØ $€M�:Ó$ØGÐ˜ÓGØ1€L�#Ó1Ø;Ð�cÓ;Ø)2Ð�Ó2à#ð %Ð&Gó ð &€L�#Ô%rO   rR   c                 óì  — t        j                  d¬«      } | j                  dddd¬«       | j                  dd	d
d¬«       | j                  ddt        dd¬«       | j                  ddt        d d¬«       | j                  dddd¬«       | j                  ddt        t
        j                  d¬«       | j                  ddt        t
        j                  d¬«       | j                  ddt        t
        j                  d ¬«       | j                  d!d"t        t
        j                  d#¬«       | j                  d$d%t        t
        j                  d&¬«       | j                  d'd(t        t
        j                  d)¬«       | j                  «       }t        t        «      j                  «       j                   d*   }t	        |d+z  d,z  d-z  «      }t
        j"                  }|j$                  rt&        }t
        j(                  }t+        ||j,                  |j.                  |j0                  |j2                  |j                  |j                  |j                  |j                  |j                  |||j                  «       y ).Nz"Generate Lazy Tensor backend files)Údescriptionz-sz--source-yamlz--source_yamlzApath to source yaml file containing operator external definitions)Úhelpz-oz--output-dirz--output_dirzoutput directoryz	--dry-runz	--dry_runF)r.   Údefaultrg   z--impl-pathz--impl_pathz9path to the source C++ file containing kernel definitionsz--gen-ts-loweringsz--gen_ts_loweringsÚ
store_truezIGenerate TorchScript lowerings in addition to Lazy IR and NativeFunctions)Úactionrg   z--node-basez--node_basez7Name of backend specific custom Lazy IR Node base classz--node-base-hdrz--node_base_hdrz;Path to header file defining custom Lazy IR Node base classz--shape-inference-hdrz--shape_inference_hdrzBPath to header file defining custom Lazy shape inference functionsz--tensor-classz--tensor_classz1Name of backend specific custom Lazy Tensor classz--tensor-class-hdrz--tensor_class_hdrz5Path to header file defining custom Lazy Tensor classz--backend-namez--backend_namezName of the backend to generateé   ÚatenÚsrcÚATen)ÚargparseÚArgumentParserÚadd_argumentÚboolrT   rR   rU   rW   rE   rY   rZ   r`   Ú
parse_argsr   Ú__file__ÚabsoluteÚparentsr\   Úgen_ts_loweringsr   r^   Úrun_gen_lazy_tensorÚsource_yamlÚ
output_dirÚdry_runÚ	impl_path)ÚparserÚoptionsÚ
torch_rootÚ	aten_pathr\   r^   s         r9   Úmainr�   Ã   sˆ  € Ü×$Ñ$Ð1UÔV€FØ
×ÑØØØØPð	 ô ð ×Ñ˜˜n¨nÐCUÐÔVØ
×ÑØ�[¤t°UÐASð ô ð ×ÑØØÜØØHð ô ð ×ÑØØØØXð	 ô ð ×ÑØØÜÜ×&Ñ&ØFð ô ð ×ÑØØÜÜ×*Ñ*ØJð ô ð ×ÑØØÜÜ×0Ñ0ØQð ô ð ×ÑØØÜÜ×)Ñ)Ø@ð ô ð ×ÑØØÜÜ×-Ñ-ØDð ô ð ×ÑØØÜÜ×)Ñ)Ø.ð ô ð ×ÑÓ!€Gô ”h“×(Ñ(Ó*×2Ñ2°1Ñ5€JÜ�J Ñ'¨%Ñ/°&Ñ8Ó9€IÜ)5×)GÑ)GÐØ×ÒÜ'Ðä×5Ñ5ð %ô ØØ×ÑØ×ÑØ�‰Ø×ÑØ×ÑØ×ÑØ×ÑØ× Ñ Ø×#Ñ#ØØ(Ø×ÑõrO   FTztorch::lazyÚGetTensorListÚ$GetLtcTensorOrCreateForWrappedNumberÚTryGetLtcTensorzTORCH_LAZY_FN_COUNTER("lazy::")zLazyTensor::Createz$torch::lazy::CreateAtenFromLtcTensorz$torch::lazy::TupleAtenFromLtcTensorsztorch::lazy::ValueÚLazyTensorPtrztorch::lazy::GetBackendDevicec                óN  ‡‡‡‡‡‡	‡‡‡‡‡‡‡‡‡‡‡‡‡‡.‡/‡0‡1‡2‡3‡4‡5‡6‡7— |j                  d«      }|d   }dj                  |d d «      }t        t        ||«      «       t        j
                  j                  | d«      Š7dˆˆ7fd„}  | ‰«      }!t        j
                  j                  | d«      }"t        j
                  j                  | d«      }#t        |"|#«      }$|$j                  |$j                  c}%Š.t        |%«      Š2dd„}&t        ‰2|&¬«      Š2t        |‰2‰.«      }'|'j                  Š/|'j                  }(|'j                  })|'j                  Š.t        |‰2«      \  Š1Š5Š3‰1f	 	 	 	 	 	 	 dd	„Š0t!        j"                  «       }*‰/€t%        d
«      ‚‰.‰/   j'                  «       }+|�t)        |%‰.‰/|(|+|‰1«       	 ‰	�5t+         ‰0t-        j.                  ‰.‰/   ‰«      ‰2«      «      },t1        ‰	|,«       |+€t%        d«      ‚t3        |!|+|)‰.‰2‰/|(|«       |(€‰/gn‰/|(gD ]  }-t5        |!‰|+‰.‰2‰/|-|*|||d¬«       Œ t7        |)«      Š6|!j9                  ‰/› d�dˆ.ˆ/ˆˆ0ˆˆˆˆˆˆˆˆ2ˆˆˆˆ6ˆˆ	ˆˆˆˆfd„«        |
‰.‰/   |||«      Š4|!j9                  ddˆ0ˆ1ˆ2ˆ3ˆ4ˆˆ6fd„«       |!j9                  ddˆ4ˆˆ5ˆ6fd„«       y )Nz::éÿÿÿÿÚ	templatesc                ó    •— t        | ‰‰¬«      S )N)Úinstall_dirÚtemplate_dirr{   )r   )rŠ   r{   r‹   s    €€r9   Úmake_file_managerz.run_gen_lazy_tensor.<locals>.make_file_managerO  s   ø€ ÜØ#°,Èô
ð 	
rO   znative/native_functions.yamlznative/tags.yamlc                ó¤   — t        | t        «      r| j                  j                  n| j                  }t	        |j
                  j
                  «      S )z¯
        We sort the native function because of the note in concat_map_codegen.
        TODO(alanwaketan): Remove this sorting hack once all ops are grouped properly.
        )r+   r   Ú
functionalÚfuncrT   r6   )r4   r�   s     r9   Úsort_native_functionz1run_gen_lazy_tensor.<locals>.sort_native_function_  s6   € ô
 %/¨qÔ2FÔ$Gˆq�|‰|× Ò ÈQÏVÉVˆÜ�4—9‘9—>‘>Ó"Ð"rO   )Úkeyc              3  óÖ   K  — |D ]^  }t        |t        «      rt        |j                  «       «      n|g}|D ]+  }|j                  j
                  |v sŒ | |«      E d{  –—†  Œ- Œ` y7 Œ	­w)zÛ
        We code-gen for the functional variant, which is all we need for IR classes/lowerings/shape inferences, but we
        only code-gen additional entries for the inplace variant for the native functions.
        N)r+   r   r0   Ú	functionsr�   r6   )r�   ÚxsÚops_listÚxÚfsr4   s         r9   Úconcat_map_codegenz/run_gen_lazy_tensor.<locals>.concat_map_codegen{  sh   è ø€ ð ò 	'ˆAÜ(2°1Ô6JÔ(K”�a—k‘k“mÔ$ÐRSÐQTˆBØò '�Ø—6‘6—;‘; (Ò*Ù# A›w×&Ñ&ñ'ñ	'ð 'ús   ‚AA)ÁA)ÁA'Á
A)zbackend_key must be non-Nonezclass_name must be non-NoneF)Úbuild_in_treeÚper_operator_headersr`   Úeager_registrationzNativeFunctions.cppzDispatchKeyNativeFunctions.cppc                 ó  •— ‰‰ddddddddd	d
d‰› d‰› d�‰› d�g‰rdgng z   D � cg c]  } d| › d�‘Œ
 c} t        «       d‰j                  ‰j                  t         ‰ ‰‰› d�‰‰   ‰‰‰‰‰
‰‰‰‰‰‰‰‰	«      ‰«      «      dœS c c} w )NzATen/Functions.hzATen/native/TensorConversions.hzATen/NativeFunctions.hz6ATen/CompositeExplicitAutogradNonFunctionalFunctions.hzATen/MetaFunctions.hzATen/Operators.hzATen/native/CPUFallback.hú!torch/csrc/lazy/core/ir_builder.hz*torch/csrc/lazy/core/lazy_graph_executor.hztorch/csrc/lazy/core/metrics.hútorch/csrc/lazy/core/shape.hú/zNativeFunctions.hz	/LazyIr.hz.torch/csrc/lazy/ts_backend/ts_eager_fallback.hú
#include <ú>Ú ÚNativeFunctions)ÚincludesÚ
helper_fnsÚnative_functions_includeÚnamespace_prologueÚnamespace_epilogueÚnative_function_definitions)rP   ÚprologueÚepiloguer0   )Úpathr"   r   Úbackend_namespacer˜   Úcreate_aten_from_ltc_tensorÚcreate_from_first_tensorÚcreate_tensorÚgen_forced_fallback_codeÚget_device_fnÚget_tensor_or_wrap_numberÚget_tensorlistr3   Úlazy_tensor_ptrÚmetrics_counterr^   Ú	ns_helperrz   rE   rY   rZ   Útry_get_tensorÚtuple_aten_from_ltc_tensorss    €€€€€€€€€€€€€€€€€€€€€€r9   ú<lambda>z%run_gen_lazy_tensor.<locals>.<lambda>ß  sý   ø€ ð %Ø'Ø&Ø5Ø,ØLØ*Ø&Ø/Ø7Ø@Ø4Ø2Ø!�l ! K =Ð0AÐBØ!�l )Ð,ðñ& 0ð FÑFàñ)öàð ˜T˜F !Ò$òô2 -Ó.Ø(*Ø"+×"4Ñ"4Ø"+×"4Ñ"4Ü+/Ù"Ù4Ø&˜- Ð7Ø'¨Ñ4Ø$Ø0Ø)Ø&Ø1Ø&Ø'Ø%Ø0Ø3Ø3Ø'Ø%óð" -ó%ó,ñ=4
€ ùòs   ¦BzLazyIr.hc            
     ó¤   •— dD � cg c]  } d| › d�‘Œ
 c} ‰�d‰› d�gng t         ‰‰‰‰‰z   «      «      ‰j                  ‰j                  dœS c c} w )N)zATen/core/Formatting.hzc10/core/ScalarType.hztorch/csrc/lazy/core/hash.hútorch/csrc/lazy/core/ir.hrž   ÚoptionalÚvectorr    r¡   z
#include "ú")Úlazy_ir_sysincÚlazy_ir_incÚir_declarationsr§   r¨   )r0   rª   r«   )r¬   r˜   r#   r3   r'   Úlazy_ir_objrW   r·   s    €€€€€€€r9   rº   z%run_gen_lazy_tensor.<locals>.<lambda>  s}   ø€ ðöàð ˜T˜F !Ò$òð Ð(ð )¨¨°qÐ9Ñ:àÜ#Ù"ØÐ!9¸<È&Ñ;Póó ð
 #,×"4Ñ"4Ø"+×"4Ñ"4ñ-
€ ùòs   †AzLazyNonNativeIr.hc                 ó¨   •— g d¢‰r‰gng z   D � cg c]
  } | rd| › d�‘Œ c} t        j                  ‰‰«      ‰j                  ‰j                  dœS c c} w )N)r¼   r�   z+torch/csrc/lazy/core/internal_ops/ltc_ops.hrX   r    r¡   )Úlazy_non_native_ir_incÚnon_native_ir_nodesr§   r¨   )ÚdestÚ!generate_non_native_lazy_ir_nodesrª   r«   )r¬   rÃ   rW   r&   r·   s    €€€€r9   rº   z%run_gen_lazy_tensor.<locals>.<lambda>;  sn   ø€ òñ '4�M‘?¸ñ=ö
'àñ ð ˜T˜F !Ò$ò
'ô $(×#IÑ#IØ˜Kó$ð #,×"4Ñ"4Ø"+×"4Ñ"4ñ!
€ ùò
's   �A)rŠ   rT   Úreturnr   )r4   z%NativeFunctionsGroup | NativeFunctionrÉ   rT   )r�   z)Callable[[NativeFunction], Sequence[str]]r”   z/Iterable[NativeFunctionsGroup | NativeFunction]r•   zlist[OperatorName]rÉ   zIterator[str])r?   rD   r   r	   rB   r¬   r   Únative_functionsr"   r   Úsortedr   r   r    r!   r:   r   Úget_nop_selectorr-   Únative_function_class_namer   r0   rÇ   ÚGenLazyShapeInferenceDefinitionrL   r   r   r   Úwrite_with_template)8r€   ry   rz   r{   r|   rU   rW   rY   rZ   rE   r\   r^   r™   rš   r`   r±   Úuse_lazy_shaper­   r´   r³   r¸   r¶   r°   r¯   r®   r¹   Úlazy_value_classrµ   r²   Ú	lv_tokensÚlv_classÚlv_nsrŒ   ÚfmÚnative_yaml_pathÚtags_yaml_pathÚparsed_yamlrÊ   r�   Úparsed_backend_yamlr    r!   ÚselectorÚ
class_namerF   Údispatch_keyr"   r   r˜   r#   r3   r'   rÃ   r&   r·   r‹   s8     ``  ```` `   ` ````````` ``                 @@@@@@@@@@r9   rx   rx   #  s%  ÿÿÿü€ ðL !×&Ñ& tÓ,€IØ˜‰}€HØ�I‰I�i  �nÓ%€EÜŒk˜% Ó*Ô+Ü—7‘7—<‘< 	¨;Ó7€Lö
ñ
 
˜:Ó	&€Bä—w‘w—|‘| IÐ/MÓNÐÜ—W‘W—\‘\ )Ð-?Ó@€NÜ#Ð$4°nÓE€Kà×$Ñ$Ø×#Ñ#ð &Ð�oô  <Ð<LÓMÐó#ô  &Ø Ð&:ô Ðô -ØÐ-¨óÐð &×1Ñ1€KØ&×3Ñ3€LØ'×5Ñ5€MØ)×9Ñ9€Oô (CØÐ-ó(Ñ$€L�*˜fð (4ð'Ø7ð'à;ð'ð %ð'ð 
ó	'ô   ×0Ñ0Ó2€HàÐÜÐ;Ó<Ð<Ø  Ñ-×HÑHÓJ€JàÐÜ ØØØØØØØô	
ðð Ð&Ü$(ÙÜ×4Ñ4Ø# KÑ0°,óð )ó	ó%
Ð!ô 	(Ð(;Ð=VÔWØÐÜÐ:Ó;Ð;ô 'Ø
ØØØØ ØØØô	ð &Ð-ˆ‰°KÀÐ3Nò
ˆô 	%ØØØØØ$ØØØØ'Ø!5Ø%Ø$ö	
ð
ô&   Ó.€IØ×ÑØˆ-Ð*Ð+Ø(÷4	
÷ 4	
÷ 4	
ð 4	
ô8ñt $Ø˜Ñ$ l°I¸~ó€Kð ×ÑØØ÷	
ñ 	
ôð< ×ÑØØö	
õrO   Ú__main__)r2   rT   r3   z/Sequence[NativeFunction | NativeFunctionsGroup]rÉ   z8tuple[list[OperatorName], list[Any], list[OperatorName]])rE   rT   rF   z	list[str]rÉ   ÚNone)rÉ   rT   )rÉ   rÞ   )<r€   rT   ry   rT   rz   rT   r{   rr   r|   rV   rU   rT   rW   rV   rY   rT   rZ   rT   rE   rT   r\   r[   r^   r]   r™   rr   rš   rr   r`   rT   r±   rr   rÐ   rr   r­   rT   r´   rT   r³   rT   r¸   rT   r¶   rT   r°   rT   r¯   rr   r®   rT   r¹   rT   rÑ   rT   rµ   rT   r²   rT   rÉ   rÞ   )>Ú
__future__r   ro   rB   Úcollectionsr   Úpathlibr   Útypingr   r   r)   Útorchgen.destrÇ   Útorchgen.api.lazyr   Útorchgen.api.typesr	   Útorchgen.dest.lazy_irr
   r   r   Útorchgen.genr   r   Útorchgen.gen_backend_stubsr   r   r   r   Útorchgen.modelr   r   r   Ú!torchgen.selective_build.selectorr   Útorchgen.utilsr   r   Útorchgen.yaml_utilsr   Úcollections.abcr   r   r   r   r   r:   rL   rP   rR   r�   rU   rW   rY   rZ   rE   r\   r^   r`   rx   ra   rN   rO   r9   ú<module>rî      s¨  ðÝ "ã Û 	Ý "Ý ß %ã å Ý 'Ý *ß UÑ Uß H÷ó ÷ NÑ MÝ >ß 7Ý *ñ ßFÓFñ~  ØÚWóÐ ð<Øð<àMð<ð >ó<ð2
Øð
Ø9Bð
à	ó
ó6÷@
&ñ 
&ó]ðL "×+Ñ+Ø ,× :Ñ :Ø$×1Ñ1Ø(×9Ñ9Ø+×?Ñ?Ø)5×)GÑ)Gð 	×5Ñ5àð "'Ø$×1Ñ1Ø%*Øð +Ø)Ø%KØ+Ø<Ø-Ø%*Ø'MØ'MØ0Ø*Ø8ðIjØðjàðjð ðjð ð	jð
 ðjð ðjð ðjð ðjð ðjð ðjð 'ðjð'ðjð  ð!jð& ð'jð( ð)jð* #ð+jð, ð-jð2 ð3jð4 ð5jð6  #ð7jð8 ð9jð: ð;jð< ð=jð> #ð?jð@ "%ðAjðB "%ðCjðD ðEjðF ðGjðH ðIjðJ 
óKjðZ	 ˆzÒÙ…Fð rO   