
    &Th,                    v   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mZ ddlmZ ddlmZ dd	lmZ dd
lmZ  ej8                  e      ZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+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/ZDd0ZEd1ZFd2ZGd3ZHd4ZId5ZJd6ZKd7ZLi dd8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXZMeMj                         D  ci c]  \  } }|| 
 c}} ZOi e#d dYddYdZfd[e$d dYddYdZfd[e#d dYd9dYdZfd\e$d dYd9dYdZfd\e#ddYddYdZfd]e$ddYddYdZfd]e#ddYd9dYdZfd^e$ddYd9dYdZfd^e#d dYdd_dZfd`e$d dYdd_dZfd`e#d dYd9d_dZfdae$d dYd9d_dZfdae#ddYdd_dZfdbe$ddYdd_dZfdbe#ddYd9d_dZfdce$ddYd9d_dZfdce#d dYddddZfdei e$d dYddddZfdee#d dYd9dddZfdfe$d dYd9dddZfdfe#ddYddddZfdge$ddYddddZfdge#ddYd9dddZfdhe$ddYd9dddZfdhe#d dYddidZfdje$d dYddidZfdje#d dYd9didZfdke$d dYd9didZfdke#ddYddidZfdle$ddYddidZfdle#dd_ddidZfdle$dd_ddidZfdle#ddYd9didZfdme$ddYd9didZfdmi e#ddYddndZfdoe#d dYddpdZfdqe#ddYddpdZfdqe$ddYddpdZfdre#ddYd9dpdZfdse#dd_ddpdZfdte$dd_ddpdZfdue#d dvddwdZfdxe$d dvddwdZfdye#ddYddwdZfdze#dd_ddwdZfd{e$dd_ddwdZfd|e#ddvddwdZfdxe$ddvddwdZfdye#ddYdd}d_fd~e$ddYdd}d_fd~e#d9dYdddZfdi e$d9dYdddZfde#d9dYd9ddZfde$d9dYd9ddZfde#d9dYdddZfde$d9dYdddZfde#d9dYdddfde$d9dYdddfde#d9dYdddfde$d9dYdddfde#d9dYdddfde$d9dYdddfde#d9dYdddYfde$d9dYdddYfde#d9dYdddfde$d9dYdddfde#d9dYdddfde$d9dYdddfdi e#d9dYddd_fde$d9dYddd_fde#d9dYdddfde$d9dYdddfde#d9dYdddfde$d9dYdddfde#d9dYdddfde$d9dYdddfde#d9dYdddZfde$d9dYdddZfde#d9dYdddZfde$d9dYdddZfde#d9dYdddfde$d9dYdddfde#d9dYdddYfde$d9dYdddYfde#d9dYddd_fdi e$d9dYddd_fde#d;dYddYdZfde$d;dYddYdZfde#d;dYd9dYdZfde$d;dYd9dYdZfde#d;dYdd_dZfde$d;dYdd_dZfde#d;dYd9d_dZfde$d;dYd9d_dZfde#d;dYddddZfde$d;dYddddZfde#d;dYd9dddZfde$d;dYd9dddZfde#d;dYddidZfde$d;dYddidZfde#d;dYdd}d_fde$d;dYdd}d_fde#d;dYd9didZfde$d;dYd9didZfde#d?dYdddZfde$d?dYdddZfde#d?dYdddfde$d?dYdddfde#d?dYdddfde$d?dYdddfde#d?dYdddZfde#dAdYdddZfde$dAdYdddZfde#dEdYdddZfde$dEdYdddZfdiZP eQd ePD              ZRg dZSd ZTd ZUd ZVi ZWi ZX G d de      ZY G d de      ZZeWeZ_W        eXeZ_X         ej                         D ]:  \  Z[Z\e\j                  dd      Z\ e^eZde\z   eWe[   d           e^eZde\z   eXe[          < [W[X[[[\ G d deZ      Z_e_Z` G d dej"                        Zai dde#dddYdfdde#dddidfdde#ddd}d9fdde#d;ddidfdde#d;dd}d9fdde#dd9dwdfdde#dddpdfdde#dd9dpdfdde#dd;dwdfdde#d9dddfdde#d9ddd fdde#d9ddd9fdde#d?dddfdde#dAdddfdde#dEdddfdde$dd9dwdfdde$dddpdfde$dd9dpdfde$dd;dwdfd՜Zbdք Zc G dׄ dث      Zddل Ze ej                  eaj                  eaeT        ej                  eaj                  ec        ej                  eaj                  ee        ej                  eaj                  ddg        ej                  eaj                  dܫ       yc c}} w )    N)MutableMapping)Fraction)NumberRational   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32be)o8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)r1   z1;IR)r1   r1   )r1   z1;R)r   )LzL;2I)r2   zL;2IR)r2   zL;2)r2   zL;2R)r   )r2   zL;4I)r2   zL;4IR)r2   zL;4)r2   zL;4R)r$   )r2   zL;I)r2   zL;IR)r2   r2   )r2   zL;R)   )I;16zI;12)   )r4   r4   )I;16Br6   )r4   zI;16R)II;16S)r7   I;16BS)r   )    )FF;32F)r;   F;32BF)r7   zI;32N)r7   I;32S)r7   I;32BS)r$   r$   )LAr@   )r$   r$   r$   )RGBrA   )rA   zRGB;R)r$   r$   r$   r$   )RGBArB   r   )RGBXrD   )r$   r$   r$   r$   r$   r   r   )rD   RGBXX)r$   r$   r$   r$   r$   r$   )r   r   r   )rD   RGBXXX)rB   RGBa)r   r   )rB   RGBaX)r   r   r   )rB   RGBaXX)r   r   )rB   RGBAX)r   r   r   )rB   RGBAXX)i  )r5   r5   r5   )rA   zRGB;16L)rA   zRGB;16B)r5   r5   r5   r5   )rB   zRGBA;16L)rB   zRGBA;16B)rD   zRGBX;16L)rD   zRGBX;16B)rB   zRGBa;16L)rB   zRGBa;16B)PzP;1)rM   zP;1R)rM   zP;2)rM   zP;2R)rM   zP;4)rM   zP;4R)rM   rM   )PArN   )rM   zP;R)CMYKrO   )rO   CMYKX)rO   CMYKXX)rO   zCMYK;16L)rA   rD   )LABrR   c              #   8   K   | ]  }t        |d            yw)r   N)len).0key_tps     [/home/stella.sw7ft.com/public_html/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py	<genexpr>rX     s     AV#fQi.As   )   MM *   II* s   MM* s   II *s   MM +s   II+ c                     | d d t         v S Nr   )PREFIXESprefixs    rW   _acceptr`     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       rW   _limit_rationalrk     sA    
c(Q,C
a#g#
.
=
=g
FC3tt9$$ra   c                     t        |       }|j                  |j                  f}t        |      |k  rt	        | t        |            }t        |      |kD  rt        | } t	        | |      }|S N)r   	numeratordenominatorminrk   rd   max)rg   rh   min_valfracrj   s        rW   _limit_signed_rationalrt     sa    C=D
..$**
*C
3x'c3w<0
3x'nc7+Jra   c                   .   e Zd ZdZ	 dZd)dZed        Zed        Zd Z	d Z
d Zd	 Z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()*re   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_denominator_valc                    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   )	
isinstancere   rn   rv   ro   rw   rx   r   float)selfvaluero   s      rW   __init__zIFDRational.__init__?  s     e[)#ooDO % 1 1D

DIeX&#ooDO % 1 1D#DO +D!eDIA DI 4DIra   c                     | j                   S rm   )rv   r}   s    rW   rn   zIFDRational.numeratorY  s    ra   c                     | j                   S rm   )rw   r   s    rW   ro   zIFDRational.denominator]  s       ra   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   )ro   rn   rx   limit_denominator)r}   max_denominatorfs      rW   rf   zIFDRational.limit_rationala  sN     q >>4#3#333II''8{{AMM))ra   c                 >    t        t        | j                              S rm   )strr|   rx   r   s    rW   __repr__zIFDRational.__repr__n  s    5#$$ra   c                 6    | j                   j                         S rm   )rx   __hash__r   s    rW   r   zIFDRational.__hash__q  s    yy!!##ra   c                     | j                   }t        |t              r|j                   }t        |t              rt        |      }||k(  S rm   )rx   r{   re   r|   )r}   otherrg   s      rW   __eq__zIFDRational.__eq__t  s;    iie[)JJEeU#*Ce|ra   c                 H    | j                   | j                  | j                  gS rm   )rx   rv   rw   r   s    rW   __getstate__zIFDRational.__getstate__|  s    		4??D,=,=>>ra   c                 f    t         j                  | d       |\  }}}|| _        || _        || _        y )Nr   )re   r   rx   rv   rw   )r}   staterx   rv   rw   s        rW   __setstate__zIFDRational.__setstate__  s4    T1%).&j,	$(ra   c                       fd}|S )Nc                 6     t        | j                        | S rm   )getattrrx   )r}   argsops     rW   delegatez'IFDRational._delegate.<locals>.delegate  s    )7499b)400ra   r0   )r   r   s   ` rW   	_delegatezIFDRational._delegate  s    	1 ra   __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__Nr/   )-__name__
__module____qualname____doc__	__slots__r   propertyrn   ro   rf   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   r0   ra   rW   re   re   1  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& $ra   re   c                   ,   e Zd ZdZd;dZ ed       Z ed       Z ed       Zej                  d        Zd Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z e eeej8                  ddf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g	              ed'd'      d<d(       Z% ed'      d)        Z& ed*d'      d<d+       Z' ed*      d,        Z( ed-d.      d<d/       Z) ed-      d0        Z* ed1d'      d<d2       Z+ ed1      d3        Z, ed4d.      d<d5       Z- ed4      d6        Z.d7 Z/d8 Z0d=d9Z1d: Z2y)>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``.

    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$   r2   r   F)r`   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtypereset_unpacknext_legacy_api)r}   ifhr_   r   msgs        rW   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 	 !ra   c                     | j                   S rm   )r   r   s    rW   <lambda>zImageFileDirectory_v2.<lambda>  
    4<< ra   c                     | j                   S rm   )_offsetr   s    rW   r   zImageFileDirectory_v2.<lambda>  r   ra   c                     | j                   S rm   )r   r   s    rW   r   zImageFileDirectory_v2.<lambda>  s    t'7'7 ra   c                     d}t        |      )Nz"Not allowing setting of legacy api)	Exception)r}   r~   r   s      rW   
legacy_apiz ImageFileDirectory_v2.legacy_api  s    2nra   c                 X    i | _         i | _        i | _        i | _        d | _        d | _        y rm   )_tags_v1_tags_v2_tagdatar   _nextr   r   s    rW   r   zImageFileDirectory_v2.reset  s,    
ra   c                 *    t        t        |             S rm   )r   dictr   s    rW   __str__zImageFileDirectory_v2.__str__!  s    4:ra   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   name)r}   coder~   s      rW   namedzImageFileDirectory_v2.named$  sH      $zz|
e OOD$**-22E9
 	
 
s   5Ac                 j    t        t        | j                        t        | j                        z        S rm   )rT   setr   r   r   s    rW   __len__zImageFileDirectory_v2.__len__/  $    3t}}%DMM(::;;ra   c                    || j                   vrG| j                  |   }| j                  |   }| j                  |   \  }} || || j                        | |<   | j                   |   }| j                  rt        |t        t        f      s|f}|S rm   )r   r   r   _load_dispatchr   r{   tuplebytes)r}   tagdatatypsizehandlerrg   s          rW   __getitem__z!ImageFileDirectory_v2.__getitem__2  s    dmm#==%D,,s#C //4MD'dDOO<DImmC ??:cE5>#B&C
ra   c                 >    || j                   v xs || j                  v S rm   )r   r   r}   r   s     rW   __contains__z"ImageFileDirectory_v2.__contains__=      dmm#;sdmm';;ra   c                 >    | j                  ||| j                         y rm   )_setitemr   )r}   r   r~   s      rW   __setitem__z!ImageFileDirectory_v2.__setitem__@  s    c5$//2ra   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rm   )r{   re   rU   vs     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>N  s     Baz![1B   c              3   &   K   | ]	  }|d k\    ywr   Nr0   r  s     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>Q  s     6!qAv6   c              3   <   K   | ]  }t        |t                y wrm   )r{   intr  s     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>T       <As+<r  c              3   <   K   | ]  }d |cxk  xr dk  nc   yw)r   r   Nr0   r  s     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>U  s     :a1>E>>:r  c              3   <   K   | ]  }d |cxk  xr dk  nc   yw)i i   Nr0   r  s     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>W  s     BaX1E11Br  c              3   &   K   | ]	  }|d k\    ywr  r0   r  s     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>\  s     ":a16":r  c              3   <   K   | ]  }t        |t                y wrm   )r{   r|   r  s     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>_       >!Au->r  c              3   <   K   | ]  }t        |t                y wrm   )r{   r   r  s     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>a  r	  r  c              3   <   K   | ]  }t        |t                y wrm   )r{   r   r  s     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>c  r  r  asciireplacec              3   @   K   | ]  }j                  |        y wrm   )cvt_enum)rU   r~   infos     rW   rX   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>p  s     DE4==/Ds   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   lengthrT   
ValueErrorwarningswarn)
r}   r   r~   r   	basetypesvaluesr  is_ifddestr  s
            @rW   r   zImageFileDirectory_v2._setitemC  sE   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   1;1c0B),IF  \\#("3"33EKL*Q"4eAh!;LF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 rm   )r   popr   r   r   s     rW   __delitem__z!ImageFileDirectory_v2.__delitem__  s>    #t$#t$#t$ra   c                 j    t        t        | j                        t        | j                        z        S rm   )iterr   r   r   r   s    rW   __iter__zImageFileDirectory_v2.__iter__  $    C&T]]);;<<ra   c                 H    t        j                  | j                  |z   |      S rm   )structunpackr   )r}   fmtr   s      rW   r   zImageFileDirectory_v2._unpack  s    }}T\\C/66ra   c                 H    t        j                  | j                  |z   g| S rm   )r3  packr   )r}   r5  r(  s      rW   _packzImageFileDirectory_v2._pack  s    {{4<<#-777ra   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   
startswithr  r   )funcr   idxr   s     rW   	decoratorz9ImageFileDirectory_v2._register_loader.<locals>.decorator  sL    '}}''0!]]12.66sC@c
"&*N3Kra   r0   )r@  r   rA  s   `` rW   _register_loaderz&ImageFileDirectory_v2._register_loader  s    	 ra   c                       fd}|S )Nc                     | t         <   | S rm   )_write_dispatch)r?  r@  s    rW   rA  z9ImageFileDirectory_v2._register_writer.<locals>.decorator  s    #'OC Kra   r0   )r@  rA  s   ` rW   _register_writerz&ImageFileDirectory_v2._register_writer  s    	 ra   c                     ddl m} | \  }}|||<   t        j                  dz         dfd	ft        |<   fdt
        |<   y )Nr   r   =c                 H    | j                  t        |      z    |      S rm   )r   rT   )r}   r   r   r5  r   s      rW   r   z7ImageFileDirectory_v2._register_basic.<locals>.<lambda>  s)    D	T 123%8$? ra   c                 <     dj                   fd|D              S )Nra   c              3   B   K   | ]  }j                  |        y wrm   )r8  )rU   r~   r5  r}   s     rW   rX   zJImageFileDirectory_v2._register_basic.<locals>.<lambda>.<locals>.<genexpr>  s     @TZZU+@s   join)r}   r(  r5  s   ` rW   r   z7ImageFileDirectory_v2._register_basic.<locals>.<lambda>  s    HH@@@ ra   T)r   r   r3  calcsizer   rE  )idx_fmt_namer   r@  r   r5  r   s       @@rW   _register_basicz%ImageFileDirectory_v2._register_basic  sL    #%S$c
sSy)
s 
ra   Hshortr2   longbzsigned bytehzsigned shortlzsigned longr   r|   ddoubler   long8r   c                     |S rm   r0   r}   r   r   s      rW   	load_bytezImageFileDirectory_v2.load_byte      ra   c                 t    t        |t              rt        |      }t        |t              rt        |f      }|S rm   )r{   re   r  r   r}   r   s     rW   
write_bytez ImageFileDirectory_v2.write_byte  s/    dK(t9DdC $>Dra   r   c                 R    |j                  d      r|d d }|j                  dd      S )N    rc   zlatin-1r  )endswithdecoder\  s      rW   load_stringz!ImageFileDirectory_v2.load_string  s*    ==9D{{9i00ra   c                     t        |t              rt        |      }t        |t              s|j	                  dd      }|dz   S )Nr  r  rc  )r{   r  r   r   r"  r}   r~   s     rW   write_stringz"ImageFileDirectory_v2.write_string  s;     eS!JE%'LL)4Eu}ra   r   r$   c           
          | j                  t        |      dz   d|      }fdt        fdt        |d d d   |dd d         D              S )Nr   r2   c                 (    r| |fS t        | |      S rm   re   arU  r   s     rW   combinez4ImageFileDirectory_v2.load_rational.<locals>.combine      'Aq6>[A->>ra   c              3   6   K   | ]  \  }} ||        y wrm   r0   rU   numdenomro  s      rW   rX   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>       VZS%WS%(V   r   r   r   rT   r   zipr}   r   r   valsro  s     ` @rW   load_rationalz#ImageFileDirectory_v2.load_rational  U    ||s4yA~.a0$7	? V3tCaCy$qtRSt*;UVVVra   c                 8     dj                   fd|D              S )Nra   c              3   X   K   | ]!  } j                   d gt        |d        # yw)2Ll    N)r8  rk   rU   rs   r}   s     rW   rX   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>  s-      
DHJDJJt?odI>?
s   '*rL  r}   r(  s   ` rW   write_rationalz$ImageFileDirectory_v2.write_rational  s!    xx 
LR
 
 	
ra   r"   c                     |S rm   r0   r\  s      rW   load_undefinedz$ImageFileDirectory_v2.load_undefined  r^  ra   c                 \    t        |t              rt        |      j                  dd      }|S )Nr  r  )r{   r  r   r"  rh  s     rW   write_undefinedz%ImageFileDirectory_v2.write_undefined  s'    eS!J%%gy9Era   
   c           
          | j                  t        |      dz   d|      }fdt        fdt        |d d d   |dd d         D              S )Nr   rW  c                 (    r| |fS t        | |      S rm   rl  rm  s     rW   ro  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine  rp  ra   c              3   6   K   | ]  \  }} ||        y wrm   r0   rr  s      rW   rX   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>  ru  rv  r   r   rw  ry  s     ` @rW   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rational  r|  ra   c                 8     dj                   fd|D              S )Nra   c           	   3   Z   K   | ]"  } j                   d gt        |dd        $ yw)2lii   N)r8  rt   r  s     rW   rX   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>  s3      
 DJJtP4T9hOP
s   (+rL  r  s   ` rW   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rational  s!    xx 

 
 	
ra   c                 ~    |j                  |      }t        |      |k7  rd| dt        |       d}t        |      |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readrT   OSError)r}   fpr   retr   s        rW   _ensure_readz"ImageFileDirectory_v2._ensure_read  sN    ggdms8t%%)F*>s3xjL  #,
ra   c           
         | 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| z          Y w xY w# t6        $ r(}
t+        j,                  t9        |
             Y d }
~
y d }
~
ww xY w)Nr   r$   rR  r   r   HHQ8s   HHL4sr3   unknownztag:  (
) - type: )z - unsupported type r   r2   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag 
 - value: r:   <table: %d bytes>)r   tellr   r   r   r  ranger   r   r   r   r   getr   KeyErrorloggerdebugseekr
   
_safe_readrT   r%  r&  r   r   r   r   r  r   )r}   r  	tag_countir   r   countr   tagnametypnamer   	unit_sizer   r   hereoffsets                   rW   loadzImageFileDirectory_v2.load"  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)=cU'C!CDP  	MM#c(#	s=   DL .K! F L !$L	L L		L 	L=L88L=c                 d   | j                  dt        | j                              }g }|t        |      z   t        | j                        dz  z   dz   }d }t        | j                  j	                               D ]b  \  }}|t
        k(  rt        |      }| j                  j                  |      }t        j                  d| d| 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  }e |L||   \  }}}}}|rd}t=        |      | j                  d| j?                  d|      d   |z         }|||||f||<   |D ]U  \  }}}}}t        j                  | d| d| dt        |       dt        |       	       || j                  d||||      z  }W |dz  }|D ]!  \  }}}}}||z  }t        |      dz  s|dz  }# |S )NrR  r3   r   zTag z, Type: z	, Value: r   s   II*    s   MM *   )r   ifdr  zsave: r  r  r  r  r5   r  r   rc  ra   r2   r   z&multistrip support not yet implementedr   r=  r  s       ) r8  rT   r   sortedr   STRIPOFFSETSr   r  r  r  r   r   r  r{   r   r   r   tobytesr   rE  r   r   r   r   r   r!  r   r  appendljustNotImplementedErrorr   )r}   r  resultentriesstripoffsetsr   r~   r   r)  r   r  r(  ifd_tag	ifd_valuer   r  r  r   r  s                      rW   r  zImageFileDirectory_v2.tobytese  s   CT]]!34#f+%DMM(:R(??!C !!4!4!67 (	3JCl""7|,,""3'CLL4uHSE4;-HIHMM)Ej.EF<<3&7C7C+Cs;s+*0,,. -&GY#,CL-{{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(	3V #+2<+@(CeUD>)#..JJsDLLe$<Q$?&$HIE$'eUD$@GL! -4 	B(CeUDLLC5#awaU}Ad4j\JKdjj#sE5AAF	B
 	+ -4 	 (CeUDdNF4y1}%	 
 ra   c                    |j                         dk(  r/|j                  | j                  | j                  ddd      z          |j                         }| j	                  |      }|j                  |       |t        |      z   S )Nr   HL*   r$   )r  writer   r8  r  rT   )r}   r  r  r  s       rW   savezImageFileDirectory_v2.save  se    779>HHT\\DJJtR$;;<f%
F##ra   )s   II*     NNrN  rC   )3r   r   r   r   r   r   r_   r  r   setterr   r   r   r   r   r   r   r   r-  r0  r   r8  rB  rF  rQ  listmapr   r  r  SIGNED_BYTEr  r  FLOATr  IFDLONG8r]  ra  rf  ri  r{  r  r  r  r  r  r  r  r  r  r0   ra   rW   r   r     sT   :x!@ /0F/0F78J 	
<	<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$ra   r   r=  r<  r;  write_c                        e Zd ZU dZ fdZ ed       Z ed       Zee	d<   	 e
d        Zd Zd Z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      rW   r   zImageFileDirectory_v1.__init__  s    $)&)ra   c                     | j                   S rm   )r   r   s    rW   r   zImageFileDirectory_v1.<lambda>  s
     ra   c                     | j                   S rm   )r   r   s    rW   r   zImageFileDirectory_v1.<lambda>  s
    DMM ra   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`

        r^   )r_   r   r   r   )clsoriginalr  s      rW   from_v2zImageFileDirectory_v1.from_v2  s<     )((&&==
ra   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`

        r^   )r   r_   r   r   r   r   )r}   r  s     rW   to_v2zImageFileDirectory_v1.to_v2  sG     $4;;7DMM*4<<(DMM*
ra   c                 >    || j                   v xs || j                  v S rm   )r   r   r   s     rW   r   z"ImageFileDirectory_v1.__contains__  r   ra   c                 j    t        t        | j                        t        | j                        z        S rm   )rT   r   r   r   r   s    rW   r   zImageFileDirectory_v1.__len__  r   ra   c                 j    t        t        | j                        t        | j                        z        S rm   )r/  r   r   r   r   s    rW   r0  zImageFileDirectory_v1.__iter__  r1  ra   c                 8    dD ]  }| j                  |||        y N)FT)r   )r}   r   r~   r   s       rW   r   z!ImageFileDirectory_v1.__setitem__  s!    ' 	2JMM#uj1	2ra   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   legacyrg   s           rW   r   z!ImageFileDirectory_v1.__getitem__  s    dmm#==%D,,s#C //4MD'' Hc74v#>GHmmC #u~.&C
ra   )r   r   r   r   r   r   tagstagdatar   __annotations__classmethodr  r  r   r   r0  r   r   __classcell__r  s   @rW   r  r    s_    $  ./D12G M! ""<<=2
ra   r  c                   |     e Zd ZdZdZdZd fd	Zd Zed        Z	d Z
d Zd	 Zd
 Zd Z fdZd Zd Zd Z xZS )TiffImageFileTIFFz
Adobe TIFFFc                 F    d | _         	 d | _        	 t        |   ||       y rm   )tag_v2r   r  r   )r}   r  filenamer  s      rW   r   zTiffImageFile.__init__/  s&    5"X&ra   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   Nrc   z*** TiffImageFile._open ***z- __first: z- ifh: r   )r  r  r   r  r  r   _TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp
_frame_pos	_n_framesr  r  r   _seek)r}   r   s     rW   _openzTiffImageFile._open8  s     ggll1oq6R<477<<?"C+C0  &*[[%5%55t{7723{4<<.12wtCyk*+ 	

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

499;?+ ..(IIg~~ra   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     rW   r  zTiffImageFile.seek]  sQ    &

5 	''		2**..DII6ra   c                 F   | j                   | _        | j                  j                          t        | j                        |k  r| j
                  sd}t        |      t        j                  d| d| j                   d| j
                   d| j                  j                                 | j                  j                  | j
                         | j                  j                  | j
                         t        j                  d| j                  j                         z         | 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                         | j#                          t$        j'                  | j                        x| _        | _        || _	        | j-                          y )	Nzno more images in TIFF filezSeeking to frame z, on frame z	, __next z, location: zLoading tags, location: %sr   r   )r  r  r  rT   r  r  EOFErrorr  r  r  r  r  r  r  r   r  is_animated_reload_exifr  r  r   r  _setup)r}   r   r   s      rW   r  zTiffImageFile._seekh  s   (( 	$//"e+;;3sm#LL#E7+dll^ D++l477<<>2BD GGLL%OO""4;;/LL5FGKKTWW%{{4??2  "kk..{{a!&4??#q(#';;!#3 LLAL- $//"e+. 	T__U+,!3;;DKKHH48ra   c                     | j                   S )zReturn the current frame number)r  r   s    rW   r  zTiffImageFile.tell  s    ||ra   c                 n    t         | j                  v r"| j                  | j                  t                  S i S )z
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.

        :returns: XMP tags in a dictionary.
        )XMPr  _getxmpr   s    rW   getxmpzTiffImageFile.getxmp  s,     251Ct||DKK,-KKra   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}   blocksrg   idnr   r   s          rW   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$ ra   c                 p    | j                   r| j                  r| j                         S t        |          S rm   )tileuse_load_libtiff_load_libtiffr  r  )r}   r  s    rW   r  zTiffImageFile.load  s-    99..%%''w|~ra   c                     | j                   rt        j                  j                  t        j                  j                  t        j                  j
                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  dj                  | j                         }|;| j                  j                  |      | _        | j                  j                  | _        | j                  s]d| _        | j"                  j%                          | j'                         }t(        j*                  D ]  }||vr|j-                  |        y y )N)r   r   r   r   r    r"   r$   T)_tile_orientationr	   	TransposeFLIP_LEFT_RIGHT
ROTATE_180FLIP_TOP_BOTTOM	TRANSPOSE
ROTATE_270
TRANSVERSE	ROTATE_90r  r  	transposer   _sizer  !_close_exclusive_fp_after_loadingr  r  getexifr   TAGS_V2_GROUPSget_ifd)r}   methodexifkeys       rW   load_endzTiffImageFile.load_end  s   !!??22??--??22??,,??--??--??,, c$(()  !''++F3!WW\\
 59D2 GGLLN <<>D.. "d?S!"  ra   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_preparerT   r  r  r  r   r  r/  r0  _getdecoderr  r   decoderconfigsetimager  r$  _exclusive_fpr  r  r  re  r2  r  r  readonlyr-  close)
r}   r   extentsr   r  decodereclose_self_fpr  errs
             rW   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                    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| j>                          | j
                  | jB                  d<   | j                   j                  tD        d      }| j                   j                  tF        d      }|r|r| j                   j                  tH              }|dk(  r||f| jB                  d <   nS|dk(  r|d!z  |d!z  f| jB                  d <   n6|#||f| jB                  d <   ||f| jB                  d"<   n||f| jB                  d"<   dx}x}}g | _%        tL        xs | j
                  d#k7  | _'        | jN                  r|dk(  r7|dd dz   |dd z   }t        j                  d|        t<        |   \  | _        }|d$k(  rd%}d&|v r|jQ                  d&d'      }d(|v r|jQ                  d(d'      }|dk(  r | j
                  d)k(  r| j                  dk(  rd*}|| j
                  d+| j                   jR                  f}| jJ                  jU                  d,dd||fd|f       ntV        | j                   v stX        | j                   v rutV        | j                   v rC| j                   tV           }| j                   j                  tZ        |      }| j$                  d   }nQ| j                   tX           }| j                   j                  t\              }| j                   j                  t^              }|D ]  }||z   |kD  r|ta        |      z  d-z  }nd}|}| j                  dk(  r
||   }||	z  }|t        |      df}| jJ                  jU                  | 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        |      tb        | j                   v r | j                   tb           | jB                  d/<   | j>                  d0v rV| j                   td           D cg c]  }tg        |d1z         }}ti        jj                  d2d3jm                  |            | _7        | j                   j                  tp        jr                  jt                        | _;        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: z- photometric_interpretation: z- planar_configuration: z- fill_order: z- YCbCr subsampling: z- size: r/   r0   )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: z- unsupported formatzunknown pixel modez- raw mode: z- pil mode: compressionr   dpigRQ@
resolutionr   r4   I;16Nz;16Bz;16Nz;16Lr#   rA   Fr1  r$   z- unsupported data organizationicc_profilerM   rN   r   RGB;Lra   )<r  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  r   YCBCRSUBSAMPLINGr  
IMAGEWIDTHIMAGELENGTHr%  r   SAMPLEFORMATrT   rq   rp   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr   r_   	OPEN_INFOr  r  r  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr  READ_LIBTIFFr  r  r  r  r  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r   r   rM  paletter   r  Orientationr  )r}   r   photo	fillorderxsizeysizesample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelr,  rawmoder<  xresyresresunitxylayerrn  offsetsrV  wr  stridetile_rawmoderU  rc  s                                 rW   r  zTiffImageFile._setup)  s    T[[ ?C#, -T[[__[!-LM%)[[__5I1%M"  :A> +EKKOOIq1	&'t'8'8&9:;5eW=>/0J0J/KLM~i[12,TXX\\:J-K,LMN DKKOOJ/0DKKOOK01E\
x		{+,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
 	|C5)*	*!*3DIw 	|G9-.|DII;/0#'#4#4		- {{|Q/{{|Q/Dkkooo6G!|$($<		% A$(4K#=		% $($<		%  +/*		,'*.*		,' A	 , J0A0AU0J   A~"1gns12w.|C512 &/s^"	7
 & ! !//&&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r!s(|CGC'++GSXXg5FGDL!%1J1J!KI  	*LL/0&Cc")	*B Ds   <a
 a>
	a;#a66a;)NN)r   r   r   formatformat_descriptionr&  r   r  r   r  r  r  r  r
  r  r  r-  r  r  r  r  s   @rW   r  r  *  se    F%(-%'6  	7$LL*
">S&j`Lra   r  r1   r2   r@   rM   rN   r7   r>   r4   r8   r;   r<   rA   rD   rB   rO   YCbCrrR   r?   r6   r9   r=   )r9   r=   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-        |      z         t        |t.              r|j1                         }|D ]t  }t        |t"        j$                        r'|t2        j4                  v r|j7                  |      ||<   n|j                  |      ||<   	 |j8                  |   |j8                  |<   v t=        | d      rlt>        t@        tB        tD        tF        tH        fD ]I  }|| jJ                  v s| jJ                  |   ||<   | jJ                  j8                  |   |j8                  |<   K |j                  d| j                  j                  d            }|r	||tL        <   tN        dft@        dftB        dft@        dftB        dft>        dftP        dftR        dftT        dftV        dff
D ]  \  }}||v s||   ||<    |j                  d      }|r!d|t>        <   |d   |t@        <   |d
   |tB        <   |dk7  r)||tX        <   t[        |      d
k7  rt[        |      |t\        <   |	||t^        <   |d
k7  r	||t`        <   tb        |vr
||tb        <   n| j                  dv r|tb           dk(  r| j                  dk(  rj| je                         }|j'                         }tg        |jh                        D ]/  }tg        |jj                        D ]  }|||f   dk(  rdnd|||f<    1 |} ntm        jn                  |       } | j                  d v rs| jp                  js                  d!d"      }g }t[        |      d#z  }tg        d#      D ]0  }||||z  ||d
z   z   D cg c]  }|d$z  	 c}z  }|dgd$|z
  z  z  }2 ||tt        <   t[        |      | j                  d   |d   z  d%z   d&z  z  }|ra|j                  d'tv              } |dk(  rd
nty        | |z  | j                  d
         }!|dk(  r2ty        |!d%z   d&z  d&z  | j                  d
         }!n| j                  d
   }!|!dk(  rd
}!|dk(  rd
n||!z  }"| j                  d
   |!z   d
z
  |!z  }#|!|tz        <   |"d(k\  r!t2        j|                  |j8                  t~        <   |"f|#d
z
  z  || j                  d
   z  |"|#d
z
  z  z
  fz   |t~        <   t        tg        d|"|#z  |"            |t        <   t        j                  |d
      |t        <   | j                  d)k(  r6t        d*t        d+ij                         D ]  \  }$}%|j                  |$|%        t        t        t        t        g}&|rd,|v rG|d,   }'t        |'t              r
|'dk  s|'d-kD  rd.}
t        |
      |dk7  rd/}
t        |
      |'|t        <   t(        j+                  d0       t(        j+                  d1t        |j                               z         d}(t=        |d2      r5	 |j                  d       t        j                  |j                               }(i })|&t        t~        t        t        t        gz  }&tX        |d   i}*i }+t=        | d3      r| j                  j1                         }+i t        | di       |+},t`        |,v r|,t`        = t        j                  |j                         |,j                               D ]  \  }$}%|$t2        j                  vrt        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        |%      |*|$<   |%|*|$<    t`        |*v r(t[        |*t`                 d
k(  r|*t`           d   |*t`        <   t(        j+                  d9t        |*j                               z         | j                  d:v rd;}t-        |*j                               }.|.j                          |||(||.|)f}/t#        j                  | j                  d<|/|      }	|	j                  | jp                  d=| j                  z          	 |	j                  d>      d
d  \  }0}1|(s|j                  |1       |0rn.|(r	 t        j                  |(       |0dk  rXd?|0 d@}
t        |
      |&D ]  }$||$=  |j                  |      }2t        j                  | |dd=| j                  z   |2||d
ffg       dA|v r|| _k        y y # t        $ r!}	d| j                   d}
t        |
      |	d }	~	ww xY w# t        $ r1 | j                  j                  d      }t        |t              rd }Y 
Gw xY w# t:        $ r Y 	qw 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 TIFFr^   r@  r   r!   r#   r)   r%   r   r   tiffinfor+  zTiffinfo Keys: %sr  rD  descriptionrB  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightrA  r   r/   )r1   r2   r1      rE  rA   rF  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: %sr/  r   libtiff_support_custom_tagsFr  r  rc  zConverted items: %s)r6   r4   rC  r1  rE   i @  zencoder error z when writing image file_debug_multipage)l	SAVE_INFOr  r  r  r   encoderinfoencoderconfigr  r  r{   r  WRITE_LIBTIFFrJ  r   rO  rP  r   r	   Exifr  r  r  r  r  r  r   r(  r)  r   r   r   rZ  rX  rY  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr  r  ra  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTrR  rT   rT  rS  rQ  rL  copyr  heightwidthr   invertr  
getpaletterb  
STRIP_SIZErp   r]  r  STRIPBYTECOUNTSr   r  COMPRESSION_INFO_REVrH  rN  REFERENCEBLACKWHITEr   
setdefaultr^  r_  r\  TILEBYTECOUNTSr$  JPEGQUALITYr  r  osdupr/  ioUnsupportedOperationTRANSFERFUNCTIONSUBIFDr   r   	itertoolschainLIBTIFF_COREr  r|   r   r   r  r"  re   sort_getencoderr6  r  r9  r  r
   _saver  )3r  r  r  ro  r_   re  rz  bitsextrar<  r   r  r  r  r@  r1  r  r+  r,  iccr   rA  inverted_impxrt  rs  lutcolormapcolorsr  r  rx  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imager   r~   	blocklistr  r  typesatts
legacy_ifdsupplied_tagsr  r  rn  errcoder   r  s3                                                      rW   r  r  ,  s
   "6?6H3e
  v
.C..K$$M!-0 		#		&*3{e3G !"CggajC
OwwqzC [ :&	;	6"dE"::<DIIdOD
LL$tDz12$-.zz| dEJJ'C83J3J,J||C(CHxx}CH	#||C0CKK r8 
 
	:C bii99S>C#%99#4#4S#9C 
	: //-])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1 =A$&q!tHOqBq!tH== B$B	ww+eeug.SQq 	-A#fqj6QU;K*LMQSMMHsV|,,H	- !HY2771:Q/!39:F#jA$ks=F3JBGGTUJ/W&  >A#5!";q!@"''!*MN#q[f~.E
^3a7NJ&CE!'/}}O$-/3Ca3GH/3Ca3GHH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[6#))+#6672x 
ffRYY[)
  	
 	
	 tAw' 
2uJ D72x4C
C=(l+#//#))+}7J7J7LM 	&JC
 (///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/	&2 4C\(:$;q$@!%l!3A!6D*VDJJL-AAB 77''G
 DJJL!		k3$>bggy!]C	

255&277*+HHY/3MGT   Q;"7)+CDC#,  	CC	"eVbgg-v7KLM	

 [(! )}  ""277)84cl!"  ggkk-0k3'K	T  		R Np ** r  se   h' i j<j!=4j& (k  '	i0ii6jj	jj&j=<j= 	kkc                       e Zd Zg dZh dZddZd Zd Zd Zd Z	d Z
d	 Zej                  fd
Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z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      rW   r   zAppendingTiffWriter.__init__o  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   TFrZ   r   rY   r   zInvalid TIFF file header)r   r  r  r  SEEK_SETwhereToWriteNewIFDOffsetoffsetOfNewPager  IIMMisFirst	setEndianRuntimeErrorskipIFDsgoToEnd)r}   iimmr   s      rW   r  zAppendingTiffWriter.setup}  s    DNNBKK0(,% 66;;q>)	DDL= NN3]"NN3,Cs##ra   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       rW   finalizezAppendingTiffWriter.finalize  s    << 	D(()vv{{1~ 499ECs##]]_
d***
D112z"Jra   c                 D    | j                          | j                          y rm   )r  r  r   s    rW   newFramezAppendingTiffWriter.newFrame  s    

ra   c                     | S rm   r0   r   s    rW   	__enter__zAppendingTiffWriter.__enter__  s    ra   c                 <    | j                   r| j                          y)NF)r  r9  )r}   exc_type	exc_value	tracebacks       rW   __exit__zAppendingTiffWriter.__exit__  s    ==JJLra   c                 P    | j                   j                         | j                  z
  S rm   )r   r  r  r   s    rW   r  zAppendingTiffWriter.tell  s    vv{{}t3333ra   c                     |t         j                  k(  r|| j                  z  }| j                  j	                  ||       | j                         S rm   )r  r  r  r   r  r  )r}   r  whences      rW   r  zAppendingTiffWriter.seek  s<    R[[ d***FFF#yy{ra   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   r5   )r   r  r  SEEK_ENDr  r  r   r  )r}   pos	pad_bytess      rW   r  zAppendingTiffWriter.goToEnd  sj    Ar{{#ffkkm rM	y2FFLLy)*#vv{{}ra   c                     || _         | j                   dz   | _        | j                   dz   | _        | j                   dz   | _        y )Nr2   rR  HHL)endianlongFmtshortFmt	tagFormat)r}   r  s     rW   r  zAppendingTiffWriter.setEndian  s9    {{S(c)u,ra   c                 &   	 | j                         }|dk(  r#| j                  j                         dz
  | _        y | j                  j	                  |       | j                         }| j                  j	                  |dz  t        j                         )Nr   r   r3   )r  r   r  r  r  	readShortr  SEEK_CUR)r}   r  num_tagss      rW   r  zAppendingTiffWriter.skipIFDs  sl    JQ040A-FFKK
#~~'HFFKK2r{{3 ra   c                 8    | j                   j                  |      S rm   )r   r  r`  s     rW   r  zAppendingTiffWriter.write  s    vv||D!!ra   c                 |    t        j                  | j                  | j                  j	                  d            \  }|S )Nr   )r3  r4  r  r   r  rh  s     rW   r  zAppendingTiffWriter.readShort  s)    ==A?ra   c                 |    t        j                  | j                  | j                  j	                  d            \  }|S r\   )r3  r4  r  r   r  rh  s     rW   r  zAppendingTiffWriter.readLong  s)    ==tvv{{1~>ra   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  r3  r7  r  r  r}   r~   bytes_writtenr   s       rW   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  h    B$V[[u%EF$!);.ABCs## *<$ra   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  r3  r7  r  r  r  s       rW   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort  sh    B$V[[%FG$!);.ABCs## *<$ra   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       rW   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r  ra   c                     | j                   j                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr   r   r  )r   r  r3  r7  r  r  r  s       rW   
writeShortzAppendingTiffWriter.writeShort  sR    V[[%FG$!);.ABCs## *<$ra   c                     | j                   j                  t        j                  | j                  |            }||dk7  rd| d}t        |      y y )Nr   r   r  )r   r  r3  r7  r  r  r  s       rW   r  zAppendingTiffWriter.writeLong  sR    V[[u%EF$!);.ABCs## *<$ra   c                 X    | j                          | j                  j                          y rm   )r  r   r9  r   s    rW   r9  zAppendingTiffWriter.close  s    ra   c                 &   | j                         }t        |      D ]r  }t        j                  | j                  | j
                  j                  d            \  }}}| j                  |   }||z  }|dk  }|s0| 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}	}
E|sI| j
                  j                  dt        j                          u y )Nr$   r   r   )isShortisLong)r  r  r3  r4  r  r   r  
fieldSizesr  r  r  Tagsr  
fixOffsetsr  r  r  )r}   r  r  r   
field_typer  
field_size
total_sizeis_localr  cur_poss              rW   r  zAppendingTiffWriter.fixIFD  sP   >>#x 	,A%+]]4>>466;;q>%R"CU4J#e+J!QH$...$$V,dii&&++-OO
a*PQ/ $  FFKK!,FFKK'OO
a*PQ/ $  FFKK(#''Ar{{+=	,ra   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   r  r	  r  )r}   r  r  r  r   r  r  s          rW   r  zAppendingTiffWriter.fixOffsets4  s    v4Cs##u 	-A)0T^^%dmmoFd***F6U?A:+C&s++ ++F3C-.Ar{{+%%f-$$V,%	-ra   N)F)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  r9  r  r  r0   ra   rW   r  r  R  s    J4 *D22

4 #%++ --	4"$$$$$!,F-ra   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              rW   	_save_allr#  N  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)lr  r  loggingr  r  r3  r%  collections.abcr   	fractionsr   numbersr   r    r   r	   r
   r   r   r   _binaryr   r  r   r  r   r   	getLoggerr   r  r[  r  IFD_LEGACY_APIr  r   r   rO  rP  rR  rH  rL  rM  r  r  rT  r]  r  rX  rY  rJ  rZ  r  r  r  r  	PREDICTORrb  r^  r_  r\  r  r  rS  rQ  
JPEGTABLESrN  r  r  r  r  ra  EXIFIFDr  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArG  r   r  rW  rq   rU  r]   r`   rk   rt   r   rE  re   r   r@  r   r  setattrr  ImageFileDirectoryr  r  r  r  r#  register_openrz  register_saveregister_save_allregister_extensionsregister_mime)kr  s   00rW   <module>r9     s  R 
    	   *  $ J J ! !  			8	$ 


 
  	   				
	
  	

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