Ë
    ÛÓ^j5v  ã                   óv  — d dl Z d dlmZ d dlmZ d dlmZ d dlZd dlm	c m
Z d dlm	Z	 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZ ddlmZmZ ddlmZ ddlm Z m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+ e"e G d„ de «      «       «       Z, ed«       G d„ de	jZ                  «      «       Z. G d„ de	jZ                  «      Z/ddddej`                  fde1de1d e1d!e2d"e3d#ejh                  dz  d$ejj                  d%ejl                  fd&„Z7 G d'„ d(e	jZ                  «      Z8 G d)„ d*e	jZ                  «      Z9	 dId+e	jZ                  d,ejl                  d-ejl                  d.ejl                  d/ejl                  dz  d0e2d1e2fd2„Z: G d3„ d4e	jZ                  «      Z; G d5„ d6e«      Z< G d7„ d8e	jZ                  «      Z= G d9„ d:e	jZ                  «      Z>e" G d;„ d<e«      «       Z? e"d=¬>«       G d?„ d@e?«      «       Z@ e"dA¬>«       G dB„ dCe?«      «       ZAdDejl                  d%ejl                  fdE„ZBe" G dF„ dGe?«      «       ZCg dH¢ZDy)Jé    N)ÚCallable)Ú	dataclass)ÚAny)Únné   )Úinitialization)ÚACT2FN)Úuse_kernel_forward_from_hub)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚAimv2ConfigÚAimv2TextConfigÚAimv2VisionConfigc                   ó  — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   dZ	ej                  dz  ed<   dZ
ej                  dz  ed<   dZej                  dz  ed<   dZeed<   dZeed	<   d
ee   fd„Zy)ÚAimv2Outputa­  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `return_loss` is `True`):
        Contrastive loss for image-text similarity.
    logits_per_image (`torch.FloatTensor` of shape `(image_batch_size, text_batch_size)`):
        The scaled dot product scores between `image_embeds` and `text_embeds`. This represents the image-text
        similarity scores.
    logits_per_text (`torch.FloatTensor` of shape `(text_batch_size, image_batch_size)`):
        The scaled dot product scores between `text_embeds` and `image_embeds`. This represents the text-image
        similarity scores.
    text_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The text embeddings obtained by applying the projection layer to the pooled output of [`Aimv2TextModel`].
    image_embeds (`torch.FloatTensor` of shape `(batch_size, output_dim`):
        The image embeddings obtained by applying the projection layer to the pooled output of [`Aimv2VisionModel`].
    text_model_output (`BaseModelOutputWithPooling`):
        The output of the [`Aimv2TextModel`].
    vision_model_output (`BaseModelOutputWithPooling`):
        The output of the [`Aimv2VisionModel`].
    NÚlossÚlogits_per_imageÚlogits_per_textÚtext_embedsÚimage_embedsÚtext_model_outputÚvision_model_outputÚreturnc                 óB   — t        d„ | j                  «       D «       «      S )Nc              3   ó`   K  — | ]&  }t        |t        «      r|j                  «       n|–— Œ( y ­w©N)Ú
isinstancer   Úto_tuple)Ú.0Úvs     ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/aimv2/modeling_aimv2.pyú	<genexpr>z'Aimv2Output.to_tuple.<locals>.<genexpr>L   s$   è ø€ Ò^È1¤Z°´;Ô%?�Q—Z‘Z”\ÀQÓFÑ^ùs   ‚,.)ÚtupleÚvalues©Úselfs    r-   r*   zAimv2Output.to_tupleK   s   € ÜÑ^ÐPT×P[ÑP[ÓP]Ô^Ó^Ð^ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   r    r!   r"   r#   r   r$   r/   r   r*   © r3   r-   r   r   -   s�   … ñð& &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø15Ð�e×'Ñ'¨$Ñ.Ó5Ø04€O�U×&Ñ&¨Ñ-Ó4Ø,0€K�×"Ñ" TÑ)Ó0Ø-1€L�%×#Ñ# dÑ*Ó1Ø48ÐÐ1Ó8Ø6:ÐÐ3Ó:ð_˜% ™*ô _r3   r   ÚRMSNormc                   óh   ‡ — e Zd Zddeddfˆ fd„Zdej                  dej                  fd„Zd„ Zˆ xZ	S )	ÚAimv2RMSNormÚepsr%   Nc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)z;
        Aimv2RMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__r   Ú	Parameterr8   ÚonesÚweightÚvariance_epsilon)r2   Úhidden_sizer?   Ú	__class__s      €r-   rB   zAimv2RMSNorm.__init__Q   s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr3   Úhidden_statesc                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor8   Úfloat32ÚpowÚmeanÚrsqrtrF   rE   )r2   rI   Úinput_dtypeÚvariances       r-   ÚforwardzAimv2RMSNorm.forwardY   sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r3   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)r/   rE   ÚshaperF   r1   s    r-   Ú
extra_reprzAimv2RMSNorm.extra_repr`   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr3   )g�íµ ÷Æ°>)
r4   r5   r6   ÚfloatrB   r8   ÚTensorrV   rY   Ú__classcell__©rH   s   @r-   r>   r>   O   s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr3   r>   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚAimv2MLPc                 ó  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _	        t        j                  | j                  | j                  |j                  ¬«      | _
        t        |j                     | _        y )N©Úbias)rA   rB   ÚconfigrG   Úintermediate_sizer   ÚLinearÚmlp_biasÚ	gate_projÚup_projÚ	down_projr	   Ú
hidden_actÚact_fn©r2   rc   rH   s     €r-   rB   zAimv2MLP.__init__e   s¸   ø€ Ü‰ÑÔØˆŒØ!×-Ñ-ˆÔØ!'×!9Ñ!9ˆÔÜŸ™ 4×#3Ñ#3°T×5KÑ5KÐRX×RaÑRaÔbˆŒÜ—y‘y ×!1Ñ!1°4×3IÑ3IÐPV×P_ÑP_Ô`ˆŒÜŸ™ 4×#9Ñ#9¸4×;KÑ;KÐRX×RaÑRaÔbˆŒÜ˜V×.Ñ.Ñ/ˆ�r3   c                 óˆ   — | j                  | j                  | j                  |«      «      | j                  |«      z  «      }|S r(   )ri   rk   rg   rh   )r2   Úxri   s      r-   rV   zAimv2MLP.forwardo   s6   € Ø—N‘N 4§;¡;¨t¯~©~¸aÓ/@Ó#AÀDÇLÁLÐQRÃOÑ#SÓTˆ	ØÐr3   )r4   r5   r6   rB   rV   r\   r]   s   @r-   r_   r_   d   s   ø„ ô0ör3   r_   é   g     ˆÃ@FÚheightÚwidthÚ	embed_dimÚtemperatureÚ	cls_tokenÚdevicerN   r%   c                 ó,  — |dz  dk7  rt        d|› �«      ‚|dz  }t        j                  |t        j                  |¬«      |z  }d||z  z  }t        j                  | t        j                  |¬«      }	t        j                  |t        j                  |¬«      }
t        j                  |	|
d¬«      \  }	}
|	j                  «       j                  |«      }|
j                  «       j                  |«      }t        j                  |j                  «       |j                  «       |j                  «       |j                  «       gd¬	«      }|r>t        j                  t        j                  d|t        j                  |¬«      |gd¬	«      }|j                  |«      S )
a»  2D sinusoidal position embeddings for an image patch grid.

    Each (h, w) position gets an ``embed_dim``-dimensional vector laid out as
    ``[sin_h | cos_h | sin_w | cos_w]``, with row-major (H-outer) patch ordering.

    Args:
        height: Grid height in patches.
        width: Grid width in patches.
        embed_dim: Total embedding dimension; must be divisible by 4.
        temperature: Base for the frequency decay.
        cls_token: If `True`, prepend a zero row for a CLS token.
        device: Target device; defaults to CPU.
        dtype: Output dtype; frequency arithmetic uses float64 internally.

    Returns:
        Tensor of shape ``(height * width [+1], embed_dim)``.
    é   r   z(`embed_dim` must be divisible by 4, got ©rN   ru   g      ð?Úij)Úindexingr   ©Údim)Ú
ValueErrorr8   ÚarangeÚfloat64ÚmeshgridÚflattenÚouterÚcatÚsinÚcosÚzerosrO   )rp   rq   rr   rs   rt   ru   rN   Úpos_dimÚomegaÚgrid_hÚgrid_wÚemb_hÚemb_wÚ	pos_embeds                 r-   Ú&build_2d_sinusoidal_position_embeddingrŽ   t   s5  € ð4 �1�}˜ÒÜÐCÀIÀ;ÐOÓPÐPà˜1‰n€GÜ�L‰L˜¬¯©¸fÔEÈÑO€EØ�+˜uÑ$Ñ$€Eä�\‰\˜&¬¯©¸fÔE€FÜ�\‰\˜%¤u§}¡}¸VÔD€FÜ—^‘^ F¨F¸TÔB�N€FˆFà�N‰NÓ×"Ñ" 5Ó)€EØ�N‰NÓ×"Ñ" 5Ó)€Eä—	‘	˜5Ÿ9™9›;¨¯	©	«°U·Y±Y³[À%Ç)Á)Ã+ÐNÐTUÔV€IáÜ—I‘IœuŸ{™{¨1¨i¼u¿}¹}ÐU[Ô\Ð^gÐhÐnoÔpˆ	à�<‰<˜ÓÐr3   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚAimv2VisionEmbeddingsrc   c                 óB  •— t         ‰| �  «        || _        |j                  | _        t	        j
                  |j                  |j                  |j                  |j                  ¬«      | _        t        |j                  |j                  «      | _        |j                  |j                  z  dz  }| j                  j                  s%t	        j                  ||j                  «      | _        | j!                  dt#        j$                  |«      j'                  d«      d¬«       y )N)Úkernel_sizeÚstriderK   Úposition_ids©r   rL   F©Ú
persistent)rA   rB   rc   Ú
patch_sizer   ÚConv2dÚnum_channelsrG   Úpatch_embedr>   Úrms_norm_epsÚrms_normÚ
image_sizeÚ	is_nativeÚ	EmbeddingÚposition_embeddingÚregister_bufferr8   r~   Úexpand)r2   rc   Únum_patchesrH   s      €r-   rB   zAimv2VisionEmbeddings.__init__¥   sÜ   ø€ Ü‰ÑÔØˆŒØ ×+Ñ+ˆŒÜŸ9™9Ø×Ñ ×!3Ñ!3À×ARÑARÐ[a×[lÑ[lô
ˆÔô % V×%7Ñ%7¸×9LÑ9LÓMˆŒà×(Ñ(¨F×,=Ñ,=Ñ=À!ÑCˆØ�{‰{×$Ò$Ü&(§l¡l°;À×@RÑ@RÓ&SˆDÔ#Ø×Ñ˜^¬U¯\©\¸+Ó-F×-MÑ-MÈgÓ-VÐchÐÕir3   Úpixel_valuesr%   c                 óX  — |j                  «       \  }}}}| j                  |«      j                  d«      j                  dd«      }| j	                  |«      }| j
                  j                  r�t        || j                  z  || j                  z  | j
                  j                  |j                  |j                  ¬«      }|j                  d   dz  }t        j                  |d|d …f   |dd |…f   gd¬«      }|j                  d«      }n| j!                  | j"                  «      }||z   }|S )NrK   r   )rp   rq   rr   ru   rN   rL   .r{   r   )Úsizer›   r�   Ú	transposer�   rc   rŸ   rŽ   r˜   rG   ru   rN   rX   r8   rƒ   Ú	unsqueezer¡   r”   )r2   r¥   Ú_rp   rq   rI   r�   Úhalfs           r-   rV   zAimv2VisionEmbeddings.forward³   s  € Ø*×/Ñ/Ó1Ñˆˆ1ˆf�eØ×(Ñ(¨Ó6×>Ñ>¸qÓA×KÑKÈAÈqÓQˆØŸ™ mÓ4ˆà�;‰;× Ò Ü>Ø §¡Ñ0Ø˜tŸ™Ñ.ØŸ+™+×1Ñ1Ø$×+Ñ+Ø#×)Ñ)ôˆIð —?‘? 2Ñ&¨!Ñ+ˆDÜŸ	™	 9¨S°$±%¨ZÑ#8¸)ÀCÈÈ$ÈÀJÑ:OÐ"PÐVXÔYˆIØ!×+Ñ+¨AÓ.‰Ià×/Ñ/°×0AÑ0AÓBˆIà%¨	Ñ1ˆØÐr3   ©	r4   r5   r6   r   rB   r8   r[   rV   r\   r]   s   @r-   r�   r�   ¤   s-   ø„ ðjÐ0õ jð E§L¡Lð °U·\±\÷ r3   r�   c            	       ó¦   ‡ — e Zd Zdefˆ fd„Z	 	 	 d	dej                  dz  dej                  dz  dej                  dz  dej                  fd„Z	ˆ xZ
S )
ÚAimv2TextEmbeddingsrc   c                 óN  •— t         ‰| �  «        |j                  }t        j                  |j
                  |«      | _        t        j                  |j                  |«      | _        | j                  dt        j                  |j                  «      j                  d«      d¬«       y )Nr”   r•   Fr–   )rA   rB   rG   r   r    Ú
vocab_sizeÚtoken_embeddingÚmax_position_embeddingsr¡   r¢   r8   r~   r£   )r2   rc   rr   rH   s      €r-   rB   zAimv2TextEmbeddings.__init__Í   sƒ   ø€ Ü‰ÑÔØ×&Ñ&ˆ	ä!Ÿ|™|¨F×,=Ñ,=¸yÓIˆÔÜ"$§,¡,¨v×/MÑ/MÈyÓ"YˆÔð 	×ÑØœEŸL™L¨×)GÑ)GÓH×OÑOÐPWÓXÐejð 	õ 	
r3   NÚ	input_idsr”   Úinputs_embedsr%   c                 ó8  — |�|j                   d   n|j                   d   }| j                  j                  j                   d   }||kD  rt        d|› d|› �«      ‚|€| j                  d d …d |…f   }|€| j                  |«      }| j                  |«      }||z   }|S )NrL   éþÿÿÿr   zRSequence length must be less than max_position_embeddings (got `sequence length`: z and max_position_embeddings: )rX   r¡   rE   r}   r”   r±   )r2   r³   r”   r´   Ú
seq_lengthÚmax_position_embeddingÚposition_embeddingsÚ
embeddingss           r-   rV   zAimv2TextEmbeddings.forwardÙ   sÇ   € ð -6Ð,A�Y—_‘_ RÒ(À}×GZÑGZÐ[]ÑG^ˆ
Ø!%×!8Ñ!8×!?Ñ!?×!EÑ!EÀaÑ!HÐàÐ.Ò.ÜØdØ�,Ð<Ð=SÐ<TðVóð ð
 ÐØ×,Ñ,ªQ°°°¨^Ñ<ˆLàÐ Ø ×0Ñ0°Ó;ˆMà"×5Ñ5°lÓCÐØ"Ð%8Ñ8ˆ
àÐr3   ©NNN)r4   r5   r6   r   rB   r8   Ú
LongTensorr9   r[   rV   r\   r]   s   @r-   r®   r®   Ì   sj   ø„ ð

˜õ 

ð .2Ø04Ø26ñ	à×#Ñ# dÑ*ðð ×&Ñ&¨Ñ-ðð ×(Ñ(¨4Ñ/ð	ð
 
�‰÷r3   r®   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutc                 óÀ  — t        j                  ||j                  dd«      «      |z  }|�||z   }t        j                  j                  |dt         j                  ¬«      j                  |j                  «      }t        j                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )NrL   r¶   )r|   rN   )ÚpÚtrainingr   rK   )r8   Úmatmulr¨   r   Ú
functionalÚsoftmaxrP   rO   rN   rÃ   rÆ   Ú
contiguous)
r½   r¾   r¿   rÀ   rÁ   rÂ   rÃ   ÚkwargsÚattn_weightsÚattn_outputs
             r-   Úeager_attention_forwardrÎ   ô   sº   € ô —<‘<  s§}¡}°R¸Ó'<Ó=ÀÑG€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€Lä—,‘,˜|¨UÓ3€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r3   c            
       ó    ‡ — e Zd ZdZˆ fd„Z	 ddej                  dej                  dz  deej                  ej                  dz  f   fd„Zˆ xZ	S )	ÚAimv2Attentionz=Multi-headed attention from 'Attention Is All You Need' paperc                 óx  •— t         ‰| �  «        || _        |j                  | _        |j
                  | _        | j                  | j                  z  | _        | j                  | j                  z  | j                  k7  r&t        d| j                  › d| j                  › d�«      ‚| j                  dz  | _	        |j                  | _        d| _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _        y )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: z).g      à¿Fra   )rA   rB   rc   rG   rr   Únum_attention_headsÚ	num_headsÚhead_dimr}   ÚscaleÚattention_dropoutrÃ   Ú	is_causalr   re   Úqkv_biasÚk_projÚv_projÚq_projÚout_projrl   s     €r-   rB   zAimv2Attention.__init__  s2  ø€ Ü‰ÑÔØˆŒØ×+Ñ+ˆŒØ×3Ñ3ˆŒØŸ™¨$¯.©.Ñ8ˆŒØ�=‰=˜4Ÿ>™>Ñ)¨T¯^©^Ò;ÜØMÈdÏnÉnÐM]ð ^Ø—N‘NÐ# 2ð'óð ð —]‘] DÑ(ˆŒ
Ø×/Ñ/ˆŒØˆŒÜ—i‘i §¡°·±ÀVÇ_Á_ÔUˆŒÜ—i‘i §¡°·±ÀVÇ_Á_ÔUˆŒÜ—i‘i §¡°·±ÀVÇ_Á_ÔUˆŒÜŸ	™	 $§.¡.°$·.±.ÀvÇÁÔWˆ�r3   NrI   rÁ   r%   c           
      ó®  — |j                   dd }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }t        j                  | j                  j                  t        «      }	 |	| ||||| j                  | j                  | j                  sdn| j                  ¬«      \  }
} |
j                   g |¢d‘­Ž j#                  «       }
| j%                  |
«      }
|
|fS )z#Input shape: Batch x Time x ChannelNrL   r   rK   ç        )r×   rÂ   rÃ   )rX   rÔ   rÛ   Úviewr¨   rÙ   rÚ   r   Úget_interfacerc   Ú_attn_implementationrÎ   r×   rÕ   rÆ   rÃ   ÚreshaperÊ   rÜ   )r2   rI   rÁ   rË   Úinput_shapeÚhidden_shapeÚqueriesÚkeysr0   Úattention_interfacerÍ   rÌ   s               r-   rV   zAimv2Attention.forward!  s<  € ð $×)Ñ)¨#¨2Ð.ˆà8˜Ð8 bÐ8¨$¯-©-Ñ8ˆØ—+‘+˜mÓ,×1Ñ1°,Ó?×IÑIÈ!ÈQÓOˆØ�{‰{˜=Ó)×.Ñ.¨|Ó<×FÑFÀqÈ!ÓLˆØ—‘˜]Ó+×0Ñ0°Ó>×HÑHÈÈAÓNˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØØ—n‘nØ—J‘JØ#Ÿ}š}‘C°$·,±,ô	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—m‘m KÓ0ˆà˜LÐ(Ð(r3   r(   )
r4   r5   r6   r7   rB   r8   r[   r/   rV   r\   r]   s   @r-   rÐ   rÐ     sV   ø„ ÙGôXð, /3ñ!)à—|‘|ð!)ð Ÿ™ tÑ+ð!)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷!)r3   rÐ   c            	       óˆ   ‡ — e Zd Zdefˆ fd„Z	 d	dej                  dej                  dz  dee   dej                  fd„Z	ˆ xZ
S )
ÚAimv2EncoderLayerrc   c                 óö   •— t         ‰| �  «        t        |«      | _        t	        |«      | _        t        |j                  |j                  «      | _	        t        |j                  |j                  «      | _
        y r(   )rA   rB   rÐ   Ú	attentionr_   Úffnr>   rG   rœ   Ú	rms_norm1Ú	rms_norm2rl   s     €r-   rB   zAimv2EncoderLayer.__init__F  sZ   ø€ Ü‰ÑÔÜ'¨Ó/ˆŒÜ˜FÓ#ˆŒÜ% f×&8Ñ&8¸&×:MÑ:MÓNˆŒÜ% f×&8Ñ&8¸&×:MÑ:MÓNˆ�r3   NrI   rÁ   rË   r%   c                 ó°   — | j                  |«      } | j                  d||dœ|¤Ž\  }}||z   }| j                  |«      }| j                  |«      }||z   }|S )N)rI   rÁ   r;   )rí   rë   rî   rì   )r2   rI   rÁ   rË   Únorm_hidden_statesrÍ   rª   Ú
mlp_outputs           r-   rV   zAimv2EncoderLayer.forwardM  sl   € ð "Ÿ^™^¨MÓ:ÐØ'˜Ÿ™ÐrÐ6HÐYgÑrÐkqÑr‰ˆ�Qà%¨Ñ3ˆØ!Ÿ^™^¨MÓ:ÐØ—X‘XÐ0Ó1ˆ
à%¨
Ñ2ˆØÐr3   r(   )r4   r5   r6   r   rB   r8   r[   r   r   rV   r\   r]   s   @r-   ré   ré   E  sY   ø„ ðOÐ0õ Oð /3ñà—|‘|ðð Ÿ™ tÑ+ðð Ð+Ñ,ð	ð
 
�‰÷r3   ré   c                   ój   ‡ — e Zd ZdZdefˆ fd„Ze	 d	dej                  dz  de	e
   defd„«       Zˆ xZS )
ÚAimv2Encoderz¯
    Transformer encoder consisting of `config.num_hidden_layers` self attention layers. Each layer is a
    [`Aimv2EncoderLayer`].

    Args:
        config: Aimv2Config
    rc   c                 óÐ   •— t         ‰| �  «        || _        t        j                  t        |j                  «      D �cg c]  }t        |«      ‘Œ c}«      | _        d| _	        y c c}w )NF)
rA   rB   rc   r   Ú
ModuleListÚrangeÚnum_hidden_layersré   ÚlayersÚgradient_checkpointing)r2   rc   rª   rH   s      €r-   rB   zAimv2Encoder.__init__g  sO   ø€ Ü‰ÑÔØˆŒÜ—m‘mÌÈf×NfÑNfÓHgÖ$hÀ1Ô%6°vÕ%>Ò$hÓiˆŒØ&+ˆÕ#ùò %is   ½A#NrÁ   rË   r%   c                 óT   — |}| j                   D ]  } |||fi |¤Ž}Œ t        |¬«      S )N)Úlast_hidden_state)rø   r   )r2   r´   rÁ   rË   rI   Úencoder_layers         r-   rV   zAimv2Encoder.forwardn  sC   € ð &ˆØ!Ÿ[™[ò 	ˆMÙ)ØØñð ñ‰Mð	ô °Ô?Ð?r3   r(   )r4   r5   r6   r7   r   rB   r   r8   r[   r   r   r   rV   r\   r]   s   @r-   ró   ró   ^  s_   ø„ ñð,˜{õ ,ð ð /3ñ@ð Ÿ™ tÑ+ð@ð Ð+Ñ,ð	@ð
 
ò@ó ô@r3   ró   c                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚAimv2AttentionPoolingHeadrc   c                 ó&  •— t         ‰| �  «        |j                  | _        |j                  | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _	        t        j                  t        j                  dd| j                  «      «      | _        t        j                  | j                  | j                  d¬«      | _        y )Nra   r   T)rA   rB   rG   rÒ   rÓ   r   re   rØ   rÙ   rÚ   rC   r8   r†   rt   Úoutput_projrl   s     €r-   rB   z"Aimv2AttentionPoolingHead.__init__�  sµ   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔØ×3Ñ3ˆŒä—i‘i × 0Ñ 0°$×2BÑ2BÈÏÉÔYˆŒÜ—i‘i × 0Ñ 0°$×2BÑ2BÈÏÉÔYˆŒäŸ™¤e§k¡k°!°Q¸×8HÑ8HÓ&IÓJˆŒÜŸ9™9 T×%5Ñ%5°t×7GÑ7GÈdÔSˆÕr3   rI   r%   c                 óÐ  — |j                   \  }}}| j                  j                  |dd«      }| j                  |«      j	                  ||| j
                  || j
                  z  «      }| j                  |«      j	                  ||| j
                  || j
                  z  «      }|j	                  |d| j
                  || j
                  z  «      }|j                  dddd«      }|j                  dddd«      }|j                  dddd«      }t        j                  |||«      }	|	j                  dd«      j	                  |d|«      }	|	j                  d¬«      }	| j                  |	«      }
|
S )NrL   r   r   rK   r   r{   )rX   rt   r£   rÙ   râ   rÓ   rÚ   ÚpermuteÚFÚscaled_dot_product_attentionr¨   rR   r   )r2   rI   Ú
batch_sizeÚseq_lenÚ
hidden_dimrt   r¿   rÀ   r¾   rÍ   Úoutputs              r-   rV   z!Aimv2AttentionPoolingHead.forwardŒ  sH  € Ø*7×*=Ñ*=Ñ'ˆ
�G˜Zà—N‘N×)Ñ)¨*°b¸"Ó=ˆ	à�k‰k˜-Ó(×0Ñ0°¸WÀdÇnÁnÐV`Ðdh×drÑdrÑVrÓsˆØ—‘˜MÓ*×2Ñ2°:¸wÈÏÉÐXbÐfj×ftÑftÑXtÓuˆØ×!Ñ! *¨a°·±ÀÈtÏ~É~ÑA]Ó^ˆà�k‰k˜!˜Q  1Ó%ˆØ—‘˜a  A qÓ)ˆØ—‘˜a  A qÓ)ˆä×4Ñ4°U¸CÀÓGˆà!×+Ñ+¨A¨qÓ1×9Ñ9¸*ÀaÈÓTˆØ!×&Ñ&¨1Ð&Ó-ˆà×!Ñ! +Ó.ˆØˆr3   r¬   r]   s   @r-   rþ   rþ   €  s-   ø„ ð	TÐ0õ 	Tð U§\¡\ð °e·l±l÷ r3   rþ   c                   óv   ‡ — e Zd ZU dZeed<   dZdZdZg d¢Z	dZ
dZdZ ej                  «       ˆ fd„«       Zˆ xZS )ÚAimv2PreTrainedModelzÏ
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models. The model is only intended for inference and doesn't support finetuning.
    rc   Úaimv2)ÚimageT)ré   rþ   r�   r®   c                 ó$  •— t         ‰| �  |«       t        |d«      rYt        |j                  t
        j                  «      r4t        j                  |j                  t        j                  d«      «       y y t        |t        «      r7t        j                  |j                  d| j                  j                  ¬«       y t        |t         «      rZt        j"                  |j$                  t'        j(                  |j$                  j*                  d   «      j-                  d«      «       y t        |t.        «      rZt        j"                  |j$                  t'        j(                  |j$                  j*                  d   «      j-                  d«      «       y y )NÚlogit_scaleg$I’$I’,@rÞ   )rR   ÚstdrL   r•   )rA   Ú_init_weightsÚhasattrr)   r  r   rC   ÚinitÚ	constant_ÚmathÚlogrþ   Únormal_rt   rc   Úinitializer_ranger�   Úcopy_r”   r8   r~   rX   r£   r®   )r2   r½   rH   s     €r-   r  z"Aimv2PreTrainedModel._init_weights·  s  ø€ ä‰Ñ˜fÔ%Ü�6˜=Ô)Ü˜&×,Ñ,¬b¯l©lÔ;Ü—‘˜v×1Ñ1´4·8±8¸HÓ3EÕFð <ä˜Ô 9Ô:Ü�L‰L˜×)Ñ)°¸¿¹×9VÑ9VÖWÜ˜Ô 5Ô6Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhÜ˜Ô 3Ô4Ü�J‰J�v×*Ñ*¬E¯L©L¸×9LÑ9L×9RÑ9RÐSUÑ9VÓ,W×,^Ñ,^Ð_fÓ,gÕhð 5r3   )r4   r5   r6   r7   r   r:   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnr8   Úno_gradr  r\   r]   s   @r-   r
  r
  ¢  sY   ø… ñð
 ÓØÐØ!ÐØ&*Ð#òÐð €NØÐØÐà€U‡]�]ƒ_ó
ió ô
ir3   r
  zL
    The Vision model from AIMv2 without any head or projection on top.
    )Úcustom_introc                   ó    ‡ — e Zd ZU eed<   dZeedœZdefˆ fd„Z	de
j                  fd„Ze ed¬«      ed	ee   defd
„«       «       «       Zˆ xZS )ÚAimv2VisionModelrc   r¥   ©rI   Ú
attentionsc                 ó6  •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        |j                  |j                  «      | _
        |j                  | _        | j                  rt        |«      | _        | j                  «        y r(   )rA   rB   rc   r�   rº   ró   Úencoderr>   rG   rœ   r�   Úuse_headrþ   ÚheadÚ	post_initrl   s     €r-   rB   zAimv2VisionModel.__init__Ò  sq   ø€ Ü‰Ñ˜Ô ØˆŒÜ/°Ó7ˆŒÜ# FÓ+ˆŒä$ V×%7Ñ%7¸×9LÑ9LÓMˆŒàŸ™ˆŒØ�=Š=Ü1°&Ó9ˆDŒIà�‰Õr3   r%   c                 ó.   — | j                   j                  S r(   )rº   r›   r1   s    r-   Úget_input_embeddingsz%Aimv2VisionModel.get_input_embeddingsà  s   € Ø�‰×*Ñ*Ð*r3   F©Útie_last_hidden_statesrË   c                 óÞ   — | j                  |«      } | j                  dd|i|¤Ž}|j                  }| j                  |«      }| j                  r| j                  |«      nd}t        ||¬«      S )a3  
        Examples:

        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, Siglip2VisionModel

        >>> model = Aimv2VisionModel.from_pretrained("apple/aimv2-large-patch14-native")
        >>> processor = AutoProcessor.from_pretrained("apple/aimv2-large-patch14-native")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(images=image, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> last_hidden_state = outputs.last_hidden_state
        >>> pooled_output = outputs.pooler_output  # pooled features
        ```r´   N©rû   Úpooler_outputr;   )rº   r'  rû   r�   r(  r)  r   )r2   r¥   rË   rI   Úencoder_outputsrû   r1  s          r-   rV   zAimv2VisionModel.forwardã  sz   € ð< Ÿ™¨Ó5ˆà+7¨4¯<©<ñ ,
Ø'ð,
àñ,
ˆð
 ,×=Ñ=ÐØ ŸM™MÐ*;Ó<Ðà8<¿º˜Ÿ	™	Ð"3Ô4È4ˆä)Ø/Ø'ô
ð 	
r3   )r4   r5   r6   r   r:   Úmain_input_nameré   rÐ   Ú_can_record_outputsrB   r   ÚModuler,  r   r   r   r   r   r   rV   r\   r]   s   @r-   r#  r#  Å  s~   ø… ð ÓØ$€Oà*Ø$ñÐð
Ð0õ ð+ b§i¡ió +ð  Ù¨EÔ2Øð*
ð Ð+Ñ,ð*
ð 
$ò	*
ó ó 3ó  ô*
r3   r#  zJ
    The text model from AIMv2 without any head or projection on top.
    c            
       ó¼   ‡ — e Zd ZdZeedœZdefˆ fd„Zde	j                  fd„Zd„ Ze ed¬	«      e	 ddej"                  d
z  dee   defd„«       «       «       Zˆ xZS )ÚAimv2TextModelr³   r$  rc   c                 óþ   •— t         ‰| �  |«       || _        t        |«      | _        t        |«      | _        t        |j                  |j                  «      | _
        |j                  | _        | j                  «        y r(   )rA   rB   rc   r®   rº   ró   r'  r>   rG   rœ   r�   Úeos_token_idr*  rl   s     €r-   rB   zAimv2TextModel.__init__   sa   ø€ Ü‰Ñ˜Ô ØˆŒÜ-¨fÓ5ˆŒÜ# FÓ+ˆŒÜ$ V×%7Ñ%7¸×9LÑ9LÓMˆŒà"×/Ñ/ˆÔà�‰Õr3   r%   c                 ó.   — | j                   j                  S r(   ©rº   r±   r1   s    r-   r,  z#Aimv2TextModel.get_input_embeddings+  s   € Ø�‰×.Ñ.Ð.r3   c                 ó&   — || j                   _        y r(   r;  )r2   rÀ   s     r-   Úset_input_embeddingsz#Aimv2TextModel.set_input_embeddings.  s   € Ø*/ˆ�‰Õ'r3   Fr-  NrÁ   rË   c                 óª  — | j                  |«      }|j                  \  }}}t        j                  |t        j                  |j
                  ¬«      }|j                  d«      j                  |d«      }|�t        | j                  |||d ¬«      } | j                  d	||dœ|¤Ž}	|	j                  }
| j                  |
«      }
|
t        j                  |
j                  d   |
j
                  ¬«      |j                  t        j                  |
j
                  ¬«      | j                  k(  j                  «       j!                  d¬«      f   }t#        |
|¬«      S )
Nrx   r   rL   )rc   r´   r”   rÁ   Úpast_key_values)r´   rÁ   )ru   r{   r0  r;   )rº   rX   r8   r~   Úlongru   r©   r£   r   rc   r'  rû   r�   rO   Úintr9  Úargmaxr   )r2   r³   rÁ   rË   rI   r  r  rª   r”   r2  rû   Úpooled_outputs               r-   rV   zAimv2TextModel.forward1  sK  € ð Ÿ™¨	Ó2ˆØ!.×!4Ñ!4Ñˆ
�G˜Qä—|‘| G´5·:±:Àm×FZÑFZÔ[ˆØ#×-Ñ-¨aÓ0×7Ñ7¸
ÀBÓGˆØÐ%Ü/Ø—{‘{Ø+Ø)Ø-Ø $ôˆNð '˜$Ÿ,™,ð 
Ø'Ø)ñ
ð ñ
ˆð ,×=Ñ=ÐØ ŸM™MÐ*;Ó<Ðð *Ü�L‰LÐ*×0Ñ0°Ñ3Ð<M×<TÑ<TÔUØ�\‰\¤§	¡	Ð2C×2JÑ2Jˆ\ÓKÈt×O`ÑO`Ñ`×eÑeÓg×nÑnÐsuÐnÓvðxñ
ˆô
 *Ø/Ø'ô
ð 	
r3   r(   )r4   r5   r6   r3  ré   rÐ   r4  r   rB   r   r5  r,  r=  r   r   r   r8   r[   r   r   r   rV   r\   r]   s   @r-   r7  r7    s–   ø„ ð "€Oð +Ø$ñÐð
	˜õ 	ð/ b§i¡ió /ò0ð  Ù¨EÔ2Øð /3ñ&
ð Ÿ™ tÑ+ð&
ð Ð+Ñ,ð	&
ð
 
$ò&
ó ó 3ó  ô&
r3   r7  Útensorc                 óŽ   — t        j                  | d«      }t        j                  |dd¬«      }t        j                  |d«      }|S )z½
    This method is equivalent to tensor.norm(p=2, dim=-1, keepdim=True) and used to make
    model `executorch` exportable. See issue https://github.com/pytorch/executorch/issues/3566
    rK   rL   T)r|   rM   g      à?)r8   rQ   Úsum)rD  Úsquare_tensorÚ
sum_tensorÚnormed_tensors       r-   Ú_get_vector_normrJ  ]  s<   € ô
 —I‘I˜f aÓ(€MÜ—‘˜=¨b¸$Ô?€JÜ—I‘I˜j¨#Ó.€MØÐr3   c                   óŽ  ‡ — e Zd ZdZdefˆ fd„Zee	 	 ddej                  dej                  dz  dej                  dz  de
e   d	eez  f
d
„«       «       Zee	 ddej                  dede
e   d	eez  fd„«       «       Zee	 	 	 ddej$                  dz  dej                  dz  dej                  dz  de
e   d	ef
d„«       «       Zˆ xZS )Ú
Aimv2ModelTrc   c                 óð  •— t         ‰| �  |«       |j                  | _        |j                  j                  | _        |j                  j                  | _        t        j                  |j                  «      | _
        t        j                  |j                  «      | _        t        j                  | j
                  | j                  d¬«      | _        t        j                  | j                  | j                  d¬«      | _        t        j"                  t%        j&                  | j(                  j*                  «      «      | _        t/        j0                  |j2                  «      | _        | j7                  «        y )NFra   )rA   rB   Úprojection_dimÚvision_configrG   Úvision_embed_dimÚtext_configÚtext_embed_dimr#  Ú_from_configÚvision_modelr7  Ú
text_modelr   re   Úvisual_projectionÚtext_projectionrC   r8   rD  rc   Úlogit_scale_init_valuer  r  r  Úmax_logit_scaleÚmax_log_logit_scaler*  rl   s     €r-   rB   zAimv2Model.__init__l  s   ø€ Ü‰Ñ˜Ô à$×3Ñ3ˆÔØ &× 4Ñ 4× @Ñ @ˆÔØ$×0Ñ0×<Ñ<ˆÔä,×9Ñ9¸&×:NÑ:NÓOˆÔÜ(×5Ñ5°f×6HÑ6HÓIˆŒä!#§¡¨4×+@Ñ+@À$×BUÑBUÐ\aÔ!bˆÔÜ!Ÿy™y¨×)<Ñ)<¸d×>QÑ>QÐX]Ô^ˆÔäŸ<™<¬¯©°T·[±[×5WÑ5WÓ(XÓYˆÔÜ#'§8¡8¨F×,BÑ,BÓ#CˆÔ à�‰Õr3   Nr³   rÁ   r”   rË   r%   c                 óx   —  | j                   d|||ddœ|¤Ž}|j                  }| j                  |«      |_        |S )a
  
        Examples:

        ```python
        >>> import torch
        >>> from transformers import AutoTokenizer, Aimv2Model

        >>> model = Aimv2Model.from_pretrained("openai/aimv2-vit-base-patch32")
        >>> tokenizer = AutoTokenizer.from_pretrained("openai/aimv2-vit-base-patch32")

        >>> inputs = tokenizer(["a photo of a cat", "a photo of a dog"], padding=True, return_tensors="pt")

        >>> with torch.inference_mode():
        ...     text_features = model.get_text_features(**inputs)
        ```T)r³   rÁ   r”   Úreturn_dictr;   )rU  r1  rW  )r2   r³   rÁ   r”   rË   Útext_outputsrC  s          r-   Úget_text_featureszAimv2Model.get_text_features~  sV   € ð0 4C°4·?±?ð 4
ØØ)Ø%Øñ	4
ð
 ñ4
ˆð %×2Ñ2ˆØ%)×%9Ñ%9¸-Ó%HˆÔ"àÐr3   r¥   Úinterpolate_pos_encodingc                 óv   —  | j                   d||ddœ|¤Ž}|j                  }| j                  |«      |_        |S )aŽ  
        Examples:

        ```python
        >>> import torch
        >>> from transformers import AutoProcessor, Aimv2Model
        >>> from transformers.image_utils import load_image

        >>> model = Aimv2Model.from_pretrained("openai/aimv2-vit-base-patch32")
        >>> processor = AutoProcessor.from_pretrained("openai/aimv2-vit-base-patch32")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = load_image(url)

        >>> inputs = processor(images=image, return_tensors="pt")

        >>> with torch.inference_mode():
        ...     image_features = model.get_image_features(**inputs)
        ```T)r¥   r_  r\  r;   )rT  r1  rV  )r2   r¥   r_  rË   Úvision_outputsrC  s         r-   Úget_image_featureszAimv2Model.get_image_features¢  sU   € ð6 6G°T×5FÑ5Fð 6
Ø%Ø%=Øñ6
ð ñ	6
ˆð '×4Ñ4ˆØ'+×'=Ñ'=¸mÓ'LˆÔ$àÐr3   c                 ó  —  | j                   dd|i|¤Ž} | j                  d||dœ|¤Ž}|j                  }| j                  |«      }|j                  }| j	                  |«      }|t        |«      z  }|t        |«      z  }| j                  j                  d| j                  «      j                  «       j                  |j                  «      }	|	|z  |j                  «       z  }
|
j                  «       }t        ||
||||¬«      S )aÔ  
        Examples:

        ```python
        >>> from PIL import Image
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import AutoProcessor, Aimv2Model

        >>> model = Aimv2Model.from_pretrained("apple/aimv2-large-patch14-224-lit")
        >>> processor = AutoProcessor.from_pretrained("apple/aimv2-large-patch14-224-lit")

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> inputs = processor(
        ...     text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True
        ... )

        >>> outputs = model(**inputs)
        >>> logits_per_image = outputs.logits_per_image  # this is the image-text similarity score
        >>> probs = logits_per_image.softmax(dim=1)  # we can take the softmax to get the label probabilities
        ```r¥   )r³   rÁ   rÞ   )r   r    r!   r"   r#   r$   r;   )rT  rU  r1  rV  rW  rJ  r  ÚclamprZ  ÚexprO   ru   Útr   )r2   r³   r¥   rÁ   rË   ra  r]  r"   r!   r  r    r   s               r-   rV   zAimv2Model.forwardÈ  s'  € ðB 6G°T×5FÑ5Fñ 6
Ø%ð6
àñ6
ˆð
 4C°4·?±?ð 4
ØØ)ñ4
ð ñ4
ˆð &×3Ñ3ˆØ×-Ñ-¨lÓ;ˆà"×0Ñ0ˆØ×*Ñ*¨;Ó7ˆð $Ô&6°|Ó&DÑDˆØ!Ô$4°[Ó$AÑAˆà×&Ñ&×,Ñ,¨S°$×2JÑ2JÓK×OÑOÓQ×TÑTÐU`×UgÑUgÓhˆØ&¨Ñ4¸¿¹Ó8HÑHˆØ*×,Ñ,Ó.ÐäØ-Ø+Ø#Ø%Ø*Ø .ô
ð 	
r3   )NN)Fr»   )r4   r5   r6   r  r   rB   r   r   r8   r[   r   r   r/   r   r^  r9   Úboolrb  r¼   r   rV   r\   r]   s   @r-   rL  rL  h  sb  ø„ àÐð˜{õ ð$ Øð /3Ø,0ñ	 à—<‘<ð ð Ÿ™ tÑ+ð ð —l‘l TÑ)ð	 ð
 Ð+Ñ,ð ð 
Ð+Ñ	+ò ó ó ð ðD Øð */ñ"à×'Ñ'ð"ð #'ð"ð Ð+Ñ,ð	"ð
 
Ð+Ñ	+ò"ó ó ð"ðH Øð .2Ø15Ø.2ñ	?
à×#Ñ# dÑ*ð?
ð ×'Ñ'¨$Ñ.ð?
ð Ÿ™ tÑ+ð	?
ð
 Ð+Ñ,ð?
ð 
ò?
ó ó ô?
r3   rL  )r#  rL  r
  r7  )rÞ   )Er  Úcollections.abcr   Údataclassesr   Útypingr   r8   Útorch.nn.functionalr   rÈ   r  Ú r   r  Úactivationsr	   Úintegrationsr
   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_aimv2r   r   r   r   r5  r>   r_   rP   rA  rZ   rg  ru   rN   r[   rŽ   r�   r®   rÎ   rÐ   ré   ró   rþ   r
  r#  r7  rJ  rL  Ú__all__r;   r3   r-   ú<module>ry     sž  ðó, Ý $Ý !Ý ã ß Ð Ý å &Ý !Ý 7Ý /Ý 9ß Kß FÝ &ß VÓ VÝ 7Ý 5ß PÑ Pð Ø
ô_�+ó _ó ó ð_ñ@ ˜YÓ'ôJ�2—9‘9ó Jó (ðJô(ˆr�y‰yô ð& Ø ØØ"&ØŸ™ñ-Øð-àð-ð ð-ð ð	-ð
 ð-ð �L‰L˜4Ñð-ð �;‰;ð-ð ‡\�\ó-ô`%˜BŸI™Iô %ôP%˜"Ÿ)™)ô %ð^ ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ó%ô.7)�R—Y‘Yô 7)ôtÐ2ô ô2@�2—9‘9ô @ôD §	¡	ô ðD ôi˜?ó ió ðiñD ðôô
F
Ð+ó F
óð
F
ñR ðôô
B
Ð)ó B
óð
B
ðJ˜UŸ\™\ð ¨e¯l©ló ð ô`
Ð%ó `
ó ð`
òF W�r3   