§
    ù²Åj¡€  ã                   óÌ  — d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlZd dlZd dlmc mZ d dlmZmZ d dlmZmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
l m!Z! d dl"m#Z#m$Z$ d dl%m&Z& g d¢Z'dee(e(f         de(de(de(dee(e(f         f
d„Z)dee(e(f         de(deee(e(f                  fd„Z*de(de(dej        fd„Z+ G d„ dej,        ¦  «        Z- G d„ dej,        ¦  «        Z. G d„ dej,        ¦  «        Z/ G d„ d ej,        ¦  «        Z0 G d!„ d"ej,        ¦  «        Z1 G d#„ d$ej,        ¦  «        Z2 G d%„ d&ej,        ¦  «        Z3 G d'„ d(ej,        ¦  «        Z4 G d)„ d*ej,        ¦  «        Z5	 	 d=d,e(d-ee(         d.ee(         d/e6d0e(d1e(d2e	e         d3e7d4ede5fd5„Z8 G d6„ d7e¦  «        Z9 e¦   «          ed8e9j:        f¬9¦  «        dd:d;œd2e	e9         d3e7d4ede5fd<„¦   «         ¦   «         Z;dS )>é    N)ÚOrderedDict)Úpartial)ÚAnyÚCallableÚListÚOptionalÚSequenceÚTuple)ÚnnÚTensor)Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interface)ÚConv2dNormActivationÚSqueezeExcitation)ÚStochasticDepth)ÚImageClassificationÚInterpolationMode)Ú_log_api_usage_once)ÚMaxVitÚMaxVit_T_WeightsÚmaxvit_tÚ
input_sizeÚkernel_sizeÚstrideÚpaddingÚreturnc                 ó^   — | d         |z
  d|z  z   |z  dz   | d         |z
  d|z  z   |z  dz   fS )Nr   é   é   © )r   r   r   r   s       úJC:\Projects\Historical\venv\Lib\site-packages\torchvision/models/maxvit.pyÚ_get_conv_output_shaper&      sJ   € à	�AŒ˜Ñ	$ q¨7¡{Ñ	2°vÑ=ÀÑAØ	�AŒ˜Ñ	$ q¨7¡{Ñ	2°vÑ=ÀÑAðð ó    Ún_blocksc                 ó    — g }t          | ddd¦  «        }t          |¦  «        D ])}t          |ddd¦  «        }|                     |¦  «         Œ*|S )zQUtil function to check that the input size is correct for a MaxVit configuration.é   r"   r#   )r&   ÚrangeÚappend)r   r(   ÚshapesÚblock_input_shapeÚ_s        r%   Ú_make_block_input_shapesr0       s`   € à€FÝ.¨z¸1¸aÀÑCÔCÐÝ�8‰_Œ_ð )ð )ˆÝ2Ð3DÀaÈÈAÑNÔNÐØ�ŠÐ'Ñ(Ô(Ð(Ð(Ø€Mr'   ÚheightÚwidthc                 ó$  — t          j        t          j        t          j        | ¦  «        t          j        |¦  «        gd¬¦  «        ¦  «        }t          j        |d¦  «        }|d d …d d …d f         |d d …d d d …f         z
  }|                     ddd¦  «                             ¦   «         }|d d …d d …dfxx         | dz
  z  cc<   |d d …d d …dfxx         |dz
  z  cc<   |d d …d d …dfxx         d|z  dz
  z  cc<   |                     d¦  «        S )NÚij)Úindexingr#   r"   r   éÿÿÿÿ)ÚtorchÚstackÚmeshgridÚarangeÚflattenÚpermuteÚ
contiguousÚsum)r1   r2   ÚcoordsÚcoords_flatÚrelative_coordss        r%   Ú_get_relative_position_indexrB   *   s@  € ÝŒ[�œ­¬°fÑ)=Ô)=½u¼|ÈEÑ?RÔ?RÐ(SÐ^bÐcÑcÔcÑdÔd€FÝ”- ¨Ñ*Ô*€KØ! ! ! ! Q Q Q¨ *Ô-°¸A¸A¸A¸tÀQÀQÀQ¸JÔ0GÑG€OØ%×-Ò-¨a°°AÑ6Ô6×AÒAÑCÔC€OØ�A�A�A�q�q�q˜!�GÐÐÔ ¨¡
Ñ*ÐÐÑØ�A�A�A�q�q�q˜!�GÐÐÔ ¨¡	Ñ)ÐÐÑØ�A�A�A�q�q�q˜!�GÐÐÔ  E¡	¨A¡Ñ-ÐÐÑØ×Ò˜rÑ"Ô"Ð"r'   c                   ó�   ‡ — e Zd ZdZ	 ddedededededed	ej        f         d
ed	ej        f         deddfˆ fd„Z	de
de
fd„Zˆ xZS )ÚMBConva=  MBConv: Mobile Inverted Residual Bottleneck.

    Args:
        in_channels (int): Number of input channels.
        out_channels (int): Number of output channels.
        expansion_ratio (float): Expansion ratio in the bottleneck.
        squeeze_ratio (float): Squeeze ratio in the SE Layer.
        stride (int): Stride of the depthwise convolution.
        activation_layer (Callable[..., nn.Module]): Activation function.
        norm_layer (Callable[..., nn.Module]): Normalization function.
        p_stochastic_dropout (float): Probability of stochastic depth.
    ç        Úin_channelsÚout_channelsÚexpansion_ratioÚsqueeze_ratior   Úactivation_layer.Ú
norm_layerÚp_stochastic_dropoutr    Nc	                 ó(  •— t          ¦   «                              ¦   «          |  |dk    p||k    }	|	rOt          j        ||ddd¬¦  «        g}
|dk    rt          j        d|d¬¦  «        g|
z   }
t          j        |
Ž | _        nt          j        ¦   «         | _        t          ||z  ¦  «        }t          ||z  ¦  «        }|rt          |d¬¦  «        | _
        nt          j        ¦   «         | _
        t          ¦   «         } ||¦  «        |d	<   t          ||ddd
||d ¬¦  «        |d<   t          ||d|d|||d ¬¦	  «	        |d<   t          ||t          j        ¬¦  «        |d<   t          j        ||dd¬¦  «        |d<   t          j        |¦  «        | _        d S )Nr#   T)r   r   Úbiasr"   r*   ©r   r   r   Úrow©ÚmodeÚpre_normr   )r   r   r   rJ   rK   ÚinplaceÚconv_a)r   r   r   rJ   rK   ÚgroupsrT   Úconv_b)Ú
activationÚsqueeze_excitation)rF   rG   r   rN   Úconv_c)ÚsuperÚ__init__r   ÚConv2dÚ	AvgPool2dÚ
SequentialÚprojÚIdentityÚintr   Ústochastic_depthr   r   r   ÚSiLUÚlayers)ÚselfrF   rG   rH   rI   r   rJ   rK   rL   Úshould_projr`   Úmid_channelsÚsqz_channelsÚ_layersÚ	__class__s                 €r%   r\   zMBConv.__init__C   sÌ  ø€ õ 	‰Œ×ÒÑÔÐð 	Ðà ’kÐ@ [°LÒ%@ˆØð 	&Ý”I˜k¨<ÀQÈqÐW[Ð\Ñ\Ô\Ð]ˆDØ˜Š{ˆ{Ýœ°¸6È1ÐMÑMÔMÐNÐQUÑU�Ýœ tÐ,ˆDŒIˆIåœ™œˆDŒIå˜<¨/Ñ9Ñ:Ô:ˆÝ˜<¨-Ñ7Ñ8Ô8ˆàð 	2Ý$3Ð4HÈuÐ$UÑ$UÔ$UˆDÔ!Ð!å$&¤K¡M¤MˆDÔ!å‘-”-ˆØ(˜j¨Ñ5Ô5ˆ�
ÑÝ0ØØØØØØ-Ø!Øð	
ñ 	
ô 	
ˆ�Ñõ 1ØØØØØØ-Ø!ØØð

ñ 

ô 

ˆ�Ñõ ):¸,ÈÕacÔahÐ(iÑ(iÔ(iˆÐ$Ñ%ÝœI°,È\ÐghÐosÐtÑtÔtˆ�Ñå”m GÑ,Ô,ˆŒˆˆr'   Úxc                 ó†   — |                       |¦  «        }|                      |                      |¦  «        ¦  «        }||z   S )zÍ
        Args:
            x (Tensor): Input tensor with expected layout of [B, C, H, W].
        Returns:
            Tensor: Output tensor with expected layout of [B, C, H / stride, W / stride].
        )r`   rc   re   ©rf   rl   Úress      r%   ÚforwardzMBConv.forward€   s9   € ð �iŠi˜‰lŒlˆØ×!Ò! $§+¢+¨a¡.¤.Ñ1Ô1ˆØ�Q‰wˆr'   )rE   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rb   Úfloatr   r   ÚModuler\   r   rp   Ú__classcell__©rk   s   @r%   rD   rD   5   sâ   ø€ € € € € ðð ð, '*ð;-ð ;-àð;-ð ð;-ð ð	;-ð
 ð;-ð ð;-ð # 3¨¬	 >Ô2ð;-ð ˜S "¤)˜^Ô,ð;-ð $ð;-ð 
ð;-ð ;-ð ;-ð ;-ð ;-ð ;-ðz	˜ð 	 Fð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r'   rD   c                   óZ   ‡ — e Zd ZdZdedededdfˆ fd„Zdej        fd„Zd	edefd
„Z	ˆ xZ
S )Ú$RelativePositionalMultiHeadAttentionzÔRelative Positional Multi-Head Attention.

    Args:
        feat_dim (int): Number of input features.
        head_dim (int): Number of features per head.
        max_seq_len (int): Maximum sequence length.
    Úfeat_dimÚhead_dimÚmax_seq_lenr    Nc                 ó,  •— t          ¦   «                              ¦   «          ||z  dk    rt          d|› d|› �¦  «        ‚||z  | _        || _        t          t          j        |¦  «        ¦  «        | _        || _	        t          j        || j        | j        z  dz  ¦  «        | _        |dz  | _        t          j        | j        | j        z  |¦  «        | _        t          j                             t#          j        d| j        z  dz
  d| j        z  dz
  z  | j        ft"          j        ¬¦  «        ¦  «        | _        |                      d	t-          | j        | j        ¦  «        ¦  «         t"          j
        j                             | j        d
¬¦  «         d S )Nr   z
feat_dim: z  must be divisible by head_dim: r*   g      à¿r"   r#   )ÚdtypeÚrelative_position_indexç{®Gáz”?©Ústd)r[   r\   Ú
ValueErrorÚn_headsr|   rb   ÚmathÚsqrtÚsizer}   r   ÚLinearÚto_qkvÚscale_factorÚmergeÚ	parameterÚ	Parameterr7   ÚemptyÚfloat32Úrelative_position_bias_tableÚregister_bufferrB   ÚinitÚtrunc_normal_)rf   r{   r|   r}   rk   s       €r%   r\   z-RelativePositionalMultiHeadAttention.__init__•   sl  ø€ õ 	‰Œ×ÒÑÔÐà�hÑ !Ò#Ð#ÝÐ^¨(Ð^Ð^ÐT\Ð^Ð^Ñ_Ô_Ð_à 8Ñ+ˆŒØ ˆŒÝ�œ	 +Ñ.Ô.Ñ/Ô/ˆŒ	Ø&ˆÔå”i ¨$¬,¸¼Ñ*FÈÑ*JÑKÔKˆŒØ$ d™NˆÔå”Y˜tœ}¨t¬|Ñ;¸XÑFÔFˆŒ
Ý,.¬L×,BÒ,BÝŒK˜!˜dœi™-¨!Ñ+°°D´I±ÀÑ0AÑBÀDÄLÐQÕY^ÔYfÐgÑgÔgñ-
ô -
ˆÔ)ð 	×ÒÐ6Õ8TÐUYÔU^Ð`dÔ`iÑ8jÔ8jÑkÔkÐkåŒŒ×#Ò# DÔ$EÈ4Ð#ÑPÔPÐPÐPÐPr'   c                 ó
  — | j                              d¦  «        }| j        |                              | j        | j        d¦  «        }|                     ddd¦  «                             ¦   «         }|                     d¦  «        S )Nr6   r"   r   r#   )r€   Úviewr‘   r}   r<   r=   Ú	unsqueeze)rf   Ú
bias_indexÚrelative_biass      r%   Úget_relative_positional_biaszARelativePositionalMultiHeadAttention.get_relative_positional_bias±   sv   € ØÔ1×6Ò6°rÑ:Ô:ˆ
ØÔ9¸*ÔE×JÒJÈ4ÔK[Ð]aÔ]mÐoqÑrÔrˆØ%×-Ò-¨a°°AÑ6Ô6×AÒAÑCÔCˆØ×&Ò& qÑ)Ô)Ð)r'   rl   c                 ó  — |j         \  }}}}| j        | j        }}|                      |¦  «        }t	          j        |dd¬¦  «        \  }	}
}|	                     |||||¦  «                             ddddd¦  «        }	|
                     |||||¦  «                             ddddd¦  «        }
|                     |||||¦  «                             ddddd¦  «        }|
| j        z  }
t	          j	        d|	|
¦  «        }|  
                    ¦   «         }t          j        ||z   d¬¦  «        }t	          j	        d	||¦  «        }|                     ddddd¦  «                             ||||¦  «        }|                      |¦  «        }|S )
z»
        Args:
            x (Tensor): Input tensor with expected layout of [B, G, P, D].
        Returns:
            Tensor: Output tensor with expected layout of [B, G, P, D].
        r*   r6   )Údimr   r#   r"   é   z!B G H I D, B G H J D -> B G H I Jz!B G H I J, B G H J D -> B G H I D)Úshaper…   r|   rŠ   r7   ÚchunkÚreshaper<   r‹   Úeinsumrš   ÚFÚsoftmaxrŒ   )rf   rl   ÚBÚGÚPÚDÚHÚDHÚqkvÚqÚkÚvÚdot_prodÚpos_biasÚouts                  r%   rp   z,RelativePositionalMultiHeadAttention.forward·   sx  € ð ”W‰
ˆˆ1ˆa�Ø”˜dœmˆ2ˆà�kŠk˜!‰nŒnˆÝ”+˜c 1¨"Ð-Ñ-Ô-‰ˆˆ1ˆaà�IŠI�a˜˜A˜q "Ñ%Ô%×-Ò-¨a°°A°q¸!Ñ<Ô<ˆØ�IŠI�a˜˜A˜q "Ñ%Ô%×-Ò-¨a°°A°q¸!Ñ<Ô<ˆØ�IŠI�a˜˜A˜q "Ñ%Ô%×-Ò-¨a°°A°q¸!Ñ<Ô<ˆà�Ô!Ñ!ˆÝ”<Ð CÀQÈÑJÔJˆØ×4Ò4Ñ6Ô6ˆå”9˜X¨Ñ0°bÐ9Ñ9Ô9ˆåŒlÐ>ÀÈ!ÑLÔLˆØ�kŠk˜!˜Q  1 aÑ(Ô(×0Ò0°°A°q¸!Ñ<Ô<ˆà�jŠj˜‰oŒoˆØˆ
r'   )rq   rr   rs   rt   rb   r\   r7   r   rš   rp   rw   rx   s   @r%   rz   rz   Œ   s¶   ø€ € € € € ðð ðQàðQð ðQð ð	Qð
 
ðQð Qð Qð Qð Qð Qð8*¨e¬lð *ð *ð *ð *ð˜ð  Fð ð ð ð ð ð ð ð r'   rz   c                   óT   ‡ — e Zd ZdZdededdfˆ fd„Zdej        dej        fd„Zˆ xZ	S )	ÚSwapAxeszPermute the axes of a tensor.ÚaÚbr    Nc                 ód   •— t          ¦   «                              ¦   «          || _        || _        d S ©N)r[   r\   r³   r´   )rf   r³   r´   rk   s      €r%   r\   zSwapAxes.__init__Ø   s+   ø€ Ý‰Œ×ÒÑÔÐØˆŒØˆŒˆˆr'   rl   c                 óF   — t          j        || j        | j        ¦  «        }|S r¶   )r7   Úswapaxesr³   r´   rn   s      r%   rp   zSwapAxes.forwardÝ   s   € ÝŒn˜Q ¤¨¬Ñ/Ô/ˆØˆ
r'   )
rq   rr   rs   rt   rb   r\   r7   r   rp   rw   rx   s   @r%   r²   r²   Õ   s~   ø€ € € € € Ø'Ð'ð˜#ð  #ð ¨$ð ð ð ð ð ð ð
˜œð ¨%¬,ð ð ð ð ð ð ð ð r'   r²   c                   ó8   ‡ — e Zd ZdZdˆ fd„Zdededefd„Zˆ xZS )	ÚWindowPartitionzB
    Partition the input tensor into non-overlapping windows.
    r    Nc                 óH   •— t          ¦   «                              ¦   «          d S r¶   ©r[   r\   ©rf   rk   s    €r%   r\   zWindowPartition.__init__ç   ó   ø€ Ý‰Œ×ÒÑÔÐÐÐr'   rl   Úpc                 óÞ   — |j         \  }}}}|}|                     ||||z  |||z  |¦  «        }|                     dddddd¦  «        }|                     |||z  ||z  z  ||z  |¦  «        }|S )zï
        Args:
            x (Tensor): Input tensor with expected layout of [B, C, H, W].
            p (int): Number of partitions.
        Returns:
            Tensor: Output tensor with expected layout of [B, H/P, W/P, P*P, C].
        r   r"   r�   r*   é   r#   ©rž   r    r<   )rf   rl   r¿   r¤   ÚCr¨   ÚWr¦   s           r%   rp   zWindowPartition.forwardê   sƒ   € ð ”W‰
ˆˆ1ˆa�Øˆà�IŠI�a˜˜A ™F A q¨A¡v¨qÑ1Ô1ˆØ�IŠI�a˜˜A˜q ! QÑ'Ô'ˆà�IŠI�a˜!˜q™& Q¨!¡VÑ,¨a°!©e°QÑ7Ô7ˆØˆr'   ©r    N©	rq   rr   rs   rt   r\   r   rb   rp   rw   rx   s   @r%   rº   rº   â   sp   ø€ € € € € ðð ðð ð ð ð ð ð˜ð  Cð ¨Fð ð ð ð ð ð ð ð r'   rº   c            
       ó@   ‡ — e Zd ZdZd
ˆ fd„Zdededededef
d	„Zˆ xZS )ÚWindowDepartitionzo
    Departition the input tensor of non-overlapping windows into a feature volume of layout [B, C, H, W].
    r    Nc                 óH   •— t          ¦   «                              ¦   «          d S r¶   r¼   r½   s    €r%   r\   zWindowDepartition.__init__  r¾   r'   rl   r¿   Úh_partitionsÚw_partitionsc                 óÎ   — |j         \  }}}}|}	||}}
|                     ||
||	|	|¦  «        }|                     dddddd¦  «        }|                     |||
|	z  ||	z  ¦  «        }|S )ar  
        Args:
            x (Tensor): Input tensor with expected layout of [B, (H/P * W/P), P*P, C].
            p (int): Number of partitions.
            h_partitions (int): Number of vertical partitions.
            w_partitions (int): Number of horizontal partitions.
        Returns:
            Tensor: Output tensor with expected layout of [B, C, H, W].
        r   rÁ   r#   r*   r"   r�   rÂ   )rf   rl   r¿   rÊ   rË   r¤   r¥   ÚPPrÃ   r¦   ÚHPÚWPs               r%   rp   zWindowDepartition.forward  s{   € ð ”g‰ˆˆ1ˆb�!ØˆØ˜|ˆBˆà�IŠI�a˜˜R  A qÑ)Ô)ˆà�IŠI�a˜˜A˜q ! QÑ'Ô'ˆà�IŠI�a˜˜B ™F B¨¡FÑ+Ô+ˆØˆr'   rÅ   rÆ   rx   s   @r%   rÈ   rÈ   ü   s   ø€ € € € € ðð ðð ð ð ð ð ð˜ð  Cð °sð È#ð ÐRXð ð ð ð ð ð ð ð r'   rÈ   c                   ó¨   ‡ — e Zd ZdZdededededeeef         deded	ej	        f         d
ed	ej	        f         de
de
de
ddfˆ fd„Zdedefd„Zˆ xZS )ÚPartitionAttentionLayera®  
    Layer for partitioning the input tensor into non-overlapping windows and applying attention to each window.

    Args:
        in_channels (int): Number of input channels.
        head_dim (int): Dimension of each attention head.
        partition_size (int): Size of the partitions.
        partition_type (str): Type of partitioning to use. Can be either "grid" or "window".
        grid_size (Tuple[int, int]): Size of the grid to partition the input tensor into.
        mlp_ratio (int): Ratio of the  feature size expansion in the MLP layer.
        activation_layer (Callable[..., nn.Module]): Activation function to use.
        norm_layer (Callable[..., nn.Module]): Normalization function to use.
        attention_dropout (float): Dropout probability for the attention layer.
        mlp_dropout (float): Dropout probability for the MLP layer.
        p_stochastic_dropout (float): Probability of dropping out a partition.
    rF   r|   Úpartition_sizeÚpartition_typeÚ	grid_sizeÚ	mlp_ratiorJ   .rK   Úattention_dropoutÚmlp_dropoutrL   r    Nc           	      óÔ  •— t          ¦   «                              ¦   «          ||z  | _        || _        |d         |z  | _        || _        || _        |dvrt          d¦  «        ‚|dk    r|| j        c| _        | _	        n| j        |c| _        | _	        t          ¦   «         | _        t          ¦   «         | _        |dk    rt          dd¦  «        nt          j        ¦   «         | _        |dk    rt          dd¦  «        nt          j        ¦   «         | _        t          j         ||¦  «        t)          |||dz  ¦  «        t          j        |	¦  «        ¦  «        | _        t          j        t          j        |¦  «        t          j        |||z  ¦  «         |¦   «         t          j        ||z  |¦  «        t          j        |
¦  «        ¦  «        | _        t5          |d	¬
¦  «        | _        d S )Nr   )ÚgridÚwindowz0partition_type must be either 'grid' or 'window'rÚ   rÙ   éþÿÿÿéýÿÿÿr"   rP   rQ   )r[   r\   r…   r|   Ún_partitionsrÓ   rÔ   r„   r¿   Úgrº   Úpartition_oprÈ   Údepartition_opr²   r   ra   Úpartition_swapÚdepartition_swapr_   rz   ÚDropoutÚ
attn_layerÚ	LayerNormr‰   Ú	mlp_layerr   Ústochastic_dropout)rf   rF   r|   rÒ   rÓ   rÔ   rÕ   rJ   rK   rÖ   r×   rL   rk   s               €r%   r\   z PartitionAttentionLayer.__init__,  sÒ  ø€ õ" 	‰Œ×ÒÑÔÐà" hÑ.ˆŒØ ˆŒØ% aœL¨NÑ:ˆÔØ,ˆÔØ"ˆŒàÐ!3Ð3Ð3ÝÐOÑPÔPÐPà˜XÒ%Ð%Ø+¨TÔ->ˆNˆDŒF�D”F�Fà!Ô.°ˆNˆDŒF�D”Få+Ñ-Ô-ˆÔÝ/Ñ1Ô1ˆÔØ2@ÀFÒ2JÐ2J�h r¨2Ñ.Ô.Ð.ÕPRÔP[ÑP]ÔP]ˆÔØ4BÀfÒ4LÐ4L¥¨¨RÑ 0Ô 0Ð 0ÕRTÔR]ÑR_ÔR_ˆÔåœ-ØˆJ�{Ñ#Ô#õ 1°¸hÈÐXYÑHYÑZÔZÝŒJÐ(Ñ)Ô)ñ
ô 
ˆŒõ œÝŒL˜Ñ%Ô%ÝŒI�k ;°Ñ#:Ñ;Ô;ØÐÑÔÝŒI�k IÑ-¨{Ñ;Ô;ÝŒJ�{Ñ#Ô#ñ
ô 
ˆŒõ #2Ð2FÈUÐ"SÑ"SÔ"SˆÔÐÐr'   rl   c                 ó�  — | j         d         | j        z  | j         d         | j        z  }}t          j        | j         d         | j        z  dk    o| j         d         | j        z  dk    d                     | j         | j        ¦  «        ¦  «         |                      || j        ¦  «        }|                      |¦  «        }||                      |                      |¦  «        ¦  «        z   }||                      |  	                    |¦  «        ¦  «        z   }|  
                    |¦  «        }|                      || j        ||¦  «        }|S )z»
        Args:
            x (Tensor): Input tensor with expected layout of [B, C, H, W].
        Returns:
            Tensor: Output tensor with expected layout of [B, C, H, W].
        r   r#   z[Grid size must be divisible by partition size. Got grid size of {} and partition size of {})rÔ   r¿   r7   Ú_assertÚformatrß   rá   rç   rä   ræ   râ   rà   )rf   rl   ÚghÚgws       r%   rp   zPartitionAttentionLayer.forwardf  s.  € ð ” Ô" d¤fÑ,¨d¬n¸QÔ.?À4Ä6Ñ.IˆBˆÝŒØŒN˜1Ô ¤Ñ&¨!Ò+ÐO°´¸qÔ0AÀDÄFÑ0JÈaÒ0OØi×pÒpØ” ¤ñô ñ	
ô 	
ð 	
ð ×Ò˜a ¤Ñ(Ô(ˆØ×Ò Ñ"Ô"ˆØ�×'Ò'¨¯ª¸Ñ(:Ô(:Ñ;Ô;Ñ;ˆØ�×'Ò'¨¯ª°qÑ(9Ô(9Ñ:Ô:Ñ:ˆØ×!Ò! !Ñ$Ô$ˆØ×Ò  4¤6¨2¨rÑ2Ô2ˆàˆr'   )rq   rr   rs   rt   rb   Ústrr
   r   r   rv   ru   r\   r   rp   rw   rx   s   @r%   rÑ   rÑ     s  ø€ € € € € ðð ð"8Tàð8Tð ð8Tð
 ð8Tð ð8Tð ˜˜c˜”?ð8Tð ð8Tð # 3¨¬	 >Ô2ð8Tð ˜S "¤)˜^Ô,ð8Tð !ð8Tð ð8Tð $ð8Tð  
ð!8Tð 8Tð 8Tð 8Tð 8Tð 8Tðt˜ð  Fð ð ð ð ð ð ð ð r'   rÑ   c                   ó´   ‡ — e Zd ZdZdededededededej        f         d	edej        f         d
edededededede	eef         ddfˆ fd„Z
dedefd„Zˆ xZS )ÚMaxVitLayera  
    MaxVit layer consisting of a MBConv layer followed by a PartitionAttentionLayer with `window` and a PartitionAttentionLayer with `grid`.

    Args:
        in_channels (int): Number of input channels.
        out_channels (int): Number of output channels.
        expansion_ratio (float): Expansion ratio in the bottleneck.
        squeeze_ratio (float): Squeeze ratio in the SE Layer.
        stride (int): Stride of the depthwise convolution.
        activation_layer (Callable[..., nn.Module]): Activation function.
        norm_layer (Callable[..., nn.Module]): Normalization function.
        head_dim (int): Dimension of the attention heads.
        mlp_ratio (int): Ratio of the MLP layer.
        mlp_dropout (float): Dropout probability for the MLP layer.
        attention_dropout (float): Dropout probability for the attention layer.
        p_stochastic_dropout (float): Probability of stochastic depth.
        partition_size (int): Size of the partitions.
        grid_size (Tuple[int, int]): Size of the input feature grid.
    rF   rG   rI   rH   r   rK   .rJ   r|   rÕ   r×   rÖ   rL   rÒ   rÔ   r    Nc                 óf  •— t          ¦   «                              ¦   «          t          ¦   «         }t          ||||||||¬¦  «        |d<   t	          |||d||	|t
          j        ||
|¬¦  «        |d<   t	          |||d||	|t
          j        ||
|¬¦  «        |d<   t          j        |¦  «        | _        d S )N)rF   rG   rH   rI   r   rJ   rK   rL   ÚMBconvrÚ   )rF   r|   rÒ   rÓ   rÔ   rÕ   rJ   rK   rÖ   r×   rL   Úwindow_attentionrÙ   Úgrid_attention)	r[   r\   r   rD   rÑ   r   rå   r_   re   )rf   rF   rG   rI   rH   r   rK   rJ   r|   rÕ   r×   rÖ   rL   rÒ   rÔ   re   rk   s                   €r%   r\   zMaxVitLayer.__init__—  sì   ø€ õ* 	‰Œ×ÒÑÔÐå)™mœmˆõ "Ø#Ø%Ø+Ø'ØØ-Ø!Ø!5ð	
ñ 	
ô 	
ˆˆxÑõ &=Ø$ØØ)Ø#ØØØ-Ý”|Ø/Ø#Ø!5ð&
ñ &
ô &
ˆÐ!Ñ"õ $;Ø$ØØ)Ø!ØØØ-Ý”|Ø/Ø#Ø!5ð$
ñ $
ô $
ˆÐÑ õ ”m FÑ+Ô+ˆŒˆˆr'   rl   c                 ó0   — |                       |¦  «        }|S ©z�
        Args:
            x (Tensor): Input tensor of shape (B, C, H, W).
        Returns:
            Tensor: Output tensor of shape (B, C, H, W).
        ©re   )rf   rl   s     r%   rp   zMaxVitLayer.forwardØ  s   € ð �KŠK˜‰NŒNˆØˆr'   )rq   rr   rs   rt   rb   ru   r   r   rv   r
   r\   r   rp   rw   rx   s   @r%   rï   rï   ‚  s  ø€ € € € € ðð ð(?,ð ð?,ð ð	?,ð
 ð?,ð ð?,ð ð?,ð ˜S "¤)˜^Ô,ð?,ð # 3¨¬	 >Ô2ð?,ð ð?,ð ð?,ð ð?,ð !ð?,ð  $ð!?,ð$ ð%?,ð& ˜˜c˜”?ð'?,ð( 
ð)?,ð ?,ð ?,ð ?,ð ?,ð ?,ðB˜ð  Fð ð ð ð ð ð ð ð r'   rï   c                   óÀ   ‡ — e Zd ZdZdedededededej        f         dedej        f         d	ed
edededede	eef         dede
e         ddfˆ fd„Zdedefd„Zˆ xZS )ÚMaxVitBlocka(  
    A MaxVit block consisting of `n_layers` MaxVit layers.

     Args:
        in_channels (int): Number of input channels.
        out_channels (int): Number of output channels.
        expansion_ratio (float): Expansion ratio in the bottleneck.
        squeeze_ratio (float): Squeeze ratio in the SE Layer.
        activation_layer (Callable[..., nn.Module]): Activation function.
        norm_layer (Callable[..., nn.Module]): Normalization function.
        head_dim (int): Dimension of the attention heads.
        mlp_ratio (int): Ratio of the MLP layer.
        mlp_dropout (float): Dropout probability for the MLP layer.
        attention_dropout (float): Dropout probability for the attention layer.
        p_stochastic_dropout (float): Probability of stochastic depth.
        partition_size (int): Size of the partitions.
        input_grid_size (Tuple[int, int]): Size of the input feature grid.
        n_layers (int): Number of layers in the block.
        p_stochastic (List[float]): List of probabilities for stochastic depth for each layer.
    rF   rG   rI   rH   rK   .rJ   r|   rÕ   r×   rÖ   rÒ   Úinput_grid_sizeÚn_layersÚp_stochasticr    Nc                 óª  •— t          ¦   «                              ¦   «          t          |¦  «        |k    st          d|› d|› d�¦  «        ‚t	          j        ¦   «         | _        t          |ddd¬¦  «        | _        t          |¦  «        D ]H\  }}|dk    rdnd}| xj        t          |dk    r|n||||||||||	|
|| j        |¬	¦  «        gz  c_        ŒId S )
Nz'p_stochastic must have length n_layers=z, got p_stochastic=ú.r*   r"   r#   rO   r   )rF   rG   rI   rH   r   rK   rJ   r|   rÕ   r×   rÖ   rÒ   rÔ   rL   )r[   r\   Úlenr„   r   Ú
ModuleListre   r&   rÔ   Ú	enumeraterï   )rf   rF   rG   rI   rH   rK   rJ   r|   rÕ   r×   rÖ   rÒ   rù   rú   rû   Úidxr¿   r   rk   s                     €r%   r\   zMaxVitBlock.__init__ù  s  ø€ õ, 	‰Œ×ÒÑÔÐÝ�<Ñ Ô  HÒ,Ð,ÝÐsÀxÐsÐsÐdpÐsÐsÐsÑtÔtÐtå”m‘o”oˆŒå/°ÈQÐWXÐbcÐdÑdÔdˆŒå Ñ-Ô-ð 	ð 	‰FˆC�Ø š(˜(�Q�Q¨ˆFØˆKŒKÝØ/2°aªx¨x  ¸\Ø!-Ø"/Ø$3Ø!Ø)Ø%5Ø%Ø'Ø +Ø&7Ø#1Ø"œnØ)*ðñ ô ðñ ˆKŒKˆKð	ð 	r'   rl   c                 ó0   — | j         D ]} ||¦  «        }Œ|S rõ   rö   )rf   rl   Úlayers      r%   rp   zMaxVitBlock.forward,  s)   € ð ”[ð 	ð 	ˆEØ��a‘”ˆAˆAØˆr'   )rq   rr   rs   rt   rb   ru   r   r   rv   r
   r   r\   r   rp   rw   rx   s   @r%   rø   rø   ã  s"  ø€ € € € € ðð ð*1ð ð1ð ð	1ð
 ð1ð ð1ð ˜S "¤)˜^Ô,ð1ð # 3¨¬	 >Ô2ð1ð ð1ð ð1ð ð1ð !ð1ð  ð!1ð" ˜s C˜xœð#1ð& ð'1ð( ˜5”kð)1ð* 
ð+1ð 1ð 1ð 1ð 1ð 1ðf	˜ð 	 Fð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r'   rø   c            !       óþ   ‡ — e Zd ZdZdej        ddddddfdeeef         ded	ed
ee         dee         dede	de
edej        f                  dedej        f         de	de	dede	de	deddf ˆ fd„Zdedefd„Zd„ Zˆ xZS )r   ay  
    Implements MaxVit Transformer from the `MaxViT: Multi-Axis Vision Transformer <https://arxiv.org/abs/2204.01697>`_ paper.
    Args:
        input_size (Tuple[int, int]): Size of the input image.
        stem_channels (int): Number of channels in the stem.
        partition_size (int): Size of the partitions.
        block_channels (List[int]): Number of channels in each block.
        block_layers (List[int]): Number of layers in each block.
        stochastic_depth_prob (float): Probability of stochastic depth. Expands to a list of probabilities for each layer that scales linearly to the specified value.
        squeeze_ratio (float): Squeeze ratio in the SE Layer. Default: 0.25.
        expansion_ratio (float): Expansion ratio in the MBConv bottleneck. Default: 4.
        norm_layer (Callable[..., nn.Module]): Normalization function. Default: None (setting to None will produce a `BatchNorm2d(eps=1e-3, momentum=0.01)`).
        activation_layer (Callable[..., nn.Module]): Activation function Default: nn.GELU.
        head_dim (int): Dimension of the attention heads.
        mlp_ratio (int): Expansion ratio of the MLP layer. Default: 4.
        mlp_dropout (float): Dropout probability for the MLP layer. Default: 0.0.
        attention_dropout (float): Dropout probability for the attention layer. Default: 0.0.
        num_classes (int): Number of classes. Default: 1000.
    Ng      Ð?r�   rE   iè  r   Ústem_channelsrÒ   Úblock_channelsÚblock_layersr|   Ústochastic_depth_probrK   .rJ   rI   rH   rÕ   r×   rÖ   Únum_classesr    c                 óD  •— t          ¦   «                              ¦   «          t          | ¦  «         d}|€t          t          j        dd¬¦  «        }t          |t          |¦  «        ¦  «        }t          |¦  «        D ]?\  }}|d         |z  dk    s|d         |z  dk    rt          d|› d|› d	|› d
|› d�	¦  «        ‚Œ@t	          j
        t          ||dd||	dd ¬¦  «        t          ||ddd d d¬¦  «        ¦  «        | _        t          |ddd¬¦  «        }|| _        t	          j        ¦   «         | _        |g|d d…         z   }|}t#          j        d|t'          |¦  «        ¦  «                             ¦   «         }d}t+          |||¦  «        D ]]\  }}}| j                             t/          |||
|||	|||||||||||z   …         ¬¦  «        ¦  «         | j        d         j        }||z  }Œ^t	          j
        t	          j        d¦  «        t	          j        ¦   «         t	          j        |d         ¦  «        t	          j        |d         |d         ¦  «        t	          j        ¦   «         t	          j        |d         |d¬¦  «        ¦  «        | _        |                      ¦   «          d S )Nr*   gü©ñÒMbP?g{®Gáz„?)ÚepsÚmomentumr   r#   zInput size z
 of block z$ is not divisible by partition size zx. Consider changing the partition size or the input size.
Current configuration yields the following block input sizes: rý   r"   F)r   rK   rJ   rN   rT   T)r   rK   rJ   rN   rO   r6   )rF   rG   rI   rH   rK   rJ   r|   rÕ   r×   rÖ   rÒ   rù   rú   rû   )rN   ) r[   r\   r   r   r   ÚBatchNorm2dr0   rþ   r   r„   r_   r   Ústemr&   rÒ   rÿ   ÚblocksÚnpÚlinspacer>   ÚtolistÚzipr,   rø   rÔ   ÚAdaptiveAvgPool2dÚFlattenrå   r‰   ÚTanhÚ
classifierÚ_init_weights)rf   r   r  rÒ   r  r  r|   r  rK   rJ   rI   rH   rÕ   r×   rÖ   r	  Úinput_channelsÚblock_input_sizesr  Úblock_input_sizerF   rG   rû   Úp_idxÚ
in_channelÚout_channelÚ
num_layersrk   s                              €r%   r\   zMaxVit.__init__M  s#  ø€ õ: 	‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!àˆð ÐÝ ¥¤°TÀDÐIÑIÔIˆJõ
 5°ZÅÀ^ÑATÔATÑUÔUÐÝ%.Ð/@Ñ%AÔ%Að 	ð 	Ñ!ˆCÐ!Ø Ô" ^Ñ3°qÒ8Ð8Ð<LÈQÔ<OÐR`Ñ<`ÐdeÒ<eÐ<eÝ ðjÐ"2ð jð j¸cð jð jÐguð jð jàUfðjð jð jñô ð ð =fõ ”MÝ ØØØØØ%Ø!1ØØð	ñ 	ô 	õ !Ø˜}¨a¸ÀdÐ]aÐhlðñ ô ñ
ô 
ˆŒ	õ" ,¨JÀAÈaÐYZÐ[Ñ[Ô[ˆ
Ø,ˆÔõ ”m‘o”oˆŒØ$�o¨°s¸°sÔ(;Ñ;ˆØ%ˆõ
 ”{ 1Ð&;½SÀÑ=NÔ=NÑOÔO×VÒVÑXÔXˆàˆÝ36°{ÀLÐR^Ñ3_Ô3_ð 	 ð 	 Ñ/ˆJ˜ ZØŒK×ÒÝØ *Ø!,Ø"/Ø$3Ø)Ø%5Ø%Ø'Ø +Ø&7Ø#1Ø$.Ø'Ø!-¨e°e¸jÑ6HÐ.HÔ!Iðñ ô ñô ð ð$ œ RœÔ2ˆJØ�ZÑˆEˆEõ œ-ÝÔ  Ñ#Ô#ÝŒJ‰LŒLÝŒL˜¨Ô+Ñ,Ô,ÝŒI�n RÔ(¨.¸Ô*<Ñ=Ô=ÝŒG‰IŒIÝŒI�n RÔ(¨+¸EÐBÑBÔBñ
ô 
ˆŒð 	×ÒÑÔÐÐÐr'   rl   c                 ó„   — |                       |¦  «        }| j        D ]} ||¦  «        }Œ|                      |¦  «        }|S r¶   )r  r  r  )rf   rl   Úblocks      r%   rp   zMaxVit.forwardÃ  sG   € Ø�IŠI�a‰LŒLˆØ”[ð 	ð 	ˆEØ��a‘”ˆAˆAØ�OŠO˜AÑÔˆØˆr'   c                 ó°  — |                       ¦   «         D �]?}t          |t          j        ¦  «        rRt          j                             |j        d¬¦  «         |j        �$t          j                             |j        ¦  «         Œot          |t          j	        ¦  «        rKt          j         
                    |j        d¦  «         t          j         
                    |j        d¦  «         ŒÔt          |t          j        ¦  «        rQt          j                             |j        d¬¦  «         |j        �$t          j                             |j        ¦  «         �ŒAd S )Nr�   r‚   r#   r   )ÚmodulesÚ
isinstancer   r]   r“   Únormal_ÚweightrN   Úzeros_r  Ú	constant_r‰   )rf   Úms     r%   r  zMaxVit._init_weightsÊ  s  € Ø—’‘”ð 	+ñ 	+ˆAÝ˜!�RœYÑ'Ô'ð 
+Ý”—’ ¤¨d�Ñ3Ô3Ð3Ø”6Ð%Ý”G—N’N 1¤6Ñ*Ô*Ð*øÝ˜A�rœ~Ñ.Ô.ð +Ý”×!Ò! !¤(¨AÑ.Ô.Ð.Ý”×!Ò! !¤&¨!Ñ,Ô,Ð,Ð,Ý˜A�rœyÑ)Ô)ð +Ý”—’ ¤¨d�Ñ3Ô3Ð3Ø”6Ð%Ý”G—N’N 1¤6Ñ*Ô*Ð*ùð	+ð 	+r'   )rq   rr   rs   rt   r   ÚGELUr
   rb   r   ru   r   r   rv   r\   r   rp   r  rw   rx   s   @r%   r   r   8  s}  ø€ € € € € ðð ðJ :>Ø57´Wà#Ø!"àØ Ø#&àð7tð tð ˜#˜s˜(”Oðtð
 ðtð ðtð ˜Sœ	ðtð ˜3”iðtð ðtð  %ðtð" ˜X c¨2¬9 nÔ5Ô6ð#tð$ # 3¨¬	 >Ô2ð%tð( ð)tð* ð+tð. ð/tð0 ð1tð2 !ð3tð6 ð7tð8 
ð9tð tð tð tð tð tðl˜ð  Fð ð ð ð ð+ð +ð +ð +ð +ð +ð +r'   r   Fr  r  r  r  rÒ   r|   ÚweightsÚprogressÚkwargsc                 ó”  — |�ot          |dt          |j        d         ¦  «        ¦  «         |j        d         d         |j        d         d         k    sJ ‚t          |d|j        d         ¦  «         |                     dd¦  «        }	t	          d| ||||||	dœ|¤Ž}
|�*|
                     |                     |d	¬
¦  «        ¦  «         |
S )Nr	  Ú
categoriesÚmin_sizer   r#   r   ©éà   r2  )r  r  r  r  r|   rÒ   r   T)r,  Ú
check_hashr$   )r   rþ   ÚmetaÚpopr   Úload_state_dictÚget_state_dict)r  r  r  r  rÒ   r|   r+  r,  r-  r   Úmodels              r%   Ú_maxvitr9  Ù  sí   € ð$ ÐÝ˜f mµS¸¼ÀlÔ9SÑ5TÔ5TÑUÔUÐUØŒ|˜JÔ'¨Ô*¨g¬l¸:Ô.FÀqÔ.IÒIÐIÐIÐIÝ˜f l°G´LÀÔ4LÑMÔMÐMà—’˜L¨*Ñ5Ô5€Jåð 	Ø#Ø%Ø!Ø3ØØ%Øð	ð 	ð ð	ð 	€Eð ÐØ×Ò˜g×4Ò4¸hÐSWÐ4ÑXÔXÑYÔYÐYà€Lr'   c                   ón   — e Zd Z ed eeddej        ¬¦  «        edddddd	d
œiddddœ¬¦  «        Z	e	Z
dS )r   z9https://download.pytorch.org/models/maxvit_t-bc5ab103.pthr2  )Ú	crop_sizeÚresize_sizeÚinterpolationiÈË×r1  zLhttps://github.com/pytorch/vision/tree/main/references/classification#maxvitzImageNet-1KgÍÌÌÌÌìT@g‘í|?5.X@)zacc@1zacc@5g¬Zd;@gð§ÆK7±]@z½These weights reproduce closely the results of the paper using a similar training recipe.
            They were trained with a BatchNorm2D momentum of 0.99 instead of the more correct 0.01.)r/  Ú
num_paramsr0  ÚrecipeÚ_metricsÚ_opsÚ
_file_sizeÚ_docs)ÚurlÚ
transformsr4  N)rq   rr   rs   r   r   r   r   ÚBICUBICr   ÚIMAGENET1K_V1ÚDEFAULTr$   r'   r%   r   r     s�   € € € € € Ø�GàGØ�7Ø¨3¸CÐO`ÔOhð
ñ 
ô 
ð /Ø"Ø"ØdàØ#Ø#ð ð  ðð Ø!ðgð
ð 
ðñ ô €Mð. €G€G€Gr'   r   Ú
pretrained)r+  T)r+  r,  c                 óh   — t                                | ¦  «        } t          ddg d¢g d¢ddd| |dœ|¤ŽS )	aŠ  
    Constructs a maxvit_t architecture from
    `MaxViT: Multi-Axis Vision Transformer <https://arxiv.org/abs/2204.01697>`_.

    Args:
        weights (:class:`~torchvision.models.MaxVit_T_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.MaxVit_T_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.maxvit.MaxVit``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/maxvit.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.MaxVit_T_Weights
        :members:
    é@   )rK  é€   é   i   )r"   r"   rÁ   r"   é    gš™™™™™É?é   )r  r  r  r|   r  rÒ   r+  r,  r$   )r   Úverifyr9  )r+  r,  r-  s      r%   r   r     s_   € õ. ×%Ò% gÑ.Ô.€Gåð 
ØØ*Ð*Ð*Ø!�\�\ØØ!ØØØð
ð 
ð ð
ð 
ð 
r'   )NF)<r†   Úcollectionsr   Ú	functoolsr   Útypingr   r   r   r   r	   r
   Únumpyr  r7   Útorch.nn.functionalr   Ú
functionalr¢   r   Útorchvision.models._apir   r   r   Útorchvision.models._metar   Útorchvision.models._utilsr   r   Útorchvision.ops.miscr   r   Ú torchvision.ops.stochastic_depthr   Útorchvision.transforms._presetsr   r   Útorchvision.utilsr   Ú__all__rb   r&   r0   rB   rv   rD   rz   r²   rº   rÈ   rÑ   rï   rø   r   ru   Úboolr9  r   rG  r   r$   r'   r%   ú<module>r`     s  ðØ €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aà Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TØ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ <Ð <Ð <Ð <Ð <Ð <Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð €ð u¨S°#¨X¤ð ÀSð ÐRUð Ð`cð ÐhmÐnqÐsvÐnvÔhwð ð ð ð ð¨¨s°C¨x¬ð ÀCð ÈDÐQVÐWZÐ\_ÐW_ÔQ`ÔLað ð ð ð ð#¨ð #°Sð #¸U¼\ð #ð #ð #ð #ðTð Tð Tð Tð TˆRŒYñ Tô Tð TðnFð Fð Fð Fð F¨2¬9ñ Fô Fð FðR
ð 
ð 
ð 
ð 
ˆrŒyñ 
ô 
ð 
ðð ð ð ð �b”iñ ô ð ð4ð ð ð ð ˜œ	ñ ô ð ð<eð eð eð eð e˜bœiñ eô eð eðP^ð ^ð ^ð ^ð ^�"”)ñ ^ô ^ð ^ðBRð Rð Rð Rð R�"”)ñ Rô Rð Rðj^+ð ^+ð ^+ð ^+ð ^+ˆRŒYñ ^+ô ^+ð ^+ðZ &*Øð'ð 'àð'ð ˜”Ið	'ð
 �s”)ð'ð !ð'ð ð'ð ð'ð �kÔ"ð'ð ð'ð ð'ð  ð!'ð 'ð 'ð 'ðTð ð ð ð �{ñ ô ð ð6 €ÑÔØÐ ,Ð0@Ô0NÐ!OÐPÑPÔPØ6:ÈTð !ð !ð !˜Ð"2Ô3ð !Àdð !Ð]`ð !Ðekð !ð !ð !ñ QÔPñ Ôð!ð !ð !r'   