Ë
    ™2Úió[  ã                   ó&  — 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 dZdZ	dZ
	 dd	d
dddœZ	 d„ Zd„ Z G d„ dej
                  «      Z G d„ de«      Z G d„ d«      Zd!d„Zd"d„Zd„ Z G d„ d«      Z G d„ d«      Z G d„ de«      Z G d„ d e«      Zy)#é    Né   )ÚImage)Úis_pathi   i   Fzimage buffer overrun errorzdecoding errorzunknown errorzbad configurationzout of memory error)éÿÿÿÿéþÿÿÿéýÿÿÿéøÿÿÿi÷ÿÿÿc                 ó¸   — 	 t         j                  j                  | «      }|sd| › �}|dz  }t        |«      ‚# t        $ r t        j                  | «      }Y Œ7w xY w)Nzdecoder error z when reading image file)r   ÚcoreÚgetcodecstatusÚAttributeErrorÚERRORSÚgetÚOSError)ÚerrorÚmsgs     úD/var/www/html/acx/venv/lib/python3.12/site-packages/PIL/ImageFile.pyÚraise_oserrorr   @   s`   € ð Ü�j‰j×'Ñ'¨Ó.ˆñ Ø˜u˜gÐ&ˆØÐ%Ñ%€CÜ
�#‹,Ðøô ò  Ü�j‰j˜ÓŠð ús   ‚8 ¸AÁAc                 ó   — | d   S )Né   © )Úts    r   Ú	_tilesortr   K   s   € àˆQ‰4€Kó    c                   óR   ‡ — e Zd ZdZd
ˆ fd„	Zd„ Zˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zˆ xZS )Ú	ImageFilez*Base class for image file format handlers.c                 ó~  •— t         ‰| �  «        d| _        d | _        d | _        	 d| _        d| _        t        | _        t        |«      r t        |d«      | _        || _        d| _        n|| _        || _        d | _        	 	 | j                  «        | j,                  r$| j.                  d   dk  s| j.                  d   dk  rd}t+        |«      ‚y # t        t         t"        t$        t&        j(                  f$ r}t+        |«      |‚d }~ww xY w# t0        $ r( | j                  r| j                  j3                  «        ‚ w xY w)Nr   r   r   ÚrbTznot identified by this driver)ÚsuperÚ__init__Ú
_min_frameÚcustom_mimetypeÚtileÚreadonlyÚdecoderconfigÚMAXBLOCKÚdecodermaxblockr   ÚopenÚfpÚfilenameÚ_exclusive_fpÚ_openÚ
IndexErrorÚ	TypeErrorÚKeyErrorÚEOFErrorÚstructr   ÚSyntaxErrorÚmodeÚsizeÚBaseExceptionÚclose)Úselfr)   r*   Úvr   Ú	__class__s        €r   r    zImageFile.__init__X   s'  ø€ Ü‰ÑÔàˆŒà#ˆÔàˆŒ	Ø7àˆŒàˆÔÜ'ˆÔä�2Œ;ä˜2˜t“nˆDŒGØˆDŒMØ!%ˆDÕð ˆDŒGØ$ˆDŒMà!%ˆDÔð	ð	,Ø—
‘
”ð —9’9 §	¡	¨!¡°Ò 1°T·Y±Y¸q±\ÀQÒ5FØ5�Ü! #Ó&Ð&ð 6Gøô ÜÜÜÜ—‘ðò ,ô " !“n¨!Ð+ûð,ûô ò 	à×!Ò!Ø—‘—‘”Øð		ús*   ÂC Â=D Ã(DÃ7DÄDÄD Ä1D<c                 óº   — | j                   r| j                   S | j                  �7t        j                  j	                  | j                  j                  «       «      S y ©N)r"   Úformatr   ÚMIMEr   Úupper©r7   s    r   Úget_format_mimetypezImageFile.get_format_mimetypeˆ   sF   € Ø×ÒØ×'Ñ'Ð'Ø�;‰;Ð"Ü—:‘:—>‘> $§+¡+×"3Ñ"3Ó"5Ó6Ð6ð #r   c                 ó2   •— g | _         t        ‰| �	  |«       y r;   )r#   r   Ú__setstate__)r7   Ústater9   s     €r   rB   zImageFile.__setstate__Ž   s   ø€ ØˆŒ	Ü‰Ñ˜UÕ#r   c                 ó^   — | j                   r| j                  j                  «        d| _        y)zCheck file integrityN)r+   r)   r6   r?   s    r   ÚverifyzImageFile.verify’   s!   € ð
 ×ÒØ�G‰G�M‰MŒOØˆ�r   c                 ó
  — | j                   €d}t        |«      ‚t        j                  j                  | «      }| j                   s|S d| _        | j
                  xr t        | j                   «      dk(  }|xr t        t        d«       }d}	 | j                  }d}	 | j                  }d}|�r8| j                   d   \  }}}	}
|dk(  �rt        |
«      dk\  �r|
d   | j                  k(  rý|
d   t        j                   v rè	 ddl}t%        | j
                  «      5 }|j#                  |j'                  «       d|j(                  ¬	«      | _        ddd«       |	| j*                  d   |
d   z  z   | j                  j+                  «       kD  rt        ‚t        j,                  j/                  | j                  | j*                  ||	|
«      | _        d}| j2                  rd| j2                  _        | j9                  «        d
}| j                  �s…| j                   j;                  t<        ¬«       	 | j>                  }tA        jB                  | j                   d„ «      D ��cg c]  \  }}tE        |«      d   ‘Œ c}}| _         | j                   D �]  \  }}}	}
 ||	«       t        jF                  | j                  ||
| jH                  «      }	 |jK                  | j0                  |«       |jL                  r0|jO                  | j                  «       |jQ                  d«      d   }n^|}	 	  || jR                  «      }|s!tZ        rn?dt        |«      › d�}t        |«      ‚||z   }|jQ                  |«      \  }}|dk  rn||d }Œ[|j]                  «        �Œ g | _         || _/        | ja                  «        | jb                  r&| jd                  r| j                  jg                  «        d| _        | j                  stZ        s|dk  rti        |«       t        j                  j                  | «      S # t        $ r | j                  j                  }Y �Œ¨w xY w# t        $ r | j                  j                  }Y �Œ¿w xY w# 1 sw Y   �Œ&xY w# t        t        t6        f$ r d| _        Y �Œ³w xY w# t        $ r d}Y �Œyw xY wc c}}w # tT        tV        jX                  f$ r}tZ        rY d}~�Œcd}t        |«      |‚d}~ww xY w# |j]                  «        w xY w)z"Load image data based on tile listNzcannot load this imager   Úpypy_version_infor   FÚrawé   )Úaccessr   ©Úkeyr   c                 ó   — | d   | d   | d   fS )Nr   r   rI   r   )r#   s    r   ú<lambda>z ImageFile.load.<locals>.<lambda>è   s   € ¨T°!©W°d¸1±g¸tÀA¹wÐ,G€ r   r   zimage file is truncatedzimage file is truncated (z bytes not processed))5r#   r   r   ÚloadÚmapr*   ÚlenÚhasattrÚsysÚ	load_readr   r)   ÚreadÚ	load_seekÚseekr3   Ú	_MAPMODESÚmmapr(   ÚfilenoÚACCESS_READr4   r   Ú
map_bufferÚimÚpaletteÚdirtyÚImportErrorÚload_prepareÚsortr   Útile_prefixÚ	itertoolsÚgroupbyÚlistÚ_getdecoderr%   ÚsetimageÚpulls_fdÚsetfdÚdecoder'   r-   r1   r   ÚLOAD_TRUNCATED_IMAGESÚcleanupr$   Úload_endr+   Ú!_close_exclusive_fp_after_loadingr6   r   )r7   r   ÚpixelÚuse_mmapr$   rU   rW   Údecoder_nameÚextentsÚoffsetÚargsrY   r)   Úerr_codeÚprefixÚ_ÚtilesÚdecoderÚbÚsÚeÚns                         r   rO   zImageFile.load›   sf  € ð �9‰9ÐØ*ˆCÜ˜#“,Ðä—‘× Ñ  Ó&ˆØ�yŠyØˆLàˆŒØ—=‘=Ò8¤S¨¯©£^°qÑ%8ˆàÒE¤G¬CÐ1DÓ$EÐ Eˆàˆð	 Ø—>‘>ˆDàˆHð	 Ø—>‘>ˆDØˆHò à26·)±)¸A±,Ñ/ˆL˜' 6¨4à Ó%Ü˜“I “NØ˜‘G˜tŸy™yÒ(Ø˜‘GœuŸ™Ñ.ð$ãä˜dŸm™mÓ,ð V°Ø#'§9¡9¨R¯Y©Y«[¸!ÀD×DTÑDT 9Ó#U˜œ÷Và §	¡	¨!¡¨t°A©wÑ 6Ñ6¸¿¹¿¹»ÒHä%˜Ü#Ÿj™j×3Ñ3ØŸ™ $§)¡)¨\¸6À4ó�D”Gð  !�Hð —|’|Ø-.˜Ÿ™Ô*ð 	×ÑÔØˆØ�x‹xà�I‰I�N‰NœyˆNÔ)ðà×)Ñ)�ô !*× 1Ñ 1Ø—I‘IÑGó!÷á�A�uô �U“˜B“óˆDŒIð 8<·y±yó (&Ñ3�˜g v¨tÙ�V”Ü×+Ñ+Ø—I‘I˜|¨T°4×3EÑ3Eó�ð#&Ø×$Ñ$ T§W¡W¨gÔ6Ø×'Ò'ØŸ™ d§g¡gÔ.Ø#*§>¡>°#Ó#6°qÑ#9™à"˜Ø"ð>Ù$(¨×)=Ñ)=Ó$> ñ $%Ý#8Ø$)ð),Ü,/°«F¨8Ð3Hð)Jð %(ô +2°#«,Ð$6à ! A¡˜AØ*1¯.©.¸Ó*;™K˜A˜xØ  1šuØ %Ø ! ! " ˜Að3 #ð8 —O‘OÖ%ðQ(&ðT ˆŒ	Ø ˆŒà�‰Œà×Ò $×"HÒ"HØ�G‰G�M‰MŒOØˆŒà�xŠxÕ 5¸(ÀQº,ä˜(Ô#ä�{‰{×Ñ Ó%Ð%øôa ò 	 Ø—7‘7—<‘<‹Dð	 ûô ò 	 Ø—7‘7—<‘<‹Dð	 ú÷ Vñ Vûô '¬´Ð=ò $Ø#�D—Hð$ûô "ò Ø“ðüóøô* %/´·±Ð#=ò >å#8Ý$)à*C CÜ*1°#«,¸AÐ$=ûð>ûð2 —O‘OÕ%ús¥   ÂP  ÂQ Ã=Q9 Ä2Q,ÅBQ9 È$R ÉR-Ê?AS.ÌR3Ì-AS.Ð QÑQÑQ)Ñ(Q)Ñ,Q6Ñ1Q9 Ñ9RÒRÒR*Ò)R*Ò3S+ÓS&ÓS.ÓS&Ó&S+Ó+S.Ó.T c                 óx  — | j                   rF| j                   j                  | j                  k7  s#| j                   j                  | j                  k7  r9t        j                  j                  | j                  | j                  «      | _         | j                  dk(  r t        j                  j                  | «       y y )NÚP)r]   r3   r4   r   r   ÚnewrO   r?   s    r   ra   zImageFile.load_prepare$  sp   € à�wŠw˜$Ÿ'™'Ÿ,™,¨$¯)©)Ò3°t·w±w·|±|ÀtÇyÁyÒ7PÜ—j‘j—n‘n T§Y¡Y°·	±	Ó:ˆDŒGà�9‰9˜ÒÜ�K‰K×Ñ˜TÕ"ð r   c                  ó   — y r;   r   r?   s    r   rn   zImageFile.load_end,  s   € àr   c                 óÈ   — || j                   k  s4t        | d«      r| j                  �)|| j                  | j                   z   k\  rd}t	        |«      ‚| j                  «       |k7  S )NÚ	_n_framesz attempt to seek outside sequence)r!   rR   r„   Ún_framesr0   Útell)r7   Úframer   s      r   Ú_seek_checkzImageFile._seek_check8  sZ   € à�D—O‘OÒ#ô ˜T ;Ô/°D·N±NÐ4JØ˜TŸ]™]¨T¯_©_Ñ<Ò<ð 5ˆCÜ˜3“-Ðà�y‰y‹{˜eÑ#Ð#r   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    r@   rB   rE   rO   ra   rn   rˆ   Ú__classcell__)r9   s   @r   r   r   U   s1   ø„ Ù4õ.ò`7ô$òòG&òR#òö$r   r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚStubImageFilez±
    Base class for stub image loaders.

    A stub loader is an image loader that can identify files of a
    certain format, but relies on external code to load the file.
    c                 ó   — d}t        |«      ‚)Nz+StubImageFile subclass must implement _open©ÚNotImplementedError©r7   r   s     r   r,   zStubImageFile._openP  s   € Ø;ˆÜ! #Ó&Ð&r   c                 óê   — | j                  «       }|€d| j                  › d�}t        |«      ‚|j                  | «      }|€J ‚|j                  | _        |j
                  | _        |j                  «       S )Nzcannot find loader for this z file)Ú_loadr<   r   rO   r9   Ú__dict__)r7   Úloaderr   Úimages       r   rO   zStubImageFile.loadT  sj   € Ø—‘“ˆØˆ>Ø0°·±°¸UÐCˆCÜ˜#“,ÐØ—‘˜DÓ!ˆØÐ Ð Ð àŸ™ˆŒØŸ™ˆŒØ�z‰z‹|Ðr   c                 ó   — d}t        |«      ‚)z (Hook) Find actual image loader.z+StubImageFile subclass must implement _loadr‘   r“   s     r   r•   zStubImageFile._load`  s   € à;ˆÜ! #Ó&Ð&r   N)r‰   rŠ   r‹   rŒ   r,   rO   r•   r   r   r   r�   r�   H  s   „ ñò'ò
ó'r   r�   c                   óF   — e Zd ZdZdZdZdZdZdZdZ	d„ Z
d„ Zd„ Zd„ Zd„ Zy)	ÚParserzj
    Incremental image parser.  This class implements the standard
    feed/close consumer interface.
    Nr   c                 ó*   — | j                   �J d«       ‚y)zµ
        (Consumer) Reset the parser.  Note that you can only call this
        method immediately after you've created a parser; parser
        instances cannot be reused.
        Nzcannot reuse parsers)Údatar?   s    r   ÚresetzParser.resets  s   € ð �y‰yÐ Ð8Ð"8Ó8Ñ r   c                 óR  — | j                   ry| j                  €|| _        n| j                  |z   | _        | j                  rå| j                  dkD  rmt	        t        | j                  «      | j                  «      }| j                  |d | _        | j                  |z
  | _        | j                  dkD  s| j                  sy| j                  j                  | j                  «      \  }}|dk  r'd| _        d| _         |dk  rd| _        t        |«       ny| j                  |d | _        y| j                  ry	 t        j                  | j                  «      5 }t        j                  |«      }ddd«       t        d«      xs t        |d«      }|st        |j                  «      dk7  rd| _        || _        y|j                  «        |j                  d   \  }}}	}
g |_        t        j                   |j"                  ||
|j$                  «      | _        | j                  j'                  |j(                  |«       |	| _        | j                  t        | j                  «      k  r%| j                  | j                  d | _        d| _        || _        y# 1 sw Y   �Œ%xY w# t*        $ r Y yw xY w)z¦
        (Consumer) Feed data to the parser.

        :param data: A string buffer.
        :exception OSError: If the parser failed to parse the image file.
        Nr   r   rV   rT   )Úfinishedr�   rz   rt   ÚminrQ   rk   r˜   r   ÚioÚBytesIOr   r(   rR   r#   ra   rg   r3   r%   rh   r]   r   )r7   r�   Úskipr~   r}   r)   r]   ÚflagÚdÚoÚas              r   ÚfeedzParser.feed{  s#  € ð �=Š=Øà�9‰9ÐØˆD�IàŸ	™	 DÑ(ˆDŒIð �<Š<Ø�{‰{˜QŠäœ3˜tŸy™y›>¨4¯;©;Ó7�Ø ŸI™I d eÐ,�”	Ø"Ÿk™k¨DÑ0�”Ø—;‘; ’?¨$¯)ª)Øà—<‘<×&Ñ& t§y¡yÓ1‰DˆAˆqà�1Šuà �”	Ø !�”Ø�q’5à!%�D”JÜ! !Õ$ð ØŸ	™	 ! "˜ˆD�Ià�ZŠZð ð Ü—Z‘Z §	¡	Ó*ð (¨bÜŸ™ B›�B÷(ô ˜r ;Ó/ÒK´7¸2¸{Ó3K�Ùœ3˜rŸw™w›<¨1Ò,à"&�D”Kð  �•
ð —O‘OÔ%Ø!#§¡¨¡‘J�A�q˜!˜QØ �B”GÜ#(×#4Ñ#4°R·W±W¸aÀÀB×DTÑDTÓ#U�D”LØ—L‘L×)Ñ)¨"¯%©%°Ô3ð #$�D”KØ—{‘{¤c¨$¯)©)£nÒ4Ø$(§I¡I¨d¯k©k¨mÐ$<˜œ	Ø&'˜œà�•
÷1(ñ (ûäò áðús*   Ä5J ÅJÅ*J ÊJÊJ Ê	J&Ê%J&c                 ó   — | S r;   r   r?   s    r   Ú	__enter__zParser.__enter__È  s   € Øˆr   c                 ó$   — | j                  «        y r;   )r6   ©r7   ru   s     r   Ú__exit__zParser.__exit__Ë  s   € Ø�
‰
�r   c                 ó,  — | j                   r8| j                  d«       dx| _        | _         | j                  sd}t	        |«      ‚| j
                  sd}t	        |«      ‚| j                  rjt        j                  | j                  «      5 }	 t        j                  |«      | _        | j
                  j                  «        	 ddd«       | j
                  S | j
                  S # | j
                  j                  «        w xY w# 1 sw Y   | j
                  S xY w)a  
        (Consumer) Close the stream.

        :returns: An image object.
        :exception OSError: If the parser failed to parse the image file either
                            because it cannot be identified or cannot be
                            decoded.
        r   Nzimage was incompletezcannot parse this image)rz   r©   r�   r    r   r˜   r¢   r£   r   r(   rO   )r7   r   r)   s      r   r6   zParser.closeÎ  sÐ   € ð �<Š<à�I‰I�cŒNØ'+Ð+ˆDŒI˜œØ—=’=Ø,�Ü˜c“lÐ"Ø�zŠzØ+ˆCÜ˜#“,ÐØ�9Š9ô —‘˜DŸI™IÓ&ð &¨"ð&Ü!&§¡¨B£�D”Jà—J‘J—O‘OÕ%÷	&ð
 �z‰zÐˆt�z‰zÐøð —J‘J—O‘OÕ%ú÷	&ð
 �z‰zÐús$   Â	C?ÂC Â%C?Ã C<Ã<C?Ã?D)r‰   rŠ   r‹   rŒ   Úincrementalr˜   r�   rz   rt   r    rž   r©   r«   r®   r6   r   r   r   r›   r›   f  sB   „ ñð
 €KØ€EØ€DØ€GØ€FØ€Hò9òK òZòór   r›   c           	      ó¾  — | j                  «        t        | d«      sd| _        |j                  t        ¬«       t        t        || j                  d   dz  «      }	 |j                  «       }|j                  «        t        | ||||«       t        |d«      r|j                  «        yy# t        t        j                  f$ r}t        | |||d|«       Y d}~ŒLd}~ww xY w)z«Helper to save image based on tile list

    :param im: Image object.
    :param fp: File object.
    :param tile: Tile list.
    :param bufsize: Optional buffer size
    Úencoderconfigr   rK   r   é   NÚflush)rO   rR   r²   rb   r   Úmaxr&   r4   rZ   r´   Ú_encode_tiler   r¢   ÚUnsupportedOperation)r]   r)   r#   ÚbufsizeÚfhÚexcs         r   Ú_saver»   ð  s¾   € ð ‡G�G„IÜ�2�Ô'ØˆÔØ‡I�I”)€IÔô
 ”(˜G R§W¡W¨Q¡Z°!¡^Ó4€Gð7Ø�Y‰Y‹[ˆØ
�‰Œ
Ü�R˜˜T 7¨BÔ/ô ˆr�7ÔØ
�‰�
ð øô œB×3Ñ3Ð4ò 7Ü�R˜˜T 7¨D°#×6Ñ6ûð7ús   Á/B) Â)CÃCÃCc                 ó<  — |D �]  \  }}}}	|dkD  r|j                  |«       t        j                  | j                  ||	| j                  «      }
	 |
j                  | j                  |«       |
j                  r%|
j                  |«       |
j                  «       d   }nA|r-	 |
j                  |«      dd  \  }}|j                  |«       |rnŒ,|
j                  ||«      }|dk  rd|› d�}t        |«      |‚	 |
j                  «        �Œ y # |
j                  «        w xY w)Nr   r   zencoder error z when writing image file)rW   r   Ú_getencoderr3   r²   rh   r]   Ú	pushes_fdrj   Úencode_to_pyfdÚencodeÚwriteÚencode_to_filer   rm   )r]   r)   r#   r¸   r¹   rº   r}   r{   r§   r¨   ÚencoderÚerrcoder�   r   s                 r   r¶   r¶     s  € Øó ‰
ˆˆ1ˆa�ØˆqŠ5Ø�G‰G�AŒJÜ×#Ñ# B§G¡G¨Q°°2×3CÑ3CÓDˆð	Ø×Ñ˜RŸU™U AÔ&Ø× Ò Ø—‘˜bÔ!Ø!×0Ñ0Ó2°1Ñ5‘áàØ(/¯©°wÓ(?ÀÀÐ(C™˜ ØŸ™ œÙ"Ø!ð	 ð &×4Ñ4°R¸ÓA�GØ˜Š{Ø& w iÐ/GÐH�Ü˜c“l¨Ð+ð ð �O‰OÖñ1øð0 �O‰OÕús   ÁB%D	Ä	Dc                 ó‚  — |dk  ry|t         k  r.| j                  |«      }t        |«      |k  rd}t        |«      ‚|S g }|}|dkD  rG| j                  t	        |t         «      «      }|sn%|j                  |«       |t        |«      z  }|dkD  rŒGt        d„ |D «       «      |k  rd}t        |«      ‚dj                  |«      S )a»  
    Reads large blocks in a safe way.  Unlike fp.read(n), this function
    doesn't trust the user.  If the requested size is larger than
    SAFEBLOCK, the file is read block by block.

    :param fp: File handle.  Must implement a <b>read</b> method.
    :param size: Number of bytes to read.
    :returns: A string containing <i>size</i> bytes of data.

    Raises an OSError if the file is truncated and the read cannot be completed

    r   r   zTruncated File Readc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr;   )rQ   )Ú.0r¦   s     r   ú	<genexpr>z_safe_read.<locals>.<genexpr>E  s   è ø€ Ò
 �aŒ3ˆq�6Ñ
 ùs   ‚)Ú	SAFEBLOCKrU   rQ   r   r¡   ÚappendÚsumÚjoin)r)   r4   r�   r   Úremaining_sizeÚblocks         r   Ú
_safe_readrÏ   (  sÆ   € ð ˆq‚yØØŒyÒØ�w‰w�t‹}ˆÜˆt‹9�tÒØ'ˆCÜ˜#“,ÐØˆØ€DØ€NØ
˜1Ò
Ø—‘œ˜N¬IÓ6Ó7ˆÙØØ�‰�EÔØœ#˜e›*Ñ$ˆð ˜1Ó
ô Ñ
 ˜4Ô
 Ó  4Ò'Ø#ˆÜ�c‹lÐØ�8‰8�D‹>Ðr   c                   ó   — e Zd Zd„ Zd„ Zy)ÚPyCodecStatec                 ó<   — d| _         d| _        d| _        d| _        y )Nr   )ÚxsizeÚysizeÚxoffÚyoffr?   s    r   r    zPyCodecState.__init__L  s   € ØˆŒ
ØˆŒ
ØˆŒ	Øˆ�	r   c                 ó’   — | j                   | j                  | j                   | j                  z   | j                  | j                  z   fS r;   )rÕ   rÖ   rÓ   rÔ   r?   s    r   rs   zPyCodecState.extentsR  s3   € Ø�y‰y˜$Ÿ)™) T§Y¡Y°·±Ñ%;¸T¿Y¹YÈÏÉÑ=SÐSÐSr   N)r‰   rŠ   r‹   r    rs   r   r   r   rÑ   rÑ   K  s   „ òóTr   rÑ   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zdd„Zy)ÚPyCodecc                 ón   — d | _         t        «       | _        d | _        || _        | j                  |«       y r;   )r]   rÑ   rC   Úfdr3   Úinit)r7   r3   ru   s      r   r    zPyCodec.__init__W  s+   € ØˆŒÜ!“^ˆŒ
ØˆŒØˆŒ	Ø�	‰	�$�r   c                 ó   — || _         y)z˜
        Override to perform codec specific initialization

        :param args: Array of args items from the tile entry
        :returns: None
        N)ru   r­   s     r   rÜ   zPyCodec.init^  s   € ð ˆ�	r   c                  ó   — y)zT
        Override to perform codec specific cleanup

        :returns: None
        Nr   r?   s    r   rm   zPyCodec.cleanupg  s   € ð 	r   c                 ó   — || _         y)z�
        Called from ImageFile to set the Python file-like object

        :param fd: A Python file-like object
        :returns: None
        N)rÛ   )r7   rÛ   s     r   rj   zPyCodec.setfdo  s   € ð ˆ�r   Nc                 ó   — || _         |r|\  }}}}nd\  }}}}|dk(  r=|dk(  r8| j                   j                  \  | j                  _        | j                  _        nJ|| j                  _        || j                  _        ||z
  | j                  _        ||z
  | j                  _        | j                  j                  dk  s| j                  j                  dk  rd}t        |«      ‚| j                  j                  | j                  j
                  z   | j                   j                  d   kD  sG| j                  j                  | j                  j                  z   | j                   j                  d   kD  rd}t        |«      ‚y)zø
        Called from ImageFile to set the core output image for the codec

        :param im: A core image object
        :param extents: a 4 tuple of (x0, y0, x1, y1) defining the rectangle
            for this tile
        :returns: None
        )r   r   r   r   r   zSize cannot be negativer   z Tile cannot extend outside imageN)r]   r4   rC   rÓ   rÔ   rÕ   rÖ   Ú
ValueError)r7   r]   rs   Úx0Úy0Úx1Úy1r   s           r   rh   zPyCodec.setimagex  s,  € ð ˆŒáØ&ÑˆR��R™à+ÑˆR��R˜à�Š7�r˜Q’wØ15·±·±Ñ.ˆD�J‰JÔ˜dŸj™jÕ.à ˆD�J‰JŒOØ ˆD�J‰JŒOØ! B™wˆD�J‰JÔØ! B™wˆD�J‰JÔà�:‰:×Ñ˜qÒ  D§J¡J×$4Ñ$4¸Ò$9Ø+ˆCÜ˜S“/Ð!ð �J‰J×Ñ˜tŸz™zŸ™Ñ.°·±·±¸a±Ò@Ø�z‰z×Ñ $§*¡*§/¡/Ñ1°D·G±G·L±LÀ±OÒCà4ˆCÜ˜S“/Ð!ð Dr   r;   )r‰   rŠ   r‹   r    rÜ   rm   rj   rh   r   r   r   rÙ   rÙ   V  s   „ òòòòô#"r   rÙ   c                   ó2   — e Zd ZdZdZed„ «       Zd„ Zdd„Zy)Ú	PyDecoderzË
    Python implementation of a format decoder. Override this class and
    add the decoding logic in the :meth:`decode` method.

    See :ref:`Writing Your Own File Codec in Python<file-codecs-py>`
    Fc                 ó   — | j                   S r;   )Ú	_pulls_fdr?   s    r   ri   zPyDecoder.pulls_fd¨  s   € à�~‰~Ðr   c                 ó   — t        «       ‚)a=  
        Override to perform the decoding process.

        :param buffer: A bytes object with the data to be decoded.
        :returns: A tuple of ``(bytes consumed, errcode)``.
            If finished with decoding return -1 for the bytes consumed.
            Err codes are from :data:`.ImageFile.ERRORS`.
        r‘   )r7   Úbuffers     r   rk   zPyDecoder.decode¬  ó   € ô "Ó#Ð#r   Nc                 ó@  — |s| j                   }t        j                  | j                   d|«      }|j                  | j                  | j
                  j                  «       «       |j                  |«      }|d   dk\  rd}t        |«      ‚|d   dk7  rd}t        |«      ‚y)a  
        Convenience method to set the internal image from a stream of raw data

        :param data: Bytes to be set
        :param rawmode: The rawmode to be used for the decoder.
            If not specified, it will default to the mode of the image
        :returns: None
        rH   r   znot enough image datar   zcannot decode image dataN)	r3   r   rg   rh   r]   rC   rs   rk   rá   )r7   r�   Úrawmoder¦   r|   r   s         r   Ú
set_as_rawzPyDecoder.set_as_raw·  s�   € ñ Ø—i‘iˆGÜ×Ñ˜dŸi™i¨°Ó8ˆØ	�
‰
�4—7‘7˜DŸJ™J×.Ñ.Ó0Ô1Ø�H‰H�T‹NˆàˆQ‰4�1Š9Ø)ˆCÜ˜S“/Ð!ØˆQ‰4�1Š9Ø,ˆCÜ˜S“/Ð!ð r   r;   )	r‰   rŠ   r‹   rŒ   ré   Úpropertyri   rk   rï   r   r   r   rç   rç   ž  s*   „ ñð €Iàñó ðò	$ô"r   rç   c                   ó6   — e Zd ZdZdZed„ «       Zd„ Zd„ Zd„ Z	y)Ú	PyEncoderzË
    Python implementation of a format encoder. Override this class and
    add the decoding logic in the :meth:`encode` method.

    See :ref:`Writing Your Own File Codec in Python<file-codecs-py>`
    Fc                 ó   — | j                   S r;   )Ú
_pushes_fdr?   s    r   r¾   zPyEncoder.pushes_fdÙ  s   € à�‰Ðr   c                 ó   — t        «       ‚)a   
        Override to perform the encoding process.

        :param bufsize: Buffer size.
        :returns: A tuple of ``(bytes encoded, errcode, bytes)``.
            If finished with encoding return 1 for the error code.
            Err codes are from :data:`.ImageFile.ERRORS`.
        r‘   )r7   r¸   s     r   rÀ   zPyEncoder.encodeÝ  rì   r   c                 óˆ   — | j                   sy| j                  d«      \  }}}|r| j                  j                  |«       ||fS )zø
        If ``pushes_fd`` is ``True``, then this method will be used,
        and ``encode()`` will only be called once.

        :returns: A tuple of ``(bytes consumed, errcode)``.
            Err codes are from :data:`.ImageFile.ERRORS`.
        )r   r	   r   )r¾   rÀ   rÛ   rÁ   )r7   Úbytes_consumedrÄ   r�   s       r   r¿   zPyEncoder.encode_to_pyfdè  s@   € ð �~Š~ØØ(,¯©°A«Ñ%ˆ˜ ÙØ�G‰G�M‰M˜$ÔØ˜wÐ&Ð&r   c                 ó|   — d}|dk(  r4| j                  |«      \  }}}|dkD  r|j                  ||d «       |dk(  rŒ4|S )zì
        :param fh: File handle.
        :param bufsize: Buffer size.

        :returns: If finished successfully, return 0.
            Otherwise, return an error code. Err codes are from
            :data:`.ImageFile.ERRORS`.
        r   N)rÀ   rÁ   )r7   r¹   r¸   rÄ   ÚstatusÚbufs         r   rÂ   zPyEncoder.encode_to_file÷  sN   € ð ˆØ˜ŠlØ#'§;¡;¨wÓ#7Ñ ˆF�G˜SØ˜ŠzØ—‘˜˜V˜W˜Ô&ð ˜‹lð ˆr   N)
r‰   rŠ   r‹   rŒ   rô   rð   r¾   rÀ   r¿   rÂ   r   r   r   rò   rò   Ï  s/   „ ñð €Jàñó ðò	$ò'ór   rò   )r   r;   )r¢   rd   r1   rS   Ú r   Ú_utilr   r&   rÉ   rl   r   r   r   r   r�   r›   r»   r¶   rÏ   rÑ   rÙ   rç   rò   r   r   r   ú<module>rý      sÁ   ðó< 
Û Û Û 
å Ý à€à€	àÐ Ø Nð 	%ØØØØñ
€ðòòôp$�—‘ô p$ôf'�Iô '÷<Dñ DóTó8ò8 ÷FTñ T÷E"ñ E"ôP."�ô ."ôb6�õ 6r   