o
    œœ<WÆ°  ã                   @   sÆ
  d Z dZdZddlZddlmZmZmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlZdd	lmZ dd
lmZ ddlZddlZddlZedƒZedƒZe edƒ¡Zdd„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZG dd„ deƒZG dd„ dejeƒZ G dd„ de!eƒZ"dd„ Z#d d!„ Z$d"d#„ Z%G d$d%„ d%ej&eƒZ'G d&d'„ d'ej(eƒZ)G d(d)„ d)e*eƒZ+G d*d+„ d+e,eƒZ-G d,d-„ d-e-ƒZ.G d.d/„ d/e-ƒZ/G d0d1„ d1e/ƒZ0G d2d3„ d3e/ƒZ1G d4d5„ d5eƒZ2G d6d7„ d7e.ƒZ3G d8d9„ d9e.ƒZ4G d:d;„ d;e4ƒZ5d<d=„ Z6d>d?„ Z7g e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	d@ƒ‘e	dAƒ‘e	dBƒ‘e	dCƒ‘e	dDƒ‘e	dEƒ‘e	dFƒ‘e	dGƒ‘e	dHƒ‘e	dIƒ‘e	dJƒ‘e	dKƒ‘e	dLƒ‘e	dMƒ‘e	dNƒ‘e	dOƒ‘e	dPƒ‘e	dQƒ‘e	dRƒ‘e	dSƒ‘e	dTƒ‘e	dUƒ‘e	dVƒ‘e	dWƒ‘e	dXƒ‘e	dYƒ‘e	dZƒ‘e	d[ƒ‘e	d\ƒ‘e	d]ƒ‘e	d^ƒ‘e	d_ƒ‘e	d`ƒ‘e	daƒ‘e	dbƒ‘e	dcƒ‘e	ddƒ‘e	deƒ‘e	dfƒ‘e	dgƒ‘e	dhƒ‘e	diƒ‘e	djƒ‘e	dkƒ‘e	dlƒ‘e	dmƒ‘e	dnƒ‘e	doƒ‘e	dpƒ‘e	dqƒ‘e	drƒ‘e	dsƒ‘e	dtƒ‘e	duƒ‘e	dvƒ‘e	dwƒ‘e	dxƒ‘e	dyƒ‘e	dzƒ‘e	d{ƒ‘e	d|ƒ‘e	d}ƒ‘e	d~ƒ‘e	dƒ‘e	d€ƒ‘e	d�ƒ‘e	d‚ƒ‘e	dƒƒ‘e	d„ƒ‘e	d…ƒ‘e	d†ƒ‘e	d‡ƒ‘e	dˆƒ‘e	d‰ƒ‘e	dŠƒ‘e	d‹ƒ‘e	dŒƒ‘e	d�ƒ‘e	dŽƒ‘e	d�ƒ‘e	d�ƒ‘e	d‘ƒ‘e	d’ƒ‘e	d“ƒ‘e	d”ƒ‘e	d•ƒ‘e	d–ƒ‘e	d—ƒ‘e	d˜ƒ‘e	d™ƒ‘e	dšƒ‘e	d›ƒ‘e	dœƒ‘e	d�ƒ‘e	džƒ‘e	dŸƒ‘e	d ƒ‘e	d¡ƒ‘e	d¢ƒ‘e	d£ƒ‘e	d¤ƒ‘e	d¥ƒ‘e	d¦ƒ‘e	d§ƒ‘e	d@ƒ‘e	d¨ƒ‘e	d©ƒ‘e	dªƒ‘e	d«ƒ‘e	d¬ƒ‘e	d­ƒ‘e	d®ƒ‘e	d¯ƒ‘e	d°ƒ‘e	d±ƒ‘e	d²ƒ‘e	d³ƒ‘e	d´ƒ‘e	dµƒ‘e	d¶ƒ‘e	d·ƒ‘e	d¸ƒ‘e	d¹ƒ‘e	dºƒ‘e	d»ƒ‘e	d¼ƒ‘e	d½ƒ‘e	d¾ƒ‘e	d¿ƒ‘e	dÀƒ‘e	dÁƒ‘e	dÂƒ‘e	dÃƒ‘e	dÄƒ‘e	dÅƒ‘e	dÆƒ‘e	d@ƒ‘e	dÇƒ‘e	dÈƒ‘e	dÉƒ‘e	dÊƒ‘e	dËƒ‘e	dÌƒ‘e	dÍƒ‘e	dÎƒ‘e	dÏƒ‘e	dÐƒ‘e	dÑƒ‘e	dÒƒ‘e	dÓƒ‘e	d@ƒ‘e	dÔƒ‘e	dÕƒ‘e	dÖƒ‘e	d×ƒ‘e	dØƒ‘e	dÙƒ‘e	dÚƒ‘e	dÛƒ‘e	dÜƒ‘e	dÝƒ‘e	dÞƒ‘e	dßƒ‘e	dàƒ‘e	dáƒ‘e	dâƒ‘e	dãƒ‘e	däƒ‘e	dåƒ‘e	dæƒ‘e	dçƒ‘e	dèƒ‘e	déƒ‘e	dêƒ‘e	dëƒ‘e	dìƒ‘e	díƒ‘e	dîƒ‘e	dïƒ‘e	dðƒ‘e	dñƒ‘e	dòƒ‘e	dóƒ‘e	dôƒ‘e	dõƒ‘e	döƒ‘e	d÷ƒ‘e	døƒ‘e	dùƒ‘e	dúƒ‘e	dûƒ‘e	düƒ‘e	dýƒ‘e	dþƒ‘e	dÿƒ‘e	�d ƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�d	ƒ‘e	�d
ƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�dƒ‘e	�d ƒ‘e	�d!ƒ‘e	�d"ƒ‘e	�d#ƒ‘e	�d$ƒ‘e	�d%ƒ‘R Z8e9e8ƒ�d&k�s>J ‚i Z:e;�d&ƒD ]Z<e8e< Z=e=e	d@ƒk�rT�qEe=e:v�s[J ‚e<e:e=< �qEdS ('  zO
Implementation of generic PDF objects (dictionary, number, string, and so on)
zMathieu Fenniakzbiziqe@mathieu.fenniak.neté    Né   )ÚreadNonWhitespaceÚRC4_encryptÚskipOverComment)Úb_Úu_Úchr_Úord_)ÚPdfStreamError)Úfilters)Úutilsz/<[tf(n%z+-z(\d+)\s+(\d+)\s+R[^a-zA-Z]c                 C   sl  |   d¡}|  dd¡ t |¡}|dkrt | |¡S |dkr9|   d¡}|  dd¡ |tdƒkr5t | |¡S t| ƒS |dkrCt	 | |¡S |dksK|dkrPt
 | ¡S |d	krXt| ƒS |d
krat | ¡S |dkr�|tdƒtdƒfvr~|   d¡}|tdƒtdƒfvsot| ƒ}|  dd¡ t| |ƒS |tv r–t | ¡S |   d¡}|  t|ƒ d¡ t |¡d kr±t | |¡S t | ¡S )Nr   éÿÿÿÿr   é   éþÿÿÿú<<é   é   é   é   é   úÚ
é   )ÚreadÚseekÚObjectPrefixÚfindÚ
NameObjectÚreadFromStreamr   ÚDictionaryObjectÚreadHexStringFromStreamÚArrayObjectÚBooleanObjectÚreadStringFromStreamÚ
NullObjectr   Ú
readObjectÚNumberSignsÚNumberObjectÚlenÚIndirectPatternÚmatchÚIndirectObject)ÚstreamÚpdfÚtokÚidxÚpeek© r1   ú@/var/www/html/env/lib/python3.10/site-packages/PyPDF2/generic.pyr%   6   sB   





ÿ



r%   c                   @   ó   e Zd Zdd„ ZdS )Ú	PdfObjectc                 C   ó   | S )zResolves indirect references.r1   ©Úselfr1   r1   r2   Ú	getObjectf   s   zPdfObject.getObjectN)Ú__name__Ú
__module__Ú__qualname__r8   r1   r1   r1   r2   r4   e   ó    r4   c                   @   ó$   e Zd Zdd„ Zdd„ ZeeƒZdS )r$   c                 C   s   |  tdƒ¡ d S )NÚnull©Úwriter   ©r7   r,   Úencryption_keyr1   r1   r2   ÚwriteToStreaml   ó   zNullObject.writeToStreamc                 C   s&   |   d¡}|tdƒkrt d¡‚tƒ S )Nr   r>   zCould not read Null object)r   r   r   ÚPdfReadErrorr$   )r,   Únulltxtr1   r1   r2   r   o   s   

zNullObject.readFromStreamN©r9   r:   r;   rC   r   Ústaticmethodr1   r1   r1   r2   r$   k   s    r$   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ ZeeƒZdS )r"   c                 C   ó
   || _ d S ©N)Úvalue©r7   rK   r1   r1   r2   Ú__init__x   ó   
zBooleanObject.__init__c                 C   s*   | j r| tdƒ¡ d S | tdƒ¡ d S )NÚtrueÚfalse)rK   r@   r   rA   r1   r1   r2   rC   {   s   zBooleanObject.writeToStreamc                 C   sF   |   d¡}|tdƒkrtdƒS |tdƒkr|   d¡ tdƒS t d¡‚)Nr   rO   TÚfalsr   FzCould not read Boolean object)r   r   r"   r   rE   )r,   Úwordr1   r1   r2   r   �   s   


zBooleanObject.readFromStreamN)r9   r:   r;   rM   rC   r   rH   r1   r1   r1   r2   r"   w   s
    	r"   c                   @   r=   )r!   c                 C   sD   |  tdƒ¡ | D ]}|  tdƒ¡ | ||¡ q	|  tdƒ¡ d S )Nú[ú z ])r@   r   rC   ©r7   r,   rB   Údatar1   r1   r2   rC   Ž   s
   zArrayObject.writeToStreamc                 C   s’   t ƒ }|  d¡}|tdƒkrt d¡‚	 |  d¡}| ¡ r&|  d¡}| ¡ s|  dd¡ |  d¡}|tdƒkr:	 |S |  dd¡ | t| |ƒ¡ q)Nr   rS   zCould not read arrayTr   ú])	r!   r   r   r   rE   Úisspacer   Úappendr%   )r,   r-   ÚarrÚtmpr.   Ú	peekaheadr1   r1   r2   r   •   s"   



ÿ
ýôzArrayObject.readFromStreamNrG   r1   r1   r1   r2   r!   �   s    r!   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
e	ƒZ	dS )r+   c                 C   s   || _ || _|| _d S rJ   )ÚidnumÚ
generationr-   )r7   r]   r^   r-   r1   r1   r2   rM   ¬   s   
zIndirectObject.__init__c                 C   s   | j  | ¡ ¡ S rJ   )r-   r8   r6   r1   r1   r2   r8   ±   ó   zIndirectObject.getObjectc                 C   s   d| j | jf S )NzIndirectObject(%r, %r))r]   r^   r6   r1   r1   r2   Ú__repr__´   r_   zIndirectObject.__repr__c                 C   s6   |d kot |tƒo| j|jko| j|jko| j|ju S rJ   )Ú
isinstancer+   r]   r^   r-   ©r7   Úotherr1   r1   r2   Ú__eq__·   s   ÿ
þ
ý
ûzIndirectObject.__eq__c                 C   s   |   |¡ S rJ   )rd   rb   r1   r1   r2   Ú__ne__À   ó   zIndirectObject.__ne__c                 C   s   |  td| j| jf ƒ¡ d S )Nz%s %s R)r@   r   r]   r^   rA   r1   r1   r2   rC   Ã   s   zIndirectObject.writeToStreamc                 C   s®   t dƒ}	 |  d¡}|stdƒ‚| ¡ rn||7 }qt dƒ}	 |  d¡}|s*tdƒ‚| ¡ r2|s1qn||7 }qt| ƒ}|t dƒkrMt dt |  ¡ ¡ ¡‚t	t
|ƒt
|ƒ|ƒS )NÚ Tr   úStream has ended unexpectedlyÚRz2Error reading indirect object reference at byte %s)r   r   r
   rX   r   r   rE   ÚhexStrÚtellr+   Úint)r,   r-   r]   r.   r^   Úrr1   r1   r2   r   Æ   s0   
ù
÷
zIndirectObject.readFromStreamN)r9   r:   r;   rM   r8   r`   rd   re   rC   r   rH   r1   r1   r1   r2   r+   «   s    	r+   c                   @   s.   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚFloatObjectÚ0Nc                 C   s6   zt j | t |¡|¡W S    t j | t|ƒ¡ Y S rJ   )ÚdecimalÚDecimalÚ__new__r   Ústr_Ústr)ÚclsrK   Úcontextr1   r1   r2   rr   ã   s   zFloatObject.__new__c                 C   sX   | |   ¡ krt|  t d¡¡ƒS d|  }|r*|d dkr*|d d… }|r*|d dks|S )Nr   z%.5fr   ro   )Úto_integralrt   Úquantizerp   rq   )r7   Úor1   r1   r2   r`   é   s   ÿzFloatObject.__repr__c                 C   ó   t tt| ƒƒƒS rJ   )Úfloatr   Úreprr6   r1   r1   r2   Ú
as_numericô   r_   zFloatObject.as_numericc                 C   ó   |  tt| ƒƒ¡ d S rJ   ©r@   r   r|   rA   r1   r1   r2   rC   ÷   ó   zFloatObject.writeToStream)ro   N)r9   r:   r;   rr   r`   r}   rC   r1   r1   r1   r2   rn   â   s
    
rn   c                   @   sJ   e Zd Ze edƒ¡ZedƒZdd„ Zdd„ Z	dd„ Z
d	d
„ ZeeƒZdS )r'   z	[^+-.0-9]Ú.c                 C   s6   t |ƒ}zt  | |¡W S  ty   t  | d¡ Y S w ©Nr   )rl   rr   ÚOverflowError)ru   rK   Úvalr1   r1   r2   rr   ÿ   s   ÿzNumberObject.__new__c                 C   rz   rJ   )rl   r   r|   r6   r1   r1   r2   r}     r_   zNumberObject.as_numericc                 C   r~   rJ   r   rA   r1   r1   r2   rC   	  r€   zNumberObject.writeToStreamc                 C   s.   t  | tj¡}| tj¡dkrt|ƒS t|ƒS )Nr   )r   ÚreadUntilRegexr'   ÚNumberPatternr   ÚByteDotrn   )r,   Únumr1   r1   r2   r     s   zNumberObject.readFromStreamN)r9   r:   r;   ÚreÚcompiler   r†   r‡   rr   r}   rC   r   rH   r1   r1   r1   r2   r'   û   s    r'   c                 C   s‚   t | tjƒr
t| ƒS t | tjƒr=z|  tj¡r$t|  d¡ƒ}d|_	|W S tt
| ƒƒ}d|_|W S  ty<   t| ƒ Y S w tdƒ‚)Nzutf-16Tz1createStringObject should have str or unicode arg)ra   r   Ústring_typeÚTextStringObjectÚ
bytes_typeÚ
startswithÚcodecsÚBOM_UTF16_BEÚdecodeÚautodetect_utf16Údecode_pdfdocencodingÚautodetect_pdfdocencodingÚUnicodeDecodeErrorÚByteStringObjectÚ	TypeError)ÚstringÚretvalr1   r1   r2   ÚcreateStringObject  s   ÿrš   c                 C   s°   |   d¡ d}tdƒ}	 t| ƒ}|stdƒ‚|tdƒkrn||7 }t|ƒdkr5|tt|dd�ƒ7 }tdƒ}qt|ƒdkrB|td	ƒ7 }t|ƒdkrR|tt|dd�ƒ7 }tt|ƒƒS )
Nr   rg   Trh   ú>r   é   ©Úbasero   )r   r   r   r
   r(   Úchrrl   rš   )r,   ÚtxtÚxr.   r1   r1   r2   r    /  s&   
ör    c                 C   sR  |   d¡}d}tdƒ}	 |   d¡}|stdƒ‚|tdƒkr#|d7 }�n|tdƒkr7|d8 }|dkr6	 t
|ƒS ní|tdƒk�r$|   d¡}|td	ƒkrNtd
ƒ}nÖ|tdƒkrYtdƒ}nË|tdƒkrdtdƒ}nÀ|tdƒkrotdƒ}nµ|tdƒkrztdƒ}nª|tdƒkr…tdƒ}nŸ|tdƒkr�tdƒ}n”|tdƒkr›tdƒ}n‰|tdƒkr¦tdƒ}n~|tdƒkr±tdƒ}ns|tdƒtdƒtdƒtdƒtdƒtdƒtdƒtdƒtdƒtdƒtdƒfv rÛt|ƒ}nI| ¡ rÿtd ƒD ]}|   d¡}| ¡ ró||7 }qã ttt|d!d"�ƒƒ}n%|td#ƒv �r|   d¡}|td#ƒv�r|  d$d¡ tdƒ}nt 	d%| ¡‚||7 }q)&Nr   rg   Trh   ú(ú)r   ú\Únr   rm   r   Útú	ÚbúÚfúÚcz\cú/rT   ú%ú<r›   rS   rW   ú#Ú_ú&ú$r   é   r�   z
r   zUnexpected escaped string: %s)r   r   r
   ÚisdigitÚrangerŸ   rl   r   r   rE   rš   )r,   r.   Úparensr    ÚiÚntokr1   r1   r2   r#   E  sp   

5Ê










&ÿ




Âr#   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )r–   c                 C   r5   rJ   r1   r6   r1   r1   r2   Ú<lambda>•  s    zByteStringObject.<lambda>c                 C   sB   | }|r	t ||ƒ}| tdƒ¡ | t |¡¡ | tdƒ¡ d S )Nr¯   r›   )r   r@   r   r   Ú	hexencode)r7   r,   rB   Úbytearrr1   r1   r2   rC   —  s   
zByteStringObject.writeToStreamN)r9   r:   r;   ÚpropertyÚoriginal_bytesrC   r1   r1   r1   r2   r–   �  s    r–   c                   @   s0   e Zd ZdZdZedd„ ƒZdd„ Zdd„ ZdS )	rŒ   Fc                 C   ó   |   ¡ S rJ   )Úget_original_bytesr6   r1   r1   r2   rº   ®  ó    zTextStringObject.<lambda>c                 C   s,   | j rtj|  d¡ S | jrt| ƒS tdƒ‚)Núutf-16bez#no information about original bytes)r’   r�   r�   Úencoder”   Úencode_pdfdocencodingÚ	Exceptionr6   r1   r1   r2   rÀ   °  s
   z#TextStringObject.get_original_bytesc                 C   sÂ   zt | ƒ}W n ty   tj|  d¡ }Y nw |r+t||ƒ}t|ƒ}| |d ¡ d S | t	dƒ¡ |D ]#}t
|ƒ ¡ sN|t	dƒkrN| t	dt|ƒ ƒ¡ q4| t	t
|ƒƒ¡ q4| t	dƒ¡ d S )NrÂ   r¢   rT   z\%03or£   )rÄ   ÚUnicodeEncodeErrorr�   r�   rÃ   r   r–   rC   r@   r   r   Úisalnumr	   )r7   r,   rB   r¼   Úobjr¬   r1   r1   r2   rC   ½  s   ÿ
zTextStringObject.writeToStreamN)	r9   r:   r;   r”   r’   r½   r¾   rÀ   rC   r1   r1   r1   r2   rŒ   ¥  s    rŒ   c                   @   s:   e Zd Ze edƒ¡ZedƒZdd„ Zdd„ Z	e
e	ƒZ	dS )r   z\s+|[\(\)<>\[\]{}/%]r­   c                 C   s   |  t| ƒ¡ d S rJ   r?   rA   r1   r1   r2   rC   ×  rD   zNameObject.writeToStreamc              
   C   s´   d}|r
t |  ¡ ƒ |  d¡}|tjkrt d¡‚|tj| tjdd�7 }|r*t |ƒ zt| 	d¡ƒW S  t
tfyY } z|jsPt dtj¡ t|ƒW  Y d }~S t d¡‚d }~ww )NFr   zname read errorT)Ú
ignore_eofzutf-8z Illegal character in Name Object)Úprintrk   r   r   Úsurfixr   rE   r…   ÚdelimiterPatternr‘   rÆ   r•   ÚstrictÚwarningsÚwarnÚPdfReadWarning)r,   r-   ÚdebugÚnameÚer1   r1   r2   r   Ú  s$   


ÿ
€ùzNameObject.readFromStreamN)r9   r:   r;   r‰   rŠ   r   rÌ   rË   rC   r   rH   r1   r1   r1   r2   r   Ó  s    r   c                   @   s^   e Zd Zdd„ Zdd„ Zddd„Zdd	„ Zd
d„ Zedd„ ddƒZ	dd„ Z
dd„ ZeeƒZdS )r   c                 C   s   t  | |¡S rJ   )ÚdictÚ__getitem__©r7   Úkeyr1   r1   r2   Úraw_getò  rf   zDictionaryObject.raw_getc                 C   ó2   t |tƒs	tdƒ‚t |tƒstdƒ‚t | ||¡S ©Nzkey must be PdfObjectzvalue must be PdfObject)ra   r4   Ú
ValueErrorrÔ   Ú__setitem__©r7   r×   rK   r1   r1   r2   rÜ   õ  ó
   

zDictionaryObject.__setitem__Nc                 C   rÙ   rÚ   )ra   r4   rÛ   rÔ   Ú
setdefaultrÝ   r1   r1   r2   rß   ü  rÞ   zDictionaryObject.setdefaultc                 C   s   t  | |¡ ¡ S rJ   )rÔ   rÕ   r8   rÖ   r1   r1   r2   rÕ     r_   zDictionaryObject.__getitem__c                 C   sR   |   dd ¡}|d krd S | ¡ }ddlm} t||jƒs'| |¡}|| tdƒ< |S )Nz	/Metadatar   )Úxmp)Úgetr8   rg   rà   ra   ÚXmpInformationr   )r7   Úmetadatarà   r1   r1   r2   ÚgetXmpMetadata  s   
zDictionaryObject.getXmpMetadatac                 C   r¿   rJ   )rä   r6   r1   r1   r2   rº     rÁ   zDictionaryObject.<lambda>c                 C   sj   |  tdƒ¡ t|  ¡ ƒD ]\}}| ||¡ |  tdƒ¡ | ||¡ |  tdƒ¡ q|  tdƒ¡ d S )Nú<<
rT   r   ú>>)r@   r   ÚlistÚitemsrC   ©r7   r,   rB   r×   rK   r1   r1   r2   rC      s   zDictionaryObject.writeToStreamc                 C   s  d}|   d¡}|tdƒkrt dt |  ¡ ¡ ¡‚i }	 t| ƒ}|tdƒkr'q|tdƒkr8|  dd	¡ t| ƒ q|s>t	d
ƒ‚|rFt
d|fƒ |tdƒkrR|   d	¡ nF|  dd	¡ t| |ƒ}t| ƒ}|  dd	¡ t| |ƒ}| |¡sv|||< n!|jr‡t dt |  ¡ ¡|f ¡‚t dt |  ¡ ¡|f tj¡ q|  ¡ }t| ƒ}	|	tdƒk�ro|   d¡tdƒk�ro|   d	¡}
|
tdƒkrÇ|   d	¡}
|
tdƒks¼|
tdƒtdƒfv sÓJ ‚|
tdƒkrè|   d	¡tdƒkrè|  dd	¡ d|v sîJ ‚|d }|røt
|ƒ t|tƒ�r|  ¡ }| |¡}|  |d¡ |   |¡|d< |�rt
dƒ t| ƒ}|   d¡}|| tdƒk�rn|  ¡ }|  dd	¡ |   d¡}|tdƒk�rN|d d d… |d< n'|�r\t
d||t |¡fƒ |  |d¡ t dt |  ¡ ¡ ¡‚n|  |d¡ d|v �rt |¡S tƒ }| |¡ |S )NFr   r   z=Dictionary read error at byte %s: stream must begin with '<<'Tú r®   r   r   rh   zTok:r›   z8Multiple definitions in dictionary at byte %s for key %sÚsr   ÚtreamrT   r   r   ú/Lengthr   Ú__streamdata__Úherer´   Ú	endstreamiöÿÿÿé	   ÚEz:Unable to find 'endstream' marker after stream at byte %s.)r   r   r   rE   rj   rk   r   r   r   r
   rÊ   r%   rá   rÍ   rÎ   rÏ   rÐ   ra   r+   r8   Ú	debuggingÚtoHexÚStreamObjectÚinitializeFromDictionaryr   Úupdate)r,   r-   rÑ   r[   rV   r.   r×   rK   Úposrë   ÚeolÚlengthr¦   rÓ   ÚndstreamÚendr™   r1   r1   r2   r   )  s”   





ÿÿÿä"

ÿ


ð


zDictionaryObject.readFromStreamrJ   )r9   r:   r;   rØ   rÜ   rß   rÕ   rä   r½   ÚxmpMetadatarC   r   rH   r1   r1   r1   r2   r   ñ  s    
	Xr   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Ú
TreeObjectc                 C   s   t  | ¡ d S rJ   )r   rM   r6   r1   r1   r2   rM   …  s   zTreeObject.__init__c                 C   s   d| v S )Nú/Firstr1   r6   r1   r1   r2   ÚhasChildrenˆ  ó   zTreeObject.hasChildrenc                 C   r¿   rJ   )Úchildrenr6   r1   r1   r2   Ú__iter__‹  r  zTreeObject.__iter__c                 c   s8   � |   ¡ st‚| d }	 |V  || d krt‚|d }q)Nrÿ   Tú/Lastú/Next)r   ÚStopIteration)r7   Úchildr1   r1   r2   r  Ž  s   €üzTreeObject.childrenc                 C   sÖ   |  ¡ }| |¡}t|tƒsJ ‚d| vr%|| tdƒ< tdƒ| tdƒ< d }n| d }|| tdƒ< t| tdƒ d ƒ| tdƒ< |rW| |¡}t|tƒsKJ ‚||tdƒ< ||tdƒ< | | ¡}t|tƒscJ ‚||tdƒ< d S )	Nrÿ   r   ú/Countr  r   ú/Prevr  ú/Parent)r8   ÚgetReferencera   r+   r   r'   )r7   r  r-   ÚchildObjÚprevÚprevRefÚ	parentRefr1   r1   r2   ÚaddChild™  s$   


zTreeObject.addChildc                 C   s*  |  ¡ }tdƒ|vrtdƒ‚|tdƒ | krtdƒ‚d}d }d }| tdƒ }|  ¡ }| tdƒ }|  ¡ }	|d krî||krÑ|d krˆtdƒ|v rh|tdƒ }
|
  ¡ }|tdƒ= |
| tdƒ< | td	ƒ d
 | td	ƒ< nf| td	ƒ d
ksrJ ‚| td	ƒ= | tdƒ= tdƒ| v r‡| tdƒ= nFtdƒ|v r±|tdƒ }
|
  ¡ }||tdƒ< |
|tdƒ< | td	ƒ d
 | td	ƒ< n||	ks·J ‚|tdƒ= || tdƒ< | td	ƒ d
 | td	ƒ< d}n|}|}tdƒ|v ræ|tdƒ }|  ¡ }nd }d }|d ks8|sôtdƒ‚|tdƒ= tdƒ|v �r|tdƒ= tdƒ|v �r|tdƒ= d S d S )Nr
  z/Removed child does not appear to be a tree itemz*Removed child is not a member of this treeFrÿ   r  r  r	  r  r   Tz"Removal couldn't find item in tree)r8   r   rÛ   )r7   r  r  Úfoundr  r  ÚcurRefÚcurÚlastRefÚlastÚnextRefÚnextr1   r1   r2   ÚremoveChild²  sn   



€

Ö,

ÿzTreeObject.removeChildc                 C   s’   | D ]!}|  ¡ }|tdƒ= tdƒ|v r|tdƒ= tdƒ|v r#|tdƒ= qtdƒ| v r/| tdƒ= tdƒ| v r:| tdƒ= tdƒ| v rG| tdƒ= d S d S )Nr
  r  r	  r  rÿ   r  )r8   r   )r7   r  r  r1   r1   r2   Ú	emptyTreeö  s   


€

ÿzTreeObject.emptyTreeN)
r9   r:   r;   rM   r   r  r  r  r  r  r1   r1   r1   r2   rþ   „  s    Drþ   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ ZeeƒZdd„ Zd	S )
rõ   c                 C   s   d | _ d | _d S rJ   )Ú_dataÚdecodedSelfr6   r1   r1   r2   rM     s   
zStreamObject.__init__c                 C   sh   t t| jƒƒ| tdƒ< t | ||¡ | d= | tdƒ¡ | j}|r&t||ƒ}| |¡ | tdƒ¡ d S )Nrí   z
stream
z

endstream)	r'   r(   r  r   r   rC   r@   r   r   rU   r1   r1   r2   rC     s   

zStreamObject.writeToStreamc                 C   s:   d| v rt ƒ }ntƒ }| d |_| d= | d= | | ¡ |S )Nú/Filterrî   rí   )ÚEncodedStreamObjectÚDecodedStreamObjectr  r÷   )rV   r™   r1   r1   r2   rö     s   

z%StreamObject.initializeFromDictionaryc                 C   s~   d| v r(| d }t |tƒr| dtdƒ¡ ntƒ }| tdƒ¡ | |¡ |}ntdƒ}tƒ }||tdƒ< tj | j	¡|_	|S )Nr  r   z/FlateDecode)
ra   r!   Úinsertr   rY   r  r   ÚFlateDecoderÃ   r  )r7   rª   Únewfr™   r1   r1   r2   ÚflateEncode#  s   

zStreamObject.flateEncodeN)r9   r:   r;   rM   rC   rö   rH   r"  r1   r1   r1   r2   rõ     s    
rõ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r  c                 C   s   | j S rJ   ©r  r6   r1   r1   r2   ÚgetData6  s   zDecodedStreamObject.getDatac                 C   rI   rJ   r#  ©r7   rV   r1   r1   r2   ÚsetData9  rN   zDecodedStreamObject.setDataN)r9   r:   r;   r$  r&  r1   r1   r1   r2   r  5  s    r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r  c                 C   s
   d | _ d S rJ   )r  r6   r1   r1   r2   rM   >  rN   zEncodedStreamObject.__init__c                 C   sT   | j r| j  ¡ S tƒ }t | ¡|_t|  ¡ ƒD ]\}}|dvr#|||< q|| _ |jS )N)rí   r  z/DecodeParms)r  r$  r  r   ÚdecodeStreamDatar  rç   rè   )r7   Údecodedr×   rK   r1   r1   r2   r$  A  s   
€zEncodedStreamObject.getDatac                 C   s
   t  d¡‚)Nz7Creating EncodedStreamObject is not currently supported)r   rE   r%  r1   r1   r2   r&  P  rN   zEncodedStreamObject.setDataN)r9   r:   r;   rM   r$  r&  r1   r1   r1   r2   r  =  s    r  c                   @   sö   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zeeed,d,ƒZ	 eeed,d,ƒZ	 eeed,d,ƒZ	 eeed,d,ƒZd,S )-ÚRectangleObjecta{  
    This class is used to represent *page boxes* in PyPDF2. These boxes include:

        * :attr:`artBox <PyPDF2.pdf.PageObject.artBox>`
        * :attr:`bleedBox <PyPDF2.pdf.PageObject.bleedBox>`
        * :attr:`cropBox <PyPDF2.pdf.PageObject.cropBox>`
        * :attr:`mediaBox <PyPDF2.pdf.PageObject.mediaBox>`
        * :attr:`trimBox <PyPDF2.pdf.PageObject.trimBox>`
    c                    s.   t |ƒdksJ ‚t ˆ ‡ fdd„|D ƒ¡ d S )Nr   c                    ó   g | ]}ˆ   |¡‘qS r1   ©ÚensureIsNumber©Ú.0r¡   r6   r1   r2   Ú
<listcomp>b  ó    z,RectangleObject.__init__.<locals>.<listcomp>)r(   r!   rM   )r7   rZ   r1   r6   r2   rM   ^  s   zRectangleObject.__init__c                 C   s   t |ttfƒst|ƒ}|S rJ   )ra   r'   rn   rL   r1   r1   r2   r,  d  s   zRectangleObject.ensureIsNumberc                 C   s   dt t| ƒƒ S )NzRectangleObject(%s))r|   rç   r6   r1   r1   r2   r`   i  r_   zRectangleObject.__repr__c                 C   ó   | d S r‚   r1   r6   r1   r1   r2   ÚgetLowerLeft_xl  r  zRectangleObject.getLowerLeft_xc                 C   r1  )Nr   r1   r6   r1   r1   r2   ÚgetLowerLeft_yo  r  zRectangleObject.getLowerLeft_yc                 C   r1  )Nr   r1   r6   r1   r1   r2   ÚgetUpperRight_xr  r  zRectangleObject.getUpperRight_xc                 C   r1  )Nr   r1   r6   r1   r1   r2   ÚgetUpperRight_yu  r  zRectangleObject.getUpperRight_yc                 C   r¿   rJ   )r2  r6   r1   r1   r2   ÚgetUpperLeft_xx  r  zRectangleObject.getUpperLeft_xc                 C   r¿   rJ   )r5  r6   r1   r1   r2   ÚgetUpperLeft_y{  r  zRectangleObject.getUpperLeft_yc                 C   r¿   rJ   )r4  r6   r1   r1   r2   ÚgetLowerRight_x~  r  zRectangleObject.getLowerRight_xc                 C   r¿   rJ   )r3  r6   r1   r1   r2   ÚgetLowerRight_y�  r  zRectangleObject.getLowerRight_yc                 C   ó   |   ¡ |  ¡ fS rJ   )r2  r3  r6   r1   r1   r2   ÚgetLowerLeft„  r_   zRectangleObject.getLowerLeftc                 C   r:  rJ   )r8  r9  r6   r1   r1   r2   ÚgetLowerRight‡  r_   zRectangleObject.getLowerRightc                 C   r:  rJ   )r6  r7  r6   r1   r1   r2   ÚgetUpperLeftŠ  r_   zRectangleObject.getUpperLeftc                 C   r:  rJ   )r4  r5  r6   r1   r1   r2   ÚgetUpperRight�  r_   zRectangleObject.getUpperRightc                    ó"   ‡ fdd„|D ƒ\ˆ d< ˆ d< d S )Nc                    r*  r1   r+  r-  r6   r1   r2   r/  ‘  r0  z0RectangleObject.setLowerLeft.<locals>.<listcomp>r   r   r1   rL   r1   r6   r2   ÚsetLowerLeft�  ó   "zRectangleObject.setLowerLeftc                    r?  )Nc                    r*  r1   r+  r-  r6   r1   r2   r/  ”  r0  z1RectangleObject.setLowerRight.<locals>.<listcomp>r   r   r1   rL   r1   r6   r2   ÚsetLowerRight“  rA  zRectangleObject.setLowerRightc                    r?  )Nc                    r*  r1   r+  r-  r6   r1   r2   r/  —  r0  z0RectangleObject.setUpperLeft.<locals>.<listcomp>r   r   r1   rL   r1   r6   r2   ÚsetUpperLeft–  rA  zRectangleObject.setUpperLeftc                    r?  )Nc                    r*  r1   r+  r-  r6   r1   r2   r/  š  r0  z1RectangleObject.setUpperRight.<locals>.<listcomp>r   r   r1   rL   r1   r6   r2   ÚsetUpperRight™  rA  zRectangleObject.setUpperRightc                 C   ó   |   ¡ |  ¡  S rJ   )r4  r2  r6   r1   r1   r2   ÚgetWidthœ  r_   zRectangleObject.getWidthc                 C   rE  rJ   )r5  r3  r6   r1   r1   r2   Ú	getHeightŸ  r_   zRectangleObject.getHeightN)r9   r:   r;   Ú__doc__rM   r,  r`   r2  r3  r4  r5  r6  r7  r8  r9  r;  r<  r=  r>  r@  rB  rC  rD  rF  rG  r½   Ú	lowerLeftÚ
lowerRightÚ	upperLeftÚ
upperRightr1   r1   r1   r2   r)  T  s>    	r)  c                   @   s¢   e Zd ZdZdd„ Zedd„ ƒZ	 edd„ ƒZ	 edd„ ƒZ	 edd„ ƒZ		 ed	d„ ƒZ
	 ed
d„ ƒZ	 edd„ ƒZ	 edd„ ƒZ	 edd„ ƒZ	 edd„ ƒZdS )ÚFieldz‰
    A class representing a field dictionary. This class is accessed through
    :meth:`getFields()<PyPDF2.PdfFileReader.getFields>`
    c              	   C   sB   t  | ¡ d}|D ]}z
|| | t|ƒ< W q	 ty   Y q	w d S )N)
ú/FTr
  ú/Kidsú/Tú/TUú/TMú/Ffú/Vú/DVú/AA)r   rM   r   ÚKeyError)r7   rV   Ú
attributesÚattrr1   r1   r2   rM   ½  s   
ÿýzField.__init__c                 C   ó
   |   d¡S )NrN  ©rá   r6   r1   r1   r2   rº   Ç  ó   
 zField.<lambda>c                 C   rZ  )Nr
  r[  r6   r1   r1   r2   rº   Ì  r\  c                 C   rZ  )NrO  r[  r6   r1   r1   r2   rº   Ñ  r\  c                 C   rZ  )NrP  r[  r6   r1   r1   r2   rº   Ö  r\  c                 C   rZ  )NrQ  r[  r6   r1   r1   r2   rº   Û  r\  c                 C   rZ  )NrR  r[  r6   r1   r1   r2   rº   à  r\  c                 C   rZ  )NrS  r[  r6   r1   r1   r2   rº   ç  r\  c                 C   rZ  )NrT  r[  r6   r1   r1   r2   rº   í  r\  c                 C   rZ  )NrU  r[  r6   r1   r1   r2   rº   ó  r\  c                 C   rZ  )NrV  r[  r6   r1   r1   r2   rº   ø  r\  N)r9   r:   r;   rH  rM   r½   Ú	fieldTypeÚparentÚkidsrÒ   ÚaltNameÚmappingNameÚflagsrK   ÚdefaultValueÚadditionalActionsr1   r1   r1   r2   rM  ¸  s.    
rM  c                   @   s–   e Zd ZdZdd„ Zdd„ Zdd„ Zedd	„ ƒZ	 ed
d	„ ƒZ		 edd	„ ƒZ
	 edd	„ ƒZ	 edd	„ ƒZ	 edd	„ ƒZ	 edd	„ ƒZ	 e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 int page: Page number of this destination.
    :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.

    Valid ``typ`` arguments (see PDF spec for details):
             /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]
    c                 G   sâ   t  | ¡ || tdƒ< || tdƒ< || tdƒ< |dkr.|\| tdƒ< | tdƒ< | tdƒ< d S |dkrJ|\| tdƒ< | td	ƒ< | td
ƒ< | tdƒ< d S |dv rW|\| tdƒ< d S |dv rd|\| tdƒ< d S |dv rjd S t d| ¡‚)Nú/Titleú/Pageú/Typez/XYZú/Leftú/Topú/Zoomz/FitRú/Bottomú/Right)z/FitHz/FitBH)z/FitVz/FitBV)z/Fitz/FitBzUnknown Destination Type: %r)r   rM   r   r   rE   )r7   ÚtitleÚpageÚtypÚargsr1   r1   r2   rM     s&   
ÿÿzDestination.__init__c                    s(   t ˆ  d¡ˆ d g‡ fdd„dD ƒ ƒS )Nrg  rh  c                    s   g | ]
}|ˆ v rˆ | ‘qS r1   r1   r-  r6   r1   r2   r/  ,  ó    z,Destination.getDestArray.<locals>.<listcomp>)ri  rl  rm  rj  rk  )r!   rØ   r6   r1   r6   r2   ÚgetDestArray+  s   (zDestination.getDestArrayc                 C   sš   |  tdƒ¡ tdƒ}| ||¡ |  tdƒ¡ |  ¡ }| ||¡ tdƒ}| ||¡ |  tdƒ¡ tdƒ}| ||¡ |  tdƒ¡ |  tdƒ¡ d S )Nrå   z/DrT   z/Sz/GoTor   ræ   )r@   r   r   rC   rs  ré   r1   r1   r2   rC   .  s   zDestination.writeToStreamc                 C   rZ  )Nrf  r[  r6   r1   r1   r2   rº   ?  r\  zDestination.<lambda>c                 C   rZ  )Nrg  r[  r6   r1   r1   r2   rº   F  r\  c                 C   rZ  )Nrh  r[  r6   r1   r1   r2   rº   M  r\  c                 C   ó   |   dd ¡S )Nrk  r[  r6   r1   r1   r2   rº   T  ó    c                 C   rt  )Nri  r[  r6   r1   r1   r2   rº   [  ru  c                 C   rt  )Nrm  r[  r6   r1   r1   r2   rº   b  ru  c                 C   rt  )Nrj  r[  r6   r1   r1   r2   rº   i  ru  c                 C   rt  )Nrl  r[  r6   r1   r1   r2   rº   p  ru  N)r9   r:   r;   rH  rM   rs  rC   r½   rn  ro  rp  ÚzoomÚleftÚrightÚtopÚbottomr1   r1   r1   r2   re     s*    re  c                   @   r3   )ÚBookmarkc                    sº   |  tdƒ¡ ‡ fdd„dD ƒD ]!}| ||¡ |  tdƒ¡ ˆ  |¡}| ||¡ |  tdƒ¡ qtdƒ}| ||¡ |  tdƒ¡ ˆ  ¡ }| ||¡ |  tdƒ¡ |  tdƒ¡ d S )	Nrå   c                    s   g | ]
}|ˆ v rt |ƒ‘qS r1   )r   r-  r6   r1   r2   r/  {  rr  z*Bookmark.writeToStream.<locals>.<listcomp>)rf  r
  rÿ   r  r  r	  rT   r   z/Destræ   )r@   r   rC   rØ   r   rs  ré   r1   r6   r2   rC   y  s   
zBookmark.writeToStreamN)r9   r:   r;   rC   r1   r1   r1   r2   r{  x  r<   r{  c              
   C   sL   t dƒ}| D ]}z|t tt| ƒƒ7 }W q ty#   td|dddƒ‚w |S )Nrg   Úpdfdocencodingr   ú#does not exist in translation table)r   rŸ   Ú_pdfDocEncoding_revrW  rÆ   )Úunicode_stringr™   r¬   r1   r1   r2   rÄ   Š  s   
ÿÿrÄ   c                 C   sL   t dƒ}| D ]}tt|ƒ }|t dƒkrtdt |¡dddƒ‚||7 }q|S )Nrg   rê   r|  r   r}  )r   Ú_pdfDocEncodingr	   r•   r   Úbarray)Ú
byte_arrayr™   r¨   r¬   r1   r1   r2   r“   •  s   ÿ
r“   rê   u   Ë˜u   Ë‡u   Ë†u   Ë™u   Ë�u   Ë›u   Ëšu   ËœrT   ú!ú"r°   r³   r®   r²   ú'r¢   r£   Ú*ú+ú,ú-r�   r­   ro   Ú1Ú2Ú3Ú4Ú5Ú6Ú7Ú8Ú9ú:ú;r¯   ú=r›   ú?ú@ÚAÚBÚCÚDrò   ÚFÚGÚHÚIÚJÚKÚLÚMÚNÚOÚPÚQri   ÚSÚTÚUÚVÚWÚXÚYÚZrS   r¤   rW   ú^r±   ú`Úar¨   r¬   ÚdrÓ   rª   ÚgÚhr¸   ÚjÚkÚlÚmr¥   ry   ÚpÚqrm   rë   r¦   ÚuÚvÚwr¡   ÚyÚzÚ{ú|Ú}ú~u   â€¢u   â€ u   â€¡u   â€¦u   â€”u   â€“u   Æ’u   â�„u   â€¹u   â€ºu   âˆ’u   â€°u   â€žu   â€œu   â€�u   â€˜u   â€™u   â€šu   â„¢u   ï¬�u   ï¬‚u   Å�u   Å’u   Å u   Å¸u   Å½u   Ä±u   Å‚u   Å“u   Å¡u   Å¾u   â‚¬õ   Â¡õ   Â¢õ   Â£õ   Â¤õ   Â¥õ   Â¦õ   Â§õ   Â¨õ   Â©õ   Âªõ   Â«õ   Â¬õ   Â®õ   Â¯õ   Â°õ   Â±õ   Â²õ   Â³õ   Â´õ   Âµõ   Â¶õ   Â·õ   Â¸õ   Â¹õ   Âºõ   Â»õ   Â¼õ   Â½õ   Â¾õ   Â¿õ   Ã€õ   Ã�õ   Ã‚õ   Ãƒõ   Ã„õ   Ã…õ   Ã†õ   Ã‡õ   Ãˆõ   Ã‰õ   ÃŠõ   Ã‹õ   ÃŒõ   Ã�õ   ÃŽõ   Ã�õ   Ã�õ   Ã‘õ   Ã’õ   Ã“õ   Ã”õ   Ã•õ   Ã–õ   Ã—õ   Ã˜õ   Ã™õ   Ãšõ   Ã›õ   Ãœõ   Ã�õ   Ãžõ   ÃŸõ   Ã õ   Ã¡õ   Ã¢õ   Ã£õ   Ã¤õ   Ã¥õ   Ã¦õ   Ã§õ   Ã¨õ   Ã©õ   Ãªõ   Ã«õ   Ã¬õ   Ã­õ   Ã®õ   Ã¯õ   Ã°õ   Ã±õ   Ã²õ   Ã³õ   Ã´õ   Ãµõ   Ã¶õ   Ã·õ   Ã¸õ   Ã¹õ   Ãºõ   Ã»õ   Ã¼õ   Ã½õ   Ã¾õ   Ã¿é   )>rH  Ú
__author__Ú__author_email__r‰   r   r   r   r   r   r   r   r	   r
   rÎ   rg   r   rp   r�   Úsysr   r&   rŠ   r)   r%   Úobjectr4   r$   r"   rç   r!   r+   rq   rn   rl   r'   rš   r    r#   r�   r–   r‹   rŒ   rt   r   rÔ   r   rþ   rõ   r  r  r)  rM  re  r{  rÄ   r“   r€  r(   r~  r¶   r¸   Úcharr1   r1   r1   r2   Ú<module>   sj  /7K.  .dHx
ÿÿÿÿÿÿÿÿþþþþþþþþýýýýýýýýüüüüüüüüûûûûûûûûúúúúúúúúùùùùùùùùøøøøøøøø	÷	÷	÷	÷	÷	÷	÷	÷
ö
ö
ö
ö
ö
ö
ö
öõõõõõõõõôôôôôôôôóóóóóóóóòòòòòòòòññññññññððððððððïïïïïïïïîîîîîîîîííííííííììììììììëëëëëëëëêêêêêêêêééééééééèèèèèèèèççççççççææææææææååååååååääääääääããããããããââââââââáááááááá à à à à à à à à#û