Ë
    S^(hd‘  ã                   óÐ  — d Z ddlmZmZmZ ddlZddlZddl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 ddlmZmZmZmZmZ ddlmZ  e«       rddlm Z  ddl!m"Z"  ejF                  e$«      Z%dZ&dZ'de(de(dejR                  fd„Z*dejR                  dejR                  fd„Z+dejR                  dejR                  dejR                  dejR                  fd„Z, G d„ dejZ                  «      Z. G d„ d ejZ                  «      Z/ G d!„ d"ejZ                  «      Z0 G d#„ d$e«      Z1d%Z2d&Z3 ed'e2«       G d(„ d)e1«      «       Z4 ed*e2«       G d+„ d,e1e«      «       Z5g d-¢Z6y).zPyTorch CodeGen model.é    )ÚOptionalÚTupleÚUnionN)Únné   )ÚACT2FN)ÚCacheÚDynamicCacheÚStaticCache)ÚGenerationMixin)ÚAttentionMaskConverter)ÚBaseModelOutputWithPastÚCausalLMOutputWithPast)ÚPreTrainedModel)Úadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚis_torch_flex_attn_availableÚloggingé   )ÚCodeGenConfig)Ú	BlockMask)Úmake_flex_block_causal_maskzSalesforce/codegen-2B-monor   Únum_posÚdimÚreturnc                 óŒ  — ddt        j                  d|dt         j                  ¬«      |z  z  z  }t        j                  dt        j                  | t         j                  ¬«      j	                  «       |«      j	                  «       }t        j
                  t        j                  |«      t        j                  |«      fd¬«      S )	Nç      ð?i'  r   é   ©Údtypezi , j -> i jr   ©r   )ÚtorchÚarangeÚint64ÚeinsumÚfloatÚcatÚsinÚcos)r   r   Úinv_freqÚsinusoid_inps       új/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/codegen/modeling_codegen.pyÚcreate_sinusoidal_positionsr.   4   s…   € Ø�e¤§¡¨Q°°Q¼e¿k¹kÔ JÈSÑ PÑQÑR€HÜ—<‘< ´·±¸WÌEÏKÉKÔ0X×0^Ñ0^Ó0`ÐbjÓk×qÑqÓs€LÜ�9‰9”e—i‘i Ó-¬u¯y©y¸Ó/FÐGÈQÔOÐOó    Úxc                 ó    — | d d …d d …d d …d d d…f   }| d d …d d …d d …dd d…f   }t        j                  | |fd¬«      } | j                  d«      S )Nr   r   éÿÿÿÿr"   éþÿÿÿ)r#   ÚstackÚflatten)r0   Úx1Úx2s      r-   Úrotate_every_twor8   ;   sS   € Ø	
Š1Ša’‘C�a�Cˆ<‰€BØ	
Š1Ša’�A�D�q�Dˆ=Ñ	€BÜ�‰�b�S˜"�I 2Ô&€AØ�9‰9�R‹=Ðr/   Útensorr)   r*   c                 óº   — t        j                  |d d …d d …d d d …f   dd«      }t        j                  |d d …d d …d d d …f   dd«      }| |z  t        | «      |z  z   S )Nr   r   )r#   Úrepeat_interleaver8   )r9   r)   r*   s      r-   Úapply_rotary_pos_embr<   C   s^   € Ü
×
!Ñ
! #¢aª¨D²! mÑ"4°a¸Ó
;€CÜ
×
!Ñ
! #¢aª¨D²! mÑ"4°a¸Ó
;€CØ�S‰LÔ-¨fÓ5¸Ñ;Ñ<Ð<r/   c                   ó¨  ‡ — e Zd Zdˆ fd„	Zd„ Zd„ Z	 	 dd„Z	 	 	 	 	 	 	 ddeej                     dee
   deej                     deej                     d	eej                     d
ee   dee   deej                     deeej                  eej                     f   eeej                  eej                     eej                  df   f      f   fd„Zˆ xZS )ÚCodeGenAttentionc                 ó`  •— t         ‰| �  «        |j                  }t        j                  |j
                  «      | _        t        j                  |j                  «      | _        || _	        |€-t        j                  d| j                  j                  › d�«       |j                  | _        |j                   | _        | j                  | j                   z  | _        | j"                  | j                   z  | j                  k7  r&t%        d| j                  › d| j                   › d�«      ‚t'        j(                  t'        j*                  | j"                  t&        j,                  ¬«      «      j/                  t'        j0                  «       «      | _        t        j4                  | j                  | j                  dz  d¬	«      | _        t        j4                  | j                  | j                  d¬	«      | _        |j:                  | _        | j:                  xs | j                  }t=        ||«      | _        y )
NzInstantiating z¹ without passing a `layer_idx` is not recommended and will lead to errors during the forward call if caching is used. Please make sure to provide a `layer_idx` when creating this class.zEembed_dim must be divisible by num_attention_heads (got `embed_dim`: z and `num_attention_heads`: z).r    r   F)Úbias) ÚsuperÚ__init__Úmax_position_embeddingsr   ÚDropoutÚ
attn_pdropÚattn_dropoutÚresid_pdropÚresid_dropoutÚ	layer_idxÚloggerÚwarning_onceÚ	__class__Ú__name__Úhidden_sizeÚ	embed_dimÚnum_attention_headsÚhead_dimÚ
ValueErrorr#   Úsqrtr9   Úfloat32ÚtoÚget_default_dtypeÚ
scale_attnÚLinearÚqkv_projÚout_projÚ
rotary_dimr.   Úembed_positions)ÚselfÚconfigrI   Úmax_positionsÚpos_embd_dimrL   s        €r-   rB   zCodeGenAttention.__init__J   s§  ø€ Ü‰ÑÔà×6Ñ6ˆÜŸJ™J v×'8Ñ'8Ó9ˆÔÜŸZ™Z¨×(:Ñ(:Ó;ˆÔØ"ˆŒØÐÜ×ÑØ  §¡×!8Ñ!8Ð 9ð :,ð ,ôð  ×+Ñ+ˆŒØ#)×#=Ñ#=ˆÔ ØŸ™¨$×*BÑ*BÑBˆŒØ�=‰=˜4×3Ñ3Ñ3°t·~±~ÒEÜØWÐX\×XfÑXfÐWgð h+Ø+/×+CÑ+CÐ*DÀBðHóð ô  Ÿ*™*¤U§\¡\°$·-±-ÄuÇ}Á}Ô%UÓV×YÑYÔZ_×ZqÑZqÓZsÓtˆŒÜŸ	™	 $§.¡.°$·.±.À1Ñ2DÈ5ÔQˆŒäŸ	™	 $§.¡.°$·.±.ÀuÔMˆŒØ ×+Ñ+ˆŒØ—‘Ò8¨$¯.©.ˆÜ:¸=È,ÓWˆÕr/   c                 ó´   — |j                  |j                  d d ||z  |fz   «      }|j                  |j                  d d dz   |j                  dd  z   «      }|S )Nr2   r3   )r2   )ÚreshapeÚshape)r]   r0   Ún_headÚdim_headÚmp_numÚreshapeds         r-   Ú_split_headszCodeGenAttention._split_headsh   s]   € Ø—9‘9˜QŸW™W S b˜\¨V°vÑ-=¸xÐ,HÑHÓIˆØ×#Ñ# A§G¡G¨C¨R L°5Ñ$8¸8¿>¹>È"È#Ð;NÑ$NÓOˆØˆr/   c                 óˆ  — t        |j                  «      dk(  r$|j                  ddddd«      j                  «       }n\t        |j                  «      dk(  r#|j                  dddd«      j                  «       }n!t	        dt        |j                  «      › �«      ‚|j                  «       dd	 ||z  fz   }|j                  |«      S )
zM
        Merges attn_head_size dim and num_attn_heads dim into n_ctx
        é   r   r   r   r   é   z3Input tensor rank should be one of [4, 5], but is: Nr3   )Úlenrc   ÚpermuteÚ
contiguousrR   ÚsizeÚview)r]   r9   rP   Úattn_head_sizeÚ	new_shapes        r-   Ú_merge_headszCodeGenAttention._merge_headsm   s²   € ô ˆv�|‰|Ó Ò!Ø—^‘^ A q¨!¨Q°Ó2×=Ñ=Ó?‰FÜ�—‘Ó !Ò#Ø—^‘^ A q¨!¨QÓ/×:Ñ:Ó<‰FäÐRÔSVÐW]×WcÑWcÓSdÐReÐfÓgÐgØ—K‘K“M # 2Ð&Ð*=ÀÑ*NÐ)PÑPˆ	Ø�{‰{˜9Ó%Ð%r/   c                 ó  — |j                  t        j                  «      }|j                  t        j                  «      }t        j                  ||j	                  dd«      «      }|�#|d d …d d …d d …d |j
                  d   …f   }||z  }|| j                  z  } t        j                  d¬«      |«      }|j                  |j                  «      }| j                  |«      }|�||z  }t        j                  ||«      }||fS )Nr2   r3   r"   )rU   r#   rT   ÚmatmulÚ	transposerc   rW   r   ÚSoftmaxr!   rF   )	r]   ÚqueryÚkeyÚvalueÚattention_maskÚ	head_maskÚattn_weightsÚcausal_maskÚattn_outputs	            r-   Ú_attnzCodeGenAttention._attnz   sä   € ð —‘œŸ™Ó'ˆØ�f‰f”U—]‘]Ó#ˆä—|‘| E¨3¯=©=¸¸RÓ+@ÓAˆàÐ%Ø(ªªAªq°/°C·I±I¸b±M°/Ð)AÑBˆKØ˜KÑ'ˆLà# d§o¡oÑ5ˆØ)”r—z‘z bÔ)¨,Ó7ˆØ#—‘ u§{¡{Ó3ˆØ×(Ñ(¨Ó6ˆð Ð Ø'¨)Ñ3ˆLä—l‘l <°Ó7ˆà˜LÐ(Ð(r/   Úhidden_statesÚ
layer_pastr{   Úposition_idsr|   Ú	use_cacheÚoutput_attentionsÚcache_positionr   .c	                 óp  — | j                  |«      }	d}
|	j                  |	j                  d d |
dfz   «      }| j                  | j                  z  |
z  }t        j                  ||d¬«      \  }}}| j                  || j                  | j                  |
¬«      }| j                  || j                  | j                  |
¬«      }| j                  || j                  | j                  |
¬«      }|j                  dddd«      }| j                  }|j                  |j                  k7  r"|j                  |j                  «      }|| _	        ||   }t        j                  ||j                  d   dz  d¬«      \  }}| j                  �¹|d d …d d …d d …d | j                  …f   }|d d …d d …d d …| j                  d …f   }|d d …d d …d d …d | j                  …f   }|d d …d d …d d …| j                  d …f   }t        |||«      }t        |||«      }t        j                  ||gd¬«      }t        j                  ||gd¬«      }nt        |||«      }t        |||«      }|j                  dddd«      }|j                  dddd«      }|�K||| j                  |d	œ}|j                  |j                  |j                   «      || j"                  |«      \  }}| j%                  |||||«      \  }}| j'                  || j                  | j                  «      }| j)                  |«      }| j+                  |«      }||f}|r||fz  }|S )
Nrk   r2   r"   )rf   r   r   r   r   )r)   r*   Úpartial_rotation_sizer†   )rY   rb   rc   rQ   rP   r#   Úsplitrh   rm   r\   ÚdevicerU   r[   r<   r(   Úupdater!   rI   r€   rs   rZ   rH   )r]   r�   r‚   r{   rƒ   r|   r„   r…   r†   Úqkvrf   Ú	qkv_splitÚ	local_dimrx   rz   ry   r\   Úsincosr)   r*   Úk_rotÚk_passÚq_rotÚq_passÚcache_kwargsr   r}   Úoutputss                               r-   ÚforwardzCodeGenAttention.forward™   s  € ð �m‰m˜MÓ*ˆàˆØ—K‘K §	¡	¨#¨2 °&¸"°Ñ =Ó>ˆ	à—M‘M D×$<Ñ$<Ñ<ÀÑFˆ	Ü!ŸK™K¨	°9À"ÔEÑˆˆu�cØ×!Ñ! %¨×)AÑ)AÀ4Ç=Á=ÐY_Ð!Ó`ˆØ×Ñ  T×%=Ñ%=¸t¿}¹}ÐU[ÐÓ\ˆà×!Ñ! %¨×)AÑ)AÀ4Ç=Á=ÐY_Ð!Ó`ˆØ—‘˜a  A qÓ)ˆà×.Ñ.ˆØ×!Ñ! \×%8Ñ%8Ò8Ø-×0Ñ0°×1DÑ1DÓEˆOØ#2ˆDÔ à  Ñ.ˆÜ—;‘;˜v v§|¡|°BÑ'7¸1Ñ'<À"ÔE‰ˆˆSà�?‰?Ð&Øšš1šaÐ!2 4§?¡?Ð!2Ð2Ñ3ˆEØššAšq $§/¡/Ñ"3Ð3Ñ4ˆFàš!šQ¢Ð#4 T§_¡_Ð#4Ð4Ñ5ˆEØš1ša¢ D§O¡OÑ$5Ð5Ñ6ˆFä(¨°°SÓ9ˆEÜ(¨°°SÓ9ˆEä—)‘)˜U F˜O°Ô4ˆCÜ—I‘I˜u f˜o°2Ô6‰Eä& s¨C°Ó5ˆCÜ(¨°°SÓ9ˆEà�k‰k˜!˜Q  1Ó%ˆØ—‘˜a  A qÓ)ˆð Ð!àØØ)-¯©Ø"0ñ	ˆLð $×*Ñ*¨3¯6©6°-×2EÑ2EÓ+FÈÈtÏ~É~Ð_kÓl‰JˆC�ð %)§J¡J¨u°c¸5À.ÐR[Ó$\Ñ!ˆ�\à×'Ñ'¨°T×5MÑ5MÈtÏ}É}Ó]ˆØ—m‘m KÓ0ˆØ×(Ñ(¨Ó5ˆà 
Ð+ˆÙØ˜�Ñ&ˆGàˆr/   ©N)NN©NNNNFFN)rM   Ú
__module__Ú__qualname__rB   rh   rs   r€   r   r#   ÚFloatTensorr	   Ú
LongTensorÚboolr   r   ÚTensorr–   Ú__classcell__©rL   s   @r-   r>   r>   I   s6  ø„ õXò<ò
&ð$ Øó)ðD '+Ø6:Ø37Ø15Ø$)Ø,1Ø59ñLà × 1Ñ 1Ñ2ðLð ˜U‘OðLð ! ×!2Ñ!2Ñ3ð	Lð
 ˜u×/Ñ/Ñ0ðLð ˜E×-Ñ-Ñ.ðLð ˜D‘>ðLð $ D™>ðLð ! ×!1Ñ!1Ñ2ðLð 
Øˆe�l‰l˜E %§,¡,Ñ/Ð/Ñ0Ø��u—|‘| U¨5¯<©<Ñ%8¸%ÀÇÁÈcÐ@QÑ:RÐRÑSÑTð	Vñ
÷Lr/   r>   c                   ó\   ‡ — e Zd Zˆ fd„Zdeej                     dej                  fd„Zˆ xZS )Ú
CodeGenMLPc                 ó  •— t         ‰| �  «        |j                  }t        j                  ||«      | _        t        j                  ||«      | _        t        |j                     | _	        t        j                  |j                  «      | _        y r—   )rA   rB   Ún_embdr   rX   Úfc_inÚfc_outr   Úactivation_functionÚactrD   rG   Údropout)r]   Úintermediate_sizer^   rO   rL   s       €r-   rB   zCodeGenMLP.__init__ê   se   ø€ Ü‰ÑÔØ—M‘Mˆ	ä—Y‘Y˜yÐ*;Ó<ˆŒ
Ü—i‘iÐ 1°9Ó=ˆŒä˜&×4Ñ4Ñ5ˆŒÜ—z‘z &×"4Ñ"4Ó5ˆ�r/   r�   r   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S r—   )r¥   r¨   r¦   r©   )r]   r�   s     r-   r–   zCodeGenMLP.forwardô   s@   € ØŸ
™
 =Ó1ˆØŸ™ Ó/ˆØŸ™ MÓ2ˆØŸ™ ]Ó3ˆØÐr/   )	rM   r™   rš   rB   r   r#   r›   r–   rŸ   r    s   @r-   r¢   r¢   é   s,   ø„ ô6ð X¨e×.?Ñ.?Ñ%@ð ÀU×EVÑEV÷ r/   r¢   c                   óV  ‡ — e Zd Zdˆ fd„	Z	 	 	 	 	 	 	 ddeej                     dee   deej                     deej                     deej                     dee	   dee	   d	eej                     d
e
eej                     eeej                  eej                  df   f      f   fd„Zˆ xZS )ÚCodeGenBlockc                 ó  •— t         ‰| �  «        |j                  �|j                  nd|j                  z  }t	        j
                  |j                  |j                  ¬«      | _        t        ||«      | _	        t        ||«      | _        y )Nrk   ©Úeps)rA   rB   Ún_innerr¤   r   Ú	LayerNormÚlayer_norm_epsilonÚln_1r>   Úattnr¢   Úmlp)r]   r^   rI   Ú	inner_dimrL   s       €r-   rB   zCodeGenBlock.__init__ÿ   sc   ø€ Ü‰ÑÔØ&,§n¡nÐ&@�F—N’NÀaÈ&Ï-É-ÑFWˆ	Ü—L‘L §¡°F×4MÑ4MÔNˆŒ	Ü$ V¨YÓ7ˆŒ	Ü˜i¨Ó0ˆ�r/   r�   r‚   r{   rƒ   r|   r„   r…   r†   r   .c	           
      óÊ   — |}	| j                  |«      }| j                  ||||||||¬«      }
|
d   }|
dd  }| j                  |«      }||z   |	z   }|r|f|z   }|S |f|dd  z   }|S )N©r�   r‚   r{   rƒ   r|   r„   r…   r†   r   r   )r´   rµ   r¶   )r]   r�   r‚   r{   rƒ   r|   r„   r…   r†   ÚresidualÚattn_outputsr   r•   Úfeed_forward_hidden_statess                 r-   r–   zCodeGenBlock.forward  s©   € ð !ˆØŸ	™	 -Ó0ˆØ—y‘yØ'Ø!Ø)Ø%ØØØ/Ø)ð !ó 	
ˆð # 1‘oˆØ˜q˜rÐ"ˆà%)§X¡X¨mÓ%<Ð"Ø#Ð&@Ñ@À8ÑKˆáØ$Ð&¨Ñ0ˆGð ˆð %Ð&¨°°¨Ñ4ˆGàˆr/   r—   r˜   )rM   r™   rš   rB   r   r#   r›   r	   rœ   r�   r   r   rž   r–   rŸ   r    s   @r-   r­   r­   ý   sö   ø„ õ1ð '+Ø6:Ø37Ø15Ø$)Ø,1Ø59ñ"à × 1Ñ 1Ñ2ð"ð ˜U‘Oð"ð ! ×!2Ñ!2Ñ3ð	"ð
 ˜u×/Ñ/Ñ0ð"ð ˜E×-Ñ-Ñ.ð"ð ˜D‘>ð"ð $ D™>ð"ð ! ×!1Ñ!1Ñ2ð"ð 
ˆu�U—\‘\Ñ" H¨U°5·<±<ÀÀu×GXÑGXÐZ]ÐG]ÑA^Ð3^Ñ-_Ñ$`Ð`Ñ	a÷"r/   r­   c                   óJ   ‡ — e Zd ZdZeZdZdZdgZdZ	dZ
dZdZˆ fd„Zd„ Zˆ xZS )ÚCodeGenPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    ÚtransformerTr­   Úpast_key_valuesc                 ó$   •— t        ‰| �  |i |¤Ž y r—   )rA   rB   )r]   ÚinputsÚkwargsrL   s      €r-   rB   zCodeGenPreTrainedModel.__init__:  s   ø€ Ü‰Ñ˜&Ð+ FÓ+r/   c                 ó  — t        |t        j                  f«      rm|j                  j                  j                  d| j                  j                  ¬«       |j                  �%|j                  j                  j                  «        yyt        |t        j                  «      rz|j                  j                  j                  d| j                  j                  ¬«       |j                  �2|j                  j                  |j                     j                  «        yyt        |t        j                  «      rJ|j                  j                  j                  «        |j                  j                  j                  d«       yy)zInitialize the weights.ç        )ÚmeanÚstdNr   )Ú
isinstancer   rX   ÚweightÚdataÚnormal_r^   Úinitializer_ranger@   Úzero_Ú	EmbeddingÚpadding_idxr²   Úfill_)r]   Úmodules     r-   Ú_init_weightsz$CodeGenPreTrainedModel._init_weights=  s  € ä�fœrŸy™y˜lÔ+ð �M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ�{‰{Ð&Ø—‘× Ñ ×&Ñ&Õ(ð 'ä˜¤§¡Ô-Ø�M‰M×Ñ×&Ñ&¨C°T·[±[×5RÑ5RÐ&ÔSØ×!Ñ!Ð-Ø—‘×"Ñ" 6×#5Ñ#5Ñ6×<Ñ<Õ>ð .ä˜¤§¡Ô-Ø�K‰K×Ñ×"Ñ"Ô$Ø�M‰M×Ñ×$Ñ$ SÕ)ð .r/   )rM   r™   rš   Ú__doc__r   Úconfig_classÚbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_cache_classÚ_supports_quantized_cacheÚ_supports_static_cacherB   rÒ   rŸ   r    s   @r-   r¾   r¾   +  sF   ø„ ñð
 !€LØ%ÐØ&*Ð#Ø'Ð(ÐØ"3ÐØ ÐØ $ÐØ!Ðô,ö*r/   r¾   aJ  
    This model is a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) sub-class. Use
    it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`CodeGenConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
aÚ  
    Args:
        input_ids (`torch.LongTensor` of shape `({0})`):
            Indices of input sequence tokens in the vocabulary.

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

            [What are input IDs?](../glossary#input-ids)
        attention_mask (`torch.FloatTensor` of shape `({0})`, *optional*):
            Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

            - 1 for tokens that are **not masked**,
            - 0 for tokens that are **masked**.

            [What are attention masks?](../glossary#attention-mask)
        token_type_ids (`torch.LongTensor` of shape `({0})`, *optional*):
            Segment token indices to indicate first and second portions of the inputs. Indices are selected in `[0,
            1]`:

            - 0 corresponds to a *sentence A* token,
            - 1 corresponds to a *sentence B* token.

            [What are token type IDs?](../glossary#token-type-ids)
        position_ids (`torch.LongTensor` of shape `({0})`, *optional*):
            Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
            config.n_positions - 1]`.

            [What are position IDs?](../glossary#position-ids)
        head_mask (`torch.FloatTensor` of shape `(num_attention_heads,)` or `(n_layer, num_attention_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        inputs_embeds (`torch.FloatTensor` of shape `({0}, hidden_dim)`, *optional*):
            Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
            is useful if you want more control over how to convert *input_ids* indices into associated vectors than the
            model's internal embedding lookup matrix.
        past_key_values (`Cache` or `tuple(tuple(torch.FloatTensor))`, *optional*):
            Pre-computed hidden-states (key and values in the self-attention blocks and in the cross-attention
            blocks) that can be used to speed up sequential decoding. This typically consists in the `past_key_values`
            returned by the model at a previous stage of decoding, when `use_cache=True` or `config.use_cache=True`.

            Two formats are allowed:
            - a [`~cache_utils.Cache`] instance, see our
            [kv cache guide](https://huggingface.co/docs/transformers/en/kv_cache);
            - Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of
            shape `(batch_size, num_heads, sequence_length, embed_size_per_head)`). This is also known as the legacy
            cache format.

            The model will output the same cache format that is fed as input. If no `past_key_values` are passed, the
            legacy cache format will be returned.

            If `past_key_values` are used, the user can optionally input only the last `input_ids` (those that don't
            have their past key value states given to this model) of shape `(batch_size, 1)` instead of all `input_ids`
            of shape `(batch_size, sequence_length)`.
        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
        cache_position (`torch.LongTensor` of shape `(sequence_length)`, *optional*):
            Indices depicting the position of the input sequence tokens in the sequence. Contrarily to `position_ids`,
            this tensor is not affected by padding. It is used to update the cache in the correct position and to infer
            the complete sequence length.
zaThe bare CodeGen Model transformer outputting raw hidden-states without any specific head on top.c                   ó²  ‡ — e Zd Zˆ fd„Zd„ Zd„ Z eej                  d«      «       e	e
ee¬«      	 	 	 	 	 	 	 	 	 	 	 	 ddeej                     deeeeeej&                        f      deej(                     d	eej                     d
eej                     deej(                     deej(                     dee   dee   dee   dee   deej                     deeef   fd„«       «       Z	 ddej&                  dej&                  dej&                  dedef
d„Zedej&                  dededej4                  dej6                  dej&                  defd„«       Zˆ xZS )ÚCodeGenModelc           	      ó–  •— t         ‰| �  |«       |j                  | _        |j                  | _        t        j                  |j                  | j                  «      | _        t        j                  |j                  «      | _
        t        j                  t        |j                  «      D �cg c]  }t        ||¬«      ‘Œ c}«      | _        t        j                   | j                  |j"                  ¬«      | _        t'        |j(                  |j*                  |j,                  z  «      | _        d| _        | j1                  «        y c c}w )N)rI   r¯   F)rA   rB   r¤   rO   Ú
vocab_sizer   rÎ   ÚwterD   Ú
embd_pdropÚdropÚ
ModuleListÚrangeÚn_layerr­   Úhr²   r³   Úln_fÚminr[   Ún_ctxrP   Úgradient_checkpointingÚ	post_init)r]   r^   ÚirL   s      €r-   rB   zCodeGenModel.__init__¦  sá   ø€ Ü‰Ñ˜Ô àŸ™ˆŒØ ×+Ñ+ˆŒÜ—<‘< × 1Ñ 1°4·>±>ÓBˆŒÜ—J‘J˜v×0Ñ0Ó1ˆŒ	Ü—‘Ì5ÐQW×Q_ÑQ_ÓK`ÖaÀa¤¨V¸qÖ AÒaÓbˆŒÜ—L‘L §¡°V×5NÑ5NÔOˆŒ	Ü˜f×/Ñ/°·±À×A[ÑA[Ñ1[Ó\ˆŒà&+ˆÔ#ð 	�‰Õùò  bs   Â,Ec                 ó   — | j                   S r—   ©rà   ©r]   s    r-   Úget_input_embeddingsz!CodeGenModel.get_input_embeddings¶  s   € Ø�x‰xˆr/   c                 ó   — || _         y r—   rî   ©r]   Únew_embeddingss     r-   Úset_input_embeddingsz!CodeGenModel.set_input_embeddings¹  s	   € Ø!ˆ�r/   úbatch_size, sequence_length©Ú
checkpointÚoutput_typerÔ   Ú	input_idsrÀ   r{   Útoken_type_idsrƒ   r|   Úinputs_embedsr„   r…   Úoutput_hidden_statesÚreturn_dictr†   r   c                 ó  — |	�|	n| j                   j                  }	|
�|
n| j                   j                  }
|�|n| j                   j                  }|�|n| j                   j                  }|d u |d uz  rt        d«      ‚| j                  r%| j                  r|rt        j                  d«       d}|€| j                  |«      }d}|rIt        |t        «      s9d}|€t        «       }n*t        j                  |«      }t        j                  d«       |j                  d   }|€9|�|j!                  «       nd}t#        j$                  |||z   |j&                  ¬«      }|€|j)                  d«      }| j+                  |||||	«      }| j-                  || j                   j.                  «      }|}|�(|j1                  d	|«      }| j                  |«      }||z   }| j3                  |«      }d	||j5                  d	«      f}d }|	rd
nd }|
rd
nd }t7        | j8                  «      D ]}  \  }}|
r||fz   }| j                  r3| j                  r'| j;                  |j<                  |d ||||   ||	|«	      }n |||||||   ||	|¬«      }|d   }|du r|d   }|	sŒq|||rdnd   fz   }Œ | j?                  |«      }|j1                  |«      }|
r||fz   }|r|nd }|r|jA                  «       }|stC        d„ ||||fD «       «      S tE        ||||¬«      S )Nz:You must specify exactly one of input_ids or inputs_embedszZ`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`...FTzÿWe detected that you are passing `past_key_values` as a tuple of tuples. This is deprecated and will be removed in v4.47. Please convert your cache or use an appropriate `Cache` class (https://huggingface.co/docs/transformers/kv_cache#legacy-cache-format)r   r   ©rŠ   r2   © r¹   r   c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr—   r   )Ú.0Úvs     r-   ú	<genexpr>z'CodeGenModel.forward.<locals>.<genexpr>A  s   è ø€ ò ØÐbcÑbo”ñùs   ‚Š)Úlast_hidden_staterÀ   r�   Ú
attentions)#r^   r…   rü   r„   Úuse_return_dictrR   rê   ÚtrainingrJ   rK   rà   rÈ   r	   r
   Úfrom_legacy_cacherc   Úget_seq_lengthr#   r$   rŠ   Ú	unsqueezeÚ_update_causal_maskÚget_head_maskrå   rp   râ   ro   Ú	enumerateræ   Ú_gradient_checkpointing_funcÚ__call__rç   Úto_legacy_cacheÚtupler   )r]   rù   rÀ   r{   rú   rƒ   r|   rû   r„   r…   rü   rý   r†   rÃ   Úreturn_legacy_cacheÚ
seq_lengthÚpast_seen_tokensr~   r�   Útoken_type_embedsÚoutput_shapeÚnext_decoder_cacheÚall_self_attentionsÚall_hidden_statesrì   Úblockr•   Ú
next_caches                               r-   r–   zCodeGenModel.forward¼  s†  € ð, 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð "+Ð!6‘I¸D¿K¹K×<QÑ<Qˆ	Ø%0Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà˜Ð -°tÐ";Ò<ÜÐYÓZÐZà×&Ò&¨4¯=ª=ÙÜ×#Ñ#Øpôð "�	àÐ Ø ŸH™H YÓ/ˆMð $ÐÙœZ¨¼Ô?Ø"&ÐØÐ&Ü".£.‘ä".×"@Ñ"@ÀÓ"Q�Ü×#Ñ#ð^ôð #×(Ñ(¨Ñ+ˆ
ØÐ!ØCRÐC^˜×=Ñ=Ô?ÐdeÐÜ"Ÿ\™\Ð*:Ð<LÈzÑ<YÐbo×bvÑbvÔwˆNàÐØ)×3Ñ3°AÓ6ˆLà×.Ñ.Ø˜M¨>¸?ÐL]ó
ˆð ×&Ñ& y°$·+±+×2EÑ2EÓFˆ	Ø%ˆàÐ%Ø+×0Ñ0°°ZÓ@ˆNØ $§¡¨Ó 8ÐØ)Ð,=Ñ=ˆMàŸ	™	 -Ó0ˆØ˜J¨×(:Ñ(:¸2Ó(>Ð?ˆà!ÐÙ$5™b¸4ÐÙ"6™B¸DÐÜ! $§&¡&Ó)ò !	^‰HˆAˆuÙ#Ø$5¸Ð8HÑ$HÐ!à×*Ò*¨t¯}ª}Ø×;Ñ;Ø—N‘NØ!ØØØ Ø˜a‘LØØ%Ø"ó
‘ñ  Ø"/Ø.Ø#.Ø!-Ø'¨™lØ'Ø&7Ø#1ô	�ð $ A™JˆMØ˜DÑ Ø%,¨Q¡ZÐ"â Ø&9¸WÉ)ÁQÐYZÑ=[Ð<]Ñ&]Ñ#ðC!	^ðF Ÿ	™	 -Ó0ˆà%×*Ñ*¨<Ó8ˆáØ 1°]Ð4DÑ DÐá+4Ñ'¸$ˆ
ÙØ#×3Ñ3Ó5ˆJáÜñ Ø)¨:Ð7HÐJ]Ð^ôó ð ô 'Ø+Ø&Ø+Ø*ô	
ð 	
r/   Úinput_tensorc           
      óÆ  — | j                   j                  dk(  r|�|dk(  j                  «       r|S y | j                   j                  dk(  r7t        |t        j
                  «      rt        |«      }t        |t        «      r|S |�|j                  «       nd}t        |t        «      }| j                   j                  dk(  r(|s&|s$t        j                  |||| j                  ¬«      ry |j                  |j                  }	}|j                  d   }
|r|j!                  «       }n1t        |t        j
                  «      r|j                  d   n||
z   dz   }| j#                  ||
|||	||j                  d   ¬	«      }| j                   j                  dk(  rQ|�O|j                  j$                  d
v r7|s5t	        j&                  |«      j(                  }t        j*                  ||«      }|S )NÚflash_attention_2rÅ   Úflex_attentionr   Úsdpa)rû   Úpast_key_values_lengthÚis_trainingr   r2   )Úsequence_lengthÚtarget_lengthr!   rŠ   r†   Ú
batch_size)ÚcudaÚxpu)r^   Ú_attn_implementationÚanyrÈ   r#   rž   r   r   r
  r   r   Ú_ignore_causal_mask_sdpar  r!   rŠ   rc   Úget_max_cache_shapeÚ5_prepare_4d_causal_attention_mask_with_cache_positionÚtypeÚfinforè   Ú_unmask_unattended)r]   r{   r  r†   rÀ   r…   r  Úusing_static_cacher!   rŠ   r$  r%  r~   Ú	min_dtypes                 r-   r  z CodeGenModel._update_causal_maskM  sÖ  € ð �;‰;×+Ñ+Ð/BÒBØÐ)¨~ÀÑ/D×.IÑ.IÔ.KØ%Ð%ØØ�;‰;×+Ñ+Ð/?Ò?Ü˜.¬%¯,©,Ô7Ü!<¸^Ó!L�Ü˜.¬)Ô4Ø%Ð%ð
 @OÐ?Z˜?×9Ñ9Ô;Ð`aÐÜ'¨¼ÓEÐð �;‰;×+Ñ+¨vÒ5Ñ>PÑYjÜ%×>Ñ>ØØ*Ø'7Ø ŸM™Mõ	ð à$×*Ñ*¨L×,?Ñ,?ˆvˆØ&×,Ñ,¨QÑ/ˆÙØ+×?Ñ?ÓA‰Mô ˜n¬e¯l©lÔ;ð ×$Ñ$ RÒ(à%¨Ñ7¸!Ñ;ð ð ×PÑPØØ+Ø'ØØØ)Ø#×)Ñ)¨!Ñ,ð Qó 
ˆð �K‰K×,Ñ,°Ò6ØÐ*Ø×%Ñ%×*Ñ*¨oÑ=Ù%ô
 Ÿ™ EÓ*×.Ñ.ˆIÜ0×CÑCÀKÐQZÓ[ˆKàÐr/   r$  r%  r!   rŠ   r&  c                 ó˜  — | �| j                  «       dk(  r| }|S t        j                  |«      j                  }	t        j                  ||f|	||¬«      }|dk7  rt        j
                  |d¬«      }|t        j                  ||¬«      |j                  dd«      kD  z  }|dddd…dd…f   j                  |ddd«      }| �Œ|j                  «       }| j                  d   }
|dd…dd…dd…d|
…f   | dd…dddd…f   j                  |j                  «      z   }|dk(  }|dd…dd…dd…d|
…f   j                  ||	«      |dd…dd…dd…d|
…f<   |S )	a°  
        Creates a causal 4D mask of shape `(batch_size, 1, query_length, key_value_length)` from a 2D mask of shape
        `(batch_size, key_value_length)`, or if the input `attention_mask` is already 4D, do nothing.

        Args:
            attention_mask (`torch.Tensor`):
                A 2D attention mask of shape `(batch_size, key_value_length)` or a 4D attention mask of shape
                `(batch_size, 1, query_length, key_value_length)`.
            sequence_length (`int`):
                The sequence length being processed.
            target_length (`int`):
                The target length: when generating with static cache, the mask should be as long as the static cache,
                to account for the 0 padding, the part of the cache that is not filled yet.
            dtype (`torch.dtype`):
                The dtype to use for the 4D attention mask.
            device (`torch.device`):
                The device to place the 4D attention mask on.
            cache_position (`torch.Tensor`):
                Indices depicting the position of the input sequence tokens in the sequence.
            batch_size (`torch.Tensor`):
                Batch size.
        Nrk   )Ú
fill_valuer!   rŠ   r   )Údiagonalrÿ   r2   r   )r   r#   r/  rè   ÚfullÚtriur$   rb   ÚexpandÚclonerc   rU   rŠ   Úmasked_fill)r{   r$  r%  r!   rŠ   r†   r&  rÃ   r~   r2  Úmask_lengthÚpadding_masks               r-   r-  zBCodeGenModel._prepare_4d_causal_attention_mask_with_cache_position“  sy  € ðD Ð%¨.×*<Ñ*<Ó*>À!Ò*Cà(ˆKð* Ðô' Ÿ™ EÓ*×.Ñ.ˆIÜŸ*™*Ø  -Ð0¸YÈeÐ\bôˆKð  !Ò#Ü#Ÿj™j¨¸qÔA�Øœ5Ÿ<™<¨¸fÔEÈ×H^ÑH^Ð_aÐcdÓHeÑeÑeˆKØ% d¨D²!²QÐ&6Ñ7×>Ñ>¸zÈ1ÈbÐRTÓUˆKØÐ)Ø)×/Ñ/Ó1�Ø,×2Ñ2°2Ñ6�Ø*ª1ªa²°L°[°LÐ+@ÑAÀNÒSTÐVZÐ\`ÒbcÐScÑDd×DgÑDgØ×&Ñ&óEñ  �ð  ,¨qÑ0�Ø5@ÂÂAÂqÈ,È;È,ÐAVÑ5W×5cÑ5cØ  )ó6�šAšq¢! \ k \Ð1Ñ2ð Ðr/   )NNNNNNNNNNNN)F)rM   r™   rš   rB   rð   rô   r   ÚCODEGEN_INPUTS_DOCSTRINGÚformatr   Ú_CHECKPOINT_FOR_DOCr   Ú_CONFIG_FOR_DOCr   r#   rœ   r   r	   r   rž   r›   r�   r–   r  ÚstaticmethodÚintr!   rŠ   r-  rŸ   r    s   @r-   rÝ   rÝ   ¡  s=  ø„ ô
ò ò"ñ +Ð+C×+JÑ+JÐKhÓ+iÓjÙØ&Ø+Ø$ôð 15ØNRØ6:Ø59Ø37Ø15Ø59Ø$(Ø,0Ø/3Ø&*Ø59ñH
à˜E×,Ñ,Ñ-ðH
ð " %¨¨u°U¸5¿<¹<Ñ5HÑ/IÐ(IÑ"JÑKðH
ð ! ×!2Ñ!2Ñ3ð	H
ð
 ! ×!1Ñ!1Ñ2ðH
ð ˜u×/Ñ/Ñ0ðH
ð ˜E×-Ñ-Ñ.ðH
ð   × 1Ñ 1Ñ2ðH
ð ˜D‘>ðH
ð $ D™>ðH
ð ' t™nðH
ð ˜d‘^ðH
ð ! ×!1Ñ!1Ñ2ðH
ð 
ˆuÐ-Ð-Ñ	.òH
óó kðH
ðb #(ñDàŸ™ðDð —l‘lðDð Ÿ™ð	Dð
 ðDð  óDðL ð7ØŸ™ð7àð7ð ð7ð �{‰{ð	7ð
 —‘ð7ð Ÿ™ð7ð ò7ó ô7r/   rÝ   zM
    The CodeGen Model transformer with a language modeling head on top.
    c            !       óp  ‡ — e Zd ZdgZˆ fd„Zd„ Zd„ Z eej                  d«      «       e
eee¬«      	 	 	 	 	 	 	 	 	 	 	 	 	 ddeej                      deeeeeej(                        f      d	eej*                     d
eej                      deej                      deej*                     deej*                     deej                      dee   dee   dee   dee   deej                      deeef   fd„«       «       Zedeeej(                        dej(                  deeej(                        fd„«       Zˆ xZS )ÚCodeGenForCausalLMzlm_head.weightc                 óÂ   •— t         ‰| �  |«       t        |«      | _        t	        j
                  |j                  |j                  «      | _        | j                  «        y r—   )
rA   rB   rÝ   r¿   r   rX   r¤   rß   Úlm_headrë   )r]   r^   rL   s     €r-   rB   zCodeGenForCausalLM.__init__Ø  sE   ø€ Ü‰Ñ˜Ô Ü'¨Ó/ˆÔÜ—y‘y §¡°×0AÑ0AÓBˆŒð 	�‰Õr/   c                 ó   — | j                   S r—   ©rF  rï   s    r-   Úget_output_embeddingsz(CodeGenForCausalLM.get_output_embeddingsà  s   € Ø�|‰|Ðr/   c                 ó   — || _         y r—   rH  rò   s     r-   Úset_output_embeddingsz(CodeGenForCausalLM.set_output_embeddingsã  s	   € Ø%ˆ�r/   rõ   rö   rù   rÀ   r{   rú   rƒ   r|   rû   Úlabelsr„   r…   rü   rý   r†   r   c                 ó$  — |�|n| j                   j                  }| j                  ||||||||	|
|||¬«      }|d   }| j                  |«      j	                  t
        j                  «      }d}|�`|j	                  |j                  «      } | j                  ||fd| j                   j                  i|¤Ž}|j	                  |j                  «      }|s|f|dd z   }|�|f|z   S |S t        |||j                  |j                  |j                  ¬«      S )a³  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for language modeling. Note that the labels **are shifted** inside the model, i.e. you can set
            `labels = input_ids` Indices are selected in `[-100, 0, ..., config.vocab_size]` All labels set to `-100`
            are ignored (masked), the loss is only computed for labels in `[0, ..., config.vocab_size]`
        N)rÀ   r{   rú   rƒ   r|   rû   r„   r…   rü   rý   r†   r   rß   r   )ÚlossÚlogitsrÀ   r�   r  )r^   r  r¿   rF  rU   r#   rT   rŠ   Úloss_functionrß   r!   r   rÀ   r�   r  )r]   rù   rÀ   r{   rú   rƒ   r|   rû   rL  r„   r…   rü   rý   r†   rÃ   Útransformer_outputsr�   Ú	lm_logitsrN  Úoutputs                       r-   r–   zCodeGenForCausalLM.forwardæ  sF  € ð: &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà"×.Ñ.ØØ+Ø)Ø)Ø%ØØ'ØØ/Ø!5Ø#Ø)ð /ó 
Ðð ,¨AÑ.ˆð
 —L‘L Ó/×2Ñ2´5·=±=ÓAˆ	àˆØÐà—Y‘Y˜y×/Ñ/Ó0ˆFà%�4×%Ñ%ØØñð  Ÿ;™;×1Ñ1ðð ñ	ˆDð —7‘7˜=×.Ñ.Ó/ˆDáØ�\Ð$7¸¸Ð$;Ñ;ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä%ØØØ/×?Ñ?Ø-×;Ñ;Ø*×5Ñ5ô
ð 	
r/   Úbeam_idxc                 ó,   ‡— t        ˆfd„| D «       «      S )a  
        This function is used to re-order the `past_key_values` cache if [`~PretrainedModel.beam_search`] or
        [`~PretrainedModel.beam_sample`] is called. This is required to match `past_key_values` with the correct
        beam_idx at every generation step.
        c              3   óF   •K  — | ]  }t        ˆfd „|D «       «      –— Œ y­w)c              3   ót   •K  — | ]/  }|j                  d ‰j                  |j                  «      «      –— Œ1 y­w)r   N)Úindex_selectrU   rŠ   )r  Ú
past_staterT  s     €r-   r  z>CodeGenForCausalLM._reorder_cache.<locals>.<genexpr>.<genexpr>>  s.   øè ø€ ÒjÐQ[�*×)Ñ)¨!¨X¯[©[¸×9JÑ9JÓ-K×LÑjùs   ƒ58N©r  )r  r‚   rT  s     €r-   r  z4CodeGenForCausalLM._reorder_cache.<locals>.<genexpr>=  s%   øè ø€ ò 
àô ÓjÐ_iÔj×jñ
ùs   ƒ!rZ  )rÀ   rT  s    `r-   Ú_reorder_cachez!CodeGenForCausalLM._reorder_cache4  s   ø€ ô ó 
à-ô
ó 
ð 	
r/   )NNNNNNNNNNNNN)rM   r™   rš   Ú_tied_weights_keysrB   rI  rK  r   r=  r>  r   r?  r   r@  r   r#   rœ   r   r	   r   rž   r›   r�   r–   rA  r[  rŸ   r    s   @r-   rD  rD  Ï  sú  ø„ ð +Ð+Ðôòò&ñ +Ð+C×+JÑ+JÐKhÓ+iÓjÙØ&Ø*Ø$ôð 15ØNRØ6:Ø59Ø37Ø15Ø59Ø-1Ø$(Ø,0Ø/3Ø&*Ø59ñF
à˜E×,Ñ,Ñ-ðF
ð " %¨¨u°U¸5¿<¹<Ñ5HÑ/IÐ(IÑ"JÑKðF
ð ! ×!2Ñ!2Ñ3ð	F
ð
 ! ×!1Ñ!1Ñ2ðF
ð ˜u×/Ñ/Ñ0ðF
ð ˜E×-Ñ-Ñ.ðF
ð   × 1Ñ 1Ñ2ðF
ð ˜×)Ñ)Ñ*ðF
ð ˜D‘>ðF
ð $ D™>ðF
ð ' t™nðF
ð ˜d‘^ðF
ð ! ×!1Ñ!1Ñ2ðF
ð  
ˆuÐ,Ð,Ñ	-ò!F
óó kðF
ðP ð
Ø˜u U§\¡\Ñ2Ñ3ð
Ø?D¿|¹|ð
à	ˆu�U—\‘\Ñ"Ñ	#ò
ó ô
r/   rD  )rD  rÝ   r¾   )7rÓ   Útypingr   r   r   r#   Útorch.utils.checkpointr   Úactivationsr   Úcache_utilsr	   r
   r   Ú
generationr   Úmodeling_attn_mask_utilsr   Úmodeling_outputsr   r   Úmodeling_utilsr   Úutilsr   r   r   r   r   Úconfiguration_codegenr   Ú!torch.nn.attention.flex_attentionr   Úintegrations.flex_attentionr   Ú
get_loggerrM   rJ   r?  r@  rB  rž   r.   r8   r<   ÚModuler>   r¢   r­   r¾   ÚCODEGEN_START_DOCSTRINGr=  rÝ   rD  Ú__all__r   r/   r-   ú<module>rm     s’  ðñ ç )Ñ )ã Û Ý å !ß ;Ñ ;Ý )Ý >ß OÝ -÷õ õ 1ñ  Ô!Ý;åJð 
ˆ×	Ñ	˜HÓ	%€à2Ð Ø!€ðP¨ð P°3ð P¸5¿<¹<ó Pð˜Ÿ™ð ¨¯©ó ð= §¡ð =°E·L±Lð =ÀuÇ|Á|ð =ÐX]×XdÑXdó =ô\�r—y‘yô \ô@�—‘ô ô(+�2—9‘9ô +ô\ *˜_ô  *ðF	Ð ðEÐ ñP ØgØóôgÐ)ó gó	ðgñT	 ðð ó	ôk
Ð/°ó k
óðk
ò\ K�r/   