
    [>i                         d Z dZddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZ dd	lmZmZmZ dd
lmZmZmZmZmZmZmZmZ ddl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,m-Z-m.Z.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZB ddlmCZCmDZD ej                  dk\  rddlmFZF nddlGmFZF  ej                  eI      ZJ ej                  d      ZL G d deMe   e8      ZN G d deOeef   e8      ZP G d deP      ZQded dfd!ZR G d" d#eP      ZS G d$ d%eS      ZT G d& d'eS      ZU G d( d)eT      ZV	 d2d*ed+ee   d,edeWeMeW   eOeXeWf   f   d ee8eXeWeVf   fd-ZY G d. d/eQ      ZZ G d0 d1eQ      Z[y)3zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N)IterableSequence)BytesIO)ceil)AnyCallableOptionalUnioncast   )PdfReaderProtocolPdfWriterProtocolXmpInformationProtocol)WHITESPACES
StreamTypedeprecation_no_replacementlogger_warningread_non_whitespaceread_until_regexread_until_whitespaceskip_over_comment)CheckboxRadioButtonAttributesFieldDictionaryAttributesOutlineFontFlag)FilterTypes)StreamAttributes)TypArguments)TypFitArguments)STREAM_TRUNCATED_PREMATURELYLimitReachedErrorPdfReadErrorPdfStreamError   )
BooleanObjectByteStringObjectFloatObjectIndirectObject
NameObject
NullObjectNumberObject	PdfObjectTextStringObjectis_null_or_none)Fit)extract_inline__ascii85_decode extract_inline__ascii_hex_decodeextract_inline__dct_decode!extract_inline__run_length_decodeextract_inline_default)read_hex_string_from_streamread_string_from_stream)      )Selfs   [+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]c                   "   e Zd Zdedd fdZ	 	 ddededeeee	e
f         dd fdZde
fdZdee   fdZd	edee   fd
Zd	edd fdZd	edefdZd	edefdZ	 ddedede	ef   ddfdZe	 ddedee   dede	ee	   ee
e	f   f   dd fd       Zy)ArrayObjectpdf_destreturnc                     t        d| j                  t               |d            }| D ]@  }t        |d      r!|j	                  |j                  |             0|j	                  |       B |S )Nr:   F	replicate)r   _reference_cloner:   hasattrappendr>   )selfr;   arrdatas       o/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/pypdf/generic/_data_structures.pyr>   zArrayObject.replicated   sc     !!+-5A
 Dt[)

4>>(34

4 	 
 
    force_duplicateignore_fieldsc                    	 | j                   j                  |k(  r|s| S t        d| j	                  t               |d            }| D ]  }t        |t              r@|j	                  |j                  |||      ||      }|j                  |j                          St        |d      r#|j                  |j                  |||             |j                  |        |S # t        $ r Y w xY w)Clone object into pdf_dest.r:   T)rG   clone)indirect_referencepdf	Exceptionr   r?   r:   
isinstanceStreamObjectrK   rA   r@   )rB   r;   rG   rH   rC   rD   dups          rE   rK   zArrayObject.clones   s    	&&**h6 !!+-4!P
 D$-++JJx-H#
 

3112w'

4::hOP

4   
%  		s   C 	C*)C*c                 P    t        | j                  t        d | D              f      S )q
        Used to detect modified object.

        Returns:
            Hash considering type and value.

        c              3   <   K   | ]  }|j                           y wNhash_bin).0xs     rE   	<genexpr>z'ArrayObject.hash_bin.<locals>.<genexpr>   s     *FA1::<s   )hash	__class__tuplerB   s    rE   rW   zArrayObject.hash_bin   s#     T^^U*F*F%FGHHrF   c                     t        |       S )z:Emulate DictionaryObject.items for a list (index, object).)	enumerater^   s    rE   itemszArrayObject.items   s    rF   lstc                    t        |t        t        t        f      r	 |S t        |t              r|g}|S t        |t
              r$|d   dk(  rt        |      g}|S t        |      g}|S t        |t              rt        |      g}|S |g}|S )Nr   /)
rO   listr]   setr+   strr(   r,   bytesr%   rB   rb   s     rE   _to_lstzArrayObject._to_lst   s    cD%-. 
 Y'%C 
 S!1v}!#' 
 (,-
 
	 U##C()C 
 %C
rF   c                 \    t        |       }|j                  | j                  |             |S )a  
        Allow extension by adding list or add one element only

        Args:
            lst: any list, tuples are extended the list.
            other types(numbers,...) will be appended.
            if str is passed it will be converted into TextStringObject
            or NameObject (if starting with "/")
            if bytes is passed it will be converted into ByteStringObject

        Returns:
            ArrayObject with all elements

        )r:   extendrj   )rB   rb   temps      rE   __add__zArrayObject.__add__   s(     4 DLL%&rF   c                 F    | j                  | j                  |             | S )a  
         Allow extension by adding list or add one element only

        Args:
            lst: any list, tuples are extended the list.
            other types(numbers,...) will be appended.
            if str is passed it will be converted into TextStringObject
            or NameObject (if starting with "/")
            if bytes is passed it will be converted into ByteStringObject

        )rl   rj   ri   s     rE   __iadd__zArrayObject.__iadd__   s     	DLL%&rF   c                 z    | j                  |      D ]  }	 | j                  |      }| |=  | S # t        $ r Y 'w xY w)zAllow to remove items)rj   index
ValueError)rB   rb   rY   rr   s       rE   __isub__zArrayObject.__isub__   sI    c"A

1K #   s   .	::Nstreamencryption_keyc                     |t        dd       |j                  d       | D ]$  }|j                  d       |j                  |       & |j                  d       y )N/the encryption_key parameter of write_to_stream5.0.0   [    s    ])r   writewrite_to_stream)rB   ru   rv   rD   s       rE   r}   zArrayObject.write_to_stream   sW     %&A7 	TDLL  (  	UrF   rM   forced_encodingc                    t               }| j                  d      }|dk7  rt        d      	 | j                  d      }|j                         r"| j                  d      }|j                         r"|dk(  r	 |S |dk(  r| j	                  dd       t        |        o| j	                  dd       | j                  d      }|dk(  r	 |S | j	                  dd       |j                  t        | ||             )Nr#   rz   zCould not read arrayrF      %   ])r:   readr!   isspaceseekr   rA   read_object)ru   rM   r~   rC   tmptok
peek_aheads          rE   read_from_streamzArrayObject.read_from_stream   s     mkk!n$;566++a.C++-kk!n ++-cz 
 d{B"!&)KKAQJT! 
 KKAJJ{63@A% rF   F rU   )__name__
__module____qualname__r   r>   boolr	   r   r
   rg   intrK   rW   r   r   ra   re   rj   rn   r8   rp   rt   r   rh   r}   staticmethodr   dictr   r   rF   rE   r:   r:   c   s[   # 
$ !&=?	#   sCx 9:	
 
<I# Ix} 3 49 "3 = &C D C D  MQ 27c58H2I	  HL'( tS$s)T#s(^CD 
	 rF   r:   c                      e Zd Zdedd fdZ	 	 d dededeeee	e
f         dd fdZdd dededeeee	e
f         deee
e
f      dd	fd
Zde
fdZdedefdZd!de	dedefdZdededefdZd!dedee   defdZdedefdZedee   fd       Z	 d!deded	e	ef   dd	fdZede
de
dee
   dede
f
d       Z edededefd       Z!e"	 d!dedee   ded	e	ee	   e#e
e	f   f   dd fd       Z$y	)"DictionaryObjectr;   r<   c                     t        d| j                  | j                         |d            }| j                         D ]6  \  }}t	        |d      r|j                  |      n|||j                  |      <   8 |S )Nr   Fr>   )r   r?   r\   ra   r@   r>   )rB   r;   d__kvs        rE   r>   zDictionaryObject.replicate
  sq     !!$.."2HeD
 JJLDAq)0K)@H%a H%& ! 
rF   rG   rH   c                 4   	 | j                   j                  |k(  r|s| S t               }t	        d| j                  | j                         ||            }|g }t        |j                               dk(  r|j                  | ||||       |S # t        $ r Y ww xY w)rJ   r   r   )
rL   rM   rN   rf   r   r?   r\   lenkeys_clonerB   r;   rG   rH   visitedr   s         rE   rK   zDictionaryObject.clone  s    	&&**h6 ),!!$.."2HoN
  Msxxz?aJJtXwO
  		s   B 	BBsrcr   Nc           
      &   J t              d}|t              k  rQt        |   t              r*t	        t        |         dk  r|= |= >|xx   dz  cc<   |dz  }|t              k  rQt        fddD              rt              dD ]  }|D ]  }g }	|v s|| vst        j                  |      t              s0t        |   t              sDj                  dd      Zt	        t        |         j                  dd      7j                  dd      t	        t        |         j                  dd      k(  st	        d|         }
| }|
t	        d|
j                  |
j                         ||            }|j                  H|j                  j                  }|j                  j                  }||f|v rd}
n_|j                  ||f       |	j!                  |
|f       |J |j                  |t#        |      <   |}	 |
k(  rd}
nt	        d|
|         }
|
|	D ]  \  }}|j'                  ||||          j)                         D ]  \  }}|vst        |t*              rSt-        |d	      sd|_        |j/                  ||      }|j                  J |j                  | |j/                  |      <   n|| vsst-        |d
      r|j/                  ||      n|| t#        |      <    y# t$        $ r d}
Y w xY w)z
        Update the object from src.

        Args:
            src: "DictionaryObject":
            pdf_dest:
            force_duplicate:
            ignore_fields:

        Nr   r#   c              3     K   | ]  }|vxr |v xr t        j                  |      t              xr t        |   t              xrs j	                  d d      du xs] t        t        |         j	                  d d      du xs6 j	                  d d      t        t        |         j	                  d d      k(    yw)/TypeN)rO   raw_getr'   r   getr   )rX   fieldrH   r   s     rE   rZ   z*DictionaryObject._clone.<locals>.<genexpr>P  s      
 8 & 		3;;u-~>	 3u:'78	
 &$. I(#e*599'4HDPI777D)(#e*599'4HI	 8s   B?C)/Next/Prev/N/V))r   r   )r   r   r   r   rL   rK   )re   r   rO   r   r   anyr   r'   r   r   r?   r\   rL   idnum
generationaddrA   r(   rN   r   ra   rP   r@   rK   )rB   r   r;   rG   rH   r   rY   rb   r   objscur_objprev_objclonr   r   scr   vvs    `  `              rE   r   zDictionaryObject._clone0  sL   ( (((]+#m$$-*C0]1-.!3%a(%a(a A% FA #m$$  
 8
 
 !/M9ADSTM&s{{1~~F&s1v/?@  GGGT2:#$4c!f=AA'4PX"www5#$4c!f=AA'4P Q ?C.A? @D%1#' 2 ' 8 8$+$5$5$7?!"$D  $66B(,(?(?(E(E-1-D-D-O-O
$):#6'#A.2G$) 'UJ,? @ KK$8#+#77#76:6M6MHZ]3'+H/#*c>.2G.23Ewqz.RG/ &14 %)DAqHH !8_mW %)]  :h IIKDAq%a."1&:;/3,?MJB00<<<.0.C.CD*+d] #1g. /=I A'   $- /*./s   LLLc                 l    t        | j                  t        d | j                         D              f      S )rS   c              3   F   K   | ]  \  }}||j                         f  y wrU   rV   )rX   r   r   s      rE   rZ   z,DictionaryObject.hash_bin.<locals>.<genexpr>  s      #O,$!QQ

$5,s   !)r[   r\   r]   ra   r^   s    rE   rW   zDictionaryObject.hash_bin  s.     ^^U#O$**,#OPQ
 	
rF   keyc                 .    t         j                  | |      S rU   )r   __getitem__rB   r   s     rE   r   zDictionaryObject.raw_get  s    c**rF   defaultc                     || v r| |   S 	 d| vr|S t        d      # t         $ r0 t        d| d   j                               j                  ||      cY S w xY w)a>  
        Returns the value of a key or from the parent if not found.
        If not found returns default.

        Args:
            key: string identifying the field to return

            default: default value to return

        Returns:
            Current key or inherited one, otherwise default value.

        /ParentzNot presentr   )KeyErrorr   
get_objectget_inherited)rB   r   r   s      rE   r   zDictionaryObject.get_inherited  sn     $;9	$=)) 	*DO,F,F,HIWWW 	s     6AAvaluec                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S NzKey must be a PdfObjectzValue must be a PdfObject)rO   r+   rs   r   __setitem__rB   r   r   s      rE   r   zDictionaryObject.__setitem__  sC    #y)677%+899c511rF   c                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S r   )rO   r+   rs   r   
setdefaultr   s      rE   r   zDictionaryObject.setdefault  sA    #y)677%+899tS%00rF   c                 J    t         j                  | |      j                         S rU   )r   r   r   r   s     rE   r   zDictionaryObject.__getitem__  s    c*5577rF   c                     ddl m} | j                  dd      }t        |      ry|J d       |j	                         } ||      S )u  
        Retrieve XMP (Extensible Metadata Platform) data relevant to this
        object, if available.

        See Table 347 — Additional entries in a metadata stream dictionary.

        Returns:
          Returns a :class:`~pypdf.xmp.XmpInformation` instance
          that can be used to access XMP metadata from the document. Can also
          return None if no metadata was found on the document root.

        r   )XmpInformationz	/MetadataNmypy)xmpr   r   r-   r   )rB   r   metadatas      rE   xmp_metadatazDictionaryObject.xmp_metadata  sL     	)88K.8$#+V+#&&(h''rF   ru   rv   c                 \   |t        dd       |j                  d       | j                         D ]i  \  }}t        |      dkD  r|d   dk(  r	|d   dk(  r%|j	                  ||       |j                  d       |j	                  |       |j                  d	       k |j                  d
       y )Nrx   ry      <<
r   r#   %r   r{      
   >>)r   r|   ra   r   r}   )rB   ru   rv   r   r   s        rE   r}   z DictionaryObject.write_to_stream  s     %&A7 	W**,JC3x!|A##b'S.7LL!!&)LL ' 	UrF   position_beforeposition_endgenerationsrM   c                     |}|D ]L  }|j                   |   }|j                         D cg c]  }||cxk  r|k  sn n| }	}|	sAt        |g|	 }N |S c c}w rU   )xrefvaluesmin)
clsr   r   r   rM   outr   locationrY   r   s
             rE   _get_next_object_positionz*DictionaryObject._get_next_object_position  si     %Jxx
+H!)!2Z!2Ao6Y\6Ya!2FZ#''	 &
 
 [s
   AAc                 `   | j                  |j                         dt        |j                        |      dz
  }|j                         }|j	                  ||j                         z
        }|j                  d      }|dk  rt        d| d      |j                  ||z   dz          |d |dz
   S )	Nl        )r   r   r   rM   r#   	   endstreamr   z6Unable to find 'endstream' marker for obj starting at .	   )r   tellre   r   r   findr!   r   )r   ru   rM   object_positioncurrent_position
read_valueendstream_positions          rE   _read_unsized_from_streamz*DictionaryObject._read_unsized_from_stream  s     77"KKMTRURZRZ^ad 8 
 ";;=[[6;;=!@A
'__\:!HIYHZZ[\  	$'99A=>2.233rF   r~   c           	      
   | j                  d      }|dk7  r&t        dt        | j                                d      i }	 t	        |       }|dk(  r|dk(  r| j                  dd       t        |        5|st        t              |d	k(  r| j                  d       n| j                  dd       	 	 t        | |      }t        |t              rnt        |t              st        d
|      	 t	        |       }| j                  dd       t        | ||      }|j)                  |      s|||<   nHdt        | j                                d| }
||j                  rt        |
      t        |
t                7| j                         }t	        |       }|dk(  r| j                  d      dk(  r| j                  d      }|dk(  r| j                  d      }|dk(  r|dvrt        d      |dk(  r&| j                  d      dk7  r| j                  dd       t*        j,                  |vr_||j                  rt        d      t        d| j                          t                t/        d      |t        t*        j,                        <   |t*        j,                     }t        |t0              r<| j                         }|J d       |j3                  |      }| j                  |d       |d}| j                         }|dk\  r/ddlm} ||kD  rt9        d| d      | j                  |      |d<   n"t;        | t=        j>                  d            |d<   t	        |       }| j                  d      }||z   dk7  r| j                         }| j                  dd       | j                  d       }|dk(  r|d   d d |d<   n|H|j                  s<| j                  |d       t$        jA                  | |      |d<   | j                         }nP| j                  |d       t        d!t        | j                                d"|d#|d$      | j                  |d       d|v rtB        jE                  |      S t%               }	|	j'                  |       |	S # t        $ r8}||j                  r t        |j                         t                Y d }~d }~ww xY w# t"        $ rl}|%|j                  rt        |j                               t        |j                         t                t%               }	|	j'                  |       |	cY d }~S d }~ww xY w)%Nr      <<zDictionary read error at byte z: stream must begin with '<<'    r   r   r#      >z)Expecting a NameObject for key but found z+Multiple definitions in dictionary at byte z	 for key    s   s   treamr{   )r      z)Stream data must be followed by a newliner   r   zStream length not definedzStream length not defined @pos=r   r   )MAX_DECLARED_STREAM_LENGTHzDeclared stream length of z  exceeds maximum allowed length.__streamdata__r      ir   z7Unable to find 'endstream' marker after stream at byte z (nd='z', end='z').)#r   r!   hexr   r   r   r   r"   r   r   rO   r)   r(   strictr   __repr__r   rN   r   updater   SALENGTHr*   r'   r   filtersr   r    r   recompiler   rP   initialize_from_dictionary)ru   rM   r~   r   rD   r   r   excr   retvalmsgposr   eollengthtpstartr   endstreamends                        rE   r   z!DictionaryObject.read_from_stream!  s    kk!n%<0V[[]1C0D E. .   "%f-Cg~d{B"!&)$%ABBd{AKKA%fc2C!#z2%c:6*GwO  7 *&1B"#FCA 88C=!S	 B6;;=)*)C5:  ?szz&s++sH-e h kkm'9Q83++a.C +kk!n +.($%PQQe|A% 7B"yy$?szz()DEE5fkkm_Ex /;2.>Z		*+"))_F&.1KKM../Aq!~[[]F{@66+.HPp,qrr)/V)<%&)9BJJ|4*%& $F+A{{1~HH- kkmC#kk!n,&-12B-CCR-HD)*_SZZKK*-=-W-WX^`c-dD)* ++-CKKQ'&Qv{{}-.fXLsT 
 KKQt#::4@@!#dE $ 3::"3<<>8<	  ?szz&s||~66s||~x8)+d#sI   0R R ++S
 	S-S<S
 SS
 
	T?A!T:4T?:T?r   rU   )%r   r   r   r   r>   r   r	   r   r
   rg   r   rK   rf   r]   r   rW   r   r   r   r   r   r+   r   propertyr   r   r   rh   r}   classmethodre   r   r   r   r   r   r   r   rF   rE   r   r   	  sj   # 
" !&=?	#   sCx 9:	
 
0oo $o 	o
  sCx 9:o U38_%o 
ob

# 

+3 +3 + s c 22s 23 23 21c 1(3- 13 18s 8y 8 (h'=> ( (. MQ 27c58H2I	" 	"%	58	GKCy	Wh			 	 4#4*;4	4 4$  HLFF'(F tS$s)T#s(^CDF 
	F FrF   r   c                      e Zd Zddee   ddfdZdefdZdefdZ	de
e   fdZded	eddfd
Zdeded f   deddfdZdeded f   deddfdZ	 ddeded	edeedef      def
dZdededededdf
dZdeddfdZddZddZy)
TreeObjectNdctr<   c                 V    t         j                  |        |r| j                  |       y y rU   )r   __init__r   )rB   r  s     rE   r  zTreeObject.__init__  s$    !!$'KK rF   c                 
    d| v S )N/Firstr   r^   s    rE   has_childrenzTreeObject.has_children  s    4rF   c                 "    | j                         S rU   )childrenr^   s    rE   __iter__zTreeObject.__iter__  s    }}rF   c              #     K   | j                         sy | t        d         }| t        d         }|j                         }t               }	 t	        |      }||v rt        d| t               y |j                  |       | ||k(  ry |j                  t        d            }t        |      ry |j                         }uw)Nr  /Lastz(Detected cycle in outline structure for r   )
r  r(   r   rf   idr   r   r   r   r-   )rB   	child_reflastchildr   child_ids         rE   r  zTreeObject.children  s       "H-.	Jw'($$&E%yH7"!I%QS[\KK!K}		*W"56Iy)((*E s   B>C r  rM   c                 *    | j                  |d |       y rU   )insert_child)rB   r  rM   s      rE   	add_childzTreeObject.add_child  s    %s+rF   parentnc                 ,   t        |      ry |J d       t        d|j                               }d|v rat        t	        dt        t
        |t        d               |z               |t        d      <   | j                  |j                  dd       |       y y )Nr   r  /Countr   r   )	r-   r   r   r*   maxr   r(   inc_parent_counter_defaultr   )rB   r!  r"  s      rE   r&  z%TreeObject.inc_parent_counter_default  s     6"!)6)!lF$5$5$78v+7AtC
8(<!=>BC,F:h'( ++FJJy$,GK	 rF   c                 x   t        |      ry |J d       t        d|j                               }|j                  dd      dk(  }t        t        |j                  dd            }|dk  rt        |      }t        ||z   |rdndz        |t        d      <   |sy | j                  |j                  d	d       |       y )
Nr   r  z
/%is_open%Tr$  r   r#   r   r   )	r-   r   r   r   r   absr*   r(   inc_parent_counter_outline)rB   r!  r"  opnr   s        rE   r)  z%TreeObject.inc_parent_counter_outline  s     6"!)6)!lF$5$5$78jjt,4fjj1-.q5AA'3QUCqR4P'Qz(#$''

9d(CQGrF   beforeinc_parent_counter.c                    || j                   }|j                         }|j                  }d| vrt|| t        d      <   t	        d      | t        d      <   || t        d      <   | j                  |t        d      <    || |j                  dd             d|v r|d= d|v r|d= |S t        d	| d         }|j                  |k7  rd|v rt        d
|d         }nxt        d
|      |t        d      <   |j                  |t        d      <   | j                  |t        d      <   d|v r|d= || t        d      <    || |j                  dd             |S |j                  |k7  r	 t        |d   t              sJ ||d   t        d      <   |d   |t        d      <   ||t        d      <   ||t        d      <   | j                  |t        d      <    || |j                  dd             |S # t        $ r |d= Y ]w xY w)Nr  r   r$  r  r   r#   r   r   r   r  )
r&  r   rL   r(   r*   r   r   rO   r   rN   )rB   r  r+  rM   r,  	child_objprevs          rE   r  zTreeObject.insert_child  s     %!%!@!@$$&	(( 4).DH%&)5aDH%&(-DG$%/3/F/FIj+,tY]]8Q%?@)#g&)#g&L&W6%%/$L$w-8,0u,EZ()151H1H	*W-.373J3J	*Y/0i'!'*,1Z()"4x)CD %%/	#d7m-=>>>16DM*W-.-1']Ij)* *.	*W%&$)Z !+/+B+B	*Y'(4x!;<  	#'"	#s   7G$ $G32G3r/  prev_refcurr  c                 L   |j                  t        d      d      }||rQ|j                         }|t        d      = || t        d      <   t        | t        d         dz
        | t        d      <   yt        d      | t        d      <   | t        d      = t        d      | v r| t        d      = yy|r-|j                         }||t        d      <   ||t        d      <   n!||k(  sJ |t        d      = || t        d      <   t        | t        d         dz
        | t        d      <   y)	z
        Adjust the pointers of the linked list and tree node count.

        Args:
            prev:
            prev_ref:
            cur:
            last:

        r   Nr   r  r$  r#   r   r  )r   r(   r   r*   )rB   r/  r0  r1  r  next_refnext_objs          rE   _remove_node_from_treez!TreeObject._remove_node_from_tree"  s1    77:g.5<#..0Z01-5Z)*-9H-.2.Z)* .:!_Z)*H-.g&$.Z01 / #..008G,-,4Z() d{"{G,-,4Z())5d:h;O6PST6T)UDH%&rF   c                    |j                         }|j                  }t        d      |vrt        d      |t        d         | k7  rt        d      d}d }d }| t        d         }|j                         }| t        d         }|j                         }	|S||k(  r| j	                  ||||	       d}n7|}|}t        d      |v r|t        d         }|j                         }nd }d }|S|st        d	      t        |       y )
Nr   /Removed child does not appear to be a tree itemz*Removed child is not a member of this treeFr  r  Tr   z"Removal couldn't find item in tree)r   rL   r(   rs   r5  _reset_node_tree_relationship)
rB   r  r.  foundr0  r/  cur_refr1  last_refr  s
             rE   remove_childzTreeObject.remove_childM  s$   $$&	,,i 	1NOOZ	*+t3IJJ!%j&:!;(/(:(:(<
7+,""$oi++D(CF HD'"c)j12((* o  ABB%i0rF   c                 p    t        d      | vrt        d      t        d| d         j                  |        y)z)Remove the object from the tree it is in.r   r7  r  N)r(   rs   r   r<  r^   s    rE   remove_from_treezTreeObject.remove_from_treer  s4    i ,NOO\4	?+88>rF   c                     | D ]  }|j                         }t        |        t        d      | v r| t        d      = t        d      | v r| t        d      = t        d      | v r| t        d      = y y )Nr$  r  r  )r   r8  r(   )rB   r  r.  s      rE   
empty_treezTreeObject.empty_treex  sw    E((*I))4  h4'Z)*h4'Z)*g$&Z() 'rF   rU   r<   N)r   r   r   r	   r   r  r   r  r   r  r   r  r   r   r
   r'   r   r&  r)  r   r  r5  r<  r>  r@  r   rF   rE   r  r    sT   H%56 $ 
 d  # +(3- +0,s ,): ,t ,LD.,>?LDGL	LHD.,>?HDGH	H, <@00 0 	0
 %Xc3h%780 
0d)V)V#&)V-0)V8;)V	)VV#1# #1$ #1J?
*rF   r  r.  r<   c                     | t        d      = t        d      | v r| t        d      = t        d      | v r| t        d      = yy)z
    Call this after a node has been removed from a tree.

    This resets the nodes attributes in respect to that tree.

    Args:
        child_obj:

    r   r   r   N)r(   )r.  s    rE   r8  r8    sJ     	*Y'('i'j)*'i'j)* (rF   c                   8    e Zd ZddZdedd fdZdedededee	e
eef         d	eeeef      ddf fd
Zdef fdZdefdZdeddfdZdef fdZ	 ddede
deef   ddfdZedeeef   de
d   fd       ZddeddfdZdde
eeef   df   defdZ xZS )rP   r<   Nc                      d| _         d | _        y NrF   )_datadecoded_selfr^   s    rE   r  zStreamObject.__init__  s    
;?rF   r;   c                    t        d| j                  | j                         |d            }| j                  |_        	 | j                  }|d | _        n t        d|j                  |            | _        | j                         D ]6  \  }}t        |d      r|j                  |      n|||j                  |      <   8 |S # t        $ r Y Vw xY w)NrP   FDecodedStreamObjectr>   )	r   r?   r\   rF  rG  r>   rN   ra   r@   rB   r;   r   rG  r   r   s         rE   r>   zStreamObject.replicate  s     !!$.."2HeD
 JJ			,,L#$(!$()<+A+A(+K%!
 JJLDAq)0K)@H%a H%& ! 
  		s   6B? ?	C
Cr   rG   rH   r   c                    t        d|      j                  | _        	 t        d|      j                  }|d| _        n"t        d|j                  |||            | _        t
        |   |||||       y# t        $ r Y w xY w)
        Update the object from src.

        Args:
            src:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        rP   NrI  )r   rF  rG  rK   rN   superr   )rB   r   r;   rG   rH   r   rG  r\   s          rE   r   zStreamObject._clone  s    $ .#.44

	4AAL#$(!$() &&x-P%! 	sHo}gN  		s   AA4 4	B ?B c                 J    t        t        | 	         | j                  f      S )rS   )r[   rM  rW   rF  )rB   r\   s    rE   rW   zStreamObject.hash_bin  s!     UW%'455rF   c                     | j                   S rU   rF  r^   s    rE   get_datazStreamObject.get_data  s    zzrF   rD   c                     || _         y rU   rP  )rB   rD   s     rE   set_datazStreamObject.set_data  s	    
rF   c                 J    t         |          }|| j                         z  }|S rU   )rM  hash_value_datarQ  rB   rD   r\   s     rE   rU  zStreamObject.hash_value_data  s%    w&(rF   ru   rv   c                 X   |t        dd       t        t        | j                              | t	        t
        j                        <   t        j                  | |       | t
        j                  = |j                  d       |j                  | j                         |j                  d       y )Nrx   ry   s   
stream
s
   
endstream)
r   r*   r   rF  r(   r   r   r   r}   r|   )rB   ru   rv   s      rE   r}   zStreamObject.write_to_stream  s|     %&A7 '33tzz?&CZ		"#((v6O]#TZZ ^$rF   )EncodedStreamObjectrI  c                     t         j                  | v rt               }n
t               }| d   |_        | d= t         j
                  | v r| t         j
                  = |j                  |        |S )Nr   )r   FILTERrX  rI  rF  r   r   )rD   r   s     rE   r   z'StreamObject.initialize_from_dictionary  s^    
 99(*F(*F,-!"99RYYdrF   levelrX  c           	         ddl m} t        j                  | v r| t        j                     }t	        |t
              rct        t        t        j                        g|      }	 t        t               g| j                  t        j                  t                           }n{t        t        t        j                        |g      }t        t               | j                  t        j                  t                     g      }nt        t        j                        }d }t               }|j                  |        ||t        t        j                        <   |||t        t        j                        <   |j                  | j                   |      |_        |S # t        $ r> t        t               | j                  t        j                  t                     g      }Y w xY w)Nr   FlateDecode)r   r^  r   rZ  rO   r:   r(   FTFLATE_DECODEr)   r   DECODE_PARMS	TypeErrorrX  r   encoderF  )rB   r[  r^  fparamsr   s         rE   flate_encodezStreamObject.flate_encode  sW   )99RYYA![)BOO!< Aq AB(#Q+-(PQF  BOO!<a @A$\488BOOZ\#JK 2??+AF$&d()z"))$%28F:boo./"))$**e<' ! (#txx'OPFs   "<F AGGpillow_parametersc                     ddl m} | j                  dd      dk7  r 	 | j                   d}t        |t                || |      \  }}}|y|S # t        $ r | j                          d}Y @w xY w)	a  
        Try to decode the stream object as an image

        Args:
            pillow_parameters: parameters provided to Pillow Image.save() method,
                cf. <https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.save>

        Returns:
            a PIL image if proper decoding has been found
        Raises:
            Exception: Errors during decoding will be reported.
                It is recommended to catch exceptions to prevent
                stops in your program.

        r#   )_xobj_to_imagez/Subtype z/Imagez does not seem to be an Imagez$ object does not seem to be an ImageN)_image_xobjectri  r   rL   AttributeErrorr   r   r   )rB   rg  ri  r  	extension_imgs          rE   decode_as_imagezStreamObject.decode_as_image(  s      	388J#x/O0011NO 3)*41BC	1c
 " O))MNOs   A A-,A-rA  rU   )r   )r   r   r   r  r   r>   r   r   r	   r   r
   rg   r   rf   r]   r   rW   rh   rQ  rS  rU  r   r}   r   r   r   r   rf  rp  __classcell__r\   s   @rE   rP   rP     sZ   @# 
2OO $O 	O
  sCx 9:O U38_%O 
O@	6# 	6% U t   MQ% %27c58H2I%	% 38n	;	< # /D @tCH~t7K1L X[ rF   rP   c                       e Zd Zy)rI  N)r   r   r   r   rF   rE   rI  rI  F  s    rF   rI  c                   <     e Zd ZddZdefdZdeddf fdZ xZS )rX  r<   Nc                     d | _         y rU   )rG  r^   s    rE   r  zEncodedStreamObject.__init__K  s
    ;?rF   c                 h   ddl m} | j                  | j                  j                         S t	               }|j                   ||              | j                         D ]<  \  }}|t        j                  t        j                  t        j                  fvs8|||<   > || _        |j                         S )Nr   )decode_stream_data)r   rw  rG  rQ  rI  rS  ra   r   r   rZ  ra  )rB   rw  decodedr   r   s        rE   rQ  zEncodedStreamObject.get_dataO  s    0($$--// &'+D12**,JC299biiAA$ ' $!!rF   rD   c                    ddl m} | j                  t        j                  d      t
        j                  t
        j                  gfv rt        |t              st        d      | j                  | j                          | j                  J d       | j                  j                  |       t        | 1  |j                  |             y t        d      )Nr   r]  rj  zData must be bytesr   zJStreams encoded with a filter different from FlateDecode are not supported)r   r^  r   r   rZ  r_  r`  rO   rh   rb  rG  rQ  rS  rM  rc  r!   )rB   rD   r^  r\   s      rE   rS  zEncodedStreamObject.set_data`  s    )88BIIr"r8I&JJdE* 455  ($$08&80&&t,G[//56\ rF   rA  )r   r   r   r  rh   rQ  rS  rq  rr  s   @rE   rX  rX  J  s-    @"% ""U t  rF   rX  c                       e Zd ZdZ	 ddedededeee   ee	ef   f   ddf fdZ
dedd fd	Z	 	 dded
edeeeee	f         dd fdZdeded
edeeeee	f         deee	e	f      ddf fdZdeddfdZdedeeef   fdZdefdZdeddf fdZedeeeef      fd       Zej:                  deeeef      ddfd       ZddZ	 ddededeef   ddf fdZ xZ S )ContentStreama  
    In order to be fast, this data structure can contain either:

    * raw data in ._data
    * parsed stream operations in ._operations.

    At any time, ContentStream object can either have both of those fields defined,
    or one field defined and the other set to None.

    These fields are "rebuilt" lazily, when accessed:

    * when .get_data() is called, if ._data is None, it is rebuilt from ._operations.
    * when .operations is called, if ._operations is None, it is rebuilt from ._data.

    Conversely, these fields can be invalidated:

    * when .set_data() is called, ._operations is set to None.
    * when .operations is set, ._data is set to None.
    Nru   rM   r~   r<   c                 J   || _         g | _        |t        |   d       || _        y |j	                         }t        |t              rd}|D ]  }|j	                         }t        |t              r$t        |t              s(t        dt        |      j                   dt               n||j                         z  }t        |      dk(  s	|d   dk7  s|dz  } t        |   t        |             || _        y |j                         }|J t        |   |       || _        y )NrF   zExpected StreamObject, got z instead. Data might be wrong.r   r   r   )rM   _operationsrM  rS  r   rO   r:   r)   rP   r   typer   rQ  r   rh   r~   )	rB   ru   rM   r~   rD   r   
s_resolvedstream_datar\   s	           rE   r  zContentStream.__init__  s#    46 >GS!2  // &&(F&+.A!"J!*j9 %j,? '9$z:J:S:S9TTrs$
 
 3 3 554yA~bU):    t-
  / %oo/"... -.rF   r;   c           	         t        d| j                  | j                  d d       |d            }| j                  |_        	 | j                  }|d | _        n t        d|j                  |            | _        | j                         D ]6  \  }}t        |d      r|j                  |      n|||j                  |      <   8 |S # t        $ r Y Vw xY w)Nr{  FrI  r>   )r   r?   r\   rF  rG  r>   rN   ra   r@   rS  rM   re   r}  r~   rJ  s         rE   r>   zContentStream.replicate  s     !!$..t"<hN
 JJ			,,L#$(!$()<+A+A(+K%!
 JJLDAq)0K)@H%a H%& ! 
  		s    6C 	CCrG   rH   c           	          	 | j                   j                  |k(  r|s| S t               }t	        d| j                  | j                  dd      ||            }|g }|j                  | ||||       |S # t        $ r Y ]w xY w)z
        Clone object into pdf_dest.

        Args:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        Returns:
            The cloned ContentStream

        r{  N)rL   rM   rN   rf   r   r?   r\   r   r   s         rE   rK   zContentStream.clone  s    $	&&**h6 ),!!tT*Ho
  M

4?M7K
  		s   A1 1	A=<A=r   r   c                     t        d|      }t        | 	  |j                         || _        t        |j                        | _        |j                  | _        y)rL  r{  N)r   rM  rS  rF  rM   re   r}  r~   )rB   r   r;   rG   rH   r   src_csr\   s          rE   r   zContentStream._clone  sJ    $ os+& 2 23%55rF   c                    |j                  dd       g }	 t        |      }|dv ry |j                  dd       |j                         s|dv rut        |t        j
                        }|dk(  r6|g k(  sJ | j                  |      }| j                  j                  |df       nf| j                  j                  ||f       g }nF|dk(  r|d	vr=|j                  d      }|d	vrn&|j                  t        |d | j                               )
Nr   )rF   r   r   r#   )   '   "   BI   INLINE IMAGEr   )r   r   rF   )r   r   isalphar   r(   delimiter_pattern_read_inline_imager}  rA   r   r   r~   )rB   ru   operandspeekoperatoriis         rE   _parse_content_streamz#ContentStream._parse_content_stream	  s   Aq57&v.DxKKA||~!5+FJ4P4PQu$ $r>)>008B$$++R,AB$$++Xx,@A!H "55!;;q>D "55 FD$:N:N OP3 rF   c           	      P   t               }	 t        |      }|j                  dd       |dk(  rnOt        || j                        }t        |      }|j                  dd       t        || j                        }|||<   r|j                  d      }|d d dk(  sJ |j                  d|j                  dd	            }|j                         }t        |t              r|d
   }d|v sd|v rt        |      }	nd|v sd|v rt        |      }	nd|v sd|v rt        |      }	nd|v sd|v rt        |      }	n|d	k(  r|j                  dd      }
t        |
t              r|
d
   }
d|
v rd}n7d|
v rd}n0|j                  d|
dv rdnd      }|d
kD  r|dz  }nt        |      }	d}|d
kD  rB|j                  t        t!        t"        |d         |z        t!        t"        |d         z        }	t        |      }|j                  dd       nt        |      }	|j                  d      }|j                  dd       |d d dk7  s|dd t$        vra|j                  |d
       t        |      }	|j                  d      }|j                  dd       |d d dk7  s|dd t$        vrt'        d|      |	d S )!Nr   r#      Ir6   r   s   ID/Fz/Filterznot setr   AHxASCIIHexDecodeA85ASCII85DecodeRLRunLengthDecodeDCT	DCTDecodez/CSrj  RGBCMYK   z/BPC>   /G/I/Indexed/DeviceGrayr   g       @z/Wz/H   EIzHCould not extract inline image, even using fallback. Expected 'EI', got )settingsrD   )r   r   r   r   rM   r   r   r   rO   re   r0   r/   r2   r1   r3   r   r   r   r   r"   )rB   ru   r  r   r   r   r   filtrsavposrD   cslcsbitseis                 rE   r  z ContentStream._read_inline_image(  s    $%%f-CKKAd{fdhh/C%f-CKKA1E!HSM  kk!n2Aw%T8<<	9#EFeT"!HEE>-63F;De^%71&9DU]/584V<De^{e3-f5DieR(B"d#U{2||FFAB !8*C1&9DCQw{{c8D>2S89Dhtn<UU %V,BKKA)&1D[[^Bbq6U?b1g[8KK")&1DQBKKA"1v"Qq'"< %^_a^de  %d33rF   c                 J   | j                   st               }| j                  D ]  \  }}|dk(  r|j                  d       t               }|d   j	                  |       |j                  |j                         dd        |j                  d       |j                  |d          |j                  d       n:|D ]$  }|j	                  |       |j                  d	       & |j                  |       |j                  d
        |j                         | _         | j                   S )Nr  r  r  r   s   ID rD   r  r{   r   )rF  r   r}  r|   r}   getvalue)rB   new_datar  r  	dict_textops         rE   rQ  zContentStream.get_datat  s    zzyH&*&6&6"(.NN5) '	IZ(88CNN9#5#5#7"#=>NN6*NN8F#34NN5)&**84 t, ' NN8,u% '7 "**,DJzzrF   rD   c                 2    t         |   |       g | _        y rU   )rM  rS  r}  rV  s     rE   rS  zContentStream.set_data  s    rF   c                     | j                   s7| j                  r+| j                  t        | j                               d| _        | j                   S rE  )r}  rF  r  r   r^   s    rE   
operationszContentStream.operations  s;    DJJ&&wtzz':;DJrF   r  c                      || _         d| _        y rE  )r}  rF  )rB   r  s     rE   r  zContentStream.operations  s    %
rF   c                     | j                   r<| j                   j                  dg df       | j                   j                  g df       y | j                  rd| j                  z   dz   | _        y y )Nr      q   Qs   q
s   
Q
)r}  insertrA   rF  r^   s    rE   isolate_graphics_statez$ContentStream.isolate_graphics_state  s^    ##ADz2##RJ/ZZ$**,x7DJ rF   rv   c                 v    | j                   s| j                  r| j                          t        |   ||       y rU   )rF  r}  rQ  rM  r}   )rB   ru   rv   r\   s      rE   r}   zContentStream.write_to_stream  s,     zzd..MMO7rF   rU   r   rA  )!r   r   r   __doc__r   r
   rg   re   r   r   r  r   r>   r   r	   r   rK   r   rf   r]   r   r   r  r  rh   rQ  rS  r
  r  setterr  r}   rq  rr  s   @rE   r{  r{  q  s   0 HL	%/%/ %/ tS$s)T#s(^CD	%/
 
%/N# 
B !&=?	"" "  sCx 9:	"
 
"H66 $6 	6
  sCx 9:6 U38_%6 
64QJ Q4 Q>I4 I4S#X I4X% ,U t   DsEz!23     T%U
*;%<   8 MQ8 827c58H2I8	8 8rF   r{  ru   rM   r~   c                 R   | j                  d      }| j                  dd       |dk(  rt        j                  | |      S |dk(  rK| j                  d      }| j                  dd       |dk(  rt        j                  | ||      S t        | |      S |dk(  rt        j                  | ||      S |d	v rt        j                  |       S |d
k(  rt        | |      S |dk(  r| j                  d      dk(  r
t               S |dk(  rt        j                  |       S |dk(  r5t        |        t        |       }| j                  dd       t        | ||      S |dv rv| j                  d      }| j                  t        |       d       t        j                  |      |J d       t!        j                  | |      S t#        j                  |       S | j%                         }| j                  dd       | j                  d      }| j                  |       t'        |        t)        d|d| d|      )Nr#   r      /   <r   r  r   rz   )   t   f   (   e   s   endobj   nr   s   0123456789+-.   r   iP   z(Invalid Elementary Object starting with z @z: )r   r   r(   r   r   r4   r:   r$   r5   r)   r   r   r   r   IndirectPatternmatchr'   r*   r   r   r!   )ru   rM   r~   r   r  r  stream_extracts          rE   r   r     s   
 ++a.C
KKA
d{**6377
d{{{1~B5=#44VS/RR*6?CC
d{++FCII
l--f55
d{&v??
d{v{{1~2|
d{**622
d{&!!&)B6388
{{2SYJ"  &2?*F*?!2263??,,V44
++-C
KKQ[[_N
KK&!

23'C5>BTU rF   c                   8   e Zd ZdZdeddfdZedee   fd       Z	edee   fd       Z
eded   fd	       Zedee   fd
       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zy)Fieldz
    A class representing a field dictionary.

    This class is accessed through
    :meth:`get_fields()<pypdf.PdfReader.get_fields>`
    rD   r<   Nc                    t         j                  |        t        j                         t	        j                         z   }|j
                  | _        |D ]  }	 ||   | t        |      <    t        | j                  d      t              rst        t        | t        d               j                         }t        |t              r|j                         }n|d}nt        d      t!        |      | t        d      <   y y # t        $ r Y w xY w)Nr   rj  zShould never happen)r   r  r   
attributesr   rL   r(   r   rO   r   rX  r   rQ  rh   decoderN   r,   )rB   rD   field_attributesattrdd_strs         rE   r  zField.__init__  s    !!$'%002+6689 	 #'"9"9$D)-dZ%& %
 dhhtn&9:($z$/?*@AJJLA!U#
 566%5e%<DD!" ;  s   C<<	DDc                 @    | j                  t        j                        S )z4Read-only property accessing the type of this field.)r   r   r_  r^   s    rE   
field_typezField.field_type       xx14455rF   c                 @    | j                  t        j                        S )z6Read-only property accessing the parent of this field.)r   r   Parentr^   s    rE   r!  zField.parent   s     xx18899rF   r:   c                 @    | j                  t        j                        S )z4Read-only property accessing the kids of this field.)r   r   Kidsr^   s    rE   kidsz
Field.kids  s     xx16677rF   c                 @    | j                  t        j                        S )z4Read-only property accessing the name of this field.)r   r   Tr^   s    rE   namez
Field.name
  s     xx13344rF   c                 @    | j                  t        j                        S )z>Read-only property accessing the alternate name of this field.)r   r   TUr^   s    rE   alternate_namezField.alternate_name  r  rF   c                 @    | j                  t        j                        S )z
        Read-only property accessing the mapping name of this field.

        This name is used by pypdf as a key in the dictionary returned by
        :meth:`get_fields()<pypdf.PdfReader.get_fields>`
        )r   r   TMr^   s    rE   mapping_namezField.mapping_name       xx14455rF   c                 @    | j                  t        j                        S )z
        Read-only property accessing the field flags, specifying various
        characteristics of the field (see Table 8.70 of the PDF 1.7 reference).
        )r   r   Ffr^   s    rE   flagszField.flags  s     xx14455rF   c                 @    | j                  t        j                        S )zs
        Read-only property accessing the value of this field.

        Format varies based on field type.
        )r   r   Vr^   s    rE   r   zField.value&  s     xx13344rF   c                 @    | j                  t        j                        S )z=Read-only property accessing the default value of this field.)r   r   DVr^   s    rE   default_valuezField.default_value/  r  rF   c                 @    | j                  t        j                        S )z
        Read-only property accessing the additional actions dictionary.

        This dictionary defines the field's behavior in response to trigger
        events. See Section 8.5.2 of the PDF 1.7 reference.
        )r   r   AAr^   s    rE   additional_actionszField.additional_actions4  r  rF   )r   r   r   r  r   r  r
  r	   r(   r  r!  r  rg   r  r  r  r   r  r   r   r  r  r   rF   rE   r  r    sW   =- =$ =. 6HZ0 6 6 :!12 : : 8h}- 8 8 5hsm 5 5 6 6 6 6hsm 6 6 6x} 6 6 5x} 5 5 6x} 6 6 6H-=$> 6 6rF   r  c                      e Zd ZU dZdZee   ed<   dee	e
f   deeeeef   deddfdZedd
       Z	 ddedede	e
f   ddfdZedee	   fd       Zedee   fd       Zedee	   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zeded	   fd       Zedee   fd       Z edee   fd       Z!y)Destinationa  
    A class representing a destination within a PDF file.

    See section 12.3.2 of the PDF 2.0 reference.

    Args:
        title: Title of this destination.
        page: Reference to the page of this destination. Should
            be an instance of :class:`IndirectObject<pypdf.generic.IndirectObject>`.
        fit: How the destination is displayed.

    Raises:
        PdfReadError: If destination type is invalid.

    Nnodetitlepagefitr<   c                    g | _         |j                  }|j                  }t        j	                  |        t        |      | t        d      <   || t        d      <   || t        d      <   |dk(  rt        |      dk  r|j                  t        d             t        |      dk  r|j                  t        d             t        |      dk  r|j                  t        d             |\  | t        t        j                        <   | t        t        j                        <   | t        d	      <   y t        |      d
k(  ry |t        j                  k(  rp|\  | t        t        j                        <   | t        t        j                        <   | t        t        j                         <   | t        t        j                        <   y |t        j"                  t        j$                  fv r 	 |\  | t        t        j                        <   y |t        j*                  t        j,                  fv r 	 |\  | t        t        j                        <   y |t        j.                  t        j0                  fv ry t3        d|      # t&        $ r' t)               | t        t        j                        <   Y y w xY w# t&        $ r' t)               | t        t        j                        <   Y y w xY w)N/Title/Pager   z/XYZr#   g        r   r6   /Zoomr   zUnknown Destination Type: )_filtered_childrenfit_typefit_argsr   r  r,   r(   r   rA   r*   TALEFTTOPTFFIT_RBOTTOMRIGHTFIT_HFIT_BHrN   r)   FIT_VFIT_BVFITFIT_Br!   )rB   r  r  r  typargss         rE   r  zDestination.__init__T  s5    .0ll||!!$'%5e%<Z!"$(Z !$'Z ! &=4y1}L-.4y1}L-.4y1}L-.
 	Z()Z'(Z()Y!^BHH_ Z()Z		*+Z)*Z'(RXXryy))>.2+j() RXXryy))?/3,j)* RVVRXX&&!;C7CDD  >/9|j()>
  ?0:j)*?s$   !I3 #J& 3-J#"J#&-KKr:   c                 z    t        | j                  d      | d   gdD cg c]  }|| v r| |    c}z         S c c}w )Nr  r   )/Left/Bottom/Right/Topr  )r:   r   )rB   rY   s     rE   
dest_arrayzDestination.dest_array  sW    \\'"DM2 IHA9 QH
 	
s   8
ru   rv   c                    |t        dd       |j                  d       t        d      }|j                  |       |j                  d       | j                  }|j                  |       t        d      }|j                  |       |j                  d       t        d      }|j                  |       |j                  d       |j                  d	       y )
Nrx   ry   r   z/Dr{   z/Sz/GoTor   r   )r   r|   r(   r}   r  )rB   ru   rv   r   r   value_ss         rE   r}   zDestination.write_to_stream  s     %&A7 	WF#Tf%F#TW%'UUrF   c                 $    | j                  d      S )z3Read-only property accessing the destination title.r  r   r^   s    rE   r  zDestination.title  s     xx!!rF   c                 $    | j                  d      S )zHRead-only property accessing the IndirectObject of the destination page.r  r  r^   s    rE   r  zDestination.page       xx  rF   c                 $    | j                  d      S )z2Read-only property accessing the destination type.r   r  r^   s    rE   r  zDestination.typ  r  rF   c                 &    | j                  dd      S )z-Read-only property accessing the zoom factor.r  Nr  r^   s    rE   zoomzDestination.zoom       xx&&rF   c                 &    | j                  dd      S )z<Read-only property accessing the left horizontal coordinate.r  Nr  r^   s    rE   leftzDestination.left  r  rF   c                 &    | j                  dd      S )z=Read-only property accessing the right horizontal coordinate.r  Nr  r^   s    rE   rightzDestination.right  s     xx$''rF   c                 &    | j                  dd      S )z9Read-only property accessing the top vertical coordinate.r  Nr  r^   s    rE   topzDestination.top  s     xx%%rF   c                 &    | j                  dd      S )z<Read-only property accessing the bottom vertical coordinate.r  Nr  r^   s    rE   bottomzDestination.bottom  s     xx	4((rF   c           
      t    | j                  dt        t        d      t        d      t        d      g            S )zHRead-only property accessing the color in (R, G, B) with values 0.0-1.0.z/Cr   )r   r:   r&   r^   s    rE   colorzDestination.color  s2     xx+{1~{1~{1~NO
 	
rF   c                 &    | j                  dd      S )z_
        Read-only property accessing the font type.

        1=italic, 2=bold, 3=both
        r  r   r  r^   s    rE   font_formatzDestination.font_format  s     xxa  rF   c                 &    | j                  dd      S )z
        Read-only property accessing the outline count.

        positive = expanded
        negative = collapsed
        absolute value = number of visible descendants at all levels
        r$  Nr  r^   s    rE   outline_countzDestination.outline_count  s     xx$''rF   )r<   r:   rU   )"r   r   r   r  r  r	   r   __annotations__r
   rg   rh   r*   r'   r)   r.   r  r
  r  r   r}   r  r  r  r   r  r&   r  r!  r#  r%  r'  r   r)  r+  r   rF   rE   r  r  ?  s	   $ 	 	( 3ES%Z 3E L.*>NNO3E 	3E
 
3Ej 
 
 MQ 27c58H2I	. "x} " " !h~. ! ! !Xc] ! ! 'hsm ' ' 'h{+ ' ' (x, ( ( &Xk* & & )- ) ) 
x. 
 
 !Xo6 ! ! (x} ( (rF   r  rU   )\
__author____author_email__loggingr   syscollections.abcr   r   ior   mathr   typingr   r   r	   r
   r   
_protocolsr   r   r   _utilsr   r   r   r   r   r   r   r   	constantsr   r   r   r   r_  r   r   r   r  r   r  errorsr   r    r!   r"   _baser$   r%   r&   r'   r(   r)   r*   r+   r,   r-   _fitr.   _image_inliner/   r0   r1   r2   r3   r4   r5   version_infor8   typing_extensions	getLoggerr   loggerr   r  re   r:   r   r   r  r8  rP   rI  rX  r{  rg   r   r   r  r  r   rF   rE   <module>r@     s  : 
/   	 
 .    V U	 	 	 
 * . * - b b     Iw&			8	$"**@Ac$s)Y cL_tCH~y _DW*! W*t+S +T +"m# m`	, 	$, $Nv8' v8x	 DH//	#	$/ 4d3ic3h?@/ 9c3-.	/d`6J `6Fm(* m(rF   