1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
Ë
³òúh¤©ãóü—ddlmZddlZddlZddlZddlZddlmZddlm    Z    ddl
m Z m Z m Z ddlmZmZmZmZmZmZmZddlmZdd    lmZdd
lmZdd lmZd Zerdd l
mZm Z ddlm!Z!ddl"m#Z#Gd„de«Z$e$jJZ&d/d„Z'Gd„dej"«Z(ddddœZ)d0d„Z*e+e,ze-e.zej(zZ/                                d1d„Z0                                d2d„Z1                        d3d„Z2Gd„de «Z3                                d4d„Z4d5d„Z5    d6                                    d7d „Z6d8d!„Z7                                        d9d"„Z8d5d#„Z9d Z:d:d$„Z;d;d%„Z<d<d&„Z=d=d'„Z>                        d>d(„Z?d?d)„Z@                                        d@d*„ZA    dA                            dBd+„ZB    dC                            dDd,„ZCejˆe(jŠe(e'«ejŒe(jŠe6«ejŽe(jŠe5«eje(jŠd-«ej’e(jŠd.«y)Eé)Ú annotationsN)ÚIntEnum)Úcached_property)ÚAnyÚ
NamedTupleÚcasté)ÚImageÚ
ImageChopsÚ    ImageFileÚ    ImageMathÚImageOpsÚ ImagePaletteÚ ImageSequence)Úi16le)Úo8)Úo16le)Ú DeferredErrorF)ÚIOÚLiteral)Ú_imaging)ÚBuffercó—eZdZdZdZdZdZy)ÚLoadingStrategyz.. versionadded:: 9.1.0rr    éN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYS©óúEH:\Change_password\venv_build\Lib\site-packages\PIL/GifImagePlugin.pyrr:s„Ù!à€OØ'(Ð$؁Jr$rcó$—|jd«S)N)sGIF87asGIF89a)Ú
startswith)Úprefixs r%Ú_acceptr)Is€Ø × Ñ Ð3Ó 4Ð4r$c󎇗eZdZdZdZdZdZdd„Zdd„Zdd„Z    e
dd„«Z e dd    „«Z dd
„Zddd „Zdˆfd „ Zdd „Zdd„ZˆxZS)Ú GifImageFileÚGIFzCompuserve GIFFNcó„—|jjd«}|r#|dr|jj|d«Sy)Nr    r)ÚfpÚread)ÚselfÚss  r%ÚdatazGifImageFile.dataYs6€Ø G‰GL‰L˜‹OˆÙ 1’Ø—7‘7—<‘<  !¡Ó%Ð %Ør$cóŠ—tdt|«d«D]*}|dz||cxk(r||dzcxk(r ||dzk(rŒ'yyy)Nrér    rTF)ÚrangeÚlen)r0ÚpÚis   r%Ú_is_palette_neededzGifImageFile._is_palette_needed_sX€Üqœ#˜a›& !Ó$ò    ˆAؘ‘F˜a ™dÔ: a¨¨A©¡hÔ:°!°A¸±E±(Ó:Ùð;Ùð    ðr$cóF—|jjd«}t|«s d}t|«‚|dd|jd<t |d«t |d«f|_|d}|dzdz}|d    zre|d
|jd <|jjd |z«}|j|«r$tjd |«}|x|_
|_ |j|_ |jj«|_d|_|j!d«y)Né znot a GIF fileéÚversionéé
ér    é€é Ú
backgroundr4ÚRGBr)r.r/r)Ú SyntaxErrorÚinfoÚi16Ú_sizer9rÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ    _n_framesÚ_seek)r0r1ÚmsgÚflagsÚbitsr7s      r%Ú_openzGifImageFile._openesù€à G‰GL‰L˜Ó ˆÜqŒzØ"ˆCܘcÓ"Ð "à   !˜uˆ    ‰    )Ñܘ˜A“Y¤ A q£    Ð)ˆŒ
ؐ"‘ˆØ˜‘    ˜Q‰ˆà 3Š;à&'¨¡eˆDI‰IlÑ #à—‘— ‘ ˜Q $™YÓ'ˆAØ×&Ñ& qÔ)Ü ×$Ñ$ U¨AÓ.Ø56Ð6Ô# d¤là—7‘7ˆŒØŸ™Ÿ ™ ›ˆŒ Ø%)ˆŒØ 
‰
1 r$có—|j€6|j«}        |j|j«dzd«Œ$|jS#t$r|j«dz|_YnwxYw|j    |«ŒE)Nr    F©rOrMrPÚEOFErrorÚseek)r0Úcurrents  r%Ún_frameszGifImageFile.n_framessw€à >‰>Ð !Ø—i‘i“kˆGð 1ØØ—J‘J˜tŸy™y›{¨Q™°Ô6ðð
~‰~Ðøôò 1Ø!%§¡£¨q¡–ð 1úà I‰IgÔ øsž%AÁ!A3Á2A3cóЗ|j|jdk7S|j«}|ry    |jdd«d}|j    |«|S#t$rd}YŒ wxYw)Nr    TFrV)r0rYÚ is_animateds   r%r\zGifImageFile.is_animated‹sn€à >‰>Ð %Ø—>‘> QÑ&Ð &à—)‘)“+ˆÙ Øð     Ø J‰Jq˜%Ô  ØˆKð         ‰    'ÔØÐøô    ò     ØŠKð     ús°AÁ A%Á$A%cóT—|j|«sy||jkrd|_|jd«|j}t    |jdz|dz«D]}    |j|«Œy#t
$r$}|j |«d}t |«|‚d}~wwxYw)Nrr    úno more images in GIF file)Ú _seek_checkÚ_GifImageFile__frameÚ_imrPr5rWrX)r0ÚframeÚ
last_frameÚfÚerQs      r%rXzGifImageFile.seeksœ€Ø×Ñ Ô&Ø Ø 4—<‘<Ò ØˆDŒHØ J‰JqŒMà—\‘\ˆ
ܐt—|‘| aÑ'¨°©Ó3ò    +ˆAð +Ø—
‘
˜1• ñ    +øôò +Ø—    ‘    ˜*Ô%Ø2Ü˜s“m¨Ð*ûð +úsÁ&A:Á:    B'ÂB"Â"B'c󨇗t‰jt«r‰jj‚|dk(r]d‰_d‰_d‰_‰jj‰j«d‰_    d‰jvr,‰jd=n‰jr|r‰j«|‰j dzk7rd|›}t|«‚‰j‰_‰jrN‰jj‰j«‰j«r    ‰j«rŒd‰_‰jj!d«}|r|dk(r d}t#|«‚d}i}d}d}d}        |s‰jj!d«}|r|dk(rnÓ|dk(rP‰jj!d«}‰j«}
|dd    k(r7|
5|
d} | dzr|
d
}t%|
d«d z|d <d | z} | dz    } | rÉ| ‰_    nÁ|ddk(r9d} |
r| |
z } ‰j«}
|
rŒd|vr|dxxd| zz cc<n| |d<d}ŒØ|ddk(rx|dk(rs|
q|
‰jj'«f|d<|
j)d«rA‰j«}
|
r/t+|
«d
k\r!|
ddk(rt%|
d«‰jd<‰j«r    ‰j«rŒny|dk(rs‰jj!d«}t%|d«t%|d«}}|t%|d«z|t%|d«z}}|‰j,dkDs|‰j,dkDrX|rVt/|‰j,d«t/|‰j,d«f‰_t3j4‰j0«||||f}    |d} | dzdk7}| dzrP| dzdz}‰jj!d
|z«}‰j7|«rt9j:d|«}nd}‰jj!d«d}‰jj'«‰_nd}Œù|€ d }t#|«‚|‰_|syg‰_ ‰j
r0‰j<j?‰j
‰j@«||n ‰jB‰_"|‰_#|dk(r{‰jDr+tHtJjLk(r |d!nd‰_'nd"‰_'nd#‰_'|r    |‰_(n‰jBrdd$l)m)}|‰jB«‰_(nõd‰_(ní‰jTd"k(rÞtHtJjVk7s|rÅd%‰jvrw‰j<jY‰jd%d«‰j<j[d!t2j\j^«‰_d!‰_'‰jd%=n@d‰_'‰j<j[dt2j\j^«‰_d,ˆfd&„ }d‰_|    ‰_ ‰j@r–‰jdk\r†    ‰jdk(rljj@\}}}}||z
||z
f}t3j4|«d"}‰jjad%|«}|‰jTd'vrBd!}||«d(z}n4‰jjad)d«}‰jTd'vr
d}||«}t2jbje|||«‰_n¯‰jf,‰ji‰j<‰j@«‰_nw|u‰j@\}}}}||z
||z
f}t3j4|«d"}|}‰jTd'vr d!}||«d(z}t2jbje|||«‰_|od}|<|dk(r'tHtJjLk7r |‰jd%<n‰jTd'vr|}tmjnd*f‰j||f«g‰_ |jad«r|d‰jd<d+D]5}||vr||‰j|<Œ|‰jvsŒ)‰j|=Œ7y#tj$rYŒÚwxYw)-NréÿÿÿÿÚcommentr    zcannot seek to frame ó;r^ó!éùr4r?Údurationéréþr$ó
éÿÚ    extensionó NETSCAPE2.0Úloopó,é    ér<r>é@rAr@rDFzimage not found in GIF frameÚRGBAÚPÚL)ÚcopyÚ transparencyc    ó•—‰jru|dzdzt‰jj«kDrd}ttt
t
t
ft    ‰jj|dz|dzdz««S|||fS)Nr4r)Ú_frame_paletter6rKrÚtupleÚint)Úcolorr0s €r%Ú_rgbz GifImageFile._seek.<locals>._rgb_sƒø€Ø×"Ò"ؘ1‘9˜q‘=¤3 t×':Ñ':×'BÑ'BÓ#CÒCؐEÜÜœ#œs¤C˜-Ñ(ܘ$×-Ñ-×5Ñ5°e¸a±iÀ%È!Á)ÈaÁ-ÐPÓQóðð
˜u eÐ,Ð,r$©rDrx)rrCÚgif)rlrq)rr€Úreturnztuple[int, int, int])8Ú
isinstancerLrÚexÚ_GifImageFile__offsetÚdisposer`rXrNÚdisposal_methodrFÚtileÚloadÚ
ValueErrorr.r2r/rWrGrMr'r6ÚsizeÚmaxrHr
Ú_decompression_bomb_checkr9rrIÚimÚpasteÚdispose_extentrJr~Ú_frame_transparencyÚLOADING_STRATEGYrr"Ú_moderKr{Úmoder!ÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillraÚ_cropÚAttributeErrorr Ú_Tile)r0rbÚ update_imagerQr1rKrFÚframe_transparencyÚ    interlaceÚframe_dispose_extentÚblockrRÚ dispose_bitsrhÚx0Úy0Úx1Úy1rSr7r{r‚Ú dispose_sizeÚ dispose_moderr|Úks`                          r%rPzGifImageFile._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™\Ø—    ‘    ” à 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Ø-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°EÐ4Eð).¨t¯w©w¯|©|«~Ð(=D˜Ñ%Ø×'Ñ'¨Ô7Ø $§    ¡    £ ˜Ù ¤S¨£Z°1¢_¸¸q¹ÀQºÜ03°E¸1³ ˜DŸI™I fÑ-Ø—i‘i•kØð—i‘i—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Ô?Ø')¨2¨r°2 ~Ð$ؘ!™à" R™Z¨AÑ-    à˜3’;Ø! A™I¨™?DØŸ™Ÿ ™  Q¨$¡YÓ/AØ×.Ñ.¨qÔ1Ü".×"2Ñ"2°5¸!Ó"<™à"'˜ð—w‘w—|‘| A“ qÑ)Ø $§¡§ ¡ £” ØØˆAñsðv Ð Ø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  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Ú    Fcã    c)ã(c)có8•—|jrdnd}d|_|jdk(rG|játj
j ||j|j«|_n¦|jdvr˜|j|_|jrttj
j d|j|jxsd«|_|jjdg|jj«¢­Žnd|_ |jsÞ|jÒ|j|jjk7r¯tj
j |jj|j«}|jr+|jdg|jj«¢­Ž|j|jd|jjz«||_||_d|_t‰|A«y)NryrzrrƒrD©rr)r~Ú_prev_imr`r”r
rržrŽr‘r—Ú
putpaletteÚgetdatarar’r–ÚsuperÚ load_prepare)r0Ú    temp_modeÚ expanded_imÚ    __class__s   €r%rµzGifImageFile.load_prepare²sø€Ø×.Ò.‘C°Cˆ    ØˆŒ Ø <‰<˜1Ò Ø×'Ñ'Ð3ÜŸ*™*Ÿ/™/ؘtŸy™y¨$×*BÑ*Bó•ðY‰Y˜/Ñ )Ø ŸG™GˆDŒMØ×"Ò"ÜŸ*™*Ÿ/™/¨#¨t¯y©y¸$×:RÑ:RÒ: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°·±· ± Ñ'<Ô =à!ˆDŒG؈Œ
Ø"ˆÔä ‰ÑÕr$cóD—|jdk(r«|jdk(r›ttjk(r„|j
.|j j|j
d«d|_nd|_|j j|jtjj«|_y|jsy|j|jjk7rå|j
+tjj!d|j«}nftjj!d|j«}|j#dd|j j%««|jd«}|j'|jd|jjz«||_ |j€J‚|j
x|jdk(r'|j j)d|j
«}n]|j j|j
d«|j jd«}n|j jd«}|j*€J‚|j-||j*«}|j|_|j j|_|jdvr(|j j'||j*|«y|j j'||j*«y)    NrryrxrDr°rzÚLA)rºrx)r`r—r•rr"r”r‘r˜r–r™r
ršr›r±rŽrržr²Ú
getpaletter’Úconvert_transparentr“rŸ)r0r·Úframe_ims   r%Úload_endzGifImageFile.load_endÍs:€Ø <‰<˜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à'ˆDŒ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˜( D×$7Ñ$7¸Õ Bà G‰GM‰M˜( D×$7Ñ$7Õ 8r$có—|jS©N)r`)r0s r%rMzGifImageFile.tell÷s €Ø|‰|Ðr$)r…z bytes | None)r7Úbytesr…Úbool)r…ÚNone)r…r€)r…rÂ)rbr€r…rÃ)T)rbr€r¢rÂr…rÃ)rrrÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrJr2r9rTÚpropertyrZrr\rXrPrµr¾rMÚ __classcell__)r¸s@r%r+r+Rslø„Ø €FØ)ÐØ(-Ð%à€Nóó ó ð4ò    óð    ðòóðó"+ô C!õJó6(9÷Tr$r+rzry)Ú1rzrycóð—|jtvr|j«|Stj|j«dk(r |j dtj j¬«}|j€J‚|jjdk(rL|jjD]3}|ddk(sŒ |jj||jd<|S|S|j 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
    rDry©rKrxr4rr|rz) r—ÚRAWMODErŒr
Ú getmodebaser™ÚPaletteÚADAPTIVErKÚcolorsrF)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óH—d}|rXt|tttf«rt|dd«}t|tj«rt|j
«}|j dk(r#|sZ|jd«}|€J‚t|«}n9|std„td«D««}t    jd|¬«|_|€J‚|râg}|j
€J‚tdt|«d«D]O}t|||dz«}|j
jj|«}||vrd}|j|«ŒQt|«D],\}}|Œ    tt|««D] }    |    |vsŒ|    ||<Œ,Œ.g}
|D]}|€J‚|
j|«Œ|j|
«}n@t!||«} | 2|j| |«}d    |vr    | j#|d    «|d    <|S|S|j
€J‚||j
_|S#t$$r|d    =Y|SwxYw)
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
    Niryc3ó&K—|]    }|dz–—Œ y­w)r4Nr#)Ú.0r8s  r%ú    <genexpr>z%_normalize_palette.<locals>.<genexpr><sèø€Ò&B°! q¨A¥vÑ&Bùs‚rDrËrr4r|)r†rÁÚ    bytearrayÚlistrrKr—r»r5r6rrÐrœÚappendÚ    enumerateÚ remap_paletteÚ _get_optimizeÚindexr) r‘rKrFÚsource_paletteÚ
im_paletteÚused_palette_colorsr8Ú source_colorrÝÚjÚdest_mapÚoptimized_palette_colorss             r%Ú_normalize_paletterås`€ð€NÙä g¤¤y´$Ð7Ô 8Ü& w¨t° }Ó5ˆNÜ gœ|×8Ñ8Ô 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Õ -ð     .ô "Ð"5Ó6ò    ‰HˆAˆu؉}ÜœsÐ#6Ó7Ó8òAØР3Ò3Ø12Ð+¨AÑ.Ùñð    ð !ˆØ(ò    #ˆEØÐ$Ð $Ð$Ø O‰O˜EÕ "ð    #ð× Ñ ˜hÓ '‰ä#0°°TÓ#:Ð Ø #Ð /Ø×!Ñ!Ð":¸NÓKˆBØ Ñ%ð-Ø+C×+IÑ+Iؘ^Ñ,ó,D˜Ñ(ð
ˆI2ˆIà :‰:Ð !Ð!Ð !Ø'€B‡JJÔØ €Iøô "ò-ؘ^Ñ,؈Ið-úsÇHÈ H!È H!c ó\—t|«}|jj«D]2\}}t|t«sŒ|j
j ||«Œ4t|||j
«}t||j
«D]}|j|«Œd}t|«r|dz}t||d|«dt|«f|_ tj||tjdd|j zdt"|j$«g«|jd«y)Nrrwr°r>r„ó)rÒrFÚitemsr†ÚstrÚ encoderinfoÚ
setdefaultråÚ_get_global_headerÚwriteÚ get_interlaceÚ_write_local_headerÚ encoderconfigr Ú_saver¡rŽrÌr—)r‘r.rKÚim_outr®Úvr1rRs        r%Ú_write_single_framerôfs€ô
˜RÓ  €FØ— ‘ ×!Ñ!Ó#ò,‰ˆˆ1Ü aœÕ Ø N‰N× %Ñ % a¨Õ +ð,ô  ¨°·±Ó @€Fä  ¨¯©Ó 7òˆØ
‰ ðð €EܐRÔØ˜‘
ˆÜ˜˜B ¨Ô.àœ}¨RÓ0Ð1€FÔÜ ‡OOؐ”Y—_‘_ U¨F°R·W±WÑ,<¸aÄÈÏÉÑAUÓVÐWôð‡HHˆU…Or$có2—||fDcgc]/}|jrt|jj«nd‘Œ1}}|d|dk7r"|jd«}|jd«}tj||«}||j d¬«fScc}w)Nr$rr    rxF)Ú
alpha_only)rKrÁr™r Úsubtract_moduloÚgetbbox)Úbase_imÚim_framer‘Ú palette_bytesÚdeltas     r%Ú_getbboxrý‚sž€ðELÈXÐCVöØ=? R§Z¢ZŒˆbj‰j× Ñ Ô!°SÑ8ð€MððQј=¨Ñ+Ò+Ø×#Ñ# FÓ+ˆØ—/‘/ &Ó)ˆÜ × &Ñ & x°Ó 9€EØ %—-‘-¨5-Ó1Ð 1Ð1ùòs‡4Bcó,—eZdZUded<ded<ded<y)Ú_Frameú Image.Imager‘z tuple[int, int, int, int] | NoneÚbboxúdict[str, Any]rêN)rrrÚ__annotations__r#r$r%rÿrÿs…؃OØ
*Ó*ØÔr$rÿc    ó —|jjd«}|jjd|jjd««}g}d}d}d}tj|g|jjdg««D]ô}    t j |    «D]Ø}
t|
j««}
|dk(rU|
jj«D]8\} } | dk(rŒ t| t«sŒ|jj| | «Œ:|jj«} d|
jvr| jd|
jd«t|
|| «}
t|ttf«r    ||| d<n"|€ d|
jvr|
jd| d<t|ttf«r||| d<|dz }d}|r|r~t!||
«\}}|s0| jd«r|djdxx| dz cc<Œx|djjd«dk(rÁ|jjd|jjd««}|y|€ft#|
|«}t%j&d    |
j(|«}|dj*j,}|€J‚|j/||j0«t!||
«d}nnd
|
j(z}n]| jd «rK|
j0d k7r;d| vr-|
j,€J‚    |
j,j3|
«| d<d| vr|
j«}t%j&d    |j(| d«}|j0d k(r1|j7«\}}}}t9j:d„||||¬«}nh|j0d    k(rAt%j&d|j(«}|j=|j?««|}t9j:d„|¬«}|jA|tCjD|«¬«nd}|
}|jGtI|xs|
|| ««ŒÛŒ÷tK|«dk(r.d|jvr|djd|jd<y|D]¸}|j*}
|jLs/tO|
|j«D]}|jQ|«Œd
}nW|sd|jd<|jLd
|
j(zk7r|
jS|jL«}
|jLdd}tU||
||j«Œºy#t4$rYŒ8wxYw)NrlÚdisposalrÚ append_imagesr|r    rgrryr°ÚoptimizerÉrxc ót—|d|d|d|d|d|d«|d«|d«dzd«S)    Nr™rÚrÚgÚbÚarprÉr#©Úargss r%ú<lambda>z(_write_multiple_frames.<locals>.<lambda>ßsd€¨_¨T°)©_Ø$/ D¨¡KØ(3¨¨U© Ø,7¨D°©K¸¸S¹    À4ÈÁ9Ó,MÈtÐTWÉyó)*ð)-¨S©    ó    %&ð '*ñ %*ð%(ó    ."€r$)r    r
r r rzcó&—|d|ddzd«S)Nr™r‘rprÉr#r s r%rz(_write_multiple_frames.<locals>.<lambda>õs€¨_¨T°)©_¸TÀ$¹ZÈ#Ñ=MÈsÓ-S€r$)r‘)ÚmaskFTÚinclude_color_table)+rêrœrFÚ    itertoolsÚchainrÚIteratorrÒr{rèr†rérërårØrrýÚ_get_backgroundr
ÚnewrŽr‘rKr²r—Ú_new_color_indexrÚsplitr Ú lambda_evalÚputdatar³r’rÚinvertrÙrÿr6rrìríÚcropÚ_write_frame_data)r‘r.rKrlrÚ    im_framesÚ previous_imÚ frame_countÚ background_imÚ
imSequencerúr®rórêÚ
diff_framerürrrCÚ first_paletteržr    r
r r rÚdelta_lÚ
frame_datar1Úoffsets                              r%Ú_write_multiple_framesr)•s €ð~‰~×!Ñ! *Ó-€H؏~‰~×!Ñ! *¨b¯g©g¯k©k¸*Ó.EÓF€Hà €IØ&*€KØ€KØ€MÜ—o‘o r d¨B¯N©N×,>Ñ,>¸ÐPRÓ,SÓTó]Pˆ
Ü%×.Ñ.¨zÓ:ó\    PˆHä& x§}¡}£Ó7ˆHؘaÒØ$ŸM™M×/Ñ/Ó1ò8‘DAqؘNÒ*Ø Ü! !¤SÕ)ØŸ™×1Ñ1°!°QÕ7ð    8ð Ÿ.™.×-Ñ-Ó/ˆKØ §¡Ñ.Ø×&Ñ& ~°x·}±}À^Ñ7TÔUÜ)¨(°G¸[ÓIˆHܘ(¤T¬5 MÔ2Ø*2°;Ñ*? ˜JÒ'ØÐ! j°H·M±MÑ&AØ*2¯-©-¸
Ñ*C ˜JÑ'ܘ(¤T¬5 MÔ2Ø*2°;Ñ*? ˜JÑ'Ø ˜1Ñ ˆKàˆJÚš[ä& {°HÓ=‘ tÙà"—‘ zÔ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Ü'¨ °xÓ@ÀÑCšà%¨¯ © Ñ5𨠗_‘_ ZÕ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 Ø '§¡°· ± ³Ô @Ø(/ Ü#,×#8Ñ#8Ù SØ#(ô$˜Dð#×(Ñ(¨´H·O±OÀDÓ4IÐ(ÕJàØ"ˆKØ × Ñ œV JÒ$:°(¸DÀ+ÓNÖ Oòy\    Pð]Pô~ ˆ9ƒ~˜ÒØ ˜Ÿ™Ñ 'à)2°1©×)AÑ)AÀ*Ñ)MˆBN‰N˜:Ñ &ØàòHˆ
Ø—=‘=ˆØŠä'¨°*×2HÑ2HÓIò Ø—‘˜• ð à‰FñØ@D
×&Ñ&Ð'<Ñ=à‰ &¨8¯=©=Ñ"8Ò8Ø#Ÿ=™=¨¯©Ó9Ø—_‘_ R aÐ(ˆFܘ"˜h¨°
×0FÑ0FÕGðHð  øô} *ò!Ú ð!úsÌ2U<Õ<    V    ÖV    có"—t|||d¬«y)NT)Úsave_all)rñ)r‘r.Úfilenames   r%Ú    _save_allr-s€Ü    ˆ"ˆb( TÖ*r$cóx—d|jvsd|jvr6|jjd|jjd««}nd}|jjdd«|r t    |||«s t |||«|j d«t|d«r|j«yy)NrKrTriÚflush)    rêrFrœrër)rôríÚhasattrr/)r‘r.r,r+rKs     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ór—|jjdd«}t|j«dkrd}|S)Nr¤r    ér)rêrœÚminrŽ)r‘r¤s  r%rîrî.s5€Ø—‘×"Ñ" ;°Ó2€Iô ˆ27‰7ƒ|bÒØˆ    à Ðr$cóš—    |jd}d|jvrt|jddz «}nd}t|jjdd««}|€|dk7s|rk|dnd}||dzz}|j    dt d    «zt d
«zt |«zt |«zt |xsd«zt d«z«|jjd «}|r"t|«}    t|    «}
|
r
|d z}||
z}|j    d t |d«zt |d«zt |jd«zt |jd«zt |«z«|r
r|j    t    ««|j    t d««y#t$rd}YŒ¸wxYw)Nr|rlr?rrr    rrjrkrvrrArtr>) rêÚKeyErrorr€rœrírÚo16Ú_get_palette_bytesÚ_get_color_table_sizerŽÚ_get_header_palette) r.r‘r(rRr|rlrÚ packed_flagrrûÚcolor_table_sizes            r%rïrï8sØ€ðØ—~‘~ nÑ5ˆ ðR—^‘^Ñ#ܐr—~‘~ jÑ1°BÑ6Ó7‰àˆä2—>‘>×%Ñ% j°!Ó4Ó5€HàР8¨q¢=±HØ'Ð3‘a¸ˆ ؐx 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‚F;Æ; G
Ç    G
có@—|j«}    t|d«5}|jdk7r)tjd|g|tj
¬«nådd|g}dg}tj |tjtj
¬«}tj ||j|tj
¬«}|j€J‚|jj«|j«}    |    rtj|    |«‚|j«}    |    rtj|    |«‚ddd«    tj|«y#1swYŒ xYw#t$rYywxYw#    tj|«w#t$rYwwxYwxYw)NÚwbrDÚppmtogif)ÚstdoutÚstderrÚppmquantÚ256)Ústdinr?r@)Ú_dumpÚopenr—Ú
subprocessÚ
check_callÚDEVNULLÚPopenÚPIPEr?ÚcloseÚwaitÚCalledProcessErrorÚosÚunlinkÚOSError)
r‘r.r,ÚtempfilerdÚ    quant_cmdÚ    togif_cmdÚ
quant_procÚ
togif_procÚretcodes
          r%Ú _save_netpbmrWjsy€ðx‰x‹z€Hð$Ü (˜DÓ !ð    L 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÷=    Lð@    Ü I‰IhÕ ÷C    Lð    LûôDò    Ù ð    ûð    Ü I‰IhÕ øÜò    Ù ð    ýsY’ E6žDEÄ<E6ÅE'ÅE$Å E6Å'    E3Å2E3Å6FÅ8FÆ FÆ    FÆFÆFÆFcód—|jdvr!|r|jd«r txs|jdk(}|s|j|jzdkr×g}t |j ««D]\}}|sŒ    |j|«Œ|st|«t|«k\r|S|j€J‚t|jj«tj|jj«z}d|dz
j«z}t|«|dzkr|dkDr|Sy)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
    )ryrzrrziNr    r)r—rœÚ_FORCE_OPTIMIZEÚwidthÚheightrÚÚ    histogramrÙrr6rKr
Ú getmodebandsÚ
bit_length)r‘rFÚoptimiseràr8ÚcountÚnum_palette_colorsÚcurrent_palette_sizes        r%rÜrܟs €ð
‡ww*Ò¢¨$¯(©(°:Õ*>ô#Ò4 b§g¡g°¡nˆÙ r—x‘x "§)¡)Ñ+¨iÒ7à"$Ð Ü% b§l¡l£nÓ5ò 2‘5ÚØ'×.Ñ.¨qÕ1ð 2ñœ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ó–—|syt|«dkrytjtjt|«dzd««dz
S)Nrrur    r4r)r6ÚmathÚceilÚlog)rûs r%r8r8ÏsA€á ØÜ     ˆ]Ó    ˜aÒ    Øäy‰yœŸ™¤# mÓ"4¸Ñ"9¸1Ó=Ó>ÀÑBÐBr$cóv—t|«}d|zt|«dzz
}|dkDr|td«dz|zz }|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
    rr4r)r8r6r)rûr;Úactual_target_size_diffs   r%r9r9ÙsR€ô-¨]Ó;Ðð !Ð$4Ñ4¼¸MÓ8JÈaÑ8OÑOÐØ Ò"Øœ˜A› ™Ð%<Ñ<Ñ<ˆ Ø Ðr$cóð‡—|jsyt|jj«Š|jjdk(r/djˆfd„t    t ‰«dz«D««Š‰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$rxc3ó:•K—|]}‰|dz|dzdz–—Œy­w)rvr4Nr#)rÕr8rKs  €r%rÖz%_get_palette_bytes.<locals>.<genexpr>÷s$øèø€ÒX¸!˜7 1 q¡5¨1¨q©5°1©9Ô5ÑXùsƒr4)rKrÁr—Újoinr5r6)r‘rKs @r%r7r7ës[ø€ð :Š:ØäB—J‘J×&Ñ&Ó'€GØ    ‡zz‡˜&Ò Ø—(‘(ÓX¼uÄSÈÃ\ÐUVÑEVÓ?WÔXÓXˆØ €Nr$có֗d}|r?t|t«r-|j€J‚    |jj||«}|S|}|S#t$r}t |«dvr‚Yd}~|Sd}~wwxYw)Nr)z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r†rrKÚgetcolorrré)r‘Úinfo_backgroundrCres    r%rrûs€ð€JÙÜ o¤uÔ -ð—:‘:Ð)Ð )Ð)ð
ØŸZ™Z×0Ñ0°À"ÓE
ð Ðð)ˆJØ Ðøôò ܐq“6ð"ñðóð Ðûð ús¤AÁ    A(ÁA#Á#A(có—d}|jjd«dk(s9|r9d|vs3|jd«€"|jd«s|jd«rd}t||jd««}t|«}t    |«}d    |zt |j d
«zt |j d «zt|d z«t|«td
«zt|«g}|jd«_|jd td«ztd«zdztd«ztd «zt |d«ztd
«z«|jd«rd td«z}|d}t|t«r|j«}td
t|«d«D]$}    ||    |    dz}
|tt|
««|
zz }Œ&|td
«z }|j|«|S)z2Return a list of strings representing a GIF headers87ar=s89ar|rsrlrhrCsGIFrr    rArjrprBrrr4rn)rFrœrr7r8r6rŽrr9rÙr†réÚencoder5r6) r‘rFr=rCrûr;ÚheaderÚ comment_blockrhr8Úsubblocks            r%rìrìs€ð €GØ    ‡ww‡{{9Ó Ò'Ù à ˜dÑ "؏x‰x˜ÓÐ+؏x‰x˜
Ô#؏x‰x˜    Ô"ðˆä   T§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ؘq 1 s¡7Ð+ˆHØ œR¤ H£ Ó.°Ñ9Ñ 9‰Mð    :ð    œ˜A›Ñˆ ؏ ‰ mÔ$Ø €Mr$c óü—    ||_t|||d«tj||tjdd|j
zdt |j«g«|jd«|`y#|`wxYw)Nrr„r°rç)    rêrïr rñr¡rŽrÌr—rí)r.rúr(Úparamss    r%rrTsr€ð !Ø%ˆÔô    ˜B ¨&°!Ô4ä‰Ø Ø Ü _‰_˜U F¨X¯]©]Ñ$:¸A¼wÀxÇ}Á}Ñ?UÓ VÐ Wô    
ð      ‰Œà Ñ  øˆHÑ  ús ‚A2A7Á7A;cóè—|€i}t||«}d|vr d|jvr|jd|d<t|||«}|j|_|j|_t ||«}||fS)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)
 
    rC)rÜrFrårKr‘rì)r‘rKrFràÚim_modrqs      r%Ú    getheaderrxos}€ð €|؈ä'¨¨DÓ1Ðà˜4Ñ L°B·G±GÑ$;ØŸW™W \Ñ2ˆˆ\Ñä   G¨TÓ 2€FØ—‘€B„JØ I‰I€B„EÜ   DÓ )€Fà Ð&Ð &Ð&r$c ó†—ddlm}Gd„d|«}|j«|«}t||||«|jS)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
 
    r)ÚBytesIOcó—eZdZgZdd„Zy)úgetdata.<locals>.CollectorcóN—|jj|«t|«SrÀ)r2rÙr6)r0r2s  r%ríz getdata.<locals>.Collector.write¥s€Ø I‰I× Ñ ˜TÔ "ܐt“9Ð r$N)r2rr…r€)rrrr2rír#r$r%Ú    Collectorr|¢s „؈ô    r$r~)ÚiorzrŒrr2)r‘r(rurzr~r.s      r%r³r³s<€õ&ôGôð‡GG„Iá    ‹€Bäb˜"˜f fÔ-à 7‰7€Nr$z.gifz    image/gif)r(rÁr…rÂ)r‘rr…r)r‘rrKú_Palette | NonerFrr…r)r‘rr.ú    IO[bytes]rKr€r…rÃ)rùrrúrr…z4tuple[Image.Image, tuple[int, int, int, int] | None])r‘rr.rrKr€r…rÂ)r‘rr.rr,ú str | bytesr…rÃ)F)
r‘rr.rr,r‚r+rÂr…rÃ)r‘rr…r€)
r.rr‘rr(útuple[int, int]rRr€r…rÃ)r‘rrFrr…zlist[int] | None)rûrÁr…r€)rûrÁr…rÁ)r‘rr…rÁ)r‘rrnz=int | tuple[int, int, int] | tuple[int, int, int, int] | Noner…r€)r‘rrFrr…ú list[bytes])
r.rrúrr(rƒrurr…rÃ)NN)r‘rrKr€rFzdict[str, Any] | Noner…z$tuple[list[bytes], list[int] | None])r°)r‘rr(rƒrurr…r„)JÚ
__future__rrrdrNrFÚenumrÚ    functoolsrÚtypingrrrÚr
r r r rrrÚ_binaryrrGrrr6Ú_utilrÚ TYPE_CHECKINGrrrÚ_typingrrr r•r)r+rÌrÒrÁr×rØr€Ú_Paletterårôrýrÿr)r-rñrîrïrWrYrÜr8r9r7rrìrrxr³Ú register_openrÄÚ register_saveÚregister_save_allÚregister_extensionÚ register_mimer#r$r%ú<module>r”sðõ4#ãÛ Û    ÛÝÝ%ß(Ñ(÷÷ñõ"ÝÝ!Ý à€ Ùß"åÝôgôð#×2Ñ2Ðó 5ôf9×&Ñ&ôfðZ ˜# CÑ
(€óð4 9Ñ ˜t C™yÑ (¨<×+DÑ+DÑ D€ðDØðDØ-ðDØ5CðDàóDðNØðàðððð
ó    ð8
2Ø ð
2Ø$/ð
2à9ó
2ô ˆZô ð ØðØ"ðØ-<ðà    óóD+ð
MRðØðØ"ðØ.9ðØEIðà    óó&ð/Øð/Ø"ð/Ø,;ð/ØDGð/à    ó/ód-ðd€ó-ó`Cóó$ ð ØðàRðð    óó6;ð|!Øð!àð!ð ð!ð ð    !ð
 
ó !ð8UYð'Øð'Ø-ð'Ø<Qð'à)ó'ð>06ð"Øð"Ø,ð"ØADð"àó"ðP€×ѐL×'Ñ'¨°wÔ?Ø€×ѐL×'Ñ'¨Ô/Ø€×ј ×+Ñ+¨YÔ7Ø€×ј×,Ñ,¨fÔ5Ø€×ѐL×'Ñ'¨Õ5r$