Ë
    éÓ^jl  ã                   óv  — d Z ddlmZ ddlmZmZmZmZmZ ddl	Z	ddl
mc mZ ddl	mZ ddlmZmZ ddlmZmZmZmZmZmZmZ ddlmZ d	d
lmZ d	dlmZ d	dlmZm Z  d	dl!m"Z"m#Z# dgZ$d-d„Z% G d„ dejL                  «      Z'd-d„Z( G d„ dejL                  «      Z) G d„ dejL                  «      Z* G d„ dejL                  «      Z+ G d„ dejL                  «      Z, G d„ dejL                  «      Z- G d„ dejL                  «      Z. G d„ dejL                  «      Z/d „ Z0d.d!„Z1d/d"„Z2 e" e2d#¬$«       e2d#¬$«       e2d#¬$«       e2d#d%d&d'¬(«       e2d#d%d&d'¬(«       e2d#d%d&d'¬(«       e2d#¬$«       e2d#¬$«       e2d#¬$«       e2d#d%d&d'¬(«       e2d#d%d&d'¬(«       e2d#d%d&d'¬(«      d)œ«      Z3e#d.d*„«       Z4e#d.d+„«       Z5e#d.d,„«       Z6y)0zª Next-ViT

As described in https://arxiv.org/abs/2207.05501

Next-ViT model defs and weights adapted from https://github.com/bytedance/Next-ViT, original copyright below
é    )Úpartial)ÚListÚOptionalÚTupleÚUnionÚTypeN)Únn©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)ÚDropPathÚcalculate_drop_path_ratesÚtrunc_normal_ÚConvMlpÚget_norm_layerÚget_act_layerÚuse_fused_attn)ÚClassifierHeadé   )Úbuild_model_with_cfg)Úfeature_take_indices)Ú
checkpointÚcheckpoint_seq)Úgenerate_default_cfgsÚregister_modelÚNextViTc                 ó¨  — | j                   j                  }| j                  €bt        j                  | j
                  |j                  ¬«      j                  |j                  «       «      }t        j                  |«      | _        | j                  j                  }|€˜|j                  du sJ d«       ‚|j                  du sJ d«       ‚|j                  j                  |j                  «      j                  d«      }||j                   z  }|j                  |j                   |j                   z  |z  z
  }�n.|j                  du sJ d«       ‚|j                  du sJ d«       ‚|j                  du sJ d«       ‚|j                  du sJ d«       ‚|j                  j                  |j                  «      j                  d«      }	|j                  j                  |j                  «      j                  d«      }
|	|j                   z  |
z  |j                   z  }|
|j                   z  |j                  |j                   |j                   z  |	z  z
  |j                   z
  z  |j                  z   }t#        | t        j$                  «      rE||z  }|j'                  |j)                  d|j+                  d«      «      j-                  |«      «       nÞt#        | t        j.                  «      rÄ|j0                  d   dk(  r|j0                  d	   dk(  sJ ‚|j3                  |j0                  d
   |j0                  d   «      }||z  }|j'                  |j)                  d|j+                  d«      «      j-                  |«      «       |j3                  |j0                  d
   |j0                  d   dd«      }|j5                  |«       || j                   _        || j                  _        y)z/ Merge pre BN to reduce inference runtime.
    N)ÚdeviceTz2Unsupported bn_module.track_running_stats is Falsez%Unsupported bn_module.affine is Falseç      à¿r   é   é   r   )ÚweightÚdataÚbiasÚtorchÚzerosÚout_chsr   Útyper	   Ú	ParameterÚtrack_running_statsÚaffineÚrunning_varÚaddÚepsÚpowÚrunning_meanÚ
isinstanceÚLinearÚmul_ÚviewÚsizeÚ	expand_asÚConv2dÚshapeÚreshapeÚadd_)ÚmoduleÚpre_bn_1Úpre_bn_2r"   r&   r$   Úscale_invstdÚextra_weightÚ
extra_biasÚscale_invstd_1Úscale_invstd_2s              ú^/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/nextvit.pyÚmerge_pre_bnrD      s"  € ð �]‰]×Ñ€FØ‡{�{ÐÜ—‘˜FŸN™N°6·=±=ÔA×FÑFÀvÇ{Á{Ã}ÓUˆÜ—l‘l 5Ó)ˆŒØ�;‰;×Ñ€DØÐØ×+Ñ+¨tÑ3ÐiÐ5iÓiÐ3Ø�‰ $Ñ&ÐOÐ(OÓOÐ&à×+Ñ+×/Ñ/°·±Ó=×AÑAÀ$ÓGˆØ# h§o¡oÑ5ˆØ—]‘] X§_¡_°x×7LÑ7LÑ%LÈ|Ñ%[Ñ[Š
à×+Ñ+¨tÑ3ÐiÐ5iÓiÐ3Ø�‰ $Ñ&ÐOÐ(OÓOÐ&à×+Ñ+¨tÑ3ÐiÐ5iÓiÐ3Ø�‰ $Ñ&ÐOÐ(OÓOÐ&à!×-Ñ-×1Ñ1°(·,±,Ó?×CÑCÀDÓIˆØ!×-Ñ-×1Ñ1°(·,±,Ó?×CÑCÀDÓIˆà%¨¯©Ñ7¸.ÑHÈ8Ï?É?ÑZˆà §¡Ñ0Ø—=‘= 8§?¡?°X×5JÑ5JÑ#JÈ^Ñ#[Ñ[Ð^f×^sÑ^sÑsñuà—-‘-ñ ð 	ô �&œ"Ÿ)™)Ô$Ø˜jÑ(ˆ
Ø�‰�L×%Ñ% a¨¯©°Q«Ó8×BÑBÀ6ÓJÕKÜ	�FœBŸI™IÔ	&Ø�|‰|˜A‰ !Ò#¨¯©°Q©¸1Ò(<Ð<Ð<Ø—‘ §¡¨Q¡°·±¸a±ÓAˆØ˜jÑ(ˆ
Ø�‰�L×%Ñ% a¨¯©°Q«Ó8×BÑBÀ6ÓJÔKØ—‘ §¡¨Q¡°·±¸a±À!ÀQÓGˆØ‡I�IˆjÔà€F‡M�MÔØ€F‡K�KÕó    c                   ó®   ‡ — e Zd Zdddej                  ej
                  ddfdededededed	eej                     d
eej                     fˆ fd„Z	d„ Z
ˆ xZS )ÚConvNormActr!   r   NÚin_chsr'   Úkernel_sizeÚstrideÚgroupsÚ
norm_layerÚ	act_layerc
           	      ó¤   •— ||	dœ}
t         ‰| �  «        t        j                  ||f||d|ddœ|
¤Ž| _         ||fi |
¤Ž| _         |«       | _        y )N©r   Údtyper   F©rI   rJ   ÚpaddingrK   r$   )ÚsuperÚ__init__r	   r7   ÚconvÚnormÚact)ÚselfrH   r'   rI   rJ   rK   rL   rM   r   rP   ÚddÚ	__class__s              €rC   rT   zConvNormAct.__init__J   sl   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ—I‘IØØð	
ð $ØØØØñ	
ð ñ	
ˆŒ	ñ ˜wÑ-¨"Ñ-ˆŒ	Ù“;ˆ�rE   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S ©N)rU   rV   rW   ©rX   Úxs     rC   ÚforwardzConvNormAct.forwarde   s.   € Ø�I‰I�a‹LˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØˆrE   )Ú__name__Ú
__module__Ú__qualname__r	   ÚBatchNorm2dÚReLUÚintr   ÚModulerT   r_   Ú__classcell__©rZ   s   @rC   rG   rG   I   s€   ø„ ð
  !ØØØ*,¯.©.Ø)+¯©ØØñàðð ðð ð	ð
 ðð ðð ˜RŸY™Y™ðð ˜BŸI™I‘õö6rE   rG   c                 ój   — |€|}t        |t        | |dz  z   «      |z  |z  «      }|d| z  k  r||z  }|S )Nr    gÍÌÌÌÌÌì?)Úmaxre   )ÚvÚdivisorÚ	min_valueÚnew_vs       rC   Ú_make_divisiblero   l   sJ   € ØÐØˆ	Ü�	œ3˜q 7¨Q¡;™Ó/°7Ñ:¸WÑDÓE€Eàˆs�Q‰w‚Ø�ÑˆØ€LrE   c            
       ón   ‡ — e Zd Zdej                  ddfdedededeej                     fˆ fd„Zd„ Z	ˆ xZ
S )	Ú
PatchEmbedr   NrH   r'   rJ   rL   c                 ó   •— ||dœ}t         ‰| �  «        |dk(  rMt        j                  dddd¬«      | _        t        j
                  ||fddddœ|¤Ž| _         ||fi |¤Ž| _        y ||k7  rHt        j                  «       | _        t        j
                  ||fddddœ|¤Ž| _         ||fi |¤Ž| _        y t        j                  «       | _        t        j                  «       | _        t        j                  «       | _        y )	NrO   r    )r    r    TF)rJ   Ú	ceil_modeÚcount_include_padr   )rI   rJ   r$   )	rS   rT   r	   Ú	AvgPool2dÚpoolr7   rU   rV   ÚIdentity)	rX   rH   r'   rJ   rL   r   rP   rY   rZ   s	           €rC   rT   zPatchEmbed.__init__w   sÚ   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ�QŠ;ÜŸ™ V°AÀÐY^Ô_ˆDŒIÜŸ	™	 &¨'Ð]¸qÈÐQVÑ]ÐZ\Ñ]ˆDŒIÙ" 7Ñ1¨bÑ1ˆD�IØ�wÒÜŸ™›ˆDŒIÜŸ	™	 &¨'Ð]¸qÈÐQVÑ]ÐZ\Ñ]ˆDŒIÙ" 7Ñ1¨bÑ1ˆD�IäŸ™›ˆDŒIÜŸ™›ˆDŒIÜŸ™›ˆD�IrE   c                 ó`   — | j                  | j                  | j                  |«      «      «      S r\   )rV   rU   rv   r]   s     rC   r_   zPatchEmbed.forward�   s"   € Ø�y‰y˜Ÿ™ 4§9¡9¨Q£<Ó0Ó1Ð1rE   )r`   ra   rb   r	   rc   re   r   rf   rT   r_   rg   rh   s   @rC   rq   rq   v   sM   ø„ ð
 Ø*,¯.©.ØØñ&àð&ð ð&ð ð	&ð
 ˜RŸY™Y™õ&ö02rE   rq   c            
       ó    ‡ — e Zd ZdZej
                  ej                  ddfdededeej                     deej                     fˆ fd„Z
d„ Zˆ xZS )	ÚConvAttentionz,
    Multi-Head Convolutional Attention
    Nr'   Úhead_dimrL   rM   c           	      óè   •— ||dœ}t         ‰| �  «        t        j                  ||fddd||z  ddœ|¤Ž| _         ||fi |¤Ž| _         |«       | _        t        j                  ||fdddœ|¤Ž| _        y )NrO   r!   r   FrQ   )rI   r$   )rS   rT   r	   r7   Úgroup_conv3x3rV   rW   Ú
projection)	rX   r'   r{   rL   rM   r   rP   rY   rZ   s	           €rC   rT   zConvAttention.__init__˜   s‘   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜŸY™YØØð	
ð ØØØ˜hÑ&Øñ	
ð ñ	
ˆÔñ ˜wÑ-¨"Ñ-ˆŒ	Ù“;ˆŒÜŸ)™) G¨WÐVÀ!È%ÑVÐSUÑVˆ�rE   c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S r\   )r}   rV   rW   r~   ©rX   r^   Úouts      rC   r_   zConvAttention.forward±   s?   € Ø× Ñ  Ó#ˆØ�i‰i˜‹nˆØ�h‰h�s‹mˆØ�o‰o˜cÓ"ˆØˆ
rE   )r`   ra   rb   Ú__doc__r	   rc   rd   re   r   rf   rT   r_   rg   rh   s   @rC   rz   rz   “   sc   ø„ ñð +-¯.©.Ø)+¯©ØØñWàðWð ðWð ˜RŸY™Y™ð	Wð
 ˜BŸI™I‘õWö2rE   rz   c                   óì   ‡ — e Zd ZdZdddddej
                  ej                  ddf	deded	ed
edededede	ej                     de	ej                     fˆ fd„Z ej                  «       d„ «       Zd„ Zˆ xZS )ÚNextConvBlockz 
    Next Convolution Block
    r   ç        é    g      @NrH   r'   rJ   Ú	drop_pathÚdropr{   Ú	mlp_ratiorL   rM   c                 ó^  •— |
|dœ}t         ‰| �  «        || _        || _        ||z  dk(  sJ ‚t	        |||fd|i|¤Ž| _        t        ||f||	dœ|¤Ž| _        t        |«      | _	         ||fi |¤Ž| _
        t        |ft        ||z  «      |d|	dœ|¤Ž| _        t        |«      | _        d| _        y )NrO   r   rL   )rL   rM   T)Úhidden_featuresrˆ   r$   rM   F)rS   rT   rH   r'   rq   Úpatch_embedrz   Úmhcar   Úattn_drop_pathrV   r   re   ÚmlpÚmlp_drop_pathÚis_fused)rX   rH   r'   rJ   r‡   rˆ   r{   r‰   rL   rM   r   rP   rY   rZ   s                €rC   rT   zNextConvBlock.__init__½   sê   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØˆŒØ˜Ñ! QÒ&Ð&Ð&ä% f¨g°vÑ[È*Ð[ÐXZÑ[ˆÔÜ!ØØð
ð "Øñ	
ð
 ñ
ˆŒ	ô ' yÓ1ˆÔá˜wÑ-¨"Ñ-ˆŒ	ÜØð
ä ¨)Ñ 3Ó4ØØØñ
ð ñ
ˆŒô & iÓ0ˆÔØˆ�rE   c                 ó²   — | j                   sKt        | j                  j                  | j                  «       t        j                  «       | _        d| _         y y ©NT)r‘   rD   r�   Úfc1rV   r	   rw   ©rX   s    rC   ÚreparameterizezNextConvBlock.reparameterizeç   s8   € à�}Š}Ü˜Ÿ™Ÿ™ t§y¡yÔ1ÜŸ™›ˆDŒIØ ˆD�Mð rE   c                 óÖ   — | j                  |«      }|| j                  | j                  |«      «      z   }| j                  |«      }|| j	                  | j                  |«      «      z   }|S r\   )rŒ   rŽ   r�   rV   r�   r�   r€   s      rC   r_   zNextConvBlock.forwardî   s^   € Ø×Ñ˜QÓˆØ�×#Ñ# D§I¡I¨a£LÓ1Ñ1ˆà�i‰i˜‹lˆØ�×"Ñ" 4§8¡8¨C£=Ó1Ñ1ˆØˆrE   ©r`   ra   rb   r‚   r	   rc   rd   re   Úfloatr   rf   rT   r%   Úno_gradr–   r_   rg   rh   s   @rC   r„   r„   ¸   s¼   ø„ ñð Ø!ØØØ!Ø*,¯.©.Ø)+¯©ØØñ(àð(ð ð(ð ð	(ð
 ð(ð ð(ð ð(ð ð(ð ˜RŸY™Y™ð(ð ˜BŸI™I‘õ(ðT €U‡]�]ƒ_ñ!ó ð!örE   r„   c                   óÌ   ‡ — e Zd ZU dZej
                  j                  e   ed<   dddddde	j                  ddf	ded	ee   d
edededededee	j                     fˆ fd„Zd„ Zˆ xZS )ÚEfficientAttentionz-
    Efficient Multi-Head Self Attention
    Ú
fused_attnNr†   Tr…   r   ÚdimÚout_dimr{   Úqkv_biasÚ	attn_dropÚ	proj_dropÚsr_ratiorL   c                 ó6  •— |	|
dœ}t         ‰| �  «        || _        |�|n|| _        | j                  |z  | _        || _        |dz  | _        t        «       | _        t        j                  || j                  fd|i|¤Ž| _        t        j                  || j                  fd|i|¤Ž| _        t        j                  || j                  fd|i|¤Ž| _        t        j                  | j                  | j                  fi |¤Ž| _        t        j                  |«      | _        t        j                  |«      | _        || _        |dz  | _        |dkD  r?t        j(                  | j&                  | j&                  ¬«      | _         ||fi |¤Ž| _        y d | _        d | _        y )NrO   r   r$   r    r   )rI   rJ   )rS   rT   rž   rŸ   Ú	num_headsr{   Úscaler   r�   r	   r2   ÚqÚkrk   ÚprojÚDropoutr¡   r¢   r£   ÚN_ratioÚ	AvgPool1dÚsrrV   )rX   rž   rŸ   r{   r    r¡   r¢   r£   rL   r   rP   rY   rZ   s               €rC   rT   zEfficientAttention.__init__ý   sM  ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØ")Ð"5‘w¸3ˆŒØŸ™ XÑ-ˆŒØ ˆŒØ Ñ%ˆŒ
Ü(Ó*ˆŒä—‘˜3 §¡Ñ>¨xÐ>¸2Ñ>ˆŒÜ—‘˜3 §¡Ñ>¨xÐ>¸2Ñ>ˆŒÜ—‘˜3 §¡Ñ>¨xÐ>¸2Ñ>ˆŒÜ—I‘I˜dŸh™h¨¯©Ñ;¸Ñ;ˆŒ	ÜŸ™ IÓ.ˆŒÜŸ™ IÓ.ˆŒà ˆŒØ 1‘}ˆŒØ�aŠ<Ü—l‘l¨t¯|©|ÀDÇLÁLÔQˆDŒGÙ" 3Ñ-¨"Ñ-ˆD�IàˆDŒGØˆD�IrE   c                 ó"  — |j                   \  }}}| j                  |«      j                  ||| j                  | j                  «      j                  dddd«      }| j                  �B| j                  |j                  dd«      «      }| j                  |«      j                  dd«      }| j                  |«      j                  |d| j                  | j                  «      j                  dd«      }| j                  |«      j                  |d| j                  | j                  «      j                  dd«      }| j                  r<t        j                  |||| j                  r| j                  j                   nd¬«      }nL|| j"                  z  }||j                  dd«      z  }|j%                  d¬	«      }| j                  |«      }||z  }|j                  dd«      j                  |||«      }| j'                  |«      }| j)                  |«      }|S )
Nr   r    r   r!   éÿÿÿÿr…   )Ú	dropout_péþÿÿÿ©rž   )r8   r§   r9   r¥   r{   Úpermuter­   Ú	transposerV   r¨   rk   r�   ÚFÚscaled_dot_product_attentionÚtrainingr¡   Úpr¦   Úsoftmaxr©   r¢   )	rX   r^   ÚBÚNÚCr§   r¨   rk   Úattns	            rC   r_   zEfficientAttention.forward#  s¬  € Ø—'‘'‰ˆˆ1ˆaØ�F‰F�1‹I×Ñ˜a  D§N¡N°D·M±MÓB×JÑJÈ1ÈaÐQRÐTUÓVˆà�7‰7ÐØ—‘˜Ÿ™ A qÓ)Ó*ˆAØ—	‘	˜!“×&Ñ& q¨!Ó,ˆAà�F‰F�1‹I×Ñ˜a  T§^¡^°T·]±]ÓC×MÑMÈaÐQRÓSˆØ�F‰F�1‹I×Ñ˜a  T§^¡^°T·]±]ÓC×MÑMÈaÐQRÓSˆà�?Š?Ü×.Ñ.Ø�1�aØ.2¯mªm˜$Ÿ.™.×*Ò*Àô‰Að
 �D—J‘J‘ˆAØ�q—{‘{ 2 rÓ*Ñ*ˆDØ—<‘< B�<Ó'ˆDØ—>‘> $Ó'ˆDØ�q‘ˆAà�K‰K˜˜1Ó×%Ñ% a¨¨AÓ.ˆØ�I‰I�a‹LˆØ�N‰N˜1ÓˆØˆrE   )r`   ra   rb   r‚   r%   ÚjitÚFinalÚboolÚ__annotations__r	   ÚBatchNorm1dre   r   r™   r   rf   rT   r_   rg   rh   s   @rC   rœ   rœ   ÷   s£   ø… ñð —	‘	—‘ Ñ%Ó%ð
 &*ØØ!Ø!Ø!ØØ*,¯.©.ØØñ$àð$ð ˜c‘]ð$ð ð	$ð
 ð$ð ð$ð ð$ð ð$ð ˜RŸY™Y™õ$öLrE   rœ   c                   óü   ‡ — e Zd ZdZdddddddej
                  ej                  ddfded	ed
edededededededede	ej                     de	ej                     fˆ fd„Z ej                  «       d„ «       Zd„ Zˆ xZS )ÚNextTransformerBlockz 
    Next Transformer Block
    r   r    r†   ç      è?r…   NrH   r'   r‡   rJ   r£   r‰   r{   Úmix_block_ratior¡   rˆ   rL   rM   c                 óÐ  •— ||dœ}t         ‰| �  «        || _        || _        || _        t        t        ||z  «      d«      | _        || j                  z
  | _        t        || j                  |fi |¤Ž| _
         || j                  fi |¤Ž| _        t        | j                  f|||	|
dœ|¤Ž| _        t        ||z  «      | _        t        | j                  | j                  fd|dœ|¤Ž| _        t#        | j                  f|||dœ|¤Ž| _        t        |d|z
  z  «      | _         ||fi |¤Ž| _        t+        |ft        ||z  «      ||
dœ|¤Ž| _        t        |«      | _        d| _        y )	NrO   r†   )r{   r£   r¡   r¢   r   )rJ   rL   )r{   rL   rM   )r‹   rM   rˆ   F)rS   rT   rH   r'   rÆ   ro   re   Úmhsa_out_chsÚmhca_out_chsrq   rŒ   Únorm1rœ   Úe_mhsar   Úmhsa_drop_pathr~   rz   r�   Úmhca_drop_pathÚnorm2r   r�   r�   r‘   )rX   rH   r'   r‡   rJ   r£   r‰   r{   rÆ   r¡   rˆ   rL   rM   r   rP   rY   rZ   s                   €rC   rT   zNextTransformerBlock.__init__E  s¨  ø€ ð" ¨Ñ/ˆÜ‰ÑÔØˆŒØˆŒØ.ˆÔä+¬C°¸/Ñ0IÓ,JÈBÓOˆÔØ# d×&7Ñ&7Ñ7ˆÔä% f¨d×.?Ñ.?ÀÑNÈ2ÑNˆÔÙ × 1Ñ 1Ñ8°RÑ8ˆŒ
Ü(Ø×Ñð
àØØØñ
ð ñ
ˆŒô ' y°?Ñ'BÓCˆÔä$Ø×ÑØ×Ñð
ð Ø!ñ	
ð
 ñ
ˆŒô "Ø×Ñð
àØ!Øñ	
ð
 ñ
ˆŒ	ô ' y°A¸Ñ4GÑ'HÓIˆÔá Ñ.¨2Ñ.ˆŒ
ÜØð
ä ¨)Ñ 3Ó4ØØñ	
ð
 ñ
ˆŒô & iÓ0ˆÔØˆ�rE   c                 óR  — | j                   �sšt        | j                  j                  | j                  «       | j                  j
                  �¢t        | j                  j                  | j                  | j                  j
                  «       t        | j                  j                  | j                  | j                  j
                  «       t        j                  «       | j                  _        nTt        | j                  j                  | j                  «       t        | j                  j                  | j                  «       t        j                  «       | _        t        | j                  j                  | j                  «       t        j                  «       | _        d| _         y y r“   )r‘   rD   rË   r§   rÊ   rV   r¨   rk   r	   rw   r�   r”   rÎ   r•   s    rC   r–   z#NextTransformerBlock.reparameterize†  sí   € à�}‹}Ü˜Ÿ™Ÿ™¨¯
©
Ô3Ø�{‰{×ÑÐ+Ü˜TŸ[™[Ÿ]™]¨D¯J©J¸¿¹×8HÑ8HÔIÜ˜TŸ[™[Ÿ]™]¨D¯J©J¸¿¹×8HÑ8HÔIÜ#%§;¡;£=�—‘Õ ä˜TŸ[™[Ÿ]™]¨D¯J©JÔ7Ü˜TŸ[™[Ÿ]™]¨D¯J©JÔ7ÜŸ™›ˆDŒJä˜Ÿ™Ÿ™ t§z¡zÔ2ÜŸ™›ˆDŒJØ ˆD�Mð rE   c                 óB  — | j                  |«      }|j                  \  }}}}| j                  |«      }|j                  ||d«      j	                  dd«      }| j                  | j                  |«      «      }||j	                  dd«      j                  ||||«      z   }| j                  |«      }|| j                  | j                  |«      «      z   }t        j                  ||gd¬«      }| j                  |«      }|| j                  | j                  |«      «      z   }|S )Nr¯   r±   r   r²   )rŒ   r8   rÊ   r9   r´   rÌ   rË   r~   rÍ   r�   r%   ÚcatrÎ   r�   r�   )rX   r^   rº   r¼   ÚHÚWr�   s          rC   r_   zNextTransformerBlock.forward—  sü   € Ø×Ñ˜QÓˆØ—W‘W‰
ˆˆ1ˆa�à�j‰j˜‹mˆØ�k‰k˜!˜Q Ó#×-Ñ-¨b°"Ó5ˆØ×!Ñ! $§+¡+¨cÓ"2Ó3ˆØ�—‘˜b "Ó%×-Ñ-¨a°°A°qÓ9Ñ9ˆà�o‰o˜aÓ ˆØ�D×'Ñ'¨¯	©	°#«Ó7Ñ7ˆÜ�I‰I�q˜#�h AÔ&ˆà�j‰j˜‹mˆØ�×"Ñ" 4§8¡8¨C£=Ó1Ñ1ˆØˆrE   r˜   rh   s   @rC   rÄ   rÄ   @  sà   ø„ ñð ØØ ØØ%)Ø!ØØ*,¯.©.Ø)+¯©ØØñ?àð?ð ð?ð ð	?ð
 ð?ð ð?ð ð?ð ð?ð #ð?ð ð?ð ð?ð ˜RŸY™Y™ð?ð ˜BŸI™I‘õ?ðB €U‡]�]ƒ_ñ!ó ð!ö rE   rÄ   c                   óF  ‡ — e Zd Zdddddddej                  ej
                  ddfdedee   d	eeej                        d
edede
de
de
dee
ee
   ee
df   f   dedeej                     deej                     fˆ fd„Zej                  j                   dd„«       Zd„ Zˆ xZS )Ú	NextStager    r   ç      ð?r…   r†   NrH   Ú	block_chsÚblock_typesrJ   r£   rÆ   rˆ   r¡   r‡   .r{   rL   rM   c                 ó²  •— ||dœ}t         ‰| �  «        d| _        g }t        |«      D ]•  \  }}|dk(  r|nd}||   }||   }t	        |	t
        t        f«      r|	|   n|	}|t        u r&t        ||f||||
||dœ|¤Ž}|j                  |«       n0|t        u r(t        ||f||||
|||||dœ	|¤Ž}|j                  |«       |}Œ— t        j                  |Ž | _        y )NrO   Fr   r   )rJ   r‡   rˆ   r{   rL   rM   )	r‡   rJ   r£   r{   rÆ   r¡   rˆ   rL   rM   )rS   rT   Úgrad_checkpointingÚ	enumerater1   ÚlistÚtupler„   ÚappendrÄ   r	   Ú
SequentialÚblocks)rX   rH   r×   rØ   rJ   r£   rÆ   rˆ   r¡   r‡   r{   rL   rM   r   rP   rY   rà   Ú	block_idxÚ
block_typer'   ÚdprÚlayerrZ   s                         €rC   rT   zNextStage.__init__«  s0  ø€ ð" ¨Ñ/ˆÜ‰ÑÔØ"'ˆÔàˆÜ%.¨{Ó%;ò "	Ñ!ˆI�zØ(¨Aš~‘V°1ˆFØ 	Ñ*ˆGØ$ YÑ/ˆJÜ*4°YÄÄuÀÔ*N�)˜IÒ&ÐT]ˆCØœ]Ñ*Ü%ØØð
ð "Ø!ØØ%Ø)Ø'ñ
ð ñ
�ð —‘˜eÕ$ØÔ3Ñ3Ü,ØØðð "Ø!Ø%Ø%Ø$3Ø'ØØ)Ø'ñð ñ�ð —‘˜eÔ$Ø‰FðE"	ôH —m‘m VÐ,ˆ�rE   c                 ó   — || _         y r\   )rÚ   )rX   Úenables     rC   Úset_grad_checkpointingz NextStage.set_grad_checkpointingç  s
   € à"(ˆÕrE   c                 ó¬   — | j                   r6t        j                  j                  «       st	        | j
                  |«      }|S | j                  |«      }|S r\   )rÚ   r%   r¾   Úis_scriptingr   rà   r]   s     rC   r_   zNextStage.forwardë  sE   € Ø×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨AÓ.ˆAð ˆð —‘˜A“ˆAØˆrE   ©T)r`   ra   rb   r	   rc   rd   re   r   r   rf   r™   r   r   rT   r%   r¾   Úignorerç   r_   rg   rh   s   @rC   rÕ   rÕ   ©  s  ø„ ð ØØ%(ØØ!ØFHØØ*,¯.©.Ø)+¯©ØØñ:-àð:-ð ˜C‘yð:-ð ˜d 2§9¡9™oÑ.ð	:-ð
 ð:-ð ð:-ð #ð:-ð ð:-ð ð:-ð ˜U D¨¡K°°u¸c°zÑ1BÐBÑCð:-ð ð:-ð ˜RŸY™Y™ð:-ð ˜BŸI™I‘õ:-ðx ‡Y�Y×Ñò)ó ð)örE   rÕ   c                   óÎ  ‡ — e Zd Zdddddddddd	d
ej                  dddfdedededeedf   deedf   deedf   deedf   dededededede	ej                     dee	ej                        fˆ fd„Zd„ Zej                  j                   d0d„«       Zej                  j                   d1d„«       Zej                  j                   dej                  fd „«       Zd2dedee   fd!„Z	 	 	 	 	 d3d"ej*                  d#eeeee   f      d$ed%ed&ed'edeeej*                     eej*                  eej*                     f   f   fd(„Z	 	 	 d4d#eeee   f   d)ed*efd+„Zd,„ Zd0d-efd.„Zd/„ Zˆ xZS )5r   éè  Úavg)é@   r†   rï   ©r!   é   é
   r!   )r   r    r    r    )é   rñ   r    r   çš™™™™™¹?r…   r†   rÅ   NÚin_chansÚnum_classesÚglobal_poolÚstem_chs.ÚdepthsÚstridesÚ	sr_ratiosÚdrop_path_rateÚattn_drop_rateÚ	drop_rater{   rÆ   rL   rM   c                 óº  •— t         ‰| �  «        ||dœ}d| _        || _        || _        t        |«      }|€t        t        j                  d¬«      }nt        |«      }dg|d   z  dg|d   dz
  z  d	gz   g d
¢|d   dz  z  dg|d   dz
  z  dgz   g| _
        t        | j                  «      D ��cg c]  \  }}t        |d   d|dz   z  d|› �¬«      ‘Œ! c}}| _        t        g|d   z  t        g|d   dz
  z  t        gz   t        t        t        t        t        g|d   dz  z  t        g|d   dz
  z  t        gz   g| _        t        j"                  t%        ||d   fdd||dœ|¤Žt%        |d   |d   fdd||dœ|¤Žt%        |d   |d   fdd||dœ|¤Žt%        |d   |d   fdd||dœ|¤Ž«      | _        |d   x}}g }d}t)        ||d¬«      }t+        t-        |«      «      D ]_  }t/        d|| j                  |   | j                   |   ||   ||   |||
|	||   ||dœ|¤Ž}| j                  |   d   x}}||gz  }|||   z  }Œa |x| _        | _        t        j"                  |Ž | _         ||fi |¤Ž| _        t9        d|||dœ|¤Ž| _        t+        t-        |«      «      D �cg c]  }t=        |d |dz    «      dz
  ‘Œ c}| _        | jA                  «        y c c}}w c c}w )NrO   FT)Úinplaceé`   r   éÀ   r   é   )é€  r  r  r  i   r    é   i   r!   i   r¯   zstages.)Únum_chsÚ	reductionr;   )rI   rJ   rL   rM   )Ú	stagewise)rH   r×   rØ   rJ   r£   rÆ   r{   rˆ   r¡   r‡   rL   rM   )Ú	pool_typeÚin_featuresrö   © )!rS   rT   rÚ   rö   rõ   r   r   r	   rd   r   Ústage_out_chsrÛ   ÚdictÚfeature_infor„   rÄ   Ústage_block_typesrß   rG   Ústemr   ÚrangeÚlenrÕ   Únum_featuresÚhead_hidden_sizeÚstagesrV   r   ÚheadÚsumÚstage_out_idxÚ_initialize_weights)rX   rõ   rö   r÷   rø   rù   rú   rû   rü   rý   rþ   r{   rÆ   rL   rM   r   rP   rY   ÚiÚscrH   r'   r  Úidxrã   Ú	stage_idxÚstagerZ   s                              €rC   rT   zNextViT.__init__ô  s°  ø€ ô& 	‰ÑÔØ¨Ñ/ˆØ"'ˆÔØ&ˆÔØ ˆŒÜ# JÓ/ˆ
ØÐÜ¤§¡°Ô6‰Iä% iÓ0ˆIð ˆD�F˜1‘IÑØˆE�V˜A‘Y ‘]Ñ# s eÑ+Ú%¨°©°a©Ñ8ØˆE�V˜A‘Y ‘]Ñ# t fÑ,ð	
ˆÔô ! ×!3Ñ!3Ó4÷	6ñ ˆa�ô	 "Ø�r‘FØ˜!˜a™%‘jØ˜Q˜C�=ö
ó 6ˆÔô ˆO˜f Q™iÑ'ÜˆO˜v a™y¨1™}Ñ-Ô1EÐ0FÑFÜœM¬=¼-ÔI]Ð^ÐbhÐijÑbkÐopÑbpÑqÜˆO˜v a™y¨1™}Ñ-Ô1EÐ0FÑFð	"HˆÔô —M‘MÜØ˜( 1™+ðrØ34¸QÈ:ÐajñrØnpñräØ˜‘˜X a™[ðuØ67ÀÈjÐdmñuØqsñuäØ˜‘˜X a™[ðuØ67ÀÈjÐdmñuØqsñuäØ˜‘˜X a™[ðuØ67ÀÈjÐdmñuØqsñuó	
ˆŒ	ð $ B™<Ð'ˆ�ØˆØˆÜ'¨¸È$ÔOˆÜœs 6›{Ó+ò 	%ˆIÜð ØØ×,Ñ,¨YÑ7Ø ×2Ñ2°9Ñ=Ø˜yÑ)Ø" 9Ñ-Ø /Ø!ØØ(Ø˜i™.Ø%Ø#ñð ñˆEð  $×1Ñ1°)Ñ<¸RÑ@Ð@ˆF�WØ�u�gÑˆFØ�6˜)Ñ$Ñ$‰Cð%	%ð& 5<Ð;ˆÔ˜DÔ1Ü—m‘m VÐ,ˆŒÙ˜wÑ-¨"Ñ-ˆŒ	Ü"Ðm¨[ÀgÐ[fÑmÐjlÑmˆŒ	äCHÌÈVËÓCUÖV¸Cœc &¨¨#°©'Ð"2Ó3°aÓ7ÒVˆÔØ× Ñ Õ"ùói6ùòf Ws   Â/$KÊKc                 ó  — | j                  «       D ]ñ  \  }}t        |t        j                  «      r\t	        |j
                  d¬«       t        |d«      sŒD|j                  €ŒQt        j                  j                  |j                  d«       Œ|t        |t        j                  «      sŒ—t	        |j
                  d¬«       t        |d«      sŒ»|j                  €ŒÈt        j                  j                  |j                  d«       Œó y )Ng{®Gáz”?)Ústdr$   r   )Únamed_modulesr1   r	   r2   r   r"   Úhasattrr$   ÚinitÚ	constant_r7   )rX   ÚnÚms      rC   r  zNextViT._initialize_weightsN  s¬   € Ø×&Ñ&Ó(ò 	1‰DˆAˆqÜ˜!œRŸY™YÔ'Ü˜aŸh™h¨CÕ0Ü˜1˜fÕ%¨!¯&©&Ñ*<Ü—G‘G×%Ñ% a§f¡f¨aÕ0Ü˜AœrŸy™yÕ)Ü˜aŸh™h¨CÕ0Ü˜1˜fÕ%¨!¯&©&Ñ*<Ü—G‘G×%Ñ% a§f¡f¨aÕ0ñ	1rE   c                 ó2   — t        d|rd¬«      S ddg¬«      S )Nz^stemz^stages\.(\d+))z^stages\.(\d+)\.blocks\.(\d+)N)z^norm)iŸ† )r  rà   )r  )rX   Úcoarses     rC   Úgroup_matcherzNextViT.group_matcherY  s/   € äØÙ(.Ð$ô
ð 	
ð 9Ø$ð5ô
ð 	
rE   c                 óX   — || _         | j                  D ]  }|j                  |¬«       Œ y )N)ræ   )rÚ   r  rç   )rX   ræ   r  s      rC   rç   zNextViT.set_grad_checkpointingc  s.   € à"(ˆÔØ—[‘[ò 	8ˆEØ×(Ñ(°Ð(Õ7ñ	8rE   Úreturnc                 ó.   — | j                   j                  S r\   )r  Úfcr•   s    rC   Úget_classifierzNextViT.get_classifieri  s   € à�y‰y�|‰|ÐrE   c                 óL   — || _         | j                  j                  ||¬«       y )N)r	  )rö   r  Úreset)rX   rö   r÷   s      rC   Úreset_classifierzNextViT.reset_classifierm  s   € Ø&ˆÔØ�	‰	�‰˜¨{ˆÕ;rE   r^   ÚindicesrV   Ú
stop_earlyÚ
output_fmtÚintermediates_onlyc                 ó”  — |dv sJ d«       ‚g }t        t        | j                  «      |«      \  }}	| j                  |«      }t        | j                  «      dz
  }
t        j
                  j                  «       s|s| j                  }n| j                  d|	dz    }t        |«      D ]†  \  }}| j                  r+t        j
                  j                  «       st        ||«      }n ||«      }||v sŒJ||
k(  r'|r| j                  |«      n|}|j                  |«       Œv|j                  |«       Œˆ |r|S |
k(  r| j                  |«      }||fS )aï   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
        Returns:

        )ÚNCHWzOutput shape must be NCHW.r   N)r   r  r  r  r%   r¾   ré   rÛ   rÚ   r   rV   rÞ   )rX   r^   r2  rV   r3  r4  r5  ÚintermediatesÚtake_indicesÚ	max_indexÚlast_idxr  Úfeat_idxr  Úx_inters                  rC   Úforward_intermediateszNextViT.forward_intermediatesq  s5  € ð* ˜YÑ&ÐDÐ(DÓDÐ&ØˆÜ"6´s¸4¿;¹;Ó7GÈÓ"QÑˆ�ið �I‰I�a‹LˆÜ�t—{‘{Ó# aÑ'ˆÜ�9‰9×!Ñ!Ô#©:Ø—[‘[‰Fà—[‘[  )¨a¡-Ð0ˆFä(¨Ó0ò 
	,‰OˆH�eØ×&Ò&¬u¯y©y×/EÑ/EÔ/GÜ˜u aÓ(‘á˜!“H�Ø˜<Ò'Ø˜xÒ'Ù.2˜dŸi™i¨œl¸�GØ!×(Ñ(¨Õ1à!×(Ñ(¨Õ+ð
	,ñ Ø Ð à�xÒØ—	‘	˜!“ˆAà�-ÐÐrE   Ú
prune_normÚ
prune_headc                 óÖ   — t        t        | j                  «      |«      \  }}| j                  d|dz    | _        |rt        j                  «       | _        |r| j                  dd«       |S )z@ Prune layers not required for specified intermediates.
        Nr   r   Ú )r   r  r  r	   rw   rV   r1  )rX   r2  r?  r@  r9  r:  s         rC   Úprune_intermediate_layersz!NextViT.prune_intermediate_layers¦  s]   € ô #7´s¸4¿;¹;Ó7GÈÓ"QÑˆ�iØ—k‘k . 9¨q¡=Ð1ˆŒÙÜŸ™›ˆDŒIÙØ×!Ñ! ! RÔ(ØÐrE   c                 óî   — | j                  |«      }| j                  r5t        j                  j	                  «       st        | j                  |«      }n| j                  |«      }| j                  |«      }|S r\   )r  rÚ   r%   r¾   ré   r   r  rV   r]   s     rC   Úforward_featureszNextViT.forward_features¶  sV   € Ø�I‰I�a‹LˆØ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨AÓ.‰Aà—‘˜A“ˆAØ�I‰I�a‹LˆØˆrE   Ú
pre_logitsc                 óN   — |r| j                  ||¬«      S | j                  |«      S )N)rF  )r  )rX   r^   rF  s      rC   Úforward_headzNextViT.forward_head¿  s%   € Ù6@ˆt�y‰y˜ zˆyÓ2ÐRÀdÇiÁiÐPQÃlÐRrE   c                 óJ   — | j                  |«      }| j                  |«      }|S r\   )rE  rH  r]   s     rC   r_   zNextViT.forwardÂ  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆrE   ©Frê   r\   )NFFr7  F)r   FT)r`   ra   rb   r	   rc   re   Ústrr   r™   r   rf   r   rT   r  r%   r¾   rë   r)  rç   r.  r1  ÚTensorr   r   rÀ   r>  rC  rE  rH  r_   rg   rh   s   @rC   r   r   ó  sw  ø„ ð  $Ø$Ø(4Ø&3Ø'3Ø)5Ø$'Ø$&Ø!ØØ%)Ø*,¯.©.Ø37ØØñ#X#àðX#ð ðX#ð ð	X#ð
 ˜C ˜H‘oðX#ð ˜#˜s˜(‘OðX#ð ˜3 ˜8‘_ðX#ð ˜S #˜X‘ðX#ð "ðX#ð "ðX#ð ðX#ð ðX#ð #ðX#ð ˜RŸY™Y™ðX#ð    R§Y¡Y¡Ñ0õX#òt	1ð ‡Y�Y×Ñò
ó ð
ð ‡Y�Y×Ñò8ó ð8ð
 ‡Y�Y×Ñð §	¡	ò ó ðñ<¨Cð <¸hÀs¹mó <ð 8<ØØ$Ø$Ø',ñ3 à�|‰|ð3 ð ˜e C¨¨c© NÑ3Ñ4ð3 ð ð	3 ð
 ð3 ð ð3 ð !%ð3 ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó3 ðn ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	ò ñS¨$ó SörE   c                 óà   — d| v r| S |j                  «       }i }t        |j                  «       | j                  «       |j                  «       | j                  «       «      D ]  \  }}}}|||<   Œ |S )z$ Remap original checkpoints -> timm zhead.fc.weight)Ú
state_dictÚzipÚkeysÚvalues)rN  ÚmodelÚDÚout_dictÚkaÚkbÚvaÚvbs           rC   Úcheckpoint_filter_fnrY  È  sq   € à˜:Ñ%ØÐà×ÑÓ€AØ€Hä˜aŸf™f›h¨
¯©Ó(9¸1¿8¹8»:Àz×GXÑGXÓGZÓ[ò ‰ˆˆB��BØˆ�Šðð €OrE   c           	      óÈ   — t        d„ t        |j                  dd«      «      D «       «      }|j                  d|«      }t	        t
        | |ft        t        d|¬«      dœ|¤Ž}|S )Nc              3   ó&   K  — | ]	  \  }}|–— Œ y ­wr\   r  )Ú.0r  Ú_s      rC   ú	<genexpr>z"_create_nextvit.<locals>.<genexpr>×  s   è ø€ Ò\¡d a¨¤Ñ\ùs   ‚rù   )r   r   r!   r   Úout_indicesT)Úflatten_sequentialr_  )Úpretrained_filter_fnÚfeature_cfg)rÝ   rÛ   ÚgetÚpopr   r   rY  r  )ÚvariantÚ
pretrainedÚkwargsÚdefault_out_indicesr_  rR  s         rC   Ú_create_nextvitri  Ö  sl   € ÜÑ\¬i¸¿
¹
À8È\Ó8ZÓ.[Ô\Ó\ÐØ—*‘*˜]Ð,?Ó@€Kä ÜØØðô 2Ü¨D¸kÔJñð ñ€Eð €LrE   c                 ó2   — | dddddt         t        dddd	œ|¥S )
Nrí   )r!   éà   rk  )é   rl  gffffffî?Úbicubiczstem.0.convzhead.fcz
apache-2.0)Úurlrö   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanr   Ú
first_convÚ
classifierÚlicenser
   )rn  rg  s     rC   Ú_cfgrw  å  s3   € àØ¨=ÀvØ¨9Ü%Ô.BØ#°9Øñð ðð rE   ztimm/)Ú	hf_hub_id)r!   r  r  )é   ry  rÖ   )rx  ro  rp  rq  )znextvit_small.bd_in1kznextvit_base.bd_in1kznextvit_large.bd_in1kznextvit_small.bd_in1k_384znextvit_base.bd_in1k_384znextvit_large.bd_in1k_384znextvit_small.bd_ssld_6m_in1kznextvit_base.bd_ssld_6m_in1kznextvit_large.bd_ssld_6m_in1kz!nextvit_small.bd_ssld_6m_in1k_384z nextvit_base.bd_ssld_6m_in1k_384z!nextvit_large.bd_ssld_6m_in1k_384c           	      óP   — t        dd¬«      }t        	 dd| it        |fi |¤Ž¤Ž}|S )Nrð   rô   ©rù   rü   rf  )Únextvit_small©r  ri  ©rf  rg  Ú
model_argsrR  s       rC   r|  r|     ó=   € ä˜]¸3Ô?€JÜØñNØ$.ðNÜ26°zÑ2LÀVÑ2LñN€Eà€LrE   c           	      óP   — t        dd¬«      }t        	 dd| it        |fi |¤Ž¤Ž}|S )N)r!   rñ   é   r!   çš™™™™™É?r{  rf  )Únextvit_baser}  r~  s       rC   r„  r„  (  s=   € ä˜]¸3Ô?€JÜØñMØ#-ðMÜ15°jÑ1KÀFÑ1KñM€Eà€LrE   c           	      óP   — t        dd¬«      }t        	 dd| it        |fi |¤Ž¤Ž}|S )N)r!   rñ   é   r!   rƒ  r{  rf  )Únextvit_larger}  r~  s       rC   r‡  r‡  0  r€  rE   r\   rJ  )rB  )7r‚   Ú	functoolsr   Útypingr   r   r   r   r   r%   Útorch.nn.functionalr	   Ú
functionalrµ   Ú	timm.datar   r   Útimm.layersr   r   r   r   r   r   r   r   Ú_builderr   Ú	_featuresr   Ú_manipulater   r   Ú	_registryr   r   Ú__all__rD   rf   rG   ro   rq   rz   r„   rœ   rÄ   rÕ   r   rY  ri  rw  Údefault_cfgsr|  r„  r‡  r  rE   rC   ú<module>r”     s  ðñõ ß 5Õ 5ã ß Ð Ý ç A÷ C÷  Cñ  CÝ &Ý *Ý +ß 3ß <àˆ+€ó,ô^ �"—)‘)ô  óFô2�—‘ô 2ô:#�B—I‘Iô #ôJ<�B—I‘Iô <ô~F˜Ÿ™ô FôRf˜2Ÿ9™9ô fôRG�—	‘	ô GôTRˆb�i‰iô Ròjóó	ñ %Ù!Øôñ !Øôñ "Øôñ "&ØØ ¨H¸sô"ñ !%ØØ ¨H¸sô!ñ "&ØØ ¨H¸sô"ñ
 &*Øô&ñ %)Øô%ñ &*Øô&ñ *.ØØ ¨H¸sô*ñ )-ØØ ¨H¸sô)ñ *.ØØ ¨H¸sô*ñQ,&ó ,€ð^ òó ðð òó ðð òó ñrE   