
    ,gm                         d Z ddlmZmZmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZmZ dd
lmZ dZd Zd Zd Z	 ddZd Zd ZddZd Zd Zy)zDraw borders.    )ceilfloorpisqrttan   )boxes)replaced)
percentage)Matrix   )	get_colorstyled_color)stacked)toprightbottomleftc           
         |j                   d   d   dk(  s|j                  y|j                         \  }}}}}}}}	t        ||      }
|
| j                  z  }
| j                  |||||j                   d         }t        |||j                  |j                   d   |j                   d   |j                   d	   |j                   d
          y)z5Set ``box`` mask border as alpha state on ``stream``.mask_border_sourcer   noneNefmask_border_modemask_border_slicemask_border_repeatmask_border_outsetmask_border_width)stylemask_border_imagerounded_border_boxr   ctmset_alpha_statedraw_border_image)streamboxxywhtltrbrblmatrixmask_streams               n/home/viktor/gitlab-persoonlijk/factuur-applicatie/venv/lib/python3.12/site-packages/weasyprint/draw/border.pyset_mask_borderr3      s    
yy%&q)V3s7L7L7T!$!7!7!9Aq!QBBa1F
fjjF((Aq!SYY?Q5RSK[#//;N1O		&'3G)H		%&(    c                 f   |j                   d   dk7  ryt        |t        j                        xr& |j                   d   dk7  xs |j                   d   dk7  }|rE|j                   d   r5ddd|j                   d   f}d	}|j                  D ]  }|j                   d
   dk(  rd	}|rd}t        |       5  |j                   d   }|j                   d   }|j                   d   dk(  r|j                   d   }n#t        |j                   d   |j                        }|j                  |j                   d   |z   dz  z
  }	|	|j                  ||j                  f}
t        | ||d|
|       t        |t        |j                   d      d      }t        | |
|||       ddd        |j                   d   d   dk7  r\|j                  Pt!        || |j                  |j                   d   |j                   d   |j                   d   |j                   d          yt"        D cg c]  }t%        |d| d       }}t'        |      dhk(  ryt"        D cg c]  }t        |j                   d| d       }}t)        t"              D cg c])  \  }}||   j*                  xr |j                   d| d   + }}}t'        |      dhdhfv }t-        t'        |            d k(  }d|v}|r|r|rt/        | ||d   |d          yt1        t3        t"        |||            }d!D ]t  }||   \  }}}}|dk(  s|st        |       5  t        | ||||j5                         dd" ||j5                         d"d        t/        | ||t        |||             ddd       v y# 1 sw Y   
xY wc c}w c c}w c c}}w # 1 sw Y   xY w)#zADraw the box borders and column rules to a ``pdf.stream.Stream``.
visibilityvisibleNcolumn_widthautocolumn_countcolumn_rule_widthr   Tcolumn_spanallFcolumn_rule_style
column_gapnormal	font_sizer   r   column_rule_colorborder_image_sourcer   border_image_sliceborder_image_repeatborder_image_outsetborder_image_widthborder__width_color_stylesoliddoubler   )r      r   r      )r    
isinstancer	   BlockContainerBoxchildrenr   r   width
position_x
position_yheightclip_border_segmentr   r   draw_rect_borderborder_imager%   SIDESgetattrset	enumeratealphalendraw_rounded_bordertuplezipr"   )r&   r'   columnsborder_widths	skip_nextchild
rule_width
rule_stylegaprT   
border_boxcolorsidewidthscolorsistylessimple_stylesingle_color
four_sidesvaluesindexrS   r    s                           r2   draw_borderrv      s    yy)+ 	3//0 	1IIn%/ 0IIn%/  39901Aq#)),?"@A	\\ 	WE{{=)U2 	!	 W YY':;
 YY':;
99\*h6))K0C$SYY|%<ciiHC$$		2E(F(LPQ'QQ (%*:*:JU
#J
FJW$	#))5H I6S ]JPUVW W	W0 yy&'*f49I9I9U))3995I+JII+,cii8M.NII*+	- 	?DEtgcWTF&12EFE
6{qcGLMti		WTF&#9:MFM #5)+Q 	q	=CIIvV&<==+F + v;G9xj"99Ls6{#q(L&JFCF1I>
 3ufff56F 	F$*5M!eUEA:UV_ 	FudC,B,B,DRa,H..046  ULt$DF		F 	F		F_W W0 F N+(	F 	Fs,   3C N
N!N=.N!2AN'
N	'N0	c                    45 j                   j                  d    j                  d         \  }}}	t        j                  |||	dd j	                          j                               \  54|dd }
|d   }d } ||
d   4      } ||
d   5      } ||
d	   4      } ||
d
   5      }|\  }} j                         \  }}}}}}}} j                         \  }}}}}} }!}"||z
  }#||z
  }$||z
  |#z
  }%||z
  |$z
  }&d }' |'|d   |$      }( |'|d   |%      }) |'|d	   |&      }* |'|d
   |#      }+||+z  }||(z  }||+|)z   z  }||(|*z   z  }d }, |,|d   |$||      }$ |,|d   |%||      }% |,|d	   |&||      }& |,|d
   |#||      }#	 	 d 45fd	}- |-|||#|$dd||      \  }.}/ |-||z   |%z
  ||%|$5|z
  d||        |-||z   |%z
  ||z   |&z
  |%|&5|z
  4|z
  ||      \  }0}1 |-|||z   |&z
  |#|&d4|z
  ||       ||z   5k  x}2rI |-||#z   |||#z
  |%z
  |$|d5|z
  |z
  ||	        |-||#z   ||z   |&z
  ||#z
  |%z
  |&|4|z
  5|z
  |z
  ||	       ||z   4k  x}3rI |-||z   |%z
  ||$z   |%||$z
  |&z
  5|z
  ||4|z
  |z
  |	        |-|||$z   |#||$z
  |&z
  d||4|z
  |z
  |	       |rA|2r>|3r; |-||#z   ||$z   ||#z
  |%z
  ||$z
  |&z
  ||5|z
  |z
  4|z
  |z
  |||.xs |0|/xs |1       yyyy)zHDraw ``image`` as a border image for ``box`` on ``stream`` as specified.image_resolutionrA   N)specified_widthspecified_heightdefault_widthdefault_heightrO   c                     t        | t        t        f      rt        | |      S | j                  dk(  sJ t        d| j
                        dz  |z  S )N%d   )rP   intfloatminunitvalue)	dimension	intrinsics     r2   compute_slice_dimensionz2draw_border_image.<locals>.compute_slice_dimension{   sJ    i#u.y),,>>S(((sIOO,s2Y>>r4   r   r   r   rN   c                 r    | j                   | j                  |z  S | j                   dk(  sJ | j                  S )Npx)r   r   )r   from_borders     r2   compute_outset_dimensionz3draw_border_image.<locals>.compute_outset_dimension   s7    >>!??[00>>T)))??"r4   c                     | dk(  r|S t        | t        t        f      r| |z  S | j                  dk(  r| j                  dz  |z  S | j                  dk(  sJ | j                  S )Nr9   r~   r   r   )rP   r   r   r   r   )r   originalr   area_dimensions       r2   compute_width_adjustmentz3draw_border_image.<locals>.compute_width_adjustment   se    	C<0x''^^s"??S(>99>>T)))??"r4   c                    d||fv rd}
n~d}|
s|r|r||z  nd}
|dk(  rt        ||z  |
z        }nX|dk(  r#t        ||z  |
z        }||
z  ||z  z
  |dz   z  }n0|dk(  r$t        dt        ||z  |
z              }|||z  z  }
nd}||z  }
d||fv rd}n~d}|s|r|r||z  nd}|	dk(  rt        ||z  |z        }nX|	dk(  r#t        ||z  |z        }||z  ||z  z
  |dz   z  }n0|	dk(  r$t        dt        ||z  |z              }|||z  z  }nd}||z  }d|
|fv r|
|fS |
z  }|z  }||z  z  }||z  z  }t	              5  j                  | |||       j                          j                          j                  | |z
  z   ||z
  z          j                  |
|       t              D ]  }t              D ]  }t	              5  |||z   z  }|||z   z  }j                  ||       j                  ||
z  ||z  ||       j                          j                          j                  j                  d          d d d          	 d d d        |
|fS # 1 sw Y   xY w# 1 sw Y   |
|fS xY w)	Nr   r   repeatspaceroundr   )adimage_rendering)r   r   maxr   r   	rectangleclipend	transformrangedrawr    )r(   r)   rS   rV   slice_xslice_yslice_widthslice_heightrepeat_xrepeat_yscale_xscale_yextra_dxn_repeats_xextra_dyn_repeats_yrendered_widthrendered_heightoffset_xoffset_yro   jtranslate_xtranslate_yr'   imageintrinsic_heightintrinsic_widthr&   s                           r2   draw_border_image_regionz3draw_border_image.<locals>.draw_border_image_region   sA    %55GH5;6L0RS8#"5;#6#@AW$#EK$7'$AB W_{['@@[ST_U W$!!U5;+>+H%IJ;#<=+-!6<88GH38[5;.a8#"6L#87#BCW$#F\$9G$CD g%l(BB{UVW W$!!U6L+@7+J%KL K,$>? </'""G##(72*W4!G+o="W,/??V_ 	:Q5&1KKMJJLq8|h6!h,:QRw'2;' :{+ :A  :&';+A&B&'<(+B&C((;+(F(($w.70B'7 



"O5EII&78:: :::	:* : :	:* s&   BI3A?I'	I3'I0,I33I?)r   )r   )r   r   r   r   )stretchr   NN)get_intrinsic_sizer    r
   default_image_sizingborder_widthborder_heightr"   rounded_padding_box)6r'   r&   r   border_sliceborder_repeatborder_outsetr   rS   rV   ratioimage_sliceshould_fillr   	slice_topslice_rightslice_bottom
slice_leftr   r   r(   r)   r*   r+   r,   r-   r.   r/   r   pypwphptlptrpbrpblborder_left
border_topborder_rightborder_bottomr   
outset_topoutset_rightoutset_bottomoutset_leftr   r   
scale_left	scale_topscale_rightscale_bottomx_middley_middler   r   s6   ```                                                 @@r2   r%   r%   n   s    !33		$%syy'=?E65(0(E(EvudT&&(9J9J9L)N%O% r"Kq/K? (A8HII)+a./JK*;q>;KLL(QIJ&Hh!$!7!7!9Aq!QBB),)@)@)B&BBCc3q&KaJr6K'LFZ'M# *-*:JGJ+M!,<lKL,]1-=}MM*=+;[IKAOA|	##Am	##A
#" *QY3J+Q{A7L,Qa9M*Qj!5K MV7;J  J Z 5	1k:q!ZDJ	 	Aaz+%q+yB !9	Aa!em3\=+%'7,'F\!#K
 	1q5= +}	l*JF +o==x= OQK, >
?Z7+E	*
 	!OQU]2Ol*M(<7j(;6	 |+.>>>x> EL !j.!j.=8k)9)I5D	 	!q:~{A
N],Jy*y(<7		
 xH OQ^Q_|-K
N]*J	j(;6y(<7-+y7PL	R %-x{r4   Nc           
      	   345 |\  }}}	}
|xs d\  \  }}\  }}\  }}\  }}|xs d|fz  \  }}}}d }d }dk(  r- |||||      \  \  }}} || || |      \  \  }}}|}d}d3|5ndk(  r4 || || |      \  \  }}} || | | |       \  \  }}}|}d}d3||	z   5njd	k(  r4 ||| ||       \  \  }}} || | | |       \  \  }}}|}d
}d3||
z   5n1dk(  r, |||||      \  \  }}} ||| ||       \  \  }}}|}d
}d3|5dv r|dz  z
  z  |dz  z
  }!}  |dz  z
  |z  |dz  z
  }#}"|	|z
  |z   }$|	}% j                  ||	z   5        j                  |5        j                  ||z   5|z           j                  ||	z   |z   5|z          ndv r z  |dz  z
  |dz  z
  }!} | z  |dz  z
   |dz  z
  }#}"|
|z
  |z   }$|
}% j                  5||
z           j                  5|        j                  5|z   ||z           j                  5|z   ||
z   |z          |dv r|dk(  r|nd|z  4sr | !      }& |"#      }'$|&z   |'z   }%t        |%4z        }(|rr|%|(|(dz  z   z  4n|%|(|(dz  z   dz
  z  4t        |&4dz  z
  4z        })t        |'4dz  z
  4z        }*t	        |$4z        }+345 fd}, |,|)|+|||&      \  }+}- |,|*|+| ||	z   ||
z   |'      d   }+|$dkD  rt        d|+d      D ]  }.|.|-z  }.dv rHt        ||z   |.4z  z   ||z         }/t        ||z   |.dz   4z  z   ||	z   |z         }05|dk  r|ndz
  }1|1|z   }2nKdv rGt        ||z   |.4z  z   ||z         }1t        ||z   |.dz   4z  z   ||
z   |z         }25|dkD  r|ndz
  }/|/|z   }0 j                  /10|/z
  2|1z
          n j                  d        j                          %t        |%4z        t        |%4z        dz   dz  z
  z  xs d4t        dt        |%4z        d      D ]  }.dk(  r j                  ||.4z  z   |4|       #dk(  r! j                  ||	z   |z
  ||.4z  z   |4       Id	k(  r! j                  ||.4z  z   ||
z   |z
  4|       odk(  su j                  |||.4z  z   |4         j                  d        j                          y)zClip one segment of box border.

    The strategy is to remove the zones not needed because of the style or the
    side before painting.

    )r   r   r   r   r   rO   c                 v    t        |       t        |      kD  rt        |      t        |      kD  r| |fdfS ||fdfS )a  Get the point use for border transition.

        The extra boolean returned is ``True`` if the point is in the padding
        box (ie. the padding box is rounded).

        This point is not specified. We must be sure to be inside the rounded
        padding box, and in the zone defined in the "transition zone" allowed
        by the specification. We chose the corner of the transition zone. It's
        easy to get and gives quite good results, but it seems to be different
        from what other browsers do.

        TF)abs)x1y1x2y2s       r2   transition_pointz-clip_border_segment.<locals>.transition_pointI  sD     !$B#b' 1c"gB6Gb"Xt	$r(E"	$r4   c           
      ~    | |z
  | |z   z  }t         dz  | |z   z  dd|dz  z  dt        dd|dz  z  z
        z   z  z   z  S )a7  Return the length of the half of one ellipsis corner.

        Inspired by [Ramanujan, S., "Modular Equations and Approximations to
        pi" Quart. J. Pure. Appl. Math., vol. 45 (1913-1914), pp. 350-372],
        wonderfully explained by Dr Rob.

        https://mathforum.org/dr.math/faq/formulas/

           r   rN   r   
   rO   )r   r   )r   br(   s      r2   corner_half_lengthz/clip_border_segment.<locals>.corner_half_lengthZ  s[     Uq1uAvQAF
b4AQJ#7788: 	:r4   r   r   r   r   r   rN   r   r   r   r   r   )dotteddashedr         ?c           	      z   | s|dz   dfS t        d| d      D ]  }|dz  }dz  |z
  ||z  z  |z  z   dz  t        z  }	 |dkD  rt        nt        dz  |z
  |dz   |z  z  |z  z   dz  t        z  t        z  dz        }
dv rmj	                  ||z   |z          j                  ||z   ||z  dz  t        |
      z  z
         j                  ||z   ||z  dz  t        |	      z  z
         njdv rfj	                  |z   ||z          j                  ||z   ||z  t        |
      z  z          j                  ||z   ||z  t        |	      z  z          |
t        z  dz  k(  sT|	|
z
  dz  |z
  |dz   |z  z  |z  z   dz  t        z  |	z
  z  }|dz  } ||fS  dt        z  dz  
z
  |
	z
  z  z
  }||fS )Nr   r   r   r   rO   r   r   )r   r   r   r   move_toline_tor   )dasheslinewayr(   r)   r   r   chlro   angle1angle2offsetangledashmain_offsetrl   r&   s               r2   	draw_dotsz&clip_border_segment.<locals>.draw_dots  sH   !8Q;&q&!, GAHAe)c/QWt^c-AA  6S1Wc#e)c/a!es]T-AC-GG
Q(F 00q2v{R/?@FS2X\CK%??NFS2X\CK%??N!22{R'7R@'R#(S[2H)HJ'R#(S[2H)HJa/"(6/%i#o!a%31E1KK "#&,7- ". 	 V|#=G8 a&0Vf_EGFV|#r4   r   gư>Teven_oddN)r   r   r   r   r   r   r   r   r   r   r   )6r&   r    rS   rl   rj   rd   radiibbxbbybbwbbhtlhtlvtrhtrvbrhbrvblhblvbtr.   bbr/   r   r   px1py1rounded1px2py2rounded2r   a1b1a2b2line_lengthlengthchl1chl2dash_lengthdashes1dashes2r   r   r   ro   r   r   r   r   r   r   r   s6   `  `                                               @@@r2   rW   rW   =  sz    $Cc35:5Km2JS#
cJS#
c"2a5(lNBB$": u}/S"bA
cH/cB3C
cH	/cB3C
cH/sdRC"E
cHCi		/cT2sC
cH/sdRC"E
cHCi	/S"bA
cH/cT2sC
cH  rAvsSy5194BQc	EAI 5BCi#osSy+.sK(sSy+"34sSy3c(9:	"	"eai'rAvBeai'#QBCi#o{C#I.{C({S(#)4{S(#)c/:$$)uq5yx%b"-D%b"-D 4'$.F.KH{Q!>? {Q!>!DED4!8Ot34GD4!8Ot34Gt+,D!$ !$F %sCc3>LD&tS3Yc	3TKKLND T!q$* ?AKA00 sQX!5sSyA sa!et^!;S3Y_M(S1WE!D%Z!22 sQX!5sSyA sa!et^!;S3Y_M(S1WE!D%Z$$RR"Wb2g>? KKK&JJLftm$ftm(<q(@A'EEG LJK 1eFTM2A6 
G5=$$S1t8^S$FW_$$c	E)3T>5$HX%$$a$hc	E(94HV^$$S#D.%F
G KKK
JJLr4   c                    |dv r| j                  |d          t        | |j                                t        | |j                  d             | j	                  d       | j                  |d          t        | |j                  d             t        | |j                                | j	                  d       y | j                  |       t        | |j                                |dk(  r6t        | |j                  d             t        | |j                  d	             t        | |j                                | j	                  d       y )
Nridgegroover   r   Tr   r   rM   gUUUUUU?gUUUUUU?)	set_colorrounded_boxr   rounded_box_ratiofillr"   )r&   r'   r    rk   s       r2   r`   r`     s   ##q"FC3356FC11%89T"q"FC11%89FC2245T"
U//12FC11%89FC11%89..01
KKKr4   c                    |\  }}}}|\  }	}
}}|dv r| j                  |d           | j                  |  | j                  ||dz  z   ||	dz  z   |||
z   dz  z
  ||	|z   dz  z
         | j                  d       | j                  ||dz  z   ||	dz  z   |||
z   dz  z
  ||	|z   dz  z
         | j                  ||z   ||	z   ||z
  |
z
  ||	z
  |z
         | j                  |d          | j                  d       y | j                  |        | j                  |  |dk(  rp| j                  ||dz  z   ||	dz  z   |||
z   dz  z
  ||	|z   dz  z
         | j                  ||dz  dz  z   ||	dz  dz  z   |||
z   dz  dz  z
  ||	|z   dz  dz  z
         | j                  ||z   ||	z   ||z
  |
z
  ||	z
  |z
         | j                  d       y )	Nr  r   r   Tr   r   rM   rN   )r"  r   r%  )r&   r'   rm   r    rk   r   r   r  r  r  r.   r  r/   s                r2   rX   rX   	  s)   Cc3NBB##q"#"q&L#Q,27a-R1}!4	6 	T""q&L#Q,27a-R1}!4	6 	r38S2X]C"HrMJq"T"
UFc"q&L#Q,27a-R1}!4	6 	"q&1*cBFQJ.27a-!##SBGq=1+<%<	> S2XsRxrBb2F
KKKr4   c	           
      @   ||k(  s||k(  sJ t        |       5  |dvr| j                  |d       |dk(  r| j                  d|z  g|       n|dk(  r| j                  |g|       |dk(  r| j                  |dz         ||k(  rb| j	                  ||dz  z
  |       | j                  ||dz  z
  |       | j	                  ||dz  z   |       | j                  ||dz  z   |       n||k(  r| j	                  |||dz  z
         | j                  |||dz  z
         | j	                  |||dz  z          | j                  |||dz  z          n/|dv r*| j                  |d	z         | j                  |d
   d       ||k(  r1| j	                  ||dz  z   |       | j                  ||dz  z   |       n5||k(  r0| j	                  |||dz  z          | j                  |||dz  z          | j                          | j                  |d   d       ||k(  r2| j	                  ||dz  z
  |       | j                  ||dz  z
  |       n8||k(  r2| j	                  |||dz  z
         | j                  |||dz  z
         n |dk(  r||k(  sJ d}	d|z  }
| j                  ||d	|
z  z
  ||z
  d|
z         | j                          | j                          ||z
  }| j	                  ||       ||k  r| j                  |       | j                  ||
d	z  z   ||	|
z  z   |d|
z  d	z  z   ||	|
z  z   |d	|
z  z   |       |d	|
z  z  }|	dz  }	||k  r[n5| j                  |       | j	                  ||       | j                  ||       | j                          d d d        y # 1 sw Y   y xY w)Nr  T)stroker      r   rM   rN   r   r   rO   r   wavyg      ?r   )r   r"  set_dashset_line_widthr   r   r(  r   r   r   curve_to)r&   r   r   r   r   	thicknessr    rk   r   upradiusr(   s               r2   	draw_liner1  '  s   8rRx	 =++U40HOOQ]OV4hOOYK0H!!)a-0RxrIM126rIM126rIM126rIM126rr2	A#56r2	A#56r2	A#56r2	A#56))!!)a-0U1Xd3RxrIM126rIM126rr2	A#56r2	A#56MMOU1Xd3RxrIM126rIM126rr2	A#56r2	A#56f_8O8BI%FRa&j"r'1v:FKKMJJLVANN1b!b&%%i0
NBf$4F
Q&R&[(8F
NB( QZb b& !!),NN2r"NN2r"{= = =s   L,NANNc                    |j                   d   }|j                   d   }t        |j                   d      }|j                   d   }|j                   d   dk(  r|r|j                  r|j                         |z
  |z
  |j	                         |z
  |z
  |j                         d|z  z   d|z  z   |j                         d|z  z   d|z  z   f}t        D ]C  }t        |       5  t        | ||||       t        | |d|fz  |t        |||             d d d        E |j                  D ])  }t        |t        j                        st!        | |       + y # 1 sw Y   xY w)	Noutline_widthoutline_offsetoutline_coloroutline_styler6   r7   r   rO   )r    r   r^   border_box_xborder_box_yr   r   rZ   r   rW   rX   r   rR   rP   r	   Boxdraw_outline)	r&   r'   rS   r   rk   r    outline_boxrl   rf   s	            r2   r:  r:  j  sW   IIo&EYY'(Fcii1EIIo&E
yy)+%++&/&/U*QZ7!e)+a&j8	:
  	6D 6#FE5$L KeXu t466 6	6  (eUYY''(6 6s   .EE	c           
      4   |\  }}}}}}}}	t        d ||||	fD              r| j                  ||||       yd}
| j                  ||d   z   |       | j                  ||z   |d   z
  |       | j	                  ||z   |d   |
z  z
  |||z   ||d   |
z  z   ||z   ||d   z          | j                  ||z   ||z   |d   z
         | j	                  ||z   ||z   |d   |
z  z
  ||z   |d   |
z  z
  ||z   ||z   |d   z
  ||z          | j                  ||	d   z   ||z          | j	                  ||	d   |
z  z   ||z   |||z   |	d   |
z  z
  |||z   |	d   z
         | j                  |||d   z          | j	                  |||d   |
z  z   ||d   |
z  z   |||d   z   |       y)zDraw the path of the border radius box.

    ``widths`` is a tuple of the inner widths (top, right, bottom, left) from
    the border box. Radii are adjusted from these values. Default is (0, 0, 0,
    0).

    c              3   $   K   | ]  }d |v  
 yw)r   N ).0corners     r2   	<genexpr>zrounded_box.<locals>.<genexpr>  s     
661;
6s   Ng?r   r   )r=   r   r   r   r-  )r&   r   r(   r)   r*   r+   r,   r-   r.   r/   rs              r2   r#  r#    s    "'Aq!QBB

6b"b"%5
66Aq!$A
NN1r!u9a 
NN1q52a5=!$
OO	A1	1a!eQA]AE1r!u9F
NN1q5!a%"Q%-(
OO	Aq1ur!uqy !a%"Q%!)"3QUAEBqEM	A NN1r!u9a!e$
OO	BqEAIq1uaQA!2Aq1ur!u}F
NN1a"Q%i 
OO	1r!uqy=!beai-A1Iq:r4   )NN)r   )__doc__mathr   r   r   r   r   formatting_structurer	   layoutr
   layout.percentr   r0   r   rk   r   r   stackr   rZ   r3   rv   r%   rW   r`   rX   r1  r:  r#  r>  r4   r2   <module>rI     sa     + + (  '  * *(NFbLR` 37up(<@F(.:r4   