Ë
    D·j¶½  ã                  óô  — 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m	Z	 d dl
mZmZmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ erddlmZ  ej@                  e!«      Z" ejF                  d«      jH                  Z%dZ&ddddddddddddddddœZ' ejF                  d«      Z(ejR                  Z*	 d e*z  Z+	  G d!„ d"e	«      Z, G d#„ d$e	«      Z-d%„ Z.dMd&„Z/ G d'„ d(«      Z0 G d)„ d*e1«      Z2 G d+„ d,«      Z3 G d-„ d.e0«      Z4dNd/„Z5 G d0„ d1ej$                  «      Z6d2d3d4d5d6d7d8d8d8d9d:d;d<d=d>d?œZ7d@„ Z8 G dA„ dB«      Z9 G dC„ dD«      Z:dE„ Z;dOdF„Z<e8dGfdH„Z=dI„ Z> ej~                  e6j€                  e6e5«        ej‚                  e6j€                  e=«        ej„                  e6j€                  e<«        ej†                  e6j€                  dJdKg«        ejˆ                  e6j€                  dL«       y)Pé    )ÚannotationsN)ÚIntEnum)ÚIOÚTYPE_CHECKINGÚAnyÚNoReturné   )ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16be)Úi32be)Úo8)Úo16be)Úo32be)Ú_imagings   \w\w\w\ws   ‰PNG

)Ú1r   )ÚLúL;2)r   úL;4)r   r   )úI;16úI;16B)ÚRGBr   )r   zRGB;16B)ÚPúP;1)r   úP;2)r   úP;4)r   r   )ÚLAr    )ÚRGBAzLA;16B)r!   r!   )r!   zRGBA;16B))r	   r   )é   r   )é   r   )é   r   )é   r   )r$   r"   )r%   r"   )r	   é   )r"   r&   )r#   r&   )r$   r&   )r$   r#   )r%   r#   )r$   é   )r%   r'   s   ^ÿ* ÿ*$é@   c                  ó   — e Zd ZdZ	 dZ	 dZy)ÚDisposalr   r	   r"   N)Ú__name__Ú
__module__Ú__qualname__ÚOP_NONEÚOP_BACKGROUNDÚOP_PREVIOUS© ó    ú`/var/www/html/ai-video-generator/backend/venv/lib/python3.12/site-packages/PIL/PngImagePlugin.pyr*   r*   g   s$   „ Ø€Gðð €Mðð
 €Kðr2   r*   c                  ó   — e Zd ZdZ	 dZy)ÚBlendr   r	   N)r+   r,   r-   Ú	OP_SOURCEÚOP_OVERr1   r2   r3   r5   r5   |   s   „ Ø€Iðð
 €Gðr2   r5   c                óŒ   — t        j                  «       }|j                  | t        «      }|j                  rd}t        |«      ‚|S )NzDecompressed Data Too Large)ÚzlibÚdecompressobjÚ
decompressÚMAX_TEXT_CHUNKÚunconsumed_tailÚ
ValueError)ÚsÚdobjÚ	plaintextÚmsgs       r3   Ú_safe_zlib_decompressrC   Š   s>   € Ü×ÑÓ€DØ—‘ ¤>Ó2€IØ×ÒØ+ˆÜ˜‹oÐØÐr2   c                ó4   — t        j                  | |«      dz  S )Nl   ÿÿ )r9   Úcrc32)ÚdataÚseeds     r3   Ú_crc32rH   “   s   € Ü�:‰:�d˜DÓ! JÑ.Ð.r2   c                  ó\   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd„ Z	dd„Z
dd	„Zddd
„Zy)ÚChunkStreamc                ó    — || _         g | _        y ©N)ÚfpÚqueue)ÚselfrM   s     r3   Ú__init__zChunkStream.__init__œ   s   € Ø$&ˆŒØ:<ˆ�
r2   c                ó¬  — d}| j                   €J ‚| j                  r:| j                  j                  «       \  }}}| j                   j                  |«       nE| j                   j	                  d«      }|dd }| j                   j                  «       }t        |«      }t        |«      s*t        j                  sdt        |«      › d�}t        |«      ‚|||fS )z.Fetch a new chunk. Returns header information.Nr$   r#   zbroken PNG file (chunk ú))rM   rN   ÚpopÚseekÚreadÚtellÚi32Úis_cidr   ÚLOAD_TRUNCATED_IMAGESÚreprÚSyntaxError)rO   ÚcidÚposÚlengthr?   rB   s         r3   rU   zChunkStream.read    s³   € àˆà�w‰wÐ"Ð"Ð"Ø�:Š:Ø#Ÿz™zŸ~™~Ó/ÑˆC��fØ�G‰G�L‰L˜Õà—‘—‘˜Q“ˆAØ�A�B�%ˆCØ—'‘'—,‘,“.ˆCÜ˜“VˆFä�cŒ{Ü×2Ò2Ø/´°S³	¨{¸!Ð<�Ü! #Ó&Ð&à�C˜ÐÐr2   c                ó   — | S rL   r1   ©rO   s    r3   Ú	__enter__zChunkStream.__enter__µ   s   € Øˆr2   c                ó$   — | j                  «        y rL   )Úclose)rO   Úargss     r3   Ú__exit__zChunkStream.__exit__¸   s   € Ø�
‰
�r2   c                ó    — d x| _         | _        y rL   )rN   rM   r`   s    r3   rc   zChunkStream.close»   s   € Ø#Ð#ˆŒ
�T•Wr2   c                ó\   — | j                   €J ‚| j                   j                  |||f«       y rL   )rN   Úappend©rO   r\   r]   r^   s       r3   ÚpushzChunkStream.push¾   s+   € Ø�z‰zÐ%Ð%Ð%Ø�
‰
×Ñ˜3  VÐ,Õ-r2   c                ó|   — t         j                  d|||«        t        | d|j                  d«      › �«      ||«      S )z"Call the appropriate chunk handlerzSTREAM %r %s %sÚchunk_Úascii)ÚloggerÚdebugÚgetattrÚdecoderi   s       r3   ÚcallzChunkStream.callÂ   s>   € ô 	�‰Ð&¨¨S°&Ô9Ø<Œw�t˜v c§j¡j°Ó&9Ð%:Ð;Ó<¸SÀ&ÓIÐIr2   c                óš  — t         j                  r|d   dz	  dz  r| j                  ||«       y| j                  €J ‚	 t	        |t	        |«      «      }t        | j                  j                  d«      «      }||k7  rdt        |«      › d�}t        |«      ‚y# t        j                  $ r }dt        |«      › d�}t        |«      |‚d}~ww xY w)	zRead and verify checksumr   é   r	   Nr#   z(broken PNG file (bad header checksum in rR   z(broken PNG file (incomplete checksum in )r   rY   Úcrc_skiprM   rH   rW   rU   rZ   r[   ÚstructÚerror)rO   r\   rF   Úcrc1Úcrc2rB   Úes          r3   ÚcrczChunkStream.crcÈ   sÅ   € ô ×*Ò*°°A±¸!±¸a²Ø�M‰M˜#˜tÔ$Øà�w‰wÐ"Ð"Ð"ð	*Ü˜$¤ s£Ó,ˆDÜ�t—w‘w—|‘| A“Ó'ˆDØ�tŠ|Ø@ÄÀcÃÀÈ1ÐM�Ü! #Ó&Ð&ð øô �|‰|ò 	*Ø<¼TÀ#»Y¸KÀqÐIˆCÜ˜cÓ"¨Ð)ûð	*ús   ¾AB ÂC
Â*CÃC
c                óV   — | j                   €J ‚| j                   j                  d«       y)zRead checksumNr#   )rM   rU   )rO   r\   rF   s      r3   ru   zChunkStream.crc_skipÝ   s#   € ð �w‰wÐ"Ð"Ð"Ø�‰�‰�Q�r2   c                ó  — g }	 	 | j                  «       \  }}}||k(  r	 |S | j	                  |t        j                  | j                  |«      «       |j                  |«       Œ_# t        j                  $ r}d}t        |«      |‚d }~ww xY w)Nztruncated PNG file)	rU   rv   rw   ÚOSErrorr{   r   Ú
_safe_readrM   rh   )rO   ÚendchunkÚcidsr\   r]   r^   rz   rB   s           r3   ÚverifyzChunkStream.verifyã   s�   € ð ˆàð*Ø#'§9¡9£;Ñ ��S˜&ð
 �hŠØð ˆð �H‰H�Sœ)×.Ñ.¨t¯w©w¸Ó?Ô@Ø�K‰K˜Ôð øô —<‘<ò *Ø*�Ü˜c“l¨Ð)ûð*ús   …A# Á#B	Á6BÂB	N)rM   ú	IO[bytes]ÚreturnÚNone)r„   ztuple[bytes, int, int])r„   rJ   )rd   Úobjectr„   r…   ©r„   r…   )r\   Úbytesr]   Úintr^   r‰   r„   r…   )r\   rˆ   rF   rˆ   r„   r…   )ó   IEND)r€   rˆ   r„   zlist[bytes])r+   r,   r-   rP   rU   ra   re   rc   rj   rr   r{   ru   r‚   r1   r2   r3   rJ   rJ   ›   s5   „ ó=ó ó*óó$ó.òJó*ó*õr2   rJ   c                  ó8   — e Zd ZU dZded<   ded<   edd„«       Zy)ÚiTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    zstr | bytes | NoneÚlangÚtkeyNc                óN   — t         j                  | |«      }||_        ||_        |S )zÇ
        :param cls: the class to use when creating the instance
        :param text: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        )ÚstrÚ__new__r�   rŽ   )ÚclsÚtextr�   rŽ   rO   s        r3   r‘   ziTXt.__new__  s'   € ô �{‰{˜3 Ó%ˆØˆŒ	ØˆŒ	Øˆr2   )NN)r+   r,   r-   Ú__doc__Ú__annotations__Ústaticmethodr‘   r1   r2   r3   rŒ   rŒ   ø   s'   … ñð ÓØ
Óàòó ñr2   rŒ   c                  ób   — e Zd ZdZdd„Zdd	d„Z	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 dd„Zy)ÚPngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    c                ó   — g | _         y rL   )Úchunksr`   s    r3   rP   zPngInfo.__init__  s	   € Ø79ˆ�r2   c                ó@   — | j                   j                  |||f«       y)a"  Appends an arbitrary chunk. Use with caution.

        :param cid: a byte string, 4 bytes long.
        :param data: a byte string of the encoded data
        :param after_idat: for use with private chunks. Whether the chunk
                           should be written after IDAT

        N)rš   rh   )rO   r\   rF   Ú
after_idats       r3   ÚaddzPngInfo.add  s   € ð 	�‰×Ñ˜C  zÐ2Õ3r2   c                óÐ  — t        |t        «      s|j                  dd«      }t        |t        «      s|j                  dd«      }t        |t        «      s|j                  dd«      }t        |t        «      s|j                  dd«      }|r8| j                  d|dz   |z   dz   |z   dz   t	        j
                  |«      z   «       y| j                  d|dz   |z   dz   |z   dz   |z   «       y)	zùAppends an iTXt chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        :param zip: compression flag

        úlatin-1Ústrictúutf-8ó   iTXts     ó    s      N)Ú
isinstancerˆ   Úencoder�   r9   Úcompress)rO   ÚkeyÚvaluer�   rŽ   Úzips         r3   Úadd_itxtzPngInfo.add_itxt&  sÖ   € ô$ ˜#œuÔ%Ø—*‘*˜Y¨Ó1ˆCÜ˜%¤Ô'Ø—L‘L ¨(Ó3ˆEÜ˜$¤Ô&Ø—;‘;˜w¨Ó1ˆDÜ˜$¤Ô&Ø—;‘;˜w¨Ó1ˆDáØ�H‰HØØ�kÑ! DÑ(¨5Ñ0°4Ñ7¸%Ñ?Ä$Ç-Á-ÐPUÓBVÑVõð
 �H‰H�W˜c I™o°Ñ4°uÑ<¸tÑCÀeÑKÈeÑSÕTr2   c                ó  — t        |t        «      rL| j                  |||j                  �|j                  nd|j                  �|j                  |¬«      S d|¬«      S t        |t
        «      s	 |j                  dd«      }t        |t
        «      s|j                  dd«      }|r,| j                  d|dz   t        j                  |«      z   «       y| j                  d|d	z   |z   «       y# t        $ r | j                  |||¬«      cY S w xY w)
zæAppends a text chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key, text or an
           :py:class:`PIL.PngImagePlugin.iTXt` instance
        :param zip: compression flag

        Nr2   )r©   rŸ   r    ó   zTXtó     ó   tEXtr£   )r¤   rŒ   rª   r�   rŽ   rˆ   r¥   ÚUnicodeErrorr�   r9   r¦   )rO   r§   r¨   r©   s       r3   Úadd_textzPngInfo.add_textI  s  € ô �eœTÔ"Ø—=‘=ØØØ#Ÿj™jÐ4�—
’
¸#Ø#Ÿj™jÐ4�—
‘
Øð !ó ð ð ;>Øð !ó ð ô ˜%¤Ô'ð:ØŸ™ Y°Ó9�ô ˜#œuÔ%Ø—*‘*˜Y¨Ó1ˆCáØ�H‰H�W˜c G™m¬d¯m©m¸EÓ.BÑBÕCà�H‰H�W˜c E™k¨EÑ1Õ2øô  ò :Ø—}‘} S¨%°S�}Ó9Ò9ð:ús   Á.C) Ã)D	ÄD	Nr‡   ©F)r\   rˆ   rF   rˆ   rœ   Úboolr„   r…   )Ú r³   F)r§   ústr | bytesr¨   r´   r�   r´   rŽ   r´   r©   r²   r„   r…   )r§   r´   r¨   zstr | bytes | iTXtr©   r²   r„   r…   )r+   r,   r-   r”   rP   r�   rª   r°   r1   r2   r3   r˜   r˜     s�   „ ñó
:ô
4ð  ØØð!Uàð!Uð ð!Uð ð	!Uð
 ð!Uð ð!Uð 
ó!UðH HMð!3Øð!3Ø'9ð!3Ø@Dð!3à	ô!3r2   r˜   c                  ó¾   ‡ — e Zd Zˆ fd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zˆ xZS )Ú	PngStreamc                ó¾   •— t         ‰| �  |«       i | _        i | _        d| _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d| _        y )N©r   r   r   )ÚsuperrP   Úim_infoÚim_textÚim_sizeÚim_modeÚim_tileÚ
im_paletteÚim_custom_mimetypeÚim_n_framesÚ_seq_numÚrewind_stateÚtext_memory)rO   rM   Ú	__class__s     €r3   rP   zPngStream.__init__r  sc   ø€ Ü‰Ñ˜Ôð ˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØ"&ˆÔØˆÔØˆŒØ ˆÔàˆÕr2   c                óŠ   — | xj                   |z  c_         | j                   t        kD  rd| j                   › d�}t        |«      ‚y )Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)rÄ   ÚMAX_TEXT_MEMORYr>   )rO   ÚchunklenrB   s      r3   Úcheck_text_memoryzPngStream.check_text_memoryƒ  sN   € Ø×Ò˜HÑ$ÕØ×ÑœoÒ-à7Ø×#Ñ#Ð$Ð$4ð6ð ô ˜S“/Ð!ð .r2   c                ór   — | j                   j                  «       | j                  | j                  dœ| _        y )N)ÚinfoÚtileÚseq_num)rº   Úcopyr¾   rÂ   rÃ   r`   s    r3   Úsave_rewindzPngStream.save_rewindŒ  s*   € à—L‘L×%Ñ%Ó'Ø—L‘LØ—}‘}ñ
ˆÕr2   c                ó˜   — | j                   d   j                  «       | _        | j                   d   | _        | j                   d   | _        y )NrË   rÌ   rÍ   )rÃ   rÎ   rº   r¾   rÂ   r`   s    r3   ÚrewindzPngStream.rewind“  sA   € Ø×(Ñ(¨Ñ0×5Ñ5Ó7ˆŒØ×(Ñ(¨Ñ0ˆŒØ×)Ñ)¨)Ñ4ˆ�r2   c                ó¶  — t        j                  | j                  |«      }|j                  d«      }t        j                  d|d | «       ||dz      }t        j                  d|«       |dk7  rd|› d�}t        |«      ‚	 t        ||dz   d  «      }|| j                  d	<   |S # t        $ r t         j                  rd }n‚ Y Œ0t        j                  $ r d }Y ŒFw xY w)
Nr£   ziCCP profile name %rr	   zCompression method %sr   úUnknown compression method z in iCCP chunkr"   Úicc_profile)r   r   rM   Úfindrn   ro   r[   rC   r>   rY   r9   rw   rº   )rO   r]   r^   r?   ÚiÚcomp_methodrB   rÔ   s           r3   Ú
chunk_iCCPzPngStream.chunk_iCCP˜  sá   € ä× Ñ  §¡¨&Ó1ˆð �F‰F�5‹MˆÜ�‰Ð+¨Q¨r°¨UÔ3Ø˜˜A™‘hˆÜ�‰Ð,¨kÔ:Ø˜!ÒØ/°¨}¸NÐKˆCÜ˜cÓ"Ð"ð	Ü/°°!°a±%°'°
Ó;ˆKð '2ˆ�‰�]Ñ#Øˆøô ò 	Ü×.Ò.Ø"‘àñ ô �z‰zò 	ØŠKð	ús   Â B" Â"CÃCÃCc                óp  — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚t        |d«      t        |d«      f| _        	 t        |d   |d   f   \  | _        | _	        |d   rd| j                  d	<   |d
   rd}t        |«      ‚|S # t        $ r Y Œ3w xY w)Né   zTruncated IHDR chunkr   r#   r$   é	   é   r	   Ú	interlaceé   zunknown filter category)r   r   rM   rY   r>   rW   r¼   Ú_MODESr½   Ú
im_rawmodeÚ	Exceptionrº   r[   ©rO   r]   r^   r?   rB   s        r3   Ú
chunk_IHDRzPngStream.chunk_IHDR³  s¿   € ä× Ñ  §¡¨&Ó1ˆØ�BŠ;Ü×.Ò.Ø�Ø(ˆCÜ˜S“/Ð!Ü˜1˜a“y¤# a¨£)Ð+ˆŒð	Ü,2°A°a±D¸!¸A¹$°<Ñ,@Ñ)ˆDŒL˜$œ/ð ˆRŠ5Ø()ˆD�L‰L˜Ñ%ØˆRŠ5Ø+ˆCÜ˜cÓ"Ð"Øˆøô ò 	Ùð	ús   Á#B) Â)	B5Â4B5c                ó  — d| j                   v rd| j                   d   || j                  fg}n9| j                  �d| j                   d<   dd| j                  z   || j                  fg}|| _        || _        d}t        |«      ‚)NÚbboxr©   TÚdefault_imager¸   zimage data found)rº   rà   rÁ   r¼   r¾   Úim_idatÚEOFError)rO   r]   r^   rÌ   rB   s        r3   Ú
chunk_IDATzPngStream.chunk_IDATÇ  s�   € à�T—\‘\Ñ!Ø˜DŸL™L¨Ñ0°#°t·±ÐGÐH‰Dà×ÑÐ+Ø04�—‘˜_Ñ-Ø˜F T§\¡\Ñ1°3¸¿¹ÐHÐIˆDØˆŒØˆŒØ ˆÜ�s‹mÐr2   c                ó   — d}t        |«      ‚)Nzend of PNG image)rè   )rO   r]   r^   rB   s       r3   Ú
chunk_IENDzPngStream.chunk_IENDÔ  s   € Ø ˆÜ�s‹mÐr2   c                óv   — t        j                  | j                  |«      }| j                  dk(  r	d|f| _        |S )Nr   r   )r   r   rM   r½   r¿   ©rO   r]   r^   r?   s       r3   Ú
chunk_PLTEzPngStream.chunk_PLTEØ  s4   € ä× Ñ  §¡¨&Ó1ˆØ�<‰<˜3ÒØ# Q˜hˆDŒOØˆr2   c                óÊ  — t        j                  | j                  |«      }| j                  dk(  rMt        j                  |«      r'|j                  d«      }|dk\  r || j                  d<   |S || j                  d<   |S | j                  dv rt        |«      | j                  d<   |S | j                  dk(  r/t        |«      t        |d«      t        |d«      f| j                  d<   |S )	Nr   r£   r   Útransparency)r   r   r   r   r"   r#   )	r   r   rM   r½   Ú_simple_paletteÚmatchrÕ   rº   Úi16)rO   r]   r^   r?   rÖ   s        r3   Ú
chunk_tRNSzPngStream.chunk_tRNSß  sÔ   € ä× Ñ  §¡¨&Ó1ˆØ�<‰<˜3ÒÜ×$Ñ$ QÔ'ð —F‘F˜5“M�Ø˜’6Ø34�D—L‘L Ñ0ð ˆð 01�—‘˜^Ñ,ð
 ˆð	 �\‰\Ð/Ñ/Ü+.¨q«6ˆD�L‰L˜Ñ(ð ˆð �\‰\˜UÒ"Ü+.¨q«6´3°q¸!³9¼cÀ!ÀQ»iÐ+GˆD�L‰L˜Ñ(Øˆr2   c                ó|   — t        j                  | j                  |«      }t        |«      dz  | j                  d<   |S )Nç     jø@Úgamma)r   r   rM   rW   rº   rí   s       r3   Ú
chunk_gAMAzPngStream.chunk_gAMAó  s4   € ä× Ñ  §¡¨&Ó1ˆÜ # A£¨Ñ 1ˆ�‰�WÑØˆr2   c                óÎ   — t        j                  | j                  |«      }t        j                  dt        |«      dz  z  |«      }t        d„ |D «       «      | j                  d<   |S )Nz>%dIr#   c              3  ó&   K  — | ]	  }|d z  –— Œ y­w)rö   Nr1   )Ú.0Úelts     r3   ú	<genexpr>z'PngStream.chunk_cHRM.<locals>.<genexpr>ÿ  s   è ø€ Ò,PÀ¨S°8­^Ñ,Pùs   ‚Úchromaticity)r   r   rM   rv   ÚunpackÚlenÚtuplerº   )rO   r]   r^   r?   Úraw_valss        r3   Ú
chunk_cHRMzPngStream.chunk_cHRMù  sU   € ô × Ñ  §¡¨&Ó1ˆÜ—=‘= ¬3¨q«6°Q©;Ñ!7¸Ó;ˆÜ',Ñ,PÀxÔ,PÓ'Pˆ�‰�^Ñ$Øˆr2   c                ó²   — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚|d   | j
                  d<   |S )Nr	   zTruncated sRGB chunkr   Úsrgb)r   r   rM   rY   r>   rº   râ   s        r3   Ú
chunk_sRGBzPngStream.chunk_sRGB  sU   € ô × Ñ  §¡¨&Ó1ˆØ�AŠ:Ü×.Ò.Ø�Ø(ˆCÜ˜S“/Ð!Ø  ™tˆ�‰�VÑØˆr2   c                ó4  — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚t        |d«      t        |d«      }}|d   }|dk(  r|dz  |dz  f}|| j                  d<   |S |dk(  r||f| j                  d	<   |S )
NrÛ   zTruncated pHYs chunkr   r#   r$   r	   ç¦
F%uš?ÚdpiÚaspect)r   r   rM   rY   r>   rW   rº   )	rO   r]   r^   r?   rB   ÚpxÚpyÚunitr	  s	            r3   Ú
chunk_pHYszPngStream.chunk_pHYs  s¨   € ä× Ñ  §¡¨&Ó1ˆØ�AŠ:Ü×.Ò.Ø�Ø(ˆCÜ˜S“/Ð!Ü�Q˜“œC  1›IˆBˆØ�‰tˆØ�1Š9Ø�v‘+˜r F™{Ð*ˆCØ"%ˆD�L‰L˜Ñð ˆð �QŠYØ%'¨ VˆD�L‰L˜Ñ"Øˆr2   c                ób  — t        j                  | j                  |«      }	 |j                  dd«      \  }}|rc|j                  dd«      }|j                  dd«      }|dk(  r|n|| j                  |<   || j                  |<   | j                  t        |«      «       |S # t        $ r |}d}Y Œvw xY w)Nr£   r	   r2   rŸ   r    ÚreplaceÚexif)
r   r   rM   Úsplitr>   rq   rº   r»   rÉ   r   )rO   r]   r^   r?   ÚkÚvÚv_strs          r3   Ú
chunk_tEXtzPngStream.chunk_tEXt#  sª   € ä× Ñ  §¡¨&Ó1ˆð	Ø—7‘7˜5 !Ó$‰DˆAˆqñ
 Ø—‘˜ HÓ-ˆAØ—H‘H˜Y¨	Ó2ˆEà#$¨¢;™a°EˆD�L‰L˜‰OØ#ˆD�L‰L˜‰OØ×"Ñ"¤3 u£:Ô.àˆøô ò 	àˆAØŠAð	ús   ¢B ÂB.Â-B.c                ó$  — t        j                  | j                  |«      }	 |j                  dd«      \  }}|r|d   }nd}|dk7  rd|› d�}t        |«      ‚	 t        |dd  «      }|r\|j                  dd«      }|j                  dd	«      }|x| j                  |<   | j                  |<   | j                  t        |«      «       |S # t        $ r |}d}Y Œžw xY w# t        $ r t         j                  rd}n‚ Y Œ’t        j                  $ r d}Y Œ¨w xY w)
Nr£   r	   r2   r   rÓ   z in zTXt chunkrŸ   r    r  )r   r   rM   r  r>   r[   rC   rY   r9   rw   rq   rº   r»   rÉ   r   )rO   r]   r^   r?   r  r  r×   rB   s           r3   Ú
chunk_zTXtzPngStream.chunk_zTXt6  s$  € ä× Ñ  §¡¨&Ó1ˆð	Ø—7‘7˜5 !Ó$‰DˆAˆqñ Ø˜A™$‰KàˆKØ˜!ÒØ/°¨}¸NÐKˆCÜ˜cÓ"Ð"ð	Ü% a¨¨ eÓ,ˆAñ Ø—‘˜ HÓ-ˆAØ—‘˜ IÓ.ˆAà01Ð1ˆD�L‰L˜‰O˜dŸl™l¨1™oØ×"Ñ"¤3 q£6Ô*àˆøô7 ò 	ØˆAØŠAð	ûô ò 	Ü×.Ò.Ø‘àñ ô �z‰zò 	ØŠAð	ús)   ¢C ÁC ÃCÃCÃDÃ8DÄDc                ó*  — t        j                  | j                  |«      x}}	 |j                  dd«      \  }}t        |«      dk  r|S |d   |d   |dd  }}}	 |j                  dd«      \  }}	}
|dk7  r|dk(  r	 t        |
«      }
n|S |dk(  r|
| j                  d<   	 |j                  dd«      }|j                  d	d«      }|	j                  d	d«      }	|
j                  d	d«      }
t        |
||	«      x| j                  |<   | j                  |<   | j                  t        |
«      «       |S # t        $ r |cY S w xY w# t        $ r |cY S w xY w# t        $ r t         j                  r|cY S ‚ t        j                  $ r |cY S w xY w# t        $ r |cY S w xY w)
Nr£   r	   r"   r   s   XML:com.adobe.xmpÚxmprŸ   r    r¡   )r   r   rM   r  r>   r   rC   rY   r9   rw   rº   rq   r¯   rŒ   r»   rÉ   )rO   r]   r^   Úrr?   r  ÚcfÚcmr�   Útkr  s              r3   Ú
chunk_iTXtzPngStream.chunk_iTXtX  s¯  € ä×$Ñ$ T§W¡W¨fÓ5Ð5ˆˆAð	Ø—7‘7˜5 !Ó$‰DˆAˆqô ˆq‹6�AŠ:ØˆHØ�a‘D˜!˜A™$  ! " �ˆBˆð	ØŸ'™' %¨Ó+‰KˆD�"�að �Š7Ø�QŠwðÜ-¨aÓ0‘Að �ØÐ$Ò$Ø"#ˆD�L‰L˜Ñð	Ø—‘˜ HÓ-ˆAØ—;‘;˜w¨Ó1ˆDØ—‘˜7 HÓ-ˆBØ—‘˜ (Ó+ˆAô -1°°D¸"Ó,=Ð=ˆ�‰�Q‰˜$Ÿ,™, q™/Ø×Ñœs 1›vÔ&àˆøôG ò 	ØŠHð	ûô ò 	ØŠHð	ûô "ò Ü ×6Ò6Ø šàÜ—z‘zò Ø’Hðûô ò 	ØŠHð	úsN   ¤D* ÁD; Á:E ÂAF Ä*D8Ä7D8Ä;E	ÅE	ÅFÅ)FÆ FÆFÆFc                ój   — t        j                  | j                  |«      }d|z   | j                  d<   |S )Nó   Exif  r  )r   r   rM   rº   rí   s       r3   Ú
chunk_eXIfzPngStream.chunk_eXIf‚  s0   € Ü× Ñ  §¡¨&Ó1ˆØ.°Ñ2ˆ�‰�VÑØˆr2   c                óˆ  — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚| j
                  �d | _        t        j                  d«       |S t        |«      }|dk(  s|dkD  rt        j                  d«       |S || _        t        |d«      | j                  d<   d| _
        |S )	Nr$   z"APNG contains truncated acTL chunkz4Invalid APNG, will use default PNG image if possibler   l        r#   Úloopz
image/apng)r   r   rM   rY   r>   rÁ   ÚwarningsÚwarnrW   rº   rÀ   )rO   r]   r^   r?   rB   Ún_framess         r3   Ú
chunk_acTLzPngStream.chunk_acTLˆ  s´   € Ü× Ñ  §¡¨&Ó1ˆØ�AŠ:Ü×.Ò.Ø�Ø6ˆCÜ˜S“/Ð!Ø×ÑÐ'Ø#ˆDÔÜ�M‰MÐPÔQØˆHÜ�q“6ˆØ�qŠ=˜H zÒ1Ü�M‰MÐPÔQØˆHØ#ˆÔÜ" 1 a›yˆ�‰�VÑØ".ˆÔØˆr2   c                óè  — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚t        |«      }| j                  €|dk7  s| j                  �| j                  |dz
  k7  rd}t        |«      ‚|| _        t        |d«      t        |d«      }}t        |d«      t        |d	«      }	}| j                  \  }
}||z   |
kD  s|	|z   |kD  rd
}t        |«      ‚||	||z   |	|z   f| j                  d<   t        |d«      t        |d«      }}|dk(  rd}t        |«      t        |«      z  dz  | j                  d<   |d   | j                  d<   |d   | j                  d<   |S )Né   z"APNG contains truncated fcTL chunkr   r	   ú#APNG contains frame sequence errorsr#   r$   rÜ   r%   zAPNG contains invalid framesrå   é   é   éd   éè  Údurationé   Údisposalé   Úblend)r   r   rM   rY   r>   rW   rÂ   r[   r¼   rº   ró   Úfloat)rO   r]   r^   r?   rB   ÚseqÚwidthÚheightr  r  Úim_wÚim_hÚ	delay_numÚ	delay_dens                 r3   Ú
chunk_fcTLzPngStream.chunk_fcTLœ  sn  € Ü× Ñ  §¡¨&Ó1ˆØ�BŠ;Ü×.Ò.Ø�Ø6ˆCÜ˜S“/Ð!Ü�!‹fˆØ�M‰MÐ! c¨Q¢hØ�M‰MÐ%¨$¯-©-¸3À¹7Ò*Bà7ˆCÜ˜cÓ"Ð"ØˆŒÜ˜A˜q›	¤3 q¨!£9ˆvˆÜ�Q˜“œS  B›ZˆBˆØ—\‘\‰
ˆˆdØ�‰:˜Ò  V¡¨dÒ 2Ø0ˆCÜ˜cÓ"Ð"Ø " B¨¨U©
°B¸±KÐ@ˆ�‰�VÑÜ" 1 b›z¬3¨q°"«:�9ˆ	Ø˜Š>ØˆIÜ#(¨Ó#3´e¸IÓ6FÑ#FÈÑ#Mˆ�‰�ZÑ Ø#$ R¡5ˆ�‰�ZÑ Ø ! "¡ˆ�‰�WÑØˆr2   c                ó\  — |dk  r?t         j                  r"t        j                  | j                  |«      }|S d}t	        |«      ‚t        j                  | j                  d«      }t        |«      }| j                  |dz
  k7  rd}t        |«      ‚|| _        | j                  |dz   |dz
  «      S )Nr#   z"APNG contains truncated fDAT chunkr	   r+  )	r   rY   r   rM   r>   rW   rÂ   r[   ré   )rO   r]   r^   r?   rB   r6  s         r3   Ú
chunk_fdATzPngStream.chunk_fdAT¹  s›   € Ø�AŠ:Ü×.Ò.Ü×(Ñ(¨¯©°&Ó9�Ø�Ø6ˆCÜ˜S“/Ð!Ü× Ñ  §¡¨!Ó,ˆÜ�!‹fˆØ�=‰=˜C !™GÒ#Ø7ˆCÜ˜cÓ"Ð"ØˆŒØ�‰˜s Q™w¨°©
Ó3Ð3r2   )rÈ   r‰   r„   r…   r‡   )r]   r‰   r^   r‰   r„   rˆ   )r]   r‰   r^   r‰   r„   r   )r+   r,   r-   rP   rÉ   rÏ   rÑ   rØ   rã   ré   rë   rî   rô   rø   r  r  r  r  r  r  r"  r(  r=  r?  Ú__classcell__©rÅ   s   @r3   r¶   r¶   q  sn   ø„ ôó""ó
ó5ó
ó6ó(óóóó(óóó ó"ó& óD(óTóó(÷:4r2   r¶   c                ó   — | d d t         k(  S )Nr$   )Ú_MAGIC)Úprefixs    r3   Ú_acceptrE  Í  s   € Ø�"�1ˆ:œÑÐr2   c                  ó‚   ‡ — e Zd ZdZdZdd„Zed„ «       Zdd„Zdd„Z	ddd„Z
dd„Zdd	„Zdd
„Zdd„Zdd„Zdˆ fd„Zˆ xZS )ÚPngImageFileÚPNGzPortable network graphicsc                óF  — t        | j                  j                  d«      «      sd}t        |«      ‚| j                  | _        d| _        g | _        t        | j                  «      | _        	 | j                  j                  «       \  }}}	 | j                  j                  |||«      }| j                  j%                  ||«       ŒY# t        $ r Y nvt        $ rk t        j                  d|||«       t        j                  | j                  |«      }|dd j!                  «       r| j                  j#                  ||f«       Y Œšw xY w| j                  j&                  | _        | j                  j*                  | _        | j                  j.                  | _        d | _        | j                  j4                  | _        | j                  j8                  | _        | j                  j<                  xs d| _        | j0                  jA                  dd«      | _!        | j                  jD                  r4| j                  jD                  \  }}tG        jH                  ||«      | _%        |d	k(  r|d
z
  | _&        n|| _&        | j                  j<                  �ƒd| _'        | j                  jQ                  «        | jL                  | _)        | j                  jU                  «       | _+        | jB                  r| xj>                  dz  c_        | jY                  d«       | j>                  dkD  | _-        y )Nr$   znot a PNG filer   ú%r %s %s (unknown)r	   r"   ræ   Fó   fdATr#   ).rE  rM   rU   r[   Ú_fpÚ_PngImageFile__frameÚprivate_chunksr¶   Úpngrr   rè   ÚAttributeErrorrn   ro   r   r   Úislowerrh   r{   r½   Ú_moder¼   Ú_sizerº   rË   Ú_textr¾   rÌ   rÀ   Úcustom_mimetyperÁ   r'  Úgetræ   r¿   r   ÚrawÚpaletteÚ_PngImageFile__prepare_idatÚ!_close_exclusive_fp_after_loadingrÏ   Ú_PngImageFile__rewind_idatrV   Ú_PngImageFile__rewindÚ_seekÚis_animated)rO   rB   r\   r]   r^   r?   ÚrawmoderF   s           r3   Ú_openzPngImageFile._openÙ  sh  € Ü�t—w‘w—|‘| A“Ô'Ø"ˆCÜ˜cÓ"Ð"Ø—7‘7ˆŒØˆŒð
 VXˆÔÜ%.¨t¯w©wÓ%7ˆŒàð  $Ÿx™xŸ}™}›ÑˆC��fð9Ø—H‘H—M‘M # s¨FÓ3�ð �H‰H�L‰L˜˜aÔ ð! øô ò ÙÜ!ò 9Ü—‘Ð1°3¸¸VÔDÜ×(Ñ(¨¯©°&Ó9�Ø�q˜�8×#Ñ#Ô%Ø×'Ñ'×.Ñ.°°Q¨xÔ8ùð	9úð —X‘X×%Ñ%ˆŒ
Ø—X‘X×%Ñ%ˆŒ
Ø—H‘H×$Ñ$ˆŒ	ØˆŒ
Ø—H‘H×$Ñ$ˆŒ	Ø#Ÿx™x×:Ñ:ˆÔØŸ™×,Ñ,Ò1°ˆŒØ!ŸY™YŸ]™]¨?¸EÓBˆÔà�8‰8×ÒØ ŸH™H×/Ñ/‰MˆG�TÜ'×+Ñ+¨G°TÓ:ˆDŒLà�'Š>Ø"(¨1¡*ˆDÕà"(ˆDÔà�8‰8×ÑÐ+Ø5:ˆDÔ2Ø�H‰H× Ñ Ô"Ø!%×!4Ñ!4ˆDÔØ ŸH™HŸM™M›OˆDŒMØ×!Ò!à—’ Ñ"•Ø�J‰J�qŒMØŸ=™=¨1Ñ,ˆÕs   ÂC Ã	EÃA0EÅEc                óø   — | j                   €c| j                  r*| j                  }| j                  | j                  dz
  «       | j                  «        | j                  r| j                  «       | j                   S )Nr	   )rT  r^  rM  rT   r'  Úload)rO   Úframes     r3   r“   zPngImageFile.text  s_   € ð �:‰:Ðð ×ÒØŸ™�à—	‘	˜$Ÿ-™-¨!Ñ+Ô,Ø�I‰IŒKØ×ÒØ—	‘	˜%Ô Ø�z‰zÐr2   c                óp  — | j                   €d}t        |«      ‚| j                   j                  | j                  d   d   dz
  «       | j                  €J ‚| j                  j                  «        | j                  j                  «        | j                  r| j                   j                  «        d| _         y)zVerify PNG fileNz)verify must be called directly after openr   r"   r$   )rM   ÚRuntimeErrorrT   rÌ   rO  r‚   rc   Ú_exclusive_fp)rO   rB   s     r3   r‚   zPngImageFile.verify+  s‰   € ð �7‰7ˆ?Ø=ˆCÜ˜sÓ#Ð#ð 	�‰�‰�T—Y‘Y˜q‘\ !‘_ qÑ(Ô)à�x‰xÐ#Ð#Ð#Ø�‰�‰ÔØ�‰�‰Ôà×ÒØ�G‰G�M‰MŒOØˆ�r2   c                óH  — | j                  |«      sy || j                  k  r| j                  dd«       | j                  }t        | j                  dz   |dz   «      D ]  }	 | j                  |«       Œ y # t        $ r$}| j                  |«       d}t	        |«      |‚d }~ww xY w)Nr   Tr	   zno more images in APNG file)Ú_seek_checkrM  r]  Úrangerè   rT   )rO   rc  Ú
last_frameÚfrz   rB   s         r3   rT   zPngImageFile.seek=  s˜   € Ø×Ñ Ô&ØØ�4—<‘<ÒØ�J‰J�q˜$Ôà—\‘\ˆ
Ü�t—|‘| aÑ'¨°©Ó3ò 	+ˆAð+Ø—
‘
˜1•ñ	+øô ò +Ø—	‘	˜*Ô%Ø3�Ü˜s“m¨Ð*ûð+ús   Á A4Á4	B!Á=BÂB!c                ó˜
  — | j                   €J ‚|  |dk(  �rK|r±| j                  j                  | j                  «       | j                   j	                  «        | j
                  | _        d | _        | j                  rd | _        | j                   j                  | _
        | j                   j                  | _        | j                  | _        d | _        d | _        | j                  j!                  dd«      | _        | j                  j!                  d«      | _        | j                  j!                  d«      | _        | j                  j!                  d«      | _        d| _        �n_|| j*                  dz   k7  rd|› �}t-        |«      ‚| j/                  «        | j                  r0| j                  j1                  | j                  | j(                  «       | j                  j3                  «       | _        | j                  | _        | j                  r1t5        j6                  | j                  | j                  «       d| _        d}	 | j                  j9                  d
«       	 | j                   j9                  «       \  }}}|dk(  rd}tA        |«      ‚|dk(  r|rd}t?        |«      ‚d	}	 | j                   jC                  |||«       Œ�| j                  €2| j$                  tL        jN                  k(  rtL        jP                  | _        d | _        | j$                  tL        jN                  k(  rX| j                  rK| j                  j3                  «       | _        | jS                  | j                  | j(                  «      | _        y y | j$                  tL        jP                  k(  retT        jV                  jY                  | jZ                  | j\                  «      | _        | jS                  | j                  | j(                  «      | _        y y # t:        j<                  t>        f$ r Y n–w xY w# tD        $ r Y n‡t@        $ r9 |dk(  r|d
z  }|r	|| _        Y njt5        j6                  | j                  |«       Y �Œ¨tF        $ r< tH        jK                  d|||«       t5        j6                  | j                  |«       Y �Œëw xY w|| _        | j                   j                  | _        | j                  j!                  d«      | _        | j                  j!                  d«      | _        | j                  j!                  d«      | _        | j                  r�Œ~d}tA        |«      ‚)Nr   ræ   Fr2  r4  rå   r	   zcannot seek to frame Tr#   rŠ   zNo more images in APNG fileó   fcTLzAPNG missing frame datarK  rJ  zimage not found in APNG frame)/rO  rL  rT   r\  rÑ   r[  rY  ÚimÚpyaccessrº   rË   r¾   rÌ   rM   Ú_prev_imÚdisposerV  ræ   Ú
dispose_opÚblend_opÚdispose_extentrM  r>   rb  ÚpasterÎ   r   r   rU   rv   rw   r[   rè   rr   ÚUnicodeDecodeErrorrP  rn   ro   r*   r0   r/   Ú_cropr
   ÚcoreÚfillÚmodeÚsize)rO   rc  rÑ   rB   Úframe_startr\   r]   r^   s           r3   r]  zPngImageFile._seekL  sù  € Ø�x‰xÐ#Ð#Ð#áØ�A‹:ÙØ—‘—‘˜dŸm™mÔ,Ø—‘—‘Ô!Ø&*×&8Ñ&8�Ô#Ø�”Ø—=’=Ø$(�D”MØ ŸH™H×,Ñ,�”	Ø ŸH™H×,Ñ,�”	ØŸ(™(�”Ø ˆDŒMØˆDŒLØ!%§¡§¡¨ÀÓ!FˆDÔØ"Ÿi™iŸm™m¨JÓ7ˆDŒOØ ŸI™IŸM™M¨'Ó2ˆDŒMØ"&§)¡)§-¡-°Ó"7ˆDÔØˆDŽLà˜Ÿ™ qÑ(Ò(Ø-¨e¨WÐ5�Ü  “oÐ%ð �I‰IŒKà�|Š|Ø—‘—‘˜dŸl™l¨D×,?Ñ,?Ô@Ø ŸG™GŸL™L›NˆDŒMà—h‘hˆDŒGð ×"Ò"Ü×$Ñ$ T§W¡W¨d×.AÑ.AÔBØ&'�Ô#ØˆKØØ—‘—‘˜Q”ðØ'+§x¡x§}¡}£Ñ$�C˜˜fð ˜'’>Ø7�CÜ" 3›-Ð'Ø˜'’>Ù"à7˜Ü)¨#Ó.Ð.Ø"&�Kð:Ø—H‘H—M‘M # s¨FÔ3ð' ðX �=‰=Ð  T§_¡_¼×8LÑ8LÒ%LÜ&×4Ñ4ˆDŒOàˆŒØ�?‰?œh×2Ñ2Ò2Ø�}Š}Ø#Ÿ}™}×1Ñ1Ó3�”Ø#Ÿz™z¨$¯,©,¸×8KÑ8KÓL�•ð ð �_‰_¤× 6Ñ 6Ò6Ü Ÿ:™:Ÿ?™?¨4¯9©9°d·i±iÓ@ˆDŒLØŸ:™: d§l¡l°D×4GÑ4GÓHˆD�Lð 7øô_ Ÿ™¤kÐ2ò Ùðûô *ò ÙÜò :Ø˜g’~Ø !™˜Ù&Ø28˜DÔ/Ù!Ü×(Ñ(¨¯©°&×9Ü%ò :Ü—L‘LÐ!5°s¸CÀÔHÜ×(Ñ(¨¯©°&×9ð:úð !ˆDŒLØŸ™×(Ñ(ˆDŒIØ"Ÿi™iŸm™m¨JÓ7ˆDŒOØ ŸI™IŸM™M¨'Ó2ˆDŒMØ"&§)¡)§-¡-°Ó"7ˆDÔà—9”9Ø5�Ü˜s“mÐ#s7   ÉO> Ê#P Ï>PÐPÐ	R,Ð(R,Ñ R,Ñ(A R,Ò+R,c                ó   — | j                   S rL   )rM  r`   s    r3   rV   zPngImageFile.tell­  s   € Ø�|‰|Ðr2   c                óÂ   — | j                   j                  d«      r| j                  dz   | _        | j                  | _        t
        j
                  j                  | «       y)z"internal: prepare to read PNG filerÝ   )r	   N)rË   rV  ÚdecoderconfigrY  Ú_PngImageFile__idatr   Úload_preparer`   s    r3   r�  zPngImageFile.load_prepare°  sH   € ð �9‰9�=‰=˜Ô%Ø!%×!3Ñ!3°dÑ!:ˆDÔà×)Ñ)ˆŒÜ×Ñ×(Ñ(¨Õ.r2   c                óH  — | j                   €J ‚| j                  dk(  r | j                  j                  d«       | j                   j                  «       \  }}}|dvr| j                   j	                  |||«       y|dk(  r)	 | j                   j                  |||«       |dz
  | _        n|| _        | j                  dk(  rŒ |dk  r| j                  }nt        || j                  «      }| j                  |z
  | _        | j                  j                  |«      S # t        $ r Y Œ„w xY w)zinternal: read more image datar   r#   )ó   IDATs   DDATrK  r2   rK  )rO  r€  rM   rU   rj   rr   rè   Úmin)rO   Ú
read_bytesr\   r]   r^   s        r3   Ú	load_readzPngImageFile.load_read¹  s  € ð �x‰xÐ#Ð#Ð#Ø�k‰k˜QÒð �G‰G�L‰L˜ŒOà#Ÿx™xŸ}™}›ÑˆC��fàÐ5Ñ5Ø—‘—‘˜c 3¨Ô/Øà�gŠ~ðØ—H‘H—M‘M # s¨FÔ3ð % q™j�•à$�”ð% �k‰k˜QÓð* ˜Š?ØŸ™‰Jä˜Z¨¯©Ó5ˆJà—k‘k JÑ.ˆŒà�w‰w�|‰|˜JÓ'Ð'øô  ò Ùðús   Á?D Ä	D!Ä D!c                ó:  — | j                   €J ‚| j                  dk7  r%| j                  j                  | j                  «       	 | j                  j                  d«       	 | j                   j                  «       \  }}}|dk(  rnU|dk(  r1| j                  r%d| _        | j                   j                  |||«       n	 | j                   j                  |||«       Œ•| j                   j.                  | _        | j                  s"| j                   j3                  «        d| _         y| j4                  ré| j6                  t8        j:                  k(  rË| j=                  | j>                  | j@                  «      }| j>                  jB                  dk(  r.d| jD                  v r |jG                  d| jD                  d   «      }n|jI                  d«      }| j4                  jK                  || j@                  |«       | j4                  | _        | jL                  rd| _&        yyyy# t        j
                  t        f$ r Y �Œ[w xY w# t        $ r Y �Œkt        $ rZ |dk(  r|dz  }	 t        j                  | j                  |«       n*# t        $ r}t        j                   rY d}~Y �Œ¿|‚d}~ww xY wY �ŒÍt"        $ rm t$        j'                  d|||«       t        j                  | j                  |«      }|d	d
 j)                  «       r| j*                  j-                  ||df«       Y �ŒAw xY w)z%internal: finished reading image dataNr   Tr#   rŠ   rm  rK  rJ  r	   r"   r   rð   r!   )'rO  r€  rM   rU   rv   rw   r[   r^  rY  rj   rr   rv  rè   r   r   r~   rY   rP  rn   ro   rQ  rN  rh   r»   rT  rc   rp  rs  r5   r7   rw  rn  rt  rz  rË   Úconvert_transparentÚconvertru  ro  )rO   r\   r]   r^   rz   r?   ÚupdatedÚmasks           r3   Úload_endzPngImageFile.load_endÛ  sŒ  € à�x‰xÐ#Ð#Ð#Ø�;‰;˜!ÒØ�G‰G�L‰L˜Ÿ™Ô%ØØ�G‰G�L‰L˜ŒOðØ#'§8¡8§=¡=£?Ñ ��S˜&ð �gŠ~ØØ˜’ D×$4Ò$4à&'�Ô#Ø—‘—‘˜c 3¨Ô/Øð?Ø—‘—‘˜c 3¨Ô/ð# ðF —X‘X×%Ñ%ˆŒ
Ø×ÒØ�H‰H�N‰NÔØˆD�Hà�}Š} §¡´%·-±-Ò!?ØŸ*™* T§W¡W¨d×.AÑ.AÓB�Ø—7‘7—<‘< 5Ò(¨^¸t¿y¹yÑ-HØ"×6Ñ6Ø §	¡	¨.Ñ 9ó‘Dð #Ÿ?™?¨6Ó2�DØ—‘×#Ñ# G¨T×-@Ñ-@À$ÔGØŸ-™-�”Ø—=’=Ø$(�D•Mð !ð "@ˆ}øôG —L‘L¤+Ð.ò Úðûô &ò ÚÜò 	 Ø˜'’>Ø˜a‘K�Fð Ü×(Ñ(¨¯©°&Õ9øÜò  Ü ×6Ò6Þà˜ûð	 úò :ô "ò ?Ü—‘Ð1°3¸¸VÔDÜ×(Ñ(¨¯©°&Ó9�Ø�q˜�8×#Ñ#Ô%Ø×'Ñ'×.Ñ.°°Q¸¨~Ô>úð	?úsa   Á H Â;H8 ÈH5È4H5È8	LÉLÉ I8É7LÉ8	JÊJÊLÊJÊJÊLÊ%A1LÌLc                ó´   — d| j                   vr| j                  «        d| j                   vrd| j                   vry | j                  «       j                  «       S )Nr  zRaw profile type exif)rË   rb  ÚgetexifÚ_get_merged_dictr`   s    r3   Ú_getexifzPngImageFile._getexif  sG   € Ø˜Ÿ™Ñ"Ø�I‰IŒKØ˜Ÿ™Ñ"Ð'>ÀdÇiÁiÑ'OØØ�|‰|‹~×.Ñ.Ó0Ð0r2   c                ó\   •— d| j                   vr| j                  «        t        ‰| �  «       S )Nr  )rË   rb  r¹   rŽ  )rO   rÅ   s    €r3   rŽ  zPngImageFile.getexif  s%   ø€ Ø˜Ÿ™Ñ"Ø�I‰IŒKä‰w‰Ó Ð r2   r‡   )rc  r‰   r„   r…   r±   )rc  r‰   rÑ   r²   r„   r…   )r„   r‰   )r…  r‰   r„   rˆ   )r„   zdict[str, Any] | None)r„   z
Image.Exif)r+   r,   r-   ÚformatÚformat_descriptionr`  Úpropertyr“   r‚   rT   r]  rV   r�  r†  rŒ  r�  rŽ  r@  rA  s   @r3   rG  rG  Õ  s`   ø„ Ø€FØ4ÐóA-ðF ñó ðóó$+ô_IóBó/ó (óD8)ót1÷!ñ !r2   rG  )r   ó   r£   )úL;1r•  r£   )r   ó   r£   )r   ó   r£   )r   ó   r£   )r    r™  r˜  )r   ó   r£   )r   r•  ó   )r   r—  r›  )r   r˜  r›  )r   r™  r›  )r   r™  r—  )r!   r™  ó   )r   r–  r   r   r   r    ÚIr   r   r   r   r   r   r   r!   c                óò   — dj                  |«      }| j                  t        t        |«      «      |z   «       | j                  |«       t	        |t	        |«      «      }| j                  t        |«      «       y)z'Write a PNG chunk (including CRC field)r2   N)ÚjoinÚwriteÚo32r   rH   ©rM   r\   rF   r{   s       r3   Úputchunkr£  :  sU   € ð �8‰8�D‹>€Dà‡H�HŒS”�T“‹^˜cÑ!Ô"Ø‡H�HˆT„NÜ
�”v˜c“{Ó
#€CØ‡H�HŒS�‹XÕr2   c                  ó   — e Zd Zd„ Zdd„Zy)Ú_idatc                ó    — || _         || _        y rL   )rM   Úchunk)rO   rM   r§  s      r3   rP   z_idat.__init__H  s   € ØˆŒØˆ�
r2   c                ó>   — | j                  | j                  d|«       y )Nrƒ  )r§  rM   ©rO   rF   s     r3   r   z_idat.writeL  s   € Ø�
‰
�4—7‘7˜G TÕ*r2   N©rF   rˆ   r„   r…   ©r+   r,   r-   rP   r   r1   r2   r3   r¥  r¥  E  s   „ òô+r2   r¥  c                  ó   — e Zd Zd„ Zdd„Zy)Ú_fdatc                ó.   — || _         || _        || _        y rL   )rM   r§  rÍ   )rO   rM   r§  rÍ   s       r3   rP   z_fdat.__init__S  s   € ØˆŒØˆŒ
Øˆ�r2   c                ó�   — | j                  | j                  dt        | j                  «      |«       | xj                  dz  c_        y )NrK  r	   )r§  rM   r¡  rÍ   r©  s     r3   r   z_fdat.writeX  s/   € Ø�
‰
�4—7‘7˜G¤S¨¯©Ó%6¸Ô=Ø�Š˜ÑŽr2   Nrª  r«  r1   r2   r3   r­  r­  P  s   „ òô
r2   r­  c                ó¦  — | j                   j                  d«      }| j                   j                  d| j                  j                  dd«      «      }| j                   j                  d| j                  j                  dt        j                  «      «      }	| j                   j                  d| j                  j                  dt
        j                  «      «      }
|rt        j                  |«      }nt        j                  | g|«      }g }d}|D �]š  }t        j                  |«      D �]~  }|j                  |k(  r|j                  «       }n|j                  |«      }| j                   j                  «       }t        |t        t         f«      r	||   |d<   n"|€ d|j                  v r|j                  d   |d<   t        |	t        t         f«      r|	|   |d<   t        |
t        t         f«      r|
|   |d<   |dz  }|�r”|d   }|d   j                  d«      }|d   j                  d«      }|t        j"                  k(  rt%        |«      d	k  rt        j&                  }|t        j&                  k(  ry|d
   j                  «       }t(        j*                  j-                  d| j.                  d«      }|d   }|r|j1                  |«      }nd| j.                  z   }|j3                  ||«       n!|t        j"                  k(  r	|d   d
   }n|d
   }t5        j6                  |j                  d«      |j                  d«      «      }|j9                  d¬«      }|sC||j                  d«      k(  r/||j                  d«      k(  rd|v r|d   dxx   |d   z  cc<   �Œhd }|j;                  |||dœ«       �Œ� �Œ� t%        |«      dk(  r
|s|d   d
   S  ||dt=        t%        |«      «      t=        |«      «       |rS| j                  |k7  r| j                  |«      } t?        j@                  | tC        ||«      dd| j.                  z   d|fg«       d}tE        |«      D �]�  \  }}|d
   }|d   sd|j.                  z   }n|d   }|j1                  |«      }|j.                  }|d   }tG        tI        |j                  dd«      «      «      }|j                  d|	«      }|j                  d|
«      } ||dt=        |«      t=        |d   «      t=        |d   «      t=        |d   «      t=        |d   «      tK        |«      tK        d«      tM        |«      tM        |«      «       |dz  }|dk(  r7|s5t?        j@                  |tC        ||«      dd|j.                  z   d|fg«       �Œ@tO        |||«      }t?        j@                  ||dd|j.                  z   d|fg«       |jP                  }�Œ„ y )Nr0  r$  r   r2  r4  r	   éÿÿÿÿÚencoderinfor"   rn  r!   )r   r   r   r   rå   r¸   éþÿÿÿF)Ú
alpha_only)rn  rå   r²  s   acTLr©   rm  r/  ))r²  rV  rË   r*   r.   r5   r6   Ú	itertoolsÚchainr   ÚIteratorrz  rÎ   r‰  r¤   Úlistr  r0   r   r/   r
   rx  ry  r{  Úcropru  r   Úsubtract_moduloÚgetbboxrh   r¡  r   Ú_saver¥  Ú	enumerater‰   ÚroundÚo16r   r­  rÍ   ) rn  rM   r§  rz  r_  ræ   Úappend_imagesr0  r$  r2  r4  r¶  Ú	im_framesÚframe_countÚim_seqÚim_framer²  ÚpreviousÚprev_disposalÚ
prev_blendÚbase_imrq  rå   ÚdeltarÍ   rc  Ú
frame_datar{  Úframe_durationÚframe_disposalÚframe_blendÚfdat_chunkss                                    r3   Ú_write_multiple_framesrÏ  ]  sS  € Ø�~‰~×!Ñ! *Ó-€HØ�>‰>×Ñ˜f b§g¡g§k¡k°&¸!Ó&<Ó=€DØ�~‰~×!Ñ! *¨b¯g©g¯k©k¸*Äh×FVÑFVÓ.WÓX€HØ�N‰N×Ñ˜w¨¯©¯©°G¼U¿_¹_Ó(MÓN€EáÜ—‘ Ó.‰ä—‘   mÓ4ˆà€IØ€KØó 3YˆÜ%×.Ñ.¨vÓ6ó 2	YˆHØ�}‰} Ò$Ø#Ÿ=™=›?‘à#×+Ñ+¨DÓ1�ØŸ.™.×-Ñ-Ó/ˆKÜ˜(¤T¬5 MÔ2Ø*2°;Ñ*?�˜JÒ'ØÐ! j°H·M±MÑ&AØ*2¯-©-¸
Ñ*C�˜JÑ'Ü˜(¤T¬5 MÔ2Ø*2°;Ñ*?�˜JÑ'Ü˜%¤$¬ Ô/Ø',¨[Ñ'9�˜GÑ$Ø˜1ÑˆKâØ$ R™=�Ø (¨Ñ 7× ;Ñ ;¸JÓ G�Ø% mÑ4×8Ñ8¸ÓA�
Ø ¤H×$8Ñ$8Ò8¼SÀ»^ÈaÒ=OÜ$,×$:Ñ$:�Mà ¤H×$:Ñ$:Ò:Ø& t™n×1Ñ1Ó3�GÜ#Ÿj™jŸo™o¨f°b·g±g¸|ÓL�GØ# FÑ+�DÙØ")§,¡,¨tÓ"4™à%¨¯©Ñ/˜Ø—M‘M '¨4Õ0Ø"¤h×&:Ñ&:Ò:Ø'¨™m¨DÑ1‘Gà& t™n�GÜ"×2Ñ2Ø×$Ñ$ VÓ,¨g¯o©o¸fÓ.Eó�ð —}‘}°�}Ó6�áØ%¨¯©¸Ó)DÒDØ" k§o¡o°gÓ&>Ò>Ø" kÑ1à˜]Ñ+¨JÓ7¸;ÀzÑ;RÑRÓ7Ùà�Ø×Ñ H°dÈ;ÑWÖXòe2	Yð3Yôj ˆ9ƒ~˜Ò¡=Ø˜‰|˜DÑ!Ð!ñ 
Ø
ØÜŒC�	‹NÓÜˆD‹	ô	ñ Ø�7‰7�dŠ?Ø—‘˜DÓ!ˆBÜ�‰˜œE " eÓ,°°vÀÇÁÑ7GÈÈGÐ/TÐ.UÔVà€GÜ& yÓ1ó **ÑˆˆzØ˜dÑ#ˆØ˜&Ò!Ø˜HŸM™MÑ)‰Dà˜fÑ%ˆDØ—}‘} TÓ*ˆHØ�}‰}ˆØ  Ñ/ˆÜœU ;§?¡?°:¸qÓ#AÓBÓCˆØ$Ÿ™¨°XÓ>ˆØ!—o‘o g¨uÓ5ˆáØØÜ�‹LÜ��Q‘‹LÜ��Q‘‹LÜ��Q‘‹LÜ��Q‘‹LÜ�ÓÜ�‹IÜˆ~ÓÜˆ{‹Oô	
ð 	�1‰ˆà�AŠ:™mä�O‰OØÜ�b˜%Ó Ø˜ (§-¡-Ñ/°°GÐ<Ð=öô    E¨7Ó3ˆKÜ�O‰OØØØ˜ (§-¡-Ñ/°°GÐ<Ð=ôð
 "×)Ñ)ŠGñU**r2   c                ó"   — t        | ||d¬«       y )NT)Úsave_all)r¼  )rn  rM   Úfilenames      r3   Ú	_save_allrÓ  Þ  s   € Ü	ˆ"ˆb�( TÖ*r2   Fc                óÄ  ‡'— |�r| j                   j                  d| j                  j                  d«      «      }t        «       }t        «       Š'| j                   j                  dg «      }t	        j
                  | g|«      D ]R  }t        j                  |«      D ]8  }	|j                  |	j                  «       ‰'j                  |	j                  «       Œ: ŒT dD ]  }
|
|v sŒ n |j                  «       }
t        ˆ'fd„t        d«      D «       «      }n| j                  }| j                  }
|
}|
dk(  r–d| j                   v rt        d| j                   d   z  d	«      }nL| j                  r>t!        t        t#        | j                  j%                  «       d   «      d
z  d	«      d«      }nd	}|dk  r|dk  rd}n
|dk  rd}nd}|d|› �z  }| j                   j                  dd«      | j                   j                  dd«      | j                   j                  dd«      | j                   j                  dd«      f| _        	 t(        |   \  }}}|j/                  t0        «        ||dt3        |d   «      t3        |d   «      ||ddd«	       g d¢}| j                   j                  d| j                  j                  d«      «      }|r8d}|dz   t5        j6                  |«      z   } ||d|«       |j9                  d«       | j                   j                  d «      }|r‚g d!¢}|j:                  D ]o  }|d d \  }}||v r|j9                  |«        ||||«       Œ+||v r ||||«       Œ:|dd j=                  «       sŒNt#        |«      d
k(  xr |d   }|rŒf ||||«       Œq | j                  dk(  rOd
z  }| j>                  jA                  d"«      d | }t#        |«      |k  r|dz  }t#        |«      |k  rŒ ||d#|«       | j                   j                  d$| j                  j                  d$d «      «      }|s|dk(  rð| j                  dk(  rM} tC        |tD        «      r ||d%|d |  «       �nt!        dt        d&|«      «      }d'|z  dz   }! ||d%|!d |  «       në| j                  d(v r*t!        dt        d)|«      «      } ||d%tG        |«      «       n³| j                  d"k(  r2|\  }"}#}$ ||d%tG        |"«      tG        |#«      z   tG        |$«      z   «       nrd$| j                   v rdd*}t-        |«      ‚| j                  dk(  rH| j>                  jI                  «       d+k(  r+| j>                  jA                  d+d,«      }!}  ||d%|!d |  «       | j                   j                  d-«      }%|%rB ||d.t3        tK        |%d   d/z  d0z   «      «      t3        tK        |%d   d/z  d0z   «      «      d1«       |r=d2d3g}|j:                  D ]*  }|d d \  }}||v sŒ|j9                  |«        ||||«       Œ, | j                   j                  d4«      }&|&rKtC        |&tL        jN                  «      r|&jQ                  d5«      }&|&jS                  d6«      r|&d7d  }& ||d8|&«       |rtU        | |||
|«      } | r3tW        jX                  | t[        ||«      d9d:| j                  z   d|fg«       |rO|j:                  D ]@  }|d d \  }}|dd j=                  «       sŒt#        |«      d
k(  xr |d   }|sŒ7 ||||«       ŒB  ||d;d«       t]        |d<«      r|j_                  «        y y # t*        $ r}d|
› d�}t-        |«      |‚d }~ww xY w)=Nræ   rÀ  )r!   r   r   c              3  óH   •‡K  — | ]  Št        ˆfd „‰D «       «      –— Œ y­w)c              3  ó(   •K  — | ]	  }|‰   –— Œ y ­wrL   r1   )rû   Ú
frame_sizerÖ   s     €r3   rý   z"_save.<locals>.<genexpr>.<genexpr>õ  s   øè ø€ Ò?¨:˜ A�Ñ?ùs   ƒN)Úmax)rû   rÖ   Úsizess    @€r3   rý   z_save.<locals>.<genexpr>õ  s   ùè ø€ ÒRÀA”SÓ?¸Ô?×?ÑRùs   „"r"   r   Úbitsr	   é   r&   r%   r#   ú;ÚoptimizeFÚcompress_levelr±  Úcompress_typeÚ
dictionaryr2   zcannot write mode z as PNGs   IHDRr   r£   )s   cHRMs   gAMAs   sBITó   sRGBs   tIMErÔ   s   ICC Profiler­   s   iCCPrá  Úpnginfo)s   sPLTr¢   r®   r¬   r   s   PLTErð   s   tRNSéÿ   ó   ÿ)r   r   r�  r   iÿÿ  z%cannot use transparency for this moder!   ÚAr	  s   pHYsr  g      à?r•  s   bKGDs   hISTr  r$   r!  r'   s   eXIfr©   r¸   rŠ   Úflush)0r²  rV  rË   Úsetrµ  r¶  r   r·  r�   rz  r{  rS   r  ri  r„  rX  rØ  r   ÚgetdataÚencoderconfigÚ	_OUTMODESÚKeyErrorr~   r   rC  r¡  r9   r¦   Úremoverš   rQ  rn  Ú
getpaletter¤   rˆ   r¿  Úgetpalettemoder‰   r
   ÚExifÚtobytesÚ
startswithrÏ  r   r¼  r¥  Úhasattrræ  )(rn  rM   rÒ  r§  rÑ  ræ   ÚmodesrÀ  rÃ  rÄ  rz  r{  ÚoutmodeÚcolorsrÚ  r_  Ú	bit_depthÚ
color_typerz   rB   rš   ÚiccÚnamerF   rË   Úchunks_multiple_allowedÚ
info_chunkr\   rœ   Úpalette_byte_numberÚpalette_bytesrð   Úalpha_bytesÚalphaÚredÚgreenÚbluer	  r  rÙ  s(                                          @r3   r¼  r¼  â  s0  ø€ ò ØŸ™×*Ñ*Ø˜RŸW™WŸ[™[¨Ó9ó
ˆô “ˆÜ“ˆØŸ™×*Ñ*¨?¸BÓ?ˆÜ—o‘o r d¨MÓ:ò 	)ˆFÜ)×2Ñ2°6Ó:ò )�Ø—	‘	˜(Ÿ-™-Ô(Ø—	‘	˜(Ÿ-™-Õ(ñ)ð	)ð )ò 	ˆDØ�uŠ}Ùð	ð —9‘9“;ˆDÜÓRÌÈqËÔRÓR‰à�w‰wˆØ�w‰wˆà€GØˆs‚{ð �R—^‘^Ñ#ä˜˜bŸn™n¨VÑ4Ñ4°cÓ:‰Fð �zŠzÜœS¤ R§Z¡Z×%7Ñ%7Ó%9¸!Ñ%<Ó!=ÀÑ!BÀCÓHÈ!ÓL‘à�à�RŠ<Ø˜Š{Ø‘Ø˜1’Ø‘à�Ø˜˜4˜&�zÑ!ˆGð 	�‰×Ñ˜: uÓ-Ø
�‰×ÑÐ+¨RÓ0Ø
�‰×Ñ˜?¨BÓ/Ø
�‰×Ñ˜<¨Ó-ð	€BÔð"Ü)2°7Ñ);Ñ&ˆ�˜Jð ‡H�HŒVÔá	Ø
ØÜˆD�‰G‹ÜˆD�‰G‹ØØØØØô
ò ;€Fà
�.‰.×
Ñ
˜]¨B¯G©G¯K©K¸Ó,FÓ
G€CÙ
ð ˆØ�g‰~¤§¡¨cÓ 2Ñ2ˆÙˆb�'˜4Ô ð 	�‰�gÔà�>‰>×Ñ˜iÓ(€DÙÚ"FÐØŸ+™+ò 	)ˆJØ" 2 A˜‰IˆC�Ø�f‰}Ø—‘˜cÔ"Ù�b˜#˜tÕ$ØÐ/Ñ/Ù�b˜#˜tÕ$Ø�Q�q�×!Ñ!Õ#ä  ›_°Ñ1ÒC°jÀ±m�
Ú!Ù˜"˜c 4Õ(ð	)ð 
‡w�w�#‚~Ø$ q™jÐØŸ™×(Ñ(¨Ó/Ð0DÐ1DÐEˆÜ�-Ó Ð#6Ò6Ø˜UÑ"ˆMô �-Ó Ð#6Ó6áˆb�'˜=Ô)à—>‘>×%Ñ% n°b·g±g·k±kÀ.ÐRVÓ6WÓX€Lá�| qÒ(Ø�7‰7�cŠ>à ˆKÜ˜,¬Ô.Ù�b˜' <°°Ð#=Ö>ä" 1¤c¨#¨|Ó&<Ó=�Ø ,Ñ.°Ñ6�Ù�b˜' 5¨¨+Ð#6Õ7Ø�W‰WÐ/Ñ/Ü˜q¤# e¨\Ó":Ó;ˆLÙ�"�gœs <Ó0Õ1Ø�W‰W˜ÒØ+ÑˆC�˜Ù�"�gœs 3›x¬#¨e«*Ñ4´s¸4³yÑ@ÕAà §¡Ñ/ð >�Ü˜c“lÐ"à�7‰7�cŠ>˜bŸe™e×2Ñ2Ó4¸Ò>Ø—E‘E×$Ñ$ V¨SÓ1ˆEØ ˆKÙ�"�g˜u \ kÐ2Ô3à
�.‰.×
Ñ
˜UÓ
#€CÙ
ÙØØÜ”�C˜‘F˜V‘O cÑ)Ó*Ó+Ü”�C˜‘F˜V‘O cÑ)Ó*Ó+Øô	
ñ Ø˜7Ð#ˆØŸ+™+ò 	%ˆJØ" 2 A˜‰IˆC�Ø�fŠ}Ø—‘˜cÔ"Ù�b˜#˜tÕ$ð		%ð �>‰>×Ñ˜fÓ%€DÙÜ�dœEŸJ™JÔ'Ø—<‘< “?ˆDØ�?‰?˜?Ô+Ø˜˜�8ˆDÙˆb�'˜4Ô áÜ#Ø��E˜4 ¨-¸ó
ˆñ 
Ü�‰˜œE " eÓ,°°vÀÇÁÑ7GÈÈGÐ/TÐ.UÔVáØŸ+™+ò 	)ˆJØ" 2 A˜‰IˆC�Ø�1�Qˆx×ÑÕ!ä  ›_°Ñ1ÒC°jÀ±m�
ÚÙ˜"˜c 4Õ(ð	)ñ 
ˆ"ˆg�sÔäˆr�7ÔØ
�‰�
ð øôQ ò "Ø" 4 &¨Ð0ˆÜ�c‹l Ð!ûð"ús   È:\? Ü?	]Ý]Ý]c                ó€   —  G d„ d«      }d„ } |«       }	 || _         t        | |d|«       | ` |j                  S # | ` w xY w)z4Return a list of PNG chunks representing this image.c                  ó    — e Zd Zg Zdd„Zdd„Zy)úgetchunks.<locals>.collectorc                 ó   — y rL   r1   r©  s     r3   r   z"getchunks.<locals>.collector.write²  s   € Ør2   c                ó:   — | j                   j                  |«       y rL   )rF   rh   )rO   r§  s     r3   rh   z#getchunks.<locals>.collector.appendµ  s   € Ø�I‰I×Ñ˜UÕ#r2   Nrª  )r§  rˆ   r„   r…   )r+   r,   r-   rF   r   rh   r1   r2   r3   Ú	collectorr  ¯  s   „ Øˆó	ô	$r2   r  c                óŠ   — dj                  |«      }t        t        |t        |«      «      «      }| j                  |||f«       y )Nr2   )rŸ  r¡  rH   rh   r¢  s       r3   rh   zgetchunks.<locals>.append¸  s7   € Ø�x‰x˜‹~ˆÜ”&˜œv c›{Ó+Ó,ˆØ
�	‰	�3˜˜cÐ"Õ#r2   N)r²  r¼  rF   )rn  Úparamsr  rh   rM   s        r3   Ú	getchunksr  ¬  sK   € ÷$ñ $ò$ñ
 
‹€BðØˆŒÜˆb�"�d˜FÔ#àˆNà�7‰7€Nøð ‰Nús   –9 ¹=z.pngz.apngz	image/png)r   )rD  rˆ   r„   r²   )rn  zImage.ImagerM   rƒ   rÒ  r´   r„   r…   )EÚ
__future__r   rµ  ÚloggingÚrerv   r%  r9   Úenumr   Útypingr   r   r   r   r³   r
   r   r   r   r   Ú_binaryr   ró   r   rW   r   r   r¿  r   r¡  r   Ú	getLoggerr+   rn   Úcompilerò   rX   rC  rß   rñ   Ú	SAFEBLOCKr<   rÇ   r*   r5   rC   rH   rJ   r�   rŒ   r˜   r¶   rE  rG  rê  r£  r¥  r­  rÏ  rÓ  r¼  r  Úregister_openr’  Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer1   r2   r3   ú<module>r     s:  ðõB #ã Û Û 	Û Û Û Ý ß 3Ó 3ç GÕ GÝ !Ý !Ý Ý !Ý !áÝà	ˆ×	Ñ	˜8Ó	$€à	ˆ�‰�LÓ	!×	'Ñ	'€ð 
€ð ØØØØàØàØØØàØàØ!ñ+
€ð2 �"—*‘*Ð0Ó1€à×$Ñ$€ðð
 �~Ñ%€ðôˆwô ô*ˆGô òó/÷Zñ Zôzˆ3ô ÷2Y3ñ Y3ô@U4�ô U4óx
 ôK!�9×&Ñ&ô K!ðf
 
!Ø$Ø$Ø$Ø	 Ø
"Ø	$Ø'Ø(Ø$Ø$Ø$Ø	 Ø$Ø&ñ!€	ò(÷+ñ +÷
ñ 
ò~*óB+ð #+°Uó CòTð> €× Ñ �L×'Ñ'¨°wÔ ?Ø €× Ñ �L×'Ñ'¨Ô /Ø €× Ñ ˜×+Ñ+¨YÔ 7à €× Ñ ˜,×-Ñ-°¸Ð/@Ô Aà €× Ñ �L×'Ñ'¨Õ 5r2   