[PATCH] Add a test case for miter limits.

Chris Wilson chris at chris-wilson.co.uk
Fri Sep 28 16:37:00 PDT 2007


https://bugs.freedesktop.org/show_bug.cgi?id=7245 suggests a bug related
to the miter condition, so add a test case to explore the effect of the
miter limit on a few line joints.
---
 test/Makefile.am         |    2 +
 test/miter-limit-ref.png |  Bin 0 -> 21926 bytes
 test/miter-limit.c       |  156 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 158 insertions(+), 0 deletions(-)
 create mode 100644 test/miter-limit-ref.png
 create mode 100644 test/miter-limit.c

diff --git a/test/Makefile.am b/test/Makefile.am
index e08f61c..70e1318 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -62,6 +62,7 @@ mask				\
 mask-alpha			\
 mask-ctm			\
 mask-surface-ctm		\
+miter-limit			\
 move-to-show-surface		\
 new-sub-path			\
 nil-surface			\
@@ -324,6 +325,7 @@ REFERENCE_IMAGES = \
 	mask-surface-ctm-rgb24-ref.png	\
 	mask-surface-ctm-svg-argb32-ref.png	\
 	mask-svg-argb32-ref.png	\
+	miter-limit-ref.png	\
 	move-to-show-surface-ref.png	\
 	new-sub-path-ps-argb32-ref.png	\
 	new-sub-path-quartz-ref.png	\
diff --git a/test/miter-limit-ref.png b/test/miter-limit-ref.png
new file mode 100644
index 0000000000000000000000000000000000000000..00c4ee3616249a2784f3c1a7eaa5bc4d638e9202
GIT binary patch
literal 21926
zc%0OGby!qi)b1gNW&lZPkdQ_sloCf8F(|2_!JwoY2^kthKw1eADQTp;LrSDuy1TzU
z{=WO%Kkwgn9>8&C*IIk6cfIe~=LA1_tUydaM*u+(v63R<83bWOp?~pk!6&};qCMar
zYzH|d4LtDj#4|%d5HqBNc%b2$yfNkGsc~2<b2Z8tqhwL6N>%J11z}(a72mLK-OlGJ
zHCmc48w^|@tkTr8-MpQ at sp(;T=zMy3RApk2D_5q0&4UW5;AO>@!wa~D|Dq!`N{J(;
z$E^H#J5p7!C%MzpVrII(oh@=are9(oKOuS4b9&i98fFwG)J9|a|H&T#lobh?0nMtn
zU>i*+OW)24bGkDL8Tjg1TVOlQzjqYR at kqfNNqF=YWIEu7`U{=l$wmipFhB+5a>;ne
zLY-1J*1NusAPdY-Bu3Z`FCix=0*{5BY=e=IgY_BNKq%ti9@!-i*-N%5PAWHwFiBVT
zrW<4fysT$ZWGN}Lmv0kM-g1Z-)+r<vv!!dz+#aE*-6wWYrY8S~0q;;2<OA}oZ%=ko
zS2 at yi*`{3na+1!?g*3A_o{%w`j=wBjY$eAgTY?Xyp{!aWj|s`5!%^NhR at 3}XQHxE@
zltD_#Y}d`Essdzu5eNN^a*-$-j`TignrGosa!`ge25}V_#6uDz{_tH;`^j+|HQVL>
zk6+B`FA)be at M+EhaYQ-;4yUBP{ihaj0z=m at T8{K}wo8Yi*)IbQ?LP1UBlyg}MwEdZ
z{~FN{c)Nxb!3RdcI7JO)1Gf;4%-Gvxw at BsBmd*LOB>%0v>*-39X;=zs3#_Q~;vqtp
z)!h%3$Kn}T=`J-WBX%>0m4dNATs562P+GF>{1(}+T9r@$s(>y1y<n|On;yezT8hK~
z_MEYBLWh}f;BmeX7_+IPe}{&a_DeLGkL8=eB*aHD&`K=~#m}5xe|E0I*l$wwL`8*=
zm_!*VDg=+_7`(=Phe}dcLS$m at P(!aj*4YXt{IKk2Tyea2gNiEs#}7E2+8-Ymf2bVO
zm7+nEC4hU9K~ZGU%Z>aIRVWUOlrf-ruAwQA at XN?q?4<&fM=mFFR&s}sfmIn}#|x5y
z!Jqt^*mO>oaKKelQ~RNtUpXJbW7f}Si^pPeR`o(38&$DGv%i|1)?_4 at e184n#S3~4
zd){9=f^^}K at 9?k&uWl*c>gwv1V+M7Db|C!z<yZm^6PW?wtPg};lPK%rBK9~{62D}O
z$mk%s*sPO$Y|8eA+#7;Y(&!rk7<;U~dbMS*ZEV_do at d{vZ#O1K`cX2P4!^of#jlT-
z at _1R@<qhPGIZG;sx3>)O+95<J8 at 8bfz0d7*w6u-E6r8`Nro5()UX)lEkC(m_4x+(+
z!W<w78;@5EiHF9ZSqs}uRSpX0?di=!S9*>jzCUw991;?=gjBq;&d%la2Io+NwH!*z
zhqS>{0Wk(KV(%D07zRP?tfl4U>2-CCqDj4*=fN6vnDd;nHrP9Hs(PcsabjSkTN-mh
z@>$R3=0gSK4GmN44TiBQ74V7%X0QY$`Ur=QF?C?fV!sw>!{vv6|28o)lHENI*7`Th
zAmsR9-sBI$oYxivj@~yA at z0)-|Lsc&ou4<6ad+!mhqfr?4q$KLe<M&Ipgf!%Jl~vm
zjQw+VpNopfz!uqwOUjJ14RmSCCS&8lFaE7(;FkWJ&~)j`p(lohBrF$KckW@$ddQ(F
zE~TLROk`g84YrUzeb~b4p*wmxuC9MxPat at Z7`v3rEIg)e&Bo*}qVXbyVmQ>AE>8Eq
zXysl?<N8`dR}b;*g`@o0g;{mq4{-lf at wb=E9SNzbx>s6Orc|chvPTI=VvxuETfrP<
z=MGIwT-^JR5CStZY{&cWa5A2&Fj2{2Pv>CEX1JUeLOXD1wWK26G(A6``0(%$gxcWw
zEt69MR0f36glyY;-^^Z`&LY{y&dIru9?CE0?d|<JXbsvig$j2+BF+1fAY0rW$XCVB
zN#DQGccDG<Tr))xy$Bx+@}hr>XrxpF+k*G5xL8;<O<F2yoz;{C^Mum3m!3TX#RY3f
zf$CtN*>&0(c(ltZD*QW+ebx|szzx*QPoMsqUvPkialzcu5<UN(%PEESU5F89M~o$4
znOoK#q$rl1m~SC#!@0PAMCk9|S|TDMCmIEBW4|r&F!y0%M+ulF^jd6;m+=ruCDH^1
z+ontXv&QsjV~mR%e;l^705M|yc#1c7J;pB&9}t0%upMG(-_Pr!pn!jPbX29cV2|Tz
zx3;V&uHtZ9QO%rSf=*?#KkAJ|$<K$mBZjj>5eqkN+%Vdj{Q0hLkgkxTp&Lr2mK%nx
ze;)8f?Lm{MfnPcy at Z_`ucd50tHOXnBm0ScrFp!p6=%0a$o^vFmLCr#Y(;nMW#m3F=
z*^Xy?uAM at u_^K4}qBn*fBtLuhOwe|^Ms~|kTMm-O-68OG34}{EO1f6UpGx at NOh%@`
zJ`=RA(}2Jp8TnFCA@;3ZZ4vB25C&$z*D!O at qzOJMmHNloN&bS@)wkR~A%rE{%JU6t
z-TS&?c}8<aUe!}K-R9?)cXN|?_Wb#!Q~;+llm`95Gzx{!yZ%5j>!1{2v)34v<PC2j
zhli)`95MLB#KbEb8wcx{KgELeK at N$@`Wdzf(-0|a*B(#9cy8b3FmRc2LUQr(8FU$w
zp9u!P-=QfnYV at nQzg^>CATKZfQys>@3DQ0*E9;Y}HQk2~A1<WA#GIh3cLPsO5qJaS
z->LWBqe38FOgkL;ho)q5B3(57X2Np^t3xX*D|kwF(0|j)J#9<pOm&_AotT(dS42$D
z at r5|XiXc)*LPCOj{dazK;kR!q%4sB9tbBaLC6 at gp&M&%SNTBm%Bn(O>m+P1^;p=p>
zm8bO`gQ$!|xTr8c(f5q*wpod!gTyv4Fkm5!5DGQ~Gl|Ih{`y$-JvTS)a?{qQT65I{
zgf^IpD00_($DhgbXL|blgdEDZAYyrWIisd#awbR<$Akuyb3W)S1?j$g?N0ZB5Q<4g
z{#>}K#%{pDYwl=@sjHI~5fg)5(zPSVYdvvVTzmua!j|$4{DOkX(gHg at t^$-wgW5mE
z@@U7+*fkT&{IU|k at am$H`wS|Kxw-i}{-6&}=t*Ez)zt&T!vT$rjX&x{;|t|m9ee|_
z!j_0ZxEqu60DKh?5IBU%oHTAe|EhXQj(IUfz!H^~7723FC(ZK{9N at 98p5DOpG)ZVH
zd9<|M=_`#%Ts-*IzXYZTQpyW#cYQrtVBokEtL?3xuLZl9Wrddg*m-z(Xo5oBNP at 7W
zq@=7~zkY~BB7YUye(L=z8rqsZy6Q;XS-QM8^39br3Kfe^9SIp#6A8(-kMZ&Ab^9sX
zlS%RM$ALx+ci7mlz{(yxefm_;Rz3_L5pZ?o?da(Exw`uP=OuZ`BHeti_6UZFli}y;
z*4M!Q=g500ed`9>`gLcjH84eukLbZ4VEGatUBbTZ&}>)FTyBk^Gw5N~Gn~z?O64rM
z2M;j5swR+k+!@PYBr`TLg20kN2nUSOCw4_P&k2r>j$Uv6Tu$|<&du%CfBIBtHAv=S
zE;Q<7VqtH at a{ivI?+SqBm|0_1K3z~B+}wU{>CK$|9`B6d6nGfr6ZG=sOD--hS#NLY
z;^JbzqCH#0*rxNr;o+C;Y#5k|rM6(sPF!ABS9jV2cyT%}H}}5w+mnGvZ^z44YNTg&
zk5HxOVZtBpWhK<#e}3;mBb8pA=jp*so65QSw6wG(5A8k6bi*$$JQtUj*~G-CJ3GDe
z%gMEX|8e~>yu7?t*4LXG8X5xn=}2*_r)*x?*mxfwjv{@|7dvBY2#uvq7h~$@_F}im
zS!7Mp(ecswO$X%4?O5eWhkhw-e*MawI3oiy?GGP62K4l(nps-1@$e7=dhwL(!lHy0
zOyckFPeVf^>*FJ{;q0MfH~~JTyLofwvKx6-yaaMH#KG&Q=TdzoDV+JJOJ|z>)u$E{
z*D!5;{k+=sg6gaM(o)AP<t$~w_Sav(eq{xNCnO{&s;KyD<pyfyK2lazeu4}_8Hpwd
zNlFsMbYjPJf}nmtL-amM|Kh0ajcCQl at 85NogDL`EnWO8RdBOIlT|U9&%tCr?0Hd4O
ze>a=f3=R&4m4RSQmi9W+{ty#$hixEeanUR at D~sjUEu2?nbe)}@PjW||<Y+KjdXSOj
zX|1~<0VmVSrR0d=UQ`KE{CstF)eI=w<lb6tq1O1Oa}LS>PGb-7n!~V}J+;ZS1`vbI
z&5D`2w|{#Q#6UgSCuZ_49(&`TpP$e4W~R<-Vr!~;!fPzPTl<|73c{E#3|msG2~ete
z-|iY17?`MM^V9r=o7-vpT{^X2jK(zEM7R&Ft*tl9>o1lBs$sae7vE#-Pj3qb-(a=}
z##vlloc`>N7pSi(Ej at Uf@>q;oh at 2xB&bW}Hal6Q(H&KO3z_7-1FjGn8!pm1vvIOJ{
z811^kVY!b~`fMe`H$G>1Pt%B;Tb3N`yINj=QhH!e?pTSX<&^6}_-I^gtO3P}NqAA8
zO$Diwi_3QI_wVDUqxDyZsEsmW+e%N$$^d*g^Dfv?#OqJ&?yh0k&vIJUMsk-8+*h-@
z_xAT?(msB?anMdH&z96H3J75BbxSbC`Ly@>X7jYgvr~WI29;7s=?{qP0dhe1B*dLJ
zXo7<LYHDhR*9+_GOh7qSAs`@#`!=$cta!|gva+)JR+O8&{=~`Y at TxaSEDi6sVlxFl
z5{G{PGoV|CoRxv2PB~!5E(<Iqgp#L=nqS}brLpmx-@(DbsvHU>^{bQAOgNzr{8vLv
zRP?v!!GMB-)YJ+!fqor9#5ZZ70L=IzPl`=r@{pa%)vrnXx>b&=Ydt+Zv<utxGoVsX
z^h at rCO(wDSynXxjSwY>|+FrsP%f8#Zyfsg<hk73?DJ9%k^_GYpd$T1-Lv&bMTT2Xh
zAhE~MMvm>vm$V at oLBMPD!Q$NuYKqt>`HXjuvtw?X#sWu23 at mjnJO+)CYHGbykX|~U
zsvH?(B-o}+Pz-ZF at 09TASK5UuXN@zg4Ti`ZxYsV_S4`i-o&EEt+-?8wQcuF2>`d?y
z7Za-xzjLPq)YyET+!3l=jqjhO&!SNDRH0d;Z$w?_!rMsv8-I;WOiT=bq<CszFf}kR
zK(=EV;h%$!q6BAYei)l3V<hL(!<WMJm0^_h(IhcX0@^_Z_gFHIH#llQSf{()m=8s#
zl!U|I8&o%LEP_1B$_Br$MG}d^<zoOZElWMRlhlhF(<ve at DJf|sLI(rki+lh6{qsnA
zi9u5lI_tR$+6&62J<TsNk#-U0_+pr3azqpZ)loEoKrD6PqIAmNj8VUO^=kg at jdb=8
zY+wxv#>QVPcIR7NTwhc7X26jmckj|BB_?_%<-j=$s<)~HWcQ?Wb#%Bq{^SQ!G0I}%
zqA22v{J4^h$-fi+<<TyvL0A~v&eyts7;%3~hmJHO3emchJF7Gdxshh5H|^`T-M)SM
z0|6W)k}W#3f;HNnk#`B=FTKeHo6PSxCF-_kMnp>buy8c3LdsB{CHPx<y2*$A+Lc(+
zjK~LJsn5wDKg+xi$CpDHL)%@YhjVJ|aeR7IrIyC+{%9g{eYJf({T6VctAk+9)XKw-
zXtsV at qW7kdr}XZ7_wP0~Hd}!O69j~WLZ)p*73HQGQBMy11F7N*{dk@#FhlW0O}C?>
zm4FUe8_rqP%|EK)$x>2M>gep0IIfo at 2qpzFTo6G2PCOh`RkSJhW_4(Jq8{JEM9Oo_
zRVvx74rVRMq4uw+gzwym{wPuvtiZDSu3Nh?{s$X8HJp-xgDydwo<v1_OE68y^u6Bc
zZLnLDKFf=XJ6!A}cBi*b$VFw7K}0;#Z_fPoO|inXJ>u(=dK+)=Iz3-A^OS4PY}z{(
zpNot4YOE#Mc*_6v_!)p>N6YhSWO(=>kWCVB)(^>~llS^h$nbW?xLRTzZhWv4TWq7_
zM+VBv!SMRqOaPvx<vhz7Y_lD*5>ZrhLf%a&3~b^5uK{W(NjSW%OGh}_oR<pgFF=49
zr=;~2Q=&*Y6YBUvIe#pG0{Horm4EnT-#SQLueshJ_W&t(51)xyzfD;m&Hq5*lE%RU
z9Y{e3&N-}>V9;gd{Y{&1ilEZa)~jU<$mSka((plyfi38Tk-$2*_)Twp2EZubJQWuo
zzw9Ifz9Io%QNi#k!(veyw_`z-uN-#r0KOQ$0((IW_JWTjsvp??ZW3 at b>MH3y&8%nK
z5xkJ(T-7 at TmLlNzFRd7R2|m7H`UQuy^U2tPiMI|8U!LXYi&a3b at C8Q7`|lN42EswZ
zc8vK&`VVhuc`(e(%-E?ZDSxIcN_h&pYU9m8JKxsDfSFUkOm}+b<pp6aOq~*o-evtX
z=}*bY8>?sSf2u5O{S;V)0{@NlRvH-N8_Hj`LN{uCdU~q7lv at HxLuhNMfJrb|hq!)Q
zh!66li8_Q+E%88NbhEX!Rk>G;fQ5JAN(ML%JHD{VAFG8SzG(grK-q$z?%+om1Flu)
z7Xk~{q at V%p|2EJ7l*p#*BX_rc1=6k&2i~+Pi4+JpLCgsPFTLGg?(bjP({#1-t(+Cs
zx~Mw+n^eD8<ru7+-}aIF`NzciZ>7<|1-7SqOYxvu7&l_1hjr`NTc8u*jzv%9v=f at d
zL?>??89iq6&E^oNkCaQN0ka2TA!xzuJr(trn}r;loN33&x-8iIm9v;xe+39w&ZHPZ
z!MLH_+H<WK>0k$T%{xEb3Iqril0h1%{+R^2X0z8}3`DR1k5I!<mcSzvuYc$L)WrM3
zSkEUR at nYAE6bPa8=?NjX8{{d#_lES$srIxyBzZtVJqBSgp_ElxdV`yryC7*3V%(eC
z0rs+jsE{FnlY$&N-`m at J7B7IjGT@p#7P1}}$ucm6%MEuhrh#>Vjhbu65H5Q1vFPNv
z)u)R^PMOmPtz4&SWkW;5h)nj1iYsPc<jJlu7?b?pm{Gxj>0x){yLG;}Twfj|wKX&x
zW7m%WCseP`Z4ZQ})YXvy&tSzDvif70VFGK^(AKyPq(3^Yw9(ET`E*}<mwpIu_86mv
zJyMP}tXn&}5n~=~ph-vBsG(k!=joo499~5=)^cA;uH#%XG)dMG3}Py}eJQtN7TS&I
z))6uR_;L$*K0eB*m7}p*Fp~rn94Ou&ojv67c8%eNsR}G)O`!Q4wCmTcQ)G;8UNPl7
z;RCd0g;8H`?;{W^gErxiH+|UX@>9h{03dJ0WfwsXh2-o1EWS9Ju)S6TIhwkDEG#Vi
z<muBdrQ-z*4HW_KXBjF=z!wld@(~FPMbB^gC`Zq>_Rv9W%5li_RoVEaX`OsV<E?o8
z^imyGNRl_;4{c8!K(!07aWCkZ$-#zrp|Q#Pv>WNY02rP(7dLn3rm6X>SGTG7bg}cb
za!b#hp=-+Yf?Y25u>X4PfnK-xt2c_%fg~WkzU%O}=k616H>)yTUc(w1!2Fe~N1 at 6w
z30=H<jDZ0Fo>)V%5RCCfta(3vJlPLLUd*o_1BQLQ=2#W_aeT$`9`B3dmglYqP^BTB
z5PUFVkBglb%;ZMT`~l1)fyOSGtKG=@y`-6ozx_)~OGp*q49!>CIy$IFp;X*c>lk70
z+co7-f1{kKBnj}Tfj1aoC|l53o{);S!{cNw$oBMd+vj at z;&gvo@$qA=3kBfMra)>#
zRH#7RpCO$65~zSuj-L2sP=9+y6ntS%bCLV1OehjSF6}fO6(wb(k)W#-C at Z;us0-j-
zhPnZ07$3>iMv8)X;sK<Hifihrw4sFs$KSq``%jI;uuh8M>7pwsDZcQg2Z%__KZ4%p
zf4C5!gpN*25R6$@OmHV(hH2{8g^<uQOT*<pp;inaF^|`Jz^LchkChml$BNC7-*R%s
z=<HyoQOa55qxueNFCRT>ZH?hnFX-s&D*&+lEbqb3jUXUgKgPw~o>~z43-^tcLq&Xc
z)}2nG at v7^n*}ZAm^XXkzSJysWM7Uh4+usBO;|*lb{GO&Gh~BBBD7>g5;kX{ImKSXy
z)etuyUoYgFo}LcKOa?zUcf!Xc at QRJS%gx5drk*_%`!zdT{kg7t3k3@{*aAUNt~0;h
zHYA|kC-?OTgg3vtym7VgRB;6a at I5=<6ObJIhF*swd|$l7Gc(z5P*Q#Y(6G8n at wb=R
zcN?F at kiaR8{Zxd&Z8a-?8ehBpcY(qBQSymS!&2 at _BlUn+OG#0aO2&XuTNo|+lCPlc
zw507^5ryod8-YRncZxr`0Piu<GhfY(>9BlEObp3+o^1l)>|a~2Ge`C34($h6C!)T&
zf$;FT)hzW)OEaNu5Lr@{0ZUB$rZ~~^84t9ysKD+;B_*v}e-ui^YPbn`uk;ULH at A+y
zX6Y$`#}<ao?!_X-WiJ{^iWa|(yn<xkz7^KEO$o9lDlw5DTplZ2-ajmi2-GLnDwpP@
zV at Q%K;2ViW+C#-NUA%o>#8NJwe%&4^40Y`)`Ww5T_GtVG{clVoHeVS67Lxb#ICAFc
zPZd#D`F$mTRz%gyiv#CX?c9Z5?~d!tJtsC|@O>$V@`)_lp;6e?#fxbMzG=po=LEdv
z85?v(nsF=bryNQp0A3&Qcb#5XvbV$JEilnbTo$vrq{uIWw&6bHjX!%20<Ay+ at V*rw
z&Nx<p!w at NV(Sjao^j|yAeGFe`$QtT1IvAtBYpi1^^~$x1s)?fwG-+Xrg6wF!#pF=0
z1K|~TEWhztQmN!N9%t^*um$|#lH(ebL2{vY+};-(?08rps6*)#FvVF{Q7Tgw^dzkq
z<jnl0LR7k7zd*TYY&7R>lMCq99tg!^7q1L!)xksC47$H_;F at F}iUWgm5<Wfso(ecx
zBL+D(!jZ+7Afa5p%|z7@)ukN|AE3YXXl=9e#qOYGyzey at 1Uk4;r|*q?iWEm+wqua{
z+Rw4X<2{y^3<eA0H9mb-x3{nw at n{x~PXj}xT at aIow)&a2FUHHw3sb3R6ff~WXaUAc
z6<R3J$U at Fc0++!iXGEV%3~=2wCIkdj$7C<d69<ydAOoK+!tw8rz?lN?NJ0&Bb~+#t
ziap1Ji)cXc$#f8>m(IcnQarKuJz>V26DqczC|9Vkota)4iU at 11WVr7vf)*5!;`9+@
z$fE@~z5oeaDViWsY}%DgEA_Nj=ZW>7A9Hv?ijE6Vbi-Vuj+q?_Aw~ih5SQfm`YdOD
z at 022#S<Bmno)tLH43nNQ6=+`j<0%*9?!l1ywQc5k)5Sje-S(8rjMpPxY<w_O$eGyV
zOgmSu=Q$elXbDhdH`jDmH{bbtw)3c=NB%^)tCy}}DGTe{sdCeHlE_Upj_2K99tMf#
zA?v*>rfgg$#1ivfl>D6+ at LE-=N0Y at v^Lh~S=yMfN=j-asIDK;i;O$;hLS#EkrI;k7
zF2#*P at 3Gk5dJ;zo6_K-p#rj`=Hn4L|?jM~6w7oHm_Rfv?xLF9FGz%J7KLqO5*Rb%o
z%ICl3&dRLVi%UvV^vu#UV~{f{V+eDk`UN~>-#Z~44{kQq;PNvif+ at PH-e5MJzojUS
zU=6+g+&G63ASw>gW9 at u{o0v8*m>ZG}^g at i7g8h0Eu6X1m(H%-Bkp2611t`R8Ou(>-
zjlL0MR*fZq?N^<!8{#AOEC;({6mT`*+KQ|}FqndgVkYw(9KSw*I0`{bN)plXk?TPd
z3%MaaEpsppBRxHlVi@}Sv;e{=1R*I2$yfGif3QYL^4qfH+>+wrpTb;8z_h<qK0!(!
zcV=geu27 at s4*3CiQ3yQHfr at CC26*NR#W4o?_FQ9Qqa4dL+Dei6d$RKqU<4iUmgite
z*vLs-#hUjp7%Viv6(0;a8`2F0x1)y~U}i-3aGmFuo##XM5D7U%&k<2c5amjMo`cXt
z0yqehS`33+06mAv(>z?@VxxIh*?AUp4 at p!j=&_6JfhkG`w9mJO5^mM(_aWcf{ct6F
z4Gf-7`$Q7uibo1n?zY`rF3>Go+YKJKv-_cQBZ3(e6H8~D>E|S5KJ1UGu&zSlcXj~f
zgoRQIw1JV#n-*w%??U`ka&H!QjG{RL?8KSOJ%!|FlG-_5ZFip=<c>V9z1Zvaq0g(c
z0YTs40Td#td5&h+Tqa`x<qsomGATMa`|t>oW=)r<+oIt!5tb$YZ`JnrA7)%%Z!et7
zScxM%DI74!w|1CW^~9T-+hvj$fNP#cpoS3#=B(~?vUhyby0&fxGt&~1A&*sB;7SpW
zunXqd<+7VW&Byz>V{f)l2c}lEp^p#;ZqN+0a~Jw~#n?V)2Xb3BccjYTCi;5oyH&>+
z#Q(V$;P6=joON<EsPmNaxrq(-e9f#QrM!Twl8Ta2V^bhubmH33p^#PCIN?_P_0?;y
zac;=HmN7Oq_FG=w$DdK+um)U60kvYWjHA-V`X2Q*c;x}>cdQ at O4YfN$lJfHMzeYv^
zL5(-LzPkML(}9zO;a<Sek#j}4zrR0m<Laqp-BDSgCNHw?f(3a at IBVh#lNb1!w&T>U
z7}`pP2l6m@<#t$HafsRR(5o_?N;{U at JUqr_x>-nDz<Ot1l)V~BsF?A-|E7Mnh&ejh
z>n>@=gFQIe?gkH)GeU%-;TW1EVV;Wj3JMDPGP>UHmC$Rk8b4L*am>L~eeX-r4&H)l
z-X~&GW?Thk(+h at RQ1^@){csc?$MrvELF{SQ?ZrBwN!NZ+62`tgLYRtOlGWJw0m318
z#TI&udBV@$)NE6cQBgtN9?8^RU{H-dC?5X(J3S+#Ietg>`SYO(+q%=gPp>_Eq)A9;
zS`WOKq1l?9#UVv(8Yv-dP0dD|3YBeB5xR9o_mwX&4-XHo#4mHiGm0H1#AK9MCzQT=
z(6^ehim^8<tE&&RwW-g}&OFbmpNq$R0RsJ$GtKjD_6*Fvac(Z{6Dhpm8os)^+8E8I
z;8|5UJvMea5b1r8A#?KQQK2h01r;Gmk#H6xtS_@`XOIegMR{dKR$ZO+jc8JR;i_PQ
zs^x+E<?j3U at 4vfDyDdM_){eh;(n?4|dfocS7rF{kR8W9LFdkap(AU&F90v6B{Md6`
zi5!L>s)ca8>${Bc@$qn<Mah@^d}2O6KIz!Zwm+Lk#{P|VHQCwAh=&iGgH!Iiq;9ON
z2%e6v2iv=1bJ$>FLnte0Us8<4^WqsmcYaMyZgj8z5w)2-$pCm?G2PCuyufTc;D-{%
zkR+M4QMKz6OzIVP_)Da#r{_gy4a!dRyLaz07#J87UV+!N&-Ep4Xe;^N at vR_*+4<YD
zkS~fKXGa=JAwB>6{X2nWe`>5ZLrmvzmCaPuHQv!7T$`Sq_XBDL3Dw|z?s<MQcO>Nf
zd)(6UazDi_EilsH#L&=lxA~UfOT7vkDe|>?Hf?&wMlu%+OsJ2$P7lM%{1~LupL!pe
z_d!8f$mO1dJ9?w}ddGQ81_!h-d_vA;qPjGUlUtJd>=hH6RyH>B4h|*5sAh{2VrOUP
zEor;ihQ5E-KM(i&rRH|<QY(qz5OaDVbaK<Pa<tV-WWM1YRvl6O>gDl_&&h~3Qfft=
z>9X-blUz8eSm+*uXF|4UN=nMN+}xO-Z4ZEXQ^@Df_Zxv|a<VfrlD)#sgU{~Z6;u+V
zN414qDWxxxr>3U96~rNbw!A7kx?Iz)ui8FX9rE{f9IyqxxPkgc)IjB`<343l^trs8
zN=izK0*xMFr4<!EmFC at X6~|js6J&k`XJO53Cji at lhqo|xJ_?+Rh=|OBfd)4{+})2P
zcN(w^wP}cPNXV&p`;@r0o10bJwzh0QW<0J8@$a>`GdwzK>%9;zHcfaO^gY<lH9&q6
zh6lk1d`wE?cqY*Bva-D$?;U=5ethlYb2gMFeURbt09cOs01<B_A~|UxNKUr4w#Jd1
zqlhT~`}Z&3`e@<IpTR-l8%_Tf=SY4_7TdQ1%8Q$7Hxo9Vsq-2fefUOnVm2dE+Fd(S
z#>qZP5GkR+cppRc?Pco7t5%RTzebns2lUpqwx$o;Zrax9zj!gm(B*yR-^^A@&Wbj5
z5W^GGsBS}gb8}PN`Ark-TS|6W*&!3D^vUdyx1+#{xZ)=w)<nO7`cUqInL7!p;+`iz
z+AUW;seZjPQEq)c^i?e>eJ?tXp7Be(Ac!G^2tz|Qlu7+4ub at EQrD77s!}|8kWaTdG
zOHJc15Sl#{tjf(RAJ!@V4F>S`K)m~VNr}VqLZr-<S>^UjRO=iWBR(Z_!%q*ybWjVX
zUBe38dwaTeP at VP;T{!1<^>!W8qgN5toM0?UGAYtoy at CmVgil|*2#zK at egkTZrshbA
z&q*^=d0<B56^IqU0MM}lgDxJId)e9weE<GEGm>eQaE)S)*%*>VT$9Y2k8V;-J$YR*
z5k64?l)Q+{mzZX at 8uGiq-3(Ac+|=^QK*q{SR8pT!neHK})WNSQYisMhin1VDn9}^)
z>2-T-{@m5^O=k@)ttKPE%1zTU-E%{?rPwr|i`{n1reU=-d)EM at 94?;S*8Ch9^vtp)
zI+|=_s#@D!OAEjV at _Jw9dVd6}qM at Q^4>nIHRac0h2hbQlAx#y!w4owUdr)Ff?OYc4
zCDeOv2Nf3ZFZh#$s?7X9wzbI*k9Hd{fn<DGf6^*YM``UaFNLoVg~uX_JNc9f&Uz;5
zdsr~hpDf`|!8zF<D4Jw#ba{3t6B1Y58H-?+yoaHmuri0i?&=FcWVN`n>%!IyBrxgI
zMT%7%YW0+Rhi4$X&g7Xd2`ir92E$qBW^AJuJws-ND#NOXaj{6~#b=L<?gljr6~7$%
znr1y+b81FYy-Gn6*`a(QW5wEq at q~C5GvTOC{|SJ6|MlPb=UU$w-%}`m0i-XggEhS#
zI(gqM>Up-BO+)WkeI4t(HF=5 at sM%@CHeUZ6DK5zxdHop!K5!fIiMK{-Y6ebE8|IXQ
z(&Tem)XwP9JyZ8cSI|EIa9Pwh%mx-nX`#a7cK2_Pi=HQQLD%G8w at yLo++%mMCBF`U
z+nOFs!?{Z=di^$j{-~+()HF8!(gub|oU+NbOm(vul{%hum`RoLNCm}%kD_dJ{Sd?`
zk at oSY8f5d*wwIY1c6fNW4KWNC_m%hMI<lUzAmTKnna$nK*YmG8^sN83qPn`m)9A^J
z(U_Q+5}Th(RFVCfD9Soq{7^<jDbx_JUm+$U(qL1OR?!PEsOIWy-G`u^&HS=)j?6$@
zHaXcg>N?sQsjGY2YvV<UMgEf<4g05cbIid?*K<|IR#tc*Pi=_R)1)ttty1hkt^gg`
zcZ?@LBVuT7X7>5>XW6ySIXOA4=!<CVQ4x=lb{~+h)(Q3}-zofEX=D55jiZP6&t8k0
zu3JBsMFVqf>t=UQkLj5g at K}f- at 7oh~d3ma5e*ix;+)__VHz>_NZJnINoUJLz9(kpy
z&wOyQyWkVvM(a<{2-Ho>6c0^G{(S7??1$cU6Z<YV)DlHrb|y<W6l1N at n0njY^aAhO
zHphbiI0B_2y+)<DxP!8xXXX!p2MjEUWp+f!1;9J6&kC>I!|N|idbANDFanjbin5=D
zii5+$2dRdI at p^CXsftUcGr>^By)*`#-MM*ryl5$Ji}yJ%ZzIw5=chiCrtpHBxVX5J
zsk;vlN1)PkewSzJj^pE5*g<*IGZQ3dM75hus3*)H35q?U3%A%qp9G#x2()=R=C8l+
zdweXx>Rx;GL{l?%GNs6PaC%xg>f^`7=L7)4!L*jPm{INzDJdx*WPNa#rsS_Z82nVv
z8SqGkbr7?1*r|H(Rdx2`lyS-k>C^PDU%&Pn2 at ZFaFYlm;NZ_Q&-I3SIU-NbI<5CBc
z($cO^lauMwW|qQEt+;*nyJQ|dd}yOi>nKhir<NqTNod(_c2`t%E6)19?X)CGB;G8P
z at CS)e>0|a>&~48w2aDs at tt>$BZx?Lg8$VqoEVv1n(<I&M;aT&5xDz#0ZaY&)?K>=D
zUu(F%J|`jR=L__w93GD^wfXqp#YJX5KDD(<YD3pAdN1D<G3(7%Jy>O*n4adp`+}X^
zliQTrU}D#=nGH`|w&wf}y9^E`6_qlBpp1-<P=A{V%U>#HEG#UW at b9^~8KSb#sc>AQ
zkzJC3=(|@Wk+ZYVt{mP|(pl4layK`(XYCrfBR_ex3z8{iD`@snsA4F&;-IeA!r^}7
z_~y|UP+C57hZ*cA2$=I`;bSuP*gY0D!kCAm_d`@O!0xURy2b0i?OeuOBQs6yb(t~}
zp_`&3CMLeCaQ;k$<+iCgbW%K%VzO-K+u=s-JEh0Qg3Y0p$nMlIKR^HIopXo~X(nci
zk)TLm#+`QrPifaVu02}X?0gmBatF`};%okf<8*0hX>m=BWZG7-x$1|Bg at oA0dGZ-T
z-)$HV*b(M=l=^K1^e|KnpK$nF2Z!j7i<fDdcwegax_G*=wkS=vl=a29a8SVhw9%V^
zm0^^%;<AgiY(rcU60`{k3D004>i=%|y0?51u1NZzZ_AABTLO3tv5KvqZ at 10>x5OX=
zic$_mfzTi|`dU#wHZ~UWoWo#gd6{z<F978XS;2nc&Jy|3L3icwwy$-1!X3&-JeNmt
zXow at oA)8!j9vnqLs(Y|Ijy5NbwKOy)@f+3;jtdI-Rg*;3{{G-WDe?rMx^8ltV!%+g
z<#Kbop9_kMi!({$00XgNgSRei1b?HIz3b~wQ~SGA0Z)j&FXGXCR%I+Z3EzG!oqz%J
z at vOcN&}8a01_T7nAkzq&bzWH3&}t38{P@@y_f2L~^SpYT at p?q-E#8 at p*q0wu_>L#P
zef;>b=5&8~8Fx72M3A^a8<HfN^@6+*2SQ|*lc%bo0SJUc at -;3K)=KkAeQz_(WyJ>)
zQdtREB3%FTAM7Fav^-~az9)ZuRWpW%H8Q_;sr^Wl@^H47l?qYMfv#{eNRPhXN^eFS
zFq2U}szkCVARhIl9SZvDhF#sfAk?RlKUk==nE=|X=CN8NhvdzFqsih81Pna-Q}cl#
z5G>Em*H!!7z;cNQ#Q+cDhRg9U_y8-bJC5ufc^|C`PJCRsm)L{9e^Wg-mrD(&^g5wK
zZA)Y96i(9tTvhZU=<4ka?}o;TOku;X?)nZSyu2Mtz|GCAsHPSupYcvU<AJ<9uCTCh
zR5I_Ss4B(}ss>$FchUxbIn>&(3+%ZE2ujGCcvhuu>vhQ(2xw#QBbo$$goK4LLt8Pc
zr$~}|aiJf&`61^D=LRdvbT at ChXlrP=){+QowGCQ{2nW^Tdor{L&@<Ofz=EM at g9NcV
zckb|GVV`WYEUjXT%4ZBP^Y9Q#NJw<__C9iVuj-kr$2OuRtHqcNlEX`jHw|aEl-R0(
z>To-i8-D$Q1L*iXx=zWYmW1ajs^vHb?M`_o$m{0ozqkve&er<bbeNYr<ISS1uV2x(
z2S0lBXxgIm7RCv#ygDR<z2moU-|{pRh3z{bM8{~jo(!;IWn%*YD9gOYB%-;bD4h_7
z+FmoG>x_^s)wQ0CkiEDoEbJE-M+H((He<kOZ?W@}uz44PP}2g-m9aq#wW247YTG%~
zVkC<-KG=n{f${=;y{wE9FfDwEuATQFb^Ha=&lT|oa2wWJ70Pt^G$*ukG|+eC(KfE=
zNeU<RT3J~&0Ksav at kfY=m{@K2LKzxCIKFmu=j<QLex(X$1b~aaj_ABO9tcDc2`MSC
z{a}_1<wN)R$9zt1X{iVe5pE$Y>5k=N<LA#~&fn$;nQV at ijq+GC5w`umuDa)F7z((H
z(~|&Qk&%&sb?erxPeP{evvUR$AVc<a9}GL&Oj||AY3PLAS5K;pmX`Lx!-rVo6BCr#
z6YeGz6G1?xCKBU5j2W=nV4$H9pBM$N>1prZZ$$O(- at hLY!MnHlZt1uEyP*Cu5aHV)
zeKYg(XJ*b{B#$zRC`KzO{?Lw!-i}q)cj&#F1?m;GdaC44*8BIXS-H787i8$k&^i`K
zD=r?Mhc91p2Rx}sb?5O74Yqoe$^YZNz{h$*qc1_*896!lfZ~J<y)lrWCsFb7 at p01A
z({pliI*k4Y+*Fp&aIoTw(y?GDpG++whNQMNHFtOSrnny)&iAcn>T2!Jk2b?0QEF=H
z*V=`KUSoMLN(wqUJ6|vdJn at VK92v-@jNDv8hvmM&$Jx(cmBSmPS<i~$a%)%bj9Ait
zLRT21E at 3x`aM5=e+u8k^uz%xTTemix^SoNrdc3qSBg5a4;GL!EBSI4R^@=%N=k!ce
zTwL4_jQQ^w8O;ZaG3r~`KO7qUaNKgW@^yur)`r(V#KcfifU)2(68Z+P9J at vwo5)5;
zUVZkOJw3PCsUNjJ9YKo0C2g<))ULSG+6{V=pmx(gZ$uxesC1v()?Xe~Yieo=?M_D6
z%?oRx&t=r>RoTYKQ1ThkRl6($8k(AiTAG@*$uTkeZ454xMV@`h5 at I|!!Oe3G!4#Yz
z(S%&K^s{DDv5jD42Dbvl>AIvT1|C7qvMiEsL~p)&{hG7p2LJ{lKx=0zy)VzK-D{`G
zn+n<_`AyLWWj>jh2xsgMiHThp!WgxNwr=ymoYUOAyq?zu)myq!rfp#(N=iyL+P|u+
zs*Hpaei$`kX05BAqA$z!<Fh0_98hOX#GPeZex1?|a_al{u7ykjK-dR={ra&wW|=lM
zJTlTcRLE{e%d_W7SLowM#|)57zv;uTkr8w6#b^aXAHdGH at 6Zs1u;KeR`T_xK>Z)VE
zrz!2r*SBni9lQTY?=zgSxw-jIy-$7njvx(@LYnv4>N%s^V)Uql<l^qQPINoQJX4N3
zr*LFB4iu|=OUxh?0|EtX^xv_c<>BGs&Chl+zMW=r=H^-1 at B~sLHZq*e+HJ|-@?1SV
zHyIh_&CPGAa<o<ujR0zYa&=sPUE+0q)H?i(cfc>+HIkPEP8GvT6}m7N#N at r%Oe*6!
zJZD##LJKN_-OlU-b<Qnw$eXHV>!Qc4XaAEb2fd{06MKB}pl0K%on}%dFQ65WB|5yR
zg<nhXchv%;ThYr6O6~61gh5HYZHHPifcL4urakw2owRaCtSyqq-n7j%2leMGug}LL
zMCLxQ3MaRpWUV_V^}cToBIWU3E7Q$C6PxjLm;(BZ{m_&4FKv7gD`3qs4=!EUSg)|@
zeDn1xe%J0a5z3V5 at Y)O+gv+x5dKJ61qlIyDhwRkrvh(M5T1q=zJ;TVzh#=jREmWby
zTZ@)P>J>Iqx68iL?MHO$L^oqJ%{QTM-$Q!twx+$v*Q!X8JU=^oqMhwp$B(sxfCSD1
z_Gy-La&sRd)6Q$ZYUP$~w^Ac7#?XDRT-E;i{qG=c=nrOG7s8PsO)Ds=0mcnXP34zP
zOd%Z03JaGemu*Hjr>3T?Y at E|>y#a_djc)ta6`Khd76c4?)}MQL#GEBW6>8pe%Oar$
zeVAfBQNAg}`nG!Ksh%ETXzS**B!*F~K$>WZ^=R|b6;^1g-?;AaJ`LGex%I at +p9qHg
ziDpRuQ-Jp9V}7RATetN)aZ#OSiLMXW|HcsC6s4DN-I*OKn8?@4oyTX)F#iVgbPa}m
zep2;4KVS1Ag-OzNXBFLSckZM|0iY$I;n#~@A|HsO=H`q^qL|MYn66K}EiIQ73MM?<
z-6dm%yyx|$T;%#hW$dS>$HszFQyD9c08BDn?ne4}A`3=)kpDZ3A`U8OHNz%Mo(-mm
zCwX<Upq`-0QE_W=eQoU{m2eOC4ywhN>0P&oO;Ga}*XU_8;S at I@|I<Ef3lU<+7d1r!
z54j14-&orWIXgeEm2nC=&8w(zF`Fp2_VH7B+5AS7$8ZJL?mn5DXJ6>PM at 6-bt&NS=
zJ(dCBnXBQ6iEdJ1QVM?4K%hx{ltE?1RkXCs9v;{2aY+)jzBfHIRMPI`0jk#EwgS%V
z06xhvm;To24;@~sSFhf_{sX?Y9Qvx(?zJVjpHvd&r23UFzR1rXt3?5ki7Tj?o|0`Y
zGMUII at wTPbwa?F@`8}}!*?=2$Ccq~;I=YXENOi;=1F?G*Kc%WFzI<uS*HA+I27a!&
z at gzF|3E0Y%G%weju$CR5T?IGz)8t}5^;+aC>*?{v8D<P{xfBJQnqOaC8mOtM>FHNg
zl$CL(AU;5z>T`lK{@pX7V{hd3^pf<Nfq>#WKi-Zni2gAPMsv0IJ+UcQW$PS(^;q0V
zvuc_>T~52s1^ShyJ{)EDH*DgrGgKLlDsC_9#<fd&opHyquhL8L$JiUJewphFr2o+C
zzdXQY)PRgob&Bl$_*i)}W1z!@Bj^D at _9qV?`p<JAjLY?LeYeBTuV?IS?zdZ%a7Rc3
zi^~B~*$Mwb)?%KwgJwsV3G&5kaR0`J{&#pW;Wx$VmhHs*s^8j_=?;vKe;>XOCA}tw
ztgNk_s{7mL>~zo<d<_N9x-Q!P>z^`=XJ+?g>vzQT^mK%;dvhj8X<A)9J+RB#w;y4A
zQbMG0ruSosZ>Lvf4{E=Dy?#_xbuaY;gE7z|OeAn7_)`{NZeeS4tjwQ36I67J54Nhe
zZQeC`u_)&*W1f87Uzhaq@(MZj5|8XnN8gVJHdgFe25HF{uLmjK$ndZoK2O-u*3^Xk
z(Z-7kn1quf7YX+0z51GRDUYL#ceNhJdsf2Apa4jU%X&Hls<Qb%C<p=c^#1tx_+mkM
z$!7`ogB4i81gP{MQ<)R+<IPnzoU7*(wUyh=qMLz<peFWGgK8XChzo<M!v<;prlGSC
z?8Nfrhc}{0CW4h~tE=`&W#%PgxMFYqG(={H3j^DvNZ?9{OspM=gmS<kr*C4ctghye
zW~%qd07m<JY;3iBC$)$3X%_mLaP_IhuN5%auLUUD1&4i0mXr11xSP*<WO6dEG7gup
z77IqQ;W+hsbTnI|?OwZ01&`qy?R!+Apo#{9Dq17ZB_d2iM3EZM_62P)9=n{V?X+i;
zNl`LGeXmW$!@^OINrl4E>Ps6ws_wCW7qQg at UVH`$PnVu~ua13aWn-*l`lj*03-mKo
zZ9w5&SX4~pR9BxrAKj!dfIU4kba6S(cCI$~uG-Wj5MZ7sQh%RPL0py{K0pNRn~gs{
zz;~_z0gxzr)`IB*D6sOVb!}}e;{=bF`YH{td%%ydTZiw2r|o?^Ufde$u&Gc%%G$nq
zH4g><0ISii=C?KxO`?qdB9x$NbBhGjuCW?72PZ3!PRv%|l{qMS;fNmZ)--=p#6u>}
zoyO>fsus+w(RDtwa(__Z_(lKaL_>pYxM5+u$19pp8sHWZ7>XJpg5U5gp<MWw3~Jcf
zu^U<)%087?dHNa9scq=#c>E)#{~Ef8$-O-*c;oBn<fMr+&P_$%9>L&1h>`X3kMhLF
zBlCgaZk;axv!_PQ>1c^?S1mtlYin2cUKvLhfg0dmJ>@<9R at kD17EtEptLu&q)Pz#2
zO$Dj#M0t3&aXTKE0~gkTjk3DUK3c!FwH0^oEBZ3k`DR5VY*2tok}9;-SdeDYn`uFT
zUO9u*ztL{eq)1$D;yx8G2qR*Ws9-OK57+X=wpCkOTbG_QvW}}D-m1y$F5cYBN^nv>
z|FP0$o;SMyCHxUHqdPo4R;izRoN}*B<}+i_=hs$Nc7#~AZ15~E9mfS>tsQ$`S6PG#
zq|ZK7UTd(G at Wi=#s`Ta1*N5*8LUCq5nOsM$)Vv*@on at vcfdR5OvDSrH{8Q`UVxV)s
z6Z5}$b~kJi<Vk`ao}DRxs4%RvWj+ItLX at ET_3!Qk=yu>P1%Buw_63|ifzJSk{qn>4
z0}c*A<xngH2AMfl<%_S@>guF<TDimaq)gHm_Ry3G3!u--S|8Td)}Ha2bCsDFz3bL#
zY{f|5n1C{;;Xo at rgO%#$d)d|=Qq6cVX05HSPbr6jk3;H_S>?Q<Aj2!gW%c1t34FIZ
zOYbJAhPZI?ynOxooKyWg%n*Gdv~l)P?v`khwcYyf{GjFmPAWR!-qb}!7iNNd47+!#
z&E at 5y@Xp?j%VnACQ)A{7g0Ep=VT+*xb>j8kzH!~>;o-RhcKD8zltK1 at m9Pk1c;ApW
zAWUYWN#PbHW9VD1MZoVc;1x377p~fQ0%|jWWftV+>HCbC$4d!5t?ugTIy5ja7_^MF
z($v*W6tbPJNx!(bNCw_>%-2dP7_b_=OQ$BUtgMVn#?8Mb3RJh1Z~|^nP!KF!e!<Ac
zr~XTJcKZ`e%@Il-b at RzOuk-1UkdXTrc(&Gn9}8NKizGA`FsF;KwEQ^!y6cZ+M$bwP
zT|NAo-#iz^k0d4`VVo&4Rd@~=?7y(LFDeJJ&lSjzRyQ}d)_W-hTx at I^IvE2uvNAIl
z at mc)tos~{(%ExpL3rR{&3W<yV83U?q0OYv+#mVlGX?sLxzCDw%y7cK{9~h{3aBxu5
zPUhzm^eHO%(5y$&%MN`<cZp>`KM<DOeZ9SWeLX$Ak5yE7249u6-j2P^)*+yPzD3?l
z*a?VQCt at O^(ljZL@)DqX7doQZ7{KN}bueMzF<o`MS6IReq at p>NSzg#-h3q-CN)3k{
zD@!^hRNhs(xw6tQkfD$jQEfX at HxsniatCOmgKmL(Pm7l?SHo&*YH07J*nE}G;FkY*
z;SCV*1<0}D+}w49m)B(usm#R>{zS`+DaRo-YCeN1M<)x5zeErXJ^dRH_s3rW(S5!}
z&4_`%7f>7N<#Y;^lqDq<mEpIcRg3J*Ow|y_`eZ9Jv&<nQL6L)lgJCi7+L)@Ykp7VI
zo9SvNh==F)?X3?lJz6QXWkHD+nc at o2q0s3!QPD^?O2;AF#MyC6C<m&7n+Vr`)ENZm
z&N~=m<=s!5JpivP4V^|bsbgbfd;9zQ3xB<;jrrpUL6ncs_X3nrGr#waN0>3u(cPOG
z8PRlF`SnG8#_M?MUful}F`$?8bc)hF=b8fJsi>&<71h<#_ycyTRxCvT%38X6c;w!^
zdGob2V0#%r1W#Xo_A^6o82Wxkq+iQSFVK at _3M}$aV6aA8NJ7lxZ)5{^A?J?L5%kHy
zM-RAxgTwycwCjuIe%PQG5I#1QbMFa(t#LQNY^v(&0uSjgw?K;5RabjlcgAoY+m01y
zRRLbua&8#RiGC37Y`w7X6DZRk{QUfGy(+uMIp{^eO2^1(13=)O<H^n(S`D}h563)C
z_1x=3c7H5#yvM*_d+=<m`6>y{YTTt`??6s)gY1&x10koDws!Zlq+-9+ at uXC>^X7+Y
z9pT5|)%9I7m;Wb_A_6>ITsj|;larU$g-oKG=V$<mo-Pil%S_b){4))f7JizeVRE=O
zvX8zHZhm at tnx+miG2Ah&snMc at SX@TK^9*RS+S at m7sq>rSL||b<WPDgZ)V^;1`UOWH
zD&>r6UtV4Y)t^soOS4aq0*}<4jT9Qz7&ZFw5E2mZKhM!vEk18!D;b;o{pZg~<IL4j
z1p}vg>PHVPyJX-7=ilLC)2`MpUX0zP3%7Wic}}4Oz!~64?eWfBGgJNHZ#@OSyTX7x
z&XP;ZqPXxISRhK_%}7S6kcbG99MkQ|pZnTCL-~zb`sjnGd0tqv*Y%o1J at rBW_*Q#u
z7C!*>=HIdNix)qw0SyjXaMDPBmeZ1W_ci~E8rR)Dr5FxAGPxaIC2F9g3Ttb<Mz1et
zuD#%43E==LiC}mGVi+~Ihklz08~3M5J<EuUj*gC~-l|&XSLdwG%i}#1t3U0{a#-#&
zC>UD(d-i+11^vh?5D{0qd))%IkwND|(B~gNo;Y;#Rq*l%2wWF~oD6pKF=?Hho!te5
z%(}4lXxzp}MITJ3DhI<O%fb}LmwojH&`BPz?e;GZgHkV=nXYEFsPw8FUv?IocgLwG
z2rnfrE-tF3-RtQq0`wRN?rk6>3H9#XyQdnx6)6)E8d`?F=Q(6=Z%;G$Z8*=3H=+|p
zdU_KI6BV{T{iEw><5bgO9mg0KhF|l6`c0McnAEb+G$|P)B9+`}ur^H#(YPI}1EOmF
zQ7Dx`T1tu+KI_Fce}J!6ZlG>H0BnNcSBGv$IWCv}S7l8$70uwUMM)$0Yf at z7>PjQ3
zXJ#W;KK8~xTRqKtc|;pIMaSdP93K~Fk!MitjDB3No;-(?th2LIQAOqc at wxir$M1FX
z-z#VN>E<6*rnQ>98+j$Q-EC6TU?!|o*aepxo|!=!Xlj-nF2y6`yzOqr7hS~vz>q_{
zfaoB_sW(m=e}q<-z0v3Pu4w(=-Px)16U0wp;(eE`?~3|(nz<vtRvkNfdIJ7?-cMJT
z4ivQZsGZS2N-bb}!J7Yjz)*a9Z2pTGP{c`ziRIGg8zr`n)=`<2l{y~FDK67GT3XJv
z%2@>6Yxy}jIUQYHauyaGpc3 at e!Z--<ec)t3+q at 47>aQgQ+!>IZOzm6}4iNv&^DV(H
zhTf-3q_t{<%ffNj<Px&p#IxDL*5UGON1GFzhxpxdcArKIkv`X&+6ITM#l^*xz&nhi
zaReN(%7Ggj8xEX=DUUhN<w?0q#=_pc!yqCe`dnXsJ?Wn)*ZQjLh~b{&%2IZkx4UJj
z{u}Kajd`FduIAGph1w7=u?J^nvadMaGcz}5;o%`18yizp3%|%ig6#%{Ve8?ee-Bl*
zW|jN(0allon0U3jmRnfoaCY#rwN?0M*iwA}5gdKzz-y*wX_$b&gaKu}x-hZn9HX2y
zcs3@*jebN3IK#$<AN_R6&}!7j8<(Lx6K_QSdknQb+cM{*%St45vc_%yIZ(;>89q=)
zm3p4;ts+mmw6{8YdTIo3v}@;%boBQtcza8u4{MU?FDWWec<AfV>+Al8h3$awc3`yv
zH|e1tWxYHc6=RU`p4_Bu)o<HVPsi<$hmf%^CuU|Mfp`e0RCxRB*|Wa;FTQCAmAws2
zDxy#V1gxsMT1b-qfb{k7 at 89K@{XSRwxpVp)SWs7Yx6{no?~31#QzhMK{VrSphkNhm
zhlzgL74V>yr4GB2iOprNZ$EV8DpV5zm`XVO?I|BM^w`Ybeb8jid);z$zn>K0c*{4^
zY+`$+o(T)<e|kCZZ?@kyj)xjSzeUl<Dz&~*T14qEg2b%VVej#^O2nuctHh{Ms%n%{
zqgtB^YE`v0S~X%5tF(<3l%Pa-Zs&Q<^CvtxCpqVH^26to>)hA-{d%8V_x+?L-mr-9
z5}=f~(K)W=jSU at 7PigP~F$WJv04<+a3HG7oA5mV{Tq=zOCT3e7{Chz;x at n>EKU;=@
zjwR*h23vLf2-9SU>4;ii_r4z(c(A2%CjYwN8Gqp9C8Rv;`Uc=DR~hGhSj2!fYl7}y
z^H4~sAJW|XUylV at j!_Jw_Y_%KS#R0cB!MOL?#y2jX5~B}e}QxxOW<vNXbLh5Ha~Qw
z6oyjd&qjoY{sL|qgo%ha`q`o6s;$jbVvrpTXy>K<pT~?q?A<XKfWSezUta*hJf5g^
z#;AZ6*-!(Xn&QXTdyOT)RkTo;{txC$!$eCEM)IpvB95b{udnlD2TgvyFxU8%k0(2z
zlarGXwlU8WM(>e{P5z|g)`OLD<`_Tq*O-Xy9JcD_l`?8fz!McUHDMPQm!7W+L{t=k
zv_aY3Ev&ES0r6NPUtUFCeh3cUuYvM@!IR|2-r!ikB0W9Npe=m3FbbH(2Q=MaAZyXM
z;>rBH%U5pqdXctuq2bd^pPDYPeEbpvRCW%SSHvFjrS$QypFdwAHb0zdwDsv=wAYS`
zG)5-)cN7fAx at _4Q$Y&dn^2~+5u1auy2Y1qBO&zBTGc2hbz1In}6R8xbdgTfiz&J at s
z$$3H?dy=*ozkmQ?bd<*@HLLGe1BiUb-hjdbj at H_pIuo<6P5XRe$6Jxp)el5)>W+>g
z0F+aoaIP^kcFD$ndQep*0|;4HH3ydUE=f^JgdUer#kBdr3u~Wo>9?t!oluEkPTcf#
zLRGdqvk#NHa#US^^?ToA^76NeQ>lMl=-zLigp|-{o%wQ+&>^p&fNO4Uj?%Z*{HL<2
zD&i;z__bQt<OX1_KSL6kHh%FOqA%IF025~^dY&5^{`7uxOHLb8jHVmh*m}i0?~yns
zPBLGAcP!JfM7`iNOurMV`aCCxKqLw at C@(Z6J%a!lwt^@^Tzl}>cu!BXM at HV7!*L$r
zCgTXBaqRSOJ}%K at laUE8AJbk)e6)lhnCIn5=Du?FC_M~D7W5n6W_?+IfB%aV)!m8X
zQ0sJA7!2kz(;TqJ!^30C*Ru-B>bSc$+0)z0_CxNi5 at gLkg3NpihJ&ua#7PX#?m+73
zE-}>f?6=b;_lGHhpWD@?4LT)GMfY9OGhRB;@a`L&-#<J!rIFJhjZ^pag_juT3stQO
z1ST<c8bMkhg51daaf`9fI0z<52+=>=koTuws&H2?`dlBJo=z$$DTx~UA<v&2Z~|J+
zrlzKCH|OkY95iNu9W=>^iGAA07yI975>}G>nE{X^ItSUPaAZQpt+v!_nkG>Mx&25;
z)%~NOo{d0-Yy)>MFHIdCogOp9yu4X1Fn!z8FV9AqWS{)0Q(s?C*Ivazucf7x1$WlI
z9$j><i2c(P%X~gEVe?!}xVol4#Af60KqcB{i<gg2!`Ai%W!oy<qH^r0(z+4R0LX4}
zv9bEUCu~IW_gpGpSa3?u%#3#m;Z%+?hIrA{XhD6a^{ELWg$7~g{_dsI?F-$?ob=L0
zp-usUK+22iQRL00nV_7datAD44-Kdew$}%Gdr at G8Na~w9!yffPuCj?7HbVqGG}GA~
z7^5PYH?<gkw at na<k3dS=S4G7qcrmjJg&m|s9xhTLJ|~;S8r=znEwr}TCuwQXA=|$g
zTWqxcbDl^g654tDE?%sV4`Sv>L3Q52Eh!}u+(A+aA1sMUIe8Wp=AIzB!xS&7x@@kS
zi%UUktBOew3s=+(#O~B)qlKzvFjDghU6{a!%aFuqUxV_|#HlH(Nw;z7d!C*|CdgBm
zvEBLx9LS(t(E7B)EW-rLybEN2O=Kk|V9;G%^C_f)Y11$%PH)gNEVNAsL<0@!yRc9`
zX_-^F1ep)+9y<4UIeJ3PJv=<JZutMr%Em^UntSBT`&aUKEJt5K at B{aSRu1fyr~t?>
zhQ+Lt;k%Hne<t$H0eUA**0~iGi at US)s+^gJCuJZ%wj)BbZdB)opZ{<T65OUdZGJNF
zSYFQdHTmO1o36xhNC<Ng%BfoL3^SmD_<{nFd^=R7nR8bXUzWVf&6-SpINcxVC^sAj
zH9BP8;(M48E%{{fUTttO+u(0O)lhC4&HGVJoMvF)Rhj0cLI>O9GP+G^2!=%j*?1;`
zTdYt5vQA&aq>(FQqzOzw3xz_dzgpFlaqhH@;vg9Es?zD-2tQEZ=jSg at k;SR&>9GK7
zjA^@iTUlG*dw at lR(xKv0Au38Y&jeBHURryh{y28{wQ*5xExdSG8NlA-<>N@~p0M?(
zWw-C)cDh{z_Z?lRVU3Ks2jAd_%Fogax`%WkSGqoH`nn$ewC9if)_21-$yfi7=QZ8a
z&h}*A$y_xj1<R2)+rp>3{<#o)U)?db%41mx&z*|T+*uSR^>5al%ynU>uyfVNl6$#%
zFw*jN8wvY<U>jfm>i4UK0Idg$>>@bJ+G at QqFWI}?y6+3Qdt)AT7J~ezc>Q|T8_bA5
ze|ZVLZfVSp<gde+)$!_8kiBbr4}qxFJAR78XJ-G&EJO#`-^6-rS4uLbg{S42#`^1P
zYir+M87UpPYX!_}Wo^wwUtj;#YyLD!dNGMba4%55Y<o2gkvbMqZPQeE#jRgFRP8ND
z2Jeh>6`ysL)kFMl4LSR&MN*as79PnqGOu at c1M3?aO0ug$4Tpjx+P<lCrjRAl at -irI
ziud&f{K->_FRuHF*2l^N5KSK-NmsV!q*8K=-H=d!C(PdDhg}%AYJs=@au~m$pa}+p
zvGk}6HFO>|fYi>EENMAcJaBPvP{*{w!<)i9Jw2zE%OY<c*g?O`dc3Haort(KWX#hi
zrdw=rX$4qwbJ)J0*7#fSiJroj4juh=(@TlxC~FUOOMcsCefz?`4?hVjTglTXUuQRL
zQO~VzXF^FsTP-dwDuw;oOrMhj%!v10>{96UYmo at Qg4=wJH?r99io8j{7BQa{s-B&-
zvu(|)_<$ZQGhJC)dh?@{a#_zFhzMet#YdUQezD9<U!q=7NvSL^FV8~j>P}Wy*+a;k
z=Q=*x at YSxCmKH@7m9T+hPj~mhmC^Eg*S_cYjOR<4l=FJ+72{IR?@6`o9b^}#4QR&2
z#f=OPb5U(Apc(*kteV~yj>Bbj5B#8xt~Woe=$0mKaO%yO<9nR7{)WK<zJFu{>B(?X
zX9b>YD!rNzsR1X-%gg)C&DY*vzJs1=HuW5 at G879wv>v)9uF8x2!`M-zgoGA};KCF0
z5L~9!l{QUx_QMckLfhNF`tBm~tHpy4b%sbtC>1I+%8AT6EuvEGPOgWEn=1TnC at 9cC
zqtR0h=$wqp)`4>aw$0qw$tH<3gxwd#zH|OZEX5{I;KlBi%NGrej8+B<P|cvEXf=$N
zmkAb&wenZ;mJH=PKrtm`yHIIq5i%Y at X^X%|0uKNDrkc4cUcFjYUS6Jt|1~Ebj=;&K
zQWzxdmoEmi7t-e>!bl)4EKN80?- at K8x8^TDN8e+n)oWtBy3qMZ3A?+7R`c}mARO$h
z4qMHyH>TzF`0WgbnoI46+YF_oJB*Hl{ywi9xK`C6lG*Fgn{ioB{~bn3s!vt7(>Cy?
zw8^37kejsX_~*|!qkKfT`PHH%g|Ps=%l at j#rfe50EU01JkF-FcX~%PH|B^95<eMY%
zjm3g<Gw?86P3HWQN{(n0lv$j7J9<RR- at lGE_9HsnsUw<Eiknq0rrSl2J(lAPhss+X
zWUw at Dv!>WK at z*1XtC2 at x=-F0FfWM8Go$qM#d)D5&0B%QDe7Qd!L@?7!=brWc93c=2
z$i&9i at a5I#g>BkfBDi+5Q2AmQZj)V08XlC1T>}L$mE;~787T%yxAc~z_zb+pdMF+V
zjWqU?D-*+QCKgIn(h`s2xU6fPVguJE3IbNgE`lm}d977(?{n{(ZM8h1CsNOU0_&Pe
zrK-Z=oTNqH!)A(ZlI6GEv&42iznJdsZdC*#4<C8hPx!3!&8cC|joMj!ZQqQGi)(#j
zV{f$Fd{M}+Z#T)CF<E)y$bkP^`)Lw-<4f~Q!a!gRjdFVTiJM^CqYgnwY$n<N%7o7B
z_HqT$Zrlr#S0G at Er&ScGj=`BHj|#~_<>1SD+N%oU!+*SF-_l}+<_-+ at O~=Spo(%$m
zsyrscw~4lvjXcllXbI$zt*l1LsoBf`>a80(_BZV-k-|-x7?+vZW;f~=shR2W24R1^
zs?0qc*?8&*lSum!N4B62IC%R|Iw`k_&KGx|Du*kt1|kV&Sq<@b-#5t;ADa#)H+Apo
z<o3_Yxl)TP8<|HPsdU6hgM$3&hx729iCHw&mG#<g8ackso4sscml at rDSHnJ}o8TSt
z#<yW_O31)5td>Qn?kTxiDTITsk(Nsy$(ZY0bHk!OK5*;_bQ>E_$#%wOlVe`hiayL~
z$p6-SJ}bJ&ueGuFUFp*Xdp~@k>`E$mM at BZ`^yF;nPJoy|!}wH0$4^sA8yagqHvX7b
zu#GF^>u%27>A~Ix_6fVpogGoE3j=2~v$z&fcjCy`<5E-p_T$8`65F)^nX=_CMvr$H
zCo0 at 6NmupQ#M>?|=N6BnpuhJjH2dn>?1rS9kKeCmiicmq$<fR*-Uu`ZNT6>k^jADl
zsB+J}AzPYLDHx>$?|ce17J@{T&WI&&s6ZgUr_X9a!Sz;pG_>Os<p1*efInguJS$_s
SGs6;na;>Ljq*;Y at i2gU_fGb%5

literal 0
Hc$@<O00001

diff --git a/test/miter-limit.c b/test/miter-limit.c
new file mode 100644
index 0000000..79cc61e
--- /dev/null
+++ b/test/miter-limit.c
@@ -0,0 +1,156 @@
+/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */
+/*
+ * Copyright © 2007 Chris Wilson
+ *
+ * Permission to use, copy, modify, distribute, and sell this software
+ * and its documentation for any purpose is hereby granted without
+ * fee, provided that the above copyright notice appear in all copies
+ * and that both that copyright notice and this permission notice
+ * appear in supporting documentation, and that the name of
+ * Chris Wilson not be used in advertising or publicity pertaining to
+ * distribution of the software without specific, written prior
+ * permission. Chris Wilson makes no representations about the
+ * suitability of this software for any purpose.  It is provided "as
+ * is" without express or implied warranty.
+ *
+ * CHRIS WILSON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL CHRIS WILSON BE LIABLE FOR ANY SPECIAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+ * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: Chris Wilson <chris at chris-wilson.co.uk>
+ */
+
+#include "cairo-test.h"
+
+static cairo_test_draw_function_t draw;
+
+cairo_test_t test = {
+    "miter-limit",
+    "Tests application of the miter limit to curves",
+    400, 400,
+    draw
+};
+
+
+static void
+draw_shape (cairo_t *cr)
+{
+    cairo_move_to (cr, -100, -100);
+
+    cairo_rel_curve_to (cr,
+	                95, 0,
+			95, -100,
+			100, -100);
+    cairo_rel_line_to (cr, 50, 100);
+    cairo_rel_line_to (cr, 50, 0);
+
+    cairo_rel_line_to (cr, 0, 50);
+    cairo_rel_line_to (cr, 100, 50);
+    cairo_rel_curve_to (cr,
+	                0, 5,
+			-100,  5,
+			-100, 100);
+
+    cairo_rel_curve_to (cr,
+	                -95, 0,
+			-95,  100,
+			-100, 100);
+    cairo_rel_curve_to (cr,
+	                -5, 0,
+			-5,   -100,
+			-100, -100);
+
+    cairo_rel_line_to (cr, 0, -50);
+    cairo_rel_line_to (cr, -100, -50);
+    cairo_rel_line_to (cr, 100, -50);
+    cairo_rel_line_to (cr, 0, -50);
+
+    cairo_close_path (cr);
+}
+
+static void
+draw_shape_ccw (cairo_t *cr)
+{
+    cairo_move_to (cr, -100, -100);
+
+    cairo_rel_line_to (cr, 0, 50);
+    cairo_rel_line_to (cr, -100, 50);
+    cairo_rel_line_to (cr, 100, 50);
+    cairo_rel_line_to (cr, 0, 50);
+
+    cairo_rel_curve_to (cr,
+	                95, 0,
+			95,   100,
+			100, 100);
+    cairo_rel_curve_to (cr,
+	                5, 0,
+			5,  -100,
+			100, -100);
+
+    cairo_rel_curve_to (cr,
+	                0, -95,
+			100,  -95,
+			100, -100);
+    cairo_rel_line_to (cr, -100, -50);
+    cairo_rel_line_to (cr, 0, -50);
+
+
+    cairo_rel_line_to (cr, -50, 0);
+    cairo_rel_line_to (cr, -50, -100);
+    cairo_rel_curve_to (cr,
+	                -5, 0,
+			-5, 100,
+			-100, 100);
+
+    cairo_close_path (cr);
+}
+
+static cairo_test_status_t
+draw (cairo_t *cr, int width, int height)
+{
+    cairo_set_line_width (cr, 20);
+    cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
+    cairo_set_miter_limit (cr, 1.414213563); /* 90.00001 degrees */
+
+    cairo_translate (cr, 200, 200);
+
+    cairo_set_source_rgb (cr, 1., 1., 1.);
+    cairo_save (cr); {
+	cairo_rotate (cr, 3.1415/4);
+	draw_shape (cr);
+	cairo_stroke (cr);
+    } cairo_restore (cr);
+
+    cairo_save (cr); {
+	cairo_scale (cr, .5, .5);
+	draw_shape (cr);
+	cairo_stroke (cr);
+    } cairo_restore (cr);
+
+    cairo_save (cr); {
+	cairo_set_source_rgba (cr, .1, .1, .1, .3);
+	cairo_save (cr); {
+	    cairo_scale (cr, .5, .5);
+	    draw_shape_ccw (cr);
+	} cairo_restore (cr);
+	cairo_save (cr); {
+	    cairo_rotate (cr, 3.1415/4);
+	    draw_shape (cr);
+	} cairo_restore (cr);
+	cairo_clip (cr);
+	cairo_paint (cr);
+    } cairo_restore (cr);
+
+    return CAIRO_TEST_SUCCESS;
+}
+
+int
+main (void)
+{
+    return cairo_test (&test);
+}
+
-- 
1.5.2.5


--kr14OxHsRwZHHqxS--


More information about the cairo mailing list