
    g1                   l   d dl mZ d dlZd dlZd dlZ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 dlmZmZ d dlmZmZmZmZmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lm Z! ddlm"Z" ddl#m$Z$ ddlm%Z%  ejL                  e'      Z(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;d Z<d!Z=d"Z>d#Z?d$Z@d%ZAd&ZBd'ZCd(ZDd)ZEd*ZFd+ZGd,ZHd-ZId.ZJd/ZKd0ZLd1ZMd2ZNd3ZOd4ZPd5ZQd6ZRd7ZSd8ZTd9ZUd:ZVd;ZWi dd<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\ZXeXj                         D  ci c]  \  } }|| 
 c}} ZZi e-d d]dd]d^fd_e.d d]dd]d^fd_e-d d]d=d]d^fd`e.d d]d=d]d^fd`e-dd]dd]d^fdae.dd]dd]d^fdae-dd]d=d]d^fdbe.dd]d=d]d^fdbe-d d]ddcd^fdde.d d]ddcd^fdde-d d]d=dcd^fdee.d d]d=dcd^fdee-dd]ddcd^fdfe.dd]ddcd^fdfe-dd]d=dcd^fdge.dd]d=dcd^fdge-d d]ddhd^fdii e.d d]ddhd^fdie-d d]d=dhd^fdje.d d]d=dhd^fdje-dd]ddhd^fdke.dd]ddhd^fdke-dd]d=dhd^fdle.dd]d=dhd^fdle-d d]ddmd^fdne.d d]ddmd^fdne-d d]d=dmd^fdoe.d d]d=dmd^fdoe-dd]ddmd^fdpe.dd]ddmd^fdpe-ddcddmd^fdpe.ddcddmd^fdpe-dd]d=dmd^fdqe.dd]d=dmd^fdqi e-dd]ddrd^fdse-d d]ddtd^fdue-dd]ddtd^fdue.dd]ddtd^fdve-dd]d=dtd^fdwe-ddcddtd^fdxe.ddcddtd^fdye-d dzdd{d^fd|e.d dzdd{d^fd}e-dd]dd{d^fd~e-ddcdd{d^fde.ddcdd{d^fde-ddzdd{d^fd|e.ddzdd{d^fd}e-dd]dddcfde.dd]dddcfde-d=d]ddd^fdi e.d=d]ddd^fde-d=d]d=dd^fde.d=d]d=dd^fde-d=d]ddd^fde.d=d]ddd^fde-d=d]dddfde.d=d]dddfde-d=d]dddfde.d=d]dddfde-d=d]dddfde.d=d]dddfde-d=d]ddd]fde.d=d]ddd]fde-d=d]dddfde.d=d]dddfde-d=d]dddfde.d=d]dddfdi e-d=d]dddcfde.d=d]dddcfde-d=d]dddfde.d=d]dddfde-d=d]dddfde.d=d]dddfde-d=d]dddfde.d=d]dddfde-d=d]ddd^fde.d=d]ddd^fde-d=d]ddd^fde.d=d]ddd^fde-d=d]dddfde.d=d]dddfde-d=d]ddd]fde.d=d]ddd]fde-d=d]dddcfdi e.d=d]dddcfde-d?d]dd]d^fde.d?d]dd]d^fde-d?d]d=d]d^fde.d?d]d=d]d^fde-d?d]ddcd^fde.d?d]ddcd^fde-d?d]d=dcd^fde.d?d]d=dcd^fde-d?d]ddhd^fde.d?d]ddhd^fde-d?d]d=dhd^fde.d?d]d=dhd^fde-d?d]ddmd^fde.d?d]ddmd^fde-d?d]dddfde-d?d]dddcfdi e.d?d]dddcfde-d?d]d=dmd^fde.d?d]d=dmd^fde-dCd]ddd^fde.dCd]ddd^fde-dCd]dddfde.dCd]dddfde-dCd]dddfde.dCd]dddfde-dCd]ddd^fde-dEd]ddmd^fdpe.dEd]ddmd^fdpe-dEd]ddd^fde.dEd]ddd^fde-dId]ddd^fde.dId]ddd^fdZ[ e\d e[D              Z]g dZ^ e_ej                  dd      s	 e$dd       ddZad Zbd Zci Zdi Zed Zf G d de      Zgd Zhd Zid Zjere
ekef   Zlne
Zl G d del      Zmedem_d        eeem_e         e%j                         D ]:  \  ZnZoeoj                  ddī      Zo eqemdeo eden   d           eqemdeo eeen          < [d[e[n[o G dǄ dem      ZrerZs G dɄ dej2                        Zti dde-ddd]dfdde-dddmdfdde-dddd=fdde-d?ddmdfdde-d?ddd=fdde-dd=d{dfdde-dddtdfdde-dd=dtdfdde-dd?d{dfdde-d=dddfdde-d=ddd fdde-d=ddd=fdde-dCdddfdde-dEdddfdde-dIdddfdde.dd=d{dfdde.dddtdfde.dd=dtdfde.dd?d{dfdZud Zv G d d      ZwddZx ej                  etj                  etea        ej                  etj                  ev        ej                  etj                  ex        ej                  etj                  ddg        ej                  etj                  d       yc c}} w )    )annotationsN)MutableMapping)Fraction)NumberRational)IOTYPE_CHECKINGAnyCallableNoReturn   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32be)o8)	deprecateTYPESFT   s   IIs   MM      i  i  i  i  i
  i    i  i  i  i  i  i  i(  i-  i1  i2  i;  i=  i@  iB  iC  D  iE  iJ  iR  iS  i[  i  i  i  i  iI  is  ii  i  i  i  i  raw   
tiff_ccitt   group3   group4   tiff_lzw   	tiff_jpeg   jpeg   tiff_adobe_deflatei  tiff_raw_16i  packbitsi)  tiff_thunderscani  tiff_deflateit  tiff_sgilogiu  tiff_sgilog24im  lzmaiP  zstdiQ  webpr    )1z1;I)r9   z1;IR)r9   r9   )r9   z1;R)r    )LzL;2I)r:   zL;2IR)r:   zL;2)r:   zL;2R)r$   )r:   zL;4I)r:   zL;4IR)r:   zL;4)r:   zL;4R)r,   )r:   zL;I)r:   zL;IR)r:   r:   )r:   zL;R)   )I;16zI;12)   )r<   r<   )I;16Br>   )r<   zI;16R)II;16S)r?   I;16BS)r"   )    )FF;32F)rC   F;32BF)r?   zI;32N)r?   I;32S)r?   I;32BS)r,   r,   )LArH   )r,   r,   r,   )RGBrI   )rI   zRGB;R)r,   r,   r,   r,   )RGBArJ   r   )rI   RGBX)r,   r,   r,   r,   r,   r   r   )rI   RGBXX)r,   r,   r,   r,   r,   r,   )r   r   r   )rI   RGBXXX)rJ   RGBa)r   r   )rJ   RGBaX)r   r   r   )rJ   RGBaXX)r    r   )rJ   RGBAX)r    r   r   )rJ   RGBAXX)i  )r=   r=   r=   )rI   zRGB;16L)rI   zRGB;16B)r=   r=   r=   r=   )rJ   zRGBA;16L)rJ   zRGBA;16B)rI   zRGBX;16L)rI   zRGBX;16B)rJ   zRGBa;16L)rJ   zRGBa;16B)PzP;1)rU   zP;1R)rU   zP;2)rU   zP;2R)rU   zP;4)rU   zP;4R)rU   rU   )rU   PX)PArW   )rU   zP;R)CMYKrX   )rX   CMYKX)rX   CMYKXX)rX   zCMYK;16L)LABr[   c              #  8   K   | ]  }t        |d            yw)r$   N)len).0key_tps     H/var/www/openai/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py	<genexpr>ra     s     AyV#fQi.ys   )   MM *   II* s   MM* s   II *s   MM +s   II+ libtiff_support_custom_tagsz*Support for LibTIFF earlier than version 4r;   c                    | d d t         v S Nr$   )PREFIXESprefixs    r`   _acceptrj     s    "1:!!    c                x    t        |       dkD  }t        |rd| z  n|       j                  |      }|r|d d d   S |S )Nr   )absIFDRationallimit_rational)valmax_valinvn_ds       r`   _limit_rationalru   !  sA    
c(Q,C
a#g#
.
=
=g
FC3tt9$$rk   c                    t        |       }|j                  |j                  f}t        |      |k  rt	        | t        |            }t        |      |kD  rt        | } t	        | |      }|S N)r   	numeratordenominatorminru   rn   max)rq   rr   min_valfracrt   s        r`   _limit_signed_rationalr~   '  sa    C=D
..$**
*C
3x'c3w<0
3x'nc7+Jrk   c                      fd}|S )Nc                6     t        | j                        | S rw   )getattr_val)selfargsops     r`   delegatez_delegate.<locals>.delegate=  s    %wtyy"%t,,rk   r8   )r   r   s   ` r`   	_delegater   <  s    - Ork   c                  .   e Zd ZdZ	 dZd(dZed        Zed        Zd Z	d)dZ
d*dZd+d	Zd
 Zd Z	  ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z ed      Z  ed      Z! ed      Z" ed      Z# ed       Z$ ed!      Z% ed"      Z& ed#      Z' ed$      Z( ed%      Z) e*e+d&      r	 ed&      Z,y'y'),ro   zImplements a rational class where 0/0 is a legal value to match
    the in the wild use of exif rationals.

    e.g., DigitalZoomRatio - 0.00/0.00  indicates that no digital zoom was used
    )
_numerator_denominatorr   c                   t        |t              r4|j                  | _        |j                  | _        |j                  | _        yt        |t              r#|j                  | _        |j                  | _        n|| _        || _        |dk(  rt        d      | _        y|dk(  rt        |      | _        yt        ||      | _        y)z
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   nanr   )	
isinstancero   rx   r   ry   r   r   r   float)r   valuery   s      r`   __init__zIFDRational.__init__Q  s     e[)#ooDO % 1 1D

DIeX&#ooDO % 1 1D#DO +D!eDIA DI 4DIrk   c                    | j                   S rw   )r   r   s    r`   rx   zIFDRational.numeratork  s    rk   c                    | j                   S rw   )r   r   s    r`   ry   zIFDRational.denominatoro  s       rk   c                    | j                   dk(  r| j                  | j                   fS | j                  j                  |      }|j                  |j                   fS )z

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )ry   rx   r   limit_denominator)r   max_denominatorfs      r`   rp   zIFDRational.limit_rationals  sN     q >>4#3#333II''8{{AMM))rk   c                >    t        t        | j                              S rw   )strr   r   r   s    r`   __repr__zIFDRational.__repr__  s    5#$$rk   c                6    | j                   j                         S rw   )r   __hash__r   s    r`   r   zIFDRational.__hash__  s    yy!!##rk   c                    | j                   }t        |t              r|j                   }t        |t              rt        |      }||k(  S rw   )r   r   ro   r   )r   otherrq   s      r`   __eq__zIFDRational.__eq__  s;    iie[)JJEeU#*Ce|rk   c                H    | j                   | j                  | j                  gS rw   )r   r   r   r   s    r`   __getstate__zIFDRational.__getstate__  s    		4??D,=,=>>rk   c                f    t         j                  | d       |\  }}}|| _        || _        || _        y )Nr   )ro   r   r   r   r   )r   stater   r   r   s        r`   __setstate__zIFDRational.__setstate__  s4    T1%).&j,	$(rk   __add____radd____sub____rsub____mul____rmul____truediv____rtruediv____floordiv____rfloordiv____mod____rmod____pow____rpow____pos____neg____abs__	__trunc____lt____gt____le____ge____bool____ceil__	__floor__	__round____int__Nr7   returnr   r   int)r   objectr   bool)-__name__
__module____qualname____doc__	__slots__r   propertyrx   ry   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   hasattrr   r   r8   rk   r`   ro   ro   C  s   
 7I54   ! !*%$?) 	"G$H	"G$H	"G$HM*K^,L^,Lo.M	"G$H	"G$H	"G	"G	"G+&Ix Fx Fx Fx F$H$H+&I+&Ix#I& $rk   ro   c                      fd}|S )Nc                    ddl m} | j                  j                  d      r"| j                  dd  j	                  dd      |<   | ft
        <   | S )Nr   r   load_r&   _ )r   r   r   
startswithreplace_load_dispatch)funcr   idxsizes     r`   	decoratorz#_register_loader.<locals>.decorator  sL    #==##G,qr*223<E#J"Djsrk   r8   )r   r   r   s   `` r`   _register_loaderr     s     rk   c                      fd}|S )Nc                    | t         <   | S rw   )_write_dispatch)r   r   s    r`   r   z#_register_writer.<locals>.decorator  s    #rk   r8   )r   r   s   ` r`   _register_writerr     s     rk   c                    ddl m} | \  }}|||<   t        j                  d       dfd	ft        |<   fdt
        |<   y )Nr   r   =c                H    | j                  t        |      z    |      S rw   )_unpackr]   )r   data
legacy_apifmtr   s      r`   <lambda>z!_register_basic.<locals>.<lambda>  s$    LLCI-.se4d;rk   c                <     dj                   fd|D              S )Nrk   c              3  B   K   | ]  }j                  |        y wrw   )_pack)r^   r   r   r   s     r`   ra   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s     <VEC'Vs   join)r   valuesr   s   ` r`   r   z!_register_basic.<locals>.<lambda>  s    <V<<rk   T)r   r   structcalcsizer   r   )idx_fmt_namer   r   namer   r   s       @@r`   _register_basicr     sN    !NCdE#J??Qse9%D	
N3OCrk   c                  X   e Zd ZU dZi Zded<   i Zded<   	 	 	 d<	 	 	 	 	 	 	 d=dZ ed       Z	 ed	       Z
ed>d
       Zej                  d?d       Zd@dZdAdZd ZdBdZd Zd Zd Zd ZdCdZd Zd Zd Z e eeej:                  ddfej<                  ddfej>                  ddfej@                  ddfejB                  d d!fejD                  d"d#fejF                  d$d%fejH                  ddfejJ                  d&d'fg	              e&d(d(      dDd)       Z' e(d(      d*        Z) e&d+d(      dDd,       Z* e(d+      d-        Z+ e&d.d/      dDd0       Z, e(d.      d1        Z- e&d2d(      dDd3       Z. e(d2      d4        Z/ e&d5d/      dDd6       Z0 e(d5      d7        Z1d8 Z2d9 Z3dEd:Z4d; Z5y)FImageFileDirectory_v2a  This class represents a TIFF tag directory.  To speed things up, we
    don't decode tags unless they're asked for.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v2()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        'Some Data'

    Individual values are returned as the strings or numbers, sequences are
    returned as tuples of the values.

    The tiff metadata type of each item is stored in a dictionary of
    tag types in
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types
    are read from a tiff file, guessed from the type added, or added
    manually.

    Data Structures:

        * ``self.tagtype = {}``

          * Key: numerical TIFF tag number
          * Value: integer corresponding to the data type from
            :py:data:`.TiffTags.TYPES`

          .. versionadded:: 3.0.0

    'Internal' data structures:

        * ``self._tags_v2 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data, as tuple for multiple values

        * ``self._tagdata = {}``

          * Key: numerical TIFF tag number
          * Value: undecoded byte string from file

        * ``self._tags_v1 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data in the v1 format

    Tags will be found in the private attributes ``self._tagdata``, and in
    ``self._tags_v2`` once decoded.

    ``self.legacy_api`` is a value for internal use, and shouldn't be changed
    from outside code. In cooperation with
    :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api``
    is true, then decoded tags will be populated into both ``_tags_v1`` and
    ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF
    save routine. Tags should be read from ``_tags_v1`` if
    ``legacy_api == true``.

    z>dict[int, Callable[[ImageFileDirectory_v2, bytes, bool], Any]]r   zdict[int, Callable[..., Any]]r   Nc                   t        |      sdt        |       d}t        |      ||n|dd | _        | j                  t        k(  rd| _        n(| j                  t        k(  rd| _        nd}t        |      |d   dk(  | _        || _        i | _	        	 | j                          | j                  r| j                  d	|d
d       n| j                  d|dd       \  | _        d| _        y)a  Initialize an ImageFileDirectory.

        To construct an ImageFileDirectory from a real file, pass the 8-byte
        magic header to the constructor.  To only set the endianness, pass it
        as the 'prefix' keyword argument.

        :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets
              endianness.
        :param prefix: Override the endianness of the file.
        znot a TIFF file (header z not valid)Nr    ><znot a TIFF IFD+   Qr,   r:   r$   F)rj   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtyperesetr   next_legacy_api)r   ifhri   r   msgs        r`   r   zImageFileDirectory_v2.__init__*  s      s|,T#YK{CCc""!'!3vRa<<2DL\\RDL"Cc""A"
')'

*.--DLLc!"g&T\\#sSTSUw=W 	 !rk   c                    | j                   S rw   )r   r   s    r`   r   zImageFileDirectory_v2.<lambda>O      4<<rk   c                    | j                   S rw   )_offsetr   s    r`   r   zImageFileDirectory_v2.<lambda>P  r  rk   c                    | j                   S rw   )r  r   s    r`   r   z ImageFileDirectory_v2.legacy_apiR  s    rk   c                    d}t        |      )Nz"Not allowing setting of legacy api)	Exception)r   r   r  s      r`   r   z ImageFileDirectory_v2.legacy_apiV  s    2nrk   c                X    i | _         i | _        i | _        i | _        d | _        d | _        y rw   )_tags_v1_tags_v2_tagdatar  _nextr
  r   s    r`   r  zImageFileDirectory_v2.reset[  s,    (*(**,
rk   c                *    t        t        |             S rw   )r   dictr   s    r`   __str__zImageFileDirectory_v2.__str__c  s    4:rk   c                    | j                         D ci c]0  \  }}t        j                  || j                        j                  |2 c}}S c c}}w )z
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        )itemsr   lookupr   r   )r   coder   s      r`   namedzImageFileDirectory_v2.namedf  sM      $zz|
+e OOD$**-22E9+
 	
 
s   5Ac                j    t        t        | j                        t        | j                        z        S rw   )r]   setr  r  r   s    r`   __len__zImageFileDirectory_v2.__len__q  $    3t}}%DMM(::;;rk   c                   || j                   vrG| j                  |   }| j                  |   }| j                  |   \  }} || || j                        | |<   | j                   |   }| j                  rt        |t        t        f      s|f}|S rw   )r  r  r  r   r   r   tuplebytes)r   tagr   typr   handlerrq   s          r`   __getitem__z!ImageFileDirectory_v2.__getitem__t  s    dmm#==%D,,s#C //4MD'dDOO<DImmC ??:cE5>#B&C
rk   c                >    || j                   v xs || j                  v S rw   )r  r  r   r"  s     r`   __contains__z"ImageFileDirectory_v2.__contains__      dmm#;sdmm';;rk   c                >    | j                  ||| j                         y rw   )_setitemr   )r   r"  r   s      r`   __setitem__z!ImageFileDirectory_v2.__setitem__  s    c5$//2rk   c           	       	 t         t        t        f}t        j                  || j
                        	t        ||      r|gn|}|| j                  vr؉	j                  r	j                  | j                  |<   nt        j                  | j                  |<   t        d |D              rAt        d |D              rt        j                  nt        j                  | j                  |<   nAt        d |D              rt        d |D              rt        j                  | j                  |<   nt        d |D              rt        j                  | j                  |<   nt        d |D              rt        j                  nt        j                   | j                  |<   nt        d |D              rt        j"                  | j                  |<   n_t        d |D              rt        j$                  | j                  |<   n/t        d	 |D              rt        j&                  | j                  |<   | j                  |   t        j                  k(  r2|D cg c]&  }t        |t              r|j)                  d
d      n|( }}nJ| j                  |   t        j                  k(  r*|D cg c]  }t        |t*              rt-        |      n|! }}| j                  |   t        j                  k(  xr t        |t.              }|st1        	fd|D              }|r| j2                  n| j4                  }|s	j6                  dk(  s<| j                  |   t        j&                  k(  s	j6                  Mt9        |      dk(  r?|s=|r2| j                  |   t        j                  t        j                  fv r|f}	 |\  ||<   y |||<   y c c}w c c}w # t:        $ r0 t=        j>                  d| dt9        |       d       |d   ||<   Y y w xY w)Nc              3  <   K   | ]  }t        |t                y wrw   )r   ro   r^   vs     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     B6az![16   c              3  &   K   | ]	  }|d k\    ywr   Nr8   r/  s     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     6v!qAvv   c              3  <   K   | ]  }t        |t                y wrw   )r   r   r/  s     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       <VAs+Vr1  c              3  <   K   | ]  }d |cxk  xr dk  nc   yw)r   r   Nr8   r/  s     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     :6a1>E>>6r1  c              3  <   K   | ]  }d |cxk  xr dk  nc   yw)i i   Nr8   r/  s     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     B6aX1E116r1  c              3  &   K   | ]	  }|d k\    ywr3  r8   r/  s     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     ":6a166r4  c              3  <   K   | ]  }t        |t                y wrw   )r   r   r/  s     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       >v!Au-vr1  c              3  <   K   | ]  }t        |t                y wrw   )r   r   r/  s     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  r6  r1  c              3  <   K   | ]  }t        |t                y wrw   )r   r!  r/  s     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  r;  r1  asciir   c              3  @   K   | ]  }j                  |        y wrw   )cvt_enum)r^   r   infos     r`   ra   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     DVE4==/Vs   r   zMetadata Warning, tag z had too many entries: z, expected 1r   ) r   r!  r   r   r  r   r   r  type	UNDEFINEDallRATIONALSIGNED_RATIONALSHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEencoder   r   r  r   r  r  lengthr]   
ValueErrorwarningswarn)
r   r"  r   r   	basetypesr   r0  is_ifddestrA  s
            @r`   r+  zImageFileDirectory_v2._setitem  sI   UC(	sDJJ/&ui8%edll"yy$(IIS!$,$6$6S!B6BB 6v66 !))%55 LL%
 <V<<:6::,4NNS)B6BB,4,A,AS)  #":6":: %MM!)!5!5 S)
 >v>>(0DLL%<V<<(0DLL%>v>>(0DLL%<< 2 22  A 1;1c0B),I   \\#("3"33EKLV*Q"4eAh!;VFLc"hmm3P
648PDVDDF *t}} [[A||C HMM1#Fq(8 dll3/!!((4  !&%c DIU
 M4  &,SE1H6{m<1 #1IS	&s   +N9!$N>+O 6O<;O<c                    | j                   j                  |d        | j                  j                  |d        | j                  j                  |d        y rw   )r  popr  r  r'  s     r`   __delitem__z!ImageFileDirectory_v2.__delitem__  s>    #t$#t$#t$rk   c                j    t        t        | j                        t        | j                        z        S rw   )iterr  r  r  r   s    r`   __iter__zImageFileDirectory_v2.__iter__  $    C&T]]);;<<rk   c                H    t        j                  | j                  |z   |      S rw   )r   unpackr   )r   r   r   s      r`   r   zImageFileDirectory_v2._unpack  s    }}T\\C/66rk   c                H    t        j                  | j                  |z   g| S rw   )r   packr   )r   r   r   s      r`   r   zImageFileDirectory_v2._pack  s    {{4<<#-777rk   Hshortr:   longbzsigned bytehzsigned shortlzsigned longr   r   ddoubler   long8r   c                    |S rw   r8   r   r   r   s      r`   	load_bytezImageFileDirectory_v2.load_byte      rk   c                t    t        |t              rt        |      }t        |t              rt        |f      }|S rw   )r   ro   r   r!  r   r   s     r`   
write_bytez ImageFileDirectory_v2.write_byte  s/    dK(t9DdC $>Drk   r    c                R    |j                  d      r|d d }|j                  dd      S )N    rm   zlatin-1r   )endswithdecoderk  s      r`   load_stringz!ImageFileDirectory_v2.load_string   s*    ==9D{{9i00rk   c                    t        |t              rt        |      }t        |t              s|j	                  dd      }|dz   S )Nr>  r   rr  )r   r   r   r!  rN  r   r   s     r`   write_stringz"ImageFileDirectory_v2.write_string  s;     eS!JE%'LL)4Eu}rk   r&   r,   c           
         | j                  t        |      dz   d|      }fdt        fdt        |d d d   |dd d         D              S )Nr$   r:   c                (    r| |fS t        | |      S rw   ro   ard  r   s     r`   combinez4ImageFileDirectory_v2.load_rational.<locals>.combine      'Aq6>[A->>rk   c              3  6   K   | ]  \  }} ||        y wrw   r8   r^   numdenomr~  s      r`   ra   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>       V;UZS%WS%(;U   r    r   r   r]   r   zipr   r   r   valsr~  s     ` @r`   load_rationalz#ImageFileDirectory_v2.load_rational  U    ||s4yA~.a0$7	? V3tCaCy$qtRSt*;UVVVrk   c                8     dj                   fd|D              S )Nrk   c              3  X   K   | ]!  } j                   d gt        |d        # yw)2Ll    N)r   ru   r^   r}   r   s     r`   ra   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>  s,      
LRDJDJJt?odI>?Fs   '*r   r   r   s   ` r`   write_rationalz$ImageFileDirectory_v2.write_rational  s!    xx 
LR
 
 	
rk   r*   c                    |S rw   r8   rk  s      r`   load_undefinedz$ImageFileDirectory_v2.load_undefined  rm  rk   c                    t        |t              rt        |      }t        |t              rt        |      j	                  dd      }|S )Nr>  r   )r   ro   r   r   rN  rw  s     r`   write_undefinedz%ImageFileDirectory_v2.write_undefined"  s:    e[)JEeS!J%%gy9Erk   
   c           
         | j                  t        |      dz   d|      }fdt        fdt        |d d d   |dd d         D              S )Nr$   rf  c                (    r| |fS t        | |      S rw   r{  r|  s     r`   r~  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine.  r  rk   c              3  6   K   | ]  \  }} ||        y wrw   r8   r  s      r`   ra   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>1  r  r  r    r   r  r  s     ` @r`   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rational*  r  rk   c                8     dj                   fd|D              S )Nrk   c           	   3  Z   K   | ]"  } j                   d gt        |dd        $ yw)2lii   N)r   r~   r  s     r`   ra   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>5  s3      
 DJJtP4T9hOPs   (+r   r  s   ` r`   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rational3  s!    xx 

 
 	
rk   c                ~    |j                  |      }t        |      |k7  rd| dt        |       d}t        |      |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readr]   OSError)r   fpr   retr  s        r`   _ensure_readz"ImageFileDirectory_v2._ensure_read:  sN    ggdms8t%%)F*>s3xjL  #,
rk   c           
     x   | j                          |j                         | _        	 | j                  r"| j	                  d| j                  |d            n!| j	                  d| j                  |d            d   }t        |      D ]   }| j                  r"| j	                  d| j                  |d            n!| j	                  d| j                  |d	            \  }}}}t        j                  || j                        j                  }t        j                  |d
      }	d| d| d|	 d| d	}
	 | j                  |   \  }}||z  }|| j                  rdndkD  rv|j                         }| j	                  | j                  rdnd|      \  }|
d| d| z  }
|j#                  |       t%        j&                  ||      }|j#                  |       n|d | }t)        |      |k7  r>t+        j,                  d| dt)        |       d|        t        j!                  |
       |st        j!                  |
       || j.                  |<   || j0                  |<   |
d|dkD  rd|z  n
t3        |      z   z  }
t        j!                  |
        | j                  r"| j	                  d| j                  |d            n!| j	                  d| j                  |d            \  | _        y # t        $ r t        j!                  d|
|       Y w xY w# t6        $ r(}
t+        j,                  t9        |
             Y d }
~
y d }
~
ww xY w)Nr   r,   ra  r    r   HHQ8s   HHL4sr;   unknownztag:  (
) - type: )z%s - unsupported type %sr$   r:   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag 
 - value: rB   <table: %d bytes>)r  tellr
  r   r   r  ranger   r  r   r   r   getr   KeyErrorloggerdebugseekr   
_safe_readr]   rQ  rR  r  r  r   r  r  r   )r   r  	tag_countir"  r#  countr   tagnametypnamer  	unit_sizer$  r   hereoffsets                   r`   loadzImageFileDirectory_v2.loadD  s    

wwy=	 == S$"3"3B":;\\#t'8'8Q'?@	I
 9% }} LL$*;*;B*CDgt/@/@R/HI &S% #//#tzz:??))C3gYbZy3%qI)-)<)<S)A&Iw y(115779D $DMMSsD QIV_TF2DVHMMCGGFO$//D9DGGDM;Dt9$MM--1F2Fs4yk R)),/
 LL%LL%%)c"$'S!|26)'$.d  S!] &d == S$"3"3B":;\\#t'8'8Q'?@ TYG   LL!;S#FP  	MM#c(#	s=   DL .K! F L ! LL LL 	L9L44L9c                F   | j                  dt        | j                              }g }|t        |      z   t        | j                        dz  z   dz   }d }t        | j                  j	                               D ]\  \  }}|t
        k(  rt        |      }| j                  j                  |      }t        j                  d||t        |             |t        j                  k(  xr t        |t              }|r_| j                  dk(  rd}	nd}	t!        |	|      }
| j                  |   }|j	                         D ]
  \  }}||
|<    |
j#                  |      }n+t        |t$              r|n|f} | j&                  |   | g| }t        j(                  || j*                        j,                  }|rd	nt/        j                  |d
      }d| d| d| d| d	}|dt        |      dk\  rdt        |      z  n
t1        |      z   z  }t        j                  |       |rd}nH|t        j2                  t        j4                  t        j6                  fv rt        |      }nt        |      }t        |      dk  r(|j9                  ||||j;                  dd      df        |j9                  |||| j                  d|      |f       |t        |      dz   dz  dz  z  }_ |L||   \  }}}}}|rd}t=        |      | j                  d| j?                  d|      d   |z         }|||||f||<   |D ]L  \  }}}}}t        j                  d|||t        |      t        |             || j                  d||||      z  }N |dz  }|D ]!  \  }}}}}||z  }t        |      dz  s|dz  }# |S )Nra  r;   r$   zTag %s, Type: %s, Value: %sr   s   II*    s   MM *   )r   ifdr  zsave: r  r  r  r  r=   r  r   rr  rk   r:   r    z&multistrip support not yet implementedr   z%s %s %s %s %sr  s       ) r   r]   r  sortedr  STRIPOFFSETSr  r  r  r  r   r   rI  r   r  r   r   tobytesr   r   r  r   r   r   r   rM  rL  rC  appendljustNotImplementedErrorr   )r   r  resultentriesstripoffsetsr"  r   r#  rT  r  r  r   ifd_tag	ifd_valuer   r  r  r  r  s                      r`   r  zImageFileDirectory_v2.tobytes  s   CT]]!34#f+%DMM(:R(??!C !!4!4!67JCl""7|,,""3'CLL6S$u+NHMM)Ej.EF<<3&7C7C+Cs;s+*0,,.&GY#,CL +9{{6*",UE":0t++C0??ooc4::6;;G%e599S)+DG7)2cU*WIRuAFC<36t9?#c$i/F C LL 8J8JKKD	F4yA~S%Au1EsKLS%C1H$OP3t9q=Q.22Q 8V #+2<+@(CeUD>)#..JJsDLLe$<Q$?&$HIE$'eUD$@GL! -4(CeUDLL)3UDKdTdjj#sE5AAF -4
 	+ -4(CeUDdNF4y1}% -4
 rk   c                   |j                         dk(  r/|j                  | j                  | j                  ddd      z          |j                         }| j	                  |      }|j                  |       |t        |      z   S )Nr   HL*   r,   )r  writer   r   r  r]   )r   r  r  r  s       r`   savezImageFileDirectory_v2.save  se    779>HHT\\DJJtR$;;<f%
F##rk   )s   II*     NN)r  r!  ri   zbytes | Noner   
int | Noner   None)r   r   )r   r   r   r   r   r  r   r   )r"  r   r   r  r   rK   )6r   r   r   r   r   __annotations__r   r   r   ri   r  r   setterr  r  r  r  r%  r(  r,  r+  rX  r[  r   r   listmapr   r   rG  rI  SIGNED_BYTErH  rJ  FLOATrK  IFDLONG8r   rl  r   rp  ru  rx  r  r  r  r  r  r  r  r  r  r  r8   rk   r`   r   r     s   :x VXNRW57O27 )# 	#!#! #! 	#!
 
#!J /0F/0F     	
<	<3N`%
=78 	g.V,%%sM:&&^<%%sM:g.#x0sF+g.
	
" a  a  a1 1
 a  aW W a
 

 a  a  b!W W b
 
AFKZ$rk   r   r   r   r   write_c                       e Zd ZU dZ fdZ ed       Z ed       Zded<   	 e	d        Z
ddZd	 Zdd
Zd Zd Zd Z xZS )ImageFileDirectory_v1a  This class represents the **legacy** interface to a TIFF tag directory.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v1()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        ('Some Data',)

    Also contains a dictionary of tag types as read from the tiff image file,
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`.

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    c                2    t        |   |i | d| _        y )NT)superr   r  )r   r   kwargs	__class__s      r`   r   zImageFileDirectory_v1.__init__  s    $)&)rk   c                    | j                   S rw   )r  r   s    r`   r   zImageFileDirectory_v1.<lambda>   s    rk   c                    | j                   S rw   )r  r   s    r`   r   zImageFileDirectory_v1.<lambda>  s    DMMrk   zdict[int, int]r  c                     | |j                         }|j                  |_        |j                  |_        |j                  |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`

        rh   )ri   r  r  r  )clsoriginalr  s      r`   from_v2zImageFileDirectory_v1.from_v2  s<     )((&&==
rk   c                    t        | j                        }t        | j                        |_        t        | j                        |_        t        | j
                        |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`

        rh   )r   ri   r  r  r  r  )r   r  s     r`   to_v2zImageFileDirectory_v1.to_v2  sG     $4;;7DMM*4<<(DMM*
rk   c                >    || j                   v xs || j                  v S rw   )r  r  r'  s     r`   r(  z"ImageFileDirectory_v1.__contains__*  r)  rk   c                j    t        t        | j                        t        | j                        z        S rw   )r]   r  r  r  r   s    r`   r  zImageFileDirectory_v1.__len__-  r  rk   c                j    t        t        | j                        t        | j                        z        S rw   )rZ  r  r  r  r   s    r`   r[  zImageFileDirectory_v1.__iter__0  r\  rk   c                8    dD ]  }| j                  |||        y N)FT)r+  )r   r"  r   r   s       r`   r,  z!ImageFileDirectory_v1.__setitem__3  s    'JMM#uj1 (rk   c           	        || j                   vrR| j                  |   }| j                  |   }| j                  |   \  }}dD ]  }| j	                  | || ||      |        | j                   |   }t        |t        t        f      s|f}|S r  )r  r  r  r   r+  r   r   r!  )r   r"  r   r#  r   r$  legacyrq   s           r`   r%  z!ImageFileDirectory_v1.__getitem__7  s    dmm#==%D,,s#C //4MD''c74v#>G (mmC #u~.&C
rk   )r   r   r   )r   r   r   r   r   r   tagstagdatar  classmethodr  r  r(  r  r[  r,  r%  __classcell__r  s   @r`   r  r    s`    $  ./D12G ! ""<<=2
rk   r  c                       e Zd ZdZdZdZd fd	ZddZed        Z	ddZ
ddZdd	Zd
 Z fdZddZd Zd Z xZS )TiffImageFileTIFFz
Adobe TIFFFc                F    d | _         	 d | _        	 t        |   ||       y rw   )tag_v2r"  r  r   )r   r  filenamer  s      r`   r   zTiffImageFile.__init__Q  s&    5"X&rk   c                   | j                   j                  d      }|d   dk(  r|| j                   j                  d      z  }t        |      | _        d| _        | j                  j
                  x| _        | _        d| _        | j                   | _	        g | _
        d| _        t        j                  d       t        j                  d| j                         t        j                  dt        |             | j                  d	       y)
z#Open the first image in a TIFF filer,   r    r   Nrm   z*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r  r  r   r  r  r  _TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp
_frame_pos	_n_framesr  r  r   _seek)r   r  s     r`   _openzTiffImageFile._openZ  s     ggll1oq6R<477<<?"C+C0  &*[[%5%55t{77%'%)23_dll3[$s), 	

1rk   c                2   | j                   | j                         }| j                  t        | j                               | j                   /| j                  | j                         dz          | j                   /| j                  |       | j                   S )Nr   )r  r  r  r]   r  r  )r   currents     r`   n_frameszTiffImageFile.n_framesu  sn    >>!iikGJJs4??+,..(

499;?+ ..(IIg~~rk   c                    | j                  |      sy| j                  |       t        j                  | j                         t        j
                  j                  | j                  | j                        | _        y)z%Select a given frame as current imageN)	_seek_checkr  r   _decompression_bomb_checkr   corenewmodeim)r   frames     r`   r  zTiffImageFile.seek  sQ    &

5 	''		2**..DII6rk   c                   | j                   | _        | j                  j                          t        | j                        |k  r| j
                  sd}t        |      t        j                  d|| j                  | j
                  | j                  j                                | j
                  dk\  rd}t        |      | j                  j                  | j
                         | j                  j                  | j
                         t        j                  d| j                  j                                | j                  j                  | j                         | j                  j                  | j                  v rd| _        n| j                  j                  | _        | j
                  dk(  r
|dz   | _        t        | j                        dk(  r| j
                  dk7  | _        | xj                  dz  c_	        t        | j                        |k  r| j                  j                  | j                  |          | j                  j                  | j                         t$        | j                  v r!| j                  t$           | j&                  d<   nd| j&                  v r| j&                  d= | j)                          t*        j-                  | j                        x| _        | _        || _	        | j3                          y )	Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %sl            zUnable to seek to framezLoading tags, location: %sr   r   xmp)r  r  r  r]   r  r  EOFErrorr  r  r  rP  r  r  r  r  r  r  is_animatedXMPrA  _reload_exifr  r  r"  r  _setup)r   r  r  s      r`   r  zTiffImageFile._seek  s   (( 	$//"e+;;3sm#LLK {{e#/ o%GGLL%OO""4;;/LL5tww||~FKKTWW%{{4??2  "kk..{{a!&4??#q(#';;!#3 LLAL9 $//"e+: 	T__U+,!$++#{{3/DIIedii		% 3;;DKKHH48rk   c                    | j                   S )zReturn the current frame number)r  r   s    r`   r  zTiffImageFile.tell  s    ||rk   c                   i }| j                   j                  t        j                  j                        }|r|dd dk(  rt        |dd       }t        j                  |d   dz   dz        dz  }t        |d|z   d|z          }|d|z   d|z   |z    }d|i||<   |t        j                  d|z   |z   dz        dz  d }|dd dk(  r|S )	a5  
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        Nr$   s   8BIMr(   r   r    r  r   )	r  r  r   BaseImageResourcesi16mathceili32)r   blocksrq   idnr   r   s          r`   get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks  s     kkoohmm::;bq'W$Qq]IIs1vzQ./!33q1urAv./26BFTM2$d^r
$))R!Vd]a$781<>? bq'W$ rk   c                p    | j                   r| j                  r| j                         S t        |          S rw   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    r`   r  zTiffImageFile.load  s-    99..%%''w|~rk   c                   | j                   s\d| _        | j                  j                          | j	                         }t
        j                  D ]  }||vr|j                  |        t        j                  | d       t        j                  j                  | j                  v r&| j                  t        j                  j                  = y y )NT)in_place)r  !_close_exclusive_fp_after_loadingr  r  getexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   r  Orientationr  )r   exifkeys      r`   load_endzTiffImageFile.load_end  s     59D2 GGLLN <<>D..d?S! /
 	t4==$$3HMM556 4rk   c                   t         j                   j                  |        | j                          t        | j                        dk(  sd}t        |      | j                  d   d   }t        | j                  d   d         }	 t        | j                  d      xr | j                  j                         }t        | j                  d      r| j                  j                          |r||d<   t        j                  | j                  d	t        |      | j                        }	 |j                  | j                   |       | j$                  xr | j&                   }t        | j                  d      rBt(        j+                  d       |j-                  | j                  j/                               \  }}	n|rGt(        j+                  d       |s| j                  j1                  d       |j-                  d      \  }}	n\t(        j+                  d       | j                  j1                  d       |j-                  | j                  j3                               \  }}	g | _        d| _        | j7                          |r!| j                  j9                          d| _        |	dk  rt        |	      t         j                   j                  |       S # t
        $ r d}Y w xY w# t"        $ r}d
}t        |      |d}~ww xY w)zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r"   filenoflushFr    libtiffzCouldn't set the imageNgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just reading)r   r  load_preparer]   r'  r  r  r   r  r6  r7  _getdecoderr  r   decoderconfigsetimager  rP  _exclusive_fpr  r  r  rt  r9  r  r  readonlyr4  close)
r   r  extentsr   r  decodereclose_self_fpr$  errs
             r`   r)  zTiffImageFile._load_libtiff  sN    	499~"(C#, ))A,q/DIIaLO$

	(+@0@B tww( DG##IIy%+t/A/A
	&TWWg.
 **C43C3C/C477J' LLPQ^^DGG$4$4$67FAsLLNO Q^^G,FAs LLFGGGLLO^^DGGLLN3FAs	GGMMODG7#,{{%%q  	 B	  	&*C#,A%	&s+   A"K "K KK	K4!K//K4c                p   d| j                   v rd}t        |      t        | j                   j                  t        d         | _        | j                   j                  t        d      | _        | j                   j                  t        d      }| j
                  dk(  rd}| j                   j                  t        d      }t        j                  d       t        j                  d| j
                         t        j                  d	|       t        j                  d
| j                         t        j                  d|       t        j                  d| j                  j                  t                     t        | j                   j                  t                    }t        | j                   j                  t                     }||f| _        t        j                  d| j$                         | j                   j                  t&        d      }t)        |      dkD  r"t+        |      t-        |      cxk(  rdk(  rn nd}| j                   j                  t.        d      }| j                   j                  t0        d      }|dv rd}	n
|dk(  rd}	nd}	|	t)        |      z  }	t)        |      }
| j                   j                  t2        | j
                  dk(  r|dv rdnd      }|t4        kD  r#t        j7                  d|       d}t9        |      ||
k  r|d| }n||
kD  r
|
dk(  r||z  }t)        |      |k7  rd}t9        |      | j                   j:                  |||||f}t        j                  d|       	 t<        |   \  | _        }t        j                  d|       t        j                  d| jB                         | j
                  | jD                  d<   | j                   j                  tF        d      }| j                   j                  tH        d      }|r|r| j                   j                  tJ              }|dk(  r||f| jD                  d <   nS|dk(  r|d!z  |d!z  f| jD                  d <   n6|#||f| jD                  d <   ||f| jD                  d"<   n||f| jD                  d"<   dx}x}}g | _&        tN        xs | j
                  d#k7  | _(        | jP                  r|dk(  r5|dd dz   |dd z   }t        j                  d|       t<        |   \  | _        }|d$k(  rd%}d&|v r|jS                  d&d'      }d(|v r|jS                  d(d'      }|dk(  r | j
                  d)k(  r| j                  dk(  rd*}|| j
                  d+| j                   jT                  f}| jL                  jW                  d,dd||fd|f       ntX        | j                   v stZ        | j                   v rutX        | j                   v rC| j                   tX           }| j                   j                  t\        |      }| j$                  d   }nQ| j                   tZ           }| j                   j                  t^              }| j                   j                  t`              }|D ]  }||z   |kD  r|tc        |      z  d-z  }nd}|}| j                  dk(  r
||   }||	z  }|t        |      df}| jL                  jW                  | j
                  ||t-        ||z   |      t-        ||z   |      f||f       ||z   }|| j$                  d   k\  sd||z   }}|| j$                  d   k\  sdx}}|dz  } n"t        j                  d.       d}t9        |      td        | j                   v r | j                   td           | jD                  d/<   | jB                  d0v rW| j                   tf           D cg c]  }ti        |d1z         }}tk        jl                  d2d3jo                  |            | _8        yy# t@        $ r(}t        j                  d       d}t9        |      |d}~ww xY wc c}w )4z-Setup this image object based on current tagsi  z+Windows Media Photo files not yet supportedr   r   r)   r(   z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %sz
- size: %sr7   r8   )r    r(   r,   r"   r&   r$   )r    r(   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelNzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %scompressionr    dpigRQ@
resolutionr   r<   I;16Nz;16Bz;16Nz;16Lr+   rI   Fr8  r,   z- unsupported data organizationicc_profilerU   rW   r   RGB;Lrk   )9r  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  r"  YCBCRSUBSAMPLINGr   
IMAGEWIDTHIMAGELENGTH_sizer   SAMPLEFORMATr]   r{   rz   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr   ri   	OPEN_INFO_moder  r  rA  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr'  READ_LIBTIFFr(  r   r  r  r  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r   r   r   palette)r   r  photo	fillorderxsizeysizesample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelr3  rawmoderC  xresyresresunitxylayerr}  offsetsre  wr  stridetile_rawmoderd  rl  s                                 r`   r  zTiffImageFile._setupB  sU    T[[ ?C#, -T[[__[!-LM%)[[__5I1%M"  :A> +EKKOOIq1	&'($*;*;<7?143M3MN'3.=M0NO DKKOOJ/0DKKOOK01E\
\499-d;}!c-&8C<N&SRS&S !MKKOOM48	kkoolB7IIaZIIS%%	y> KKOO""k1evoA1

 22LL@BS 8Cc""// ""4#45I!116F!6K "$55Iy>..-Cc"" KK
 	%s+	*"+C.DJ 	%w/%tyy1#'#4#4		- {{|Q/{{|Q/Dkkooo6G!|$($<		% A$(4K#=		% $($<		%  +/*		,'*.*		,' A	 , J0A0AU0J   A~"1gns12w.-s3 '0n#
G
 & ! !//&&9 !//&&9
 
%%/..!3 $++UDKK4F4FGAIIi!Qu)=q!DET[[(K4;;,Ft{{*++l3KKOOL%8IIaL ++k2KKOOI.KKOOJ/!q55=Y/!3FF&--2#*5>Li'F!3v;2		  ))As1q5%0#a!eU2CD	 E		!$a!eqADIIaL( !	A
7 ": LL:;-Cc"" $'+{{:'>DIIm$ 99#-1[[-BC-Br!s(|-BGC'++GSXXg5FGDL $A  	*LL/0&Cc")	*B Ds   ._? <`3?	`0#`++`0)NNr  )r  r   r   r  r   )r   r   r   formatformat_descriptionr,  r   r  r   r
  r  r  r  r%  r  r4  r)  r  r  r  s   @r`   r  r  L  s_    F%(-%'6  	7.`*
7*S&j^Hrk   r  r9   r:   rH   rU   rW   r?   rF   r<   r@   rC   rD   rI   rL   rJ   rX   YCbCrr[   rG   r>   rA   rE   )rA   rE   c                    	 t         | j                     \  }}}}}}t	        |      }| j
                  }| j                  }	 |d   }|d}n|dk(  rd}n|dk(  rd	}t        xs |dk7  }d
|t        <   | j                  d   |t        <   | j                  d
   |t        <   d|v r|d   }nCd|v r=|d   }t        |t               r*t#        j$                         }|j'                  |       |}ni }t(        j+                  dt-        |             t        |t.              r|j1                         }|D ]t  }t        |t"        j$                        r'|t2        j4                  v r|j7                  |      ||<   n|j                  |      ||<   	 |j8                  |   |j8                  |<   v i }t=        | d      r| j>                  j1                         }i |tA        | di       }tB        tD        fD ]
  }||v s||=  t=        | d      rtF        tH        tJ        tL        tN        tP        fD ]  }|| jR                  v s|tL        k(  r=| jR                  j8                  |   t2        jT                  t2        jV                  fvr||= X| jR                  |   ||<   | jR                  j8                  |   |j8                  |<    |j                  d| j                  j                  d            }|r	||tX        <   tZ        dftH        dftJ        dftH        dftJ        dftF        dft\        dft^        dft`        dftb        dff
D ]  \  }}||v s||   ||<    |j                  d      }|r!d|tF        <   |d   |tH        <   |d
   |tJ        <   |dk7  r)||td        <   tg        |      d
k7  rtg        |      |th        <   |	||tj        <   |d
k7  r	||tD        <   tl        |vr
||tl        <   n| j                  dv r|tl           dk(  r| j                  dk(  rj| jo                         }|j'                         }tq        |jr                        D ]/  }tq        |jt                        D ]  }|||f   d k(  rdnd |||f<    1 |} ntw        jx                  |       } | j                  d!v rs| jz                  j}                  d"d#      }g }tg        |      d$z  }tq        d$      D ]0  } |||| z  || d
z   z   D !cg c]  }!|!d%z  	 c}!z  }|dgd%|z
  z  z  }2 ||t~        <   |t           |t           }#}"tg        |      |"|d   z  d&z   d'z  z  }$t        |vr[|rG|j                  d(t              }%|$dk(  rd
nt        |%|$z  |#      }&|dk(  rt        |&d&z   d'z  d'z  |#      }&n|#}&|&dk(  rd
}&|&|t        <   |$dk(  rd
n|$|t           z  }'|#|t           z   d
z
  |t           z  }(|'d)k\  r!t2        j                  |j8                  t        <   |'f|(d
z
  z  |$|#z  |'|(d
z
  z  z
  fz   |t        <   t        tq        d|'|(z  |'            |t        <   t        j                  |d
      |t        <   | j                  d*k(  r6t        d+t        d,ij                         D ]  \  }})|j                  ||)        t        t        t        t        g}*|rmd-|v rG|d-   }+t        |+t              r
|+dk  s|+d.kD  rd/}
t        |
      |dk7  rd0}
t        |
      |+|t        <   t(        j+                  d1       t(        j+                  d2t        |j                                      d},t=        |d3      r5	 |j                  d       t        j                  |j                               },i }-|*t        t        t        t        t        t        gz  }*td        |d   i}.t        j                  |j                         |j                               D ]  \  }})|t2        j                  vrtA        t"        j                  d4d5      s4||j8                  v r|j8                  |   |-|<   nGt        |)t        t        t        t         f      svt3        j                  |      j                  }/|/r|/|-|<   ||.vs||*vst        |)t              r|)j                  d6d7      d8z   |.|<   t        |)t              rt        |)      |.|<   |)|.|<    tD        |.v r(tg        |.tD                 d
k(  r|.tD           d   |.tD        <   t(        j+                  d9t        |.j                                      | j                  d:v rd;}t-        |.j                               }0|0j                          |||,||0|-f}1t#        j                  | j                  d<|1|      }2|2j                  | jz                  d=| j                  z          	 |2j                  d>      d
d  \  }3}4|,s|j                  |4       |3rn.|,r	 t        j                  |,       |3dk  rXd?|3 d@}
t        |
      |*D ]  }||=  |j                  |      }5t        j                  | |dd=| j                  z   |5||$d
ffg       dA|v r|| _o        y y # t        $ r!}	d| j                   d}
t        |
      |	d }	~	ww xY w# t        $ r1 | j                  j                  d      }t        |t              rd }Y 
ww xY w# t:        $ r Y 	w xY wc c}!w # t        j                  $ r Y w xY w# t        $ r Y w xY w)BNzcannot write mode z as TIFFrh   rG  r   r)   r+   r1   r-   r   r   tiffinfor2  zTiffinfo Keys: %sr"  r  rK  descriptionrI  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightrH  r    r7   )r9   r:   r9   r   rL  rI   rM  r"   r   r*   r,   
strip_sizer   r  )r   r   )r   r      r   r  r   qualityd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %sr6  rd   Fr>  r   rr  zConverted items: %s)r>   r<   rJ  r8  rM   i @  zencoder error z when writing image file_debug_multipage)p	SAVE_INFOr  r  r  r   encoderinfoencoderconfigrA  r  r   r   WRITE_LIBTIFFrQ  r   rV  rW  r!  r   Exifr  r  r  r  r  r  r   r.  r/  r  r  r   r"  r   EXIFIFDrY  rc  ra  rb  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr  r  rM  rC  rj  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTrZ  r]   r\  r[  rS  copyr  heightwidthr   invertr  
getpaletterk  rf  
STRIP_SIZErz   rI  STRIPBYTECOUNTSr   r  COMPRESSION_INFO_REVrO  rU  REFERENCEBLACKWHITEr  
setdefaultrg  rh  re  TILEBYTECOUNTSrP  JPEGQUALITYr  r  osdupr6  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr  r   r   r  rB  rN  ro   sort_getencoderr=  r  r@  r  r   _saver  )6r  r  r  rw  ri   rm  r  bitsextrarC  r  r  r  r  rG  r8  rA  r2  r3  
legacy_ifdsupplied_tagsr"  iccr   rH  inverted_impxr|  r{  lutcolormapcolorsr  r0  r  re  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imager   	blocklistr  r  typesattsrB  r  r}  encodererrcoder   r  s6                                                         r`   r  r  C  s
   "6?6H3e
  v
.C..K$$M!-0 		#		&*3{e3G !"CggajC
OwwqzC [ :&	;	6"dE"::<DIIdOD
LL$d4j1$-.zz|dEJJ'C83J3J,J||C(CHxx}CH	#||C0CKK  Jr5VV\\^
?z?WR2%>?M 		 -c" r8 
C bii.(RYY->->s-CMM&&L . &c*!yy~CH')yy'8'8'=CKK$!
( //-])C
DC
J 
=)	|$	|$	~&	~&	+,	:	K 		K 	T ;"4(CH //%
 C
 OFLFLt|!Mt9>#&t9C !L{"L!,*/&'	J	3'A#Ba#G77c>'')K!!#B;--.{001A$&q!tHOqBq!tH 2 / B$B	ww+eeug.SQqA#fqj6QU;K*LM*LQS*LMMHsV|,,H  !Hz?C,qAY1tAw;?q01F3'OOL*EM"(A+Q3}7NPQ3RNf$!$~'9a&?1%Da!HNQN*L#q[fs<7H.HC--1c,6GGE!'/}}O$-/3Ca3GH
&*:Q*>??L C a"%557HIC ,//Q?C	ww'f!=
 %'JC NN3&	 J^DI#!),Ggs+w{gm/ o%f$M o%&C34[&"562x 
ffRYY[)
  	
 	
	 tAw' $//#))+}7J7J7LMJC
 (///uzz+H%P#++%!$S!1E#J$US%e,DE#??3/44D%)c
$3i#7eS) %Wi @5 HDI{3 %eDI %DI/ N2 4C\(:$;q$@!%l!3A!6D*F4::<,@A 77''G
 DJJL!		k3$>##BGGY=I 01#NN95ab9MGT   Q;"7)+CDC#, CC "eVbgg-v7KLM	

 [(! )Y	  ""277)84cl!"  ggkk-0k3'K	T  		z Nt ** b  se   i j kk24k k0 	j i<<j6j>=j>	kkk-,k-0	k=<k=c                      e Zd Zg dZh dZddZddZddZddZddZ	ddZ
dd	Zej                  fd
ZddZddZddZd dZddZddZd!dZd!dZd!dZd!dZd!dZddZddZ	 d"	 	 	 	 	 	 	 d#dZy)$AppendingTiffWriter)r   r   r   r    r$   r,   r   r   r    r$   r,   r$   r,   r$   r    r$   r,   >       	     r   r   c                    t        |d      r|| _        d| _        n$|| _        d| _        	 t	        ||rdnd      | _        | j                  j                         | _        | j                          y # t
        $ r t	        |d      | _        Y Lw xY w)Nr  FTzw+bzr+b)	r   r   close_fpr   openr  r  	beginningsetup)r   fnr  s      r`   r   zAppendingTiffWriter.__init__  sy    2vDF!DMDI DM)b3%E: 

  )b%)s   A0 0BBc                   | j                   j                  | j                  t        j                         d | _        d| _        | j                   j                  d      x| _        }|sd| _	        y d| _	        |dk(  r| j                  d       n$|dk(  r| j                  d       nd	}t        |      | j                          | j                          y )
Nr   r$   TFrc   r   rb   r   zInvalid TIFF file header)r   r  r  r  SEEK_SETwhereToWriteNewIFDOffsetoffsetOfNewPager  IIMMisFirst	setEndianRuntimeErrorskipIFDsgoToEnd)r   iimmr  s      r`   r  zAppendingTiffWriter.setup  s    DNNBKK0(,% 66;;q>)	DDL= NN3]"NN3,Cs##rk   c                   | j                   ry | j                  j                  | j                         | j                  j	                  d      }|sy || j
                  k7  rd}t        |      | j                         }|| j                  z  }| j                  j                  | j                         | j                  |       | j                  j                  |       | j                          y )Nr$   z1IIMM of new page doesn't match IIMM of first page)r  r   r  r  r  r  r  readLongr  	writeLongfixIFD)r   r  r  
ifd_offsets       r`   finalizezAppendingTiffWriter.finalize  s    << 	D(()vv{{1~499ECs##]]_
d***
D112z"Jrk   c                D    | j                          | j                          y rw   )r  r  r   s    r`   newFramezAppendingTiffWriter.newFrame  s    

rk   c                    | S rw   r8   r   s    r`   	__enter__zAppendingTiffWriter.__enter__  s    rk   c                >    | j                   r| j                          y y rw   )r  r@  )r   r   s     r`   __exit__zAppendingTiffWriter.__exit__  s    ==JJL rk   c                P    | j                   j                         | j                  z
  S rw   )r   r  r  r   s    r`   r  zAppendingTiffWriter.tell  s    vv{{}t3333rk   c                    |t         j                  k(  r|| j                  z  }| j                  j	                  ||       | j                         S rw   )r  r  r  r   r  r  )r   r  whences      r`   r  zAppendingTiffWriter.seek  s<    R[[ d***FFF#yy{rk   c                >   | j                   j                  dt        j                         | j                   j	                         }d|dz  z
  }d|cxk  rdk  r'n n$| j                   j                  t        |             | j                   j	                         | _        y )Nr   r=   )r   r  r  SEEK_ENDr  r  r!  r  )r   pos	pad_bytess      r`   r  zAppendingTiffWriter.goToEnd  sj    Ar{{#ffkkm rM	y2FFLLy)*#vv{{}rk   c                    || _         | j                    d| _        | j                    d| _        | j                    d| _        y )Nr:   ra  HHL)endianlongFmtshortFmt	tagFormat)r   r  s     r`   r  zAppendingTiffWriter.setEndian  s?    ++a(;;-q) KK=,rk   c                &   	 | j                         }|dk(  r#| j                  j                         dz
  | _        y | j                  j	                  |       | j                         }| j                  j	                  |dz  t        j                         )Nr   r$   r;   )r  r   r  r  r  	readShortr  SEEK_CUR)r   r  num_tagss      r`   r  zAppendingTiffWriter.skipIFDs  sl    JQ040A-FFKK
#~~'HFFKK2r{{3 rk   c                8    | j                   j                  |      S rw   )r   r  ro  s     r`   r  zAppendingTiffWriter.write  s    vv||D!!rk   c                |    t        j                  | j                  | j                  j	                  d            \  }|S )Nr    )r   r^  r  r   r  rw  s     r`   r  zAppendingTiffWriter.readShort  s)    ==A?rk   c                |    t        j                  | j                  | j                  j	                  d            \  }|S rf   )r   r^  r  r   r  rw  s     r`   r  zAppendingTiffWriter.readLong  s)    ==tvv{{1~>rk   c                    | j                   j                  dt        j                         | j                   j	                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr$   wrote only  bytes but wanted 4	r   r  r  r  r  r   r`  r  r  r   r   bytes_writtenr  s       r`   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  h    B$V[[u%EF$!);.ABCs## *<$rk   c                    | j                   j                  dt        j                         | j                   j	                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr  r    r   bytes but wanted 2)	r   r  r  r  r  r   r`  r  r  r	  s       r`   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort  sh    B$V[[%FG$!);.ABCs## *<$rk   c                    | j                   j                  dt        j                         | j                   j	                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr$   r  r  r  r	  s       r`   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r  rk   c                    | j                   j                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr    r  r  )r   r  r   r`  r  r  r	  s       r`   
writeShortzAppendingTiffWriter.writeShort$  sR    V[[%FG$!);.ABCs## *<$rk   c                    | j                   j                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr$   r  r  )r   r  r   r`  r  r  r	  s       r`   r  zAppendingTiffWriter.writeLong*  sR    V[[u%EF$!);.ABCs## *<$rk   c                X    | j                          | j                  j                          y rw   )r  r   r@  r   s    r`   r@  zAppendingTiffWriter.close0  s    rk   c                "   | j                         }t        |      D ]p  }t        j                  | j                  | j
                  j                  d            \  }}}| j                  |   }||z  }|dk  }|s.| j                         | j                  z   }	| j                  |	       || j                  v r| j
                  j                         }
|r9| j                  ||dk(  |dk(         | j
                  j                  |
dz          nP| j
                  j                  	       | j                  ||dk(  |dk(         | j
                  j                  |
       d x}	}
C|sG| j
                  j                  dt        j                          s y )Nr,   r$   r    )isShortisLong)r  r  r   r^  r  r   r  
fieldSizesr  r  r  Tagsr  
fixOffsetsr  r  r  )r   r   r  r"  
field_typer  
field_size
total_sizeis_localr  cur_poss              r`   r  zAppendingTiffWriter.fixIFD4  sF   >>#xA%+]]4>>466;;q>%R"CU4J#e+J!QH4+?+??$$V,dii&&++-OO
a*PQ/ $  FFKK!,FFKK'OO
a*PQ/ $  FFKK(#''Ar{{+= !rk   c                .   |s|sd}t        |      t        |      D ]  }|r| j                         n| j                         }|| j                  z  }|r|dk\  r|dk7  rd}t        |      | j                  |       | j                  j                  dt        j                         | j                  t        j                         | j                  j                  dt        j                         |r| j                  |       | j                  |        y )Nz offset is neither short nor longr   r   znot implementedir,   )r  r  r  r  r  r  r   r  r  r  r  r   rI  r  r  )r   r  r  r  r  r  r  s          r`   r  zAppendingTiffWriter.fixOffsetsW  s     v4Cs##uA)0T^^%dmmoFd***F6U?A:+C&s++ ++F3C-.Ar{{+%%f-$$V,% rk   N)Fr  )r   r  )r   r   r   r  r   )r  r   r   r  )r   r!  r   r  )r   r   r   r  )FF)r  r   r  r   r  r   r   r  )r   r   r   r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r@  r  r  r8   rk   r`   r  r  w  s    J(D2.
4 #%++ --	4"$$$$$!,H AF--#'-9=-	-rk   r  c                r   | j                   j                         }| j                  }t        |j	                  dg             }t        | d      s|st        | ||      S | j                         }	 t        |      5 }| g|z   D ]y  }||_         ||_        t        |d      sd}	n|j                  }	t        |	      D ]@  }
|j                  |
       |j                          t        |||       |j                          B { 	 d d d        | j                  |       y # 1 sw Y   xY w# | j                  |       w xY w)Nappend_imagesr
  r   )r  r  r  r  r  r   r  r  r  r
  r  r  r  r  )r  r  r  r  r  r$  cur_idxtfimsnfrr   s              r`   	_save_allr)  s  s   ..%%'K$$M"=>M2z"=RX&&ggiG $tm+"-$1!sJ/C,,C :CHHSMHHJ#r8,KKM	 & , % 	 %$ 	s%   .D# 9BD=D# D D# #D6z.tifz.tiffz
image/tiff)ri   r!  r   r   )r  zImage.Imager  z	IO[bytes]r  zstr | bytesr   r  )
__future__r   r  r  loggingr  r  r   rQ  collections.abcr   	fractionsr   numbersr   r   typingr   r	   r
   r   r    r   r   r   r   r   r   _binaryr   r  r   r!  r   
_deprecater   r   	getLoggerr   r  rd  r  IFD_LEGACY_APIr  r   r   r  rV  rW  rZ  rO  rS  rT  r  r  r\  rf  r  ra  rb  rQ  rc  r  r  r  r  	PREDICTORrk  rg  rh  re  r  r  r[  rY  
JPEGTABLESrU  r  r  r  r  rj  r  r  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArN  r  r  r_  r{   r]  rg   r   r  rj   ru   r~   r   r   r   ro   r   r   r   r   
_IFDv2Baser   r   r   r   setattrr  ImageFileDirectoryr  r  r  r  r)  register_openr  register_saveregister_save_allregister_extensionsregister_mime)kr0  s   00r`   <module>rB     s   R # 	    	   *  $ = = J J ! !  ! 			8	$ 


 
  	   				
	
  	

	  %  u | x	
 x z { v  
= 
: 
 
> 
= 
?  
6!" 
6#$ 
6% * *:)?)?)AB)AA1)AB { D!T2{ D!T2	{
 D!T2{ D!T2{ D!T2
{ D!T2
{ D!T2{ D!T2{ D!T2{ D!T2{ D!T2{ D!T2{ D!T2{  D!T2!{" D!T2#{$ D!T2%{& D!T2'{( D!T2){* D!T2+{, D!T2-{. D!T2/{0 D!T21{2 D!T23{4 D!T25{6 D!T27{8 D!T29{: D!T2;{< D!T2={> D!T2
?{@ D!T2
A{B D!T2
C{D D!T2
E{F D!T2G{H D!T2I{J D!UB!1K{L D!UB!1M{N D!UB!1O{P D!UB!3Q{R D!UB!2S{T D!UBU{V D!UBW{X D!UBY{Z D!UB[{\ D!UB]{^ D!UB_{` D!UBa{b D!UBc{d D!UBe{f D!VT"Lg{h D!VT"Li{j D!Y#^k{l D!Y#^m{n D!Y#%5o{p D!Y#%5q{r D!\2&(8s{t D!\2&(8u{v D!\4(/w{x D!\4(/y{z D!_f-/?{{| D!_f-/?}{~ D!'35F{@ D!'35FA{B D!\4(*:C{D D!\4(*:E{F D!_f-/@G{H D!_f-/@I{J D!'35GK{L D!'35GM{N D!\4(*:O{P D!\4(*:Q{R D!_f-/@S{T D!_f-/@U{V D!'35GW{X D!'35GY{Z D!\6*,<[{\ D!\6*,<]{^ D!\2&(:_{` D!\2&(:a{b D!%r*,@c{d D!%r*,@e{f D!%t,.Ag{h D!%t,.Ai{j D!%t,.Bk{l D!%t,.Bm{n D!%t,.Bo{p D!%t,.Bq{r D!T2s{t D!T2u{v D!T2w{x D!T2y{z D!T2{{| D!T2}{~ D!T2{@ D!T2A{B D!T2C{D D!T2E{F D!T2G{H D!T2I{J D!T2
K{L D!T2
M{N D!VT"KO{P D!VT"LQ{R D!VT"LS{T D!T2U{V D!T2W{X D!\2&(8Y{Z D!\2&(8[{\ D!_d+->]{^ D!_d+->_{` D!'02Da{b D!'02Dc{d D!%r*,@e{f D!T2
g{h D!T2
i{n D!Y#_o{p D!Y#_q{r D!Y#^s{t D!Y#^u{	z AyAA  uzz8$?:B?"%" y'( y'x	" S)JJr$J r$j (6  $(7  %IC<<S!D!U4&>>#3Fq3IJ!VD6?OC4HI  OS$X1 Xx + THI'' TH| #r1at	$ #r1at	$	
 	4Q61
% #r1at	$ 	4Q61
% '2q!UD	) VRAud+ gr1a- '2q!UD	) 
E2q!Y- VRA|Q/ VRA|Q/ VRA|T2  gr1aD1!" 
E2q!Y-#$ xQ5$/%& gr1a-'( Q5$/Q5$/+	2q"h	y- y-x>   M((- A   M((% 0   ,,i 8   -..0A B   M((, 7S@ Cs   +^0