
     h                        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 dd
lmZ  ej        e          Z ej        d          j        ZdZ ddddddddddddddddZ! ej        d          Z"ej#        Z$	 de$z  Z%	  G d d e          Z& G d! d"e          Z'd# Z(d$ Z)dLd%Z* G d& d'          Z+ G d( d)e,          Z- G d* d+          Z. G d, d-e+          Z/d. Z0 G d/ d0ej                  Z1d1d2d3d4d5d6d7d7d8d9d:d;d<d=d>Z2d? Z3 G d@ dA          Z4 G dB dC          Z5dD Z6dE Z7e3dFfdGZ8dH Z9 e	j:        e1j;        e1e0            e	j<        e1j;        e8            e	j=        e1j;        e7            e	j>        e1j;        dIdJg            e	j?        e1j;        dK           dS )M    N)IntEnum   )Image
ImageChops	ImageFileImagePaletteImageSequence)i16be)i32be)o8)o16be)o32be)	deprecates   \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dS )Disposalr   r   r   N)__name__
__module____qualname__OP_NONEOP_BACKGROUNDOP_PREVIOUS     N/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/PIL/PngImagePlugin.pyr%   r%   c   s1        G M
 K r-   r%   c                       e Zd ZdZ	 dZdS )Blendr   r   N)r&   r'   r(   	OP_SOURCEOP_OVERr,   r-   r.   r0   r0   x   s%        I
 G r-   r0   c                 H   t           dt          di                                D ]c\  }}|                     |          rI| t	          |          d          } | |j        v r)t          | |  d|j         d|             ||          c S ddt           d|  d}t          |          )NAPNG_DISPOSE_APNG_BLEND_
   .zmodule 'z' has no attribute '')	r%   r0   items
startswithlen__members__r   r&   AttributeError)nameenumprefixmsgs       r.   __getattr__rB      s    !?E=IOOQQ " "f??6"" 	"F&Dt'''V+T++RDM1J1JD1J1JKKKDz!!!
:X
:
:4
:
:
:C


r-   c                     t          j                    }|                    | t                    }|j        rd}t          |          |S )NzDecompressed Data Too Large)zlibdecompressobj
decompressMAX_TEXT_CHUNKunconsumed_tail
ValueError)sdobj	plaintextrA   s       r.   _safe_zlib_decompressrM      sE    D>22I +oor-   c                 2    t          j        | |          dz  S )Nl    )rD   crc32)dataseeds     r.   _crc32rR      s    :dD!!J..r-   c                   L    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dS )ChunkStreamc                 "    || _         g | _        d S N)fpqueue)selfrW   s     r.   __init__zChunkStream.__init__   s    


r-   c                    d}| j         r8| j                                         \  }}}| j                            |           nL| j                            d          }|dd         }| 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 ))rX   poprW   seekreadtelli32is_cidr   LOAD_TRUNCATED_IMAGESreprSyntaxError)rY   cidposlengthrJ   rA   s         r.   r_   zChunkStream.read   s    : 	#z~~//CfGLLQAABB%C',,..CVVFc{{ 	'2 '<S		<<<!#&&&Cr-   c                     | S rV   r,   rY   s    r.   	__enter__zChunkStream.__enter__   s    r-   c                 .    |                                   d S rV   )close)rY   argss     r.   __exit__zChunkStream.__exit__   s    

r-   c                 "    d x| _         | _        d S rV   )rX   rW   rj   s    r.   rm   zChunkStream.close   s    ##
TWWWr-   c                 @    | j                             |||f           d S rV   )rX   appendrY   rf   rg   rh   s       r.   pushzChunkStream.push   s%    
3V,-----r-   c                     t                               d|||            t          | d|                    d          z             ||          S )z"Call the appropriate chunk handlerzSTREAM %r %s %schunk_ascii)loggerdebuggetattrdecoders   s       r.   callzChunkStream.call   sJ     	&S&999<wtX

7(;(;;<<S&IIIr-   c                    t           j        r&|d         dz	  dz  r|                     ||           dS 	 t          |t          |                    }t	          | j                            d                    }||k    r"dt          |           d}t          |          dS # 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 r\   z(broken PNG file (incomplete checksum in )r   rc   crc_skiprR   ra   rW   r_   rd   re   structerror)rY   rf   rP   crc1crc2rA   es          r.   crczChunkStream.crc   s     * 	A!a 	MM#t$$$F	*$s,,Dtw||A''Dt||McMMM!#&&& | | 	* 	* 	*IT#YYIIICc"")	*s   A,B" "C1#CCc                 :    | j                             d           dS )zRead checksumr   N)rW   r_   )rY   rf   rP   s      r.   r   zChunkStream.crc_skip   s     	Qr-      IENDc                 (   g }	 	 |                                  \  }}}n)# t          j        $ r}d}t          |          |d }~ww xY w||k    rnD|                     |t          j        | j        |                     |                    |           |S )NTztruncated PNG file)	r_   r   r   OSErrorr   r   
_safe_readrW   rr   )rY   endchunkcidsrf   rg   rh   r   rA   s           r.   verifyzChunkStream.verify   s     
	*#'99;; S&&< * * **cll)* hHHS).tw??@@@KK
	 s    A?AN)r   )r&   r'   r(   rZ   r_   rk   ro   rm   rt   r|   r   r   r   r,   r-   r.   rT   rT      s               (    $ $ $. . .J J J* * *(  
     r-   rT   c                   *    e Zd ZdZedd            ZdS )iTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    Nc                 X    t                               | |          }||_        ||_        |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   rY   s        r.   r   ziTXt.__new__  s*     {{3%%		r-   )NN)r&   r'   r(   __doc__staticmethodr   r,   r-   r.   r   r      s>             \  r-   r   c                   0    e Zd ZdZd Zd	dZd
dZd	dZdS )PngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    c                     g | _         d S rV   )chunksrj   s    r.   rZ   zPngInfo.__init__  s    r-   Fc                     ||g}|r|                     d           | j                             t          |                     dS )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)rr   r   tuple)rY   rf   rP   
after_idatchunks        r.   addzPngInfo.add  sI     d 	LL5<<(((((r-    c                 *   t          |t                    s|                    dd          }t          |t                    s|                    dd          }t          |t                    s|                    dd          }t          |t                    s|                    dd          }|r<|                     d|dz   |z   dz   |z   dz   t	          j        |          z              dS |                     d|dz   |z   dz   |z   dz   |z              dS )	zAppends 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   rD   compress)rY   keyvaluer   r   zips         r.   add_itxtzPngInfo.add_itxt)  s)    #u%% 	2**Y11C%'' 	4LL(33E$&& 	2;;w11D$&& 	2;;w11D 	UHHk!D(5047%?$-PUBVBVV    
 HHWcIo4u<tCeKeSTTTTTr-   c                    t          |t                    r$|                     |||j        |j        |          S t          |t
                    s@	 |                    dd          }n(# t          $ r |                     |||          cY S w xY wt          |t
                    s|                    dd          }|r0|                     d|dz   t          j
        |          z              dS |                     d|dz   |z              dS )	zAppends 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   rD   r   )rY   r   r   r   s       r.   add_textzPngInfo.add_textE  s    eT"" 	N==eUZ=MMM %'' 	::Y99 : : :}}S%S}99999: #u%% 	2**Y11C 	3HHWcGmdmE.B.BBCCCCCHHWcEkE122222s   A' '"BBNF)r   r   F)r&   r'   r(   r   rZ   r   r   r   r,   r-   r.   r   r     sm         
  ) ) ) )U U U U83 3 3 3 3 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| _        d S )Nr   r   r   )superrZ   im_infoim_textim_sizeim_modeim_tile
im_paletteim_custom_mimetypeim_n_frames_seq_numrewind_statetext_memory)rY   rW   	__class__s     r.   rZ   zPngStream.__init__f  st     "& r-   c                 z    | xj         |z  c_         | j         t          k    rd| j          d}t          |          d S )Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r   MAX_TEXT_MEMORYrI   )rY   chunklenrA   s      r.   check_text_memoryzPngStream.check_text_memoryw  sY    H$o--6#6 6 6  S//! .-r-   c                 ^    | j                                         | j        | j        d| _        d S )N)infotileseq_num)r   copyr   r   r   rj   s    r.   save_rewindzPngStream.save_rewind  s2    L%%''L}
 
r-   c                 r    | j         d         | _        | j         d         | _        | j         d         | _        d S )Nr   r   r   )r   r   r   r   rj   s    r.   rewindzPngStream.rewind  s3    (0(0))4r-   c                    t          j        | j        |          }|                    d          }t                              d|d |                    t                              d||                    ||         }|dk    rd| d}t          |          	 t          ||dz   d                    }n2# t          $ r t           j	        rd }n Y nt          j        $ r d }Y nw xY w|| j        d<   |S )	Nr   ziCCP profile name %rzCompression method %sr   Unknown compression method z in iCCP chunkr   icc_profile)r   r   rW   findrx   ry   re   rM   rI   rc   rD   r   r   )rY   rg   rh   rJ   icomp_methodrA   r   s           r.   
chunk_iCCPzPngStream.chunk_iCCP  s    &11 FF5MM+QrrU333,ad333d!KKKKCc"""	/!a%''
;;KK 	 	 	. "  z 	 	 	KKK	&1]#s   B3 3C"C"!C"c                    t          j        | j        |          }|dk     rt           j        r|S d}t	          |          t          |d          t          |d          f| _        	 t          |d         |d         f         \  | _        | _	        n# t          $ r Y nw xY w|d         r
d| j        d	<   |d
         rd}t          |          |S )N   zTruncated IHDR chunkr   r   r   	      r   	interlace   zunknown filter category)r   r   rW   rc   rI   ra   r   _MODESr   
im_rawmode	Exceptionr   re   rY   rg   rh   rJ   rA   s        r.   
chunk_IHDRzPngStream.chunk_IHDR  s     &11B;;. (CS//!1ayy#a))+	,2AaD!A$<,@)DL$// 	 	 	D	R5 	*()DL%R5 	#+Cc"""s   &(B 
BBc                     d| j         v rd| j         d         || j        fg}n%| 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)rY   rg   rh   r   s       r.   
chunk_IDATzPngStream.chunk_IDAT  sm    T\!!DL0#tGHDD+04_-FT\13HIDr-   c                     t           rV   )r   )rY   rg   rh   s      r.   
chunk_IENDzPngStream.chunk_IEND  s    r-   c                 b    t          j        | j        |          }| j        dk    r	d|f| _        |S )Nr   r   )r   r   rW   r   r   rY   rg   rh   rJ   s       r.   
chunk_PLTEzPngStream.chunk_PLTE  s3     &11<3#QhDOr-   c                    t          j        | j        |          }| j        dk    rKt                              |          r&|                    d          }|dk    r
|| j        d<   nm|| j        d<   nb| j        dv rt          |          | j        d<   nA| j        dk    r6t          |          t          |d          t          |d          f| j        d<   |S )	Nr   r   r   transparencyr   r   r   r   r   r   )	r   r   rW   r   _simple_palettematchr   r   i16)rY   rg   rh   rJ   r   s        r.   
chunk_tRNSzPngStream.chunk_tRNS  s     &11<3$$Q'' 	1 FF5MM6634DL0 01^,,\_,,+.q66DL((\U""+.q663q!99c!Qii+GDL(r-   c                 n    t          j        | j        |          }t          |          dz  | j        d<   |S )N     j@gamma)r   r   rW   ra   r   r   s       r.   
chunk_gAMAzPngStream.chunk_gAMA  s2     &1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  V  
dS )r   Nr,   ).0elts     r.   	<genexpr>z'PngStream.chunk_cHRM.<locals>.<genexpr>  s&      ,P,PS8^,P,P,P,P,P,Pr-   chromaticity)r   r   rW   r   unpackr;   r   r   )rY   rg   rh   rJ   raw_valss        r.   
chunk_cHRMzPngStream.chunk_cHRM  s`      &11=3q66Q;!7;;',,P,Px,P,P,P'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   r   rW   rc   rI   r   r   s        r.   
chunk_sRGBzPngStream.chunk_sRGB  sW      &11A::. (CS//! tVr-   c                 .   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<   n|dk    r||f| j        d	<   |S )
Nr   zTruncated pHYs chunkr   r   r   r   
F%u?dpiaspect)r   r   rW   rc   rI   ra   r   )	rY   rg   rh   rJ   rA   pxpyunitr  s	            r.   
chunk_pHYszPngStream.chunk_pHYs  s     &11A::. (CS//!QC1IIBt199v+rF{*C"%DLQYY%'VDL"r-   c                 p   t          j        | j        |          }	 |                    dd          \  }}n# t          $ r |}d}Y nw xY w|rj|                    dd          }|                    dd          }|dk    r|n|| j        |<   || j        |<   |                     t          |                     |S )Nr   r   r-   r   r   replaceexif)
r   r   rW   splitrI   r{   r   r   r   r;   )rY   rg   rh   rJ   kvv_strs          r.   
chunk_tEXtzPngStream.chunk_tEXt  s     &11	775!$$DAqq 	 	 	AAAA	  	/H--AHHY	22E#$;;aaEDLO#DLO""3u::...s   6 AAc                 F   t          j        | j        |          }	 |                    dd          \  }}n# t          $ r |}d}Y nw xY w|r	|d         }nd}|dk    rd| d}t          |          	 t          |dd                    }n2# t          $ r t           j        rd}n Y nt          j	        $ r d}Y nw xY w|rb|
                    dd          }|
                    dd	          }|x| j        |<   | j        |<   |                     t          |                     |S )
Nr   r   r-   r   r   z in zTXt chunkr   r   r  )r   r   rW   r  rI   re   rM   rc   rD   r   r{   r   r   r   r;   )rY   rg   rh   rJ   r  r  r   rA   s           r.   
chunk_zTXtzPngStream.chunk_zTXt)  sw    &11	775!$$DAqq 	 	 	AAAA	  	A$KKK!KKKKCc"""	%ae,,AA 	 	 	.   z 	 	 	AAA	  	+H--AI..A011DLOdl1o""3q66***s'   6 AA3B B:'B:9B:c                 T   t          j        | j        |          x}}	 |                    dd          \  }}n# t          $ r |cY S w xY wt          |          dk     r|S |d         |d         |dd          }}}	 |                    dd          \  }}	}
n# t          $ r |cY S w xY w|dk    rJ|dk    rB	 t          |
          }
n3# t          $ r t           j        r|cY S  t          j	        $ r |cY S w xY w|S 	 |
                    dd          }|
                    dd          }|	
                    dd          }	|

                    dd          }
n# t          $ r |cY S w xY wt          |
||	          x| j        |<   | j        |<   |                     t          |
                     |S )Nr   r   r   r   r   r   r   )r   r   rW   r  rI   r;   rM   rc   rD   r   r{   r   r   r   r   r   )rY   rg   rh   rrJ   r  cfcmr   tkr  s              r.   
chunk_iTXtzPngStream.chunk_iTXtK  s   $TWf555A	775!$$DAqq 	 	 	HHH	q66A::HaD!A$!""B	''%++KD"aa 	 	 	HHH	77Qww-a00AA!    6  z   HHH 	H--A;;w11D7H--B(++AA 	 	 	HHH	 -1D",=,==Q$,q/s1vv&&&sL   8 AA:B B$#B$4C C2C21C28AE E E c                 T    t          j        | j        |          }d|z   | j        d<   |S )N   Exif  r  )r   r   rW   r   r   s       r.   
chunk_eXIfzPngStream.chunk_eXIfs  s,     &11.2Vr-   c                 z   t          j        | j        |          }|dk     rt           j        r|S d}t	          |          | j        d | _        t          j        d           |S t          |          }|dk    s|dk    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   rW   rc   rI   r   warningswarnra   r   r   )rY   rg   rh   rJ   rA   n_framess         r.   
chunk_acTLzPngStream.chunk_acTLy  s     &11A::. 6CS//!'#DMPQQQHq66q==Hz11MPQQQH#"1ayyV".r-   c                    t          j        | j        |          }|dk     rt           j        r|S d}t	          |          t          |          }| j        |dk    s| j        | j        |dz
  k    rd}t          |          || _        t          |d          t          |d          }}t          |d          t          |d	          }	}| j        \  }
}||z   |
k    s	|	|z   |k    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   rW   rc   rI   ra   r   re   r   r   r   float)rY   rg   rh   rJ   rA   seqwidthheightr  r  im_wim_h	delay_num	delay_dens                 r.   
chunk_fcTLzPngStream.chunk_fcTL  s    &11B;;. 6CS//!!ffM!cQhhM%$-37*B*B7Cc"""Aq		3q!99vQSBZZB\
d:Vd 2 20Cc""" "BU
BK@V"1bzz3q"::9	>>I#(#3#3eI6F6F#F#MZ #$R5Z  !"Wr-   c                 V   |dk     r9t           j        rt          j        | j        |          }|S d}t	          |          t          j        | j        d          }t          |          }| j        |dz
  k    rd}t          |          || _        |                     |dz   |dz
            S )Nr   z"APNG contains truncated fDAT chunkr   r,  )	r   rc   r   rW   rI   ra   r   re   r   )rY   rg   rh   rJ   rA   r7  s         r.   
chunk_fdATzPngStream.chunk_fdAT  s    A::. (&996CS//! !,,!ff=C!G##7Cc"""sQw
333r-   )r&   r'   r(   rZ   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r   r#  r)  r>  r@  __classcell__r   s   @r.   r   r   e  sf           "" " "
 
 
5 5 5
  6  (
 
 
      (         "  &     D& & &P    (  :4 4 4 4 4 4 4r-   r   c                 (    | d d         t           k    S )Nr   )_MAGIC)r@   s    r.   _acceptrE    s    "1":r-   c                   z     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                 |   t          | j                            d                    sd}t          |          | j        | _        d| _        g | _        t          | j                  | _        	 | j                                        \  }}}	 | j        	                    |||          }n# t          $ r Y nt          $ rr t                              d|||           t          j        | j        |          }|dd                                         r| j                            ||f           Y nw xY w| j                            ||           | j        j        | _        | j        j        | _        | j        j        | _        d | _        | j        j        | _        | j        j        | _        | j        j        pd| _        | j                             dd	          | _!        | j        j"        r)| j        j"        \  }}tG          j$        ||          | _%        |d
k    r|dz
  | _&        n|| _&        | j        j        vd	| _'        | j        (                                 | j&        | _)        | j        *                                | _+        | j!        r| xj        dz  c_        | ,                    d           | j        dk    | _-        d S )Nr   znot a PNG filer   T%r %s %s (unknown)r   r   r   F   fdATr   ).rE  rW   r_   re   _fp_PngImageFile__frameprivate_chunksr   pngr|   r   r=   rx   ry   r   r   islowerrr   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_idatr`   _PngImageFile__rewind_seekis_animated)rY   rA   rf   rg   rh   rJ   rawmoderP   s           r.   _openzPngImageFile._open  s   tw||A'' 	#"Cc"""7
 !TW%%	!  $x}}Cf9HMM#sF33   ! 9 9 913VDDD(&99qs8##%% 9'..Qx888	9 HLLa   !	!2 H$	X%
H$	
H$	#x:,1!Y]]?EBB8 	; H/MGT'+GT::DL'>>"(1*D"(D8+5:D2H  """!%!4D HMMOODM! #"JJqMMM=1,s   B( (
D/4A8D/.D/c                     | j         [| j        r$| j        }|                     | j        dz
             |                                  | j        r|                     |           | j         S )Nr   )rS  r]  rM  r^   r(  load)rY   frames     r.   r   zPngImageFile.text  sk     :  -		$-!+,,,IIKKK !		%   zr-   c                 D   | j         d}t          |          | j                             | j        d         d         dz
             | j                                         | j                                         | j        r| j                                          d| _         dS )zVerify PNG fileNz)verify must be called directly after openr   r   r   )rW   RuntimeErrorr^   r   rO  r   rm   _exclusive_fp)rY   rA   s     r.   r   zPngImageFile.verify  s     7?=Cs### 	TYq\!_q())) 	GMMOOOr-   c                 ^   |                      |          sd S || j        k     r|                     dd           | j        }t          | j        dz   |dz             D ]Q}	 |                     |           # t          $ r,}|                     |           d}t	          |          |d }~ww xY wd S )Nr   Tr   zno more images in APNG file)_seek_checkrM  r\  ranger   r^   )rY   rb  
last_framefr   rA   s         r.   r^   zPngImageFile.seek-  s    && 	F4<JJq$\
t|a'33 	+ 	+A+

1 + + +		*%%%3smm*+	+ 	+s   A44
B*>'B%%B*Fc                 &	   |dk    r|r| j                             | j                   | j                                         | j        | _        d | _        | j        rd | _        | j        j	        | _
        | j        j        | _        | j         | _        d | _        d | _        | j
                            dd          | _        | j
                            d          | _        | j
                            d          | _        | j
                            d          | _        d| _        ns|| j        dz   k    rd| }t-          |          |                                  | j        r%| j                            | j        | j                   | j                                        | _        | j         | _        | j        r&t5          j        | j        | j                   d| _        d}	 | j                            d
           	 | j                                        \  }}}n# t:          j        t>          f$ r Y nw xY w|dk    rd}tA          |          |dk    r|rd}t?          |          d	}	 | j        !                    |||           n# tD          $ r Y nt@          $ r3 |dk    r|d
z  }|r	|| _        Y ndt5          j        | j        |           Y nFtF          $ r: tH          %                    d|||           t5          j        | j        |           Y nw xY w4|| _        | j        j        | _        | j
                            d          | _        | j
                            d          | _        | j
                            d          | _        | j        st@          | j        &| j        tL          j'        k    rtL          j(        | _        | j        tL          j'        k    rE| j                                        | _        | )                    | j        | j                  | _        d S | j        tL          j(        k    rVtT          j+        ,                    | j-        | j.                  | _        | )                    | j        | j                  | _        d S d | _        d S )Nr   r   Fr3  r5  r   r   zcannot seek to frame Tr   r   zNo more images in APNG file   fcTLzAPNG missing frame datarK  rJ  )/rL  r^   r[  rO  r   rZ  rX  impyaccessr   r   r   r   rW   _prev_imdisposerU  r   
dispose_opblend_opdispose_extentrM  rI   ra  paster   r   r   r_   r   r   re   r   r|   UnicodeDecodeErrorr=   rx   ry   r%   r+   r*   _cropr   corefillrQ  size)rY   rb  r   rA   frame_startrf   rg   rh   s           r.   r\  zPngImageFile._seek<  s7   A:: 	#dm,,,!!!&*&8#= )$(DM H,	 H,	( DMDL!%!F!FD"immJ77DO IMM'22DM"&)--"7"7DDLLq(((5e55 oo% IIKKK| AdlD,?@@@ GLLNNDMhDG " ($TWd.ABBB&'#K:Q'+x}}$Cffk2   E '>>7C"3--''>>" /7)#..."&K:HMM#sF3333)   E : : :g~~!& "28D/!E(&99999% : : :LL!5sCHHH(&99999:;:B !DL(DI"immJ77DO IMM'22DM"&)--"7"7D9  = T_8L%L%L&4DO?h222=--//DL::dlD4GHHDLLL_ 666 :??49di@@DL::dlD4GHHDLLLDLLLs7   <H H32H3)J 
LL1LA LLc                     | j         S rV   )rM  rj   s    r.   r`   zPngImageFile.tell  s
    |r-   c                     | j                             d          r| j        dz   | _        | j        | _        t
          j                            |            dS )z"internal: prepare to read PNG filer   )r   N)r   rU  decoderconfigrX  _PngImageFile__idatr   load_preparerj   s    r.   r  zPngImageFile.load_prepare  sQ     9==%% 	;!%!3d!:D)((.....r-   c                    | j         dk    r| j                            d           | j                                        \  }}}|dvr| j                            |||           dS |dk    r9	 | j                            |||           n# t          $ r Y nw xY w|dz
  | _         n|| _         | j         dk    |dk    r| j         }nt          || j                   }| j         |z
  | _         | j                            |          S )zinternal: read more image datar   r   )   IDATs   DDATrK  r-   rK  )r~  rW   r_   rO  rt   r|   r   min)rY   
read_bytesrf   rg   rh   s        r.   	load_readzPngImageFile.load_read  s    kQ GLLOOO#x}}Cf555c3///sg~~HMM#sF3333   D$qj$% kQ* ??JJZ55JkJ.w||J'''s   ,B	 	
BBc                 >   | j         dk    r| j                            | j                    	 | j                            d           	 | j                                        \  }}}n# t          j        t          f$ r Y nw xY w|dk    rn|dk    r+| j        r$d| _        | j        	                    |||           n	 | j        
                    |||           n# t          $ r Y nt          $ r( |dk    r|dz  }t          j        | j        |           Y nt          $ rs t                               d|||           t          j        | j        |          }|dd	                                         r| j                            ||df           Y nw xY wj| j        j        | _        | j        s"| j                                         d
| _        d
S | j        r| j        t4          j        k    r|                     | j        | j                  }| j        j        dk    r+d| j         v r"|!                    d| j         d                   }n|"                    d          }| j        #                    || j        |           | j        | _        | j$        rd
| _$        d
S d
S d
S d
S )z%internal: finished reading image datar   Tr   r   rl  rK  rJ  r   r   Nr   r   r   )%r~  rW   r_   rO  r   r   re   r]  rX  rt   r|   ru  r   r   r   r=   rx   ry   rP  rN  rr   r   rS  rm   ro  rr  r0   r2   rv  rm  rs  rQ  r   convert_transparentconvertrt  rn  )rY   rf   rg   rh   rJ   updatedmasks          r.   load_endzPngImageFile.load_end  s   ;!GLL%%%	?GLLOOO#'8==?? S&&L+.    g~~D$4&'#c3///?c3////%    6 6 6'>>aKF$TWf55555! ? ? ?13VDDD(&99qs8##%% ?'..Q~>>>	?1	?: X%
 	)HNNDHHH} )%-!?!?**TWd.ABB7<5((^ty-H-H"66	. 9 DD #??622D##GT-@$GGG-= )$(DMMM) )!?!?) )s1   A% %A?>A?<C 
F%.FA9FFc                     d| j         vr|                                  d| j         vrd| j         vrd S |                                                                 S )Nr  zRaw profile type exif)r   ra  getexif_get_merged_dictrj   s    r.   _getexifzPngImageFile._getexif  sU    ""IIKKK""'>di'O'O4||~~..000r-   c                 ~    d| j         vr|                                  t                                                      S )Nr  )r   ra  r   r  )rY   r   s    r.   r  zPngImageFile.getexif   s1    ""IIKKKww   r-   c                 X    d| j         v r |                     | j         d                   n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   _getxmprj   s    r.   getxmpzPngImageFile.getxmp  s5     #di// LL#67888	
r-   r   )r&   r'   r(   formatformat_descriptionr_  propertyr   r   r^   r\  r`   r  r  r  r  r  r  rA  rB  s   @r.   rG  rG    s       F4A- A- A-F   X  "+ + +[  [  [  [ z  / / /( ( (B1) 1) 1)f1 1 1! ! ! ! !
 
 
 
 
 
 
r-   rG  )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   c                 <   d                     |          }|                     t          t          |                    |z              |                     |           t	          |t	          |                    }|                     t          |                     dS )z'Write a PNG chunk (including CRC field)r-   N)joinwriteo32r;   rR   rW   rf   rP   r   s       r.   putchunkr  *  sx     88D>>DHHST^^c!"""HHTNNN
vc{{
#
#CHHSXXr-   c                       e Zd Zd Zd ZdS )_idatc                 "    || _         || _        d S rV   )rW   r   )rY   rW   r   s      r.   rZ   z_idat.__init__8  s    


r-   c                 >    |                      | j        d|           d S )Nr  )r   rW   rY   rP   s     r.   r  z_idat.write<  s     

47GT*****r-   Nr&   r'   r(   rZ   r  r,   r-   r.   r  r  5  s2          + + + + +r-   r  c                       e Zd Zd Zd ZdS )_fdatc                 0    || _         || _        || _        d S rV   )rW   r   r   )rY   rW   r   r   s       r.   rZ   z_fdat.__init__C  s    
r-   c                     |                      | j        dt          | j                  |           | xj        dz  c_        d S )NrK  r   )r   rW   r  r   r  s     r.   r  z_fdat.writeH  s:    

47GS%6%6===r-   Nr  r,   r-   r.   r  r  @  s2          
    r-   r  c                    | j                             d| j                            dd                    }| j                             d| j                            dd                    }| j                             d| j                            dt          j                            }| j                             d| j                            dt
          j                            }	|rt          j        |          }
nt          j        | g|          }
g }d}|
D ]}t          j
        |          D ]}|j        |k    r|                                }n8|dk    r|                    || j                  }n|                    |          }| j                                         }t          |t           t"          f          r||         |d<   t          |t           t"          f          r||         |d<   t          |	t           t"          f          r|	|         |d<   |dz  }|r|d	         }|d
                             d          }|d
                             d          }|t          j        k    rt'          |          dk     rt          j        }|t          j        k    r|d                                         }t*          j                            d| j        d          }|d         }|r|                    |          }n
d| j        z   }|                    ||           n'|t          j        k    r|d         d         }n|d         }t7          j        |                    d          |                    d                    }|                                }|sl||                    d          k    rS||                    d          k    r:t          |t           t"          f          r|d
         dxx         |d         z  cc<   nd }|                    |||d           
 ||dt?          t'          |                    t?          |                     |r1tA          j!        | tE          ||          dd| j        z   d|fg           d}tG          |          D ]\  }}|d         }|d         sd|j        z   }n|d         }|                    |          }|j        }|d
         }tI          tK          |                    d|                              }|                    d|          }|                    d|	          } ||dt?          |          t?          |d                   t?          |d                   t?          |d                   t?          |d                   tM          |          tM          d          tO          |          tO          |                     |dz  }|dk    r5|s3tA          j!        |tE          ||          dd|j        z   d|fg           tQ          |||          }tA          j!        ||dd|j        z   d|fg           |j)        }d S )Nr1  r   r%  r3  r5  r   )rW  r   encoderinfor   rm  r   )r   r   r   r   r   r   r   )rm  r   r  s   acTLr   rl  r0  )*r  rU  r   r%   r)   r0   r1   	itertoolschainr	   IteratorrQ  r   r  rW  r   listr   r+   r;   r*   r   rw  rx  ry  croprt  r   subtract_modulogetbboxrr   r  r   _saver  	enumerateintroundo16r   r  r   )rm  rW   r   r^  r   append_imagesr1  r%  r3  r5  r  	im_framesframe_countim_seqim_framer  previousprev_disposal
prev_blendbase_imrp  r   deltar   rb  
frame_datary  frame_durationframe_disposalframe_blendfdat_chunkss                                  r.   _write_multiple_framesr  M  s<   ~!!*bgkk*a.H.HIIH>fbgkk&!&<&<==D~!!*bgkk*hFV.W.WXXHNwGU_(M(MNNE 5..m44IK 4Y 4Y%.v66 3	Y 3	YH}''#==??c>>'///LLHH'//88H.--//K(T5M22 @*2;*?J'(T5M22 @*2;*?J'%$// :',['9G$1K !$R= ( 7 ; ;J G G%m488AA
 H$888S^^a=O=O$,$:M H$:::&tn1133G#joofbg|LLG#F+D 0"),,t"4"4%/MM'40000"h&:::'mD1GG&tnG"2$$U++W__U-C-C  }}%)D)DDD"koog&>&>>>!(T5M:: W /
;;;{:?VV;;;Hd;WWXXXXg3	Yl 
E
C	NND			    WE"e,,v7GG/T.UVVVG&y11 ** **zd#&! 	+HM)DDf%D}}T**H} /U;??:x#H#HIIJJ$X>>!oogu55LLQLLQLLQLLQLLII~{OO	
 	
 	
 	1A::m:Ob%  (-/G<=     E733KO(-/G<=  
 ")GGU** **r-   c                 ,    t          | ||d           d S )NT)save_all)r  )rm  rW   filenames      r.   	_save_allr    s    	"b(T******r-   Fc                    |r| j                             d| j                            d                    }t                      }| j                             dg           }|rt	          j        |          }nt	          j        | g|          }|D ]3}	t          j        |	          D ]}
|                    |
j	                   4dD ]}||v r n	|
                                }n| j	        }|dk    rd| j         v rt          d| j         d         z  d          }nU| j        rLt          t          t          | j                                        d                   dz  d          d          }nd}|d	k    r|d
k    rd}n|dk    rd
}nd}| d| }| j                             dd          | j                             dd          | j                             dd          | j                             dd          f| _        	 t"          |         \  }}n(# t$          $ r}d| d}t'          |          |d }~ww xY w|                    t*                      ||dt-          | j        d                   t-          | j        d                   |ddd           g d}| j                             d| j                            d                    }|r>d}|dz   t1          j        |          z   } ||d|           |                    d           | j                             d          }|rg d }|j        D ]}}|d d
         \  }}||v r#|                    |            ||||           6||v r ||||           H|dd
                                         r|d
d         }|s ||||           ~| j	        dk    r_|dz  }| j                            d!          d |         }t          |          |k     r|dz  }t          |          |k      ||d"|           | j                             d#| j                            d#d                     }|s|dk    r| j	        dk    rk|}t?          |t@                    r ||d$|d |                    n@t          dt          d%|                    }d&|z  dz   } ||d$|d |                    n| j	        d'v r9t          dt          d(|                    } ||d$tC          |                     n| j	        d!k    rA|\  }} }! ||d$tC          |          tC          |           z   tC          |!          z              nud#| j         v rd)}t'          |          nZ| j	        dk    rO| j        "                                d*k    r2| j                            d*d+          }|} ||d$|d |                    | j                             d,          }"|"r[ ||d-t-          tG          |"d         d.z  d/z                       t-          tG          |"d         d.z  d/z                       d0           |rAd1d2g}|j        D ]5}|d d
         \  }}||v r"|                    |            ||||           6| j                             d3          }#|#r[t?          |#tH          j%                  r|#&                    d4          }#|#'                    d5          r
|#d6d          }# ||d7|#           |rtQ          | |||||           n1tS          j*        | tW          ||          d8d9| j        z   d|fg           |rL|j        D ]D}|d d
         \  }}|dd
                                         r|d
d         }|r ||||           E ||d:d           tY          |d;          r|-                                 d S d S )<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  rU  r   setr  r  r	   r  r   rQ  r]   r  rW  maxr;   getdataencoderconfig	_OUTMODESKeyErrorr   r  rD  r  ry  rD   r   remover   rP  rm  
getpaletter   r   r  getpalettemoder  r   Exiftobytesr:   r  r   r  r  hasattrr  )$rm  rW   r  r   r  r   modesr  r  r  r  rQ  colorsr  r^  r   rA   r   iccr>   rP   r   chunks_multiple_allowed
info_chunkrf   r   palette_byte_numberpalette_bytesr   alpha_bytesalpharedgreenbluer  r  s$                                       r.   r  r    s     **RW[[99
 
 **?B?? 	9OM22EEORD-88E 	) 	)F)26:: ) )		(-(((()( 	 	Du}}  99;;Dws{{ R^##bnV44c::FF z SRZ%7%7%9%9!%<!=!=!BCHH!LLR<<{{1##T##D 	:u--
+R00
?B//
<--	B"!$ " " "04000cll!" HHV	E
BGAJBGAJ	 	 	 ;::F
.

]BGKK,F,F
G
GC
  g~c 2 22b'4    	g>i((D )"F"F"F+ 	) 	)J"2A2ICf}}c"""b#t$$$$///b#t$$$$QqS!!## )'!_
! )E"c4(((	w#~~$qj((//0D1D0DE-  #666U"M -  #666b'=)))>%%nbgkk.RV6W6WXXL 4|q((7c>> K,.. 8b'<#=>>>>"1c#|&<&<==,.6b'5+#67777W''q#e\":":;;LE"gs<001111W+CE"gs3xx#e**4s4yy@AAAA// >cll"	 0 7c>>be2244>>E$$VS11E KE"gu\k\2333
.

U
#
#C
 
CFVOc)**++CFVOc)**++	
 	
 	
  %7#+ 	% 	%J"2A2ICf}}c"""b#t$$$>f%%D !dEJ'' 	#<<??D???++ 	8Db'4    Wr2ug}mTTTTE"e,,v7GG/T.UVVV )+ 	) 	)J"2A2IC1Q3x!! )'!_
 )E"c4(((	E"gsr7 





 s   =H 
H3H..H3c                      G d d          }d } |            }	 || _         t          | |d|           | ` n# | ` w xY w|j        S )z4Return a list of PNG chunks representing this image.c                       e Zd Zg Zd Zd ZdS )getchunks.<locals>.collectorc                     d S rV   r,   r  s     r.   r  z"getchunks.<locals>.collector.write  s    Dr-   c                 :    | j                             |           d S rV   )rP   rr   )rY   r   s     r.   rr   z#getchunks.<locals>.collector.append  s    IU#####r-   N)r&   r'   r(   rP   r  rr   r,   r-   r.   	collectorr    s7        	 	 		$ 	$ 	$ 	$ 	$r-   r  c                     d                     |          }t          t          |t          |                              }|                     |||f           d S )Nr-   )r  r  rR   rr   r  s       r.   rr   zgetchunks.<locals>.append  sM    xx~~&vc{{++,,
		3c"#####r-   N)r  r  rP   )rm  paramsr  rr   rW   s        r.   	getchunksr    s    $ $ $ $ $ $ $ $$ $ $
 
Bb"dF###NNBN7Ns   8 <z.pngz.apngz	image/png)r   )@r  loggingrer   r&  rD   r?   r   r   r   r   r   r   r	   _binaryr
   r   r   ra   r   r   r  r   r  
_deprecater   	getLoggerr&   rx   compiler   rb   rD  r   r   	SAFEBLOCKrG   r   r%   r0   rB   rM   rR   rT   r   r   r   r   rE  rG  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 G G G G G G G G G G G G ! ! ! ! ! ! ! ! ! ! ! !       ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !		8	$	$	L	!	!	' 
 !+
 
2 "*011$
 ~%    w   *    G       / / / /V V V V V V V Vr    3   ,M3 M3 M3 M3 M3 M3 M3 M3hR4 R4 R4 R4 R4 R4 R4 R4r
     K
 K
 K
 K
 K
9& K
 K
 K
f
 
	
	"	! 	&  + + + + + + + +
 
 
 
 
 
 
 
z* z* z*z+ + + #+U    L  >  L'w ? ? ?  L' / / /  +Y 7 7 7  ,-/@ A A A  L' 5 5 5 5 5r-   