§
     �’j´)  ã            	       ól  — U d dl mZmZm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mZmZmZ  G d„ d¦  «        Z G d	„ d
¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Ze
ez  ez  ez  Zeed<   	 d%de
dee
         dedej        fd„Zde
de
dej        dz  fd„Zdee         dee
         dej        fd„Z dedee
         dej        fd„Z!dedee
         dej        fd„Z"dedee
         dej        fd„Z#dedee
         dej        fd„Z$de
de
dede
fd „Z%dee
         de
fd!„Z&d"e
d#e
de
fd$„Z'dS )&é    )ÚCallableÚSequenceÚ	TypeAliasN)Úcommon_types)ÚSparseVector)ÚEPSILONÚfast_sigmoidÚscaled_fast_sigmoid)Úempty_sparse_vectorÚ	is_sortedÚsort_sparse_vectorÚvalidate_sparse_vectorc                   ó€   — e Zd Z	 	 	 d
dee         dz  dee         dz  dej        dz  fd„Zdedgdf         dd fd	„Z	dS )ÚSparseRecoQueryNÚpositiveÚnegativeÚstrategyc                 ó8  — |€
J d¦   «         ‚|| _         |�|ng }|�|ng }t          |¦  «        D ]&\  }}t          |¦  «         t          |¦  «        ||<   Œ't          |¦  «        D ]&\  }}t          |¦  «         t          |¦  «        ||<   Œ'|| _        || _        d S )Nz#Recommend strategy must be provided)r   Ú	enumerater   r   r   r   )Úselfr   r   r   ÚiÚvectors         úRC:\Projects\DSCons\.venv\Lib\site-packages\qdrant_client\local\sparse_distances.pyÚ__init__zSparseRecoQuery.__init__   sÆ   € ð Ð#Ð#Ð%JÑ#Ô#Ð#à ˆŒà'Ð3�8�8¸ˆØ'Ð3�8�8¸ˆå" 8Ñ,Ô,ð 	5ð 	5‰IˆAˆvÝ" 6Ñ*Ô*Ð*Ý,¨VÑ4Ô4ˆH�Q‰KˆKå" 8Ñ,Ô,ð 	5ð 	5‰IˆAˆvÝ" 6Ñ*Ô*Ð*Ý,¨VÑ4Ô4ˆH�Q‰KˆKà ˆŒØ ˆŒˆˆó    Úfoor   Úreturnc                 óv   ‡— t          ˆfd„| j        D ¦   «         ˆfd„| j        D ¦   «         | j        ¬¦  «        S )Nc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS © r    ©Ú.0r   r   s     €r   ú
<listcomp>z4SparseRecoQuery.transform_sparse.<locals>.<listcomp>-   ó!   ø€ Ð>Ð>Ð> f�c�c˜&‘k”kÐ>Ð>Ð>r   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r    r    r!   s     €r   r#   z4SparseRecoQuery.transform_sparse.<locals>.<listcomp>.   r$   r   )r   r   r   )r   r   r   r   ©r   r   s    `r   Útransform_sparsez SparseRecoQuery.transform_sparse)   sS   ø€ õ Ø>Ð>Ð>Ð>°´Ð>Ñ>Ô>Ø>Ð>Ð>Ð>°´Ð>Ñ>Ô>Ø”]ð
ñ 
ô 
ð 	
r   )NNN)
Ú__name__Ú
__module__Ú__qualname__Úlistr   ÚtypesÚRecommendStrategyr   r   r'   r    r   r   r   r      s¡   € € € € € ð /3Ø.2Ø37ð	!ð !à�|Ô$ tÑ+ð!ð �|Ô$ tÑ+ð!ð Ô)¨DÑ0ð	!ð !ð !ð !ð0
Ø˜^Ð,¨nÐ<Ô=ð
à	ð
ð 
ð 
ð 
ð 
ð 
r   r   c                   ó   — e Zd Zdedefd„ZdS )ÚSparseContextPairr   r   c                 ó’   — t          |¦  «         t          |¦  «         t          |¦  «        | _        t          |¦  «        | _        d S ©N)r   r   r   r   )r   r   r   s      r   r   zSparseContextPair.__init__4   s@   € Ý˜xÑ(Ô(Ð(Ý˜xÑ(Ô(Ð(Ý&8¸Ñ&BÔ&BˆŒÝ&8¸Ñ&BÔ&BˆŒˆˆr   N)r(   r)   r*   r   r   r    r   r   r/   r/   3   s>   € € € € € ðC ð C¸ð Cð Cð Cð Cð Cð Cr   r/   c                   óL   — e Zd Zdedee         fd„Zdedgdf         dd fd„ZdS )	ÚSparseDiscoveryQueryÚtargetÚcontextc                 óZ   — t          |¦  «         t          |¦  «        | _        || _        d S r1   )r   r   r4   r5   )r   r4   r5   s      r   r   zSparseDiscoveryQuery.__init__<   s*   € Ý˜vÑ&Ô&Ð&Ý$6°vÑ$>Ô$>ˆŒØˆŒˆˆr   r   r   r   c                 ód   ‡— t           ‰| j        ¦  «        ˆfd„| j        D ¦   «         ¬¦  «        S )Nc                 óh   •— g | ].}t           ‰|j        ¦  «         ‰|j        ¦  «        ¦  «        ‘Œ/S r    ©r/   r   r   ©r"   Úpairr   s     €r   r#   z9SparseDiscoveryQuery.transform_sparse.<locals>.<listcomp>F   sI   ø€ ð ð ð ØNRÕ! # # d¤mÑ"4Ô"4°c°c¸$¼-Ñ6HÔ6HÑIÔIðð ð r   )r4   r5   )r3   r4   r5   r&   s    `r   r'   z%SparseDiscoveryQuery.transform_sparseA   sT   ø€ õ $Ø�3�t”{Ñ#Ô#ðð ð ð ØVZÔVbðñ ô ð
ñ 
ô 
ð 	
r   N)	r(   r)   r*   r   r+   r/   r   r   r'   r    r   r   r3   r3   ;   sm   € € € € € ð˜|ð °dÐ;LÔ6Mð ð ð ð ð

Ø˜^Ð,¨nÐ<Ô=ð
à	ð
ð 
ð 
ð 
ð 
ð 
r   r3   c                   óH   — e Zd Zdee         fd„Zdedgdf         dd fd„ZdS )ÚSparseContextQueryÚcontext_pairsc                 ó   — || _         d S r1   ©r>   )r   r>   s     r   r   zSparseContextQuery.__init__M   s   € Ø*ˆÔÐÐr   r   r   r   c                 óF   ‡— t          ˆfd„| j        D ¦   «         ¬¦  «        S )Nc                 óh   •— g | ].}t           ‰|j        ¦  «         ‰|j        ¦  «        ¦  «        ‘Œ/S r    r9   r:   s     €r   r#   z7SparseContextQuery.transform_sparse.<locals>.<listcomp>T   sK   ø€ ð ð ð àõ " # # d¤mÑ"4Ô"4°c°c¸$¼-Ñ6HÔ6HÑIÔIðð ð r   r@   )r=   r>   r&   s    `r   r'   z#SparseContextQuery.transform_sparseP   sE   ø€ õ "ðð ð ð à Ô.ðñ ô ð
ñ 
ô 
ð 	
r   N)r(   r)   r*   r+   r/   r   r   r'   r    r   r   r=   r=   L   sf   € € € € € ð+ dÐ+<Ô&=ð +ð +ð +ð +ð
Ø˜^Ð,¨nÐ<Ô=ð
à	ð
ð 
ð 
ð 
ð 
ð 
r   r=   ÚSparseQueryVectorFÚqueryÚvectorsÚempty_is_zeror   c                 óB  — g }|D ]{}t          | |¦  «        }|�|                     |¦  «         Œ*|s(|                     t          j        d¦  «        ¦  «         ŒT|                     t          j        d¦  «        ¦  «         Œ|t          j        |t          j        ¬¦  «        S )a&  Calculate distances between a query sparse vector and a list of sparse vectors.

    Args:
        query (SparseVector): The query sparse vector.
        vectors (list[SparseVector]): A list of sparse vectors to compare against.
        empty_is_zero (bool): If True, distance between vectors with no overlap is treated as zero.
            Otherwise, it is treated as negative infinity.
            Simple nearest search requires `empty_is_zero` to be False, while methods like
            recommend, discovery, and context search require True.
    Nz-infç        ©Údtype)Úsparse_dot_productÚappendÚnpÚfloat32Úarray)rD   rE   rF   Úscoresr   Úscores         r   Úcalculate_distance_sparserR   `   s�   € ð €Fàð +ð +ˆÝ" 5¨&Ñ1Ô1ˆØÐØ�MŠM˜%Ñ Ô Ð Ð Øð 	+à�MŠM�"œ* VÑ,Ô,Ñ-Ô-Ð-Ð-à�MŠM�"œ* S™/œ/Ñ*Ô*Ð*Ð*åŒ8�F¥"¤*Ð-Ñ-Ô-Ð-r   Úvector1Úvector2c                 óD  — d}d\  }}d}t          | ¦  «        s
J d¦   «         ‚t          |¦  «        s
J d¦   «         ‚|t          | j        ¦  «        k     r¶|t          |j        ¦  «        k     rž| j        |         |j        |         k    r+d}|| j        |         |j        |         z  z  }|dz  }|dz  }n'| j        |         |j        |         k     r|dz  }n|dz  }|t          | j        ¦  «        k     r|t          |j        ¦  «        k     °ž|rt	          j        |¦  «        S d S )NrH   ©r   r   Fz"Query sparse vector must be sortedz,Sparse vector to compare with must be sortedTé   )r   ÚlenÚindicesÚvaluesrM   rN   )rS   rT   Úresultr   ÚjÚoverlaps         r   rK   rK   ~   s>  € Ø€FØ�D€A€qØ€Gå�WÑÔÐCÐCÐCÑCÔCÐÝ�WÑÔÐMÐMÐMÑMÔMÐà
�c�'”/Ñ"Ô"Ò
"Ð
" q­3¨w¬Ñ+?Ô+?Ò'?Ð'?ØŒ?˜1Ô ¤°Ô!3Ò3Ð3ØˆGØ�g”n QÔ'¨'¬.¸Ô*;Ñ;Ñ;ˆFØ�‰FˆAØ�‰FˆAˆAØŒ_˜QÔ '¤/°!Ô"4Ò4Ð4Ø�‰FˆAˆAà�‰FˆAð �c�'”/Ñ"Ô"Ò
"Ð
" q­3¨w¬Ñ+?Ô+?Ò'?Ð'?ð ð ÝŒz˜&Ñ!Ô!Ð!àˆtr   r5   c           	      ó8  — t          j        t          |¦  «        t           j        ¬¦  «        }| D ]i}t	          |j        |d¬¦  «        }t	          |j        |d¬¦  «        }t          j        d„ t          ||k    ||k    ¦  «        D ¦   «         ¦  «        }||z  }Œj|S )NrI   T©rF   c                 ó(   — g | ]\  }}|rd n|rdnd‘ŒS )rW   r   éÿÿÿÿr    )r"   Ú	is_biggerÚis_equals      r   r#   z4calculate_sparse_discovery_ranks.<locals>.<listcomp>¢   s>   € ð ð ð á'�I˜xð Ð9��¨Ð$9 A A°rðð ð r   )	rM   ÚzerosrX   Úint32rR   r   r   rO   Úzip)r5   rE   Úoverall_ranksr;   ÚposÚnegÚ
pair_rankss          r   Ú calculate_sparse_discovery_ranksrk   —   s®   € õ ')¤h­s°7©|¬|Å2Ä8Ð&LÑ&LÔ&L€MØð $ð $ˆå'¨¬°wÈdÐSÑSÔSˆÝ'¨¬°wÈdÐSÑSÔSˆå”Xðð å+.¨s°Sªy¸#Àº*Ñ+EÔ+Eðñ ô ñ
ô 
ˆ
ð 	˜Ñ#ˆˆàÐr   c                 ó¶   — t          | j        |¦  «        }t          | j        |d¬¦  «        }t	          j        d„ |D ¦   «         t          j        ¦  «        }||z   S )NTr_   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r1   ©r
   ©r"   Úxis     r   ú	<genexpr>z4calculate_sparse_discovery_scores.<locals>.<genexpr>¶   s+   è è € Ð?Ð? RÕ	˜RÑ	 Ô	 Ð?Ð?Ð?Ð?Ð?Ð?r   )rk   r5   rR   r4   rM   ÚfromiterrN   )rD   rE   ÚranksÚdistances_to_targetÚsigmoided_distancess        r   Ú!calculate_sparse_discovery_scoresrv   ­   se   € õ -¨U¬]¸GÑDÔD€Eõ 4°E´LÀ'ÐY]Ð^Ñ^Ô^Ðå,.¬KØ?Ð?Ð+>Ð?Ñ?Ô?ÅÄñ-ô -Ðð Ð&Ñ&Ð&r   c                 ól  — t          j        t          |¦  «        t           j        ¬¦  «        }| j        D ]~}t          |j        |d¬¦  «        }t          |j        |d¬¦  «        }||z
  t          z
  }t          j	        d„ t          j
        |d¦  «        D ¦   «         t           j        ¦  «        }||z  }Œ|S )NrI   Tr_   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r1   )r	   ro   s     r   rq   z2calculate_sparse_context_scores.<locals>.<genexpr>Ç   s*   è è € ÐDÐD "�\˜"ÑÔÐDÐDÐDÐDÐDÐDr   rH   )rM   rd   rX   rN   r>   rR   r   r   r   rr   Úminimum)rD   rE   Úoverall_scoresr;   rh   ri   Ú
differenceÚpair_scoress           r   Úcalculate_sparse_context_scoresr}   ¼   s²   € õ (*¤xµ°G±´ÅBÄJÐ'OÑ'OÔ'O€NØÔ#ð 	&ð 	&ˆå'¨¬°wÈdÐSÑSÔSˆÝ'¨¬°wÈdÐSÑSÔSˆà˜3‘Y¥Ñ(ˆ
Ý(*¬ØDÐD­¬
°:¸sÑ(CÔ(CÐDÑDÔDÅbÄjñ)
ô )
ˆð 	˜+Ñ%ˆˆàÐr   c                 óH  ‡— dt           t                   dt          j        fˆfd„} || j        ¦  «        } || j        ¦  «        }t          j        ||k    t          j        d„ |D ¦   «         |j	        ¦  «        t          j        d„ |D ¦   «         |j	        ¦  «        ¦  «        S )NÚexamplesr   c                 óv  •— t          ‰¦  «        }g }| D ])}t          |‰d¬¦  «        }|                     |¦  «         Œ*t          |¦  «        dk    r3|                     t          j        |t          j         ¦  «        ¦  «         t          j        |t          j        ¬¦  «                             d¬¦  «        }|S ©NTr_   r   rI   )Úaxis)	rX   rR   rL   rM   ÚfullÚinfrO   rN   Úmax)r   Úvector_countrP   ÚexamplerQ   Úbest_scoresrE   s         €r   Úget_best_scoresz?calculate_sparse_recommend_best_scores.<locals>.get_best_scoresÑ   s¯   ø€ Ý˜7‘|”|ˆð *,ˆØð 	!ð 	!ˆGÝ-¨g°wÈdÐSÑSÔSˆEØ�MŠM˜%Ñ Ô Ð Ð õ ˆv‰;Œ;˜!ÒÐØ�MŠM�"œ' ,µ´°Ñ8Ô8Ñ9Ô9Ð9Ý”h˜v­R¬ZÐ8Ñ8Ô8×<Ò<À!Ð<ÑDÔDˆàÐr   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r1   rn   ro   s     r   rq   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>è   s+   è è € Ð;Ð;°Õ(¨Ñ,Ô,Ð;Ð;Ð;Ð;Ð;Ð;r   c              3   ó6   K  — | ]}t          |¦  «         V — Œd S r1   rn   ro   s     r   rq   z9calculate_sparse_recommend_best_scores.<locals>.<genexpr>é   s.   è è € Ð<Ð<°"Õ)¨"Ñ-Ô-Ð-Ð<Ð<Ð<Ð<Ð<Ð<r   )
r+   r   r,   Ú
NumpyArrayr   r   rM   Úwhererr   rJ   )rD   rE   r‰   rh   ri   s    `   r   Ú&calculate_sparse_recommend_best_scoresrŽ   Î   s¸   ø€ ð¥$¥|Ô"4ð ½Ô9Ið ð ð ð ð ð ð  ˆ/˜%œ.Ñ
)Ô
)€CØ
ˆ/˜%œ.Ñ
)Ô
)€Cõ Œ8ØˆcŠ	Ý
ŒÐ;Ð;°sÐ;Ñ;Ô;¸S¼YÑGÔGÝ
ŒÐ<Ð<¸Ð<Ñ<Ô<¸c¼iÑHÔHñô ð r   c                 ó–   ‡— dt           t                   dt          j        fˆfd„} || j        ¦  «        } || j        ¦  «        }||z
  S )Nr   r   c                 ó^  •— t          ‰¦  «        }g }| D ])}t          |‰d¬¦  «        }|                     |¦  «         Œ*t          |¦  «        dk    r'|                     t          j        |¦  «        ¦  «         t          j        |t          j        ¬¦  «                             d¬¦  «        }|S r�   )rX   rR   rL   rM   rd   rO   rN   Úsum)r   r†   rP   r‡   rQ   Ú
sum_scoresrE   s         €r   Úget_sum_scoresz=calculate_sparse_recommend_sum_scores.<locals>.get_sum_scoresð   s¥   ø€ Ý˜7‘|”|ˆà)+ˆØð 	!ð 	!ˆGÝ-¨g°wÈdÐSÑSÔSˆEØ�MŠM˜%Ñ Ô Ð Ð åˆv‰;Œ;˜!ÒÐØ�MŠM�"œ( <Ñ0Ô0Ñ1Ô1Ð1å”X˜f­B¬JÐ7Ñ7Ô7×;Ò;ÀÐ;ÑCÔCˆ
ØÐr   )r+   r   r,   rŒ   r   r   )rD   rE   r“   rh   ri   s    `   r   Ú%calculate_sparse_recommend_sum_scoresr”   í   se   ø€ ð¥¥lÔ!3ð ½Ô8Hð ð ð ð ð ð ð ˆ.˜œÑ
(Ô
(€CØ
ˆ.˜œÑ
(Ô
(€Cà�‰9Ðr   Úopc                 óÀ  — t          ¦   «         }d\  }}|t          | j        ¦  «        k     �rŸ|t          |j        ¦  «        k     �r†| j        |         |j        |         k    rj|j                             | j        |         ¦  «         |j                              || j        |         |j        |         ¦  «        ¦  «         |dz  }|dz  }nÏ| j        |         |j        |         k     rZ|j                             | j        |         ¦  «         |j                              || j        |         d¦  «        ¦  «         |dz  }nY|j                             |j        |         ¦  «         |j                              |d|j        |         ¦  «        ¦  «         |dz  }|t          | j        ¦  «        k     r|t          |j        ¦  «        k     �°†|t          | j        ¦  «        k     rq|j                             | j        |         ¦  «         |j                              || j        |         d¦  «        ¦  «         |dz  }|t          | j        ¦  «        k     °q|t          |j        ¦  «        k     rq|j                             |j        |         ¦  «         |j                              |d|j        |         ¦  «        ¦  «         |dz  }|t          |j        ¦  «        k     °q|S )NrV   rW   rH   )r   rX   rY   rL   rZ   )rS   rT   r•   r[   r   r\   s         r   Úcombine_aggregater—     sž  € Ý Ñ"Ô"€FØ�D€A€qØ
�c�'”/Ñ"Ô"Ò
"Ñ
" q­3¨w¬Ñ+?Ô+?Ò'?Ñ'?ØŒ?˜1Ô ¤°Ô!3Ò3Ð3ØŒN×!Ò! '¤/°!Ô"4Ñ5Ô5Ð5ØŒM× Ò    G¤N°1Ô$5°w´~ÀaÔ7HÑ!IÔ!IÑJÔJÐJØ�‰FˆAØ�‰FˆAˆAØŒ_˜QÔ '¤/°!Ô"4Ò4Ð4ØŒN×!Ò! '¤/°!Ô"4Ñ5Ô5Ð5ØŒM× Ò    G¤N°1Ô$5°sÑ!;Ô!;Ñ<Ô<Ð<Ø�‰FˆAˆAàŒN×!Ò! '¤/°!Ô"4Ñ5Ô5Ð5ØŒM× Ò    C¨¬¸Ô):Ñ!;Ô!;Ñ<Ô<Ð<Ø�‰FˆAð �c�'”/Ñ"Ô"Ò
"Ð
" q­3¨w¬Ñ+?Ô+?Ò'?Ñ'?ð �c�'”/Ñ"Ô"Ò
"Ð
"ØŒ×Ò˜gœo¨aÔ0Ñ1Ô1Ð1ØŒ×Ò˜R˜R ¤¨qÔ 1°3Ñ7Ô7Ñ8Ô8Ð8Ø	ˆQ‰ˆð �c�'”/Ñ"Ô"Ò
"Ð
"ð
 �c�'”/Ñ"Ô"Ò
"Ð
"ØŒ×Ò˜gœo¨aÔ0Ñ1Ô1Ð1ØŒ×Ò˜R˜R  W¤^°AÔ%6Ñ7Ô7Ñ8Ô8Ð8Ø	ˆQ‰ˆð �c�'”/Ñ"Ô"Ò
"Ð
"ð
 €Mr   c                 óê   — t          ¦   «         }t          | ¦  «        dk    r|S d}| D ]}|dz  }t          ||d„ ¦  «        }Œt          j        |j        |¦  «                             ¦   «         |_        |S )Nr   rW   c                 ó   — | |z   S r1   r    )Úv1Úv2s     r   ú<lambda>zsparse_avg.<locals>.<lambda>-  s
   € À"ÀrÁ'€ r   )r   rX   r—   rM   ÚdividerZ   Útolist)rE   r[   Úsparse_countr   s       r   Ú
sparse_avgr    %  s€   € Ý Ñ"Ô"€FÝ
ˆ7�|„|�qÒÐØˆà€LØð Kð KˆØ˜ÑˆÝ" 6¨6Ð3IÐ3IÑJÔJˆˆå”I˜fœm¨\Ñ:Ô:×AÒAÑCÔC€F„MØ€Mr   r   r   c                 ó&   — t          | |d„ ¦  «        S )Nc                 ó   — | | z   |z
  S r1   r    )rh   ri   s     r   rœ   z1merge_positive_and_negative_avg.<locals>.<lambda>7  s   € À#ÈÁ)ÈcÁ/€ r   )r—   )r   r   s     r   Úmerge_positive_and_negative_avgr£   4  s   € õ ˜X xÐ1QÐ1QÑRÔRÐRr   )F)(Útypingr   r   r   ÚnumpyrM   Úqdrant_client.conversionsr   r,   Úqdrant_client.http.modelsr   Úqdrant_client.local.distancesr   r	   r
   Úqdrant_client.local.sparser   r   r   r   r   r/   r3   r=   rC   Ú__annotations__r+   ÚboolrŒ   rR   rN   rK   rk   rv   r}   rŽ   r”   r—   r    r£   r    r   r   ú<module>r¬      s¢  ðØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à Ð Ð Ð à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ TÐ Tðð ð ð ð ð ð ð ð ð ð ð ð 
ð  
ð  
ð  
ð  
ñ  
ô  
ð  
ðFCð Cð Cð Cð Cñ Cô Cð Cð
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð"
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð  Ð'Ñ'Ð*<Ñ<¸ÑNð �9ð ð ñ ð MRð.ð .Øð.Ø"& |Ô"4ð.ØEIð.à
Ôð.ð .ð .ð .ð< ð °|ð ÈÌ
ÐUYÑHYð ð ð ð ð2ØÐ#Ô$ðà�,Ôðð Ôðð ð ð ð,'Øð'Ø*.¨|Ô*<ð'à
Ôð'ð 'ð 'ð 'ðØðØ(,¨\Ô(:ðà
Ôðð ð ð ð$ØðØ%)¨,Ô%7ðà
Ôðð ð ð ð>ØðØ%)¨,Ô%7ðà
Ôðð ð ð ð0˜|ð °lð Èð ÐUað ð ð ð ð@˜ Ô.ð °<ð ð ð ð ðSØðSØ&2ðSàðSð Sð Sð Sð Sð Sr   