Ë
    £èh¦;  ã                  ó  — d dl mZ d dlmZmZmZmZ d dlZd dlm	Z	m
Z
mZ d dlmZmZmZ d dlmZ ddlmZmZmZ d d	lmZmZ erd d
lmZ d dlmZ d dlmZmZ  ej<                  d«      Zdd„Z  e d«      Z! G d„ d«      Z"y)é    )Úannotations)ÚTYPE_CHECKINGÚIteratorÚcastÚOptionalN)ÚDXFKeyErrorÚDXFValueErrorÚDXFStructureError)ÚMODEL_SPACE_R2000ÚPAPER_SPACE_R2000ÚTMP_PAPER_SPACE_NAME)Úis_valid_table_nameé   )ÚLayoutÚ
ModelspaceÚ
Paperspace)Ú	DXFEntityÚBlockRecord)ÚAuditor)ÚDrawing)Ú
DictionaryÚ	DXFLayoutÚezdxfc                ó"   — | j                  «       S )zOAutoCAD uses case-insensitive layout names, but stores the name case-sensitive.)Úupper)Únames    ú5lib/python3.12/site-packages/ezdxf/layouts/layouts.pyÚkeyr      s   € à�:‰:‹<Ðó    ÚModelc                  ó  — e Zd Zdd„Zedd„«       Zd d„Zd!d„Zd"d„Zd#d„Z	d$d„Z
d%d„Zd	„ Zd
„ Zd&d„Zd'd„Zd(d)d„Zed*d„«       Zd+d„Zd,d„Zd-d„Zd.d„Zd/d„Zd0d„Zd1d„Zd/d„Zd2d„Zd3d„Zd„ Zd4d„Zd4d„Zd5d„Zd6d„Z y)7ÚLayoutsc                óp   — || _         i | _        t        d| j                   j                  d   «      | _        y)z#Default constructor. (internal API)r   ÚACAD_LAYOUTN)ÚdocÚ_layoutsr   ÚrootdictÚ_dxf_layouts)Úselfr%   s     r   Ú__init__zLayouts.__init__!   s1   € àˆŒà+-ˆŒä(,Ø˜$Ÿ(™(×+Ñ+¨MÑ:ó)
ˆÕr   c                ó\   — t        |«      }|j                  «        |j                  «        |S )z(Constructor from scratch. (internal API))r"   Úsetup_modelspaceÚsetup_paperspace©Úclsr%   Úlayoutss      r   ÚsetupzLayouts.setup+   s*   € ô ˜#“,ˆØ× Ñ Ô"Ø× Ñ Ô"Øˆr   c                ó,   — t        | j                  «      S )zKReturns count of existing layouts, including the modelspace
        layout.)Úlenr&   ©r)   s    r   Ú__len__zLayouts.__len__3   s   € ô �4—=‘=Ó!Ð!r   c                óx   — t        |t        «      sJ t        t        «      «       ‚t        |«      | j                  v S )z(Returns ``True`` if layout `name` exist.)Ú
isinstanceÚstrÚtyper   r&   ©r)   r   s     r   Ú__contains__zLayouts.__contains__8   s.   € ä˜$¤Ô$Ð/¤d¬3£iÓ/Ð$Ü�4‹y˜DŸM™MÐ)Ð)r   c                óH   — t        | j                  j                  «       «      S )z|Returns iterable of all layouts as :class:`~ezdxf.layouts.Layout`
        objects, including the modelspace layout.
        )Úiterr&   Úvaluesr4   s    r   Ú__iter__zLayouts.__iter__=   s   € ô �D—M‘M×(Ñ(Ó*Ó+Ð+r   c                óê   — |j                   }||j                  _        | j                  j                  j                  |j                  _        || j                  t        |«      <   || j                  |<   y ©N)Ú
dxf_layoutÚdxfr   r(   ÚhandleÚownerr&   r   )r)   r   ÚlayoutrB   s       r   Ú_add_layoutzLayouts._add_layoutC   sY   € Ø×&Ñ&ˆ
Ø"ˆ
�‰ÔØ#×0Ñ0×4Ñ4×;Ñ;ˆ
�‰ÔØ#)ˆ�‰”c˜$“iÑ Ø",ˆ×Ñ˜$Òr   c                ó~   — |j                   }| j                  j                  |«       | j                  t	        |«      = y rA   )r   r(   Údiscardr&   r   )r)   rF   r   s      r   Ú_discardzLayouts._discardJ   s/   € Ø�{‰{ˆØ×Ñ×!Ñ! $Ô'Ø�M‰Mœ#˜d›)Ñ$r   c                óØ   — d}|j                   j                  }|}|| v r|dz  }|d|› d�z   }|| v rŒt        | j                  «      dz   |j                   _        | j                  ||«       y)zAAppend an existing (copied) paperspace layout as last layout tab.r   z (Ú)N)rC   r   r3   r&   ÚtaborderrG   )r)   rF   ÚindexÚbase_layout_nameÚlayout_names        r   Úappend_layoutzLayouts.append_layoutO   ss   € àˆØ!Ÿ:™:Ÿ?™?ÐØ&ˆØ˜TÑ!Ø�Q‰JˆEØ*¨r°%°¸¨]Ñ:ˆKð ˜TÒ!ô " $§-¡-Ó0°1Ñ4ˆ�
‰
ÔØ×Ñ˜ fÕ-r   c                óB   — | j                  t        dt        ddi¬«       y)z Modelspace setup. (internal API)r    rM   r   ©Ú
dxfattribsN)Ú_new_specialr   r   r4   s    r   r,   zLayouts.setup_modelspaceZ   s#   € à×ÑÜ˜Ô!2À
ÈA¸ð 	õ 	
r   c                óB   — | j                  t        dt        ddi¬«       y)z"First layout setup. (internal API)ÚLayout1rM   r   rS   N)rU   r   r   r4   s    r   r-   zLayouts.setup_paperspace`   s#   € à×ÑÜ˜	Ô#4À*ÈaÀð 	õ 	
r   c                óè   — || j                   v rt        d|› d�«      ‚| j                  j                  j                  |d<   |j                  ||| j                  |¬«      }| j                  ||«       |S )NúLayout "z" already existsrE   rS   )r&   r	   r(   rC   rD   Únewr%   rG   )r)   r/   r   Ú
block_namerT   rF   s         r   rU   zLayouts._new_specialf   sn   € Ø�4—=‘=Ñ Ü (¨4¨&Ð0@Ð AÓBÐBØ"×/Ñ/×3Ñ3×:Ñ:ˆ
�7ÑØ—‘˜˜z¨4¯8©8À
�ÓKˆØ×Ñ˜˜vÔ&Øˆr   c                ód   — | j                   j                  }d}d|z  |v r|dz  }d|z  |v rŒd|z  S )z0Returns a unique paperspace name. (internal API)r   z*Paper_Space%dr   )r%   Úblocks)r)   r]   Úcounts      r   Úunique_paperspace_namezLayouts.unique_paperspace_namen   sD   € à—‘—‘ˆØˆØ Ñ&¨&Ñ0Ø�Q‰JˆEð  Ñ&¨&Ò0à %Ñ'Ð'r   Nc                óþ  — t        |t        «      sJ t        t        «      «       ‚t        |«      st	        d«      ‚|| v rt	        d|› d�«      ‚t        |xs i «      }| j                  j                  j                  |d<   |j                  dt        | j                  «      dz   «       | j                  «       }t        j                  ||| j                  |¬«      }|j!                  «        | j#                  ||«       |S )až  Returns a new :class:`~ezdxf.layouts.Paperspace` layout.

        Args:
            name: layout name as shown in tabs in :term:`CAD` applications
            dxfattribs: additional DXF attributes for the
                :class:`~ezdxf.entities.layout.DXFLayout` entity

        Raises:
            DXFValueError: Invalid characters in layout name.
            DXFValueError: Layout `name` already exist.

        z(Layout name contains invalid characters.rY   ú" already exist.rE   rM   r   rS   )r7   r8   r9   r   r	   Údictr(   rC   rD   Ú
setdefaultr3   r&   r_   r   rZ   r%   Úreset_limitsrG   )r)   r   rT   r[   rF   s        r   rZ   zLayouts.newv   sß   € ô ˜$¤Ô$Ð/¤d¬3£iÓ/Ð$Ü" 4Ô(ÜÐ JÓKÐKà�4‰<Ü (¨4¨&Ð0@Ð AÓBÐBä˜*Ò*¨Ó+ˆ
Ø"×/Ñ/×3Ñ3×:Ñ:ˆ
�7ÑØ×Ñ˜j¬#¨d¯m©mÓ*<¸qÑ*@ÔAØ×0Ñ0Ó2ˆ
Ü—‘  j°$·(±(ÀzÔRˆð 	×ÑÔØ×Ñ˜˜vÔ&Øˆr   c                ó²   —  | |«      }|j                  «        t        |«      dk  r0|j                  dt        d¬«       |j                  dt        d¬«       |S )z0Constructor if loading from file. (internal API)é   r    r   )rM   rW   r   )Úsetup_from_rootdictr3   Úrestorer   r   r.   s      r   ÚloadzLayouts.load•   sR   € ñ �c“(ˆØ×#Ñ#Ô%ô ˆw‹<˜!ÒØ�O‰O˜GÔ%6ÀˆOÔCØ�O‰O˜IÔ'8À1ˆOÔEØˆr   c                ó~   — || v ry| j                   j                  j                  |«      }| j                  |||«       y)zMRestore layout from block if DXFLayout does not exist.
        (internal API)N)r%   r]   ÚgetÚ_new_from_block_layout)r)   r   Úblock_record_namerM   Úblock_layouts        r   rh   zLayouts.restore¢   s9   € ð �4‰<ØØ—x‘x—‘×*Ñ*Ð+<Ó=ˆØ×#Ñ# D¨,¸ÕAr   c                ó�  — | j                   j                  j                  ||j                  |dœ}t	        d| j
                  j                  j                  d|¬«      «      }t        |«      t        k(  r!t        j                  || j
                  «      }n t        j                  || j
                  «      }| j                  ||«       |S )N)rE   r   Úblock_record_handlerM   r   ÚLAYOUTrS   )r(   rC   rD   rp   r   r%   ÚobjectsÚ
new_entityr   ÚMODELr   ri   r   rG   )r)   r   rn   rM   rT   rB   rF   s          r   rl   zLayouts._new_from_block_layoutª   s¤   € à×&Ñ&×*Ñ*×1Ñ1ØØ#/×#CÑ#CØ ñ	
ˆ
ô ØØ�H‰H×Ñ×'Ñ'¨¸ZÐ'ÓHó
ˆ
ô ˆt‹9œÒÜ—_‘_ Z°·±Ó:‰Fä—_‘_ Z°·±Ó:ˆFØ×Ñ˜˜vÔ&Øˆr   c                óP  — | j                   j                  «       D ]‰  \  }}t        |t        «      rt        j                  d|› d|› d�«       Œ3t        |«      t        k(  rt        || j                  «      }nt        || j                  «      }|| j                  t        |«      <   Œ‹ y)z9Setup layout manager from root dictionary. (internal API)zignore missing LAYOUT(#z
) entity 'Ú'N)r(   Úitemsr7   r8   ÚloggerÚdebugr   rt   r   r%   r   r&   )r)   r   rB   rF   s       r   rg   zLayouts.setup_from_rootdict¼   sŠ   € ð !%× 1Ñ 1× 7Ñ 7Ö 9ÑˆD�*Ü˜*¤cÔ*Ü—‘Ð6°z°lÀ*ÈTÈFÐRSÐTÔUØÜ�4‹yœEÒ!Ü# J°·±Ó9‘ä# J°·±Ó9�à'-ˆD�M‰Mœ#˜d›)Ò$ñ !:r   c                ó@   — t        t        | j                  d«      «      S )z6Returns the :class:`~ezdxf.layouts.Modelspace` layout.r    )r   r   rk   r4   s    r   Ú
modelspacezLayouts.modelspaceÊ   s   € ä”J §¡¨Ó 1Ó2Ð2r   c                óp   — | j                   j                  «       D �cg c]  }|j                  ‘Œ c}S c c}w )zNReturns a list of all layout names, all names in original case-sensitive form.)r&   r>   r   ©r)   rF   s     r   ÚnameszLayouts.namesÎ   s-   € à*.¯-©-×*>Ñ*>Ô*@ÓAÑ*@ �—“Ð*@ÑAÐAùÒAs   �3c                ó`   — |xs | j                  «       d   }| j                  t        |«         S )zÆReturns :class:`~ezdxf.layouts.Layout` by `name`, case-insensitive
        "Model" == "MODEL".

        Args:
            name: layout name as shown in tab, e.g. ``'Model'`` for modelspace

        r   )Únames_in_taborderr&   r   r:   s     r   rk   zLayouts.getÒ   s/   € ð Ò2�t×-Ñ-Ó/°Ñ2ˆØ�}‰}œS ›YÑ'Ð'r   c                ór  — t        |t        «      sJ t        |«      «       ‚t        |t        «      sJ t        |«      «       ‚t        |«      t        k(  rt        d«      ‚|| v rt        d|› d�«      ‚|| vrt        d|› d�«      ‚| j                  |«      }| j                  |«       | j                  ||«       y)a›  Rename a layout from `old_name` to `new_name`.
        Can not rename layout ``'Model'`` and the new name of a layout must
        not exist.

        Args:
            old_name: actual layout name, case-insensitive
            new_name: new layout name, case-insensitive

        Raises:
            DXFValueError: try to rename ``'Model'``
            DXFValueError: Layout `new_name` already exist.

        zCan not rename model space.rY   ra   ú" does not exist.N)	r7   r8   r9   r   rt   r	   rk   rJ   rG   )r)   Úold_nameÚnew_namerF   s       r   ÚrenamezLayouts.renameÝ   s²   € ô ˜(¤CÔ(Ð8¬$¨x«.Ó8Ð(Ü˜(¤CÔ(Ð8¬$¨x«.Ó8Ð(Üˆx‹=œEÒ!ÜÐ =Ó>Ð>Ø�tÑÜ (¨8¨*Ð4DÐ EÓFÐFØ˜4ÑÜ (¨8¨*Ð4EÐ FÓGÐGà—‘˜(Ó#ˆØ�‰�fÔØ×Ñ˜ 6Õ*r   c                óâ   — | j                   j                  «       D �cg c]$  }|j                  j                  |j                  f‘Œ& }}t        |«      D ��cg c]  \  }}|‘Œ	 c}}S c c}w c c}}w )zSReturns all layout names in tab order as shown in :term:`CAD`
        applications.)r&   r>   rC   rM   r   Úsorted)r)   rF   r~   Úorderr   s        r   r€   zLayouts.names_in_taborderø   sk   € ð >B¿]¹]×=QÑ=QÔ=Só
Ù=S°6ˆV�Z‰Z× Ñ  &§+¡+Ò.Ð=Sð 	ð 
ô )/¨u¬Ô6©™˜ ’¨Ò6Ð6ùò
ùó 7s   �)A&ÁA+c                ó’   — |j                   j                  }|€t        d«      ‚| j                  |j                   j                  «      S )z,Returns the owner layout for a DXF `entity`.z$No associated layout, owner is None.)rC   rE   r   Úget_layout_by_key)r)   ÚentityrE   s      r   Úget_layout_for_entityzLayouts.get_layout_for_entity   s=   € à—
‘
× Ñ ˆØˆ=ÜÐDÓEÐEØ×%Ñ% f§j¡j×&6Ñ&6Ó7Ð7r   c                ó¾  — t        |t        «      sJ t        |«      «       ‚d|› d�}	 | j                  j                  |   }t        |t        «      st        |«      ‚	 | j                  j                  |j                  j                     }| j                  |j                  j                  «      S # t
        $ r t        |«      ‚w xY w# t
        $ r t        |«      ‚w xY w)z4Returns a layout by its `layout_key`. (internal API)zLayout with key "r‚   )r7   r8   r9   r%   ÚentitydbÚKeyErrorr   r   rC   rF   rk   r   )r)   Ú
layout_keyÚ	error_msgÚblock_recordrB   s        r   rŠ   zLayouts.get_layout_by_key  sÒ   € ä˜*¤cÔ*Ð<¬D°Ó,<Ó<Ð*Ø'¨
 |Ð3DÐEˆ	ð	)ØŸ8™8×,Ñ,¨ZÑ8ˆLô ˜,¬Ô4ä˜iÓ(Ð(ð	)ØŸ™×*Ñ*¨<×+;Ñ+;×+BÑ+BÑCˆJð �x‰x˜
Ÿ™×+Ñ+Ó,Ð,øô ò 	)Ü˜iÓ(Ð(ð	)ûô ò 	)Ü˜iÓ(Ð(ð	)ús   ¨B/ Á-C Â/CÃCc                ó€   — | j                   j                  j                  t        «      }|j                  j
                  S )zKReturns layout kay for the active paperspace layout.
        (internal API))r%   Úblock_recordsrk   r   rC   rD   )r)   Úactive_layout_block_records     r   Úget_active_layout_keyzLayouts.get_active_layout_key  s2   € ð &*§X¡X×%;Ñ%;×%?Ñ%?Ô@QÓ%RÐ"Ø)×-Ñ-×4Ñ4Ð4r   c                ó°  — t        |t        «      sJ t        |«      «       ‚t        |«      t        k(  rt        d«      ‚| j                  |«      }| j                  «       }||j                  k(  ry| j                  j                  }|j                  }|j                  t        t        «       |j                  |t        «       |j                  t        |«       y)z.Set layout `name` as active paperspace layout.z(Can not set model space as active layoutN)r7   r8   r9   r   rt   r	   rk   r–   r�   r%   r]   rm   Úrename_blockr   r   )r)   r   Únew_active_layoutÚold_active_layout_keyr]   Únew_active_paper_space_names         r   Úset_active_layoutzLayouts.set_active_layout  s±   € ä˜$¤Ô$Ð0¤d¨4£jÓ0Ð$Üˆt‹9œÒÜÐ JÓKÐKà ŸH™H T›NÐØ $× :Ñ :Ó <ÐØ Ð$5×$@Ñ$@Ò@Øà—‘—‘ˆØ&7×&IÑ&IÐ#à×ÑÔ-Ô/CÔDØ×ÑÐ7Ô9JÔKØ×ÑÔ0Ð2MÕNr   c                ó¼  — t        |t        «      sJ t        |«      «       ‚t        |«      t        k(  rt        d«      ‚| j                  |«      }t        | «      dk  rt        d«      ‚|j                  | j                  «       k(  r7| j                  D ](  }|t        |«      t        fvsŒ| j                  |«        n | j                  |«       |j                  «        y)ad  Delete layout `name` and destroy all entities in that layout.

        Args:
            name (str): layout name as shown in tabs

        Raises:
            DXFKeyError: if layout `name` do not exist
            DXFValueError: deleting modelspace layout is not possible
            DXFValueError: deleting last paperspace layout is not possible

        z!Can not delete modelspace layout.é   z&Can not delete last paperspace layout.N)r7   r8   r9   r   rt   r	   rk   r3   r�   r–   r&   rœ   rJ   Údestroy)r)   r   rF   rP   s       r   ÚdeletezLayouts.delete0  s¸   € ô ˜$¤Ô$Ð0¤d¨4£jÓ0Ð$Üˆt‹9œÒÜÐ CÓDÐDà—‘˜$“ˆÜˆt‹9�qŠ=ÜÐ HÓIÐIØ×Ñ × :Ñ :Ó <Ò<à#Ÿ}œ}�à¤s¨4£y´%Ð&8Ò8Ø×*Ñ*¨;Ô7Ùð	  -ð
 	�‰�fÔØ�‰Õr   c                ób   — | D ]   }|j                   sŒt        t        |«      c S  t        d«      ‚)z%Returns the active paperspace layout.z"No active paperspace layout found.)Úis_active_paperspacer   r   r
   r}   s     r   Úactive_layoutzLayouts.active_layoutM  s0   € ãˆFØ×*Ó*ÜœJ¨Ó/Ò/ð ô  Ð DÓEÐEr   c           	     óJ  — ddl m} |j                  }d„ |j                  D «       }|D ]j  }|j                  j                  d«      }|| vsŒ#|j                  |j                  dt        |«      › d|› d�¬«       |j                  j                  |«       Œl |j                  D �ch c]K  }|j                  j                  j                  «       j                  d	«      r|j                  j                  ’ŒM }}| j                  j!                  «       D �ch c]4  }t#        |j                  «      t$        k7  r|j                  j&                  ’Œ6 }	}|j)                  |	«      }
t+        |
«      r²|
D ]¬  }|j,                  j                  |«      }|j                  j                  d«      }|j                  |j.                  d
t        |«      › d|› d�¬«       ||j0                  v r|j0                  j3                  |d¬«       Œ’|j                  j5                  |«       Œ® y y c c}w c c}w )Nr   )Ú
AuditErrorc              3  óH   K  — | ]  }|j                  «       d k(  sŒ|–— Œ y­w)rq   N)Údxftype)Ú.0Úos     r   Ú	<genexpr>z Layouts.audit.<locals>.<genexpr>Z  s   è ø€ ÐE™k˜¨Q¯Y©Y«[¸HÓ-D”1™kùs   ‚"›"r   zRemoved orphaned z "Ú")ÚcodeÚmessagez*paper_spacezRemoved orphaned layout F)Úsafe)Úezdxf.auditr¥   r%   rr   rC   rk   Úfixed_errorÚORPHANED_LAYOUT_ENTITYr8   Údelete_entityr”   r   ÚlowerÚ
startswithrD   r&   r>   r   rt   rp   Ú
differencer3   rŽ   Ú(ORPHANED_PAPER_SPACE_BLOCK_RECORD_ENTITYr]   Údelete_blockÚremove)r)   Úauditorr¥   r%   r0   rF   r   ÚbrÚpsp_br_handlesÚpsp_layout_br_handlesÚmismatchrD   s               r   ÚauditzLayouts.auditT  sæ  € Ý*à�k‰kˆñ F˜cŸkškÓEˆÛˆFØ—:‘:—>‘> &Ó)ˆDØ˜4ÒØ×#Ñ#Ø#×:Ñ:Ø/´°F³¨}¸B¸t¸fÀAÐFð $ô ð —‘×)Ñ)¨&Õ1ð ð ×'Ò'ó
á'�Ø�v‰v�{‰{× Ñ Ó"×-Ñ-¨nÔ=ð �F‰F�M‹MØ'ð 	ð 
ð Ÿ-™-×.Ñ.Ô0ó!
á0�Ü�6—;‘;Ó¤5Ò(ð �J‰J×*Ó*Ø0ð 	ð !
ð
 "×,Ñ,Ð-BÓCˆÜˆxŒ=Û"�Ø—\‘\×%Ñ% fÓ-�Ø—v‘v—z‘z &Ó)�Ø×#Ñ#Ø#×LÑLØ6´s¸2³w°i¸rÀ$ÀÀqÐIð $ô ð ˜3Ÿ:™:Ñ%Ø—J‘J×+Ñ+¨D°uÐ+Õ=à×%Ñ%×,Ñ,¨TÕ2ñ #ð ùò
ùò
!
s   Â#AHÄ9H )r%   r   )ÚreturnÚint)r   r8   r¿   Úbool)r¿   zIterator[Layout])r   r8   rF   r   )rF   r   )rF   r   r¿   ÚNone)r   r8   r[   r8   rT   rb   r¿   r   )r¿   r8   rA   )r   r8   r¿   r   )r%   z	'Drawing'r¿   z	'Layouts')r   r8   rm   r8   rM   rÀ   r¿   rÂ   )rM   rÀ   r¿   z'Layout')r¿   rÂ   )r¿   r   )r¿   z	list[str])r   zOptional[str]r¿   r   )rƒ   r8   r„   r8   r¿   rÂ   )r‹   r   r¿   r   )r�   r8   r¿   r   )r   r8   r¿   rÂ   )r¿   r   )r¹   r   )!Ú__name__Ú
__module__Ú__qualname__r*   Úclassmethodr1   r5   r;   r?   rG   rJ   rQ   r,   r-   rU   r_   rZ   ri   rh   rl   rg   r{   r~   rk   r…   r€   rŒ   rŠ   r–   rœ   r    r£   r¾   © r   r   r"   r"       sµ   „ ó
ð òó ðó"ó
*ó
,ó-ó%ó
	.ò
ò
óó(ôð> ò
ó ð
óBóó$.ó3óBó	(ó+ó67ó8ó-ò"5óOó$ó:Fô'3r   r"   )r   r8   r¿   r8   )#Ú
__future__r   Útypingr   r   r   r   ÚloggingÚezdxf.lldxf.constr   r	   r
   r   r   r   Úezdxf.lldxf.validatorr   rF   r   r   r   Úezdxf.entitiesr   r   r¯   r   Úezdxf.documentr   r   r   Ú	getLoggerrx   r   rt   r"   rÇ   r   r   Ú<module>rÐ      sk   ðõ #ß :Ó :Û ß KÑ K÷ñ õ
 6ß 2Ñ 2ß 1áÝ#Ý&ß4à	ˆ×	Ñ	˜7Ó	#€óñ
 	ˆG‹€÷[3ò [3r   