Ë
    ™2Úi‘´  ã                   ó¼  — 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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j0                  e«      Z ej6                  d
«      j8                  ZdZddddddddddddddddœZ ej6                  d«      Z ejB                  Z"	 de"z  Z#	  G d„ de«      Z$ G d „ d!e«      Z%d"„ Z&dJd#„Z' G d$„ d%«      Z( G d&„ d'e)«      Z* G d(„ d)«      Z+ G d*„ d+e(«      Z,d,„ Z- G d-„ d.ej                  «      Z.d/d0d1d2d3d4d5d5d5d6d7d8d9d:d;d<œZ/d=„ Z0 G d>„ d?«      Z1 G d@„ dA«      Z2dB„ Z3dC„ Z4e0dDfdE„Z5dF„ Z6 e	jn                  e.jp                  e.e-«        e	jr                  e.jp                  e5«        e	jt                  e.jp                  e4«        e	jv                  e.jp                  dGdHg«        e	jx                  e.jp                  dI«       y)Ké    N)ÚIntEnumé   )ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16be)Úi32be)Úo8)Úo16be)Úo32bes   \w\w\w\ws   ‰PNG

)Ú1r   )ÚLúL;2)r   úL;4)r   r   )ÚIú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© ó    úI/var/www/html/acx/venv/lib/python3.12/site-packages/PIL/PngImagePlugin.pyr$   r$   b   s$   „ Ø€Gðð €Mðð
 €Kðr,   r$   c                   ó   — e Zd ZdZ	 dZy)ÚBlendr   r   N)r%   r&   r'   Ú	OP_SOURCEÚOP_OVERr+   r,   r-   r/   r/   w   s   „ Ø€Iðð
 €Gðr,   r/   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       r-   Ú_safe_zlib_decompressr=   …   s>   € Ü×ÑÓ€DØ—‘ ¤>Ó2€IØ×ÒØ+ˆÜ˜‹oÐØÐr,   c                 ó4   — t        j                  | |«      dz  S )Nl   ÿÿ )r3   Úcrc32)ÚdataÚseeds     r-   Ú_crc32rB   Ž   s   € Ü�:‰:�d˜DÓ! JÑ.Ð.r,   c                   óJ   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zdd
„Zy)ÚChunkStreamc                 ó    — || _         g | _        y ©N)ÚfpÚqueue)ÚselfrG   s     r-   Ú__init__zChunkStream.__init__—   s   € ØˆŒØˆ�
r,   c                 ó�  — d}| 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 ú))rH   ÚpoprG   ÚseekÚreadÚtellÚi32Úis_cidr   ÚLOAD_TRUNCATED_IMAGESÚreprÚSyntaxError)rI   ÚcidÚposÚlengthr9   r<   s         r-   rO   zChunkStream.read›   s£   € àˆà�:Š:Ø#Ÿz™zŸ~™~Ó/ÑˆC��fØ�G‰G�L‰L˜Õà—‘—‘˜Q“ˆAØ�A�B�%ˆCØ—'‘'—,‘,“.ˆCÜ˜“VˆFä�cŒ{Ü×2Ò2Ø/´°S³	¨{¸!Ð<�Ü! #Ó&Ð&à�C˜ÐÐr,   c                 ó   — | S rF   r+   ©rI   s    r-   Ú	__enter__zChunkStream.__enter__¯   s   € Øˆr,   c                 ó$   — | j                  «        y rF   )Úclose)rI   Úargss     r-   Ú__exit__zChunkStream.__exit__²   s   € Ø�
‰
�r,   c                 ó    — d x| _         | _        y rF   )rH   rG   rZ   s    r-   r]   zChunkStream.closeµ   s   € Ø#Ð#ˆŒ
�T•Wr,   c                 ó@   — | j                   j                  |||f«       y rF   )rH   Úappend©rI   rV   rW   rX   s       r-   ÚpushzChunkStream.push¸   s   € Ø�
‰
×Ñ˜3  VÐ,Õ-r,   c                 ó|   — t         j                  d|||«        t        | d|j                  d«      z   «      ||«      S )z"Call the appropriate chunk handlerzSTREAM %r %s %sÚchunk_Úascii)ÚloggerÚdebugÚgetattrÚdecoderc   s       r-   ÚcallzChunkStream.call»   s;   € ô 	�‰Ð&¨¨S°&Ô9Ø<Œw�t˜X¨¯
©
°7Ó(;Ñ;Ó<¸SÀ&ÓIÐIr,   c                 ó~  — t         j                  r|d   dz	  dz  r| j                  ||«       y	 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 rL   z(broken PNG file (incomplete checksum in )r   rS   Úcrc_skiprB   rQ   rG   rO   rT   rU   ÚstructÚerror)rI   rV   r@   Úcrc1Úcrc2r<   Úes          r-   ÚcrczChunkStream.crcÁ   sµ   € ô ×*Ò*°°A±¸!±¸a²Ø�M‰M˜#˜tÔ$Øð	*Ü˜$¤ s£Ó,ˆDÜ�t—w‘w—|‘| A“Ó'ˆDØ�tŠ|Ø@ÄÀcÃÀÈ1ÐM�Ü! #Ó&Ð&ð øô �|‰|ò 	*Ø<¼TÀ#»Y¸KÀqÐIˆCÜ˜cÓ"¨Ð)ûð	*ús   °AB	 Â	B<ÂB7Â7B<c                 ó:   — | j                   j                  d«       y)zRead checksumr   N)rG   rO   )rI   rV   r@   s      r-   ro   zChunkStream.crc_skipÕ   s   € ð 	�‰�‰�Q�r,   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)	rO   rp   rq   ÚOSErrorru   r   Ú
_safe_readrG   rb   )rI   ÚendchunkÚcidsrV   rW   rX   rt   r<   s           r-   Ú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)ó   IEND)r%   r&   r'   rJ   rO   r[   r_   r]   rd   rl   ru   ro   r|   r+   r,   r-   rD   rD   –   s5   „ òò ò(òò$ò.òJò*ò(ô
r,   rD   c                   ó"   — e Zd ZdZedd„«       Zy)ÚiTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    Nc                 ó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__ÚlangÚtkey)ÚclsÚtextrƒ   r„   rI   s        r-   r‚   ziTXt.__new__ö   s'   € ô �{‰{˜3 Ó%ˆØˆŒ	ØˆŒ	Øˆr,   )NN)r%   r&   r'   Ú__doc__Ústaticmethodr‚   r+   r,   r-   r   r   ï   s   „ ñð òó ñr,   r   c                   ó.   — e Zd ZdZd„ Zdd„Zdd„Zdd„Zy)	ÚPngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    c                 ó   — g | _         y rF   )ÚchunksrZ   s    r-   rJ   zPngInfo.__init__  s	   € Øˆ�r,   c                 óz   — ||g}|r|j                  d«       | j                  j                  t        |«      «       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

        TN)rb   rŒ   Útuple)rI   rV   r@   Ú
after_idatÚchunks        r-   ÚaddzPngInfo.add  s2   € ð �d�ˆÙØ�L‰L˜ÔØ�‰×Ñœ5 ›<Õ(r,   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)Ú
isinstanceÚbytesÚencoder‘   r3   Úcompress)rI   ÚkeyÚvaluerƒ   r„   Úzips         r-   Ú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ÕTr,   c                 óÔ  — t        |t        «      r*| j                  |||j                  |j                  |¬«      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

        )rž   r“   r”   ó   zTXtó     ó   tEXtr—   N)r˜   r   rŸ   rƒ   r„   r™   rš   ÚUnicodeErrorr‘   r3   r›   )rI   rœ   r�   rž   s       r-   Úadd_textzPngInfo.add_text9  sÌ   € ô �eœTÔ"Ø—=‘=  e¨U¯Z©Z¸¿¹È�=ÓMÐMô ˜%¤Ô'ð:ØŸ™ 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 ÃC'Ã&C'N©F)Ú r§   F)r%   r&   r'   r‡   rJ   r‘   rŸ   r¥   r+   r,   r-   rŠ   rŠ     s   „ ñò
ó)óUô83r,   rŠ   c                   ó–   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )Ú	PngStreamc                 ó¾   •— t         ‰| �  |«       i | _        i | _        d| _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d| _        y )N©r   r   r   )ÚsuperrJ   Úim_infoÚim_textÚim_sizeÚim_modeÚim_tileÚ
im_paletteÚim_custom_mimetypeÚim_n_framesÚ_seq_numÚrewind_stateÚtext_memory)rI   rG   Ú	__class__s     €r-   rJ   zPngStream.__init__Z  sc   ø€ Ü‰Ñ˜Ôð ˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØ"&ˆÔØˆÔØˆŒØ ˆÔàˆÕr,   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_MEMORYr8   )rI   Úchunklenr<   s      r-   Úcheck_text_memoryzPngStream.check_text_memoryk  sN   € Ø×Ò˜HÑ$ÕØ×ÑœoÒ-à7Ø×#Ñ#Ð$Ð$4ð6ð ô ˜S“/Ð!ð .r,   c                 ór   — | j                   j                  «       | j                  | j                  dœ| _        y )N)ÚinfoÚtileÚseq_num)r­   Úcopyr±   rµ   r¶   rZ   s    r-   Úsave_rewindzPngStream.save_rewindt  s*   € à—L‘L×%Ñ%Ó'Ø—L‘LØ—}‘}ñ
ˆÕr,   c                 ó|   — | j                   d   | _        | j                   d   | _        | j                   d   | _        y )Nr¾   r¿   rÀ   )r¶   r­   r±   rµ   rZ   s    r-   ÚrewindzPngStream.rewind{  s8   € Ø×(Ñ(¨Ñ0ˆŒØ×(Ñ(¨Ñ0ˆŒØ×)Ñ)¨)Ñ4ˆ�r,   c                 ó¶  — t        j                  | j                  |«      }|j                  d«      }t        j                  d|d | «       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 %rzCompression method %sr   úUnknown compression method z in iCCP chunkr   Úicc_profile)r   ry   rG   Úfindrh   ri   rU   r=   r8   rS   r3   rq   r­   )rI   rW   rX   r9   ÚiÚcomp_methodr<   rÇ   s           r-   Ú
chunk_iCCPzPngStream.chunk_iCCP€  sá   € ä× Ñ  §¡¨&Ó1ˆð �F‰F�5‹MˆÜ�‰Ð+¨Q¨r°¨UÔ3Ü�‰Ð,¨a°©dÔ3Ø˜‘dˆØ˜!ÒØ/°¨}¸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   ry   rG   rS   r8   rQ   r¯   Ú_MODESr°   Ú
im_rawmodeÚ	Exceptionr­   rU   ©rI   rW   rX   r9   r<   s        r-   Ú
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}|| _        || _        t        ‚)NÚbboxrž   TÚdefault_imager«   )r­   rÓ   r´   r¯   r±   Úim_idatÚEOFError)rI   rW   rX   r¿   s       r-   Ú
chunk_IDATzPngStream.chunk_IDAT¯  sw   € à�T—\‘\Ñ!Ø˜DŸL™L¨Ñ0°#°t·±ÐGÐH‰Dà×ÑÐ+Ø04�—‘˜_Ñ-Ø˜F T§\¡\Ñ1°3¸¿¹ÐHÐIˆDØˆŒØˆŒÜˆr,   c                 ó   — t         ‚rF   )rÛ   )rI   rW   rX   s      r-   Ú
chunk_IENDzPngStream.chunk_IEND»  s   € äˆr,   c                 óv   — t        j                  | j                  |«      }| j                  dk(  r	d|f| _        |S )Nr   r   )r   ry   rG   r°   r²   ©rI   rW   rX   r9   s       r-   Ú
chunk_PLTEzPngStream.chunk_PLTE¿  s4   € ä× Ñ  §¡¨&Ó1ˆØ�<‰<˜3ÒØ# Q˜hˆDŒOØˆr,   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   ry   rG   r°   Ú_simple_paletteÚmatchrÈ   r­   Úi16)rI   rW   rX   r9   rÉ   s        r-   Ú
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˜Ñ(Øˆr,   c                 ó|   — t        j                  | j                  |«      }t        |«      dz  | j                  d<   |S )Nç     jø@Úgamma)r   ry   rG   rQ   r­   rà   s       r-   Ú
chunk_gAMAzPngStream.chunk_gAMAÚ  s4   € ä× Ñ  §¡¨&Ó1ˆÜ # A£¨Ñ 1ˆ�‰�WÑØˆr,   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ê   Nr+   )Ú.0Úelts     r-   ú	<genexpr>z'PngStream.chunk_cHRM.<locals>.<genexpr>æ  s   è ø€ Ò,PÀ¨S°8­^Ñ,Pùs   ‚Úchromaticity)r   ry   rG   rp   ÚunpackÚlenrŽ   r­   )rI   rW   rX   r9   Úraw_valss        r-   Ú
chunk_cHRMzPngStream.chunk_cHRMà  sU   € ô × Ñ  §¡¨&Ó1ˆÜ—=‘= ¬3¨q«6°Q©;Ñ!7¸Ó;ˆÜ',Ñ,PÀxÔ,PÓ'Pˆ�‰�^Ñ$Øˆr,   c                 ó²   — t        j                  | j                  |«      }|dk  rt         j                  r|S d}t	        |«      ‚|d   | j
                  d<   |S )Nr   zTruncated sRGB chunkr   Úsrgb)r   ry   rG   rS   r8   r­   rÕ   s        r-   Ú
chunk_sRGBzPngStream.chunk_sRGBé  sU   € ô × Ñ  §¡¨&Ó1ˆØ�AŠ:Ü×.Ò.Ø�Ø(ˆCÜ˜S“/Ð!Ø  ™tˆ�‰�VÑØˆr,   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   ry   rG   rS   r8   rQ   r­   )	rI   rW   rX   r9   r<   ÚpxÚpyÚunitrü   s	            r-   Ú
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˜Ñ"Øˆr,   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   r,   r“   r”   ÚreplaceÚexif)
r   ry   rG   Úsplitr8   rk   r­   r®   r¼   rô   )rI   rW   rX   r9   ÚkÚvÚv_strs          r-   Ú
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   r,   r   rÆ   z in zTXt chunkr“   r”   r  )r   ry   rG   r  r8   rU   r=   rS   r3   rq   rk   r­   r®   r¼   rô   )rI   rW   rX   r9   r  r  rÊ   r<   s           r-   Ú
chunk_zTXtzPngStream.chunk_zTXt  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 	 |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   r“   r”   r•   )r   ry   rG   r  r8   rô   r=   rS   r3   rq   rk   r¤   r   r­   r®   r¼   )rI   rW   rX   Úrr9   r  ÚcfÚcmrƒ   Útkr  s              r-   Ú
chunk_iTXtzPngStream.chunk_iTXt?  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ð �ð	Ø—‘˜ HÓ-ˆAØ—;‘;˜w¨Ó1ˆDØ—‘˜7 HÓ-ˆBØ—‘˜ (Ó+ˆAô -1°°D¸"Ó,=Ð=ˆ�‰�Q‰˜$Ÿ,™, q™/Ø×Ñœs 1›vÔ&àˆøôC ò 	ØŠHð	ûô ò 	ØŠHð	ûô "ò Ü ×6Ò6Ø šàÜ—z‘zò Ø’Hðûô ò 	ØŠHð	úsN   ¤D ÁD' Á:D8 Â	AE0 ÄD$Ä#D$Ä'D5Ä4D5Ä8E-ÅE-Å,E-Å0E>Å=E>c                 ój   — t        j                  | j                  |«      }d|z   | j                  d<   |S )Nó   Exif  r  )r   ry   rG   r­   rà   s       r-   Ú
chunk_eXIfzPngStream.chunk_eXIfg  s0   € Ü× Ñ  §¡¨&Ó1ˆØ.°Ñ2ˆ�‰�VÑØˆr,   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   ry   rG   rS   r8   r´   ÚwarningsÚwarnrQ   r­   r³   )rI   rW   rX   r9   r<   Ún_framess         r-   Ú
chunk_acTLzPngStream.chunk_acTLm  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ÑØ".ˆÔØˆr,   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   ry   rG   rS   r8   rQ   rµ   rU   r¯   r­   rç   Úfloat)rI   rW   rX   r9   r<   ÚseqÚwidthÚheightrþ   rÿ   Úim_wÚim_hÚ	delay_numÚ	delay_dens                 r-   Ú
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ÑØˆr,   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   rS   ry   rG   r8   rQ   rµ   rU   rÜ   )rI   rW   rX   r9   r<   r(  s         r-   Ú
chunk_fdATzPngStream.chunk_fdATž  s›   € Ø�AŠ:Ü×.Ò.Ü×(Ñ(¨¯©°&Ó9�Ø�Ø6ˆCÜ˜S“/Ð!Ü× Ñ  §¡¨!Ó,ˆÜ�!‹fˆØ�=‰=˜C !™GÒ#Ø7ˆCÜ˜cÓ"Ð"ØˆŒØ�‰˜s Q™w¨°©
Ó3Ð3r,   )r%   r&   r'   rJ   r¼   rÂ   rÄ   rË   rÖ   rÜ   rÞ   rá   rè   rì   rö   rù   r  r	  r  r  r  r  r/  r1  Ú__classcell__©r¸   s   @r-   r©   r©   Y  sn   ø„ ôò""ò
ò5ò
ò6ò(
òòòò(òòò ò"ò& òD&òPòò(ö:4r,   r©   c                 ó   — | d d t         k(  S )Nr   )Ú_MAGIC)Úprefixs    r-   Ú_acceptr7  ²  s   € Ø�"�1ˆ:œÑÐr,   c                   ót   ‡ — e Zd ZdZdZd„ Zed„ «       Zd„ Zd„ Z	dd„Z
d„ Zd	„ Zd
„ Zd„ Zd„ Zˆ fd„Z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   ).r7  rG   rO   rU   Ú_fpÚ_PngImageFile__frameÚprivate_chunksr©   Úpngrl   rÛ   ÚAttributeErrorrh   ri   r   ry   Úislowerrb   ru   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_idatrP   Ú_PngImageFile__rewindÚ_seekÚis_animated)rI   r<   rV   rW   rX   r9   Úrawmoder@   s           r-   Ú_openzPngImageFile._open¾  sf  € Ü�t—w‘w—|‘| A“Ô'Ø"ˆCÜ˜cÓ"Ð"Ø—7‘7ˆŒØˆŒð
 !ˆÔÜ˜TŸW™WÓ%ˆŒàð  $Ÿ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   )rF  rP  r?  rN   r  Úload)rI   Úframes     r-   r†   zPngImageFile.text  s_   € ð �:‰:Ðð ×ÒØŸ™�à—	‘	˜$Ÿ-™-¨!Ñ+Ô,Ø�I‰IŒKØ×ÒØ—	‘	˜%Ô Ø�z‰zÐr,   c                 óT  — | j                   €d}t        |«      ‚| j                   j                  | j                  d   d   dz
  «       | j                  j                  «        | j                  j                  «        | j                  r| j                   j                  «        d| _         y)zVerify PNG fileNz)verify must be called directly after openr   r   r   )rG   ÚRuntimeErrorrN   r¿   rA  r|   r]   Ú_exclusive_fp)rI   r<   s     r-   r|   zPngImageFile.verify  sy   € ð �7‰7ˆ?Ø=ˆCÜ˜sÓ#Ð#ð 	�‰�‰�T—Y‘Y˜q‘\ !‘_ qÑ(Ô)à�‰�‰ÔØ�‰�‰Ôà×ÒØ�G‰G�M‰MŒOØˆ�r,   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_checkr?  rO  ÚrangerÛ   rN   )rI   rU  Ú
last_frameÚfrt   r<   s         r-   rN   zPngImageFile.seek!  s˜   € Ø×Ñ Ô&ØØ�4—<‘<ÒØ�J‰J�q˜$Ôà—\‘\ˆ
Ü�t—|‘| aÑ'¨°©Ó3ò 	+ˆAð+Ø—
‘
˜1•ñ	+øô ò +Ø—	‘	˜*Ô%Ø3�Ü˜s“m¨Ð*ûð+ús   Á A4Á4	B!Á=BÂB!c                 óP
  — |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                  | _        | j$                  tL        jN                  k(  rK| j                  j3                  «       | _        | jS                  | j                  | j(                  «      | _        y | j$                  tL        jP                  k(  retT        jV                  jY                  | jZ                  | j\                  «      | _        | jS                  | j                  | j(                  «      | _        y d | _        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�Œqt@        ‚)Nr   rÙ   Fr$  r&  rØ   r   zcannot seek to frame Tr   r}   zNo more images in APNG fileó   fcTLzAPNG missing frame datar=  r<  )/r>  rN   rN  rA  rÄ   rM  rK  ÚimÚpyaccessr­   r¾   r±   r¿   rG   Ú_prev_imÚdisposerH  rÙ   Ú
dispose_opÚblend_opÚdispose_extentr?  r8   rT  ÚpasterÁ   r   ry   rO   rp   rq   rU   rÛ   rl   ÚUnicodeDecodeErrorrB  rh   ri   r$   r*   r)   Ú_cropr   ÚcoreÚfillÚmodeÚsize)rI   rU  rÄ   r<   Úframe_startrV   rW   rX   s           r-   rO  zPngImageFile._seek0  sÉ  € Ø�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ð' ðV �=‰=Ð  T§_¡_¼×8LÑ8LÒ%LÜ&×4Ñ4ˆDŒOà�?‰?œh×2Ñ2Ò2ØŸ=™=×-Ñ-Ó/ˆDŒLØŸ:™: d§l¡l°D×4GÑ4GÓHˆD�LØ�_‰_¤× 6Ñ 6Ò6Ü Ÿ:™:Ÿ?™?¨4¯9©9°d·i±iÓ@ˆDŒLØŸ:™: d§l¡l°D×4GÑ4GÓHˆD�LàˆD�Løôa Ÿ™¤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Ü�s7   ÉO! ÊP  Ï!O=Ï<O=Ð 	RÐRÐ( RÑA RÒRc                 ó   — | j                   S rF   )r?  rZ   s    r-   rP   zPngImageFile.tell�  s   € Ø�|‰|Ðr,   c                 óÂ   — | j                   j                  d«      r| j                  dz   | _        | j                  | _        t
        j
                  j                  | «       y)z"internal: prepare to read PNG filerÐ   )r   N)r¾   rH  ÚdecoderconfigrK  Ú_PngImageFile__idatr   Úload_preparerZ   s    r-   rs  zPngImageFile.load_prepare�  sH   € ð �9‰9�=‰=˜Ô%Ø!%×!3Ñ!3°dÑ!:ˆDÔà×)Ñ)ˆŒÜ×Ñ×(Ñ(¨Õ.r,   c                 ó,  — | 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   DDATr=  r,   r=  )rr  rG   rO   rA  rd   rl   rÛ   Úmin)rI   Ú
read_bytesrV   rW   rX   s        r-   Ú	load_readzPngImageFile.load_read™  sò   € ð �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   Á1D Ä	DÄDc                 óÆ  — | 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                  j/                  «        d
| _        y
| j0                  ré| j2                  t4        j6                  k(  rË| j9                  | j:                  | j<                  «      }| j:                  j>                  dk(  r.d| j@                  v r |jC                  d| j@                  d   «      }n|jE                  d«      }| j0                  jG                  || j<                  |«       | j0                  | _        | jH                  rd
| _$        y
y
y
y
# t        j
                  t        f$ r Y �Œ[w xY w# t        $ r Y �Œkt        $ r. |dk(  r|dz  }t        j                  | j                  |«       Y �Œ¡t        $ rm t         j#                  d|||«       t        j                  | j                  |«      }|dd	 j%                  «       r| j&                  j)                  ||df«       Y �Œw xY w)z%internal: finished reading image datar   Tr   r}   r_  r=  r<  r   r   Nr   rã   r   )%rr  rG   rO   rA  rp   rq   rU   rP  rK  rd   rl   rh  rÛ   r   ry   rB  rh   ri   rC  r@  rb   r®   rF  r]   rb  re  r/   r1   ri  r`  rf  rl  r¾   Úconvert_transparentÚconvertrg  ra  )rI   rV   rW   rX   r9   ÚupdatedÚmasks          r-   Úload_endzPngImageFile.load_endº  sM  € à�;‰;˜!ÒØ�G‰G�L‰L˜Ÿ™Ô%ØØ�G‰G�L‰L˜ŒOðØ#'§8¡8§=¡=£?Ñ ��S˜&ð �gŠ~ØØ˜’ D×$4Ò$4à&'�Ô#Ø—‘—‘˜c 3¨Ô/Øð?Ø—‘—‘˜c 3¨Ô/ð# ð: —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ð !ð "@ˆ}øô; —L‘L¤+Ð.ò Úðûô &ò ÚÜò 6Ø˜'’>Ø˜a‘K�FÜ×$Ñ$ T§W¡W¨f×5Ü!ò ?Ü—‘Ð1°3¸¸VÔDÜ×(Ñ(¨¯©°&Ó9�Ø�q˜�8×#Ñ#Ô%Ø×'Ñ'×.Ñ.°°Q¸¨~Ô>úð	?ús1   ÁH
 Â-H* È
H'È&H'È*	K È62K É+A1K ËK 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¾   rT  ÚgetexifÚ_get_merged_dictrZ   s    r-   Ú_getexifzPngImageFile._getexifí  sG   € Ø˜Ÿ™Ñ"Ø�I‰IŒKØ˜Ÿ™Ñ"Ð'>ÀdÇiÁiÑ'OØØ�|‰|‹~×.Ñ.Ó0Ð0r,   c                 ó\   •— d| j                   vr| j                  «        t        ‰| �  «       S )Nr  )r¾   rT  r¬   r€  )rI   r¸   s    €r-   r€  zPngImageFile.getexifô  s%   ø€ Ø˜Ÿ™Ñ"Ø�I‰IŒKä‰w‰Ó Ð r,   c                 ó^   — d| j                   v r| j                  | j                   d   «      S i S )z™
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.

        :returns: XMP tags in a dictionary.
        zXML:com.adobe.xmp)r¾   Ú_getxmprZ   s    r-   ÚgetxmpzPngImageFile.getxmpú  s7   € ð # d§i¡iÑ/ð �L‰L˜Ÿ™Ð#6Ñ7Ó8ð	
ð ð	
r,   r¦   )r%   r&   r'   ÚformatÚformat_descriptionrR  Úpropertyr†   r|   rN   rO  rP   rs  rx  r~  r‚  r€  r†  r2  r3  s   @r-   r9  r9  º  s_   ø„ Ø€FØ4ÐòA-ðF ñó ðòò"+ó[ òzò/ò(òB1)òf1ô!ö
r,   r9  )r   ó    )úL;1rŠ  )r   s    )r   s    )r   s    )r   s   )r   s    )r   s   )r   s   )r   s   )r   s   )r   s   )r   s   )r   r‹  r   r   r   r   r   zI;16r   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)r,   N)ÚjoinÚwriteÚo32rô   rB   ©rG   rV   r@   ru   s       r-   Úputchunkr‘    sU   € ð �8‰8�D‹>€Dà‡H�HŒS”�T“‹^˜cÑ!Ô"Ø‡H�HˆT„NÜ
�”v˜c“{Ó
#€CØ‡H�HŒS�‹XÕr,   c                   ó   — e Zd Zd„ Zd„ Zy)Ú_idatc                 ó    — || _         || _        y rF   )rG   r�   )rI   rG   r�   s      r-   rJ   z_idat.__init__-  s   € ØˆŒØˆ�
r,   c                 ó>   — | j                  | j                  d|«       y )Nru  )r�   rG   ©rI   r@   s     r-   rŽ  z_idat.write1  s   € Ø�
‰
�4—7‘7˜G TÕ*r,   N©r%   r&   r'   rJ   rŽ  r+   r,   r-   r“  r“  *  s   „ òó+r,   r“  c                   ó   — e Zd Zd„ Zd„ Zy)Ú_fdatc                 ó.   — || _         || _        || _        y rF   )rG   r�   rÀ   )rI   rG   r�   rÀ   s       r-   rJ   z_fdat.__init__8  s   € ØˆŒØˆŒ
Øˆ�r,   c                 ó�   — | j                  | j                  dt        | j                  «      |«       | xj                  dz  c_        y )Nr=  r   )r�   rG   r�  rÀ   r–  s     r-   rŽ  z_fdat.write=  s/   € Ø�
‰
�4—7‘7˜G¤S¨¯©Ó%6¸Ô=Ø�Š˜ÑŽr,   Nr—  r+   r,   r-   r™  r™  5  s   „ òó
r,   r™  c                 óp  — | j                   j                  d| j                  j                  d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 �]m  }|j                  |k(  r|j                  «       }n|j                  |«      }| j                   j                  «       }t        |t        t         f«      r||   |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¬«      }|sL||j                  d«      k(  r8||j                  d«      k(  r$|d   dxx   |j                  d|«      z  cc<   �ŒNd }d|vr||d<   |j;                  |||dœ«       �Œp �ŒŒ  ||dt=        t%        |«      «      t=        |«      «       |rS| j                  |k7  r| j                  |«      } t?        j@                  | tC        ||«      dd| j.                  z   d|fg«       d}tE        |«      D �]t  \  }}|d
   }|d   sd|j.                  z   }n|d   }|j1                  |«      }|j.                  }|d   }tG        tI        |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«       �Œ3tO        |||«      }t?        j@                  ||dd|j.                  z   d|fg«       |jP                  }�Œw y )Nr"  r   r  r$  r&  r   éÿÿÿÿÚencoderinfor   r`  r   )r   r   r   r   rØ   r«   éþÿÿÿF)Ú
alpha_only)r`  rØ   rž  s   acTLrž   r_  r!  ))rž  rH  r¾   r$   r(   r/   r0   Ú	itertoolsÚchainr	   ÚIteratorrl  rÁ   r{  r˜   ÚlistrŽ   r*   rô   r)   r   rj  rk  rm  Úcroprg  r   Úsubtract_moduloÚgetbboxrb   r�  r   Ú_saver“  Ú	enumerateÚintÚroundÚo16r   r™  rÀ   )r`  rG   r�   rQ  rÙ   Úappend_imagesr"  r  r$  r&  r¢  Ú	im_framesÚframe_countÚim_seqÚim_framerž  ÚpreviousÚprev_disposalÚ
prev_blendÚbase_imrc  rØ   ÚdeltarÀ   rU  Ú
frame_datarm  Úframe_durationÚframe_disposalÚframe_blendÚfdat_chunkss                                  r-   Ú_write_multiple_framesr¼  B  s3  € Ø�~‰~×!Ñ! *¨b¯g©g¯k©k¸*ÀaÓ.HÓI€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Øó 4YˆÜ%×.Ñ.¨vÓ6ó 3	YˆHØ�}‰} Ò'Ø#Ÿ=™=›?‘à#×+Ñ+¨GÓ4�ØŸ.™.×-Ñ-Ó/ˆKÜ˜(¤T¬5 MÔ2Ø*2°;Ñ*?�˜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Ó&>Ò>à˜]Ñ+¨JÓ7¸;¿?¹?Ø" Hó<ñ Ó7ñ à�Ø Ñ,Ø*2�˜JÑ'Ø×Ñ H°dÈ;ÑWÖXòg3	Yð4Yñn 
Ø
ØÜŒC�	‹NÓÜˆD‹	ô	ñ Ø�7‰7�gÒØ—‘˜GÓ$ˆBÜ�‰˜œE " eÓ,°°vÀÇÁÑ7GÈÈGÐ/TÐ.UÔVà€GÜ& yÓ1ó **ÑˆˆzØ˜dÑ#ˆØ˜&Ò!Ø˜HŸM™MÑ)‰Dà˜fÑ%ˆDØ—}‘} TÓ*ˆHØ�}‰}ˆØ  Ñ/ˆÜœU ;¨zÑ#:Ó;Ó<ˆØ$Ÿ™¨°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**r,   c                 ó"   — t        | ||d¬«       y )NT)Úsave_all)r¨  )r`  rG   Úfilenames      r-   Ú	_save_allrÀ  Á  s   € Ü	ˆ"ˆb�( TÖ*r,   Fc                 óþ  — |rÊ| j                   j                  d| j                  j                  d«      «      }t        «       }| j                   j                  dg «      }t	        j
                  | g|«      D ]7  }t        j                  |«      D ]  }	|j                  |	j                  «       Œ Œ9 dD ]  }
|
|v sŒ n |j                  «       }
n| 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|› �}
| j                   j                  dd«      | j                   j                  dd«      | j                   j                  dd«      | j                   j                  dd«      f| _        	 t"        |
   \  }}
|j)                  t*        «        ||dt-        | j.                  d   «      t-        | j.                  d   «      |
ddd«       g d¢}| j                   j                  d| j                  j                  d«      «      }|r8d}|dz   t1        j2                  |«      z   } ||d|«       |j5                  d«       | j                   j                  d«      }|rrg d ¢}|j6                  D ]_  }|d d
 \  }}||v r|j5                  |«        ||||«       Œ+||v r ||||«       Œ:|dd
 j9                  «       sŒN|d
d }|rŒV ||||«       Œa | j                  dk(  rOdz  }| j:                  j=                  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}t?        |t@        «      r ||d$|d | «       �nt        dt        d%|«      «      }d&|z  dz   } ||d$|d | «       në| j                  d'v r*t        dt        d(|«      «      } ||d$tC        |«      «       n³| j                  d!k(  r2|\  }}}  ||d$tC        |«      tC        |«      z   tC        | «      z   «       nrd#| j                   v rdd)}t'        |«      ‚| j                  dk(  rH| j:                  jE                  «       d*k(  r+| j:                  j=                  d*d+«      }} ||d$|d | «       | j                   j                  d,«      }!|!rB ||d-t-        tG        |!d   d.z  d/z   «      «      t-        tG        |!d   d.z  d/z   «      «      d0«       |r=d1d2g}|j6                  D ]*  }|d d
 \  }}||v sŒ|j5                  |«        ||||«       Œ, | j                   j                  d3«      }"|"rKt?        |"tH        jJ                  «      r|"jM                  d4«      }"|"jO                  d5«      r|"d6d  }" ||d7|"«       |rtQ        | |||«       n3tS        jT                  | tW        ||«      d8d9| j.                  z   d|fg«       |r?|j6                  D ]0  }|d d
 \  }}|dd
 j9                  «       sŒ|d
d }|sŒ' ||||«       Œ2  ||d:d«       tY        |d;«      r|j[                  «        y y # t$        $ r}d|
› d�}t'        |«      |‚d }~ww xY w)<NrÙ   r­  )r   r   r   r   Úbitsr   é   r    r   r   r   ú;ÚoptimizeFÚcompress_levelr�  Úcompress_typeÚ
dictionaryr,   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ä   iÿÿ  z%cannot use transparency for this moder   ÚArü   s   pHYsrû   g      à?ó   s   bKGDs   hISTr  r   r  r!   s   eXIfrž   r«   r}   Úflush).rž  rH  r¾   Úsetr¡  r¢  r	   r£  r‘   rl  rM   rv  rJ  Úmaxrô   ÚgetdataÚencoderconfigÚ	_OUTMODESÚKeyErrorrx   rŽ  r5  r�  rm  r3   r›   ÚremoverŒ   rC  r`  Ú
getpaletter˜   r™   r¬  Úgetpalettemoderª  r   ÚExifÚtobytesÚ
startswithr¼  r   r¨  r“  ÚhasattrrÏ  )#r`  rG   r¿  r�   r¾  rÙ   Úmodesr­  r°  r±  rl  ÚcolorsrÂ  rQ  rt   r<   rŒ   ÚiccÚnamer@   r¾   Úchunks_multiple_allowedÚ
info_chunkrV   r�   Úpalette_byte_numberÚpalette_bytesrã   Úalpha_bytesÚalphaÚredÚgreenÚbluerü   r  s#                                      r-   r¨  r¨  Å  sÒ  € ñ ØŸ™×*Ñ*Ø˜RŸW™WŸ[™[¨Ó9ó
ˆô “ˆØŸ™×*Ñ*¨?¸BÓ?ˆÜ—o‘o r d¨MÓ:ò 	)ˆFÜ)×2Ñ2°6Ó:ò )�Ø—	‘	˜(Ÿ-™-Õ(ñ)ð	)ð )ò 	ˆDØ�uŠ}Ùð	ð —9‘9“;‰Dà�w‰wˆàˆ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’Ø‘à�Ø�V˜1˜T˜FÐ#ˆDð 	�‰×Ñ˜: uÓ-Ø
�‰×ÑÐ+¨RÓ0Ø
�‰×Ñ˜?¨BÓ/Ø
�‰×Ñ˜<¨Ó-ð	€BÔð"Ü! $™‰ˆ�ð ‡H�HŒVÔá	Ø
ØÜˆB�G‰G�A‰J‹ÜˆB�G‰G�A‰J‹ØØØØô	ò ;€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�×!Ñ!Õ#à'¨¨!˜_�
Ú!Ù˜"˜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Ô áÜ˜r 2 u¨g°}ÀmÕTä�‰˜œE " eÓ,°°vÀÇÁÑ7GÈÈGÐ/TÐ.UÔVáØŸ+™+ò 	)ˆJØ" 2 A˜‰IˆC�Ø�1�Qˆx×ÑÕ!à'¨¨!˜_�
ÚÙ˜"˜c 4Õ(ð	)ñ 
ˆ"ˆg�sÔäˆr�7ÔØ
�‰�
ð øôK ò "Ø" 4 &¨Ð0ˆÜ�c‹l Ð!ûð"ús   Ç'[ Û	[<Û%[7Û7[<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„ Zd„ Zy)úgetchunks.<locals>.collectorc                  ó   — y rF   r+   r–  s     r-   rŽ  z"getchunks.<locals>.collector.write�  s   € Ør,   c                 ó:   — | j                   j                  |«       y rF   )r@   rb   )rI   r�   s     r-   rb   z#getchunks.<locals>.collector.append�  s   € Ø�I‰I×Ñ˜UÕ#r,   N)r%   r&   r'   r@   rŽ  rb   r+   r,   r-   Ú	collectorrì  Š  s   „ Øˆò	ó	$r,   rï  c                 óŠ   — dj                  |«      }t        t        |t        |«      «      «      }| j                  |||f«       y )Nr,   )r�  r�  rB   rb   r�  s       r-   rb   zgetchunks.<locals>.append“  s7   € Ø�x‰x˜‹~ˆÜ”&˜œv c›{Ó+Ó,ˆØ
�	‰	�3˜˜cÐ"Õ#r,   N)rž  r¨  r@   )r`  Úparamsrï  rb   rG   s        r-   Ú	getchunksrò  ‡  sK   € ÷$ñ $ò$ñ
 
‹€BðØˆŒÜˆb�"�d˜FÔ#àˆNà�7‰7€Nøð ‰Nús   –9 ¹=z.pngz.apngz	image/png)r   )=r¡  ÚloggingÚrerp   r  r3   Úenumr   r§   r   r   r   r   r	   Ú_binaryr
   rç   r   rQ   r   r   r¬  r   r�  Ú	getLoggerr%   rh   Úcompileræ   rR   r5  rÒ   rå   Ú	SAFEBLOCKr6   rº   r$   r/   r=   rB   rD   r�   r   rŠ   r©   r7  r9  rÔ  r‘  r“  r™  r¼  rÀ  r¨  rò  Úregister_openr‡  Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer+   r,   r-   ú<module>rÿ     s+  ðóD Û Û 	Û Û Û Ý ç GÕ GÝ !Ý !Ý Ý !Ý !à	ˆ×	Ñ	˜8Ó	$€à	ˆ�‰�LÓ	!×	'Ñ	'€ð 
€ð ØØØØàØàØØØàØàØ!ñ+
€ð2 �"—*‘*Ð0Ó1€à×$Ñ$€ðð
 �~Ñ%€ðôˆwô ô*ˆGô òó/÷Vñ Vôrˆ3ô ÷,M3ñ M3ôhR4�ô R4òr
 ôK
�9×&Ñ&ô K
ðf
 
ØØØØ	Ø
Ø	Ø"Ø#ØØØØ	ØØ!ñ!€	ò(÷+ñ +÷
ñ 
ò|*ò~+ð #+°Uó {òDð> €× Ñ �L×'Ñ'¨°wÔ ?Ø €× Ñ �L×'Ñ'¨Ô /Ø €× Ñ ˜×+Ñ+¨YÔ 7à €× Ñ ˜,×-Ñ-°¸Ð/@Ô Aà €× Ñ �L×'Ñ'¨Õ 5r,   