U
    –BÞbÖ+ ã                
   @   sf  d Z dZd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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mZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z* ddl(m+Z, ddl(m-Z. ddl(m/Z0 ddl(m1Z2 ddl3m4Z4m5Z5m6Z6m7Z7 e 8e9¡Z:dZ;dZ<e =d¡Z>G dd„ dƒZ?G dd„ de?ƒZ@G dd„ de?ƒZAG dd„ deBe?ƒZCG dd„ de?ƒZDG dd„ dejEe?ƒZFG d d!„ d!eGe?ƒZHeed" d#œd$d%„ZId_eedeJeeJ eeGeJf f ed" d&œd'd(„ZKd`eedeJeeJ eeGeJf f ed" d&œd)d*„ZLdaeedeJeeJ eeGeJf f ed" d&œd+d,„ZMG d-d.„ d.eNe?ƒZOG d/d0„ d0eJe?ƒZPG d1d2„ d2eJe?ƒZQG d3d4„ d4eRe?ƒZSG d5d6„ d6eSƒZTG d7d8„ d8eSƒZUG d9d:„ d:eUƒZVG d;d<„ d<eUƒZWG d=d>„ d>eVƒZXdbeeedeJeeJ eeGeJf f ee?eGeJeXf d?œd@dA„ZYG dBdC„ dCeCƒZZG dDdE„ dEeTƒZ[G dFdG„ dGe
ƒZ\G dHdI„ dIeTƒZ]G dJdK„ dKe]ƒZ^dceeJeNf edeJeeJ eeGeJf f eePeOf dLœdMdN„Z_ddeeJeNf edeJeeJ eeGeJf f eePeOf dLœdOdP„Z`eDeJeeeaeaeaf  ebebeTdQœdRdS„ZceJeNdTœdUdV„ZdeNeJdWœdXdY„ZeeJeeaeaeaf dZœd[d\„ZfG d]d^„ d^ƒZgdS )ezHImplementation of generic PDF objects (dictionary, number, string, ...).zMathieu Fenniakzbiziqe@mathieu.fenniak.neté    N)ÚIntFlag)ÚBytesIO)	ÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚTupleÚUnionÚcasté   )Ú_pdfdoc_encodingÚ_pdfdoc_encoding_revÚrev_encoding)ÚWHITESPACESÚ
StreamTypeÚb_Údeprecate_no_replacementÚdeprecate_with_replacementÚhex_strÚ	hexencodeÚlogger_warningÚread_non_whitespaceÚread_until_regexÚskip_over_commentÚstr_)ÚCheckboxRadioButtonAttributesÚFieldDictionaryAttributes)ÚFilterTypes)ÚStreamAttributes)ÚTypArguments)ÚTypFitArguments)ÚSTREAM_TRUNCATED_PREMATURELYÚPdfReadErrorÚPdfReadWarningÚPdfStreamErrors   /<[tf(n%s   +-s   [+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]c                   @   s|   e Zd ZU ejZed ed< edœdd„Z	edœdd„Z
ed  dœdd	„Zed  dœd
d„Zeedeef ddœdd„ZdS )Ú	PdfObject).zhashlib._HashÚ	hash_func©Úreturnc                 C   s   d|    ¡ S )Nz%s)Úencode©Úself© r.   ú2/tmp/pip-unpacked-wheel-weujb6sz/PyPDF2/generic.pyÚhash_value_data^   s    zPdfObject.hash_value_datac                 C   s"   d| j j|  |  ¡ ¡ ¡ f  ¡ S )Nz%s:%s)Ú	__class__Ú__name__r(   r0   Ú	hexdigestr+   r,   r.   r.   r/   Ú
hash_valuea   s    þÿÿzPdfObject.hash_valuec                 C   s   | S )zResolve indirect references.r.   r,   r.   r.   r/   Ú
get_objectj   s    zPdfObject.get_objectc                 C   s   t ddƒ |  ¡ S )NÚ	getObjectr5   )r   r5   r,   r.   r.   r/   r6   n   s    
zPdfObject.getObjectN©ÚstreamÚencryption_keyr*   c                 C   s   t ‚d S ©N)ÚNotImplementedError©r-   r8   r9   r.   r.   r/   Úwrite_to_streamr   s    zPdfObject.write_to_stream)r2   Ú
__module__Ú__qualname__ÚhashlibÚsha1r(   r   Ú__annotations__Úbytesr0   r4   r	   r5   r6   r   r   Ústrr=   r.   r.   r.   r/   r'   Z   s   
	 þr'   c                   @   sz   e Zd Zeedeef ddœdd„Zeed dœdd„ƒZ	eedeef ddœdd	„Z
ed
œdd„Zeed dœdd„ƒZdS )Ú
NullObjectNr7   c                 C   s   |  d¡ d S )Nó   null)Úwriter<   r.   r.   r/   r=   y   s    zNullObject.write_to_stream©r8   r*   c                 C   s    |   d¡}|dkrtdƒ‚tƒ S )Né   rF   zCould not read Null object)Úreadr$   rE   )r8   Znulltxtr.   r.   r/   Úread_from_stream~   s    
zNullObject.read_from_streamc                 C   s   t ddƒ |  ||¡ d S ©NÚwriteToStreamr=   ©r   r=   r<   r.   r.   r/   rM   …   s    
zNullObject.writeToStreamr)   c                 C   s   dS )NrE   r.   r,   r.   r.   r/   Ú__repr__‹   s    zNullObject.__repr__c                 C   s   t ddƒ t | ¡S ©NÚreadFromStreamrK   )r   rE   rK   ©r8   r.   r.   r/   rQ   Ž   s    
zNullObject.readFromStream)r2   r>   r?   r   r   rD   rC   r=   ÚstaticmethodrK   rM   rO   rQ   r.   r.   r.   r/   rE   x   s    þ þrE   c                   @   sš   e Zd Zeddœdd„Zeedœdd„Zedœd	d
„Z	e
edeef ddœdd„Ze
edeef ddœdd„Zee
d dœdd„ƒZee
d dœdd„ƒZdS )ÚBooleanObjectN©Úvaluer*   c                 C   s
   || _ d S r:   ©rV   ©r-   rV   r.   r.   r/   Ú__init__•   s    zBooleanObject.__init__)Ú_BooleanObject__or*   c                 C   s2   t |tƒr| j|jkS t |tƒr*| j|kS dS d S )NF)Ú
isinstancerT   rV   Úbool)r-   rZ   r.   r.   r/   Ú__eq__˜   s
    


zBooleanObject.__eq__r)   c                 C   s   | j r
dS dS )NÚTrueÚFalserW   r,   r.   r.   r/   rO       s    zBooleanObject.__repr__r7   c                 C   s    | j r| d¡ n
| d¡ d S )Nó   trues   false)rV   rG   r<   r.   r.   r/   r=   £   s    zBooleanObject.write_to_streamc                 C   s   t ddƒ |  ||¡ d S rL   rN   r<   r.   r.   r/   rM   «   s    
zBooleanObject.writeToStreamrH   c                 C   s@   |   d¡}|dkrtdƒS |dkr4|   d¡ tdƒS tdƒ‚d S )NrI   r`   Ts   falsr   FzCould not read Boolean object)rJ   rT   r$   )r8   Úwordr.   r.   r/   rK   ±   s    

zBooleanObject.read_from_streamc                 C   s   t ddƒ t | ¡S rP   )r   rT   rK   rR   r.   r.   r/   rQ   ¼   s    
zBooleanObject.readFromStream)r2   r>   r?   r   rY   Úobjectr\   r]   rD   rO   r   r   rC   r=   rM   rS   rK   rQ   r.   r.   r.   r/   rT   ”   s    þ	 þ
rT   c                   @   sš   e Zd Zedœdd„Zeedeef ddœdd„Z	eedeef ddœdd	„Z
edeeedeee eeef f d d
œdd„ƒZeeed dœdd„ƒZdS )ÚArrayObjectr)   c                 C   s   t | ƒS )zS
        Emulate DictionaryObject.items for a list
        (index, object)
        )Ú	enumerater,   r.   r.   r/   ÚitemsÃ   s    zArrayObject.itemsNr7   c                 C   s8   |  d¡ | D ]}|  d¡ | ||¡ q|  d¡ d S )Nó   [ó    s    ])rG   r=   )r-   r8   r9   Údatar.   r.   r/   r=   Ê   s
    

zArrayObject.write_to_streamc                 C   s   t ddƒ |  ||¡ d S rL   rN   r<   r.   r.   r/   rM   Ó   s    
zArrayObject.writeToStream©r8   ÚpdfÚforced_encodingr*   c                 C   s‚   t ƒ }|  d¡}|dkr tdƒ‚|  d¡}| ¡ r>|  d¡}q*|  dd¡ |  d¡}|dkr^q~|  dd¡ | t| ||ƒ¡ q |S )Nr   rf   zCould not read arrayéÿÿÿÿó   ])rc   rJ   r$   ÚisspaceÚseekÚappendÚread_object)r8   rj   rk   ÚarrÚtmpÚtokZ	peekaheadr.   r.   r/   rK   Ù   s    


zArrayObject.read_from_stream©r8   rj   r*   c                 C   s   t ddƒ t | |¡S rP   )r   rc   rK   ©r8   rj   r.   r.   r/   rQ   ò   s    
zArrayObject.readFromStream)N)r2   r>   r?   r   re   r   r   rD   rC   r=   rM   rS   r   r   r   ÚintrK   rQ   r.   r.   r.   r/   rc   Â   s,    þ
 þ ýü þrc   c                   @   sÄ   e Zd Zeeeddœdd„Zee dœdd„Ze	dœdd	„Z
eed
œdd„Zeed
œdd„Zeede	ef ddœdd„Zeede	ef ddœdd„Zeeed dœdd„ƒZeeed dœdd„ƒZdS )ÚIndirectObjectN)ÚidnumÚ
generationrj   r*   c                 C   s   || _ || _|| _d S r:   )ry   rz   rj   )r-   ry   rz   rj   r.   r.   r/   rY   û   s    zIndirectObject.__init__r)   c                 C   s    | j  | ¡}|d krd S | ¡ S r:   )rj   r5   )r-   Úobjr.   r.   r/   r5      s    zIndirectObject.get_objectc                 C   s"   d| j ›d| j›dt| jƒ› d�S )NzIndirectObject(z, ú))ry   rz   Úidrj   r,   r.   r.   r/   rO     s    zIndirectObject.__repr__)Úotherr*   c                 C   s6   |d k	o4t |tƒo4| j|jko4| j|jko4| j|jkS r:   )r[   rx   ry   rz   rj   ©r-   r~   r.   r.   r/   r]   	  s    ÿ
þ
ý
ûzIndirectObject.__eq__c                 C   s   |   |¡ S r:   )r]   r   r.   r.   r/   Ú__ne__  s    zIndirectObject.__ne__r7   c                 C   s"   |  t| j› d| j› d�ƒ¡ d S )Nú z R)rG   r   ry   rz   r<   r.   r.   r/   r=     s    zIndirectObject.write_to_streamc                 C   s   t ddƒ |  ||¡ d S rL   rN   r<   r.   r.   r/   rM     s    
zIndirectObject.writeToStreamru   c                 C   sœ   d}|   d¡}|sttƒ‚| ¡ r$q.||7 }qd}|   d¡}|sHttƒ‚| ¡ rX|sbq2qb||7 }q2t| ƒ}|dkrˆtdt|  ¡ ƒ› �ƒ‚tt	|ƒt	|ƒ|ƒS )Nó    r   ó   Rz0Error reading indirect object reference at byte )
rJ   r&   r#   rn   r   r$   r   Útellrx   rw   )r8   rj   ry   rt   rz   Úrr.   r.   r/   rK      s,    



ÿzIndirectObject.read_from_streamc                 C   s   t ddƒ t | |¡S rP   )r   rx   rK   rv   r.   r.   r/   rQ   ;  s    
zIndirectObject.readFromStream)r2   r>   r?   rw   r   rY   r	   r'   r5   rD   rO   r\   r]   r€   r   r   rC   r=   rM   rS   rK   rQ   r.   r.   r.   r/   rx   ú   s(   	 þ þ þrx   c                   @   s€   e Zd Zdeeef ee d dœdd„Zedœdd„Ze	dœd	d
„Z
eedeef ddœdd„Zeedeef ddœdd„ZdS )ÚFloatObjectÚ0N)rV   Úcontextr*   c                 C   s‚   zt j | t|ƒ|¡W S  tk
r|   zt j | t|ƒ¡W  Y S  t jk
rv   td|› �tƒ t j | d¡ Y  Y S X Y nX d S )NzInvalid FloatObject r‡   )	ÚdecimalÚDecimalÚ__new__r   Ú	ExceptionrD   ÚInvalidOperationr   r2   )ÚclsrV   rˆ   r.   r.   r/   r‹   D  s    zFloatObject.__new__r)   c                 C   sN   | |   ¡ kr t|  t d¡¡ƒS | d›}|rF|d dkrF|d d… }q(|S d S )Nr   z.5frl   r‡   )Úto_integralrD   Úquantizer‰   rŠ   )r-   Úor.   r.   r/   rO   R  s    zFloatObject.__repr__c                 C   s   t t| ƒ d¡ƒS ©NÚutf8)ÚfloatÚreprr+   r,   r.   r.   r/   Ú
as_numeric]  s    zFloatObject.as_numericr7   c                 C   s   |  t| ƒ d¡¡ d S r’   ©rG   r•   r+   r<   r.   r.   r/   r=   `  s    zFloatObject.write_to_streamc                 C   s   t ddƒ |  ||¡ d S rL   rN   r<   r.   r.   r/   rM   e  s    
zFloatObject.writeToStream)r‡   N)r2   r>   r?   r   rD   r   r	   r‹   rO   r”   r–   r   rC   r=   rM   r.   r.   r.   r/   r†   C  s"      ÿ
 þ þ þr†   c                   @   s¤   e Zd Ze d¡Zed dœdd„Zedœdd„Z	e
edeef dd	œd
d„Ze
edeef dd	œdd„Zee
ed ef dœdd„ƒZee
ed ef dœdd„ƒZdS )ÚNumberObjects	   [^+-.0-9]rU   c                 C   s<   t |ƒ}zt  | |¡W S  tk
r6   t  | d¡ Y S X d S ©Nr   )rw   r‹   ÚOverflowError)rŽ   rV   Úvalr.   r.   r/   r‹   o  s
    zNumberObject.__new__r)   c                 C   s   t t| ƒ d¡ƒS r’   )rw   r•   r+   r,   r.   r.   r/   r–   v  s    zNumberObject.as_numericNr7   c                 C   s   |  t| ƒ d¡¡ d S r’   r—   r<   r.   r.   r/   r=   y  s    zNumberObject.write_to_streamc                 C   s   t ddƒ |  ||¡ d S rL   rN   r<   r.   r.   r/   rM   ~  s    
zNumberObject.writeToStreamrH   c                 C   s*   t | tjƒ}| d¡dkr"t|ƒS t|ƒS )Nó   .rl   )r   r˜   ÚNumberPatternÚfindr†   )r8   Únumr.   r.   r/   rK   „  s    zNumberObject.read_from_streamc                 C   s   t ddƒ t | ¡S rP   )r   r˜   rK   rR   r.   r.   r/   rQ   ‹  s    
zNumberObject.readFromStream)r2   r>   r?   ÚreÚcompiler�   r   r‹   rw   r–   r   r   rD   rC   r=   rM   rS   r†   rK   rQ   r.   r.   r.   r/   r˜   l  s"   
 þ þ
þr˜   )ÚTextStringObjectÚByteStringObjectrH   c                 C   s   t dddƒ t| ƒS )NÚreadHexStringFromStreamÚread_hex_string_from_streamú4.0.0)r   r¥   rR   r.   r.   r/   r¤   “  s      ÿr¤   )r8   rk   r*   c                 C   s    |   d¡ d}d}t| ƒ}|s&ttƒ‚|dkr0q^||7 }t|ƒdkr|tt|dd�ƒ7 }d}qt|ƒdkrr|d7 }t|ƒdkr’|tt|dd�ƒ7 }tt|ƒ|ƒS )	Nr   Ú r‚   ó   >é   é   ©Úbaseó   0)	rJ   r   r&   r#   ÚlenÚchrrw   Úcreate_string_objectr   )r8   rk   ÚtxtÚxrt   r.   r.   r/   r¥   œ  s"    
r¥   c                 C   s   t dddƒ t| |ƒS )NÚreadStringFromStreamÚread_string_from_streamr¦   )r   r´   )r8   rk   r.   r.   r/   r³   ´  s      ÿr³   c           	      C   sl  |   d¡}d}d}|   d¡}|s(ttƒ‚|dkr<|d7 }�n|dkrZ|d8 }|dkrX�qbnþ|dk�rX|   d¡}ddd	d
dddddddddddddddddœ}z|| }W n® tk
�rV   | ¡ �rtdƒD ]$}|   d¡}| ¡ rì||7 }qÌ qòqÌttt|dd�ƒƒ}nJ|dk�r8|   d¡}|dk�r2|  	dd¡ d}nd| 
d¡› �}t|tƒ Y nX ||7 }qt||ƒS ) Nr   r‚   ó   (ó   )r   ó   \ó   
ó   ó   	ó   ó   s   \có   /rg   ó   %ó   <r¨   rf   rm   ó   #ó   _ó   &ó   $)ó   nó   ró   tó   bó   fó   crµ   r¶   r½   r·   rg   r¾   r¿   r¨   rf   rm   rÀ   rÁ   rÂ   rÃ   r©   é   r«   s   
rl   zUnexpected escaped string: r“   )rJ   r&   r#   ÚKeyErrorÚisdigitÚranger   r¯   rw   ro   Údecoder   r2   r°   )	r8   rk   rt   Úparensr±   Zescape_dictÚ_ZntokÚmsgr.   r.   r/   r´   ¾  sl    



ì






r´   c                   @   sZ   e Zd ZdZeedœdd„ƒZeede	ef ddœdd„Z
eede	ef ddœd	d
„ZdS )r£   a=  
    Represents a string object where the text encoding could not be determined.
    This occurs quite often, as the PDF spec doesn't provide an alternate way to
    represent strings -- for example, the encryption data stored in files (like
    /O) is clearly not text, but is still stored in a "String" object.
    r)   c                 C   s   | S )z7For compatibility with TextStringObject.original_bytes.r.   r,   r.   r.   r/   Úoriginal_bytes  s    zByteStringObject.original_bytesNr7   c                 C   sD   | }|rddl m} |||ƒ}| d¡ | t|ƒ¡ | d¡ d S )Nr   ©ÚRC4_encryptr¿   r¨   )Ú	_securityrÔ   rG   r   )r-   r8   r9   ÚbytearrrÔ   r.   r.   r/   r=     s    

z ByteStringObject.write_to_streamc                 C   s   t ddƒ |  ||¡ d S rL   rN   r<   r.   r.   r/   rM   !  s    
zByteStringObject.writeToStream)r2   r>   r?   Ú__doc__ÚpropertyrC   rÒ   r   r   rD   r=   rM   r.   r.   r.   r/   r£     s    þ þr£   c                   @   sp   e Zd ZdZdZdZeedœdd„ƒZedœdd„Z	e
edeef dd	œd
d„Ze
edeef dd	œdd„ZdS )r¢   zõ
    Represents a string object that has been decoded into a real unicode string.
    If read from a PDF document, this string appeared to match the
    PDFDocEncoding, or contained a UTF-16BE BOM mark to cause UTF-16 decoding to
    occur.
    Fr)   c                 C   s   |   ¡ S )a-  
        It is occasionally possible that a text string object gets created where
        a byte string object was expected due to the autodetection mechanism --
        if that occurs, this "original_bytes" property can be used to
        back-calculate what the original encoded bytes were.
        )Úget_original_bytesr,   r.   r.   r/   rÒ   3  s    zTextStringObject.original_bytesc                 C   s0   | j rtj|  d¡ S | jr$t| ƒS tdƒ‚d S )Núutf-16bez#no information about original bytes)Úautodetect_utf16ÚcodecsÚBOM_UTF16_BEr+   Úautodetect_pdfdocencodingÚencode_pdfdocencodingrŒ   r,   r.   r.   r/   rÙ   =  s
    z#TextStringObject.get_original_bytesNr7   c                 C   s¾   zt | ƒ}W n$ tk
r0   tj|  d¡ }Y nX |rbddlm} |||ƒ}t|ƒ}| |d ¡ nX| 	d¡ |D ]>}t
|ƒ ¡ sœ|dkrœ| 	td| ƒ¡ qp| 	tt
|ƒƒ¡ qp| 	d¡ d S )NrÚ   r   rÓ   rµ   rg   z\%03or¶   )rß   ÚUnicodeEncodeErrorrÜ   rÝ   r+   rÕ   rÔ   r£   r=   rG   r¯   Úisalnumr   )r-   r8   r9   rÖ   rÔ   r{   Úcr.   r.   r/   r=   J  s    

z TextStringObject.write_to_streamc                 C   s   t ddƒ |  ||¡ d S rL   rN   r<   r.   r.   r/   rM   g  s    
zTextStringObject.writeToStream)r2   r>   r?   r×   rÞ   rÛ   rØ   rC   rÒ   rÙ   r   r   rD   r=   rM   r.   r.   r.   r/   r¢   (  s   	 þ þr¢   c                   @   s~   e Zd Ze d¡ZdZeede	e
f ddœdd„Zeede	e
f ddœdd„Zeeed d	œd
d„ƒZeeed d	œdd„ƒZdS )Ú
NameObjects   \s+|[\(\)<>\[\]{}/%]r½   Nr7   c                 C   s   |  t| ƒ¡ d S r:   )rG   r   r<   r.   r.   r/   r=   r  s    zNameObject.write_to_streamc                 C   s   t ddƒ |  ||¡ d S rL   rN   r<   r.   r.   r/   rM   w  s    
zNameObject.writeToStreamru   c              
   C   sÂ   |   d¡}|tjkrtdƒ‚|t| tjdd�7 }z<z| d¡}W n" ttfk
rb   | d¡}Y nX t|ƒW S  ttfk
r¼ } z.|j	s¢t
dtƒ t|ƒ W Y ¢S tdƒ|‚W 5 d }~X Y nX d S )Nr   zname read errorT)Z
ignore_eofzutf-8Úgbkz Illegal character in Name Object)rJ   rã   Úsurfixr$   r   Údelimiter_patternrÎ   rà   ÚUnicodeDecodeErrorÚstrictr   r2   )r8   rj   ÚnameÚretÚer.   r.   r/   rK   }  s    



zNameObject.read_from_streamc                 C   s   t ddƒ t | |¡S rP   )r   rã   rK   rv   r.   r.   r/   rQ   ’  s    
zNameObject.readFromStream)r2   r>   r?   r    r¡   ræ   rå   r   r   rD   rC   r=   rM   rS   r   rK   rQ   r.   r.   r.   r/   rã   n  s"   
 þ þ þrã   c                   @   s  e Zd Zeedœdd„Zeeedœdd„Zdeee edœdd	„Zeedœd
d„Z	e
ee dœdd„ƒZee dœdd„Ze
ee dœdd„ƒZeedeef ddœdd„Zeedeef ddœdd„Zedeeedeee eeef f d dœdd„ƒZeeed dœdd„ƒZdS ) ÚDictionaryObject)Úkeyr*   c                 C   s   t  | |¡S r:   )ÚdictÚ__getitem__©r-   rí   r.   r.   r/   Úraw_get›  s    zDictionaryObject.raw_get)rí   rV   r*   c                 C   s2   t |tƒstdƒ‚t |tƒs$tdƒ‚t | ||¡S ©Nzkey must be PdfObjectzvalue must be PdfObject)r[   r'   Ú
ValueErrorrî   Ú__setitem__©r-   rí   rV   r.   r.   r/   rô   ž  s
    

zDictionaryObject.__setitem__Nc                 C   s2   t |tƒstdƒ‚t |tƒs$tdƒ‚t | ||¡S rò   )r[   r'   ró   rî   Ú
setdefaultrõ   r.   r.   r/   rö   ¥  s
    

zDictionaryObject.setdefaultc                 C   s   t  | |¡ ¡ S r:   )rî   rï   r5   rð   r.   r.   r/   rï   ¬  s    zDictionaryObject.__getitem__r)   c                 C   sN   ddl m} |  dd¡}|dkr$dS | ¡ }t||ƒsJ||ƒ}|| tdƒ< |S )a   
        Retrieve XMP (Extensible Metadata Platform) data relevant to the
        this object, if available.

        Stability: Added in v1.12, will exist for all future v1.x releases.
        @return Returns a {@link #xmp.XmpInformation XmlInformation} 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)Úxmpr÷   Úgetr5   r[   rã   )r-   r÷   Úmetadatar.   r.   r/   Úxmp_metadata¯  s    
zDictionaryObject.xmp_metadatac                 C   s   t ddƒ | jS )úW
        .. deprecated:: 1.28.3

            Use :meth:`xmp_metadata` instead.
        ÚgetXmpMetadatarû   ©r   rû   r,   r.   r.   r/   rý   Æ  s    
zDictionaryObject.getXmpMetadatac                 C   s   t ddƒ | jS )rü   ÚxmpMetadatarû   rþ   r,   r.   r.   r/   rÿ   Ñ  s    
zDictionaryObject.xmpMetadatar7   c                 C   sZ   |  d¡ t|  ¡ ƒD ]4\}}| ||¡ |  d¡ | ||¡ |  d¡ q|  d¡ d S )Nó   <<
rg   r¸   ó   >>)rG   Úlistre   r=   ©r-   r8   r9   rí   rV   r.   r.   r/   r=   Û  s    

z DictionaryObject.write_to_streamc                 C   s   t ddƒ |  ||¡ d S rL   rN   r<   r.   r.   r/   rM   æ  s    
zDictionaryObject.writeToStreamri   c                    s  t t tt  tt dœ‡ fdd„‰ tttdœ‡ fdd„}|  d¡}|dkr^td	t|  ¡ ƒ› d
�ƒ‚i }t	| ƒ}|dkrvqbn|dkr”|  
dd¡ t| ƒ qb|s ttƒ‚|dkr¶|  d¡ �qD|  
dd¡ t| |ƒ}t	| ƒ}|  
dd¡ t| ||ƒ}| |¡�s|||< qbdt|  ¡ ƒ› d|› �}	|d k	�r6|j�r6t|	ƒ‚qbt |	t¡ qb|  ¡ }
t	| ƒ}|dk�râ|  d¡dk�râ|  d¡}|dk�r�|  d¡}�qx|dk�r¢tdƒ‚|dk�rÈ|  d¡dk�rÈ|  
dd¡ tj|k�rÜtdƒ‚|tj }t|tƒ�r|  ¡ }| |¡}|  
|d¡ |  ¡ }|  |¡|d< t	| ƒ}|  d¡}|| dk�rî|  ¡ }
|  
dd¡ |  d ¡}|dk�r„|d d d… |d< n\|j�s°|  
|d¡ || |ƒ|d< |  ¡ }
n0|  
|
d¡ td!t|  ¡ ƒ› d"|›d#|›d$�ƒ‚n|  
|
d¡ d|k�rt |¡S tƒ }| |¡ |S d S )%N)ÚpÚp1Úrem_gensrj   r*   c                    sb   |j |d  }|D ]$}||| kr| || k r|| }qt|ƒdkrH|S ˆ | ||dd … |ƒS d S )Nr   r   )Úxrefr®   )r  r  r  rj   Úlr‘   ©Úget_next_obj_posr.   r/   r
  ò  s    
z;DictionaryObject.read_from_stream.<locals>.get_next_obj_posru   c                    sz   ˆ |   ¡ dt|jƒ|ƒd }|   ¡ }|  ||   ¡  ¡}| d¡}|dk rXtd|› d�ƒ‚|  || d ¡ |d |d … S )Nl        r   ó	   endstreamr   z6Unable to find 'endstream' marker for obj starting at Ú.é	   )r„   r  r  rJ   rž   r$   ro   )r8   rj   ZeonÚcurrÚrwr  r	  r.   r/   Úread_unsized_from_steamþ  s    

ÿzBDictionaryObject.read_from_stream.<locals>.read_unsized_from_steamr©   ó   <<zDictionary read error at byte z: stream must begin with '<<'ó    r¾   rl   r   r¨   z+Multiple definitions in dictionary at byte z	 for key ó   sé   s   treamrg   )r¸   r¹   z)Stream data must be followed by a newliner¹   r¸   zStream length not definedr   Ú__streamdata__rÊ   r  iöÿÿÿr  z7Unable to find 'endstream' marker after stream at byte z (nd='z', end='z').)rw   r   r   r   rC   rJ   r$   r   r„   r   ro   r   r&   r#   rq   rù   rè   ÚwarningsÚwarnr%   ÚSAÚLENGTHr[   rx   r5   ÚStreamObjectÚinitialize_from_dictionaryrì   Úupdate)r8   rj   rk   r  rs   rh   rt   rí   rV   rÑ   ÚposÚsÚeolÚlengthÚtZpstartrë   ZndstreamÚendÚretvalr.   r	  r/   rK   ì  sž       þ
ÿ


ÿ










ÿ


z!DictionaryObject.read_from_streamru   c                 C   s   t ddƒ t | |¡S rP   )r   rì   rK   rv   r.   r.   r/   rQ   l  s    
zDictionaryObject.readFromStream)N)N)r2   r>   r?   r   rñ   rô   r	   rö   r'   rï   rØ   rû   rý   rÿ   r   r   rD   rC   r=   rM   rS   r   r   rw   rK   rQ   r.   r.   r.   r/   rì   š  s>   þ
 þ þ ýü þrì   c                   @   s¶   e Zd Zddœdd„Zedœdd„Zedœdd„Zedœd	d
„Ze	e dœdd„Z
eeddœdd„Zeeddœdd„Zeddœdd„Zeddœdd„Zddœdd„Zddœdd„ZdS )Ú
TreeObjectNr)   c                 C   s   t  | ¡ d S r:   )rì   rY   r,   r.   r.   r/   rY   u  s    zTreeObject.__init__c                 C   s   t dddƒ |  ¡ S )NÚhasChildrenÚhas_childrenr¦   )r   r&  r,   r.   r.   r/   r%  x  s    zTreeObject.hasChildrenc                 C   s   d| kS )Nú/Firstr.   r,   r.   r.   r/   r&  |  s    zTreeObject.has_childrenc                 C   s   |   ¡ S r:   )Úchildrenr,   r.   r.   r/   Ú__iter__  s    zTreeObject.__iter__c                 c   s8   |   ¡ sd S | d }|V  || d kr*d S |d }qd S )Nr'  ú/Lastú/Next)r&  ©r-   Úchildr.   r.   r/   r(  ‚  s    zTreeObject.children)r-  rj   r*   c                 C   s   t ddƒ |  ||¡ d S )NÚaddChildÚ	add_child)r   r/  )r-   r-  rj   r.   r.   r/   r.  �  s    
zTreeObject.addChildc                 C   sÜ   |  ¡ }| |¡}t|tƒs t‚d| krJ|| tdƒ< tdƒ| tdƒ< d }ntt| d ƒ}|| tdƒ< t| tdƒ d ƒ| tdƒ< |r´| |¡}t|tƒsœt‚||tdƒ< ||tdƒ< | | ¡}t|tƒsÌt‚||tdƒ< d S )	Nr'  r   ú/Countr*  r   ú/Prevr+  ú/Parent)	r5   Zget_referencer[   rx   ÚAssertionErrorrã   r˜   r   rì   )r-   r-  rj   Ú	child_objÚprevÚprev_refZ
parent_refr.   r.   r/   r/  ‘  s*    
 ÿ

zTreeObject.add_child)r-  r*   c                 C   s   t ddƒ |  |¡ d S )NÚremoveChildÚremove_child)r   r8  r,  r.   r.   r/   r7  ­  s    
zTreeObject.removeChildc                 C   s(  |  ¡ }tdƒ|krtdƒ‚n|tdƒ | kr6tdƒ‚d}d }d }| tdƒ }|  ¡ }| tdƒ }|  ¡ }	|d k	�rÜ||k�r¦|d k�rtdƒ|krÔ|tdƒ }
|
  ¡ }|tdƒ= |
| tdƒ< | td	ƒ  d
8  < n@| td	ƒ d
ksèt‚| td	ƒ= | tdƒ= tdƒ| k�rž| tdƒ= nˆtdƒ|k�rf|tdƒ }
|
  ¡ }||tdƒ< |
|tdƒ< | td	ƒ  d
8  < n8||	k�stt‚|tdƒ= || tdƒ< | td	ƒ  d
8  < d}�qÜ|}|}tdƒ|k�rÒ|tdƒ }|  ¡ }qjd }d }qj|�sêtdƒ‚|tdƒ= tdƒ|k�r|tdƒ= tdƒ|k�r$|tdƒ= d S )Nr2  z/Removed child does not appear to be a tree itemz*Removed child is not a member of this treeFr'  r*  r+  r1  r0  r   Tz"Removal couldn't find item in tree)r5   rã   ró   r3  )r-   r-  r4  Úfoundr6  r5  Zcur_refÚcurZlast_refÚlastZnext_refZnext_objr.   r.   r/   r8  ±  sh    










zTreeObject.remove_childc                 C   s   t dddƒ |  ¡  d S )NÚ	emptyTreeÚ
empty_treer¦   )r   r=  r,   r.   r.   r/   r<  õ  s    zTreeObject.emptyTreec                 C   sŽ   | D ]B}|  ¡ }|tdƒ= tdƒ|kr0|tdƒ= tdƒ|kr|tdƒ= qtdƒ| kr^| tdƒ= tdƒ| krt| tdƒ= tdƒ| krŠ| tdƒ= d S )Nr2  r+  r1  r0  r'  r*  )r5   rã   )r-   r-  r4  r.   r.   r/   r=  ù  s    



zTreeObject.empty_tree)r2   r>   r?   rY   r\   r%  r&  r   r)  r	   r(  r.  r/  r7  r8  r<  r=  r.   r.   r.   r/   r$  t  s   Dr$  c                       sü   e Zd Zddœdd„Zedœ‡ fdd„Zeed dœdd	„ƒZej	ddd
œdd	„ƒZee
dœdd„ƒZej	e
dd
œdd„ƒZeedeef ddœdd„Zeeee
f ed dœdd„ƒZeeee
f ed dœdd„ƒZddœdd„Zddœdd„Z‡  ZS )r  Nr)   c                 C   s   d | _ d | _d S r:   )Ú_StreamObject__dataÚdecoded_selfr,   r.   r.   r/   rY     s    zStreamObject.__init__c                    s   t ƒ  ¡ }|t| jƒ7 }|S r:   )Úsuperr0   r   Ú_data©r-   rh   ©r1   r.   r/   r0     s    
zStreamObject.hash_value_dataÚDecodedStreamObjectc                 C   s   t ddƒ | jS ©NÚdecodedSelfr?  ©r   r?  r,   r.   r.   r/   rF    s    
zStreamObject.decodedSelfrU   c                 C   s   t ddƒ || _d S rE  rG  rX   r.   r.   r/   rF    s    
c                 C   s   | j S r:   ©r>  r,   r.   r.   r/   rA    s    zStreamObject._datac                 C   s
   || _ d S r:   rH  rX   r.   r.   r/   rA  "  s    r7   c                 C   sp   t t| jƒƒ| ttjƒ< t | ||¡ | tj= | d¡ | j}|rXddl	m
} |||ƒ}| |¡ | d¡ d S )Ns   
stream
r   rÓ   s
   
endstream)r˜   r®   rA  rã   r  r  rì   r=   rG   rÕ   rÔ   )r-   r8   r9   rh   rÔ   r.   r.   r/   r=   &  s    


zStreamObject.write_to_stream)ÚEncodedStreamObjectrD  ©rh   r*   c                 C   s
   t  | ¡S r:   )r  r  )rh   r.   r.   r/   ÚinitializeFromDictionary5  s    z%StreamObject.initializeFromDictionaryc                 C   s>   t j| krtƒ }ntƒ }| d |_| d= | t j= | | ¡ |S )Nr  )r  ÚFILTERrI  rD  rA  r  r  )rh   r#  r.   r.   r/   r  ;  s    


z'StreamObject.initialize_from_dictionaryrI  c                 C   s   t ddƒ |  ¡ S )NÚflateEncodeÚflate_encode)r   rN  r,   r.   r.   r/   rM  J  s    
zStreamObject.flateEncodec                 C   s�   ddl m} tj| krb| tj }t|tƒr>| dttj	ƒ¡ qjtƒ }| 
tdƒ¡ | 
|¡ |}ntdƒ}tƒ }||ttjƒ< | | j¡|_|S )Nr   )ÚFlateDecoder   z/FlateDecode)ÚfiltersrO  r  rL  r[   rc   Úinsertrã   ÚFTZFLATE_DECODErp   rI  r+   rA  )r-   rO  ÚfZnewfr#  r.   r.   r/   rN  N  s    



zStreamObject.flate_encode)r2   r>   r?   rY   rC   r0   rØ   r	   rF  Úsetterr   rA  r   r   rD   r=   rS   r   rK  r  rM  rN  Ú__classcell__r.   r.   rC  r/   r  
  s0    þ
þ
þr  c                   @   sH   e Zd Zedœdd„Zeedœdd„Zedœdd„Zed	dœd
d„Zd	S )rD  r)   c                 C   s   | j S r:   ©rA  r,   r.   r.   r/   Úget_datac  s    zDecodedStreamObject.get_datarJ  c                 C   s
   || _ d S r:   rV  rB  r.   r.   r/   Úset_dataf  s    zDecodedStreamObject.set_datac                 C   s   t ddƒ | jS ©NÚgetDatarW  )r   rA  r,   r.   r.   r/   rZ  i  s    
zDecodedStreamObject.getDataNc                 C   s   t ddƒ |  |¡ d S ©NÚsetDatarX  ©r   rX  rB  r.   r.   r/   r\  m  s    
zDecodedStreamObject.setData)r2   r>   r?   r   rW  rX  rZ  r\  r.   r.   r.   r/   rD  b  s   rD  c                   @   s–   e Zd Zddœdd„Zeed dœdd„ƒZejeddœd	d„ƒZe	de
ef dœd
d„Ze	de
ef dœdd„Zeddœdd„Zeddœdd„ZdS )rI  Nr)   c                 C   s
   d | _ d S r:   )r?  r,   r.   r.   r/   rY   s  s    zEncodedStreamObject.__init__rD  c                 C   s   t ddƒ | jS rE  rG  r,   r.   r.   r/   rF  v  s    
zEncodedStreamObject.decodedSelfrU   c                 C   s   t ddƒ || _d S rE  rG  rX   r.   r.   r/   rF  {  s    
c                 C   sr   ddl m} | jd k	r | j ¡ S tƒ }|| ƒ|_t|  ¡ ƒD ]$\}}|tj	tj
tjfkr<|||< q<|| _|jS d S )Nr   )Údecode_stream_data)rP  r^  r?  rW  rD  rA  r  re   r  r  rL  ZDECODE_PARMS)r-   r^  Údecodedrí   rV   r.   r.   r/   rW  €  s    



zEncodedStreamObject.get_datac                 C   s   t ddƒ |  ¡ S rY  )r   rW  r,   r.   r.   r/   rZ  ‘  s    
zEncodedStreamObject.getDatarJ  c                 C   s   t dƒ‚d S )Nz7Creating EncodedStreamObject is not currently supported)r$   rB  r.   r.   r/   rX  •  s    zEncodedStreamObject.set_datac                 C   s   t ddƒ |  |¡S r[  r]  rB  r.   r.   r/   r\  ˜  s    
zEncodedStreamObject.setData)r2   r>   r?   rY   rØ   r	   rF  rT  rD  r   rD   rC   rW  rZ  r   rX  r\  r.   r.   r.   r/   rI  r  s   rI  c                
   @   s’   e Zd Zdeeedeee eeef f ddœdd„Z	e
ddœdd„Ze
eeef dœdd	„Zeed
œdd„ƒZejeeef ddœdd„ƒZdS )ÚContentStreamNri   c           	      C   s‚   || _ g | _| ¡ }t|tƒrJd}|D ]}|t| ¡  ¡ ƒ7 }q&t|ƒ}n$| ¡ }|d k	s^t‚t|ƒ}t|ƒ}|| _	|  
|¡ d S )Nr‚   )rj   Ú
operationsr5   r[   rc   r   rW  r   r3  rk   Ú$_ContentStream__parse_content_stream)	r-   r8   rj   rk   rh   r  Zstream_bytesZstream_dataZstream_data_bytesr.   r.   r/   rY   ž  s    

zContentStream.__init__rH   c                 C   sÒ   |  dd¡ g }t|ƒ}|dksÎ|dkr*qÎ|  dd¡ | ¡ sF|dkršt|tjdƒ}|dkr„|g ksht‚|  |¡}| j 	|df¡ qÌ| j 	||f¡ g }q|d	kr¸|d
krÌ| 
d¡}q¢q| 	t|d | jƒ¡ qd S )Nr   r‚   rl   r   )ó   'ó   "Tó   BIó   INLINE IMAGEr¾   ©r¹   r¸   )ro   r   Úisalphar   rã   ræ   r3  Ú_read_inline_imagera  rp   rJ   rq   rk   )r-   r8   ÚoperandsÚpeekÚoperatorÚiir.   r.   r/   Z__parse_content_stream»  s$    
z$ContentStream.__parse_content_streamc                 C   s�  t ƒ }t|ƒ}| dd¡ |dkr$qZt|| jƒ}t|ƒ}| dd¡ t|| jƒ}|||< q| d¡}|d d… dksxt‚tƒ }| d¡}|s”tdƒ‚| 	d	¡}	|	dkr²| 
|¡ q~| 
|d
|	… ¡ | |	t|ƒ d¡ | d¡}| d¡}
|
dk�rj| d¡}||
 }d}|tk�r0d}||7 }| d¡}�q|dk�rR|�rR| dd¡ �q‚n| dd¡ | 
|¡ q~| dd¡ | 
|¡ q~|| ¡ dœS )Nrl   r   ó   Ié   r©   s   IDi    zUnexpected end of streamó   Er   FTó   Q)Úsettingsrh   )rì   r   ro   rq   rj   rJ   r3  r   r$   rž   rG   r®   r   Úgetvalue)r-   r8   rr  rt   rí   rV   rs   rh   ÚbufÚlocZtok2Ztok3ÚinfoZhas_q_whitespacer.   r.   r/   ri  Ù  sN    








z ContentStream._read_inline_imager)   c                 C   s¸   t ƒ }| jD ]¢\}}|dkrv| d¡ t ƒ }|d  |d ¡ | | ¡ dd… ¡ | d¡ | |d ¡ | d¡ n.|D ]}| |d ¡ | d	¡ qz| t|ƒ¡ | d
¡ q| ¡ S )Nrf  re  rr  r©   éþÿÿÿs   ID rh   s   EIrg   r¸   )r   ra  rG   r=   rs  r   )r-   Únewdatarj  rl  ZdicttextÚopr.   r.   r/   rA    s     

zContentStream._datarU   c                 C   s   |   tt|ƒƒ¡ d S r:   )rb  r   r   rX   r.   r.   r/   rA  )  s    )N)r2   r>   r?   r   r   rD   r   r   rw   rY   r   rb  ri  rØ   rC   rA  rT  r.   r.   r.   r/   r`  �  s    üû<r`  ri   c                 C   sb  |   d¡}|  dd¡ t |¡}|dkr4t | |¡S |dkrt|   d¡}|  dd¡ |dkrht | ||¡S t| |ƒS nê|dkrŠt | ||¡S |dksš|dkr¤t	 | ¡S |d	kr¶t
| |ƒS |d
krÈt | ¡S |dk�r|dk� rü|   d¡}t|ƒdkrÒtdƒ‚qÒt| ƒ}|  dd¡ t| ||ƒS |   d¡}|  t|ƒ d¡ t |¡d k	�rTt | |¡S t | ¡S d S )Nr   rl   r   r©   rw  r  ro  rI   r  é   é   rg  zFile ended unexpectedly.é   )rJ   ro   ÚObjectPrefixrž   rã   rK   rì   r¥   rc   rT   r´   rE   r®   r&   r   rq   ÚIndirectPatternÚmatchrx   r˜   )r8   rj   rk   rt   Úidxrk  r.   r.   r/   rq   .  s@    










rq   c                   @   s$  e Zd ZdZeeeeef ddœdd„Zeee	e
f dœdd„Zeed d	œd
d„Zeee	e
f dœdd„Zedœdd„Zee	dœdd„ƒZee	dœdd„ƒZee	dœdd„ƒZee	dœdd„ƒZe	dœdd„Ze	dœdd„Ze	dœdd„Ze	dœdd „Ze	dœd!d"„Ze	dœd#d$„Ze	dœd%d&„Ze	dœd'd(„Zeeejejf dœd)d*„ƒZej e!e ddœd+d*„ƒZeeejejf dœd,d-„ƒZ"e"j e!e ddœd.d-„ƒZ"eeejejf dœd/d0„ƒZ#e#j e!e ddœd1d0„ƒZ#eeejejf dœd2d3„ƒZ$e$j e!e ddœd4d3„ƒZ$eejejf dœd5d6„Z%eejejf dœd7d8„Z&eejejf dœd9d:„Z'eejejf dœd;d<„Z(eeef ddœd=d>„Z)eeef ddœd?d@„Z*eeef ddœdAdB„Z+eeef ddœdCdD„Z,eejdœdEdF„ƒZ-ejdœdGdH„Z.eejdœdIdJ„ƒZ/ejdœdKdL„Z0eeejejf dœdMdN„ƒZ1e1j eejejf ddœdOdN„ƒZ1eeejejf dœdPdQ„ƒZ2e2j eejejf ddœdRdQ„ƒZ2eeejejf dœdSdT„ƒZ3e3j eejejf ddœdUdT„ƒZ3eeejejf dœdVdW„ƒZ4e4j eejejf ddœdXdW„ƒZ4dS )YÚRectangleObjecta„  
    This class is used to represent *page boxes* in PyPDF2. These boxes include:
        * :attr:`artbox <PyPDF2._page.PageObject.artbox>`
        * :attr:`bleedbox <PyPDF2._page.PageObject.bleedbox>`
        * :attr:`cropbox <PyPDF2._page.PageObject.cropbox>`
        * :attr:`mediabox <PyPDF2._page.PageObject.mediabox>`
        * :attr:`trimbox <PyPDF2._page.PageObject.trimbox>`
    N)rr   r*   c                    s.   t |ƒdkst‚t ˆ ‡ fdd„|D ƒ¡ d S )NrI   c                    s   g | ]}ˆ   |¡‘qS r.   ©Ú_ensure_is_number©Ú.0r²   r,   r.   r/   Ú
<listcomp>l  s     z,RectangleObject.__init__.<locals>.<listcomp>)r®   r3  rc   rY   )r-   rr   r.   r,   r/   rY   h  s    zRectangleObject.__init__rU   c                 C   s   t |ttfƒst|ƒ}|S r:   )r[   r˜   r†   rX   r.   r.   r/   rƒ  n  s    z!RectangleObject._ensure_is_number)ÚsxÚsyr*   c                 C   s8   t t| jƒ| t| jƒ| t| jƒ| t| jƒ| fƒS r:   )r�  r”   ÚleftÚbottomÚrightÚtop)r-   r‡  rˆ  r.   r.   r/   Úscales  s    üÿzRectangleObject.scalec                 C   s   t dƒ |  |¡S )NÚensureIsNumber)r   rƒ  rX   r.   r.   r/   rŽ  }  s    zRectangleObject.ensureIsNumberr)   c                 C   s   dt t| ƒƒ› d�S )NzRectangleObject(r|   )r•   r  r,   r.   r.   r/   rO   ƒ  s    zRectangleObject.__repr__c                 C   s   | d S r™   r.   r,   r.   r.   r/   r‰  †  s    zRectangleObject.leftc                 C   s   | d S )Nr   r.   r,   r.   r.   r/   rŠ  Š  s    zRectangleObject.bottomc                 C   s   | d S )Nr©   r.   r,   r.   r.   r/   r‹  Ž  s    zRectangleObject.rightc                 C   s   | d S )Nro  r.   r,   r.   r.   r/   rŒ  ’  s    zRectangleObject.topc                 C   s   t ddƒ | jS )NÚgetLowerLeft_xr‰  ©r   r‰  r,   r.   r.   r/   r�  –  s    
zRectangleObject.getLowerLeft_xc                 C   s   t ddƒ | jS )NÚgetLowerLeft_yrŠ  ©r   rŠ  r,   r.   r.   r/   r‘  š  s    
zRectangleObject.getLowerLeft_yc                 C   s   t ddƒ | jS )NÚgetUpperRight_xr‹  ©r   r‹  r,   r.   r.   r/   r“  ž  s    
zRectangleObject.getUpperRight_xc                 C   s   t ddƒ | jS )NÚgetUpperRight_yrŒ  ©r   rŒ  r,   r.   r.   r/   r•  ¢  s    
zRectangleObject.getUpperRight_yc                 C   s   t ddƒ | jS )NÚgetUpperLeft_xr‰  r�  r,   r.   r.   r/   r—  ¦  s    
zRectangleObject.getUpperLeft_xc                 C   s   t ddƒ | jS )NÚgetUpperLeft_yrŒ  r–  r,   r.   r.   r/   r˜  ª  s    
zRectangleObject.getUpperLeft_yc                 C   s   t ddƒ | jS )NÚgetLowerRight_xr‹  r”  r,   r.   r.   r/   r™  ®  s    
zRectangleObject.getLowerRight_xc                 C   s   t ddƒ | jS )NÚgetLowerRight_yrŠ  r’  r,   r.   r.   r/   rš  ²  s    
zRectangleObject.getLowerRight_yc                 C   s   | j | jfS )zj
        Property to read and modify the lower left coordinate of this box
        in (x,y) form.
        )r‰  rŠ  r,   r.   r.   r/   Ú
lower_left¶  s    zRectangleObject.lower_leftc                    s"   ‡ fdd„|D ƒ\ˆ d< ˆ d< d S )Nc                 3   s   | ]}ˆ   |¡V  qd S r:   r‚  r„  r,   r.   r/   Ú	<genexpr>À  s     z-RectangleObject.lower_left.<locals>.<genexpr>r   r   r.   rX   r.   r,   r/   r›  ¾  s    c                 C   s   | j | jfS )zk
        Property to read and modify the lower right coordinate of this box
        in (x,y) form.
        )r‹  rŠ  r,   r.   r.   r/   Úlower_rightÂ  s    zRectangleObject.lower_rightc                    s"   ‡ fdd„|D ƒ\ˆ d< ˆ d< d S )Nc                 3   s   | ]}ˆ   |¡V  qd S r:   r‚  r„  r,   r.   r/   rœ  Ì  s     z.RectangleObject.lower_right.<locals>.<genexpr>r©   r   r.   rX   r.   r,   r/   r�  Ê  s    c                 C   s   | j | jfS )zj
        Property to read and modify the upper left coordinate of this box
        in (x,y) form.
        )r‰  rŒ  r,   r.   r.   r/   Ú
upper_leftÎ  s    zRectangleObject.upper_leftc                    s"   ‡ fdd„|D ƒ\ˆ d< ˆ d< d S )Nc                 3   s   | ]}ˆ   |¡V  qd S r:   r‚  r„  r,   r.   r/   rœ  Ø  s     z-RectangleObject.upper_left.<locals>.<genexpr>r   ro  r.   rX   r.   r,   r/   rž  Ö  s    c                 C   s   | j | jfS )zk
        Property to read and modify the upper right coordinate of this box
        in (x,y) form.
        )r‹  rŒ  r,   r.   r.   r/   Úupper_rightÚ  s    zRectangleObject.upper_rightc                    s"   ‡ fdd„|D ƒ\ˆ d< ˆ d< d S )Nc                 3   s   | ]}ˆ   |¡V  qd S r:   r‚  r„  r,   r.   r/   rœ  ä  s     z.RectangleObject.upper_right.<locals>.<genexpr>r©   ro  r.   rX   r.   r,   r/   rŸ  â  s    c                 C   s   t ddƒ | jS )NÚgetLowerLeftr›  ©r   r›  r,   r.   r.   r/   r   æ  s    
zRectangleObject.getLowerLeftc                 C   s   t ddƒ | jS )NÚgetLowerRightr�  ©r   r�  r,   r.   r.   r/   r¢  ì  s    
zRectangleObject.getLowerRightc                 C   s   t ddƒ | jS )NÚgetUpperLeftrž  ©r   rž  r,   r.   r.   r/   r¤  ò  s    
zRectangleObject.getUpperLeftc                 C   s   t ddƒ | jS )NÚgetUpperRightrŸ  ©r   rŸ  r,   r.   r.   r/   r¦  ø  s    
zRectangleObject.getUpperRightc                 C   s   t ddƒ || _d S )NÚsetLowerLeftr›  r¡  rX   r.   r.   r/   r¨  þ  s    
zRectangleObject.setLowerLeftc                    s,   t ddƒ ‡ fdd„|D ƒ\ˆ d< ˆ d< d S )NÚsetLowerRightr�  c                 3   s   | ]}ˆ   |¡V  qd S r:   r‚  r„  r,   r.   r/   rœ    s     z0RectangleObject.setLowerRight.<locals>.<genexpr>r©   r   ©r   rX   r.   r,   r/   r©    s    
zRectangleObject.setLowerRightc                    s,   t ddƒ ‡ fdd„|D ƒ\ˆ d< ˆ d< d S )NÚsetUpperLeftrž  c                 3   s   | ]}ˆ   |¡V  qd S r:   r‚  r„  r,   r.   r/   rœ    s     z/RectangleObject.setUpperLeft.<locals>.<genexpr>r   ro  rª  rX   r.   r,   r/   r«    s    
zRectangleObject.setUpperLeftc                    s,   t ddƒ ‡ fdd„|D ƒ\ˆ d< ˆ d< d S )NÚsetUpperRightrŸ  c                 3   s   | ]}ˆ   |¡V  qd S r:   r‚  r„  r,   r.   r/   rœ    s     z0RectangleObject.setUpperRight.<locals>.<genexpr>r©   ro  rª  rX   r.   r,   r/   r¬  
  s    
zRectangleObject.setUpperRightc                 C   s   | j | j S r:   )r‹  r‰  r,   r.   r.   r/   Úwidth  s    zRectangleObject.widthc                 C   s   t ddƒ | jS )NÚgetWidthr­  )r   r­  r,   r.   r.   r/   r®    s    
zRectangleObject.getWidthc                 C   s   | j | j S r:   )rŒ  rŠ  r,   r.   r.   r/   Úheight  s    zRectangleObject.heightc                 C   s   t ddƒ | jS )NÚ	getHeightr¯  )r   r¯  r,   r.   r.   r/   r°    s    
zRectangleObject.getHeightc                 C   s   t ddƒ | jS ©NÚ	lowerLeftr›  r¡  r,   r.   r.   r/   r²    s    
zRectangleObject.lowerLeftc                 C   s   t ddƒ || _d S r±  r¡  rX   r.   r.   r/   r²  #  s    
c                 C   s   t ddƒ | jS ©NÚ
lowerRightr�  r£  r,   r.   r.   r/   r´  *  s    
zRectangleObject.lowerRightc                 C   s   t ddƒ || _d S r³  r£  rX   r.   r.   r/   r´  /  s    
c                 C   s   t ddƒ | jS ©NÚ	upperLeftrž  r¥  r,   r.   r.   r/   r¶  6  s    
zRectangleObject.upperLeftc                 C   s   t ddƒ || _d S rµ  r¥  rX   r.   r.   r/   r¶  ;  s    
c                 C   s   t ddƒ | jS ©NÚ
upperRightrŸ  r§  r,   r.   r.   r/   r¸  B  s    
zRectangleObject.upperRightc                 C   s   t ddƒ || _d S r·  r§  rX   r.   r.   r/   r¸  G  s    
)5r2   r>   r?   r×   r
   r”   rY   r   r   r†   r˜   rƒ  r�  rŽ  rD   rO   rØ   r‰  rŠ  r‹  rŒ  r�  r‘  r“  r•  r—  r˜  r™  rš  r‰   rŠ   r›  rT  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�  ^  s¤   	
þþþþþþþþþr�  c                   @   sr  e Zd ZdZeeef ddœdd„Zee	e
 dœdd„ƒZee	e
 dœd	d
„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd„ƒZee	e dœdd „ƒZee	e dœd!d"„ƒZee	e dœd#d$„ƒZdS )%ÚFieldzŒ
    A class representing a field dictionary.

    This class is accessed through
    :meth:`get_fields()<PyPDF2.PdfReader.get_fields>`
    NrJ  c              	   C   sR   t  | ¡ t ¡ t ¡  }|D ].}z|| | t|ƒ< W q tk
rJ   Y qX qd S r:   )rì   rY   r   Ú
attributesr   rã   rË   )r-   rh   Zfield_attributesÚattrr.   r.   r/   rY   W  s    
ÿÿzField.__init__r)   c                 C   s   |   tj¡S )z4Read-only property accessing the type of this field.)rù   r   rR  r,   r.   r.   r/   Ú
field_typed  s    zField.field_typec                 C   s   t ddƒ | jS )zX
        .. deprecated:: 1.28.3

            Use :py:attr:`field_type` instead.
        Ú	fieldTyper¼  )r   r¼  r,   r.   r.   r/   r½  i  s    
zField.fieldTypec                 C   s   |   tj¡S )z6Read-only property accessing the parent of this field.)rù   r   ZParentr,   r.   r.   r/   Úparents  s    zField.parentc                 C   s   |   tj¡S )z4Read-only property accessing the kids of this field.)rù   r   ZKidsr,   r.   r.   r/   Úkidsx  s    z
Field.kidsc                 C   s   |   tj¡S )z4Read-only property accessing the name of this field.)rù   r   ÚTr,   r.   r.   r/   ré   }  s    z
Field.namec                 C   s   |   tj¡S )z>Read-only property accessing the alternate name of this field.)rù   r   ZTUr,   r.   r.   r/   Úalternate_name‚  s    zField.alternate_namec                 C   s   t ddƒ | jS )z\
        .. deprecated:: 1.28.3

            Use :py:attr:`alternate_name` instead.
        ÚaltNamerÁ  )r   rÁ  r,   r.   r.   r/   rÂ  ‡  s    
zField.altNamec                 C   s   |   tj¡S )zÓ
        Read-only property accessing the mapping name of this field. This
        name is used by PyPDF2 as a key in the dictionary returned by
        :meth:`get_fields()<PyPDF2.PdfReader.get_fields>`
        )rù   r   ZTMr,   r.   r.   r/   Úmapping_name‘  s    zField.mapping_namec                 C   s   t ddƒ | jS )zZ
        .. deprecated:: 1.28.3

            Use :py:attr:`mapping_name` instead.
        ÚmappingNamerÃ  )r   rÃ  r,   r.   r.   r/   rÄ  š  s    
zField.mappingNamec                 C   s   |   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   ZFfr,   r.   r.   r/   Úflags¤  s    zField.flagsc                 C   s   |   tj¡S )zr
        Read-only property accessing the value of this field. Format
        varies based on field type.
        )rù   r   ÚVr,   r.   r.   r/   rV   ¬  s    zField.valuec                 C   s   |   tj¡S )z=Read-only property accessing the default value of this field.)rù   r   ZDVr,   r.   r.   r/   Údefault_value´  s    zField.default_valuec                 C   s   t ddƒ | jS )z[
        .. deprecated:: 1.28.3

            Use :py:attr:`default_value` instead.
        ÚdefaultValuerÇ  )r   rÇ  r,   r.   r.   r/   rÈ  ¹  s    
zField.defaultValuec                 C   s   |   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   ZAAr,   r.   r.   r/   Úadditional_actionsÃ  s    zField.additional_actionsc                 C   s   t ddƒ | jS )z`
        .. deprecated:: 1.28.3

            Use :py:attr:`additional_actions` instead.
        ÚadditionalActionsrÉ  )r   rÉ  r,   r.   r.   r/   rÊ  Ì  s    
zField.additionalActions)r2   r>   r?   r×   r   rD   r   rY   rØ   r	   rã   r¼  r½  rì   r¾  rc   r¿  ré   rÁ  rÂ  rÃ  rÄ  rw   rÅ  rV   rÇ  rÈ  rÉ  rÊ  r.   r.   r.   r/   r¹  O  s@   				r¹  c                   @   s   e Zd ZdZdZdZdS )ÚOutlineFontFlagzK
    A class used as an enumerable flag for formatting an outline font
    r   r©   N)r2   r>   r?   r×   ÚitalicÚboldr.   r.   r.   r/   rË  ×  s   rË  c                   @   sh  e Zd ZdZeeeeee	f eeef e
ddœdd„Zeedœdd„ƒZedœd	d
„Zeedeef ddœdd„Zeee dœdd„ƒZeee dœdd„ƒZeee dœdd„ƒZeee dœdd„ƒZeee dœdd„ƒZeee dœdd„ƒZeee dœdd„ƒZeee dœdd„ƒZeee dœdd„ƒZeee dœd d!„ƒZ eee dœd"d#„ƒZ!dS )$ÚDestinationaÄ  
    A class representing a destination within a PDF file.
    See section 8.2.1 of the PDF 1.6 reference.

    :param str title: Title of this destination.
    :param IndirectObject page: Reference to the page of this destination. Should
        be an instance of :class:`IndirectObject<PyPDF2.generic.IndirectObject>`.
    :param str typ: How the destination is displayed.
    :param args: Additional arguments may be necessary depending on the type.
    :raises PdfReadError: If destination type is invalid.

    .. list-table:: Valid ``typ`` arguments (see PDF spec for details)
       :widths: 50 50

       * - /Fit
         - No additional arguments
       * - /XYZ
         - [left] [top] [zoomFactor]
       * - /FitH
         - [top]
       * - /FitV
         - [left]
       * - /FitR
         - [left] [bottom] [right] [top]
       * - /FitB
         - No additional arguments
       * - /FitBH
         - [top]
       * - /FitBV
         - [left]
    N)ÚtitleÚpageÚtypÚargsr*   c                 G   sb  t  | ¡ || tdƒ< || tdƒ< || tdƒ< |dkr`|\| ttjƒ< | ttjƒ< | tdƒ< � nþ|tjkr |\| ttjƒ< | ttjƒ< | ttj	ƒ< | ttjƒ< n¾|tj
tjfkrìz|\| ttjƒ< W n$ tk
rè   tƒ | ttjƒ< Y nX nr|tjtjfk�r<z|\| ttjƒ< W n& tk
�r8   tƒ | ttjƒ< Y nX n"|tjtjfk�rPntd|›�ƒ‚d S )Nú/Titleú/Pageú/Typez/XYZú/ZoomzUnknown Destination Type: )rì   rY   rã   ÚTAÚLEFTZTOPÚTFZFIT_RZBOTTOMÚRIGHTZFIT_HZFIT_BHrŒ   rE   ZFIT_VZFIT_BVZFITZFIT_Br$   )r-   rÏ  rÐ  rÑ  rÒ  r.   r.   r/   rY     s@    
ü
ý
ûüzDestination.__init__r)   c                    s(   t ˆ  d¡ˆ d g‡ fdd„dD ƒ ƒS )NrÔ  rÕ  c                    s   g | ]}|ˆ krˆ | ‘qS r.   r.   r„  r,   r.   r/   r†  .  s   þz*Destination.dest_array.<locals>.<listcomp>)ú/Leftú/Bottomú/Rightú/ToprÖ  )rc   rñ   r,   r.   r,   r/   Ú
dest_array*  s    
þÿÿzDestination.dest_arrayc                 C   s   t ddƒ | jS )zX
        .. deprecated:: 1.28.3

            Use :py:attr:`dest_array` instead.
        ÚgetDestArrayrß  )r   rß  r,   r.   r.   r/   rà  5  s    
zDestination.getDestArrayr7   c                 C   s„   |  d¡ tdƒ}| ||¡ |  d¡ | j}| ||¡ tdƒ}| ||¡ |  d¡ tdƒ}| ||¡ |  d¡ |  d¡ d S )Nr   z/Drg   z/Sz/GoTor¸   r  )rG   rã   r=   rß  )r-   r8   r9   rí   rV   Zvalue_sr.   r.   r/   r=   >  s    



zDestination.write_to_streamc                 C   s
   |   d¡S )z3Read-only property accessing the destination title.rÓ  ©rù   r,   r.   r.   r/   rÏ  Q  s    zDestination.titlec                 C   s
   |   d¡S )z9Read-only property accessing the destination page number.rÔ  rá  r,   r.   r.   r/   rÐ  V  s    zDestination.pagec                 C   s
   |   d¡S )z2Read-only property accessing the destination type.rÕ  rá  r,   r.   r.   r/   rÑ  [  s    zDestination.typc                 C   s   |   dd¡S )z-Read-only property accessing the zoom factor.rÖ  Nrá  r,   r.   r.   r/   Úzoom`  s    zDestination.zoomc                 C   s   |   dd¡S )z<Read-only property accessing the left horizontal coordinate.rÛ  Nrá  r,   r.   r.   r/   r‰  e  s    zDestination.leftc                 C   s   |   dd¡S )z=Read-only property accessing the right horizontal coordinate.rÝ  Nrá  r,   r.   r.   r/   r‹  j  s    zDestination.rightc                 C   s   |   dd¡S )z9Read-only property accessing the top vertical coordinate.rÞ  Nrá  r,   r.   r.   r/   rŒ  o  s    zDestination.topc                 C   s   |   dd¡S )z<Read-only property accessing the bottom vertical coordinate.rÜ  Nrá  r,   r.   r.   r/   rŠ  t  s    zDestination.bottomc                 C   s"   |   dttdƒtdƒtdƒgƒ¡S )zGRead-only property accessing the color in (R, G, B) with values 0.0-1.0ú/Cr   )rù   rc   r†   r,   r.   r.   r/   Úcolory  s     ÿzDestination.colorc                 C   s   |   dd¡S )zDRead-only property accessing the font type. 1=italic, 2=bold, 3=bothú/Fr   rá  r,   r.   r.   r/   Úfont_format€  s    zDestination.font_formatc                 C   s   |   dd¡S )z¿
        Read-only property accessing the outline count.
        positive = expanded
        negative = collapsed
        absolute value = number of visible descendents at all levels
        r0  Nrá  r,   r.   r.   r/   Úoutline_count…  s    zDestination.outline_count)"r2   r>   r?   r×   rD   r   r˜   rx   rE   rì   r   rY   rØ   rc   rß  rà  r   rC   r=   r	   rÏ  rw   rÐ  rÑ  râ  r†   r‰  r‹  rŒ  rŠ  rä  rË  ræ  rç  r.   r.   r.   r/   rÎ  à  sH   "
ú)

 þrÎ  c                   @   s(   e Zd Zeedeef ddœdd„ZdS )ÚBookmarkNr7   c                    s    |  d¡ ‡ fdd„dD ƒD ]:}| ||¡ |  d¡ ˆ  |¡}| ||¡ |  d¡ qtdƒ}| ||¡ |  d¡ ˆ j}| ||¡ |  d¡ |  d¡ d S )	Nr   c                    s   g | ]}|ˆ krt |ƒ‘qS r.   )rã   r„  r,   r.   r/   r†  •  s   þz,Bookmark.write_to_stream.<locals>.<listcomp>)rÓ  r2  r'  r*  r+  r1  rg   r¸   z/Destr  )rG   r=   rñ   rã   rß  r  r.   r,   r/   r=   ‘  s     

þ




zBookmark.write_to_stream)r2   r>   r?   r   r   rD   rC   r=   r.   r.   r.   r/   rè  �  s    þrè  )Ústringrk   r*   c                 C   s   t dddƒ t| |ƒS )NÚcreateStringObjectr°   r¦   )r   r°   )ré  rk   r.   r.   r/   rê  ¨  s    rê  c              	   C   s  t | tƒrt| ƒS t | tƒ�rt |ttfƒr|d}| D ]>}z||| 7 }W q4 tk
rp   |t|fƒ d¡7 }Y q4X q4t|ƒS t |tƒr¤|dkr–t| ƒS t|  |¡ƒS zB|  	t
j¡rÌt|  d¡ƒ}d|_|W S tt| ƒƒ}d|_|W S W n tk
�r   t| ƒ Y S X ntdƒ‚dS )z¼
    Create a ByteStringObject or a TextStringObject from a string to represent the string.

    :param string: A string

    :raises TypeError: If string is not of type str or bytes.
    r§   ÚcharmaprC   zutf-16Tz3create_string_object should have str or unicode argN)r[   rD   r¢   rC   r  rî   rŒ   rÎ   r£   Ú
startswithrÜ   rÝ   rÛ   Údecode_pdfdocencodingrÞ   rç   Ú	TypeError)ré  rk   Úoutr²   r#  r.   r.   r/   r°   °  s4    


r°   )Ú
action_refrÏ  rä  rÌ  rÍ  r*   c                 C   s†   t ƒ }| tdƒ| tdƒt|ƒi¡ |d k	rL| tdƒtdd„ |D ƒƒi¡ d}|r\|d7 }|rh|d7 }|r‚| td	ƒt|ƒi¡ |S )
Nz/ArÓ  rã  c                 S   s   g | ]}t |ƒ‘qS r.   ©r†   )r…  râ   r.   r.   r/   r†  ð  s     z$_create_bookmark.<locals>.<listcomp>r   r   r©   rå  )r$  r  rã   r°   rc   r˜   )rð  rÏ  rä  rÌ  rÍ  ÚbookmarkZformat_flagr.   r.   r/   Ú_create_bookmarkÞ  s(      þÿÿró  )Úunicode_stringr*   c              
   C   sP   d}| D ]B}z|t tt| ƒƒ7 }W q tk
rH   td|dddƒ‚Y qX q|S )Nr‚   Úpdfdocencodingrl   ú#does not exist in translation table)r   r¯   r   rË   rà   )rô  r#  râ   r.   r.   r/   rß   ý  s        ÿrß   )Ú
byte_arrayr*   c                 C   s>   d}| D ]0}t | }|dkr0tdt|ƒdddƒ‚||7 }q|S )Nr§   ú rõ  rl   rö  )r   rç   Ú	bytearray)r÷  r#  Úbrâ   r.   r.   r/   rí  	  s    û
rí  rU   c                    s   t ‡ fdd„dD ƒƒS )Nc                 3   s(   | ] }t ˆ ||d  … dƒd V  qdS )r©   rª   g     ào@N)rw   )r…  ÚirW   r.   r/   rœ    s     zhex_to_rgb.<locals>.<genexpr>)r   r©   rI   )ÚtuplerW   r.   rW   r/   Ú
hex_to_rgb  s    rý  c                   @   sx   e Zd Zedeeeeeef eeeeeeeedœ
dd„ƒZ	edeeef eeef eeeeef eeed
œdd„ƒZ
dS )ÚAnnotationBuilderÚ	HelveticaFÚ14ptÚ000000Úffffff)
ÚtextÚrectÚfontrÍ  rÌ  Ú	font_sizeÚ
font_colorÚborder_colorÚbackground_colorr*   c	                 C   sà   d}	|dkr|	d }	|dkr$|	d }	|	| d | }	|	d | }	d}
t |ƒD ]}|
t|ƒ d }
qL|
d }
tƒ }| td	ƒtd
ƒtdƒtdƒtdƒt|ƒtdƒt| ƒtdƒt|	ƒtdƒt|
ƒtdƒtdd„ t |ƒD ƒƒi¡ |S )z"Add text in a rectangle to a page.zfont: Tzbold zitalic r�   z;text-align:left;color:#r§   ZrgrÕ  ú/Annotú/Subtypez	/FreeTextú/Rectú	/Contentsz/DSz/DArã  c                 S   s   g | ]}t |ƒ‘qS r.   rñ  )r…  Únr.   r.   r/   r†  E  s     z/AnnotationBuilder.free_text.<locals>.<listcomp>)rý  rD   rì   r  rã   r�  r¢   rc   )r  r  r  rÍ  rÌ  r  r  r  r	  Zfont_strZbg_color_strÚstÚ	free_textr.   r.   r/   r    s@           ÿöÿzAnnotationBuilder.free_textr§   )r  Úp2r  r  Ú	title_barr*   c                 C   s²   t tdƒtdƒtdƒtdƒtdƒt|ƒtdƒt|ƒtdƒtt| d ƒt| d	 ƒt|d ƒt|d	 ƒgƒtd
ƒttdƒtdƒgƒtdƒttdƒtdƒtdƒgƒtdƒt|ƒiƒ}|S )aU  
        Draw a line on the PDF.

        :param p1: First point
        :param p2: Second point
        :param rect: Rectangle
        :param text: Text to be displayed as the line annotation
        :param title_bar: Text to be displayed in the title bar of the
            annotation; by convention this is the name of the author
        rÕ  r
  r  z/Liner  z/Tz/Lr   r   z/LENz/ICg      à?r  )rì   rã   r�  r¢   rc   r†   )r  r  r  r  r  Zline_objr.   r.   r/   ÚlineK  sF         



üÿ þÿ ýÿ æÿzAnnotationBuilder.lineN)rÿ  FFr   r  r  r  )r§   r§   )r2   r>   r?   rS   rD   r
   r”   r\   rì   r  r  r.   r.   r.   r/   rþ    s>          ÷ö,  û

úrþ  )N)N)N)N)N)N)hr×   Ú
__author__Ú__author_email__rÜ   r‰   r@   Úloggingr    r  Úenumr   Úior   Útypingr   r   r   r   r   r	   r
   r   r   Ú_codecsr   r   r   Ú_utilsr   r   r   r   r   r   r   r   r   r   r   r   Ú	constantsr   r   r   rR  r    r  r!   r×  r"   rÙ  Úerrorsr#   r$   r%   r&   Ú	getLoggerr2   Úloggerr}  ZNumberSignsr¡   r~  r'   rE   rT   r  rc   rx   rŠ   r†   rw   r˜   r¤   rD   r¥   r³   r´   rC   r£   r¢   rã   rî   rì   r$  r  rD  rI  r`  rq   r�  r¹  rË  rÎ  rè  rê  r°   r”   r\   ró  rß   rí  rý  rþ  r.   r.   r.   r/   Ú<module>   sÊ   ,8

.8I)(þ þý þý þýJ F, [ X+  ýü0 r 		 1 þ

ý
 þ

ý/ú