§
    �ŠtjÓA  ã                    ón  — d dl 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
mZmZmZmZmZmZmZmZmZ ddgZ G d„ de¦  «        Zd	d
e› de
› de› de› de› d�z   e_        dee         dee         dee         dee         dee         dededededededededdfd„Zdee         dee         dee         dee         dee         dededededededededdfd„Z e	e¬¦  «        	 	 	 	 d"dee         dee         dee         dee         dee         ded edz  dedededededededdfd!„¦   «         ZdS )#é    )ÚAnyÚcastN)ÚTensoré   )Ú_capturable_docÚ_default_to_fused_or_foreachÚ_differentiable_docÚ_disable_dynamo_if_unsupportedÚ_foreach_docÚ!_get_capturable_supported_devicesÚ_get_scalar_dtypeÚ_maximize_docÚ_params_docÚ
_to_scalarÚ_use_grad_for_differentiableÚ_view_as_realÚ	OptimizerÚParamsTÚAdadeltaÚadadeltac                   óø   ‡ — e Zd Z	 	 	 	 	 dddddœded	eez  d
ededededz  dedededdfˆ fd„Zˆ fd„Zde	e
ef         dee         dee         dee         dee         dee         fd„Zedd„¦   «         Zˆ xZS )r   ç      ð?çÍÌÌÌÌÌì?ç�íµ ÷Æ°>r   NF)Ú
capturableÚmaximizeÚdifferentiableÚparamsÚlrÚrhoÚepsÚweight_decayÚforeachr   r   r   Úreturnc          	      ó¬  •— t          |t          ¦  «        r'|                     ¦   «         dk    rt          d¦  «        ‚d|k    st          d|› �¦  «        ‚d|cxk    rdk    sn t          d|› �¦  «        ‚d|k    st          d|› �¦  «        ‚d|k    st          d|› �¦  «        ‚||||||||	d	œ}
t	          ¦   «                              ||
¦  «         d S )
Nr   zTensor lr must be 1-elementg        zInvalid learning rate: r   zInvalid rho value: zInvalid epsilon value: zInvalid weight_decay value: )r   r    r!   r"   r   r   r#   r   )Ú
isinstancer   ÚnumelÚ
ValueErrorÚsuperÚ__init__)Úselfr   r   r    r!   r"   r#   r   r   r   ÚdefaultsÚ	__class__s              €úR/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/optim/adadelta.pyr*   zAdadelta.__init__   s  ø€ õ �b�&Ñ!Ô!ð 	< b§h¢h¡j¤j°A¢o oÝÐ:Ñ;Ô;Ð;Ø�bŠyˆyÝÐ;°rÐ;Ð;Ñ<Ô<Ð<Ø�cÐ Ð Ò Ð ˜SÒ Ð Ð Ð ÝÐ8°3Ð8Ð8Ñ9Ô9Ð9Ø�cŠzˆzÝÐ<°sÐ<Ð<Ñ=Ô=Ð=Ø�lÒ"Ð"ÝÐJ¸LÐJÐJÑKÔKÐKð ØØØ(Ø Ø$ØØ,ð	
ð 	
ˆõ 	‰Œ×Ò˜ Ñ*Ô*Ð*Ð*Ð*ó    c                 óŒ  •— t          ¦   «                              |¦  «         | j        D �]}|                     dd ¦  «         |                     dd¦  «         |                     dd¦  «         |                     dd¦  «         |d         D ]´}| j                             |g ¦  «        }t          |¦  «        dk    r„t          j        |d         ¦  «        sjt          |d         ¦  «        }|d         r(t          j
        |t          ¦   «         |j        ¬	¦  «        n!t          j
        |t          ¦   «         ¬
¦  «        |d<   Œµ�Œd S )Nr#   r   Fr   r   r   r   Ústep©ÚdtypeÚdevice©r3   )r)   Ú__setstate__Úparam_groupsÚ
setdefaultÚstateÚgetÚlenÚtorchÚ	is_tensorÚfloatÚtensorr   r4   )r+   r9   ÚgroupÚpÚp_stateÚstep_valr-   s         €r.   r6   zAdadelta.__setstate__A   sO  ø€ Ý‰Œ×Ò˜UÑ#Ô#Ð#ØÔ&ð 	ñ 	ˆEØ×Ò˜Y¨Ñ-Ô-Ð-Ø×Ò˜Z¨Ñ/Ô/Ð/Ø×ÒÐ-¨uÑ5Ô5Ð5Ø×Ò˜\¨5Ñ1Ô1Ð1Ø˜8”_ð 
ð 
�Øœ*Ÿ.š.¨¨BÑ/Ô/�Ý�w‘<”< 1Ò$Ð$­U¬_¸WÀV¼_Ñ-MÔ-MÐ$Ý$ W¨V¤_Ñ5Ô5�Hð
 ! Ô.ðO�œØ$Õ,=Ñ,?Ô,?ÈÌðñ ô ð õ #œ\¨(Õ:KÑ:MÔ:MÐNÑNÔNð ˜F‘Oøñ	
ð	ð 	r/   r@   Úparams_with_gradÚgradsÚsquare_avgsÚ
acc_deltasÚstate_stepsc                 ó  — d}|d         D �]x}|j         €Œ|t          j        |¦  «        z  }|                     |¦  «         |j         j        rt          d¦  «        ‚|                     |j         ¦  «         | j        |         }	t          |	¦  «        dk    r›|d         r(t          j        dt          ¦   «         |j
        ¬¦  «        n!t          j        dt          ¦   «         ¬¦  «        |	d	<   t          j        |t          j        ¬
¦  «        |	d<   t          j        |t          j        ¬
¦  «        |	d<   |                     |	d         ¦  «         |                     |	d         ¦  «         |                     |	d	         ¦  «         �Œz|S )NFr   z*Adadelta does not support sparse gradientsr   r   © r2   r5   r1   )Úmemory_formatÚ
square_avgÚ	acc_delta)Úgradr<   Ú
is_complexÚappendÚ	is_sparseÚRuntimeErrorr9   r;   Úzerosr   r4   Ú
zeros_likeÚpreserve_format)
r+   r@   rD   rE   rF   rG   rH   Úhas_complexrA   r9   s
             r.   Ú_init_groupzAdadelta._init_groupT   sŽ  € ð ˆà�x”ð 	.ñ 	.ˆAØŒvˆ~ØØ�5Ô+¨AÑ.Ô.Ñ.ˆKØ×#Ò# AÑ&Ô&Ð&ØŒvÔð QÝ"Ð#OÑPÔPÐPØ�LŠL˜œÑ Ô Ð à”J˜q”MˆEõ �5‰zŒz˜QŠˆð ˜\Ô*ðD•E”K Õ*;Ñ*=Ô*=ÀaÄhÐOÑOÔOÐOåœ RÕ/@Ñ/BÔ/BÐCÑCÔCð �f‘õ ',Ô&6Ø¥UÔ%:ð'ñ 'ô '��lÑ#õ &+Ô%5Ø¥UÔ%:ð&ñ &ô &��kÑ"ð ×Ò˜u \Ô2Ñ3Ô3Ð3Ø×Ò˜e KÔ0Ñ1Ô1Ð1Ø×Ò˜u Vœ}Ñ-Ô-Ð-Ñ-àÐr/   c                 ó¼  — |                       ¦   «          d}|�5t          j        ¦   «         5   |¦   «         }ddd¦  «         n# 1 swxY w Y   | j        D ]†}g }g }g }g }g }|d         |d         |d         |d         |d         |d         |d         |d	         f\  }	}
}}}}}}|                      ||||||¦  «        }t          ||||||	|
|||||||¬
¦  «         Œ‡|S )z°Perform a single optimization step.

        Args:
            closure (Callable, optional): A closure that reevaluates the model
                and returns the loss.
        Nr   r    r!   r"   r#   r   r   r   )	r   r    r!   r"   r#   r   r   r   rV   )Ú'_accelerator_graph_capture_health_checkr<   Úenable_gradr7   rW   r   )r+   ÚclosureÚlossr@   rD   rE   rF   rG   rH   r   r    r!   r"   r#   r   r   r   rV   s                     r.   r1   zAdadelta.step   s”  € ð 	×4Ò4Ñ6Ô6Ð6àˆØÐÝÔ"Ñ$Ô$ð !ð !Ø�w‘y”y�ð!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !ð Ô&ð -	ð -	ˆEØ-/ÐØ"$ˆEØ(*ˆKØ')ˆJØ(*ˆKð �d”Ø�e”Ø�e”Ø�nÔ%Ø�iÔ Ø�jÔ!ØÐ&Ô'Ø�lÔ#ð	ñ	ØØØØØØØØð ×*Ò*ØÐ'¨°¸ZÈñô ˆKõ Ø ØØØØØØØØ)ØØ!Ø-Ø%Ø'ðñ ô ð ð ð" ˆs   ¬AÁAÁ
A)r   r   r   r   N©N)Ú__name__Ú
__module__Ú__qualname__r   r>   r   Úboolr*   r6   ÚdictÚstrr   ÚlistrW   r   r1   Ú__classcell__)r-   s   @r.   r   r      sx  ø€ € € € € ð !ØØØØ#ð"+ð !ØØ$ð"+ð "+ð "+àð"+ð �F‰Nð"+ð ð	"+ð
 ð"+ð ð"+ð ˜‘ð"+ð ð"+ð ð"+ð ð"+ð 
ð"+ð "+ð "+ð "+ð "+ð "+ðHð ð ð ð ð&)à�C˜�HŒ~ð)ð ˜vœ,ð)ð �FŒ|ð	)ð
 ˜&”\ð)ð ˜”Lð)ð ˜&”\ð)ð )ð )ð )ðV "ð=ð =ð =ñ "Ô!ð=ð =ð =ð =ð =r/   a  Implements Adadelta algorithm.

    .. math::
       \begin{aligned}
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{input}      : \gamma \text{ (lr)}, \: \theta_0 \text{ (params)},
                \: f(\theta) \text{ (objective)}, \: \rho \text{ (decay)},
                \: \lambda \text{ (weight decay)}                                                \\
            &\textbf{initialize} :  v_0  \leftarrow 0 \: \text{ (square avg)},
                \: u_0 \leftarrow 0 \: \text{ (accumulate variables)}                     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                                 \\
            &\textbf{for} \: t=1 \: \textbf{to} \: \ldots \: \textbf{do}                         \\
            &\hspace{5mm}g_t           \leftarrow   \nabla_{\theta} f_t (\theta_{t-1})           \\
            &\hspace{5mm}if \: \lambda \neq 0                                                    \\
            &\hspace{10mm} g_t \leftarrow g_t + \lambda  \theta_{t-1}                            \\
            &\hspace{5mm} v_t      \leftarrow v_{t-1} \rho + g^2_t (1 - \rho)                    \\
            &\hspace{5mm}\Delta x_t    \leftarrow   \frac{\sqrt{u_{t-1} +
                \epsilon }}{ \sqrt{v_t + \epsilon}  }g_t \hspace{21mm}                           \\
            &\hspace{5mm} u_t  \leftarrow   u_{t-1}  \rho +
                 \Delta x^2_t  (1 - \rho)                                                        \\
            &\hspace{5mm}\theta_t      \leftarrow   \theta_{t-1} - \gamma  \Delta x_t            \\
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
            &\bf{return} \:  \theta_t                                                     \\[-1.ex]
            &\rule{110mm}{0.4pt}                                                          \\[-1.ex]
       \end{aligned}

    For further details regarding the algorithm we refer to `ADADELTA: An Adaptive Learning Rate Method`_.
    z
    Args:
        ar  
        lr (float, Tensor, optional): coefficient that scale delta before it is applied
            to the parameters (default: 1.0)
        rho (float, optional): coefficient used for computing a running average
            of squared gradients (default: 0.9). A higher value of `rho` will
            result in a slower average, which can be helpful for preventing
            oscillations in the learning process.
        eps (float, optional): term added to the denominator to improve
            numerical stability (default: 1e-6).
        weight_decay (float, optional): weight decay (L2 penalty) (default: 0)
        z	
        zd

    .. _ADADELTA\: An Adaptive Learning Rate Method:
        https://arxiv.org/abs/1212.5701

    r   rE   rF   rG   rH   r   r    r!   r"   r   r   r   rV   r$   c                óÀ  ‡— t           j                             ¦   «         sP|rNt          d¬¦  «        Št	          ˆfd„t          | |d¬¦  «        D ¦   «         ¦  «        st          d‰› d�¦  «        ‚t           j                             ¦   «         st          |¦  «        }t          | ||||d¬¦  «        D �]ª\  }}}}}|dz  }|	s|n| }|d	k    r| 
                    ||¬
¦  «        }t          j        |¦  «        r<t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }|                     |¦  «                             ||d|z
  ¬¦  «         | 
                    |¦  «                             ¦   «         }| 
                    |¦  «                             ¦   «         }|
r|                     ¦   «         }|                     |¦  «                             |¦  «         |                     |¦  «                             ||d|z
  ¬¦  «         t          j        |¦  «        rt          j        |¦  «        }|                     || ¬
¦  «         �Œ¬d S )NF©Úsupports_xlac              3   ón   •K  — | ]/\  }}|j         j        |j         j        k    o|j         j        ‰v V — Œ0d S r]   ©r4   Útype©Ú.0rA   r1   Úcapturable_supported_devicess      €r.   ú	<genexpr>z*_single_tensor_adadelta.<locals>.<genexpr>
  ó]   øè è € ð 
ð 
ñ ��4ð ŒHŒM˜Tœ[Ô-Ò-ð >Ø””Ð!=Ð=ð
ð 
ð 
ð 
ð 
ð 
r/   T©ÚstrictúIIf capturable=True, params and state_steps must be on supported devices: ú.r   r   ©Úalpha©Úvalue)r<   ÚcompilerÚis_compilingr   ÚallÚzipÚAssertionErrorÚjitÚis_scriptingr   ÚaddrO   Úview_as_realÚmul_Úaddcmul_Úsqrt_ÚcloneÚdiv_Úview_as_complexÚadd_)r   rE   rF   rG   rH   r   r    r!   r"   r   r   r   rV   ÚparamrN   rL   rM   r1   ÚstdÚdeltarn   s                       @r.   Ú_single_tensor_adadeltarŒ   õ   sŠ  ø€ õ" Œ>×&Ò&Ñ(Ô(ð ¨Zð Ý'HØð(
ñ (
ô (
Ð$õ ð 
ð 
ð 
ð 
õ ˜v {¸4Ð@Ñ@Ô@ð
ñ 
ô 
ñ 
ô 
ð 	õ
 !Ø{Ð\xÐ{Ð{Ð{ñô ð õ Œ9×!Ò!Ñ#Ô#ð Ý˜‰^Œ^ˆå47Ø��{ J°ÀDð5ñ 5ô 5ð %ñ %Ñ0ˆˆt�Z ¨Dð 	�‰	ˆØ#Ð.ˆtˆt¨$¨ˆà˜1ÒÐØ—8’8˜E¨�8Ñ6Ô6ˆDåÔ˜EÑ"Ô"ð 	,ÝÔ+¨JÑ7Ô7ˆJÝÔ*¨9Ñ5Ô5ˆIÝÔ% dÑ+Ô+ˆDà�Š˜ÑÔ×%Ò% d¨D¸¸C¹Ð%Ñ@Ô@Ð@Ø�nŠn˜SÑ!Ô!×'Ò'Ñ)Ô)ˆØ—’˜cÑ"Ô"×(Ò(Ñ*Ô*ˆØð 	"Ø—K’K‘M”MˆEØ�
Š
�3‰Œ×Ò˜TÑ"Ô"Ð"Ø�Š�sÑÔ×$Ò$ U¨E¸¸S¹Ð$ÑAÔAÐAåÔ˜EÑ"Ô"ð 	1ÝÔ)¨%Ñ0Ô0ˆEØ�
Š
�5  ˆ
Ñ$Ô$Ð$Ñ$ð1%ð %r/   c                ó  ‡— |
rt          d¦  «        ‚t          j                             ¦   «         sP|rNt	          d¬¦  «        Št          ˆfd„t          | |d¬¦  «        D ¦   «         ¦  «        st          d‰› d�¦  «        ‚t          | ¦  «        d	k    rd S t          |¦  «        }t          j
        | ||||g¦  «        }|                     ¦   «         D �]¶\  \  }}}}}}t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          t          t                   |¦  «        }t          t          t                   |¦  «        }|rt          ||||¦  «         t          j                             ¦   «         s9|d	         j        r,t          j        |t          j        d
d¬¦  «        d
¬¦  «         nt          j        |d¦  «         |	rt          j        |¦  «        }|d	k    r1|	rt          j        |||¬¦  «         nt          j        |||¬¦  «        }t          j        ||¦  «         t          j        |||d|z
  ¬¦  «         t          j        ||¦  «        }t          j        |¦  «         t          j        ||¦  «        }t          j        |¦  «         t          j        ||¦  «         t          j        ||¦  «         t          j        ||¦  «         t          j        |||d|z
  ¬¦  «         |rGt3          |t          j        ¦  «        r-t          j        || ¦  «         t          j        ||¦  «         �Œžt          j        ||| ¬¦  «         �Œ¸d S )Nz#_foreach ops don't support autogradFrg   c              3   ón   •K  — | ]/\  }}|j         j        |j         j        k    o|j         j        ‰v V — Œ0d S r]   rj   rl   s      €r.   ro   z)_multi_tensor_adadelta.<locals>.<genexpr>I  rp   r/   Trq   rs   rt   r   r   Úcpu)r4   ru   r   rw   )r}   r<   ry   rz   r   r{   r|   r;   r   r   Ú"_group_tensors_by_device_and_dtypeÚvaluesr   rd   r   r   Úis_cpuÚ_foreach_add_r?   Ú_foreach_negÚ_foreach_addÚ_foreach_mul_Ú_foreach_addcmul_Ú_foreach_sqrt_Ú_foreach_div_r&   )r   rE   rF   rG   rH   r   r    r!   r"   r   r   r   rV   Úgrouped_tensorsÚdevice_params_Údevice_grads_Údevice_square_avgs_Údevice_acc_deltas_Údevice_state_steps_Ú_Údevice_paramsÚdevice_gradsÚdevice_square_avgsÚdevice_acc_deltasÚdevice_state_stepsrŠ   Údeltasrn   s                              @r.   Ú_multi_tensor_adadeltar§   1  só  ø€ ð  ð DÝÐBÑCÔCÐCõ Œ>×&Ò&Ñ(Ô(ð ¨Zð Ý'HØð(
ñ (
ô (
Ð$õ ð 
ð 
ð 
ð 
õ ˜v {¸4Ð@Ñ@Ô@ð
ñ 
ô 
ñ 
ô 
ð 	õ
 !Ø{Ð\xÐ{Ð{Ð{ñô ð õ ˆ6�{„{�aÒÐØˆå	�B‰Œ€BåÔBØ	�˜ Z°Ð=ñô €Oð ×"Ò"Ñ$Ô$ð>Bñ >Bñ 		ñ 	ØØØØØØÝ�T¥&œ\¨>Ñ:Ô:ˆÝ�D¥œL¨-Ñ8Ô8ˆÝ!¥$¥v¤,Ð0CÑDÔDÐÝ ¥¥f¤Ð/AÑBÔBÐÝ!¥$¥v¤,Ð0CÑDÔDÐØð 	ÝØ˜|Ð-?ÐARñô ð õ Œ~×*Ò*Ñ,Ô,ð 	7Ð1CÀAÔ1FÔ1Mð 	7ÝÔØ"¥E¤L°¸UÐ$CÑ$CÔ$CÈ3ðñ ô ð ð õ ÔÐ 2°AÑ6Ô6Ð6àð 	<Ý Ô-¨lÑ;Ô;ˆLà˜1ÒÐàð ÝÔ# L°-À|ÐTÑTÔTÐTÐTå$Ô1Ø  -°|ð ñ  ô  �õ 	ÔÐ.°Ñ4Ô4Ð4ÝÔØ ¨lÀ!ÀcÁ'ð	
ñ 	
ô 	
ð 	
õ Ô Ð!3°SÑ9Ô9ˆÝÔ˜SÑ!Ô!Ð!åÔ#Ð$5°sÑ;Ô;ˆÝÔ˜VÑ$Ô$Ð$ÝÔ˜F CÑ(Ô(Ð(ÝÔ˜F LÑ1Ô1Ð1åÔÐ-¨sÑ3Ô3Ð3ÝÔÐ 1°6¸6ÈÈSÉÐQÑQÔQÐQð ð 	B�* R­¬Ñ6Ô6ð 	BÝÔ ¨¨Ñ,Ô,Ð,ÝÔ ¨vÑ6Ô6Ð6Ñ6åÔ ¨v¸b¸SÐAÑAÔAÐAÑAð}>Bð >Br/   )Úsingle_tensor_fnFr#   c	                ó¬  — t           j                             ¦   «         s(t          d„ |D ¦   «         ¦  «        st	          d¦  «        ‚|€t          | |d¬¦  «        \  }}|r-t           j                             ¦   «         rt	          d¦  «        ‚|r&t           j                             ¦   «         st          }nt          } || |||||	|
||||||¬¦  «         dS )zvFunctional API that performs Adadelta algorithm computation.

    See :class:`~torch.optim.Adadelta` for details.
    c              3   óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r]   )r&   r<   r   )rm   Úts     r.   ro   zadadelta.<locals>.<genexpr>¶  s?   è è € ð 5ð 5Ø()�
�1•e”lÑ#Ô#ð5ð 5ð 5ð 5ð 5ð 5r/   zPAPI has changed, `state_steps` argument must contain a list of singleton tensorsNF)Ú	use_fusedz6torch.jit.script not supported with foreach optimizers)r   r    r!   r"   r   r   r   rV   )
r<   ry   rz   r{   rR   r   r~   r   r§   rŒ   )r   rE   rF   rG   rH   r   r#   r   rV   r   r    r!   r"   r   r    Úfuncs                   r.   r   r   ›  s'  € õ6 Œ>×&Ò&Ñ(Ô(ð 
µð 5ð 5Ø-8ð5ñ 5ô 5ñ 2ô 2ð 
õ Ø^ñ
ô 
ð 	
ð
 €Ý1Ø�N¨eð
ñ 
ô 
‰
ˆˆ7ð ð U•5”9×)Ò)Ñ+Ô+ð UÝÐSÑTÔTÐTàð '•u”y×-Ò-Ñ/Ô/ð 'Ý%ˆˆå&ˆà€DØØØØØØØØØ!ØØ%ØØðñ ô ð ð ð r/   )FNFF)Útypingr   r   r<   r   Ú	optimizerr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Ú__all__r   Ú__doc__rd   r>   ra   rŒ   r§   r   rJ   r/   r.   ú<module>r²      sû  ðà Ð Ð Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð$ �zÐ
"€ðað að að að aˆyñ aô að aðJð8à	ðð ð 
ðð ð 
ðð ð 
ðð ð 
ðð ð ñ90ð 	Ô ðj9%Ø�ŒLð9%à�Œ<ð9%ð �f”ð9%ð �V”ð	9%ð
 �f”ð9%ð 	ð9%ð 
ð9%ð 
ð9%ð ð9%ð ð9%ð ð9%ð ð9%ð ð9%ð 
ð9%ð 9%ð 9%ð 9%ðxgBØ�ŒLðgBà�Œ<ðgBð �f”ðgBð �V”ð	gBð
 �f”ðgBð 	ðgBð 
ðgBð 
ðgBð ðgBð ðgBð ðgBð ðgBð ðgBð 
ðgBð gBð gBð gBðT  ÐÐ1HÐIÑIÔIð ØØ Øð=ð =Ø�ŒLð=à�Œ<ð=ð �f”ð=ð �V”ð	=ð
 �f”ð=ð ð=ð �D‰[ð=ð ð=ð ð=ð 	ð=ð 
ð=ð 
ð=ð  ð!=ð" ð#=ð$ 
ð%=ð =ð =ñ JÔIð=ð =ð =r/   