§
    éƒtj1  ã                  óT  — d Z ddlmZ ddlZddlmZ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mZ ddlmZ ddlmZmZmZmZ dd	lmZmZmZ e	d
         Ze G d„ d¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         Z e G d„ d¦  «        ¦   «         Z!dd„Z"g d¢Z#dd„Z$dd„Z%d d„Z&dS )!uI   Query planner â€” maps intents to SQL / search / graph / multi-doc tools.é    )ÚannotationsN)Ú	dataclassÚfield)ÚAnyÚLiteral)ÚComputedResultÚdetect_merchant_in_questionÚdocument_inventoryÚdocument_profileÚget_assertionÚgroup_by_counterpartyÚlookup_identifierÚsum_direction)Údetect_id_query)Úcompare_documentsÚfind_duplicatesÚreconcile_amountsÚtimeline_activity)ÚVerifiedAnswerÚrender_computedÚshould_abstain)Ú	inventoryÚprofileÚ	lookup_idÚ	assertionÚsum_outÚsum_inÚ	group_outÚcompareÚ	reconcileÚtimelineÚ
duplicatesÚ
search_ragÚabstainÚpassthroughc                  óJ   — e Zd ZU ded<    ee¬¦  «        Zded<   dZded<   d	S )
ÚPlanStepÚToolNameÚtool©Údefault_factoryúdict[str, Any]ÚargsÚ ÚstrÚreasonN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   Údictr-   r0   © ó    ú+/var/www/html/CA-Chatbot/app/fdi/planner.pyr'   r'   )   sJ   € € € € € € à€N€N�NØ ˜5°Ð6Ñ6Ô6€DÐ6Ð6Ð6Ñ6Ø€FÐÐÐÑÐÐr7   r'   c                  óP   — e Zd ZU ded<   ded<   ded<    ee¬¦  «        Zded	<   d
S )ÚFdiPlanr/   ÚintentÚfloatÚ
confidencezlist[PlanStep]Ústepsr*   r,   ÚslotsN)r1   r2   r3   r4   r   r5   r?   r6   r7   r8   r:   r:   0   sQ   € € € € € € à€K€K�KØÐÐÑØÐÐÑØ!˜E°$Ð7Ñ7Ô7€EÐ7Ð7Ð7Ñ7Ð7Ð7r7   r:   c                  ón   — e Zd ZU ded<   dZded<   dZded<   d	Zd
ed<   dZded<   dZded<   dZ	ded<   dS )ÚFdiTurnResultÚboolÚhandledNz
str | NoneÚanswerg        r<   r=   Úunknownr/   r;   zFdiPlan | NoneÚplanzVerifiedAnswer | NoneÚverifiedFÚ
prefer_rag)
r1   r2   r3   r4   rD   r=   r;   rF   rG   rH   r6   r7   r8   rA   rA   8   s�   € € € € € € à€M€M�MØ€FÐÐÐÑØ€JÐÐÐÑØ€FÐÐÐÑØ€DÐÐÐÑØ&*€HÐ*Ð*Ð*Ñ*Ø€JÐÐÐÑÐÐr7   rA   Úquestionr/   Úreturnú!tuple[str, float, dict[str, Any]]c                óz  — | pd                      ¦   «         }i }t          j        d|¦  «        r*t          |                     ¦   «         ¦  «        dk    rdd|fS t          j        d|¦  «        rdd|fS t          j        d|¦  «        r)t          j        d	|¦  «        st          |¦  «        sd
d|fS t          j        d|¦  «        rdd|fS t          j        d|¦  «        rdd|fS t          j        d|¦  «        rdd|fS t          j        d|¦  «        rdd|fS t          |¦  «        }|r|\  |d<   |d<   dd|fS t          j        d|¦  «        rt          j        d|¦  «        sdd|fS t          j        d|¦  «        rdd|fS t          j        d|¦  «        rd d|fS t          |¦  «        }|r||d!<   t          j        d"|¦  «        rd#d|fS t          j        d$|¦  «        rd%d|fS t          j        d&|¦  «        rd'd|fS t          j        d(|¦  «        rd)d*|fS t          j        d+|¦  «        sd,|v rd-d.|fS d/d0|fS )1Nr.   z#(?i)^\s*(hi|hello|hey|thanks|bye)\bé   Úgeneral_chatçÍÌÌÌÌÌì?zc(?i)\b(who\s+are\s+you|are\s+you\s+a\s+(?:boy|girl)|what\s+can\s+you\s+do|how\s+can\s+you\s+help)\bÚassistant_metaz9(?i)\b(how\s+to|what\s+is\s+(?:an?\s+)?(?:llm|pdf|api)\b)z0(?i)\b(my|statement|invoice|document|uploaded)\bÚgeneral_knowledgeg      è?zU(?i)\b(reconcil\w*|match(?:ing)?\s+invoices?|invoice.{0,40}bank|bank.{0,40}invoice)\br    z_(?i)\b(compare\b.{0,40}\b(?:documents?|files?|statements?|years?|pdfs?)|difference\s+between)\br   g)\�Âõ(ì?zC(?i)\b(duplicates?|duplicated|double\s+(?:paid|payment|charge)s?)\br"   zJ(?i)\b(timeline|chronolog|by\s+date|dated\s+activity|recent\s+payments?)\br!   g333333ë?Úid_typeÚid_valuer   gq=
×£pí?zj(?i)\b(which|what)\s+(?:documents?|files?|pdfs?)\b|knowledge\s*base|list\s+(?:my\s+)?(?:documents?|files?)z/(?i)\b(my\s+name|account\s+holder|how\s+much)\bÚcorpus_inventoryz®(?i)\b(summar(?:y|ize)|overview|what\s+is\s+(?:this|the)\s+(?:pdf|document|file)\s+about|analyse|analyze|tell\s+me\s+about\s+(?:this|the)\s+(?:pdf|document|file|statement))\bÚ	summarizezJ(?i)\b(account\s+holder|whose\s+statement|holder\s+name|customer\s+name)\bÚlookup_factÚmerchantzT(?i)\b(how\s+much\s+(?:did\s+i\s+)?(?:spend|paid|pay)|total\s+spent|total\s+spend)\bÚaggregate_spendzS(?i)\b(how\s+much\s+(?:did\s+i\s+)?receiv|total\s+(?:received|income)|money\s+in)\bÚaggregate_incomezK(?i)\b(biggest|top|largest)\s+(?:expenses?|merchants?|payments?|vendors?)\bÚaggregate_groupzQ(?i)\b(net\s+profit|total\s+assets|portfolio\s+value|gross\s+pay|net\s+pay|emi)\bÚmetric_lookupg=
×£p=ê?z<(?i)^\s*(what|who|where|when|why|how|which|show|list|find)\bÚ?Úexplaingš™™™™™á?rE   gš™™™™™Ù?)ÚstripÚreÚsearchÚlenÚsplitr   r	   )rI   Úqr?   ÚidqrW   s        r8   Úclassify_fdi_intentre   C   s#  € Ø	ˆ�R×ÒÑ Ô €AØ€Eå	„yÐ7¸Ñ;Ô;ð *ÅÀAÇGÂGÁIÄIÁÄÐRSÒ@SÐ@SØ˜s EÐ)Ð)Ý	„yØnØ	ñô ð ,ð    eÐ+Ð+Ý	„yÐMÈqÑQÔQð 4ÕZ\ÔZcØ;¸Qñ[ô [ð 4õ ˜qÑ!Ô!ð 	4Ø&¨¨eÐ3Ð3õ 
„yð	4à	ñô ð 'ð
 ˜C Ð&Ð&Ý	„yð	#à	ñô ð &ð
 ˜$ Ð%Ð%Ý	„yØNØ	ñô ð )ð ˜T 5Ð(Ð(Ý	„yÐ^Ð`aÑbÔbð 'Ø˜4 Ð&Ð&å
˜!Ñ
Ô
€CØ
ð (Ø.1Ñ+ˆˆiÑ˜% 
Ñ+Ø˜D %Ð'Ð'å	„yð	Cà	ñô ð .õ ŒiÐJÈAÑNÔNð	.ð
 " 3¨Ð-Ð-å	„yð	aà	ñô ð (ð
 ˜D %Ð'Ð'å	„yÐ^Ð`aÑbÔbð *Ø˜d EÐ)Ð)å*¨1Ñ-Ô-€HØð %Ø$ˆˆjÑå	„yÐhÐjkÑlÔlð -Ø  # uÐ,Ð,Ý	„yÐgÐijÑkÔkð .Ø! 3¨Ð-Ð-Ý	„yÐ_ÐabÑcÔcð .Ø  $¨Ð-Ð-Ý	„yÐeÐghÑiÔið ,Ø  eÐ+Ð+å	„yÐPÐRSÑTÔTð &ÐX[Ð_`ÐX`ÐX`Ø˜$ Ð%Ð%Ø�c˜5Ð Ð r7   ))z(?i)\bnet\s+profit\bÚ
net_profit)z(?i)\btotal\s+assets\bÚtotal_assets)z(?i)\bportfolio\s+value\bÚportfolio_value)z(?i)\bgross\s+pay\bÚ	gross_pay)z(?i)\bnet\s+pay\bÚnet_pay)z(?i)\bemi\bÚ
emi_amount)z(?i)\binvoice\s+total\bÚinvoice_total)z&(?i)\btax(?:able)?\s+(?:value|total)\bÚ	tax_totalc           	     óf  — t          | ¦  «        \  }}}g }|dv r&|                     t          dd¬¦  «        ¦  «         �nà|dk    r&|                     t          dd¬¦  «        ¦  «         �n´|dk    rR|                     t          d|                     d	¦  «        |                     d
¦  «        pddœd¬¦  «        ¦  «         �n\|dk    r&|                     t          dd¬¦  «        ¦  «         �n0|dk    r˜|                     t          dd¬¦  «        ¦  «         |                     t          dddid¬¦  «        ¦  «         |                     t          dddid¬¦  «        ¦  «         |                     t          dd¬¦  «        ¦  «         �n’|dk    r‘|                     d¦  «        r/|                     t          dd|d         id¬¦  «        ¦  «         �nH|                     t          dddid¬¦  «        ¦  «         |                     t          dd ¬¦  «        ¦  «         �nû|d!k    rM|                     t          dddid¬¦  «        ¦  «         |                     t          d"d#¬¦  «        ¦  «         �n¨|d$k    r&|                     t          d%d&¬¦  «        ¦  «         �n||d'k    r{d }t          D ] \  }}t          j        || pd¦  «        r|} nŒ!|r*|                     t          dd|id(|› �¬¦  «        ¦  «         |                     t          dd)¬¦  «        ¦  «         nû|d*k    r%|                     t          d*d+¬¦  «        ¦  «         nÐ|d,k    r%|                     t          d,d-¬¦  «        ¦  «         n¥|d.k    r%|                     t          d.d/¬¦  «        ¦  «         nz|d0k    r%|                     t          d0d1¬¦  «        ¦  «         nO|d2k    r%|                     t          dd3¬¦  «        ¦  «         n$|                     t          dd4¬¦  «        ¦  «         t          ||||¬5¦  «        S )6N>   rN   rP   rQ   r%   znon-document intent)r0   rT   r   zlist indexed docsr   rR   rS   r.   )rR   Ú
value_normzexact identifier lookuprV   r   zholder / doc profilerU   zdoc profiler   ÚkindÚtotal_spendzheader spendÚtotal_incomezheader incomer#   znarrative enrichmentrX   rW   r   zmerchant spendzprefer header totalzfallback sum outflowsrY   r   zfallback sum inflowsrZ   r   zgroup by counterpartyr[   zmetric Úfallbackr   zmulti-doc comparer    u   invoiceâ†”bank matchr"   zduplicate detectionr!   zdated activityr]   zopen document questionzfallback retrieval)r;   r=   r>   r?   )re   Úappendr'   ÚgetÚ_METRIC_KIND_MAPr_   r`   r:   )rI   r;   Úconfr?   r>   rp   ÚpatÚks           r8   Ú
build_planrz   �   s‹  € Ý-¨hÑ7Ô7Ñ€FˆD�%Ø€EàÐHÐHÐHØ�Š•X˜mÐ4IÐJÑJÔJÑKÔKÐKÑKØ	Ð%Ò	%Ð	%Ø�Š•X˜kÐ2EÐFÑFÔFÑGÔGÐGÑGØ	�;Ò	Ð	Ø�ŠÝØØ!ŸIšI iÑ0Ô0ÀÇ	Â	È*Ñ@UÔ@UÐ@[ÐY[Ð\Ð\Ø0ðñ ô ñ	
ô 	
ð 	
ñ 	
ð 
�=Ò	 Ð	 Ø�Š•X˜iÐ0FÐGÑGÔGÑHÔHÐHÑHØ	�;Ò	Ð	Ø�Š•X˜i°Ð>Ñ>Ô>Ñ?Ô?Ð?Ø�Š•X˜k¨F°MÐ+BÈ>ÐZÑZÔZÑ[Ô[Ð[Ø�Š•X˜k¨F°NÐ+CÈOÐ\Ñ\Ô\Ñ]Ô]Ð]Ø�Š•X˜lÐ3IÐJÑJÔJÑKÔKÐKÑKØ	Ð$Ò	$Ð	$Ø�9Š9�ZÑ Ô ð 	NØ�LŠL� )¨j¸%À
Ô:KÐ-LÐUeÐfÑfÔfÑgÔgÐgÑgà�LŠL� +°¸Ð/FÐOdÐeÑeÔeÑfÔfÐfØ�LŠL� )Ð4KÐLÑLÔLÑMÔMÐMÑMØ	Ð%Ò	%Ð	%Ø�Š•X˜k¨F°NÐ+CÐLaÐbÑbÔbÑcÔcÐcØ�Š•X˜hÐ/EÐFÑFÔFÑGÔGÐGÑGØ	Ð$Ò	$Ð	$Ø�Š•X˜kÐ2IÐJÑJÔJÑKÔKÐKÑKØ	�?Ò	"Ð	"ØˆÝ&ð 	ð 	‰FˆC�ÝŒy˜˜h˜n¨"Ñ-Ô-ð Ø�Ø�ðð ð 	YØ�LŠL� +°¸¨~ÐFVÐPTÐFVÐFVÐWÑWÔWÑXÔXÐXØ�Š•X˜l°:Ð>Ñ>Ô>Ñ?Ô?Ð?Ð?Ø	�9Ò	Ð	Ø�Š•X˜iÐ0CÐDÑDÔDÑEÔEÐEÐEØ	�;Ò	Ð	Ø�Š•X˜kÐ2HÐIÑIÔIÑJÔJÐJÐJØ	�<Ò	Ð	Ø�Š•X˜lÐ3HÐIÑIÔIÑJÔJÐJÐJØ	�:Ò	Ð	Ø�Š•X˜jÐ1AÐBÑBÔBÑCÔCÐCÐCØ	�9Ò	Ð	Ø�Š•X˜lÐ3KÐLÑLÔLÑMÔMÐMÐMà�Š•X˜lÐ3GÐHÑHÔHÑIÔIÐIå˜&¨T¸ÀeÐLÑLÔLÐLr7   rF   Úorg_idÚagent_idc               óº
  — t          d„ | j        D ¦   «         ¦  «        rt          d| j        | d¬¦  «        S g }d}| j        D �]}|j        dk    r%|                     t          ||¬¦  «        ¦  «         Œ3|j        dk    r%|                     t          ||¬¦  «        ¦  «         Œc|j        dk    ru|                     t          ||t          |j
                             d¦  «        pd	¦  «        t          |j
                             d
¦  «        pd¦  «        ¬¦  «        ¦  «         Œã|j        dk    rL|                     t          ||t          |j
                             d¦  «        ¦  «        ¬¦  «        ¦  «         �Œ:|j        dk    r@|                     t          ||d|j
                             d¦  «        ¬¦  «        ¦  «         �Œ…|j        dk    r'|                     t          ||d¬¦  «        ¦  «         �Œ·|j        dk    r'|                     t          ||d¬¦  «        ¦  «         �Œé|j        dk    r&|                     t          ||¬¦  «        ¦  «         �Œ|j        dk    r&|                     t!          ||¬¦  «        ¦  «         �ŒK|j        dk    r&|                     t#          ||¬¦  «        ¦  «         �Œ||j        dk    r&|                     t%          ||¬¦  «        ¦  «         �Œ­|j        dk    rd}�Œ¼|j        dk    rDt          |j
                             d¦  «        pd ¦  «        }t          d|d!| j        | ¬"¦  «        c S �Œd#„ |D ¦   «         }|r|st          d| j        | d¬¦  «        S |sNt'          |r|d$         nt)          dd%d&¬'¦  «        ¦  «        }t          d|j        |j        | j        | ||¬(¦  «        S |d$         }	|D ]:}
|
j        d)v r/|
j        r(|
j        d$                              d*¦  «        d+k    r|
}	 nŒ;| j        d,k    s|rgt3          |¦  «        d-k    rTd.„ |D ¦   «         }d/                     |¦  «        }t7          d0„ |D ¦   «         ¦  «        }t          d||| j        | |¬1¦  «        S t'          |	¦  «        }|j        st;          |j        ¦  «        rŽ| j                             d2¦  «        r\|d-d …         D ]Q}
t'          |
¦  «        }|j        s9t;          |j        ¦  «        s%t          d|j        |j        | j        | |¦  «        c S ŒRt          d| j        | d¬¦  «        S t          d|j        |j        | j        | ||¬(¦  «        S )3Nc              3  ó,   K  — | ]}|j         d k    V — ŒdS )r%   N)r)   )Ú.0Úss     r8   ú	<genexpr>zexecute_plan.<locals>.<genexpr>Þ   s)   è è € Ð
7Ð
7 qˆ1Œ6�]Ò"Ð
7Ð
7Ð
7Ð
7Ð
7Ð
7r7   F)r;   rF   rH   r   ©r{   r|   r   r   rR   ÚOTHERro   r.   )r{   r|   rR   ro   r   rp   )r{   r|   rp   r   ÚoutrW   )r{   r|   Ú	directionÚcounterparty_liker   Úin)r{   r|   r…   r   r   r    r!   r"   r#   Tr$   Úmessagez@I don't have enough structured evidence to answer that reliably.rO   )rD   r=   r;   rF   c                ó    — g | ]}|j         ¯	|‘ŒS r6   )Úok©r   Úrs     r8   ú
<listcomp>z execute_plan.<locals>.<listcomp>  s   € Ð-Ð-Ð-˜¨¬Ð-�!Ð-Ð-Ð-r7   r   ÚnonezNo structured result.)rˆ   )rD   r=   r;   rF   rG   rH   >   rq   rr   ÚsourceÚheaderrU   é   c                ó6   — g | ]}t          |¦  «        j        ‘ŒS r6   )r   Útextr‹   s     r8   r�   z execute_plan.<locals>.<listcomp>.  s#   € Ð=Ð=Ð=¨Q• Ñ#Ô#Ô(Ð=Ð=Ð=r7   z

c              3  ó(   K  — | ]}|j         pd V — ŒdS )gffffffæ?N)r=   r‹   s     r8   r�   zexecute_plan.<locals>.<genexpr>0  s)   è è € Ð=Ð=¨Q�A”LÐ' CÐ=Ð=Ð=Ð=Ð=Ð=r7   )rD   r=   r;   rF   rH   Ú	aggregate)Úanyr>   rA   r;   r)   rt   r
   r   r   r/   r-   ru   r   r   r   r   r   r   r   r   r   r“   r=   ÚmetricÚ
group_rowsra   ÚjoinÚminr$   r   Ú
startswith)rF   r{   r|   ÚresultsÚ	wants_ragÚstepÚmsgÚ
ok_resultsrG   Ú	preferredrŒ   Úpartsr“   rw   Úv2s                  r8   Úexecute_planr¤   Ø   s  € õ Ð
7Ð
7¨D¬JÐ
7Ñ
7Ô
7Ñ7Ô7ð UÝ˜U¨4¬;¸TÈeÐTÑTÔTÐTà$&€GØ€IØ”
ð .bñ .bˆØŒ9˜Ò#Ð#Ø�NŠNÕ-°VÀhÐOÑOÔOÑPÔPÐPÐPØŒY˜)Ò#Ð#Ø�NŠNÕ+°6ÀHÐMÑMÔMÑNÔNÐNÐNØŒY˜+Ò%Ð%Ø�NŠNÝ!Ø!Ø%Ý ¤	§¢¨iÑ 8Ô 8Ð C¸GÑDÔDÝ" 4¤9§=¢=°Ñ#>Ô#>Ð#DÀ"ÑEÔEð	ñ ô ñô ð ð ð ŒY˜+Ò%Ð%Ø�NŠNÝ V°hÅSÈÌÏÊÐW]ÑI^ÔI^ÑE_ÔE_Ð`Ñ`Ô`ñô ð ñ ð ŒY˜)Ò#Ð#Ø�NŠNÝØ!Ø%Ø#Ø&*¤i§m¢m°JÑ&?Ô&?ð	ñ ô ñô ð ñ ð ŒY˜(Ò"Ð"Ø�NŠN�=°ÀÐUYÐZÑZÔZÑ[Ô[Ð[Ñ[ØŒY˜+Ò%Ð%Ø�NŠNÕ0¸ÈÐ]bÐcÑcÔcÑdÔdÐdÑdØŒY˜)Ò#Ð#Ø�NŠNÕ,°FÀXÐNÑNÔNÑOÔOÐOÑOØŒY˜+Ò%Ð%Ø�NŠNÕ,°FÀXÐNÑNÔNÑOÔOÐOÑOØŒY˜*Ò$Ð$Ø�NŠNÕ,°FÀXÐNÑNÔNÑOÔOÐOÑOØŒY˜,Ò&Ð&Ø�NŠN�?°&À8ÐLÑLÔLÑMÔMÐMÑMØŒY˜,Ò&Ð&ØˆI‰IØŒY˜)Ò#Ð#ÝØ”	—’˜iÑ(Ô(ð VØUñô ˆCõ ! ¨c¸cÈ$Ì+Ð\`ÐaÑaÔaÐaÐaÐañ $ð .Ð-˜WÐ-Ñ-Ô-€Jàð T˜ð TÝ˜U¨4¬;¸TÈdÐSÑSÔSÐSàð 
Ý"Ø!ÐeˆG�AŒJˆJ¥~°e¸VÐMdÐ'eÑ'eÔ'eñ
ô 
ˆõ ØØ”=ØÔ*Ø”;ØØØ ð
ñ 
ô 
ð 	
ð ˜1”€IØð ð ˆØŒ8Ð6Ð6Ð6¸1¼<Ð6ØŒ|˜AŒ×"Ò" 8Ñ,Ô,°Ò8Ð8Ø�	Ø�øà„{�kÒ!Ð! iÐ!µC¸
±O´OÀaÒ4GÐ4GØ=Ð=°*Ð=Ñ=Ô=ˆØ�{Š{˜5Ñ!Ô!ˆÝÐ=Ð=°*Ð=Ñ=Ô=Ñ=Ô=ˆÝØØØØ”;ØØ ð
ñ 
ô 
ð 	
õ ˜yÑ)Ô)€HØÔð T�>¨(Ô*=Ñ>Ô>ð TØŒ;×!Ò! +Ñ.Ô.ð 	^Ø   ”^ð ^ð ^�Ý$ QÑ'Ô'�Ø”zð ^­.¸¼Ñ*GÔ*Gð ^Ý(¨¨r¬w¸¼ÀtÄ{ÐTXÐZ\Ñ]Ô]Ð]Ð]Ð]øÝ˜U¨4¬;¸TÈdÐSÑSÔSÐSåØØŒ}ØÔ&ØŒ{ØØØðñ ô ð r7   c                óD   — t          | ¦  «        }t          |||¬¦  «        S )Nr‚   )rz   r¤   )rI   r{   r|   rF   s       r8   Úrun_fdi_turnr¦   N  s&   € õ �hÑÔ€DÝ˜ V°hÐ?Ñ?Ô?Ð?r7   )rI   r/   rJ   rK   )rI   r/   rJ   r:   )rF   r:   r{   r/   r|   r/   rJ   rA   )rI   r/   r{   r/   r|   r/   rJ   rA   )'Ú__doc__Ú
__future__r   r_   Údataclassesr   r   Útypingr   r   Úapp.fdi.computer   r	   r
   r   r   r   r   r   Úapp.fdi.identifiersr   Úapp.fdi.multidocr   r   r   r   Úapp.fdi.verifyr   r   r   r(   r'   r:   rA   re   rv   rz   r¤   r¦   r6   r7   r8   ú<module>r¯      s<  ðØ OÐ Oà "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ð Ð ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 0Ð /Ð /Ð /Ð /Ð /Ø eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eÐ eØ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jàðô€ð$ ðð ð ð ð ñ ô ñ „ðð ð8ð 8ð 8ð 8ð 8ñ 8ô 8ñ „ð8ð ðð ð ð ð ñ ô ñ „ððK!ð K!ð K!ð K!ð\	ð 	ð 	Ð ð8Mð 8Mð 8Mð 8Mðvsð sð sð sðl@ð @ð @ð @ð @ð @r7   