Ë
    P/æj‘I  ã                   ó‚  — 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 d dlmZmZm	Z	m
Z
mZmZ d dlZd dlmZ d dlmZmZmZmZmZ d dlmZmZmZmZmZ eeef   Zeeeedf   f   Zd„ Zd	e	e
e      d
e	defd„Zdeeeedf   f   defd„Z dededeg e!f   defd„Z"dedededeee	e   e	e   ef   fd„Z#d	e	e   d
e	e   dedefd„Z$d„ Z%deeeedf   f   dededededefd„Z&d„ Z'dededdfd„Z(defd„Z)d a* ejV                  «       Z,da-d!„ Z.d"„ Z/d#„ Z0d$„ Z1d%„ Z2d&„ Z3d'„ Z4d(„ Z5e jl                  d)„ «       Z7d*„ Z8d+„ Z9d,„ Z:d-„ Z;y).é    N)Úpartial)ÚAnyÚCallableÚListÚOptionalÚTupleÚUnion)ÚTensor)Ú_add_batch_dimÚ_remove_batch_dimÚ_vmap_decrement_nestingÚ_vmap_increment_nestingÚis_batchedtensor)Ú_broadcast_to_and_flattenÚtree_flattenÚ	tree_map_Útree_unflattenÚTreeSpec.c                 óJ   ‡ ‡— dŠt        j                  ‰ «      ˆ ˆfd„«       }|S )Nzvtorch.func.{grad, vjp, jacrev, hessian} don't yet support saved tensor hooks. Please open an issue with your use case.c                  ó’   •— t         j                  j                  j                  ‰«      5   ‰| i |¤Žcd d d «       S # 1 sw Y   y xY w©N)ÚtorchÚautogradÚgraphÚdisable_saved_tensors_hooks)ÚargsÚkwargsÚfÚmessages     €€úX/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/_functorch/vmap.pyÚfnz.doesnt_support_saved_tensors_hooks.<locals>.fn-   s=   ø€ ä�^‰^×!Ñ!×=Ñ=¸gÓFñ 	&Ù�dÐ%˜fÑ%÷	&÷ 	&ò 	&ús	   «=½A)Ú	functoolsÚwraps)r   r!   r   s   ` @r    Ú"doesnt_support_saved_tensors_hooksr$   '   s1   ù€ ð	3ð ô
 ‡_�_�QÓô&ó ð&ð €Ió    Úflat_in_dimsÚ	flat_argsÚreturnc                 óö   ‡— t        | |«      D ��cg c]  \  }}|�|j                  |«      ‘Œ c}}Št        ‰«      dk(  rt        d«      ‚‰r#t	        ˆfd„‰D «       «      rt        d‰› d�«      ‚‰d   S c c}}w )Nr   z/vmap: Expected at least one Tensor to vmap overc              3   ó.   •K  — | ]  }|‰d    k7  –— Œ y­w)r   N© )Ú.0ÚsizeÚbatch_sizess     €r    ú	<genexpr>z/_validate_and_get_batch_size.<locals>.<genexpr>@   s   øè ø€ ÒJ°d˜4 ;¨q¡>Õ1ÑJùs   ƒzTvmap: Expected all tensors to have the same size in the mapped dimension, got sizes z for the mapped dimension)Úzipr-   ÚlenÚ
ValueErrorÚany)r&   r'   Úin_dimÚargr.   s       @r    Ú_validate_and_get_batch_sizer6   6   s“   ø€ ô
 ˜|¨YÓ7÷áˆF�CØÐð 	�‰�Õó€Kô
 ˆ;Ó˜1ÒÜÐJÓKÐKÙ”sÓJ¸kÔJÔJÜð$Ø$/ =Ð0IðKó
ð 	
ð �q‰>Ðùós   ‘A5Úbatched_outputsc                 ó:   — t        | t        «      rt        | «      S y)Né   )Ú
isinstanceÚtupler1   )r7   s    r    Ú_num_outputsr<   H   s   € Ü�/¤5Ô)Ü�?Ó#Ð#Ør%   ÚvalueÚnum_elementsÚerror_message_lambdac                 ón   — t        | t        «      s| f|z  S t        | «      |k7  rt         |«       «      ‚| S r   )r:   r;   r1   r2   )r=   r>   r?   s      r    Ú	_as_tuplerA   R   s;   € ô �eœUÔ#Øˆx˜,Ñ&Ð&Ü
ˆ5ƒz�\Ò!ÜÑ-Ó/Ó0Ð0Ø€Lr%   Úin_dimsr   Úfuncc                 óü  — t        | t        «      s7t        | t        «      s't        dt	        |«      › d| › dt        | «      › d�«      ‚t        |«      dk(  rt        dt	        |«      › d�«      ‚t        |«      \  }}t        | |«      }|€-t        dt	        |«      › d| › dt        | «      d   › d	|› d�	«      ‚t        t        ||«      «      D �]  \  }\  }}t        |t        «      s |�t        dt	        |«      › d| › d
|› d�«      ‚t        |t        «      r:t        |t        «      s*t        dt	        |«      › d| › d
|› dt        |«      › d�	«      ‚|�x||j                  «        k  s||j                  «       k\  rQt        dt	        |«      › d| › d
|› d|j                  «       › d|j                  «       › d|j                  «       › d�«      ‚|€�Œ|dk  s�Œ	||j                  «       z  ||<   �Œ! t        ||«      |||fS )Núvmap(z
, in_dims=zv, ...)(<inputs>): expected `in_dims` to be int or a (potentially nested) tuple matching the structure of inputs, got: ú.r   z�)(<inputs>): got no inputs. Maybe you forgot to add inputs, or you are trying to vmap over a function with no inputs. The latter is unsupported.zb, ...)(<inputs>): in_dims is not compatible with the structure of `inputs`. in_dims has structure r9   z but inputs has structure z, ...)(<inputs>): Got in_dim=zE for an input but in_dim must be either an integer dimension or None.z' for an input but the input is of type zT. We cannot vmap over non-Tensor arguments, please use None as the respective in_dimz> for some input, but that input is a Tensor of dimensionality z  so expected in_dim to satisfy -z <= in_dim < )r:   Úintr;   r2   Ú	_get_nameÚtyper1   r   r   Ú	enumerater0   r
   Údimr6   )	rB   r   rC   r'   Ú	args_specr&   Úir5   r4   s	            r    Ú_process_batched_inputsrN   \   sa  € ô �gœsÔ#¬J°wÄÔ,FÜØ”I˜d“OÐ$ J¨w¨ið 86ä6:¸7³m°_ÀAðGó
ð 	
ô
 ˆ4ƒy�A‚~ÜØ”I˜d“OÐ$ð %)ð *ó
ð 	
ô (¨Ó-Ñ€IˆyÜ,¨W°iÓ@€LØÐÜØ”I˜d“OÐ$ J¨w¨ið 8%ä%1°'Ó%:¸1Ñ%=Ð$>ð ?Ø&˜K qð*ó
ð 	
ô &¤c¨)°\Ó&BÓCó 1Ñˆ‰=ˆC�Ü˜&¤#Ô&¨6Ð+=ÜØœ	 $›Ð(¨
°7°)ð <Ø$˜Xð &0ð1óð ô
 �fœcÔ"¬:°c¼6Ô+BÜØœ	 $›Ð(¨
°7°)ð <Ø$˜XÐ%LÜ˜“9�+ð ;ð<óð ð Ð 6¨S¯W©W«Y¨JÒ#6¸&ÀCÇGÁGÃIÒ:MÜØœ	 $›Ð(¨
°7°)ð <Ø$˜Xð &%Ø%(§W¡W£Y Kð 0Ø—G‘G“I�;˜m¨C¯G©G«I¨;°að9óð ð Ò &¨1¤*Ø$ s§w¡w£yÑ0ˆL˜‹Oð-1ô2 	% \°9Ó=ØØØð	ð r%   Ú
vmap_levelc           	      ó€   — t        | |«      D ��cg c]  \  }}|€|nt        |||«      ‘Œ }}}t        ||«      S c c}}w r   )r0   r   r   )r&   r'   rO   rL   r4   r5   Úbatched_inputss          r    Ú_create_batched_inputsrR   š   sR   € ô ˜|¨YÓ7÷áˆF�Cð ˆ~‰¤>°#°v¸zÓ#JÑJð€Nñ ô ˜.¨)Ó4Ð4ùó	s   �:c           
      ó  — |€9t        |t        j                  «      rt        |«      rt	        d| › d| › d�«      ‚|S t        |t        j                  «      st	        d| › d| › dt        |«      › d�«      ‚t        ||||«      S )NrE   z	, ...): `z5` can not return a BatchedTensor when out_dim is Nonez%` must only return Tensors, got type z3. Did you mean to set out_dims= to None for output?)r:   r   r
   r   r2   rI   r   )ÚnameÚbatched_outputrO   Ú
batch_sizeÚout_dims        r    Ú_maybe_remove_batch_dimrX   ¥   s§   € Ø€Ü�n¤e§l¡lÔ3Ô8HØô9
ô Ø˜�v˜Y t fð -5ð 6óð ð Ðô �n¤e§l¡lÔ3ÜØ�D�6˜ 4 &ð )!Ü!% nÓ!5Ð 6ð 7@ð@ó
ð 	
ô ˜^¨Z¸ÀWÓMÐMr%   Úout_dimsrV   c                 ó¢  ‡‡‡— t        | «      \  }Šˆˆˆfd„}t        | t        j                  «      rCt        ‰t        «      r‰g}nDt        ‰t
        «      rt        ‰«      dk(  r‰}n#‰€‰g}n |«        nt        ‰‰«      }|€ |«        t        |«      D ��	cg c]  \  }}	t        t        ‰«      ||||	«      ‘Œ }
}}	t        |
‰«      S c c}	}w )Nc                  ó^   •— t        dt        ‰ «      › d‰› dt        ‰«      d   › d‰› d�	«      ‚)NrE   ú, ..., out_dims=z`)(<inputs>): out_dims is not compatible with the structure of `outputs`. out_dims has structure r9   z but outputs has structure rF   )r2   rH   r   )rC   rY   Úoutput_specs   €€€r    Úincompatible_errorz+_unwrap_batched.<locals>.incompatible_errorÅ   sJ   ø€ ÜØ”I˜d“OÐ$Ð$4°X°Jð ?&ä&2°8Ó&<¸QÑ&?Ð%@ð AØ(˜M¨ð,ó
ð 	
r%   r9   )r   r:   r   r
   rG   r;   r1   r   r0   rX   rH   r   )r7   rY   rO   rV   rC   Úflat_batched_outputsr^   Úflat_out_dimsrU   rW   Úflat_outputsr]   s    `  `      @r    Ú_unwrap_batchedrb   ¼   s×   ú€ ô )5°_Ó(EÑ%Ð˜+ö
ô �/¤5§<¡<Ô0ô �h¤Ô$Ø%˜J‰MÜ˜¤%Ô(¬S°«]¸aÒ-?Ø$‰MØÐØ%˜J‰MáÕ ä1°(¸KÓHˆØÐ ÙÔ ô (+Ð+?ÀÓ'O÷	ñ $ˆN˜Gô 	 Ü�d‹O˜^¨Z¸ÀWõ	
ð€Lñ ô ˜,¨Ó4Ð4ùós   Â"Cc                 ó`   — t        | t        «      ry | €y t        dt        |«      › d|› d�«      ‚)NrE   r\   zˆ): `out_dims` must be an int, None or a python collection of ints representing where in the outputs the vmapped dimension should appear.)r:   rG   r2   rH   )ÚxrC   rY   s      r    Ú_check_int_or_nonere   æ   sA   € Ü�!”SÔØØ€yØÜ
Ø
”	˜$“Ð Ð 0°°
ð ;+ð 	,óð r%   c                 ó^   — t        | t        «      ry t        t        t        || ¬«      | «       y )N)rC   rY   )r:   rG   r   r   re   )rY   rC   s     r    Ú$_check_out_dims_is_int_or_int_pytreerg   ò   s#   € Ü�(œCÔ ØÜŒgÔ(¨t¸hÔGÈÕRr%   c                 óH   — t        | d«      r| j                  S t        | «      S )NÚ__name__)Úhasattrri   Úrepr)rC   s    r    rH   rH   ø   s"   € Üˆt�ZÔ Ø�}‰}Ðô
 �‹:Ðr%   Fc                  óf  ‡— t         ry t        5  t         r
	 d d d «       y t        j                  j	                  dd«      dk(  rnda 	 d d d «       y t
        j                  j                  ddd«      addl	m
Š ˆfd	„}  | t
        j                  j                  j                  j                  «        | t
        j                  j                  j                  j                  «        | t
        j                  j                  j                   j                  «        | t
        j                  j                  j"                  j                  «        | t
        j                  j                  j$                  j                  «        | t
        j                  j                  j&                  j                  «        | t
        j                  j                  j(                  j                  «        | t
        j                  j                  j*                  j                  «       da d d d «       y # 1 sw Y   y xY w)
NÚPYTORCH_JITÚ1TÚatenÚIMPLÚFuncTorchBatchedr   )Údecomposition_tablec                 ó\   •— | ‰v rt         j                  | ‰|    «       y t        d| › �«      ‚)Nz!could not find decomposition for )ÚVMAP_DECOMPOSITIONS_LIBÚimplÚRuntimeError)Údecomprr   s    €r    Ú#_register_python_decomposition_vmapzElazy_load_decompositions.<locals>._register_python_decomposition_vmap!  s5   ø€ ØÐ,Ñ,Ü'×,Ñ,¨VÐ5HÈÑ5PÕQä"Ð%FÀvÀhÐ#OÓPÐPr%   )ÚDECOMPOSITIONS_LOADEDÚDECOMPOSITIONS_LOCKÚosÚenvironÚgetr   ÚlibraryÚLibraryrt   Útorch._decomprr   Úopsro   Úmse_loss_backwardÚdefaultÚsmooth_l1_loss_backwardÚhuber_loss_backwardÚnll_loss_forwardÚnll_loss2d_forwardÚnll_loss_backwardÚnll_loss2d_backwardÚaddr)rx   rr   s    @r    Úlazy_load_decompositionsr‹   	  sw  ø€ åØä	ñ $%Ý Ø÷$%ð $%ô —
‘
—‘˜}¨cÓ2°cÒ9¸iØ$(Ð!Ø÷$%ð $%ô #(§-¡-×"7Ñ"7Ø�FÐ.ó#
Ðõ 	6ô	Qñ 	,¬E¯I©I¯N©N×,LÑ,L×,TÑ,TÔUÙ+Ü�I‰I�N‰N×2Ñ2×:Ñ:ô	
ñ 	,¬E¯I©I¯N©N×,NÑ,N×,VÑ,VÔWÙ+¬E¯I©I¯N©N×,KÑ,K×,SÑ,SÔTÙ+¬E¯I©I¯N©N×,MÑ,M×,UÑ,UÔVÙ+¬E¯I©I¯N©N×,LÑ,L×,TÑ,TÔUÙ+¬E¯I©I¯N©N×,NÑ,N×,VÑ,VÔWÙ+¬E¯I©I¯N©N×,?Ñ,?×,GÑ,GÔHà $Ð÷I$%÷ $%ñ $%ús   �H' 'H'ÁGH'È'H0c           	      ó¸   — t        «        t        || «       t        ||| «      \  }}}	}
|�t        |	|||«      }t	        | |||
||fi |¤ŽS t        | |||	|
||fi |¤ŽS r   )r‹   rg   rN   Ú_get_chunked_inputsÚ_chunked_vmapÚ
_flat_vmap)rC   rB   rY   Ú
randomnessÚ
chunk_sizer   r   rV   r&   r'   rL   Úchunks_flat_argss               r    Ú	vmap_implr“   5  s¡   € ÜÔÜ(¨°4Ô8Ü5LØ��tó6Ñ2€J�˜i¨ð ÐÜ.Ø�| Z°ó
Ðô ØØØØØØñ
ð ñ
ð 	
ô ØØØØØØØñ	ð ñ	ð 	r%   c                 óV   — | |z  x}}|g|z  }| |z  }|dk7  r|j                  |«       |S )Nr   )Úappend)Útotal_elemsr‘   Ún_chunksÚchunk_sizesÚ	remainders        r    Úget_chunk_sizesrš   W  sB   € Ø%¨Ñ3Ð3€HˆxØ�, Ñ)€Kà˜jÑ(€IØ�A‚~Ø×Ñ˜9Ô%ØÐr%   c                 ó²   ‡— |fŠ|�*t        ||«      }t        t        j                  |«      «      Št        ˆfd„t	        | |«      D «       «      }t	        |Ž }|S )Nc              3   ól   •K  — | ]+  \  }}|�|j                  ‰|¬«      n|gt        ‰«      z  –— Œ- y ­w©N)rK   )Útensor_splitr1   )r,   Útr4   Ú
split_idxss      €r    r/   z&_get_chunked_inputs.<locals>.<genexpr>g  sQ   øè ø€ ò ñ ˆAˆvð Ðð 	
�‰�z vˆÔ.ð ð
ô ˆj‹/ñó	ñùs   ƒ14)rš   r;   Ú	itertoolsÚ
accumulater0   )r'   r&   rV   r‘   r˜   Úflat_args_chunksr’   r    s          @r    r�   r�   a  sf   ø€ Ø�€JØÐÜ% j°*Ó=ˆÜœ9×/Ñ/°Ó<Ó=ˆ
äó ô ˜Y¨Ó5ôó Ðô Ð,Ð-ÐØÐr%   c                 óŠ   — g }d }| D ]&  }t        |«      \  }}|j                  |«       |�Œ%|}Œ( t        t        |Ž «      }||fS r   )r   r•   Úlistr0   )Úchunks_output_Úflat_chunks_outputÚarg_specÚoutputÚflat_outputÚ	arg_specsÚflat_output_chunkss          r    Ú_flatten_chunks_outputr­   w  sd   € ð ÐØ€HØ ò !ˆÜ!-¨fÓ!5Ñˆ�YØ×!Ñ! +Ô.ØÑØ ‰Hð	!ô œcÐ#5Ð6Ó7ÐØ˜xÐ'Ð'r%   c                 óÖ   — t        | |«      }t        |«      t        |«      k(  sJ ‚g }t        |«      D ]3  \  }}|j                  t	        j
                  ||   |¬«      «       d ||<   Œ5 |S r�   )r   r1   rJ   r•   r   Úcat)rY   r¨   r¬   r`   rª   ÚidxrW   s          r    Ú_concat_chunked_outputsr±   ˆ  sv   € ä-¨h¸ÓA€MÜˆ}Ó¤Ð%7Ó!8Ò8Ð8Ð8Ø€KÜ! -Ó0ò '‰ˆˆWØ×Ñœ5Ÿ9™9Ð%7¸Ñ%<À'ÔJÔKà"&Ð˜3Òð'ð
 Ðr%   c                 ó.  — g }|dk(  rt        j                  «       nd }|D ]L  }	t        ||	«      }
|
dk(  rŒ|�t        j                  |«       |j	                  t        | |
||	|||fi |¤Ž«       ŒN t        |«      \  }}~t        |||«      }t        ||«      S )NÚsamer   )	r   Úget_rng_stater6   Úset_rng_stater•   r�   r­   r±   r   )rC   r&   r’   rL   rY   r�   r   Úchunks_outputÚrsr'   rV   r¬   r¨   rª   s                 r    rŽ   rŽ   –  sÆ   € ð €MØ",°Ò"6Œ×	Ñ	Ô	¸D€BØ%ò 
ˆ	Ü1°,À	ÓJˆ
ð ˜Š?Øàˆ>Ü×Ñ Ô#Ø×ÑÜØØØØØØØñ	ð ñ	õ	
ð%
ô> $:¸-Ó#HÑ Ð˜ð 	ô *¨(°HÐ>PÓQ€Kô ˜+ xÓ0Ð0r%   c                 ó(   — | dvrt        d| › �«      ‚y )N)ÚerrorÚ	differentr³   zLOnly allowed values for randomness are 'error', 'different', or 'same'. Got )rv   )r�   s    r    Ú_check_randomness_argr»   È  s)   € ØÐ7Ñ7ÜØZÐ[eÐZfÐgó
ð 	
ð 8r%   c              #   ó`   K  — 	 t        | |«      }|–— t        «        y # t        «        w xY w­wr   )r   r   )rV   r�   rO   s      r    Úvmap_increment_nestingr½   Ï  s*   è ø€ ð"Ü,¨Z¸ÓDˆ
ØÒäÕ!øÔÕ!üs   ‚.„ ”.Ÿ+«.c                 ó�   — t        ||«      5 }t        ||||«      }	 | |	i |¤Ž}
t        |
|||| «      cd d d «       S # 1 sw Y   y xY wr   )r½   rR   rb   )rC   rV   r&   r'   rL   rY   r�   r   rO   rQ   r7   s              r    r�   r�   Ø  s^   € ô 
  
¨JÓ	7ð X¸:Ü/Ø˜) Z°ó
ˆñ  Ð9°&Ñ9ˆÜ˜°¸*ÀjÐRVÓW÷X÷ Xò Xús	   �%<¼Ac                 ó   ‡ ‡‡‡— ˆˆ ˆˆfd„}|S )Nc                  óŠ   •— t        ‰‰«      5 }t        | ‰|«      } ‰|i |¤Ž}t        ||«      cd d d «       S # 1 sw Y   y xY wr   )r½   Úwrap_batchedÚunwrap_batched)	r   r   rO   rQ   r7   rV   rC   rB   r�   s	        €€€€r    Úinnerzrestore_vmap.<locals>.innerø  sK   ø€ Ü# J°
Ó;ð 	?¸zÜ)¨$°¸ÓDˆNÙ" NÐ=°fÑ=ˆOÜ! /°:Ó>÷	?÷ 	?ò 	?ús	   Ž!9¹Ar+   )rC   rB   rV   r�   rÃ   s   ```` r    Úrestore_vmaprÄ   ÷  s   û€ ÷?ð €Lr%   c                 ó^   — t        | «      \  }}t        ||«      }|€J ‚t        ||||«      }|S r   )r   r   rR   )r   ÚbdimsÚlevelr'   ÚspecÚ
flat_bdimsÚresults          r    rÁ   rÁ     s=   € Ü" 4Ó(�O€IˆtÜ*¨5°$Ó7€JØÐ!Ð!Ð!Ü# J°	¸5À$ÓG€FØ€Mr%   c                 ó<  — t        | «      \  }}t        |«      dk(  r| dfS |D �cg c]J  }t        |t        j                  «      r*t        j
                  j                  j                  ||«      n|d f‘ŒL }}t        |Ž \  }}t        ||«      t        ||«      fS c c}w )Nr   r+   )
r   r1   r:   r   r
   Ú_CÚ
_functorchrb   r0   r   )r   rÇ   r'   rÈ   r5   rÊ   r©   rÆ   s           r    rÂ   rÂ   	  s¦   € Ü" 4Ó(�O€IˆtÜ
ˆ9ƒ~˜ÒØ�Rˆxˆð
 ö	ð ô �cœ5Ÿ<™<Ô(ô 	�‰×Ñ×+Ñ+¨C°Ô7à�4ˆ[ñ	ð€Fð ô ˜�L�M€FˆEÜ˜& $Ó'¬¸¸tÓ)DÐDÐDùòs   ¥AB)<Ú
contextlibr"   r¡   r{   Ú	threadingr   Útypingr   r   r   r   r   r	   r   r
   Útorch._C._functorchr   r   r   r   r   Útorch.utils._pytreer   r   r   r   r   rG   Ú	in_dims_tÚ
out_dims_tr$   r6   r<   ÚstrrA   rN   rR   rX   rb   re   rg   rH   ry   ÚLockrz   rt   r‹   r“   rš   r�   r­   r±   rŽ   r»   Úcontextmanagerr½   r�   rÄ   rÁ   rÂ   r+   r%   r    ú<module>rØ      sG  ðó Û Û Û 	Û Ý ß >× >ã Ý ÷õ ÷õ ð �#�u�*Ñ€	Ø�3˜˜c 3˜h™Ð'Ñ(€
òðØ�x ‘}Ñ%ðØ26ðàóð$ %¨°°f¸c°kÑ0BÐ(BÑ"Cð Èó ðØðØ!ðØ9AÀ"ÀcÀ'Ñ9Jðà
óð7Øð7Ø#ð7Ø+3ð7à
ˆ3��S‘	˜4 ™9 hÐ.Ñ/ó7ð|5Ø�s‘)ð5Ø(,¨S©	ð5Ø?Bð5à
ó5òNð.'5Ø˜6 5¨°¨Ñ#5Ð5Ñ6ð'5àð'5ð ð'5ð ð	'5ð
 ð'5ð ó'5òT	ðS°:ð SÀXð SÐRVó Sð�Hó ð Ð Ø$�i—n‘nÓ&Ð ØÐ ò
)%òXòDòò,(ò"
ò.1òd
ð ×Ññ"ó ð"òXò>òóEr%   