
     hqV                        d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dlmZ d dl	m
Z
mZ d dlmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d dlZ ej        d	          Z e j        d
          Zd dlZd dlm Z  d dlm!Z!  G d de"          Z#d Z$d Z%dodZ&d Z'dpdZ(e#dod            Z)dodZ*edz  Z+dez  Z,dddddddddddddddd Z-ddddddddd!d"	Z.dZ/e#dqd$            Z0e#d%             Z1e#d&             Z2d' Z3e#d(             Z4d) Z5d* Z6d a7d+ Z8eeeeed,Z9efd-Z: ej        d.ej;        ej<        z            Z=i d/ e
d0d1d2          d3 e
d4d5d6          d7 e
d8d9d:          d; e
d<d=d>          d? e
d@d@d@          dA e
d d:d:          dB e
dCd:dD          dE e
d8d:d:          dF e
dGdHdI          dJ e
dKdKdL          dM e
d:dNdO          dP e
d d d           dQ e
d:d=dR          dS e
d d d:          dT e
dUdVdW          dX e
dYdZdZ          d[ e
d\d]d^          i d_ e
d0d1d2          d` e
dadada          db e
d@d@d@          dc e
d d d           dd e
dedfdg          dh e
dadada          di e
dCd:d           dj e
dkdldm          dn e
d:dCdo          dp e
dqdrds          dt e
d:d9dL          du e
dLdvdw          dx e
d d:d:          dy e
d d dz          d{ e
d dzdz          d| e
d]d}d~          d e
ddd          i d e
d dqd           d e
ddd          d e
ddd          d e
dzd dz          d e
ddd          d e
d:dd           d e
ddd          d e
dzd d           d e
ddd          d e
ddd          d e
dddz          d e
ddd          d e
ddd          d e
d dd          d e
dd d          d e
d:dvd          d e
d dd:          i d e
dldldl          d e
dldldl          d e
dmdd:          d e
ddd          d e
d:d<d8          d e
ddzd          d e
d:d d:          d e
dLdLdL          d e
d9d9d:          d e
d:d>d           d e
ddYd          d e
ddd          d e
d@d@d@          d e
d dd           d e
dd:d          d e
ddd          d e
d4d5d6          i d e
dadada          d e
d8d:d8          d e
d:dldĦ          d e
d0d1d2          d e
d@d@d@          d e
d0d1d2          d e
dRddɦ          d e
dd d̦          d e
dadadΦ          d e
d d d           d e
d:d:d8          d e
d8dd          d e
ddd<          d e
d:d8dK          d e
ddd           d e
d:d<dR          d e
dddҦ          i d e
d8dd          d e
dd:d:          d e
d<d<dk          d e
ddd          d e
ddd          d e
ddd          d e
d:dd          d e
d:dgd          d e
ddd          d e
d^dd<          d e
ddd          d e
ddd          d e
ddOd\          d e
d:d:dݦ          d e
d d:d           d e
ddRd          d e
d<d8dҦ          i d e
d:d d:          d e
dd d           d e
ddRd          d e
d d dR          d e
ddd          d e
ddd          d e
dwdd           d e
ddd          d e
d d<d          d e
ddd          d e
dd	d
          d e
d0d1d2          d e
d d d           d e
ddd          d e
dKd:d<          d e
d:dNd          d e
d:dNd          i d e
d:d\d          d e
d d d          d e
ddKdҦ          d e
ddd           d e
ddd          d e
d:dYd           d e
d:dd           d e
ddd           d! e
dd"d          d# e
d$d%d$          d& e
d'dd          d( e
ddd          d) e
d:d*d+          d, e
d:dd-          d. e
dRd
d/          d0 e
d:d1d2          d3 e
d4dgd4          i d5 e
dddҦ          d6 e
dd d          d7 e
d:d d           d8 e
ddd          d9 e
d:dld          d; e
dzdd<          d= e
d<dd>          d? e
d@dAdB          dC e
d0d1d2          dD e
dEdzdF          dG e
d:dKd          dH e
dgdIdJ          dK e
d1d1d1          dL e
d^dd=          dM e
dNdOdR          dP e
ddd          dQ e
ddd          i dR e
d:d<d<          dS e
d d:dC          dT e
dUddĦ          dV e
dkdd          dW e
d dd          dX e
dddڦ          dY e
dZdZdZ          d[ e
d0d1d2          d\ e
dadada          d] e
d0d1d2          d^ e
d@d@d@          d_ e
d:d`da          db e
dcdݐdd          de e
ddd          df e
dKd\d          dg e
d:d:d:          dh e
dKdKdK           e
dadada           e
d d d            e
d d d            e
d:d:d            e
ddRd          diZ>dj Z?dk Z@dl ZAdm ZBdn ZCdS (r      N)copy)get_display)ColortoColor)	TA_CENTER
TA_JUSTIFYTA_LEFTTA_RIGHT)cminch)
pdfmetrics)UnicodeCIDFontzS^.*?rgb[a]?[(]([0-9]+).*?([0-9]+).*?([0-9]+)(?:.*?(?:[01]\.(?:[0-9]+)))?[)].*?[ ]*$	xhtml2pdf)renderPM)	renderSVGc                       e Zd ZdZd Zd ZdS )memoizeda  
    A kwargs-aware memoizer, better than the one in python :)

    Don't pass in too large kwargs, since this turns them into a tuple of
    tuples. Also, avoid mutable types (as usual for memoizers)

    What this does is to create a dictionnary of {(*parameters):return value},
    and uses it as a cache for subsequent calls to the same method.
    It is especially useful for functions that don't rely on external variables
    and that are called often. It's a perfect match for our getSize etc...
    c                 f    i | _         || _        | j        j        | _        | j        j        | _        d S N)cachefunc__doc____name__)selfr   s     J/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/xhtml2pdf/util.py__init__zmemoized.__init__>   s,    
	y(	*    c                     t          |                                          }||f}	 || j        vr | j        |i |}|| j        |<   | j        |         S # t          $ r  | j        |i |cY S w xY wr   )tupleitemsr   r   	TypeError)r   argskwargs	args_pluskeyress         r   __call__zmemoized.__call__D   s     &,,..))	Y	.$*$$di000"%
3:c?" 	. 	. 	.49d-f-----	.s   ,A A.-A.N)r   
__module____qualname__r   r   r'    r   r   r   r   0   s<        
 
+ + +. . . . .r   r   c                      ddl } d}t          j                    \  }}}|                     ||          |                     ||          z   }dd                    |dd                   dd|d         z   S )z2
    Helper to get a nice traceback as string
    r   NzTraceback (innermost last):
 20)	tracebacksysexc_info	format_tbformat_exception_onlyjoin)r/   limit_typevaluetb_lists         r   ErrorMsgr:   S   s     E|~~E5"E**''u556E*ssb		.  r   c                 `    t          |           t          t          fvr| gS t          |           S r   )typelistr   )r7   s    r   toListr>   b   s*    E{{4-''w;;r   c                     |}|D ]X\  }}|}|g }nt          |t                    s|g}||v r0|                    d||                    t          | | ||            YdS )a&  
    Allows to apply one function to set of keys cheching if key is in container,
    also trasform ccs key to report lab keys.

    extras = Are extra params for func, it will be call like func(*[param1, param2])

    obj = frag
    keys = [(reportlab, css), ... ]
    container = cssAttr
    Nr   )
isinstancer=   insertsetattr)objkeys	containerr   extrascpextras	reportlabcsss           r   transform_attrsrJ   h   s     H  	3>FFFD)) 	XF)MM!Ys^,,,CD&M   r   c                     |D ]X}t          ||          rt          ||          nd}|!t          |t                    r||v r||         }t	          | ||           YdS )zr
    Allows copy a list of attributes from object2 to object1.
    Useful for copy ccs attributes to fragment
    N)hasattrgetattrr@   dictrB   )obj1obj2attrsattrr7   s        r   
copy_attrsrS      sy    
  # #'.tT':':Dd###=Zd33=JEdE""""	# #r   Fc                 T    |D ]$}|rt          |          }t          | ||           %dS )z;
    Allows set the same value to a list of attributes
    N)r   rB   )rC   rQ   r7   _copyrR   s        r   	set_valuerV      sE      " " 	 KKET5!!!!" "r   c                    | dS t          | t                    r| S t          |                                                                           } | dk    s| dk    r|S | t
          v rt
          |          S |                     d          rLt          |           dk    r9d| d         z   | d         z   | d         z   | d         z   | d         z   | d         z   } n^t          	                    |           rCd	 t          	                    |           
                                D             \  }}}d
|||fz  } n	 t          | |          S )z[
    Convert to color value.
    This returns a Color object instance from a text bit.
    Ntransparentnone#            c                 ,    g | ]}t          |          S r*   )int.0xs     r   
<listcomp>zgetColor.<locals>.<listcomp>   s    AAAa3q66AAAr   z#%02x%02x%02x)r@   r   strstriplowerCOLOR_BY_NAME
startswithlenrgb_researchgroupsr   )r7   defaultrgbs        r   getColorrr      sN    }% JJ$$&&E&U## 	UqeAhq)!HQx "'(+-21X6	u		 AA6==#7#7#>#>#@#@AAA1a1a)+ 	5'"""r   c                 T    | r%t          |                                           dvr| S |S )N)rY   hiddenre   rg   r7   rn   s     r   getBorderStylerw      s1     #e**""$$,>>>Nr   g      $@gUUUUUU?g      ?g      ?g      ?g      ?g      ?g      ?       @)1zxx-smallzx-small2small3medium4large5zx-large6zxx-large7z	xxx-largeg      ?)	largersmallerz+4z+3z+2z+1z-1z-2z-3        c                    	 | }| |S t          |           t          u r| S t          | t                    rt          |           S t          |           t          t
          fv rd                    |           } t          |                                           	                                
                    dd          } | dd         dk    r1t          | dd                                                   t          z  S | dd         dk    r1t          | dd                                                   t          z  S | dd         dk    r1t          | dd                                                   t          z  S | dd         d	k    r)t          | dd                                                   S | dd         d
k    r,t          | dd                                                   dz  S | dd         dk    r1t          | dd                                                   t          z  S | dv rdS |r| dd         dk    r,t          | dd                                                   |z  S | dd         dk    r,t          | dd                                                   |z  S | dd         dk    r/t          | dd                                                   |dz  z  S | dd         dk    r/|t          | dd                                                   z  dz  S | dv r|S | t          v rH|r#t!          t"          |t          |          z            S t!          t"          |t          |          z            S | t$          v rH|r#t!          t"          |t$          |          z            S t!          t"          |t$          |          z            S t!          t"          |t          |           z            S 	 t          |           } n-# t&          $ r  t(                              d|            |cY S w xY wt!          d|           S # t,          $ r# t(                              d||d           |cY S w xY w)a  
    Converts strings to standard sizes.
    That is the function taking a string of CSS size ('12pt', '1cm' and so on)
    and converts it into a float in a standard unit (in our case, points).

    >>> getSize('12pt')
    12.0
    >>> getSize('1cm')
    28.346456692913385
    N ,.r   mminptpcg      (@px)rY   0z0.0autor   rememexrx   r-   %g      Y@)normalinheritzgetSize: Not a float %rr   zgetSize %r %rr\   )r1   )r<   floatr@   r`   r   r=   r4   re   rf   rg   replacer   r   r   dpi96_relativeSizeTablemaxMIN_FONT_SIZE_absoluteSizeTable
ValueErrorlogwarning	Exception)r7   relativebasern   originals        r   getSizer      s`   <=O%[[E!!Ls## 	#<<%[[UDM))GGENNEE

  ""((**223<<:ss))++,,r11233Z4ss))++,,r11233Z4ss))++,,t33233Z4ss))++,,,233Z4ss))++,,t33233Z4 ss))++,,u442223 	CRSSzU""U3B3Z--//008;;rsst##U3B3Z--//008;;rsst##U3B3Z--//00HsNCCrsss"" 5ss)9)9););#<#<<EE///,,, P}d5G5N.NOOO=(5G5N*NOOO,,, P}d5G5N.NOOO=(5G5N*NOOO=(U5\\*ABBB	%LLEE 	 	 	KK15999NNN	 1e}}   OXx!DDDs   P< P< #P< B7P< <>P< ;>P< :6P< 19P< +>P< *P< 0<P< -9P< '<P< $<P< !P< '-P< "P< 8-P< &"P< 	$P< /O? >P< ?'P)&P< (P))P< <*Q)(Q)c                     |\  }}| dk     r|| z   } |dk     r||z   }|*|(|dk    r|| z
  |z   }|dk    r||z
  |z   }| ||z
  |z
  ||fS | ||z
  fS )z
    As a stupid programmer I like to use the upper left
    corner of the document as the 0,0 coords therefore
    we need to do some fancy calculations
    r   r*   )rc   ywhpagesizeaxays          r   	getCoordsr   +  s     FB1uuF1uuF}66a!A66a!A26A:1$$rAv;r   c                     t          |                                           } t          |           dk    rt          d          d | D             \  }}}}t	          |||||          S )z
    Parse sizes by corners in the form:
    <X-Left> <Y-Upper> <Width> <Height>
    The last to values with negative values are interpreted as offsets form
    the right and lower border.
    r[   zbox not defined right wayc                 ,    g | ]}t          |          S r*   r   rb   poss     r   rd   zgetBox.<locals>.<listcomp>L  s    ...3'#,,...r   re   splitrj   r   r   )boxr   rc   r   r   r   s         r   getBoxr   A  sh     c((..

C
3xx1}}3444..#...JAq!QQ1a***r   c                 P   |                      dg           }t          |          dk    rd |D             S t          |                      dd                    }t          |                      dd                    }t          |                      dd                    }t          |                      dd                    }d	| v rXt          | d	                   }d| v rt          | d                   }|||z   z
  }n!d| v rt          | d                   }|||z   z
  }d
| v rXt          | d
                   }	d| v rt          | d                   }|||	z   z
  }n!d| v rt          | d                   }|||	z   z
  }|t          |                      dd                    z  }|t          |                      dd                    z  }|t          |                      dd                    z  }|t          |                      dd                    z  }|||z   z
  }	|||z   z
  }|||	|fS )zeCalculate dimensions of a frame

    Returns left, top, width and height of the frame in points.
    z-pdf-frame-boxr[   c                 ,    g | ]}t          |          S r*   r   ra   s     r   rd   z&getFrameDimensions.<locals>.<listcomp>W  s    (((q

(((r   topr   leftbottomrightheightwidthz
margin-topzmargin-leftzmargin-bottomzmargin-right)getrj   r   )
data
page_widthpage_heightr   r   r   r   r   r   r   s
             r   getFrameDimensionsr   P  s.   
 ((#R
(
(C
3xx1}}((C((((
$((5!$$
%
%C488FA&&''DTXXh**++FDHHWa(())E4h((D==$u+&&C C&L1FFT(^,,F&1C$W&&T>>4<((D$,/EE__DM**E/D7488L!,,---CGDHH]A..///D
gdhh22333F	WTXXna00111E$,'EC&L)FeV##r   c                     t          |                                           } t          |           dk    rt          d          d | D             \  }}t	          ||dd|          S )z
    Pair of coordinates
    r]   zposition not defined right wayc                 ,    g | ]}t          |          S r*   r   r   s     r   rd   zgetPos.<locals>.<listcomp>~  s    ---SGCLL---r   Nr   )positionr   rc   r   s       r   getPosr   v  sh    
 8}}""$$H
8}}8999--H---DAqQ4x000r   c                 H    t          |                                           dv S )z Is it a boolean? )r   yesry   trueru   ss    r   getBoolr     s    q66<<>>666r   c                 6    	 t          |           } n#  Y nxY w| S r   )r   r   s    r   getFloatr     s'    !HHHs    c                  >    t           dz  a t          t                     S )z Unique ID r\   )_uidre   r*   r   r   getUIDr     s     	AIDt99r   )r   centermiddler   justifyc                 v    t                               t          |                                           |          S r   )_alignmentsr   re   rg   rv   s     r   getAlignr     s(    ??3u::++--w777r   z2^data:(?P<mime>[a-z]+/[a-z]+);base64,(?P<data>.*)$activeborder         activecaption
   $   j   	alicebluegx!?gy=?r\   antiquewhiteg/R(__?g<E~}?g!r?appworkspace   aqua
aquamarineg{H?gฌ?azure
background:   n      beigeg]P?g]3f?bisquegJzZ?gRz?blackblanchedalmondg Q?blue
bluevioletg)TPQ?g}͑?gec]\?browngr?g<?	burlywoodgH]?gk?gCo?
buttonfacebuttonhighlight   buttonshadow
buttontext	cadetblueg?g
(?g?captiontext
chartreuse	chocolategI}YZ?g([Z?gx!?coralg?cornflowerblueg.py?g	F?gQ<?cornsilkcrimsongv?gx!?cyandarkblueg%c\qq?darkcyandarkgoldenrodgT g?g#~?darkgrayg̒ 55?	darkgreendarkgrey	darkkhakig%?gRb?g<H?darkmagentadarkolivegreengF]kSU?g噗?
darkorangeg2d?
darkorchidg333333?gz?g?darkred
darksalmong46<=?g4?g?darkseagreeng׃I?g9̗?darkslateblueg[;Q?g%W@?darkslategrayg
(?darkslategreydarkturquoisegO)?gkGq::?
darkvioletgb[>?g!\zz?deeppinkgOsr?deepskyblueg?dimgraydimgrey
dodgerblueg[;Q?	firebrickg3UV?g =E?floralwhiteforestgreenfuchsia	gainsboro
ghostwhitegold	goldenrodgip[[?gj?grayg3ۃ?graytextgreengreenyellowgb?grey	highlighthighlighttexthoneydewhotpinkgٕ?inactiveborderinactivecaptioninactivecaptiontext	indianredgT:?indigog.M?gkzPP?infobackground   infotextivorykhakig P?lavenderlavenderblush	lawngreeng1w-!?gf?lemonchiffon	lightblueg	y?
lightcoral	lightcyang\T?lightgoldenrodyellow	lightgray
lightgreeng*?	lightgrey	lightpinkgͪ?g88?lightsalmonlightseagreeng]QJVU?lightskybluelightslategraygC?g	^?lightslategreylightsteelblueg~?lightyellowlime	limegreenlinenmagentamaroonmediumaquamarineg?
mediumbluemediumorchidg WW?mediumpurplegPl?g x|{?mediumseagreeng(Bvv?g~qJ[\?mediumslateblueg(?gù?mediumspringgreeng:TS?mediumturquoisemediumvioletredg?g<?gpx?menumenutextmidnightbluegz?	mintcream	mistyroseg/[<<?moccasingO=බ?navajowhitenavyoldlacegJo	?olive	olivedrabgAGZ?g2d?orange	orangeredg)TPQ?orchidg<H?palegoldenrodg8G?	palegreengͮ{+?g?paleturquoiseg.!?palevioletred
papayawhipg<f2?gp{?	peachpuffgf67?perugZ?pinkgA)Z?g3xy?plumg÷n?
powderbluepurplered	rosybrown	royalbluegkzPP?saddlebrowng9]?salmongJzZ?
sandybrowngx'?g%?gX9?	scrollbarseagreengT:?g?seashellsiennag<$?g
?silverskyblue	slatebluegps?gٕ?	slategray	slategreysnowspringgreen	steelblueg2d?tantealthistlethreeddarkshadow@   
threedfacethreedhighlightthreedlightshadowthreedshadowtomatogbg
?g*SA?	turquoisegj?gù?violetwheatwhite
whitesmoke)windowwindowframe
windowtextyellowyellowgreenc                  T   g g t          t          j        j        j                  } |                                 }|D ]>}                    |                               |                                           ?fdt          t                              D             }|S )Nc                 .    i | ]}|         |         S r*   r*   )rb   ilower_font_listupper_font_lists     r   
<dictcomp>z*get_default_asian_font.<locals>.<dictcomp>e  s%    fffQ/!,oa.@fffr   )
r   rH   pdfbase_cidfontdatadefaultUnicodeEncodingsrD   appendrg   rangerj   )	font_dictfontsfontdefault_asian_fontr  r  s       @@r   get_default_asian_fontr  [  s    OOY&3KLLINNE - -t$$$tzz||,,,,fffff%PSTcPdPdJeJefffr   c                     t          t          j        j        j                  }|                                }| |v r#t          j        t          |                      d S d S r   )	r   rH   r  r  r  rD   r   registerFontr   )fontnamer  r  s      r   set_asian_fontsr  j  sY    Y&3KLLINNE5x 8 899999 r   c                 4    t           j        j        }| |v r| S d S r   )r   rn   DEFAULT_LANGUAGE_LIST)nameasian_language_lists     r   detect_languager  q  s'    #+A""" #"r   c                 n    t          |          dv r#t          j        |           }t          |          S d S )N)arabichebrewpersianurdupashtosindhi)r  arabic_reshaperreshaper   )textlanguagears      r   arabic_formatr  w  s9     x  $___$T**2tr   c                 |    t          | d          r)|                     d          }t          ||          }|r|S d S d S )Nr  )rL   __getattribute__r  )context	frag_textr  detect_language_results       r   frag_text_language_checkr    sY    w
## *++J77!.y(!C!C! 	*))	* *	* 	*r   r   )F)r   Nr   )Dloggingrer0   r   r  rH   reportlab.pdfbase._cidfontdatabidi.algorithmr   reportlab.lib.colorsr   r   reportlab.lib.enumsr   r   r	   r
   reportlab.lib.unitsr   r   reportlab.pdfbaser   reportlab.pdfbase.cidfontsr   xhtml2pdf.defaultr   compilerk   	getLoggerr   pypdfreportlab.graphicsr   r   objectr   r:   r>   rJ   rS   rV   rr   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   MDOTALL_rx_dataurirh   r  r  r  r  r  r*   r   r   <module>r     s  "  				 



               % % % % & & & & & & / / / / / / / / H H H H H H H H H H H H ( ( ( ( ( ( ( ( ( ( ( ( ( ( 5 5 5 5 5 5    	Z
\ 
\ g$$  ' ' ' ' ' ' ( ( ( ( ( ( .  .  .  .  .v  .  .  .F       6	# 	# 	#" " " " 
# # # 
#8    $Y	d	 
						  & 







 
   
G G G 
GT 
  
* 
+ + 
+#$ #$ #$L 
1 1 
17 7 7   	     $ 8 8 8 8
 bj8"$:JL LpEE#sC((pUU2r3''p w++p EE'7G44	p
 EE#sC((p EE!QNNp %%G,,p UU7Aq!!p %%C%%p UU7GW--p eeAw((p UU1a^^p eeAw00p EE!QNNp %%'22p  UU7GW--!p" w11#p p$ %%S#&&%p& uuS#s++'p( EE#sC(()p* %%1a..+p, w11-p. 55c3''/p0 %%A&&1p2 w113p4 UU1gw''5p6 eeGWg667p8 a'**9p: uuWgw//;p< EE!QNN=p> aG$$?p@ a'**ApB UU7FG44CpD gw00Ep p pF q'1%%GpH gw00IpJ w11KpL 55!W--MpN eeGWg66OpP %%61%%QpR %%GR((SpT uuWa##UpV %%'22WpX EE'7G44YpZ UU7GW55[p\ UU7GW55]p^ UU7GW55_p` UU1gw//apb %%G,,cpd a'**epf 55FA&&gp p ph uuWgw//ipj uuWgw//kpl %%!,,mpn w11opp 55GW--qpr 55'733spt uuQ1~~upv w11wpx %%!,,ypz EE!Wa  {p| w00}p~ EE'7G,,p@ c3$$ApB UU1gq!!CpD 55!W--EpF EE'7G,,GpH r2s##Ip p pJ UU3S))KpL gq'**MpN uuQ))OpP eeCc**QpR uuS#s++SpT 55c3//UpV w11WpX eeGQ((YpZ eeCc**[p\ aA]p^ UU1a!!_p` UU7GV,,apb gw00cpd UU1gw//epf w++gph EE!Wg..ipj w11kp p pl %%'22mpn w1%%opp EE'7G<<qpr w11spt %%'22upv w11wpx q'7++ypz 55GW--{p| UU67G44}p~ EE'7G44p@ eeGWb11ApB eeGWb11CpD eeGWg66EpF 55Aw''GpH EE!QNNIpJ w11KpL UU7GW--Mp p pN uuQ1~~OpP eeGQ""QpR b'733SpT %%1g&&UpV EE'7G44WpX EE'7G44YpZ eeGWg66[p\ uuWgw77]p^ q'733_p` uuWgr22apb uuWgw77cpd EE#sC  epf aAgph EE'7G44ipj w7++kpl q'7++mpn a'**op p pp 55GW--qpr EE!Q  spt uuWgw//upv UU7GQ''wpx w11ypz eeAw""{p| q'1%%}p~ eeGWg..p@ UU7GW55ApB w11CpD UU7GW55EpF UU7GW55GpH %%7G,,IpJ q'6**KpL EE'7G,,MpN EE!Wg&&OpP EE'7G,,Qp p pR %%'22SpT eeGQ((UpV 
55Aq>>WpX w11YpZ w11[p\ 55'622]p^ eeGWg.._p` %%'22apb sC%%cpd gw00epf a'**gph eeGWg..ipj eeGWg..kpl uuWgw//mpn w11opp w11qpr w11sp p pt EE!Wg&&upv 55Aw''wpx vw00ypz 
55'6**{p| EE!Wg&&}p~ uuWfg..p@ b"b))ApB %%S#&&CpD uuS#s++EpF sC--GpH EE#sC((IpJ eeAw((KpL vw00MpN eeGWg..OpP UU7GW--QpR UU1a^^SpT %%'22Up pV eCc""5Aq>>%1a..eAq!nn5'733_p p pf  : : :    * * * * *r   