403Webshell
Server IP : 217.160.0.135  /  Your IP : 216.73.217.85
Web Server : Apache
System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64
User : sws1074145052 ( 1074145052)
PHP Version : 8.3.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/reportlab/graphics/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/python3/dist-packages/reportlab/graphics/__pycache__/shapes.cpython-311.pyc
�

Y�b����x�dZdZddlZddlZddlmZmZmZmZm	Z	m
Z
ddlmZddl
mZmZmZmZmZddlmZddlmZdd	lTdd
lmZmZeedd����Zdd	lTddlm Z dd
l!m"Z"ddl#m$Z$ddl%m&Z&m'Z'e$edd��Z(e$edd��Z)e$edd��Z*dZ+dZ,idd�dej-�dd�dd�dd�dd�dd�dd�dd�dd�dd�d d�d!ej-�d"e&�d#d�d$e�d%d&�Z.dd	l/Td'�Z0d(�Z1Gd)�d*��Z2Gd+�d,��Z3d-�Z4d.�Z5d/�Z6d0�Z7Gd1�d2e3e2��Z8Gd3�d4e8��Z9dmd5�Z:dmd6�Z;dnd8�Z<d9�Z=Gd:�d;e9e��Z>Gd<�d=��Z?Gd>�d?e@��ZAeA��ZAGd@�dAe8��ZBGdB�dCeB��ZCGdD�dEeB��ZDeEeFdF����\ZGZHZIZJdGZKgdH�ZLdodI�ZMdde'e'dJe'dKe'e&e&dLe&dMe&iZNGdN�dOeD��ZOeO��ZPdpdP�ZQGdQ�dReO��ZRgdddfdS�ZSGdT�dUeD��ZTGdV�dWeD��ZUGdX�dYeD��ZVGdZ�d[eD��ZWGd\�d]eD��ZXGd^�d_eD��ZYGd`�daeB��ZZGdb�dceO��Z[defdd�Z\Gde�dfe8��Z]Gdg�dhe2��Z^Gdi�dje8��Z_dk�Z`eadlkre`��dSdS)qz3.5.60z9Core of the graphics library - defines Drawing and Shapes�N)�pi�cos�sin�sqrt�radians�floor)�Flowable)�
shapeChecking�verbose�defaultGraphicsFontName�_unset_�
decimalSymbol)�logger)�colors)�*)�isSeq�asBytes�)�fp_str)�stringWidth)�tt2ps)�
FILL_EVEN_ODD�
FILL_NON_ZEROzNon-Zero WindingzEven-Odd�	transform�rrrrrr�strokeColor�strokeWidth�
strokeLineCap�strokeLineJoin�strokeMiterLimit�
�strokeDashArray�
strokeOpacity�fillOpacity�
fillOverprintF�strokeOverprint�
overprintMask�	fillColor�fillMode�fontSize�fontName�
textAnchor�startc	��d}|D]!}t|t|||����}�"t|��|z}|}	|ddkr	|}
|	|z
}	n|ddkrd}
n|dz}
|	|
z}	|ddkr|}|dkrd}nR|dkr|}nH|dz}nA|dd	krd}|dkr|}n*|dkrd}n!|dz}n|dz}|dkr|}n|dkr|}nd}||
||||	fS)
Nr�s�ng@����e�endr-�w)�maxr�len)
�text�fontr*�leadingr,�	boxAnchorr4�t�h�yt�yb�xb�xts
             �;/usr/lib/python3/dist-packages/reportlab/graphics/shapes.py�_textBoxLimitsrBCsb��	�A�
�1�1����+�a��h�/�/�0�0����D�	�	�'��A�	�B���|�S����R��
�!�V���	�1��s�	�	�
����R��V��
�"�W����}�c����R���u���1�b�b�
��
 �
 ��r�"�"��2�c�6�b�b�	�2���	�	�
���u���1�b�b�
��
 �
 �q�"�"��S�5�b�b��R��V���u���B�3�b�b�
��
 �
 �r�"�"��b�
�r�1�a��R���c	��tt|��||f||z|f||z||zf|||zff��}d�|D��}d�|D��}t|��t|��t|��t|��|fS)z�
    Find the corner points of the rotated w x h sized box at x,y
    return the corner points and the min max points in the original space
    c��g|]
}|d��S�r���.0�xs  rA�
<listcomp>z%_rotatedBoxLimits.<locals>.<listcomp>k������!��1����rCc��g|]
}|d��S�rrGrHs  rArKz%_rotatedBoxLimits.<locals>.<listcomp>lrLrC)�zTransformPoints�rotate�minr5)rJ�yr4r<�angle�C�X�Ys        rA�_rotatedBoxLimitsrWes���
	������1��q��s�1�g�q��s�1�Q�3�i��1�Q�3��'H�I�I�A���q����A���q����A��q�6�6�3�q�6�6�3�q�6�6�3�q�6�6�1�,�,rCc��eZdZdZd�ZdS)�_DrawTimeResizeablez:Addin class to provide the horribleness of _drawTimeResizec��t|d��rE|j}|j}||c|_|_t|d��r|�||��dSdSdS)N�_canvas�_drawTimeResize)�hasattrr[�_drawing�width�heightr\)�selfr4r<�canvas�drawings     rAr\z#_DrawTimeResizeable._drawTimeResizeqsu���4�	�"�"�	,��\�F��o�G�,-�q�)�G�M�7�>��v�/�0�0�
,��&�&�q��+�+�+�+�+�	,�	,�
,�
,rCN)�__name__�
__module__�__qualname__�__doc__r\rGrCrArYrYos)������D�D�,�,�,�,�,rCrYc��eZdZifd�ZdS)�_SetKeyWordArgsc�\�|���D]\}}t|||���dS)z9In general properties may be supplied to the constructor.N)�items�setattr)ra�keywords�key�values    rA�__init__z_SetKeyWordArgs.__init__zs>��"�.�.�*�*�	&�	&�J�C���D�#�u�%�%�%�%�	&�	&rCN)rdrerfrprGrCrAririys+������ "�&�&�&�&�&�&rCric��d�|D��}|sdS|d\}}}}|dd�D]'\}}}}	||kr|}||kr|}||kr|}|	|kr|	}�(||||fS)Nc��g|]}|�|��S�NrGrHs  rArKz"getRectsBounds.<locals>.<listcomp>�s��.�.�.�q��
��
�
�
rCrrrG)
�rectList�L�xMin�yMin�xMax�yMax�x1�y1�x2�y2s
          rA�getRectsBoundsr~�s���.�.�H�.�.�.�A���T�T��q�T��D�$��d��a�b�b�E�����R��R�
��9�9��D�
��9�9��D�
��9�9��D�
��9�9��D���$��d�#�#rCc���|d||z
zz
|z
}d|d|zz
|zz}||z
}|g}||zd|z|zz
}|dkr�t|��}|dkr|}d||zz}	g}
	|
�|	|z��n#YnxYw	|
�||	z��n#YnxYw|dz}|dz}|
D]9}d|cxkrdkr*n�|�||||z|zz|zz|z���:|�|��|S)ag
    this is used to find if a curveTo path operator has extrema in its range
    The curveTo operator is defined by the points y0, y1, y2, y3

        B(t):=(1-t)^3*y0+3*(1-t)^2*t*y1+3*(1-t)*t^2*y2+t^3*y3
            :=t^3*(y3-3*y2+3*y1-y0)+t^2*(3*y2-6*y1+3*y0)+t*(3*y1-3*y0)+y0
    and is a cubic bezier curve.

    The differential is a quadratic
        t^2*(3*y3-9*y2+9*y1-3*y0)+t*(6*y2-12*y1+6*y0)+3*y1-3*y0

    The extrema must be at real roots, r, of the above which lie in 0<=r<=1

    The quadratic coefficients are
        a=3*y3-9*y2+9*y1-3*y0 b=6*y2-12*y1+6*y0 c=3*y1-3*y0
    or
        a=y3-3*y2+3*y1-y0 b=2*y2-4*y1+2*y0 c=y1-y0  (remove common factor of 3)
    or
        a=y3-3*(y2-y1)-y0 b=2*(y2-2*y1+y0) c=y1-y0

    The returned value is [y0,x1,x2,y3] where if found x1, x2 are any extremals that were found;
    there can be 0, 1 or 2 extremals
    ���rg�g�?r)r�append)�y0r{r}�y3�a�b�crV�d�q�Rr;s            rA�_getBezierExtremar��sT��0	��B�r�E��l�2�o�A���A�b�D����n�A���e�A�	��A�	
�!��a��c�!�e��A��!�t�t���G�G���Q�3�3�Q�B���!�A�#�J����	�
�H�H�Q�q�S�M�M�M�M��	��D����	�
�H�H�Q�q�S�M�M�M�M��	��D����	�S���	�Q����	-�	-�A��!�w�w�w�w�Q�w�w�w�w�w�����A�q��s�1�u�I�a�K���+�,�,�,���H�H�R�L�L�L��Hs�A5�5A9�=B�Bc
�N�t|��}|fd�}tt|td|d������}tt|td|d������}t	|��t	|��t|��t|��fS)Nc��||SrsrG)�i�ps  rA�<lambda>zgetPathBounds.<locals>.<lambda>�s
��Q�q�T�rCrr�r)r6�list�map�rangerQr5)�pointsr0�f�xs�yss     rA�
getPathBoundsr��s����F���A��!�!�!�A�	
�c�!�E�!�A�a�L�L�!�!�	"�	"�B�	
�c�!�E�!�A�a�L�L�!�!�	"�	"�B���G�G�S��W�W�c�"�g�g�s�2�w�w�/�/rCc���|d}t|��rRd�|D��}d�|D��}t|��t|��t|��t|��fSt|��S)z"Helper function for list of pointsrc��g|]
}|d��SrFrG�rI�xys  rArKz#getPointsBounds.<locals>.<listcomp>����
(�
(�
(��b��e�
(�
(�
(rCc��g|]
}|d��SrNrGr�s  rArKz#getPointsBounds.<locals>.<listcomp>�r�rC)rrQr5r�)�	pointList�firstr�r�s    rA�getPointsBoundsr��st���a�L�E��U�|�|�(�
(�
(�i�
(�
(�
(��
(�
(�i�
(�
(�
(���B����R���#�b�'�'�3�r�7�7�3�3��Y�'�'�'rCc�Z�eZdZdZe��Zd�Zdd�Zd�Zd
d�Z	d�Z
er	d	�Zd
�Z
dS)�Shapea1Base class for all nodes in the tree. Nodes are simply
    packets of data to be created, stored, and ultimately
    rendered - they don't do anything active.  They provide
    convenience methods for verification but do not
    check attribiute assignments or use any clever setattr
    tricks this time.c�:�td|jjz���)zReturn a clone of this shape.z!No copy method implemented for %s)�NotImplementedError�	__class__rd�ras rA�copyz
Shape.copy�s��"�"E���H_�"_�`�`�`rCrc�n�i}|j���D]\}}|dd�dkr|||<�|S)zDInterface to make it easy to extract automatic
        documentationrr�_)�__dict__rk)ra�recur�propsrnros     rA�
getPropertieszShape.getProperties�sJ�����-�-�-�/�/�	#�	#�J�C���1�Q�3�x�3���"��c�
���rCc�:�|j�|��dS)zfSupports the bulk setting if properties from,
        for example, a GUI application or a config file.N)r��update)rar�s  rA�
setPropertieszShape.setProperties�s ��	
�
���U�#�#�#�#�#rC�c���t|��������}|���|r|dz}|D]\}}t	|�|�d|�����dS)z�Convenience. Lists them on standard output.  You
        may provide a prefix - mostly helps to generate code
        samples for documentation.�.z = N)r�r�rk�sort�print)ra�prefix�propList�nameros     rA�dumpPropertieszShape.dumpPropertiess���
��*�*�,�,�2�2�4�4�5�5���
�
�����	"��c�\�F�%�	7�	7�M�T�5�������u�u�5�6�6�6�6�	7�	7rCc��|j��|j���D]'}|ddkr||jvsJd|�d|������(|j���D]i\}}t	||��sJd|�d|�����t||��}|�|��sJd|�d	|�d
|jj������hdSdS)a.If the programmer has provided the optional
        _attrMap attribute, this checks all expected
        attributes are present; no unwanted attributes
        are present; and (if a checking function is found)
        checks each attribute.  Either succeeds or raises
        an informative exception.Nrr�zUnexpected attribute z
 found in zMissing attribute z from zInvalid value z for attribute z
 in class )	�_attrMapr��keysrkr]�getattr�validater�rd)rarn�attr�	metavalueros     rA�verifyzShape.verifysF���=�$��}�)�)�+�+�
e�
e���q�6�S�=�=��$�-�/�/�/�/�Z]�Z]�Z]�_c�_c�1d�/�/�/��#'�=�#6�#6�#8�#8�
K�
K���i��t�T�*�*�Y�Y�Y�d�d�d�TX�TX�,Y�Y�Y�Y���d�+�+�� �)�)�%�0�0�K�K�K�ej�ej�ej�lp�lp�lp�rv�sA�sJ�sJ�3K�K�K�K�K�%�$�
K�
KrCc�(�t|||��dS)zSBy default we verify.  This could be off
            in some parallel base classes.N)�validateSetattr)rar�ros   rA�__setattr__zShape.__setattr__%s��
�D��e�,�,�,�,�,rCc� �td���)�5Returns bounding rectangle of object as (x1,y1,x2,y2)z+Shapes and widgets must implement getBounds�r�r�s rA�	getBoundszShape.getBounds*s��!�"O�P�P�PrCNrN)r�)rdrerfrg�AttrMapr�r�r�r�r�r�r
r�r�rGrCrAr�r��s����������w�y�y�H�a�a�a�����$�$�$�
7�
7�
7�
7�K�K�K�"�-�	6�	-�	-�	-�
Q�Q�Q�Q�QrCr�c��eZdZdZeeedd���eed���eed���eedd���eed	d����
��Z	d�Z
d�Zd d�Zd�Z
d d�Zd�Zd�Zd�Zd!d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd
S)"�GroupaGroups elements together.  May apply a transform
    to its contents.  Has a publicly accessible property
    'contents' which may be used to iterate over contents.
    In addition, child nodes may be given a name in which
    case they are subsequently accessible as properties.z"Coordinate transformation to applyr��desc�
advancedUsagezContained drawable elements�r��Turn on stroke overprinting�Turn on fill overprinting�overprinting for ordinary CMYK)r�contentsr&r%r'c���|j���|_g|_d|_|D]}|�|���t
�||��dS)z�Initial lists of elements may be provided to allow
        compact definitions in literal Python code.  May or
        may not be useful.rN)r��cloner�r�addrirp)ra�elementsrm�elts    rArpzGroup.__init__=se���
�+�+�-�-��
���
�&����	�	�C��H�H�S�M�M�M�M�	� � ��x�0�0�0�0�0rCc��|rW|t|j�����vrtt��|j|<t|||��dSdS)zLif name is not None add an attribute pointing to node and add to the attrMapN)r�r�r��AttrMapValue�isValidChildrl)rar��nodes   rA�
_addNamedNodezGroup._addNamedNodeMsa���	&��4��
� 2� 2� 4� 4�5�5�5�5�&2�<�&@�&@��
�d�#��D�$��%�%�%�%�%�	&�	&rCNc��|�Kt|��s
Jd���|j�|��|�||��dSdS)z�Appends non-None child node to the 'contents' attribute. In addition,
        if a name is provided, it is subsequently accessible by name
        Nz1Can only add Shape or UserNode objects to a Group)r�r�r�r�)rar�r�s   rAr�z	Group.addTsa��
����%�%�Z�Z�'Z�Z�Z�Z��M� � ��&�&�&����t�D�)�)�)�)�)��rCc�F�|�|��|jdS)Nr1)r�r�)rar�s  rA�_nnz	Group._nn^s����������}�R� � rCc���|�`t|��s
Jd���|dkr|g|j||�<n|j�||��|�||��dSdS)z4Inserts sub-node n in contents at specified locationNz4Can only insert Shape or UserNode objects in a Groupr)r�r��insertr�)rar�r0r�s    rAr�zGroup.insertbs{���=���?�?�Z�Z�$Z�Z�Z�Z���s�s�%&�C��
�a��c�"�"��
�$�$�Q�q�)�)�)����t�A�&�&�&�&�&�
�=rCc�D�t|t��rt|j|j��p
t	��}|j���|_t|d��r|jdd�|_|j	}|j	j
}|D]u}t|t��r|���}n>t|t��r|�
��}n|���}||���v|�|��|S)z9Return a new object which only contains primitive shapes.rN)�
isinstance�Drawingr_r`r�r�r�r]rr�r��UserNode�provideNode�expandUserNodesr��_copyNamedContents)ra�obj�
self_contentsr��child�newChilds      rAr�zGroup.expandUserNodesls����g�&�&�J�7�4�:�d�k�+J�+J�U�e�g�g���}�*�*�,�,����3�{�#�#�F�T�^�A�A�A�5F�S�]��
�
��L���"�	�	�E��%��*�*�
(� �,�,�.�.����E�5�)�)�
(� �0�0�2�2��� �:�:�<�<��
�A�h�K�K�K�K�����$�$�$��
rCc��t��}t|d��r|j|_t|d��r|jdd�|_|���dd�}|r�|�d��}t
|t��r(|�|�	����nt
|t��rU|�
��}|jdkr |j�|j��n+|�
|��n|�
|��|��|S)z return a fully expanded object�	__label__rNrr)r�r]r�r�getContents�popr�r�r�r��_exploder��extendr�)rar��Pr0s    rAr�zGroup._explode�s���g�g���4��$�$�	)��.�C�M��3�{�#�#�F�T�^�A�A�A�5F�S�]������q�q�q�!���	����a���A��!�X�&�&�	
���������)�)�)�)��A�u�%�%�
��J�J�L�L���;�
�-�-��L�'�'��
�3�3�3�3��G�G�A�J�J�J�J�����
�
�
��	��
rCc�N�|jD]}|j�|���dSrs)r�r�)rar�r�s   rA�
_copyContentszGroup._copyContents�s6���]�	'�	'�E��L����&�&�&�&�	'�	'rC�r�c�^�ddlm}|j}|s&t|j�����}|j���D]]\}}||vr2|�|��}t|||j|���;||vr||vrt||||�����^dS)Nr)r�)	r�r�r�r�r�r�rk�indexrl)	rar��aKeys�noCopyr�r��k�v�poss	         rAr�zGroup._copyNamedContents�s����������
�
��8�d�4�=�#5�#5�#7�#7�8�8�e��M�'�'�)�)�	)�	)�D�A�q��M�!�!�#�)�)�!�,�,����Q���S� 1�2�2�2�2��e���������Q���Q���(�(�(��	)�	)rCc��|j���|_|�|��|�|��|S)z
copies to obj)r�r�r�r��rar�s  rA�_copyzGroup._copy�sD���}�*�*�,�,������3��������$�$�$��
rCc�P�|�|�����S)zreturns a copy)rr�r�s rAr�z
Group.copy�s���z�z�$�.�.�*�*�+�+�+rCc�T�t|jt|����|_dS�z&Convenience to help you set transformsN)�mmultrrP)ra�thetas  rArPzGroup.rotate�s���t�~�v�e�}�}�=�=����rCc�V�t|jt||����|_dSr)rr�	translate)ra�dx�dys   rAr
zGroup.translate�s#���t�~�y��R�/@�/@�A�A����rCc�V�t|jt||����|_dSr)rr�scale)ra�sx�sys   rArzGroup.scale�s!���t�~�u�R��}�}�=�=����rCc��tt|jt|����t|����|_dSr)rr�skewX�skewY)ra�kx�kys   rA�skewz
Group.skew�s/���u�T�^�U�2�Y�Y�?�?��b�	�	�J�J����rCc�8�|jdd�||fz|_dS)z2Convenience function to set the origin arbitrarilyN���)r�rarJrRs   rA�shiftzGroup.shift�s!�������,�a��U�2����rCc�x�t|_|j�|j��||_||_dS)z| Convenience function to make a drawing from a group
            After calling this the instance will be a drawing!
        N)r�r�r�r��_xtraAttrMapr_r`)rar_r`s   rA�	asDrawingzGroup.asDrawing�s6��!����
���T�.�/�/�/���
�����rCc�N�t|dd��}|j}|r
||vr|g|z}|S)z[Return the list of things to be rendered
        override to get more complicated behaviour�
backgroundN)r�r�)rar�rTs   rAr�zGroup.getContents�s9��
�D��d�+�+���M���&��!���!��Q��Q��rCc�J�|jr�g}|jD])}|�|������*t|��}|�dS|\}}}}|j}||g||g||g||gg}g}	|D]%}
|	�t||
�����&t
|	��SdSrs)r�r�r�r~r�transformPointr�)rar��elemrzr{r|r}�trans�corners�
newCorners�corners           rAr�zGroup.getBounds�s����=�	��A��
�
+�
+��������)�)�*�*�*�*���"�"�B��z�$�$��N�B��B���N�E��2�w��R��2�r�(�R��G�<�G��J�!�
A�
A���!�!�.���"?�"?�@�@�@�@�"�:�.�.�.��4rCrs)Nr�)rdrerfrgr�r��isTransform�isListOfShapes�	isBooleanr�rpr�r�r�r�r�r�r�r�rr�rPr
rrrrr�r�rGrCrAr�r�.s�������<�<��w� �L��2V�ef�g�g�g��<��4Q�R�R�R�&�,�y�6S�T�T�T�$��Y�4O�^_�`�`�`�$��Y�4T�cd�e�e�e�
�
�
�H�1�1�1� &�&�&�*�*�*�*�!�!�!�'�'�'�'����,���*'�'�'�	)�	)�	)�	)����,�,�,�>�>�>�B�B�B�>�>�>�K�K�K�3�3�3�����������rCr�c��ddlm}|j}||��j}|p|j}||vr|g||<dS|||vr||�|��dSdS)z7add an import of obj's class to a dictionary of importsr)�	getmoduleN)�inspectr+r�rdr�)r��Ir0r+r��ms      rA�
_addObjImportr/�sy��!�!�!�!�!�!��
�A��	�!����A�	��Q�Z�A���z�z��s��!����	
�!�A�$���	�!����A������
�rCc�&�t|t��rt|��St|��rdd}|D]}|dt	||��zz}�t|t
��r
d|dd�zSd|dd��t
|��dkrdpd�d	�S|tur|rt||d
��d
St|t���r8|rt||��ddl
m}||j��\}}}}}	}
}|r,|t
|��d�}|t
|��d�=ng}|�
��}
|jjdz}|dd�D].}|
�|d��}|dt	||��zz
}�/|D]1}|
�|d��}||�d
t	||���d�z
}�2|
���D]&\}}|
|}||�d
t	||���d�z
}�'|dd�d	zSt%|��S)zEreturn a repr style string with named fixed args first, then keywordsr�z%s,z[%s]Nr1�(r�,�)�
EmptyClipPathr)�getfullargspec�=)r��floatrr�_reprr�r6r4r/r�r,r5rpr�r�rdr�rk�repr)rar-r/r�r5�args�varargs�varkw�defaults�
kwonlyargs�kwonlydefaults�annotations�kargsr�r0s               rAr8r8�sy���$�u���#��d�|�|��	�t���!����	'�	'�A��E�E�!�A�J�J�&�&�A�A��d�4� � �	B��A�c�r�c�F�?�"�	B� !��"��v�v�c�$�i�i��l�&:�s�&@�b�&@�&@�A�A�	
��	�	��3�m�D��?�3�3�3���	�D��	�	���#�m�D��#�#�#�*�*�*�*�*�*�R`�R`�ae�an�Ro�Ro�O��g�u�h�
�N�K��	��#�h�-�-����)�E��c�(�m�m�^�_�_�%�%��E���� � ���N�#�C�'���a�b�b��	$�	$�A����a��
�
�A�
���q����#�#�A�A��	+�	+�A����a��
�
�A�
�Q�Q�Q�u�Q�q�z�z�z�z�*�*�A�A��7�7�9�9�	,�	,�C�A�a��!��A�
�Q�Q�Q��a��
�
�
�
�+�+�A�A���"��v�c�z���D�z�z�rC�		c	�x�d}t|dd��}|r||�|�dt|���d�z}|j}|D]�}t|t��rNd|z}|dz
}t|dd��}	|	rd|	z}	||�|�d	|�d
|	�d�z}|t|||||��z}|dz}�e||�|�dt||���d�z}��|S)
Nr�rz
.transform = �
zv%drr��#r6z
._nn(Group())z.add(z)
)r�r8r�r�r��_renderGroupPy)
�G�pfxr-r��indentr/rTr0�npfx�ls
          rArFrFs��
�A���+�d�#�#�A��C�a�f�f�S�S�S��q�����B�C�!�	
��A�
�
?�
?���a����		?��1�9�D�
��F�A���+�b�)�)�A��M�C��E�!��&�&����c�c�c�!�!�!�D�D�A��N�1�T�!�A�f�5�5�5�A�
��F�A�A����s�s�s�5��1�:�:�:�:�>�>�A�A��HrCc���|�|j��i}t|��}|���D]*}|�|��r|||||d�<�+|Srs)r�r�r6r��
startswith)rarH�kwr�r0r�s      rA�_extraKWrO/sl���I�I�d�m����
�A��C���A�
�W�W�Y�Y�����<�<����	��!�u�A�a����e�H���HrCc��eZdZdZhd�Zehd�z
Zeeed���eed���ed��ee	d���ee
d	d
dd��d
���ee
dddd��d���eed���eed���eed�����	�	Z
eeeee
e�dd���d������Ze�e
��d(d�Zd�Zefd�Zd�Zd �Zd!�Zd"�Zd)d$�Zd*d%�Zd+d'�ZdS),r�zOutermost container; the thing a renderer works on.
    This has no properties except a height, width and list
    of contents.>�ps�py�bmp�eps�gif�jpg�pct�pdf�png�svg�tif�jpeg�pict�tiff�tiff1�tiffl�tiffp>rQrRrTrXrZzDrawing width in points.r�zDrawing height in points.Nz=Background widget for the drawing e.g. Rect(0,0,width,height)�LEFT�RIGHT�CENTER�CENTREz+Horizontal alignment within parent document�TOP�BOTTOMz)Vertical alignment within parent documentzGlobal scaling for renderingz.override the STATE_DEFAULTS value for fontNamez.override the STATE_DEFAULTS value for fontSize)	r_r`�canvr�hAlign�vAlign�renderScale�initialFontName�initialFontSizerr)�lo�emptyOKzOne or more plot modes)�BASE�formats���c��d|_tj|g|�Ri|��||_||_d|_d|_d|_dS)Nrbrg��?)rr�rpr_r`rirjrk)rar_r`�nodesrms     rArpzDrawing.__init__hsS�����
��t�.�U�.�.�.�X�.�.�.���
��������������rCc	�~�gd�gd�d�}t|���d|��}d|jjz}d}|���D]:\}}|d|�dt|��d	d
��dd���d
�z}�;|d|zz}|d|j�d|j�d�z}|dz}||z}|d|zz}|S)N)�_DrawingEditorMixinr�r�)�Color�	CMYKColor�
PCMYKColor)zreportlab.graphics.shapeszreportlab.lib.colorsra�ExplodedDrawing_z0#Autogenerated by ReportLab guiedit do not edit
zfrom z import rr1�'r�rDz(
class %s(_DrawingEditorMixin,Drawing):
z	def __init__(self,width=z,height=z,*args,**kw):
z1		Drawing.__init__(self,width,height,*args,**kw)
zZ

if __name__=="__main__": #NORUNTESTS
	%s().save(formats=['pdf'],outDir='.',fnRoot=None)
)	rFr�r�rdrk�str�replacer_r`)rar-rGr0r/r.�os       rA�	_renderPyzDrawing._renderPyqs��-V�-V�-V�(J�(J�(J�
�
��
�4�=�=�?�?�6�!�4�4�����!8�8��?���G�G�I�I�	M�	M�D�A�q���Q�Q�Q�s�1�v�v�a��d�|�/C�/C�C��/K�/K�/K�/K�L�L�A�A�
�<�q�@�@��
�A�4�:�:�:�VZ�Va�Va�Va�b�b��
�F�F��
��E��
�u�xy�y�y���rCc��ddlm}|�||jdd|tur|nt|dt�����dS)z�This is used by the Platypus framework to let the document
        draw itself in a story.  It is specific to PDF and should not
        be used directly.r��	renderPDF�
_showBoundary��showBoundaryN)�reportlab.graphicsr��drawrhr
r�)rar�r�s   rAr�zDrawing.draw�sj��	1�0�0�0�0�0����t�T�Y��1�-9��-H�-H�\�\�g�VZ�[j�kr�Ns�Ns�	�	u�	u�	u�	u�	urCc�T�|j}|j}|j}|dkr
||z}||z}||fS)Nru)r_r`rk)ra�
availWidth�availHeightr_r`rks      rA�wrapzDrawing.wrap�sA���
������&�������[� �E��k�!�F��f�}�rCc�j�t�|��}|j|_|j|_|S)z:Return a new drawing which only contains primitive shapes.)r�r�r_r`rs  rAr�zDrawing.expandUserNodes�s,���#�#�D�)�)���J��	��[��
��
rCc�h�|�|�|j|j����S)zReturns a copy)rr�r_r`r�s rAr�zDrawing.copy�s&���z�z�$�.�.���T�[�A�A�B�B�BrCc�@�|�t|i|����Srs)rr�)rar:rNs   rA�asGroupzDrawing.asGroup�s!���z�z�%��+��+�+�,�,�,rCr�c
���|�dd��}t|t��rd|z}nd}|dz
}ddlm}d}	|s�t|d|jjdz��}t|d	d��}
t|
d
��r|
|��}
t|d
��r||
��}nE	||
z}n>#t$r1}t|���d��dkr�Yd}~nd}~wwxYw|�t|d
d��}t|d
��r||��}tj
�|��r#tj
�|��\}}n|pt|d
d��}|����tj��}|sd}tj
�|��s\tj
�t|dtj
�t(jd����|��}tj
�|��stj|��tj
�tj
�||����}tj
�|��}
|
ddd����|jvr|
d}d�|pt|ddg��D��}
|dur|fpt|d|��fd}t8jjt8jjf}|xt8j_t8j_d|
vr�ddl m!}|dz}|rtE|d|fz��|j#|||fdt|d|j$��itK|dfi|����|	dz}	t(j&dkrFddl'}ddl(}|�)|���*dd��|�+|��|j,D]�}||
vr�ddl m-}|�d|��}|rtE|||fz��t|d d��}|r>t|d|g��}||vr&t|d!d��s|�.��nd}|j#||f|t|d|j$��d"�tK|d#fi|����|	d$z|z}	|r|�/|����d%|
vr�	dd&l0m1}n#td$r	dd'l m3}YnwxYw|d(z}|rtE|d)|fz��|j#||f|t|d*d+g��dt|d*dd,g��dt|d-|j4��t|d|j$��t|d.|j5��d/�tK|d0fi|����|	d1z}	d2|
vrWdd3l m6}|d4z}|rtE|d5|fz��|j#||fdt|d|j$��itK|d6fi|����|	d7z}	d8|
vrWdd'l m3}|d9z}|rtE|d)|fz��|j#||fdt|d|j$��itK|d0fi|����|	d:z}	d;|
vr�|d<z}|rtE|d;|fz��to|d=��5}|�8ts|�:���;d>tj<������ddd��n#1swxYwY|	d?z}	|\t8j_t8j_t|d@��r|�=||	��|	r
||	dd�zpdS)Az�Saves copies of self in desired location and formats.
        Multiple formats can be supported in one call

        the extra keywords can be of the form
        _renderPM_dpi=96 (which passes dpi=96 to renderPM)
        �	seqNumberr�z%4d: zgenerating %s file %sr��	rl_config�fileNamePatternz%03d�chartId�__call__znot all arguments convertedN�outDirr��
_override_CWDrc�6�g|]}|�����SrG)�lowerrHs  rArKz Drawing.save.<locals>.<listcomp>�s ��T�T�T�!�A�G�G�I�I�T�T�TrCrqrXrr�z.pdf�PDFr��
showBorder�_renderPDF_z/.pdf�mac�CAROzPDF ��renderPM�_drawTimeCollector�disabled��fmtr��
_renderPM_z/.rT��renderPS_SEP��renderPSz.eps�EPS�EPS_info�Testing�	ReportLab�preview�	ttf_embed)�title�dept�companyr�r�r��
_renderPS_z/.epsrZ��	renderSVGz.svg�SVG�_renderSVG_z/.svgrQz.psz/.psrRz.py�wbrDz/.py�
saveLogger)>r�r��int�	reportlabr�r�r�rdr]�	TypeErrorr~�find�os�path�isabs�split�rstrip�sep�join�dirname�sys�argv�isdir�makedirs�normpath�splitextr��
_saveModesr�warnOnce�enabled�infoOncer�r�r��
drawToFiler�rO�platform�macfs�
macostools�FSSpec�SetCreatorType�touched�_bmModesr��clear�save�rlextra.graphicsr��ImportErrorr��eps_preview�
eps_ttf_embedr��open�writerr�r�linesepr�)rarqr�fnRootr�r�rN�genFmtr��extr��err�fnroot�plotMode�_savedr��filenamer�r��bmFmtr��dtc�dtcfmtsr�r�r�s                          rAr�zDrawing.save�s�	������B�'�'���f�S�!�!�	��v�%�F�F��F��)�)��'�'�'�'�'�'����
	O��T�"3�T�^�5L�V�5S�U�U�F��d�9�Q�/�/�G��w�z�*�*�
(�!�'�$�-�-���v�j�)�)�
O��������O�#�g�-�F�F�� �O�O�O��3�x�x�}�}�%B�C�C�a�G�G��G�G�G�G�G�����O����
�>��T�(�4�0�0�F��6�*�%�%�	"��V�D�\�\�F�
�7�=�=�� � �	:��W�]�]�6�2�2�N�F�F�F��9�w�t�H�S�9�9�F������'�'���/�/���#��v��w�}�}�V�$�$�~�r�w�|�|�G�D��Y[�Y`�Yh�Yh�il�iq�rs�it�Yu�Yu�<v�<v�w}�/~�/~�f��w�}�}�V�$�$�9�b�k�&�&9�&9�&9���!�!�"�'�,�,�v�f�"=�"=�>�>���7�#�#�F�+�+���A�;�q�r�r�?� � �"�"�d�o�5�5��a�[�F�T�T��(R�7�4�	�5�'�3R�3R�T�T�T���$�&�5�G�:�[�'�$�y�QX�:Y�:Y�9[�]^�_����(�&�/�*A�A��<C�C����&�/�"9��H���4�4�4�4�4�4��f�}�H��8��f��h�'7�7�8�8�8� �I� ��x��
\�
\�W�T�R^�_h�_u�Ev�Ev�
\�zB�CG�HU�z[�z[�XZ�z[�z[�
\�
\�
\���.�C��|�U�"�"�(�(�(�(�(�(�(�(����X�&�&�5�5�f�f�E�E�E��"�"�8�,�,�,��]�	+�	+�E��� � �7�7�7�7�7�7�&,�f�f�U�U�3���<�E�&�E�(�+;�";�<�<�<��d�#7��=�=���#�%�c�)�U�G�<�<�G���'�'���J�q�0I�0I�'��	�	�����"��#��#�D�(�`�u�'�RV�Wc�dm�dz�J{�J{�`�`�G�HL�MY�_�_�\^�_�_�`�`�`��D�j�5�(���*�����*�*�*���H���
8�E�E�E�E�E�E�E���
8�
8�
8�7�7�7�7�7�7�7�7�
8�����f�}�H��8��f��h�'7�7�8�8�8��H��� (�
D�(.�'.�t�J�	�{�'K�'K�A�'N�*1�$�z�2�k�BR�*S�*S�TU�*V�*1�$�y��AV�*W�*W�-4�T�,�y�G]�-^�-^�*1�$�{�9�CZ�*[�*[�
D�
D�#+�4��"B�"B�r�"B�"B�
D�
D�
D���.�C��H���4�4�4�4�4�4��f�}�H��8��f��h�'7�7�8�8�8� �I� �� (�
D�
D�-4�T�,�y�G]�-^�-^�
D�ai�jn�o|�bC�bC�@B�bC�bC�
D�
D�
D���.�C��8���3�3�3�3�3�3��e�|�H��8��f��h�'7�7�8�8�8��H���h�
S�
S�W�T�,�W`�Wm�=n�=n�
S�qy�z~�@L�rR�rR�OQ�rR�rR�
S�
S�
S���-�C��8����e�|�H��7��f��X��6�7�7�7��h�t�$�$�
L��������� 0� 0� 8� 8��b�j� I� I�J�J�K�K�K�
L�
L�
L�
L�
L�
L�
L�
L�
L�
L�
L����
L�
L�
L�
L���-�C�;A�8������!8��4��%�%�	(��O�O�F�3�'�'�'��%�v�c�!�"�"�g�~�+��+s=�*B0�0
C+�:'C&�&C+�,S3�3T�T�A[8�8[<�?[<c	��||jvs
Jd|z���ddlm}|dkrddlm}|�|��S||jvr7ddlm}|j|f|t|d|j	��d�t|d	fi|����S|d
krJ	ddlm}n#t$r	ddlm}YnwxYw|�||t|d|j	���
��S|dkr1ddlm}|�|t|d|j	�����S|dkr|���S|dkr6ddlm}	|	j|fdt|d|j	��it|dfi|����SdS)z,Converts to an 8 bit string in given format.zUnknown file format "%s"rr�rXr�r�r�r�r�rTr�r�)r�r�rQr�rRrZr�r�r�N)r�r�r�r�r��drawToStringr�r�r�r�rOr�r�r�r�r�r�)
ra�formatrr�rNr�r�r�r�r�s
          rA�asStringzDrawing.asStringsb�����(�(�(�*D�v�*M�(�(�(�'�'�'�'�'�'��U�?�?�4�4�4�4�4�4��)�)�$�/�/�/�
�t�}�
$�
$�3�3�3�3�3�3�(�8�(��X�6�w�t�T`�%�2�H4�H4�X�X�6>�t�L�6V�6V�SU�6V�6V�X�X�
X�
�u�_�_�
8�E�E�E�E�E�E�E���
8�
8�
8�7�7�7�7�7�7�7�7�
8�����(�(��*1�-4�T�,�y�G]�-^�-^�)�`�`�
`��t�^�^�3�3�3�3�3�3��(�(��G�D��V_�Vl�<m�<m�(�n�n�n�
�t�^�^��>�>�#�#�#�
�u�_�_�4�4�4�4�4�4�)�9�)�$�S�S�G�D��V_�Vl�<m�<m�S�px�y}�L�qR�qR�OQ�qR�qR�S�S�
S��_s�B�B�B�fitc�B�|���}|j}|j}t||g|�R�}	|	���\}
}}}
|dks$|dkrR|
|ks|||z
ks||ks	|
||z
kr4||
z
|z|z|	_|
|z
|z|z|	_dddd||
z
||z
f|	_nw|dks|dkr0|
|ks	|||z
kr!||
z
|z|z|	_dddd||
z
df|	_n;|dks|dkr/||ks	|
||z
kr |
|z
|z|z|	_ddddd||z
f|	_|	S)	z?return a base class drawing which ensures all the contents fitsr��expandrr�fitx�expandx�fity�expandy)r�r_r`r�r�r)ra�kind�lpad�rpad�bpad�tpadrT�oW�oHrc�xL�yL�xH�yHs              rA�resizedzDrawing.resized;s���������
�Z��
�[���"�R�#��#�#�#���'�'�)�)���2�b����;�;�4��>�>�r�$�w�w�"�R��W�*�*��4���SU�VX�Y]�V]�S]�S]��r�E�$�J�t�O�G�M���U�4�Z��_�G�N�!"�1�Q�q��b���b�� 9�G���
�6�\�\�d�I�o�o�2�d�7�7�b��D��j�j��r�E�$�J�t�O�G�M�!"�1�Q�q��b��� 3�G���
�6�\�\�d�I�o�o�2�d�7�7�b��D��j�j���U�4�Z��_�G�N�!"�1�Q�q��4��7� 3�G���rC)rrrs)NNNNr�)Nr)r�rrrr)rdrerfrgr�r�r�r��isNumber�isValidChildOrNone�OneOf�isStringOrNone�isNumberOrNonerr��
SequenceOfr�r�rpr�r
r�r�r�r�r�r�r�rrGrCrAr�r�8sN�����������J�(�9�9�9�9�H��7���X�+E�F�F�F���h�,G�H�H�H��|�D�!�!�!�\�"4�:y�z�z�z���e�e�F�G�X�x�H�H�O|�}�}�}���e�e�E�8�X�x�H�H�Oz�{�{�{�#�l�8�1O�P�P�P�&�,�~�;k�l�l�l�&�,�~�;k�l�l�l�
�
�
�L��w�E�"�l�:�:���z�"��Q�$ �$ �$ �&>�@�@�@����H�

�O�O�L�!�!�!��������" '�u�u�u�u�������C�C�C�-�-�-�z,�z,�z,�z,�xS�S�S�S�<�����rCr�c��eZdZdZdd�ZdS)rxz<This is a mixin to provide functionality for edited drawingsNc��t|��}|rZt|d��rJd|jvr|j���|_|r	|�t}t||��|j|<t|d��r5|r3|r|�|||��dS|�||��dS|rt|||��dStd���)zb
        effectively setattr(obj,name,value), but takes care of things with _attrMaps etc
        r�Nr�zCan't add, need name)
r�r]r�r�r�r�r�r�rl�
ValueError)rar�ror�r�r�r�ivcs        rA�_addz_DrawingEditorMixin._addPs����5�!�!���	=�G�C�
�+�+�	=����-�-�"�|�1�1�3�3����@�x�'�L��!-�h�t�!<�!<�C�L����3�u���	5�#�	5��
$��
�
�3�u�T�*�*�*�*�*�����d�#�#�#�#�#�
�	5��C��U�#�#�#�#�#��3�4�4�4rC�NNNN)rdrerfrgrrGrCrArxrxNs.������F�F�5�5�5�5�5�5rCrxc��eZdZd�ZdS)�isStrokeDashArrayc���t�|��pEt|ttf��o)t|d��ot
|d��S)Nrr)�isListOfNumbersOrNone�testr�r��tupler�isListOfNumbers)rarJs  rArzisStrokeDashArray.testesS��$�)�)�!�,�,�y��A�t�E�l�1K�1K�1x�PX�YZ�[\�Y]�P^�P^�1x�cr�st�uv�sw�cx�cx�yrCN)rdrerfrrGrCrArrds(������z�z�z�z�zrCrc�(�eZdZeee��ee��eeddd��d���eeddd��d���eed���eed���ee	d	���ee
d
���ee
dd����
�	�	Zd�ZdS)�	LineShaperrr�z#Line cap 0=butt, 1=round & 2=squarer�z$Line join 0=miter, 1=round & 2=bevelz$miter limit control miter line joinsz[numbers] or [phase,[numbers]]zEThe level of transparency of the line, any real number betwen 0 and 1r�r�r�)	rrrrr r"r#r&r'c��td|_d|_d|_d|_d|_d|_d|_|�|��dS)Nrrr)	�STATE_DEFAULTSrrrrr r"r#r��rarNs  rArpzLineShape.__init__xsY��)�-�8������������ !���#���!������2�����rCN)
rdrerfr�r��
isColorOrNonerrr�	isOpacityr)r�rprGrCrArris��������w�"�l�=�1�1�"�l�8�,�,�$��U�U�1�Q�q�\�\�7\�]�]�]�%��e�e�A�a��l�l�8^�_�_�_�'�<��6\�]�]�]�&�,�'8�>^�_�_�_�$��Y�4{�|�|�|�&�,�y�6S�T�T�T�$��Y�4T�cd�e�e�e�

�

�

�H�����rCrc
��eZdZeeeed���eed���eed���eed������Zd�Zd�Z	dS)�Liner�r�)rprzr{r|r}c�t�t�||��||_||_||_||_dSrs)rrprzr{r|r})rarzr{r|r}rNs      rArpz
Line.__init__�s8�����4��$�$�$��������������rCc�6�|j|j|j|jfS)r�)rzr{r|r}r�s rAr�zLine.getBounds�s������$�'�4�7�3�3rCN)
rdrerfr�rr�rr�rpr�rGrCrAr!r!�s��������w�I�
�\�(��
+�
+�
+�
�\�(��
+�
+�
+�
�\�(��
+�
+�
+�
�\�(��
+�
+�
+�	
�
�
�H����4�4�4�4�4rCr!c
��eZdZeeeed���eed���eed���eedd���ee	e
e�������Zd	�Z
d
S)�
SolidShapez$filling color of the shape, e.g. redr�zGthe level of transparency of the color, any real number between 0 and 1r�r�rr�)rpr(r$r%r'r)c�n�td|_d|_t�||��dS)Nr()rr(r$rrprs  rArpzSolidShape.__init__�s4��'��4������	���4��$�$�$�$�$rCN)rdrerfr�rr�rrr)rrrr�rprGrCrAr%r%�s��������w�I� �L��4Z�[�[�[�"�l�9�2{�|�|�|�$��Y�4O�P�P�P�$��Y�4T�cd�e�e�e��<���m�M� B� B�C�C�
�
�
�H�%�%�%�%�%rCr%r�)r�r��r)�moveTo�lineTo�curveTo�	closePathc��|j}d}d}d}|}|jD]v}	|	tkr0|r)|r'|
tkr|dz
}|r|t��|dz
}t|	}||z}||	|||��|}|	tkr|dz
}|	}
�w|r)|r'|
tkr|dz
}|r|t��||kS)zHelper function for renderers.rr)r��	operators�_MOVETO�
_CLOSEPATH�_PATH_OP_ARG_COUNT)
r��	drawFuncs�	countOnly�
forceCloser�r��hadClosePath�	hadMoveTo�active�opr��nArgs�js
             rA�_renderPathr:�s���[�F�	�A��L��I��]�F��n����
��=�=��
0��0��j��� �A�%�L��0�-�	�*�-�/�/�/���N�I�"�2�&��
��I���	�"�
�v�a��c�{�#�#�
��
�����A��L�����$�i�$�C��O�O������	$�!�I�j�!�#�#�#���$�$rCznon-zero�nonzerozeven-odd�evenoddc��eZdZdZeeee��ee��ee��ee	e
dd������ee
ee�������Z
ddddefd�Zd�Zd	�Zd
�Zd�Zd�Zd
�ZdS)�Pathz2Path, made up of straight lines and bezier curves.rZrX)rpr�r-�
isClipPath�	autocloser)Nrc���t�||��|�g}|�g}t|��dzdks
Jd���||_||_||_||_||_dS�Nr�r�-Point list must have even number of elements!)r%rpr6r�r-r?r@r))rar�r-r?r@r)rNs       rArpz
Path.__init__�sx�����D�"�%�%�%��>��F����I��6�{�{�Q��!�#�#�#�%T�#�#�#����"���$��� ��� ��
�
�
rCc��|�|jdd�|jdd���}|�|�����|Srs)r�r�r-r�r��ra�news  rAr�z	Path.copy�sO���n�n�T�[����^�T�^�A�A�A�->�?�?�����$�,�,�.�.�/�/�/��
rCc�|�|j�||g��|j�t��dSrs)r�r�r-r�r.rs   rAr(zPath.moveTo��8������A�q�6�"�"�"�����g�&�&�&�&�&rCc�|�|j�||g��|j�t��dSrs)r�r�r-r��_LINETOrs   rAr)zPath.lineTo�rHrCc��|j�||||||g��|j�t��dSrs)r�r�r-r��_CURVETO)rarzr{r|r}�x3r�s       rAr*zPath.curveTo�sA������B��B��B��3�4�4�4�����h�'�'�'�'�'rCc�D�|j�t��dSrs)r-r�r/r�s rAr+zPath.closePath�s������j�)�)�)�)�)rCc	�\�|j}	g}|j}|j}g}|j}|j}d}|jD]�}	t|	}
||
z}|
dkr&|||��|||dz��ni|
dkrc|||d�\}}
}|t|d||
|����||dz|d�\}}}|t|d|||����|}��t
|��t
|��t|��t|��fS#t|��cYSxYw)Nrr�rr'r1)	r�r�r�r-r0r�rQr5r�)rar�rU�aX�eXrV�aY�eYr�r7r8r9rzr|rMr{r}r�s                  rAr�zPath.getBounds�sV�����	)��A���B���B��A���B���B��A��n�

�

��*�2�.����I���!�8�8��B�v�a�y�M�M�M��B�v�a��c�{�O�O�O�O��A�X�X�%�a��!�e�}�H�B�r�"��B�(��2��r�"�R�8�8�9�9�9�%�a��c�!�A�g��H�B�r�"��B�(��2��r�"�R�8�8�9�9�9�����q�6�6�#�a�&�&��Q����A���.�.��	)� ��(�(�(�(�(���s�DD�D+)rdrerfrgr�r%r�rr)�NoneOrrrrr�rpr�r(r)r*r+r�rGrCrAr>r>�s������<�<��w�J���o�.�.� �L��1�1�!�\�)�,�,� �L�����e�E�(:�(:�!;�!;�<�<��<���m�M� B� B�C�C�
�
�
�H�#�d�q�D�[h�!�!�!�!����
'�'�'�'�'�'�(�(�(�*�*�*�)�)�)�)�)rCr>c	��|�|}g}tdz}	||	z}
||	z}||
kr|dtzz}||
k�t||
z
��}|j}
|dkrEt||pd��}||	z}t	t||zdz��d��}||z}|dz
}nd}d}t
|��D]=}|
||zz}|
||t|��zz||t|��zzf���>|r|�	��|S)N��f@r����MbP?ru��?rr)
rr7r�rQr5r�r�rr�reverse)�centerx�centery�radius�startangledegrees�endangledegrees�yradius�degreedeltarYr��degreestoradians�
startangle�endanglerSr��radiansdeltar0s                rA�getArcPointsresM����&��
�F��%�x��"�#3�3�J��/�/�H�
�:�
�
��A�b�D�=���:�
�
��(�Z�'�(�(�E��
�A��T�z�z��%�� 1�r�2�2��"�#3�3����E�,�&�s�*�+�+�A�.�.���Q�w��	�Q����
�����q���B�B���5��-�-��	��7�6�#�e�*�*�$�$�W�W�S��Z�Z�-?�%?�
@�A�A�A�A�� ���� � � ��MrCc��eZdZdZdd�ZdS)�ArcPathzPath with an addArc methodNc

��t||||||||	���}
|st|j��s1|�|
dd|
dd��|
d=|
D]\}}|�||���dS)N)r_r`rYrr)rer6r-r(r))
rarZr[r\r]r^r_r`r(rYr�rJrRs
             rA�addArczArcPath.addArc:s�����'�6�3D�o�_f�t�JQ�
R�
R�
R���	��T�^�,�,�	��K�K��!��Q���!��Q��(�(�(��!���'�'�D�A�q�t�{�{�1�Q�'�'�'�'�'�'rCr)rdrerfrgrirGrCrArgrg8s.������$�$�(�(�(�(�(�(rCrgc�*�g}g}|D]�}t|��s|}g}	n|d}|dd�}	|tvrtd|z���t�|��}
t	|	��t
|
kr!t|�dt
|	�������|�|
��|�t|	������|df|dffD]4\}}t|t	|��d��D]}
||
|z||
<��5|�dd��}|�rUdD�]Q}||||dzf}|d�	|d��'||dd�}t|��t|��}}|d��|d��t|��t|��}}||z
}t|��dkr>||z
|z}t|t	|��d��D]}
||||
|z
zz||
<���t|t	|��d��D]
}
||zd	z||
<���|d�|d|z
n
|d|z
}t|t	|��d��D]}
||
xx|z
cc<���St|||fi|��S)
Nrrzbad operator name %sz bad arguments r��bbox)rrg���ư>rX)r�_PATH_OP_NAMESrr�r6r0r~r�r�r�r�r�rQr5�absr>)�pathSegsr?rrrN�Or��seg�opNamer:r7r�r�r�rkr9r�r�r��facs                    rA�
definePathrsAs���
�A�
�A��
�
���S�z�z�	��F��D�D���V�F��q�r�r�7�D���'�'��3�f�<�=�=�=�
�
!�
!�&�
)�
)���t�9�9�(��,�,�,��f�f�f�S��Y�Y�Y�G�H�H�H�	�������	����d��������1�v��1�v�~�����!��q��Q����"�"�	�	�A��Q�4��6�A�a�D�D�	�
�6�6�&����D����	�	�A��Q���Q�q�S�	�!�A���t�|��!���h��!�$�Q�$��A��q�6�6�3�q�6�6�q�A���t��A�a�D�$4��1�v�v�s�1�v�v�1����s���s�8�8�T�>�>��Q�3��)�C�"�1�S��V�V�A�.�.�0�0�� �3��!��Q��<�/��!���0�#�1�S��V�V�A�.�.�+�+�� !�A��s�{��!���+�
!"�!�� 0�A�a�D�1�H�H�a��d�Q�h���q��Q����*�*���A��a�D�D�D�A�I�D�D�D�D����!�J�$�$��$�$�$rCc��eZdZdZeeee��ee��eed���eed���ee��ee�����Zdd�Z	d�Z
d	�Zd
S)�Rectz)Rectangle, possibly with rounded corners.�width of the object in pointsr��height of the objects in points)rprJrRr_r`�rx�ryrc��t�||��||_||_||_||_||_||_dSrs)r%rprJrRr_r`rxry)rarJrRr_r`rxryrNs        rArpz
Rect.__init__sF�����D�"�%�%�%���������
�����������rCc��|�|j|j|j|j��}|�|�����|Srs)r�rJrRr_r`r�r�rEs  rAr�z	Rect.copy�sF���n�n�T�V�T�V�T�Z���E�E�����$�,�,�.�.�/�/�/��
rCc�V�|j|j|j|jz|j|jzfSrs�rJrRr_r`r�s rAr�zRect.getBounds�s'���������� 3�T�V�d�k�5I�J�JrCN)rr)rdrerfrgr�r%r�rr�rpr�r�rGrCrAruruss�������3�3��w�J��L��"�"��L��"�"���X�+J�K�K�K���h�,M�N�N�N�
�\�(�
#�
#�
�\�(�
#�
#�

�
�
�H��������
K�K�K�K�KrCruc
��eZdZdZeeee��ee��eed���eed���ed�����Z	d�Z
d�Zd	�ZdS)
�Imagez
Bitmap image.rvr�rwN)rprJrRr_r`r�c��t�||��||_||_||_||_||_dSrs)r%rprJrRr_r`r�)rarJrRr_r`r�rNs       rArpzImage.__init__�s?�����D�"�%�%�%���������
������	�	�	rCc��|�|j|j|j|j|j��}|�|�����|Srs)r�rJrRr_r`r�r�r�rEs  rAr�z
Image.copy�sJ���n�n�T�V�T�V�T�Z���d�i�P�P�����$�,�,�.�.�/�/�/��
rCc�V�|j|j|j|jz|j|jzfSrsr}r�s rAr�zImage.getBounds�s'���������� 3�T�V�d�k�5I�J�JrC)
rdrerfrgr�r%r�rr
r�rpr�r�rGrCrArr�s����������w�J��L��"�"��L��"�"���^�1P�Q�Q�Q���n�2S�T�T�T��|�D�!�!�
�
�
�H�������
K�K�K�K�KrCrc	��eZdZeeeed���eed���eed������Zd�Zd�Z	d�Z
d	S)
�Circle�x of the centrer��y of the centre�radius in points)rp�cx�cy�rc�f�t�||��||_||_||_dSrs)r%rpr�r�r�)rar�r�r�rNs     rArpzCircle.__init__�s1�����D�"�%�%�%�����������rCc��|�|j|j|j��}|�|�����|Srs)r�r�r�r�r�r�rEs  rAr�zCircle.copy�sB���n�n�T�W�d�g�t�v�6�6�����$�,�,�.�.�/�/�/��
rCc�v�|j|jz
|j|jz
|j|jz|j|jzfSrs)r�r�r�r�s rAr�zCircle.getBounds�s7����$�&� �$�'�D�F�"2�D�G�d�f�4D�d�g�PT�PV�FV�W�WrCN�rdrerfr�r%r�rr�rpr�r�rGrCrAr�r��s��������w�J�
�\�(�(9�
:�
:�
:�
�\�(�(9�
:�
:�
:��L��'9�:�:�:�
�
�
�H�������
X�X�X�X�XrCr�c
��eZdZeeeed���eed���eed���eed������Zd�Zd�Z	d	�Z
d
S)�Ellipser�r�r�zx radiuszy radius)rpr�r�rxryc�t�t�||��||_||_||_||_dSrs)r%rpr�r�rxry)rar�r�rxryrNs      rArpzEllipse.__init__�s8�����D�"�%�%�%��������������rCc��|�|j|j|j|j��}|�|�����|Srs)r�r�r�rxryr�r�rEs  rAr�zEllipse.copy�sF���n�n�T�W�d�g�t�w���@�@�����$�,�,�.�.�/�/�/��
rCc�v�|j|jz
|j|jz
|j|jz|j|jzfSrs)r�rxr�ryr�s rAr�zEllipse.getBounds�s7���G�d�g�%�t�w���'8�$�'�D�G�:K�T�W�W[�W^�M^�_�_rCNr�rGrCrAr�r��s��������w�J�
�\�(�(9�
:�
:�
:�
�\�(�(9�
:�
:�
:�
�\�(�
�
3�
3�
3�
�\�(�
�
3�
3�
3�	
�
�
�H�������
`�`�`�`�`rCr�c��eZdZdZeeeed���eed���eed���ee��ee��ee��ee��ee��ee	d�����
�
Z
dZ		dd�Zd�Z
d
�Zd�Zd�Zd	S)�WedgeznA "slice of a pie" by default translates to a polygon moves anticlockwise
       from start angle to end angler�r�r�r�ztreat as annular ring)
rprZr[r\r]r^r_�radius1�yradius1�annularrNFc���t�||��||kr|dz}||k�|||||f\|_|_|_|_|_||_||_dS)Nih)	r%rprZr[r\r]r^r_r�)	rarZr[r\r]r^r_r�rNs	         rArpzWedge.__init__�s{�����D�"�%�%�%��/�/�/�-�c�1�O��/�/�/�
�W�f�&7��H�	^���d�l�D�K��1G��I]��������rCc��t|dd��}|�|j}t|dd��}t|d|��}|�|}|||fS)Nr_r�r�)r�r\)rar_r�r�s    rA�
_xtraRadiizWedge._xtraRadii�sV���$�	�4�0�0���?�d�k�G��$�y�$�/�/���4�
�7�3�3���?�h�G����)�)rCc���|j}|j}|j}|���\}}}|j}|j}tdz}	||	z}
||	z}||
kr|dtzz}||
k�t||
z
��}g}
|dkrJt|j	pd|��}||	z}tdt||zdz����}||z}|dz
}nd}d}g}|j}|
j}t|��D]1}|
||zz}|t|��t|��f���2|D]'\}}||||zz��||||zz���(|dks|�|dks|�||��||��n>|���|D]'\}}||||zz��||||zz���(|j�rt%t'|dt(���	��}|�|
d|
d��tdd|zd��D]'}|�|
||
|dz���(|���|�|
d|z|
d|zdz��td|zdzd
|zd��D]'}|�|
||
|dz���(|���|St1|
��S)NrVr�rWrurrXrr))r)r�)rZr[r\r�r]r^rr7rQr`r5r�r�r�rrrYr�r>r�rr(r)r+�Polygon)rarZr[r\r_r�r�r]r^rarbrcrSr�r`rdr0�CA�CAAr�r�r/r�rJs                        rA�	asPolygonzWedge.asPolygonsP������,�����%)�_�_�%6�%6�"���(� �2���.���e�8��&�'7�7�
�"�#3�3���z�!�!���"��}�H��z�!�!��h�z�)�*�*������;�;��d�.�4�"�U�;�;�K�&�'7�7�L��A�c�%��,�S�0�1�1�2�2�A� ��7�L�
��F�A�A��A��L�
���i���M���1�X�X�	)�	)�E��u�\�1�1�E��C��U���C��J�J�'�(�(�(�(��	!�	!�C�A�a�
�A�g�f�Q�h�����
�A�g�g�a�i�� � � � ��Q�J�J�'�/��!���x�?O�
�A�g�J�J�J���'�
�
�
�
��J�J�L�L�L��
&�
&���!���'�'�!�)�#�$�$�$���'�(�1�*�$�%�%�%�%��<�	#��g�d�:�}�E�E�F�F�F�A�
�H�H�V�A�Y�v�a�y�)�)�)��1�Q�q�S��^�^�
0�
0��������6�!�A�#�;�/�/�/�/�
�K�K�M�M�M�
�H�H�V�A�a�C�[���!��A���/�/�/��1�Q�3�q�5��1��Q�'�'�
0�
0��������6�!�A�#�;�/�/�/�/�
�K�K�M�M�M��H��6�?�?�"rCc��|�|j|j|j|j|j��}|�|�����|Srs)r�rZr[r\r]r^r�r�rEs  rAr�z
Wedge.copy8sV���n�n�T�\��L��K��*��(�	*�*��
	���$�,�,�.�.�/�/�/��
rCc�N�|������Srs)r�r�r�s rAr�zWedge.getBoundsAs���~�~���)�)�+�+�+rC)NF)rdrerfrgr�r%r�rr
r)r�r`rpr�r�r�r�rGrCrAr�r��s#������(�(��w�J��,�x�->�?�?�?��,�x�->�?�?�?���h�,>�?�?�?�(�L��2�2�&�,�x�0�0��,�~�.�.��,�~�.�.��<��/�/��,�y�.E�F�F�F�

�

�

�H��K�]a��	�	�	�	�*�*�*�4#�4#�4#�l���,�,�,�,�,rCr�c�X�eZdZdZeeeed������Zgfd�Z	d�Z
d�ZdS)	r�zKDefines a closed shape; Is implicitly
    joined back to the start for you.�5list of numbers in the form x1, y1, x2, y2 ... xn, ynr��rpr�c��t�||��t|��dzdks
Jd���|pg|_dSrB)r%rpr6r�)rar�rNs   rArpzPolygon.__init__LsK�����D�"�%�%�%��6�{�{�Q��!�#�#�#�%T�#�#�#��l�����rCc��|�|j��}|�|�����|Srs�r�r�r�r�rEs  rAr�zPolygon.copyQ�:���n�n�T�[�)�)�����$�,�,�.�.�/�/�/��
rCc�*�t|j��Srs�r�r�r�s rAr�zPolygon.getBoundsV����t�{�+�+�+rCN)rdrerfrgr�r%r�rr�rpr�r�rGrCrAr�r�Ds�������)�)��w�J���o�3j�k�k�k�
�
�
�H�!�#�#�#�#�
���
,�,�,�,�,rCr�c�X�eZdZdZeeeed������Zgfd�Z	d�Z
d�ZdS)	�PolyLinez�Series of line segments.  Does not define a
    closed shape; never filled even if apparently joined.
    Put the numbers in the list, not two-tuples.r�r�r�c�L�t�||��|pg}t|��}|rlt|d��r7g}|D]/\}}|�|��|�|���0|}n t|��dzdks
Jd���||_dS)Nrr�rC)rrpr6rr�r�)rar�rN�	lenPointsrurJrRs       rArpzPolyLine.__init__bs������4��$�$�$���2����K�K�	��	]��V�A�Y���
]���#� � �E�Q�q��H�H�Q�K�K�K��H�H�Q�K�K�K�K�����6�{�{�Q��!�+�+�+�-\�+�+�+�����rCc��|�|j��}|�|�����|Srsr�rEs  rAr�z
PolyLine.copyqr�rCc�*�t|j��Srsr�r�s rAr�zPolyLine.getBoundsvr�rCN)rdrerfrgr�rr�rr�rpr�r�rGrCrAr�r�Ys�������4�4��w�I���o�3j�k�k�k�
�
�
�H�!�
�
�
�
����
,�,�,�,�,rCr�c���eZdZdZeeeeee	ed���fd��d���eee
edf��d���eee
ed	f��d
������Zdd
gfd�ZdS)�Hatchingz\define a hatching of a set of polygons defined by lists of the form [x0,y0,x1,y1,....,xn,yn]r)rnz
xy list(s)z8list(s) of numbers in the form x1, y1, x2, y2 ... xn, ynr�zangle(s)zCthe angle or list of angles at which hatching lines should be drawnzspacings(s)z-orthogonal distance(s) between hatching lines)rp�xyLists�angles�spacingsr��-c
�D�tj|fi|��t|��r|f}t|��r|f}t|��r|f}t	|��t	|��z
}|dkrt|��||dgzz}||_||_||_|j	}|j
}t|��D�]b\}}||}	t|��}t|��}
t|��}d}|}
|D]]}tdt	|��d��D]<}||dz|
z|||zz
}t!||��}t#||
��}
�=�^t%t'||	z����dz
}t%t'|
|	z����dz}t||��D�]l}g}|	|z}|D]�}t	|��dz
}tdt	|��d��D]�}||}||dz}||
z||zz}||
z||zz
}||}||dz}||
z||zz}||
z||zz
}||kr||ks||kr-||kr'|�|||z
||z
z||z
zz��|}����|���tdt	|��d��D]d}|||
z||zz
}||
z|||zz}||dz|
z||zz
}||
z||dz|zz}|||��|||���e��n��ddS)Nrr1i���r�r)r>rprrr6r�r�r�r�r(r)�	enumeraterrrr�rQr5r�rr�r�)rar�r�r��kwdsr�r(r)r�spacing�cosTheta�sinTheta�spanMin�spanMaxr�r9rR�	spanStart�spanEnd�step�nodeX�stripeYr�r�r��a1�b1rJrzr{s                              rArpzHatching.__init__�s����
�d�#�#�d�#�#�#��7�#�#�	"��z�G��F���	��Y�F��H���	#� �{�H���K�K��H�
�
�%���Q�3�3��H�~�~�a��"���&6�6�H������� ��
�������!�&�)�)�:	 �:	 �H�A�u��q�k�G��E�N�N�E��5�z�z�H��5�z�z�H� �G��h�G��
-�
-���q��Q����*�*�-�-�A��!�A�#��x���!��X�
�5�A�!�!�G�n�n�G�!�!�G�n�n�G�G�	-��E�'�'�/�2�2�3�3�a�7�I��5����1�1�2�2�Q�6�G��i��0�0�$
 �$
 ����!�$�,��!���A��A���q��A�"�1�S��V�V�A�.�.�����a�D���a��c�F���x�Z�!�H�*�4���x�Z�!�H�*�4���a�D���a��c�F���x�Z��(�
�2���x�Z��(�
�2���w�J�J�2�w�;�;�2�g�:�:�"�g�+�+�!�L�L��R��U�W�R�Z�,@�"�R�%�,H�)H�I�I�I�����"�
�
�����q��U���A�.�.�	 �	 �A��a���)�G�H�,<�<�A���(��q��(�):�:�A��a��c�
�8�+�g�h�.>�>�A���(�5��1��:�h�+>�>�A��F�1�Q�K�K�K��F�1�Q�K�K�K�K�	 �7$
 �-:	 �:	 rCN)
rdrerfrgr�r>r��EitherOrrrrr�rprGrCrAr�r�ys�������f�f��w�D��,�x�x����O�WX�9Y�9Y�9Y�(Z�[g�h�h�oi�j�j�j���h�h����'L�M�M�TY�Z�Z�Z��<���(�?�=�)Q� R� R�YH�I�I�I�
�
�
�H�!"�"�b�M �M �M �M �M �M rCr�c��t|d|��}|�|��}|dkr.t|dd��}	|	t|d|�|||��z}|S)N�_dpr�_dpLen)r��rfindr)
�tAr7r4r+r*�encoding�pivotCharacter�dpr��dpOffss
          rA�
numericXShiftr��sa��	��E�.�	)�	)�B��
�
�2���A��!�t�t���H�Q�'�'���[��b�q�b��(�8�H�E�E�E���HrCc�P�eZdZdZeeed���eed���eed���edd���eed���eed	���ee	d
ddd
��d���ee��ee	dddddddd��d�����	�	Z
dZd�Zd�Z
d�Zd�ZdS)�StringziNot checked against the spec, just a way to make something work.
    Can be anchored left, middle or end.zx point of anchoringr�zy point of anchoringzthe text of the stringNz_font name of the text - font is either acrobat standard or registered when using external font.z	font sizezcolor of the fontr-�middler3�numericz(treat (x,y) as one of the options below.rrr�r�r��r'�z.Control whether text is filled/stroked etc etc)	rJrRr7r+r*r(r,r��textRenderMode�utf8c���||_||_||_d|_td|_td|_td|_|�|��dS)Nr-r+r*r()	rJrRr7r,rr+r*r(r�)rarJrRr7rNs     rArpzString.__init__�s\����������	�!���&�z�2��
�&�z�2��
�'��4������2�����rCc�^�|jt|j|j|j|j��zSrs)rJrr7r+r*r�r�s rA�getEastzString.getEast�s%���v��D�I�d�m�D�M�4�=�Y�Y�Y�YrCc��|�|j|j|j��}|�|�����|Srs)r�rJrRr7r�r�rEs  rAr�zString.copy�sB���n�n�T�V�T�V�T�Y�7�7�����$�,�,�.�.�/�/�/��
rCc	�T�|j}t||j|j|j��}|j}|j}|dkrG|dkr	|d|zz}n8|dkr||z}n,|dkr&|t||||j|j|j��z}||jd|jzz
||z|j|jzfS)Nr-r�rXr3r�g�������?)	r7rr+r*r�r,rJr�rR)rar;r4r�rJs     rAr�zString.getBounds�s����I����$�-��
�d�m�D�D��
�_���F��
�w�;�;��8�|�|��S��U�
����U����Q�����Y����]�2�a��$�-��
�d�m�T�T�T���4�6�C�$�-�/�/��1��d�f�t�}�6L�M�MrC)rdrerfrgr�r�r�isStringrrr�r�rpr�r�r�rGrCrAr�r��sY������,�,��w��L��'=�>�>�>��L��'=�>�>�>��|�H�*B�C�C�C��<��+L�M�M�M��<��k�:�:�:� �L��4G�H�H�H�!�\�%�%����y�"I�"I�Oy�z�z�z��<��)�)�%��e�e�A�a��!�A�a��!�&<�&<�Br�s�s�s�

�

�

�H��H����Z�Z�Z����

N�
N�
N�
N�
NrCr�c��eZdZdZd�ZdS)r�akA simple template for creating a new node.  The user (Python
    programmer) may subclasses this.  provideNode() must be defined to
    provide a Shape primitive when called by a renderer.  It does
    NOT inherit from Shape, as the renderer always replaces it, and
    your own classes can safely inherit from it without getting
    lots of unintended behaviour.c� �td���)z�Override this to create your own node. This lets widgets be
        added to drawings; they must create a shape (typically a group)
        so that the renderer can draw the custom node.�4this method must be redefined by the user/programmerr�r�s rAr�zUserNode.provideNodes��
"�"X�Y�Y�YrCN)rdrerfrgr�rGrCrAr�r�s2������%�%�Z�Z�Z�Z�ZrCr�c��eZdZdZd�ZdS)�
DirectDrawz"try to draw directly on the canvasc� �td���)Nr�r�)rarbs  rA�drawDirectlyzDirectDraw.drawDirectlys��!�"X�Y�Y�YrCN)rdrerfrgr�rGrCrAr�r�s.������,�,�Z�Z�Z�Z�ZrCr�c�^�tdddd��}ddl}|j}tjj}|d��||�����|d��|���|d��|d��|`|d	��|���dS)
Nr!rs�2rz
a Rectangle: z
verifying...z OK
zdeleting rect.width zverifying...)ru�pprintr��stdoutr�r�r�r_)r�r��ppr4s    rArr s����R��3�r���A��M�M�M�	��B��
��A��A�o�����B�q���������A������H�H�J�J�J��A�g�J�J�J��A�����	���A�n�����H�H�J�J�J�J�JrC�__main__rs)rrB)FF)NNN)b�__version__rgr�r��mathrrrrrr�reportlab.platypusr	�reportlab.rl_configr
rr�_baseGFontNamer
r�
reportlab.librr�reportlab.lib.validators�reportlab.lib.utilsrrrT�isNumberInRanger�reportlab.lib.attrmap�reportlab.lib.rl_accelr�reportlab.pdfbase.pdfmetricsr�reportlab.lib.fontsr�reportlab.pdfgen.canvasrr�_baseGFontNameB�_baseGFontNameI�_baseGFontNameBI�NON_ZERO_WINDING�EVEN_ODD�blackrrrBrWrYrir~r�r�r�r�r�r/r8rFrOr�rx�	Validatorrrr!r%r�r�r.rJrLr/r0rlr:�_fillModeMapr>r4rergrsrurr�r�r�r�r�r�r�r�r�r�rrdrGrCrA�<module>rst��

��G����������3�3�3�3�3�3�3�3�3�3�3�3�3�3�3�3�'�'�'�'�'�'�y�y�y�y�y�y�y�y�y�y�y�y�y�y� � � � � � � � � � � � �&�&�&�&�.�.�.�.�.�.�.�.��F�?�?�1�Q�'�'�(�(�	�#�#�#�#�)�)�)�)�)�)�4�4�4�4�4�4�%�%�%�%�%�%�@�@�@�@�@�@�@�@��%��q��+�+���%��q��+�+���5���!�,�,��&���������6�<�	�
�1���Q�
��a������t���T���4���U���u���Q�� ���!�"�
�#�&��'�(��)�*�7�+��6����  �  �  �D-�-�-�,�,�,�,�,�,�,�,�&�&�&�&�&�&�&�&�$�$�$�"3
�3
�3
�j0�0�0�(�(�(�KQ�KQ�KQ�KQ�KQ�O�/�KQ�KQ�KQ�Z{�{�{�{�{�E�{�{�{�z	�	�	�	�%�%�%�%�N
�
�
�
�$
�
�
�T�T�T�T�T�e�X�T�T�T�l5�5�5�5�5�5�5�5�,z�z�z�z�z�	�z�z�z�&�%�'�'�����������24�4�4�4�4�9�4�4�4�&%�%�%�%�%��%�%�%�&*.��e�e�A�h�h���&���(�J�!��8�8�8��%�%�%�%�<	
�d��}��M��=��}��M��=�
��F)�F)�F)�F)�F)�:�F)�F)�F)�P�d�f�f�
�����6(�(�(�(�(�d�(�(�(��a�A�!�0%�0%�0%�0%�dK�K�K�K�K�:�K�K�K�:K�K�K�K�K�J�K�K�K�8X�X�X�X�X�Z�X�X�X�,`�`�`�`�`�j�`�`�`�.i,�i,�i,�i,�i,�J�i,�i,�i,�V,�,�,�,�,�j�,�,�,�*,�,�,�,�,�y�,�,�,�@V �V �V �V �V �t�V �V �V �p8<�=�
�
�
�
�1N�1N�1N�1N�1N�U�1N�1N�1N�f
Z�
Z�
Z�
Z�
Z�"�
Z�
Z�
Z�Z�Z�Z�Z�Z��Z�Z�Z�
���"�Z����D�F�F�F�F�F��rC

Youez - 2016 - github.com/yon3zu
LinuXploit