From fb662e95343077c5ee576ddb2757fc75b9a07073 Mon Sep 17 00:00:00 2001 From: BreakingLead Date: Fri, 9 Aug 2024 17:21:46 +0800 Subject: [PATCH] track --- .gitignore | 4 +- Cargo.lock | 1 + blockworld-client/Cargo.toml | 2 + blockworld-client/assets/atlas.png | Bin 459558 -> 0 bytes blockworld-client/assets/fonts/Minecraft.otf | Bin 11016 -> 0 bytes .../assets/fonts/Minecraft_B.otf | Bin 11164 -> 0 bytes .../assets/fonts/Minecraft_BI.otf | Bin 11772 -> 0 bytes .../assets/fonts/Minecraft_I.otf | Bin 12100 -> 0 bytes blockworld-client/assets/readme.md | 4 - blockworld-client/block/block.rs | 70 ++ blockworld-client/block/mod.rs | 2 + blockworld-client/game/block.rs | 51 -- blockworld-client/game/chunk.rs | 157 ----- blockworld-client/game/mod.rs | 22 +- blockworld-client/game/register.rs | 9 +- blockworld-client/io/mod.rs | 3 + blockworld-client/io/nbt.rs | 2 + blockworld-client/main.rs | 54 +- blockworld-client/{util => network}/mod.rs | 0 blockworld-client/render/game_loop.rs | 280 -------- blockworld-client/render/render_block.rs | 154 ----- blockworld-client/render/render_chunk.rs | 103 --- blockworld-client/render/render_system.rs | 240 ------- blockworld-client/renderer/block/mod.rs | 107 +++ .../{render => renderer}/camera.rs | 21 - .../chunk}/render_array.rs | 0 .../renderer/chunk/render_chunk.rs | 52 ++ .../utils.rs => renderer/entity/mod.rs} | 0 blockworld-client/renderer/gui/mod.rs | 0 blockworld-client/{render => renderer}/mod.rs | 7 +- .../{render => renderer}/pipeline.rs | 0 .../shaders/debug_shader.wgsl | 0 .../shaders/default_shader.wgsl | 0 .../{render => renderer}/texture.rs | 2 +- blockworld-client/renderer/texture_manager.rs | 0 .../{render => renderer}/uniform.rs | 16 +- blockworld-client/renderer/utils.rs | 0 .../{render => renderer/vertex}/vertex.rs | 9 + .../wgpu/framework.rs} | 0 blockworld-client/renderer/wgpu/mod.rs | 5 + .../draw.rs => renderer/wgpu/render_state.rs} | 312 +++------ .../renderer/wgpu/state_create_helper.rs | 0 .../{render => renderer/wgpu}/window_init.rs | 23 +- blockworld-client/renderer/world_renderer.rs | 1 + blockworld-client/resources/mod.rs | 85 +++ blockworld-client/tileentity/mod.rs | 1 + blockworld-client/world/block_access.rs | 11 + blockworld-client/world/chunk.rs | 89 +++ .../{game => world}/chunk_provider.rs | 22 +- blockworld-client/world/mod.rs | 4 + blockworld-client/world/world.rs | 1 + blockworld-utils/src/assets_reader/README.md | 111 --- .../src/assets_reader/api/asset_pack.rs | 203 ------ blockworld-utils/src/assets_reader/api/mod.rs | 48 -- .../src/assets_reader/api/provider.rs | 218 ------ .../src/assets_reader/api/resolve.rs | 318 --------- .../assets_reader/api/resource/category.rs | 31 - .../assets_reader/api/resource/identifier.rs | 408 ----------- .../src/assets_reader/api/resource/kind.rs | 67 -- .../src/assets_reader/api/resource/mod.rs | 11 - .../api/resource/model_identifier.rs | 55 -- .../src/assets_reader/api/resource/path.rs | 72 -- blockworld-utils/src/assets_reader/mod.rs | 6 - .../src/assets_reader/schemas/blockstates.rs | 652 ------------------ .../src/assets_reader/schemas/mod.rs | 8 - .../src/assets_reader/schemas/models.rs | 642 ----------------- .../src/assets_reader/versions.rs | 129 ---- blockworld-utils/src/lib.rs | 17 +- blockworld-utils/src/registry.rs | 4 + blockworld-utils/src/resource_location.rs | 33 + blockworld-utils/src/text/mod.rs | 35 + 71 files changed, 725 insertions(+), 4269 deletions(-) delete mode 100644 blockworld-client/assets/atlas.png delete mode 100644 blockworld-client/assets/fonts/Minecraft.otf delete mode 100644 blockworld-client/assets/fonts/Minecraft_B.otf delete mode 100644 blockworld-client/assets/fonts/Minecraft_BI.otf delete mode 100644 blockworld-client/assets/fonts/Minecraft_I.otf delete mode 100644 blockworld-client/assets/readme.md create mode 100644 blockworld-client/block/block.rs create mode 100644 blockworld-client/block/mod.rs delete mode 100644 blockworld-client/game/block.rs delete mode 100644 blockworld-client/game/chunk.rs create mode 100644 blockworld-client/io/nbt.rs rename blockworld-client/{util => network}/mod.rs (100%) delete mode 100644 blockworld-client/render/game_loop.rs delete mode 100644 blockworld-client/render/render_block.rs delete mode 100644 blockworld-client/render/render_chunk.rs delete mode 100644 blockworld-client/render/render_system.rs create mode 100644 blockworld-client/renderer/block/mod.rs rename blockworld-client/{render => renderer}/camera.rs (81%) rename blockworld-client/{render => renderer/chunk}/render_array.rs (100%) create mode 100644 blockworld-client/renderer/chunk/render_chunk.rs rename blockworld-client/{render/utils.rs => renderer/entity/mod.rs} (100%) create mode 100644 blockworld-client/renderer/gui/mod.rs rename blockworld-client/{render => renderer}/mod.rs (74%) rename blockworld-client/{render => renderer}/pipeline.rs (100%) rename blockworld-client/{render => renderer}/shaders/debug_shader.wgsl (100%) rename blockworld-client/{render => renderer}/shaders/default_shader.wgsl (100%) rename blockworld-client/{render => renderer}/texture.rs (97%) create mode 100644 blockworld-client/renderer/texture_manager.rs rename blockworld-client/{render => renderer}/uniform.rs (79%) create mode 100644 blockworld-client/renderer/utils.rs rename blockworld-client/{render => renderer/vertex}/vertex.rs (76%) rename blockworld-client/{render/world_renderer.rs => renderer/wgpu/framework.rs} (100%) create mode 100644 blockworld-client/renderer/wgpu/mod.rs rename blockworld-client/{render/draw.rs => renderer/wgpu/render_state.rs} (55%) create mode 100644 blockworld-client/renderer/wgpu/state_create_helper.rs rename blockworld-client/{render => renderer/wgpu}/window_init.rs (83%) create mode 100644 blockworld-client/renderer/world_renderer.rs create mode 100644 blockworld-client/resources/mod.rs create mode 100644 blockworld-client/tileentity/mod.rs create mode 100644 blockworld-client/world/block_access.rs create mode 100644 blockworld-client/world/chunk.rs rename blockworld-client/{game => world}/chunk_provider.rs (87%) create mode 100644 blockworld-client/world/mod.rs create mode 100644 blockworld-client/world/world.rs delete mode 100644 blockworld-utils/src/assets_reader/README.md delete mode 100644 blockworld-utils/src/assets_reader/api/asset_pack.rs delete mode 100644 blockworld-utils/src/assets_reader/api/mod.rs delete mode 100644 blockworld-utils/src/assets_reader/api/provider.rs delete mode 100644 blockworld-utils/src/assets_reader/api/resolve.rs delete mode 100644 blockworld-utils/src/assets_reader/api/resource/category.rs delete mode 100644 blockworld-utils/src/assets_reader/api/resource/identifier.rs delete mode 100644 blockworld-utils/src/assets_reader/api/resource/kind.rs delete mode 100644 blockworld-utils/src/assets_reader/api/resource/mod.rs delete mode 100644 blockworld-utils/src/assets_reader/api/resource/model_identifier.rs delete mode 100644 blockworld-utils/src/assets_reader/api/resource/path.rs delete mode 100644 blockworld-utils/src/assets_reader/mod.rs delete mode 100644 blockworld-utils/src/assets_reader/schemas/blockstates.rs delete mode 100644 blockworld-utils/src/assets_reader/schemas/mod.rs delete mode 100644 blockworld-utils/src/assets_reader/schemas/models.rs delete mode 100644 blockworld-utils/src/assets_reader/versions.rs create mode 100644 blockworld-utils/src/registry.rs create mode 100644 blockworld-utils/src/resource_location.rs create mode 100644 blockworld-utils/src/text/mod.rs diff --git a/.gitignore b/.gitignore index 23d11c6..3cda034 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ /target -/blockworld-client/assets/minecraft/ \ No newline at end of file +/assets +assets + diff --git a/Cargo.lock b/Cargo.lock index 3562f79..00ad8cb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -329,6 +329,7 @@ name = "blockworld-client" version = "0.1.0" dependencies = [ "anyhow", + "blockworld-utils", "bytemuck", "clap", "env_logger", diff --git a/blockworld-client/Cargo.toml b/blockworld-client/Cargo.toml index a44496a..785168c 100644 --- a/blockworld-client/Cargo.toml +++ b/blockworld-client/Cargo.toml @@ -6,6 +6,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +blockworld-utils = { path = "../blockworld-utils" } + anyhow = "1.0.83" bytemuck = { version = "1.15.0", features = ["derive"] } clap = { version = "4.5.4", features = ["derive"] } diff --git a/blockworld-client/assets/atlas.png b/blockworld-client/assets/atlas.png deleted file mode 100644 index 2fee90509b2ac6744c1291537fc4913659b531e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459558 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

    k}E)0 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 m~}ksq7vGCKQy<7Gz*kH zt@AKTgAii{HRn&{NF3287Kz1CwxBba_P-)bQpX4!?|lQq#noK`s~Y56fTK!+KGc_E zScsJlbb{)N&uRAb_1fd$*HFTHT=^GNX*r?NJEX|3k@9h<^gUX!ZCcMbz-p+$AJZGZ zdI~Dv6jKWJqe^X)6=)EKG-Ej{9Jj+44CgZCTD{ zLSD_KyTtxrHw+P|>vD}j%Z72YEOx^JNAmqRZ#TuFB7E+aAwnp>NpSHcBmQeYF?q0y zW3~PQwhOnA5D0Xl(%`HP5LvzzKcqxpe&D#(Q}z#-$LJsxu3!xGO(y1c4^YBstjj$5@MsW_v#IoA++LT6o0oCKZ07!0oN zqGNZB9FEalUL~aK^m*w?%nVG&ygbf*GEbY>I#Yv~>87PR62dpC`7wNK{8(_%^la48 zwHp)1LH_Z)eyS5_w*j`9A&ilo)tvIJ)d1Q(25W@4NLD zOZQ2-Y0S!_9rtntaj>G7FrkfrQk2C^0a(H4xlOh>6|LPcvUs#(4D~t9{=cufvI-;g zb{JBCc*ie%|D?oY>ROy2K2LntceE!1jWEw|Aj0lgmiS2ZOz;>h-=f&&#T1Eh_l=ts za2_Lh9qiKN*X}D^wK&TSugUAXc7>|P6*Og{Ys-s4;{1t%5Pre*&9wdfa)VfcTd@>EC3P!= z|JDd0lZ`$@Pm(!jaw&DwDCGPDf);+Uq#7as=o}gE#G0rmFO2b+PYDvg6TiC*QhPdj zT6||Ja+81QH}&4V3{#nnE&}p*gpgY|=jE)W(C|x~{3xf)yYYH}ou|rVUQcjVKaov& zG`>J$)PJHzl1B!@%-nBgCN0R*J<51e%QMh~{C@oe}YDzhL>Ek;+CwaWk z2z5(h%hKa1wa@x#l50Ok=(ViHQs%`Ip;u2|`AHlc^s!&j&R849&MVCf>sd*uP3eF2 z&qbiHmOpA@6*TtRs&tJ0#e8)_K{-F;K$_zg22x4^H)43p9ulveC)R0eCHsD*Lc}O9 zn;k;Y($ZdVD_t3o+QH9UfCF5B7yg0dt6Yx*_*pX5%1qdbTiR49iT5 zy4|bC^Dcd-PRG9(A?v3j+_8+UzQ`vj5!vY5wL9Nt>G4y6RvTzh4zdr8NJN;y5DiJ2 z2u^JvOo%haX{(R-%Gg^@0`VR|N<)GrbrY^i=h19>PFf3XR561mL?=#C%LvFz!+1ze zwK=Lhwo6t_7py6NKO|Jp>|*FwzK4`*r))7S%{`ji@y!M^0tlpQ#euRtr}^iqj2d2; z1lxq+5XgZ%Nd{G+G6>mj8aoa#=wgM|g3WsmA`pY>hOoBkC7o6Gu>gNs>9$wrl0_3j z@6{&Qb{0gBSYXZ!@-;4>@3mil#VhK(EvX_eK+UI~I~U3@F$p8z3#&T+JM&L~<+o-U z*4YZxBlMDgQkAbZws>=MPg{sj+_M9GkTvU4(f6RVvYb|KAyg=La4VKbQ;H^Xt=~nz zp}ANz26Ofr%Wj3$;JKQk%n7}(#^s;J9H)Vthgke?T@65Mqz#u2`{z3gW01L1l;D6fatoGV|Jf zi=_RxqS-+)z11nAW*ciUEn>=-p4?8GhW2Cf3bfWhcxFap@Fs|^NHIFZG?fo06lcP(UUI%*? zpXh#^+iF*N!DskLuWY@pY}nHKVnt49)%g1^SEOK{dZk(r%#>3#UpDg|J1`!70wQYd zYHh4$!VSwn7zbtza}YR~0Z}M1`%h|%vH{5>h@s?Ynu+6c5tV9ZQ=olJSKzVj+%2#^ zyT*Pu0q@~wkVBk8T$;kj_PQaPHH6I$=LO*6{v?zOnuQmrGiaV;am(u-kF*dr?Paqk z>|O%RtK zd`7iW#B2PJjHh^v%7TnR5h`I#K!B=dMoc zSst`Y$-dynUorx5P=0DZcv3)m`xHNmviq>{D6jHkKxJdh@Ut_dovszUQu)mZ?eWOsN?{h;~V(nGv#doN$gLYD%g@2uY~so`%ZWShJMI zc5o~WITfPGglI)EDVh}8)U;@yxqq+uT)*r4{d~Uv_~)FPn{eCUa=i~WYeB9B* z#1*smvKodOV#Xc2sDH zK3u$d67NcdR7u?-XF-x#jJ_dwN1e7pdP*!+A^ghsRul!)0FJ`5z z13h!VjnMSKquk{N?*y>!)js%wp(P0V_Ecg9k~Df192Wk?X~$+aUed9F#K&GS>%O(0 zp{pWTTj?(lpl;W+E~ug!47|rkg+0ud$>>Ba-e_sHbmvZs|BLd4upI;RnkzC~VoK_cF@(&a5cQvPh{pBrlbclT|oYF!03|fCvqn!@O6v+{tEL3SG zcWBut3Sa*yyq)MjZcW`w^<#K@9$*wKBwktum)WU$yo$~5kU?t#R;@08a#Id$)kbD$ zd|DuQ!hlt-ccB-$$@z;W=3hrbPYNJmaWg0J9KCB9M{bVN4Ioq&8fT$496>c^{EyRq zBQdAxH25GFdns?fO6w4(ey&iD>t02bfS_!J>X=ovX2l4JsCX%GAb7zf9w9RSy-58JeKOusH);X^Y4w6}=vF^Y7 zx+?2fsC-VUxw$!&Gv3tLm{s!OgZaH@|Ni@nzkBzblByXA8SI*=5&<%xQj0-9X?W1a zFg?ts&j(6f*hgmKQ5Oj+>wdWudkh~%L?aiCZ@9?K?4OC9rJnn*jsj=^U{e8=&L>f&Hxbn^F7Yy-nmAQCn-^-IAJWrPU zv)k6=<1S^*2y>K7#7~4gN;<%)f8pc*e)J_E8R_*~8dhe-j_lgw&K6krnE};H1_5^y|f7)nmLcatopj z5{fTRlMlZeN&5?8mtskQ?>|4^{Ul z5ZVt9e|xcuoH(Yj4~*4t$SBG!G-KkoZ)zN3ux>{dhLV}Cg5BQ7(Rd{j_SPWsinm|V zJ=^9Lzdt<;G2o^Qs%7yikgBj|i?^awY7hO3^ZzDk@p!yRraIzXh%}9~z$|5ruE;o6 zvP1^GX2A!e{ zozzUaIy;#h-}vHo5fxa{pU&=cU9)JrimxvxpKumZfxKbB@S_PMtbEyZ6$iO9WUnc&gOYRO*lFoG2DLp4Qz@KrANS zp`txCHi~d)d4Gg2b!%LIt)9Oiz62WAH3po(EwDUrO7iehN0WsE6E})&6pB`%6&XaO zEmAql66Wy__u=)mse*%D->vDC*Kioba2!Veer8D-xS#s2aa^E=aIdt+G z=}%wAL^jryu*+FIYXs)0TzhQ}J->_T9*b8u@7S?}S_)rg1p+l@In2P|eUfZNp+u0w zN&!Tk^I0(pO(4#9!w7c_^b2u(MHjoOid|y>tFm*uG$xqyNY}(rItOe>=bKwD7Es04 zRaw$tKTXU=J_%p(DvDHJ}vC zI&!5YV`?l8DpH3iWKS2c3Lv-$`AkAg`8!PuKXtavTyldMhaqRG5d0CT)lL)65d#rQ z@B_l#2AEE$-QFJcukhG-PI&QH$%@6N0Iz~v)5)L1@s(XdHTuHekWRxdQ8jybJkH-i z3%BDVPL>;NN-5{>s_jl`7ssI-wnw zM-+N%*-(*7`k*6{f*3mu-5I;U&90+avtgB zFRfi@<*$iD>3%xdgHDB1EjPgm2$8qRH zy+SN$&7KwV#lW~n}=e$w)!Dy;(yuSJ$O2d`D}{{4$7vtGUE z&LnE^Xmwwk`~P$8o`#E-G9ZXlaZ8LFEvjPMyRA}rnyh_ z0WjAf9C;nyMoxj0QMIr%tbCMfJ+^DR1Ab<5c{bwUtEHPl(HB9Tx}qNtSCd>-Idl+% zbHQsOd9Qv8TB}wb=;Ev%!Jc;GQlA8{k8?KXf(qA|i_>&9#(t>w zmwpCSn>8z^2vsvX+mpeBOdBHjY4UX_9A$Ke>?g&|yo?O$Jo? zeBAuJS}?I!rN%_$Zi14dk9ac`6znv(h}O?R-i`It*{8CpwJ02)n%8O>K7IeZSVd4% z_$K+Z@k1ztPDkiN{?(H-_qM-rqO3p*hqVBdG_U~w2z1<0zKR@l7Wng;wHbvF+@op1 zDOLS##*7)_dV)U;aVfoG!}-yB*{xJOC-$2NJm5N726~!D_^ae6iS+_XTqC`eiNT1Z zebc6}X){j-M5+azB2ACO22t?vG@L1lRgI{Cpku3lq4x(8GBPwWzqI&{wBHxn^8Xkh zzLC7_TFnn_&nd#0>1c4p7xx; zKZp76i%uOaI+<0oU-bz8IL>`e2a7vwX0!PN9LgbnB3iMjXF?RRep?~YwV%2o=OZo`>esD z>-pv`BE7BlIN&@KFRV>(fd9LDIIXfnW;llJ=@X!srH4ps8x66Ztn+Cm%OS;srT1_V zVj2%3UtR;kaUGXHB>5WLQTp0O{)I2{Y>oBnsgVs!=Bp$t=7WO2ViqXH(=)aPqtASi zf|yTz{LiDi6?q60T`+wG@p`EtDdzLzU&Q!Ge+kT{pzr12Sy_$5vu8djc|J8&^Ot<) zNB>}Ym(#o^8Ufg(Ztt{|@2s9)KQP3Cx2RzfE^$Q^%f|)io^PW`sVopZnn27)O>@-y z%=uw8Zx_0CKhxEL$llc}{@OwIY-WP@QIjmd5m8+9ht%aXatwUiIZV#6E2dy!ax+p^ ztP!Db0RjaaP(+Akx~DAvI zn>}l9tLgMRp8FYe8k20#i7eM5(HaxeJM0(0#q@_QIG9YZ*&_t)A6LS*;sE%znPisoiOxw%HiI>5Rt55yfyD7xv7b@way=}5=jv3bWnC$EA^aLr zF4V$SB?uSbj@_&|!;SgOV_-)GcefGePs@a+mSZ2OCKkC-FhAlGYE|*S|IYakdjLjH z*2GX$mDKjMnTL_|@5?2zo7AK%I8e{RJxm*Y65r`6Jj1{=Ex_01di;%G?%|R{JYvs> z^}QyhgYTDcD(48F08$$a*vaJOwyC$JaoUlXnY5L&x$@z4XE@@cki?Z~S>Ce2bW}S! z^`LO12Y|;;|5d)DZRUu4J{aLgB+yy9B2 zvY|1o8fp8lrF-3Fg^vc%YZe@0_3C@&>P+#8*EmrdfyXvW>2=4~-PNpBZ(0gQ#Z2}9lF&1YOkw#~bs=syli<&I) zx@ch0Lk!XkY1_E%RuriowXGZwuEAo6X1xy=#MCTZlhve4G^L=qdsprI8!&OC{y~OK zw|EP}phKDu3U$mqt%YAKr5sz0v*pR4qcVHC%wDmZA3m8x&GF&;&KsxI?}N9b?-s$D zM~CqxB+ZlUi=S^lA%EAscBEZD_6 zh{lMx3iXO(Zn9JCVWpFF@RyM6r5;zmLV)>}gdi#^o?AV^wG_5V0d~c!JR$ebfY*|D zo%-$hWoiQ+l_b5Vtp$7F@uM)`i2H}g4xUS2a{bpP23-^dUTxx4G3fXb{U$!vf&5=k znt@Yn6~)t3(;GgxgI(&E_~L+3{nsMyM+pRNlnY$!Oc#b6ylINwr4wJw5i~Lm?~)b z#o7UX<2CZrep;U2xlA)}nWOGRx%OS1{`wEnfX9pnt@l@Cr8QrCFbnfvu{s2A9`&ub z9tN)_Zx6T^RKok*cpThQOp=EuBK>cSi>L~b#%BOhA_x818Xh3--S~)RaWQ$*#K13o zCVO)nqRFk9iol{?t&S|&y;0Y^)LF})7M#6^!mMUZ>(s)2!&O+gtCQR*hW+p)SR!yx z#9(dt2vBZnDl|ysj`6g|pMc*mPH7jwsXkAm;DCDDLn9g3XZ>vphveg=lQvs`1 zZN#m=Q^0u(vuFnCQxhbT%C_kucd2lAO2I5?uPyprMQLATqb1cOT$nSjF~K(&v165s zO^g?U!7063aOKM6m7ZLvj!k`@4rg$wJ9(bAN)BhZ$fhlpQ^S!)$$mfgoeS$bh(WO? z>p-w|z7}hb`UH&-GOo>yf8Kt;vAqSit2?vNu1nx>~=Y0t$Yz3 zUwRCUcSn>L_K?GNB!L@DlD#AiQA6(z@Gr?;<>^TQD-R2DGOV^aF(qNg%FSC(5n-F5 z7!gGgj|7yrVNYB{t3Jxks%^Jn!{yMEP{JVU94-u_!mrk_Lk43@`xRYq)q~C4@sf9W zjeb#?)<`XpAG?*Dv@1|K2QMwOaPOo&CPDNqf9R)O*jA4fW5i44Nfef?Bl|c&ukjb( z)t0U&b;|qo^qicWU0oCRQ67U*3X7gM7fgbbgd|HCsAyk9CmSs(rTP**KM?gh|y z?mB!EnJeqt8b$xIpnBe0kr_{9mPVC$CyyL#Zv5?!c`?9JgK`E)bLVM~A+WOB{FxMYRT zlK;O(N;g=gnU#7D!Y=>;s4Qv6XGaF_qpIW{^+2{2a^(c1TehR^+5ix^5(fVGdqY@n ziS=$CP0wvhweIeD!1-GU95rNj2X~Z1(MpMy$EW-bv_yaoMB!h4(R_GDk0&D$rfqLH zFcGN7zUX;V%a)IYEgy$fiFHzq0%_Be`qA(kCwKJ&woxVdlOzU-wx|40ybL|+GaYs{ zS9fHic(Oj?F)Nw#_r~-My2vid&E{7eG=W6*8@R~OVZ5@F>4Yvq<{25e9sXq&=fP_E zQIMlHd6&^xqA}Te5^_(K(=MoxvJ!8U;E6_xp{Dds)!@^(NT-Ctlg(Cs9*vv-k4x4$ zK%cV>Ei6MCw_@Gn#9l%xX22raceJ^mMt!sHrjRM=$2fD*fO2ceMMTf^x*|-~QAvTd zcuc%FXPnSZP+0=rM6|Bv4PwLuw_X>IBR?ac{-Fh4TCTOaVTk1#2gz-k`z(qX?}fxX zK^|QCV%tOSI8Y7Logw&je*lOp_D9v$)W46>0Dbv_8pS9)I3kS+&oTt7=S;{TRjh_! zH)XMog~V>yq{skCtY&MjSdf<2z$j*(C`i$O(!n1Sr55}m&1Ewa?WH-P#dNvg#v?*C zMoGvVrzz6Mz}tHL;9rJwEhp_O;^}tYcvc*dpAfhgh2q_fA#1 z9h)naw6v6@o5Mz8$zM}PNgE^XQiZP`hnuj21kp{W`QNFwzE7r3ZMOp0>Yh+f#PtVL(S6w?sJFvP`Wt` z)PVM=s6ZEY6F?muSKfI;S#&#!SHS^eVcZc|^(cR;(r&%-u4j6rluRX`^%+L49Ik06 z90ea&rkowV9kdQ&X;mhf_|b{ur0ntHB)j1O;+SJ7Op8TaTt?*N_}+XzrzKAPtwY;29*bVS3Ux+FmZnI%5Cl~hQFx8dOlg%amWT1n0!b;g86jBNe_#7_u|2{W z>*Wp&3m3F%ONf5Zp{9mLg$+&djTX_{l$N{1lLz*XpZFCTHCi2;39(sbZYodC{U`pS zc=U1ddgtC2d&&K2mn)oh4|!*u(C)k`G{rsJheDiOq~Hh%N(7^Hb?pT-ZUZZ34YQPT z*Sv6Of!Q{Po4&Ml-$8r>CV-`$-0grpV(2ui2=K1d`m*%EPgoz9{f1j|Zj8#v=$FaX z>$SpRyay8jpe@?Ne8-*)8hSBQh%kM8!WEJvhO^+1J%U6#Nm*}>hgBYJr;5$644Xv3 z7@BX5)ZV9L56}SnqT`)BegbrBNIr>U=pBnZYNjUDvq%3-V(k(Y=qQ3wNI3KRVX|(% zQ@|tRPxXEUHWRCt>}*RsFuEstxr<;fCXO3#N|JWWsc}g*JNus6B%m~Ea-`qF71SnX zLzH<}}6Z6z5zw=k-UmYd@#yr+c8hmi1v1xB@(|MRpdYyq;? zfP{SEmnsLfBd%*jOEkITbF2+6)Tf=N1ozRN=zssAi}(p)v|JFJe~@eEkW{c;#yR{W#@5}(HILz5wR z9A*uL9BhND%Vbr`eo8EpZDobsOe3%ay{~ML^40vwhsL0!fwXoW9gao33L75$rr*}+ zK{glfgDSy@>9(WSErB7dp^TJrxBOA8RTnmF9 z2vqxi)S4CMz|Y-{gE6?p<2+;V(!N*X$+FkT+j1%1Nks-+-9^<1(vAip>sSKBs6$TU25eA|n1%B_!?b)=>tnhPcF2fMA}cSFUw1M<*an$VIdh8Mo^2dv|y zUnY?Oy_O)x(VZL1ZuI0x{d#ubv-aP#Qmc;uk{uweeiRh;fOi#Jw})PWy_*RIIIrEuu&NO=vgy zk>Se+kec#0! zSU@W*xy;6nB(L8QJNVO@TsQZhgsW}6svEG9?1LEYizvtKP9A^2ymjFQ(dchfKSAU= zVFAXnf`>?GUo+Q{!70$gp)Uld_{ELjIcpUH%q&U%83azFW!7VN%g?$jv1Moh%;Y4+ z+D6AkALdq|rO2L*yxWd=&oat4L*mIubPeKmmF5XktwtuyPScMiPG?=|uckFQAPtj| zUF4mwChlE?Kw$i2Bs2m)+qetO^q&kcrBTlJ6Ais~->67jfgo~XHOu<@f$E=6JVU>p ziY(1u%yyaO7SChp#C9!2?jrIXN>2=SlclLYJ1O_MklXA*fkH&JfPCr^=lzMV0tY*i1tZ4Evp zbs;&9Dp?UsE8?rZ^1*27uRXt--Vg&aZatz(L zp?Q)2s~qDe_p{r6KfZUp*I6g&D$|cIuJUX-i8Ug5=1?x37f!tj2sr=({pXL;G^7Qf zOf&SfR%{ax{{Eu#t;NzaSeYG57=Y^dk`YmL9apCFH90CsPAK>m6a*ZYSvO;m-nk0(D z2FfF=Y4Dg-q`u~pw;lcdl^3*NDMIoZy98TV>s4$KAyMvAGOcZ`?8KF%hM=FwP`RZ|W?z;N=dMM8F;&KFOy9KTD1VhfQ zXyq8oJXsNmB_b|oR zli`Z*W)Z`qBlFkJUvgJ`&GekXDeP5A)RLm7`v*@8eDMjsOz6i|?_U*2&)#jyKhw;p zxn!3yY5501-~s_{(Sgr6a+Q0S+XVrAroSR1Bi-K8@@Q_;u_InFgR(~b)wC<@Wa+bY zcqp=Sj`@T0pFe*-diolBzVHxn{|qWgq&|5^4KkR%Rq)PiNu_=UGq$q?^w*I-lcJ`R zUN9J7>}YtDX*$B}TB1jCs%c_=(>XAA zdy`ALj_tM%@U^~#k|Ockg-xqFR>tIRy@Y-rs=9Qn*)d>Y5#4kd z`}n5>;acPxu{2#Fw?La*I(zS-ZS*Tp%gqwAbVGW?@!bofNGLS+S$ z>HZ99(kJ8Bq$uCoB;LEv`mf zUzQBL6F%J2MDkMBprn;MxRR5(HC5~wPV*~@;?Owrl1riqeolXtmNC|@eO}*1zjh?Y z&KIyY|eOmd87vutULqRCDtz%QfCOUZ)`=%?cgEwEx@Q?fG zd#kdaEQ+vEZ7JuUJwA=r+^&?GI%RV! z4*W16-@&M?-8GxuvGK7%X3@e8(<)zARfwnS&A7zrbNq7ECY*B8!a`g*h^-QyvG5qH ztkiG!zO`kuOQP1<+2YwA;&0`~%t=?n$HztIBcZ# zU3FuY-7=GpCGaj_NSL{3r}eDa6MrdG`<0y6^?6YxFDXw7o!;4Q<_K3`qb`}S(?q%M zJwd~FS3;&9{eQd<=?3Uw3Xl`Wz%v1n7(o+1T*hAuhMo5QrGTMU-spH;Fu5jvm9wI& zevAfg>+-<*wL!pcAOLWwH>>QG{(5U=HtH6jwDJfx=+45f&K|Oo93pKHfP~XgE5!a6 zb2>XSSk!D6TZfCqEbpD%Y+|3{FS%og_olY9nNc1xo%5GrV-yznrNoWZPoVqfI{Dn3 zinv(${b)43Nx1#H%Cu^QMFmOBRCE6xV$jus(Q#tZ#aVcrS6Qe?5{1V-$5)B}Gy$=B zDxVcP9tHUX!rCHo)q0rWjqDx4!wASEO0+SpD)Mern3;>sNG$tqMoc^>H*~?8zjT%^l?77qHQ4wt za{l~*L$X>8GS)f*6+hvm1*rES?bG#iCP(J+?A_(^Vps8PX0$5w3qK5=!LVi)lKqYH z$jn_N@TO}vgtxTY-+p*|d4UUd9a~IZ(q!{?+Ct_XEJ%ytKT7dmZnRs8V$o{ZJRGrM zaLyg`ZbMuwY9CoNZ}jawa_gj#Og6VkLkTTx&1Dm%PHT~yLPu@yi0+CRWhF;7ug8jK za)xDhd<~^xngzC8c zO9XP?df{=WtiA0eNbnAlF;=f{95tMv!qULD-Js10MtywJ zy8J9!&P;yI$n{}Ewvi>WTQaD^s?_?Nf3flaFN<$5%i18RL;vy2A3j^T^55|ryGOy; zQA`Y1A`qkqYLWUR(Norrb1J9%8B8`7nBEHs14P!u!rUKo$oKp=rWn#m+xZb5gJ0*D z7~16@C!Wmhp&wWXm5>kxp_mqh(sJ~oUxtlymQT`!*5eugg`WP#jT^}j>ho#-ezl3E zR^iD`-T3ml;63!`d%jGo4{1F!qjm`eatq!sw_;o>8h-gdmsPw@fH#74Ho9`7)EXWX z6FT~rX>-(J<9@&AIP2)+D@5vQ<%o&$UQcn3U^y&p^OlF=x6x-H6Zn&~VdF2GhkH!r z9vii*)WWE5f{z2<`vyeK_AP8pmj&LjiH6B!b6ylyJFj{a3o?FeUB(}}!lBoZ2V5aTqCWM|Zx~OH=+eH(1M&+0kQf;n{Sq;bSk8CwvSogAtKRJpx zf1ZB1V2)aNNrLP&w#5L6>EaDXq%+1X~$^~Q! zhq8W`%PyFG_Ot#4F}WBo0>kWdWE~1juFOBv;u5$*?JHkD@sh+-%P*vE=G}fVe2rd} z{Dc%@fP0@(qaNv6Rz{pacFkzhcrq4p7um@yt1P>1!MT*83C2{joFm-7y|A!Nh}C)L z7gZ{sOe${@alPa`7dyMiD8bQy0YP#>m$B=v#2p)SN+ij{QqCPn_ka zR)aRlt~?jkp6*Rlj&&XzA`IeFfBX8H>J4PMu{~>2H%`9INH9IC$yF=ec4_1VkL-PM z!8*&GlV4L5A5L9dlFjFDQ1pgn?m@O+rU`OEU7+TEwQ|&7xk($zGm3bk)wh)3pD-L3 z-Vb7jQqnrNPnoy5w4gsnpSt2X!HD}+Tk>+lv$#`XO_ar1w-FurylZf36|aBv>nPXH zz$JmCu||VSJQ1RSz!pX~F!qD5)W&Abs>xC-Bf@#@j3p#WW)OoexD5(wHF@I2NV2&N zpT44K82{In+R-UbTh>X>p(#^2l?%&=WOZ04+zTh2{1a^|Cc+ipn!|bIZ6?TPJC#+!WV2}V(Xr|#>idKQ#xf!)>fGxpz*gK$iM+=h z+=J#C+GAA#38bh$3W^g;V@>Gq8w3XHjhal}kgfOqGD-M=?3~Oiy6 zay@da98qaoO~EV6R;@}G4E75Lh%w4}58<~Bajqw#eohL~dQi%&y`tS2vC!I^(>`ts zIq|<$myitr>2bCn;t0a5_Zu0kL-FO8!bFJt&NHD9lXZR+-F~j|db)2VJu$lI5xpB3 zPefKMJ)B7TG*o;jOgABjuo}#vPR@}tz7&nq8e0hcPxVmSR>t+urx5Qc4EIvD;XCHKo_&;z|>2=<^fPSIF%Lwu$rDF+uDl)U0WO z>|~`sd)*D@4jr-6i$TD&c6KaviCxF>jC;&6`MrpLysq(wv|$P-??LtDf@R_vSC)-5 z#X9L_ExMFk^xCPRXO`{VQy$UN2$@~khsia`{CM{eGT7CD?g57u;NLq3grz4adZN#; zSqd&YBJ_elYOPioFMGgL;~4k%pG9QM-!H5SHNIj@{dg~Qqcr{$^%fYAvXdi*1o?Ln zn)wvZC3(g|wcnY1ybdn47q<@a_W1of)mQAd#1C_uX?^vM)5&=bYkrRJ)PaCLDNfR*-$Pp$O_LNI z_QunE5bf73Mu9GqE0wOC_wU&^1q!Z@@*h^&GW7IL#B=(=XKO4Pj`}R5KDaBqA++W*kDH00WCQNL{3*B^@)m0P;Gzk%!0Rlr=X> zoeoYyJj#h9%?7d08#|vbD7(y;?m`{r&DLfb!deKXfs>`!8t$e^(Ta9#K=C^H)o7*i}>NQ&ztq+^_dPE!Vv?#fD39~Sn5^)bY9Jvt;eyaurTc? z#&m6%zg`UTkrneB=pNiu>rx*icI-{q%Z9+%Pm7QB5&YDBOyPk8T7^D_Suu#sKO1uP zqc^UfPG#S5r9Du*KEk9*7|DR>IRO2ShPw`lhKOiit1re)oDn}Q)vL$HwJbJlo58Sh z)LM3Gdog25{W<6H@Sawx1AGYNq1(Uos%&;zT``!(MWxwK_Rvr79w3^Y?wqjYiS~z) zv~Nr0X9}-fGlB5F7r_^rAw~l&_z}29bh-lgw->96(dyAxgUr$5bEV)F0KV=clh#WZ z;5LeT+w89%wUqJyXK8)K7fG1yYA1Yn?Im%edb?;2YQRePBBnN4Qtn4EFCp0(&ic4fq8!#0{NkkQdW2S6>Jb97>Booklb%x6Z}9EF`MYA zl>s{I59xSL6wy3xf9@M&WBVwS4 z^ZrsZlu#4e9|jfMz_--JUM!!0AEk=(EUrzRRL%x8sbGyE?m5DuKCpT?6*ou#?ab!l z-=$c2GMYPb@q`ayeg@`7qW z=6@BgL8WA4&Q49J!uOO4bn65NC#y{&#?GLT?&-86G`aty>j$SUHhsExjJ$~2x=n6& zq_&1;xsa1{EA6faZs0D4x%*&B?Gh|AT?VS1-Ooiss*P}$wF~b?!y}3hEbB0LIk&e$ z&EM=dGiYRpoghs=geI|Y-N$#erc{^dv{P(7dv9j%Tk-(AZl~xyRdbgk_SNR>x$OFU zn7F+6*o4c5^Lm!*Eg0OX&!N2-Q(|*w-hbWl#2WegiJO;orfO4<+B2fj0^Y? z;;*x#t?BPharv@jA&ufc@-#cl@HSH^k~&gJ{^{@g>+0$l`FShCl+$H$$tzZeQ631uS!zIbszLB~#<2(vzSJmAebK?c!d!nR%hp%kB2MK-otmFc zyZAW`KrZ>L9wM#&us0nq`VFc7(`WEIHQ4Y{silkix__v4)f<`INBR|W31U1l0X?ud zb+HoQzudiGp)KRoASD)xxvFuV3C?Jl^%e9?rp4*z2Xc{@qkH}c+| z9OC1An1t@FcZz|ajb$7F21KBc;~BG5<;Y75UEq(SamEA`iHu|{^L#%N^}RSz^;%k1 z0cu_9@PM{UgJW4W_RQGm;Z)>dhIJgt4JKTl8i*g&p=5Z9>vDkxcO4(H6@o@&O}yBZ zM8_jjJjYqTqP{%c=rIkM_sa&>NM2s83wNB`fBsy6*ZeY63(WhU9!smL+@-oY^5!(d zd-y(2@o}q|mjpYOjYJqJ*o6#Tn_OgQfR*-4;2G~2>g!n+UK5NwL%wnI3MF+0;!Xm% zNreKTlg3B^n(Z%>AyrAPYeRC6A$-PhXD26J7(~bu}ZvR z0&u8d&~))WrT$P14d7y}Pc^x``KY#N?8GnWnmOa@UuOhoj$KS~)9DahJs!dBbFEkc z;FpDI*7t{)Ss&EC)fm2eaMFH%I_N7T0z3IX2>Ibw_rq5jsmx-I;rLkD;Yaqmai0jk zXohk^!u>gYW`Z)Cj3dWKX^)4P(_iXzC<{LRF&N{V-LCS6|q>*9r<}6)< zDgcfXf+Ahx7tft@!ac3U0|;1<$QZ|(FB)qVP>!dx0$~mf`9ck6WAQVO+suQIpK?D( zI_F$%`uIrpF>cTy?ZStIl??0lP_81Dr}3TJ>eb;Ml&q07>(N)p#DX!cb$e%5AwG1` z3k6L$U}q!Qtx0zc2ElHGTC5XG?I=1Hon6PWlZmA;CAfHr!Sg+`oFc?1}ScR}5 z2YedR$3nV}BIicnf;@UGaSrPdFqf*<^4Yy~m;P#}6KE;AYus5M!{ zd*3}y5%&ghE8U4kJmfC$&Z)>>2{ti7tHCLp!$wqWjR#A_JN<+X4yppP`tSTE1V z&a*-uQEvxb9_RP9%Hm{%dzHCW@TWNZJu4U%dqvHB?qSjD_?$4Tw zh;)~lQ2TxuMJv%`QTTqgC_rmZ6;vCA_|Uj;d}Lr`7uj6#M&BpIhFmj~s^P7?F|6U} zw|R1uVFJ!C@$p6rMLr_hdxdmU=qG-!0;OdcSh2`th@BJv)C31863Fp3yz-GSjj?P* zY^DWINsJTXz61gNWBfLxs{)n3+Y6?^wuifu(d5*JwQi|Fc~O^Zq+b0c&-_9cXZ%*& zad=8pG+7CVqK;E~j}5?ln0 zrs5&EpUGra2hVz6>r}OqvwRlFDw&`eJv)wcx9aQasR7K$I5@Qwk2-|s-avx2OetSx z_StyTIY4z(md4cRDA;f;!3Nv$hV1Ns?A|-!U9FqBX^p+?jW4OndPK7S7dKKcfP;(F zbE&k-IDbEJXvT)YyU!}h?5=>YzKI<@6^YJa=alhNm!}Cr$PQ!dp>0!vnMLT9QEt`c z)v1a*R?oy}wXvXvsVU)4o9IOc1Ly3KTAi~f1crDL+XV$eR@L7;9%5kZzxR(aDMDQ% z;+y?ii(>))5f%s90*MLlM=0%=7yn?kwmqFirrHfc292DyyvcO)B~QUBCaUqGSIqn(=7aIjbQE-O z?sHgvmzm_k?`r#(yqcS?$MM3w1Vi?T;&}hVh0N`Zk!5dQhn;iZq$jgzV?c(A7h4GI{ONc7VjxgtyLSO6Ncm1&k@S(F~1K-vvU4-DL_Tf4)rtzwC-4I z$H*^bKJrCf=+mlof=A1BympVXv6~ywbsdDtE+V5Rlg2JtP81_vL(;1U81i{*@$zxP zX?zqCf@?3UNR7sbC)Fq}eE!YXBUTBIi}Uj*$pPBeLkz!`s49Wwvzy=5wO#=fuBzgB z%FWywGXa(APgU_(HZaB5hge8GEK7fyMp!3|62DitA~!GL>GdS!*>De702jO^sOj5$ z&S?)m=abteqp5_y!p9h!J`S%a2fVh1BrWSf%7tcrfA{=^=jLFSjXq0w#dd0YDLoha zgq0cpERfcjXp*DKGsCinazvd~u+-TPLd7ZI{j{Y~IiwE8xH||N^Bb7}6jFx?bURu> z_Qi|mu0g#wCAQ1;y0pQ>k;`+?J_VWj1t-VvBjkb1rp``KvmSYXAE zHsZa#vWNf-!`iF#(=;BW^mu|ei3oa{cS$7N&56wu@BLh>CSSF8=~>1Voi z_T-Kj77c|a9D$PdWhf(|j0v5?ic`{lwEK$nFeUp|WZ__&qww6sO;u@?>Z{D|H17sl z9t!X~hPQYeC@EoEX4U-Z#!pV#MAt%!jK$m}hU~?1GBMk7p?bMqxziO;qID;#o3(}4 zaIN|ki;K&dsv0&FrCnzc(NysY;*uWj#t;K}MSDWAlQk1<5JO{>?}pe+12*Ob|b5IAb9!~6^_%oAV}O5Y|Bn1 zxkd-hy_VuTomc}>PTA%ZzM_N;6O2Tt695`0#3m=+4BqO0<^bL1*~m+$Ez6qtZ52MY zu_FW@7*LXanhh~JI%2z)3Jd@#l5P-eAeBn-J);*iJgZqX{vI)dAW+?XlWTvHv&lGp zafapESC$|W$2Rd~1NKMJ^PWUlcG9`OSUX~-X?PD`#f&64BT{EmsjLFQ_|7i5Gx=O7 z?)sjpctQwB;y+3M-ndHV{ADp>^qbyODeltmnEL7RqR^?xgHA`YT!=7I*VoINLm<2X z@e&za6E*tQD-W8q0U=$@pE8HYDNZ7_s58F@Mj@XKrJO~Gmx7jG5xRJRQOsk6Iqb0z z(yS1TlG#A#D$SDRMS~k=l`-?=9hl$UpZ4 z7#eu!p(W_G;f;IL@A%;QFZTOSTd29;9XFZY-ZDls*UwL-WU&7S@BzcoKc0|*tK`@H z@VTMRfkP!^ZBgb2VdMxm`%O*-L^E;hw1`NO!x+Vog#3S0y=PccY4^UpcXrsJq@W0d znkXtN7MhB*Bvw>L&>6)FK@m_95E}@R9io7hSP>P7ZS2aZgQy6hs36r2iV_s1NC`ba z$bMIz|9c$2=lL@8WyV61o%>$vy3RA?R(-sxm@6-(?z)8AWK$2ylNNnWon55RcJ2O>o?H7HBR*}H&l?Hx#LpMd=FIw29` zuTUIBNV9KPrwuLLNM5S9X3>!TzKO_eQ(LTgia=Y3$k|M}M^)+8Uq*8;p*e99tEaA` zvn@Ge*lqP01wQH!+Voj?g;rx2N2}Xu@Ldwz6X-M|dx(P2%~2#Z|NSX^jo$Iwv-!Nk{3>^1f%Vh);4KC?u9)Lf z();i4)W}x2p~BJ$xCloXK*MIj+%dGeVN2HLb830Pt%&O9546OC8t{S@ogFDEmz0h@ zwsZM3Mj=iW;)Pm|^4LMP!xpO97{an6$?Lk*c#`nn>Ser|sm)6e1&Jd5y&pgBx8-SL6b)bu!VPBDRU z7KFni--bn%SS-t( z2Q>UCkEI)^?k|&2kWsa(e|#Bcy`_0na4!0R^-l(oN*VvGWLoqS=vX1}U$m(^Y2k-l zcB@??r9&1UYkzNf_xA|x?kYik2P@SD^te(tE&429R<1TOYt&8`mb~dyclyURh_+;* zi=8^)B!*^{K0NL9%%cLTZ?2^0%|FfJh<)Z4&dZy)xf&$*fpqg^N%Y2E(U0^pwzYDJ zeH(;McJ*ie-vY0Mfhxxm@4G#tl8~T@kf!*}FKi6Fjq|NmRxj?B6_L?TqS<`EVR1*A zh-|TuoPU59^)&gId15S*(mvcI+@$lG6e=kG8+6XUz`s)E)b$QXT~;M>zH7!lB@*{p zbVX{Yy2S&>X&rx7Xg`TZjtFn$AVF{Xo1;fnzqjN# z@6y9;9&KXP>mu%(z!318mDUBO7zal1M4M=UxMXG$RSyHa5{9tOtHxRDSoDGq+ z-Q@5?_#=0F7+@=T*3%^kKaeLyEC$;V4 zo%4rQI23-u_y`2Lzaq%mvB;kol;gyLQDMo+S-M3Z?EHw3^g|BopT+7O6^!Q2a%8ju z)#68l|CR9lf=~6uGVJ}HL+Ba&TQzGv^VlCiOk1XyV**F9J4NIOt@)Qe6j=0;bFNU* zbygy75@b&nr{uZ)tUC`=avhQJtkJZu<06~7{cx~pFL^suP5>$neBl^k$=!d!QklAR<*^EMLDt)VuW!LkGo4kl+@bbX<_zO{<0 z9<;$C!6oE-v0++o<(_ITnp{O_1=geFd>zEC41J%5S7d<01ER>F0+M#YtIc7m9Dk3P-SZxyD5K2&8vS0IKkQ(PNwczuh` z?_=-b?dwfO_utm9Q$O3g10MyWh{iP{>D(yT!|%V%Tz|!7h6F#K{S^uK!78fY!I9k@5>1AuQ|3dgCW^!2#+oQr5M`ChtFHPkVq=+ZH}g>K}3C5QLuYVXD26z*)c zaOu9lp+GBIBa`aQ2s>*CgoztA@|P6Xmdr!qW5*7PGt({ze0_D}JidO7-D{>I%5LhY zVhSXPNF1v}RT0+@iZpnKOC-go9(q!yaK%to^Yrw#B%031aI~K^S)5LB9Te67{-k`T z(ZY(Y>+@lKu71eBKWa$tB7|MT$b+b}liu1DjHn+e9I0Cgc)z(CpJp>1*#!ze950nr zP9xG!`)sTk^>xtp^?Kjy25Zyj4QrrBY^2E3S8hQ_{yPW$N1k#sA;Zmrt|Gf4xi*n~ zh;8H?S1&4ja2RoLtR_{1SWet2EY1dNK8pCViAr5zU?40{P$bH9(jC4ZWn5LEi%-)V~;;9w$u$z{VXo!)TXmp{tu%^CfLb8*Fr=oZDuh zjTflGc;Zk26Pa&4RrQBte_65sU2S81vP39}<_;9n`q^y7r!9ru90@jSUpF6 zU{=n8<_yuUnCb#T&LlRC8{YWs{(jtp>dG^{i!83-snjIIogXV7#~JqXm&3LBzr@b;zxg%?pFg!1oj@V zxx0%(UaO|fe^@!QG~K%qP|RsC)5;P_S1cQgtq@uvqro8&|Ry;Evb4TFVKhihWHZwk+pdabTV3Knc0lLB<+vj zhyY_NWz+0N>wwiszigGq0hvbqYi9yeHP3$^`NOs~J)i5@Hfz6QVW;!teVR=dpC;b3 zX#P%CSJv`M(n&fw%1JH!AWvi0EYwlPh`E&LpW`BJW??rZ`mTG?N9mOL5`4Y}xgSh@ zVQL#$nm;LWPS4|rdbW@@A>p1!5WeRZ)Cu~L9i!%GC7VGkcuC+^?1pITR}b?&ByQHu z!&)aIvm1l^qicWiT?BGi-!Feppl40P;8DzGbA#jNIU0N{nB_D(grBzI#pr6;BXmW| z)CD)=gWOKIsY-?m1+&KxZFudGj)gJ8r~7r+7f?>l>u3fb9h?uHyR(s)DPMomTP2cJ zNkrQa>v<(>q;*Hw7Q_9UUyHm7Hxd;?GyK(*G<6G_ zu3&DoiLgsxOeqYf6W8)P1K9W&0>72<00|jf)5muI1m|`$HegDmF1kf;r&=g|JtBJp}1$J~n*+-qhgX}$6 zh-NRA8Z2Sf4e4LJ+llO1`xvz7)v)VvNrY=wI>f|UOCDs|OWY>a%bZAAk*;9d&%ihn z#m$A>0ZGRQ?U3ZBI5B})giTAKId0!_<~Z9-ug^!?m?ooX91`};@`mu?)W~*{@&UT=`0~Fol_@y49fC43!zPvYb%tWPxwtq-&_193F?V z?{qI3=|K5FhR8-ochTPtQs2nnuMUUFjm@-?f`O5F?Y~Ys1qZQ(T1`XnV5+XOBN2|O zlnvA4xQy|%wG)ufACWKF6m$9cZZz7MTSU9{)DntpUwTq<>p4MsU>}CrfpaME#gJlh z!0)19RoNQ-nthxy-4^BU$0iYnE!3ihcWQOwS`j~ z22hv(S<^DmP+j}aZk0n-wp{((cvdur7mAy?#Hu^%Bk=0(Xy1^Ls)%Y$B}vz+ig?8J z^d7|LSV&0I=IBB7EX=^bt>|`YCwsid26o4^8Hh#cWCb)=+n2!UH2f%EGdy62r9`?E z4Y1b1mpxy*Iudjp3@JWR~z+J4;G?cn5vKDJnbbsiNBL1)-Wag^m{ zeO0t%s?!2SsPTtZvd(>l@NxVIWlPD<9{#@Q;Qsz*S?#ztqvisxeHMQb_eLL;r$RWMlI~N$y>Emt` z;jMQhZ?R<7Tk^MUsNG9mBICBV{N;{Fr6bWcINZd++Ds@xvx|xay`A;aX(oVT!u^l+ zCyR}9JR~Ur=g?idZM;}^cKt{01`fqj+T(|R%~2jM37~T-!-dg3*xSi!?D^R54ZnHx zZm+#R9x5;Yy+GC%6hvSY_8NRZPhX0kT?5ga!4ja6W^ z348U$!t57qD`syNjz%;3lop}%N!HQC^*$%;e!9B>`n{)JYK?=n%UnTecyqO5$7 z9nTXn>gpNgpHhz7t4AHYXx!Ca_XqB|W=oba*MSW)fHYBjQT*Y;PH5GQX<_vakVzLS z12M$jp%K-t!CxjZsJ#`sn^YQ|w;Ez{Uk zen!^lSe#D!=igs9F6Su9KC$RwcP`2c0`^>9|M#|yl6RzeRGsp{!E?)|6zNhk46e)f zKlkuV`oCd-HqwiD%q0#UIwWbR%B-i;s>rSvVwY) zUWnVl0d`)TrdT=rX)lfnc7Sc+Pe34&O%d-y8UYo7^HenVmAJ@FEn8VAnSJRkuarQFc2jz)|sn+&FJmZSI zc)psU+bp5L(W4}w8ICD6rV8<*OwV!4)Hs7l6bC}_XYK0wCjnc8jP6X|OShiC-cnj{ zHG-!JOx~~VP7;@8pKWMrnoali3wC@IQX9zlY`ULDE*(=_WRcw*7xahhxaSR6UtEdznb+@|u?2p~Be3CV z9d_99kCQ#6D4~TGDQ%%CTPG_78$|)}@E*O_+>q@Mta{i&!ODJvCNUr{P}SdIhoz2U zL1XnbHpcU*`_U>8i!}eDg*W%5w4Ogtmu=QOkk8BUL|Ly-t8||n9-Zxhyd?E=9Y^mH zj^EeB`S=fQcelVF>kF`nor3Y7&0oVs;_6)!2Y)hGXAsw_*m$ z;yUfO7^9Fl(OcGV*w&t!S6Q1L8Wz!*%VA)SAYn4(!k6snbuW?My*~hu(VKvy(hArr zlX0p7a8-v4wUMWl$jwuRuZ-g!nMxOwc~#;OJG645dj@#*hzPl+o?0N%B7fJ@MKCT{EtWXRjTex7>^Q$G!ZgBO zISh#3dw;nV?Ziv;5#L3?xJ71hk+%jG z&d6ODji|^NnpslZ!#AzwcD#@yb+<5c@OK#!<^TDi z0r5q!?jZW8UB8$YGenWtM;aK0CX(jLHY!YOQ>!Br=e+w{LesI%-S-Mv0iJnf=iANr z#EFfv1G0LvQzw%XJ4xs?j2p%5;AJ&g_8AP^&zpIi=lGB z$*CwmqK-dDs*1o@h2I#Dh0E!8+-BeyN!P6T_$}Q>JjcNTmR2 zT%#eAi(CpYN0Pe(HHa-i7&bvlom(szh(9!Zaw?@`mvo<$J!@vx@%%)w6YwYK+1K<= z)8xPC-P+b?!2Cax1d8H``1Eka$}G=H;q@7k@Qf=z`N+Q2pFVveY1^NtId0Z3cu*GB zF+Xz7tM0DZHRs5HQAwK|DSiTkhYiA1 zXvoafgwsp;ny(`HgpTrZOFA!qUcZ7I>bK6FtLUufC~O|)JP|CNu!en(U|0m7&7_NL zjUD4svXNNBN5ugPAL`~#Am-f9M9pr$EDuH?&4j}qkxO5vVL2*zyGnVX#>B}$9#3B4Z{N@1liqRFwl&}zP7YfYn{c(tU~UbWz&oIzh7TBPVs>vir>`c zc5N$^*VLI(j-Y*;NpR>D=6fnpwZWc}x*DU=G~!Q$BXNC`8CPFJ4zf6tR1Ejft}m%6 zasf9S-=o-?5|Q~0OC2wQ$Iye4(u!9gKn_Xd1cN+wQ{BWsyU zw^+)9`vTL+`syMx?WDXmEG$e>fWW;e8Fr@74*f^4FCbS_VmP8^NovW*!aEg*U4=u%^M1=Emj4jzoy`QB64};E%=+na{sd(0XVN4(qsT}RLj~s= zQh)r7!^%UKLL~O*7^AULEmHIHI>TXha+;PrfM%ozVxmDqX4k*fxC<5&HF2EhVL6-gp@kO#CW`CjUfUMmlYg!=J zd{>s;gMGf|;PqcuAbh9-Iiau<^Fy_2q-=`3QGOeXA30zFCytw9J+L&$j*EhKSV$%- z?N|A_ig0%e?6gK;hg=N`V)MI8zEHgMEdD$tC+*Am7;FHb2)NJs1bs#KQ~LUb4|MoE zktQX567CMEd-ezPvV3i`(jJNaq)M$))Nb-kQVyrE z%gr`_x^%KCFeQ1^tcsoO$*Z46&c3o$Km+LCws6iMUFSp}Cf4^>)d|dO7)0;BC1FgjK;AX=W|{dz9st zkx~R!P>liA8Dv0xz5u7V#1J9;IBdF(=mk>iFE3QK_s|q)Q)bIoa@ypWSq$6LGp0m2 zII``uLZ`jccGjY?_sx+OaRs<;q1tL_5yM5CT|i9C|7I<`asLJJt%cSyB79$}9J0Ck zW@vEDB;~ya`{>ujz41@`bzw5x`baWny+In|c-@nspQK6+785&j>{3R}Vk0XI zPSU2e=MQvGhL;M0Dlk;r$emM-Q1Xvk!uJGhE|a#K<-~P)7M1zb-&}==gZr(hHSEev zUezQlEKH($EVkNbi2tMgzoh12w~=V^@RJh*s+~PH{qt?AG)0zlZO=Vqh*gIdvb?Xz z&rBg}G#G6b@$;3RLLX5utd5?Hqfd?F@61!<5VGj$<#B(Zm6tUmm2zEo^{G+OMYK@E z#d8CW35s9nhB>F6aE%t~Y57bGQ)xGi|2pwf*G-#gt2H$;(kb(Zjm#|gT48oHaAPr^ z1EyEr#t+>#2aUm{+NvUgJpgV86h>cL-5?WCRH4vi-;w~t^6hmq#>4)f>`j)4DR$xbsTTdE{yIDH^o9>^Dcy+ROU-- zTEBi+mKNYfg-pW7OQPYQcB-iW@)h+lyIB4Ky6i^Toea%%!r*Gb2R@aFQ|$)X*!hg`Lw6wKp9;O;O(qw7WPhBpR}1>*3MP@?_38J>_3Hw zi!M>VXn;M*L$c~A@z%qO`KV9__T%P;7(*&vr6YBM7L@AMIi8>oQN0D<%AzQ`^&_j3mizl>6nyz|K^6hO@2m+r ziN8~;Bp(u*k63&v>JvBe<3Mc~6iXidpQ%EfAyQd7vQag7Dh*aA7t$8!=3F*?^y$PI zbeE|+mPM*fbAtT5ypK0jRaMb5dHJ;I!@<<)$9|xdTryat9`zv8?EMp3x(?Ez%HQ`| zuID~Rism?;dbipLjH*`!P1MNg`(GLBz8{5RQCKv518S4G-vUu{r?j)pFAIO z^v-+`A6;i$2DY|xLE6yk8Kg)={c1LnE(m`6FX_|$$oK41abrYc5AlLeQy26@u1{?f z&_(NPlbC1I4L9ZOkA0;a`La||?#y}M6u!dE3?A^{63VxwzrRkqr=eBd60-(rfMqfr z)e%Uw4pwpQ;BS?ikbg&O1Dy3@P{Z7_d!?@mifL@F9r?R8$5p_BFDu zjl`dJl4n>f9;k&=4I(@C>uY$LfQ4&2HpYiWTx#_53b2E6DExmgu)tL zaR%`r3=D}RN&?V^dadWg9z?HN2h@nmY0tzZ2)?@m+um0oF_m3=%-z1zmR}i~?6p}) z9J;C7?Kssn&U#Zz(@sT{$Vw5__pqr75Cf$7k|p%2OChMd5?6@t-BVH4=aIC1n_lu1 zcN|U`@``xX*$nGZi2)Hr((n${%_9I3>#!tgq_9*$XH7P$NR2@ePe?n}z>Ca6at=20 z46;NO6@~J9SLBFm;iyNj0mTtcB>293+iWB4kmRcAy=TO0P#0Z24G6*@m z|5?wN3A?nbtoS~CNBe``r(6+!*i(G>KE91ewv5%yN0LQ99UGakRvWx%=I`|=X-DFW zxi|h~0X=!QN~9jFL@cO;6-9R^EqXH&xe{4#wMzlxucqi%`rigbmBI-{6E0n&%a-NS zvCw)~@GHOr=?%>)U#>iK3@{%oH@0DMB7|yN%ePH_UGSVSns!K>O;bkAW$IBE!!>h0 zW2)J*&TsnuR+0MA{`zfFp6{AN58iWbi1l2*vNA6P^Wi}H0E|j+2GmCuop#Dy|E3g7 z;E1aYvc|eN_+M|lY~CtdxqK}ZW$oS^jNJc80hU-|poO90=U|D__|ZO{9M}P6MWYO+ zT5~vmCp?!(YDU`JJD66}lrE|PPl7Q5OBbU>vsh50(v}G8B=>7|m>mhPV+=3AjohGn z4JthoE)|3UsHRrCSw83Tfc-T0`KcZ8BGTrb3I_V|0zAZ;oy9D2dE?c$?*VEI>+C68^9CF8Yn#vCL;iW>|y=VWPF1>5e zux;)Ze8U0tE6$bM^|P} zSiRi(3yd7+Wf#OWmn*M|%U>#gzFUMdr~5}%7q|{_h;)&PkF0<>i9K|RRFX#d);+vL zIz^YylrPE{NqV6J@vh1K^V^8`lb1SOxu`?fb$D*bE0w9s4~W;TXD-l#4j|oqtoc8# z$nsGMJ{Xa)mg#nt`F3@JH-5QF^JBFh|KG;>b@6Hir42-=yUlovt}*BeOK$g zowz)8K)X!lW^P9DFtTb)@mWRRvX_J{6>s z7H%%`Vc?1jzH|FKpZOF#rV#+af(M;bALO6Br`<4uZ7^^Pw8|hQd{aXRN{jRV_Jifh zHheT1iJ1um$2&|9=t$A|7$fTgAV}>WbB~PutvObg)PKbnO4hlC#vq5-{!oS^kH_by$X> zfgw~v1^6at#;&7EN1{4Q4RGJ1(cfK_244uS^Pkxx|@H$j{hf&0u&EFD8G2eyJ; z>JlL{hDf_-TcfDPS_D*f?ccQv3IPxzMO=;Kt^Si#eZ z4~EF}VN3fYhAY`z@*n3+)^n1>LH+KjiLf-}J`>5%;e(Yt3d$<(;EX0f=kkRDYMtfT zD3OpkD$cb%qOEzAiwt*5mOj~;rD5L4z@?*Q0%(hu3=girR z6Y%yc!dD?>1Pu^)1MUdlQ-L$)hk4b!_#t}$j{7!w(B5v zFW)D_eULY6)>#mq)E4;<9gjL`DR336pi zk(iDt|vja}@O-7Qv%7zk@Q)mzfz5=PV8!q(Ge6GmiA z&l}*tX)H<@4fOA*tU_Fmzf}lfP!z5C7GKlG^JazpBB8`b*Rt)41-G%Q(K{BIhwaH+ zmv{z!nRpY2jxFKPa*yIrv;-U&5tQrF~Ji*;$JUUlz*sb2Wyi!`bm8Au0oRJ7T4&%L_br--(9b z5%|L8iojFr*F#3!6RSdr_CXQrV(lyVj_giDI^O`Qh3z_7v zqw5H*Yh>}X=qjF9_Xm%}`d3W}A%N-=olED&D5FF-+=tRo`WT8Y9JO_k%Wz-_grVPg zzXK9++Q1BD@I{USLkiYWKtw_gOT;Ebs_F87#5E=G67-KPv-!eW*Gii1Vo!~%X5{J+ zhxFpI>?W1N1p6F&)H*r83j=*#Bh25~Jm;QLqZ#?e_NPv|L`yyBbn z^OyJXbg$USCooqGG@2=Qc{lsR%L9nvsd%Gm;Xx;N{F^UDi)+j)zgWdzihN$BGj)bW z1epWyIniz$)d|Oh&a-E~a@)*;XCGj_0=~2AzzN@{JoaFSbVc2Z0)2O2B~twgAwU6_n8dOD52VUfWd%NQPS2t;F)nq!E}4$X`g z1{2#y$&F)Sz9hd=&(0m1sfn=5Men)K^ZTs{u-a!<^0BZQ?{IhG2aDO4$|k~uuI4NP zZN`niG7tTIhz74n@;1PKZz09FE#XIw=zuAi6?dViK3@ttx4V4&wB)H77bNKS^n+-X z{n&Lj+tWQB2B`g2dKbG$1J@W1JKwt+A0LWPclBf7-E3BPlw=b#6x*qE`jkn5$g|GO zIzr&zpAwFHGuN!A)SLh;CNf*?M0E6v=(!$k9nVwfua~G5Oi!vYylK+Gq>$3xcnHEF{DZ3W%jkZA8oV(1d# z7*Z;RbM+yy>p)4oRuw^GCg5~_zXUiM?+fcF4>;p-N7G*mr513teok3FfxgG;ApN!R z2%YYBrC}k7XXI5)Ip*rM`>2me?N;1ZVpMmciI^IaIIW#lp)9K5GJt`Tb&3>xS6WaA z+hOdPnS9M;gf4!dK0hvP~!6Ix(N$&l8>x`uROXHPV9>rP$3TW>XQGsrb`h z8j|YGlZ&-Hk?Id3uA6WGsNl5+scZ;L?Ikyz3gKfQxpdnr=)W(iS#;czb{k+31RHuo zPq!|iAK))pqCaUTDcP;L6qoy17(23KazcAcBCKCe^I@twJOt`Up8Fs(zmv1e4QhqR z_=z{i>UmBwd{jfZ$_(-h18Nq9o3s;aJT1EM0tA4wWxw0l@qpzgWnxs?`(%IePD(VL zcz9EOZ0X+%6X^rtUpK-rLhy-Fn2i;?jP0fYh^JLqvY+8GkA^_dy{h1` zO%^&ZKrU?SqGb%RfCw?9(PhQ2Cksb%e`s$DPG)K%FD2lLj)m2o$P zyau+OmcinrvH#b-h;)H8SmSs@j#hKeoT=o!7D*Dc*$``eO8PZ5_ zvo&J7YsBm)#E0k6U6lAfn{r2(t#d6l*&!ccDf)*OoR-$Z%>T_aBEgRGDH`a^W9f0pGUE64f2@=I;2Sob^lhK$ea>B3O{K?bs`AwXec~4@-n`xt) z_XZ^upqtBUzKKDqxBa&T4ql?LusG*G+>66d5JBy#;^mw{!;eVJ|ES)BM~e_C1AwQd zpT7qOB{yOp6jRjs0C!Mv<3c0*yO|9Z%`8Rs)HU%$TAdcV)YNNr47@>zwhWY!mi4}h@RINu}BPpm2Fe_)!yW7gZpM0g!R_}h^1_dxaVXq2Mr-I;5~1E zl-#4a1C^l2sK1^*j#XpEUpkbZCo^O`mTe>Xwxk5g)UZY#B01dWKB^T^ zTN}G8%NS{Pe(G9dO~!^~O5D`?atOP)Aw_u~=oHx%S0coW8(^&4s=kt8MtF>SbAQBU zVqQVgFzTk6I$GXKx1=6y?*l8~Z`xhZmyGiIe>W`o*?}L>zr%4~H8!n7@N>?-CeEO@ z_NmzD>o*Zs4kB{Q{SB*6Qqg*aMG-#h?=*c|fjl+8MgMgFTLOzhlrfrDfQAsy0>4y# zr(zVoc=?VyZ_xkjgSd<5H)W!AgJgHBnZt734)vx#bTHC|3Fm}OFnNH%eB&iwpZ%5cU&grkNr(Y2Usq`;=gxgMeFCWp?43Gd z#u~l6U!8NBm+(P<6AHK2B&4vChTNqP2VJ}O!@yv~2`?8!Da}yJays-xj;2`d%z8dj zM~_mj5mlpv_O3oWGUGXgu}CSLKP&VX7|NpOW7BCDxL;x4_ z1INdaBt)g*7iWW6xQQ+i6*JSX1rgb0m#aCOKf zA=plB1N@oMdlIjX$8KCavYoMXmQo#DzjsY&?TXN zP-{Z{j;=pTj+7w*|Mqhn`4UG%Y)pa`Qy07}?nPCv4~;&a#Uy7u`c39h?(5(YIzlXi zRgBL$+F7dgS{ozF`e!L18|o%+{czjN{o+NlqZQu1ZsfR)^s0J=r&u%8cZBZfs85%% z8-5VL6UaJ*Tx4oKX^GeS(K0!Y#t248hv9=LPH5S(MY5h~kg?GFOXppGe7TzXb~x zENp~Kzqw!?`u)cb@`^=wck!J6ySM!(U00lllzqCNN!aG@bnvokwkLu`BI3(O`E&;x zCwMfaH~fCgQtUqfkFPogpXWPLqP;bd4%L%8W}WaPgA`RvC~MSrjj8ilN8z>m-7Q5x0UO*PatO|@^)tUc4S z0{AdMxLParLlf>XRFsoR;bub0o^Sly0=~W=JzA*=ziKGoTf%8JpW7%;uzH|tt}CQ{ z8G%vTZEdLa<~(a%qAPG1bfo-!{CzOGyY{P!Hho5ZVPyN89r((r>vrDG)C5ja43-JU z6;Z6mbtf0Vl*3`v5TjbCVv{Tg1&4dA}oxLE&avA#UyD;;)sYy$5&a z$)?>2@20}e`AZKgZzcGb+|ZH@sl@P~f>Y{=WAo@C%lP+*A=K>>2R^b4iv6A8O2lZB z9OVPs7jDOnBG`p(y>$z8Q67KR3<5h%Yu4MW;3>R44IQ%3kUkBX+UK-X-!bym6pS{W zxa}BEZc>r0MzHsJqNlvY2Rd3dLGmCl4_NzPS+VlR``t=2M3x3Q7wha-oLLW9-^sWE zcqr6!_9*JFzw$AY{tWzvP8-ONY#oEa-S;Ptiu3`~q!A%6X zGU!glf_4Y=KE<^55ja+I16aDAwhD-}w*4iNZVu!GJ0*{pYYN`?zRNa1S&rP@1)fN|0dklt*`SK&q<5UVToNV5F!?Zr+eD3<@H%+oV`S=@2M0#&`j-Q? z@~^_)56IrmZ<~>uwA&c&nB&Bn_O778VA_2UtIJ&Af&vR}3yANROXlwxU@1<{Nzi0~6q7|tSY z&hsB4`${7Kp#eBJ(_`n%^j_HKoOrF|xbLK_Wv1kIat0rX!fsPaygXWqTLXi}MbQiTQ7JMRiMD>VSH0swu##0C6z#8#GUVYa39S6U?S=4Wvhf-?5tFbdB z_dVxt;FP4e53`<@WqLTA5MQ~1P4K$kmMx5q{s@Gy3BuOc;;D_Jch5*%J7;MkV(O7) z?Mt(GpSCdXH|LQz2UcfSb;r{(ZqlOom=46?e6L$VF8#20842V2A^tj07xV4(peA?1 z4Pv2<(5j56kW-&dJ8Llj3&qSn6$Uis7TW&XBa2>uAzgZTRzj~!4 zi}ohYuqB`|<9AMthR+xr7`DZt$1>auit6j-%ZwtcTpn^+Mfcx5W}nmQ_+r(90rgHZ z!2>GTH=!48h$mgT2=pY5lt))NumOWf$3r!D)}-=G56RRGc$Z-BRVdrbwo|fxK8NLDs0DJTi1mzt zV+g6eN*$uBASy23toou!db8;ATLhu6La*UUq$1gx(5NVL%h|@&x5q2 z*;&>|W=kP;&KQ&T09ibaYHJ{E0w;CWhc(S{=k|j*&9xCGfLtxsfUT9&?t!TZ|;5!cvrEsZ)?74lik9Sk180OJv!x6%zh@}8{;4*i38ow_fyG?TPdx1KAt1C>IPBvdBCGP<^v4VE_M94@WRQp}p zDn;kadz}EHi7F1S0A||vnN!JQ2PJG}#k-w7UT77PW8nWrUSR`4KUL=|R>>Vhc#4M( zx*cUb1$00F_>lI(9Hh#u#2rK4zk9Oy?p57y?^xR<62Qh1>k#=ydC@2S7Yhx=ZKLc3 zDiVLO13dYqr@tDDIv=m_u?C}-3A3Rmc24@F<#xG#Yu7{f$8yV3&;loqG6t& z9ntG4>OYM>iZ=fEhIUh@zK6BFtet%EimOwne~IC~zC{lUsuh)2Y^UdQJT_O)wJ=S9 zVYOA5vW0ZxeuKjm-_uZv)>LiSRM*Sd)5r1Z`|_B>W-qG?LfSvjU}usJ%?GPl&?JzA zTdJaej=}(#>u3QhZgZ+HtpmgXsQFZ+Wr1gy;h--c+z5a;J?NfzhLu6m(ih>b-+WG; zGX7@sL)TFQUvmE+SLYrV)82;twPwwsG&LpFj1Dsiu|rc4I?W`99JXR_r7bnlX%mHH zqM9`gm18-VsIl3b?HJh!sg+QP8e0gdi74qXI!-k+>%Dv4Ki=ng|MwBitlzqS_jO(0 zYo0_m@$+zB+pVW&z16za2p9(w0Y<)$Fzo~OeX1fHj1L+%k#l0{gw5;jWtmZ%2Gif|4xcP0J0ZiR46XyyJqNyF>-15<9OXs zz+gge~ zTOUZb1@5}K^+K!O$_=V?DdtwgdSIh^o&J_7pk@Q0lA792&-vR0KQ&x2I9hQ70SzI5 zIxRzA`X%fwl1euarqfbYd9SlZ6=8)VRkM4$r>|XNdS{|_GJ(VcWIQjW71jc}U!CbQ zUrDf)2N(1nV_ptKS0@-5B+(E?w0yupTrIG3ne+~9x$GS2-4>js@p(QXt3^b~KaULB z(>;))ameh7o7b*ANA9CYz3pBQ4O><3Bw0beJD!2=Jn!1euQ@F;NBOZ90hY9g4qZcU zhsz&>_}tJ68ngo=>!GYx=DkIA-`V2j&OX2cMiOV~Nyqn}C4Pfo8@Y9lBKgF({d#aro%zd|3&11|F# z^u0;oanuo`{{-RI0{?yeEU_NX-QEHNK_T}=`poZ)nSG?uLu+KQ&kfoMm_v;8PHYtE zF}PM4ojm_bHVF^8?KAKmg@fdlwVvMUp+izm?4i<_;fg9nor()?$jFUr4A0Ia$yJAT~iLMG|oRN?X*OEJ2a;6DFh;DXNir0OZiBmT0}zT ze9ztTzBuKa`!iN3a;{61HAWmA8nwYYeX-OnUar;*L$78l;Kmf*xV+0o{&cc|!(1$L z?}Q4jGNhv?6qijRbmJZ3cu4%BNg3pj>E+XgR+C3YbJ2Q#>I>axuxKO?a)GlFjkk2= zwlN<~I>v;Y(kiD}s(0h7FtmUp0fW^94yd}mFD#XZhU}x4%o+T$F-=x>!v&_ng>y3T z&xb~jPONY#a$qu9_wX8$#G&kVCV6@fvqXQv4>ykxZ|iM})f(-m<2qS`+{kTAUZ<}g zWpo^p86kUjm7I4QyXoYmD7Jui1>Tb4)GC{Xu)Qtgj;*~k7S}VPt)y>2;1vz69I%b7#SrjS|7fvJ zzHG~P^0m@{E5{}q{?n7}`E1ievl3_I*92ivj@|Ba1yjg^ zEyy9&NrY@!t|(i{AM9*tc}~T%m8a$fmC(aD^O|2{5h(uqbbO!W%G0*0$LI zE(RWn+lUkrYFShtd4B6Z$gYv|t0@3Zi!KYnAG+;6!cZ1jm@*lRRE4p3x&uopfn$I zq~|2cf7HYcSBHvN(efUPxCD0mB4yo80b4X$45ovsK`-eIApAeSTig;wOL{wF19E*F zvfe`Py*Zv_$Sdh1Ibq|$4_;izGV=+L0ie-UlApXM9o+@1@gxj!aA0BWLIHg716)H? z0SKF0ZxTsaX^^b#)r+Q?V!k%vZ*PX?ivmVo{`A_(X@@cY%u)1Bb|jKVHR|eh!3W>! zXmb$nY?Iv^xsWXF_n)SCh|AX_`AwzBtj`fpiE0|I?gLbkWy9Z$In&;W@u53~1+Yxg zcwe0)bf9HRhxiiOGg*;0H1`@T40*Hs0Q};YXYn;pa1Tfwe{M0^fP}@ngpI%sRgs8J zBKCZV_<(VQOJ?Y+wmD69!9TT{7GNgNRMy4&q^S6g*QJAA4b!$y|lBj4ya@? z1R8d8HWqFmosGf331m+_ym8omLN^={8$QvCTDd^HzfKXpk#*Joo~>!#MLhiXIZ-}k zmS_@oN`D5iMNc9~5~+9eV3Gv>KJ>ta^T2F&403&93Q^9}cK(%>@KR+PtpYhxMLr0|x5chl53uWD-OG3=X z46pCR;qxJo5;V33f~{)td+xOfkdt^ZSP>2I56{XS^b9wY-e8FOg+O5-xb}z`%xjoi zpJO&mb(42NU|=WWYn5Qki>^Vcj^z^$>^~QY*~NIo82|RSHxMzhrdP#j5V1r6TaY4> zduI-kFpt+>GB%!r)=F%2GAX$~l$gPcvLFsg(eC2Z^7FDsO~R5Tgv;dsedDG?%KDjg2XerN2ivsN>j*W&ne z;q(IC=ZJ8%c34o+Q^w*n8 z%7I%<;oo3^7s>SV)1laW=cL{0?EkU%ry;xb_*+->((W3CBo9ATc`w*kK4S4{Z`0c{ z9r0S$`p)ng`&XOwVM6nv+z0#rpvR{kekAda8W8;Z`;)4ehOkw}>B6`C1yM!9<&8Ay z(B2&szrWh3vsyIt;3Ll|XP=O?v-(ktooUj-7LVXgLRMbtq#0)2GYwt65N|P4iEgo) zQ()i5`p1--m)#Tb{YgQW%JoFSs$Y+75cezR%O3n=zjo`f?QGTk1qo?glVUj@&3Z1H z^t>aQ`-Q2KNWW^sk-Fz2+~Pl#0?fUAZ+w97#xBRW>2rLoEDU#aetXr%5jWTdeo7wJ z4{|PlVf4FDLh1*XqcN%W~yaBDSpy3=C+zEu6+$v>QyyX3{5{!wts_Z zizmkhWUM&~kcKcK+XUWI1zMZ}*yQmZrz2+{I%`8O+BHzR>SIZEZf`N>h7 z*?u=JP9Am=C+>CjpxEry>*xgheCi9zk1zOgF%an4O{HSmDaJW7bfc`b6=ztbXf;P| zXI{$KKb{e{y;o{D1|!K$e6VrI;cL_=SCrl*t_;4=Mytr1p2cCdVW_*YG* z=rSDxu~}}Ps5hojLNNUqo3rt|N8);uH>lNT48*7OR1=@|fT7c;9bfN9H%d_)o*eDY}MZ1Vb#>7VNUEeK~uCo=({>rRd#rh)KIpW=Ml!1vxyfK8A z@N4)4EP4?Qz`^T(nC-5i&Q*QYH@1vFg|YgdVp-Wp%tiX;Z!I62Gu9X~nM&zK|HKOB z{dDfy+gkKgAe_3+3eopa1=1;aOfW9*XcF8z^oQo|yBz}(?^&qw*HJnuA~F`4AT_^_6Sn3_hRc!r)qU;;jEXz&UQM$RZe*v)RjMf` zUfxVu=XtGVZ)1-AowNT17yS=U-O;kKh-9YoT znSJR_SNAXUMDLI*ix5-0iy?bwTGBX&JPx8)=h(_9S#Bpy{{HDCqkC1ddYpLut09SS zZlQCM8Vx>T)cC>B&6@11<0`**3TMX8335u?MNFx_*+lW{{7Q2bk|~kKtzSfObGD`K z($Svm*)b$$%Eaqik9zv_6NAsemJ6&G&LhpSc znZF+``hy+rY*A1FdX8v$oOi%7jmEIV$Z%dX@r?4$ruT<~s$-elvO#LS(p>K5-)6b6 z5c@L!UG}tZteM9JF?}8{xup zbMUwmhQ%SuOZa@BwPGs9;)mAex}@IS-WZyIG-iw>Fylld}(!LLwcmYvm_+A{i$$LdE(l3U+a%4&va^TOQ3i&v+SL)Tgy5d7D>zNK|S<(84g&PdJlw;5~aEY!K?N+ zzFd+}=hrTu>K^CM`XGV`jAZo9mI;pdV4dt#UBxMdY;xEJ{ysU3|0l7rJ?2f%6`r6n zJu2{FAAMaS{*j7C+Jwu6OmQ_$#b2Y^>A+OJUMrEd6=-y$7SGX>TO`tbGuzL2Mas_z zv)POGj_jl8mikV?xLIZPAS-L3ja;3jFnP(jMZ z4PtG-AvTvgw_-Fjlnp`76`>(}o~e93c~gddz5qX`VG$3f!42|qVI5&x zu0rq6r9E!G6=jD##19@cm?t0XeCN|ElHKy|APX%bU+v7I0L#1ZC5=(HUODGtrf^+7 zX!6B$^zz3abLY%?a;9KqzL%%l+KT^n(+i>ZN#&{9+8>$~adCALkwfK;>KoVSEiek) zZO|!9PJbr*x=9$L5Fx&2fAdyz-5AWg=5*Hs!Z~cy)qdQ!+xseSHoNF;zwJ_hxQl!6 zt8CnJJ>8$tYZ3RCBE<<;QI&hi0qC_Nz8B7}aBaE-*Q|OyY}TxTx)!*)j{RP;|15!8ZUv@wwpX~Y(nPHIs`voFOG=1bA}Gx@@(VQ*|6DaZ7)qzGN{TL9gEbFO9aeRM+RO|K-Bm8yqE z-6P%}MBUY8IKy@vWjKcCI(y|JXsW5RTk%|%Qm(0f*11I)@>enwnLSFcgwUU>S ztot;lU>;1&-&-pp$*`@oZ!+j6bhv(D*T~B#?Hb7ym&VAlYW&)f(6a{O_Nj3W<4Z2o z5eW32M2^^=lVlh`0^rt7t{0eDyh=y(cDX?oCU+ox>3^C~!xNLvku(Eyji0YC67^g7 z;E^tO-5&97QHCU?rh;Gw$33ooLbW20QzeJ2n9Txb7uEih2zCD{196R>>iw@xW#Bua zm}#RTMB&3PRKu7hcC$T7dCIOz=nN;$o0cU%?}%Z-u7&R!oo1Q*HS|#60rbt$*qUg} z@|QUm#?7D~+cUt~7J#g9ylhw2vSk{^sF|O}l^kO09u^bE7q{oO0CHQT9X~!RCwAw~ zooP@1+|7)kSg@T>3Y?&vJc)Ybxb)5XTX^79ErVN4`EZPOrBwKZdpTRnnD|b^nvb)R z;$H}=y0TCF<*9I`r-LOJ_XKCkV*}U9=(1&Ah;z%#$8|Hoj%ctKO?VPuGljusB&ao zxnA9kSo&7s?yoIEJj#EkU;e!1)!fq{*pPZFOyL`1r9yrST|b{rSMrFXe}vOFxPS6W z%wgt-mTs6=ynW^>Z{~NkySuyWwFAQ1x#*SNU`4y|zmS9`T*?g1nKUM`xt9aX2Dw79 zYbZ>tAM9$d?%KFxzZ}PB*S?cN8D(P1Pju^6;iM}0oD3~%dF6!UgNW~(%Tvui1DTN3 zsosGO!K<%WUaqg0-(DsxBnVEk1(9YvH_n}4C=bznS(hu+rs7;Q+Fbo@^d@r>VOsNl zLlafY<($^hp*$xdQXA@#sBeYf;y3M2r>E_h7|9G_W_TkTf7*-1-3Eji@q;2P1TwF>}YY)b3M)+Sm zm2#efK%(d1ynf?*L&VdWz7O{rb1QlTlIcf08*b}POK_Jv`QFQmn~}Q+Oaze{4i2HA zPmcum2n^%bjH%}w=Ec(!-|5}y4E-gDvdITtHKimOef{uE2rUa&DK-ETdP0UKK0_d= zV@Xwn-nN=y1nG!wjSIHNoLFPcB-S{PH?fa2w}SEa57WV}vHH1TXR#i}h!)0dcp}^c zRa~%+=eu6^(eKcFXjlsb8_>YQqB#j#o!yBwnEFw3ZEbh+d7pIEEK~39=Q1}nuMZ-; z+4rhs2!C6+)7o@h+a=btl_)S=t&_p+l7&pwpGXB3|BDVEw}I^RKfp`M({lG`k9n`d ztR?!}^baY$Z6+W~b?B_QWMA$+>G2+SmDSNQCbv1xInF>AuBJ9pRNUgX8b*bMa?|7h zdgNctOe;0e@y%6^IL|-1XGyz1%8nAb?frg zTbNszurh&@HhBsXGhcG=^%Qzon9}^r-P7!ecb{Q(yu{jq?jt|R@`?nqTm6wLS5&bK zUz+I0X)2A_ARd`;`wPB*zh&`d#_lq&f?rq@pHsIKQbLNL6|Wl^vA#1bMN?K9%yW_+ z1f=o8F6%IY^@6iEH%RbJmo~0z-bCm(6Q{lL(nwK14{V^gAD%j^s5}tMu0fvKx@h`%wRe zY(cYD&)z7XgYVQy6OEJXD7OY7D1X+O!W>V$ma@FgM)}vn)f^3;qBq_?!WaQm*1MX@ zr{&1Ra3|#H{&-_;bAA2ZT`IKxM`*I=-mni?0^LcT=UHis?UnDy6`qoubPm&d z9gJ7EgE+|RdH?t)D-^lZfr5pzuA zZ+i8fLgL+p+Y4S(xOn%lwvC0Ew&QMaJc}5V`a2^?r`|R+>Tx3ez*&F~3MlS8D`HBo zKsx$KfZUv9+8P$69%kI8n!$sHr(4H>S4}cBypC?Tb3VOQ3Ude1_sRm~b2msFwE1$7uX?QJQ8Q!`lI4L+yIgM}FtPk`71XZ5q^f5bTf2qVS-|L4p&@l#UQmd>=%f5mAH z=bh6`sN*SJad&0TnEf=|Iyy`FqwNwC1k$QEp`)68=$rB-rQ6VpU+oL}z`8V6H!ON6 zuub&+p$MR-`4I0m2e_uWZ#ycQ?%x)weKuWXj+)EWTb2iA?3CD693&+Ria7Wwtt=8E zYUCfi;HEyE#dh*PvJc`vAjpC<>ES1sd;vi;H+}&1HS{$~evK4OgE!u1e5mo4@t#np z0(A1K$Z{y^IhSNRKj=h`Bzqoo*Zr6h{*;?YL#nPh#@eQ5J&No<>ORU#4Br+nA?QX~ zPqyvU9j#7T-E<+d{cbCWgHwU6P#|AZ`0*z8WZTf&`_D|v#8 zv`bFUe{(nJv=+B<-If_n)WZ!aVCLstO$H~ncq$jT8MnOYYTvUF$o2kAY;f@6c@T82 zP!u@2g5}#4rFdaMP|V{;pGm$-vZ|9+udkBj>0h0Zn)UvPkBw%Q31xrCS2Kc}R)rZL z_CWTHRc@MUBeL&v{2WTx-?mMZEuoDq6&vvj4qn}_1l2QPy)yzth zWa?a!D789+P53Fza(<(G*%+rG>(}M4jvN zS@Txd<(k)c7&3EC))uOCEERi@3?afmR^(>#(q;VQ5-qtQY_CGDxXons6oNDqf54Iwp-u zm&!1?tQjg0kuv<1%l6(+@baO*a8#B?sF-~B@Hfo(XyxJD%rVG%b|_?8d!$j59u#jL`##r2`zIdEkW?NU^a1RePK;>m6@SFfnty{G{$ z6CW$5h@Ka8Vd38#V}!`$rv8WHV=tKAF+;3Uh>+<}{cwTxT{RZR03hY0?MxL)$=dMD zf`@}gE^_e2wX)QqQSd0c@O_;n&|=@lIy`Sut|`-OOo?kKt` zi$#&Hp|KoQ)NtY&{i#?#bSN1LN_`?1*NyI$y8B3Kx#%ut%O(g>>QI)_C2{w0^y0)j zfS>E+UZlHnR~%w@Hq3>+QKVN)rXXYNQyfNw*}EIApusjPmo7#98YbPO5=B2DZ*nSK zD;!5xabi4rA^3#!K7;xNLCn3e@o+pNO!3Sin|*)X(bIi)yE?o-aZ7!UT|?}{gAIc6 z@(qrjg~0^=^mC)NmqG(VPN9?2OAL{x0MoX>T=)Vf7s*EDC(umBS!HR5ayjfa345*Z zRf}+QgESq}&~N-ZjC#cPliUF1IH`mgDowuCTxL9M<=U6o^lizYV~hy#WU6-R$~Q?d z6h;-fl#-Qa_@IbS7!6>C2o4PR7EggGCk3g?stPP+=E11sm8p3hrH=cM;k{skJLYRx z75w|}zo*6akj@%f_jktYRT6K{J&F#ysr`%Wpr*V6DUW)aYBW#FdRPAV+2a-4wAE9Q zl9hd|=m&M{=xdZ6XNO<~0y}@hVod~c@!@cC)S~P>pIt^B=u~LD!<+vcL=DG;Jv15r!dOp*G;R6{B+-@y2?ZlCSzmEXut zpCNX&zQ1o&-u@QB9g}^}qEdJLW&#}Jr)C$u4bChIqq_d#MFHj)<@7K~aV5McHz$oU z&;E!)>q_|iILc6SGQ-s?$NSs@k^PTB?Iop8u6o{l{8G1z>@=k2v@$T5!Z4nbVw_8h zZt`m{-PYiWtW-(^mK}S#4V-(tcwr;LEr{V@Q>$X`3Nq`HQZ+kR&)8`k_Jjo!?DCr18U>`?K9IODW^ zEw9^7GkfsBv&%A;@#Ds+_#S0_*-|aZrMrf>(vL{sQn%$d;!jl_CnW_j(ksx>Lbg;r zMLHhK+y)1Ybj)RG-O%enn$5)6C-A$J5=qjy&Z}Jn<^%HuWH-$g4zp{UCHf(@qN{e5 z1sY^<B7Z}lZ%Z8VAZ;MU@1Qd+ZuuH>6tr*JdbO6 zL`w@%dXaX%Mc${iE)DPBJ72zhng2Xrz`eRoxJS3BLdKqxqS3P49{+f7cJ}AF%6IeR zU3)Gq8s=QzQCL0_2M~$7Wpj^9(Rs#*yDjxZ0W=IQ82q1#a1&F?j7>+nm4I4%vQ49y znLqZ`JdeEZWBqaKoB^`wYzigen!325+K6A(se^6E3_$UnI(=p?+nDL)xt5wr^<%2?>}OTEls7!};zt`G%x{m!8_|yb4@z_V)-VP*qJkul8M_ZLZS3HN-DT#}l6|mI6e1W6a`y^A`W!|@(Wzu6%#It9# z8I6kZev3@XXT-JCPp4K&R5znc>$gnpcyRnq3^WV#EeI zCo$AJa9H}Ba;}}V?qAlYipODtzRMOAWfS%1Yc6m*8IXMbmJSwqH}XEQoH6V3y@@4P z3lEyynI!u3c)zj&@t*zMF!NU9^x8+vppe??7gZ_?@h|!em49tdK7MYwlGrP67o^Rt z%PxP5=nx~ihMu>YBn7IplS9Eo#5Z83&ZO`Pp{M&ZWTl-M_cpRVafjS$@t>_co9t~~ zNAO=BiO4>&i#csz!i?*GsZM!+>Pk$@otsD`ZT|6u`K;s_^Ykpw2n5KWH<;nbDL;~w z9#PAzkg7+_zyH=DHPaWXP9alO@q*&Lqb$$X6DH2EBl>j|EB-6bCrc&`=Ak8&UwwlP zwDinTZl9zGJ9OwQ;S)!q?!(O-^?bF|McXV5r0S??a~&!Ue}Bt?Tfx_)R1Gu9L&NN8 zD#g|roO!|6IY?X6#hxdoa%ydw3DK60+Bmd$wb7k3D?_N;*V?sfCP49Ly9Xc_X3d2) zy>~CT*bhBhW_%pr3G$VtmvY)AiTW#5V;{2Lrg@MKjf3YYG8xUQXT4wW!=(5h^xkLI zv2^f@ou2eigEuTzbu+#O052Y+`!BJ&XaQd1LactcmU1Jb;h#9$5Jwf|u5+n*Ygj8| zYtG2}z#xiJI(|gXd`F-jiYm%k~T%X{kNu{{K0|M7G2uNgG9NJjQus zW`;<=cn@i1gPMbA9aXI#{Jwgt=!u-Nelf${MYwJywfI_=Y?JM{b%0rZoVv+9?l9xb z4=wAP+OCz9vi6S}l}sHMZ#Lob#{q`e&B{(?6K+g?Tq3gPHZ-6+>D~|wZW2>VZ1(R* z@7y_xiFaCEmI7yvrrb);nL+_h5rDjmuq4(GFEta%t`tGE1w-W5DbJ2Ujke8(fzg~C zGu80mg}`p-R=<#+`0bx4OdsQggr8x#( zrbxRJpBxuX3OWaoRyG0^vUBxjM64a*&Mro7TRu(;o~}1P9ZOWA7cJrq5U`f%WYLNo zL}`XFU72ztPXOaUoZ&x*2OL1KUcSi;$Dc>0M)sB0j7Xyp(YmHg4?cnXD)TZ{S;nui z?B6X=T0{NB7GwtDsT6pp@4tmDS&T#Gn?X$tppWf)8evf!d-7;R6}o-ee5!E*Mw||n zaDJ6Cv>!`TOsy`$onOx`mL;^Y5|)`E^KG)+hDlKrD*CRr`(B<#WoR=b`qzz%xo%Y7`~3qPQ&D7?Jy`+f4=eu(8^d65 zdl@?p|J%XAag;R?QR_7pJ_oKTz^QIzKS=yO6)w^ zY}q^FT(Z~EF{J-CltqjhmLwR7xiz86H`nHpZ1qANTE|e=5Y?E+M3pB4gC4Df5GSd6}APF4HRhr6*YHM+Yc zdLq?PD6xJ&Ud3AL=WLbyBJ1}ThZEcpRd=%J9d+U#^y||`Mp@f=yqM)gsB+T`g>XuA zp^12kX@mD6MQ@j*%GJmSwpgjm*3^8$EOrF}d$LuwY0%Q=q<2}*#iL}KMe(npNKz@q zh2bJgJw&PaVtJZV9CQz0sJ_j>HVVlcJ?$-AnOzlYCU9D)f(9 zdwZ8Dybej#izvEk5K(f_v;$dvD>|hvWbRnD;hZ5}^ATDVQ7*S)pI?5}pylPh9?`VN ze95S3nq_9Gb1H29(oD{18COx8kxNwu^EH`l24sfR(za zuv{x5Vpe-mM(*6$M}Nl7SVxcayLvr>?^2N>o)kUU?CxMGHl-QJ6vr*def#!t^7v#_ z(omO!Y+~Hi>d%!~tK1g=wb=aphs@5Ew&!2|{NJz@xW(xMy)O*?yW-}W$Lcu88FOd}89nK*%c~XJ}5z>HmdP+3;d^OO&f;8X$iU%lohcdN;>01O?`N|jt z?A)FuJ9g0>*EyB_h@p)Cgr5FYV;t<`rO3TRF2g5v@YO$C-MUUi1Mh;un zDIs|3HrQVC16fKQiQ;t0hJ}`OrQYBzl;h5KL0*>yrza|8v~@^o&Lwvb;t(_KC|f` zJY5H&E`XEWku#7ADf={+6M+ zk;)F^NM-pB;?-B_)kLAamZa7WO2jYdP2q#qYZn_F05UVnW10$xyUITItxB_y*IE>vy8@VST%T! z-B$N10p^mVNQnm(6F>@8K?qqcvypF4)Bkgp?D?Q=R1e0X>Nz6zLpf^NIgJ7S=*nZsJpJP_W%k2jniy;YGT>vtHmEo?;Z=UB1OA;OP)iuIK+P z`R4`MCJ^ASWOa7U4F2Cs7ewz2Q1i8wHg^OQXXhKfZ-y3#`{unVk}RA5z{i!fyRXnD zM-NZ_lqIMSN(o<1L?N0bfb6Z7_HRRnzR2A6-NfIPRqOS+-~kz=`iE(}+8K*ZW7jVY zr`{-Q1#+8&5^&ao;8YKB1+aH6NWB?-<}WLH5gl^a8Dot+@jYczFV1|9tm7cZWQG%F zn1^jF7Ii#Byq;*HZI`WG@!W7x&T#tDX9o?O;IJJD=vwsc-FayOi4ecoI|S=KqOUWpoZ@*i2&5yu~$Pw&^#KU%PY zpP*hWoKqhj31+)NKH?7WZITvB=RK;#LZ(3Uk2PB{^jNS%^uCUrp^Yv1aP-Hu?>eBMQM1k!^wEV$S?753vw|!$ zfr|olBk|l~Ywv7y`)#l2>av`HxoP{artpayogZ%TOiMcdT;K;@|pIOX@NAAJF~aWvasGD_1fWeGFyRbvsk; zhM<8I#Nbo2U@g00k(BW-+GphuXIqtdvy9D_wr#K4oU~EAn^8 zk)IJ*yz&OXFwxNIRk38RKHn*PCojl9-6khwTjf66eQi|LM4?TZ-bqiUL+xH?K4P&R zK5MZ9euMmsZnfZxiu*de8dRh*cVX7J-$d>BGj>+1qcQ<9Ddi5Yv!zl0;^Ss0!v2y| z4B`_Wh5mG+>>7cZ*@BaF^R63C8MiX{{2jn-z?f~Jha_xWin@X~YdUI`J6cVYKdC14 zO1MKcSN)V`j52)gY`!Kcm0>*AVbI{%kbD4rS~{w+mU+a9AZE8(tbF7NmtM$Z&r|)V zv0Qth{qX^_LqF$xX``~|nI!2c4-F<9+e(4ykrga9$QzF0nc_y^d;T7%T)k(jt84LU z=n+oPu>b`%S*LNI{K{iQW&UTHC#`Wi^|#c_t@bfANGsg2;^yWGcREF%3e{wqRBTx} z>nWGG@2CCpfjqrXy{c36F#+|I;02_Y-xkdX6FI@lj|2h80k* zU)sl^oAfo<@$~e6U!49`pRcY4Ax`F=!1SN^>nkUxF)sOCkE0WR=6RkaPEBE`CQBkk zOMcYcYzA0Qy7mXwvnUe1UB28|dczbAF;ts1OglE=Q-oN*WRx4v(&U#3q=Bo^*iDgG zw;#Q`Fqdkj2L-K?q4uD((PM=BNhxLke8YnBF^fd&Ds!c6l&V%>p5L6L7j#9dnxeWt zr5!kEI#Jf@V7npS{D$cyliAD>){K(6G&VHMr#DU@041VfB`TDbihK{^l_m_bUgg-P z@YGsF$VG$#Olhau8Wk|neyEI8v7B+nWVXCeS8&|``dx{u;W-@9IyM2Cq|k^N9-cbm zJZ=9&1fpLZ7yvbT$EjB!yif#^AM^a-AuybUpK5V-xy3I*^GIZMB`tV9dVhg2)Q!~N zN{73TTho}}+$`|@STq;f?M0hJ<@=H%c%5{7F0muuJ6*dUhe%xQi0nD_8@5xq2tT}| zHJ9=@sMLwLJ0AJ)5^m*%6GzKIpaGo@rK+w8{Edcr3mU*VdARH_t>U+|SS8e)*-KWw zFj7k;@`oe@wH|3cDL12_yp1`%Dv*~KtcT4Jz^U9=DYze^T2B&MEws?J-*-~HF;HAF zghhZJ1Wl1Gn3@qB(!Hn6e9YlXZ&0FB(ve9$ZRrr(@5TUFeSI8$D{SlH?*6gM)R5_U zA5!sJ1_auj-M6gidaDo4Is$>V_(xzZg$KgNZ4}U3zmVR`i^2fevO^@prfpD|YH#h- z9c9o8t{Wja`W;Fr&V_ugF@5J?m<~Lr>nOqv(9-<|Q4Ax3Qs_X=X<+Zg9hf0V57*+@ z2viXnnnv5}VRots-~!K<_I)g4dzF3_DNRS}ko%V)54>3UdglseS;~g3tOaEh<8XT* zT52Z>6@yYgX7=*ufWLhCnUTx(HH1lL9N)r$_}T2&=Nl+2;YqO zb~;!_KM?X{#l(g*78EOHmq(pM?vBXlPUjf~sY|ACa>^OCsq}fI^gEc;>@c?Q15M}- z6*QTL0gi-!OiHVhPtiOgEEju~L?|_NwZzQoN|j|pVjE`DF!a6I5!(84=a+&TfM;h{ zr`p$LP_gSsEHktTXum)^<0ucrHLOknGDLhqzO%~J+CPdryP|H|1^u3WStItFwFs(R z$EZ@j&B1F9%YPwr*}OILr_V*?j-ydL40?Z0-|~LFfAbs76Vt^I-~^QqKJ^&hnEQrv zpy>x=zjx1TGXK=6r+DcB>R00i6mRHO#{T|$7+?0MU^j&42Vf4)BDe`ra6EWj5jpIFm%j>SF0cXa~?(0FsC!a8FjYydV9 zE~qGq-snM^ifP<^Vf61gsq20wIY1P*t!T`u&LXrfW!7(RdGsJ;XXi4XKjk1 z^>liKQkN8gu2OG@E5yg|2b|U##^A`EJCeU2|4SAm4+AK&SBXR?jA;p`*v^Kq4ZNre zjT2NsXVKY(p+j`>XXMTW*2J~KraqQieB9R_{X^iq2ORb?#F#XDjb@>0%*sRVPNEIV3L)mo7tj3N~+P?eFdBr845Pm zz`I-*z3S>mPYTX;upk%@lnZU3#J?ond6abm-PykR`({p9p~er&(C*2$(vY1h@1&4f zRkm?FFSvGON%^i0?FF}E<*(;U*kWo9r!<+`?b1d*Q}r<{#0SkB+E{6^vBR8(VhM#o zNkK**SurJ2`^$X?B_a`KW8L@F{83^%ME=)N#EH_mQ;@nd`1J|Gz#1Wne55K&8SnBa zZkT-A-!pvnR&(fz4n#rV;O%ROKbh~zl)Jw_?dPUnIunUER#wg>yrV9ERDRJZdJU2S zrWXh|P>m>jir**378GYDIP;0jSo8{D&DCe68khLTc;I7CN&kf6-Y%9(w@W`Rifo&! zY>6jsowTpZb5h0i@l`weP)0}!-$N|Ul%8g=PZNvgd!#lJGufR?dtAnlAMt=H6QC=A zq5zUNpb>evhvHu5(Wh!a(+fMm&v}Yldc>u5>BAA$huf0v7tG>S+)H}1gC)x5Kg8(o z#z;JySGBSgBx3HmOWfQK!Wz}lKs3wkvrhTNMTtJ?WS#*PFnSSjGqgc!u#IJi8#Bvi*O;u!AZM2DUpv^798PKQT(<>(+hui~ z_%?v-*_dX?s2k6m*g8emejp5fQ!tkQgv2M>C|7q35i+^(+(xgJu22#&yo6yKN3&xUhB4CFi3o zHE04?SQA}-Mfxg=s7|6QUgIUiFO}XY78b3vW-Ii!0kqdq5C=U%mc$aJZliyNWxNq$ z8Q1eQH#3wiwD(o**ukHcv4g*mdxUPO?-t{igKpm>h#r)DNH2scIKkzLTBP&rg%}!c zGmfqGnAqqPm}b+-_zx$t44vqknrCGg)J+~n<2`xpbi}_n+XaiID<9VSS1NSe*~eMq zA0)P#s0R^4<(ZADCW)LQ&(-s<)k6+Qix47EkDmciXfhO?8mL%N7MeXL?wtU`U{9Hq z1H?^HFO&I(2^b#5I7ES$_xWWds|y^o!jAG$ZQ>dZ-w2!F9sG@UO!h5o0W5}L*%FCA z!P60n-$a@Hm`zfkWKQYj5s9IW^nbotu*Y`2Z*myx2N=H@B9_KT9dyJP!oGtZFFJd+ z*b3{6K^hX#;(w?8J*v9}+rELy1R-yQQGIp#^CvBgw55hIYpf`OBOaCpUcU`1lov*B`uY1>$WUe2 zndS!R)lX8{c(Q@*RU-1yFUt3|PU?RLun;n%3yxkaoWO+V#K!bh8P;GoVidI5Xj)zrWmefxgMNdMu?ovkL>sM9iMer$%>>R1= zlzfV=3}1c^-&oI7_8K(wF&ytRW>Q7y6&+*xs8EJ5!&5CX^IZ7ahz%l(*0AEyPqSp% zS@S9al~<-Eh=%Per_`uu>|Mc7bwNsZ+L^`~5V6X{>GI7enWA~3`ob!hK|R74qbS)o z?&&)y9q5@`uvsWWGtXmGeVeCDgM_n--q{esMZ&{5k_l~yyB1=3J;DYaaVgM|ExI&n z`r%vpJIa}TJzZVe(BR>aODeK|Ick~fhZlaAAFpYY&dqeK~l164Ug8j#$$=7Mh zMdEM#h8lPh?JRZQSxAfaM+?fV7IBJc2ayeQyK{EwoXg$nnTZ9j9MY+KD7P7PYMq3m38ph%cVw&{p1G11sp%~ zW2MVU4oBjQ|LgpJxO&g1rqZx&d#A8N2?D^Vgh&m9WWN{lt@S?7`~6{!KX4%Kecx9(&*K~o zEGy6zu*DOrr9VcLOUn@u!iG`V((zO;5)yxuo$v!;F?j)qGv|X;qZ7_ZL36DD|0dom zg&nXPBDh7mtL}OZGe@c~i8D7F2YE54KY(RX-D>9?c5S{Uw|8e06!8VFURI*H36;u zRx)D~UAAYWN${ER_4V=wnMv~tW%3VG=oKa*;fhPgWG?RJm+SEL6f8WUlWy>i;;AZr zc-_48gzyXwhO?1}QKt~;XVQk3qgyEu3 zqnI^}gmRx4{QBkJ97;vl4>@185Q+cVAmiee+o7!+-W8B*qhu48EEdyT zlkRaja_)CTsnG*ngL4ip$)D-}<m8I2 zCPJ>1YTYE6sm)bN(!LkbJll*}>c4iZXd%Aa8|2FmS8M1AkML#=1d?=V2=Uw^8KuuC zQr4&W$siX8;;*QL8(uu{D5dL?wQ`kS0#C_TUUg^0tk&D-z?k)my5S=gSe7~_*)-$9 znEO7EuC3G^iY5=1@GnL-uxmYXA}+hUyxcI-Fr8F3O+>hDh}@llOvr9{QN3sQ*ss~p z{65slGpH`S4Z}INC_~wN7Y`u9asO!F&vZKXu`IvYTpmAvPS=J1Uqdqvyv#5KZOi7z zH9Z9w46yC0w{qYKG!E!UGY!dOL;190nRWqOs2_yxlPQf3#CnzJ-2oV#oA>s{;)@3f zGo7?p4mUH$%srsCPG#F@-x?YboS^Fhs$$Hs%S;CcFqHU)*(rnBlCZpTos*OIKAd+d z-TlD;BLNjux!9%Kt_Y&h&PTw)Lnk4i!H}@x24c07TA0mADg^nf^br{TCAYI-bN1aR zvVC03tzfa$%r*X6>PjH>oo)^%&D@R}XA3~7a+dJ1iSqCuUX0rsH zu>CF9sh=Sa2MhEfDQyZLg?*ZY&L5rVXCV~j!m(oS$I8I^@7tR`r zn}26z!6x1|Zj|DMMp=(Bs;A-_>u}8S3JN9~GD}{BRL@{~s10$-bpTpsS9^;ejB;^B zda&z3(UoWm7x!P1&P^I(Y$~WtO2VcPyc~@Pot_*q4PMB(atg_NpV93VNTHqUWY%tr zmN;Fv#+P-}7K2TB%AD7eOM5Z%Sgi#dDK*7eMMW}#3x7@#LLti57_vD1|M1;kC{~We zpCs)z5JrfdrTp>JQJ~5;Gv3%@TR?Jicj#wdh+-;DrzAmA&hx#(a9mM-^KJ7h^+$E8notgh6}) z!qfzzW0#_+ovwiF$mn$v42R&47SMdl!$@7+2;59A>DjE%MU)~x>MjBdLwsr#{|YI3 zt5>fKQ>#a&t)0@dS|Clv8Y@9Mt`c70Y*J=>zr7H9V-fl3Q&}?h{DO+Y1}@6yO|tCS zna1m9BNy0Dv~@C~ZRH5byVK1H_J6ta+2u?Idx+yxj{JXsqT(0LaotT%fLqymCdbT34b~!5^k7S6Ux(x@(s$< zx&m2+!cAu3K~~hbb6iFwmoVuuEju=n)!0!k@G=6~Bk+rkW!xn5B&Nuw-YU+#(IiIt zU!Yf6^5{T&o7rvZERz_MC-;e~X9LTxAZ2S~!~YiArtj7lSnE!XS%IBcOcWY>#HRzG z>u|}HCSjB^`R;3PUW2HzD}QeTva+|U-BS6lUl1+3IN`bbY2V34LTXU?2&U1R$z$S>KeQ6qnNP zQ^O}!s5;&np}kZ1JD+@i^ zcX(jM@pKw}L4qkcOdX9G-d@(H8B8QMJ^8{@YK~O%u2(mxdcIT9ohg;NkcH|i-TYAX z__(veV=E8XJ6tqC)0M|@t+s3emYElr19%A)P$70&o+=h=i zMd;&R>QO&C1ROZQ9o%W8CsK`9D(RD8(K|LjeR}^-BIRUi_;aqNi#wPuqB!bp+Dm$} zTCZ`Z-XE^!NLW}HJtc4$ah*9W$sqSuRKMPv-~XOzPO@aIWNF$@y^*a(vdF>1+i08; zPUqvs%9w4IB>9zYF&G0RkJY9Ge_Ma!+ruuh4+)ATj#37?+vaql3+8gs{<@KGt z*t!R6X(^DA=mJ#d-b`ErNBNzX(697~xj`@!35ZmJOUz~L#ial;bN7higbh4n;p*OA zhA6Mp5%8!h6a(Phn^e8sjjX)ID2mchz0C9;UKfnnnZWjIeSL`>vf?(m8|r=&Q!y{0 zw}URq%rzI4b}vxQK!RlFE65x5b|*Vc$ik8|#%nOcwHboGy3P3pYkGC^#B?g(m!+@r z7Yv={ry$WrN?s{tR)An0GX2UF)>$x(+bx1fxE9<5xJ7|_{V+hkQX)Q zxyApkj*Rpk)l4^F!#LPZ;(iV zEU(h`XB3m8*;sh#A2mV5a%>4i{>JS<*OC~oA4KptYYs&@UK*y)#|_y_UdmY4Bn8dy z@-4|LTX(0{4GpwA%0(q?+K$KSr%c1zL#b!QW%}QDAp!m|_=suTqz~P)OY$P|Z;N6! zH@v;v&*8+8e$oAk5gcXa@$iPUIGu3787XPJ6KUi!QpRT_{GQ}OxIrtti2Z8bj4Dhw zyBbVEC-JUO@<3seNxhKg{y^4s!t`4j>_rqmj=e9S9lu1>KloTXvP-s-auo)`6w@c; z=Ex|Gk1P|u5Z6#w<5o~ZzNQ9F8RQ<%Z~n?x&fYHj)F)ug2k%^v30OC?Qt^uR!Vjm)sqXP4nlR?MN>Nc2LU;MUeunCGtjOm*EE$RuKOXsBlZdWOfh%0k zgSmIi-Qi9`jEVv}i`@fs_X#v#4)qP;kDj2$gGifS!J`VLoI}{@qviAoKbR4vSrlT{ zwM z@77g0pOR2F{;G&i+4p6)ZzYj-91f1)##OqXCz+TDHw5^S?)e?Ob4ykjcD=SQ7N_ z9L!9uLvEsiA)SlV5?@hH_qVthW|g{$lvzVrT1fe2&4UE@YZ=$D>>tF~+;dgS?Dv4A zWN>T9K{CFW545S74^6*~4MTPhfV%+pPJq^L%KG~t_t*(*xyR_Qzl-{mr3Vw7+ul6~ z5rcU9^b)fI7eV+i*LEaAaqJBz;8aS1_6T>?s^iUdP0PsORI^a7-o;YlY(k`k z;?ZA@G?3Vgj!%2}ZSzTu>lY>Zv5Za4R*w+NOidDO?P4|_p+DT;UUdp1yD_>pBQN-V z9RSQ<8h?-jY79t=}s=X;@NQ`{Wy6dJ*_Z-p0K}^cDKl!_BJb&Mikz->0bI_R9FKn zkc9}#xZoRUhiEh85RYh#+DAs+DgUzM**0mV2lciVoOW#4Xa=ZxYZZ%al5R|twTQKU zMo2Mwq__h3y&RG04qq|k+(p9KFC=5K%u~bkQ3>&qeF~ne*HOLfefiN}LyWY5hc|Sv zQC?*r+~8%b6LIeOO#8|LgCTb;JhdGkffdYn9CEe6dHy;*#EMKieDeRkAi^Vb{PZ2! zAF_ZQDPbaYUGh|Xo^5z*o%CnBZ?!8C@3mi(5`pW3fXR-kkUI% zROngQJZ!s!9h+h2`Uq>abP?%)3PKlq#G^otN1aD0iDGNtlh0Tq?r~>?(Y>>z$HW18 zZJ!_Lk0ns?tj}|HI>-JDTD;g~9_8IoL~9G-kZ6sufF`vdw562KvW(l)KUF;yoY4rH zer2sFaxl+q$mmEDwU~?=tSfjo3(U4sO<`Wl{R@Uayel)$CEM z##Ijo1J(hC*zett!M_rn1ov%5C9z;@s`qVsvP(JJoSao=Bd&RMeyoUu7gH{Untu!C z>CK#o4fXwzWW&obnw#aDks96)yU}t#uUpJ}Ad@Ty>CEh0n)sQbj&KuSs?$speYUJV z>l+KIwLkDURO15TnrjXn#<1^G{~;V*lP#u5-K_(Sk{HKcSGd~yB!JT<^<8>@QICC zKO&$9PN2~zy!FLVJ@z-M+kZ2ZuF(CBW-!Q<@0V3irO@io>3j|W*9I-|mo~7A`-GIO zAXjTfxLe(pG*&XFPJhXxZ!@^>KEwTRaQFVl5JQ6lsHO9Aec$8}w6Deyh3G@n6>tcL zu5{Bm`MVW};OYdn{Eb&MjdKGxx6(dr@Jva83`$d!Q*xY@96~IhsdCyK32M|_vEM*u z=i4&fW)d%cxJE|wnQj8(N~<@blStO$tJ7x8jj|6LdDk(G93;r+&zNV7DrB<9)_dp! z@4sx0iCPh&SQ3HUB65mW;Od6?YWxpE75=LTB`DCF=Li8rAxe_@y^-C-je=FV^P;#3 zKiUT|_R^b#MN_<-SW#UuSogNcb7G#IyLD@3+2+Kdo-paYs1UNq#(YK|Zg4@+V)WTG z3kcv_?Y2i+9Nq0a;pHGCn=u?MMGwi=F$kCpXPGQ7c&1{wGFcBN3jPQ02+uRgIsLV?dCzS0RE5CkbSH(ik4FXSuYn)>}>kj|B zPv`?SjI&^V24*_YaM1XyTZmxD;O!7!+e#8mj`2czwjzoih<6}}2ZuzpqlG{ClGUU0 zbmI=SNDV11yW4^vys}HW5>4!T=KuAriurku*d00^yOCLJ(^FFH=Y$|%OO#- zVSI%BUxzIk>3Fk}$H68VO_nfk-a-2T!5D%Z2M^0o4C9tvSmQd>`;v76Yow%sL3?W| zqE8|`yWAxXm$}MVD|U^$+MDya9WMP~cpHKObqvC=00FJ_TLV&E<@@oq33L_2` zOfrhO#)kO8^>k#tZj?a};z#ec)MlT^*AP5~mo`jydT!T(=GsBKXwjbf9C2gmVxJr<<5{}0K; z3NJGexNU9DPv$Ke6Y$e+Y={(=ZAs!`s$+_}Q-5cyc zK#O8tT7Ta7|KlHcVa^*ymN1ZOg3>w6%uk0gs|(m`Pj7g z-7cS#bymJ6oQ1imCxNML{nMv3Qsv=C$q5TaxG4%G1Gd!w8<|68%(?Bb?k`vZ1&su3g9(g|{jsvJRYrmiVrkR?8E zD>GktcEg+B7B49_6u{ASM-#0&i$hi#eVQcj9?e@2iv|w=n@~AQW`GA$><*VVR*Z4F zB1kWUpPxOisuh%-g?bkLR4IIqx02mLAzPp&m=?DN(H~#XO7YaQi+kWMp z^oH_lU|Nx>AYZ?mCn45;=fk}PwnBbOJ$C*}1ReYU4>an<0`7d0X+yMKN=U-aL)5H- zrf=cyDJpM5ksQM%?9rA)m(x_ixmKa~m?cjKARSek?AqtLXa20Mv_eB* z*m@b%@{No24v6XtnC8nQ^(jlZQ~j35n2V%Y282v%h;^Q)bG66VV|OjMp^K)y*kI|s zGDIhb{borjii_Q}iN>K#pd58@xVc|F)v4%1Qcm;0%x_(`crZl`sCIEFvFJ@a@+Wu} zfWD&6{4c&4l)yV-Cke`G$n5TUg0cET)nwo4p}aflHn$u74!gUwhv(Zfl$%1@Mg^oh>6s8pAF^& z86aMeEL+UDU&z>-&X|y$v|yXqW%Mr9QB9QmO$?dTT36XcbtsdqoOnOla+KlS#k&Egz$xr zX$t4?C=r44qtZs5@ten4Z-dX=4l!fa$YPty`F3DrYYk2u;x_AT7^4~-3_3oU^oO6c zzX(;=4xhl?ogw(c2*JIx<~3#_kTkNpD>wral5sEK`MEG1IKdS-2sT#GaSimZ6~8%O z3}t{bREut*NjHzwxuRL@d%1nHnm4!d5bT_ zoP-FV5$5=mk>NU(5$)$j8DRz-=g*i%s(ot$m1M6+o<<2Vzdl`IkUJ*b=2@2~VL0yv z%~Znp7zGJ-m(iMxc(*)Be&T#(1z#c}a&1%8t^&Sz7mo7_Ay404ppqrgW*k>D2>ChHw;7$O zoGU*5lb9Zzv&KbgQ0*+JbPe>?G4@V`sKlTZoXlpAyb1$PGx#3Hs=?^=hVCF2+Pcpn zjr6G%%C8fjDX4){Mvetvs7geOE!=3d=`_LCK<6^;i%Mj@hpP37r6}`)T3ml$a%oud zVc*&-jJcaX$uaAMH~1c3e%!JXCP){X6j?P#7n<9}v z;E;xVQZ)HomF>9lRL{N~$%v!Etc>RX9qABjvzUrcyT&)(SRpK8#2G6Sl@=kaUf6W& zkW+E;1_b%7!KnG|q#55ywjBL$qQ=Ep;(u{jCRRx%OclPTAcyfZxrg5I1XMB+A&RsFNQ!-*X=hm|NGN3GVjwsg*g-ltBp(?i)|dsQkL# zcRIq2m1>m1A>a-M5CgYH2meWdwk9Zjut7i~&GEusp2TRJU;?CbuOR)Zm3IwdhGj<( z?Jb~@Ov;`)cntUVm`?V?0^HkIma9$Y9p0u~gZzzV(xSYOw$JcZk4BzO@hDgJ^5w+9 zqWnu$RAxZX(;YZ9wX+V>vumt+X5gXheo+@du9a=ak8>U&kNzk(HgfK$y=B&xjcbK} zsGIsLh&DL2(MJt+(=n1W>FjjDwNnQ0!H32nt|o%cxW?O9K>1gsW*7wLDdMtR@4}7A zdfp5o2mm3n&`xQHgCPf|o8{z&Jyf=3(1%%2T~CY5_l7>K3pW`4aNa z@5vY9=xI5t6ys&t}#|%phU4({L0rx7zW>Rhgj7 zoDr}7`dveXtTyS5LGd$-I3Jm@xng!oXJq2QpG&A>x^J~N{E@XAqMJHTvvX;k-hxNu zBJz6KGz8T4?S4%tc|&XQEGXEiRXqMlnOJ-zVHP3R6&v} zQtPXLRLuwFb0ju$QU4X1Ic=Cm>^rCo#2MrL+s=hF0s+BSU-9UVwfyIvJpz}bLBNAh zuiIM*gtY+!(aCdD9h|g(&Ji1bsvM~ z_2^ygrFM$syYhSl>z<6_2eY- zg6x7JYKx1h6_Hc$h2+`A=vjv}+MF3n*SFNE#@v1|qS-U|iuv0IQM8Ag zE~Sl5F{z%L#J@iL4Z@IX7*X ztrC)?AGiKtfk>{pgjjuH_rMXa!O{7r3kZZNAd0LJbdsD61P*xkaFmaNTSMR;b(nw^ zG=K5Kq5l76)qpkoDM@VQ7c>b~Uf%^zEpT(S@XN;=WJTTWV1na zSI0PhHab7?sjQ-*o@wt`snT{kLZtO{kk|5RDI0NrTE@$%%A$u7Z#E%vcJ-M=290w^ zbK$AUl@S6!Ko~mJ=p^Don z;=d$7(Y1>2!OGd<6O*gAihZaLy9)@7FEY04sc|2hs8h`ZpYWV8_yrbpoTUj>5NB|>=iJS+*m5(P++*k@ZMJs{${uLM|sErhWB10UzT9U z{k5AuVNK$TyJ$LmmEqd+B}Ul(Y-^dCIb1NIu=D9`f58)szqMfk3PkYQrA!U`AF#RZ z(H$^0gUMCn3cky1`_U<6)ByJ8XEgbJf#@ak-7DZ5T!bj2`J;J8^LOYo0i9*bSFT7N z_4~5fll^%Fd?iXPx=3B`fq;qbwUH;;*!q*;@GB0hdx=0? zeEaAuEcpjX^n^rOKEfbG-NQu<%>*q|{+_+Q)nA6&9O9rfl=^^F3JLCb)o*=O<&B!pko1TP0m{8MyDM42lcMX+Q3;Y+HzclmI`LJ*1N@4V3vem<>yzR{X=yNH!neSVJ z*P5Tsx-&`yLS}%SO2@SVz>lhvE#Ic1eFU>mM4vDQ|Bu^7$-t#6zzJMqK_MH)uY6~V=mm>B6?+epv7EOll z+%=*mx65EfQ!doJ*_5=H?z)8k0_mtW(${B6|KUdnY`aKSWTf4~q$P|~Zm$IGobnEy za{~`8yMxAsNk~D9pzJ7*{ccEbQhr+p)e-I~1156d(f_kGaj?@x9mwA? zW+^&Gc@5jMlpTz0`dQ^zV^oF{9&Y~L>qy=h@|lcx7MK0$`9VVMa7)p@rc^I+T)d1< z*Kw&&h%>Yp^>=1!7pf-tAjsV&tO+uM1>%uPvQ4Ch1XV<#?&C{7IYjml7iS_73y450 zZmNKIScui4pxgD3e*hx;-jW}I*c$4uz&bu`minqX&QrxAyXG()B!(`(!vq=!HRvmh z#7O39TxTcYSrg&k)VF`(fA7owK}MqT`D z>5~EjoTOm(+)I&U>mKLuX<`T)?uV;} zOctNPi=*+m7KUXJnZmsDZyk;YzZTk(m!+^Ea)C3j1Viq7cnE5y79bjzy%akLzcsIp z%Cwui5UH!ZLnv zSRR1@p@opiB}U$Xtr%|-H#~a60QewJ?;`gnl2rP(O7**aybAD`Ha!qb2QFrN{yvSl z=z)k$fJrJGOKPUogi(e6Yoibm%b(#-xy;`1%|iaIX+Bv~p6Fs;&=HP&@kKl{I4{j& zDO{(Y>(PHER|^C!ySZp?N_sG!lb@nk?0a=HIDbS7ge6YO+Y`I3Lr>+?+~>!3rTd!%uTCPyM)jY zWXY*HgYNPjCdlvZ1xq195ivNhGgc};QG5C|DX^pX`n7shkD5MzC+;iO{k1%T#R44( z4w#(br+!q<)0Mnm#aeSeZu!I?!CrmcgKm>ltM^Fq0>M+^N?D^skPwb36ged}@gLby zt&9ndcw_eYXz>hJc-p!J@NgL;(SgBT`C#+T`2CxdKMdO%LNt>&Qyal^-)*_`938ko zRxH7cZ17~h8idLQFpvaO@2raYP15hv2~pFK&LU)ta!aBVPWZeO#TLw_Y%zJ+tt1{| zY?!3!fiTM#NN$F{$cFGH!zNoo zz?367%g3@)2M#^+>BTTGC0dTHagv=Jh8wBTR6lZ}fZI79ogcnE<{JthA?|y7RdJ9~ zKJDIgp?nV?=%d7Q1`u_~yg1JA+%x__i!GsTD<@vr0i_Y&sqCR9Te$3KhLDlV=RF`o zrZfYsMqnAedHf?iZ&>p54R*6jSywkx*WUn9jvljJ&s9TRS^1)(Mm6-w%RJhC&+tT8 zaqzC#-L*oJelubQ3UJqsQ9Vse;vo91NYEX0wS+`{00QtfkYiYkZwn5AbQF%mh=@8Q z>gb1 zhOlq}g;+-Mo^J9!UeN2)fgSK@XZZXl<>~ZoLj~8joTB457SeYFCL;xZpg9UdZX*AS zZEl4h?@L^M3zxRLD`NY`8cFE5%-Jz;Dv3{jpLR|-ZD}KdkCY;Jw;~W#KfD*G6k%%n znxI!y_=Z-=YjAR~;L%xJA!#f}x(>?;b0X)w--I^d1wZaP zO7o;M^jVLq19ZYls4vD`Ej)PJlmK9q;l%*Q%}H5NDol1>k0*v`>k zFGL<1AaD=A8@We*+_Z?EyXu^a;Ph3dRy2b&=cLl_b^E=G{0f)f5{g&o*mF4VX*o%@ z4A6FWEkm@$|EQwd|TpwjPr#_&IQYCp{EI&nj`AEq~cg#!*Q0W(4#?&C78 z%3kU+MBjPOCU${c+)Fl?40ooyHFE|fu%@5e(-xpR|10`>e}r^*PDE)+>_orNR@3y{ z1WOjj&Ozm}doG=Ha37gcu9t;;qxKv4G-0$ZTNYOY}xa6dLRD5A)z9DX{i_I-vW$@QO4q zDeAq({uj4=BJ!Mc4IGle@RCPpg2vbH6nsGu7o);=pq6Pq-spm+M~FAz6x0F2wG*bu z%o40F2Df)PlDr@Bw~Yd}m+`O9atca(A-tt~q_MeeVKB>obn>y?Kuz?XY;t#=@~5Tp z#C{NlNtR;W3^5l4XiA)s;GxfWm5e=KCFIx2K272PHFL|6Jc}`&ZTWkn@)K9QJn(+d zq-KN*-jRB6>eat681$8THXk!|gUEE!?#>1m&VZ&|t3Jxj4LXZ!j3zbcwoUy7 z%|6Dw$2ts*iBKMDH&Eqh;IUo%r^bye*{~#SLIRzmQ8T_I7*@J5v zW&;WF8un$IatHFK>&So@R z{JRLhd*sMl7C6gEIwyom3}ud$fwc%kbe@=3t7DkTKMRF}rWV;`pud7(S_Mblj3H8f z&$6w6u092K?%=L~&CB^chj3s<4rQdxU*Exq#MMfQE+%6CPpP3EE4bnad1B$MuSCR@ zqin~*fb1vZkWD^OCKdBO9>B#-L$atJ*T98rT6JF!38mZ$(=8m4>@*yUww%DXWgt(m zKZlyJhG?>6lGAuE%g^hWPKvXnx#ZXFSaxgMQ2RBqRca@B-vx2{;Pn^=I_7Hu*)T** zf1W($7SC4Vb8m%g-2zZc93Eslt)POv1BfclDo;*}iykC@7yLRyQ$IQ>>zA#u6omH& zr^5E*>YHNJ+X$INfeBjERK#K~Xy?+nwn=(zEBG_PHyVzDf}J2=iGnb2zu-Q*84WS1>r#q3K!+^;IO1j(RdBUB7rdix=qcYjI90NG5pDTU z4NclkS}^A77V7$!zPr88@pvzkSQ^zC`_ zgmBX5waMnu3iHU%hObU({=ZnC_azrJd&aCQM<4?CCHw0qf>5DppPu)+ zmB;f(jaT>U*)6DmZ^^OMX^NM>-!i^IC+bY!M9_bv87&k+n1uIkE9c}FbcwOUk!UK%T^p)$im@fGwH*|kzr+!rcl%X~{o3Ow%#Zs;c^WqS5tfWw z=WP0+OzlkSR6f#hZ4(u*`4cy9LB}dhwT~U7u3MFp53!!nbszLyelu3Ai)dMxH7@xL#m~Q`b>o+5}Mngma z?fP!XHjFn-Pf5VZ9_!%2Ca4~=*Iuz(wIKD7A;kbyv|~-e8#q~po=)(Y0>T7rq>4oT z6<}LBf6XfVseXC?`O!pd(Mg?|v(1)xjD353lmj-thA`OYf<$0+>F(j+SZ04Is>dN| zg`(22+#wlca;#{Qon=|y|Q z7^j|rfMS&_{gBwFsEFUnzHQY9W2|~z(Wh;6PWaQe!f-!MD?Cw+_YvkE6(}*=@{?Mi z;eq{TC(u;*y+%7HkAe6ia#av`Xd+{f!t`T@599tBhxBJ5;!WdZghzYbKM3<}#9J$S zzPS~A5Q=bQvRwyRMpqP&PX*q&NE{QT5vUIwBkPvub<1Fi>li`jffy{G-{^{0aQW3Y zU<8v0y9t$o-S1{#p=7kK|P6gMRd*v+^8D# z7h>7u6p|U{Qzcam?^1eyVvN#xcY!$X=ymccy-d-diEaGGfZhtv_mX>Y* zmbPM5$QdE&g^2RY&-WGMl}AK4=NILBA$`N(If5gIhY;k&`QBIkcQSFs z_DSkY;g1{^;h28RCQ{709;`u((}(s8+8r7rZY3h!)rZO5(t{k&RWu-y3EzSjVbD!4 zIQ=IAF(v{`Pqq}pN*n{7Mu_nn>x0VBE^`5@FW5ljyh~Nndap(%>af4R`7Wh&4xYGB z3~N>RsQF9a2nG<#03&`j)1O?}_3hI#a#XqfhO?YRO*H=fAGzm1^`LJ2o&jzYEMIDa zK%|?=@2+!1-<69`=t<%Bgg(O+eng~k4X$yk(7*T|`Ocn)xMkTG_3Hove$w5#6E}4L z$Q4VHiJd@a9noNn(mVNo7zyb%v;29M8!M!LNlhju06n|yigr9mHEhlGJsp%o8J6Vi zhuP$k=r7>{TYP2|^C1lmlMP8vPma7_?B2lJ5=B~rhwB~|`8(gPdQ0Cr$p(K2@Ha}! zA82>;sUw!b$l;w@yxqgW-&M;{uJU?jkZgm?*Ux(!R6z#{ghsgo9s&~QNx~mo(Ng`j z9|XljV$LnWZMV=DY=G~EPf~u-%C^tOa&^MuwRp8H8AT_t1hSJaSZ%9oNQaTZ5>$e3-~WeIfS4Xf(+5;v5u;4oN=Y+__O> zYyFUaMw4%J-ya$%dw$fo2cXO0I-wNe@gHYIh3g$C->2tMWB>-E6{L=lUlaW<)8HS!=qZjo!WsGF9qKV5 z(n65dWt4vGAsMT?GNR}9kf#~qhEK*@zpe)P^kQ}-4{03}dXME1>NH6?6%p&^q|;Eb zZ@br7&gmRsfIlJW2265HxT;!!N0ZyaU6$+fTv{dBvy03q9STvF-e{_Nz4Y-QYi~{vN6KDxaPxpD2{kLJ_;SL*e^Ty<8uc^C)Pj@;9_UcGaITa z$!-UM$Rf<&hx#SYfNY`a2;!gf`FvFDT_lg*yx9OE)=de1;OzM{t2=q~^(XDK;R`y()mb_yz-> z&0_%8aB!XbIAZr{Ue=$cF#6o`a3GaEySHbSoL-|yh&;H9pu0g6i=TlTL5 z`07)VFykj$!OFCJ?!x(*%|E-@WJkLvq&*`K_IuD98`shTeTQVKU!X%a!-WIwR?&kz zG*q(NBKeJEwm5yyNS@$^Uha`&(*_ESIyw_eI+zPQ2>xU!-zVuq3~4KYbnTpIS$_l) zt(QQxDko43WAMdm&3Vnl9mYH)+E|(P#Y7Ni!6b|wwMPE6Xr5y z7Ev9<SIKgO#)BNu-`vrD>({y*b{i}oBQQArpDNcDWt!qjrq&*CyH zd82(5K!kle)9tQxj!$^utjk}M)21&V&gdug*TJX74S%X;x-KSrmrs1TKV)L$U+gBT z|99(I`pA*c1-r(k<@h4PBwHp>(SZuKtdC@@FRN7_0?_Gg_r-xW`&^Jr$MZF{2ynun zHeJV0kzb0rB4{jc+JW>0xJ*W(XAtr&kYj1P)l+1iH$2!~ykn46wUwMO7~D&+bc)Hh^*H2C zPu+Wv%K^P13FwG-ZK1YSo$a=j7cbz`IkN~K7j6@KN0}gd50pcu(7!HMzeiuJ*Jt-L zT!C0>21h1ziDra46)&)1Wmw-$>m z7(u?q)W1Oj+IE-U!bJb;I}?TbnjSAmpxm`peo5>+BHVrh@y|MZ_z3Rtcd85SZF7@! zn^C%ORFx0Duk!M%hrFO@Z-i~c2RVaeC;)-oZ> z&K2EB$0?m?wPXn$YhvqI`u<2jBaU>T;B%6mFO{?6FIrhS*1ZyH3r};s3$hZt;DRai zyl}BEzNB1)%Vkc}%*-M)PtY*=*xz^|~?W7WB1`*9A;)_Q(Amw0uj5pwCPeQP#9D*kL)zjex` zrnWD-|F!k=6J(n3vRKE|IZ2VUVf&CY_4^=B_$u+>nDK68&S8BTBRQ<+*D^N!VXBFX zaL>7Y zh!b_b{UQ8A4ma3cs> z=r>PwE^wv(KYn8o=`{bH2maI=7r|$(vHOjg)27uR-xe)g_*8Cwca!kYp+mR{j^whJ zog+iN1w$pVQr-p;#}`&UnJX}s3gea8ED?{$_+;ak0pdSpnLo13eP z^KzVdQ2^FZA+Lq-D`Huf$`RuCTn&7A7V7>_e3Uo4N>(G+FZ)}`j@fMtgOTc&m@L+8 zpULEy*@6{2>_n_$lg5eBY`>*y%WpyzJ6Thy>g`^J{vG(Y)H@UV*~CC|M|zhz(mELL zSGFAbS-@UC(FUB1k@{Kbvj6)9`7%fFbc86p83*3Nq;UM5i{YB|Sjy&Z6Z} zJE}!pW(#~blHdJ-AdcTY=x?`HYpQy9SBA~EsknFF;`i%;kH8!R1t>KVAZnC*F zdB1Q1^6PV==L6@crV{JTCcLXJMW2nWYMCu537>IZT39!}gFH5|d)DExr5W^U!hPoU z)1aezFmE-_Y|`L8fOZUuxJxrdlE!`q27Slp(h8(Q!5{9^D=NszAw8Q2tnsUF4gzU? zion>EwH%RUXmH>j#zTjU3G-BSKOJLMatE8R@Sz5#EWJ1-JTVOuEe#@VdNk1T!VFa)vQv&hvRQzC$wk3R*&D=` zIncj-+}@=le0lg%r8N^%JJh?zwQw`$I^#s56Zy6&4eXaE_zYi@ zEQ>~&&|XDJnKuT9{uNlg*Qnuq#8R1>CE|=??~}1QQhM+I;p#o3noPg%?>h-30YZX; z5Ne{JsEC9jA}xtnP#MJz76?T^2N4w&704Z;AU0wz2t-Fm9a|JdRD?iKP^yYbQ-Y#& z2%SL6b27gd|L;66X04euE-AUnxz5@9vv<+?k3nXh>Hva~+s*ta|I*;I7$<{R^}9s8 zouOSySmbF(qAt-1#p~`F*sEG~#qH>iDhCHZ5|l92MVBHJ*e_Qqf`Q>Jmy|&AkOQ{K zN?cJ~Ca%Kkdd|R;W4*>xTe?!4S@Rjr2}o}wZr^VjH(u9!Bm1)D8VB!*p=+49^+IAQ z1844RF8Q>oTAZp2CCb5?3;b(-7NmcY1s;*C?IuR*bS9T0_%(%t-rDA0$14d5A)ei6 zY#fHBVF(Bn@62%ZRdPp)yFajX|F<#1FvA`*K&z8@?!SfnBG#HR=P}qppiUQz@08 zHT~~W8ciX#9fGAK5b*#Y0kvi-6vOhUthL)0{qNb_V_HU5}wQjNKu!wz6 zj}?76@99%FIL#<)^vvg=;EC$ZKCv9Uu?nV_>J1oA#1g{xSiXC$1{Y)>MMwFU^sO(m z#=X{SQ7@VVFe;4Ir3M2XUbtD~Y&@U>T!%8Z9SK>iT_zFdoz2@ z#KzI88BxqR_mkABN?GqWj}(fy>MJ3N0IBPdB#Rn0hCGLl3n;EX&szk2M!jXToJD*4 zoo@ae$=}B>i9dRaQ3CiAXrBfqIXKwj*RI`)H!yd31+fBb-eJi5zUG~H1+z#3hTPo? zp;B3o(#-&q6!(bdu1cPKO-44n6IN2D@9FXf_Us5dGf7|uGmYAg)DUQ4{Z?O@3>h8O zOz=p?%|+6IW#Vg9vf<|>&Ggn-oJ&GmLwecY`zW1K>l6G>)Yyxr^5v|{o>82eH*X%9 z1h&e3vXDqq5aZW={_L1M2AyE{S+i!P$Yilg>W-iI_;Jk=yv%7Iq}qZu^%JG|em96l zGr4XwH-`8vbUNsr4vdIxg#A%d&(+JMS{KrViRu!LU{h;6x=-~rtAK3mz5l0oJOg>V z)L5f28K8SHoH;NXzwZs6y~%}1ZSFqnqK&LU&7yhwPtq((Z79fV9sP+(nDo$=7VT3< z7!Y2oxWvfn@Bg-MKjmFhxE<)u~9l}d_~ zV=z-69D$@YxMKS5%btFuZxcDoZB)CW&&XFT7qxeGs+N|vkEgBX-?z1!-@)CPxS-CG zZdPJz`_Gyge)I;1BIm2HwEnkq0oHuB6?V>86XEI`uCmP}-`PRC+b!9>r|b~K6f|@B zbL7!0^de@e>?>nE>#nwZ(JLcS+v$(bM^i+`HOe0q)83M}&DXRCOq}Kf?mg8)mUWsP zyt_gQ^tU}+ytLwCo-7z&!xHCiGss{?8|b;fjMGnmaT#>jB}VG!#v0$i*Ul3nv2@j5hB8Ybu6ll4tiHTp zl$!QA-Lvb_jpP7*RyQ3v)Rxe3GcdNzGAREH@6-u?%UAF}&3^x$GFJ@Jgbh4EH0CfLP)nNy3i7ULC(PfUF9sm6eJ;8wdx*c$t8zu=}T^+xI@Haqx$Kq?qAEuS68Qzkr5SzOvc~q=z}{cF*Hx5@Wh!DoN?_kb+foA*>;t;vj}qu zl>DO_Z@F$!p?I%;JleR7wUJ!>(ax8g@DN$YLesN(lj7&RE2ljYPg96LnR1bxN}}g= z$kEzBIHrGgOm4Er8{^?@v$d!dTEo!?K`t_X&2NC<^o7>#3XnJVE4JSFVHp19){0Bi znD6;IR;b^qRizQ0IL960?PhiIueCLy0z(rB3yPh_PmA%E{B_B}6ngBRW>i}@`~jZI zKpV!`=e5-opiWC1v8ty4=IO%?)C-i@9lhD;DHQ*#~)y8i+n_d|NNAY0< z7V3+_nGgxap38}Bkvqq>6?Tq>;qAA1;Q`10ukz7dMgDLOj$XCTrqi79*7`q5Pl}KI zQj;Fdb&RW0mce1i@5X$3G`Hx1RzIN6Ic%E+2HEEyAaxg2(CMa|%}DpN?qX*rrdHO$ zKyUqeBkIkY;19H%Wi+R({NGaG?robaHebK&aKtt=N4eIl%K5nNZobEuFi}N!ErVv^ zG5lTm;OV27#(~4YMf~}CaAYaoAZXxH8jq@^=OiH;Q_$|iO7b2nttb`-E{mUkK}gZA z%PJdA8#Ax!T+!AG**qgxLv7W(&Kx zLmhK*t`qDZ3=a<9sBAxw%`TijukqBwZ_WI943B_i!QTe;^l8!bS8&;ksQZTvQ|3F+ zoaY4VE?9#EMvqk7<=8#G%dh+$w)ux9T-C+;fP$SMI0Ri+WBW}dn%{B^26=o&c`|=C zYt6Mwm?P}N6YR^W=_ladLg`*Gac?If2EUOY9UYLr-UyjbM4>LWpWx!Ww5@7is1b0! zx=JW7@dh@8$(lUD){vOwp8nL2_#Hn^YMztf{Y!VL%@p#9X5?>z%S^>HeTpgDj5Md8|58nGJ491wX)qbk{{-a&c&1>m1V0MN z2jYx3B5It2JQfP~(m3dcX4#=gwYZ4Nz%K;atO^h$G8Vv5C4)dZvCD{>8LDWVE;D$a8q9P=+ri6@lhe2= zWRQvUsR$tg3)h1JYQ+TXE4P|&Z)cQKtz0)c#V+&ICSzwBdL1UiCsR>gQ4x+*j)5`a zF_gDEh}s@dK&)B2&J43b_ot!xR#6pKkZH+(d~15V0g@fmmf|T2J}Q4h#oAkn-QqTU z0EOf%EYeU&X_$?;Q&2)#-K$6k{<6Rs z{LkN3kRq$Dg&;dkSmX-aia{zI2>ZW|_-uq^c{PoOlEvN)^IQ_n(t~&uK!CQjt=_y6YU9vt6FQGfn5QY!che8HPko{Sfh;+JQ}?*n(faW?d$TU9 zT+aS2X+j$Ih(m6cA^E6G{Sntk4FPb)yml2odf6BuD6!_f&I?JFk&-b88-?nt)h(7t zd(oAB8~IVtfv}CWD-FB$cY;!P!9H5;6?})!7l+c@706^}KF0wUMQ{23+Jm$A`|HCv zE6=EFwPl&~SZO2C)!rGi=KAofx}>v=sh=HQ~6RG`E9 zTDQ+ZU|LdP0M1On$OC^7MGk(U$x+s2Zy3+lT=$VaSY7uJDS0*t=^Ena;u!uI6asY)t4yhN(o~ESW7;rN4yY?JL13^KIE*U$|o^@4KctGt^@BI2}A9EXW`Wcqr?SOmk zW+y2xEj0a(Y+NBi*3!+LV-3(tXIdO$@hWH8#dMl@5L3s~3q+MrH@?FFvrHLLgSC)zrLX3}_xthenjJ}ANpUvrX~>!k*jy8|}~m#u^7 zISAak6A%M)ISJVw!r8lU*%@~6s3HISXmCnmfdh<2O73eR`rgIeh}9C^h?Uvo1;QzC zh-EJ3-B0oVXOdw{Wc=`NYux>xlua1f_-FI8lQXXWGn@aU+YxV&I5M_7|InzbUuf+L zqN*B!Mzv9aa_o3fa})M{8_m=X`_IA8MS;J+Z1lwkD*LQHY@aiD4KImHF}&P+0irI5 zV1hUI$~*J_%#%b4W=7q&?;@~1#l+TpPn>%5(>=i0a0VE|LK$vfYoF!Ta?!y}`jT&% z_o!Lf4PwM&6{Ms6`!R)t=>IS@?3KP&1sKh(mtW}okkWH?)|QLHdyBpEmoFq9!aB=X zEO?eR>m!VL03iwWO!>opPw7N@7O{z1Q{fqvV&&SEzOxUW&M(H#RPw*MBE9)OyQYo} z=l1L4X#_vRZbB9ez;H37l9Mv4qbF)xz>+SId#mcJgn z706LeD_%(YzTvx+jUiT=1oU0}Qm1V362pg1jrL!ik@0BZ<{aXt8Vbyi`=5 ztk9l&PBqYBjwAA$lAGQwZG#ZgBiiP+4Hfg-Ei`!Lzciv&IQs?&Ae2^j6&5-{T@9CX z{`bV%j8#VjxmXr-tL7#s6qy<`vc}u|w^6w1=!sQoeKeDcgHc=AM&en^Oks@9$Jxk| z8D$?KuS+Pm0u*nqf_89(_D^bh@)QW_6aG@80eqH+b5hsz29E z0xoHoG&C%9Og_kzeBH(6&38bauSXtD(#kZX+f-JGaa(qllI~yP;`momvrQB5NIQ!u z(0obfxEHFvW&v*c3xu~tc_7~W807g1u$Y65l)i7iu<^Fb ztqas+TPH#3W2f`P@n&z}d+Ah3rSNU#d*K^8E6&Wr-E>qZPgumO&^Hdhz41SdsW}Ug zrsX($HNn1v(9=esjT53h=pYVBXL$U7BFnQ zY4Su(o4jA-Q5G`w#m*}PPye>B(^lp!HBPldEG>L*&7|KNOy7AAbH|7L3WLc1@is6& z60%2B1cH+09;75*{|mCDH~(Ilb(J>39u9X=2t+ByXrXr(yJibiM$(T}RB2Yw7TAl} z%*DuFT$Ebs?b&OY*VG^pbYUydPl!XK!f5l=%NNV8z=idbi?@jmvIa zz8$fW)28Ffj`(}+)`lX*Dsg>|EyapQ&}WUak{QauKO=e1$zoV;dme=uOaz8x#tYnQ zgt)m%keT=vhK#zzGiJ@2jS?`#4%^R3m$hL%MAd6HQ|CHKL{sm#SEYzyX$}_cZaUUw zz^dVK=_eBy^l`9+;yR$S2khk|@Q|tLE;x0{6bGV#BWE_^pdHCNz_<@6B$>orNuMX` zK}7bz>iS;D+R_DSwHm)5<9-h1FZLecbTvcX=D>8$Kd8H)g%&ret~PX_vL@7QOJ(E6 zAO<={Kg^nsG;y^TOi~Y(kCHt4zJIyJ=)REqt{TUvuPklbuYKyRfy-9xA=Qd71(QPJFPRhEz{vgoSdnzRuE*XV7C zN410OI*(bX{OhH(2f8t`rx002hTa^UO_u5B;YCzwYSB2qVzRyHj)VM5DF)>I* z*$h7m(cos=r|fF!6htafQvH8oVQ6=RZKuUb^_iBfCoV!vn|PU%kU>SyUNO$Dm%YJ$ zdw8s)+qGA?{3kNkfJ22-dwURJqYe6Xx6_u_hc2**ZYX(ECuQX)F>cw1NF_+Ncd!o~ z(}{z?HitJTTjyx&(mv|P0|McUuO$pjY+dQ)YxOjp<{E(J&qfXo zBW0|b1ql7+?FZMc-~7ignh-u*6ugLq8-*c2cO?|f$ZkFHG6ro9d5v6m4~LFxFhyG5 z8b{Ca8u-o)t;F_7AZlhzrgFx0gJ$jlLeJrZ!VL-!-?*9d=m})r8nZh;?}rdQPm|*D z%|HK02j^S|lkgoc_(X>zQDFsUa9>NENFw; z;llY86qMTY(UKR{-y-A7=~{)Ow5QLIjO?@z6tiRK3xW%=CjQ5i^-ikU1=1WrEkOQq6L$8qSe*8|@`I zPa>|?Qw9ik`t@O~4#mSag2U7qZ)3YlbYj8GNZza;`=dk$B5b2mk;&HhjBn6@Ju?cJ zkr0BKS69}EW5p2eF19jaWqn&Z(8#p-5j(x?tD2{^fHxn>KQss-DK#_zxoW?tFY07l z+Sgq~>h8~muoKZ?6dFh?6(GNkM0!7B9?$oFU5s2z-Es{Bp$-r6cRFTDaH1DwIqDsg zD@X@|)$`*gTFm(;iG(|U?TS_W-iY69ZzbD4(46GBg;g*e-PBKP*Z{M80`jqW44%T0 zTrJjf9D}ue$&AixXYidBo43z&qSLg986bqxA_nUq>q-#|Bhi}kND%H=T_~=zn@=9b zW%hE_q}B#z-7pH%sDE*5#d@Hl^7R7RMf6HEBfXmwzAY>Q32LjB>D8(6_7iG-&k{-; zi9SCzo!LH8m@U4NfN|WAl3vYqI(A~OQ-aoMnFzCyq)^CHTl#26oG-qd< zEdciP6EjlwDMA`C9GCVHM4%(w1}6nlX4Qg{Q*M-VIVkB+QESMdtOBKkJ~XBi|6Bbg zLU4yFd2aHNM9V5b?7+XyX(S{0yRqFIPN|9;6Eio!{^2hbJZ1g73Rr~7afq%@OS8~i z(c9DvuZ<2%8OLVz7(t{C7LLYF*}79;!Q=IAo6z3D~_& zk`nM~iyu<7ItY(L#w=w<(RB+DQ6Seqze^FOw;Kdnho4&@!8qbYAm3;V4S1YYklQ=y zlxO^qzPkrFSB)K)bk9qszdEx~Ukvv=4`Ru5_LCt;ogG@8^*Xuv;Hjh)kk89|V8II7 ziMW5G)$)?K(y0(AZW&>9!r;aQ;#vN_nh!maTafa*-x<}Gec!ib92zw^ePI#7Kp!re zhtnX)A|%;NJY`z(XmiW(jK||2cFjiZC%{>a?j+Es`>~&66!Nq>0SW%J#so|ULrLnD z(U!{1vd@Rget%ldjGhj#i&ZNo*b#j4gM|Jc+Bm2cmzM%%OoR0=0SZzzYa6TGfE7)^ z6_;p63Qv;2rzrxG!O9~L^!FIfEKU{vu1}$^L1VXf^c7}q4#J7xtsEfOze=%xts-B$ zsBJk`s&y^%mx**6k~u;Fm3T2&IY>YG6)%Q6y>ab_m{k4AIEog_e!<9qmE^9vnhNQ{ z8}R4`gidQEgsR8Dof1bBUYR`~;x!h*&tcNX)y}lywlw5$rF`T}HCbrmUjHJ=S)sys z-svT*vDN-wRO<9j#{!Ie7xeF^p5gLR2$5}-8% zyQ>ioOfTf$HVXZXG;()bFYU@IrcoO06{Cml$hC8XJ=v z22h|p-o1Y=Nc;Bve)i@Tl@(y+CdB;U_f9OmM0f{H)IE%J+CiDA6}}1le=C_$c1Sye zb-S`q%*VotN`L|ZFKuk2G)`kha{z&nw%+5m5bdwZm`~~=TZY!{U4EveX`dIPlF+Sa zPO#F7IN+d^#HvPi;%g2fc`@4P11t*hHQj^{i;zcT+53WyqGr5hR#MA0VIZnrgBsNoyrOwgZQ6K_i?D<1^Ik+&PSTAiixO9vq67R(Znf--ftW)8(ssU7myC79L>q-M00@7^v7Olm#tee%>ptK73_z$)I5b@S0vo*9%^-jv$a+-Z6*`_v|N zbyz76H9_@@fhFzS9hJxbIPmti`XttW;#NAyHxtGr;(n90%$Ki1GP&e-Z`Ie)K4&yW z+dzBe&SbK-P3x+J@#ml?_)2!4kMdfqE_2QEdNi}Ut!jdq0ew183}XjKqSErS|Oajoo$@D!c$kbN!At9s5l%Zr!VpLq!|MF{?%+(fz$T544a> z46?})ji$BFKy;RY5dx|lGpI!4gOM>htA>Ms-V=&XhFR`Dls8#iRe@X^f_RC36Nv-H z6`WvdvBU_n{cxk|?8K*5Whtcl3M~1~Ao4r}Q@YypNJ#*-Ab+A#Jk;kP;YwSQq_35v zW1^JGF>4y0xObYby)`cGC=&Y!6TO|O!D_AH)*VOk2fB&r4x0w2SUmn%yp8nt>T+s< zl^b4T4My@l$c!rRP$AdlZNQ5Ctbd7^32e$HZPxNyD4JP^72v!GYX?bth58Sv{4B^S z%RECLYH95oS}cDi{sN9$w47RGhqc<0zbtly7AMXA5?Sk|ZtxT59920g3g4m=2(z_5 zDgHLCqlO8>5J~EHhF|w9pUgA!|MToy=Y#6hw}|d3S)rnBO5qf2*WP z1O6X01g(w3$+Oxp(lvUUeyF#sGlLL%mkjdN&xLW+$+Lxn2rCjprxA}?1?9nNZD{1( z4mJEpaiZjoBOvVq7Km=XJ`%^E`&!8lv7-AIpG*>Lre|{38J4}!M!p;*Y`v8lZ5G|f zgqQZ@R5-Bi^0pSGu7Lk6{59m7a`f;;=Oe$CIL(}OSLkM(kyP_JLAV)vu`i%1w$D5K z;CxNeGUZh<#f1n_$#wNO#sNtM`vCJ05S3LDvI4g=l`+p1AG}@1oEjp;2!{+Iyt~)fG|Cl1 z!U^_+OM`UK^mJ%|0GcF9&Fltk5q$4_Fvcl`fZYqxUW01@mjUhp9)!)AIM%WN6;dU` zJ)dwUF5kld1weKSA$Dm~X*w63-^zeoP@F;=Qan1_opGZ9ifv&b2EW2W#uUHj`)8eL z89u=z^%W*^3|f$wW!UdMlsyE{8@MAfHMc^v7}A&<3;Rf-L`8eKJOnUJ5ye$lmiG{4 ztJfS-)i-5P?1-NcUvmEq>Ej1BCj{PE?JRNRW^M2~wEo#>>Y7`|IhC*_M{%=473KlP z@(no0eyz?XJ|oIN`Yp2TAAD;dHxz2C^~m#8Tf)&eg{ia=b1YLycwq=&pb*ef#2L`1 zj{a3WV*QAS0AgIXj@z&OU(o=@7?!k92=EGmdj+NBZEhjpi3R1t-Md1(pNTw)jp}U%@;r;Wlc`l6~YtoMb(U1t~)n7{sn`!laLDDoaY(~)qY}pQY0fs;h zmIupuoKErxMy{myA9AG9yv+OC{Pi4$X~jPsIM9af%0p`SWSY8YP3T zw%+N3W{y$J4DxoXtobQZZR6)55=;{m=;Q3e3Li98`2b^fas{*97^z{S^j9F(gU-eC zM+PQWg)3dgy~Z_iV=#)qUg(jRMob2$!_~Bdw5Uq|x-G;4 zU4sbYxk}+ZWTzpOnmf1dy;T1QV}kv==%Inu6<&4Hnx;a*b^SMoA=*c?>Y(E>Sp;U5 z9?ZHe7>=%sdD2dLH#A(b)Mf1fDOK-sG#Mj+xp=6v$i(iSqj{F{m0a*%2eet`j?$D> z+%1{hp+8kDFeq*$Nd5dkuESYSqe@yi$F>3X60T=LV?6=B3v{&hKi7zKnu=1l%q*sl z9>sVLQl1dw#2}2Eo7;GaX(F6~Ay+qH*oKr)m>X zn*)-+q_691A?c)e`V<B8JZ@{`5SA z^fEV*G%dG)bo_}Ei6n*tX2-mQK0bl?B`7|9-bZ$-qGh@MSZmENnj3K}jZKcU$sJ6O zff=Yn2~dq>7J)iOA6qttqWctmSuYmC_4VzB{|xwyGZ0oI#&=&yyNdh2cNA)^6~J*G z7x}0-(9S|wVDz|xFkD@o^YUD%-H+6v@z(bx!X49y>uyM7y74jxKo{K97=Q-k2t*`p zrJFU*@wu9kUjK45!g>gQ1?O6AV&0UE@EyZc0JM8(SpgE!u~!Dy-&7T8FdT2=&Fai zZ%uiLm3=i?3Ep4vJRy$#qrF`H;ph3uO5r(3Na@dCGUpQ^bBuYtZ;o}80XEJ<%qRFk zwXak6aq<($@}}*tqe*&3Nq>%MnTk46L8I9@)?BcM>e=HP-A1#xG)?1{&p($oW$d(S ziFB)+zPn~UR|vo>aJ7y=+ptp7MCv@oucIe+yMb08+9=CMmI&CWRwVv%ecq6yB2^#j zcR#ZP$zeWTpr62H?#XM($qpE`&LF({L8<+~MP3)^S{O6wjeG6@-x3O<7<=#gn} z;lvx^+;?DczCmjI1UH_f3D?~njC|9j+g2oC4t~kLn#tYY+e~U^KEbZK(uP+mmzhOC(pId7~CCQdEduYOaWme6eQz|?(!AfS{PtGlQ?*I1-g-{1c! z7$1U(NLfWwfyzyGf@hicH5-#B>1pm$lg^6mw>Si;w{f&%45j$*|HyupGE?S@T_kuj z3xq6+MV{*s2X%pdHFmP4d4fwyRsfBbuVw*lp#l#tTv$fsUmZ9O$uYW|hzRKD7RviC zV&eY2lPMGm4yZG}A6BI7k^&kov`mf-w2E^Dey`2`Y|Ioo1)HxBl+wu-(mc}rgquev zMK1Ddn7E30xeZzDtmzoS>CN7`bEnaQx(;=T1w#DjyX+b|)VMi`8dYA2yqaLX z&CI}jDI%nOJ2;SuvDr__8=%=doF;jPe9+tdtF1aa?RYpe9YL+%d7f`}0gTYOfk{K3 zF@WufT0(PegeI6dH7aah`BA-%Ek77unxh4$U3Pdpq?cEZ`KYyq^66w(!@`=Nq*g-} zdn1zU{&~*AYXCCxlAT8KLl&ha)y?Bth&K~2JxnSkzQUj_nAY=2(7>)S#?^4N+C>ZF zQiWZF81u2hh+>_T`X2@t@`kLd$M4;_sY->SC{vr|myBe7r@Rc`*?c98Bw!=Q=GJ(r z&3GfR)=35O65$Q}Zqgk-c@5>&d&=KX&viBZUvFiQ?Q)EA4rhA&4`x}Cz@j^gd#N}e zPf1sjc93Lj1e!PZ2&}8eb{FP7nX|;;`hkHD@^yK5naj&tnkzC#5nPZE%JP;`_A6;G zA-l82i3>@qris8!f?!p6;nj*Expb!vjQhkfI;{PaaUR#-yK17dM0oECD`yb7aS!(F%-S;XIX6i=)mAkuwof9ea3m%99*gL3J?k$!ubRH&WvdDKY$+ z9+K%6abi01cdbFspY+FFzq!#?Pqt~G4$Fv#cYnhRa3F*E3LxcZmKFt+^R-w~xmAeK)KT*rPbd`B*Vc})E2d;h2(fPqijxvO>qyS67DTewT zaFp_3JSUeUjZl<}wJnHalxrPaH92n;LjAm@SZs%5x2V-L$*b%>)63qDj%e=);jvn| z)F#k?R{xIf9laPCd#H9e=0hqvtmefW;sYpjgmQnRnuZTw5Y5K)HKj5XrFQ9yC%Xb8 zv4^(xYF(AO^FjvIN1_z(mpqKp+Np=6otwN5^a`ODm0`}K-9xuda@Q7%d+BkV%((}6 z9?C*lpYlKO{=cTOLWztW%lj2ezkf|n5YWozEKH~YsEqr>MuAd6m{(6F<@P&@V+@gZ zQ-dvu&J@=ggMTVYgf@CFbPZ~+6CQ(`9g4}DCNuD1{HXBZF6JGE@IZS%xI)RanmL66 zdT)yDp4;YsQ(mkkPd+@V!r`K0kuQ$6E(m%*XqnD4!?#CsPhO^^r6+KVqeuP(%g`dr zc79JMbInKHsW2b)1XSrVwGf)DV82w{B786UMs&Yv5VsN&wGSJGVt?ad-F{U~?Hh## zMmTu@Mq{6mBZ`3B?e2NJk(QrJ@i0iLJ-DRcHZA;Z?77r^s#gl9mfc|?A^q7WPUuZ9 z1HKYGk>KW8gnNWJ($#-A`^9A*Ru-}%k~DpM=eOdbh7ikyx`POvT~mn&p++1;1O%eE zV@&|{{;rYkdcX5^4m0cr(l;Y}X3mOw!K|1AVAqO@_>^TiCg@RC!exu@<19hI(;RzT zxOPx6ur}j|ZZJwy_6Y9=~~s?Q%um zq+0{oI<1MExyd~pshPd%F2YT9>07ejT$a|$QCi$E?TKes;Nwta@{etOwg0mUhlaBc%u99$nS?ZXsNs z`9@q+QYABq7t*3uK}wisMHAdLDsT1C3dLT>-PlKF;SpnFz$9(&WC}cezg;Q}HvOHS zO&l@q2Jy~CWOt0!wUF`2c~_A@Rq+X1{s?OU*z?MqZ|+z9FBt|rLZqJtoOP>L%U7kT zji~;k5BU*WyaT4 zjOfOKEVjSD+2ZPn(N$AJxk=(T&0PH4gRQNE!9X{L`R1SdFw{YFKr}Y zlb?{d1-Mm(k(iaGNTqz>ry-7#PF=+Gwe%;4|IS`~m)fh8cg@FnnA_owy=}Xa&Ez`G z{5-eRf1s<4!1;>`UY1aak?64=gFeXqvH7`oNeyL(C|Nn3eoUrL9VI3Es}9ecXu7bM zw6O08wYNFHT4vtJN&$v&BB|>H-a% zLmB}-866*`_BfWZ^(Y|}io4kL>!;wHkPi9yuwB5h zjEoFS3I5jJy0e=E)F+4Ra$k`SWEX}Z_Ma2S&Gs}V^Ldjc6+0uTTSynEr?)1S(DfQ3 zVtm#b4ABp;K>nn*^pQHy}wN0C5 zixZG#IN@hoEVhY6^G?_%xO6FWY;02KC8Ee$Aul(ME3bwaRn-A z%(Rb!Jp>zqhXcJ_YtNdopOQ0%HwrdYJ7eP-Y~JZRpnPJF8WV?mSa}^cFm38 zwLX|F+dIvnPZ~M~=a&s9ANc+{%zsky%>_YH`cz+qp-8pq zpjsug{4eqCuc=@@3h+U-YcW!-4eeW+5~#Wbn7;XMr<2!^Ub&K9{6)!Fh6c|X()*x8 zs7KDG+Fwc}y3lIlxTNkav4gr!3CfdhRN@u=z0{XiM|Ty{n@(!LtN|)Hv_qKCp-chP z33Sye;|h}YrLzSlZYzlAaRB$yy$X+s1Jib7oY;{+5}_I5=P0yrFyJmz`p9eNXWF#+ilQ zrD8pOXaC#k(MO{sHJTHqY3QLo$oaRBZ9;!W_x80PI5`cVbWI;p4;s(Fca2Fl>=5I1 zfZh*P*P`avhfS^yGl;`9@>1Wuz%J{xj$|5(V1Al?(0hepyp=R(r3i)aItx!?-;md=OfVU@Xk=$}UWZl>Ta2bO!rIGP3h{O^Q)t!x}i=%VRWd;l@Cuc05gBt_#5LWh9P1P0C5 zDxvb5*azdF5!(Dn|E`)R4T;P{Lb+;*R)LC=xE^5|hLc(eAK&%UUGISKB_tXw3gO0n zl-j-j`YB24kQCwWDW_ppr=(KHsPu`6)dzOYOny#f{fg&xw3Hr584RZ0!HPF_IVR__ zSZC*q>nNbfHTKe*LzTeC0Z&e~+*eyNPVpmkc3O}&Esu%+_B3f?Mha8tKHT<)OpJ*u zL%U_5ahJ0u3{WamPWx0$m8vq9;>N-Q>=pteqcOr)Aj*X$;A{EwQ7|>;k7u9ceHoLA zgxA9`7uSB;Yq}e!Rd{KTajoD@F}5t?$3Ok@K#2s3k+-df%#OnT$SLn^LmnU;2JMu=~=ME)xK6ESGFV$wCV)3Pdx9_ zJf{4z&gp%S9~|h>!FiZ?;Aplq$X7m=nEmAV6Y0wFwVc~A^88;ivf|_vXYt$Cx4)7J zI;>7|kDFGnxbV>6akk&0lNbm@+1IVm^AbBBk#Z~CBh{+Qm>0!L!j1E29^)G zgt*1FSV^qfP4(!{y%KfneN_5aV+0_#cQnv9n~C1t#z8AOLC?2mU=PXmG%b>qHB7j2 zVlEj_9%fn`I&wK6fac)KB*$mGFNu*#g?)KyAU`c_WZ457dv0uHg29y8EMi~oiSa^fzXf=FRTjAW13d-b*S`{9_KsdJ z>}SJQ)PMyBy=yM)3CUANQ*g%$_U|(B5#FZZBt=uiVb-;#-hKL7J0$HB=ZsVz#q5Rt zsaYm3hf7!KJV_4yek+*t=z3eH2)7YG=h`%}!4-U<7fxgIVB{yAn*1Q8fDBj|;Z5%V zi@f3A>WMZJ(_^N@%kKL+xl&h~XZ`{piE6L z)vFqd--)B%yc2a*^r-{An@vZyv~rB51eMD+xl&u_zI{36u&J-9R^Hhzossma)*db8 zUd6yK^;z*0^P=ziBubXIQf-l!ELpShKpg#l!WW~6=t5LGx7yOL@F0#nrN;Zf$|ybp z4z7J;A4W^~X0HpqlOm;&5s+>>#)b(1jx|AitlhVweS67AMRI@-=oCt)*o%5FFfO3a z(?H>ium%&9hB?**JrkUs=qD!Q#nSp|Xzm&$5tT|NN&(=OD7%Q*3^NvptT>wupPI3@ zn*BC8lFeG7rsb=Oh4kZx9j4zgO!!r_7q7E#?fsx7!JU-V;bo{_GxM2#g*FgG+*K>d z$9nSH8xc;qDm~l1iarOor5@>?NZ^d2q4V$KvZkqVmrOS6wiYn!c$&v9?=ZJ zPq$Py&L@e;p1?o~C;D0};^PlM|97n&kQ&7hM+XY^4?;H1K!3C2LVYDT+yqxNR+{PJ zRZ=kp7ER-R)FeBL?*Y_L5=kv?#EI;?2oH{9nvYVpe9<>2BK15^1N461n-eBrf%o>+ zzq6Lx@o{>5TX4YnbC?pq%`95H*ij3QPkyc~&eds3oH)%c7N-@ld+kKm)u%DFl!=Kp z2RlD6u9Ru?9vM6XBRZ8Z6%+|`qDfwm!{2+|~Q zSkd}F^6(4TRYxrqsY%o6I8)@SE>h=;)XnjRh`w-bfWgd2)qpG~fqJx+HAbO?ADtvx z%Vj60*8}vPaAm5!mU07-)#(_Gont&i7wQe@xfwW? zT+|gbOzeW29MWgXEEB_h;J#%z0z8nO2#Xd%3?Su#hgo#*-frykd5+L`9icVJZHunk zq!x-0n=LGG`lZiuX6TJLDVqG>if*=>Yq}YWa_Uw%otJY%+Z)C%vW@a~w$D55b0BB= zZN|zl&X~G)cwLI@5}l38`c}ZdjEU}oe_YA~jd8yhT^Yf=88D>y_<}S*{ zyd0pG5PIMPBy@ETF096aI1qm6CmypR&Z=0Cda-G|4ch2Xp;|w4p4L5{OR{EgyaTLd zdAtKIUJ3Hk7?&>fh~>=-@5iF{|~}DNCH1Rp}^y8Z5Nnc zofKEG+W;{s$t9p8!{9)cXs%jK_)@m`0->y2#Xb-qQB;uQ43Ft=x=Pvfg=S{>-auel zA(QtLVk2oV$iK^b?DN+`)3fi_n%;O|4Ha*KAV{F-e_dMib^tq?o{T53s86SXHR%Ss zP1o}vKJYrS97iW@I7Y3QLVh~=&rkCrO4)4 zh{rFhgWCZmP0_OhwO(0*|5C905$vB6_EU>84+H4}Un4~B{N%P7hi^Xd;>7~o{ZAAp zll{h!1F5EF1=p3vj$E3AgM^4 zw!dy_#TiIc`Zpa5WF`Qy&<6P&TGxIL%b8HObo{pd5kDnn>Y}zO00qB7>5{6?)L^o3 zu}3jq-Vv_gy4oeR;wl|hkR_7w0c1kHdJOYe9OcBT;ekTllbO~MXU+ib9Z(a3lNgwd zYLJG33&m=6Y|BVaDV(cpFZOQ^e=3o?0^ryzA7H6(>j8UKAz z*Vka@s2#_lZ9W*$2iBdz!s_o`YCT~#Zv<@`<2Djx?+I_GKgw?LO9DfHc)Cg&$gPQH zo|qiISeku!4(UL1zhmBJ_S3nBL0SXU~=~H>(#*N%|b<32gq=i@osRZk<)LnB} z`F4`Xn410n%vKt(55mwAJ*jU4}K>fU@<%Sk06-w(S zH=vcvlDNiXqk9|}tnqbc?m+EuAS|#<%3C6RfCUHXjq`3>+EqE1qCx(oK1C zG_?=o(Js1@)Vdd`xg`HH3*FE_%MZ}b6Sw|3clDOcu{Sa7R1(Uz+Mg%k@HTTC*fe6erM{mX>+g# zTyFuFq=-C*v+v;ck1vQ%Q^L5I<8eedp$fUD&$3hpH+v^j$dEsaXvk;W1W5Bf_ARnegqh%ZhyW3eQMh6RoThE*nBJ<-_2re=af!#d`>4d^Sm4}F}@9J z&!k*i$tA=yqz)VcwYCMflfuC~gkau-r(62XeQ&=BSg)J!g-*#UrNJY}z7ck72nhS_ za4dp)*38Sr)mVRjG!7z+;t_8Xy2mRtr0ujNsjLk_o67V&sU$e#ujs>B0y7-Bj9Jr( z)Er0fo^T4Pl}dB(>7c>$zT@LSxb_$hAGVqJ9)gl;P8J%(UU7={hYrF`RXu+Kyh#`V z6_mRnt94Qcqf^_~L35>j0#L`$AonG^4yu3ax6I-U*GG)+iM*p%&S2t<(ThgmSLBaVbnz)E3j<{S08#a{9P|$WRNWsaGJK z$f24TBKj~tBz~5jMZmzj5Kbe*y#C&8(>p|{2pZk>RbAT49rN?YGg~OK_a2W1^rTjX zkjEn9CFNfW*tukZbqd-DHOOMq#h|1OQjgN&ambRsIkR0mnUEF{zMwTQDcV_8_N91( zp16eifxJlzQief}rMPgSnfmu0_CS?QV3})X#(YprP>`n`khpCwP@Xz5b#e$Mu!XC3 zY*kQU=rDF8o1|TJ3AIdEJqGVr6xrV%e7169%E6`arh?}rsqO|)T8Z|;{=k4Z*L1s1 z$_3@1DJxRD!aGiT`bjS@ucEiS2<4f|#ce-NEQdU&_scbzV*dW!<+7nSZ`7%jT~iPF z6B^`%&A3hlcUtV}cc<>IA+5?*W2**oAP(TZn9Q`}JK=6#18>=dH8jRd^A1LLl>(4a zV~sK==YT}!o0%j3A6Mrc)l}NH`@NHpPy)dQ2`#~fib?%XR&( z7I!Iu@OyvXurnTQxQNc%@OZg%5Nj9;I1V~%(kYH`m-lh5VtLb6~nWF3D<)l)GtiAE5X$L^khnf}yu^Byu3Um1lPMRK+v z&*iS4p}$z$^OkQ7IK+O&X|O&rn+H-6fA|?%FPbZ_44E5Onn;Vi{I>nOcsQL0i8`DR zXy$*?+?r`w9n8CWSrd`W@`h>*U@UBqcOZ|=A`H&>dY95a|3v|kA)v6AsiB;v!$|75 z;cZYQuOk3L;9GQ3jG`08cDJ+k?QCldHCwry`uq)M`>66=Y&H?9WXf(sRT~o&Zw}12bXKpfl!H&u?Sj(k#ru(*c_UJ;i*W%%R4qk_EGA7vFQ3aF>e#kFvSNX~e0my>lsVS1LcoC%ZCm6K@vSeazq$~N0;{6K6_ z4L3cg7@}nVB1slm(dx9VI6a0Ng!2FfzK6)?b36W!4b8Ovw+3QXV#9jh^XL^azsKPA zUWZ2xZ1+M#nn{vHuRbyzof?;j=`E@5#S5`R8lbk;+~ke80b25+Glx3!i^zF3lAY9` zHN9;;a~+LXkLgs)MPiYIbOFEA$7jJYzj>Y$LQ}%crM;WhQ41^G{gAgSqAN>TlSi)= z>AOhC(4l49Alry$E(mS4uA{f1q+1QGx9Iu}&3m^VbV$=3l$Z0Zr!d{shWNmEoV50O zIrTFMvUb7g2i4m%u#jWm$_tB?rSpV%wWpfzs9`(b3h&}Ir33L&BY@N^CJ`d){ z4=IRAW$gwG9AI}wO*0P(&HRu*)xbsGuzRF}KaFT{oM5EE0!P3txvBi-YyL=#8OZfQ zz97%l|MQn=cf{@?EEx9o_Unl6-?8#sQFHi)<^I*#2n!hcP=Y!b1=M_ckRmkLypVC> z!pEW_+5y{JMaaenoCOQ@>l#~N1KU3q<^#>*)BMvfqtUM2)gBtL-B$R)R$#W}t$+)RYrJLXXCa*xw=0>aed8NXFW@f8CBLDa;+iP4I>rfL$ zjCB!a45xeIFgTMK>-6|J;uE*pd={)vJ$MC@Af1 z+E{65V)}ni^8))MY-jh@gD=UDgnceDq6IXPtO9iBa}{o54Z+doU;wI5=!%-|z)u(6 zeP|plk2DiC+;+cO5-8WK@*_!uCd&=uS?1F2#6pI{Lsj_P{n)u~PuRy5`|O1)M|`7|W@3w)aq`ux_QWOb3P&GLXCjt+!No(8$-5Rv4nEQ=p0avd&% z4+>`Z?OZVtDiR3OChMbV2S6~7IOs#)23sc8A1q`19Fd>ySU7cvI;?r1z=znKv{*?mv~oOC5nT!~CuxeC2` z9i2DxQgZSHD}OnW(9j??izgPZu&SEwSQopCD2*~n z`mmNmzxnLIR%2x4$$$RZM;!JoO2)NTTehRUnM-@9;|)RoIbJO7<2jdz#_|340lePC zNns4uEOtapC$iniH);D7#aqa;@K3yK^6@oRBPX9fr>+t`I?g3(m?GP;%1xUZ9pN9to5KR* z`nD80qhEAL-E~>sxn}#Q%S@V$}I$C?R1yrby#%7L{|M>GD!VPa$>b@+&wXuj$ zrS|`}(K6=Yx%FSRtk3>nc#ZH3`LQwL5c)({2u5{70-R#YknGa(S7GS&J`LxxZlEkT za&E++@2Wmq>HOeUUuFct^pZZ>J|Hg={xG$s3|4;G^e!ErsMze|VR9pR*mhMRUUR-> z;dz?}pzsxB_Er7wJxn!>T0a}d0lcNKmnQpA>f}b=yvyJtZOdwd)qO4RX#ml(`nJ^= zJjGBOG=cmD;Bq*+b>)zP_LX=St3f7KsU~#~#6Q!bD}o3Ty8+5K;^r<$6QphZm*!Jk z6+7>U!B+z)LA-FDt9A=FvnIS~uQ|6&bVa6TaDt6JQI11z>gcvNOUclOtIlVWuwwns zQDji=)Z;YR3mDnS%Q?s69+SB1<1Okzu!t>Fi{5L_)0D)=RBpWqWbnY^>Y?aR9nW${ zHMKB<*1T&XR9wLE_@i2eB<_uc4V~Dvo1HJW)f{B45v8wul|0iRr%y2YW?tM=CNp-g z5wZ={{b;axiZBY|Le;PcSjp*V=Z1{u9O*?>TZx*k_Dd69E)kRw0_5WfCxzKZ@?=uGm`?PcH4sUORlisTMA zu|wJNU!{AgCLSO74}@j~HBWx{L0D$umBkhW-F8UEfwd#+*zr%ewTBQQ1;AkgirE0J zqjpCKsjE#erA~j09tC97Zj?1>#;vvzXpipXXriNI`Xsn6pgE{UiZ-5itK2Gor$xJH_j zB+TnY0w`tk!3yPyE}ZlVy`=;Cg-odF;>K-Zr>RD8f9Lo-(mNMo_&JF<$vqY3L5U zl3Hk;+l64n<+^rvX#MFTSRWpo_ zy<2@bS>_=%U-h@gb)VboP}Y{}7(A~<{MzZsyfQ^+>E5(GB7n_rK!jN+t55IPq~Nd2 z&rTvs+57)}HZ1l;rjs^uGq$IDW^kJ%mGgt|Q-?R(Cb;y@KxHwTSITpdiP$&a>Hz^1 zBw&QSbnLa3+29AGRZD@fIat#UZUmPSe5ql!$OtNU-tJ0;3=CstOCTgQLc95Dn74}$ zB7a%iewKanW9SCa{w)Z9P}q#w>I#!%0O=Ca4r5wvEXQDjfUKTYJbCXekX@?m%DZhbnQ+yQ&D&1WTu^EMh5tWLT_w&dHk!wFFbJw1KI!b(qLa^-H zqAW;YSC5{(Wf_&v3}(h~HzLFi3k341z#r34AHAJ@$Z3c73t^ozc}<4j7jn9vq|z-o z%qlAppVa?(@X$pD=7>YNeQSpRizml|cgeMhHJ9x)Tg{Rd)#^)DF8&JQ=D);G)Wkz= zyb#$oEwtZhb_}^}t`MguY|v3@qRyaU;}9=eh&d8+LYwusdztXkT`h|$Y!Y&u-2IEv z)ko3BMrf_byLRo8uR|p(Jwg%?lM%^31YStB1RLruq&JH!@dM#0u==qPB}e`3v64KM zZ&S3^a(|U3r9n`Xp?UIV29@A$A)f_OCX_tm0`>Sse9S&rs2Xr7`g~YMRB+C(vh|FbpM8#4k z!_e%i=nTNNdU{M1{8d(D*}vc&c2V^VI7=@+J;zY$9HnEmBwqH7SEd0_-@D=wHgq*Fat#2uhwj|pV=4yq|X zOyt_n?(+)?r7))*uLFFCs}K+()Ov@!0Ll2RoAJ{{?wjC<%1&9-WEU|3Dc`DCkH{kt z!O=*1unvEjYRcp(bnvVgy@9CibnzMYIOi0D8?LF!FM7w)Pb=U< zKNxIGHbjK%krg06)UHqQJz123~B@mlXm`g(>fKfi7LxjhJ0Q(&n5HR-6@ zDrz@{2ft6`W1;AJw&M|0GI zPugP1s;mU)^Qh<-*AgPdsx5Je8c&z1xlzq@dD8`d1Y%O^*V*0G`@L5B1SMIjDAy{q z?FJ?7)>bveLDyYM%QZvpTRG8%d1nxKVkgH(8M3?#-<<>uD4Zl^>jX)LpE8`SOCv>O z%ID_EqJOP-B`j&-Jt7?)zxFS$;5e$*mbRM+kF^5=quqn0oREi{j-z;Km2iU@;pqu6 z*b_5!htm+*PIVjLFak$;@aCgH82fgf^#c9_&Yz^1=23v8@G@w%4;pl6Y?VfbQ3ix8 zU47zuzxCt=BRsK=WP(n*nDp#7<*mq74cI3bN|x>M4uZp*l5D7$kTV}~=)-mLToJHP z!yKkk7fGfen@`fN55#|9Il^M7A7t;l{F>6Y5V^@K5)SvnS2~PP4}Yk$v9pCYZ@VN3+P|)equ6oSshbb8 z(+giwA>S`d$%H-wLYE-<0vgZXM*U2-pNqNKpgrbG23O1)?D- z?+9()1go$LX1Tj^>C~B{KD-{Cm-fhy50ZQ}v{^9%Fe{v==u{8fN>S0wTy!pUm*EN4f*Y;Uf?mwH?FkR$A>qz#FfkWa$HW_RxP+1CnN1;8hBGvabAoCTp63W9nUkd~qy+vKh_(KYw zjXL|wm0L$AdKpC);`u;;y)Zy$jLddqW0iMpVAtcIAfL~`sR0CSZkV6o#fy91F4<&36o(1FR-S|R>AlI!?Wx(pgabU7UR=SowKaj2wfBY{5%wTnv%D;_bdb+_l(|ma zM;=fdL7=9MT6(2hT#^9G5F%^-Ni6Q8dT59-?E~$A)?Xa5iWBUHX|>Q$WG8%M#^eWq zIglazJr+;`-(3+izHnAwyjBf&q*;oCYmYv%6ix8i7&I1Ker29bX0oB5H$CxeU$cTnCpgmlXmJqM%&OQn~|{nr*8;HH7Sl3`6I_0WtZcrx3PK) zn!*CHh9sTOn*suk)$J0&32Ls(U1<)E23|ZGTf*HyI(hOW%w&vUj0qPU1kQ1hj?V(w z^8fe=&%k#Dj|;cl1OeG%W&?BhiJ=`L7S1y zrCgmj%A86uv%s8mh3@ZZ*9Nrw5OX>oL-||o@gIzcuP8Y&hnbId$#RM5pmJfFw1(5~ zGS<>>0?mi43!tB1*>d+@hB51u&~n&d^Xk*&nwt=>6{dmu#y3Vq3G*s&*tk;xT)^!S z{U&+yLA{3LnJMfd936vSBfaf}q%H6Rmr)DT3mnrw(dIos{wJX~w`W{>A8n~1Z}V2_ zXC!@`hG&E0AN~=*5w9mJ`ufo*tXih9) z=Si+i6vNJzH0TRw{tuN%*sszU&6BAIGv;eUi^0n;G(t;$IVZTcZRUC(CO$S}`%k++ zO*t(4#<0*yVV6h0)i0>09n@h32l^rrIeu4d#(B1emFd%}*Q2mZNbT#sHtF4eBp$(k zkh1*{;5fUBN`(->1P6Gy!eRNl5Vm!}sv?Z|YuVJmf4(bxPk~A<1IliKNH-i1q zXjfnDMYgCyM^UiWIqrhKocAJ)idPXP#0Cz%C}F+VGI61E&{7n^_2ABLP5Il?;NYb9 zJI4R)E{vtt!|iu|%F7xbrLS2C_w#=OkUZCYK5?wIyWakE><44O%KzVAgvXEw1UXpD z>DUt@>tOWee`CLf>QS3Rc2acR`H6#2E0-7s6Zg}Cs5b!B&e>)Ra-n%;urmXf--FS@ zKyLouNM-|m9djhh3Irh^;=rb?@cn`DIJ1wy4aB}Ej@t{% zkLBt(y)%NU^y^!EQKsj3t%$(stopJ~t zY7)zydj%1MSw^gQ3Me_HJ!?uE7r^C`0AiB*sfZa1nI2d1B*i1_nxC})h4!=cL00Wr z+@%o18B+pWT`1fF)qW$ekbyDxAVz)bm!ZpfLL>c?@L#3OPr+Yfre&gE%L$-p%;}BbuWO7_3N}WS*=@ zz}CsB)B%4On8nw9zDwWpICmv&RZHVb26fE2MX9 zEHz$8`HR)vL&=>m2jTnsBfjJ#{cStRGCyJ2PV!ya=bj~99WYK5CM&c%erTOqOgbrdcR>e%naOP78v7edw5n@#BBamTJ zyqF*fgIZz6D{d1!>=tn_tA(z+e^hgRpeRrUXyw-XSl93pfFs-|M;@6Fav#d5_|9BP z%9C>edTHB@#t{rn${eC}AkXOlZ-fLNL2w}6?Q2A4jS|}W1;F!3Wa9S7Z=yEfZ7lLI zcObS1IlP1AQX%R%X6O!q${?GFU=Xq0?wIA4yang)@Ul@;j`3pU!%~-W}#pTNp5!7FNs#d4Q}J zOl{54IONB%_W>@g`iDkzGlqW$x;kqi%gF8{Z0%YA;Q&q5_gCAfl7G-M^fH11B-`!I zXyU$UCl1(SD@QksHKka=gZV9<~V^6pRjbQcX-usFy-eZoB->)~ie2%@wl3Cs`uL5B=sGPURfw zJNEaIRTt5mY#39%<@BD$ZQ7P<*EK-%aT-~>#0~V0qTgbc24R(YV99LmAd0QL3cHPUn|=G!y_7|bk5V!0>zi% z4F#G?Sb%(^ykmj^s8D!<>*;ga@6$7L>hs%CRA2l#JM_7R9Nu;5-Z6$xjPhMNEkf?Q zD92LTvHJm||MFz|L}5*Er@KM!r{UkVzEt=dp?wvVjuFCh3L}*)t4xTduGLQLz8Su> z1_=e_w`X^UGz$SLn|4_bLKmPe2EqYp>`F=yEkrhdq`A?MgCm^abx4^m%o12my>QGH z9Lt@TbL(7G6(=nub`#A!2Lb@ZD9h=kYZQpK%ZmZ%T=0{bisWvmZ5e}nq_~>Ohq4Rh zuW*P7DB}^YgK!;cHfXlb?<}zvNjxdmzfQV_hJU!(=%-F+ENBgQc^vRLuX@?hGdL{X#DccXw zggq#vxgmd)aPVU?n1?SZAQ(4W0l^8dV|YYYMT34 zsueh&U^GS!I}}%i%|g=W~4Ly^B-M#K)u2=Qts6abJEbTM#KNIeTDL-`TJSMQd&hoKL zn6=0Jdq3m$f%lC2PA1|+?K+!(M5EO-wLJXitz+yJ&GzeR%G>RLMZ2!H*@5H15B^Iq zCD%huyr&rL$|>%8vlx`SZc5tZxF}s#us1S%8j-0rtRvVFmB?~dfW1+hr7S^Az@hQb zLmpB(2PmE0@tx}US?c&)M(uM!61|PfRdl!m2(EfAkR0%$8a0|dA|4zTmkSRy6=e)= zg#28)pOh?fo-N7>R}1{HmmqNq=FC`NG(3X~XC|CJu%CxrdlXbCFe+pXVa*Az=S`Vh zRDTQ_JPQR2@wRaKL|a3ANiZ&13=Ph~2OM2kBuhc0sbpoqfL`(l2lUt--*LKsTxug_ zq96N$ORdSE9}WA?>5$J)AOrvr1N_f#IS{S8nbYPC(W=USIr6aOvT{za0?CX;!X7id zX2FX+s8t(p7zL5S^_c}4;0;~t#7X(q$X$(T=u}1~YwU9eO z9{=N*TG8mJm3V^F7H-s6Q=mAX^XgpPH|;8MRDJ%bipbEfortWa0T0q#7t9yO^K}pa z3tS%-49Wr4@`f4K%4usBR2K+jFGRAmV?WgAW)8_c{O5T%m|x%A?*@+&H=C@I{#pTm zA^2QQJEAV^y-d;X^Wa?M*1tcOSIVqqAZ%ysi7x4PzTQ^sHmh9M=PTamHc9-FG*0?s zgMeqLG5}=eN&nN52`Kdjc8tE7u$&4mb;vW(q19`g6^;QfLyfL!_`pQ@D3EbU%c%i& zUKUQ?NUasdwQ@PL%)FzWljIIp01!?$8zN&p6DcR6hxN8P7`kt6)R-I7KK_nB*kyem zs(F^l?N7A1YA{mSc~Od`a8<+Yzz|g56eKKd<{@Cfh94$qx63FR>y*KBQADH{L3&M4 z?M&XoeYx-f{u7vR2R#wEqv3?yrdP&3)9l676I46IRF`u)7Q%xHok z!NsF^c0fwe=Q_pq3vFmVg>OQUUQ2w|4l3UBWB6RfK=U4yPv=X5_DDm2H;-97i?~g( z6d}w1!r3;Uf?Ac5^CqJ2yJy^YLrGT2jvG&OfKA@sAsxR}n`C>bQg9eTY|97!;Et)O zY%hI1(HT_hzyGfYi4Vp|9P*BVv~9qx`}RHKEqnFhDZ0?7iKhSSTrkhDV5;$7RBhr| z3(cdE8Bx|SROo9zG5+G!>*!>o&0qD_7}T0!#ppaf?b&zbIO4mG`PFk|>qVT6M%JWF zZ^Q>{fCq;vC0Ms{BE)Bl$rNo4DdEgz%LqDiq0zwvW?O)uS`TL(@DRjzTvfe(d$x&^ z7VyV&9M=n*h9jFfY{?0bKx(x(7HqS(J!K1GxHmA2&_?b^2`H+zEk z+^szn(6p@A!=9+cX@`*)noSHopv366n7#1;vGy_?DS}r}<^wB>tX7VL!v!>pfPDVu z?BoW@M}L zR{G9XHgn3zmu+I$ zrJl4mt6SI+BVxMh)y5#p1ZB0fgeoiKSy2$;BHD2Fn?p6sw??$EDMJF^&Dc2bS7i0l ze!B+79zk64qgWT;UxPs^hPQfOxUeRjR8@q~2aH`B*G5C%Qx)uP;YJh-g0 z3G&|AS)Mq5*ZC?U|EQ0SEaKG(FccdBg)w*v5nfzID zRdvLaYemQXY`jk1R>UW_fGi2%!bDR@`!e|dTbU;;5cZViF2i@9?hmz^O}vq>tkS(+ z$u)3IsDJ%wB10CLOLr0NenP{JybY?%UHX|fw{~!$TA&`8ByG`TV1GV(ulgY9X*ZBw z8)v7ub|CDpHat5;<4_**&1kEM;qQ+58kK3sf=xbw@`CmT>OU#br90o;IWrgct2Y`s@1zR9JI}OW>rh|S5H+tOmdY{57@L1DN!W z_Y=46`~ZGHU;r}PF-VDbbEGMS0#W=w4vt9a9J)p`Y_K)X=Y2dCHv;T;YZfAS)5sdKmUx-Q&U0$-_ z$}|88Tcz*b#?ouv@tw7g&b7a*zr$T0GEbl%s^Z~3z*jN zw&y9>vpCQOIU&YpR&;0;F0A4Efjh`{`xe^Zf6k>)?Hcm@y)T?!^lZOcbbvZC<92Az zkyTcXTl4y^-C8(mDXj`h!FFEuJeepe-FTvr8Om*K{pn2g-CGc-9PFSF4V)F;3-*|h z1LZ}JXR11==Z^QW#K`l{k$i?s6clo-{> zKq~~)RTbnPp_IQq?cly(!QMi6cLu9oh0kzzaL^yCQb88DK%=Vq^k62nqvJxFzyBja zZSDVe;lVh{dIDi4wEtNvJyH)mWf|_ilpi&W7kx^kLKr%Ge&n(H`24(ejCz83;f9qQ zn|FQiXT8)f9G_yz0uF6H+0P@8>>aNeO{}6q(Ny}6QCeT&&eAENt-cGd#q%~TzE-qm z^V!B9pOyfD!hJ_|kdk1AV7uT?asFvEikmDjO@~~}diLbRM%A^qbTQ(&&Z>D&HJ|J; zWZuSLM@7*(bGWq?s#ujG{b$pX7uxM*B@|>HjT;o5&xTDjg7fqiss(&R6 zvz^MOC0VjYLk>1SY{DO;u$C?5CXYB%nGBhWU(Xp=7V^BKg5u>m3~ID!4cYw?Ep@!h zRlWLHqLmG4up37xXbjQK^)z-%C&5Bd8A+Zhw>-pB(OjlsC8XaOLXf*!MuVv+zptv| zeHCjqX5db21c~jDu~2Sa?P>K#42@(Pud#2`haUwoFxcewvlvWf0DH_EPV|U__~FCZ zL_iRl1cO+)nR_%@bFN#?2^dJPboV;FisbK{x}7!#FJoamV>dDZbqkTd*xcY1X`i=vN5h1t`Y*nf3#`rjnFB@?KiMI1?1I!=REhQMuq7j z(Wxyy#T4p=74sNfb%ZPC79Cn5F!8+b6wv`IE~zZWW?)5%p;l&GLwBL0Dre|IqjM-X zmJx9i6Yw{;Tx#-{uOH*jZ)^=vMrrhHp@JeXte#g8cLviS( zCk=)88(_MV^vweU!xZ|H0t45RJv=<(n4B1U;d;rBR{|QnzyW(4SV&*EFo|wO2$EeD zMn{d&DU($GG%utJw^OM8??Qlrv7CDDDRG#a%~evVkY}-J=mw#j6g@iHV3)Tm*5b<- z-}$3GKQ*7uG1vVfk$eh=HR_fc8j~(6i0n&FRznm;iU5swtXC^X243gWm<9Og@EYOY z3y&H`ylfRrEOy-i0oCDl){zIc{fT}_`)X!>SHn5t=d@_>@J?4@{>#o0G_B?HW0}E~ z?3{$RikoXr_cX-U;*-h?9MW7~8yZ>Dw;aEI`TQy3+ID-k>sR;JW{0hfT=^OG=-$$A z;XQwZMtlD2B=9pQ$Y&uEhQ_9PWxRKgTkaRKLbT41qHHc!TU+-eyZ$E%LgIDyJ z5LP;i>Cu`ubJJR2T=HO*RZx;)8vmk-p_vqZRuFZ#ROqgYIFevz3vs^Z>T?$-`sVzZ z=9zbWE-`mx=k7v`gN8zf+gSSb1LYg-k7B!lcQx3p_((2zhsJ>@b=%7Ebs}<)U-FUW zmF(aI?iL*fS9FcI&VJD863O|-_=R-3PblJcpXox6L28pN%1$jK#jsTogl`w~2UG_x zy_sOGj{E+GTDt1yF$(%zbIuD$p=aGv*Tg+0(#CzdJb{lKYN^eh&wBW5!|!{-kDB_N zoF2~mj2f!o?!uxy%}plTm4`-WB+<5uC(G7aw~}(mJ8sKtDs0|_T1BjkO)?IU$Dd1{ zuwyRbWtZCbblMXvR8zEj;c8@1fg`nTJa&f zlHBFx<<#Yp)veteK2SRNLXdiri-Uo<_NVone3Qn`^r=0|t}i}$5doYqh8DU+n!S$S z-+%uNjS{43oNfP>QOe+Nu>=JkGhtDDg-}hO% zm|VA0K&~q^ymnQfQrf$4M6Nd_^S`jo?lLb8a@+U%6dH9VfkyjB0P6aHn7K|ra~3)C z7y-KOX$r##rETgR1GDii`anHqXPj2s=Z*>MLmYB}5H(NCPoBlB>}GyJV>b zTf)hVWnN44=ll`u?;1yz!DQ`GL!mfrGl^&&F1H z`f4IpyMOIEk#sI5M}JYqL^|=eax*gB16aayw09IEs*2dcL}PUE!kM*&E%eD*En28M$aM}tiB@~EN`-tDkX;< z+6zy!4Tz^cGUMn|%J{!492Za>umi3Ig2oZNv(%ZtUwO*8Cg)F|<4g{Q$@e@tIi|>M zRsH>7Z19&7>|w60BrSXi~4^Q=x6BkM;V-jhl!YvY{+FoB#4C zd(1SN$&%;9IUui96-Erf#0*@4!xY%-XbltEYA%@+Dv{S#rBIh+s0k1Ytmb6kOxbTV z{5*HXa@cU{xVm7-Kl>M$)`|n2i;fT^dk}#9WQ@Y#iU}K1U4SFdgBR7!^ zx)^yKH)xUYNeKzkOM_nssi9b-vgapNiNJb|2)R*T@J0{*1IvwDm;J*F%=8;l!-;l` zx6#r*cBpqofSZn&)f~F8BG|iBGjit@jO3y$s0k}M3-l+yLGoU-4E?F17IHMCa0QNL z&t#)+Jsrgs)R3`x)R2h+MnPSafqUOCCefCezPm&CZTSq=oWF2mS!BVuGoP5Q}xPaV+R)o}Z=^ zfv8oJH^>>%zv?P1c1|wMOjj8{Cug><#VbB3tOHt&6V3;D?{U3j_zwB})UkCcmFeuf z$OFHmVv0ccXMD4)x%u>$$&48^tf8|IUe!=DW9rQ?k6N@F?l7 zwJwZS9fn>Tlpq9cF5D*?(B(nWX>2+3^{}tk_!l3cm!&+4G~AgabZvMy@>O0rFSRe_ zYp!0wD#l%-gOiYsIT1+$lgv_k?cF{C!;5!-u;^%D!218MjBtDRsECwXFZRxoQd6yx z%(TNTPRI@vl=!3107<--TZ8}kMIcq{QmFNyW|_h7Xb$4tt}2G+msyg8`FuHl?ob6$awl@-8xV%{YJsy2|LclcMEi zk>o}4UE;FTwP|6oAjO9h3JrM*2Ln9Rz_nI_I~=hI(3_ijE>@au>;a7d)j&A5r< z_;#h?%{G6+fS4|mv0~K3jz*zLkprQ|9l*741eXC6SM>9^Z;W-|+vc_F7(kAgfdp{8 zss={S{U>pHnc6Qy-QM0V??fcm^94@Jr2gn6!rlQ1*7)+z2$&6CFEYtlWZJ>DHcFCYw!iYtk_A3va1 z{-zZQ? z7g~sKSo{WdBX<_#_@CaLyJmPPdVU;MYSdqS|XQ);U`NO{+Nl$xKf|_6J-isPa}$ zW8aHO)JXSI`to&2jIPAx+m#0oSxaBPQc=Ga4KXfVJVXx*it+Qlpe|OZ=1-FD?%Tn# zQH2w-39-vVHbjBTKmbEWkw+hO8sX-b)Uw z?#+1M0MQ_9epT1EJFwsVf0fl9UF--8#OuZD0WdTok?^|U1xmk+fWJi+ON)$SPPIeo zmOZ&M>#btF%7ECBhrpl$vS9bOTHQ7MJRJVw?*PPbEJii}jF*H6iYd@hA5Ex4z{Oj# zU~488L=b`w_o3t5c#CT~R=S|9W$C+PirG2iX#1wL!Ew2Y`E&W0^iN-T$syW2crea+ zMSXihq)J3bj|{QGUx)|ea3;}r%MUbKj4(L*Gw-Htp&D}=FhiO~ex^lY)L2HZSu9kj*bKqW6sm^iWwG+$W|e@29d zl^uRKavpkhrQ#RPAHaxc_m3mmxe-#~FD}_rms5m{B|f`+iFKsqJPjmD{j~NrY58Ig zH8WC(Tb%g9#O#}G#7y^mchzMCjW5esG^C5gu85%VEhYT}qVi*-7bj%Z># z(dH$?Wry-VqSLx_ORz6`*wKo6Q*sLU;@QAHACv|eDv3#z}ir9~C!Kd^M49t^gt~QXH!vxj(+JP99si4$SS*ZkSblc)h-$EYG2ANonLCE7fgk)4)y{%mU7 z)n!k8w&DASW`lY{@w~*2u)MgKgGY}J%4?F{3U6wLx8I*JtK$9JH(?!9*w6U(<30|z z1}3F<*>C41bl{Kvv9jM4UnYuvt|;f+c!cni1vWM|#dT*lk%-Fro2XG9}3)X8$R_ zkLL5@eopD6p6uGhA0Blxb*Q`g7_z@TFM+COM@T;PCUUMHebTkR<5_1($SRPASdFi zBbukc4AHRm$vO%h`cFfQ3KH@HDerWTm7J~phwL3>^^N13Sk9N9eanyV-B8YweSXhA zvTBOwzsuaD;d0B~RUAA39>DVhwtpM}pRTD&478_*ts>g#=^ScGe7w^SIaJ)E1xWgd zjoG7%jvk|5s_PYsk&C+RORS<;0r)!ki&e0{x%I>vSXs}crPyfHq`VG{SFF>KDw zd}in+Ea5k?3NaPYO+j;#^;o&Egey3=#_FXlS&uxSLI_UD`NRzX*45;ani*G8ZdPES zBXmfXEW8)3PYf2yWgq5a-{#Jz{``=r7LVtHoz$S04fPga1@GaKw>VyXRzFor9J4)u zuQQkyL#!FaDFaGTu0`Dk!X86DDVc$ERH#M_Ei|IAiGD{$&krfZStx6-A@Ys#^T4ES zO9ssjn+|UY20!7v>On-7g?I-M!WK<}Pd{uUD=Rc^H%NZ8+#jfaicmmDq}CO753RJv zjBs)HP-}e0t2j6=njjpz%o#*&@K9SNEc{Lof@t!%-LE7}5yJ7`GPWauE7M1s$Kifm zU&vP9o>CM$em8&TU17N{J)t5j{e(f@zzH@bf8{ z*1f0nU;eu-Y-|R|)zTZn+fI9cG!UN4h_B4wLayR5f}Pk_)+?|I`5T(F4(VhVd8CLA zy^(H6VU#Q?!HTtjWCn_h-mgs(W-m=w5LOLQ_6!j^yIWT$2Jpu;?NCPbI!UujeHqHk zqjZ<%h4dKrh_{OFR$uaB&_YN&Q5>PEMvHKRC}jiOzQQeN0g=`{N}K(MXPeFaZFSHC zt4ax>*11b|o7G|F_Bp~O?a}0q%dy$cl!!yrkW-LFL3_VUl2)Xjmh4wcfW4x|)9P>H zb9`Lt_7mR-{7Db)5B92I7F8(Fq}`e}`Cw~h>A9N1x>uBg^gFDJsnb&TxA6UgO#KoQ z1uFHIN2Y?C9L|yW6K@x;TfO@CojldPyA%E%{q*|$R^=%_!fI*}8C~hCDK*|3dt{w1 z=tXk-XfJOO0>;DB?t)-kVC`z)hs1gj)YY*)LL(AQ4jq!Zy{WJ@6{)xXYBB6mabnaL zc$6IfxW;#vaaLrKD7>C~rF{!|twX9CliYIV9JOZ9)G;rbw)6Yl8}+*DXY|j!==bpR zL9(&or&EuAg5SoH(Dr067TWV+Qd~Au;HcXtj@zZ{{4al*X58v1Y`yT^V%Y`!$E(1i z*ZHgqU@Bb0An1c$Sr%#l7)Fh|ttf(oAbjV~m z3$a$;mDypm-wR`1`_qj)g0rgMZ$8Icu=QHwr`iqF28}8(qDRSy0hd0{Ni8J^|%As;6?J(>;;am5=;%onH8FG_XK6 z7KAt@?VdPQ&ttr?(?%pC?h;(%wBT1*e(O_!{oN1ORfJss6<;wewvxoI&hSSb>vCy<{h&GoGf5|eN5UlP zcyd#I3p02xr){A?h6*5`GdU)PFBk_2H?SXkH5&phfK}9Xl3U#qmc9i^s6vI1>x8RqoVg}U!P;AmHNb>(ZW7_I|%EI3`pRYyRCC9ooRL|ua5bA2)87LJVJW?gt&$~ z<8}ix1{vzdx67}{gXG>9kPO}>SK0BRFFW?MQ^Q;DG#Bm9Mi2qbM8ebf@ z0IMBefF!CQupO}?Pn*V~)?HJenIOSuR=>qVo}o^Xk;3Q3`8tz?;I2$*p| zVs2$6k8(?WrT5N;YlCKxrJQNzE`j7gt;W<}E=5GpA2~of@5_?5rZz!k?pdti=f=Y>s0u~60fYL&dn&kX< z=FRi_K5v}s8fU~na_)Vvz1C+X+U(qEUf=Mfw|$_uB_&!t{POMLfCvx`ju+aYkH<9m zo-eAo?B2e#sIOti_z*J$X3ka?XY<#Q&Tl@+eSNX{?`K5UyO79aR~dvyzK27&=MMBy z4oR037G8ZXY))8H?2aod*>-QuorB6HXnE4nnyZ#4L_RyT+d9JI@kUdz6k(zP<)1#C z;oE=i9vv-uJL2zDVi6alPUZLXpyn37Q@Fb;=*eGX9}mM@TXMC5eVM7Q3h~dg29=C0C47obQgfHA|=S0 zR=$rl;xQqnzj|`Aqipf#GL$4esp)=6EFHit-q)7sy>x&GGyGq<%b}vF+LCIUPu)rq zmkeg*CEd8bv;+OHeABAB^pOpheT1x*pGIk1G~BS9wtUeYfg;i`)0B4cTgvXvL+Q5EJ)NQszG^wh zOMkS$d}wCIStBs~J%Hf!4qaBt06>&kznlosWMqnl`VCPHy>*9qwRJpXNyh{P*KxuT zHRUp@x=4t%L!4Do7m0_$>o_w|%q3<;FT3>-L2*c{i!P-L;S(EIssmVj7q=64tD}R9UhD29d=(#) ztrONh*JeM4|11%TahQIbbK4%hQKLC6k@6O!|l2^L+j zp+Qu{1+qBfsn@u3F$xjfl@R6BXk4~Q28QhE#Vjo@4ZuA{nbB-Q<^H^rumaCwmK{gYWjxlhCH8xMB( z%s`%r@hPbw zO<6J}Il6}Ft|kUi_16E}Gtw5EoOZUs6|22u(oSPHsEJu5m?OfF`*Dpwevqr$ckSwS zaY3PVFN!qv@fniwIVAcOFNE@F4hEk4ghrhB%UMPcF*$#1WMXS_BcJ@n0DO;n;z|Ot zr(Xp61)MB4;8`r3f?49u__j3IjVeT>_V7#H_P*=q8d-#88(I6E}t;db*FIn`ao z(OW!+&)+^}?3J^@ejp2B?On%zn3{awe9)-@&=7Tr)fVSY$6MM(eXdY7RhsFV{v6CF zo_cf9H2(Qt5!MK5r>mv**0|7?FK91km#>BEFvEJTJDi5;LUXe@$#OtrNQ<$_YaX~@ zEmV ze`MoHR#mfjSgXqj7b8tT*F+I6O1OT&?g5JO^AM%GAp~0D8_m}0yXKLx(O02pEL?lM z1N}x(HJ8rGSIk>nHu3q=ic7N1Rc|gd?$kjpM*i@V4)j4e@3@6UQBmZz%qLK{R(hl1 z%_oCMzgCtmZ8q3mls!QgcZLtjeNudP&%}5$?B?b1gHDKZD@G_^(e#@gYvtjR6j7$L z$?WuR ze?aT6(Jpj^ADG%ro~98kf-IfFjD2(wk3doMgoVK<24#DEJkX>(Yh zV|`T>y`ab@uAYF7LSn;YheO}W77lSA!}ZrMfHpc!3XXN4iY!LJ9{UTInz40m0pr$v zb08Ha6)_W6kAmCHO=b>J`F=PYU_p{BV0dV`TRFA@;PIy7eV;*DFe2)&ORzk#XvmVY zaF`DvOBiwzn;3hlml;>Vgu6~>-w8= z62@xBndG3E`c|a1yS|$pE+{x^BJck(Ae&6cWfr|rhEdk@$G(lxjB7qj0Mxs#<4-N7 zC7sfz7pLIGG|D%M?0={=v3jzL7N3%zsxTy-iY3aJKp@@!iaF$qEby0rqp!F$i!*QJCIC|%~s>J@Cs+0?Cu?DF|&Xk{gOkxWqWx z$Lwtg*Th+RkHB-p#ZAZ9b3a>QFQ*1NGGmQctwWaqCAosH~hSSwsDTpX!J5>>}?|% z<=aLt7>mSXpP5SAUoed6AgCOqRl;T@Z-Qt#2xB9#>VkXJBh%bfO51El()#aEFs!Iv zX5vE8A8qS)UiE}I!y#NN452A2*a9hMOK zQ}@@N5S%;r;KpC#!a^GqJn=f&wUh}evy~I_5K5|O&#H741nJuU2zu1<$J&iU_BP!k zaBcSlJ|SP_+Qu=AE_BR$1(B|4(kUj8+0^Crym2}PP7Qah)KUNyyl}Ked^~XD#yAuh z2Dj~Zw0)YQnieNLW)X3b5aELqIvB1e$jXz1XRP9&E;&v&_mwZIH6p+R$G2c$|7PqE zoAl^@W~K!^E4aWpJ*wOGwTk;S@QnuaA$;kw$*6_sS5L!I<#QbJw&h>jX^S$C(uATJ zafyYR^Nl0-8hCz&Gu+V_Q(ts)pb={7kd9M>%m?YU=UbYaiI>&*k;d;YkH`%B3SA0> z17q?_GSUbh6OhkU^f%0cf<)dlsk<3x@(Krs5=+khmLegywB40hM^kbs=a}cET*}3v zdB$55O2mF;aYOLn$a^^FG8aV-UQKPRs9Kt#RpY%aLm5>1l5Yt;2TqF5*P;1&{*rZp zj3(OOegf^D;6h=|`_ZFEn>K&nH>~;7wiE|5V&6zxO`5P!dZ`Quy&2Eq55ZACFV|yE z`f0*YBIdRC?2hpUx*Tme8#P0oJO;N$QL69e=8UzsWR;URtKsZqt=3t!a%?#Z4xovq zNa_^l^4EwZDgKr8hC_*}vp1Sz`jJVK%F*K$WFV=-V|sIPa*xV?8K9`4#sz$v+5UvH zSy3S&|HIt$CMmbQ=D6e8OLTaS(UaiTu7l_%LNa$&3Ub2aZfhPQZ5!7wl5Am=4r0&*&Gq;d|(_T8Oeo~XuF+IxBeM^jT*|nkUyaV>ZR#< zX9=Ovf`F-LYagt1r1yq6fQmCVAi)O`atb~P2=M=3%O9xxYtkawd$tm4pJzX&5vSdI z_!JjAsTi}@rH+OpFKVH+JR}E8timFkPqlx3Eh86H5aNtjYbT!2o@rj4A2n)1n^DY7 z^HU1WS?SC#4{hhL>Bj=ZyYK3!8zLW!+gkB>^p{i)k(`po8k|r?8SFkFCXn9UC*KiO z^ow;+3%q49<+3(wdpT@MJhKvY-|2WC0=k)@tcF$U+$+xWUp*gS-h4fG-eu8xMEBIm z5$bw%-E~Ut6$}_SwNsGVcK-}uK3(9g(d_4}htyOMQg#W)vA@N?*zr}pLKSo`p^&8G zb)_6XbXr7SzADYw@#h~LeTmoapM`HG54W|W(nDj=phM@BZgaH>5m~K;$S8z|k zO8A?ZL51Y56;xf<%24)69n(c>>;&ED5*t0SF^m>9t|6971w1Hf$DVKFPTosdJ<2b6&BdwiiNc{H zqVp&9Q$-^q!5Ut?S2R=JmBzLZJV%W!fQ+5^q&vCsS>GPzQ7x0QYLyX1ky&*8IxS|^ z%MFyk_0;<}l}$~Q${RSjQrin7%wi7T;HeoU=fwB68fRKpkT#UDB5VuivW9AVhv1E3 z`u8s;3n;SQwgXGWxTedzeuBy7A3skwojg@Ac;V15O#_`dm911}&p3X3hwIAa-ih7a zKcZzmGyhDRJtu>$(P{?8BLhW*8n0Bhg#l~ty?vej4E5C`zK&Nws5DgBi=1Ljp1R2X z8^FVfi*`O4W@mLdRaQE-UKT37#wbZ*!8fLhk(Rn0Wib;Rx}P=t6lug;Cuod~+aifqj_0UBfhN24<_>PG($66Xu*W4-}gxijhuYBkjws|@A0GSdRZ}y94hU$*+1wtUIQ9)aYq0~G+C{rDH3 z3vRxopfAXU3JR>dLDv9{%gU~h&3p1V+}RylO=FGdy6ppK8Wsnx6pAJ6Pg@ppfyf9` zL>M#fB@+O{5=aXXYRxbgAN~dk$Ddskoc*6C3PzrGb_Btt-GFm$UsIhxViA#zH8xMp z_M`Ba<~cOm0|Q;(-o~g@d`cwZk)Id(Wje(3_U~41(h&lAp7kK5LZs zo#5IOU>m_B#PaN0=Yk|}EbCB8pVe9d8a?64Ay`zy`pagn+Lw0e@FJS7{2?l3JE{w| zo3t>(LpeomD$TPhh$IzVJ3eM@+jGY>*dZrM&Yd{wv>*_J2>c;Ywa8)JleNVoLqars z^}2lUA3KmO*S;iMa3aTa7J-sztzyiJvm_*E%?O4k58+p=`>v$bP6_?BZlqXLNL~3yJM6soKO!so%waY^dnKa z*`)e)IAzLZ(U>PHjW*yO(INmj01%cl-3t%z+GVJJ`yP|n*%m+C`|?OdX^~)e_3Gs( zOh+@2%OASIP~K3ql%1#^{D9AhE;%0>QZA}NcJ2g`gfPxPy1^#AFod+b^M^Rr0`s4y z)aY84!yNC2D^_U@JJqIbAppmj{%=XF`uHD_vG(MFpcAtew7}50bZZMU_TYH5&o3n> z#{<^SR^?M*j_Q&c4zFCf(xSO4qY7D>=B7v7SXq_7vt{uh3w-i$*?wxm$Y~Ka-mIZ@ z3#8UZ1n^P`imJldL0Y=^A0~j=%A9nb0`33r5yJ6D{1D9d8T}csv8)kbSXCR(Tz;na zhGCa_VbwpR7dkhbjKuGV47!iH8aC`Nk#ac2m~eDb(2cgxm7xv}yx2@+({Xk}Zv^ zx6DRr&4d}Eoh7Y~!2O8$RWx3eIsHzWVi%D%ds!rT%8#PqZhO=V*{ecymy};Vpi2z0 zI7%L%F##U6o>u-Dta z^vE5 zy}*Ipwj{Vt6i!fU46H18d`8TBFaiIW0Xue*$3=Y5b;1MD&T^@ofG6!S%zn6o=%dNh zrH@u;*JK5YsC>>no1aFLC}?>b6b1arLhCg0+a zPZ&tK9}_rVP)@VlxI#P?r&g)_qY-S*C{%Ym zBRxRpvgk1p)`l6^t_BZ_P$5H7!QGZ?D64hpmCy+XfS48M%@0Rp6sm;;vpC@!!7Q=| z-W+Jc6S-Z3@|@xl9Skc-pm6dF$U1St1Z`c^Sb-;r2 z7ECAox;tQX54=*8 z#0>r}HKa`E8dH|6+L7Fq7fj3}szU~c`fSlGCw9ykoGQNjV5(c|IfBcjM0{fqLa?zu{I~ zsE9+xD!q^ft(FuNHTctzc}*gD@+hbUp=Yf^JfvKa>D`JZk1$6t#undT@8*IB0chf zvv5SWd!31YPg2MHfI-^kobT+UQBd(wZ$SBd7CSb7OW0=qAo|o6BRrixCIF{KMNvAA zP!^je8M~oN;$ZNEk+>JG?9luPU|VRd7!3~a*K!-;a;milV|EXaY3b{G=pg>RfT@b( zF)RSA3?{9dvdHJXMmu4l=HY!k9tX;J5Zwx3L~HqAW+(^ndN7Zy=l|xm&y)Cnu#{vC z`9o7d!5k!iwr$vyVJQ-kp*{WftYyxXfgW*xzdMfrBdbSDwzBoOJuSQ7PwP8-RXKjh z)KNA9PN`r?WgL2%4CC$qG0(h}=<_5`G}#%dr?4pfz*Vb4S){df=Twsjwp!{1a87i> zkk4|Jj0X+|Xsz@CV0LaNO9Br#T}-jH(_6krGwQoyW$ikoG|P7jp$9PiaRP1*&2$XP%xgCwQ=s;!;Ot{DlJ&VpD<+#N^2RAT_pOsxe!`D2yx2xImDml zbCq1tSDD=Pyro^kV1>;7#S6q+LC?Jfz3=42pRA)*Q_9O_<*&++rvn-K@qd_57@fAX z3TM!S#$ihew)&}s-LsCZnt#Z0?G>iq;CFKB7`_<;*>0pbV`45G7%HW|syce~?u)SDt(w(*a@GNvRidZVo3FX=s^z84mhE{NR&K>>?SA$egVNb{o^yI!zi0RywsgFcs- zZN|gzg^{nW>=}Odk#XXG&b4b}IkWX#`UeKCMXKg@){1JS`=wIK*xT=@ZuHp0uBpkk zz8@6|&b#t$At6mdSJ$#ly?eT5h6JvDv44V9>*!F$l~oNz`?nywM;8k5O5|yl)oi)i z07#CloAav^$(>#|9c~1a-E%E_^H%ha=Z+A%_~1W==QPIoGgj$6T}DqgGA^p>vb^k9 z_)=+YLMu$zu-f2J@Sn?1XY4uKh~D8)trf0-hVQj)v!l`0M|5L>(ua zqvnnw>u+a<8jAlVnalrKDtX>zB@;h9Ryg=dvFZm{0Xs&5lS`8S<@wzhE)t}a2kzMQ z$TdRc?rL#}U-Y~6>%Bd+8PJzL*wf*N(xEvV2>n;KSMY{|Ejk};%LsCru;Y+R43c$G ztE)37Kg>uRDT`_AaL@PF7X;MMuYckMS~+Q(tQ{gl@)_S|g}5@T$5S^q45}~iKcBxp z`bNWQN5>fLP%a2OlOafmu((g-~u@e=iN{#5+}p~f!T zow8zpIDxvHel-KF`sB7UkjEI!2+7xe_j*yqdCdFG*(uG5ng8Z!V}-MF_vXm2N|!Ah zRO-^iD=wH}Mts4yIT_9Xe(%${|)L$d_?%vhH-qSw8Hn)TsyAWAq6USl&7{?hSDxPcR z%#|=}T=Lqb9cyGPyN?~B4v$=;Szz9EWwtR4=1qME;~(_XV);Bcix?etfqQ&WV?_Mia8JwfM#QyHFLk1c?AX@kucgq$>c_W{@&Ckul)nbP= zidnW{%B=@xj;sNr0$r#k+hij~%0t8t^0ulB%TpyUiysWrGPiM$`pEuipQM=F&Iz>% zP@Be3Wp73XCLU%dFLSXXUK{)W{lXbw@I)O(2SHZ#IBK-h2$nn0aOB+pd-ka7b4|uQ zpnw)*n;@|S#|TgPlbilAutkK|q%zy=&=;)zkDyHlIFErp)@;~d-EI@RADZSu z?@5#MvTu{*d081U>iYTmvnua~qm@BgV&@tGt-vv8O#W=s5~^ii-;V^!vL&;{42LWy zr&mz(;7IYCZcI@G?Fgjele7J+3?paz2?q82ScoZ%c9tq{uP}yG%q9lf)>@3e1} zgkILIgnOpNWV!h``ech~b>-ULk)_Zj*Y!5fndcf}6=rd}7uO8TpeXqrw5p6ke!$Y{ z;pe;t9K*P~&pakiz-y+G4v=?mMt0X4e$(@_&x1K>~VEwWdve^%pCa^VhQp1hO4 z*yJw7 za+d&YQfN(m0gpj2Mz9wY4?P*uzJje*CvzF+f`-<5T5`U_S8CKdL*2>SEX_8Zy`Ux} z1)ZTPapO_bmYH0L7OlApJ%Aw;;F%1MV`5@E=}BdsNW20>MBQvm>GnE5!AJmVGP~!S z7OuF*jSj*FA_DHsF4J^vo_#Fn5Q0@5@SZ6oo=1-qX?5|93MxC)B1QW-k6Wc~`Z*y% z#C?Tm&5?@gC{1iHe`uDCs=5!H+YUdQO^mSRFoC#W9NMc(s@U z{><9lLdfz1?sF!!zL@?9T}LbU`O`2YoAId|A2Ho&TqnUfjg76`u25 zM9a}|v9uJfQSA`*eAR3Hbz68N=xw~$u zrCI*)T@>b7o7Cq@Na)SXbdm&;kI6NZM*p#4H!Af* zsxHsGh8l%Xa-ZBpJZ+W+!Rk8s|D>_}kZeg0u?bFN@*PE}V)S3j=X0iju zrfw?MoN8=5n?Y;2KGTv@Gi#ZTo*A}h0ExERjOp~?)qiMo5ke^o@hQ~F==ek!jp9(52{LUS75k4xZq5L`UN-V zU%r?|D52b$cLrpy65g~)P~;IaPWJJ`Ez1Xm`(DdlpihVAAJ$oq?tr<2O?Wx(w5Vpz zx97!(HRAH#75+wAZc4PM`jCOY@gXsw62*jpjIZGgGm}u5?u>uUq9+78+BuA$2t2qZ zv9~(?q;b+|5ryQJs3~S4U%L#fCLniCkLIM`D7{&f_&q3F`)2euT@ge&zH!FPg88#J z*b%~Y%Jtl*9wh%M5T!La@Ge_~)XI=Yl)zHFeg*{&Ywg912H9h!+eS652EcOI?$mdG zO9baE7EM79D*wusR~fcrJBV3J;1x`%e;!_I5Xmb#c(~YmWB}{OC4We*q$Ip?J_8FZ$}>tBVLvcT0-?+47vfm`)M-4gz_{1_CFfXEl)vb zJ#7kCgHyv9$F1GuI6f|hJt=0d+cg(ZZT8}LgY0tIQr4L7fcx6QAH+@Hf8dWsy&1Lq zA^M^;ns8zllB8qb_J8g4=4I8o9C5`UT(@b6+G`z&@va@Q$X9=_1I^M#@Ktfpz-pZ_-V4RZguJYqEYAXr#NNzwwf2SU#MZAyIqEJ9ub;iS!Q(t~UF#En+|_d~I%S8X7+Y zg%nf?<>63?gKV{UwT>i_xcLNFZwL~bwM2`vLT(EO>wJJ#&Gvu#N3wHNe64-V8B16u z&aAY{q1q+dkj^dL3yrCRPh=@0T*`7TY!1L|<-!5A;mN327+a1W`9apPIme?WadGCKGt+0*R&XtmPAyv5ahxqJ4k7fi1#x7;E5bEj}quC(Mo}JfJKeWfrCY zt7dIDuS~Vc|43u|>mNK#WM(GM>Q%T)7>9b3Bl-Yk*StY3<=a!j#wjoLXe+?1=}}6z zT94jm@F`IXVacS3vr)tw#HxVd17ZKklC4r(p6S~0aR~g$Nkb%m6l*dz~(s=Q) zZ3e0_7lSB-h!nWLrO=HF1Qi@Z@Md(?KerZK6)ag&3CI9FiSmIac)_`gyqMf6K67H{ z*;Nk>nOloC^zh`Htkj7fqarR(hjnsYy!?QSOgk z>#QUd?ixW=pC<&iF53p4<+#g+weKi8ySQ*I)fNg-;8q2`38k(?e7Rv;t@tb9ivhA( zUJds5X{>+K?CQ55Mi#QoHX*O}w7#D!v0$s}Z=}e~2t=Dpk{d0w)K$;fl3JjcQQkuJ zOo?cXkBCAzWkwb~9+`o?ihvL}A>!f%H~5E4w{LbZjvn1yS%)1I*3laxTH+HWn z+r4X`>p8JEdXs=u6Sgf&Km5mg{Lh!@Y^!sE9b==iy;xj^^=vUX^}O-7Rp`J=f%b*$ z<&pevxV0p$eYL~}1ikC#4%9Z4yOhvJAV@p_ak`>kJF+I<7|7GPp@@Utck$n21Qh6i zl+&$NN<@c6-X*lr#M+&;RkEM>W?3@6+TI?v5y+#5rP#u7D5i)O?WD<06ToMrJTHJQ zhCar{6?U*w-RkmNl?lx;LvZV0ZN>ZC!Yv`1=*Zzy7Iu&=FSy=~*F8-!yG z)}9}0ugCIB{m038%L)?`E=sut)5x&QwAzxp@OkilK9W9Mg<@l7r9{lOWh4- zy>G?`WS;2V@KdC?907jCV^Cy!U<7Pb%V{sVEQzJ>GIiX0-G$eN%GBgIceoVt|0=9;`mSyGXi9Kp(LfZ*6-&2;jKYAn+TyWiP zh2B1C1g0pH)PMe&GYSt-Hm8`qUE@MrgQ%(RWM+t`TtDZkew{#})!wSQ%wI+SjCbk# zw$mLBMX}-Jfpy=RUUBQ$EHE_Yf^;a)Mb$|CSHN{#6(S#|M!22V&;M!@8*e+Io=ZS4 z4+884893>Vd0$tV{a&Q#WpPs2>RX@GY&3rbeWyJv|6*lKuoJ8HWQroAU&nk%iTp6s zZ7rx6m-w#?4LGki$^G5ir4p~~ot;0Q`OwOKGM%tpR#%G`!Mm(PZ$K3Jn0TL4aYvGIu~7K~H=8X2HT369J7 zdvn~j9y@g95<5FAKM$G_`mXa~lqT$5TS=LucQQt{Ap z8yt^4eoxx{iVqT&`x>dG6W|9vLHBesSiNf91Ptr;DBe7~AsZNwnZQMW!ofv|5reg7 zkpGZsLfuqF`hgFkzf=PCkeKl4`~he|s+RRHw}0C}jB6zy+-nh3RPaXjavZr+EiXq8 z9Xh;CyoOL99688c{MN>a42p-R6a?dSg1~T6b>j?DrNy`W-C_c42^@@nw?m^66AXS& zuNpe^|MK}x;+b#Tp8TvT*nPsnS*z)-99vaWzqN~@1AX)L^k-Fypw^dxbw&Shm+5;< zjxn3M^r%4bgdjB|u@-|MOrxzShV9l{Eni^#=_D~43YaLft!9PMTkM|7C6QFG8u*gS z4d0`mjkA9h&!N-`1m`So)!S1hSxAtG*WORR1{Kn2%#1?r>Q|Uw?>|oZ-dm7Y^Xxbv zyUkndRBZHVL>4;o&ZwVu)YU!vX7F0nO6Q;>D2+FM!io9Ub)8dSna-&KZ?E!zgoOfz z)zLF!zH2;c-I5@3zjaBr&ZG9IU;IgA!dt>fNA?o!E-tTtcy>g-WIA$4XnwF{TEs%q zgiT568!sJ;vCcIiQ2U2SJLpioM`doBJK*hab#WM9R}__`IZ_@bqi_aJh;CYl7LMR( z*RpV>m}ckZON~>rk*vGlN&85i7AmHPi^{roCP@AjUh6EiY~lmY;odaSa?JMw{f)o# zs)H8FpJ&Io%L()2l1rCbK=ew`BuDr)Xj1z;zhBH;D`Y$c;s_&`d+x;TU8d?lP9gCH4=1dx(k0vtImNZx;5r(@)F z-yUYpU9`55^bp646G)X)aq=Ett}R{ZI!du?f;NesL^38}pKjvUe6=S<_fD-RjvZIO zP&o-yXyLvwn}_lX4^QxK&Y5}CEU{UceQ-M+8Cp1>Yg|wotnA)G`FmZNm(ynjg9Hwu zrsL@7+(}A%)g+E$I-$u7aVwD2Z9rG-q6FH8Z0VAzDEWWs!BfTxaY>Fc=S=Uil<%-O z3sLs~`!av&OI&I=LyMkWjqHhXQLF!0dyeT%Ype+l9CUM6hpVe(#guh>Ro3~-5nm3v z(Gu}K)jK6SQ5?O2Xtnm?UZec~lG05)s5t&e9Kh}&%6nu+9`e276~HM@li1>8hfU2rm^IaN3!;x16hlwEvezG3)&eszHy1q?OtY+ z?W^plw!3(%E*--Th-&PqBOS^7_|tXm+1vwhQ;U6KVup-VRtu*7P1%aTizzFJX5+4U zglPI})ya{iM~Y4VN94G!tHnJ|P47$WZC*@Sb(&4PQx)u5hKGhTn$L!LUXOk$qkbKs zg6IK-XoceKMv^nHGBdwEZcx`O3*7>%I`-bz<%mgx*DBIABB=wX0(>NFfNQiFK9Ul! zt@x!TPx*UJ*sfXOs^jzl^tF62+n>mPC~8x10$cR=R)IGcuQN}xj6DdZO)#T!2_Q+? z#4SPE6A?*m!qfo!F>rxdlheR@91T%qmTO=*US%Ezk8DD!k**yYk|V#lBTxA5!z`-< z{B*pgE69Dqn+a|*;AMbGj6y9Gj#RQ7Czq;3gh#h*s$Hp5eq}{(kTcFk(1U){e@lxr zlpWR)U2G>CxC}C^_ZlKkwR3vuNfq20IvhY>Cdnou=iiZS2OU{hZ7*N}!?f(gL5dv> zfp>SU%O0#+)VJQy%SC4V8+~0|iL%C)HO>EYptDX&t_?ZPjqKA zDrw1ETBZ~?Pu=cW<}zp2cVXobbBkZ*)mU=HU>j=v!H2tnh`DQrIeSEB{)nxrR?E1e z{ffts<6HPbht@FKrrN%AX$JTTd!_$cNkx#W%5ff$Yesm_aAMv|WS|LtOT&~F9=Jo; zQM_Dwxu9SE&ej|j8H6we2)1w8D2EGXaDb~7x)8XKe7Mh?+Zh54^j>$^+6 z7%Jn|oeC#=Yj@P%nX04XLq<|(V8~)e#3*fJwxQtm@~}`5^NE;|w^{ki!|oS;T)oEm zC*swdg=ZTV8w3R{;q6tF7m56Q#PZ%!RnNBZ7g_Q)N5y1^==yNa{Z?+Z;F&{W^;qo~ zr|G2jc=*6^*kR^USy=|iLs8ysSFHb={LLiEmNDfQOC^$1B=+A-F#4LJuYX+BL`Ox2 zk!-b&w2iZjpPpsTF50g-L-24xPWaPlf#>xfL;N^RaFPn1ljWvXfY5@k6f!1r1s%w$ zZ>p+dI@{M#{0M%OG7}sJ;)GuWOIBHTy3s2p*fW40!ox-ZDLsNc6wHHuLIRfg8!wfW zAMpE9R;Dtqt)qt8DIUct!gebT6UL1BtLu^cBr!8H6MK|l!ASt-l;-~ZMHUt}I|ywD z9&#rWC(SCyC%=|j>3#m;Oe%jITt5?*C+%F105kYr-oB<=r0UCZ4fMFBPdEu0{!P(p zf{j-^MyPHC8?K&}9;j5qB5$o!M3k&=I*pV@*Kd)`%S2d$I`)a)b)qj(0<_m+uzxXc z2hPkNjs0V0@&E|L)~*(o0`XZjN)56YyO(|{st((*tCKCD%`nPo!ppTrG@rc4P+sAm z%Y>D4@3d`m8Qind1qg7)?4s9D%(>@y9?gXT$_Qkliwr!~b^XM6`xo*Q+I2+1;mrHH z4A;&{v2?l`=IRnjE4^d;sheH~0Gy!@=GjjNsswHY2`sXu;@c1{+EG1pvBk5ZP{72` z*sd*Qd#==vdUf&a(#H0WP%ll`h!URu#kRQanPEb^@TcU!P(s-d?Y~Z6{M)Ty+Jg5R zX$e(@{Qv7}zBU#KCLk9?_(1Tb#!JbF+@D`|r#<=#toPophAvSCmek&FTlNWAd(Fhl zf}5^xx_K5~dMP=McWmQkUatP;_#VBS>wzTu5+=vT+eN>2(aeY{zxL~qfj_J~ptNn3 z=(V^`wgFkRXpw9^9}*P(8sR)E7RT?jwFd{3YznzvEn1n%!bN9B#9``HqLB`6WSp{i zK2xC6EeBy@5vr5g-)U2G`Ywq?=l_ENlOJ_4Js=JE9h!UmD-rDW&?^-!b4(LYV#hEl z3?A|My}vN=Qlbuj0v*CQvxHhTSQN@bY_0UHka*3QcYDdUt<=vAxJ`bS)ok$7M=-2E z{oR#bXke$Us;c5-i>SoE+U8BCu4DghXQQjJ0wdlCK(!nE*l4sqC+ym`+4Vo@7jDe; zQ`2vbxd?J^TiMjty3a+fw|KP1lTPqW)w>umk9V!gPt4!?nv$s{gEaKEH^V>t57!n? zlRdAk5SxRd&o-s7$rM_(- zM6Q?3?ScFeOZFjJJwZ#puLqravfGH)!tZ!hFik1PK`3ER{!m0Ha&#l7<`EhW_YbN8 zc59{Eq*))KqzeHU*OV7GY73CwU*nNwY3l2=&fAnv!IW&k|Da}N@p*LrY^Opot zt#iup7ccW@Y!B(oNz&a?hwsnP&D?JpH;ISVz9dmk0w(k@N+ zIQ{VEgJwKId19NQIE|&n@wJX-mf4^dJu_z1os|B>TcH|m9~Y{k;SB~6!r!5*Sd({G zi$-d6VUu!Q@lL9dx4NtU{xc)KC$Q&pI|dQiT+L zK1PW3MeAKM6I2?sIEK?af=S zC9gS_2)z)I_poDK$rGfU&5LBck+m3KW0+shbRc_AV8l+R+Q-O{oCQi|pti-i?6=?A z6uX>i+&TLsum|u}rXc|x=|(|Dy7y-FkT7S!#Phl6jje)52$<>m04%qI)PlO39i6t1 zeB1sWKg@(QU(N|ih|JIleF*vEmZC>X&NU8?q$n$k&KFESXLRB*O;9SEQc{+k!u^f! zCyJ3bJv|%^6E8}{?Jjk49>YA5cnl&H9UZJ|v!bWY+#Em9j~?DRmQSFZ^NnC(imiyj zNwQpQ-e3{FT|lfnePQQUuzN-@WOZu~G?r%JIJf8js>8gJWF%hf5<&NiSj_}BS4qk@ zB&PkXJ7w>}-O0P|ey45B3w8_fWxvT*8`9AS+Y!l6?RVPny1V#uvu5|vOJJ>VglE*0 z6=3@(TH2=Z^a3ktEVOmZGrvB{13@mn1f}6eMV9fT1gyBs>&YCeH)LgxTQ%2_1 z18QvUrxf3jDvXMGXGx!rv@U?|4>tyq-?!z%YPSqAcNr=60=}Oz*C{H>4sU^oY{vRd?MBe#ng!tX|5x>}j7)Mw3snqS_z-1#6lcmr9&4jTX zdwN4H^MAqVk^amDT>5v`1@vy$WYq$0;EaBsQ@F*xC1`|@J>g$bC1Fs1<4waa4MLTE z$R~riF-VzH>@=2ZK#SIDi__V1{8qzti|bFY$?LF_0p4(UAz+!_&rssK%64v4T^2~W z%I8X{CEvKLT?>`D32q$g)6g_ZtRf7;+=1+-a3AB5l3xAK+a^hT{v4f^l!X7p_LK*E z?l!P%mV)BtiH2Bvp^K`v@lp%{xC-TLpsngEqY? z6W3N@C`YRK&!~N-=+?cKA_vtgs)FVf!IIv%b8yG6t2f{wbd=>+){reCDsqw93M3nB zGu(r}KHL(^kBHHP^%}xVk=@FAait?tN59ZW>%F57gwi{&ga#UNMT$zm zIy!JRkwMf`j1sT5^l5=O6+;*_zL>iFQ4N@GdyJQ-0y(}Yt0_qa#mZBYvwC= zJr&Th7}hG^zhcw)rs6xIJ=$RH!98j?6vp`ZWuIVY_;E`_=pd|D_8Adnl%?Q~gK^^j z_7z$f5qNspvNPQ}dL6`cIx@&`N1nV`IlokT}L0{x7e5NaYleA5oY12JFdU<;%{eM>q3m5MUn8{|Lp>3CPKLpTa}07rP{wUVlhBY5sWXmi)r!XU5)*94o(fZBzW8 z$@_7`nko(ftI*0{nCA$Yi3e@b??DOYY>p;ZgxGIbcudEv5Ic~x)b0Sc3A3_#&<@=B zJT7W1)XVlK+Z1^_s9W$?7oBL&g#uZ)19xChNSfYWgr3DATC73`aCS;i2lXnqW<+GH z*@9F$Bt=oNjy!U@IZ_}$*66O78k4eVj+je4HS_8;H+AwA5l657C>t({M@kV1Dw?)&LRw! zOsk2DHoK2x3>fY+nFbE@h`9p<)$HAH(l3ij#%1zPvJHf_STV_$b&OCuijPE@4dRBL z=C7$6MNt{(HY~y!P*a0@aYmw!8Rt%l5 zH;Ray4o>JV3_}hbnN>9(d3dnOUrm@?WPshX=j0J&FQ}iO~X z&u+CbQ%EPkVq`smW&C_0Y)dGIL`}T#2Uwphtc&|4ku!O}U*eDqfga2yIMqlGgOEf7 z$Pe2IP%FBawpg3tB}^uigk#3Z(2^}aCFPPOPox?R&?Sxo%Z7|{8(%Ls@vaVy7 zFWR|&B_FHkd_0YMbFX6eSq_d>dLxza_#J_V_@S{P+B|w^cy{g{QU-_`w#dpE+sXAb z-yQG;kgIV(7?t(I$0AyDb2?{CN3xpSr6y z2FtPquNKFYGOxG3IyMt}c>EWf$0mnd&R|ys9L?jWuYo$c#B|}gb*H!Hbq16P-^v+t~8>7R_;n6F=TCb5g-yS1mbh0h}II=FMBBG0oap znM?AuwgZ+(Zf-6ug>EX`;t;6{(e^viX4vfyB~_@!PPXZq|6|Gf?vIgkj^bx5Oyzkj zl%jaJc?RaLwxZQoa==;)rU2jD@2u_`+mPbp4;HT|J<`ZRz)ED%C-GSV46+^f*F(_65-CX^GZIfNf7B=CZ#vUAQAI zU<*?HTKMOWyZFW>w?V7f3ebg*nFTDu&_}eD>((A^9JE)Otc@$%uEW+n*{j$o)WtJK z=+B_U-EomISjC`c_XPTF45BN5Y;OEcaPFdl^V@cqy5Toa5Drdrj0r{Br5uSx`vs09 zNMQ#SUrq9+P+qiO?FZxkN7lQ?L%F_h|JOY?_t?xv$ex+@RwW}s$joFVYgMvpwO59O zN|_3&Ff*oTZ(6NN8=3ajYB!ZiB}OADVk#9yh7?7NP4?z~PM_!ZdtTqq^Ze5vYrS4& zbI)~O=Xo5*`^fKN-Afx$X`=R#DNDITscf^tMtu)ko+0jrbwrK+r#5s!lr&H#zQF=W zKqKOnE!Y1sNQFf2Ul=&tBi25G`bP#xLObW$<^O8$i66=fwtxRR4urc!KUImHKb}%k zulo!wF3=Nih-+v$;-dAU{SAs1cH{`1g;{B#! zD~;uO`;P&|u$|ipVH7;H2~*k`ds`xZY0(iTfA`4sQ4}=EW_){*QUy9@6_D9Fs7wZL z85PcQgR+qbJ5}pAogb*FPiBp&UF4uKLh%|J87Uawsc_+RZb>;tif}mXYAlqF#c6hj z$p<^?S1|<9L6fj|)scBg_6h!m!g*rJNo(!BL+Q|8oA6Z2h@ISjdLeE4sCZhP`07y} zk@CXXGLnFvn$d-KNX3$0JtTla8a+@US6(aOnB}BVGA_X`Q)Z8WGpGk-grT%eqj=D_ zdd~}0?n@o1Lexkj>Wqzz3#omDWyFs!)LSQ}uAt;UGg@<)2 zMbPYn^*>Mjq(NiffAS?Gxy^^8P`snO=@(7*-$q~_;i^J3JmaV@bhB|6yDF3hh8xxY z($qYqNaKDmq~KhA1*O_qNzg=UYg);&0m%y%oba(Y0?UV}`TAJJ=|EmiMvhTJ4`@M} z`qC4Qn_*78gyYtpzv@}XZyMbFy8r&v?oiLgZik`@Ouf6(qcs<7W2_t9c3TUsBKUF( z#c``DQcjSi%|edPgHHUaE!<6J+>I^VT9BXoBnUUfuTwbcw`+5S{icb#Q1BRG5BL#8 zyTXiBnU*riD3~zvDJa_t(u*PNC{s`12QMtMMv6i+_&?!IQP2J>Ys>RPiG;Y?d41~J zU2u{qceT#i0SH)K1DJ+~Dk#j|6sPt2FT*8$=l+ttIo>||Cbs)!#F(^*UvJip&?F`j z8*&?rH$hxe{$}v*-MiL6C+4M5QhuTeHhMWUf(qU>%wI;NREo=uH2$Y+mr-vxh@Yz} zrL9;$9`6q!zo@&)bZ430cAo2bc{S+~VsdPxjMa-~a?v8z0!1CCUnJu7*|@Nj)vDmi zY}BKnc|417I5XiX+{4jzipgk*V$~ApR0oxg#GKZNpkj_7tj|$j0#cwK2a+)qPDA!9 z&j#hzv0^!LPIojRTdBS)1~B_$Mc||9TJsq7u|v<^%iWWYROkaSZ|N>Ji(>Ga`KeB{ z5$nqr5f|Y}`Z}&9Z3O)~?wNC|1*&>Z%2njMH9J$c7^C^jg3CTC>9&kr+xdg{8Hh)ZZa6sm4iz|$K^6qv06}M~5bGb=!i%V{uT2RUwe?DfndhM4 z2a48y=WX|>)K*)7)5XrgqVCZv`wOVE#)-|U7Gv;f-Y8hxHElqtoF%w0I8GrU`2h#9 zoYlxJU;-uBNwQJI?bH};g$FW<9VMf@12ZFRgofJ(iEkP0L&YyS#-63jzo>w5rW;Mw z6_+Wn1aGmo@HC2^g2oApS&7-U+OzOvqk}J$U4G*CgTvGx&ICC6(G62dT+kXy*J$A$ zghTo-z)2e$OE{FcOImvCOHBYp!>dPUI!FwZ z$K!p5P)n*#{r^)Q7AUCPe0B=^$6sDO~e$#9Bj0hJ< z&i0W_OrbXI2#Ef5WqPM1#KgZvuoLEe`_dkxu12KwjkEW_h0zQPV1DLKF#cV8!~82! zvSu^(7tS<7v-DTdM;cGyF51>h?LT&6t_;h`W5KguM#^Ds`ly$j*iS%j^Z4YB@{NSk z;u!=`>?V19IBvquIypRLE60_c#Y9K@bVF3>`w1oPw(4r?s?qDLGQ>Y$EsfLgg$ItO z!2IZ{({QLaK1kj!fsqIme&rspa>V3XJ=QgYGhay3a(W-dtAq7-25yz0Q>LaN@A#v`?i zQ?;VRZ_}lJ@1LC8)&BMAGvR>FnfRI%4U4c_cgTz7L(&>F^9w7sliMif0}v-5v8iJl zP4R^ck)$1Q2$@nOPA1UKCbD*LyVV~QQ+xp=8}&RN#h6Kraz3H;u(e5AJl*PSi2pTr zK<3ZsZnTmyiSZNK>dvg-|Gjm2pM9>@!l$d^ztBg1$VpFmA1S?hpX5EE$x}biYc5Hi z+&d+;TD@sMr28_Gqu~-~m)(`_W1t+XOz}|jzpi<_^B6yH4G>ypQfmj(LFWNjBOpJg ziGZlHJklYY6XnmU%uWHu=AG6FuUqw+gF*4Y<}-GjM$IoKt3yTd!{$-`Wapz3G&#^z z5_fFgLR3{Fw(opKI3v1x2Gsa9j0^ceZIEt;6*MLY{Y<%M0ZsFF$o^Ve+Fvhh1k+k~ zi%h6R1Vr!S+W2npEXFTjN55lTWB@a_!LO&ePLN=bw>^pVAL8uG`?A7=T}mLLCJi=1N(Hfl!|sK)cLvyLzZ>Zam|m-Mx*d&_1!5 z7AVf?CbOoe&{_i56g~(aU3n6)j8uEwc1r9MZtM~o*!bL<=%;}1$Ut7JK$5tpr!1$T zO{@fcpJry|KTSIa{+3uiyvcH#G6|iTkTh*#v6g=7Fked5Fl?i;rfJWhDqmeDlRfF9 zw5RWmUu3JS0-=7^L@=pzz_9L zbWk41g?#Bms}iccxu&qn|R73 zpHG>4+96R+7@Y2)-U?kt8C&sPYDb*@IU-ji4vc6vGf>WGbZ;_>KgI$|W&ClYC?V!9 z1J>24e(D3`ycB9~yKVfJU%*?%vmc7qgo>9=T&fXLt|M8vEL;px?>s~Bv-EgqH9Un) zl?E?KR@bM@J#4?0$CZ!HIn}b}Q&Q@0^UbUUtIT*ks^cB1atv7;gk5d1;RNR;j7ogX z-TI8>)&h%oRBNHN%RP$cTsw1Qlv^F`L1(*j?osB}u@K1w9#{D6%|nCF(D!R8j0?Ea zTr>l1}xoh5AaM@AsZ8P$6A+iABn3>_t(%CuHkuokr$#+jnOe?)X}?& zt7!YZ3A*h!Pca#j)Q}2|=Hljwx=w)e3l!0x#}KjTQ9CRChS9ZPy?>;DS@;FFw))+6 zW&MZ3-l4kOk#%0xdG<@TQ4KKhU>G%VAE9nm$#MLFkCh`uF4VVwq%1KoS~Zafnkv3I zfS>KDC@Csd8hLfItf(U1Dp#F!X*gQA4o$m;?4Oh%yNu7$!*a+kM3Y6n zL%Nq>>HK)?Z?Jn=JwXp$P^``%JI@qn$doV4GN_OOoFM7%e4GE6Mv9x(oOxFkmLM92 z?pPUfkzd(s(bfnZECUEkaAo+>#r$<9e}_dvzIWs`3?pA$E(7fbql4E#x>(98Invqx zX0H02m^M3QHjN$EjO#_Vu_6MFNNF|z9%2qPtV4%)y5wT_vFw@O&lN#!AUW{Xm{^H* zult`(AAV4zrr3>gw=+%`QXuVm>Pvo6uWjOqdqa`&so!4v(3;N9hIlLRKtt0S3T^&s z{+e?9=J}g?%FzSOX?*~x06V)qn80%MHLp}LBXVM=0K2_IF{}f|e4YBZHYu$}qz@RTS{) z$*<5@Hm>5S;fh7ZAF{yM3_hzc`h)6IUHu!0b-(>Vs3#+JKDl7714nj&6}yRDGED}y zaGk5Tt*atV>J}?oIG9%3&-}nZrjY_(&O1mz@4TXoatZDm{u^_b(!b}8%Zf-Zi$Fcu zM{efe@H=8)c^%fTPwsIVo_qGEf4&8?aam&_PEf?F<{jsM`{A7WBcW2#Gpst^JrAho zz8$QKcCff+byCmJ^=gf@_FgR&C|JjYok>o{;8+-^vvI=@B5;b5xv_`qrwCURn8vbE z?h*UM6tC>Umj*sn%vgbCYtd${7%5!8-T0>zeelOly_)N53}{H0z@2;zb6X&5n%HPN zI$;ev@GJ2H=F5a9GHPc3-27eu#7?Khx`W^;@8XIrTctO;@s~sS{fsrXg^tF-FPOm* zL*y8t_0%Y4E)t%kWka;1*#&@<7fc&dkC0j7?{&%4M=y(C>$!cbF!)g;jncZKwX3g_ zkoB9{=DY~o_m1oCByF0wAPt!LYXoUp_w`vFC%uw(#E7k)ay<_Q+IAMIjsAp_^wgPYm0BDazf9p>LAf*SAIOYf^t6K5e!8p5gT9&iXKgOUkv) zURwiC6<)TPF1TM1?F?73*)wL$NO*|iw0tN!f-fsYK1_~)lyg(h8>!xS#8|EQ^!O$E zV2a)tgw-V`n{0W(4WiWCqQ<+8Y141}N&VzeVPI#1Sb8OBg)i=fiLsp)2&@*TzK8~k zn+g;q7RC2t3OI@yvJ^EGpig5daH_*I-8Yb*W)+I#n(Gu^j3i<>baO+BgRh|%yw5tQ zgH5F#L^xXPtbA6e(ZE^w@H;d9U+&(dwS-pvr-CS%&$;$!;;2jIf*VfH(IX?1i+VNR z(rg$7O)O6X#p+e`JX0|SUcqJ`q-M_uaBBXSXS<6^s1ITC!O8CA$ub^+?8oEz?k48P z6~<$ga9@6)pJT6K2{n3&uPHFEk4kt)X_oVX;`I)xhH%%s48-VD~a^0i~_G<=YOIZ2ZJ0 zX&+4~Y0V5tb`4+tj1z!A<=y#RzG9*pNwN?8f>%syeLr9q<^8ldXdNJ*4S2w+0?6m7 zr_{LDBSS{!_W$4(ZD^?4@bq0OoJ5-}(JRGa-{=r-i3qji#5xY4WznPEd9m!s`Je68LFNh zX^~)8AHM;@8DZ?6RKrlm-z0wy%YRUmwzbNL#QvV6=N`^XJ$H8(9Y_}9pup34Ev9~P z>ka&ZI!qOds;0*aJ<-j((hlfn1g{*ww5HHi7rj@7h4v`ha^T(=I*&Z^l=od}FACgU zDtp_o_2#>fX{pWwi)b`u(m>zP?!;zRR2DbN*-3$wp_TUN<9p`$I*K<0U*6R5?}HXX z@&|me_Wrc?TW?(<2J}93r{GR0`w@Q`_5|p(o$|*z1)ttmn9QSdT&gr^Dvh^6DRq)< zJa2uO4>u;iVIBnN=W|C4VJEqbUdl-{g)8d8mJ#A|qKdkDj1u{nn8!Zxyr3s+LD^Kw zN*zg$^5iN$lP%7;imI{38m_esZFnE3N5VNQo4X^*I^gsitvOVgjw_c06`gmj-{{# z0SJThAgnK-B0xsP1t0a!+L13t{1Q3W$fu_*wJVY`c74j@`jV8;2njCh+5uJ8}y;-zlxNTgY7B+_?;8`!m_QF$l zY3z>nIuR#oysOMe1M`%>e~{Bw5?h3DZsAvkMZ-j0ptfaFBXKfIiD64M@kq8v zy`LVj)Ss9L@2Biw{-@9Bd0z}-;pece{95N4BHqD4y8)?xpr)oxq39pKX<6!7{OBvJ z%jtie6h&hJ*{bwwP30=;!J=O&1CSMSfc1cbAGn8ProkKH<|K0hM!_!ZBI~0yx&TPK z3;(Bs)=#_}4t@%lrb^Ves2g_~{{a5zp!E3d2s9@&jIA%PUK_{$ta{Z%qrA?YdlkNK zIga8E#qHb582D$Hv!LW7CWzkLTrXzNkQ1I!8U&W`>!#vwQo0oY2W=)pXv%7ph38Rh zQCcE_qT9KBZaV~Z`o(GR5*%@kj%PlcY!bViJ)hpVzaV{Np5`WD_J{SX`(bvXKALRu z)g4xhMZ_x&obPrZeN<(V?3n3|>%?v|rw?@M-=R#N*6(oIn&?056`VE0;Cs)wael!z;rom}?tu-7%@WomN6^ka#^}>#FZFt!pm16@JabJ`JFT&mShk zIidQw^{PF#utm_z2l0Q^2?ku-3B-KY*pU8a1j0^lSM>`t#OOMmVQbrH@Uea~Ke#Ma6~ zZe7=_yi_d`Z#$s8sB zQ>ri#x{2jbBm87%{`qHGUjzb4kUrvxAC&Ccvx$8_5~?QHb-m2YpONS~;z7q6olrLN z<5i6D`k6V*236q4x%r2g@%pS*y<~ziGB74MYD6aV)jjD;sM*ompj2_>iCiHf2*DN0 z%4%vIhdKGN#N*{vX-XV{ODEx~%iDr!t2Wm{y$KS>X?Vc6Nga_ZF$_MlBmP`hBKiOt zIE2_U!jv10t#1sa6-_BI5_su{%%cL2=aEHCtzPLJ&g{)b=q1RcYgUr&9*yy+>Rht? zWHN+OJbi8^N5bx|4>-*H?(~fXPzVewAb7{kP+pqwRfDnB=S1>#!?Nn(?XWY)Q@n=c zt0>cSi$hT@&;b@-{;o`=rsxP94Nt^7qnR)Licby<~iBZw*^V=#lxr=2+{8!*T*{p>8PQ<7Pv zb%vzhB&5G9Ru!KbBseb_Q6w=gzRXbhVvMlAYhVUGL)kyKj0WbMaQ4?6QR)~Z&rB42 z$fIm`I>)E{o)jYrwAVtII_hUv?b&6!3^BvqgL0qAmDk~v_zVjKk^@d10 zm8*tGHmh~B#tCs|s$s$8B3m<2bEK38(^-@aDjg+42zC%NYu<@eS8ae?9x|k_t zkD&zupjD*!&~WaDw-D!Ofie6vmZVM)InA9k`eivPjtq-ix%s@lB}KQ;bTsHA^8$Y#ZxNt5u-{O6|@8Y zZdF*Mj{NP`kHKfh4fqiGUkY9XB1byu)!UGQ_`E&$uQCzr zYq_Q<=fu;?1HbsK>l{T?@$`V&>{c2hr>*!ZqUHi>=-b@3K3FHr6c2B&vcS}FV&{;@ zVWktDLy-}f)3h|Z0qUPjucM6Dv)1XgFQESDCz+ux;uAOUpN02OUf#f-`e&te zj@xyrAwyG;vyOlYRBI>m+2ZUsPtK6$SvmVG=S5GjUU5(`i|!+z@ibV*uQ50Eg!)AR z&(~Q0A{fSBa0FBjhrFHpj292dvaV7 zjb0Kwqu34H?Ag?HQ!LmWwy}K^@$ntv>2E}uPNdctd#=S!7>i@p>%I6qMYJ?V94&sb zM8^p-q@6g--71v5sTcM1Oj$9;=;7D&P;;nw{!h>I$RFs)7-hivfF#LX?+Oa^j35FsAP@&B8U2%{=|)m7b%=1U$2G$GZ%3^SVq2Mf+1Kp3mCPKmF4a zZ~iqpY4jh86$ThKH?KG!tB zu93WUcG&!q$k|qZzo~Ngenx5LtIwk>P5?Cc+(nk#My78LquE2->X>`98=Ro}25yg- zUc2-z61%I#RHqcejz7S2eY|WMU}O?_wQI|Z%bqHq{!*g-F}O={=I&08>U6uabsKjU zmBF90ejG6>aEqeqP+FSfesb!<@(GIyzz_?jV~D4qMK*j39W3!jQpG_yY2 zc+uw9eWDD06FS^5C{*&7Yfd&bEqM+%NwWmQ3t4c-Cb8p?cExz!T zDO^=lKq@*WXiO6YdgHG>^7~_`phQ4cP~1pMP=aIYxRxH4TCWw;H1&sKta*u>eb*4O zU7zw24D&N3Y0T+Co%#tcr#Q|kE$jEb2*o@954mQmfg)&1*(bjRuT76Y{aEZ->Y6P? zi&oWWCB`X`9`l=3&a>aK#d;Z)A8o}OmFVUAXhSL_x z4tpH*@A2?;QOl+0B0cjKgEKtxV)#&jaDajru(@~?8#<<_uX@|rZC~LGYp;7;p=oR@ zQtbMatcYt>YIhCSPk{1bQ(n`!M~3b};5mqE-uA@lkMl?97a+TP?lTzB`Wb^ZcEmX^n+_&EhPR%``P(7q$!|6fAAhqDKJam*Wk{}y zcpC~ZYGbZ=m5g_%YkM2JoF|DJfI#TzIqgFsNjoV%R;ZH&{Zmtmc^FzfOte+v-lW`m zbwtS#tul}m9&8Xhmpjh$DX))Iryj^C5DEJ9TQfTM?&S;(_Z+Kli3ud8Y0e!Y#qYa^ z^&NbkPbw-^z9@XE>}fYsecaBnO1OT_>QkndiX9$Nq9xtKZhB`AQFeXqaV3Za?u5UE zJGcWkB5TR6XRM;>E_?Aot>UQ~$`?7y=d^_d-9A++{IMFTGEdYgue_b7`hl3mBt*F(`PJ@ZJ$9zgzAFr8dU^i7>2$R|cK|-qd!DZyLCo@kM z8Y_=e>j!mW?rP6uP*c5i>=Z}AAU#Qi=>31?5SXYmkiwErPRHK7jC4W z>vqZsj5o~FuhL$2Z;#*pWErR#!zEWKf(`tgqmPZ+_}izv!6M<%>v3n+|MsiF*85OL z#9BQnI)at6fHI!?sMEM|CaJ48#yeLS$-B&8yA|hkYQJU)t|+7|f3{}P%H4pY*{5QJ z@2)nqF^A7l=35ZLm164dn|H~A>3!_n`iWVS`$^s1Wmf-&AnF#q9b8UpfhY?D3)5n@ zfgSDj-$(SAv}@jpbicz`Lf2Sul^|;6xzt))W|(L|@8shzpFcx{?%@%qGcha;&SWvhsA*ovz1(0<$7w(>U}pn;bAcdDneOhn}~+ z+Z$2Wt5Hx7CVqH^o^Turyll)7ospMFor+0}ckrTRHiQutb=G=Hj*=LsCWCSuTow0WOI?NvV8s)*=2f05MfcOHbe2?jVgEn7Qt$WQtevbOohFR;OHoQJ&1E%|Fvh6BYOo zdmfCI9I)nX-q~@up4D8$%R!V&{Tt6&(C%-D98Sj=JvC(Ckulo6oX?{MnY3I2-?GPr zvrytKSMqcCwf%n{c@{ipPcnz?vcd7Ujr1)MzR0Iav&@qz@GQU`gH|wK)tFW8C_>VMy=y0e@^9?u;&JvICQ34^w zVMAP26Rt{9&;NduO764QLp!8W``7*YGxSK@yZ@k_Y~5AZ3g+Hn+L`x}pKWu^IzBfs zi7{Bo*5s;vZ6zanjF0k5#R|wD&~M{8EW7wkX3;`Wcu&1e+unK8FLgQZ&Ld4BvP-P` zj+RrCf3~&IisChV$gKpDSMPH*E(Wi?x8dKD`b$qGlAlfIzGI%Qr$YD3b%bD*4J564 zj*As5XAyGeaBis$YlJCIb<}^bxW0CuoyOa3N7np~VmcUUapgUvG=Fkq-tO8{N_1%4 z@+>mETveqwV(1ms9|Wl`E8c**LcrsuV_yjgTSBtlB?B=cxo&7Vc zeTf6Q5G^?h516!Xx3^5tUu`voFEFX=@%3^ zO!}QTEhE6Mv#iC6MLSgy#6ZjxoR_OtnD+8<=8avX5@ z^b>-vh%?3u-}SLnH`Cj#eG}J4m^4PN>odwTw*PbDFxiPE>>Ltl1jrj0efWwV=2ouo z8yA|Ds-}=^oN`bpsaWhi&Px2j+VfJlwczxEeC{q9B+9QdU~K@~UH<#mlA2;{{@nRx zdt2V{aEv6!>>R979{Z!=V2IV`f_{}a{)531Z<3o#jN^cLF-3vAwtBJbNC zj0`_{>*1GY03#`oT%{-I^;ugN~g(1TFmOc{4J^(E0Ya$^o?FV zE9xnFGgx62aXHB(ENbMe0$tr{|*Be z+gzUj+QsI^lk;e+H?m}I9L0vW|B|7hp>Edm)s?UH>pDoxGpMuY?YwKDPE#kA18VI1 zGa_$h^T6FwS|u@9Q6~_(RVq30^=(&aTgR3OW(IFi&yaWxI@kG`p1Oa@QJU!+1(R-p ziSX*_|Bu(=zf6yFFy)nr6Kyo*1@_}anUR$}Qy$E6cEFI+f!P+82({4tWhFbDlHD}Q<(Wpk}I zOtW@*u{bvq-RsVh(6q)GXL%X)s``P$v3qKrHLdKZEbnX;?bHNPe|1u){g1X7nOE?@ zgz@8*({@U7UQk12fkH{eCmID9mel zWl@n{p3}&10Hzb4?sP2Y{h+V#lD=aW@X8?$Vh_tzI0%YHj?qW-otgE{j`Y(VX_<81 zAt=0D5gfD;TAPV3l9bv}n05wzRG)p!@#Wp^&f#;AjEGxVc>1;E(n)cyfvO@)`O#L~ zG+G>S@TvIyqGZwVU-fnUM`^){DZB?B$}dAc%1r+}+QB;R^r3a(Yx}fq_R?$vX6^;U zvp>PKnMU+{yYP$P`0l)^c$0gyv@FKU^qL^NP$L!3+<-BJOl&*@ALuLwRz9=QePax=nTIMy`1)f!GY8f1v zIC48;7(3;O$PTB~$Vbl$0VWJNmziL_bT#=*zFRdKQX-_dzO&<{H^I=nGoPllxI@xz zW<3`48G!rYMS=X`x6j)I&sYhUrHWin?Licnx_#MZS8>b~p6mT%y+5Hgm#hoLiFoT~ z?SA#n)aqTmx`lD^#UIw|#eILj+4}`=Y7l;0wQx;R1e*%7UQc^n1t)1B_TPAcC~3F| zM6d(<_ChHPs$3TiOZ!f%XzE`2?>pEJmc^`bF)$JK?VEB{x2hQ!WF5^fL!eBP`)SE( z>;W+S8PHTSB#jDF{U|&TBj}Bpr5hMY<^C$o;s+kg3>_$*^go3mL3kQkLLgr6DOJj= zAijj(`HY#mR_V`8C}w>q1fxBwScq@Z@8GJzhS#E$)=WmNXDWU9Wjsg9O`(*IT6amR z`NTKRUE;iUvF0yvnB~I17V*!qo21+$Mx%#K?AlRlaSdaJa_;b zk5s#B)Db_Z+I6;f9~daq2y0byL01L3KB4(3(##rG|EHv_vY(sk)|FmX!2I)y15pLL)KulvF5`*UDFHIy~vVRnhWWwp1@abecBb?jkGpp~X(H&MH~ZtpVHUaH3hp zGbtC8^ra{IqJTiZr6|#ay_bk<4aF&tcY<2^2DxhJ*HIav!AOV_j0aQg_cqE5ai5@T`2#D#Dt%A=Tq}Xp2o##F zwOd@9rHu1{2p#m}XF8s&&Yng)S4-HnGF(y9_Tc&DGv%_=&yJ?$9^P*Uz34 z559JI$I7tybq>>J#y;Y;DZeI%lj2Ij9cb>W0Cp`m642)Q0Gz+)tYpODoAw~5UBoN+ zP6N3m4!{%mQYy3NVGipFI0kaAvBH@Fw94mm87wGnZImMZNb&9O`!AF2wcG{qk;Lt5 ztZe(rS9Q=f>DELaKJKQmueLhph|U( zOZu&Shr;liL|+B+$vu21QzAWjKqCF(ta_gwBiY_WMrep~_HF6rZJJTxeFG*5E#mX+ zAq|(%K)!!RfoC_d5JFh2f1(k~bg#K%!Hv~8OAGsZ=W;EGeT^)4E40YyfU&=31Ci0^ zpqplZ_ z=q+#AMh^D5iDh!cji7<5V^ zheQ-+nm#>BLQr*-A4$wVaW6ZWnbnDyvjrnHDXWo@M>C2$cI6 z*&ly4Mvg3q0-n~>lKCZN1rt5OZBJf5YoNODUbg914;C2~bYk6Fnc0`Mo{8V+ReH&o zX2*nOXOEb#g8WF-mqSoILMb9P=oUtqXnw!ZB+7jL(K^)4*BD$VBIQnC?xU4-1W9DL z@a@!5KAYW}jV^x0M@{1NJO-n+^%mrl#uGQjie^pa_YG9b0S=Yv~hxne|1@l>_-OT8yf;Mk1%C z6ME%+KvFDmg@~`O7b~7XH#BKZ>*t<$HgWT`L}v0{b`tf(u#l-cOx$`mJ1*Y zrWS`hW;wmO80)-p?uK3PFWETL)||J-5WO}AAAC6>W(`muuQ180V?|xQh{BFcpYPoH zfWnzKLbZW$s2u8pJpBHCTtlvF5zm_;fl>JTar?v~tFw{h2s6%`g>urfu!K!xA%7ZO zU69N1#-X#dEE>YK%#}LPu+Es!_G5_vE-jy#ZN_Lxkg9%Pd^GggVS9m-d{(=qxU?a3 zAan!YeuK>FVX`cDny`K7-s(rnm1UB_rX!YRV_T@-el)lKnr=a;SN{l8G7Jt9zo1)3 zM)&;efl#roxh<_DRBBw3?6=go1&Z8Hu;bpndq-0Y8Qo?=(9f-Jh~ZY!YzW!D2{ja({Tfek`9Ue;##-X+FW5&5rNOCC zGQDad{nN$@-YQ<1g}6Y;i3le$FQF~Qj;17~_Bkzhw9+VV7uieJ(PVGQgEaY^p@T}y zW}@~aO?hsWM&RPk+KWz@Bqb#u?RdNDC;6RjX;mAD7Gxf(y*YNLdeEURF}#mi(^Y}x zO|#g||G09wxE^lyqs9D;^!kcB9^{0< zi4NUvX3*=?Q!s$SH{#Lj(0@hnZ;jz~Ae0cnih7X*Y3a(xsjG2=2weJeR_r~N`4a%K zD%O#eKwtFg)tpQe%&q-g9{2aGAuyhFuh3l;C38Se#ZL@~kVCNkbR1AY;3#tHs_URk z-;2U5rR7xd=22oW#IdXl97$&2tOG}lC-4iGBIQy;@%YeHxcRzu)`DGwT*@ld zkaESCDlyudT08EB-k(%k1N1Fz6H|a3CpO{`xpj!5t;pOWlpFB%wt~9 z<*rB&X%L(b*sXi*_7T&f=3&#e$ZTZE*b;)M`Xo}*xI(1iwu-qR8UwcLFYw?}>nLEA zLI6>^W4xo98@+xchtppqQp*t(A528IN&cN-g=$a$wNGB(HRX>{Bbr{d0b3raE3yWe zMy|zAQePhc-%aynd_*@tZIj_Gpz7?Ak-1*WuqFPfRkOC6Uej_?(PNq`HL!IQf5U#X zQ?F|gbp1gDX%`uKXGpF>e-L`&e*E6##-7t5S^@9u7V3|y+aJZAtvA&k=co;_nqZk5 zeG&c!oxTM}!oZIF#Bk3YJ=Usv+xylxC=31ZPrp~N2|INkB`<;jt#akFu5}#>RBiqM zzKP>4s))W$q^L{RW}F9$%%u_DbL5e-Icw#)KJR=yKTh+?;vjiB%ZtN>Y>BoVddx$;i* zLe`iDEJ^v_l7yIF|BDob=G|Qccf<4x3aoV9L3&wuAIc=3T^+}T?B@W zN=B3JTNq3CcO+7+8FIdmXRLd{_5$lb9T=*yd4@EXWw zP;rn5M0>7wXW+ga%45_+oght`5HqQ6Cdv}2mILM5BQ^6$q^3Gqb9)E$9Zv+fa^e9j zK}%^!hOA$x*i?D4W#dg9XK(3rnqwcc72X<&lFVDm7nJI&AQ?x7VQ~YJ(QIKB9<`W= z8fxH1Rp6XtD}E$ZA*g#_H}vN0xd*XSX~)I6G^*sPy?NWI;eyo9K_4pavm-Z)q5kT8 z=8vZ$Eiy6o5X!6*Ha~e3>1>@5Qm{^AW-0)_O{4&Ga46}q+@}BJY}2KK?>>Cg zxmK?MacneqH06^itTh!oueg?DldJNfud3j(Z@A{q`E!r)rbwGMg{=X8m>=;Lc?j{mE)6!*106?w3tOwgCe%oneH0~lt1e8+J)s7?_JUW(NyyAeDL|O&Bd9zepO#CVe$EZ) zS@^;N$yUJQAw9=Vs3!lP*r#~%DkPZKU$}ZqGY?JOt$zgU2IZ7Ko>V@!tw!qA)GJDS zrqHkar;ci_U(tYnITG1dC`F>=A&=ePpWJ)Kg5u$emhOACSSg)=uWf4+>G66W2|eb~ z$Ka!x1I?uWK(u_)={85+AqcAB@VFLd*`Ca5w_-l$oUtT+iIS<&$RpESi1 zG|~VM!RSpCNVDlgRfQ78tYP+canIm5mX5m37B<`9`0co5uS;|O?aA>$Rg`RHc)a|8 zi?)1wfS<#?XCbClS*EFLdiRz_Ptd#$Q#)bJkw{!A4IB#5_Kd;-6SV!VyGmd44yE3O zf~+5C=*bxxFmA%{gk~mncOk(tbp8$JvBG+*3F{=iLFz@`mpm&yux0CXlM4>3A<8N` zVHlU?>OMI6MX5F9f*7*lZJ!6?QqMPp2?v5XBHyJu8ZqPOHfpuL%|-F6s!B1ahvv=b z{uG#Rc~o*tg-+VYpLC%Vc~j*K15j4nJlW396(b3lcZDEi^6w0BxJocfE!7h<^mhM) z+nX5JjE7auKd)XR3mH_VhvR}K2VWP+B{bQ29?-D>q@+~peT-x*)eFANxClQ!%`GJN znkbmm%@Qh8SIs_y#q!wAyqOkDHOHY3Mr1Y9Iyrgx1-ooGtKRG=M^)#1(~2i$pHboq z`DyyP$OeI|-;TM(OE}vyR>OjV-~i3q>#ow^t~IG4%45h>$wz&3OxZ=z;of(nSFWTL z$h@|Zg>6vHV0~_0b79(O7>^Whtrb5I=ajN1k@y{pGFC!KpP`Mai1x2P=_>B&CH)tX zgC614+$cfn=tR!AsHx1xx&GRH!_XE}yrHMmyIpr>^<6!x|67N2GP3Sd;WuKl=ANDU zoHS-ytzJxMJ%09^wtaA+7NSQ+MrtQL_P`r&wV-?yWs7%)`RPHQT5E zT6Rxx=1i=4qJ{F+)n(T3`MQ(G;9QF|dHS7EWq~rr!>AH=Ay)UrBu#2$C^(!j!^1<$ z=v$kc&@ook+8mYIqP%0oi-^kKUA7Xg+{&w5!yA8NF9%uzwoM9i~E1oAO?(4&c3eZWxYyU&2%(;jG=I5XDhe!5c>Ne7SiMp;T|=Qr_N%M)^h55 zRU~<2>Rgtmc+(WL$qcmiiut2*9ZlVp=uHfszv-j|bHBj+2nDPj{0gkwJU0U=Jfv2MW=Od3##rIyKHq)t;aN%-w~htg7bx!T2k6^QKRz-R zhcRaS;ZG}O_qd+(L!na$0pMzS`>uo!K|P$fj1O;mpdd;Srz`ZTUK@(EDU3uM0i_X~ zl~Y^i!%CpAbM}k|sU*X>=LFS@Kr{n1zYFJf8b>(D2h;hWW-)_v8Y z>EYQ|C71fDS6K023+4$F6;l4D_rU)B%E|9;hE$*i)$65#Ad}^GD;&lnoAEq%v+7}5 z6iO0OzCv72ET5n=Qr?-DA-~czu0p3e_{Y+v(6nxj7H!n8VLsm06qtHbS?)4Y_JM1f zU)~j5Qb6Y}G__Gm((sfp5&8E-wZ|(wYX+Huo?@r)XCB~>jHZS~xSq-VvjUy%2XT}yrQ8%#nNKR&u!xG&NlFL7_qsKuQu+PGO{L`AKZ~!J z+TX46A~`SRd~ub|kF>P>P~WPQ!dq5IT0l<^n&0juw;D57aC&%B4~M6|n_M}+;Q#Wb zqlE@RJ_vm;83+A8U6SJ|O9}Cf!AArD4+^H6tbYUmdMf5#%5H0!1D4&)8=ScZ? z-Wk@v21Wj#dYw_Qi?I7SPH0zPycta-JA#@|xk*ofJ^y-Aug2Ek5yd28Qnm};(oO2M zW$NGcT`t+B;=`xd=A(k)>+W&BwU;_MmwIMYzrpGkrOdYo3VC0eese zPL(^DEd7+;>cQ>iP|>?Fm8Y41dWO)1NAsL_1q=2P#dj=$|2A9;^^Lwsx?*8<#<9XN zOG#2PyJVJHUY!)ZY#1^TpN~rSV4c1@Ol*tO4;|8HQ4+ou876c;fx5IiEmhqlvE~=c zjWJALJ#E>(3pB-pz}R8=I_Mtm9WA+1A@!;b3=E`!!<%i)#}N!)Ad~n6Fvs++wKd`0 zXMyb$+L3{|(zo9V?!Rz{*qd67uhbXTKhYObZR6>hd77;|-~tqXopo((`lnaalQ2r7 zNBU^Q|0v9mn4*n82Tg*~=95-z?c-5~7T&M{>oT*G31>A>F)KSF?`}qC$7zk9o-PneQL8Q<{J=(XNg5ddzX4Yr08O8` zsovkfEbw3< zX@z)|o~L}+R_NULg1_7l`&k=C=m@+o+P|%Uy2=P|cJ7L{qvr5*!HuZ&*fIODV5-X| zH^$6qlaxsGw9rb_MV~%(M*wAMdpBm0Yr^sGFXipAI2X<8jYON_J`CVXG9RBvkSyZ@ zc9&IZ&wA#%%h?s+lXnI{P#?0DL2Yn$!_&zg!w=<4-T#{_pnU}DfT1(?53o+fUxxQ1 z&TLQ+^#~$&rC<|0eT8*FQ(Xw-?;OoH)W?^5N14AH=asrE=uEUHJ4eb_fXzRBne5F- zP=3PLO8CqNu-7>enaXI-K`kkiv&eo#8)v1=DA@sC=iw-a7_(uXt9&O103-(bnfiKr zMaddm8SohABXiBYk;&%gCh8G5Y|9WkXZbG$6An-WJ_WLVhX?K)BIIEQEsc^J9^UH? z@Hk*_-vh$l2y}2bC=4o39WnZ`KvUC>gFcHXqtrsNMh?ns?jzeqC~AK+;DyM>xY;Yf z^kpg7jjF^;`Q#C#VPqv4S>-W#KCQEN{(fcp%#aZV_5q zHp>lKtALs}qYW|FMjzlHo#%z{s=?-&I(NLrHgK5u6ozgP<95(}^-TG6WTYP=I01b- z#r+TKR4uy1QvN$6Qg>n+w)+8a6UPLTGH0h1h5sUb)4E2}qhC!C8jZro(R9Uj(h7O9 z2>DuxL8o7*Js}H`CRgZgZ%+v4&yAr{?(~taueCIi!_E}^#J*OlrdaMYpT?|4lVQt& zyUg5p4L0>czHdD)_ufFs-@MtS0~q$xHL5dJqeK#R+ku?bz|40}9aDyY{q2Yu^rTZ2 zq`ymGuNWtCdreC@xCGHJ!K-QI+n}xfX(c#l@=u5eSbZsnKpzHhKIlgUyG_x1jx1d# z4Y+QrPNqb4IYb>@9&QYY{hy~M5zE0EBw7npQEn&~Db_)&rDl36lE9cgWX%M!A$?x6 z5czR8zNiz;;Fa^QcSl)dPEAi~?cG`RKh)q^tv7RW5_mu65h=rDri7zwlez z5YIz11IVC;f^}Y{4h#R`W1eedTA1d{y0a}SschiY_SaC}BWGR53yyT1_6i%?eeCAc556G{ zu;}wVU7lou;^6;o`1RmlRzThm-R;>pHr>2;bwqw@u4SEPOk&GB0Q|A&g`W@ReJLymF!yM)v^S>hAM!4V zQW7exAi!Z0>(+I^F=}w681gRPE&T?&Y+_Aoc&?D@W%P6BuT4WU9sJ@H@aTXNGeGsu zm1=x|BiSuw)`9yoW&Kac!W9(Ukvl0!kd;gsC)wVF6UA5$RV9)OCX^h7<*8p(olVS}? zPXpQk@mW)&{eao1#_o#k@eCA6RN*Al7f_#hz-6#ih*O3d(* zN4nBa(26ZyLH@=fmODdhuTB4FmWv54Wwl^w_&i#Vr!)j2NtdX(k_%8>E4*%91Zf?Y z=L$nj1n3oS-EM+I4d?m6`!snRT2w_X)!J6=4{0iEBbkd5@>;m*@kN3BEmp@~yIq=Oz|BHLB}m>Fxckt$JnsY`89KRf;F??qIcow<{BO3YMM zzF-~_K7n;q#bZBf#!+(OQP&&H3e5}ou`a`vw{97T8@;wr!92wqSIj2jca}{6yJkzb zA_Huy?*CbI^QM*y*7Nqd^yf0!1zz)-HEX(J#dncUGxVZ;nhv!heHUH^iQBL z;WCvdRH?>VNIBhMVf2uFB9OoR&!IZq2`?;!Sc7ugJj9?jbV))a^Yhh&x+K-i$aj$z zU^xbaK^zYefG2_#=+gNdy?|vPcmU2m94qy7px@A-&vL5%o2zJmz>LeWqs8PfBXmW? z3$&=A>H|axp@R$+3==y{Ks|C+n?q!vqbkhDG8Y8tuLs7}ywUmtamQ!twFp*sex*F? zro^?->bzZ~(Z9F+gk&RvR#k5#{n2^hdgd`gpZLYCmtcl|OH7yBy1?~tn*~{n@bM(R#zfhU?XWuxjy^OeURTV*h+YH$V;4l8PqH4Ft z&`%r|nU1`R-zp9;TBGM{y>xd*AvT@Te6{pRXQiVI0c_+}9rssxR;Bh(&FYVo?&}Vd z#Mps~@^UICno(s-@k3jVv}X-aA_g&Xxw#&wRn@100||JMPvm>+_1Sh*B;~+>x2N;2 zuXE-N5(@f_!iy;_o1qp1E@;dGP?ik*`6HyS=k5SKR$-byeXnTg;ryb>P_P9Qr3=NZ zzBoH(ueb1e(~;(Q{3%_Lf*#azFs8FIIYipiwOcXq!$Cayq|@vOFRaShNxh5HW6II* z3fl$!4y-GhMv-=amb}+vQPk=gvro%GBYopw#o<9qgzqsY)D8Wb-C5ujitZ;e{=Fg= zEwrnJ+=mN>Tb)4?-r_G-hK2{GD2gRvHi-DgIEk59MzyZgyrfSI*&-CVbe&`X%Noiy zFa&C@$0=R4@pV@V1$j6YV%~`O&M`Z`Ypl{EsTIBFK7ix|e-)QY;p48N&m8x_fP zj*2x2=Sc0METHg)7Y@=8R3t$Hwd$bD>ab8^AxZJ($cOa(M_s8E%4J{&30po*I92_o zJ@cTq*zx|}GV~sh85u$j;WJ?`?a~upJKHvpl2zb!zmmYL#6%+Exv;O@K;K>nDdL87 z0P@5Zxg~`7^A!Q;J?i($gz0najJ4L6*PX7YRCWHgDgR)sYWd}>!{qRcOXUo3<_D3F zhJ!$O%O=jE+%UERuDhq&u+>+WiO@1R{VN$XhxINXvlXz~moA9RBgyDXJm zz$03{B!0e5+4<7pc{Ow`=sP^wkIe*tQ9UZ2O&M6p{6Y*_suOO5D?MiRvtgPUQVzW`Ik#~nOViKpzwco8WoF? z^6jDztI}chI!K&q4`RM-hG5su+aCgjcQV7ZVBdl{&7^E-o1dL2 zU}}6PpXJA1Vdn=*y5d2f-Q}&4=j!hXA2&iG{V@=t*; zBy*H+=9Z^-`Fp7GIgUc5G)8o7gLR&*f9{wLGLWKtuJh0`DNqTegX-2DrcB7(EWK|Z zUasq+EzdQKzEd$U`B!=yHj1{9sMIT|$~W{kV_M0TI2p>6CgAy&NHAUc&Cd7cFO7ie z1r0AKg{4auuzv^h_xYr14|^7SxYth1lx@_VxAhL*y#Q|c_8qThgpvdCE*FV^?-Q6n*k}E(Tk;=H#)#VT9>>9@M2!g?(V&;N_ z1PeUcS2iXyM6Nb6*V*6ZJ1m*6ptWt{-iXnd$w-AvROD8s0b9FB-SXpT%T@X$K zvq5N^-eD?wVZ=FG=i|`wH&ELfu37Cr@82Z2T<_=}<0vMf;&_XclPE;%$zG7FXzScy zb|v5c1rQEkIN8qZin{nI@%o7jt1+TKn6Q|K(*=*7ot>TN4}}|xnk?@5C7({VhGxFV zeuEQAx#)mte({JKGV&WFLE%iwvrzrSH&ET>Pkt31BLlK4J3sF)hYkke*IJd{uL!{6!STb)H{bScbB1FJz70d9<;g+f)musZy$PH z-zdl45D9U+K}qEa%~7sOdLci0+%O@W<_wf&@lt&ejWCZ>d*K^RKHo(m!rg+9H(4M? zu2FLoV`_@{%Z@HEWK#>+ko@0N(THwh7Um#3K11#$w2bWMM9=7kx+WERp!e9)grAWe z0a^6fF8=+~8N+jVFSO+(FMRpYZY!D;D6i-J`f7Bv{%7_QDE2*}8{NSjg!L4oe`G^Jy{jP}D8z1x2ws zjYthG%F4JuOTQ?wmQ|OU{XHb3bH!P+hzD(^iwD)uSsT!y8{8Fx)Wue6+bw~HR>9Y; z{{QzFw;isWYEtdfXJrGO!RkNcZol@>b*XlIAE4_#2lnZI}J2J<|7~ zCpT%?zeCL1WxCJ6+L18Od_Xe($2!5q>sa=^3ej}n)ubS7C1t$(-Pzq7qDwbBZv%## zyyOJu379Bx-$R`!h6>sFx?%2;8o6#lztj9V%VUhG-qvLx%pcG({X5k1R|+b8o zbf)OyHWO*_raW$TYd`jB(3!D!fs>~e*legrtOo73E!$&sune+D56jDPKE|T>C6D5w zJ<^13W2_gh1=Lh{gTUnMk)`jM&=i;V=3LN7)0OgF**RwdR;)>uFI!#P{SJGW+V?23 zitFTCGPkSU?WyR~5c9Q8k7&>+yd=l0g^#l;oUov}42brXhzyfiRVu#yBf>wwNH+dB z(vY{{w+$QCh9U8%gpSGZmBA()khmZ@3mGTm&dE>5sip0gj`RFyCG0X;4-vSbc6a zP)BZ1jqVh>z}`zr<5rKaDzz+j^Q~^cz|MBP3t(>~aqN=bmoF@>d{RJ1oPYhfNVF^E z{A|+m9;__uX{q})>G3C8Yc$g5r?66 zB|p}zc)7;DXRBF>m-2=D52>#B*>nKOlNDqJAV*p&aiR}yG<_tSDM+!_l3fiG>|O;r zei}r2jY#IyeysjzIvD9ayXMY7R*_dof?Q=AupTPi?~BqldZ#Lmx&2WU-#~~``b+$^ z9cq~s?3fbkj?@NVE|JYIPR+jh@1ZSMZ?vsBe+OIhkQVBIn1`)}?VXkVCy2RO|1xMD6>q4SaWw?fA&ST>x( z3HyfJFeE#j-Gt_MSxX{vJ)?UA*IqgUKVCNRYSFR7JEb<8=p-k~#~D)bhP$h0Sp(bs z$Ktk3pGT35T$dGOcU-KdHJJCayH@o6{?$Q?h&{8Ga*5tw%v-L89kHb7Ro=8{zPk%Y z%Nz$7s02gX0a3VQoq_ChgtQgLc=><0NNxTU-EmLn27)}_$!nwn^wA;FvT{;=0N`B+ z_Bcx`V_tGIN#*UL6!4L85(*zO%2UTL@p5L^i@p_ zj(n>VOLbLwNb6B}=62odVu*3S}olg}>6= z=%8Kx$-)hiD_$BB;-u;Oyrt~z_b-dcU9kj0s&qo%*3eLx+F}sv7p7Sz-2LF%KQE!( ze4}GHj|M=azx}m>i=_&!f16qAQfMI7vpcCt-aYO^(D@@Z0YF^2e0biZTDN;u%6e;d zdd3hvB;#(m=hh1T#aRI~-=7`MO=cY{BWtze-qxDGW+Z0M@x^pf>R4w#y?sWKDcR9Y zOs^1yN@20Gofafaq^sAz{Eg&O_+_`gG5FavSr@w+rn#cl{RD!y)Ox?PVJ~UmekRGa zQx)Q88Wg%U<{Oc*0gg;1PP}ImzpIsMTF8^^xkB4m6#~|=Zu;`CI>B@l`FyMP<5Ui` zkQe(GJ3rK~clJje;;=DVcqEp?w(`?oP1fETW-=!okO%LSCCom^^DIscPGS5D29McP z@9Bqq85a@rtx)VWP&4A>hqpikaL+VS3)x8UZop71hMP1 zKb{)efD%JeL-h^1L!{lw4N>3vL(;3snR*+sf(k~Gh_K*x2v)IXGd9$TTCS3L{(LDD z=>F$SM=%F3^@mu_qmzvQzaFcoa`a^|l7TdSF?ml#n!6@oV4ai)?=g-gWV=UPa8jqd zq0ec2B_EvYoW2xHLd`8Xy=t82e)H0RO_m8e9v)*LC5=qrCZ9*{9}^Q0VXUgl1a30L z>ETq#sG$rXF1Pj;TqH(sH3ZXnHxX*3z(C@L z<9$vKz!qY&x1oc^COu(N!`_uTfx+J4Q%kGn1f$?QmqKjMQclu7?i1cV>}zVF%R5!V zqNwocKbZhs9e(o#vo56{SX{Jz9uEx#gCnhH#*a56vMsA6ucV@CQxipEe~;aw)s8lj ztFuW}4jtgXX$aYvgN$xNE1EhBs+_fN|K<$&M4}h9obD~UcduRqnWG8thIhKPN86zAh8rbIpDn9h^er=Nz?M4UI%SbPVv4yn>vFbB;$WIfhZ^ z$4_?n5F~qfMb=KFy~?|!{)OfwV&l({(zyVeceUPukRrIGHdq(6Jl%tpU%bK0#4GiU zRQm(>tBY{7=}o=dBtbsuDviL1oKz{^BvACLDM^qR=M!R*ZUB)_L8K`NU7!h1Xhz5)YReXW&(}F3yb^C9{wlv_xZgNs7)3 zb*AhdL$XC*)Seaz9p#;X+64MbzMk<=GnRqr$$Iim!t!l@q=yw%G30R3i=%h=Bq~Fq zSM%ZpZ%ZjugqwSJ)Pw!6x=Q=m{FO}cn)JEuhcs1FQ9L;iD4 z1I>aHhP0dSU}F=@6CkL$71J8H{pg{sdrVaa6Um^i%fF3tK;Bbo1{Q)uPQy_*nAY6o zL*A9`c@L7`;1DDO&t21-m}OMfA}Bj-azlse6_nSSGn-$(LgcOnW76PJ$&_I9DgfcH zzo%FIx&;lRsc{EF@W=BPR=pN2c{w$cursW44qwFfJEiv-*k)P*J+t~*QuQN=pB5Zu6}+Bynrn~zbPxQa#waJYkA6*yFfWL!d=mN z`JztqD=?e{J3EMQ?iw30qE`uL;=3w7sS<5~2QP7OKT8Q#r^uFGVYT>=<^*a*Mi`QXG z{Jxrc*LD4ES5y&#f~$P%t0mX#q4&>z;)DOWlz-HC?kaX@8lKh7!~{F@(8Y1%vfqW3 z{#zpXeHpIS{JsV8ykx;jmTElm31jOjY8n7iG&7C9?~*8M>O`c>nqE<3%0D@XSXDvf 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

    l#xnvkS;&s6;Z1l8mwsk=I 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 diff --git a/blockworld-client/assets/fonts/Minecraft_B.otf b/blockworld-client/assets/fonts/Minecraft_B.otf deleted file mode 100644 index 87b124cfd139705dd9bd0891b9e230e69e8106e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11164 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 diff --git a/blockworld-client/assets/fonts/Minecraft_BI.otf b/blockworld-client/assets/fonts/Minecraft_BI.otf deleted file mode 100644 index 1f74f388ab4442bd91fd8486adb4b74806fb6333..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11772 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 B8~6YK diff --git a/blockworld-client/assets/fonts/Minecraft_I.otf b/blockworld-client/assets/fonts/Minecraft_I.otf deleted file mode 100644 index 6801bd85f04b94ec93ae3950accfdc2583d368af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12100 zcmaia3wRVowtsc^%s{GPASouYVzEgWm;fP!R{(hi0*MfCkXKkn$b&}$c}c<}i1ILK zWDrq<1TY#!T#yJ+(FFt@6%jxEeC@p}*AMyF#of!@&D~c2u-$QHH~-)18KSOt?@hj* zsqU^ib?Q8R=bWm!bKbl=8E0FV#*(H^pPsZ-@Af;!x~4MbeJW?}{3%Rf_!~L~ANAJu6qgrP^}7)XGv;VyOsgnaUbxKt)tofEYr&OSf(KoSwW(--jmuk7 zUbA8G%lc=GrJZ9;ttl_uP{o@3c%^j3hpVEneEIstC0%e|1$w@!%IcbqlWaKnq4!BP zFW~3K-}jtY+GG3;rfJvkoc(S<7n;-l?)a)>jCMdh!&IzDrKkAA80}gI)}Ynl{eNi( zqN|F&v_G2|10VQg4mDHR&77>Ox{*;Y4AXvSGB$ta!r5#qOB%33 zOTt_iz}p49x8)X(21 z{p9@u%(sSBV+P_P=_j-J*<3uK8Gk%?33}GpE2v=WI!C0lG58FOHC^={qWJ$l9`^h&&?_b+bkBm4d`DY>Gwa(^{TNgX&iZD_`@;iED~j~P2IYs%E@ zY13!s&6@2m+gHAwsah8%*lqp#dl?%rh_NB*BOsOA$4{Ctk>$+Dy@RpZ`}Qt>k~P|V zIXn+NU^nXR&pE!y#f1+(ys3`Wti8$i8ft82ciy~TcC+#G@2BXIL(RiyKAQ}*>dl72 zaPNdcErrs^2-dRu+4DexW9(&ilD)y+V(+uh*hO}U{ek@_`wROkyUrr4LwQ^~lGH0H zB_%%P)|9>}x&71u;|EM0Fl9i&fZ_owIyx`|nNBv~ae-~jtKb~#*t4K~6qH}LDW8i` zzQX><{>=WHears#KT^KElk#$#GKhDa#|P{902kr{KEJ{BIj++k&*O7S$Apf__VcM7 z)9r8nKmHs!d}Ya%sh8JZuDo1&dHh%VzMS*r>@R11nek=%mqTD7`QVQP)XLt$Ct>iX z>L;B`D=LN6v+U-nB#I~fj4 z8r%=}NMWgLARElm;A)w0xG`)joO342gX7JHPRiImxaxLjrk35uHo{pSWcR@2o@C1) z1B!tT)`j(F{g{^xU_L~Z+u0;UjtOicOl>mUFNfsX)q`1s6)R1(hB!*Xf$xX5`<=JB4)wUL%e(PU-PZT(1SS-vYmZx#2M!-MafW~1 z;-$+N`2 z6-u>ozw)5+i1L`SM|oCxQF&Q;T{)|~qx_q4S^0y~rrc24Ri-*suDVsB_E!6=gVdqw z2z9JFNu8?Zs(I={b(wmPx=F25cd3u7jq20tb84&lhWeiRq56sXZ|d*WYigVNjoPj$ znoHxFTkECu(NeV`+DL7jmZeS8W@vtGo|dl_Y9(5^R;}HqZPDtqo!V}#K|7#5uf3$T zYOiUhwYRkQw2!ra*Dh+8wLfTo(*9ffR{NXwz1HE-99UO_R>Ulgx>KXibsatJBq`p#G-b9~kjEpFc zN)ebPhjXWXfrl%6N!&e9X5iUCDb9@HdN^=_>kFoFeIj2F4y9w9D>BNrL|Sd030(J# zq#k!*Qs13i7cY$F0y8h-!j&vVf<1>wIe@0&5-Iv2nIlDu8JNU%*JPe1&CqPF2aTW^ z2;RZ4W(?8Se3SKU&f~jTUU}nj>|af}wAb zSfkT$4V1=gxe9O3OE(CPh}19V;ee0p17#j$XiSrZ(yCA8tE4_mMjm;Wzrp)+-7CYP z#MM$4y}VL%(~SbDxALIA33NWUyiUuzh3}AOrFHgY(g0YSBF7TFppnpIUD17*R!@4F zE62<&nz{K=dE5*e%4>D=dJ#)A|goi)#dGs>* zhJ@bJrCz(A=$?U|!dSJn+VZZHK?li(rVHvbXz50!)UR6g6R_rR2ujMnU&1Uhq#l9P z8hNl?dyPlxUAoT`l){@LMYfTsYi5zvRwY*+BKz^VL^IS}0Aj8KAUOgGO_A#)B<9qE z2Z<8IX`7G-cH@BneHVBh7x^i~fD88NbL9{vC@Mw5E<7av=U|?jVHX^?roWN2h?n35 zbF~oTd%6BT59y)~lFp_Fuz-U+0pGvky74OM+M_2f#2Mw z#QB}owi5h~u-E7e2i`?5TxU3BZ5Reb=_=#;P#6`sc8UD85-Lt3|Jf`TL1t<406Hqc zvvQflkO#QiH4n1~@oyOVX^abli~G6oUy%B>piw3vdcB2HhoGT*vbkvSg4IbM5MdI> z4Xe$mi>=@@8Mi*$mUZ7Ln7IcNd~}G`W$1?MNiHtwKG@@Gn%F=C3kSP3(hVbW8-}8r zAw#$JYx*G$(IkA1)xykcxLY_erQsBHx~rVX`OJVGsrO*I=Q$MBqusBE%OQ5l>(Lbe zGw_xjX9&@(pMnI1_2=v~Lk7bhVQiQaB@i3!KqFM?zYFG#3FFksU!7 zQ5`{+#VLph$N~^@5hxJu736;pGelmb50tfP44DIB3jzmH3*-k#-;gUHIbhE))>lEW zK_FK!WGSN>FQ_P3nu{rqFy&FE>|)ApML}lq1XK1f<#C4W0RbPG15y)qh#@&ayjPxN z$Pri*1u+M^6;XdBdz_tRzhmDjF6EcXFlDh)rR-3iLwNZk!pbiYK;|QW6sZp&c)Y5f zS1+mGYe`xzp#L@PcUrsSmyUeLO2>M~dB+WBoHNBa-&y2*-1)5YwDVh6yeru?+?DGp zbG_(#*Y%&S>#mM2-MjSdlHFx#m+~&Jclm!^2Xwuw>*lTpy1vl$MA!f5`lqhf<8Fyd ziz|++irW@wZi3obF}apXq+4`)|8n?f%E^*Sr7Ct+?m78{KcZKXHHN4)^f&DDLrWkMlh) z_V}i!qvym+>p&gYn1Xjf7DN4~br4n5Y!H#YypnFngu;y0_QMz1lqs zJj*=Io{v3O!|%HRG1hk)#g~bEyCjS>L#N~!Y5a-{CR#Ue@o6=Gh*QWiLy2A>QyM2^ zF)lqaHrc0?2|$36U`bli~}(y@)|jU<1G@W<-Ak^#Wbt8Rqtss9_A76H0eu? zO=h^V0Z(SAo|p4<=?)rZD9FV{YxM_G90uB5%#ck+9)ZtVi3!DF^RwT`kHUfJ@+pAu zwiqj-#By0)AK!~0A8{v@Wb?H9D68q-b5h7luOs(%Yr*haFJTENK86_wfX*K%8ul=2(g|Kd8M<7Gu@3i5;IA z+QZ#`j@YR!BVd5IJOhESk%C2IMpCei^<>nT>hX3>5JO zJethm10haXfM_PAO_JxOHSi_d=4kl^w0zG->9)1RL~l4tDiRQ6MkZF-8_5%?Cl~5T z4LU?F+Vxm@E)-CY33Bni{;StyxZ=397MY>xNM|6f1S~Jar*mu6qdXh}DQ?UFH|X39 z&zdU>Nt5sg#KXi_IfA!nL9i$WnPmu?>!kZW33;CtC!+}mjJ*^l1RhR~;dY*wKTF;N zI~Hf2;BX`lD1<{UThNJPYygPl97KV9ea$|In6Q)Z*I+Ym76Q5%xJO!_h*sON#it|S zSr2ia>n$^M(+fnadGKj&9w!I67r;>=MG0xz$4`et%b_w_Dqg&R7q@o47{~X)Dk05p zMQhAE#iwwVXMlpp+Mxu|8vg2O9-bKS!uWtsK9@VVPhxqR>9^{~fj9g?fNf7ph^`kz z=Y{BcL3Cg5hPHgJST??2MizxbOQ^p+Jd2X}aq?OtEME++p9n$_BLUJF}Gir#*qndisLukfIb9vCJbz_HBFmJry_l?OR2*G3D7 zDTluT*+)Z!sEQ;QdjJLF`L%p*Z9+tuXFdj}5otab5OWfugyAx`*nl>#8rd}TJ`Z|N z!vgXUJnrLS=STCTJBgg!EbMf02>Q>FHbBqI`~VDbaV!ql;R{^(5=HY~Sd+QM3>@Kv z#T1*6fCuDyG9^n12LiH80yv_YLcL^TJ4FQBBLbtzu0l}VMc6*PTJ(kjQ=!0ID3GxD z0(s3$j$t5iK03@7^CL>BM@#z^yZ~MX`cbQAqQUy)14?CE<{$^hG8+s#YxgBW4K1LX z=i86h0Atv`T?L^4vVlgx4MYP_X{W5UelHrWOi~_-yu;^#{}9|^P;E>DETU*}nnTRc z5O52dM^F)srRG58pquhF`423it_n?S%eop;Ik8p9u2^)#xOdqg8lCwDKQo9$gp zG#>@#-3$Yw`78_=IQN77OyX`R`HE;c8uMu2cmr^}CFpp)Q=KgkA8ENIB0i1T+BnAAFkLSM{-dY8I{RJcGEkQE@g8cN*MU5h6$(O z#y~Vwa1Y+PM7&ctz#@pyN$`){2w6cDWlaO+D;#%)R4rcMROTZ4!J;Tr+lJJNvLhb~ z4Jy@qF09!MJV(=ILLaHzJ-`-HGrYpi11_LOpBC{x#vdmFlMyyxX@uG-dH4>8#&VGY zg}eh-o`I>JgFT!Ag`k15B)Ah`c11h^X*=y50S!IlfU}Q-%tVw(LB}!pu*iyJ`UY{a zbv%Dn8V^eh0WiHUotWt`eCML!LdpP#!K(I>I8j|4-h2j$Ud(JS4#cdUXvT*nBR=or zMihBZJ|rnWvAjqFHrQ#v$??RV8F-UhM@7plE>5iFsK!nd%F`T`Bm}q?3DWa0IqN8D z&=s;j8S#7ks&!N&=cBlQLY8V}Sg@U>E`lv%{nKT(z225#0PFB|q;jGgR@W<2T1S!5 zc)@lrxQVwvG7{La7w@w14hfm4!#h;Lcv2T05)Q4mB?yrIoOlGehA6ofbZCf?D+9oh zP-^S2v61+q6lKVXS|&<&xEQMg4ENC})>Y91WEx7XImCW2UD_S6OA$1SYNefH1G&8z zQ)|}LB9S8s#xpTc49EG7U<4qV`rBIvdk|2Lz#gtz`zPBOnQaav4j4oQ?Dsi{qfa<+ z1Rxl-14;x)AN#~E3goX)2AWWfEC53i3SmnSM*`NCk_i&lKFV^%HfVkd#I@}~e52pC zaOkuw!v8fh02^6^Xpli+5=lS^Nq`^ZGSJNrquE_c+fRPn?KWq;Cf%=MQw6wXW4OoI zhCI!NS_8)a4Ae+lO$HSk&L%$Az`l-e3N%USYYPP=go6fb)c|QlO9MCtKY1%?-Pt@F zIb?=tnU1#~W#KVC+`qo8VD$XZe;NvStu{E>(kfvNGb&oiH@f?vaj(Vt=@ zvI?YZ1~%nxC;BfU^MXzrq0?*GGGwhHa}B4FUD?c#F$@RPwg4sbf{y6!jQ~X2bTK4o ztwy3mgd5DJEchHTPM+tE))I?RfIJM`vr~PTGCd9@zAvkh9wP)l#w&Qz4rx|scGPV$ z=z-5rYOw>h&i5=bF$xBG=7}?WAvXxtd>(*WH!QhV6yB0$Bop?~3s1a8B0=36-qN`d z6_iiCBLSKOcLt;h_y@T)5~T37lMD^sML5|>22ZjhnHwbbw4SFerx;`!z@qHQ{Mwt+ z%17o6wn(!pcr+=GcoQ*o0b*pck=V?W-jwEU^!lRRUjzp_%LNtOEjFWLdbL1kqMeNL@St06nkGJ^MXq9FIT#}AYo%3DH55c9&|(&C zfg(V-g)-5hM7m*cXM9^Z4^4`0V6Y|Pr7gDXC<+(`A{G;6)-!g6Cu%TVnc;#qPdvy) zO%rMiGq8tK3J4HA5p+=G7d4ZSej13q$nvaR;}HxVycr7sasi~m*Ua+YNcY{aG=wR9 z*pc8~>^<$1A!xXFBVw1?6b?MVQ5t%VbK^Zb6k4BPCz4xp!=aVjy#qmEwV3(7oFD=5 zbGeAC^`RM0aGZ>##@ncnybBnQJ8X%GIcos)SV0!r&!&)~vnKN$oUD7MH4ZC$TM7+3 zZq5q`6&M506gtMlV+?KmA!)&wfyuHKvt`+{Z3P@rI%da0AaqJ}NlPW|oErP3>4|us zl@{vKH+lPEk>7r}k+Rm3r{Hi~alHUQ!hIv|8*$(G0%E({JQb~{uD16O1=gTB)B|}g z+WQ{mkv5nbiYkOM(F}KbRVv3Ivi-&$Y;;&qo*T2>!H>1qz=|f>r33OJzg^xR_Ds z*Y|j+{d?{EzE;~N;2W~I0k8wu!ZbvwmuPduca8x0ob*MrZ6=&o&v4^8$a@*81K3mC z<1z+t$v)RH=m=a?NwGDu&Nw2itv-}W$T+_58{Ncc!@lg_Km5DjW4wg<+D`zsw#!JC zYK8@8j)gaF&n zJTD`MNR`F~qUP~piWK<@#EX6>y`+r|lqXLC#e+QPw?j=r?e|&m6lZ%jl7qO{AvtuO zv(fh?GMft==Jzfd`^h^*irrewBlApnO}l?Pe;eD=llU@71D=ZtK@7Cz?J=>djM=ha zk6U4nWVgxak!2;kMxyx#d_4>ITdgkn;6-W;? zU~k1vm(C$a4JFoc^OPAva@3xLs=W;X3kewk<^eeo=?iV^0Cpm6PI%l`9{`3y-JeOy z2^#qvVg2Z4`8M>70s|XYA`bl6=u!f_LW!1)tppJdxhK=MC7j?mIo(!Zv#sZlEdfex z+mpr4qhw8aaO3Ck-EdxtovW~mVs1nkBJz;s>?Fe#d1R{l(TUn9&UO+?xWqgpkSMe$ z+t~?$(P#*U!mF>g{!af}G z9>nhyhl@~QIg$|dE`%6H1&R2L3=g?fuB)fCmI zrl}d~NOgibU7e-QQx~aA)M9m|TCP^9>(%?z?P}0I^lefPsxPQ7ArrzfEUsKzNnI##+KbGgK^55U=N+emGi6l{iEmjN`JwAUA~TDMSxh9}Y}M zbZ$wxkp>eN*j~YTsMR(K2g|OZTt7CGM&nr0gL60E46fgaAvAiUFIVb`lycy}DToBf z-h3w`Y>jTdM>oKQ-#++E$(Q1;WQk2xxys2hv-Cm>`;U zAT16Dk#U`%!jTGRn~)nw(2P>BK=)KZQOUA~&h#N@FVH}LltgnJiU54;chhMq2)Kn8 zGo!AAJ_!Z&`w(6enjpSibe{bR*Vh5X^b(vrZlf@ur*Jp6hrQcznvdl5B(I~LfpMCS zPMTzIA?l-P7nyLMcmyAqU_W-Fs2_&;sFr#L zGHC@YeX64_#Lp9)!|fB)pfMG6gOr!zTouKoM=zC4I`%6)I+cAVkY(v~lnu4hZxC>< z9XM^rOdu|fK*vi69pd-ELPQHxMRt&I42PsR><#XMZPKxlUP(K;1?EAV%Tfn3gtJvD zuc3I$i{C!jyOf(rp3#~BzjqLRuy0;n4gN6#^26z?*U&faw~xBP^CK{v+&Ay-ky7t%~^FeLu6QfD< zM(2)=`|(^q?n~|b*ti_~H+2^}{`%8zn@773c1VI$IvZtwLkBTE zj6#2sCoY>Gdkp&I;CT-9vB&Q2 String; + fn hardness() -> f32; + fn material() -> Material; +} + +pub struct Air; +impl Block for Air { + fn texture_name() -> String { + "block/air".to_string() + } + fn hardness() -> f32 { + 0.0 + } + fn material() -> Material { + Material::Air + } +} + +pub struct Stone; +impl Block for Stone { + fn texture_name() -> String { + "block/stone".to_string() + } + fn hardness() -> f32 { + 1.5 + } + fn material() -> Material { + Material::Solid + } +} + +pub struct Grass; +impl Block for Grass { + fn texture_name() -> String { + "block/grass".to_string() + } + fn hardness() -> f32 { + 0.6 + } + fn material() -> Material { + Material::Solid + } +} + +pub struct Dirt; +impl Block for Dirt { + fn texture_name() -> String { + "block/dirt".to_string() + } + fn hardness() -> f32 { + 0.5 + } + fn material() -> Material { + Material::Solid + } +} + +#[derive(Debug, Default, Clone, Copy)] +pub enum Material { + #[default] + Solid, + Glass, + Air, +} diff --git a/blockworld-client/block/mod.rs b/blockworld-client/block/mod.rs new file mode 100644 index 0000000..21eb239 --- /dev/null +++ b/blockworld-client/block/mod.rs @@ -0,0 +1,2 @@ +mod block; +pub use block::*; diff --git a/blockworld-client/game/block.rs b/blockworld-client/game/block.rs deleted file mode 100644 index 8c2e099..0000000 --- a/blockworld-client/game/block.rs +++ /dev/null @@ -1,51 +0,0 @@ -use crate::io::atlas_helper::UV; - -#[derive(Default, Debug, Clone, PartialEq, Eq, Hash)] -pub struct ResourceLocation { - namespace: String, - value: String, -} - -impl ResourceLocation { - pub fn new(id: &str) -> Self { - if let Some((a, b)) = id.split_once(':') { - Self { - namespace: a.to_string(), - value: b.to_string(), - } - } else { - Self { - namespace: "blockworld".to_string(), - value: id.to_string(), - } - } - } -} - -pub type BlockID = u32; -#[derive(Default, Clone, Copy, Debug)] -pub struct Block { - pub id: BlockID, -} - -/// Metadata for query from id -#[derive(Debug)] -pub struct BlockMeta { - pub name: ResourceLocation, - pub ty: BlockType, - /// Attention: - /// - 0: Up - /// - 1: Down - /// - 2: Left - /// - 3: Right - /// - 4: Front - /// - 5: Back - pub atlas_coord: [UV; 6], -} - -#[derive(Debug, Default, Clone, Copy)] -pub enum BlockType { - #[default] - Solid, - Glass, -} diff --git a/blockworld-client/game/chunk.rs b/blockworld-client/game/chunk.rs deleted file mode 100644 index 5c18c93..0000000 --- a/blockworld-client/game/chunk.rs +++ /dev/null @@ -1,157 +0,0 @@ -use glam::*; - -use crate::render::render_block::*; - -use super::block::Block; - -pub const CHUNK_SIZE: usize = 16; -pub const CHUNK_HEIGHT: usize = 256; -pub const CHUNK_BLOCK_NUM: usize = CHUNK_SIZE * CHUNK_SIZE * CHUNK_HEIGHT; - -/// from `net/minecraft/util/math/ChunkPos.java` -#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug)] -pub struct ChunkPos { - pub x: i32, - pub z: i32, -} - -impl ChunkPos { - pub fn new(x: i32, z: i32) -> Self { - Self { x, z } - } - - pub fn as_long(x: i32, z: i32) -> i64 { - //? From minecraft source code - return (x as i64 & 0xFFFFFFFFi64) | (z as i64 & 0xFFFFFFFFi64) << 32; - } - - pub fn hash_code(&self) -> i32 { - let i: i32 = 1664525 * self.x + 1013904223; - let j: i32 = 1664525 * (self.z ^ -559038737) + 1013904223; - i ^ j - } -} - -pub struct Chunk { - pub blocks: Box<[Block; CHUNK_HEIGHT * CHUNK_SIZE * CHUNK_SIZE]>, - pub pos: ChunkPos, -} - -impl Chunk { - pub fn new(chunk_x: i32, chunk_z: i32) -> Self { - let mut blocks = Box::new([Block::default(); CHUNK_BLOCK_NUM]); - for x in 0..CHUNK_SIZE as i32 { - for y in 0..3 { - for z in 0..CHUNK_SIZE as i32 { - blocks[Chunk::index(x, y, z)] = match y { - _ => Block { id: 1 }, - } - } - } - } - for y in 5..(5 + chunk_x) { - blocks[Chunk::index(7, y, 7)] = Block { id: 2 }; - } - for y in 5..(5 + chunk_z) { - blocks[Chunk::index(8, y * 2, 8)] = Block { id: 2 }; - blocks[Chunk::index(8, y * 2 + 1, 8)] = Block { id: 2 }; - } - Self { - blocks, - pos: ChunkPos::new(chunk_x, chunk_z), - } - } - - /// Reference: [https://minecraft.wiki/w/Chunk_format] - /// - /// Format: YZX - /// - /// From xyz to Index of the block array. - /// - /// Don't pass negative numbers into this function! - pub fn index(x: i32, y: i32, z: i32) -> usize { - (y * 16 * 16 + z * 16 + x) as usize - } - - /// Get the block at (x,y,z) with respect to the chunk-relative coord - pub fn block(&self, x: i32, y: i32, z: i32) -> Option { - if 0 <= x - && x <= (CHUNK_SIZE - 1) as i32 - && 0 <= y - && y <= (CHUNK_HEIGHT - 1) as i32 - && 0 <= z - && z <= (CHUNK_SIZE - 1) as i32 - { - Some(self.blocks[Chunk::index(x, y, z)]) - } else { - None - } - } - - /// Detect neighbors for face cull - /// Output format in [AxisDirectionBinary] - pub fn detect_block_neighbors(&self, x: i32, y: i32, z: i32) -> AxisDirectionBinary { - let mut res = 0; - // if x == 0 { - // return XN_B; - // } - // if x == CHUNK_SIZE - 1 { - // return XP_B; - // } - // if y == 0 { - // return YN_B; - // } - // if y == CHUNK_HEIGHT - 1 { - // return YP_B; - // } - // if z == 0 { - // return ZN_B; - // } - // if z == CHUNK_SIZE - 1 { - // return ZP_B; - // } - - // Zero = Air - if self.block(x + 1, y, z).unwrap_or_default().id != 0 { - res += XP_B; - } - if self.block(x - 1, y, z).unwrap_or_default().id != 0 { - res += XN_B; - } - if self.block(x, y + 1, z).unwrap_or_default().id != 0 { - res += YP_B; - } - if self.block(x, y - 1, z).unwrap_or_default().id != 0 { - res += YN_B; - } - if self.block(x, y, z + 1).unwrap_or_default().id != 0 { - res += ZP_B; - } - if self.block(x, y, z - 1).unwrap_or_default().id != 0 { - res += ZN_B; - } - return res; - } -} - -impl Default for Chunk { - // ! THIS IS NOT IDEAL - // ! JUST FOR TEST - // ! REMEMBER TO DELETE THOSE CODE - fn default() -> Self { - let mut blocks = Box::new([Block::default(); CHUNK_BLOCK_NUM]); - for x in 0..CHUNK_SIZE as i32 { - for y in 0..3 { - for z in 0..CHUNK_SIZE as i32 { - blocks[Chunk::index(x, y, z)] = match y { - _ => Block { id: 1 }, - } - } - } - } - Self { - blocks, - pos: ChunkPos::new(0, 0), - } - } -} diff --git a/blockworld-client/game/mod.rs b/blockworld-client/game/mod.rs index c5bdf57..400cdda 100644 --- a/blockworld-client/game/mod.rs +++ b/blockworld-client/game/mod.rs @@ -1,15 +1,8 @@ +use self::player_state::PlayerState; +use crate::io::input_helper::InputState; use std::rc::Rc; - -use chunk_provider::ClientChunkProvider; use world::ClientWorld; -use crate::io::input_helper::InputState; - -use self::player_state::PlayerState; - -pub mod block; -pub mod chunk; -pub mod chunk_provider; pub mod console_instr; pub mod player_state; pub mod register; @@ -21,17 +14,6 @@ pub struct Game { pub client_world: Rc, pub chunk_provider: ClientChunkProvider, } -impl Default for Game { - fn default() -> Self { - let client_world = Rc::new(ClientWorld); - Self { - player_state: Default::default(), - client_world: client_world.clone(), - // ! TEMP - chunk_provider: ClientChunkProvider::new(client_world.clone(), 16), - } - } -} impl Game { /// update all entity states in game (except for camera) diff --git a/blockworld-client/game/register.rs b/blockworld-client/game/register.rs index 250fffc..4f3062d 100644 --- a/blockworld-client/game/register.rs +++ b/blockworld-client/game/register.rs @@ -1,13 +1,10 @@ -use std::collections::HashMap; - +use crate::block::*; use anyhow::Error; - use block::{BlockID, BlockMeta}; - -use super::block; +use std::collections::HashMap; #[derive(Debug)] -pub struct RegisterTable { +pub struct BlockRegisterTable { table_block: HashMap, } diff --git a/blockworld-client/io/mod.rs b/blockworld-client/io/mod.rs index 77817cb..86c1c60 100644 --- a/blockworld-client/io/mod.rs +++ b/blockworld-client/io/mod.rs @@ -1,2 +1,5 @@ pub mod atlas_helper; + pub mod input_helper; +pub mod nbt; + diff --git a/blockworld-client/io/nbt.rs b/blockworld-client/io/nbt.rs new file mode 100644 index 0000000..6519a99 --- /dev/null +++ b/blockworld-client/io/nbt.rs @@ -0,0 +1,2 @@ +use std::io::Cursor; +struct a; diff --git a/blockworld-client/main.rs b/blockworld-client/main.rs index 276aed5..6aa04ba 100644 --- a/blockworld-client/main.rs +++ b/blockworld-client/main.rs @@ -1,25 +1,41 @@ -#![feature(int_roundings)] +use std::sync::OnceLock; -pub mod debug; -pub mod game; -pub mod io; -pub mod render; - -use anyhow::*; use clap::Parser; +use renderer::window_init::run; + +mod block; +mod debug; +mod game; +mod io; +mod network; +mod renderer; +mod resources; +mod tileentity; +mod world; + +/// Simple program to greet a person +#[derive(Parser, Debug)] +#[command(version, about, long_about = None)] +struct Args { + #[arg(short, long, default_value_t = 1280)] + pub width: u32, + + #[arg(short, long, default_value_t = 720)] + pub height: u32, + + #[arg(short, long)] + pub full_screen: bool, +} + +static cli_args: OnceLock = OnceLock::new(); -#[derive(Parser, Clone, Default)] -#[command(author, version, about)] -pub struct BootArgs { - #[arg(long, default_value = "600")] - height: u32, - #[arg(long, default_value = "800")] - width: u32, - #[arg(long, default_value = "false")] - full_screen: bool, +pub fn get_cli_args() -> &'static Args { + cli_args.get_or_init(|| { + let args = Args::parse(); + args + }) } -fn main() -> Result<()> { - pollster::block_on(render::window_init::run())?; - Ok(()) +fn main() { + pollster::block_on(run()); } diff --git a/blockworld-client/util/mod.rs b/blockworld-client/network/mod.rs similarity index 100% rename from blockworld-client/util/mod.rs rename to blockworld-client/network/mod.rs diff --git a/blockworld-client/render/game_loop.rs b/blockworld-client/render/game_loop.rs deleted file mode 100644 index f178b3d..0000000 --- a/blockworld-client/render/game_loop.rs +++ /dev/null @@ -1,280 +0,0 @@ -use std::fmt::Debug; -use std::marker::PhantomData; -use std::thread::Thread; -use std::{io::BufRead, time::Instant}; - -use anyhow::*; -use glam::*; -use wgpu::{include_wgsl, util::DeviceExt}; -use wgpu_text::{ - glyph_brush::{ab_glyph::FontRef, Layout, OwnedSection, OwnedText, Section, Text}, - TextBrush, -}; -use winit::{ - dpi::PhysicalSize, - event_loop::EventLoop, - window::{Fullscreen, Window}, -}; - -use crate::{ - game::{ - block::{BlockMeta, BlockType, ResourceLocation}, - chunk::Chunk, - console_instr::exec_instr_from_string, - player_state::PlayerState, - register::RegisterTable, - settings::Settings, - Game, - }, - io::{atlas_helper::AtlasMeta, input_helper::InputState}, - BootArgs, -}; - -use super::camera::{Camera, MatrixData}; -use super::render_array::RenderArray; -use super::render_system::RenderSystem; -use super::texture::Texture; -use super::{ - pipeline::{RegularPipeline, WireframePipeline}, - render_chunk::RenderChunk, -}; -use super::{uniform::*, window_init}; - -/// state contains all things the game needs -pub struct State<'state> { - pub window: Window, - - // IO - pub input_state: InputState, - - // The Game - pub game: Game, - pub fps: f32, - pub dt_timer: Instant, - pub global_timer: Instant, - - // Settings - pub settings: Settings, - - pub register_table: RegisterTable, - - pub render_system: RenderSystem<'state>, - - // Debug - pub debug_mode: bool, -} - -impl<'a> State<'a> { - pub async fn new(event_loop: &EventLoop<()>, boot_args: &BootArgs) -> Result> { - let window = window_init(); - let _player_state: PlayerState = Default::default(); - - // Camera thingy - let camera = Camera::new(size.width as f32 / size.height as f32); - // Texture & its bind group - - // ------------------- - // | Game Initialize | - // ------------------- - - let (image_w, image_h) = image::io::Reader::open("../assets/atlas.png") - .unwrap() - .into_dimensions()?; - - let atlas_meta = AtlasMeta { - tile_w: 16, - tile_h: 16, - image_w, - image_h, - }; - let mut register_table = RegisterTable::new(); - register_table.register_block( - 1, - BlockMeta { - name: ResourceLocation::new("test_a"), - ty: BlockType::Solid, - atlas_coord: [atlas_meta.get(6, 19)?; 6], - }, - )?; - register_table.register_block( - 2, - BlockMeta { - name: ResourceLocation::new("test_b"), - ty: BlockType::Solid, - atlas_coord: [atlas_meta.get(16, 6)?; 6], - }, - )?; - - let mut game = Game::default(); - let input_state = InputState::default(); - - let settings = Settings { - font: include_bytes!("../assets/fonts/Minecraft.otf"), - font_size: 18.0, - }; - - Ok(Self { - window, - - camera, - - settings, - fps: 0.0, - dt_timer: Instant::now(), - global_timer: Instant::now(), - - input_state, - game, - - register_table, - debug_mode: false, - }) - } - - pub fn update(&mut self) { - // Time between this and the previous frame - let delta_time = self.dt_timer.elapsed(); - // Set the timer to 0 - self.dt_timer = Instant::now(); - - // Game Update - self.game.update(&self.input_state); - - // FPS Text Update - // self.fps_text_section.text[0] = OwnedText::new( - // format!( - // "delta time: {}\nfps: {}", - // delta_time.as_secs_f32(), - // 1.0 / delta_time.as_secs_f32() - // ) - // .to_string(), - // ) - // .with_z(0.0) - // .with_scale(25.0) - // .with_color([0.0, 0.0, 0.0, 1.0]); - - // self.window.set_title( - // format!( - // "Blockworld Dev [fps: {:.0}]", - // 1.0 / delta_time.as_secs_f32() - // ) - // .as_str(), - // ); - - // Camera Update - - self.camera.update(&self.game.player_state); - - self.matrix_uniform.uniform.update_matrix(&self.camera); - self.queue.write_buffer( - &self.matrix_uniform.buffer, - 0, - bytemuck::cast_slice(&[*self.matrix_uniform.uniform]), - ); - } - - pub fn render(&mut self) -> Result<()> { - let output = self.surface.get_current_texture()?; - - let view = output - .texture - .create_view(&wgpu::TextureViewDescriptor::default()); - - let mut encoder = self - .device - .create_command_encoder(&wgpu::CommandEncoderDescriptor { - label: Some("Blockworld Render Encoder"), - }); - - self.brush - .queue(&self.device, &self.queue, vec![&self.fps_text_section]) - .unwrap(); - { - let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: Some("Blockworld Render Pass"), - color_attachments: &[Some(wgpu::RenderPassColorAttachment { - view: &view, - resolve_target: None, - ops: wgpu::Operations { - load: wgpu::LoadOp::Clear(wgpu::Color { - r: 0.0, - g: 1.0, - b: 239.0 / 255.0, - a: 1.0, - }), - store: wgpu::StoreOp::Store, - }, - })], - depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment { - view: &self.depth_texture.view, - depth_ops: Some(wgpu::Operations { - load: wgpu::LoadOp::Clear(1.0), - store: wgpu::StoreOp::Store, - }), - stencil_ops: None, - }), - timestamp_writes: None, - occlusion_query_set: None, - }); - - // check debug mode - if self.debug_mode { - // render with wireframe - render_pass.set_pipeline(&self.wireframe_pipeline.pipeline); - } else { - // render with texture - render_pass.set_pipeline(&self.main_pipeline.pipeline); - } - - render_pass.set_bind_group(0, &self.texture_bind_group, &[]); - render_pass.set_bind_group(1, &self.matrix_uniform.bind_group, &[]); - - // draw all chunks - for chunk in self.render_array.chunks() { - render_pass.set_vertex_buffer(0, chunk.vertex_buffer.slice(..)); - render_pass.draw(0..chunk.vertex_count, 0..1); - } - // self.brush.draw(&mut render_pass); - } - - self.render_system - .queue - .submit(std::iter::once(encoder.finish())); - output.present(); - - std::result::Result::Ok(()) - } - - /// read a line from cmd synchronously. It should't be run on main displaying thread - pub async fn try_exec_single_instr_from_console(&mut self) -> Result<()> { - let stdin = std::io::stdin(); - let mut handle = stdin.lock(); - let mut console_string = String::new(); - handle.read_line(&mut console_string)?; - exec_instr_from_string(console_string, self).await?; - Ok(()) - } -} - -impl<'a> Debug for State<'a> { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - todo!() - } -} - -fn init_window(boot_args: &BootArgs, event_loop: EventLoop<()>) -> Result { - // Create the window - let mut window_attrs = Window::default_attributes().with_title("Blockworld Indev"); - // set screen size based on boot_args - if boot_args.full_screen { - window_attrs = window_attrs.with_fullscreen(Some(Fullscreen::Borderless(None))); - } else { - window_attrs = - window_attrs.with_inner_size(PhysicalSize::new(boot_args.width, boot_args.height)) - } - let window = event_loop.create_window(window_attrs)?; - window.set_cursor_grab(winit::window::CursorGrabMode::Confined)?; - window.set_cursor_visible(false); - - Ok(window) -} diff --git a/blockworld-client/render/render_block.rs b/blockworld-client/render/render_block.rs deleted file mode 100644 index 4faea88..0000000 --- a/blockworld-client/render/render_block.rs +++ /dev/null @@ -1,154 +0,0 @@ -use glam::*; - -use crate::io::atlas_helper::AtlasCoordinate; - -use super::vertex::Vertex; - -/// Which axis -pub enum Axis { - X, - Y, - Z, -} - -/// XYZ+ or XYZ- -pub enum Sign { - Pos, - Neg, -} - -/// A enum which indicates the direction of a face of a block. -pub struct AxisDirection { - axis: Axis, - sign: Sign, -} - -pub const XP: AxisDirection = AxisDirection { - axis: Axis::X, - sign: Sign::Pos, -}; -pub const YP: AxisDirection = AxisDirection { - axis: Axis::Y, - sign: Sign::Pos, -}; -pub const ZP: AxisDirection = AxisDirection { - axis: Axis::Z, - sign: Sign::Pos, -}; -pub const XN: AxisDirection = AxisDirection { - axis: Axis::X, - sign: Sign::Neg, -}; -pub const YN: AxisDirection = AxisDirection { - axis: Axis::Y, - sign: Sign::Neg, -}; -pub const ZN: AxisDirection = AxisDirection { - axis: Axis::Z, - sign: Sign::Neg, -}; - -/// Bitflag for face cull -/// should render "0" faces, -/// and skip "1" faces, -pub type AxisDirectionBinary = u32; - -pub const XP_B: u32 = 0b000001; -pub const YP_B: u32 = 0b000010; -pub const ZP_B: u32 = 0b000100; -pub const XN_B: u32 = 0b001000; -pub const YN_B: u32 = 0b010000; -pub const ZN_B: u32 = 0b100000; - -impl AxisDirection { - /// Generate direction vector. - fn _direction_vector(&self) -> Vec3 { - let v = match self.axis { - Axis::X => Vec3::X, - Axis::Y => Vec3::Y, - Axis::Z => Vec3::Z, - }; - match self.sign { - Sign::Pos => v, - Sign::Neg => -v, - } - } - - /// Get the four vectors prependicular to self - /// and along the crossline of the face in order to move vertices. - /// return order: - /// 2 1 - /// o - /// 3 4 - #[rustfmt::skip] - fn get_four_vtx(&self) -> [Vec3; 4] { - let a = vec3( 0.5, 0.5,-0.5); - let b = vec3(-0.5, 0.5,-0.5); - let c = vec3(-0.5, 0.5, 0.5); - let d = vec3( 0.5, 0.5, 0.5); - let e = vec3( 0.5,-0.5,-0.5); - let f = vec3(-0.5,-0.5,-0.5); - let g = vec3(-0.5,-0.5, 0.5); - let h = vec3( 0.5,-0.5, 0.5); - match self.sign { - Sign::Pos => match self.axis { - Axis::X => [a,d,h,e], - Axis::Y => [a,b,c,d], - Axis::Z => [d,c,g,h], - }, - Sign::Neg => match self.axis { - Axis::X => [c,b,f,g], - Axis::Y => [h,g,f,e], - Axis::Z => [b,a,e,f], - }, - } - } -} - -/// Generate and add a face's mesh into some vertex buffer -pub fn push_face_mesh( - bukkit: &mut Vec, - direction: AxisDirection, - coord: Vec3, - uv: AtlasCoordinate, -) { - // Center coord - - let c = coord; - - let mut n = direction.get_four_vtx(); - n.iter_mut().for_each(|x| *x = *x + c); - - // b - a d - // | / / | - // c e - f - let aa = uv.aa(); - let bb = uv.bb(); - let mut res = vec![ - Vertex { - position: n[0].to_array(), - uv: [bb.x, aa.y], - }, - Vertex { - position: n[1].to_array(), - uv: [aa.x, aa.y], - }, - Vertex { - position: n[2].to_array(), - uv: [aa.x, bb.y], - }, - Vertex { - position: n[0].to_array(), - uv: [bb.x, aa.y], - }, - Vertex { - position: n[2].to_array(), - uv: [aa.x, bb.y], - }, - Vertex { - position: n[3].to_array(), - uv: [bb.x, bb.y], - }, - ]; - bukkit.append(&mut res); -} diff --git a/blockworld-client/render/render_chunk.rs b/blockworld-client/render/render_chunk.rs deleted file mode 100644 index 4b31717..0000000 --- a/blockworld-client/render/render_chunk.rs +++ /dev/null @@ -1,103 +0,0 @@ -use super::render_block::*; -use glam::*; -use log::info; -use wgpu::{util::DeviceExt, Device}; - -use crate::game::{chunk::*, register::RegisterTable}; - -use super::vertex::Vertex; - -#[derive(Debug)] -pub struct RenderChunk { - pub vertex_count: u32, - pub vertex_buffer: wgpu::Buffer, -} - -impl RenderChunk { - pub fn new(device: &Device, chunk: &Chunk, register_table: &RegisterTable) -> Self { - info!("New renderchunk in {:?}", chunk.pos); - let mut vertices: Vec = Vec::new(); - for x in 0..CHUNK_SIZE as i32 { - for y in 0..CHUNK_HEIGHT as i32 { - for z in 0..CHUNK_SIZE as i32 { - let (abs_x, abs_z) = ( - (chunk.pos.x * CHUNK_SIZE as i32 + x as i32) as f32, - (chunk.pos.z * CHUNK_SIZE as i32 + z as i32) as f32, - ); - let block_id = chunk.blocks[Chunk::index(x, y, z)].id; - // info!("Block: {}", block_id); - // Only render queried blocks so we blocks like air won't be rendered. - - if let Some(meta) = register_table.query_block(block_id) { - let neighbors = chunk.detect_block_neighbors(x, y, z); - // Exist block in that way - if (neighbors & XN_B) == 0 { - push_face_mesh( - &mut vertices, - XN, - vec3(abs_x, y as f32, abs_z), - meta.atlas_coord[0], - ); - } - if (neighbors & XP_B) == 0 { - push_face_mesh( - &mut vertices, - XP, - vec3(abs_x, y as f32, abs_z), - meta.atlas_coord[1], - ); - } - if (neighbors & YN_B) == 0 { - push_face_mesh( - &mut vertices, - YN, - vec3(abs_x, y as f32, abs_z), - meta.atlas_coord[2], - ); - } - if (neighbors & YP_B) == 0 { - push_face_mesh( - &mut vertices, - YP, - vec3(abs_x, y as f32, abs_z), - meta.atlas_coord[3], - ); - } - if (neighbors & ZN_B) == 0 { - push_face_mesh( - &mut vertices, - ZN, - vec3(abs_x, y as f32, abs_z), - meta.atlas_coord[4], - ); - } - if (neighbors & ZP_B) == 0 { - push_face_mesh( - &mut vertices, - ZP, - vec3(abs_x, y as f32, abs_z), - meta.atlas_coord[5], - ); - } - } - } - } - } - - let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Chunk Vertex Buffer"), - contents: bytemuck::cast_slice(&vertices), - usage: wgpu::BufferUsages::VERTEX, - }); - - RenderChunk { - vertex_count: vertices.len() as u32, - vertex_buffer, - } - } - - // Preserved - pub fn update_mesh(&mut self) { - let _ = 1; - } -} diff --git a/blockworld-client/render/render_system.rs b/blockworld-client/render/render_system.rs deleted file mode 100644 index deb8908..0000000 --- a/blockworld-client/render/render_system.rs +++ /dev/null @@ -1,240 +0,0 @@ -use anyhow::{Context, Result}; -use wgpu::include_wgsl; -use wgpu_text::{ - glyph_brush::{ab_glyph::FontRef, OwnedSection}, - TextBrush, -}; -use winit::window::Window; - -use super::{ - camera::{Camera, MatrixData}, - pipeline::{RegularPipeline, WireframePipeline}, - render_array::RenderArray, - texture::Texture, - uniform::Uniform, -}; - -pub struct RenderSystem<'a> { - pub surface: wgpu::Surface<'a>, - pub device: wgpu::Device, - pub queue: wgpu::Queue, - pub surface_config: wgpu::SurfaceConfiguration, - pub size: winit::dpi::PhysicalSize, - - pub main_pipeline: RegularPipeline, - pub wireframe_pipeline: WireframePipeline, - - pub render_array: RenderArray, - - pub texture: Texture, - pub texture_bind_group: wgpu::BindGroup, - - pub depth_texture: Texture, - // UI - // pub fps_text_section: OwnedSection, - // pub brush: TextBrush>, - pub camera: Camera, - pub matrix_uniform: Uniform, -} - -impl RenderSystem<'_> { - pub async fn new(window: Window) -> Result { - // Instance is the way to create surface and adapter. - let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { - backends: wgpu::Backends::PRIMARY, - ..Default::default() - }); - - let size = window.inner_size(); - - let camera = Camera::new(); - - // Generate & Configure the surface - let surface = unsafe { instance.create_surface(&*(&window as *const Window))? }; - - // Adapter is used to create device and queue. - let adapter = instance - .request_adapter(&wgpu::RequestAdapterOptions { - power_preference: wgpu::PowerPreference::default(), - compatible_surface: Some(&surface), - force_fallback_adapter: false, - }) - .await - .with_context(|| format!("adapter created error for problem with wgpu"))?; - - // Device is the abstraction of the GPU. Queue is the command queue to send to GPU. - let (device, queue) = adapter - .request_device( - &wgpu::DeviceDescriptor { - label: None, - required_features: wgpu::Features::POLYGON_MODE_LINE, - required_limits: wgpu::Limits::default(), - }, - None, - ) - .await?; - - let surface_caps = surface.get_capabilities(&adapter); - let surface_format = surface_caps - .formats - .iter() - .copied() - .filter(|f| f.is_srgb()) - .next() - .unwrap_or(surface_caps.formats[0]); - - let config = wgpu::SurfaceConfiguration { - usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface_format, - width: size.width, - height: size.height, - present_mode: surface_caps.present_modes[0], - alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![], - desired_maximum_frame_latency: 2, - }; - - surface.configure(&device, &config); - - let texture = crate::render::texture::Texture::from_bytes( - &device, - &queue, - include_bytes!("../assets/atlas.png"), - "Block Texture", - )?; - - let texture_bind_group_layout = - device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { - entries: &[ - wgpu::BindGroupLayoutEntry { - binding: 20, - visibility: wgpu::ShaderStages::FRAGMENT, - ty: wgpu::BindingType::Texture { - multisampled: false, - view_dimension: wgpu::TextureViewDimension::D2, - sample_type: wgpu::TextureSampleType::Float { filterable: true }, - }, - count: None, - }, - wgpu::BindGroupLayoutEntry { - binding: 21, - visibility: wgpu::ShaderStages::FRAGMENT, - // This should match the filterable field of the - // corresponding Texture entry above. - ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering), - count: None, - }, - ], - label: Some("texture_bind_group_layout"), - }); - - let texture_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor { - layout: &texture_bind_group_layout, - entries: &[ - wgpu::BindGroupEntry { - binding: 20, - resource: wgpu::BindingResource::TextureView(&texture.view), - }, - wgpu::BindGroupEntry { - binding: 21, - resource: wgpu::BindingResource::Sampler(&texture.sampler), - }, - ], - label: Some("diffuse_bind_group"), - }); - - let depth_texture = Texture::create_depth_texture(&device, &config); - // \------------------- - - let shader = device.create_shader_module(include_wgsl!("shaders/default_shader.wgsl")); - let wireframe_shader = - device.create_shader_module(include_wgsl!("shaders/debug_shader.wgsl")); - - let mut matrix_uniform = Uniform::new( - &device, - Box::new(MatrixData::new()), - 30, - Some("Matrix Uniform"), - ); - - let main_pipeline = RegularPipeline::new( - &device, - &[&texture_bind_group_layout, &matrix_uniform.layout], - &shader, - &config, - ); - - let wireframe_pipeline = WireframePipeline::new( - &device, - &[&texture_bind_group_layout, &matrix_uniform.layout], - &wireframe_shader, - &config, - ); - - // let brush = wgpu_text::BrushBuilder::using_font_bytes(settings.font) - // .unwrap() - // .with_depth_stencil(Some(wgpu::DepthStencilState { - // format: wgpu::TextureFormat::Depth32Float, - // depth_write_enabled: false, - // depth_compare: wgpu::CompareFunction::LessEqual, - // stencil: wgpu::StencilState::default(), - // bias: wgpu::DepthBiasState::default(), - // })) - // .build(&device, config.width, config.height, config.format); - - // let fps_text_section = Section::default() - // .add_text( - // Text::new("Hello World Test AAAAAAAAAAAAA") - // .with_color([1.0, 1.0, 1.0, 1.0]) - // .with_scale(25.0), - // ) - // .with_layout(Layout::default().v_align(wgpu_text::glyph_brush::VerticalAlign::Center)) - // .with_screen_position((50.0, config.height as f32 * 0.5)) - // .to_owned(); - - let render_array = RenderArray::new(&mut game.chunk_provider, &device, ®ister_table); - - Ok(RenderSystem { - surface, - device, - queue, - surface_config: config, - size, - main_pipeline, - wireframe_pipeline, - render_array, - texture, - texture_bind_group, - depth_texture, - // fps_text_section, - // brush, - }) - } - - pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { - if new_size.width > 0 && new_size.height > 0 { - self.camera - .update_aspect_ratio(new_size.width as f32 / new_size.height as f32); - - self.brush - .resize_view(new_size.width as f32, new_size.height as f32, &self.queue); - self.size = new_size; - self.config.width = new_size.width; - self.config.height = new_size.height; - - self.surface.configure(&self.device, &self.config); - self.depth_texture = Texture::create_depth_texture(&self.device, &self.config); - } - } - - pub fn update(&mut self) { - self.camera.update(&self.game.player_state); - - self.matrix_uniform.uniform.update_matrix(&self.camera); - self.queue.write_buffer( - &self.matrix_uniform.buffer, - 0, - bytemuck::cast_slice(&[*self.matrix_uniform.uniform]), - ); - } -} diff --git a/blockworld-client/renderer/block/mod.rs b/blockworld-client/renderer/block/mod.rs new file mode 100644 index 0000000..7efa728 --- /dev/null +++ b/blockworld-client/renderer/block/mod.rs @@ -0,0 +1,107 @@ +//! Helper methods and structures for working with cubes. +use super::vertex::Vertex; +use crate::io::atlas_helper::UV; +use glam::*; + +#[repr(u8)] +#[derive(Clone, Copy)] +enum BlockFaceDirection { + /// X+ (east) + XP = 0b000001, + /// Y+ (up) + YP = 0b000010, + /// Z+ (south) + ZP = 0b000100, + /// X- (west) + XN = 0b001000, + /// Y- (down) + YN = 0b010000, + /// Z- (north) + ZN = 0b100000, +} + +/// Cube vertices. + +impl BlockFaceDirection { + #[rustfmt::skip] + pub const VERTICES: &'static [Vec3; 8] = &[ + vec3( 0.5, 0.5,-0.5), // 0 + vec3(-0.5, 0.5,-0.5), // 1 + vec3(-0.5, 0.5, 0.5), // 2 + vec3( 0.5, 0.5, 0.5), // 3 + vec3( 0.5,-0.5,-0.5), // 4 + vec3(-0.5,-0.5,-0.5), // 5 + vec3(-0.5,-0.5, 0.5), // 6 + vec3( 0.5,-0.5, 0.5), // 7 + ]; + + /// + /// ```ignore + /// + /// + /// 1--------0 + /// / Y+ / | + /// / / | + /// 2-------3 | --> X+ + /// | | 4 + /// | Z+ | / + /// | | / + /// 6-------7 + /// ``` + /// + pub const QUADS: &'static [[usize; 4]; 6] = &[ + [0, 3, 7, 4], // X+ + [0, 1, 2, 3], // Y+ + [3, 2, 6, 7], // Z+ + [2, 1, 5, 6], // X- + [7, 6, 5, 4], // Y- + [1, 0, 4, 5], // Z- + ]; + + /// Generate direction vector. + fn direction_vector(&self) -> Vec3 { + match self { + BlockFaceDirection::XP => Vec3::X, + BlockFaceDirection::YP => Vec3::Y, + BlockFaceDirection::ZP => Vec3::Z, + BlockFaceDirection::XN => -Vec3::X, + BlockFaceDirection::YN => -Vec3::Y, + BlockFaceDirection::ZN => -Vec3::Z, + } + } + + /// Get the four vectors prependicular to self + /// and along the crossline of the face in order to move vertices. + /// return order: + /// ```ignore + /// 2 <-- 1 + /// | + /// v + /// 3 --> 4 + /// ``` + /// - bias: center of the face. + fn to_vertices(self, bias: Vec3) -> [Vec3; 4] { + // ilog means 000001 -> 0 + // 000010 -> 1 + // 000100 -> 2 + // etc. + + Self::QUADS[(self as u8).ilog2() as usize] + .map(|i| Self::VERTICES[i]) + .map(|v| bias + v) + } + + pub fn to_face_mesh(self, coord: Vec3, uv: UV) -> [Vertex; 6] { + let aa = uv.aa(); + let bb = uv.bb(); + let vecs = self.to_vertices(coord); + [ + Vertex::new(vecs[0], vec2(bb.x, aa.y)), + Vertex::new(vecs[1], vec2(aa.x, aa.y)), + Vertex::new(vecs[2], vec2(aa.x, bb.y)), + Vertex::new(vecs[0], vec2(bb.x, aa.y)), + Vertex::new(vecs[2], vec2(aa.x, bb.y)), + Vertex::new(vecs[3], vec2(bb.x, bb.y)), + ] + } +} diff --git a/blockworld-client/render/camera.rs b/blockworld-client/renderer/camera.rs similarity index 81% rename from blockworld-client/render/camera.rs rename to blockworld-client/renderer/camera.rs index 080682e..b06bcd6 100644 --- a/blockworld-client/render/camera.rs +++ b/blockworld-client/renderer/camera.rs @@ -96,24 +96,3 @@ impl Camera { self.position += dir; } } - -#[repr(C)] -// This is so we can store this in a buffer -#[derive(Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] -pub struct MatrixData { - // We can't use cgmath with bytemuck directly, so we'll have - // to convert the Matrix4 into a 4x4 f32 array - matrix: [[f32; 4]; 4], -} - -impl MatrixData { - pub fn new() -> Self { - Self { - matrix: Mat4::IDENTITY.to_cols_array_2d(), - } - } - - pub fn update_matrix(&mut self, camera: &Camera) { - self.matrix = camera.build_mvp().to_cols_array_2d(); - } -} diff --git a/blockworld-client/render/render_array.rs b/blockworld-client/renderer/chunk/render_array.rs similarity index 100% rename from blockworld-client/render/render_array.rs rename to blockworld-client/renderer/chunk/render_array.rs diff --git a/blockworld-client/renderer/chunk/render_chunk.rs b/blockworld-client/renderer/chunk/render_chunk.rs new file mode 100644 index 0000000..8ea83ce --- /dev/null +++ b/blockworld-client/renderer/chunk/render_chunk.rs @@ -0,0 +1,52 @@ +use super::render_block::*; +use glam::*; +use log::info; +use wgpu::{util::DeviceExt, Device}; + +use crate::game::{chunk::*, register::RegisterTable}; + +use super::vertex::Vertex; + +#[derive(Debug)] +pub struct RenderChunk { + pub vertex_count: u32, + pub vertex_buffer: wgpu::Buffer, +} + +impl RenderChunk { + pub fn new(device: &Device, chunk: &Chunk, register_table: &RegisterTable) -> Self { + info!("New renderchunk in {:?}", chunk.pos); + + let mut vertices: Vec = Vec::new(); + + for x in 0..CHUNK_SIZE as i32 { + for y in 0..CHUNK_HEIGHT as i32 { + for z in 0..CHUNK_SIZE as i32 { + let (abs_x, abs_z) = ( + (chunk.pos.x * CHUNK_SIZE as i32 + x as i32) as f32, + (chunk.pos.z * CHUNK_SIZE as i32 + z as i32) as f32, + ); + let block_id = chunk.blocks[Chunk::index(x, y, z)].id; + // info!("Block: {}", block_id); + // Only render queried blocks so we blocks like air won't be rendered. + } + } + } + + let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { + label: Some("Chunk Vertex Buffer"), + contents: bytemuck::cast_slice(&vertices), + usage: wgpu::BufferUsages::VERTEX, + }); + + RenderChunk { + vertex_count: vertices.len() as u32, + vertex_buffer, + } + } + + // Preserved + pub fn update_mesh(&mut self) { + let _ = 1; + } +} diff --git a/blockworld-client/render/utils.rs b/blockworld-client/renderer/entity/mod.rs similarity index 100% rename from blockworld-client/render/utils.rs rename to blockworld-client/renderer/entity/mod.rs diff --git a/blockworld-client/renderer/gui/mod.rs b/blockworld-client/renderer/gui/mod.rs new file mode 100644 index 0000000..e69de29 diff --git a/blockworld-client/render/mod.rs b/blockworld-client/renderer/mod.rs similarity index 74% rename from blockworld-client/render/mod.rs rename to blockworld-client/renderer/mod.rs index ae27716..da66d7e 100644 --- a/blockworld-client/render/mod.rs +++ b/blockworld-client/renderer/mod.rs @@ -1,12 +1,13 @@ +pub mod block; pub mod camera; -pub mod draw; +pub mod entity; +pub mod gui; pub mod pipeline; pub mod render_array; -pub mod render_block; pub mod render_chunk; pub mod texture; pub mod uniform; pub mod utils; pub mod vertex; -pub mod window_init; +pub mod wgpu; pub mod world_renderer; diff --git a/blockworld-client/render/pipeline.rs b/blockworld-client/renderer/pipeline.rs similarity index 100% rename from blockworld-client/render/pipeline.rs rename to blockworld-client/renderer/pipeline.rs diff --git a/blockworld-client/render/shaders/debug_shader.wgsl b/blockworld-client/renderer/shaders/debug_shader.wgsl similarity index 100% rename from blockworld-client/render/shaders/debug_shader.wgsl rename to blockworld-client/renderer/shaders/debug_shader.wgsl diff --git a/blockworld-client/render/shaders/default_shader.wgsl b/blockworld-client/renderer/shaders/default_shader.wgsl similarity index 100% rename from blockworld-client/render/shaders/default_shader.wgsl rename to blockworld-client/renderer/shaders/default_shader.wgsl diff --git a/blockworld-client/render/texture.rs b/blockworld-client/renderer/texture.rs similarity index 97% rename from blockworld-client/render/texture.rs rename to blockworld-client/renderer/texture.rs index 36148fa..51dfd73 100644 --- a/blockworld-client/render/texture.rs +++ b/blockworld-client/renderer/texture.rs @@ -104,7 +104,7 @@ impl Texture { let view = texture.create_view(&wgpu::TextureViewDescriptor::default()); - // Sampler is unnecessary but we will make our struct happy + // Sampler is unnecessary as long as depth texture won't be sampled but we will make our struct happy let sampler = device.create_sampler(&wgpu::SamplerDescriptor { address_mode_u: wgpu::AddressMode::ClampToEdge, address_mode_v: wgpu::AddressMode::ClampToEdge, diff --git a/blockworld-client/renderer/texture_manager.rs b/blockworld-client/renderer/texture_manager.rs new file mode 100644 index 0000000..e69de29 diff --git a/blockworld-client/render/uniform.rs b/blockworld-client/renderer/uniform.rs similarity index 79% rename from blockworld-client/render/uniform.rs rename to blockworld-client/renderer/uniform.rs index 7762150..acf8008 100644 --- a/blockworld-client/render/uniform.rs +++ b/blockworld-client/renderer/uniform.rs @@ -1,5 +1,6 @@ //! Utils for creating bind group, bind group layout and the uniform +use glam::Mat4; use wgpu::util::DeviceExt; /// T refers to the uniform type @@ -14,10 +15,21 @@ where pub binding: u32, } +#[repr(C)] +#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)] +pub struct RawMat4(pub [[f32; 4]; 4]); + +impl From for RawMat4 { + fn from(mat: Mat4) -> Self { + Self(mat.to_cols_array_2d()) + } +} + impl Uniform { - pub fn new(device: &wgpu::Device, uniform: Box, binding: u32, label: Option<&str>) -> Self { + /// Create a new uniform with the given device, uniform value, binding number and label + pub fn new(device: &wgpu::Device, uniform: T, binding: u32, label: Option<&str>) -> Self { let buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor { - label: Some("Martix Buffer"), + label, contents: bytemuck::cast_slice(&[*uniform]), usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, }); diff --git a/blockworld-client/renderer/utils.rs b/blockworld-client/renderer/utils.rs new file mode 100644 index 0000000..e69de29 diff --git a/blockworld-client/render/vertex.rs b/blockworld-client/renderer/vertex/vertex.rs similarity index 76% rename from blockworld-client/render/vertex.rs rename to blockworld-client/renderer/vertex/vertex.rs index c065a72..a1f14f4 100644 --- a/blockworld-client/render/vertex.rs +++ b/blockworld-client/renderer/vertex/vertex.rs @@ -1,3 +1,5 @@ +use glam::{Vec2, Vec3}; + #[repr(C)] #[derive(Copy, Clone, Debug, bytemuck::Zeroable, bytemuck::Pod)] pub struct Vertex { @@ -9,6 +11,13 @@ impl Vertex { const ATTRIBS: [wgpu::VertexAttribute; 2] = wgpu::vertex_attr_array![10 => Float32x3, 11 => Float32x2]; + pub fn new(pos: Vec3, uv: Vec2) -> Self { + Self { + position: pos.to_array(), + uv: uv.to_array(), + } + } + pub fn desc() -> wgpu::VertexBufferLayout<'static> { wgpu::VertexBufferLayout { array_stride: std::mem::size_of::() as wgpu::BufferAddress, diff --git a/blockworld-client/render/world_renderer.rs b/blockworld-client/renderer/wgpu/framework.rs similarity index 100% rename from blockworld-client/render/world_renderer.rs rename to blockworld-client/renderer/wgpu/framework.rs diff --git a/blockworld-client/renderer/wgpu/mod.rs b/blockworld-client/renderer/wgpu/mod.rs new file mode 100644 index 0000000..8c64fcd --- /dev/null +++ b/blockworld-client/renderer/wgpu/mod.rs @@ -0,0 +1,5 @@ +mod framework; +mod window_init; + +pub mod render_state; +pub use window_init::*; diff --git a/blockworld-client/render/draw.rs b/blockworld-client/renderer/wgpu/render_state.rs similarity index 55% rename from blockworld-client/render/draw.rs rename to blockworld-client/renderer/wgpu/render_state.rs index dc6a5ad..3980673 100644 --- a/blockworld-client/render/draw.rs +++ b/blockworld-client/renderer/wgpu/render_state.rs @@ -1,54 +1,33 @@ -use std::fmt::Debug; -use std::{io::BufRead, time::Instant}; - -use anyhow::*; -use glam::*; -use input_helper::InputState; -use wgpu::include_wgsl; -use wgpu_text::{ - glyph_brush::{ab_glyph::FontRef, Layout, OwnedSection, OwnedText, Section, Text}, - TextBrush, +use crate::{ + game::{settings::Settings, Game}, + get_cli_args, + renderer::{ + camera::{Camera, MatrixData}, + pipeline::{RegularPipeline, WireframePipeline}, + uniform::{RawMat4, Uniform}, + }, }; - +use glam::Mat4; +use std::{sync::Arc, time::Instant}; +use wgpu::*; use winit::{ dpi::PhysicalSize, event_loop::EventLoop, window::{Fullscreen, Window}, }; - -use crate::io::atlas_helper::Atlas; -use crate::io::input_helper; -use crate::{ - game::{ - block::{BlockMeta, BlockType, ResourceLocation}, - player_state::PlayerState, - register::RegisterTable, - settings::Settings, - Game, - }, - BootArgs, -}; - -use super::camera::{Camera, MatrixData}; -use super::pipeline::{RegularPipeline, WireframePipeline}; -use super::render_array::RenderArray; -use super::texture::Texture; -use super::uniform::*; /// state contains all things the game needs -pub struct State<'a> { - pub window: Window, +pub struct RenderState { + pub window: Arc, + pub surface: wgpu::Surface<'static>, - pub surface: wgpu::Surface<'a>, - pub device: wgpu::Device, - pub queue: wgpu::Queue, - pub config: wgpu::SurfaceConfiguration, - pub size: winit::dpi::PhysicalSize, + pub device: Device, + pub queue: Queue, + pub config: SurfaceConfiguration, + pub size: PhysicalSize, pub main_pipeline: RegularPipeline, pub wireframe_pipeline: WireframePipeline, - pub render_array: RenderArray, - pub texture: Texture, pub texture_bind_group: wgpu::BindGroup, @@ -67,11 +46,11 @@ pub struct State<'a> { pub global_timer: Instant, // UI - pub fps_text_section: OwnedSection, - pub brush: TextBrush>, + // pub fps_text_section: OwnedSection, + // pub brush: TextBrush>, // Settings - pub settings: Settings<'a>, + pub settings: Settings<'static>, pub register_table: RegisterTable, @@ -79,79 +58,96 @@ pub struct State<'a> { pub debug_mode: bool, } -impl<'a> State<'a> { - pub async fn new(event_loop: &EventLoop<()>, boot_args: &BootArgs) -> Result> { - // Create the window - let mut window_attrs = Window::default_attributes().with_title("Blockworld Indev"); - // set screen size based on boot_args - if boot_args.full_screen { - window_attrs = window_attrs.with_fullscreen(Some(Fullscreen::Borderless(None))); - } else { - window_attrs = - window_attrs.with_inner_size(PhysicalSize::new(boot_args.width, boot_args.height)) - } - #[allow(deprecated)] - let window = event_loop.create_window(window_attrs)?; - window.set_cursor_grab(winit::window::CursorGrabMode::Confined)?; - window.set_cursor_visible(false); +fn create_window(event_loop: &EventLoop<()>) -> Window { + let mut window_attrs = Window::default_attributes().with_title("Blockworld Indev"); + let args = get_cli_args(); + // set screen size based on boot_args + if args.full_screen { + window_attrs = window_attrs.with_fullscreen(Some(Fullscreen::Borderless(None))); + } else { + window_attrs = window_attrs.with_inner_size(PhysicalSize::new(args.width, args.height)) + } + let window = event_loop.create_window(window_attrs).unwrap(); + window.set_cursor_grab(winit::window::CursorGrabMode::Confined)?; + window.set_cursor_visible(false); - let _player_state: PlayerState = Default::default(); + window +} - let size = window.inner_size(); +fn create_instance() -> Instance { + Instance::new(wgpu::InstanceDescriptor { + backends: wgpu::Backends::PRIMARY, + ..Default::default() + }) +} - // Instance is the way to create surface and adapter. - let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { - backends: wgpu::Backends::PRIMARY, - ..Default::default() - }); - // \------------------- +fn create_surface<'window>( + instance: &Instance, + window: &'window Window, +) -> Result, wgpu::CreateSurfaceError> { + instance.create_surface(window) +} - // /------------------- - // Generate & Configure the surface - let surface = unsafe { instance.create_surface(&*(&window as *const Window))? }; - - // Adapter is used to create device and queue. - let adapter = instance - .request_adapter(&wgpu::RequestAdapterOptions { - power_preference: wgpu::PowerPreference::default(), - compatible_surface: Some(&surface), - force_fallback_adapter: false, - }) - .await - .with_context(|| format!("adapter created error for problem with wgpu"))?; - - // Device is the abstraction of the GPU. Queue is the command queue to send to GPU. - let (device, queue) = adapter - .request_device( - &wgpu::DeviceDescriptor { - label: None, - required_features: wgpu::Features::POLYGON_MODE_LINE, - required_limits: wgpu::Limits::default(), - }, - None, - ) - .await?; - - let surface_caps = surface.get_capabilities(&adapter); - let surface_format = surface_caps - .formats - .iter() - .copied() - .filter(|f| f.is_srgb()) - .next() - .unwrap_or(surface_caps.formats[0]); - - let config = wgpu::SurfaceConfiguration { - usage: wgpu::TextureUsages::RENDER_ATTACHMENT, - format: surface_format, - width: size.width, - height: size.height, - present_mode: surface_caps.present_modes[0], - alpha_mode: surface_caps.alpha_modes[0], - view_formats: vec![], - desired_maximum_frame_latency: 2, - }; +async fn create_adapter(instance: &Instance, surface: &Surface<'_>) -> wgpu::Adapter { + instance + .request_adapter(&wgpu::RequestAdapterOptions { + power_preference: wgpu::PowerPreference::default(), + compatible_surface: Some(surface), + force_fallback_adapter: false, + }) + .await + .unwrap() +} + +async fn create_device_and_queue(adapter: &wgpu::Adapter) -> (wgpu::Device, wgpu::Queue) { + let (device, queue) = adapter + .request_device( + &wgpu::DeviceDescriptor { + label: None, + required_features: wgpu::Features::POLYGON_MODE_LINE, + required_limits: wgpu::Limits::default(), + }, + None, + ) + .await + .unwrap(); + (device, queue) +} + +fn create_surface_config( + size: PhysicalSize, + surface: &Surface, + adapter: &Adapter, +) -> wgpu::SurfaceConfiguration { + let surface_caps = surface.get_capabilities(&adapter); + let surface_format = surface_caps + .formats + .iter() + .find(|f| f.is_srgb()) + .copied() + .unwrap_or(surface_caps.formats[0]); + + wgpu::SurfaceConfiguration { + usage: wgpu::TextureUsages::RENDER_ATTACHMENT, + format: surface_format, + width: size.width, + height: size.height, + present_mode: PresentMode::AutoNoVsync, + alpha_mode: surface_caps.alpha_modes[0], + view_formats: vec![], + desired_maximum_frame_latency: 2, + } +} +impl RenderState { + pub async fn new(window: Window) -> RenderState { + let window_arc = Arc::new(window); + let size = window.inner_size(); + let instance = create_instance(); + let surface = create_surface(&instance, &window).unwrap(); + let adapter = create_adapter(&instance, &surface).await; + let (device, queue) = create_device_and_queue(&adapter).await; + let config = create_surface_config(size, &surface, &adapter); surface.configure(&device, &config); // Camera thingy @@ -159,18 +155,11 @@ impl<'a> State<'a> { let mut matrix_uniform = Uniform::new( &device, - Box::new(MatrixData::new()), + RawMat4::from(Mat4::IDENTITY), 30, Some("Matrix Uniform"), ); - matrix_uniform.uniform.as_mut().update_matrix(&camera); - // Texture & its bind group - let texture = crate::render::texture::Texture::from_bytes( - &device, - &queue, - include_bytes!("../assets/atlas.png"), - "Block Texture", - ); + matrix_uniform.uniform.as_mut() = camera.build_mvp(); let texture_bind_group_layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { @@ -215,9 +204,9 @@ impl<'a> State<'a> { let depth_texture = Texture::create_depth_texture(&device, &config); // \------------------- - let shader = device.create_shader_module(include_wgsl!("shaders/default_shader.wgsl")); + let shader = device.create_shader_module(include_wgsl!("../shaders/default_shader.wgsl")); let wireframe_shader = - device.create_shader_module(include_wgsl!("shaders/debug_shader.wgsl")); + device.create_shader_module(include_wgsl!("../shaders/debug_shader.wgsl")); let main_pipeline = RegularPipeline::new( &device, @@ -239,32 +228,11 @@ impl<'a> State<'a> { let mut register_table = RegisterTable::new(); let atlas = Atlas::new("assets/atlas.png", 16); - register_table.register_block( - 1, - BlockMeta { - name: ResourceLocation::new("test_a"), - ty: BlockType::Solid, - atlas_coord: [atlas.get_uv_from_xy(6, 19)?; 6], - }, - )?; - register_table.register_block( - 2, - BlockMeta { - name: ResourceLocation::new("test_b"), - ty: BlockType::Solid, - atlas_coord: [atlas.get_uv_from_xy(16, 6)?; 6], - }, - )?; let mut game = Game::default(); let render_array = RenderArray::new(&mut game.chunk_provider, &device, ®ister_table); let input_state = InputState::default(); - let settings = Settings { - font: include_bytes!("../assets/fonts/Minecraft.otf"), - font_size: 18.0, - }; - let brush = wgpu_text::BrushBuilder::using_font_bytes(settings.font) .unwrap() .with_depth_stencil(Some(wgpu::DepthStencilState { @@ -276,16 +244,6 @@ impl<'a> State<'a> { })) .build(&device, config.width, config.height, config.format); - let fps_text_section = Section::default() - .add_text( - Text::new("Hello World Test AAAAAAAAAAAAA") - .with_color([1.0, 1.0, 1.0, 1.0]) - .with_scale(25.0), - ) - .with_layout(Layout::default().v_align(wgpu_text::glyph_brush::VerticalAlign::Center)) - .with_screen_position((50.0, config.height as f32 * 0.5)) - .to_owned(); - Ok(Self { window, @@ -302,19 +260,14 @@ impl<'a> State<'a> { depth_texture, - render_array, - camera, matrix_uniform, - brush, settings, fps: 0.0, dt_timer: Instant::now(), global_timer: Instant::now(), - fps_text_section, - input_state, game, @@ -323,7 +276,7 @@ impl<'a> State<'a> { }) } - pub fn resize(&mut self, new_size: winit::dpi::PhysicalSize) { + pub fn resize(&mut self, new_size: PhysicalSize) { if new_size.width > 0 && new_size.height > 0 { self.camera .update_aspect_ratio(new_size.width as f32 / new_size.height as f32); @@ -348,19 +301,6 @@ impl<'a> State<'a> { // Game Update self.game.update(&self.input_state); - // FPS Text Update - self.fps_text_section.text[0] = OwnedText::new( - format!( - "delta time: {}\nfps: {}", - delta_time.as_secs_f32(), - 1.0 / delta_time.as_secs_f32() - ) - .to_string(), - ) - .with_z(0.0) - .with_scale(25.0) - .with_color([0.0, 0.0, 0.0, 1.0]); - self.window.set_title( format!( "Blockworld Dev [fps: {:.0}]", @@ -393,9 +333,6 @@ impl<'a> State<'a> { label: Some("Blockworld Render Encoder"), }); - self.brush - .queue(&self.device, &self.queue, vec![&self.fps_text_section]) - .unwrap(); { let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { label: Some("Blockworld Render Pass"), @@ -440,7 +377,6 @@ impl<'a> State<'a> { render_pass.set_vertex_buffer(0, chunk.vertex_buffer.slice(..)); render_pass.draw(0..chunk.vertex_count, 0..1); } - self.brush.draw(&mut render_pass); } self.queue.submit(std::iter::once(encoder.finish())); @@ -459,29 +395,3 @@ impl<'a> State<'a> { Ok(()) } } - -impl<'a> Debug for State<'a> { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.debug_struct("State") - .field("window", &self.window) - .field("surface", &self.surface) - .field("device", &self.device) - .field("queue", &self.queue) - .field("config", &self.config) - .field("size", &self.size) - .field("main_pipeline", &self.main_pipeline) - .field("wireframe_pipeline", &self.wireframe_pipeline) - .field("texture", &self.texture) - .field("texture_bind_group", &self.texture_bind_group) - .field("depth_texture", &self.depth_texture) - .field("camera", &self.camera) - .field("input_state", &self.input_state) - .field("fps", &self.fps) - .field("dt_timer", &self.dt_timer) - .field("global_timer", &self.global_timer) - .field("fps_text_section", &self.fps_text_section) - .field("settings", &self.settings) - .field("register_table", &self.register_table) - .finish() - } -} diff --git a/blockworld-client/renderer/wgpu/state_create_helper.rs b/blockworld-client/renderer/wgpu/state_create_helper.rs new file mode 100644 index 0000000..e69de29 diff --git a/blockworld-client/render/window_init.rs b/blockworld-client/renderer/wgpu/window_init.rs similarity index 83% rename from blockworld-client/render/window_init.rs rename to blockworld-client/renderer/wgpu/window_init.rs index dc34bc0..f27dbdf 100644 --- a/blockworld-client/render/window_init.rs +++ b/blockworld-client/renderer/wgpu/window_init.rs @@ -1,18 +1,17 @@ -use crate::render::draw::State; -use crate::BootArgs; +use crate::get_cli_args; use anyhow::*; use clap::Parser; use log::*; -use winit::application::ApplicationHandler; -use winit::event::{DeviceEvent, ElementState, WindowEvent}; -use winit::event_loop::{ActiveEventLoop, ControlFlow, EventLoop}; -use winit::keyboard::{Key, KeyCode, NamedKey}; -use winit::window::WindowId; +use winit::*; -impl<'a> ApplicationHandler for State<'a> { - fn resumed(&mut self, _event_loop: &ActiveEventLoop) { - info!("Resumed!"); - } +use super::render_state::RenderState; + +struct WindowApplication { + render_state: Option, +} + +impl ApplicationHandler for WindowApplication { + fn resumed(&mut self, _event_loop: &ActiveEventLoop) {} fn device_event( &mut self, @@ -84,7 +83,7 @@ pub async fn run() -> Result<()> { let event_loop = EventLoop::new().unwrap(); event_loop.set_control_flow(ControlFlow::Poll); - let mut state = State::new(&event_loop, &boot_args).await?; + let mut state = Blockworld::new(&event_loop, &boot_args).await?; event_loop .run_app(&mut state) diff --git a/blockworld-client/renderer/world_renderer.rs b/blockworld-client/renderer/world_renderer.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/blockworld-client/renderer/world_renderer.rs @@ -0,0 +1 @@ + diff --git a/blockworld-client/resources/mod.rs b/blockworld-client/resources/mod.rs new file mode 100644 index 0000000..e7bd98d --- /dev/null +++ b/blockworld-client/resources/mod.rs @@ -0,0 +1,85 @@ +use anyhow::*; +use blockworld_utils::resource_location::str; +use image::RgbaImage; +use serde_json::Value; +use std::{ + collections::{HashMap, HashSet}, + fs::File, + io::BufReader, + path::{Path, PathBuf}, +}; +use tokio::io::ReadBuf; +struct PackMetadataSection { + /// Version of the pack format + /// + /// - 1 for versions 1.6.1 – 1.8.9 + /// - 2 for versions 1.9 – 1.10.2 + /// - 3 for versions 1.11 – 1.12.2 + /// - 4 for versions 1.13 – 1.14.4 + /// - 5 for versions 1.15 – 1.16.1 + /// - 6 for versions 1.16.2 – 1.16.5 + /// - 7 for versions 1.17.x + /// - 8 for versions 1.18.x + /// - etc. + pub pack_format: i32, + // TODO: SHOULD BE TEXT COMPONENT + /// Description of the pack, displayed in the pack selection screen + pub description: String, +} + +const RESOURCE_ROOT: &Path = Path::new("./assets/assets/"); + +pub enum ResourceType { + ClientResources, + ServerData, +} + +impl ResourceType { + fn get_directory_name(&self) -> &'static str { + match self { + ResourceType::ClientResources => "assets", + ResourceType::ServerData => "data", + } + } +} + +struct Resource { + location: str, + map_metadata: HashMap, +} + +impl Resource { + fn get_metadata(&self, key: &str) -> Option { + self.map_metadata.get(key).cloned() + } +} + +trait ResourcePack { + fn get_metadata(&self) -> Result; + fn resource_exists(&self, resource_path: &str) -> bool; + fn get_name(&self) -> String; + /// `getInputStream` in Minecraft + fn get_read_stream(&self) -> ReadBuf; +} + +struct DefaultResourcePack { + name: String, +} + +impl ResourcePack for DefaultResourcePack { + fn get_name(&self) -> String { + self.name.clone() + } + + fn get_metadata(&self) -> Result { + todo!() + } + + fn resource_exists(&self, location: &Path) -> bool { + Path::exists(location) + } + + fn get_read_stream(&self) -> ReadBuf { + todo!() + } +} diff --git a/blockworld-client/tileentity/mod.rs b/blockworld-client/tileentity/mod.rs new file mode 100644 index 0000000..b4a6969 --- /dev/null +++ b/blockworld-client/tileentity/mod.rs @@ -0,0 +1 @@ +struct TileEntity; diff --git a/blockworld-client/world/block_access.rs b/blockworld-client/world/block_access.rs new file mode 100644 index 0000000..929082c --- /dev/null +++ b/blockworld-client/world/block_access.rs @@ -0,0 +1,11 @@ +use crate::block::*; +use crate::tileentity::TileEntity; + +/// `IBlockAccess` in minecraft +trait BlockAccess { + fn get_block() -> Block; + fn get_tile_entity() -> TileEntity; + + /// Returns true if the block at the specified coordinates is empty + fn is_air_block() -> bool; +} diff --git a/blockworld-client/world/chunk.rs b/blockworld-client/world/chunk.rs new file mode 100644 index 0000000..2a9d4d1 --- /dev/null +++ b/blockworld-client/world/chunk.rs @@ -0,0 +1,89 @@ +use std::{ops::Div, rc::Rc}; + +use glam::*; + +use crate::block::*; + +use super::{chunk_provider::ClientChunkProvider, world::World}; + +pub const SUBCHUNK_SIZE: usize = 16; +pub const SUBCHUNK_BLOCK_NUM: usize = SUBCHUNK_SIZE * SUBCHUNK_SIZE * SUBCHUNK_SIZE; +pub const CHUNK_SIZE: usize = 16; +pub const CHUNK_HEIGHT: usize = 256; +pub const CHUNK_BLOCK_NUM: usize = CHUNK_SIZE * CHUNK_SIZE * CHUNK_HEIGHT; + +// ! Should be optimized later by using 4 bit instead of u8 +type LightLevel = u8; + +// ExtendedBlockStorage.java +pub struct SubChunk { + /// A total count of the number of non-air blocks in this block storage's Chunk. + block_ref_count: u32, + block_array: [BlockID; CHUNK_BLOCK_NUM], + light_array: [LightLevel; CHUNK_BLOCK_NUM], +} + +impl SubChunk { + pub fn new() -> Self { + Self { + block_ref_count: 0, + block_array: [0; CHUNK_BLOCK_NUM], + light_array: [0; CHUNK_BLOCK_NUM], + } + } + + pub fn get_blockid(&self, x: i32, y: i32, z: i32) -> BlockID { + self.block_array[Chunk::index(x, y, z)] + } +} + +pub struct Chunk { + pub world: Rc, + + /// Blocks + pub storage_array: [Box; 16], + + pub pos_x: i32, + pub pos_z: i32, + /// Should update this when the chunk is modified + pub is_modified: bool, + pub is_chunk_loaded: bool, + pub height_map: [i32; CHUNK_SIZE * CHUNK_SIZE], +} + +impl Chunk { + pub fn new(world: &Rc, pos_x: i32, pos_z: i32) -> Self { + Self { + world: Rc::clone(world), + storage_array: todo!(), + pos_x, + pos_z, + is_modified: false, + is_chunk_loaded: false, + height_map: [0; CHUNK_SIZE * CHUNK_SIZE], + } + } + + /// Reference: [https://minecraft.wiki/w/Chunk_format] + /// + /// Format: YZX + /// + /// From xyz to Index of the block array. + /// + /// Don't pass negative numbers into this function! + pub fn index(x: i32, y: i32, z: i32) -> usize { + (y << 8 + z << 4 + x) as usize + } + + /// Get the block at (x,y,z) with respect to the chunk-relative coord. + pub fn get_block(&self, x: i32, y: i32, z: i32) -> BlockID { + let subchunk_index = y.div(SUBCHUNK_SIZE as i32) as usize; + let block = + self.storage_array[subchunk_index].get_blockid(x, (y % SUBCHUNK_SIZE as i32) as i32, z); + block + } + + /// Detect neighbors for face cull. + /// The coordinate is chunk-relative. + pub fn detect_block_neighbors(&self, x: i32, y: i32, z: i32) -> u32 {} +} diff --git a/blockworld-client/game/chunk_provider.rs b/blockworld-client/world/chunk_provider.rs similarity index 87% rename from blockworld-client/game/chunk_provider.rs rename to blockworld-client/world/chunk_provider.rs index fc9edd6..39e810c 100644 --- a/blockworld-client/game/chunk_provider.rs +++ b/blockworld-client/world/chunk_provider.rs @@ -1,8 +1,28 @@ //! net/minecraft/client/multiplayer/ClientChunkProvider.java -use std::rc::Rc; +use std::{cell::RefCell, rc::Rc}; use anyhow::{anyhow, Result}; +trait ChunkProvider { + /** + * Checks to see if a chunk exists at x, y + */ + fn chunk_exists(&self, chunk_x: i32, chunk_z: i32) -> bool; + + /** + * Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the + * specified chunk from the map seed and chunk seed + */ + fn provide_chunk(&self, chunk_x: i32, chunk_z: i32) -> Rc>; + + /** + * loads or generates the chunk at the chunk location specified + */ + fn load_chunk(&self, chunk_x: i32, chunk_z: i32) -> Rc> { + self.provide_chunk(chunk_x, chunk_z) + } +} + use super::{chunk::Chunk, world::ClientWorld}; pub struct ClientChunkProvider { array: ChunkArray, diff --git a/blockworld-client/world/mod.rs b/blockworld-client/world/mod.rs new file mode 100644 index 0000000..fee8dce --- /dev/null +++ b/blockworld-client/world/mod.rs @@ -0,0 +1,4 @@ +pub mod block_access; +pub mod chunk; +pub mod chunk_provider; +pub mod world; diff --git a/blockworld-client/world/world.rs b/blockworld-client/world/world.rs new file mode 100644 index 0000000..412de37 --- /dev/null +++ b/blockworld-client/world/world.rs @@ -0,0 +1 @@ +pub struct World; diff --git a/blockworld-utils/src/assets_reader/README.md b/blockworld-utils/src/assets_reader/README.md deleted file mode 100644 index d60690f..0000000 --- a/blockworld-utils/src/assets_reader/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# License -MIT License - -Copyright (c) 2022 Ben Reeves - -# minecraft-assets - -[![Crates.io](https://img.shields.io/crates/v/minecraft-assets.svg)](https://crates.io/crates/minecraft-assets) -[![Docs.rs](https://img.shields.io/badge/docs-latest-blue.svg)](https://docs.rs/minecraft-assets) -[![Tests](https://github.com/bgr360/minecraft-assets-rs/actions/workflows/tests.yml/badge.svg)](https://github.com/bgr360/minecraft-assets-rs/actions/workflows/tests.yml) - -A Rust library for reading asset files and resource packs for any version of -Minecraft. - -## Example - -```rust,no_run -use minecraft_assets::api::AssetPack; - -let assets = AssetPack::at_path("~/.minecraft/"); - -// Load the block states for `oak_planks` -let states = assets.load_blockstates("oak_planks").unwrap(); -let variants = states.variants().unwrap(); - -assert_eq!(variants.len(), 1); - -let model_properties = &variants[""].models()[0]; -assert_eq!(model_properties.model, "block/oak_planks"); -``` - -## Documentation - -This library is `#![warn(missing_docs)]`, so the documentation is very complete: - -* [Main Branch (github.io)](https://bgr360.github.io/minecraft-assets-rs/minecraft_assets/) -* [Latest Release (docs.rs)](https://docs.rs/minecraft-assets) - -## Feature checklist - -#### Assets parsing - -- [x] `assets//blockstates/*.json` -- [ ] `assets//font/*.json` -- [ ] `assets//lang/*.json` -- [x] `assets//models/block/*.json` -- [x] `assets//models/item/*.json` -- [ ] `assets//particles/*.json` -- [ ] `assets//shaders/{post,program}/*.json` -- [ ] `assets//textures/*.mcmeta` -- [ ] `assets//sounds.json` -- [ ] `assets/pack.mcmeta` - -#### Data parsing - -- [ ] `data//advancements/**/*.json` -- [ ] `data//loot_tables/**/*.json` -- [ ] `data//recipes/*.json` -- [ ] `data//structures/**/*.json` -- [ ] `data//tags/**/*.json` - -## Projects using `minecraft-assets` - -* [Brine]: A multi-version Minecraft client written using Bevy. -* *Maybe your project here! :)* - -## Tests - -Integration tests in [`tests/`](tests/) use the actual asset files from the -[`minecraft-assets`] repository. - -That repository is fairly large (~1 GB), so the tests in `tests/` do not run by -default. If you'd like to run them, use the [`tests/setup.sh`](tests/setup.sh) -script: - -```txt -$ ./tests/setup.sh -``` - -This script will fetch the [`minecraft-assets`] repository and check out a few -different versions at various paths in [`tests/`](tests/). Then you can run the -tests by enabling the `tests` feature: - -```txt -$ cargo test --features tests -``` - -[`minecraft-assets`]: https://github.com/InventivetalentDev -[Brine]: https://github.com/BGR360/brine - -## License - -Licensed under either of - - * Apache License, Version 2.0 - () - * MIT license - () - -at your option. - -Copyright Ben Reeves 2022 - -[LICENSE-APACHE]: LICENSE-APACHE -[LICENSE-MIT]: LICENSE-MIT - -## Contribution - -Unless you explicitly state otherwise, any contribution intentionally submitted -for inclusion in the work by you, as defined in the Apache-2.0 license, shall be -dual licensed as above, without any additional terms or conditions. diff --git a/blockworld-utils/src/assets_reader/api/asset_pack.rs b/blockworld-utils/src/assets_reader/api/asset_pack.rs deleted file mode 100644 index d0348af..0000000 --- a/blockworld-utils/src/assets_reader/api/asset_pack.rs +++ /dev/null @@ -1,203 +0,0 @@ -use std::{ops::Deref, path::Path}; - -use serde::de::DeserializeOwned; - -use crate::io::assets_reader::{ - api::{ - FileSystemResourceProvider, ModelIdentifier, ResourceIdentifier, ResourceProvider, Result, - }, - schemas::{BlockStates, Model}, -}; - -/// Top-level API for accessing Minecraft assets. -pub struct AssetPack { - provider: Box, -} - -impl AssetPack { - /// Returns a new [`AssetPack`] that can read data from the given directory. - /// - /// The provided `root_dir` should be the directory that contains the - /// `assets/` and/or `data/` directories. - /// - /// # Example - /// - /// ```no_run - /// use minecraft_assets::api::AssetPack; - /// - /// let assets = AssetPack::at_path("~/.minecraft/"); - /// - /// // Load the block states for `oak_planks` - /// let states = assets.load_blockstates("oak_planks").unwrap(); - /// let variants = states.variants().unwrap(); - /// - /// assert_eq!(variants.len(), 1); - /// - /// let model_properties = &variants[""].models()[0]; - /// assert_eq!(model_properties.model, "block/oak_planks"); - /// ``` - pub fn at_path(root_dir: impl AsRef) -> Self { - let provider = FileSystemResourceProvider::new(root_dir); - Self { - provider: Box::new(provider), - } - } - - /// Returns a new [`AssetPack`] that uses the given [`ResourceProvider`]. - pub fn new

    (provider: P) -> Self - where - P: ResourceProvider + 'static, - { - Self { - provider: Box::new(provider), - } - } - - /// Loads the [`BlockStates`] of the block with the provided id. - /// - /// # Example - /// - /// ```no_run - /// # use minecraft_assets::api::*; - /// # let assets = AssetPack::at_path("foo"); - /// let states = assets.load_blockstates("stone"); - /// let states = assets.load_blockstates("minecraft:dirt"); - /// ``` - pub fn load_blockstates(&self, block_id: &str) -> Result { - self.load_resource(&ResourceIdentifier::blockstates(block_id)) - } - - /// Loads the block [`Model`] identified by the given name or path. - /// - /// # Example - /// - /// ```no_run - /// # use minecraft_assets::api::*; - /// # let assets = AssetPack::at_path("foo"); - /// let model = assets.load_block_model("stone"); - /// let model = assets.load_block_model("block/dirt"); - /// ``` - pub fn load_block_model(&self, model: &str) -> Result { - self.load_resource(&ResourceIdentifier::block_model(model)) - } - - /// Loads the block [`Model`] identified by the given name or path, as well - /// as all of its parents and ancestors. - /// - /// The models are returned as a list, with the first element being the - /// model that was originally requested, the next element being its parent, - /// and so on with the last element being the topmost parent. - /// - /// # Example - /// - /// ```no_run - /// # use minecraft_assets::api::*; - /// # let assets = AssetPack::at_path("foo"); - /// let models = assets.load_block_model_recursive("block/cube_all").unwrap(); - /// - /// let expected = vec![ - /// assets.load_block_model("block/cube_all").unwrap(), - /// assets.load_block_model("block/cube").unwrap(), - /// assets.load_block_model("block/block").unwrap(), - /// ]; - /// assert_eq!(models, expected); - /// ``` - pub fn load_block_model_recursive(&self, model: &str) -> Result> { - self.load_model_recursive(&ResourceIdentifier::block_model(model)) - } - - /// Loads the item [`Model`] identified by the given name or path. - /// - /// # Example - /// - /// ```no_run - /// # use minecraft_assets::api::*; - /// # let assets = AssetPack::at_path("foo"); - /// let model = assets.load_item_model("compass"); - /// let model = assets.load_item_model("item/diamond_hoe"); - /// ``` - pub fn load_item_model(&self, model: &str) -> Result { - self.load_resource(&ResourceIdentifier::item_model(model)) - } - - /// Loads the item [`Model`] identified by the given name or path, as well - /// as all of its parents and ancestors. - /// - /// The models are returned as a list, with the first element being the - /// model that was originally requested, the next element being its parent, - /// and so on with the last element being the topmost parent. - /// - /// # Example - /// - /// ```no_run - /// # use minecraft_assets::api::*; - /// # let assets = AssetPack::at_path("foo"); - /// let models = assets.load_item_model_recursive("item/diamond_hoe").unwrap(); - /// - /// let expected = vec![ - /// assets.load_item_model("item/diamond_hoe").unwrap(), - /// assets.load_item_model("item/handheld").unwrap(), - /// assets.load_item_model("item/generated").unwrap(), - /// ]; - /// assert_eq!(models, expected); - /// ``` - pub fn load_item_model_recursive(&self, model: &str) -> Result> { - self.load_model_recursive(&ResourceIdentifier::item_model(model)) - } - - fn load_resource(&self, resource: &ResourceIdentifier) -> Result - where - T: DeserializeOwned, - { - let bytes = self.provider.load_resource(resource)?; - Ok(serde_json::from_reader(&bytes[..])?) - } - - fn load_model_recursive(&self, resource: &ResourceIdentifier) -> Result> { - let mut models = Vec::new(); - - Self::for_each_parent( - resource.clone(), - |model| models.push(model), - |next_id| self.load_resource(next_id), - )?; - - Ok(models) - } - - pub(crate) fn for_each_parent( - mut current: ResourceIdentifier, - mut op: F, - mut load_model: L, - ) -> Result<(), E> - where - F: FnMut(Model), - L: FnMut(&ResourceIdentifier) -> Result, - { - loop { - let model = load_model(¤t)?; - - let parent_owned = model.parent.clone(); - - op(model); - - match parent_owned { - Some(parent) if !ModelIdentifier::is_builtin(&parent) => { - //println!("{}", parent.as_str()); - current = ResourceIdentifier::new_owned(current.kind(), parent); - } - _ => break, - } - } - - Ok(()) - } -} - -impl Deref for AssetPack { - type Target = dyn ResourceProvider; - - fn deref(&self) -> &Self::Target { - &*self.provider - } -} diff --git a/blockworld-utils/src/assets_reader/api/mod.rs b/blockworld-utils/src/assets_reader/api/mod.rs deleted file mode 100644 index d850b4f..0000000 --- a/blockworld-utils/src/assets_reader/api/mod.rs +++ /dev/null @@ -1,48 +0,0 @@ -//! An API for programmatically accessing Minecraft resources and associated -//! metadata. -//! -//! ## Resource Identifiers -//! -//! Every resource is associated with a unique [`ResourceIdentifier`], which is a -//! combination of a [`ResourceKind`] and a *namespaced identifier*. -//! -//! ## Providers -//! -//! Resources can be enumerated and loaded using the [`ResourceProvider`] trait. -//! This crate provides the [`FileSystemResourceProvider`] as a convenient -//! implementation of this trait. -//! -//! ## Asset Pack -//! -//! Resources can be ergonomically loaded through the [`AssetPack`] API. - -use std::io; - -mod asset_pack; -mod provider; -mod resolve; -mod resource; - -pub use asset_pack::AssetPack; -pub use provider::{ - EnumerateResources, FileSystemResourceProvider, LoadResource, ResourceProvider, -}; -pub use resolve::ModelResolver; -pub use resource::{ - ModelIdentifier, ResourceCategory, ResourceIdentifier, ResourceKind, ResourcePath, - MINECRAFT_NAMESPACE, -}; - -/// Error types that can be returned from API methods. -#[derive(Debug, thiserror::Error)] -#[allow(missing_docs)] -pub enum Error { - #[error(transparent)] - IoError(#[from] io::Error), - - #[error(transparent)] - ParseError(#[from] serde_json::Error), -} - -/// Result alias for convenience. -pub type Result = std::result::Result; diff --git a/blockworld-utils/src/assets_reader/api/provider.rs b/blockworld-utils/src/assets_reader/api/provider.rs deleted file mode 100644 index a46425c..0000000 --- a/blockworld-utils/src/assets_reader/api/provider.rs +++ /dev/null @@ -1,218 +0,0 @@ -use std::{ - fs, io, - path::{Path, PathBuf}, -}; - -use crate::io::assets_reader::api::{ResourceIdentifier, ResourceKind, ResourcePath}; - -/* - dMMMMMMP dMMMMb .aMMMb dMP dMMMMMMP .dMMMb - dMP dMP.dMP dMP"dMP amr dMP dMP" VP - dMP dMMMMK" dMMMMMP dMP dMP VMMMb - dMP dMP"AMF dMP dMP dMP dMP dP .dMP -dMP dMP dMP dMP dMP dMP dMP VMMMP" -*/ - -/// Indicates that a type can enumerate available resources. -pub trait EnumerateResources { - /// Enumerates the available resources of the given [`ResourceKind`] in the - /// given namespace. - fn enumerate_resources( - &self, - namespace: &str, - kind: ResourceKind, - ) -> Result>, io::Error>; -} - -/// Indicates that a type can load provide the raw data of resources. -pub trait LoadResource { - /// Returns the raw bytes of the resource referenced by the given - /// [`ResourceIdentifier`]. - fn load_resource(&self, id: &ResourceIdentifier) -> Result, io::Error>; -} - -/// Marker trait for types that are [`EnumerateResources`] and [`LoadResource`]. -pub trait ResourceProvider: EnumerateResources + LoadResource {} - -impl ResourceProvider for T {} - -/* - dMMMMMP dMP dMP dMMMMMP .dMMMb dMP dMP .dMMMb dMMMMMMP dMMMMMP dMMMMMMMMb - dMP amr dMP dMP dMP" VP dMP.dMP dMP" VP dMP dMP dMP"dMP"dMP - dMMMP dMP dMP dMMMP VMMMb VMMMMP VMMMb dMP dMMMP dMP dMP dMP - dMP dMP dMP dMP dP .dMP dA .dMP dP .dMP dMP dMP dMP dMP dMP -dMP dMP dMMMMMP dMMMMMP VMMMP" VMMMP" VMMMP" dMP dMMMMMP dMP dMP dMP - - dMMMMb dMMMMb .aMMMb dMP dMP dMP dMMMMb dMMMMMP dMMMMb - dMP.dMP dMP.dMP dMP"dMP dMP dMP amr dMP VMP dMP dMP.dMP - dMMMMP" dMMMMK" dMP dMP dMP dMP dMP dMP dMP dMMMP dMMMMK" - dMP dMP"AMF dMP.aMP YMvAP" dMP dMP.aMP dMP dMP"AMF -dMP dMP dMP VMMMP" VP" dMP dMMMMP" dMMMMMP dMP dMP - -*/ - -/// A [`ResourceProvider`] that provides resources from the local file system. -pub struct FileSystemResourceProvider { - root: PathBuf, -} - -impl FileSystemResourceProvider { - /// Returns a new provider that provides resources from the given root directory. - /// - /// The root directory should be the directory that contains the `assets/` - /// and (optionally) `data/` directory. - pub fn new(root: impl AsRef) -> Self { - Self { - root: PathBuf::from(root.as_ref()), - } - } -} - -impl EnumerateResources for FileSystemResourceProvider { - fn enumerate_resources( - &self, - namespace: &str, - kind: ResourceKind, - ) -> Result>, io::Error> { - let directory = ResourcePath::for_kind(&self.root, namespace, kind); - Ok(ResourceIter::new(directory, kind)?.collect()) - } -} - -impl LoadResource for FileSystemResourceProvider { - fn load_resource(&self, id: &ResourceIdentifier) -> Result, io::Error> { - let path = ResourcePath::for_resource(&self.root, id); - fs::read(path) - } -} - -/* - dMP dMMMMMMP dMMMMMP dMMMMb - amr dMP dMP dMP.dMP - dMP dMP dMMMP dMMMMK" - dMP dMP dMP dMP"AMF -dMP dMP dMMMMMP dMP dMP - -*/ - -/// An iterator over a directory that yields [`ResourceIdentifier`]s for every -/// file of a certain [`ResourceKind`]. -pub struct ResourceIter { - // Stack of directory iterators. - dir_iters: Vec, - // Stack of directory names. - dir_names: Vec, - kind: ResourceKind, -} - -enum DirOrResource { - Dir { name: String, iter: fs::ReadDir }, - Resource(ResourceIdentifier<'static>), -} - -impl ResourceIter { - pub fn new(directory: impl AsRef, kind: ResourceKind) -> Result { - let dir_iter = fs::read_dir(directory)?; - - Ok(Self { - dir_iters: vec![dir_iter], - dir_names: vec![], - kind, - }) - } - - #[inline] - fn next_dir_or_resource(&mut self) -> Option { - // Continue iteration in the childmost directory. - let dir_iter = self.dir_iters.last_mut().unwrap(); - - dir_iter - .filter_map(|dir_entry| { - dir_entry - // Skip over errorneous entries. - .ok() - // Get file type of entry and skip over fs errors. - .and_then(|dir_entry| { - dir_entry - .file_type() - .ok() - .map(|file_type| (dir_entry, file_type)) - }) - .and_then(|(dir_entry, file_type)| { - if file_type.is_dir() { - // Start new ReadDir in subdirectory. - fs::read_dir(dir_entry.path()) - // Skip over fs errors. - .ok() - .map(|iter| DirOrResource::Dir { - name: dir_entry.file_name().to_string_lossy().into_owned(), - iter, - }) - } else { - // Get file name and skip over UTF-8 errors. - dir_entry.file_name().to_str().and_then(|file_name| { - ( - // Skip over files starting with '_'. - !file_name.starts_with('_') && - // Skip over resources of the wrong kind (check the extension). - file_name.ends_with(self.kind.extension()) - ) - .then(|| { - // Cut the extension off the file name to - // get the resource name. - let dot_index = - file_name.len() - self.kind.extension().len() - 1; - - let file_name = &file_name[..dot_index]; - - // Prepend any subdirectory paths - let mut components = self.dir_names.clone(); - components.push(file_name.to_string()); - - let resource_path = components.join("/"); - - let id = - ResourceIdentifier::new_owned(self.kind, resource_path); - DirOrResource::Resource(id) - }) - }) - } - }) - }) - .next() - } -} - -impl Iterator for ResourceIter { - type Item = ResourceIdentifier<'static>; - - fn next(&mut self) -> Option { - loop { - // Get the next directory or resource id. - let next_dir_or_resource = self.next_dir_or_resource(); - - // A value of `None` here indicates that the childmost directory has no - // more entries, so pop the child or return the final `None`. - if next_dir_or_resource.is_none() { - if self.dir_iters.len() > 1 { - self.dir_iters.pop(); - self.dir_names.pop(); - continue; - } else { - return None; - } - } - - match next_dir_or_resource.unwrap() { - // If the next entry is a directory, push a new child and continue - // iterating inside the subdirectory. - DirOrResource::Dir { name, iter } => { - self.dir_iters.push(iter); - self.dir_names.push(name); - continue; - } - DirOrResource::Resource(id) => return Some(id), - } - } - } -} diff --git a/blockworld-utils/src/assets_reader/api/resolve.rs b/blockworld-utils/src/assets_reader/api/resolve.rs deleted file mode 100644 index 0fb160a..0000000 --- a/blockworld-utils/src/assets_reader/api/resolve.rs +++ /dev/null @@ -1,318 +0,0 @@ -use crate::io::assets_reader::schemas::models::{ - Display, Element, GuiLightMode, Model, Texture, Textures, -}; - -/// Methods for resolving the properties of a [`Model`] with respect to its -/// parents. -pub struct ModelResolver; - -impl ModelResolver { - /// Iterates through a [`Model`] and all of its parents to resolve all of - /// the model's properties in a way that reflects the intended inheritance - /// and/or override behavior of the Minecraft model format. - /// - /// The method takes in an iterator of [`Model`]s where the first element is - /// the model being resolved, and the subsequent elements (if any) are the - /// chain of parents of that model. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::{ModelResolver}; - /// use maplit::hashmap; - /// - /// use minecraft_assets::schemas::models::*; - /// - /// let parent = Model { - /// textures: Some(Textures::from(hashmap! { - /// "up" => "#side", - /// "down" => "#side" - /// })), - /// elements: Some(vec![ - /// Element { - /// faces: hashmap! { - /// BlockFace::Up => ElementFace { - /// texture: Texture::from("#up"), - /// ..Default::default() - /// }, - /// BlockFace::Down => ElementFace { - /// texture: Texture::from("#down"), - /// ..Default::default() - /// }, - /// BlockFace::East => ElementFace { - /// texture: Texture::from("#side"), - /// ..Default::default() - /// }, - /// BlockFace::West => ElementFace { - /// texture: Texture::from("#side"), - /// ..Default::default() - /// } - /// }, - /// ..Default::default() - /// } - /// ]), - /// ..Default::default() - /// }; - /// - /// let child = Model { - /// textures: Some(Textures::from(hashmap! { - /// "up" => "textures/up", - /// "side" => "textures/side" - /// })), - /// ..Default::default() - /// }; - /// - /// let expected = Model { - /// textures: Some(Textures::from(hashmap! { - /// "up" => "textures/up", - /// "down" => "textures/side", - /// "side" => "textures/side" - /// })), - /// elements: Some(vec![ - /// Element { - /// faces: hashmap! { - /// BlockFace::Up => ElementFace { - /// texture: Texture::from("textures/up"), - /// ..Default::default() - /// }, - /// BlockFace::Down => ElementFace { - /// texture: Texture::from("textures/side"), - /// ..Default::default() - /// }, - /// BlockFace::East => ElementFace { - /// texture: Texture::from("textures/side"), - /// ..Default::default() - /// }, - /// BlockFace::West => ElementFace { - /// texture: Texture::from("textures/side"), - /// ..Default::default() - /// } - /// }, - /// ..Default::default() - /// } - /// ]), - /// ..Default::default() - /// }; - /// - /// let resolved = ModelResolver::resolve_model([&child, &parent].into_iter()); - /// - /// assert_eq!(resolved, expected); - /// ``` - pub fn resolve_model<'a>(models: impl IntoIterator + Clone) -> Model { - let textures = Self::resolve_textures(models.clone()); - let mut elements = Self::resolve_elements(models.clone()); - - if let Some(ref mut elements) = elements { - Self::resolve_element_textures(elements, &textures); - } - - let display = Self::resolve_display(models.clone()); - let ambient_occlusion = Self::resolve_ambient_occlusion(models.clone()); - let gui_light_mode = Self::resolve_gui_light_mode(models.clone()); - let overrides = models.into_iter().next().unwrap().overrides.clone(); - - Model { - parent: None, - display, - textures: Some(textures), - elements, - ambient_occlusion, - gui_light_mode, - overrides, - } - } - - /// Iterates through a [`Model`] and all of its parents to resolve all of - /// the model's [texture variables]. - /// - /// This works by merging together the [`Textures`] maps from all models in - /// the parent-child chain, and then substituting texture variables with - /// concrete values where possible. - /// - /// [texture variables]: Textures#texture-variables - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::{ModelResolver}; - /// use maplit::hashmap; - /// - /// use minecraft_assets::schemas::models::{Model, Textures}; - /// - /// let child = Model { - /// textures: Some(Textures::from(hashmap! { - /// "child_texture" => "textures/child", - /// "bar" => "#parent_texture" - /// })), - /// ..Default::default() - /// }; - /// - /// let parent = Model { - /// textures: Some(Textures::from(hashmap! { - /// "parent_texture" => "textures/parent", - /// "foo" => "#child_texture" - /// })), - /// ..Default::default() - /// }; - /// - /// // Provide models in increasing level of parenthood. - /// let models = [child, parent]; - /// let resolved = ModelResolver::resolve_textures(models.iter()); - /// - /// let expected = Textures::from(hashmap! { - /// "parent_texture" => "textures/parent", - /// "foo" => "textures/child", // <------- resolved - /// "child_texture" => "textures/child", - /// "bar" => "textures/parent" // <------- resolved - /// }); - /// - /// assert_eq!(resolved, expected); - /// ``` - pub fn resolve_textures<'a>(models: impl IntoIterator) -> Textures { - let mut textures = Textures::default(); - - for model in models.into_iter() { - if let Some(mut parent_textures) = model.textures.clone() { - // Resolve variables in the parent using the child textures first. - parent_textures.resolve(&textures); - - // Then resolve variables in the child using the parent textures. - textures.resolve(&parent_textures); - - // Merge the **child** into the parent. - std::mem::swap(&mut textures, &mut parent_textures); - textures.merge(parent_textures.clone()); - } - } - - textures - } - - /// Iterates through a [`Model`] and all of its parents to resolve the - /// model's cuboid [`Element`]s. - /// - /// This works by taking the first set of elements present in the chain of - /// parents. Unlike textures, child definitions for model elements - /// completely override elements from the parent(s). - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::{ModelResolver}; - /// use minecraft_assets::schemas::models::{Model, Element}; - /// - /// let element1 = Element { - /// from: [0.0, 0.0, 0.0], - /// to: [1.0, 1.0, 1.0], - /// ..Default::default() - /// }; - /// - /// let element2 = Element { - /// from: [5.0, 6.0, 7.0], - /// to: [4.0, 3.0, 2.0], - /// ..Default::default() - /// }; - /// - /// let model1 = Model { - /// elements: Some(vec![element1.clone()]), - /// ..Default::default() - /// }; - /// - /// let model2 = Model { - /// elements: Some(vec![element2.clone()]), - /// ..Default::default() - /// }; - /// - /// let empty = Model::default(); - /// - /// let resolved = ModelResolver::resolve_elements([&empty, &model1].into_iter()); - /// assert_eq!(resolved, Some(vec![element1.clone()])); - /// - /// let resolved = ModelResolver::resolve_elements([&empty, &model2].into_iter()); - /// assert_eq!(resolved, Some(vec![element2.clone()])); - /// - /// let resolved = ModelResolver::resolve_elements([&model1, &model2].into_iter()); - /// assert_eq!(resolved, Some(vec![element1.clone()])); - /// - /// let resolved = ModelResolver::resolve_elements([&model2, &model1].into_iter()); - /// assert_eq!(resolved, Some(vec![element2.clone()])); - /// - /// let resolved = ModelResolver::resolve_elements([&empty, &empty].into_iter()); - /// assert_eq!(resolved, None); - /// ``` - pub fn resolve_elements<'a>( - models: impl IntoIterator, - ) -> Option> { - Self::first_model_where_some(models, |model| model.elements.as_ref()).cloned() - } - - /// Iterates through each [`ElementFace`] in each [`Element`] and resolves - /// any texture variables using the provided map. - /// - /// [`ElementFace`]: crate::schemas::models::ElementFace - pub fn resolve_element_textures<'a>( - elements: impl IntoIterator, - textures: &Textures, - ) { - for element in elements.into_iter() { - for face in element.faces.values_mut() { - if let Some(substitution) = face.texture.resolve(textures) { - face.texture = Texture::from(substitution); - } - } - } - } - - /// Iterates through a [`Model`] and all of its parents to resolve the - /// model's [`Display`] properties. - /// - /// Similar to [`elements`] works by taking the first set of properties - /// present in the chain of parents. - /// - /// [`elements`]: Self::resolve_elements - pub fn resolve_display<'a>(models: impl IntoIterator) -> Option { - Self::first_model_where_some(models, |model| model.display.as_ref()).cloned() - } - - /// Iterates through a [`Model`] and all of its parents to resolve the - /// model's ambient occlusion setting. - /// - /// Similar to [`elements`] works by taking the first property value present - /// in the chain of parents. - /// - /// [`elements`]: Self::resolve_elements - pub fn resolve_ambient_occlusion<'a>( - models: impl IntoIterator, - ) -> Option { - Self::first_model_where_some(models, |model| model.ambient_occlusion.as_ref()).copied() - } - - /// Iterates through a [`Model`] and all of its parents to resolve the - /// model's GUI light mode setting. - /// - /// Similar to [`elements`] works by taking the first property value present - /// in the chain of parents. - /// - /// [`elements`]: Self::resolve_elements - pub fn resolve_gui_light_mode<'a>( - models: impl IntoIterator, - ) -> Option { - Self::first_model_where_some(models, |model| model.gui_light_mode.as_ref()).copied() - } - - fn first_model_where_some<'a, F, T>( - models: impl IntoIterator, - mut op: F, - ) -> Option<&'a T> - where - F: FnMut(&'a Model) -> Option<&'a T>, - { - for model in models.into_iter() { - if let Some(item) = op(model) { - return Some(item); - } - } - - None - } -} diff --git a/blockworld-utils/src/assets_reader/api/resource/category.rs b/blockworld-utils/src/assets_reader/api/resource/category.rs deleted file mode 100644 index 09bd851..0000000 --- a/blockworld-utils/src/assets_reader/api/resource/category.rs +++ /dev/null @@ -1,31 +0,0 @@ -/// The category of a resource. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub enum ResourceCategory { - /// Resources located in the `assets/` directory. - Assets, - - /// Resource located in the `data/` directory. - Data, -} - -impl ResourceCategory { - /// Returns the name of the top-level directory containing this category of - /// resource. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let category = ResourceCategory::Assets; - /// assert_eq!(category.directory(), "assets"); - /// - /// let category = ResourceCategory::Data; - /// assert_eq!(category.directory(), "data"); - /// ``` - pub fn directory(&self) -> &'static str { - match self { - Self::Assets => "assets", - Self::Data => "data", - } - } -} diff --git a/blockworld-utils/src/assets_reader/api/resource/identifier.rs b/blockworld-utils/src/assets_reader/api/resource/identifier.rs deleted file mode 100644 index 84815be..0000000 --- a/blockworld-utils/src/assets_reader/api/resource/identifier.rs +++ /dev/null @@ -1,408 +0,0 @@ -use std::{borrow::Cow, fmt, hash::Hash}; - -#[allow(missing_docs)] -pub const MINECRAFT_NAMESPACE: &str = "minecraft"; - -use crate::io::assets_reader::api::{ModelIdentifier, ResourceKind}; - -/// A namespaced, typed resource identifier. -/// -/// [`ResourceIdentifiers`] reference blocks, items, entity types, recipes, -/// functions, advancements, tags, and various other objects in Minecraft. -/// -/// A valid resource identifier has a format of `"namespace:path"`. If the -/// `namespace` portion is left out, then `"minecraft"` is the implied -/// namespace. -/// -/// Some examples: -/// -/// ```txt -/// "block/stone" -/// "minecraft:diamond_hoe" -/// "foo:bar/baz" -/// ``` -/// -/// Read more on the [wiki]. -/// -/// # Borrowing / Ownership -/// -/// To avoid cloning / [`String`] construction when not necessary, this type can -/// either borrow or take ownership of the underlying string. -/// -/// By default, no copying or allocating is done. You must call -/// [`to_owned()`][Self::to_owned] to get an owned identifier. -/// -/// # Strong Typing -/// -/// The string representation of a [`ResourceIdentifier`] does not provide -/// enough information to figure out the full path to a given resource. For -/// example, `"block/kelp"` may refer to any of the following: -/// * `assets/minecraft/models/block/kelp.json` -/// * `assets/minecraft/textures/block/kelp.png` -/// * `assets/minecraft/textures/block/kelp.png.mcmeta` -/// -/// Because of this, [`ResourceIdentifier`] requires you to specify a -/// [`ResourceKind`] upon construction. Thus, the identifier is "strongly -/// typed." -/// -/// This also solves an issue with how model identifiers are formatted in -/// resource packs prior to 1.13. See the [`ModelIdentifier`] docs for more -/// information. -/// -/// [wiki]: -/// [`ResourceIdentifiers`]: ResourceIdentifier -#[derive(Clone)] -pub struct ResourceIdentifier<'a> { - id: Cow<'a, str>, - kind: ResourceKind, -} - -impl<'a> ResourceIdentifier<'a> { - /// Constructs a new [`ResourceIdentifier`] from the given type and id. - /// - /// The `id` string will be **borrowed**. You can either use [`to_owned()`] - /// to convert the id to an owned representation, or construct on - /// directly using [`new_owned()`]. - /// - /// [`to_owned()`]: Self::to_owned - /// [`new_owned()`]: Self::new_owned - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::new(ResourceKind::BlockModel, "oak_stairs"); - /// ``` - pub fn new(kind: ResourceKind, id: &'a str) -> Self { - Self { - id: Cow::Borrowed(id), - kind, - } - } - - /// Like [`new()`], but returns a [`ResourceIdentifier`] that owns its - /// internal string. - /// - /// [`new()`]: Self::new - pub fn new_owned(kind: ResourceKind, id: String) -> ResourceIdentifier<'static> { - ResourceIdentifier { - id: Cow::Owned(id), - kind, - } - } - - /// Constructs a new [`ResourceIdentifier`] referencing the [`BlockStates`] of - /// the given block id. - /// - /// [`BlockStates`]: ResourceKind::BlockStates - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::blockstates("stone"); - /// let id = ResourceIdentifier::blockstates("minecraft:dirt"); - /// ``` - pub fn blockstates(block_id: &'a str) -> Self { - Self::new(ResourceKind::BlockStates, block_id) - } - - /// Constructs a new [`ResourceIdentifier`] referencing the [`BlockModel`] of - /// the given block id. - /// - /// [`BlockModel`]: ResourceKind::BlockModel - pub fn block_model(block_id: &'a str) -> Self { - Self::new(ResourceKind::BlockModel, block_id) - } - - /// Constructs a new [`ResourceIdentifier`] referencing the [`ItemModel`] of - /// the given item id. - /// - /// [`ItemModel`]: ResourceKind::ItemModel - pub fn item_model(item_id: &'a str) -> Self { - Self::new(ResourceKind::ItemModel, item_id) - } - - /// Constructs a new [`ResourceIdentifier`] referencing the [`Texture`] - /// located at the given path. - /// - /// [`Texture`]: ResourceKind::Texture - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::texture("block/stone"); - /// let id = ResourceIdentifier::texture("item/diamond_hoe"); - pub fn texture(path: &'a str) -> Self { - Self::new(ResourceKind::Texture, path) - } - - /// Returns the underlying identifier as a string slice. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::blockstates("stone"); - /// assert_eq!(id.as_str(), "stone"); - /// - /// let id = ResourceIdentifier::blockstates("minecraft:dirt"); - /// assert_eq!(id.as_str(), "minecraft:dirt"); - /// ``` - pub fn as_str(&self) -> &str { - &self.id - } - - /// Returns whether or not this resource id includes an explicit - /// namespace. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::blockstates("foo:bar"); - /// assert!(id.has_namespace()); - /// - /// let id = ResourceIdentifier::blockstates("bar"); - /// assert!(!id.has_namespace()); - /// ``` - pub fn has_namespace(&self) -> bool { - self.colon_position().is_some() - } - - /// Returns the namespace portion of the resource identifier, or - /// `"minecraft"` if it does not have an explicit namespace. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::blockstates("foo:bar"); - /// assert_eq!(id.namespace(), "foo"); - /// - /// let id = ResourceIdentifier::blockstates("bar"); - /// assert_eq!(id.namespace(), "minecraft"); - /// - /// let id = ResourceIdentifier::blockstates(":bar"); - /// assert_eq!(id.namespace(), ""); - /// ``` - pub fn namespace(&self) -> &str { - self.colon_position() - .map(|index| &self.id[..index]) - .unwrap_or_else(|| MINECRAFT_NAMESPACE) - } - - /// Returns the path portion of the resource id. - /// - /// # Note on Models - /// - /// For [`BlockModel`] or [`ItemModel`] resources, the name will **not** - /// include any leading prefix like `block/` or `item/`. See the - /// [`ModelIdentifier`] documentation for more information. - /// - /// [`BlockModel`]: ResourceKind::BlockModel - /// [`ItemModel`]: ResourceKind::ItemModel - pub fn path(&self) -> &str { - if self.is_model() { - ModelIdentifier::model_name(self.raw_path()) - } else { - self.raw_path() - } - } - - fn raw_path(&self) -> &str { - self.colon_position() - .map(|index| &self.id[index + 1..]) - .unwrap_or_else(|| &self.id) - } - - /// Returns what kind of resource is referenced by this id. - pub fn kind(&self) -> ResourceKind { - self.kind - } - - /// Returns true if the resource id refers to a built-in resource. - /// - /// If `true`, then there is no corresponding file that contains the - /// resource. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::item_model("builtin/generated"); - /// assert!(id.is_builtin()); - /// ``` - pub fn is_builtin(&self) -> bool { - if self.is_model() { - ModelIdentifier::is_builtin(&self.id) - } else { - false - } - } - - /// Returns a new id with a canonical representation (i.e., - /// containing an explicit namespace). - /// - /// This will involve allocating a new [`String`] if `self` does not already - /// contain an explicit namespace. - /// - /// # Examples - /// - /// Prepends the default namespace when one is not present: - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::blockstates("stone"); - /// let canonical = id.to_canonical(); - /// - /// assert_eq!(canonical.as_str(), "minecraft:stone"); - /// ``` - /// - /// Performs a shallow copy when a namespace is already present: - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::blockstates("foo:bar"); - /// let canonical = id.to_canonical(); - /// - /// assert_eq!(canonical.as_str(), "foo:bar"); - /// - /// // Prove that it was a cheap copy. - /// assert_eq!( - /// id.as_str().as_ptr() as usize, - /// canonical.as_str().as_ptr() as usize, - /// ); - /// ``` - /// - /// Prepends `block/` or `item/` for models if missing: - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let id = ResourceIdentifier::item_model("minecraft:diamond_hoe"); - /// let canonical = id.to_canonical(); - /// - /// assert_eq!(canonical.as_str(), "minecraft:item/diamond_hoe"); - /// ``` - pub fn to_canonical(&self) -> ResourceIdentifier<'a> { - if self.has_namespace() - && (!self.is_model() - || self.path().starts_with("item/") - || self.path().starts_with("block/")) - { - self.clone() - } else { - let namespace = self.namespace(); - let path = self.canonical_path(); - - let canonical = format!("{}:{}", namespace, path); - Self { - id: Cow::Owned(canonical), - kind: self.kind, - } - } - } - - fn canonical_path(&self) -> Cow<'_, str> { - match self.kind { - ResourceKind::BlockModel if !self.path().starts_with("block/") => { - Cow::Owned(format!("block/{}", self.path())) - } - ResourceKind::ItemModel if !self.path().starts_with("item/") => { - Cow::Owned(format!("item/{}", self.path())) - } - _ => Cow::Borrowed(self.path()), - } - } - - /// Returns a new [`ResourceIdentifier`] that owns the underlying string. - /// - /// This is useful for, e.g., storing the id in a data structure or - /// passing it to another thread. - /// - /// By default, all `ResourceIdentifier`s borrow the string they are - /// constructed with, so no copying will occur unless you call this - /// function. - /// - /// # Examples - /// - /// Constructing an id using [`From`] simply borrows the data: - /// - /// ```compile_fail - /// # use minecraft_assets::api::*; - /// let string = String::new("my:resource"); - /// - /// let id = ResourceIdentifier::from(&string); - /// - /// // Location borrows data from `string`, cannot be sent across threads. - /// std::thread::spawn(move || println!("{}", id)); - /// ``` - /// - /// Calling [`to_owned()`][Self::to_owned] on the id allows it to be - /// sent to the thread: - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let string = "my:resource".to_string(); - /// - /// let id = ResourceIdentifier::blockstates(&string); - /// let id = id.to_owned(); - /// - /// std::thread::spawn(move || println!("{}", id)); - /// ``` - pub fn to_owned(&self) -> ResourceIdentifier<'static> { - ResourceIdentifier { - id: Cow::Owned(self.id.clone().into_owned()), - kind: self.kind, - } - } - - pub(crate) fn is_model(&self) -> bool { - matches!( - self.kind, - ResourceKind::BlockModel | ResourceKind::ItemModel - ) - } - - fn colon_position(&self) -> Option { - self.id.chars().position(|c| c == ':') - } -} - -impl<'a> PartialEq for ResourceIdentifier<'a> { - fn eq(&self, other: &Self) -> bool { - self.kind == other.kind - && self.namespace() == other.namespace() - && self.path() == other.path() - } -} - -impl<'a> Eq for ResourceIdentifier<'a> {} - -impl<'a> Hash for ResourceIdentifier<'a> { - fn hash(&self, state: &mut H) { - self.namespace().hash(state); - self.path().hash(state); - self.kind.hash(state); - } -} - -impl<'a> AsRef for ResourceIdentifier<'a> { - fn as_ref(&self) -> &str { - &self.id - } -} - -impl<'a> fmt::Debug for ResourceIdentifier<'a> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let kind = format!("{:?}", self.kind); - write!(f, "{}({:?})", kind, &self.id) - } -} - -impl<'a> fmt::Display for ResourceIdentifier<'a> { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "{}", self.to_canonical().as_str()) - } -} diff --git a/blockworld-utils/src/assets_reader/api/resource/kind.rs b/blockworld-utils/src/assets_reader/api/resource/kind.rs deleted file mode 100644 index 2dfd1b0..0000000 --- a/blockworld-utils/src/assets_reader/api/resource/kind.rs +++ /dev/null @@ -1,67 +0,0 @@ -use crate::io::assets_reader::api::ResourceCategory; - -/// The type of a resource. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] -pub enum ResourceKind { - /// Resources (`.json`) in `assets//blockstates/`. - BlockStates, - - /// Resources (`.json`) in `assets//models/block/`. - BlockModel, - - /// Resources (`.json`) in `assets//models/item/`. - ItemModel, - - /// Resources (`.png`) in `assets//textures/`. - Texture, - - /// Resources (`.png.mcmeta`) in `assets//textures/`. - TextureMeta, -} - -impl ResourceKind { - /// Returns the category of this resource type (assets or data). - pub fn category(&self) -> ResourceCategory { - match self { - Self::BlockStates - | Self::BlockModel - | Self::ItemModel - | Self::Texture - | Self::TextureMeta => ResourceCategory::Assets, - } - } - - /// Returns the file extension used for this resource's file. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// let kind = ResourceKind::BlockStates; - /// assert_eq!(kind.extension(), "json"); - /// - /// let kind = ResourceKind::Texture; - /// assert_eq!(kind.extension(), "png"); - /// - /// let kind = ResourceKind::TextureMeta; - /// assert_eq!(kind.extension(), "png.mcmeta"); - /// ``` - pub fn extension(&self) -> &'static str { - match self { - Self::BlockStates | Self::BlockModel | Self::ItemModel => "json", - Self::Texture => "png", - Self::TextureMeta => "png.mcmeta", - } - } - - /// Returns the path relative to `assets//` or - /// `data//` in which resources of this type reside. - pub fn directory(&self) -> &'static str { - match self { - Self::BlockStates => "blockstates", - Self::BlockModel => "models/block", - Self::ItemModel => "models/item", - Self::Texture | Self::TextureMeta => "textures", - } - } -} diff --git a/blockworld-utils/src/assets_reader/api/resource/mod.rs b/blockworld-utils/src/assets_reader/api/resource/mod.rs deleted file mode 100644 index 114374a..0000000 --- a/blockworld-utils/src/assets_reader/api/resource/mod.rs +++ /dev/null @@ -1,11 +0,0 @@ -mod category; -mod identifier; -mod kind; -mod model_identifier; -mod path; - -pub use category::ResourceCategory; -pub use identifier::{ResourceIdentifier, MINECRAFT_NAMESPACE}; -pub use kind::ResourceKind; -pub use model_identifier::ModelIdentifier; -pub use path::ResourcePath; diff --git a/blockworld-utils/src/assets_reader/api/resource/model_identifier.rs b/blockworld-utils/src/assets_reader/api/resource/model_identifier.rs deleted file mode 100644 index fc7396a..0000000 --- a/blockworld-utils/src/assets_reader/api/resource/model_identifier.rs +++ /dev/null @@ -1,55 +0,0 @@ -/// Helper methods for dealing with model identifiers. -/// -/// # Why does this exist? -/// -/// Prior to 1.13, model identifiers found in -/// `assets//blockstates/*.json` did not include a prefix like -/// `block/` or `item/` to disambiguate between different types of models. -/// -/// Because of this, the `minecraft-assets` API forces the user to always -/// specify which type of model they are trying to reference (note the existence -/// of both [`BlockModel`] and [`ItemModel`] variants in [`ResourceKind`]). This -/// way, the API will work with versions prior to 1.13. -/// -/// So this struct is meant to wrap an identifier and extract its model name. -/// See the [`model_name()`] documentation for more information. -/// -/// [`ResourceKind`]: crate::api::ResourceKind -/// [`BlockModel`]: crate::api::ResourceKind::BlockModel -/// [`ItemModel`]: crate::api::ResourceKind::ItemModel -/// [`model_name()`]: Self::model_name -#[derive(Debug, Clone, Hash)] -pub struct ModelIdentifier; - -impl ModelIdentifier { - /// Returns the name of the model, stripping the leading path component if - /// there is one. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::api::*; - /// assert_eq!(ModelIdentifier::model_name("stone"), "stone"); - /// assert_eq!(ModelIdentifier::model_name("block/oak_planks"), "oak_planks"); - /// assert_eq!(ModelIdentifier::model_name("item/diamond_hoe"), "diamond_hoe"); - /// ``` - pub fn model_name(id: &str) -> &str { - Self::slash_position(id) - .map(|index| &id[index + 1..]) - .unwrap_or_else(|| id) - } - - pub(crate) fn is_builtin(id: &str) -> bool { - match Self::slash_position(id) { - Some(index) => { - let prefix = &id[..index]; - prefix == "builtin" - } - None => false, - } - } - - fn slash_position(id: &str) -> Option { - id.chars().position(|c| c == '/') - } -} diff --git a/blockworld-utils/src/assets_reader/api/resource/path.rs b/blockworld-utils/src/assets_reader/api/resource/path.rs deleted file mode 100644 index 772717a..0000000 --- a/blockworld-utils/src/assets_reader/api/resource/path.rs +++ /dev/null @@ -1,72 +0,0 @@ -use std::{ - ops::{Deref, DerefMut}, - path::{Path, PathBuf}, -}; - -use crate::io::assets_reader::api::{ResourceIdentifier, ResourceKind}; - -/// Represents the full path to a resource, e.g., on the local file system. -pub struct ResourcePath(PathBuf); - -impl ResourcePath { - /// Returns the full path to the given resource. - /// - /// The `root` argument should be the path to the directory containing the - /// `assets/` and (optionally) `data/` directories. - /// - /// **NOTE:** no validation of the path is performed. The returned path may - /// not point to an existing file. This method simply computes what the path - /// should be for a given resource. - pub fn for_resource(root: impl AsRef, resource: &ResourceIdentifier) -> Self { - let mut path = Self::for_kind(root, resource.namespace(), resource.kind()); - - path.push(resource.path()); - - Self(path.with_extension(resource.kind().extension())) - } - - /// Returns the full path to the directory that contains resources of the - /// given type for the given namespace. - /// - /// The `root` argument should be the path to the directory containing the - /// `assets/` and (optionally) `data/` directories. - /// - /// **NOTE:** no validation of the path is performed. The returned path may - /// not point to an existing directory. This method simply computes what the - /// path should be for a given resource type. - pub fn for_kind(root: impl AsRef, namespace: &str, kind: ResourceKind) -> Self { - let mut path = PathBuf::from(root.as_ref()); - - // `assets/` or `data/`. - path.push(kind.category().directory()); - path.push(namespace); - path.push(kind.directory()); - - Self(path) - } - - /// Consumes `self` and returns the inner [`PathBuf`]. - pub fn into_inner(self) -> PathBuf { - self.0 - } -} - -impl AsRef for ResourcePath { - fn as_ref(&self) -> &Path { - self.0.as_ref() - } -} - -impl Deref for ResourcePath { - type Target = PathBuf; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for ResourcePath { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} diff --git a/blockworld-utils/src/assets_reader/mod.rs b/blockworld-utils/src/assets_reader/mod.rs deleted file mode 100644 index 60416b3..0000000 --- a/blockworld-utils/src/assets_reader/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![doc = include_str!("README.md")] -#![warn(missing_docs)] - -pub mod api; -pub mod schemas; -pub mod versions; diff --git a/blockworld-utils/src/assets_reader/schemas/blockstates.rs b/blockworld-utils/src/assets_reader/schemas/blockstates.rs deleted file mode 100644 index 06afc80..0000000 --- a/blockworld-utils/src/assets_reader/schemas/blockstates.rs +++ /dev/null @@ -1,652 +0,0 @@ -//! Serde-(de)serializable data types for -//! `assets//blockstates/*.json`. -//! -//! Start here: [`BlockStates`] -//! -//! See . - -use std::collections::HashMap; - -use serde::{Deserialize, Serialize}; - -/// Block states as stored in the `assets//blockstates` directory. -/// -/// There are several different variants of some blocks (like [doors], which can -/// be open or closed), hence each block has its own [block state] file, which -/// lists all its existing variants and links them to their corresponding -/// models. -/// -/// Blocks can also be compound of several different models at the same -/// time, called "multipart". The models are then used depending on the block -/// states of the block. -/// -/// See also the corresponding section of the [wiki page]. -/// -/// [doors]: https://minecraft.fandom.com/wiki/Door -/// [block state]: https://minecraft.fandom.com/wiki/Block_state -/// [wiki page]: -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] -#[serde(untagged)] -pub enum BlockStates { - /// One way of representing the different states of a block. - /// - /// This uses a map from variant name to block variant. The variant name - /// consists of the relevant block states separated by commas, for example, - /// `"face=wall,facing=east,powered=false"`. - /// - /// A block with just one variant uses `""` as the name for its variant. - Variants { - /// Holds all the variants of the block by name. - variants: HashMap, - }, - - /// Another way of representing the different states of a block. - /// - /// This uses a list of "cases" that specify when a particular model should - /// apply. - Multipart { - /// Holds all the cases and the models that should apply in each case. - #[serde(rename = "multipart")] - cases: Vec, - }, -} - -impl BlockStates { - /// Returns the mapping from block states to [`Variant`]s, or `None` if the - /// block states are specified as [`Multipart`]. - /// - /// [`Multipart`]: Self::Multipart - pub fn variants(&self) -> Option<&HashMap> { - match self { - Self::Variants { ref variants } => Some(variants), - Self::Multipart { .. } => None, - } - } - - /// Returns the list of [`Case`]s that specify how to display the different - /// [`Variant`]s, or `None` if the block states are specified as - /// [`Variants`]. - /// - /// [`Case`]: multipart::Case - /// [`Variants`]: Self::Variants - pub fn cases(&self) -> Option<&[multipart::Case]> { - match self { - Self::Variants { .. } => None, - Self::Multipart { cases: multipart } => Some(&multipart[..]), - } - } - - /// Consumes `self` and returns a new [`BlockStates::Multipart`] where all - /// of the [`Variants`] have been converted to an equivalent [`Case`] - /// - /// [`Variants`]: Self::Variants - /// [`Case`]: multipart::Case - pub fn into_multipart(self) -> Vec { - match self { - Self::Multipart { cases } => cases, - - Self::Variants { variants } => { - if variants.len() == 1 { - let variant = variants - .into_iter() - .map(|(_, variant)| variant) - .next() - .unwrap(); - - let case = multipart::Case { - when: None, - apply: variant, - }; - - vec![case] - } else { - variants - .into_iter() - .map(|(state_values, variant)| { - let state_values: HashMap = state_values - .split(',') - .map(|state_value| { - let split: Vec<&str> = state_value.split('=').collect(); - (split[0], split[1]) - }) - .map(|(state, value)| { - (String::from(state), multipart::StateValue::from(value)) - }) - .collect(); - - let condition = multipart::Condition { and: state_values }; - - let when_clause = multipart::WhenClause::Single(condition); - - multipart::Case { - when: Some(when_clause), - apply: variant, - } - }) - .collect() - } - } - } - } -} - -impl Default for BlockStates { - fn default() -> Self { - Self::Variants { - variants: Default::default(), - } - } -} - -/// A block variant. -/// -/// Each variant can have **one model** or an **array of models** and contains -/// their properties. If set to an array, the model is chosen randomly from the -/// models contained in the array based on the `Model::weight` field. -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)] -#[serde(untagged)] -pub enum Variant { - /// A variant with only a single model to choose from. - Single(ModelProperties), - - /// A variant with multiple models to choose from. - Multiple(Vec), -} - -impl Default for Variant { - fn default() -> Self { - Self::Single(Default::default()) - } -} - -impl Variant { - /// Returns all of the possible [`ModelProperties`] choices for this variant - /// as a slice. - /// - /// The slice will contain one element for a [`Single`][Self::Single] - /// variant, and multiple for a [`Multiple`][Self::Multiple] variant. - pub fn models(&self) -> &[ModelProperties] { - match self { - Self::Single(model) => std::slice::from_ref(model), - Self::Multiple(models) => &models[..], - } - } -} - -/// Contains the properties of a model that is used to render all or part of a -/// block in a particular state. -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)] -pub struct ModelProperties { - /// Specifies the path to the model file of the block, in the form of a - /// [resource location]. - /// - /// # Version note - /// - /// In version 1.13 and beyond, this path includes a prefix such as `block/` - /// or `item/` to disambiguate between different model types. Versions prior - /// to 1.13 do not include this. - /// - /// See the [`ModelIdentifier`] documentation for more information. - /// - /// [resource location]: - /// [`ModelIdentifier`]: crate::api::ModelIdentifier - pub model: String, - - /// Rotation of the model on the x-axis in increments of 90 degrees. - #[serde(default = "ModelProperties::default_rotation")] - pub x: i32, - - /// Rotation of the model on the y-axis in increments of 90 degrees. - #[serde(default = "ModelProperties::default_rotation")] - pub y: i32, - - /// Can be `true` or `false` (default). Locks the rotation of the texture of - /// a block, if set to `true`. This way the texture does not rotate with the - /// block when using the `x` and `y` fields above. - /// - /// See the example on the [wiki page]. - /// - /// [wiki page]: - #[serde(rename = "uvlock", default = "ModelProperties::default_uv_lock")] - pub uv_lock: bool, - - /// Sets the probability of the model for being used in the game. - /// - /// The weight defaults to 1 (=100%). If more than one model is used for the - /// same variant, the probability is calculated by dividing the individual - /// model's weight by the sum of the weights of all models. (For example, if - /// three models are used with weights 1, 1, and 2, then their combined - /// weight would be 4 (1+1+2). The probability of each model being used - /// would then be determined by dividing each weight by 4: 1/4, 1/4 and 2/4, - /// or 25%, 25% and 50%, respectively.) - #[serde(default = "ModelProperties::default_weight")] - pub weight: u32, -} - -impl ModelProperties { - pub(crate) const fn default_rotation() -> i32 { - 0 - } - - pub(crate) const fn default_uv_lock() -> bool { - false - } - - pub(crate) const fn default_weight() -> u32 { - 1 - } -} - -impl Default for ModelProperties { - fn default() -> Self { - Self { - model: Default::default(), - x: Self::default_rotation(), - y: Self::default_rotation(), - uv_lock: Self::default_uv_lock(), - weight: Self::default_weight(), - } - } -} - -/// Types used to compose [`BlockStates::Multipart`]. -pub mod multipart { - use super::*; - - /// Specifies a case and the model that should apply in that case. - #[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq)] - pub struct Case { - /// A list of cases that have to be met for the model to be applied. - /// - /// If unset, the model always applies. - pub when: Option, - - /// Specifies the model(s) to apply and its properties. - pub apply: Variant, - } - - impl Case { - /// Returns `true` if the case applies given the provided state values. - /// - /// This can either be when `when` is `None` or if - /// [`WhenClause::applies`] is true. - pub fn applies<'a, I>(&self, state_values: I) -> bool - where - I: IntoIterator + Clone, - { - if let Some(ref when_clause) = self.when { - when_clause.applies(state_values) - } else { - true - } - } - } - - /// A list of conditions that have to be met for a model to be applied. - #[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] - #[serde(untagged)] - pub enum WhenClause { - /// A `when` clause that is true when the given condition is true. - Single(Condition), - - /// A `when` clause that is true when any of the given conditions is true. - Or { - /// The conditions in the `OR` clause. - #[serde(rename = "OR")] - or: Vec, - }, - } - - impl WhenClause { - /// Returns all of the [`Condition`]s of this when clause as a slice. - /// - /// The slice will contain one element for a [`Single`][Self::Single] - /// variant, and multiple for an [`Or`][Self::Or] variant. - pub fn conditions(&self) -> &[Condition] { - match self { - Self::Single(condition) => std::slice::from_ref(condition), - Self::Or { or } => &or[..], - } - } - - /// Returns `true` if any of the conditions specified by this `when` - /// clause are satisfied by the provided state values. - /// - /// See [`Condition::applies`]. - pub fn applies<'a, I>(&self, state_values: I) -> bool - where - I: IntoIterator + Clone, - { - self.conditions() - .iter() - .any(|condition| condition.applies(state_values.clone())) - } - } - - /// A set of conditions that **all** have to match the block to return true. - /// - /// The condition is structured as a map from `state` to `value`, so for instance: - /// - /// ```json - /// "when": {"north": "side|up", "east": "side|up" } - /// ``` - #[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq)] - pub struct Condition { - /// Map from state name to state value that forms the list of conditions. - #[serde(flatten)] - pub and: HashMap, - } - - impl Condition { - /// Returns `true` if - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::schemas::blockstates::multipart::*; - /// use maplit::hashmap; - /// - /// let condition = Condition { - /// and: hashmap! { - /// String::from("var1") => StateValue::from("foo|bar"), - /// String::from("var2") => StateValue::from(false), - /// }, - /// }; - /// - /// let foo_string = StateValue::from("foo"); - /// let other_string = StateValue::from("other"); - /// let true_string = StateValue::from("true"); - /// let false_string = StateValue::from("false"); - /// - /// let state_values = vec![ - /// ("var1", &foo_string), - /// ("var2", &false_string), - /// ("var3", &true_string), - /// ]; - /// assert!(condition.applies(state_values.into_iter())); - /// - /// let state_values = vec![ - /// ("var2", &false_string), - /// ]; - /// assert!(!condition.applies(state_values.into_iter())); - /// - /// let state_values = vec![ - /// ("var1", &other_string), - /// ("var2", &false_string), - /// ]; - /// assert!(!condition.applies(state_values.into_iter())); - /// ``` - pub fn applies<'a, I>(&self, state_values: I) -> bool - where - I: IntoIterator, - { - let state_values: HashMap<&'a str, &'a StateValue> = state_values.into_iter().collect(); - - self.and.iter().all(|(state, required_value)| { - state_values - .get(state.as_str()) - .map(|value| *required_value == **value) - .unwrap_or(false) - }) - } - } - - /// The right-hand side of a [`Condition`] requirement. - /// - /// ```txt - /// "when": {"north": "side|up", "east": false } - /// ^^^^^^^^^ ^^^^^ - /// ``` - #[derive(Deserialize, Serialize, Debug, Clone)] - #[serde(untagged)] - pub enum StateValue { - /// Unquoted bool value. - Bool(bool), - - /// String value (possibly boolean-like, i.e., `"true"` or `"false"`). - String(String), - } - - impl StateValue { - /// Returns the value interpreted as a bool, or `None` if this is not - /// possible. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::schemas::blockstates::multipart::*; - /// let value = StateValue::from(true); - /// assert_eq!(value.as_bool(), Some(true)); - /// - /// let value = StateValue::from(false); - /// assert_eq!(value.as_bool(), Some(false)); - /// - /// let value = StateValue::from("true"); - /// assert_eq!(value.as_bool(), Some(true)); - /// - /// let value = StateValue::from("false"); - /// assert_eq!(value.as_bool(), Some(false)); - /// - /// let value = StateValue::from("not_a_bool"); - /// assert_eq!(value.as_bool(), None); - /// ``` - pub fn as_bool(&self) -> Option { - match self { - Self::Bool(b) => Some(*b), - Self::String(s) if s == "true" => Some(true), - Self::String(s) if s == "false" => Some(false), - _ => None, - } - } - } - - /// # Examples - /// - /// Comparing to an unquoted boolean value: - /// - /// ``` - /// # use minecraft_assets::schemas::blockstates::multipart::*; - /// let left = StateValue::from(true); - /// - /// let right = StateValue::from(true); - /// assert!(left == right); - /// - /// let right = StateValue::from(false); - /// assert!(left != right); - /// - /// let right = StateValue::from("true"); - /// assert!(left == right); - /// - /// let right = StateValue::from("false"); - /// assert!(left != right); - /// - /// let right = StateValue::from("not_a_bool"); - /// assert!(left != right); - /// ``` - /// - /// Comparing to a quoted boolean value: - /// - /// ``` - /// # use minecraft_assets::schemas::blockstates::multipart::*; - /// let left = StateValue::from("true"); - /// - /// let right = StateValue::from(true); - /// assert!(left == right); - /// - /// let right = StateValue::from(false); - /// assert!(left != right); - /// ``` - /// - /// Comparing to a single string value: - /// - /// ``` - /// # use minecraft_assets::schemas::blockstates::multipart::*; - /// let left = StateValue::from("foo"); - /// - /// let right = StateValue::from("foo"); - /// assert!(left == right); - /// - /// let right = StateValue::from("bar"); - /// assert!(left != right); - /// - /// let right = StateValue::from(true); - /// assert!(left != right); - /// ``` - /// - /// Comparing to a multi-string value with `|` bars: - /// - /// ``` - /// # use minecraft_assets::schemas::blockstates::multipart::*; - /// let left = StateValue::from("foo|bar"); - /// - /// let right = StateValue::from("foo"); - /// assert!(left == right); - /// - /// let right = StateValue::from("bar"); - /// assert!(left == right); - /// - /// let right = StateValue::from("not_foo_or_bar"); - /// assert!(left != right); - /// ``` - impl PartialEq for StateValue { - fn eq(&self, other: &Self) -> bool { - match self { - Self::String(s) => { - match other { - Self::Bool(other_b) => { - self.as_bool().map(|b| b == *other_b).unwrap_or(false) - } - Self::String(other_s) => { - s == other_s - // Account for "or"s in this value (i.e., `|`). - || s.split('|').any(|s| s == other_s) - // Account for "or"s in the other value. - || other_s.split('|').any(|other_s| s == other_s) - } - } - } - Self::Bool(b) => { - if let Some(other_b) = other.as_bool() { - *b == other_b - } else { - false - } - } - } - } - } - - impl From for StateValue { - fn from(source: bool) -> Self { - Self::Bool(source) - } - } - - impl<'a> From<&'a str> for StateValue { - fn from(source: &'a str) -> Self { - Self::String(String::from(source)) - } - } - - impl From for StateValue { - fn from(source: String) -> Self { - Self::String(source) - } - } -} - -#[cfg(test)] -mod test { - use super::multipart::*; - use super::*; - - use maplit::hashmap; - - fn make_single_variant(model_name: &str) -> Variant { - Variant::Single(ModelProperties { - model: String::from(model_name), - ..Default::default() - }) - } - - fn do_test( - blockstates: BlockStates, - state_values: &HashMap, - expected_models: &[&'static str], - ) { - let cases = blockstates.into_multipart(); - - let actual_models = cases - .iter() - .filter(|case| { - case.applies( - state_values - .iter() - .map(|(state, value)| (state.as_str(), value)), - ) - }) - .flat_map(|case| case.apply.models()) - .map(|model_properties| model_properties.model.as_str()) - .collect::>(); - - assert_eq!(&actual_models[..], expected_models); - } - - #[test] - fn test_single_variant() { - let blockstates = BlockStates::Variants { - variants: hashmap! { - String::from("") => make_single_variant("model1"), - }, - }; - - let state_values = HashMap::default(); - - do_test(blockstates, &state_values, &["model1"]); - } - - #[test] - fn test_variants() { - let blockstates = BlockStates::Variants { - variants: hashmap! { - String::from("var1=foo,var2=true") => make_single_variant("model1"), - String::from("var1=foo,var2=false") => make_single_variant("model2"), - }, - }; - - let state_values = hashmap! { - String::from("var1") => StateValue::from("foo"), - String::from("var2") => StateValue::from("false"), - }; - - do_test(blockstates, &state_values, &["model2"]); - } - - #[test] - fn test_multipart() { - let blockstates = BlockStates::Multipart { - cases: vec![ - Case { - when: None, - apply: make_single_variant("model1"), - }, - Case { - when: Some(WhenClause::Single(Condition { - and: hashmap! { - String::from("var1") => StateValue::from("foo|bar"), - String::from("var2") => StateValue::from(true), - }, - })), - apply: make_single_variant("model2"), - }, - ], - }; - - let state_values = hashmap! { - String::from("var1") => StateValue::from("bar"), - String::from("var2") => StateValue::from("true"), - }; - - do_test(blockstates, &state_values, &["model1", "model2"]); - } -} diff --git a/blockworld-utils/src/assets_reader/schemas/mod.rs b/blockworld-utils/src/assets_reader/schemas/mod.rs deleted file mode 100644 index 1c0843d..0000000 --- a/blockworld-utils/src/assets_reader/schemas/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -//! Serde-(de)serializable data types for files in the Minecraft `assets/` -//! directory. - -pub mod blockstates; -pub mod models; - -pub use blockstates::BlockStates; -pub use models::Model; diff --git a/blockworld-utils/src/assets_reader/schemas/models.rs b/blockworld-utils/src/assets_reader/schemas/models.rs deleted file mode 100644 index 176592d..0000000 --- a/blockworld-utils/src/assets_reader/schemas/models.rs +++ /dev/null @@ -1,642 +0,0 @@ -//! Serde-(de)serializable data types for -//! `assets//models/{block,item}/*.json`. -//! -//! Start here: [`Model`]. -//! -//! See . - -use std::{ - collections::HashMap, - hash::Hash, - ops::{Deref, DerefMut}, -}; - -use serde::{Deserialize, Serialize}; - -/// A block or item model as stored in the -/// `assets//models/{block,item}/` directories. -/// -/// See also the corresponding section of the [wiki page] -/// -/// [wiki page]: -#[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq)] -pub struct Model { - /// Specifies that this model should inherit fields from the model at the - /// given [resource location]. If both `parent` and `elements` are set, the - /// `elements` field overrides the `elements` field from the parent model. - /// - /// For an item model, this can be set to a couple builtin values: - /// - /// * `"item/generated"`, to use a model that is created out of the item's - /// icon. - /// - /// * `"builtin/entity"`, to load a model from an entity file. - /// * As you cannot specify the entity, this does not work for all items - /// (only for chests, ender chests, mob heads, shields, banners and - /// tridents). - /// - /// [resource location]: - pub parent: Option, - - /// Contains the different places where item models are displayed in - /// different views. - pub display: Option, - - /// Contains the textures of the model. - pub textures: Option, - - /// Contains all the elements of the model. - /// - /// If both `parent` and `elements` are set, the `elements` tag overrides - /// the `elements` tag from the previous model. - pub elements: Option>, - - /// Whether to use ambient occlusion (`true` - default), or not (`false`). - /// - /// **Applies only to block models.** - #[serde(rename = "ambientocclusion")] - pub ambient_occlusion: Option, - - /// Specifies how to shade the model in the GUI. - /// - /// Can be `front` or `side`. If set to `side`, the model is rendered like a - /// block. If set to `front`, model is shaded like a flat item. Defaults to - /// `side`. - /// - /// **Applies only to item models.**[^1] - /// - /// [^1]: In versions >= 1.16.2, it appears that `block/block.json` also has - /// this field set. - #[serde(rename = "gui_light")] - pub gui_light_mode: Option, - - /// Specifies cases in which a different model should be used based on item - /// tags. - /// - /// All cases are evaluated in order from top to bottom and last predicate - /// that matches overrides. However, overrides are ignored if it has been - /// already overridden once, for example this avoids recursion on overriding - /// to the same model. - /// - /// **Applies only to item models.** - pub overrides: Option>, -} - -/// Specifies how a [`Model`] is displayed in different views. -#[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq)] -pub struct Display { - /// How the model is displayed when held in the right hand in third-person - /// view. - pub thirdperson_righthand: Option, - - /// How the model is displayed when held in the left hand in third-person - /// view. - pub thirdperson_lefthand: Option, - - /// How the model is displayed when held in the right hand in first-person - /// view. - pub firstperson_righthand: Option, - - /// How the model is displayed when held in the left hand in first-person - /// view. - pub firstperson_lefthand: Option, - - /// How the model is displayed in the GUI (e.g., in the inventory). - pub gui: Option, - - /// How the model is displayed when worn on the player's head. - pub head: Option, - - /// How the model is displayed when on the ground. - pub ground: Option, - - /// How the model is displayed in an item frame. - pub fixed: Option, -} - -/// Specifies the position, rotation, and scale at which a model is displayed. -/// -/// Note that translations are applied to the model before rotations. -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] -pub struct Transform { - /// Specifies the rotation of the model in degrees according to the scheme - /// `[x, y, z]`. - #[serde(default = "Transform::zeros")] - pub rotation: [f32; 3], - - /// Specifies the position of the model according to the scheme `[x, y, z]`. - /// - /// The unit of distance is **1/16th of a block** (0.0625 meters). - /// - /// The values should be clamped between -80 and 80. - #[serde(default = "Transform::zeros")] - pub translation: [f32; 3], - - /// Specifies the scale of the model according to the scheme `[x, y, z]`. - /// - /// If the value is greater than 4, it is displayed as 4. - #[serde(default = "Transform::ones")] - pub scale: [f32; 3], -} - -impl Transform { - pub(crate) const fn zeros() -> [f32; 3] { - [0.0; 3] - } - - pub(crate) const fn ones() -> [f32; 3] { - [1.0; 3] - } -} - -impl Default for Transform { - fn default() -> Self { - Self { - rotation: [0.0, 0.0, 0.0], - translation: [0.0, 0.0, 0.0], - scale: [1.0, 1.0, 1.0], - } - } -} - -/// Specifies the [`Texture`]s of a [`Model`]. -/// -/// ## Texture Variables -/// -/// A model's textures are specified as a set of named **texture variables**. -/// This allows the value of one texture variable to be set to the value of -/// another via reference, e.g., `"top": "#bottom"`. -/// -/// ## Builtin Texture Variables -/// -/// * **`particle`** -/// * What texture to load particles from. -/// * This texture is used if you are in a nether portal. -/// * Also used for water and lava's still textures. -/// * Applies to block and item models. -/// -/// * **`layerN`** -/// * Used to specify the icon of the item used in the inventory. -/// * There can be more than just one layer (e.g. for spawn eggs), but the -/// amount of possible layers is hardcoded for each item. -/// * Works only in combination with `"item/generated"`. -/// * Applies to item models. -/// -/// ## Example -/// -/// `block/cross.json` is the common parent of all saplings, and specifies that -/// the `particle` texture variable should take on the value of the `cross` -/// texture variable: -/// -/// ```json -/// { -/// "textures": { -/// "particle": "#cross" -/// }, -/// ... -/// } -/// ``` -/// -/// `block/oak_sapling.json` specifies a concrete location for the `cross` -/// texture variable: -/// -/// ```json -/// { -/// "parent": "block/cross", -/// "textures": { -/// "cross": "block/oak_sapling" -/// } -/// } -/// ``` -/// -/// [resource location]: -#[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq, Eq)] -pub struct Textures { - /// The values of all texture variables by name. - #[serde(flatten)] - pub variables: HashMap, -} - -impl Textures { - /// Attempts to resolve each of the texture variables in `self` using the - /// values present in `other`. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::schemas::models::*; - /// use maplit::hashmap; - /// - /// let mut textures = Textures::from(hashmap! { - /// "foo" => "#foobar", - /// "bar" => "#barvar" - /// }); - /// - /// textures.resolve(&Textures::from(hashmap! { - /// "barvar" => "herobrine", - /// })); - /// - /// let expected = Textures::from(hashmap! { - /// "foo" => "#foobar", - /// "bar" => "herobrine", - /// }); - /// - /// assert_eq!(textures, expected); - /// ``` - pub fn resolve(&mut self, other: &Self) { - for texture in self.values_mut() { - if let Some(substitution) = texture.resolve(other) { - *texture = Texture::from(substitution); - } - } - } - - /// Merges the values from `other` into `self`. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::schemas::models::*; - /// use maplit::hashmap; - /// - /// let mut textures = Textures::from(hashmap! { - /// "foo" => "#foobar", - /// "bar" => "#barvar" - /// }); - /// - /// textures.merge(Textures::from(hashmap! { - /// "foo" => "fooey", - /// "creeper" => "aw man" - /// })); - /// - /// let expected = Textures::from(hashmap! { - /// "foo" => "fooey", - /// "creeper" => "aw man", - /// "bar" => "#barvar" - /// }); - /// - /// assert_eq!(textures, expected); - /// ``` - pub fn merge(&mut self, other: Self) { - for (name, texture) in other.variables.into_iter() { - //println!("inserting: {:?}", (&name, &texture)); - self.insert(name, texture); - } - } -} - -impl From> for Textures -where - K: Into, - V: Into, -{ - fn from(source: HashMap) -> Self { - let variables = source - .into_iter() - .map(|(k, v)| (k.into(), v.into())) - .collect(); - Self { variables } - } -} - -impl Deref for Textures { - type Target = HashMap; - - fn deref(&self) -> &Self::Target { - &self.variables - } -} - -impl DerefMut for Textures { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.variables - } -} - -/// The value of a [texture variable] in the [`Textures`] map. -/// -/// The string value will either specify a [`location`] to load the texture from -/// or a [`reference`] to another texture variable to take its value from. -/// -/// [texture variable]: Textures#texture-variables -/// [`location`]: Self::location -/// [`reference`]: Self::reference -#[derive(Deserialize, Serialize, Debug, Default, Clone, PartialEq, Eq)] -pub struct Texture(pub String); - -impl Texture { - /// Returns the [resource location] of the texture, or `None` if the texture - /// should instead take on the value of another texture variable. - /// - /// [resource location]: - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::schemas::models::*; - /// let texture = Texture::from("texture/location"); - /// assert_eq!(texture.location(), Some("texture/location")); - /// - /// let texture = Texture::from("#another_var"); - /// assert_eq!(texture.location(), None); - pub fn location(&self) -> Option<&str> { - if self.0.starts_with('#') { - None - } else { - Some(&self.0[..]) - } - } - - /// Returns the name of the texture variable from which this texture should - /// get its value, or `None` if the texture should be loaded from a - /// resource. - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::schemas::models::*; - /// let texture = Texture::from("texture/location"); - /// assert_eq!(texture.reference(), None); - /// - /// let texture = Texture::from("#another_var"); - /// assert_eq!(texture.reference(), Some("another_var")); - /// ``` - pub fn reference(&self) -> Option<&str> { - if self.0.starts_with('#') { - Some(&self.0[1..]) - } else { - None - } - } - - /// Resolves this texture value using the variables present in `other`, or - /// returns `None` if: - /// * This texture value not reference another texture variable, or - /// * There is no variable in `other` that matches - /// - /// # Example - /// - /// ``` - /// # use minecraft_assets::schemas::models::*; - /// use maplit::hashmap; - /// - /// let substitutions = Textures::from(hashmap! { - /// "foo" => "textures/foo", - /// "bar" => "#another_var", - /// }); - /// - /// let texture = Texture::from("#foo"); - /// assert_eq!(texture.resolve(&substitutions), Some("textures/foo")); - /// - /// let texture = Texture::from("#bar"); - /// assert_eq!(texture.resolve(&substitutions), Some("#another_var")); - /// - /// let texture = Texture::from("#not_found"); - /// assert_eq!(texture.resolve(&substitutions), None); - /// - /// let texture = Texture::from("not_a_reference"); - /// assert_eq!(texture.resolve(&substitutions), None); - /// ``` - pub fn resolve<'a>(&'a self, substitutions: &'a Textures) -> Option<&'a str> { - if let Some(reference) = self.reference() { - if let Some(substitution) = substitutions.get(reference) { - return Some(&substitution.0); - } - } - None - } -} - -impl From for Texture { - fn from(source: String) -> Self { - Self(source) - } -} - -impl<'a> From<&'a str> for Texture { - fn from(source: &'a str) -> Self { - Self(String::from(source)) - } -} - -/// A single, cube-shaped element of a [`Model`]'s geometry. -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] -pub struct Element { - /// Start point of a cuboid according to the scheme `[x, y, z]`. - /// - /// Values must be between -16 and 32. - pub from: [f32; 3], - - /// Stop point of a cuboid according to the scheme `[x, y, z]`. - /// - /// Values must be between -16 and 32. - pub to: [f32; 3], - - /// Holds all the faces of the cuboid. If a face is left out, it does not - /// render. - pub faces: HashMap, - - /// The rotation of the element - #[serde(default)] - pub rotation: ElementRotation, - - /// Specifies if shadows are rendered (`true` - default), or not (`false`). - #[serde(default = "Element::default_shade")] - pub shade: bool, -} - -impl Element { - pub(crate) const fn default_shade() -> bool { - true - } -} - -impl Default for Element { - fn default() -> Self { - Self { - from: [0.0, 0.0, 0.0], - to: [16.0, 16.0, 16.0], - faces: Default::default(), - rotation: Default::default(), - shade: Self::default_shade(), - } - } -} - -/// Specifies the rotation of an [`Element`]. -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] -pub struct ElementRotation { - /// Sets the center of the rotation according to the scheme `[x, y, z]`. - pub origin: [f32; 3], - - /// Specifies the direction of rotation. - pub axis: Axis, - - /// Specifies the angle of rotation. - /// - /// Can be 45 through -45 degrees in 22.5 degree increments. - pub angle: f32, - - /// Specifies whether or not to scale the faces across the whole block. - /// - /// Defaults to `false`. - #[serde(default = "ElementRotation::default_rescale")] - pub rescale: bool, -} - -impl ElementRotation { - pub(crate) const fn default_rescale() -> bool { - false - } -} - -impl Default for ElementRotation { - fn default() -> Self { - Self { - origin: [0.0, 0.0, 0.0], - axis: Axis::X, - angle: 0.0, - rescale: Self::default_rescale(), - } - } -} - -/// Specifies the details of a single face in a cuboid [`Element`]. -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] -pub struct ElementFace { - /// Defines the area of the image that should be sampled for this texture. - /// - /// The UV coordinates are specified as `[x1, y1, x2, y2]`. - /// - /// UV is optional, and if not supplied it defaults to values equal to the - /// xyz position of the element. - /// - /// The texture behavior is inconsistent if UV extends below 0 or above 16. - /// If the numbers of `x1` and `x2` are swapped (e.g. from `0, 0, 16, 16` to - /// `16, 0, 0, 16`), the texture flips. - pub uv: Option<[f32; 4]>, - - /// Specifies the texture as [texture variable] prepended with a `#`. - /// - /// [texture variable]: Textures#texture-variables - pub texture: Texture, - - /// Specifies whether a face does not need to be rendered when there is a - /// block touching it in the specified position. - /// - /// The position can be: `down`, `up`, `north`, `south`, `west`, or `east`. - /// - /// It also determines the side of the block to use the light level from for - /// lighting the face, and if unset, defaults to the side. - /// - /// `bottom` may also be used in the latest versions instead of `down`, - /// despite appearing only once in the actual game assets. - #[serde(rename = "cullface")] - pub cull_face: Option, - - /// Rotates the texture by the specified number of degrees. - /// - /// Can be `0`, `90`, `180`, or `270`. Defaults to `0`. Rotation does not - /// affect which part of the texture is used. Instead, it amounts to a - /// permutation of the selected texture vertexes (selected implicitly, or - /// explicitly though `uv`). - #[serde(default = "ElementFace::default_rotation")] - pub rotation: u32, - - /// Determines whether to tint the texture using a hardcoded tint index. - /// - /// The default value, `-1`, indicates not to use the tint. Any other number - /// is provided to BlockColors to get the tint value corresponding to that - /// index. However, most blocks do not have a tint value defined (in which - /// case white is used). Furthermore, no vanilla block currently uses - /// multiple tint values, and thus the tint index value is ignored (as long - /// as it is set to something other than `-1`); it could be used for modded - /// blocks that need multiple distinct tint values in the same block though. - #[serde(rename = "tintindex", default = "ElementFace::default_tint_index")] - pub tint_index: i32, -} - -impl ElementFace { - pub(crate) const fn default_rotation() -> u32 { - 0 - } - - pub(crate) const fn default_tint_index() -> i32 { - -1 - } -} - -impl Default for ElementFace { - fn default() -> Self { - Self { - uv: Default::default(), - texture: Default::default(), - cull_face: Default::default(), - rotation: Self::default_rotation(), - tint_index: Self::default_tint_index(), - } - } -} - -/// One possible case in which an item's [`Model`] should be overridden. -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] -pub struct OverrideCase { - /// Specifies when this override should be active. - /// - /// See the [wiki page] for a list of possible item predicates. - /// - /// [wiki page]: - pub predicate: HashMap, - - /// The path to the model to use if the case is met, in form of a [resource - /// location]. - /// - /// [resource location]: - pub model: String, -} - -/// The value for an item tag specified in a predicate in an [`OverrideCase`]. -#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)] -#[serde(untagged)] -#[allow(missing_docs)] -pub enum PredicateValue { - Int(u32), - Float(f32), -} - -/// The two possible ways to shade a model in the UI. -#[derive(Deserialize, Serialize, Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[serde(rename_all = "lowercase")] -pub enum GuiLightMode { - /// Shade the model like a block. - Side, - - /// Shade the model like a flat item. - Front, -} - -/// The three possible axes in 3D space. -#[derive(Deserialize, Serialize, Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[serde(rename_all = "lowercase")] -#[allow(missing_docs)] -pub enum Axis { - X, - Y, - Z, -} - -/// The six possible faces of a cuboid. -#[derive(Deserialize, Serialize, Debug, Clone, Copy, PartialEq, Eq, Hash)] -#[serde(rename_all = "lowercase")] -#[allow(missing_docs)] -#[repr(u8)] -pub enum BlockFace { - // The format accepts two possible names for `"down"`. - #[serde(alias = "bottom")] - Down, - Up, - North, - South, - West, - East, -} diff --git a/blockworld-utils/src/assets_reader/versions.rs b/blockworld-utils/src/assets_reader/versions.rs deleted file mode 100644 index 8056583..0000000 --- a/blockworld-utils/src/assets_reader/versions.rs +++ /dev/null @@ -1,129 +0,0 @@ -//! Information about the different versions of Minecraft assets. -//! -//! **This documentation is a work in progress.** -//! -//! # The Flattening (1.13) -//! -//! **TODO** -//! -//! See the wiki page on [The Flattening]. -//! -//! # Assets / Resource Packs Changelog -//! -//! This information is taken directly from the Minecraft [wiki page]. -//! -//! #### Note on Pack Versions / Formats -//! -//! Although resource packs were introduced in 1.6.1[^1], the resource pack -//! format number was not enforced (introduced?) until 1.8.8-pre[^2]. -//! Additionally, the organization of assets (and even their format!) went -//! through multiple changes during pack format `1`. Notably, block/item models -//! were not supported until 1.8[^3][^4]. -//! -//! -//! ## Pack Format 1 -//! -//! #### 1.6.1 -//! -//! * Added resource packs, replacing the functionality of texture packs. -//! -//! #### 1.7.2 -//! -//! * Added the ability to apply multiple resource packs at once. -//! * Moved files from `assets/minecraft/music` to -//! `assets/minecraft/sounds/music` and files from `assets/minecraft/sound` to -//! `assets/minecraft/sounds`. -//! -//! #### 1.7.3 -//! -//! * The `description` value of `pack.mcmeta` can now be raw JSON text format. -//! -//! #### 1.7.4 -//! -//! * Removed the ability to change the Mojang logo. -//! -//! #### 1.8 -//! -//! * Added the ability to change the block and item models. -//! * Textures can now be specified for blocks and items. -//! * Added the `interpolate` tag for animations. -//! -//! #### 1.8.8 -//! -//! * Resource packs now display an error if the format number is wrong. At this -//! time, it requires a format number of 1. -//! -//! -//! ## Pack Format 2 -//! -//! #### 1.9 -//! -//! * Changed format number to `2`, due to changes in the model system, such as -//! item tags, multipart, and changes to display tags. -//! * **TODO:** Get more detailed information about these changes. -//! -//! ## Pack Format 3 -//! -//! #### 1.11 -//! -//! * Changed format number to `3`, due to the change that all files should have -//! lowercase letters. -//! -//! ## Pack Format 4 -//! -//! #### 1.13 -//! -//! * Changed format number to `4`, due to [The Flattening]. -//! -//! #### 1.14 -//! -//! * Particles textures are now split into individual files. -//! * Painting textures are now split into individual files. -//! * Status effect textures are now split into individual files. -//! * Particles are now configurable. -//! -//! ## Pack Format 5 -//! -//! #### 1.15 -//! -//! * Changed format number to `5`, due to texture mechanic changes in earlier -//! 1.14 snapshots. -//! -//! ## Pack Format 6 -//! -//! #### 1.16.2 -//! -//! * Changed format number to `6`, due to changes to wall blocks made in 1.16 -//! according to [MC-197275]. -//! -//! ## Pack Format 7 -//! -//! #### 1.17 -//! -//! * Changed format number to `7`. -//! * The file `credits.txt` in `assets/minecraft/texts` was changed to -//! `credits.json`, and the format also changed from plain text to structured -//! JSON format. -//! -//! ## Pack Format 8 -//! -//! #### 1.18 -//! -//! * Changed format number to `8`, because `inventory.png` now contains an -//! extra sprite for a thin-layout version of the effect list in the -//! inventory. -//! -//! -//! [wiki page]: -//! -//! [The Flattening]: https://minecraft.fandom.com/wiki/The_Flattening -//! -//! [MC-197275]: -//! -//! [^1]: -//! -//! [^2]: -//! -//! [^3]: -//! -//! [^4]: diff --git a/blockworld-utils/src/lib.rs b/blockworld-utils/src/lib.rs index 7d12d9a..c1c119d 100644 --- a/blockworld-utils/src/lib.rs +++ b/blockworld-utils/src/lib.rs @@ -1,14 +1,3 @@ -pub fn add(left: usize, right: usize) -> usize { - left + right -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); - } -} +pub mod registry; +pub mod resource_location; +pub mod text; diff --git a/blockworld-utils/src/registry.rs b/blockworld-utils/src/registry.rs new file mode 100644 index 0000000..e7662ef --- /dev/null +++ b/blockworld-utils/src/registry.rs @@ -0,0 +1,4 @@ +pub trait Registry { + fn get_object(key: K) -> V; + fn put_object(key: K, value: V); +} diff --git a/blockworld-utils/src/resource_location.rs b/blockworld-utils/src/resource_location.rs new file mode 100644 index 0000000..3f7fa17 --- /dev/null +++ b/blockworld-utils/src/resource_location.rs @@ -0,0 +1,33 @@ +#[derive(Default, Debug, Clone, PartialEq, Eq, Hash)] +pub struct ResourceLocation { + domain: String, + path: String, +} + +impl ResourceLocation { + pub fn new(id: &str) -> Self { + if let Some((a, b)) = id.split_once(':') { + Self { + domain: a.to_string(), + path: b.to_string(), + } + } else { + Self { + domain: "blockworld".to_string(), + path: id.to_string(), + } + } + } + + pub fn get_domain(&self) -> String { + self.domain.clone() + } + + pub fn get_path(&self) -> String { + self.domain.clone() + } + + pub fn to_string(&self) -> String { + format!("{}:{}", self.domain, self.path) + } +} diff --git a/blockworld-utils/src/text/mod.rs b/blockworld-utils/src/text/mod.rs new file mode 100644 index 0000000..8a6fdd6 --- /dev/null +++ b/blockworld-utils/src/text/mod.rs @@ -0,0 +1,35 @@ +use crate::resource_location::ResourceLocation; + +struct ClickEvent; +struct HoverEvent; + +struct Style { + pub color: i32, + pub bold: bool, + pub italic: bool, + pub underlined: bool, + pub strikethrough: bool, + pub obfuscated: bool, + pub font_id: ResourceLocation, + pub click_event: Option, + pub hover_event: Option, +} + +impl Default for Style { + fn default() -> Self { + Self { + color: 0, + bold: false, + italic: false, + underlined: false, + strikethrough: false, + obfuscated: false, + font_id: ResourceLocation::default(), + click_event: None, + hover_event: None, + } +} + +trait AbstractTextComponent { + fn get_string(&self) -> String; +}