§
    …Y®jS0  ã                  ó  — d Z ddlmZ ddlmZmZ ddlZddlmZm	Z	m
Z
mZmZmZ ddlZ	 ddlmZ n# e$ r dZY nw xY we G d„ d¦  «        ¦   «         Ze G d	„ d
¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         Z G d„ d¦  «        ZdS )u   AutoPOE2 - Module Nháº­n Diá»‡n Ä�áº¥u TrÆ°á»�ng Boss & Cá»•ng SÆ°Æ¡ng MÃ¹ (Doc 69 Â§3.5).
=============================================================================
Module thá»‹ giÃ¡c mÃ¡y tÃ­nh chuyÃªn biá»‡t cho SÆ° Ä‘oÃ n 2:
- Nháº­n diá»‡n cá»•ng sÆ°Æ¡ng mÃ¹ Ä‘áº¥u trÆ°á»�ng Boss (Boss Fog Door / Arena Gate) qua Contour & Hue/Luminance gradient.
- Nháº­n diá»‡n thanh mÃ¡u Boss trÃªn Ä‘á»‰nh mÃ n hÃ¬nh (Boss Health Bar & Phase State).
- Ä�iá»�u phá»‘i tráº¡ng thÃ¡i tiá»�n kÃ­ch hoáº¡t (Pre-buff Stance / Flasks) trÆ°á»›c khi bÆ°á»›c vÃ o Ä‘áº¥u trÆ°á»�ng.
- Tá»‘c Ä‘á»™ xá»­ lÃ½ siÃªu tá»‘c (< 2.5ms) báº±ng vector hÃ³a thuáº§n NumPy, hoÃ n toÃ n khÃ´ng gÃ¢y giáº­t lag combat loop.

TuÃ¢n thá»§ nghiÃªm ngáº·t:
- Rule 1: Python 3.11 Cold Path Tier 2.
- Rule 4: Module hÃ³a Ä‘á»™c láº­p, tráº§n < 500 dÃ²ng, Single Responsibility Principle.
- Rule 5: Há»— trá»£ náº¡p áº£nh tháº­t tá»« captures/ vÃ  synthetic mock.
é    )Úannotations)Ú	dataclassÚfieldN)ÚAnyÚDictÚListÚOptionalÚTupleÚUnion)ÚImagec                  óZ   — e Zd ZU dZ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 )ÚArenaGateDetectionuC   Káº¿t quáº£ nháº­n diá»‡n cá»•ng sÆ°Æ¡ng mÃ¹ Ä‘áº¥u trÆ°á»�ng Boss.FÚboolÚdetectedNzOptional[Tuple[int, int]]Úgate_screen_posç        ÚfloatÚ
confidenceú#Optional[Tuple[int, int, int, int]]Úbounding_boxÚnoneÚstrÚ	gate_type)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   © ó    úEC:\Projects\AutoPOE2\src\assistant_tool\vision\boss_arena_detector.pyr   r      sm   € € € € € € àMÐMØ€HÐÐÐÑØ15€OÐ5Ð5Ð5Ñ5Ø€JÐÐÐÑØ8<€LÐ<Ð<Ð<Ñ<Ø€IÐÐÐÑÐÐr    r   c                  óh   — e Zd ZU dZ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 )ÚBossHealthBarDetectionuC   Káº¿t quáº£ nháº­n diá»‡n thanh mÃ¡u Boss trÃªn Ä‘á»‰nh mÃ n hÃ¬nh.Fr   r   r   r   Úhealth_ratioÚ	is_phasedÚ r   Ú	boss_nameNr   r   r   )r   r   r   r   r   r   r$   r%   r'   r   r   r   r    r!   r#   r#   '   s~   € € € € € € àMÐMØ€HÐÐÐÑØ€LÐÐÐÑØ€IÐÐÐÑØ€IÐÐÐÑØ8<€LÐ<Ð<Ð<Ñ<Ø€JÐÐÐÑÐÐr    r#   c                  óž   — e Zd ZU dZdZded<   dZded<   dZded<   dZded	<    e	e
¬
¦  «        Zded<    e	e¬
¦  «        Zded<   dZded<   dS )ÚBossArenaStateu1   Tráº¡ng thÃ¡i tá»•ng há»£p Ä‘áº¥u trÆ°á»�ng Boss.Fr   Úin_arenaÚgate_detectedÚboss_bar_activeÚNORMAL_CLEARr   Úrecommended_action)Údefault_factoryr   Ú	gate_infor#   Úboss_bar_infor   r   Ú
latency_msN)r   r   r   r   r*   r   r+   r,   r.   r   r   r0   r#   r1   r2   r   r    r!   r)   r)   2   s¬   € € € € € € à;Ð;Ø€HÐÐÐÑØ€MÐÐÐÑØ!€OÐ!Ð!Ð!Ñ!Ø,ÐÐ,Ð,Ð,Ñ,Ø$) EÐ:LÐ$MÑ$MÔ$M€IÐMÐMÐMÑMØ,1¨EÐBXÐ,YÑ,YÔ,Y€MÐYÐYÐYÑYØ€JÐÐÐÑÐÐr    r)   c                  óB   — e Zd ZdZ	 	 	 ddd„Zdd„Zdd„Zdd„Zdd„ZdS ) ÚBossArenaDetectoruQ   Bá»™ nháº­n diá»‡n quang há»�c cá»•ng sÆ°Æ¡ng mÃ¹ vÃ  Ä‘áº¥u trÆ°á»�ng Boss POE2.©i 
  i   çÍÌÌÌÌÌÜ?ç      à?Úref_resolutionúTuple[int, int]Úmin_gate_confidencer   Úmin_boss_bar_confidenceÚreturnÚNonec                ó@   — |\  | _         | _        || _        || _        dS )u4  Khá»Ÿi táº¡o detector.

        Args:
            ref_resolution: Ä�á»™ phÃ¢n giáº£i tham chiáº¿u mÃ n hÃ¬nh (W, H).
            min_gate_confidence: NgÆ°á»¡ng tin cáº­y tá»‘i thiá»ƒu cho cá»•ng sÆ°Æ¡ng mÃ¹.
            min_boss_bar_confidence: NgÆ°á»¡ng tin cáº­y tá»‘i thiá»ƒu cho thanh mÃ¡u Boss.
        N)Úref_wÚref_hr:   r;   )Úselfr8   r:   r;   s       r!   Ú__init__zBossArenaDetector.__init__A   s(   € ð "0ÑˆŒ
�D”JØ#6ˆÔ Ø'>ˆÔ$Ð$Ð$r    Ú	img_inputúUnion[np.ndarray, Any]úOptional[np.ndarray]c                ó  — |€dS t          |t          j        ¦  «        r�|j        t          j        k    r/|j        dk    r$|j        d         dk    r|S |dd…dd…dd…f         S |j        dk    r?|j        d         dk    r.|dd…dd…dd…f                              t          j        ¦  «        S dS t          �Ot          |t          j        ¦  «        r5| 	                    d¦  «        }t          j
        |t          j        ¬¦  «        S dS )ub   Chuyá»ƒn Ä‘á»•i nguá»“n áº£nh Ä‘áº§u vÃ o thÃ nh máº£ng NumPy uint8 RGB vá»›i cÆ¡ cháº¿ Zero-Copy.Né   é   ÚRGB)Údtype)Ú
isinstanceÚnpÚndarrayrJ   Úuint8ÚndimÚshapeÚastyper   ÚconvertÚarray)rA   rC   Úrgbs      r!   Ú_to_numpy_rgbzBossArenaDetector._to_numpy_rgbR   s  € àÐØ�4Ý�i¥¤Ñ,Ô,ð 	ØŒ¥"¤(Ò*Ð*¨y¬~ÀÒ/BÐ/BØ”? 1Ô%¨Ò*Ð*Ø$Ð$Ø     A A A r¨ r Ô*Ð*ØŒ~ Ò"Ð" y¤°qÔ'9¸QÒ'>Ð'>Ø     A A A r¨ r Ô*×1Ò1µ"´(Ñ;Ô;Ð;Ø�4ÝÐ¥¨Iµu´{Ñ!CÔ!CÐØ×#Ò# EÑ*Ô*ˆCÝ”8˜C¥r¤xÐ0Ñ0Ô0Ð0Øˆtr    Úimg_rgbú
np.ndarrayr   c           	     óp  — |j         \  }}}t          |dz  ¦  «        t          |dz  ¦  «        }}t          |dz  ¦  «        t          |dz  ¦  «        }}d}	||||	…|||	…f         }
|
j         \  }}}|dk     s|dk     rt          ¦   «         S |
dd…dd…d	f         |
dd…dd…d
f         |
dd…dd…df         }}}t          j        t          j        ||¦  «        |¦  «        }t          j        t          j        ||¦  «        |¦  «        }||z
  }|dz	  |d
z	  z   |dz	  z   }|dk    |dk    z  |dk    z  }t          j        |d
¬¦  «        }t          j        |dk    ¦  «        d	         }t          |¦  «        dk     rt          ¦   «         S t          j	        |¦  «        }t          j        |d
k    ¦  «        d	         d
z   }t          j
        ||¦  «        }t          |t          t          j        g ¦  «        ¬¦  «        }t          |¦  «        dk     rt          ¦   «         S |d	         |d         }}|||d
z   …dd…f         }t          j        |d	¬¦  «        }t          j        |dk    ¦  «        d	         }t          |¦  «        dk     rt          ¦   «         S |d	         |d         }!} |!| z
  |	z  }"|"t          |dz  ¦  «        k     s|"t          |dz  ¦  «        k    rt          ¦   «         S |dd…| |!d
z   …f         }#t          t          j        |#¦  «        ¦  «        }$|$dk     rt          ¦   «         S |||	z  z   }%||d
z   |	z  z   }&|| |	z  z   }'||!d
z   |	z  z   }(|'|(z   dz  })|%|&z   dz  }*t          t          j        |$dz  dd¦  «        ¦  «        }+|+| j        k     rt          ¦   «         S t          d|)|*f|+|'|%|(|&fd¬¦  «        S )uþ  PhÃ¡t hiá»‡n cá»•ng sÆ°Æ¡ng mÃ¹ Ä‘áº¥u trÆ°á»�ng Boss báº±ng phÃ¢n tÃ­ch Gradient vÃ  Dáº£i sÃ¡ng siÃªu tá»‘c.

        Tá»‘c Ä‘á»™ thá»±c thi: < 1.5ms nhá»� xá»­ lÃ½ máº£ng uint8 4x downsample.
        KhÃ¡ng 100% false positive trÃªn sÃ n Ä‘Ã¡ Hideout nhá»� kiá»ƒm soÃ¡t cháº·t:
        - BÃ¡n kÃ­nh/Bá»� rá»™ng cá»•ng: 6% Ä‘áº¿n 42% chiá»�u rá»™ng mÃ n hÃ¬nh (cá»•ng vÃ²m).
        - Máº­t Ä‘á»™ sÆ°Æ¡ng mÃ¹ cá»¥c bá»™ trong khung: >= 45%.
        - Tá»· lá»‡ hÃ ng sÆ°Æ¡ng mÃ¹ liÃªn tá»¥c: >= 30%.
        gš™™™™™É?ç      è?g
×£p=
Ç?g=
×£p=ê?é   é
   é   Nr   é   rH   rG   éZ   é¹   é   ©Úaxisg333333Ó?)ÚkeyÚdefaultéÿÿÿÿg      Ð?g¸…ëQ¸®?gáz®GáÚ?r6   g333333ó?r   ç      ð?TÚfog_door)r   r   r   r   r   )rP   Úintr   rL   ÚmaximumÚminimumÚmeanÚwhereÚlenÚdiffÚsplitÚmaxrS   r   Úclipr:   ),rA   rV   ÚhÚwÚ_Úy1Úy2Úx1Úx2ÚstepÚroiÚrhÚrwÚrÚgÚbÚmax_cÚmin_cÚ
color_diffÚlumÚfog_maskÚrow_densityÚ	cand_rowsÚdiffsÚ	split_ptsÚcontiguous_segmentsÚbest_segÚ	sub_min_yÚ	sub_max_yÚ	band_maskÚcol_densityÚactive_colsÚ	sub_min_xÚ	sub_max_xÚ	span_w_pxÚin_boxÚin_box_densityÚorig_y1Úorig_y2Úorig_x1Úorig_x2Úcenter_xÚcenter_yr   s,                                               r!   Údetect_fog_gatez!BossArenaDetector.detect_fog_gatec   s  € ð ”-‰ˆˆ1ˆaÝ�Q˜‘X‘”¥ A¨¡H¡¤ˆBˆÝ�Q˜‘X‘”¥ A¨¡H¡¤ˆBˆð ˆØ�b˜˜D�j " R¨ *Ð,Ô-ˆØ”I‰	ˆˆB�Ø�Š7ˆ7�b˜2’g�gÝ%Ñ'Ô'Ð'à�a�a�a˜˜˜˜A�g”,  A A A q q q¨! G¤¨c°!°!°!°Q°Q°Q¸°'¬lˆaˆ1ˆÝ”
�2œ: a¨Ñ+Ô+¨QÑ/Ô/ˆÝ”
�2œ: a¨Ñ+Ô+¨QÑ/Ô/ˆØ˜U‘]ˆ
ð �A‰v˜!˜q™&Ñ! Q¨!¡VÑ,ˆð ˜2’I #¨¢*Ñ-°¸rÒ1AÑBˆõ ”g˜h¨QÐ/Ñ/Ô/ˆÝ”H˜[¨DÒ0Ñ1Ô1°!Ô4ˆ	åˆy‰>Œ>˜AÒÐÝ%Ñ'Ô'Ð'õ ”˜	Ñ"Ô"ˆÝ”H˜U QšYÑ'Ô'¨Ô*¨QÑ.ˆ	Ý œh y°)Ñ<Ô<ÐåÐ*µ½R¼XÀb¹\¼\ÐJÑJÔJˆÝˆx‰=Œ=˜1ÒÐÝ%Ñ'Ô'Ð'à'¨œ{¨H°R¬L�9ˆ	Ø˜Y y°1¡}Ð4°a°a°aÐ7Ô8ˆ	Ý”g˜i¨aÐ0Ñ0Ô0ˆå”h˜{¨dÒ2Ñ3Ô3°AÔ6ˆÝˆ{ÑÔ˜bÒ Ð Ý%Ñ'Ô'Ð'à*¨1œ~¨{¸2¬�9ˆ	Ø Ñ*¨dÑ2ˆ	ð •s˜1˜t™8‘}”}Ò$Ð$¨	µC¸¸D¹±M´MÒ(AÐ(AÝ%Ñ'Ô'Ð'ð ˜1˜1˜1˜i¨	°A©Ð5Ð5Ô6ˆÝ�rœw v™œÑ/Ô/ˆØ˜DÒ Ð Ý%Ñ'Ô'Ð'à�y 4Ñ'Ñ'ˆØ˜	 A™¨Ñ-Ñ-ˆØ�y 4Ñ'Ñ'ˆØ˜	 A™¨Ñ-Ñ-ˆà˜gÑ%¨!Ñ+ˆØ˜gÑ%¨!Ñ+ˆå�2œ7 >°CÑ#7¸¸cÑBÔBÑCÔCˆ
Ø˜Ô0Ò0Ð0Ý%Ñ'Ô'Ð'å!ØØ% xÐ0Ø!Ø! 7¨G°WÐ=Ø ð
ñ 
ô 
ð 	
r    r#   c           
     ón  — |j         \  }}}t          |dz  ¦  «        t          |dz  ¦  «        }}t          |dz  ¦  «        t          |dz  ¦  «        }}d}	||||	…|||	…f         }
|
j         \  }}}|dk     s|dk     rt          ¦   «         S |
dd…dd…d	f         |
dd…dd…d
f         |
dd…dd…df         }}}t          j        t          j        ||¦  «        |¦  «        }t          j        t          j        ||¦  «        |¦  «        }|dk    |dk    z  |dk    z  ||k    z  ||z
  dk    z  }t          t          j        |¦  «        ¦  «        }|dk    |dk    z  |dk    z  ||z
  dk    z  }t          t          j        |¦  «        ¦  «        }|dk    |dk    z  |dk    z  ||z
  dk    z  }t          t          j        |¦  «        ¦  «        }t          j        |d
¬¦  «        }t          j        |d
¬¦  «        }t          j        |¦  «        t          |dz  ¦  «        k    p't          j        |¦  «        t          |dz  ¦  «        k    }|s|dk     r|dk     rt          ¦   «         S t          j        t          j        |d	¬¦  «        d	k    ¦  «        d	         }t          j        t          j        |d	¬¦  «        d	k    ¦  «        d	         }t          |¦  «        dz  }t          |¦  «        dk    rt          |d         |d	         z
  ¦  «        }t          |¦  «        d	k    rt          t          |¦  «        ¦  «        nd}t          t          j        |t          d|¦  «        z  dd¦  «        ¦  «        }||dz  k    o|dk    } d}!|dk    r|dk    s| rd}!n|d k    rd!}!t          d"| s|nd| d#||||f|!¬$¦  «        S )%u‚  PhÃ¡t hiá»‡n thanh mÃ¡u Boss trÃªn Ä‘á»‰nh mÃ n hÃ¬nh (HUD Top Bar).

        Tá»‘c Ä‘á»™ thá»±c thi: < 0.8ms nhá»� 2x downsample trong vÃ¹ng ROI nhá»�.
        Thanh mÃ¡u Boss POE2 cÃ³:
        - Viá»�n vÃ ng kim / cam há»• phÃ¡ch (R >= 130, G >= 90, B <= 85, R > G, R - B >= 55).
        - Ruá»™t Ä‘á»� (R >= 120, G <= 65, B <= 65, R - G >= 55) hoáº·c báº¡c khi chuyá»ƒn pha.
        g{®Gáz”?g)\�Âõ(¼?gìQ¸…ëÑ?g
×£p=
ç?rH   é   é2   Nr   r]   é‚   r^   éU   é7   éx   éA   éŒ   é–   r\   ra   g333333Ã?éP   éd   gš™™™™™é?re   r   rf   g      ø?é<   gÍÌÌÌÌÌä?gq=
×£pí?é(   rY   TzMap Boss)r   r$   r%   r'   r   r   )rP   rh   r#   rL   ri   rj   Úsumrp   rl   r   rm   rq   )"rA   rV   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   Ú	gold_maskÚ
gold_countÚred_maskÚ	red_countÚinvuln_maskÚinvuln_countÚrow_redÚrow_goldÚhas_bar_shapeÚactive_cols_redÚactive_cols_goldÚtotal_bar_widthÚcurrent_red_widthr$   r%   r   s"                                     r!   Údetect_boss_health_barz(BossArenaDetector.detect_boss_health_bar¼   sç  € ð ”-‰ˆˆ1ˆaÝ�Q˜‘X‘”¥ A¨¡H¡¤ˆBˆÝ�Q˜‘X‘”¥ A¨¡H¡¤ˆBˆàˆØ�b˜˜D�j " R¨ *Ð,Ô-ˆØ”I‰	ˆˆB�Ø�Š6ˆ6�R˜"’W�WÝ)Ñ+Ô+Ð+à�a�a�a˜˜˜˜A�g”,  A A A q q q¨! G¤¨c°!°!°!°Q°Q°Q¸°'¬lˆaˆ1ˆÝ”
�2œ: a¨Ñ+Ô+¨QÑ/Ô/ˆÝ”
�2œ: a¨Ñ+Ô+¨QÑ/Ô/ˆð ˜#’X ! r¢'Ñ*¨a°2ªgÑ6¸!¸aº%Ñ@ÀQÈÁUÈrÂMÑRˆ	Ý�œ 	Ñ*Ô*Ñ+Ô+ˆ
ð ˜’H  b¢Ñ)¨Q°"ªWÑ5¸!¸a¹%ÀBºÑGˆÝ�œ˜xÑ(Ô(Ñ)Ô)ˆ	ð ˜C’x A¨¢HÑ-°°c²Ñ:¸uÀu¹}ÐQSÒ>SÑTˆÝ�2œ6 +Ñ.Ô.Ñ/Ô/ˆõ ”&˜¨Ð*Ñ*Ô*ˆÝ”6˜)¨!Ð,Ñ,Ô,ˆåœ ™œ­C°°T±	©N¬NÒ:ÐcÅÄÀxÑ@PÔ@PÕTWÐXZÐ]aÑXaÑTbÔTbÒ@bˆàð 	, )¨b¢. .°ZÀ#Ò5EÐ5EÝ)Ñ+Ô+Ð+õ œ(¥2¤6¨(¸Ð#;Ñ#;Ô#;¸aÒ#?Ñ@Ô@ÀÔCˆÝœ8¥B¤F¨9¸1Ð$=Ñ$=Ô$=ÀÒ$AÑBÔBÀ1ÔEÐå ™)œ) dÑ*ˆÝÐÑ Ô  2Ò%Ð%Ý#Ð$4°RÔ$8Ð;KÈAÔ;NÑ$NÑOÔOˆOå;>¸Ñ;OÔ;OÐRSÒ;SÐ;S�E¥# oÑ"6Ô"6Ñ7Ô7Ð7ÐY\ÐÝ�RœWÐ%6½¸SÀ/Ñ9RÔ9RÑ%RÐTWÐY\Ñ]Ô]Ñ^Ô^ˆà! I°¡OÒ3ÐM¸,È"Ò:Lˆ	àˆ
Ø˜ÒÐ ¨b¢ °I ØˆJˆJØ˜2ÒÐØˆJå%ØØ-6Ð?˜˜¸CØØ Ø˜b " bÐ)Ø!ð
ñ 
ô 
ð 	
r    r)   c           	     óŒ  — t          j        ¦   «         }|                      |¦  «        }|€t          d¬¦  «        S |                      |¦  «        }|                      |¦  «        }|j        }d}|j        r|j        rd}nd}n	|j        rd}t          j        ¦   «         }||z
  dz  }	t          ||j        |j        ||||	¬	¦  «        S )
uV   Quy trÃ¬nh Ä‘Ã¡nh giÃ¡ toÃ n diá»‡n tráº¡ng thÃ¡i Ä‘áº¥u trÆ°á»�ng Boss trong < 3.0ms.Nr   )r2   r-   Ú
PHASE_KITEÚENGAGE_BOSSÚPRE_BUFFg     @�@)r*   r+   r,   r.   r0   r1   r2   )ÚtimeÚperf_counterrU   r)   r›   r¸   r   r%   )
rA   rC   Út0rV   Úgate_resÚboss_barr*   r.   Út1r2   s
             r!   Úprocess_framezBossArenaDetector.process_frame  sô   € åÔÑ Ô ˆØ×$Ò$ YÑ/Ô/ˆØˆ?Ý!¨SÐ1Ñ1Ô1Ð1à×'Ò'¨Ñ0Ô0ˆØ×.Ò.¨wÑ7Ô7ˆàÔ$ˆØ+ÐàÔð 	,ØÔ!ð 3Ø%1Ð"Ð"à%2Ð"Ð"ØÔð 	,Ø!+ÐåÔÑ Ô ˆØ˜2‘g Ñ'ˆ
åØØ"Ô+Ø$Ô-Ø1ØØ"Ø!ð
ñ 
ô 
ð 	
r    N)r5   r6   r7   )r8   r9   r:   r   r;   r   r<   r=   )rC   rD   r<   rE   )rV   rW   r<   r   )rV   rW   r<   r#   )rC   rD   r<   r)   )	r   r   r   r   rB   rU   r›   r¸   rÃ   r   r    r!   r4   r4   >   s˜   € € € € € Ø[Ð[ð +7Ø%)Ø)-ð	?ð ?ð ?ð ?ð ?ð"ð ð ð ð"W
ð W
ð W
ð W
ðrE
ð E
ð E
ð E
ðN 
ð  
ð  
ð  
ð  
ð  
r    r4   )r   Ú
__future__r   Údataclassesr   r   r½   Útypingr   r   r   r	   r
   r   ÚnumpyrL   ÚPILr   ÚImportErrorr   r#   r)   r4   r   r    r!   ú<module>rÊ      s–  ððð ð #Ð "Ð "Ð "Ð "Ð "à (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø €€€Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :à Ð Ð Ð ðØÐÐÐÐÐÐøØð ð ð Ø€E€E€Eðøøøð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ðð ðð ð ð ð ñ ô ñ „ððe
ð e
ð e
ð e
ð e
ñ e
ô e
ð e
ð e
ð e
s   ª1 ±;º;