Ë
    tPêjõ=  ã                   ól  — d dl Z d dlmZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
Z
d dlZd dlZddlmZ e G d„ d	«      «       Zd
eeef   defd„Zdedz  defd„Zdedz  defd„Zdedz  defd„Zde
j0                  defd„Z e
j4                  «       dYd„«       Zej9                  d«       e
j:                  dd e
j<                  ddg«      dd¬«      e
j>                  de
j0                  de	d   ddfd„«       «       «       Z ej9                  d«       e
jB                  d «       e
j:                  d!d"d#d$¬%«       e
j:                  d&d'd#d(¬%«      e
j>                  de
j0                  d)ed*e"ed+f   d,e"ed+f   ddf
d-„«       «       «       «       «       Z#ej9                  d.«       e
jB                  d/«      e
j>                  de
j0                  d0eddfd1„«       «       «       Z$ej9                  d2«       e
j:                  d3d0d4¬5«       e
j:                  d6d)d7¬5«      e
j>                  de
j0                  d0edz  d)edz  ddfd8„«       «       «       «       Z%ej9                  d,«       e
j:                  dd e
j<                  ddg«      dd¬«       e
j:                  d9d:d;d<¬=«      e
j>                  de
j0                  de	d   d:eddfd>„«       «       «       «       Z&ej9                  d?«       e
jB                  d/«       e
j:                  d!d"d#d$¬%«       e
j:                  d&d'd#d(¬%«      e
j>                  de
j0                  d0ed*e"ed+f   d,e"ed+f   ddf
d@„«       «       «       «       «       Z'dA„ Z(dBe)e   dCefdD„Z*dE„ Z+dFede)eeef      fdG„Z,dH„ Z-dIe.defdJ„Z/ej9                  dK«       e
jB                  dF e
j`                  d#dLd#¬M«      ¬N«       e
j:                  dOd#dP¬Q«       e
j:                  dRddS¬=«       e
j:                  dTddU¬=«      e
j>                  de
j0                  dFedIe.dVedz  dWedz  ddfdX„«       «       «       «       «       «       Z1y)Zé    N)Údefaultdict)Ú	dataclass)Údatetime)ÚAnyÚFinalÚLiteralé   )ÚClientc                   óz   — e Zd ZU eed<   eeef   ed<   eeef   ed<   eed<   ee   ed<   eed<   edefd„«       Z	y	)
ÚModelYamlInfoÚ
model_nameÚmodel_paramsÚ
model_infoÚmodel_idÚaccess_groupsÚproviderÚreturnc                 óT   — | j                   rdj                  | j                   «      S dS )Nz, Ú )r   Újoin)Úselfs    úm/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/client/cli/commands/models.pyÚaccess_groups_strzModelYamlInfo.access_groups_str   s$   € à04×0BÒ0Bˆt�y‰y˜×+Ñ+Ó,ÐJÈÐJó    N)
Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__Údictr   ÚlistÚpropertyr   © r   r   r   r      sS   … àƒOØ�s˜C�x‘.Ó Ø�S˜#�X‘ÓØƒMØ˜‘9ÓØƒMàðK 3ò Kó ñKr   r   Úmodelr   c                 óÀ   — | d   }| d   }| j                  di «      }|d   }|j                  dg «      }d|v r|j                  dd«      d   n|}t        ||||||¬	«      S )
zKExtract model info from a model dict and return as ModelYamlInfo dataclass.r   Úlitellm_paramsr   r$   r   ú/é   r   )r   r   r   r   r   r   )ÚgetÚsplitr   )r$   r   r   r   r   r   r   s          r   Ú_get_model_info_obj_from_yamlr+      s}   € à" <Ñ0€JØ*/Ð0@Ñ*A€LØ(-¯	©	°,ÀÓ(C€JØ'¨Ñ0€HØ%Ÿ>™>¨/¸2Ó>€MØ36¸(±?�h—n‘n S¨!Ó,¨QÒ/È€HÜØØ!ØØØ#Øôð r   Úiso_datetime_strc                 ó¶   — | sy	 t        j                  | j                  dd«      «      }|j                  d«      S # t        t
        f$ r t        | «      cY S w xY w)zSFormat an ISO format datetime string to human-readable date with minute resolution.r   ÚZz+00:00ú%Y-%m-%d %H:%M)r   ÚfromisoformatÚreplaceÚstrftimeÚ	TypeErrorÚ
ValueErrorr   )r,   Údts     r   Úformat_iso_datetime_strr6   1   s[   € áØð%ä×*Ñ*Ð+;×+CÑ+CÀCÈÓ+RÓSˆØ�{‰{Ð+Ó,Ð,øÜ”zÐ"ò %ÜÐ#Ó$Ò$ð%ús   …5; »AÁAÚ	timestampc                 ó–   — | €y	 t        j                  | «      }|j                  d«      S # t        t        f$ r t        | «      cY S w xY w)zPFormat a Unix timestamp (integer) to human-readable date with minute resolution.r   r/   )r   Úfromtimestampr2   r3   r4   r   )r7   r5   s     r   Úformat_timestampr:   =   sN   € àÐØðÜ×*Ñ*¨9Ó5ˆØ�{‰{Ð+Ó,Ð,øÜ”zÐ"ò Ü�9‹~Òðús   …%+ «AÁAÚcostc                 ór   — | €y	 t        | «      }d|dz  d›�S # t        t        f$ r t        | «      cY S w xY w)z0Format a per-token cost to cost per 1000 tokens.r   ú$iè  z.4f)Úfloatr3   r4   r   )r;   Ú
cost_floats     r   Úformat_cost_per_1k_tokensr@   H   sK   € à€|Øðä! $›Kˆ
à�: Ñ$ SÐ)Ð*Ð*øÜ”zÐ"ò Ü�4‹yÒðús   … ™6µ6Úctxc                 óP   — t        | j                  d   | j                  d   ¬«      S )z0Helper function to create a client from context.Úbase_urlÚapi_key)rC   rD   )r
   Úobj)rA   s    r   Úcreate_clientrF   U   s!   € ä˜3Ÿ7™7 :Ñ.¸¿¹À	Ñ8JÔKÐKr   c                   ó   — y)z*Manage models on your LiteLLM proxy serverNr#   r#   r   r   ÚmodelsrH   Z   s   � r   r!   z--formatÚoutput_formatÚtableÚjsonzOutput format (table or json))ÚtypeÚdefaultÚhelp)rJ   rK   c                 ó8  — t        | «      }|j                  j                  «       }t        |t        «      sJ ‚|dk(  rt	        j
                  |¬«       yt        j                  j                  d¬«      }|j                  dd¬«       |j                  dd	¬«       |j                  d
d¬«       |j                  dd¬«       |D ]Á  }|j                  d«      }t        |t        «      r|j                  «       rt        |«      }|j                  t        |j                  dd«      «      t        |j                  dd«      «      t        |t        «      rt        |«      n
t        |«      t        |j                  dd«      «      «       ŒÃ t	        j                   |«       y)zList all available modelsrK   ©ÚdatazAvailable Models©ÚtitleÚIDÚcyan©ÚstyleÚObjectÚgreenÚCreatedÚmagentazOwned ByÚyellowÚcreatedÚidr   Úobjectr$   Úowned_byN)rF   rH   r!   Ú
isinstanceÚrichÚ
print_jsonrJ   ÚTableÚ
add_columnr)   r   ÚisdigitÚintÚadd_rowr:   r6   Úprint)rA   rI   ÚclientÚmodels_listrJ   r$   r]   s          r   Úlist_modelsrl   _   sS  € ô " #Ó&€FØŸ™×+Ñ+Ó-€KÜ�k¤4Ô(Ð(Ð(à˜ÒÜ�‰˜[Ö)ä—z‘z×'Ñ'Ð.@Ð'ÓAˆð 	×Ñ˜ VÐÔ,Ø×Ñ˜¨ÐÔ1Ø×Ñ˜¨)ÐÔ4Ø×Ñ˜¨8ÐÔ4ð !ò 	ˆEØ—i‘i 	Ó*ˆGä˜'¤3Ô'¨G¯O©OÔ,=Ü˜g›,�à�M‰MÜ�E—I‘I˜d BÓ'Ó(Ü�E—I‘I˜h¨Ó0Ó1Ü.8¸Ä#Ô.FÔ! 'Ô*ÔLcÐdkÓLlÜ�E—I‘I˜j¨"Ó-Ó.õ	ð	ô 	�
‰
�5Õr   Úaddz
model-namez--paramz-pTzFModel parameters in key=value format (can be specified multiple times))ÚmultiplerN   z--infoz-iz@Model info in key=value format (can be specified multiple times)r   Úparam.Úinfoc                 óÒ   — t        d„ |D «       «      }|rt        d„ |D «       «      nd}t        | «      }|j                  j                  |||¬«      }t	        j
                  |¬«       y)zAdd a new model to the proxyc              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­w©ú=r(   N©r*   ©Ú.0Úps     r   ú	<genexpr>zadd_model.<locals>.<genexpr>œ   ó   è ø€ Ò>°1˜qŸw™w s¨AŸÑ>ùó   ‚c              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­wrs   ru   ©rw   Úis     r   ry   zadd_model.<locals>.<genexpr>�   ó   è ø€ Ò;°˜QŸW™W S¨!Ÿ_Ñ;ùr{   N©r   r   r   rP   )r    rF   rH   Únewrb   rc   )rA   r   ro   rp   r   r   rj   Úresults           r   Ú	add_modelrƒ   Š   sb   € ô$ Ñ>¸Ô>Ó>€LÙ?CœÑ;°dÔ;Ô;È€Jä! #Ó&€FØ—M‘M×%Ñ%ØØ!Øð &ó €Fô
 	‡O�O˜Ö r   Údeletezmodel-idr   c                 ó~   — t        | «      }|j                  j                  |¬«      }t        j                  |¬«       y)zDelete a model from the proxy)r   rP   N)rF   rH   r„   rb   rc   )rA   r   rj   r‚   s       r   Údelete_modelr†   ¨   s1   € ô
 " #Ó&€FØ—M‘M×(Ñ(°(Ð(Ó;€FÜ‡O�O˜Ö r   r)   z--idzID of the model to retrieve)rN   z--namezName of the model to retrievec                 ó²   — |s|st        j                  d«      ‚t        | «      }|j                  j	                  ||¬«      }t        j                  |¬«       y)z&Get information about a specific modelz&Either --id or --name must be provided)r   r   rP   N)ÚclickÚ
UsageErrorrF   rH   r)   rb   rc   )rA   r   r   rj   r‚   s        r   Ú	get_modelrŠ   ²   sJ   € ñ ™JÜ×ÑÐGÓHÐHä! #Ó&€FØ—M‘M×%Ñ%¨xÀJÐ%ÓO€FÜ‡O�O˜Ö r   z	--columnsÚcolumnsz&public_model,upstream_model,updated_atzÎComma-separated list of columns to display. Valid columns: public_model, upstream_model, credential_name, created_at, updated_at, id, input_cost, output_cost. Default: public_model,upstream_model,updated_at)rM   rN   c                 ó  — t        | «      }|j                  j                  «       }t        |t        «      sJ ‚|dk(  rt        j                  |¬«       y)t
        j                  j                  d¬«      }ddd„ dœd	d
d„ dœddd„ dœddd„ dœddd„ dœddd„ dœdd
dd„ dœdd
dd„ dœdœ}|j                  d«      D �cg c]  }|j                  «       ‘Œ }}|D ]Q  }	|	|v r0||	   }
|j                  |
d   |
d    |
j                  d!d"«      ¬#«       Œ7t        j                  d$|	› d%�d&¬'«       ŒS |D ]?  }g }|D ]$  }	|	|v sŒ|j                   ||	   d(   |«      «       Œ& |sŒ1 |j                   |Ž  ŒA t        j"                  |«       y)c c}w )*z)Get detailed information about all modelsrK   rP   zModels InformationrR   zPublic ModelrU   c                 ó8   — t        | j                  dd«      «      S )Nr   r   ©r   r)   ©Úms    r   ú<lambda>z!get_models_info.<locals>.<lambda>ß   s   € ¤s¨1¯5©5°¸rÓ+BÓ'C€ r   )ÚheaderrW   Ú	get_valueúUpstream ModelrY   c                 óX   — t        | j                  di «      j                  dd«      «      S )Nr&   r$   r   rŽ   r�   s    r   r‘   z!get_models_info.<locals>.<lambda>ä   s%   € ¤s¨1¯5©5Ð1AÀ2Ó+F×+JÑ+JÈ7ÐTVÓ+WÓ'X€ r   zCredential Namer\   c                 óX   — t        | j                  di «      j                  dd«      «      S )Nr&   Úlitellm_credential_namer   rŽ   r�   s    r   r‘   z!get_models_info.<locals>.<lambda>é   s&   € ¤s¨1¯5©5Ð1AÀ2Ó+F×+JÑ+JÐKdÐfhÓ+iÓ'j€ r   z
Created Atr[   c                 óV   — t        | j                  di «      j                  d«      «      S )Nr   Ú
created_at©r6   r)   r�   s    r   r‘   z!get_models_info.<locals>.<lambda>î   ó$   € Ô'>¸q¿u¹uÀ\ÐSUÓ?V×?ZÑ?ZÐ[gÓ?hÓ'i€ r   z
Updated Atc                 óV   — t        | j                  di «      j                  d«      «      S )Nr   Ú
updated_atrš   r�   s    r   r‘   z!get_models_info.<locals>.<lambda>ó   r›   r   rT   Úbluec                 óX   — t        | j                  di «      j                  dd«      «      S )Nr   r^   r   rŽ   r�   s    r   r‘   z!get_models_info.<locals>.<lambda>ø   s#   € ¤s¨1¯5©5°¸rÓ+B×+FÑ+FÀtÈRÓ+PÓ'Q€ r   z
Input CostÚrightc                 óV   — t        | j                  di «      j                  d«      «      S )Nr   Úinput_cost_per_token©r@   r)   r�   s    r   r‘   z!get_models_info.<locals>.<lambda>þ   s$   € Ô'@ÀÇÁÀ|ÐUWÓAX×A\ÑA\Ð]sÓAtÓ'u€ r   )r’   rW   Újustifyr“   zOutput Costc                 óV   — t        | j                  di «      j                  d«      «      S )Nr   Úoutput_cost_per_tokenr£   r�   s    r   r‘   z!get_models_info.<locals>.<lambda>  s$   € Ô'@ÀÇÁÀ|ÐUWÓAX×A\ÑA\Ð]tÓAuÓ'v€ r   )Úpublic_modelÚupstream_modelÚcredential_namer™   r�   r^   Ú
input_costÚoutput_costú,r’   rW   r¤   Úleft)rW   r¤   zWarning: Unknown column 'ú'T)Úerrr“   N)rF   rH   rp   ra   r!   rb   rc   rJ   rd   r*   Ústripre   r)   rˆ   ÚechoÚappendrh   ri   )rA   rI   r‹   rj   Úmodels_inforJ   Úcolumn_configsÚcolÚrequested_columnsÚcol_nameÚconfigr$   Ú
row_valuess                r   Úget_models_inforº   À   sô  € ô" " #Ó&€FØŸ™×+Ñ+Ó-€KÜ�k¤4Ô(Ð(Ð(à˜ÒÜ�‰˜[Ö)ä—z‘z×'Ñ'Ð.BÐ'ÓCˆð
 )ØÙCñð +Ø ÙXñð ,Ø!Ùjñ ð 'Ø"Ùiñð 'Ø"Ùiñð ØÙQñð 'Ø Ø"Ùuñ	ð (Ø Ø"Ùvñ	ñK+<
ˆð\ <C¿=¹=ÈÓ;MÖ#N°C C§I¡I¥KÐ#NÐÐ#NØ)ò 		NˆHØ˜>Ñ)Ø'¨Ñ1�Ø× Ñ Ø˜8Ñ$Ø  ™/Ø"ŸJ™J y°&Ó9ð !õ ô —
‘
Ð6°x°jÀÐBÈÖMð		Nð !ò 	+ˆEØˆJØ-ò T�Ø˜~Ò-Ø×%Ñ%Ð&K n°XÑ&>¸{Ñ&KÈEÓ&RÕSðTò Ø�—‘˜zÒ*ð	+ô 	�
‰
�5Õùò+ $Os   Â<FÚupdatec                 óÒ   — t        d„ |D «       «      }|rt        d„ |D «       «      nd}t        | «      }|j                  j                  |||¬«      }t	        j
                  |¬«       y)z(Update an existing model's configurationc              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­wrs   ru   rv   s     r   ry   zupdate_model.<locals>.<genexpr>3  rz   r{   c              3   ó@   K  — | ]  }|j                  d d«      –— Œ y­wrs   ru   r}   s     r   ry   zupdate_model.<locals>.<genexpr>4  r   r{   N)r   r   r   rP   )r    rF   rH   r»   rb   rc   )rA   r   ro   rp   r   r   rj   r‚   s           r   Úupdate_modelr¿   !  sb   € ô$ Ñ>¸Ô>Ó>€LÙ?CœÑ;°dÔ;Ô;È€Jä! #Ó&€FØ—M‘M×(Ñ(ØØ!Øð )ó €Fô
 	‡O�O˜Ö r   c                 ó\  ‡— | j                  d«      }| j                  d«      }| j                  di «      }|r|sy|j                  d«      }|rt        |t        «      sy|r|j                  |«      sy|j                  dg «      }‰r&t        |t        «      syt        ˆfd„|D «       «      syy)	Nr   r&   r   Fr$   r   c              3   ód   •K  — | ]'  }t        |t        «      xr ‰j                  |«      –— Œ) y ­w)N)ra   r   Úsearch)rw   ÚgroupÚaccess_group_regexs     €r   ry   z _filter_model.<locals>.<genexpr>N  s-   øè ø€ ÒjÐSX”:˜e¤SÓ)ÒNÐ.@×.GÑ.GÈÓ.NÓNÑjùs   ƒ-0T)r)   ra   r   rÂ   r!   Úany)r$   Úmodel_regexrÄ   r   r   r   r   r   s     `     r   Ú_filter_modelrÇ   ?  sŸ   ø€ ØŸ	™	 ,Ó/€JØŸ)™)Ð$4Ó5€LØŸ	™	 ,°Ó3€JÙ™\ØØ"×&Ñ& wÓ/€HÙœ: h´Ô4ØÙ˜;×-Ñ-¨hÔ7ØØ%Ÿ>™>¨/¸2Ó>€MÙÜ˜-¬Ô.ØÜÓjÐ\iÔjÔjØØr   Úadded_modelsÚtable_titlec                 óV  — | sy t         j                  j                  |¬«      }|j                  dd¬«       |j                  dd¬«       |j                  dd¬«       | D ]3  }|j	                  |j
                  |j                  |j                  «       Œ5 t        j                  |«       y )	NrR   z
Model NamerU   rV   r”   rY   zAccess Groupsr[   )	rb   rJ   rd   re   rh   r   r   r   ri   )rÈ   rÉ   rJ   r�   s       r   Ú_print_models_tablerË   S  s”   € ÙØÜ—:‘:×#Ñ#¨+Ð#Ó6€EØ	×Ñ�\¨ÐÔ0Ø	×ÑÐ%¨WÐÔ5Ø	×Ñ�_¨IÐÔ6Øò EˆØ�‰�a—l‘l A§J¡J°×0CÑ0CÕDðEä‡J�JˆuÕr   c                 ó�  — t         j                  j                  d¬«      }|j                  dd¬«       |j                  dd¬«       | j	                  «       D ])  \  }}|j                  t        |«      t        |«      «       Œ+ t        | j                  «       «      }|j                  dd	|› d
�«       t        j                  |«       y )NzModel Import SummaryrR   ÚProviderrU   rV   ÚCountrY   z[bold]Total[/bold]z[bold]z[/bold])
rb   rJ   rd   re   Úitemsrh   r   ÚsumÚvaluesri   )Úprovider_countsÚsummary_tabler   ÚcountÚtotals        r   Ú_print_summary_tablerÖ   _  s¯   € ÜŸ:™:×+Ñ+Ð2HÐ+ÓI€MØ×Ñ˜Z¨vÐÔ6Ø×Ñ˜W¨GÐÔ4à*×0Ñ0Ó2ò 9‰ˆ�%Ø×Ñœc (›m¬S°«ZÕ8ð9ô �×-Ñ-Ó/Ó0€EØ×ÑÐ.°&¸¸¸wÐ0GÔHä‡J�Jˆ}Õr   Ú	yaml_filec                 óü   — t        | d«      5 }t        j                  |«      }ddd«       rd|vrt        j                  d«      ‚|d   }t        |t        «      st        j                  d«      ‚|S # 1 sw Y   ŒPxY w)z2Load and validate the model list from a YAML file.ÚrNÚ
model_listz@YAML file must contain a 'model_list' key with a list of models.z1'model_list' must be a list of model definitions.)ÚopenÚyamlÚ	safe_loadrˆ   ÚClickExceptionra   r!   )r×   ÚfrQ   rÚ   s       r   Úget_model_list_from_yaml_filerà   m  sy   € ä	ˆi˜Ó	ð ( Ü—n‘n QÓ'ˆ÷(á�< tÑ+Ü×"Ñ"Ð#eÓfÐfØ˜\Ñ*€JÜ�j¤$Ô'Ü×"Ñ"Ð#VÓWÐWØÐ÷(ð (ús   �A2Á2A;c                 ó¬   — |rt        j                  |«      nd}|rt        j                  |«      nd}| D �cg c]  }t        |||«      sŒ|‘Œ c}S c c}w )z6Return a list of models that pass the filter criteria.N)ÚreÚcompilerÇ   )rÚ   Úonly_models_matching_regexÚ!only_access_groups_matching_regexrÆ   rÄ   r$   s         r   Ú_get_filtered_model_listræ   y  sK   € áC]œŸ™Ð$>Ô?Ðcg€KÙJkœŸ™Ð$EÔFÐquÐØ)Öc�e¬]¸5À+ÐOaÕ-bŠEÒcÐcùÒcs   ·AÁ
AÚdry_runc                 ó
   — | ryy)NzLModels that would be imported if [yellow]--dry-run[/yellow] was not providedzModels Importedr#   )rç   s    r   Ú_import_models_get_table_titleré   €  s   € ÙØ]à r   ÚimportF)ÚexistsÚdir_okayÚreadable)rL   z	--dry-runz7Show what would be imported without making any changes.)Úis_flagrN   z--only-models-matching-regexzFOnly import models where litellm_params.model matches the given regex.z#--only-access-groups-matching-regexz_Only import models where at least one item in model_info.access_groups matches the given regex.rä   rå   c                 óÄ  — t        t        «      }g }t        |«      }t        |||«      }|st	        | «      }	|D ]t  }
t        |
«      }|s=	 	j                  j                  |j                  |j                  |j                  ¬«       |j                  |«       ||j                  xx   dz  cc<   Œv t        |«      }t        ||«       t!        |«       y# t        $ r Y ŒXw xY w)z9Import models from a YAML file and add them to the proxy.r€   r(   N)r   rg   rà   ræ   rF   r+   rH   r�   r   r   r   Ú	Exceptionr²   r   ré   rË   rÖ   )rA   r×   rç   rä   rå   rÒ   rÈ   rÚ   Úfiltered_model_listrj   r$   Úmodel_info_objrÉ   s                r   Úimport_modelsró   ‡  së   € ô4 .9¼Ó-=€OØ/1€LÜ5°iÓ@€JÜ!9ØÐ.Ð0Qó"Ðñ Ü% cÓ*ˆà$ò 6ˆÜ6°uÓ=ˆÙðØ—‘×!Ñ!Ø-×8Ñ8Ø!/×!<Ñ!<Ø-×8Ñ8ð "ô ð 	×Ñ˜NÔ+Ø˜×/Ñ/Ó0°AÑ5Ô0ð6ô 8¸Ó@€KÜ˜ kÔ2Ü˜Õ)øô ò Ùðús   Á
<CÃ	CÃC)r   N)2râ   Úcollectionsr   Údataclassesr   r   Útypingr   r   r   rˆ   rb   rÜ   r   r
   r   r    r   r+   r6   rg   r:   r>   r@   ÚContextrF   rÃ   rH   ÚcommandÚoptionÚChoiceÚpass_contextrl   ÚargumentÚtuplerƒ   r†   rŠ   rº   r¿   rÇ   r!   rË   rÖ   rà   ræ   Úboolré   ÚPathró   r#   r   r   ú<module>r      sª  ðã 	Ý #Ý !Ý ß &Ñ &ó Û Û õ ð ÷
Kð 
Kó ð
Kð¨¨c°3¨h©ð ¸Mó ð$	%¨c°D©jð 	%¸Só 	%ð  d¡
ð ¨só ð
 E¨D¡Lð 
°Só 
ðL�u—}‘}ð L¨ó Lð
 €‡�ƒò5ó ð5ð ‡��ÓØ€‡�ØØØ	ˆ�‰�w Ð'Ó	(ØØ	(ôð ×Ñð�U—]‘]ð °7¸?Ñ3Kð ÐPTò ó óó ððD ‡��ÓØ€‡��ÓØ€‡�ØØØØ	Qô	ð €‡�ØØØØ	Kô	ð ×Ñð!�5—=‘=ð !¨cð !¸%ÀÀSÀ¹/ð !ÐQVÐWZÐ\_ÐW_ÑQ`ð !Ðeiò !ó óóó ó ð!ð ‡��ÓØ€‡��
ÓØ×Ñð!�e—m‘mð !¨sð !°tò !ó ó ó ð!ð ‡��ÓØ€‡�ˆf�jÐ'DÔEØ€‡�ˆh˜Ð+JÔKØ×Ñð!�5—=‘=ð !¨C°$©Jð !ÀCÈ$ÁJð !ÐSWò !ó ó Ló Fó ð!ð ‡��ÓØ€‡�ØØØ	ˆ�‰�w Ð'Ó	(ØØ	(ôð €‡�ØØØ4ð 
Zô	ð ×ÑðO˜Ÿ™ð O°w¸Ñ7Oð OÐZ]ð OÐbfò Oó óóó ðOðd ‡��ÓØ€‡��
ÓØ€‡�ØØØØ	Qô	ð €‡�ØØØØ	Kô	ð ×Ñð!�e—m‘mð !¨sð !¸5ÀÀcÀ¹?ð !ÐRWÐX[Ð]`ÐX`ÑRað !Ðfjò !ó óóó ó ð!òð(	 d¨=Ñ&9ð 	Èó 	òð	¨Sð 	°T¸$¸sÀC¸x¹.Ñ5Ió 	òdð!¨Dð !°Só !ð ‡��ÓØ€‡�� * %§*¡*°DÀ5ÐSWÔ"XÔYØ€‡�ØØØ	Bôð
 €‡�Ø"ØØ	Qôð
 €‡�Ø)ØØ	jôð
 ×Ñð"*Ø	�‰ð"*àð"*ð ð"*ð !$ d¡
ð	"*ð
 (+¨T¡zð"*ð 
ò"*ó óóóó Zó ñ$"*r   