
    kfZd                       d Z d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
 ddl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mZmZ dd	lmZ dd
lmZ ddlmZ  G d de           Z!dZ"dZ#dZ$dZ%dZ&dZ' e(d          Z)d Z*ddZ+d Z,e,Z- G d d          Z. G d d          Z/ G d de/          Z0 G d d e/          Z1d!Z2d"Z3d#Z4 G d$ d%e/          Z5d& Z6ddl7Z7 e7j8        d'          Z9[7d( Z:d) Z; G d* d+e/          Z< e=d,           e=d-          fd.Z> G d/ d0e/          Z? G d1 d2          Z@d3 ZA G d4 d5e?          ZB G d6 d7eB          ZC G d8 d9          ZD eD            ZE G d: d;          ZF eF            ZG G d< d=e/          ZHdd>ZId?ZJ G d@ dAe/          ZK G dB dCeK          ZL G dD dEe/          ZM G dF dGe/          ZN G dH dIe/          ZO G dJ dKe/          ZP G dL dMe/          ZQ G dN dOe/          ZR G dP dQeH          ZS G dR dSe/          ZT G dT dUeT          ZU G dV dWeT          ZV G dX dYe           ZW G dZ d[eT          ZX G d\ d]eT          ZYd^ ZZd_Z[ G d` dae/          Z\ G db dce/          Z] G dd dee/          Z^ddfZ_dgZ` G dh die/          Za G dj dke/          Zb G dl dmeb          Zc G dn doeb          Zd G dp dqeb          Ze G dr dsee          Zfdt Zg G du dve/          Zh G dw dxe/          Zi G dy dze/          Zj G d{ d|e/          Zk G d} d~e/          Zl G d del          Zm G d de/          Zn G d den          Zo G d de/          Zp G d dep          Zq G d de/          Zr G d de/          Zs G d de/          Zt G d det          Zu G d de/          Zv G d de/          ZwddddZx G d de/          Zy G d d          Zz G d de/          Z{ G d de{          Z| G d de{          Z} G d de/          Z~ G d de~          Z G d de~          Z G d de~          Zedk    r ed           dS dS )z4.2.0a_  
The module pdfdoc.py handles the 'outer structure' of PDF documents, ensuring that
all objects are properly cross-referenced and indexed to the nearest byte.  The
'inner structure' - the page descriptions - are presumed to be generated before
each page is saved.
pdfgen.py calls this and provides a 'canvas' object to handle page marking operators.
piddlePDF calls pdfgen and offers a high-level interface.

The classes within this generally mirror structures in the PDF file
and are not part of any public interface.  Instead, canvas and font
classes are made available elsewhere for users to manipulate.
    N)OrderedDict)pdfutils)	rl_config)
open_for_readmakeFileNameisSeqisBytes	isUnicode	_digesterisStrbytestrannotateException	TimeStamp)	escapePDFfp_strasciiBase85EncodeasciiBase85Decode)
pdfmetrics)md5)stderrc                       e Zd ZdS )PDFErrorN__name__
__module____qualname__     X/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/reportlab/pdfbase/pdfdoc.pyr   r              Dr   r   __InternalName____RefOnly____Comment__
BasicFontsPages)      )r&      )transparencyc                 Z    t          | t                    r|                     d          n| S )N	extpdfdoc)
isinstancestrencode)xs    r   	pdfdocEncr0   5   s(    $.q$5$5<188K   1<r   c                 n   t          | t                    r|s=t          | t                    r(|                    |                               |          S |                     |          }t          j        s;t          j        r/t          | t                    rt          d| j	        z            |z   }|S t          |           t          t          fv rt          t          |                     S t          |           r| S t!          |           rt          |           S t          t#          |                     S )zIndirection step for formatting.
       Ensures that document parameters alter behaviour
       of formatting for all elements.
    z%% %s
)r,   	PDFObjecthasattrr"   	Referenceformatr   	invariantpdfCommentsr#   r0   typefloatintr   r	   r
   r-   )elementdocumenttoplevelfs       r   r5   r5   8   s   
 ')$$ ' 	GG[99 	 %%g..55h???x((A& A9+@ AWWVaEbEb Ai'*==>>q@H	g5#,	&	& )))			 '	7		 '!!!W&&&r   c                     d| z  S )Nz
FormXob.%sr   )externalnames    r   xObjectNamerA   R   s    ,&&r   c                   &    e Zd Zd Zd Zd Zd ZdS )NoEncryptionc                     |S )zencode a string, stream, textr   )selfts     r   r.   zNoEncryption.encodeZ   s    r   c                     d S Nr   rE   r<   s     r   preparezNoEncryption.prepare]       r   c                     d S rH   r   )rE   objnumversions      r   registerzNoEncryption.register`   rK   r   c                     d S rH   r   rE   s    r   infozNoEncryption.infoc   s    tr   N)r   r   r   r.   rJ   rO   rR   r   r   r   rC   rC   Y   sP                  r   rC   c                       e Zd ZdS )r2   Nr   r   r   r   r2   r2   g   r    r   r2   c                   &    e Zd ZdZ e            ZdS )DummyDocz'used to bypass encryption when requiredN)r   r   r   __doc__rC   encryptr   r   r   rU   rU   j   s        --lnnGGGr   rU   c                      e Zd ZdZ e            Zdej        ej        de	dfdZ
d Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d%d!Z'd" Z(d# Z)d&d$Z*dS )'PDFDocumentNr   c                    d | _         d| _        d| _        d | _        d| _        |t
          j        | _        n|| _        |                     |           || _        t                      x}| _
        |                    d           t          | j                  | _        | j        j        }t          |          }|                    t!          |                     i | _        i | _        i | _        i | _        t+                      x}x| _        | _        t1                      x}	| _        |	|_        |r|nt
          j        }|rt7          |          |_        |rt;                      nt=                      x| _        x| _         |_         tC                      | _"        i | _#        tI          i           }
d|
_%        | &                    |
tN                     g | _(        d S )Nr   r&   s   a reportlab documentzThe standard fonts dictionary))_IDobjectcountershadingCounterinObjectpageCounterr   r6   setCompression_pdfVersionr   	signatureupdater   
_timeStamprF   asciir   idToObjectNumberAndVersion
idToObject
idToOffset
numberToId
PDFCatalogCatalog_catalogPDFPagesr%   documentLang	PDFStringLangPDFOutlines0PDFOutlinesoutlineOutlinesPDFInforR   fontMappingPDFDictionaryr#   r4   r$   delayedFonts)rE   dummyoutlinecompressionr6   filename
pdfVersionlangsigcatpagesDDs              r   __init__zPDFDocument.__init__s   s     &0DNN&DNK(((%"uu$dn

*+++#DN33oCjj

73<<   *,'-7\\99dlT]%ZZ'
	7tt!7 	' CHHT6glnnnZeZgZgggt}s|II	 28r:&&&r   c                     || _         d S rH   rz   rE   onoffs     r   r`   zPDFDocument.setCompression   s     r   c                 Z    |D ]'}t          | j        t          |                   | _        (dS )zREnsure that the pdf version is greater than or equal to that specified by the keysN)maxra   PDF_SUPPORT_VERSION)rE   keysks      r   ensureMinPdfVersionzPDFDocument.ensureMinPdfVersion   s=     	M 	MA"4#35H5KLLD	M 	Mr   c                 f    | j         rdS | j                            t          |                     dS )z add information to the signatureN)r[   rb   rc   r   )rE   things     r   updateSignaturezPDFDocument.updateSignature   s0    8VVgenn-----r   c                     | j         r| j         S | j                                        }t                      }t	          |d                              |          }d|z   |z   dz   | _         | j         S )z<A unique fingerprint for the file (unless in invariant mode)raw)encs   
[sJ   ]
% ReportLab generated PDF document -- digest (http://www.reportlab.com)
)r[   rb   digestrU   PDFTextr5   )rE   r   docIDss       r   IDzPDFDocument.ID   sk    8 	8O&&((jjf'''..s333JsN#rrxr   c                 x   t          | dd          rt          d| j        j        z            d| _        t          t          |dd           d          rmd}|}t          |dd           }t          |t                    rd	|z  }n-t          |          sd
|j        j        t          |          fz  }t          |          }nPt          |          r"d}t          |          }t          |d          }nt          dt          |          z            |                     |          }t          |          r|                    d          }|                    |           |r4|                                 dd l}|j        dk    rddlm}  ||           t          |dd           rt/          d|           d S d S )N_savedToFileFz)class %s instances can only be saved onceTwrite__call__r   namez
<os fd:%d>z<%s@0X%8.8X>r&   wbz#Cannot use %s as a filename or filelatin1mac)markfilename
_verbosityzsaved )getattrRuntimeError	__class__r   r   r3   r,   r:   r   idr   open	TypeErrorrepr
GetPDFDatar
   r.   r   closeosr   reportlab.lib.utilsr   print)rE   r{   canvasmyfiler>   datar   r   s           r   
SaveToFilezPDFDocument.SaveToFile   s   4u-- 	fJT^Mddeee 78WT22:>> 	TFAq--H(3'' I'18__ I)Q[-A"Q%%,HH#H--HH8__ 	TF#H--HXt$$AAADNNRSSSv&&T?? 	);;x((D	 	'GGIIIIIIw~~<<<<<<X&&&6,t,,Mee((4L.M.M.M.M.MMMr   c                    | j         D ]}|                    |            | j        | j        _        | j                            | j                   |                     | j                   |                     | j                   | j        	                    | |           | j        j
        dk     rd | j        _        |                                 S Nr   )rx   
addObjectsr6   rR   r   rb   r4   rk   rt   rJ   readyr5   )rE   r   fnts      r   r   zPDFDocument.GetPDFData   s    $ 	! 	!CNN4    "n		((( 	t|$$$ty!!!dF+++=q  $(DL!{{}}r   c                 j    | j         $| j         dk    rdS t          d| j         z            d| _         dS )zXspecify the current object as a page (enables reference binding and other page features)Npagez%can't go in page already in object %s)r^   
ValueErrorrQ   s    r   inPagezPDFDocument.inPage   s<    =$}f$$ffDt}TUUUr   c                     d| _         dS )zBspecify that we are in a form xobject (disable page features, etc)formN)r^   rQ   s    r   inFormzPDFDocument.inForm   s    
 r   c                 2   | j         }||v r||         S 	 t          j        |          }|j        rt	          dt          |          z            |                    |            ||         S # t          $ r  t	          dt          |          z            w xY w)Nz1getInternalFontName(%s) called for a dynamic fontzFont %s not known!)rv   r   getFont_dynamicFontr   r   r   KeyError)rE   
psfontnamefmfontObjs       r   getInternalFontNamezPDFDocument.getInternalFontName   s    j>!H$,Z88' k"#VY]^hYiYi#ijjj""4(((*~% H H H3d:6F6FFGGGHs   AA, ,*Bc                 0    dt          | j                  z   S )NPage)r   r_   rQ   s    r   thisPageNamezPDFDocument.thisPageName  s    d4+,,,,r   c                 D    t          |                                           S rH   )PDFObjectReferencer   rQ   s    r   thisPageRefzPDFDocument.thisPageRef  s    !$"3"3"5"5666r   c                     |                                  }|                     ||           | j                            |           | xj        dz  c_        d | _        d S )Nr&   )r   r4   r%   addPager_   r^   )rE   r   r   s      r   r   zPDFDocument.addPage  s\      ""tT"""
4   Ar   c                     | j         dk    r|                                  |                     |t          |                     d| _         dS )zadd a Form XObject.r   N)r^   r   r4   rA   )rE   r   r   s      r   addFormzPDFDocument.addForm  sE     =F""KKMMMt[..///r   c                     d|z  S )NzAnnot.%sr   )rE   r@   s     r   annotationNamezPDFDocument.annotationName#  s    ,&&r   c                 X    |                      ||                     |                     d S rH   )r4   r   )rE   r   
annotations      r   addAnnotationzPDFDocument.addAnnotation&  s*    z4#6#6t#<#<=====r   c                 J    |                      |          }t          |          S rH   )r   r   rE   r   internalnames      r   refAnnotationzPDFDocument.refAnnotation)  s#    **400!,///r   c                 f    d| j         z  }|                     ||           | xj         dz  c_         |S )NzSh%dr&   )r]   r4   )rE   shadingr   s      r   
addShadingzPDFDocument.addShading-  s<    ,,		&	&	&				!		r   c                 <   |j         }|s|j        dk    r|j        dk    r|j        dk    rd}nk|j        dk    r|j        dk    r|j        dk    rd}nG|j        dk    r|j        dk    r|j        dk    rd}n#|j        dk    r|j        dk    r|j        dk    rd}|st          d|z            |                    |          }t          |          dd          }|| j        vr7t          |          
                                }|                     ||           ||fS )	Nr   BLACKCYANMAGENTAYELLOWz&CMYK colour %r used without a spotName)spotNamer&   )r   cyanmagentayellowblackr   clonePDFNamerg   PDFSeparationCMYKColorvaluer4   )rE   cmyksnamer   seps        r   addColorzPDFDocument.addColor3  s.    	4y!||aDKNNQ4<??t{A~~A$*a--DKNN!A$,//dj!mm  4 !ID!PQQQzzUz33u~~abb!t&&(..4466CNN3t$$$Ezr   c                 >    |d| j         _        dS || j         _        dS )embeds in PDF fileN(anonymous))rR   title)rE   r   s     r   setTitlezPDFDocument.setTitleH  s!    =+DIOOO#DIOOOr   c                 >    |d| j         _        dS || j         _        dS )zembedded in PDF fileNr   )rR   author)rE   r   s     r   	setAuthorzPDFDocument.setAuthorO  s)     >,DI%DIr   c                 >    |d| j         _        dS || j         _        dS r   Nz(unspecified))rR   subject)rE   r   s     r   
setSubjectzPDFDocument.setSubjectW  s)     ? /DI 'DIr   c                 >    |d| j         _        dS || j         _        dS r   )rR   creator)rE   r   s     r   
setCreatorzPDFDocument.setCreator`  s'    ? /DI 'DIr   c                 H    |t           | j        _        dS || j        _        dS )r   N)_default_producerrR   producer)rE   r   s     r   setProducerzPDFDocument.setProducerg  s(    !2DI!)DIr   c                 >    |d| j         _        dS || j         _        dS )z/embeds a string containing keywords in PDF fileN )rR   keywords)rE   r  s     r   setKeywordszPDFDocument.setKeywordsn  s*     !#DI!)DIr   c                     || j         _        d S rH   )rR   _dateFormatter)rE   dateFormatters     r   setDateFormatterzPDFDocument.setDateFormatterw  s    #0	   r   c                     t          | j                                                  }ddlm} |j        D ]}||vr|                    |           |                                 |S )Nr   )	_fontdata)listrv   r   reportlab.pdfbaser
  standardFontsappendsort)rE   	fontnamesr
  r   s       r   getAvailableFontszPDFDocument.getAvailableFontsz  sx    )..0011	//////+ 	' 	'D9$$  &&&r   c           	         | j                             |            | j        }| j        }|                     |           |                     |           d }| j                                         }|r|                     |          }d}g }| j        }| j        }| j        }	| j        }
t          | j
                  x| _        }	 |dz  }||vrn||         }|	|         }t          ||          }|                    |           }t          j        sat          j        rU	 |j        j        }n#  t'          |          }Y nxY w|                    dt'          |          d|d d         d           |                    |          }||
|<   |                    |           | `t-          |          }|dz
  |k    rt/          d|d	|          t1                      }|                    d|           |                    |           }|                    |          }t5          ||dz   |                     |          |                     |          ||                                 
          }|                    |           }|                    |           t9          | dg           D ]}|                    |           |                    |           S )Nr   Tr&   z% z: class 2   z 
zcounter z' doesn't match number to id dictionary )	startxrefSizeRootInfoEncryptr   	_digiSigs)rW   rJ   rk   rR   r4   ri   rf   rg   rh   PDFFilera   	__accum__PDFIndirectObjectr5   r   r6   r7   r   r   re   addr  lenr   PDFCrossReferenceTable
addsection
PDFTrailerr   r   sign)rE   r   rR   
encryptrefencryptinfocounterids
numbertoididToNVidToObidToOfFileoidobjIOIOf	classnameoffsetlnoxrefxreff
xrefoffsettrailertrailerfdss                            r   r5   zPDFDocument.format  s    	T"""lyst
l'')) 	544J_
0 !((8 9 99	qLGj((%W%C+C"3,,B))D//C& N9+@ N+ # 6II+ %c

IIIsYss^^^LMMMXXc]]F F3KJJsOOO%	& N*oo19c>>*U\U\U\^a^abccc%''3D!!XXe__
"q5>>#&&>>$''    >>$''${2.. 	 	BGGDMMMM{{4   s   D& &D9c                 2    t          |          }|| j        v S )z test for existence of named form)rA   rg   r   s      r   hasFormzPDFDocument.hasForm  s    "4((t..r   MediaBoxc                    t          |          }|| j        v r| j        |         }t          |d          r|j        |         S t	          |t
                    r|                                S t	          |t                    r$t          |j	        j
        |         j                  S t          dt          |          z            dS )zget the declared bounding box of the form as a list.
        If you specify a different PDF box definition (e.g. the
        ArtBox) and it has one, that's what you'll get._extra_pageCatcher_infoz'I don't understand the form instance %sN)rA   rg   r3   r=  r,   PDFFormXObjectBBoxList	PDFStreamr  
dictionarydictsequencer   r   )rE   r   boxTyper   theforms        r   getFormBBoxzPDFDocument.getFormBBox  s     #4((4?**ol3Gw899 @6w??'>22 Y'')))GY// YG.3G<EFFF !JTRVZZ!WXXX +*r   c                      t          |          S )ziLets canvas find out what form is called internally.
        Never mind whether it is defined yet or not.)rA   rE   r   s     r   getXObjectNamezPDFDocument.getXObjectName  s     4   r   c                 t    i }|D ]%}t          |          }t          |          }|||<   &t          |          S )zconstruct an xobject dict (for inclusion in a resource dict, usually)
           from a list of form names (images not yet supported))rA   r   rw   )rE   	formnamesDr   r   	references         r   xobjDictzPDFDocument.xobjDict  sK      	( 	(D&t,,L*<88I'AlOOQr   c                    t          |t                    }| j        }||r|j        t          u r|S t          |t                    r|j        }|5||k    r/t          dt          |          dt          |                    ||vr0t          dt          |          dt          |          d          t	          |          S | j        dz   x}| _        |dt          |          z   }||v r<||         }||k    rt          dt          |          z             t	          |          S |r||_        |d	f| j        |<   || j        |<   |||<   t	          |          S )
Nzattempt to reregister object z with new name zobject of type z
 named as z, but not registeredr&   Rzredefining named object: r   )r,   r2   rg   r   r   r3   r!   r   r   r8   re   r\   rf   ri   )rE   r-  r   iobrg   intnamer\   others           r   r4   zPDFDocument.Reference  s    Y''_
<<9K(K(KJ3()) 	/*GD'MM jMMMM4:::"/ 0 0 0j(( jX\]`XaXaXaXabghobpbpbpbp!qrrr%g...-1-?-AA*<tM***D:t$Eczz !<T$ZZ!GHHH%d+++ 	(#'C 1>0B'-)-&
4!$'''r   )r;  rH   )+r   r   r   defaultStreamFiltersrC   rW   r   pageCompressionr6   PDF_VERSION_DEFAULTr   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r5   r:  rF  rI  rN  r4   r   r   r   rY   rY   o   sN       lnnG&6$./3 3 3 3j! ! !M M M
. . .
  N N N@       H H H- - -7 7 7    ' ' '> > >0 0 0    *$ $ $& & &( ( (( ( (* * ** * *1 1 1  C! C! C!J/ / /
Y Y Y Y$! ! !
	  	  	 ( ( ( ( ( (r   rY   truefalsenullc                   "    e Zd ZddZd Zd ZdS )r   utf-8c                 "    || _         || _        d S rH   )rF   r   )rE   rF   r   s      r   r   zPDFText.__init__  s    r   c                     | j         }t          |          r|                    | j                  }t	          j        |j                            |                    }d|z   dz   S )N   <   >)rF   r
   r.   r   binasciihexlifyrW   )rE   r<   rF   results       r   r5   zPDFText.format  sZ    FQ<< 	#""A!("2"9"9!"<"<==f}t##r   c                 H    t                      }|                     |          S rH   )rU   r5   )rE   dummydocs     r   __str__zPDFText.__str__   s    ::{{8$$$r   N)r[  )r   r   r   r   r5   re  r   r   r   r   r     sF           $ $ $% % % % %r   r   c                     | S rH   r   )ns    r   	PDFnumberrh  $  s    Hr   z[^()]c                     t                               d|           } d}| D ]}|dk    r|dz  }|dz  }|dk     r dS | rdpdS )z+test whether a string is balanced in parensr  r   (r&   )_re_cleanparenssub)srg  cs      r   _isbalancedro  *  si    Bq!!A	A  c661a411FAss111s5;Q!r   c                 b    	 |                      d           dS # t          $ r}Y d}~dS d}~ww xY w)z(return true if no Pdfdoc encoding errorspdfdocr&   Nr   )r.   UnicodeEncodeError)utextes     r   _checkPdfdocru  5  sJ    Xq   qqqqqs    
..c                   &    e Zd ZdZddZd Zd ZdS )	ro   Fr&   autoc                     t          |t                    r&|j        | _        |j        | _        |j        | _        dS || _        || _        || _        dS )az  s can be unicode/utf8 or a PDFString
        if escape is true then the output will be passed through escape
        if enc is raw then bytes will be left alone
        if enc is auto we'll try and automatically adapt to utf_16_be/utf_16_le if the
        effective string is not entirely in pdfdoc
        if self.unicodeEncValid unicode will use the specifed encoding
        N)r,   ro   rm  escaper   )rE   rm  ry  r   s       r   r   zPDFString.__init__?  sN     a	"" 	SDF(DKuDHHHDF DKDHHHr   c           	         | j         }t          | dd          }t          |          r|dk    r	 |                    t          j                  r|                    d          }nJ|                    t          j                  r|                    d          }n|                    d          }t          |          r|	                    d          }n"t          j        |	                    d          z   }n
#  	 |                    d           n*#  t          j        dt          |                      xY wY nxY wnt          |          r|dk    rHt          |          r|	                    d          }nt          j        |	                    d          z   }nd| j        r|	                    | j                  }nBt          j        |	                    d          z   }nt!          dt#          |          z            t          | d	d
          }t%          |j        t(                    s|j        	                    |          }d
}|r	 dt+          |          z  }n'#  t!          d|dt          |                    xY w|dz  r|                    dd          }|dz  r9t/          |          r*|                    dd                              dd          }t1          |          S d|z   dz   S )Nr   rw  	utf_16_be	utf_16_leutf8rq  z	Error in z-PDFString argument must be str/unicode not %sry  r&   (%s)zcannot escape     z\012
r(   z\(rj  z\))   (   ))rm  r   r	   
startswithcodecsBOM_UTF16_BEdecodeBOM_UTF16_LEru  r.   r   r   r   r
   unicodeEncValidr   r   r8   r,   rW   rC   r   replacero  r0   )rE   r<   rm  r   ury  ess          r   r5   zPDFString.formatO  s   Fd5((1:: 	Xf}}||F$788 -HH[11f&9:: -HH[11HHV,,#A FHHX.."/0E0EE****d1ggg%?@@@ +* $ q\\ 	Xf}}?? B**AA+AHH[,A,AAAA% >HHTX&&'(=(==LtTUwwVWWWhq))(*<88 	 ''**AF 	#Gill*G j!!!T!WWW!EFFFax .ZZ--ax >KOO >ZZc**225==R== !8d?"s0   CC9 9D><DD>'D99D>I   $Jc                 0    dt          | j                  z  S )Nr~  )r   rm  rQ   s    r   re  zPDFString.__str__  s    	$&))))r   N)r&   rw  )r   r   r   r  r   r5   re  r   r   r   ro   ro   =  sL        O    2# 2# 2#h* * * * *r   ro   !   ~   c                     t          |           }t          |          D ]?\  }}||k     s
||k    s|dv r*dt          t          |                    dd          z   ||<   @dd                    |          z   S )Nz
%()<>{}[]##r  /r  )r  	enumeratehexordjoin)r   lohiLirn  s         r   r   r     s{     	T

A|| ' '!R441R441,,s3q66{{122&AaD

r   c                   F    e Zd ZdZddZd Zd Zd Zd Zdd	Z	d
 Z
d ZdS )rw   TNc                 N    |	i | _         dS |                                | _         dS )zPdict should be namestring to value eg "a": 122 NOT pdfname to value NOT "/a":122N)rB  copy)rE   rB  s     r   r   zPDFDictionary.__init__  s%    <DIII		DIIIr   c                     || j         |<   d S rH   rB  )rE   r   r   s      r   __setitem__zPDFDictionary.__setitem__  s    	$r   c                     | j         |         S rH   r  rE   as     r   __getitem__zPDFDictionary.__getitem__  s    y|r   c                     || j         v S rH   r  r  s     r   __contains__zPDFDictionary.__contains__  s    DI~r   c                 V    |                     | j        |                   | j        |<   d S rH   )r4   rB  )rE   r   r<   s      r   r4   zPDFDictionary.Reference  s%    ",,TYt_==	$r      
 c                 2   | j         	 t                                                    }n"#  t          t	                                xY wt          t                    s|                                 fd|D             }| j        rt          j
        s| j        dk    r|                    |          }nV|j        }t          t          dt          |          d                    D ]} ||d           d                    |          }d|z   dz   S )Nc                 ~    g | ]9}t          t          |                    d z   t          |                   z   :S )    )r5   r   ).0r   rB  r<   s     r   
<listcomp>z(PDFDictionary.format.<locals>.<listcomp>  sA    WWWQfWQZZ))$.vd1gh/G/GGWWWr   forced   r  r  s   <<
s   
>>)rB  r  r   r   re   r,   r   r  	multiliner   pdfMultiLiner  insertreversedranger  )rE   r<   INDr   r  rF   r  rB  s    `     @r   r5   zPDFDictionary.format  s   y			$$DD	%++${++8TYY[[[WWWWWRVWWWN 	y5 	$.(:R:RAA hAeAs1vvq1122  !F		!Aqy  s	   !- Ac                 *    t          | j                  S rH   )rw   rB  rQ   s    r   r  zPDFDictionary.copy  s    TY'''r   c                     | j         }d |                                D             }|D ]"}|                    |          ||dd          <   #d S )Nc                 <    g | ]}|                     d           |S )r  )r  )r  r   s     r   r  z+PDFDictionary.normalize.<locals>.<listcomp>  s)    6661ALL$5$56Q666r   r&   )rB  r   pop)rE   rL  Kr   s       r   	normalizezPDFDictionary.normalize  sZ    I66666 	  	 AuuQxxAaeHH	  	 r   rH   r  )r   r   r   r  r   r  r  r  r4   r5   r  r  r   r   r   rw   rw     s        I$ $ $ $         > > >! ! ! !&( ( (         r   rw   c                       e Zd Zd Zd ZdS )checkPDFNamesc                 T    t          t          t          |                    | _        d S rH   )r  mapr   names)rE   r  s     r   r   zcheckPDFNames.__init__  s    #ge,,--


r   c                 d    |                     d          st          |          }|| j        v r|S d S )Nr  )r  r   r  )rE   r   s     r   r   zcheckPDFNames.__call__  s=    $$ 	!%..EDJL r   N)r   r   r   r   r   r   r   r   r  r    s2        . . .    r   r  c                     | dv r| S d S )N)rW  rX  r   )r   s    r   checkPDFBooleanr    s       ,  r   c                        e Zd Zi ZddZd ZdS )CheckedPDFDictionaryNc                 R    t                               | |           |r	|| _        d S d S rH   )rw   r   validate)rE   rB  r  s      r   r   zCheckedPDFDictionary.__init__  s.    tD)))-XT]]]--r   c                     || j         vrt          d|z             | j         |         |          }|t          d|d|          t                              | ||           d S )Nzinvalid key, %rz
Bad value z	 for key )r  r   rw   r  )rE   r   r   cvalues       r   r  z CheckedPDFDictionary.__setitem__  sw    t}$$.5666$t$U++>*%%%EFFF!!$tF33333r   NN)r   r   r   r  r   r  r   r   r   r  r    s<        H. . . .4 4 4 4 4r   r  c                      e Zd Z eeeeeee ed                                  ed                                  ed                                  ed                                  ed                                  ed                                  ed                                  ed                                           ZdS )ViewerPreferencesPDFDictionaryz#UseNone UseOutlines UseThumbs UseOCzL2R R2Lz(MediaBox CropBox BleedBox TrimBox ArtBoxzNone AppDefaultz.Simplex DuplexFlipShortEdge DuplexFlipLongEdge)HideToolbarHideMenubarHideWindowUI	FitWindowCenterWindowDisplayDocTitleNonFullScreenPageMode	DirectionViewAreaViewClip	PrintArea	PrintClipPrintScalingDuplexN)r   r   r   rB  r  r  splitr  r   r   r   r  r    s        T++,), /&3m5Z5`5`5b5b&c'-):):;&(R(X(X(Z(Z[&(R(X(X(Z(Z['-)S)Y)Y)[)[\'-)S)Y)Y)[)[\*],=,C,C,E,EF$}&V&\&\&^&^_  HHHr   r  c                       e Zd ZdZd Zd ZdS )PDFStreamFilterZCompressFlateDecodec                 r    t          |          r|                    d          }t          j        |          S )Nr}  )r
   r.   zlibcompressrE   texts     r   r.   zPDFStreamFilterZCompress.encode  s1    T?? 	';;v&&D}T"""r   c                 *    t          j        |          S rH   )r  
decompress)rE   encodeds     r   r  zPDFStreamFilterZCompress.decode  s    w'''r   Nr   r   r   pdfnamer.   r  r   r   r   r  r    s7        G# # #( ( ( ( (r   r  c                       e Zd ZdZd Zd ZdS )PDFStreamFilterBase85EncodeASCII85Decodec                 ^    ddl m} t          |          }t          j        r ||          }|S )Nr   )_wrap)reportlab.pdfbase.pdfutilsr  r   r   wrapA85)rE   r  r  s      r   r.   z"PDFStreamFilterBase85Encode.encode  s>    444444 && 	5;;Dr   c                      t          |          S rH   )r   r  s     r   r  z"PDFStreamFilterBase85Encode.decode  s     &&&r   Nr  r   r   r   r  r    s7        G  ' ' ' ' 'r   r  c                   $    e Zd ZdZdZddZd ZdS )r@  z@set dictionary elements explicitly stream.dictionary[name]=valuer&   Nc                 P    |t                      }|| _        || _        || _        d S rH   )rw   rA  contentfilters)rE   rA  r  r  s       r   r   zPDFStream.__init__	  s*    &J$r   c                 l   | j         }t          |j                                                  }| j        }| j        }| j        t          d          ||j        }|d|j        vryt          |          }|	                                 g }|D ]?}|
                    |          }|                    dt          |j                             @t          |          |d<   |j        
                    |          }t!          ||          }t#          |          |d<   t!          ||          }	|	dz   |z   dz   S )Nzstream content not setFilterr   Lengths   
stream
s
   endstream
)rA  rw   rB  r  r  r  r   rT  r  reverser.   r  r   r  PDFArrayrW   r5   r  )
rE   r<   rA  r  r  rffnamesr>   fcfds
             r   r5   zPDFStream.format  s5   _
":?#7#7#9#9::
,,<5666?3G8:?#B#BgBJJLLLF 5 5 ((7++a!3!34444 $,F#3#3Jx "))'22GX&&"7||
8J))-">11r   NNN)r   r   r   rV   r"   r   r5   r   r   r   r@  r@    sB        JJK   2 2 2 2 2r   r@  c                     | t           } |                                 dz   } t          | t          j        rt
          t          gpt          g          }d|_        |S )Nr  )r  r  ztest stream)teststreamcontentstripr@  r   useA85PDFBase85EncodePDFZCompressr#   )r  Ss     r   
teststreamr  /  s^    #mmoo$GG%,O/,1OaT`Sa	c 	c 	cA "AMHr   z\
1 0 0 1 0 0 cm BT /F9 12 Tf 14.4 TL ET
1.00 0.00 1.00 rg
n 72.00 72.00 432.00 648.00 re B*
c                   &    e Zd ZdZd Zd ZddZdS )r  Tc                 .    t          |          | _        d S rH   )r  rC  )rE   rC  s     r   r   zPDFArray.__init__A  s    Xr   c                 ^    t          t          |j        | j                            | _        dS )z'make all objects in sequence referencesN)r  r  r4   rC  rI   s     r   
ReferenceszPDFArray.ReferencesC  s$    S!3T]CCDDr   r  c                    fd| j         D             }| j        rt          j        s| j        dk    r|                    |          }ntt          |          }|dk    rJ|j        }t          t          d|d                    D ]} ||d           d                    |          }nd                    |          }d|z   dz   S )Nc                 0    g | ]}t          |          S r   )r5   )r  rt  r<   s     r   r  z#PDFArray.format.<locals>.<listcomp>G  s#    888QVAx  888r   r  
   r  r  s   [ s    ])	rC  r  r   r  r  r  r  r  r  )rE   r<   r  r  rg  rF   r  s    `     r   r5   zPDFArray.formatF  s    8888$-888N 	!y5 	!$.(:R:RAA!ffAtt(!%Ar"2"233    AAaKKKKIIaLLIIaLLqy5  r   Nr  )r   r   r   r  r   r  r5   r   r   r   r  r  ?  sN        I' ' 'E E E! ! ! ! ! !r   r  c                       e Zd ZdZdS )PDFArrayCompactFN)r   r   r   r  r   r   r   r  r  V  s        IIIr   r  c                       e Zd ZdZd Zd ZdS )r  r&   c                 "    || _         || _        d S rH   )r   r  )rE   r   r  s      r   r   zPDFIndirectObject.__init__[  s    	r   c                     | j         }|j        |         \  }}|j                            ||           t	          | j        |d          }t          |d|d          |z   |                    d          rdndz   dz   S )Nr&   r=   r  z obj
   
r   s   endobj
)r   rf   rW   rO   r5   r  r0   endswith)rE   r<   r   rg  vfcontents         r   r5   zPDFIndirectObject.format^  s    y2481!!!Q'''$,1===111-..'0077BUD 	r   N)r   r   r   r"   r   r5   r   r   r   r  r  Y  s7        K      r   r  c                       e Zd Zd Zd ZdS )r   c                     || _         d S rH   )r   rH  s     r   r   zPDFObjectReference.__init__i      			r   c                     	 t          d|j        | j                 z            S #  t          dt	          | j                  z            xY w)Nz%s %s Rz:forward reference to %s not resolved upon final formatting)r0   rf   r   r   r   rI   s     r   r5   zPDFObjectReference.formatk  sP    	kY)LTY)WWXXX	kWZ^_c_hZiZiijjjs	   !$ &A
Nr   r   r   r   r5   r   r   r   r   r   h  s7          k k k k kr   r   c                   *    e Zd ZefdZd Zd Zd ZdS )r  c                     g | _         | j         j        | _        d| _        |                     t          d|z            dz              d S )Nr   z%%PDF-%s.%ssA   
% ReportLab Generated PDF document http://www.reportlab.com
)stringsr  r   r1  r  r0   )rE   r|   s     r   r   zPDFFile.__init__s  sV    \(
 	)MJ677^_ 	 	 	 	 	r   c                     d S rH   r   rQ   s    r   closeOrResetzPDFFile.closeOrReset  s    r   c                     t          |          }| j        }|t          |          z   | _        |                     |           |S )zGshould be constructed as late as possible, return position where placed)r0   r1  r  r   )rE   rm  rb  s      r   r  zPDFFile.add  s9    aLLSVVm

1r   c                 6    d                     | j                  S )Nr   )r  r!  rI   s     r   r5   zPDFFile.format  s    xx%%%r   N)r   r   r   rV  r   r#  r  r5   r   r   r   r  r  q  sX        !4        & & & & &r   r  c                       e Zd Zd Zd ZdS )PDFCrossReferenceSubsectionc                 "    || _         || _        d S rH   )firstentrynumber
idsequence)rE   r)  r*  s      r   r   z$PDFCrossReferenceSubsection.__init__  s     0$r   c                    | j         }| j        }t          |          }t          |          }i }|dk    r d|d<   |dz   }|                    dd           |j        }|j        }||z   dz
  }	|D ]}
||
         \  }}||v r8t          d|dt          |
          dt          ||
                             ||	k    s||k     rt          d|d|d	|	          ||z
  }|
||<   ||
         }d
||fz  ||<   |d|}|                    d|           |	                    d           t          d                    |                    S )z`id sequence should represent contiguous object nums else error. free numbers not supported (yet)r   zstandard free entryr&   z0000000000 65535 f zobject number collision r  zobject number z not in range z..z%0.10d %0.5d n r  r  )r)  r*  r  r  r  rf   rh   r   r   r  r0   r  )rE   r<   r)  r*  entriesnentriestakenr(  rh   lastentrynumberr   numrN   rnumr1  	firstlines                   r   r5   z"PDFCrossReferenceSubsection.format  s   0_
z""z??Q,E!HzHNN134444(
*83A5 
	A 
	AB#BZNS'e|| jsssDQSHHHHVZ[`ac[dVeVeVe!fggg?""c*:&:&: j333P`P`P`bqbq!rsss''DE#J^F,/@@GCLL///:	q)$$$r7++,,,r   Nr  r   r   r   r'  r'    s2        % % %- - - - -r   r'  c                        e Zd Zd Zd Zd ZdS )r  c                     g | _         d S rH   )sectionsrQ   s    r   r   zPDFCrossReferenceTable.__init__  s    r   c                 Z    t          ||          }| j                            |           d S rH   )r'  r5  r  )rE   
firstentryr&  sections       r   r   z!PDFCrossReferenceTable.addsection  s-    -j#>>W%%%%%r   c                     | j         }|st          d          dg}| j         D ]'}t          ||          }|                    |           (t	          d                    |                    S )Nzno crossref sectionss   xref
r   )r5  r   r5   r  r0   r  )rE   r<   r5  r  rm  fss         r   r5   zPDFCrossReferenceTable.format  sp    = 	53444K 	 	A8$$BHHRLLLL!%%%r   N)r   r   r   r   r   r5   r   r   r   r  r    sA          & & && & & & &r   r  c                       e Zd ZddZd ZdS )r!  Nc                     || _         ||t          d          t                      x}| _        d|fd|fd|fd|fd|fd|ffD ]\  }	}
|
|
||	<   d|_        d S )	NzSize and Root keys requiredr  Prevr  r  r   r  r  )r  r   rw   rB  r  )rE   r  r  r=  r  r  r   r  rB  rg  r  s              r   r   zPDFTrailer.__init__  s    "<4<:;;;(??*tytnvtnvtntntRj9g2FH 	 	EQq}Qr   c           
          | j                             |d          }d                    d|dt          t	          | j                            dg          S )Nr  r  r   s   trailer
s   
startxref
s   
%%EOF
)rB  r5   r  r0   r-   r  )rE   r<   fdicts      r   r5   zPDFTrailer.format  sX    	  e 44xx #dn--..   	r   )NNNNNNr  r   r   r   r!  r!    s7        	  	  	  	 	 	 	 	 	r   r!  c                   0     e Zd Zd fd	Z fdZd Z xZS )XMPNc           
      .   |r|rt          d          |s|st          d          t                                          t          t	          t          d          t          d                                         || _        d | _        || _        d S )Nz5XMP is ambiguous with both path and creator argumentsz-XMP needs at least a path or creator argumentMetadataXML)TypeSubtype)rA  )	r   superr   rw   rB  r   
_XMP__path_XMP__pathContent_XMP__creator)rE   pathr   r   s      r   r   zXMP.__init__  s     	NG 	NTUUU 	N' 	NLMMM$TZ((& & &   	 	 	 	
 ! r   c                     |                      |          | _        t          t          |                               |          S rH   )makeContentr  rH  rB  r5   )rE   r   r   s     r   r5   z
XMP.format  s4    '',,S%%c***r   c                     | j         rc| j        Uddlm} t	          | j         d          5 } ||                                          | _        d d d            n# 1 swxY w Y   | j        S |                     |          S )Nr   )smartDecoderb)rI  rJ  reportlab.lib.rparsexmlrP  r   readrK  )rE   r   rP  _s       r   rN  zXMP.makeContent  s    ; 	'!)??????$+d++ ?q)4QVVXX)>)>D&? ? ? ? ? ? ? ? ? ? ? ? ? ? ?%%>>#&&&s   #AA Ar  )r   r   r   r   r5   rN  __classcell__)r   s   @r   rB  rB    se        ! ! ! ! ! !+ + + + +' ' ' ' ' ' 'r   rB  c                       e Zd ZdZdZ ed           ed          ddZd                                ZeZ	d Z
d	 Zd
 Zd Zd Zd ZdS )rj   zDocument Rootr&   rk   UseNoneN)rF  PageModerp   z
        Dests Outlines Pages Threads AcroForm Names OpenAction PageMode URI
        ViewerPreferences PageLabels PageLayout JavaScript StructTreeRoot SpiderInfo
        MarkInfo Metadata Tabsc                    |                      |           | j        }| j        }i }|                                D ]\  }}t	          | ||          }||||<   | j        D ]}t	          | |d           }||||<   |D ]$}||v r|                    ||                   ||<   %t          |          }t          ||          S rH   )	check_format__Defaults____Refs__itemsr   __NoDefault__r4   rw   r5   )rE   r<   defaultsRefsrL  r   r  rB  s           r   r5   zPDFCatalog.format
  s    (###$}>>## 	 	CAaQq!!A}!# 	 	AQt$$A}! 	0 	0AAvv))!A$//!QdH%%%r   c                 0    |                      d           d S )NUseOutlinessetPageModerQ   s    r   showOutlinezPDFCatalog.showOutline  s    '''''r   c                 0    |                      d           d S )N
FullScreenrc  rQ   s    r   showFullScreenzPDFCatalog.showFullScreen"  s    &&&&&r   c                 6    |rt          |          | _        d S d S rH   )r   
PageLayout)rE   layouts     r   setPageLayoutzPDFCatalog.setPageLayout%  s%     	.%fooDOOO	. 	.r   c                 6    |rt          |          | _        d S d S rH   )r   rX  )rE   modes     r   rd  zPDFCatalog.setPageMode)  s%     	*#DMMDMMM	* 	*r   c                     dS )zfor use in subclassesNr   rI   s     r   rZ  zPDFCatalog.check_format-  rK   r   )r   r   r   r#   r"   r   r[  r  r^  r\  r5   re  rh  rl  rd  rZ  r   r   r   rj   rj     s        !KK#GI..#GI.. L" #(%''  H& & &*( ( (' ' '. . .* * *    r   rj   c                   z    e Zd ZdZdZdZd ed          iZd                                Z	dgZ
d Zd	 Zd
 Zd ZdS )rm   zHPAGES TREE WITH ONE INTERNAL NODE, FOR "BALANCING" CHANGE IMPLEMENTATIONz	page treer&   rF  r%   zKids Count ParentParentc                     g | _         d S rH   r   rQ   s    r   r   zPDFPages.__init__:  s    


r   c                     | j         |         S rH   rs  )rE   items     r   r  zPDFPages.__getitem__<  s    z$r   c                 :    | j                             |           d S rH   )r   r  rE   r   s     r   r   zPDFPages.addPage>  s    
$r   c                     | j         }t          |          }|                    |           || _        t	          |          | _        d S rH   )r   r  r  Kidsr  Count)rE   r<   r   kidss       r   rZ  zPDFPages.check_format@  s>    
!!!	ZZ


r   N)r   r   r   rV   r#   r"   r   r[  r  r^  r\  r   r  r   rZ  r   r   r   rm   rm   1  s        RRKKGGG,, L'--//MzH                     r   rm   c                       e Zd ZdZdZdZd ed          iZd                                Z	d                                Z
dZd	Zd
ZdZdZd
Zi Zi Zd
Zd Zd Zd Zd Zd Zd
S )PDFPagezPage dictionaryr   r&   rF  r   zParent
        MediaBox Resources Contents CropBox Rotate Thumb Annots B Dur Hid Trans AA
        PieceInfo LastModified SeparationInfo ArtBox TrimBox BleedBox ID PZ
        TranszContents Parent IDS  iJ  Nc                 <    | j         D ]}t          | |d            d S rH   )r^  setattrrH  s     r   r   zPDFPage.__init__c  s3    & 	& 	&DD$%%%%	& 	&r   c                     || _         d S rH   r   r   s     r   r`   zPDFPage.setCompressiong  s     r   c                     | j         rt          d          t          |          rd                    |          dz   }|| _        d S )Nz&overridden! must set stream explicitlyr  )Override_default_compilationr   r   r  stream)rE   codes     r   	setStreamzPDFPage.setStreami  sJ    , 	GEFFF;; 	(99T??4'Dr   c                 .    t          |          | _        d S rH   )rw   Trans)rE   tranDicts     r   setPageTransitionzPDFPage.setPageTransitionp  s    "8,,


r   c                    | j         rd S | j        p5t          | j        dv rdd| j        | j        gpdd| j        | j        g          | _        | j        sd | _        n3t          | j        t                    st          | j                  | _        | j	        sn| j
        }|st                      | _	        nQt                      }| j        r't          j        rt           t"          gpt"          g|_        ||_        d|_        || _	        | j        st-                      }|                                 | j        r|                                 n|                                 | j        r| j        |_        | j        r| j        |_        |                    | j                   |                     | j!                   || _        | j"        s#|j#        }|$                    |          | _"        d S d S )N)Z   i  r   zpage stream)%r  r;  r  Rotate
pageheight	pagewidthAnnotsr,   r2   Contentsr  r  r@  rz   r   r  r  r  r  r  r#   	ResourcesPDFResourceDictionary
basicFonts	hasImagesallProcs
basicProcsXObjectsXObject	ExtGState
setShading_shadingUsedsetColorSpace_colorsUsedrq  r%   r4   )rE   r<   r  r  	resourcesr   s         r   rZ  zPDFPage.check_formats  s   , 	F  _$+2I2rqQRSWSbcgcqNr  3^wxz{  ~B  ~L  NR  N]  w^  *_  *_{ 	4DKK dk)44 4&t{33} 
	"[F " *KK# g ) 0 To|5T fYeXfAI"	 - !~ 	'-//I  """~ '""$$$$$$&&&} 2$(M	!~ 5&*n	#  !2333##D$4555&DN{ 	4NE",,U33DKKK	4 	4r   )r   r   r   r#   r  r"   r   r[  r  r^  r\  r  r  r  r  rz   r  r  _shadingsUsedr  r   r`   r  r  rZ  r   r   r   r}  r}  I  s        #K $% KGGFOO L   (--//HIJFIKHKME& & &! ! !  - - -*4 *4 *4 *4 *4r   r}  c                       e Zd ZdS )DuplicatePageLabelPageNr   r   r   r   r  r    r    r   r  c                   6    e Zd ZdZdZi ZdgZg Zd Zd Z	d Z
dS )PDFPageLabelsNr   Numsc                     g | _         d S rH   )labelsrQ   s    r   r   zPDFPageLabels.__init__  s    r   c                 >    | j                             ||f           dS )a   Adds a new PDFPageLabel to this catalog.
        The 'page' argument, an integer, is the page number in the PDF document
        with which the 'label' should be associated. Page numbering in the PDF
        starts at zero! Thus, to change the label on the first page, '0' should be
        provided as an argument, and to change the 6th page, '5' should be provided
        as the argument.

        The 'label' argument should be a PDFPageLabel instance, which describes the
        format of the labels starting on page 'page' in the PDF and continuing
        until the next encounter of a PDFPageLabel.

        The order in which labels are added is not important.
        N)r  r  )rE   r   labels      r   addPageLabelzPDFPageLabels.addPageLabel  s$     	D%=)))))r   c           
         	 | j                                          nf# t          $ rY t          d | j         D                       t	          dt          t          fdD                                 z             Y nw xY wg }| j         D ]/\  }}|                    |           |                    |           0t          |          | _	        t                              | |          S )Nc                     g | ]
}|d          S r   r   )r  r/   s     r   r  z(PDFPageLabels.format.<locals>.<listcomp>  s    4441!A$444r   z-

!!!!! Duplicate PageLabel seen for pages %rc                 F    g | ]}                     |          d k    |S r&   )count)r  r/   tmps     r   r  z(PDFPageLabels.format.<locals>.<listcomp>  s6    [}[}[}bcnqnwnwxynznz{|n|n|\]n|n|n|r   )r  r  r  sortedr   r  setr  r  r  rj   r5   )rE   r<   r  r   r  r  s        @r   r5   zPDFPageLabels.format  s   	AK% 	A 	A 	A4444455CORVWZ[}[}[}[}gj[}[}[}W~W~RR  A  A  A  A  A	A ; 	! 	!KD%MM$MM%    V$$	  x000s    A B ?B )r   r   r   __comment__r"   r[  r^  r\  r   r  r5   r   r   r   r  r    s\        KKLHMH  * * * 1 1 1 1 1r   r  c                   h    e Zd ZdZdZi Zd                                ZdZdZ	dZ
dZdZd	Zdd
Zd ZdS )PDFPageLabelNr   zType S P Stz:ARABIC ROMAN_UPPER ROMAN_LOWER LETTERS_UPPER LETTERS_LOWERrL  rP  rAr  c                    |rQ|                                 | j        v r"t          | |                                           }t          |          | _        |rt          |          | _        |rt          |          | _        dS dS )a+  
        A PDFPageLabel changes the style of page numbering as displayed in a PDF
        viewer. PDF page labels have nothing to do with 'physical' page numbers
        printed on a canvas, but instead influence the 'logical' page numbers
        displayed by PDF viewers. However, when using roman numerals (i, ii,
        iii...) or page prefixes for appendecies (A.1, A.2...) on the physical
        pages PDF page labels are necessary to change the logical page numbers
        displayed by the PDF viewer to match up with the physical numbers. A
        PDFPageLabel changes the properties of numbering at the page on which it
        appears (see the class 'PDFPageLabels' for specifying where a PDFPageLabel
        is associated) and all subsequent pages, until a new PDFPageLabel is
        encountered.

        The arguments to this initialiser determine the properties of all
        subsequent page labels. 'style' determines the numberings style, arabic,
        roman, letters; 'start' specifies the starting number; and 'prefix' any
        prefix to be applied to the page numbers. All these arguments can be left
        out or set to None.

        * style:

            - None:                       No numbering, can be used to display the prefix only.
            - PDFPageLabel.ARABIC:        Use arabic numbers: 1, 2, 3, 4...
            - PDFPageLabel.ROMAN_UPPER:   Use upper case roman numerals: I, II, III...
            - PDFPageLabel.ROMAN_LOWER:   Use lower case roman numerals: i, ii, iii...
            - PDFPageLabel.LETTERS_UPPER: Use upper case letters: A, B, C, D...
            - PDFPageLabel.LETTERS_LOWER: Use lower case letters: a, b, c, d...

        * start:

            -   An integer specifying the starting number for this PDFPageLabel. This
                can be used when numbering style changes to reset the page number back
                to one, ie from roman to arabic, or from arabic to appendecies. Can be
                any positive integer or None. I'm not sure what the effect of
                specifying None is, probably that page numbering continues with the
                current sequence, I'd have to check the spec to clarify though.

        * prefix:

            -   A string which is prefixed to the page numbers. Can be used to display
                appendecies in the format: A.1, A.2, ..., B.1, B.2, ... where a
                PDFPageLabel is used to set the properties for the first page of each
                appendix to restart the page numbering at one and set the prefix to the
                appropriate letter for current appendix. The prefix can also be used to
                display text only, if the 'style' is set to None. This can be used to
                display strings such as 'Front', 'Back', or 'Cover' for the covers on
                books.

        N)	upper__convertible__r   r   r  rh  Stro   P)rE   stylestartprefixs       r   r   zPDFPageLabel.__init__  sx    d  	${{}} 444gd5;;==>Y>YeU^^DF,Ie,,$'-If--4666--r   c                 :    t           j        rt                      dS )NF)r   errorOnDuplicatePageLabelPager  )rE   oths     r   __lt__zPDFPageLabel.__lt__  s    2 	+(***ur   r   )r   r   r   r#   r"   r[  r  r^  r  ARABICROMAN_UPPERROMAN_LOWERLETTERS_UPPERLETTERS_LOWERr   r  r   r   r   r  r    sv        KKL!''))MROFKKMM6. 6. 6. 6.p    r   r  c                 Z   t                      }t                      |_        | j        }|                     |          |_        t          g d          |_        t                      }|	                                 |
                                 ||_        |                    |           d S )N)r   r   r~  iI  )r}  r  r  r%   r4   rq  r  r;  r  r  r  r  r   )r<   r  r   r  s       r   testpager    s    		AAJNE!!%((AH***++AJ%''IAK	MM!r   z/
<<
  /Count
      0
  /Type
      /Outlines
>>c                   H    e Zd ZdZe                    dd          ZdZd ZdS )rq   zTEST OUTLINE!r  r&   c                 *    t          | j                  S rH   )r0   r  rI   s     r   r5   zPDFOutlines0.format.  s    ###r   N)	r   r   r   r#   DUMMYOUTLINEr  r  r"   r5   r   r   r   rq   rq   *  sB        !Kd++DK$ $ $ $ $r   rq   c                   8    e Zd ZdZdxZxZxZxZxZxZ	xZ
Zd ZdS )OutlineEntryObjectzan entry in an outlineNc                     i }t          | j                  |d<   | j        |d<   | j        |d<   dD ]}t	          | |          }||||<   t          |          }|                    |          S )NTitlerq  Dest)r=  NextFirstLastrz  )ro   r  rq  r  r   rw   r5   )rE   r<   rL  rg  r  PDs         r   r5   zOutlineEntryObject.format4  s|    tz**'
k(I&	; 	 	Aa  A}!1yy"""r   )r   r   r   rV   r  r  rq  r=  r  r  r  rz  r5   r   r   r   r  r  1  sQ        AEEEEDE6EDE4E%E$
# 
# 
# 
# 
#r   r  c                   \    e Zd ZdZdxZZdZdZd ZddZ	d Z
d Zd	 Zd
 Zd Zd ZddZdS )rr   a  
    takes a recursive list of outline destinations like::

        out = PDFOutline1()
        out.setNames(canvas, # requires canvas for name resolution
        "chapter1dest",
        ("chapter2dest",
        ["chapter2section1dest",
        "chapter2section2dest",
        "chapter2conclusiondest"]
        ), # end of chapter2 description
        "chapter3dest",
        ("chapter4dest", ["c4s1", "c4s2"])
        )

    Higher layers may build this structure incrementally. KISS at base level.
    Nr   c                 L    i | _         i | _        g | _        g | _        i | _        d S rH   )destinationnamestotitlesdestinationstotitles
levelstack	buildtree	closedictrQ   s    r   r   zPDFOutlines.__init__X  s+    (*%$&!r   c                    ||dk    rt          d          t          |t                    st          dt          |          z            |dk     rt          d          ||}| j        }| j        }| j        }||k    rA||dz   k    rt          d|d|d	|d
|d	          |dz   x}}|                    g            ||k     rj|d         }|d= |d         }	|	d         }
t          |
t                    r$|
\  }}t          dt          |
          z             |
}|}||f|	d<   |dz
  }||k     j|dS |d                             |           || j
        |<   |r
d| j        |<   || _        dS )z/destinationname of None means "close the tree" Nr   zclose tree must have level of 0zlevel must be integer, got %sznegative levels not allowedr&   zcan't jump from outline level z
 to level z&, need intermediates (destinationname=z, title=r  r  z cannot reset existing sections: )r   r,   r:   r8   currentlevelr  r  r  tupler   r  r  )rE   destinationnamelevelr   closedr  stacktreecurrentpreviouslastinpreviousr   sectionlists                r   addOutlineEntryzPDFOutlines.addOutlineEntry_  s   "uaxx>???%$$eJ7VY]^cYdYd7d,e,e&e77*%BCCC=/%(~\!^## j  FR  FR  FR  TY  TY  TY  [j  [j  [j  lq  lq  lq  "r  s  s  s#/>1ELLLL  BiGb	RyH%b\N.// 3&4#{ !Cd>FZFZ!Z[[[%% $k2'>L L   "FFb	)))9>%o66Q4>/2!r   c                     || _         d S rH   )mydestinations)rE   destinationtrees     r   setDestinationszPDFOutlines.setDestinations  s    -r   c                     i }t          d          |d<   | j        |d<   | j        |d<   | j        |d<   t	          |          }|                    |          S )Nrt   rF  rz  r  r  )r   r  firstlastrw   r5   rE   r<   rL  r  s       r   r5   zPDFOutlines.format  sX    J''&	Z'
Z'
I&	1yy"""r   c                 \    |                      ||          }|                     |           d S rH   translateNamesr  rE   r   nametreedesttrees       r   setNameszPDFOutlines.setNames  s1    &&vx88X&&&&&r   c                 \    |                      ||          }|                     |           dS )z1Explicit list so I don't need to do in the callerNr  r  s       r   setNameListzPDFOutlines.setNameList  s1    &&vx88X&&&&&r   c                 6   | j         }| j        }| j        }t          |          rrt	          |          s|                    d          }|                    |          }|}||v r	||         }n|||<   |||<   ||v rd||<   ||                    |          iS t          |          rVg }|D ]+}	|                    | 	                    ||	                     ,t          |t                    rt          |          S |S t          dt          |          z            )z=recursively translate tree of names into tree of destinationsr}  r&   z5in outline, destination name must be string: got a %s)r  r  r  r   r
   r  _bookmarkReferencer   r  r  r,   r  r   r8   )
rE   r   objectr  r  r  destinationr   r  os
             r   r  zPDFOutlines.translateNames  sB   #'#@ #8N	== 	?V$$Dv}}V/D/Df 33F;;KE1110827(/05 -"")*	+&F55f==>>== 	A 9 9,,VQ778888&''  QxxHOPTU[P\P\\]]]r   c                 z   | j         c| j        r>|                     d           | j        d         }|                     ||          | _         ndx| _        | _        d| _        d| _        dS t          | j         | j                  | _        | 	                    || j         d          \  | _        | _        d| _        dS )zPprepare all data structures required for save operation (create related objects)Nr   r  r&   r  )
r  r  r  r  r  r  r  r   r  maketree)rE   r<   r   	destnamess       r   rJ   zPDFOutlines.prepare  s    & 	$$T*** OA.	&*&9&9&)&L&L##)--
TY

 4.??
"&--$:MXY-"Z"ZTY


r   c                 h   |rd}|                     |j                  }n+| xj        dz  c_        d| j        z  }|t          d          t	          |          st          d          t          |          }|dz
  }d x}x}	}
| j        }| j        }t          |          D ]}t                      }||_
        |d|}|                     ||          }|||_        |
|_        |	|}	|}
|}|}
||         }t          |t                    r|}nt          |t                    re	 |\  }}n$#  t          dt          |          z            xY wt          ||          |_        |                     |||          \  |_        |_        nt          dt)          |          z            	 t+          |                                          \  \  }}n$#  t          d	t/          |          z             xY w||         |_        ||_        t          |t                    r||v r|j         |_        |	|
fS )
NOutliner&   z
Outline.%sz2non-top level outline elt parent must be specifiedz-destinationtree must be list or tuple, got %s.z7destination tree elt tuple should have two elts, got %sz4destination tree elt should be dict or tuple, got %sz3bad outline leaf dictionary, should have one entry )r4   rt   r  r   r   r  r  r  r  r  rq  r  r=  r,   rB  r  rz  r  r  r  r8   r  r]  r   r  r  )rE   r<   r  rq  r=   	levelnamenelts	lastindexlasteltfirstreflastrefr  r  indexeltobjeltnameeltrefeltleafdictsubsectionsr  r  s                         r   r  zPDFOutlines.maketree  sz    	W!I''(9::FFJJ!OJJ$tz1I~ !UVVV_%% 	NLMMMO$$!G	'+++(W#'#@ N	5\\ $	- $	-E'))F"FM!*EE2G''88F"%%!GGG!%(C#d## eC&& 	ek.1+X{{k$%^adehaiai%ijjj$[)<<.2mmHkSY.Z.Z+v{{ !WZ^_bZcZc!cddde"&x~~'7'7"8"8%e !VW^_bWcWc!cddd3E:FLFK#e$$ -):): &}'""s   %D++!E)&G!G1)r   NNr   )r   r   r   rV   r  r   r%  r  r   r  r  r5   r  r  r  rJ   r  r   r   r   rr   rr   @  s         & "!NUGL  #" #" #" #"J. . .# # #' ' '' ' '
^ ^ ^6  (5# 5# 5# 5# 5# 5#r   rr   c                 &   t          | t                    r3| \  }}t          |                                          \  \  }}|r||v rdS t	          |           r9g }| D ]%}|                    t          ||                     &t          |          S dS )zButility for outline: recursively count leaves in a tuple/list treer&   )r,   r  r  r]  r   r  r  sum)r  r  r  r  r  r  countsrt  s           r   r  r     s    $u "&;x~~//00% 	**1T{{  	/ 	/AMM%9--....6{{1r   )ReportLab PDF Library - www.reportlab.comc                   F    e Zd ZdZeZdZdZdZdZ	dZ
dZd Zd	 Zd
 Zd ZdS )ru   zPDF documents can have basic information embedded, viewable from
    File | Document Info in Acrobat Reader.  If this is wrong, you get
    Postscript errors while printing, even though it does not print.r  untitled	anonymousunspecifiedr  Nc                     d| _         d S )NFalse)trappedrQ   s    r   r   zPDFInfo.__init__      r   c                     | j         | j        | j        | j        fD ]$}|                    t          |                     %d S rH   )r   r   r   r  rc   r   )rE   	md5objectr/   s      r   r   zPDFInfo.digest   sI    *dk4<G 	) 	)AWQZZ((((	) 	)r   c                    i }t          | j                  |d<   t          | j                  |d<   t          |j        | j                  x|d<   |d<   t          | j                  |d<   t          | j                  |d<   t          | j                  |d<   t          | j	                  |d	<   t          | j                  |d
<   t          |          }|                    |          S )Nr  Author)tsr  ModDateCreationDateProducerCreatorSubjectKeywordsTrapped)ro   r   r   PDFDaterd   r  r   r   r   r  r   r   rw   r5   r  s       r   r5   zPDFInfo.format%  s    tz**'
,,(+2h6IX\Xk+l+l+ll)q(!$-00* ..) ..)!$-00*t|,,)1yy"""r   c                     |                                  }| j                                        D ]\  }}t          |||           |S )z'shallow copy - useful in pagecatchering)	__klass____dict__r]  r  )rE   r   r   r  s       r   r  zPDFInfo.copy3  sL      M'')) 	! 	!DAqE1a    r   )r   r   r   rV   r   r   r   r   r   r   r  r  r   r   r5   r  r   r   r   ru   ru     s        H H !H9GEFGHN  ) ) )
# # #    r   ru   c                   V    e Zd ZdZd ed          fgZdZedz   ZddZd Z	d	 Z
d
 ZdS )
Annotationzsuperclass for all annotations.rF  Annot)rF  Rectr  rG  )BorderCTMFHBSAAASPopupr  APr&   c                     |d         }t          |          st          |          |d<   t          |d         |          |d<   |S )@transform dict args from python form to pdf string rep as neededr5  r  )r   r  ro   )rE   dry  r5  s       r   cvtdictzAnnotation.cvtdictA  sD    yT{{ 	' AfI!!J-77*r   c                    d|v r|d         }|d= nd}i }| j         D ]
\  }}|||<   |                    |           | j        D ]}||vrt          d|z            |                     ||          }| j        }|                                D ]$}||vrt          | j        j        d|          %t          |          S )Nry  r&   keyword argument %s missing)ry  z  bad annotation dictionary name )
r_  rc   requiredr   rD  	permittedr   r   r   rw   )rE   kwry  rC  r   valrH  s          r   AnnotationDictzAnnotation.AnnotationDictH  s    r>>\F8F- 	 	JT#AdGG	M 	G 	GD1}} !>!EFFF LL&L))N	FFHH 	j 	jD9$$ 4>KbKbKbcgcg!hiii %Qr   c                      t          d          )NzEDictString undefined for virtual superclass Annotation, must overloadr   rQ   s    r   DictzAnnotation.Dict[  s    `aaar   c                 T    |                                  }|                    |          S rH   rN  r5   rE   r<   rL  s      r   r5   zAnnotation.format_  s!    IIKKxx!!!r   Nr  )r   r   r   rV   r   r_  rG  rH  rD  rK  rN  r5   r   r   r   r3  r3  ;  s        ))))+,H6H O OI        &b b b" " " " "r   r3  c                   .    e Zd Zej        dz   Zd Zd ZdS )FreeTextAnnotation)DAc                 >    || _         || _        || _        || _        d S rH   )r5  r  rT  otherkw)rE   r5  r  rT  rI  s        r   r   zFreeTextAnnotation.__init__e  s"    	 r   c                     i }|                     | j                   | j        |d<   | j        |d<   | j        |d<   d|d<    | j        di |S )Nr5  r  rT  z	/FreeTextrG  r   )rc   rV  r5  r  rT  rK  rE   rC  s     r   rN  zFreeTextAnnotation.Dictj  s^    	I&	*'$")"t"''Q'''r   N)r   r   r   r3  rH  r   rN  r   r   r   rS  rS  c  s?        $w.I  
( ( ( ( (r   rS  c                   6    e Zd Zej        dz   ZddZd Zd ZdS )LinkAnnotation)r  r  PA[0 0 1]c                 L    || _         || _        || _        || _        || _        d S rH   )r6  r5  r  DestinationrV  )rE   r5  r  r^  r6  rI  s         r   r   zLinkAnnotation.__init__w  s*    	 &r   c                     dS )Nz
          << /Type /Annot /Subtype /Link /Rect [71 717 190 734] /Border [16 16 1]
             /Dest [23 0 R /Fit] >>
             r   rQ   s    r   dummyDictStringzLinkAnnotation.dummyDictString~  s     r   c                     i }|                     | j                   | j        |d<   | j        |d<   | j        |d<   d|d<   | j        |d<    | j        di |S )Nr6  r5  r  z/LinkrG  r  r   )rc   rV  r6  r5  r  r^  rK  rX  s     r   rN  zLinkAnnotation.Dict  sj    	k(I&	*)$&	"t"''Q'''r   N)r\  )r   r   r   r3  rH  r   r`  rN  r   r   r   rZ  rZ  s  sX        $ ( I     ( ( ( ( (r   rZ  c                   B    e Zd ZdZej        dz   Zg dfdZd	dZd ZdS )
HighlightAnnotationa  
    HighlightAnnotation is an annotation that highlights the selected area.

    Rect is the mouseover area that will show the contents.

    QuadPoints is a list of points to highlight, you can have many groups of
    four QuadPoints to allow highlighting many lines.
    )
QuadPoints)g(\?g{Gz?gffffff?c                 L    || _         || _        || _        || _        || _        d S rH   )r5  r  rV  rd  Color)rE   r5  r  rd  rf  rI  s         r   r   zHighlightAnnotation.__init__  s)    	 $


r   r&   c                    |d         }|d         }|d         }t          |t                    s't          |                              |d          |d<   t          |t                    s't          |                              |d          |d<   t          |t                    s't          |                              |d          |d<   t	          |d         |          |d<   |S )rB  r5  rd  r7  r  r?  r  )r,   r-   r  r5   ro   )rE   rC  ry  r5  Quadrf  s         r   rD  zHighlightAnnotation.cvtdict  s    y#$$$ 	; --aT-::AfI$$$ 	A&tnn33A43@@AlO%%% 	9e__++A4+88AcF!!J-88*r   c                     i }|                     | j                   | j        |d<   | j        |d<   d|d<   | j        |d<   | j        |d<    | j        di |S )Nr5  r  z
/HighlightrG  rd  r7  r   )rc   rV  r5  r  rd  rf  rK  rX  s     r   rN  zHighlightAnnotation.Dict  si    	I&	*#)/,#"t"''Q'''r   Nr  )	r   r   r   rV   r3  rH  r   rD  rN  r   r   r   rc  rc    sn          $'77I9K9K9K       ( ( ( ( (r   rc  c                   .    e Zd Zej        dz   Zd Zd ZdS )TextAnnotation)OpenNamec                     t          j        | ||f|                    dd           pt          |          |                    dd          d| d S )Nrd  rf  )r   r   r   )rd  rf  )rc  r   r  rect_to_quad)rE   r5  r  rI  s       r   r   zTextAnnotation.__init__  sn    $T	 66,t44JT8J8JffWW--		 	
 	 	 	 	 	r   c                 D    t                               |           }d|d<   |S )Nz/TextrG  )rc  rN  rX  s     r   rN  zTextAnnotation.Dict  s#    $$T**)r   N)r   r   r   rc  rH  r   rN  r   r   r   rk  rk    sD        #- 1 I      r   rk  c           	      v    | d         | d         | d         | d         | d         | d         | d         | d         gS )z9
    Utility method to convert a Rect to a QuadPoint
    r   r&   r  r'   r   )r5  s    r   ro  ro    s@     GT!Wd1gtAwGT!Wd1gtAw0 0r   c                       e Zd Zd Zd ZdS )PDFRectanglec                 D    ||||f\  | _         | _        | _        | _        d S rH   )llxllyulxury)rE   ru  rv  urxrx  s        r   r   zPDFRectangle.__init__  s%    14c31C.$(DHdhhhr   c                 p    t          | j        | j        | j        | j        g          }t          ||          S rH   )r  ru  rv  rw  rx  r5   )rE   r<   r  s      r   r5   zPDFRectangle.format  s0    dh$(DH=>>a"""r   Nr  r   r   r   rs  rs    s5        D D D# # # # #r   rs  c                   "    e Zd ZddZd Zd ZdS )r.  Nc                 ^    |t                      }|                     |           || _        d S rH   )r   _initr  )rE   r&  r  s      r   r   zPDFDate.__init__  s-    :B

2*r   c                 N    |j         | _        |j        | _        |j        | _        d S rH   )YMDhmsdatedhhdmm)rE   r&  s     r   r}  zPDFDate._init  s!    I	66r   c                 f      j         p fd}t          t           | j                   |          S )Nc           	      2    d| |||||j         j        fz  S )Nz%D:%04d%02d%02d%02d%02d%02d%+03d'%02d')r  r  )yyyymmddhhmrm  rE   s         r   <lambda>z PDFDate.format.<locals>.<lambda>  s)    ;2b1TXdh?@ r   )r  r5   ro   r  )rE   r   dfmts   `  r   r5   zPDFDate.format  sO    ! A@ @ @ @ 	 idi 0113777r   r  )r   r   r   r   r}  r5   r   r   r   r.  r.    sF        + + + +  
8 8 8 8 8r   r.  c                   `    e Zd ZdZdxZxZZd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd ZdS )r^  aM  

    not a PDFObject!  This is a placeholder that can delegates
    to a pdf object only after it has been defined by the methods
    below.

    EG a Destination can refer to Appendix A before it has been
    defined, but only if Appendix A is explicitly noted as a destination
    and resolved before the document is generated...

    For example the following sequence causes resolution before doc generation.
        d = Destination()
        d.fit() # or other format defining method call
        d.setPage(p)
        (at present setPageRef is called on generation of the page).
    Nc                 0    || _         d x| _        | _        d S rH   )r   fmtr   rH  s     r   r   zDestination.__init__   s    	##4999r   c                     | j         }|t          d| j        z            | j        }|t          d| j        z            ||_        |                    |          S )NzYformat not resolved, probably missing URL scheme or undefined destination target for '%s'zTPage not bound, probably missing URL scheme or undefined destination target for '%s')r  r   r   r   r5   )rE   r<   r>   ps       r   r5   zDestination.format  s    H9J  (C  FJ  FO  (O  P  P  PI9J'}  AE  AJ  (J  K  K  Kxx!!!r   c                 4    t          d |||          | _        d S rH   )PDFDestinationXYZr  )rE   lefttopzooms       r   xyzzDestination.xyz
  s    $T4d;;r   c                 .    t          d           | _        d S rH   )PDFDestinationFitr  rQ   s    r   fitzDestination.fit  s    $T**r   c                 .    t          d           | _        d S rH   )PDFDestinationFitBr  rQ   s    r   fitbzDestination.fitb  s    %d++r   c                 0    t          d |          | _        d S rH   )PDFDestinationFitHr  rE   r  s     r   fithzDestination.fith  s    %d3//r   c                 0    t          d |          | _        d S rH   )PDFDestinationFitVr  rE   r  s     r   fitvzDestination.fitv  s    %dD11r   c                 0    t          d |          | _        d S rH   )PDFDestinationFitBHr  r  s     r   fitbhzDestination.fitbh  s    &tS11r   c                 0    t          d |          | _        d S rH   )PDFDestinationFitBVr  r  s     r   fitbvzDestination.fitbv  s    &tT22r   c                 6    t          d ||||          | _        d S rH   )PDFDestinationFitRr  )rE   r  bottomrightr  s        r   fitrzDestination.fitr  s    %dD&%EEr   c                     || _         d S rH   r   rw  s     r   setPagezDestination.setPage  r  r   )r   r   r   rV   representationr5   r   r   r  r  r  r  r  r  r  r  r  r   r   r   r^  r^    s           &*)N)Vd$ $ $" " "< < <+ + +, , ,0 0 02 2 22 2 23 3 3F F F    r   r^  c                       e Zd ZdZd Zd ZdS )r  XYZc                 >    || _         || _        || _        || _        d S rH   )r   r  r  r  )rE   r   r  r  r  s        r   r   zPDFDestinationXYZ.__init__   s"    					r   c                     |                     | j                  }t          |t          | j                  | j        | j        | j        g          }t          ||          S rH   )	r4   r   r  r   typenamer  r  r  r5   rE   r<   pagerefr  s       r   r5   zPDFDestinationXYZ.format%  sO    $$TY//!7!7DHdiY[[a"""r   Nr   r   r   r  r   r5   r   r   r   r  r    s7        H  
# # # # #r   r  c                       e Zd ZdZd Zd ZdS )r  Fitc                     || _         d S rH   r  rw  s     r   r   zPDFDestinationFit.__init__,  r  r   c                     |                     | j                  }t          |t          | j                  g          }t          ||          S rH   )r4   r   r  r   r  r5   r  s       r   r5   zPDFDestinationFit.format.  sC    $$TY//!7!79;;a"""r   Nr  r   r   r   r  r  *  s7        H  # # # # #r   r  c                       e Zd ZdZdS )r  FitBNr   r   r   r  r   r   r   r  r  3  s        HHHr   r  c                       e Zd ZdZd Zd ZdS )r  FitHc                 "    || _         || _        d S rH   )r   r  )rE   r   r  s      r   r   zPDFDestinationFitH.__init__8  s    	3$(((r   c                     |                     | j                  }t          |t          | j                  | j        g          }t          ||          S rH   )r4   r   r  r   r  r  r5   r  s       r   r5   zPDFDestinationFitH.format:  sG    $$TY//!7!7CEEa"""r   Nr  r   r   r   r  r  6  s7        H' ' '# # # # #r   r  c                       e Zd ZdZdS )r  FitBHNr  r   r   r   r  r  ?          HHHr   r  c                       e Zd ZdZd Zd ZdS )r  FitVc                 "    || _         || _        d S rH   )r   r  )rE   r   r  s      r   r   zPDFDestinationFitV.__init__D  s    	D$)))r   c                     |                     | j                  }t          |t          | j                  | j        g          }t          ||          S rH   )r4   r   r  r   r  r  r5   r  s       r   r5   zPDFDestinationFitV.formatF  sG    $$TY//!7!7DFFa"""r   Nr  r   r   r   r  r  B  s7        H) ) )# # # # #r   r  c                       e Zd ZdZdS )r  FitBVNr  r   r   r   r  r  K  r  r   r  c                       e Zd ZdZd Zd ZdS )r  FitRc                 L    || _         || _        || _        || _        || _        d S rH   )r   r  r  r  r  )rE   r   r  r  r  r  s         r   r   zPDFDestinationFitR.__init__P  s*    	D$)f$+djY\PTPXPXPXr   c                     |                     | j                  }t          |t          | j                  | j        | j        | j        | j        g          }t          ||          S rH   )
r4   r   r  r   r  r  r  r  r  r5   r  s       r   r5   zPDFDestinationFitR.formatR  sW    $$TY//!7!7DKQUQ[]a]efhha"""r   Nr  r   r   r   r  r  N  s:        H] ] ]# # # # #r   r  c                   |    e Zd ZdZd Zd d                                D             ZdZd Zd Z	d Z
d	 Zd
 Zd ZdS )r  z7each element *could* be reset to a reference if desiredc           	          | j         D ]'}t          | ||                    |i                      (|                                  d|v r|                    d          | _        d S d S NProcSet)dict_attributesr  r  r  r  )rE   kwdsrT  s      r   r   zPDFResourceDictionary.__init__]  so    % 	+ 	+AD488Ab>>****((9--DLLL r   c                 ,    g | ]}t          |          S r   )r   r  rm  s     r   r  z PDFResourceDictionary.<listcomp>d  s    LLLq

LLLr   zPDF Text ImageB ImageC ImageI)
ColorSpacer  r  FontPattern
PropertiesShadingc                     | j         | _        d S rH   stdprocsr  rQ   s    r   r  zPDFResourceDictionary.allProcsg  s    }r   c                 .    | j         d d         | _        d S )Nr  r  rQ   s    r   r  z PDFResourceDictionary.basicProcsk  s    }RaR(r   c                 8    t          t                    | _        d S rH   )r   r$   r  rQ   s    r   r  z PDFResourceDictionary.basicFontsn  s    &z22			r   c                 h    |                                 D ]\  }}t          |          | j        |<   d S rH   )r]  r   r  )rE   
colorsUsedrn  rm  s       r   r  z#PDFResourceDictionary.setColorSpaceq  sB    ##%% 	7 	7CAa!3A!6!6DOA	7 	7r   c                 h    |                                 D ]\  }}t          |          | j        |<   d S rH   )r]  r   r  )rE   shadingUsedrn  rm  s       r   r  z PDFResourceDictionary.setShadingu  s@    $$&& 	4 	4CAa033DLOO	4 	4r   c                 B   i }| j         D ]C}t          | |          }t          |t                    r|rt	          |          }|||<   >|||<   D| j        }d}t          |          r|rt          |          }|||<   n|||<   t	          |          }t          ||          S r  )	r  r   r,   rB  rw   r  r   r  r5   )rE   r<   rL  dnamer  dvr   s          r   r5   zPDFResourceDictionary.formaty  s    ) 	 	Ee$$A!D!!  "&q))B!AeH%L88 	 a[[%AeH1b(###r   N)r   r   r   rV   r   r  r  r  r  r  r  r  r  r5   r   r   r   r  r  [  s        AA. . . ML$C$I$I$K$KLLLHhO% % %) ) )3 3 37 7 74 4 4$ $ $ $ $r   r  c                   t    e Zd ZdZdZd                                ZdZdZd                                Z	d Z
dS )	PDFType1Fontz"no init: set attributes explicitlyr&   zType Subtype BaseFont Namer  Type1z;FirstChar LastChar Widths Encoding ToUnicode FontDescriptorc                 $   i }| j         D ]4}t          | |          r"t          | |          }t          |          ||<   5| j        D ]'}t          | |          rt          | |          }|||<   (t          |          }|                    |          S rH   )name_attributesr3   r   r   local_attributesrw   r5   )rE   r<   rL  r   r   r  s         r   r5   zPDFType1Font.format  s    ( 	) 	)DtT"" )d++!%..$) 	  	 DtT""  d++$1yy"""r   N)r   r   r   rV   r"   r  r  rF  rG  r  r5   r   r   r   r  r    s[        ,,K288::ODGTZZ\\# # # # #r   r  c                       e Zd ZdZdS )PDFTrueTypeFontTrueTypeN)r   r   r   rG  r   r   r   r  r    s        GGGr   r  c                   J    e Zd ZdxZxZxZxZxZxZZ	dZ
dZd Zd Zd Zd ZdS )r>  Nr&   r   c                 >    || _         || _        || _        || _        d S rH   )lowerxloweryupperxuppery)rE   r  r  r  r  s        r   r   zPDFFormXObject.__init__  s     &dkf$+RXdkkkr   c                 v    t          |          rd                    |          }t          |          | _        d S )Nr  )r   r  r0   r  )rE   r   s     r   setStreamListzPDFFormXObject.setStreamList  s0    ;; 	#99T??Door   c                 v    | j         rt          | j         j                  S | j        | j        | j        | j        gS )z4get the declared bounding box for the form as a list)BBoxr  rC  r  r  r  r  rQ   s    r   r?  zPDFFormXObject.BBoxList  s7    9 	H	*+++Kdk4;GGr   c                    | j         p&t          | j        | j        | j        | j        g          | _         | j        pt          g d          | _        | j        sd | _        nt          d          | j	        s@| j
        }|st                      | _	        n#t                      }||_        d|_        || _	        | j        slt!                      }|                                 | j        r|                                 n|                                 | j        r| j        |_        || _        | j        r,t0          j        rt4          t6          gpt6          g| j	        _        | j	        j        }t=          d          |d<   t=          d          |d<   d|d	<   | j         |d
<   | j        |d<   | j        |d<   | j	                            |          S )N)r&   r   r   r&   r   r   z-annotations don't work in PDFFormXObjects yetzxobject form streamr  rF  FormrG  r&   FormTyper  Matrixr  ) r  r  r  r  r  r  r  r  r   r  r  r  r@  r  r#   r  r  r  r  r  r  r  r  rz   r   r  r  r  r  rA  r   r5   )rE   r<   r  r  r  sdicts         r   r5   zPDFFormXObject.format  s   I_4;T[RVR]*^!_!_	kAX.@.@.@%A%A{ 	NDKK LMMM} 		"[F " *KK"	 5 !~ 	%-//I  """~ '""$$$$$$&&&} 2$(M	!$DN 	k$-$4$X/<9X$j]i\jDM!(	**f"6??ij	f+h!^k}##H---r   )r   r   r   r  r  r  r  r  r  r  r  rz   r   r  r?  r5   r   r   r   r>  r>    s         IMLHLvLLvLL6IIKY Y Y& & &
H H H'. '. '. '. '.r   r>  c                        e Zd ZdZddZd ZdS )PDFPostScriptXObjectz,For embedding PD (e.g. tray commands) in PDFNc                     || _         d S rH   r  )rE   r  s     r   r   zPDFPostScriptXObject.__init__  r!  r   c                     t                      }| j        |_        d|_        |j        }t	          d          |d<   t	          d          |d<   |                    |          S )Nzxobject postscript streamr  rF  PSrG  )r@  r  r#   rA  r   r5   )rE   r<   r  r  s       r   r5   zPDFPostScriptXObject.format  sU    KKL	3	**f"4==ixx!!!r   rH   )r   r   r   rV   r   r5   r   r   r   r  r    s=        22   " " " " "r   r  	DeviceRGB
DeviceGray
DeviceCMYK)RGBr  CMYKc                   :    e Zd Zd	dZd Zd Zd Zd Zd Zd Z	dS )
PDFImageXObjectNc                 n   || _         d| _        d| _        d| _        d| _        t
          j        rdpd| _        d| _        || _	        |d S t          |d          r|                     |           d S d	d l}|j                            |          d                                         }t!          |          }	 |d
v r|                     |          s7t
          j        r|                     |           n|                     |           |                                 d S # |                                 w xY w)N      r&   r  )r  r   z
            003B00 002700 002480 0E4940 114920 14B220 3CB650
            75FE88 17FF8C 175F14 1C07E2 3803C4 703182 F8EDFC
            B2BBC2 BB6F84 31BFC2 18EA3C 0E3E00 07FC00 03F800
            1E1800 1FF800>
            jpeg_fhr   )z.jpgz.jpeg)r   widthheightbitsPerComponent
colorSpacer   r  _filtersstreamContentmaskr3   loadImageFromSRCr   rL  splitextlowerr   loadImageFromJPEGloadImageFromA85loadImageFromRawr   )rE   r   sourcer  r   extsrcs          r   r   zPDFImageXObject.__init__&  s?   	
 !&!(?-?E2 	>DVI&& 	!!&))))) III'""6**1-3355C''C///D4J4J34O4O/ ' 3--c2222--c222				s   8AD D4c                    g }t          j        ||d          }|s|                     |d                   S d |D             }|d                                         }t	          |d                   t	          |d                   c| _        | _        ddd	d
|d                  | _        d| _        d| _	        |r| 
                    |d                    n| j        dk    rd | _        d                    |dd                   | _        d S )NTIMG
detectJpegr   c                 6    g | ]}|                                 S r   )r  r  s     r   r  z4PDFImageXObject.loadImageFromA85.<locals>.<listcomp>L  s     2221QWWYY222r   r&   r'   r  r  r  z/RGBz/Gz/CMYK      r  r  rw  r  r  )r   makeA85Imager  r  r:   r  r  r  r  r  _checkTransparencyr  r  r  rE   r#  r(  	imagedatawordss        r   r!  z PDFImageXObject.loadImageFromA85G  s   )&SDIII	 	1((Q00022	222	!""$$#&uQx==U1X
DK"-L,WWX]^_X`a !5 	1''A////YD	WWYqt_55r   c                    	 	 t          j        |          }|                    d           n# |                    d           w xY wn#  Y dS xY w|d         |d         c| _        | _        d| _        |d         dk    rd| _        n"|d         dk    rd| _        nd	| _        d| _        |                                | _	        t          j        r!t          | j	                  | _	        d
| _        nd| _        d | _        dS )Nr   Fr&   r-  r  r  r'   r  r  )r  	DCTDecode)r5  T)r   readJPEGInfoseekr  r  r  r  _dotransrS  r  r   r  r   r  r  )rE   	imageFilerR   s      r   r   z!PDFImageXObject.loadImageFromJPEGV  s   	",Y77q!!!!	q!!!!!	55"&q'47
DK !7a<<*DOO!W\\)DOO*DODM&^^-- 	)!243E!F!FD7DMM(DM	ts   - A AA Ac                    g }t          j        ||d          }|s|                     |d                   S |d                                         }t	          |d                   | _        t	          |d                   | _        dddd	|d
                  | _        d| _        d| _	        |r| 
                    |d                    n| j        dk    rd | _        d                    |dd                   | _        d S )NTr'  r   r&   r'   r  r  r  r+  r,  r-  r  rw  r   r  )r   makeRawImager  r  r:   r  r  r  r  r  r0  r  r  r  r1  s        r   r"  z PDFImageXObject.loadImageFromRawp  s    )&SDIII	 	1((Q000!""$$q]]
%(mm"-L,WWX]^_X`a !& 	1''A////YD	 XXi"o66r   c                 >   | j         dk    r|j        rWd | _         t          t          |j                                                  |j        d           | _        ddg| j        _        d S |                                }|r3|d         |d         |d         |d         |d         |d         f| _         d S d | _         d S t          | j         d          rL| j         	                                }|d         |d         |d         |d         |d         |d         f| _         d S d S )Nrw  )r  r   r&   r  rgb)
r  _dataAr  r   
getRGBData_smask_decodegetTransparentr3   r>  )rE   imtcrT  s       r   r0  z"PDFImageXObject._checkTransparency  s   9fy 	% 	-i	8L8L8N8N.O.OPRPY_cddd'(e###&&(( %!#A1r!ubeRUBqE JDIII $DIIITYu%% 	6	A!QqT!A$qtAaD15DIII	6 	6r   c                    |                                 }|r|                     |           dS |                                \  | _        | _        |                                }t          j        |          | _        t          j
        r!t          | j                  | _        d| _        nd| _        t          |j                 | _        d| _        |                     |           dS )z%Extracts the stream, width and heightr.  r;  r-  N)r  r   getSizer  r  r@  r  r  r  r   r  r   r  _mode2CSrn  r  r  r0  )rE   rD  fpr   s       r   r  z PDFImageXObject.loadImageFromSRC  s    ZZ\\ 	(""2&&&&&&(jjll#DJ--//C!%s!3!3D /%6t7I%J%J" = .%bg.DO$%D!##B'''''r   c                    t          | j                  }|j        }t          d          |d<   t          d          |d<   | j        |d<   | j        |d<   | j        |d<   t          | j                  |d	<   | j        d
k    r&t          | dd          rt          g d          |d<   n(t          | dd           rt          | j
                  |d<   t          t          t          | j                            |d<   t          | j                  |d<   | j        rt          | j                  |d<   t          | dd           r
| j        |d<   |                    |          S )Nr  r  rF  ImagerG  WidthHeightBitsPerComponentr  r  r8  r   )r&   r   r&   r   r&   r   r&   r   DecoderB  r  r  MasksmaskSMask)r@  r  rA  r   r  r  r  r  r   r  rB  r  r  r  r  rQ  r5   )rE   r<   r  rB  s       r   r5   zPDFImageXObject.format  sN    2333|y))V!'**Y
WX#'#8 $T_55\?L((WT*Q-G-G(%&7&7&788DNNT)D)) 	4%dl33DN!#gdm"<"<==XT/00X98Xdi%8%8d6l4%%AtztG}xx!!!r   r  )
r   r   r   r   r!  r   r"  r0  r  r5   r   r   r   r  r     s           B6 6 6  47 7 76 6 6 ( ( (&" " " " "r   r  c                        e Zd Zd Zd Zd ZdS )r   c                     ddl m} t          ||          st          d| j        j        z            |j        st          d| j        j        z            || _        d S )Nr   )	CMYKColorz%s needs a CMYKColor argumentz-%s needs a CMYKColor argument with a spotName)reportlab.lib.colorsrU  r,   r   r   r   r   r   )rE   r   rU  s      r   r   zPDFSeparationCMYKColor.__init__  so    222222$y)) 	h<t~?VVWWW 	hLt~Offggg			r   c                    g j         }t          | j                                                  D ]\  }}t          |          }|dk    rA|dk    r |d            |d           7 |t	          |                      |d           [|dk    r |d           n. |d            |t	          |                      |d            |d           d	d
                    |j                  z  S )zpcreate the postscript code for the tint transfer function
        effectively this is tint*c, tint*y, ... tint*kr'           r  z0.0mulr   dupexchz{%s}r  )r  r  r   r9   r-   r  __self__)rE   rP  r  r  s       r   _makeFuncPSz"PDFSeparationCMYKColor._makeFuncPS  s     ITY^^--.. 	 	CAaAhhA!ttc66AeHHHAeHHHHAc!ffIIIAeHHHHa44AeHHHHAeHHHAc!ffIIIAeHHH&				!*--..r   c                 <   t          t          d          t          | j        j                  t          d          t	          t          t          dt          d          t          d                              |                                 d           f          S )N
Separationr  r(   )r   r&   )r   r&   r   r&   r   r&   r   r&   )FunctionTypeDomainRange)rA  r  r  )r  r   r   r   r@  rw   rB  r]  rQ   s    r   r   zPDFSeparationCMYKColor.value  s    L))DI.//L))#0)*#25#9#9"12C"D"D2 2 2 $ $
 !% 0 0 2 2 $  	    	r   N)r   r   r   r   r]  r   r   r   r   r   r     sA          / / /.    r   r   c                   6    e Zd ZdZg ZdZedz   Zd Zd Zd Z	dS )PDFFunctionz"superclass for all function types.)r`  ra  )rb  c                    i }| j         D ]
\  }}|||<   |                    |           | j        D ]}||vrt          d|z            | j        }|                                D ]}||vrt          d|z            t          |          S NrF  z!bad annotation dictionary name %s)r_  rc   rG  r   rH  r   rw   )rE   rI  rC  r   rJ  rH  s         r   FunctionDictzPDFFunction.FunctionDict  s    - 	 	JT#AdGG	M 	G 	GD1}} !>!EFFF N	FFHH 	M 	MD9$$ !Dt!KLLL %Qr   c                      t          d          Nz?Dict undefined for virtual superclass PDFShading, must overloadrM  rI   s     r   rN  zPDFFunction.Dict      Z[[[r   c                 V    |                      |          }|                    |          S rH   rP  rQ  s      r   r5   zPDFFunction.format  %    IIhxx!!!r   N)
r   r   r   rV   r_  rG  rH  rg  rN  r5   r   r   r   rd  rd    s^        ,,H)H#I     \ \ \
" " " " "r   rd  c                   n    e Zd Zej        d ed          fgz   Zej        dz   Zej        dz   Zd Zd Z	dS )PDFExponentialFunctionra  )rX  g      ?)N)C0C1ro  c                 >    || _         || _        || _        || _        d S rH   )rp  rq  ro  rV  )rE   rp  rq  ro  rI  s        r   r   zPDFExponentialFunction.__init__	  s"    r   c                     i }|                     | j                   d|d<   t          | j                  |d<   t          | j                  |d<   | j        |d<    | j        di |S )Nr  r`  rp  rq  ro  r   )rc   rV  r  rp  rq  ro  rg  rE   r<   rC  s      r   rN  zPDFExponentialFunction.Dict
	  so    	.!$'**$!$'**$# t %%1%%%r   N)
r   r   r   rd  r_  r  rG  rH  r   rN  r   r   r   rn  rn  	  sl        #//*2M2M'N&OOH#f,H%(99I  
& & & & &r   rn  c                   B    e Zd Zej        dz   Zej        dz   Zd Zd ZdS )PDFStitchingFunction)	FunctionsBoundsEncodec                 >    || _         || _        || _        || _        d S rH   )rw  rx  ry  rV  )rE   rw  rx  ry  rI  s        r   r   zPDFStitchingFunction.__init__	  s"    "r   c                    i }|                     | j                   d|d<   t          fd| j        D                       |d<   t          | j                  |d<   t          | j                  |d<    | j        di |S )Nr'   r`  c                 :    g | ]}                     |          S r   )r4   )r  r/   r<   s     r   r  z-PDFStitchingFunction.Dict.<locals>.<listcomp>	  s'    "Q"Q"QQ8#5#5a#8#8"Q"Q"Qr   rw  rx  ry  r   )rc   rV  r  rw  rx  ry  rg  rt  s    ` r   rN  zPDFStitchingFunction.Dict	  s    	.!"Q"Q"Q"Q$."Q"Q"QRR+t{++(t{++( t %%1%%%r   N)r   r   r   rd  rG  rH  r   rN  r   r   r   rv  rv  	  sN        #&GGH%(III  
& & & & &r   rv  c                   2    e Zd ZdZdZedz   Zd Zd Zd ZdS )
PDFShadingz!superclass for all shading types.)ShadingTyper  )
Backgroundr  	AntiAliasc                     i }|                     |           | j        D ]}||vrt          d|z            | j        }|                                D ]}||vrt          d|z            t          |          S rf  )rc   rG  r   rH  r   rw   )rE   rI  rC  r   rH  s        r   ShadingDictzPDFShading.ShadingDict(	  s    	M 	G 	GD1}} !>!EFFF N	FFHH 	M 	MD9$$ !Dt!KLLL %Qr   c                      t          d          ri  rM  rI   s     r   rN  zPDFShading.Dict4	  rj  r   c                 V    |                      |          }|                    |          S rH   rP  rQ  s      r   r5   zPDFShading.format9	  rl  r   N)	r   r   r   rV   rG  rH  r  rN  r5   r   r   r   r~  r~  $	  sZ        ++,H<<I
  
  
 \ \ \
" " " " "r   r~  c                   B    e Zd Zej        dz   Zej        dz   Zd Zd ZdS )PDFFunctionShading)Function)ra  r  r  c                 0    || _         || _        || _        d S rH   )r  r  rV  )rE   r  r  rI  s       r   r   zPDFFunctionShading.__init__@	  s     $r   c                     i }|                     | j                   d|d<   t          | j                  |d<   |                    | j                  |d<    | j        di |S )Nr&   r  r  r  r   )rc   rV  r   r  r4   r  r  rt  s      r   rN  zPDFFunctionShading.DictD	  sj    	-!$/22, **4=99*t$$!$$$r   Nr   r   r   r~  rG  rH  r   rN  r   r   r   r  r  =	  sM        "]2H$'GGI  % % % % %r   r  c                   B    e Zd Zej        dz   Zej        dz   Zd Zd ZdS )PDFAxialShadingCoordsr  r  ra  r  Extendc                 F    ||||f| _         || _        || _        || _        d S rH   r  r  r  rV  )rE   x0y0x1y1r  r  rI  s           r   r   zPDFAxialShading.__init__P	  s+    2r2& $r   c                     i }|                     | j                   d|d<   t          | j                  |d<   t	          | j                  |d<   |                    | j                  |d<    | j        di |S )Nr  r  r  r  r  r   	rc   rV  r   r  r  r  r4   r  r  rt  s      r   rN  zPDFAxialShading.DictU	  }    	-!$/22,%dk22( **4=99*t$$!$$$r   Nr  r   r   r   r  r  L	  R        "%;;H$ (6 6I  
% % % % %r   r  c                   B    e Zd Zej        dz   Zej        dz   Zd Zd ZdS )PDFRadialShadingr  r  c	                 J    ||||||f| _         || _        || _        |	| _        d S rH   r  )
rE   r  r  r0r  r  r1r  r  rI  s
             r   r   zPDFRadialShading.__init__b	  s/    2r2r2. $r   c                     i }|                     | j                   d|d<   t          | j                  |d<   t	          | j                  |d<   |                    | j                  |d<    | j        di |S )Nr'   r  r  r  r  r   r  rt  s      r   rN  zPDFRadialShading.Dictg	  r  r   Nr  r   r   r   r  r  ^	  r  r   r  __main__z-There is no script interpretation for pdfdoc.r  rH   )__version__rV   r`  r  r  collectionsr   r  r   	reportlabr   r   r   r   r   r	   r
   r   r   r   r   r   reportlab.lib.rl_accelr   r   r   r   r   hashlibr   sysr   	Exceptionr   r!   r"   r#   r$   r%   rV  rB  r   r0   r5   rA   formNamerC   r2   rU   rY   PDFtruePDFfalsePDFnullr   rh  recompilerk  ro  ru  ro   chrr   rw   r  r  r  r  r  r  r  r  r@  r  r  r  r  r  r   r  r'  r  r!  rB  rj   rm   r}  r  r  r  r  r  rq   r  rr   r  r   ru   r3  rS  rZ  rc  rk  ro  rs  r.  r^  r  r  r  r  r  r  r  r  r  r  r  r>  r  rH  r  r   rd  rn  rv  r~  r  r  r  r   r   r   r   r   <module>r     s   	             # # # # # # & & & & & &       P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P  P Z Z Z Z Z Z Z Z Z Z Z Z ( ( ( ( ( (            	 	 	 	 	y 	 	 	 &    
 	  d   = = =' ' ' '4' ' '        	 	 	 	 	 	 	 	    y   
`( `( `( `( `() `( `( `(F 
% % % % %i % % %   
			
7##	 	 	  G* G* G* G* G*	 G* G* G*R CIIT    +  +  +  +  + I +  +  + Z       / / /4 4 4 4 4= 4 4 4    %9   (( ( ( ( ( ( ( ( ('))	' 	' 	' 	' 	' 	' 	' 	' .-//(2 (2 (2 (2 (2	 (2 (2 (2T	 	 	 	 
! ! ! ! !y ! ! !.    h       	   k k k k k k k k& & & & &i & & &<#- #- #- #- #-) #- #- #-J& & & & &Y & & &        6' ' ' ' ') ' ' ':3 3 3 3 3 3 3 3j         z      0T4 T4 T4 T4 T4j T4 T4 T4n	 	 	 	 	Y 	 	 	&1 &1 &1 &1 &1J &1 &1 &1PH H H H H: H H HV
 
 
$ $ $ $ $9 $ $ $# # # # # # # #~# ~# ~# ~# ~#) ~# ~# ~#@     @ ' ' ' ' 'i ' ' 'T&" &" &" &" &" &" &" &"P( ( ( ( ( ( ( ( ( ( ( ( (Z ( ( (6(( (( (( (( ((* (( (( ((T    (   0 0 0# # # # #9 # # #8 8 8 8 8i 8 8 8(- - - - -) - - -`
# 
# 
# 
# 
#	 
# 
# 
## # # # #	 # # #    *   # # # # # # # #    ,   # # # # # # # #    ,   # # # # # # # #1$ 1$ 1$ 1$ 1$I 1$ 1$ 1$r# # # # #9 # # #4    l   F>. >. >. >. >.Y >. >. >.@" " " " "9 " " " l	C	CS" S" S" S" S"i S" S" S"j. . . . . . . .`" " " " ") " " "8& & & & &[ & & &$& & & & &; & & &"" " " " " " " "2% % % % % % % %% % % % %j % % %$% % % % %z % % %$ Z	E
9::::: r   