Ë
    ™2ÚiA-  ã                   óz  — d dl Z d dlZd dlZddlmZmZmZ  G d„ d«      Zd„ Zd„ Z	d„ Z
 G d	„ d
ej
                  «      Zd„ Zd„ Z ej                  ej                  ee«        ej                   ej                  e«        ej"                  ej                  g d¢«        ej$                  ej                  d«       y)é    Né   )ÚImageÚ	ImageFileÚ_binaryc                   ó<   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
y	)Ú	BoxReaderz}
    A small helper class to read fields stored in JPEG2000 header boxes
    and to easily step into and read sub-boxes.
    c                 óB   — || _         |dk\  | _        || _        d| _        y )Nr   éÿÿÿÿ)ÚfpÚ
has_lengthÚlengthÚremaining_in_box)Úselfr   r   s      úL/var/www/html/acx/venv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.pyÚ__init__zBoxReader.__init__   s#   € ØˆŒØ  A™+ˆŒØˆŒØ "ˆÕó    c                 ó®   — | j                   r+| j                  j                  «       |z   | j                  kD  ry| j                  dk\  r|| j                  k  S y)NFr   T)r   r   Útellr   r   )r   Ú	num_bytess     r   Ú	_can_readzBoxReader._can_read#   sH   € Ø�?Š?˜tŸw™wŸ|™|›~°	Ñ9¸D¿K¹KÒGàØ× Ñ  AÒ%à × 5Ñ 5Ñ5Ð5àr   c                 ó  — | j                  |«      sd}t        |«      ‚| j                  j                  |«      }t	        |«      |k  rd|› dt	        |«      › d�}t        |«      ‚| j                  dkD  r| xj                  |z  c_        |S )NzNot enough data in headerzExpected to read z bytes but only got ú.r   )r   ÚSyntaxErrorr   ÚreadÚlenÚOSErrorr   )r   r   ÚmsgÚdatas       r   Ú_read_byteszBoxReader._read_bytes-   sƒ   € Ø�~‰~˜iÔ(Ø-ˆCÜ˜cÓ"Ð"à�w‰w�|‰|˜IÓ&ˆÜˆt‹9�yÒ Ø% i [Ð0DÄSÈÃYÀKÈqÐQˆCÜ˜#“,Ðà× Ñ  1Ò$Ø×!Ò! YÑ.Õ!Øˆr   c                 óz   — t        j                  |«      }| j                  |«      }t        j                  ||«      S ©N)ÚstructÚcalcsizer   Úunpack)r   Úfield_formatÚsizer   s       r   Úread_fieldszBoxReader.read_fields;   s1   € Ü�‰˜|Ó,ˆØ×Ñ Ó%ˆÜ�}‰}˜\¨4Ó0Ð0r   c                 óz   — | j                   }| j                  |«      }t        t        j                  |«      |«      S r!   )r   r   r   ÚioÚBytesIO)r   r&   r   s      r   Ú
read_boxeszBoxReader.read_boxes@   s3   € Ø×$Ñ$ˆØ×Ñ Ó%ˆÜœŸ™ DÓ)¨4Ó0Ð0r   c                 ó„   — | j                   r4| j                  j                  «       | j                  z   | j                  k  S y)NT)r   r   r   r   r   )r   s    r   Úhas_next_boxzBoxReader.has_next_boxE   s0   € Ø�?Š?Ø—7‘7—<‘<“> D×$9Ñ$9Ñ9¸D¿K¹KÑGÐGàr   c                 ó^  — | j                   dkD  r4| j                  j                  | j                   t        j                  «       d| _         | j                  d«      \  }}|dk(  r| j                  d«      d   }d}nd}||k  s| j                  ||z
  «      sd}t        |«      ‚||z
  | _         |S )	Nr   r
   z>I4sr   z>Qé   é   zInvalid header length)r   r   ÚseekÚosÚSEEK_CURr'   r   r   )r   ÚlboxÚtboxÚhlenr   s        r   Únext_box_typezBoxReader.next_box_typeK   s§   € à× Ñ  1Ò$Ø�G‰G�L‰L˜×.Ñ.´·±Ô<Ø "ˆÔð ×%Ñ% fÓ-‰
ˆˆdØ�1Š9Ø×#Ñ# DÓ)¨!Ñ,ˆDØ‰DàˆDà�$Š;˜dŸn™n¨T°D©[Ô9Ø)ˆCÜ˜cÓ"Ð"à $ t¡ˆÔØˆr   N)r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r'   r+   r-   r7   © r   r   r   r      s*   „ ñó
#òòò1ò
1ò
ór   r   c                 óò  — | j                  d«      }t        j                  |«      }|| j                  |dz
  «      z   }t        j                  d|«      \  }}}}}}}	}	}	}	}
dg|
z  }dg|
z  }dg|
z  }t        |
«      D ],  }t        j                  d|dd|z  z   «      \  ||<   ||<   ||<   Œ. ||z
  ||z
  f}|
dk(  r|d   d	z  d
kD  rd}||fS d}||fS |
dk(  rd}||fS |
dk(  rd}||fS |
dk(  rd}||fS d}||fS )z‹Parse the JPEG 2000 codestream to extract the size and component
    count from the SIZ marker segment, returning a PIL (size, mode) tuple.é   z>HHIIIIIIIIHNz>BBBé$   é   r   r   é   r0   úI;16ÚLÚLAÚRGBé   ÚRGBA)r   r   Úi16ber"   Úunpack_fromÚrange)r   ÚhdrÚlsizÚsizÚrsizÚxsizÚysizÚxosizÚyosizÚ_ÚcsizÚssizÚxrsizÚyrsizÚir&   Úmodes                    r   Ú_parse_codestreamrZ   a   sw  € ð �'‰'�!‹*€CÜ�=‰=˜Ó€DØ
�—‘˜˜q™Ó!Ñ
!€CÜ=C×=OÑ=OØ˜ó>Ñ:€Dˆ$��d˜E 5¨!¨Q°°1°dð ˆ6�D‰=€DØˆF�T‰M€EØˆF�T‰M€EÜ�4‹[ò RˆÜ&,×&8Ñ&8¸ÀÀbÈ1ÈqÉ5ÁjÓ&QÑ#ˆˆQ‰��q‘˜5 š8ðRð �5‰L˜$ ™,Ð'€DØˆq‚yØ�!‰H�t‰O˜qÒ ØˆDð �ˆ:Ðð ˆDð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð ˆà�ˆ:Ðr   c                 ó0   — |dk7  rd| z  d|z  z  d|z  z  S y)zµConvert JPEG2000's (numerator, denominator, exponent-base-10) resolution,
    calculated as (num / denom) * 10^exp and stored in dots per meter,
    to floating-point dots per inch.r   éþ   é
   i'  Nr<   )ÚnumÚdenomÚexps      r   Ú_res_to_dpira   ƒ   s,   € ð �‚zØ�c‘	˜R ™WÑ%¨%°%©-Ñ8Ð8ð r   c                 ó8  — t        | «      }d}d}|j                  «       rU|j                  «       }|dk(  r|j                  «       }n/|dk(  r|j	                  d«      d   dk(  rd}|j                  «       rŒUd}d}d}d}d}	|j                  «       rö|j                  «       }|dk(  rJ|j	                  d	«      \  }
}}}||
f}|d
k(  r|dz  dkD  rd}n¦|d
k(  rd}nž|dk(  rd}n–|dk(  rd}nŽ|dk(  r‰d}n†|dk(  r�|j                  «       }|j                  «       ra|j                  «       }|dk(  r;|j	                  d«      \  }}}}}}t        |||«      }t        |||«      }|�|�||f}	n|j                  «       rŒa|j                  «       rŒö|�|€d}t        |«      ‚||||	fS )zªParse the JP2 header box to extract size, component count,
    color space information, and optionally DPI information,
    returning a (size, mode, mimetype, dpi) tuple.Ns   jp2hs   ftypz>4sr   s   jpx z	image/jpxs   ihdrz>IIHBr   rA   r0   rB   rC   r>   rD   r@   rE   rF   rG   s   res s   rescz>HHHHBBzMalformed JP2 header)r   r-   r7   r+   r'   ra   r   )r   ÚreaderÚheaderÚmimetyper5   r&   rY   ÚbpcÚncÚdpiÚheightÚwidthÚresÚtresÚvrcnÚvrcdÚhrcnÚhrcdÚvrceÚhrceÚhresÚvresr   s                          r   Ú_parse_jp2_headerru   ‹   sê  € ô �r‹]€FØ€FØ€HØ
×
Ñ
Ô
Ø×#Ñ#Ó%ˆà�7Š?Ø×&Ñ&Ó(ˆFØØ�WŠ_Ø×!Ñ! %Ó(¨Ñ+¨wÒ6Ø&�ð ×
Ñ
Õ
ð €DØ€DØ
€CØ	€BØ
€Cà
×
Ñ
Ô
Ø×#Ñ#Ó%ˆà�7Š?Ø%+×%7Ñ%7¸Ó%@Ñ"ˆF�E˜2˜sØ˜6�?ˆDØ�QŠw˜C $™J¨!Ò+Ø‘Ø�q’Ø‘Ø�q’Ø‘Ø�q’Ø‘Ø�q’Ø‘Ø�WŠ_Ø×#Ñ#Ó%ˆCØ×"Ñ"Ô$Ø×(Ñ(Ó*�Ø˜7’?Ø9<¿¹ÈÓ9SÑ6�D˜$  d¨D°$Ü& t¨T°4Ó8�DÜ& t¨T°4Ó8�DØÐ'¨DÐ,<Ø# T˜l˜Øð ×"Ñ"Õ$ð% ×
Ñ
Õ
ð8 €|�t�|Ø$ˆÜ˜#ÓÐà��x Ð$Ð$r   c                   óf   ‡ — e Zd ZdZdZd„ Zd„ Zeˆ fd„«       Zej                  d„ «       Zd„ Z
ˆ xZS )ÚJpeg2KImageFileÚJPEG2000zJPEG 2000 (ISO 15444)c                 óˆ  — | j                   j                  d«      }|dk(  r*d| _        t        | j                   «      \  | _        | _        n®|| j                   j                  d«      z   }|dk(  r~d| _        t        | j                   «      }|\  | _        | _        | _        }|�|| j                  d<   | j                   j                  d«      j                  d	«      r| j                  «        nd
}t        |«      ‚| j                  �| j                  €d}t        |«      ‚d| _        d| _        d}d}	 | j                   j!                  «       }t#        j$                  |«      j&                  }dd| j                  z   d| j                  | j                  | j                  ||ffg| _        y # t(        $ r‘ d}	 | j                   j+                  «       }| j                   j-                  dt.        j0                  «       | j                   j+                  «       }| j                   j-                  |«       n# t(        $ r d}Y nw xY wY ŒÖw xY w)NrF   ó   ÿOÿQÚj2kr0   ó      jP  
‡
Újp2rh   é   s   jp2cÿOÿQznot a JPEG 2000 filezunable to determine size/moder   r
   Újpeg2k©r   r   )r   r   ÚcodecrZ   Ú_sizeÚ_moderu   Úcustom_mimetypeÚinfoÚendswithÚ_parse_commentr   r&   rY   Ú_reduceÚlayersÚfilenor2   ÚfstatÚst_sizeÚ	Exceptionr   r1   r)   ÚSEEK_ENDÚtile)r   Úsigrd   rh   r   Úfdr   Úposs           r   Ú_openzJpeg2KImageFile._openÏ   sà  € Ø�g‰g�l‰l˜1‹oˆØÐ%Ò%ØˆDŒJÜ%6°t·w±wÓ%?Ñ"ˆDŒJ˜�
à˜Ÿ™Ÿ™ Q›Ñ'ˆCàÐ=Ò=Ø"�”
Ü*¨4¯7©7Ó3�ØDJÑA�”
˜DœJ¨Ô(<¸cØ�?Ø'*�D—I‘I˜eÑ$Ø—7‘7—<‘< Ó#×,Ñ,Ð-DÔEØ×'Ñ'Õ)à,�Ü! #Ó&Ð&à�9‰9Ð §	¡	Ð 1Ø1ˆCÜ˜cÓ"Ð"àˆŒØˆŒàˆØˆð	Ø—‘—‘Ó!ˆBÜ—X‘X˜b“\×)Ñ)ˆFð Ø˜Ÿ™Ñ"ØØ—‘˜TŸ\™\¨4¯;©;¸¸FÐCð	ð
ˆ�	øô ò 	ØˆBðØ—g‘g—l‘l“n�Ø—‘—‘˜Q¤§¡Ô,ØŸ™Ÿ™›�Ø—‘—‘˜SÕ!øÜò Ø’ðüð	ús7   Ä19F' Æ'IÆ3A9H-È,IÈ-H;È8IÈ:H;È;IÉ Ic                 ó2  — | j                   j                  d«      }t        j                  |«      }| j                   j	                  |dz
  t
        j                  «       	 | j                   j                  d«      }|sy |d   }|dv ry | j                   j                  d«      }t        j                  |«      }|dk(  r/| j                   j                  |dz
  «      dd  | j                  d<   y | j                   j	                  |dz
  t
        j                  «       Œº)Nr>   r   )é�   éÙ   éd   Úcomment)r   r   r   rH   r1   r2   r3   r…   )r   rK   r   ÚmarkerÚtyps        r   r‡   zJpeg2KImageFile._parse_comment  s×   € Ø�g‰g�l‰l˜1‹oˆÜ—‘˜sÓ#ˆØ�‰�‰�V˜a‘Z¤§¡Ô-àØ—W‘W—\‘\ !“_ˆFÙØØ˜‘)ˆCØ�lÑ"àØ—'‘'—,‘,˜q“/ˆCÜ—]‘] 3Ó'ˆFØ�dŠ{à'+§w¡w§|¡|°F¸Q±JÓ'?ÀÀÐ'C�—	‘	˜)Ñ$Øà—‘—‘˜V a™Z¬¯©Ô5ð r   c                 ó4   •— | j                   xs
 t        ‰| �  S r!   )rˆ   ÚsuperÚreduce)r   Ú	__class__s    €r   r�   zJpeg2KImageFile.reduce  s   ø€ ð
 �|‰|Ò-œu™w™~Ð-r   c                 ó   — || _         y r!   )rˆ   )r   Úvalues     r   r�   zJpeg2KImageFile.reduce   s	   € àˆ�r   c                 óÐ  — | j                   r¼| j                  r°d| j                  z  }|dz	  }t        | j                  d   |z   |z  «      t        | j                  d   |z   |z  «      f| _        | j                   d   }|d   d   | j                  | j
                  |d   d   |d   d   f}|d   d| j                  z   |d   |fg| _         t        j                  j                  | «      S )Nr   r   r@   rF   r€   r>   )r�   rˆ   Úintr&   r‚   r‰   r   Úload)r   ÚpowerÚadjustÚtÚt3s        r   r£   zJpeg2KImageFile.load$  sÝ   € Ø�9Š9˜ŸšØ˜Ÿ™Ñ%ˆEØ˜a‘ZˆFä�T—Y‘Y˜q‘\ FÑ*¨eÑ3Ó4Ü�T—Y‘Y˜q‘\ FÑ*¨eÑ3Ó4ðˆDŒJð —	‘	˜!‘ˆAØ�A‘$�q‘'˜4Ÿ<™<¨¯©°a¸±d¸1±g¸qÀ¹tÀA¹wÐGˆBØ˜A™$ ¨¯©Ñ 2°A°a±D¸"Ð=Ð>ˆDŒIä×"Ñ"×'Ñ'¨Ó-Ð-r   )r8   r9   r:   ÚformatÚformat_descriptionr“   r‡   Úpropertyr�   Úsetterr£   Ú__classcell__)rž   s   @r   rw   rw   Ë   sJ   ø„ Ø€FØ0Ðò2
òh6ð, ó.ó ð.ð ‡]�]ñó ðö.r   rw   c                 ó&   — | d d dk(  xs | d d dk(  S )NrF   rz   r~   r|   r<   )Úprefixs    r   Ú_acceptr¯   5  s+   € àˆr�ˆ
Ð)Ñ)ò 	BØ�#�2ˆ;ÐAÑAðr   c                 óT  — | j                   }|j                  d«      s|j                  dd«      rd}nd}|j                  dd «      }|j                  dd «      }|j                  dd «      }|j                  d	d
«      }|j                  dd «      }	|	�Pt        |	t        t
        f«      r-t        |	D �
cg c]  }
t        |
t        t        f«      ‘Œ c}
«      sd}t        |«      ‚|j                  dd«      }|j                  dd «      }|j                  dd «      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  d«      }t        |t        «      r|j                  «       }|j                  dd«      }d}t        |d«      r	 |j                  «       }|||||	|||||||||||f| _        t!        j"                  | |dd| j$                  z   d|fg«       y c c}
w # t        $ r d}Y ŒSw xY w)Nú.j2kÚno_jp2Fr{   r}   ÚoffsetÚtile_offsetÚ	tile_sizeÚquality_modeÚratesÚquality_layersz,quality_layers must be a sequence of numbersÚnum_resolutionsr   Úcodeblock_sizeÚprecinct_sizeÚirreversibleÚprogressionÚLRCPÚcinema_modeÚnoÚmctÚsignedr˜   Úpltr
   rŠ   r   r€   )Úencoderinfor†   ÚgetÚ
isinstanceÚlistÚtupleÚallr¢   ÚfloatÚ
ValueErrorÚstrÚencodeÚhasattrrŠ   r�   Úencoderconfigr   Ú_saver&   )Úimr   Úfilenamer…   Úkindr³   r´   rµ   r¶   r¸   Úquality_layerr   r¹   Ú	cblk_sizer»   r¼   r½   r¿   rÁ   rÂ   r˜   rÃ   r‘   s                          r   rÐ   rÐ   @  s%  € à�>‰>€Dà×Ñ˜Ô  D§H¡H¨X°uÔ$=Ø‰àˆà�X‰X�h Ó%€FØ—(‘(˜=¨$Ó/€KØ—‘˜ dÓ+€IØ—8‘8˜N¨GÓ4€LØ—X‘XÐ.°Ó5€NØÐ!Ü�>¤D¬% =Ô1Üð &4öà!ô ˜=¬3´¨,Õ7òô
ð =ˆÜ˜‹oÐà—h‘hÐ0°!Ó4€OØ—‘Ð)¨4Ó0€IØ—H‘H˜_¨dÓ3€MØ—8‘8˜N¨EÓ2€LØ—(‘(˜=¨&Ó1€KØ—(‘(˜=¨$Ó/€KØ
�(‰(�5˜!Ó
€CØ�X‰X�h Ó&€FØ�h‰h�yÓ!€GÜ�'œ3ÔØ—.‘.Ó"ˆØ
�(‰(�5˜%Ó
 €Cà	€BÜˆr�8Ôð	Ø—‘“ˆBð
 	ØØØØØØØØØØØØØ
ØØð!€BÔô& ‡O�O�B˜˜h¨°·±Ñ(8¸!¸TÐBÐCÕDùòaøô4 ò 	ØŠBð	ús   Â0HÇH ÈH'È&H')z.jp2r±   z.jpcz.jpfz.jpxz.j2cz	image/jp2)r)   r2   r"   Ú r   r   r   r   rZ   ra   ru   rw   r¯   rÐ   Úregister_openr¨   Úregister_saveÚregister_extensionsÚregister_mimer<   r   r   ú<module>rÛ      sÀ   ðó  
Û 	Û ç 'Ñ '÷Gñ GòTòD9ò9%ô@g.�i×)Ñ)ô g.òTòAEðP €× Ñ �O×*Ñ*¨O¸WÔ EØ €× Ñ �O×*Ñ*¨EÔ 2à €× Ñ Ø×ÑÒLôð €× Ñ �O×*Ñ*¨KÕ 8r   