Ë
    ÛÓ^jmÇ  ã                   óº  — d dl mZ d dlmZ d dlmZ d dlZd dlmZ ddl	m
Z ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ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"m#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. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 ddl8m9Z9  e+jt                  e;«      Z< e)d¬«      e G d„ de'«      «       «       Z= ed«       G d„ d ej|                  «      «       Z? G d!„ d"ej|                  «      Z@ G d#„ d$ej|                  «      ZAd%„ ZB ed&«      dKd'„«       ZCd(ejˆ                  d)eEd*ejˆ                  fd+„ZF	 dLd,ej|                  d-ejˆ                  d.ejˆ                  d/ejˆ                  d0ejˆ                  dz  d1eGd2eGd3e%e(   fd4„ZH eeC«       G d5„ d6ej|                  «      «       ZI G d7„ d8e«      ZJ e)d9¬«      e) G d:„ d;e#«      «       «       ZKe) G d<„ d=eK«      «       ZL G d>„ d?ej|                  «      ZM e)d@¬«       G dA„ dBeKe«      «       ZN G dC„ dDej|                  «      ZOe) G dE„ dFeK«      «       ZP e)dG¬«       G dH„ dIeKe9«      «       ZQg dJ¢ZRy)Mé    )ÚCallable)Ú	dataclass)ÚOptionalNé   )Úinitialization)ÚACT2FN)ÚCacheÚDynamicCache)ÚGenerationMixin)Úuse_kernel_forward_from_hubÚuse_kernel_func_from_hubÚuse_kernelized_func)Úcreate_causal_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚROPE_INIT_FUNCTIONSÚdynamic_rope_update)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmaybe_autocastÚmerge_with_config_defaults)Úis_torchdynamo_compiling)Úcapture_outputsé   )Ú	AutoModelé   )Ú	CsmConfigÚCsmDepthDecoderConfig)ÚCsmGenerationMixinz:
    Base class for the model autoregressive outputs.
    )Úcustom_introc                   óÊ  — 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
dz  ed<   dZeej                  df   dz  ed<   dZeej                  df   dz  ed<   dZej                  dz  ed	<   dZej                  dz  ed
<   dZe
dz  ed<   dZeej                  df   dz  ed<   dZeej                  df   dz  ed<   dZej                  dz  ed<   y)ÚCsmOutputWithPasta�	  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).

        Contains pre-computed hidden-states (key and values in the self-attention blocks) that can be used (see
        `past_key_values` input) to speed up sequential decoding.
    depth_decoder_loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction) of the depth decoder model.
    depth_decoder_logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the depth decoder (scores for each vocabulary token before SoftMax).
    depth_decoder_past_key_values (`Cache`, *optional*, returned when `use_cache=True` is passed or when `config.use_cache=True`):
        It is a [`~cache_utils.Cache`] instance. For more details, see our [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache).
    depth_decoder_hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each layer) of shape `(batch_size, sequence_length, hidden_size)`.

        Hidden-states of the model at the output of each layer plus the optional initial embedding outputs.
    depth_decoder_attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length,
        sequence_length)`.
    backbone_loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction) of the backbone model.
    NÚlossÚlogitsÚpast_key_values.Úhidden_statesÚ
attentionsÚdepth_decoder_lossÚdepth_decoder_logitsÚdepth_decoder_past_key_valuesÚdepth_decoder_hidden_statesÚdepth_decoder_attentionsÚbackbone_loss)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r*   ÚtorchÚFloatTensorÚ__annotations__r+   r,   r	   r-   Útupler.   r/   r0   r1   r2   r3   r4   © ó    úo/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/csm/modeling_csm.pyr)   r)   3   s  … ñð8 &*€Dˆ%×
Ñ
˜dÑ
"Ó)Ø'+€FˆE×Ñ Ñ$Ó+Ø$(€O�U˜T‘\Ó(Ø:>€M�5˜×*Ñ*¨CÐ/Ñ0°4Ñ7Ó>Ø7;€J��e×'Ñ'¨Ð,Ñ-°Ñ4Ó;Ø37Ð˜×)Ñ)¨DÑ0Ó7Ø59Ð˜%×+Ñ+¨dÑ2Ó9Ø26Ð! 5¨4¡<Ó6ØHLÐ  u×'8Ñ'8¸#Ð'=Ñ!>ÀÑ!EÓLØEIÐ˜e E×$5Ñ$5°sÐ$:Ñ;¸dÑBÓIØ.2€M�5×$Ñ$ tÑ+Ô2r>   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 )	Ú
CsmRMSNormÚepsÚreturnNc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)z9
        CsmRMSNorm is equivalent to T5LayerNorm
        N)ÚsuperÚ__init__ÚnnÚ	Parameterr9   ÚonesÚweightÚvariance_epsilon)ÚselfÚhidden_sizerC   Ú	__class__s      €r?   rG   zCsmRMSNorm.__init__e   s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr>   r-   c                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Nr!   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor9   Úfloat32ÚpowÚmeanÚrsqrtrL   rK   )rM   r-   Úinput_dtypeÚvariances       r?   ÚforwardzCsmRMSNorm.forwardm   sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r>   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)r<   rK   ÚshaperL   ©rM   s    r?   Ú
extra_reprzCsmRMSNorm.extra_reprt   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr>   )g�íµ ÷Æ°>)
r5   r6   r7   ÚfloatrG   r9   ÚTensorr[   r_   Ú__classcell__©rO   s   @r?   rB   rB   c   s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr>   rB   c                   óÄ   ‡ — e Zd ZU ej                  ed<   ddefˆ fd„Ze	 	 	 ddedz  de	d   de
dz  ded	ef   fd
„«       Z ej                  «       ed„ «       «       Zˆ xZS )ÚCsmRotaryEmbeddingÚinv_freqNÚconfigc                 ó®  •— t         ‰| �  «        |j                  | _        |j                  | _        || _        | j
                  j                  d   | _        | j                  }| j                  dk7  rt        | j                     } || j
                  |«      \  }| _
        | j                  d|d¬«       | j                  d|j                  «       d¬«       y )NÚ	rope_typeÚdefaultrf   F©Ú
persistentÚoriginal_inv_freq)rF   rG   Úmax_position_embeddingsÚmax_seq_len_cachedÚoriginal_max_seq_lenrg   Úrope_parametersri   Úcompute_default_rope_parametersr   Úattention_scalingÚregister_bufferÚclone)rM   rg   ÚdeviceÚrope_init_fnrf   rO   s        €r?   rG   zCsmRotaryEmbedding.__init__{   s¶   ø€ Ü‰ÑÔØ"(×"@Ñ"@ˆÔØ$*×$BÑ$BˆÔ!àˆŒàŸ™×4Ñ4°[ÑAˆŒØ!%×!EÑ!EˆØ�>‰>˜YÒ&Ü.¨t¯~©~Ñ>ˆLÙ+7¸¿¹ÀVÓ+LÑ(ˆ�$Ô(à×Ñ˜Z¨¸eÐÔDØ×ÑÐ0°(·.±.Ó2BÈuÐÕUr>   rv   ztorch.deviceÚseq_lenrD   ztorch.Tensorc                 ó  — | j                   d   }t        | dd«      xs | j                  | j                  z  }d}d|t	        j
                  d|dt        j                  ¬«      j                  |t        j                  ¬«      |z  z  z  }||fS )	a¨  
        Computes the inverse frequencies according to the original RoPE implementation
        Args:
            config ([`~transformers.PreTrainedConfig`]):
                The model configuration.
            device (`torch.device`):
                The device to use for initialization of the inverse frequencies.
            seq_len (`int`, *optional*):
                The current sequence length. Unused for this type of RoPE.
        Returns:
            Tuple of (`torch.Tensor`, `float`), containing the inverse frequencies for the RoPE embeddings and the
            post-processing scaling factor applied to the computed cos/sin (unused in this type of RoPE).
        Ú
rope_thetaÚhead_dimNg      ð?r   r!   ©rS   ©rv   rS   )	rq   ÚgetattrrN   Únum_attention_headsr9   ÚarangeÚint64rT   r`   )rg   rv   rx   ÚbaseÚdimÚattention_factorrf   s          r?   rr   z2CsmRotaryEmbedding.compute_default_rope_parameters‹   s�   € ð& ×%Ñ% lÑ3ˆÜ�f˜j¨$Ó/Òc°6×3EÑ3EÈ×IcÑIcÑ3cˆàÐð Ø”U—\‘\ ! S¨!´5·;±;Ô?×BÑBÈ&ÔX]×XcÑXcÐBÓdÐgjÑjÑkñ
ˆð Ð)Ð)Ð)r>   c                 óN  — | j                   d d d …d f   j                  «       j                  |j                  d   dd«      j	                  |j
                  «      }|d d …d d d …f   j                  «       }t        |j
                  j                  t        «      r/|j
                  j                  dk7  r|j
                  j                  nd}t        |d¬«      5  |j                  «       |j                  «       z  j                  dd«      }t        j                  ||fd¬	«      }|j                  «       | j                  z  }|j                  «       | j                  z  }	d d d «       j	                  |j                   ¬
«      	j	                  |j                   ¬
«      fS # 1 sw Y   ŒAxY w)Nr   rQ   r#   ÚmpsÚcpuF)Údevice_typeÚenabledr!   ©rƒ   r|   )rf   r`   Úexpandr]   rT   rv   Ú
isinstanceÚtypeÚstrr   Ú	transposer9   ÚcatÚcosrs   ÚsinrS   )
rM   ÚxÚposition_idsÚinv_freq_expandedÚposition_ids_expandedrˆ   ÚfreqsÚembr‘   r’   s
             r?   r[   zCsmRotaryEmbedding.forward©   sR  € ð !ŸM™M¨$²°4¨-Ñ8×>Ñ>Ó@×GÑGÈ×HZÑHZÐ[\ÑH]Ð_aÐcdÓe×hÑhÐij×iqÑiqÓrÐØ ,ªQ°²a¨ZÑ 8× >Ñ >Ó @Ðä'1°!·(±(·-±-ÄÔ'EÈ!Ï(É(Ï-É-Ð[`ÒJ`�a—h‘h—m’mÐfkˆÜ¨¸UÔCñ 	5Ø&×,Ñ,Ó.Ð1F×1LÑ1LÓ1NÑN×YÑYÐZ[Ð]^Ó_ˆEÜ—)‘)˜U E˜N°Ô3ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆCØ—'‘'“)˜d×4Ñ4Ñ4ˆC÷		5ð �v‰v˜AŸG™GˆvÓ$ c§f¡f°1·7±7 fÓ&;Ð;Ð;÷	5ð 	5ús   ÃBFÆF$©N©NNN)r5   r6   r7   r9   ra   r;   r$   rG   Ústaticmethodr   Úintr<   r`   rr   Úno_gradr   r[   rb   rc   s   @r?   re   re   x   s˜   ø… Ø�l‰lÓñV˜yõ Vð  à#'Ø+/Ø"ñ*Ø˜DÑ ð*à˜Ñ(ð*ð �t‘ð*ð 
ˆ~˜uÐ$Ñ	%ò	*ó ð*ð: €U‡]�]ƒ_Øñ<ó ó ô<r>   re   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )ÚCsmMLPc                 ó  •— t         ‰| �  «        || _        |j                  | _        |j                  | _        t        j                  | j                  | j                  |j                  ¬«      | _        t        j                  | j                  | j                  |j                  ¬«      | _	        t        j                  | j                  | j                  |j                  ¬«      | _
        t        |j                     | _        y )N©Úbias)rF   rG   rg   rN   Úintermediate_sizerH   ÚLinearÚmlp_biasÚ	gate_projÚup_projÚ	down_projr   Ú
hidden_actÚact_fn©rM   rg   rO   s     €r?   rG   zCsmMLP.__init__º   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×.Ñ.Ñ/ˆ�r>   c                 óˆ   — | j                  | j                  | j                  |«      «      | j                  |«      z  «      }|S r™   )r¨   rª   r¦   r§   )rM   r“   r¨   s      r?   r[   zCsmMLP.forwardÄ   s6   € Ø—N‘N 4§;¡;¨t¯~©~¸aÓ/@Ó#AÀDÇLÁLÐQRÃOÑ#SÓTˆ	ØÐr>   ©r5   r6   r7   rG   r[   rb   rc   s   @r?   rŸ   rŸ   ¹   s   ø„ ô0ör>   rŸ   c                 óš   — | dd| j                   d   dz  …f   }| d| j                   d   dz  d…f   }t        j                  | |fd¬«      S )z*Rotates half the hidden dims of the input..NrQ   r!   rŠ   )r]   r9   r�   )r“   Úx1Úx2s      r?   Úrotate_halfr±   É   sZ   € à	
ˆ3Ð"�!—'‘'˜"‘+ Ñ"Ð"Ð"Ñ	#€BØ	
ˆ3�—‘˜‘˜qÑ Ñ"Ð"Ñ	#€BÜ�9‰9�r�c˜2�Y BÔ'Ð'r>   Úrotary_pos_embc                 óž   — |j                  |«      }|j                  |«      }| |z  t        | «      |z  z   }||z  t        |«      |z  z   }||fS )a…  Applies Rotary Position Embedding to the query and key tensors.

    Args:
        q (`torch.Tensor`): The query tensor.
        k (`torch.Tensor`): The key tensor.
        cos (`torch.Tensor`): The cosine part of the rotary embedding.
        sin (`torch.Tensor`): The sine part of the rotary embedding.
        unsqueeze_dim (`int`, *optional*, defaults to 1):
            The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
            sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
            that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
            k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
            cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
            the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
    Returns:
        `tuple(torch.Tensor)` comprising of the query and key tensors rotated using the Rotary Position Embedding.
    )Ú	unsqueezer±   )ÚqÚkr‘   r’   Úunsqueeze_dimÚq_embedÚk_embeds          r?   Úapply_rotary_pos_embrº   Ð   sY   € ð& �-‰-˜Ó
&€CØ
�-‰-˜Ó
&€CØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�3‰wœ; q›>¨CÑ/Ñ0€GØ�GÐÐr>   r-   Ún_reprD   c                 óª   — | j                   \  }}}}|dk(  r| S | dd…dd…ddd…dd…f   j                  |||||«      } | j                  |||z  ||«      S )zÔ
    This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
    num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
    r#   N)r]   r‹   Úreshape)r-   r»   ÚbatchÚnum_key_value_headsÚslenr{   s         r?   Ú	repeat_kvrÁ   ê   so   € ð
 2?×1DÑ1DÑ.€EÐ  hØ�‚zØÐØ!¢!¢Q¨ªa²Ð"2Ñ3×:Ñ:¸5ÐBUÐW\Ð^bÐdlÓm€MØ× Ñ  Ð(;¸eÑ(CÀTÈ8ÓTÐTr>   ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó  — t        || j                  «      }t        || j                  «      }	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 )Nr!   r   rQ   )rƒ   rS   )ÚpÚtrainingr#   )rÁ   Únum_key_value_groupsr9   Úmatmulr�   rH   Ú
functionalÚsoftmaxrU   rT   rS   rÈ   rÌ   Ú
contiguous)rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   rÈ   rÉ   Ú
key_statesÚvalue_statesÚattn_weightsÚattn_outputs               r?   Úeager_attention_forwardrÖ   ö   sà   € ô ˜3 × ;Ñ ;Ó<€JÜ˜U F×$?Ñ$?Ó@€Lä—<‘<  z×';Ñ';¸A¸qÓ'AÓBÀWÑL€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐW\×WbÑWbÓc€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$r>   c                   óø   ‡ — e Zd ZdZdedefˆ fd„Z	 	 	 ddej                  de	ej                  ej                  f   dz  dej                  dz  d	e
dz  d
ee   de	ej                  ej                  f   fd„Zˆ xZS )ÚCsmAttentionz=Multi-headed attention from 'Attention Is All You Need' paperrg   Ú	layer_idxc                 ód  •— t         ‰| �  «        || _        || _        t	        |d|j
                  |j                  z  «      | _        |j                  |j                  z  | _	        | j                  dz  | _
        |j                  | _        d| _        t        j                  |j
                  |j                  | j                  z  |j                  ¬«      | _        t        j                  |j
                  |j                  | j                  z  |j                  ¬«      | _        t        j                  |j
                  |j                  | j                  z  |j                  ¬«      | _        t        j                  |j                  | j                  z  |j
                  |j                  ¬«      | _        y )Nr{   g      à¿Tr¡   )rF   rG   rg   rÙ   r~   rN   r   r{   r¿   rÍ   rÇ   Úattention_dropoutÚ	is_causalrH   r¤   Úattention_biasÚq_projÚk_projÚv_projÚo_proj©rM   rg   rÙ   rO   s      €r?   rG   zCsmAttention.__init__  sM  ø€ Ü‰ÑÔØˆŒØ"ˆŒÜ ¨
°F×4FÑ4FÈ&×JdÑJdÑ4dÓeˆŒØ$*×$>Ñ$>À&×B\ÑB\Ñ$\ˆÔ!Ø—}‘} dÑ*ˆŒØ!'×!9Ñ!9ˆÔØˆŒä—i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×Ñ × :Ñ :¸T¿]¹]Ñ JÐQW×QfÑQfô
ˆŒô —i‘iØ×&Ñ&¨¯©Ñ6¸×8JÑ8JÐQW×QfÑQfô
ˆ�r>   Nr-   Úposition_embeddingsrÆ   r,   rÉ   rD   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                  «      \  }	}
t        j                  | j                  j                  t        «      } || ||	|
|f| j                  sdn| j                   | j"                  dœ|¤Ž\  }} |j$                  g |¢d‘­Ž j'                  «       }| j)                  |«      }||fS )NrQ   r#   r!   ç        )rÈ   rÇ   )r]   r{   rÞ   Úviewr�   rß   rà   rº   ÚupdaterÙ   r   Úget_interfacerg   Ú_attn_implementationrÖ   rÌ   rÛ   rÇ   r½   rÑ   rá   )rM   r-   rã   rÆ   r,   rÉ   Úinput_shapeÚhidden_shapeÚquery_statesrÒ   rÓ   r‘   r’   Úattention_interfacerÕ   rÔ   s                   r?   r[   zCsmAttention.forward*  s‘  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆà&‰ˆˆSÜ#7¸ÀjÐRUÐWZÓ#[Ñ ˆ�jàÐ&Ø'6×'=Ñ'=¸jÈ,ÐX\×XfÑXfÓ'gÑ$ˆJ˜ä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØ—L‘Lñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r>   rš   )r5   r6   r7   r8   r$   rœ   rG   r9   ra   r<   r	   r   r   r[   rb   rc   s   @r?   rØ   rØ     s¥   ø„ áGð
˜yð 
°Sõ 
ð4 IMØ.2Ø(,ñ&)à—|‘|ð&)ð # 5§<¡<°·±Ð#=Ñ>ÀÑEð&)ð Ÿ™ tÑ+ð	&)ð
  ™ð&)ð Ð+Ñ,ð&)ð 
ˆu�|‰|˜UŸ\™\Ð)Ñ	*÷&)r>   rØ   c                   ó  ‡ — e Zd Zdedefˆ fd„Z	 	 	 	 	 ddej                  dej                  dz  dej                  dz  de	dz  d	e
dz  d
eej                  ej                  f   dz  dee   dej                  fd„Zˆ xZS )ÚCsmDecoderLayerrg   rÙ   c                 ó   •— t         ‰| �  «        |j                  | _        t        ||¬«      | _        t        |«      | _        t        |j                  |j                  ¬«      | _	        t        |j                  |j                  ¬«      | _
        y )N)rg   rÙ   ©rC   )rF   rG   rN   rØ   Ú	self_attnrŸ   ÚmlprB   Úrms_norm_epsÚinput_layernormÚpost_attention_layernormrâ   s      €r?   rG   zCsmDecoderLayer.__init__T  sk   ø€ Ü‰ÑÔØ!×-Ñ-ˆÔä%¨V¸yÔIˆŒä˜&“>ˆŒÜ)¨&×*<Ñ*<À&×BUÑBUÔVˆÔÜ(2°6×3EÑ3EÈ6×K^ÑK^Ô(_ˆÕ%r>   Nr-   rÆ   r”   r,   Ú	use_cacherã   rÉ   rD   c           
      óÀ   — |}| j                  |«      } | j                  d||||||dœ|¤Ž\  }}	||z   }|}| j                  |«      }| j                  |«      }||z   }|S )N)r-   rÆ   r”   r,   r÷   rã   r=   )rõ   rò   rö   ró   )
rM   r-   rÆ   r”   r,   r÷   rã   rÉ   ÚresidualÚ_s
             r?   r[   zCsmDecoderLayer.forward^  s�   € ð !ˆØ×,Ñ,¨]Ó;ˆà)˜4Ÿ>™>ð 
Ø'Ø)Ø%Ø+ØØ 3ñ
ð ñ
Ñˆ�qð ! =Ñ0ˆð !ˆØ×5Ñ5°mÓDˆØŸ™ Ó/ˆØ  =Ñ0ˆØÐr>   )NNNFN)r5   r6   r7   r$   rœ   rG   r9   ra   Ú
LongTensorr	   Úboolr<   r   r   r[   rb   rc   s   @r?   rï   rï   S  s¾   ø„ ð`˜yð `°Sõ `ð /3Ø04Ø(,Ø!&ØHLñà—|‘|ðð Ÿ™ tÑ+ðð ×&Ñ&¨Ñ-ð	ð
  ™ðð ˜$‘;ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEðð Ð+Ñ,ðð 
�‰÷r>   rï   z[
    The bare Csm Model outputting raw hidden-states without any specific head on top.
    c                   ó„   ‡ — e Zd ZU eed<   dZdZdZdgZdgZ	dZ
dZdZdZeedœZ ej$                  «       ˆ fd„«       Zˆ xZS )	ÚCsmPreTrainedModelrg   Úmodel)ÚaudioÚtextTrï   r,   )r-   r.   c                 óÎ  •— t         ‰| �  |«       t        |t        «      rV|j                  }t        |dz
  «      D ]8  }t        j                  |j                  d| j                  j                  ¬«       Œ: y t        |t        «      r_t        j                  |j                  t        j                  | j                  j                  «      | j                  j                   z  «       y y )Nr#   rå   )rW   Ústd)rF   Ú_init_weightsrŒ   ÚCsmCodebooksHeadÚnum_codebooksÚrangeÚinitÚnormal_rK   rg   Úinitializer_rangeÚCsmBackboneModelEmbeddingsÚcopy_Úaudio_tokens_offsetsr9   r€   Ú
vocab_size)rM   rÂ   r  ÚirO   s       €r?   r  z CsmPreTrainedModel._init_weights—  s¨   ø€ ä‰Ñ˜fÔ%Ü�fÔ.Ô/Ø"×0Ñ0ˆMÜ˜=¨1Ñ,Ó-ò Y�Ü—‘˜VŸ]™]°¸$¿+¹+×:WÑ:WÖXñYä˜Ô :Ô;Ü�J‰J�v×2Ñ2´E·L±LÀÇÁ×AZÑAZÓ4[Ð^b×^iÑ^i×^tÑ^tÑ4tÕuð <r>   )r5   r6   r7   r$   r;   Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphÚ_supports_attention_backendrï   rØ   Ú_can_record_outputsr9   r�   r  rb   rc   s   @r?   rþ   rþ   ~  st   ø… ð ÓØÐØ(ÐØ&*Ð#Ø*Ð+ÐØ#4Ð"5ÐØÐØ€Nð "ÐØ"&Ðà(Ø"ñÐð
 €U‡]�]ƒ_óvó ôvr>   rþ   c                   ó  ‡ — e Zd ZU eed<   ˆ fd„Zeee	 	 	 	 	 	 	 dde	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  dedz  d	e	j                  dz  d
edz  dee   deez  fd„«       «       «       Zˆ xZS )ÚCsmDepthDecoderModelrg   c           	      ór  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        j                  |j                  |j                  z  |j                  «      | _	        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |j                   |j"                  ¬«      | _        t'        |¬«      | _        d| _        t        j,                  |j                  |j                   d¬«      | _        | j1                  «        y c c}w )Nrñ   ©rg   Fr¡   )rF   rG   Úpad_token_idÚpadding_idxr  rH   Ú	Embeddingr  Úbackbone_hidden_sizeÚembed_tokensÚ
ModuleListr  Únum_hidden_layersrï   ÚlayersrB   rN   rô   Únormre   Ú
rotary_embÚgradient_checkpointingr¤   Úinputs_embeds_projectorÚ	post_initrâ   s      €r?   rG   zCsmDepthDecoderModel.__init__¦  sê   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒÜŸL™L¨&×*>Ñ*>À×ARÑARÑ*RÐU[×UpÑUpÓqˆÔÜ—m‘mÜAFÀv×G_ÑG_ÓA`Öa°IŒ_˜V YÕ/Òaó
ˆŒô ˜v×1Ñ1°v×7JÑ7JÔKˆŒ	Ü,°FÔ;ˆŒØ&+ˆÔ#Ü')§y¡y°×1LÑ1LÈf×N`ÑN`ÐglÔ'mˆÔ$ð 	�‰Õùò bs   ÂD4NÚ	input_idsÚbackbone_last_hidden_staterÆ   r”   r,   Úinputs_embedsr÷   rÉ   rD   c           
      ó¼  — |�!t        «       st        j                  d«       d}|du |duz  rt        d«      ‚|r|€t	        | j
                  ¬«      }|�|j                  «       nd}	|�|j                  d   n|j                  d   }
|�|j                  n|j                  }t        j                  |	|	|
z   |¬«      }|€rt        j                  |dz
  d¬«      }|| j                  z  }| j                  ||z   «      }|d   dk(  }|�
||dd…df<   n!t        «       s|rt        j                  d	«       | j                  |«      }t!        | j
                  ||||¬
«      }|}|j#                  d«      }| j%                  ||¬«      }| j&                  d| j
                  j(                   D ]  } ||f|||||dœ|¤Ž}Œ | j+                  |«      }t-        ||r|¬«      S d¬«      S )aJ  
        backbone_last_hidden_state (`torch.FloatTensor` of shape `(batch_size, backbone_hidden_size)`, *optional*):
            The last hidden state of the backbone model. Such input is required when the first codebook token (the one generated by the backbone model)
            is provided in the `input_ids` argument.
        NzÕCustom `position_ids` were provided but will be ignored. CSM depth decoder automatically determines position_ids and as it requires them to be identical across the batch, the provided position_ids will be ignored.z;You must specify exactly one of input_ids or inputs_embeds.r  r   r#   ©rv   )ÚminzvWhen the first codebook token is provided, `backbone_last_hidden_state` should also be provided for correct inference.©rg   r-  rÆ   r,   r”   ©r”   )rÆ   r”   r,   r÷   rã   ©Úlast_hidden_stater,   )r   ÚloggerÚwarning_onceÚ
ValueErrorr
   rg   Úget_seq_lengthr]   rv   r9   r€   Úclampr  r"  Úwarningr)  r   r´   r'  r%  r$  r&  r   )rM   r+  r,  rÆ   r”   r,   r-  r÷   rÉ   Úpast_seen_tokensÚinputs_seq_lengthrv   Úcodebook_idxsÚoffsetÚinput_ids_are_first_codebookÚcausal_maskr-   rã   Údecoder_layers                      r?   r[   zCsmDepthDecoderModel.forward¶  s'  € ð& Ð#Ô,DÔ,FÜ×Ñðwôð  ˆLØ˜Ð -°tÐ";Ò<ÜÐZÓ[Ð[á˜Ð0Ü*°$·+±+Ô>ˆOà?NÐ?Z˜?×9Ñ9Ô;Ð`aÐØ6CÐ6O˜M×/Ñ/°Ò2ÐU^×UdÑUdÐefÑUgÐØ)6Ð)B�×%Ò%È	×HXÑHXˆÜ—|‘|Ð$4Ð6FÐIZÑ6ZÐciÔjˆàÐ Ü!ŸK™K¨°qÑ(8¸aÔ@ˆMØ" T§_¡_Ñ4ˆFØ ×-Ñ-¨i¸&Ñ.@ÓAˆMà+7¸©?¸aÑ+?Ð(Ø)Ð5Ø&@�ša ˜dÒ#ä/Ô1Ñ6RÜ—N‘Nð Qôð ×4Ñ4°]ÓCˆä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆð $×-Ñ-¨aÓ0ˆØ"Ÿo™o¨mÈ,˜oÓWÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò 		ˆMÙ)Øðà*Ø)Ø /Ø#Ø$7ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆÜ&Ø+Ù/8˜Oô
ð 	
à>Bô
ð 	
r>   )NNNNNNN)r5   r6   r7   r%   r;   rG   r   r    r   r9   rû   r:   ra   r	   rü   r   r   r<   r   r[   rb   rc   s   @r?   r  r  ¢  sõ   ø… à!Ó!ôð   ØØð .2Ø?CØ.2Ø04Ø(,Ø26Ø!%ñN
à×#Ñ# dÑ*ðN
ð %*×$5Ñ$5¸Ñ$<ðN
ð Ÿ™ tÑ+ð	N
ð
 ×&Ñ&¨Ñ-ðN
ð  ™ðN
ð ×(Ñ(¨4Ñ/ðN
ð ˜$‘;ðN
ð Ð+Ñ,ðN
ð 
Ð(Ñ	(òN
ó ó ó  ôN
r>   r  c                   ó&   ‡ — e Zd Zˆ fd„Zdd„Zˆ xZS )r  c                 ó¨   •— t         ‰| �  «        || _        t        j                  t        j                  | j                  dz
  ||«      «      | _        y )Nr#   )rF   rG   r  rH   rI   r9   ÚemptyrK   )rM   rN   r  r  rO   s       €r?   rG   zCsmCodebooksHead.__init__  s?   ø€ Ü‰ÑÔØ*ˆÔÜ—l‘l¤5§;¡;¨t×/AÑ/AÀAÑ/EÀ{ÐT^Ó#_Ó`ˆ�r>   c           
      ó  — |dz
  }| j                   |   }t        |j                  d   «      D �cg c]9  }t        j                  j                  |d d …|d d …f   ||   j                  «      ‘Œ; }}t        j                  |d¬«      }|S c c}w )Nr#   r   rŠ   )	rK   r  r]   rH   rÏ   ÚlinearÚTr9   Ústack)rM   r-   Úcodebook_indicesÚcodebook_weightÚcodebook_idxs        r?   r[   zCsmCodebooksHead.forward  s‘   € à+¨aÑ/ÐØŸ+™+Ð&6Ñ7ˆô !& o×&;Ñ&;¸AÑ&>Ó ?ö
àô �M‰M× Ñ  ªq°,ÂÐ/AÑ!BÀOÐT`ÑDa×DcÑDcÕdð
ˆð 
ô Ÿ™ M°qÔ9ˆàÐùò
s   ¯>Br™   r­   rc   s   @r?   r  r  
  s   ø„ ôa÷
r>   r  a$  
    The CsmDepthDecoder Model transformer, with a [`CsmCodebooksHead`] on top,
    which can be seen a position-specific language modeling head, allowing to use a different linear layer for each codebook
    (e.g. position 0 is the first codebook and uses the first codebook head, etc.)
    c                   óÞ  ‡ — e Zd ZdZdZdZˆ fd„Zee	 	 	 	 	 	 	 	 	 dde	j                  dz  de	j                  dz  de	j                  dz  de	j                  dz  dedz  de	j                  dz  d	e	j                  dz  d
edz  dee	j                  z  dee   deez  fd„«       «       Z	 	 	 	 	 dde	j                  dedz  dedz  de	j                  dz  de	j                  dz  dedz  fˆ fd„Zˆ xZS )ÚCsmDepthDecoderForCausalLMNc                 óæ   •— t         ‰| �  |«       t        |«      | _        |j                  | _        t        |j                  |j                  |j                  «      | _        | j                  «        y r™   )
rF   rG   r  rÿ   r  r  rN   r  Úcodebooks_headr*  r«   s     €r?   rG   z#CsmDepthDecoderForCausalLM.__init__*  sY   ø€ Ü‰Ñ˜Ô Ü)¨&Ó1ˆŒ
Ø ×+Ñ+ˆŒÜ.¨v×/AÑ/AÀ6×CWÑCWÐY_×YjÑYjÓkˆÔð 	�‰Õr>   r+  r,  rÆ   r”   r,   r-  Úlabelsr÷   Úlogits_to_keeprÉ   rD   c
                 óº  — |�|j                  «       nd}|�|j                  d   n|j                  d   }|�|j                  n|j                  }t        j                  ||¬«      |z   } | j
                  d	|||||||dœ|
¤Ž}|d   }t        |	t        «      r |	dk(  rt        dd«      }nt        |	 d«      }n|	}| j                  |dd…|dd…f   ||   «      }|j                  «       }d}|�B|ddd…f   j                  «       } | j                  d	|d| j                  j                  |dœ|
¤Ž}t        |||j                  |j                   |j"                  ¬«      S )
aî  
        backbone_last_hidden_state (`torch.FloatTensor` of shape `(batch_size, backbone_hidden_size)`, *optional*):
            The last hidden state of the backbone model. Such input is required when the first codebook token (the one generated by the backbone model)
            is provided in the `input_ids` argument.
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.
        Nr   r#   r/  )r+  r,  rÆ   r”   r,   r-  r÷   .)r+   rP  r  Úshift_labels)r*   r+   r,   r-   r.   r=   )r8  r]   rv   r9   r€   rÿ   rŒ   rœ   ÚslicerO  rÑ   Úloss_functionrg   r  r   r,   r-   r.   )rM   r+  r,  rÆ   r”   r,   r-  rP  r÷   rQ  rÉ   r;  rx   rv   rI  Úoutputsr-   Úslice_indicesr+   r*   rS  s                        r?   r[   z"CsmDepthDecoderForCausalLM.forward3  s•  € ð0 @OÐ?Z˜?×9Ñ9Ô;Ð`aÐØ,9Ð,E�-×%Ñ% aÒ(È9Ï?É?Ð[\ÑK]ˆØ)6Ð)B�×%Ò%È	×HXÑHXˆÜ Ÿ<™<¨¸Ô?ÐBRÑRÐà�$—*‘*ð 	
ØØ'AØ)Ø%Ø+Ø'Øñ	
ð ñ	
ˆð   ™
ˆä�n¤cÔ*Ø Ò"ä % a¨£‘ä % ~ o°tÓ <‘à*ˆMà×$Ñ$ ]²1°mÂQÐ3FÑ%GÐIYÐZgÑIhÓiˆØ×"Ñ"Ó$ˆàˆØÐØ! # q¡r '™?×5Ñ5Ó7ˆLØ%�4×%Ñ%ð Ø d°t·{±{×7MÑ7MÐ\hñØlrñˆDô &ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r>   Únext_sequence_lengthÚis_first_iterationc                 óx   •— t        ‰	| �  |||||fi |¤Ž}|s|j                  d«       |j                  d«       |S )Nr,  r”   )rF   Úprepare_inputs_for_generationÚpop)
rM   r+  rX  r,   rÆ   r-  rY  rÉ   Úmodel_inputsrO   s
            €r?   r[  z8CsmDepthDecoderForCausalLM.prepare_inputs_for_generationx  sR   ø€ ô ‘wÑ<ØÐ+¨_¸nÈmñ
Ø_eñ
ˆñ "Ø×ÑÐ9Ô:ð 	×Ñ˜Ô(àÐr>   )	NNNNNNNNr   )NNNNF)r5   r6   r7   Ú_tied_weights_keysÚ_tp_planÚ_pp_planrG   r   r   r9   rû   r:   ra   r	   rü   rœ   r   r   r<   r   r[   r[  rb   rc   s   @r?   rM  rM    s§  ø„ ð ÐØ€HØ€Hôð Øð .2Ø?CØ.2Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñA
à×#Ñ# dÑ*ðA
ð %*×$5Ñ$5¸Ñ$<ðA
ð Ÿ™ tÑ+ð	A
ð
 ×&Ñ&¨Ñ-ðA
ð  ™ðA
ð ×(Ñ(¨4Ñ/ðA
ð × Ñ  4Ñ'ðA
ð ˜$‘;ðA
ð ˜eŸl™lÑ*ðA
ð Ð+Ñ,ðA
ð 
Ð'Ñ	'òA
ó ó ðA
ðL ,0Ø(,Ø26Ø26Ø*/ñà×#Ñ#ðð " D™jðð  ™ð	ð
 ×(Ñ(¨4Ñ/ðð ×(Ñ(¨4Ñ/ðð ! 4™K÷ñ r>   rM  c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r  c                 ó  •— t         ‰| �  «        t        j                  |j                  |j
                  z  |j                  «      | _        | j                  dt        j                  |j                  «      |j
                  z  d¬«       y )Nr  Frk   )rF   rG   rH   r   r  Úcodebook_sizerN   Úembed_audio_tokensrt   r9   r€   r«   s     €r?   rG   z#CsmBackboneModelEmbeddings.__init__�  sn   ø€ Ü‰ÑÔÜ"$§,¡,°×0DÑ0DÀv×G[ÑG[Ñ0[Ð^d×^pÑ^pÓ"qˆÔØ×ÑØ"¤E§L¡L°×1EÑ1EÓ$FÈ×I]ÑI]Ñ$]Ðjoð 	õ 	
r>   c                 óf   — | j                  || j                  z   «      }|j                  d¬«      }|S )Nr!   rŠ   )rd  r  Úsum)rM   r+  r-  s      r?   r[   z"CsmBackboneModelEmbeddings.forward—  s6   € Ø×/Ñ/°	¸D×<UÑ<UÑ0UÓVˆØ%×)Ñ)¨aÐ)Ó0ˆØÐr>   r­   rc   s   @r?   r  r  �  s   ø„ ô
ör>   r  c                   óì   ‡ — e Zd Zˆ fd„Zeee	 	 	 	 	 	 ddej                  dz  dej                  dz  dej                  dz  de
dz  dej                  dz  dedz  d	ee   d
efd„«       «       «       Zˆ xZS )ÚCsmBackboneModelc           	      ó¸  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        |«      | _        t        j                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        t        |j                  |j                  ¬«      | _        t#        |¬«      | _        d| _        | j)                  «        y c c}w )Nrñ   r  F)rF   rG   r  r  r  r  r"  rH   r#  r  r$  rï   r%  rB   rN   rô   r&  re   r'  r(  r*  râ   s      €r?   rG   zCsmBackboneModel.__init__Ÿ  sª   ø€ Ü‰Ñ˜Ô Ø!×.Ñ.ˆÔØ ×+Ñ+ˆŒÜ6°vÓ>ˆÔÜ—m‘mÜAFÀv×G_ÑG_ÓA`Öa°IŒ_˜V YÕ/Òaó
ˆŒô ˜v×1Ñ1°v×7JÑ7JÔKˆŒ	Ü,°FÔ;ˆŒØ&+ˆÔ#ð 	�‰Õùò bs   Á)CNr+  rÆ   r”   r,   r-  r÷   rÉ   rD   c           
      ó<  — |du |duz  rt        d«      ‚|€| j                  |«      }|r|€t        | j                  ¬«      }|€V|�|j	                  «       nd}t        j                  |j                  d   |j                  ¬«      |z   }|j                  d«      }t        | j                  ||||¬«      }	|}
| j                  |
|¬«      }| j                  d| j                  j                   D ]  } ||
f|	||||d	œ|¤Ž}
Œ | j                  |
«      }
t        |
|¬
«      S )a&  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length, num_codebooks) or (batch_size, sequence_length)`):
            1. (batch_size, sequence_length): corresponds to the input sequence prepared with the processor from the text prompt. Such input
            requires `input_values` to be provided so that audio can be encoded in codebook tokens and then merged with the text tokens.

            2. (batch_size, sequence_length, num_codebooks): codebook tokens generated during the autoregressive decoding. Such input is not meant to be used by end users.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        Nz:You must specify exactly one of input_ids or inputs_embedsr  r   r#   r/  r1  r2  )rÆ   rã   r”   r,   r÷   r3  )r7  r"  r
   rg   r8  r9   r€   r]   rv   r´   r   r'  r%  r$  r&  r   )rM   r+  rÆ   r”   r,   r-  r÷   rÉ   r;  r@  r-   rã   rA  s                r?   r[   zCsmBackboneModel.forward®  sL  € ð2 ˜Ð -°tÐ";Ò<ÜÐYÓZÐZàÐ Ø*.×*;Ñ*;¸IÓ*FˆMá˜Ð0Ü*°$·+±+Ô>ˆOàÐØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ Ÿ<™<¨×(;Ñ(;¸AÑ(>À}×G[ÑG[Ô\Ð_oÑoˆLØ'×1Ñ1°!Ó4ˆLä(Ø—;‘;Ø'Ø)Ø+Ø%ô
ˆð &ˆØ"Ÿo™o¨mÈ,˜oÓWÐà!Ÿ[™[Ð)H¨4¯;©;×+HÑ+HÐIò 		ˆMÙ)Øðà*Ø$7Ø)Ø /Ø#ñð ñ‰Mð		ð Ÿ	™	 -Ó0ˆÜ&Ø+Ø+ô
ð 	
r>   )NNNNNN)r5   r6   r7   rG   r   r    r   r9   rû   ra   r	   r:   rü   r   r   r   r[   rb   rc   s   @r?   rh  rh  �  sÆ   ø„ ôð  ØØð .2Ø.2Ø04Ø(,Ø26Ø!%ñ>
à×#Ñ# dÑ*ð>
ð Ÿ™ tÑ+ð>
ð ×&Ñ&¨Ñ-ð	>
ð
  ™ð>
ð ×(Ñ(¨4Ñ/ð>
ð ˜$‘;ð>
ð Ð+Ñ,ð>
ð 
!ò>
ó ó ó  ô>
r>   rh  zË
    The Csm model consists of two llama-like auto-regressive transformer models: a backbone model that predicts the first codebook token and a depth decoder that predicts the other codebook tokens.
    c                   óÀ  ‡ — e Zd ZddiZˆ fd„Zd„ Zd„ Zeˆ fd„«       Zˆ fd„Z		 	 	 	 dd	e
j                  dz  d
e
j                  dz  de
j                  dz  de
j                  dz  de
j                  dz  f
d„Z	 	 	 	 dd	e
j                  dedz  dedz  de
j                  dz  de
j                   dz  f
ˆ fd„Zee	 	 	 	 	 	 	 	 	 	 dd	e
j                  dz  d
e
j                  dz  de
j                  dz  de
j                  dz  de
j                  dz  dedz  de
j                   dz  de
j                  dz  dedz  dee
j                  z  dee   deez  fd„«       «       Zˆ xZS )ÚCsmForConditionalGenerationz5backbone_model.embed_tokens.embed_audio_tokens.weightz'depth_decoder.model.embed_tokens.weightc                 óê  •— t         ‰| �  |«       |j                  | _        t        j                  |j
                  |j                  d¬«      | _        t        j                  |j                  |j
                  «      | _	        t        j                  |«      | _        t        j                  |j                  «      | _        t!        j"                  |j$                  «      | _        | j)                  «        y )NFr¡   )rF   rG   r  rH   r¤   rN   Úlm_headr   Útext_vocab_sizeÚembed_text_tokensrh  Ú_from_configÚbackbone_modelrM  Údepth_decoder_configÚdepth_decoderr"   Úfrom_configÚcodec_configÚcodec_modelr*  r«   s     €r?   rG   z$CsmForConditionalGeneration.__init__ü  s«   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ—y‘y ×!3Ñ!3°V×5FÑ5FÈUÔSˆŒÜ!#§¡¨f×.DÑ.DÀf×FXÑFXÓ!YˆÔÜ.×;Ñ;¸FÓCˆÔÜ7×DÑDÀV×E`ÑE`ÓaˆÔÜ$×0Ñ0°×1DÑ1DÓEˆÔØ�‰Õr>   c                 ó.   — | j                   j                  S r™   ©rr  r"  r^   s    r?   Úget_input_embeddingsz0CsmForConditionalGeneration.get_input_embeddings  s   € Ø×"Ñ"×/Ñ/Ð/r>   c                 ó&   — || j                   _        y r™   ry  )rM   rÅ   s     r?   Úset_input_embeddingsz0CsmForConditionalGeneration.set_input_embeddings	  s   € Ø+0ˆ×ÑÕ(r>   c                 óÞ  •— |j                  dd«      rt        ‰
| �  |i |¤Ž\  }}nt        ‰
| �  |i |¤Ž}d}t        |«      }t	        |j
                  «      j                  «       D ��ci c]  \  }}|j                  |«      r||d  |“Œ }	}}t	        |j                  j
                  «      j                  ddi|	¥«       |	D ]  }t        |j
                  ||z   «       Œ d|v r|fS |S c c}}w )NÚoutput_loading_infoFÚdepth_decoder_Ú_from_model_config)ÚgetrF   Úfrom_pretrainedÚlenÚvarsÚgeneration_configÚitemsÚ
startswithrt  rç   Údelattr)ÚclsÚargsrÉ   rÿ   Úloading_infoÚprefixÚ
prefix_lenÚattrrÅ   Údepth_decoder_attrsrO   s             €r?   r‚  z+CsmForConditionalGeneration.from_pretrained  s  ø€ à�:‰:Ð+¨UÔ3Ü"'¡'Ñ"9¸4Ð"JÀ6Ñ"JÑˆE‘<ä‘GÑ+¨TÐ<°VÑ<ˆEð "ˆÜ˜“[ˆ
ô  $ E×$;Ñ$;Ó<×BÑBÓD÷
á��eØ�‰˜vÔ&ð ��Ð˜uÑ$ð
Ðñ 
ô 	ˆU× Ñ ×2Ñ2Ó3×:Ñ:Ð<PÐRWÐ;oÐ[nÐ;oÔpð (ò 	<ˆDÜ�E×+Ñ+¨V°d©]Õ;ð	<ð ! FÑ*Ø˜,Ð&Ð&àˆLùó
s   Á)!C)c                 óø   •— d}| j                   j                  j                  «       }|j                  dd «       |j	                  «       D ]  \  }}t        | j                  ||z   |«       Œ! t        ‰| �  |i |¤Ž y )Nr  Útransformers_version)rt  r…  Úto_diff_dictr\  r†  ÚsetattrrF   Úsave_pretrained)rM   rŠ  rÉ   rŒ  r�  rŽ  rÅ   rO   s          €r?   r”  z+CsmForConditionalGeneration.save_pretrained'  s|   ø€ à!ˆØ"×0Ñ0×BÑB×OÑOÓQÐØ×ÑÐ 6¸Ô=Ø.×4Ñ4Ó6ò 	B‰KˆD�%Ü�D×*Ñ*¨F°T©M¸5ÕAð	Bô 	‰Ñ Ð0¨Ó0r>   Nr+  Úinput_valuesÚinput_values_cutoffsrP  rD   c                 ó  — | j                  |«      }|��Ut        j                  j                  |d«      }||dk\     j	                  «       }||dkD     }t        j                  |j                  «       |j                  ¬«      j                  t        |«      d«      }||j                  d«      k  }t        j                  «       5  g }t        ||«      D ]�  \  }	}
|
|
dk\     }
t        |
j                  d   dz
  «      D ]r  }|
|   }|
|dz      }|	d||…f   }| j                   j#                  |j                  d«      «      }|j$                  j'                  dd«      }|j)                  |d   «       Œt ŒŸ t        d„ |D «       «      }t        j*                  |D �cg c]6  }t        j                  j                  |ddd||j                  d   z
  f«      ‘Œ8 c}«      }| j                   j-                  |«      }ddd«       | j.                  j0                  }||k(  }| j2                  j5                  «      }|   ||<   t        j6                  dd| j.                  j8                  f|j                  t
        j:                  ¬	«      | j.                  j<                  z  }| j2                  j5                  |«      j?                  d«      }|| j.                  j@                  k(  }|jC                  |jE                  «       d«      ||<   |�j|j                  d«      jC                  dd| j.                  j8                  «      }||   ||<   |||<   |d
k(  jG                  d¬«      }d||d   |d   dd…f<   |}||dœS c c}w # 1 sw Y   �Œ‚xY w)a˜  
        Merges the input_ids and input_values to produce a single inputs_embeds tensor:
        1 - Infers the codec model on the input_values to retrieve codebook token.
        2 - Embeds codebook tokens and places them at the correct positions in the inputs_embeds tensor.
        3 - If labels are provided, expands them to match codebook dimensions and position the target codebook tokens in the inputs_embeds tensor.

        Args:
            input_ids (`torch.Tensor` of shape `(batch_size, sequence_length)`):
                The input ids to embed.
            input_values (`torch.Tensor` of shape `(batch_size, channels, audio_sequence_length)`):
                The audio input values to embed.
            input_values_cutoffs (`torch.Tensor` of shape `(batch_size, max_num_audio)`):
                The cutoffs of the audio input values relative to its batch index, padded with -1 when no audio.
        N©r#   r   r   r/  rQ   r#   .c              3   ó:   K  — | ]  }|j                   d    –— Œ y­w)r   N)r]   )Ú.0Úels     r?   ú	<genexpr>zQCsmForConditionalGeneration._merge_input_ids_with_input_values.<locals>.<genexpr>a  s   è ø€ Ò&O°r r§x¡x°¥{Ñ&Oùs   ‚r}   i›ÿÿÿT©Úas_tupleéœÿÿÿ)r-  rP  )$rp  rH   rÏ   ÚpadÚdiffr9   r€   Úmaxrv   r‹   rƒ  r´   r�   Úzipr  r]   rw  ÚencodeÚaudio_codesr�   ÚappendrH  Úget_audio_codes_maskrg   Úaudio_token_idrr  r"  rJ   r  ÚlongÚcodebook_eos_token_idÚsqueezeÚaudio_eos_token_idÚrepeatrf  Únonzero)rM   r+  r•  r–  rP  r-  Úaudio_lengthsÚinput_values_maskÚaudio_tokens_listÚbatch_input_valuesÚbatch_input_values_cutoffsr  Ú	start_idxÚend_idxÚaudio_batchÚcodec_outputsÚcodebook_idsÚmax_audio_framesr›  Úbatched_audio_token_idsÚaudio_codes_maskr¨  Úaudio_token_maskÚaudio_embedsÚaudio_eos_frame_idsÚaudio_eos_embedsÚaudio_eos_token_maskÚlabels_expandedÚ depth_decoder_ignore_frames_idxss                                r?   Ú"_merge_input_ids_with_input_valuesz>CsmForConditionalGeneration._merge_input_ids_with_input_values1  s   € ð* ×.Ñ.¨yÓ9ˆàÑ#ä#%§=¡=×#4Ñ#4Ð5IÈ6Ó#RÐ Ø0Ð1EÈÑ1JÑK×PÑPÓRˆMØ)¨-¸!Ñ*;Ñ<ˆMÜ %§¡Ð-A×-EÑ-EÓ-GÐP\×PcÑPcÔ d× kÑ kÜ�MÓ" Bó!Ðð !2°M×4KÑ4KÈAÓ4NÑ NÐô
 —‘“ñ \Ø$&Ð!ÜFIÈ,ÐXlÓFmò BÑBÐ&Ð(BØ1KÐLfÐjkÑLkÑ1lÐ.Ü"Ð#=×#CÑ#CÀAÑ#FÈÑ#JÓKò B˜Ø$>¸qÑ$A˜	Ø"<¸QÀ¹UÑ"C˜Ø&8¸¸iÈÐ>OÐ9OÑ&P˜Ø(,×(8Ñ(8×(?Ñ(?À×@UÑ@UÐVWÓ@XÓ(Y˜Ø'4×'@Ñ'@×'JÑ'JÈ1ÈbÓ'Q˜Ø)×0Ñ0°¸a±ÕAñBðBô $'Ñ&OÐ=NÔ&OÓ#OÐ Ü*/¯+©+Ø`qÖrÐZ\”R—]‘]×&Ñ& r¨A¨q°!Ð5EÈÏÉÐQRÉÑ5SÐ+TÕUÒró+Ð'ð $(×#3Ñ#3×#HÑ#HÐIZÓ#[Ð ÷!\ð$ "Ÿ[™[×7Ñ7ˆNØ(¨NÑ:Ðà×.Ñ.×;Ñ;Ð<SÓTˆLØ.:Ð;KÑ.LˆMÐ*Ñ+ô —
‘
˜A˜q $§+¡+×";Ñ";Ð<ÀY×EUÑEUÔ]b×]gÑ]gÔhØ—+‘+×3Ñ3ñ4ð  ð  $×2Ñ2×?Ñ?Ð@SÓT×\Ñ\Ð]^Ó_Ðà#,°·±×0NÑ0NÑ#NÐ Ø2B×2IÑ2IÐJ^×JbÑJbÓJdÐfgÓ2hˆMÐ.Ñ/ð Ð!Ø"(×"2Ñ"2°2Ó"6×"=Ñ"=¸aÀÀDÇKÁK×D]ÑD]Ó"^�Ø4KÐL\Ñ4]�Ð 0Ñ1Ø8K�Ð 4Ñ5à4:¸d±N×3KÑ3KÐUYÐ3KÓ3ZÐ0Øpt�Ð @ÀÑ CÐEeÐfgÑEhÐjkÑjlÐ lÑmØ(�à!.¸&ÑAÐAùò= s÷\ñ \ús   ÃCM4Æ;M/
Ç"M4Í/M4Í4M>rX  r,   rÆ   r-  c           	      ó0  •— t        ‰	| �  d	|||||dœ|¤Ž}|�}|j                  dk(  rn|j                  d«      €]| j	                  ||j                  d«      |j                  d«      |j                  d«      ¬«      }|j                  |d   |d   d dœ«       |S )
N)r+  rX  r,   rÆ   r-  r!   r-  r•  r–  rP  )r+  r•  r–  rP  )r-  rP  r+  r=   )rF   r[  Úndimr�  rÃ  rç   )
rM   r+  rX  r,   rÆ   r-  rÉ   r]  Úmerged_inputsrO   s
            €r?   r[  z9CsmForConditionalGeneration.prepare_inputs_for_generationƒ  sÁ   ø€ ô ‘wÑ<ð 
ØØ!5Ø+Ø)Ø'ñ
ð ñ
ˆð Ð  Y§^¡^°qÒ%8¸\×=MÑ=MÈoÓ=^Ð=fØ ×CÑCØ#Ø#ŸZ™Z¨Ó7Ø%+§Z¡ZÐ0FÓ%GØ—z‘z (Ó+ð	 Dó ˆMð ×ÑØ"/°Ñ"@ÈMÐZbÑLcÐrvÑwôð Ðr>   r”   r÷   rQ  rÉ   c                 óê  — |�/|j                   dk(  r | j                  ||||«      }|d   }|d   }d} | j                  d||||||	dœ|¤Ž}|d   }t        |
t        «      rt        |
 d«      n|
}| j                  |dd…|dd…f   «      }d}d}d}d}|�ð|dd…dd…df   } | j                  d||| j                  j                  dœ|¤Ž}|dd…dd…dd…f   d	k(  j                  d
¬«       }||   dd| j                  j                  dz
  …f   }t        j                  j                  |dd¬«      }|j                  d¬«      }||d   |d   dz
  dd…f   }||   } | j                   d|||	d|dœ|¤Ž}|j"                  }||z   }t%        |||||j&                  |j(                  |j*                  |�|j,                  nd|�|j&                  nd|�|j(                  nd|�|j*                  ¬«      S d¬«      S )a  
        input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length, num_codebooks) or (batch_size, sequence_length)`):
            1. (batch_size, sequence_length): corresponds to the input sequence prepared with the processor from the text prompt. Such input
            requires `input_values` to be provided so that audio can be encoded in codebook tokens and then merged with the text tokens.

            2. (batch_size, sequence_length, num_codebooks): codebook tokens generated during the autoregressive decoding. Such input is not meant to be used by end users.

            Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
            [`PreTrainedTokenizer.__call__`] for details.

            [What are input IDs?](../glossary#input-ids)
        input_values_cutoffs (`torch.Tensor` of shape `(batch_size, max_num_audio)`, *optional*):
            Specify the end positions of audio segments within each batch entry, relative to the concatenated audio input.
            If a batch entry has fewer segments than the maximum, it is padded with -1. For example, in a batch of 2 sequences
            where the first contains 2 audio segments of length l1, and the second contains 1 audio segment of length l2,
            the input_values_cutoffs would be: [[l1, 2 * l1], [l2, -1]].
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should be in `[config.audio_token_id, -100, -101]`.
            Requires targeted `input_values` to be provided as audio tokens will be inferred from it using the `codec_model`.
            - `config.audio_token_id` indicates an audio frames (considering sequence length elements as frames)
            - `-100` will be ignored in the loss computation
            - `-101` indicates the audio frame will be used only for the backbone model (using the first codebook token as labels)

            Such labels can be prepared using `output_labels=True` when calling [`CsmProcessor`].
        logits_to_keep (`int` or `torch.Tensor`, *optional*):
            Kept for compatibility. Does not support another value than:
            1. `0`, which is equivalent to keeping all logits, used in the training regime
            2. `1`, which is equivalent to keeping only the last logit, used in the generation regime

        Example:

        ```python
        >>> import torch
        >>> from transformers import CsmForConditionalGeneration, AutoProcessor
        >>> from datasets import load_dataset, Audio

        >>> model_id = "sesame/csm-1b"
        >>> torch_device = "cuda" if torch.cuda.is_available() else "cpu"

        >>> processor = AutoProcessor.from_pretrained(model_id)

        >>> ds = load_dataset("hf-internal-testing/dailytalk-dummy", split="train")
        >>> # ensure the audio is 24kHz
        >>> ds = ds.cast_column("audio", Audio(sampling_rate=24000))

        >>> conversation = []
        >>> # prepare a conversation with text and corresponding audio
        >>> for text, audio, speaker_id in zip(ds[:4]["text"], ds[:4]["audio"], ds[:4]["speaker_id"]):
        ...     conversation.append(
        ...         {
        ...             "role": f"{speaker_id}",
        ...             "content": [{"type": "text", "text": text}, {"type": "audio", "path": audio["array"]}],
        ...         }
        ...     )

        >>> inputs = processor.apply_chat_template(
        ...     conversation,
        ...     tokenize=True,
        ...     return_dict=True,
        ...     output_labels=True,
        ... ).to(torch_device)

        >>> model = CsmForConditionalGeneration.from_pretrained(model_id, device_map=torch_device)
        >>> output = model(**inputs)
        >>> output.loss.backward()
        ```Nr!   r-  rP  )r+  rÆ   r”   r,   r-  r÷   r   )r+   rP  r  r#   rŸ  rQ   rŠ   .r˜  )rÅ   Tr�  )r+  r,  r÷   Úreturn_dictrP  )r*   r4   r/   r+   r,   r-   r.   r0   r1   r2   r3   r=   )rÅ  rÃ  rr  rŒ   rœ   rT  rn  rU  rg   r  Úallr  rH   rÏ   r   r®  rt  r*   r)   r,   r-   r.   r+   )rM   r+  r•  rÆ   r–  r”   r,   r-  rP  r÷   rQ  rÉ   rÆ  Úbackbone_outputsÚbackbone_hidden_statesrW  Úbackbone_logitsr*   r4   r/   Údepth_decoder_outputsÚbackbone_labelsÚ
train_maskÚdepth_decoder_input_idsÚ
train_idxsÚbackbone_last_hidden_statesÚdepth_decoder_labelss                              r?   r[   z#CsmForConditionalGeneration.forward¢  s­  € ðd Ð  Y§^¡^°qÒ%8Ø ×CÑCØ˜<Ð)=¸vóˆMð *¨/Ñ:ˆMØ" 8Ñ,ˆFØˆIà.˜4×.Ñ.ð 
ØØ)Ø%Ø+Ø'Øñ
ð ñ
Ðð "2°!Ñ!4Ðä8BÀ>ÔSVÔ8Wœ˜~˜o¨tÔ4Ð]kˆØŸ,™,Ð'=ºaÀÒPQÐ>QÑ'RÓSˆàˆØˆØ!ÐØ $ÐØÐà$¢Qª¨1 W™oˆOØ.˜D×.Ñ.ð Ø&¨È4Ï;É;×KaÑKañØekñˆMð "¢!¢Q¨© (Ñ+¨tÑ3×8Ñ8¸RÐ8Ó@Ð@ˆJØ&,¨ZÑ&8¸Ð>]ÀÇÁ×@YÑ@YÐ\]Ñ@]Ð>]Ð9]Ñ&^Ð#ä&(§m¡m×&7Ñ&7Ð8OÐQWÐ_`Ð&7Ó&aÐ#à#×+Ñ+°TÐ+Ó:ˆJØ*@ÀÈAÁÐPZÐ[\ÑP]Ð`aÑPaÒcdÐAdÑ*eÐ'Ø#)¨*Ñ#5Ð à$6 D×$6Ñ$6ð %Ø1Ø+FØ#Ø Ø+ñ%ð ñ%Ð!ð "7×!;Ñ!;ÐØ Ð#5Ñ5ˆDä ØØ'Ø1Ø"Ø,×<Ñ<Ø*×8Ñ8Ø'×2Ñ2ØAVÐAbÐ!6×!=Ò!=Ðhlà$Ð0ð +@×*OÒ*Oàà$Ð0ð )>×(KÒ(KàØI^ÐIjÐ%:×%EÑ%Eô
ð 	
ð quô
ð 	
r>   )NNNN)
NNNNNNNNNr   )r5   r6   r7   r^  rG   rz  r|  Úclassmethodr‚  r”  r9   ra   rÃ  rû   rœ   r	   r:   r[  r   r   rü   r   r   r<   r)   r[   rb   rc   s   @r?   rl  rl  ò  sD  ø„ ð 	@ÐAjðÐôò0ò1ð óó ðô41ð *.Ø,0Ø48Ø&*ñPBà—<‘< $Ñ&ðPBð —l‘l TÑ)ðPBð $Ÿl™l¨TÑ1ð	PBð
 —‘˜tÑ#ðPBð 
�‰˜Ñ	óPBðj ,0Ø(,Ø26Ø26ñà×#Ñ#ðð " D™jðð  ™ð	ð
 ×(Ñ(¨4Ñ/ðð ×(Ñ(¨4Ñ/õð> Øð .2Ø,0Ø.2Ø48Ø04Ø(,Ø26Ø*.Ø!%Ø-.ñY
à×#Ñ# dÑ*ðY
ð —l‘l TÑ)ðY
ð Ÿ™ tÑ+ð	Y
ð
 $Ÿl™l¨TÑ1ðY
ð ×&Ñ&¨Ñ-ðY
ð  ™ðY
ð ×(Ñ(¨4Ñ/ðY
ð × Ñ  4Ñ'ðY
ð ˜$‘;ðY
ð ˜eŸl™lÑ*ðY
ð Ð+Ñ,ðY
ð 
Ð"Ñ	"òY
ó ó ôY
r>   rl  )rþ   rh  r  rM  rl  )r#   )rå   )SÚcollections.abcr   Údataclassesr   Útypingr   r9   Útorch.nnrH   Ú r   r  Úactivationsr   Úcache_utilsr	   r
   Ú
generationr   Úintegrationsr   r   r   Úmasking_utilsr   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   r   Úutils.import_utilsr   Úutils.output_capturingr    Úautor"   Úconfiguration_csmr$   r%   Úgeneration_csmr&   Ú
get_loggerr5   r5  r)   ÚModulerB   re   rŸ   r±   rº   ra   rœ   rÁ   r`   rÖ   rØ   rï   rþ   r  r  rM  r  rh  rl  Ú__all__r=   r>   r?   ú<module>rî     sÁ  ðõ* %Ý !Ý ã Ý å &Ý !ß .Ý )ß fÑ fÝ /Ý 9ß Oß Kß FÝ &ß _Õ _ß GÝ :Ý 5Ý ß ?Ý .ð 
ˆ×	Ñ	˜HÓ	%€ñ ðôð
 ô'3˜ó '3ó óð'3ñT ˜YÓ'ôJ�—‘ó Jó (ðJô(><˜Ÿ™ô ><ôBˆR�Y‰Yô ò (ñ Ð*Ó+òó ,ðð2	U˜UŸ\™\ð 	U°#ð 	U¸%¿,¹,ó 	Uð& ñ%Ø�I‰Ið%à�<‰<ð%ð 
�‰ð%ð �<‰<ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð ð%ð Ð'Ñ(ó%ñ2 Ð)Ó*ô@)�2—9‘9ó @)ó +ð@)ôF(Ð0ô (ñV ðôð
 ôv˜ó vó óðvð< ôd
Ð-ó d
ó ðd
ôN�r—y‘yô ñ( ðôôgÐ!3°_ó góðgôT §¡ô ð ôQ
Ð)ó Q
ó ðQ
ñh ðôô
F
Ð"4Ð6Hó F
óð
F
òR
�r>   