§
    ‚ŠtjY:  ã                  ó^  — d dl mZ d dlZd dl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  ej        e¦  «        Z e¦   «         Z G d„ d	e¦  «        Ze G d
„ d¦  «        ¦   «         Zd#d„Zd$d„Zd$d„Zd%d„Zd&d„Zd'd„Zd(d„Z G d„ ded         ¦  «        Zd)d „Z G d!„ d"¦  «        Z dS )*é    )ÚannotationsN)ÚIterableÚSequence)Ú	dataclass)ÚTYPE_CHECKINGÚAny)Úlogging)ÚPreTrainedConfigc                  ó   — e Zd ZdZdS )Ú%AmbiguousGlobalPerLayerAttributeErrorzMRaised when a per-layer attribute is read from a heterogeneous global config.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úy/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/integrations/heterogeneity/configuration_utils.pyr   r   #   s   € € € € € ØWÐWÐWÐWr   r   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )Ú_HeterogeneitySpecúdict[int, dict[str, Any]]Úper_layer_overridesúset[str]Úper_layer_attributesÚexplicit_per_layer_attributesN)r   r   r   Ú__annotations__r   r   r   r   r   '   s6   € € € € € € à2Ð2Ð2Ñ2Ø"Ð"Ð"Ñ"Ø+Ð+Ð+Ñ+Ð+Ð+r   r   Úlayer_overridesúdict[str, Any]Úreturnc                óh  — t          j        | ¦  «        }d|v r™|                     d¦  «        }t          |t          ¦  «        st          |t
          ¦  «        st          d¦  «        ‚t          |¦  «        }t          d„ |D ¦   «         ¦  «        st          d¦  «        ‚|rt          |¦  «        |d<   |S )NÚskipz&`skip` must be an iterable of strings.c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S ©N)Ú
isinstanceÚstr)Ú.0Úitems     r   ú	<genexpr>z-_normalize_layer_overrides.<locals>.<genexpr>7   s,   è è € Ð:Ð:¨T•:˜d¥CÑ(Ô(Ð:Ð:Ð:Ð:Ð:Ð:r   z!`skip` must contain only strings.)
ÚcopyÚdeepcopyÚpopr#   r$   r   Ú	TypeErrorÚsetÚallÚsorted)r   Ú
normalizedr    s      r   Ú_normalize_layer_overridesr0   .   s¹   € Ý”˜Ñ/Ô/€Jà�ÐÐØ�~Š~˜fÑ%Ô%ˆÝ�d�CÑ Ô ð 	F­
°4½Ñ(BÔ(Bð 	FÝÐDÑEÔEÐEå�4‰yŒyˆÝÐ:Ð:°TÐ:Ñ:Ô:Ñ:Ô:ð 	AÝÐ?Ñ@Ô@Ð@àð 	.Ý!'¨¡¤ˆJ�vÑàÐr   Úconfigr
   r   r   ÚNonec                ój   ‡— |sd S | j         Šˆfd„|D ¦   «         }|rt          d‰› d|› d�¦  «        ‚d S )Nc                ó,   •— g | ]}|d k     s|‰k    ¯|‘ŒS )r   r   )r%   Ú	layer_idxÚnum_hidden_layerss     €r   ú
<listcomp>z+_validate_layer_indices.<locals>.<listcomp>E   s3   ø€ ð ð ð Ø¸)Àaº-¸-È9ÐXiÒKiÐKiˆ	ÐKiÐKiÐKir   zG`per_layer_config` keys must be integer layer indices in the range [0, z); got ú.)r6   Ú
ValueError)r1   r   Úinvalid_layer_indicesr6   s      @r   Ú_validate_layer_indicesr;   @   sŒ   ø€ Øð ØˆàÔ0Ððð ð ð Ø#6ðñ ô Ðð ð 
Ýð,ÐVgð ,ð ,Ø(ð,ð ,ð ,ñ
ô 
ð 	
ð
ð 
r   c                óh  — g }t          | j        ¦  «        D ]…}|                     |i ¦  «        }|                     d|                      dd ¦  «        ¦  «        }|                     d|                      dd ¦  «        ¦  «        }|�|�|                     |¦  «         Œ†|rt          d|› d�¦  «        ‚d S )NÚsliding_windowÚattention_chunk_sizezkThe following layers have the mutually exclusive `sliding_window` and `attention_chunk_size` both defined: z‘. To fix this, either remove a conflicting attribute from the global config,or set it to `None` in `per_layer_config` for the problematic layers.)Úranger6   ÚgetÚ)_getattr_without_heterogeneous_validationÚappendr9   )r1   r   Úproblematic_indicesr5   r   r=   r>   s          r   Ú1_validate_sliding_window_and_attention_chunk_sizerD   O   s÷   € ð ÐÝ˜6Ô3Ñ4Ô4ð 2ð 2ˆ	Ø-×1Ò1°)¸RÑ@Ô@ˆà(×,Ò,Ø˜f×NÒNÐO_ÐaeÑfÔfñ
ô 
ˆð  /×2Ò2Ø"Ø×<Ò<Ð=SÐUYÑZÔZñ 
ô  
Ðð
 Ð%Ð*>Ð*JØ×&Ò& yÑ1Ô1Ð1øàð 
ÝðUØ"ðUð Uð Uñ
ô 
ð 	
ð
ð 
r   r   c                ó¤   — t          ¦   «         }|                      ¦   «         D ]}|                     |¦  «         Œ|                     d¦  «         |S )Nr    )r,   ÚvaluesÚupdateÚdiscard)r   r   r   s      r   Ú_get_per_layer_attributesrI   i   sX   € Ý%(¡U¤UÐØ.×5Ò5Ñ7Ô7ð 5ð 5ˆØ×#Ò# OÑ4Ô4Ð4Ð4à× Ò  Ñ(Ô(Ð(ØÐr   c                óð  — t          |¦  «        }t          ¦   «         }|D ]Œ}t          |¦  «        | j        k    r+|                      |¦  «        s|                     |¦  «         ŒE|                     ¦   «         D ]2}||vr,|                      |¦  «        s|                     |¦  «          nŒ3Œ�|r t          dt          |¦  «        › d�¦  «        ‚|D ]W}|                      |¦  «        sŒ|  	                    |¦  «        }|                     ¦   «         D ]}||v r||         |k    r||= ŒŒXt          |                     ¦   «         ¦  «        D ]
\  }}|s||= Œt          |¦  «        }t          |||¬¦  «        }	|	S )Nz&The following attributes are missing: zS
Please define them globally, or provide them for every layer in `per_layer_config`)r   r   r   )rI   r,   Úlenr6   Ú)_hasattr_without_heterogeneous_validationÚaddrF   r9   r.   rA   ÚlistÚitemsr   )
r1   r   r   Ú"missing_required_global_attributesÚattrr   Úglobal_valuer5   r   Úheterogeneity_specs
             r   Ú,_modify_config_and_create_heterogeneity_specrT   r   sü  € õ %>Ð>QÑ$RÔ$RÐ!õ *-©¬Ð&Ø-ð 	ð 	ˆÝÐ"Ñ#Ô# vÔ'?Ò?Ð?Ø×CÒCÀDÑIÔIð =Ø2×6Ò6°tÑ<Ô<Ð<øà#6×#=Ò#=Ñ#?Ô#?ð ð �Ø˜Ð.Ð.Ø!×KÒKÈDÑQÔQð EØ:×>Ò>¸tÑDÔDÐDØ�Eð /øð
 *ð 
Ýð vµVÐ<^Ñ5_Ô5_ð  vð  vð  vñ
ô 
ð 	
ð
 .ð *ð *ˆØ×?Ò?ÀÑEÔEð 	Øà×GÒGÈÑMÔMˆØ2×9Ò9Ñ;Ô;ð 	*ð 	*ˆOØ�Ð&Ð&¨?¸4Ô+@ÀLÒ+PÐ+PØ# DÐ)øð	*õ
 '+Ð+>×+DÒ+DÑ+FÔ+FÑ&GÔ&Gð /ð /Ñ"ˆ	�?Øð 	/Ø# IÐ.øå4Ð5HÑIÔIÐÝ+Ø/Ø1Ø&Cðñ ô Ðð Ðr   Úper_layer_configúdict[int | str, dict[str, Any]]c                ó¬   — d„ |                      ¦   «         D ¦   «         }t          | |¦  «         t          | |¦  «         t          | |¦  «        | _        dS )a  Register per-layer configuration overrides on a model config.

    In a heterogeneous model, individual layers can differ from the global config
    (e.g., different ``intermediate_size``, ``num_key_value_heads``, or entire
    sub-layers skipped via the ``skip`` attribute).

    This function validates the overrides and stores a ``_HeterogeneitySpec`` on ``config._heterogeneity_spec``.
    At model-init time, ``apply_heterogeneous_modeling`` reads this spec to patch
    each layer with its resolved config.

    Args:
        config: The global model config to modify in-place.
        per_layer_config: Mapping from layer index to a dictionary
            of attribute overrides. Only layers that differ from the global
            config need to be included.
    c                óN   — i | ]"\  }}t          |¦  «        t          |¦  «        “Œ#S r   )Úintr0   )r%   r5   r   s      r   ú
<dictcomp>z/_apply_heterogeneous_config.<locals>.<dictcomp>·   s=   € ð &ð &ð &á&ˆI�õ 	ˆI‰ŒÕ2°?ÑCÔCð&ð &ð &r   N)rO   r;   rD   rT   Ú_heterogeneity_spec)r1   rU   Únormalized_per_layer_overridess      r   Ú_apply_heterogeneous_configr]   ¢   sj   € ð*&ð &à*:×*@Ò*@Ñ*BÔ*Bð&ñ &ô &Ð"õ
 ˜FÐ$BÑCÔCÐCÝ5°fÐ>\Ñ]Ô]Ð]å!MÈfÐVtÑ!uÔ!u€FÔÐÐr   c                óþ   — t          j         | ¦  «        }|j                             dd ¦  «         |                     dg ¦  «        |_        |                     ¦   «         D ]\  }}|dk    rŒt          |||¦  «         Œ|S )Nr[   r    )r(   Ú__dict__r*   r@   r    rO   Úsetattr)r1   r   Úoutput_configrQ   Úvalues        r   Ú_get_layer_configrc   Â   s‹   € õ ”I˜fÑ%Ô%€MØÔ×ÒÐ4°dÑ;Ô;Ð;à(×,Ò,¨V°RÑ8Ô8€MÔà&×,Ò,Ñ.Ô.ð ,ð ,‰ˆˆeØ�6Š>ˆ>ØÝ�˜t UÑ+Ô+Ð+Ð+àÐr   c                  ó&   — e Zd Zdd„Zdd„Zdd„ZdS )Ú_PerLayerConfigViewr1   r
   r   r2   c                ó   — || _         d S r"   )Ú_config)Úselfr1   s     r   Ú__init__z_PerLayerConfigView.__init__Ô   s   € ØˆŒˆˆr   rY   c                ó   — | j         j        S r"   )rg   r6   ©rh   s    r   Ú__len__z_PerLayerConfigView.__len__×   s   € ØŒ|Ô-Ð-r   r5   úint | sliceú)PreTrainedConfig | list[PreTrainedConfig]c                óŒ  ‡ — t          |t          ¦  «        r5ˆ fd„t          |                     t	          ‰ ¦  «        ¦  «        Ž D ¦   «         S |dk     r|t	          ‰ ¦  «        z  }|dk     s|t	          ‰ ¦  «        k    rt          d¦  «        ‚‰ j        j        }t          ‰ j        |j	         
                    |i ¦  «        ¦  «        S )Nc                ó    •— g | ]
}‰|         ‘ŒS r   r   )r%   Úirh   s     €r   r7   z3_PerLayerConfigView.__getitem__.<locals>.<listcomp>Ü   s   ø€ ÐJÐJÐJ �D˜”GÐJÐJÐJr   r   zlist index out of range)r#   Úslicer?   ÚindicesrK   Ú
IndexErrorrg   r[   rc   r   r@   )rh   r5   rS   s   `  r   Ú__getitem__z_PerLayerConfigView.__getitem__Ú   sÂ   ø€ Ý�i¥Ñ'Ô'ð 	KØJÐJÐJÐJ¥U¨I×,=Ò,=½cÀ$¹i¼iÑ,HÔ,HÐ%IÐJÑJÔJÐJà�qŠ=ˆ=Ø�˜T™œÑ"ˆIØ�qŠ=ˆ=˜I­¨T©¬Ò2Ð2ÝÐ6Ñ7Ô7Ð7à!œ\Ô=ÐÝ ØŒLØÔ2×6Ò6°yÀ"ÑEÔEñ
ô 
ð 	
r   N)r1   r
   r   r2   )r   rY   )r5   rm   r   rn   )r   r   r   ri   rl   ru   r   r   r   re   re   Ó   sP   € € € € € ðð ð ð ð.ð .ð .ð .ð
ð 
ð 
ð 
ð 
ð 
r   re   c                óú   — | j         }i }t          | j        ¦  «        D ]\}t          j        |j                             |i ¦  «        ¦  «        }|j        D ]}||vr|                      |¦  «        ||<   Œ|r|||<   Œ]|S r"   )	r[   r?   r6   r(   r)   r   r@   r   rA   )r1   rS   Úexplicit_per_layer_overridesr5   r   rQ   s         r   Ú!_get_explicit_per_layer_overridesrx   ê   s¦   € ØÔ3ÐØ#%Ð å˜6Ô3Ñ4Ô4ð Fð Fˆ	Ýœ-Ð(:Ô(N×(RÒ(RÐS\Ð^`Ñ(aÔ(aÑbÔbˆà&ÔDð 	_ð 	_ˆDØ˜?Ð*Ð*Ø(.×(XÒ(XÐY]Ñ(^Ô(^� Ñ%øàð 	FØ6EÐ(¨Ñ3øà'Ð'r   c                  ó*  ‡ — e Zd ZdZdˆ fd„Zed d„¦   «         Zed!d
„¦   «         Zej        d"d„¦   «         Zed#d„¦   «         Z	ed d„¦   «         Z
e
j        d$d„¦   «         Z
ed d„¦   «         Zej        d$d„¦   «         Zd%d„Zd&d„Zefd'ˆ fd„Zd(d„Zˆ xZS ))ÚHeterogeneousConfigMixina_  Mixin for heterogeneous per-layer config behavior.

    This mixin owns heterogeneity-specific state and rules. ``PreTrainedConfig`` assigns the ``per_layer_config``
    property in the post-init phase and calls hook methods where heterogeneity needs to participate in the config lifecycle: attribute
    access, key iteration, and serialization.
    Úkeyr$   r   r   c           	     ót  •— t          ¦   «                              d¦  «                             d¦  «        }|�a||j        v rXt          ¦   «                              d¦  «        st	          d|› d|› d|› d�¦  «        ‚t
                               d|› d	�¦  «         t          ¦   «                              |¦  «        S )
Nr_   r[   Ú'allow_global_per_layer_attribute_accessú'z‹' is a per-layer attribute and may vary across layers. Access it via the individual layer configs instead (e.g. config.per_layer_config[i].z/). To read the global config value from config.zè anyway, set `allow_global_per_layer_attribute_access` to `True` on the config. Warning: only do this if the caller can safely handle heterogeneous configs; code that assumes a homogeneous model may use the global value incorrectly.z5Reading global config value for per-layer attribute `z¬` on a heterogeneous config. Only do this if the caller can safely handle heterogeneous configs; code that assumes a homogeneous model may use the global value incorrectly.)ÚsuperÚ__getattribute__r@   r   r   ÚloggerÚwarning_once)rh   r{   rS   Ú	__class__s      €r   r€   z)HeterogeneousConfigMixin.__getattribute__  sô   ø€ õ #™WœW×5Ò5°jÑAÔA×EÒEÐF[Ñ\Ô\ÐØÐ)ØÐ(Ô=Ð=Ð=Ý‘w”w×/Ò/Ð0YÑZÔZð Ý?ðU˜Cð Uð UØLOðUð Uà"%ðUð Uð Uñô ð õ ×#Ò#ðBÈCð Bð Bð Bñô ð õ ‰wŒw×'Ò'¨Ñ,Ô,Ð,r   Úboolc                ó"   — t          | d¦  «        S ©Nr[   )Úhasattrrk   s    r   Úis_heterogeneousz)HeterogeneousConfigMixin.is_heterogeneous  s   € å�tÐ2Ñ3Ô3Ð3r   ú!Sequence[PreTrainedConfig] | Nonec                ó2   — | j         sd S t          | ¦  «        S r"   )rˆ   re   rk   s    r   rU   z)HeterogeneousConfigMixin.per_layer_config  s    € àÔ$ð 	Ø�4Ý" 4Ñ(Ô(Ð(r   rU   ú&dict[int | str, dict[str, Any]] | Noner2   c                ód   — |€| j                              dd ¦  «         d S t          | |¦  «         d S r†   )r_   r*   r]   )rh   rU   s     r   rU   z)HeterogeneousConfigMixin.per_layer_config$  s=   € àÐ#ØŒM×ÒÐ3°TÑ:Ô:Ð:ØˆFå# DÐ*:Ñ;Ô;Ð;Ð;Ð;r   úset[str] | Nonec                ó,   — | j         sd S | j        j        S r"   )rˆ   r[   r   rk   s    r   r   z-HeterogeneousConfigMixin.per_layer_attributes,  s   € àÔ$ð 	Ø�4ØÔ'Ô<Ð<r   c                ó8   — | j                              dd¦  «        S )Nr}   F©r_   r@   rk   s    r   r}   z@HeterogeneousConfigMixin.allow_global_per_layer_attribute_access2  s   € àŒ}× Ò Ð!JÈEÑRÔRÐRr   rb   c                ó   — || j         d<   d S )Nr}   ©r_   ©rh   rb   s     r   r}   z@HeterogeneousConfigMixin.allow_global_per_layer_attribute_access6  s   € àCHˆŒÐ?Ñ@Ð@Ð@r   c                ó8   — | j                              dd¦  «        S )NÚ#serialize_explicit_per_layer_configFr�   rk   s    r   r•   z<HeterogeneousConfigMixin.serialize_explicit_per_layer_config:  s   € àŒ}× Ò Ð!FÈÑNÔNÐNr   c                ó   — || j         d<   d S )Nr•   r’   r“   s     r   r•   z<HeterogeneousConfigMixin.serialize_explicit_per_layer_config>  s   € à?DˆŒÐ;Ñ<Ð<Ð<r   ÚkeysúIterable[str]c              #  ó^   K  — | j         r| j        s|D ]}|| j        vr|V — Œd S |E d {V —† d S r"   )rˆ   r}   r   )rh   r—   r{   s      r   Ú/_iter_config_keys_with_heterogeneous_adjustmentzHHeterogeneousConfigMixin._iter_config_keys_with_heterogeneous_adjustmentB  se   è è € ð Ô ð 	¨Ô)Uð 	Øð ð �Ø˜dÔ7Ð7Ð7Ø�I�I�Iøðð ð ˆOˆOˆOˆOˆOˆOˆOˆOˆOr   Údr   c                óX  ‡— | j         sd S | j        rt          | ¦  «        }n| j        j        }|r_t          t          t          |                     ¦   «         ¦  «        ¦  «        ¦  «        Šˆfd„| 	                    ¦   «         D ¦   «         |d<   ni |d<   | 
                    dd ¦  «         d S )Nc                ó€   •— i | ]:\  }}t          |¦  «                             ‰¦  «        t          j        |¦  «        “Œ;S r   )r$   Úzfillr(   r)   )r%   r5   r   Ú
max_digitss      €r   rZ   zQHeterogeneousConfigMixin._update_heterogeneous_to_dict_output.<locals>.<dictcomp>X  sM   ø€ ð %ð %ð %á.�I˜õ �I‘”×$Ò$ ZÑ0Ô0µ$´-ÀÑ2PÔ2Pð%ð %ð %r   rU   r[   )rˆ   r•   rx   r[   r   rK   r$   Úmaxr—   rO   r*   )rh   r›   r   rŸ   s      @r   Ú$_update_heterogeneous_to_dict_outputz=HeterogeneousConfigMixin._update_heterogeneous_to_dict_outputL  sÓ   ø€ ØÔ$ð 	ØˆFàÔ3ð 	OÝ"CÀDÑ"IÔ"IÐÐà"&Ô":Ô"NÐàð 	'å�S¥Ð%8×%=Ò%=Ñ%?Ô%?Ñ!@Ô!@ÑAÔAÑBÔBˆJð%ð %ð %ð %à2E×2KÒ2KÑ2MÔ2Mð%ñ %ô %ˆAÐ Ñ!Ð!ð
 %'ˆAÐ Ñ!à	�ŠÐ# TÑ*Ô*Ð*Ð*Ð*r   Údefaultc                ó   •— |dk    rJ|t          ¦   «                              d¦  «        v r't          ¦   «                              d¦  «        |         }	 t          ¦   «                              |¦  «        S # t          $ r |t          u r‚ |cY S w xY w)NÚattribute_map)r   r€   ÚAttributeErrorÚ	_SENTINEL)rh   r{   r¢   rƒ   s      €r   rA   zBHeterogeneousConfigMixin._getattr_without_heterogeneous_validationa  s•   ø€ Ø�/Ò!Ð! c­U©W¬W×-EÒ-EÀoÑ-VÔ-VÐ&VÐ&VÝ‘'”'×*Ò*¨?Ñ;Ô;¸CÔ@ˆCð	Ý‘7”7×+Ò+¨CÑ0Ô0Ð0øÝð 	ð 	ð 	Ø�)Ð#Ð#ØØˆNˆNˆNð	øøøs   Á A4 Á4BÂBc                óV   — 	 |                       |¦  «         n# t          $ r Y dS w xY wdS )NFT)rA   r¥   )rh   r{   s     r   rL   zBHeterogeneousConfigMixin._hasattr_without_heterogeneous_validationl  sE   € ð	Ø×:Ò:¸3Ñ?Ô?Ð?Ð?øÝð 	ð 	ð 	Ø�5�5ð	øøøàˆts   ‚ ˜
&¥&)r{   r$   r   r   )r   r„   )r   r‰   )rU   r‹   r   r2   )r   r�   )rb   r„   r   r2   )r—   r˜   r   r˜   )r›   r   r   r2   )r{   r$   r¢   r   r   r   )r{   r$   r   r„   )r   r   r   r   r€   Úpropertyrˆ   rU   Úsetterr   r}   r•   rš   r¡   r¦   rA   rL   Ú__classcell__)rƒ   s   @r   rz   rz   û   sÉ  ø€ € € € € ðð ð-ð -ð -ð -ð -ð -ð. ð4ð 4ð 4ñ „Xð4ð ð)ð )ð )ñ „Xð)ð
 Ôð<ð <ð <ñ Ôð<ð ð=ð =ð =ñ „Xð=ð
 ðSð Sð Sñ „XðSð -Ô3ðIð Ið Iñ 4Ô3ðIð ðOð Oð Oñ „XðOð )Ô/ðEð Eð Eñ 0Ô/ðEðð ð ð ð+ð +ð +ð +ð* R[ð 	ð 	ð 	ð 	ð 	ð 	ð 	ðð ð ð ð ð ð ð r   rz   )r   r   r   r   )r1   r
   r   r   r   r2   )r   r   r   r   )r1   r
   r   r   r   r   )r1   r
   rU   rV   r   r2   )r1   r
   r   r   r   r
   )r1   r
   r   r   )!Ú
__future__r   r(   Úcollections.abcr   r   Údataclassesr   Útypingr   r   Útransformers.utilsr	   Útransformersr
   Ú
get_loggerr   r�   Úobjectr¦   ÚRuntimeErrorr   r   r0   r;   rD   rI   rT   r]   rc   re   rx   rz   r   r   r   ú<module>r´      s)  ðð  #Ð "Ð "Ð "Ð "Ð "à €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø !Ð !Ð !Ð !Ð !Ð !Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &ð ð .Ø-Ð-Ð-Ð-Ð-Ð-ð 
ˆÔ	˜HÑ	%Ô	%€àˆF‰HŒH€	ðXð Xð Xð Xð X¨Lñ Xô Xð Xð ð,ð ,ð ,ð ,ð ,ñ ,ô ,ñ „ð,ðð ð ð ð$
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð4 ð  ð  ð  ð-ð -ð -ð -ð`vð vð vð vð@ð ð ð ð"
ð 
ð 
ð 
ð 
˜(Ð#5Ô6ñ 
ô 
ð 
ð.(ð (ð (ð (ð"vð vð vð vð vñ vô vð vð vð vr   