§
    øžyj+f  ã                  ó‚  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ddlmZmZ ddlmZ g d¢Z eh d£¦  «        Z eh d	£¦  «        Zd
Zd
Zd
ZdZdZdZdZ dZ!dZ" G d„ de#¦  «        Z$dhd„Z% e&¦   «         Z'e'a(de)d<    ej*        ¦   «         Z+dZ,da-de)d<   did„Z.djd„Z/dhd „Z0dkd#„Z1dhd$„Z2d%Z3d&Z4d'Z5d(Z6d)Z7dld+„Z8dmd-„Z9dnd0„Z:dod2„Z;d%Z<d3Z=dpd8„Z>dqdrd;„Z?dkd<„Z@dsd=„ZAdtd>„ZBdudA„ZCdvdC„ZDdwdE„ZEdFZFdxdH„ZGdydzdN„ZHdhdO„ZId{dT„ZJdhdU„ZKdhdV„ZLd|dY„ZMd}d[„ZNd~d]„ZOdd_„ZPd€da„ZQd�de„ZRd‚dg„ZSdS )ƒuh  Stdlib document-to-text extraction for ``read_file``.

Supports Jupyter notebooks, DOCX, and XLSX without adding hard dependencies.
When the optional ``firecrawl-anydoc`` package is installed (``pip install
firecrawl-anydoc``, imports as ``anydoc``), coverage widens to legacy Office
(.doc/.ppt/.xls), OpenDocument, RTF, EPUB, and PDF â€” converted to Markdown by
its Rust core. The stdlib extractors remain authoritative for their three
formats so behavior is identical whether or not anydoc is present.
Malformed documents raise :class:`ExtractionError`; callers can then fall back to
normal text/binary handling.
é    )ÚannotationsN)ÚPath)ÚAnyÚOptional)ÚElementTree)ÚEXTRACTABLE_EXTENSIONSÚExtractionErrorÚextract_document_bytesÚextract_document_textÚis_extractable_document>   ú.docxú.xlsxú.ipynb>   ú.docú.odpú.odsú.odtú.potú.ppsú.pptú.rtfú.xlsú.docmú.epubú.ppsmú.ppsxú.pptmú.pptxú.xlsbú.xlsmú.pdfi   iˆ  é   z<http://schemas.openxmlformats.org/wordprocessingml/2006/mainz9http://schemas.openxmlformats.org/spreadsheetml/2006/mainzChttp://schemas.openxmlformats.org/officeDocument/2006/relationshipsz<http://schemas.openxmlformats.org/package/2006/relationshipsc                  ó   — e Zd ZdZdS )r	   zDRaised when a supported-looking document cannot be rendered as text.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú8/home/ragecks/.hermes/hermes-agent/tools/read_extract.pyr	   r	   >   s   € € € € € ØNÐNÐNÐNr)   r	   ÚpathÚstrÚreturnc                óš   — t          | ¦  «        j                             ¦   «         }|t          v r|S |t          v rt          ¦   «         �|S dS )NÚ )r   ÚsuffixÚlowerr   ÚANYDOC_EXTENSIONSÚ_anydoc©r+   Úexts     r*   Ú
_extensionr6   B   sL   € Ý
ˆt‰*Œ*Ô
×
!Ò
!Ñ
#Ô
#€CØ
Õ$Ð$Ð$Øˆ
Ø
ÕÐÐ¥G¡I¤IÐ$9Øˆ
Øˆ2r)   r   Ú_anydoc_moduleg     Àr@zOptional[float]Ú_anydoc_failed_atúOptional[Any]c                 óB  — t           t          urt           S t          5  t           t          urt           cddd¦  «         S t          �2t	          j        ¦   «         t          z
  t          k     r	 ddd¦  «         dS 	 ddlm}   | dd¬¦  «         n/# t          $ r" t	          j        ¦   «         aY ddd¦  «         dS w xY w	 t          j        d¦  «        a n/# t          $ r" t	          j        ¦   «         aY ddd¦  «         dS w xY wdaddd¦  «         n# 1 swxY w Y   t           S )a'  Lazily import the optional anydoc converter; None when unavailable.

    A failed load is retried after :data:`ANYDOC_RETRY_SECONDS` rather than
    disabling extraction for the rest of the process, so one transient
    failure (network blip, pip race) does not stick in long-lived workers.
    Nr   )Úensureztool.doc_extractF)ÚpromptÚanydoc)r7   Ú_ANYDOC_UNSETÚ_anydoc_lockr8   ÚtimeÚ	monotonicÚANYDOC_RETRY_SECONDSÚtools.lazy_depsr;   Ú	ExceptionÚ	importlibÚimport_module)Ú_lazy_ensures    r*   r3   r3   U   sô  € õ �]Ð*Ð*ÝÐÝ	ð !ð !Ý¥Ð.Ð.Ý!ð!ð !ð !ð !ñ !ô !ð !ð !õ Ð)Ý”Ñ Ô Õ#4Ñ4Õ7KÒKÐKàð!ð !ð !ñ !ô !ð !ð !ð !ð	Ø>Ð>Ð>Ð>Ð>Ð>ð ˆLÐ+°EÐ:Ñ:Ô:Ð:Ð:øÝð 	ð 	ð 	Ý $¤Ñ 0Ô 0ÐØð!ð !ð !ñ !ô !ð !ð !ð !ð	øøøð	Ý&Ô4°XÑ>Ô>ˆNˆNøÝð 	ð 	ð 	Ý $¤Ñ 0Ô 0ÐØð)!ð !ð !ñ !ô !ð !ð !ð !ð$	øøøð !Ðð+!ð !ð !ñ !ô !ð !ð !ð !ð !ð !ð !øøøð !ð !ð !ð !õ, Ðs^   �D¿,DÁ9BÂDÂB9Â*DÂ8B9Â9DÂ=CÃDÃC>Ã/DÃ=C>Ã>DÄDÄDÚboolc                ó:   — t          t          | ¦  «        ¦  «        S ©N)rH   r6   )r+   s    r*   r   r   x   s   € Ý•
˜4Ñ Ô Ñ!Ô!Ð!r)   c                óò   — t          | ¦  «        }|dk    rt          | ¦  «        S |dk    rt          | ¦  «        S |dk    rt          | ¦  «        S |t          v rt          | ¦  «        S t          d| ›�¦  «        ‚)Nr   r   r   úUnsupported document type: )r6   Ú_extract_notebookÚ_extract_docxÚ_extract_xlsxr2   Ú_extract_anydocr	   r4   s     r*   r   r   |   s…   € Ý
�TÑ
Ô
€CØ
ˆh‚€Ý  Ñ&Ô&Ð&Ø
ˆg‚~€~Ý˜TÑ"Ô"Ð"Ø
ˆg‚~€~Ý˜TÑ"Ô"Ð"Ø
ÕÐÐÝ˜tÑ$Ô$Ð$Ý
Ð@¸Ð@Ð@Ñ
AÔ
AÐAr)   ÚdataÚbytesc                ón  — t          | ¦  «        t          k    r*t          dt          | ¦  «        d›dt          d›d�¦  «        ‚t          |¦  «        }|t          v rt          | |¦  «        S |t          vrt          d|›�¦  «        ‚d}	 t          j        |d¬¦  «        5 }| 	                    | ¦  «         |j
        }d	d	d	¦  «         n# 1 swxY w Y   t          |¦  «        |r&	 t          j        |¦  «         S # t          $ r Y S w xY wS # |r&	 t          j        |¦  «         w # t          $ r Y w w xY ww xY w)
zBExtract a document already fetched across a file backend boundary.úDocument too large to convert (Ú,ú bytes, limit is ú)rL   r/   F©r0   ÚdeleteN)ÚlenÚMAX_DOCUMENT_BYTESr	   r6   r2   Ú_extract_anydoc_bytesr   ÚtempfileÚNamedTemporaryFileÚwriteÚnamer   ÚosÚunlinkÚOSError)rQ   r+   r5   Ú	temp_pathÚfhs        r*   r
   r
   ‰   s»  € å
ˆ4�y„yÕ%Ò%Ð%ÝØc­c°$©i¬iÐcÐcÐcÕL^ÐcÐcÐcÐcñ
ô 
ð 	
õ �TÑ
Ô
€CØ
ÕÐÐÝ$ T¨4Ñ0Ô0Ð0Ø
Õ(Ð(Ð(ÝÐD¸DÐDÐDÑEÔEÐEð €Ið
ÝÔ(°¸EÐBÑBÔBð 	 ÀbØ�HŠH�T‰NŒNˆNØœˆIð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 õ % YÑ/Ô/àð 	ðÝ”	˜)Ñ$Ô$Ð$Ð$øÝð ð ð Ø�ðøøøð	øˆ9ð 	ðÝ”	˜)Ñ$Ô$Ð$Ð$øÝð ð ð Ø�ðøøøð	øøøsf   Â	D
 ÂCÂ<D
 ÃCÃD
 ÃCÃD
 Ã$C9Ã9
DÄDÄ
D4ÄD#Ä"D4Ä#
D0Ä-D4Ä/D0Ä0D4c                óN  — t          ¦   «         }|€t          d| ›�¦  «        ‚	 t          j                             | ¦  «        }n/# t
          $ r"}t          t          |¦  «        ¦  «        |‚d }~ww xY w|t          k    rt          d|d›dt          d›d�¦  «        ‚	 |                     | ¦  «        }nc# t
          $ r"}t          t          |¦  «        ¦  «        |‚d }~wt          $ r,}t          t          |¦  «        j        › d|› �¦  «        |‚d }~ww xY wt          |t          ¦  «        r|                     ¦   «         st          d¦  «        ‚|                     d¦  «        dz   }t          | ¦  «        j                             ¦   «         d	k    rt%          | ¦  «        }|r||z   }|S ©
NrL   rT   rU   rV   rW   ú: z%Document contains no extractable textÚ
r!   )r3   r	   ra   r+   Úgetsizerc   r,   ÚMAX_ANYDOC_BYTESÚto_markdownrD   Útyper$   Ú
isinstanceÚstripÚrstripr   r0   r1   Ú_pdf_coverage_note)r+   ÚmodÚsizeÚexcÚtextÚnotes         r*   rP   rP   ¥   sÑ  € Ý
‰)Œ)€CØ
€{ÝÐD¸DÐDÐDÑEÔEÐEð1ÝŒw�Š˜tÑ$Ô$ˆˆøÝð 1ð 1ð 1Ý�c #™hœhÑ'Ô'¨SÐ0øøøøð1øøøàÕÒÐÝØ\¨dÐ\Ð\Ð\ÕGWÐ\Ð\Ð\Ð\ñ
ô 
ð 	
ð	GØ�Š˜tÑ$Ô$ˆˆøÝð 1ð 1ð 1Ý�c #™hœhÑ'Ô'¨SÐ0øøøøÝð Gð Gð Gõ
 ¥ c¡¤Ô!3Ð<Ð<°sÐ<Ð<Ñ=Ô=À3ÐFøøøøðGøøøõ �d�CÑ Ô ð G¨¯
ª
©¬ð GÝÐEÑFÔFÐFØ�;Š;�tÑÔ˜tÑ#€DÝˆD�z„zÔ×ÒÑ Ô  FÒ*Ð*Ý! $Ñ'Ô'ˆØð 	ð ˜$‘;ˆDØ€Ks;   ¤A Á
A0ÁA+Á+A0ÂB2 Â2
DÂ<CÃDÃ&'DÄDé   é   gš™™™™™É?é
   g      4@úOptional[list[str]]c                óŠ  — t          j        d¦  «        €dS 	 t          j        d| dgdt          ¬¦  «        }n# t
          t          j        f$ r Y dS w xY w|j        dk    rdS |j         	                    dd¬	¦  «         
                    d
¦  «        }|r.|d                              ¦   «         s|                     ¦   «          |pdS )z5Per-page extracted text, or None when undeterminable.Ú	pdftotextNÚ-T)Úcapture_outputÚtimeoutr   úutf-8Úreplace)Úerrorsúéÿÿÿÿ)ÚshutilÚwhichÚ
subprocessÚrunÚPDF_PAGE_SCAN_TIMEOUTrc   ÚSubprocessErrorÚ
returncodeÚstdoutÚdecodeÚsplitro   Úpop)r+   ÚprocÚpagess      r*   Ú_pdf_page_textsr’   Ú   sÞ   € å„|�KÑ Ô Ð(ØˆtðÝŒ~Ø˜$ Ð$ØÝ)ð
ñ 
ô 
ˆˆøõ
 •ZÔ/Ð0ð ð ð Øˆtˆtðøøøà„˜!ÒÐØˆtØŒK×Ò˜w¨yÐÑ9Ô9×?Ò?ÀÑEÔE€EØð �U˜2”Y—_’_Ñ&Ô&ð Ø�	Š	‰ŒˆØˆ=�DÐs   ˜8 ¸AÁAúOptional[list[int]]c                ó@   — t          | ¦  «        }|€dS d„ |D ¦   «         S )zAPer-page extracted-text char counts, or None when undeterminable.Nc                óP   — g | ]#}t          |                     ¦   «         ¦  «        ‘Œ$S r(   ©rZ   ro   ©Ú.0Úpages     r*   ú
<listcomp>z)_pdf_page_char_counts.<locals>.<listcomp>ó   s(   € Ð0Ð0Ð0 $�C�—
’
‘”ÑÔÐ0Ð0Ð0r)   )r’   )r+   r‘   s     r*   Ú_pdf_page_char_countsr›   î   s-   € å˜DÑ!Ô!€EØ€}ØˆtØ0Ð0¨%Ð0Ñ0Ô0Ð0r)   r‘   ú	list[int]c                ó    — d„ t          | ¦  «        D ¦   «         }t          |¦  «        dk    r|dd…         dgz   }d                     |¦  «        S )z3Compact 1-based range list, e.g. '2-29, 33-35, 42'.c                óL   — g | ]!\  }}||k    r|› d |› �nt          |¦  «        ‘Œ"S )r}   ©r,   ©r˜   ÚaÚbs      r*   rš   z _page_ranges.<locals>.<listcomp>ø   s8   € ÐOÐOÐO±$°!°Q˜1 š6˜6�ˆZˆZ�AˆZˆZˆZ¥s¨1¡v¤vÐOÐOÐOr)   é   Nu   â€¦ú, )Ú_group_rangesrZ   Újoin)r‘   Úpartss     r*   Ú_page_rangesr¨   ö   sR   € àOÐO½-ÈÑ:NÔ:NÐOÑOÔO€EÝ
ˆ5�z„z�B‚€Ø�c�r�c”
˜e˜WÑ$ˆØ�9Š9�UÑÔÐr)   úlist[list[int]]c                óˆ   — g }| D ]<}|r!||d         d         dz   k    r||d         d<   Œ%|                      ||g¦  «         Œ=|S )z9Group sorted 1-based page numbers into [start, end] runs.r„   é   )Úappend)r‘   ÚrangesÚps      r*   r¥   r¥   þ   sb   € à €FØð "ð "ˆØð 	"�a˜6 "œ: aœ=¨1Ñ,Ò,Ð,ØˆF�2ŒJ�q‰MˆMà�MŠM˜1˜a˜&Ñ!Ô!Ð!Ð!Ø€Mr)   é<   ÚcountsÚtextsú	list[str]Úemptyc                ó¶  — t          |¦  «        }g }|dt          …         D ]»\  }}d}t          |dz
  dd¦  «        D ][}| |         t          k    rHd                     ||                              ¦   «         ¦  «        dt          …         }	d|	› d|dz   › d	�} nŒ\||k    rd
|› �nd|› d|› �}
||z
  dz   }|                     d|
› d|› d|dk    rdnd› d	|› �¦  «         Œ¼t          |¦  «        t          k    rQ|t          d…         }t          d„ |D ¦   «         ¦  «        }|                     dt          |¦  «        › d|› d�¦  «         d                     |¦  «        S )zÞPer-gap breakdown: each empty range labeled with the last text seen
    before it (usually a section divider/header page), so the agent can
    decide WHICH gaps it actually needs to read instead of OCRing all of
    them.Nr/   rx   r„   Ú u    â€” after "z" (pr«   rW   zpage zpages r}   z  z (z pageÚsc              3  ó,   K  — | ]\  }}||z
  d z   V — ŒdS )r«   Nr(   r    s      r*   ú	<genexpr>z_gap_map.<locals>.<genexpr>$  s.   è è € Ð4Ð4¡t q¨!˜˜Q™ ™Ð4Ð4Ð4Ð4Ð4Ð4r)   u     â€¦ z more gaps (z pages)ri   )
r¥   ÚPDF_GAP_MAP_MAX_ENTRIESÚrangeÚPDF_EMPTY_PAGE_CHARSr¦   rŽ   Ú_GAP_CONTEXT_CHARSr¬   rZ   Úsum)r°   r±   r³   r­   Úlinesr¡   r¢   ÚlabelÚprevÚsnippetÚspanÚnÚrestÚ
rest_pagess                 r*   Ú_gap_maprÆ     s´  € õ
 ˜5Ñ!Ô!€FØ€EØÐ/Õ/Ð/Ô0ð 
Kð 
K‰ˆˆ1Øˆå˜!˜a™%  RÑ(Ô(ð 	ð 	ˆDØ�dŒ|Õ3Ò3Ð3ØŸ(š( 5¨¤;×#4Ò#4Ñ#6Ô#6Ñ7Ô7Ð8KÕ9KÐ8KÔL�Ø? wÐ?Ð?°D¸1±HÐ?Ð?Ð?�Ø�ð 4ð   1šf˜fˆ{�qˆ{ˆ{ˆ{Ð*:°1Ð*:Ð*:°qÐ*:Ð*:ˆØ�‰E�A‰IˆØ�ŠÐI˜$ÐIÐI !ÐIÐI°°a²°¨#¨#¸RÐIÐIÀ%ÐIÐIÑJÔJÐJÐJÝ
ˆ6�{„{Õ,Ò,Ð,ØÕ-Ð.Ð.Ô/ˆÝÐ4Ð4¨tÐ4Ñ4Ô4Ñ4Ô4ˆ
Ø�ŠÐH�c $™iœiÐHÐH°ZÐHÐHÐHÑIÔIÐIØ�9Š9�UÑÔÐr)   Údisplay_pathúOptional[str]c           
     ó²  — t          | ¦  «        }|rt          |¦  «        dk     rdS d„ |D ¦   «         }d„ t          |¦  «        D ¦   «         }t          |¦  «        }t          |¦  «        t          k     rdS t          |¦  «        |z  t          k     rt          |¦  «        t
          k     rdS |p| }dt          |¦  «        › d|› dt          |||¦  «        › d|› d	�	S )
u$  A warning header when many PDF pages produced no text, else ''.

    ``path`` is the file scanned with pdftotext (may be a host temp file
    for backend-transferred bytes); ``display_path`` is the path shown in
    the recovery command â€” the one the agent's terminal can actually see.
    rx   r/   c                óP   — g | ]#}t          |                     ¦   «         ¦  «        ‘Œ$S r(   r–   r—   s     r*   rš   z&_pdf_coverage_note.<locals>.<listcomp>3  s(   € Ð2Ð2Ð2 D�c�$—*’*‘,”,ÑÔÐ2Ð2Ð2r)   c                ó4   — g | ]\  }}|t           k     ¯|d z   ‘ŒS )r«   )r»   )r˜   ÚirÃ   s      r*   rš   z&_pdf_coverage_note.<locals>.<listcomp>4  s+   € ÐMÐMÐM‘t�q˜!°AÕ8LÒ4LÐ4LˆQ�‰UÐ4LÐ4LÐ4Lr)   z[EXTRACTION COVERAGE WARNING: z of u   pages in this PDF yielded no text. Those pages are likely scanned images (or blank) â€” their content is MISSING from the extracted text below, even where section headers appear with empty bodies. Unreadable gaps, each labeled with the last text extracted before it:
u­   
Decide which gaps you actually need â€” do NOT OCR or render everything. For the gaps that matter, render just that range with `pdftoppm -jpeg -r 150 -f <first> -l <last> 'z‘' /tmp/page` and inspect each image with the vision_analyze tool, or use the ocr-and-documents skill (marker-pdf) for bulk OCR of large ranges.]
)r’   rZ   Ú	enumerateÚPDF_COVERAGE_MIN_EMPTYÚPDF_COVERAGE_MIN_RATIOÚPDF_COVERAGE_ABSOLUTE_EMPTYrÆ   )r+   rÇ   r±   r°   r³   ÚtotalÚshowns          r*   rq   rq   )  s  € õ ˜DÑ!Ô!€EØð •C˜‘J”J ’N�NØˆrØ2Ð2¨EÐ2Ñ2Ô2€FØMÐM�y¨Ñ0Ô0ÐMÑMÔM€EÝ�‰KŒK€EÝ
ˆ5�z„zÕ*Ò*Ð*ØˆråˆE‰
Œ
�UÑÕ3Ò3Ð3Ý�‰JŒJÕ4Ò4Ð4àˆrØÐ ˜D€Eð	Ýˆu‰:Œ:ð	ð 	Ø ð	ð 	õ �F˜E 5Ñ)Ô)ð	ð 	ð 9>ð	ð 	ð 	ðr)   c                ó�  — t          ¦   «         }|€t          d|›�¦  «        ‚t          | ¦  «        t          k    r*t          dt          | ¦  «        d›dt          d›d�¦  «        ‚	 |                     | ¦  «        }n9# t
          $ r,}t          t          |¦  «        j        › d|› �¦  «        |‚d }~ww xY wt          |t          ¦  «        r| 
                    ¦   «         st          d¦  «        ‚|                     d¦  «        dz   }t          |¦  «        j                             ¦   «         d	k    rt          | |¦  «        }|r||z   }|S rg   )r3   r	   rZ   rk   Úto_markdown_bytesrD   rm   r$   rn   r,   ro   rp   r   r0   r1   Ú_pdf_coverage_note_from_bytes)rQ   r+   rr   ru   rt   rv   s         r*   r\   r\   O  sb  € Ý
‰)Œ)€CØ
€{ÝÐD¸DÐDÐDÑEÔEÐEÝ
ˆ4�y„yÕ#Ò#Ð#ÝØa­c°$©i¬iÐaÐaÐaÕL\ÐaÐaÐaÐañ
ô 
ð 	
ðGØ×$Ò$ TÑ*Ô*ˆˆøÝð Gð Gð GÝ¥ c¡¤Ô!3Ð<Ð<°sÐ<Ð<Ñ=Ô=À3ÐFøøøøðGøøøå�d�CÑ Ô ð G¨¯
ª
©¬ð GÝÐEÑFÔFÐFØ�;Š;�tÑÔ˜tÑ#€DÝˆD�z„zÔ×ÒÑ Ô  FÒ*Ð*Ý,¨T°4Ñ8Ô8ˆØð 	ð ˜$‘;ˆDØ€Ks   Á&A< Á<
B2Â'B-Â-B2c                óÞ  — d}	 t          j        dd¬¦  «        5 }|                     | ¦  «         |j        }ddd¦  «         n# 1 swxY w Y   t	          ||¬¦  «        |r&	 t          j        |¦  «         S # t          $ r Y S w xY wS # t          $ r. Y |r(	 t          j        |¦  «         dS # t          $ r Y dS w xY wdS w xY w# |r&	 t          j        |¦  «         w # t          $ r Y w w xY ww xY w)u  Coverage note for backend-transferred PDF bytes.

    pdftotext is path-oriented, so materialize the bytes in a private host
    temp file for the scan; the recovery command still names
    ``display_path`` â€” the path the agent's terminal backend can see.
    r/   r!   FrX   N)rÇ   )r]   r^   r_   r`   rq   ra   rb   rc   )rQ   rÇ   rd   re   s       r*   rÕ   rÕ   g  sŸ  € ð €IðÝÔ(°¸uÐEÑEÔEð 	 ÈØ�HŠH�T‰NŒNˆNØœˆIð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 õ " )¸,ÐGÑGÔGð ð 	ðÝ”	˜)Ñ$Ô$Ð$Ð$øÝð ð ð Ø�ðøøøð	øõ ð ð ð Øàð 	ðÝ”	˜)Ñ$Ô$Ð$Ð$Ð$øÝð ð ð Ø��ðøøøð	ð 	ðøøøøð ð 	ðÝ”	˜)Ñ$Ô$Ð$Ð$øÝð ð ð Ø�ðøøøð	øøøs�   „B šA·B ÁAÁB Á
AÁB Á!A6Á6
BÂBÂ
B?ÂC ÂB+ Â+
B9Â8B9Â>B?Â?C ÃC,ÃCÃC,Ã
C(Ã%C,Ã'C(Ã(C,c                óœ   — t          | t          ¦  «        r| S t          | t          ¦  «        rd                     d„ | D ¦   «         ¦  «        S dS )Nr/   c              3  óD   K  — | ]}t          |t          ¦  «        ¯|V — Œd S rJ   ©rn   r,   )r˜   Úitems     r*   r¸   z_source_text.<locals>.<genexpr>‚  s1   è è € ÐHÐH µ*¸TÅ3Ñ2GÔ2GÐH�tÐHÐHÐHÐHÐHÐHr)   )rn   r,   Úlistr¦   )Úsources    r*   Ú_source_textrÝ   ~  sR   € Ý�&�#ÑÔð ØˆÝ�&�$ÑÔð IØ�wŠwÐHÐH¨ÐHÑHÔHÑHÔHÐHØˆ2r)   Ún_bytesÚintc                óB   — | dk    rt          | dz  ¦  «        › d�n| › d�S )Ni   z KBz B)Úround)rÞ   s    r*   Ú_human_sizerâ   †  s0   € Ø,3°tªO¨O�e�G˜d‘NÑ#Ô#Ð(Ð(Ð(Ð(ÀGÀÀÀÐOr)   Úpayloadc           	     óú   — t          j        dd| ¦  «        }t          dt          |¦  «        t          |                     d¦  «        ¦  «        z
  ¦  «        }t          dt          |¦  «        dz  dz  |z
  ¦  «        S )zBApproximate decoded size of a base64 payload (whitespace ignored).z[^0-9+/=A-Za-z]r/   rx   Ú=r   é   é   )ÚreÚsubÚminrZ   rp   Úmax)rã   ÚcleanÚpaddings      r*   Ú_base64_bytesrî   Š  sh   € åŒFÐ% r¨7Ñ3Ô3€EÝ�!•S˜‘Z”Z¥# e§l¢l°3Ñ&7Ô&7Ñ"8Ô"8Ñ8Ñ9Ô9€GÝˆq•3�u‘:”: ‘> aÑ'¨'Ñ1Ñ2Ô2Ð2r)   ru   c                ó&  — ddl m}  || ¦  «                             dd¦  «        }g }|                     d¦  «        D ]@}d„ |                     d¦  «        D ¦   «         }|                     |r|d         nd¦  «         ŒAd                     |¦  «        S )	a=  Strip ANSI escapes and collapse ``\r`` progress-bar rewrites.

    tqdm and friends redraw the same line via carriage returns; Jupyter
    renders only the final frame, so keeping the text after the last ``\r``
    of each line reproduces what the notebook displays without the invisible
    intermediate frames.
    r   )Ú
strip_ansiz
ri   c                ó   — g | ]}|¯|‘ŒS r(   r(   )r˜   Úframes     r*   rš   z&_clean_stream_text.<locals>.<listcomp>ž  s   € Ð?Ð?Ð?˜E¸Ð?�%Ð?Ð?Ð?r)   úr„   r/   )Útools.ansi_striprð   r�   rŽ   r¬   r¦   )ru   rð   Úcleanedr¾   ÚlineÚframess         r*   Ú_clean_stream_textrø   ‘  s¨   € ð ,Ð+Ð+Ð+Ð+Ð+àˆj˜ÑÔ×&Ò& v¨tÑ4Ô4€GØ€EØ—’˜dÑ#Ô#ð 3ð 3ˆØ?Ð? T§Z¢Z°Ñ%5Ô%5Ð?Ñ?Ô?ˆØ�Š 6Ð1�V˜B”Z�Z¨rÑ2Ô2Ð2Ð2Ø�9Š9�UÑÔÐr)   i N  Úoutputc                ó˜  — t          | t          ¦  «        sdS |                      d¦  «        }|dk    rHt          t	          |                      dd¦  «        ¦  «        ¦  «        }|                     ¦   «         r|ndS |dv r´|                      d¦  «        }d}t          |t          ¦  «        r,t          d                     d„ |D ¦   «         ¦  «        ¦  «        }d	|                      d
d¦  «        › d|                      dd¦  «        › �                     d¦  «        }|› d|› �                     ¦   «         S |dv �r’|                      d¦  «        }t          |t          ¦  «        sSi }t          |                      d¦  «        t          t          f¦  «        r| d         |d<   dD ]\  }}|| v r| |         ||<   Œd|v rdS dD ]@}||v r:t          t	          ||         ¦  «        ¦  «        }|                     ¦   «         r|c S ŒA| 
                    ¦   «         D ]c\  }}	t          |t          ¦  «        rI|                     d¦  «        r4t          t	          |	¦  «        ¦  «        }
d|› dt          |
¦  «        › d�c S Œdd|v r)t	          |d         ¦  «        }dt          |¦  «        d›d�S d                     d„ |D ¦   «         ¦  «        pd}d|› d�S dS ) aO  Render one notebook output as compact text.

    Keeps stream text, error tracebacks, and textual results; replaces
    token-heavy payloads (base64 images, HTML, widget state) with short
    sized placeholders. Handles both nbformat v4 output shapes and the
    legacy v3 ones (``pyout``/``pyerr``; data flat on the output dict).
    r/   Úoutput_typeÚstreamru   >   ÚerrorÚpyerrÚ	tracebackri   c              3  óD   K  — | ]}t          |t          ¦  «        ¯|V — Œd S rJ   rÙ   ©r˜   rö   s     r*   r¸   z(_notebook_output_text.<locals>.<genexpr>½  s1   è è € ÐNÐN 4½
À4ÍÑ8MÔ8MÐN˜$ÐNÐNÐNÐNÐNÐNr)   zError: Úenamerh   Úevalue>   ÚpyoutÚdisplay_dataÚexecute_resultrQ   ú
text/plain))Úpngz	image/png)Újpegz
image/jpeg)Úsvgzimage/svg+xml)Úhtmlú	text/htmlz(application/vnd.jupyter.widget-view+jsonu    [interactive widget â€” omitted])r  ztext/markdownzimage/Ú[u    output â€” z
, omitted]r  u   [text/html output â€” rU   z chars, omitted]r¤   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S rJ   rŸ   )r˜   Úms     r*   r¸   z(_notebook_output_text.<locals>.<genexpr>â  s(   è è € Ð/Ð/ Q�#˜a™&œ&Ð/Ð/Ð/Ð/Ð/Ð/r)   Úunknownu    output â€” omitted])rn   ÚdictÚgetrø   rÝ   ro   rÛ   r¦   rp   r,   ÚitemsÚ
startswithrî   râ   rZ   )rù   ÚotypeÚbodyrÿ   Útb_textÚheaderrQ   Úv3_keyÚmimeÚvaluers   r  Úmimess                r*   Ú_notebook_output_textr  ¨  s  € õ �f�dÑ#Ô#ð ØˆrØ�JŠJ�}Ñ%Ô%€Eà�ÒÐÝ!¥,¨v¯zªz¸&À"Ñ/EÔ/EÑ"FÔ"FÑGÔGˆØ—z’z‘|”|Ð+ˆtˆt¨Ð+àÐ"Ð"Ð"Ø—J’J˜{Ñ+Ô+ˆ	ØˆÝ�i¥Ñ&Ô&ð 	Ý(Ø—	’	ÐNÐN¨9ÐNÑNÔNÑNÔNñô ˆGð Q˜6Ÿ:š: g¨rÑ2Ô2ÐPÐP°f·j²jÀÈ2Ñ6NÔ6NÐPÐP×WÒWÐX\Ñ]Ô]ˆØÐ%Ð%˜GÐ%Ð%×,Ò,Ñ.Ô.Ð.àÐ;Ð;Ñ;Ø�zŠz˜&Ñ!Ô!ˆÝ˜$¥Ñ%Ô%ð 	0àˆDÝ˜&Ÿ*š* VÑ,Ô,­sµD¨kÑ:Ô:ð 4Ø%+¨F¤^��\Ñ"ð!Rð 0ð 0‘�˜à˜VÐ#Ð#Ø!'¨¤�D˜‘Jøà5¸Ð=Ð=Ø5Ð5ð 4ð 	 ð 	 ˆDØ�tˆ|ˆ|Ý)­,°t¸D´zÑ*BÔ*BÑCÔC�Ø—:’:‘<”<ð  Ø�K�K�KøàŸ:š:™<œ<ð 	Kð 	K‰KˆD�%Ý˜$¥Ñ$Ô$ð K¨¯ª¸Ñ)BÔ)Bð KÝ$¥\°%Ñ%8Ô%8Ñ9Ô9�ØJ˜4ÐJÐJ­[¸Ñ->Ô->ÐJÐJÐJÐJÐJÐJøà˜$ÐÐÝ  [Ô 1Ñ2Ô2ˆDØI­C°©I¬IÐIÐIÐIÐIÐIà—	’	Ð/Ð/¨$Ð/Ñ/Ô/Ñ/Ô/Ð<°9ˆØ.�5Ð.Ð.Ð.Ð.àˆ2r)   r/   Úcellr  Ú
jq_pointerÚfilenamec                ój  — |                       d¦  «        }t          |t          ¦  «        sdS d„ d„ |D ¦   «         D ¦   «         }|sdS d                     |¦  «        }t	          |¦  «        t
          k    r?t	          |¦  «        t
          z
  }d}|r
|rd|› d|› �}|d t
          …         d|d	›d
|› d�z   }|S )NÚoutputsr/   c                ó   — g | ]}|¯|‘ŒS r(   r(   )r˜   ru   s     r*   rš   z%_notebook_outputs.<locals>.<listcomp>ì  s   € ÐSÐSÐS�tÈdÐSˆdÐSÐSÐSr)   c              3  ó4   K  — | ]}t          |¦  «        V — Œd S rJ   )r  )r˜   Úos     r*   r¸   z$_notebook_outputs.<locals>.<genexpr>ì  s+   è è € ÐJÐJ¸QÕ 5°aÑ 8Ô 8ÐJÐJÐJÐJÐJÐJr)   ri   u    â€” full output: jq -r 'z' u   
â€¦ [rU   z output chars truncatedÚ])r  rn   rÛ   r¦   rZ   Ú_MAX_OUTPUT_CHARS)r  r  r   r"  ÚblocksÚjoinedÚomittedÚhints           r*   Ú_notebook_outputsr,  è  së   € Ø�hŠh�yÑ!Ô!€GÝ�g�tÑ$Ô$ð ØˆrØSÐSÐJÐJÀ'ÐJÑJÔJÐSÑSÔS€FØð ØˆrØ�YŠY�vÑÔ€FÝ
ˆ6�{„{Õ&Ò&Ð&Ý�f‘+”+Õ 1Ñ1ˆØˆØð 	H˜(ð 	HØG¨zÐGÐG¸XÐGÐGˆDØÐ*Õ*Ð*Ô+Ð.a¸Ð.aÐ.aÐ.aÐZ^Ð.aÐ.aÐ.aÑaˆØ€Mr)   c           
     ó  — 	 t          | dd¬¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   n7# t          t          t          j        f$ r}t          d|› �¦  «        |‚d }~ww xY wt          |t          ¦  «        st          d¦  «        ‚| 	                    d¦  «        }t          |t          ¦  «        rd„ t          |¦  «        D ¦   «         }n-d„ t          | 	                    d	g ¦  «        ¦  «        D ¦   «         }|st          d
¦  «        ‚t          j                             | ¦  «        }ddddœ}ddddœ}g }	|D �] \  }
}t          |t          ¦  «        sŒ| 	                    d¦  «        }||vrŒ6||xx         dz  cc<   |dk    rd||         › �nd}|	                     d||         › d|› d�t!          | 	                    dd¦  «        ¦  «                             d¦  «        df¦  «         |dk    rHt%          ||
|¦  «        }|r5|	                     d||         › d�|                     d¦  «        df¦  «         �Œ|	st          d¦  «        ‚d                     |	¦  «                             d¦  «        dz   S )Nr€   r�   )Úencodingr‚   zNot a valid notebook: zNotebook root is not an objectÚcellsc                ó$   — g | ]\  }}d |› d�|f‘ŒS )z.cells[ú	].outputsr(   )r˜   rÌ   r  s      r*   rš   z%_extract_notebook.<locals>.<listcomp>  s-   € ÐTÐTÐT±G°A°tÐ(˜AÐ(Ð(Ð(¨$Ð/ÐTÐTÐTr)   c                ó¦   — g | ]N\  }}t          |t          ¦  «        ¯t          |                     d g ¦  «        ¦  «        D ]\  }}d|› d|› d�|f‘ŒŒOS )r/  z.worksheets[z].cells[r1  )rn   r  rÍ   r  )r˜   ÚwiÚwsÚcir  s        r*   rš   z%_extract_notebook.<locals>.<listcomp>  s‰   € ð 
ð 
ð 
á��BÝ˜"�dÑ#Ô#ð
õ & b§f¢f¨W°bÑ&9Ô&9Ñ:Ô:ð	
ð 
ñ ��Dð 6˜BÐ5Ð5¨Ð5Ð5Ð5°tÐ<ð
ð 
ð 
ð 
r)   Ú
worksheetszNotebook contains no cellsr   )ÚmarkdownÚcodeÚrawÚMarkdownÚCodeÚRawÚ	cell_typer«   r9  rµ   r/   u	   # â”€â”€ z cellõ    â”€â”€rÜ   ri   r8  u   # â”€â”€ Output (cell u   ) â”€â”€z#Notebook contains no readable cells)ÚopenÚjsonÚloadrc   Ú
ValueErrorÚJSONDecodeErrorr	   rn   r  r  rÛ   rÍ   ra   r+   ÚbasenameÚextendrÝ   rp   r,  r¦   )r+   re   Únbrt   Ú	raw_cellsr/  Únb_namer°   ÚlabelsÚoutr  r  Útypr0   Úrendereds                  r*   rM   rM   ù  s  € ðGÝ�$ °Ð;Ñ;Ô;ð 	¸rÝ”˜2‘”ˆBð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	øøå•Z¥Ô!5Ð6ð Gð Gð GÝÐ<°sÐ<Ð<Ñ=Ô=À3ÐFøøøøðGøøøå�b�$ÑÔð @ÝÐ>Ñ?Ô?Ð?à—’�w‘”€IÝ�)�TÑ"Ô"ð 
ØTÐT½yÈÑ?SÔ?SÐTÑTÔTˆˆð
ð 
å# B§F¢F¨<¸Ñ$<Ô$<Ñ=Ô=ð
ñ 
ô 
ˆð ð <ÝÐ:Ñ;Ô;Ð;åŒg×Ò˜tÑ$Ô$€GØ Q¨qÐ1Ð1€FØ$¨f¸UÐCÐC€FØ€CØ!ð hñ hÑˆ
�DÝ˜$¥Ñ%Ô%ð 	ØØ�hŠh�{Ñ#Ô#ˆØ�fÐÐØØˆsˆˆŒ�qÑˆˆ‰Ø&)¨U¢l lÐ"�V˜C”[Ð"Ð"Ð"¸ˆØ�
Š
ÐA  s¤ÐAÐA°&ÐAÐAÐAÅ<ÐPT×PXÒPXÐYaÐceÑPfÔPfÑCgÔCg×CnÒCnÐosÑCtÔCtÐvxÐyÑzÔzÐzØ�&Š=ˆ=Ý(¨¨z¸7ÑCÔCˆHØð hØ—
’
ÐJ°V¸C´[ÐJÐJÐJÈHÏOÊOÐ\`ÑLaÔLaÐceÐfÑgÔgÐgùØð EÝÐCÑDÔDÐDØ�9Š9�S‰>Œ>× Ò  Ñ&Ô&¨Ñ-Ð-s2   ‚A ”5©A µ9¹A ¼9½A ÁA5ÁA0Á0A5Úzfúzipfile.ZipFiler`   ú
ET.Elementc                óì   — 	 t          j        |                      |¦  «        ¦  «        S # t          $ r}t	          d|› �¦  «        |‚d }~wt           j        $ r}t	          d|› d|› �¦  «        |‚d }~ww xY w)NzMissing zMalformed XML in rh   )ÚETÚ
fromstringÚreadÚKeyErrorr	   Ú
ParseError)rM  r`   rt   s      r*   Ú_zip_xmlrV  %  s—   € ðJÝŒ}˜RŸWšW T™]œ]Ñ+Ô+Ð+øÝð :ð :ð :ÝÐ/¨Ð/Ð/Ñ0Ô0°cÐ9øøøøÝŒ=ð Jð Jð JÝÐ?°$Ð?Ð?¸#Ð?Ð?Ñ@Ô@ÀcÐIøøøøðJøøøs    ‚&) ©
A3³AÁA3ÁA.Á.A3c                ó®  — 	 t          j        | ¦  «        5 }t          |d¦  «        }d d d ¦  «         n# 1 swxY w Y   nT# t           j        $ r}t	          d|› �¦  «        |‚d }~wt
          $ r"}t	          t          |¦  «        ¦  «        |‚d }~ww xY wdt          › d�}g }|                     |› d�¦  «        D ]Ë}g }|                     ¦   «         D ]w}|j	        |› d�k    r| 
                    |j        pd¦  «         Œ-|j	        |› d�k    r| 
                    d	¦  «         ŒQ|j	        |› d
�|› d�hv r| 
                    d¦  «         Œx|                     d                     |¦  «                             d¦  «        ¦  «         ŒÌt          d„ |D ¦   «         ¦  «        st	          d¦  «        ‚d                     |¦  «                             d¦  «        dz   S )Nzword/document.xmlzNot a valid DOCX: Ú{Ú}r®   Útr/   Útabú	ÚbrÚcrri   c              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rJ   ©ro   r  s     r*   r¸   z _extract_docx.<locals>.<genexpr>C  s*   è è € Ð.Ð. ˆt�zŠz‰|Œ|Ð.Ð.Ð.Ð.Ð.Ð.r)   z!DOCX contains no extractable text)ÚzipfileÚZipFilerV  Ú
BadZipFiler	   rc   r,   Ú_NS_WÚiterÚtagr¬   ru   rE  r¦   rŽ   Úanyrp   )	r+   rM  Úrootrt   Úwr¾   ÚparaÚbufÚnodes	            r*   rN   rN   .  s=  € ð1ÝŒ_˜TÑ"Ô"ð 	5 bÝ˜BÐ 3Ñ4Ô4ˆDð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5øøåÔð Cð Cð CÝÐ8°3Ð8Ð8Ñ9Ô9¸sÐBøøøøÝð 1ð 1ð 1Ý�c #™hœhÑ'Ô'¨SÐ0øøøøð1øøøð 	�Uˆˆˆ€AØ€EØ—	’	˜Q˜'˜'˜'Ñ"Ô"ð 	/ð 	/ˆØˆØ—I’I‘K”Kð 	!ð 	!ˆDØŒx˜a˜7˜7˜7Ò"Ð"Ø—
’
˜4œ9˜?¨Ñ+Ô+Ð+Ð+Ø” ˜Y˜Y˜YÒ&Ð&Ø—
’
˜4Ñ Ô Ð Ð Ø” ˜h˜h˜h¨1¨¨¨Ð1Ð1Ð1Ø—
’
˜4Ñ Ô Ð øØ�Š�R—W’W˜S‘\”\×'Ò'¨Ñ-Ô-Ñ.Ô.Ð.Ð.ÝÐ.Ð.¨Ð.Ñ.Ô.Ñ.Ô.ð CÝÐAÑBÔBÐBØ�9Š9�UÑÔ×"Ò" 4Ñ(Ô(¨4Ñ/Ð/s9   ‚? –3§? ³7·? º7»? ¿BÁA!Á!BÁ.BÂBc                óÌ  — 	 t          j        | ¦  «        5 }t          |                     ¦   «         ¦  «        }t	          ||¦  «        }t          |¦  «        }t          ||¦  «        }g }|D ]Ñ\  }}}	|dv rŒt          |                     |	d¦  «        ¦  «        }
|
|vrŒ3	 t          | 
                    |
¦  «        |¦  «        }n# t          j        $ r Y Œiw xY w|                     d|› d�¦  «         |                     d„ |D ¦   «         ¦  «         |s|                     d¦  «         |                     d¦  «         ŒÒ	 d d d ¦  «         n# 1 swxY w Y   nT# t           j        $ r}t!          d|› �¦  «        |‚d }~wt"          $ r"}t!          t%          |¦  «        ¦  «        |‚d }~ww xY w|st!          d¦  «        ‚d	                     |¦  «                             d	¦  «        d	z   S )
N>   ÚhiddenÚ
veryHiddenr/   u   # â”€â”€ Sheet: r>  c              3  ó@   K  — | ]}d                       |¦  «        V — ŒdS )r\  N)r¦   )r˜   Úrows     r*   r¸   z _extract_xlsx.<locals>.<genexpr>[  s,   è è € Ð:Ð:¨c˜4Ÿ9š9 S™>œ>Ð:Ð:Ð:Ð:Ð:Ð:r)   z(empty)zNot a valid XLSX: z'XLSX has no visible sheets with contentri   )ra  rb  ÚsetÚnamelistÚ_shared_stringsÚ_workbook_sheetsÚ_workbook_relsÚ_sheet_partr  Ú_sheet_rowsrS  rQ  rU  r¬   rE  rc  r	   rc   r,   r¦   rp   )r+   rM  ÚnamesÚsharedÚsheetsÚrelsrJ  r`   ÚstateÚridÚpartÚrowsrt   s                r*   rO   rO   H  sW  € ð1ÝŒ_˜TÑ"Ô"ð 	 bÝ˜Ÿš™œÑ&Ô&ˆEÝ$ R¨Ñ/Ô/ˆFÝ% bÑ)Ô)ˆFÝ! " eÑ,Ô,ˆDØˆCØ$*ð ð Ñ ��e˜SØÐ4Ð4Ð4ØÝ" 4§8¢8¨C°Ñ#4Ô#4Ñ5Ô5�Ø˜uÐ$Ð$ØðÝ& r§w¢w¨t¡}¤}°fÑ=Ô=�D�DøÝ”}ð ð ð Ø�Hðøøøà—
’
Ð;¨dÐ;Ð;Ð;Ñ<Ô<Ð<Ø—
’
Ð:Ð:°TÐ:Ñ:Ô:Ñ:Ô:Ð:Øð *Ø—J’J˜yÑ)Ô)Ð)Ø—
’
˜2‘”��ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	øøõ* Ôð Cð Cð CÝÐ8°3Ð8Ð8Ñ9Ô9¸sÐBøøøøÝð 1ð 1ð 1Ý�c #™hœhÑ'Ô'¨SÐ0øøøøð1øøøð ð IÝÐGÑHÔHÐHØ�9Š9�S‰>Œ>× Ò  Ñ&Ô&¨Ñ-Ð-sl   ‚E –BE
Â#CÃE
ÃCÃE
ÃCÃA(E
Ä>E Å
EÅE ÅEÅE ÅF'Å%E8Å8F'ÆF"Æ"F'ry  úset[str]c                óî   ‡— d|vrg S 	 t          j        |                      d¦  «        ¦  «        }n# t           j        $ r g cY S w xY wdt          › d�Šˆfd„|                     ‰› d�¦  «        D ¦   «         S )Nzxl/sharedStrings.xmlrX  rY  c           	     óz   •— g | ]7}d                       d„ |                     ‰› d�¦  «        D ¦   «         ¦  «        ‘Œ8S )r/   c              3  ó(   K  — | ]}|j         pd V — ŒdS ©r/   N©ru   ©r˜   rZ  s     r*   r¸   z-_shared_strings.<locals>.<listcomp>.<genexpr>q  s(   è è € Ð=Ð= Q�A”F�L˜bÐ=Ð=Ð=Ð=Ð=Ð=r)   rZ  )r¦   re  )r˜   rÚ   r¶   s     €r*   rš   z#_shared_strings.<locals>.<listcomp>q  sF   ø€ Ð^Ð^Ð^À$ˆB�GŠGÐ=Ð=¨$¯)ª)°q°G°G°GÑ*<Ô*<Ð=Ñ=Ô=Ñ=Ô=Ð^Ð^Ð^r)   Úsi)rQ  rR  rS  rU  Ú_NS_Sre  )rM  ry  rh  r¶   s      @r*   rt  rt  i  s™   ø€ Ø UÐ*Ð*Øˆ	ðÝŒ}˜RŸWšWÐ%;Ñ<Ô<Ñ=Ô=ˆˆøÝŒ=ð ð ð Øˆ	ˆ	ˆ	ðøøøà�Uˆˆˆ€AØ^Ð^Ð^Ð^È$Ï)Ê)ÐWXÐT\ÐT\ÐT\ÑJ]ÔJ]Ð^Ñ^Ô^Ð^s   ‰'1 ±AÁAúlist[tuple[str, str, str]]c                óš   ‡— t          | d¦  «        }dt          › d�dt          › d�c}Šˆfd„|                     |› d�¦  «        D ¦   «         S )Nzxl/workbook.xmlrX  rY  c                ó˜   •— g | ]F}|                      d d¦  «        |                      dd¦  «        |                      ‰› d�d¦  «        f‘ŒGS )r`   ÚSheetr}  ÚvisibleÚidr/   ©r  )r˜   ÚsheetÚrs     €r*   rš   z$_workbook_sheets.<locals>.<listcomp>w  sb   ø€ ð ð ð àð 
�Š�6˜7Ñ	#Ô	# U§Y¢Y¨w¸	Ñ%BÔ%BÀEÇIÂIÐQRÈhÈhÈhÐXZÑD[ÔD[Ð\ðð ð r)   r‘  )rV  r‰  Ú_NS_RELre  )rM  rh  r¶   r’  s      @r*   ru  ru  t  so   ø€ Ý�BÐ)Ñ*Ô*€DØ•ˆ>ˆ>ˆ>Ð+¥Ð+Ð+Ð+€D€A€qðð ð ð à—Y’Y !˜{˜{˜{Ñ+Ô+ðñ ô ð r)   údict[str, str]c                óæ   — d}||vri S 	 t          j        |                      |¦  «        ¦  «        }n# t           j        $ r i cY S w xY wdt          › d�}d„ |                     |¦  «        D ¦   «         S )Nzxl/_rels/workbook.xml.relsrX  z}Relationshipc                óŽ   — i | ]B}|                      d ¦  «        ¯|                      d d¦  «        |                      dd¦  «        “ŒCS )ÚIdr/   ÚTargetr�  )r˜   Úrels     r*   ú
<dictcomp>z"_workbook_rels.<locals>.<dictcomp>†  sK   € ÐdÐdÐd¸ÐVY×V]ÒV]Ð^bÑVcÔVcÐdˆC�GŠG�D˜"ÑÔ˜sŸwšw x°Ñ4Ô4ÐdÐdÐdr)   )rQ  rR  rS  rU  Ú_NS_PKG_RELre  )rM  ry  Ú	rels_pathrh  Úrel_tags        r*   rv  rv  }  s�   € Ø,€IØ˜ÐÐØˆ	ðÝŒ}˜RŸWšW YÑ/Ô/Ñ0Ô0ˆˆøÝŒ=ð ð ð Øˆ	ˆ	ˆ	ðøøøà.•;Ð.Ð.Ð.€GØdÐdÀÇ	Â	È'Ñ@RÔ@RÐdÑdÔdÐds   Š'2 ²AÁAÚtargetc                óˆ   — |                       d¦  «        } t          j        |                      d¦  «        r| nd| › �¦  «        S )Nú/zxl/)ÚlstripÚ	posixpathÚnormpathr  )rž  s    r*   rw  rw  ‰  sA   € Ø�]Š]˜3ÑÔ€FÝÔ¨×(9Ò(9¸%Ñ(@Ô(@ÐT˜f˜fÀnÈFÀnÀnÑUÔUÐUr)   Úrefc                óÖ   — d}| D ]R}|                      ¦   «         s n;|dz  t          |                     ¦   «         ¦  «        z   t          d¦  «        z
  dz   }ŒSt          |dz
  d¦  «        S )Nr   é   ÚAr«   )ÚisalphaÚordÚupperrë   )r¤  ÚidxÚchs      r*   Ú
_col_indexr­  Ž  sk   € Ø
€CØð 8ð 8ˆØ�zŠz‰|Œ|ð 	ØˆEØ�B‰h�˜RŸXšX™ZœZ™œÑ(­3¨s©8¬8Ñ3°aÑ7ˆˆÝˆs�Q‰w˜‰?Œ?Ðr)   Ú	xml_bytesrz  úlist[list[str]]c                óê  ‡	— t          j        | ¦  «        }dt          › d�}g }|                     |› d�¦  «        D ]á}t	          |¦  «        t
          k    r nÆi Š	d}|                     |› d�¦  «        D ]o}|                     d¦  «        r#t          |                     dd¦  «        ¦  «        n|dz   }|t          k    rŒKt          |||¦  «        ‰	|<   t          ||¦  «        }Œp|                     |d	k    rˆ	fd
„t          |dz   ¦  «        D ¦   «         ng ¦  «         Œâ|rTt          d„ |d         D ¦   «         ¦  «        s5|                     ¦   «          |rt          d„ |d         D ¦   «         ¦  «        ¯5|S )NrX  rY  rq  r„   Úcr’  r/   r«   r   c                ó<   •— g | ]}‰                      |d ¦  «        ‘ŒS )r/   r�  )r˜   rÌ   r/  s     €r*   rš   z_sheet_rows.<locals>.<listcomp>¦  s'   ø€ ÐBÐBÐB¨!�U—Y’Y˜q "Ñ%Ô%ÐBÐBÐBr)   c              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rJ   r`  )r˜   r  s     r*   r¸   z_sheet_rows.<locals>.<genexpr>§  s*   è è € Ð?Ð?¨U˜5Ÿ;š;™=œ=Ð?Ð?Ð?Ð?Ð?Ð?r)   )rQ  rR  r‰  re  rZ   Ú_MAX_XLSX_ROWS_PER_SHEETr  r­  Ú_MAX_XLSX_COLSÚ_cell_valuerë   r¬   rº   rg  r�   )
r®  rz  rh  r¶   r€  rq  Úmax_colr  Úcolr/  s
            @r*   rx  rx  —  sž  ø€ ÝŒ=˜Ñ#Ô#€DØ�Uˆˆˆ€AØ€DØ�yŠy˜A˜˜˜Ñ#Ô#ð \ð \ˆÝˆt‰9Œ9Õ0Ò0Ð0ØˆEØ "ˆØˆØ—H’H ˜W˜W˜WÑ%Ô%ð 	(ð 	(ˆDØ37·8²8¸C±=´=ÐQ•*˜TŸXšX c¨2Ñ.Ô.Ñ/Ô/Ð/ÀgÐPQÁkˆCØ•nÒ$Ð$ØÝ$ T¨6°1Ñ5Ô5ˆE�#‰JÝ˜' 3Ñ'Ô'ˆGˆGØ�ŠÀgÐQRÂlÀlÐBÐBÐBÐB­u°W¸q±[Ñ/AÔ/AÐBÑBÔBÐBÐXZÑ[Ô[Ð[Ð[Ø
ð •sÐ?Ð?°d¸2´hÐ?Ñ?Ô?Ñ?Ô?ð Ø�Š‰
Œ
ˆ
ð ð •sÐ?Ð?°d¸2´hÐ?Ñ?Ô?Ñ?Ô?ð à€Kr)   r¶   c                óÐ  — |                       |› d�¦  «        pd}|                      dd¦  «        }|dk    r.	 |t          |¦  «                 S # t          t          f$ r Y dS w xY w|dk    rQ|                      |› d�¦  «        }|€dn4d                     d„ |                     |› d�¦  «        D ¦   «         ¦  «        S |dk    r|                     ¦   «         d	v rd
ndS |dk    r|pdS |S )NÚvr/   rZ  r¶   Ú	inlineStrÚisc              3  ó(   K  — | ]}|j         pd V — ŒdS r…  r†  r‡  s     r*   r¸   z_cell_value.<locals>.<genexpr>¶  s(   è è € Ð0\Ð0\À!°´°¸2Ð0\Ð0\Ð0\Ð0\Ð0\Ð0\r)   r¢   >   Ú1ÚTRUEÚtruer¿  ÚFALSEÚez#ERROR)	Úfindtextr  rß   rB  Ú
IndexErrorÚfindr¦   re  ro   )r  rz  r¶   r  rK  Úinlines         r*   r¶  r¶  ¬  s  € Ø�MŠM˜Q˜'˜'˜'Ñ"Ô"Ð( b€EØ
�(Š(�3˜Ñ
Ô
€CØ
ˆc‚z€zð	Ø�#˜e™*œ*Ô%Ð%øÝ�JÐ'ð 	ð 	ð 	Ø�2�2ð	øøøà
ˆkÒÐØ—’˜a˜8˜8˜8Ñ$Ô$ˆØ�^ˆrˆr¨¯ªÐ0\Ð0\ÀvÇ{Â{ÐVWÐSZÐSZÐSZÑG[ÔG[Ð0\Ñ0\Ô0\Ñ)\Ô)\Ð\Ø
ˆc‚z€zØŸš™œÐ*?Ð?Ð?ˆvˆvÀWÐLØ
ˆc‚z€zØÐ ˜Ð Ø€Ls   ¸A ÁA"Á!A")r+   r,   r-   r,   )r-   r9   )r+   r,   r-   rH   )rQ   rR   r+   r,   r-   r,   )r+   r,   r-   rz   )r+   r,   r-   r“   )r‘   rœ   r-   r,   )r‘   rœ   r-   r©   )r°   rœ   r±   r²   r³   rœ   r-   r,   rJ   )r+   r,   rÇ   rÈ   r-   r,   )rQ   rR   rÇ   r,   r-   r,   )r-   r,   )rÞ   rß   r-   r,   )rã   r,   r-   rß   )ru   r,   r-   r,   )rù   r   r-   r,   )r/   r/   )r  r  r  r,   r   r,   r-   r,   )rM  rN  r`   r,   r-   rO  )rM  rN  ry  r�  r-   r²   )rM  rN  r-   rŠ  )rM  rN  ry  r�  r-   r”  )rž  r,   r-   r,   )r¤  r,   r-   rß   )r®  rR   rz  r²   r-   r¯  )r  rO  rz  r²   r¶   r,   r-   r,   )Tr'   Ú
__future__r   rE   r@  ra   r¢  rè   r…   r‡   r]   Ú	threadingr@   ra  Úpathlibr   Útypingr   r   Ú	xml.etreer   rQ  Ú__all__Ú	frozensetr   r2   ÚMAX_XLSX_BYTESrk   r[   r´  rµ  rd  r‰  r“  r›  rD   r	   r6   Úobjectr>   r7   Ú__annotations__ÚLockr?   rB   r8   r3   r   r   r
   rP   r»   rÎ   rÏ   rÐ   r‰   r’   r›   r¨   r¥   r¹   r¼   rÆ   rq   r\   rÕ   rÝ   râ   rî   rø   r'  r  r,  rM   rV  rN   rO   rt  ru  rv  rw  r­  rx  r¶  r(   r)   r*   ú<module>rÒ     s¡  ðð
ð 
ð 
ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð €ð #˜Ð#?Ð#?Ð#?Ñ@Ô@Ð à�Ið ð ð ñ ô Ð ð "€ð $Ð Ø%Ð ØÐ Ø€àF€ØC€Ø
O€ØL€ðOð Oð Oð Oð O�iñ Oô Oð Oðð ð ð ð �‘”€Ø#€Ð #Ð #Ð #Ñ #ØˆyŒ~ÑÔ€ð Ð Ø%)Ð Ð )Ð )Ð )Ñ )ð ð  ð  ð  ðF"ð "ð "ð "ð
Bð 
Bð 
Bð 
Bðð ð ð ð8ð ð ð ðX Ð ð Ð ØÐ Ø Ð ØÐ ðð ð ð ð(1ð 1ð 1ð 1ðð ð ð ðð ð ð ð Ð ØÐ ðð ð ð ð2#ð #ð #ð #ð #ðLð ð ð ð0ð ð ð ð.ð ð ð ðPð Pð Pð Pð3ð 3ð 3ð 3ðð ð ð ð( Ð ð=ð =ð =ð =ð@ð ð ð ð ð").ð ).ð ).ð ).ðXJð Jð Jð Jð0ð 0ð 0ð 0ð4.ð .ð .ð .ðB_ð _ð _ð _ðð ð ð ð	eð 	eð 	eð 	eðVð Vð Vð Vð
ð ð ð ðð ð ð ð*ð ð ð ð ð r)   