§
    ‚Štj³c  ã                   óØ  — d Z ddlZddlmZ ddlmZ ddlZddlm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mZmZmZ ddlmZ ddlmZ e G d„ de¦  «        ¦   «         Ze G d„ de¦  «        ¦   «         Ze G d„ de¦  «        ¦   «         Z  G d„ dej!        ¦  «        Z" G d„ dej!        ¦  «        Z# G d„ dej!        ¦  «        Z$ G d„ dej!        ¦  «        Z% G d„ dej!        ¦  «        Z& G d„ d ej!        ¦  «        Z' G d!„ d"ej!        ¦  «        Z( G d#„ d$ej!        ¦  «        Z)e G d%„ d&e¦  «        ¦   «         Z* ed'¬(¦  «         G d)„ d*e*¦  «        ¦   «         Z+d*d&gZ,dS )+zTransformers Xcodec model.é    N)Ú	dataclass)Ú	lru_cacheé   )Úinitialization)Úconv1d_output_length)ÚPreTrainedAudioTokenizerBase)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleé   )Ú	AutoModelé   )ÚXcodecConfigc                   óP   — e Zd ZU dZdZej        dz  ed<   dZej	        dz  ed<   dS )ÚXcodecOutputao  
    Args:
        audio_codes (`torch.LongTensor`  of shape `(batch_size, num_quantizers, codes_length)`, *optional*):
            Discrete code indices computed using `model.encode`.
        audio_values (`torch.FloatTensor` of shape `(batch_size, channels, num_samples)`, *optional*)
            Decoded audio values obtained using the decoder part of Xcodec.
    NÚaudio_codesÚaudio_values)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚ
LongTensorÚ__annotations__r   ÚFloatTensor© ó    úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/xcodec/modeling_xcodec.pyr   r   &   sN   € € € € € € ðð ð ,0€K�Ô! DÑ(Ð/Ð/Ñ/Ø-1€L�%Ô# dÑ*Ð1Ð1Ñ1Ð1Ð1r   r   c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚXcodecEncoderOutputz½
    Args:
        audio_codes (`torch.LongTensor`  of shape `(batch_size, num_quantizers, codes_length)`, *optional*):
            Discrete code indices computed using `model.encode`.
    Nr   )r   r   r   r   r   r   r   r   r   r   r    r"   r"   4   s6   € € € € € € ðð ð ,0€K�Ô! DÑ(Ð/Ð/Ñ/Ð/Ð/r   r"   c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚXcodecDecoderOutputzÃ
    Args:
        audio_values (`torch.FloatTensor`  of shape `(batch_size, channels, num_samples)`, *optional*):
            Decoded audio values obtained using the decoder part of Xcodec.
    Nr   )r   r   r   r   r   r   r   r   r   r   r    r$   r$   ?   s6   € € € € € € ðð ð .2€L�%Ô# dÑ*Ð1Ð1Ñ1Ð1Ð1r   r$   c                   óX   ‡ — e Zd ZdZdedededefˆ fd„Zdej        dej        fd	„Z	ˆ xZ
S )
ÚXcodecResidualUnitzFResidual block for SemanticEncoder and SemanticDecoder used in Xcodec.ÚconfigÚin_channelsÚout_channelsÚdilationc           
      ó  •— t          ¦   «                              ¦   «          t          j        ¦   «         | _        |j        dz
  dz  |z  }t          j        |||j        d||dd¬¦  «        | _        t          j        ||dd¬¦  «        | _        d S )Nr   r   F)ÚstrideÚpaddingr*   ÚgroupsÚbias)r(   r)   Úkernel_sizer/   )	ÚsuperÚ__init__ÚnnÚELUÚ
activationÚunit_kernel_sizeÚConv1dÚconv1Úconv2)Úselfr'   r(   r)   r*   r-   Ú	__class__s         €r    r2   zXcodecResidualUnit.__init__M   s’   ø€ Ý‰Œ×ÒÑÔÐÝœ&™(œ(ˆŒØÔ+¨aÑ/°AÑ5¸ÑAˆÝ”YØØØÔ#ØØØØØð	
ñ 	
ô 	
ˆŒ
õ ”Y¨<ÀlÐ`aÐhmÐnÑnÔnˆŒ
ˆ
ˆ
r   Úhidden_stateÚreturnc                 ó´   — |                       |¦  «        }|                      |¦  «        }|                       |¦  «        }|                      |¦  «        }||z   S ©N)r5   r8   r9   )r:   r<   Úoutput_tensors      r    ÚforwardzXcodecResidualUnit.forward]   sQ   € ØŸš¨Ñ5Ô5ˆØŸ
š
 =Ñ1Ô1ˆØŸš¨Ñ6Ô6ˆØŸ
š
 =Ñ1Ô1ˆØ˜mÑ+Ð+r   )r   r   r   r   r   Úintr2   r   ÚTensorrA   Ú__classcell__©r;   s   @r    r&   r&   J   s�   ø€ € € € € ØPÐPðo˜|ð o¸#ð oÈSð oÐ\_ð oð oð oð oð oð oð , E¤Lð ,°U´\ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,r   r&   c                   óT   ‡ — e Zd Zdedededefˆ fd„Zdej        dej        fd„Zˆ xZ	S )	ÚXcodecSemanticEncoderBlockr'   r(   r)   r,   c                 ó
  •‡‡— t          ¦   «                              ¦   «          t          j        ˆˆfd„‰j        D ¦   «         ¦  «        | _        |dk    rdnd|z  }|dz
  dz  }t          j        ‰||||d¬¦  «        | _        d S )Nc                 ó4   •— g | ]}t          ‰‰‰|¦  «        ‘ŒS r   ©r&   )Ú.0r*   r'   r(   s     €€r    ú
<listcomp>z7XcodecSemanticEncoderBlock.__init__.<locals>.<listcomp>i   s)   ø€ ÐsÐsÐsÐPXÕ ¨°[À(ÑKÔKÐsÐsÐsr   r   r   r   T©r0   r,   r-   r/   )r1   r2   r3   Ú
ModuleListÚblock_dilationsÚ	res_unitsr7   Úconv)r:   r'   r(   r)   r,   Úkernelr-   r;   s    ``    €r    r2   z#XcodecSemanticEncoderBlock.__init__f   s–   øøø€ Ý‰Œ×ÒÑÔÐÝœØsÐsÐsÐsÐsÐ\bÔ\rÐsÑsÔsñ
ô 
ˆŒð
  ’k�k��¨¨F©
ˆØ˜A‘: !Ñ#ˆÝ”I˜k¨<ÀVÐTZÐdkÐrvÐwÑwÔwˆŒ	ˆ	ˆ	r   r<   r=   c                 óZ   — | j         D ]} ||¦  «        }Œ|                      |¦  «        }|S r?   )rP   rQ   ©r:   r<   Úunits      r    rA   z"XcodecSemanticEncoderBlock.forwardq   s;   € Ø”Nð 	.ð 	.ˆDØ˜4 Ñ-Ô-ˆLˆLØ—y’y Ñ.Ô.ˆØÐr   ©
r   r   r   r   rB   r2   r   rC   rA   rD   rE   s   @r    rG   rG   e   sŠ   ø€ € € € € ð	x˜|ð 	x¸#ð 	xÈSð 	xÐZ]ð 	xð 	xð 	xð 	xð 	xð 	xð E¤Lð °U´\ð ð ð ð ð ð ð ð r   rG   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚSemanticEncoderc                 ó  •— t          ¦   «                              ¦   «          t          |j        ¦  «        t          |j        ¦  «        k    rt          d¦  «        ‚t          j        |j        |j        |j	        d|j	        dz  d¬¦  «        | _
        |j        }g }t          |j        ¦  «        D ]?\  }}t          |j        |j        |         z  ¦  «        }|t          ||||¦  «        gz  }|}Œ@t          j        |¦  «        | _        d S )Nz:Number of strides must match the number of channel_ratios.r   r   F©r/   )r1   r2   ÚlenÚstridesÚchannel_ratiosÚ
ValueErrorr3   r7   Úsemantic_hidden_sizer0   rQ   Ú	enumeraterB   rG   rN   Úconv_blocks)r:   r'   r(   ra   Úir,   r)   r;   s          €r    r2   zSemanticEncoder.__init__y   s	  ø€ Ý‰Œ×ÒÑÔÐÝˆvŒ~ÑÔ¥# fÔ&;Ñ"<Ô"<Ò<Ð<ÝÐYÑZÔZÐZÝ”IØÔ'ØÔ'ØÔØØÔ !Ñ#Øð
ñ 
ô 
ˆŒ	ð Ô1ˆØˆÝ" 6¤>Ñ2Ô2ð 	'ð 	'‰IˆAˆvÝ˜vÔ:¸VÔ=RÐSTÔ=UÑUÑVÔVˆLØÕ6°v¸{ÈLÐZ`ÑaÔaÐbÑbˆKØ&ˆKˆKåœ=¨Ñ5Ô5ˆÔÐÐr   r<   r=   c                 óZ   — |                       |¦  «        }| j        D ]} ||¦  «        }Œ|S r?   )rQ   ra   ©r:   r<   Úblocks      r    rA   zSemanticEncoder.forward�   s<   € Ø—y’y Ñ.Ô.ˆØÔ%ð 	/ð 	/ˆEØ ˜5 Ñ.Ô.ˆLˆLØÐr   ©r   r   r   r2   r   rC   rA   rD   rE   s   @r    rX   rX   x   s^   ø€ € € € € ð6ð 6ð 6ð 6ð 6ð, E¤Lð °U´\ð ð ð ð ð ð ð ð r   rX   c                   óT   ‡ — e Zd Zdedededefˆ fd„Zdej        dej        fd„Zˆ xZ	S )	ÚSemanticDecoderBlockr'   r(   r)   r,   c           	      ób  •‡‡— t          ¦   «                              ¦   «          |dk    r t          j        |‰dddd¬¦  «        | _        n:d|z  }|dz   dz  }|dz  dk    rdnd}t          j        |‰||||d¬¦  «        | _        t          j        ˆˆfd	„‰j        D ¦   «         ¦  «        | _        d S )
Nr   r   TrM   r   r   FrZ   c                 ó4   •— g | ]}t          ‰‰‰|¦  «        ‘ŒS r   rJ   )rK   r*   r'   r)   s     €€r    rL   z1SemanticDecoderBlock.__init__.<locals>.<listcomp>«   s)   ø€ ÐuÐuÐuÐRZÕ ¨°lÀHÑMÔMÐuÐuÐur   )	r1   r2   r3   r7   rQ   ÚConvTranspose1drN   rO   rP   )	r:   r'   r(   r)   r,   r0   r-   Úoutput_paddingr;   s	    ` `    €r    r2   zSemanticDecoderBlock.__init__—   sÞ   øøø€ Ý‰Œ×ÒÑÔÐØ�QŠ;ˆ;Ýœ	ØØØØØØðñ ô ˆDŒIˆIð ˜f™*ˆKØ ‘z aÑ'ˆGØ"(¨1¡*°¢/ /˜Q˜Q°qˆNÝÔ*Ø˜\¨;¸ÀÈÐ^cðñ ô ˆDŒIõ œØuÐuÐuÐuÐuÐ^dÔ^tÐuÑuÔuñ
ô 
ˆŒˆˆr   r<   r=   c                 óZ   — |                       |¦  «        }| j        D ]} ||¦  «        }Œ|S r?   )rQ   rP   rT   s      r    rA   zSemanticDecoderBlock.forward®   s;   € Ø—y’y Ñ.Ô.ˆØ”Nð 	.ð 	.ˆDØ˜4 Ñ-Ô-ˆLˆLØÐr   rV   rE   s   @r    rh   rh   –   s€   ø€ € € € € ð
˜|ð 
¸#ð 
ÈSð 
ÐZ]ð 
ð 
ð 
ð 
ð 
ð 
ð. E¤Lð °U´\ð ð ð ð ð ð ð ð r   rh   c                   óB   ‡ — e Zd Zˆ fd„Zdej        dej        fd„Zˆ xZS )ÚSemanticDecoderc                 óÀ  •— t          ¦   «                              ¦   «          t          j        |j        t          |j        |j        d         z  ¦  «        |j        d|j        dz  d¬¦  «        | _        g }t          |j
        ¦  «        D ]…\  }}t          |j        |j        |         z  ¦  «        }|t          |j        ¦  «        dz
  k     r&t          |j        |j        |dz            z  ¦  «        }n|j        }|t          ||||¦  «        gz  }Œ†t          j        |¦  «        | _        t          j        |j        |j        |j        d|j        dz  d¬¦  «        | _        d S )Nr   r   r   F)r(   r)   r0   r,   r-   r/   )r,   r-   r/   )r1   r2   r3   r7   r_   rB   r]   r0   r8   r`   r\   r[   rh   rN   ra   r9   )r:   r'   ra   rb   r,   r(   r)   r;   s          €r    r2   zSemanticDecoder.__init__¶   sg  ø€ Ý‰Œ×ÒÑÔÐÝ”YØÔ3Ý˜VÔ8¸6Ô;PÐQRÔ;SÑSÑTÔTØÔ*ØØÔ&¨!Ñ+Øð
ñ 
ô 
ˆŒ
ð ˆÝ" 6¤>Ñ2Ô2ð 	]ð 	]‰IˆAˆvÝ˜fÔ9¸FÔ<QÐRSÔ<TÑTÑUÔUˆKà•C˜Ô-Ñ.Ô.°Ñ2Ò3Ð3Ý" 6Ô#>ÀÔAVÐWXÐ[\ÑW\ÔA]Ñ#]Ñ^Ô^��à%Ô:�àÕ0°¸ÀlÐTZÑ[Ô[Ð\Ñ\ˆKˆKåœ=¨Ñ5Ô5ˆÔÝ”YØÔ'ØÔ'ØÔØØÔ&¨!Ñ+Øð
ñ 
ô 
ˆŒ
ˆ
ˆ
r   r<   r=   c                 ó„   — |                       |¦  «        }| j        D ]} ||¦  «        }Œ|                      |¦  «        }|S r?   )r8   ra   r9   rd   s      r    rA   zSemanticDecoder.forwardÕ   sM   € Ø—z’z ,Ñ/Ô/ˆØÔ%ð 	/ð 	/ˆEØ ˜5 Ñ.Ô.ˆLˆLØ—z’z ,Ñ/Ô/ˆØÐr   rf   rE   s   @r    ro   ro   µ   s^   ø€ € € € € ð
ð 
ð 
ð 
ð 
ð> E¤Lð °U´\ð ð ð ð ð ð ð ð r   ro   c                   ó4   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zˆ xZS )ÚXcodecEuclideanCodebookz!Codebook with Euclidean distance.c                 óÆ  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        }|j        | _        |                      dt          j        dg¦  «        ¦  «         |                      dt          j        |j        ¦  «        ¦  «         |                      d|¦  «         |                      d|                     ¦   «         ¦  «         d S )NÚinitedTÚcluster_sizeÚembedÚ	embed_avg)	r1   r2   r   ÚzerosÚcodebook_sizeÚcodebook_dimÚregister_bufferrC   Úclone)r:   r'   rw   r;   s      €r    r2   z XcodecEuclideanCodebook.__init__à   sº   ø€ Ý‰Œ×ÒÑÔÐÝ”˜FÔ0°&Ô2EÑFÔFˆØ#Ô1ˆÔØ×Ò˜X¥u¤|°T°FÑ';Ô';Ñ<Ô<Ð<Ø×Ò˜^­U¬[¸Ô9MÑ-NÔ-NÑOÔOÐOØ×Ò˜W eÑ,Ô,Ð,Ø×Ò˜[¨%¯+ª+©-¬-Ñ8Ô8Ð8Ð8Ð8r   c                 ó0  — | j                              ¦   «         }|                     d¦  «                             dd¬¦  «        }|d|z  |z  z
  |                     d¦  «                             dd¬¦  «        z    }|                     d¬¦  «        j        }|S )Nr   r   T)Úkeepdimr   éÿÿÿÿ©Údim)rw   ÚtÚpowÚsumÚmaxÚindices)r:   Úhidden_statesrw   Úscaled_statesÚdistÚ	embed_inds         r    Úquantizez XcodecEuclideanCodebook.quantizeê   s�   € Ø”
—’‘”ˆØ%×)Ò)¨!Ñ,Ô,×0Ò0°¸DÐ0ÑAÔAˆØ  ]Ñ!2°UÑ!:Ñ:¸U¿YºYÀq¹\¼\×=MÒ=MÈaÐY]Ð=MÑ=^Ô=^Ñ^Ð_ˆØ—H’H �HÑ$Ô$Ô,ˆ	ØÐr   c                 óœ   — |j         }|                     d|d         f¦  «        }|                      |¦  «        } |j        |d d…         Ž }|S )Nr€   )ÚshapeÚreshaperŒ   Úview)r:   rˆ   rŽ   r‹   s       r    ÚencodezXcodecEuclideanCodebook.encodeñ   sR   € ØÔ#ˆØ%×-Ò-¨r°5¸´9¨oÑ>Ô>ˆØ—M’M -Ñ0Ô0ˆ	Ø"�I”N E¨#¨2¨#¤JÐ/ˆ	ØÐr   c                 ót   — t          j        |                     | j        j        ¦  «        | j        ¦  «        }|S r?   )ÚFÚ	embeddingÚtorw   Údevice)r:   r‹   Ú	quantizeds      r    ÚdecodezXcodecEuclideanCodebook.decodeø   s,   € Ý”K 	§¢¨T¬ZÔ->Ñ ?Ô ?ÀÄÑLÔLˆ	ØÐr   )	r   r   r   r   r2   rŒ   r‘   r˜   rD   rE   s   @r    rs   rs   Ý   sk   ø€ € € € € Ø+Ð+ð9ð 9ð 9ð 9ð 9ðð ð ðð ð ðð ð ð ð ð ð r   rs   c                   ó4   ‡ — e Zd ZdZdefˆ fd„Zd„ Zd„ Zˆ xZS )ÚXcodecVectorQuantizationzY
    Vector quantization implementation. Currently supports only euclidean distance.
    r'   c                 óp   •— t          ¦   «                              ¦   «          t          |¦  «        | _        d S r?   )r1   r2   rs   Úcodebook©r:   r'   r;   s     €r    r2   z!XcodecVectorQuantization.__init__  s,   ø€ Ý‰Œ×ÒÑÔÐÝ/°Ñ7Ô7ˆŒˆˆr   c                 óh   — |                      ddd¦  «        }| j                             |¦  «        }|S ©Nr   r   r   )Úpermuterœ   r‘   )r:   rˆ   Úembed_ins      r    r‘   zXcodecVectorQuantization.encode  s3   € Ø%×-Ò-¨a°°AÑ6Ô6ˆØ”=×'Ò'¨Ñ6Ô6ˆØˆr   c                 óh   — | j                              |¦  «        }|                     ddd¦  «        }|S rŸ   )rœ   r˜   r    )r:   r‹   rŒ   s      r    r˜   zXcodecVectorQuantization.decode  s3   € Ø”=×'Ò'¨	Ñ2Ô2ˆØ×#Ò# A q¨!Ñ,Ô,ˆØˆr   )	r   r   r   r   r   r2   r‘   r˜   rD   rE   s   @r    rš   rš   ý   sl   ø€ € € € € ðð ð8˜|ð 8ð 8ð 8ð 8ð 8ð 8ð
ð ð ðð ð ð ð ð ð r   rš   c                   ó†   ‡ — e Zd ZdZdefˆ fd„Zd„ Zddefd„Zdde	j
        de	j
        fd	„Zd
e	j
        de	j
        fd„Zˆ xZS )Ú XcodecResidualVectorQuantizationzv
    Residual vector quantization implementation. Follows Algorithm 1 in https://huggingface.co/papers/2107.03312
    r'   c                 ó   •‡— t          ¦   «                              ¦   «          t          j        ˆfd„t	          ‰j        ¦  «        D ¦   «         ¦  «        | _        ‰j        | _        ‰j        | _        ‰j        | _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r   )rš   )rK   Ú_r'   s     €r    rL   z=XcodecResidualVectorQuantization.__init__.<locals>.<listcomp>  s"   ø€ Ð(pÐ(pÐ(pÈaÕ)AÀ&Ñ)IÔ)IÐ(pÐ(pÐ(pr   )	r1   r2   r3   rN   ÚrangeÚnum_quantizersÚ
quantizersÚ
frame_raterz   r�   s    `€r    r2   z)XcodecResidualVectorQuantization.__init__  ss   øø€ Ý‰Œ×ÒÑÔÐÝœ-Ð(pÐ(pÐ(pÐ(pÕSXÐY_ÔYnÑSoÔSoÐ(pÑ(pÔ(pÑqÔqˆŒØ Ô+ˆŒØ#Ô1ˆÔØ$Ô3ˆÔÐÐr   c                 óJ   — t          j        | j        ¦  «        | j        z  dz  S )zReturn bandwidth per quantizer.iè  )ÚmathÚlog2rz   r«   )r:   s    r    Úget_bandwidth_per_quantizerz<XcodecResidualVectorQuantization.get_bandwidth_per_quantizer  s!   € åŒy˜Ô+Ñ,Ô,¨t¬Ñ>ÀÑEÐEr   Nr=   c           	      ó°   — |                       ¦   «         }| j        }|�8|dk    r2t          t          dt	          j        ||z  ¦  «        ¦  «        ¦  «        }|S )z:Return num_quantizers based on specified target bandwidth.Nç        r   )r¯   r©   rB   r†   r­   Úfloor)r:   Ú	bandwidthÚbw_per_qr©   s       r    Ú get_num_quantizers_for_bandwidthzAXcodecResidualVectorQuantization.get_num_quantizers_for_bandwidth#  sU   € à×3Ò3Ñ5Ô5ˆØÔ,ˆØÐ  Y°¢_ _Ý ¥ Q­¬
°9¸xÑ3GÑ(HÔ(HÑ!IÔ!IÑJÔJˆNØÐr   Ú
embeddingsc                 ó  — |                       |¦  «        }|}g }| j        d|…         D ]F}|                     |¦  «        }|                     |¦  «        }||z
  }|                     |¦  «         ŒGt          j        |¦  «        }	|	S )a  
        Encode the input tensor into discrete indices using RVQ, with the number of quantizers selected based on the given bandwidth.
        Each quantizer /codebook residually quantizes the input and returns the nearest indices in terms of Euclidian distance.
        N)rµ   rª   r‘   r˜   Úappendr   Ústack)
r:   r¶   r³   r©   ÚresidualÚall_indicesÚ	quantizerr‡   r—   Úout_indicess
             r    r‘   z'XcodecResidualVectorQuantization.encode+  s—   € ð
 ×>Ò>¸yÑIÔIˆØˆØˆØœ¨¨.¨Ô9ð 	(ð 	(ˆIØ×&Ò& xÑ0Ô0ˆGØ!×(Ò(¨Ñ1Ô1ˆIØ )Ñ+ˆHØ×Ò˜wÑ'Ô'Ð'Ð'Ý”k +Ñ.Ô.ˆØÐr   Úcodesc                 óä   — t          j        d|j        ¬¦  «        }t          |¦  «        D ]D\  }}| j        |         }|                     |¦  «        }||                     |j        ¦  «        z   }ŒE|S )z9Decode the given codes to their quantized representation.r±   )r–   )r   Útensorr–   r`   rª   r˜   r•   )r:   r¾   Úquantized_outrb   r‡   r¼   r—   s          r    r˜   z'XcodecResidualVectorQuantization.decode;  st   € åœ S°´Ð>Ñ>Ô>ˆÝ# EÑ*Ô*ð 	Gð 	G‰JˆAˆwØœ¨Ô*ˆIØ!×(Ò(¨Ñ1Ô1ˆIØ)¨I¯LªL¸¼Ñ,FÔ,FÑFˆMˆMØÐr   r?   )r   r   r   r   r   r2   r¯   rB   rµ   r   rC   r‘   r˜   rD   rE   s   @r    r¤   r¤     sÑ   ø€ € € € € ðð ð4˜|ð 4ð 4ð 4ð 4ð 4ð 4ðFð Fð Fðð À#ð ð ð ð ðð  ¤ð À%Ä,ð ð ð ð ð ˜EœLð ¨U¬\ð ð ð ð ð ð ð ð r   r¤   c                   ó‚   — e Zd ZdZeZdZdZdZdgZ	 e
j        ¦   «         d„ ¦   «         Zd„ Zd„ Zed	„ ¦   «         Zdd„Zd
S )ÚXcodecPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚxcodecÚinput_valuesÚaudior¤   c                 ó´  — t          |t          j        ¦  «        rJt          j        |j        d| j        j        ¬¦  «         |j        �t          j	        |j        ¦  «         dS dS t          |t          j
        t          j        f¦  «        r4t          j	        |j        ¦  «         t          j        |j        ¦  «         dS t          |t          j        ¦  «        rpt          j        |j        ¦  «         |j        �Nt          j        |j        |j        |j        d         z  z  ¦  «        }t          j        |j        | |¬¦  «         dS dS |j        j        dk    rt          j        |j        ¦  «         dS t          |t          j        ¦  «        r|                     ¦   «          dS t          |t          j        ¦  «        rt          j        |j        dd¬¦  «         dS t          |t6          ¦  «        rØ|j                             ¦   «         D ]Q}t          |t          j        ¦  «        r5t          j        |j        d¬¦  «         t          j        |j        d¦  «         ŒR|j                              ¦   «         D ]Q}t          |t          j        ¦  «        r5t          j        |j        d¬¦  «         t          j        |j        d¦  «         ŒRdS t          |tB          ¦  «        rzt          j"        |j#        tI          j%        d	g¦  «        ¦  «         t          j	        |j&        ¦  «         t          j	        |j'        ¦  «         t          j	        |j(        ¦  «         dS dS )
zInitialize the weightsr±   )ÚmeanÚstdNr   )ÚaÚbÚSnake1dg{®Gáz”?)rÉ   T))Ú
isinstancer3   ÚLinearÚinitÚnormal_Úweightr'   Úinitializer_ranger/   Úzeros_Ú	LayerNormÚ	GroupNormÚones_r7   Úkaiming_normal_r­   Úsqrtr.   r(   r0   Úuniform_r;   r   Úalphark   Úreset_parametersÚ	EmbeddingÚXcodecModelÚacoustic_encoderÚmodulesÚtrunc_normal_Ú	constant_Úacoustic_decoderrs   Úcopy_ru   r   rC   rv   rw   rx   )r:   ÚmoduleÚkÚ	submodules       r    Ú_init_weightsz#XcodecPreTrainedModel._init_weightsR  s  € õ �f�bœiÑ(Ô(ð !	*ÝŒL˜œ¨S°d´kÔ6SÐTÑTÔTÐTØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(Ð(Ð(ð 'Ð&å˜¥¤­r¬|Ð <Ñ=Ô=ð 	*ÝŒK˜œÑ$Ô$Ð$ÝŒJ�v”}Ñ%Ô%Ð%Ð%Ð%Ý˜¥¤	Ñ*Ô*ð 	*ÝÔ  ¤Ñ/Ô/Ð/ØŒ{Ð&Ý”I˜fœm¨vÔ/AÀFÔDVÐWXÔDYÑ/YÑZÑ[Ô[�Ý”˜fœk¨a¨R°1Ð5Ñ5Ô5Ð5Ð5Ð5ð 'Ð&ð ÔÔ&¨)Ò3Ð3ÝŒJ�v”|Ñ$Ô$Ð$Ð$Ð$Ý˜¥Ô 2Ñ3Ô3ð 	*Ø×#Ò#Ñ%Ô%Ð%Ð%Ð%Ý˜¥¤Ñ-Ô-ð 	*ÝŒL˜œ¨S°dÐ;Ñ;Ô;Ð;Ð;Ð;Ý˜¥Ñ,Ô,ð 	*ð $Ô4×<Ò<Ñ>Ô>ð 6ð 6�	Ý˜i­¬Ñ3Ô3ð 6ÝÔ& yÔ'7¸TÐBÑBÔBÐBÝ”N 9¤>°1Ñ5Ô5Ð5øØ#Ô4×<Ò<Ñ>Ô>ð 6ð 6�	Ý˜i­¬Ñ3Ô3ð 6ÝÔ& yÔ'7¸TÐBÑBÔBÐBÝ”N 9¤>°1Ñ5Ô5Ð5øð6ð 6õ ˜Õ 7Ñ8Ô8ð 	*ÝŒJ�v”}¥e¤l°D°6Ñ&:Ô&:Ñ;Ô;Ð;ÝŒK˜Ô+Ñ,Ô,Ð,ÝŒK˜œÑ%Ô%Ð%ÝŒK˜Ô(Ñ)Ô)Ð)Ð)Ð)ð		*ð 	*r   c                 óP  — t           j        j        j        j        } || j        j        ¦  «          || j        j        ¦  «         | j        j        D ]I} ||j        ¦  «         |j	        |j
        |j        fD ]"} ||j        ¦  «          ||j        ¦  «         Œ#ŒJ || j        j        d¬¦  «          || j        j        d¬¦  «         | j        j        D ]O} ||j        d¬¦  «         |j	        |j
        |j        fD ]&} ||j        d¬¦  «          ||j        d¬¦  «         Œ'ŒPdS )znApply weight norm in the acoustic encoder and decoder because the original checkpoint has weight norm applied.rÑ   ©ÚnameN)r   r3   ÚutilsÚparametrizationsÚweight_normrÞ   r8   r9   re   Ú	res_unit1Ú	res_unit2Ú	res_unit3râ   Úconv_t1)r:   rí   re   Úres_units       r    Úapply_weight_normz'XcodecPreTrainedModel.apply_weight_normx  sl  € å”h”nÔ5ÔAˆàˆ�DÔ)Ô/Ñ0Ô0Ð0Øˆ�DÔ)Ô/Ñ0Ô0Ð0àÔ*Ô0ð 	,ð 	,ˆEØˆK˜œÑ$Ô$Ð$Ø"œ_¨e¬o¸u¼ÐOð ,ð ,�Ø�˜HœNÑ+Ô+Ð+Ø�˜HœNÑ+Ô+Ð+Ð+ð,ð 	ˆ�DÔ)Ô/°hÐ?Ñ?Ô?Ð?Øˆ�DÔ)Ô/°hÐ?Ñ?Ô?Ð?àÔ*Ô0ð 	;ð 	;ˆEØˆK˜œ¨HÐ5Ñ5Ô5Ð5Ø"œ_¨e¬o¸u¼ÐOð ;ð ;�Ø�˜HœN°Ð:Ñ:Ô:Ð:Ø�˜HœN°Ð:Ñ:Ô:Ð:Ð:ð;ð	;ð 	;r   c                 ó^  — | j         | j        fD ]�}|                     ¦   «         D ]†}	 t          j        j                             |d¬¦  «         n# t          t          f$ r Y nw xY wt          |d¦  «        r5d|j
        v r,t          j        j        j                             |dd¬¦  «         Œ‡ŒždS )z=Remove the weight norm from the acoustic encoder and decoder.rÑ   ré   rì   T)Úleave_parametrizedN)rÞ   râ   rß   r   r3   rë   Úremove_weight_normr^   ÚAttributeErrorÚhasattrrì   ÚparametrizeÚremove_parametrizations)r:   rä   Úms      r    rö   z(XcodecPreTrainedModel.remove_weight_normŽ  sÚ   € àÔ,¨dÔ.CÐDð 	mð 	mˆFØ—^’^Ñ%Ô%ð mð m�ðÝ”H”N×5Ò5°a¸hÐ5ÑGÔGÐGÐGøÝ"¥NÐ3ð ð ð Ø�Dðøøøå˜1Ð0Ñ1Ô1ð m°hÀ!ÔBTÐ6TÐ6TÝ”H”NÔ.×FÒFÀqÈ(ÐgkÐFÑlÔlÐløðmð	mð 	ms   ¨&AÁA#Á"A#c                 óX   ‡— dt           j        fˆfd„Št           ‰|¦  «        ¦  «        S )zA
        Recursively iterate to fetch all Conv1d layers.
        rä   c                 óÔ   •— g }t          | t          j        ¦  «        r|                     | ¦  «         |                      ¦   «         D ] }|                      ‰|¦  «        ¦  «         Œ!|S r?   )rÍ   r3   r7   r¸   ÚchildrenÚextend)rä   Úparams_listÚchildÚget_conv1d_layers_recursives      €r    r  zMXcodecPreTrainedModel._get_conv1d_layers.<locals>.get_conv1d_layers_recursiveŸ  sv   ø€ ØˆKå˜&¥"¤)Ñ,Ô,ð +Ø×"Ò" 6Ñ*Ô*Ð*ð  ŸšÑ*Ô*ð Gð G�Ø×"Ò"Ð#>Ð#>¸uÑ#EÔ#EÑFÔFÐFÐFàÐr   )r3   ÚModuleÚtuple)r:   rä   r  s     @r    Ú_get_conv1d_layersz(XcodecPreTrainedModel._get_conv1d_layers™  sF   ø€ ð
	µ´	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	õ Ð0Ð0°Ñ8Ô8Ñ9Ô9Ð9r   Nc                 ób   — |€| }|                       |¦  «        }|D ]}t          ||¦  «        }Œ|S )zo
        For a given module, compute the output length that would be obtained after all Conv1d layers.
        )r  r   )r:   Úinput_lengthrä   Úconv1d_layersÚlayers        r    Ú_get_conv1d_output_lengthsz0XcodecPreTrainedModel._get_conv1d_output_lengths­  sI   € ð ˆ>ØˆFà×/Ò/°Ñ7Ô7ˆà"ð 	Eð 	EˆEÝ/°°|ÑDÔDˆLˆLàÐr   r?   )r   r   r   r   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesr   Úno_gradrç   ró   rö   r   r  r
  r   r   r    rÃ   rÃ   E  s±   € € € € € ðð ð
  €LØ ÐØ$€OØÐØ;Ð<Ðà€U„]�_„_ð#*ð #*ñ „_ð#*ðJ;ð ;ð ;ð,	mð 	mð 	mð ð:ð :ñ „Yð:ð&ð ð ð ð ð r   rÃ   z$The Xcodec neural audio codec model.)Úcustom_introc                   óœ  ‡ — e Zd Zˆ fd„Zedej        fd„¦   «         Zdej	        dej	        fd„Z
e	 	 ddej        dedz  d	edz  dej        ez  fd
„¦   «         Ze	 ddej        d	edz  dej        ez  fd„¦   «         Zee	 	 ddej        dej        dz  dedz  dee         deej        ej        f         ez  f
d„¦   «         ¦   «         Zˆ xZS )rÝ   c                 óø  •— t          ¦   «                              |¦  «         || _        |j        dz  | _        t          j        |j        ¦  «        }|j        | _	        |j
        | _        |                      | j        ¦  «         t          |¦  «        | _        t          |¦  «        | _        t          j        |j        ¦  «                             ¦   «         | _        t)          j        |j        |j        ¦  «        | _        t)          j        |j        |j        j        ¦  «        | _        t)          j        |j        |j        j        ¦  «        | _        t5          |¦  «        | _        |                      ¦   «          d S )Nr   )r1   r2   r'   Ú
hop_lengthÚpadr   Úfrom_configÚacoustic_model_configÚencoderrÞ   Údecoderrâ   Ú_adjust_dac_decoderrX   Úencoder_semanticro   Údecoder_semanticÚsemantic_model_configÚevalÚsemantic_modelr3   rÎ   Úhidden_sizeÚfcÚfc1Úfc2r¤   r¼   Ú	post_init)r:   r'   Úacoustic_modelr;   s      €r    r2   zXcodecModel.__init__¾  s+  ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒØÔ$¨Ñ)ˆŒÝ"Ô.¨vÔ/KÑLÔLˆØ .Ô 6ˆÔØ .Ô 6ˆÔØ× Ò  Ô!6Ñ7Ô7Ð7Ý /°Ñ 7Ô 7ˆÔÝ /°Ñ 7Ô 7ˆÔÝ'Ô3°FÔ4PÑQÔQ×VÒVÑXÔXˆÔÝ”)˜FÔ.°Ô0BÑCÔCˆŒÝ”9˜VÔ/°Ô1MÔ1YÑZÔZˆŒÝ”9˜VÔ/°Ô1MÔ1YÑZÔZˆŒÝ9¸&ÑAÔAˆŒð 	�ŠÑÔÐÐÐr   r  c                 óp  — |                       ¦   «         D ]U}t          |t          j        ¦  «        r9t          |j        t
          ¦  «        r|j        d         n|j        }|dz  f|_        ŒVt          | d¦  «        r9t          | j        t          j	        ¦  «        rt          j
        ¦   «         | _        dS dS dS )zì
        DAC implemented in Xcodec is slightly different from the HF version.
        DAC in Xcodec adjusts the output padding in every ConvTranspose1d in the decoder and removes
        the final `nn.Tanh` activation function.
        r   r   ÚtanhN)rß   rÍ   r3   rk   r,   r  rl   rø   r'  ÚTanhÚIdentity)r  rä   r,   s      r    r  zXcodecModel._adjust_dac_decoderÑ  s³   € ð —o’oÑ'Ô'ð 	6ð 	6ˆFÝ˜&¥"Ô"4Ñ5Ô5ð 6Ý-7¸¼ÅuÑ-MÔ-MÐ`˜œ qÔ)Ð)ÐSYÔS`�Ø)/°!©¨�Ô%øÝ�7˜FÑ#Ô#ð 	)­
°7´<ÅÄÑ(IÔ(Ið 	)Ýœ;™=œ=ˆGŒLˆLˆLð	)ð 	)ð 	)ð 	)r   rÅ   r=   c                 óL  — |d d …dd d …f         }t          j        || j        | j        f¦  «        }t          j        ¦   «         5  |                      |d¬¦  «        }|j        }d d d ¦  «         n# 1 swxY w Y   t          j        |d¬¦  «        }|                     d¬¦  «        S )Nr   T)Úoutput_hidden_statesr   r�   )r“   r  r   r  r  rˆ   r¹   rÈ   )r:   rÅ   Úoutputsrˆ   Ústackeds        r    Ú_extract_semantic_featuresz&XcodecModel._extract_semantic_featuresß  sß   € Ø# A A A q¨!¨!¨! GÔ,ˆÝ”u˜\¨D¬H°d´hÐ+?Ñ@Ô@ˆÝŒ]‰_Œ_ð 	2ð 	2Ø×)Ò)¨,ÈTÐ)ÑRÔRˆGØ#Ô1ˆMð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2õ ”+˜m°Ð3Ñ3Ô3ˆØ�|Š| ˆ|Ñ"Ô"Ð"s   ÁA/Á/A3Á6A3Nr³   Úreturn_dictc                 óò  — |�|n| j         j        }|j        d         }|dk    rt          d|› �¦  «        ‚|€| j         j        d         }n.|| j         j        vr t          d|› d| j         j        › d�¦  «        ‚|                      |¦  «                             ¦   «         }|                      |                     dd¦  «        ¦  «        }|  	                    |j        d         | j
        ¦  «        |j        d         k    r5|  
                    t          j        || j        | j        f¦  «        ¦  «        }n|  
                    |¦  «        }t          j        |                     |j        ¦  «        |gd¬	¦  «        }|                      |                     dd¦  «        ¦  «                             dd¦  «        }| j                             ||¦  «        }	|	                     d
d¦  «        }	|s|	S t)          |	¦  «        S )ac  
        input_values (`torch.FloatTensor` of shape `(batch_size, channels, num_samples)`):
            Float values of the input audio waveform.
        bandwidth (`float`, *optional*):
            The target bandwidth in (kbps) supports only values in `config.target_bandwidths`.
            Defaults to the highest available bandwidth `4.0` kbps.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`].

        Returns:
            `torch.LongTensor` of shape `(batch_size, num_quantizers, codes_length)` containing the discrete encoded audio codes.
        Nr   zAudio must be mono, but got r€   z)This model doesn't support the bandwidth z. Select one of ú.r   r�   r   )r'   r/  rŽ   r^   Útarget_bandwidthsr.  Údetachr  Ú	transposer
  rÞ   r“   r  r   Úcatr•   r–   r!  r¼   r‘   r"   )
r:   rÅ   r³   r/  ÚchannelsÚe_semantic_inputÚ
e_semanticÚ
e_acousticr¶   r   s
             r    r‘   zXcodecModel.encodeé  sñ  € ð& &1Ð%<�k�kÀ$Ä+ÔBYˆàÔ% aÔ(ˆØ�qŠ=ˆ=ÝÐF¸HÐFÐFÑGÔGÐGàÐØœÔ5°bÔ9ˆIˆIØ˜dœkÔ;Ð;Ð;ÝØw¸IÐwÐwÐW[ÔWbÔWtÐwÐwÐwñô ð ð  ×:Ò:¸<ÑHÔH×OÒOÑQÔQÐØ×*Ò*Ð+;×+EÒ+EÀaÈÑ+KÔ+KÑLÔLˆ
ð ×*Ò*¨<Ô+=¸aÔ+@À$ÔBWÑXÔXÐ\fÔ\lÐmnÔ\oÒoÐoØ×.Ò.­q¬u°\ÀDÄHÈdÌhÐCWÑ/XÔ/XÑYÔYˆJˆJà×.Ò.¨|Ñ<Ô<ˆJå”Y 
§¢¨jÔ.?Ñ @Ô @À*ÐMÐSTÐUÑUÔUˆ
Ø—W’W˜Z×1Ò1°!°QÑ7Ô7Ñ8Ô8×BÒBÀ1ÀaÑHÔHˆ
Ø”n×+Ò+¨J¸	ÑBÔBˆØ!×+Ò+¨A¨qÑ1Ô1ˆàð 	ØÐå" ;Ñ/Ô/Ð/r   r   c                 óL  — |�|n| j         j        }|                     dd¦  «        }| j                             |¦  «        }|                      |                     dd¦  «        ¦  «                             dd¦  «        }|                      |¦  «        }|s|S t          |¦  «        S )a¬  
        audio_codes (`torch.LongTensor`  of shape `(batch_size, num_quantizers, codes_length)`):
            Discrete code indices computed using `model.encode`.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`]

        Returns:
            Decoded audio values of shape `(batch_size, channels, num_samples)` obtained using the decoder part of
            Xcodec.
        Nr   r   r   )r'   r/  r4  r¼   r˜   r#  râ   r$   )r:   r   r/  r—   Úquantized_acousticr   s         r    r˜   zXcodecModel.decode  s£   € ð  &1Ð%<�k�kÀ$Ä+ÔBYˆà!×+Ò+¨A¨qÑ1Ô1ˆØ”N×)Ò)¨+Ñ6Ô6ˆ	Ø!ŸXšX i×&9Ò&9¸!¸QÑ&?Ô&?Ñ@Ô@×JÒJÈ1ÈaÑPÔPÐØ×,Ò,Ð-?Ñ@Ô@ˆàð 	 ØÐå" <Ñ0Ô0Ð0r   Úkwargsc                 óÀ   — |j         d         }|€|                      ||d¬¦  «        }|                      |d¬¦  «        d         dd|…f         }t          ||¬¦  «        S )	a+  
        input_values (`torch.FloatTensor` of shape `(batch_size, channels, num_samples)`):
            The raw float values of the input audio waveform.
        audio_codes (`torch.LongTensor`  of shape `(batch_size, num_quantizers, codes_length)`:
            Discrete code indices computed using `model.encode`.
        bandwidth (`float`, *optional*):
            Target bandwidth in kbps. Must be one of `config.target_bandwidths`. Defaults to the highest available bandwidth.
        bandwidth (`float`, *optional*):
            Target bandwidth in kbps. Must be one of `config.target_bandwidths`. Defaults to the highest available bandwidth.

        Returns:
            `XcodecOutput` or tuple `(audio_codes, audio_values)`:
            - `audio_codes` of shape `(batch_size, num_quantizers, codes_length)`: the quantized discrete codes.
            - `audio_values` of shape `(batch_size, channels, num_samples)`: the reconstructed audio waveform given the codes.

        Example:

        ```python
        >>> from datasets import load_dataset
        >>> from transformers import AutoFeatureExtractor, XcodecModel

        >>> model_id = "hf-audio/xcodec-hubert-librispeech"
        >>> model = XcodecModel.from_pretrained(model_id)
        >>> feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)

        >>> dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
        >>> dataset = dataset.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
        >>> audio_sample = dataset[0]['audio']['array']

        >>> inputs = feature_extractor(raw_audio=audio_sample, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> audio_codes = outputs.audio_codes
        >>> audio_values = outputs.audio_values
        ```
        r€   NF)r/  Tr   .)r   r   )rŽ   r‘   r˜   r   )r:   rÅ   r   r³   r<  Úlengthr   s          r    rA   zXcodecModel.forward9  si   € ðZ Ô# BÔ'ˆàÐØŸ+š+ l°IÈ5˜+ÑQÔQˆKà—{’{ ;¸D�{ÑAÔAÀ!ÔDÀSÈ'È6È'À\ÔRˆå¨À,ÐOÑOÔOÐOr   )NNr?   )r   r   r   r2   Ústaticmethodr3   r  r  r   r   r.  r   rC   ÚfloatÚboolr"   r‘   r$   r˜   r   r	   r   r  r   rA   rD   rE   s   @r    rÝ   rÝ   ¼  sß  ø€ € € € € ðð ð ð ð ð& ð) R¤Yð )ð )ð )ñ „\ð)ð#°uÔ7Hð #ÈUÔM^ð #ð #ð #ð #ð ð #'Ø#'ð	10ð 10à”lð10ð ˜4‘<ð10ð ˜D‘[ð	10ð
 
ŒÐ+Ñ	+ð10ð 10ð 10ñ „^ð10ðf ð $(ð1ð 1à”\ð1ð ˜D‘[ð1ð 
ŒÐ+Ñ	+ð	1ð 1ð 1ñ „^ð1ð6 Øð ,0Ø"&ð	2Pð 2Pà”lð2Pð ”\ DÑ(ð2Pð ˜4‘<ð	2Pð
 Ð+Ô,ð2Pð 
ˆuŒ|˜Uœ\Ð)Ô	*¨\Ñ	9ð2Pð 2Pð 2Pñ Ôñ „^ð2Pð 2Pð 2Pð 2Pð 2Pr   rÝ   )-r   r­   Údataclassesr   Ú	functoolsr   r   Útorch.nnr3   Útorch.nn.functionalÚ
functionalr“   Ú r   rÏ   Úaudio_utilsr   Úmodeling_utilsr   Úprocessing_utilsr	   rë   r
   r   r   r   Úautor   Úconfiguration_xcodecr   r   r"   r$   r  r&   rG   rX   rh   ro   rs   rš   r¤   rÃ   rÝ   Ú__all__r   r   r    ú<module>rN     sÈ  ðð !Ð  à €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø /Ð /Ð /Ð /Ð /Ð /Ø :Ð :Ð :Ð :Ð :Ð :Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .ð ð
2ð 
2ð 
2ð 
2ð 
2�;ñ 
2ô 
2ñ „ð
2ð ð0ð 0ð 0ð 0ð 0˜+ñ 0ô 0ñ „ð0ð ð2ð 2ð 2ð 2ð 2˜+ñ 2ô 2ñ „ð2ð,ð ,ð ,ð ,ð ,˜œñ ,ô ,ð ,ð6ð ð ð ð  ¤ñ ô ð ð&ð ð ð ð �b”iñ ô ð ð<ð ð ð ð ˜2œ9ñ ô ð ð>%ð %ð %ð %ð %�b”iñ %ô %ð %ðPð ð ð ð ˜bœiñ ô ð ð@ð ð ð ð ˜rœyñ ô ð ð,/ð /ð /ð /ð / r¤yñ /ô /ð /ðd ðsð sð sð sð sÐ8ñ sô sñ „ðsðl €ÐGÐHÑHÔHðpPð pPð pPð pPð pPÐ'ñ pPô pPñ IÔHðpPðf Ð1Ð
2€€€r   