From 808fd7924edc229c034f49fffe8904670f498180 Mon Sep 17 00:00:00 2001 From: SashegDev Date: Thu, 29 Oct 2026 22:06:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BB=D0=B8=D0=B5=D0=BD=D1=82:=20Rust-?= =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=20=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=82=D0=BE=D0=BA=D0=BE=D0=BB=20RSX?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Чекпойнт: Rust-меню, настройки, Play, пауза, ресурспаки, кейбинды, RSX-протокол, шрифты и иконки. Перед финальным пушем история будет разбита на логические коммиты. --- .../assets/rustui/icons/LICENSE.txt | 24 + .../assets/rustui/icons/activity.png | Bin 0 -> 964 bytes .../assets/rustui/icons/arrow-left.png | Bin 0 -> 342 bytes .../assets/rustui/icons/arrow-right.png | Bin 0 -> 327 bytes .../assets/rustui/icons/award.png | Bin 0 -> 1490 bytes .../assets/rustui/icons/bell.png | Bin 0 -> 739 bytes .../assets/rustui/icons/bot.png | Bin 0 -> 995 bytes .../assets/rustui/icons/boxes.png | Bin 0 -> 906 bytes .../assets/rustui/icons/chat-thread.png | Bin 0 -> 947 bytes .../assets/rustui/icons/check.png | Bin 0 -> 364 bytes .../assets/rustui/icons/chevron-down.png | Bin 0 -> 331 bytes .../assets/rustui/icons/chevron-right.png | Bin 0 -> 307 bytes .../assets/rustui/icons/circle-alert.png | Bin 0 -> 1287 bytes .../assets/rustui/icons/external-link.png | Bin 0 -> 714 bytes .../assets/rustui/icons/eye.png | Bin 0 -> 904 bytes .../assets/rustui/icons/globe.png | Bin 0 -> 1628 bytes .../assets/rustui/icons/hand.png | Bin 0 -> 835 bytes .../assets/rustui/icons/headphones.png | Bin 0 -> 838 bytes .../assets/rustui/icons/house.png | Bin 0 -> 935 bytes .../assets/rustui/icons/info.png | Bin 0 -> 1302 bytes .../assets/rustui/icons/keyboard.png | Bin 0 -> 607 bytes .../assets/rustui/icons/layers.png | Bin 0 -> 1293 bytes .../assets/rustui/icons/list.png | Bin 0 -> 665 bytes .../assets/rustui/icons/log-out.png | Bin 0 -> 569 bytes .../assets/rustui/icons/message-square.png | Bin 0 -> 750 bytes .../assets/rustui/icons/monitor.png | Bin 0 -> 561 bytes .../rustui/icons/mouse-pointer-click.png | Bin 0 -> 1104 bytes .../assets/rustui/icons/newspaper.png | Bin 0 -> 764 bytes .../assets/rustui/icons/package.png | Bin 0 -> 1103 bytes .../assets/rustui/icons/pin.png | Bin 0 -> 757 bytes .../assets/rustui/icons/play.png | Bin 0 -> 582 bytes .../assets/rustui/icons/plus.png | Bin 0 -> 295 bytes .../assets/rustui/icons/refresh-cw.png | Bin 0 -> 1023 bytes .../assets/rustui/icons/search.png | Bin 0 -> 1039 bytes .../assets/rustui/icons/server.png | Bin 0 -> 626 bytes .../assets/rustui/icons/settings-2.png | Bin 0 -> 987 bytes .../assets/rustui/icons/settings.png | Bin 0 -> 1385 bytes .../assets/rustui/icons/shield.png | Bin 0 -> 815 bytes .../assets/rustui/icons/shopping-cart.png | Bin 0 -> 1216 bytes .../rustui/icons/sliders-horizontal.png | Bin 0 -> 721 bytes .../assets/rustui/icons/sparkles.png | Bin 0 -> 1106 bytes .../assets/rustui/icons/star.png | Bin 0 -> 1171 bytes .../assets/rustui/icons/trash.png | Bin 0 -> 829 bytes .../assets/rustui/icons/type.png | Bin 0 -> 435 bytes .../assets/rustui/icons/user.png | Bin 0 -> 939 bytes .../assets/rustui/icons/users.png | Bin 0 -> 1303 bytes .../assets/rustui/icons/wand.png | Bin 0 -> 685 bytes .../assets/rustui/icons/wrench.png | Bin 0 -> 980 bytes .../horizon-client/assets/rustui/icons/x.png | Bin 0 -> 422 bytes crates/horizon-client/src/assets.rs | 2 +- crates/horizon-client/src/audio.rs | 8 +- crates/horizon-client/src/auth.rs | 2 +- crates/horizon-client/src/benchmark.rs | 4 +- crates/horizon-client/src/crafting.rs | 2 +- crates/horizon-client/src/crash.rs | 16 +- crates/horizon-client/src/discord_presence.rs | 14 +- crates/horizon-client/src/game.rs | 55 +- .../horizon-client/src/game/agent_settings.rs | 12 +- crates/horizon-client/src/game/chat.rs | 5 + .../src/game/commands/pregen.rs | 2 +- crates/horizon-client/src/game/dedicated.rs | 2 +- crates/horizon-client/src/game/dialogs.rs | 10 +- crates/horizon-client/src/game/extras.rs | 2 +- crates/horizon-client/src/game/functions.rs | 2 +- crates/horizon-client/src/game/growth.rs | 6 +- crates/horizon-client/src/game/integrated.rs | 6 +- crates/horizon-client/src/game/levels.rs | 2 +- crates/horizon-client/src/game/mods.rs | 10 +- .../horizon-client/src/game/moved_extras.rs | 2 +- crates/horizon-client/src/game/options.rs | 18 + crates/horizon-client/src/game/packs.rs | 4 +- crates/horizon-client/src/game/pad.rs | 2 +- .../horizon-client/src/game/pad/hardware.rs | 4 +- crates/horizon-client/src/game/pad_menu.rs | 2 +- crates/horizon-client/src/game/persist.rs | 2 +- crates/horizon-client/src/game/remote.rs | 8 +- .../horizon-client/src/game/remote_chunks.rs | 4 +- crates/horizon-client/src/game/screens.rs | 96 +- .../horizon-client/src/game/server_links.rs | 2 +- crates/horizon-client/src/game/server_mods.rs | 6 +- .../horizon-client/src/game/server_packs.rs | 10 +- .../horizon-client/src/game/startup_menu.rs | 2 +- .../horizon-client/src/game/world_loading.rs | 4 +- crates/horizon-client/src/gfx.rs | 38 +- crates/horizon-client/src/gfx/animate.rs | 4 +- crates/horizon-client/src/gfx/arena.rs | 2 +- crates/horizon-client/src/gfx/hdr.rs | 18 +- crates/horizon-client/src/gfx/occlusion.rs | 2 +- crates/horizon-client/src/gfx/panorama.rs | 2 +- crates/horizon-client/src/gfx/world_post.rs | 14 +- crates/horizon-client/src/heartbeat.rs | 4 +- crates/horizon-client/src/hud.rs | 9 +- crates/horizon-client/src/lib.rs | 3 + crates/horizon-client/src/locator_bar.rs | 2 +- crates/horizon-client/src/logging.rs | 8 +- crates/horizon-client/src/main.rs | 4 +- .../horizon-client/src/mobs/trial_spawner.rs | 2 +- crates/horizon-client/src/mod_content.rs | 4 +- crates/horizon-client/src/model_library.rs | 2 +- crates/horizon-client/src/models/catalog.rs | 4 +- crates/horizon-client/src/moved_extras.rs | 2 +- crates/horizon-client/src/offline_name.rs | 2 +- crates/horizon-client/src/options_ui.rs | 124 +- crates/horizon-client/src/rsx/buf.rs | 430 ++++ crates/horizon-client/src/rsx/frame.rs | 402 ++++ crates/horizon-client/src/rsx/mod.rs | 66 + crates/horizon-client/src/rsx/packets.rs | 1230 ++++++++++++ crates/horizon-client/src/rsx/session.rs | 654 ++++++ crates/horizon-client/src/rsx_terrain.rs | 384 ++++ crates/horizon-client/src/rustui/icons.rs | 86 + crates/horizon-client/src/rustui/mod.rs | 1778 +++++++++++++++++ crates/horizon-client/src/rustui/settings.rs | 1191 +++++++++++ crates/horizon-client/src/rustui/tests.rs | 378 ++++ crates/horizon-client/src/rustui/theme.rs | 125 ++ crates/horizon-client/src/save.rs | 10 +- crates/horizon-client/src/server_packs.rs | 2 +- .../src/server_packs/download.rs | 10 +- crates/horizon-client/src/sprites.rs | 2 +- crates/horizon-client/src/streaming.rs | 2 +- crates/horizon-client/src/structure_blocks.rs | 2 +- crates/horizon-client/src/telemetry.rs | 12 +- crates/horizon-client/src/title.rs | 77 +- crates/horizon-client/src/title/tests.rs | 50 +- crates/horizon-client/src/ui_theme.rs | 53 +- crates/horizon-client/src/vanillagen.rs | 10 +- crates/horizon-client/src/vanillagen/lod.rs | 6 +- .../src/vanillagen/structure_mobs.rs | 4 +- .../fonts/Apache-PermanentMarker.txt | 201 ++ crates/horizon-theme/fonts/OFL-Oswald.txt | 93 + .../fonts/OFL-RobotoCondensed.txt | 93 + .../horizon-theme/fonts/Oswald-SemiBold.ttf | Bin 0 -> 88904 bytes .../fonts/PermanentMarker-Regular.ttf | Bin 0 -> 70184 bytes crates/horizon-theme/fonts/Roboto-LICENSE.txt | 202 ++ crates/horizon-theme/fonts/Roboto-Medium.ttf | Bin 0 -> 511592 bytes crates/horizon-theme/fonts/Roboto-Regular.ttf | Bin 0 -> 515100 bytes .../fonts/RobotoCondensed-Medium.ttf | Bin 0 -> 144204 bytes .../fonts/RobotoCondensed-Regular.ttf | Bin 0 -> 144196 bytes crates/horizon-theme/src/lib.rs | 17 + crates/horizon-world/src/registry.rs | 6 +- docs/design-system.md | 18 +- 140 files changed, 7959 insertions(+), 237 deletions(-) create mode 100644 crates/horizon-client/assets/rustui/icons/LICENSE.txt create mode 100644 crates/horizon-client/assets/rustui/icons/activity.png create mode 100644 crates/horizon-client/assets/rustui/icons/arrow-left.png create mode 100644 crates/horizon-client/assets/rustui/icons/arrow-right.png create mode 100644 crates/horizon-client/assets/rustui/icons/award.png create mode 100644 crates/horizon-client/assets/rustui/icons/bell.png create mode 100644 crates/horizon-client/assets/rustui/icons/bot.png create mode 100644 crates/horizon-client/assets/rustui/icons/boxes.png create mode 100644 crates/horizon-client/assets/rustui/icons/chat-thread.png create mode 100644 crates/horizon-client/assets/rustui/icons/check.png create mode 100644 crates/horizon-client/assets/rustui/icons/chevron-down.png create mode 100644 crates/horizon-client/assets/rustui/icons/chevron-right.png create mode 100644 crates/horizon-client/assets/rustui/icons/circle-alert.png create mode 100644 crates/horizon-client/assets/rustui/icons/external-link.png create mode 100644 crates/horizon-client/assets/rustui/icons/eye.png create mode 100644 crates/horizon-client/assets/rustui/icons/globe.png create mode 100644 crates/horizon-client/assets/rustui/icons/hand.png create mode 100644 crates/horizon-client/assets/rustui/icons/headphones.png create mode 100644 crates/horizon-client/assets/rustui/icons/house.png create mode 100644 crates/horizon-client/assets/rustui/icons/info.png create mode 100644 crates/horizon-client/assets/rustui/icons/keyboard.png create mode 100644 crates/horizon-client/assets/rustui/icons/layers.png create mode 100644 crates/horizon-client/assets/rustui/icons/list.png create mode 100644 crates/horizon-client/assets/rustui/icons/log-out.png create mode 100644 crates/horizon-client/assets/rustui/icons/message-square.png create mode 100644 crates/horizon-client/assets/rustui/icons/monitor.png create mode 100644 crates/horizon-client/assets/rustui/icons/mouse-pointer-click.png create mode 100644 crates/horizon-client/assets/rustui/icons/newspaper.png create mode 100644 crates/horizon-client/assets/rustui/icons/package.png create mode 100644 crates/horizon-client/assets/rustui/icons/pin.png create mode 100644 crates/horizon-client/assets/rustui/icons/play.png create mode 100644 crates/horizon-client/assets/rustui/icons/plus.png create mode 100644 crates/horizon-client/assets/rustui/icons/refresh-cw.png create mode 100644 crates/horizon-client/assets/rustui/icons/search.png create mode 100644 crates/horizon-client/assets/rustui/icons/server.png create mode 100644 crates/horizon-client/assets/rustui/icons/settings-2.png create mode 100644 crates/horizon-client/assets/rustui/icons/settings.png create mode 100644 crates/horizon-client/assets/rustui/icons/shield.png create mode 100644 crates/horizon-client/assets/rustui/icons/shopping-cart.png create mode 100644 crates/horizon-client/assets/rustui/icons/sliders-horizontal.png create mode 100644 crates/horizon-client/assets/rustui/icons/sparkles.png create mode 100644 crates/horizon-client/assets/rustui/icons/star.png create mode 100644 crates/horizon-client/assets/rustui/icons/trash.png create mode 100644 crates/horizon-client/assets/rustui/icons/type.png create mode 100644 crates/horizon-client/assets/rustui/icons/user.png create mode 100644 crates/horizon-client/assets/rustui/icons/users.png create mode 100644 crates/horizon-client/assets/rustui/icons/wand.png create mode 100644 crates/horizon-client/assets/rustui/icons/wrench.png create mode 100644 crates/horizon-client/assets/rustui/icons/x.png create mode 100644 crates/horizon-client/src/rsx/buf.rs create mode 100644 crates/horizon-client/src/rsx/frame.rs create mode 100644 crates/horizon-client/src/rsx/mod.rs create mode 100644 crates/horizon-client/src/rsx/packets.rs create mode 100644 crates/horizon-client/src/rsx/session.rs create mode 100644 crates/horizon-client/src/rsx_terrain.rs create mode 100644 crates/horizon-client/src/rustui/icons.rs create mode 100644 crates/horizon-client/src/rustui/mod.rs create mode 100644 crates/horizon-client/src/rustui/settings.rs create mode 100644 crates/horizon-client/src/rustui/tests.rs create mode 100644 crates/horizon-client/src/rustui/theme.rs create mode 100644 crates/horizon-theme/fonts/Apache-PermanentMarker.txt create mode 100644 crates/horizon-theme/fonts/OFL-Oswald.txt create mode 100644 crates/horizon-theme/fonts/OFL-RobotoCondensed.txt create mode 100644 crates/horizon-theme/fonts/Oswald-SemiBold.ttf create mode 100644 crates/horizon-theme/fonts/PermanentMarker-Regular.ttf create mode 100644 crates/horizon-theme/fonts/Roboto-LICENSE.txt create mode 100644 crates/horizon-theme/fonts/Roboto-Medium.ttf create mode 100644 crates/horizon-theme/fonts/Roboto-Regular.ttf create mode 100644 crates/horizon-theme/fonts/RobotoCondensed-Medium.ttf create mode 100644 crates/horizon-theme/fonts/RobotoCondensed-Regular.ttf diff --git a/crates/horizon-client/assets/rustui/icons/LICENSE.txt b/crates/horizon-client/assets/rustui/icons/LICENSE.txt new file mode 100644 index 0000000..d0c3736 --- /dev/null +++ b/crates/horizon-client/assets/rustui/icons/LICENSE.txt @@ -0,0 +1,24 @@ +The icons in this folder are outline icons from theSVG UI (https://thesvg.org/ui), +rendered at 64 x 64 with cairosvg. + +MIT License + +Copyright (c) theSVG contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/crates/horizon-client/assets/rustui/icons/activity.png b/crates/horizon-client/assets/rustui/icons/activity.png new file mode 100644 index 0000000000000000000000000000000000000000..2201366ebbc75be945684964e5f22fe9ca5a29d8 GIT binary patch literal 964 zcmV;#13UbQP)$LSe^2(UYa*yOsS7UUSl`+vf_fnH z@T!;84SnnD9QEXo1gP%mTi+s6UEEaN3fx`evbT%4%b}A508ccG@9QY;>OehRQ~rx= z>su#uPyy;L;I_nkCFA;V+p(8J7gONzjO`V`#P(1JvHL}xQh!NGeO{eWPbKyRb*694 zZCAj3z|D#6L_}NwP9*ke;DMIok4@VN$d&)m>VKL5SVi06ic#0Ae?Ai|IOt6+MEXJ_3A%Kd7o3) zC4QUKD~aE!zH~!-74RsqF|oZB5exq{M8rkli^T6vbxTV+CW{*CbLw2?s5?94nu8hN z{gc+dNYo9gcL2B7xI9gMFFy-xjfnL0hq@j3E-@dEh({W<=Jd@1w=}q&j)-r^z4u~( zLzz!&6kck$?@x*USWOajgL*{0HiDKzb@yufAT$rW0KDAb_g?b;ItHi6M%10a*T6G0 zRPZRYnSdXGdn4l2YR|9Z{fw=4J9Mz#JPUjUY+t6vCA5(Mf!Bb$BI277ulWS{JFzvL z2VMjY1MA0=SI&RZJLnFlouM5O@qNZOfHT0YnOl7fyj~M(`HNtesQWVu z*1;jZvl-tx2V3xp*MVM8w`5lFPlxy($t2*ZNo#H$M`)6$)9UY;Pk&Pz8oKHVk4m~7 zP6H1nw)=q_)9b2Z^@`~`0i%379OYZ){}UUUBo0n|eZSkkIUMrwFFnySqXMo++ z>wQ2v*WZqa%WY}sdkR4PGOt5r;HM)Em^xiTyWQ?jiPG0o7{$d1BrPJkQc& z@6m|3IuT)$#C(%vK4aU}x7JQjw`CqSazDbP;=1B%tDhhViwv z`lqOSYRdm)-}*Yo!Kv@kkOUm)Ti--bk7XYIs+#`d+#2heT_(yqz>ezmW(FOr&m!X2 m{v;I&g+ifFC=?27l79jI4C(gUya9dy0000Uz3>`qqqxi6HCH0m9gc)Q?ID2LzOPV0gzx*SdiyRJ9#PWi#? zTT!{y^8SW^qW8QinwlPyR6Hjw5t=mT%DDjFNwZa6t6bl@xhF69pK|;?byKHFx7U7J zTRN%x*3GWhbAINo_dJ*NT>I3gY1{Wa)y=OwEx%4>bNs3ODl@O2+rIj-+qtmTW`JwE+7eDl8e_ubztwKiPb|A=8L^ObAQm3}ak)L&lTVEv%7 zU{T_HjKhR>g?5!(0T`{J&iGud^PBY(2a m{Zmu^D=2ybJ#gvYPnHa+Mt1cr=cWMziow&>&t;ucLK6T3P?_rh literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/arrow-right.png b/crates/horizon-client/assets/rustui/icons/arrow-right.png new file mode 100644 index 0000000000000000000000000000000000000000..dd25521106f855281a67dc2d49f76552686f7e33 GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_CJY5_^ zD(1YswbA#mgG}qk_X51uOB_UW1OijIRjw)M9ANV~$Y64_lQpAx%5*lBc9*W6r1_J7 z*DY1O{r`K;+-_r!Nh+R`maOzB3a@U%Op2uj_|-e_aJ0Y@D)bmBIOnqDSW+L|O{f zMON=~l)U$$&3w;8-uxe@r(N5A?7@R)FP_@}+;642Mf_iQ)IUcju#*#W8BbX^kx#nrPgV2q?&BwZ`%GD$<@uTDt%RZ^#f~dJy($uTvEU>)M`FR0afse{0(GENh%mpR^BY@%YzwZQ=0lUh?_yA~WbiO43 zZ>NY}58O~itXaT@lz6LanM>6GPk4kL0q)KbcOlT@iT!BE95MsU0ZthLJAkPH;$H=H z8u3p8vqR*NSKzmXxc$JmfMtvWx{Y#n0fR%8lSSA9XW z8gM<(Z*CtS#P9$#w++XBoe@R>=}87A4|iTQoPZ-9D^ z2Ea5!?CXZ#48yMj`~4mU>^1zS8@{UzzbRRA8IcCz3|zT)(8( z41cSGv&y=}u$3ii1q?N8B}vH^Wj5=S@5URpKEqbhswyFC1)MT$CBvVj_F`X+_lrU?|ZBMIoOVel5UZqr+MWv=;ca z5^bL)`3s|W2R={uodK*?Q9FQr2@yvzrm#d)TZ{d`yYa_b=m0D;;KCFyAV_h?B|B$aC=-$=U8 zIaj}Vf3*O2rTlt%nIBqj*41DdwLGnv6FOimD&XeC-$>dh>2wt_PD}bKel{(3Zi3$t z0uHHo7pKcPHjAnXU0D$8Pv=~)4lp>t z6~=qJHb=aVjd+)b)ExR1u$t(O9PzAYgT4l#E8r%>7PVN<@8XeY~ z37?t3CzNieo?{br(+jAQeLLUdoycf#XM+=x@I zBD#U#tHK}<{ojBu3dHsUZ;)YMFpjkxI93pEGXZylq}r?o2T6KC(eBPF=iK3(@y1Ge sR?%p%!Z~*~zse>}nlx$Bq=}?|0i>^Xp5ejC4FCWD07*qoM6N<$g6eC)uK)l5 literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/bell.png b/crates/horizon-client/assets/rustui/icons/bell.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ecce2be43fbd71f2d4282b15bfdb1f31d70218 GIT binary patch literal 739 zcmV<90v!E`P)leK~#90?V8PM6hRb5ztU(77!7WeXhbmRMiB%-`~h_%uHqXEt`tFB z2>Kj8fSQ$C1+(!F1qD%q5VBDNYLv(Xf+%ql134~cgfLU>q`U5P6LQb8m^t^WJ3Z4= zRV_J=<2a7vIF7Rx31t@q1|%JpG$?6%b9h$LjHGuVgkNQ6>N-Fla0z$}{2`kK;1O^U z*i?1yWPtU+1>oC%CY{AJPy^OgJ&!^FTYv`zCf>?J8ef~$127DHFqr&5-UEBPk=6W1 z5ZET^wWQ&UmrP2!FKJv-y*ai+(h*7LB^}6k-;|`IA%q`xX^jDTfTtOs;skJZ1&(vT zWQOAj&{M`-3ISZn2!0pn%i-w-?qs+wcXJMf0s4X2NZ?xu&f5`R9oTG{-2~u9B{_bTV^*QBj^bO@5zYwjYVcNfL*{+OUM_7{+BK8C19t8+v;D|akbx4?-{vc zt{~}{h1jYAgORaUM(!+EtY&Vy*?<`%wrOYPN;_bD;p zs-#XQyT3ySH_OOVIy8>9J5ld!vcvZSst!;!YrX+xKX7zLo!1SEWdv~?$8j9T`3v#y VT#W-g3`YO}002ovPDHLkV1f=QKC=J- literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/bot.png b/crates/horizon-client/assets/rustui/icons/bot.png new file mode 100644 index 0000000000000000000000000000000000000000..5a23f765e6115069825c6130878e072d24dc46cf GIT binary patch literal 995 zcmV<9104K`P)r^UUG9`~Jl-n(zkJx84L zfmyuYIlsU6ymNkY?vpZ^OeT{_0x_K&6ERv)LVmgy_w(@zc zW6m!z0!c!7>|OHg0T=K4V-eT`EI5*10A5HPUlf2TM**f%#1eZG>~Lj3S?i=Kz&%4Q zKC45zruK$8 z1|N0EE=w9WvvWh(YeeZ|y!2Vc6`Pk(eZc-0$#*Dy?GIrqQ~|CBvJ>5B>zyF5A%*Us zv{C?I9dI1DAZZS`4txnbF@Ww?;49$oQujQ?k-M&qSo;Mt>DXy!9I_o{&t za>!hbO;vY6fsfpv1u(NkN#FIE_OGNf4*8jK%*VH-k6^U12OLuGD(L2@nax#&W_Cl; zyB@t;k`AvhwjP2Pz|4M^^pd1MD?{^=CMBKlsDC19O2zF^H|He1Xl8$einBv2?*`3m z78sNCtcnfqf~4=w%=`T{GbDWsd?D#MNn0iTD(MF^yVFLj{R(hZ($5vyK=*cLc3aY{ zq*-8%q)ouX1ID#1>1#7v9&mnlY}I(LHniafIOgjFYjn2Nbay_s^|9&d1dlb%XVqVe z=K=(>vptZV=srW80;hqO&Fq_+@i`SoToZbFg$}?TNv9jy3j?r^;8sot;9qWZV9D`kUvSMIW;177KNzMs$zaEJi<7g8Sgpg&Ros&z`$_teZPM1 zJC}RT9Y`b+i9}+{V(J}0QZsNK*zRfi3m7-X{K-G71|eyir27hIQc_FNbp#=)S<*yA z@vBVODcU^b(D_O>&m<_n&R0^GNyzmkXcK$@oOPUj2V4V6>$qtGt^Ty)p7hA65C@ZP8RGGFc1wypv+<>{;n)5e(ZzDCw&x(@lQp%DUX zXp#U$Cr~s=fT9y9nj}Ec2^38dpaC&D3$krIHP!-S0lvmI<659Y(o(DlHHu%7)RAY- zx$g-|>II$vI~}KAk!?AA)Ny^&}AZY}+8W8IsY)BfC zREiks*OK?e1Dvqmp8`i5*L(z)GQ>Cpv{oDwFdB7Fkkl`C=a(h* zW%SV^X{t)6p4*R$DP?>eCaKTnVAGNLjCScIlE<}I}z#ShEY(X>pyJBCqN@>sY~115q*TuK5# zL`mETlD&d~Z2Silf&}BrpaBUcqKK%t62uqyfQTR}BPc3lFf;SHsI+t{)!o%yk2_A+ z2fews?>Xmp&gom#w+cEsIyyQ!W|o+AfqDb*a09XA`3E=|5lb!jDu;T#`jzc*O1(O@ zZXm0?`b~@C`@F8MOD(?b%I8Vf38t%jo<=%h%Ko58kxU*pH z6!2JU8>4!7NHtEVy$1bWr+z-f_trXnP191Z0*^<;N`FAzFr}?Q79-*!KtwF4yUDum z_KJ2#GEEg<85DnsH-SGZex4aL7!eD==_%ryh{oFZ|3a65)B&WXuIuVq;HQcImg!l{U<~n_iyAzxT&H=j$rr!Y`iHOB9 zHnsv!0XLP5X&tZ+xGFck2s|1QXG_|t2X$WkWYSJh_g$J_8M1Z~E~tB36`m6_Q4-V_ zY7o6T#1Dunm4r1ZzE6oH99y&E`;19K5x=R=nfI$7Hi99zfkR zv*H2Np8ACP>CB1Gqu!&wr2e4Zkvg7as1rYFN=>T)tGj@^8gy|cBC7r^ZwB>2vzwbH zIj`QFTI&_4ds`6S=R0*vYR&&)JC)CK-qp|vwp;l;r8=RpO;FuKcCMd4FIWbi1-`D) z-2vcW!T9&UeMvS(^>jg1melQES_L?k;dJB3`>}P_LcR-o=Rc8z3T9 z)F;V~(TX~ueF{3D@a(X{Z~Th0LG}JgJ7DG?jC2V|9YAW@+yr~-#{R}Nz{^wG`?6|4 zjZ&})s(z?$Y{=gR_1)F92`&_j-3z>3cM{CrPA?B z+NUWW&m^hs=jrm!bMkyBK2b?t=$uaSTUE{(O!5=eOzyP+C3VAvyLjTgbDb_e%wBGm zDDp7dcecTj525Rt8)hyEfBSEh(o5G%S+8&PF8Tam=hh{^SFM^?eD%ss=Gg^4mD%#e y344>_^+BOa9I7kzM}BHD9-SQ z@rzk*8{f8{c{Haww!lws&*L|dD=qu=wr}`*cjJQxlMB@UY;tKkm^Jl+%a0``oW8C8 zUQ;im{7A{*^lkT-(|xFWNWIp(BJ9U1dBMVu`kwMLZ@YWef2>lyhe zmU6#Cx^HEF>usCP`wyP|lMS+d1lFr0ZP>dc^SJW0~mN1BR1(scP4yayXAWe-=6$q z)Ba2aY6hClwN3i==@*txHHYPM?&sz&etvS5_`cw9&gKt)h0HE)E=}wFUO)NC!ELQe zl1Tj7qhga#1^)||4x+@z5R7DN?Berxf zdnYN_JmmDRI3zsp!^5EaTzs#nDKJ)TuR0qo2LHu^+AdSd_p literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/circle-alert.png b/crates/horizon-client/assets/rustui/icons/circle-alert.png new file mode 100644 index 0000000000000000000000000000000000000000..77d6101158ea225259f64a72cfbed2420f4be400 GIT binary patch literal 1287 zcmV+i1^D`jP)z5@s-%mOzLhlXoU6xC7y+OkI0RfK9G8FzV8g@CUn)Qk@GkIM zz>Fuk0UQP@>$)8Q>;f)C%y^O?@!hL5rArccU(%q*o->lpQl}OFHhHn<}HfFhC#hWt*Cs1C9bu7O=k!m;|o0@i7H-8eGEw zYy!T{5LE|WBS2pT9Iy|V&+vB^$ZCP%Xx4mM=I;O}h!CxT4ZulYIinDIL;JOaq&53R zU{3}9Yd|AKL)>@(e30UJ4tP4M^ZRuS80qUcygvD+L(Do@^}vW1*e( zV2|^Qz;IA!`E-q7cZcr@Ia$Kb@RHo2fUI=4PC8e;3mhALra(@>^+ZsR09N&t$cLaXq*mKUYv&l_WLx z$#2G*WEH>;BW<>bqKcU_(niy6&MJUsjkI5L%c&kqx8*v|G95RL{RgTA?8LSddi!R&86YV!dJQO{BhN%i2x-$4DEN^m|@K2D6erG}1ya zWTaVnk(6Bk4I^z-0fai|79@RA)=mo6@O?e)=BzGY4JW&E%c-6hjkJZ_R)7IuC9$%) zP+nhLfS(eY?*heQmtkxL*cMoGFo2=FmDX+;{3h|gPi>Z$519jcFs>!@&^fU-L}Gy7 zxvm>}ca}A5?Y-|SX>${(t*_qmVsIj2j#TAM9dc>O(zb2EX6A2kzkJU>v}4sb)F}5pvI2~ zONO({lnh`6^$Y^P7<&GrY~;^y`kvts{LuJJ6sNY15z>$09ggjMD#dYw3St7j&s)tN z;B;*Nts^pLQv@vIUsU!-@Y|1%_Gw3C&QQe>nWmVH8HE6TOn#j(hopLdH-Kvy{?1U< zA*nUOdP(mNE$YBA3M`=T3!CHE)7!P2E>rU%YUqfh&m?WixNTL^jHK^$|3S&tw%Zo@ z-KJ6bJ%^Xo{&4k@q)F%8S0&_!0T=^*Xj4-mIZv#it|<7)(gf)dIs^^i9oFG$^d9)N z!vyKa*otrwI7oy8n6W>Y7?bpt{A>1hho9HdI$YiQVB%^Vh1GsCGazZF{3kQd$-k{> x?bWqDnOT(oWMe8i4moASq{{t6{Sd3}D_lf`j002ovPDHLkV1l-&Y8C(h literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/external-link.png b/crates/horizon-client/assets/rustui/icons/external-link.png new file mode 100644 index 0000000000000000000000000000000000000000..a428427ae57ad180b9c9f4185957b7d2bed900bd GIT binary patch literal 714 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 N002ovPDHLkV1h}+b>#p6 literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/headphones.png b/crates/horizon-client/assets/rustui/icons/headphones.png new file mode 100644 index 0000000000000000000000000000000000000000..35ccbe0514812e04dc8eeada2fa4314ba052222d GIT binary patch literal 838 zcmV-M1G)T(P)zZ z441&Ip$3u0gqCng$}tq@K(sJ`Q+{w_Ez z)pz{V*9E|sN9-riTZv#cPrcSd;V$UPp?BAFY{3|_lOsk@toDNEl+SB9fb~?Ce>GWs z$5*fQ;<8?a&~8d(Ex1TQfVGsj-K=BtdJZ)Y{NB1O1Ltb+(G9%p;AKCw=m^<%e3xu>Dgo%R z8l5--MnZ{R1-@huO{k<3$X0omucea!4BJ3?SptIHV1X{ORo<6`;WEP0Z34dmW`H}u zMw@Gbtq_5}HX0k&!;JOhV>)yKo&mXvjv`Hgq5tT$iK}1Ov5X5Lw< z-}n7z?%27F6bJ+Yfj}S-2n7B|OrByulcY0})>OoB);r!_?+6&|I`% zrvU4LkvhVc83EQ8?b`{!X5d4L@MS&&TZ;DI5Wrrblp%bX60o=E9GL)mfC)>m+dvDj zGJdth?0a4Nshq%;8h#Jl7Pio$r09XWE zud!m1C4dSD~rZgV3&(5S&Z!m#x2Gk;_!Bs=r;PEMe7G} z$dy*ThK>PK7DI!;LJyh?fXf!mY2c)5%_I{BIBPKhZ~^dk!mLw&o-gqx;98XxIN?P& z*~?L2(&FU?u*iq#fJN{d(B)jPwx6z8JBa}wg1r{8KIdZfd+M`z>h&SEhUCM|cc9a` zU~NC0v34aBz#3now=5n1Nsb?bD&YZc`V{W6h?aN4K5yc)9`;oUkJp7DI_7Ar^z?7t`Y3553utL&d%kXt$Oet+mNym&a zgBj*!2UwPN2LR2$^D5i-6|kyCjiep0ENc!wcTEYzEB`>!jw+XJlXO46HWzYf0MWtd zzNC&iF7J@^sMbz!h4%&k%T;^jD=F`U<$hevlE)5cQ}W6WOX`eY!wKUZ@m#MI^#kJr zNe7HE6Osfxl{BQN8M%_%mtX}$AP@)y0)fCk!fzNFW1p8K$CLm7002ov JPDHLkV1oE6t$hFh literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/info.png b/crates/horizon-client/assets/rustui/icons/info.png new file mode 100644 index 0000000000000000000000000000000000000000..6c26485029f3bc15c4c623d4cd2b5d56438d153e GIT binary patch literal 1302 zcmV+x1?l>UP)x%X6_6x;r)`g z=$+{~|9fWc_Zg{6mo8npJh`~4906M-4NH1a(soH(ByFr;ejw?-q`Q)CNt$ua-LFDd zsQ~~+B)uW&6-j#~^|kn~OOhrfeJ|;pb8e;_g(U#gfVY6Fq+<#g1J*t6`UL@cfVY8r z2`irE58xP3S<`I^U>9(u#ENIRjBj3rDI7`Q9Z8=^S|7P>Nz$*9E=syC>9(XlCC%5b zZMU~#-Gr@MfMhQlfRG`CWKe(cHCJTRQv zSr7I&e+Sr>)LDDF2CYBbZE?ISG4d9ndH2)*V!lo+l3#i46 z<|}!PZ83~pPOLdOz|R@Yi@@g4{jnx6qP6Ssi%C?LOIBl_{AR34EC4%&iRm=^e zY$$YdY$M@$qwM##w})wSOB77-d#n zB*g%U7JzB_6P=ap&!ebfvKkj91y7fQ z0jQtPPi2Znfvx$ql?yN+e+<8pN#|T}_--}~ewX>XPeqoO<#R-9CwJL8tfE-}&KYIn z9l9aXBWc{YWYuArXaMS&8P_t!BU(F;?*tBM?W%9mId?PmPp!-ZKQqccqJy$EfSRNa zjZ2@WFuo3-nUUp80h_6Jg+DOt%_VzC_?(|C3&3bjdjr6M%+H#^wPI@@Wgd*woj812 ziWTL-WRBX`^-SRHyhQ4b8oxz8Z#cV3!9D$)disHDhMs?con<*4HyncBkAJQdr?!qk z!fANN%62{xa6CuOKA}zj`>{s*T>Ul{goO53nke>!%82G8llS;`Y${OnO zf}bpn5$>T=FbBLz2d+k!!LJ?02&b{-VG=k>2@9~YKbRPn^tz-2YM%VOl16fMXOtEO+PLyF9zI%RIkw^UR$yCp$ZnodM^Z zbIv*EoO9h1N`@uP0@p{B#mZ?2;a~1>b^(&E0dIjv!=xIcFTj%!!b#3>RsmCV@U`p` zk_AY*0lWhq7z7)q19~O=Y#M4TV2TgEmMmdl0f~eE3Vge8JX?2xdy&txz6s|@+ELsG zNedQES+HR&{&DiDcBd{Jq_3(U}ekKI~o4~V-xi_S5rWS$E zz^%mGD)2sIpN*^vm|9*y+X32k#b}*v;Csg0OVW3cC%|*yM`G>>c#*Ns;Yiwz+)>Sq zY==f9%|&wW4w~=$Dc}XP9iVNUFTm<5aE_!qz*VE=euWT@jn+D2WCZ}Pffb{*4(a{j zVXpJ1fEUnqfVPeDH((1`GFmI=HhU1FH}I~KqnjQFFm&OaPY{s>kJtO1{lf{nug@HFRn;AMP4 tqCR-L7bI$z@f8{8oO8}O=bUq0^dDNp{1_x~&1?Vw002ovPDHLkV1hT^71RI# literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/layers.png b/crates/horizon-client/assets/rustui/icons/layers.png new file mode 100644 index 0000000000000000000000000000000000000000..b37134c8df12f68f83df8fd7f8a8cafac97321db GIT binary patch literal 1293 zcmV+o1@iidP) z-v@kb^u73ul5m6D1&mYiVf!+IfA<5|K%qIW1}f*(rc-lQ1gJ3xK&_w zk6(q3D{$+ISc zYjMlyvqtO>fP1UVF;ws{@Vz0{G)lq@4qyi`(#aeJ7zADi78Ly613U}-YKT9C+riDs z^c}%2olWDm-n|7H7I=+=RSdv8Uc^yE%X`yz!=KhBg`lPenv4koEME5F=o8xxor4PCkAm^w7jk$ zMlbLJ&g_n4t||Xpk->!)UAGhK@h=dv3fOIkP>r%AU)JD?@C%A3MFrtSOVua?c!~_J z8Am8tbd3g}ANN>VMN8EvbK+VC2aV~ru*w`m1rOksyOvRoqZ{STCF0!P$sE&C_!lTu zAX+p^A{iX84ERuM(=uqB1Ehy;Yqpx8bx={`RTWHMx^x6Up zDgBlK9~s<{KcgeuD9>9_(pbT1 zNDZ#z$8e>AtLJYv5-Nkuz>;p~RT_jDrH1YqTrA*9-p}A_1EJXO`*il>rz%01QFh$m zI{qClZW}x*A_JM94v5IcBuRenw5A$0YSgGv;}XUHUyVb*bs)_600000NkvXXu0mjf D?Ri$M literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/list.png b/crates/horizon-client/assets/rustui/icons/list.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9d2d755f0d050a5606e725114fb93cb29daee9 GIT binary patch literal 665 zcmV;K0%rY*P)5PiM5HHm0%j} zEVS27(Mk|SZ0%!b3Plny5R0T#u?nccs1Uyvm(wuppSjz;+uQSfx?$$cz8&sncV<>{ z&N=6tbI!ROzz{G29I85(p4z(c+rS3@d;~65om){B(+GGXX*#8P#>}2(#5N@D?jX0K z*3FE6yqSeBNrMR(1LlKwfZxDF zU{}@o6_NW30EQ*KmNcHyzY6yP%;YRPH-T`$v^~D|%i-fe z`Da2OlQ9?TM==8sik>*@AZ7sG1m)qNyea8zIqCFX%p^FZ<|H_g(&Ubr-N=Zq_arDu zz(JB9gAW+=$6yQ17ok&XPI#>sp`~sm=A3h`2in~fy{6_VP-|24-hZ(v3S1z0Tl_tP zzAX-nNLrG#FQv&#N$1i|Vu6#Au5_GX=Vr|;=@_p)z-+|Q^KeFd?U%zxf^yQRrfrt= zy_f;`9F&s|M?aO2OC@3kU@oVAP0~UMxl|(d6Pd@7E~ivqGP7qHvGx8$M*91a)Ggrq zwn^p#FjdM0>H=s0=G`P)@=Q9AaR#Pmd%Ak*`tq)N^}473rUAn+48t%CBTuAhLy~I% zt^h1~G+P&ukES`>V6I6cl6?R-09HMl&NRu_Cfnn_$2W%;7`x5v?C`zwLbyZ z^S3B3{sF+aMwp+v`I3X=kmVd`Yl{NOakj++r3Tz}UaLvoMg ztd@Y{CvX`tcZcMK%X><)(FSf(5h?~0il>?hiUu52EWamFKL5+V@FyYuIR+Jf(;#Uvi1JBr-W$>*h=jl6{h|6(gYz%i1**@tOoh z5@*zE95u|tVApvU>4XOwD^t!yk`P%7Fdg1 zeE5+MVFGX&_*uu|ecupiNxCTMuB6>vE*UqoJAg^LE$L=KswGL&lD_!p=wMyaRFDnN z1>gvkbO=u;Myh1&$9|ZzuhH%j=`0GeO?k z2uQ#F484|gqHe`Y;SBg*()Lu+DKq;VsIPhgoCM~8Uma`yF|kf%bp;sCfBrVl0f|H+ gkw_#Gi9`+g4c(>txn{Sr7ytkO07*qoM6N<$f~~$xfB*mh literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/monitor.png b/crates/horizon-client/assets/rustui/icons/monitor.png new file mode 100644 index 0000000000000000000000000000000000000000..2f9e06419c3b5642e247298115340ab968ca94eb GIT binary patch literal 561 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 literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/play.png b/crates/horizon-client/assets/rustui/icons/play.png new file mode 100644 index 0000000000000000000000000000000000000000..be8fc514b0e08d1c95f949f0194f67be0c99fe12 GIT binary patch literal 582 zcmV-M0=fN(P)mP* zKmrL3iSb96*m~4RrKJgv1xqqHZ};wYXLe`izNg%o`DW(%zT4Z)j${~yVHk#C7)B_7 zE#M>Ybm+D83h)y60^IY!2-q2VUC{wnffL{_|8rlpJsWzR(EvV8*!VaNkHQ>8iH{)e+%AD6hxjkOG+gC_Eyyk1ZhtWS4cHt^%^mx=&jHS!dm+ zjezX4?lX^oVzTZttAL`i?lVn5ky-a?5>RZ`eQE@}0xqUxz37jlzZ*86%wdU`FGG`l z&qz9!^x8T1E#llW)935(NYY^{8xIPLen{#O;023#Ol}+&^`N9-7=~dOhGFExKYZ74 Uk07SwrvLx|07*qoM6N<$f@3%dy8r+H literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/plus.png b/crates/horizon-client/assets/rustui/icons/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef73bdb944235b01ab149b9c68f997a8f3848c0 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_4JY5_^ zD(1YsbugF7QNZP*)amqg2NpF3C50wcekDaYB?Sfb6R9yb=;I-tQ`R5)yvS;L8 zz z5@KT~Vk0cmL$MxUm2Z!c z+y;R%Nn0cxkW}e0b+@D)l3rT&H5+5zdekZmU?tGvaJF;t!{ON4Li~Cg1c5T(kfh6! zCgky#PD$;VUxzKFq&<>)e0j9tWe_A7;4Vp8mgBIOk}gQPqM*CBgmO%jG)Gd6q>YlE z8e@(CZzP@a<<&dDaNv55u6Yxvam+ag7};lgJ~q`u9J8rNDPf;~RisN&AbG%!vQO()io|eB&hv zsI@e{9hjW7x5xnoXF2n}B{hyW|z%w50&6llB!0neN{nYW#a(z|JeU z8eb%-A{47P#{Bf;Cw5#5V0#j~;=@Q%xE5fVB^K}Fr)OLXFeSA8Q})S;0fTD+28Xu0 zjWJ!m%p`$p0ltT}6MaVq4Dc;}7T^oP zQkm_*5@1rMcq4&IU@=e!oZ;`wX^v4u&x!-1rBR~TOJzT1guTEO$9@6Z65`mIyCxi=0A}?S;qSG1Wc8*K+>elZ?uBNQlAwp tl)5jesb4I2OG!ydNl8gbNlE#)`2`EhS8ibFwWHp|wkolkYPA$JCKVbMz=8#m3ISqbLeixs zCYD71gVIfRBy52Nnr>)a$%aG{T?xdRkXT|Ub)iI!8~IV1sG&5pg+46iVw&m9z4!FY z+_qt!&CSf>d*Auy%sDgPTq%>uWHOmdCi8q^QUwNDCA}}{fTUhY-ICfRHA#9TX^Bx#eR?UFicNX$s;H^%%>#%B_MCg4Jq8Jq>a z0Q!K-j6jUHc3fKvg(i@=w_YX#%&1I7a}=YYMb#!?vI!M^Q%FT9(;8<8~nE04a*w=v?EH8F!PYV~>M?XKpkfDla6YAG z$jFC{oc(3Gn}L5E-5KmAtTaV}9PspAh+(1{#+XNvzHz$SCGCt6zeoaH!39azVwk9d zE1tfFC*Uoo{YPbX8o@7~zPDopE|P#PPWx^Q19jrldL>5SA_;iWX)nYuP$%=AKJNjm zC`A(R&}p~DFiBk6Dq6LoOJX`_{X(gN)E>;x}2K(~vP^?|9>x;`TYTe^1XORRg=qdA;XvznP9 zkC~rHbUX##1r{8=MH)~o4jF32*6owe2=??j>CqaCtyR?6=N?l_M6BFmE6x`^I&;AG zSURgU*Nm;oxXc3s5#qN61`jY8V+^GMwgLA8CeHvZtBl(dcR#zo)?hEf3OO@Yoz_%@4HD#~H`X!A?3eEVxvc-%mvPar`vS*4{C2f_o zThdY4VoPXKhU4=`Ngo(v9+dGO4PY1k!etEZ1^TbDp03fccYNPP9QYjehNzYBy{Ev=jc=$V7~l|ap758#WeOMux&twjB_Zhz3$}FKD`|(McVr72 zEt39|z5D-F(sg4@&GH)d(|Sqve@8Cs>&2Lg4YwRpkdvUC1W7pwl5!Fx{a>TF8c4#> zTKj7VfhXZ>HqxIh%i<*A`5OE)D$C&n@WNVq$z(E_OeVAbc?!DI$G)BIceMZj002ov JPDHLkV1g2R1EF8Au#~ zGr$Q5AVGp)0wO>lk%IPZK)1AuddBT?8@KKHq?W9)yQ<#v&$QbO7=~dOhA~t`+mYl3 zfNu$Fsl%IyTzy$Kk`v~~&moKVG;0F$7Vnu1S-dCOgs6w03wRjV^$6fMfIqPb6H@@# z2e1;@_d`S`wKI@ho8j^U$@SU^>esjKY6-EHBEe>^;yrUr*evT?D03c($hER>a$GG( zn!Z{C82pj^PV(5bu`;%nU`=Ic4Vc9kz^-e{iDNfHY6Cil8PIkCZL^p--UWb>+kQ

_NP`eHDjAn%a98@{;hVjARZvlGHEu2Op?LB4u=dl%R#)ynQ*2tKr7<%^K6hSWRc{OYYWQQm2tIPYWk)=i`xL6UCZXv z**vnjjN8HtXuE*6N&Q{m9>9s)eo7p>5wr#bN01_N17J^IPA$|+{^l}c9MGEu5;4Jh zy+pRe2g8%>k literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/settings-2.png b/crates/horizon-client/assets/rustui/icons/settings-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5d1a837d08d6659c77fdae5d97c5c9ac3af31dc6 GIT binary patch literal 987 zcmV<110?*3P)0Tn;Z6{REEGiJDx3TP5`2s!hzk=5u2k?bilUOpfM)U(6~!4xWB**-+t6I=c2{@b zM>p0F8k)MN?)kpz?z&ZVS_%XLfj}S-2)vqDk;wp)^r58nlKLghjxYT!>71mal1`c# zMd~U9U;wy4W6lE~l&v>YfX%=&5A#)?0-MU#oe99_O&Cw|Ro?n?odbY(Bn?ZN;<$WY z($)C=5=pN+VxCBP&&+P-qcCTHA;+is2>1q=ToX4L_%^71F3l`1SxfF58Ya4BVt zFcz;9mX@tGbASc-6;A-31AFN9rE(QuG4PM4`C5j$eh`3Jz^xX{S84XZwzB|!NHI1H zYys8)>wta0Lq}W%SW&i*mH_4x)dG|30$w_@BdRyJ=7|%n%;+ANKNIq4t-f9^D2%?8kh8A76}~;C@Q2@nW5-EL)uyfj*jr~1>M;(yU$*|XA*v$nZ_@ldpwMb^?f@Hr5fAgnfJN=* z>&RJ?s7$_2(x-|_<<%pxJCaUII%H-S%TpK#1OkCTAQ0$&UI3sOC${t4AIty%002ov JPDHLkV1h?=$FTqa literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/settings.png b/crates/horizon-client/assets/rustui/icons/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..ec51a87381376fa84062dc221630820a84665402 GIT binary patch literal 1385 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 eqN1YWY~p{+8H?ad(%sVl0000;zGwU}K>O zMg%SV1FS491Wh5Rjit6qf_8Qaq81ifDJBu+0(bCQ>>b3-Y;Ll*cXK(vr@Ps2Gw;l9 zcK7BMoO8}O=bZa5S?T~qB%K2;1~%1z%Vzeq$B}wR(ius075gG-U+SD)A!%AtV~xSL ze3mqsI&Y;Sj{M-B36iD?j(lCxPf1H_oCzak`yHxs5FI)QY|6DQ1E`srUF37>$}0aA;-1{koT%ULb~cXDlWz*(}#Uw|XPGhlnJZZGgV*S2V8YS-!J zm}JdAv=CEUmZbau0FD7qf#<+5aD&x@2Usw((Eb~Tq%leJ>v#%mnMs|!G9@Nqa0cHZ zX;jk7h{4}VowaKsCZV#y_w$0tDB1Ueyk#?c-|IZiIp+pZrME#zhk&htO&?-bXEroR zGiyA!yp}YcI%C&Jx)$;1I+&Bt=E&#GOBzd^xiae<{9sLjvahZoi;`|jx+!U{pyo>I z{4G%{LJBX5g^uDc;56{I`S}s>gluK!pM51wtRrU`QA=X}yFf3J^fRA;)B#e9x(Jf3 z%iqtn4YT?cmT$ldVCBW<0B}54_Xc_pB_9Y#VG+uCvdmw43S#v^CEl_i{tKoV< z(ulH`6GE1hz0?qT+oK_ADs}!!NSc)NsbCU98j>!g&RwbIBov(q`N2=8&f66cXF@~L z`P4Z>Dq9dy_R88lU|V4GteHKosxRl9bIv*ET*v+b#XQIB_eovA00000NkvXXu0mjf D3d>1M literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/sparkles.png b/crates/horizon-client/assets/rustui/icons/sparkles.png new file mode 100644 index 0000000000000000000000000000000000000000..473ec961a075bcdad4101c852b490da0ffb34ddd GIT binary patch literal 1106 zcmV-Y1g-mtP)}pa(tpb%>w4Vxn0U#V_$KbqP1B~9^wq}L_AFKKz+n}Y{H(tVQdkI3GTw7n$# zTif5cotLT!z?et28EBc=TnYL&w?7LH;L?OeYG+PeD}dd=cNrGI)3`d}>QKIAHTv!Z zBcCX!vjx1Hpmzq?RJJdL0A5Zo^jIHyTfm7Jz1vE3p*X-YU^XED09W>*f44{9Q6Sg( zCgdV`gQQlAi^Tq?u7rU%3E#Q+|Db!*$yk3}7na>>t2a5!qSb{5tIn zQVIj>B(05zCnX(-$c7|s31LH4LY)PC#m{*AlV$AU1$Sh9$Md|e0S1BTi2MiOyt?f! zg|_qiJkEdFHRd_b^*0xN5P%K9Q!%UkV_oBJiy8A4a4m37oql8n7zS&-1x_-cO{du5@KWVA~823229@i;86_FpW)A>*xp;tY!?UJrj?|*pX zX7+a=J5mW1fY&^-PMI6U*Ct#1(7VT<1&&2zXQ=s2j*u@%L@Tu+Nvk8WNi+LBpbe>n z3_zCDUYhAI{nt$SHD=H6Q2V|gECbpr`@w`EQ)c#csQI%J`X#BP6Wh{F{|>nFcs?fm zx29`Y0^s_CQRY}62c0V36ZEC}Av624g1J)(-e(6|>TPn)nAvpbxf>c98X6iJ8X6M# Y7fQ7A7vyT{QUCw|07*qoM6N<$f~~Inpa1{> literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/star.png b/crates/horizon-client/assets/rustui/icons/star.png new file mode 100644 index 0000000000000000000000000000000000000000..5544bdfc66e339516c1445a637c3e6aad1de252f GIT binary patch literal 1171 zcmV;E1Z?|>P)a<^8~g$NBU7eSi1dbI$Lc`=pwhnwpxLnwpywSA|pHc1dev#pj%Jzg3~9bbznv z%_D5&Q!8m#wE!wnIrTbgA1}nu;m_Rsqvpo`7j!RhgQ~egdA8)ZeAP-?#by z0XSfy%jhpK0aUU(6$^kQbFm;>z%pPd za3NMV2W%)qTUm?XPDy>SvbUUbe>vx7B)uK0>ytE6in5~dqkP^N;o-J6!^RVG9#~eP z^!xxDffL3YKWMZ)XtX;4Y%Ee^knILoA!)UwK}iGtx?{s&z<5Nn@;NZn#mA6ula~XbgI^9@%^_$Oc$H|B7xUHdZD(`% zy9z81c>}iR5ObPn`egOF+4t?0?P>g^S_6PFN!yI73zEK3=Nw%4Jt^r|=iDD@{1|@w zC2i0@Yt5iK*PsU^tueZPDBp1* zP2l$gA)gXuhM|4-1BViPUI88p?Q=0f_W)-S1dS7&{fF|k2KY9?*E!(6P`7pXu#2syC-8d=YW9_nuBA^)u}w|fS>Qwo3X=((@U8HGH25;Au%mj5f`zA`1i9 zZ;a6RBBMMGeB!S(ZR6~(I_~R`?eOvvFhW~?K(ybF_`0;5t}^E9V9);~-UH%)k88KJ z*0)JZkaZvz*x&c#oB^zyKFQ`blFu62*->O{X~i~)_Hc`N;0<~>Ap%zTzDc`B3uqP) zQg(<=Y~sgNKZX!U^nv92nC;K#@`oc#wgl^62XO0u l(RNKuO-)TrO-;?s#^0i{OMyaRZi@f_002ovPDHLkV1j}vH8ubM literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/trash.png b/crates/horizon-client/assets/rustui/icons/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..6f03eb98df570b93d13766fc02e9e7a7b22f620c GIT binary patch literal 829 zcmV-D1H$}?P)q!5b~DFi_SL4&Oz z1pfnDu@oyIrZ84oTG^>V5K?Oj8&ep(s37?;$2}IekYh4?cY8Z?A7p-TaQn{eGw(dR zGdueMi9{liNF)-8L{ucrNvcTNZ1Jl|n(KAGL6LMz(w^FM zp9zwtJM4U;3DYriJQ`CRxC9J2u^r%jPW?$>xM6!J(|8*`wK}m4@Nv(~mVE`1W`UR8 zOy)>88_W3GVObQc=nj(Z0#|d2j{sMIW7+l?aMr2wjruU~F$`RAVjDmu`@ai(25LF` ze>AffIb~sxv{+(Ni_K!u{`6u9^cBf~UMJ9NI++Adus_M&2A+C!)`1(q&r;d#a|U<= zjJxRo_kma0_O6+21!}W3l2$wu(T1dn2yIPd+Ab?)bjuEbiYGR0W?xF`9w5{7EsK3Q zv`q{HVlHNU+I?rhXi3dxjCo?E=9w4<_>v5TPrL8VfPpfg?A>5X10;MfhudY*QZ9NMO=0h^wfo8(2{u@id$tU9qtPrXmn*A#i$c{#Mrp&tUtfHFJh zG=6vt$kyH4PPm%}Y@3fFfj};U?hO9%P0pQy!5335N8+!zXU>@s{nM*fKtm~NM}HhcZ01A_yC-A%Kv%x zc?LXpVvTQ*2GamDs{t*a)S6ips5Yt6w{yTi4}oMrSpnb|2jAAlSPr{uiyH7dLOaD# z{p+qq{z#e%s6UlyHd6W$7z{~ko;NmIl4b&E&tzIIYawzEwPs%e9yzh&z-viQs1K7) z7y%yQ&vU6m%{WL}kW}*=snFCUE%ds-UL?({*awkC*^@Ni>wY#x`D3;$JCbhpx_@mU z|Eyhxzml%U$hGhX673@CJa8_M+z&JR9!M*ZNF)-8L;`^S2QMrxtzel100000NkvXX Hu0mjfIfiO& literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/type.png b/crates/horizon-client/assets/rustui/icons/type.png new file mode 100644 index 0000000000000000000000000000000000000000..258e6e5165107258dcaf6666ce5e52362cc10555 GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lNlHoGdx`! zLn`LHy=Cj=>?m^d|)j8=KBokqM!L2Rwun-*|GY@VQQ0_UHD=cXshcHtX*sJ2f*Y zZ9lMo5z{8-lx`d5b&a=^a;_o-m~{=UQq0TN5y7e)~;4H{>}1k_dDYs(GILB z>?f9i)CV)(WZbl};SIyh5Qnmc94!TF2Q$$LvI?`gPVi0eg)5V;VO(1${b%Cte1^qI zJ8F0hioSpP&!(UD?V|rC`$zAR`=!6n&Hu2y0i5lj}rAnn2 TN`0!pSYYsU^>bP0l+XkK8Hc+& literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/user.png b/crates/horizon-client/assets/rustui/icons/user.png new file mode 100644 index 0000000000000000000000000000000000000000..8deb8759b02a0013638488260432114a7e870c6c GIT binary patch literal 939 zcmV;c162HpP)o8p z32v51EVtq0G7|fC;vgb|WQehhC1i+U2=C+YT0Hft-%KynJ)%CzJ9NLU@9+Dq-m0pl zKp+qZ1OkD;|A{HG7%*PaYDp_4HA|Wh{qo1|7r=ZrD$iuC0jU>vXy=%#1B14n>~ zW&6$rU@h>e7r|{l0;|gQp9x?u@H0jD-~0sjl$|3Lz!sp=Alx(Hdh~nN;J6B~sq8$7 z0A>PT9ASO{$ADRmHnV}_(J?k%z>G4oqyjkW2=N|R+KaZ!fDexLEk$_G3^14aOTQaf zkU(Q0@Xc{6%*oqtzq|z{ZC3sGV!tuwW^VqXvveY^(khu#E9 z>r?1#kTkvr?Y;-q*`G}tFe-t@XyA!MXN^zqxd03V9y!ck1cvvb{RrT)qy0l*KoJ=- z18j5z0Jsk=3#?*RF z(H~BW3|~{TZ*)QwKJKzVJOt#1qiK74j N002ovPDHLkV1iLlx&i#+t|}h5`%22-1hl zfj*!J>Y?(cxhN=}VdtaSF|-2uXX1WDHC+()^&(nh$Fxb7pMj*TcC3!@ld> zv(LHrPGINvxb|NEwe~*y?$0abf6P@59u-?$D0d{88{1B-4Pdl#h zjli*lg#Jn>9|3OhbT=jV3?-CroT?7k7L&lYz>PjV`!1AIagoxn=?3d0tf z<21uImgJPR17;ew;glNIcKD)UYYx=&>mlh(l2g_Wu!NgZYFuO3PD%17uQp&=DIuU) z(n`3v(-r24qR=C01G8`srX>$>r@tCk1^{O zZEItE7gD_083JYk^9n19PcQHkun4FJ76TiBexvRHFsIrbu-*tf2rN(VYXEu--))oX zJZ_Yy;gPB~zL4ZJ;II+=Jn#fiYxu0fK0Ay8i@myOPl6M4RK4+&l58b9(OH}WJ_fb| z?*k`FB)!?tt^r=eK08>916!D?li;L89}7${j&4ey9a?~W2^xEW6?dUBVd`$_-$dzPebV1;w;kCZvt058N0xqZOx88w#xuVWv1zb0VI z4AcQnQv5Iiu$y$(bg@C&V;cVzFrxzc&&KF)C-8g^JRPI)T)D}u1cnXaBUI?#jp)qq zc1#1dq|oRx{0D*htchJmbiwHJJ5bSykmv<@Z%ij_2-K)2dPwzIn>DE&hS&w5C6i!s zyawQ?5woAbpBiwR;UDy9YbE0k{c&JjYO!>27ZF{7``jDoKf~~SFRp&68FH;8zt=mQ zb035xk`?FNaY+vuML};4ik`%RDb)eiFn=SBcp2g z=4!+$wG-@B^hdu&v@|%0{u{N-n|vcC?_W;CnqN-Cnx99;a~I~!J}u+e^USe N002ovPDHLkV1g@NZ3_SZ literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/wand.png b/crates/horizon-client/assets/rustui/icons/wand.png new file mode 100644 index 0000000000000000000000000000000000000000..874d16ffa90bf490f89fff141059c406ba6acc1c GIT binary patch literal 685 zcmV;e0#f~nP) zpa1~NsWS!xm;u&G|{r&4Ea9AFW6Tp{0Egyo5N9Ds|!n-bY?CFi=p9pHFskJZ`;8NXd zMt>s&EJ!+A(d?y}y^E12Dr9eT-dD`zd%B~;5^X0)wl2StbRt%tgAkpp$hr?lCGH1y>P{hc~hkPTnCF!)8 zZ3XOO&x9(#M@dVgEs2SW5I TbNXmf00000NkvXXu0mjf^SCUq literal 0 HcmV?d00001 diff --git a/crates/horizon-client/assets/rustui/icons/wrench.png b/crates/horizon-client/assets/rustui/icons/wrench.png new file mode 100644 index 0000000000000000000000000000000000000000..679254ca19b635886f397f4f382c2c182003783a GIT binary patch literal 980 zcmV;_11tQAP)$a5gikwS^`hzyj0JjyGS0U0T! z7|YDa#DJ24Yvd6Fq)6mZGBEOfL<(2j7tUv}&&fUeuC@0*`|f@AJ*=-zo%a5(wg2B* zd#%0pI!E$&JRXn7^S@$>P9O7JyAl0HisD`~EzC6b0Y;@25tF6NVM#sFi150>660Vjb;j&f6gHxa{Oa=l$r z0UWakbOP%m%8UeV#tes3b<{`)&<1o_dVW(xnP%Wdj64MM!OVL4)C{o4lK9z(_$c{z zmSczO=~FYnWlPet9kEgJw}9yc3#7h0sJBy10B=JHKXt^#$&V_>h3AD{U`SjZu>pBd zPOL3-_=zR1S<)p*%PiI0mbAtg^W9OtNz(YZTncFbNu$;OIsVlW*CeUgay%?A1?z+` zn&qUhosdC7DE+m@{-hQxz4A7B$+F~>(H2e5fM8ExZ8KkTVn2p z>gxsyU+Fpl&RZt61rhNrz(~irsRV0?stGc`>@xt^YH5HgDeF3Isp~-2IcEyNdq9UJ z@%=T{v(eJ~J;0Q_a?cFlkfi~BC2a&?3;mbV0LSyry=H)Iz=P1|5$@fetH44>UGso; zN4XC`?DM}uU1mvw7o0PahNdX~Qqp5d9~C?*=SrI4i0zTI+!%8w#dY!l*iP_vmN#9% zhN69|05%bf>7*px3=Q)hSX8uc6}Wr88+ca!gx}!q6KscnNhtnCWiXx}Pu_k1U? zvQONL(D{4i<1GX;d^_-pzZ<5#1aFZSfZf1^;w&9R^n8_kIo8?$j(S@d%u8FTX8D!$ zAM?%z81$r&@3h1=W&>m-{~Op=ltXHO9W}@=1-?7vw-@D*8ZYnVy}XzA@?QSmmtPej zzakX70{0@P@#G~5*qed;j)Kx3IF1I`5{hY9`LsWcy{UXD-w78bjR?h*B<(WBoJx6( zx?uaGQ4;0@O_C-`I-v%YPlRI#L^0@Z`@W>T16-6O?KH-m&bZ#($nxj$%5C2;@=|tp zK*RNXh1g9-V2-54F=5Y*G1sz5$>Z^OJRXmyKKucXON}}T)O^$c0000+al zE(O~8I-L*V?#&QhC|#+n>Qw&en62Qhspe`*a~js?J?-t}s68#sDfnx$xl_wVdDCOx zZ+$wS&Btw{`{$1OpZe|n`i)8ap{ph++>dYJ{3%?2U-*yvj0yHk)?pPZf?BJeEPnq@ zSkcw)*0K5)%TE`#)hX*t?7#LwT(P}o%e46%mQNR(-tG@@vWwb%mqYdGV#!>$2N&ae zTjy3k{`NHE+x#uc>4#cx>AUwjwk+Z|W)r+M(Y)e`y$3901or)4RjxKO-)hJF9vJWp Mp00i_>zopr0Aw$)>Hq)$ literal 0 HcmV?d00001 diff --git a/crates/horizon-client/src/assets.rs b/crates/horizon-client/src/assets.rs index 63c237c..4d217a8 100644 --- a/crates/horizon-client/src/assets.rs +++ b/crates/horizon-client/src/assets.rs @@ -106,7 +106,7 @@ impl Assets { root.join("horizon-resources.json"), )?))?; if manifest["data_version"].as_i64() != Some(i64::from(DATA_VERSION)) { - return Err(invalid("resources do not match Horizon's pinned data version").into()); + return Err(invalid("resources do not match RustNotMC's pinned data version").into()); } let (registry, flags) = BlockRegistry::from_facts_json_with_flags(File::open(root.join("facts.json"))?)?; diff --git a/crates/horizon-client/src/audio.rs b/crates/horizon-client/src/audio.rs index e45362e..3ded5a8 100644 --- a/crates/horizon-client/src/audio.rs +++ b/crates/horizon-client/src/audio.rs @@ -538,7 +538,7 @@ fn build_stream>( *out = T::from_sample(*s); } }, - |e| log::warn!("Horizon: audio stream error: {e}"), + |e| log::warn!("RustNotMC: audio stream error: {e}"), None, )?; Ok(stream) @@ -556,7 +556,7 @@ impl Audio { if output && registry.is_empty() { // The game then plays nothing on a working output (#1035, #1076). log::warn!( - "Horizon: no sounds in {}: they were not copied from your Minecraft \ + "RustNotMC: no sounds in {}: they were not copied from your Minecraft \ install; prepare the game again in the launcher (or run \ horizon-prepare sounds)", root.join("assets").display() @@ -572,7 +572,7 @@ impl Audio { Ok(v) => (Some(v), true), Err(e) => { if output { - log::warn!("Horizon: no sound: {e}"); + log::warn!("RustNotMC: no sound: {e}"); } (None, false) } @@ -627,7 +627,7 @@ impl Audio { match open_device(&device, mixer.clone()) { Ok((stream, config)) => { log::info!( - "Horizon: audio output {name} ({} Hz, {} channels, {})", + "RustNotMC: audio output {name} ({} Hz, {} channels, {})", config.sample_rate().0, config.channels(), config.sample_format() diff --git a/crates/horizon-client/src/auth.rs b/crates/horizon-client/src/auth.rs index a869927..d3ad24d 100644 --- a/crates/horizon-client/src/auth.rs +++ b/crates/horizon-client/src/auth.rs @@ -174,7 +174,7 @@ pub fn discovery_url() -> String { fn agent() -> ureq::Agent { ureq::AgentBuilder::new() .timeout(Duration::from_secs(15)) - .user_agent(&format!("Horizon/{}", horizon_core::release::VERSION)) + .user_agent(&format!("RustNotMC/{}", horizon_core::release::VERSION)) .build() } diff --git a/crates/horizon-client/src/benchmark.rs b/crates/horizon-client/src/benchmark.rs index bd2e97b..583ea3c 100644 --- a/crates/horizon-client/src/benchmark.rs +++ b/crates/horizon-client/src/benchmark.rs @@ -82,8 +82,8 @@ pub fn start(requests: Sender, setup: Setup) { .spawn(move || { let control = Control(requests); match run(&control, setup) { - Ok(path) => println!("Horizon: benchmark report {}", path.display()), - Err(e) => eprintln!("Horizon: benchmark failed: {e}"), + Ok(path) => println!("RustNotMC: benchmark report {}", path.display()), + Err(e) => eprintln!("RustNotMC: benchmark failed: {e}"), } let _ = control.call("quit"); }) diff --git a/crates/horizon-client/src/crafting.rs b/crates/horizon-client/src/crafting.rs index 899ce90..2bfc27b 100644 --- a/crates/horizon-client/src/crafting.rs +++ b/crates/horizon-client/src/crafting.rs @@ -1212,7 +1212,7 @@ impl Recipes { let v: Value = match serde_json::from_slice(&fs::read(&path)?) { Ok(v) => v, Err(e) => { - log::warn!("Horizon: recipe {name} not loaded: {e}"); + log::warn!("RustNotMC: recipe {name} not loaded: {e}"); continue; } }; diff --git a/crates/horizon-client/src/crash.rs b/crates/horizon-client/src/crash.rs index 5490808..e438114 100644 --- a/crates/horizon-client/src/crash.rs +++ b/crates/horizon-client/src/crash.rs @@ -68,7 +68,7 @@ impl Report { pub fn text(&self) -> String { let comment = COMMENTS[self.time.timestamp().rem_euclid(COMMENTS.len() as i64) as usize]; let mut out = String::new(); - let _ = writeln!(out, "---- Horizon Crash Report ----"); + let _ = writeln!(out, "---- RustNotMC Crash Report ----"); let _ = writeln!(out, "// {comment}\n"); let _ = writeln!(out, "Time: {}", self.time.format("%Y-%m-%d %H:%M:%S")); let _ = writeln!(out, "Description: {}\n", self.description); @@ -253,7 +253,7 @@ fn memory() -> String { /// The report's details: Horizon's and the machine's, then what the game set as it ran. pub fn system_details() -> Vec<(String, String)> { let mut out = vec![ - ("Horizon Version".to_owned(), version()), + ("RustNotMC Version".to_owned(), version()), ( "Minecraft Version".to_owned(), horizon_core::VANILLA_VERSION.to_owned(), @@ -283,7 +283,7 @@ fn deliver(home: &Path, report: Report) -> Option { crate::logging::write_only( log::Level::Error, &format!( - "Horizon crashed: {}\n{}", + "RustNotMC crashed: {}\n{}", report.error, report .stack @@ -297,11 +297,11 @@ fn deliver(home: &Path, report: Report) -> Option { crate::telemetry::keep_crash(home, &report); match report.save(home) { Ok(path) => { - eprintln!("Horizon: crash report saved to {}", path.display()); + eprintln!("RustNotMC: crash report saved to {}", path.display()); Some(path) } Err(e) => { - eprintln!("Horizon: could not save a crash report: {e}"); + eprintln!("RustNotMC: could not save a crash report: {e}"); eprintln!("{}", report.text()); None } @@ -556,7 +556,7 @@ mod tests { thread: "Render thread".into(), side: "client", details: vec![ - ("Horizon Version".into(), "0.1.0".into()), + ("RustNotMC Version".into(), "0.1.0".into()), ("Minecraft Version".into(), "26.3".into()), ("Graphics".into(), "Test GPU (Vulkan), driver 1.0".into()), ], @@ -576,7 +576,7 @@ mod tests { fn the_report_reads_like_vanillas() { let text = report().text(); let lines: Vec<&str> = text.lines().collect(); - assert_eq!(lines[0], "---- Horizon Crash Report ----"); + assert_eq!(lines[0], "---- RustNotMC Crash Report ----"); assert!(lines[1].starts_with("// ")); assert_eq!(lines[3], "Time: 2026-10-14 09:05:07"); assert_eq!(lines[4], "Description: Unexpected error"); @@ -588,7 +588,7 @@ mod tests { ); assert!(text.contains("-- Head --\nThread: Render thread\n")); assert!(text.contains( - "-- System Details --\nDetails:\n\tHorizon Version: 0.1.0\n\tMinecraft Version: 26.3\n\tGraphics: Test GPU (Vulkan), driver 1.0\n" + "-- System Details --\nDetails:\n\tRustNotMC Version: 0.1.0\n\tMinecraft Version: 26.3\n\tGraphics: Test GPU (Vulkan), driver 1.0\n" )); assert!(text.ends_with( "-- Last 1 log lines --\n[09:05:06] [Render thread/INFO]: load assets: 1.20s\n" diff --git a/crates/horizon-client/src/discord_presence.rs b/crates/horizon-client/src/discord_presence.rs index 5f8cc58..e006829 100644 --- a/crates/horizon-client/src/discord_presence.rs +++ b/crates/horizon-client/src/discord_presence.rs @@ -16,7 +16,7 @@ use serde_json::{Value, json}; use crate::command::args::GameMode; -/// The "Horizon" application on Discord's developer portal (public: it names the game). Its +/// The "RustNotMC" application on Discord's developer portal (public: it names the game). Its /// Rich Presence assets: `horizon`, the logo. pub const DISCORD_APP_ID: &str = "1563857609738690560"; /// Whether the application has the game-mode images (`survival`, `creative`, `adventure`, @@ -129,7 +129,7 @@ pub fn start(enabled: bool, automated: bool) { Ok(handle) => { let _ = THREAD.set(handle.thread().clone()); } - Err(e) => log::warn!("Horizon: no Discord presence: {e}"), + Err(e) => log::warn!("RustNotMC: no Discord presence: {e}"), } } @@ -216,7 +216,7 @@ fn run() { match c.set_activity(activity(wanted.status, wanted.since)) { Ok(()) => sent = Some((wanted, now)), Err(e) => { - log::info!("Horizon: Discord presence disconnected ({e})"); + log::info!("RustNotMC: Discord presence disconnected ({e})"); client = None; sent = None; } @@ -226,7 +226,7 @@ fn run() { /// The activity Discord shows for `status`; `None` clears it. fn activity(status: Status, since: Option) -> Option { - let mut assets = json!({"large_image": "horizon", "large_text": "Horizon"}); + let mut assets = json!({"large_image": "horizon", "large_text": "RustNotMC"}); let (details, state, party) = match status { Status::Off => return None, Status::Menus => ("In the menus", None, None), @@ -338,11 +338,11 @@ impl Client { }; match client.handshake() { Ok(()) => { - log::info!("Horizon: connected to Discord for Rich Presence"); + log::info!("RustNotMC: connected to Discord for Rich Presence"); Some(client) } Err(e) => { - log::debug!("Horizon: Discord at {} refused: {e}", path.display()); + log::debug!("RustNotMC: Discord at {} refused: {e}", path.display()); None } } @@ -370,7 +370,7 @@ impl Client { match read_frame(&mut self.pipe)? { (FRAME, frame) if ours(&frame) => { if frame["evt"] == "ERROR" { - log::info!("Horizon: Discord presence: {}", frame["data"]["message"]); + log::info!("RustNotMC: Discord presence: {}", frame["data"]["message"]); } return Ok(()); } diff --git a/crates/horizon-client/src/game.rs b/crates/horizon-client/src/game.rs index dddd4f5..2673e13 100644 --- a/crates/horizon-client/src/game.rs +++ b/crates/horizon-client/src/game.rs @@ -390,7 +390,7 @@ impl Options { match arg.as_str() { "--help" | "-h" => { println!( - "Horizon — Minecraft Java Edition {} in Rust\n\n --resources PATH Prepared resources (horizon-prepare)\n --render-distance N Chunks, 2..64 (default 12)\n --world NAME World folder under saves/ (default \"New World\")\n --seed N World seed for new worlds (default 0)\n --width N, --height N Window size (default 1280 x 720)\n --creative Creative mode (default survival)\n --test-terrain Simple test terrain instead of vanilla generation\n --frames N Exit after N frames (testing)\n --world-frames N Exit after N frames drawn in the world (testing)\n --smoke-report PATH Write a JSON report on exit\n --benchmark SCENARIO Run a benchmark (standard, village, forest, ocean, mountain), write its report to benchmarks/ and quit\n --control Accept horizon-ctl commands on a local socket\n --control-socket PATH Control socket path (default $XDG_RUNTIME_DIR/horizon-control.sock)\n --server HOST[:PORT] Join a multiplayer server (offline mode) at start\n --quickPlaySingleplayer WORLD Open this world of saves/ at start, only if it exists (vanilla's)\n --quickPlayMultiplayer HOST[:PORT] The same as --server (vanilla's name)\n --name NAME Player name for multiplayer (default: generated once, kept in horizon-player.txt)\n --session-file PATH Signed-in account from the launcher (read once, then deleted)\n --dev-mod PATH A Horizon mod (.hmod or folder) to develop: always on, reloaded when rebuilt\n --in-frame Run single player's world in the frame, not on its server thread\n --pregen Add Horizon's /pregen command (docs/pregeneration.md)\n\nControls: mouse look, WASD move, Space jump, Left Shift sneak, Left Ctrl sprint,\nleft click break, right click place/use, 1-9/scroll hotbar, E inventory,\nQ drop, F3 debug, Esc pause.", + "RustNotMC — Minecraft Java Edition {} in Rust\n\n --resources PATH Prepared resources (horizon-prepare)\n --render-distance N Chunks, 2..64 (default 12)\n --world NAME World folder under saves/ (default \"New World\")\n --seed N World seed for new worlds (default 0)\n --width N, --height N Window size (default 1280 x 720)\n --creative Creative mode (default survival)\n --test-terrain Simple test terrain instead of vanilla generation\n --frames N Exit after N frames (testing)\n --world-frames N Exit after N frames drawn in the world (testing)\n --smoke-report PATH Write a JSON report on exit\n --benchmark SCENARIO Run a benchmark (standard, village, forest, ocean, mountain), write its report to benchmarks/ and quit\n --control Accept horizon-ctl commands on a local socket\n --control-socket PATH Control socket path (default $XDG_RUNTIME_DIR/horizon-control.sock)\n --server HOST[:PORT] Join a multiplayer server (offline mode) at start\n --quickPlaySingleplayer WORLD Open this world of saves/ at start, only if it exists (vanilla's)\n --quickPlayMultiplayer HOST[:PORT] The same as --server (vanilla's name)\n --name NAME Player name for multiplayer (default: generated once, kept in horizon-player.txt)\n --session-file PATH Signed-in account from the launcher (read once, then deleted)\n --dev-mod PATH A Horizon mod (.hmod or folder) to develop: always on, reloaded when rebuilt\n --in-frame Run single player's world in the frame, not on its server thread\n --pregen Add Horizon's /pregen command (docs/pregeneration.md)\n\nControls: mouse look, WASD move, Space jump, Left Shift sneak, Left Ctrl sprint,\nleft click break, right click place/use, 1-9/scroll hotbar, E inventory,\nQ drop, F3 debug, Esc pause.", horizon_core::VANILLA_VERSION ); return Ok(None); @@ -495,7 +495,7 @@ impl Options { o.player_name = Some(session.name.clone()); horizon_client::auth::set_current(session); } - Err(e) => eprintln!("Horizon: not signed in: {e}"), + Err(e) => eprintln!("RustNotMC: not signed in: {e}"), } } Ok(Some(o)) @@ -12008,6 +12008,8 @@ impl Game<'_> { || self.title.as_ref().is_some_and(|t| { matches!(self.screen, Screen::Options | Screen::Win) || !matches!(t.mode, horizon_client::title::Mode::Main) + // The Rust menu is translucent over the scene: it blurs it. + || (t.rust_menu && matches!(t.mode, horizon_client::title::Mode::Main)) }) || (self.title.is_none() && self.player.is_some() @@ -12091,6 +12093,7 @@ impl Game<'_> { self.close_container(); self.screen = Screen::Playing; self.pause_menu = true; + self.ui.pause = None; self.capture(true); } Screen::GameModeSwitcher => self.close_gamemode_switcher(false), @@ -12373,7 +12376,7 @@ impl Game<'_> { } fn update_world(&mut self) { if let Err(e) = self.poll_remote() { - log::warn!("Horizon: {e}"); + log::warn!("RustNotMC: {e}"); } self.prepare_lod(); if self.lod.is_some() { @@ -12445,7 +12448,7 @@ impl Game<'_> { .save_later(&modified, self.pack.assets.registry, self.res.biomes()) }) { - log::warn!("Horizon: failed to save unloaded chunks: {e}"); + log::warn!("RustNotMC: failed to save unloaded chunks: {e}"); } let (far_distance, far_reduced) = self.far_terrain_choice(); if let Some(renderer) = self.renderer.as_mut() { @@ -12552,7 +12555,7 @@ impl ApplicationHandler for Game<'_> { let size = self.options.window_size.map(f64::from); self.fullscreen = horizon_client::window::FullscreenState::new(fullscreen); let attributes = Window::default_attributes() - .with_title("Horizon") + .with_title("RustNotMC") .with_window_icon(horizon_client::window::icon()); // Wayland names the window by its app id, which the horizon.desktop entry matches. #[cfg(target_os = "linux")] @@ -13402,7 +13405,7 @@ impl ApplicationHandler for Game<'_> { format!(", cpu {:.1} ms", (end - start).as_secs_f32() * 1000.0) }); log::info!( - "Horizon: slow frame {cpu:.1} ms{worked} ({steps} ticks): {}", + "RustNotMC: slow frame {cpu:.1} ms{worked} ({steps} ticks): {}", horizon_client::spans::describe(&spans) ); } @@ -13466,7 +13469,7 @@ impl ApplicationHandler for Game<'_> { if self.frames == 0 { // The launcher times Play to this line (launcher/src/perf.rs). log::info!( - "Horizon: first frame after {} ms", + "RustNotMC: first frame after {} ms", self.started.elapsed().as_millis() ); } @@ -13580,7 +13583,7 @@ impl ApplicationHandler for Game<'_> { fn exiting(&mut self, _event_loop: &ActiveEventLoop) { self.pad_close_output(); if let Err(e) = self.save_for_exit() { - log::warn!("Horizon: failed to save the world on exit: {e}"); + log::warn!("RustNotMC: failed to save the world on exit: {e}"); } self.finish_perf(); } @@ -14121,7 +14124,7 @@ impl Game<'_> { )); } self.pending_entry = Some(entry); - log::info!("Horizon: world entry waiting for world resources"); + log::info!("RustNotMC: world entry waiting for world resources"); Ok(true) } @@ -14195,7 +14198,7 @@ impl Game<'_> { fn join_world_rest(&mut self) -> Result<()> { if self.rest_loader.is_some() { let waited = Instant::now(); - log::info!("Horizon: waiting for world resources"); + log::info!("RustNotMC: waiting for world resources"); while self.rest_loader.is_some() { self.poll_world_rest()?; if self.rest_loader.is_some() { @@ -14203,7 +14206,7 @@ impl Game<'_> { } } log::info!( - "Horizon: world resources joined after {} ms", + "RustNotMC: world resources joined after {} ms", waited.elapsed().as_millis() ); } @@ -14319,7 +14322,7 @@ fn load_resources( // Minecraft.rollbackResourcePacks: the packs' textures don't fit, start // with the game's own resources. Err(e) if root != vanilla_root => { - log::warn!("Horizon: resource packs failed to load ({e}); using the default resources"); + log::warn!("RustNotMC: resource packs failed to load ({e}); using the default resources"); pack_error = Some(e.to_string()); root = vanilla_root.to_path_buf(); None @@ -14330,7 +14333,7 @@ fn load_resources( if menu { horizon_client::telemetry::mark_ui_ready(); log::info!( - "Horizon: UI bundle ready after {} ms", + "RustNotMC: UI bundle ready after {} ms", started.elapsed().as_millis() ); publish(ui, &root); @@ -14348,7 +14351,7 @@ fn load_resources( // Minecraft.rollbackResourcePacks: the packs break loading, start // with the game's own resources. Err(e) if root != vanilla_root => { - log::warn!("Horizon: resource packs failed to load ({e}); using the default resources"); + log::warn!("RustNotMC: resource packs failed to load ({e}); using the default resources"); pack_error = Some(e.to_string()); root = vanilla_root.to_path_buf(); let assets = Assets::load(vanilla_root)?; @@ -14370,7 +14373,7 @@ fn load_resources( if menu { horizon_client::telemetry::mark_ui_ready(); log::info!( - "Horizon: UI bundle ready after {} ms", + "RustNotMC: UI bundle ready after {} ms", started.elapsed().as_millis() ); publish(ui, &root); @@ -14448,7 +14451,7 @@ fn load_resources( if menu { horizon_client::telemetry::mark_core_ready(); log::info!( - "Horizon: core-ready after {} ms", + "RustNotMC: core-ready after {} ms", started.elapsed().as_millis() ); } @@ -14459,7 +14462,7 @@ fn load_resources( let renderer_cpu = menu.then(|| prepare_renderer_textures(&pack)); if menu { log::info!( - "Horizon: handoff CPU resources prepared on worker in {} ms", + "RustNotMC: handoff CPU resources prepared on worker in {} ms", prepared_at.elapsed().as_millis() ); } @@ -14488,7 +14491,7 @@ fn load_resources( progress.set(9); horizon_client::telemetry::mark_rest_ready(); log::info!( - "Horizon: rest-ready after {} ms", + "RustNotMC: rest-ready after {} ms", started.elapsed().as_millis() ); Ok(()) @@ -14548,7 +14551,7 @@ fn load_world_rest( let recipes = Recipes::load(root, &items)?; let transformers = horizon_client::block_transform::Transformers::load(root, assets.registry)?; log::info!( - "Horizon: resources loaded in {:.1}s; {} block states, {} items, {} biomes; {} worker threads", + "RustNotMC: resources loaded in {:.1}s; {} block states, {} items, {} biomes; {} worker threads", started.elapsed().as_secs_f32(), facts.states.len(), items.items.len(), @@ -14984,7 +14987,7 @@ impl Loading { .map(f64::from); self.fullscreen = horizon_client::window::FullscreenState::new(fullscreen); let attributes = Window::default_attributes() - .with_title("Horizon") + .with_title("RustNotMC") .with_window_icon(horizon_client::window::icon()); // Wayland names the window by its app id, which the horizon.desktop entry matches. #[cfg(target_os = "linux")] @@ -15035,7 +15038,7 @@ impl Loading { /// and title panorama. fn set_ui(&mut self, gui: UiResources, root: PathBuf) { log::info!( - "Horizon: loading the title artwork after {} ms", + "RustNotMC: loading the title artwork after {} ms", self.started.elapsed().as_millis() ); self.menu.set_root(root, &self.settings); @@ -15104,13 +15107,13 @@ impl Loading { self.menu.perf.title_shown() } Ok(_) => {} - Err(e) => log::warn!("Horizon: loading screen frame failed: {e}"), + Err(e) => log::warn!("RustNotMC: loading screen frame failed: {e}"), } } if !self.shown { self.shown = true; log::info!( - "Horizon: loading screen shown after {} ms", + "RustNotMC: loading screen shown after {} ms", self.started.elapsed().as_millis() ); } @@ -15139,7 +15142,7 @@ impl Loading { self.settings.horizon.api, )?; log::info!( - "Horizon: world renderer ready after {} ms", + "RustNotMC: world renderer ready after {} ms", self.started.elapsed().as_millis() ); let renderer_ms = renderer_at.elapsed().as_millis(); @@ -15180,7 +15183,7 @@ impl Loading { game.apply_settings(); game.previous = Instant::now(); log::info!( - "Horizon: startup handoff {} ms (renderer {} ms, start_game {} ms)", + "RustNotMC: startup handoff {} ms (renderer {} ms, start_game {} ms)", handoff_at.elapsed().as_millis(), renderer_ms, game_ms @@ -15370,7 +15373,7 @@ pub fn run() -> Result<()> { let mut pack_error = None; options.resources = packs::startup_root(&vanilla_root, &early_settings.resource_packs, &[]) .unwrap_or_else(|e| { - log::warn!("Horizon: resource packs not applied: {e}"); + log::warn!("RustNotMC: resource packs not applied: {e}"); pack_error = Some(e.to_string()); vanilla_root.clone() }); diff --git a/crates/horizon-client/src/game/agent_settings.rs b/crates/horizon-client/src/game/agent_settings.rs index 5045f1c..219992f 100644 --- a/crates/horizon-client/src/game/agent_settings.rs +++ b/crates/horizon-client/src/game/agent_settings.rs @@ -25,7 +25,7 @@ impl Game<'_> { if self.settings.extras.no_ai { if self.options.control.is_some() { log::warn!( - "Horizon: control socket not opened: {}", + "RustNotMC: control socket not opened: {}", horizon_core::no_ai::REFUSAL ); } @@ -35,7 +35,7 @@ impl Game<'_> { // Asked for on the command line: failing to listen is an error. let server = control::Server::start(path) .map_err(|e| format!("control socket {}: {e}", path.display()))?; - log::info!("Horizon: control socket {}", server.path().display()); + log::info!("RustNotMC: control socket {}", server.path().display()); self.control = Some(server); } else if self.agent_control_on { self.open_agent_socket(); @@ -49,10 +49,10 @@ impl Game<'_> { let path = self.agent_socket_path(); match control::Server::start(&path) { Ok(server) => { - log::info!("Horizon: control socket {}", server.path().display()); + log::info!("RustNotMC: control socket {}", server.path().display()); self.control = Some(server); } - Err(e) => log::warn!("Horizon: control socket {}: {e}", path.display()), + Err(e) => log::warn!("RustNotMC: control socket {}: {e}", path.display()), } } @@ -68,7 +68,7 @@ impl Game<'_> { .is_some_and(|c| !c.path().as_os_str().is_empty()); if self.settings.extras.no_ai || (changed && !wanted) { if open { - log::info!("Horizon: control socket closed"); + log::info!("RustNotMC: control socket closed"); self.control = None; } } else if changed && wanted && self.control.is_none() { @@ -130,7 +130,7 @@ impl Game<'_> { let config = serde_json::json!({ "mcpServers": { "horizon-game": { "command": ctl, "args": ["--socket", socket, "mcp"] } } }); format!( - "Horizon agent control (this computer only)\nSocket: {}\nTry it: \"{}\" --socket \"{}\" state\nMCP config:\n{}\n", + "RustNotMC agent control (this computer only)\nSocket: {}\nTry it: \"{}\" --socket \"{}\" state\nMCP config:\n{}\n", socket.display(), ctl.display(), socket.display(), diff --git a/crates/horizon-client/src/game/chat.rs b/crates/horizon-client/src/game/chat.rs index 4ed7a05..536739b 100644 --- a/crates/horizon-client/src/game/chat.rs +++ b/crates/horizon-client/src/game/chat.rs @@ -99,6 +99,11 @@ pub struct UiState { pub screenshot_message: Option, /// The options screens. pub options: horizon_client::options_ui::OptionsUi, + /// The Rust pause menu over a world (`rustMenu`), whether the preference + /// allows it, and when the menu opened. + pub pause: Option, + pub pause_rust: Option, + pub pause_at: Option, /// The prepared resources before resource packs are layered on. pub vanilla_root: std::path::PathBuf, /// Death screen cause and when the player died (buttons wait 20 ticks). diff --git a/crates/horizon-client/src/game/commands/pregen.rs b/crates/horizon-client/src/game/commands/pregen.rs index eb3c376..276dbca 100644 --- a/crates/horizon-client/src/game/commands/pregen.rs +++ b/crates/horizon-client/src/game/commands/pregen.rs @@ -206,7 +206,7 @@ impl Game<'_> { .count(); let [missing, lighting, unlit] = streaming.unstick_light(&mut self.world, &row); log::warn!( - "Horizon: pregeneration waits on row {:?}: {missing} not loaded, {lighting} being lit, \ + "RustNotMC: pregeneration waits on row {:?}: {missing} not loaded, {lighting} being lit, \ {unlit} unlit with no light job (queued again), {waiting} not post-processed; {:?}", row.first(), streaming.stages() diff --git a/crates/horizon-client/src/game/dedicated.rs b/crates/horizon-client/src/game/dedicated.rs index 07f3d6c..51df99a 100644 --- a/crates/horizon-client/src/game/dedicated.rs +++ b/crates/horizon-client/src/game/dedicated.rs @@ -343,7 +343,7 @@ impl Game<'_> { "Worker-Main-1", "WARN", &format!( - "Horizon doesn't generate the {preset} world preset yet: using minecraft:normal" + "RustNotMC doesn't generate the {preset} world preset yet: using minecraft:normal" ), ); } diff --git a/crates/horizon-client/src/game/dialogs.rs b/crates/horizon-client/src/game/dialogs.rs index 4928b0a..9d33cbe 100644 --- a/crates/horizon-client/src/game/dialogs.rs +++ b/crates/horizon-client/src/game/dialogs.rs @@ -58,7 +58,7 @@ impl Game<'_> { /// under the warning screen, it is what Back returns to. pub(super) fn show_dialog(&mut self, tag: &Tag) { let Some(dialog) = Dialog::parse(tag) else { - log::warn!("Horizon: failed to show dialog for data {tag:?}"); + log::warn!("RustNotMC: failed to show dialog for data {tag:?}"); return; }; let values = dialog.inputs.iter().map(|i| i.control.initial()).collect(); @@ -144,7 +144,7 @@ impl Game<'_> { self.send_chat(&format!("/{command}")); } else { log::warn!( - "Horizon: commands are not supported in configuration, trying to run '{command}'" + "RustNotMC: commands are not supported in configuration, trying to run '{command}'" ); } } @@ -153,7 +153,7 @@ impl Game<'_> { use horizon_client::clipboard::Clipboard; self.clipboard.set(&value); } - Some(other) => log::info!("Horizon: dialog action {other:?} is not supported yet"), + Some(other) => log::info!("RustNotMC: dialog action {other:?} is not supported yet"), None => {} } if !self.dialog_open() { @@ -178,7 +178,7 @@ impl Game<'_> { }); match found { Some(tag) => self.show_dialog(&tag), - None => log::warn!("Horizon: unknown dialog {id}"), + None => log::warn!("RustNotMC: unknown dialog {id}"), } } tag => self.show_dialog(tag), @@ -200,7 +200,7 @@ impl Game<'_> { .and_then(|r| r.registries.data("minecraft:dialog", *id).cloned()); match tag { Some(tag) => self.show_dialog(&tag), - None => log::warn!("Horizon: unknown dialog {id}"), + None => log::warn!("RustNotMC: unknown dialog {id}"), } } } diff --git a/crates/horizon-client/src/game/extras.rs b/crates/horizon-client/src/game/extras.rs index 4d21f52..816e601 100644 --- a/crates/horizon-client/src/game/extras.rs +++ b/crates/horizon-client/src/game/extras.rs @@ -111,7 +111,7 @@ impl Game<'_> { &mut title.mode { log::info!( - "Horizon: reconnecting to {} in {} s", + "RustNotMC: reconnecting to {} in {} s", horizon_client::net::shown_address(&retry.address), retry.seconds_left(std::time::Instant::now()) ); diff --git a/crates/horizon-client/src/game/functions.rs b/crates/horizon-client/src/game/functions.rs index 9cb0c5c..c6b9a9b 100644 --- a/crates/horizon-client/src/game/functions.rs +++ b/crates/horizon-client/src/game/functions.rs @@ -108,7 +108,7 @@ impl Game<'_> { .collect(); let store = DataStore::load(&packs); for (id, e) in &store.errors { - log::warn!("Horizon: failed to load function {id}: {e}"); + log::warn!("RustNotMC: failed to load function {id}: {e}"); } self.fns.store = store; self.sync_function_registries(); diff --git a/crates/horizon-client/src/game/growth.rs b/crates/horizon-client/src/game/growth.rs index 1c5de45..c14ffeb 100644 --- a/crates/horizon-client/src/game/growth.rs +++ b/crates/horizon-client/src/game/growth.rs @@ -67,11 +67,11 @@ pub(super) fn install_live_features( match features { Ok(Some(features)) => { res.behaviours().set_live_features(Arc::new(features)); - log::info!("Horizon: live features ready in {:?}", started.elapsed()); + log::info!("RustNotMC: live features ready in {:?}", started.elapsed()); } Ok(None) => { - log::warn!("Horizon: the worldgen bundle has no features; saplings will not grow") + log::warn!("RustNotMC: the worldgen bundle has no features; saplings will not grow") } - Err(e) => log::warn!("Horizon: live features unavailable: {e}"), + Err(e) => log::warn!("RustNotMC: live features unavailable: {e}"), } } diff --git a/crates/horizon-client/src/game/integrated.rs b/crates/horizon-client/src/game/integrated.rs index df40ff3..0a30f57 100644 --- a/crates/horizon-client/src/game/integrated.rs +++ b/crates/horizon-client/src/game/integrated.rs @@ -139,7 +139,7 @@ impl Integrated { impl Drop for Integrated { fn drop(&mut self) { if let Err(error) = self.halt() { - log::error!("Horizon: integrated server shutdown: {error}"); + log::error!("RustNotMC: integrated server shutdown: {error}"); } } } @@ -262,7 +262,7 @@ impl Game<'_> { &ready_tx, ); if let Err(e) = result { - log::error!("Horizon: integrated server: {e}"); + log::error!("RustNotMC: integrated server: {e}"); *server_flags.failure.lock().unwrap() = Some(e.to_string()); let _ = ready_tx.send(Err(e.to_string())); } @@ -629,7 +629,7 @@ impl Game<'_> { match pending { Publish::Open(listener, settings) => { if let Err(e) = host.hub.lan.listen_on(listener, true) { - log::error!("Horizon: Open to LAN: {e}"); + log::error!("RustNotMC: Open to LAN: {e}"); } host.settings = settings; host.hub.config.force_game_mode = settings.force_game_mode; diff --git a/crates/horizon-client/src/game/levels.rs b/crates/horizon-client/src/game/levels.rs index ab316c4..30f3f0f 100644 --- a/crates/horizon-client/src/game/levels.rs +++ b/crates/horizon-client/src/game/levels.rs @@ -377,7 +377,7 @@ impl Game<'_> { format!(", cpu {:.1} ms", (end - start).as_secs_f32() * 1000.0) }); log::info!( - "Horizon: slow tick {wall:.1} ms{cpu} ({} mobs): {}", + "RustNotMC: slow tick {wall:.1} ms{cpu} ({} mobs): {}", self.mobs.len(), horizon_client::spans::describe(&spans) ); diff --git a/crates/horizon-client/src/game/mods.rs b/crates/horizon-client/src/game/mods.rs index 52dc46f..69322d6 100644 --- a/crates/horizon-client/src/game/mods.rs +++ b/crates/horizon-client/src/game/mods.rs @@ -234,14 +234,14 @@ pub(super) fn content_root( id: m.id.clone(), content, }), - Err(e) => log::warn!("Horizon: mod {} content not loaded: {e}", m.id), + Err(e) => log::warn!("RustNotMC: mod {} content not loaded: {e}", m.id), } } match mod_content::resource_root(root, &mods, &here.join(".horizon-cache")) { Ok(out) => { if out != root { log::info!( - "Horizon: content from {} mod(s) in {}", + "RustNotMC: content from {} mod(s) in {}", mods.len(), out.display() ); @@ -249,7 +249,7 @@ pub(super) fn content_root( out } Err(e) => { - log::warn!("Horizon: content mods not loaded: {e}"); + log::warn!("RustNotMC: content mods not loaded: {e}"); root.to_owned() } } @@ -264,7 +264,7 @@ impl Game<'_> { let found = horizon_mods::find(&dir).len() + self.mods.dev.len(); if found > 0 { log::warn!( - "Horizon: {found} mod(s) not started: this build has no mod runtime (build with --features mods)" + "RustNotMC: {found} mod(s) not started: this build has no mod runtime (build with --features mods)" ); } } @@ -620,7 +620,7 @@ impl Game<'_> { if self.options.execution_role.is_client() { self.system_message(Text::literal("Mods reloaded").with_color(text::GRAY)); } else { - log::info!("Horizon: mods reloaded"); + log::info!("RustNotMC: mods reloaded"); } } } diff --git a/crates/horizon-client/src/game/moved_extras.rs b/crates/horizon-client/src/game/moved_extras.rs index bd27703..f0e290e 100644 --- a/crates/horizon-client/src/game/moved_extras.rs +++ b/crates/horizon-client/src/game/moved_extras.rs @@ -93,7 +93,7 @@ mod with_mods { installed = true; } Err(e) => { - log::warn!("Horizon: {} not installed, next start retries: {e}", m.id); + log::warn!("RustNotMC: {} not installed, next start retries: {e}", m.id); self.mods.moved.notices.push( Text::literal(format!( "{} moved to the mod browser; it couldn't be installed for you yet, Horizon tries again at the next start", diff --git a/crates/horizon-client/src/game/options.rs b/crates/horizon-client/src/game/options.rs index 7ac4ae9..1e8195f 100644 --- a/crates/horizon-client/src/game/options.rs +++ b/crates/horizon-client/src/game/options.rs @@ -101,6 +101,24 @@ impl Game<'_> { self.screen = Screen::Options; self.options_from_title = from_title; let ui = &mut self.ui.options; + // The Rust settings shell is the default; `horizon.txt`'s `rustSettings` + // off restores vanilla's screens (the rollback). + let dir = Self::options_path() + .parent() + .map(std::path::Path::to_path_buf) + .unwrap_or_default(); + ui.rust = horizon_client::ui_theme::preference(&dir, "rustSettings").is_none_or(|v| { + !matches!( + v.trim().to_ascii_lowercase().as_str(), + "false" | "0" | "off" + ) + }); + // The shell's rail is the main page: it opens on the first category. + let page = if ui.rust && page == Page::Main { + Page::Video + } else { + page + }; ui.open_at(!from_title && self.title.is_none(), page); let root = self.options.resources.clone(); ui.languages = lang::available(&[&root]); diff --git a/crates/horizon-client/src/game/packs.rs b/crates/horizon-client/src/game/packs.rs index 013b94d..eb6478a 100644 --- a/crates/horizon-client/src/game/packs.rs +++ b/crates/horizon-client/src/game/packs.rs @@ -40,7 +40,7 @@ pub fn open_folder(dir: &Path) { "xdg-open" }; if let Err(e) = std::process::Command::new(program).arg(dir).spawn() { - log::warn!("Horizon: could not open {}: {e}", dir.display()); + log::warn!("RustNotMC: could not open {}: {e}", dir.display()); } } /// `Util.getPlatform().openUri`: the system browser on the link. @@ -137,7 +137,7 @@ impl Game<'_> { return; } if let Err(e) = self.reload_selected_packs() { - log::warn!("Horizon: resource reload failed: {e}"); + log::warn!("RustNotMC: resource reload failed: {e}"); if self.screen != super::Screen::Options { self.open_options_at( self.title.is_some(), diff --git a/crates/horizon-client/src/game/pad.rs b/crates/horizon-client/src/game/pad.rs index 9a71bdc..22fa668 100644 --- a/crates/horizon-client/src/game/pad.rs +++ b/crates/horizon-client/src/game/pad.rs @@ -160,7 +160,7 @@ impl Game<'_> { fn pad_button_logged(&mut self, event_loop: &ActiveEventLoop, button: Button, down: bool) { if let Err(e) = self.pad_button(event_loop, button, down) { - log::warn!("Horizon: controller {}: {e}", button.name()); + log::warn!("RustNotMC: controller {}: {e}", button.name()); } } diff --git a/crates/horizon-client/src/game/pad/hardware.rs b/crates/horizon-client/src/game/pad/hardware.rs index b464ef3..42e301a 100644 --- a/crates/horizon-client/src/game/pad/hardware.rs +++ b/crates/horizon-client/src/game/pad/hardware.rs @@ -74,7 +74,7 @@ impl Pads { } Err(gilrs::Error::NotImplemented(_)) => None, Err(e) => { - log::warn!("Horizon: controllers are unavailable: {e}"); + log::warn!("RustNotMC: controllers are unavailable: {e}"); None } }; @@ -380,7 +380,7 @@ impl Game<'_> { let end = Instant::now() + Duration::from_millis(u64::from(pulse.millis) + 50); self.pad.devices.rumbles.push((effect, end)); } - Err(e) => log::debug!("Horizon: controller vibration: {e}"), + Err(e) => log::debug!("RustNotMC: controller vibration: {e}"), } } diff --git a/crates/horizon-client/src/game/pad_menu.rs b/crates/horizon-client/src/game/pad_menu.rs index 30f2e73..3110dad 100644 --- a/crates/horizon-client/src/game/pad_menu.rs +++ b/crates/horizon-client/src/game/pad_menu.rs @@ -947,7 +947,7 @@ impl Game<'_> { None => self.options_key(key.expect("a key"), None), }; if let Err(e) = result { - log::warn!("Horizon: on-screen keyboard: {e}"); + log::warn!("RustNotMC: on-screen keyboard: {e}"); } } else if self.title.is_some() { match key { diff --git a/crates/horizon-client/src/game/persist.rs b/crates/horizon-client/src/game/persist.rs index 8ceea7e..a478b90 100644 --- a/crates/horizon-client/src/game/persist.rs +++ b/crates/horizon-client/src/game/persist.rs @@ -1020,7 +1020,7 @@ impl Game<'_> { let keys: HashSet<(i32, i32)> = unloaded.iter().map(|c| (c.x, c.z)).collect(); let chunks = self.entity_chunks(&keys, true); if let Err(e) = self.save.save_entities_later(chunks) { - log::warn!("Horizon: failed to save entities: {e}"); + log::warn!("RustNotMC: failed to save entities: {e}"); } } /// Leaving a dimension: its entities are saved with it. diff --git a/crates/horizon-client/src/game/remote.rs b/crates/horizon-client/src/game/remote.rs index 22b7c13..a503fc6 100644 --- a/crates/horizon-client/src/game/remote.rs +++ b/crates/horizon-client/src/game/remote.rs @@ -312,7 +312,7 @@ impl Game<'_> { } self.join_world_rest()?; if let Err(error) = self.join_server(address, name, None, cookies) { - log::warn!("Horizon: could not join server: {error}"); + log::warn!("RustNotMC: could not join server: {error}"); if self.title.is_none() { self.title = Some(horizon_client::title::Title::new( std::env::current_dir()?.join("saves"), @@ -839,7 +839,7 @@ impl Game<'_> { break; } Next::Lost => { - log::warn!("Horizon: the chunk decoder stopped; a column is missing"); + log::warn!("RustNotMC: the chunk decoder stopped; a column is missing"); continue; } }; @@ -912,7 +912,7 @@ impl Game<'_> { if let Some(r) = self.remote.as_mut() { r.decode_errors += 1; if r.decode_errors <= 20 { - log::warn!("Horizon: skipped undecodable packet {e}"); + log::warn!("RustNotMC: skipped undecodable packet {e}"); } } } @@ -920,7 +920,7 @@ impl Game<'_> { reason, from_server, } => { - log::info!("Horizon: disconnected: {reason}"); + log::info!("RustNotMC: disconnected: {reason}"); // ClientboundTransferPacket left a target: connect there // instead of showing the disconnect, the stored cookies // carried over (ClientCommonPacketListenerImpl. diff --git a/crates/horizon-client/src/game/remote_chunks.rs b/crates/horizon-client/src/game/remote_chunks.rs index 47f4746..7bda348 100644 --- a/crates/horizon-client/src/game/remote_chunks.rs +++ b/crates/horizon-client/src/game/remote_chunks.rs @@ -186,7 +186,7 @@ impl ChunkDecoder { } }); if let Err(e) = spawned { - log::warn!("Horizon: no chunk decoder thread ({e}); chunks decode in the frame"); + log::warn!("RustNotMC: no chunk decoder thread ({e}); chunks decode in the frame"); } Self { jobs, done } } @@ -244,7 +244,7 @@ impl Game<'_> { let chunk = match column { Ok(chunk) => chunk, Err(e) => { - log::warn!("Horizon: chunk {} {}: {e}", p.x, p.z); + log::warn!("RustNotMC: chunk {} {}: {e}", p.x, p.z); return; } }; diff --git a/crates/horizon-client/src/game/screens.rs b/crates/horizon-client/src/game/screens.rs index 200a0e6..3d03a25 100644 --- a/crates/horizon-client/src/game/screens.rs +++ b/crates/horizon-client/src/game/screens.rs @@ -133,7 +133,59 @@ impl Game<'_> { pub(super) fn external_server(&self) -> bool { self.remote.is_some() && self.integrated.is_none() } + /// Builds the Rust pause menu on first use, when `rustMenu` is on. + fn ensure_rust_pause(&mut self) { + if self.ui.pause.is_some() { + return; + } + let rust = *self.ui.pause_rust.get_or_insert_with(|| { + let dir = Self::options_path() + .parent() + .map(std::path::Path::to_path_buf) + .unwrap_or_default(); + horizon_client::ui_theme::preference(&dir, "rustMenu").is_none_or(|v| { + !matches!( + v.trim().to_ascii_lowercase().as_str(), + "false" | "0" | "off" + ) + }) + }); + if !rust { + return; + } + let dir = Self::options_path() + .parent() + .map(std::path::Path::to_path_buf) + .unwrap_or_default(); + let mut menu = horizon_client::rustui::RustMenu::new(&dir.join("saves")); + let server = self.remote.is_some(); + let last = self.settings.file.string("lastServer"); + menu.current = Some(horizon_client::rustui::CurrentServer { + name: if server { + last.clone() + } else { + self.level.name.to_string() + }, + address: if server { last } else { String::new() }, + singleplayer: !server, + }); + menu.tab = horizon_client::rustui::Tab::Current; + self.ui.pause = Some(menu); + self.ui.pause_at = Some(std::time::Instant::now()); + } pub(super) fn draw_pause_menu(&mut self, batch: &mut HudBatch) { + self.ensure_rust_pause(); + if let Some(menu) = &self.ui.pause { + let last = self.settings.file.string("lastServer"); + let meta = horizon_client::rustui::Meta { + elapsed: self + .ui + .pause_at + .map_or(0.0, |at| at.elapsed().as_secs_f32()), + }; + menu.draw(&self.gui.atlas, batch, self.cursor, &last, &meta); + return; + } let friends = self.friends_view().shown; let atlas = &self.gui.atlas; let (w, h) = (batch.width, batch.height); @@ -211,14 +263,42 @@ impl Game<'_> { } } pub(super) fn pause_click(&mut self) -> Result<()> { - let (w, h) = { - let size = self - .renderer - .as_ref() - .map_or([1, 1], |r| [r.config.width, r.config.height]); - let b = HudBatch::new(size); - (b.width, b.height) - }; + let size = self + .renderer + .as_ref() + .map_or([1, 1], |r| [r.config.width, r.config.height]); + let b = HudBatch::new(size); + let (w, h) = (b.width, b.height); + if self.ui.pause.is_some() { + let last = self.settings.file.string("lastServer"); + let frame = horizon_client::rustui::Frame::new((w, h), b.scale, self.cursor); + let (outcome, sound) = { + let menu = self.ui.pause.as_mut().expect("checked above"); + menu.click(&frame, &last) + }; + if sound { + self.audio.play_button_click(); + } + use horizon_client::rustui::Outcome as O; + match outcome { + O::Resume => { + self.ui.pause = None; + self.screen = Screen::Playing; + self.pause_menu = false; + self.capture(true); + } + O::Options => self.open_options(false), + O::Stats => self.open_stats(), + O::Advancements => self.open_advancements(true), + O::WorldOptions => self.open_world_options(), + O::Quit => { + self.ui.pause = None; + self.close_world()?; + } + _ => {} + } + return Ok(()); + } let links = !self.server_links().is_empty(); let friends = pause_icons(w, h, links)[FRIENDS_ICON]; let hit = pause_buttons(w, h, self.external_server(), links) diff --git a/crates/horizon-client/src/game/server_links.rs b/crates/horizon-client/src/game/server_links.rs index 85fda71..71eca03 100644 --- a/crates/horizon-client/src/game/server_links.rs +++ b/crates/horizon-client/src/game/server_links.rs @@ -57,7 +57,7 @@ pub(super) fn trusted(links: Vec) -> Vec { .filter(|l| { let ok = valid_untrusted_uri(&l.link); if !ok { - log::warn!("Horizon: server sent an invalid link: {}", l.link); + log::warn!("RustNotMC: server sent an invalid link: {}", l.link); } ok }) diff --git a/crates/horizon-client/src/game/server_mods.rs b/crates/horizon-client/src/game/server_mods.rs index a5a4b0f..ee86716 100644 --- a/crates/horizon-client/src/game/server_mods.rs +++ b/crates/horizon-client/src/game/server_mods.rs @@ -384,13 +384,13 @@ mod run { let state = match crate::game::render_control::parse_state(registry, &b.state) { Ok(state) => state, Err(e) => { - log::warn!("Horizon: a server mod set {}: {e}", b.state); + log::warn!("RustNotMC: a server mod set {}: {e}", b.state); continue; } }; if let Err(e) = self.place_state([b.x, b.y, b.z], state, false) { log::debug!( - "Horizon: a server mod's block at {} {} {}: {e:?}", + "RustNotMC: a server mod's block at {} {} {}: {e:?}", b.x, b.y, b.z @@ -565,7 +565,7 @@ mod run { let over = queued.len() - MAX_QUEUED_WRITES; queued.drain(..over); log::warn!( - "Horizon: mod {name} set more blocks than wait for their level: {over} dropped" + "RustNotMC: mod {name} set more blocks than wait for their level: {over} dropped" ); } } diff --git a/crates/horizon-client/src/game/server_packs.rs b/crates/horizon-client/src/game/server_packs.rs index 5650c58..4db9b8f 100644 --- a/crates/horizon-client/src/game/server_packs.rs +++ b/crates/horizon-client/src/game/server_packs.rs @@ -326,7 +326,7 @@ impl Game<'_> { entry.accept_textures = setting; } if let Err(e) = servers::save(&file, &list) { - log::warn!("Horizon: could not save {}: {e}", file.display()); + log::warn!("RustNotMC: could not save {}: {e}", file.display()); } } Ok(()) @@ -373,7 +373,7 @@ impl Game<'_> { match download::Queue::open(dir) { Ok(queue) => state.queue = Some(queue), Err(e) => { - log::error!("Horizon: failed to open the download queue: {e}"); + log::error!("RustNotMC: failed to open the download queue: {e}"); // Every request failed, as the notifier would hear it. let (progress, events) = std::sync::mpsc::channel(); for _ in &requests { @@ -411,7 +411,7 @@ impl Game<'_> { .map(|(id, path)| packs::server_pack(*id, path)) .collect(); let Some(server) = server else { - log::warn!("Horizon: invalid pack metadata in a server pack, ignoring all"); + log::warn!("RustNotMC: invalid pack metadata in a server pack, ignoring all"); self.finish_pack_reload(false); return; }; @@ -452,7 +452,7 @@ impl Game<'_> { match handle { Ok(handle) => self.server_packs.reload = Some(PackReload { progress, handle }), Err(e) => { - log::error!("Horizon: could not start the pack reload worker: {e}"); + log::error!("RustNotMC: could not start the pack reload worker: {e}"); self.finish_pack_reload(false); } } @@ -476,7 +476,7 @@ impl Game<'_> { { Ok(()) => true, Err(e) => { - log::warn!("Horizon: server resource pack reload failed: {e}"); + log::warn!("RustNotMC: server resource pack reload failed: {e}"); false } }; diff --git a/crates/horizon-client/src/game/startup_menu.rs b/crates/horizon-client/src/game/startup_menu.rs index fdeb726..fe71bc7 100644 --- a/crates/horizon-client/src/game/startup_menu.rs +++ b/crates/horizon-client/src/game/startup_menu.rs @@ -656,7 +656,7 @@ impl Loading { if let Some(loader) = loaded.rest_loader.take() && let Err(error) = loader.finish() { - log::warn!("Horizon: replaced resource generation failed: {error}"); + log::warn!("RustNotMC: replaced resource generation failed: {error}"); } } self.loaded = None; diff --git a/crates/horizon-client/src/game/world_loading.rs b/crates/horizon-client/src/game/world_loading.rs index d7c4f2b..1a57f4a 100644 --- a/crates/horizon-client/src/game/world_loading.rs +++ b/crates/horizon-client/src/game/world_loading.rs @@ -255,7 +255,7 @@ pub(super) fn preload_world_data( }); match spawned { Ok(thread) => *preload = Preload::Started { thread, left: None }, - Err(e) => log::warn!("Horizon: world data preload: {e}"), + Err(e) => log::warn!("RustNotMC: world data preload: {e}"), } } Preload::Idle => {} @@ -268,7 +268,7 @@ pub(super) fn preload_world_data( super::lan::forget_sync_data(); horizon_threads::release_free_memory(); *preload = Preload::Idle; - log::info!("Horizon: preloaded world data dropped, no world opened"); + log::info!("RustNotMC: preloaded world data dropped, no world opened"); } } } diff --git a/crates/horizon-client/src/gfx.rs b/crates/horizon-client/src/gfx.rs index beb8b90..e18c6c3 100644 --- a/crates/horizon-client/src/gfx.rs +++ b/crates/horizon-client/src/gfx.rs @@ -122,7 +122,7 @@ fn world_pass_after_culling<'e>( keep_depth: bool, ) -> wgpu::RenderPass<'e> { encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: Some("Horizon world, after culling"), + label: Some("RustNotMC world, after culling"), color_attachments: &[Some(wgpu::RenderPassColorAttachment { view, resolve_target: None, @@ -815,7 +815,7 @@ struct Opened { fn describe_adapter(adapter: &wgpu::Adapter) { let info = adapter.get_info(); log::info!( - "Horizon renderer: {} ({:?}, {:?})", + "RustNotMC renderer: {} ({:?}, {:?})", info.name, info.backend, info.device_type @@ -885,7 +885,7 @@ async fn open_device( for (attempt, backends) in order.iter().copied().enumerate() { let name = backends_name(backends); if attempt > 0 { - log::warn!("Horizon renderer: trying {name} ({})", failures.join("; ")); + log::warn!("RustNotMC renderer: trying {name} ({})", failures.join("; ")); } let instance = wgpu::Instance::new(instance_descriptor(backends)); let surface = if offscreen { @@ -946,7 +946,7 @@ async fn open_device( limits.max_texture_array_layers, )); let desc = wgpu::DeviceDescriptor { - label: Some("Horizon device"), + label: Some("RustNotMC device"), required_features: features, required_limits: limits, ..Default::default() @@ -994,7 +994,7 @@ const NO_GPU_DRIVER: &str = "No Vulkan or OpenGL graphics driver found: Horizon /// only sign of where the game stopped. The log file is written unbuffered; /// the flush is for loggers that buffer. fn startup_step(step: std::fmt::Arguments) { - log::info!("Horizon renderer: {step}"); + log::info!("RustNotMC renderer: {step}"); log::logger().flush(); } /// How far the first frame on a new device got, for `startup_step`. @@ -1149,7 +1149,7 @@ impl Renderer { } let gpu_timer = timing::GpuTimer::new(&device, &queue); let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some("Horizon terrain"), + label: Some("RustNotMC terrain"), source: wgpu::ShaderSource::Wgsl(include_str!("terrain.wgsl").into()), }); let entry = |binding, visibility, ty| wgpu::BindGroupLayoutEntry { @@ -1166,14 +1166,14 @@ impl Renderer { }; let sprite_arrays = layers.div_ceil(split).max(1); if sprite_arrays > 1 { - log::info!("Horizon: {layers} block textures in {sprite_arrays} arrays"); + log::info!("RustNotMC: {layers} block textures in {sprite_arrays} arrays"); } let sprite_constants = [ ("SPRITE_ARRAYS", f64::from(sprite_arrays)), ("SPRITE_SPLIT", f64::from(split)), ]; let bindings = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { - label: Some("Horizon terrain bindings"), + label: Some("RustNotMC terrain bindings"), entries: &[ entry( 0, @@ -1222,7 +1222,7 @@ impl Renderer { ], }); let layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { - label: Some("Horizon terrain layout"), + label: Some("RustNotMC terrain layout"), bind_group_layouts: &[Some(&bindings)], ..Default::default() }); @@ -1413,7 +1413,7 @@ impl Renderer { Some(alpha_blend), ); let globals = device.create_buffer(&wgpu::BufferDescriptor { - label: Some("Horizon globals"), + label: Some("RustNotMC globals"), size: std::mem::size_of::() as u64, usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, mapped_at_creation: false, @@ -1532,7 +1532,7 @@ impl Renderer { }); let group = terrain_group( &device, - "Horizon terrain resources", + "RustNotMC terrain resources", &bindings, &globals, &sprite_views, @@ -1668,7 +1668,7 @@ impl Renderer { )?; hud.atlas_texture = Some(atlas.clone()); let entity_shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some("Horizon entities"), + label: Some("RustNotMC entities"), source: wgpu::ShaderSource::Wgsl(entity_shader().into()), }); let entity_bindings = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { @@ -2266,7 +2266,7 @@ impl Renderer { ..Default::default() }); let border_shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some("Horizon world border"), + label: Some("RustNotMC world border"), source: wgpu::ShaderSource::Wgsl(include_str!("border.wgsl").into()), }); let border_attributes = wgpu::vertex_attr_array![0=>Float32x3,1=>Float32x2]; @@ -2326,7 +2326,7 @@ impl Renderer { cache: None, }); let screen_shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some("Horizon screen effects"), + label: Some("RustNotMC screen effects"), source: wgpu::ShaderSource::Wgsl(include_str!("screen.wgsl").into()), }); let screen_attributes = @@ -2757,7 +2757,7 @@ impl Renderer { let read = cull.is_some_and(|c| c.depth_test() == cull::DepthTest::InShader); device .create_texture(&wgpu::TextureDescriptor { - label: Some("Horizon depth"), + label: Some("RustNotMC depth"), size: wgpu::Extent3d { width: config.width, height: config.height, @@ -3406,7 +3406,7 @@ impl Renderer { let views = sprite_views(&self.sprite_textures, &self.sprite_unused, Some(levels + 1)); self.group = terrain_group( &self.device, - "Horizon terrain resources", + "RustNotMC terrain resources", &self.terrain_layout, &self.globals, &views, @@ -3583,7 +3583,7 @@ impl Renderer { let mut encoder = section_copies.unwrap_or_else(|| { self.device .create_command_encoder(&wgpu::CommandEncoderDescriptor { - label: Some("Horizon frame"), + label: Some("RustNotMC frame"), }) }); if self.animated_textures { @@ -4602,7 +4602,7 @@ impl Renderer { }, })]; let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: Some("Horizon world"), + label: Some("RustNotMC world"), color_attachments: &attachments, depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment { view: world_depth, @@ -5269,7 +5269,7 @@ impl Renderer { texture: &wgpu::Texture, ) -> wgpu::Buffer { let buffer = self.device.create_buffer(&wgpu::BufferDescriptor { - label: Some("Horizon screenshot"), + label: Some("RustNotMC screenshot"), size: u64::from(self.padded_row()) * u64::from(self.config.height), usage: wgpu::BufferUsages::COPY_DST | wgpu::BufferUsages::MAP_READ, mapped_at_creation: false, diff --git a/crates/horizon-client/src/gfx/animate.rs b/crates/horizon-client/src/gfx/animate.rs index 5a70f3b..2f81f0c 100644 --- a/crates/horizon-client/src/gfx/animate.rs +++ b/crates/horizon-client/src/gfx/animate.rs @@ -109,7 +109,7 @@ impl SpriteAnimator { let bytes: u64 = chains.iter().map(|(chain, _)| chain.len() as u64).sum(); if bytes > limit { log::warn!( - "Horizon: layer {}'s animation ({bytes} bytes) does not fit in a storage buffer; it stays still", + "RustNotMC: layer {}'s animation ({bytes} bytes) does not fit in a storage buffer; it stays still", animation.layer ); continue; @@ -386,7 +386,7 @@ fn pipeline(device: &wgpu::Device) -> Option { match internal.or(pollster::block_on(validation.pop())) { None => Some(pipeline), Some(e) => { - log::warn!("Horizon renderer: animated sprites drawn on the CPU ({e})"); + log::warn!("RustNotMC renderer: animated sprites drawn on the CPU ({e})"); None } } diff --git a/crates/horizon-client/src/gfx/arena.rs b/crates/horizon-client/src/gfx/arena.rs index 8f320a4..d5cabec 100644 --- a/crates/horizon-client/src/gfx/arena.rs +++ b/crates/horizon-client/src/gfx/arena.rs @@ -162,7 +162,7 @@ impl Arena { )?; if !std::mem::replace(&mut self.spilled, true) { log::warn!( - "Horizon: video memory is full; more terrain is kept in system memory \ + "RustNotMC: video memory is full; more terrain is kept in system memory \ (lower the render distance if frames slow down)" ); } diff --git a/crates/horizon-client/src/gfx/hdr.rs b/crates/horizon-client/src/gfx/hdr.rs index 8b9df7a..ec8beea 100644 --- a/crates/horizon-client/src/gfx/hdr.rs +++ b/crates/horizon-client/src/gfx/hdr.rs @@ -72,7 +72,7 @@ pub struct Hdr { impl Hdr { pub fn new(device: &wgpu::Device, format: wgpu::TextureFormat, output: Output) -> Self { let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some("Horizon HDR"), + label: Some("RustNotMC HDR"), source: wgpu::ShaderSource::Wgsl(include_str!("../hdr.wgsl").into()), }); let texture = |binding| wgpu::BindGroupLayoutEntry { @@ -86,7 +86,7 @@ impl Hdr { count: None, }; let layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { - label: Some("Horizon HDR bindings"), + label: Some("RustNotMC HDR bindings"), entries: &[ texture(0), texture(1), @@ -103,12 +103,12 @@ impl Hdr { ], }); let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { - label: Some("Horizon HDR"), + label: Some("RustNotMC HDR"), bind_group_layouts: &[Some(&layout)], ..Default::default() }); let pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - label: Some("Horizon HDR"), + label: Some("RustNotMC HDR"), layout: Some(&pipeline_layout), vertex: wgpu::VertexState { module: &shader, @@ -133,7 +133,7 @@ impl Hdr { cache: None, }); let params = device.create_buffer(&wgpu::BufferDescriptor { - label: Some("Horizon HDR parameters"), + label: Some("RustNotMC HDR parameters"), size: 32, usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST, mapped_at_creation: false, @@ -171,13 +171,13 @@ impl Hdr { }) }; let frame = texture( - "Horizon HDR frame", + "RustNotMC HDR frame", wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::COPY_SRC, ); - let world = texture("Horizon HDR world", wgpu::TextureUsages::COPY_DST); + let world = texture("RustNotMC HDR world", wgpu::TextureUsages::COPY_DST); let view = |t: &wgpu::Texture| t.create_view(&Default::default()); let group = device.create_bind_group(&wgpu::BindGroupDescriptor { - label: Some("Horizon HDR bindings"), + label: Some("RustNotMC HDR bindings"), layout: &self.layout, entries: &[ wgpu::BindGroupEntry { @@ -250,7 +250,7 @@ impl Hdr { }, })]; let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: Some("Horizon HDR"), + label: Some("RustNotMC HDR"), color_attachments: &attachments, ..Default::default() }); diff --git a/crates/horizon-client/src/gfx/occlusion.rs b/crates/horizon-client/src/gfx/occlusion.rs index 22e2f3c..fdbe254 100644 --- a/crates/horizon-client/src/gfx/occlusion.rs +++ b/crates/horizon-client/src/gfx/occlusion.rs @@ -602,7 +602,7 @@ impl Occlusion { self.changed_late.clear(); return; } - log::warn!("Horizon: the occlusion worker stopped; culling on the render thread"); + log::warn!("RustNotMC: the occlusion worker stopped; culling on the render thread"); self.worker = None; } self.edits.clear(); diff --git a/crates/horizon-client/src/gfx/panorama.rs b/crates/horizon-client/src/gfx/panorama.rs index 1c17e0b..a60534b 100644 --- a/crates/horizon-client/src/gfx/panorama.rs +++ b/crates/horizon-client/src/gfx/panorama.rs @@ -16,7 +16,7 @@ pub struct Faces { impl Faces { pub fn load(root: &Path) -> Self { Self::try_load(root).unwrap_or_else(|error| { - log::warn!("Horizon: title panorama unavailable ({error})"); + log::warn!("RustNotMC: title panorama unavailable ({error})"); Self { size: 1, pixels: [96, 110, 111, 255].repeat(6), diff --git a/crates/horizon-client/src/gfx/world_post.rs b/crates/horizon-client/src/gfx/world_post.rs index 17609d2..bb65dc7 100644 --- a/crates/horizon-client/src/gfx/world_post.rs +++ b/crates/horizon-client/src/gfx/world_post.rs @@ -25,11 +25,11 @@ pub struct Post { impl Post { pub fn new(device: &wgpu::Device, format: wgpu::TextureFormat) -> Self { let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some("Horizon post"), + label: Some("RustNotMC post"), source: wgpu::ShaderSource::Wgsl(include_str!("../world_post.wgsl").into()), }); let layout = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor { - label: Some("Horizon post bindings"), + label: Some("RustNotMC post bindings"), entries: &[ wgpu::BindGroupLayoutEntry { binding: 0, @@ -50,13 +50,13 @@ impl Post { ], }); let pipeline_layout = device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor { - label: Some("Horizon post"), + label: Some("RustNotMC post"), bind_group_layouts: &[Some(&layout)], ..Default::default() }); let pipeline = |entry: &str| { device.create_render_pipeline(&wgpu::RenderPipelineDescriptor { - label: Some("Horizon post"), + label: Some("RustNotMC post"), layout: Some(&pipeline_layout), vertex: wgpu::VertexState { module: &shader, @@ -82,7 +82,7 @@ impl Post { }) }; let sampler = device.create_sampler(&wgpu::SamplerDescriptor { - label: Some("Horizon post"), + label: Some("RustNotMC post"), mag_filter: wgpu::FilterMode::Linear, min_filter: wgpu::FilterMode::Linear, ..Default::default() @@ -165,7 +165,7 @@ impl Post { /// Bindings that copy (or anti-alias) `view` onto the screen in `finish_with`. pub fn bind(&self, device: &wgpu::Device, view: &wgpu::TextureView) -> wgpu::BindGroup { device.create_bind_group(&wgpu::BindGroupDescriptor { - label: Some("Horizon post"), + label: Some("RustNotMC post"), layout: &self.layout, entries: &[ wgpu::BindGroupEntry { @@ -203,7 +203,7 @@ impl Post { }, })]; let mut pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor { - label: Some("Horizon post"), + label: Some("RustNotMC post"), color_attachments: &attachments, ..Default::default() }); diff --git a/crates/horizon-client/src/heartbeat.rs b/crates/horizon-client/src/heartbeat.rs index 9f3f3a5..fbfe426 100644 --- a/crates/horizon-client/src/heartbeat.rs +++ b/crates/horizon-client/src/heartbeat.rs @@ -34,7 +34,7 @@ pub fn start() { Ok(handle) => { let _ = PINGER.set(handle.thread().clone()); } - Err(e) => log::warn!("Horizon: no live count ping: {e}"), + Err(e) => log::warn!("RustNotMC: no live count ping: {e}"), } } @@ -62,7 +62,7 @@ fn run(endpoint: &str) { Err(e) => { // Said once, not every minute the server is away. if !failed { - log::info!("Horizon: the live count ping failed ({e}); trying again later"); + log::info!("RustNotMC: the live count ping failed ({e}); trying again later"); } failed = true; wait = (wait * 2).min(MAX_WAIT); diff --git a/crates/horizon-client/src/hud.rs b/crates/horizon-client/src/hud.rs index fda0094..3666ad8 100644 --- a/crates/horizon-client/src/hud.rs +++ b/crates/horizon-client/src/hud.rs @@ -501,6 +501,13 @@ impl HudAtlas { images.push(("horizon/white".into(), 4, 4, vec![255; 64])); if full { Self::slots(&mut images, crate::trims::slot_size(root)); + // Our own icons are part of every atlas: no runtime upload, so a + // rebuild while resources load cannot wipe them. + for (name, bytes) in crate::rustui::icons::ICONS { + if let Ok((w, h, rgba)) = decode_bytes(bytes) { + images.push((format!("horizon/rustui-icons/{name}"), w, h, rgba)); + } + } } // Blurred sprites are sampled linearly in the atlas (screen.wgsl): a // border wrapped from their own edges keeps the filter off their @@ -1152,7 +1159,7 @@ impl HudRenderer { glint_sampler: &wgpu::Sampler, ) -> Result { let shader = device.create_shader_module(wgpu::ShaderModuleDescriptor { - label: Some("Horizon HUD"), + label: Some("RustNotMC HUD"), source: wgpu::ShaderSource::Wgsl(include_str!("hud.wgsl").into()), }); diff --git a/crates/horizon-client/src/lib.rs b/crates/horizon-client/src/lib.rs index 545fc26..dd47070 100644 --- a/crates/horizon-client/src/lib.rs +++ b/crates/horizon-client/src/lib.rs @@ -140,6 +140,9 @@ pub mod random_tick_sections; pub mod recipe_book; pub mod recipe_book_screen; pub mod reconnect; +pub mod rsx; +pub mod rsx_terrain; +pub mod rustui; pub mod save; pub mod scoreboard_cmd; pub mod screen_draw; diff --git a/crates/horizon-client/src/locator_bar.rs b/crates/horizon-client/src/locator_bar.rs index ecead2c..5644a64 100644 --- a/crates/horizon-client/src/locator_bar.rs +++ b/crates/horizon-client/src/locator_bar.rs @@ -174,7 +174,7 @@ impl WaypointStyles { { out.insert(format!("{namespace}:{name}"), style); } else { - log::warn!("Horizon: invalid waypoint style {}", path.display()); + log::warn!("RustNotMC: invalid waypoint style {}", path.display()); } } } diff --git a/crates/horizon-client/src/logging.rs b/crates/horizon-client/src/logging.rs index 282831f..a6c7b74 100644 --- a/crates/horizon-client/src/logging.rs +++ b/crates/horizon-client/src/logging.rs @@ -243,7 +243,7 @@ impl Writer { { let _ = writeln!( stderr.lock(), - "Horizon: could not roll over the log: {e}" + "RustNotMC: could not roll over the log: {e}" ); } self.date = date; @@ -362,14 +362,14 @@ pub fn init(home: &Path, main_thread: &'static str) { Ok(Some(latest)) => Some(latest), Ok(None) => { eprintln!( - "Horizon: another game is writing {}; this one logs to the terminal only", + "RustNotMC: another game is writing {}; this one logs to the terminal only", dir.join("latest.log").display() ); None } Err(e) => { eprintln!( - "Horizon: could not open {}: {e}", + "RustNotMC: could not open {}: {e}", dir.join("latest.log").display() ); None @@ -386,7 +386,7 @@ pub fn init(home: &Path, main_thread: &'static str) { .name("Log writer".into()) .spawn(move || writer.run(receive)) { - eprintln!("Horizon: could not start the log writer: {e}"); + eprintln!("RustNotMC: could not start the log writer: {e}"); } Logger { out, diff --git a/crates/horizon-client/src/main.rs b/crates/horizon-client/src/main.rs index 8d03455..b34db61 100644 --- a/crates/horizon-client/src/main.rs +++ b/crates/horizon-client/src/main.rs @@ -24,11 +24,11 @@ fn main() { if !help { logging::init(&home, thread); // The log's first line names the build, so a bug report that carries the log says which one it was. - log::info!("Horizon {}", crash::version()); + log::info!("RustNotMC {}", crash::version()); crash::install(home.clone(), side); } if let Err(error) = game::run() { - log::error!("Horizon: {error}"); + log::error!("RustNotMC: {error}"); if !help { crash::report_error(&home, side, &*error); } diff --git a/crates/horizon-client/src/mobs/trial_spawner.rs b/crates/horizon-client/src/mobs/trial_spawner.rs index e789f14..a35f092 100644 --- a/crates/horizon-client/src/mobs/trial_spawner.rs +++ b/crates/horizon-client/src/mobs/trial_spawner.rs @@ -156,7 +156,7 @@ pub fn load_registry(root: &Path) { let id = rel.to_string_lossy().replace('\\', "/"); out.insert(format!("{ns}:{id}"), c); } - None => log::warn!("Horizon: bad trial spawner config {}", path.display()), + None => log::warn!("RustNotMC: bad trial spawner config {}", path.display()), } } } diff --git a/crates/horizon-client/src/mod_content.rs b/crates/horizon-client/src/mod_content.rs index 2d8d2de..c0ec7a3 100644 --- a/crates/horizon-client/src/mod_content.rs +++ b/crates/horizon-client/src/mod_content.rs @@ -1247,11 +1247,11 @@ pub fn resource_root(base: &Path, mods: &[ContentMod], cache: &Path) -> Result

Arc::new(model), Err(e) if or_missing => { - log::warn!("Horizon: missing block model {name}: {e}"); + log::warn!("RustNotMC: missing block model {name}: {e}"); skipped.insert(name); continue; } diff --git a/crates/horizon-client/src/models/catalog.rs b/crates/horizon-client/src/models/catalog.rs index c02e972..c29f0dd 100644 --- a/crates/horizon-client/src/models/catalog.rs +++ b/crates/horizon-client/src/models/catalog.rs @@ -159,7 +159,7 @@ impl StateModels { Ok(loaded) => loaded, Err(e) => { log::warn!( - "Horizon: blockstate definition of {namespace}:{path} not loaded: {e}" + "RustNotMC: blockstate definition of {namespace}:{path} not loaded: {e}" ); continue; } @@ -212,7 +212,7 @@ impl StateModels { let library = match models.block_library(root, names.clone()) { Ok(library) => library, Err(e) => { - log::warn!("Horizon: block models incomplete ({e}); using the missing model"); + log::warn!("RustNotMC: block models incomplete ({e}); using the missing model"); models.block_library_or_missing(root, names)? } }; diff --git a/crates/horizon-client/src/moved_extras.rs b/crates/horizon-client/src/moved_extras.rs index 91f0a9a..504a3bc 100644 --- a/crates/horizon-client/src/moved_extras.rs +++ b/crates/horizon-client/src/moved_extras.rs @@ -1,4 +1,4 @@ -//! Extras that became official mods (docs/mods.md, "Horizon's official +//! Extras that became official mods (docs/mods.md, "RustNotMC's official //! mods"). For a player who had one on, the game installs the mod from //! Horizon's registry once, checked as the launcher checks it, turns it on //! and carries the extra's settings over into the mod's storage. A player diff --git a/crates/horizon-client/src/offline_name.rs b/crates/horizon-client/src/offline_name.rs index 552f155..a2f2d2e 100644 --- a/crates/horizon-client/src/offline_name.rs +++ b/crates/horizon-client/src/offline_name.rs @@ -33,7 +33,7 @@ pub fn load_or_create(dir: &Path) -> String { let name = generate(seed()); if let Err(e) = fs::write(&path, format!("{KEY}{name}\n")) { log::warn!( - "Horizon: could not keep the player name in {}: {e}", + "RustNotMC: could not keep the player name in {}: {e}", path.display() ); } diff --git a/crates/horizon-client/src/options_ui.rs b/crates/horizon-client/src/options_ui.rs index 5a7acab..9537c56 100644 --- a/crates/horizon-client/src/options_ui.rs +++ b/crates/horizon-client/src/options_ui.rs @@ -273,7 +273,7 @@ impl Opt { } } /// OptionInstance's static or value-dependent tooltip translation. - fn tooltip_key(self, s: &Settings) -> String { + pub(crate) fn tooltip_key(self, s: &Settings) -> String { let key = match self { Opt::InactivityFps => { if s.inactivity_fps_limit == "minimized" { @@ -561,7 +561,7 @@ impl Opt { }), Opt::PadKeyboard => Text::literal(match s.controller.keyboard { gamepad::TextKeyboard::Auto => "Auto", - gamepad::TextKeyboard::Horizon => "Horizon", + gamepad::TextKeyboard::Horizon => "RustNotMC", gamepad::TextKeyboard::Steam => "Steam", }), _ => Text::empty(), @@ -852,7 +852,7 @@ pub enum Page { Agent, } #[derive(Clone, Debug, PartialEq)] -enum Act { +pub(crate) enum Act { None, Push(Page), Done, @@ -877,7 +877,7 @@ enum Act { Credits, CopyAgentDetails, } -enum WKind { +pub(crate) enum WKind { Button { label: Text, active: bool, @@ -899,14 +899,14 @@ enum WKind { code: String, }, } -struct Widget { - x: f32, - y: f32, - w: f32, - h: f32, - kind: WKind, +pub(crate) struct Widget { + pub(crate) x: f32, + pub(crate) y: f32, + pub(crate) w: f32, + pub(crate) h: f32, + pub(crate) kind: WKind, /// Scrolls with the list (clipped to the list area). - list: bool, + pub(crate) list: bool, } /// What the game must do after an interaction. #[derive(Clone, Debug, PartialEq)] @@ -983,6 +983,24 @@ pub struct OptionsUi { /// When the pack screen's search box took the focus (its cursor blink). pack_focus: Instant, pub in_world: bool, + /// Draw the settings in the Rust style (`rustui::settings`) instead of + /// vanilla's screens; `horizon.txt`'s `rustSettings`, set by the game. + pub rust: bool, + /// The Rust settings' own list scroll, in dp: where it is drawn, where the + /// wheel wants it (the draw eases one to the other), and the rail's pair. + pub(crate) rust_scroll: f32, + pub(crate) rust_scroll_target: f32, + pub(crate) rust_rail: f32, + pub(crate) rust_rail_target: f32, + /// The last frame's time, for frame-rate independent easing. + pub(crate) rust_tick: Instant, + /// The graphics row whose slider a press took hold of. + pub(crate) rust_graphics_drag: Option, + /// Where the settings scrollbar was grabbed, while it is being dragged. + pub(crate) rust_scroll_drag: Option, + /// The GUI scale of the last drawn frame: a press converts its pixels to + /// dp the way the frame did. + pub(crate) scale: f32, /// Scroll the selected language into the middle on the next layout. center_language: bool, pub graphics: crate::graphics_ui::GraphicsUi, @@ -1014,6 +1032,15 @@ impl Default for OptionsUi { resource_error: None, pack_focus: Instant::now(), in_world: false, + rust: false, + rust_scroll: 0.0, + rust_scroll_target: 0.0, + rust_rail: 0.0, + rust_rail_target: 0.0, + rust_tick: Instant::now(), + rust_graphics_drag: None, + rust_scroll_drag: None, + scale: 1.0, center_language: false, graphics: Default::default(), agent_status: Vec::new(), @@ -1061,12 +1088,12 @@ fn option_widget(s: &Settings, opt: Opt, x: f32, y: f32, w: f32) -> Widget { } } /// What a button opening one of Horizon's pages says on hover. -fn horizon_page_tooltip(page: Page) -> Option<&'static str> { +pub(crate) fn page_tooltip(page: Page) -> Option<&'static str> { Some(match page { - Page::Horizon => "Horizon's own settings: graphics, controllers, extras and mods.", + Page::Horizon => "RustNotMC's own settings: graphics, controllers, extras and mods.", Page::Graphics => "Graphics, simply: each setting says what it costs.", Page::GraphicsAdvanced => { - "Every graphics setting, Horizon's included, with what each costs." + "Every graphics setting, RustNotMC's included, with what each costs." } Page::Controller => "Controllers: their buttons, sticks, vibration and menu navigation.", Page::Extras => { @@ -1074,10 +1101,10 @@ fn horizon_page_tooltip(page: Page) -> Option<&'static str> { } Page::Agent => "Let your own AI agent play: horizon-ctl and MCP clients on this computer.", Page::ShaderPacks => { - "Shader packs from the shaderpacks folder: Horizon's own and those in the shaders/ format. One runs at a time." + "Shader packs from the shaderpacks folder: RustNotMC's own and those in the shaders/ format. One runs at a time." } Page::Mods => { - "Mods made for Horizon, from the horizon-mods folder. Each runs in a sandbox and stays off until you turn it on." + "Mods made for RustNotMC, from the horizon-mods folder. Each runs in a sandbox and stays off until you turn it on." } _ => return None, }) @@ -1146,14 +1173,14 @@ impl OptionsUi { } } /// The graphics screen level of `page`, if it is one. - fn graphics_level(page: Page) -> Option { + pub(crate) fn graphics_level(page: Page) -> Option { match page { Page::Graphics => Some(crate::graphics_ui::Level::Simple), Page::GraphicsAdvanced => Some(crate::graphics_ui::Level::Advanced), _ => None, } } - fn title(page: Page) -> &'static str { + pub(crate) fn title(page: Page) -> &'static str { match page { Page::Main => "options.title", Page::Video => "options.videoTitle", @@ -1171,9 +1198,9 @@ impl OptionsUi { Page::Graphics | Page::GraphicsAdvanced => "options.videoTitle", Page::Controller => "Controller Settings", Page::PadBinds => "Controller Binds", - Page::Extras => "Horizon Extras", + Page::Extras => "RustNotMC Extras", Page::Credits => "credits_and_attribution.screen.title", - Page::Horizon => "Horizon Settings", + Page::Horizon => "RustNotMC Settings", Page::Agent => "AI Agent", } } @@ -1330,7 +1357,7 @@ impl OptionsUi { 0.0, 0.0, 150.0, - Text::literal("Horizon Graphics..."), + Text::literal("RustNotMC Graphics..."), Act::Push(Page::Graphics), ), Some(button( @@ -1537,7 +1564,7 @@ impl OptionsUi { .enumerate() .map(|(i, pack)| { let kind = match pack.kind { - crate::shader_pack_list::Kind::Horizon => " (Horizon)", + crate::shader_pack_list::Kind::Horizon => " (RustNotMC)", crate::shader_pack_list::Kind::Classic => "", }; let label = Text::literal(format!("{}{kind}: ", pack.title)) @@ -1553,7 +1580,7 @@ impl OptionsUi { } } /// Build every widget of the current page. - fn layout(&mut self, s: &Settings, w: f32, h: f32) -> (Vec, f32, f32, f32) { + pub(crate) fn layout(&mut self, s: &Settings, w: f32, h: f32) -> (Vec, f32, f32, f32) { let mut out = Vec::new(); let page = self.page(); let cx = (w / 2.0).floor(); @@ -1598,7 +1625,7 @@ impl OptionsUi { // Vanilla's Telemetry Data and Credits slots: Horizon's // settings and its mods, as a mod adds its button here. // Credits & Attribution (WinScreen's credits) follows them. - ("Horizon Settings...", Some(Page::Horizon)), + ("RustNotMC Settings...", Some(Page::Horizon)), ("Mods...", Some(Page::Mods)), ("options.credits_and_attribution", Some(Page::Credits)), ]; @@ -2065,6 +2092,11 @@ impl OptionsUi { let max = (content - (bottom - top)).max(0.0); self.scroll = self.scroll.clamp(0.0, max); } + /// Whether the Rust settings shell draws this frame: the player asked for + /// it and the page has no screen of its own (graphics, the pack list). + fn rust_styled(&self) -> bool { + self.rust && self.resource_error.is_none() + } pub fn draw( &mut self, s: &Settings, @@ -2072,6 +2104,14 @@ impl OptionsUi { atlas: &HudAtlas, cursor: (f32, f32), ) { + if self.rust_styled() { + self.scale = batch.scale; + // The search box belongs to vanilla's screens; the shell has none. + self.settings_search.set_value(""); + self.settings_search.focused = false; + crate::rustui::settings::draw(self, s, atlas, batch, cursor); + return; + } let (w, h) = (batch.width, batch.height); if let Some(error) = &self.resource_error { ui::menu_background(batch, atlas, 0.0, 0.0, w, h, self.in_world); @@ -2153,7 +2193,7 @@ impl OptionsUi { act: Act::Push(page), .. } = &wd.kind - && let Some(text) = horizon_page_tooltip(*page) + && let Some(text) = page_tooltip(*page) { tooltip = Some(atlas.font.split(&Text::literal(text), 170.0)); } @@ -2183,7 +2223,7 @@ impl OptionsUi { && !opt.available() { tooltip = Some(atlas.font.split( - &Text::literal("This feature is not yet available in Horizon."), + &Text::literal("This feature is not yet available in RustNotMC."), 170.0, )); } @@ -2352,6 +2392,34 @@ impl OptionsUi { framebuffer: [i32; 2], drag: bool, right: bool, + ) -> Vec { + if self.rust_styled() + && let Some(events) = crate::rustui::settings::click( + self, + s, + atlas, + (x, y), + size, + framebuffer, + drag, + right, + ) + { + return events; + } + self.click_vanilla(s, atlas, x, y, size, framebuffer, drag, right) + } + /// Vanilla's own hit-testing, over the widgets `layout` places. + pub(crate) fn click_vanilla( + &mut self, + s: &mut Settings, + atlas: &HudAtlas, + x: f32, + y: f32, + size: (f32, f32), + framebuffer: [i32; 2], + drag: bool, + right: bool, ) -> Vec { if self.resource_error.is_some() { if !drag @@ -2628,6 +2696,10 @@ impl OptionsUi { if self.resource_error.is_some() { return; } + if self.rust_styled() { + crate::rustui::settings::wheel(self, size, cursor, amount); + return; + } if let Some(level) = Self::graphics_level(self.page()) { self.graphics.scroll(level, size.1, amount); return; diff --git a/crates/horizon-client/src/rsx/buf.rs b/crates/horizon-client/src/rsx/buf.rs new file mode 100644 index 0000000..e5600bd --- /dev/null +++ b/crates/horizon-client/src/rsx/buf.rs @@ -0,0 +1,430 @@ +//! A growable byte buffer with the primitives the wire format is built from. +//! +//! Ported from the Java reference (`net.rustnotmc.protocol.Buf`): every read +//! is bounded, integers travel as zig-zag varints so small negatives stay +//! small, and nothing trusts a length before the bytes behind it have actually +//! arrived. Reads return [`Error::Incomplete`] when the bytes simply have not +//! shown up yet and [`Error::Protocol`] when they can never be right. + +use super::{Error, Result}; + +/// A varint of a 32 bit value never needs more than five bytes. +pub const MAX_VAR_INT_BYTES: usize = 5; + +/// A varint of a 64 bit value never needs more than ten bytes. +pub const MAX_VAR_LONG_BYTES: usize = 10; + +/// Bytes written, then read from the front: one buffer serves both sides, +/// exactly like the Java `Buf` it is ported from. +#[derive(Debug, Default)] +pub struct Buf { + data: Vec, + reader: usize, +} + +impl Buf { + /// An empty buffer to write into. + pub fn new() -> Self { + Self { + data: Vec::new(), + reader: 0, + } + } + + /// A buffer over bytes that already arrived, ready to be read. + pub fn reading(data: &[u8]) -> Self { + Self { + data: data.to_vec(), + reader: 0, + } + } + + /// How many bytes have been written. + pub fn written(&self) -> usize { + self.data.len() + } + + /// How many written bytes have not been read yet. + pub fn readable(&self) -> usize { + self.data.len() - self.reader + } + + /// Everything written, for putting on the wire. + pub fn into_inner(self) -> Vec { + self.data + } + + // ------------------------------------------------------------------ write + + pub fn write_byte(&mut self, value: u8) { + self.data.push(value); + } + + pub fn write_bool(&mut self, value: bool) { + self.write_byte(u8::from(value)); + } + + /// Big endian, like every fixed width integer on this wire. + pub fn write_short(&mut self, value: u16) { + self.data.extend_from_slice(&value.to_be_bytes()); + } + + pub fn write_int(&mut self, value: i32) { + self.data.extend_from_slice(&value.to_be_bytes()); + } + + pub fn write_long(&mut self, value: i64) { + self.data.extend_from_slice(&value.to_be_bytes()); + } + + pub fn write_float(&mut self, value: f32) { + self.write_int(value.to_bits() as i32); + } + + pub fn write_double(&mut self, value: f64) { + self.write_long(value.to_bits() as i64); + } + + /// Zig-zag encoded varint: `n -> (n << 1) ^ (n >> 31)`, so -1 is one + /// byte instead of five. Negative coordinates are ordinary in a world. + pub fn write_var_int(&mut self, value: i32) { + let mut zig = ((value as u32) << 1) ^ ((value >> 31) as u32); + loop { + if (zig & !0x7F) == 0 { + self.write_byte(zig as u8); + return; + } + self.write_byte(((zig & 0x7F) | 0x80) as u8); + zig >>= 7; + } + } + + /// Zig-zag encoded varint over a long. + pub fn write_var_long(&mut self, value: i64) { + let mut zig = ((value as u64) << 1) ^ ((value >> 63) as u64); + loop { + if (zig & !0x7F) == 0 { + self.write_byte(zig as u8); + return; + } + self.write_byte(((zig & 0x7F) | 0x80) as u8); + zig >>= 7; + } + } + + pub fn write_bytes(&mut self, value: &[u8]) { + self.data.extend_from_slice(value); + } + + /// A varint byte length followed by the UTF-8 bytes themselves. + pub fn write_string(&mut self, value: &str) { + self.write_var_int(value.len() as i32); + self.write_bytes(value.as_bytes()); + } + + /// One position as one varint. + /// + /// The axes do not get equal shares of the long: X and Z take 26 bits + /// each at 1/32 block resolution, Y takes the remaining 12 bits as whole + /// blocks in two's complement, covering -2048 to 2047. Y is stored signed + /// rather than offset by 2048 because an offset would need 13 bits, and + /// the twelfth bit is exactly the one that decides whether a value reads + /// back negative. + pub fn write_position(&mut self, x: f64, y: f64, z: f64) { + let packed = ((((x * 32.0) as i64) & 0x3FF_FFFF) << 38) + | ((((y as i32) as i64) & 0xFFF) << 26) + | (((z * 32.0) as i64) & 0x3FF_FFFF); + self.write_var_long(packed); + } + + // ------------------------------------------------------------------- read + + fn require(&self, count: usize) -> Result<()> { + if self.reader + count > self.data.len() { + return Err(Error::Incomplete(format!( + "wanted {count} byte(s) but only {} remain", + self.readable() + ))); + } + Ok(()) + } + + pub fn read_byte(&mut self) -> Result { + self.require(1)?; + let value = self.data[self.reader]; + self.reader += 1; + Ok(value) + } + + pub fn read_bool(&mut self) -> Result { + Ok(self.read_byte()? != 0) + } + + pub fn read_short(&mut self) -> Result { + self.require(2)?; + let value = u16::from_be_bytes([self.data[self.reader], self.data[self.reader + 1]]); + self.reader += 2; + Ok(value) + } + + pub fn read_int(&mut self) -> Result { + self.require(4)?; + let mut bytes = [0u8; 4]; + bytes.copy_from_slice(&self.data[self.reader..self.reader + 4]); + self.reader += 4; + Ok(i32::from_be_bytes(bytes)) + } + + pub fn read_long(&mut self) -> Result { + self.require(8)?; + let mut bytes = [0u8; 8]; + bytes.copy_from_slice(&self.data[self.reader..self.reader + 8]); + self.reader += 8; + Ok(i64::from_be_bytes(bytes)) + } + + pub fn read_float(&mut self) -> Result { + Ok(f32::from_bits(self.read_int()? as u32)) + } + + pub fn read_double(&mut self) -> Result { + Ok(f64::from_bits(self.read_long()? as u64)) + } + + /// Reads a varint, refusing anything longer than it has to be: without + /// the byte cap a peer can send ten bytes of 0xFF and turn a five byte + /// integer into an endless loop. + pub fn read_var_int(&mut self) -> Result { + let mut result: u32 = 0; + for shift in (0..MAX_VAR_INT_BYTES * 7).step_by(7) { + let byte = self.read_byte()?; + result |= ((byte & 0x7F) as u32) << shift; + if (byte & 0x80) == 0 { + return Ok(((result >> 1) as i32) ^ (-((result & 1) as i32))); + } + } + Err(Error::Protocol(format!( + "varint is longer than {MAX_VAR_INT_BYTES} bytes" + ))) + } + + pub fn read_var_long(&mut self) -> Result { + let mut result: u64 = 0; + for shift in (0..MAX_VAR_LONG_BYTES * 7).step_by(7) { + let byte = self.read_byte()?; + result |= ((byte & 0x7F) as u64) << shift; + if (byte & 0x80) == 0 { + return Ok(((result >> 1) as i64) ^ (-((result & 1) as i64))); + } + } + Err(Error::Protocol(format!( + "varlong is longer than {MAX_VAR_LONG_BYTES} bytes" + ))) + } + + pub fn read_bytes(&mut self, length: usize) -> Result> { + self.require(length)?; + let value = self.data[self.reader..self.reader + length].to_vec(); + self.reader += length; + Ok(value) + } + + /// A varint length, a range check against the caller's ceiling, then the + /// UTF-8 bytes. The length is checked before anything is allocated, so a + /// peer cannot ask for a gigabyte of string. + pub fn read_string(&mut self, max_length: usize) -> Result { + let length = self.read_var_int()?; + if length < 0 || length as usize > max_length { + return Err(Error::Protocol(format!( + "string length {length} is out of range" + ))); + } + let length = length as usize; + self.require(length)?; + let value = + String::from_utf8_lossy(&self.data[self.reader..self.reader + length]).into_owned(); + self.reader += length; + Ok(value) + } + + /// The inverse of [`Buf::write_position`]. Y comes back as whole blocks: + /// it only has 12 bits, so a fractional Y is quantised away. + pub fn read_position(&mut self) -> Result<(f64, f64, f64)> { + let packed = self.read_var_long()?; + // a field of n bits at offset k is sign extended by shifting left far + // enough to land its top bit at 63, then arithmetically shifting right + let x = (packed >> 38) as f64 / 32.0; + let y = ((packed << 26) >> 52) as f64; + let z = ((packed << 38) >> 38) as f64 / 32.0; + Ok((x, y, z)) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn varint_round_trip() { + let values = [ + 0, + 1, + -1, + 127, + 128, + -128, + 12345, + -12345, + i32::MAX, + i32::MIN, + ]; + for value in values { + let mut buf = Buf::new(); + buf.write_var_int(value); + let mut read = Buf::reading(&buf.into_inner()); + assert_eq!(read.read_var_int().unwrap(), value, "varint {value}"); + assert_eq!(read.readable(), 0); + } + } + + #[test] + fn varint_rejects_overlong_input() { + // ten bytes of 0xFF: a five byte value cannot be this long + let evil = vec![0xFFu8; 10]; + let mut buf = Buf::reading(&evil); + match buf.read_var_int() { + Err(Error::Protocol(_)) => {} + other => panic!("overlong varint was {:?}, not a protocol error", other), + } + } + + #[test] + fn negative_numbers_stay_small() { + let mut minus_one = Buf::new(); + minus_one.write_var_int(-1); + assert_eq!(minus_one.written(), 1, "minus one is one byte, not five"); + + let mut zero = Buf::new(); + zero.write_var_int(0); + assert_eq!(zero.written(), 1, "zero is one byte"); + + let mut positive = Buf::new(); + positive.write_var_int(63); + let mut negative = Buf::new(); + negative.write_var_int(-63); + assert_eq!( + positive.written(), + negative.written(), + "63 and -63 cost the same" + ); + } + + #[test] + fn varlong_round_trip() { + let values = [ + 0, + 1, + -1, + i64::MAX, + i64::MIN, + -1234567890123, + 1234567890123456789, + ]; + for value in values { + let mut buf = Buf::new(); + buf.write_var_long(value); + let mut read = Buf::reading(&buf.into_inner()); + assert_eq!(read.read_var_long().unwrap(), value, "varlong {value}"); + assert_eq!(read.readable(), 0); + } + } + + #[test] + fn fixed_width_round_trip() { + let mut buf = Buf::new(); + buf.write_bool(true); + buf.write_byte(0x7F); + buf.write_short(0xBEEF); + buf.write_int(-559038737); + buf.write_long(-1234567890123); + buf.write_float(0.5); + buf.write_double(-2.25); + + let mut read = Buf::reading(&buf.into_inner()); + assert!(read.read_bool().unwrap()); + assert_eq!(read.read_byte().unwrap(), 0x7F); + assert_eq!(read.read_short().unwrap(), 0xBEEF); + assert_eq!(read.read_int().unwrap(), -559038737); + assert_eq!(read.read_long().unwrap(), -1234567890123); + assert_eq!(read.read_float().unwrap(), 0.5); + assert_eq!(read.read_double().unwrap(), -2.25); + assert_eq!(read.readable(), 0, "nothing left"); + } + + #[test] + fn string_round_trip_including_non_ascii() { + let values = ["", "player", "Игрок", "a name with spaces", "~!@#$%^&*()"]; + for value in values { + let mut buf = Buf::new(); + buf.write_string(value); + let mut read = Buf::reading(&buf.into_inner()); + assert_eq!( + read.read_string(512).unwrap(), + value, + "string {value:?}" + ); + assert_eq!(read.readable(), 0); + } + } + + #[test] + fn string_length_is_bounded() { + // announces a huge string and then does not send it + let mut buf = Buf::new(); + buf.write_var_int(0x7FFF_FFF0); + let mut read = Buf::reading(&buf.into_inner()); + match read.read_string(512) { + Err(Error::Protocol(_)) => {} + other => panic!("huge string was {:?}, not a protocol error", other), + } + } + + #[test] + fn reading_past_the_end_fails() { + let mut read = Buf::reading(&[0, 0]); + match read.read_int() { + Err(Error::Incomplete(_)) => {} + other => panic!("underflow was {:?}, not incomplete", other), + } + } + + #[test] + fn position_survives_the_round_trip() { + // Y is deliberately whole blocks: it only has 12 bits, so it is + // stored as a signed block number and a fractional Y is quantised away + let positions = [ + (0.0, 0.0, 0.0), + (1.5, -64.0, 300.25), + (-1234.5, 319.0, -4096.75), + (0.03125, -2048.0, 0.03125), + (0.03125, 2047.0, 0.03125), + ]; + for (x, y, z) in positions { + let mut buf = Buf::new(); + buf.write_position(x, y, z); + let mut read = Buf::reading(&buf.into_inner()); + let (back_x, back_y, back_z) = read.read_position().unwrap(); + assert_eq!(back_x, x, "position x {x}"); + assert_eq!(back_y, y, "position y {y}"); + assert_eq!(back_z, z, "position z {z}"); + assert_eq!(read.readable(), 0); + } + + // and the quantisation is a documented property, not an accident + let mut fractional = Buf::new(); + fractional.write_position(1.0, 64.5, 2.0); + let mut read = Buf::reading(&fractional.into_inner()); + let (_, y, _) = read.read_position().unwrap(); + assert_eq!(y, 64.0, "fractional Y rounds to a whole block"); + } +} diff --git a/crates/horizon-client/src/rsx/frame.rs b/crates/horizon-client/src/rsx/frame.rs new file mode 100644 index 0000000..ff8689d --- /dev/null +++ b/crates/horizon-client/src/rsx/frame.rs @@ -0,0 +1,402 @@ +//! One message on the wire: an envelope plus the packet body. +//! +//! ```text +//! magic 4 bytes 0x52535831, "RSX1" +//! version varint protocol version, refused if it is not ours +//! packetId varint what the body means +//! bodyLength varint bytes of body that follow +//! body bytes +//! ``` +//! +//! The magic sits in front so a port can answer immediately instead of +//! waiting to be told it is speaking nonsense. The declared body length is +//! checked against the maximum before a single byte is reserved, because the +//! only thing a malicious length is good for is making the server allocate. +//! +//! TCP hands over bytes, not messages: one read may be half a frame, or nine +//! and a half. [`FrameDecoder`] keeps whatever it could not use yet and +//! returns only whole frames, so the layer above sees a stream of packets and +//! never thinks about segmentation again. + +use super::{Error, Result}; + +/// "RSX1" in ASCII, as a big endian int. +pub const MAGIC: i32 = 0x5253_5831; + +/// The version this build speaks. +pub const VERSION: i32 = 1; + +/// Worst case envelope: magic plus four varints at their longest. +pub const MAX_ENVELOPE: usize = 4 + 5 + 5 + 5; + +/// Default ceiling for a frame body: two mebibytes. A chunk is 64 KiB +/// deflated to a few hundred bytes, so this leaves every real packet room +/// while still refusing a peer that announces a body of any size it likes. +pub const DEFAULT_MAX_PAYLOAD: usize = 2 * 1024 * 1024; + +/// One frame: what it means and what it carries. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Frame { + pub version: i32, + pub packet_id: i32, + pub body: Vec, +} + +impl Frame { + /// A frame of the version this build speaks. + pub fn new(packet_id: i32, body: Vec) -> Self { + Self { + version: VERSION, + packet_id, + body, + } + } + + /// The bytes to put on the wire. + pub fn encode(&self) -> Vec { + let mut out = Vec::with_capacity(MAX_ENVELOPE + self.body.len()); + out.extend_from_slice(&MAGIC.to_be_bytes()); + push_var_int(&mut out, self.version); + push_var_int(&mut out, self.packet_id); + push_var_int(&mut out, self.body.len() as i32); + out.extend_from_slice(&self.body); + out + } + + /// Reads one frame from the front of the input. + /// + /// Returns `Ok(None)` when the input does not hold a whole frame yet, so + /// a caller feeding it a socket can keep the remainder and come back when + /// more arrives. Fails as soon as it can tell the stream is impossible, + /// rather than waiting forever for bytes that will make it valid. + pub fn decode(input: &[u8], max_body: usize) -> Result> { + if input.len() < 4 { + return Ok(None); + } + let magic = i32::from_be_bytes([input[0], input[1], input[2], input[3]]); + if magic != MAGIC { + return Err(Error::Protocol(format!( + "not a RustNotMC stream: magic is 0x{magic:08X}" + ))); + } + + // the envelope has to be complete before anything in it is judged: + // TCP cut it in half and the rest is on its way + let mut pos = 4; + let Some(version) = var_at(input, &mut pos)? else { + return Ok(None); + }; + let Some(packet_id) = var_at(input, &mut pos)? else { + return Ok(None); + }; + let Some(length) = var_at(input, &mut pos)? else { + return Ok(None); + }; + + if version != VERSION { + return Err(Error::Protocol(format!( + "protocol version {version}, this build speaks {VERSION}" + ))); + } + if length < 0 || length as usize > max_body { + return Err(Error::Protocol(format!( + "declared body of {length} bytes is outside the limit of {max_body}" + ))); + } + let length = length as usize; + if input.len() - pos < length { + return Ok(None); + } + Ok(Some(( + Self { + version, + packet_id, + body: input[pos..pos + length].to_vec(), + }, + pos + length, + ))) + } +} + +/// A varint decoded straight from a slice: `Ok(None)` while the bytes have +/// not all arrived, `Err` when they can never form a legal value. +fn var_at(input: &[u8], pos: &mut usize) -> Result> { + let mut result: u32 = 0; + let mut shift = 0; + loop { + if shift >= 5 * 7 { + return Err(Error::Protocol("varint is longer than 5 bytes".into())); + } + if *pos >= input.len() { + return Ok(None); + } + let byte = input[*pos]; + *pos += 1; + result |= ((byte & 0x7F) as u32) << shift; + if (byte & 0x80) == 0 { + return Ok(Some(((result >> 1) as i32) ^ (-((result & 1) as i32)))); + } + shift += 7; + } +} + +fn push_var_int(out: &mut Vec, value: i32) { + let mut zig = ((value as u32) << 1) ^ ((value >> 31) as u32); + loop { + if (zig & !0x7F) == 0 { + out.push(zig as u8); + return; + } + out.push(((zig & 0x7F) | 0x80) as u8); + zig >>= 7; + } +} + +/// Turns a byte stream into frames, one call per whatever the socket had. +/// +/// The one thing it will not do is buffer without limit: a peer that +/// announces a body of a gigabyte and then sends nothing must not be able to +/// hold a gigabyte of this process's heap, so a body larger than the +/// configured ceiling is refused the moment its length is read, and a buffer +/// that grows past one maximum frame plus a partial header is poisoned — +/// every later call fails instead of pretending the stream might recover. +#[derive(Debug)] +pub struct FrameDecoder { + pending: Vec, + max_body: usize, + poisoned: bool, + frames_read: u64, + bytes_read: u64, +} + +impl FrameDecoder { + pub fn new(max_body: usize) -> Self { + Self { + pending: Vec::new(), + max_body, + poisoned: false, + frames_read: 0, + bytes_read: 0, + } + } + + pub fn max_body(&self) -> usize { + self.max_body + } + + pub fn buffered_bytes(&self) -> usize { + self.pending.len() + } + + pub fn frames_read(&self) -> u64 { + self.frames_read + } + + pub fn bytes_read(&self) -> u64 { + self.bytes_read + } + + /// Feeds freshly read bytes in and returns every frame that is now + /// complete. Fails on a stream that can no longer become valid; a caller + /// should treat that as the end of the connection rather than something + /// to retry. + pub fn offer(&mut self, chunk: &[u8]) -> Result> { + if self.poisoned { + return Err(Error::Protocol( + "decoder was poisoned by an earlier failure".into(), + )); + } + if chunk.is_empty() { + return Ok(Vec::new()); + } + self.pending.extend_from_slice(chunk); + self.bytes_read += chunk.len() as u64; + + // refuse to sit on more than one maximum frame plus a partial header + let ceiling = self.max_body + MAX_ENVELOPE; + if self.pending.len() > ceiling { + self.poisoned = true; + return Err(Error::Protocol(format!( + "buffered {} bytes without a complete frame, limit is {ceiling}", + self.pending.len() + ))); + } + + let mut out = Vec::new(); + let mut pos = 0; + loop { + match Frame::decode(&self.pending[pos..], self.max_body) { + Ok(Some((frame, used))) => { + self.frames_read += 1; + out.push(frame); + pos += used; + } + Ok(None) => break, + Err(bad) => { + self.poisoned = true; + return Err(bad); + } + } + } + // hand the tail back to the next read instead of growing the buffer + if pos > 0 { + self.pending.drain(..pos); + } + Ok(out) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::rsx::buf::Buf; + + /// A deterministic stand-in for Java's `new Random(7).nextBytes`. + fn pseudo_random_body(len: usize) -> Vec { + let mut state = 7u32; + (0..len) + .map(|_| { + state = state.wrapping_mul(1_664_525).wrapping_add(1_013_904_223); + (state >> 24) as u8 + }) + .collect() + } + + #[test] + fn frame_round_trip() { + let body = pseudo_random_body(300); + let frame = Frame::new(0x01, body.clone()); + let encoded = frame.encode(); + let (back, used) = Frame::decode(&encoded, 1024 * 1024) + .unwrap() + .expect("frame came back"); + assert_eq!(used, encoded.len()); + assert_eq!(back.packet_id, 0x01); + assert_eq!(back.version, VERSION); + assert_eq!(back.body, body); + } + + #[test] + fn partial_frame_decodes_to_nothing() { + let all = Frame::new(0x05, vec![0u8; 64]).encode(); + // a fresh decoder per prefix: the question is whether any prefix + // short of the whole frame decodes to nothing + for cut in 0..all.len() - 1 { + let mut decoder = FrameDecoder::new(DEFAULT_MAX_PAYLOAD); + let got = decoder.offer(&all[..cut]).unwrap(); + assert!(got.is_empty(), "nothing complete after {cut} bytes"); + } + // and byte at a time it still arrives, exactly once + let mut whole = FrameDecoder::new(DEFAULT_MAX_PAYLOAD); + for byte in &all { + whole.offer(std::slice::from_ref(byte)).unwrap(); + } + assert_eq!(whole.frames_read(), 1, "exactly one frame once it all arrived"); + assert_eq!(whole.buffered_bytes(), 0); + } + + #[test] + fn foreign_magic_is_refused() { + let not_ours = [0x7F, b'E', b'L', b'F', 0x01, 0x00, 0x00, 0x00]; + let mut decoder = FrameDecoder::new(DEFAULT_MAX_PAYLOAD); + match decoder.offer(¬_ours) { + Err(Error::Protocol(_)) => {} + other => panic!("foreign magic was {other:?}, not a protocol error"), + } + // and it stays poisoned: the stream is finished, not retryable + assert!(decoder.offer(¬_ours).is_err()); + } + + #[test] + fn oversized_declared_body_is_refused() { + // valid magic and version, but a body of two gigabytes + let mut bytes = Vec::new(); + bytes.extend_from_slice(&MAGIC.to_be_bytes()); + push_var_int(&mut bytes, VERSION); + push_var_int(&mut bytes, 0x01); + push_var_int(&mut bytes, i32::MAX); + let mut decoder = FrameDecoder::new(4096); + match decoder.offer(&bytes) { + Err(Error::Protocol(_)) => {} + other => panic!("oversized claim was {other:?}, not a protocol error"), + } + } + + #[test] + fn byte_at_a_time_still_works() { + let bodies = [ + (0x01, "hello"), + (0x02, "hello-ack"), + (0x03, "auth"), + (0x04, "auth-ack"), + (0x05, "login"), + (0x06, "login-ack"), + (0x7F, "disconnect"), + ]; + let expected: Vec = bodies + .iter() + .map(|(id, text)| { + let mut body = Buf::new(); + body.write_string(text); + Frame::new(*id, body.into_inner()) + }) + .collect(); + + let mut wire = Vec::new(); + for frame in &expected { + wire.extend_from_slice(&frame.encode()); + } + + let mut decoder = FrameDecoder::new(DEFAULT_MAX_PAYLOAD); + let mut got = Vec::new(); + for byte in &wire { + got.extend(decoder.offer(std::slice::from_ref(byte)).unwrap()); + } + assert_eq!(got.len(), expected.len(), "every frame arrived"); + assert_eq!(got, expected); + assert_eq!(decoder.buffered_bytes(), 0, "nothing left buffered"); + } + + #[test] + fn many_frames_in_one_read() { + let mut decoder = FrameDecoder::new(DEFAULT_MAX_PAYLOAD); + let mut wire = Vec::new(); + let mut bodies = Vec::new(); + for i in 0..50 { + let body = format!("frame-{i}").into_bytes(); + wire.extend_from_slice(&Frame::new(0x05, body.clone()).encode()); + bodies.push(body); + } + let got = decoder.offer(&wire).unwrap(); + assert_eq!(got.len(), 50, "all fifty in one read"); + assert_eq!(decoder.frames_read(), 50, "counter agrees"); + for (i, frame) in got.iter().enumerate() { + assert_eq!(frame.body, bodies[i], "body {i}"); + } + } + + #[test] + fn a_lying_length_cannot_stall_the_heap() { + // announces a large but legal body, sends nothing, and keeps quiet. + // The decoder must hold it without growing and without pretending + // the frame arrived. + let mut decoder = FrameDecoder::new(64 * 1024); + let mut header = Vec::new(); + header.extend_from_slice(&MAGIC.to_be_bytes()); + push_var_int(&mut header, VERSION); + push_var_int(&mut header, 0x01); + push_var_int(&mut header, 60 * 1024); + let got = decoder.offer(&header).unwrap(); + assert!(got.is_empty(), "no frame yet"); + assert_eq!( + decoder.buffered_bytes(), + header.len(), + "held the header" + ); + + // and the rest arrives, so it completes + let body = vec![0u8; 60 * 1024]; + let got = decoder.offer(&body).unwrap(); + assert_eq!(got.len(), 1, "completes once the body arrives"); + } +} diff --git a/crates/horizon-client/src/rsx/mod.rs b/crates/horizon-client/src/rsx/mod.rs new file mode 100644 index 0000000..b7ecc7a --- /dev/null +++ b/crates/horizon-client/src/rsx/mod.rs @@ -0,0 +1,66 @@ +//! The RSX1 wire protocol of the RustNotMC game server, ported from the Java +//! reference implementation (`rsx-protocol`, `net.rustnotmc.protocol`). +//! +//! The client speaks this protocol to the Java rsx-server while the Rust +//! port of the server catches up, and later the same module carries the +//! in-process test doubles. Everything here is byte-for-byte compatible with +//! the reference: zig-zag varints, `RSX1` frames, positions packed 26/26/12 +//! and deflated 16x256x16 chunks. +//! +//! The shape of a connection: +//! +//! ```text +//! client -> Hello protocol version, the account it wants +//! server -> HelloAck accepted version, server name, motd, nonce, salt +//! client -> Login the session token (straight after hello) +//! server -> LoginAck player id and entity id, or a reason +//! client -> JoinWorld where the client thinks it is, or nothing +//! server -> WorldJoin entity id, seed, spawn, view distance, game mode +//! ``` +//! +//! After that the play phase has no fixed order: chunk data, block changes, +//! inventory updates and the rest arrive whenever the server says so. +pub mod buf; +pub mod frame; +pub mod packets; +pub mod session; + +pub use buf::Buf; +pub use frame::{Frame, FrameDecoder, DEFAULT_MAX_PAYLOAD, MAX_ENVELOPE, MAGIC, VERSION}; +pub use session::{Event, RsxSession}; + +/// Why a read or a parse failed. +#[derive(Debug)] +pub enum Error { + /// The bytes ran out mid-value. Inside a frame whose length has already + /// been announced complete this means the body does not match its own + /// declaration, so the stream is finished; at the socket it means the + /// peer stopped sending. + Incomplete(String), + /// The stream can never become valid: wrong magic, wrong version, a + /// length that lies, compressed data that is not compressed data. The + /// connection is over and nothing should retry it. + Protocol(String), + /// The transport itself failed or reached the end of the stream. + Io(std::io::Error), +} + +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Error::Incomplete(message) => write!(f, "incomplete: {message}"), + Error::Protocol(message) => write!(f, "protocol error: {message}"), + Error::Io(error) => write!(f, "io error: {error}"), + } + } +} + +impl std::error::Error for Error {} + +impl From for Error { + fn from(error: std::io::Error) -> Self { + Error::Io(error) + } +} + +pub type Result = std::result::Result; diff --git a/crates/horizon-client/src/rsx/packets.rs b/crates/horizon-client/src/rsx/packets.rs new file mode 100644 index 0000000..2a27522 --- /dev/null +++ b/crates/horizon-client/src/rsx/packets.rs @@ -0,0 +1,1230 @@ +//! The packets that start a connection, and the play phase that follows. +//! +//! The ids are written down rather than generated, because they end up in +//! every capture and every log line forever: renumbering one is a protocol +//! change and should look like a deliberate act. They match the Java +//! reference (`net.rustnotmc.protocol.Packets`) byte for byte. +//! +//! A chunk is sixteen by sixteen columns, two hundred and fifty six high, +//! one byte per block, indexed `(y << 8) | (z << 4) | x` — and almost all of +//! it is air, so it travels deflated. + +use super::buf::Buf; +use super::{Error, Result}; + +// ------------------------------------------------------------- text limits + +/// Longest a name, motd or reason may be, in bytes. +pub const MAX_TEXT: usize = 512; + +/// Longest a handshake proof may be, in bytes. +pub const MAX_PROOF: usize = 256; + +/// A salt and a nonce, in the sizes the crypto actually produces. +pub const SALT_BYTES: usize = 16; +pub const CHALLENGE_BYTES: usize = 32; + +// ------------------------------------------------------------------- ids + +pub const HELLO: i32 = 0x01; +pub const HELLO_ACK: i32 = 0x02; +pub const AUTH: i32 = 0x03; +pub const AUTH_ACK: i32 = 0x04; +pub const LOGIN: i32 = 0x05; +pub const LOGIN_ACK: i32 = 0x06; + +/// The play phase, once the handshake is done. Kept apart from the handshake +/// ids so that a packet can never be mistaken for one it is not. +pub const JOIN_WORLD: i32 = 0x10; +pub const WORLD_JOIN: i32 = 0x11; +pub const CHUNK_DATA: i32 = 0x12; + +/// One block changed: the same packet in both directions. +pub const BLOCK_CHANGE: i32 = 0x13; + +pub const PLAYER_MOVE: i32 = 0x14; +pub const ENTITY_MOVE: i32 = 0x15; +pub const PING: i32 = 0x16; +pub const PONG: i32 = 0x17; +pub const ENTITY_SPAWN: i32 = 0x18; +pub const ENTITY_REMOVE: i32 = 0x19; + +/// The launcher's session, presented to the game server instead of a +/// password. +pub const TOKEN_AUTH: i32 = 0x1A; + +/// The player's game mode, changed while the player is in the world. +pub const SET_GAME_MODE: i32 = 0x1B; + +/// The whole inventory, sent when the player arrives. +pub const INVENTORY: i32 = 0x1C; + +/// One slot of the inventory, when it changes. +pub const INVENTORY_SLOT: i32 = 0x1D; + +pub const DISCONNECT: i32 = 0x7F; + +/// Survival: the player cannot break blocks at all. +pub const GAMEMODE_SURVIVAL: i32 = 0; + +/// Creative: the player breaks the block they are looking at. +pub const GAMEMODE_CREATIVE: i32 = 1; + +// ---------------------------------------------------------- the chunk shape + +/// Blocks along one edge of a chunk. +pub const CHUNK_WIDTH: usize = 16; + +/// Blocks from the bottom of a chunk to the top. +pub const CHUNK_HEIGHT: usize = 256; + +/// Blocks in one layer of a chunk. +pub const CHUNK_AREA: usize = CHUNK_WIDTH * CHUNK_WIDTH; + +/// Blocks in a whole chunk. +pub const VOLUME: usize = CHUNK_AREA * CHUNK_HEIGHT; + +/// The most a compressed chunk may be: the raw size plus room for the worst +/// expansion, so a peer cannot announce a chunk body of any size it likes. +pub const MAX_COMPRESSED: usize = VOLUME + 1024; + +/// Where a block sits in a chunk's byte array: the sixteen blocks of one +/// layer are next to each other, so a layer is one run and a chunk is a +/// stack of layers. +pub fn chunk_index(x: usize, y: usize, z: usize) -> usize { + (y << 8) | (z << 4) | x +} + +/// Deflates a chunk at the fastest level, not the smallest: a chunk is +/// mostly zeros and zeros deflate to almost nothing at any level, so the +/// extra work of a smaller result buys nothing. +pub fn compress_chunk(raw: &[u8]) -> Result> { + use std::io::Write; + let mut encoder = + flate2::write::ZlibEncoder::new(Vec::new(), flate2::Compression::new(1)); + encoder.write_all(raw)?; + Ok(encoder.finish()?) +} + +/// Puts a chunk back together. The expected length is fixed by the format, +/// not by the peer, so a peer cannot make this allocate; anything that does +/// not come out at exactly the right size is a damaged or hostile chunk and +/// is refused. +pub fn decompress_chunk(packed: &[u8], expected: usize) -> Result> { + if expected > VOLUME { + return Err(Error::Protocol(format!( + "expected length {expected} is not a chunk size" + ))); + } + let mut out = vec![0u8; expected]; + let mut decoder = flate2::read::ZlibDecoder::new(packed); + std::io::Read::read_exact(&mut decoder, &mut out).map_err(|error| { + Error::Protocol(format!("chunk data is not valid compressed data: {error}")) + })?; + Ok(out) +} + +/// Parses a packet body that has already arrived in one piece: a body that +/// runs out mid-value is malformed rather than "not here yet", because the +/// frame around it promised these bytes exist. +fn parse_body(body: &[u8], parse: impl FnOnce(&mut Buf) -> Result) -> Result { + let mut buf = Buf::reading(body); + match parse(&mut buf) { + Err(Error::Incomplete(message)) => { + Err(Error::Protocol(format!("truncated packet body: {message}"))) + } + other => other, + } +} + +// ------------------------------------------------------------- handshake + +/// The client introducing itself, and naming the account it wants. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Hello { + pub protocol_version: i32, + pub account: String, + pub client_name: String, + pub client_version: i32, +} + +impl Hello { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.protocol_version); + buf.write_string(&self.account); + buf.write_string(&self.client_name); + buf.write_var_int(self.client_version); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + Ok(Self { + protocol_version: input.read_var_int()?, + account: input.read_string(MAX_TEXT)?, + client_name: input.read_string(MAX_TEXT)?, + client_version: input.read_var_int()?, + }) + }) + } +} + +/// The server accepting, and describing itself. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct HelloAck { + pub protocol_version: i32, + pub server_name: String, + pub motd: String, + pub online_players: i32, + pub max_players: i32, + /// A value fresh for this connection: the proof is computed over it, so + /// a recording of one login cannot be replayed against the next one. + pub nonce: Vec, + /// The salt of the account that was named, when it exists. + pub salt: Vec, +} + +impl HelloAck { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.protocol_version); + buf.write_string(&self.server_name); + buf.write_string(&self.motd); + buf.write_var_int(self.online_players); + buf.write_var_int(self.max_players); + buf.write_bytes(&self.nonce); + buf.write_bytes(&self.salt); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + Ok(Self { + protocol_version: input.read_var_int()?, + server_name: input.read_string(MAX_TEXT)?, + motd: input.read_string(MAX_TEXT)?, + online_players: input.read_var_int()?, + max_players: input.read_var_int()?, + nonce: input.read_bytes(CHALLENGE_BYTES)?, + salt: input.read_bytes(SALT_BYTES)?, + }) + }) + } +} + +/// Whether the account was accepted, and on what terms. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct AuthAck { + pub accepted: bool, + pub reason: String, + pub token: String, + pub expires_at: i64, + pub reload_token: String, + pub reload_expires_at: i64, +} + +impl AuthAck { + pub fn ok(token: String, expires_at: i64) -> Self { + Self { + accepted: true, + reason: String::new(), + token, + expires_at, + reload_token: String::new(), + reload_expires_at: 0, + } + } + + pub fn refused(reason: String) -> Self { + Self { + accepted: false, + reason, + token: String::new(), + expires_at: 0, + reload_token: String::new(), + reload_expires_at: 0, + } + } + + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_bool(self.accepted); + buf.write_string(&self.reason); + if self.accepted { + buf.write_string(&self.token); + buf.write_long(self.expires_at); + buf.write_string(&self.reload_token); + buf.write_long(self.reload_expires_at); + } + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + let accepted = input.read_bool()?; + // the reason is written either way, so it has to be read either + // way: skipping it here shifts everything after it by one field + let reason = input.read_string(MAX_TEXT)?; + if !accepted { + return Ok(Self::refused(reason)); + } + Ok(Self { + accepted: true, + reason, + token: input.read_string(MAX_TEXT)?, + expires_at: input.read_long()?, + reload_token: input.read_string(MAX_TEXT)?, + reload_expires_at: input.read_long()?, + }) + }) + } +} + +/// The client redeeming the token it was just handed. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Login { + pub account: String, + pub token: String, +} + +impl Login { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_string(&self.account); + buf.write_string(&self.token); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + Ok(Self { + account: input.read_string(MAX_TEXT)?, + token: input.read_string(MAX_TEXT)?, + }) + }) + } +} + +/// Whether the player is in. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct LoginAck { + pub accepted: bool, + pub reason: String, + pub player_id: i32, + pub entity_id: i32, +} + +impl LoginAck { + pub fn ok(player_id: i32, entity_id: i32) -> Self { + Self { + accepted: true, + reason: String::new(), + player_id, + entity_id, + } + } + + pub fn refused(reason: String) -> Self { + Self { + accepted: false, + reason, + player_id: -1, + entity_id: -1, + } + } + + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_bool(self.accepted); + buf.write_string(&self.reason); + if self.accepted { + buf.write_var_int(self.player_id); + buf.write_var_int(self.entity_id); + } + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + let accepted = input.read_bool()?; + let reason = input.read_string(MAX_TEXT)?; + if !accepted { + return Ok(Self::refused(reason)); + } + Ok(Self { + accepted: true, + reason, + player_id: input.read_var_int()?, + entity_id: input.read_var_int()?, + }) + }) + } +} + +/// A reason, said out loud, before the connection goes away. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Disconnect { + pub reason: String, +} + +impl Disconnect { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_string(&self.reason); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + Ok(Self { + reason: input.read_string(MAX_TEXT)?, + }) + }) + } +} + +// ------------------------------------------------------------- play phase + +/// The client asking to be put in the world. The position it carries is +/// where the client thinks it is, which is how a reconnect puts a player +/// back where it was standing rather than at the spawn; a client that has +/// never been here sends no position at all and the server decides. +#[derive(Debug, Clone, PartialEq)] +pub struct JoinWorld { + pub x: f64, + pub y: f64, + pub z: f64, + pub yaw: f32, + pub pitch: f32, + pub has_position: bool, +} + +impl JoinWorld { + /// A client that has no place to come back to. + pub fn fresh() -> Self { + Self { + x: 0.0, + y: 0.0, + z: 0.0, + yaw: 0.0, + pitch: 0.0, + has_position: false, + } + } + + /// A client that knows where it is. + pub fn at(x: f64, y: f64, z: f64, yaw: f32, pitch: f32) -> Self { + Self { + x, + y, + z, + yaw, + pitch, + has_position: true, + } + } + + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_bool(self.has_position); + if self.has_position { + buf.write_position(self.x, self.y, self.z); + buf.write_float(self.yaw); + buf.write_float(self.pitch); + } + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + if !input.read_bool()? { + return Ok(Self::fresh()); + } + let (x, y, z) = input.read_position()?; + Ok(Self { + x, + y, + z, + yaw: input.read_float()?, + pitch: input.read_float()?, + has_position: true, + }) + }) + } +} + +/// The world the client is in. The seed goes across so that the client can +/// build the same sky, the same colours and the same cloud shapes the +/// server sees, without the server having to send any of it. +#[derive(Debug, Clone, PartialEq)] +pub struct WorldJoin { + pub entity_id: i32, + pub seed: i64, + pub spawn_x: f64, + pub spawn_y: f64, + pub spawn_z: f64, + pub view_distance: i32, + pub world_height: i32, + pub game_mode: i32, +} + +impl WorldJoin { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.entity_id); + buf.write_var_long(self.seed); + buf.write_position(self.spawn_x, self.spawn_y, self.spawn_z); + buf.write_var_int(self.view_distance); + buf.write_var_int(self.world_height); + buf.write_var_int(self.game_mode); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + let entity_id = input.read_var_int()?; + let seed = input.read_var_long()?; + let (spawn_x, spawn_y, spawn_z) = input.read_position()?; + Ok(Self { + entity_id, + seed, + spawn_x, + spawn_y, + spawn_z, + view_distance: input.read_var_int()?, + world_height: input.read_var_int()?, + game_mode: input.read_var_int()?, + }) + }) + } +} + +/// One chunk, on its way to the client, deflated: a chunk of mostly air is +/// a few hundred bytes compressed against sixty five kilobytes raw, which +/// is the difference between joining in a moment and joining in a minute. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct ChunkData { + pub chunk_x: i32, + pub chunk_z: i32, + pub blocks: Vec, +} + +impl ChunkData { + pub fn new(chunk_x: i32, chunk_z: i32, blocks: Vec) -> Result { + if blocks.len() != VOLUME { + return Err(Error::Protocol(format!( + "chunk data is {} bytes, expected {VOLUME}", + blocks.len() + ))); + } + Ok(Self { + chunk_x, + chunk_z, + blocks, + }) + } + + pub fn write(&self) -> Buf { + let packed = compress_chunk(&self.blocks).expect("chunk compression cannot fail"); + let mut buf = Buf::new(); + buf.write_var_int(self.chunk_x); + buf.write_var_int(self.chunk_z); + buf.write_var_int(packed.len() as i32); + buf.write_bytes(&packed); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + let chunk_x = input.read_var_int()?; + let chunk_z = input.read_var_int()?; + let length = input.read_var_int()?; + if length < 0 || length as usize > MAX_COMPRESSED { + return Err(Error::Protocol(format!( + "compressed chunk of {length} bytes is out of range" + ))); + } + let packed = input.read_bytes(length as usize)?; + Ok(Self { + chunk_x, + chunk_z, + blocks: decompress_chunk(&packed, VOLUME)?, + }) + }) + } +} + +/// One block, changed. The same packet either way: the client asks, the +/// server says, and the body is the same. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct BlockChange { + pub x: i32, + pub y: i32, + pub z: i32, + pub block_id: u8, +} + +impl BlockChange { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.x); + buf.write_var_int(self.y); + buf.write_var_int(self.z); + buf.write_byte(self.block_id); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + Ok(Self { + x: input.read_var_int()?, + y: input.read_var_int()?, + z: input.read_var_int()?, + block_id: input.read_byte()?, + }) + }) + } +} + +/// Where the player is now. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct PlayerMove { + pub x: f64, + pub y: f64, + pub z: f64, + pub yaw: f32, + pub pitch: f32, + pub on_ground: bool, +} + +impl PlayerMove { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_position(self.x, self.y, self.z); + buf.write_float(self.yaw); + buf.write_float(self.pitch); + buf.write_bool(self.on_ground); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + let (x, y, z) = input.read_position()?; + Ok(Self { + x, + y, + z, + yaw: input.read_float()?, + pitch: input.read_float()?, + on_ground: input.read_bool()?, + }) + }) + } +} + +/// Somebody else moved. +#[derive(Debug, Clone, Copy, PartialEq)] +pub struct EntityMove { + pub entity_id: i32, + pub x: f64, + pub y: f64, + pub z: f64, + pub yaw: f32, + pub pitch: f32, +} + +impl EntityMove { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.entity_id); + buf.write_position(self.x, self.y, self.z); + buf.write_float(self.yaw); + buf.write_float(self.pitch); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + let entity_id = input.read_var_int()?; + let (x, y, z) = input.read_position()?; + Ok(Self { + entity_id, + x, + y, + z, + yaw: input.read_float()?, + pitch: input.read_float()?, + }) + }) + } +} + +/// A liveness check. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Ping { + pub id: i64, +} + +impl Ping { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_long(self.id); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| Ok(Self { id: input.read_long()? })) + } +} + +/// The answer to a liveness check. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Pong { + pub id: i64, +} + +impl Pong { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_long(self.id); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| Ok(Self { id: input.read_long()? })) + } +} + +/// Somebody else is here. The player id travels with the entity id because +/// the two are different things: the entity is what the client draws, the +/// player is who the server knows the player to be. +#[derive(Debug, Clone, PartialEq)] +pub struct EntitySpawn { + pub entity_id: i32, + pub player_id: i32, + pub name: String, + pub x: f64, + pub y: f64, + pub z: f64, + pub yaw: f32, + pub pitch: f32, +} + +impl EntitySpawn { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.entity_id); + buf.write_var_int(self.player_id); + buf.write_string(&self.name); + buf.write_position(self.x, self.y, self.z); + buf.write_float(self.yaw); + buf.write_float(self.pitch); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + let entity_id = input.read_var_int()?; + let player_id = input.read_var_int()?; + let name = input.read_string(MAX_TEXT)?; + let (x, y, z) = input.read_position()?; + Ok(Self { + entity_id, + player_id, + name, + x, + y, + z, + yaw: input.read_float()?, + pitch: input.read_float()?, + }) + }) + } +} + +/// Somebody else has left. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct EntityRemove { + pub entity_id: i32, +} + +impl EntityRemove { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.entity_id); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| Ok(Self { + entity_id: input.read_var_int()?, + })) + } +} + +/// The game mode of one player. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct GameMode { + pub mode: i32, +} + +impl GameMode { + /// True when the player may break blocks. + pub fn creative(&self) -> bool { + self.mode == GAMEMODE_CREATIVE + } + + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.mode); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| Ok(Self { + mode: input.read_var_int()?, + })) + } +} + +/// The launcher's session, as the game server sees it. The token is a +/// bearer credential: whoever holds it is the player. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct TokenAuth { + pub account: String, + pub uuid: String, + pub token: String, +} + +impl TokenAuth { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_string(&self.account); + buf.write_string(&self.uuid); + buf.write_string(&self.token); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + Ok(Self { + account: input.read_string(MAX_TEXT)?, + uuid: input.read_string(MAX_TEXT)?, + token: input.read_string(MAX_TEXT)?, + }) + }) + } +} + +/// One slot of an inventory. The empty slot is a stack of nothing, so there +/// is no special case: an empty slot is one with the id of nothing and a +/// count of zero. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Slot { + pub item: i32, + pub count: i32, + pub condition: i32, +} + +impl Slot { + pub fn empty() -> Self { + Self { + item: 0, + count: 0, + condition: -1, + } + } + + pub fn write_to(&self, buf: &mut Buf) { + buf.write_var_int(self.item); + buf.write_var_int(self.count); + buf.write_var_int(self.condition); + } + + pub fn read_from(buf: &mut Buf) -> Result { + Ok(Self { + item: buf.read_var_int()?, + count: buf.read_var_int()?, + condition: buf.read_var_int()?, + }) + } +} + +/// The whole inventory of a player. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Inventory { + pub slots: Vec, + /// The slot the player is holding. + pub held: i32, + /// The clothing the player wears: seven places, two layers each. + pub armor: Vec, +} + +impl Inventory { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.held); + buf.write_var_int(self.slots.len() as i32); + for slot in &self.slots { + slot.write_to(&mut buf); + } + buf.write_var_int(self.armor.len() as i32); + for slot in &self.armor { + slot.write_to(&mut buf); + } + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + let held = input.read_var_int()?; + let count = input.read_var_int()?; + if count < 0 || count > 1024 { + return Err(Error::Protocol(format!( + "an inventory of {count} slots is not real" + ))); + } + let mut slots = Vec::with_capacity(count as usize); + for _ in 0..count { + slots.push(Slot::read_from(input)?); + } + let worn = input.read_var_int()?; + if worn < 0 || worn > 64 { + return Err(Error::Protocol( + "that much clothing is not real".into(), + )); + } + let mut armor = Vec::with_capacity(worn as usize); + for _ in 0..worn { + armor.push(Slot::read_from(input)?); + } + Ok(Self { + slots, + held, + armor, + }) + }) + } +} + +/// One slot of the inventory and what is in it now. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct SlotChange { + pub slot: i32, + pub item: i32, + pub count: i32, + pub condition: i32, +} + +impl SlotChange { + pub fn write(&self) -> Buf { + let mut buf = Buf::new(); + buf.write_var_int(self.slot); + buf.write_var_int(self.item); + buf.write_var_int(self.count); + buf.write_var_int(self.condition); + buf + } + + pub fn read(body: &[u8]) -> Result { + parse_body(body, |input| { + Ok(Self { + slot: input.read_var_int()?, + item: input.read_var_int()?, + count: input.read_var_int()?, + condition: input.read_var_int()?, + }) + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + /// A terrain chunk the way the Java test builds one: stone below, a + /// grass surface at y=63, air above. + fn terrain_chunk() -> Vec { + let mut raw = vec![0u8; VOLUME]; + for z in 0..CHUNK_WIDTH { + for x in 0..CHUNK_WIDTH { + for y in 0..64 { + raw[chunk_index(x, y, z)] = if y == 63 { 3 } else { 1 }; + } + } + } + raw + } + + #[test] + fn handshake_packets_round_trip() { + let hello = Hello { + protocol_version: 1, + account: "Player".into(), + client_name: "cli".into(), + client_version: 1, + }; + let back = Hello::read(&hello.write().into_inner()).unwrap(); + assert_eq!(back, hello); + + let ack = HelloAck { + protocol_version: 1, + server_name: "RSX1".into(), + motd: "a world".into(), + online_players: 200, + max_players: 500, + nonce: vec![0xAB; CHALLENGE_BYTES], + salt: vec![0xCD; SALT_BYTES], + }; + let back = HelloAck::read(&ack.write().into_inner()).unwrap(); + assert_eq!(back, ack); + assert_eq!(back.nonce.len(), CHALLENGE_BYTES); + assert_eq!(back.salt.len(), SALT_BYTES); + + let refused = AuthAck::refused("wrong name or password".into()); + let back = AuthAck::read(&refused.write().into_inner()).unwrap(); + assert_eq!(back, refused); + + let accepted = AuthAck::ok("session-token".into(), 1_700_000_000_000); + let back = AuthAck::read(&accepted.write().into_inner()).unwrap(); + assert_eq!(back, accepted); + + let login = Login { + account: "Player".into(), + token: "session-token".into(), + }; + let back = Login::read(&login.write().into_inner()).unwrap(); + assert_eq!(back, login); + + let ok = LoginAck::ok(7, 7); + let back = LoginAck::read(&ok.write().into_inner()).unwrap(); + assert_eq!(back, ok); + + let no = LoginAck::refused("bad or expired token".into()); + let back = LoginAck::read(&no.write().into_inner()).unwrap(); + assert_eq!(back, no); + } + + #[test] + fn play_packets_round_trip() { + let join = JoinWorld::at(120.5, 64.0, -300.25, 90.0, -10.0); + let back = JoinWorld::read(&join.write().into_inner()).unwrap(); + assert!(back.has_position, "the join carried a position"); + assert_eq!(back.x, 120.5); + assert_eq!(back.y, 64.0); + assert_eq!(back.z, -300.25); + assert_eq!(back.yaw, 90.0); + assert_eq!(back.pitch, -10.0); + + let fresh = JoinWorld::fresh(); + let back = JoinWorld::read(&fresh.write().into_inner()).unwrap(); + assert!(!back.has_position, "a fresh join carries no position"); + + let world = WorldJoin { + entity_id: 7, + seed: 1234567890123, + spawn_x: 0.5, + spawn_y: 64.0, + spawn_z: 0.5, + view_distance: 8, + world_height: 256, + game_mode: GAMEMODE_CREATIVE, + }; + let back = WorldJoin::read(&world.write().into_inner()).unwrap(); + assert_eq!(back, world); + + let survival = GameMode { + mode: GAMEMODE_SURVIVAL, + }; + let back = GameMode::read(&survival.write().into_inner()).unwrap(); + assert_eq!(back, survival); + assert!(!back.creative(), "survival cannot break blocks"); + assert!( + GameMode { + mode: GAMEMODE_CREATIVE + } + .creative(), + "creative can break blocks" + ); + + let change = BlockChange { + x: -100, + y: 70, + z: 250, + block_id: 1, + }; + let back = BlockChange::read(&change.write().into_inner()).unwrap(); + assert_eq!(back, change); + + let move_ = PlayerMove { + x: 1.5, + y: 64.0, + z: -2.25, + yaw: 45.0, + pitch: -45.0, + on_ground: true, + }; + let back = PlayerMove::read(&move_.write().into_inner()).unwrap(); + assert_eq!(back, move_); + assert!(back.on_ground, "the player is on the ground"); + + let entity = EntityMove { + entity_id: 9, + x: 8.0, + y: 9.0, + z: 10.0, + yaw: 1.0, + pitch: 2.0, + }; + let back = EntityMove::read(&entity.write().into_inner()).unwrap(); + assert_eq!(back, entity); + + let ping = Ping { id: 1234567890123 }; + let back = Ping::read(&ping.write().into_inner()).unwrap(); + assert_eq!(back, ping); + let pong = Pong { id: 99 }; + let back = Pong::read(&pong.write().into_inner()).unwrap(); + assert_eq!(back, pong); + + let spawn = EntitySpawn { + entity_id: 4, + player_id: 4, + name: "Player".into(), + x: 1.0, + y: 65.0, + z: 2.0, + yaw: 30.0, + pitch: -60.0, + }; + let back = EntitySpawn::read(&spawn.write().into_inner()).unwrap(); + assert_eq!(back, spawn); + + let remove = EntityRemove { entity_id: 11 }; + let back = EntityRemove::read(&remove.write().into_inner()).unwrap(); + assert_eq!(back, remove); + + let launcher = TokenAuth { + account: "Player".into(), + uuid: "00000000-0000-0000-0000-000000000000".into(), + token: "a.b.c".into(), + }; + let back = TokenAuth::read(&launcher.write().into_inner()).unwrap(); + assert_eq!(back, launcher); + + let bye = Disconnect { + reason: "server is closing".into(), + }; + let back = Disconnect::read(&bye.write().into_inner()).unwrap(); + assert_eq!(back, bye); + } + + #[test] + fn a_chunk_survives_compression() { + let raw = terrain_chunk(); + + let packed = compress_chunk(&raw).unwrap(); + assert!( + packed.len() < 4096, + "a chunk of mostly air is small ({} bytes)", + packed.len() + ); + assert_eq!( + decompress_chunk(&packed, VOLUME).unwrap(), + raw, + "the chunk came back" + ); + + let data = ChunkData::new(-3, 9, raw.clone()).unwrap(); + let back = ChunkData::read(&data.write().into_inner()).unwrap(); + assert_eq!(back.chunk_x, -3); + assert_eq!(back.chunk_z, 9); + assert_eq!(back.blocks, raw, "the blocks came back"); + assert_eq!(back.blocks[chunk_index(0, 63, 0)], 3, "grass on top"); + assert_eq!(back.blocks[chunk_index(0, 0, 0)], 1, "stone below"); + assert_eq!(back.blocks[chunk_index(0, 100, 0)], 0, "air above"); + } + + #[test] + fn a_chunk_that_is_not_compressed_data_is_refused() { + // 0xFF is not a valid deflate block header, so this cannot decode + let rubbish = vec![0xFFu8; 64]; + match decompress_chunk(&rubbish, VOLUME) { + Err(Error::Protocol(_)) => {} + other => panic!("rubbish was {other:?}, not a protocol error"), + } + } + + #[test] + fn a_truncated_chunk_is_refused() { + let raw = vec![0u8; VOLUME]; + let packed = compress_chunk(&raw).unwrap(); + let cut = &packed[..packed.len() / 2]; + match decompress_chunk(cut, VOLUME) { + Err(Error::Protocol(_)) => {} + other => panic!("truncated chunk was {other:?}, not a protocol error"), + } + } + + #[test] + fn an_inventory_survives_the_wire() { + let slots = vec![ + Slot { + item: 1, + count: 1, + condition: 100, + }, + Slot { + item: 2, + count: 12, + condition: -1, + }, + Slot::empty(), + Slot { + item: 7, + count: 7, + condition: -1, + }, + Slot::empty(), + Slot::empty(), + ]; + let inventory = Inventory { + slots: slots.clone(), + held: 0, + armor: Vec::new(), + }; + let back = Inventory::read(&inventory.write().into_inner()).unwrap(); + assert_eq!(back.slots.len(), 6, "the slots survive"); + assert_eq!(back.slots[0].item, 1, "the rock is in the first slot"); + assert_eq!(back.slots[0].count, 1, "with one of it"); + assert_eq!(back.slots[0].condition, 100, "and its life"); + assert_eq!(back.slots[1].count, 12, "wood is in the second"); + assert_eq!( + back.slots[2].item, 0, + "an empty slot stays empty" + ); + assert_eq!(back.held, 0, "the hand survives"); + assert_eq!(back.slots, slots); + + let change = SlotChange { + slot: 3, + item: 7, + count: 7, + condition: -1, + }; + let back = SlotChange::read(&change.write().into_inner()).unwrap(); + assert_eq!(back, change); + } + + #[test] + fn an_absurd_inventory_is_refused() { + // announces a million slots and provides none of them + let mut body = Buf::new(); + body.write_var_int(0); + body.write_var_int(1_000_000); + match Inventory::read(&body.into_inner()) { + Err(Error::Protocol(_)) => {} + other => panic!("absurd inventory was {other:?}, not a protocol error"), + } + } +} diff --git a/crates/horizon-client/src/rsx/session.rs b/crates/horizon-client/src/rsx/session.rs new file mode 100644 index 0000000..08f5225 --- /dev/null +++ b/crates/horizon-client/src/rsx/session.rs @@ -0,0 +1,654 @@ +//! One connection to an RSX1 server: framing, the fixed handshake order and +//! then the play phase as a stream of events. +//! +//! The session is generic over anything that is a byte stream, so the same +//! code runs against a TCP socket, against the in-memory [`Pipe`] of +//! `horizon_protocol` in tests, and later against an in-process server. + +use super::buf::Buf; +use super::frame::{Frame, FrameDecoder, DEFAULT_MAX_PAYLOAD, VERSION}; +use super::packets::*; +use super::{Error, Result}; +use std::collections::VecDeque; +use std::io::{Read, Write}; + +/// One thing the server said, parsed as far as this build goes. Packets +/// that are not part of the spike yet arrive as [`Event::Other`] with their +/// id and raw body, so nothing is lost and nothing blocks. +#[derive(Debug)] +pub enum Event { + WorldJoin(WorldJoin), + Chunk(ChunkData), + BlockChange(BlockChange), + Inventory(Inventory), + SlotChange(SlotChange), + GameMode(GameMode), + EntitySpawn(EntitySpawn), + EntityRemove(EntityRemove), + PlayerMove(PlayerMove), + EntityMove(EntityMove), + /// The server said goodbye, with a reason. + Disconnect(String), + Other { + id: i32, + body: Vec, + }, +} + +/// A live RSX1 connection. +/// +/// Frames that arrive together with the one a blocking call is waiting for +/// are kept in `pending` and handed out later, in wire order: a real server +/// batches the world join, the inventory and the first chunks into one +/// write, and dropping the surplus would drop the world with it. +pub struct RsxSession { + stream: S, + decoder: FrameDecoder, + pending: VecDeque, + scratch: Vec, +} + +impl RsxSession { + pub fn new(stream: S) -> Self { + Self { + stream, + decoder: FrameDecoder::new(DEFAULT_MAX_PAYLOAD), + pending: VecDeque::new(), + scratch: vec![0u8; 8192], + } + } + + /// The transport, for callers that need to adjust it (timeouts and the + /// like on a TCP session). + pub fn stream_mut(&mut self) -> &mut S { + &mut self.stream + } + + /// Puts one packet on the wire. + pub fn send(&mut self, packet_id: i32, body: Buf) -> Result<()> { + let frame = Frame::new(packet_id, body.into_inner()); + self.stream.write_all(&frame.encode())?; + self.stream.flush()?; + Ok(()) + } + + /// The next frame, oldest first: queued frames first, then whatever the + /// transport still owes us. + pub fn recv(&mut self) -> Result { + if let Some(frame) = self.pending.pop_front() { + return Ok(frame); + } + self.pump() + } + + /// Reads the transport until at least one whole frame comes out. Anything + /// that arrives with it stays queued for later calls. + fn pump(&mut self) -> Result { + loop { + let read = match self.stream.read(&mut self.scratch) { + Err(error) if error.kind() == std::io::ErrorKind::Interrupted => continue, + other => other?, + }; + if read == 0 { + return Err(Error::Io(std::io::Error::new( + std::io::ErrorKind::UnexpectedEof, + "server closed the connection", + ))); + } + let frames = self.decoder.offer(&self.scratch[..read])?; + if let Some(first) = frames.first().cloned() { + self.pending.extend(frames.into_iter().skip(1)); + return Ok(first); + } + } + } + + /// The next frame, and it has to be the one the protocol says comes now. + fn expect(&mut self, packet_id: i32) -> Result { + let frame = self.recv()?; + if frame.packet_id == DISCONNECT { + return Err(Self::disconnect_error(&frame)); + } + if frame.packet_id != packet_id { + return Err(Error::Protocol(format!( + "expected packet 0x{packet_id:02X}, got 0x{:02X}", + frame.packet_id + ))); + } + Ok(frame) + } + + fn disconnect_error(frame: &Frame) -> Error { + match Disconnect::read(&frame.body) { + Ok(disconnect) => Error::Protocol(format!("disconnected: {}", disconnect.reason)), + Err(error) => Error::Protocol(format!("disconnected, reason unreadable: {error}")), + } + } + + /// Hello, and the server describing itself. The account travels here + /// because the salt in the reply belongs to that account and the client + /// cannot do anything without it. + pub fn hello(&mut self, account: &str, client_name: &str) -> Result { + let hello = Hello { + protocol_version: VERSION, + account: account.to_owned(), + client_name: client_name.to_owned(), + client_version: 1, + }; + self.send(HELLO, hello.write())?; + let ack = HelloAck::read(&self.expect(HELLO_ACK)?.body)?; + if ack.protocol_version != VERSION { + return Err(Error::Protocol(format!( + "server speaks protocol version {}, this build speaks {VERSION}", + ack.protocol_version + ))); + } + Ok(ack) + } + + /// Redeems a token the launcher or the server handed out. The verdict + /// comes back either way: check [`LoginAck::accepted`] (via + /// [`RsxSession::login`]) or [`AuthAck::accepted`] before going on. + pub fn token_auth(&mut self, account: &str, uuid: &str, token: &str) -> Result { + let request = TokenAuth { + account: account.to_owned(), + uuid: uuid.to_owned(), + token: token.to_owned(), + }; + self.send(TOKEN_AUTH, request.write())?; + AuthAck::read(&self.expect(AUTH_ACK)?.body) + } + + /// The token step of the handshake. A token may be redeemed straight + /// after hello, without any password step: the token is proof enough on + /// its own. + pub fn login(&mut self, account: &str, token: &str) -> Result { + let request = Login { + account: account.to_owned(), + token: token.to_owned(), + }; + self.send(LOGIN, request.write())?; + LoginAck::read(&self.expect(LOGIN_ACK)?.body) + } + + /// Asks to be put in the world and waits for the answer. Frames that + /// were already queued stay queued, in order; anything that arrives + /// before the world join is kept too rather than thrown away. + pub fn join_world(&mut self, join: JoinWorld) -> Result { + self.send(JOIN_WORLD, join.write())?; + + let mut index = 0; + while index < self.pending.len() { + let frame = &self.pending[index]; + if frame.packet_id == DISCONNECT { + let frame = self.pending.remove(index).expect("frame at index"); + return Err(Self::disconnect_error(&frame)); + } + if frame.packet_id == WORLD_JOIN { + let frame = self.pending.remove(index).expect("frame at index"); + return WorldJoin::read(&frame.body); + } + index += 1; + } + + loop { + let frame = self.pump()?; + match frame.packet_id { + DISCONNECT => return Err(Self::disconnect_error(&frame)), + WORLD_JOIN => return WorldJoin::read(&frame.body), + _ => self.pending.push_back(frame), + } + } + } + + /// The next thing the server said. Liveness checks are answered here, + /// on the spot, so the game never has to see them. + pub fn next_event(&mut self) -> Result { + loop { + let frame = self.recv()?; + match frame.packet_id { + PING => { + let ping = Ping::read(&frame.body)?; + self.send(PONG, Pong { id: ping.id }.write())?; + } + DISCONNECT => { + return Ok(Event::Disconnect(Disconnect::read(&frame.body)?.reason)) + } + WORLD_JOIN => return Ok(Event::WorldJoin(WorldJoin::read(&frame.body)?)), + CHUNK_DATA => return Ok(Event::Chunk(ChunkData::read(&frame.body)?)), + BLOCK_CHANGE => return Ok(Event::BlockChange(BlockChange::read(&frame.body)?)), + INVENTORY => return Ok(Event::Inventory(Inventory::read(&frame.body)?)), + INVENTORY_SLOT => { + return Ok(Event::SlotChange(SlotChange::read(&frame.body)?)) + } + SET_GAME_MODE => return Ok(Event::GameMode(GameMode::read(&frame.body)?)), + ENTITY_SPAWN => return Ok(Event::EntitySpawn(EntitySpawn::read(&frame.body)?)), + ENTITY_REMOVE => { + return Ok(Event::EntityRemove(EntityRemove::read(&frame.body)?)) + } + PLAYER_MOVE => return Ok(Event::PlayerMove(PlayerMove::read(&frame.body)?)), + ENTITY_MOVE => return Ok(Event::EntityMove(EntityMove::read(&frame.body)?)), + id => return Ok(Event::Other { id, body: frame.body }), + } + } + } +} + +impl RsxSession { + /// Connects with the connect/read/write timeouts of a handshake; clear + /// them with [`RsxSession::set_io_timeouts`] once the play phase starts, + /// or an idle moment between packets will look like a dead server. + pub fn connect( + addr: std::net::SocketAddr, + timeout: std::time::Duration, + ) -> Result { + let stream = std::net::TcpStream::connect_timeout(&addr, timeout)?; + stream.set_nodelay(true)?; + stream.set_read_timeout(Some(timeout))?; + stream.set_write_timeout(Some(timeout))?; + Ok(Self::new(stream)) + } + + pub fn set_io_timeouts( + &mut self, + read: Option, + write: Option, + ) -> Result<()> { + self.stream.set_read_timeout(read)?; + self.stream.set_write_timeout(write)?; + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::rsx::frame::MAGIC; + use horizon_protocol::connection::Pipe; + + /// The server's end of a test: closes the pipe however the thread ends, + /// so a client blocked in `read` sees the end of the stream instead of + /// waiting forever for a server that has already finished. + struct ServerEnd(Pipe); + + impl Drop for ServerEnd { + fn drop(&mut self) { + self.0.shutdown(); + } + } + + /// A terrain chunk the way the reference server builds one: stone below, + /// a grass surface at y=63, air above. + fn terrain_chunk() -> Vec { + let mut raw = vec![0u8; VOLUME]; + for z in 0..CHUNK_WIDTH { + for x in 0..CHUNK_WIDTH { + for y in 0..64 { + raw[chunk_index(x, y, z)] = if y == 63 { 3 } else { 1 }; + } + } + } + raw + } + + /// The reference handshake, mirrored: hello, token login, join — and the + /// answer to the join is batched the way `ClientSession.onJoinWorld` + /// batches it, with the inventory and a packet this build does not parse + /// yet riding along in the same write. + fn serve(stream: &mut Pipe) { + let mut decoder = FrameDecoder::new(DEFAULT_MAX_PAYLOAD); + let mut scratch = [0u8; 8192]; + loop { + let read = match stream.read(&mut scratch) { + Ok(0) | Err(_) => return, + Ok(read) => read, + }; + for frame in decoder.offer(&scratch[..read]).expect("server decode") { + match frame.packet_id { + HELLO => { + let hello = Hello::read(&frame.body).expect("hello body"); + assert_eq!(hello.protocol_version, VERSION); + assert_eq!(hello.account, "dev"); + let ack = HelloAck { + protocol_version: VERSION, + server_name: "RSX1 dev".into(), + motd: "in-memory".into(), + online_players: 1, + max_players: 8, + nonce: vec![0xAB; CHALLENGE_BYTES], + salt: vec![0xCD; SALT_BYTES], + }; + let reply = Frame::new(HELLO_ACK, ack.write().into_inner()).encode(); + stream.write_all(&reply).expect("server write"); + } + LOGIN => { + let login = Login::read(&frame.body).expect("login body"); + assert_eq!(login.account, "dev"); + assert_eq!(login.token, "dev-token-value"); + let ack = LoginAck::ok(1, 1); + let reply = Frame::new(LOGIN_ACK, ack.write().into_inner()).encode(); + stream.write_all(&reply).expect("server write"); + } + JOIN_WORLD => { + let join = JoinWorld::read(&frame.body).expect("join body"); + assert!(!join.has_position, "a first join carries no position"); + let world = WorldJoin { + entity_id: 1, + seed: 1234567890123, + spawn_x: 0.5, + spawn_y: 64.0, + spawn_z: 0.5, + view_distance: 8, + world_height: 256, + game_mode: GAMEMODE_CREATIVE, + }; + let inventory = Inventory { + slots: (0..6) + .map(|i| Slot { + item: i, + count: i, + condition: -1, + }) + .collect(), + held: 0, + armor: Vec::new(), + }; + let chunk = ChunkData::new(-3, 9, terrain_chunk()).unwrap(); + // KNOWN_RECIPES (0x25): real, not parsed yet + let mut recipes = Buf::new(); + recipes.write_var_int(0); + + let mut batch = Vec::new(); + batch.extend(Frame::new(WORLD_JOIN, world.write().into_inner()).encode()); + batch.extend( + Frame::new(INVENTORY, inventory.write().into_inner()).encode(), + ); + batch.extend(Frame::new(0x25, recipes.into_inner()).encode()); + batch.extend(Frame::new(CHUNK_DATA, chunk.write().into_inner()).encode()); + stream.write_all(&batch).expect("server write"); + return; + } + other => panic!("unexpected packet 0x{other:02X}"), + } + } + } + } + + #[test] + fn logs_in_and_receives_a_chunk_over_an_in_memory_pipe() { + let (client_end, server_end) = Pipe::pair(); + let server = std::thread::spawn(move || { + let mut end = ServerEnd(server_end); + serve(&mut end.0); + }); + + let mut session = RsxSession::new(client_end); + + let hello = session.hello("dev", "horizon-rs").expect("hello"); + assert_eq!(hello.protocol_version, VERSION, "version agreed"); + assert_eq!(hello.server_name, "RSX1 dev"); + assert_eq!(hello.nonce.len(), CHALLENGE_BYTES); + assert_eq!(hello.salt.len(), SALT_BYTES); + + let login = session + .login("dev", "dev-token-value") + .expect("login reply"); + assert!(login.accepted, "logged in: {}", login.reason); + assert_eq!((login.player_id, login.entity_id), (1, 1)); + + let world = session.join_world(JoinWorld::fresh()).expect("join"); + assert_eq!(world.seed, 1234567890123, "the seed came across"); + assert_eq!(world.game_mode, GAMEMODE_CREATIVE); + assert_eq!(world.world_height, 256); + assert_eq!(world.view_distance, 8); + assert_eq!((world.spawn_x, world.spawn_y), (0.5, 64.0)); + + match session.next_event().expect("inventory") { + Event::Inventory(inventory) => { + assert_eq!(inventory.slots.len(), 6); + assert_eq!(inventory.slots[3].item, 3); + assert_eq!(inventory.held, 0); + } + other => panic!("expected the inventory, got {other:?}"), + } + + let chunk = loop { + match session.next_event().expect("next event") { + Event::Chunk(chunk) => break chunk, + // the packets between inventory and chunks are kept, not dropped + Event::Other { id, .. } => assert_eq!(id, 0x25, "known recipes ride along"), + other => panic!("expected the chunk, got {other:?}"), + } + }; + assert_eq!((chunk.chunk_x, chunk.chunk_z), (-3, 9)); + assert_eq!(chunk.blocks.len(), VOLUME, "a whole chunk arrived"); + assert_eq!(chunk.blocks[chunk_index(0, 63, 0)], 3, "grass on top"); + assert_eq!(chunk.blocks[chunk_index(5, 10, 5)], 1, "stone below"); + assert_eq!(chunk.blocks[chunk_index(0, 200, 0)], 0, "air above"); + + // the server is finished: its end closes and the next read sees the + // end of the stream rather than hanging + match session.next_event() { + Err(Error::Io(_)) => {} + other => panic!("end of stream was {other:?}"), + } + + server.join().expect("server thread"); + } + + #[test] + fn a_foreign_stream_is_refused_before_anything_is_sent() { + // what a status probe or any non-RSX1 client looks like: the magic + // is checked before a single body byte is touched + let mut bytes = Vec::new(); + bytes.extend_from_slice(&0x0000_0115u32.to_be_bytes()); + bytes.extend_from_slice(&1u64.to_be_bytes()); + match Frame::decode(&bytes, DEFAULT_MAX_PAYLOAD) { + Err(Error::Protocol(message)) => { + assert!(message.contains("magic"), "wrong message: {message}") + } + other => panic!("foreign stream was {other:?}"), + } + assert_ne!(MAGIC, 0x0000_0115, "ours is RSX1, not the status magic"); + } + + #[test] + fn queued_frames_keep_their_order_across_a_batched_write() { + let (client_end, server_end) = Pipe::pair(); + let mut server = server_end; + let mut client = RsxSession::new(client_end); + + // three frames in one write, before the client asks for anything + let mut batch = Vec::new(); + batch.extend( + Frame::new( + INVENTORY, + Inventory { + slots: vec![Slot { + item: 4, + count: 2, + condition: -1, + }], + held: 2, + armor: Vec::new(), + } + .write() + .into_inner(), + ) + .encode(), + ); + batch.extend(Frame::new(SET_GAME_MODE, GameMode { mode: 1 }.write().into_inner()).encode()); + batch.extend( + Frame::new( + INVENTORY_SLOT, + SlotChange { + slot: 2, + item: 7, + count: 7, + condition: -1, + } + .write() + .into_inner(), + ) + .encode(), + ); + server.write_all(&batch).expect("write batch"); + + // the client sees them one by one, in the order they were written + match client.next_event().expect("first") { + Event::Inventory(inventory) => { + assert_eq!(inventory.held, 2); + assert_eq!(inventory.slots[0].item, 4); + } + other => panic!("first was {other:?}"), + } + match client.next_event().expect("second") { + Event::GameMode(mode) => assert!(mode.creative()), + other => panic!("second was {other:?}"), + } + match client.next_event().expect("third") { + Event::SlotChange(change) => assert_eq!(change.slot, 2), + other => panic!("third was {other:?}"), + } + + // and a disconnect is reported with its reason, not as a mystery + let bye = Disconnect { + reason: "server is closing".into(), + }; + server + .write_all(&Frame::new(DISCONNECT, bye.write().into_inner()).encode()) + .expect("write bye"); + match client.next_event().expect("goodbye") { + Event::Disconnect(reason) => assert_eq!(reason, "server is closing"), + other => panic!("goodbye was {other:?}"), + } + } + + /// The whole handshake against a real, running Java rsx-server: the + /// claim that "the protocol round trips in a unit test" and "somebody + /// can actually log in" are different claims, and this is the second. + /// + /// Run with a server up (see `tools/watch-game.ps1 -ServerOnly`, which + /// starts `ServerMain --port 25599 --dev-token Player` and writes the + /// token to `rsx-server-core\world\dev-token.txt`): + /// + /// ```text + /// $env:RSX_DEV_TOKEN = '' + /// cargo test -p horizon-client rsx -- --ignored --nocapture + /// ``` + /// + /// Optional: `RSX_ADDR` (default `127.0.0.1:25599`) and `RSX_ACCOUNT` + /// (default `Player`). The token is per-run: the server makes a new + /// secret every start, so a token from an earlier run is refused. + #[test] + #[ignore = "needs a running RSX server on 127.0.0.1:25599"] + fn logs_into_a_live_java_rsx_server() { + let addr: std::net::SocketAddr = std::env::var("RSX_ADDR") + .unwrap_or_else(|_| "127.0.0.1:25599".into()) + .parse() + .expect("RSX_ADDR must be host:port"); + let account = std::env::var("RSX_ACCOUNT").unwrap_or_else(|_| "Player".into()); + let token = std::env::var("RSX_DEV_TOKEN").expect( + "set RSX_DEV_TOKEN to the contents of rsx-server-core\\world\\dev-token.txt", + ); + + let mut session = + RsxSession::connect(addr, std::time::Duration::from_secs(10)).expect("connect"); + println!("connected to {addr}"); + + let hello = session.hello(&account, "horizon-rs").expect("hello"); + println!( + "server: {} - {} ({}/{}), version {}", + hello.server_name, hello.motd, hello.online_players, hello.max_players, + hello.protocol_version + ); + assert_eq!(hello.protocol_version, VERSION, "version agreed"); + + let login = session.login(&account, &token).expect("login reply"); + assert!(login.accepted, "login refused: {}", login.reason); + println!( + "logged in as {account}: player id {}, entity id {}", + login.player_id, login.entity_id + ); + + // play phase: a quiet moment is a quiet moment, not a dead server, + // but it still has to end in bounded time + session + .set_io_timeouts(Some(std::time::Duration::from_secs(5)), None) + .expect("read timeout"); + + let world = session.join_world(JoinWorld::fresh()).expect("join"); + println!( + "world: entity {}, seed {}, spawn {:.1}/{:.1}/{:.1}, view {}, height {}, game mode {}", + world.entity_id, world.seed, world.spawn_x, world.spawn_y, world.spawn_z, + world.view_distance, world.world_height, world.game_mode + ); + assert_eq!(world.world_height, 256, "the reference world is 256 tall"); + + let started = std::time::Instant::now(); + let deadline = started + std::time::Duration::from_secs(60); + let (mut chunks, mut events) = (0usize, 0usize); + let mut other_ids: Vec = Vec::new(); + loop { + if std::time::Instant::now() >= deadline { + println!("deadline reached, stopping"); + break; + } + match session.next_event() { + Ok(Event::Chunk(chunk)) => { + assert_eq!( + chunk.blocks.len(), + VOLUME, + "chunk {} {} came out wrong", + chunk.chunk_x, + chunk.chunk_z + ); + chunks += 1; + } + Ok(Event::Inventory(inventory)) => { + println!( + "inventory: {} slots, held {}, {} worn", + inventory.slots.len(), + inventory.held, + inventory.armor.len() + ); + events += 1; + } + Ok(Event::Disconnect(reason)) => { + panic!("the server disconnected us: {reason}"); + } + Ok(Event::Other { id, .. }) => { + if !other_ids.contains(&id) { + other_ids.push(id); + } + events += 1; + } + Ok(_) => events += 1, + Err(Error::Io(error)) + if matches!( + error.kind(), + std::io::ErrorKind::TimedOut | std::io::ErrorKind::WouldBlock + ) => + { + println!("quiet for five seconds, that is everything"); + break; + } + Err(error) => panic!("read failed: {error}"), + } + } + println!( + "received: {chunks} chunks, {events} other events, unparsed ids {other_ids:?} in {:.1}s", + started.elapsed().as_secs_f32() + ); + assert!(chunks > 0, "the server streams chunks on join"); + + let _ = session.send( + DISCONNECT, + Disconnect { + reason: "test finished".into(), + } + .write(), + ); + println!("said goodbye"); + } +} diff --git a/crates/horizon-client/src/rsx_terrain.rs b/crates/horizon-client/src/rsx_terrain.rs new file mode 100644 index 0000000..47207a1 --- /dev/null +++ b/crates/horizon-client/src/rsx_terrain.rs @@ -0,0 +1,384 @@ +//! The RSX world as a Horizon chunk generator. +//! +//! The server owns the world; the client builds the same columns locally. +//! A `WORLD_JOIN` carries the seed, so the client generates each column the +//! way the server generated it and then applies the diffs the server sends +//! on top (`BLOCK_CHANGE`), which is why this is a generator rather than a +//! remote world: `Streaming::remote` stays false and only the changed blocks +//! cross the wire. +//! +//! One column is `16 x 256 x 16` bytes of RSX block ids (see +//! [`crate::rsx::packets`]) and a `Chunk` is the same column in Horizon's +//! shape: the ids become block state ids and the y range grows from +//! `0..256` to `-64..320`. The mapping is 1:1 on y — the server's spawn, +//! movement and block change coordinates all stay valid as they are, and +//! the extra sky above y=255 is simply air. +//! +//! The RSX block ids have no vanilla counterpart for the last four +//! (barrels and a crate): they are mapped to the nearest breakable block +//! until the real blocks exist in the registry, and every one of them is +//! written down here rather than guessed at the call site. + +use crate::chunk::Chunk; +use crate::streaming::{ChunkGenerator, Proto}; +use horizon_world::registry::BlockRegistry; +use std::collections::HashMap; +use std::sync::{Arc, Mutex}; + +/// What one RSX block id becomes, as a block state id in this registry. +/// +/// Resolved once, when the world is entered, and then read on every column: +/// the names are the protocol's own (`Blocks.name`), and the two ids are +/// never allowed to drift apart because the table is filled by looking the +/// names up rather than by hardcoding state ids. +pub struct RsxBlockTable { + states: [u32; RSX_BLOCK_COUNT], +} + +/// How many block ids the RSX wire format defines (0 = air .. 13 = crate). +pub const RSX_BLOCK_COUNT: usize = 14; + +impl RsxBlockTable { + /// The table for a registry, resolved once. Fails loudly rather than + /// silently mapping a block to air: a missing name means the client + /// would build a different world than the server. + pub fn new(registry: &BlockRegistry) -> crate::Result { + let id = |name: &str| -> crate::Result { + Ok(registry + .default_state(name) + .ok_or_else(|| format!("missing {name}"))? + .0) + }; + Ok(Self { + states: [ + id("minecraft:air")?, + id("minecraft:stone")?, + id("minecraft:dirt")?, + id("minecraft:grass_block")?, + id("minecraft:sand")?, + id("minecraft:water")?, + id("minecraft:oak_log")?, + id("minecraft:oak_leaves")?, + id("minecraft:black_concrete")?, + id("minecraft:snow_block")?, + // the barrels and the crate are what the server's economy is + // built from and vanilla has nothing for them: three blocks + // that look right and break right stand in until the real + // ones exist + id("minecraft:blue_shulker_box")?, + id("minecraft:red_shulker_box")?, + id("minecraft:orange_shulker_box")?, + id("minecraft:hay_block")?, + ], + }) + } + + /// The state an RSX block id stands for. Ids the wire format does not + /// define are air rather than a panic: a peer can send any byte. + pub fn state(&self, id: u8) -> u32 { + self.states + .get(usize::from(id)) + .copied() + .unwrap_or(self.states[0]) + } +} + +/// What the game holds of the server world, for the generator and for the +/// packets that change it. +/// +/// The columns are shared because the two meet on different threads: the +/// streamer's workers read them to build chunks, and the session thread +/// writes them as `BLOCK_CHANGE` arrives. +pub struct RsxWorldShared { + pub seed: i64, + columns: Mutex>>>, +} + +/// The RSX world: a seed and every column the server has made so far. +/// +/// `Arc`'d because the streamer keeps a reference for the life of the world +/// while the session thread keeps its own, and both need to reach the same +/// columns. +pub struct RsxWorld(pub Arc); + +impl RsxWorld { + pub fn new(seed: i64) -> Self { + Self(Arc::new(RsxWorldShared { + seed, + columns: Mutex::new(HashMap::new()), + })) + } + + /// Puts a whole column in, as `CHUNK_DATA` carries it. The data is + /// copied once and shared from then on: every chunk built from it and + /// every later edit sees the same bytes until the next write. + pub fn insert_column(&self, chunk_x: i32, chunk_z: i32, blocks: Vec) { + debug_assert_eq!( + blocks.len(), + crate::rsx::packets::VOLUME, + "an RSX column is 16x256x16 bytes" + ); + self.0 + .columns + .lock() + .expect("rsx columns") + .insert((chunk_x, chunk_z), Arc::new(blocks)); + } + + /// One block changed, in world coordinates. The y range of the wire is + /// the y range of the world here (see the module docs), so nothing is + /// shifted. A change outside every known column is ignored: it belongs + /// to a column the server has not sent yet, and the column arrives with + /// the change already in it. + pub fn set_block(&self, x: i32, y: i32, z: i32, block: u8) { + if !(0..256).contains(&y) { + return; + } + let key = (x >> 4, z >> 4); + let mut columns = self.0.columns.lock().expect("rsx columns"); + let Some(column) = columns.get_mut(&key) else { + return; + }; + let index = crate::rsx::packets::chunk_index( + (x & 15) as usize, + y as usize, + (z & 15) as usize, + ); + // one column is shared between the workers that read it and this + // thread; the first edit of a column copies it, the rest write in + // place + let column = Arc::make_mut(column); + column[index] = block; + } +} + +/// The streaming side of [`RsxWorld`]: a column is whatever the server has +/// said it is, and nothing is generated out of thin air. +/// +/// A column the server has not sent yet comes out as air. That is the +/// honest answer — the client does not know the terrain before the server +/// sends the column — and the streamer fills it in later when the column +/// arrives through [`RsxWorld::insert_column`]. +pub struct RsxTerrain { + shared: Arc, + table: RsxBlockTable, +} + +impl RsxTerrain { + pub fn new(shared: Arc, table: RsxBlockTable) -> Self { + Self { shared, table } + } + + fn column(&self, cx: i32, cz: i32) -> Option>> { + self.shared + .columns + .lock() + .expect("rsx columns") + .get(&(cx, cz)) + .cloned() + } +} + +impl ChunkGenerator for RsxTerrain { + type Worker = (); + fn worker(&self) {} + + /// No far view of this world yet: the LOD rings of the reference client + /// are their own packet stream, and until that is ported the horizon is + /// simply empty rather than wrong. + fn lod_surface(&self, _: &mut (), _: i32, _: i32) -> Option { + None + } + + fn proto(&self, _: &mut (), cx: i32, cz: i32) -> Proto { + let mut chunk = Chunk::empty(cx, cz); + // One biome for the whole column: RSX sends no biomes, and the + // server's own generator is a heightmap, not a biome map. The first + // biome of the registry stands for the world until biomes exist — + // it colours the grass and nothing in this protocol depends on it. + for s in &mut chunk.sections { + std::sync::Arc::make_mut(s).biomes = horizon_core::paletted::PalettedContainer::new( + crate::chunk::BIOME_STRATEGY, + 0, + ); + } + if let Some(blocks) = self.column(cx, cz) { + for z in 0..16i32 { + for x in 0..16i32 { + for y in 0..256 { + let id = blocks[crate::rsx::packets::chunk_index( + x as usize, + y as usize, + z as usize, + )]; + if id == 0 { + continue; + } + chunk.set(x, y as i32, z, self.table.state(id)); + } + } + } + } + for s in &mut chunk.sections { + std::sync::Arc::make_mut(s).compact(); + } + Box::new(chunk) + } + + fn finish(&self, proto: Proto) -> Chunk { + let mut chunk = *proto + .downcast::() + .expect("rsx terrain proto is a chunk"); + // The column came from the server, so it is not the client's to + // save: `fresh` stays false and nothing is written to disk behind + // the server's back. + chunk.fresh = false; + chunk + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::rsx::packets::chunk_index; + use horizon_world::registry::BlockStateId; + + /// A registry of exactly the blocks the table names, so the test shows + /// the mapping rather than the assets of whichever pack is installed. + fn test_registry() -> BlockRegistry { + let state = |name: &str| horizon_world::chunk::BlockState { + name: name.to_owned(), + properties: Default::default(), + }; + let names = [ + "minecraft:air", + "minecraft:stone", + "minecraft:dirt", + "minecraft:grass_block", + "minecraft:sand", + "minecraft:water", + "minecraft:oak_log", + "minecraft:oak_leaves", + "minecraft:black_concrete", + "minecraft:snow_block", + "minecraft:blue_shulker_box", + "minecraft:red_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:hay_block", + ]; + let states: Vec<_> = names.iter().map(|n| state(n)).collect(); + let defaults: std::collections::BTreeMap = names + .iter() + .enumerate() + .map(|(i, n)| (n.to_string(), i as i64)) + .collect(); + BlockRegistry::from_states(states, defaults).expect("test registry") + } + + /// A column the server might have sent: stone below, a grass surface at + /// y=63, a barrel to find later. + fn test_column() -> Vec { + let mut raw = vec![0u8; crate::rsx::packets::VOLUME]; + for z in 0..16 { + for x in 0..16 { + for y in 0..64 { + raw[chunk_index(x, y, z)] = if y == 63 { 3 } else { 1 }; + } + } + } + raw[chunk_index(5, 64, 5)] = 10; + raw + } + + fn terrain() -> (RsxWorld, RsxTerrain) { + let world = RsxWorld::new(42); + let terrain = RsxTerrain::new( + world.0.clone(), + RsxBlockTable::new(&test_registry()).expect("table"), + ); + (world, terrain) + } + + #[test] + fn every_wire_id_resolves_to_its_own_block() { + let table = RsxBlockTable::new(&test_registry()).expect("table"); + let registry = test_registry(); + let name = |id: u8| registry.state(BlockStateId(table.state(id))).unwrap().name.clone(); + assert_eq!(name(0), "minecraft:air"); + assert_eq!(name(1), "minecraft:stone"); + assert_eq!(name(3), "minecraft:grass_block"); + assert_eq!(name(5), "minecraft:water"); + assert_eq!(name(10), "minecraft:blue_shulker_box"); + assert_eq!(name(13), "minecraft:hay_block"); + // an id past the end of the wire format is air, not a panic + assert_eq!(table.state(14), table.state(0)); + assert_eq!(table.state(200), table.state(0)); + } + + #[test] + fn a_column_from_the_server_becomes_a_chunk() { + let (world, terrain) = terrain(); + world.insert_column(-3, 9, test_column()); + + let proto = terrain.proto(&mut (), -3, 9); + let chunk = *proto.downcast::().expect("proto"); + assert_eq!((chunk.x, chunk.z), (-3, 9)); + assert!(!chunk.fresh, "a server column is not the client's to save"); + + let at = |x: i32, y: i32, z: i32| chunk.get(x, y, z); + assert_eq!(at(0, 0, 0), terrain.table.state(1), "stone below"); + assert_eq!(at(0, 63, 0), terrain.table.state(3), "grass on top"); + assert_eq!(at(5, 64, 5), terrain.table.state(10), "the barrel"); + assert_eq!(at(0, 100, 0), 0, "air above"); + assert_eq!(at(0, 300, 0), 0, "air above the RSX world too"); + } + + #[test] + fn a_column_the_server_has_not_sent_yet_is_air() { + let (_world, terrain) = terrain(); + let proto = terrain.proto(&mut (), 0, 0); + let chunk = *proto.downcast::().expect("proto"); + assert_eq!(chunk.get(0, 63, 0), 0, "nothing is guessed"); + assert_eq!(chunk.get(0, -64, 0), 0, "the floor is not invented"); + } + + #[test] + fn a_block_change_edits_the_column_the_next_chunk_is_built_from() { + let (world, terrain) = terrain(); + world.insert_column(0, 0, test_column()); + + // the server says the grass at 4/63/4 is gone and there is a crate + world.set_block(4, 63, 4, 0); + world.set_block(4, 64, 4, 13); + + let proto = terrain.proto(&mut (), 0, 0); + let chunk = *proto.downcast::().expect("proto"); + assert_eq!(chunk.get(4, 63, 4), 0, "the grass is gone"); + assert_eq!(chunk.get(4, 64, 4), terrain.table.state(13), "the crate"); + assert_eq!(chunk.get(5, 63, 5), terrain.table.state(3), "the rest is untouched"); + } + + #[test] + fn a_change_outside_the_world_or_a_missing_column_is_ignored() { + let (world, terrain) = terrain(); + world.insert_column(0, 0, test_column()); + world.set_block(100, 300, 100, 7); + world.set_block(1, 1, 1, 7); + world.set_block(500, 5, 500, 7); + + let proto = terrain.proto(&mut (), 0, 0); + let chunk = *proto.downcast::().expect("proto"); + assert_eq!(chunk.get(1, 1, 1), terrain.table.state(7), "a real edit"); + assert_eq!(chunk.get(1, 200, 1), 0, "nothing was written above the world"); + } + + #[test] + fn finish_keeps_the_column_as_the_server_sent_it() { + let (world, terrain) = terrain(); + world.insert_column(0, 0, test_column()); + let proto = terrain.proto(&mut (), 0, 0); + let chunk = terrain.finish(proto); + assert!(!chunk.fresh); + assert_eq!(chunk.get(0, 63, 0), terrain.table.state(3)); + } +} diff --git a/crates/horizon-client/src/rustui/icons.rs b/crates/horizon-client/src/rustui/icons.rs new file mode 100644 index 0000000..bc0d04d --- /dev/null +++ b/crates/horizon-client/src/rustui/icons.rs @@ -0,0 +1,86 @@ +//! The menu's outline icons: `@thesvg/ui` (MIT), rendered white at 64 px and +//! packed into the atlas as `horizon/rustui-icons/` by `HudAtlas::pack`. +//! Icons are tinted by the draw colour, so one white sheet serves every state. +use crate::ui_theme::Ui; + +/// Every icon in the sheet: its name and its PNG. +pub static ICONS: &[(&str, &[u8])] = &[ + ("house", include_bytes!("../../assets/rustui/icons/house.png")), + ("play", include_bytes!("../../assets/rustui/icons/play.png")), + ("shopping-cart", include_bytes!("../../assets/rustui/icons/shopping-cart.png")), + ("package", include_bytes!("../../assets/rustui/icons/package.png")), + ("settings", include_bytes!("../../assets/rustui/icons/settings.png")), + ("log-out", include_bytes!("../../assets/rustui/icons/log-out.png")), + ("search", include_bytes!("../../assets/rustui/icons/search.png")), + ("users", include_bytes!("../../assets/rustui/icons/users.png")), + ("pin", include_bytes!("../../assets/rustui/icons/pin.png")), + ("refresh-cw", include_bytes!("../../assets/rustui/icons/refresh-cw.png")), + ("chevron-down", include_bytes!("../../assets/rustui/icons/chevron-down.png")), + ("chevron-right", include_bytes!("../../assets/rustui/icons/chevron-right.png")), + ("arrow-left", include_bytes!("../../assets/rustui/icons/arrow-left.png")), + ("arrow-right", include_bytes!("../../assets/rustui/icons/arrow-right.png")), + ("list", include_bytes!("../../assets/rustui/icons/list.png")), + ("shield", include_bytes!("../../assets/rustui/icons/shield.png")), + ("monitor", include_bytes!("../../assets/rustui/icons/monitor.png")), + ("keyboard", include_bytes!("../../assets/rustui/icons/keyboard.png")), + ("mouse-pointer-click", include_bytes!("../../assets/rustui/icons/mouse-pointer-click.png")), + ("globe", include_bytes!("../../assets/rustui/icons/globe.png")), + ("eye", include_bytes!("../../assets/rustui/icons/eye.png")), + ("sliders-horizontal", include_bytes!("../../assets/rustui/icons/sliders-horizontal.png")), + ("headphones", include_bytes!("../../assets/rustui/icons/headphones.png")), + ("sparkles", include_bytes!("../../assets/rustui/icons/sparkles.png")), + ("wrench", include_bytes!("../../assets/rustui/icons/wrench.png")), + ("hand", include_bytes!("../../assets/rustui/icons/hand.png")), + ("chat-thread", include_bytes!("../../assets/rustui/icons/chat-thread.png")), + ("type", include_bytes!("../../assets/rustui/icons/type.png")), + ("layers", include_bytes!("../../assets/rustui/icons/layers.png")), + ("boxes", include_bytes!("../../assets/rustui/icons/boxes.png")), + ("wand", include_bytes!("../../assets/rustui/icons/wand.png")), + ("settings-2", include_bytes!("../../assets/rustui/icons/settings-2.png")), + ("bot", include_bytes!("../../assets/rustui/icons/bot.png")), + ("award", include_bytes!("../../assets/rustui/icons/award.png")), + ("newspaper", include_bytes!("../../assets/rustui/icons/newspaper.png")), + ("user", include_bytes!("../../assets/rustui/icons/user.png")), + ("x", include_bytes!("../../assets/rustui/icons/x.png")), + ("check", include_bytes!("../../assets/rustui/icons/check.png")), + ("plus", include_bytes!("../../assets/rustui/icons/plus.png")), + ("bell", include_bytes!("../../assets/rustui/icons/bell.png")), + ("message-square", include_bytes!("../../assets/rustui/icons/message-square.png")), + ("external-link", include_bytes!("../../assets/rustui/icons/external-link.png")), + ("circle-alert", include_bytes!("../../assets/rustui/icons/circle-alert.png")), + ("info", include_bytes!("../../assets/rustui/icons/info.png")), + ("star", include_bytes!("../../assets/rustui/icons/star.png")), + ("activity", include_bytes!("../../assets/rustui/icons/activity.png")), + ("server", include_bytes!("../../assets/rustui/icons/server.png")), + ("trash", include_bytes!("../../assets/rustui/icons/trash.png")), +]; + +/// The atlas sprite of `name`. +pub fn sprite(name: &str) -> String { + format!("horizon/rustui-icons/{name}") +} + +/// Draws `name` in the `rect` (dp), centred, tinted by `color`. +pub fn draw(ui: &mut Ui, name: &str, [x, y, w, h]: [f32; 4], color: u32) { + let Some(rect) = ui.atlas.sprites.get(&sprite(name)).copied() else { + return; + }; + let size = w.min(h); + let (dx, dy) = ((w - size) / 2.0, (h - size) / 2.0); + let (gx, gy, gs) = (ui.to_gui(x + dx), ui.to_gui(y + dy), ui.to_gui(size)); + ui.batch.quad( + [ + [gx, gy], + [gx + gs, gy], + [gx + gs, gy + gs], + [gx, gy + gs], + ], + [ + [rect.u0, rect.v0], + [rect.u1, rect.v0], + [rect.u1, rect.v1], + [rect.u0, rect.v1], + ], + color, + ); +} diff --git a/crates/horizon-client/src/rustui/mod.rs b/crates/horizon-client/src/rustui/mod.rs new file mode 100644 index 0000000..4775c82 --- /dev/null +++ b/crates/horizon-client/src/rustui/mod.rs @@ -0,0 +1,1778 @@ +//! Horizon's main menu in the Rust style: the scene itself behind a grey +//! scrim, a bar of tab plates on top, quick connect and the devblog on the +//! right, a news carousel and the chat strip along the bottom. No wordmark: +//! the tabs are the first thing in the bar. +//! +//! One pure [`RustMenu::layout`] in dp returns the frame's [`Node`]s; the +//! draw paints them and [`RustMenu::click`] hit-tests them. The layout is +//! cached until the frame, the tab or the server list changes, so a frame +//! does no formatting or measuring — only painting. +pub mod icons; +pub mod settings; +pub mod theme; + +use crate::hud::{HudAtlas, HudBatch}; +use crate::ui_theme::{Face, Ui}; +use std::cell::{Cell, RefCell}; +use std::collections::{HashMap, HashSet}; +use std::path::Path; +use std::sync::atomic::{AtomicU64, Ordering}; +use std::sync::{Arc, Mutex}; + +/// What a locked control says in its tooltip. +pub const TIP: &str = "В разработке"; + +/// The top bar's height. +const TOP: f32 = 54.0; +/// The page margin. +const PAD: f32 = 24.0; +const TAB_H: f32 = 34.0; +const TAB_W: f32 = 100.0; +const TAB_GAP: f32 = 2.0; +/// Quick connect. +const QUICK_W: f32 = 320.0; +const QUICK_HEAD: f32 = 30.0; +const QUICK_ROW: f32 = 56.0; +/// The devblog block. +const BLOG_W: f32 = 430.0; +const BLOG_H: f32 = 186.0; +/// The news carousel. +const NEWS_W: f32 = 280.0; +const NEWS_H: f32 = 158.0; +/// The chat strip and the account plate. +const STRIP_H: f32 = 34.0; +const ACCOUNT_W: f32 = 34.0; +/// Between the bottom strip and the cards above it. +const GAP: f32 = 14.0; +/// The Play tab's category strip. +const FILTER_H: f32 = 40.0; +/// How long the content slides when the tab changes. +const SLIDE: f32 = 0.14; +/// How long a news slide stays before the carousel advances. +const NEWS_DWELL: f32 = 8.0; + +/// The tabs that are not built yet: grey plates with a tip. +const LOCKED: [(&str, &str); 2] = [("МАГАЗИН", "shopping-cart"), ("ИНВЕНТАРЬ", "package")]; +/// The carousel's placeholder slides. +const NEWS: [(&str, &str); 3] = [ + ( + "НОВОЕ МЕНЮ", + "Главное меню и настройки переписаны в стиле Rust.", + ), + ( + "МАГАЗИН", + "Скоро: магазин, инвентарь и награды.", + ), + ( + "СЕРВЕРЫ", + "Быстрое подключение к сохранённым серверам.", + ), +]; + +/// The top bar's tabs. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum Tab { + Home, + /// The server or world the menu is open over (the Rust pause menu). + Current, + Play, +} +impl Tab { + fn index(self) -> u8 { + match self { + Tab::Home | Tab::Current => 0, + Tab::Play => 1, + } + } +} + +/// A press a node reports. `Title` maps these onto its actions. +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum Hit { + /// Switch the menu's tab in place. + Tab(Tab), + Quit, + Options, + /// A saved world, the singleplayer list. + LocalWorlds, + /// Connect to this address. + Connect(String), + /// The news carousel. + NewsPrev, + NewsNext, + /// The browser's filters and actions. + Toggle(&'static str), + ResetFilters, + Refresh, + /// Open the vanilla server list (adding a server). + Servers, + /// A server's details card. + OpenServer(usize), + CloseModal, + /// The pause menu's actions. + Resume, + Stats, + Advancements, + WorldOptions, +} + +/// What a press asks the shell to do; tabs and the carousel stay inside the +/// menu and report [`Outcome::None`]. +#[derive(Clone, Debug, Default, PartialEq, Eq)] +pub enum Outcome { + #[default] + None, + Quit, + Options, + LocalWorlds, + Connect(String), + /// The vanilla server list, for adding or editing servers. + Servers, + /// The pause menu's actions. + Resume, + Stats, + Advancements, + WorldOptions, +} + +/// How a plate is painted. +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Variant { + /// A plain plate, no border: quick-connect rows. + Solid, + /// The amber primary action. + Primary, + /// Nothing until hovered: the bar's actions, the devblog's second button. + Ghost, + /// A badge or a locked tab. + Chip, + /// A top-bar tab, lit while active. + Tab { active: bool }, + /// A square icon button. + Icon, + /// A checkbox row: a box and its label. + Check { on: bool }, + /// Hit-testing only (a card is drawn from its own parts). + Invisible, +} + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Align { + Left, + Center, + Right, +} + +/// One laid-out piece of the menu. +#[derive(Clone, Debug)] +pub enum Node { + /// A card plate with a hairline. + Panel { rect: [f32; 4] }, + /// A sunk plate: the chat strip, the account. + Well { rect: [f32; 4] }, + /// A vertical gradient (the news picture, the devblog backing). + Shade { rect: [f32; 4], top: u32, bottom: u32 }, + Line { rect: [f32; 4], color: u32 }, + Text { + rect: [f32; 4], + face: Face, + size: f32, + text: String, + color: u32, + align: Align, + }, + Icon { + rect: [f32; 4], + name: &'static str, + color: u32, + }, + Button { + rect: [f32; 4], + label: String, + icon: Option<&'static str>, + face: Face, + size: f32, + variant: Variant, + /// The press this plate fires; `None` for badges and locked controls. + id: Option, + enabled: bool, + /// Why the press is refused. + tip: Option<&'static str>, + }, +} +impl Node { + pub fn rect(&self) -> [f32; 4] { + match self { + Self::Panel { rect } | Self::Well { rect } => *rect, + Self::Shade { rect, .. } => *rect, + Self::Line { rect, .. } => *rect, + Self::Text { rect, .. } | Self::Icon { rect, .. } | Self::Button { rect, .. } => *rect, + } + } +} + +/// One menu frame: the page in dp, the density and GUI scale that produced it, +/// and the cursor in GUI pixels. +pub struct Frame { + pub w: f32, + pub h: f32, + density: f32, + scale: f32, + cursor: (f32, f32), +} +impl Frame { + pub fn new((w, h): (f32, f32), scale: f32, cursor: (f32, f32)) -> Self { + let (pw, ph) = (w * scale, h * scale); + let density = crate::ui_theme::density(pw, ph); + Self { + w: pw / density, + h: ph / density, + density, + scale, + cursor, + } + } + /// The cursor in dp. + pub fn at(&self) -> (f32, f32) { + ( + self.cursor.0 * self.scale / self.density, + self.cursor.1 * self.scale / self.density, + ) + } + /// dp in GUI pixels. + pub fn to_gui(&self, v: f32) -> f32 { + v * self.density / self.scale + } +} + +/// What only the shell knows: the title's uptime (the carousel and the slide). +#[derive(Clone, Copy)] +pub struct Meta { + pub elapsed: f32, +} + +/// The session the menu is open over (the Rust pause menu, later). +#[derive(Clone, Debug, PartialEq)] +pub struct CurrentServer { + pub name: String, + pub address: String, + pub singleplayer: bool, +} + +/// A saved server's status, filled in by `net::ping` threads. +#[derive(Clone, Debug, Default)] +struct ServerPing { + /// 0: still pinging, 1: answered, 2: failed. + state: u8, + online: i64, + max: i64, + ms: u128, + version: String, +} + +/// The client's main menu. +pub struct RustMenu { + /// The selected tab; a tab press switches it in place. + pub tab: Tab, + /// The saved servers, newest first (`saves/servers.dat`). + pub saved: Vec<(String, String)>, + /// The world or server the menu is open over; `None` at the title. + pub current: Option, + /// The last layout; `None` until the first draw or after a change. + cache: RefCell>, + /// When the open tab was entered, and which one it was. + tab_at: Cell, + tab_was: Cell, + /// The carousel's slide and when it changed. + news: Cell, + news_at: Cell, + /// The slide the timer was started for. + news_seen: Cell, + /// The first frame's time, so a slide starts at the menu's own zero. + first: Cell>, + /// The Play browser: pings by address, their revision (the layout cache + /// key), whether they were started, the open details card and the filters. + pings: Arc>>, + pings_rev: Arc, + pinged: Cell, + selected: Cell>, + filters: RefCell>, + filters_rev: Cell, +} +struct Cache { + key: Key, + nodes: Vec, +} +#[derive(Clone, PartialEq)] +struct Key { + w: u32, + h: u32, + tab: Tab, + news: usize, + last: String, + pings: u64, + filters: u64, + selected: Option, +} + +impl RustMenu { + /// Reads the multiplayer list for quick connect; an empty `saves` (the + /// engine's tests, a headless shell) has none. + pub fn new(saves: &Path) -> Self { + let mut saved = Vec::new(); + if !saves.as_os_str().is_empty() { + for entry in horizon_protocol::servers::load(&crate::multiplayer::servers_file(saves)) { + saved.push((entry.name, entry.ip)); + } + } + Self { + tab: Tab::Home, + saved, + cache: RefCell::default(), + tab_at: Cell::new(0.0), + tab_was: Cell::new(Tab::Home), + news: Cell::new(0), + news_at: Cell::new(0.0), + news_seen: Cell::new(0), + first: Cell::new(None), + current: None, + pings: Arc::default(), + pings_rev: Arc::new(AtomicU64::new(0)), + pinged: Cell::new(false), + selected: Cell::new(None), + filters: RefCell::default(), + filters_rev: Cell::new(0), + } + } + pub fn with_saved(mut self, saved: Vec<(String, String)>) -> Self { + self.saved = saved; + self.forget_pings(); + self + } + /// Re-reads the saved servers: the multiplayer screens edit the list while + /// they are open, and the menu shows the result when the player comes back. + pub fn reload(&mut self, saves: &Path) { + self.saved = Self::new(saves).saved; + self.forget_pings(); + } + /// Home's quick-connect rows: the last-played address first, then the + /// saved servers, deduplicated by address and capped at three. + pub fn rows(&self, last: &str) -> Vec<(String, String)> { + let mut rows: Vec<(String, String)> = Vec::new(); + let mut push = |name: &str, ip: &str| { + if !ip.is_empty() && rows.len() < 3 && !rows.iter().any(|(_, seen)| seen == ip) { + rows.push((name.to_owned(), ip.to_owned())); + } + }; + if !last.is_empty() { + let name = self + .saved + .iter() + .find(|(_, ip)| ip == last) + .map_or(last, |(name, _)| name.as_str()); + push(name, last); + } + for (name, ip) in &self.saved { + push(name, ip); + } + rows + } + + /// Forgets the pings (the list changed, or the browser asked again). + fn forget_pings(&self) { + if let Ok(mut pings) = self.pings.lock() { + pings.clear(); + } + self.pinged.set(false); + self.cache.borrow_mut().take(); + } + /// Pings every saved server once, in the background. + fn start_pings(&self) { + if self.pinged.get() { + return; + } + self.pinged.set(true); + // Tests never touch the network. + #[cfg(not(test))] + for (_, ip) in &self.saved { + let ip = ip.clone(); + let pings = Arc::clone(&self.pings); + let rev = Arc::clone(&self.pings_rev); + std::thread::spawn(move || { + let info = match crate::net::ping(&ip, std::time::Duration::from_secs(5)) { + Ok((status, ms)) => ServerPing { + state: 1, + online: status + .pointer("/players/online") + .and_then(|v| v.as_i64()) + .unwrap_or(0), + max: status + .pointer("/players/max") + .and_then(|v| v.as_i64()) + .unwrap_or(0), + ms, + version: status + .pointer("/version/name") + .and_then(|v| v.as_str()) + .unwrap_or_default() + .to_owned(), + }, + Err(_) => ServerPing { + state: 2, + ..Default::default() + }, + }; + if let Ok(mut map) = pings.lock() { + map.insert(ip, info); + } + rev.fetch_add(1, Ordering::Relaxed); + }); + } + } + fn ping(&self, ip: &str) -> ServerPing { + self.pings + .lock() + .ok() + .and_then(|map| map.get(ip).cloned()) + .unwrap_or_default() + } + /// Whether a toggle is on. + fn filter(&self, key: &str) -> bool { + self.filters.borrow().contains(key) + } + + /// The frame's nodes in dp, laid out fresh (tests, hit-testing). + pub fn layout(&self, frame: &Frame, last: &str) -> Vec { + self.build(frame, last, self.news.get()) + } + /// Cached layout key: pings, filters and the open card redraw the rows. + fn nodes(&self, frame: &Frame, last: &str, news: usize) -> std::cell::Ref<'_, Vec> { + let key = Key { + w: frame.w.round() as u32, + h: frame.h.round() as u32, + tab: self.tab, + news, + last: last.to_owned(), + pings: self.pings_rev.load(Ordering::Relaxed), + filters: self.filters_rev.get(), + selected: self.selected.get(), + }; + let stale = { + let cache = self.cache.borrow(); + cache.as_ref().is_none_or(|cache| cache.key != key) + }; + if stale { + let nodes = self.build(frame, last, news); + *self.cache.borrow_mut() = Some(Cache { key, nodes }); + } + std::cell::Ref::map(self.cache.borrow(), |cache| { + &cache.as_ref().expect("built above").nodes + }) + } + + fn build(&self, frame: &Frame, last: &str, news: usize) -> Vec { + let (w, h) = (frame.w, frame.h); + let mut nodes = Vec::new(); + self.bar(&mut nodes, w); + match self.tab { + Tab::Home => self.home(&mut nodes, w, h, last, news), + Tab::Current => current_tab(self, &mut nodes, w, h), + Tab::Play => play(self, &mut nodes, w, h), + } + nodes + } + + /// Tabs centred, actions right; there is no wordmark. + fn bar(&self, nodes: &mut Vec, w: f32) { + let mut tabs: Vec<(Tab, &str, &str)> = Vec::new(); + match &self.current { + Some(_) => tabs.push((Tab::Current, "ТЕКУЩИЙ СЕРВЕР", "boxes")), + None => tabs.push((Tab::Home, "ГЛАВНАЯ", "house")), + } + tabs.push((Tab::Play, "ИГРАТЬ", "play")); + let count = tabs.len() + LOCKED.len(); + let total = count as f32 * TAB_W + (count - 1) as f32 * TAB_GAP; + let y = (TOP - TAB_H) / 2.0; + let mut x = (w - total) / 2.0; + for (tab, label, icon) in tabs { + nodes.push(Node::Button { + rect: [x, y, TAB_W, TAB_H], + label: label.to_owned(), + icon: Some(icon), + face: Face::MenuStrong, + size: 11.0, + variant: Variant::Tab { + active: self.tab == tab, + }, + id: Some(Hit::Tab(tab)), + enabled: true, + tip: None, + }); + x += TAB_W + TAB_GAP; + } + for (label, icon) in LOCKED { + nodes.push(Node::Button { + rect: [x, y, TAB_W, TAB_H], + label: label.to_owned(), + icon: Some(icon), + face: Face::MenuStrong, + size: 11.0, + variant: Variant::Chip, + id: None, + enabled: false, + tip: Some(TIP), + }); + x += TAB_W + TAB_GAP; + } + let actions = [ + ("НАСТРОЙКИ", "settings", 118.0, Hit::Options), + ("ВЫЙТИ", "log-out", 92.0, Hit::Quit), + ]; + let aw: f32 = + actions.iter().map(|(_, _, w, _)| *w).sum::() + TAB_GAP * (actions.len() as f32 - 1.0); + let mut x = w - PAD - aw; + for (label, icon, bw, hit) in actions { + nodes.push(Node::Button { + rect: [x, y, bw, TAB_H], + label: label.to_owned(), + icon: Some(icon), + face: Face::MenuStrong, + size: 11.0, + variant: Variant::Ghost, + id: Some(hit), + enabled: true, + tip: None, + }); + x += bw + TAB_GAP; + } + } + + /// Quick connect top right, the devblog bottom right, the news carousel + /// bottom left, the chat strip and the account along the bottom. + fn home(&self, nodes: &mut Vec, w: f32, h: f32, last: &str, news: usize) { + let strip_y = h - PAD - STRIP_H; + let cards_bottom = strip_y - GAP; + + // Quick connect. + let rows = self.rows(last); + let x = w - PAD - QUICK_W; + let y = TOP + GAP; + let body = if rows.is_empty() { + 58.0 + } else { + rows.len() as f32 * (QUICK_ROW + 2.0) - 2.0 + 8.0 + }; + nodes.push(Node::Panel { + rect: [x, y, QUICK_W, QUICK_HEAD + body], + }); + nodes.push(Node::Icon { + rect: [x + 12.0, y + 7.0, 16.0, 16.0], + name: "users", + color: theme::MUTED, + }); + nodes.push(Node::Text { + rect: [x + 34.0, y + 6.0, QUICK_W - 46.0, 18.0], + face: Face::MenuStrong, + size: 9.5, + text: "БЫСТРОЕ ПОДКЛЮЧЕНИЕ".to_owned(), + color: theme::MUTED, + align: Align::Left, + }); + let ry = y + QUICK_HEAD; + if rows.is_empty() { + nodes.push(Node::Text { + rect: [x + 12.0, ry + 4.0, QUICK_W - 24.0, 18.0], + face: Face::Menu, + size: 11.0, + text: "Серверы не найдены".to_owned(), + color: theme::MUTED, + align: Align::Left, + }); + nodes.push(Node::Button { + rect: [x + 12.0, ry + 24.0, QUICK_W - 24.0, 30.0], + label: "ОДИНОЧНАЯ ИГРА".to_owned(), + icon: Some("play"), + face: Face::MenuStrong, + size: 10.5, + variant: Variant::Primary, + id: Some(Hit::LocalWorlds), + enabled: true, + tip: None, + }); + } else { + for (i, (name, ip)) in rows.iter().enumerate() { + let top = ry + i as f32 * (QUICK_ROW + 2.0); + // The card's parts, then an invisible button over them. + nodes.push(Node::Icon { + rect: [x + QUICK_W - 26.0, top + 8.0, 14.0, 14.0], + name: "pin", + color: theme::MUTED, + }); + nodes.push(Node::Text { + rect: [x + 12.0, top + 7.0, QUICK_W - 60.0, 16.0], + face: Face::MenuStrong, + size: 12.0, + text: fit(name, 26), + color: theme::TEXT, + align: Align::Left, + }); + nodes.push(Node::Text { + rect: [x + 12.0, top + 24.0, QUICK_W - 100.0, 12.0], + face: Face::Menu, + size: 9.0, + text: "PvE · VANILLA · RU".to_owned(), + color: theme::MUTED, + align: Align::Left, + }); + nodes.push(Node::Icon { + rect: [x + QUICK_W - 96.0, top + 24.0, 11.0, 11.0], + name: "users", + color: theme::MUTED, + }); + nodes.push(Node::Text { + rect: [x + QUICK_W - 82.0, top + 22.0, 58.0, 14.0], + face: Face::Menu, + size: 9.5, + text: "0 / 64".to_owned(), + color: theme::MUTED, + align: Align::Right, + }); + nodes.push(Node::Line { + rect: [x + 12.0, top + QUICK_ROW - 0.5, QUICK_W - 24.0, 1.0], + color: theme::BORDER_SOFT, + }); + nodes.push(Node::Button { + rect: [x + 6.0, top, QUICK_W - 12.0, QUICK_ROW], + label: String::new(), + icon: None, + face: Face::Menu, + size: 10.0, + variant: Variant::Invisible, + id: Some(Hit::Connect(ip.clone())), + enabled: true, + tip: None, + }); + } + + } + + // The devblog, right-aligned. + let bx = w - PAD - BLOG_W; + let by = cards_bottom - BLOG_H; + nodes.push(Node::Button { + rect: [bx + BLOG_W - 84.0, by, 84.0, 18.0], + label: "DEV BLOG".to_owned(), + icon: None, + face: Face::MenuStrong, + size: 8.5, + variant: Variant::Solid, + id: None, + enabled: true, + tip: None, + }); + nodes.push(Node::Text { + rect: [bx, by + 20.0, BLOG_W, 46.0], + face: Face::Brand, + size: 38.0, + text: "НОВОЕ МЕНЮ".to_owned(), + color: theme::TEXT, + align: Align::Right, + }); + for (i, line) in [ + "Главное меню и настройки переписаны в стиле Rust:", + "плотная сетка, прямые углы, живой фон под размытием.", + ] + .into_iter() + .enumerate() + { + nodes.push(Node::Text { + rect: [bx, by + 66.0 + i as f32 * 15.0, BLOG_W, 16.0], + face: Face::Menu, + size: 11.0, + text: line.to_owned(), + color: theme::SOFT, + align: Align::Right, + }); + } + nodes.push(Node::Button { + rect: [bx + BLOG_W - 298.0, by + BLOG_H - 34.0, 160.0, 34.0], + label: "СПИСОК ИЗМЕНЕНИЙ".to_owned(), + icon: Some("list"), + face: Face::MenuStrong, + size: 10.0, + variant: Variant::Ghost, + id: None, + enabled: false, + tip: Some(TIP), + }); + nodes.push(Node::Button { + rect: [bx + BLOG_W - 130.0, by + BLOG_H - 34.0, 130.0, 34.0], + label: "ПОДРОБНЕЕ".to_owned(), + icon: Some("arrow-right"), + face: Face::MenuStrong, + size: 10.0, + variant: Variant::Primary, + id: None, + enabled: false, + tip: Some(TIP), + }); + + // The news carousel, bottom left. + let nx = PAD; + let ny = cards_bottom - NEWS_H; + let slide = NEWS[news.min(NEWS.len() - 1)]; + nodes.push(Node::Panel { + rect: [nx, ny, NEWS_W, NEWS_H], + }); + // Its picture is procedural until the launcher ships art. + nodes.push(Node::Shade { + rect: [nx + 1.0, ny + 1.0, NEWS_W - 2.0, NEWS_H - 42.0], + top: theme::faded(theme::ACCENT, 0.22), + bottom: theme::faded(theme::RAIL, 0.05), + }); + nodes.push(Node::Icon { + rect: [nx + NEWS_W / 2.0 - 22.0, ny + 30.0, 44.0, 44.0], + name: "newspaper", + color: theme::faded(theme::SOFT, 0.55), + }); + nodes.push(Node::Line { + rect: [nx + 12.0, ny + NEWS_H - 40.0, NEWS_W - 24.0, 1.0], + color: theme::ACCENT, + }); + nodes.push(Node::Text { + rect: [nx + 12.0, ny + NEWS_H - 32.0, NEWS_W - 90.0, 16.0], + face: Face::MenuStrong, + size: 11.0, + text: slide.0.to_owned(), + color: theme::TEXT, + align: Align::Left, + }); + nodes.push(Node::Text { + rect: [nx + NEWS_W - 66.0, ny + NEWS_H - 30.0, 54.0, 14.0], + face: Face::Menu, + size: 9.5, + text: format!("{:02} / {:02}", news + 1, NEWS.len()), + color: theme::MUTED, + align: Align::Right, + }); + nodes.push(Node::Button { + rect: [nx + NEWS_W - 46.0, ny + 8.0, 18.0, 18.0], + label: String::new(), + icon: Some("chevron-right"), + face: Face::Menu, + size: 10.0, + variant: Variant::Icon, + id: Some(Hit::NewsNext), + enabled: true, + tip: None, + }); + nodes.push(Node::Button { + rect: [nx + NEWS_W - 68.0, ny + 8.0, 18.0, 18.0], + label: String::new(), + icon: Some("arrow-left"), + face: Face::Menu, + size: 10.0, + variant: Variant::Icon, + id: Some(Hit::NewsPrev), + enabled: true, + tip: None, + }); + + // The chat strip and the account plate. + let chat_w = w - PAD * 2.0 - ACCOUNT_W - 12.0; + nodes.push(Node::Well { + rect: [PAD, strip_y, chat_w, STRIP_H], + }); + nodes.push(Node::Icon { + rect: [PAD + 10.0, strip_y + 9.0, 16.0, 16.0], + name: "chat-thread", + color: theme::MUTED, + }); + nodes.push(Node::Text { + rect: [PAD + 34.0, strip_y + 8.0, chat_w - 46.0, 18.0], + face: Face::Menu, + size: 10.5, + text: "Нажмите [ENTER], чтобы начать общаться…".to_owned(), + color: theme::MUTED, + align: Align::Left, + }); + nodes.push(Node::Well { + rect: [w - PAD - ACCOUNT_W, strip_y, ACCOUNT_W, STRIP_H], + }); + nodes.push(Node::Icon { + rect: [w - PAD - ACCOUNT_W + 9.0, strip_y + 9.0, 16.0, 16.0], + name: "user", + color: theme::SOFT, + }); + } + + /// Paints the frame: the scrims, the cached nodes, the carousel picture and + /// the tooltip. + pub fn draw( + &self, + atlas: &HudAtlas, + batch: &mut HudBatch, + cursor: (f32, f32), + last: &str, + meta: &Meta, + ) { + let frame = Frame::new((batch.width, batch.height), batch.scale, cursor); + let at = frame.at(); + let now = self.first.get().unwrap_or(meta.elapsed); + if self.first.get().is_none() { + self.first.set(Some(meta.elapsed)); + } + let opened = meta.elapsed - now; + // The carousel advances itself while the menu sits open. + if self.news.get() != self.news_seen.get() { + self.news_at.set(meta.elapsed); + self.news_seen.set(self.news.get()); + } + if meta.elapsed - self.news_at.get() > NEWS_DWELL && opened > NEWS_DWELL { + self.news.set((self.news.get() + 1) % NEWS.len()); + self.news_at.set(meta.elapsed); + } + if self.tab != self.tab_was.get() { + self.tab_at.set(meta.elapsed); + self.tab_was.set(self.tab); + } + let nodes = self.nodes(&frame, last, self.news.get()); + let mut ui = Ui::new(atlas, batch, cursor); + + // The scrims: the scene stays visible, the text stays readable. + let (w, h) = (ui.w, ui.h); + ui.gradient_v(0.0, 0.0, w, 86.0, theme::SCRIM_TOP, theme::faded(theme::SCRIM_TOP, 0.0)); + ui.gradient_v( + 0.0, + h - 150.0, + w, + 150.0, + theme::faded(theme::SCRIM_BOTTOM, 0.0), + theme::SCRIM_BOTTOM, + ); + + // The content slides in when the tab changes. + let t = ((meta.elapsed - self.tab_at.get()) / SLIDE).clamp(0.0, 1.0); + let eased = 1.0 - (1.0 - t).powi(3); + let dir = if self.tab.index() >= self.tab_was.get().index() { + 1.0 + } else { + -1.0 + }; + let dx = (1.0 - eased) * 14.0 * dir; + let mut hovered_tip: Option<([f32; 4], String)> = None; + for node in nodes.iter() { + let in_bar = node.rect()[1] < TOP; + let shift = if in_bar { 0.0 } else { dx }; + + paint(&mut ui, node, at, shift); + } + // The tooltip over everything but the bar. + for node in nodes.iter().rev() { + let Node::Button { + rect, + tip: Some(tip), + .. + } = node + else { + continue; + }; + if at.0 >= rect[0] && at.0 < rect[0] + rect[2] && at.1 >= rect[1] && at.1 < rect[1] + rect[3] + { + hovered_tip = Some((*rect, (*tip).to_owned())); + break; + } + } + if let Some(([x, y, rw, _], tip)) = hovered_tip { + let tw = ui.measure(Face::Menu, 10.5, &tip) + 16.0; + let tx = (x + rw / 2.0 - tw / 2.0).clamp(4.0, (w - tw - 4.0).max(4.0)); + let ty = (y - 28.0).max(4.0); + ui.rounded(tx, ty, tw, 22.0, 0.0, theme::TIP_BG); + ui.border(tx, ty, tw, 22.0, 0.0, theme::BORDER); + ui.text(Face::Menu, 10.5, tx + 8.0, ty + 3.0, theme::TEXT, &tip); + } + ui.finish(); + } + + /// Hit-tests the cached layout: a tab or the carousel changes in place, + /// everything else is reported for the shell to route. + pub fn click(&mut self, frame: &Frame, last: &str) -> (Outcome, bool) { + let at = frame.at(); + let nodes = { + let cache = self.nodes(frame, last, self.news.get()); + cache.clone() + }; + let hit = nodes.iter().rev().find_map(|node| match node { + Node::Button { + rect, + id: Some(id), + enabled: true, + .. + } if inside(*rect, at) => Some(id.clone()), + _ => None, + }); + match hit { + Some(hit) => (self.fire(&hit), true), + None => (Outcome::None, false), + } + } + /// Closes the server card; true when one was open (Escape consumes it). + pub fn close_modal(&mut self) -> bool { + if self.selected.get().is_some() { + self.selected.set(None); + self.cache.borrow_mut().take(); + true + } else { + false + } + } + fn fire(&mut self, hit: &Hit) -> Outcome { + match hit { + Hit::Tab(tab) => { + if self.tab != *tab { + self.tab = *tab; + } + Outcome::None + } + Hit::NewsPrev => { + self.news.set((self.news.get() + NEWS.len() - 1) % NEWS.len()); + Outcome::None + } + Hit::NewsNext => { + self.news.set((self.news.get() + 1) % NEWS.len()); + Outcome::None + } + Hit::Toggle(key) => { + let mut filters = self.filters.borrow_mut(); + if key.starts_with("wipe") { + filters.retain(|seen| !seen.starts_with("wipe")); + } + if key.starts_with("region") { + filters.retain(|seen| !seen.starts_with("region")); + } + if !filters.remove(*key) { + filters.insert(key); + } + drop(filters); + self.filters_rev.set(self.filters_rev.get() + 1); + self.cache.borrow_mut().take(); + Outcome::None + } + Hit::ResetFilters => { + self.filters.borrow_mut().clear(); + self.filters_rev.set(self.filters_rev.get() + 1); + self.cache.borrow_mut().take(); + Outcome::None + } + Hit::Refresh => { + self.forget_pings(); + Outcome::None + } + Hit::Servers => Outcome::Servers, + Hit::Resume => Outcome::Resume, + Hit::Stats => Outcome::Stats, + Hit::Advancements => Outcome::Advancements, + Hit::WorldOptions => Outcome::WorldOptions, + Hit::OpenServer(i) => { + if *i < self.saved.len() { + self.selected.set(Some(*i)); + self.cache.borrow_mut().take(); + } + Outcome::None + } + Hit::CloseModal => { + self.selected.set(None); + self.cache.borrow_mut().take(); + Outcome::None + } + Hit::Quit => Outcome::Quit, + Hit::Options => Outcome::Options, + Hit::LocalWorlds => Outcome::LocalWorlds, + Hit::Connect(address) => Outcome::Connect(address.clone()), + } + } +} + +/// The Play tab: category strip, filter rail, the server table and the +/// details card. +fn play(menu: &RustMenu, nodes: &mut Vec, w: f32, h: f32) { + menu.start_pings(); + // In the pause menu the browser is read-only: leave the world first. + let paused = menu.current.is_some(); + let strip_y = TOP + 8.0; + let top = strip_y + FILTER_H + 10.0; + let bottom = h - PAD - STRIP_H - GAP; + + // The category strip: what the list is showing, and the counts. + let mut x = PAD; + for (label, count) in [ + ("СЕРВЕРЫ", menu.saved.len()), + ("ИЗБРАННОЕ", 0), + ("ИСТОРИЯ", menu.saved.len()), + ("ДРУЗЬЯ", 0), + ] { + nodes.push(Node::Button { + rect: [x, strip_y, 124.0, 28.0], + label: format!("{label} {count}"), + icon: None, + face: Face::MenuStrong, + size: 9.5, + variant: Variant::Chip, + id: None, + enabled: true, + tip: None, + }); + x += 128.0; + } + let search_w = (w - x - PAD - 76.0).clamp(120.0, 280.0); + let sx = w - PAD - 76.0 - search_w; + nodes.push(Node::Well { + rect: [sx, strip_y, search_w, 28.0], + }); + nodes.push(Node::Icon { + rect: [sx + 8.0, strip_y + 7.0, 14.0, 14.0], + name: "search", + color: theme::MUTED, + }); + nodes.push(Node::Text { + rect: [sx + 28.0, strip_y + 7.0, search_w - 34.0, 16.0], + face: Face::Menu, + size: 10.0, + text: "ПОИСК".to_owned(), + color: theme::MUTED, + align: Align::Left, + }); + nodes.push(Node::Button { + rect: [w - PAD - 64.0, strip_y, 28.0, 28.0], + label: String::new(), + icon: Some("refresh-cw"), + face: Face::Menu, + size: 10.0, + variant: Variant::Icon, + id: Some(Hit::Refresh), + enabled: true, + tip: None, + }); + nodes.push(Node::Button { + rect: [w - PAD - 32.0, strip_y, 28.0, 28.0], + label: String::new(), + icon: Some("plus"), + face: Face::Menu, + size: 10.0, + variant: Variant::Icon, + id: (!paused).then_some(Hit::Servers), + enabled: !paused, + tip: paused.then_some("Сначала выйдите в мир"), + }); + + // The filter rail. + let rail_w = 236.0; + nodes.push(Node::Panel { + rect: [PAD, top, rail_w, bottom - top], + }); + let mut y = top + 10.0; + y = filter_section(nodes, PAD + 10.0, y, rail_w - 20.0, "РЕЖИМЫ ИГРЫ"); + for (key, label, count) in [ + ("mode:original", "ОРИГИНАЛЬНЫЙ", menu.saved.len()), + ("mode:softcore", "СОФТКОР", 0), + ("mode:hardcore", "ХАРДКОР", 0), + ("mode:primitive", "ПРИМИТИВНЫЙ", 0), + ] { + y = filter_toggle(menu, nodes, PAD + 10.0, y, rail_w - 20.0, key, &format!("{label} {count}")); + } + y = filter_section(nodes, PAD + 10.0, y + 4.0, rail_w - 20.0, "ФИЛЬТРЫ"); + for (key, label) in [ + ("filter:premium", "СНАЧАЛА ПРЕМИУМ"), + ("filter:empty", "ПОКАЗАТЬ ПУСТЫЕ"), + ("filter:full", "ПОКАЗАТЬ ПОЛНЫЕ"), + ] { + y = filter_toggle(menu, nodes, PAD + 10.0, y, rail_w - 20.0, key, label); + } + y = filter_section(nodes, PAD + 10.0, y + 4.0, rail_w - 20.0, "ЧАСТОТА ВАЙПА"); + for (key, label) in [ + ("wipe:month", "ЕЖЕМЕСЯЧНО"), + ("wipe:double", "ДВАЖДЫ В МЕСЯЦ"), + ("wipe:week", "ЕЖЕНЕДЕЛЬНО"), + ] { + y = filter_toggle(menu, nodes, PAD + 10.0, y, rail_w - 20.0, key, label); + } + y = filter_section(nodes, PAD + 10.0, y + 4.0, rail_w - 20.0, "РЕГИОН"); + for (key, label) in [("region:EU", "EU"), ("region:RU", "RU"), ("region:US", "US")] { + y = filter_toggle(menu, nodes, PAD + 10.0, y, rail_w - 20.0, key, label); + } + let by = (bottom - 84.0).max(y + 4.0); + nodes.push(Node::Button { + rect: [PAD + 10.0, by, 100.0, 28.0], + label: "СБРОС".to_owned(), + icon: Some("refresh-cw"), + face: Face::MenuStrong, + size: 9.5, + variant: Variant::Ghost, + id: Some(Hit::ResetFilters), + enabled: true, + tip: None, + }); + nodes.push(Node::Button { + rect: [PAD + 118.0, by, 100.0, 28.0], + label: "ОБНОВИТЬ".to_owned(), + icon: None, + face: Face::MenuStrong, + size: 9.5, + variant: Variant::Ghost, + id: Some(Hit::Refresh), + enabled: true, + tip: None, + }); + nodes.push(Node::Button { + rect: [PAD + 10.0, by + 34.0, rail_w - 20.0, 34.0], + label: "РАЗМЕСТИТЕ СВОЙ СЕРВЕР".to_owned(), + icon: None, + face: Face::MenuStrong, + size: 9.5, + variant: Variant::Primary, + id: None, + enabled: false, + tip: Some(TIP), + }); + + // The table. + let tx = PAD + rail_w + 12.0; + let tw = w - PAD - tx; + nodes.push(Node::Icon { + rect: [tx + 8.0, top + 6.0, 13.0, 13.0], + name: "star", + color: theme::MUTED, + }); + nodes.push(Node::Text { + rect: [tx + 30.0, top + 4.0, tw - 390.0, 16.0], + face: Face::MenuStrong, + size: 8.5, + text: "НАЗВАНИЕ".to_owned(), + color: theme::MUTED, + align: Align::Left, + }); + for (label, right) in [("РЕЖИМ", 300.0), ("ИГРОКИ", 196.0), ("ПИНГ", 80.0)] { + nodes.push(Node::Text { + rect: [tx + tw - right, top + 4.0, 90.0, 16.0], + face: Face::MenuStrong, + size: 8.5, + text: label.to_owned(), + color: theme::MUTED, + align: Align::Left, + }); + } + let row_h = 46.0; + let mut y = top + 26.0; + // A chosen region narrows the rows; the other filters wait for the + // launcher's server list (they have no data here). + let regions: Vec<&'static str> = ["region:EU", "region:RU", "region:US"] + .into_iter() + .filter(|key| menu.filter(key)) + .collect(); + for (i, (name, ip)) in menu.saved.iter().enumerate() { + if !regions.is_empty() && !regions.contains(®ion(ip)) { + continue; + } + if y + row_h > bottom { + break; + } + let ping = menu.ping(ip); + nodes.push(Node::Line { + rect: [tx, y + row_h - 0.5, tw, 1.0], + color: theme::BORDER_SOFT, + }); + nodes.push(Node::Icon { + rect: [tx + 8.0, y + 16.0, 14.0, 14.0], + name: "star", + color: theme::LOCKED, + }); + nodes.push(Node::Text { + rect: [tx + 30.0, y + 6.0, tw - 360.0, 16.0], + face: Face::MenuStrong, + size: 12.0, + text: fit(name, 42), + color: theme::TEXT, + align: Align::Left, + }); + let version = if ping.state == 1 && !ping.version.is_empty() { + ping.version.clone() + } else { + "VANILLA".to_owned() + }; + nodes.push(Node::Text { + rect: [tx + 30.0, y + 24.0, tw - 360.0, 12.0], + face: Face::Menu, + size: 9.0, + text: format!("{version} · {} · PROCEDURAL MAP", region(ip)), + color: theme::MUTED, + align: Align::Left, + }); + nodes.push(Node::Button { + rect: [tx + tw - 300.0, y + 13.0, 84.0, 20.0], + label: "VANILLA".to_owned(), + icon: None, + face: Face::MenuStrong, + size: 8.5, + variant: Variant::Chip, + id: None, + enabled: true, + tip: None, + }); + let players = match ping.state { + 1 => format!("{} / {}", ping.online, ping.max), + 0 => "…".to_owned(), + _ => "—".to_owned(), + }; + nodes.push(Node::Text { + rect: [tx + tw - 196.0, y + 14.0, 96.0, 16.0], + face: Face::Menu, + size: 10.5, + text: players, + color: theme::SOFT, + align: Align::Right, + }); + let (latency, color) = match ping.state { + 1 => ( + format!("{}", ping.ms), + if ping.ms < 60 { + theme::POSITIVE + } else if ping.ms < 140 { + theme::PRIMARY + } else { + theme::ACCENT + }, + ), + 0 => ("…".to_owned(), theme::MUTED), + _ => ("—".to_owned(), theme::LOCKED), + }; + nodes.push(Node::Text { + rect: [tx + tw - 80.0, y + 14.0, 60.0, 16.0], + face: Face::Menu, + size: 10.5, + text: latency, + color, + align: Align::Right, + }); + nodes.push(Node::Button { + rect: [tx, y, tw, row_h], + label: String::new(), + icon: None, + face: Face::Menu, + size: 10.0, + variant: Variant::Invisible, + id: (!paused).then_some(Hit::OpenServer(i)), + enabled: !paused, + tip: paused.then_some("Сначала выйдите в мир"), + }); + y += row_h; + } + if menu.saved.is_empty() { + nodes.push(Node::Text { + rect: [tx, top + 80.0, tw, 22.0], + face: Face::MenuStrong, + size: 12.0, + text: "Серверы не найдены".to_owned(), + color: theme::MUTED, + align: Align::Center, + }); + nodes.push(Node::Button { + rect: [tx + tw / 2.0 - 100.0, top + 110.0, 200.0, 34.0], + label: "ДОБАВИТЬ СЕРВЕР".to_owned(), + icon: Some("plus"), + face: Face::MenuStrong, + size: 10.5, + variant: Variant::Primary, + id: (!paused).then_some(Hit::Servers), + enabled: !paused, + tip: paused.then_some("Сначала выйдите в мир"), + }); + } + + // The details card over everything. + if let Some(i) = menu.selected.get() + && let Some((name, ip)) = menu.saved.get(i) + { + server_card(menu, nodes, w, h, name, ip); + } +} + +/// A filter section's caption; returns the next row's top. +fn filter_section(nodes: &mut Vec, x: f32, y: f32, w: f32, title: &str) -> f32 { + nodes.push(Node::Text { + rect: [x, y, w, 16.0], + face: Face::MenuStrong, + size: 8.5, + text: title.to_owned(), + color: theme::MUTED, + align: Align::Left, + }); + y + 20.0 +} + +/// One checkbox row of the filter rail. +fn filter_toggle( + menu: &RustMenu, + nodes: &mut Vec, + x: f32, + y: f32, + w: f32, + key: &'static str, + label: &str, +) -> f32 { + nodes.push(Node::Button { + rect: [x, y, w, 18.0], + label: label.to_owned(), + icon: None, + face: Face::Menu, + size: 10.0, + variant: Variant::Check { + on: menu.filter(key), + }, + id: Some(Hit::Toggle(key)), + enabled: true, + tip: None, + }); + y + 18.0 +} + +/// The region tags a saved address suggests. +fn region(ip: &str) -> &'static str { + let lower = ip.to_ascii_lowercase(); + if lower.contains(".ru") { + "RU" + } else if lower.contains(".eu") || lower.contains(".de") { + "EU" + } else { + "US" + } +} + +/// One server's card: banner, facts, description and the actions. +fn server_card(menu: &RustMenu, nodes: &mut Vec, w: f32, h: f32, name: &str, ip: &str) { + nodes.push(Node::Shade { + rect: [0.0, 0.0, w, h], + top: theme::OVERLAY, + bottom: theme::OVERLAY, + }); + nodes.push(Node::Button { + rect: [0.0, 0.0, w, h], + label: String::new(), + icon: None, + face: Face::Menu, + size: 10.0, + variant: Variant::Invisible, + id: Some(Hit::CloseModal), + enabled: true, + tip: None, + }); + let cw = 560.0; + let ch = 360.0; + let cx = (w - cw) / 2.0; + let cy = (h - ch) / 2.0; + nodes.push(Node::Panel { + rect: [cx, cy, cw, ch], + }); + nodes.push(Node::Text { + rect: [cx + 16.0, cy + 12.0, cw - 32.0, 24.0], + face: Face::MenuStrong, + size: 18.0, + text: name.to_owned(), + color: theme::TEXT, + align: Align::Left, + }); + nodes.push(Node::Shade { + rect: [cx + 16.0, cy + 48.0, cw - 32.0, 120.0], + top: theme::faded(theme::ACCENT, 0.45), + bottom: theme::faded(theme::RAIL, 1.0), + }); + nodes.push(Node::Icon { + rect: [cx + cw / 2.0 - 22.0, cy + 84.0, 44.0, 44.0], + name: "server", + color: theme::faded(theme::TEXT, 0.75), + }); + let ping = menu.ping(ip); + for (i, (label, value)) in [ + ("ВРЕМЯ", "—".to_owned()), + ("КАРТА", "PROCEDURAL MAP".to_owned()), + ("ВАЙП", "ЕЖЕНЕДЕЛЬНО".to_owned()), + ("РЕЖИМ", "VANILLA".to_owned()), + ] + .into_iter() + .enumerate() + { + let col = (cw - 32.0) / 4.0; + let mx = cx + 16.0 + i as f32 * col; + nodes.push(Node::Text { + rect: [mx, cy + 180.0, col - 4.0, 12.0], + face: Face::Menu, + size: 8.0, + text: label.to_owned(), + color: theme::MUTED, + align: Align::Left, + }); + nodes.push(Node::Text { + rect: [mx, cy + 192.0, col - 4.0, 16.0], + face: Face::MenuStrong, + size: 9.5, + text: value, + color: theme::TEXT, + align: Align::Left, + }); + } + let facts = if ping.state == 1 { + format!("{} · {} / {} игроков · {} мс", ip, ping.online, ping.max, ping.ms) + } else { + ip.to_owned() + }; + nodes.push(Node::Text { + rect: [cx + 16.0, cy + 218.0, cw - 32.0, 18.0], + face: Face::Menu, + size: 10.5, + text: facts, + color: theme::SOFT, + align: Align::Left, + }); + let by = cy + ch - 46.0; + nodes.push(Node::Button { + rect: [cx + 16.0, by, 168.0, 32.0], + label: "СОХРАНИТЬ СЕРВЕР".to_owned(), + icon: Some("star"), + face: Face::MenuStrong, + size: 9.5, + variant: Variant::Ghost, + id: None, + enabled: false, + tip: Some(TIP), + }); + nodes.push(Node::Button { + rect: [cx + cw - 16.0 - 100.0 - 8.0 - 130.0, by, 100.0, 32.0], + label: "ОТМЕНА".to_owned(), + icon: None, + face: Face::MenuStrong, + size: 9.5, + variant: Variant::Chip, + id: Some(Hit::CloseModal), + enabled: true, + tip: None, + }); + nodes.push(Node::Button { + rect: [cx + cw - 16.0 - 130.0, by, 130.0, 32.0], + label: "ПОДКЛЮЧИТЬСЯ".to_owned(), + icon: Some("play"), + face: Face::MenuStrong, + size: 9.5, + variant: Variant::Primary, + id: Some(Hit::Connect(ip.to_owned())), + enabled: true, + tip: None, + }); +} + +/// The current server/world card (the Rust pause menu's first tab). +fn current_tab(menu: &RustMenu, nodes: &mut Vec, w: f32, _h: f32) { + let Some(current) = &menu.current else { + return; + }; + let (cw, ch) = (560.0, 300.0); + let (cx, cy) = ((w - cw) / 2.0, TOP + GAP + 16.0); + nodes.push(Node::Panel { + rect: [cx, cy, cw, ch], + }); + nodes.push(Node::Text { + rect: [cx + 16.0, cy + 12.0, cw - 32.0, 28.0], + face: Face::Brand, + size: 22.0, + text: current.name.clone(), + color: theme::TEXT, + align: Align::Left, + }); + nodes.push(Node::Text { + rect: [cx + 16.0, cy + 44.0, cw - 32.0, 16.0], + face: Face::Menu, + size: 10.5, + text: if current.singleplayer { + "Одиночная игра · SURVIVAL".to_owned() + } else { + format!("{} · VANILLA", current.address) + }, + color: theme::MUTED, + align: Align::Left, + }); + nodes.push(Node::Line { + rect: [cx + 16.0, cy + 72.0, cw - 32.0, 1.0], + color: theme::BORDER_SOFT, + }); + let bw = (cw - 48.0) / 2.0; + let (x1, x2) = (cx + 16.0, cx + 32.0 + bw); + let mut buttons: Vec<(f32, f32, &str, &str, Variant, Hit)> = vec![ + ( + x1, + cy + 96.0, + "ПРОДОЛЖИТЬ", + "play", + Variant::Primary, + Hit::Resume, + ), + ( + x2, + cy + 96.0, + "НАСТРОЙКИ", + "settings", + Variant::Ghost, + Hit::Options, + ), + ( + x1, + cy + 138.0, + "ДОСТИЖЕНИЯ", + "award", + Variant::Ghost, + Hit::Advancements, + ), + ( + x2, + cy + 138.0, + "СТАТИСТИКА", + "activity", + Variant::Ghost, + Hit::Stats, + ), + ]; + if current.singleplayer { + buttons.push(( + x1, + cy + 180.0, + "НАСТРОЙКИ МИРА", + "sliders-horizontal", + Variant::Ghost, + Hit::WorldOptions, + )); + buttons.push(( + x2, + cy + 180.0, + "СОХРАНИТЬ И ВЫЙТИ", + "log-out", + Variant::Ghost, + Hit::Quit, + )); + } else { + buttons.push(( + x2, + cy + 180.0, + "СОХРАНИТЬ И ВЫЙТИ", + "log-out", + Variant::Ghost, + Hit::Quit, + )); + } + for (bx, by, label, icon, variant, hit) in buttons { + nodes.push(Node::Button { + rect: [bx, by, bw, 36.0], + label: label.to_owned(), + icon: Some(icon), + face: Face::MenuStrong, + size: 10.0, + variant, + id: Some(hit), + enabled: true, + tip: None, + }); + } +} + +fn paint(ui: &mut Ui, node: &Node, at: (f32, f32), dx: f32) { + match node { + Node::Panel { rect } => { + let [x, y, w, h] = shift(*rect, dx); + ui.rounded(x, y, w, h, 0.0, theme::PANEL); + ui.border(x, y, w, h, 0.0, theme::BORDER); + } + Node::Well { rect } => { + let [x, y, w, h] = shift(*rect, dx); + ui.rounded(x, y, w, h, 0.0, theme::RAIL); + ui.border(x, y, w, h, 0.0, theme::BORDER); + } + Node::Shade { rect, top, bottom } => { + let [x, y, w, h] = shift(*rect, dx); + ui.gradient_v(x, y, w, h, *top, *bottom); + } + Node::Line { rect, color } => { + let [x, y, w, h] = shift(*rect, dx); + ui.rounded(x, y, w, h, 0.0, *color); + } + Node::Text { + rect, + face, + size, + text, + color, + align, + } => { + let [x, y, w, h] = shift(*rect, dx); + let ty = y + ((h - (size * 1.45).round()) / 2.0).max(0.0); + match align { + Align::Left => { + ui.text(*face, *size, x, ty, *color, text); + } + Align::Center => ui.text_centered(*face, *size, x + w / 2.0, ty, *color, text), + Align::Right => { + let tw = ui.measure(*face, *size, text); + ui.text(*face, *size, x + w - tw, ty, *color, text); + } + } + } + Node::Icon { rect, name, color } => { + let [x, y, w, h] = shift(*rect, dx); + icons::draw(ui, name, [x, y, w, h], *color); + } + Node::Button { + rect, + label, + icon, + face, + size, + variant, + id, + enabled, + .. + } => { + let rect = shift(*rect, dx); + let hover = id.is_some() && *enabled && inside(rect, at); + button(ui, rect, label, *icon, *face, *size, *variant, *enabled, hover); + } + } +} + +fn button( + ui: &mut Ui, + [x, y, w, h]: [f32; 4], + label: &str, + icon: Option<&'static str>, + face: Face, + size: f32, + variant: Variant, + enabled: bool, + hover: bool, +) { + let ty = y + (h - (size * 1.45).round()) / 2.0; + if variant == Variant::Invisible { + return; + } + if let Variant::Check { on } = variant { + let (bx, by) = (x + 6.0, y + (h - 12.0) / 2.0); + ui.border( + bx, + by, + 12.0, + 12.0, + 0.0, + if on { theme::ACCENT } else { theme::BORDER }, + ); + if on { + ui.rounded(bx + 1.0, by + 1.0, 10.0, 10.0, 0.0, theme::ACCENT); + icons::draw(ui, "check", [bx + 2.0, by + 2.0, 8.0, 8.0], theme::TEXT); + } + ui.text( + face, + size, + x + 24.0, + ty, + if on { theme::TEXT } else { theme::SOFT }, + label, + ); + return; + } + let (fill, ring, fg, icon_color) = match variant { + Variant::Tab { active } => ( + if active { + theme::ACTIVE + } else if hover { + theme::HOVER + } else { + 0 + }, + false, + if active { theme::TEXT } else { theme::SOFT }, + if active { theme::TEXT } else { theme::MUTED }, + ), + Variant::Solid => ( + if hover { theme::PANEL_HI } else { theme::CHIP }, + true, + theme::TEXT, + theme::SOFT, + ), + Variant::Primary => ( + if hover { theme::PRIMARY_HOVER } else { theme::PRIMARY }, + false, + theme::ON_PRIMARY, + theme::ON_PRIMARY, + ), + Variant::Ghost => ( + if hover { theme::HOVER } else { 0 }, + false, + if hover { theme::TEXT } else { theme::SOFT }, + if hover { theme::TEXT } else { theme::MUTED }, + ), + Variant::Chip => (theme::CHIP, true, theme::MUTED, theme::MUTED), + Variant::Icon => ( + if hover { theme::HOVER } else { 0 }, + false, + theme::SOFT, + if hover { theme::TEXT } else { theme::SOFT }, + ), + Variant::Check { .. } => unreachable!(), + Variant::Invisible => (0, false, theme::TEXT, theme::TEXT), + }; + if fill >> 24 != 0 { + ui.rounded(x, y, w, h, 0.0, fill); + } + if ring { + ui.border(x, y, w, h, 0.0, theme::BORDER); + } + let color = if enabled { fg } else { theme::LOCKED }; + let icon_color = if enabled { icon_color } else { theme::LOCKED }; + let isize = 15.0; + let gap = 7.0; + let lw = if label.is_empty() { + 0.0 + } else { + ui.measure(face, size, label) + }; + let iw = if icon.is_some() { isize } else { 0.0 }; + let total = iw + if iw > 0.0 && lw > 0.0 { gap } else { 0.0 } + lw; + let mut cx = x + (w - total) / 2.0; + if let Some(name) = icon { + icons::draw( + ui, + name, + [cx, y + (h - isize) / 2.0, isize, isize], + icon_color, + ); + cx += isize + if lw > 0.0 { gap } else { 0.0 }; + } + if !label.is_empty() { + ui.text(face, size, cx, ty, color, label); + } +} + +fn shift([x, y, w, h]: [f32; 4], dx: f32) -> [f32; 4] { + [x + dx, y, w, h] +} + +/// Whether a dp point is inside a rect (half-open, like the vanilla widgets). +fn inside([x, y, w, h]: [f32; 4], (px, py): (f32, f32)) -> bool { + px >= x && px < x + w && py >= y && py < y + h +} + +/// Cuts a single-line label to `chars` characters with an ellipsis. +fn fit(text: &str, chars: usize) -> String { + if text.chars().count() <= chars { + return text.to_owned(); + } + let mut out: String = text.chars().take(chars.saturating_sub(1)).collect(); + out.push('…'); + out +} + +#[cfg(test)] +mod tests; diff --git a/crates/horizon-client/src/rustui/settings.rs b/crates/horizon-client/src/rustui/settings.rs new file mode 100644 index 0000000..a009a55 --- /dev/null +++ b/crates/horizon-client/src/rustui/settings.rs @@ -0,0 +1,1191 @@ +//! The settings screens in the Rust style: a category rail on the left, the +//! page's rows in the middle with their values and bars on the right, the +//! hovered setting's explanation in a panel of its own, and a footer with the +//! version, the credit and the way back. +//! +//! The rows are `options_ui`'s own widgets (`OptionsUi::layout`), so every page +//! and every setting behaves exactly as before: a press is forwarded to the +//! widget it stands for, in that widget's own coordinates. Pages with bespoke +//! renderers of their own (Graphics, Shader Packs' list, the pack screen) keep +//! them. +use super::theme; +use crate::hud::{HudAtlas, HudBatch}; +use crate::options_ui::{Act, OptionsUi, Page, WKind}; +use crate::settings::Settings; +use crate::ui_theme::{Face, Ui}; + +/// The category rail's width. +const RAIL: f32 = 236.0; +/// The explanation panel's width. +const TIPS: f32 = 300.0; +const PAD: f32 = 22.0; +/// The page title's band. +const HEAD: f32 = 74.0; +/// The footer's height. +const FOOTER: f32 = 56.0; +const ROW: f32 = 36.0; +const ROW_GAP: f32 = 4.0; +const HEADER: f32 = 30.0; +/// The rail's groups: a hairline separates them, so related pages read together. +const GROUPS: &[&[Page]] = &[ + &[ + Page::Video, + Page::Sound, + Page::Controls, + Page::KeyBinds, + Page::Mouse, + Page::Chat, + Page::Accessibility, + ], + &[Page::Language, Page::Font], + &[Page::Graphics, Page::GraphicsAdvanced], + &[Page::Packs, Page::Mods, Page::ShaderPacks], + &[ + Page::Controller, + Page::Extras, + Page::Horizon, + Page::Agent, + Page::Credits, + ], +]; +const RAIL_ITEM: f32 = 28.0; +const RAIL_GROUP_GAP: f32 = 12.0; +const RAIL_TOP: f32 = HEAD - 6.0; +/// A page whose own renderer stays (graphics, the shader and pack lists). +pub fn keeps_its_screen(_page: Page) -> bool { + false +} + +/// The rail's entries with their offset from the rail's top, and where the +/// hairlines between the groups sit. +fn rail_items() -> (Vec<(Page, f32)>, Vec) { + let mut items = Vec::new(); + let mut lines = Vec::new(); + let mut y = 0.0; + for (i, group) in GROUPS.iter().enumerate() { + if i > 0 { + lines.push(y); + y += RAIL_GROUP_GAP; + } + for &page in *group { + items.push((page, y)); + y += RAIL_ITEM; + } + } + (items, lines) +} +/// The rail's total height. +fn rail_height() -> f32 { + (rail_items().0.last().map_or(0.0, |(_, y)| y + RAIL_ITEM)).max(0.0) +} + +/// The rail's label: the page's own title, translated when a key exists. +pub fn label(page: Page) -> String { + match page { + // Graphics is not vanilla's Video Settings: it has its own label. + Page::Graphics => "Graphics".into(), + Page::GraphicsAdvanced => "Graphics (advanced)".into(), + Page::Mods => "Моды".into(), + Page::ShaderPacks => "Шейдеры".into(), + Page::Controller => "Контроллер".into(), + Page::Extras => "Дополнения".into(), + Page::Horizon => "RustNotMC".into(), + Page::Agent => "Агент".into(), + Page::Credits => "Титры".into(), + _ => { + let key = OptionsUi::title(page); + crate::lang::get_or(key, key) + } + } +} + +/// A section header's icon, by what the section is about. +fn header_icon(text: &str) -> &'static str { + let text = text.to_lowercase(); + if text.contains("display") || text.contains("экран") { + "monitor" + } else if text.contains("quality") || text.contains("качест") { + "sparkles" + } else if text.contains("preference") || text.contains("предпочт") { + "sliders-horizontal" + } else if text.contains("movement") || text.contains("движен") { + "hand" + } else if text.contains("resource") || text.contains("ресурс") { + "layers" + } else if text.contains("render") || text.contains("рендер") { + "monitor" + } else if text.contains("gameplay") || text.contains("геймплей") { + "play" + } else if text.contains("misc") || text.contains("разное") { + "boxes" + } else { + "chevron-right" + } +} + +/// The rail's icon for a page. +fn page_icon(page: Page) -> &'static str { + match page { + Page::Video => "play", + Page::Sound => "headphones", + Page::Graphics => "sliders-horizontal", + Page::GraphicsAdvanced => "sparkles", + Page::Controls => "hand", + Page::KeyBinds => "keyboard", + Page::Mouse => "mouse-pointer-click", + Page::Chat => "chat-thread", + Page::Accessibility => "eye", + Page::Language => "globe", + Page::Font => "type", + Page::Packs => "layers", + Page::Mods => "boxes", + Page::ShaderPacks => "sparkles", + Page::Controller => "hand", + Page::Extras => "wand", + Page::Horizon => "settings-2", + Page::Agent => "bot", + Page::Credits => "award", + _ => "settings", + } +} +/// What a row shows on the right. +#[derive(Clone, Copy, Debug, PartialEq)] +enum Control { + /// A value with a plate to cycle. + Cycle, + /// A bar and its value, 0..1. + Slider(f32), + /// A button (a sub-page, an action). + Action, +} + +#[derive(Clone, Debug)] +enum Kind { + Header(String), + Row { + caption: String, + value: String, + control: Control, + enabled: bool, + tip: Option, + }, +} + +/// A resource pack row: its pack, or the folder button. +#[derive(Clone, Debug, PartialEq)] +enum PackHit { + Toggle(usize), + Folder, +} + +/// One laid-out row: its band in the list, the vanilla widget it forwards a +/// press to, and what it draws. +#[derive(Clone, Debug)] +struct Slot { + top: f32, + h: f32, + /// The widget's rectangle in GUI pixels (`options_ui`'s own layout). + vanilla: [f32; 4], + /// The option a slider row edits, for a press's drag. + opt: Option, + /// A graphics setting, edited in place instead of forwarded. + item: Option, + /// A resource pack row: its pack, or the folder button. + pack: Option, + /// A key binding row: the mapping it rebinds, and whether its reset is live. + key: Option<&'static str>, + reset: bool, + kind: Kind, +} + +/// The rows of the current page, in list order. +fn slots(o: &mut OptionsUi, s: &Settings, w: f32, h: f32) -> Vec { + let mut out = Vec::new(); + // The rail is the main page: its grid of sub-screen buttons is the rail. + if o.page() == Page::Main { + return out; + } + if let Some(level) = OptionsUi::graphics_level(o.page()) { + return graphics_slots(level, s); + } + if o.page() == Page::Packs { + return packs_slots(o, s); + } + if o.page() == Page::KeyBinds { + return keybind_slots(o, s); + } + let (widgets, _, _, _) = o.layout(s, w, h); + let mut y = 0.0; + for wd in widgets { + // The page title and the Done button are the shell's own. + if matches!(&wd.kind, WKind::Text { centered: true, .. } if wd.y < 14.0) { + continue; + } + if matches!(&wd.kind, WKind::Button { act: Act::Done, .. }) { + continue; + } + let (kind, h) = match &wd.kind { + WKind::Text { text, .. } => (Kind::Header(text.plain()), HEADER), + WKind::Button { label, active, act } => match act { + Act::Cycle(opt) => ( + Kind::Row { + caption: crate::lang::get(opt.caption()), + value: label.plain(), + control: Control::Cycle, + enabled: *active, + tip: tip_for(*opt, s), + }, + ROW, + ), + Act::Push(page) => ( + Kind::Row { + caption: label.plain(), + value: String::new(), + control: Control::Action, + enabled: *active, + tip: crate::options_ui::page_tooltip(*page).map(str::to_owned), + }, + ROW, + ), + Act::Extra(item) => { + let (caption, value) = split_label(&label.plain()); + ( + Kind::Row { + caption, + value, + control: Control::Cycle, + enabled: *active, + tip: Some(item.description().to_owned()), + }, + ROW, + ) + } + _ => { + let (caption, value) = split_label(&label.plain()); + ( + Kind::Row { + caption, + value, + control: Control::Action, + enabled: *active, + tip: None, + }, + ROW, + ) + } + }, + WKind::Slider { label, opt, .. } => ( + Kind::Row { + caption: crate::lang::get(opt.caption()), + value: label.plain(), + control: Control::Slider(opt.slider_position(s).unwrap_or(0.0)), + enabled: true, + tip: tip_for(*opt, s), + }, + ROW, + ), + WKind::LanguageRow { label, selected, .. } => ( + Kind::Row { + caption: label.plain(), + value: if *selected { "●".into() } else { String::new() }, + control: Control::Action, + enabled: !*selected, + tip: None, + }, + ROW, + ), + }; + let opt = match &wd.kind { + WKind::Slider { opt, .. } => Some(*opt), + WKind::Button { + act: Act::Cycle(opt), + .. + } => Some(*opt), + _ => None, + }; + out.push(Slot { + top: y, + h, + vanilla: [wd.x, wd.y, wd.w, wd.h], + opt, + item: None, + pack: None, + key: None, + reset: false, + kind, + }); + y += h + ROW_GAP; + } + out +} + +/// The graphics pages' rows: the same shell, the settings from `graphics_ui`. +fn graphics_slots(level: crate::graphics_ui::Level, s: &Settings) -> Vec { + use crate::graphics_ui::{Item, Row}; + let mut out = Vec::new(); + let mut y = 0.0; + for row in crate::graphics_ui::rows(level) { + let (kind, h, item) = match row { + Row::Header(text) => (Kind::Header(text.to_owned()), HEADER, None), + Row::Setting(setting) => { + let (caption, value) = split_label(&setting.item.label(s).plain()); + let control = match setting.item { + Item::Vanilla(opt) => opt + .slider_position(s) + .map_or(Control::Cycle, Control::Slider), + Item::Horizon(_) => setting + .item + .slider(s) + .map_or(Control::Cycle, Control::Slider), + }; + ( + Kind::Row { + caption, + value, + control, + enabled: true, + tip: Some(setting.text.to_owned()), + }, + ROW, + Some(setting.item), + ) + } + }; + out.push(Slot { + top: y, + h, + vanilla: [0.0; 4], + opt: None, + item, + pack: None, + key: None, + reset: false, + kind, + }); + y += h + ROW_GAP; + } + out +} +/// The resource packs page: every pack with its state, and the folder button. +fn packs_slots(o: &OptionsUi, s: &Settings) -> Vec { + let mut out = Vec::new(); + let mut y = 0.0; + out.push(Slot { + top: y, + h: HEADER, + vanilla: [0.0; 4], + opt: None, + item: None, + pack: None, + key: None, + reset: false, + kind: Kind::Header("РЕСУРСПАКИ".to_owned()), + }); + y += HEADER + ROW_GAP; + let row = |top: f32, caption: String, value: String, enabled: bool, tip: Option, pack: Option| Slot { + top, + h: ROW, + vanilla: [0.0; 4], + opt: None, + item: None, + pack, + key: None, + reset: false, + kind: Kind::Row { + caption, + value, + control: Control::Action, + enabled, + tip, + }, + }; + out.push(row( + y, + "Открыть папку".to_owned(), + String::new(), + true, + Some("Открыть папку с ресурспаками".to_owned()), + Some(PackHit::Folder), + )); + y += ROW + ROW_GAP; + for (i, info) in o.pack_infos.iter().enumerate() { + let selected = s.resource_packs.iter().any(|id| id == &info.id); + out.push(row( + y, + info.title.plain(), + if selected { "ВЫБРАН" } else { "ДОБАВИТЬ" }.to_owned(), + !info.required, + Some(info.description.plain()), + Some(PackHit::Toggle(i)), + )); + y += ROW + ROW_GAP; + } + out +} + +/// The key binds page: a row per action, its bind plate and a red trash +/// button that restores the default. +fn keybind_slots(o: &OptionsUi, s: &Settings) -> Vec { + use crate::keybinds::{CATEGORIES, MAPPINGS, display_name}; + let mut mappings: Vec<(&'static str, &'static str)> = + MAPPINGS.iter().map(|(name, _, category)| (*name, *category)).collect(); + mappings.sort_by(|a, b| { + let ca = CATEGORIES.iter().position(|c| *c == a.1).unwrap_or(99); + let cb = CATEGORIES.iter().position(|c| *c == b.1).unwrap_or(99); + ca.cmp(&cb) + .then_with(|| crate::lang::get(a.0).cmp(&crate::lang::get(b.0))) + }); + let mut out = Vec::new(); + let mut y = 0.0; + let mut last = ""; + for (name, category) in mappings { + if category != last { + last = category; + let key = format!("key.category.minecraft.{category}"); + out.push(Slot { + top: y, + h: HEADER, + vanilla: [0.0; 4], + opt: None, + item: None, + pack: None, + key: None, + reset: false, + kind: Kind::Header(crate::lang::get_or(&key, category)), + }); + y += HEADER + ROW_GAP; + } + let mut value = display_name(s.keys.get(name)).plain(); + if o.selected_key == Some(name) { + value = "> НАЖМИТЕ КЛАВИШУ <".to_owned(); + } else if !s.keys.conflicts(name).is_empty() { + value.push_str(" !"); + } + out.push(Slot { + top: y, + h: ROW, + vanilla: [0.0; 4], + opt: None, + item: None, + pack: None, + key: Some(name), + reset: !s.keys.is_default(name), + kind: Kind::Row { + caption: crate::lang::get_or(name, name), + value, + control: Control::Action, + enabled: true, + tip: None, + }, + }); + y += ROW + ROW_GAP; + } + out +} + +/// A resource pack row: select it or open the folder. +fn pack_click( + o: &mut OptionsUi, + hit: &PackHit, + s: &mut Settings, +) -> Vec { + match hit { + PackHit::Folder => vec![crate::options_ui::Event::OpenPackFolder], + PackHit::Toggle(i) => { + let Some(info) = o.pack_infos.get(*i) else { + return Vec::new(); + }; + if info.required { + return Vec::new(); + } + let id = info.id.clone(); + if s.resource_packs.iter().any(|seen| seen == &id) { + s.resource_packs.retain(|seen| seen != &id); + } else { + s.resource_packs.push(id); + } + o.pack_selection = s.resource_packs.clone(); + vec![crate::options_ui::Event::Packs(s.resource_packs.clone())] + } + } +} + +fn tip_for(opt: crate::options_ui::Opt, s: &Settings) -> Option { let key = opt.tooltip_key(s); + crate::lang::has(&key).then(|| crate::lang::get(&key)) +} +fn split_label(label: &str) -> (String, String) { + match label.split_once(": ") { + Some((caption, value)) => (caption.to_owned(), value.to_owned()), + None => (label.to_owned(), String::new()), + } +} + +/// The rail's item under a dp point, scrolled by `scroll`. +fn rail_at((x, y): (f32, f32), h: f32, scroll: f32) -> Option { + if x >= RAIL || y < RAIL_TOP || y >= h - FOOTER { + return None; + } + let (items, _) = rail_items(); + items.iter().find_map(|&(page, top)| { + let top = RAIL_TOP + top - scroll; + (y >= top && y < top + RAIL_ITEM).then_some(page) + }) +} + +/// The wheel: over the rail it scrolls the categories, elsewhere the rows. +pub fn wheel(o: &mut OptionsUi, size: (f32, f32), cursor: (f32, f32), amount: f32) { + let frame = super::Frame::new(size, o.scale.max(0.1), cursor); + let at = frame.at(); + if at.0 < RAIL { + o.rust_rail_target = (o.rust_rail_target - amount * 44.0).max(0.0); + } else { + o.rust_scroll_target = (o.rust_scroll_target - amount * 44.0).max(0.0); + } +} + +/// The back button's rect (dp). +fn back_rect(w: f32, h: f32) -> [f32; 4] { + [w - PAD - 120.0, h - FOOTER + 13.0, 120.0, 30.0] +} + +/// Draws the shell and the page. +pub fn draw( + o: &mut OptionsUi, + s: &Settings, + atlas: &HudAtlas, + batch: &mut HudBatch, + cursor: (f32, f32), +) { + let frame = super::Frame::new((batch.width, batch.height), batch.scale, cursor); + let (w, h) = (frame.w, frame.h); + let at = frame.at(); + let page = o.page(); + let slots = slots(o, s, batch.width, batch.height); + let list_top = HEAD; + let list_bottom = h - FOOTER - 8.0; + let content = slots.last().map_or(0.0, |slot| slot.top + slot.h); + let max_scroll = (content - (list_bottom - list_top)).max(0.0); + // Inertia: the wheel moves the target, the frame eases the view toward it. + let now = std::time::Instant::now(); + let dt = now.duration_since(o.rust_tick).as_secs_f32().clamp(0.0, 0.1); + o.rust_tick = now; + let ease = 1.0 - (-dt * 22.0).exp(); + let rail_max = (rail_height() - (h - FOOTER - RAIL_TOP)).max(0.0); + o.rust_rail_target = o.rust_rail_target.clamp(0.0, rail_max); + o.rust_rail += (o.rust_rail_target - o.rust_rail) * ease; + if (o.rust_rail_target - o.rust_rail).abs() < 0.25 { + o.rust_rail = o.rust_rail_target; + } + o.rust_scroll_target = o.rust_scroll_target.clamp(0.0, max_scroll); + o.rust_scroll += (o.rust_scroll_target - o.rust_scroll) * ease; + if (o.rust_scroll_target - o.rust_scroll).abs() < 0.25 { + o.rust_scroll = o.rust_scroll_target; + } + let (scroll, rail_scroll) = (o.rust_scroll, o.rust_rail); + let mut ui = Ui::new(atlas, batch, cursor); + // The pages dim the scene more than the menu does. + ui.rounded(0.0, 0.0, w, h, 0.0, theme::DIM); + + // Chrome: scrims over the blurred scene, the rail and the footer. + ui.gradient_v(0.0, 0.0, w, 92.0, theme::SCRIM_TOP, theme::faded(theme::SCRIM_TOP, 0.0)); + ui.gradient_v(0.0, h - 120.0, w, 120.0, theme::faded(theme::SCRIM_BOTTOM, 0.0), theme::SCRIM_BOTTOM); + ui.rounded(0.0, 0.0, RAIL, h - FOOTER, 0.0, theme::RAIL); + ui.rounded(0.0, h - FOOTER, w, FOOTER, 0.0, theme::RAIL); + ui.rounded(RAIL, 0.0, 1.0, h - FOOTER, 0.0, theme::BORDER_SOFT); + + // The rail: grouped categories, the open one on a raised plate with the + // accent, clipped to its own column while it scrolls. + let (items, lines) = rail_items(); + let rail_clip = ui.batch.vertices.len(); + for &ly in &lines { + let y = RAIL_TOP + ly - rail_scroll; + if y >= RAIL_TOP - 6.0 && y <= h - FOOTER { + ui.rounded(14.0, y + 5.0, RAIL - 28.0, 1.0, 0.0, theme::BORDER_SOFT); + } + } + for &(entry, top) in &items { + let y = RAIL_TOP + top - rail_scroll; + if y + RAIL_ITEM < RAIL_TOP || y > h - FOOTER { + continue; + } + let open = entry == page; + let hovered = !open + && at.0 < RAIL + && at.1 >= y + && at.1 < y + RAIL_ITEM + && at.1 >= RAIL_TOP + && at.1 < h - FOOTER; + if open || hovered { + ui.rounded( + 10.0, + y, + RAIL - 20.0, + RAIL_ITEM, + 0.0, + if open { theme::ACTIVE } else { theme::HOVER }, + ); + } + if open { + ui.rounded(10.0, y + 5.0, 3.0, RAIL_ITEM - 10.0, 0.0, theme::ACCENT); + } + super::icons::draw( + &mut ui, + page_icon(entry), + [14.0, y + 7.0, 14.0, 14.0], + if open { theme::TEXT } else { theme::MUTED }, + ); + ui.text( + if open { Face::MenuStrong } else { Face::Menu }, + 12.0, + 36.0, + y + 5.0, + if open { theme::TEXT } else { theme::SOFT }, + &label(entry), + ); + } + let clip = [ + ui.to_gui(0.0), + ui.to_gui(RAIL_TOP), + ui.to_gui(RAIL), + ui.to_gui(h - FOOTER), + ]; + ui.batch.clip_since(rail_clip, clip[0], clip[1], clip[2], clip[3]); + + // The page's title and the rows. + ui.text(Face::MenuStrong, 19.0, RAIL + PAD, 26.0, theme::TEXT, &label(page)); + ui.rounded(RAIL + PAD, HEAD - 10.0, 44.0, 2.0, 0.0, theme::ACCENT); + let mut hovered_tip: Option<(String, String)> = None; + let rows_clip = ui.batch.vertices.len(); + for slot in &slots { + let y = list_top + slot.top - scroll; + if y + slot.h < list_top || y > list_bottom { + continue; + } + let x = RAIL + PAD; + let row_w = w - RAIL - TIPS - PAD * 2.0; + match &slot.kind { + Kind::Header(text) => { + super::icons::draw( + &mut ui, + header_icon(text), + [x, y + 7.0, 12.0, 12.0], + theme::ACCENT, + ); + ui.text( + Face::MenuStrong, + 11.0, + x + 18.0, + y + 6.0, + theme::TEXT, + &upper(text), + ); + } + Kind::Row { + caption, + value, + control, + enabled, + tip, + } => { + let hover = at.0 >= x && at.0 < x + row_w && at.1 >= y && at.1 < y + slot.h; + if hover { + ui.rounded(x, y, row_w, slot.h, 0.0, theme::PANEL); + if let Some(tip) = tip { + hovered_tip = Some((caption.clone(), tip.clone())); + } + } + let color = if *enabled { theme::TEXT } else { theme::LOCKED }; + ui.text(Face::Menu, 12.0, x + 10.0, y + 9.0, color, caption); + let (cx, cw) = control_rect(w); + let cy = y + 6.0; + let ch = 24.0; + match control { + Control::Slider(v) => { + let bw = cw; + ui.text(Face::Menu, 11.0, cx + bw - ui.measure(Face::Menu, 11.0, value), y + 2.0, theme::SOFT, value); + ui.rounded(cx, cy + 14.0, bw, 5.0, 0.0, theme::TRACK); + ui.rounded(cx, cy + 14.0, (bw * v).max(2.0), 5.0, 0.0, theme::ACCENT); + ui.rounded(cx + (bw * v).clamp(0.0, bw - 10.0), cy + 11.5, 10.0, 10.0, 0.0, theme::TEXT); + } + _ => { + let key_row = slot.key.is_some(); + let bind_w = if key_row { cw - 32.0 } else { cw }; + let plate = if *enabled { theme::HOVER } else { theme::CHIP }; + ui.rounded(cx, cy, bind_w, ch, 0.0, plate); + ui.border(cx, cy, bind_w, ch, 0.0, theme::BORDER); + if !value.is_empty() { + let tw = ui.measure(Face::Menu, 11.0, value); + ui.text(Face::Menu, 11.0, cx + bind_w - tw - 10.0, cy + 4.0, color, value); + } + if key_row { + let rx = cx + cw - 26.0; + let hot = slot.reset; + ui.rounded( + rx, + cy, + 26.0, + ch, + 0.0, + if hot { + theme::faded(theme::ACCENT, 0.22) + } else { + theme::CHIP + }, + ); + ui.border( + rx, + cy, + 26.0, + ch, + 0.0, + if hot { theme::ACCENT } else { theme::BORDER }, + ); + super::icons::draw( + &mut ui, + "trash", + [rx + 6.0, cy + 5.0, 14.0, 14.0], + if hot { theme::ACCENT } else { theme::LOCKED }, + ); + } else if matches!(control, Control::Action) { + ui.rounded(cx + cw - 4.0, cy + 8.0, 2.0, 8.0, 0.0, theme::ACCENT); + } + } + } + } + } + } + + // The explanation panel: the hovered setting, else the page's own note. + let clip = [ + ui.to_gui(RAIL + PAD), + ui.to_gui(list_top), + ui.to_gui(w - TIPS + 8.0), + ui.to_gui(list_bottom), + ]; + ui.batch.clip_since(rows_clip, clip[0], clip[1], clip[2], clip[3]); + // The page's scrollbar, between the rows and the explanation panel. + let content_h = slots.last().map_or(0.0, |slot| slot.top + slot.h); + if content_h > list_bottom - list_top { + let track = list_bottom - list_top; + let thumb = (track * track / content_h).clamp(24.0, track); + let ty = list_top + (scroll / (content_h - track).max(1.0)) * (track - thumb); + let sx = w - TIPS - 6.0; + ui.rounded(sx, list_top, 4.0, track, 0.0, theme::BORDER_SOFT); + ui.rounded(sx, ty, 4.0, thumb, 0.0, theme::THUMB); + } + let tips_x = w - TIPS + 8.0; + ui.rounded(tips_x, list_top, TIPS - PAD - 8.0, list_bottom - list_top, 0.0, theme::PANEL); + let (tip_title, tip_text) = match hovered_tip { + Some(tip) => tip, + None => (label(page), crate::options_ui::page_tooltip(page).unwrap_or("").to_owned()), + }; + let mut ty = list_top + 16.0; + if !tip_title.is_empty() { + ui.text(Face::MenuStrong, 11.0, tips_x + 14.0, ty, theme::TEXT, &upper(&tip_title)); + ty += 24.0; + } + for line in wrap(&tip_text, 30) { + ui.text(Face::Menu, 11.0, tips_x + 14.0, ty, theme::SOFT, &line); + ty += 16.0; + } + + // The footer: where we are, the version with the credit, and the way back. + let credit = format!( + "RustNotMC {} · основано на Horizon (Rust-клиент, MIT)", + horizon_core::release::VERSION + ); + ui.text(Face::Menu, 10.0, PAD, h - FOOTER + 20.0, theme::MUTED, &credit); + let [bx, by, bw, bh] = back_rect(w, h); + let hover = at.0 >= bx && at.0 < bx + bw && at.1 >= by && at.1 < by + bh; + ui.rounded(bx, by, bw, bh, 0.0, if hover { theme::HOVER } else { theme::CHIP }); + ui.border(bx, by, bw, bh, 0.0, theme::BORDER); + ui.text_centered(Face::MenuStrong, 11.0, bx + bw / 2.0, by + 6.0, theme::TEXT, "НАЗАД"); + ui.finish(); +} + +/// Handles a press: the rail, the back button or a row. `None` means the press +/// is not the shell's and the caller should run its own handling. +pub fn click( + o: &mut OptionsUi, + s: &mut Settings, + atlas: &HudAtlas, + cursor: (f32, f32), + size: (f32, f32), + framebuffer: [i32; 2], + drag: bool, + right: bool, +) -> Option> { + let frame = super::Frame::new(size, o.scale.max(0.1), cursor); + let (w, h) = (frame.w, frame.h); + let at = frame.at(); + let slots = slots(o, s, size.0, size.1); + let content = slots.last().map_or(0.0, |slot| slot.top + slot.h); + let viewport = (h - FOOTER - 8.0 - HEAD).max(1.0); + let max_scroll = (content - viewport).max(0.0); + let sb_x = w - TIPS - 10.0; + let in_bar = at.0 >= sb_x && at.0 < w - TIPS && at.1 >= HEAD && at.1 < h - FOOTER - 8.0; + if drag && o.rust_scroll_drag.is_some() { + let t = ((at.1 - HEAD) / viewport).clamp(0.0, 1.0); + o.rust_scroll_target = t * max_scroll; + o.rust_scroll = o.rust_scroll_target; + return Some(Vec::new()); + } + if !right && in_bar && max_scroll > 0.0 { + o.rust_scroll_drag = Some(at.1); + let t = ((at.1 - HEAD) / viewport).clamp(0.0, 1.0); + o.rust_scroll_target = t * max_scroll; + o.rust_scroll = o.rust_scroll_target; + return Some(Vec::new()); + } + if drag { + // A held graphics slider follows the pointer across its bar. + if let Some(item) = o.rust_graphics_drag { + let (cx, cw) = control_rect(w); + let fx = ((at.0 - cx) / cw).clamp(0.0, 1.0); + item.set_slider(s, fx); + return Some(vec![crate::options_ui::Event::Changed]); + } + // A held slider follows the pointer across its own bar. + let Some(opt) = o.dragging else { + return Some(Vec::new()); + }; + let Some(slot) = slots.iter().find(|slot| slot.opt == Some(opt)) else { + return Some(Vec::new()); + }; + let (bx, bw) = control_rect(w); + let fx = ((at.0 - bx) / bw).clamp(0.0, 1.0); + let vx = slot.vanilla[0] + slot.vanilla[2] * fx; + let vy = slot.vanilla[1] + slot.vanilla[3] / 2.0; + return Some(o.click_vanilla(s, atlas, vx, vy, size, framebuffer, true, false)); + } + if !right { + let [bx, by, bw, bh] = back_rect(w, h); + if at.0 >= bx && at.0 < bx + bw && at.1 >= by && at.1 < by + bh { + return Some(o.back(s)); + } + if let Some(page) = rail_at(at, h, o.rust_rail) { + let in_world = o.in_world; + o.open_at(in_world, page); + o.rust_scroll = 0.0; + o.rust_scroll_target = 0.0; + return Some(vec![crate::options_ui::Event::ButtonClick]); + } + } + // A row forwards its press to the widget it stands for. + let list_top = HEAD; + let list_bottom = h - FOOTER - 8.0; + if at.0 >= RAIL + PAD && at.0 < w - TIPS && at.1 >= list_top && at.1 < list_bottom { + for slot in &slots { + let y = list_top + slot.top - o.rust_scroll; + if at.1 >= y && at.1 < y + slot.h { + // A key binding row: the plate rebinds, the red square resets. + if let Some(key) = slot.key { + let (cx, cw) = control_rect(w); + let cy = y + 6.0; + let reset_hot = slot.reset + && at.0 >= cx + cw - 26.0 + && at.0 < cx + cw + && at.1 >= cy + && at.1 < cy + 24.0; + if reset_hot { + s.keys + .set(key, crate::keybinds::KeyBinds::default_of(key)); + return Some(vec![ + crate::options_ui::Event::ButtonClick, + crate::options_ui::Event::Changed, + ]); + } + if at.0 >= cx && at.0 < cx + cw - 32.0 { + o.selected_key = Some(key); + return Some(vec![crate::options_ui::Event::ButtonClick]); + } + return Some(Vec::new()); + } + // A resource pack row selects or opens the folder. + if let Some(pack) = &slot.pack { + return Some(pack_click(o, pack, s)); + } + // A graphics row edits its own setting; the others forward + // their press to the widget they stand for. + if let Some(item) = slot.item { + let (cx, cw) = control_rect(w); + if at.0 >= cx && at.0 < cx + cw { + if item.slider(s).is_some() { + let fx = ((at.0 - cx) / cw).clamp(0.0, 1.0); + item.set_slider(s, fx); + o.rust_graphics_drag = Some(item); + return Some(vec![ + crate::options_ui::Event::ButtonClick, + crate::options_ui::Event::Changed, + ]); + } + item.cycle(s, right, framebuffer); + return Some(vec![ + crate::options_ui::Event::ButtonClick, + crate::options_ui::Event::Changed, + ]); + } + return Some(Vec::new()); + } + let fx = match &slot.kind { + Kind::Row { + control: Control::Slider(_), + .. + } => { + let (bx, bw) = control_rect(w); + ((at.0 - bx) / bw).clamp(0.0, 1.0) + } + _ => 0.5, + }; + let vx = slot.vanilla[0] + slot.vanilla[2] * fx; + let vy = slot.vanilla[1] + slot.vanilla[3] / 2.0; + return Some(o.click_vanilla(s, atlas, vx, vy, size, framebuffer, false, right)); + } + } + } + Some(Vec::new()) +} + +/// The row's control on the right: where it starts and how wide it is, in dp +/// (the same numbers `draw` paints with). +fn control_rect(w: f32) -> (f32, f32) { + let row_w = w - RAIL - TIPS - PAD * 2.0; + let cw = (row_w * 0.42).clamp(140.0, 240.0); + (RAIL + PAD + row_w - cw - 10.0, cw) +} + +fn upper(text: &str) -> String { + text.to_uppercase() +} +/// Greedy wrap for the explanation panel (the HUD's own font is not measured +/// here; 30 characters read well in the panel at 11 dp). +fn wrap(text: &str, limit: usize) -> Vec { + let mut lines = Vec::new(); + let mut line = String::new(); + for word in text.split_whitespace() { + if !line.is_empty() && line.chars().count() + 1 + word.chars().count() > limit { + lines.push(std::mem::take(&mut line)); + } + if !line.is_empty() { + line.push(' '); + } + line.push_str(word); + } + if !line.is_empty() { + lines.push(line); + } + lines +} + + +#[cfg(test)] +mod tests { + use super::*; + use crate::hud::{HudAtlas, HudBatch}; + use std::path::Path; + + fn atlas() -> HudAtlas { + HudAtlas::build(Path::new("/nonexistent/horizon-test-assets")).unwrap() + } + fn fixture(page: Page) -> (OptionsUi, Settings) { + let mut o = OptionsUi::default(); + o.rust = true; + o.open_at(false, page); + (o, Settings::default()) + } + fn canvas(w: f32, h: f32) -> HudBatch { + let mut batch = HudBatch::new([1920, 1080]); + batch.scale = 1.0; + batch.width = w; + batch.height = h; + batch + } + + /// Every page the shell draws paints, and its rows stack in order. + #[test] + fn every_rust_page_draws_its_rows_in_order() { + let atlas = atlas(); + for page in GROUPS.iter().flat_map(|group| group.iter().copied()) { + if keeps_its_screen(page) { + continue; + } + let (mut o, s) = fixture(page); + let rows = slots(&mut o, &s, 1040.0, 700.0); + let mut y = -1.0; + for row in &rows { + assert!(row.top > y, "{page:?}: rows out of order"); + y = row.top; + if !matches!(row.kind, Kind::Header(_)) { + assert!( + row.vanilla[2] > 0.0 + || row.item.is_some() + || row.pack.is_some() + || row.key.is_some(), + "{page:?}: a row without a widget" + ); + } + } + let mut batch = canvas(1040.0, 700.0); + crate::ui_theme::reset_atlas(); + o.draw(&s, &mut batch, &atlas, (0.0, 0.0)); + assert!(!batch.vertices.is_empty(), "{page:?} draws nothing"); + assert!(!batch.patches.is_empty(), "{page:?} draws no text"); + } + } + + /// The rail opens the page it names, and the footer's НАЗАД leaves it. + #[test] + fn the_rail_opens_a_page_and_the_footer_goes_back() { + let atlas = atlas(); + let (mut o, mut s) = fixture(Page::Main); + let (items, _) = rail_items(); + let second = RAIL_TOP + items[1].1 + RAIL_ITEM / 2.0; + o.click(&mut s, &atlas, 60.0, second, (1040.0, 700.0), [1040, 700], false, false); + assert_eq!(o.page(), items[1].0); + let [bx, by, bw, bh] = back_rect(1040.0, 700.0); + let events = o.click( + &mut s, + &atlas, + bx + bw / 2.0, + by + bh / 2.0, + (1040.0, 700.0), + [1040, 700], + false, + false, + ); + assert!(!events.is_empty(), "the way back reports itself"); + } + + /// A row forwards its press to the setting it stands for. + #[test] + fn a_cycle_row_changes_its_setting() { + let atlas = atlas(); + let (mut o, mut s) = fixture(Page::Video); + let rows = slots(&mut o, &s, 1040.0, 700.0); + let row = rows + .iter() + .find(|row| { + matches!( + row.kind, + Kind::Row { + control: Control::Cycle, + enabled: true, + .. + } + ) + }) + .expect("a setting to cycle"); + let events = o.click( + &mut s, + &atlas, + RAIL + PAD + 60.0, + HEAD + row.top + row.h / 2.0, + (1040.0, 700.0), + [1040, 700], + false, + false, + ); + assert!( + events.contains(&crate::options_ui::Event::Changed), + "{events:?}" + ); + } + + /// A graphics row edits its own setting, and lets go on release. + #[test] + fn a_graphics_row_edits_its_setting() { + let atlas = atlas(); + let (mut o, mut s) = fixture(Page::Graphics); + let rows = slots(&mut o, &s, 1040.0, 700.0); + let row = rows + .iter() + .find(|row| { + row.item.is_some() + && matches!(row.kind, Kind::Row { control: Control::Cycle, .. }) + }) + .expect("a graphics cycle row"); + let (cx, cw) = control_rect(1040.0); + let events = o.click( + &mut s, + &atlas, + cx + cw / 2.0, + HEAD + row.top + row.h / 2.0, + (1040.0, 700.0), + [1040, 700], + false, + false, + ); + assert!(events.contains(&crate::options_ui::Event::Changed), "{events:?}"); + } + /// The resource packs page is the shell's own: its folder row opens the + /// folder through the game's event. + #[test] + fn the_packs_page_opens_its_folder() { + let atlas = atlas(); + let (mut o, mut s) = fixture(Page::Packs); + let rows = slots(&mut o, &s, 1040.0, 700.0); + let row = rows + .iter() + .find(|row| row.pack == Some(PackHit::Folder)) + .expect("the folder row"); + let events = o.click( + &mut s, + &atlas, + RAIL + PAD + 40.0, + HEAD + row.top + row.h / 2.0, + (1040.0, 700.0), + [1040, 700], + false, + false, + ); + assert!( + events.contains(&crate::options_ui::Event::OpenPackFolder), + "{events:?}" + ); + } + /// Key binds pair the action, its bind plate and the red reset square. + #[test] + fn keybinds_pair_the_bind_and_the_reset() { + use crate::keybinds::KeyBinds; + let atlas = atlas(); + let (mut o, mut s) = fixture(Page::KeyBinds); + s.keys.set("key.jump", "key.keyboard.g"); + let rows = slots(&mut o, &s, 1040.0, 700.0); + let jump = rows + .iter() + .find(|row| row.key == Some("key.jump")) + .expect("the jump row"); + assert!(jump.reset, "a changed bind can be reset"); + let (cx, cw) = control_rect(1040.0); + let click = |o: &mut OptionsUi, s: &mut Settings, x: f32, y: f32| { + o.click( + s, + &atlas, + x, + y, + (1040.0, 700.0), + [1040, 700], + false, + false, + ) + }; + // The bind plate waits for a key. + let y = HEAD + jump.top + jump.h / 2.0; + let events = click(&mut o, &mut s, cx + 40.0, y); + assert!(events.contains(&crate::options_ui::Event::ButtonClick)); + assert_eq!(o.selected_key, Some("key.jump")); + // The trash square restores the default. + let events = click(&mut o, &mut s, cx + cw - 13.0, y); + assert!(events.contains(&crate::options_ui::Event::Changed), "{events:?}"); + assert_eq!(s.keys.get("key.jump"), KeyBinds::default_of("key.jump")); + } + /// The wheel scrolls the shell's own list, never past its top. + #[test] + fn the_wheel_scrolls_the_rows_and_stops_at_the_top() { + let (mut o, s) = fixture(Page::Video); + o.scroll_at(&s, (480.0, 270.0), (300.0, 200.0), -3.0); + assert!(o.rust_scroll_target > 0.0); + o.scroll_at(&s, (480.0, 270.0), (300.0, 200.0), 99.0); + assert_eq!(o.rust_scroll_target, 0.0); + } +} diff --git a/crates/horizon-client/src/rustui/tests.rs b/crates/horizon-client/src/rustui/tests.rs new file mode 100644 index 0000000..b73a638 --- /dev/null +++ b/crates/horizon-client/src/rustui/tests.rs @@ -0,0 +1,378 @@ +use super::*; +use crate::hud::HudBatch; +use std::path::Path; + +fn atlas() -> HudAtlas { + HudAtlas::build(Path::new("/nonexistent/horizon-test-assets")).unwrap() +} +fn frame(w: f32, h: f32) -> Frame { + Frame::new((w, h), 1.0, (0.0, 0.0)) +} +fn meta() -> Meta { + Meta { elapsed: 12.0 } +} +fn home() -> RustMenu { + RustMenu::new(Path::new("")) +} +/// A batch whose GUI pixels are its dp ones, so test coordinates are layout ones. +fn canvas(w: f32, h: f32) -> HudBatch { + let mut batch = HudBatch::new([1920, 1080]); + batch.scale = 1.0; + batch.width = w; + batch.height = h; + batch +} +fn button<'a>(nodes: &'a [Node], label: &str) -> &'a Node { + nodes + .iter() + .find(|node| matches!(node, Node::Button { label: l, .. } if l == label)) + .unwrap_or_else(|| panic!("no button {label}")) +} +fn center([x, y, w, h]: [f32; 4]) -> (f32, f32) { + (x + w / 2.0, y + h / 2.0) +} +fn overlap(a: [f32; 4], b: [f32; 4]) -> bool { + a[0] < b[0] + b[2] && b[0] < a[0] + a[2] && a[1] < b[1] + b[3] && b[1] < a[1] + a[3] +} + +#[test] +fn layout_stays_inside_the_frame_on_every_window() { + for (w, h) in [(1040.0, 700.0), (1244.0, 700.0), (900.0, 620.0)] { + for tab in [Tab::Home, Tab::Play] { + let mut menu = home().with_saved(vec![("Alpha".into(), "1.1.1.1".into())]); + menu.tab = tab; + let nodes = menu.layout(&frame(w, h), ""); + for node in &nodes { + let [x, y, bw, bh] = node.rect(); + assert!( + x >= -0.01 && y >= -0.01 && x + bw <= w + 0.01 && y + bh <= h + 0.01, + "{tab:?} {w}x{h}: {node:?}" + ); + } + // The bar's plates never collide. + let bar: Vec<[f32; 4]> = nodes + .iter() + .filter_map(|node| match node { + Node::Button { rect, .. } if rect[1] < TOP => Some(*rect), + _ => None, + }) + .collect(); + for (i, a) in bar.iter().enumerate() { + for b in &bar[i + 1..] { + assert!(!overlap(*a, *b), "{tab:?} {w}x{h}: {a:?} over {b:?}"); + } + } + } + } +} + +#[test] +fn bar_is_tabs_and_actions_without_a_wordmark() { + let nodes = home().layout(&frame(1040.0, 700.0), ""); + // Nothing sits at the far left of the bar: the tabs start in the centre. + assert!( + nodes + .iter() + .filter(|node| node.rect()[1] < TOP) + .all(|node| node.rect()[0] > 150.0), + "the bar has no wordmark" + ); + assert!(matches!( + button(&nodes, "ГЛАВНАЯ"), + Node::Button { + variant: Variant::Tab { active: true }, + id: Some(Hit::Tab(Tab::Home)), + icon: Some("house"), + .. + } + )); + assert!(matches!( + button(&nodes, "ИГРАТЬ"), + Node::Button { + variant: Variant::Tab { active: false }, + id: Some(Hit::Tab(Tab::Play)), + .. + } + )); + for locked in ["МАГАЗИН", "ИНВЕНТАРЬ"] { + assert!( + matches!( + button(&nodes, locked), + Node::Button { + id: None, + enabled: false, + tip: Some(TIP), + .. + } + ), + "{locked}" + ); + } + assert!(matches!( + button(&nodes, "НАСТРОЙКИ"), + Node::Button { + id: Some(Hit::Options), + .. + } + )); + assert!(matches!( + button(&nodes, "ВЫЙТИ"), + Node::Button { id: Some(Hit::Quit), .. } + )); +} + +#[test] +fn locked_tabs_do_not_press() { + let mut menu = home(); + let at = { + let nodes = menu.layout(&frame(1040.0, 700.0), ""); + center(button(&nodes, "МАГАЗИН").rect()) + }; + let (outcome, sound) = menu.click(&Frame::new((1040.0, 700.0), 1.0, at), ""); + assert_eq!(outcome, Outcome::None); + assert!(!sound, "a locked tab does not click"); +} + +#[test] +fn rows_merge_the_last_server_dedupe_and_cap() { + let menu = RustMenu::new(Path::new("")).with_saved(vec![ + ("Alpha".into(), "1.1.1.1".into()), + ("Beta".into(), "2.2.2.2".into()), + ("Alpha again".into(), "1.1.1.1".into()), + ("Gamma".into(), "3.3.3.3".into()), + ("Delta".into(), "4.4.4.4".into()), + ]); + let rows = menu.rows("9.9.9.9"); + assert_eq!(rows.len(), 3); + assert_eq!(rows[0], ("9.9.9.9".to_owned(), "9.9.9.9".to_owned())); + assert_eq!(rows[1], ("Alpha".to_owned(), "1.1.1.1".to_owned())); + assert_eq!(rows[2], ("Beta".to_owned(), "2.2.2.2".to_owned())); + let rows = menu.rows("1.1.1.1"); + assert_eq!(rows[0], ("Alpha".to_owned(), "1.1.1.1".to_owned())); + assert_eq!(rows.len(), 3); + assert!(home().rows("").is_empty()); +} + +#[test] +fn click_routes_every_outcome() { + let mut menu = home(); + let (local, options, quit, play) = { + let nodes = menu.layout(&frame(1040.0, 700.0), ""); + ( + center(button(&nodes, "ОДИНОЧНАЯ ИГРА").rect()), + center(button(&nodes, "НАСТРОЙКИ").rect()), + center(button(&nodes, "ВЫЙТИ").rect()), + center(button(&nodes, "ИГРАТЬ").rect()), + ) + }; + let at = |cursor| Frame::new((1040.0, 700.0), 1.0, cursor); + assert_eq!(menu.click(&at(local), ""), (Outcome::LocalWorlds, true)); + assert_eq!(menu.click(&at(options), ""), (Outcome::Options, true)); + assert_eq!(menu.click(&at(quit), ""), (Outcome::Quit, true)); + assert_eq!(menu.click(&at((520.0, 350.0)), ""), (Outcome::None, false)); + assert_eq!(menu.click(&at(play), ""), (Outcome::None, true)); + assert_eq!(menu.tab, Tab::Play, "a tab press switches in place"); +} + +#[test] +fn click_on_a_quick_connect_row_reports_its_address() { + let mut menu = home().with_saved(vec![("Alpha".into(), "1.1.1.1".into())]); + let at = { + let nodes = menu.layout(&frame(1040.0, 700.0), ""); + nodes + .iter() + .find_map(|node| match node { + Node::Button { + rect, + id: Some(Hit::Connect(ip)), + .. + } if ip == "1.1.1.1" => Some(center(*rect)), + _ => None, + }) + .expect("the saved server is a row") + }; + let (outcome, sound) = menu.click(&Frame::new((1040.0, 700.0), 1.0, at), ""); + assert_eq!(outcome, Outcome::Connect("1.1.1.1".to_owned())); + assert!(sound); +} + +#[test] +fn the_carousel_turns() { + let mut menu = home(); + let at = |cursor| Frame::new((1040.0, 700.0), 1.0, cursor); + let next = { + let nodes = menu.layout(&frame(1040.0, 700.0), ""); + nodes + .iter() + .find_map(|node| match node { + Node::Button { + rect, + id: Some(Hit::NewsNext), + .. + } => Some(center(*rect)), + _ => None, + }) + .expect("next") + }; + assert_eq!(menu.click(&at(next), ""), (Outcome::None, true)); + assert_eq!(menu.news.get(), 1); + let caption = menu + .layout(&frame(1040.0, 700.0), "") + .into_iter() + .find_map(|node| match node { + Node::Text { text, .. } if text == NEWS[1].0 => Some(()), + _ => None, + }); + assert!(caption.is_some(), "the second slide is drawn"); +} + +#[test] +fn hovering_a_locked_tab_shows_its_tip() { + crate::ui_theme::reset_atlas(); + let atlas = atlas(); + let menu = home(); + let chip_at = { + let nodes = menu.layout(&frame(1040.0, 700.0), ""); + center(button(&nodes, "МАГАЗИН").rect()) + }; + let mut plain = canvas(1040.0, 700.0); + menu.draw(&atlas, &mut plain, (0.0, 0.0), "", &meta()); + let mut hovered = canvas(1040.0, 700.0); + menu.draw(&atlas, &mut hovered, chip_at, "", &meta()); + assert!( + hovered.vertices.len() > plain.vertices.len(), + "the tooltip adds a plate and a line: {} vs {}", + hovered.vertices.len(), + plain.vertices.len() + ); +} + +#[test] +fn draw_paints_the_shell_and_the_icons() { + crate::ui_theme::reset_atlas(); + let atlas = atlas(); + let menu = home(); + let mut batch = canvas(1244.0, 700.0); + menu.draw(&atlas, &mut batch, (0.0, 0.0), "", &meta()); + assert!(!batch.vertices.is_empty(), "scrims, plates and text"); + assert!(!batch.patches.is_empty(), "icons and glyphs upload"); +} + +#[test] +fn the_bundled_faces_cover_the_menu_strings() { + use ab_glyph::{Font as _, FontRef, GlyphId}; + let condensed = FontRef::try_from_slice(horizon_theme::fonts::ROBOTO_CONDENSED_REGULAR).unwrap(); + for ch in "ГЛАВНАЯ ИГРАТЬ НАСТРОЙКИ ВЫЙТИ МАГАЗИН ИНВЕНТАРЬ БЫСТРОЕ ПОДКЛЮЧЕНИЕ \ + ОДИНОЧНАЯ СЕРВЕРЫ НАЙДЕНЫ ДЕВБЛОГ СПИСОК ИЗМЕНЕНИЙ ПОДРОБНЕЕ НОВОЕ МЕНЮ \ + Нажмите чтобы начать общаться … · —" + .chars() + { + assert_ne!(condensed.glyph_id(ch), GlyphId(0), "Roboto Condensed lacks {ch:?}"); + } + let display = FontRef::try_from_slice(horizon_theme::fonts::OSWALD_SEMIBOLD).unwrap(); + for ch in "НОВОЕ МЕНЮ МАГАЗИН СЕРВЕРЫ".chars() { + assert_ne!(display.glyph_id(ch), GlyphId(0), "Oswald lacks {ch:?}"); + } +} + +#[test] +fn the_atlas_carries_the_menu_icons() { + let atlas = atlas(); + for name in ["house", "settings", "newspaper", "arrow-right", "user"] { + let key = icons::sprite(name); + let rect = *atlas.sprites.get(&key).unwrap_or_else(|| panic!("{key}")); + let (x, y) = ( + (rect.u0 * atlas.width as f32) as usize, + (rect.v0 * atlas.height as f32) as usize, + ); + let mut lit = 0; + for dy in 0..rect.h as usize { + for dx in 0..rect.w as usize { + let i = ((y + dy) * atlas.width as usize + x + dx) * 4; + if atlas.pixels.get(i + 3).is_some_and(|a| *a > 0) { + lit += 1; + } + } + } + assert!(lit > 50, "{name}: only {lit} lit pixels"); + } +} + +#[test] +fn the_play_tab_lists_servers_and_opens_their_card() { + let mut menu = home().with_saved(vec![("Alpha".into(), "alpha.example:25565".into())]); + menu.tab = Tab::Play; + let nodes = menu.layout(&frame(1040.0, 700.0), ""); + assert!( + nodes + .iter() + .any(|node| matches!(node, Node::Text { text, .. } if text == "Alpha")), + "the saved server is a row" + ); + // A press on the row opens the card. + let row = nodes + .iter() + .find_map(|node| match node { + Node::Button { + rect, + id: Some(Hit::OpenServer(0)), + .. + } => Some(center(*rect)), + _ => None, + }) + .expect("the row's hit area"); + assert!(menu.click(&Frame::new((1040.0, 700.0), 1.0, row), "").1); + let nodes = menu.layout(&frame(1040.0, 700.0), ""); + let (connect, ip) = nodes + .iter() + .find_map(|node| match node { + Node::Button { + rect, + id: Some(Hit::Connect(ip)), + .. + } => Some((center(*rect), ip.clone())), + _ => None, + }) + .expect("the card's connect button"); + assert_eq!(ip, "alpha.example:25565"); + assert_eq!( + menu.click(&Frame::new((1040.0, 700.0), 1.0, connect), ""), + (Outcome::Connect("alpha.example:25565".to_owned()), true) + ); +} + +#[test] +fn the_play_tab_has_an_empty_state_and_filters_toggle() { + let mut menu = home(); + menu.tab = Tab::Play; + let nodes = menu.layout(&frame(1040.0, 700.0), ""); + let add = nodes + .iter() + .find_map(|node| match node { + Node::Button { + rect, + id: Some(Hit::Servers), + .. + } => Some(center(*rect)), + _ => None, + }) + .expect("the add button"); + assert_eq!( + menu.click(&Frame::new((1040.0, 700.0), 1.0, add), ""), + (Outcome::Servers, true) + ); + let toggle = nodes + .iter() + .find_map(|node| match node { + Node::Button { + rect, + id: Some(Hit::Toggle("mode:hardcore")), + .. + } => Some(center(*rect)), + _ => None, + }) + .expect("the hardcore filter"); + assert!(!menu.filter("mode:hardcore")); + menu.click(&Frame::new((1040.0, 700.0), 1.0, toggle), ""); + assert!(menu.filter("mode:hardcore")); +} diff --git a/crates/horizon-client/src/rustui/theme.rs b/crates/horizon-client/src/rustui/theme.rs new file mode 100644 index 0000000..da23f95 --- /dev/null +++ b/crates/horizon-client/src/rustui/theme.rs @@ -0,0 +1,125 @@ +//! The Rust menu's palette: warm charcoal scrims over the blurred scene, one +//! rust-red accent, one amber primary, olive for positive marks. Square +//! corners everywhere; the palette is WCAG-tested against the brightest +//! backdrop the design system measures. +use crate::hud::{HudAtlas, Rect}; +use crate::ui_theme::color::hex; + +/// The top bar's scrim: a dark grey that fades to nothing over the scene. +pub const SCRIM_TOP: u32 = hex(0x141312, 195); +/// The bottom scrim under the chat strip. +pub const SCRIM_BOTTOM: u32 = hex(0x0a0a0a, 190); +/// Cards and floating panels (quick connect, devblog, news). +pub const PANEL: u32 = hex(0x171614, 215); +/// A hovered or focused panel. +pub const PANEL_HI: u32 = hex(0x201e1b, 225); +/// The settings rail and the footer. +pub const RAIL: u32 = hex(0x121110, 200); +/// Hovered plates. +pub const HOVER: u32 = hex(0xffffff, 16); +/// The active tab's plate: a grey lift, never a black box. +pub const ACTIVE: u32 = hex(0xffffff, 24); +/// Locked chips and badges. +pub const CHIP: u32 = hex(0xffffff, 10); +/// One-pixel light rules and panel borders. +pub const BORDER: u32 = hex(0xffffff, 26); +/// A darker inset rule (row separators). +pub const BORDER_SOFT: u32 = hex(0x000000, 110); +/// Text, secondary text and quiet labels. +pub const TEXT: u32 = hex(0xf0ede8, 255); +pub const SOFT: u32 = hex(0xc9c4bc, 255); +pub const MUTED: u32 = hex(0xa8a29a, 255); +/// Disabled controls. +pub const LOCKED: u32 = hex(0x6d6862, 255); +/// Rust's orange-red: sliders, the news accent, the active edge. +pub const ACCENT: u32 = hex(0xc8502d, 255); +pub const ACCENT_HOVER: u32 = hex(0xe0603c, 255); +/// The one primary action. +pub const PRIMARY: u32 = hex(0xe0a92e, 255); +pub const PRIMARY_HOVER: u32 = hex(0xf0bb42, 255); +pub const ON_PRIMARY: u32 = hex(0x1a1610, 255); +/// Fresh, positive marks (the devblog badge). +pub const POSITIVE: u32 = hex(0x7f9a4e, 255); +pub const ON_POSITIVE: u32 = hex(0x14170d, 255); +/// Tooltips. +pub const TIP_BG: u32 = hex(0x101010, 245); +/// The dimming under a modal card. +pub const OVERLAY: u32 = hex(0x000000, 170); +/// The settings pages dim the scene more than the menu does. +pub const DIM: u32 = hex(0x050505, 130); +/// Slider tracks. +pub const TRACK: u32 = hex(0xffffff, 34); +/// Scrollbar thumbs. +pub const THUMB: u32 = hex(0xffffff, 60); + +/// A Figma-exported sprite of this name, if the export is in the resource root +/// (`gui/sprites/rustui/`); `None` means the procedural painting takes +/// over. +pub fn sprite(atlas: &HudAtlas, name: &str) -> Option { + atlas + .sprites + .get(&format!("gui/sprites/rustui/{name}")) + .copied() +} + +/// `color` with its alpha scaled by `a` (0..1). +pub const fn faded(color: u32, a: f32) -> u32 { + let alpha = (color >> 24) as f32 * a; + ((alpha as u32) << 24) | (color & 0x00ff_ffff) +} + +/// `a` over `b` at `t`, each channel (including alpha) interpolated. +pub fn mix(a: u32, b: u32, t: f32) -> u32 { + let t = t.clamp(0.0, 1.0); + let ch = |shift: u32| { + let x = ((a >> shift) & 255) as f32; + let y = ((b >> shift) & 255) as f32; + ((x * (1.0 - t) + y * t).round() as u32) << shift + }; + ch(24) | ch(16) | ch(8) | ch(0) +} + +#[cfg(test)] +mod tests { + use super::*; + use horizon_theme::{BRIGHT_BACKDROP, contrast}; + + fn rgb(c: u32) -> u32 { + c & 0x00ff_ffff + } + /// The worst case: a panel over the brightest backdrop the design system + /// measures (the blur is a photographic scene, not a flat colour). + fn panel(over: u32) -> u32 { + mix(rgb(over), rgb(PANEL), (PANEL >> 24) as f32 / 255.0) + } + /// The top scrim over the same backdrop. + fn scrim() -> u32 { + mix(rgb(BRIGHT_BACKDROP), rgb(SCRIM_TOP), (SCRIM_TOP >> 24) as f32 / 255.0) + } + + #[test] + fn menu_text_meets_wcag_aa_over_scrims_and_panels() { + let over_scrim = scrim(); + for text in [TEXT, SOFT] { + let ratio = contrast(rgb(text), over_scrim); + assert!(ratio >= 4.5, "#{text:06x} over scrim: {ratio:.2}"); + } + let card = panel(BRIGHT_BACKDROP); + for text in [TEXT, SOFT, MUTED] { + let ratio = contrast(rgb(text), card); + assert!(ratio >= 4.5, "#{text:06x} over the worst panel: {ratio:.2}"); + } + assert!(contrast(rgb(ON_PRIMARY), rgb(PRIMARY)) >= 4.5, "the primary label"); + assert!(contrast(rgb(ON_POSITIVE), rgb(POSITIVE)) >= 4.5, "the badge label"); + assert!(contrast(rgb(ON_PRIMARY), rgb(PRIMARY_HOVER)) >= 4.5, "the hovered primary"); + } + + #[test] + fn sprite_resolution_needs_the_export() { + let atlas = crate::hud::HudAtlas::build(std::path::Path::new( + "/nonexistent/horizon-test-assets", + )) + .unwrap(); + assert!(sprite(&atlas, "panel").is_none()); + } +} diff --git a/crates/horizon-client/src/save.rs b/crates/horizon-client/src/save.rs index f07fc08..7d3c508 100644 --- a/crates/horizon-client/src/save.rs +++ b/crates/horizon-client/src/save.rs @@ -1218,7 +1218,7 @@ pub fn encode_with( Some(tag) => Some((start.name.as_str().into(), tag)), None => { log::warn!( - "Horizon: structure start {} not saved: one of its pieces cannot be", + "RustNotMC: structure start {} not saved: one of its pieces cannot be", start.name ); None @@ -1798,7 +1798,7 @@ fn resolve_poi( return Some(record.clone()); }; let old = read_region_record(root, cache, "poi", x, z).unwrap_or_else(|e| { - log::warn!("Horizon: could not read the poi record of chunk {x} {z}: {e}"); + log::warn!("RustNotMC: could not read the poi record of chunk {x} {z}: {e}"); None }); let tag = match (encode_poi(chunk, tables), old) { @@ -2108,7 +2108,7 @@ impl SaveDir { let result = write_region_records(&root, cache, folder, &records); if let Err(e) = &result { let message = format!("failed to write {folder} files: {e}"); - log::warn!("Horizon: {message}"); + log::warn!("RustNotMC: {message}"); *outstanding.error.lock().unwrap() = Some(message); } // Keep failed snapshots readable; never report them as durable. @@ -3746,7 +3746,7 @@ impl ChunkGenerator for Persistent { .save .save_protos(&saved, self.registry.registry, &self.biomes) { - log::warn!("Horizon: failed to save proto chunks: {e}"); + log::warn!("RustNotMC: failed to save proto chunks: {e}"); } } fn save_finished(&self, mut chunk: Chunk) { @@ -3760,7 +3760,7 @@ impl ChunkGenerator for Persistent { .save_later(&[Arc::new(chunk)], self.registry.registry, &self.biomes) .and_then(|_| self.save.save_entities_later(vec![(key, entities)])); if let Err(e) = saved { - log::warn!("Horizon: failed to save chunk {} {}: {e}", key.0, key.1); + log::warn!("RustNotMC: failed to save chunk {} {}: {e}", key.0, key.1); } } fn decorates(&self) -> bool { diff --git a/crates/horizon-client/src/server_packs.rs b/crates/horizon-client/src/server_packs.rs index 8e11217..c27f1f8 100644 --- a/crates/horizon-client/src/server_packs.rs +++ b/crates/horizon-client/src/server_packs.rs @@ -170,7 +170,7 @@ impl Default for ServerPacks { } impl ServerPacks { fn report(&mut self, id: u128, status: i32) { - log::debug!("Horizon: server pack {id:032x} changed status to {status}"); + log::debug!("RustNotMC: server pack {id:032x} changed status to {status}"); if self.reporting { self.replies.push((id, status)); } diff --git a/crates/horizon-client/src/server_packs/download.rs b/crates/horizon-client/src/server_packs/download.rs index 4b07596..98cacac 100644 --- a/crates/horizon-client/src/server_packs/download.rs +++ b/crates/horizon-client/src/server_packs/download.rs @@ -129,12 +129,12 @@ fn run( Err(_) => ("error", "no_access".into()), }, Err(e) => { - log::error!("Horizon: failed to download {}: {e}", request.url); + log::error!("RustNotMC: failed to download {}: {e}", request.url); ("error", "download_failed".into()) } }); if let Err(e) = append_log(&dir.join("log.json"), &entry) { - log::error!("Horizon: failed to log download of {}: {e}", request.url); + log::error!("RustNotMC: failed to log download of {}: {e}", request.url); } match result { Ok(path) => batch.downloaded.push((request.id, path)), @@ -199,13 +199,13 @@ pub fn download_file( let target = request.sha1.as_ref().map(|sha1| dir.join(sha1)); if let (Some(target), Some(sha1)) = (&target, &request.sha1) { if matches(target, sha1) { - log::info!("Horizon: returning cached file since actual hash matches requested"); + log::info!("RustNotMC: returning cached file since actual hash matches requested"); touch(target); return Ok(target.clone()); } if target.exists() { log::warn!( - "Horizon: existing file {} not found or had mismatched hash", + "RustNotMC: existing file {} not found or had mismatched hash", target.display() ); } @@ -349,7 +349,7 @@ pub fn vacuum(dir: &Path, max_files: usize) { } Ok(()) => {} Err(e) => log::warn!( - "Horizon: failed to delete cache file {}: {e}", + "RustNotMC: failed to delete cache file {}: {e}", path.display() ), } diff --git a/crates/horizon-client/src/sprites.rs b/crates/horizon-client/src/sprites.rs index 0d58719..3ba848c 100644 --- a/crates/horizon-client/src/sprites.rs +++ b/crates/horizon-client/src/sprites.rs @@ -176,7 +176,7 @@ impl Sprites { // `MissingTextureAtlasSprite.getLocation()`: vanilla models name the // missing texture on purpose (block/air.json's particle), #853. if name != "minecraft:missingno" { - log::warn!("Horizon: using the missing texture for {name}: {e}"); + log::warn!("RustNotMC: using the missing texture for {name}: {e}"); } // MissingTextureAtlasSprite.generateMissingImage: 16x16, // magenta and black quarters. diff --git a/crates/horizon-client/src/streaming.rs b/crates/horizon-client/src/streaming.rs index 6588ac3..89cb87c 100644 --- a/crates/horizon-client/src/streaming.rs +++ b/crates/horizon-client/src/streaming.rs @@ -1408,7 +1408,7 @@ impl Streaming { Ok(Done::Saved(protos)) => self.receive_saved(protos), Ok(other) => self.deferred.push(other), Err(_) => { - log::warn!("Horizon: chunk generation did not finish before saving"); + log::warn!("RustNotMC: chunk generation did not finish before saving"); break; } } diff --git a/crates/horizon-client/src/structure_blocks.rs b/crates/horizon-client/src/structure_blocks.rs index d05649f..2480229 100644 --- a/crates/horizon-client/src/structure_blocks.rs +++ b/crates/horizon-client/src/structure_blocks.rs @@ -126,7 +126,7 @@ pub fn loot_data(root: &Path) -> Option> { loot.get_or_insert_with(|| match LootData::load(root) { Ok(data) => Some(Arc::new(data)), Err(e) => { - log::warn!("Horizon: loot tables unavailable, structure containers stay empty: {e}"); + log::warn!("RustNotMC: loot tables unavailable, structure containers stay empty: {e}"); None } }) diff --git a/crates/horizon-client/src/telemetry.rs b/crates/horizon-client/src/telemetry.rs index afd2dbc..8437b0d 100644 --- a/crates/horizon-client/src/telemetry.rs +++ b/crates/horizon-client/src/telemetry.rs @@ -17,7 +17,7 @@ const MIN_SECONDS: f32 = 60.0; /// The details of a crash report that say what the game was doing, and only those: not the /// world, the server or the resource packs. -const CRASH_DETAILS: [&str; 3] = ["Horizon Version", "Graphics Adapter", "Render Settings"]; +const CRASH_DETAILS: [&str; 3] = ["RustNotMC Version", "Graphics Adapter", "Render Settings"]; static STARTED: OnceLock = OnceLock::new(); /// When the menu bundle became ready, so the time to the title screen measures @@ -204,7 +204,7 @@ pub fn crash_item(report: &crate::crash::Report) -> Item { /// Keeps the crash for the launcher to send, if the player allows crash reports. pub fn keep_crash(home: &Path, report: &crate::crash::Report) { if let Err(e) = outbox::push(home, &crash_item(report)) { - log::warn!("Horizon: could not keep the crash report to send: {e}"); + log::warn!("RustNotMC: could not keep the crash report to send: {e}"); } } @@ -218,7 +218,7 @@ pub fn keep_benchmark(home: &Path, report: &horizon_bench::Report) { home, &Item::new(Source::Game, version(), Payload::Benchmark(data)), ) { - log::warn!("Horizon: could not keep the benchmark report to send: {e}"); + log::warn!("RustNotMC: could not keep the benchmark report to send: {e}"); } } @@ -301,7 +301,7 @@ impl Session { { let item = Item::new(Source::Game, version(), Payload::Perf(perf)); if let Err(e) = outbox::push(home, &item) { - log::warn!("Horizon: could not keep the session's performance summary: {e}"); + log::warn!("RustNotMC: could not keep the session's performance summary: {e}"); } } *self = Self { @@ -374,7 +374,7 @@ mod tests { side: "client", details: vec![ ( - "Horizon Version".into(), + "RustNotMC Version".into(), "v2026.10.15 (client 0.1.0)".into(), ), ( @@ -402,7 +402,7 @@ mod tests { assert_eq!( crash.details, [( - "Horizon Version".to_owned(), + "RustNotMC Version".to_owned(), "v2026.10.15 (client 0.1.0)".to_owned() )] ); diff --git a/crates/horizon-client/src/title.rs b/crates/horizon-client/src/title.rs index d089173..166218a 100644 --- a/crates/horizon-client/src/title.rs +++ b/crates/horizon-client/src/title.rs @@ -144,6 +144,13 @@ pub struct Title { /// The prepared resource root: the flat preset list and block registry. resources: PathBuf, pub started: std::time::Instant, + /// The Rust-style menu (`rustui`): its selected tab and quick connect. + pub menu: crate::rustui::RustMenu, + /// `horizon.txt`'s `rustMenu`; off draws vanilla's Main screen instead. + pub rust_menu: bool, + /// The GUI scale of the last drawn frame: a press converts GUI pixels to + /// the menu's dp exactly as that frame did. + frame_scale: Cell, search: String, search_focused: bool, /// The focused text field's cursor, selection and scroll. @@ -244,10 +251,22 @@ impl Title { let today = chrono::Local::now(); let mode = Mode::Main; let now = std::time::Instant::now(); + // `horizon.txt` lives beside `options.txt`, in the saves' parent; the + // Rust menu is the default and vanilla's Main screen the rollback. + let dir = saves + .parent() + .filter(|dir| !dir.as_os_str().is_empty()) + .unwrap_or(&saves); + let rust_menu = crate::ui_theme::preference(dir, "rustMenu") + .is_none_or(|v| !matches!(v.trim().to_ascii_lowercase().as_str(), "false" | "0" | "off")); + let menu = crate::rustui::RustMenu::new(&saves); Self { mode, last_server: String::new(), saves, + menu, + rust_menu, + frame_scale: Cell::new(1.0), resources: resources.to_owned(), started: now, search: String::new(), @@ -667,6 +686,11 @@ impl Title { if self.rules.borrow().is_some() { return Vec::new(); } + // The Rust menu's plates are in its own dp layout: `click` hit-tests + // that layout, not these vanilla rectangles. + if self.rust_menu && matches!(self.mode, Mode::Main) { + return Vec::new(); + } let (w, h) = (w.ceil(), h.ceil()); let b = |x: f32, y: f32, w: f32, label: &str, enabled: bool, id: u8| Button { x, @@ -919,7 +943,16 @@ impl Title { if let Some(rules) = self.rules.borrow_mut().as_mut() { return rules.draw(batch, atlas, cursor); } + // A press in `click` converts GUI pixels with this frame's scale. + self.frame_scale.set(batch.scale); match &self.mode { + Mode::Main if self.rust_menu => { + let meta = crate::rustui::Meta { + elapsed: self.started.elapsed().as_secs_f32(), + }; + self.menu + .draw(atlas, batch, cursor, &self.last_server, &meta); + } Mode::Main => { // LogoRenderer: the logo's top 44 of 64 rows, then the edition // banner's top 14 of 16 rows overlapping its bottom by 7. @@ -964,7 +997,7 @@ impl Title { ]; } } - let version = format!("Horizon {} (Rust)", horizon_core::VANILLA_VERSION); + let version = format!("RustNotMC {} (Rust)", horizon_core::VANILLA_VERSION); batch.text(atlas, &version, 2.0, h - 10.0, u32::MAX, true); // A nightly names its build in the top-left corner, the one spot no button reaches at any GUI // scale, so screenshots and reports say which build they come from. @@ -1323,6 +1356,12 @@ impl Title { return (Action::None, false); } let (w, h) = (size.0.ceil(), size.1.ceil()); + // The Rust menu hit-tests the same dp layout `draw` painted. + if self.rust_menu && matches!(self.mode, Mode::Main) { + let frame = crate::rustui::Frame::new(size, self.frame_scale.get(), (x, y)); + let (outcome, sound) = self.menu.click(&frame, &self.last_server); + return (self.rust_action(outcome), sound); + } // MenuTabBar: a new tab clears the focus and clicks. if let Mode::Create { focus, options, .. } = &mut self.mode && let Some(tab) = create_world::tab_at(w, (x, y)) @@ -1348,6 +1387,29 @@ impl Title { let sound = hit.is_some() || matches!(action, Action::Play { .. }); (action, sound) } + /// Routes the Rust menu's press into the screen loop's [`Action`]s; a tab + /// press and the singleplayer list both stay inside the title. + fn rust_action(&mut self, outcome: crate::rustui::Outcome) -> Action { + use crate::rustui::Outcome; + match outcome { + Outcome::None => Action::None, + Outcome::Quit => Action::Quit, + Outcome::Options => Action::Options, + Outcome::LocalWorlds => { + self.enter_singleplayer(); + Action::None + } + Outcome::Connect(address) => Action::Connect { address }, + Outcome::Servers => { + self.mode = Mode::Multiplayer(crate::multiplayer::Screen::list(&self.saves)); + Action::None + } + Outcome::Resume + | Outcome::Stats + | Outcome::Advancements + | Outcome::WorldOptions => Action::None, + } + } fn click_action(&mut self, x: f32, y: f32, (w, h): (f32, f32), hit: Option) -> Action { match (&mut self.mode, hit) { (Mode::Main, Some(1)) => { @@ -1766,6 +1828,10 @@ impl Title { } } pub fn escape(&mut self) { + // The Rust menu's server card takes the first Escape. + if self.rust_menu && matches!(self.mode, Mode::Main) && self.menu.close_modal() { + return; + } if let Some(rules) = self.rules.get_mut() { if let Some(exit) = rules.escape() { self.close_rules(exit); @@ -1796,7 +1862,11 @@ impl Title { } } Mode::Create { .. } => self.cancel_create(), - _ => self.mode = Mode::Main, + _ => { + self.mode = Mode::Main; + // The browser edits the saved list; Home shows it on return. + self.menu.reload(&self.saves); + } } } } @@ -1864,6 +1934,8 @@ mod classic_tests { PathBuf::new(), Path::new("/nonexistent/horizon-test-resources"), ); + // The vanilla Main screen this test measures, not the Rust menu. + title.rust_menu = false; for (w, h) in [(960.0, 523.0), (480.0, 320.0), (427.0, 240.0)] { let buttons = title.buttons(w, h); let cx = (w / 2.0).floor(); @@ -1974,6 +2046,7 @@ mod classic_tests { ); } let mut title = Title::new(PathBuf::new(), root); + title.rust_menu = false; title.splash = Some("Visible splash!".into()); let mut batch = HudBatch::new([1920, 1080]); title.draw(&atlas, &mut batch, (0.0, 0.0), false); diff --git a/crates/horizon-client/src/title/tests.rs b/crates/horizon-client/src/title/tests.rs index 04fefe3..09d49c1 100644 --- a/crates/horizon-client/src/title/tests.rs +++ b/crates/horizon-client/src/title/tests.rs @@ -18,10 +18,11 @@ impl Fixture { NEXT.fetch_add(1, Ordering::Relaxed) )); fs::create_dir_all(root.join("saves")).unwrap(); - Self { - title: Title::new(root.join("saves"), &root), - root, - } + let mut title = Title::new(root.join("saves"), &root); + // This suite measures vanilla's screens; the Rust menu's own layout + // and presses are covered in `rustui` and by its test at the end here. + title.rust_menu = false; + Self { title, root } } fn world(&self, folder: &str, name: &str) { crate::save::write_dat( @@ -874,3 +875,44 @@ fn server_fields_edit_at_their_cursor() { }; assert_eq!(address, "one "); } + +/// `rustMenu` replaces vanilla's Main screen: no vanilla rectangles, and the +/// menu's own dp plates report the same actions. +#[test] +fn rust_menu_replaces_the_main_screen() { + let mut f = Fixture::new(); + f.title.rust_menu = true; + assert!(f.title.buttons(1040.0, 700.0).is_empty()); + let frame = crate::rustui::Frame::new((1040.0, 700.0), 1.0, (0.0, 0.0)); + let nodes = f.title.menu.layout(&frame, ""); + let at = |hit: crate::rustui::Hit| { + nodes + .iter() + .find_map(|node| match node { + crate::rustui::Node::Button { rect, id: Some(id), .. } if *id == hit => { + Some((rect[0] + rect[2] / 2.0, rect[1] + rect[3] / 2.0)) + } + _ => None, + }) + .unwrap_or_else(|| panic!("no plate for {hit:?}")) + }; + let quit = at(crate::rustui::Hit::Quit); + assert_eq!( + f.title.click(quit.0, quit.1, (1040.0, 700.0)), + (Action::Quit, true) + ); + let options = at(crate::rustui::Hit::Options); + assert_eq!( + f.title.click(options.0, options.1, (1040.0, 700.0)), + (Action::Options, true) + ); + let local = at(crate::rustui::Hit::LocalWorlds); + assert_eq!( + f.title.click(local.0, local.1, (1040.0, 700.0)), + (Action::None, true) + ); + assert!(matches!( + f.title.mode, + Mode::Select { .. } | Mode::Create { .. } + )); +} diff --git a/crates/horizon-client/src/ui_theme.rs b/crates/horizon-client/src/ui_theme.rs index f4581f4..176d7ab 100644 --- a/crates/horizon-client/src/ui_theme.rs +++ b/crates/horizon-client/src/ui_theme.rs @@ -76,12 +76,18 @@ pub(crate) const RADIUS: f32 = horizon_theme::RADIUS; pub(crate) const RADIUS_PLATE: f32 = horizon_theme::RADIUS_PLATE; #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] -pub(crate) enum Face { +pub enum Face { Regular, Medium, + /// Permanent Marker: the Rust menu's brand words (Latin only). + Brand, + /// Roboto Regular: the Rust menu's localized body text (Cyrillic included). + Menu, + /// Roboto Medium: emphasized menu labels (tabs, headers). + MenuStrong, } struct Fonts { - faces: [FontRef<'static>; 2], + faces: [FontRef<'static>; 5], } impl Fonts { fn load() -> Self { @@ -90,6 +96,9 @@ impl Fonts { faces: [ f(horizon_theme::fonts::GEIST_REGULAR), f(horizon_theme::fonts::GEIST_MEDIUM), + f(horizon_theme::fonts::OSWALD_SEMIBOLD), + f(horizon_theme::fonts::ROBOTO_CONDENSED_REGULAR), + f(horizon_theme::fonts::ROBOTO_CONDENSED_MEDIUM), ], } } @@ -294,12 +303,20 @@ pub struct Ui<'a> { pub density: f32, scale: f32, } +/// The dp density of a window of this many physical pixels: the 1040x700 design +/// scaled to fit, clamped so a tiny window still lays out at a usable size. +/// (`Ui::new` derives the same value; menus that lay out in dp before building +/// a [`Ui`] — `rustui` — use it too, so draw and click agree.) +pub fn density(pw: f32, ph: f32) -> f32 { + (pw / 1040.0).min(ph / 700.0).clamp(1.0, 4.0) +} + impl<'a> Ui<'a> { /// `cursor` is in GUI pixels, like every screen's input. pub fn new(atlas: &'a HudAtlas, batch: &'a mut HudBatch, cursor: (f32, f32)) -> Self { let scale = batch.scale; let (pw, ph) = (batch.width * scale, batch.height * scale); - let density = (pw / 1040.0).min(ph / 700.0).clamp(1.0, 4.0); + let density = density(pw, ph); Self { atlas, w: pw / density, @@ -310,6 +327,12 @@ impl<'a> Ui<'a> { batch, } } + /// dp to GUI pixels (the inverse of `Ui::new`'s cursor conversion): for the + /// few helpers that draw in batch space directly (`ui::nine_slice`, + /// `widgets::record`). + pub fn to_gui(&self, v: f32) -> f32 { + v * self.density / self.scale + } /// Move rasterized glyphs into the batch's atlas uploads (real frames only). pub fn finish(self) { let pending = with_cache(self.atlas, |c| std::mem::take(&mut c.pending)); @@ -392,6 +415,30 @@ impl<'a> Ui<'a> { self.raw_fill(x1 - r, y0 + r, x1, y1 - r, color); self.corners(x0, y0, x1, y1, r, false, color); } + /// A vertical gradient in dp, banded at physical-pixel rows (a scrim, a + /// plate's inner light). `top` and `bottom` are ABGR with alpha. + pub(crate) fn gradient_v(&mut self, x: f32, y: f32, w: f32, h: f32, top: u32, bottom: u32) { + let (x0, x1) = (self.px_x(x), self.px_x(x + w)); + let (y0, y1) = (self.px_y(y), self.px_y(y + h)); + if x1 <= x0 || y1 <= y0 { + return; + } + let rows = ((y1 - y0) as u32).clamp(1, 96); + let lerp = |a: u32, b: u32, t: f32| { + let ch = |shift: u32| { + let u = ((a >> shift) & 255) as f32; + let v = ((b >> shift) & 255) as f32; + ((u * (1.0 - t) + v * t).round() as u32) << shift + }; + ch(24) | ch(16) | ch(8) | ch(0) + }; + for i in 0..rows { + let t = (i as f32 + 0.5) / rows as f32; + let ya = y0 + (y1 - y0) * i as f32 / rows as f32; + let yb = y0 + (y1 - y0) * (i + 1) as f32 / rows as f32; + self.raw_fill(x0, ya, x1, yb, lerp(top, bottom, t)); + } + } /// A 1px rounded border. pub(crate) fn border(&mut self, x: f32, y: f32, w: f32, h: f32, radius: f32, color: u32) { if color >> 24 == 0 { diff --git a/crates/horizon-client/src/vanillagen.rs b/crates/horizon-client/src/vanillagen.rs index f51eb82..5516e0d 100644 --- a/crates/horizon-client/src/vanillagen.rs +++ b/crates/horizon-client/src/vanillagen.rs @@ -153,12 +153,12 @@ impl VanillaTerrain { let unsupported = generator.unsupported_features(); if !unsupported.is_empty() { log::warn!( - "Horizon: {} placed features cannot run and will be skipped", + "RustNotMC: {} placed features cannot run and will be skipped", unsupported.len() ); if !dir.join("blocks/block-properties.nbt").exists() { log::warn!( - "Horizon: the worldgen bundle lacks the block behavior exports (worldgen/blocks/*.nbt); \ + "RustNotMC: the worldgen bundle lacks the block behavior exports (worldgen/blocks/*.nbt); \ prepare again (the launcher, or horizon-prepare --prepare) to add them" ); } @@ -417,7 +417,7 @@ pub fn shared_data( } let started = std::time::Instant::now(); let data = GeneratorData::load(dir, registry)?; - log::info!("Horizon: worldgen data loaded in {:?}", started.elapsed()); + log::info!("RustNotMC: worldgen data loaded in {:?}", started.elapsed()); cache.push((dir.to_owned(), data.clone())); Ok(data) } @@ -460,7 +460,7 @@ impl ChunkGenerator for VanillaTerrain { match worker.generate_proto(ChunkPos::new(x, z)) { Ok(chunk) => Box::new(VanillaProto::Ready(Box::new(chunk))), Err(e) => { - log::warn!("Horizon: generating chunk {x} {z} failed: {e}"); + log::warn!("RustNotMC: generating chunk {x} {z} failed: {e}"); Box::new(VanillaProto::Failed(x, z)) } } @@ -491,7 +491,7 @@ impl ChunkGenerator for VanillaTerrain { Err(_) => unreachable!(), }; if let Err(e) = worker.decorate(&mut array) { - log::warn!("Horizon: decorating chunk failed: {e}"); + log::warn!("RustNotMC: decorating chunk failed: {e}"); } for (slot, chunk) in region.iter_mut().zip(array) { *slot = Box::new(VanillaProto::Ready(Box::new(chunk))); diff --git a/crates/horizon-client/src/vanillagen/lod.rs b/crates/horizon-client/src/vanillagen/lod.rs index 7cce03a..a834c1a 100644 --- a/crates/horizon-client/src/vanillagen/lod.rs +++ b/crates/horizon-client/src/vanillagen/lod.rs @@ -72,7 +72,7 @@ impl Builder { ) { Ok(generator) => generator, Err(error) => { - log::warn!("Horizon: far decoration unavailable: {error}"); + log::warn!("RustNotMC: far decoration unavailable: {error}"); worker.stop.store(true, Ordering::Relaxed); return; } @@ -111,7 +111,7 @@ impl Builder { Ok(_) => {} Err(error) => { log::warn!( - "Horizon: far decoration failed at {} {}: {error}", + "RustNotMC: far decoration failed at {} {}: {error}", key.0, key.1 ); @@ -397,7 +397,7 @@ impl LodSampler for VanillaLodSampler { { Ok(samples) => samples, Err(error) => { - log::warn!("Horizon: direct far sampling failed: {error}"); + log::warn!("RustNotMC: direct far sampling failed: {error}"); return vec![Column::default(); side * side]; } }; diff --git a/crates/horizon-client/src/vanillagen/structure_mobs.rs b/crates/horizon-client/src/vanillagen/structure_mobs.rs index dec5aa9..cec5cec 100644 --- a/crates/horizon-client/src/vanillagen/structure_mobs.rs +++ b/crates/horizon-client/src/vanillagen/structure_mobs.rs @@ -176,7 +176,7 @@ impl StructureMobs for StructureMobFinalizer { let Some(data) = self.data.get_or_init(|| { let data = load(&self.root); if data.is_none() { - log::error!("Horizon: no mob data, structure mobs are finalized when loaded"); + log::error!("RustNotMC: no mob data, structure mobs are finalized when loaded"); } data }) else { @@ -215,7 +215,7 @@ impl StructureMobs for StructureMobFinalizer { } else if let Some(r) = any.downcast_mut::() { run(&mut level, r, difficulty, &spawn, &mut m) } else { - log::error!("Horizon: unknown region random, structure mobs are finalized when loaded"); + log::error!("RustNotMC: unknown region random, structure mobs are finalized when loaded"); return false; }; let mut mobs = vec![(m, Some(raw))]; diff --git a/crates/horizon-theme/fonts/Apache-PermanentMarker.txt b/crates/horizon-theme/fonts/Apache-PermanentMarker.txt new file mode 100644 index 0000000..21d961b --- /dev/null +++ b/crates/horizon-theme/fonts/Apache-PermanentMarker.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2010 by Font Diner, Inc. All rights reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/crates/horizon-theme/fonts/OFL-Oswald.txt b/crates/horizon-theme/fonts/OFL-Oswald.txt new file mode 100644 index 0000000..9d0219e --- /dev/null +++ b/crates/horizon-theme/fonts/OFL-Oswald.txt @@ -0,0 +1,93 @@ +Copyright 2016 The Oswald Project Authors (https://github.com/googlefonts/OswaldFont) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/crates/horizon-theme/fonts/OFL-RobotoCondensed.txt b/crates/horizon-theme/fonts/OFL-RobotoCondensed.txt new file mode 100644 index 0000000..2096249 --- /dev/null +++ b/crates/horizon-theme/fonts/OFL-RobotoCondensed.txt @@ -0,0 +1,93 @@ +Copyright 2011 The Roboto Project Authors (https://github.com/googlefonts/roboto-classic) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/crates/horizon-theme/fonts/Oswald-SemiBold.ttf b/crates/horizon-theme/fonts/Oswald-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..dc930ec07894cbc5739e02dfcb4a100fdcddba78 GIT binary patch literal 88904 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 M3-^flZ`pC5kgfhQjqAJl%B&vlOPzx08} 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 MzW3PSgP(Q&e{H(IC;$Ke literal 0 HcmV?d00001 diff --git a/crates/horizon-theme/fonts/Roboto-LICENSE.txt b/crates/horizon-theme/fonts/Roboto-LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/crates/horizon-theme/fonts/Roboto-LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/crates/horizon-theme/fonts/Roboto-Medium.ttf b/crates/horizon-theme/fonts/Roboto-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6a9513371a957b50eae98c8725e89ddc4668ab52 GIT binary patch literal 511592 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%0A5MFBCp~Dy1J(o*YoF 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 eb;r{}^({lnjR^Se2Ky|ZjBwE#3bfXh7 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

i@jTsm( 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 Xx%rU~eWa3P4`Dw)TT+28`0)M*YcT@Q literal 0 HcmV?d00001 diff --git a/crates/horizon-theme/fonts/Roboto-Regular.ttf b/crates/horizon-theme/fonts/Roboto-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ddee473e02035bfce6244746d5d2a281616f7ff8 GIT binary patch literal 515100 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 z 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
mu2rPCfyzpnd_56mlTM8BofRO=&{OOj)sMp!DFP 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

tn_OM$3a5p9KO z+qT)!Gg+ttByp5YUBqR_V&MDQX68B`)xw)&!@a-C7F`gim1(WZOSHcw&g zPwS);ix+ij8@V#FM!mEIJhd&ERc-jHRdiO81!Kh&#H9UDk2*{aQ|nRDc}e~tDsbs= z{1UZ*m*!W=l`HV{U*$xDfoF-TOws_BzRnvV2T^Au5rM0=pKAQYLo31NAPE^jcgq8* zDM@wMvE|1*zTSJ-ha1Ot%e%t;Iy#vzsYFcIDlOCK|8w61i$Vi|oqhbmDACDIk2Jzj)=mtzeG(t9;*R1o6|LSp7S}}<)tD4$B@(!^f0w3=NM^h0 z?$%SJ@Pi!ZPxK{+#PJdwgcu^7pV4ebYdlvS{t{PGk-TgXE&*!QRTUO*$z3;f{?ho$ zlRDRIz>>E~pDG_*UNKy3)3ejie!Yhd@A0vvN$>G(W_nbwQl&%sg%y?defQ0&DW^kS z!bT__6KB1*a9FmtJEw(4thx9cyX}J!`|l$Ms!09e*qPT}hW@vs1=2%i`~wcb8DfR)G>hxO@}+TgnQS^s?lzdN3vKOu8a zhx)?up#L16_EF;zbyu`gs<4m0AAW4)p$C4-QTCnB(y60YwV}I#OvL@S1rJt)$E|K& zH(~u1zkh=|bKJjVrZLv2Tp^~DtrCUDs6m;FCVi+-4)EmxM9{cV#nq`Kz;uOWk!B^^ zCO#e!UNJ5P2F9vs&4YRutx?Ky>!iKr8yNRSdd(rHHZtFBk&S8#N#>GiHLqii?XSwd zv6d{)&i(HznL-UV;&o}ZdM}w}^;ko38EkwnQ=E)>ZFDq_Se^E~8HOpU zwP4w(h89`$M{3trZTbsh`(yCTTOXKxKL(1w2Oc*9u84{IK& z$JsaW_uAQh6MG4R@ZJiOZz&!FcS9OepyhfTv1O#bCF1(a3q(t3nrF6 zxi8GHWhv*s6>b502 z4~k|6p*}0IkkTUdH)R($YN3H4B>VZOMXEuZjqu^nt8!!nSpsqtxL-YGr3&mTo#0yKH7OkEzL3U0jZI`KD@ESKEwFH{nMX~b#FQ zuN0g4#N~XYM!tQ9bzk84F>oA@NiJW?VM)n!aOiF7y@^tBY$#OZHkyWGPNPJ8W1?8^ zBZ*OsqdGsgq+u13AJ&B8x5l)$5h!ubp4;W|w_gYt5O!>Wj2PyOzAP;#~;IMfJpoK__9AN zAjlC*Tv)Z`V-B43$#G2|Fm5?Ss!E;80A5>&Iok^$BjdpH^-MSAu==mju|Sate3D0! zT~_kIi^lko6mZpE@cg9qf}0lQ$(2hE?q3k?)~?7iJhc;vmg3P(pu?ANwV*bVn$CA* z7c-eyvb!g@sp0w6rg}#?g#ROQxLYKhHlAcU&9~LjrJNXFoBlGXc07F~m8@|-Qxc*T zIta!Y9x2-cmqZN(k=6|gNKG^IVMoaGNU?RyJfs<5UC?N5@xq%^i!aYvUXoI6V8eL@ z<_VYXcTU|m>98!;s;&IUhEE%sh4O>a%pI)CPesjzwF{G#Sa!_cTdB-`5Ar|--|yiq zYR#?3KA61tK!<)OPxP(SYH`L>zM)(fyqavhmt{kb_^^wjR zPs2z^!%Tmz^VX=QD!cN!)yj!9pCAmqBTn2Fz7ZAz%HTPrlQqg!3JgSCjagOmrWeoul-C{;H2!i(odQJoRD6+ zC|6eX63(gZU;lTUaOtVd_T-(6M1kJnTvU2vP?EQ|Hv+{fW9tPa_}JBn7YIroM09cG zdIle?a8>s4CXPoqnTOOXg>z9F8BOI}5Ch<9!kb!z_ebKN`fl_Ia7K^h80P@b|zP1)oLGZ8d$xaux!*kK^ee)ci|Gz zjUAu1!gHT>{nxBH%@KpX@C2cKj=l`aK6vQx;Ov3aJZhpKSGD&7W%n>A9nu~Y18%{n zM)0flCaMp)h%#T5-CU_@g)%L==5#qIgh&ffYcQxB9jO*4B1odq1e#HxKnvn4|30AQtuQ+h^tx4BaS$ztuOm8-Ebq}lg((KHf~|lM%dl+045%ej-5}>unIJ%) z2H>@ZSX7$@5<*0;)^FbKAJ?dXb!fZSV}CeM{6opi0fWa6%O29Y&SpTLa{O}^{X~}6h$XJ9`f>()mUsx`K157YMHJ$k?9QVQDqX#D52GAfi3d+Y6XoTh zuwU_zQFJ@>X(&d>b`0%HPgg>3hYA@5Fbc5x*(8J##xQ2ojMos)&WH=%EcA1}M6QQ# zwgRK+2ReCI;Fg4spT=)6Bf>(7-wMiYdW@<>A{|)Nv73lOUi+#}6?J|Hz6J&7(asu2ZZc_P#T(%?RmK%RO@a58xO(?alwG`ebOSM3 z-5d$o)0?ZM;6S@L)pwVZe$wqNMcfMEJhFl8!UjM4`lvpWP6;jk=i0=(_4`f9UywWI z^auZWeCEO!7a?&?*1^u*@)xXC(xu32zYXm+I(zNnUNe;|%3r0*mrF8*Du=IcRs1$w z95RP_uiBorQgW&v(7yVs6C?jlD_LEwrKZ8V$H5Mzn*sT3ESCo>!4`m+MIRkIbTGS z&9V4{M`}UGnz;31DyXIUdWH;$L5%Qdmv;FE+m8E(kj&iBb1X$bB1bnP2@`YmX~cqR z2HUtG<|^KysSkLB$f!a&CR@S&GbFl^Izq?`M^zBf=I48}U!*v;ahPV@%uRaJ7N}9xHqXJZe2s2Ity9TLxRv;jIMtaJC9S z-L6wt$rklp$nF5|0{5#JX0I`yE_Vy6BYOb;v2LUT{Q)1n8e^eo1dz;;N*)N-rm2(D z0{vjqVC04L=W5Hn;~$MHDJjWw%lP=<_d#oI*)!K!ZTGt5?dd86`>$rdJyz~dv;8e* zuVn?9OMbp#`{$#5->(uA)?_b6$0Yd^Wlu4SwLb6?VakwQ)lN7V8yY@%a7!aI19CK) zlLa3xF);v2ze*0NDcC+<{1Jm$kQ>v34pqcAcN4K7k_p9AIUY?lL_SeIfD+Yq&`HvU zty|F_e^>cM*t)e?7_VGdy3e-s0A?q3T04X~1I2UnvJ18KiX58Af+Uy0lr3JN^*h_lTs%_qF-2}67WVNDJcNs zQc1$l6*t0XPO2J`V+pEOIV2&Wc9`w&@We*1 zHw%x6ii)W|tY;&j7&u;n{REMaStOHZ%WmpSc?2se0mlIR5xFV?~3V7o*_?97qCIKf{gk+P*q;1o2N$2fNN}rWmGS?!6zii@;CB z|8egzjU;pmFLV^tq6{^n)|bL)#cOuYO{pb>M&(HJd2Fp%3#18g6g?A?pXVy~7Vacu zWb>e!RSTej2GFanv=c5Oh8B%k?;g5db#CEmF*Jko9R*H{($HcMsE)u;l($}zQi7@c z_6a9ah|eIt!Jx2ybwZRluN($m4weZE9&Bx{Nz}tq*y>0t3g-=FRExS3>?5+DUBoy>ykA@=!eRc zXN^E#Zt}yU(xndMuvk7#DxN=~kh!piP9ni+sO@|S1VPT~DTJ6OPMrvlLhPeOX47$cxoLOLWdlxbAbQwp zZcZx4C@>>8qdRWGYR5&aDRD9>z7XFH*=+RyjaDi$V=kj0J<<=Vz<;o^kxGe_AP2Cau{M9oEJ45@vZY3S~UBQV}jRC5GlgX z)MEntsl$ZqU4hdk;MYxt1>JG@y` zF0ZAatqocVWiREmwH|pnLP|z(#vm!6rC;eqlc=0*;1nykSgVtS zxjMFI6olMrwU0E#ZQ3Qv>LRh{?$j`GwRM9HJZ)D%QvK;G5q$(4&^_XDz)=VK)|F=l z)qCWYxOQ|N#nz4<4_1yRxhTZ*0JVoJB|D1TJt|_MBiZEMIw^^uiQYsB!lK6Bv))+JZ|s|iB)RXr9syTo#q`ox%!RK-CMohywO`z-csIBEt7o- z2*>pv)u{!?kq20JO_#UcB6E?TomxF4h8hzmmPg~K|7VWs0;B4}N#hwhytu7@ZJ2VQs6##2yU-jaMCOuxhL!40(7a*Fm-pF}?sfuNs120?fS8c4j@mNW*D zne&jSlr#i!J^XmdH^irIe4uxV|5g>DpNwCxn8EU*ic zEHPx=oYFgVZoxDPwyYKMq$+IL-LjWz%X)biRJZE~Ue~C}6&?uC&ae6Y217u$hVd)$ z=1-LO2{SD3gK`MN!OIx{6nl%+p#ayWpZy8g4M{QHi5H`_r&dlvdn##8n#4sRk^r9| zwT?8%La~yRm`DmEY@fTkqqp0vLt8&%>`~E#jDhn@#-E#X>I?HwDJLpasAG$Kdt(eH z1Wi!d?OZ%Bvh)1Ii}Q|m>py-_t2cAIf0$?cqp9-sMwc1hLbG>T-@5Sj0J|U1AGoUo zD{HMB&aEu+1FHNh?leRiyunw}wtHK&1m8 zYHXic-eB8%lbdL;?H@%|>8@fUX-?kQ=#f`Gym#;HrF380rR)WJyL8<%A49`SpR{T& zs;JnpWTM}a9W3mbCv#y9w=K1m9Q>%5oj(49iW}*IB?Nw9P58&v6B6mD)v5efl}|h- zsmWr4-ZjW4hlLMeB`>`YZB3wpi*+Ss}H*O`v8lkmkm zy=J;>v{gKMZ3{0r;r!McHs=SRnJ92vmh4ikI^hNB^=La@IP@BsaOTtajWZwV@i?{V zE)KP0aaZC{JEqr4;3S>7QM~3+`eVIQ?u?$A+gTR#aj|Y zM==>Q4FoPeLX57q>4NN8CkdE%g-!ZOa*$1)6f3b0_oImudg6!+;aQ`&M7b;uStGAF zWQ|l*6(zrs-#XI>0n-RI662|`t`L!?%K5`GM7>3b0)$nt9 zqZX7_)A`3xEC!?zwF>|F4|sU7uSrM_5;#8xR4Hd z8#?GV@L3BxgcI#K1hVnDC9BaCPqb+?|KKk03^{uopdNy=AHOO zQf2?juqVN%x|`tkq+P0$Ptk<+!QcxNm5Y80GKQ}>_D}J}hXcBQ_V=aL znNqHub&qWtGkMkHyXT&XzHNIBZn^BxuGMYct=z0+Rbl;ODrvHFoktC5zsIs#)r;^K z%$tEr;?or}Q~4AfB{6nBHN?bUDb8id#N{(O=#284l%H+_C08 zoJvFYVkxGK0pvO}o=cY0e#WEKws4iqghrRkSRi8^HhrAk{qxe)ExDdcH>h}l&n&DmpG8a~ z1l8C6JW_)aHY7My-Zi+(1`|#T92lY;(Dag%AQ0&*2&NrMg?{>xun2uPuN-lLBvIWf z5go_64V7{^`^?)twD@CneO|7rouI{~`m7RG=DpLP0S=G(`{0k8kiGG+(M;SER?lom z1Q^^tP3BTPquF^**~`QWHgIS9i;Of>H^^a;WRF7ML>oz#7bNg)BoL~)dHt+(>3Au} zPO!zVnA`8){!=@xe*22q{d7Of&dmw3~9xP47k7 z;rqR3c6Mh??*IFq=QCk;XLjbyDerlEX_Y%-yi=wbG5*)8Yk?7*V4m0-x6fFDv>VJR5G5N91}Y*QWY%ScuXKQ+jv+;dN$Vv^4E3_4aZa&!udBREoGHBuf+nRhQn z2c-w)2T9zc#vr62)iT{nqcl{rfWLszV1QwT^NhSe8A&|JiN*`LkZB^YDP`yVlc`hx z^_BX|N9UJ6>RiaHM=Q3SIDBdko8#C@iF$kbz4^qgyF;5j3i5P(JDV}@(7q+BRW+8k8b(YBCJCRs91=dNH;<878Z8I z#~S9>#4j+!79N@1CeAx?UcbWfAvW8Pia!13B>L@R6SMoI1qY`UX7?K2y!iVpTuss5lB@1VFgZ#NuBDfAi96pf)BoyGvd*b5ANF2viiIgjhohvBy z+h)FAdFsU%Pi?9-Z}S^Cuyk^n)Fiw6%p)IO3s*iovAnS7+U3nE;ckNU>MW*8tx$4*)$E4_6WDeRai)ntZv735s8e#>i2m8{!c+%}n(3g;vdS;j%+6C58+% zw7iBi0=3Y4CmH;7QesG3g)xS>)2+a+mxS;*&#?wmY#GErOBjpyE85s+;^M38%7@OH zRneKLwl5zrb>#5ofg4)pPaf%bE~VSD858FtuN}po>iH%1D}ur2kt@k`IN)fD zWZw457^$X9;w=~vWDPbkli@3L!S*iA{ep2HR8{Uoq@mz0lvQ+ zuLu505I2h*&7TNV$9J?6fPF{cX02sTdc#>#ebHQ<@DaKD3c@*zYbV!(@1y8o_>J(e z<+=cOx_@+zq60L4l}xVfb;jd~9WT{fyjXKd-JPKY1#UfGQ<3~L@kMdWp zVozfo{U~Rsp{5q!PI@0XH$(KmGpnnCBMxK%Qb9~yRCe*CnaIcW^w8jCNsG(GzI;8p zVLn=#{)_qO?8?#U^iR-tt%rXy&<$Wz_e`$!;=VgR1R^o;%t6XqICf=KkAe&)FxczuD`F7m%HTKT@m8xx3<8R~ z;8%bIoQV*!iRY~xW@*3R4;>@7A^gRNEvqkHtVZW9T|)OvL+f_`xog*-yX%mS5dL2x za&U|@f6C(&B4?BvstjO69?8@6h z`D3TclnZ2x$rnh;?jA7E8u?vhYDNw_32wiwt65jrw@XPzc&3Pi!K)hrzN?&!yd#~c z??7<-u?PM(Z?3)v^nGgNi3lQj-dro&gV7aFaDGFAyPS9$-XexBf11gB(<}{)#khx)|m~sCo)+`yJ_le*+n+n6-wjpgC9_X6O ze|p#XYVu`*c;KFSMCS3FY2cy^+yj8pnGr{`t?T)GV3@o@aA`-1oGnZ~CvBVEx{&pu zoH){aWXO3QQAhu|GRrZ0>0}MIq>0XchB$3lz!x-k9#hQYV)TA;=AQZqykN*V1f7X7 zQ3eb;lr+G&Nr{)$eF2cuM`{+5H6Xulp+vy4-?s?eWxrzUPFW)Myuu-5&I)AoxeScJ zVFUitvj7|3LXpCJNMh1t4UUNQzIjk&Zk*ELUf<~8=P8^CzSKme(LK~F05Fql@2ncN zsHTQpsKE{ncl=k1c6=j-a6C)76SQ1H!O#*dReUrp5ojrx4jlE|c>IleUpQRi^-72j z51KYG*DU?GERxj!5jN&h?#CJ5gQEw)#)38E?o+ls9_j%E?wrl1Mii48av<_`*+H~1+?D)p+X*Fq`Hyl4I?ixHKrDe-j zHIAkI`=>-lCm%MMu7Q2fSbd3Q2iLQ;U#kN*?hRC>fM2BL^8?xaK=pSH zR~nBHAJ~>YLHw0=@=S*=uhm-vMJLF8q zUV~m()c(Y(ofl7v#ofDgZ~txH#3OsB73BtJm2@pClvXcno!C0t*0r?TfR=hm|E-)!`LWA9`C^2$M%~5b(oEB%$R5>M5eob8z2eMM!d*l$A|o?Q+AC<%b>0}^ z$hd+exwP$}rfNt2<8C)`?mG^ra{NHf;%{LoTl?-mTt2n=Z%-!jA$lGt^8&%jm* z5&SfM ziA!vi(K#_^*6{4?;j?lQJ7=^?j1O+s(rVfs8k^cW*+0sjo(50xrk(8Z8vR)&^}_lF zqJp#>L~a+_x_V$nE(=>m&x$qUCQTk| zI;Tb)c=Sv)`%Y~-dg##6>`OlHWzbnP0!M{|_6b}9)ZXnOuzOH!o!l9973AP!&_|#z zoZUhCPH5Rco9!IapnnKlxlnWLxIH$xsAo~1vtlLEHomX6x%28T-F=RROj)A-T60#z z6`+(_eySYg1EbJ>tzVq+(qY{_CpsO$1cCl)L7&0AWD_!szgNd%wzHOX=e)dl7ROIS zTXHht1-#=Jr~7>s)BmFTI;Ur3NT9pnac@o zv0%EFh~c{yX!uBq;rn@vVs+{yoI-;KtF4nfOT(MDwaAVpeXn-PV zW3$Z8qLZ2vSFjgjPE#VR&CX;Da$gS)&`c-A-a27`#q*? z#}}K%rI+=evGKs5UNlC>^Y&g{p|<1eQ6PC?oRkUL*WhoZ^IXRH$I^2q&o_c|UcNS^ zsW1Q56p}Ckm$VZQus}BfBS*+E_bG;gj%#KG;z*#6;}jX{I4BD;#C=Tt=*Y?XgU8=E z+2q#P@%ILpn(dmZRs}w~ZO5gvyUvXr`t&|@8!|fOg71l(WleaL)=b6Hg1fmRBN8Nk z9Gf}Ui8EDt;xgCvH3%w7xWJX=;kFC5@Vs!?uLHtilr|2*lj*<^Vnto4jOco*TTKB- z5+zlRHM6(R-DWR5cJ6ucxyL4tRcB9{#CA=1d7@as*ymgBHvInC&i|;6od+%loH@uo z4?ew*+mWS)X!%%Ugh|E7ngAd57N`Ot^l=RQL45=`g{Gto6hUG^#l$EPR1A`f*=_x# zpTm$Qz*c8WzeI2+(vm zd#T1~y(#}#{bk=L+IN$WvpXzWeSe?cHGw(&9B->b8&AUu0VD|pM0`E+)DV$~cV;{U zM^X!67ZOEtXD=XEfOCenh4__Z>@E|>&@fe!w*@hR7WxLZD-n)jRCA5AF`Ba2;WuJR zZnyUNq3IF*3%Xc02F+Z!-M48*$u6(tF1>eTWv0d?1(|)kz0JW%sn#a4CD^ObJF}#P z#pGr34UUVod&yymwC@`JDPL}!YHkXBMsv#7=;XN|AaEtDw$fO>@Pu$vlB2~{R@76S z*=TxU`t^!0khPCBd?UZxxE*U^Le&b&_h`T=w8yeDrI?0q*ycWW-cj3`CReHN%-TEUYb$c~`Pj@`C1kZTGD}@51WJpT@bva4~ zC}|tP>?Hn*=tT^jVlh*oB=31Pb;J_a(EZND8BE%{Z{4<=CiTo2_5CNGM1S_6?dN&h zX+5)5UC_7@J0q2nOV^2JH)96VqsCt13ujx9g-{cZO~lcYhLmD8!_@^5(ZidUkFutZ zjSTqSzvxePx@&=!Z}a{f`4u6`^iSv_k=GOOttl4`{05N^3Sl>zGfD3P)T(hpF`rBX zR7L`^1?U>o&jRWv@j7K_JJgb3O0p+pN{e1|408;0KsfEN1M~l`Q{SyShJ;+1RN|OwBCLO6C4x?1~+~} zb7ZbDSqPtS*FjnbqR~mgj&COxw@+LdTNpmoYjmGZk0rM*whh_Z)sdb*ENPy>NIOai2EWYm#RqG zor-}(vIGLvg=z}tjPS59)!t=D;fxV|y7r5T%*^lGd(wzr<>?`b@;ki-TLz9RDj1eG ztR%me&%n}NJqK>eK^9EbZ~}dP!%~jek#>CVBJ&S;1HqRkk^oF$)`ET9!+^ls)P2f9 z$tjLoO-Urc(3Cm-4IEW-)*P6>>ae;acIM2y5xsj1*pkyKBGy9$%U_Wpam%8RM7C&#{e}mv0+mnm%eu zhYr(+r?nl8|G}>`gviGmhnPQxg}5zprMzqqa$tqyk}OxU=_j1MOmzOjeR6Q3_;LF< zQCjep0q(vjLEM&H2@jE`ie2EoI(A#Wug#ukFSd`d&$gRN>ss>EkXm{?EJ3W{@pyrl zrwj4%?a055EbHzciO*S#~1aOof2pFG358 zoaveNM0L@zZp|lm8!~?R;X37vRTX3y;7fUr5X8!j=O0CLcGMXj`{3^ znbzOE<>Sk8x(x4AGBkNia-4VJ=x*J1tx7E{?%H|UDq`I)*!sv);#z|b5-D~E; zoxA35+Pq0^XgxH@XG+I>`FQuv9lIK)u1AmkTUS<{R7=2RzjN4@0CdZ*i?zs z3WtKTZt1>*^qFxUa{}tCyYFX_`#!;s(&jp z3zm(WFh5xRI;A*ZV#j>*`;K=LTNb+}pkU0DF`wp^rAC&}z*)l^(wpjKj5|q~t&N(? z*7~Tq!kGpNVwG553vXd5kr)rf--jn^fO6R|O59Z!?jDlTOy;Ti@N7$DK$N+-lxU@l zUI}EkMurfVLA}U*GeX3INnQ+w~n2$aq+~J@I+WJB9n1x&-W5Q&~NCXiEFhllqsY$Mu}%72uVSnx5MQcu{P)AfHj6vAhHd z*+MA9NWo1&Ue%XaX=33}tQBbqa${&(mQeSQu;6vg-KQ7?w5MFpr=?j6N0D%*p>XKY z?T%Sno|mfU%&gusyKDRA6+;+HncSsk!RjK*ONosqI#wRtIc@%~_yLPssAtj#6m{=E zdbmelo52GPeKoq#U}4;DG=vF54SmJ7YT@o2k)AmBDfQK}t46OFcc0ZBOWj>=wIB#shjb((1+HPSKpHsiuIK*lf(jLid} zKvE(e=(sLlLk6QAuKAFX^*+>Wc09FcpH#JQ#!Bxw-nm^1d-doyI(6l}rd9Ikb(7aj z+caSaYn@y)a^S$i_+e$=#bs$c!CP{j`l{s)d?=8k-)W5Fni_rnxvon;;npuKlOp($ zS__HS_=l@l37HNt!JLH;%+AiV1jjjcb*-pqeQd++AGVs#_IN^yRHL&lexzQ6j8HDu zIexX=hHM|~+I3uSjn|rYWJAoY-n}~JF;m>M z?O4YG)I}Ahuu0-TTAMPtuF;I={fHkU4FaC$`W#vtLE^%bNvm#&^kH87LM`&oK!xB- ztUYR(#sx~qg9`!0arxSwildW{S5%pD*sG4m*cx>i*zN`NCiwL1}CD4ZAU>o9L4_$uZ9PcfpIu%ltz2aM};Sf`HpbPh3_+^=5_o zVtF}hUm@4=fVzR|H1-ho*mbm9hjvL%*TXei`s^yQPhelD142Q8h$YpldpfeqnQ7|WLFw^cO_m3;>~<@*w9XvA(X`_uap0%{ zBiaP_Tx|FE2`5Jc1i zeR8TFc%2gHC(tX$+|e0DS>1E`Pa8O6e&t%zj&_|}l_VB)AJcEbpqFGm=g$G(KV<#_ z5?7h_Uha&izt;uhQUnKXUoY~3x>(`6#rJ?O-0=(>RteH>X~91(E@-i~#a`5e;!!T{ z-lCfzXBrU*!?Y2CX(>4=1NXaAo9Fa;e*XAzYvwhXG_uvH;=~mbCU2T2b?rFO)GI1J z&{olN#Khi3dCj6*r*%v%8aA~ksSVBFe9Yf+%e#=VV_hq(!wxN=BJb2%V^~VSFRx|qF8Fc3)AIDSjarFuC z6I4fVuq&O7Yh?)SaK8*fq@tGD9aN2L7+}}XS!RPALkfO_$OV9c3onomFAe}e0t-yS zA^a;HZ%oVanqHALVM@ia%H{ca!&6e_<6SbPrs{|74{Ta?VA9hA#`V8LI12N9Uit>O z=NR^1yf8*9Z=)eaeb$v&U)~#JWHvDHiiy{eM|B&$t6_$jZzkwd9_hY{9+PD4-R)Zan3FmebnsAfAlR5&`QdE(< zi;9nleyBvWS5qRyhWQ5Ctqb$uzaiGSLWQ_EM{AHBhxxCYxq?mCB(X4dZ0NK{XQ1?hC=NX!xyHKt zk16J6WWz4!=4QwIi4)y>ebOY*iQ8p%=YG#DQ*#IwP%;R8DFZD|#tiBlu#S$YX|hI8 zQq)lACupE6rLG~luH#p)&?tL{tQJxBj`j-Qu$K0YX}-=6%Wd_Q*a&Nz9)+olK^V9{ohfhmp07GqyK!yOP z$8|cvBqW7~L_4nJrj?If(RKS*J9mX`-pGRFtQpCEpx;kPPpeOG z`rYjQ65sWp-!v~eGe>wQ0EC#&UBl<2_&y{Qc`XsChZ*13Xj-<2+;6L94nW{4r@_S8jw9Rw&kL+@=v+r zSdn^eNq2Y+zT36P>nRO>8ajiw%0Qp21j{bQ%A*_TAY7@qCfTg{C~@VX;wN!Y5ROev zpn4|W0}~XET0*=YH25w2pXu;3Tgv8@d3%+V9~iT0#h3%-rlqN=Y^-|JZf9eW)bJs7 znux0QNbTM59_YxkmQ%1GB*51wTY#n`O+#!R0xaKZ=%L~x^FTu%t=hADmXtsqu~`Z4 zG^+OOw3vXf8ZaCAP{p`$L%#QzwApDZ(srcDrEq>ti%PSl<>C8<@6#I7phHTt)+M{G zezk4uafKWevPkItpCWxoxK=Nkv_!7hy=;PPvRb@j&ussJit z*kdfSEh{WLEPM(qQ5Kse58p{XHdt1`Qj>}V-u&?Sf<`3TJ@4e?9Pd8m+eI6yYs?Z? ztaoGRR*oQY6w>#+}>j5)|G1dUk>=4=VswngXR`-ShL8>0ac(H@># zP?X~eS>nPq_kEc<5pE#r{=eSjE3TVHIQ4*}Z2>DOz{x)H<{;HcVDS8(TF#0qb@7tqIWy=?VD>B?;zIE#E5I zOtvORC#NUpC!11$hxDHkknYnq!8~AEVcW!a`%kgjd^6~*plt%l ziAC~(#yHCotik+-aIqK7(S4iaL*Z=W6~6CaJ%be#TLkz=)58OGLplqvDLw%_{0Zm4 zo4mwfc2a`f6l$_35cVV!cSB>dW@@_lPe+RMUCWl2_N)I`slIVQeNmPcEqrd^^NZSd z>B3s0Qq;RVAM8oBFYK|kVj^r_f?yWPiM}Bp>}s{I^s!mMb&83=bxNg#>%Qtv@ikK| zboXsW3(Uf{HSYZL67~<4BiI@o9h@GVA6yb_E>-G-St$`qJY!aOi7z4kIZ^1hSbJv6 zpO-;f@l2#OGCDFnGC#5;(#&tC`zc554a-@2#{k@KxgsfSFtCw(bCTna^#cM_%mgJw zZU<+bVZHYUnaTY?kHbdRbe=OZROo_&yCkw})4?UP2Ro)PS4gWNcd-)4uTozu z_H2*-WQSS;@9y61>dc`-;)^WBLt1Ie;4qh(IhP#mi*6`B@7>KmzZcdpzLEeqM*AXmpcL@5)2A z?>mSDPer}9->*TRb|CNm>wvFVWVvRB_-zlrq-cc3M(YvIoXMsWU}8g>Or=>^G_8Fz zn@18Ws8tQqh)8a*OmKmqxH(O^3&uDLiDAOrA;O|CeaYrCr;qPp?Uok*fFZda|-DTX+2EN^?*;SGlYnPtv+ZDDmYP?KUV}XSm+I_ zg3Sc_1-BKf1o%W8dBhMcfb%~%tY(JdPyFoJXRqwPa_bfjrp)U5ljH;RSAFNs9rO)3 z9MN}wQyq5RNF|c{B55$<;q1)mD)mP2*KMQlqYW^22;9Bl6wJP%!WS5Xupq8aK^hio zP&{OL5%oQsE0ZKHz4F2LZ@r^>UV3EkB)5L^-2=@UfTGL^fPksG=m>xGegchE=%h0?e2RMz3)&shj@0@5KM09 zY@ppLB!tUQ1-ZIfdgz3x)`GR}s^)m>eQl$Db_;#YV?rA1$v!!-`Af%ZWA&aA z-fG_XjR|f~+=fx6NZg~DnCW2PEn>$x$EN#8dN>EW2N1*uz_}L1Y9PO z{T36K4L>|`#Nkm{(xCf0ipGrY+iz4UjU^0uZN?(TpX@PHl^|^_NZq05KH{90p2xr= zVFt&>l*d4GEAbJy2G3vM3>tvOn3DnGvmx^Y!mi6^t5Hfbpn(h952+et1-ZG}F@M2G21_}}$XOiq7bh`D@@b>DG~ErZ)Wrqvi?Le2sPfd?F0 zIEi-;@K`P3#F=Fm9TlTeI*viyxrM5SHFk^j4=O(-mMo4auR!c?_X3FnK z;pRudBL#uRuOZ3A!}m^;F1RNHi5X$!0(epLbdXB(eP@TQ2-^{MBVAEzizfHUObqQa9Y^d9z>;_iumm+0 zB5BAY4Ei90HzeGUxVNDWUkoKEGlNY|C=+iD|M_wII|i~n>gdL|7HQCB!r7%$B7S(?P-|$c-!X#^0t{*6;5?dcUG+9-L}Q! z`(&LUoHQH#uXfK30Nr!m!6ItxxpQA@^Ug96(_%@qi`9JI|9M6#DNtl>;#t>`6@xpB zxdt-nZ2u*X_O<4;x1jaEoqN4~wu|Oo{YYzHn|(IG*uFmh7H$5a{&cns_Sc5__bv7v z<2&1Th3^jEBfjT-Z}?*VHTl&yz(300=AY+Z?2q|JPqa-%5k-axhj(*R!zm(Bc*Kiy z{95sK&yB#kZ)JG{m$Cs5EQ9G#$*7XHgO9RE!%|?5XwScgJzoO5L@?nZ(wTbfd2lLl zx#jYt66(dh@sUP91mFtS3UJ{X763rG9G*;&Gx)v*_h57bPJ&tMfsNXF$;ES~ZhTjE z>eR})JBNSz*M8;ypZyBc`USf^1dkB-S%yR*Dv$6?IQkh*+v@K+BxPFS9_Uc-a~GHV zr9-R(dPFp5B52M*)3d-6B=b1^7nJ}Blt&=3bs1j?aB z31CFI49^F16flvXPhQEog{rq6q%S(8VO&mNDCJOUddCT#%(1*N$MKVVA1mz5`zn&^ z1I)i;`GN)V{d=7-o`%O7bJXXcs{k$MI#yr+Zj+_z9&r3m%0~VUOSn2~#e&5{FJ2sS z@#5eopOmhyzSkh%Upnl{743ht^JZgCV+QynANWA&_Ia)(1#hHyS-2(=U}bW{GWrs3 zfs-U&6qBTO`~Hs;*VSJZvaL5vwLgAz;@%UcXUUg#FZ%bh-Y)qq>#AaESCqM>1n!rf z?OJ%F;c-dXYU0yu%L4W1>nDEy&Q$y4y-udSCqDWSynX_l+M9?MA$13Fx%R>HGl*XK zT8b6SCQK9VKaK$LZ8+~~>hzvabSIy#?Gm?`Ued0u70Sx^wMW&T#8UJ(Q5feS8DboZ zz`~0{6Lq@u2);?U<|Qa5QA))Gz@wG^lOAc9A?>9j^@8m3U^}|7tq9&+ zP%$tnX7m23rP3ufP7dq6dgsp76JJC-@#+_>gYYEUiE{M^CFEqc{7qUcLn|TXZBs`| zS0<=m6s*|2XyT-oHTW+^e|D`1|JJw- zcn)(tMQ$rz!+a#lDX-OE`|YHD*n>@o=Wx2F|t zOQg@mN8w*j?@QJ=OMR*EPVRxAQ&>0~a0=ksxruN+*2Zryxg?cNEgH{yXrJb$x2v`m zba`v~1?MNm#)O_wBF6*9e1#(IOA z>=bAiBgd;VuBvm`&Z}%MpmU7$$bPm+MG0zsD=NIO_3! zJsTRI9bIhJW#~GyLB0beG^V)*djh34h$I*$(4t`UI7aU=_7L?Nc^6{jcIvdN>U_41 z{;rbw0)J!K(JIM@4`F}9Z#0I@Vz?M9y#j78T=DUzd_5ffanCM|-3PgFnjpz|y?OSi zk@IGaE}bpOL+8vaO&B_B_AqMal(1WJ$g2SXR)tBlmADHGN3|?aax|P3H>+OK4+O*8 z8h>T;g*Sk6f*o|exA9lWhVw)r7zR3v5X`P{n8tPaHP`hd?K=G~;gxvj08wPE#kaBk z5w6@R2z&5$??q1RsP~*t8<3Tim6L;mI6bXXr?fPlb`ZVj-uSg;sOfp=0^?v|vkTqe zTlJJ84j4%K8Ijv%a7^Sni)4Px;>QB)A;QBRxt6#fOzX)xPbbp`;gW+oIQ`maXy9$A z!N@b;#M_j_2wrj^5sDORU8{3VRP@lh&MF zy7bJJUTe-SS#o-dRI#R}W@GPFHK(^UM0S3cdq!UBfx zo%wOJbG>3IbDh3TUB%bdG5fS$a$2??T}7Qz%nHH*0?DV7oJRjd_h1!_}l zN?P++dMM4N*kbwPHXC^%8`h+@OMPuSvOd-gb}v+I?|Q0Bm13MaI?4|!>;hoEkg$D@qA3t%R z_U%Cskc1NXn)E#MWyCx9qEaQ_d|cN=$}$mq5`3gC$zaDi1tusjz_{CLE!?u>OPUDy zH#6toKhHn2kez<~<|1|m2XlmajE&a*IF9KnUt??dJHxd1apJ+1a~he4AePD2EPUp1 z+=z$+;&ISV@uah#@SGwP!HJQfmt3ZnoiraUkO^8mx$v3u)r)TOmZ%HFC3%jyjn*3X zpP|;EM}>s$9J#wqZNLB>XUo*O^gLSM|G*oxw-7Fkb9^KTjgNqCN4VpiG>ZM#;N};O zGusMgJAOGd)bSB}R_(;1GcsuGOqe0;7o(*ofmN;KZ>WeCioC+gpf|7>*`d>G$q+dE z9!uILCW1Dt4QA``+;E{<^w*z*4olLs`4X)b3&oS{E=yA1+s;H)m7Y{9g4GJPolz{6 z36k1Ad6xVvV1g>-C8PF6j3V>e8zf6`S3^?1;5%XuaZDr5hOumhJex2p!Iw}EfrOz# zvy}i>a;jkz+77cq^~z$_n-wfpudu?!>IL=5cQq}GQ|EF@`)s(7H6tfyMiwh&C9Gei zTE~hjRYk3>Wc}6iEu12rv;i~-78iAcQ`T$k{G@r5gm$2bW8jSug!PCO7AY;bt)Uj# z>!CBjQP0t$%N88UVu09UKzr&U-6T+BM~T%jD!5s_BKdHk0lc849x6kUOc0aHKbrEN zuwoLD_GcmLA(MMnQFtcR)|9f5&qSZ7BJUwr#4RhuTjH6^C#M!19x~80XoPyyIU^5C z6S8JhKAE6A;(z-@-J?_bSBqy#=QVNMA2Oj~3r#?W4j3+YfFN@^Yzr@9XLpB^{zY75 zLZBLN`l)d%WT^y1HIY`*txl{n8&Y~fWuBf0Ph+HgvvP zsm8B=sIcbIqOCirUHK8yPiAl4uKYl|v~^%=^KrKhSV_{X&zAV;C6l+Z8GqbkYv&JD zRT%Y;7e2Ip=hmV}d4H#ua0?vY?3Sbi?Rxfu*QNh)ok?|%FU_kMQQo<{?up9I4Bz`lJ zRdk_iT`ESb$Y1u@W6Scf4kco^6eeB6Xu}mjCOpAW4`+Qf-V>~Nj1=a`6<-j;8T4dK z=pf9JrXe4`QI^lfY#t{bWESxfSPI79vFr9KRy@k^&z- zRUYLWpklVT`ENp_yk06Y*#*Xk2{-Uh-N=@hzI6CiJLGE1WqRL8^)`EpzpuMua=wqq z5wJ5HR^6>B-i#}bATt_yeAJmXl>7zA;Z;1JAJh~h*-~}GP5d*j{G)d@+*rk5v@s^D zW5thP$1n+*2%93%(#QiBDgG*KSdD|^uYkrOS-f~vmF3)fi6#WAFrfy>=QLy*Zy{9? z4f!cNOgg&EqIe19lS`J=m<-t}$HfKKu)t55kNU@#gG{xJ>X1gqAJkV7@O(#JBV7l5 z@k8c1FP;UDv}xYNli3uec}>Dh=FpbDv@%0%N#ePNoS`j=aWEcJbezTxa8# zNY@?K*J{qxFLK<6OZ#8mXLn|Aghq$I3~8ch)uGY%aku{0mvI6B6$+JV6u-Ij$@_JV z5m%N<*Xz%mz9Wl2I9~?bRiX})HnG##_W?q?`;>=C6t=6cuxoO6%wrHB&>BqH!^nX^ zL>HVnW;iE-WvYWuge$2Gl4|%EPPr!r*2+bWoJy`l`}W*b7)RuI$BR!Pr#8I*q<%7ML1ktvp1bQHDICxPY;~dTtLbgS!Fjo< zhihE_JR*)g>G#;t2E&=%hNXSx$-bGBPhwR z^+=QhcK0K(8L$L48m>i%5zdC7B*S!)Z89G@IA7f}s^`MI9yyzqFJhC%^_ZV4KC2ir|Ab=r)Mhhth0Rn{KO1HC%_?E1hzs zBCRIChjc+e^Q0FFcWpL~PRJtRW^-Mfueh0XMOR5(boG{VJ8B;dKWc2Pb`(p_t9JIv zd3JW0b7wX*Y7Ct;;(-f)nRCn^)=4r;$QwYPnAiV#k33MjSA5Om-V$-Ac*t~3vRL5L zCLVwej^iX3J52s0gol@iHkM~z2Yl84GWz~WQD7^eB^Q|_H0&%ankKcdV_->a*HG>vR2Jlg+2~~w0YEA1UhL|%+9>oFvCz1Y}9kkhD#861i=<7CJoxW zuvzB0zN0f|9QBocy~H{U3S4khz3g}J+tIT-vE({!%xLc*+Ve+y7Vc=tWgF5?z?ccD zgvc{1q?w>_cCcu5QO4+^nvB`UyreI-e)mMH*`vRzW8ID{=%l`S8GS29PO(3bPc1+g zg!HPERY6;97vPWvLQgEkw~3zRi=S}a1SK(JO}KIkN-7_>O9jRU#S>Di#Zk&i%6NLO zW#Mjyv?AM(=+tzsVzc^!>WeI_JjW^D6D8_;@er%i_NKbaV{gU+j``jMyqBxH+4t-; z?&~QC>TVA>#(f-)yQ;gza}4SLOAq5cT%WGrgFqeeVSW!ROYU|&?#V(s*Z8}zPjQbE zU+{fOeRAznv~`-_hkfd9i|(Y2f zJT3IYHT2tctv{~az%}%dt`V#|zGO$mGQcM6r2ujQ%ItR8s5xe)Vs#wGXBUm;Fh2K) zSDSx7z9@6SUiHSFe+>hG$DHGP+VNj@P;Ud?3}oC&2(h>T8z~SEuI|-8V`OnnM&X*i zDSup}f1=R?wZC|e?UXFiJVChsj=pBxNJ8e57EXNFSuK*h*=A;u zmf*g6{XV`PbRT!x#hi3T?VV({3HPls-p6SM-A6v5gsVxeYGf-V3)_qP-qzugyPe`b z4ww0Or!U?aAT5!4%ch&I_#M6y)EfCAVLH)XnL1AVLi`NvjpyTV;%ja#(%Zv5QUcv0 zflJ3&|L&e8>Nuo8`;1xGZXw8hk3LS`FSH{+#pi5=u^k>m!QX}TEyMV}fbJ|n*q{hb zd_g!|#}d?gI?+3*)OsUJ&`xhQSFw7tdCCepjiS>$e7o?m_xIjN-X?MKM}`c$X}%#m2juUn@8##^<(n@8OBt~Ks2ldxMiO|<$SJ@8aZZ}zuJjsFsH!( zWsdKp_G}YiG(uR(V+)~d+-btw^G#?y&qN(FeQ!d?@O_>VML(^etNEr9x@x7XKj4B= zONV@a9DbmKuRqsVB9o3*D}}Vm2+#|1qeM8VJdns(ODLt8nUX>gj!T#lUUK%bDxV=$ zdzAB4y9TnAV@p?e>9Xo+^nB~6>91XW{FTx_#e|uQrmH`U{hHte@F~7ZaLo2#?do+H z;1&uUPLkCk<`6prhSwYK;Rsz{--(Tl^0#INz2Qp5>hw`Ys0A%4hZSfDm1dgu52*rL zXnAW|*e<@_;^P+IBfi+9Sfg04G->7xpsEWrBw>OQ609b22sAfbgy<9FK85HL6UfWd zlb5w#_J&uc(u|bcQ2DJR>DsSzUR?Ur`+leV$`{RlNUWYOzUO$A{YPykwqxuaCf9FX z`}V>cPnOTWxVd`UHTKwg^zeQ6nbx+dCv7Xta=r!yj(-q0_5^YE9(keQv6O@`D`Iz0 z%AH#DvI}79>E*ez~j-nCJO)$TSsn`!H$hQ_kABekXrO(OPwzx=)K z_J(%izQ^z07pHFwje3fuUS#prw^`;HHu~OeTbNuB)5I}v!whLdsQS}q*!PR!EB!8f z*He)5TjCY-w7KEt1l=CS`2>Oxe^**bV+}Ph2gcf+5%o$-i3jAigvkqrG8>hAG89@? zB3s6RAyHEJU6>zO;+^od1$F z4Sy!$^h1~5*tp`H&-i0mEm)%cVwcLz5$v_Q_t`v_we=O&?xgDY;_-v(5BIm-RDVqo zUt7AZ$zxsz)iM5ik6`>GA>dBo<9}F*F^u2Ce(Q2qPKn^|$|)X|YltIKvi--4x{JFvK?jBKcj2CB_2nALhVL zbrboYW`uW^sHBX6;W1LES|@cDKValF&vP&<1_g3BX%7>R-TDB2$vZZm2d5H=3A7Q@|W2hhGQCFDP zr1VfI>L+~a04*H3a93&l#5IqCNL~e`1~q6n6>C5gfkiO?s72jLgLOh_5k6VVVZGxiesN6$n&3=%cEJ!f(R^jvvL!t_UEOz_<=nm4?aF!6;+J0< zw&Iwa5vgu)q>3*um|wErk@LH{Rr1OG>OjL+a_*9?n^;GpDU|g?Fq7`9Iljd~GnOJe zp=}V4`V%}Wn7&&$iPVS8nMv9@R-U7ZqN*UIyPfc`$nl6ptVaPwLOW0yp~!&IWgO-y zC<`FFKv4*{;7FV1EKsW{T@Yex3|W9#8rEmnZW6=EG@>MVQ~ojRFjxXYc_amQWB~wC z{ua~(fC_-cB*mFB?J)_NNz5K+8u~H*-BO=X$KQMp|8BDWY{!j;aje6*_r;J`)wk55 z#f!yHrbv%g@2yswvM=cmUq#u`Aj%E(d-v|GzSwa02+`xyjo+9h%v}`hZ>N;Flve0V zZ5%msYE$SDAH%0m2O(ZmPCwzim_DC87eAcBE2=n=27*r zrBfLKAIJylm&Wm&)jTspq8%kVQSA{Bg&ZWP-ANNh?$j`M#hKKXv%18!V+B1cm+uI< z`{GMi*wUB34cT$^<@@7rZrQS7?JLqb$G9$C{2mHOykE)=N#(_SvT{h&m<4vCdl;CVo7y}GXg_cyNs3y7(WdAl<*oXgzz(h zt{%V)%?XrRu(ttIaX|ti4KLrKf9gRW^P6v)Ew6~rSssHhFA7_+ zeurU)X#&jQ%=p5=T?cB;bm=FY*y`)TMO2*B1-i+BVhZHu2};)Eu@*`Ix5pqf6SD&# zGlqzgy1%K$$QG{6Qq>V;t3vFwg>zz3W19ao&8l#d*?4u==ulEJPWh zUjrV1avsO1`r0UjNkm0O*`kQgG*Cv6&M0!Kr)}EY-2#S+x**PY69E=Xj?IDuJ-q=b z$3tVJ{_0Bk!pQ|?AxoD0p?+po@Xv>}_<7ofkeRbi0KQkKE1?>1@$8$iM_aN4=2y9C z88fq}sAF-jJhf~S#!h>12KHbu>Q0#rv4)(c>Db;Q$cYPj`a*JgR-%G8k z95co3j(OsqDsjDIxwx8W76Z>K$W`cfIOw;pA(y_#nz>*Ob89T8N?rh3Wk`hEh@d>4 ziwA#Ai7e|-s3}ms@_-3w%pPz?#QHYjn;T0EYyq7#mJ;rXKnYk)Zfc1MM9^m_1%ASr z+MaEvkWgsZ`O74)Mgd=mUL?m$pM#M3XAB&uLk@Nog{_{YRuGmbHja;)tCn<2HNYPif zHBMTSR1B3V6f)rmu?k1R_!2jmf?F=3en2wJFW)xmV`gxqouxfZQcJPTo@QiJuNUx8b2(>lW_3 z*KK8oj@g}aO;359Q*Zra)SK$f$9t4?8MJ4?(rt-S`{u2yT1CF^cvHQj-u3@h{bHHp zcj@y(->mw`(%_vtm)V%upZT)L`(N#O_Srk1yn9ydw>q)CD0a4`=L6TqAa-vP{EHI+ z16!3?P1=hkDx>ik96fROEG#151iCgO9*Y>SuP6rz+OL8)UxJueQXnfS+L;)WLTA>L z7<@c{kd!!nE9o?B?)AVz1ZPW$dJ-<=G`9ph)dAVs6elJ5ig6J8f+?jK^aEyA_S1}M z8L^M;J8-IK#H8)*k8GGRnGKtj)2UVeBR`zHEN-<8o7!V=kM2Xo8S2w-v5xy5AF%I& zQa$S1Yp<$?z=d2zW%r zfhT+FZ$v$=)T9{!)F!*fqQocjOk40xofD4=PeQykJ~|%g+7O+o*_V_#E$H_a))vuR zZQyQ0Gh8WiVxV=2j=^3r@^8`BTJX5g9{>}=eGRpffMepVBx~acG=eMOIB)}JpE0+9 zTqowYbM}mUUBDNZV^|XKC((cm7Lynk!%p6O0sq8^y05doc~%l{eK8%C9lOgwo%`|} zHEj5!@DL~*bXYwj<~m-G(yK;S{jzpWRYvQo-`J&gqpOCqFNP4Vk%V&S6+SSBBileU zU~L0(k0uc;03U+e!7;`OZ(Q-B(+6F4rh&m?Zmm~BB%Tclsh|wSpQ`f4of* zI_J@FlARNf2^5p5Pk>9+=98&8+Ifx&QwR3WK#i5=e*8YDP<%Ka9c?o%er=}bCT$aw zNw02WtBtYNb^s?~;Ax} zoLZQdl6X{3b#!VL8*Ev=CU;^%$}@#4&N{Y>PsO*GzPQKOPR*Z5pMJJ{!oe9iEn1!l zX+31cz^t-X)zuNU^vo7R#)f5-bQrT`M5@%Oy7lN*gGaT<>eselU0KJ}!7B!~Ds5Fw z^QP(P!oeZOA#;LBtLzD0A?p9*KGIB6*hfai31~6)j3LTeX|8Q6UeWV!_X;)(^ePF? z?IOP$@!Ko=K39KYO}^N7=hvpsgl#G>U)RhLb7c44L+rJ;ehZm7vl*MpVz#mfHo4{S zA%P9=K71(P{&efEqc`7He~Og1N2|ZQLHr|P`EQs7M8mCB{GE9SNX!Qn;%HW9Klo12 zPdwycj!ECl6$O?dp{R%$$H08C^49U z;twyql$9Ty!}@l;cjfAd6IZX8^3{7g9LvXbh6u}2#k~!KrE@#j3u-PiWB=zhZj$!` z=5vwhvq*SLiSOHwKo7XOBgfc<&NXxy-)Yow*b8yAbQA~>T6!!Y8w z7>Q$IJrX`&5E8A4FdsmsjJA>Z03kAwi@vEg#h%F9vxCvL19!sDzfHYjOSPkCN~S%P zIv8iI>ttvg(GzxST~~w4SI_#|PS)B&V#C`d#&hbO1wA#AXlgMKRF#CNIN@BdS4o6= zad0Y~=+@BCEE7#KS4V{Aygb7t9-X`7~dnWwH!8sreij4WHccveMzhXvj~V|Nd;PU%u=FJ8;>lP(XC zhx`a& zH-kAn@JFDJdvTQ}-jq)Q9gBnZ#sXbV9P-JsBvPWrWXGUpMs|$!@;CW`FSV%-`t4ur z+s_=|u|Jm`40T*@BL=7crrxzlhfG2J7amqFIG*zpr!HgDM;(6J3z7#Dq8q=Hn_(O+ zg`L_sTwWA3D3|CL9LNnv@b1%O1c77(hI@EX8eMGH}B)$(=SQV z#5dI!PX&o1W-GJzIIlF#?LgZK ztCPgnsGW1)bDmo#d(qhUJok;awKlW9HWL+@4a3VMsaI(g&D}Lx**vtqDPf!k4^QEG z1t^#>O_;K1q}MjIfVanU4lIG|+LP*)_Ccoaz?K~i4czbl4e+B zlE?rRmKhoypJZWhoz4y?;uu2#Pg<(`f85)=ruxL1eaG0@e>M2ANzct&e{Mr=(Yc4! zH`QPK53+&dE1y5oqe#8c@KWdO#Va#%#n^$Y_0Gi$_MSRm7axB(yzIz?HLG@od2ia- zsp|Rvv=?pP#jIZQm~UzEEoQOhjar>g^NYM4klnwA-Y8rs^{9jAK_m2#K)!)I)T1t? zp5Vi048^YvJA%MSAU+8|5+(!^>Jmu;G>e4IkP;cWbsFz7(-raXo+~?!h*ujC4NP6Bde4C@~1`oDRM=6R~OCtiO z&<9WnRDu9|AB3j!dQ~2M)-;UR13*aFMDX7 zK*}=gV%q6pTs7T{xFC2~WD)@iBCekM^dsd^oRwCL8=UzDjb_Jl zU*GqY`Yke*-QQyJMs21qpl=Soci$93pAEJ6M0BNEj8E93@4bN7>V3|8vb1~df31Bw zHf#4bM$x^3cyF_MS72`o@3dqpUA$$A+^($Jv23>c7;V z)PMajxAX(nS7A|KR6KXv!X%%%=jBKD)eh+Q_(M|Z^z=5<#@ru2xvZ6FSqMK7ngdmA zd|v%Xn*+6pHV63RbAV64MZ+lh)5aXj+ZY$>6hRMWwQxf*^m~F;i|NolOxlN8`|#F2 ze6$aL?IVDH0E)GI0tl+1lmeEd@Hof%5Bq-hS<#1_`jOg|Mln3kDtf``rmFVl(Y0XMF?C9K!P@~TbqE9VBS zJUnB;)`%TVBUL;?~Je$(R8cFNeg|A~b z_bs%Jz1^q(FY5?Jrn5e!p<*Lu4Q~$d{%M0!DaJ?4eZ`BHZ{8_d(61io@*-!tzq}9 z0p0KgMa+aopm{qE$OsrV@vvda>quN8r;GYt^S@pd71-ly6RZ_`uX@5A6%>)jqdR@r**pc7roU zqwwXUhshb^TlLF53h_KL^lD$5)*yzvIk2rAT;(+-QsXKCpb&I%gph}0j&t5TA zumqYaum=zgBpYf0kr&y;R{pvEh5i6c$SHwtFyq<*_bIdkBr{&fYTmOsuulS2b4%b` zFv^B69>MqUNH7H7D_IF#+RU;kIX(#l;W@;7^O;4Y_1|C}c-BWlIt(#KCnB#oM?`u= zHo#XrQ(aO1$l;2m2R9dV?b4SJ4zr$S<};_&hMLWKB)w{;XluFUtes~z^;&&y*X-QB zWdk^taUhVMN7J9)Vs=H&|Exv7Nx(P1m{wwr10aF55nfQjZ0XcxU>nF*I8rDA!6dh@ z>tLv>tN1T&T?DtQfOVQ(*brriD!*zC(g* zZg>=C4g;o95>hBM>Ow+-JppUdJ%PxHz@w!gH-t#Od$S$AbW-x zmixT9S)4ySe#@eOPWR9K1+}xbga-T?Se3f?p%LtP$I>y=<z(*MTAnkTFpy_#s2kA*qkSG6q9J zG9Ux6P?7Fa03esb$%zi&=1Oy6*y^Si9EYEg);l_gT_!`oJy* zpFgGXYiSzt%!I?*HdzUdB^?gQr205H)34iEbl6eMnhNs)rXK?V_=LML6sQ4l6%Vra zCeU_soEj4kAUG$%sm@P*hYviBjyKK8lan6%|Q#^8cPYJG--p zzu)_L-@lUCo!ObW_nv$1xu>5Ilcx=3yO+-`e(zZR)K3SFZIm=tin#lIOsQS0qg*_( zCGotvA%Dbhf=e-t=+cYB}Hou}bwaS?m4Bm_f_Cm)qK%|``BXRHbw!KLD;`>SwP zU!OWock~nP2CSdxb|k)P+@i0AivS|bd|((wutkO{vBU=(GZw<2TFc{Fs@M`amy{Gw zREB0agXUHvB_z&jv;_JlG9gi1JOqSv*#9lhIJb*qowLrc$6hYqwdc%%q5b>jv7!C? z4pm>d;(V_Bve@?}wrjoEa_4I=AIRH%=H>mS5&08_jUJw#KeBSCJh^hSskCx~JdJ4d zP|)bR!1X}n$E*u)lue4zIE~Lg7bz3?G1Z0e?g$a0C^{lQTVEDtSo4^E0|`)UTFPKs zsuIUDXu>Jr6gdTe0MxUQUl`1`|%K^@eq46PF{BQL8cvnC>C35QBM zRF1C`nn=1SEqYV09wa5cslM>y%d9I~#JaqUz^4jT$t8BnqmssvwZ>fhay{R5~U;ODPOE`Q`{p{#*_0vO#SYnd;uGD+m z{CQi&#hp5A#+o?-8Ip3OT0tSUDQ1mA0M(-(MH_T-z%fVHA@LL44y{;4ZajjGNEXRL ztVCFeav)YZf*CuZN4|aWi2BTV_SK)vckA*IQ{Si>$s8M=-Cv@9!m`yX{(JWLL-q=AK5r`h;^wN$ zjZ2;zvbFHZjSRT+th!ykWUd4^6ax)GBDCQVn&m8l>_nwFg5$-}{-`~OSE8r=op4Ft zgA}V4Jd0XV1{<1Eqc-0pu(=q_l1gk?ZGuTc42PH9O57+`5%Ra0EL@XIT0#6DMi>GY zBiIZ>Lc&-R2WX7+MAAFmS$5vR%}ZJT_tZBeb;sTnPqD9NsuO;Et5sk1mcmY^>>E1K zR6Kgr&Xa#k{b}XpG-t8D*uAP78*3^>lzLc%vpIPRu@l4FsRN@{0Vl>t8{`9~mk>?c zKsce)Xqbu)5&NRsJ@}AyYQkq;KhZ&gkp{5SD|u@He5|=z==Dw<@G#Q0W@PdGRBqT*kT}aaYmfXM<7R9 zt>Y$1(x$`txqH$NQN^9Jim4_~tYhLf zM;!HBy?hzzAoKFi;aW8Oq6jtl0)Y($?k}=uh~Us&sZ9V?V^s;|ISZSH>Kb}!iRooN zhNnQw{0ygBkD&2^qzp49H~W(N3r?ZUf*L4_G;r9WHLuJFTq@Y-JaXh0AYvo9%I07!r5>P4PxNK` zK5%}0H1EHAS(du_eer!M1ugci4*}Lfr?MEQcHVL`Otgzl_jE?lKbI+=aVp!v53kM8b(5#Ud!43BJXJw|w zHq2_*IIS&N?M+i^=Cv3wcit1t^J+fWDAp98WkVeu%;t9W8h3acYo`RZ`z>-0j5Y=~ zXpviKOT}QgV`zBDWlh~StB(_rGMs!MPk)f1-YE>1hT7Ungmx3e&q&Wr%FK@c{^I^Ii6$#(7y40fhVjA&ilFg0m}HPU*lKXp zH#Qz|rc)&^LCA|l=_FebZM+l)IOaH!z7>Kgj4Bfhlom5(220Hq>ps5ZW~l@Q(ON^u z7Ej}XpRnXYe8>{0)aGwN5PVs<_d6nikyws~i?u40crKG+CE5|IlMa6oIE#c4rxb?l zUUry#Ir+AxJ0#y98V+KH^kjy^MO0+`V-oN`pjh;G{HnCawfYO;yrOF2ZcHP+|`|Yoe>{++~$xiOD3{ zg>-tPyffJ(u}t03wU`YkVtuwrU*&yU)ckPaQzwH~n5Xyc)-CtYlHPSsY}|Y9$>_66 zl^;p!m2a_-C#9dSO5>}Foo5=i@6lywhv5s?FU}s=s&RVz%&ay!nUj|6FF52+@_GTA z&*40v`Ugu}X%S#d+VUQNb4t$~8gxo9CF8@fIX`xEt^Y<)FE!HH&-ys2ub(92Bw0U6 z!buXHGzvCu4wQ8P_z877RzU!tKp1ebuV4p-up7!<8xSQ017>1{(y$TNY&7KV3{ZLD zOFBJcbRUJwPiaTEC{&a_7F^n`qO>hpiPCt@IS7QPcKC1K(<6`}FrNRjhlN{RMAY<% zZv#ejUbljopIqPhjemR@vG2(z)pOe4zBfmV%xq9UQ{JV0Iu-46Y3)6Kp4hwR>G?gI^UFz*=j|*j>V6OK5Fz0za zyI*?U)gGSJ`{?z|gz7&m38vE+PY0ncjZ0n%27=nzFR%1G!-D{f?PPkjb3j6tyZ>=q z)Q`84A2d@V-4QM7hSp=gD$F zUWaFlG4(|G^_coKXsfo@n4Y1CZa$`LPg`EF8;ED-^JflJs~jhuk*>O)+39&k7n1lK z^{xKH^t@>&;Qe^@C*lf%w{VA#>5xQLN*5k^wKEFs^f8^nGy8=kaVtH;4!WK><$1;n zb|djjXVWuy=78WMZs5->bv=XpS$aEOeZzQ6PX5e6A&``uoY1d7Q-Pax3b^2Ydq5p0{_CWV@ z%|%%J@f>(X*~#DETt7E!@4-1eZ_=K}eLgGr^K>2Wr|a~)B}jj+#+rZpj{E3$y3d!} zo~i%lKMnn8DMBzrKboQ+R1?e$|4Y}os~v%uCmwq?h;P1!p zz77BJJMN?3=|0OvcRyY+^dryJj|S++d%PccGW7%JCh~txLZuL`A65K$T(|UhU#EWH zI`79%{P*>MS4a3qnuT7!(R&8NU-Ad=;%3;@>6~gI{ltIotkOB)X`au2?=7MWs0}HY zw*dYjupA}AUnW%3Dq&X@_};3^D*vjEGN0hMd0GV{N2e%m@~2a4`vu zhzN$q3+mH`LI*7(a61&yf%XK^BKg0qUf;)tuoM=2mf82Id(><8*f0LL`=PVW@BgXg z_~b|F5X*S~3FH}_eOP_xy#eYQ$OmEytz5$*s{7t&;moWr35-Z#Qt-;oKtAyMLfkm#zdWShoNx9FzF589#P#!Ht7T7fE#0f;R*-`QA!pdaQBQ zRBLN%Pb(_;oV8xHig~AcT8CQ2Y07OYq8c1pVQojMQtDuNFA9!eN4x_TNT@dfWdn?; zEAV7XS2+B8^Pz-PfG!dXdP?w$j6yZX7h+n*8ssxi#`LvQPQKiz$^&Zz(1 z7u7_Xn8e=S(=3gwjrma_(3tAgQ!R#hVo$J?#f02dRjO0{EdSnT=@oxZh9{0HI$RT% z&k~q_Z<@*9wHa(Jt4mNiSG=HBK#m0skjp_cY75<66~#10&&$11H;+S&M`DbZHz9-< zL#(P25aNn}rhq}dTq(bwRyq{x7={9*{By9#n3GQ{mv5ZeekA%#6tjMFlKF04t2&ST zpnh44z5C);R`aio_gMJeli#XOtC!x{_LlnY;i_-Y-*%u;*FcjV*%j$DjN}{is@q-TT*ykw=J|K&}Vq+O7e%@$dqcxs(prYO>@%O_UI36fuBX z6GHe0H&Pkwbr6^hF_}u7OvVM0mP61-B9=UzgKS9WK)wVS>GC_}D?d4`I@fJrHA=r_ z;ZfyLhjzVk?XoiCbXK{#ot+tbh^4=^?Gj5rSbgW{0rl?vO~0sj`u5z;$B>1^4if|P z9CZ}Ipy$vTA5Q-`F~k5swjs4sBrNjUx8LL3^d$SJoPD!UR2DdYl($q)5F=MY_BPVk zRK#I_rPv=M-xhK&M?F-v4Hqh+4k=%$=7v$({-K%wP*ZsL} zHA>Br9=o35ZQj2*N8ZJ-+D z(4J%@+3NiAO;>;V_44MoIZ^o7hc(`IU;~R*?{4;4ZE9^G3#R1Zs(Q2Ohn3P0_v*jX zN4;-bxO|Yzy0>6GZmJ*6ZP+#&Qw;uqX!#j8E$=Aw69x;TSS=-T^cb2IP;%_=57F~3 z{K^1+%yZFpFSW70CwkL%fix8e-gHrOC0A;H80l}q1h&yp@0-jm@x9#BJiI!-hF~Rl- z%y%#gwq@AkrHEi#dPck>E1Y%+OCsi;Z0%BjXL}Gc-MdERU)U**Pr3HTFINg)`|o{e zKmj2|;c<=>ug+j`>fJ(?R&|?Y%u|tp$Tm&AD(^0-vC71Hv!~j*cMSJlFCM3@V@Tx} zSvRVOYg@-Zv8QUsAlAD%>p@7QRvp^?DaP~p@j6;1}}fOwuR(98kIzm#O!g&f5-73Qin zM5XVbf8%xmo?j^}%Njvmxt0OHetu}?Dfz_D_YYn8dyTo^EL!w_hsE^{B#@$aa1`b5 zuu@84ghM+9oSJ#)^Izl6n&5$JK&cG&QM|>NoQHUeNGsK%=2>u&mj_e=6dh$w zn+R6;7r0y~GaN}tVvD>(%>u_C8n$?6aO0W9NKzFy_twTw)cZ{MdhOo5tJm+9WA;gE z_x5W)p4YrMqLJD|ot*ZHdh;N&{~7oh3odziU+~eZe}CFCD0c$j^lWvC{0-K<1@abo z2fKkx{29E9;FAGmn4xAYjQ-HVl4W21rreoXF1NU0`td=Sc{#z12_4kmAuE$zEQ=>y zr}w#K0XWea-UPcJ`6n1S2dGp53JS%~V2r}&n3V5)Sz2DXLmckhD@RwoB|a{;ads)$ zAYKta*jVBujSmy_+E`>s;RE0b_$c^?8;l@$F?8zE_f@Y-?L@M~FrhX0e5$YOBeYZ` z7mgrjC3V@0wRii{3yi$nh&~zg_tax3T#*vNCN^TnUUh!8?vHZToW;mnALNKLcMx18 zVFYU1Tn5h)16^|qVVYuT*-CpAMNvRktnYKWxq$b=9cB&REf!0JR<6@>dBN>f zn|{ja^~1(hw-zn9y>io!y>fou{2q(^JLk~K>E%uQqNZ=oS#ikp*P-PzUdix{oV77$ zF*t4p!=*PA0?8)~hHhML!0@uT}W@d?2SHrh=}QJ%>lOae_w*^SJdAf#|*cjc*w zV56Ve)3jM=L)*@>{Vn=NC1$>u|MZdYO#x-5=%cSitoQpA>wYwglKrH6=tBy8Zer>; zpqYX%B;_=PuOlz62gPy#thfOX%M8YwQpsgt!xyjQH_$yJ&Hz;k@r6$#hzR)y2zI<6 z*1+LGyo3ylFgrwJ)iqoPLzDs~IUMj1xSpPAwPIXZ5i~+ak_Ftg#dFo_xjLrN(zd<3 zl(g-!V$9g(J=*SX-?Qz~My$~iTzsm1&hjygu9kG^jjPh~^k$;HN8F;ZG_HcAOI)GoeJ-DSaZ}fQ}JHW0)BYR#`GI!ZQtK5gg%-hm7OFh7tJS z3K_R)A%e_dx$xj%3Lr=1xb%th$Mr)eo@9Pcp*ohjedwIm)!SRy3v9!^=H>gU_cL?z z%loU*1?(@a1W{Tnw?vK?n=m|EXu5-0Of9RoIp;tk;OmAnrn(@Y=LgYpN}|Sz^qHK4 zXYIla_p_fnXY0>$+VO~IG4>qw9r?e=G6Pzvh_1R4v@b!@bY;3FN#2VzAio9~^Fn@- z2JNjJw^qH*>Z3}_>jX;?*d<7xf&Q4lStA#}mQ@DP)I29Lh>#c0>n1{o1O+}KVLtwMU$jQ}nWerajxnzWOoQFE7?4zj$`bmDs4*jsQMa&3d#RM1IlF39 z)rd~g9i%Pi&rZR!dtA>7dL0MqBR%V23?{^l>eRjDJ7Zp5RkNyQCuxtg3y%UP(XR9r zo=q}!#s!P1Gq2T-da~+ka!vkD%GB(Ex2%t!z-i{@R38A9x049(3a{40TGa49Hc8!L zXt;}~3nJ=lJS9b&U*YpwNAbW}(B>6n%g4;|#+QF!`a-N01{sZoSVF`ZhdMhy7ww%@ zWsd2yzf1bBVi6`Mi&*vdc2jw)2Ny7pdFoT*JMQ;;#zA-kq=7q>uS|TsQiFe>zCc!p z17aYC5|Wj7@L(sgj`K5CIA_jR{mtY1uTsB%AgSM*l~xZPZ^dDc{)?&n{lV^`hunEv)aSvyn@|fA*&#U(eP$I2%e<Y8 zj_<#&ZrIOKs%W#vJF9=hJDc%$>bxhtlfOoPr@ql+Cc?t3Qli5oG4|bwRL~zBn(|ft?Uf&zt;k@v5F?fnoGg&SJq{RZw zUKTbCFaVJjOQOXjiKm~d7nIvKZ%&ga^{=@ss!`^lr3*`ZO_3?APKvtWrYTLmx+AM` zPTyVEhE>&-BaXayXyLRjz4sm2f1Pn(h_28fokHJgp>MTf$fT{2Vz0jGIwTljAF7aQ zVvZzI5}BRX3}9Vc+HVaMh0 z$G7+C*0{w_F;zV~O^0YA+`guRdMxv{}jjIh^D+1#*Z3>B5 zCdm?pZm)zZl6X*kX+7IHdHsN@d;LvEAFN|f4(u~U9o2_*Rlx=m&i)_|2G06n9q4s) z2u7R{)^XOW1vp34&~vhC2Unh z10HfgP1iZ=EP)d0!)3KlxIKr)g+lefW9&`|QNak9C?jSrWq|FYTK5JL#`<|qQJ#?d zc|v?KZ1+GeE+62zK%|@rCHEP{8pR#hU?AazvcZ(vktYTlrvq{wiW`72#fC<)0^;q0 zVL`#7QnjvLy=FxPgCk?kN2fHEmQ7qCs=m9$A55(qTPCith>tm^iR~M>V0w?k6k;Nz zYrqsL2vqY;g|&bK5x&sK)ASDRAzx@@U)KDD;;4h#`t(vla(P3~)5Mc)l4u)k<=U@@ za>YRKFa#7U;acG!NWI>E&Ng>$N2IQ|MRGr9^8MBQoW-;1(N^$z>#S0-*D zuV3e6-O*X>?#vxEz_&P*jWA2n7uQx^N^@@W7w>A0&Oj7dm{dJqx+|ZC6{3NV2Dx*G z5~=ADp|64;4~|gxX)UNd{IoGq^0-aM~Do7Lyv|W)NYBG_EK~u?_lls!$Lp``{q)Ob=94h0W3S=?i5n_!am-0$ZU)Dl5 zzl775?%H)}I6k2hQFof^EcfI`<}BsoK?!XbK;Z#l^QswI#o7WJXo%V zgR=*(jjp1v>(mQ!H;f@z7^=W(sP`2i@I<|N)~hn zY%yXc8(mgDOnq`@dHG1z>q~LAYEx5KEB41cb(vYH8ajuK;(hF|?v&>Po_<1(V)4{u zqYircAnGiUQK&?8Go=M6jk(o3m9rrC4NX{A)KsYookm z&pHiG1Jn!B4ZgqSc=k69NPN-jK+@e!jcO@H*1Srg_c4+@U)|--4sT7Z2R7-(8D~qe zpYxQ|#CcHMsa{~MR!Y&^msWiN9(p$7#=nLw$PU?gqEcUrx2zuwr*4fF^9;QD9+dzh z>9*|a)1bWT)?Eo|D^2dk!ScAm*kiO+g)yM0sXOoT1U zzh0M7vzD}-HtF2PK75^ZHTMQyScNGHGvv(ll6(1t=s?j`w;Z{3-77zFdqA^L?k0@6 z^7nuM(O8#5e;#@vWM9A;6y6zCIa)4p?sd|}ig}HJeXKUVTEO}BReU(-2hAq*A=1oG1=o^QQCK5$E-b?96>NL{4W#4|34O7UHw$ zODJ$`5pc`_znpPOeJw8RGZ;>3lOyzNB?INO+gMDvBdbneQc&aI#H6I)XFJDr zA3nR&_!Cc#Y!laW``26NpKKYh`CQGG-3|CPb@r|_d0dl@DWSkIp8#LeTwqyvle|Sc zP7WeGn~)rz`Q1Y()*jABL?dlr64pb;3lTahfuR(7qsF6=-$PsDj>eH30oK41C72gp1)P>Ik!tXilbm}NsG9Y#TB1WHQc z5`f7(j6qS@E!W6fBSq({YT>#olhY=e?6P_GkZ}dMv&LAXFQ%u|j*3f=7*8kNAY*-# z;NhLeO`G^c-}!CT%cDlIi*ZQG9n-j8Bwr7RKaoK(K(Cs)bu9$*e<4j~z5$~osKIuF z&XNoRUWJVpzja2RJ14c;?Ho$p&rs<~yX)+CXR6QozYeVN)r8lZqM(|1pCXoTgsD#Jh5cI;020ZN?uapr? z+b7D2@TrJkelHwaJ$>mHi?^y@Tvb0*Pgjrb`-B*A^z|c4+loz2d{a}rGQMd2{jJBU z*RUq2oBhOd%R66k-iiA3;4_~?{)IjbbhzbUn~3lLzvJJ5Rr{@eczioZDVK79;D2hCtW(QC2-wNjW#D${~$It2VyS!E3$zH z;A=|P&3Ntf?p)EZp^Aq3jaW@S9^J7L7NC*6Eb6^hvciF3MMi|!9o#@tH|@nXy*k@! zim92)4nJ=icqB9Cpk=3Ycu+T=MM2N3tF#wx4m7}yiXKt1aek|cotb5yk!MYh!%p!W$;c+s6jfYQxKn^14tAJ>8Sn9}JrxAiM z1mkCBHc3h_4=TF7;d2%;@5{}fsXw2|tg-dn#u|@3yLQ!)vd-<&+jpMaO?2#4SF7)- z0edRf!Xvt21deE93fi=4xYsyb}!owefCUDe?aj^(G zIrECT^A(8UDg-MZWmJX`1{zGeJgf;^x)#_pLaJYNU7X?kT8we7Bck;bODJajq0^}A z{FCKN8aqw4!4dL`duPfT(8D!=D{}c#cy>t)jHm>6+c)h1~Q#+w7Z$aL^YX~GhvHm^}{;0g5IwhnmkI=VhYS6(W9 zW*%b)o*>Y`VW!pOk(_DX(rq2D^`)d}Hz7}qp}Y~u4QT;ThX>Tgo$*q3#UDB%34zJd zmy{&wv4~BQ#QuMM$-+L{_Wk1XN4BruTg>v`9jX5CZHpFT&Q5!*Tg%x~-u~eE-1Dy= zD0zCDxT@pTlH*^_yfSZDanY241!D@HnNoJ6#<~SzCAFr0&1y{AxNLjj%~{%d?8o6k zdF93_60bR|!Np5|#y4~wF2?m}Fu*E87}u@AH_+(v3x5La;RdA{M$g3)KE#Hi!|ota zO3tmik^lD1g60^@=>CWAzBOi)B*l?nXR=r3htIm&6`ddT^#nw9FWm!rT6J1JqP}E# z9dyJ7PgDx`L7X;}b^?#1t&Wv}& zk8A$q!g*UqpX$(aUyocts`^weQ{OOuECe8KxVA9TARr{co^9-H1YcLM8E5;pj_4UN zG-67GoL3g;=kB#)3FHvQLJRU-MPOc8jOP?%fh!S@Qlhwf?i-9GsaigUB)h%p({E?a z8tnP z_B<<)_uT_P$OUDh2k__v#ai3c1%J+GQ_VBfRun`aR&AC8)lWGr!i2{Kq?_h1%%5@8l^58UHK_aOgpjLTtO3=cf z4MEbhQ+tD+3lgWlcsuClplX~eK|yT#i#>ye22BZq-*z?5%9y8zWFr^J;HUTmaW`?W zE&df`fQ3T=jv*CF7~_>Ia2M6Dq@c$P3Wk)@t?5Wf2;CS0BGqQ?3fiq-{L0ayb(sZ^ ztu1=?m8GT)w{G2n-PiwX{HNYizvkL%7jiTO4-C0CR>*B;QgYJ0$|_|_(=h|};> zl5d!=IIYa==`@T@oVL}*ta`4JuStOCR0;B>cPLS2mqH6fI7G`4 z8e)Ap+xX^>?K?F;XUJH2;(~$0=k_1AVDzwsroLUfwvk4Nt+QKq8q~L2?*!YBF1bT! zkE;3#xc3U?$RDvCe2(~r`|ung5i1{yIW_8(WDYZ9EM5~pc!Q!Od_({;cSxYfQXRI= z1CJLJG~HHI_6EUJtgAzlRqaOmhtPfyBm&+(-yErZ=7A;cdy)q%PTJTE&{>f!` z?ud0i{~UN)U0robK7hHsje6+TyY2`!ofN>E#N`|4?wbX5C-@w2X8)nS5kLQrzPP9m z(IM&qyCave3mPdx`)^8T(Eb-JNUT}8*l)=>cO6lEj`cp!z4FuQao*SHd+xsK{eWdf z@9P!7@oB*E5qG(yH_Ge=X=dO3g5TOuj3e zaME6YIV)4AnLmMErL{H}T!(@_@QL9P%tI3c4{aVH9ssuw4+v zsx65@BYF($(`Cw*6~Tp@iKnxFM=#t=5dX6m>-8ww z8AZcK&Il{?lbiQ+^z|RzqP2W@VAq@{>JF`I_w77%+|X~krQ7U1M>dG*(Kw+!;kyXB zcK|f`HqXNIgf=dn;&@SItL|Ozl^lmyL{I;f5G_su!}tecxG+PL{UP;B36}JXBe? z{v1Da8d_#pFsSOwquk&DX522JQPwuD8hp9>6D^A1r9&jGqDY4G=LKV~6z$ow;L51^ z=8q?gRu8k<>VMe4(Gv(x2f^=LvRr`u(oU_r+_bqZ8&a%NgWIx|80|xvVqyD4YMadmSq~9IlA-GWz#2*8$Nu*%<0RPb{?JCXTpSmNuBG} z>ztIAj()EI%>HY+4_X>UD?S9Cm7ZQGK0JmAj@0lw_oYzhfwWS@JdzMbxv$h=6W7)lP*9K?xO&{|^&4ibUcE{_uxu(Z6=RBa ztXWtx=GEuVmZAR}<-^rO(SI9cmTl<2M#Z^~UmpT@37``Y%V-aQQsii^|A&Vgez15t z1~)hQp%7AL6o?u*_hKLh8IrsOVm&V+!k6HAoYX-{UKAu9k|qtyRd=jxFY4 zn`xX9lS3p$tl9#6yM;CChgI5Hn^S!njbs~!DL!d%F_J3^;T0D}+ozeYO<*5v`2i0h znkKCvb&Dh2p{6vQ-aMn|?(FZ2{@mW(l(~HQab0Ze zCQfhMzV0+@_Y845n>6+qtDSqw{P8`@*cpBLw{IriyqS?b{E2C!E%$!k0=NZ%?3dooAB?Z@u3o z8Q#UWIbC4z;CO-AhKg)OkqnY#;Udo+(54H&%bo zRP{v-U*wNEjF?cU9?x4spRCVdwZyoV^f9zmLJcuG{}+A7{5`UlkL=t(I>pzb-j~*j zWatZDemeeeZUu1k3e};^aULL2Tn#cLxZTd;C9dhUicB(9@2T}wB71;{>_v- zSUpiVVMK=|d8{veYPcp11RhJkJZ>+G<4NTs6M19NsSuQDoP@q z5*?w8#Ssa%aK!$FBX%wvk(T&*Gcx6*Xao%_mv(C$gZ>d1WF}1~Y-GmiAeTccLU~iY zEVbd>;ue!?41zC3RIr_5sY+wv_{6JN@<1u_{B$4!fY~5NI$%-&_h`k&shOZ8{nN_1 zfhL)fgW}{tIZdmb2d%yPhCADXO*{)?iKJjOA{ z`HTAjmCMKcysTk-?NmoSQ9k7VX-(xK&P0tDm>3>bi}sTeocw zXygbJR3i$4P_6Rn63>o!CYDoY=-Rwv9SOqjc&NzEQSp$zjl~`b+s+^fL@G z1g3DZyJ&08E53m%hG3dEDx8sgG7>g)gf=84!JK3@Ly$y|Hg%nApWM1&!Y|8xP4P1m z0s~r01INv-9owwU#IWFL%E+df?OQZ$+SoL_4VuR~?Oy$({9kjN5M(-GN;hMja@eJa z6Xe>+-4g_j4Y>%415)kbl(!t1x&fAepO4 z2Nzr*w4Lp9=1@Og$3#_Stu;_-N9hH%AWSV_>)8eg&;qaJ4AS=r>~(CQ*j*|_Pc4M? z8chU~PO)E5yhv0z0t?jSK&XNvQS7ePOJW};@gw_a;g$sp7i@+;K@z%D_mF0pUV;1> z4X%5pQrljKXi#k~0OM%I`+PJUiHF5DUMI79_^h$sQ5o}h518@-7j%oeYC~1}598d2GWlm_dnA!z^YLpGZg|IEjOO`-$b^h9dC-J6L{jT-Uw* zdYk*?vSAvirfAGVoU4Z+r$!qjFK=?j1zw}nGv-}bqOAK`EAf{2aym*$_b76u%;5D zB6<*vb^x&d9LylwMmKQmP6R`~G!xz5!a$`*YT#qfX`ic!2Fp8LJZ!S-)2S4rU!BBg z$q)Uq0!tbQ^OPtp%Qq4|f>hy{gnpqGsJ2f8RTROF7o}}Ir-bm}aEkcwY{1xo%6tr` z;2W{yY1gbMfl36wfK9hYVa=C^Zl8(88!CK0L_tO)@Q{;e`JN_%q3`U~s(_ z!&7P{H!Ca{9G{V&T05ob*8>+64$3WB7}KtCqxO_lSBjaqBD_@q4*&_t4r-WxBjyu{o8kr}q z3CRv@+faSNh1Qs(6Y6i$NVwG{3By&2T{t2PsGd*z0j@J#cL>ATtC%&4{&}r>KE5HJ z6Dqe;&ODRQz)RNU=28&HGDFa|B5Lk;6lkeg>Dl$OTF7V!Lx6=p4H`eJS#uMN+CBK!mhiXFIQL07T>Dc&&QD?EJBQ%42@Ts zV&U2dqEkp-%vD^FXAN*6(q#xjgcj(`URgBc3m!HpaytnEBL*+?_piEd+^Ec!M)l&cRly$ z?_r&c?~}|p*Y6eeHpS2A9=X8v%+LBc?xpt^;GAetv+6&jDe%*(i5+p6;;Yp&grh`l z&?3?kcmUJX1J&(u~>d2RBBfrE8no(Rsky^dpB)z4hjSya_WV z&0E>M-{72F_4NkLo9A*?l5j%~VMEMsfHpm*)NuJcVzZ>-a4T*dNc`9y4F&*syBKYK zKo8=n5yb&J9_5EY)CRUrdrqS^akls+d9jV!1ho!bF+`r~!#WqDWuT~J%!YFHEh+&)Tq;vb%!^N zzJzu`BhdI$pjYI7tjkT*n3sPum%+)6R@UsMpdbbnOCw}4dIPYd}(9Wg^q1;tX2gb*bpfXgB< z=NN+nbqAu#QJ4oo!u?V9ct1vJ?vF5@lHOi3v_(dWjn0=39P&il$61YA|7CLd zku~f0XDnnhUg)p>^5co(O*eA8=5&2*-GZ#i#gp>ZBsX3;>d@O?y<4<%#)x)3v&T<< zD*x#X2fBC58J`_hD{OR!j=jjX3VeP+T;o?qN)X1FS{@O`jL8dtVNEf2F^cS(JGc#i0oAw+IJxX`hxc+Na6&yWEFpr$%qlm%eIO z*4kVbwv{@HC3lcpX61`c_pNRMiKz*EIf(<;X2a^DCxM_Tu_B^)ICas^D5wX9Z3{W9 zwgUN~C;s_)DmJn9@NTI&akjXy7QwOhSnXd}>wwqhbw%bjeGV$*sqP`)2OqhNTP=R*Fpsiwuv|s8Axp__l)lKCtBQ$Pgt)EA;{=_4*!+ zC)opj!^WDCaTSWq%>6j)@qW}NIR)eab_FCi<8_C*7lfxCF`(}V$;?Wm7zLCbL!J#w zi1c>*l5LL#ZQFMI2hvCM3!2O==sF)=+244}HyoQ-^ zEC7W^);#f?SRsBP{vvu}?{n14Y^?Ap{Iuf~lPjMV6>c$X##jfGiX|&O0(FIfL^`~)i}?xlejnW1pn-(X%fl~De5eIx zKZBNf4A)!QL@l=a04*}1zq*;nr&2w^5H9U#yoFa77O$fLdafxjUlf9ZgW}=g=~7)9 zYpavsXqa+s-9tt+1X?K3QM|kws=XTXdB)b#>SWn;0n%b|kky+DkjR$g3Nn@FuU%5V z$1`p1T{|?GIAD3VdcBWj$F2!L!wJ2d`-Dc zLr*lob1{$y3n?S0JhLozx})CxQhj;*{&m}roLlt$wp%RZi$C7k`gF;G*UurYKK#0J z@LI``FaQm{wZ}U7bqmi5UJYr>%pr`ZaQBB&|I6>8M z%RRPefm^QN9AO+AtX*DX3nS_BlwVM-APDOiq7ktY_!~~i3E>GM08FJT9~!CVGy->9 zZJ==IH=9NC>F-{?v~J?`(IXb0`R4Ro{O? zx2><8UOs1Q{g^)8I`*45WZ1#Mn7@;VS!#)W#2@moudWXVf60fX&!3yKHIN37bzXRg zf~k@+LfB+^hP?^v+@WY0;&*$^@!uA{WxafW67KWAW}xHrh(V4nC@^bV>Q&4-x!V&|RXE==RTVJ9lox7D{R*t558mERGsIU9(L zoma(o&BYZJ*he~Jouvb2RO5K4QbWt)4&frk#nXDhPG@j=-`vrs3DLyuDmAnZDS-!& zgw#mDMPoisVxF?Hk|ZfTjNHV+(xE1S+z6QrQe%>dxLAk7LKs-GcIW<)(=U&Iyr8K4 z_{%ef94yM1HR;X&zLn1ojbAuo#ijuZS(lYdmhWW}%TPZ&SG2es8ROpi?Rb9U>5Iqh z9+pDYp69d4E}GT#R3b4Hn2o}RB4&}3(C}QTGY85U;pz< zS;?2{H@(`av_Rw|6E}9nB~2FUak1(O%{CbNA>$VUAN^g;UgQ- zvE7DEt-AD^KzT_~pW4Ta+R16c3`H`;XYmM5eT^l9cTLt$bfUs1P`AV=5(HQ9c-WJJ zJ)Du6Qffyei16p6NUY2ZEDWNUl-E2d3C1nt zbPhpIXVb-*?{&z2ckV&;ugzPS|B>UL4lkXua?iOvE1$hNLYaPu`E3<9tA9o0^y=Ps zAFK5oViH)*eS52g52_d6m|eVvO;$IrDQ5Ef)r+sq+Pho5ds6-NIrW=;fW@Hd@697Y zQ|kj3p$!_k*FGmP`r6{mihjZ!v1z%}64dPm7@Tp1k%r5dQX@2+Z^pH`6H=WDr7k~* zjD|7OzL9}Mp@h(|rsB^PCK^E=27CkI*3(FN&e}sem%Pu+1z&7BHG1^(pR2#ky18b_ z&O>YShOqJ>OFlXsf9&HD_3HiF#g%IY4Pxnk#+KY)Tk`RXamPOGIpELVa(e-%gON|+ zG}f&@EYHIgN|}Qhgxx5>wQjxWte(|G5jE8g_lz_~>%(Eq=q&-h{b5ZTN|2J44c?J9 zhVNYD42FIr_h%-n>Q~O2>KL32UB7qxTBKe%`OU>Qzn7pNJ>vYlWKqF-5%f=lehTy% z^pE;HL=m(;>mBwAfahK(ME3+gT^9)LjzQN*Tb#kYgEWO+szHXhT+;TSyD(g zo9^x;UI$|^x4;-2!g~2ze*JqswxhTXCLZ?LIOIc>;wkSDiL+#PBLw4QU0;S?fr5Ix zHNTCs05ouu$d?>$Sp~A5e9u$$>YGxcWXqREkG+hG9$gEzIpe}29atyOn{gKLm$uD$Yy zcrmQ{e$MAwmmZWbE2VEJMADilqq74|yJ1kJ@UAs*br_=^YBQq04p&J7s`i2?io~?g ztPB)3Nf1$yJk<2rHJ`1h7;#+vbBnl{`5k|b`D~OvIDfwC&Y3Gx#mg_gFI^K0-%)Su zdX_bPZ~O2REEYLib%BV&>ZBKGpZOL+Jp!MhD5-c0@5tFDQ%iy zg*^m`31|=ErbBaHxw<|?{p%`1zYzw0iTOpa8RZYk53gN!h(f^GhoHWQ`3|56@XAlv zW#@;dKKcADM1Etew5D%jO$R|YJ4XrDbhFs~m}{Q--lDH*&cx{_UQC?Vz};C>LNt{m zIk9_oS<;rkTOHbxQ2sL}83jjC0Gg{oDfb1=O)IFt=%y;H(8t)&BVvP#&K~Tizo@Dx zuPjZT*hbttDVF;m@yX!9ANrgnf?r6~Pu#iZ zX=)SjOM<>(x)~;xz{@M5T(3#1(g>1;a1jHoR{TxmwOI&0H%h6c-2|s-gAfKc1+Uz2 zKzu`PI9kncMTYBl5;^N>8Q`#axO2pLd4I=at7RQ7)c)i3^E0Pu$=_bSE+?H2L0-5u z=c6wmOGew=9SNJ%<1<;ovJGOt;WK!?x0jz$1Ca{O-gCw3Dc>NoXrIB4-+Jo_3i*cw ztmQ6}K;mnFOEzoSi$Huqn{oViS5QvLHJ=+(D$;aub{%`Ifv2EVZU7bymcge@V(`Nf zJ7IPoRKuL|^L=%pB=>giHI-^JTlon&9!cP61$hznBdu@K4Si$0Z=?^R$>aQhKCL=> zLa)zzBqKeBd{q`9i3iDXa;n@~mh=9lyAY24t-Gx1Id-G+5Sz;8zp8#9=B23?%3Hvm zVHcc@<`6DQ!WOKl)>u;!@RqZo@_ejjbp|%VF9Jv1$MfIGrq0apVd*lP5*p4`?(j`X z4P|+xLllrPFP!^Dqa3ag;BZku(0im|)j?5Uz($$^n6t3vxbrGLpx1blYaO;S)D5@RVNoNjgW&Qmn`@#h}A+;{$zIjn!14XLpfynTkz3! zaYfZhuRKD@+YAA<33dS{BappUx~U9 z&2Q5)YA7M0JR?m=>Z#O_)*+-5Kw1;+8hl`lngqZd>(yX^P-3+E03DCQ^k_S5%zyIy&C)>Uvxm$bz_I8F6o&xqTwyaQ0qqM37ozQ~zS zR~=?b!x|418Y|4@LqIs}HC3D->G?7AWsDx!Lqrj}%}~hE*zKfdr(3>%dh6NW2W0LS z>%FF4RENnQtJP}ZjoI(AKiN*_gB)oz>1z}4!z{o!P-ykfHgzyQvQ55jbjFN#z|1>< zKsKbB65l-2;&9QbZEv<|dXiO~`$Zily>UXlx3FLb8~xi?l^4Z!guAG7t?oCaV9aEX zlw39~m;KfYUA^=v`qK6Cav*orEY7|X3mal@yZyZQ?uE*mC-$3y9{gwudyu2<*V=5Z zo|SDJuO5G7oBFVMoBD~n&4<_y(?iWRhgRkH@~RIG6-x)I@}vWm7uB=iCDPO#mQ0K@ z7~Jo8C6rs{K~77}pi?fpkeBGGOL8Qz860^@U^D92U??){=0AAAL8yTT99AeCFnNXt zaPsMheFZqA^vuw#FbSMJY#r$y29&eD*%O08g4nO>^L`<6vtv#l$`y(PnKyc_We^3b^2Gb9s=f+*ONFC~ z9rF-|>|V0L*VYU8+@W6IC%AykPrPRWRv~~M;Rz(+#!Z8Fgc1Xz?>$GID$Ph0D#hR}Gc+tNH48 zznBilHC|EKRlZii7W*s!?1GVB5c)mvrUo9#i-p%uyjXZoM?urv{5;cKB*5GmT$U6q z0R-w@QrtP^)FheI9ufx97KTqPnWmKJynfC*ktV<@W_jn(WWsLDc>Me5G-U!bDr zkPfT*QL0mgMOF1Ozzkgp<#P3foSY;y!38*1ntYv0upfGIh1Ei>*cpnDn1nXrij64& z=cY{tr&BtjaI8UZy%dz#$P7%J63f#j6e7MMN|_qVrk%=;&51=J%!=4A@KJ`v;&G|; zq;S*pb(#+aNf+Uf+{utQm?zG4(=fl2G#`px1mUulEBLw7D70S zI@Ks48wQ>-hi9av3A`kZBN#>DFpFAMNsqoD!r@jEP%=BWOR4*d$#E6e)WoTkjtMdSNjxC+*HpWAuYma(jq*op1mQuv__WQNRl=5F=#J3@NpJDd|~ZX>C$4 z)Xu4miicBc13M~ee}V612?k)nO+KkY0~zV`1+BCt6dfT}O{L(HK&|9)MHu3S(;${q z>4g9Pr>a@~=ZZDs=!M1CMxlYJ}+PU;6m^#*RH)` z(E-cdqKknnlBmDS0Kc42t^Za;~@QvrDAkQVTH)?q*C_!H)nHwXJ<%o{R z6+lOd;WnEQz|HmOn#P=zlP-{BU3#BMUcWKVZE2ZaCuCRh{P-vbdUxQ9dp6x)JkH7d z61oX@>vdPE(#pU7s=RUK<$0%@H-BmF6=&nq|G9NGz4FSumvAnck_QgT-cWz%2R9M2ILgww-zBstBWM}1& zkoh}`m*V2iojZ&0eaE7pc{|N5xF2@QmK3eppnl7i&OKgh+_lu5yKt2vYU{f`!82Fp zOSc8l^fa*9CLmW6X;a|z3l$hr2|z()kYIpIE@8YfUoPHV^^A0z=b)*tUKf1+ep;2; zWpf62Z!0`tQ-$Wp$<#*}DtsxFHs>K0HB%{ZS}KmDyrZV@gMQIye?5uZ1Y46n1&K0GdNp)75Q&F0e zTH3v$v^#GRt8hqaX}^lnemrn*a7F3h)Y5?!r32w3WP-8LYIh)gv?HAikNS7X@SPdH z8}Io)xn9|}>8vT!XS8TJbH>ye#_#71*QLFNlct96;)$ksY-Y>mGp0|Om1_9TkluxU zXhA>tk1abjapI{mdE2)2V~a0sD;$2dSZhHmm7Mz2Jm93-%4FzF^EVKl@n ztIdLc4qKKZEFF3N5hRM$WMxk*U&hSKmZ=YxEm!|uw(PAX?bCa{XcnBDMNGbwTWj$;X(e97GKhm-X9sp&4JFCy&(Ghxv9v@KP zjbt9Nt-QTGYI?+awDjogG00<*hXrvhUH_3cFW~m0#%Merk47t*YMJq(c)G6b<>~3) zM7|Og^-AP9^@V^tmsH32pqQBI>I?3o^4;PU?BB=m34vioPL;MU8Kd9GLPGTi;}{3W zbbwrP6^kRJkK`Yg5J*)muw`PBFsvw9Ot7!_Ts-Z5aOWmrArbZJ2Vb3K9#aoNt2v!o zSq2Mrx(V>&ftT_!_;Me7_dwLMyZUq|a-j~X4Y)=e4injX+>Uyf7dV}s6(}ea%&b!J z7Rw5&fHpF#pho2{v)U@E(GgY~m_{z293o63cI6<)GZM>FfZ-C&Wr0vw9joH@Htm(A z0<}jr@i8NGb6fbXL941K5W=ck21&NJVO1L362ffoDIM$jNnKUCker@we}`69pMxy{ z5(jehJ6|2~>{kcR+^}Q7vZWp49^*e(#~YW>H>GD7*5dK}wb;~k*e5vFp<99D>8v~n zSV@WCO?3^s>v?CL>=-b_dJC`v9Mpx>j}F}kJi?E8a-J89#NgnlUWVZxE=tc~FEk!^ zS4xjfOo~;%OqBNa?)@d}q7=7n*|IHb>wG;mcLIEZ@?`+ocwqhr9{196H%J)C_aSL4 zy6eBnY-D2k_aHBLG!}W;IR- z6V5>g?sQtcA;PNVV2=RCix_XpY8CH*$XIn5i)ZbfSfuIB`F*=eu9nhl!zfNlm3kVGG@%KZ99!_8a z7jN;%24&0kkqwyTtDNuVm+aoWY4zIc%5CMR#~bb0rI$D6?TXKM`}C~EnO)xdbK3Qp zi*j<;Pdhp$TT$NlQn63EJb!*3N^_WLu+m;U4Zk-U^ttJ3Xt|2g;sdBdo$MfnL!_Qba3a@Ngi*(p|b<>c^%?bK`IT|dkvbMBE7oEI}*l} zzn2rE_^`gjSovlm?2@gCYzmz++^vb$V+j=-jVg2)kaAE6pEy!S{jDgge&P-Ei9S=0 zvN2SRA)$dp8Ulz^%MgLuEL5&IWg^KMMHtA9#P$0(&O2N(_p4=3Sd|PGR+7WYf3m+X z^m=UnrLg4ZA-IcYNsq+F*@bss87$Y8zC&P&%u8!?KWX0 z!5aetPiSg;xitH{9h)P!}p9p};EcH@N zwwarjc1&8=FD^6wlZ)n3HZnb~X)-GvHmB*UyrLq(*1$LT#(j2QX|Q>r#|W9-P#P6v z*#s0>Fhmnf(q5?_2G(p&6B z<=nDqme+IfkJ79uqN~u5?y`nTdzV7&No`Xcv`gLihQ!0VYRzbvdXd$_!fR=pz;%w6 zqU9t(*!8!X%xdv^XcYehdeA=22B1Yy(fz=m1BC%6Oo7(G&_HntoKo3^7kkRy0iWmcsc*2mlr)IEk;|B))=~@bHmA zsIS)@-0Faa=GYrf==sWQMJa8BZ-qT#6N=XkoAwW`_75!oyqK|AHHFDd6iQom@B9z8 zA_2=j&Sy(Hx1J1)V`=B)0thez^8uEooB5e znK+=!9FZT3KuHKWaA7vO-%(pe$|RX2OC5_t_89Q<)++U{_hUm4=vul(oBVy<7g|fb5g+RVw_Ijq%DKnuGF4f7F64_66jmCZ@|;d3}%WPS?oc z>Q566EmbGmEc{wVm7wlUA#!vzScM2(VwNs~2oQuqG|?FcX7Rh28YMvhl8=??lcFb$ z?Y^Q`v9d+XQZ}StICNOplh-`ayT;3l*@*191G*`##9cW#%I%!@-&LA{ymel;K~p?> zDrknV&Gf2aUL054+J0$e9pta-c7+l<@Qz@+>v{l@apCJDBau&1g361RMk@6hzZjm# zI<`*FWM-d&g0g2XzvPwcw|<307Y#EtLNC=B@YZT-Z^-5HQe%y`TAql)Df)H55Y%a6 zk^|04E(gFY)|LUriD#4z8PRb<#}{X0GGdju%f56c7P326$jHGu3YD4WJK#q(Q-8S% zZ&7simKd%)E%e9T22E;>C9hlu*u1LJZdUehFrR?iQdHF}g@s4PBumJPBt!p&6`m8W zm(Gi7pj=iyl9e6V?U)a1_ttkp^|FJw;;3-s$Ht?ZZ{6Ri-Nu!jTZy&naQ-b<7E0&A zziOB*<@=m!R=w7`V;jC)k~`%#m%BjN6>bh(2uBZ(!76sT zkO77*FQOUR(4QoG6~m;+!}Qg?g&@H2^;Z=F!6-XrlI(x3338QsCx^Fe`f}ZBE&8Qo z&X}&$mqwa>p8jV*gM{jX8%!QPI73=ffc4f=Zi|KBZxF4QV~;uIg4cg*{B^FEKrJd% z)xWRT&$wQMe*>PsUepqi02eA7j$^@XY6sJTQ$_};Qe56&Tk*gQL5x5{JtK4!7az!S z0AyLMjCqdj#*H8CpgYYqU)5amHI^6xrB^rR3d%~2mXXayRw-tER~&tti%-d~(Hm*Pe@BA>&DW^u@>zpCIPY^YQXx7f1wZ-Fw8k6&DT=gsPR0n zD~B3?^qKvN&@gvV>qYp-EjPI=yXUud?N*5RFWyUFTuNOnKW}y>oyU?_p)lc_bp$xkB=Oj zI(+z4<;$;|7AQ-n3>!9uMh`lgPf$tp`K4o@-zEKFcGgkZppk>&g+`f{$`Z6D>;nWy zkqyLGAj;w^LIwC*8IOjm6wWyEH+0|v_+2@K7Z4%GEpH7$F6w3o8=wz|k!6g_Qin)G z4}qr&_biGooPX35G1O;A>q)WlU zviH=zrSxURTT+k+i}F6qh$Kq!@WaBkzB8}jz!GKKbv7ffW1lvi%?E*?wf?L1gah9H zhvrS=si+!wOTgRz3F~x6Hodd##j9K)jL^sG9vXZNzHVBosG1-mkZ&tiLd({z6C9@i z8Sf3W(3}sxt^o&crEl4_pcHF*r8B`uD?f^Br%v1;vJA(fSa}ZS`t(Gex29>k&M4A` ze{zQhDJa=p#eH&*E!ygS)Lod`%59MQB=@=QtK6k2tvq7gTe^34r|+17r>RQ{!SKYb zgAOWCiGUD*_iO-{cK89h&$;t_KcI9(F5MumTE$Q05dLs5A3Do07o<{NSV_fjkYTfC zji|DGL>aHb-u_uU61LWUs+5*21xNN$*UQRi= zuW;-D6Q&<31@)nu!310<6oVl-&CP0hjgIM(IsMrFWo=s?K00-oFe4*}jXc+B@W|D3 zAp>17ca5GWLRMdwtEjSyGz#_L*&O(|t-P&bs2C@<61#|l#mOSF#Clvfl+^riMsMzS6=SF@4F+VvZ`3M`>~ zn7EPI%^x8D)eI_$2C8G-!e30m_e5BxgXAjQGNtqnts9NIYIza-U@^9puSqnnf1c=O zqyP!s|H0Z5bWBBPohf|r-LhsJJ+!24^P_L1ED`=1!A7L#jXd9VzzDWs9^X%K6W0DA z_OpR(cI+qW_@OwhsGX_c5Rz8jW!PQ#79N?AwJ5bne0HJZ;E{Rr zZ0R{_?>G2?{{Igh{BTqGfkc=I{6Osu+!si*fLtH(L$C^=LY&Y_=pqajCJXZf@I${A z07mJ@b}9M3Au3^4OV4=e>Uj?yZRgC9E#>om%@#t*tLI9dSY+aOuc z-Y^dV-=rH5_g`{m=~P*{be?m@I(I!&GuIjuC*(VJ>Xmp|R$Z&BCSHDzJyUs^q~j&^gVHSyk>;Kp?HO3C%8TVWtc0XgJS#b= z5e+J#jr)6Ny_N)Kj(r3EuF%IJAAoOF>5}ju)P&H3oPO882#2$tn!UJTLo-K#YbDuG zpP|x|Ae&U#&^<#VMz*Let(NBqVMXdU-eudFaFCfzI&1KZk;#9=E7M8l5 zncI4*_zg-?e0*GDVq84_bou9ExH7SJa&qlj$;tfQ=pxJ(9-8a? zl)`2ZQ-q(SZz1!T;NX<`V^T%2DU5k-zO>^_4q&ezzk+VEjAG@pl|& zj`y|VtWfJ&QXqVuWZ{tVp7P#rDZh(fD|cA^Jx_!v``zC;-$n|vS)|Kbe7|0hEvk$- z_~yJY2zZ&^aD$)b^H?gF2J04=3*Ay;0;X&^ca2$d-4DDG*B~}NKDI%ectSLnhr}c& z$3!QhF-$Ox6teN$EBv`FbN)XTl|nbBw=3Ag0U`?^B(~RkXdhy?v9KVklAtwC3uPqSrWwtQe-;WOnRqK}BVZD@Yt$tL#TDzBp3)Funn7W$A z3xxGX&EkV)3(rJ?jfEOUk>>i#t~RkQRgvmK&*VVs5SHX1bVcF32E`Vcf~-NvsKB8z zpau9kylcX#r1ZR4>3xshr{A5u_Gn~b+LZxJ_iuBdurhOKRzJ-gbA7PV3*Ro&Ngd;Y{~$sj1NFg^_*dcid2`N&L$ert~zv2YLKF4;C6@pRAZo z000XvCv*-pTsOVi!d^MRphy_0e=#u7qGA*$2n_~a?%I3Fq(duPUV6K~xvG@jDzn%8 z{N0Chx-D8II-bRLvoAR>>&t=;laL4V!9#sS9LIxC`m~V1a-=>$GxM4_w94NbK6&D} zDN_b@-M_7kxPw{RG+sMq_Vf{}+l)(NplLty`xu1>Z+Mg}=<+mNjgS#a1acr6?G4{W zEg{a6{ge=a7@Bn(gI(vYsvHZ*JiWYPg^rPK$y5;v%|}ssKNoTP%om0BEm8+Ddw5BS z@OkMWrG3bHpWZ`6lO5RN_LaiazyExLfOC)!L5<;895=AP>=i;~7AB0f;43v`L3rV@ zwo<3OnSyv}I21ZglD?Y**R>%-ibP1LZ$-rc(DR%r`vl5_u-@W@I&=QVl90G>4akzygBwK~sf-?5wACy17_|T3CLOF|;?b*9^HJhe{oK;h= zA5XV`|J}t)KNjY98@6%o#wEGzM}WoqP!84&{ODnBg+82vvR}RW&hx}ea5Ozp2h6FX zz2P^Gwxgl=Nhrx)9Ygj90CshV0saAjP{Jh_y-L-^#P=i$9pQc*fZD$M2q3ir36g zauzOIkh6XHlDRo--igmgmoni?v#*D`&e8?7Y}#&FDpc>@NBv zkgcD-QJIAMJPG@hiE~cfX8mNQ#>e5zW2PBjI6u|edFSes@;^HDDf@WvTigd@etc>Y z_L?sBE&K8x63{2Fgi0ou=>()A08M2R+O%lIs@0Jt`xs&QMRqV!!T1|LpLMRs{U(UN zl;vzYC2h426s|%aVV%&Unf#9NMP|8Toxb{YYDdqY_PJ(#j@pMtwN~5$vb&XjP+V7FIcI?uGUc6`>b~@8a6?^UN&yqDWRiq2v(s8zP=_M2VZ@VZ>tF$B45?Q z@a0vC_!{I`x8b_dQsFYQ@$5GPPgzX{p6cKg$jR`iSU6NF6+>Xl{BFtCD!imRK>c<6 z1erH9?*-C?N6-XecNV3oTS5E4)RBzXl+1hg4sFnH$}QRw)`tc#vQF%~+(W0d?NL6Z zt$CXB>cjhgiu=BMAiHgRF^b_0t@-)#Z|+JbgB(`zzw*wu9K zx%6prsqHV_<~pJa(oMQ566_aBPvM2*{u0|NUhJUK^OSHHU?l4{DkJbHo;MhT z^ZOQZ-YzDffI;qnGv^u)xvPR`yq_ssc2T3j=vsx1gRdI?mF67sL(ca=JLHBva8|t$ zE!@t+hR9Zlvl!8RJr%$;r!DZfCEFZ7r^m^D{0&hfMo{@aAtC_`ivwYa;&s9y6zc6` z$t-EVQ14>4{lMCb_KpCn6RP8j0|x6ov4IMSMSz6%-oif6Dw!q#M=}ev*G8{l3rttP zE(`72(-I)~^{M5D@CfkrMTgvRwV>?a(3h(BA_%mQ*YQP!0<$x~7X>l?D&nCK|H-(ycS`QE=yNu= z<^_FI57cQX4@c&deOKhbH*DH_O9a6g3V-*@i&&==yQj<@zgU=l>~y-+Y4+^Wy-FZ( z4Wl}=d}Uy#?tPDE?|(~!JS=b7?^VJ$#MjgAy@!hRrjA(Al;Ni&i_adrCc*~rgB2Nt z83@5@y+N?G5J6mg)$llYUPKc=LroapByC?bS(GEKJZ2YZfaH_C)bFCaMsFk;Jr?`LQKli7+$je9>C-r1 zx2YuucTOunm{;7NumC-B3E`ds26euQr73c`eF(XYL{Ik%rah`sG!&Z}ip|1dJ328l zwQ3w$4Cf{jVqh?W^jEG2w|cn!2t>nh655))(}voSVsw&+jE}B{yD;2(EKc`R*iy+A zZxJ1+ByFADyIHR}*xi_P8h^>;7lVHtYVHWj9;KeKdF5 zb+NZr)1t&rJ!?m!qA6wpwweK-(IALrG z&wd4t$t~zUe^g3Nmc7&|t;m9Fc#!=3KUdB)=r(@jc|{PZxd0RIlL^28_6klE0&7#( zHZKSA4?&`AE*K7o8YdDd)xd@q#t@LX#gu2CCEQYe4!1wN_N6$PRXMVK=i&05N;iz^ z3%{W}wF(!GDL~~ck1jZRq(J<%e30<9o!9*dTvi4_R-#eSbWC_;SKDeTt1eZ+0s0)!E~=XRq^$H0XtgHW!2DJ}6u8IY0N8E{)T96AARG3D~o@y)?bv!hqlI}G_ z4G3qOCM24J!av4uNs_1%h257Ev8;jo)``JHp+&F~p8r~&SzlEpv*+2SS`9Qr`RGWtHA7NkG zfTHZeYYfPmL8(2y+8n&$L~C2ePqFsKaF1vXf$XK?c2em#FHqAp2s?re%kg6e=?oHeJw&H$zj7T zOr4zz^F4wa@pT=v7z(?2G)3EV11(xdl`I6(ohWd>K)!mlB8e~yujunPGF zxEb}^j980qo1tIidi-ypm+aqn+dsiKfzjzzHyl~|WHIKs8(wl1vY;@{%-Fl2-#<3J zKRZx%X@$D$Y@Tug2?d;8r9H=r^n*_^Lx&Zq>2xhQ!KI$>thVRQY9cz~+Ci2B%pBtv zI$h^~qZg2W7ga_E)y}_*qbxd2SKM_mm?#H|VZTbfmpbeMcA1^LY%grGFEyeKi|^gP zzI`0~`EN6uLH0mdKWWe3#hVw3UO7_73}Lu%fX+Gk=;)lgq3^3eMiL6UQy52hWvWi9 zg-gGdw&nHlroQ%u3$_+l;&BD&B!eCgsl{Uq#vZ{!6s7B8NwSanp;`thkRw8BaWRR2 zI;h7#K}uZPUtdl;k}mwpf9~;&te&2tn0Jf~ezIx7z zzHRSc?KRkbhPbmO7ckT}<4Q63K?qR|zhRGyHeo(#-WLwn|1$O7i z7UuiMs{gRSb@I1mJCz$(^4?Xh?qK3qOwcMZ=p4KRKkp9Yg=n9nqg|61PP--|T5pYP zs`}s4P8~OLDF2{Jd#lhcM7zoYd2%S5Vq}1?8eUZq(ZB#Q18oj7Fgk{(JE@T1SJ(B! zS8U$0e9S7>qprW4_?(HUAFrQyVWyeAwZl}EGG z^JIuS@&JUUC!E%h!NoOsQO*RgI)wf$d-{-mkZt@Ou0R?o2{#tA;A5!kAi>5Ggv~|y zV-K=^kN(^+cIPn}d4VP0iuHfYAAdk;!d~7me#f`PiXV~#ambcqoxpRJJg|O0Qy1Bl z`{*XrhjA@tn0TQ1-25k6{6IGOQoum=@Z$a4p6ZLumlo+*oi8wmoU2R5@{;D99(&FH z$@cWIOVd+}i-)nU4}|Ia-yVNeIsD(aoyQ>XHjg#xel=CpCy2|+KV z2k(G2fiBMBU})N4?HK)wWCW`ec~O8@_Eg{f4=CcF|L5*hP(-_wTd_+SDa9XuT>Qfi z&YgN!IYK+NJ55<6W#m16oM(SXyTxT*x{AGWGrc0a>S9lZyOA5Ym2V1*nRmvcVnWv% z3XRXBPLvgpu9lZPD1DHhFYFMj*jL#Hl59-Emp>u9`nnoNEe5wp$woGdJSuE9+_SJH z_-Vm;X?~;lrcf%jwD&FFOZBff=h7&C&g0wjxq;8J1S_fTtm9|CYd^=C z7i_Q(17I^#oWU1eM`5NVvZT%ffYr>a=AAiRgAUNlC^=9fM>>OdoevJ2jIMKebs!Rf z`dWKL9nsr?3SdMrQQ3sA=$L@tt;@lYJ*7)+VWT4i6S^w}s+4Sm*;b(@*h-kE5*96p z4bk2Z;Ny~b*&S%)_WjD=8(c14G;d&*eN1A_T`!ma{Kjn;(a+`j@i(tp${)MFCuAz` zDET{C?3MhhEMb?Dt6X8_%J08CVXkG98T;cWM<%#c_wLZ+9S zd2OFRXS=sB&}RpG|DN(YbNeFiBj%y}byo>IxiR;YnDFMhO@*9x!U}#1a!?gnr+Cvm z9a3&2t+QIwgJF@gg|dDiHN zu`Q>rp4`VJ?ZH|HnzGQiRZPFSb(7m^c*==!O;@E3Smqo1N#%YEiG_AQsRtqAI_wZs(Zb$H!XMyvh_VLX_s7ftia|%4dSaX&eLu52 z1KG49LR)|;iL0TiFS6lk;ZEI$zd_lN{xXyUU4mL7$Pfh8l(igW$7?1?lsCbp{f0n(6slYF0ZmyXeYTcARnH}0ZYF52vawQ=UObL*I`j7$Yw9Jsb)wm>Vw|Wj8!o^wJ zcEe@EjYdrdv|I~{KfDojSUNH#m3KD=+fGx{ zV`8EzHhA}djsY)w_j{eT`253fKG?LdIQ6lAN9&8pV)cDJ=FeW7zeNh~k<|&)o}1Tb z*gHfVjlI6BJhfqJ!o8YGPj)Y|TWRf%hg*cUe<9XogFUn6om;fwbXFF2W>go&W8Qw41)C2hUz;bL7y&2&uqUKDYRj2x|<}_C)v!Fr1dWy zTa-U@$A+;>*S78A1YIvg%A(}@nd7&`+brdpDD1zZ-00P=bo?80<}Jt>zckgyIk)YA zQu+bI{{m@V+f(H}@)l~I5qj=DuIGBe`h%Whm!aqUpyxuYA<%R4s9GZqUud2)crjjC z@3I}dhyiZ@tFlK@BRb&-JT-Lif|odHvd;}O;sr|PbdXeJVKp?!dO(21#llcAM!roY zR=@+d1Tsutj)^flA?d*t7x&jX2`+CbzipklD|cM>s!D8GlGc~S4Yc_UXrP>};E=dr z;E~>i_@%k?7Uqu6o@Qjw0AgQT7CU6n#CgrDRpOR_I*`HUdEiwTCRj|CB^8Sv_J@Yi zZwS+KpH4d{988ZGLE^&C1`Y~r=^CU4Lu&Av7vv9hI+AK$blFA9)A*nT9)JzWoE6Xr zU>Tg$BuflS0?Sas%Zq=w>KpX^#ga*`2hs-Ge0wG>B|g1)Whza~wW7Bvh4W7y3%Uw^szgF;B^#QgX{(%n+ z(L3gI@F8E78Am%*<=w1%dQ-usS{rP^8ot`MVo2|nV_q53>d5dz=Toy;l>fQ= zjgvh$FL`-&-8R{5$5Z7m<*r~Wxrmm{Z7cE*|L}3joOShrmk#^t@>Qj$@;4PF@IB|W zxl~22WsdCX@Tp0Nxp{5Ceb7|D)3BtEX;d5Po?O(Jw#CNjgL$nh`;Y_F416_#B3yJm zAf!$3OAZoECQc#tif@&Z!fVClf3h|#bk*|owB9Rky!R`n&io`)FTO?uE@2JXosY6| z+s_^L;N1@uNhxQ?l+K*KkY@`eyNf?E5RGL?H;>8yKWA{booNQiRW(AW^dXRP2r(GP z2w&fmyT3*Eu0)?{v_%9K~1Q1E&9kZPh7 zK50_fr^v$ummC)VDtFD4=KOt7`I!RFeJ7D^9|jt8QBV_&85d;p4-{xBFEjOf_Jb5- z$wrobuIw5Yk9G0BTas62-X*}5qt{i+CwRH?et0-R){6T}4r26OIkqPMAw~&Qy(LH1 zjK%j5UC`h9g|Sw>C4}um#*L@jjJT-idEy{W$i?Yk8R2CM@1~c}Ph(XcEV?`E%=WbG zJ?r+dP0HGL?el$wZB$6vbmXw=ySlQyhOUA9hiG6?f=Q8-lQ8foLHwO5Qy%;R z!k2uSc53IGl?M*)+{h-q^`lZo{P{Gkc=xQ8`}XY;-%nNAdp^8)0kkiex^=^>&C7Gx zTIu193t-Rul+EjBZCVby260hoKhA?6BJt~FQw_fRTJwV;mY|iJ%Yuz0o4S&p(}P=7 zD3l1WpZruk=4Y__8Ld#PaF;xTt5_4>n8ha-P%_8v5o zkBhil5Rfs}%2pK_19oi)Y&i#R7QZz$?Zef9rsg%xj!HCs&b_^0D8|wkPky&k{#@T9 zg1kJ)LNvm53%5Vl{HQ9>jVq#CP-ifch0M$PD#-Q6v`zBzV#s1p9Xly&^yxVlrxf46 zU;Oallym1F7H`Qq*tPq?#rcA5r+x8k`=2i3^R{fsQq~FGpJOjyf5$=pvl!=| zFVXM0qlu0m0L_+tuEx__60*A*KXC`(rTVWxlz9f$q`>1@3OwoqX~=E^%oSlwWbX|7 z90pJZnyr9)n>%`lqZ#*^c9&VdW#;m`$|tnVE4Oc3_Q@x?=Bmo4-<6#H#=Jx9Z~r_e zEj<^ztnTqr>~SD!wQ^-YUhz*NM*T2w%t_}NJb6y0w#S+;BQq-x4YAl0CT3-!OdN2c zkd?4o_=moQK``H3nEPNBxeHUi{8Fg7Y3aTm-4AANRtD$ix{SA9<-2S9Q+aRp2f6v;r4t`)us>b* zKJ?pu$ao!`YYXmotyh$YHq?f2TV2~|F4&~@OpK%ya)`?bLYTnDu-|UjTVk|wPwDli z9?EV@7m_37d@%TN4(^%fK0`Y^27jR98N5xEu0o*P(=*zzjMMhZ#l`Q6lgeyAnD5fx z2O6K41N$-pc-GbUDOK%mLn#Cg!H|mqiP8oAWfymTIfe5VObF3Olw@m79;*Tlo-wS; zO>&y1?68NqVh%&Qg$jlO`3x1#%}O1;@XRl7U%NMF^4!JBBc)t<%tCe^Kd^n|aF#4J zot!#n%p0HFJ~3f${RYQppZ_F3Gh^-wjHv@XN{aY8?Da@fUqo`E!DJInCZTQNB!OlB zFC^${nXqZkB_RSNsOCOMXxK=YI&OH62`4|;b>hy@?vqlLKfYFeW5Jo*cNe7PPh23} z89Qru+vUfv9~!kiF5%p=^N(_cb!nTHugk`{>V=rAH}<3&s2C$xQ>WCy8aMQrX(FXv z8KmKP@v>fTzB#Sd zUce*u<~VOOzrLDU*;$z`&F(kg8XHn56d1DWkD7D$3E-!W((v@^$KkQ*+ z>>*8t>MYk(??2>&ydAL&gT?ENXjuYzfhKZmx-&x|4P9Iu2O3i`c{K$^C~=Iapi+=5 zRMMNwMbjF<#=LcMV$~OR4O)C>>fDFRK4QU(m2dveAHO?>?OM8IUqN=#v;#96zclZ= z4NJbBhcwa9@0FtWng}aiYO?**%{P@>XNiW_uwT*K_az!?s5I0duTs?!TCW~IU0RqH zkjuPT4+t5$eiSPDGqh#&{-20<$lTE#reUT0tmVY&0L3>gD z_=C0Bp{&fp1IiDr{w_{_Y2kNkLBsNArfuVt14^Uz!qIjw<-PIn@`_E@LBkOA!nQD< zLVTfyse@cq&1_YrjGRh?=99=iHMzxwLEdH`{x756if zu>lVL)7opV*cIMw=*|l_3%1?*?WggJ+Oh#72aX=V?!@LzZ+he4rrVEBy@p8e+b;+q zt!6IBN*yt7Hu0R|K$CE%h9LgCN>|GljrF33ob;F>6vWpbBqN!EY8b3-rdsuP*$E0{WptUAS9L*Ol&R0+f!Y|U0%v4 zcD+H@5|;Rv<>ak{b(^z{jqmY0aJMp8_!K;`VaBny11kvCYQzgpq(;70u*HAE??loP zphDLPgVPh}T)2Z2L97?ot;Le98}rP?QKt$vxG=t$8-wi9^s@Z%t%W%CF3wg4TmC?d zuC8g59H{H(Gt|*=FHc*Mp(fiuD7@E0MM(LCe@qau+ES={@SzMza5HG9&=p?}S>aptoUfVQ$cPJMIY zrQ)OJ8CM^6Yjk)z8)k`m3p=OrM7WYRIeoOfp>Xl>=JM~QrZblx=`>hbs$8DZg0{}A z?%W_nvscXh!K0d{*>X+Zzoecs&LfR2+}PKQ7wuZ+oZul|jT4$1z<=V5vB3t><+Ws2 zi5FbM-q$78!3Ko=9K`>VZeWxO9s6ZP7aw)WxWan4VADT#lFKHF#|C#Qw@Xd4w!pH# zHUayuqmnhBI}UaRYH`HAWFq!5+#P*3LWI&ZMRb)(da*`*j&~M_1U2 ze$XE41N_(&F<=YH1nd!dPaMlJ$xU$Mb?qk8Wpo6ik(ZYk)qt!_$@&D^_I>E-^0CT0eE z!cY-ip(qWSq7V%y7M?rOpF#__pkP(NZo%oR>S&PzB@xeQkWIh_K1rP+U4*RbG-7UP;BM^E5!3IdALER^Fb2cUhVYC>EBB1^~}}#ZOVnu+1d>)(k|s4IMck><}~|<_HS61-g`z2=+=37t}uJb z;#r=`5J8%lIC1Hs!jpU2t)DUB_~_%enY4Ob>uIY-_nttpG{H0rH5slhnULdfQ#;vJ z^(#?Iz%evcy|1ZH+1rGu0E&Ky0Q8pW?DR_I1Q0*TY9du(NQch1{4VX ze#n6MB(r;L87mN1DSsCpQT|w+%lwbD=)O&PEabknaNp_AZk~Mm9p;kRL20gR9QBcM zZr@H8|L#@R_>j-C7w!J%avCZB`TJ*-n*@+96iodQ3v6v}iTF<>Y>zP2jz>n8u&^9> zD_X;aY%@_G1w!AlFaMYR6FS55}^isZEC)5{Wj!amz|7iBI!{(Mvia`f$2VHap$pQ+Jsh6rhu^WpO zBbBh?Jsug?X7x)MH+gd%_60QY-DL&gd+HAEV&~ZA?cfjOAyyD!8Y)-O`Puwh)6TMU zC1w-lxAYf;?8U!Th?lb< z;0lAU&hNb2#%eA4|Cc zqB6#fN}W10e|W~A{QS_Am;1~bnZA4Su@6AgOOT_hJO?{MuEOg9RXH-;>6&=!jY`?o z#0@ha^qSxh!`IQp-AE7VGH}#f8hQ))eb7Y9#|Hh|d@oCac(r^LE1Nh$xs%h`G1_aw z*eR^aq3*BcDT8xfTQeqW*_`d8)u~>SQim*_vwGji>BEtqXo!ZR-H^002vY5I)d!jVsXNO`~AL4xbm^#WXy0h~?Jl{^E2Iu>E2by|OVTtlHy}zW( z_WWPImr57sUA)SVa!ArgAD8_gx#TSD{P$|@EDsUCz#iC4J!B6Z&a1(8;d`JRY;K`w zXPH};&^Izu(IH@h=x%SY9L6y0L3K&o%wo-4W?y1`#NtU~$s&}RF4?TivNsma&z~^3 zQ`tcCC+fPuC-GJA$dI7E-n&Z-`gleTyNQ2 z2CX%F4VsRaX(R4nFUU`nshceDNR9ez?wx4oTZ>ze6QZ-pVRP!0y=;r5Ivw0?6r&2~ zf?q|%{Z&IqXoyfoLKQJ09MC~jcSCB*>}CIPz{UwL)bGDyNdLLrVm(VeJ7!&6IPbj; zU87&>pKO;>%sy^C*WX;wee{VXo$K{T>p1Gz{MQB?`gKG9AqQ5c)+wO%kAS|FU<*HY z{TlE7ch)bNlzz=7bdL{tX=<;%0G|OX~^i`_*hc zXIP8S#vSXwx^P&tZcF9Cb(^P-8xWntv3)W8>F~1?%)(|o+xzzks%pkuO{$a;Ox@5f z6O6bF%^hzci|UL^ATn#QCGD&nbJIbj@t*@B=a_%RHzA9fRfk9hAB2F+z6<`{Eg`;P zLPEp%1npJ)zD|=Sb%3yE-&v<|<2tngEQbHljO07QG;uX5MJ=XgGUJGe6q%ChnhZf2?EYtH66|! zcTc#Bh>#&D5hKK;gwK3O`7AeYuwNGv7Giz)U15{yGwHG6cO7_++|L1$oZ)w+F-knU zss8Q?*x{u(18z8fg04p1aK{<)_nPa33xRt}u9b@9xd%k)7n@XCQog)IDB>eVI*P;W zO@&Lu&sy+hdLq^ljLh-`*<0;bLXBK#h0Vx)WKD#5eGDl)A&9D8kTKMUx5+Zl-MF*` zHp>4I2of@Criq~L)~MEOrb61Oge%&S*5UuM~Yjk^}MY4W&5@(iI( zlZH*v4Dw;Fa@~RK!xC1`Oj+;CF4^0}wi?%@Su2w3{mMr30q`^$_zP4M`#@UCYsHo; z8>RWsb^r0Sw3a-cdA&`R=wQ-R5t$kC{jVi15oitjn4Rggt9#Y6<0 z_fxK)_{Fu*b=BxOdEU>IXRaGFhpl%lG|#*+@s48mC>5sPRqh@cvt(y}-rk~_{RZwE z#=O49wt~+7z~*@jI%6oqp~HGIc;@_W)2?=H&W8S`kwqUW6d)7J%gqTHil$_0#Da@% zbepItk${Ad155@b$w~N^$)@^G8kxA30)!Tz;wam*I5Ccegl;uYTYgU|OZj9yXg%t> zYRrnwn-UOq-z|xF3*bZKleCvoaE@yLDNvg$S6%g8 zx$~iIC69h-Bx=>oT($9>2c2va2Rx%XXI;-YrQ*CRNT!^=F5HgO%M_SLuOd|WISbQ^AnQgzOe7TIs+p<=;mO7cjVW5S2MW`Nq z3eImZEdP3#ndhxmDndimxCQCLs6SO+xy`KE30z?kDPF39>}BZikzM(BWq-ys7?N1< z6ZAb3fMY;22CVA36&@t~u*&7?bah!Mo9Gh3c=3WYEXt9Q3u9}mjPB>VHuzXEyZ7UN zQie}os(g!fm=}=c{Zc7q_0v`_U#Wa0?C(9LU1!#6)|NfOgbO7j^XrBc&%1CR@G(!a zXEDnrVb0i@6NnFjsr|Dob6pq4_4G(NRMpd=DprmoPHzZoIvrt(TJx|l@x#}h0yJ^} zf1xea<$1_QHYn&o_;IMyzCM zthZrE!LYSUb0_yKTD*Q{wUr&%c@`(Ewf{7bm!l)Gy=JzsHIC0=x$XTojXV74>%2 zO^alviv#jwrR5b3&Ky^y+EL`DJa&b&qRyI?#gOM9Em30^Zc{Wf!KMX@If`rkF=#4+ zZU^`p$Olsuf_j%)aBaBw`zHuXzWL^x;)D2~GsXCgc<`rH_B%rTRX?qoMbf@o)r6RW+^4qk<=L{f()Ig+~C>U?Sy%jG`KMhNe4i+LC=tUV)hQNry^Kb(y@Uq(7H(~vLsY1VdqH*luA?P zH%R?#>z@mmdBOtb@z<#trD8{4@4zJcsipf4W^UQDdF7y?%K5kaQ&UHuo5xs>*gYdJ ze$uaP+2|$arQx}G^Ms8fS1e6UnIjaKpPAASVgaApf=_<1i>smf?tol3j;ily&aBoh z!_9qdxBq$3(AE<>HTWjFRrJ*kbpt*5AH-mux-ILX+xcwWoAk1^?$Nq5O1bXbx){Kt z=cTP)UHT0)nCQYY&RKJ zt>4qER{0+thYs(~K7D!c>+N#QTc}QzG>33#LJniY zyBCUDg>*qDLy#x!7zTUO}J?O<=h}BJo z9;X?h`g&XgY?h(XM7ym3D#&G?pzbSl1l>%!hz7ZPfuzC{0v#xmh_Jx&fR%{71?ojo zf-roB&^vqAj!mqpR8s!ncjd3OiV<;|ZczkmB-<~s>ODh5H4 zJ||zO1U@{i+oY=_Hlz;?c^&6Qxtn;stb1%BvN*U`^)@i}K!;{SIFoeTs7x5j$pMoI zl|{A_D}U?$q%q1*SD28N-DkqAQR%Br{p@#q{n)M1>_g?1JT|yX*AZ*y3w!LZzjL3j znf#THah9SmeaA}|H!<`vXo+gsCUTPpUYh=lAZVr27jl#r@8O7w)uY8Bk4+ATiMm>n zd`zh4b9f}8KQDGAwLwE8&B5)I-;eyLoQ*lec1SFd`FzC!YL*5aU0r&aN&SVgy+L>P zjo*=^92Kl*$Btn&${Nh9x0}7hhJ5$o%5};w%Ck|d-c03#>tDt-IkJWJ1rw2!UeW`c zop5Br8=6YwT52a(Eh}A$_*&0#hIlGm)3@PBYlmxZ42HdC4N*a}u4)&Rga&0ARg3ow zMp?;`i&fvmS_`FHvZo(U|3F>q;>alI;JB7?^=gq0j^hvkk?NaBnp-D_@eh#x1u_G- zJOIy5r!9#bgJ|L`1cP_Ru)wG!es42)4H%7v2!bI0b!W!?rbA{N%*vfqvieTloouD~ z`_fC3-0ZiQP^0I8tUOlZXgB+l>dU02%IMg%So<%xo{Z=?_IQNC72 zmK3q$gilevhIQH^i}jVy2hHf9^kpd%m8b8;&5V;q5==$ejlMUE9qX6c!)NeA1#mAp zK*d!9+Av{BJ`b}(ON4RdTd{CA-jHJRPry+CKetT6=?B|5Y4D+#a?0IbcTVh zA*8Hkt%N_y?tZL1EsI1&FiSJ`t`U)uvCE{ngrZ^y+I^ zzFfMrV{7Qicje|p9xeygPTT|`N4cV`U4;sK^5#O#(PpT7(5@9bl)g+Su?Xgd{*JunJ00Vgd^g* zg{;>N<$`jc^du`T6<%$5PkCP$WZ%x}FW+M>T)ZG@Mr@0$cN^MsJ%x_;H^c_Pa}L9-Ni4P)f4EUzNp6%^guOY zvjX*d*f3D|kg^N#G?g30ZwSXLvJ8sSb!Imu9X9=pIANkA-$3`~MBJMVO#5Wf(JMmS zH{6>%`9NDCc}3DzWJ@qS573u>_(D#K&bE{-5=UF{Q9pauhYe`u<>3?TQ`e`NPkW!& zeO&lBZoNd-24;?Xe>}q%ROi-@&?e%T(`M-+I*;B{N zWi>l=4>2!K>(#Yj@yRpmJ521;_NA9Y#ieQ8>(1)C=IGVj0Ta-)h(I6o$u;N`f73)+ zL~>KBH89-5+@jHxiDr}Xo2}w<;7uC7v2v_0+BbA(jI^Xn1?+|F$(?nCyHGntu>_2- zi!g=j z{ORb+x`_AH;O}M1fvUfUZpd(ldBOc;ZTZ|!*52^tYtc%61(H-*Bwq0g>Ct%wz|17> z$W;UR4-vi7olWwA!z&yLoFyCZ_Cv}13bm2-g+RKaM2BNTatByIY}QA*sFeS#d@7IG zeT~H}xw%)duUy02kKWAkRI(=@X`Hx!)XCe3Sv?*1*>9(3tYeWc4B5>RudI8QCGH;I z=jq3tT8jCNS|~r4t@u$v!=8$_Ky$-?_B^FY;+=t;Uv)d_s}w5{Zp ziS|azTX7lHY)IK8Q4$L+!}NkZf{{oD77VQjag#mmTcNoMJV3)X;+ekm7guwd$!=$NBM`rNPvjfDor!C|w&o1~5qJPAWM$~Lh(XW9GtG_RcB zXAOlk^Os^H-0l%rBV}h)`m}`JF_S*U$xtO?{_<%TvC-+%_;u|03qrPZ-lc@w)~jTT zYFqQdKK1W#!Pe$JaXukSSaE#uMrNwWlV4ns#gzTk@A@Of>2LK%iqoayhm>_gv=F{B zqJ{Vhu|NpVhmsZ_2Y=R=ejLD^XdW`;N1Zp~VSX3YiAasJv-jD**oUt|*gku*5N7|v zT(-s@#y(PN3tz0cc=4i=FazY_ytfe2&F##mOwr54Tg-lF04&4L2Cv15K~(i?;uUaOaz2C z@iyE=+@WmwS+O(s?}do+{o8Wb5M}TB142{rtM@MdCPET_S+YhDn!%gqIBYJ!bVi@{ zVA)I8BhF=6JD!F-Cs#t+Pqfu?>C}pGWQh;bbIj9|z4*JhcxV=zhyyI*6(@Ori7&gi zj(zS^^0yMHL;_~;ihY}uS2jWzCNzH9McP?50PA}bi<|*JPNdwsk zB`Xi507Ykon`jg+iWOSY%U0p2fGDLdrcDN#9zmmu`kP2>puZ9t38OKB)o;Nn(M2~Y z^%08dXG1iTej$cfKsT7b9}oVkF>Mvkjw0H)%@LMzfVd?^OG6$#>VmL;T>G^#<8Qw8 z(53WJ;HO8gjqy>wKG@y7JJOV#DG9o~_}maT{nSZh2_)+9fVpBz3#W3EB;oSI1FgBj#n{H3r~ zENO6%4h;h39rkhXlfJT_CqbfSAhQ<)%oQ%2;p)c$y`qcwk}05bA`mSz0O+GsEU`kn zP|&I|7>WR;hMubqXP^uc8Ysa~4yYdhgOCbQ!;ljsEHq-U3c#z@d)^&i`eK7G7Hzx! z>rba0vm2(T%JG?BF1X!h%A_On_IV1ozWpFA+y1TRdiyHi@VM;hyzHU&r~xxb%Z)uhj_;z*A99H;TJ5sU1xF*) zB@Qq8qaoK+KT|VSUR4wB(xjSmYrB=mOQ8?CQs?E z2MQRW-bOu6*m+$>O|Hs2Cn!IlORTATO}WArsErHo_eV}tExSM>japj5P=q5KIbpB! z)?POEi-otovPX)!<%=RVjy*JGa+dPt$h9>Do9hCw$E+x z>YSNXCeGqKiv!PG!Lv}<{~0naQ*a|2}HbgT!Y*g+VN1k zqsy;BatfoN9GuuqTylLP?Y&z4zXGlimVI4N{dNon)wqN|9dF*bor}6z{cOM6m$blkfkW+1Z^z?tS0y z`+fKR+}+tMGv_?#>9tVuck{{^?OQaf3w3`Bou8W33BZsbDNhL>)SssURoIYM9^RHz zt#a4cg)h`?I7toT(kj=iQ+vqL*@J6WE{e-atT}r0$|)0*s}@Oj2DY4&Bkwu7X3pDT zJW6ifuSLf0kUgiit=%5V&eA^W04M&yK9VihR9h{rZ%b4%=2f^)mP}nSV9p;c%a9~M zDtrLC76b$YM8g+?utx!Uf64}xA41d9eW@z4aAVs&1rC5K_@JaOpgMtwa?aepq?^Z< zP(gha_m}8wAtLh;C2FNeQMVHlD^k4hplPE?$MG`b)5)Ywb zJZ-oZ$Iw1Q5ky;hH21=)HP35Sn>C*iX z3uW#nwX$W_vW-|~Utr6uZ6C4BLn`lBCB0O`2Y+24HLXedO%`D41(*iH3tIv6H$6m8 zXd)#Pq2rZ&>CRYy%TMkvMyi2eplYd}9%3`lyI>ST-wJV0Hl|FrP{SoOCe%Zgr#*`l zAo3}TFgnatIV3#Q7G5_gv>uzEk)54U+^Ai;*K)Ba*xmFpzHdhn= zXk0|=f6;T(1xAUmrLNcNHC!sIEW(yAp5X=#jVu#r42I|>cC5yTf21a8{}z)t3~5qC zN;L^62JTQ#9|T1(`e%`-n_JkXoIbsA`SeYzrcD_(^F?K%{L4`TYo*j;Pd3!g-@RtS z)Vz--jekLg<9UIUiO7Qm8bm8@11wc55sq9sk&HKk>k5;jbhfX-djsPZB^ zGYaicgdjF%?jWE@OdDx{2AQlzX#WB^pvGEfsPAzECn&BO4>dtal>4AM6FrD^R;p~# zVWSle?Dn31eg7fpG%r7DU~=7Bte+Dk>XMmSHR-Z#pI$EJOLb5XEFgCX7L_1}SF1sq z91aR7sO*G=N!2$Q0RokDKb($ADvK0#eE$o3z-J8Dqn6kH1#rfgcm|xIEPXNk&J7L2 zbXXCiaf3qsnxx6RT^r{w89GKQt3{-ylZ{`RGdZnsgDxaT){URMLK;0~oCXU7YUY;) zYLWyb23RadtRIys$kX;DkCDi>CdJ9-goR1a>N<(`12VlluwFENO|u3vgp#BwJfw*I z%tKg8NGCa?q;u(c>0gfIbmV;Pi4@9RSe?O7DhuOr$c!L5(2~eol)V}phRs+Q+OfVBagHmNkw<49inh+*64ThFr<^TumDYq#_IRKO_ zY=JA@FITw%KV7aDX4 zj^UsTA)^6X;9Z(-+@_+dI|7MG^-z;5LmNp52@g&Jm;qy0wqdMn;Rl(GFDn_{^Pvg`>i=I-deiMd*Z&dK7+;r`g<;qn7Pn#>*feYr1i$h&qhk$Sif?-y>m(V znUqsVu>Zx*lpNSfNr+9>vm8^)r`0DcM(jAAWDA`DUiBWeCXw~uXE3>Z>~^hRWr8+? zDIvK4>;=IQBa;r%eo|h0i`IS_L+)c!x=eyu@K+9i21wbDbx5ok2kyZ?-~_brAK*kR zfx@;-Oq2=MVPR;+BtVYhquVQ&Txo2E@Ne2V++;pHa?xhH)WN=W?xYPNj^dEbjGijkt=Q%SvP68sHV%9u4){G>^{XZFHlh9Ny}^Zl zSm$x3>X#S#zo@dsSO*R*+$i0^d(i)-20_KuJ%`Agk}sX49tv%l^6r3|X(InlBY5eJ zY4=u%47}BEPnq(zM&e8MyuEy2>uyq!PUKS3wr6?HRJ^WTour+A>)O#<>C4`?JE>d9 zq3&h#Y~w)J)xjMz&?C{WQDed^>>U0oyw-ElvuVpF{Zdz(1wD%pB&n4DbN_0s$|74T zr9`c-eF8Mn2^vBc2uP63dLcA4MhF6ybs6C#QtQZR%g|oGal@o-4J$kk8bGaj&CIP* zi;O3633_+oFi!180cn~sx?p)O@ap-{H{19GJ!D;0ie&dp}1b2EiIh5D^SR(IZ!QD#h)w_C}y#VWNblW=5Jp6gs06{dCC%kvX^ zIV?*0jF;n`&y-&V%|}>zsh%P`OoNw6pE2cj3LlET02kq-y__*N1d;m@ zOCgyeina7LK?0E!l5;CmZ5T2glCoKhI zki)c}z)5e=+MvXt*2cLp&D9QC6&d4*@QAG$RP&pZgme1zTkGcT+BkRVey_ee>P0#x zl3t!p6~Fw+hO~{lS5KU>LTWN?gE#B50;TV00Mam_A;0YglE8@4mz-ci zK1kV5@KX50 zb?PY@d%kz=rMUOx;m3yDuRP_|F0*DIni6tjFMFWviI2`0R5<*t&)MXjGiUbfGJOik zg|bVCKYWb(pD;^P)nYgc!L3a7KO_|3T{TDmppr3FiTtX>B*+>7uLaPZslgA`Hyd^g zPpEhNoxPc8fmpX|Kjpx_)1fQ8@06Z6{H|zxNNceyhCO>5JT(9vY>;OQR^;k?YtqO~ zS(Lg2S1pn#IYLpNVdfyEe3MNAuN?)~D2gjr9`W(PW31@%XDx~fhR?ooK|14T{^wTq z@6z9J=7^0bPlRlWM5SJs)(GD!%@tF21*798ACq?@f84XAl zMLbNTjDl@FSM2}_2KpjxiS!9La1q+Tx{=dBt`tN9ks|lxdVwWHWPY->p;WA)rn+RV4%{5%5%3AFPd+$p)0x=S0TJF3A6!tH|MN2-FLGa|Dwn!@Zt zd8Cul56m^{(Ryb52M^F~Z6e?5Q8aAUhy|WS|31;Q=&+-mHt2BD(u3{#u<_DYj?@X` z=MBSb)7d|7lEa@}l)u$R9U_jASN0#OP{r%nam&KWLvbT z9>MB0Mq$Ft$6MuKn!tSNeKuogCy%v3{7peGRnTAKBjBnx_^8d0nEX0N2Vp^*hu0goi?3tWZ((^@)NST&R{1 zlKOBti8t9IGV&F1gGb9^8BdF-U)HW6jekF=uL1)e_ z)=dCaUeiK)|w92_>Iki!@#*Mo*()P|LcV5<~@3L{*S$z!zPkCB; zdRqPZ^@;8IRiynlYa)Dy>tvjZ)l(;DPKEb1m@ zt&bSaPS5!^t=put>0K3sU8OrsR7d$@p1sln?-jEK| z$jGQsvvFhTFk9yM;nTXA%lh_NCe3^G13nzhGr~)2)~~Of9-STf{q#|2UIEdU=l>Ob z=_Dm!pgZ3|Ut%`6O?!JWeTh6l>D;eh@~v#-ji=n>D`^z1SS-|Whpj8UCZCfqnb9KA zx~#*ou5fq>SE`{}c0PoO9=|umqD^{~5SBW9x%?@iVS=LkwKq#B_0v_ExI&N`>4!)C zl_<)44)PDhp9(9u$*2HzV$tqPAfEeZVsSQNTfxEPA9a$ITs1FhSQDbDuCr3B&($~j z%dcPdY1Az<6Lb~#d1@A&OY_{8A85Pg6WOxTtwy>k`xcotU%+ zL1g;g1znNYh6-ae#=LF9BW=~*B+&v$^$>3)v3((|WTGc*iMS#IeZ`KHeE7D{u>t4N z4IInc^1tP3QaG*K@dKTnqkq1}55myHp&8a4U`bbj?SdaTbHhyPqgXl-K126sz}%$M zuy8!yHJgJfcuIoSe8`Ij-mcJ&)$ZCWwiaLXAsgO|m6Z17ze#@UmFzw%l@QWtTggn? zW-UODR(VT*iz&^{rTeoQ6zD4V{8+I;U zw9{HJbG)8YE7sLOS|)ABx)LzQP>M6I?bfMcxqZs=3jGILXDl4iYq|$tEv-#UsouJwZN}0mBPV;aCV(rgzdqIDY#{S#xVK@Yp5*EkQ0%68)50K2}dCU_2U%WOuuk13W}Ftu(U$* zsJKrSQxAlNY!`D5{oH@RS~U{@nio!1^k}mwdUxjuuIzHF$dp zq!Zhv@l5?+RRI;CG{>sZt8~E%n-}uI)%L3;nEI zA_8QGU7*D%BpxNDqBku@NCl=m%gbZ+^YWyr>@3gJ@?LtB^=7YH9-_ZkwCdqW6`>Xk z?Qn|9EF~ABQo9!hVkRNjm4f*Ag`usa!kjl-jhx-1ZTBPEx{*_*{0ZATQRGzFEp4Rg zV$Gr6sM>^5zs z0$Tb?O|Una#wIVU;9&YeRD}gyRllf$iz>RqAPyH)WF~}I5-yVH0=BXtp}`YQjzIlVoMjPoPX9LaOku0EBO5n)=+|Et@iEG3v@qK5Zl9tZ->?yM zeDZ$h5o%{BU{l#L;suBpgXPEQyR3|h%Cr{*G-D0RP855ApbLUt`HxKj$HPjHtwUSZ zWMIYrvQ6iy62o)v)4WILIcvwx#~3%L9k?34gTp7L63qpoToTSStsf4Z zElpol)}xzTTwT_>#f(`OE;JexaRNPYj%@GwRky41ep7qws7O1z^Q;f{KIY&l<+0S~06SX+>GECk)@FSI?qv(@psZYHjV?>H)^gZ;(E~=ggqj zpy!l1XqxFRGZk%c3BJ%u!@{%}klswzIldS<#3{C%tCIoZc1j*lN+R`%?Xg2D>xTFGv20M3VMBgj*W^0wk>-Hq?SyXiZu>x4C?>=x_> z@f4KLvBBiCc zwp&PyjPL;gnfINQdI%h1n?h`0tBXObPVJz#oxcv+d_1pm71R@q3LO;03}T+t4=AUC;iwB2RSsG+%|#Xmy-827iN7$q1k;is-r zQcwlAqztSAOkS*O_-mtp!VE9h9Sa%-6bvsZz$URiLU_?p5kdlG{B?Xx!U}XhO zN(x#86!a-6=uuM8rKF%uNny6(pLZ)M=v7kC4-B%Tpmjh&drE64eA)0gWbsZiTuu%s z0I;S76f7tym>y67kj)AxSW;3jJD^~BNx|HJf;`AjN@}K9f+j+O1BKgDWE90YCv%D9 z4RpY#7Ct0>Qou@aiD0SlAwm=}beoF{O+bk$W@q&xp(hR=wt6YoVC3N$bh zWB4z@@L6u~+JHfGq*+4-&XJnE+izUQI(19<%Iqdt+1X9ATFb>fhQ88eWX~a0>ODC> z_Pn+7rO|(nWU1$^KeKwHOMA>3-0vC-b985+jvg#T@^XKEx96nvjGm>B#)|*hF^`n~ z$3E*fbxN;^y=P46#g9k{t=n~s_H9vP6KmDHef#EP=!NC*h3$L3+@X8D>ZMm$!>eP* zUgZ~TQLN&Gy?ZC{Z}*lS-`n98Mb4fe{`aK5c7OSNZk0;>)6!W_OGBT`(%!(&td<^* z&+T7$j0dlbv_vCzSlRN*k-)$J)I}(Pk$Cl@N(rPQQC&nN1*R>OIhK%2lc%c{Ag@j{ zL}CI8Bvh0oqm8|0B_^v;s8j)lMvwOU~Zq;__nv`CxLH(ZHldoRA+D1_%MX|k7TD!Ei{L!QI^oXQI*>g55 zo1IcOt8VX%CNNg^Ioc{-TNUWW1LbAPe%R?g*wGA4LlO>q-8dKBH|YXSd5r?$)WB!- z996B^ZMJ^c0Q<)*C~)v12gke*@P2I5R*?0o}fN>d$f7|wKv z!7|WyFFfPoLYR@zaG(o@Q8u;e6+n?7)!$dV1$m1GR$!m7u27g8?%o;&fFs!+gK`J-3*PuSrq^0I9X7g#CGW%q7 zCfO@lUQ@rxehmzvqv{mQIQ(RSQ;8E zq5k$2K7)^+%a$>vh}A}X@7-KStH0#KqGrA+HnCrh#;J5xJq+<{;qBFDC+T-B3^h31 zFdjD~RCs%3KY?XnvmS=OgVlRur>LoC&XFxtKS*P|{iPUbzhf_}J~At#P0KBBGmkfh zcPwBlN3imPn%8dBw!yfyvqudXp7T2Pj_NV?P!6@&kOwKCE1XvP!UU+HFsq7{=mW0y zLfNnciJp%}H>n9J?BSN1tbdTywZR-z@u7!!*&ost?AsSnfL4Zn=6X$luu1gC=y7TC z)(05w4=HDW$n#Pni5z62CRN&!pSNr?+q5h%U)r*CfwFAA!kWKz=)m?BI}RP#Vn1{A z$ot2zrcPx~%@VfU14ttSK2fsJ+42`ZNc)koa0olBUBp$3! zP`My-xQ#4UNR)U=ztr{oFzN2V{fDl9SA6jvzs^6a635nlku$H-{Gmf;&tN}~`l8_I z1O81WKg-Wp^X+U(PFBtI`z51`rX<*Z^ZC9vqz1bQ)xoaUZX~z8Y6e>yeKhoO}`Dt zj%@6|Iw^5s=e36qJGyipHKI%R0fVK1?FaOIIk#VbL6e{x^a;!ZUZ$(ePRC(DPkqZe zdV=arnKu?aWewpSh=2Kv<9o!W94#<)HU8Oc`SC`Lw~PZ!-%-{8rqP&qVi%pckseSG z27yP&A;?mHmLOPRQJZW>XQN{({j+)ywVIM8K(Z#+C|X0=Y<7`&?yN~k4Y0(>(9t0b zs2onVRJwf6ukQNxhpyZ`_5P16i)EDL&Wm31$*k$hn$7ab!UmaN94h$w*=KE7Cd+o* zY?oDe>COc=7Ydlo!G10PW)+cfTi(zsSAa?1hbs&U&Tgn0M`HoO^*7UJ-`1)U)66;zcEvn zk008!iquTXev99&^~q87lfn(%JI@_EYJ5FA{p8jhTlz(q>#?WyA1YCu-@# zf@0!WpJ|g`8!@Ke?4o}idH2@9?w|i~_PrmA=8YILoBupk+SI>ehd$lgEkAmAbIy{4 ztdHL)KC(Wif4}bMNH(^|SzN{5spFq9r&I7seeW*$Wef{Ie#zPxXeya>`%K6#Lnc6& zNRx2NFM|Nn@W{?$Fehgl+dsJHgkDn@6#sGV_>KOX_(^HjJhr9RvL>$#9W#8_hsEn& zKJ+I4f!2xerL;v^1%A=wzw--yovLCH6=o#P+zV4BnZ6Yw%?gnwZ7Jr**iYrpS9*k?xP7s2kgHk&gmX##?#V5 zLr$T?=!?>*OIIZl&-6fNAh%|wKhv}T7nMFYB%7s3A*_B0f2D|bDUq_JW)3etl)WYWME6g` z{cGd?-k2Zp&-)7vLVuWkfAKT%WFkfFVX93G=0-^jMXJ%1fU-CMcrXA8|5M_SRGCHH zMl^imZT>mGd7G{0EDm0T zX>?HQI8UJ%Lkb1l`T#8@*pp`9;A4yUc=>brajB0}FTl(&(D@zEd4k0`lSHUi`hE38 zLRE^S7%7w}@)kptG8Cj1Kv6VMIa$%sWJ{Z~XW`k1cMV~5)+wNky2ziUKFb;dm*b}L zTbJYW=CZ1}U9zk7JF-%}yt&`-uDMORc)R4V*5V-_fIVPqT|7z6PGNU^(#d!mAvA8 z54!S7UJ{%t1K>Z!n!A?OQ(nax1Vi7=Q9ZOAA`i_OK`S%KAAw&)NU~O34uNBoL{QTW zy_c~*n5*G-3RBahkRYfomcS&T)sh-U%T+p!8FX_7e^Rf-1ODCY@7MpxLQfpny!L={ zD1Y-lDSr3wEw+!o2X;V6OG2^3tkN;p+2o z!rVlLx*n@~Ycp59O<*RGVFtP6Go+zcecDv({KRqsQF1v=Md;;Kd&W;BDaAj2$kEGPiw zrhsLD1)vPKYX*W2%5MDU@4rLK;qdQ%V8POf1Dn<#F4(YnuN2Rp@sC*@W^c?SR+pEQ zSucKa<3iJOUjTxl-;~k?@bk1Z*N{|jCml&m3`Ljf0+;nAtCE%2ylNM3B-06MDezY) zT~0c7pz^2ZNqI!+T5y&%@<@P2d!}_Vo=JVXn4xc%iI)lb(AS~!GVy2~3&n+ta*)0& z)}g&=6a(*=L>{7GFxOzbvuSJ*Tkz;)Fdw&=j}JbHMU9nLJ{!+omqJUs$!|Fx^3hnA zbB*wF<-s3P<$n;bkxDgDj;%M7T9uX+ZPMi%UfT}q z@JEHX)sQD=g1Ii4$Q@^%^Moh59m0ZirPc3zR`~u`#bd|y7zH?9*mB{-&R&B?_Qtc2 zj=^5Wvt&y}ZO^8&)X_-je<|$c;$r+%hq=H-Z{2HPk~1cX(Qo1gDX}F_3(5Bx$Q+1J zcX*n6gNnzII1;_~lrBY%oj}eWMeH~32WUAYS*!uNr;-Y~t%zBpUIyFF^mG^USM(C? zNGifNTag|u94lre)W{$)t+Tu_-jhJ?N=uTUXL47Py)VdFw4YZ}oBpujKm4A=ynnm= zTZNN}e{9=bwEg(Ypz)8_cj&;XmUhE1yQFuIefi;~j;FrJ{?956-{egIs3&4NZs6#2 z~N4DiWH`A*A;}H>ZAp?F3r}My)tClpAX6YVpsIxC#l9}=(DxU+Mf=>{0r&3* zzrU8mI}^6@L*PX;vLyvvMZUTYSC=M?asomF$ZtP)V3E=`p#2*|-yZOEQzHVr8eLoH z%z|wb+{44{G3Z#8f~EpVaBn3gLVD^u4G)izEAlbST3=erO6Pm!crvzgyJEX`?8Mcg zA$@udQ53e8J&wILIzK=BPK(&7)35w|{lu8bE0<0eIPMF5ZZ&Wu98>bN?)ci4O#TZO zW3~7Qm%RrQzIr5DYA$^%1-eA{O=t@uY$Y!ID4Bzf7Y<_Nc4$t0cm~2~SJ1E#M6!p% z{A1m5cmL`Ep7gY^-5DP-iPs z-Ll*UCq?;t-j+eCBJ%LTu!y+us{5==d|Hn$f3xHa(xUhKEy=@h@R*cFeccrg&=mH;FHOEvEgG&1A@C zbIGU}<)vZ=lCg@N_{l7p*#Bib!^hHGwHapUnluPqE}4)6(Hkh{hP?3tY7xws@H;RH z)-q`{KQ8Skoy=b5hviotD_ORb&UpUGRyr?w= z&J6oej$=QeG$F*$i(G(EXY0aopkJ66z8(ZngGFC5Q3i@Mc=NCvYOKSMCe`9UuL1P4Fqfr44jkq!js*NsDr0G^F5u)e6 z_b~NAIO`{8y`NxD*XF<7O5WNjkZMH{UGtknX@NiuHQw9?iQ9_ z=|3!v-~J<#U)#I^dq_kbZFRuB9Qwb98S3jyyw&ahhxO@7uY-1AVB(ZAXvLULiI^kh z{(}J;Y7GhB4g3&?0Q!XzBSa|NAE{1fF3yB4<(uUteC>wKpMCS)y}a2o=WJPD1P8@N z{zdJQ^QTU27&&F$)H;q2HJpKNSPN%R3G+o|(M?D@1EH(yXQ0!d>hCRdLlgrVj7l|3 zd^-cFw-M_0FdDELHYN-uHMPRf7E^p4YqF_f0vbYJY9*OM$Jmk39G{!Ni6*9KKmxlu zO{o=9`td#fX!^hNum2TX6qGk><6Aa%nm1A2e0@<~2%GxOhnT!6_uBbn@u%<1opA1O zzWV;?dE^gBLZ;U0K3VhQo7IY^vIywsg07GTE8WJSH zf;hjyv?bHqp#5Qga2=4==_jF|2C^Fv{0PL}62xpu*uA!A|2oI3@m~Jk?KVtrsMPH9 zvR8=g$Kuc4b2Mb3FKo-u4X8g4xKD$V2S;RN7fiPgb z0)*oR5UH}auy&Ao1|!FqNe?tPoVz$^&A~*+jAl*3#S|#7a~xuUAO7pX1zt_|=I7{i z`Ca)he((IQotGtAtT{@WRRGOkfHX#y7F223((WhQR~D5P7c*8yQ>um6R5Ctgv%(;1IfeqKXg$jq*QND_6aKd zF7z)Rz%TsB7V@q4SoN;OU0L;eD1l!5Bm0wk(SOp*QU;fqgZ^`T;Mk3QwuH~+Gsug| zkQecyL!q`$6YjcdFra)IgJd=@YGy= z(eEQM4;Nevtz8Tm2iTS7D>MWz^(eAC{h1Q;>d78UXO4QU_?LG-{m-bulg9GTyYFo@ zwa7Ye>f+VBY|G|{a&E_-U2;|&+q1rNUX}RO-M1dCUbE|#&VBlHIcv?g5#PYVmY3> z3_23&7e1Ja?PbuBO@4Qi!fbl3P8LpI+YI0q__&Q^v~3JEnK6{es9wxj7EkD+V+lJn ztf*)JTX2`BvY#FjR>0~be7N8^g!MtTD)j`N=BSt-i%n_xV1kS8qZZihc6FMN<2i*M zpdoscC8w}V3s&kCK{opCEO<$&(ks_jv!ovLxqKi0&bmvsZ~aDsRYhkNi&_V7tSQj) zlFAHmC6iouv7XO7=v<7`;IWW!kc-`Bx1;9=r848{j~XoGbKWZ> z4XM@?>GRU&tzY+M9&4<%8_L@VZ@|YW=I3o`;i|L#Kk|MTyEiak!O1|&2`RFhI+$xJeNuSFKs; z(o{~QHA5taX~Gx{!ju~i&hx6gfbxsyzdwY(Ov)wyiH(9Jh7!ZGyX@fal0pe-jG76= z0Ih?u=0y8q(3jobUkSsz78@kJg5p%KI6JS=Uc8-pg-Jl`dr>_^f)!afSiG^@IV>Er z-X#`~W3J;|c@kFcK?+0>X%akF(;>vF!IQGj^98yJ!7z{gSEYimYi6448dKVvNa`h* zjimxr)tY3LXE0^yYJT_a@F^ed<2lBYj2cfeYUuM=qhFcqWFNO5K=l{@9Lz&AUZ6rI zk}Dh~F0j}vl=Uizi76p@i}K#G^Cs++bw~cJyr81szpg(()7mNDtosNwJ$2sbcZ%{4 zpPMlEolp7Q#}juvS@hvM1pBgIZK2p7#W?d+MT>D7Y#I}3n-o0#AWX~{M6c=jzT}ki z9pfvFRk!=nuIV!d7rD0vrQ&&O&Kw~XUb!Tv45{~mu%0axUb#E`C!d=|MK}Fe$gLLz z_acAe&^#ShqGv5s<<1J24@Z5<|DF}Z|Ho)}m5 zAL*z<-_vzemv$5G6(NWwoU{zIQaIWtd`viU*2LRbqjv_C%%Yzmv~hz90!ByqcK#S~ z3WX1S7=lQ96-pA+*MBInN`IEP@$G5+{0kIWWDI2RFxK%!x-4L^405?WU=e_su0RDm z&O&81v^5j8nA~ML`iP&oHtp;AKS{^neN`fkM<~k2*q7f<;hDxGNT$C~HZB`u_2L!!BAw8fLKOtZI2Cv&vh~U5@$wI}epLPx^@| zyzEhZeoGAk@3}tpHCCzqfgSvusJldbPUQO~+B*Ps?e;yEm-yGvhG0ywp0%JZ0-qB> zlVb%dqcy?~yA<_15BivNpO0jtk?#`&o!?1@$pTbzCr! zg^jFd^wr+8XTtM2eLR~9LUbqgiFI3l!@B*ccd1#=G_m;q3)RvTtEP-z6#rW&^T()c zYW^rvHeWhK`aj-;*LH8)`hlgqy-%e;zm001avZ zrh;4I2Jk8bgY;wK0!4`oX7)fCNAC-80&0^Bv!MUbb?;u0iv|x_H+UcngBb6N=e({I zqfgbA=~KLa{lz;L27+c&lWiM_KC}Nj|4$b*LQ)aSQY@m%0!g?AR}}KewI-4VH{H^r zH#TY}O8zF82fT4@-94A$_y~HGRQ4IFnTRgg$g=&2;k>5szYa|RzXQq>_8Y8AV zqq0ps9fNqAL0c$5BsoUpVuNQI)A-=dH?+zmy0kbW`r$O@$PySDBZB)>DN9NHXm^k( zzh1^a+3Yu%u`T`hb@LpRc>=`f zdxV`B6m!x*j0qsf>^EfngPdIIEtn4N0;&8MBoGYCncB8XE&pOwr1?Lu`J4YLzjF4( znpF*&oLTbv5u0N$YE<~Whl@8pUcy2do68E%wpv{!`PnZQ->k6x0Pv+{*)Q-t<>9Qx zsO3fXO6`nH_M|{;!WXlPS9iQvy@hs#+OI(Eli5#Q0MTsNjT&jC8U}0%G#3tC-dU#L zb}*q3G*vp{cvr43@x6r~mwwT8f5x;T>yq({S1(;S2edeeZwk1u?Cn!EYIfV&b-<8e zy@w$mT-4+^bLm3hsh?!Xrt=dS2D&|H5`DVrZVEn>6Ztwb3d)h>D@T&A+?aAC`RHw| z>EvJ@nqx>pRflL0N;=F#YW5yX$d{O?m~-#AvSyE`W0Kdwyw~@8NJ~AD$@qK#okzZV zwBU?9`P_jc?+V^SwHTCNl4McUij}Jfeoizcx=rZ#=3?2lidx|$=3v<{I}I;A)f{}H zU^q+8@}%;IOqRni2HJu^M4@CzMxl-=hD)?VG{%MjQGd!-p*j?ss7#b7d4s|t7@icv zM2rM^O!00NhfX{+2Hku@V*m{;X@zQh|CzUf?7Q`Rl+0H05nl0H?n-9Jwq5dDTO~vC zinM2H&w#1JTIS~mZJQdsOL%ML!z0~Z%Bnnqd)y4WYdNXo5KG1 zsL!I%u2ah_(JY@2V4DH6N0I9)-MT(?wJJqV86DGJ-Wy^jw zN}Gd&**!o6yg~rsRnIw1LPR)8hfxA967&m`6&UMG+7diHT8|)p}IEiYJk6NSv zjKwTu?sPWTT!kTqOIU^#+?Q%hQZ#89iP7Yyrd-L?7<68Ktv|CS1!17Cg`v3f+SI zsw^N(rxN+&m70K8MN7J6jasE)23Ar~#cd1M!Cvd=AQ6F15}%QENV~!` zvqFofySN`gPDA`00zmvo2mrKjp+t0~uSF#nMjQT39aA2gS|hp+-MB_F8vPVB5a=Ri zPNvjpEFpW%5A`ZFB`OF+s#F@lMK#_v@g>c#Br%9?CL#6|rG{frRK(;7)jBk-Qrvpd z`u6=dk8Dt(+)DXhthBteDk>tPPMf-eho7uBXmyVsEBn{2xt8TuXj!FEYrpu64StpQ*h#e|}AWOm!xml=Mv_7tS zKv?i39ca3}p@#Vg(Gm6!!yJXsFw8|cG>peAPk-+y?_}>xZ>8ta)7~F>1EmZ$AXF!) z_mI7)9yh0!qiP2Ble4LS9zqL^ai(d<#Yj6jFFu3+v5zkN`0Xivhe@0xFg$Pm82;nY zqet_*=1aNP_w2f+bbU0X-vCOIm5{?|k&j@Xlws6QWm<+27@t0a(ps*zw!s=gWokq zeeWBn?@dHUHn)Z$lD= zeM%K?hHon-619SZIg1Je(t&l6P{#xXy)^`U+d#^sIOf?gyH#e325q+Nn6YGYi>B-L zEuO!7YfiHktv7dJ*BaHTk)Bee-}I?N(z=(cvU1qWS;NtPHDxR`N>oEzq<2skO*M$l zPIJQW)_3SK_zY!-?sXC_;eg-<@$e>_)>M5642hxY!<0a~lskO*7QV#BroPGN-wkBd z=I-4)NV35?iHXF~1J2z6=eMzr3YGyHoP`youR=GS@vuV0P0^~|R}>ARnA6Z}$RwtV#BqmD?9iecQIl>$N7W+Gn?J z$mX%t^Y>L;GIhr5vj+BW^HSq>z*xYrGuFNzgLZ>KpD$~x7iy}$dR=WG<&?SCf?m<$ z=xyc(lpr-jV^^R6nnxH`O3fA0Na@z<4(cXKl>_~+$8Oe>HL%EYvuwTvLy%b*an&j7E*Dhc7Nf)(eJNE zjn#OY=)oDEeEe?w!}zjzx#w~J_^9|~d{E2c;k~9SX`HbUu`0!rHx3gE;_*fqe1^8f z1(=Nz!__X!&r}wIwlhLqkHp^|lOOk1RJRXTNm%SbHr5VyP6dBN2Z&k9SQMPgT z6h)S1l5m^1A;_TKi&I7=G6$VUM_XoF zJn+K+n5X67=Zql5CfMDK1Ilq>Irk-2m12*xYt0A*Uo?(AVukPB9yfPDtC#xsZP98# zrCtp7cKhsYTdF&ujX-eYR4zmsf)cspOX(k{&-tn)o|A2*wZ;7DX8A) zJK#-y2k>GRGp2k}LQaD?B>)Q7Hxy5Vi(hs8EDbNcEmv}El0qauzGMSs^{X0ODK)&NBZT@WCpw!V6&ic5dV~oN8_M!sL1<2-BvQkF z0zJcHkS(WiD`00*ob1vxL3~Q!hIBUi+?1Twb*G)U{9)eX4Ih{F>R5mLp-1oJwq&Cn z8TB*P&RhM#kP#0jEFU^}>C#V@%5QfZTCU&jUZGX9awWEIWyd%BY?{_#Y1QQH8Ltex z;JxK)$g{u8_e{&~I<9SY6G__DVfwT#L9b4k(hY!>ECb4ZLXAs%XzY=CC4rE4I#dO( z)-POakSsx$KgZlN7F22oV^YGA!6t{EEycu2spQa%4#w!I;5adbFBt9=D3bEr5&X9^ z5576iJV(S93>#bEn7De;r>!Da4_~e{#1 zM@)gpQOJUq4`N7$l}mYMVQ}uYZp^agNp-&YejgN-DFUdFfBm{CB!>TE+CQN zAW9v>5X2Jmn~2p2g)bl`hK)Nb`ThFrm#?i-lZy@I<+IU)yTMyq_(!}*n&4P&J^ab_ z@A^0APdDc^il}#B*_4%AX3R&S9)nNSVy$SUKG@Fs6+veD!UgNpFHEPQyH1SBB1ik% z#v@PUXo{^F-qba)%8kzS7w3#fafN5jtY?mgj?bh{KS?VbjrK;#H1j;pkJr+d7V1!p=37+I;KS#BWy-5^o9_ctf0{6En@K( zm)hy6m3e!bS)Z5qmZUUBSx`Alj4Zcs{5|SDc6T?s`L5$4d;Jm%=RZ)|8#}}tL=W4P z6>Pn&A)-S*c)GLsG;ZPS$W@P38{SYZ>S$}&q5tT`bK4!HHNU3ZmG0S=T6_^r=p#b8 znx5oK^EZ<1nzm%?NjWE822YpE1B4Io4hAL@9{DF{`TP4v`6v5l`seuf_8;wU?+GOs z6=3Bcu_CY%ldYJL5*{br+p}o#p8TBFEpzzpH^vOK7W5uBu6J6a%+y;K2}er%D>uq~ zZOefzl!e>MLh6n`G#zqkvE<{_)MX`;dmi;?QE2i~D7n2%gw}RZnHF=i!ef*^2>*d- zE2niQbe({xFr-Uv&|W>^f0;?M*SzSJ8VC8ec=+T)T^Q%d`r zS2uJ0TYSRPZPupRaHVS6+wZf3KK~SzVPc&|xWPho!p$fg0ljh*R0r8Y?}plq)yYwE zvYaXB$kv|Z0Q&E+j7v%p>lF}m!;;%3pV-gunOAEa_YMF3d0T$L5fV9?`*+ZLprX+^88Qvx(k>A($ zIz%}NxOM=|*wJGadFX{U!)gUVV+kN+EntBq`~wmE-H6az9xdAu0%vsM1n8&ZJ~_g+ z3Ml7Y@iNK`8r2LBE_R*tM>fyA-|j-LQ6&JesI43;DqmFcNKYXqi!$m8h~<&*4_ z>7yW1%s{6acMxZyJM`2SM*Fzi%jU9C^z`ZVAU4BHvYU_90!76K1F5vx|a*h9D+XvbSqKT zvA8Dy?ey^GcmvSLv-e2Oit+b|@<{f`^vLn(?J?S8w#Q13Z61d`PJ4Xhao6LaN0~=} ziSkr0KgvEJ%|!%cjO2!Sx*Au~X>Pd2jcl1tnB1EabmLP}9x($#xvzAwt%J|Wi+m$a zx+_3|r1c-*0l7&ydDPvi3hH#p(Su85gcBi(>UoVyk84BDQygp7&I@xo;Lwgs(;VG)xy8N<7xuD%cTce<4fCvX7G`HK-}Xp)>_Z3fj0p@ne6CGx7YF#^EBgp@R)ftlI3b7M8; zo$J%2-l)nI>$U5XRdq&UR9)r4)~%1fYuu}4&5FU9{aVzB6#VoQ_~{ayOgYO$H{EEo z?Cqvy&^L}nkUjZsj8RfZsUX7w5g!Go!;ghF1pixDR9JFYW>`*G@37Hfv%@^lP1DV? zaXPdGE%ucpJZ+@3Q%sCRQB?A)v7x#wimkmuNP}6~L;X{{G-*^PaR3B^=3iT2Jr7Bg zf(}MhqNSnvi`{JSota9r5l0XK8|iuxwGL=%Jrf?2z<2n*1SNw(?k zbTv>BdB)`AH+TQ8lC3Q6z3UfQmF*9{Vln)W`==l9 zM{HTO&DhH<W|?Kxmc7n(SHc;@BLB=sOb^x0;DzhPDdCCKh?@5sQgE zQ>l3Kv7f!zlus9oJ4W?B{-^qm!wx^G@fB--{JUH0mh;=cwK%~4T%KNwwb%p%6u#p? z;SYtE!cZ%$=cDO_Bk;}W2Q)bTC?;!4%Op3I5(Gb>q@Z$%k{wg)TH;hB__6wh%0d4A zwIA;O$b$J_-&+d~@bi}&m+-SNQ-hu@V^x_PU&@fJfwd9d^akDp;sjc$iZ;I$H81-7 z))&%30f@kuhY2DuSCL{-M$iVK2c1L)B1MA-z2D;B9Ny3G@0ND5nEeM?^bU4< z)TNnIE{z(@-_(EyQJa%P#$JCA^R!kgodc?{6!lRsWQvLZ3`D^Sy zg0d96VRGTmnn-kWs5fgloNo$r}(Vl1{)+3deQctNg6|fq}w<}gu%j)jBJk$YCX(d#Zh;`biiJDfiE(~YNhEgCj4mQ9c&_VWo@ zk^~9$kbg67*}#u>t~{QO8U?I3n;(}cuiplG#X`k;g|MfyHDp*K2IM?2Ermn=&9S{$ zdeu<@BO~ITuCZpq8l-cWr+g`WVk@!uBGYr$|2KVA^HB@uFT4;TQ6b48nISnLuu_25 z&@JExrS5A6vjo^*$#7XApn#@UnmyRTFR-ShPu^U(=*{)nty*U1^=Xklxq57^4t<)} zBF~uhQ13~Tde_U!s>i&thr%(YxyJ;|2J?+9#h~7Iq_^O6iX=#l?Ih zY;&rg`PDWOF`i)PzuVMM(V4ISx%Xa9erQ5cQ{cyhu{swZsxnI<&6%%8`NIi$7cVBF zgOD<66#tAl8%UDa1rqiHDO1`iG7Tu(z?vq8!XkEL8|moJS7@C|S$F9$Wgj3DVZ^gX zKmLrCr2(#1r2$Ar$mdIZ?ebtx(Xf=@FqiLzgYHf6kOcHh$G8}QX+oU%}7@Q@TM6jTaVEnBnCVWg*{e{&^O^&HsFQn-?F-SW$viouhHX9^TFbDUdRSRkbPH zRO6ADD6_mfHP4*z$o+Haj}N4?Y^ybD*Md?EWchH^1pcHnMZUHls{$?WMV}@Q=ry!9 zAH&*A%Ms}a`a)d_D6uI~MMu)uqLp4l|1_W)I3Yz9rBqP|L#ie|#3`-YJ<9v($1`v4 zpL4(V*%Jr54?@dr`9f*>zJg`rl~{~;!P!qhuYxClSroETW~hNxs}YL>EmwBZfT+OK zm!$J%0WKZwRVhMvs(i&8@m2J}GSq9RA-+1_G)~@xD6+tjk4M z0G80eknm7BFh-$_ljwR%oiO|SD;Z5n_!CUAY0D}e+qbvqT~_@Wk}DFwE3=eY?(bre zzt!nACD!Y^cfP$LugO2KV&27HdFc<1#El&TSTiz? z{*&K6H1fW+Zkgpy!sp)-o>?p&L<4b_DQb9pf{O-3F28<`u3=KNDVJ$T7ec&H^$J~> z+J;3TPbrH2f&xDSb%0r_L7^mm)ClngE((A0E@|U~b z6!cU9S^V!?n!*N7R>6g|eQJzLU@4NQjz?nJOa_v63%!kguQX>BjZkQiXq)tRuMx8b zj_wrIsKMASRhrgXk=uK0^=TElwQ3t@VP(g88#Wjd8fY$;t}_U(fd`n>I$vin0<;)P z#Higql?`V5HZ-j3SE<>O{6F>-1a0ws{|Bl0JMj* z@7avr7Fc^UnDS=v{fc4Y``5+y&+S37MDjLry4XW`%PX3g6Y@*ng^(*)xaw#3Czg&> zLGssY)3cGpZp?2(Y#0Gh1IyMlYlL2%*{GDvR3|l++}+sR^wXzzu9>%M{L-As zX^qpntWSGm_qy?uSIFNy-8;8uR&uQ@l6lLdWR_~p74b5PmKn9M)P4J;WI0Cc8HPW@ zENh%C1#^wGfZYfLW|joBV#~1ZN1jxMwp$Zp7P1o4>Q(#y!`*v;Sy5#D!(Dy*-aA8@ z2tyu*ff@1u0}O%^lqgYH1wkaPfPjD^pcpVL0ul@$DgwIts<4Q6?y~BjE=Uw3CQKlh zv!a3l=Jx&n&Z(~I?mKtT_1*vXeBZbGI866cpE`Bwq&ju#6jrMkEi$t#SLUf>xaoYi z8s#M6i~~)SdFGRwo_J!@lL6aaCg$8O>f4|2+{91X7m87G4)7u*mOWp^izoPq@D#?) z@iS1E>%zqG1lqzuz{73R(q1I+Qk%~%cPs0=h6I^bnav|5nkXVtJ*!#kTu z%-CM-)oMI@Ue7;*m7BLnBjQk55CT*L&c|geoJov<;uAZ0Y_(9FEBe82r> z^*ch{2omA9H2zKCH~8&&6m=&<Z&*)>J^QEa`m6oj z#wXtX*SsnJDqb*g!ud-?VK@6kEM%T|{owf%>?hJ5T(tQmj;;2DZuZ^b=i_akkILE~ zRu~I{{EQ&#P2x0{Rkh46x35I8dU11EV9PJD{zJ@XaDj1q(5n1Kd#wFUd;#)V8c_y@ zTt;s-g6TnIQ^H*)LcrY-#5LIV#rAZ^;@A^+-EYr6wa$KRQxz&4T?I4;V=#^(bzcsn zr5p-2T)JlC^cN3 zOKsKQ{Cdd1oSheNMM;APRRNok4db zk|T{f5`6C?*`jMOa&oA-#C&^bY%a#K-svwz-6+XaQS>_PSO6bG`O= z->>mbb_b@KQsyDGa98u2CFl2Zd-8Ho5HAzQ?P^xrF6Af0K65FkB8=PrJZ#DH_B#Z- zrpPTbe~6_4cr4#MEV+kpC%=qjKlyx~7I!(HPuVk8pb*BnWr4TLn-lo+0wBd4-rS3Wx)VD#gGTM@0O(%Ey0-6PVU&BI(8uhc8%^0JQIC zh*pCg2C$l<}8n`Px5XPFr)m9aF8mnGU;EuUEkF*!* z@ICg*o5X$Qz+h%<9-u=c0T-TzpWc6rCLX+>w|@ax(X34L4%D}s5#DL$4+`%&4t&jj zKAHDTu7~C#pvkiSjQ#P))0_E)IZNb_Amzxz=4!S?D#XTGhf+w9NnFKz_v zoH8mHG{k(}PPafDg54)^t}BP_!#hkuK$`a#d;W5|?WfE-`c-+AE|w|4J_2{#D;?(0 z-p4lo!925p+HPZ-+lsEN&}f=V0{f*5BhURby3*H=nqx?q2y0%w?jsZuC0>2_-I-#J z!>Yo-uDf5xe5%GrBoEvS58y|CLYXGfoJ4Ha7XYm!Oc+}=&JB|21s^z3fJL=HD*+*m4l>Sn%|FG+_V4@fyE|#tfhG0KUe6mUR;n1RT(!vXJr2Yf@>WSFa zXw1GBfr3hBsTbJAQT&jMwoDu;dPD#R+!TAwM6pQJE;C;fBWEHdJyUw3gdZ|KmOCoYC_tzFPANkk57ZmNX~Av_lP@*%a*Jo4wH14=HMJkN(bK> z%4Ih4#=vbL1Jq)RGE#`=Irpn^8$u#RI9n z{d6S*N~WS#3Wa>J!RC#Ds+AbY20Urv1c6)B%q8~Imx(!KKg}gcxEl)yJJVhvo?E1!K-EFTT>9j_JnDuednrDgcQ zo*~AIzrg<5->%cXkAkn~%tr?g{N#Kq;md{4W_tt1&=_+jdatv;Ge;=hpk(8}(1(%@ z(VL_rE6`r`;o3?^{*u$ll5_&^c`A33p(irQVJx!`Vi;8+;Ok;T0&0DGf1+;o*-u|* z-Z{<)NCnD%+k4Bg1|V%D_LZN&EW<*dAYQDnF5;z-Vj16rC|?&04ndJlAz*)Im#qM7 zB#VQ|UpZ91mY{zvD9s-5UD_nGonCYuw}f25T`>|tVB6_O2%ue+9YJr*rIWOCKKb)8 zzB2rkFB1Pndg*S_gwTd^I{B?1-&7UX@sS{@uNFaSlz(yLycpZ^-o zl%&CSE?Mu|&an>7{**lq42xBtXx>(4&NW}08Cz{mOSBtK9L&d4J{l>W`V-EiG}zl9 z56YL+>sH^q`zA=u2~>n!PC6ky$FHE^8vJSnR$Wz9eYI*j`HPbf0Jj(H+PBn zFghnNEoFh9V?!_}K3sku2D^YXBzA+v6>x&B4;hAQXHM$_holdTGDm)m4QjEoLO$>b zI4dp097b^+FEc?e72ilzrf1KLv+MiKO<6cphY7+MZxp&i5H&7 zRoiF(Dnnv{T)QbI6LHxR;HF}D+Q;$Dfs!92#Io-j@EtVw`o3mudj-K~k%`Skc*hYL z^s!3wwKLC^kKYyfxV@X;ky~~mwhstn@lGNSc$j%-&EmkTbo_F=$k{DI6kr{8i>#x+ z#99-6R}d_vQ~%K1@QRwI`7kk26OqRpO|0|{a)BXUUV8pF^-&IoN#(+V0;O*|3kx@n z^ZUF&b^yT^LjP@`|C1P5W_66EBfRiMU^degAu}f);>5Ik^W;->ipfrA5RTc8-6ozv zP!5jcrYnGLp=qOgh{892sg*cs$zmqZ!k4YJ9 z(uSU{_SgrgtDa?n=gT{zBWJg4Q+coVS`}O;CEDeIIm_D?>rUd~7 z*UiJRd}v}OH)?V_uyriOXAYTv$j(=~l_{;RIS`I$c`?B9Rwi&(c1zRNH;0N9d8R0C zKstUBhfm%f;shf8Gn=J=NJGIC{5F6f7tyamtjk9~g-Zn%BH;@HH}w{9pcq_c zR*M~n@;GI7m%5`uO!kk%&T(KX$u^Hcvagu=MPL>i?Ibj;+?~LVBZXer@>9S7x>EYP zuC7eRJEt8xg(7{5Q{ZZ5M{%-WRbe02x0YnszJ;Z77?t-(3rpgCG9V;e@7l{DsMcCh zlN`6#PK}4K()?BMU3|RcbDPNpB0{k15?E`03)iLc_(RgUiiY^2101(b?lVZDs0atS zN9!O|OM$0L>)*AR9`*EreV8J>w8w%gT)v_OFmJL5oODz=*YR=w7x=2B96CY3ghV4r z9MNYk6kY#FyypwJP+i3=j#aI5HlUK=?^E3#_`e_TQRJp61-YFm#Tb+?r1y@K@Z~WS2YcMr04S=t* zmzoYfzOGz}f-PkDQl~;#ohTKeE2Tm>Ywim1Gav4!g{^aRWMYANA>|cxEx+fm6qqFI z`9BU@=Z9Rfg7QNGXCR2yt}F6G_BeY`N>22efyu1Yv*Noy9O?jfUoN_kBP4p6?+ii8 z59nUO$M?})%_~HOme#lloAwZ|p^T+_g;gdlCpfKtv1nU9$@EP!21F6mdowu@#9| z(?BC;D~uP*bZ33^yD_tzQDd}xmf&5nYh9-yOyVZ<GJp z1(QA!H?m%X2lK9lZ35T7((y G(WQ!j;`E@ht~h$Q=Ys6(9N2FgaRcmQu6?XN?)= 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 XwkE6s{u4>Ex2wa?N-FMLe0cu@Z#UM5 literal 0 HcmV?d00001 diff --git a/crates/horizon-theme/fonts/RobotoCondensed-Medium.ttf b/crates/horizon-theme/fonts/RobotoCondensed-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e760222e369ad1bc77994c67ae6dbdc1a350e217 GIT binary patch literal 144204 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 literal 0 HcmV?d00001 diff --git a/crates/horizon-theme/fonts/RobotoCondensed-Regular.ttf b/crates/horizon-theme/fonts/RobotoCondensed-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fda21179c921b84f536386da2dc07b5a9a25abfe GIT binary patch literal 144196 zcmbS!2S60Z9{0@d-W^?vfCzF2C!o?fdXtWVC{^jb*bqE>L9w8SB`6j|v3F4qY}ie) zq^Kz`iK)i)_R_1$-S?Zl!s?nw*sr_oCyHMTB$unh@Jx#%1{iY+0u1BZMBpETvi5 zvDw8B;++T=@G-87D{9N?Ut3sGPKaF>A=0H4vu7$Iesgai#J3s!+Uok6+C!4%0fY?k zBV@penz9-7#E3Xx{hR1FtC>2l`lEW|9|;M6m(ZotCRUYIn#auf0qX%C5no;})mFJ3 zo3AAF(ijjRzrJq9OkFLh#QKL=f4#b@eqQeF*9h_I#hkYZqZQAYmGv&PDH#y?GjYT+ z_edV6Zkt_DGyb-zOd=!&wWC zhlwqjO=P&!lK7GitorGIS%gQgz(1s|M1oNr5*4PD>udfMQq7j>Uy6_q2&YRYiUKq$ z*yPFM#wC*&LUesnq9vqS*1@5J?qq#JxI}|WL3mzCCbAaxN8d1%-$*CdN>&NwWEuY> zsgqceDMCJ}q19v}w~Q?1){q_!%g>QA$wCQ6f>+ zqbx@mk1`8oB7L8%0xX{VdNPiGoowPykY>J&q)Rr?j%PTL8633WT~)_cuEJ6 zWML9X6ja1n@Fj&DB`w^~BoMV6uqX0S#DSYf!T^t&|A92|J*15P4R~B765IQ7B2=QnG;WBW?VA%>N@<4H)O5eLf#f=HT9H z$zYNxnM%?n6{MaoCCSo8T_67(DFppy339Sc@Fq=?f01m#iOdlQNyl8}f)!aOM3NHW z6XHuh#N6MY+$O=GU7+wH*^DtQ(oQl(8VWhNPqqp-NFKLk)(ye&rd=755VI%na9aU1ZcH{J4gy3Q?m%^gPrJmAH@~rE+LN~rG25C z1?lB?VJ+ate@+exUqNQBkZNHQ2^FMdzVItKfI40Hon#8PAO{D5>o25APy*In z{CVB4l4&GQ5(GM&BXea{BuX}g9F!a&slsn$KX7iBj3S}ZY~m#h1xmD~(5*tr z6clG%-zICMP2_;|A~_%lft;EFpGl-0^KFnSFh?UP=I;YH8QH}BPTGVN5++F_ZhRXl z5Nx13cgZHf7HyuWtx;H84GESQ0p9?ezey%Z_K;1Io1{e;OS~l0(e^Kt8>9+wZsOl1 z-jHj8>q(L~ao-PU>mzn-9_UsZaGT4&s{2vu2l#x*dLe{_Kwg}sw&b)Vnw*e4Bx@vI zq*eAd*)M$?acwY-x*OEx_8nOg^X_G{fdHr(>t*{w40c$y_1AiZa zzg8&s;4171c`z8oQ<4KZO$1zkLzqo=fL~3(yB+$_BBYap{2IvLQQ)?LxPeCppyQi_ zY3P51wN8)};XN`2H0ut0 z2o7YD@EmmR9&FEZWRavA^5mxbR-F4C%$){aP9|ZnO9z>}NJ_Cr4c3@UIwg&O0eT?V zL8tA=WWkG!j7Q1fJ|q*k9(|!NkQ|f=oQ}*# zAG?RudK>ota6jy2iDVV=mK-PBWT|9_WFXE9As_HF5R=mlg;My6ugP%1m?TMl))%1=wT6^4x*G+O0;3?2HVju0 zcYZT$`)1gr%_J2(oQ`?{N*GEuN+!w%lq!BN{N+(Hgnx~wpnFmLXYeIokUIF9Abt-? zfo)wb48vUSkY%XLg#@xp5(@v2it++VAqk{6AWwl)-a5aZs&`7+p|5aPvOf(;mh zHmnQT55_tH!U}QzB=BpQgu%Fg43Pj9=)*G1mnPYdT1zJIPZ1}{B+T(W#wUCNa422`Qn~3uev+5qATz(wiu^8{k z!eYB83t~Gleq%A*-xU_qA)b4(&<}NIL6cRezeG9KAIq_L?#Uv?aV(bWFD#BjVK}k1 z{-b7iVLcYd{%wueR#*obGn^Sr|D|T}FXP2O)`*Q+dFX85p7EXW;(x7K{4YTa&f*f4+y4S@5JInO{p9-^yqAg+e#8BuBT^DTbBGmU# z_Ap%$^@i!r6GgP+%$D~T*!d^d5$9&}_ZMc9o>-^F^bto4={HfU)5dur+!8|=95vc1+VA+hyCoQ#U11sg6_sY_V?%7|E>P3-DEZtxp{w%{*Uz& zcC+7pinSeR47p}GC(C6S{aH@V#<`F6sef(8C+N92m)_US zdF96~BxZej!Y_%7e-RFN3ZezW_;_I_W$Vsy4Po1cxr zSQf*J^I{#*U$K0E&CUD}v-y~tXR$u|#Wt)V#^fyaXY(O%kSNJ&7BjN@*}BXZ^cMzG zzYg~6hzJALrXP~INSUA-*bT+zuDB=4YC$>;*FTX)A|*4$5$1@-cabh~j9ekt$sO`3 z`Iczu0BS|us0a0xlkv}6IKX2g~LL(a9+4AyeZrlewI*) zrNqXWI*)X2a{k`=N9W(=X$oV7slrNOt8iAhDm)Z^3Y8*U5vfQ})GO90_9>1ix)j}t z^NLF@5*Hg6I~P|McNZU*Vpq;p>N>#H+I6t2v#Y1;DA!WgDz_KD;eL7cp`g|2`gAOh zXLK$qn){`HXx=bkvesQ+GOy`qOM$N+%ky-bGIU>j&H*1J>7p^<7|1 z9%H>6Sg+&T_`Q5Lf1ZDVe+5_*!CmkZl7w`jLZ}z!3(dkV;fT;9ToCREcZCmyUnHEw z%9%JvJ2yJ-a{j^jCtyt!CJIZ1jly1`P`Cl>07aMq>zRtZiUW$H!1|ox;-9cCFko%< z1lE50%CtE+^KH2g~`+fEO8TYY+b${ypDfcJcFZ<}Z`*|N- zyq|vG?Y=8o@f_g3>^}KG_d)LmM?X0H!H#%Qy|!&Gm36xl?30GM>}i8SX6C%bnxSlNDqoca6Ia zjlK!#et|TTRosi*OWZB)Hg^XR;3l$~tl_qhwVamILGmfj@jP~+1zy5Sc^Pj6{WsxF z$y212H{;ED3s?h7-io&->k)g{@B?{U-j28D2az`H8+h=;cu(Go_vU@Lc5W-Ti@U%l z@yYxsel+jKyYs{O5zx#N$h9>59%$7*(oK5!qkI>CjGW|;WB=$BEKD~!jSTS&f0CT# zPw}U*w|$13Bj@?Ed@roedHw=_k-vm}jpz8Q$jGnp%);FuH_7wl1@a;=D1?(y%zH-1UJB43k#^Y(Y!QNm5L!SBX%Q_J_6qxGi4ZF6r**WRE}=_>gTevYEv%+!Ugl^&7CuQ*322|>GgHfYNt+_JZWN0bya0Wd0A;maZzDGeqQc`@j2O9 z8R_H3rj1EW89gdFX_(y7#Mp~=o0`Ncp!E4WUQd*wIt;z6%&-b)Nq!ct5K9z=Z(T> z!ntY0PgXApQqI+%mueIh3WY}MrYuj-ZE?}iQl+EeIx`m(qh*dQE=m_gUS6;6X(u*X z>4Ld964$My%^BS>v^gt37mI2X&Dps<9OdFmp4g8^bMo~%=$l235<*}k;E9q7{{1#<{WszntIT39)84_l9OiC zoH}-6PGErMUfS4g9ODRRF_XUOJZ;2C*4FsA4Un^8PfUa*^@!*Efk94w?nyI(`Nbnf z#IZkbuf%R{tf%r1vChZ^0~5RHSkF?3b}BA;w?qZRS`(9%%f^;ELgroa@)Eqgm~<&} zl~s<)yzYSmTj~=rjk3E;>R#&ElB;1t#zaeL84f|^-9}d^lS%wYaFZd$}qPkMp>p2lyQ#T0*Qk@4Wd9Iv73zb1U9LVx^bTA z1yDwUADFfP$ii$kPmb?m)#sCMP5pOTaANI&# zjyR_EZWYxyKoQDImF4;drjLJZtNCj~HAX$zrc7bW0oW7V|{$mVeL_swPfL5!c@jlBZJMaE~`?yz?`EkPo%5JKCGSs3CYzE$Cegl zi-rP3wNLOmuNKf_m5_`IvQFGx1mL}w9HS!ljuP()x)b_RLbVpn28@_ zH;s`S7_AWigT7nF(CMF3JO|MFdjJx^)gyp&EX6z<`-q5?8ZHDkkR9`h&X6I%I3H66 ztuIqL_Uf*t!vmM%s#KYm$Ck$jV#n?fr*6?t%*chAjsBJthL!Y-o4RRCF^Zv}Z_po2 z+%)(ADZtG7^n}9_XcFON>lmm9sMr-KC(=zM9lL>dTgey!B{k?>m7`{2o@b?gGO4~A zt$;;^<*vvOEn zvptP4-+$iKV)VZ)22l{XsWBD-Vb;jqhynJ`OCdF33`$`OpyKpsq%c$@AT)HkrKO?_ zF;$TT(@-;aE3{h!r!b%vX21=!SqQw-+3J7+2#c55xeR?%2!SX(rs%K)9iP^VwkbL- zf%wxfXa=}@bvi~s!)QI}Kwr!!%DJIiR17v5yKjzX9?p_jDaEKHRt%bCYS2=%zgT_4 z^m?8e|G887crxbbm5*m+SKZVM;jiE*!HVt*OOPvEWSu)O!F5Y`HXrYQk2a6pF^HO#Bh@2!8-rBLDK-%x3n0U|9y|qU&ot^H!$S~m(3s7Y!-t$n8a&L z<5~Oy25O9%9r6Kx8?G^NgH(vrmNYyw&aWz{>$L5%hwG;RUK>qKM52KLjfT2yKM zbboEl&TYUVj8fM?3`-3~Epc~Y#gUOtlsOGFqs}u=A96J?*;p#7)KX7{ViMx4c#3EX zjuPhzSObhUauL$e{7Op&jUp^hei>2b!@?)iV~hI5L~hP~<~6P0sa7%h59v2q^5g?Ob#p(un= zgsbl*X-;`9EpVwVN|s5DXQ>U2tdsTEu=ZI(em^PF~@6R9@~^BQNvO$xD42rt*cd9p$$Pg1Dmi7q;Mf{R)nFW1TAoZIBF&N_L_5S@IalTIEL(H8Ti zJTf9s9v);N4+~byLxac3LxNr9!9i_uRX~i~-%l;~^+}O?j);+aI0$lgw_$QOm7_!9 z(81PnrDU)}p{s*V?xKj2D?$g^70L&B%bo3Y@*#FQxs#nt?x=EbDi{=K=TtD5o!PT9 zTZd@71Nk=o);U)GmO0jWmU-rZW;v2TA;&CF$dd~t0yjWdEPN~Q1BxwjOao1FWP#Eg z>Q8bk@=Wrid5fjgS2|8wC*?;EsGtI;%KDJ8j_P=klRh^y1b^fYsrwf zR84DEZVw(53_%)?ygehgTj1B_&6r6%iKnM0t7pud#V**TzJZv|&XXQ59Y*dUJ(zPn*@`C%C&^{{Jna+bPA2Vu zK|lXivJ*3F$P&_oc{k$xH14-2>7)WrZ5qfjw62UX|6zcF6jS;*1s>oiMs<>~1{PxZHTH@m1sZO{`1;O%|G*FcnNknI1H~ zX8NPqV6%L)X0tA{x6FPpmzvAX6s@RH!$Aps#dAuB_!gnScf7aAFw8~SzFz_3wawP8EL-VGldJ}$g7 z{9!~y#FmIpB1c9xN8XJ5cT`+dd(@lJe$g$_*PBK~HAN5YGV(-PlE8kw{#>A9ruk}Z7)P<)y7oyOj2F+DBtO z#!ec$bF6M$(YXENz8a@Zw@M$Cz9fBP`oZ+`>9;bRGHNoqGp=Ub$#^H@vrLD~y3CKW z^0Hpa4$0n?{V1m(=U~n+&foZMx(CvtD+{+2f|Pm$-Bmy*|)FVBz8&&e;&ugR~^pO?Qhe|7%G{FC|5<-cEG zRG=!DSTMa{e!;SWH3gdrb`%^e&=j02c&6aRf`1jfS11&E7B&=~Dl#h?R8&`Vx>#16 zQM{}8UWsGL_>$L3hm&UDaJRdul$PIAmh%#6=VDOp2M5Kk3M%ZzkJKo;$f` z@(WWer$kPfI%U(8*QfkCRXKI!)NNDWs`aTYtvyhCz4n)BR?}jpO`JA=+U{vz)LGXp zuY0B5yna~y`1%9&H|xKdZZ$o5dfW6@)&AgQ%S%qW_%b;iw^{LGY@TW9vo8a69` z)`nRx&FY)&JG*Fh$Lv>Uzdy%fPQjcrbNc4G&0RG2!rb5I1OUT(jvF6jwmzu9N-)ern`Mu^( zn*ZJWb93LS0jum+%~^GE)mtrIE$WtQtG!pxSbbxS=X=L+kq1{jC>TZ@1oW{b{{yz2kbH^|9-- z*H2u(VEwxFyVsvue`EbS>%ZARHw@e`Y(vC`u^Y-Z%-GPhp?yQwhG#aszTvYC58BMy zyTQ+xY{$We$mKj@`wzO|KvgOj2J6k^7 z@^ia!yHmSwdt7@?`^5GI?d#fix1Vai-hQ|JtM*^F@>}h;4&NHJHDhb#);U{OZ{4}I zXX~}CuWWs9>vtV|hkb`VS9mhJJ?s&c9^Nxqx25eJq3*I(rTfw$z z+m>u=+jd~vxox+$-QV`pcIo!P+kLjjZqMFcvwgw#b=!AsKe_$d_Pg7^+^+4k?sV@A z?`-M(r1Q5OraPQ>`0Ys8F=5B#9Su8LckJD9ddJNj@9g+yC*5hj(_!b(ogq6@b{6iO zwsXnOO*?n*Jht=7&R2JSyz|#xCcB(=`R@5o((XIE@9+L`k7UoFJ(Kq=+_P@au01FB+}QKhp0D@l_FC^9ve$QS z+}^Q!OZU#)+qiel-kp1o?!CPC<-H&7{bir=KHGgB`@;8)*_XR-^1em;TK8?=cYNQ~ zeXs8Obl-#hqxTo?pSFL={*C(&?mxHxrTri5|M~zqFz|rKfrta?2XYUT9+-Hb{=nP= zjR%?!v>s?bu5-X7nvZNd za_q?IBbSamf8^aGA0PSksL4_J(ZHk0NAr(PJ-Ybl%A-#m-Fx)x(Pxj|Ir`zzpSz5@ z9J`cVo?WW0q^`WKvaXq3E4n(mj&+^xy43Y@*N0udbZL)S9dkPtb}a2!>9HBdnvQKf z)^+UavDc2hbL^vIzaBR^?tI+;c*61V$0r|eIKKY){^RG4zjXYA<3AmLbi(q)&=Vmi zQce_~n0}(^MEi-Z6IV{WcH&bFuaRq1nj}rWrdG2=vr%(Mb3t=g^HaA`w^O%ocU*T) zcTM+#?seUJx=(jM-~Dd)cRhTMq9?LvTu*t=?4FjM9X&lg*Lv>ueBGlvX>-#3WcbOn zlVvAoo?L(O*vYFWUpx8f$=^?zosyplIF)cJ_tex=ji)xAI(X{*savN$IQ8Rc>1l`4 zUZ+Q%&Ny9ldfw@^r+1$|b^6BXw@-h4#`uiW8Q(K;XL8O=JhR};x-+}a96s~OS(mf% zXRFTcJNrqmO>a_fLvK&-`QF>TZ}h(3`)Thty}$Ho&q>c&oU=PO{9NR@ap%g<%|6$1 zZpXQvbJx$keeRp{+B^-Wm+oA8^U}RbpI!R)(yy0vmu)V) zUko;|LWSSyRM$Pdgbb?S3kM>+ta2`+dr**Is`#AzSGEE zK zm^YOWU)8MuOk~R|t%6*{Beip`quZS8q@-E9jTWwF$BGs_EnJ3gb$UO6u`PnSD{dsAQv8m^53ug;r0(JzNh0JZRRJBe6)$5 zVn9EgZ(7~gf>&jDQm6Cdo21)C+D4J!7$-p%9&Y4msT2nK1_eod&DE5X%Lfh~%ny`c z$y+L4E0uLvn0R7sAI8ps6XO924Rm++@Zo|2gFz@~&Q=-d!zo>*Qrm%ccJ{a)CG9p} z(W&mEDg&k4wRfoh?>n_WQ&SolS(@(ZQGa0ef}YZ-xyRM<^;zEGlM-V})7*yF?Vhuw zyU=ISu|+v`v5sMr!G|e$*Y33B8nGfu5=4?oDgjkT2c$|O5{3uZTPP$Fb$~geYQS>= zmd^#KtnkmzKTD5{ot>>7dUy8_h7E&0C^yvRE#)f*(DN*Wi88ady)#>RoqLw;_ zdX5NjbP8cd`a;x3rDA}zN6*bcp)_{t2r~XIV&xLRXfsrGF7Tf zpETbrl`88|`q)g?nyIgLjrBomrter^Hil1oxGqjm6Fjl5(S0q9k~~M^$k3R9N^3H} zl}ZQu`FUDdMcAligLxny;2Gc>5a4TN&$t=_90NrRMFv8_`gsd-fR{3v1$fGc5zTmt z2Jr*!aAy>u>XSi%qvO4!v@@0$5+B=``^{e+dL5*oSqjoUnr-u1$q~iRswgWj% zD)WfutRXxclqJN@&f1!zh6Qp0LvzbU=od&gc}KfL`|Amhdhgv|Q56=TsxNnYP4_sV z{YASI^E+|n{CG(>u^53%wRniz_^!X;}#;}RlJ+M#74&ROP<%h>Pvl$ z+fC>QAMLGc3(uYAo}&ZvH`mcz?Vh@=1={b6s6zW0Of8v!H={a*GonqfJT1fBQVw)f zSzc#`kl9-3I^X%|Jnie|&5s|ahabL+SHA(%5bb+3h`dWoKvMy~5OB-SzY3DVFb)c$ zL4{e96khi4ZYp>&VYF94S#UeM$B&cKTijW!27X~3D4n>*Eo}vNw!IxAT49@KlUHF$ zO-}O0Fw35>qjR1x#;p;dp%JW<`^Lul`ozSrc@?^4+)2@f8uzewD||;{V#qLeQp;_k zI*I1@*QDOSc82b2elfJd9^ci6<@c1zttD!y-V!hi0H#^Miuv$hSv1U+GtXNE`tV9u z2*1@pXP!wvzc{4&sl23lr3phrYo5wYo>!8f)L1J66NanCg*e&ZWLVI+U`Kw;`zL?d z96zFH^BYgSfAWX6nBjSC|I*H)j^&#s$I1OCcP-F~>v%vPf2<#LYQ z2p{1I&1MV%1Hli2@q&?N)|zRw1t+8Y-bb&}^(kYWeR88SYW%tj&NR7poY9+R7LP_h=QJCO)7BF4_q$yp8|7&63K zNGIfbRP4)bOHk4Xq93dbv|#hFJdxFPG-X%BHW-So@$TK;?OyM4v{bryGkL+e4K z9XK1#=JYT&=7u;p*qEy&oPJINT`;GIjf<@dZ*Zgr{5@36Z!+GAewC)KjppWS9bH{Z zW5%y64)CwoRFSfLQk>C2ldytFRc5HOb7W3vYBG1)oqPSLcBcKX#Ku!~lQhdl`B!bJ z&a4mf89#qa;_O_1_Sz{~4#=L8^pIfU7-MeXHOSS~izkBG%b*D?)L`16vK1xYR&?Qy zL18KmO<+D=R2Havpfw!)%jV{bcIUaeMWqc>jSF&e2uKTxtcjBrSj3ggj45i$8RlQQ zzO;H{nUB|kFC;ykB|EQIzfrcSI?z9F{^;0wB_XNvl4>( z2Oaj^IzT)g9NG$6N}1kLi3B>ri#j64L$S6{c9$T2tJd^9{kdqZ`D+GB<)I$V@G<+dgY;EAN7`rgX#%zF{ovdG84H9Yd zxL>bLf9>ZNRcq>|X{tkO){UR8snP_M#>N$^0!rc&N&+?&@0~b#Ut!U{Nt5>!b$e%p zhGzMAXXEHiTbj<5mY!>xuzqSp&8hl~hNPs1jO;lhN6z6MPCimzeq{3Ep5o%3rK9U( zqw3RA>!YLVL6?a-Ek6y|g)&Z(P&*fwP%}@7I@CZL11GCQNz#iF^W%Ea3Q_elP;cy* zBedX^N@{Dda$nXEk&$DAoCc}Vg1oX4yo9WvvL$In%d>|0m9&;l*<3inHn#EgUFO^J z+pkpJtLT^*tSVeMI(B|}n19aHh^*bq$7QcMmN)Ut>amrFUagCt{>8rzmf=0{Rj}~& zco*NDSUgGs(e8nk5AjP5QetVrbaNbej(dn-P7v_>EOs$wl$S|~ zU?ef(jNw3hMXQoUZE27jl?Bn8oT@LI>*~8bAMYIR(tiFNT`=Qc+K(+}()nzzP4p=~ z1K(I?*@eYvsmz+^EXhdK$bLTr<>oW`61aF7In0pscm8qr0ag-O~5Y& z@nRgKbm-6#rfMrIb2~94W9HII#ayp4nhSZ-a_dD=48^3IhbyKI9;Gwa@JW_)_ zGlIIgqMens9T~CZfu2K7_h&7%qjW)atZ!CXLSkj`hzUv4_lz$*IxBz6@<>&qcHSSk zOszITas$6#5Q|LABgWcVB1z7)QI}O#nidre84@|%4^Ep|2VWHqFz=$BfY2b+4?#jA zHAq&l=rqA9<}(px>5~C2B-ona;mlb}`bXLuZjKh9YAgn0CP(r#KRk13ab#|=t;}<^ zm&C%^!`5$1&=6kYn%>y0o^-sWEJPx8&uKh5F{M4wHBvLK@wMGkRZ?m4g043gHNL!S zvj3xF5>rK>tDT?UF!LyzsMO5iBMT$!jEsDfa?4f4ll{{iAk}G+!|1Pt=Q@h~3zw#I zBl_MLUFdH;vaT(A(}QPLB&D^!(6?dp!)vROM+{Yadu8qXh`M&|qpn{cEzI8WvGxO9 z(zG!iL!v8_MrAI{_8d8Lcg3WhHRY<2o)u1hq4oPAWu7oVGhnrt$7RBR?W?!uV3tollVS( zMNIH~mpn-49Cz$svegM2`8if|fStoy4#V9!4-e|@ZeccnQ#(02T8L{gwz1W)mOi0# z@o-@o4l{B}gc~lRWk+<+yM+AF5#nM<>bUXRyBxKNE)DT58U1-L-BrA?COD(DI9l5_ zg>s`RgS<+|{+pvQ!}Ax6tm@?sZws9?I=#yG!8a0(cgcq8{Pl(AeZx9qW~FD$j@cG! zT(!Np`9c}sDgv} z*}bwUFSgfe8sg#?pPjkx+7xN8EPQ%?`m9tpd18Hf)$A~OXY*S#$M61dEj3^B;qLL% z-|C#PJ~3v_!5Z!Nr3V_4;_#&kk&c2j=s1`-Gacn99bz$HfHS8a!U)I|RG%-FDMQ3? zMzpKQ!WrS1Ph_zH{p>gHmu36LdgZRj*Zx2)7F=JKn%a6x`&Dme)s42_XC9gwv?Fcn zhns%g^kI9NK2?X5Fb;NM<^J6d#0{nH}QqzM#o7KF??S9x zf&}kDWyjY}zpyeTdcoQGYp>VJdS%h--0Yd7U3_xprsk9fS!#dgUhliFC`}o&^^*>2 zwe{2XF_Uku$zPHfT7P7^_TMwR>O+S5SkUzCASA<982==;#!~1Uk}^&$l2Y7L(d!#9 zWt4P5;ZOFha=@22diiKZxBh)3;JP1TS|rYAb{gA7RFnn-sfv0HOvJbdL>#FYXTxF@ zOEWW>v6^k;KyrN9rVxauKY-|uak-6WE4yb*@2TnyDUOIN4xxty*~8ykuh$e_e5!DE zXzUULHaX(z%$7LCSW0E45;G$yCxCk<{dPnjWiwP@K5VEBzJLMt@f)?K+IL*uq|I*H ztXj^|z{Wi7&f9b_r+^8$zLkAdN^e724K#xu{+V2m`#+?PZ|&RX()(D-^bksFaWBjp zu@p5&W+5>(Qkw|`BxlKhUUreN!nmoJjRVoC3edjULmTMA9jHo0EvD!GbszqhnIcsiIaw&bhvGy}eut zyIrVw*ojFy@QqoHEP~voLvC#$x!{tA)X9ohOPRT0I)FKz2yXQ*i+>zG^~X;_dVJ%l z>9wbpCMPXDRXhFk;)FB9#;Q}3r>A>*W~h@=XQX-XVksmjv26W0ao@5D_9)SW{U<}Z><3lvoHob&E(WY%;TWHwc2NB zbbg&mRhO@YL4JAdGgVd3a1ouO8Z%RuXE4L7etyZC>owreES-r^2&{Sd2w#>rDr{NU z;mMmoLflI;4>fZBq4z1#)u z`&Z~NiKg<|b(Q;PIN5fNUYMG_DDlBJ+(z0r#|(VQfiAxaiiHt*%m5Sj0m1(Mp2q4y z0|yQe<27FZ!O~kMbx71auybJWPRO-cEW(9`&Xp*dX23LPp=K3^{R0(;m(S2)ys2oTBk%d zJg?4NJUV)Ef=_Bpu!C~^l$AMot<@n2JZe*?B)No61QnxT2EPLpnLmLx7T^w&(d{Y~_R{K3I@L8*kd{20dnT3bm?_mnek&LbP4{<8NUeo}<3r}QeMol=i zjkSeftaqBC>0xjqNX7QPjg6908<-$=#`E;!FP0_tEn9mgc!~CXA)x21_TG|rKAf=Z zheX=T|E8Vw@EuqoCv6~(L->zGn`ERNg|DBiW)>+CKzLw%Q!+TlLWVEC33vv;sMU{- zxbwj*9!wtlpbVteZ)lt7vb);PwV%C3mur{9QNPOh^!fI=aAAEnxO*J?S}YPX-{sKeBS=s zsCH>HUoh!eOUzJGI!6*1k>M0goEiV-kM3&yj>9BDeMQa`tcz4k>TV4^mb43LR_ z(XjuZvJ(AQl~up#Q1%-WXqdgN(%s$0UW|AR`sN`fPlk;OZi`1+cxZ-ax2kkyc4bGd zmE~D;3ny;D$eI+7p`$|LtHU@C!E;PaO!3;W!IO7SKF6iTj2-GT#wT1|6cW2(Uf-9& z^Svw;Q#i>|r=YO`v1zW+x$apW1zAC(*3^t$UKR{&n}E+I;4L6FX8yy%#ZIR7G&NNV zCeUlm&u36Tv?e^r&gBG=0+ zwM3=;ICjpM5fhrgy)r;K8C3UR9u9kM17&LbQj2~wS-&3%35P2U>CY(oZT91gg4t~P zC}={ca6qWqTRv%9RX{-1wn@`=7oZ_vd}LBVpslT{aG7UO>eRgj2}{n+o-#hd{yG} zfY2|hRy^GhnXu&SjFsv$jR_+cU-_geziGmVQF9Whld2@u3;78sRsksMKrv5vIm;Rw zDz&k;CJumcC=s{d^)X0E5%iQj)9VM*7CPY)WXQq{po&jajLNo83y)W~j;U_V_v|aA zKMHQyY5rLeE-tYpQF${xi-r`f92h?5%)Rp68rEPE{fEC}&vC@G&+30**PWdeni<0vE*v&GtT8;XI<#+ZK*@@%?D-jxcHgY| z*_q2rRNaF^47_s-2k&x22Mgg3FFkcW&pFCxL3lvG^kTkP+xfpR67<3*6JH=&roqf( zSaEhHGBr=soJcT3YzuE;5JfQIkUWSFgG|Hc>ANvvo|Hj!--B+hXmlDGR8(!IOAGs9vhsBF39+0>_?IX^``ZWwFx zN%nK#D;{+U;aW32zYANdv5$E(r<(D5hd$bv}cp>cVEs@&M2^oyEBR~lnu z8?P*4CowUNS3ar9TaoYWoxdWlCauJp`mt4`+(G7h15qLS2N1e zmv4PkFN90GB>b>Z6%o$mT}`RR(9BB6P(0QNf~7QdBo+a~P1W`m1}QS+bnGRUf6D0$ z55N$AiO=fr2yDZ!g0$2*nV$ani^kS%&(aJV8yb<~Vl`rP*tE@KRmICP<{zHW&5z9Y zjz}L)ZHGsPyU3$PmBhx@W&4ibROFqm8WBIt+0)I#!83REgyb2So@Jf+W3m;>I8eo2 z_cdoJi3K0UjLZZgk6-CvY-2GE>;b%CjqWwXxNUfymK|GJxjx8YCUol3p2{EWt z5X<|RQUUKn-G>Gxxn(t1#Mh4V)C~3tb}Fv-f568)yiVWerk-7q>QmY=6&sTYqf0{U z3btW29|&ZaxY{2XpcEOP-sbA}ajNtQ8ZtoI`S~gBm07!gu$ig7aFB0fuH(_fJ>va% zpebl^)}Q_1eHWQ2vEm0xvG+zzq-vG~iqq>x8?Gv!^<;)U&xdY?@Y#xW}aT;QE?rr&2Y7c)gE z%M_)YHJ+CJW11MyH=SG1cWf#*u0E}AeS3R5FMl+;neW-UmEkfV~11=^* zj7?0OoUCmq^1lE)`@lYqxQl{EMc71#^acg6x2}SNZDeA^2|W*DJ6`N1B+hMUaZ+-} z!orM@ruLyTn?i<;iCWl^JY^ zt8QnmsbT!mU`swxpAG-a&yXjG7WYyHO3543wC0+Kqy*nU|NN2M*cFu_DX{_m!KI+ZD(x1UDWpLr2H*`xDl-Su zeBZmx-aJy-;Bh!)53IriyiM#)$^H;eyG5{l_?0BhD>~ZC3n3nlr`4wXbcs98WXK=g zV(>bYo0|*oBvZ=-BO^1Z6?+zci#;{KTZdw$k8{}Ge8_*z*tm@D?(T}92_g9XpQ=A+ zZ3hMa$61@iUHbu5;MdshQ+a-HNmS|ns_~njtsPPO?B?+`-SzQPW8zA0kV+&}ZYNQjnVWN*_@a*ZM5uqCwv4@x$qMKqz6^y3SpU*Z|BfL4 z>Z1*Oo%UwmH7-K?v$dc9z9Fs_)>S8J>pQd02Icq#sIIFCGeD3p1q4(ZlfT0gC3`1w=y@eV&37wFHA*2`5V|owiCdL+B1xrF~ z8{HV!b#;rby1J|DySu*Xy477*6XxOnz4w_RkVMV<`+pRez|3>ox#ynqJ>PS#756nh z(=0ghAAx16mUKw`^v>0p5+aLi(Zqf^6FG_)B)tUrhl^H3OfAjUe= zF+1z?Tt`+@oKN=Rc`XOJwG=7+0(g}4%o4Rx$$v0=oyygR42|$Y$El+4pQ5U4@{QdIUwzgDnZ%^pFx~ptM zNlJT4d|{Ht*T0}`TTAK6>L^ZFmC%?HUzC#I=bzuQrKNsHYg|<4L#w!oLA`HMdzv~g zInmFrpnZEw@roK8@f_;C{*(K=>^e?HcZv^MTH3opWkG*Jcg%9$LT0`0O424KB_(Q; z$dkH6ZE~_UQ73CMd2Qjhytn4*zsUX<`_dn>UjW>~&Q~f83CVG>wN&(>Erz;Yim#TAAjax zTXS|}OiW{TbE}cC{qf!d&CL(I$M(zc;%kH)Iz-4%7BBvZFn#EdFnw(?S9kjKf+vQD zho4w*>h!|8?2(dXr6bvO|GV|m$J^T<|8(oNKRwpg_Sm1coh1%$3=O>@{NwCd;U8}r z3~v$#I+MG(XSgRIZSImdiPy7nUS76t5h(ujl!YyiL)q(h*UX_-5j=ENnbi)(4wVc! zq@pEa7ofe0Iy+HA1efptP3lTYyc`gmejb77J+>;0{&jQI&?pyvTX(&1P zl~JNV)lP?LBgQaFR`Pm2knJ+3OQ0BlW=G*wN<}d7O=WZw>y3Ku>I5Hn{(OmWp0vUy zZNh4Qiq-bRZp#5{Rjc>*_x1>oLIV@~a9dlgw%W$tzNp&SkXghQpHlYN+S8+YoheF` zrBrE5q#BXxU?MjM$(5K89SHxJAO^J3bNrrUBJ~6AjfkS?po-ibdx-18{pIoPd8kF` zXld!^a&pMR@_-eeV=TKj0ogZ7e6*_g6fdKiuS^=MORURqwzab48aH<)hUB&pO*&^^`JE`Z>G_ zY)hu1jT~{Q70qc-V}(qP3sv1zneziv)8w~j$vI;VUq3cRPEEz| zzrOk4v18O~D@0|<|A#Fux;TsJ3MPw!s~05y3JG_L zjY>&8l0IBjzBolyn6RDq9$iH2BeJz_u^FYwh06<4`iiv8&Dw)>zvXlLxgxaY3H=hK zxAF0iNW8opqQb+29nkc%*47rFsK5x1S9>}9oCN_*CTulB2iZ)`>4wN~6(x?TB1Hf3 zR%$RR|5X$c=b_d{>W*YB&MO(xC-#;sTv)qEleeNozpU^`YMeI7H!)P&?GqOel@=eF zyD(AHS)`q>4JnUp)ED(8#`RW3r)R`PXxuSRYos4=J`8cPdWwv~RHM-eSZZX=D<2F0 zM(83`_<&kAhkyt4!_uc{z8`FI8(*2k&Dz<(I~jbaRZc_UY+C}FR_RQpWvGf5BbXT+ z!SA^%6K99&LlnR}k>(k5u>fve?y%V^@6IGZIag)*`UQ5|QA<0WgWQD;s9cP2ib zNzbrGA=09iDt1!C??1fON?jI^)vlL^CI@;atF>08_3AR6-+)V$GBDH`0V&)7bCSG- z5y-(-2Ol4vfr+!NfLZd=;c=ot#PBcN{N#EQ0uWMzSP=quzdj zu%5R9(h?|%mUtizEeQ#UbfBb1W(#EEl&0DrN3?t<%>=8*!ZS3wh4@DXH`~o1t>gY# z+JLl>@QS3!dD?N(a)0O2Gu0Vwu|5HI&&0>aB_zbf$8(RgujtH)uIbDx>eNIvA+Ag{8q;dI#)H4*{Z6S&L9zj1ZO z<1+6Xe};^-Kl!AvV{A<3L1W9tgJWadVgwp7bIp>s_!em=)1Ed@OOc#GgP>4%D^$dt z2e;v^A#UH$u+cEY?R{$v@4a^FQ{HRs)Sv189+`eXIw1QJue_ndfN?=St&|{|g6%=0 zC+Ie{qY;gErbZ6zBS2k@%S|&MXtYkud;oUJG9RP^Q_pVU%a-PEzC2Wad`&}a(bmg@ zjVD&u#a#B*mM%;ySXLA5rz>BOR5DT(F8lJ^%kmQZ~gipM_O+v;fL(K@8p$^g?T*<%pxn9EJt-MJI#d6L9utLP3}*3OO@X4g;QO z$K#vUm9!tO4vY*;sjEw=I=C>pv)VP(XHjxyv42WkeM)d_uqrQFR~9a9xcP{*Vex}Y zk_wM3s~o5**XZgi8x3WKqeZTPPAA#G`smACs{W^HT$RXgly4 z7sLu$B|5!NJ)$b^`FSoO5 zGeZ%F6NV&OiXs=Dn1g@rjOs{(f2Pn8>?Q^UvgqFiRf#saRz0rm*jCjwR=e%(>}GXP zeqv;EMO=e>=cz^QTk~Su_qK3-ediV@rS|QuY1z{jYiuR|3T-G!tV#Cu&+5$YS{0V& zFmKCc&a<#bmr$4Bl)t{4N zetY4-!%ZZxI4dk3H2aJd9VzL9hw3`ViN#B6e1(IZWDqM~DS4bfDt!*GsNLp#+0z;M zt2{;Ket$jQ;kwzNn&nU-J_=|CLW@I{KZ;bYbo1$G{>eK`PLh;Zy*@T3GjmFq$*kg$ z=d+4`0Qbe+VvK5Zwr(knNv%Jjwt_mS6+R97E)eZ+m_r}V{7ce_{ZTb!A> zcwd!!<-R3){gQp?-Co!-rRR@I#vvojg%b@%y7$cm9ayfj*|-(ocJcni{RP8+s=J zqx%(;Pz8-{b8=vy200B7nB+5sjW%9+B@umq^3U0F1XciyTV8 z4Imh#PMi%<#?D_~Q7|+wGJ9>kXC&=|Wk9rthq^!wZit^L>MQ4lU*20D+jakvDdW;p zl?p4|e-u%j&Pz&q(tT38w*fyyjX?|&_%ID;2v>z#7+js4+&nFj zbAdus)Y5lErVnHSJ{yf8GCLv*Nhhvwz-HwU=v(M2>7yBZ7t5&*e8RKDZDlK&``3y%^8JV z{n-z{D%?>U%R?z)NdVLsRH)X&oW3r;Lb)(`G3U9hJ)%D9O9F|58Iraal-7ixL_ z+VH%v(>LcQ_8n_qaI8NOKRY_c`Vz;zlN!>~>XW?9KV5Gf#RVJ3`&S?HDq45zD9(&t zA6v(T&Qk26hNp^sNoMAfS&AJt8Vw#LGX{{|rCHP;<|T?C#SHO>6pa^bZVE{Ace4$4 zkIf2Xj2|1zy)t=xOE$Il=0o>VwhGI=vX>yTEb$707jLqMsdYIsn}M!@vrc&`zzojE zNeWDm*~?t*2GG&?`;6*<;&mX!9OU- z&zl&m?d+@+EaHcCXW?)54XP0o%iFfNBWz(4#yK-DuAJ-X>^1dX(eBo^X;%JG9((p+ zp8V7OUF{;>W7B;R5x#koZL`DJ_YLV%*m|{% zxa6%ZTbPy)&%!sUyd$|}q%uODwDD5gcKvFj^8eslP)p`ZsjGAXBk)JO77^}HnEBx7 zIn3BGm{010(#T`tJ=rol_Gnl2q@_4beelE9%*5ieb<5Hg86Tb{_TOpGuxPw2AKo7A zEszQ&fq<3t|6(n`Ws@_^`R^-Z{kNuCyo@I+gjHeDjc6n%$9R|t}fV~v&DW& zb>V}-!4EEgx%m zqr4kGfd9j`xHU^lGHryP-i;_AJurB<*bv=5_3U>u2FUa$V29P<)OQ40M5$p!r022Y z?zTPfzyv*8qCISEQ?2}?J#fMg&XR8IwLbU&UD8TuSgk@6b^d}iOXe$OoqEzMlC3G7f)keSZZfirAndHI+H*Adf&#n4jd;dh>EB78>=od1mQV4PG|3hVHOmj#I}_Sz zn89H<$tvlyoJw8=tIiYAB6sPiqqW#H`>@H2p>E71)4s0)xJfXpnRoGgLdgv>_-{*fElY@aC61jh?uL&Kqumxqs$8T z4f2k(wQ|kY<}Zj^n4BDtR~8i*=4`Rr-nXMQv3~)cx)FHmN3ze*XPnn)hFCf2?Y#<} zWTUnyFP?tNCSaztG0yWHi<_3o2YZD@pBGtfRhU01zl!>w0z#z5k zGwY(oX}%%8dbPZ0NhV%o!8U7>{*rqgYfh1MyJv`Olv?Q;NDP%04IfAg1eITT)*{WG<&nmW^!obrjK;Dkf8U4* zU;n7DidtKXiW(b>g5qM8A@T9JmONhifpC%8xN~{&yr6jC=>I@sDJ>rF`$+o1be-va zGYB>9v+<(`e)FXXp~hutL3rN=*=M*j@IjiMhEKka7XBb#2HeBpSr-J9z=dEPr(;%9 z+66T=b#&_@`Yv>?BVqBL&Puh9T;HJ&ERU9cFvi>ad%5~LTl9Oy=S7s}(QC7&-j)7o zx=!{t(@ZM(QCiRhdxt%h#g{e0$Qfb!9rF0DH(!zdiC76=6KG^&OcKru&eJ2aap=5R zGiXdQ%lX&l$R&|XVsD(1XQDN$rw|gG!RPtO#3z>FZcC9Z6p@LH=(yhRiO(^xH@#f zN~Q~d@bV|&cgUc1IT>e=G8~T13o<(psXJ-BhRnw^G|LPgW{QZx|-%E&OtOy792XKmE9Aj$tMeq+$Cyvm=Mi7?2Z{klaD-hEacuz z4i5N|L|S8-4WO@b37d?Wly9JMn8ulT;FbyZy-HqOL6pKa>lNfhnd6PWvk7oNexnkj zM*#zVPVO#|$dJ}xfy60^xG17S5F0m)l4Hd51sBp7&22R%@^xjaM!g`p5cMAMIB zKKd`t_K$DKTmA0NhkJiCn!oCO;qCi-Hf07E4i-PUaHC#XwDj96;}r*9Uv>VQ-4%y^ zy88Tocb#p2a{2sy-MWq^S2XPFPLy^~l%C?%wdi9%Ucw`%mV}E!Ve4aI@FhsBqQVZm zTC|6mkUm4HVT=H#Rf4^MD()WpO)8RWh!GKn5wC9o9Y znu=Bn&N=GVxVr+fo`*26D3dOTq#(nv&bk7}9gs|EM2cZeIG* zQ*EI42Kqaqli0d1_U9`l_c!mW^KDQ*FD)cEhXx*kIWE`J>IvkAA+_u>K#f zZm`>9SH0)D@lovJ)6}}`!mYaRAR6QbKP*e)rMHcdC#0tOI$0aS%p7j?7)fD>i7|(j zzbzjIr7_I7mzjfVE-|5X>{2&vt;-pxOb$|5#@DW|sojEvB2R5?dRlc-sGU_vYE5c- zz1EZb_^6eGn~lO&>gto|8-9O&$TDGk_Ijv_) zL3Yv3C0V)4Pm$?lOVE84IJ*9K3Kg|7li4gQD?}6!^O2&9#OH>KFcKNzQ0*dQQ&T z>Vht9RBgt}f~6N4n;#r3$jz%!Mb>1bwCKirpWu`Fo-yowtv9M^|HAO1)kP(nYw|bO z@LcD_aNFtDm8rcsX^V2R423r;WD`p+Q)D?!XyaQMu4X|kFuk3H4I=fp8r4>AAPhn^ z@lDYi6#JmblQcUsbfWk#&j?QsKk=2fK^Wg+{E!P-!Dljp?A0519A*dA==h^@U#xdF zo@?t8mcdIke%1zSDWMz1#A7va4%`{1+f0KJODeFbVu3)^9E4X%ttFEot^#!Pi?aP) z*lhK39_|to8|M*s`n~OLLoe^EtlanVklTt^Ho3~YDtnFd-O6_KrKR=lD09=V?Ju%T z@4pXY>cW^hz=`yiWKs-L5}1MgC5{Tmk*MWqB_(l0Y^`S(-jRuViwQa{ zqe#Ih(_1y<^_QQ{tc^l+EiR*3GoHP8dw%uqp5)l(EyVTZ(shk-2_4(3OSW{SjBDz& zS+!v<5jn9>b0v#H%F>mYu|A3QaSa=*!=h?dmFD&phU7<-EYOvWRD?&>EH6d?MO_l1 zOhqkwPO=8liyV1L7*@ztZ|TZKf#)E?iWCxILhDMXi44s_3xS|~7&EpI17rMnL}&?A z2WKo3KGQeF+jxZg3}<$yk@$T7X750IFI`MYen+xb+(51H8}6jBOE$hzsB1p|NOx?$ zCdek#RaG%hJG{`hR+*OU=N=kh=i#1FH&Ri2^`jN!9dJJ=4%uPCA$<_ZwDF)>F$mTH zigZK-oyO{LmO?IPqmbA$)WT-C;~A%d_|~n}6n7k_SYuj4vdF|76U$j!&3^NKrD zy;6I(Q$4jDE4&GN8g@PKU|-aY3hR#z=#P!Hm3Z|_XwA?_HKiG`LT!kc(y#}ugu@go z?@l2_Xj8-n`S=X{j>1VixmmEPJttV1)3&N0pVp8I&S_tnuPN90kc&=AO>S63t|rJ) zsB;QV$dO%(>pJ=N_AA@pIn%4r^qzSKFW)}d6?ZIS6)43fEQR|K%^xS1Jub2Qo(HhK$qlf$sbkN>5vq_ zNn)q}&Yy!_ECmPJPmh`oxC@jEkVy>oAYn6ZI}4dHb~|Y8?gWOnJE5C1(d0*kst8XP zL9PHFgM9GmHPW(L_%bFhPH97ySh;#RTG%6FI>a@;DAiB+w#(WJQ5z2nyF^|!^;>DV z4SC!nMjv+bVxY>AkTI!+Z+$)QLHt9boN;%AOhF~1Q&`SNVU_%lD~NcWzoWf{dHWWl@|lyDOH5^fc4z^FKQTq+rS!J7bIJs z&Gc71Rio6)^Q797A~1*>pza0s05vlxQHL4iNQ;Kuh9gm2W`<*fKf(WUY9XL^^2Ipv zK%65joM{>eR{QvIrljYrIgkWI(hlQvR?~gv7cNJh2|bm?5E^U=9Lr)n9BROfBdh$l zIJ)XH*a$@5ac5fpeWhJTI^&|}Z?2uc9bq&sBHS^lwJ5z_=jEPIo1ra>b4O!;-1w6% zIkhL>8Fe-Mcz0>;#!JH_BshOfNpjb=GS~W(%X9OVZcd-_r?TBG?Btu!w`g#ky)9)7 zu=zPtPxRarbtm0*n1I`~lqqYKeBF1h>0wn(4$c72j13)Gi?az9t=T)s!8+odLL z_YrA%^ONgx2K9^u-ng$fz%{ydUV@>+w?>(mr1A^(vQggm%iWAFPS=N?ZNJC*cp#@G zoeHoi8S7v~uA+@(5Jsszk zx2_?Bo?qOnfs3q ztTqQar)^n;mAMZ#-EutNkIsOD!V_A@lRaFN7?YU>`9Mu74d%fdSif(=Jt8?MWq!Ip zpAt3c7403j@I+t5hWTn~ig9V>P<}wk`r~Cgh-^*9sTY?Hzx_a)cJSf|+N%|Uq$klH zt6~xrOq<`8RC(alWlP>T+uU~H?ct?YPbY6l z7~Pp$etdoDx|bFd?OdD{;dSF0^is2+!i~ptMuO;!2P!Zh0S-(X)A$q4)avh?70Rq@ zp3t_gFYG%oKa5L`ob-(JP9FW$@zvLM6_ckY5DXPOHcSl0myVt+-$uCA=_j9GGV;!Y zZG}g_I7dGH_OEDvIU-3q)_x|mh7EDIvIDE%+c({FgYi58;5cs8aVGJ z<`2V^?Vvz$wqXvXc9VXZ0A81t3de+QD=oY@i|iuPsZo))}CQWA)%RSuhn7Y zL&YUS<#BHQ3DT6zQ!fq;|N4Q}to4&CNVxEumW@>*xhqaKV0G876>jdxA04QQ3aQ%I zLL!CtR!pwXN?&~F@#diyQOk+Y(eUrfUV~5VtGD&_b5E2?ZI$lUhG+_gz}1AF2MZJ9 zF$=C31Hsyh0TS$gN8L=F645Y#l|?lL4lDlG^3bNJ6JKmD*<4G#p5_aS>-To+P*5~0 ztv1@uC&D{0!ME!8qVRg&@`!`W&c7XYSbTC`T>Gy1#s!Ce-lt#rNFOQVgo)N|1^TVs z+?k{*t!GGeo>Rv|T@KI@)BnY{>#`T2E!>c44*$Tx($YVaH+Xrt!D*&RRq)fq$PN`- zYF@Lm$sEB^5EV=55>HaV&h*^kQZAQY_fF1@^wszTNIk3_yj?7We~)gu9xy6=ZQg%g^MVG*)p>7IPNGRe?74V^W!&($Cn)asOld$FDi=AwQ*^OnS`T)~^aZ zoDaDX^S^>o*#v%fsEqfqS0nD2W>0m7J!32;i|#$Ox~Rt}N)a`FfR1ZS_BnsM6w$xj zk|J6BO%*>f>96s3iOlcJDH*l{cAEVS8D0vAMG2Gq4rv(DqmWh z)0H3T5&&5m8>7~8=~SG)y-9^Bs&dh2{vFbE^V_+y#H0SmzombKwd)PrU5ODo z`YSzTGP@w9pM^om8SGdz5EiA#Ajb%`qM^V#ucEs{v?VB-K>cO%P4tpQ;k#e$(+!;M zCHXBn50YePNa*kKo8&sC3b~yRy9T)oym_ei!Qu2{5#@`r+BW4n1@g?B2N;9Bx)R8i z1~v>2`y0^~p5rWiJzaQ1xYUw%hE>2bMI~r^-&ePS)>}*j#le+ZaK(1uwPS-%kLKlV zes0;`tNpf=(`Nbe9Y<7!nvIvY-peO_W1teH=b%=`{DlXLzTt% zy|nCL-N{XD31tWA8HeQsIhzQ`;#3b)+0E0s=6(a#z4zZqCl;x;LW!VB85R&2(MAtFQbM#-rYo{6_Tc z`Sv^d#wP<{TfsP-X9r$b+j44Hj}CoZyecnmc@cV10^A1Gs4Y0JS2Wu%mG%4bzpu zR|uMV@CuhaDeR&6-(M+>Wv5_I{t0QNbRdvMfC>9i{UG=AlXA|^0Eb;19T`3h^oFSi z429_jJj=w@ykqV8-2jje(An(J4cxKP3|BTjIdFAj``M99+K-CSB48Ob11?E8A(NTb zR=g=9gi5BhqhkQiE3lPOv(dqY13`wJ5Ufx5hW|xO5=Sf_i2E66g-y|J=Ivw%uxT=Q zowRFeiO*#seUrO%*!T}_V$%52NiUh7IxW9EyiDV!)u zKAt?#mt%L@r~lD^KZN;-LPvFMrYKX1-erLvx;a{6(k1rxE;cB5WoLy|pjJFJht@lP;!qvH1!nKHZ`yXf6hFn47w*I0UVc+;hGQ|VQH|pW(DEm ze{L$>DEdyffl*>rBGIf;%_#(Ju4l-gMkVL9cSmh+tafojR)6|r*6^{~h4&Aqr!5}) z%iivDOH*@JKeVv&#JZBn%%vrDt1?j=j`SsIdrx$iZ0Ss{ zjc?!6L`!$a_1wP{0+6?=G-sin`2-ZnF2x+PJaU;t&Y?b*RNUE&@d^o~=9D9$#TQyQ z-Q=Y4^~;w@xfF9FmIS1lA_Gs!H%SxqvTU4Wjur-*s)EPS+?M>D%oHO$>j;)<3)F}Jrcu_?r|BM<|M zDa=rfbv!|8H;3{J?+7g}(fam6w`2>cWwK3loR96pBqj2s&`18rzj-r9(^ecM<4v@@wc&wM7DWk1P@xLdKSkT#oA4_v)NsC zpFyS=Vu@prV%S{q$FyE|>5gZ5KJIy%zIeK)XJ1ix)r#^@diE4YR4p&_7?=6io_cT7 zruR?RvY+prt{WS?wt3Tokl3R=K5VaJd*VF%+=u4y|J;q)i|p?#>Rw# zJJmNwPi9#QTJ{iI_VTo|mUwtr+sw?Acns3>Sf+Ht*6P*6<)KyOKGUou8#F+|uCb>c;>ov!WF>3xOSNMp3A1 zDp#NkINODy;f&G(7X@eGHLMjQ!gnIvzayv4R3 zER_oB$Lbin#>TSlsb(sNyax%7D%kL;yeI;XDhCpYrHzdz4pkZyr8ocz>QMlYt|n?C zFrSc~_0;R9o}Wg61D4kd*IITQ=znz^**p2}hV{vYx*Pu$-oHlTIh`v07bo^y>qgI< z#x~Y$DNQkUA)yKTr5pa}QMn`9R!efJ6r}{ky1NHSh#^SyubKR!T?+Lp>=40HvdkJJ zGVxTa&YC)45*ZxRtaIWT+|TxD8x|$yudY|w>`z;Kv?--2;nDd!+v5}a#yUCx3^{pN z`7b`6Uey(ALWn5+Qtr55I3vK`sciQj9&B#DLR?;2>T0h{6a0&}Jl%IIw&58Y@6&jq z?O5x{Mz>NixKZksySf#KBdX+MfTw^Q&?q}{@;Txi86F-+@SnY{gWTZf>ub-jUuNZr z8Bnkj7y=J7#e6bgmSN+I2gqG(iR0#-WZ`4(v%IDlFHNcD`EfGPuxFt*C})8_T{zuD zEYizWs`7Lc6A#HK>(kPp$L|gY<;JU0RnAk*(v;w$rKNEVxsh_?UyrJaG@2sS;Uq=z zP|Pn#2-%g2OlG<>fwi1ks~*+^ZSgJLO973UPf<2pc$2{-)5UJ zR_{*x;O0mTN4Z4eqOfstM)3)T{xVK8gpDEyI8N{%gbsz3VLZ}8GjtIs`Q6!>MA|&vWlMd@)2C$a~yELH~fW;KnVbRCoYzryn3!XE^cT z8^LajLBz`!cfL@&(Vyc|Q(fX?kZ5FYjS5ZJab|V)9d;uHF7B`!u`h4gjqrGs1qE#wF|KDSka-RrQTp8??2~WAVIs|oVHQ6`S-=uvD`Nte(reE@sX4cw<}F!mea z;eoj=FY!dg zaYY!WCg2+7K-n=%r(XI%MD?1g{Qlwy3yX-NzWnU|3a$6Jy?-27k6EFX)}fhkNfq(# zQwDEsWnXq~cR_^0BD|nGuWC(A#Dq&sX;QpC#M&}6D>k_-#)a68b5=ACQx-XIxRCsz z49T6i?&_&EuK61VDx>`3yp4O@RG!J*2+edq1xgIA6)F=nrK{^>X4n#bv0hwwt#PT=IY87EGAs0Zwl$CKAc`xL zEfo)V4l{N)dK@=F;>U0961yyRo6f*a;m63>r03BrYu<`l^XN9kR4D@R9oD>TJLX_2 zT734z&7I;j@aO5%Z?yol0StF4!)9yVM=BLDTh?Dw#t0Q?2=iQoOFXureFMpLp_}X^ z7E8w}qUuL$gk=*SW)%AS7iI|GP~276-E_9AWb*=q7N%NLn&abIGuis0?U&K^EPLKV zf@@A@=IT4_`C08!RpLq8Esv_-fOf}!XKt5&WP-bXN3)y_+qz#eWuCpZG}E11ECe6hd(SsL5?7Z<R4Ux#1cd& zbC>SQXEmyX7io12spJSO`EvA)YD1GHAIx){r`k?bh$w6*M&u}2f||u9IdG=)ZZ_a& z?9w~qliUTt;`lgOkvwQh+#D1WHz$148j-MhD{+%sa_ks+gRYJ7y?aS^z`RCdHy1F; zWvD1|a)P~LDWyf{n59XNWs@CGj~%MWsdvO|cqnF5FrOs7B>d+ka+GWteIItjz z*bD!xTvs2hZra32jZ<`=^B1%=(NR?iWAXD>6%?#&LU7Gr`cVd2r4ygEWPjp{CCSLvZ~aRRwFo>88*HpoVZ@(_04 zt;#NOF@8d>8$X$qry!qClmG5oc$a%ctPVi)7z}L9+5Ib0Qc6czC**9?3d?f_3f5M<<7yTVRp#f zI)omWPBB}Vr?~=p z+|(e)*++LKyDo(8OW1-iuFTjI4NeRHLyv8v`2vheU~ul5t$m4R3Fdz zPqv=#rPTrsdBtXhYAT~~Q^ZGoXL=J7de8JpgKmD5y&yXvWmyA#x%>I%+kQ*6{7PW6 zKV|1hoY+%q^wgU5)J(Yfzx5RQo-5cBU9}`DdvR6txN}g9cT8a<`Q=2-{^s=FvWPvd zp;~|c1QiZ%V_55+)|eQ4Pl-F&iAhieFnS_>)EuDSjlN955?u+(^2KpZB zlDpm5l-a4%_T+IJsQ%$44^977_84+-Y1}ea5}=bm;G$L4xISU$3*?f4_zMS+Wbva9jZcu#r)4fTzGTpw&tZg! z8XtH-gV3uAZL#`{*ahZR!CIiL5)^GSIG_Zkm8nU3GE>zJv;p^O@EUey9c_>N^y_EH z(yhNT7HlQMF9-@!HO?80a6eHS-AK{_EWA867Aka+lQ`y{h35S)#)xPnJOp}XcuErV zUY0J{^&YN{jt&l3C=Uxa#CEK#tPv3~#bh#X>0+vnO)_@J*y-wU{}AHfb&GQlAnZ5K z!NzBd?@n@!=gx7@-EAuP`$XB1OHk@pX3tKCTYZcHHe>FcCwv*!Uv!Wu3QFsMht6hb zR`2edDcZYT!U`_qzqe-Wc|ndD6HxsF(?rtlI&s`tCL-`D5aEz5HDjTYU@&ui$T z$<7xylapIs?3_&Ks}#DHFXyd{t8S7NzZ5Emgujs05ko=+2lUr)?v=W_SI!B0iDB`Y z_~j2uGZ3!FI!`^tmrs3Lz?U0aroQ5BF^2t+^Hb7Prps{pB0dG=3%V>MAUN1LoQ=RY z1ouCLh0PH@bMNWucK~Gt$i(_j5m&MQvj#9zD3oMPG+kUlTvl9cnuu!56TZxAjN-N# zUw@leUl%U-K1b}8eZnO9>-dFpFW1$*eD1=9p>-O~x*`79@#DrTT)uITJ7j#ekUJz; z8=vR$Ks2ED!zs#{3@aGxOU1Nen%*xkC@46JGpHgXy<_d{yuBgHGKjFN8n-~m#Ko8` zCUih-D~r<1j0?v97svIz>msd~GCEFj>rJck0#>K@j@9{stYNFue3_3rc8uFX1^hi~P_43dokG zgx$4M^#=#j5HfFBx4N!BF1E95%CN5c+>+Fk{sVPk`b2exM`2=LE-Bj55Rg!n>>HHb zk-2(s<;r6;$#-1aeXzM?V@KjJV(M9o^u}+*DEeShX1um2#%`@w!@A0bp~SGFg(>pPI!jV43DrB=dfH@VNuqO#@^iCC3q7E;#X-l%)0>lV2w)AX z&4~ZZkTD!2qMA@&r77_8eM4SHBo*5`b-M1|wd+=wG)1__7RF6Wmal6)+?$x#v85tH zpBO_&-J3^8t&GZ3d-|r-=vK#xqn4&bR1O!WEGP~i4l9fe(1m*l=YsRQvrAXviq<*9 z_KZ#siO7g>k+xmDXpLlOXWWlAlVj)(nWlHXIoX8w#|QMs$Jy5|A1J>OZGTNYn{ogBt5nt!w|?-ZSzZ6gS=kG7LQ*syg;4~W`X7j%li9_Z zXt{&L>eL`PZoyKf)+Fd^QiEhduq-IGR$4y0RuhUgp|;1Erg24X?utgu)LRKHYYM2_ zMeS@vI&kCbPk=N#Q_sfE$wKCgP(N>QV!>w?Er$wpMhMhh!J?tG&@*n?;`BfB$!W}t zBG%p^KK8=%yKfM$#y!G3vYZd^-Iz))dS~cvu7utHns6WVv3S4xI?RR>b}?=da>u0r zZdL{xnJM9)7Hy=hm@govb``rBj*wrh@XV`<^oVhHmfBl826`+0YdHII#;|aeq;dWY z{c#qKhk2P>xbGA~0Y*-^2J-+GQ}^_+v`DTs=|>$bHV2MVsdz8mpipQuau!m36KZ~~ zI?{vwTt`!EpxBxIyQjoe6yBVe;Iih35)-al6*FcsSLIq^J=t{Qbzy|;;w zws3$fA)fbyD@mEpxlS>U?Sd>xmqerYY$~@j)WpR_C0QD>b8;LlEWEwl+=2o{gL17} z<3UX#;IKG=DX|#KLeoQ_#h|RIMZqFi1QcAxb48LVtJrP63F8(~nwAerOq6M<=5rKT zueTgpIE0jfEUgI*D;jC9PzI}4^tZ&#Zy69iDDv?=5}7XiF{UuW3dO1rf@WNDq(56!|+FLgPZUI;Y^pi$dc=g$7+%fvT-Lv|MjEleM|i zc)esvaWK4I^0-h#o#CXRiv})b?DeiQXOi*Kc-?SuD2e*Q^bOQQ4lZ6&!llqpK?+vE zBYs`>Pd1O)l5RSW%@x*$+W7dWWNSlCZtl!HiVpJs&v~TysF^B!*Lj?w7@OwNA}qXU zd0V+MBzDC>OMFA~fbe@{_8p1H5Izr14y68eP%5h4h#vU7=!*NeBGgWgj-IzTI}0B9 z9*?M$AfK2ZC#Rqo+3*I;pEk)nkrleI!caDmOOGWFHwb_a^a0fS{^ASjscU*p_K={R zmm7~A({!Kc6+XhhHPli6;tT4$2j~}MlOXyL>>!4KC~z6BBmg}2NWE)<$`Ut#L)9yy z11&62-o?k>ME*h?0J?z+qbP%*D7pu_DiuIM>>!HwgpEuJ-*PVy;fwoiW+dplK@$1c zqDAWl{x3iYFXAM!2{xW&aXi+u$0NshC>a6>!2jRzPz0p{<9VJJK09l1FHnjsZ_%O+ zyZ=vc3MUyBwn$xpX9VJGLM*|}$(A?ZlnN$vS*Vs{H<5R_nsWT;iQ%SDCc?`wab9>p zVc^5n>|a(LmAmfozCCXZkx7!drZH!rNaY!u-+2D=j?-yNPrS6~#`Zrx+Oqt^qhMPX zZg`|)s(klIt=c%n0gOhRLDnJp&l!JwsD zop)D&Q{as2BG{J(|K?u0_*Le=kBz`7TeDR-oag+DpYyM|@0|Oux$m6&6ywUFp^gPZOQRFD zQCy_~uMI;{x`e3b#9!lO^sBdC8n2q)oe*vOvB6;eCin3yTkvFB1Nb)r9kU6Ca`Q}=k z%r(SS5u(LyB_ZzM!OB#)zXZG%2&BUJ;CkQ1ISpjDC{5{~1paZhQe+2C$#>KH$@zDLfo^hGcv zM!nMvrL_Q(k{}7uyGZz0!o`Mo;Y0zTfGaxXGn5Lk%!R2h(0iI6F7L{%Awk{3M<1JS z+WWyOuVkyRvxh9_O6iSz#xL)w*elDF;P)X*nR0}X0|-Bn2Q!gfbB)DgYKt2Eu7UW@ z@0)nS_>;>DiQqv#6HFy_a2D*uf$+9$#hhoz4eX+{JD$P4J@F&Z+GHz)2=cD*6Or78 zXFM!?#D9TRm0?%mJVCt{XQx@!eAx9{m_ODJXVlUbIa(-%k8>9}lB~+l@h4WlxG6{5 zeRKhr)u44Fs;aehAh^@AFjN0HSAOK(9h=_RU34h9?@(jc$^JyzbKy_C9uAQU_?eVT zM2NM!7xF^kdC{_7l=K1E0H6U{#Q6n29cl`oz5{L!rW5k`|E_y^2?;J+J3pqlE`$*M z(h@K;7EO>pogaGVm~Quu9+!h2O>6SIcNcPXY^d06QNnTgCfPW48|bY>!41fUvFofa z$-HeOk`r`y(LEW0y$l8+-t{-}U0}7{`L2hAqf%7dk%n^l_$!{pZ<#iVJDUFw`}9A> zPjjELPxFpA%fvPy!w8T_YfWe%MYPp=chobtwvpmKHER^CwT9-fFj$DeFEPN)PC+#| zt5h<;Dxpy|isIu&dxefD$55o1-?fXp@}96pXz(X16^qFJPbqXKjWrHPU8g?2e>+X_ zfZqd=qih?B&(XHQ;-qcQZW>WMF&A}C(@Z95%g%FJJ~T0L6AdqWTX;Y?;6rj1L!|a2 z7ERAHUgy;)p1Y0J&6NTvlE_ZY8Z~r?gS|cOPUG#s-?vrZGHwRl!zN^y5!(Ymm+6Az z+ALF+3nv$Hx$H^)LF2!K_x;}|Cqjhc9xhfkJ~l?NN(_|SNE2Efoq7_ZEyYZ~HfyxA z+eGjlZO(-4?$V~YGBBqQ@;JLYd3j@FjLI;(J}_k9G_*P-9}*NL$^iedCH-+CAN51q?y9}szL_CRawX{ljQ+2&MMh7m397wl6N4eB`4Im4H{ z%J|Jti19wJN&X5l6UN5Gda@#_i?xta9U>hw%@EC%n%x2bbrvYZip*|7JG%wxn6N=B zBq}Klj}qsE$T?IzQNzd|KwA_KhK8}Qv~)4ml%j!Rq?WOro@MGWszBYYW2BX|)D%DO zu382|VfCl(s%Yr=gg?oC%rp(UI+T~#UkMyO!a!MiJk_9dZ(*=J4( zt#F**%yw_H_%3eQ?eBty%@fYa9%35L5}Fq4ZE0(3fg0g52b&pXN7;R5O-JVBE%7~5 zAIUnLF03>Xnr+E6+`n#1U_xz1;m6V*7H`4LrgZm0H`rRqUOQc)2TJmRH(F9=Q1iWC%Z8xFS0rL#55=L4j1c7oUiAsIqAckd?-!B z%zbN`lb?(4@Z5r}*%`nx&BP-QyAhg!ay)1{ z{%sjp+?Cxz+g-D;_?z^yKl1E%!EvT zrXP)HLo*VZeCCcsKX(Rlo0%DR%l3sOEA_&_#Z2Gu%G%EK&ChijeP9N>W}s=lx026< zWVFCZ=1qSt{SUHvEWu|6dr9U?h_A2Q$HyudX`N~-Gq^;9HPC^gl|iSR-duXO%RMOU zIg`x8N@vX57e2qhaJ-E7-EeJNUcrWk+YFBxlBa&hE%MIjE6?f44_3|F)YP>lGQz%U zvoyJIFk^S?kEVi~ANlir-`@9U+-}kG#Mfg(y8>Izug)tReYpMGjz>p}XgO?k2z;Ku zBWm$F?0yTes-4t_5Fa0zx3{Gd=>;)jCAAsDf%QL!7NVWgeRi@?i^5bQ4wOc~A+#Wo z9p|{as;OsJJ~!NPYH>=AVP9$YfyPK^liz-cto0l4hEY$Ss#bE=!E!+9|9V@oi zo|&31+kMp#vE>*0i%}NLP<_lUv9C^}?LE36qHKG2N@dP`Z99#)j0x`|nn4*1v_>|# zI9A|FVSl>2S&FGtG`pKw+H~?oiD#)9v?k*1ry;4FdzOsp{YMVTz2HW`!>9>uVgHx??8Rm@je=PI3yVPW9-bg6!Wy* zTrDXx-U_BCfki|)$0l+<@M~`R(UcsPzKYt|1!PH()=#!AXD2NC(*;W34uo0*=|CvmpkqWwUUWuG@D*Tb6~+z zg41m*O=>JXJc$h8-1QA!QC{@+15}4Lz7DNxT*4igbM*oDt`QrTRzoTQ!!iY};hqk7 zE@(~SXk~9eqOqtv=oEf$i#sRCwwZd=X_f(CfUbrSB}5{ZVRl(+E=-7{XA>+-naeH9 z5_9#jI16r8=2^hIsAY)~PSC^5vc$XOcX=0{CHG^`0?n1qyYzGMUEcPy<{i(Hp|Uof z^_A&e{^GklabwiXyrVA2t=jos)~K3ojk|^n)>Ns?Vw%E}GnL1mRX3Y%Knm)!>_9nn z^SA(0ef+-fsi7~sW-gI0Jl9RWyO2IKUoY&Fvych}kXxLOG*vbvMB?LQX;7FwELx0H z^lt*)X(`e`XI%Iwa>A+2GB*e50QUzX%X%!0{-h^k=y-F{p5fdH-NNkh!Q`}& zx=qrQ<;Dk>k!ymk`_;YOXIQ6}paf$6>hk_A>5!aqNHp@3vDy>45=khhe?br5cCqAh zc9&ZP{;FcK@MQ)2>x+BXUq57j&BNa7W}k)KM1Rjavfpd*sT1r|u$1WUDIo^CrvvBj zAFwJO5~s^3d0_3p3Zt6ghCnd4%_MH@)<9Zs3N_g{9%%8i)wJA4H3_~VD7T?DME@y% z_)PhRqN1%ev=qg%*GD_JTz3SfZAV`gbJu}b?a_bKrL=fcC-pfsY+x8 zP)|&d!1Rcu`qTizd3inNuH;DW@S&>K9cAW9s157yZ^ykr+Y7|po~;X$DopnRWiLOD zbdVq4%+j|flBC{)O`UIacD&KE>lZt6x#9<~Dmk!31guH`s`BA13{$BP=dz2>u{5OE z+A;GFgJe`ib{3i|Ou*ovU?Rhxcm<>bj<7TI1|lr1s5fK$-#%Wl_rg%ik~n0+W(x0+ zsIF7}iJozVttp&b#s|7RAK#o|Kd`?x#7h&TE{OM{gMG?1gd>>)+e;co3%ONik`1-V z%{j_5+TP<`Neim8;v8&kh?P`$n#(F5$sSBxxVQ* zwQbDnNk=I9*)D+h=z3z5OzqN@L{ccJH&-sHI}xlx^kI*taWlnQpddPI0qYR z0;E+s*!IYx9pUBKo}NC^Bmd|%Od_gYe-;iP5*_}jGzqKc34el=V_7H1aC_$kI z3iZ$d-JWehO(yZEo~2NzYfv}4vPq1uy_D-R{+oPp#VIJxKe0B&pY194Ai_}v(zXwU z#qUz13Ds3=Z$73jPx4FZ+243eVHBT-e3c5&0ej|m9q209C z_ttZrs0wka6QA1>MWp0sxcgwugtJoPAC(>BNr)HriV}OJb3=aqvU$;W%@zTz`xB#o zY(=tPeDkKNwyUkAN{v5ChqL?gu}hxc}UrXnfaQse$Jlat(kCIeE#!LGs#dwV@a_jK;?;i|TsWpdvC z46mjT-_6G|+O76`19RjTl@B?^CL6sY1;AAo{ zz}z!9P83$8M++4Nv1_LJl*e$~p9C#X!0ZX9U^;(l%%8W%qv#h&>m1F`AF7JxIspy7 z%lrY;q$T;2xVf`N!W#C#IvApu5>T>88XIx4MyNf+mtDn#NunoU9^*NPRa(VLc<@EV zZsDvpop>DAw)oO!+=+W>@q#1CNr|h9iiRsAzyT~O>P#e@r}KmZR(JS0*OrGr*-GSF zKY6$%Dsoq#vT*%Ft-?2L4{s>Mr7ZL3Uv6l4w&~dQ1=MQkM8Ez&=H5FnuHxz&-nsYg zuC(e}_1=45tyW#DE?K=7OR~Cc*;cdVE?Kr@% z4FX9>0wmbltM@l^cO}`Bhv)n2!${h_J3Dh`=FFMXPd21b2A4lfO-iLqa%7O;>Y*-u zYf9}7}FIzJiWaGad1 zy{YerNtQ2`xbcBbdmvApJ!?9jW!SH;VG|&z zocpUOx|BhnR$F;dZx54h{Wb``#+Afy{1T&r1R4A?!f{8r1E1X=bipm0-UGZDti-uH zeq1_cl%)tSTa#CDUq!{e)k6>9GNSl`SR_aw6~Gri+(6JN$pW&nIL=iYAH@$l*hs3? zTk{W4&n=*gB>$tHu$id_N-fH|ja&8BtlQj*^QQ|}7Y8GIWl`O>!pAG`xLDtJc}G#! zrbmd~`R)rFvU9dR(zoUHEsqy&Ea@Ce_th^iI?dZ}^3`|crgRjAAwSjN`Q`B`Ywqq{ zdZ0a_E~R_2r1#WHZRgd|qJboDJ~L zFRc_N9Y~I|_#?5dqG&~QYV;wD6UX_IpK{j)1*k3^_m=lK2j{qb{3m=MsK+f82yQG4x9l^rXj&e|0^i zmeVg4AX~{tdY95OS>q;mLR>&r*_T?1EY}uJkS9XmM&+St< zq5AfuC3cidk`T7yd4davxKlje3G<|q>?CxpIKcH5mnr)aa5>AYFWbwlFirxkMzaVy z|E~i|o(U?@bcct1d7pm&_PFB0WAzU%yrTV9Vj~Wl?kUh**nuepVWnA^HWoYqCH~kH zF5f_AXP=YQOyXW75$0uW)GBZKwiV?qtY{B}S2^N3Vfv&fvwX%l#73 zj8ffrI^Lqgy9$l$GU$ zho>djxZ0wiyBtAL;DFgL{FQRWFyv)yKHW0RDFo5gRMAbHNLh|YR-2I~M*%JR_BL`B z7xCR~c$6Y8$QZ7uTAQ9eTv@p`V~1CAM1;=MOBadX#xR#I=DKaq^xFlb@lF=vMT!LY*|dTMpGSA7F(my)XY|v zSJS7}(w}qXF?d=XTOLc>jDE*weA&%|Il?e-b3k^Ie9T{kHP2G!sJA3?xJp={4iS9M zr2O)sS~V@It|cG8bK$==@9g+5e^u-!He^!VAg&=hZO}(6`gqsW2dIsO1tlMnQDlSK z)fv%gYG-BZI~V^uG4bDvC&^J_BW~rr#4R?2;zqt~fSZ+5YG!*`29I}{(w;#Bq$gF}F|L3;p~)6bW2Oz)TUe}1jDK}$JpU($`@Xo#cU|!4)067HyN0WL`dvFuyh0&GpCe!I z(?r`%I>k^O3M-7zPJJ@N-NRyBV*IL06ZkJ3?)&nTZ-3Z^rw*vQPOq!=TIbq*{1q&q zY%{lyJ1&0`xaN)u+AeU6u;Lu35St}gMJN^2sHJ+gIFfj0KBivxY*vT)rq*h++Y`@w z#QDXhddg+SeY~HzkJKJqnVPkGwJ4C^6xRi3_fyJWC+_6R2zHlZiFg=KHp7GcS#l9i zevcBp1_BIJt+`(amDlrhYUdMi5_h_>9;6uu_rBPQ_G$Jx7d>=JZYk1 zQQTrr^6;%1)&{u6p46jFDeD=y#hz4&d$|Jk1h~bXG>8vy`$!+)xl1OS^#FtobFXtt zW#xDR4#o7O5>I}JCuivsy8FhzkhNSdynS$M+cS^R4brX6b{^9HqMeV(@L?P8<8b!l zJH6Khj6AkgJ^AQB$bd`R!DlHhH5fl8Bc|T$CI3^?-N*JEbw?KOc|@i++wxS0^M9N2 z9tat_bccG=L&N^-oLlxkg)N`wgt`P0 zVtjyWK;0vL*f`PlgK({7&FUy_Z10a(bUwDOwl^kwRQzmoRJ<`dO8Fz?z>v3?ZddTO zdIY>GtZWf&VdG#c46AG?gv|Dp;+Qgj5*Zv2Bq_cU2YJhlH|4Q6-V_F(Fg^+Cv6z1Z zJk>9zr>UeUe>s3!}kJI|hW?c+n*KR841XCk)$SJjv9Cq!+Y$ z<1IQJjA!;cq#&qGmfNKH(jw%;C!T0+_VQ|OJuyQH_dirt_7L}ksJvkCh;(y|vOvWV z)SyV`w9~b_mXzF4cjF`Z40O8Vudd_d2M-eE&DV6vj+XohrA-nFkpKhF&V8yt8{GHE z)Py^^fxm#i3c6~-UreiJ!{U3qWf6KOZ)cUtQGw`a&cRU_R(pC{IMDT@Dk`dQ{~4_1 zEY%LBW^4`BYK;|=7$ajEUJ)LzcwYF+%>v=cn+2pyyL)re-W$ilheeSO2tD+;DE@7? zW^`u)|BDkR#EU0R7ew+!Zem1zdh)ASJRJ!9ppv2&Uaf=>?9&YFqQn|Pa!!Fj;`sA20%Jh$p zDF~P_Us7_qwN#l5E{nwhFTz)TqmxwLM3@!6Fx zAKd(WzwrfYD#3%&Ma}(Zz}pck8(xrQ;RFEvON7C5AW9Szk{ z;~bBgfpYwiC$E!#Tq~HoJ`~*;bGdA!D!j{hhQp5}3m9t}e<03YZ@02IlE3?vNp9mM z@x@Dy2JuA$@VgE8odNu&nf2ZDRu<0AKBzchOMGbPuXOaJ7;QL}GRFcbDJIO{7#;f~ zWEeb?%DXcPM{1)DMLVyqUV3tKeYCj3@bt=uwl_xQ?|ymm=_l_c!nJl57s-!PJrl;I zRG<~JHu*}syTSf*8x><{@h#|}q^SD{Mb7$uZNi#n@z2-EoBN;Z?tX6CxSvZqQ!w68 zxTBVOx(>axeg8`<_t1Rmf@~D}h^vqb{DBkshz*AJKPNP_m9Wwi8}vcR{pa2o z+jf0jvZaHIt&^{l$}uc=&sqJ3`+B*LoA!4mM%Jub62APsSI;k-8F}L8&5_~hA!^U$ z>SUv9{_3(Y>;@G2iu>fxfojki>hahOhsd~?2#)u346?M0j}aoG=@r04v)?4(29Pp6 zV(af#>*EcgZHq%G^=*MF8%#X-BTqN$X zUw17(U0;8CdDrq&_4TJ-?aFA;Xj(G5(pwS}TZlF8Q4AI-6k3Yd|*w)~o zkmJJ=C7=~5xN4)$Emj-JW+fvFyT+vK;12N3#<4+mPYtAYnv5|}%a;#F4p;T8UDqSp zZmQnMpCJ1X_lYu_oVz$o4jTW$xmStFv@Xmiktt%SWzGri*$hz$%6h@6A|ym`;%cAnT=VSVs;1*lbs`6NnNgY;E_GJW3(;lq;0rN z-izr1I?$q9elJ?2$>iK2)*@f(jdx?cA==8+TQk}Qv$h#B7pX1PzOj+1=3stgtlAo2 z|7m1U4~HHS9$gVKnWNShT6IU6bZeTtbP-J)Be1Y#7`CW~5A}cjUSk z=EYDh``lb4vQty93EQjGU6-R$9t(P8cd}Etu;r z*i%d3qWZ5Yni4(IA zy3bxZ$o-Ui`w$?z2fD}huWJ_hc4H3HEb_AAxjDfFuuJ)AT=XhSD=U>?VZq8NK#pS< zE=yC2(m8=di3H~4FJ#LVF=}nk175@8S8IsJm%@`bDtJ5NNB`mNPC~~e$l9UnK?N|} zB(c!+ETdYkrAbLXYOCS$+}udXLeE?+@#|I_J+?Z=oS_qD6D{3)TMkA*TMnP_q1sG= zB7xGBBAZt_``|$)*Pga!x@GB}?%Z%ItMI(eJf@jK-9thU^$Gg~BT)r$Lw8 znC>f|OhY1w=G|Sn5wvO7o~11(Sks1NU42fhw?g3^lT)9B@~pm`o#&dLoNBDwHMKJ| zB6R2RU3HD8ezM!M>QH}XR_E$Aj|lhH)m>Rx{f8<|?T)i{Q>J#6hx)U!x>mQkM|iZY z?##;UKLl)<`>j~Q4}Y!ilAR>Ao&DL9TIn|5bx`7Fw!~3YH-i8FKfLbJfIkG1hVq8-KQ$d)UI5!~IyiL>gB< zCyLf9NyBUn)Up`k4*Y5on!h#%2EZ`iFh(}Q@|@*F=S(Q$&Hdc?IQOP8mMh+kU(a9^ z!|WsC1AQ+N;?yVJe-MLk(51@w21b4C=sAPWmaP)1WGs@YBnl-X(m6vd6coM))Pe1R ze%GTP61WvsEqIeToWGhjBmira=-cIAg#z!V6xf-r^r!mwRjyvVD>>@cOd?`Q| zjJ!yfup5rDKp_a@4{)2{Ibq8Adkrcyn%au;YwT#7DB!;)$ZoR?UR-|-SJtnI8NP{rF<-x{4kGmZGSFLV4c#!eQJcWWE#AuH2K%y~OcJ7GB za*_?(Vk|W=rP_okc+qGkL64qc;3^~KlZMix%Y%j|Gb?Jgg=>q0NcxQUx~LK!9ywp* z=w-LdQ61ZybF)_d?u{@Z_25C+t1zy-72{Iteuyjrd?Ov^OoWrOG}UNVR|x>R z>DUAOEP`U5kkCn^lFPTO#H68QU%RKy-NHWFDK0PYl4#FI%wTacM>2c@SEP1T&tP#P zW*DRv7ANEa03Bwl^9{>&8{D)uZX9G#*GSoL5Cz@IDcS^kxCwN+Qxtpf=YNI$8`t#~ z=nbL+U@bke!o1W;MZqLvVX1GOz_%?vPH+LZJc8Ayxss{22WuaIob76afO&b@*q{cp z+kzRF5+sHJOf>=?21zgA#Y4pt;2PGQqQHW_$6RBSEEj)AE|tAlGvmHA7)0GrIKg#` z%8R#^90gDOKS?ofZnAeuXa$O}jSz#suJHlX$Y3MyR5&tOGG4Y^7O(eAOVD?>FSQyb z`NewWa7eV(u#Y|DODC17iZok)h+0&OM{7P%?;%OM33Wkz^)iS2c z+9FjS{RS%wOYd=-!k2o;pu}2Ir$<>@bj`ZLK2(u5_!p!WFYyZU;vz*0Ny){^>QW__ zxFc+7S;>a#$oS^5^8Pb5GvQ^)X-oVaB8pS`kC$uOCaN|+&|u)RnxoSy!+Ax=h3T@4 zl@(FN>+Z6I78|D)k z9O@p~xW1uqZFOYFndZ`3zd+oh&a$QAu=4NnM}gBcf`sA$%`HIl7{}sf)ghyQmMj+> zPlIeNqBl;-?w84Gzydl4`Ug@XgOs}(XN}xntI;AHQR|Oa{tozo(4kf1hd!gP&7aLb z$1^2Rikb4Li!GKen7O|}Clg2o7PA5bH?>mXgo+Ai!9K$aCs!vI)RhHgrT$@9eJV2J z3*ezBMpAhhtzRD^+7}d;Um{5ZHyp&*hF(y#iLbsiAXbTgB`&kS7e6IV^hbDOU|_%) z2Vui`)_X{(r7utr0c~y^7#bQ<-Z}75%c{!8HLb~U;Yr3H9VhG4@L%h)r*oER0I0JY z>d?@uBEsv36bpO-|1hQ<~UIZ+ECDFLMwq-d~X^X3lv>&?Nu zii*6!{PJ?_aEtLB<*zK(;=I$^qmj`H;Z=9=qW4XqM#O7eW@vJXHY_&7`;}L>Q6IDk{*BrA*?8`KO{Qn?_UiEy zqX%?x`ozRC5C7D1@u>$NG!_Yh>Xabht}Fr**TDNh6J>vu_wuq*!^&dH*w8}>2_zqB zFOlqkZY@)W!7SY%%KjA`?id%9nlzQMwyL~8HMA)4j`8u;#4aL7>k^k)no_jBFm+|I zwxvaTl-|ml@#|UM89L!Wy)z^fo{yDnlW}%n;vbXEfuKM`@l$vfQUWJwz?9&Lo;@~0 zG_&FzXATI53e$vptt9%Ni;v z8P@BEmy`@=O}WMR`^CDs$NKq4yOE#o8=fjIo*I_^h+kgJtqTvY%e|Oe9}!VcXV5bD z6(1;^f!`ivaVH<25E8Gl4jEe{i*H!$MlYqmh6F()TNqqy32|PS%n^9Qwr_uRfKOs} zU`l0pNO^i_fi8fHQ{-%H>OYWEb!ND2cSA(n`nT_~xihWrV9l%4<0XGMPd{7`m{A(u zow})N&E*w?j}H{@c(^NX$H!NeV+ohfeTE7kXTU!Mzz;MJT$@dpt82Ectvn@u%olD7 zX0?H|#!U2)oVuClV_q$j@moFbk0Wip^0v?Un553_CEe%S65Do^m+xrT&O}$~bkw;k zSyvS`9pALMsCZLTT-{WA`-%FQ(8Ac*{NRxM*tmial2J8U8(BKFx@e?6CZ>KQGp!*$ zz9B80zTqm7gf}Xxsy}D>;gXWW{qVAktk5M@MnzR(4@$rxR^I##|M^LLX9%m3AsmCw3EEZ{Util$D;{BASqaQ}6kj#@ zA!uNC0-IoPZ^P#x%#m=ly*85vrUrd^sM#8{MUt?J*GU3F&d(ml=5 z@f+R}j-AOIoT|Tn$xvx%)|&j>{+yJyl%CWLRcj2(2e0%Mjo#Z@yX%w7y?}2E;48qK z0x4ekTUv7N4pwq*bbhk{VW`?4E{O{#kfIayD5p1_3CT&=!4ys})_Zx?C9gPMU4C{` z%b6aF2duiwac#vlXXWH@KEd3Qd&J+_`!9QR)9RU(OOCE?YRv2}%ynTEe6C1fxVvJj zwYtiv@Dfey;p&LmEmfM{T20i-xSG}JRofb)!)vxyYpbH8YtuDLVqLK})mW1f%)ti{ z5>`%Qybshw*ce*XhsqRScFh#h3^yf_aH1xBiP4+%X61V}loT|EUuwL6Q{QxzUrJfD z2;0R3Ia9ErHmq`$t~00if$rK9UApDny~*Ool+J)$a@E3N;JE6tVw9s84ivy$EY}8e z)dumOL1#4m4nFx zJk*4OzL=UeiCSZN6-ti0vN7n_BkRuktpA+fb>^`z)<61U{D!v!i3`8sKeK(pf!R~y zd-#19-%Zcm>@M+d{PF()D*`d27fdT=cU8$_jo^PmhXh(+GExFX&Qg3v+`jX7#wEMN z?ReJ5IyoW!2H!-MDPY!CymFS=UA1;l$VQ=m%mPb@9w^U9S-udKQqM$*xYuV^8CDI< zEPqVfk)6|#2zWl9yxiP;d6KuD{k(oas~x~iDrpu5(J$4#I9#JnYBHo1Mc2$cK~Wv# zPRm8ikS}L{A{?MFLHkE!O8`#;Fg*p3a#me?>PwG|a3cwsx(3T z5%=f3=IF4dq9b8n;nan|9V36i5W=p!GzP_?NI|G}b$o zo=6$bM@FhtoS*X;PNYQIrIaQ;a%C_$dCINKJ54WWL@D1wWh+F0JwiOzBO~kfjJ0=n zw%@%@pSA96d*`{enU4kLwr8d;%L@+9Z%@r!mK!kj&;HN2?3~Fr?<_03^UX=TI9676 z?9CVRx~7pWcExm8Uf0Q$Nl7bVJRmZ-eDcSzN^bD^p&>ffcB7~sKY#Z?gfZWCR4|eJ z8xRWSDt<=ni<%=Mnv4EmAjdX8*re$=NUojKwxp+YX3Sa(2bNt}RlBn-p6)~^Fz6>H zT4{eRQ~_#9iKXdSe2=;FKgk$2Px|gK-)F+oe4odBk(b~aZy_g2 zGd@r>p0{W5&(DZ~1_SvmJqP^iS*+0PF@81n6YC{h#rGAUS|~rKx8!V9a%&_oq+|Hb2MHglBWePZd!m647VG~Le1)WWiubH1&q{~h__p}hr#~g9Z?5H{CXJN;OPu?R z`vASGWj0srt(BDS;+>R`tkm8=K?ppP4xk|CXuROWr&>NGr6F)m# zvh3ojjLwv#6;sRVJ5H=f(z^T|3EdeM@osDd=MZa)?1+Aju14nb13%{v;Yu zjV75>8NW2`)ZFwmM?j>}hkzmo9C0|yQe<^PS2%h!r;koX&K(%*mnzmjww+87x>z^JMc5{4> z@cx0byRASh_~?dBCH+&ShUlX3faEasH2LMGO`FBPR!(gQDzM0H>y0EXEAAOg>v(is zU2k+y(MoU|lv8ps?WZ-<=)x|eV6Ik9DoY2-C}laOP}kYTo;bl0N1z0IgB{>rH%@V@ zj8jDQ&nLyVS6=+L$4c>S^5$cl$L7s1Y}|P0>l~CsEv!uA+Fn&Ec!_gmvKc+>Cal>l z@)E{KxMJo~q`DHQc5PujDwE5h4najjfGROZl$GtE2Euv1h1VFzN&O<;1r(@n_BidD zUrB;)QtUI+dgEucB0hnxw5?q?^OMP7>w^G8jfx?9USllSSPwx9KFQAVllXQy2dLE!@rnvT>aok=1gEgUx8!K zWcFLQn8cT_iIXKqezBV*i!XPdUZv}JY9~pSM(1U4R^dMo&MX6?avaF0_Vn2q5g z){fqm($S?>FCL&tiW=OU%#q2Y!Qm5(0tqx^Cv^1b*IsB!Ls5qGnnbsVy6lXVoeOx& zd7X6jcWl1AyYFaI=(L-*F{^Pv>*!DUMe}XV1HW*(pcAq5b{Y$_yq$u4XW1kG2SH<< zSjUALRLdTnXg@uemOgZ@d-TCJmBAu*X{o*gIjhs!va8!-xnoG*_NSpsy=8}99qk=` z^>A6wm65XkH0|=Et;-va^ra-Pp?562Y~^2Il^kH9jD~D!7Zx7w73EE$M}56ih{t7z zpPpM2Zz6>fqa3oJ3uanetQ2epw9+EeA3*@8^ufa5Ah<*o^%chp0YRDoXBE%yAGz3& zuxwAGIAZv9PfJ)`p7_;}7z$SL&!exL=uWsmNI>4|6J0$^?^#{7t1}6_q}61dt~K=} zxoV~=3Ia$an}$ED1McbJ;bY}Hio|xz^N^AP3a4~lzZpF014xglaA+Q$ng21tv)uU4 z00Z~#*B~e}^ImktV9gfRoAAmLenD1lKq~bjtTHbZU5CX;g+a~e6fdEZrk$bFOr!~q zP^p&DKM9YTuIv*}lb+_GM4*r$n-EX&II@6%@>h1S>RQ`@J}Z^BDqKf&qreEUQwW6; z#tJq~l+svk?F?ySWH!byDY}rqI++=5Go_(C`gYUmqGu{LS=p+vzGgaOo)r$Rq`hZW z9e+r1bl=rD%$%+G6;bBZhqd(n+CcU-?p>D9c;U41AKbeqQ(JX)la#Yh>fBYe`ktl4 zmsZuK)wmxPD2<2I0f`oQyF9$TEnQVAFDFYC%3w1Agwc1*ONy~#vFy}(1lOC}>TyRs zW+Mb76;wvl3&AMJ?Imcq^)q6s_!q&-U~ItkA}-nc_L-py@9B{Gtxq2yS8&CDG5Z72 ziPVaZ;26*hk8+9gFjwT(>fN1OT^+2gkjT@)L1AlahqZQAp***piTnaAhH(@=>7T^+ z`k&5 z26<9lLP1v|9C$VBxTtlJ6-mf6f%@Df8)~D2%Qn^I4^^R9OHF@P!+1@YU)he1oXVi6 zniNe*Je=_)?%?HlJO-}Gc%-UQAp^0Tu`NJi#wWzZZ$PO!Dr(Z7>s-fH<2mxjnHl3M zgP}!;Z@Kw~v}Rz@Oue3Fz0$qIUCH(gJd7m|Zef9kp?kDwha{;HrK~wI`)6KvlO&~h zWhHs>>$^e60IlR7FhTAP`OQjguR>rYZ!td@- z=%VF?j4t}Ct-!=eT#uOy@_ayE-xL@UPL=@A{ZWiZtC`@=Ag-g%$TwiCq<03L2fMn! z$x<;7&fSvkOb5lE67@{}_^SArXV%IV=VS|Bm1-RtA7C@}m{rqO#?jzg+; zr6iS3S}1Wmvxzftbkp=~&CB$R)NsrxVBk%|zDgk&@4}Nq;`+?8mA(cZp}DYR;GiPO`$ZQhy0Dg>|Cu5CMlLiqUZ4mlmMoCywu`Gkp{XwuR#AWk26>SK zs4o*S^1JX?(l^n&!i93mKuMJ~qBH=+yyC%R-o1@6;B42^@zzrYptmKg9t;4xYgb(a z^)p}g6z|JG>Gp%tnRq4KMP3%6R%)*WGKUik_K|?arT34-a6%*wT*PKF%NCSDwd7&r zd#c!FRoQK6DAUoNUAi>J(qPs4;Ar>VL+NP)r`vZt)@DU+f>|nClbq6bq;Yxc(dF8- z{<4uPJ!OX(?{uiF_Y#<4;MLq`@*D=4RC^iTY(eg0v9?x_2o*|+3`k6+nXRPf;(Mt= zi^MY(2H}SpYtNcAq2HzyL|r=aCB+EiufLCYi1lm$-P*$NCXk+lK$#%8d%BFeGyQ^z zW5S9;xhMChN^klygM!q)@9_qd#AfG zq$Zc}sF(L7SI~>afY!l+xHfGruG-cRLvPyEjmfpq*i-myGwYzl$AJFRq|x|-(k$qM zw3(PqdP*p5p*TG;!|fKi-x@!Zjy;%L3(Ds!kO}-@xt`5V%7IP!!!*4YXNv$gTZN~a zo3o>%y`8nCrCOnISJ}YNe*WraH#emP3nvxpz(VXW^4D*0x&H3EjaR&u7L5%KUYa#V#I8t2GI(v6Gci#^hO>V#8f%bZUJ=!sDjN57Y8-=8!$MO-)Y;?D z?LC`3aQ^M>AtTqvbM<3SY)rlL9}l%u-~H!1eRsWau=s3T*RdY|wU4Y#$s4~mlu#KvMKxWQ62D1PX=SW{8w9=xfGE+U);_`@Ls^zXBa*GIwv7%BhRzdb(J~kE$tk^ zu)tVAeHp0oATE9_$kn{w00Wyuya{O>C<~Z$Cvhv^AlDI@dhRpfG2AJM6ieOQyuBS9 z0<6ZOA>)}GOF#xpIg%FiDE^FlXLMO|+b~7lLky>0LcGu5<*}Tc4d>ei?i>9Bp-!5^)k*zm%kvL$<8*s@F8wZA^UH`%jy zsw$~_fBi(&9bHNBE=TRcsdc*xH}fw6E7Or7GpM_jRnRRSFjTl$Fn;0uN)A&Cmo&=> z%CCN8vp#42xn%jWMI|b4k$*y9ARXYI7Vm8TK#cpx z@Hfdjacy}pX{{Gi){%Jexs2tb+0?Nrplq@urzSMEHDBKphcjr_6+6QRo$jcuRd8Rl zcVBcgtH+3N0G5o`R8w;CTAB2TQboxSZ4Adl*JG+E>5RIJYHA`}tTis`&s7rS&{XEE zDK1%~2YY5DityZKtlTkXAzfrDJzaHr2pS57wPN5@#q93N(*tsAg4WsXiVw$A` zv=Gxw4bhalkmHBzjW3P#jA_@lpQMqN)9p!16P+V#64Dw|y}VN!FGv%)!_Icf&R)Om z=`Bxhd3HR{-UJ1b5CLUWX2xZV*_iqR}WaWo=Y z<>~0i(KH^c`WscS<1YID9I4nQh9wtGHc63+%{v!GD#m2`itm~1zN7^H*E2PpC+h1@ zbk=mxKUZp!n>3oH+AADaam=wxv=Ie&A z7F-Tor}2*pk~FgA3`v_JQ9F7$`JcpD^6~5^=mhk&1@o@OOMm43^0l-Scy}5M%4Uq| zGUq+zH#+ZOZeY~^xFM395dYv{mmXBqo1`14*AEx+N9DR0U0ixfWCZE&BMB7`WiL1`YEce35O&Ga}_k|8veNFA<#mlTsYmJC|daEMC8Z=1~H8(pKQyZj7 zUv6^Yq34VILTy>KO6#5A>lf#t(*$V!NC+3-m|oNtn=x2kxjrjy*+JfSB4vH^y5!Q3 z5Peu?iGQM3Y-Cer!Nw(JTMEk#wCh&K=Q2sk$xSHpaLtuMn%llc@g4_)S?3Cr>C z&k%p{0Poyv%;%16$GJmfDOU>2LG2TGsbo+&**YkVcXCRM@`9%nTT55Ul9;`YOzz0H z`=lZ=NAgO#^>fn#aHTmzMTNsT*>KVs%0A{1mnH(7J=@}mwkl^W=Kz3x(N}rj9of=JNm2b31Qk+kW z2bg67D)$vvfVsqAPaHixRe>a0ngNWi(2g)7l|bCwYs8?`1HZDilOxAmILip8xvPoAJr8FMdXKv=|ch%J)&b8l5;nd zmu)L6JKUpLd43=TP#r~1otdvkY;rTk4^0u9#{@kWfe0(gkx~u0rP{^@evG_3O$i5r z=k`;R7EY&8Dil(Tzi@RM^2(2+@+Vz?8z$yGzpeNK!eZO3-~i#`u1if$M~V z&eQm(d2N;Gjw0fJVX>k?;u3y0Vnu0O*;2TfYxEwi%M`=GA#QGV`t0nOni@Mh`4XMo zu)n#`FdQ8uvmDh9r_cze#ks+lzU~`xgQ;Cj`#5idqC5%^kZ!8kXNqk&qiXnoxcY}S zwO(A^f3Zc|v8#H`eXWML`qY%V*tq(XPcL(Mw{fF z=;xVKo07MpFxaOw|5E0Ptk_)cFcGgQxwqg3(9&|x3YX#?UCA9k*yxhDEIoZ$qDyjX zN=mEvXo7u4vTv|m){dT(jXjxBQS#!8iN8)o;X!B9Htg!!lsU?SRqM$U47iJt%W&Z4#+!osD(gmzWb=c#GEh3j{AoE$J`F_8b|z_`x9b&YsLROPJVpH z6U&P3Xt%0z+JASB%H8=H4`<{&=0?t>4Of@1%c8j`mOZ|^^=OZWr+NT+j(3JtsfXYuu3^;spi`c^(ZVXIja4J@|zW;FlBzF(3<>z7YcBZwuRzbCqroQ ztyojViN&S2Fbe#e_`?c19v#ICd@b#tCYY5COZs(IWZdkfL7*l;wgRdqNH=i55>L&^ z)X#hxBYx0A?o`NbKy4$Y8lO5v9=iD=$6YWsndU*GM5Pft^tK8srG>Q|3VaSDV9^n7 zXUc{ksUakl0G+{MFYRcN*6K zbHMlU2SJIb#U6fHo*s4_v9)7Psn`JK^4ej_FD+SJB(HP?=qMe11>4eyCx8m8MXZ^>D9tS9kg*^$@A^!NSu4oM3}Zwa$yITYT1?#}Q5gKQ30 zHn_6Vdz;dlc^}NLyMQHepZ%|vWU}dhu_8;eUdd)1FALMFy*$I+VV?3t)sPTRe!>6J zH6@nj$pJ}ZD}1YWDh>{{OhJvy`_tes$(|gj^EUEq8`D;=|RAg<&jDd92?rPWM zY;8;xUugM#dR0VFdDc$}u@9?Rla$c5lT+^xElEl*3!-kDA>|vZ3rC8T#%HFZs#DS$ z9n~tC4fXBY`kRDb zy5ai^$z>$oHZ)Y@O8#{uYi(uax~#(*eWvEf?n5Zsn9-J$)RqyGpP%#6OES)wCOk7| zuQd4yh;v+xCL~ys^Wle-o^B96MbmI#W=Ein0jJ`dTB?2>R{^r{?D6_@7Z(xhWOUVj>qJ`6u-LrZlZid z6bT2IRtbOPhZR3ZUml?GHV%#!dJoH6`@?#8Af*phL+Vo=2!@wkz^q6CoN+k*<1_c( zd)G(g(kc=d6Y;AjpCrmrc&xj-xO>~Qx<;l2XQ!b`2^|@;_ytDx zfnO6M5R~?A)_Nzk+RNHnF^aSVBNQD3i*f#6bvG~l^>iH z8m@^7aF3?10umGb+@t01et!1s=d&(hMbSY)v0m!1;@H5zXi5_)wX#BPuz6iP90_o9 zAa#LBvu4r&0|H8%=!3ztg$Zxne)&y! z3v{{_Z|`Y1wEK3v#cB9GHwcGhJ6SO3i-V_^mqW0lql1GbI=8e$7Q!qlM^ns2CItFN z5?ahWyy=WcyBEVrB_=4PA%ETr{nwWpHFq^6;%1)&}t&>`6V^l+vDAc2N4QD((ofgVHC^*Km}!j6uV_ z8kwoWVTn_DxH#~`Au>5F)bqMj!Q4duse0Q{k{cKM0P~c}@|PdC9(v_y^SPZJS`@%q zd+?1-)=yX$ZdqC}+7ug*+0d8XK9WV=*!w@*azRFqtThyf%8YqM>U+>*ZwCLKbKg;lQokKfUHac_^V z;^1>b(=QD;JZ_Vb6PVya@=s&I7^l<*4ui%-J6`v)vqvHvXw{KF1JV3&4E5JBcNTUp zQ-#KSg(Hgi2ypp3N9;RKuGHyP9BCHcCE;7%KGWE6?tjF$9zRol^wllV+h04d~*^?-6f4ffTWn51}K|mAQbGaYyW+{dIpQemGibD$<6d1rd!hyvzuJJ@Mgb?if?z zG$$WC$>f9!iOVL=FKxUVo>561JMV5>dVaD!@mfGu{i^iBu?}5OPUDJ{(rs-T?(b3K zzq>r1pFe*2cjHmx?_Z%Wue|?oO!p&uI}@v>el{A@^XT3#y!ts#{n(tq;NropXz8v6 zyYaM?K|HEGfk?6<5;V;Lq$bpVrgqH#4NyLW=tsqu$>-k_-gDw_HWGjCrHBQn@$$;{ z{QT`#e)nKh&m;RN)NhPM^*k!Q0-l}1l8)oXR#5vhFTi8k6y3&dFNs#s5V!Fe@m2CV zyN~bNci*e{<_^%ieZn~z&1|oNsor^v_w$<%#G`t4<_};Z@{;ciJvWle3}o1SMkjJ0 zE6FCbEG45g(a`nCKv-PLW2$(mZ2vH6I(VH#I-gzMv34+ ziOgU80bdKaeW`amh`$f-VrTY6lv1iO9s{W74AZuxMxXcVkmNp+Pr{7<>?_UM*%!xkk)zWi;%d8*XU8XA-B+kd+!q$N>|!4Rl7WRq;x+z1 z7@umZz?&*)P$pDXbe};nAt0NkZw}1-&ukS}amOKKl1(?9nC=(+#Ge~e`7dvTBR4&f ztrXAk8-@Mwm_=XEYjPfHDcDq+3bw%+TO&tQQ?(gsH?d28h>@1@fOsodCFs>JNvEY8eUrcU3yPtHqsK4!M{^UT$aC!M~<^fG+ zWdcs;B2sx9|AbjB6HgL5;5^OYOhBz@4jOtH+s&LZ&T$0X zK5P#1jlvn`!5NQpoFa?YyCtWj#E-f}N4v(Uw26r!o~V=)GUnhZ`J3X3q{c_ z`6wYKED8>RC{Ep*ZxJ4-w&WJg$(m5Ny7nq(bIg)+Ra?D#SmF4pa4DAS?qy-C$GIxw z`{4$z1L_qB*I*NnSztb33k83UTUg9TbXi!;TA3Xa=k+f{c8B-?e^oe-+!apOWzN37 zTB~p^3@J>X1JaaFeLz_9R2q$H(iv!V?D97`GMLO#AYSY|kq1l1S~Y%I%_-3p83DfO zbxGN+V8Yw)>1w@mc~Zve1C_0(hcn|_Mo-r3#Wo4WQA6vv6@Y4Nf)|d0>kXzH z#|E6cUBZ66Utvq%Yk>8z|Kk1fPw4xNpmE!Ub9mqLC4IjcpYLa%uMDH_v!Rc@yqgx`zm)V)6}16 zk7?!pX|&`1$sPJ(`>Im0auo@64J{j+{lm1{FQq#>yE1rhc;$w&jrTXXfyQhA{2u{> zzgJ|nIdj}XoFxB|e&l>d`#l@7v)7+*@3?2Z-VmJMk&)hB5FAp_k)F|!7sORM9esbQ zv~=qIqvjWvVpg78rPHlCw-PVb=yYq&ftnNoJCKDQG*V4-@54)Om}j|lB{{=HCu_uj zOXRo4`{Xk#Zagk`1D)h$JAnrmfyDykrC4ZnZT(%8!;x0l0OXUR84;09h-o@C4v7Ad zZZEhJX)`HH!_7|$>F}7>)=q=lN!~xPb8lVaWOJgWWn$B0BfS9(J{e0hlB!ZeENxOc zi!+v{`#@jx)>~Yt^ZHk&stb2LyP;(xD%DjSef5ZQ?V;7_aaGH8|18*Eow@oT&@Yop7Jfb8qL$)7|m$J*QXp zpI?dx@%8Bi&56!VnxzxEWf|=kdg_n=cumBbA0Mw@ZWzp6ot->7GC5mX!1;ctVctDN=$+xIK0V+~PQp(J|Za8V&lCpenRpSI*F>Uii zW98oEDF)xn){G^s=8}J{S-x+{V{XVe2j{J?9jz$5U#FoUB+#QLXd+M5YwdyP_ zlUjE*Htg+4H27z=Woqe}aY$ZPoYAWHE{Jk#0Ec0fL@@3H5vxt*N-13aPX8z)<^%}GmlHr4I# z(HZ>oz|@X32UTc#byCK%EPt_GuKM|n5Pk-Gd*>oty_4c9l2cYql>Ae-q9#7G{|G(Z zUD(?Jz!^bLx7yKB=8m%zBxAMdC9?l@PZ_O0BlDCukeCCQQ=qzzTKT}ntlZ(lrM-ux z($K+;W$`s>{vpMy3(D38B?caFsyOoE`l#`j_ZAiJywbPngh%oAYE9?i)~KojtJ0H# zwuP2phdXe3`T>!nEDY90oSxVqtKk%PCDQtR!|A#8;{QG?`QB99l^toP(zH?QbyYoa z#vdds+eHtLbpD&FCzojq9=Zk`9`pHcO!mOx;ZFa0I5KiyK3}J2--DNOD%m$@T$b z?kbIh2=F?ixzAZuIchwcPliQpq~HPora7?_Q#Z>g*GQe`!A63shg}2zlZQ$+)m@NHYDr|l*6Qj_xjx!JaTdDMppxY3ZS~RTvNJ60tn`=cqbpZs z<}I&__@PfxP+~z@RB&E?IARd%Q`>v9%h%@=ZzxD;F7M}Z`WFR zsS2yH>P|R}=16&3c?ltpmei2B$c#z(cBbB&eq%(hgDcG#9*PpYbcsDr_d~`0?YM^VAgi@c8k;n}2}IvJMZJwvb{Q z)jmp|yY5sTx3jk=qjKEVu-5|Bq^QfaxEn(kCDO-BlVit(A^K@4Tf-AiAXh`vgPW!JuRjvu$Rv$I0P ztH~`FTkpX%(x%<_ryMR`&nF5n&PLptE8rrm5LjzeZhjtpTgs>prJbw2-LNIE7_~tD z4vrRwgb+wYL8j}$ZA3L*8sflzO<0-FB0=VBou{c#>zrv>=95a?y#L@LA%>n`Q_VR@ z0S+>H#;>!T1gU#k^=J)w#uNM%8mrD$ot1 zpi-RV+WBzJzIA2!>RvF zeK=iaG81lRUZ($lgU23=w29eU=?b~)ZG604R3OB%VFymi-x`^~lGS1M>QI&j0PBG_ z%>NXtf)ydPhFwKO+qJir)(%=LQqG@k7Z3J6pgHJhQ(nvTbUWF^zkvZh35K z?*#X2wjR(z^PgdVBwU1cnO7nBAJyNajfrKsdoY|o9fz*|&^1mwTgLs{_@T6}XU~d0 ztS4^nQ_fGGjh>vL|3t)u3YLF2cNho-LCV7$3)#bzjvPIy!DX^griB_aw10bARK_!6 zQBfJvjbH%eoxQD!41o^^#kfdd*jlAd5rVr6`Q715^a0U9(&X)-$?Pyonzy$aAwyCt zTVyBu)>da__erfB(AVl)`wE;N@q+9gl14}LLSL(HX{9jEx9XEUguZO93w$6t+en)w zF2H~1e7heIj^wa*?r2wdTf1ZCc3d`zCIPf=q`-S3AJXGa)iuF!@oaBzHA2#)R&;&m*W~tA zXJtcDD;lJ>;noo?=11(4jj*}Og3E+>y0R|!t-NN{czf% zRwFWBsg^sF@IWaZ#6=eNv&M0zN6Jy*_71E9evI3CF_fw7HPyjRQ{uOw9BtVwIAR8g+B#C0SB`%hB^E`*Cc0eIRE9ARin7tpj5mqC^j*$J|)@p=6^F>>w zeS0f~>})k_lZiGbZs|$>scAfg>_VA9`zc17XnZy*u{_sDZ$9MRqb!gWoPtgAOs5?-R<=7Fr=j4FnT4 zuv|n9n9Rl2tQf5nvb<3`PZEQ@oL{k9+bD5*ZP<#DsBdqD6@!)pJ;kEU{ED%jwu(DE}|9HAyPUpHYd`)C>=O!UfDf3yAkuP6tWRp)`n66bDO!p z;`?9Dw^5@0Sf11qr2-F_dYXF#J?R+Tl*a3uD?%#@7o`GM=U0CxDCbhP-#`Ye)rCB^ z-w|l^pcyKvpSZx*vqplQ=HRDT5d%swzoNId8X<5vrmdpBy%kopjJ1hHoB0)GJu#T* zcz~&h!IX+N^EfEAp{p*n>8p}(FdL2LSDl`IzKKEJ#Cpm@rba;I0}^r0JiA-lP)x9u z;P(3VR)8ChzUavpZ63O%Cx!{qXnjaAOz}M)jjqqHcp&)NXa-X&Tg?&KZ=~^1v3vn4 z){6B-TPb9HE>d4HXtdB5;{_Cd#41P}!ys20(_62`+)C={SMxocuVkyBM^9s{4P=5yv0PXSK1}jX3Y10a zossj8ckx!>_JU^|*k!q#qf8l?C~B&uavM{FL!O~h+Pu3GVNRqp(<{|~zyLvoU~WVl zeww_qo@9%|+y?T_(ZZK?j7J6X`^z^(H3+@b?4u?8V%G#y)<(EbI zhp8<#+j)1iCG~ZJzZ(|IneNq7mWm3*k$P93)Kt6NC3eH1@m9lW>FMrBL@&2fGO3G# zOSOt7pImd;lqpvML_9EoNJ)>(60XcDWpZy0b)^<)Q>tP0H_qrpXjy7o&Gt+?K56OG1N+bh*7LT&NIPx?JCOpggJXeBZ}ko9z=^iM~82rZgsXxK)>Z zbd&L~Nt>hW{Z?`E9bVepm0G^R8;Ov=(*;Ah$twCN?3KtV1#FW z->QCQ_E{EA?|uLO=lS$Z&rD5qcXd^DcXf47x4nO_Mh)p}(N?z0I)U1CeXSYZRPO{h z#cN&Yc~c@D5PS6`^v=NjZV^v&8RZHO~uML=D zZQwA~i*q&48{;r_1k+Vja+P=$D3_~wW~IwjM{v!Jpd7BTF|LQq5{IiDxGs*MG*=1f zTL`YCd8nu6svVf_j$meK>)j8S)+)shnLlb@%x}@i^JYX)*wgLIq;FfwZsYhPtO)ug zN<=<;cub5&P~Zw4OKt_%A&P4nJeT451iDfE+Rm7roK!z;9co8Hfy!QHP;2p-#e zebXiEp}WSPy7vz6`)UF*Yu2npiMrU{I%}3cefI31Z>S~!G?>gJo~zc{HdyIe^erha zDaq+_ME-QK*&c=`nzPmwiGO^g2h?U4O@!29*w>VWa2d1GsIGk71|5UlK8mcynGa6w znQ70pEyk!pw`sp|N1k+1o6{Pec3pMNR@(EDXD_?-w%7mAz5i7&U3Si2>W!H>xar7S zr(Al%UO~)L))KIy=-xf3dcI$c*tDiYP2>r8gs1UGU0v48xNhJywQpJjCubu zxVo+C30e(meYUyRNm2VMvMqLI)e}R3Lbg?kg8ub0WZPkCM`{k!TysyQY>$h$OfA+4 z;a7)gE@mfWXdswkes!3H^Btyn-Z2hS*D6{<@|1WLc@#{-uk@w_*D>IVwZvt6ciOhv zcT!y53h(CB-6nrAU!nB8CE>l=9~JGTCA>4j<{xLiW9I^}^#R+xQSL=kjMY&ayY(ow zURJsX1<>@82uk~5SyDU4rlE?xe&F)?ezeyz4HbR}leWtedbL%k`QZrfD4@Jzpd$Sh zE(NM#;#;6x-*0}{2i{IY{Vl@vHBhZo>o{D~7)^@S(H?1}b;9L9)lNJbR!A+%hq5bS?&QhTEYV=DeDh4gEWO}o87!DlC=euU40IylKJ2{%Q2b}gfx z>s6A5J2!7L5Ftxl+LYEpy_^ASByTdx_+11wE0qjx*Ssk%^431}H`0X0A_ISk(j1#gdIR{zR~nnQB1|cqCm$8d zfRpy*_QaD>-oSUSeO2;SltnJ0RH-w6nzomkH=sIdd+Fr`Jc*zjF5wXJM%~QwrtN)= zx{r8Qx!#}z5mZ)xs>2eM9JH;LcT@;(Q!t8bQYf+6Z7pgL#qYaJdpH2(B!%z`Q~Y$p}k^m?~BZH=Fuyr1jlR;bwSUl%{?o zq%X6+{rOtoV;z*a!PR%2%=(^9edAP3Jt{8h`w&-;t?E|c@8eTh{y?p7#Rm2Frv5JS z(nRY!ZZlloq`qC=9x_+Byfr6pk^V4Lum5|kZ^1@=f234vm{H$+4W=Sku9ms(=~DJm z`g=VYjm4I^2|yvAq(?)Z!PQ^R-%o79Y;j^F!BCN5~-Ej0_8 zdIQ=B?dL=~Xu{qdnb?5KO5G)JeGaKwM@li_GncoA%(bqRGJZWVN>xj#w3oa^vgY-o zlyMK}$h~`Ht^rJRMO1UQNzJa*j<-ZPtFw2HUzm_q{X_?6{^8)nZm=Yr8^Il!8kUI< zD>q^ya#DkqAa3>Qq=w;NA7e9rFmF4k+RRXuM)^MyJ+Mt%D9xLZk%`z9eVHFPFM_JW z9LN0RrSNq+XWrR~o1_Hwt+YLVi*n{Hqhcj?*39|lc4sASPVXh2Ay6BNT5O!hcG;N@29C6Vm zP;9Gkm_+k9Omq7yMVo@@j;fes#=>EG*leSZAXc)bpsJj)P+Uo|WeTn=^DtC(w#-(b zyH?Pt=5aX_>2~-Qc-iDk@YM$237K%gmC9od-vYBFt;xjbq(-hTr~q?S>Qd`7a*~-~ zeBB$h@N)d=b=YSzslNDFPVmQ4-`@RwlOoukwILX?@4{8$Y0$ z?PSp};Ulk~bkggOSnro``phm}W=>B%TYXG{{p2b}cBk{5N^2V6<=C`uQS&wh)4ihP z^n)5Uw6-p;cJ8B<&T=Ad!1#@obXT7&d>Xh?=htrC_HP*Z+mnB*dsK_jd{%bK@HUI; zAJ*-l)2DSDP%Xnh2Yr8e-COHVe(u_#?asJ=G6TVZgU5BReaZu=e^tvi+K5qo;wx<* zSlvQx&Q8yu*?M@7OpbVi_SmLWbDrX$(qjdMifw-TTJc45inMvMA!#fhRc(G~&SK@o zgXl9>#gyCw?;yeCYLdAaOu{>jK&1l(<*`$d?^T-n-U>Iv>#5uy>Y0dME?>g?4%b8G zYKN;7sJLZwxTFmiTxeIi(d0^C;-1W2oIpnEi0Mj~cfY^(+>>Iuj_YSk_+8? zU`wi-(zrrKIkHkV+0q{ZEwlW-;ehaBdiw{sFZ=EWeCs9I(%S)i((l{l3$Qlh?z&_n zu*ld&W_j;ozMLG%EMz6e>;pB!Ywn;#iyr_AzB*Ykl~jkRnNAOD`tb)#Y7MHvB(NiE zp0GBb-U!aKfpmp5G37j$^GoBLKWv`CmLPCaF(ZXc8F2sO;Gk1Kv(98w@-tI|<@*oZ zm)1?@ayy56xKGUl?UW*@Xn11a*;0zCbGKDtq=vp%de|y+w^gB_$6<;|EF3Z4D2$fX zr8cR9lr>?+uyu7*hVU_RGEDO1!HrT&;f0!>j*escUxAWt978c*6G(bGl8Ru$FL?jE z7)Hi|Jsc((^~PiNd0;wBa+OYRQg|d#BKD1dOs?y=1-H_)H&M-m)p@v zQ~bf@-8`Zx>YVK%}Et;#%nyVRRm!=owGe(QkYbFw#cqf*jX(zXY3OW;`ohh*% zIGEir%-j+pMu=1ZPysP80SYRF0cw8Nx^ zRL{gUc3pWh~c4 z?JM_1;}WTZS5+ocE?4LiBuTuRB0U&BgHA10UFmfA{ICn2duU71ynjsRD|`c}9Fg0! z=ADLq7QRqTAMr)_PoN64gbvr-u)E8>;BvAHt?FQx9I7ooP}oTy(e+4|ki${J<(fj$ z%=<>EBZ}Q|3vcpur{D@L&mQHe+2&n`UuK1)62Vixd|?Vq_yV!N@d_+~kMQ=zP@|T< z{j*YI#xIhB+Wlhv^rw^+PhH*>7MipTG( zb*=T@uIc-)Xxh>ui8kotaxT`jjMR;IbAlBp#o9hKFMb=j)%Gllan%j(?Lyv;c~ILb zts~cZOq(P%r0rSUmvu10gAQiyxk>}EM#Vhn+B`{3V8nv7meiyj>Ht_}59VshdbgHo zmn)Mg*Ida56D!MfH59#D%LJ6x1{9@C?rlj$-bNR7(wwy5-MB>hJwHuhXF7#nT)D-1 z6YJ2bQ0UN($~k?2iDhpHwgbKlNNQlxUR7PSRJ(U27m@)x=khpIfW zF*Uc+j&Xa$6WWs%Js~|=!F7a|C_htAbWM$@#HIO2ngD9(mlRbBT^l=ppvs`M!;uU+ z7_DCiGi|U+ptSmt1g2r6ejUu*qqRJOCzd~#7Clsjk#YJX+CybL4_IaW3f#3?9>FDi z@S^g8@6`uRO@uoBz94mB`YVuaSOJ~es70OHwTtk=&ea{vam9}IZTQW@?|r`$Ik=kc zW@qtgUye+zsiwZ6?2(LP3zUbpYAI%$J<3D20i%{!XEcPDD|;{SkhW++34NEUFxn52 z9uEDWb|Mw@{{gD(2QmAAH;wd(D>S{zeh?$iSke_rwVi{SXI5*jf;vFO`p)4JjuI$1 zs<+f;Pzp>eBUlXWg~{HG-C8Kjy`uNqy7xm5%L^@z)pYtr@BhrK=Y(W$ z-tSzh=`edG`SA}cl5`G@;O-%vixuw3bbi(XM|)DUhB3EBtqxky9w3+2-95MLzr*vx^m;z&$vj+AX2#ObnXTfweRQ2*7cZ_mM%OYk!Znr? z;MJ;+B{(TF4e9rr>T^VkYq(c!o=LHxa@`1u6zg-Ia6O3YR(jn_u79&%tK#_$b`;s= zZADV7!OtsYANN{>KM4=^r{%dn>a|S7W_)I{J5Vn>D6=X2QQDrqZ8D&4Or04_R$RI|}negQ&I-M{!ry z_MK2~k*-l@5h>Ktxe+YtNtqkr`cBrzP15J|4YOi1Bc|Lx?$&=#Skm=^lSZ7=vB`jmgU-MAjJ8Kin|;>U`PYtEa@cVbdybgW-J8~V zc;B9lnhZbt>f?{U{rp~+zcqc-9|!lIG_c*!zTN6I8+-nB$Defj+1(GHHh;>{^N(tJ z__pRBKD}bzj7+O z#?)6ofVB!Wml>A+Qdc-d#eM+4s;RV&G%wT2P^;=TN|7{kPyJ4`ft2C$NE_@c)v`MGPQ@{XHqNab#~<3XlC|-M@3Uo1*M;Na ztN5E%jqmAt!r^v-o%k@T#wT{_lwLKyz;U`>-+MG6Y^24VLyz-wHUwZLB zuN-*V6PJxRziY=+XAZw~_?4%2l#;1+TXoB6S~BS^4%KVgn5g8x<{_=K_n#)dgTtcU z#cVW?jKh%3n<9$n?3_~I1jT&=WDrk~r1)u|#}+b9`wf22;Wz97(O=&?PVq=>Jgq)6 z+m)xp0{m^n-#137JFi@sQ=+6&XN79V7w(Sdl#bqKc443=t7Whu)Ma)do_(f`tTMYW z5c{s+QmA-LvoEe0{t*rr#_I#)n&B;WxCE*yE?t-4W<4hHaUGePO4v4Jta4p~=1gnL z&3jBTTfi2|A@Wk(rhxb85mb zH`o%txn3vrdRDkAU>7WUUI}uNg&z;SC+b?fY-%P}QX3CyojnvzbY3>Hwj=Io9&T%U zJp`L~jl(8-LFZ5Cw}>Y58@qXmBHoJY=USj<>io&bG!%MI_(8TBifP&=b-wsIlYxx&Kz}3Tp z>VIOmGg3pdI;uYfJqYUjG*;P4x>s<2kNRbGPT&7P?~h3h58g$dTbj=VuYbOGQur+O z<@Z0-nAl2q3S-oEb{J4w(@>?X%mAtnEz876$}dk1&s=i`uKN|2*CvsH>r7J2Sc?MG zL20P$45)p3wY^f~WX2R;e^K*2pL}HYvgvy#yKCFFTIn;_yHe{l(U6f*%{4!0ohek@dhCn44Rv&3mdu;;zP|Op^6{q@6w_~55$M(n{K`t9aIehwDQ_{~ z2X>v=v%{egQpmNFi2pCVnopvCGAg+m?mJN_Fo`*+Qn*jnDW;v4RJWZ+Z)l<&K@Lcp z9O!l84JgMoax|%*r*HMG(l>T>CoAt<-A(eY18?4Q$wXT!?@uvryV?_9I9Gd<%wFwl zJ2=I zTCsY_2+W44hFm{fYRF-lWNy|P3Vc~VRLO}Bm(bMV+W#sehfVyB9JU2!Pa2yTr^m;o z6l}wF7G1E3RSo%7Y6#ptG2G4Qq1HN9`!Y?nC(`)Z(_^X3-FdVX{dKJQla_SSA;Ld_ z-DlPm%o2PK;2L6T!&S~N2p{CQqkJ=92(bBUhz?%BI zs0LMYCa(r+kmmN$;4@PwEmbcD2oFY3g6mIN(&{NLf24W9Yp;AN3!l?=Ov(T@T4${9 ziY@7nJnBcKWIvGI9M?-zZ6B7#*hZNJY1xoTc6A^Y*$Cf-LgyuKh_Q_tnN)1zEO=dv z&6QJDlDfQ&W<}XSnm3v591+7wNncGq6Jr}aVuNB6Lv>|;z+ppkr?HIzo1|*hZK7ut zZ098(jX>nskA*3R4w&yDrtRkiLtm;WVk{>Pg4y|#`TnY4AI#^jZ8{>T2| z`V=e?z2!+x-K!Zrkcbx6|Ypxs44ZqcQwUY z#mt%-7T1(yUwx6?d$agDo!CjEbutU>@7Ui3dvXcmnkC^MBRM_`d1q%Q;G}OYymOSw zI|3+hvAoaH{=Dc|`k25y8vN{yLXxe_RbD2<6)od>>LTwB+oQp|D(_xfCL|t=pd7At zF|PS$vabKY-8sXW@7C~$fps)QvyFxg>QA4HhY9232s&_7{IL8S~I z<;yl!&7rvbk=;de_+AH)#hL>>Dq|MrP+b}QQD&NVjA9c#bWX%U;fu)n1*$n5wo&~> zhJ9VcR>|E`$}h8ih_Q`k6}w!#28~Xb#_#g>03Y!_jO*jBO0q zisHNtit?7O0nr=|+n9c$Ib7Z5|czu+vTM6(YrEvHj zwa0jarPXT-T)ZC4S(imt9JWV;m9A}UORBM~2(AZ|Zi)*If7vBb&yvs0-HTV zIb5*OHuiIEV+WAM9Bz65H6rWPC}(i^OU!c%Hd#0^B;um*4LE$ha=61b>R8t{%F>BS z4tM3;5@Q?9+6gxgEz{M#BW!9%e^EKyVH-WvwT-fTqLRZMw$Ed1W58A;&Rgp$*yd~7 z=&+3$>e@!hTP25Uoklx;7-<{Xr6aCe+PK33r*3KE;(a?Dr)n)Lhl5`@9Ak*+MX76f z&(*cO2L@d+kbV!^zNxn5dzCw8c$ZUC^oV-WF*{naFB*#;xvizx?@L1+L@Gda!+%68 zN}!}RGjRXTbWGv@!%{Pzhy0PFGaOuQ!j7$CK1s9rIci#vGf+^PAXCQNL>fDOMw9r1TG8Y^P zREErrPu**4Ss8t~d@Z!2!tar}pa;gcjCSlQ@Zn<)To0w|Ldy)M=!AN%o+H@=E;tFx zMdSm&(3U8iFV1oq={g^H>EAkhkJ?7szh%Ic(Z2=CGlElFSk}Kt_eh0%H26hJ>eZz6nHJH*S&W4<9JWV;2OMXxsJ4vq5or+1OBH zs5?{l`JZaOD$-Ez?+0pBYP8)gExdQEgYxeW|0QMYS<{%v=Of&j8XLSN?K}2wSH{KR zivranyAsN+Vnl-{WsNhw7hll_t&>=!-|ED>=AZ_3p z%Jzt|Jzem?-q)6RSIXvev*nv=d+(IIn<5BDtwlKa{0}&i>}VZ*;w=-0|7mLSliq`} z>D+yL#@U{!Uf{6!KpJ}``EcJAD>CfRB3~BEN){F+`A6R`leIgtMQwUl&0_ZnEZITN z<2zXHi|S<5n_lgMY8al?=Eqv}yWP zl5a!dgglbI`&65xKVsj{wWUsu_6w}~$+pCaWB?kf?x6fNOs;9zw;~}SyA_r&R(;C?PA!omi+=-J~`yO#i^$+e0*nv>8VBj zg1ui|z4tS}#U(+XUtVW_+@(Kr80AX9h*o@Km@nh2p?%pzBjMSaL4JOAA~3$tO?JC;qsYSSw3>eSVI(OSy0+;6wH{oba2kG*gB zU-%#Hy~d^1mC9m1H#4=GHl3R6wp}H)_(Sb3wXA3V`CjTXukAZ8FMZc*oBGVZTey*} zS8v?=?cUG5ds379=6-FypsYI}s<#dEGfDBbq5a1q72K(sj9DBsS>N!s)aBArv9~x| zx73JQmf8MI2`^}dmG>%rZyfJEELLDsTd&8{+nA!)&MMrC=g)#SiSChf{><~)dR{0?M87JE%B5{ zo4frZ4BC9Cln$Q?^fOvh_m7Bsw6mz|%+>1yy@bwJdbt>n=j$*w#uv5%?ym`E8`GoR$9%p#Oa2^OrA6J1jHH*)Ii2pita6cZ$bfQ8T#gRp zZ@%VFMn;mqlhfsuA!VFD@iD;EBJ}H)hPy=R7pP-!Ouuj*YG$C~8|&cwchmUlLg)E$ zy1%D~=qo@bp}4*I_P@ppoij{o0&iH^}*LOoxfK!e?bBL^Njpm16`cdXzzyno$SgXOD;3u zoD6mZA6@{^W&hq!*CGwq>mDw{(@@MQiaaA+ra>h2vr>E1Pcp)_(B5ZG7Mi%7H9m;S zaBb?F%w0doTPs$s#&9o0a8kGI)Ir`lq|55;mGnZZltFDeS{EZ6T-v6CTCD;HKJ}Yw zDSn;80|`fypj3PPvHkN};AW~#XJi`g1V`g;)$paui)V@QRGGr1cL<5`Xgtf`J2yJ)(2yXbh&tBVSY$Bx&CM^)l` zu%XMeW{1M@)L91vH6C-%hTqu*0w^c<3+?$XZ%uUMrM_?8P6%MW*q{|rj$!OEh+DJK6FG1r5jBiE1$`X4ep6Yd()fk;6 zW7nQaz4_+PZtPl@wkaOFwnHv@B)$UbWS|&@<^L=#lfYEAOi-Awyu_Hq3ZWV*Pc=_W z;dXGl_^~=%qRIGRqfmGsxTE1tx-`HYp*dTaa2m?i!yP3`HjWKpLE%HU*S8aJ|pLv zPu9XDC7)c=`(QRyuFvnqGU$4=SSd(}z{{QLcva%`ZrS$qH^4m+V_wMujm+0C) zqtAbeu62D;()otD^`@+fNy?Z!jsGr%|6Z@9Pb+J)ld__P=MA~OMXxvOHM)iGpvZH4 zG@z@r=)YxsuHresN(wa{sN4v3+6j~oHIRtRHON(=N@cwTpNm!9WPa3@6n+hKlY&Xk zb)Aovbf@NgAIkmaoU;PW|58i5NAXA=-3mJ>E}GG7)YP@BsLm&ndMA1&m&>|1zk!xy zZVO!*)DUN`80NR|MvkN`|8o*TJhfIFbm0$bt z!&90j7K(J5nf#$E8U@}Ts?Yc3mn!_hXzw_@!G_yeP^h=*FJF{y?D>B0-nII4>C(5u zp*hnFa%x?{V$XNmy!#$&J;lc0T*#YMeksCzyphk?$#(+SBBNCl(NEfSmJjO4C#Kn6 zu$k_Nxa{{A9d&%`Hm4lZd1QwtyPbK}vBPgVuh$W0U-Rnk&-(M}ZTn8UZTJyaO*`tz zM7QHR9d%Zh2HlS9e9=pb{KGD4GrU{p5$&4~={fY0F>PB6`@`r#zZ-ejp!TDu_BmnZ z=+;e!U3F&v5zP-9-J|o+j&)N<>lgbhD-Z9pr`XCbJ@BOu*|U-FJQU>fxer;$TKGO| zlG7`a8E8r#)tJFK{?>yxWKq>`J?zQT1Q?aeXo%ebOe?(0>h{g4S9nG1=FJa1G@*Nl z$cFoUbfXi@K>zXc;8`U18$JA7CfF3^+|`& zug+LQ$lA~!Q?n`4k))Bi!fc?|O?7~+OFufY{#ApT;l1vlYFC3&&A3%_GRZSQ$&7Pj zz$(4jl-|0^3{A`$+JO@qk(2bU!nEgZJPc69i`4QOxRk#6* zsOT`&@U)YUV9}_-eeH#7|KJv-LNv2lr58>D#x%h93lae(RL~O#`FdtDecvaRla41z z0|#b>Z;53M7if*Q2EHl!$+PG=_FQS1j(esF>r~x+R=bfu7Z2E}_NjE-GNSl79Z#5+ zo_u>=@UTY28i&KbPe|b9YnVSCEblm5Dc{-k~%)i&t6#Ki<_gkBqLGpx&=bdxzMJJp$;i7W~ zUv%c=^UfMI@thfx&zwHsf~gZGPQ7sAgi#kvIddx3{tL`BcGQ|~&NJtjbInE2rxWGx z$iE5Wt_%2|Vl!;|UiL znrK>6xjzv+0ylx@6TvE!4j?Wy0)d|b$#W8tO&XshG!Wf+8q zhr^jkwdyoJf&4}Mb^@^pq<=1WE+SQzLiKk9qfmM(S|AY3fR>uXoBR98`qvt&tqRa0 zq8;?-w*|0j;u^7mNJe*?#x%sm|MWqrSg z57)yS=i?vhnZNN>h`>C_-!uPWC8md-e3|1b{5{r5zQ*wl{+@Y`*{O79_<~&aj2~F@J4zgIgY{Kmj&n^)WF6& zp5p|MWxw9J-nkqnd6PL#^_VyHrg>1w``G);_+AAKjptjmpXcZKc^nITXzkbb(c2gc z7-jnn{e~Qy`b{}D^VvMWZ{w3Uzk}b2V;7$s`u%`)mgub?g{Z|ExbupKMy6GkxOurrYE*FPaL6F&fae6k_pq=2cMT%2v6eg*RYS?r@4Mc>2DiAi0vWPpg^h*KXCJ(~z+%^sa|Q(Ef10 zIW43|yI6y(Qg-I6ZR*h4)-(0l1MeVui!EqlTd^zrA$;?(4fe;jXo>dPl8E-~!meQ5 zOm}o@4>ZORrWd`Z-pKPg$jzTs5 zW~KSWd`fR*HR}RCH*4VkFU&gl|10w~yS!~+oVJPmD!yTbW@oP}R<9oLa6i_$4)O-W zyT^JbdM9~Lde3<;crU{p_xShv_xlg{5BjtG+5SWR9DlAq&wto|#Gmgk@c-)n&Huaq z5C2jBF@K@|xc`K|$bZs*%75Bl?0@Kg1vP@2K`z6{LN-3C#U5kz*o>@U&^TxsGz(e;t%5^> zHbL8`2lOkFYIWM zLVKf}Jj=XSO)t-@>(%q>dk1^%;O`Eisbd}=;0;6{kA=Ta6^-m&L%mC_XV$r^@2Ixd z244hU244m1gAKvPU{kQ!dN#r5-lgvI(SC)t$QIiYTZ$)DZCl?SWEwy|w#`67pH z3vaZy9c)M2$#!Nn+&%U$_I~>y-0~2*GHI5FpPH57r(O@jpzzb+^YBx92luR3&y?B( zAHx~)*35;qimI#x_J0)gg zSZ2Nt-}ZWj4|#*bk=~H-f4pP49u}_gP7HT= zzLKyy+-25=o6VQ3u-_Q2FcqxL+Y)Xy+c?G_W>?VAVt?@_BKNEf-q{0trXg~B4 zgzRvGS1(-Q)ekp%O~S9eHr(qR?(({XTfJ_?dxXo$ZM%;~_42k%+oZc4I=k}RhrZ+TZ!s%r?>5w0iP5WXEO3pYdY<-rtxI!mYt3;*>4e%rz7XejxlDzHR;RLz@U!*kriT=7k^Ge9nd8E?X3C zwT(D8=G+XJ7KC=;X4{_U9XNO7+=+8%&RxPUZFipE5iYlP5&sMEx#36j?v|%^n-$@1 zvy$`baGO~}d@bH(Uxu5Y_P=G_vwlluJ7-3bW*1>M;rs9dWWmtp7$m|V5w1x}aIP1= zNsq-q-EH(%jMpQz8_K>Tgr5S zM-D`tfjrxnLi?l6>A*!4il}pSxD>uy3g0b-@0P-MOZQ8y4dGi6#o)K4@Y_=OZD}>? z6@_mp1sikzZ>ZQA34RF)ehEH$>p$?(7YF2{>~J&Ex)o{tPWefx6}|*7eG&80Ag+%M zzp2JMB8^kRbx7MwF@LNVDRVr6lx@|LCOPMe1f}_-J@Jl&&IIL+@Fn33=AM^_8!633 zq+|yYvIPk#r(_$oWLv`R2jGQe2P|DZINwRh4s_6V#|!ADs*mBhpfymX=NQ7oRePP-mU_2#TyAzLNMV`k`xxJFUHrHnha- z;QFU<9hR*^uLdQ_<6MVxJ?=H&+>p?i(3H@Fd;K^M;w;+t7|x=Bhj1Roc?9o{B%Day zkB1*7gloOCxt_#3lewM>RW9IqnkfuEBzzi{2cHo>57(g^)>+cGIfT6M3ufyIZ7o7e zu3HlhC5XoC3fvt8(U^C0p3AwH7T9dQ1Pfly@gdet3nqAti^dK&6$RN(5 z-K4D;Pp&2qoHiqes>ybetL@Szkh5LnXq)PH(e3TRozQ-LfrtX!NM_Lsdl)Xw-w=!~o8N zIFH~wlKZD|KASKZ+FihTTKFvz`3-dWnws7KP1aM(8<4mSr2Y-H{0+7I4K(RG`dnM-b8SV}ZKIF1l|I&1 z`dC}(V{JvZZ9|`JrN6Y5{?gW911(N^@M^sIB)VT(w4UhfsAqHx@ganL+xjW= z8~4}CiCV3$^z)>(x|_4KR*l$uVVf5a>Qavf5$FSX2NU`e&LA+C=$+5(YC-s&--ghI zy8Z&ne#!Z3&KseqN5~@N66zBUA~Ynlf+r5)%zO6ma9bjm-LSxuD1~?AOH6s_pgefw zAMofCL2gzuZpa}=Uy-9lUK6bI2XpRE7|HW9IG;&43z&(7^NCO6{?#Ur zol^3=>j>8qZZLU%B7E7;H~ExcvtP{lP(mBxhw-c(@h;G8EhYIPTtul>QmRFaS8^!X zBE~E^0c%);9|%7i+%&>PjA3#p?IKFMh_OtLEv1CD3H7-?h|rMGDqKm)7g6$+jCFDt z>*O%j$$<)s666O;Y=#n>6KFfAu{lu-Iut0ENZa>467v&5xWJ?2(hl~d9*!XlL7z%{ zHibBC7W!}-wYd$y=*?*S9awX|M+^PHNcJbzPwb(N1xuh<>atD?Iud$9*Z!Q334Z|N z*I=ycox$~)g!2hgxHrwz4ZbkB!PkV1CYMiZV^yLEF5E$kLSXSY&Apva|;IS%dtnL4MXCKWmVm zHDF!^)>UAoC#Je&2iir-WW$|cmT}oO)dwTF79B7x+zG~AD*u~l84#y^S&jMQgu;HF@ikoj!Sns z@yrr#KpPYh8WW-tS0caGz#h4oEO8K+H4`QnBLs2c)ZptOPYd7WEO}TbcuHBSN zbk=UlwVQJ7hF^XN%aFS=WNs$1R)(CFA!lXCSQ#=_hHRA~8)eAGOk|@BxhMJ&ZfeoLSP#!^(Ei1EICBErOM6K#rWqs8|Bdya22^zN zl}#(t1kUNn`7F*8=_gKM#Onhglv{)(t)g%AEv@PI;U~a-LS8;1FDuDq8U4ylSkCjX zn~T(}l>Q__dl3CSDeV{Zuhx;*b(CgvxC9K}Qg7R|ZR?4)b)%08O(y}w79bXB?e=6W zJ0+|j<7`eX@`V$fGUS`-Ip+gQVa`ML+2O0 z^MIWUm3`iRQ*+jgl?1e_?ed*W3eP0H zKX{CoN%L~b@JBG+OF34P_LZc4FKJ&6b)F{uIi!CX6uO^0Ool=m$;bJW^$w`Jko^1) z`6-}ue^zQqzTN`c7Nxn2Nf*JtVpE8EaMF8=#{c{D+|YYd_P%T`!?S)>IEr#4D94MG zW3btrN>Ppyu$)Ud@+n7W%7F)6n3XO^KIJGPxf9j7b`4#KYgcV5S0e|83@(9YC@cpVl)QLP1%T9rN65j33naA)G z_})mU{tGwKS2pxd^{4UWL|vZcUQzfRmN@yP=j=4D2jt*aeg}dGzad@Hgx?(|$-~mB z$ifZb!&UEOUWL-${GWgHcz*LQ?95luUnHN?36oNn@?utMJn=gOMcA8A07Pzhm^|Sh z-EAc?`AG@GZQ@T!^DkC76Yh375V}Xd@J-oqu<{q)&mITgMAxY)#EQckc=v6&hn6tm z^8yk6Sz(l;^sdw+oTYaUcnClJ&k*6)v_=QwogD{6s}I6Igll+LOS(Tu`Vag4(aP|n z-HCpsQ6xI2A*AnK?FUV-kK}~-AHnoS#Lv*aINTN9#=Y0Vzl$H^zQ6GIDl7Zt3)-e% z{jtNN3GXMUoGXu~>o|Hf{5JeJ+|0j98r0x^3(@|W@aeE6 z8nQ5~8*UHZ;d*oUB*!a&xJ;-;@3$~~g8!3YAy)qM@4z)1LG1q=t`OOEZ-`V3{A*K@pCOkF?9e_l8z zeBI&7JklfJx3AXGdtms_zyHg-4m0g4zpAn)yz{^Q<^8YUJiv=8_v!ZLzn7x}AT`y? zNc-|#^}EsgaeG-!+lS>&lSYtG)4>#o)TLgC?mMXPVxF@jHOI6*3SZ}cv8)e^e&M}Q z?7ujRPm1`=-Gg0EW+p$umgi>BtIkMPFbgRoKbd>1I`8=FvyNAL*Rb#3_1+Dv?XBmx z_7Cw7)fwph%|GvdHuCGr`N-h=;D_MnAdKfFbN4$lS?|A_n@j|WL?V}wvv1Ca9{77e z6Y(UxhyOv)<|%AqLZ58tvzlJ`TK+ZhEm+T;jr_B*$W-tKmMQvGKj>I_5A@1|VkwRx zf5zNif?j=1uO>(S^jGV8bs2ZpWBwEW8>|z)*UoDPWP7i@so{0-uu?Lk+ZjKcE?yVr zNxOPo=^b|Wx^wK|_24)F%W1$oFWw={^PXsmnCm^2w@$-a8ZhU3I`^po#t+wFx$vli zgsDqC)WcJ^HFk?E>f%k4&&=>!rUw21@0mt2KWq|s1uVl~@I$qzE)SNQ#&`&P1k8#6 z+b=!>pPC}P1Xi0ScnW-GO7Ir=+?3)mu*L+z+F-3IW-j>)lVm>mOKjj@1z*XypOJqp zYID8unPJ{wEVIlTf!V~&Ku)k3+lVhUjB(*-Y$FUI16Bc1*Pcl-51n9kIEk&qXFfW| zlvuGF)S~|LOdV#Y^SNJ$tv6tfy2w~&sm117YD-Nqv(;kzt!--)uV?Flvp)8Qq|9G) zY=l)fU>3VEZ?$9vN)fZ!t+0c%v28fEwQaFNw8Ls#liBU|q|yQFaZP5qI}-0?I}z`U zCB|pQ`wr%?@3Hro8q9q24QXb-?>9}E0e{eBGYdY8`w!WNOv27(mb(sI7nm$KFJbDz zeYvK7q7WWz02j_tE@W>8{#a`G*Ps``m{-~b;=+*)@FrLe7mC+c0C%o{&sOrUsXUs* zBEN<^!m0V{4OXN)>M4(AVL99mfA8R5%-kwIPs+7Emct*3|HQu(>!Emz2?t{`@))M! zb-;RRs>7OMybthN!h5U+d?wt?dD7v%Kuzhn$F~+G(UHa+2kpfvw8- z&Sq{Q4^Op8q;fu%E8n|-8HPOdS1b0eWJPt3N|g1k^{z!qMXs!Oqjw|mTfN&%4VAHa zem)k$T=iqi_KUF+;y>lrHU)kwzZJ(rk-c2?V9WLo!){pHZ|k?^emm@kx$4c9?ce3! zg;a=49;DKkuhPhT60#Sl)CDSaHC5`8Ds{C~>il3GHd{|+uS8|fQ`z%X_7W<4St@(J z%AOaL2j!+=P{ACwr*fE3IkYN=RwYo}^TZ!cB z?OpaRp5ATm=BdcAr?Oht{?-1~h3KFG>Qts5k@>&}i zR?jHA1i?8~#@hJ5J!O{St@)`})6NNIdriDf@aa_VL3_0~&-+`Qm3~csn*XZ5&Hvut z6I>cx9n8kZuw5`4&#jkuO=IOiSrJo_oXM0&5N z&uAGQqi^w*()aNJV&^fu#Qu(d*b^CkVM~JNgO~A#EVCQntp%ob@C;!IB?<7kGe-KP zuMvFNrx~wF{Lo`7$&&C)^AbJnm%{?{?^L;YJ#1{=NNq50hew%rQ=83uslDd?)GF*K z&3JDKy`q0IDt`@q_ICItw0WAI&1+c0=VN7kig_&eukI6sSL%MvUbIrQ}#(RXeH^m{3_XM|Mq24e1*Kc%1Gzmj9|+cKfTUK_f25lBD_sc{vAe$ z?=o6@56__Y!_R_$hMxz|Q-&9@J->{N_m%L=;5Fi9#9s%t9+u(NSWs7!(l%219PAb3 zpa9I@f_WR5w}JUJFmDC(CM>P1v0bgk(z+T;>uM~mt4U=WDQpG%=V0Fo=B-#?S7Uu$ zjrDakdOL~5Er;+Tc9~Zx3sfY93NSYT^LDV#0qY#F&H?Kju+9PFb}*KKaXT2dgK-WR z=YSDhyzi_%&qD#p@0*<8B7fJ?DBMW6mB2`gylqlyek(`bV-^)Y$ss(?{4YD;K-wucbdwjPJzw-C^ zTI&1Z>F9(d@XAZn@~cV*k$`nl(?DzhVhh&k|6sf0?PcZ#c*Sw(>&SN=n7$#+m84lt zn*RdhH(-?9uLk2AYVWg}ccJ+kybZl6*W1{Q#V(3`!{^VDr`LGq)9XW9+1`mxNJMPA zfCk1{@~FG?$WLr~`~4LIvA)WaqVyF{c!q^R&)5*en&7VV4i<4n?`m_1Qqz&#ZW$dT z7uXPaDt=%YKSt8;GO}L9Sov!iH3NlRD13*pG~-If(CM*t#w!|?u{O_jBwg*9%nYS} zP)6-JnK|XoZyj$Hh*c8`SNr{%&4k*h@^ji|JSG=1+cZm=8ew|2ALX@5kkw5B(554{Fi!IG!rlse{V z{yx6@qC;QgUqe^3Wa&DVTH0GK_SvS-Wcyh@Uo#;ubLoT33+6F0#H*bi>HJ_mnrQ+3 z5=+nJ?>zlS@DEyoM}tR!VSi%AqIkOl`9$ypqf>m|i9Z!Q#amAYPvaA`I9N=mr}A$I$Dct1~OWceaVU_t&G-ur9z2PAxo)1YsB9wEpn9>w1xD~tgh)v z=olkNkJ@F7;k&WBjxl^4WB5w7BBffMQq7GP0;OG2>6NAQs-g69G%8ezWGNMDC>08{ z{567q2LDV`At!h-c#%2~TI4G&a)Z}`*SI4T$q!x+UMHS0M%SKkpft)>8s*vVXo+ho zrLyf$w8k~<&-Q0V-g{`3YeEn08RxNT#M>cljoB5f&FzreA=s6BQEoE#)!Z9x&)j=+ z7Z7_h`Dxbp+;uDos-N{pZnwM+S&!$wkhLxMg&J??zM%i*+0*h$vtJ^7n)_#i&SN>tbDQVZ&n?aQF}GB4zY5k@bJvkl=0BNxWBTu&%duNJ1(#0xm{*!t zntn40KKYYhAomR~XbBcjiUl#ASBXVod9M7|$v>|?B`cNE$)Ef-&pnjfX8z@#`@6eR zCii!D56!DDf5qd<{z8@VWtR1#YI)r^?@=E2cYYzASIKWFQGx16J#@6~b(wWvKQ zA$3=(p?+QmdWE~FanVP)tP6@(1<7ilXeH3$c$`G5fcmh8Z-_b8496>a6zc)UniJVE zc`DcNEcRdYU-Dn}m-=P?>;4=5 zoBmt=+x`dsvi+>-`HEFN>si;ck(E8=tnK;M-<7eBCod=nih^QR@|3ccr#7p3>IU_L zgMvosRXnnCr+2(|XGkzKI5rp-92X1^Mg${+QNifo^k7_YMsQ{@J~%fxFPIcu5L_8t z75s_u;Pt@`!HvP4(VCn9uM4$??g{qV9`*=(r0rw-*#UNtJ=zYoL+vm-+>T`J{AfGI z9&g9m6YPohBzrRZ7MyBNv!~l}_6$3bolnoP=i2k^BzwM{Y^T_%_5wT2{?1Ofm)e`` z&8)P))!t@rw@=%}_F4Nc`@DV8{@a$>H|<;Y9s8bLW|!NK>~)*t;cF+OpB=BQfj!EbzZeu)m%Fu9uQ||pxVI};@b#VrGi~p`)(rK zLb#2vh7tJ}gfDsbuk-`3 zI+Gv$+0g&ZF@C8$;mBul7X3$%Io0rxVT~oJ}~FFo`gkFqME8s+~@_ zh`<*#*$5#dR~Q-r7S^f!d|gpP#Hgsz0{1Yqsugg+8K=iP2-{z7zrAw5I!(kez;%aPV{ zq_rGrEk{zz)mH@{f26Y;GpIg(Y5WR)XXF-LLpX!Lb$3Nt}2JC%HgVV zxT+kkDu=7e;i_^tryR~HhjYr|nsT_HoZ2s^_RF!t9SyaQAq*xACGf>mbW8=Ms36A` zr99NLz3UXXQjw{G<1v#!D#}(wbf*eP9Bny3Oz zRDmX{Ks!{R9V*Zc?9xp*moSMinJ|?wjWC^XDdBmrQJ3M>=-{i-omZnfuSR!Xjqaq* z;FJnDr2Bz4QFud+A&e!QNI02rD&cejUY6A0Oloi@ zH8_(RoJkGNqy}eFgEQfgGI*p69x0-vRXvP#b{y2B_^oZ2$`UavIMT zd6!XAhL=W~$gPh4uGZ3kB6IWJ74f$I`brk#mNpo4FF(<+b4} z>{h!}tYB!d_tN&hefc0@*RU;c#kJh92xnm zj>Th7^6r5lk2J-1yC1z|+Boj#s|J>QZ6F8VafN2i)_H}T%Zh4XS3lU<3xKZj1CAf9 zk^b<;+8}nB^i|rvgip`zDjq#*rHi1VbEQRZzg{}d!sqOJk&nV|vDJwkO}&!d$FoU& zmcr+`^T#yaT=8Y%dJPo%)gS&n%s%|~pDR7sw?;AIVjHUbRa!XJKdKV05~O+z3)OzD zhSebte222^$C4+u#(jTLoxdKY@zx0g{`Dv z^=Fl^Y3tml`}#Vm6{S)M za66b^Q142t|0Uu75Ld|ze}}zQb%A2*6OQD`pTi>*MG1O`U$`DC>yzPaSXSqXZ51DF zgV)>=9^p4fSqj3IwCx6K>m^;#_XcR%v+D?hb~V==~pTeg9?<=WQp6$ec@)_nER>5t{-4i?{(=CQvGj}Y<&*WJ3SLsPv_5QD1{fBzk-7^OchN@jW7Zxo>5_nv#h9e=AX&wM9}Qy)>i;EfpH zC6%hbh~6T92m1ZrbTZ|N(|0Mj_B4{~U+;fJoPdN>={tb=zvw$uN_=JPKqcPqeIGlc z_yMwiB!3TEC7veiUDSnnufy4&sL%{zU$r{eCkM07(Xsp+V51y^ui#kzO?dlc(-gmt z)9IJp$iIcoinP?3fL3bRZ>=`{L$O=#Fm170{=goBKYPEJ_G;Phhz)ay>4Y6~nCXly zbDZfS_Ds`NESjb}I~3h(daz5;QqvQQ<=f^=Y?WV_bJ%g{Tl0I_WyoB`K0`m4YuIb( zCvz?P4gF%SW6zmcF@>-G{8Xi5-ZN=4N&ws$p(nC!(6>R(2z*Yi`4C zS>HT}?eZWq3;SgwGaDP`A?6`=BWh#jup?1hGnZY7+M9XoOw`dl%;%_Hnk)YZ&q zm!j@w0Xr4-Fn?vYq9e@TuzLSF2cfQIPE2*HD!y1+4q^Dkugs~*7gMEEbE{8vM5cauY8#eU;d1L>Mw9-L*>rK%AMKD zoi&v^^OYkD;mA40XTPkuj9BLR^Vtq%f&UM@P8a!4<8QhcdvBiqjQ>0vU%lYJz|NE} z!odkRxD2nk*Wu%&*xXGHR`(CVvs`w%WKS*DEBPz@6~sUGKPJA?UrGEE{}WRA)c+Jb ztNc~OSNp4pf98Ki{B!?v;%j{NCGgj>OJ*^$@g@2B%KwTKzxKZ-zTRI?e1nf4D%O1F z_^{}2B96U?_&5GH#J@$N5=ayyK7W_Li+t`zx;&LGPo>LK>GD*%aF0Z~vQ)b2s&o~o zbQP#{6{vI-AYJSh7vu$b%roW(_#ZK6P(ZveC?wA80rAoRKOW`}YICfMG$vIVOH>+5 zR2oZE8Vgk#3so8mRT{HY8naXyvs4*b@p(dLdi(^fFW-UfDTPl*At&&_*B{>^Oo{1;n zmB@2#mFH}g=lUwoMJmrlD$hm8^Dffe9k8lYXB6?~5r3ZGmjJ)hU{A0II_wShGKZT& z<^yED2eYv~ZBODy*dvJdvb~5OX^$k{+x8~j$MzxK*Y+je&-NqUpRc(E%!&*kKF|&% zKFAItew00m_|f)g;>Xxyh!3`di4U$J^tHkF{fopI}cQexf~*_(}F8;wRgaiJxLmA%3bomH27) zG~%b*(}|C>-)?Uw{*--+RGzj^r?v-Vl?gZAX<^Y(c#qdl4Xe#O3G8rWCut9Wm|VcCz8`Jgv>_bvODsVkb4BbpSi z>ksS)JY8m&@$^IcA@SvQIq?;Cg*nK6Y(EAAdKR4MS?sW%+t11K8s>ZIF`LAmBFrd# zL42KENBm3sCH|RTGrv@7*W2~zG2fFNc-_kX9CW43zZauFi_mT||6WY%+XAr^z3j0A zA%4cHk?Whz{KY?_E648qv6k~MQC(c4nl5grx;Q^W7h7~N9Ak#^_f`L9tNzVW{hMu$ z=kJ>n_!pRy_$O5t=c+Dls=7Egt&9Jp`-9$T?j$F7@%Pyo^j_lk@%Q;!;sd-ZKHp8$ zH=vek>OA#7E>?Y=r@jHj>Kjn(edc|}+JemFq?P@Ah`HhCq5B2`}_QG@YyuXzUO5hZ2|GM-KY^4D{W2A1+jnv;24b_tW}4SM__K`rWF24^+Qf)$f7ocdPo{Q~mC% ze)m+r`>NkP)$hLQcTe@Z@2~UMk)r5#Up2e0I^9=o?yDa6*@y8va*I_Rn9crX;#+*y z2(vfiR^r?IZN#_x*c<&F{tonxX!H82sk2o_XRCJ3W_A}#o$BZ;W_fE77fqeTY;PUn zqOY^qzp*hh3r&J1c%L*4ni4-aIGA{|pc(PzL383Qf)>PE{=fFlJ-Eu^3gF+K-7ohN zViLkbUP7usQ>uuFNRhTeN92veAmVe>@Ei#s0TKlfke9p!2UI}Yj&<7HgkbBmK9Hg! zrH;>zwG3Ft2W=I^q9P(HN`L3v+~lUv@zFoq+_@)vclX7K+_4pk4 z5??}E`K;!K*_#_?Z*G`9Nf4IqPy*$)lD>z>?!>Ts()aW|Nh{}-^u0WK7Q^^S-`n>l ztz1~r_wjv5D=(JD{`rRe^9=jve=Y1k&||Yzzm&@{Km+8ExRK3~0kC zMirVERq#d?f>8x;R3R8u@J1DaQ3Y>QAsAKgMiqil1#eU#7*+5_6@pO(Z&V=|Rq#d? zf>8x;R3R8u@J1DaQ3Y>QAsAKgMitWZK#UTI(Eu^*FNXKUFuoYB7sK)b_c{)osQ5jB zCVm2G#qtR>@{>p_u1}zuzk#%3`~({MGSZ6o6KLwEl2+`WKx2O+X{7;)P#(%j&j>TX z<1>kE<-)8mi*!Y(AYBdYlA;ib9dMcwb&E(Kx340G&jnT%%U85 zS(GF1WRxRqi3C=5;QqjF&$F8=Mgs3hHOHzRnurulBi5w%f)N_YNHu6^BqKDE5xjDQ z7BOOH5-~r?FneNwj%a(=MyvQAvwK~~FSDS zsoxbB6}v7!8953#U}V4I=$c_8h89PwhxZ#@9Bm&tVpwr>c+|)tlrp}@q4^DMC%&R} zt=}rEeh&3D2Iqh7&&jU9o9`Q5pamk2 zO^6;EJ7sEF^yv8M*Of-w$haAF(LRF*4IVc58HLkbG?jlY zXPUyi^0LxtuBg1c`#G*Pu!rjaJlAys_H}L2k9uqoW6cKXRmjX&T=V!Z05@wH^+i2N?I2;L|VEOwgHm#py(fS3^(vHWl&#_1wJUT-h$2oB#PR32*+_)*eVyAE} zd;xx9&EgJm$GABDPF#eiSj+fS=^3|FL=kIpI)x#fMK=^SL^M>sEdXov-yPzKyiCd3y>o_T(!+ z8&jMN3!DQ6So5vd{e9nL<^R{~{=`-P5$ju5d3tpl4q!#=YR=Pj3_fg@z2y8(8FW1}k!S}j99@YcgU^mQN zA$QAqcK8p=Bl4&`CR^ljcKR9H>8J2seOh*~>u<23eomg37vx2=rGA-R{w{X(ud;i8 zo&EY=_UUi4KYy1U`9XHyhmf!yk)!gN9Fya?ntL4N6TXRW$_`wus#~zj&RA0yvzzY3 z&bh>Q^=JBS?2LP`3+}~^w~z13&bA-Y%ZvQQeh|J5Tk!AL>bK$3@FX4$+llwF18;_% z{*QP}zk#Q;o_ODI#>76q-@oe*;0ygv|GxjwV_Oz-@w?5(Klu!Nj?WJ3@$3I-xIaE4 z?hIF5N4KK|a3mdg!^&l-7AW%(ersf^VSI9UrpS^w)tIiGrL0T+@Zvx#gnM{bduE#`>cV>rIU`~3l0)BT4<>B#AU z<>mC~foOB|D6`|3%g0B5FmYMty47xrJHk!VF&mZ<^WtIN%OOU#8zVUw>blskhDQFD zGa=q&6#BA1o){K{wd~4vheL7uxLe#i?jH}0N5}Kx>iCuT%bXIPG9R8wcT&U~mW@19 zN+q{Zt!&WeQ^{>qBliKTRnn->i;VFpQni{wuFn;G(XWI*z!AL?p0={a?fyb*A%WF) z?*~>Pfu&t!uiEazz)gI$jbHOWg;a-@>`vI1ai_+u{YvW~Y1P(#39Lf)s=fReSdH{k zThkc!JQ)&B>Y_i>o;^oeBlcJc+B7Z6v62_8#Cm`{TU&q0a)_kDyKBu{>4Y9Y>vM7i zEurxsdMh4FQ58B9?rM8HtH;T=-J@RYdOf)*(dSAbHPF7+Xnmvx+Skp%YIf0?5q*VJ zig}O=_u2}%OB?;|+u7ZAk**C}t!}3G9j&~xmG9PazKkETDDB^?mZSU5>^{9#*Qej; zwMY)MPdeUJNDk-|+ClBpHelv$sJ&b*(p`PR%$i(`V1j zKV%O)J93B<+SO-DA^X>Me-Ere_OHDf4Xjp)M%}!&k+FIA40(13R;Q*i^XXZBrM$O0 zJ)d3TV=GBm$%|H!e%fQ2k3>XU$r>p%O4?F^)qhz_k>}Ghq_8?tjmJe-K?9S=2WZ{QyDYZyE>^xr%lYao>S{TEwVcL1 z(PvH}Z_=LVda4TZfHlZEwI@#iGjr!n(zWOW^l38pV_kFgUM=zO0~^nsm#lP!mFilq z3afxMVKp!_clwb|p-a%df`9w~{cWj%^{I>NQ-ds(HR_@>Cnbu%s>1ca8aV>24vzsh zWxpS!a(buPK#e%B^(%liNaD0NS#7H1j+%3TwJN!zW+ku&Y2ClqoKH?F+zzY_w*jld zB4ABe0&Lvo0&-Ge8L&1i1XhK`z?!fWh?W){{3I!z`OVOnd=L8Z{pc)ubvAnHBsAm# zu%AX}Qcd(AFv<|zMuFB4=UbiciniDLi2 zOhG;(^JHF>E6Zg$`n#&|ApK~#A1#IlWjXn&P#tQ*CYcv%!)Dr=NNeM0`PQhdl+mW* zOsQ*es#HSN8nr@SDzbW3POoM#JG0}FX*9AHT&27T?PYq*J?JmJ%<6^qfu1(HL)a8* z8|u){&B&qJKn+`QA8qqA-c?Jk(izv5PsDHL7k8S(8!O`}l8jp=8nIh>Dl|x0^J6~0 zR34S#CzaDH;(M>viMS8)Qn%KvWlFu_-lEkX$d4J}OdAqSM*jMid(*u^Ngug@C|p03 zA5o{F#$evUnCRw+c#(2B@wu*)tK@3ACaXpXZLCYzaCf=8-92u-+u%0V*Wes3&ic@m zYH!y1rt1f>FF6X&jHH6lq8u0%RS;*Ce{K?CMxDO99G>WOYfD@g)r4uAgwRMRV; literal 0 HcmV?d00001 diff --git a/crates/horizon-theme/src/lib.rs b/crates/horizon-theme/src/lib.rs index b41536e..0d97939 100644 --- a/crates/horizon-theme/src/lib.rs +++ b/crates/horizon-theme/src/lib.rs @@ -24,6 +24,23 @@ pub mod fonts { pub const PIXEL_MEDIUM: &[u8] = include_bytes!("../fonts/PixelifySans-Medium.ttf"); pub const PIXEL_SEMIBOLD: &[u8] = include_bytes!("../fonts/PixelifySans-SemiBold.ttf"); pub const PIXEL_BOLD: &[u8] = include_bytes!("../fonts/PixelifySans-Bold.ttf"); + /// The Rust-menu brand face (Permanent Marker, Apache 2.0 — + /// `fonts/Apache-PermanentMarker.txt`); Latin only, so it draws brand words + /// ("Horizon", "RustNotMC", "DEVBLOG") and never localized menu strings. + pub const MARKER: &[u8] = include_bytes!("../fonts/PermanentMarker-Regular.ttf"); + /// The Rust-menu's body face (Roboto, Apache 2.0 — `fonts/Roboto-LICENSE.txt`), + /// Cyrillic included: every localized label of the menu draws with it. + pub const ROBOTO_REGULAR: &[u8] = include_bytes!("../fonts/Roboto-Regular.ttf"); + pub const ROBOTO_MEDIUM: &[u8] = include_bytes!("../fonts/Roboto-Medium.ttf"); + /// The Rust menu's display face (Oswald, OFL — `fonts/OFL-Oswald.txt`): + /// condensed caps for the big headings. + pub const OSWALD_SEMIBOLD: &[u8] = include_bytes!("../fonts/Oswald-SemiBold.ttf"); + /// The Rust menu's interface face (Roboto Condensed, OFL — + /// `fonts/OFL-RobotoCondensed.txt`); every localized label draws with it. + pub const ROBOTO_CONDENSED_REGULAR: &[u8] = + include_bytes!("../fonts/RobotoCondensed-Regular.ttf"); + pub const ROBOTO_CONDENSED_MEDIUM: &[u8] = + include_bytes!("../fonts/RobotoCondensed-Medium.ttf"); } /// The launcher's pixel icons: Pixelarticons (MIT, `icons/pixel/LICENSE-pixelarticons.txt`), 24 diff --git a/crates/horizon-world/src/registry.rs b/crates/horizon-world/src/registry.rs index 9ce9a68..579f523 100644 --- a/crates/horizon-world/src/registry.rs +++ b/crates/horizon-world/src/registry.rs @@ -82,7 +82,11 @@ impl BlockRegistry { Ok((Self::from_states(states, facts.defaults)?, flags)) } - fn from_states(states: Vec, defaults: BTreeMap) -> io::Result { + /// A registry from raw states and a default state per name, with the + /// state at `defaults[name]` standing for that block. Used by the + /// vanilla registry (whose states come from `facts.json`) and by tests + /// that need a handful of blocks and nothing of the assets. + pub fn from_states(states: Vec, defaults: BTreeMap) -> io::Result { if states.is_empty() || states.len() > i32::MAX as usize { return Err(invalid("invalid registry size")); } diff --git a/docs/design-system.md b/docs/design-system.md index 11ea46c..325a0f0 100644 --- a/docs/design-system.md +++ b/docs/design-system.md @@ -145,8 +145,22 @@ Geist (400, 500, 600) and Geist Mono (400), bundled under the SIL Open Font Lice stacks of panels, the stone texture behind the page and Horizon's pixel landscape (a dawn or a sunset) behind the hero. Light and dark follow the system, with a toggle. A giant wordmark in pixels sits in the footer. -- **Game**: vanilla's screens. The on-screen keyboard is a rounded plate of keys in the page - colour, the focused key in the accent. +- **Game**: vanilla's screens, except the main menu. `rustui` + (`horizon-client/src/rustui`) draws Horizon's Home in the Rust 2025 look: a veiled panorama + under charcoal plates with one Rust-orange accent, the top bar carrying the wordmark, the + tabs (ГЛАВНАЯ, ИГРАТЬ, two locked `???` chips that explain themselves on hover) and the + actions, quick connect and the devblog card on the right, the chat strip and the account plate + along the bottom. Its palette is `rustui::theme`, WCAG-tested over the veil; panels paint + procedurally until a Figma export sits in the resource root as `gui/sprites/rustui/`. + The menu lays out in dp (the launcher's 1040x700 frame scaled to the window) and hit-tests the + same layout it draws. `horizon.txt:rustMenu:false` restores vanilla's main menu. The settings + screens use the same language (`rustui::settings`): a category rail on the left, one row per + setting with its value, bar or button on the right, the hovered setting's explanation in a + panel, and a footer with the version, the credit (Horizon, the Rust client this is based on, + MIT) and the way back. Their rows are vanilla's own widgets, so every setting behaves as + before; the Graphics and pack screens keep vanilla's own layouts for now. + `horizon.txt:rustSettings:false` restores vanilla's options screens. The on-screen + keyboard is a rounded plate of keys in the page colour, the focused key in the accent. ## Blocks