ó
    �®žj±D  ã                   ó¶  • S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSK
JrJrJrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJrJr  SSKJr  SSKJr  SSKJrJr  SSK J!r!J"r"J#r#J$r$J%r%J&r&J'r'  SSK(J)r)  SSK*J+r+  SSK,J-r-  SSK.J/r/  SSK0J1r1  \Rd                  " \35      r4Sr5\Rl                  " \5S5        Sr7Sr8 " S S\5      r9 " S S5      r:S\S\;\"   S\<\=\4   SS4S  jr>S\S!\#SS4S" jr?S\S#\!S$\:S\S-  4S% jr@S\S&\&SS4S' jrAS\S(\%S$\:S\S-  4S) jrB S2S\S(\%S*\S+\S-  S\4
S, jjrCS\S(\%S*\$S$\:S\4
S- jrDS.\;\'   S\E4S/ jrFS0\=S-  S\\-  S-  4S1 jrGg)3uê  Backend for Apple Pages (``.pages``) documents.

A ``.pages`` file is a ZIP container, but what is inside changed completely with
Pages 5:

* **Pages 5 and later (2013 onwards)** store the document as ``Index/*.iwa`` â€”
  Snappy-framed protobuf whose schemas Apple has never published. This is what
  essentially every Pages document in circulation looks like.
* **iWork '09 and earlier** stored it as a plain ``index.xml``, optionally
  gzipped, alongside a ``QuickLook/Preview.pdf`` render that Apple stopped
  writing after that release.

Both are read into the same model, so the backend is declarative: it builds a
:class:`~docling_core.types.doc.DoclingDocument` directly rather than rendering
pages and running layout analysis over them.
é    N)ÚBytesIO)ÚPath)Úurlparse)ÚContentLayerÚDocItemLabelÚDoclingDocumentÚDocumentOriginÚImageRef)Ú	ListGroup)ÚTextItem)ÚImage)ÚAnyUrlÚValidationError)Úoverride)ÚDeclarativeDocumentBackend)Ú	pages_iwaÚ	pages_xml)ÚBlockÚCommentÚContentÚ	ListLabelÚ	ParagraphÚPictureÚRun©Úis_encrypted)ÚIWorkBackendOptions)ÚInputFormat)ÚInputDocument)ÚDocumentLoadErrorzapplication/vnd.apple.pagesz.pageszIndex/)z	index.xmlzindex.xml.gzc            	       óø   ^ • \ rS rSrSr\ SS\S\\-  S\	S-  4U 4S jjj5       r
S\R                  S	\4S
 jr\S	\4S j5       r\\S	\4S j5       5       r\\S	\\   4S j5       5       r\S	\4S j5       rSrU =r$ )ÚIWorkPagesDocumentBackendéI   a£  Extract text from Apple Pages documents of either generation.

Known limitations:
    * Only text cells are read from a table, in either of the two storage
      layouts Pages has used. A cell holding a number, a date or a formula
      result is left empty rather than guessed at.
    * A picture is placed where the document anchors it, but its caption,
      its cropping and its accessibility description are not read.
    * Bold, italic, underline, strikethrough, superscript, subscript and
      hyperlinks are recovered; other character properties, such as colour
      or capitalisation, have no equivalent here.
    * A list item whose runs differ in formatting keeps its text but loses
      the formatting, since a list item carries a single one.
    * Text boxes are read from Pages 5+ documents, where they are floating
      drawables owned by the document. An iWork '09 document keeps them in
      the body flow, so they already appear there.
    * Headers, footers and footnotes are recovered into the furniture
      content layer and comments into the notes layer, so all of them stay
      out of the reading order by default.
    * A comment records its author but not the date it was written.
    * Password-protected documents cannot be read.
    * ``.pages`` bundles saved as a *directory* package rather than a single
      file are not recognised; the converter cannot address a directory as an
      input document.
NÚin_docÚpath_or_streamÚoptionsc                 óL  >• Uc
  [        5       n[        TU ]	  XU5        X0l        [	        / S9U l        SU l         [        R                  " U5       nU R                  U5      U l        S S S 5        S
U l        g ! , (       d  f       N= f! [         a    e [         a  n[        SU R                   S35      UeS nAf[        [        4 a"  n[        SU R                   SU S35      UeS nAf[        R                  [         4 a  n[        SU R                   S	35      UeS nAff = f)N)ÚblocksFúPages document with hash z is nested too deeply to parse.z(Could not read Pages document with hash z;: the archive contains a member Docling cannot decompress (z).z(Could not open Pages document with hash z+: the file is not a readable ZIP container.T)r   ÚsuperÚ__init__r&   r   Ú_contentÚ_validÚzipfileÚZipFileÚ_read_documentr    ÚRecursionErrorÚdocument_hashÚNotImplementedErrorÚRuntimeErrorÚ
BadZipFileÚOSError)Úselfr$   r%   r&   ÚarchiveÚexcÚ	__class__s         €ÚZ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/docling/backend/iwork_backend.pyr+   Ú"IWorkPagesDocumentBackend.__init__d   sD  ø€ ð ‰?Ü)Ó+ˆGÜ‰Ñ˜°Ô9Ø,3Œä rÑ*ˆŒØˆŒð	Ü—’ Ô0°GØ $× 3Ñ 3°GÓ <�”÷ 1ð6 ˆ�÷7 1Õ0ûä ó 	ØÜó 	ô $Ø+¨D×,>Ñ,>Ð+?ð @#ð #óð ðûô $¤\Ð2ó 	ô
 $Ø:¸4×;MÑ;MÐ:Nð OLØLOÈ5ÐPRðTóð ðûô ×"Ñ"¤GÐ,ó 	Ü#Ø:¸4×;MÑ;MÐ:Nð O<ð <óð ðûð	úsM   »B	 ÁA8Á(B	 Á8
BÂB	 ÂB	 Â	D#ÂB7Â7D#Ã
C'Ã'D#ÄDÄD#r8   Úreturnc                 ó~  ^• UR                  5       n[        U5      U R                  R                  :”  a/  [	        S[        U5       SU R                  R                   S35      e[        S U 5       5      nX0R                  R                  :”  a&  [	        SU SU R                  R                   S35      e[        S U 5       5      (       a  [	        SU R                   S	35      eU Vs1 s H  oDR                  iM     snm[        S
 T 5       5      (       a6  [        R                  " XU R                  R                  U R                  5      $ [        U4S j[         5       S5      nUb6  [        R                  " XU R                  R                  U R                  5      $ [	        SU R                   S35      es  snf )zDDispatch to the reader for whichever generation wrote the container.zPages archive has z2 members, exceeding the max_member_count limit of Ú.c              3   ó8   #   • U  H  oR                   v •  M     g 7f©N)Ú	file_size©Ú.0Úinfos     r;   Ú	<genexpr>Ú;IWorkPagesDocumentBackend._read_document.<locals>.<genexpr>™   s   é € Ð;²U¨TŸ.ž.²Uùó   ‚zPages archive expands to z/ bytes, exceeding the max_total_bytes limit of c              3   ó8   #   • U  H  n[        U5      v •  M     g 7frA   r   rC   s     r;   rF   rG       s   é € Ð4ªe dŒ|˜D×!Ð!ªeùrH   r)   zs is password-protected; Docling cannot read encrypted iWork documents. Remove the password in Pages and save again.c              3   óJ   #   • U  H  oR                  [        5      v •  M     g 7frA   )Ú
startswithÚ_MODERN_INDEX_PREFIX)rD   Únames     r;   rF   rG   ¨   s   é € ÐGÂ¸�‰Ô3×4Ð4Âùs   ‚!#c              3   ó6   >#   • U  H  oT;   d  M
  Uv •  M     g 7frA   © )rD   ÚnÚnamess     €r;   rF   rG   ­   s   øé € ÐFÒ"7˜QÀ¹:—q‘qÒ"7ùs   ƒ	�	NzDocument with hash zo is a ZIP archive but does not look like a Pages document: it has neither an Index/ directory nor an index.xml.)ÚinfolistÚlenr&   Úmax_member_countr    ÚsumÚmax_total_bytesÚanyr2   Úfilenamer   Úread_contentÚmax_file_bytesÚnextÚ_LEGACY_INDEX_MEMBERSr   )r7   r8   ÚinfosÚtotal_bytesrE   ÚlegacyrQ   s         @r;   r0   Ú(IWorkPagesDocumentBackend._read_document‘   s®  ø€ à× Ñ Ó"ˆÜˆu‹:˜Ÿ™×5Ñ5Ó5Ü#Ø$¤S¨£Z Lð 1-Ø-1¯\©\×-JÑ-JÐ,KÈ1ðNóð ô Ñ;±UÓ;Ó;ˆØŸ™×5Ñ5Ó5Ü#Ø+¨K¨=ð 9,Ø,0¯L©L×,HÑ,HÐ+IÈðLóð ô
 Ñ4©eÓ4×4Ñ4Ü#Ø+¨D×,>Ñ,>Ð+?ð @Jð Jóð ñ ,1Ó1ª5 4—”©5Ñ1ˆÜÑGÁÓG×GÑGÜ×)Ò)Ø §¡× ;Ñ ;¸T×=OÑ=Oóð ô ÔFÕ"7ÓFÈÓMˆØÑÜ×)Ò)Ø §¡×!=Ñ!=¸t×?QÑ?Qóð ô  Ø! $×"4Ñ"4Ð!5ð 6 ð  ó
ð 	
ùò 2s   Ã)F:c                 ó   • U R                   $ rA   )r-   ©r7   s    r;   Úis_validÚ"IWorkPagesDocumentBackend.is_valid¹   s   € à�{‰{Ðó    c                 ó   • g)NFrO   ©Úclss    r;   Úsupports_paginationÚ-IWorkPagesDocumentBackend.supports_pagination½   s   € ð re   c                 ó$   • [         R                  1$ rA   )r   ÚIWORK_PAGESrg   s    r;   Úsupported_formatsÚ+IWorkPagesDocumentBackend.supported_formatsÂ   s   € ô ×'Ñ'Ð(Ð(re   c                 ór  • U R                  5       (       d  [        SU R                   S35      e[        U R                  R
                  =(       d    S[        U R                  S9n[        U R                  R                  =(       d    SUS9n[        U5      n0 nU R                  R                   HO  n[        X%U5      n[        U[        5      (       d  M&  Uc  M+  UR                   H  nUR!                  Xv5        M     MQ     [#        X R                  5        [%        X R                  R&                  U5        U$ )Nz(Cannot convert Pages document with hash z$ because the backend failed to init.Úfile)rX   ÚmimetypeÚbinary_hash)rM   Úorigin)rc   r4   r2   r	   rp   rM   Ú_PAGES_MIMETYPEr   ÚstemÚ
_ListStackr,   r(   Ú
_add_blockÚ
isinstancer   ÚanchorsÚ
setdefaultÚ_add_furnitureÚ_add_commentsÚcomments)r7   rs   ÚdocÚlistsÚ	annotatedÚblockÚitemÚanchors           r;   ÚconvertÚ!IWorkPagesDocumentBackend.convertÇ   sù   € à�}‰}�‰ÜØ:¸4×;MÑ;MÐ:Nð O6ð 6óð ô
  Ø—Y‘Y—^‘^×- vÜ$Ø×*Ñ*ñ
ˆô
  4§9¡9§>¡>×#;°VÀFÑKˆä˜3“ˆØ)+ˆ	Ø—]‘]×)Ô)ˆEÜ˜c¨%Ó0ˆDÜ˜%¤×+Ó+°Ó0@Ø#Ÿmœm�FØ×(Ñ(¨Ö6ó ,ñ *ô 	�sŸM™MÔ*Ü�cŸ=™=×1Ñ1°9Ô=Øˆ
re   )r,   r-   r&   rA   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r   r   r+   r.   r/   r   r0   Úboolrc   Úclassmethodri   Úsetr   rm   r   r„   Ú__static_attributes__Ú__classcell__)r:   s   @r;   r"   r"   I   sà   ø† ñð4 ð
 /3ñ	*àð*ð   $™ð*ð % tÑ+÷	*ó ð*ðX&
 g§o¡oð &
¸'ô &
ðP ð˜$ó ó ðð Øð Dó ó ó ðð Øð) # kÑ"2ó )ó ó ð)ð ð˜ó ó öre   r"   c                   óF   • \ rS rSrSrS\SS4S jrSS jrS\S\	4S	 jr
S
rg)rv   éã   aX  The list groups open while consecutive list items keep arriving.

Pages records a nesting depth per paragraph rather than opening and closing
lists, so the groups a :class:`DoclingDocument` needs are inferred here: a
deeper item opens groups down to its depth, a shallower one closes back to
it, and any other paragraph ends the list entirely.
r~   r=   Nc                 ó   • Xl         / U l        g rA   ©Ú_docÚ_groups)r7   r~   s     r;   r+   Ú_ListStack.__init__ì   s   € ØŒ	Ø(*ˆ�re   c                 ó8   • U R                   R                  5         g)z0End the list, so the next item starts a new one.N)r•   Úclearrb   s    r;   ÚcloseÚ_ListStack.closeð   s   € à�‰×ÑÕre   Údepthc                 óR  • U R                   US-   S2	 [        U R                   5      U::  an  U R                   R                  U R                  R	                  SU R                   (       a  U R                   S   OSS95        [        U R                   5      U::  a  Mn  U R                   U   $ )z³Return the group a list item at ``depth`` belongs in, opening it if needed.

Args:
    depth: The item's nesting depth, counted from zero.

Returns:
    The innermost open group.
é   NÚlistéÿÿÿÿ)rM   Úparent)r•   rS   Úappendr”   Úadd_list_group)r7   r›   s     r;   Ú	group_forÚ_ListStack.group_forô   sŠ   € ð �L‰L˜ ™™Ð%Ü�$—,‘,Ó 5Ó(Ø�L‰L×ÑØ—	‘	×(Ñ(Ø¸D¿L¿L¨¯©°RÒ(8Èdð )ð ôô �$—,‘,Ó 5Õ(ð �|‰|˜EÑ"Ð"re   r“   )r=   N)r†   r‡   rˆ   r‰   rŠ   r   r+   r™   Úintr   r£   rŽ   rO   re   r;   rv   rv   ã   s2   † ñð+˜Oð +°ô +ôð#˜sð # y÷ #re   rv   r~   r}   r€   r=   c                 ó”   • U HB  nUR                  UR                  5      nU R                  UR                  U(       a  U/OSS9  MD     g)aœ  Add the document's comments, linked to the text they annotate.

Comments go into the notes content layer, where the Word backend puts them
too, and each is attached to the item holding the text it was written about
whenever that text was recovered.

Args:
    doc: The document being built.
    comments: The comments read from the Pages document.
    annotated: The item each comment anchor was recovered into.
N)ÚtextÚtargets)Úgetrƒ   Úadd_commentr§   )r~   r}   r€   ÚcommentÚtargets        r;   r|   r|     s:   € ó ˆØ—‘˜wŸ~™~Ó.ˆØ�‰˜WŸ\™\¾v°F±8È4ˆÓPò re   Úcontentc                 ó  • UR                   [        R                  4UR                  [        R                  4UR
                  [        R                  44 H)  u  p#U H  n[        XU[        R                  5        M      M+     g)aM  Add the document's headers, footers and footnotes.

They go into the furniture layer, where the Word backend puts a header and a
footer too, so they are available to callers that ask for it but stay out of
the reading order by default.

Args:
    doc: The document being built.
    content: The content read from the Pages document.
N)
Úheadersr   ÚPAGE_HEADERÚfootersÚPAGE_FOOTERÚ	footnotesÚFOOTNOTEÚ	_add_runsr   Ú	FURNITURE)r~   r­   Ú
paragraphsÚlabelÚ	paragraphs        r;   r{   r{     si   € ð 
�‰œ,×2Ñ2Ð3Ø	�‰œ,×2Ñ2Ð3Ø	×	Ñ	œL×1Ñ1Ð2óÑˆ
ó
 $ˆIÜ�c e¬\×-CÑ-CÖDó $òre   r�   r   c                 óÆ   • [        U[        5      (       a  [        XU5      $ UR                  5         [        U[        5      (       a  [        X5        gU R                  US9  g)a9  Add one block of content, in the order Pages lays the document out.

Args:
    doc: The document being built.
    block: The block to add.
    lists: The list groups currently open.

Returns:
    The item a paragraph became, so a comment can be attached to it, or None
    for anything a comment cannot annotate.
)ÚdataN)rx   r   Ú_add_paragraphr™   r   Ú_add_pictureÚ	add_table)r~   r�   r   s      r;   rw   rw   .  sV   € ô �%œ×#Ñ#Ü˜c¨%Ó0Ð0ð 
‡K�K„MÜ�%œ×!Ñ!Ü�SÔ ð ð 	�‰˜5ˆÑ!Øre   Úpicturec                 óŒ  • SnUR                   bW   [        R                  " [        UR                   5      5       n[        R
                  " UR                  S5      SS9nSSS5        U R                  US9  g! , (       d  f       N= f! [        [        4 a+  n[        R                  SUR                  U5         SnANWSnAff = f)z�Add one picture, embedding its image when the bytes can be decoded.

Args:
    doc: The document being built.
    picture: The picture to add.
NÚRGBéH   )ÚimageÚdpiz#Could not decode Pages image %s: %s)rÃ   )r»   r   Úopenr   r
   Úfrom_pilr„   r6   Ú
ValueErrorÚ_logÚdebugrM   Úadd_picture)r~   r¿   rÃ   Úopenedr9   s        r;   r½   r½   H  s™   € ð "€EØ‡|�|Ñð	QÜ—’œG G§L¡LÓ1Ô2°fÜ ×)Ò)°·±¸uÓ0EÈ2ÑN�÷ 3ð ‡O�O˜%€OÒ ÷ 3Õ2ûäœÐ$ó 	Qô �J‰JÐ<¸g¿l¹lÈC×PÑPûð	Qús4   ‘)B º%A7ÁB Á7
BÂB ÂB ÂCÂ!B>Â>Cr¹   c                 óœ  • UR                   c  UR                  5         O[        XUR                   U5      $ UR                  [        R
                  :X  a  U R                  UR                  S9$ UR                  [        R                  :X  a-  U R                  UR                  UR                  =(       d    SS9$ [        XUR                  5      $ )a  Add one paragraph, as a heading, a list item or body text.

Args:
    doc: The document being built.
    paragraph: The paragraph to add.
    lists: The list groups currently open.

Returns:
    The item the paragraph became, or its first when its runs differ.
)r§   r�   )r§   Úlevel)Ú
list_labelr™   Ú_add_list_itemr¸   r   ÚTITLEÚ	add_titler§   ÚSECTION_HEADERÚadd_headingrÍ   rµ   )r~   r¹   r   s      r;   r¼   r¼   \  s˜   € ð ×ÑÑ#Ø�‰�ä˜c¨i×.BÑ.BÀEÓJÐJà‡�œ,×,Ñ,Ó,Ø�}‰} )§.¡.ˆ}Ð1Ð1Ø‡�œ,×5Ñ5Ó5Ø�‰ I§N¡N¸)¿/¹/×:NÈQˆÐOÐOä�S Y§_¡_Ó5Ð5re   r¸   Úcontent_layerc                 óô  • UR                    Vs/ s H  oDR                  (       d  M  UPM     nn[        U5      (       aR  U(       a  US   O[        SS5      nU R	                  UUR                  UR
                  [        UR                  5      US9$ U R                  US9nU Vs/ s H>  nU R	                  UUR                  UR
                  [        UR                  5      UUS9PM@     nnUS   $ s  snf s  snf )uÉ  Add a paragraph's runs, keeping the formatting attached to each one.

``TextItem`` carries a single ``Formatting`` and a single hyperlink, so a
paragraph whose runs differ in either has to become an inline group of items
â€” the same shape the Word and HTML backends produce for mixed runs.

Args:
    doc: The document being built.
    paragraph: The paragraph to add.
    label: The label to give the item, or every item of the group.
    content_layer: The layer to add to, or None for the document's default.

Returns:
    The item added, or the first of the group. A comment annotates a stretch
    of the paragraph, and the first item is the one that always exists,
    whichever run that stretch began in.
r   Ú N)r¸   r§   Ú
formattingÚ	hyperlinkrÔ   )rÔ   )r¸   r§   r×   rØ   r    rÔ   )	Úrunsr§   Ú_uniformr   Úadd_textr×   Ú
_hyperlinkrØ   Úadd_inline_group)	r~   r¹   r¸   rÔ   ÚrunrÙ   ÚfirstÚgroupÚitemss	            r;   rµ   rµ   v  sõ   € ð. %Ÿ>š>Ó6š>�C¯X­X�C™>€DÐ6Ü�‡~�~Þ��Q’¤S¨¨T£]ˆØ�|‰|ØØ—‘Ø×'Ñ'Ü  §¡Ó1Ø'ð ð 
ð 	
ð × Ñ ¨}Ð Ð=€Eñ ó
ò ˆCð 	�‰ØØ—‘Ø—~‘~Ü  §¡Ó/ØØ'ð 	ó 	
ñ ð 
ð 
ð �‰8€Oùò/ 7ùò
s   �C0§C0Â$AC5c           
      óŒ  • UR                  UR                  5      nUR                   Vs/ s H  oUR                  (       d  M  UPM     nnU(       a  [	        U5      (       a  US   O[        SS5      nU R                  UR                  UR                  UR                  UUR                  [        UR                  5      S9$ s  snf )z?Add one list item under the group its nesting depth belongs to.r   rÖ   N)r§   Ú
enumeratedÚmarkerr    r×   rØ   )r£   r›   rÙ   r§   rÚ   r   Úadd_list_itemrã   rä   r×   rÜ   rØ   )r~   r¹   r¸   r   rà   rÞ   rÙ   Úuniforms           r;   rÏ   rÏ   §  s›   € ð �O‰O˜EŸK™KÓ(€EØ$Ÿ>š>Ó6š>�C¯X­X�C™>€DÐ6Þ¤(¨4§.¡.ˆd�1Šg´c¸"¸d³m€GØ×ÑØ�^‰^Ø×#Ñ#Ø�|‰|ØØ×%Ñ%Ü˜W×.Ñ.Ó/ð ð ð ùò 7s   ªCÁCrÙ   c                 óX   ^• [        U 5      S::  a  gU S   m[        U4S jU  5       5      $ )zÉReport whether every run shares one formatting and one link.

``Formatting`` is a model rather than a hashable value, so the runs are
compared against the first rather than deduplicated through a set.
r�   Tr   c              3   ó–   >#   • U  H>  nUR                   TR                   :H  =(       a    UR                  TR                  :H  v •  M@     g 7frA   )r×   rØ   )rD   rÞ   rß   s     €r;   rF   Ú_uniform.<locals>.<genexpr>Á  s<   øé € ð âˆCð 	�‰˜%×*Ñ*Ñ*×O¨s¯}©}ÀÇÁÑ/OÔOÚùs   ƒAA	)rS   Úall)rÙ   rß   s    @r;   rÚ   rÚ   ¸  s6   ø€ ô ˆ4ƒy�Aƒ~ØØ�‰G€EÜô áóó ð re   Úaddressc                 óÀ   • U (       d  g[        U 5      R                  (       d  [        U 5      $  [        U 5      $ ! [         a    [
        R                  SU 5         gf = f)am  Resolve a link's address to a URL or a local path.

A Pages document can link to a file next to it as well as to a URL, and an
address Pydantic will not accept is dropped rather than allowed to fail the
whole conversion.

Args:
    address: The address the document recorded, if any.

Returns:
    The address as a URL or a path, or None when there is none to use.
Nz.Skipping malformed Pages hyperlink address: %r)r   Úschemer   r   r   rÈ   rÉ   )rë   s    r;   rÜ   rÜ   Ç  sR   € ö ØÜ�GÓ×#×#Ü�G‹}ÐðÜ�g‹ÐøÜó Ü�
‰
ÐCÀWÔMÙðús   ¯
: º AÁArA   )HrŠ   ÚloggingÚ	mimetypesr.   Úior   Úpathlibr   Úurllib.parser   Údocling_core.types.docr   r   r   r	   r
   Ú"docling_core.types.doc.items.groupr   Ú!docling_core.types.doc.items.textr   ÚPILr   Úpydanticr   r   Útyping_extensionsr   Ú docling.backend.abstract_backendr   Údocling.backend.iworkr   r   Údocling.backend.iwork.contentr   r   r   r   r   r   r   Údocling.backend.iwork.iwar   Ú!docling.datamodel.backend_optionsr   Údocling.datamodel.base_modelsr   Údocling.datamodel.documentr   Údocling.exceptionsr    Ú	getLoggerr†   rÈ   rt   Úadd_typerL   r\   r"   rv   rž   ÚdictÚstrr|   r{   rw   r½   r¼   rµ   rÏ   r‹   rÚ   rÜ   rO   re   r;   Ú<module>r     s  ðñó" Û Û Ý Ý Ý !÷õ õ 9Ý 6Ý ß ,Ý &å Gß 6÷÷ ñ õ 3Ý AÝ 5Ý 4Ý 0à×Ò˜Ó"€à/€ð 
× Ò �? HÔ -àÐ à5Ð ôWÐ :ô W÷t!#ñ !#ðHQØ	ðQØ$(¨¡MðQØ>BÀ3ÈÀ=Ñ>QðQà	ôQð&E˜ð E°'ð E¸dô Eð(Ø	ðØ!&ðØ/9ðà��_ôð4!�oð !°ð !¸Dô !ð(6Ø	ð6Ø%.ð6Ø7Að6à��_ô6ð< *.ñ	.Ø	ð.àð.ð ð.ð   $Ñ&ð	.ð
 õ.ðbØ	ðØ%.ðØ7@ðØISðàôð"�4˜‘9ð  ô ð˜˜d™
ð  v°¡}°tÑ';õ re   