+
    JV-j…¥  ã                  óà  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
HtHtHt ^RIHtHtHtHtHtHtHt ^RIHt ^RIHt ^R	IHt ^R
IHt Rt]'       d   ^ RI
HtH t  ^RIH!t! ^RI"H#t#  ! R R]4      t$]$PJ                  t&R R lt' ! R R]P"                  4      t(RRRRRR/t)R R lt*]+],,          ]-].,          ,          ]P(                  ,          t/R R lt0R R lt1R R lt2 ! R  R!]4      t3R" R# lt4R$ R% lt5RBR& R' llt6R( R) lt7R* R+ lt8R, R- lt9Rt:R. R/ lt;R0 R1 lt<R2 R3 lt=R4 R5 lt>R6 R7 lt?R8 R9 lt@R: R; ltARCR< R= lltBRDR> R? lltC]Pˆ                  ! ](PŠ                  ](]'4       ]PŒ                  ! ](PŠ                  ]64       ]PŽ                  ! ](PŠ                  ]54       ]P�                  ! ](PŠ                  R@4       ]P’                  ! ](PŠ                  RA4       R# )Eé    )ÚannotationsN)ÚIntEnum)Úcached_property)ÚAnyÚ
NamedTupleÚcast)ÚImageÚ
ImageChopsÚ	ImageFileÚ	ImageMathÚImageOpsÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16le)ÚDeferredErrorF)ÚIOÚLiteral)Ú_imaging)ÚBufferc                  ó&   € ] tR t^:tRt^ t^t^tRtR# )ÚLoadingStrategyz.. versionadded:: 9.1.0© N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYSÚ__static_attributes__r   ó    Úc/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/PIL/GifImagePlugin.pyr   r   :   s   † Ù!à€OØ'(Ð$Ø„Jr$   r   c               ó    € V ^8„  d   QhRRRR/# )é   ÚprefixÚbytesÚreturnÚboolr   )Úformats   "r%   Ú__annotate__r-   I   s   € ÷ 5ñ 5�Eð 5˜dñ 5r$   c                ó$   € V P                  R4      # )ó   GIF87a)r/   s   GIF89a)Ú
startswith)r(   s   &r%   Ú_acceptr1   I   s   € Ø×ÑÐ3Ó4Ð4r$   c                  óÂ   a € ] tR t^RtRtRtRtRtR R ltR R lt	R	 R
 lt
]R R l4       t]R R l4       tR R ltRR R lltR V 3R lltR R ltR R ltRtV ;t# )ÚGifImageFileÚGIFzCompuserve GIFFNc               ó   € V ^8„  d   QhRR/# )r'   r*   zbytes | Noner   )r,   s   "r%   r-   ÚGifImageFile.__annotate__Y   s   € ÷ ñ �lñ r$   c                	óÎ   € V P                   f   Q hV P                   P                  ^4      pV'       d2   V^ ,          '       d#   V P                   P                  V^ ,          4      # R # ©N)ÚfpÚread)ÚselfÚss   & r%   ÚdataÚGifImageFile.dataY   sH   € Ø�w‰wÒ"Ð"Ð"Ø�G‰G�L‰L˜‹Oˆß��1—”Ø—7‘7—<‘<  !¥Ó%Ð%Ùr$   c               ó    € V ^8„  d   QhRRRR/# )r'   Úpr)   r*   r+   r   )r,   s   "r%   r-   r6   `   s   € ÷ ñ  Eð ¨dñ r$   c                	óÌ   € \        ^ \        V4      ^4       FI  pV^,          W,          u;8X  d/   W^,           ,          u;8X  d   W^,           ,          8X  d   KC    R#   R# 	  R# )r   TF)ÚrangeÚlen)r;   r@   Úis   && r%   Ú_is_palette_neededÚGifImageFile._is_palette_needed`   sM   € Ü�qœ#˜a›& !Ö$ˆAØ˜•F˜a�dÖ: a¨A­¥hÖ:°!¸µEµ(×:Úð ;Úñ %ñ r$   c               ó   € V ^8„  d   QhRR/# ©r'   r*   ÚNoner   )r,   s   "r%   r-   r6   f   s   € ÷ ñ �tñ r$   c                	óÆ  € V P                   f   Q hV P                   P                  ^4      p\        V4      '       g   Rp\        V4      hVR,          V P                  R&   \        V^4      \        V^4      3V n        V^
,          pV^,          ^,           pV^€,          '       du   V^,          V P                  R&   V P                   P                  ^V,          4      pV P                  V4      '       d&   \        P                  ! RV4      pV;V n
        V n        V P                   V n        V P                   P                  4       V n        R V n        V P!                  ^ 4       R # )Nznot a GIF file:Né   NÚversionÚ
backgroundÚRGB)r9   r:   r1   ÚSyntaxErrorÚinfoÚi16Ú_sizerE   r   ÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ	_n_framesÚ_seek)r;   r<   ÚmsgÚflagsÚbitsr@   rU   s   &      r%   Ú_openÚGifImageFile._openf   s  € à�w‰wÒ"Ð"Ð"Ø�G‰G�L‰L˜ÓˆÜ�q�zŠzØ"ˆCÜ˜cÓ"Ð"à  �uˆ�	‰	�)ÑÜ˜˜A“Y¤ A q£	Ð)ˆŒ
Ø�"•ˆØ˜•	˜Q�ˆà�3�;Œ;à&'¨¥eˆD�I‰I�lÑ#à—‘—‘˜Q $�YÓ'ˆAØ×&Ñ& q×)Ò)Ü&×*Ò*¨5°!Ó4�Ø5<Ð<�Ô# d¤là—7‘7ˆŒØŸ™Ÿ™›ˆŒØ%)ˆŒØ�
‰
�1Žr$   c               ó   € V ^8„  d   QhRR/# ©r'   r*   Úintr   )r,   s   "r%   r-   r6   ‚   s   € ÷ 	ñ 	˜#ñ 	r$   c                	ó*  € V P                   f<   V P                  4       p  V P                  V P                  4       ^,           R4       K*  V P                   #   \         d     T P                  4       ^,           T n          Mi ; iT P	                  T4       LK)NF©rY   rW   rZ   ÚEOFErrorÚseek)r;   Úcurrents   & r%   Ún_framesÚGifImageFile.n_frames�   sq   € à�>‰>Ò!Ø—i‘i“kˆGð1ØØ—J‘J˜tŸy™y›{¨Q�°Ö6ð �~‰~Ðøô ô 1Ø!%§¡£¨q¥�–ð1úà�I‰I�gÕs    *A Á'B Á?B c               ó   € V ^8„  d   QhRR/# )r'   r*   r+   r   )r,   s   "r%   r-   r6   Ž   s   € ÷ ñ ˜Tñ r$   c                	óæ   € V P                   e   V P                   ^8g  # V P                  4       pV'       d   R#  V P                  ^R4       RpV P	                  V4       V#   \         d    Rp L"i ; i)NTFrd   )r;   rg   Úis_animateds   &  r%   rl   ÚGifImageFile.is_animated�   sn   € à�>‰>Ò%Ø—>‘> QÑ&Ð&à—)‘)“+ˆßÙð	 Ø�J‰J�q˜%Ô ØˆKð 	�	‰	�'ÔØÐøô	 ô 	 ØŠKð	 ús   ¹A  Á A0Á/A0c               ó    € V ^8„  d   QhRRRR/# )r'   Úframerb   r*   rI   r   )r,   s   "r%   r-   r6   Ÿ   s   € ÷ 'ñ '˜#ð ' $ñ 'r$   c                	ó~  € V P                  V4      '       g   R # WP                  8  d   R V n        V P                  ^ 4       V P                  p \	        V P                  ^,           V^,           4       F  pV P                  V4       K  	  R #   \
         d%   pT P                  T4       Rp\        T4      ThR p?ii ; i)Núno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚ_imrZ   rB   re   rf   )r;   ro   Ú
last_frameÚfÚer[   s   &&    r%   rf   ÚGifImageFile.seekŸ   s–   € Ø×Ñ ×&Ò&ÙØ—<‘<ÔØˆDŒHØ�J‰J�qŒMà—\‘\ˆ
ð	'Ü˜4Ÿ<™<¨!Õ+¨U°Q­YÖ7�Ø—
‘
˜1–ó 8øäô 	'Ø�I‰I�jÔ!Ø.ˆCÜ˜3“- QÐ&ûð	'ús   Á<B ÂB<ÂB7Â7B<c               ó$   € V ^8„  d   QhRRRRRR/# )r'   ro   rb   Úupdate_imager+   r*   rI   r   )r,   s   "r%   r-   r6   ¯   s&   € ÷ C!ñ C!˜3ð C!¨dð C!¸dñ C!r$   c                	ó¼  a € \        S P                  \        4      '       d   S P                  P                  hV^ 8X  da   ^ S n        RS n        RS n        S P                  P                  S P                  4       ^ S n	        RS P                  9   d   S P                  R M*S P                  '       d   V'       d   S P                  4        VS P                  ^,           8w  d   RV 2p\        V4      hS P                  S n        S P                  '       dE   S P                  P                  S P                  4       S P                  4       '       d   K  ^ S n        S P                  P!                  ^4      pV'       d   VR8X  d   Rp\#        V4      hRp/ pRpRpRp	 V'       g   S P                  P!                  ^4      pV'       d   VR8X  d   EMVR8X  Ed®   S P                  P!                  ^4      pS P                  4       p
V^ ,          ^ù8X  d^   V
eZ   V
^ ,          pV^,          '       d
   V
^,          p\%        V
^4      ^
,          VR&   ^V,          pV^,	          pV'       d   VS n	        MýV^ ,          ^þ8X  dR   RpV
'       d   WÚ,          pS P                  4       p
K"  RV9   d   VR;;,          R	V,           ,          uu&   MWÖR&   RpEK2  V^ ,          ^ÿ8X  d‘   V^ 8X  dŠ   V
e†   V
S P                  P'                  4       3VR
&   V
P)                  R4      '       dP   S P                  4       p
V
'       d8   \+        V
4      ^8¼  d(   V
^ ,          ^8X  d   \%        V
^4      S P                  R&   S P                  4       '       d   K  EMÅVR8X  Ed¾   S P                  P!                  ^	4      p\%        V^ 4      \%        V^4      rþV\%        V^4      ,           V\%        V^4      ,           ppVS P,                  ^ ,          8”  g   VS P,                  ^,          8”  dh   V'       d`   \/        VS P,                  ^ ,          4      \/        VS P,                  ^,          4      3S n        \2        P4                  ! S P0                  4       WïVV3p	V^,          pV^@,          ^ 8g  pV^€,          '       dd   V^,          ^,           pS P                  P!                  ^V,          4      pS P7                  V4      '       d   \8        P:                  ! RV4      pMRpS P                  P!                  ^4      ^ ,          pS P                  P'                  4       S n        MRpEK´  Vf   Rp\#        V4      hVS n        V'       g   R# . S n        S P
                  '       d1   S P<                  P?                  S P
                  S P@                  4       Ve   TMS PB                  S n"        VS n#        V^ 8X  d“   S PD                  '       d0   \H        \J        PL                  8X  d   Ve   RMRS n'        MRS n'        MRS n'        V'       d
   VS n(        EM7S PB                  '       d    ^ RI)H)p V! S PB                  4      S n(        EMRS n(        MþS PT                  R8X  dî   \H        \J        PV                  8w  g	   V'       dÍ   RS P                  9   d|   S P<                  PY                  S P                  R,          ^ 4       S P<                  P[                  R\2        P\                  P^                  4      S n        RS n'        S P                  R M@RS n'        S P<                  P[                  R\2        P\                  P^                  4      S n        R V 3R llpRS n        V	S n         S P@                  '       EdÂ   S P                  ^8¼  Ed°    S P                  ^8X  dÜ   S P@                  w  rïppVV,
          VV,
          3p\2        P4                  ! V4       RpS P                  Pa                  RV4      pVe$   S PT                  R9   d   RpV! V4      R,           pM7S P                  Pa                  R^ 4      pS PT                  R9   d   RpV! V4      p\2        Pb                  Pe                  VVV4      S n        MÂS Pf                  e-   S Pi                  S P<                  S P@                  4      S n        MˆVe…   S P@                  w  rïppVV,
          VV,
          3p\2        P4                  ! V4       RpTpS PT                  R9   d   RpV! V4      R,           p\2        Pb                  Pe                  VVV4      S n        Vez   RpVeD   V^ 8X  d*   \H        \J        PL                  8w  d   VS P                  R&   MS PT                  R9  d   Tp\l        Pn                  ! RXXXX3S P                  XVV34      .S n        VPa                  R4      '       d   VR,          S P                  R&   R FB  pVV9   d   VV,          S P                  V&   K"  VS P                  9   g   K5  S P                  V KD  	  R#   \j         d     ELi ; i)r   NÚcommentzcannot seek to frame ó   ;rq   ó   !Údurationr$   ó   
Ú	extensionó   NETSCAPE2.0Úloopó   ,rN   Fzimage not found in GIF frameÚRGBAÚPÚL)ÚcopyÚtransparencyc               ó    € V ^8„  d   QhRRRR/# )r'   Úcolorrb   r*   ztuple[int, int, int]r   )r,   s   "r%   r-   Ú(GifImageFile._seek.<locals>.__annotate__a  s   € ÷ 		-ñ 		-˜ð 		-Ð 4ñ 		-r$   c           	     óN  <€ SP                   '       d�   V ^,          ^,           \        SP                   P                  4      8”  d   ^ p \        \        \
        \
        \
        3,          \	        SP                   P                  V ^,          V ^,          ^,            4      4      # W V 3# )é   )Ú_frame_paletterC   rU   r   Útuplerb   )r‹   r;   s   &€r%   Ú_rgbÚ GifImageFile._seek.<locals>._rgba  s„   ø€ Ø×"×"Ð"Ø˜1•9˜q•=¤3 t×':Ñ':×'BÑ'BÓ#CÔCØ�EÜÜœ#œs¤C˜-Õ(Ü˜$×-Ñ-×5Ñ5°e¸aµiÀ%È!Å)ÈaÅ-ÐPÓQóð ð
  eÐ,Ð,r$   rM   Úgiféÿÿÿÿ©rN   r…   ©r   )r   r�   )8Ú
isinstancerV   r   ÚexÚ_GifImageFile__offsetÚdisposers   rf   rX   Údisposal_methodrP   ÚtileÚloadÚ
ValueErrorr9   r=   r:   re   rQ   rW   r0   rC   ÚsizeÚmaxrR   r	   Ú_decompression_bomb_checkrE   r   rS   ÚimÚpasteÚdispose_extentrT   r�   Ú_frame_transparencyÚLOADING_STRATEGYr   r"   Ú_moderU   rˆ   Úmoder!   ÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillrt   Ú_cropÚAttributeErrorr   Ú_Tile)r;   ro   rz   r[   r<   rU   rP   Úframe_transparencyÚ	interlaceÚframe_dispose_extentÚblockr\   Údispose_bitsr|   Úx0Úy0Úx1Úy1r]   r@   rˆ   r‘   Údispose_sizeÚdispose_moder‹   r‰   Úks   f&&                        r%   rZ   ÚGifImageFile._seek¯   s  ø€ Ü�d—h‘h¤×.Ò.Ø—(‘(—+‘+ÐØ�AŒ:àˆDŒMØ8<ˆDŒLØˆDŒLØ�H‰H�M‰M˜$Ÿ-™-Ô(Ø#$ˆDÔ Ø˜DŸI™IÔ%Ø—I‘I˜iÐ(øð �y�yˆyŸ\Ø—	‘	”à�D—L‘L 1Õ$Ô$Ø)¨%¨Ð1ˆCÜ˜S“/Ð!à—(‘(ˆŒØ�=�=ˆ=à�G‰G�L‰L˜Ÿ™Ô'Ø—)‘)—+’+ÙØˆDŒMà�G‰G�L‰L˜‹Oˆß�A˜”IØ.ˆCÜ˜3“-ÐàEIˆà!ˆØ!ÐØˆ	Ø#ÐØßØ—G‘G—L‘L “O�ß˜˜Tœ	Ùà�d•ð —G‘G—L‘L “O�ØŸ	™	›�Ø�Q•4˜3”; 5Ò#4ð " !�H�EØ˜q—y”yØ-2°1­XÐ*Ü'*¨5°!£}°rÕ'9�D˜Ñ$ð $.°Õ#5�LØ#/°1Õ#4�Lß#ð
 0<˜Ô,øØ�q•T˜S”[ð "�G÷  ØÕ(˜Ø $§	¡	£šà  DÔ(à˜YŸ¨5°7­?Õ:œà*1˜Y™Ø�AÚØ�q•T˜S”[ U¨a¤Z°EÒ4Eð ).¨t¯w©w¯|©|«~Ð(=�D˜Ñ%Ø×'Ñ'¨×7Ò7Ø $§	¡	£˜ß ¤S¨£Z°1¤_¸¸q½ÀQ¼Ü03°E¸1³˜DŸI™I fÑ-Ø—i‘i—k’kÙñ "ð �d•ð —G‘G—L‘L “O�ô ˜Q ›¤C¨¨1£I�BØœc ! Q›i�¨¬c°!°Q«i­�B�Ø˜Ÿ™ 1�Ô%¨¨d¯i©i¸­lÔ):ÇÜ!$ R¨¯©°1­Ó!6¼¸BÀÇ	Á	È!ÅÓ8MÐ!M�D”JÜ×3Ò3°D·J±JÔ?Ø')¨r°2 ~Ð$Ø˜!��à" R�Z¨AÑ-�	à˜3—;”;Ø! A�I¨�?�DØŸ™Ÿ™ Q¨$¥YÓ/�AØ×.Ñ.¨q×1Ò1Ü".×"2Ò"2°5¸!Ó"<™à"'˜ð —w‘w—|‘| A“ qÕ)�Ø $§¡§¡£�”ØØ‹AàÒØ0ˆCÜ˜3“-ÐàˆŒßÙàˆŒ	à�<�<ˆ<Ø�G‰G�M‰M˜$Ÿ,™,¨×(;Ñ(;Ô<à)0Ò)<™gÀ$×BUÑBUˆÔØ#5ˆÔ Ø�AŒ:Ø×"×"Ð"Ü#¤×'AÑ'AÔAØ+=Ò+I¡Èu�D•Jà!$�D•Jà �”
çØ&�–Ø×$×$Ð$Ý%á# D×$7Ñ$7Ó8�–à#�•à�y‰y˜CÔä$¬×(XÑ(XÔXßà%¨¯©Ô2ØŸ™×/Ñ/°·	±	¸.Õ0IÈ1ÔMØ"&§'¡'§/¡/°&¼%¿,¹,×:UÑ:UÓ"V˜œØ%+˜œ
Ø ŸI™I nÑ5à%*˜œ
Ø"&§'¡'§/¡/°%¼¿¹×9TÑ9TÓ"U˜œ÷		-ð 		-ð ˆŒØ@TˆÔØ××Ñ 4×#7Ñ#7¸1Õ#<ð*Ø×'Ñ'¨1Ô,ð &*×%8Ñ%8‘N�B˜B Ø$&¨¥G¨R°"­WÐ#5�Lä×3Ò3°LÔAð $'�LØ ŸI™IŸM™M¨.Ð:LÓM�EØÒ(ØŸ9™9¨Ô7Ø+1˜LÙ$(¨£K°$Õ$6˜Eøà $§	¡	§¡¨l¸AÓ >˜ØŸ9™9¨Ô7Ø+0˜LÙ$(¨£K˜EÜ#(§:¡:§?¡?°<ÀÈuÓ#U�D•Lð —x‘xÒ+à'+§z¡z°$·'±'¸4×;NÑ;NÓ'O˜�Ø+Ò7Ø)-×)<Ñ)<™˜  BØ(*¨R­°°bµÐ'9˜ä×7Ò7¸ÔEØ'*˜Ø 2˜ØŸ9™9¨Ô7Ø+1˜LÙ$(Ð);Ó$<¸tÕ$C˜EÜ',§z¡z§¡Ø(¨,¸ó(˜œð Ò ØˆLØ!Ò-Ø˜A”:Ü'¬?×+EÑ+EÔEØ4F˜Ÿ	™	 .Ñ1øØ—Y‘Y oÔ5Ø#5�Lä—’ØØ˜˜R Ð$Ø—M‘MØ˜9 lÐ3ó	ðˆDŒIð �8‰8�I×ÒØ#'¨	¥?ˆD�I‰I�iÑ Û*ˆAØ�DŒyØ# A�w�—	‘	˜!“Ø�d—i‘i–Ø—I‘I˜a’Ló	 +øô- "ô Úðús    Þ*C+i â9i ãBi éiéic               ó   € V ^8„  d   QhRR/# rH   r   )r,   s   "r%   r-   r6   ´  s   € ÷ ñ ˜dñ r$   c                	ó’  <€ V P                   '       d   R MRpRV n        V P                  ^ 8X  dI   V P                  e:   \        P
                  P                  WP                  V P                  4      V n        M¶V P                  R9   d¦   V P                  V n        V P                   '       d|   \        P
                  P                  R V P                  V P                  ;'       g    ^ 4      V n        V P                  P                  ! R.V P                   P                  4       O5!   MRV n        V P                  '       gí   V P                  eß   V P                  V P                  P                  8w  dº   \        P
                  P                  V P                  P                  V P                  4      pV P                   '       d-   VP                  ! R.V P                   P                  4       O5!   VP                  V P                  RV P                  P                  ,           4       W n        Wn        RV n         \        SV `A  4        R# )r†   r‡   NrN   r•   ©r   r   )r�   Ú_prev_imrs   r¥   r	   r®   r¯   rŸ   r¢   r¨   Ú
putpaletteÚgetdatart   r£   r§   ÚsuperÚload_prepare)r;   Ú	temp_modeÚexpanded_imÚ	__class__s   &  €r%   rÇ   ÚGifImageFile.load_prepare´  s†  ø€ Ø×.×.Ð.‘C°Cˆ	ØˆŒØ�<‰<˜1ÔØ×'Ñ'Ò3ÜŸ*™*Ÿ/™/ØŸy™y¨$×*BÑ*Bó�”øð �Y‰Y˜/Ô)Ø ŸG™GˆDŒMØ×"×"Ð"ÜŸ*™*Ÿ/™/¨#¨t¯y©y¸$×:RÑ:R×:WÐ:WÐVWÓX�”Ø—‘×"Ò" 5ÐI¨4×+>Ñ+>×+FÑ+FÓ+HÕIà�”Ø�}�}ˆ} §¡Ò!5¸$¿)¹)ÀtÇwÁwÇ|Á|Ô:SÜŸ*™*Ÿ/™/¨$¯'©'¯,©,¸¿	¹	ÓBˆKØ×"×"Ð"Ø×&Ò& uÐM¨t×/BÑ/B×/JÑ/JÓ/LÔMØ×Ñ˜dŸg™g v°·±·±Õ'<Ô=à!ŒGØŒ
Ø"ˆÔä‰ÑÖr$   c               ó   € V ^8„  d   QhRR/# rH   r   )r,   s   "r%   r-   r6   Ï  s   € ÷ (9ñ (9˜$ñ (9r$   c                	ó†  € V P                   ^ 8X  d³   V P                  R8X  d    \        \        P                  8X  d‡   V P
                  e/   V P                  P                  V P
                  ^ 4       RV n        MRV n        V P                  P                  V P                  \        P                  P                  4      V n        R# V P                  '       g   R# V P                  V P                  P                  8w  dí   V P
                  e,   \        P                  P!                  RV P                  4      pMf\        P                  P!                  RV P                  4      pVP#                  RRV P                  P%                  4       4       VP                  R4      pVP'                  V P                  RV P                  P                  ,           4       Wn        V P                  f   Q hV P
                  e{   V P                  R8X  d(   V P                  P)                  RV P
                  4      pM]V P                  P                  V P
                  ^ 4       V P                  P                  R4      pMV P                  P                  R4      pV P*                  f   Q hV P-                  W P*                  4      pV P                  V n        V P                  P                  V n        VP                  R9   d)   V P                  P'                  W P*                  V4       R# V P                  P'                  W P*                  4       R# )	r   r†   Nr…   rN   r‡   ÚLArÂ   )rÎ   r…   )rs   r¨   r¦   r   r"   r¥   r¢   r©   r§   rª   r	   r«   r¬   rÃ   rŸ   r®   r¯   rÄ   Ú
getpaletter£   Úconvert_transparentr¤   r°   )r;   rÉ   Úframe_ims   &  r%   Úload_endÚGifImageFile.load_endÏ  s4  € Ø�<‰<˜1ÔØ�y‰y˜CÔÔ$4¼×8RÑ8RÔ$RØ×+Ñ+Ò7Ø—G‘G×+Ñ+¨D×,DÑ,DÀaÔHØ!'�D•Jà!&�D”JØŸ'™'Ÿ/™/¨$¯)©)´U·\±\×5PÑ5PÓQ�”ÙØ�}�}ˆ}ÙØ�9‰9˜Ÿ™×*Ñ*Ô*Ø×'Ñ'Ò3Ü#Ÿj™jŸo™o¨f°d·i±iÓ@‘ä#Ÿj™jŸo™o¨c°4·9±9Ó=�Ø×&Ñ& u¨e°T·W±W×5GÑ5GÓ5IÔJØ)×1Ñ1°%Ó8�Ø×Ñ˜dŸm™m¨V°d·m±m×6HÑ6HÕ-HÔIà'ŒMØ—=‘=Ò,Ð,Ð,Ø×#Ñ#Ò/Ø�y‰y˜CÔØŸ7™7×6Ñ6°t¸T×=UÑ=UÓV‘à—‘×'Ñ'¨×(@Ñ(@À!ÔDØŸ7™7Ÿ?™?¨6Ó2‘à—w‘w—‘ uÓ-ˆHà×"Ñ"Ò.Ð.Ð.Ø—:‘:˜h×(;Ñ(;Ó<ˆà—-‘-ˆŒØ—W‘W—\‘\ˆŒ
Ø�=‰=˜NÔ*Ø�G‰G�M‰M˜(×$7Ñ$7¸ÖBà�G‰G�M‰M˜(×$7Ñ$7Ö8r$   c               ó   € V ^8„  d   QhRR/# ra   r   )r,   s   "r%   r-   r6   ù  s   € ÷ ñ �cñ r$   c                	ó   € V P                   # r8   )rs   )r;   s   &r%   rW   ÚGifImageFile.tellù  s   € Ø�|‰|Ðr$   )Ú__frameÚ__offsetÚ__rewindrV   r�   r¥   rt   r§   rY   rÃ   rR   r›   rš   r¤   r9   rT   r¢   rU   rœ   )T)r   r   r   r   r,   Úformat_descriptionÚ!_close_exclusive_fp_after_loadingrT   r=   rE   r^   Úpropertyrh   r   rl   rf   rZ   rÇ   rÒ   rW   r#   Ú__classcell__)rÊ   s   @r%   r3   r3   R   sv   ø† Ø€FØ)ÐØ(-Ð%à€Nõõõð6 ô	ó ð	ð ôó ðõ"'÷ C!÷Jð õ6(9÷Tó r$   r3   Ú1r‡   r†   c               ó    € V ^8„  d   QhRRRR/# )r'   r¢   úImage.Imager*   r   )r,   s   "r%   r-   r-     s   € ÷ ñ ˜ð ¨ñ r$   c                ó  € V P                   \        9   d   V P                  4        V # \        P                  ! V P                   4      R8X  d±   V P                  R\        P                  P                  R7      p V P                  f   Q hV P                  P                   R8X  dY   V P                  P                   F>  pV^,          ^ 8X  g   K  V P                  P                  V,          V P                  R&    V # 	  V # V P                  R4      # )zï
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
rN   r†   ©rU   r…   r‰   r‡   )r¨   ÚRAWMODEr�   r	   Úgetmodebaserª   ÚPaletteÚADAPTIVErU   ÚcolorsrP   )r¢   Úrgbas   & r%   Ú_normalize_moderé     sÊ   € ð 
‡w�w”'ÔØ
�‰Œ	Øˆ	Ü×Ò˜Ÿ™Ó! UÔ*Ø�Z‰Z˜¤U§]¡]×%;Ñ%;ˆZÓ<ˆØ�z‰zÒ%Ð%Ð%Ø�:‰:�?‰?˜fÔ$ØŸ
™
×)Ô)�Ø˜•7˜a–<Ø.0¯j©j×.?Ñ.?ÀÕ.E�B—G‘G˜NÑ+ØØˆ	ñ	 *ð ˆ	Ø�:‰:�c‹?Ðr$   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r'   r¢   rà   rU   ú_Palette | NonerP   údict[str, Any]r*   r   )r,   s   "r%   r-   r-   !  s2   € ÷ Dñ DØðDØ-ðDØ5CðDàñDr$   c                óä  € RpV'       di   \        V\        \        \        34      '       d   \        VR,          4      p\        V\        P                  4      '       d   \        VP
                  4      pV P                  R8X  d,   V'       g#   V P                  R4      pVf   Q h\        V4      pM@V'       g   \        R \        R4       4       4      p\        P                  ! RVR7      V n        Vf   Q hV'       dø   . pV P
                  f   Q h\        ^ \        V4      ^4       FU  p\        W6V^,            4      pV P
                  P                  P                  V4      pW…9   d   RpVP                  V4       KW  	  \        V4       F3  w  rhVe   K  \        \        V4      4       F  p	W•9  g   K  W•V&    K1  	  K5  	  . p
V F  pVf   Q hV
P                  V4       K  	  V P                  V
4      p MG\!        W4      pVe9   V P                  W³4      p RV9   d    VP#                  VR,          4      VR&   V # V # V P
                  f   Q hW0P
                  n        V #   \$         d    TR  T # i ; i)	aP  
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
N:Ni   Nr†   c              3  ó2   "  € T F  q^,          x € K  	  R# 5i)rŽ   Nr   )Ú.0rD   s   & r%   Ú	<genexpr>Ú%_normalize_palette.<locals>.<genexpr>>  s   é € Ð&B±z°!¨A§v¢v³zùs   ‚i   rN   râ   r‰   )r—   r)   Ú	bytearrayÚlistr   rU   r¨   rÏ   rB   rC   r�   rç   r­   ÚappendÚ	enumerateÚremap_paletteÚ_get_optimizeÚindexrž   )r¢   rU   rP   Úsource_paletteÚ
im_paletteÚused_palette_colorsrD   Úsource_colorrø   ÚjÚdest_mapÚoptimized_palette_colorss   &&&         r%   Ú_normalize_paletter   !  s>  € ð €Nßä�g¤¤y´$Ð7×8Ò8Ü& w¨t¥}Ó5ˆNÜ�gœ|×8Ñ8×9Ò9Ü& w§¡Ó7ˆNà	‡w�w�#„~ßØŸ™ tÓ,ˆJØÒ)Ð)Ð)Ü& zÓ2ˆNøçÜ&Ñ&B´u¸S´zÓ&BÓBˆNÜ!×.Ò.¨u¸nÔMˆŒ
ØÒ%Ð%Ð%çØ02ÐØ�z‰zÒ%Ð%Ð%Ü�qœ#˜nÓ-¨qÖ1ˆAÜ  °A¸µEÐ!:Ó;ˆLØ—J‘J×%Ñ%×)Ñ)¨,Ó7ˆEØÔ+Ø�Ø×&Ñ& uÖ-ñ 2ô "Ð"5Ö6‰HˆAØŒ}ÜœsÐ#6Ó7Ö8�AØÖ3Ø12¨AÑ.Úó 9ñ 7ð !ˆÛ(ˆEØÒ$Ð$Ð$Ø�O‰O˜EÖ"ñ )ð ×Ñ˜hÓ'‰ä#0°Ó#:Ð Ø#Ò/Ø×!Ñ!Ð":ÓKˆBØ Ô%ð-Ø+C×+IÑ+IØ˜^Õ,ó,�D˜Ñ(ð
 ˆI�2ˆIà�:‰:Ò!Ð!Ð!Ø'‡J�JÔØ€Iøô "ô -Ø˜^Ñ,ØˆIð-ús   ÈI ÉI/É.I/c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r'   r¢   rà   r9   ú	IO[bytes]rU   rë   r*   rI   r   )r,   s   "r%   r-   r-   h  s0   € ÷ ñ Øðàðð ðð 
ñ	r$   c                ó�  € \        V 4      pVP                  P                  4        F8  w  rE\        V\        4      '       g   K  V P
                  P                  WE4       K:  	  \        W2V P
                  4      p\        W0P
                  4       F  pVP                  V4       K  	  ^ p\        V 4      '       d
   V^@,          p\        WRV4       ^\        V 4      3Vn        \        P                  ! W1\        P                  ! RRV P                   ,           ^ \"        VP$                  ,          4      .4       VP                  R4       R# ©r   r“   ó    NrÂ   )ré   rP   Úitemsr—   ÚstrÚencoderinfoÚ
setdefaultr   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr   Ú_saver²   rŸ   rã   r¨   )r¢   r9   rU   Úim_outr¾   Úvr<   r\   s   &&&     r%   Ú_write_single_framer  h  sñ   € ô
 ˜RÓ €FØ—‘×!Ñ!Ö#‰ˆÜ�aœ×ÔØ�N‰N×%Ñ% aÖ+ñ $ô   °·±Ó@€Fä ¯©Ö7ˆØ
�‰�Žñ 8ð €EÜ�R×ÒØ˜•
ˆÜ˜ ¨Ô.àœ}¨RÓ0Ð1€FÔÜ‡O‚OØ”Y—_’_ U¨F°R·W±WÕ,<¸aÄÈÏÉÕAUÓVÐWôð ‡H�HˆU†Or$   c               ó$   € V ^8„  d   QhRRRRRR/# )r'   Úbase_imrà   Úim_framer*   z4tuple[Image.Image, tuple[int, int, int, int] | None]r   )r,   s   "r%   r-   r-   „  s$   € ÷ 
2ñ 
2Øð
2Ø$/ð
2à9ñ
2r$   c                óP  € W3 Uu. uF5  q"P                   '       d    \        VP                   P                   4      MR NK7  	  ppV^ ,          V^,          8w  d#   VP                  R4      pV P                  R4      p \        P                  ! W4      pWDP                  RR7      3# u upi )r$   r…   F)Ú
alpha_only)rU   r)   rª   r
   Úsubtract_moduloÚgetbbox)r  r  r¢   Úpalette_bytesÚdeltas   &&   r%   Ú_getbboxr  „  s›   € ð ELÑCVóÙCV¸R§Z§Z ZŒˆb�j‰j× Ñ Ô!°SÒ8ÑCVð ð ð �QÕ˜=¨Õ+Ô+Ø×#Ñ# FÓ+ˆØ—/‘/ &Ó)ˆÜ×&Ò& xÓ9€EØ—-‘-¨5�-Ó1Ð1Ð1ùòs   †;B#c                  ó6   € ] tR tRt$ R]R&   R]R&   R]R&   RtR	# )
Ú_Framei‘  rà   r¢   z tuple[int, int, int, int] | NoneÚbboxrì   r  r   N)r   r   r   r   Ú__annotations__r#   r   r$   r%   r  r  ‘  s   ‡ ØƒOØ
*Ó*Ø×r$   r  c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r'   r¢   rà   r9   r  rU   rë   r*   r+   r   )r,   s   "r%   r-   r-   —  s2   € ÷ ñ ØðØ"ðØ-<ðà	ñr$   c           
     ó   € V P                   P                  R 4      pV P                   P                  RV P                  P                  R4      4      p. pRp^ pRp\        P                  ! V .V P                   P                  R. 4      4       EFŒ  p	\
        P                  ! V	4       EFm  p
\        V
P                  4       4      p
V^ 8X  d`   V
P                  P                  4        FA  w  r¼VR8X  d   K  \        V\        4      '       g   K&  V P                   P                  W¼4       KC  	  V P                   P                  4       pRV
P                  9   d$   VP                  RV
P                  R,          4       \        W¢V4      p
\        V\        \        34      '       d   W7,          VR &   M+Vf(   R V
P                  9   d   V
P                  R ,          VR &   \        V\        \        34      '       d   WG,          VR&   V^,          pRpV'       EdÙ   V'       EdÐ   \!        Wj4      w  ppV'       gH   VP                  R 4      '       d.   VR,          P                   R ;;,          VR ,          ,          uu&   EKÑ  VR,          P                   P                  R4      ^8X  dÔ   V P                   P                  RV P                  P                  R4      4      pVe†   Vfn   \#        V
V4      p\$        P&                  ! RV
P(                  V4      pV^ ,          P*                  P,                  pVf   Q hVP/                  VVP0                  4       \!        WŠ4      ^,          pEM�RV
P(                  ,           pEMzVP                  R4      '       Ed`   V
P0                  R8w  EdN   RV9  d0   V
P,                  f   Q h V
P,                  P3                  V
4      VR&   RV9   Ed   V
P                  4       p\$        P&                  ! RVP(                  VR,          4      pVP0                  R8X  d3   VP7                  4       w  pppp\8        P:                  ! R	 VVVVR
7      pMlVP0                  R8X  dC   \$        P&                  ! RVP(                  4      pVP=                  VP?                  4       4       Tp\8        P:                  ! R VR7      pVPA                  V\B        PD                  ! V4      R7       MRpT
pTPG                  \I        T;'       g    T
VV4      4       EKp  	  EK�  	  \K        V4      ^8X  d;   R V P                   9   d(   V^ ,          P                   R ,          V P                   R &   R# V FÐ  pVP*                  p
VPL                  '       g2   \O        V
VP                   4       F  pVPQ                  V4       K  	  RpMgV'       g   RVP                   R&   VPL                  RV
P(                  ,           8w  d   V
PS                  VPL                  4      p
VPL                  R,          p\U        WVVP                   4       KÒ  	  R#   \4         d     EL|i ; i)r   ÚdisposalNÚappend_imagesr‰   r†   ÚoptimizerÞ   r…   c                ó¼   € V R ,          ! V R,          ! V R,          ! V R,          ! V R,          V R,          4      V R,          4      V R,          4      ^ÿ,          R4      # )rª   r    ÚrÚgÚbÚarÞ   r   ©Úargss   &r%   Ú<lambda>Ú(_write_multiple_frames.<locals>.<lambda>á  sZ   € ¨T°)®_Ø$(¨¦KØ(,¨U®Ø,0°®K¸¸S½	À4ÈÅ9Ó,MÈtÐTWÍyó)*ð )-¨S­	ó	%&ð '*õ%*ð %(ô	."r$   )r'  r(  r)  r*  r‡   c                ó>   € V R ,          ! V R,          ^ÿ,          R4      # )rª   r¢   rÞ   r   r+  s   &r%   r-  r.  ÷  s   € ¨T°)®_¸TÀ$½ZÈ#Õ=MÈsÔ-Sr$   )r¢   )ÚmaskFTÚinclude_color_table:Nr'   Nr”   rÂ   )+r  r­   rP   Ú	itertoolsÚchainr   ÚIteratorré   rˆ   r  r—   r  r	  r   ró   r�   r  Ú_get_backgroundr	   ÚnewrŸ   r¢   rU   rÄ   r¨   Ú_new_color_indexrž   Úsplitr   Úlambda_evalÚputdataÚget_flattened_datar£   r   Úinvertrô   r  rC   r  r
  r  ÚcropÚ_write_frame_data)r¢   r9   rU   r   r#  Ú	im_framesÚprevious_imÚframe_countÚbackground_imÚ
imSequencer  r¾   r  r  Ú
diff_framer  r  r‹   rM   Úfirst_paletter¯   r'  r(  r)  r*  r0  Údelta_lÚ
frame_datar<   Úoffsets   &&&                           r%   Ú_write_multiple_framesrI  —  s	  € ð �~‰~×!Ñ! *Ó-€HØ�~‰~×!Ñ! *¨b¯g©g¯k©k¸*Ó.EÓF€Hà €IØ&*€KØ€KØ€MÜ—o’o r d¨B¯N©N×,>Ñ,>¸ÐPRÓ,S×Tˆ
Ü%×.Ò.¨z×:ˆHä& x§}¡}£Ó7ˆHØ˜aÔØ$ŸM™M×/Ñ/Ö1‘D�AØ˜NÔ*Ù Ü! !¤S×)Ô)ØŸ™×1Ñ1°!Ö7ñ	 2ð Ÿ.™.×-Ñ-Ó/ˆKØ §¡Ô.Ø×&Ñ& ~°x·}±}À^Õ7TÔUÜ)¨(¸[ÓIˆHÜ˜(¤T¬5 M×2Ò2Ø*2Õ*?�˜JÒ'ØÒ! j°H·M±MÔ&AØ*2¯-©-¸
Õ*C�˜JÑ'Ü˜(¤T¬5 M×2Ò2Ø*2Õ*?�˜JÑ'Ø˜1ÕˆKàˆJßˆyŸ[˜[ä& {Ó=‘��tßà"—‘ z×2Ò2Ø! "�×1Ñ1°*×=ÀÈZÕAXÕXÓ=ÚØ˜R•=×,Ñ,×0Ñ0°Ó<ÀÔAð ŸN™N×.Ñ.Ø&¨¯©¯©°NÓ(Có�Eð Ò(Ø(Ò0Ü)8¸À5Ó)I˜JÜ,1¯IªI°c¸8¿=¹=È*Ó,U˜MØ,5°a­L¯O©O×,CÑ,C˜MØ#0Ò#<Ð<Ð#<Ø)×4Ñ4°]ÀM×DVÑDVÔWÜ'¨Ó@ÀÕCšà%¨¯©Õ5šØ —_‘_ Z×0Ó0°X·]±]ÀcÕ5IØ%¨[Ô8Ø'×/Ñ/Ò;Ð;Ð;ð!à (× 0Ñ 0× AÑ AÀ(Ó Kð (¨Ñ7ð
 &¨Õ4à%-§]¡]£_˜
Ü$Ÿyšy¨¨e¯j©j¸+ÀnÕ:UÓV˜Ø Ÿ:™:¨Ô/Ø).¯©«™J˜A˜q ! QÜ#,×#8Ò#8ñ	!"ð #$Ø"#Ø"#Ø"#ô$™Dð"  %Ÿz™z¨SÔ0ä*/¯)ª)°C¸¿¹Ó*D Ø '§¡°×0HÑ0HÓ0JÔ KØ(/ Ü#,×#8Ò#8Ù SØ#(ô$˜Dð #×(Ñ(¨´H·O²OÀDÓ4IÐ(ÔJøà�Ø"ˆKØ×ÑœV J×$:Ð$:°(¸DÀ+ÓN×Oôy ;ñ Uô~ ˆ9ƒ~˜ÔØ˜Ÿ™Ô'à)2°1­×)AÑ)AÀ*Õ)MˆB�N‰N˜:Ñ&Ùãˆ
Ø—=‘=ˆØ��ˆä'¨°*×2HÑ2HÖI�Ø—‘˜–ñ Jà‰F÷ Ø@D�
×&Ñ&Ð'<Ñ=à�‰ &¨8¯=©=Õ"8Ô8Ø#Ÿ=™=¨¯©Ó9�Ø—_‘_ RÕ(ˆFÜ˜"¨°
×0FÑ0FÖGñ  ñ  øô}  *ô !Ú ð!ús   Î2X>Ø>YÙYc               ó(   € V ^8„  d   QhRRRRRRRR/# ©	r'   r¢   rà   r9   r  Úfilenameústr | bytesr*   rI   r   )r,   s   "r%   r-   r-     s(   € ÷ +ñ +�+ð + 9ð +¸ð +Èñ +r$   c                ó"   € \        WVR R7       R# )T)Úsave_allN)r  )r¢   r9   rL  s   &&&r%   Ú	_save_allrP    s   € Ü	ˆ"�( T×*r$   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r'   r¢   rà   r9   r  rL  rM  rO  r+   r*   rI   r   )r,   s   "r%   r-   r-     s4   € ÷ ñ ØðØ"ðØ.9ðØEIðà	ñr$   c                ó¨  € R V P                   9   g   R V P                  9   d7   V P                   P                  R V P                  P                  R 4      4      pMRpV P                   P                  RR4       V'       d   \	        WV4      '       g   \        WV4       VP                  R4       \        VR4      '       d   VP                  4        R# R# )rU   Nr%  Tr}   Úflush)	r  rP   r­   r	  rI  r  r  ÚhasattrrS  )r¢   r9   rL  rO  rU   s   &&&& r%   r  r    s—   € ð �B—N‘NÔ" i°2·7±7Ô&:Ø—.‘.×$Ñ$ Y°·±·±¸IÓ0FÓG‰àˆØ
�‰×!Ñ! *¨dÔ3çÔ1°"¸'×BÒBÜ˜B GÔ,à‡H�HˆT„Näˆr�7×ÒØ
�‰Ž
ñ r$   c               ó    € V ^8„  d   QhRRRR/# )r'   r¢   rà   r*   rb   r   )r,   s   "r%   r-   r-   0  s   € ÷ ñ �kð  cñ r$   c                óv   € V P                   P                  R ^4      p\        V P                  4      ^8  d   ^ pV# )r´   )r  r­   ÚminrŸ   )r¢   r´   s   & r%   r  r  0  s5   € Ø—‘×"Ñ" ;°Ó2€Iô ˆ2�7‰7ƒ|�bÔØˆ	àÐr$   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r'   r9   r  r¢   rà   rH  útuple[int, int]r\   rb   r*   rI   r   )r,   s   "r%   r-   r-   :  s4   € ÷ /ñ /Øð/Ø"ð/Ø,;ð/ØDGð/à	ñ/r$   c                ó¦  €  VP                   R ,          pRVP                   9   d%   \        VP                   R,          ^
,          4      pM^ p\        VP                   P                  R^ 4      4      pVf   V^ 8w  g	   V'       d“   Ve   ^M^ pWv^,          ,          pT P	                  R\        ^ù4      ,           \        ^4      ,           \        V4      ,           \        V4      ,           \        T;'       g    ^ 4      ,           \        ^ 4      ,           4       VP                   P                  R4      pV'       d0   \        V4      p	\        V	4      p
V
'       d   V^€,          pW:,          pV P	                  R\        V^ ,          4      ,           \        V^,          4      ,           \        VP                  ^ ,          4      ,           \        VP                  ^,          4      ,           \        V4      ,           4       V'       d#   X
'       d   V P	                  \        X	4      4       V P	                  \        ^4      4       R#   \         d    Rp EL:i ; i)r‰   Nr   r#  r~   r1  r„   )r  ÚKeyErrorrb   r­   r  r   Úo16Ú_get_palette_bytesÚ_get_color_table_sizerŸ   Ú_get_header_palette)r9   r¢   rH  r\   r‰   r   r#  Úpacked_flagr1  r  Úcolor_table_sizes   &&&&       r%   r  r  :  sÖ  € ðØ—~‘~ nÕ5ˆð �R—^‘^Ô#Ü�r—~‘~ jÕ1°BÕ6Ó7‰àˆä�2—>‘>×%Ñ% j°!Ó4Ó5€HàÒ 8¨q¤=·HØ'Ò3‘a¸ˆØ 1•}Õ$ˆà
�‰ØÜ�‹gõä�‹eõô �‹oõô �(‹mõ	ô
 �×"Ð" Ó#õ$ô �‹eõô	
ð Ÿ.™.×,Ñ,Ð-BÓCÐßÜ*¨2Ó.ˆÜ0°Ó?ÐßØ˜C•KˆEØÕ,ˆEà‡H�HØÜ
ˆf�Q�i‹.õ	ä
ˆf�Q�i‹.õ	ô ˆb�g‰g�a�j‹/õ	ô ˆb�g‰g�a�j‹/õ		ô
 ˆU‹)õ	ô÷ ×/Ø
�‰Ô$ ]Ó3Ô4Ø‡H�HŒR�‹U†OøôU ô Ø‹ðús   ‚H? È?IÉIc               ó(   € V ^8„  d   QhRRRRRRRR/# rK  r   )r,   s   "r%   r-   r-   l  s(   € ÷ -ñ -�[ð - ið -¸;ð -È4ñ -r$   c           	     ó”  € V P                  4       p \        VR 4      ;_uu_ 4       pV P                  R8w  d+   \        P                  ! RV.V\        P
                  R7       MõRRV.pR.p\        P                  ! V\        P                  \        P
                  R7      p\        P                  ! VVP                  V\        P
                  R7      pVP                  f   Q hVP                  P                  4        VP                  4       p	V	'       d   \        P                  ! W•4      hVP                  4       p	V	'       d   \        P                  ! W–4      hRRR4        \        P                  ! V4       R#   + '       g   i     L); i  \         d     R# i ; i   \        P                  ! T4       i   \         d     i i ; i; i)ÚwbrN   Úppmtogif)ÚstdoutÚstderrÚppmquantÚ256)Ústdinrf  rg  N)Ú_dumpÚopenr¨   Ú
subprocessÚ
check_callÚDEVNULLÚPopenÚPIPErf  ÚcloseÚwaitÚCalledProcessErrorÚosÚunlinkÚOSError)
r¢   r9   rL  Útempfilerv   Ú	quant_cmdÚ	togif_cmdÚ
quant_procÚ
togif_procÚretcodes
   &&&       r%   Ú_save_netpbmr~  l  sm  € ð �x‰x‹z€Hð$Ü�(˜D×!Ô! QØ�w‰w˜%ÔÜ×%Ò%Ø Ð*°1¼Z×=OÑ=Oöð (¨°Ð9�	Ø'˜L�	Ü'×-Ò-Ø¤j§o¡o¼j×>PÑ>Pô�
ô (×-Ò-ØØ$×+Ñ+ØÜ%×-Ñ-ô	�
ð "×(Ñ(Ò4Ð4Ð4Ø×!Ñ!×'Ñ'Ô)à$Ÿ/™/Ó+�ßÜ$×7Ò7¸ÓKÐKà$Ÿ/™/Ó+�ßÜ$×7Ò7¸ÓKÐK÷= "ð@	Ü�IŠI�hÖ÷C "×!ûôD ô 	Úð	ûð	Ü�IŠI�hÕøÜô 	Ùð	ýse   ’F ¦C,E8Ä-E8ÅE8ÅF Å F Å8F	ÆF ÆFÆFÆGÆF6Æ5GÆ6GÇGÇGÇGc               ó$   € V ^8„  d   QhRRRRRR/# )r'   r¢   rà   rP   rì   r*   zlist[int] | Noner   )r,   s   "r%   r-   r-   ¡  s"   € ÷ 3ñ 3�kð 3¨ð 3Ð<Lñ 3r$   c                ó>  € V P                   R9   Ed‹   V'       Ed‚   VP                  R4      '       Edj   V P                  ^ 8w  EdX   V P                  ^ 8w  EdF   \        ;'       g    V P                   R8H  pV'       g#   V P                  V P                  ,          R8  dÿ   . p\        V P                  4       4       F   w  rEV'       g   K  VP                  V4       K"  	  V'       g   \        V4      \        V4      8¼  d   V# V P                  f   Q h\        V P                  P                  4      \        P                  ! V P                  P                   4      ,          p^V^,
          P                  4       ,          p\        V4      V^,          8:  d
   V^8”  d   V# R# )a0  
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
r‡   r%  N)r†   r‡   i   )r¨   r­   ÚwidthÚheightÚ_FORCE_OPTIMIZErõ   Ú	histogramrô   r    rC   rU   r	   ÚgetmodebandsÚ
bit_length)r¢   rP   Úoptimiserû   rD   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes   &&      r%   r÷   r÷   ¡  s;  € ð 	�‰�:ÕßˆDØ�H‰H�Z× Ó Ø�H‰H˜�MØ�I‰I˜�Nô #×4Ð4 b§g¡g°¡nˆß�r—x‘x "§)¡)Õ+¨iÔ7à"$ÐÜ% b§l¡l£nÖ5‘�ß‘5Ø'×.Ñ.¨qÖ1ñ 6÷ œ3Ð2Ó3´sÐ;NÓ7OÔOØ*Ð*à—:‘:Ò)Ð)Ð)Ü!$ R§Z¡Z×%7Ñ%7Ó!8¼E×<NÒ<NØ—
‘
—‘ó=õ "Ðð $%Ð);¸aÕ)?×(KÑ(KÓ(MÕ#MÐ ô Ð'Ó(Ð,@ÀAÕ,EÔEà(¨1Ô,à*Ð*Ùr$   c               ó    € V ^8„  d   QhRRRR/# )r'   r  r)   r*   rb   r   )r,   s   "r%   r-   r-   ×  s   € ÷ Cñ C¨ð C°3ñ Cr$   c                ó¾   € V '       g   ^ # \        V 4      ^	8  d   ^# \        P                  ! \        P                  ! \        V 4      ^,          ^4      4      ^,
          # r–   )rC   ÚmathÚceilÚlog)r  s   &r%   r^  r^  ×  sA   € çÙÜ	ˆ]Ó	˜aÔ	Ùä�yŠyœŸš¤# mÓ"4¸Õ"9¸1Ó=Ó>ÀÕBÐBr$   c               ó    € V ^8„  d   QhRRRR/# )r'   r  r)   r*   r   )r,   s   "r%   r-   r-   á  s   € ÷ ñ  uð °ñ r$   c                óª   € \        V 4      p^V,          \        V 4      ^,          ,
          pV^ 8”  d!   V \        ^ 4      ^,          V,          ,          p V # )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^  rC   r   )r  ra  Úactual_target_size_diffs   &  r%   r_  r_  á  sR   € ô -¨]Ó;Ðð  !Ð$4Õ4¼¸MÓ8JÈaÕ8OÕOÐØ Ô"Øœ˜A› �Ð%<Õ<Õ<ˆØÐr$   c               ó    € V ^8„  d   QhRRRR/# )r'   r¢   rà   r*   r)   r   )r,   s   "r%   r-   r-   ó  s   € ÷ ñ ˜;ð ¨5ñ r$   c                ó  a€ V P                   '       g   R# \        V P                   P                   4      oV P                   P                  R8X  d5   RP                  V3R l\	        \        S4      ^,          4       4       4      o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$   r…   c              3  óX   <"  € T F  pSV^,          V^,          ^,            x € K!  	  R# 5i)é   Nr   )rï   rD   rU   s   & €r%   rð   Ú%_get_palette_bytes.<locals>.<genexpr>ÿ  s&   øé € ÐXÑ?W¸!˜7 1 q¥5¨1¨q­5°1­9Õ5Ó?Wùs   ƒ'*)rU   r)   r¨   ÚjoinrB   rC   )r¢   rU   s   &@r%   r]  r]  ó  s]   ø€ ð �:�:ˆ:Ùä�B—J‘J×&Ñ&Ó'€GØ	‡z�z‡�˜&Ô Ø—(‘(ÔX¼uÄSÈÃ\ÐUVÕEVÔ?WÓXÓXˆØ€Nr$   c               ó$   € V ^8„  d   QhRRRRRR/# )r'   r¢   rà   Úinfo_backgroundz=int | tuple[int, int, int] | tuple[int, int, int, int] | Noner*   rb   r   )r,   s   "r%   r-   r-     s&   € ÷ ñ ØðàRðð 	ñr$   c                óú   € ^ pV'       dG   \        V\        4      '       d/   V P                  f   Q h V P                  P                  W4      pV# TpV#   \         d   p\        T4      R9  d   h  Rp?T# Rp?ii ; i)r   N)z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r—   r�   rU   Úgetcolorrž   r  )r¢   rš  rM   rw   s   &&  r%   r5  r5    sŽ   € ð €JßÜ�o¤u×-Ò-ð —:‘:Ò)Ð)Ð)ð
ØŸZ™Z×0Ñ0°ÓE�
ð Ðð )ˆJØÐøô ô Ü�q“6ð "ô ð óð Ðûðús   ²A ÁA:ÁA5Á5A:c               ó$   € V ^8„  d   QhRRRRRR/# )r'   r¢   rà   rP   rì   r*   úlist[bytes]r   )r,   s   "r%   r-   r-     s!   € ÷ ;ñ ;˜;ð ;¨nð ;Àñ ;r$   c                óþ  € RpV P                   P                  R4      R8X  gQ   V'       dK   RV9   gB   VP                  R4      f/   VP                  R4      '       g   VP                  R4      '       d   Rp\        WP                  R4      4      p\        V 4      p\	        V4      pR	V,           \        V P                  ^ ,          4      ,           \        V P                  ^,          4      ,           \        V^€,           4      \        V4      \        ^ 4      ,           \        V4      .pVP                  R4      e€   VP                  R
\        ^ÿ4      ,           \        ^4      ,           R,           \        ^4      ,           \        ^4      ,           \        VR,          4      ,           \        ^ 4      ,           4       VP                  R4      '       d¯   R
\        ^þ4      ,           pVR,          p\        V\        4      '       d   VP                  4       p\        ^ \        V4      ^ÿ4       F0  p	W‰V	^ÿ,            p
V\        \        V
4      4      V
,           ,          pK2  	  V\        ^ 4      ,          pVP                  V4       V# )z2Return a list of strings representing a GIF headers   87arL   s   89ar‰   rƒ   r   r|   rM   s   GIFr~   r‚   )rP   r­   r5  r]  r^  r\  rŸ   r   r_  rô   r—   r  ÚencoderB   rC   )r¢   rP   rL   rM   r  ra  ÚheaderÚcomment_blockr|   rD   Úsubblocks   &&         r%   r
  r
    s  € ð €GØ	‡w�w‡{�{�9Ó Ô'ßà˜dÔ"Ø�x‰x˜ÓÒ+Ø�x‰x˜
×#Ò#Ø�x‰x˜	×"Ò"ð ˆä  §X¡X¨lÓ%;Ó<€Jä& rÓ*€MÜ,¨]Ó;Ðð 	Ø
õ	ä
ˆb�g‰g�a�j‹/õ	ô ˆb�g‰g�a�j‹/õ	ô 	Ð˜cÕ!Ó"ä
ˆ:‹œ˜A›Õä˜MÓ*ð€Fð ‡x�x�ÓÒ#Ø�‰ØÜ�‹gõä�‹fõð õô �‹eõ	ô
 �‹eõô �$�v•,Óõ ô �‹eõô		
ð ‡x�x�	×ÒØœr #›w�ˆà�y•/ˆÜ�gœs×#Ò#Ø—n‘nÓ&ˆGÜ�qœ#˜g›,¨Ö,ˆAØ 1 s¥7Ð+ˆHØœR¤ H£Ó.°Õ9Õ9ŠMñ -ð 	œ˜A›ÕˆØ�‰�mÔ$Ø€Mr$   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r'   r9   r  r  rà   rH  rY  Úparamsrì   r*   rI   r   )r,   s   "r%   r-   r-   \  s:   € ÷ !ñ !Øð!àð!ð ð!ð ð	!ð
 
ñ!r$   c                ó  €  W1n         \        WV^ 4       \        P                  ! VV \        P                  ! RRVP
                  ,           ^ \        VP                  ,          4      .4       V P                  R4       V= R#   T= i ; ir  )	r  r  r   r  r²   rŸ   rã   r¨   r  )r9   r  rH  r¥  s   &&&&r%   r>  r>  \  sn   € ð!Ø%Ôô 	˜B¨&°!Ô4ä�ŠØØÜ�_Š_˜U F¨X¯]©]Õ$:¸A¼wÀxÇ}Á}Õ?UÓVÐWô	
ð 	�‰�ŒàÒ øˆHÑ ús   ‚A:B  Â Bc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r'   r¢   rà   rU   rë   rP   zdict[str, Any] | Noner*   z$tuple[list[bytes], list[int] | None]r   )r,   s   "r%   r-   r-   w  s,   € ÷ 'ñ 'Øð'Ø-ð'Ø<Qð'à)ñ'r$   c                óø   € Vf   / p\        W4      pRV9  d(   RV P                  9   d   V P                  R,          VR&   \        WV4      pVP                  V n        VP                  V n        \        W4      pWS3# )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)

rM   )r÷   rP   r   rU   r¢   r
  )r¢   rU   rP   rû   Úim_modr¡  s   &&&   r%   Ú	getheaderrª  w  st   € ð ‚|Øˆä'¨Ó1Ðà˜4Ô L°B·G±GÔ$;ØŸW™W \Õ2ˆˆ\Ñä ¨TÓ2€FØ—‘€B„JØ�I‰I€B„EÜ Ó)€FàÐ&Ð&r$   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r'   r¢   rà   rH  rY  r¥  r   r*   rž  r   )r,   s   "r%   r-   r-   •  s,   € ÷ "ñ "Øð"Ø,ð"ØADð"àñ"r$   c                ó‚   € ^ RI Hp  ! R RV4      pV P                  4        V! 4       p\        WPW4       VP                  # )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

)ÚBytesIOc                  ó&   € ] tR tRt. tR R ltRtR# )Úgetdata.<locals>.Collectoriª  c               ó    € V ^8„  d   QhRRRR/# )r'   r=   r   r*   rb   r   )r,   s   "r%   r-   Ú'getdata.<locals>.Collector.__annotate__­  s   € ÷ 	ñ 	˜fð 	¨ñ 	r$   c                	óN   € V P                   P                  V4       \        V4      # r8   )r=   rô   rC   )r;   r=   s   &&r%   r  Ú getdata.<locals>.Collector.write­  s   € Ø�I‰I×Ñ˜TÔ"Ü�t“9Ðr$   r   N)r   r   r   r   r=   r  r#   r   r$   r%   Ú	Collectorr¯  ª  s   † Øˆ÷	ñ 	r$   r´  )Úior­  r�   r>  r=   )r¢   rH  r¥  r­  r´  r9   s   &&,   r%   rÅ   rÅ   •  s8   € õ& ô�Gô ð ‡G�G„Iá	‹€Bä�b˜fÔ-à�7‰7€Nr$   z.gifz	image/gif)F)NN)rÂ   )JÚ
__future__r   r2  r�  ru  rm  Úenumr   Ú	functoolsr   Útypingr   r   r   Ú r	   r
   r   r   r   r   r   Ú_binaryr   rQ   r   r   r\  Ú_utilr   ÚTYPE_CHECKINGr   r   r   Ú_typingr   r   r    r¦   r1   r3   rã   ré   r)   rò   ró   rb   Ú_Paletter   r  r  r  rI  rP  r  r  r  r~  rƒ  r÷   r^  r_  r]  r5  r
  r>  rª  rÅ   Úregister_openr,   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer   r$   r%   Ú<module>rÅ     s¦  ðõ4 #ã Û Û 	Û Ý Ý %ß (Ñ (÷÷ ñ õ "Ý Ý !Ý  à€ßß"åÝô�gô ð #×2Ñ2Ð õ5ôh�9×&Ñ&ô hð^ ��S˜#˜s CÐ
(€õð4 �9Õ˜t C�yÕ(¨<×+DÑ+DÕD€õDõNõ8
2ô ˆZô  õõD+÷õ&õ/õd-ðd €õ3õlCõõ$õ õ6;õ|!÷6'÷<"ðP × Ò �L×'Ñ'¨°wÔ ?Ø × Ò �L×'Ñ'¨Ô /Ø × Ò ˜×+Ñ+¨YÔ 7Ø × Ò ˜×,Ñ,¨fÔ 5Ø × Ò �L×'Ñ'¨Ö 5r$   