Ë
    êñi%‹  ã                  ót  — d Z ddlmZ ddlmZmZmZmZmZ ddl	Z	ddl
Z
ddlZddlmZmZmZ ddlZ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 dd
lmZmZmZm Z m!Z! ddl"m#c m$Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z, erddl-m.Z.m/Z/m0Z0m1Z1m2Z2 ddlm3Z3  G d„ d«      Z4 G d„ de4«      Z5 G d„ d«      Z6 G d„ d«      Z7y)zC
Utilities for conversion to writer-agnostic Excel representation.
é    )Úannotations)ÚCallableÚHashableÚIterableÚMappingÚSequenceN)ÚTYPE_CHECKINGÚAnyÚcast)Úis_list_like)Úfind_stack_level)Úmissing)Úis_floatÚ	is_scalar)Ú	DataFrameÚIndexÚ
MultiIndexÚPeriodÚPeriodIndex)ÚCSS4_COLORS)ÚCSSResolverÚ
CSSWarning)Úget_level_lengths)ÚExcelWriterMergeCellsÚFilePathÚ
IndexLabelÚStorageOptionsÚWriteExcelBuffer©ÚExcelWriterc                  ó6   — e Zd ZdZeZ	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zy)Ú	ExcelCell©ÚrowÚcolÚvalÚstyleÚ
mergestartÚmergeendNc                óX   — || _         || _        || _        || _        || _        || _        y ©Nr#   )Úselfr$   r%   r&   r'   r(   r)   s          úY/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/pandas/io/formats/excel.pyÚ__init__zExcelCell.__init__C   s.   € ð ˆŒØˆŒØˆŒØˆŒ
Ø$ˆŒØ ˆ�ó    )NNN)
r$   Úintr%   r0   r(   ú
int | Noner)   r1   ÚreturnÚNone)Ú__name__Ú
__module__Ú__qualname__Ú
__fields__Ú	__slots__r.   © r/   r-   r"   r"   ?   sL   „ ØI€JØ€Ið Ø!%Ø#ð!àð!ð ð!ð ð!ð ð!ð 
ô!r/   r"   c                  ó@   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zˆ xZS )ÚCssExcelCellc	                óÔ   •— |rK|rI|||f   D �
�ci c]  \  }
}|
j                  «       |“Œ }}
}t        |j                  «       «      } ||«      }t        ‰| �  d|||dœ|	¤Ž y c c}}
w )N©r$   r%   r&   r'   r9   )ÚlowerÚ	frozensetÚitemsÚsuperr.   )r,   r$   r%   r&   r'   Ú
css_stylesÚcss_rowÚcss_colÚcss_converterÚkwargsÚpropÚdeclaration_dictÚunique_declarationsÚ	__class__s                €r-   r.   zCssExcelCell.__init__U   s‚   ø€ ñ ™-ð 4>¸gÀwÐ>NÑ3O÷ Ù&/ d¨C�—
‘
“˜cÑ!ð Ðñ  ô #,Ð,<×,BÑ,BÓ,DÓ"EÐÙ!Ð"5Ó6ˆEä‰ÑÐJ˜S c¨s¸%ÑJÀ6ÓJùó s   �A$)r$   r0   r%   r0   r'   údict | NonerB   z3dict[tuple[int, int], list[tuple[str, Any]]] | NonerC   r0   rD   r0   rE   úCallable | Noner2   r3   )r4   r5   r6   r.   Ú__classcell__)rJ   s   @r-   r;   r;   T   sf   ø„ ðKàðKð ðKð
 ðKð HðKð ðKð ðKð 'ðKð 
÷Kñ Kr/   r;   c                  óÊ  — e Zd ZU dZeZdddddddœZddddddddddddddœZdddd	œZd
ddddœZ	dD � �ci c]  }|j                  «       |“Œ c}} Zded<   d-d.d„Z e«       Z	 	 	 	 d/d„Z	 	 	 	 d/d„Zd0d„Zd1d„Zd2d„Zd3d„Z	 	 	 	 d4d„Z	 	 	 	 	 	 	 	 d5d„Zd6d„Zd7d„Zd8d„Zd9d„Zd:d „Z	 	 	 	 d;d!„Zd3d"„Zd3d#„Zd<d$„Z d3d%„Z!d<d&„Z"d=d'„Z#d>d(„Z$d?d)„Z%d@d*„Z&dAd+„Z'd@d,„Z(yc c}} w )BÚCSSToExcelConverteraK  
    A callable for converting CSS declarations to ExcelWriter styles

    Supports parts of CSS 2.2, with minimal CSS 3.0 support (e.g. text-shadow),
    focusing on font styling, backgrounds, borders and alignment.

    Operates by first computing CSS styles in a fairly generic
    way (see :meth:`compute_css`) then determining Excel style
    properties from CSS properties (see :meth:`build_xlstyle`).

    Parameters
    ----------
    inherited : str, optional
        CSS declarations understood to be the containing scope for the
        CSS processed by :meth:`__call__`.
    ÚtopÚcenterÚbottom)rP   ztext-topÚmiddleÚbaselinerR   ztext-bottomTF)ÚboldÚbolderÚ600Ú700Ú800Ú900ÚnormalÚlighterÚ100Ú200Ú300Ú400Ú500)r[   ÚitalicÚobliqueé   é   é   é   )Úserifz
sans-serifÚcursiveÚfantasy)
ÚdashedÚmediumDashDotÚ
dashDotDotÚhairÚdottedÚmediumDashDotDotÚdoubleÚdashDotÚslantDashDotÚmediumDashedzdict[str, str] | NoneÚ	inheritedNc                óŒ   — |�| j                  |«      | _        nd | _        t        j                  | j                  «      | _        y r+   )Úcompute_cssru   Ú	functoolsÚcacheÚ_call_uncachedÚ_call_cached)r,   ru   s     r-   r.   zCSSToExcelConverter.__init__¾   s:   € ØÐ Ø!×-Ñ-¨iÓ8ˆD�Nà!ˆDŒNô &ŸO™O¨D×,?Ñ,?Ó@ˆÕr/   c                ó$   — | j                  |«      S )aå  
        Convert CSS declarations to ExcelWriter style.

        Parameters
        ----------
        declarations : str | frozenset[tuple[str, str]]
            CSS string or set of CSS declaration tuples.
            e.g. "font-weight: bold; background: blue" or
            {("font-weight", "bold"), ("background", "blue")}

        Returns
        -------
        xlstyle : dict
            A style as interpreted by ExcelWriter when found in
            ExcelCell.style.
        )r{   )r,   Údeclarationss     r-   Ú__call__zCSSToExcelConverter.__call__Ê   s   € ð& × Ñ  Ó.Ð.r/   c                ó\   — | j                  || j                  «      }| j                  |«      S r+   )rw   ru   Úbuild_xlstyle)r,   r}   Ú
propertiess      r-   rz   z"CSSToExcelConverter._call_uncachedß   s+   € ð ×%Ñ% l°D·N±NÓCˆ
Ø×!Ñ! *Ó-Ð-r/   c                óÊ   ‡— | j                  |«      | j                  |«      | j                  |«      | j                  |«      | j	                  |«      dœ}dˆfd„Š ‰|«       |S )N)Ú	alignmentÚborderÚfillÚfontÚnumber_formatc                ó’   •— t        | j                  «       «      D ]*  \  }}|€| |= Œt        |t        «      sŒ ‰|«       |rŒ(| |= Œ, y)z4Remove key where value is None, through nested dictsN)Úlistr@   Ú
isinstanceÚdict)ÚdÚkÚvÚremove_nones      €r-   r�   z6CSSToExcelConverter.build_xlstyle.<locals>.remove_noneð   sG   ø€ ä˜QŸW™W›Y›ò !‘��1Ø�9Ø˜!™Ü ¤4Õ(Ù ”NÚØ˜a™Dñ!r/   )rŒ   údict[str, str | None]r2   r3   )Úbuild_alignmentÚbuild_borderÚ
build_fillÚ
build_fontÚbuild_number_format)r,   ÚpropsÚoutr�   s      @r-   r€   z!CSSToExcelConverter.build_xlstyleå   s`   ø€ à×-Ñ-¨eÓ4Ø×'Ñ'¨Ó.Ø—O‘O EÓ*Ø—O‘O EÓ*Ø!×5Ñ5°eÓ<ñ
ˆõ	!ñ 	�CÔØˆ
r/   c                óh   — |j                  d«      | j                  |«      | j                  |«      dœS )Nz
text-align)Ú
horizontalÚverticalÚ	wrap_text)ÚgetÚ_get_vertical_alignmentÚ_get_is_wrap_text©r,   r–   s     r-   r‘   z#CSSToExcelConverter.build_alignmentý   s6   € ð  Ÿ)™) LÓ1Ø×4Ñ4°UÓ;Ø×/Ñ/°Ó6ñ
ð 	
r/   c                ó`   — |j                  d«      }|r| j                  j                  |«      S y )Nzvertical-align)rœ   ÚVERTICAL_MAP)r,   r–   Úvertical_aligns      r-   r�   z+CSSToExcelConverter._get_vertical_alignment  s.   € ØŸ™Ð#3Ó4ˆÙØ×$Ñ$×(Ñ(¨Ó8Ð8Ør/   c                óF   — |j                  d«      €y t        |d   dv«      S )Nzwhite-space)ÚnowrapÚprezpre-line)rœ   ÚboolrŸ   s     r-   rž   z%CSSToExcelConverter._get_is_wrap_text  s*   € Ø�9‰9�]Ó#Ð+ØÜ�E˜-Ñ(Ð0MÐMÓNÐNr/   c                ó*  — dD �ci c]ƒ  }|| j                  |j                  d|› d�«      |j                  d|› d�«      | j                  |j                  d|› d�«      «      «      | j                  |j                  d|› d�«      «      dœ“Œ… c}S c c}w )N)rP   ÚrightrR   Úleftzborder-z-stylez-widthz-color)r'   Úcolor)Ú_border_stylerœ   Úcolor_to_excel)r,   r–   Úsides      r-   r’   z CSSToExcelConverter.build_border  sª   € ð ;ö

ð ð Ø×+Ñ+Ø—I‘I ¨ v¨VÐ4Ó5Ø—I‘I ¨ v¨VÐ4Ó5Ø×'Ñ'¨¯	©	°G¸D¸6ÀÐ2HÓ(IÓJóð
 ×,Ñ,¨U¯Y©Y¸ÀÀÀfÐ7MÓ-NÓOññ ò

ð 
	
ùò 

s   …BBc                ó  — |€|€|€y y|dv ry| j                  |«      }|€y|dv r|S |dk(  ry|dk(  r|dv ryy|dk(  r|dv ryy	|| j                  v r| j                  |   S t        j                  d
|›�t        t        «       ¬«       y)NÚnone)r¯   Úhidden)NÚgrooveÚridgeÚinsetÚoutsetÚsolidrq   ro   )rn   Úthinrp   rk   rt   zUnhandled border style format: ©Ú
stacklevel)Ú_get_width_nameÚBORDER_STYLE_MAPÚwarningsÚwarnr   r   )r,   r'   Úwidthrª   Ú
width_names        r-   r«   z!CSSToExcelConverter._border_style  sÊ   € ð" ˆ=˜U˜]Øˆ}àð àÐ&Ñ&Øà×)Ñ)¨%Ó0ˆ
ØÐØàÐIÑIàÐà�HÒØØ�HÒØÐ-Ñ-ØØ%Ø�HÒØÐ-Ñ-ØØ!Ø�d×+Ñ+Ñ+à×(Ñ(¨Ñ/Ð/ä�M‰MØ1°%°Ð;ÜÜ+Ó-õð
 r/   c                óJ   — | j                  |«      }|dk  ry |dk  ry|dk  ryy)Ngñhãˆµøä>gÍÌÌÌÌÌô?r¶   gffffff@ÚmediumÚthick)Ú_width_to_float)r,   Úwidth_inputr½   s      r-   r¹   z#CSSToExcelConverter._get_width_nameX  s3   € Ø×$Ñ$ [Ó1ˆØ�4Š<ØØ�SŠ[ØØ�SŠ[ØØr/   c                ó,   — |€d}| j                  |«      S )NÚ2pt)Ú_pt_to_float)r,   r½   s     r-   rÂ   z#CSSToExcelConverter._width_to_floatb  s   € Øˆ=ØˆEØ× Ñ  Ó'Ð'r/   c                ó\   — |j                  d«      sJ ‚t        |j                  d«      «      S )NÚpt)ÚendswithÚfloatÚrstrip)r,   Ú	pt_strings     r-   rÆ   z CSSToExcelConverter._pt_to_floatg  s,   € Ø×!Ñ! $Ô'Ð'Ð'Ü�Y×%Ñ% dÓ+Ó,Ð,r/   c                óV   — |j                  d«      }|dvr| j                  |«      ddœS y )Nzbackground-color)NÚtransparentr¯   rµ   )ÚfgColorÚpatternType)rœ   r¬   )r,   r–   Ú
fill_colors      r-   r“   zCSSToExcelConverter.build_fillk  s7   € ð —Y‘YÐ1Ó2ˆ
ØÐ:Ñ:Ø#×2Ñ2°:Ó>ÈwÑWÐWð ;r/   c                ót   — |j                  d«      }t        |t        «      r|j                  dd«      n|}d|iS )Nznumber-formatõ   Â§ú;Úformat_code)rœ   rŠ   ÚstrÚreplace)r,   r–   Úfcs      r-   r•   z'CSSToExcelConverter.build_number_formatr  s6   € Ø�Y‰Y�Ó'ˆÜ&0°´SÔ&9ˆR�Z‰Z˜˜cÔ"¸rˆØ˜rÐ"Ð"r/   c                óV  — | j                  |«      }| j                  |«      }|r|d   nd | j                  |«      | j                  |«      | j	                  |«      | j                  |«      d|v rdnd d|v xs d | j                  |j                  d«      «      | j                  |«      dœ	S )Nr   Ú	underlineÚsinglezline-throughrª   )	ÚnameÚfamilyÚsizerU   rb   rÚ   Ústrikerª   Úshadow)	Ú_get_font_namesÚ_get_decorationÚ_select_font_familyÚ_get_font_sizeÚ_get_is_boldÚ_get_is_italicr¬   rœ   Ú_get_shadow)r,   r–   Ú
font_namesÚ
decorations       r-   r”   zCSSToExcelConverter.build_fontw  s¯   € ð ×)Ñ)¨%Ó0ˆ
Ø×)Ñ)¨%Ó0ˆ
á%/�J˜q’M°TØ×.Ñ.¨zÓ:Ø×'Ñ'¨Ó.Ø×%Ñ% eÓ,Ø×)Ñ)¨%Ó0Ø&1°ZÑ&?™(ÀTØ%¨Ð3Ò<¸Ø×(Ñ(¨¯©°7Ó);Ó<à×&Ñ& uÓ-ñ
ð 	
r/   c                ó`   — |j                  d«      }|r| j                  j                  |«      S y )Nzfont-weight)rœ   ÚBOLD_MAP)r,   r–   Úweights      r-   rå   z CSSToExcelConverter._get_is_bold‰  s+   € Ø—‘˜=Ó)ˆÙØ—=‘=×$Ñ$ VÓ,Ð,Ør/   c                ó`   — |j                  d«      }|r| j                  j                  |«      S y )Nz
font-style)rœ   Ú
ITALIC_MAP)r,   r–   Ú
font_styles      r-   ræ   z"CSSToExcelConverter._get_is_italic�  s+   € Ø—Y‘Y˜|Ó,ˆ
ÙØ—?‘?×&Ñ& zÓ2Ð2Ør/   c                óJ   — |j                  d«      }|�|j                  «       S y)Nztext-decorationr9   )rœ   Úsplit)r,   r–   ré   s      r-   râ   z#CSSToExcelConverter._get_decoration•  s)   € Ø—Y‘YÐ0Ó1ˆ
ØÐ!Ø×#Ñ#Ó%Ð%àr/   c                óP   — d|v r"t        t        j                  d|d   «      «      S y )Nztext-shadowz^[^#(]*[1-9])r¦   ÚreÚsearchrŸ   s     r-   rç   zCSSToExcelConverter._get_shadowœ  s(   € Ø˜EÑ!ÜœŸ	™	 .°%¸Ñ2FÓGÓHÐHØr/   c                ó$  — t        j                  d|j                  dd«      «      }g }|D ]b  }|d d dk(  r|dd j                  dd«      }n.|d d dk(  r|dd j                  d	d«      }n|j	                  «       }|sŒR|j                  |«       Œd |S )
Nz›(?x)
            (
            "(?:[^"]|\\")+"
            |
            '(?:[^']|\\')+'
            |
            [^'",]+
            )(?=,|\s*$)
        zfont-familyÚ rd   ú"éÿÿÿÿz\"ú'z\')ró   Úfindallrœ   r×   ÚstripÚappend)r,   r–   Úfont_names_tmprè   rÜ   s        r-   rá   z#CSSToExcelConverter._get_font_names¡  s©   € ÜŸ™ðð �I‰I�m RÓ(ó
ˆð ˆ
Ø"ò 	(ˆDØ�B�Qˆx˜3ŠØ˜A˜b�z×)Ñ)¨%°Ó5‘Ø�b�q�˜S’Ø˜A˜b�z×)Ñ)¨%°Ó5‘à—z‘z“|�ÚØ×!Ñ! $Õ'ð	(ð Ðr/   c                óN   — |j                  d«      }|€|S | j                  |«      S )Nz	font-size)rœ   rÆ   )r,   r–   rÞ   s      r-   rä   z"CSSToExcelConverter._get_font_size»  s+   € Ø�y‰y˜Ó%ˆØˆ<ØˆKØ× Ñ  Ó&Ð&r/   c                óX   — d }|D ]"  }| j                   j                  |«      }|sŒ! |S  |S r+   )Ú
FAMILY_MAPrœ   )r,   rè   rÝ   rÜ   s       r-   rã   z'CSSToExcelConverter._select_font_familyÁ  s<   € ØˆØò 	ˆDØ—_‘_×(Ñ(¨Ó.ˆFÚØàˆð	ð
 ˆr/   c                óØ   — |€y | j                  |«      r| j                  |«      S 	 | j                  |   S # t        $ r* t	        j
                  d|›�t        t        «       ¬«       Y y w xY w)NzUnhandled color format: r·   )Ú_is_hex_colorÚ_convert_hex_to_excelÚNAMED_COLORSÚKeyErrorr»   r¼   r   r   ©r,   r&   s     r-   r¬   z"CSSToExcelConverter.color_to_excelÊ  sr   € Øˆ;Øà×Ñ˜cÔ"Ø×-Ñ-¨cÓ2Ð2ð	Ø×$Ñ$ SÑ)Ð)øÜò 	Ü�M‰MØ*¨3¨'Ð2ÜÜ+Ó-öð
 ð	ús   §6 ¶0A)Á(A)c                ó6   — t        |j                  d«      «      S )Nú#)r¦   Ú
startswith)r,   Úcolor_strings     r-   r  z!CSSToExcelConverter._is_hex_colorÛ  s   € Ü�L×+Ñ+¨CÓ0Ó1Ð1r/   c                ó¶   — |j                  d«      }| j                  |«      r(|d   dz  |d   dz  z   |d   dz  z   j                  «       S |j                  «       S )Nr  r   re   rd   )ÚlstripÚ_is_shorthand_colorÚupper©r,   r
  Úcodes      r-   r  z)CSSToExcelConverter._convert_hex_to_excelÞ  s]   € Ø×"Ñ" 3Ó'ˆØ×#Ñ# LÔ1Ø˜‘G˜a‘K $ q¡'¨A¡+Ñ-°°Q±¸!±Ñ;×BÑBÓDÐDà—:‘:“<Ðr/   c                ó|   — |j                  d«      }t        |«      dk(  ryt        |«      dk(  ryt        d|› �«      ‚)zcCheck if color code is shorthand.

        #FFF is a shorthand as opposed to full #FFFFFF.
        r  é   Té   FzUnexpected color )r  ÚlenÚ
ValueErrorr  s      r-   r  z'CSSToExcelConverter._is_shorthand_colorå  sC   € ð
 ×"Ñ" 3Ó'ˆÜˆt‹9˜Š>ØÜ�‹Y˜!Š^ØäÐ0°°Ð?Ó@Ð@r/   r+   )ru   ú
str | Noner2   r3   )r}   z str | frozenset[tuple[str, str]]r2   údict[str, dict[str, str]])r–   úMapping[str, str]r2   r  )r–   r  r2   zdict[str, bool | str | None])r–   r  r2   r  )r–   r  r2   zbool | None)r–   r  r2   z dict[str, dict[str, str | None]])r'   r  r½   r  rª   r  r2   r  )rÃ   r  r2   r  )r½   r  r2   rÊ   )rÌ   rÖ   r2   rÊ   )r–   r  )r–   r  r2   r�   )r–   r  r2   z$dict[str, bool | float | str | None])r–   r  r2   úSequence[str])r–   r  r2   zfloat | None)rè   r  r2   r1   )r&   r  r2   r  )r
  rÖ   r2   r¦   )r
  rÖ   r2   rÖ   ))r4   r5   r6   Ú__doc__r   r  r¡   rë   rî   r   r>   rº   Ú__annotations__r.   r   rw   r~   rz   r€   r‘   r�   rž   r’   r«   r¹   rÂ   rÆ   r“   r•   r”   rå   ræ   râ   rç   rá   rä   rã   r¬   r  r  r  )Ú.0r'   s   00r-   rO   rO   m   s¤  … ñð" €Lð ØØØØØñ€Lð ØØØØØØØØØØØØñ€Hð" ØØñ€Jð ØØØñ	€Jð
÷àð 	�‰‹�uÑóÐð( %Ó$ôAñ “-€Kð/Ø<ð/à	"ó/ð*.Ø<ð.à	"ó.óó0
óóOð

Ø&ð
à	)ó
ð7Øð7Ø(2ð7Ø;Eð7à	ó7óró(ó
-óXó#ð

Ø&ð
à	-ó
ó$óóóó
ó4'óóó"2ó ôAùó{	s   µCrO   c                  óú   — e Zd ZdZdZdZ	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zd„ Zdd„Zdd„Z	dd	„Z
dd
„Zdd„Zdd„Zedd„«       Zdd„Zdd„Zdd„Z	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚExcelFormattera>  
    Class for formatting a DataFrame to a list of ExcelCells,

    Parameters
    ----------
    df : DataFrame or Styler
    na_rep: na representation
    float_format : str, default None
        Format string for floating point numbers
    cols : sequence, optional
        Columns to write
    header : bool or sequence of str, default True
        Write out column names. If a list of string is given it is
        assumed to be aliases for the column names
    index : bool, default True
        output row names (index)
    index_label : str or sequence, default None
        Column label for index column(s) if desired. If None is given, and
        `header` and `index` are True, then the index names are used. A
        sequence should be given if the DataFrame uses MultiIndex.
    merge_cells : bool or 'columns', default False
        Format MultiIndex column headers and Hierarchical Rows as merged cells
        if True. Merge MultiIndex column headers only if 'columns'.
        .. versionchanged:: 3.0.0
            Added the 'columns' option.
    inf_rep : str, default `'inf'`
        representation for np.inf values (which aren't representable in Excel)
        A `'-'` sign will be added in front of -inf.
    style_converter : callable, optional
        This translates Styler styles (CSS) into ExcelWriter styles.
        Defaults to ``CSSToExcelConverter()``.
        It should have signature css_declarations string -> excel style.
        This is only called for body cells.
    autofilter : bool, default False
        If True, add automatic filters to all columns.
    i   i @  Nc                ó  — d| _         || _        t        |t        «      sA|| _        | j                  j                  «        |j                  }|
€
t        «       }
|
| _        nd | _        d | _        || _	        |�œt        t        |«      j                  |j                  «      «      st        d«      ‚t        t        |«      j                  |j                  «      «      t        t        |«      «      k7  rt        d«      ‚|j!                  |¬«      | _	        | j                  j                  | _        || _        || _        || _        || _        t        |t*        «      s|dk7  rt-        d|›d�«      ‚|| _        |	| _        || _        y )Nr   z,passes columns are not ALL present dataframez.Not all names specified in 'columns' are found)Úcolumnsr   z!Unexpected value for merge_cells=ú.)Ú
rowcounterÚna_reprŠ   r   ÚstylerÚ_computeÚdatarO   Ústyle_converterÚdfr  r   Úintersectionr   r  ÚsetÚreindexÚfloat_formatÚindexÚindex_labelÚheaderr¦   r  Úmerge_cellsÚinf_repÚ
autofilter)r,   r(  r#  r,  Úcolsr/  r-  r.  r0  r1  r'  r2  s               r-   r.   zExcelFormatter.__init__  sD  € ð ˆŒØˆŒÜ˜"œiÔ(ØˆDŒKØ�K‰K× Ñ Ô"Ø—‘ˆBØÐ&Ü"5Ó"7�Ø4CˆDÕ àˆDŒKØ#'ˆDÔ ØˆŒØÐä”u˜T“{×/Ñ/°·
±
Ó;Ô<ÜÐMÓNÐNä”5˜“;×+Ñ+¨B¯J©JÓ7Ó8¼CÄÀDÃ	»NÒJäÐOÓPÐPà—j‘j¨�jÓ.ˆDŒGà—w‘w—‘ˆŒØ(ˆÔØˆŒ
Ø&ˆÔØˆŒä˜+¤tÔ,°À	Ò1IÜÐA°[°NÀ!ÐDÓEÐEØ&ˆÔØˆŒØ$ˆ�r/   c                ó|  — t        |«      r"t        j                  |«      r| j                  }nvt	        |«      rkt        j
                  |«      r| j                  }nIt        j                  |«      rd| j                  › �}n$| j                  �t        | j                  |z  «      }t        |dd «      �t        d«      ‚|S )Nú-Útzinfoz{Excel does not support datetimes with timezones. Please ensure that datetimes are timezone unaware before writing to Excel.)r   r   Úisnar#  r   Úisposinf_scalarr1  Úisneginf_scalarr,  rÊ   Úgetattrr  r  s     r-   Ú_format_valuezExcelFormatter._format_valueN  s£   € Ü�SŒ>œgŸl™l¨3Ô/Ø—+‘+‰CÜ�cŒ]Ü×&Ñ& sÔ+Ø—l‘l‘Ü×(Ñ(¨Ô-Ø˜$Ÿ,™,˜Ð(‘Ø×"Ñ"Ð.Ü˜D×-Ñ-°Ñ3Ó4�Ü�3˜ $Ó'Ð3Üð@óð ð
 ˆ
r/   c              #  ó’  K  — | j                   j                  dkD  r| j                  st        d«      ‚| j                  s| j
                  sy | j                   }| j                  dv }|j                  |d¬«      }t        |«      }d}d}| j                  rGt        | j                  j                  t        «      r#| j                  j                  j                  dz
  }t        |j                  «      D ]  \  }}t        |||d ¬«      –— Œ t        t        ||j                   |j"                  d¬	«      «      D ]‡  \  }\  }}	}
|	j%                  |
«      }|j'                  «       D ]Z  \  }}d
\  }}|r|dkD  r
|||z   |z   }}t)        |||z   dz   ||   d t+        | j,                  dd «      ||| j.                  ||¬«
      –— Œ\ Œ‰ || _        y ­w)Nrd   z]Writing to Excel with MultiIndex columns and no index ('index'=False) is not yet implemented.>   Tr   F©ÚsparsifyÚinclude_namesr   r=   T©Ústrict©NNÚctx_columns©
r$   r%   r&   r'   rB   rC   rD   rE   r(   r)   )r   Únlevelsr-  ÚNotImplementedErrorÚ_has_aliasesr/  r0  Ú_format_multir   rŠ   r(  r   Ú	enumerateÚnamesr"   ÚzipÚlevelsÚcodesÚtaker@   r;   r:  r$  r'  r"  )r,   r   Úmerge_columnsÚ
level_strsÚlevel_lengthsÚ	coloffsetÚlnumrÜ   ÚspansrL  Úlevel_codesÚvaluesÚiÚspan_valr(   r)   s                   r-   Ú_format_header_miz ExcelFormatter._format_header_mi`  sÉ  è ø€ Ø�<‰<×Ñ !Ò#Ø—:’:Ü)ðDóð ð
 ×!Ò! T§[¢[Øà—,‘,ˆØ×(Ñ(Ð,=Ð=ˆØ×*Ñ*°MÐQVÐ*ÓWˆ
Ü)¨*Ó5ˆØˆ	Øˆà�:Š:œ* T§W¡W§]¡]´JÔ?ØŸ™Ÿ™×-Ñ-°Ñ1ˆIä# G§M¡MÓ2ò 	‰JˆD�$ÜØØØØô	ó ð	ô 3<Ü�˜wŸ~™~¨w¯}©}ÀTÔJó3
ò 	Ñ.ˆDÑ.�5˜& +ð —[‘[ Ó-ˆFØ$Ÿ{™{›}ò ‘��8Ø'1Ñ$�
˜HÙ  X°¢\Ø+/°¸Q±ÀÑ1I �JÜ"ØØ! A™¨Ñ)Ø˜q™	ØÜ& t§{¡{°MÀ4ÓHØ ØØ"&×"6Ñ"6Ø)Ø%ôó ñ	ð		ð( ˆ�ùs   ‚GGc              #  óî  K  — | j                   s| j                  �rXd}| j                  rOd}t        | j                  j                  t
        «      r)t        | j                  j                  j                  «      }| j                  }| j                   rŽt        t        | j                  «      | _        t        | j                  «      t        | j                  «      k7  r8t        dt        | j                  «      › dt        | j                  «      › d�«      ‚| j                  }t        |«      D ]F  \  }}t        | j                  ||z   |d t        | j                   dd «      d|| j"                  ¬«      –— ŒH y y ­w)Nr   rd   zWriting z cols but got z aliasesrC  ©r$   r%   r&   r'   rB   rC   rD   rE   )rG  r/  r-  rŠ   r(  r   r  rJ  r   r   r   r  rI  r;   r"  r:  r$  r'  )r,   rR  ÚcolnamesÚcolindexÚcolnames        r-   Ú_format_header_regularz%ExcelFormatter._format_header_regular“  s1  è ø€ Ø×Ò §£ØˆIà�zŠzØ�	Ü˜dŸg™gŸm™m¬ZÔ8Ü # D§G¡G§M¡M×$7Ñ$7Ó 8�Ià—|‘|ˆHØ× Ò Ü"¤8¨T¯[©[Ó9�”Ü�t—{‘{Ó#¤s¨4¯<©<Ó'8Ò8Ü$Ø"¤3 t§|¡|Ó#4Ð"5ð 6#Ü#& t§{¡{Ó#3Ð"4°Hð>óð ð  Ÿ;™;�ä%.¨xÓ%8ò 
Ñ!�˜'Ü"ØŸ™Ø  9Ñ,ØØÜ& t§{¡{°MÀ4ÓHØØ$Ø"&×"6Ñ"6ô	ó 	ñ
ð% !,ùs   ‚E3E5c                ó  ‡ — t        ‰ j                  t        «      r‰ j                  «       }n‰ j	                  «       }d}‰ j
                  j                  j                  r“‰ j
                  j                  j                  D �cg c]  }|�|nd‘Œ
 c}dgt        ‰ j                  «      z  z   }t        j                  d„ d„ |D «       «      r)ˆ fd„t        |«      D «       }‰ xj                  dz  c_        t        j                  ||«      S c c}w )Nr9   rö   c                ó   — | xr |S r+   r9   )ÚxÚys     r-   ú<lambda>z/ExcelFormatter._format_header.<locals>.<lambda>À  s
   € ¨QªW°1€ r/   c              3  ó&   K  — | ]	  }|d k7  –— Œ y­w)rö   Nr9   )r  rb  s     r-   ú	<genexpr>z0ExcelFormatter._format_header.<locals>.<genexpr>À  s   è ø€ Ò6LÀ1°q¸BµwÑ6Lùs   ‚c              3  óT   •K  — | ]  \  }}t        ‰j                  ||d «      –— Œ! y ­wr+   )r"   r"  )r  r]  r&   r,   s      €r-   rf  z0ExcelFormatter._format_header.<locals>.<genexpr>Á  s,   øè ø€ ò á%˜ #ô ˜dŸo™o¨x¸¸d×Cñùs   ƒ%(rd   )rŠ   r   r   rY  r_  r(  r-  rJ  r  rx   ÚreducerI  r"  Ú	itertoolsÚchain)r,   ÚgenÚgen2rb  r$   s   `    r-   Ú_format_headerzExcelFormatter._format_header²  sß   ø€ ô �d—l‘l¤JÔ/Ø×(Ñ(Ó*‰Cà×-Ñ-Ó/ˆCà$&ˆà�7‰7�=‰=×ÒØ7;·w±w·}±}×7JÑ7JÖK°!˜˜‘1¨2Ñ-ÒKØðOä�D—L‘LÓ!ñO"ñ "ˆCô ×ÑÑ 4Ñ6LÈÔ6LÔMóä)2°3«ô�ð —’ 1Ñ$•Ü�‰˜s DÓ)Ð)ùò Ls   ÂDc                óŠ   — t        | j                  j                  t        «      r| j	                  «       S | j                  «       S r+   )rŠ   r(  r-  r   Ú_format_hierarchical_rowsÚ_format_regular_rows©r,   s    r-   Ú_format_bodyzExcelFormatter._format_bodyÈ  s2   € Ü�d—g‘g—m‘m¤ZÔ0Ø×1Ñ1Ó3Ð3à×,Ñ,Ó.Ð.r/   c              #  ó(  K  — | j                   s| j                  r| xj                  dz  c_        | j                  �r·| j                  rDt        | j                  t        t        t        j                  t        f«      r| j                  d   }nV| j                  r't        | j                  t        «      r| j                  }n#| j                  j                  j                  d   }t        | j                  t        «      r| xj                  dz  c_        |r+| j                  durt!        | j                  dz
  d|d «      –— | j                  j                  }t        | j                  j                  t"        «      r$| j                  j                  j%                  «       }t'        |«      D ]F  \  }}t)        | j                  |z   d|d t+        | j,                  dd «      |d| j.                  ¬«      –— ŒH d}nd}| j1                  |«      E d {  –—†  y 7 Œ­w)Nrd   r   FÚ	ctx_indexr[  )rG  r/  r"  r-  r.  rŠ   r‰   ÚtupleÚnpÚndarrayr   rÖ   r(  rJ  r   r   r"   r   Úto_timestamprI  r;   r:  r$  r'  Ú_generate_body)r,   r.  Úindex_valuesÚidxÚidxvalrR  s         r-   rp  z#ExcelFormatter._format_regular_rowsÎ  s—  è ø€ Ø×Ò §¢Ø�OŠO˜qÑ �Oð �:‹:ð ×Ò¤JØ× Ñ ¤4¬´·
±
¼EÐ"Bô%ð #×.Ñ.¨qÑ1‘à×!Ò!¤j°×1AÑ1AÄ3Ô&GØ"×.Ñ.‘à"Ÿg™gŸm™m×1Ñ1°!Ñ4�ä˜$Ÿ,™,¬
Ô3Ø—’ 1Ñ$•á˜tŸ{™{°%Ñ7Ü §¡°!Ñ 3°Q¸ÀTÓJÒJð  Ÿ7™7Ÿ=™=ˆLÜ˜$Ÿ'™'Ÿ-™-¬Ô5Ø#Ÿw™wŸ}™}×9Ñ9Ó;�ä(¨Ó6ò 
‘��VÜ"ØŸ™¨#Ñ-ØØØÜ& t§{¡{°KÀÓFØØØ"&×"6Ñ"6ô	ó 	ð
ð ‰IàˆIà×&Ñ& yÓ1×1Ò1ús   ‚HHÈ
HÈHc              #  ó°  K  — | j                   s| j                  r| xj                  dz  c_        d}| j                  �rû| j                  j                  j
                  }| j                  r@t        | j                  t        t        t        j                  t        f«      r| j                  }t        | j                  t        «      r| xj                  dz  c_        t        j                   |Ž r>| j                  dur0t#        |«      D ]"  \  }}t%        | j                  dz
  ||d «      –— Œ$ | j&                  �rf| j&                  dk7  �rV| j                  j                  j)                  dd¬«      }t+        |«      }t-        || j                  j                  j.                  | j                  j                  j0                  d¬«      D ]Õ  \  }}}	|j3                  |	|j4                  |j6                  ¬«      }
t        |
d   t8        «      r|
j;                  «       }
|j=                  «       D ]l  \  }}d	\  }}|dkD  r| j                  |z   |z   dz
  }|}t?        | j                  |z   ||
|   d tA        | jB                  d
d «      ||| jD                  ||¬«
      –— Œn |dz  }Œ× n�t-        | j                  j                  ddiŽD ]{  }t#        |«      D ]f  \  }}t        |t8        «      r|j;                  «       }t?        | j                  |z   ||d tA        | jB                  d
d «      ||| jD                  ¬«      –— Œh |dz  }Œ} | jG                  |«      E d {  –—†  y 7 Œ­w)Nrd   r   Fr   Tr=  r@  )Ú
allow_fillÚ
fill_valuerB  rt  rD  rA  r[  )$rG  r/  r"  r-  r(  rJ  r.  rŠ   r‰   ru  rv  rw  r   r   r   ÚcomÚany_not_nonerI  r"   r0  rH  r   rK  rL  rM  rN  Ú_can_hold_naÚ	_na_valuer   rx  r@   r;   r:  r$  r'  ry  )r,   ÚgcolidxÚindex_labelsÚcidxrÜ   rP  rQ  rT  rL  rU  rV  rW  rX  r(   r)   Úindexcolvalsr{  Úindexcolvals                     r-   ro  z(ExcelFormatter._format_hierarchical_rowsü  s
  è ø€ Ø×Ò §¢Ø�OŠO˜qÑ �Oàˆà�:‹:ØŸ7™7Ÿ=™=×.Ñ.ˆLà×Ò¤JØ× Ñ ¤4¬´·
±
¼EÐ"Bô%ð  $×/Ñ/�ô
 ˜$Ÿ,™,¬
Ô3Ø—’ 1Ñ$•ô ×Ñ Ñ.°4·;±;ÀeÑ3KÜ"+¨LÓ"9ò K‘J�D˜$Ü# D§O¡O°aÑ$7¸¸tÀTÓJÓJðKð ×Ó D×$4Ñ$4¸	Ó$Aà!ŸW™WŸ]™]×8Ñ8Ø!°ð 9ó �
ô !2°*Ó =�ä25Ø!Ø—G‘G—M‘M×(Ñ(Ø—G‘G—M‘M×'Ñ'Ø ô	3ò  !Ñ.�E˜6 ;ð $Ÿ[™[Ø#Ø#)×#6Ñ#6Ø#)×#3Ñ#3ð )ó �Fô " &¨¡)¬VÔ4Ø!'×!4Ñ!4Ó!6˜à',§{¡{£}ò ™˜˜8Ø/9Ñ,˜
 HØ# aš<Ø)-¯©¸1Ñ)<¸xÑ)GÈ!Ñ)K˜JØ'.˜HÜ*Ø $§¡°!Ñ 3Ø 'Ø & q¡	Ø"&Ü'.¨t¯{©{¸KÈÓ'NØ$%Ø$+Ø*.×*>Ñ*>Ø'1Ø%-ôó ðð" ˜q‘L‘GñA !ôH %(¨¯©¯©Ð$D¸tÑ$Dò !�LÜ,5°lÓ,Cò Ñ(˜˜[ä% k´6Ô:Ø*5×*BÑ*BÓ*D˜Kä*Ø $§¡°#Ñ 5Ø 'Ø +Ø"&Ü'.¨t¯{©{¸KÈÓ'NØ$'Ø$+Ø*.×*>Ñ*>ô	ó 	ðð ˜q‘L‘Gð!!ð$ ×&Ñ& wÓ/×/Ò/ús   ‚MMÍMÍMc                ó,   — t        | j                  «      S )z1Whether the aliases for column names are present.)r   r/  rq  s    r-   rG  zExcelFormatter._has_aliasesT  s   € ô ˜DŸK™KÓ(Ð(r/   c              #  ó:  K  — t        t        | j                  «      «      D ]v  }| j                  j                  d d …|f   }t        |«      D ]I  \  }}t        | j                  |z   ||z   |d t        | j                  dd «      ||| j                  ¬«      –— ŒK Œx y ­w)NÚctxr[  )Úranger  r   r(  ÚilocrI  r;   r"  r:  r$  r'  )r,   rR  ÚcolidxÚseriesrW  r&   s         r-   ry  zExcelFormatter._generate_bodyY  s—   è ø€ äœC §¡Ó-Ó.ò 	ˆFØ—W‘W—\‘\¢! V )Ñ,ˆFÜ# FÓ+ò 
‘��3Ü"ØŸ™¨!Ñ+Ø Ñ*ØØÜ& t§{¡{°E¸4Ó@ØØ"Ø"&×"6Ñ"6ô	ó 	ñ
ñ	ùs   ‚BBc              #  óÂ   K  — t        j                  | j                  «       | j                  «       «      D ]&  }| j	                  |j
                  «      |_        |–— Œ( y ­wr+   )ri  rj  rm  rr  r;  r&   )r,   Úcells     r-   Úget_formatted_cellsz"ExcelFormatter.get_formatted_cellsi  sM   è ø€ Ü—O‘O D×$7Ñ$7Ó$9¸4×;LÑ;LÓ;NÓOò 	ˆDØ×)Ñ)¨$¯(©(Ó3ˆDŒHØ‹Jñ	ùs   ‚AAc                ó�   — |dk  rt        d|› �«      ‚d}|dkD  s|s)t        |d«      \  }}t        d|z   «      |z   }|dkD  rŒ&|sŒ)|S )a‹  
        Convert 0-based column index to Excel column name.

        Parameters
        ----------
        index : int
            The numeric column index to convert to an Excel column name.

        Returns
        -------
        column_name : str
            The column name corresponding to the index.

        Raises
        ------
        ValueError
            Index is negative
        r   zIndex cannot be negative: rö   é   éA   )r  ÚdivmodÚchr)r,   r-  Úcolumn_nameÚ	remainders       r-   Ú
_num2excelzExcelFormatter._num2exceln  sc   € ð& �1Š9ÜÐ9¸%¸ÐAÓBÐBØˆà�aŠi™{Ü% e¨RÓ0ÑˆE�9Ü˜b 9™nÓ-°Ñ;ˆKð �a‹iš{ð Ðr/   c	           
     ó  — ddl m}	 | j                  j                  \  }
}|
| j                  kD  s|| j
                  kD  r+t        d|
› d|› d| j                  › d| j
                  › �«      ‚| j                  �rd}d}|dk(  rd}nÏ| j                  rÁd}t        | j                  j                  t        «      r:| j                  rt        d«      ‚| j                  j                  j                  dz
  }t        | j                  t        «      rI| j                  rt        d«      ‚| j                  j                  }| j                  j                  dz   }nd}| j                  |«      › ||z   › �}| j                  ||z   |z   «      }|› ||
z   |z   › �}|› d	|› �}nd
}|€i }| j                  «       }t        ||	«      rd}n |	||||¬«      }d}	 |j!                  ||||||¬«       |r|j#                  «        y
y
# |r|j#                  «        w w xY w)aí  
        writer : path-like, file-like, or ExcelWriter object
            File path or existing ExcelWriter
        sheet_name : str, default 'Sheet1'
            Name of sheet which will contain DataFrame
        startrow :
            upper left cell row to dump data frame
        startcol :
            upper left cell column to dump data frame
        freeze_panes : tuple of integer (length 2), default None
            Specifies the one-based bottommost row and rightmost column that
            is to be frozen
        engine : string, default None
            write engine to use if writer is a path - you can also set this
            via the options ``io.excel.xlsx.writer``,
            or ``io.excel.xlsm.writer``.

        storage_options : dict, optional
            Extra options that make sense for a particular storage connection, e.g.
            host, port, username, password, etc. For HTTP(S) URLs the key-value pairs
            are forwarded to ``urllib.request.Request`` as header options. For other
            URLs (e.g. starting with "s3://", and "gcs://") the key-value pairs are
            forwarded to ``fsspec.open``. Please see ``fsspec`` and ``urllib`` for more
            details, and for more examples on storage options refer `here
            <https://pandas.pydata.org/docs/user_guide/io.html?
            highlight=storage_options#reading-writing-remote-files>`_.

        engine_kwargs: dict, optional
            Arbitrary keyword arguments passed to excel engine.
        r   r   z-This sheet is too large! Your sheet size is: z, z Max sheet size is: rd   zwExcel filters merged cells by showing only the first row. 'autofilter' and 'merge_cells' cannot be used simultaneously.rø   ú:NF)ÚengineÚstorage_optionsÚengine_kwargsT)ÚstartrowÚstartcolÚfreeze_panesÚautofilter_range)Úpandas.io.excelr    r(  ÚshapeÚmax_rowsÚmax_colsr  r2  r-  rŠ   r   r0  rE  r   rš  r’  Ú_write_cellsÚclose)r,   ÚwriterÚ
sheet_namer   r¡  r¢  r�  rž  rŸ  r    Únum_rowsÚnum_colsÚstartrowsoffsetÚendrowsoffsetÚindexoffsetÚstartÚautofilter_end_columnÚendr£  Úformatted_cellsÚ	need_saves                        r-   ÚwritezExcelFormatter.writeŠ  s-  € õR 	0à!ŸW™WŸ]™]Ñˆ�(Ø�d—m‘mÒ# x°$·-±-Ò'?ÜØ?À¸zÈÈHÈ:ð V&Ø&*§m¡m _°B°t·}±}°oðGóð ð
 �?‹?àˆOØˆMà˜1Š}Ø‘Ø—’Ø�Ü˜dŸg™gŸm™m¬ZÔ8Ø×'Ò'Ü(ð6óð ð '+§g¡g§m¡m×&;Ñ&;¸aÑ&?˜ä˜dŸl™l¬JÔ7Ø×'Ò'Ü(ð6óð ð +/¯,©,×*>Ñ*>˜à(,¯©×(<Ñ(<¸qÑ(@™ð !�Ø—‘ xÓ0Ð1°(¸_Ñ2LÐ1MÐNˆEØ$(§O¡O°H¸xÑ4GÈ+Ñ4UÓ$VÐ!Ø*Ð+¨H°xÑ,?À-Ñ,OÐ+PÐQˆCØ"' ¨¨#¨Ð/Ñà#ÐàÐ ØˆMà×2Ñ2Ó4ˆÜ�f˜kÔ*Ø‰Iá ØØØ /Ø+ô	ˆFð ˆIð	Ø×ÑØØØ!Ø!Ø)Ø!1ð  ô ñ Ø—‘•ð ø‰yØ—‘•ð ús   ÇG3 Ç3H)
rö   NNTTNFÚinfNF)r#  rÖ   r,  r  r3  zSequence[Hashable] | Noner/  zSequence[Hashable] | boolr-  r¦   r.  zIndexLabel | Noner0  r   r1  rÖ   r'  rL   r2  r¦   r2   r3   )r2   úIterable[ExcelCell])r2   r¦   )rR  r0   r2   r¸  )r-  r0   r2   rÖ   )ÚSheet1r   r   NNNN)rª  z)FilePath | WriteExcelBuffer | ExcelWriterr«  rÖ   r   r0   r¡  r0   r¢  ztuple[int, int] | Noner�  r  rž  zStorageOptions | NonerŸ  rK   r2   r3   )r4   r5   r6   r  r¦  r§  r.   r;  rY  r_  rm  rr  rp  ro  ÚpropertyrG  ry  r’  rš  r¶  r9   r/   r-   r  r  ó  sp  „ ñ#ðJ €HØ€Hð
 Ø#'Ø*.Ø,0ØØ)-Ø-2ØØ+/Ø ð0%ð ð0%ð !ð	0%ð
 (ð0%ð *ð0%ð ð0%ð 'ð0%ð +ð0%ð ð0%ð )ð0%ð ð0%ð 
ó0%òdó$1ófó>*ó,/ó,2ó\V0ðp ò)ó ð)óó ó
ð> #ØØØ/3Ø!Ø15Ø%)ðuà9ðuð ðuð ð	uð
 ðuð -ðuð ðuð /ðuð #ðuð 
ôur/   r  )8r  Ú
__future__r   Úcollections.abcr   r   r   r   r   rx   ri  ró   Útypingr	   r
   r   r»   Únumpyrv  Úpandas._libs.libr   Úpandas.util._exceptionsr   Úpandas.core.dtypesr   Úpandas.core.dtypes.commonr   r   Úpandasr   r   r   r   r   Úpandas.core.commonÚcoreÚcommonr€  Úpandas.io.formats._color_datar   Úpandas.io.formats.cssr   r   Úpandas.io.formats.formatr   Úpandas._typingr   r   r   r   r   r    r"   r;   rO   r  r9   r/   r-   ú<module>rË     s¨   ðñõ #÷õ ó Û Û 	÷ñ ó
 ã å )Ý 4å &÷÷
õ ÷ !Ð  å 5÷õ 7á÷õ õ #÷!ñ !ô*K�9ô K÷2CAñ CA÷LLò Lr/   