§
    œ"²c¢‹  ã                   ó.  — 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  G d„ d	e¦  «        Zej        Zd
„ Z G d„ de	j	        ¦  «        ZddddœZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd'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(d"„Z*d)d$„Z+ ej,        ej-        ee¦  «          ej.        ej-        e¦  «          ej/        ej-        e¦  «          ej0        ej-        d%¦  «          ej1        ej-        d&¦  «         dS )*é    N)ÚIntEnumé   )ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16lec                   ó   — e Zd ZdZdZdZdZdS )ÚLoadingStrategyz.. versionadded:: 9.1.0r   r   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYS© ó    ú4/usr/lib/python3/dist-packages/PIL/GifImagePlugin.pyr   r   '   s$   € € € € € Ø!Ð!à€OØ'(Ð$Ø€J€J€Jr   r   c                 ó   — | d d…         dv S )Né   )s   GIF87as   GIF89ar   )Úprefixs    r   Ú_acceptr   6   s   € Ø�"�1�"Œ:Ð/Ð/Ð/r   c                   ó†   ‡ — e Zd ZdZdZdZdZd„ Zd„ Zd„ Z	e
d„ ¦   «         Ze
d	„ ¦   «         Zd
„ Zdd„Zˆ fd„Zd„ Zd„ Zˆ xZS )ÚGifImageFileÚGIFzCompuserve GIFFNc                 óŽ   — | j                              d¦  «        }|r(|d         r | j                              |d         ¦  «        S d S )Nr   r   )ÚfpÚread)ÚselfÚss     r   ÚdatazGifImageFile.dataG   sC   € ØŒG�LŠL˜‰OŒOˆØð 	&��1”ð 	&Ø”7—<’<  !¤Ñ%Ô%Ð%Øˆtr   c                 ó°   — t          dt          |¦  «        d¦  «        D ]6}|dz  ||         cxk    r||dz            cxk    r||dz            k    sn  dS Œ7dS )Nr   é   r   r   TF)ÚrangeÚlen)r$   ÚpÚis      r   Ú_is_palette_neededzGifImageFile._is_palette_neededM   sy   € Ý�q�#˜a™&œ& !Ñ$Ô$ð 	ð 	ˆAØ˜‘F˜a œdÐ:Ð:Ò:Ð: a¨¨A©¤hÐ:Ð:Ò:Ð:°!°A¸±E´(Ò:Ð:Ð:Ð:Ø�t�tð ;àˆur   c                 ó„  — | j                              d¦  «        }t          |¦  «        sd}t          |¦  «        ‚|d d…         | j        d<   t          |d¦  «        t          |d¦  «        f| _        g | _        |d         }|dz  dz   }|d	z  re|d
         | j        d<   | j                              d|z  ¦  «        }|                      |¦  «        r#t          j
        d|¦  «        }|x| _        | _        | j         | _        | j                              ¦   «         | _        d | _        d | _        |                      d¦  «         d S )Né   znot a GIF filer   Úversioné   é
   é   r   é€   é   Ú
backgroundr(   ÚRGBr   )r"   r#   r   ÚSyntaxErrorÚinfoÚi16Ú_sizeÚtiler-   r   ÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ	_n_framesÚ_is_animatedÚ_seek)r$   r%   ÚmsgÚflagsÚbitsr+   s         r   Ú_openzGifImageFile._openS   s+  € ð ŒG�LŠL˜ÑÔˆÝ�q‰zŒzð 	#Ø"ˆCÝ˜cÑ"Ô"Ð"à   ! œuˆŒ	�)ÑÝ˜˜A‘Y”Y¥ A q¡	¤	Ð)ˆŒ
ØˆŒ	Ø�"”ˆØ˜‘	˜Q‰ˆà�3‰;ð 	7à&'¨¤eˆDŒI�lÑ#à”—’˜Q $™YÑ'Ô'ˆAØ×&Ò& qÑ)Ô)ð 7Ý Ô$ U¨AÑ.Ô.�Ø56Ð6�Ô# d¤là”7ˆŒØœŸš™œˆŒØˆŒØ ˆÔØ�
Š
�1‰Œˆˆˆr   c                 ó$  — | j         €ƒ|                      ¦   «         }	 	 |                      |                      ¦   «         dz   d¦  «         Œ,# t          $ r |                      ¦   «         dz   | _         Y nw xY w|                      |¦  «         | j         S )NTr   F)rC   rA   rE   ÚEOFErrorÚseek©r$   Úcurrents     r   Ún_frameszGifImageFile.n_framesp   s’   € àŒ>Ð!Ø—i’i‘k”kˆGð1ð7Ø—J’J˜tŸyšy™{œ{¨Q™°Ñ6Ô6Ð6ð7øåð 1ð 1ð 1Ø!%§¢¡¤¨q¡�”��ð1øøøà�IŠI�gÑÔÐØŒ~Ðs   �-A
 Á
&A3Á2A3c                 ó   — | j         €�| j        �| j        dk    | _         ni|                      ¦   «         }|rd| _         nK	 |                      dd¦  «         d| _         n# t          $ r
 d| _         Y nw xY w|                      |¦  «         | j         S )Nr   TF)rD   rC   rA   rE   rK   rL   rM   s     r   Úis_animatedzGifImageFile.is_animated|   s¯   € àÔÐ$ØŒ~Ð)Ø$(¤N°aÒ$7�Ô!Ð!àŸ)š)™+œ+�Øð 	'Ø(,�DÔ%Ð%ð2ØŸ
š
 1 eÑ,Ô,Ð,Ø,0˜Ô)Ð)øÝ#ð 2ð 2ð 2Ø,1˜Ô)Ð)Ð)ð2øøøð —I’I˜gÑ&Ô&Ð&ØÔ Ð s   ¿A ÁA1Á0A1c                 ój  — |                       |¦  «        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   r   zno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚimrE   r)   rK   rL   )r$   ÚframeÚ
last_frameÚfÚerF   s         r   rL   zGifImageFile.seek�   sÏ   € Ø×Ò Ñ&Ô&ð 	ØˆFØ�4”<ÒÐØˆDŒGØ�JŠJ�q‰MŒMˆMà”\ˆ
Ý�t”| aÑ'¨°©Ñ3Ô3ð 	+ð 	+ˆAð+Ø—
’
˜1‘”��øÝð +ð +ð +Ø—	’	˜*Ñ%Ô%Ð%Ø2�Ý˜s‘m”m¨Ð*øøøøð+øøøð	+ð 	+s   Á$A:Á:
B0Â'B+Â+B0Tc                 óH  ‡ — |dk    rMd‰ _         d ‰ _        d‰ _        ‰ j                             ‰ j        ¦  «         d‰ _        d‰ j        v r‰ j        d= n‰ j        r|r‰  	                    ¦   «          |‰ j        dz   k    rd|› �}t          |¦  «        ‚‰ j        ‰ _        ‰ j         rO‰ j                             ‰ j         ¦  «         ‰                      ¦   «         r	 ‰                      ¦   «         °d‰ _         ‰ j                             d¦  «        }|r|dk    rt          ‚d }i }d }d }d }		 |s‰ j                             d¦  «        }|r|dk    r�n|dk    �rx‰ j                             d¦  «        }‰                      ¦   «         }
|d         d	k    r?|
d         }|dz  r|
d
         }t          |
d¦  «        dz  |d<   d|z  }|dz	  }|r|‰ _        nÔ|d         dk    r?d}|
r||
z  }‰                      ¦   «         }
|
°d|v r|dxx         d|z   z  cc<   n||d<   d }Œò|d         dk    r}|dk    rw|
‰ j                             ¦   «         f|d<   |
d d…         dk    rK‰                      ¦   «         }
t#          |
¦  «        d
k    r$|
d         dk    rt          |
d¦  «        ‰ j        d<   ‰                      ¦   «         r	 ‰                      ¦   «         °�n�|dk    �r…‰ j                             d¦  «        }t          |d¦  «        t          |d¦  «        }}|t          |d¦  «        z   |t          |d¦  «        z   }}|‰ j        d         k    s|‰ j        d         k    rV|rTt'          |‰ j        d         ¦  «        t'          |‰ j        d         ¦  «        f‰ _        t+          j        ‰ j        ¦  «         ||||f}	|d         }|dz  dk    }|dz  rR|dz  dz   }‰ j                             d
|z  ¦  «        }‰                      |¦  «        rt1          j        d|¦  «        }nd }‰ j                             d¦  «        d         }‰ j                             ¦   «         ‰ _         n	 d }�Œ6|€t          ‚|‰ _        |sd S g ‰ _        ‰ j        r%‰ j                             ‰ j        ‰ j        ¦  «         |�|n‰ j        ‰ _        |‰ _        |dk    r^‰ j        r)t@          tB          j"        k    r|�d!nd‰ _#        nd"‰ _#        nd#‰ _#        |s‰ j        rdd$l$m$}  |‰ j        ¦  «        }|‰ _%        nÍ‰ j#        d"k    rÂt@          tB          j&        k    s|r«d ‰ _'        d%‰ j        v re‰ j         (                    ‰ j        d%         d¦  «         ‰ j         )                    d!t*          j*        j+        ¦  «        ‰ _        d!‰ _#        ‰ j        d%= n6d‰ _#        ‰ j         )                    dt*          j*        j+        ¦  «        ‰ _        ˆ fd&„}|	‰ _        	 ‰ j        dk     r	d ‰ _        �nb‰ j        dk    r»‰ j        \  }}}}||z
  ||z
  f}t+          j        |¦  «         d"}‰ j         ,                    d%|¦  «        }|�‰ j#        d'v rd!} ||¦  «        d(z   }n1‰ j         ,                    d)d¦  «        }‰ j#        d'v rd} ||¦  «        }t*          j-         .                    |||¦  «        ‰ _        nœ‰ j        �&‰  /                    ‰ j        ‰ j        ¦  «        ‰ _        no|�m‰ j        \  }}}}||z
  ||z
  f}t+          j        |¦  «         d"}|}‰ j#        d'v rd!} ||¦  «        d(z   }t*          j-         .                    |||¦  «        ‰ _        n# t`          $ r Y nw xY w|�Md}|�1|dk    r t@          tB          j"        k    r
|‰ j        d%<   n‰ j#        d'vr|}d*||||f‰ j         |||ffg‰ _        | ,                    d¦  «        r|d         ‰ j        d<   d+D ](}||v r||         ‰ j        |<   Œ|‰ j        v r‰ j        |= Œ)d S ),Nr   éÿÿÿÿÚcommentr   zcannot seek to frame ó   ;Tó   !éù   r(   r2   Údurationé   r   éþ   r   ó   
éÿ   Ú	extensionr5   ó   NETSCAPE2.0Úloopó   ,é	   é   r   r1   é@   r4   r3   r7   FÚRGBAÚPÚL)ÚcopyÚtransparencyc                 óv   •— ‰j         r+t          ‰j         j        | dz  | dz  dz   …         ¦  «        } n| | | f} | S )Nr(   )Ú_frame_paletteÚtupler?   )Úcolorr$   s    €r   Ú_rgbz GifImageFile._seek.<locals>._rgbR  sK   ø€ ØÔ"ð .Ý˜dÔ1Ô9¸%À!¹)ÀeÈaÁiÐRSÁmÐ:SÔTÑUÔU��à  uÐ-�ØˆLr   ©r7   rl   )r   r6   Úgif)r`   re   )1Ú_GifImageFile__offsetÚdisposerT   r@   rL   rB   Údisposal_methodr9   r<   ÚloadÚ
ValueErrorr"   r&   r#   rK   r:   rA   r*   ÚsizeÚmaxr;   r   Ú_decompression_bomb_checkr-   r   r=   rU   ÚpasteÚdispose_extentr>   rr   Ú_frame_transparencyÚLOADING_STRATEGYr   r   Úmodero   r?   r   ÚpyaccessÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillÚ_cropÚAttributeError)r$   rV   Úupdate_imagerF   r%   r?   r9   Úframe_transparencyÚ	interlaceÚframe_dispose_extentÚblockrG   Údispose_bitsr\   Úx0Úy0Úx1Úy1rH   r+   ro   ru   Údispose_sizeÚdispose_modert   rp   Úks   `                          r   rE   zGifImageFile._seekŸ   s	  ø€ à�AŠ:ˆ:àˆDŒMØˆDŒLØˆDŒLØŒH�MŠM˜$œ-Ñ(Ô(Ð(Ø#$ˆDÔ Ø˜DœIÐ%Ð%Ø”I˜iÐ(øð Œyð ˜\ð Ø—	’	‘”�à�D”L 1Ñ$Ò$Ð$Ø1¨%Ð1Ð1ˆCÝ˜S‘/”/Ð!à”(ˆŒØŒ=ð 	àŒG�LŠL˜œÑ'Ô'Ð'Ø—)’)‘+”+ð Øð —)’)‘+”+ð àˆDŒMàŒG�LŠL˜‰OŒOˆØð 	�A˜’I�IÝˆNàˆàˆØ!ÐØˆ	Ø#Ðð^	àð $Ø”G—L’L ‘O”O�Øð X˜˜Tš	˜	Ùà�d’‘ð ”G—L’L ‘O”O�ØŸ	š	™œ�Ø�Q”4˜3’;�;ð " !œH�EØ˜q‘yð 6Ø-2°1¬XÐ*Ý'*¨5°!¡}¤}°rÑ'9�D˜Ñ$ð $.°Ñ#5�LØ#/°1Ñ#4�LØ#ð <ð
 0<˜Ô,øØ�q”T˜S’[�[ð "�Gð  ð ,Ø 5Ñ(˜Ø $§	¢	¡¤˜ð  ð ,ð ! DÐ(Ð(à˜Y˜˜œ¨5°7©?Ñ:˜˜™˜à*1˜˜Y™Ø�AØØ�q”T˜S’[�[ U¨a¢Z Zð ).¨t¬w¯|ª|©~¬~Ð(=�D˜Ñ%Ø˜S˜b˜S”z ^Ò3Ð3Ø $§	¢	¡¤˜Ý˜u™:œ:¨š?˜?¨u°Q¬x¸1ª}¨}Ý03°E¸1±´˜DœI fÑ-Ø—i’i‘k”kð Øð —i’i‘k”kð ùð �d’‘ð ”G—L’L ‘O”O�õ ˜Q ™œ¥C¨¨1¡I¤I�B�Ø�c ! Q™iœi™¨­c°!°Q©i¬i©�B�Ø˜œ 1œÒ%Ð%¨¨d¬i¸¬lÒ):Ð):ÀÐ):Ý!$ R¨¬°1¬Ñ!6Ô!6½¸BÀÄ	È!ÄÑ8MÔ8MÐ!M�D”JÝÔ3°D´JÑ?Ô?Ð?Ø')¨2¨r°2 ~Ð$Ø˜!œ�à" R™Z¨AÒ-�	à˜3‘;ð (Ø! A™I¨™?�DØœŸš Q¨$¡YÑ/Ô/�AØ×.Ò.¨qÑ1Ô1ð (Ý".Ô"2°5¸!Ñ"<Ô"<˜˜à"'˜ð ”w—|’| A‘” qÔ)�Ø $¤§¢¡¤�”Øð àˆAñ}^	ð@ ÐåˆNàˆŒØð 	ØˆFàˆŒ	àŒ<ð 	=ØŒG�MŠM˜$œ,¨Ô(;Ñ<Ô<Ð<à)0Ð)<˜g˜gÀ$ÔBUˆÔØ#5ˆÔ Ø�AŠ:ˆ:ØÔ"ð  Ý#¥Ô'AÒAÐAØ*<Ð*H  Èe�D”I�Ià #�D”I�Ià�”	àð 4˜tÔ2ð 4Ø%Ð%Ð%Ð%Ð%Ð%à˜$˜tÔ2Ñ3Ô3�Ø"ˆDŒLˆLàŒy˜CÒÐå$­Ô(XÒXÐXØð Yð %)�D”MØ%¨¬Ð2Ð2Øœ×/Ò/°´	¸.Ô0IÈ1ÑMÔMÐMØ"&¤'§/¢/°&½%¼,Ô:UÑ"VÔ"V˜œØ$*˜œ	Ø œI nÐ5Ð5à$)˜œ	Ø"&¤'§/¢/°%½¼Ô9TÑ"UÔ"U˜œð	ð 	ð 	ð 	ð 	ð 3ˆÔð+	ØÔ# aÒ'Ð'à#�”‘ØÔ%¨Ò*Ð*ð "&Ô!4‘��B˜˜BØ " R¡¨¨b©Ð1�åÔ/°Ñ=Ô=Ð=ð  #�Øœ	Ÿš nÐ6HÑIÔI�ØÐ$Ø”y OÐ3Ð3Ø'-˜Ø $  U¡¤¨dÑ 2˜øà œIŸMšM¨,¸Ñ:Ô:�EØ”y OÐ3Ð3Ø',˜Ø $  U¡¤˜Ý$œzŸš¨|¸\È5ÑQÔQ�”�ð ”7Ð&à#'§:¢:¨d¬g°tÔ7JÑ#KÔ#K�D”L�LØ'Ð3Ø%)Ô%8‘N�B˜˜B Ø$&¨¡G¨R°"©WÐ#5�LåÔ3°LÑAÔAÐAØ#&�LØ.�EØ”y OÐ3Ð3Ø'-˜Ø $ Ð%7Ñ 8Ô 8¸4Ñ ?˜Ý#(¤:§?¢?°<ÀÈuÑ#UÔ#U�D”LøøÝð 	ð 	ð 	ØˆDð	øøøð Ð ØˆLØ!Ð-Ø˜A’:�:Ý'­?Ô+EÒEÐEØ4F˜œ	 .Ñ1øØ”Y oÐ5Ð5Ø#5�Lð Ø˜˜R Ð$Ø”MØ˜9 lÐ3ð	ðˆDŒIð �8Š8�IÑÔð 	3Ø#'¨	¤?ˆDŒI�iÑ Ø*ð 	!ð 	!ˆAØ�DˆyˆyØ# Aœw�”	˜!‘�Ø�d”i��Ø”I˜a�Løð		!ð 	!s   ×<E6]3 Ý3
^ Ý?^ c                 ó  •— | j         rdnd}d | _        | j        dk    r8| j        �0t          j                             || j        | j        ¦  «        | _        n|| j	        dv rs| j        | _        | j         rYt          j                             d| j        | j        pd¦  «        | _         | j        j
        | j                              ¦   «         Ž  nd | _        || _	        d | _         t          ¦   «                              ¦   «          d S )Nrm   rn   r   rv   )rr   Ú_prev_imrT   r‚   r   r‹   rŒ   r}   rU   r„   Ú
putpaletteÚgetdataÚsuperÚload_prepare)r$   Ú	temp_modeÚ	__class__s     €r   r¡   zGifImageFile.load_prepare   sò   ø€ ØÔ.Ð7�C�C°Cˆ	ØˆŒØŒ<˜1ÒÐØÔ'Ð3Ýœ*Ÿ/š/Ø˜tœy¨$Ô*Bñô �”øð ŒY˜/Ð)Ð)Ø œGˆDŒMØÔ"ð Ýœ*Ÿ/š/¨#¨t¬y¸$Ô:RÐ:WÐVWÑXÔX�”Ø"�”Ô" DÔ$7×$?Ò$?Ñ$AÔ$AÐBÐBÐBà�”ØˆŒ	Ø"ˆÔå‰Œ×ÒÑÔÐÐÐr   c                 ó
  — | j         dk    rŒ| j        dk    rt          t          j        k    rj| j        �(| j                             | j        d¦  «         d| _        nd| _        | j                             | j        t          j
        j        ¦  «        | _        d S | j        sd S | j        �;| j                             | j        d¦  «         | j                             d¦  «        }n| j                             d¦  «        }|                      || j        ¦  «        }| j        | _        | j        j        | _        |j        dk    r#| j                             || j        |¦  «         d S | j                             || j        ¦  «         d S )Nr   rm   rl   r7   )rT   r„   rƒ   r   r   r‚   rU   r†   r‡   r   rˆ   r‰   r�   r�   r�   r€   )r$   Úframe_ims     r   Úload_endzGifImageFile.load_end´  sS  € ØŒ<˜1ÒÐØŒy˜CÒÐÕ$4½Ô8RÒ$RÐ$RØÔ+Ð7Ø”G×+Ò+¨DÔ,DÀaÑHÔHÐHØ &�D”I�Ià %�D”IØœ'Ÿ/š/¨$¬)µU´\Ô5PÑQÔQ�”ØˆFØŒ}ð 	ØˆFØÔ#Ð/ØŒG×#Ò# DÔ$<¸aÑ@Ô@Ð@Ø”w—’ vÑ.Ô.ˆHˆHà”w—’ uÑ-Ô-ˆHØ—:’:˜h¨Ô(;Ñ<Ô<ˆà”-ˆŒØ”G”LˆŒ	ØŒ=˜FÒ"Ð"ØŒG�MŠM˜( DÔ$7¸ÑBÔBÐBÐBÐBàŒG�MŠM˜( DÔ$7Ñ8Ô8Ð8Ð8Ð8r   c                 ó   — | j         S ©N)rT   )r$   s    r   rA   zGifImageFile.tellÎ  s
   € ØŒ|Ðr   )T)r   r   r   ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingr>   r&   r-   rI   ÚpropertyrO   rQ   rL   rE   r¡   r¦   rA   Ú__classcell__)r£   s   @r   r   r   ?   s÷   ø€ € € € € à€FØ)ÐØ(-Ð%à€Nðð ð ðð ð ðð ð ð: ð	ð 	ñ „Xð	ð ð!ð !ñ „Xð!ð$+ð +ð +ð !ð !ð !ð !ðBð ð ð ð ð(9ð 9ð 9ð4ð ð ð ð ð ð r   r   rn   rm   )Ú1rn   rm   c                 ó°  — | j         t          v r|                      ¦   «          | S t          j        | j         ¦  «        dk    r�|                      dt          j        j        ¬¦  «        } | j        j         dk    rI| j        j	         
                    ¦   «         D ]*}|d         dk    r| j        j	        |         | j        d<    nŒ+| S |                      d¦  «        S )	a  
    Takes an image (or frame), returns an image in a mode that is appropriate
    for saving in a Gif.

    It may return the original image, or it may return an image converted to
    palette or 'L' mode.

    :param im: Image object
    :returns: Image object
    r7   rm   ©r?   rl   r(   r   rp   rn   )r„   ÚRAWMODEr{   r   Úgetmodebaser‡   ÚPaletteÚADAPTIVEr?   ÚcolorsÚkeysr9   )rU   Úrgbas     r   Ú_normalize_moder¸   Ù  sÈ   € ð 
„w•'ÐÐØ
�Š‰	Œ	ˆ	Øˆ	ÝÔ˜œÑ!Ô! UÒ*Ð*Ø�ZŠZ˜¥U¤]Ô%;ˆZÑ<Ô<ˆØŒ:Œ?˜fÒ$Ð$Øœ
Ô)×.Ò.Ñ0Ô0ð ð �Ø˜”7˜a’<�<Ø.0¬jÔ.?ÀÔ.E�B”G˜NÑ+Ø�Eð  ð ˆ	Ø�:Š:�c‰?Œ?Ðr   c                 óÊ  — d}|rgt          |t          t          t          f¦  «        rt          |dd…         ¦  «        }t          |t          j        ¦  «        rt          |j        ¦  «        }| j        dk    r%|s"| j                             d¦  «        dd…         }nC|s&t          d„ t          d¦  «        D ¦   «         ¦  «        }t	          j        d|¬¦  «        | _        |rÎg }t          dt          |¦  «        d¦  «        D ]V}t          |||dz   …         ¦  «        }| j        j                             |¦  «        }||v rd}|                     |¦  «         ŒWt          |¦  «        D ]1\  }}|€*t          t          |¦  «        ¦  «        D ]}||vr|||<    nŒŒ2|                      |¦  «        } n(t#          | |¦  «        }|�|                      ||¦  «        S || j        _        | S )	at  
    Normalizes the palette for image.
      - Sets the palette to the incoming palette, if provided.
      - Ensures that there's a palette for L mode images
      - Optimizes the palette if necessary/desired.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: Image object
    Ni   rm   r7   c              3   ó    K  — | ]	}|d z  V — Œ
dS )r(   Nr   )Ú.0r,   s     r   ú	<genexpr>z%_normalize_palette.<locals>.<genexpr>  s&   è è € Ð&BÐ&B°! q¨A¡vÐ&BÐ&BÐ&BÐ&BÐ&BÐ&Br   r°   r   r(   )Ú
isinstanceÚbytesÚ	bytearrayÚlistr   r?   r„   rU   Ú
getpaletter)   r*   rs   rµ   rŠ   ÚappendÚ	enumerateÚremap_paletteÚ_get_optimize)	rU   r?   r9   Úsource_paletteÚused_palette_colorsr,   Úsource_colorÚindexÚjs	            r   Ú_normalize_paletterË   ò  s  € ð €NØð 8å�g¥¥yµ$Ð7Ñ8Ô8ð 	6Ý& w¨t°¨t¤}Ñ5Ô5ˆNÝ�g�|Ô8Ñ9Ô9ð 	8Ý& w¤Ñ7Ô7ˆNà	„w�#‚~€~Øð 	;ØœU×-Ò-¨eÑ4Ô4°T°c°TÔ:ˆNøàð 	CÝ&Ð&BÐ&Bµu¸S±z´zÐ&BÑ&BÔ&BÑBÔBˆNÝ!Ô.¨u¸nÐMÑMÔMˆŒ
àð IØ ÐÝ�q�#˜nÑ-Ô-¨qÑ1Ô1ð 	.ð 	.ˆAÝ  °°A¸±E°	Ô!:Ñ;Ô;ˆLØ”JÔ%×)Ò)¨,Ñ7Ô7ˆEØÐ+Ð+Ð+Ø�Ø×&Ò& uÑ-Ô-Ð-Ð-Ý!Ð"5Ñ6Ô6ð 	ð 	‰HˆAˆuØˆ}Ý�sÐ#6Ñ7Ô7Ñ8Ô8ð ð �AØÐ 3Ð3Ð3Ø12Ð+¨AÑ.Ø˜ð 4øð ×ÒÐ1Ñ2Ô2ˆˆå+¨B°Ñ5Ô5ÐØÐ*Ø×#Ò#Ð$7¸ÑHÔHÐHà'€B„JÔØ€Ir   c           	      ó*  — t          | ¦  «        }|j                             ¦   «         D ] \  }}| j                             ||¦  «         Œ!t          ||| j        ¦  «        }t          || j        ¦  «        D ]}|                     |¦  «         Œd}t          | ¦  «        r|dz  }t          || d|¦  «         dt          | ¦  «        f|_
        t          j        ||dd| j        z   dt          |j                 fg¦  «         |                     d¦  «         d S )Nr   rk   ©r   r   r1   rw   ó    )r¸   r9   ÚitemsÚencoderinfoÚ
setdefaultrË   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr   Ú_saver}   r±   r„   )rU   r"   r?   Úim_outr›   Úvr%   rG   s           r   Ú_write_single_framerÚ   &  s  € Ý˜RÑ Ô €FØ”×!Ò!Ñ#Ô#ð (ð (‰ˆˆ1Ø
Œ×!Ò! ! QÑ'Ô'Ð'Ð'Ý ¨°´Ñ@Ô@€Få ¨¬Ñ7Ô7ð ð ˆØ
�Š�‰Œˆˆð €EÝ�RÑÔð Ø˜‘
ˆÝ˜˜B ¨Ñ.Ô.Ð.à�}¨RÑ0Ô0Ð1€FÔÝ„O�F˜B %¨°"´'Ñ)9¸1½gÀfÄkÔ>RÐ!SÐ TÑUÔUÐUà‡H‚HˆU�O„O€O€O€Or   c                 ó  — t          |¦  «        t          | ¦  «        k    rt          j        || ¦  «        }n;t          j        |                     d¦  «        |                      d¦  «        ¦  «        }|                     ¦   «         S )Nr7   )Ú_get_palette_bytesr   Úsubtract_modulor‡   Úgetbbox)Úbase_imÚim_frameÚdeltas      r   Ú_getbboxrâ   ;  ss   € Ý˜(Ñ#Ô#Õ'9¸'Ñ'BÔ'BÒBÐBÝÔ*¨8°WÑ=Ô=ˆˆåÔ*Ø×Ò˜UÑ#Ô# W§_¢_°UÑ%;Ô%;ñ
ô 
ˆð �=Š=‰?Œ?Ðr   c           	      óâ  — | j                              d¦  «        }| j                              d| j                             d¦  «        ¦  «        }g }d}d }t          j        | g| j                              dg ¦  «        ¦  «        D �]i}t          j        |¦  «        D �]P}	t          |	                     ¦   «         ¦  «        }	|dk    rA|	j         	                    ¦   «         D ]'\  }
}|
dk    rŒ| j          
                    |
|¦  «         Œ(| j                              ¦   «         }t          |	||¦  «        }	d|	j        v r!| 
                    d|	j        d         ¦  «         t          |t          t          f¦  «        r||         |d<   n|€d|	j        v r|	j        d         |d<   t          |t          t          f¦  «        r||         |d<   |dz  }|�r|d         }t          |d         |	¦  «        }|s3|                     d¦  «        r|d	         dxx         |d         z  cc<   �Œ„|                     d¦  «        d
k    r—|€…| j                              d| j                             dd¦  «        ¦  «        }t!          |	|¦  «        }t#          j        d|	j        |¦  «        }|                     |d         d         j        ¦  «         t          ||	¦  «        }nd }|                     |	||dœ¦  «         �ŒR�Œkt/          |¦  «        dk    r˜|D ]“}|d         }	|d         s1t1          |	|d	         ¦  «        D ]}|                     |¦  «         Œd}n8|sd|d	         d<   |	                     |d         ¦  «        }	|d         d d
…         }t7          ||	||d	         ¦  «         Œ”dS d| j         v rKt          | j         d         t          t          f¦  «        r&t9          | j         d         ¦  «        | j         d<   d S d S d S )Nr`   Údisposalr   Úappend_imagesrp   r   r[   rU   rÐ   r   )r   r   r   rm   )rU   ÚbboxrÐ   ræ   rÍ   TÚinclude_color_table)rÐ   rŠ   r9   Ú	itertoolsÚchainr	   ÚIteratorr¸   ro   rÏ   rÑ   rË   r½   rÀ   rs   râ   Ú_get_backgroundr   Únewr}   rž   r?   rÂ   r*   rÒ   rÓ   ÚcropÚ_write_frame_dataÚsum)rU   r"   r?   r`   rä   Ú	im_framesÚframe_countÚbackground_imÚ
imSequencerà   r›   rÙ   rÐ   Úpreviousræ   rt   r6   Ú
frame_datar%   Úoffsets                       r   Ú_write_multiple_framesr÷   E  s7  € àŒ~×!Ò! *Ñ-Ô-€HØŒ~×!Ò! *¨b¬g¯kªk¸*Ñ.EÔ.EÑFÔF€Hà€IØ€KØ€MÝ”o r d¨B¬N×,>Ò,>¸ÐPRÑ,SÔ,SÑTÔTð *Yñ *Yˆ
Ý%Ô.¨zÑ:Ô:ð )	Yñ )	YˆHå& x§}¢}¡¤Ñ7Ô7ˆHØ˜aÒÐØ$œM×/Ò/Ñ1Ô1ð 4ð 4‘D�A�qØ˜NÒ*Ð*Ø Ø”N×-Ò-¨a°Ñ3Ô3Ð3Ð3àœ.×-Ò-Ñ/Ô/ˆKÝ)¨(°G¸[ÑIÔIˆHØ ¤Ð.Ð.Ø×&Ò& ~°x´}À^Ô7TÑUÔUÐUÝ˜(¥T­5 MÑ2Ô2ð DØ*2°;Ô*?�˜JÑ'Ð'ØÐ! j°H´MÐ&AÐ&AØ*2¬-¸
Ô*C�˜JÑ'Ý˜(¥T­5 MÑ2Ô2ð @Ø*2°;Ô*?�˜JÑ'Ø˜1ÑˆKàñ à$ Rœ=�Ý ¨¤°Ñ9Ô9�Øð à"—’ zÑ2Ô2ð WØ  Ô/°
Ð;Ð;Ô;¸{È:Ô?VÑVÐ;Ð;Ñ;ÙØ—?’? :Ñ.Ô.°!Ò3Ð3Ø$Ð,Ø "¤× 2Ò 2Ø*¨B¬G¯KªK¸È	Ñ,RÔ,Rñ!ô !˜õ &5°X¸uÑ%EÔ%E˜
Ý(-¬	°#°x´}ÀjÑ(QÔ(Q˜Ø%×0Ò0°¸1´¸dÔ1CÔ1KÑLÔLÐLÝ# M°8Ñ<Ô<�Døà�Ø×Ò H°dÈ;ÐWÐWÑXÔXÐXÑXñS)	YõV ˆ9�~„~˜ÒÐØ#ð 	Oð 	OˆJØ! $Ô'ˆHØ˜fÔ%ð 0å+¨H°jÀÔ6OÑPÔPð  ð  �AØ—H’H˜Q‘K”K�K�KØ��ð ð LØGK�J˜}Ô-Ð.CÑDà#Ÿ=š=¨°FÔ);Ñ<Ô<�Ø# FÔ+¨B¨Q¨BÔ/�Ý˜b (¨F°J¸}Ô4MÑNÔNÐNÐNØˆtØ	�r”~Ð	%Ð	%­*Ø
Œ�zÔ"¥T­5 Mñ+ô +Ð	%õ &)¨¬¸
Ô)CÑ%DÔ%DˆŒ�zÑ"Ð"Ð"ð	 
&Ð	%Ð	%Ð	%r   c                 ó,   — t          | ||d¬¦  «         d S )NT)Úsave_all)r×   )rU   r"   Úfilenames      r   Ú	_save_allrû   ‘  s   € Ý	ˆ"ˆb�( TÐ*Ñ*Ô*Ð*Ð*Ð*r   Fc                 óš  — d| j         v s	d| j        v r4| j                              d| j                             d¦  «        ¦  «        }n%d }| j                              dd¦  «        | j         d<   |rt          | ||¦  «        st	          | ||¦  «         |                     d¦  «         t          |d¦  «        r|                     ¦   «          d S d S )Nr?   ÚoptimizeTr]   Úflush)rÐ   r9   rŠ   r÷   rÚ   rÓ   Úhasattrrþ   )rU   r"   rú   rù   r?   s        r   r×   r×   •  sÏ   € à�B”NÐ"Ð" i°2´7Ð&:Ð&:Ø”.×$Ò$ Y°´·²¸IÑ0FÔ0FÑGÔGˆˆàˆØ%'¤^×%7Ò%7¸
ÀDÑ%IÔ%IˆŒ�zÑ"àð -Õ1°"°b¸'ÑBÔBð -Ý˜B  GÑ,Ô,Ð,à‡H‚HˆT�N„N€Nåˆr�7ÑÔð Ø
�Š‰
Œ
ˆ
ˆ
ˆ
ðð r   c                 óp   — | j                              dd¦  «        }t          | j        ¦  «        dk     rd}|S )Nr‘   r   é   r   )rÐ   rŠ   Úminr}   )rU   r‘   s     r   rÔ   rÔ   ¦  s9   € Ø”×"Ò" ;°Ñ2Ô2€Iõ ˆ2Œ7�|„|�bÒÐØˆ	àÐr   c                 ó  — d}	 d|j         v r|j         d         }n|j        d         }t          |¦  «        }d}t          ||j         ¦  «        }|�)	 |                     |¦  «        }n*# t
          $ r d}Y nw xY wn# t          t
          f$ r Y nw xY wd|j         v rt          |j         d         dz  ¦  «        }nd}t          |j                              dd¦  «        ¦  «        }|s|dk    s|r‡|rdnd}	|	|d	z  z  }	|sd}|                      d
t          d¦  «        z   t          d¦  «        z   t          |	¦  «        z   t          |¦  «        z   t          |¦  «        z   t          d¦  «        z   ¦  «         |j                              d¦  «        }
|
r*t          |¦  «        }t          |¦  «        }|r
|dz  }||z  }|                      dt          |d         ¦  «        z   t          |d         ¦  «        z   t          |j        d         ¦  «        z   t          |j        d         ¦  «        z   t          |¦  «        z   ¦  «         |
r$|r"|                      t          |¦  «        ¦  «         |                      t          d¦  «        ¦  «         d S )NFrp   Tr`   r2   r   rä   r   r   r^   r_   rj   rç   r4   rh   r1   )rÐ   r9   ÚintrÅ   rÉ   r|   ÚKeyErrorrŠ   rÓ   r   Úo16rÜ   Ú_get_color_table_sizer}   Ú_get_header_palette)r"   rU   rö   rG   Útransparent_color_existsrp   rÇ   r`   rä   Úpacked_flagrç   Úpalette_bytesÚcolor_table_sizes                r   rÕ   rÕ   °  sç  € Ø$Ðð1Ø˜Rœ^Ð+Ð+Øœ>¨.Ô9ˆLˆLàœ7 >Ô2ˆLÝ˜<Ñ(Ô(ˆð
 $(Ð å+¨B°´Ñ?Ô?ÐØÐ*ð1Ø2×8Ò8¸ÑFÔF��øÝð 1ð 1ð 1Ø+0Ð(Ð(Ð(ð1øøøð	 +øõ •jÐ!ð ð ð Øˆðøøøð �R”^Ð#Ð#Ý�r”~ jÔ1°BÑ6Ñ7Ô7ˆˆàˆå�2”>×%Ò% j°!Ñ4Ô4Ñ5Ô5€Hàð 
 8¨q¢= =°H =Ø3Ð:�a�a¸ˆØ�x 1‘}Ñ$ˆØ'ð 	ØˆLà
�ŠØÝ�‰gŒgñå�‰eŒeñõ �‰oŒoñõ �(‰mŒmñ	õ
 �ÑÔñõ �‰eŒeññ	
ô 	
ð 	
ð œ.×,Ò,Ð-BÑCÔCÐØð -Ý*¨2Ñ.Ô.ˆÝ0°Ñ?Ô?ÐØð 	-Ø˜C‘KˆEØÐ,Ñ,ˆEà‡H‚HØÝ
ˆf�QŒi‰.Œ.ñ	å
ˆf�QŒi‰.Œ.ñ	õ ˆbŒg�aŒj‰/Œ/ñ	õ ˆbŒg�aŒj‰/Œ/ñ		õ
 ˆU‰)Œ)ñ	ñô ð ð ð 5Ð/ð 5Ø
�ŠÕ$ ]Ñ3Ô3Ñ4Ô4Ð4Ø‡H‚H�R�‰UŒU�O„O€O€O€Os#   „3A: ÁA' Á'A6Á5A6Á:BÂBc                 ó  — |                       ¦   «         }	 t          |d¦  «        5 }| j        dk    r$t          j        d|g|t          j        ¬¦  «         nÉdd|g}dg}t          j        |t          j        t          j        ¬¦  «        }t          j        ||j        |t          j        ¬¦  «        }|j         	                    ¦   «          | 
                    ¦   «         }	|	rt          j        |	|¦  «        ‚| 
                    ¦   «         }	|	rt          j        |	|¦  «        ‚d d d ¦  «         n# 1 swxY w Y   	 t          j        |¦  «         d S # t          $ r Y d S w xY w# 	 t          j        |¦  «         w # t          $ r Y w w xY wxY w)NÚwbr7   Úppmtogif)ÚstdoutÚstderrÚppmquantÚ256)Ústdinr  r  )Ú_dumpÚopenr„   Ú
subprocessÚ
check_callÚDEVNULLÚPopenÚPIPEr  ÚcloseÚwaitÚCalledProcessErrorÚosÚunlinkÚOSError)
rU   r"   rú   ÚtempfilerX   Ú	quant_cmdÚ	togif_cmdÚ
quant_procÚ
togif_procÚretcodes
             r   Ú_save_netpbmr(  ò  s  € ð �xŠx‰zŒz€Hð#Ý�(˜DÑ!Ô!ð 	L QØŒw˜%ÒÐÝÔ%Ø Ð*°1½ZÔ=Oðñ ô ð ð ð (¨°Ð9�	Ø'˜L�	Ý'Ô-Ø¥j¤o½jÔ>Pðñ ô �
õ (Ô-ØØ$Ô+ØÝ%Ô-ð	ñ ô �
ð Ô!×'Ò'Ñ)Ô)Ð)à$Ÿ/š/Ñ+Ô+�Øð LÝ$Ô7¸ÀÑKÔKÐKà$Ÿ/š/Ñ+Ô+�Øð LÝ$Ô7¸ÀÑKÔKÐKð;	Lð 	Lð 	Lñ 	Lô 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð 	Løøøð 	Lð 	Lð 	Lð 	Lð>	ÝŒI�hÑÔÐÐÐøÝð 	ð 	ð 	ØˆDˆDð	øøøøð	ÝŒI�hÑÔÐÐøÝð 	ð 	ð 	ØˆDð	øøøøøøse   –E ¦C9D+ÄE Ä+D/Ä/E Ä2D/Ä3E Ä7E Å
EÅEÅFÅ E5Å4FÅ5
FÅ?FÆFÆFc                 óV  — | j         dv �r|�r|                     dd¦  «        rÿt          p
| j         dk    }|s| j        | j        z  dk     rÚg }t          |                      ¦   «         ¦  «        D ]\  }}|r|                     |¦  «         Œ|s t          |¦  «        t          |¦  «        k    r|S t          | j
        j
        ¦  «        t          j        | j
        j         ¦  «        z  }d|dz
                       ¦   «         z  }t          |¦  «        |dz  k    r|dk    r|S dS dS dS dS dS dS )	aL  
    Palette optimization is a potentially expensive operation.

    This function determines if the palette should be optimized using
    some heuristics, then returns the list of palette entries in use.

    :param im: Image object
    :param info: encoderinfo
    :returns: list of indexes of palette entries in use, or None
    )rm   rn   rý   r   rn   i   r   r   N)r„   rŠ   Ú_FORCE_OPTIMIZEÚwidthÚheightrÃ   Ú	histogramrÂ   r~   r*   r?   r   ÚgetmodebandsÚ
bit_length)rU   r9   ÚoptimiserÇ   r,   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes           r   rÅ   rÅ   '  sl  € ð 
„w�*ÐÑ Ñ¨$¯(ª(°:¸qÑ*AÔ*AÐõ #Ð4 b¤g°¢nˆØð 	+�r”x "¤)Ñ+¨iÒ7Ð7à"$ÐÝ% b§l¢l¡n¤nÑ5Ô5ð 2ð 2‘��5Øð 2Ø'×.Ò.¨qÑ1Ô1Ð1øàð +�3Ð2Ñ3Ô3µsÐ;NÑ7OÔ7OÒOÐOØ*Ð*å!$ R¤ZÔ%7Ñ!8Ô!8½EÔ<NØ”
”ñ=ô =ñ "Ðð $%Ð);¸aÑ)?×(KÒ(KÑ(MÔ(MÑ#MÐ õ Ð'Ñ(Ô(Ð,@ÀAÑ,EÒEÐEà(¨1Ò,Ð,à*Ð*ðA ÐÐÐÐÐð 8Ð7ð  FÐEà,Ð,r   c                 ó¨   — | sdS t          | ¦  «        dk     rdS t          j        t          j        t          | ¦  «        dz  d¦  «        ¦  «        dz
  S )Nr   ri   r   r(   r   )r*   ÚmathÚceilÚlog)r  s    r   r  r  U  sV   € àð CØˆqÝ	ˆ]Ñ	Ô	˜aÒ	Ð	ØˆqåŒy�œ¥# mÑ"4Ô"4¸Ñ"9¸1Ñ=Ô=Ñ>Ô>ÀÑBÐBr   c                 ó�   — t          | ¦  «        }d|z  t          | ¦  «        dz  z
  }|dk    r| t          d¦  «        dz  |z  z  } | S )zä
    Returns the palette, null padded to the next power of 2 (*3) bytes
    suitable for direct inclusion in the GIF header

    :param palette_bytes: Unpadded palette bytes, in RGBRGB form
    :returns: Null padded palette
    r   r(   r   )r  r*   r   )r  r  Úactual_target_size_diffs      r   r  r  _  s]   € õ -¨]Ñ;Ô;Ðð  !Ð$4Ñ4½¸MÑ8JÔ8JÈaÑ8OÑOÐØ Ò"Ð"Ø�˜A™œ ™Ð%<Ñ<Ñ<ˆØÐr   c                 ó   — | j         j         S )zš
    Gets the palette for inclusion in the gif header

    :param im: Image object
    :returns: Bytes, len<=768 suitable for inclusion in gif header
    r°   )rU   s    r   rÜ   rÜ   q  s   € ð Œ:ÔÐr   c                 óÈ   — d}|r]t          |t          ¦  «        rF	 | j                             || ¦  «        }n+# t          $ r}t          |¦  «        dvr‚ Y d }~n
d }~ww xY w|}|S )Nr   )z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r½   rs   r?   Úgetcolorr|   Ústr)rU   Úinfo_backgroundr6   rY   s       r   rë   rë   {  s¡   € Ø€JØð )Ý�o¥uÑ-Ô-ð 	)ð
ØœZ×0Ò0°À"ÑEÔE�
�
øÝð ð ð Ý�q‘6”6ð "ð ð ð ðð ð ð ð øøøøðøøøð )ˆJØÐs   ›7 ·
AÁAÁAc                 óÈ  — d}| j                              d¦  «        dk    s4|r4d|v s.d|v s*|                     d¦  «        s|                     d¦  «        rd}t          | |                     d¦  «        ¦  «        }t          | ¦  «        }t	          |¦  «        }d	|z   t          | j        d
         ¦  «        z   t          | j        d         ¦  «        z   t          |dz   ¦  «        t          |¦  «        t          d
¦  «        z   t          |¦  «        g}d|v r~| 	                    dt          d¦  «        z   t          d¦  «        z   dz   t          d¦  «        z   t          d¦  «        z   t          |d         ¦  «        z   t          d
¦  «        z   ¦  «         |                     d¦  «        rºdt          d¦  «        z   }|d         }t          |t          ¦  «        r|                     ¦   «         }t          d
t          |¦  «        d¦  «        D ]1}	||	|	dz   …         }
|t          t          |
¦  «        ¦  «        |
z   z  }Œ2|t          d
¦  «        z  }| 	                    |¦  «         |S )z2Return a list of strings representing a GIF headers   87ar0   s   89arp   rg   r`   r\   r6   s   GIFr   r   r4   r^   rd   r5   rf   r(   rb   )r9   rŠ   rë   rÜ   r  r  r}   r   r  rÂ   r½   r=  Úencoder)   r*   )rU   r9   r0   r6   r  r  ÚheaderÚcomment_blockr\   r,   Úsubblocks              r   rÒ   rÒ   ’  sm  € ð €GØ	„w‡{‚{�9ÑÔ Ò'Ð'Øð (ð ˜dÐ"Ð"Ø˜ˆ~ˆ~Ø�xŠx˜
Ñ#Ô#ð à�xŠx˜	Ñ"Ô"ð ð
 ˆå   T§X¢X¨lÑ%;Ô%;Ñ<Ô<€Jå& rÑ*Ô*€MÝ,¨]Ñ;Ô;Ðð 	Ø
ñ	å
ˆbŒg�aŒj‰/Œ/ñ	õ ˆbŒg�aŒj‰/Œ/ñ	õ 	Ð˜cÑ!Ñ"Ô"å
ˆ:‰Œ�˜A™œÑå˜MÑ*Ô*ð€Fð �€~€~Ø�ŠØÝ�‰gŒgñå�‰fŒfñð ñõ �‰eŒeñ	õ
 �‰eŒeñõ �$�v”,ÑÔñ õ �‰eŒeññ		
ô 		
ð 		
ð ‡x‚x�	ÑÔð %Ø�r #™wœw™ˆà�y”/ˆÝ�g�sÑ#Ô#ð 	'Ø—n’nÑ&Ô&ˆGÝ�q�#˜g™,œ,¨Ñ,Ô,ð 	:ð 	:ˆAØ˜q 1 s¡7˜{Ô+ˆHØ�R¥ H¡¤Ñ.Ô.°Ñ9Ñ9ˆMˆMà�˜A™œÑˆØ�Š�mÑ$Ô$Ð$Ø€Mr   c           	      óÜ   — 	 ||_         t          | ||d¦  «         t          j        || dd|j        z   dt
          |j                 fg¦  «         |                      d¦  «         |` d S # |` w xY w)Nr   rw   rÍ   rÎ   )rÐ   rÕ   r   r×   r}   r±   r„   rÓ   )r"   rà   rö   Úparamss       r   rî   rî   Ð  s‰   € ð!Ø%ˆÔõ 	˜B ¨&°!Ñ4Ô4Ð4åŒØ�b˜E 6¨H¬MÑ#9¸1½gÀhÄmÔ>TÐUÐVñ	
ô 	
ð 	
ð 	�Š�‰ŒˆàÐ Ð Ð øˆHÐ Ð Ð Ð Ð s   ‚A!A' Á'A+c                 óÞ   — t          | |¦  «        }|€i }d|vrd| j        v r| j        d         |d<   t          | ||¦  «        }|j        | _        |j        | _        t          | |¦  «        }||fS )a  
    Legacy Method to get Gif data from image.

    Warning:: May modify image data.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: tuple of(list of header items, optimized palette)

    Nr6   )rÅ   r9   rË   r?   rU   rÒ   )rU   r?   r9   rÇ   Úim_modrA  s         r   Ú	getheaderrH  ä  s„   € õ (¨¨DÑ1Ô1Ðà€|Øˆà˜4ÐÐ L°B´GÐ$;Ð$;ØœW \Ô2ˆˆ\Ñå  G¨TÑ2Ô2€FØ”€B„JØŒI€B„EÝ  DÑ)Ô)€FàÐ&Ð&Ð&r   rÍ   c                 óŠ   —  G d„ d¦  «        }|                       ¦   «           |¦   «         }t          || ||¦  «         |j        S )aë  
    Legacy Method

    Return a list of strings representing this image.
    The first string is a local image header, the rest contains
    encoded image data.

    To specify duration, add the time in milliseconds,
    e.g. ``getdata(im_frame, duration=1000)``

    :param im: Image object
    :param offset: Tuple of (x, y) pixels. Defaults to (0, 0)
    :param \**params: e.g. duration or other encoder info parameters
    :returns: List of bytes containing GIF encoded frame data

    c                   ó   — e Zd Zg Zd„ ZdS )úgetdata.<locals>.Collectorc                 ó:   — | j                              |¦  «         d S r¨   )r&   rÂ   )r$   r&   s     r   rÓ   z getdata.<locals>.Collector.write  s   € ØŒI×Ò˜TÑ"Ô"Ð"Ð"Ð"r   N)r   r   r   r&   rÓ   r   r   r   Ú	CollectorrK    s(   € € € € € Øˆð	#ð 	#ð 	#ð 	#ð 	#r   rM  )r{   rî   r&   )rU   rö   rE  rM  r"   s        r   rŸ   rŸ      s_   € ð$#ð #ð #ð #ð #ñ #ô #ð #ð ‡G‚G�I„I€Ià	ˆ‰Œ€Bå�b˜"˜f fÑ-Ô-Ð-àŒ7€Nr   z.gifz	image/gif)F)NN)rÍ   )2rè   r5  r  r  Úenumr   Ú r   r   r   r   r	   Ú_binaryr
   r:   r   r   r  r   r   rƒ   r   r   r±   r¸   rË   rÚ   râ   r÷   rû   r×   rÔ   rÕ   r(  r*  rÅ   r  r  rÜ   rë   rÒ   rî   rH  rŸ   Úregister_openr©   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer   r   r   ú<module>rV     só  ðð6 Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð �gñ ô ð ð #Ô2Ð ð0ð 0ð 0ðPð Pð Pð Pð P�9Ô&ñ Pô Pð Pðn ˜# CÐ
(Ð
(€ðð ð ð21ð 1ð 1ðhð ð ð*ð ð ðIEð IEð IEðX+ð +ð +ðð ð ð ð"ð ð ð?ð ?ð ?ðD-ð -ð -ðd €ð++ð ++ð ++ð\Cð Cð Cðð ð ð$ð ð ðð ð ð.;ð ;ð ;ð|!ð !ð !ð('ð 'ð 'ð 'ð8ð ð ð ðH €Ô �LÔ'¨°wÑ ?Ô ?Ð ?Ø €Ô �LÔ'¨Ñ /Ô /Ð /Ø €Ô ˜Ô+¨YÑ 7Ô 7Ð 7Ø €Ô ˜Ô,¨fÑ 5Ô 5Ð 5Ø €Ô �LÔ'¨Ñ 5Ô 5Ð 5Ð 5Ð 5r   