From fea89976835b837cd0537a330a004c8eb5babe4b Mon Sep 17 00:00:00 2001 From: aarne Date: Fri, 9 Dec 2005 10:46:59 +0000 Subject: [PATCH] doc on GF compiler --- doc/gf-compiler.dot | 67 ++++++++++++++++++++++++++++++++++++++++++++ doc/gf-compiler.png | Bin 0 -> 20889 bytes 2 files changed, 67 insertions(+) create mode 100644 doc/gf-compiler.dot create mode 100644 doc/gf-compiler.png diff --git a/doc/gf-compiler.dot b/doc/gf-compiler.dot new file mode 100644 index 000000000..2b2f3137a --- /dev/null +++ b/doc/gf-compiler.dot @@ -0,0 +1,67 @@ +digraph { + + gfe [label = "file.gfe", style = "solid", shape = "plaintext"]; + gfe -> gf1 [label = " MkConcrete", style = "dotted"]; + +gf1 [label = "file.gf", style = "solid", shape = "plaintext"]; +gf1 -> gf2 [label = " LexGF", style = "solid"]; + +gf2 [label = "token list", style = "solid", shape = "plaintext"]; +gf2 -> gf3 [label = " ParGF", style = "solid"]; + +gf3 [label = "source tree", style = "solid", shape = "plaintext"]; +gf3 -> gf4 [label = " SourceToGrammar", style = "solid"]; + + cf [label = "file.cf", style = "solid", shape = "plaintext"]; + cf -> gf4 [label = " CF.PPrCF", style = "dotted"]; + + ebnf [label = "file.ebnf", style = "solid", shape = "plaintext"]; + ebnf -> gf4 [label = " CF.EBNF", style = "dotted"]; + + +gf4 [label = "GF tree", style = "solid", shape = "plaintext"]; +gf4 -> gf5 [label = " Extend", style = "solid"]; + +gf5 [label = "inheritance-linked GF tree", style = "solid", shape = "plaintext"]; +gf5 -> gf6 [label = " Rename", style = "solid"]; + +gf6 [label = "name-resolved GF tree", style = "solid", shape = "plaintext"]; +gf6 -> gf7 [label = " CheckGrammar", style = "solid"]; + +gf7 [label = "type-annotated GF tree", style = "solid", shape = "plaintext"]; +gf7 -> gf8 [label = " Optimize", style = "solid"]; + +gf8 [label = "optimized GF tree", style = "solid", shape = "plaintext"]; +gf8 -> gf9 [label = " GrammarToCanon", style = "solid"]; + +gf9 [label = "GFC tree", style = "solid", shape = "plaintext"]; +gf9 -> gfc [label = " BackOpt", style = "solid"]; + +gfc [label = "optimized GFC tree", style = "solid", shape = "plaintext"]; +gfc -> gf11 [label = " PrintGFC", style = "solid"]; + +gf11 [label = "file.gfc", style = "solid", shape = "plaintext"]; + + + mcfg [label = "file.mcfg", style = "solid", shape = "plaintext"]; + gfc -> mcfg [label = " PrintGFC", style = "dotted"]; + + bnf [label = "file.cf", style = "solid", shape = "plaintext"]; + gfc -> bnf [label = " CF.PrLBNF", style = "dotted"]; + + happy [label = "file.y", style = "solid", shape = "plaintext"]; + gfc -> happy [label = " BNFC", style = "dotted"]; + + bison [label = "file.y", style = "solid", shape = "plaintext"]; + gfc -> bison [label = " BNFC", style = "dotted"]; + + cfg [label = "file.cfg", style = "solid", shape = "plaintext"]; + gfc -> cfg [label = " Conversions.GFC", style = "dotted"]; + + srg [label = "file.gsl", style = "solid", shape = "plaintext"]; + cfg -> srg [label = " Speech.SRG", style = "dotted"]; + + slf [label = "file.slf", style = "solid", shape = "plaintext"]; + cfg -> slf [label = " Speech.CFGToFiniteState", style = "dotted"]; + +} diff --git a/doc/gf-compiler.png b/doc/gf-compiler.png new file mode 100644 index 0000000000000000000000000000000000000000..2679f71c6ddad214f5d41300a605950904715114 GIT binary patch literal 20889 zcmeAS@N?(olHy`uVBq!ia0y~yU=CqmVBOEb%)r1f=Z%vH0|SFufKQ0)zyJTu&CUJ& z{q^FSZ}+zET5TnzvGe)4lKWv|@BeRF%)m5f+Tnh| zWv{H+g{Lq~6-}u8FU{aErM_C6;lXtWEr!GiTn-XTm;~5XGPF2S&Ye-alJ5p4`12Dt5)@t?eU_&+Bd#;v3?NT?e%n$r&`4HFnQ0==GwI(4D&ax4k%Sb#_YYdz?xW`RdU?XUhaxgHFEjRC*-NeY zb&_MI#nLrqkF!NiCo|mLyg20G@fW_YZo2;6zlY=C(HXbZ#lIT(`o1u{QNpvJde@)J z{W|^M4@x|Kd@q%;VyfO!sZYueKMBtG+I;xp>X21uma!k#;No*%AH z{F<`rd=R6J>-?+RDWs>HYdtvdMKg5%Ql^S7yVdyw==X1fB>z86V%X!n9~Ad;+e>@? z{r_cgev5SK)Y7Q8K~@dzU$n0p9I^0RyvW!4_L8D&JdviqgI2k%C}H4#8Kot?n*G?? zrA3BU{_5MR@U7S6_@Gwn6`I;x}lde%sm}> zeYJ#Rv$ikmi~0HGoTfP2<6IBjsC!SR2A|wL;oFKSO=V#-6?sq2kv_)T@b*QtR{Sij z_30}w{o0UMH089dwX{=@-3uF@;#J$yDyy8MgBQ2ly5K9#F#F>65YH(g|KDC%Qj`|q z7r|4xO-Xu^)P`Nwx+R$>=E!9^izjhDJ^gVT;|9rEZ_^!j9{f<7s%^F=YSzY^UW{rh zpS7I{Yvl^v1(KiZEjmd@>r9a7+-HVYFU-=Fo*h!AJ9T@v?s*=C9KYv5OViZP>-hvN z-FP|RcNK3a@8;9fvWnJunQqN?)oKggV7b>j_0)=0y(?Gw`%23mV+@iw?o;{jwDIEy z(cjl=yg2^u{tm_slCs{SU4Gkax@V>T|FqiMajN(XC&{F#g44pCCu`lv*n58Nv0H*$ z0yEe9gk5aOWKJ;tHPvf%$p6djn)xAD%Kz6GR8HiN%8o5PtUdkhDd88T6X$g6E!n1( zJL64UPo!b;+I&!uEDzc9n}J@bwf?HP**87T1JR%y_1Dw%fryOs5+;FV@hiXSu^pIQ zqH(n$q#$Dgm&1&_rMGqqFuVulzAs?Wl&Yy&@0A$#@CGq*TwWUT$5vEE5~S6CB?BLE z853kDS}y+WExPA(>Dd>{n;5^GeHX+k?epan?=jck;TztIazDr|n|?}lvd;#+wRV$M zvHgx($#5^deC3;*OUf(XG$%8}ZrmO6(Q>7nEc1)5xl1qUxjjFW@Tp*B$Ktu6X?AZ; zt-tDbkb%!Z9#JfQy_o6hezl2FrqOPRl-f$Ce@E?YeLt_<6I#DkY~=%k61A!8{+mr* zeLTeEvIuL?!NeCnTKkLCOaCrg9_+!|zR-N-qb##SM>75@NgQB&;iDB>UH5o~)`|^$ zYy}Kfle0E}62c~J-sMxSrq%Q^t$bkcMkn-xVb$cS+Q9$%`c4Ig&%T{>we`6yR>j3u zz*3gK^4&yfjrYxl$3FAFKCtjb*eXSPAwBuVdGaz{^Ogpsn%P?Xsx8o{nxy;YQbMFrS;;EshGOc;;9a|w}_GX=<`VzZOhi^gP+P&dDw zr>D=-+-mV8S?Q;kwg;5|9v5rA6kFC zSPKG(jwqy9U1q;BDf#^*hCQsHoHjp%+3(;+ko2#qS?`k=_IS1j@p`bfgR8f&ReQM^ zKj?X|D){t+MBSH#ul%ORbl^59tHpX9<=$G50?N#GOPMT)uRuYXkz)Fd-qervGS}~G zvNwoWdyD>gJb$r)-mNbS?@T|%{K2x?BXyeew|@J%`aw6BhCGW4XwbXixGG_Kw7+Mm zy_G|GP5i0_VN!dwuDX^qy!){)Bva&RQ2sgVX_t0ro@vkb zHqDrQEXsp*?&jMwR-Ji%RWU>^YN>6i-}{3zwET0Abc9^6w)U7Br70YeH)GGLUq5Uj zyw*rReYQF~`bc2Lp)B^YuNA4z(b#jot?3e6+O_iV9uZMu#(*UZ|e8Kbc<$YM#8-;20ag*%;Y2G}{z>1PM= zQDe8xdj(67qkf6*)jLY8wq9HB z$R}kT%~-j>yiajzd7@&dbnwkea1n4wamlBRrT%n^W;`)$dM_;_|uD6PMy!hAr`QM+E|DVEtI)I_} z!uk*fc2-h53@`mx-MFz^g(1H&gyGN^^{WlR1v$`&!(A(1S{%Y0ba3L!&{cc889tan zGwbE0A$ykcxr3tcWw2HQGvTH(w$$~N?Vxr1^`1JlE6aY~vG`PZ?gOXCSF3|;!h4IF z3orf?%z9n(r#D{ihfVsA4rY(kZ+Zt*^{y5Oukl{Zzhu=yv-8K}yuVhS`ylw&TlC%a z+jBP*cglIB+UtD}{&{D@tIu;DD({-Ewc=gf1|>VytIf`nV50l9LIch{wR$i&SdYi5 zpZ$|k#q2wtveQf&0xAs_%neOmug@zrXEu}1Z}H>%`^uKOG@oSE{aPM6>!ZlBfZ0!t zb8pO8*K<{K25;tzRFlXzaE50@hnl?cKvXG ziu9|Gng_Pjm;U)ZMe5yYBmJ^BSm9FC*8gKwh~ZVH z$?s~`NvQ2o3;nlCc9Yf5)z@DNoIYkzZ_4Jyxa{xi$M=_q-CDV6y_fOaLkidb?w)ym zPvAPAX)9xWmfV`X-fOCr+EearIZLAVPtbZl)6IX^zi6vqJ2(0K{(Ej}TI|j6r5kU1 zZatNLFJn62%3TjnZ?3=Pw$w{plYhgys8v=x-&a4pbt@oWA6<+#pBc zs?q$)1hM&irC*4uMMwG_-#}A|JRT2JKs#x^)jA& zXoKtb{E6rH7?%CF3Ho}tTwUu^&Qz&mH$U4P`*iH~m#1;rZm%Sw-iOW;4Y}pN`S{Dz z_ghv@4*tHruYP`MYW~ublSST&JXsp`)Ht5WI@V{&tG4%Ese6OJ7KT(lHeO+JBvM>gysP9Qar1I&;Fp&@4~P6f97TOm*)Dh2c2vP zx$q)*J31$@#UQ%?JHg4wVns+9pCAwCAqIe zwt9c;gqQ#HWRGYqX>$8s&be~mJnkBg@7tk_|Jz?mgw;N^`c}VL;qw1lr&aIMnB6^H{clg|+{iVi z?_76HK7QDuTlewlRi%paSM-`)G46Zy-{uUP-O~v{FJmOXc$*&DJtt_A`ih-a?5UsI zHqPJP_SI_FqIpYZCGR`l+I^&X*GiEF(QZ!Ld3rRn#Af~hes zmoEhu=jl4!Jax4uPWoS0$<(95g<{dka*K~9zWI4nH*ELU5^f4pt<_Y z{-8B0L(2hZt)UTyK$vgTT}y7h}}*(_@njR*Bt+qUb@E;#N)3gZ`pJD+4}!qw!Ulb)6&0l z^qNRUPw=DXuUA|vvS?q zQ@v9&@84XxOMi)!*!`!wuF09RMjy#w?l!tHLo4e-c+kz$Yc(${D!M)`E7UXJMB(+; zjZ65I&aQcPSy*!GG_9>`KL=!;nEYZ(NOWRo;JCp)#y8a~@~ zbJ0`A@E_5uG%vJ<mgOIsN@tvb{}@dK^C{`7}~XKELF@-qKIuudcneILDz=ynE}`X|EEOgnlyi zPrH)#{}pF%pzh}S=wg?ZPHP3P`7K^LVOsXenxAESbr-h&(>)#%+%w0?^xV3TU%{)y zUO26aOuaj=>#TZ#`>OVdVJr13)RgT@Gmoq9O^!Tmq8XHXDsV|uWT?x^{E#VnbHaCe zKk40m`GH1h@tW_ed{{Kz9=H5z_1pYtMt(@kjU`^3OCAQj6SJMLigni%E#5ChGn+o^ zZcm(LvQzu&TMzAZd6$GGU!MG<`Q}QB^^#k&4ttoEC2@IKFAsUUyYi{mRj!|clZyUd zKRzR#D`)e&gGVFSpB%gD9Ngnm`Q87gz_ARgsL4?~H?94=XTiDb|B<;b4KMsZX3<)& zYa4z4_3Wb6`6_3lb9J}8*siqJ|L?CXn^PyIUH=tR_x=2`gs0M~`#+hNm0jJNEXqjYOQ2He6dZsw~)V2CG>n)Zp0SnyGjy$WygPQ&D#CCVvRM+;fr}UIhR^p z<83-~@LlBgu-sBv{<3<7;w`hqtgmJ*eqFKUHuKEKcemQDz4gpW?)|$11t)G_OHJN- zvef3m*~W(pzOQv&y=_OI>^wD_!-`8^ZPPt1??5A%#aUhlroF#Y+3@9P#H^ZH>W_iNjndCm9t=53j@w{Pzp(LF~G zE`8;++Cq8Kz5RdvIqe>P2r6ALbwh}Kfw$i||2qfwZat(K@kx1mLHt^krN1Uh7iHBw zlY6&P)bHRV`CXmXS*mJR`S11#e-17W%=-0qZjb7xXPxi!KV)w&lwY5+O(>n@ZcmIYN+pCUt19xf577AQhUMYyEosTles^>>905A>_WShM!Ul@ zZ|>jQ{?B50$jrU3wtmr%awwk@zUt8T)nzWL=0ATDl$savo_Dpi+h046&>btD-o9Gd zV#Vljbw>8@GE@15=NN+4t}wdj*zE7HN_&Q9!+D2Q(hEdun1W)3!{5Y8S;%;l`X15x z!Lno*+sp^b6JD8a+2m!J%buSc!YTdrUTV`hhgIPmr)GUg%*i_Dv?X=E^ireWqTIij zR>nDkIt=fm`+{1vLN`>4a#b;}jB{|eU$=9iXDDZvp+t|uRqhoMV$q>mvE@G{=5pU_ zlX0_N?Ulb_?SYvNtHd{~){C2{wc_Gtn=_XTt8#mF5byn`N}E$=AAuE&zV-nIjo(vbk&TVlTP{1bvfVi zz|wJ*_=n5Q_gX`QxmT)vwK=@9xG7|P!tv)J{7WxwJ^cK+sD-%4SFXp>qKa|eOBWd~ z^q6`j=+^U7zJyuax>$5o6S;P!-V{5s?2FQ&* zEIxn1K}&K1mz0MpbC4tR$`l8!427vY9<01eCNZvD&=_K*AZjwfi)~308@MGxFU1w% zTDnnOFPN50TIlgKw?`}S@#J+sJh;C%D@^4H?GwoTS)#r2%-;;Lm30D3CM8Zuo}#6* zl7$W*q+xdj)e@huEL zr+ihvDa1%;Dc3rWP%3pM5%}K+70nD6O|`;wJA+4G`#ic-F)eu(#nvj zYmBb_Qe5J!^@Nipb@PSOzv*#(VF;?_3p&WPM2KN| z0%s6sL&ye}l`ID|Bbq{l6hw6#v^Wd6#1y8oc(8I$@M4N+WUd1}R+^`>os(6ZA|=_p$kTkzLPpf;7$7|K4q{v61Ji$T8R5ed6zy z?7OuVJl0qtz1ZtUN74SnkxMpt$G)*$>80^G=#cBG^q~3W?5V|aYVSE!{~7EETy@>3 zUC**RMEjlBRL*Zpw>%2{V81lT?8=-+GWIXZjoS4bS8+F0y)}=Co9=Zy^TJcT$NOhl zmYj@SVr2I>-C2rhX3YNJx4N+gZ`T-ADx_SVH^F)7#{OdGf_p0sbRO}N-rxjiu9=>N?Y0Prx zTeDW>`L~XYeBuTcJu4&WBvbc zx$3kkYKGWvE%z65gT0q#x0bCvwmqQoS%T_SlN&P^>j>@hx%)FTApB9B*VNm3#jBUD z>V_$P8twkZOY8k1uT`F%Vn?sEJ=+$t^kJss+bFHAS<_Y}J@Z;6cH3C7!sMK8sPxJh zucwbUHBFzk%1`u6pwqK$Aq#nCM_tGYoP5fkze+sFS7*trr0TX{_s3U)Ufx>y>3Y!G zrttq)CZuyd*XV9pA7pMB!u{%0L&m(!?T?FBwFhmz5pL=9eooY?FZ(aW&72yt(${F^ z>-0-Av`SCin$y;Mty=UMNMEr2+KVD4yz@#f6y`mCB`sQNSD<@!#!rJar?#CFta`2z z^fP4rf8oRhKvbgSwz>^+N)AUb)26q3vOE_7nl=|=fMg!e%R_-t6PxfH_U<)0s0S&v5KI-Ph zR<}-auocr7wS@?HoNx7+drKQ*9knEnP1Cxyr6BNql-Lc)C6f|0ukL8s+!SK8X33_W z4Su{qCkqxYy|k`pUC;J|uCuQ-efDeJqOKddMUnU5r)MGpb*xJ!B`SulNYIEj<_e?$l2+W()79u{)-nG7kNbt#FBj{|W{7iYIV|DNJRsVD+Bh#jvDF)kBrR@1W2UA%>L+ zoI#!q!5bJ>syJvxG(gL1!2+(d30^Eqnk1J9F)mMFTj}DUHN#O$vH;#ZAa{+!FOkLX zWp`FH)JZS-#q)U4-r6Jj{}07!uby&QbH#SURV}?1-&ZSKU4CbB)&}2I3)XnbFMGq8 z%wq19x=mNEMt;e!De6mt%%+?d5Epcss&%KEubp+J-P8P)C0`!T+TA4}vOn)*@tgpy z$GINL3$MK8I%h5V>43-5Q@PE7hWUKAB2B-Za^hN>G~*lV)0m3~te3~|%?a9cQ!4qc z%w_H8vqLO@HEB&<_xsX`(>uFu!hRn9Xt6Lv(M`T2WTmd>)!VBo{o_=O_r!H9xNMkv zc8k9INj=T!)pqpNAE50#@D9KiwVk z{j}T4=cNl@ok)MT>1NE{+xup0^T`VKnrj|;&|>DxC=J=O8(#eD{cAhFUOH-f{aLLw zT$@ikR;ss;V_f$9g+aHMO;S%)I@qUsbwN(u#w4y#-K?OWFD>5( zty+C(%Z+&tuN<`88j@;JviNs+Ra~9quD8G|B4y)tNa`XQ_S(tiaOej1_k4$Kp~_G87r=bvwA>N`bp>mAFKQ+)sN>BO+R z;<>e3rp|Y@d@Z?h%349Dpua*M zs?OUE9m(7>Wmo-qkEPKp+Y>K7xUDdiCsIWG?2f7Sxjb6e-YwXyRbTaV%KD(0FD}WM zZp)eZAeT$N>9gO{y=t{fejHpe13Z{zc<#Etm|Sy+QOe3It8zD8WR?9qrFGpei%{v! zI#cz7o68LC7bbtXHEYl5XKi{*-pbfR2c|xs{oJDNpe4D^J+SOf=rQk=iFkc$Xcdd2TjjTqUvmyNoQ+c*7jSBndsU^$3Zfo*NPU-fb#UVRo zjeJioSifY`^ypxPG~V4TD^nu+R~iMc{a&^)Hhfv+p|nIhGr8}2e{`>kaIDCjkk5A0ezqG08oo?F z{yd~?>81HWTOB;Es(Pq8ue|Fxb(#7U!{F6l&9vT5^^`Sxy_c)>+xl&RppKr|${dr- z9Vv&LS4Jr;c_p-DQsSDsQIXlF@67AJc-^(YaN2S&EjRH`yX);{?2%B`SXy&8_msAu z+Sbg}=;uGI*8ff4y7aiif9b~#=?YVMOeCq^iF;N2=*&IWMmdL7=N+{o8bg>Ki0C+K zF;3u`2CGk)mVg@cjD821mP}$;nZO9GPastWQcW_6aXG9T3Cc#~u9VC2{&J7C!Pa5b z+YhJZ*IhWJ^>mBup58#!9G9K)PkVx9<_hidyJohsY17XQC#ykY0+$aRZS=EP7;-Rg z(uLlX^p#V1O#|*3dx>tzDO@0aPCYch$^OzNzZYSfe6?i%?s(RwHnpH|f%G}`P^p&| z=}GIJIqrOryXu;mxzw#l)AFOBw#mUIkM)-Ai;nixw3x1RttIL};cC@KQ$PD^i5_0W z5~?Np?9r8=7RztDbP9CNsfXs;*PJO0<2|XDUNX<*LsjU{+*Lormi~+S;&}Y%sRf%n z&AvWgWt@D#@TTTOp%uO%H$uhNdx(b2=w2NB=+-Q;--|$|Xoa4rk}%Ixjdc1uXIJLY zu9`J6@#|g$-SjP49CErrS1@)?uI|+v4?q7@zy9^h`bga+UfmlyY9qxg#L}l`6|9u1 zHqKqTD=vH2?8B_J!K(^+rr6A!Gn09nOU#^Nsb_&9S-a1yot70;-BTMYW+AkEs@4*# z)wibg*1cLd^VXat6N7hXUd=eQXB)>2p^e!qudIq()iqOlWmL}jmIn(h*M_V#G~AaP z`TDkiT1rs(TfguAQ|HCXsa;)hxiU&d%iE5N z8czB4*{1B){5CJO7*Er4=T~Yj)J(WJOUScXUAAOS^!{INu5yoPX;+3DSWOC@anU?P^*>cSN>->mkpNhQA)=hB_IJdp!Si{1ctu8%X zX05aLYP|oaDbF^!sbaI%x%%3>SCitWu=XA0TsmvT*0Oht7*7<$tt^?l(M@Z@vn4?< zzkLv0=`d@um*}$nX{-8^8Cfh>h6p#Bi#yDj?9HmcPt+Pja5q+!x!!?kfJa;~n({~k zKNpsK(ps3$8u)H!Z9&NdueQKd39%mDOAozTagw{*c|r8=2QL(+@+=Mso7!(s*T?ev z>!$;Kpn)1K+2eil`_t^iM3mPBgX*8$5SiVzYP%FGW|wTTk`#-5^-Oa9zjCej+-^rN zIiLBxruf{kEsN%cKC2Te5SifBrWKm=ch8DR5f>$MgCD1U4xG>5CQ*AK@M){`_n&v{ z&&;n%RF#ofGU=h$sx4tLUTjyVRuyavcpP=<#L|07D;EB}-pzMOVJeS!Q0tmAFM{?c zhel61m-K1nfszLw9knEv8D8BHX|hu9=KiId%(jNj(>xRpYRa4bHup;XKk3x;hiI`O9*dV851P8}Q9{YvpN7k<>^xKtuQk`o$y+z)>|UqjL$NDg_00D^ zIQ83^mH!z)a^?SXzWAk{?AdB(zxLAq)7_iIZr!R+stZ_pMIff9OYZ@HLx|Cxs`Nvj zl#W_Dq71?9cP#q;|5(h?!~jWoNGGh(sw+Mn>iu2AInS=tbj6YR>RNABb%!tE%KDk^Li1ElxfdmtXx^K+O1GFEbS1+A) zXYI!4qCW&Dta_QCKK;%8pqn=PpT9Nw*K0U+Zus|iFSA*{a7(ya?_AITO2IL6tye7%qE=1%a3x-6 zqqz15X@$^Z+RwAHAD?DkeK6wn=Pz^r#m7zAdg0nX;m^%lOWPhKRaT^iY|-p&6?=Nu z{^{X_Ac6fB6NLV)U%z|Vjn7?>KDPYml(V=(oNh||F=2BC}d>_&*yayay_h@KKm`btEL;e<=~2n zy_RfJi>I(;+n={y9^=7#^@`w``N}g)zXWM-c{Bc`r=YhFI3S+soNhduP(~l?srppC^cAl)Y)8wt}?s~_M(V`6@=NBGRTN$+U(!rxEx0~1fl9(&qv|Z8t!nswK ztYz#Uswi9yz7e{8orma^-ZD-8ok5$$_HH}&TI=x_&UD6=^OD|t`1$AaxvF2^S2XR_ z4UK9m{4#Y{@8##=r@5<}Li`PT7df4=-M4e;uAF+cm2H>eQty2EdG*twc?ws9O={oR z{7x53Ue(zeQupP8v0{bUgjbq1br)twdQ46KuXlU?(vZdN^B!Kg>9FeghR4OLriQF! zl%B1%H|NB%ckzbj{O8}-)_%hiWPALFn`?*m%1bM>wkI6i`aJaFj0;zSZfRe(d#Iyu zb@LR^D#GSM!z$zVTd$cW_iVNMQDwusa}n2P^*OAh6^uCgVv;|2O9#ayAV!naMse!L z+v3bs3@cMKf+Xb^2c6ngAgiz>`SUdYgH!&6J$$emR2&+Z)w7A7?N!+3DcV)$xN>XF zcBO-ij#`q_f_T+dNjs*k%(0buqZP3sT9j`echJcVld?Lt|H%k?X;Jp)&n8#zx3|-l zHm?UYzP5zu={A2}SMp&`(W&dnFFPbbtyjyK4`we@N{w`^w);PH6a$TFPu*x1ot*pj zh2_+*AD_-RpL^v_-_pEAo_gR`YvxMuII!nbO+VgKq9;pUKHjO+t9^HGYe?Cb0QJ2S zUWGeoNs8%)UMQ5&ZoR_9o4X=q@oN87vqBX8GeV{(xvZKGX_Y>Y-M}3_DWufks)=^; z`l>rhS3wm+%$a{r`Q=ZSRcE9oZ&=zJb^c#(P~?(dk`uhzriLsm`EZPJvi{jH4PnvJ zsDdiLQ2W=P9~CMw*D)@c^zczHSM0UVYv%o&51JZz^(NkOQ`O=_&z_ySc}Lsi*|Fcg z1r`&$+P=M;A9`)orH7XMVqTj*_Q+eK(-+l4*uMFxu za{g?=M`!m7H!?Se812yxJ+a>Oquks4#t@?m?PSeLt~%doTrJL8#jw(jePse`5NAU$ zXwK0=E20THM8P=$Jm+Wuo^u2jXy73VA;y)U@$3VdGaR)9Cvc@r@M4<-pVFpe6CdN3 zd#nxX99GTN_Y2FEc)}~8$>QJI9JYVE%Dg$m z@utlEC$WmRHl2TYaO&QwI~R)@@3XAbn_hv$ zge>2H_5WL7P25{o3}$XCfAw$gWNw+Z&E8L;?c9s7b}loloofPa=f3GE3wx?J2i(rx z=(#FnWl2Hdt2e&$Rj1EN&+zn}Ur^$w7do$o!>n_1*3OHSehVcYZRQ6Lfmc2}R=bbI zfBr71kVof*Ma!Qm zkla9?Grc~?b_)IQT6L#lW~z7T)qg!fyv0G6pNB2yy8rl2P_NaEld8YBhnSszU%9)d zKG`Sr`Az%H62WVY*V&#m)I4AF;CzAJO1=MuW}&Nh&y8BOtteb;zWmc=sS=N$pO0Ks zRTAN8YL=HR7S!um*%oYnSaM0$|B63XZ!GIebc&kBbua9lm*}Y%r(Ue;ELZ)PbSCBa z^APQoYUQ7O9*E>!{JYxIcfPo){o%hqE$hB7yBnVAn3=Wbl&Hhx{~wL4Q+nfX@6 zIcKi-k+Oa{!OeN?M9KRrRtPuwt}O1}QS!<@x-<^1V z#g+qjTFaBC5+OKk6%83$*yv`|H9|x9>rz85{c!GUf-xC{2B#xa5>V*ngR)Y`G6EPWrXw zn}*AgSF_&b_igapzW>GHk8x=~zW1B04!7E;d+F_^{qi!e|3A?D%TRky=wn`-&?}AR zWz!cPeAWB!UHhL6FTZEY+8$i@;&oh(Qb_#r9g_bmmaY`H+9mi&xO%x@){~Uww{`d4 zY2#gX>U_k}a~0?QUOeu5BSGxpnz@QwZq4V*J1BO(`24DnXZQEdpZmgwqdI(_@4X2Y zwQH?DmwU0lss3tSS>eK-@j&U#slMxVv)#IGnH*}p(R+8DP4AUwA6PdF|Bm^Vd(U+G zI%lSndn;!Zz2~1_Te6e8+GFd*?21dvm4Z%{uNAVEe5SMS{CEAIVfov<=642Ey;oDd z{^kH?pLTkc@h5)(S5};&HprZteZ8px~AmUB&~$2=08q_-V4zD`6<81)y{j$ zu~!i_52fT+&b;-isb+>&@70Aj{t4w<*x2<1&tIvwxm=0V+U`wm3^yK}E`&Z|>e zY1hrul2>jEc@^MSJ8xUY%?(-J+oryXI2&?5=%iSm-GjEA%3S_yUvK~Vy<30vj14#X zc=g{-3;ojI$El)!d(VZ4+@odU-wOP4?K3}D3YmntC#-(G>!tmsLZ9U>MgrTo)^1B! zyn0ur|0{)ht3AGafB*8a$80+5dUWO6PXcy-@Bb~|{VjR&b$9c<{?eiU*4LzVr(F6Q zziZAs-gOzzg)hhZl{d#6sqf-ln=*0#Jd3ThW+q{=#Vz(9qc_~V`~TVrrqzB9)Au`6 zPCsm|IxXA_>NPRsu6(WbXRFTam2&R8cJUZr|Nd_Cmv>j%+6`SI?k@dV zlso^UTh5=&MPIpY-VRr-UCQ^f`$YfkyuOL+pKSS^ChlwYHg$eZZO+>_snf!Pd~YpH zTeM|L;f_oHqE@+2T&I6{?h=(tyCY@)btoSArMLC;*4ksyA9+_g{d&f8Z&{UG(0=>B z>CN3MQ~jM8p0kRo*|U~Qjo;I&9U%X=9sSMAMQnj*V?QpD45 z<%efL z7Jm&7{O#(uYPPQ1J}0&BA4{b!XU}fCWLEyI_QKBYpjQoB!woN~uGc+#xG8V)x1$?1 zPg$KdJg&X6XRYkaE$>cmteARaYY4w`tk~D4?$w_PtFC*-#Z0hyFA&7`x%FCV$4a*K ztK}YVJvrU3GQ`WkHR|5HsvXmQ?J}RBfBnAeTT#Q6dGU=iH15a0th;WVyZo2j@u?e= ze#wMfm*_0GxpueW)QDTB&vqvVPwCbXx7=3oG$G@kNzoq$27#ZTa{)Ma-HAK0S|x1x zr}8D%dv9A$fBN~$x=Atd0`dYu?4X`y)TL7qS@CFI`uaXMRd^+P7b;f4KD*UJZ(Uw&TX+eJ#%e z&rC>f&EFc*{pVj_N#LC9FmX49y{A>Ki@R+7Ja6eI&4%;6t<=6<5BiU1<~e@%Glu-7n2HzxZ=s`?*Ibb( zcoZu1_CxVRy{_Ws-ykD}{>f4f#yh&L#C6=M9e@qGCS6J41>Pg*Eh00fB!^b>bIk+5wh8VUu-mXpD2{@x}IJ&bK#M>`?lWA zT^Tja-z7@?xte%T?VNiX=0(OI)rd7+-?lX5>)OsMA2QCxjuNwQ5RR+ z82#6;^v+Iyy>n67iDf}&^^dd0U%%A;&p%36czxxk?J?^=J)8b1@vBwr&D__s%eK$+ z^jcaw_eV`m-=zD#S<%UTmA9W=zq07``nxwp*7~?T+y3?#UvJcNtH8}QMwb??D3>_z zptJY%>PdczTZxbbv=`o?G{{Ht~F)0&@zwih{q3KPF-I%{TkR6?(O?$ z6*TMKUr=Y1dr|I$;6IsHttR$6%-CPwux&r^)?!=m?>{FG3)TsD?q{u>et!L(Z+^Me z)%yefW%peONxZtdrsiSayDNVG8QMzL&5l`It9SOJdw$(bev^>>%2(ae zn?m)QLp-+nZ?Zq*9{xsr&aL(560WXq3h~$)y=(s|_3N*#{SCM6TfE!0`=&zjnpaKl zmfreP_bx1vPeqi!G5*os+Z%qIzO?pd?8-6C}sgwVh^W6U9JngI9g(Tafw}WaID&@sL{XRKs^&E5S*=I}sI@(Rh`t1FuRcn8| z_g3F?x96VSKkJ8>=YN@ePtpAWciY!r`SG`^K6=ibW!sEFDWx1as|BkS7iyK-x)CYdi4(m%d;PMvc9 z`)7M&&$_Q#Ug59xG3m|B%jZ3}J}o`GO1;8c>toQHS(oQcOvv%GhV8|5M&c)R;!j1Ytv5G*Z}>M>|MtQis#CqEpJ91@>DA)jLCt&TexAJ3BkgC< zIit$GGb{UFzOTB;cT{)fo0^kycg26-w5`TwLTJsqeKi&5=bdpiIz7GU-jY-M%Wu^# z+5bA#TI4$D1dQTDgPqASdK1gSX8zouZ69pP>OD8-tDE?*LcL=v7bLx!yLv@Y_@XqU zqcgic$koreUtt%lktmmzmn7H2^0dn5|JKvrZt7ZDl}BsEPpf?R)nJ9iHT}6^B_X;q zf`6v%H8!Z7;_b2Beo4-!L%K#Q&5QL8Rok4Zw41LRy~=v#?-|-J+0(aW{?d=x)}McI zi75(g%`sdOwzq|kT zGT%8^E&m5aS z3eS)JtZ`k{eYxzV^u5`?CzkvEZ$16(qpp=%z4z1b>uRR2E*E#m9PskodM;IWYOMEG zji!oo-%ba`&MEVl`sJ|S<+7Li3vSx&b3OiybLFF~9rN6FU)!GWRQsi^+_R#KK{G?= z?BsZ4sekUdb0{k1-3n}7brjg`xOhtK-4GJ4%1qZ#^(FMjyua&&IY zwV<;zr`UEY?K$2&NBsHcrSI;)+7g_)<@Ve=?QpB|R|ef)w3;qHNr^@L z^kpUSuLiyTUqy6Qm_*b*{$zVbRsPD;h*)W3$;Vri_8fowdG@(<9@Vpt&$L?w-c9|b zAG?h||Ki2Ur~dY*k|X4M4C@ZxykyUNcMZqxx~+XP^RMOK()%l|nHTT9>)Fx$%ca%_ z-zeO+rCBMb{ofnKtM6Wh*ZmT+J=h(z(#T(GPR;Qb9y>f3f((^Dl%KJ=-+A`p6e!x`Th~W8ED& z1=BbGdwFcRg6N&*T_4qAEOwmT-@p1;rnJ?Prr91LJ)5IiLkhSjRux`5ReJ4nTRTT+ z_vCBqCeJgoaaj{KXLHru&ubnE25tzNv#DclW&e`n&O~kQy
  • Qq~!^otvbloE5!% zrt$yXu8&!1&Dtkl%?a)ZjaWW?XQjEA%8ImON=ss+L(HbL>7Lpq_FD7o1h5%e()a9z z-!Gb{zv$Yo=xL|gicIcIc-4F+X3fc2H#SK(#XWm=xWwiBwR4L30&kL%^=@ZMjdE-iocQz>ih?w>pQf`itk{wUWz);)9Pv^7~bd0*e@iv8-5@$nI}YEx9& z#Z%kv?Y*~)J815lP}YKreSc>^$X(^QttU7}R>60EoaNKvy{8$^lwNW5UYaDK_p@B~ z@zpai(&{s(&E>nkvsb9{`4sNc6PiE1w3l9{wB)QwPVu^@w@;b9<2z?9s>fto?)$K2 zjh4fzof|{;Uy*Q0FOj=k9s6{K-P~2at-gw-A=d+62Q2GZ`KEW-!~3N@;l|P1#a*XP zSoJ3~FLaR&w_wgY$!!zt*0xIgoso8LP4B}g?_;*za(lL9?JkZlcT8I^7gqkiTweIM zPw%Sw)tv$Mf4{8s)}DC$S7Ai?>8L9X`S@Z{u5kmy13=dL|~OFJqOrTFmpXz8>kHi(B`o zPmM2C@VD|FWLby{TDe$^*Aa9XP)8_j7sPZ!HAk1sda zR(r7BW{sxkj@nUa|D?kbP?ZT0(;N zb#GeBtixd3>e7840rRfx2%0|S+bN&o@IXi|dt_mQ(Zc zLs}|yud2^%wMyg8tJ9gb^GxoXzo&J(<83eQQVkU{eIEXK{^_u?=S<5Cr*f`#D0f^H zTwM5jYMI~4OPyZKbAFYm?~u6qY4bU=-x9U4SIj3xg-ky5bow(N%dq>$g6(3S|8h)I zjm-Yc^LR>Z>da{CM^jIK({)<5FsajK3>TS7!=Ndi5B_zUjT{^p=TSb#1@P>%Z;@o43_PI{jPe zgjZ+o?EU?)znsm*_@33~_01vaY1?=IzkT)H_VavloA2NK|FY`)Wp(!Y4fp>X@V~x$ zzMbWdX4&`u^uzbW+nN91UUI7iM0eZ1|HprQkG!4fkIA<0|K;1hk8KP|XIp8;xbobY zb>;u>{}Aum&mJ^)s>Q}^#&4%;f+xIM^G4_DIk$YSpt;j*m)_bt^Nz?8D_vWY5D!*+ z)}UP0pt;jySDOYM)W3A_iG0w({>G5o4I%1j_oI44J~Y3HSv`@fPGHF`mL*ok*4ML^ zG~G{r@3pu5pLAo$a<-M*7*_h7y*IV${h#fOq@FAR-;7|z4?fZ1pYaD_$8B29wnptX zG9IN;O|V1gl;42F4_7Q{yR(Src5}$`gG+a1HI-(5F4~$Vb$_e0ev}>|Cc+gn!F&k=UnT-Cxu=sH{Oa&eRg== zzip`jnYlNX1=;Hzo>FXQ)M}&VQ7Yx7`)#cx_@uhmYyGsXRxK>sU6gxo!_r;BZJOy( zS{6K8XZe|$J#lmN|D3(b#IIEF6wASBclX~;ol)ebWx?~BYwc_M)W@$3MbBE8PxuvE z#rOBDk&mUas7zaF>$lZjvv<{9PF57X{HuIP)bzwtk}Dq=#Du)qF^kQ>@YY7@Ww~-O zwXUm5C6CRS$i;U!_4?{ByWA!=&01A{OZwA;SJrp;r%EmZOYL&vUm1EKZf3~l%LQJM zxvze6@BFwSK5OMQh&wpIr`;7oPP@CR*mL?a^W!Ov=ceAY7IotMbl2$09Pb51H)ih- zej~iZ%J!x#=%}an-}(z=z8b#Ioxt_!@r_S{e0QF{;#|^XGjpywcawEa`)d6OT$}vN qv`R1Rk9);Wm5D$2Jjk>E?A`M|@_kiYJfDGqfx*+&&t;ucLK6U3)KCBb literal 0 HcmV?d00001