From 98b4de46dcee6dbe0c029ea62271c85f0a2f15a9 Mon Sep 17 00:00:00 2001 From: StarToaster <startoaster23@gmail.com> Date: Sun, 6 Nov 2022 17:14:46 -0500 Subject: [PATCH] A bunch of fixes! New styles, widgets, and more! --- Cargo.toml | 1 + assets/lato-light - Copy.png | Bin 0 -> 68127 bytes assets/lato-light.kayak_font | 1 + assets/lato-light.png | Bin 0 -> 106104 bytes book/src/chapter_1.md | 18 +- examples/bevy_scene.rs | 21 +- examples/conditional_widget.rs | 143 ++++++++ examples/context.rs | 28 +- examples/hello_world_no_macro.rs | 15 +- examples/quads.rs | 10 +- examples/scrolling.rs | 30 +- examples/simple_state.rs | 108 +++--- examples/tabs/tab.rs | 8 +- examples/tabs/tab_button.rs | 29 +- examples/tabs/tabs.rs | 4 + examples/text_box.rs | 1 + examples/todo/input.rs | 176 ++++----- examples/todo/items.rs | 34 +- examples/todo/todo.rs | 4 + kayak_ui_macros/src/widget.rs | 10 +- src/calculate_nodes.rs | 201 ++++++++--- src/children.rs | 8 + src/clone_component.rs | 4 +- src/context.rs | 470 +++++++++++++++++-------- src/event.rs | 16 +- src/event_dispatcher.rs | 98 ++++-- src/node.rs | 4 + src/render/unified/shader.wgsl | 8 +- src/render_primitive.rs | 12 + src/styles/style.rs | 3 + src/tree.rs | 10 +- src/widget.rs | 16 + src/widget_context.rs | 54 ++- src/widgets/app.rs | 13 +- src/widgets/button.rs | 123 +++++-- src/widgets/clip.rs | 5 +- src/widgets/mod.rs | 22 +- src/widgets/scroll/scroll_bar.rs | 2 +- src/widgets/scroll/scroll_box.rs | 2 +- src/widgets/scroll/scroll_content.rs | 2 +- src/widgets/text.rs | 70 ++-- src/widgets/text_box.rs | 183 +++++----- src/widgets/window.rs | 118 ++++++- src/widgets/window_context_provider.rs | 81 +++++ 44 files changed, 1474 insertions(+), 692 deletions(-) create mode 100644 assets/lato-light - Copy.png create mode 100644 assets/lato-light.kayak_font create mode 100644 assets/lato-light.png create mode 100644 examples/conditional_widget.rs create mode 100644 src/widgets/window_context_provider.rs diff --git a/Cargo.toml b/Cargo.toml index 10084b0..d5ff252 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ kayak_ui_macros = { path = "./kayak_ui_macros" } indexmap = "1.9" log = "0.4" bitflags = "1.3.2" +reorder = "2.1" [dev-dependencies] fastrand = "1.8" diff --git a/assets/lato-light - Copy.png b/assets/lato-light - Copy.png new file mode 100644 index 0000000000000000000000000000000000000000..103c6324efec5ccfef51aab02cde1afb0d7895ae GIT binary patch literal 68127 zcmV*tKtjKXP)<h;3K|Lk000e1NJLTq00CqG00CqO0ssI2n0eNB009Z+Nkl<Zcmdp1 z2S60Z_x=vC8xV{o_KrPPED83A1;K(n8Z}~}M`CZWVlRLi&{$#xg@}q+v15x0Vu{#$ z7sS}h{om~F^}V~@yCc8k|IOaboAzer&3oUo1H)-RDfyFu-!0TDebH%QMZ9GPgoWFR zoqm!fi>%l^LcMaks%v4k-Lnr{*D)L4(u14)$+}1QUwwqxDtV^m{x?&lW45*4XjRmz zF-Nud0N=JpG=9Ohs;EniH*XLSfR`^}E1VcNu5Ybcc=81P{x(xemzaanrI~OE+kT;{ zN6ngC|5H4DfCu`sixoqM4ya$B37<aU{(YP{f!J8QeQRP1JJ@wVhlXfa9_8~R|0}$@ zg<Gd^Y8$qFzz2~9(U=UlA-Wac{QMcihvUHm8{V3*5DUM;S4>I;{CiNH2OLpyxB zUhgG!qb^;T&Ft-&ydMKrVI2u!KLF>#P>Xf$#LgYqVeNg&mBUXzQGJdGFOce@WJXC) zD)Ih3UcA7gN4R+t=g%W0#Rm4J3%6{EI(1OCES#N@BL`l;#^cAhdKITn<J2k9Mcf<5 zvjBJDJ1zmEP1rx)*zUv?Rat!*7|EF!ZN(=xLL+y$yTY|HDi=oKT*&nrukYZ_pZGHY z30ttmaLE%3tU+ASpVb$D=2R6Xvgi&9fJrPbGMqby`SWdHc7_@?j!&B=$j6Rh-8!3S zZPf}t|18K2SW+djI7i!f0{3vQq@tu|Dn0qci5M_IUj;GZk|mftS@f!Tk(aFD3*RsB zh2iMm_<J!HPrw9y%IMDi{4psNsq}cPkt-LvcD0cy8GgpkK?o8We&1>aasVAzy-1Q8 z^I0Z17z-8%@?Z>Jg;j#th%6%i!s5jwd&9dpid%c7S+mfs8`V+jRN~Ee+7e`CVdqZ7 z#IQ7A0bE@%bSQfFM(*53=RACf=x9Vm;o?P|ORzsr^&dwTrr>FAYz{9s6d{W~=tDlx zfE-^J<g|rQs5WX3!l3gwPyVS#8DCmtRJ~>FWlrPtRb1uU9XPkM4Z3zc4ZNlt%gMIV zsy-o|nW$8INXWW8`uE4BO9E5eyN4r3aPS~5Ulv9k958PlA|mvZw?Zqj^(c(unSvA? zIKY-t_To_h1!yz{DPQAj!?XQ`zx<(ce9F$mN;U$ekvS?a!l+R=dQ`Rwg``=2ej29m zgWobN(;1G8#PjF8sRv+yRadG|foF=$OcsFJ$e_<XBSVpq0r4*rnQ!q{XAM1Q_wLxd znWZ~#ZyCqPpPy}i;skRQ6HGxURt!NwxNw2dWq|^G-!-WmEgvU=FiopEs_(+CwOFfW z3i8Zfe+8xEsZ*IiH{ekNHU7XKBQetEClY9U8x;;MTcS`Q8|miW>;!*_&Yj`tXcMh! zvQVE{>oRtHkYn^{tXzpac^Dnku8oo<;pT?s%~7QaN|eB)Nx}k(j1eO=n$ck|_LfKa zYuDiGi!Z-KwQ6Y5f-Nmq4izh6`gCDtHB_VB%b<+m@hH01V2#jNv<Nk7*yPp`Q1RNf zZJ0e<_IiOSl%{759<1TdU<5D068#yUJ~6)FCsVNoK0bU+q59#2&WJPndOE||S>eq7 z4L&D0Q7$ForV#3Z9%P)`xGgNMSreN!X$a3WYSqH2Q|go4!JYY-?*%UxxX>2lOT|#E z9_mrLrts6OBIh7VqEG>5Av-~S%9t77<NLEX+Xih&ro0s#%(#&}bJ#FUn1G2Bnb4>a zyG?AYuyht?^+P|~9!H-n2p%4`P+Y%0A1B9;9~WG;Ygg;FQs7sv3}a+L`xK-S7>LkN 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 literal 0 HcmV?d00001 diff --git a/assets/lato-light.kayak_font b/assets/lato-light.kayak_font new file mode 100644 index 0000000..d82cd1e --- /dev/null +++ b/assets/lato-light.kayak_font @@ -0,0 +1 @@ +{"atlas":{"type":"msdf","distanceRange":4,"size":64,"width":384,"height":384,"yOrigin":"bottom"},"metrics":{"emSize":1,"lineHeight":1.2,"ascender":0.98699999999999999,"descender":-0.21299999999999999,"underlineY":-0.10000000000000001,"underlineThickness":0.034000000000000002},"glyphs":[{"unicode":32,"advance":0.193},{"unicode":33,"advance":0.32250000000000001,"planeBounds":{"left":0.083125000000000004,"bottom":-0.040625000000000015,"right":0.239375,"top":0.74062499999999998},"atlasBounds":{"left":359.5,"bottom":20.5,"right":369.5,"top":70.5}},{"unicode":34,"advance":0.36699999999999999,"planeBounds":{"left":0.058250000000000003,"bottom":0.43099999999999999,"right":0.30825000000000002,"top":0.74350000000000005},"atlasBounds":{"left":51.5,"bottom":312.5,"right":67.5,"top":332.5}},{"unicode":35,"advance":0.57999999999999996,"planeBounds":{"left":0.01125,"bottom":-0.036874999999999991,"right":0.57374999999999998,"top":0.74437500000000001},"atlasBounds":{"left":158.5,"bottom":179.5,"right":194.5,"top":229.5}},{"unicode":36,"advance":0.57999999999999996,"planeBounds":{"left":0.038687500000000027,"bottom":-0.16506249999999995,"right":0.55431249999999999,"top":0.8505625},"atlasBounds":{"left":232.5,"bottom":318.5,"right":265.5,"top":383.5}},{"unicode":37,"advance":0.76700000000000002,"planeBounds":{"left":0.0082499999999999969,"bottom":-0.044937500000000012,"right":0.75824999999999998,"top":0.75193750000000004},"atlasBounds":{"left":0.5,"bottom":76.5,"right":48.5,"top":127.5}},{"unicode":38,"advance":0.6915,"planeBounds":{"left":0.015937500000000004,"bottom":-0.044687499999999984,"right":0.71906250000000005,"top":0.75218750000000001},"atlasBounds":{"left":68.5,"bottom":294.5,"right":113.5,"top":345.5}},{"unicode":39,"advance":0.2215,"planeBounds":{"left":0.056062500000000008,"bottom":0.43099999999999999,"right":0.16543750000000002,"top":0.74350000000000005},"atlasBounds":{"left":0.5,"bottom":3.5,"right":7.5,"top":23.5}},{"unicode":40,"advance":0.29999999999999999,"planeBounds":{"left":0.050562500000000003,"bottom":-0.16912499999999997,"right":0.28493750000000001,"top":0.79962500000000003},"atlasBounds":{"left":51.5,"bottom":249.5,"right":66.5,"top":311.5}},{"unicode":41,"advance":0.29999999999999999,"planeBounds":{"left":0.014562500000000004,"bottom":-0.16912499999999997,"right":0.24893750000000001,"top":0.79962500000000003},"atlasBounds":{"left":51.5,"bottom":186.5,"right":66.5,"top":248.5}},{"unicode":42,"advance":0.40000000000000002,"planeBounds":{"left":0.027375000000000014,"bottom":0.41000000000000003,"right":0.37112499999999998,"top":0.78500000000000003},"atlasBounds":{"left":115.5,"bottom":2.5,"right":137.5,"top":26.5}},{"unicode":43,"advance":0.57999999999999996,"planeBounds":{"left":0.015812500000000014,"bottom":0.05350000000000002,"right":0.56268750000000001,"top":0.61599999999999999},"atlasBounds":{"left":158.5,"bottom":91.5,"right":193.5,"top":127.5}},{"unicode":44,"advance":0.19750000000000001,"planeBounds":{"left":0.021125000000000001,"bottom":-0.16137499999999999,"right":0.177375,"top":0.11987500000000001},"atlasBounds":{"left":8.5,"bottom":5.5,"right":18.5,"top":23.5}},{"unicode":45,"advance":0.33250000000000002,"planeBounds":{"left":0.017812499999999992,"bottom":0.24206250000000001,"right":0.31468750000000001,"top":0.35143750000000001},"atlasBounds":{"left":19.5,"bottom":5.5,"right":38.5,"top":12.5}},{"unicode":46,"advance":0.19750000000000001,"planeBounds":{"left":0.020625000000000001,"bottom":-0.039375,"right":0.176875,"top":0.11687500000000001},"atlasBounds":{"left":19.5,"bottom":13.5,"right":29.5,"top":23.5}},{"unicode":47,"advance":0.35649999999999998,"planeBounds":{"left":-0.03418750000000001,"bottom":-0.079124999999999959,"right":0.38768750000000002,"top":0.764625},"atlasBounds":{"left":330.5,"bottom":204.5,"right":357.5,"top":258.5}},{"unicode":48,"advance":0.57999999999999996,"planeBounds":{"left":0.00093750000000000354,"bottom":-0.044437500000000012,"right":0.57906250000000004,"top":0.75243749999999998},"atlasBounds":{"left":158.5,"bottom":230.5,"right":195.5,"top":281.5}},{"unicode":49,"advance":0.57999999999999996,"planeBounds":{"left":0.086625000000000021,"bottom":-0.03537499999999999,"right":0.55537500000000006,"top":0.74587500000000007},"atlasBounds":{"left":299.5,"bottom":295.5,"right":329.5,"top":345.5}},{"unicode":50,"advance":0.57999999999999996,"planeBounds":{"left":0.027125000000000007,"bottom":-0.032874999999999988,"right":0.55837500000000007,"top":0.74837500000000001},"atlasBounds":{"left":197.5,"bottom":246.5,"right":231.5,"top":296.5}},{"unicode":51,"advance":0.57999999999999996,"planeBounds":{"left":0.028125000000000008,"bottom":-0.044687499999999984,"right":0.55937500000000007,"top":0.75218750000000001},"atlasBounds":{"left":197.5,"bottom":194.5,"right":231.5,"top":245.5}},{"unicode":52,"advance":0.57999999999999996,"planeBounds":{"left":-0.001625000000000016,"bottom":-0.036374999999999991,"right":0.59212500000000001,"top":0.74487500000000006},"atlasBounds":{"left":115.5,"bottom":27.5,"right":153.5,"top":77.5}},{"unicode":53,"advance":0.57999999999999996,"planeBounds":{"left":0.037999999999999999,"bottom":-0.040874999999999988,"right":0.53800000000000003,"top":0.74037500000000001},"atlasBounds":{"left":232.5,"bottom":114.5,"right":264.5,"top":164.5}},{"unicode":54,"advance":0.57999999999999996,"planeBounds":{"left":0.030125000000000009,"bottom":-0.040874999999999988,"right":0.56137499999999996,"top":0.74037500000000001},"atlasBounds":{"left":197.5,"bottom":143.5,"right":231.5,"top":193.5}},{"unicode":55,"advance":0.57999999999999996,"planeBounds":{"left":0.026812500000000013,"bottom":-0.036874999999999991,"right":0.57368750000000002,"top":0.74437500000000001},"atlasBounds":{"left":158.5,"bottom":40.5,"right":193.5,"top":90.5}},{"unicode":56,"advance":0.57999999999999996,"planeBounds":{"left":0.024374999999999983,"bottom":-0.044687499999999984,"right":0.55562500000000004,"top":0.75218750000000001},"atlasBounds":{"left":197.5,"bottom":91.5,"right":231.5,"top":142.5}},{"unicode":57,"advance":0.57999999999999996,"planeBounds":{"left":0.0474375,"bottom":-0.032874999999999988,"right":0.56306250000000002,"top":0.74837500000000001},"atlasBounds":{"left":232.5,"bottom":267.5,"right":265.5,"top":317.5}},{"unicode":58,"advance":0.23750000000000002,"planeBounds":{"left":0.040625000000000001,"bottom":-0.043250000000000004,"right":0.19687499999999999,"top":0.51924999999999999},"atlasBounds":{"left":330.5,"bottom":77.5,"right":340.5,"top":113.5}},{"unicode":59,"advance":0.23750000000000002,"planeBounds":{"left":0.040625000000000001,"bottom":-0.16525000000000001,"right":0.19687499999999999,"top":0.52224999999999999},"atlasBounds":{"left":51.5,"bottom":3.5,"right":61.5,"top":47.5}},{"unicode":60,"advance":0.57999999999999996,"planeBounds":{"left":0.048750000000000002,"bottom":0.10112500000000002,"right":0.48625000000000002,"top":0.56987500000000002},"atlasBounds":{"left":330.5,"bottom":353.5,"right":358.5,"top":383.5}},{"unicode":61,"advance":0.57999999999999996,"planeBounds":{"left":0.047562500000000014,"bottom":0.20493749999999999,"right":0.53193750000000006,"top":0.47056249999999999},"atlasBounds":{"left":197.5,"bottom":6.5,"right":228.5,"top":23.5}},{"unicode":62,"advance":0.57999999999999996,"planeBounds":{"left":0.09425,"bottom":0.10112500000000002,"right":0.53175000000000006,"top":0.56987500000000002},"atlasBounds":{"left":330.5,"bottom":259.5,"right":358.5,"top":289.5}},{"unicode":63,"advance":0.3705,"planeBounds":{"left":-0.019124999999999989,"bottom":-0.044437500000000012,"right":0.387125,"top":0.75243749999999998},"atlasBounds":{"left":330.5,"bottom":152.5,"right":356.5,"top":203.5}},{"unicode":64,"advance":0.82150000000000001,"planeBounds":{"left":0.021125000000000015,"bottom":-0.15643750000000001,"right":0.80237500000000006,"top":0.70293749999999999},"atlasBounds":{"left":0.5,"bottom":277.5,"right":50.5,"top":332.5}},{"unicode":65,"advance":0.64449999999999996,"planeBounds":{"left":-0.029062500000000002,"bottom":-0.036874999999999991,"right":0.67406250000000001,"top":0.74437500000000001},"atlasBounds":{"left":68.5,"bottom":243.5,"right":113.5,"top":293.5}},{"unicode":66,"advance":0.64100000000000001,"planeBounds":{"left":0.073374999999999982,"bottom":-0.036874999999999991,"right":0.60462499999999997,"top":0.74437500000000001},"atlasBounds":{"left":197.5,"bottom":40.5,"right":231.5,"top":90.5}},{"unicode":67,"advance":0.70350000000000001,"planeBounds":{"left":0.02662500000000001,"bottom":-0.044687499999999984,"right":0.68287500000000001,"top":0.75218750000000001},"atlasBounds":{"left":68.5,"bottom":37.5,"right":110.5,"top":88.5}},{"unicode":68,"advance":0.76000000000000001,"planeBounds":{"left":0.066812500000000011,"bottom":-0.036874999999999991,"right":0.73868750000000005,"top":0.74437500000000001},"atlasBounds":{"left":68.5,"bottom":89.5,"right":111.5,"top":139.5}},{"unicode":69,"advance":0.59099999999999997,"planeBounds":{"left":0.067000000000000004,"bottom":-0.036874999999999991,"right":0.56700000000000006,"top":0.74437500000000001},"atlasBounds":{"left":266.5,"bottom":333.5,"right":298.5,"top":383.5}},{"unicode":70,"advance":0.57200000000000006,"planeBounds":{"left":0.067000000000000004,"bottom":-0.036874999999999991,"right":0.56700000000000006,"top":0.74437500000000001},"atlasBounds":{"left":232.5,"bottom":12.5,"right":264.5,"top":62.5}},{"unicode":71,"advance":0.74850000000000005,"planeBounds":{"left":0.024000000000000021,"bottom":-0.044687499999999984,"right":0.71150000000000002,"top":0.75218750000000001},"atlasBounds":{"left":68.5,"bottom":140.5,"right":112.5,"top":191.5}},{"unicode":72,"advance":0.75600000000000001,"planeBounds":{"left":0.07331250000000003,"bottom":-0.036874999999999991,"right":0.6826875,"top":0.74437500000000001},"atlasBounds":{"left":115.5,"bottom":180.5,"right":154.5,"top":230.5}},{"unicode":73,"advance":0.29899999999999999,"planeBounds":{"left":0.086750000000000008,"bottom":-0.036874999999999991,"right":0.21174999999999999,"top":0.74437500000000001},"atlasBounds":{"left":341.5,"bottom":63.5,"right":349.5,"top":113.5}},{"unicode":74,"advance":0.45400000000000001,"planeBounds":{"left":0.0092499999999999961,"bottom":-0.040874999999999988,"right":0.38424999999999998,"top":0.74037500000000001},"atlasBounds":{"left":359.5,"bottom":284.5,"right":383.5,"top":334.5}},{"unicode":75,"advance":0.66000000000000003,"planeBounds":{"left":0.083874999999999991,"bottom":-0.036374999999999991,"right":0.67762500000000003,"top":0.74487500000000006},"atlasBounds":{"left":158.5,"bottom":333.5,"right":196.5,"top":383.5}},{"unicode":76,"advance":0.51150000000000007,"planeBounds":{"left":0.071687500000000001,"bottom":-0.036874999999999991,"right":0.52481250000000002,"top":0.74437500000000001},"atlasBounds":{"left":299.5,"bottom":102.5,"right":328.5,"top":152.5}},{"unicode":77,"advance":0.90900000000000003,"planeBounds":{"left":0.071687500000000029,"bottom":-0.036874999999999991,"right":0.83731250000000002,"top":0.74437500000000001},"atlasBounds":{"left":0.5,"bottom":128.5,"right":49.5,"top":178.5}},{"unicode":78,"advance":0.75600000000000001,"planeBounds":{"left":0.07331250000000003,"bottom":-0.036874999999999991,"right":0.6826875,"top":0.74437500000000001},"atlasBounds":{"left":115.5,"bottom":129.5,"right":154.5,"top":179.5}},{"unicode":79,"advance":0.79749999999999999,"planeBounds":{"left":0.023749999999999993,"bottom":-0.044437500000000012,"right":0.77375000000000005,"top":0.75243749999999998},"atlasBounds":{"left":0.5,"bottom":24.5,"right":48.5,"top":75.5}},{"unicode":80,"advance":0.59350000000000003,"planeBounds":{"left":0.086750000000000008,"bottom":-0.036874999999999991,"right":0.58674999999999999,"top":0.74437500000000001},"atlasBounds":{"left":232.5,"bottom":63.5,"right":264.5,"top":113.5}},{"unicode":81,"advance":0.79749999999999999,"planeBounds":{"left":0.022625000000000006,"bottom":-0.18899999999999997,"right":0.80387500000000001,"top":0.74850000000000005},"atlasBounds":{"left":0.5,"bottom":216.5,"right":50.5,"top":276.5}},{"unicode":82,"advance":0.63100000000000001,"planeBounds":{"left":0.082750000000000004,"bottom":-0.036874999999999991,"right":0.64524999999999999,"top":0.74437500000000001},"atlasBounds":{"left":158.5,"bottom":128.5,"right":194.5,"top":178.5}},{"unicode":83,"advance":0.52249999999999996,"planeBounds":{"left":0.01125,"bottom":-0.044687499999999984,"right":0.51124999999999998,"top":0.75218750000000001},"atlasBounds":{"left":232.5,"bottom":165.5,"right":264.5,"top":216.5}},{"unicode":84,"advance":0.58450000000000002,"planeBounds":{"left":-0.020250000000000008,"bottom":-0.036874999999999991,"right":0.60475000000000001,"top":0.74437500000000001},"atlasBounds":{"left":115.5,"bottom":231.5,"right":155.5,"top":281.5}},{"unicode":85,"advance":0.73350000000000004,"planeBounds":{"left":0.061812500000000013,"bottom":-0.041125000000000016,"right":0.67118750000000005,"top":0.74012500000000003},"atlasBounds":{"left":115.5,"bottom":78.5,"right":154.5,"top":128.5}},{"unicode":86,"advance":0.64449999999999996,"planeBounds":{"left":-0.029312499999999971,"bottom":-0.036874999999999991,"right":0.67381250000000004,"top":0.74437500000000001},"atlasBounds":{"left":68.5,"bottom":192.5,"right":113.5,"top":242.5}},{"unicode":87,"advance":0.98699999999999999,"planeBounds":{"left":-0.030187499999999985,"bottom":-0.036874999999999991,"right":1.0166875,"top":0.74437500000000001},"atlasBounds":{"left":0.5,"bottom":333.5,"right":67.5,"top":383.5}},{"unicode":88,"advance":0.59950000000000003,"planeBounds":{"left":-0.028625000000000022,"bottom":-0.036874999999999991,"right":0.62762499999999999,"top":0.74437500000000001},"atlasBounds":{"left":115.5,"bottom":333.5,"right":157.5,"top":383.5}},{"unicode":89,"advance":0.59950000000000003,"planeBounds":{"left":-0.020562499999999994,"bottom":-0.036874999999999991,"right":0.62006249999999996,"top":0.74437500000000001},"atlasBounds":{"left":115.5,"bottom":282.5,"right":156.5,"top":332.5}},{"unicode":90,"advance":0.63300000000000001,"planeBounds":{"left":0.02262500000000001,"bottom":-0.036874999999999991,"right":0.61637500000000001,"top":0.74437500000000001},"atlasBounds":{"left":158.5,"bottom":282.5,"right":196.5,"top":332.5}},{"unicode":91,"advance":0.29999999999999999,"planeBounds":{"left":0.049812500000000003,"bottom":-0.16331249999999997,"right":0.28418749999999998,"top":0.78981250000000003},"atlasBounds":{"left":51.5,"bottom":124.5,"right":66.5,"top":185.5}},{"unicode":92,"advance":0.35749999999999998,"planeBounds":{"left":-0.035687500000000011,"bottom":-0.079124999999999959,"right":0.38618750000000002,"top":0.764625},"atlasBounds":{"left":266.5,"bottom":0.5,"right":293.5,"top":54.5}},{"unicode":93,"advance":0.29999999999999999,"planeBounds":{"left":0.015562500000000002,"bottom":-0.16331249999999997,"right":0.24993750000000001,"top":0.78981250000000003},"atlasBounds":{"left":51.5,"bottom":62.5,"right":66.5,"top":123.5}},{"unicode":94,"advance":0.57999999999999996,"planeBounds":{"left":0.068250000000000005,"bottom":0.36625000000000002,"right":0.50575000000000003,"top":0.74124999999999996},"atlasBounds":{"left":330.5,"bottom":328.5,"right":358.5,"top":352.5}},{"unicode":95,"advance":0.39400000000000002,"planeBounds":{"left":-0.037374999999999992,"bottom":-0.1741875,"right":0.43137500000000001,"top":-0.064812499999999995},"atlasBounds":{"left":232.5,"bottom":4.5,"right":262.5,"top":11.5}},{"unicode":96,"advance":0.29249999999999998,"planeBounds":{"left":0.010625000000000001,"bottom":0.54643750000000002,"right":0.229375,"top":0.74956250000000002},"atlasBounds":{"left":51.5,"bottom":48.5,"right":65.5,"top":61.5}},{"unicode":97,"advance":0.48649999999999999,"planeBounds":{"left":0.016749999999999994,"bottom":-0.040062499999999994,"right":0.45424999999999999,"top":0.5380625},"atlasBounds":{"left":330.5,"bottom":290.5,"right":358.5,"top":327.5}},{"unicode":98,"advance":0.54600000000000004,"planeBounds":{"left":0.052062500000000018,"bottom":-0.037937500000000006,"right":0.53643750000000001,"top":0.75893750000000004},"atlasBounds":{"left":266.5,"bottom":232.5,"right":297.5,"top":283.5}},{"unicode":99,"advance":0.45500000000000002,"planeBounds":{"left":0.0094375000000000032,"bottom":-0.039562499999999994,"right":0.46256249999999999,"top":0.53856250000000006},"atlasBounds":{"left":299.5,"bottom":205.5,"right":328.5,"top":242.5}},{"unicode":100,"advance":0.54600000000000004,"planeBounds":{"left":0.0095625000000000172,"bottom":-0.037937500000000006,"right":0.49393750000000003,"top":0.75893750000000004},"atlasBounds":{"left":266.5,"bottom":142.5,"right":297.5,"top":193.5}},{"unicode":101,"advance":0.51100000000000001,"planeBounds":{"left":0.011812499999999993,"bottom":-0.039562499999999994,"right":0.4961875,"top":0.53856250000000006},"atlasBounds":{"left":266.5,"bottom":194.5,"right":297.5,"top":231.5}},{"unicode":102,"advance":0.32200000000000001,"planeBounds":{"left":-0.016687500000000008,"bottom":-0.032374999999999987,"right":0.34268750000000003,"top":0.74887500000000007},"atlasBounds":{"left":359.5,"bottom":195.5,"right":382.5,"top":245.5}},{"unicode":103,"advance":0.50450000000000006,"planeBounds":{"left":0.0021875000000000319,"bottom":-0.2225625,"right":0.51781250000000001,"top":0.5430625},"atlasBounds":{"left":232.5,"bottom":217.5,"right":265.5,"top":266.5}},{"unicode":104,"advance":0.54100000000000004,"planeBounds":{"left":0.04212500000000001,"bottom":-0.034687499999999989,"right":0.51087499999999997,"top":0.76218750000000002},"atlasBounds":{"left":299.5,"bottom":243.5,"right":329.5,"top":294.5}},{"unicode":105,"advance":0.23750000000000002,"planeBounds":{"left":0.041125000000000002,"bottom":-0.033874999999999988,"right":0.19737499999999999,"top":0.74737500000000001},"atlasBounds":{"left":330.5,"bottom":26.5,"right":340.5,"top":76.5}},{"unicode":106,"advance":0.23550000000000001,"planeBounds":{"left":-0.063562500000000008,"bottom":-0.21987500000000001,"right":0.20206250000000001,"top":0.74887500000000007},"atlasBounds":{"left":307.5,"bottom":2.5,"right":324.5,"top":64.5}},{"unicode":107,"advance":0.49199999999999999,"planeBounds":{"left":0.050437500000000003,"bottom":-0.034687499999999989,"right":0.50356250000000002,"top":0.76218750000000002},"atlasBounds":{"left":299.5,"bottom":153.5,"right":328.5,"top":204.5}},{"unicode":108,"advance":0.23750000000000002,"planeBounds":{"left":0.056250000000000001,"bottom":-0.034687499999999989,"right":0.18124999999999999,"top":0.76218750000000002},"atlasBounds":{"left":341.5,"bottom":11.5,"right":349.5,"top":62.5}},{"unicode":109,"advance":0.79549999999999998,"planeBounds":{"left":0.044625000000000005,"bottom":-0.03631249999999997,"right":0.76337500000000003,"top":0.54181250000000003},"atlasBounds":{"left":68.5,"bottom":346.5,"right":114.5,"top":383.5}},{"unicode":110,"advance":0.54100000000000004,"planeBounds":{"left":0.04212500000000001,"bottom":-0.03631249999999997,"right":0.51087499999999997,"top":0.54181250000000003},"atlasBounds":{"left":299.5,"bottom":346.5,"right":329.5,"top":383.5}},{"unicode":111,"advance":0.54100000000000004,"planeBounds":{"left":0.0046250000000000076,"bottom":-0.039562499999999994,"right":0.53587499999999999,"top":0.53856250000000006},"atlasBounds":{"left":197.5,"bottom":297.5,"right":231.5,"top":334.5}},{"unicode":112,"advance":0.53500000000000003,"planeBounds":{"left":0.046812500000000014,"bottom":-0.20999999999999996,"right":0.53118750000000003,"top":0.54000000000000004},"atlasBounds":{"left":266.5,"bottom":284.5,"right":297.5,"top":332.5}},{"unicode":113,"advance":0.54600000000000004,"planeBounds":{"left":0.0095625000000000172,"bottom":-0.20999999999999996,"right":0.49393750000000003,"top":0.54000000000000004},"atlasBounds":{"left":266.5,"bottom":93.5,"right":297.5,"top":141.5}},{"unicode":114,"advance":0.39700000000000002,"planeBounds":{"left":0.044062500000000018,"bottom":-0.036062499999999997,"right":0.4034375,"top":0.5420625},"atlasBounds":{"left":359.5,"bottom":246.5,"right":382.5,"top":283.5}},{"unicode":115,"advance":0.42999999999999999,"planeBounds":{"left":0.0078750000000000087,"bottom":-0.040312499999999966,"right":0.41412500000000002,"top":0.53781250000000003},"atlasBounds":{"left":330.5,"bottom":114.5,"right":356.5,"top":151.5}},{"unicode":116,"advance":0.35649999999999998,"planeBounds":{"left":-0.011500000000000007,"bottom":-0.042999999999999976,"right":0.36349999999999999,"top":0.70699999999999996},"atlasBounds":{"left":359.5,"bottom":335.5,"right":383.5,"top":383.5}},{"unicode":117,"advance":0.54100000000000004,"planeBounds":{"left":0.029875000000000009,"bottom":-0.04431249999999997,"right":0.49862499999999998,"top":0.53381250000000002},"atlasBounds":{"left":266.5,"bottom":55.5,"right":296.5,"top":92.5}},{"unicode":118,"advance":0.48699999999999999,"planeBounds":{"left":-0.022125000000000016,"bottom":-0.032499999999999973,"right":0.50912500000000005,"top":0.53000000000000003},"atlasBounds":{"left":158.5,"bottom":3.5,"right":192.5,"top":39.5}},{"unicode":119,"advance":0.73699999999999999,"planeBounds":{"left":-0.022125000000000016,"bottom":-0.03125,"right":0.75912500000000005,"top":0.53125},"atlasBounds":{"left":0.5,"bottom":179.5,"right":50.5,"top":215.5}},{"unicode":120,"advance":0.46050000000000002,"planeBounds":{"left":-0.019750000000000007,"bottom":-0.032499999999999973,"right":0.48025000000000001,"top":0.53000000000000003},"atlasBounds":{"left":68.5,"bottom":0.5,"right":100.5,"top":36.5}},{"unicode":121,"advance":0.48699999999999999,"planeBounds":{"left":-0.022374999999999985,"bottom":-0.21425,"right":0.50887499999999997,"top":0.53575000000000006},"atlasBounds":{"left":197.5,"bottom":335.5,"right":231.5,"top":383.5}},{"unicode":122,"advance":0.45200000000000001,"planeBounds":{"left":-0.0015625000000000001,"bottom":-0.032499999999999973,"right":0.45156250000000003,"top":0.53000000000000003},"atlasBounds":{"left":299.5,"bottom":65.5,"right":328.5,"top":101.5}},{"unicode":123,"advance":0.29999999999999999,"planeBounds":{"left":-0.0011249999999999876,"bottom":-0.16331249999999997,"right":0.28012500000000001,"top":0.78981250000000003},"atlasBounds":{"left":359.5,"bottom":133.5,"right":377.5,"top":194.5}},{"unicode":124,"advance":0.29999999999999999,"planeBounds":{"left":0.095062500000000008,"bottom":-0.20874999999999999,"right":0.20443749999999999,"top":0.79125000000000001},"atlasBounds":{"left":299.5,"bottom":0.5,"right":306.5,"top":64.5}},{"unicode":125,"advance":0.29999999999999999,"planeBounds":{"left":0.019625000000000014,"bottom":-0.16331249999999997,"right":0.300875,"top":0.78981250000000003},"atlasBounds":{"left":359.5,"bottom":71.5,"right":377.5,"top":132.5}},{"unicode":126,"advance":0.57999999999999996,"planeBounds":{"left":0.032187500000000029,"bottom":0.17806250000000001,"right":0.54781250000000004,"top":0.41243750000000001},"atlasBounds":{"left":197.5,"bottom":24.5,"right":230.5,"top":39.5}}],"kerning":[]} diff --git a/assets/lato-light.png b/assets/lato-light.png new file mode 100644 index 0000000000000000000000000000000000000000..c0810e29b4cec4bcc92c8184cc1177386676d901 GIT binary patch literal 106104 zcmV*aKvlnqP)<h;3K|Lk000e1NJLTq00Dpi00Dpq0ssI2E2Sdn00EvqNkl<Zcmd?~ zdu(Itn&*W-%U-_5_e&gKV&`I~a;@5DpIztd?$f7t{eHjz(+rG8J%iLU1A+!5{y-pv zXlWQgBU&wSlNtd-Ga3yDiS7n8s9`j;252Uy_wIB0?5e$YRpnB-r;_**$CvmL+wq<6 zyWZtxCvg(nN$u0qeCt~)w%5Df_g&BXJfBA(8YlW;#~;(65(XLZi$tGwuHtZ$wg=wH z*F>Lpd`3$|FFJM&xYJwI9`!*<p9u5`(Q|wtdOGB@!pM8rB6>;mO7f5KeYq2hPl;AL z-h0$H$KW-hx3d3#|A2l#%s)?L8RAt3S+YR%N0RYo|4@EH80sA|JyBR6@cqI)8Re%( zQ0(SWO!cf0>V2<=<shF$nfbGaP4*+Rd3ADfbu+k1zkmCvO3&MUdH<xMdOj0j=fZtS zq_5Q|7NctQp>am+ibxu-w`jE@bsXg~9Us#pX>yXr#z@*Q-+6k6(yc9{v1d#f|8C0R zAd7|cdQz*Y*`!K^3I#epzk4||nXP0skU>Kld~HwzlNZ>Nh1(w4owwS^Ya_Bs=4nNZ z1`940eLMvzXe8;q<3u}Hm^-7U6vOdVRqw{n#y~4tt>ko)D7Tb#2|&yjv}Q=mvTbl% zkOS=uW%87N&>QM>G%<no_^b)(O8flYtr!w+R<GUO^mv*oRg<WRd++X8a#NmLm=6!u zJ4aB1pM`O&H)&CK$jUxKx+8Cq;94!IRMcv*p{S``jxH}h%m%wMnOMcawMp6x-a5=p zZZCONq~c#+-#_tdvH7AYQu-GtO|k=csjV$~`I6cX#4qR*4i{Ed3LXyw5F&-lU0Zv2 zIF^@bX$k2>ojs?&piGNewDn?IDRn~D=eL9{6af2zatQ{>>m|3FZNp$-00Iuc0&Faq zWN=I*Zmxx}Bc_Nf05nEp96)ud13)>-r6?7rc$A_yAI!hV?~=_*pIF(mj6r}AOBw|C z)hnvkA07v2krtO}*+C8}Dd@@3?kh^A)Ff45Pur_XZRsvC0Nr!yQ&aTh3Hf}aVUdvO zbHdJb9ijNu-?dQu=PB-IoS3GTu605uZ|UtBosIa0IH~V^hh}H1T5W>UCq{`MUmMiE zpFw6bef)7_cD5mkjXE`M4aDE1Ub4{({Qrdyz@Ub57B9BO**VHW_3iGmCe>9S!1(KO zk<G?1!~q0K)oOHc!Ls-4j6IM_J@y`%Ks;~<rNaUAqe)g0eTC|HN>3MPL6oBP<NN3S zP5c)TVU%c=GC!n@o7HOI^psU4>Jc9vB#ovpIayd*Vip8CJfu>IqER|Of5@zWF~afm zDRL6uGAYV@P8pdpzs1r;VGvTkN>z4ie4N5znx1B7iO)b6;>rPp1IN?xI6LF*ZAOQV zY-Ed2WSXV}6d0#*d)+>EIi_uCNlkTQy`(B-DVwAu=yN~^JG4`z;+2iQpd&g0wj={X zj_3FhS%TEb=V^2EVZmj>#^z`aryi!Tgq|Wp5At`9byhVW)M3#5^!bbTuL$}e@+&JW z_<B8X#klj9*4JsBQ~1T-Dlm@6rx}J4RG+H9p*JA)=m5fz&CSvC=Lw4?4*L9<O<yS7 z9M|r=?G<$y<aA=H=J&qW)LNRW>=16~FI`1X=M*J9CWF4{p$}W(w{TGygam1|1mq*y zf7|0>NsDv`@5jd*Hru7i)YRz&l}g)e>e0*qAY?BJ_2h&O4p;&sr5{NkKZlM2pctpm zEda8R1!b~AD<1L;K%YO)|HuI1UZl)iz5a)PsKH^u4+W6hU4T8FLNHipjk8jByBWwI z1|V$A;b1d8dsdIzGh3a__ofRN<Yb3)VI(6fnuP_{wP$816e5d-aS-Q(HiDJ{7@?B@ zx0qC~XAesZnrKff(b5xoGTWF9MMK_{x14uWD&|&8D~iBZ&2GOadopov9F%d80}G+g z=PBRasI-?|+Eo~2qvw%t_F2o~MwUH5CNhDK+@BnNGPe5_Ll3tkwK7zo>Sy=SM^^ie zdk7xT)A8n-ouOxqF=!2}@4htNi!liP!TYIJic&uEA)z{FG>i~yua`L#irb$hB>LPL zw)U+I!c-bfL$7bte!kJr-l)^@TLSPx`2+@i`Qv?r@vqT?)R?5z!#*ou2lFjjU1iNt zr_)~|Z*jJ>v!zhzG!V$5j-0iMsnXOpRSZB{)1}E-w0cu1D<bm#J<DV;1E&EnJxn@X z7djosjX?=OmfO#Yg_v1OE3E$RlC9?{57nrqFi0$CoX!ajAVFXl9$jwtrQ2NugNnss zYpLXRj{zHSr$R;(-y3jYb7t1u^0x5`(#_}H7kl@)_=}=ABdS)OwU(D@exA%`ipA*l zYlfzJoz!Y})R@cfXFV2&2jTFFMR%;mt8D3XX>M=s_;}`zPkq295ZY?77>|v~&xL1V z?kDas!<d@X4QhNvUv+ju2rN{giozfp*{qQ#;|hQ<W2G{39KfA0g&Badk(u2+7S){{ z=0f4-;23h!f9G_<J<A~-5k>Bmm96zf89neZ9V^2EBsFoAgydS{V=qKrFlZD2;ZZby zpD*F{CJqC9R!o1V+Be^aF-WS8CR`DlO?R`|@3pUG`}@u*%K8mT61}58L-h7;RNtxC zweQ`WCGo4YD27B)CoV3w7Z$2>bBB@0@w77$Or(8ZqP-!VkY*}U=}2cLGs-DY3(TB6 zpF>|qQX-{6R%H07(rSC5!x@xtO`e=go^0Dr&giU2#U7|%k%lxJK#VG6y?qfD^Y0V= zR0fcwG^M#S#x8(R<eA}fMiwZFpnyIuS0S4%wEn%q)L)eWgn6^s(Pq`_WdOk$M@Hf1 z&5`1QC<a7vX-r&MsXcwl%5rm)j*lssq<mfmkjX^j<Ahd&UjUrTOMK9#(@#!mkrr2u zR^01PzuaCtJk$eRSf*4WB(6pyKNkvtA^xRH%gRS$L*FP-30!%H485vTI^_&v0GhR0 za}k}wpto;Fi^B}fF!aF9NMxrfqX!I%MsEomJw$;3=MMMw#^RbnpCdZz^8h%JNZ{&? zPlG=|2pDug2MEz{3o~{xC&<UAga=dmI)l{ewp!hQ8!+lr=npPMD75|F?|(-AD>3Mn z8hofk(Itv{QG6;sTRvS{+Fe*Um`lB%{YgxSq4>|~yi8>dAU)}kQ6BP4X{U0txte)- z8MTkBMvfw{-oGDyX@xk7Pd!0~o}buHPKX(uW{>u+bgZ5b06kz3tWc$&*kiv&wAy`2 zl2XZFP|(?OI8>knEAo*6#90FX!H0+WR-s^XdnF_>j|w2ZE6MGQI-_v2Pe2jUc~M+g z5SNx}NZWVsSbZKGu-d3r<v}VHYp{69T8)KnaS?c$j>Tqt+PTD>dwt=}o0W|X4W2tX zqO-Frr-kRxiYpZo1oL+d3z26RS;`_y(4^6+u5G3ZAhKG+pDgDhEKAPM*%eG2HVEX9 z=>zY0OuMhxt8tGexfuHwl;5wQ2i|$N#JICg>+pNJCD9RN2^fZW+&4YzbufwmL)hXF zyF#`|^f~u><M9azXv_nvt-Kq~Rws&fQT#h<b+ZYNHJd7;7TxjQ`@I0tUb*$b7=)fE zii@Is`Rk`ozn+`h{?7KUclVGEQTb?NNU+|)CNc#mfSSFeOVzl_IRD8Ex-60zEfx(E zFdBH#9_Vleoq8vu3_VU6J&LbC+!F#;agq`5e(T6d_WM2b=>n)i6@@{Ij*Qdk=5;>0 zI;_c;%enLO^HwgC`Iy|lEdywKd$d`xr4EDAyOib|#^!I16n{w+KLLa0MUdm|TUIY% z5KgF9trkV2j7M56$Ux)cdau{-@r1@L(|gnJwj-d=n>VzvaeZ>MP;leo0`#G=F>J}P zFfkSP#E~edn417<Q46&v0|*L#Jjv<9eQj5FN=@o6ec}<nf*u$c9YMlfH^Etsp5<kD zcV~H>qX!H+po3c<Ltr^A;&E?$+ULMDK12qOG^si0#w7Z{37a>uA<x$w_-P!?_&94+ zR;z$B((BctS}lrVqwy~_8ZVwUE-&Z;(a*G53SEErM552Z?E$LaEWk&QDE?Dw^~dVP z#W%}S8_&LZ=YF?M+xxVCPUklVWB*&URi?6vRDhAg@9<1bjUh%zO~h@0#)c5}K!-c& z51s%$KX#o&DcXyk_VpK?BiiW=K@Wh$+xpw(Rr*lxPz694YZpKk%TU$Pk-;E?#^oxc z)0uQS-NOHT*6Vg~FyWd`4?8PR&36R`6&#)2-pn5UVi6JkrF#8~%}qkj27@jy`_G$7 z(fjwT)Z+2++1Uw~%j<Avj{N)kj-8!8^ih<}(*8cna=)LZ621w~goiwMZKTD`!N?&% zf&mB)S#7z9Spm@3Uk@Gxj-D`uBc(`WH{GQV-eLrGi>pr^A&n*OFt4oa@2@cKaHA^j znVAD4k+6e7(_ZhG7Yu^?bkV*tnb>fzx8n6Oh_RWN2h`LQI~436iDt94O(sF7Q)@Kp z_iA;!`QqoB^-8l+Y!?yz6s0gRiVfS9A1-(3vwt6+ADcmFnDDPG%)ME9v*upgppAF* zu6^h9=y?{hjMKQE{Bd6>GBLq260dz9fI7rc0CYAv$<XtY@h)^YgU~*2nd4t0`ddl} zG^BxV0O+0oc88`Zt(3I8Q|Gvj0w7Kw?)UFgsZ_e1MuDW~-45mV;Q_?y!=2IJ2cZ8* z)O<Pq|Ga#u+1jFa?{1|J7gGD|3|n$6F1oB%x5d35^WX#y5AWGhEJmlN{86*B=Co_= zHnIURdCK1$d`O2ffXHeK+dj@kNMX>y!5|Tspa~8j=3S$9_mxbay*+wtc|4pu+y{p% zYioi`pFJ92xk^Q55aY+RFXHnuAb1A_5F6_SgW>?tD?QE!GnGpBKZm46bf%|SU4dXI zM!P*{HlOJA6^*7W2tv!}tNnAeO0-h=dxi5qcYa1^F^Zv#-_v_gl^vWypZ!5&^;irN z#or8Rzx?{|zT5aWHr5W;SSK4`USI+YO;R%DPDOa#+U=N&8jZf=f#wc$xKqL4Net-m zbkW0oJ9-rTHqo!}5QuFoDS|<aMT7LWYXG{S3owX#-kEhc9K6);Ey6wmfPolXi$!$i zR63n%;SWB#=M(^KZ&Rx^)T{_BXQI=2{-#5pA{F}%77heDIH&z6tIuNpF<s^Jpn#@O zaKI*$?q77I|Im?4vIXu|y-wLI0|+LVELbfri<!(OGW7)z1X{=d8nao$pUf%%f-%vZ zGLWH5pTmfI_ciV8$R16%Hz(9>2R-oN(em1wilJwn*6|91&d;%tNO-}ZX|GrG`pAc~ zM<U$wpjyoV)be^0Szl+G`xiuMEiTfNCp0@tQ&UyHKU$kO%{VegW5x0h%k>xa=8Grd z&P$zc)o5I`T9b>fGU18Ss6XlxeB(53C;L`>E4Ck#>9apvEFaDwK}88lZqwE#Z8G}w zp3&{IBYRK?=X9P|<x3XNnAuDw<e-Tq)m4GW9q4cXr6wm&PA8*3^<GC$lbXYBUKB*m zpt?*IVW6jazhpX9opofKP8mQ(BbCd;Y-DVV6v}`)>2v|`Y2^U6RB9|U>2@l3Iy)Qc z4f%e+pt@7uCs=vw=x0Q~E48xtV4*CP?B%kfQu$ZR<{uRSB2B(OL$2%Mf^}wu$WS(d z5wM>0w=O~@&LA7vtbVIC7j|*_oS)OHS9cS+OP@?6vU9+=1GWx=*ZXxPyKy)iJ<H4R z`;+Chb#Wc&fwyUUh*|McAcq7GU;I;F(8r)c-unS0(Faa=z41L8r_a6308j93gF$n1 z(fZ8(*2FQEN0Q`)eEG9-O&xBk7sX6Nx6>FKYuN2pkH_lu&IAI-o@tN6>o8Z%hJAzf zKzq1<$mmlTE{Ko9AR@Gr?Tedn7Vg3j+VBNkAiK&&;}|NIrJ<o0Kob)Rbhy*O;7M}w z<fV_{CQ4BSJq>CMx#2j-hCdq8XatS;4>^FY(C3b@^aoHz0DvM&!4C%@g+B29K4VZS zm2PtuQEJ}pRPGJ~AiG@#5S%t)CT48)u4fJ;52#u#S*ziCV6j}r03w11QMF3ab5yTu zwWMXofU~&kxZ=PD0}xrQ5yl`53YB9BOu0oN3UT^`8{x=qLq-oAjnZhkr9YuBNZesw zSvgLutgma<*Jurvd-6~MIV1*o<EP#rgNl!QhjfU7x$7x(Y6(E`rWX_NIqsIlLi6*q zv_wyzV&}U@i<>*z9V~>>N(#xGDpyhmYU(FVLC`dtx|62qtm$+L9#7lvr%)(3lX87G zVl|Qx^il7tL7&6J!^aBhkW|{17*xA!fg3YcSsF6ebUI>bsAXv=$>UL=0|2#wp2^8r zdh+C}z=;AK&Y(Kg2izj277c6#QB<xXlSb5NG?mH|qB%Bh?#|bjlKl#RPy`Btrkn+* z(*pXS;D<|cq%h!uE9y$34_J|EN%UbK-SS;r)oN-s2b`7fL~>!fvq^0Du4n$>)-qGn zjShAKw^~iJx!H8!V`H#Rz@L+>QjzStAL#-}3kH3%n2X2&g8M-kBRPGTcm3AgS6u)- zg4(@7mbk-xl3ZC^)2?y)yrXxc%zb*w0i;VLe8~l$$H%xr-n#&V+`tf@FYN_=ywcN* zL3e9rhDAqW(80mewKdh+CT;G~-jQ&`x|FCTbx6)P?oAQ|tRn;hZR|0VF&2v-*=#!1 zzWQ=s$nEo44<94E_vYX={ez*OAZk$KMh>zh{Fo@XK$9yRK;L-(b|IV3zRsMUoSvLi zy7U<wJzOsUj!DwYD*$S1GzJbJNV-q-5xd+<pEvSf@!Icc1`6h~GwpC#c+F#t`hYt$ zn;BWSJIJAY9_hwErc#FVl-s3@!Ql@kY=bjM?aU~Yy#FyC0AZNEWHRADjUuG9?7PPy zT>uXTAb8wr3(xx$0Kv8E-4EOeQ<%{w9tkPvfor$)$&qBYE9ilvspYjb9YfDLt)rMn zpBM0uDB_Jzc|Beq&_cdLI=nUMy_`|rgvA$MV^72F_FXF=k3u1uo~Cd(o1EL(RBgVc zx7ayiB#!`kP#CZRAS6JW?~A2np+Kb)BCxQ(PcT|%M-O9=vh5hrYR7wnJSIG7-HyHw z01-_(srJ2t<Tr(#U(Dz7`Lk3i7K@!os$E`=Ff9WRk!FI#We%XUMsp&H|FT8_kVKyp z<4Hfg>3+NpAf>i5nvByq!vO>j3JSC@1uom$GJ_=HugswNp#cOY@NIxW8T&8*;u`8e z4QBfA0^$`0*&;S;E<C0HXk(*yB;yWuDH7Q|m(jDcqXc#o-H3+GCZlJ08IEO^*VYZ| zKo9qWUKJ%SG02)o_@;ec8>0&tbVNse29J$#`doOuKvsuc_pC56!Kj8NZwnp&Wb6<D zdPnaVeU#S(fVdkC**&p1IB0`D*(_T;nOxYr0*E02)P7K?2I`!{=qD2TqLi8>eef59 zf3Nsa{`@?hOeRiFs(}E(CnwC+>QK{u2KsOYxoBJSN1)AX_Vd4Rf^=1>@bhyGJ(plh zKe+njA6;+mw*!bWOU{zhImXL=PylhP07D!-+>(?Z(rH)Q?G`wyz|VU9-dPn6I-TWX z8XiD2)PWl5TM>G#3?P-w8u{d-Tv!GW`fsP^5X~-tcFl&Jmkd2H+Vtay#RZ#?xWl}% z63?%!uN&9bXpQ@!E8u)NMHo@00U*!^jOh;`fJ6dN0{&9ZpS!zBgDO0gJf702_cTVa zV>&*dgX@F1n@!nQl}s|Dc3LfbTj;s-zx^!e^Jo|X7h<##r9zaVv5#Z_WP5TlI~k0v zOa=mz96-Gos?~;=I-h4}^Tih{0^8nqiC!?z((EkA^YSH?fS)gK#N?mhSn5i=IkQsU zZD$4m0)0^V0||-D0R*3&$;c@d`OS+9g+cn%tb1G;*}uUFy?f_-fKAR!noYyp9^t^- z4{s`uDRgNDAhKB<R%_(D)0{pWL*=rTv|aifL?(9L((bP8hv;eq%x2CV?$hGR`r6pq zqtS;8N1RCD>WRmFQ$DYOF~&n4RQ;7<00i#%d=0NRp7QdC;Jan9u)MR|ktDe-eHMvv zMrT#3UU|)X03;`yL?5n&q2KZG>GL=klA3;s0f=HzAsTf?W6oGKFc}Rz3kCxIn;1gF z7(@W}t5<YzKmsF>h5ZEd%+jwCXUt2Y()Bv-qdow_5y}iQW*m+nuY4Fk-6P(Ka0M_n zH`$8=6uq%X$qY)*-wU9wbUL;=XHeSN*&E%vn|}mUq#|&_0E8l%v08Hx2d5AG<_$+r zn8J}vB(i(drB8?Hqv%Q+w@oGmJ#ezLytZbN(X&qL?Z>JrG#{L@WN+dJz8Rm7d|=RZ z05L8x$9=x|wp~INi^SbB8kxt&$Yd&)sB}RWdCFfOB#N^81E{ZtVbBMp&*L;tKp6&x zWD+@|a4Zm<417Ep2>5PdsL{B8($iD8vnPuLAg*=3)eZjbP6qV>5NaC?;+}P0I-UAK z0i-a6V}`p&{0Hf#tL1j9IIsYiYW0p;6#_aO)iZVGPZNM3B!mngIBb1>9#%;J3gmK; zBL<*I1N3RD75X5BM%L8?M$vNgEHA@n70}1RxWkPyea!a+OC+NBz@TZbS74+$q{Az) z=m02D_j3B+dapngjfT0YMbR|stb^a^;cB&PHl)$7y82ehU<~>;=<_&Yz@SqGAWkA@ zEb5F#1CznPb6{xVCWh`KwQw^O6}HTET;9&0J^(`IDMh~M%s8EXsrc`EIh(BuAS4ba z4O(B1%4LN?+SHueql~|^s1yJ>otbx?jUkD?#e@5>0#{@JS**6m^C!97SS}X^fN~Om zc7u-HSEK-FWL-@bqp>Y<hk0csRbN?Ow=(Xm(Hi{t;l-gzM9~01@n=52&qqGMrVAi+ zBZ)p|UN0LW(Ff%+xKyO#25GL}QvigD;(jdsqeCA>adr}M1|Uu%S2X5|0Yj64?*{{c z@tYWGwffE@+!KoS%^^1>_We}>P{x{ZIQ*aw>fd6aLgDtAI7*O4D5bY=8GS&S8{$7R z2F<%XeEgjNLPGJ?;jFW>D{SyjzJx&sR;em8sBN_cZPi>Pn9I#_0DTjgIoTD!ot+)# zT5a(4ujj)GyBMUuf<SgV&CLNlaJsp&zGhqF=z;50{~!U0^URO?;?rI~gAEvTNQZcR zb{9VYN}$h}7wCa8b`UihRL73%B-Hc<G8oA?Mq}3p4FsURZTd;yMW2jLA1uAs`+fU^ z#QJ`LJ~DtfiQG{*76?uTer_@laNopGyFCnjZZN2CbngccWqi(t(<yQU+z%j_(WQf# z8|t~~Zo1uS{)oXql}g`P`MMH=ni)OYPnu1T{#hK^2h<szF$M`%+nmk%x2>K?WFnWF zJfHlV`TR?c9xy2VfVch|L@yY9UP#{rp*=Q6!C-!V{+rsrUf(?3TsvpzS*P_H)jrfq zasVX~=6Kwjp7ObTU=aMC-V=7iK6>*$Un1e{3>;`yBo16IQ>kRJkq!AWPU8o3(4wBc zEsC=50#M&7d2w^l&+$Ja(r5MBPd_UFaRDt?NHiXcj!#AdlR*hX&YKt-f<8AG)KC2Z zgr>yn9A0pyoz4kPfy2XFrolaM#N}dF?2^+5NpVBSl@5c%)S`Pr!PfC{--$VZq}9_0 z(tf}oxo7_A5(Ch<)fTo{|G@fR{Dn_`6p48L|DN!xSGnC?_-KFsL9_pdWcZO%Ol3ic z8VsjRPx9b@P9}aKv3Ih!xxKl5xPD2OAND0XXz|6Ty)K3vANd%7B>KP!uQ&b^1JDE4 z1|uPwVm?pj=akLbCoU%f`oI)TAy0PNJKfAzt7TWK)M(reAi7#D?VA7^kv^YOU;04* z?T3x{{Q{|v=!nrrA(1B<^8|sR$-vJA0|C3jAitm9y<_2~0qJv<LAX?|-xF_p2z4&o znE`-67*N1qU<BzSg(GNX5?$_S*UJ4=%Qc~3>plRLot^z)YkwN0(~&N+tBu%n5o@FI zQL9k+b))ewJ9l#q$=2)VKAbM~hKhq6e}M>IrB6tEu5)CafA<$v$usrwZe>TGt5NFq z4)aI?S0o0x<8j}#&u8|5Iuq)NQ;9xR(C5_K88YaU;0e+xnPiWAdJ>w6oSoBog(?CG zJG9g0^`QU==z;OfKoYK&*SX8JPQOg_%Ml4E!^q#H<JAuv+lL8pIiy2IAIXeF6Vd3z zWGoN_h9(068vuk-t=H+Ruey&73gQlf3`D<w<;DO25;6`)+vyZI2(Y`WT|$xqpe|if zx6O<@-08Ht?sjVwa+ONgM%ruy@NxEK%zw%O6b@4)l8;1o!{J}g{`=YU=X>WiTR8kz za=G8h<%+o+y?XVK>Hm`~(cAx3>cM*?v<018=ONFpT+A&WKld7qYzQi|)uN-L5BQRo zmoi-v32%Jb`^4)bpU>+%_4xpx1iWSE_lw0LX2tlE69!M0%QJ7CuZ~wi9|IX|ZQGG> zbV{e!0R)eta(Xqr&LRlE9lZD?#XewEA5V3vAJ75l!vMrd<c&qWlhMFr(Dj|keBNR< zcSjEu0EI#SG|{hhf4vnzWhyHLA8}@!PFD|rt_oZPLHPCkdzmhk%55_v2|1urDOGyK z?Ny$=0U*92>~Lf@I-4m`>1TRILq&X0p}RyPvNf8o5B3gXwphw$i`ebC@P00*1%Tka zy`eVH+b8~AqCd+R#BT_Kp>3F=sfwx6j<rvhmpwp_VpQ{oQzF3`<c-ID(>^c2<MrCS zUVtcG^-5@B9!f}yg9Fy6EEdx1!_SCx<2nmjT;u}aFyE<oc_xbGhXTk5@}!B@yWwqr zz(D=%RHf=3?J@c&B=SXLyFrxxBvFtL8s*hH4Em3WzAyhI-Z4DQK#@kx7dimK8H*w{ z8dt}G9o%|7;|izCol-`n>MpPHIN)_v3V_<qj6%bo)v0_qnM^Wz!eI(W4qi_0?(XgG z+4c_YI)mLFc@73Gasa`I+o<{y|G^**F|D92v<q!&3;%>5fJm+7@m>bSK3K=j=Q)GK zM8X???sa&*6Zq#%co~s6o$gDYKHAx#u`$wW+2?9CJRdeYr<@bwM6ex92#KURd8SsU zMKRTAWEzd~hyWr02>Sm5gP=>g+@T#tAITDlCcz+<8Kb{+he1D;zuyHQUhoV<+O*U8 z1oYuJNG5v*A$!3Nmy2B$uH088%BWPzU30s&96)9>6^qIk<dd>u+L7iogdZB$P6Yns zh|@=MW_NlQ&1bj87*w+B$Zq$7K@oc{=T#VVy#b8$<~6FV(HcV!_mc3mwd@9Z+HILZ zfWZe67$bQiksf!CJ3UT^$CEHjaQck4EReFX!QP}+V@Z_BctWS{@B4kpiNq<L0zfHs zDg_2Ln{cKvi{6J^DpPrwMatBaL)hy6_-!&sI>B$3cnHxpZG%1%fTA*h9<KuL0#K2P zoI&uU<J{@A_W=-R2lxIy;|hFvdG{8o)gA^tbNLm7^#F*kB{3+s*V#sa3g2q@KfGpU z7<$5CT${DX-Y)HO$Fecn(*r<o*k;Q`Y`L6)188e&<kha6eO;)pwR;$}{B(sgNb!}E z9!LYR{p_qQ!NweqJDh%p(_weH;&C^p53ZxBQlYQEri%+YKgSBF7?sZ#@_0hiuir$( zNa}wCfNGiMSi1TBbdz;5Wa=560Z;H?D;RHSVBaQ#em1(Gi+A)60E$uY!2qJ(aEW&h zQ~*?SW)uKjkwPDhMy3xAcL2%s!L{o4cP42c94Lp&*MhZ<jIxc#3h1AZd;wlTAMT0B z?kkf_pFP@Rw*hnj$Y#^nY?0^oTx5j<2tFOKWbR{7jcRMOh7Sxtg3KTnr%$`ht~j9& zAOV<($0PCh|NdW2TmQiN*PYI_H4CRtvpM>-c=p{pmRE?+$q7wNkjF#g;~%-*KXCqI ze<SR0FaDB0{Re3UKtNA|64=Ty9pgGu2>--0XjSqZQW1SB`Hv;HZXH;p;s$MOJnHTS z1yE)T015*Ks2Mn$m2Rum3>+>OyDIb<EM<F!JF9NDjx)$=rF<TDwc0L#GS0^b(4Pb$ zc;HSr%mH+|>zC1kE4UyJ!f!SkFyyk^BP;e?E`acG23=l`yz-R-s#0~G))|0cwag$V zXAu164Ga9ED<0P*625r+e~8DQ{i^Na>kElU1O`1^Jhk4x2Y`g}aR3Mzs&+d6@H6L& zcp>g;xu#lE^E7`(XGuz8Su}PZ`3~p+kuOo{PZxup-#cPDM6M7KjNm8Iba;60BQGCs zfA;|BoX*iJxEGuShr`05AOna~gL`{hrcbRl$inryoG8rSbp;fVNdV%clh(S3i86h% zl)Z1(^c~*@yEEAR$9PWS4tFIRVf5ifJi3DrjlDep2oBrrxri;7GjRZ|t<fV$s+vo> z>@r9r2rG<14uwH)-*(RX@ziXBKE6c4ACKD-p?LheKo49hJ=OvO&suacw_EkZC4S~q ztN#Pl=RewaHQ%|LZg6RWCZ5r=DVjQ_V-I<dYi2T|!w-;Vk{*je=||4ZtM^~rJy@@& zP>7y)0rZj`!+p)|+XE29iysyo8K+YQ5DJA!p$}4*(<jwaJokw|!LB8DK$!~lCIN^u z$m-0zr3@$F08_5^{dniNoBDjjSiT)%?8F3x!!m$O;oVo--96gl0J=UDty}^SW6&qI zT;wATAo%2D#GT%(o(fgE4AROBviC9w>piM`akoG2#?_d$CKC2|oZv@N_tnr1&tmGu zm|AR#jn(GojfT7Ng}dzrabO?$f)xBNeHWQ$C99tFc>Qnan<5pzJqBIL#g{{lzpgK@ z|8Nh0Kp%J}M9xrYERmta83WMv_T5kYr}StV0zerX05r|fU^Y|nQp0%Ra<MB%568*C zlIg>)_KM48;IrB7s{A=$1x`B{diVwgm~wTHL%Q?+w?Q9+K}L_{<F#=aJ$>lI1t<eR zHm2|=_FOKcFsN7@alc)4N~TQZE`#(EgW4;$UIrBk_s`b8Mu7hElGj)E`Qkp`zv?^s zBP*v*Hah}k+P9%ck($)%wpv|Rk2RYc&8E6pAEz%sp9z`>P#{4lyUaYze?%XtNL8a6 z;_!-I4Z4f|47wQ+=&$sjp__{@2U_v=-2Jl8Z+}+0mivykSY!Z&LWf6Rd~TWzeFpk) z-*VPQdSnd)Aj(WR%MORp;b3Se*3dRO-rSUNQm+rbcB9e5plSDHXEujg0Z=7l=&nA% zl&gc#=k_7r27RD#Sf)=noIj52D)h-yzW)Qj4DQ=(z|fT4o(qFP77n1Vzoti2iAr4t z83kea=}K$G+RLDei-9KU#X>(A`N-#Q`*BshRK?>?p7SH=KGXp~pbr?-gqzfCwwldT zI)xADAV@*9%>oswR0V*5p$ob=r}HEwPw3>4f+}2#N=!;W?mbd+@#UcN-IBXs-t|m> zZgl9=8vD;PnIC567Jp9+{Ut3wjJ35#di{HJKY-fQPBTg{FFG<#r;*d)eZx&I7efY8 zQvu14!V~hNg)V@c!VYJg)0x@n&<7PTz<e9{H;DR;+8Qy03CRO17?kM)t0H?GJ$tlw zL`Qc$c5(vxa7P$}KIQ;|4-Q7#ce`)(q5``NGRX|GwA)<<mCHk~b5%H4KQa3F(!O~7 zyU6x<ocZx3EzRiD1E6-Z$zQujMWhQtcuALdSpylK({towjAGc^pa2r?eck)Sa`F9; z<FD&*_}HM-rlvT663KKjl}eqSremSdG|q$Z`E-PG9zo(DgEAcoq@8J}b5cTs&d_pK zI5IdzxQ7&{mc$@y+2t}~HkZrUb^<+MP~MSImL6=r_J(vo|Mduw*pmEPLq7-j{Ep<S z>ff0y78yO^Fil1FUfFgzfZ+RA+S}s*8nf9V&uzKfjKZL7mL4SGO5LC`y9}~$1}&R8 zfH;FLFCVfRLyu%z!oQJF0X>Of2+q~MJJ3BNL=u@BqPo!_7!2xp3b?^*8p(*rddTA? z?>LPktu16JP~n5qM|uYM`R^s){xaPKmxz9YXjSsp-8+Yp|GUALmCyqQwT+?Uw~1&x z8b3KX_4`A<sZ$;3gCqGi0JJw8fHJDggtH0&IUH_>;Er(sAtO0R&|!uYo=_N+3cEvY zx6SQ#w%h=a(^=10I^d)9hj@E~ff2!IB(0WIDpp+8DwRrfe$Ep0Lx|Hya(Xw!xU)xl zxR$AW|HI`nW01`T`|b8z#GcF9Ie=chVw)dc?b}iwwbx~kO`zqKr>$iZ)@Zk72Gwe# zMZipEKlvGeE`0I0kJAU&k=2JpS23U_HFHxfBHQ2_M;oOm@;E?&Bqg8GGmr@M!9MQ+ z(4)}j<`f^@dQ(TbMVepg{prn!>-haLfI^|8qp72#v!mnVW0x=H^-g(bPUmnW+_Bie z8*j@N+DIBy6MUbJh&BcS5E_TVphaiK;UK5e?NqrKfRKnBA?Xnr!5?MUa|R#>Tz7$S zPG|a<-C?d%ogP)_zg{o7Tx7M<*w_^S6^oS3QZmV^0=4~!3Wphbq-(t#k<kO=s0W<_ z2>}4vQ6u&UW6*OBAb4lzVVe`K7f_z^T?RP>L1NGtV#EywjRa|#KIHSq{ePU$bNXCf zK4zS+Ndb_W14wF<*U*dhcTVScWxTABj0Q63N&jurhwHU;{kN|F3?MGjBD_Qv`KQlE zTmh-xp-;650EtIObObrQC<@W*4S7Qev%;XkIvWrHqfYC(x?ay(JMZh)`cxpm&c0GX zy2h&2jX?nffdVpv92uum>u@-2qKg0^4iD~;#2=NWF_&B}o6F_6bU7T3sxzZdj~-7z z+sq7$J_0d5&dS+js_S%@Dpj-9QeR%`3k3}}b9zcAC-nY3BZQQ(4;5es`f$4<yRVG9 zoIdby6YcGB0BOOX=U`AcpO+bQb~eJk+I@<tBh0!+YchjeGJ}j9K<IXF-VB(Xicr-u zed_*X!Uy!giGlGu=$l-HX<q<cQ<=&Ys$9}#m8v3%+_$du;pn62H#;AGk6j$(kkGRv zU4vyBojy>9KJd}jq(mP&I?bNq54y6~JL!FzSXKaZcsR(Mh#q2CqEb;Py6rWWON*(d zrn-F*RKnM}Ip%EkOb|BSz8wZYpa2-etV^5C7G|BzY_k>D*JXYTnTv{$$z29T945Qn zl(U)5){N!x0Tc|<{5(Uz^fXOQUQSFT9Qu^0P|#N@s%EpLR##kxoZX(vOvK}UoCm03 zHq+)Nl}Zm<SEFHzhQk~{@m=p8N6#MZp>GT~SGB4zXxwItL~Oa7ivtKG!p#rJpmCW& z2F@TD3>rq9KFkT<M%=<P96Nt3^?ehdgaN2=7l7I<4Q2CpYxkiFEBtSRKE3+$G(i*K z4nt3FX|cN4+-%at1<?;jn-3u9(5ILW$@GD7s{<f7<P9a93WF{$2bmeElBFyVG3PrC z27@T)dYx4eY6l$v2^$Eo-v8uD=HOr>li5h6HWG<}0ff$=;9$aHGDAAEsnICP<Vf9i zB*Flb^9k5Y=T@`T3c8t0mY66n2e>}UQGz~CpVIO&V^BDJ6sjHgj-slwGgbkW3N;!m zPGe)_be8=7ljSLoCt|f)4F>k}>(>LGLVroz;Vz#=b~$}uoYpAQot`oV*=%swZqG&R zxty9aXk+660TTKb(>a}Y88jgXZN?zI!l1Ra0jF1yiqpqW{&L)h#E!?AKZttX1@r-f z#HJ|Xh~a(!(vXIYkz8km!+c|uk+f{6{Dh>3(x)!}zfF@gxkO7cfG(Eu8~^v_*o!dz zxsey_&<8$#<&o(FaNriO)?tvx`)Q~PpzZBJW=>KPqfh8$-@QLSZ)`SQXx=C<)Rs!c z8ad8B7(CKwc9ZQ*S8BtbW(*Ps-?{>zw(0MiO#h8pZ#Jh=2?ZXv97a!5y7jOWh^10y zvq_?x`FAt)IbV(*Lry0xEHL^!dqzu3@1E>zYC!<R8}ZF%sa$5MiS#p>XncGu7@SX~ z919o5@2sfRPGl^CIApW$3ULpIWdIq%yXzuD&mQgV)Bfo1gE;^oyIp0sho6H%PdI?! zSZsvp+IM#fBxsjGUO{Lv2I&+A^<po2dmK9S!Sy8J;`B)-M+^YK<r{1y0L0vc>x@1) z=o=cNF(VlbWWeV#mC^J1x4jqqk4N%@>2pZ5hd=+<ZTDwsmT`vz=wLCi`PVl#UTnV5 zghyS_Vo~Umjfako>6lv?zyZY0$rtj45)%r83Wa+oKc&+{I<%8rN4jdb8a7T&OgOSx zL$xZXRMoMuyng&F8i*d+4|l%Y*-US4q&6C<#wY;Fyw8};|F}t~GoPKcJM?*=It<eN zM#TJMv+3NNNwXiAA3ixWGsEhCejW_kUEV}Bt<mNt?eDXCP4_H;67&1%^px`X@p@hS zj=Hh<ak)H(!p5lkY8#ndBq~T(Sz}`|dL+O9#>LPB0KpG>A5_ua9smS8z@P<NF6U7g zR4Uzk;PSp1B?bw%Ru#^@%OJnRp!SMZVbHsG^0?Jo7vS`9kZ+58IBw7fi9NEwJPnci z4wQD@r3XMw;=Uoo(MC24S@M)GP@zc03%cmDDg)5t(dUqV>JOj=T43Da0NP&M+x!8e zk5RLs(fsnLYj)^E6QQF&wu3gz#h!Gn)fkWfAg|Z%{WLTY>HrA!GJv*dOGBDE)zPtz zd`DKFRbSQ%HKD4ir47ZjCXKnU;{MG3c51tts-n0>8n^|Os3b#SE^XcT;jihoe{FL! z$;mO0?pjHrk93_knazu7Z90==u<M@(Lkdt225D-F!r{!5<6YX?VgY^omJScE4{f(8 z8l`NO9fc@5jK;|KZP}R>G-}YNAApKI&?)qMmESiUmg$2J2eZ2zJ#axD^8g`UoIy6* zjLnt{lLDaEuceS)8LguSqZ~)yWzZyJP)Gp~yuHl^-2$L-8V7(1<XZ)Z$X71Y&JN4< zk+mrS=p!N<8U}&@=-xa{Nqqq%^b7!cJmhhc+eI$CBeD+l(@DImN&AA)=l{Gno9|VZ zK12vY@XAe*M43APP-}5+b7^Da$>yeNV?(w13#y;0RI4Mc>2fImIz0->^ntGp!%wIe z$sunj5lnO#G(eeGsPYYcgWSdgIB_$Xbw-_F6lzpMJkRMoNy!sBNw^X;BjsZXFFVZJ z;B2^Slv$;`%#1++bk|CJ8aCe{nQ=O+CB6_nhCChy^+13^rl{ua5$*3Y2HldcOsEgE zbd!l3j-b~Y3j};VJ0?M%pPyg$!_7?wvG)b?IDKpp+KbQ`opJi$3?AjZ6ac{yLo{cl zTtsHj`}e)!Zr>gJj{X;-zj*hE6r~gfHABtAmX%ubjM|(*c)45FF_UkN{3Ou_U#nG$ z$JuiuYl9UkX{M*2ee{tD3_`LX4x5{px~=d9f7+~`VRfSmAmQp%(=;8Vpr8Csa&FT$ zjtQ^Xx!HZ6FYy28@sCEU|E~V0t6z7Ctdb=e$;i0F0aRV|Z7jatoY~kAHaBe>Dq&xO z|7gp0=tHK^(fXK7pDI<a4a1>y7&OKiq!}1MP@U>qv~^6!2&RclTGC?2__0JK-XG<0 z08naF0DZ-{0H>&qlS&Qz^gS!3q{&jN^hBEdu>gej=WvkINp5#_;_Qrt^5ldS=-nz5 zSc3+%;_>mBQ>U|Fw->F}!uffzA8u|k2<5N}^td8)7^cGrk%jdK<Tn8H@RyRsYu;?8 zdflv2VG$f}&PBN}JL*;WtlPttj8wFD2=xgDfj4=|>!<b9BFPgng8=tFvh8>2<A0P_ zX8^L>HIayBVF3)%p=k7a(&<=h$#t?^dL4BeDWDdcqS$B<caP?14xXjiDVjprL@64h z7z(a)Uk=?Dk9KB6zi{<Hc35uECv2-$vNG;)02P<4n~SeE0)Xnq21D!d$LwT^Bdv)B z+yT(>QAnl_+;=c~Lx({OKw%Cb7&it}nf37UT_bc7gVI9+s6d5%%Iqru!UT^Bp!6TH zNnJ94sLRU-$OI0XSdjuB;$fc7&l%aO*TLUMh<Gvy@SC=`jbhPYDCqUKK}Y$}t=);p z>PduPf+yK8=mW^_n?2`2%4X^7uNhJWVUh!gdx8UKNczx{RND6_NlC!;gig@kXqGw* z!fJZz%OAF*zc2aGv>^zZaF{s~RxL~~I~;n@$6%nbG1}W}9~}vuk)RKA6K+zoDc~we zN4hYD7ia<1{)C?3E5Q1m-UCBD#lxcanDn`+T?s%IazAl1?r;EQ7d4wpuQ$dO`Xnl& zuOJ8teHudO_*iqy>C?Ww)pP));S3s67}RddU213{QC@WXN(wCeMx?Fbrr82?m^0E9 zxX2Fi=$%3-rLywWeD+6?R?GS#x}#oSrOQjIRH#%M=*f!<2B6(tbuy_gmDGiTT745b z^;_RIvPEHuK9NUylRE;Jl}{le)p}mK{to+LW0VPnUXb<|S`kdjstSXC@BZn{X0y#^ zGnq^VgFzHUl}goax9jzKrBb=LxX9&l#p3;KJ|AvxL=MHUMIF|)BkhKFabEwi&1fWx zg`7@SJ*TIvr{UlPwYsfVrx<`3eVR?Qq;VRbq{(TTj!*;)@{|7!z1g9iJ=!~<gWhA@ z`@pA1JB&U)t8dA=v^XIFD7jeOSbV){=jhqk5YREnHu?%3`oKqfL53bcHcs(79!aMa z1_ixKiA4oK@89F@&yBDN@MrwW4`BQoBJuuQ`xf<M$sGwl>;Ut;1I+c#z2(j=d*{~Y zx6BFrbE{M>YIQuIaQ>BwN~crdn$N3PVU!1b_P75k{r2~XzDM+Y$S?>a2XKw(EzvhJ zeWZ9<JO1a1{xUtj3Y`O3l@`9M4-0`n!0Yw8TrRua4h#W68jS`3YPDJb(B<VN&~tu% zo=T+>i9|FSZS#KHR}o5w(`%76d}!zzRb938@m$#SNyy=#@o}1*Y$uZf$|#>#msILS zwfgU<zte0!Yc`F|XEw6A$&KPdNzTxWm8@^+?FMbUqj%f1-Jr&mg{(ckdOi=Y95&M~ zO<ATEEsIN*C3ej$Wj7Z$HpV3Mummi0I6u;IWprN!K&23)5BI%Kb^rv2yrG0nVNkXD zVzjqi>@uh<<qJswdXThQGMUI=U>`)0)j4toZKhVkKGA-tTpo4mW%>VA^&;rTt@S?B zNIj3a(GW?aVa8qu6y9NLOHHJBaLv!7k-9pb#xEBa6phm3YjTpt#_;!$SnuAKuGluV zK>Yu=r7h)hLlYAd)6>(zV9@9DjgOBz91e@cVl*0i0aU3}3WY*8n@uK@@p%0B`1tVf z@bvVw|6*arptJDVYtQQ{RZCRL8}gZFGfDT<q}Mx<NC;<V?QB-a=fz4ztc&8M_@dF! zG@lroMi9qIP7iq|X);O4ujngqXOlLOKv~LOUB+(j`BJ3fbv!``K1QJo^m<kUP`yr< zm+ZXH&+jjQojI3fF=$<!vn+jNSv)ye+}zZ1^x%4VDLm{<Ru%eaL-c;)l+!0gse7LU z_&N-lXa_Mx2S7VJFGk*u#2|$}G%|qDW?U{7c8f&@5I}nkKsW*bs8~c3qHLBj8TQK% zVsDAlf7Tn#n<F}U!!G>*1cqSUN(DBO(a6#TJ03==9uKbki-Yfx%iCp;84=)#^_W^- zrllpEM6pYs!~uONae&3gNwo5)3*M%m%76O+Xl`!q$&)9uv$IoEQ-MGLFv5?yT&`3q zfjFR#AP730&SWy-E^Yxj(P$K?a=BbPJ3HIk+kMuH$PCI*1_UWk;hfG<R|#L@*ys18 zJdV_yHGBSl6pR1a<)yk_SI33Vnh|Yd$<Q!Z$f76x8J&GY-yGBNAsz0~9vFnFZY=X+ zhA7zif&m-C1|QbO|M7A1``Oj$B(s^7fdU{T98w>7pG;CLMyWdr{-d3pMT-SqQmYp+ zR-q5-NKt#FLou5ffIJ~Olzd5-`?L=L4fr?!<ngeIIXDOrCCHQD82WX*+Ndfo(&~8k z>u>-<coA?w5!(WQfFY|D<$P&0mUX(SC^iJ4)ou&Trn*+sRx0{Z$yh9^b2&zzbef$7 z0E!O-Nydx9pw-(4y^+8DSA9mH4<TF<2Q5{bO~=`Zpn{HrX*2*OUH}9KE^>XJ+!h9) zXM1~$%V>%S!s7@hF*{4op3%$<=yO1Y1NtczMUK#KbtCvKFzBb<kH2;8*7EZ5($dnx z!U8ZfGcyC?fGNpjGMmj_TwK&@H2_GZQfakX0LbBRcsw3p=+jR>9UmXJ*=%EDV;YTS zef>snk?2Ee_7TnHExiR7l9Y^6)JHzI+wE{W02*V(`0uRh#doIqr%lI}qu#8SsDxpl zRhrVLbc*pPNCd4$wSI5LVyG}^mv-}%X8=McL*%EYX>t;$P<1-XR%;zUilW$V8yXEm zxlDxu%XJ*~$q6c$c6Jz;`skxVVG#_{>m#S9?4hkKW=X;W&m|OE&4p+c^ne}Ipa$L- zuQ1@_=-dc=K2KV$Lz)7K%NV3x@7L-FQyKrY-LFFcXljZ@8!gJ`qlt;8+nsVavNl_; zY%Z3JrK+yl&@@^?OK1z~hT2loj#u<!rLjiAe12}rWE`oKlQ)BCl#w-av)NqJ3*{3S zbbk9dd(UT~Z>vDfO9WJ%J#$Zjov2&9M&G{LPaHjJIok);3*rEh807k>>}t3D9K>jc zjRrkb=ms-0%+u4c?|tvU_!`X(E5e--lgd~pm5pB-XCJ(#qF*8Ugy`Q!K6z(fRoUzG zwrfRCo;(47o<4mF1_gt`t*x!Sy}hHOqj)@?$z+PfVzpZ30MhAnX0zGpbozY0P$)Dz zJ3Bu=4<vy;n5SN^Z(lpFute4##V8i1xS#wJG=Z4g$Yv2NM!iw{LaTY<_^er4Z8ia* zOS-(E3(gUc2#*w~aBmiZK`NHHQ7x*+?QYM{)7)Hbb~YXgrF_2g@mkqdt{JPOsfumU zST|bB9#_udOQpt;@rQ?Gx3ivyx&@f7>m#DYXf%X|Xf{)&!qVfK+M^!Rdgvu_`h-TD zA)95E)BzCl=m5H=fdGUW0`38zPzVev`~6Yp#OaymEaptFThEJBL|4JNg0C%V2_&dV zjdL=PVT{HsmloT(&6jpQIU7$TCSo!F@v#mNK%wmJQmb|Qs?O2gh&PQZM}`vx`_PJ_ zQ$BQ8As8g|8vNP`?cL(&;TRf19zs|+gWTlCbtdIXr*#}aXonA#gdSY0GcyO%QH~xM zi*`n=b_ah+-y5pi+!^2RO7w}0Q{ofK9IPH3{58b(W=8=^0Fi}-1uzI<fAi+e#>NIX zvcJC{jYjkNK7H6~wPIv4nZ#YN>DjYqB+;i*seo3%R(EK)&)(Y9j!Kv?lF=sE%w#r* z2A$e3s$cw|@y|A!|K=Yy>lLaZL;w&f3+Z~_>pty#sEKqc3Zm!}Y56;}xOnvB$@@qo zI(?d){5q@20%|p?VVs6EY<0WM<M#w=ftlm)&!B#Q7M+ew^UXJSpQ}p%KwgsC<oT68 zD-3Ze|1Wjz86)eq=65}B<(zZs3Y~j*?{n@6_gvoz2aSZVurNpli^0O!gG8`|_+aq? z#0Nl_Ado@G%pi=Ag^=;s2E_OZSs>VVu5a3RpS}0#9ILCVE9aa8|5a~wb#-@jbyanr z%lJ9}Q~T|zwVt)!C;Xnr4E+3x==<zi)2u(|p)YYY-kz>Wpl5ZJmX}fLZLc?^a$iMU zkt1si(<4I}WDx^|2T+^ZJb*+b8UaWv)9USdlig%#SR66O_aiR5eaT|+84RS+(D5;q z%P;malOn`I3)-M6!(p_9&idNxPo-G9AlvWXKd1)QzRJ7b@aXwZ9v<>H2R#l&9=*pE zT>(A3zVw^?nGMhf0)}Rz-y??b0YC!<{VbgYTNGT^g$IUikQRpS?vU;-0qO3RmhO-) zDQOUpl9ukSp`}BRp=;>+=6SF0FP!Vd-fP`^og+$eV=y8l{O>T~1^{xZJdB^vV^Nwh zV{aWPOwKPmJ^gANU@@1JtH*l#^fECq;Ry7<JKK1D6(fe(lEhuDo|9jJ6R;XU4j8ON zn>r)@)~Q>Sp;YF?pQ}_REa)B;w^V^tZ(H<DM%g+AqWbC2;WI{u4^e<W?oR`&cd;#e zQ+atCH8u09`$I<^zxc^Y^u9F^52!j^0kl%aC6GR>WYQ`>><6fJTz)NAuNpdQ?g?IQ z41DZ+IoM+zM55A<(PemMq+>d(q+^STwWZ2!j9{<*NUl27gC97;k0~KVC87TQJ%&V8 zm16L=2n79Xt*#$GQHxg+wF%EfXc9^bjKA>nRctCywefh&17(ibss@>lJ2Y1@XUNf) zgohtA@4n-won0hYaSDu!j2{jO5-K0LuhFhBDc@KN8$?Okf|!ClK7SAycH9X7Z@-kI zBN+7_=Z-mXXTt}56m~`m%txmzNGexfJwVS16AWA4kOcy|5CY`{1&*U2p=4NocZtZ! zdneUiu5oLpw|-q>1spgiMn*>8VIUm^1qB(|phZ1H(m+m74@ZWQ4s(V{U39dkaGnC~ zMIfi|Ie7u;w3N9iBP&|uMs3B~sZR&`j7un(4L?Yoadq|acUR!=4bh;RGZjy7#Z26< zg}7%mODWT`>;XwD>s&rEbz;WIfj@O%9q1Vs-hqFDYyvV4$LZ;^-`s~Wdz##oc!&la zlQr#oI23Z@QfhYW7K>7XiVN;c7~}-6!209V8K#?H7?_F^)#W`q?4L+^hQ|C=LwRIf zKKe*8LD`L(lKPuA-$c0%a#g2e-4^hXx*pymq}OMR(q{C22(f%QO;`D7Cg`>6#tRiP z@1)hSAu9YesVI7Ri{`Q9(6U0{N9DJ2k+(;cpfqvkaVtT5bK$99zhl_gVE$J?V2?P2 zqwfLHc>5jlhVe2ekk#pLAZ5x$iCqPpU)0aV-<QOw2=E8JAylz4?yw{J<;$0#ATjhn z-?)*#X5aeEe(AAdMGySFl%d8IQ2~NW^AQ7k3$Yg9!ci~`ez(e2QP1Wm{BCP&U0hw; z{D2S22ct$^4h{vZWL7K`CC130rAc)(SjuOVYx%a40H9LdidJoKV8>fTiSWLCy1LwT z?*>cuBL`s}SvqG$Sy9b`<5ug_oc3>-`)TPixrSq3mt`h`<%zyyP=<!g+S*2&bcNl< zy^rq5|NBu`w!R3=)k7p`&w0b+TSd07w4`OMxs}=!*?$_ewRs4R#&!}3D321GwSzh| zOBdbWSrr(Ftvqiib&#KX|9uI9RoztK`M+MX^0`403N4Bjk9Zj4W~Dp;Dr%3OW~n|1 zj|TW0MQN*Fs4f$8d4M0$Q&%^te@b0F`l~n!VTF0K!KwELVuW;=lG)?qW7tc&jQA^G z9$Tb0W6CC6-B+zBx}g2cSq%wrBxTGQQ<zI}FpL8P|GeUek)aR}J45riv!@XH-i_#s zm!>DnEP7aDQYCs;q!2-d#ht7FXd4q4ylJ?Jy$kb;8&<2c$S0akXbQ@YKg;FiMDXP< zequh-`nYr)ixAeWvb5yDGV#r5`d!DI>CQj*RFA<(yKbl`x<qbnQ}Yl6Rx#&pZf>=n zQq1jeaUtDM3|kFrW8DrhCDv<{IVf)&okC603OBy-<_;SqZ1%jdo4DCIX!+-wY{YgH zxkXud#|~28TQO}Ob1k`%&CkxFh~DUn+zvz2&7oHq7VbIEup?Y!Eiw(>-2Cne54{h# zXN8wg8_q*-?`25zt<+PUEME&$rr^BT_<-bTV)+!+Y|cvxYkXFmh6i?b%(=4>WJnW+ zjh5~BbN@tk9eVl&29j@Xzr#8QLe9J%wp?<b2qn%tHk!|zlOM0S6`-zh-`@VboCOE^ z+`E#WWg<bd;jl-skdpFFK+|b%0Z8$wi;wsrCNW~aR@uV8u`1^-O~KMGFwkUxUzJ^H zcQ+HpG$YFJsD!#es0g%~aZtau0rOkBZ(^nbEZ^|q@tP`hN({cz7rlMqhm)wdNWjdO zjLtp{H(omfosxt52#hyOg+C!Z3<bgmc9*&OFT7)pNW~nhYA-f;>C{W#yY~F@u*)$z zsk{k5eBLu1XK%wY_Kqc=eXiW5>~7=<!-B0Knc9<OPG4#|0=-6Dyrfu~_zM$W5_JS# zY&N#+DYYmN3GpRRa1Zf-1FvG_s&aOH4*Bt7=bKp9hi7tOFl>RkHqAKqt{;rpGhs4? z@7e>~2TtD*3SZc+3pyDN7Q7Gen2A&v<f+ho`nmB#&GxzVfmj;{WtuUbBtVM69`t!# zr6T6P+kKDGnSG5jJYJ5Q_@8=zaa6w4qTb8e(ka{VQk1{tsTG@hO9Rn@v9Ttv(ikm4 zoOT^HT&Z>gx}Qk;#F#<Nr#ghNZyh>6-1Dz`umC$Ji#i5|B{w%3&e!+7-oMnJI-1@W zjaq1umLXLVZ8@DlKTzhRmnzk0HU89RKk{h9OlP#vtV%dPy@s#xO$Z_l<T2p6^i1DG za;}~iCPl`8k7cfh(M$3ODOn1Gg^gY02fyJ*aO(yJ7`9M=eUez_roO;J=Gm9C_M9f% zQZr~M?+^8tA1cF`kJ~jx9SN5)MJc|I_b<yq!5Y`NSX^e8iZd;T4|{Fl{ULx(+(1qq zP>vD%Cv26H+4PBhtx9cHLiEUf_||^*lSt(I+4U?HdPg&ptuAQK1CD4(VW{M}%tkHF z%Qujl<>Wsz@Q}p8LR;~(<$zalsIG#0qWc%?e5l`cc9Q`tHpeJGHTo6)(r>Uj^YzoW zJo4jPmSYxIo8t?+zfkQEsQIQm^}BxsDsq+hRKqdfwb}?d@#n`qzwa)4VrF%(cV%rL zYfwr|OjNXVTHHYM4v4$_6rz0~JPd_xxf;cQH?diYcQ4D~u7)p!QL%}hNaZ_K)kC=r zba;<?@osyg!qr@^i)CjJ29d3&o1Iw;JlFYKLg!FP7-BXpzg%c3U9X`>mY50xID{Fm zt?|O+c)D?(^2LZ1sc);!rE!98#}{%n9)caU7>~4jtdqC)lym3og&^Uz5_}@gB7p(j z!jQj7@ep9^Ol1hewU87xXw}(!@uSsQx>V8FF&t&2R1uk;2&fLLIw9}+z4zssV{^`i z%cpf>Ab6@v0J*>w<N*hGk%|fS6UEJOkeZm8EZm}dTmvGB;*KNl*=dwWL{bwdYct!! zlNKUtRf5+4eSo#m^x5mEku5b#&PiXMq<vl>F@;PdGM=*tg-LSZN(8S=(Iag^&I}zH z)mv;K-@a*VR*wQh<6J*Y&(<<{x+`XSXjd6cQ=>=hKElJ@_>nQ!nUpJ)ft?7Eh_7aQ zY2@32u%<6{6X`~@CJAC8d20PxKeu@C8F^|yk6(z8E)R5c7JvHCG{A#m_eK5uQrMS? z_jGYlr|z5@TrNI(1DoyiR<i>4N~j35^~i7W+^8&YXueH>2aKN#lbl8{-~uPDh7U4f z4|L-Y5T)SZd7;<B>8cGbFyJSpPfTmbw%gA7%$zqN`d=)L+yofC9f^*lO7+9jtRa-o z#c4-5QDoEwV|s*$Ol>Q87~)YfQY~&N^19V_a1Lg+1N_vkH2BEKi-sr(N&hg+Mpj(; zk71Q+6)7Zs_|(Leyz%iW6%Iv5VB^=Mi>-<Rz4JGnI7Kt=WJ#%1!e*0;pjH4pmk7u^ zf7ze>+8AlbskeB}1`W3`{A$onzTg6Y7xx8lXiyW}V)C{%u`eZNs!)bjuUF(Tk-`~i zy!X|i#Kd;;5V~^8{JX7_3dHE4UXt)JXxBM!Nx%*WfeZ0lc>318Q65-GfzeM%`kfpE zAG3VR|9QRU_Ku;u;yXbi8O=%6EsOrsNY*UxffF*H1O<Jg{fg_jRkcV+_k+z*3!Gme zEx@WR<ee3A0Xjp_H$VCEBna?weTR<}4_j5l<}|d~ATE>j_DXGdqk-a)M_3R9!8T!5 zd5P4}EcXj1J^8p~yAe9N*~fT?6U|{2FQ!r1^fD!Iyu1ui_&UPyBdNnDQp;YD)I+GK zr*N6H$zaYwA+2Z<ee;}9LXDx#XwUnOE&pPM{1X*gQFrb_K(Sed5)xZ$?(CcseOLa1 z!&0dwU~bW2N{gvrV*g!i0IxyJYlKDM9)j5Mi(kA2suJy~ViliteFZpY201ywsj3ML z$$5@m>jg6q_;@nME_PlmBX!0F;U_0MJ>5{(D9|p|N=;4pB{vYxYtbT*>ml2zAd9f1 zVlzzHGnUC;HZN65GKPf5@V@^;q5ARx`s0eXiCeSYlC4t_%r%Old8Eag_eOP5VZ^_6 zi6?AMLEh>0o#8o?9e^lAr;jPn({mxA%i$vVCO8mFeHjO$p&M0-t7Ci_D8h--QJ%A? zfm5V?*LYbBrOFor)&LpH`u4gU-))7zHJCE~V%z7gWM<AV*L&db?=gg7K=G1lw!FJv zjpn_w`Zd3bwIpEA&xqs)H+4RLEI5CYh&F3n9QV~`<?d}+TR2TsD4jp{QdSmERqDvL zqPiW4gh*0ALoH2Yn3T$x^0=&@e^k#x1c-^deWhq@Da|68iOB<A<%oKDf~4p|IedxV zQ2)_TJbGn++t>?Ic7*|H$yn#}(X9$r7h;we@P591XIwET?*LlM3l61a2G$N+LVkq6 z55$3#m50hbV+Hy<a1k>Gr+p3)K<MSe1qt*+SVQZdAW5QoBi4N$@5B-5sw!zFeCQc$ z-1CrWzQ8Rl86nb%j)f5$P^rkqAcS4W?)3!_x}iT#&lLL*9gV1VC{C#80xv6P*}!6< z+DD5owxrA9ApOXyjbhZbIT8`sj!8nAuspHpibClLgqSy`Y=GX{_@b(17`ZQhmJpY< zwxl{bj%8$6QA#K)S9{gg>A#1|6>w%k2-$PbTPoyvUK%<lMAM}Ix&cPUj@YyHNVoi} z@M+=Dz@SE^iX0xr3?4a!{bJvw$ci!C_0|r15y{A6AHsl7@w-t*xmP1b%5K3!SpKg{ zA-1cT#@oN<GcFYPaF-xi=uK&~Ct_YpR-wGjcpB2ej;<Z{FeMSdN~!!tB;@vvq8e0) zJPwpNqvXFjnlY_y#C9$<v)<R;3gD4}p@P9je>SsF|F^rMKev8dqB%FYY9F;`=!j%R z;;zVb_@c`05{DQl`RR}In1PN?vjk$g#`oO{4}8>+L@I$`kS(SYw&u<dtmFE9zT`GI zOZ({du|nY0uw$xu?FH@w314J<PJd?CE?dZ?O@rQ75=T5sxY$ro8MZ}hV_Lusb6eXO zajDkqgOIUtz1r}ZQ6gN$V!u?LUiHV$xx;6ru7+QxjL+DSVXd5{GngS}kiXm+6FChA z#+p@_7bEX`q4}HP95Dd5@JqgSRQERJ4hg*7FeOskcg)!EQR$`63KaF^1W`0UBB@BN z6Nb=lj~4SxU5TxBRep4jDac7rQ;t&93m`fZapSy`odF;`sJ=pN3$YO}s3KZz>Mx+7 zVcno4kP{j5Sv-Bd?WJH~vY}h_GHc!1q35aqJzne}utYXt3roBPHfia-t0XiAn_mAU z_Y3A{f6H4cB}n_J&AjN)>{qpUeg}I>jo5uEjn{@x)7c1khB<e7naB?l4~a?iPEudW ziFx_KzYlvM9AuSa>G}oSA&=@^6NOZQgO~-4>%nmE;YVX?xr+%J6g`lJ@`@MmH|PJ^ zyn~W(GA`QDK0Nq-QQYAivJmm}o!10ZE`DzBq?(a=NG*~<;x8u-EFQ4t`zh%qYg|+@ zp(%g0CjB`rHZxSG!d;5tu3I}9o-HA@AqDd$qKner({m1gU`ie%tfh6tA<7ct=%(6= zFKuOkKYLzZE{^qgrm-MY0`)qo!ck@GI+r_}4vZZ3mtEc9`^5anK?i(@CxtIS(t{jI zfz8{IFpoS&Hj7MSL+H4vS2CMCW~Eh$Uw|%ezgNV?xp_Tc?V#0D{3*8y6^TvYTUX|$ zwxAc8xLWx<Y^4lp!c0X%@X;dWO1N^TygLHd8lA6KFbu-KYHOuhl(I?OKJi!9MAG6X zhg7ndtwj2D#des+NUmFgv%~U7zI^RT<#4N190rtX!QquIOFvlZh{+4_E_FR^ZT>kf zySdr>XXEbwLBER5$LAOs*)w1gX+L}%R(C$OOSSY45=15P0yn^Ik_q(u%DJTWADQW5 zt=x9?Fx=il*Y~%11pPMYAKeQ%V#LTzbfihy>@S&-xWCUay|G`2f8^Y~e8M0dNDew5 z-)vqRb5Z`oIz~*F7EhQk++Q@pVhTnC;_L}L@ci&JKz)P(a5g~bb|c#3ecczR89M)T z(75_RXU3uu?D|@9f}U-#h1fK$_WlG)x3VBdO`l`c3rCw1^^gboMqe1gl7QIKQZS$^ zMdZVUlRx(Ku1+6Xi!>PVVoS9u1H?=#wE=}Dbqsj1+e+p0`Y;P~o+N1`vvFd}@GXCV z36UHSbqDR1DO+(JooZ20u|TbIjQvgb!#mgBNp0&7((J4<r(F;vBtePpog5-<3UtUq zjaCYtSj0APLN*>wA>p!!KH-Pqa{5>82sG`iPO@W|%$KXkS+T4P0@2^yqQD2zBL<>S z&XLb^1&IA?ktVNTbBU87@8t8Gi3euKs)Vc4m(Sz7nIN&xzw#owd}3DMLMg@LsZr9Y zP}vvSO;Nyb_sWz6dc149HNtZLQ-WvCI;?vYH{!G@Bg=&LgA?%i2S*@%uwO1R&ZsWL zkt75O?NLXvj|!X8=}X(mmcYX1_;`()y6a8hF$Et09@CUPQ@Jd4#c9co*Pw<_v|!5S zpbOjEoI|8y(V;Nn?g2;QxT#z6ec{aU!tp<s>)dcxH8r)cJ~KfwBn!02Cmm!MqsE^! zlBQO^<5tzyys>rG-cGDd@DpZfHm*C@8cisQL7cLysmzN8*B#WpQ@<h2o{J|*4){Cc zl8YP;hHyDk)(}pqGZXAexeF<l0kxGLsZ&S*cvpbO7dQ&n8D9{!Yr>82j96KNf##=V zfTvTE-`_YF>}x-+G?-C4XQSL5m@6!#2qIT4#deaRNRBDThUqvRe+4TzAm~}di3~Y+ zQDXGjlVm7az`7|o9%9dGA&@b#?d3eumKnI|Poe!35uRCDu!n5E<cAN0iH5s^0tepm z>$S&@Uu76chsF<*qR`vT0AZ{@2zr>(>chprPx&w@Z~Xw>fW!CE>=J!HupwcdAp@4> zRg^mR@LYIs4K&o(pFO^jE19+8W&=>3a1&#|3Qd@jH?Sj}<2%}@GU3?NqPYSgzq!4; z^YQV)#==rlSEpeASEE}6ryeT<k4~B(*R%De{e0MN(dEQ=z?5`hI=cvso67Zx_f?Tu zvV#0#7AL7ns($$(6C5;4PqBGihtrkafL2|<HfCY&g$yW?=gawKV64M<<o-pP-cgB` zt^PL+;Ty2%7XwbGEv7vQAOS`!VMtK&^hVDgU-@CK6s_)YhNrU=eGyTt6CgpO3-6-^ zd$?a^9pi@dlJ5~nEtGGR%{=BUTmGP3MGAio8pZzu2!V<PMhg?qVQcjz@cL+j-7G)t zm~>sax;_!Zohnns-X8tLM3Uq%?-d>8wt{t9Gg(N01_uA`ikaoxr|?&5bqbU?(>-wP zze|_~Kv&-rj9&N!vl`~T!R%vl7m}<Em!8f}r{;geNEY>fY#L$5wQ&UlS~_ok-zm?9 z0iiRvO5u=zn~yv^JzRsiKwVv;oRG1`kfJ0C@h~w#g-Y$9%BMNo3pyr}GR6jfSEMAT z(3J4l3hSwo#bh~SR;@}IYb$pp=05-9XH~Jz)vY`!ir5HMzSi9DY7Hx^HXg%fqsN|f zH7(Ug+8K*E#Y@RcIdcJq>rujIYUjr$=Z=^qi@=Y#I*_(u0BuG?T&N$SeWRjE+VZN? zo*VT0bg4{gXSbS(F&zg-IoN_sq7xKe9wU?di{*qHmv?H?CU?e`lv9D^*FIx8<q$-^ zH-<<lt?Qj)DXlRrXC?mW*%gMt@f{rH+jL^V$2a-D##0SDaeN2ak{PU5unQb5Pv9ZX zmo)sO4r)>Lg=5Ue6Um`9+z^wa!RV-0fRFB{XurF&Z(=VG4CLT675aCvGOUCiZAP%i z<kXvkjV*5q$Wyl*XN(mMy!a|ZeSuWa3%(~s7W%&DnYNaDX<}>~`uX7CfPsObG41UB zUav;?eS%!?^fA=rL+#GITnq6Ki2W6+=#yp<IY~NZM;YE-P4v$qT>pFdxXRQAp71EB zqIwawl9O}7e?habph$V=mI&Ew{xXkt8BKpJ!f#dDHJUY&m^g*9HT=tGIpDZ)P~giO z&Wj`Vb8PIZQ1M$rzBPsfB#4WV?aY(%sHsv^sMHs(QOLTvxFNM(kC~LMNSQ(rxEh2& zIhh78fK-S)oF+Aw-eiE&y!Nr~<R%rHXD0KiirovD5r5AEO4I+TTzD6SNwJcikA5bs zUb5!=%<t*tCbWAMHinn(eLLNDgt&}-rcCmaqOR|Oejm{ogJh4tjasfeEoJk>9Z^&o zY6cf*JN#MtEJPA~cvyp$MDLvA)nQzSynqrt(2EQPdc!O)t;&dKeG$EyrTu;Df|=;9 zE|c@eM^c#JH}iLb)e4R^1Vhm%%(R{rA1z~If2D5KiC>c4Z2IrzJ)T(ZfDIkXx*7tQ zTQiaIIjc@y!<^y6`Fy%oWAV5ZV{YJ)$%`iHR4=7V6T`KyguQJvKY#K+j~?;gv=|@y zKO2k4GR3<=ZDN%~Lcn4e5=Q7`kko2rQ<~jbMWc7v7ncGtuV`#87!vSsbtc%<KTy&6 zNav2n%tlEQva47yipMfM-~Gf5tWZR>F9H`JQ6e(!(Pl31-?Vqm7W%zhKDBRPNSL^e z9-u!+WqP6-&n`mlxHE9asR<<MCdrz3@sf~bzJx-4^IX-44$)UGJ*^t_{MghzKY1n` zd2vphD6+r1J>#;g)%O}{NJq3*aZfvRoX>naeY0<Vz5CXED(^kE7A#C0@D5`sT#s|b zFgSF%-BrZLm+IBlRyuMZ?g_yUyto}RW(AA67(2Lzxl4-<s0d-cB4UAcQ#Na>s|Kc~ zrpCsY2=M;?{+XGXy$JW*-5AnX*?g(9>wMuZmD<cH3IOSA69PkxNk)4?E<P2cY)N%L zD%6eza?@MvSa=}7d_BW<8vY(a-x_Cho466xL5CMH{Kd(gqrZ?uF3&&}COCItp1L@Z z)f(lKOiST^)#6ng!>|VD68uzgXZm~2b=h7F7hd?WSjPY?)5t#fAw<%^xqgj}Fs`E9 zh+UwJBv}e15orS31f&bTldVy_4rCg-(G%lJkv|vZmrx`3F2QqJQ^%P8xm21c5J|F; z%n&iiB5xV)it4Io>b!J50v#bBx#0QYg8ACP(Pv`TC!jQm;%PT&ZSC!Fn!;`U93UYQ zPMXxclr^P6OXLY>#Qjn<b`?7`$AkQ4f}<UFF|U$O6oxDJH%5#Qz02PRz3_lo&*SrF zb57zWgBq>M^*?{?TGz-%#`fI<C}L&C_pb(w9hz77-5*|Fo16JKQ98o<whs>vA0C82 z+t<?;S|#pHjN_@d4ZdT`R+c{k*6Uqb;}RmJ;37{s9-6t?Oq1{AeiY2gXD}G1=xSiJ z`ud5SC}~mGGM3UAxSI;e?wD%O!f)3{WzB=k!OoB6bQC=PU$U2$)mvKceAK*$I^;b) z)eg+jwsxjzb9cX$C)r`esBpHlF8`&&kr?DPFEUa?la()m6)TGl1oIf!AD=CFB_ACF zH?xrOziJ0K(V@lEApE*&?<y|VE7dwoDRU73CXaZWUPk00qfh`4mevgs*9RHBRhO~c zeaGSuD@sWhaiApO)C>>YY;|)-NU$)W{AycQpYy_Cw?9On+ov_B)N~;=Q45VOu`zT3 zQ~K2fBu6BShS$Wif(ITMR|pWB@|ia+PDnjs%&HZtZ(KG%Z}>R5HG0QJn&7}oiX%^p zck}eJTxY6WrWIgWueW>Y%bzPtz?VA(suF<<f(f;-vcaVlc0nV;hu+-W$WYh!^aT6* z`ntQryWVlAb6cTlEoC%^_U%}F8j{oI6R9|2MnucQck{=VfQru^*?zqW?$$M}@~MF3 zL*IYjeTO1_2@{;rn3B=&+1VNKi>p}BqHViB1&dT-6Z0B&>oB_u&+_d{P&R!NdRG9W z=v$%A5!7kR9*rSMBuOBUH2Qm>M)`m;twWp)cZwbL?4U&jT}qRS6B=`Z6)&s{;w9l& zTz)*}Hvf}B(GeQST78TLQ>l}uwAk-ZLI84^=omlSHkR|L@8Lrwv59v5L&lVJf4{_w z8J097@d5Nu6(wGnb;=`vj^FnNJNp;l!+#OE$+Td(BR_RKAqUnjog2n@o7}XWIw#J@ z6Z2*aH<Hp@Cg;#oL-+!f@tw3dlj?eSfSz(nw8SC4bZOTQ51)wHnV{QGB_%X4QQ_44 zJ$ZLS1N@+1-n2Gz#>~O&Eh8;R0!HvvY9HPBRV^O5w_zX+JUl!c9x{o9NZtqdGFB<z z(OB;${+>T<LT=F`yH6eVHaCRX%K=h%@@q_8pUQ)(O<s!{2HFI1j#Amvc&W6c@Y+Ws z@uZAe?Ho%Q>b(~%%tgg*fpmHK2M%{6+Bt)<ulUG*FJ=|`JXrEtH-zhb3b`p_oi%tb zC5nz;pcljjfBu;CT2a;`gixX4aUR-KFFtDYBz^5Wh^X2MIG~J9a9UD!Y_F)jJNEjy zZ08<c9CBhcVxiohs$!s3InoIHijD8pR=fn1!6|GLFF`{3W&%d+EuzBwX%+1)L7|}| z%bd)mG|O97k87IPVwRog`3IhK_sYfHf9!oBp!h0OjBIum#)84}8#>5#hModFdV&Wi zPh%t(k9e-!Ec@UBg9;#`FS5mN))zxQ*2>CF4cz#6Jsrxhn|aEm2+nU)q}$BZ6;>4& zX#jixnF$FAu*>3EziQDJ@R@7`s8Bu+CpTt=2SJULA|fJ!l@uc*BkD$B`=xK+HJ~FZ zy*7CgZj6Of9dT;03o_$>)l2KFzpET96nVl?F5vwj{fQMB;wP6~lzfpEE#eflztoZ# zk@FJRo28~k9DcU?7*TGILHcLd?dDPY@z*c%G$~0Xx=L+6=T?<{Y6710?9L#(z;CfF z6rX2GqDR2}!+-@RtrEDgbW9QhO}PeC^bTVMjM$+H0$4{jtMU(aGwmBCDt{~^I)e&3 zPm1S=<bV%G)2en;WyxkM*g>`)z70YWNU-pYc%iBgl)8~Kobr3v7`kjPIX(kYN@{w5 z{x$<`p$wfFE{0TPXd9YVh^}79M0gajsc&x~U{vi8#v%7o;*$)JuX^@Uz9Vi@UB6|a z-iVRRKogy32JT_VeYLu{cS=giQu9$R*thn(bHRNqgx1;UA%&&?2UWaJ8X?Du9<qS- z7_dfxJ+o@j0S6glmnuVn*1e5PkRWcTf9C>*tAaotaZt&MiTnzN_WGe>Dv~T;vlCaq z%>;7X=DQc9Z=itj&qudWZ4S4-qV|fUYzYRWa3~p3=243O96AC%b?=)gdHIb)V79=N z_i{H#wCF9^U#axw`J-FY;Y20$VGJ_@NszAS7l&2k1oG*u^qB>tgu%jHRZ3$AefO-2 zBoW#dFRFa{1-c;Dnqlo4=1Co}7F<M<>)w4FCJtTYqBbZ=scg=nnK943E#Msg0-f%Z zp@#$VR5CG9N8VHVS{0gx>M2`w9oHr4%DC6o{X-!F^qVYeOosnGAl*%H_m)M1R<2%T zzr2&9H*{IH`m^gcQt8vzZg_pp2KV#<#@;&`z|JZF=V(}lzEkY`TUZcoF%B{8L2>iS zZM672NJ(R<QLy%9=<_3PIQ>>IsH5|GRCIZRc0flS8Y%|~y$EX53!Z-0mtw_D5-S6P zSzvwgp=Sj}wn|hKa>(P07(lyjSyMAoiYiYnTt;tQHbcxsb!kckQ(sz)6Y<E03W%w> zs8rTa0%@vPylr0lsz~EOQP0BKD!%8)C%;(`6P(|yqa39ry#i7A@IB<+-Qd*^Bg3Vf zYa9Ott2i?7KAo`<cnp;sq=s>}e3#=qTG$^R$r#n+*<mkH@LcLO=@NR0yl{At+C<0b z#iYoUWvh6~+}bW{xYpFBx}=JCE~+<LBG2pVyZUDb4=>Kp!UFdPzl=!8PaXbt7J}IJ zYB`FZiV5`9>$zQen#@#TNU;crR;_EIpqakDzI!~U^+HU$8`o+im10wbaPo<=>T99Z z_m)LUi<d)K?oM;`hGYiL-x1l_RYtWLp`)iYx=55&eCF@y7~uet>fKkk<VC`l)Rb7> zJ2EW#K6c2weVG6pMtFd^!%mbh((Esch_GuE*?#=)(h2;svnN?Hi5$3a3^TAz^qS@c zV3#Cfi>UFH_2VI(lh=)I7V9=v6fZtjFavZ4ledkOxSbpz)e0n`PO(EMlq=EvPuH1q z!W~?f(Uc_6K@<!(oRsxFz5!)lBxT7^bNvr?uUn38-g&G$y5TrtOj10TfTmQun!u2z zkCkP|$6trEmJUgk9EmpQaAN#Lzcf}>5?V*HD3$ja6V96@NB&;S@ok50ZYebH*+Ro( z9p9*5<yBKvA9H2ExzWl&Y71>os$FW$q`Rd*q0Oa>X`3ql7-h>55F(`PtM8UuEes8x z3{y(L?oaYE!H=8VAkkeCINHoKm8hBa_@QshI1&nXA#B<#4$b5>CZ!{6Bq5KM83j`f zA@pg9dKeJJGA&|VsUn;-v@+mt^SHF{aA-~@&Mtl;!8-%dThj$PRXw(han<z4cx*c& z3uvUE_{Ovi`EEXgH8j^lEPgRi9hKz4LA?7r6<X>zL}r5;CP%c85Q(q)o5Bix@B{!{ z8M0_<SkM+Aoifqx;*1z`n@fp=t9P8$dOkhMqZ&CJbo0SNqpp1Bz-Q26F!mbj$hNmo zvBV|k#`f{WniC<lt{TIdd$z*|Lo`Mlx-om;a-qaS{SQ@Kn^_B2e?s|ME*ux9UXN9` ziVqa*Czz1Cb~-FEB$piX)H6}Wp=`}8on{JB6pZ~yKM+;8QOljJZNSEapLGg5yrH2; z+Jop8s??Ip%O^XZ{Q)Tjvjx-*tfc8%zT3D0O!$nMJmvFC)>X=ot2BzwmX!Wxc4(el z?F0#(ga(G<MsMd>YCUHZyt)3^aI~Q9@a1<=gt}FVWz=O2KdY}SfvN%s8m-D-RNh3` z?Ky1{<f>+6emJ&wpCbzPbT1j1)CS$^JA0)46;z225ZgNR1W=j{&DHycZ)R9dEcFFl zUT|&+k6FDAalGqM@t<=xe~$teF1V{*+TYl*kA(mnpTF4%uL%d9L1JoaL2X?tlcYmV zYKE*#L&#tRK#nMlP$%L3g|KeJZkJ~%Fr@eXGhneYF-)4t(mIN}7d#)NS=`a#)EOZq zT;yh}k*&hK>kVNL&%W`yhF+tap?KKIP(b#qVn7uu0kLah1?tzt;+z_I6HC^)Q~x}L zxyZTjpI-FOLrG!Wp0cuXFL-!pXr|kBG*@4M*WLj(hRB|KYH357P&)hTS0WHaC$wc` zGG9dV{ExBG^U1ztM6Q{Ye93MVOWl6l<dJ(MbKp@4uEr5SGRY5u7;n|YN#B&<bk?%w z^UqMIz6M0ji;bP@2mp(B`h4sQA>R!}P~Yq`lPFXyr>SY_B?uA6zy@7P`%>xldeU1O zsOPfkqWcjT3zNc=nSLt5u?*Ec9xBu`{22T|=dR02*s)QYHFzXm!~ePtX&--_-l|GW z;(2=FT2vHd<;q<)QT{-hL|-+<FRNNRz{HGZHjV2sD7ERz{w*o#@FMw8Q#uijGL6a7 zVLOpg&~B6Uq9cNKA(apzJvAL!BePv3B$<HLQmlOYek7^-D#A^<6@xk_QarBZsF9Ob zjUxU4H&Cn6ltM2V5lEtO25VYy@6(WCC1z+48CB!qo`vFA;)?}`O7Oe9O@N}8z9M;Q zL}-!klD&}T?Rax@b75pCjFW`%_!3>I(EMVxAF73~&L?f|ZKj~x(f-@h)4#J5L-)0j z16GZp@Fryq)6TPKMIFX_Qr|TnL_#=IFUwNmmns%X+}VxOU&^;2>S{s6NdjG44Lb{< z-hab`0(evIa8(&a16Jdt3Ht5*Z4v?Dq`a$%XELbtY5n^VQ~z3p@Ua+#k`8_GU4|*a zFrwhbu%k<xF^fF0N!O5zxc#NOVpij&v_d_wDpBt6Dpd!1Xb+xDW*{{DsZ(}3zN1SZ zTdZ3?u;_4Qq;|({-_fmm;mD=%gXE7rXS$mgjo_GeVZTMJg#O?CqRdH`j;RO-kR{mD zKi0+sL0VZk{zFxj3Lfg|*(N+>IUEGulEjJ^z!%PkRdg>X5)}#nl)t!4YMN+zeb=7R z#0txvfwG@;rynEF<MvP7E43Z?bKyg`Pfn`m4^>uRBl)_zx`4u(8a9`Nd62`}qqh+* z@+@AuZ(C;mP^XOP{H#RJn`N;8(3pJ}b>-0mcsWdj;`d(W+eGYNep1XYOO7qsX^&Q# znocOBT_)-a_=+rAI-1s_#FO>KFOPFk(=vwn`TUrDHjP_OKOjfbLdEZ63p(*0m-nT9 z!}Ud!#ZSUtDy)xUH_C-i4d}%eYeusix!3#_*^AZ0_zOv_(~8~fVbBoI*3OzzCdK@# z*`rQL8w5|5-0hYHoI%o%jveseuH?;LN>{=|t6VEHNcbvC_>RoSYlvT!hZBRNaQT4h z0rd};v#{tuyo@**%I$n8=tER)G|pDNs?gpmAFeD&)GT>R{d}{iJ?fFKGc1A@4h`0? z_Sw+n#;Pd%{LcaUiX=M<tWdF5A<|~R!6{ORkvj0)EV3u-Bjw57QFZ><v+29x&@4gG zX5_+2Or4@2oL5`4J*+~Dm#sn%9{GET03QlNK8Dosx4hAN?p|sNg6px5icTE0{i%=E zozn~6m#LEkLGQX*C;JMp8)-45qyFj@5Tb3`Em+rEHLa!^ZQ-CicIE$COx3OWX`z{k zIhLlV5h6v!PAucGv|qhZSEm?|IkwBC%5wpScyOIE^3lDmxPc{tXiQb>3M<4+5dW(T z@0sIWst0NbAP$C}$?t%MNe`cI4ZUefQUC-Xi5kKV8}<<}w@oi@H_%$+1#JjN;zl@J zhdx{*zAmt|uGwIiGOxBGt(f;ZJsK3ab~7~5D|gIK{dAGd<lp&QpxD+qh^oUGKQttx zPoZKsMaf5g(nnGqY#z?<)==<F?Bv}5Bw=$f?_8|JI&&M0Rjj6C3nEAcyu-65{qZZ3 z_5La*@eI44OIkFfSY+Zipmn-t!ipPab2hI0uZw5PP)d+1Svz$nWB7kccchLT_GiLP z%j?L}Yi2oe_qpj84?$e``+umXjU-UMCtuNNO6X9ozR%muibs@YxK%g@R`jS{lRYng zcD#;U-N++RV1ntaNhSV}MLZ%fP6h&rc?paBOAq=b&8wCi{X=(tmDJg#p^XRyq037p z&aquCLO!NvBe6u1pgis5madL3WmU<VDei=t?k@&uH`8zUDKj${l#wXVQ=Y#?kK902 z1>#y%PW}X<iX8WQq0=Ud_s^&pE7K5anS|jmtT!t_j9db@8in?1jM(VC&sR`Ztjbzb zm#iTSwz}TflS8%mWz85K3lC_n!~`fR6jLI~VgA{p9KnVl^EZSVDQWF8R2TG9E)Xqk z!`1$L{b_poHvUX-pQ=KC{SW}#iTt@DA+&h0T9pfjo`i9-=V0VFhYM)j{NG-N;HjPa zvWLuzaEAh2vn|AMm#^NVg<l}owg*%C)O}XmDSf>V$_y;H1((JK#>`5M-vTLLhh8~? znRrMC);H7;1qX%m{+QwT2v;-JR|R`u-!C|fSx{x7uNU2TaYCG?{Fq<dB#AOTzsP?2 z8#IhZLS04hK7;<FnSKF_AeuFExK2ezrp&7hbp2Wn$qxw|CC$Ki(Qf>RTM6gRUh8@Y zF2Z0$uVvPe<}lRTF#m+0VdaP0wc=AaQ4AQJ#KcO5VqvqxrxifjN+gesF$VMlQ07Y- zAHm|X8T%MzKc@HlR%v-5P!d#1kg@2)F^NCGu{s@$%@r>RKvkoKlgMFdiT4D}Xcc9X zOyw)~#to12uS!Mmz!1MK5H^fJ)11}C8y*}x{~jTRZOnT9+$^!ZyGwm<k3$3u|K}?z zX0?8uV^M8qN~9qEKCo#<(GUqUFT2~SQz&;zj`dr6t3>r|jQEpEQxmO2GjRxjBi`|s z3L|ZHJTECX>DW$T8D09uVbn`+XRwSsgJ)Q~bdFrm82|+z9ce`_&*hLu^|P@~rQ?y^ zz45B7$vKx@(eeR(z#SOz-j~ZaSwSHdx1w6&N-vTb0Oq}mgSV5QfL5}}|6KOBO4D^} zq4;w;0|zd^|H$}QRh7D^v+Lz4Q(i93=U+k7@^1({4|)~n{@$i`EHQ(1O6h~_8G<)R zjPX%W?X#}7B@zb7Sd5YH7&<?!NHVU25J18gEV*vgghUi1<11LLcSzJG2^*)2feTiu z*}s@h?jD_Mjo&RRU1=pw(6NpEIf%U&Cwg1Ca`$f|f5yZYdxw?xRP!`rnQU{?=5|mw z5}%tbwk|Gf8ZFS%-Tm5b^y-}RzUFWFOBQ4*!HhahfA2CT_+I*R>qIXcfG<}XpjcL_ zn`V;qO{v4^)9b&ss~0YEnx|+_;-b-e$zp$GQ=??vi58ZO<ATwnn&q0>&baa3Y2LDt zls7@meCp}+iwq=4+i$pJslHNeU8<i~Isd>)=vk4h@nYYnZaoa|gR$PCdlcVN4_cl0 zSwgJpHJF=YX2gYB8sM9Cbzc=l1}$I_G8)ly1;0#9F+_jyP!Au!IYJQy8&oC)DKH!~ zEDLVA#xx=eDekYpk_C_1JD$^K3bz#u^p`|X#P0wWMWtaz{y_Lk|GGm`RK65NWrKJQ zm`<LKw$rKVd{H);ah)3QcKy0Jeo&T?k>qk$=hP!y?qP=ep5k}4+Qab@bGZ6qF-Fda zO*wWW1&$Egp8G7H$yp9_22uM^FkJ>|S%VK=S?%j#m2Z7Tg*GfD>DTfxdZcq~=?|?8 z&-U+hnP8*cZRK{ExjxGDO;P#c=x%j2@D**E;^1!0r!e*|>J%wjIwqqCBs%Y>e;+UA zg7=m?G(GD7{00cd585#b%gj7r!cZa;uQr6T@Zty)#<135SfWLW>NSU*dr$Vn{^%>S zt>tj{%Lu6i${9ccyi7d{5LFdkvw;iRflW@utl&sc<9!(gB0Y@N(QFv{`OC=rHz6bO zRSIqBf8RAeQc@_U=M#iyxJUAGVtDcdTz)G=h&UykGYc#7j2r|k><CvBqv<GBfnacS zPrF}pgL`)%*5gIa-pLe%>Gp3q)+@41@V^gM;Jl!m%lJ9~<w74eQsBR0w=DCD+h_Vm zRABOgFB|5!N&TCj2AgTht9a(>e~50^QkC-NM)8MLzG`WHHJQ~(4$GpzCRYV$G%Fz^ zNBHdv>eSsm>d4a?XEI};mCj2b^`3YKs3yVw0Mpbff#3hS{uFn&66f@{n5z^Un=&?{ zw1UE3dbJm2|K{XR0*QQ9vPhuDdbSgN=1_1`_Skbum+SlF!`(1MD>!AbJNFrH3B{5W zGAuNN(epP^+2>uSv_gum<U7NTvY8sHQY`nvqf9$g5A+-4M{^`GMT$+0-+wIVSkB>A z`Wmw*v%+{xe#+KhSi8J|n(NjuL3f{YVVTZK`$mGL*uA`CQ<xz^Dp)x?Cp}6~Q;Z}( zeGE1!ia*$Yl5J`7ZIkE6#QG>JOoE5Kg67iSZ;d4oxp(Q->ZB;KC&!gpfS}F}CF-~{ z@C0+|!<@Ze?%j)NW(Qq8gjUx|f(nGmts5T>{ZxxgG><c(6##s~b#v;Cv9rmjK07M( zqcKG_fwoLP<;|Y+siVgFxUAE4!gdtQ!+|>y0I!Dfs?^R^F;RVPKq4f3W?<D^IBmN0 zu~~b(CHvRf=}9YGIN>jWnf9%HiJ2w=csSI^g$%GEO-fR?yo##{eV70&A2T?CRXV01 zYmhjwg2W8v<7e*?+^=Sqsi_sbG$dTlo~0kt{MZ?M-e)S5!1>t~UK7l>?R*jmbnCLW zf4&rfd-x97xY#2y2X_f%%~a;trP+d&V6mdtfL#JC9t=Jr2S)QFg?wtEP%+YMBtU8k zM(jVhg(56~b{R7uz5Llzy?7*O)C%%f-n+}s*r>A8fZeWVl9<gTZUAzTj11_Hm$Kdt zp(dahSW`t1T1bfE^_$Bb9sD>s>myjArvB&Msjr9YmNJJ^OB`GXwdIE)3lp}_=s?W! z?Q836p<-;2lBIWJGR%tU3V+~Hb1`9QuZR*HQUyB%M;vP3{cjgHfEuo7{hTtjl9;9M zWy7@kh!Ir(xyPf)c@@QIn!%wJj#D8r*&yNw>~!D;vcpksF{x8PK69Kya)&IhwJ;2l z#emYkQ*-u4YLfKJ*G?Z7PTf}|U^quKE-^y$KPQ$44cRZaD_^G3V}CsBGQ!eAv}^FN z#%wma(^uZLb{N%W(R^#7)zr}+zq$!EsQlQasM=d6FNz~C0goFCz%Im<4WEPk&h)jx zp@F{U_O~d=t2^#@UF~3z#>v&3_h<8xoNPu>?+^DlUb4lB6~GyQ#+wjophgM}3`fGD zx51D=;vCg&Sy>PX|C8ylTI~F$1vUS4KYhq^*_=_TX~(OSpj))a<dwNP(J5R|LiS^~ zb6VpQ-_N2Z4Oy+!tDKfle<+czz{EtnSXI@-;^OrpG)7F&;_HN~Sh;KWkGCsF>Vxf5 z->G%a_3QpI(Ihd>&cX=Vm|z(qb9XrDg0}B!QAH{J=229<EAhHikF&xrD3UwYT|O&J z0vimEmkC<)a0rh4_CA^JLNKQ|J6*P<O09gvChn~_XEJ+ENV>L=C4G<%B*Es808~(r z>J(CvS98}<FJrRz{E|my3$aldE8RapHDslakz467HC{<od=G@5Ck{byqk(XHbqqqa zAUn=76y%3kkPx_vG&^hn!pgTkO1>bZa6$n1lA5T7<M(+AOJ`x7KBjdUEeu!FX5L5J z554+T%JEP2p}10knEmMCyZK&WF(rSDLd4gwv+As(p6DsFdVr`33(En^mB$dAdI3x_ zJ9|BySwY`uOya?VjLgLCUmpTlv|tYwdZ$eUwaVjY^Xuv<LR7a~hmkIL<j|@gNQ~fR z3*l~p{xQ9IEDd47FP%@(Qp7|3Or~sEBL|DM&|t(y(Iu(Io4UgK?aM4%Pu!6|K-IVs zKo~b;$4ZRxC9{Q6H?!)igY=S}q5-*P`3NRp;T_5cDMe*!XQh2FAsy}ghIS3`*#QQu zK+3aWBTsq<Kxh?!?089*#PR|(k}8pFCDm=K#gG3B+bYLS-%jDd*#N+1c2?l|a{(;8 zq!BK!dv)t7D5G3&w;Zvrc`LfZ!%^2Of9@!d9*?2Njc_4WX!^2DZ}n2O+THf=*NA?^ zWeLgAlRDVo6(#%LREp27LqZkHwz29wMqhX0r+opU`@rlHjx$ck-}sb!Y!l9(FSciA z(M*#-l=#nSA1vZI+d_)YJMz@fAp_{NyIczeetXMJGJ72lRYpJ3-bsDLo-(6s&E+Em z0VokDgq&L83U%xC6w6sIeTB$si;8R!aH<zA4$-2=To|e{CT+M$z5Kec@+x(K-h7o! zR4Gj|#kDcvrnSp|Ny#<a*j#w6V3>fxzT1RF%GH-~n-$|U#alN^Zt5rE@US@K++44n z7%}gL^Er0)0{HqjUqEbcAvx!0UtKPR#PN2L+ogd1V7v4y*-W!CC5~OQL531thLS9` zE?%Bm`K%qxw}at7=QAH)!*4rNM|qU8rKmnuzW%m68l1XpuMAQy$X2AKip?6-h%<23 z?N?DZG4J<sg``;n&@LgNFsFTdW%*e=UNTY$a;*;bNbqlo_K$ji=?#VG>eTe}5^Ajz zH^66C*!7SWGXh?yh$qHRqTwRLE)?7C>{Kz~5F)eU<`RwvXxDtZeo$i8iIrhiBaalH zyO{*+ViLFaD;wed2DTsGoWR9@EL^fe(?<K5`CbOg^VsuG(G>mSu^_A<q6%>rx;+Lq zc436r@KB-3Lo2m1%CUK$zubT7Csg=zDh)6;(rEp#OvS3)^WbQO<8o(nFUS(2LZ3Ee zGf=Kp4h*s4UO|z#@goO}A6&y)_7sJ^<d*E3#Z<|M=K{;%?>Hp(+=2PjDPOgfw3rn% z2cV?}c}LP#ZoJ6&TnWg~L#{_~o0~#`;E?T~=NpJ(`P2QF6S7zVxsM2j2?736GEz}* zcnCrvYGM2wn-=a&qyIlH&k4$}MuxQ;gg%4&-au)!@@!-rY#L5R(mXr@&e6?60apnC zuh{a|Dz%++0(@xonsJjJsX;Bv=`Mr4;m@BMESW4L>f<|3Lz+~`Q<#M*8A>WeIQ}3& zjQJTCfR7YILVZf}FL4N~Ol47~iFz-s1h~l7*4vKeaoa<tAQ~_iCfQQFQM*sV%SDv5 z#;F`HDNglx&Ea*Yc$@b5vG;X*j2tPv@BfopT<Z0peq9DN-zN4&LRL@t0ov@A7W=Tz z`9wglN**gxDpJb41$``LuQk{jIVVk~Fex7@JXdsyrY$j)QE5~(9`KTY+SWdP9I)u` za!;U6VYf+KH`#LX0By4jY)B<ow56qyf`hfV{lE%ERRE*<1AdtWJ}}niZnexMMk-#+ z^ORnICWXLV{yPw(&4?Z(agPvQsCP2`%Hc{8DK1KcRwES;O-Q)C<v%@%5D=ho{81{P zpKfCAw9RUyr=-PKc}bXIRkmB5o@ecj_p%`i$LkV;4#l&1KhG8tp>l#)L?jf2jH6DW z{Qx6ukJk6fKUgHQ0g&uZZxI1|??qpJBt^K|u3n#G|GsH<JhV-z5(pQ!t*=emoSfGP zl`ylm9y-7C7Xg*e!=fzuN=)iLRV{{qSd$fK(NqZBX#NXofdz|9^j5+?;xyyDPxn6z z5o<v0nUtokT6Lg`i&X)`ky|n4{&k16x4HL%8yn!uU~*m80nH<f%PJ@!IVl74Tv<|v zCk2461V_#3c>tvjRkX&jA@88HUG&QcDIV$4+3<LhX!)}%M#x3mUobYtvD)g4*`uh+ z)68Q&2~KjR|IP+m(&MnAyHWL}ngw<>H+wa81-2V^Ts^a@eO||O+J>X0$^O;^z_HyQ zU*aYn1jul}6=pV;g$CX6<B~^I(42V6kWX6EC;k?T>c7T_-8%#(K!6+iun{mT!<Ll@ zvt%{-$o`XqPLkL6<_%)aIqxU+z|lrv(?S9B;_Y)Ba_~F{S?<A&X_sGfTU%R8OG{_x z$&DXe4$LCD{5ujLh7D*oU?T;<xI!2@Ac1_`$JDXm!b{3WnxI1eK}6)cAG|unN)w%W zih>i~2UWF>F&CaS(j&RlR3`R}A5f#%f3v`5$$|`+mckU&*;UbnA1Fsy*sBygq#oqD zcC6H1tzY%K)RlK(qc;67f|mWKG6(l4t>OIGG0SZfyE58+_EQVH87~~alT>zj4ETw4 zEFT2-_E4(m32W~*LD({)V1%WPU7o^&Wef4p1R|@dI*yP1b1N-pxWX_#k&J6sz`yBH zGYCCmHOeUTv$X#d{<&wiMud>8Buk3PltG(Tq(|~zF!3?)$Qu=L-A)7cc;d}BVgULj zTv~^m>m%}LaMOOv*4X~=hItOaz->j?=i_;@zaIe-@BoOvS@OH8zQQ&*-olwQZ^Q0* zvHJrKY;PW<%N{YJb^)ZElarGR3<G0hQE~CN+cj636b0_=$$i)_6_Lov+RQqY+OWfH z)7WOj?sgQ%(G7NJF3iwl{U>;~y}b>y3?4^q+rc!nS2>-aG~{M%3|W;F$XyB7*9{81 z`6&w$I7q-yK&`I;JQ#iGO7hHP6hX$YbhR*Haq~#YZs^_Z(BJ&<_%6Nlh2!cWu%i}} zqeL32UPZuu55NBuvzED3$=aQLaOgzQR2aS$l<E#gu3@x!Ba*}n98ml82^kQk&8}3; zx|PI_CW*h3+PmX>eAi=IdG>I7Yj>WNNP~R@nyx40?AI^hH~_*r{<*KqOUEluKxy{} z1OS!FBD14;lOw-!CH|Aq;I<>BJvy9iYRXAA0Dedg3P<(jQKj}|hXd8n9)<G%I6CXF zrrtM<kFF8YAuzfd5fDaqhk!IlNrOm(ba!`$iU`u(NH>Ud%SOj&f#3Q5c3t~pf9%@X z+1YuY_j&I7bHlbn*6f7*>RAJv&#&shhVR}jEiW&xucL?NsqaVP(*ok_o+4M_mx)6F zzN^*v<m%5qVoX%PUJR@b$JgcMOiwIFXaQ#qz~3Bj8{ZC#hy_?(nmEVF`lhbCTs(|- zG0kZ|o1I2V;Fo%8O@Az-8FZH^L=|?B5HA%dfSMdY-y}6(ZzEn19-FIAA66gz{#7IN zjjT$d8(X%NQ1C??)<<d?iq44ML>pNtZmzF-msCc$@pkz$mC6gqB=q%ZYm7U5#Hn(Y z&J|I>5g2)hc5;863;a-?6N*`vh@uE8!8Arr+@E(4yY75b)^D<`re$C98THxppDo&S zP~)y^(t@&$00sEy(Fa7gNUxQ-0}R<0kFk9~Z`r|;tuL+l(^R#^CW~UG?!GVWGC4pt zWr8WEl+L1{nrS8VAVpks5gei1gbh->DQ{isXYmiI?BrjfwVV(}0Sy--;5x%<2L}hh z%?`|GXcG5#h7tj(AO;48Il%U^ZuYC>3@YyHkuKKc&*mhJ1y~kXPrIoalC)y_Rd4;X z)hk)32j}*AxI8s1^jcC(u<}s<$#+W}Zan8c*hLeB_X#?zW>^2Xun&Q9e4r86jNnJO z1E(_B30Qd@d>;>T_4iqF_xB6NRP@}x$a>7#-3Cj+q$*RBkQ%6lL?lwZ*j3VB?oI#W zi@EyJ+yjSMH&fZSu8}$4G>+}nE~)x<a#!4qZD|XuEe?3FypY~<!3yuD^AHU^*=)W4 z7p6{AIwk8zDT$4C_qcnNGSqKMPHp!yX~tmQ9%s$@t6r4_dDDth1Z_g<m>i%n1KQG7 z2hviRV-y6C0dCULLx;9DdRZd3yaj?~d6dEnUlnzCwD#ETY%H1?3{I*UTlXg4&KIFa z!2|z5zRNVl_^SN=yC*efaZ<>^5CTk29-f*XKSHG1+uI`}BS8c-B{Q(J_?`(k{6nWH zMv5$bvMTe+pFdx8*^4y(`)K~*hfuY;VA6(HhM}Ouy`zg)CWSLgXeL2YT=o+O$mwl$ zeTV*XKHS2<EnFWsjV99=O}*p|ZRdc`I`EH(sC!-k0QRNYx&doV*<|y=kr>KT5cfd0 zn>uxnK=92HpYhNr{6nguHzMxP@U#o>O`l8r;^OL5zXV>tfUJk@0Vb+YaL@hJ%AQ2? z=Z-R!xR}=U8!W)@$C)@bwtG1<OW11670Hk>#-!<EYul<Fjf8pWiVB%$1(g9H1j=~R zn%9)^V`IN{M_)v<`gmspWDWV=O~+<H@We((YE`jswWugx03Du=f=-uGIcFI3Li~Dc zh~C%F3==;4`{hBsy1fC14;PnDr)l971~|Nb3!oUJrV{bmi3Z4f1_S_#(PX_w!}x|i zB><vUt_?ucuyyvjf}t0KmV`w;=uT&#zC!ZKN)K$;)rPrhab<>TPuW5+sO&kT5?}UN z_>U+#!uIv`b<@rDOTf$HAzS@*Q;y^7f|XF}nz{r+_y`H`vf1!U#Qk~COe!I(F%QEt zYp+SfU9_Nd$G~S(7GLEiek#`Ve$n_OSQ2kO(Q*0)S27sn<XGzy=D59d*cm6^-+liU z)jCtXk`Kg(&Id+<j4P=s(nyl0D3_;TBrQ2MEjg-JUZ!e@;YChaCd01EW|E|(FrA-A z)TNK4Zk6TUeFc<@>Bi;s3m@y=l;A@*W{nECt=T2oij8UbhOe2(cWoY=ctAzjuuEw$ zA$IslFp`Yo#QOUB;2;{gU^I22Ausv7eIu}HSpM|CTF|FS#Q0CgZcd~v(WJ>+1W5g} zIA>-_od7RtnAUkRlxB`^swgscL+tNf1hk<9?v1YiqzeQ_aQyo`-}uha!69R#S<!j& zvg5Uq67j1;#r?^>oVJIOts#gcGC9_C5DKd6dPrHk*c-(oR6a`<H_&VL4}T^>Z?N(p zK2h<gaF4=oKfW1#I&J+lB{DlBsWh+X_OW1p<k`g~ri3wt{#D+Or;SfHOWRLfSGW$< z8#%f$EQn7!4gwyxx&6n-68<+Q-hR2vSXYB+CZ^hA>LX=Ct(zW6{py}1Uzg`;B$9Vd zO7>?3KH?$#_d5RK6}-=B&{h)jI=}3uZTJ6_9mN!Zf1r+Ev}e7%YSjwiV_kHn?FbC; zaCZ+0YwzfY8v-)d0PR1zrUY6qghEmg@I6Iak)YBMU<SP_*1U-2$>1cdnNc+4dh@T{ z%Y)%lBsL~1soG#kE9}+b1Zka}l2PS7igXo&Ng<SC6w$)JZBrB5fnU@xd?^4E08P)l zSg=Q!vsGZvlv3=bh6#btktl3!Z6&A9&(9lHei7F!;^<?t8q*P-CESL{qLf<Q!zw?W zut>lds1y+y>nGEAj+vgh^Br#jg#ot-<4Ik9Mxr_O0mQvXBa9xADckySdBv~0eN42W zEO1i+{pB%11|TpUYOT_XUAJTwF#J?-QCfkRA;Lt=FklPp+X~p4wf<;DX)hZ)r_y8B zVH;&;eNlNkELD2>NjQj<j3U6at1KSZN|uvyZEa&iVM>-t_Jn>bWd!h|tT{Kcv!yE+ zPb?pM?y|Nq1*MNz>FLE3`qx#=p}7Tyhb#lYn>HQ@NV8b-u7j!D>dK&c09+X$Y4?B# z&Yy*QgG|hpNrJ%Un!IC|p4n0W4Bq2FU2wP9iEMt;ho+1-Th(QwOYRvIF)dPY6&e^C zoyFalO2C6P>4J=jxXVmYqZ_bJ6?$#Z=Jb7f^o=i&2!9F}2LZ$OX*L<q?$vBvY(@gp zdoXH{d)k|d9SqY|%(WO4%G~@TR__j1ZK+0p??EYQn^89>G{!p<n0sBvT3$Scr$Lg2 ziCu17VZLNHO$D}^P7P!Y()|W?y9X=Z+D=Z|PIkMSeZ=6=icxQ}Cex~u89`?{ZEdvh zqeTV+*M9#tV38K>@TU+LTlIaWQM3Vziir^qCX@K-zf&64Kl`G|3T)ElOMkX5X|YP@ z;{nNiRWrT424t;yj!nk>@<QYxkG!BOcqk`)uJTROtsh^vB|$eUvZN~#x;VL{7w>Go z$6qycHs)L`SPN4yF<^np2P8?dG)+FL10KS`9KvbhRA6-3YkNgs!@^L6j}%Xn9S$Oy zOGLD?yY1?AOEYmMnCJV7KS*Q*&eEOPf#;qz5|@*SG+)LHLiMm=C8`u=r{E#FU(F=f zrML_5{-dSvspyA#PK3M+<*Tn2&A(XFn`Z<BQuDG!GN(UIP~TaP=1OL1?|6#)o;D*{ z3C&&bSN|9VE6dZLHZzWZzv)%sN9i!9N?mehj$Qe7&cRvJM-wG}3sNEp%TP`3v++f+ z=!5EP>#x796?;K|?sjOT7=M6yz<tjN_-MU6Oq$ply|ot-7`*@LZ2LTJ?YithUEG*& z4IJ6O<soX4(zoTRtqqkZd#zsLA&QIWK`{;Kh4}Z0WRQcVJ*0(us6mQ01V9w?2$+&I zKXPLgmreeD>_ul=U2|!ry;8ek?4@8L`>z+qyLCx}k`d6LZ@LpYP&GLDpytAhm@u~0 z;>k{<2eKOlZ$)ZA@2AuFmi=Jq3U$x~Q5IYP8(-2dpjr)9s~dT9k0D#1y8dsXa|3<4 z51ES#`0C854?%d-mnUm)crlNPBC$Vud3v4!yiY)hTC-U5JqsWT{z)0pWS86Ve=jTQ zq*R#?FA~_4t#z_ONsWj*N>HtV228trR_acJ>y*q!#dX2I=pu)*(qKe{(S}IX*VSNv z6whxdDb15Ck;#OVJlm-k3zAViry0^(X933C^!rQ?H@9<;zUjp%EZHg3(;Csk4NswA zL1Rl|k>@{9WYK3}Z;)@~Pfr$GQvi)Ct+EGnsgBWMPt4>2#tCrqCZ1^zg!6!*Fj^H$ zS(YuvN@{T+QCL6!;O4%tYfQ6wrM`WrZVBjU*w{Y6MkdGeq6PNN{9IfyPXGL4IC*fq zHxXC^5yY^QmuW^>MC~L@^WNO}fqlUN_sc6QbN^qE9EBJh$jBsQxENDeonmC=HToeV z#$R7~_27b9N5o%BGVq4|xq%Z^wx|~7;x_qdFe?fK6&o58hshK?2eiBqEpfl=%{-67 zgW`q)h3H#tQ*EGVvZ=>6%fX!6lD%g3`$dR<_AwUf*T6D|F@@9SJ&t#5rBIa22*@iz zAUExTF%Y{p-^v6t$q4!2FY6iJttOum+<UA1-}-je$)u@i{xU9gX>tM%nketBKo%cf z@=6Au&fO&cwBdJ946Pv-Q_4>~DbvAe{5QhV&;ds5+Sp8{3hdY1)k8gY$%-!7GIAUj zU+Y|>2L+9YKmro}?xz|V4FMggvoiu9T+~qGrvx(r?j81hi}8=s&l^PG$pK5^_&Nu> zgtjo<7%lc>*M4^A#NN<pn(1EI=5rB01Uz(~j(QY<r77krfqCymnMr|Q(E3+MN`@wN z!OCan&Q=fxo%2xYG<8Wq-6pHiWhJJm=dTzG1X#SQqfehiO{(>BSED1vLJ?RxEgH1* z{h>GLzd5Iowf|@YGDe5K{2TL5f5A;HW1s8C+qp&TU(yl$=Va%savE?j()Yxep@;UB z3bm3<#0-wF1s#r^yK*InVws^u&$d8O%^rlQ!mtrSJYZOqp3#7<T{KyxyH=c!m3YZW z&YwH7!{-0*+{gOv=*<?om-$6Oq3+sOat~ZcV&uO-Y*g|H{_INtk^5h5hk1O0<rOI? z4uxKOi-kaLAD<|A@A9e-FK6KJC=rMbJyJar;reZi*Lv)#^j#>%P0dY?IC;PmgFNlM zm(sr>%iMv}o4=lwtvboeaZ=CTZs#}NDHMVtK?Nz$*C_D{9s>lSjHQeNKRMya$EYtj z&9L0k^53VAAbG?>?XWfz9KXb4xQwfNrrq;%MY0O&<ZhLAFj@3|<w#f7v3K@uTrc+e zzVaKVAmp|@s!@#Cod7p+Ys%$$li@ziE>!xDz>~jP%?w&1{5FI;Dc|cgQITXy3KM(d zmn*CQWFYh-uTsp8L_s3gAhBOF`cHZRZP1&(S6;5ylnXTe3mUb1Rf&rrX}Mkya<|0g zi3wtRd;4FW1#H9%V+vY`4{Pn{_&1Yi2`z+>UAB~OyXivX$jHKcd@B27K`C$<<mVgj zu3xdA>F>LU0}zW*Pd^Y^dESeBaIAty^p&#<9I=}8W-j&3{?Cv1vWV6Z$nA4wf7c<f z0X5~3s7ld{Pc$P{w{r1S5>+Ca{FLgK1Xb{0EVa#T(tvM`*f1Tc_+mu@rd*G%GN^W8 zetsv(24FW0s++Mhk29=B=KxS>Q<wG6f4?WaFxK@Te00%{7h*d6dABc<VZdxi7xEc| z)(%_~;>%QW<DAwOXzb>^3VFd`s)k^*pfd8o3go2kCnyvM61>Io%Nj=5FyiYp(QeNG zdC57|DH7)0&Uw<}82dM4(qaQn(s+5=B`yUlSn%g2a8@6V0a?|`F{fRBy7Euy#KEvJ z6*_ctEa*l4G#0(@sbL)S$e_c>BT_}7yJ)Xa2cC&IKw5d?tKXwdC*&b=+vUv*k-9;K z;YWn+!adTn4E9`B@4h6LrH9dfSMmLqQ%5U2k7t(>-3<GvIuvjZ$-#H7#nuMu4$*3X z=E&UhV{hS?P$*O$xpEF}`I8j|Qy<`&<*BpWZ~XiBZ*+7tkt}2Fq2}|l@0w%aisKUw zqhI~VcSGwbBg14>nVi>%zto-mO;V}nRA|~#v<wu-RyRqu88$pH<gbVH`Z3yx_yeex zpnK(QyzjE*_;oO@cm^$efJ!5f8M}Jo45TSB5}tb-=asceD4v0z4bU7WrWTF4sWUu< z<xw!(I?C+QV&wy7M7lR`QY9pV{gABaVpVCgSf9u&(*{ubzK+lJgEIFAC$p=g7%!f$ zzaK3E@x~Ur-z5U|?pLh{ejB#kp)plvgxy4x{ax$JF;!DKtDu?gtk?V$ia>I+y6=%J zVbi&b2q88u3b!^i?KajpVch8SYwqj}aCLR{^voEsa>i|1IR^G_x76Ubti*j)dyCb5 z?KVG_{+U*NT6OevlYx1Wku~ezy^*b9JL3vymw5yE+lfg2BSTqGbPP&i|27ioHd zEKduTR1%dat*0lE7<S)z6(%bVT5`k$%LL73i;IqyF#%>#+hxV7g_KN58b?PfYCNQ> z{$FgA>0GXEFS4-4y=|ve&37o~D-)9lJqPt6-)<99vN4?BOu}{uN3dUWe9rpoQ+X6X z9E1l21vvA=Hvdksr^lp*;kc;ujqT_=D5X%l>r+ag;W{TlD}j<D;MZC~N}8Qqz2KXT zZ2gxUK%{eiezVI)ME_RtPJIgSUhS`f<luzQV|>rA{|;8%j{P2#x@=g|Z7^K(4;&tl z@$4kCz&@QZ4IxZ5BdZgV|0z5uh17%j7c#U{${XE=c%J64ycSN63Ussnd>?kVj6ty6 zvM~DHbZVcGPI1cj)fo>@+SGov9+Jv?e8rt)v{^XsW?tbTN-)Lq4G$xTuHikXjQ(vR zlu=O5l=wzg3kiJ$t0pS~JHT@23)X#<i5ndcwluz^g2KGBL~US!>RNA?J1*oMFi;98 zAL3b{Nzx|FAg_-%LP*K1S2$%uU&M%!i`T90UZ;@J;SC@w%#;GZsv;wQ3^X8E2jB@G zdtx95?>)P`%OVonU1HJCNtWaDfQQnAF59LR9<-&TscNyyQ0%hbe~)kU%gr9&oY{GQ zek5((wpOAX-WIJS|L~x(rQc<WhLR*N!%QSlpRJq%0E;bjjXu-&O6VnL_P1T2$H|W- zVx8QH+&$L5E95!I?L?TB`~+dZxMU)4;Qc_Bu7en!JMW=`G&(M6+Mi3L&-7C~*dcm0 znu7Oa%7rfmYg)9uBsFR$gMd{%S}Szs_yM+5gxe4g4M>2&&gbPfWZ#Cm9W;n$tHzX& zQ&Y!DS&*Z@AGP;gSo&mHC=|}s3lbE2^CUX+OwVU$xbU^0)VSaRjUDt+GBNF_q8k-N zh&oVBggG#8U!+j>MX|exWos&(JP6^-PwuPtRd-b1_jl=)es2tohRdfTtCvC3ol}#; z`*Y|2UQWfXo9D$cyf<I7xLYp8Kle=DfLoLrRkPF7A7j5Aa88uM@sHaNjhe9o1xVh< znNOPqp<nYV(*9vG8HEK?<JIhabpc1eXJh~ZOu;5xg;Tct*-Ffoz|mtn1Y1QAy<hac zyml6V+2VJu5sJP^AJw&~O49n#wBPc;qQ@H65=})_qRui~Gksd0R{ng#rf&|Kwa<nF z*xJFI??4>-cLj&$mCkhgSAZyX?!&J5YU$-iy%STH>BD$GQbH9h3dt8StCV&Ox&Pf> zF2rr3njhItRPNfbB6$&c=k%a3v>r%qynCw=iiB{$$^7RV<rpOKKp;7jTFGGhg!j!7 z20YXc#jEK9)f9@TH@iWV67HPGD`4kPsFkV;7>g9$!M|kHR7$r5&pz_>(#qemzje^< zuUB*WI_dGHbqHhIXHYqkrCXw@izfFmJ?~nhD~j;hK~NjK;Qe6~u$9W_9DE3WyW2Q_ zfPM{e*$K?gn?85jzx_kPHopH?ilX-K$rotAEhDTn4W6nzvnETMsv!dfEJGtSL1`dO zWjrEsgwdDlbiiG9pq%JcMVSPKaJn64IM1-CpF;xxi_W{5wV@tEBpT)4wkNuCenBUA z!tiyC+Yikvl65+zN@`+$1B|$j88{+bm?BaH;f#ly9ppRj2PDqvUp@g+gFMIM-|5gE zq`mN@b^|iMq~k!Q)a`S(f#ZZ0<DnnA7xh-zqs<YJHt~A`Ga|HX==Q5F07L)d@?^BI z1v22h&Q#;!F;I8ZtlVOBmm-po>Jywf)PC$28o>-U?6dLusPnV+>&j|_6EkNt*Us-I zXQSPwj+lVc>Xp20VGp0^laD(Jx~~M}<_5CoQ))Yv2n~ug&1>aLd+Wdb7!7oGbaG5k zO$W;Lb}J|QvGNG3&;F1CEz($HN!U-mCti6zgGf=0E<6<lx$bDzwt#>jf$K$W1l4o^ z9oh%_TE*QzdojWjFKl=JxcLiz_I5BRgi50!_|}l7o!BDY_GfiM$i*|6wFpRkOnGX& zJg<>{H~~Rm@fD06H?hY+uDHJDN6E(;!&&F)U(8O<Pw5kChc=@b%XQA>@kVrOzhitg zu+LHIar`&d%I&Y@SpjZ>CYl<nIT%1V0&xrVOMrT|bDb9)$_H@9>5I-l`mg0ZPHmIE z`zeLZ9vgKpSBO6?ctT~JM$zU8!m_4G7CMoA6FwCb(FXG7D<Y(xW9RLYOG~3lJ&(lH zMN@WBYhB`wW+GARhr8QLfKXZCT~GHl%ju*e@>}E5<#c_wWQ@?ipB<1;7nnZOAiSIF zXhC0~MO92#i!^1MqSY=>jslNn6;qBzAAeWlUN))Upd(U2^WJ~jT253WuKr4aNWLVM z8b|Q6w~qp>Pca%P0%jzFsY~Z(Djh*j+=_msf(!hWKLKSWholnXUQfsaZj6w)kl{;u zo{-5}dXgH9G8Z*P32ez8_jaz_Z#DR?sy=k(+DpzHd${H-GU+F!`=be^Gf@nq(+n#t zi=p|uY4FfWR$sq7@{rTy55SnC?j985^Il9M(HjY<HOl8`H~%uf1<)&cRTnxni$KjN zMtiFFx%^vMPT6|1ei>bSFxa!smd)W&`m!C-nhsS6ou1?PbhvfJqU@>9rVP+UDsRhg zX7?`v$2MRj22dOE@<ZO2zMbSkK$w7`T&EVXK?tGim1?kNN}Y@Q*H2$ARUO2GcRfch z`FbhpPeyzK-}hAYN(4S-m6HeMsM$AK?cCpkhSJEis}?3I4A()Pvzf@Ro+DsXB{kXM z>oa0nign$}vk#;q%~4M?PWA|R|IpoQ{k*I&oEW-13N}WELMhrytb&_i@O?Ehpg?+; z(reDE+?U_%x`<E0iq3+rw8vqQzP^7rzj~jh==~%h^yNi4j3WOW{poUZKXzmg&|5eP z0R-TY5hYs#jokcvlXvglnV6Uu7}TOU)lAgzQLAs-FE6m{vK4`KQYn91eV9DDJN;WM z&5k3jOdxA&|C1PH!v)-ua4|*ON{ph0Lbg%lOI<M!P==HU$qH@~cEf8eJAWkW*{-w{ zqm>A@&Yj#L{8_1S<x1%&#ASPnX?DsOOcJ33ncMz}1lwP@JY33?Ea$&i9H4v|h!xuy zOu=0Juje@B>!kAqnEEpoGn;T{0!?SdQ7eA@Yc@Y#6<~3#dp3L?@0?%ty{^X%J1Fzp zW^Rsmj6mzR`9S0?cMXs?3a2ua%U!P{(hP0^RL>U8zrfF|#K=LvfB#<R>cr6zmQH>z z8i<D&o=v66W|MH>l*+p5B5{u6Ts{4MHhg+Byp{AVGO;(zX&Qqf&`*_TG_f3i1k`7( zTh&=<nzFiaarbYBjGReOo0E=5zxrEkgJY<6PI?tiRUGuIChMaoG#?M3EG4?7&FRlq zYDC<6EE2@>Ne}G27n<#4$!ufj9!5xodE&MYoGNR*2a7@jyBu;20k<g+7L#qGp;HPC z3S<ez7)b`0Vx7e?{gC(^{@hP{8}~^rpzvC2on5=}uaU|}mA}u^N9W#u|NeE=KGSk8 z2N7sbIyd8l1Zhml?Rz<F9J6|P+F{J)3d*&=Rc)0a$~Kqh&-j8`rHS_Y;rhV$&q{P& zC*{rgM5zlA1t%s6aC5is9$crXkAJ?Q=_DjVA!v^SNG3<l{!j+16vTH>N~U=%MLZ`n zQ&aHhTTLsj+3m_+jm){R%MbdjCSa!2e<vrxl{J_Iyf2<fpF`vZrayYhU)|TgELOh~ z5S7_c(~7D7m8xVp?Lrddo>I5O88b~c0{4)oPsVsN;IX99YAo+#%VhHTg#Ta9)5AXW zj~Y57+ubDMN8>U(Pey&O;~D?$&&!>`LAfJ<XE6-g7RCcv!Vm_Q!G9K?Y7$|rsurLq zxig<>6r@;1LXLM_RzSpXP{n^tR=>g;?+Z`u&!tER?|Ybs_QPMfg2Z#Xjqz`~o#Nle z&QKmkP%>@}MS~sRVo9!Xlf)kBoi!L^xy8trCPJqbN4RuJ)!AxHJAJfKD2#WPF`XRC zz?UP8nX)-dY_ItB#cIUfZJS-ecKUcES@Sk3Plh`V)&(w;@T6QANsZJj3C4GdWw-B~ zokfFRz&%8n00u`Z)7Ay;ZxcycRWGHK0HFPs^*b?ym{pM|+oNnJs=tu>K=4bjv4VBR zSFx)}#Qm+!m$ue4Gn2bT>Eh7g!f>y(1fs~h#PRExe21T6E+3D-b@^Jf4jTx##VD}( zO0z^kTzTmnp+1_JtGk{lb5eM3mgETQ(<Zb|e6^xkTq@6ABTFV$;-lVUB6Bj6%aum0 z_0b%G{|xp{SjneJS%i^`x6iZh8MexDNO1{8q(;(HS-`9sbAUXlF|HFfJV9-DhCxHh zc-+HLsurd&fR&JVJXCPk&0m;hYfYV)h@@$msDXg>YqaKDfPoe{(VMWJ%}=AX8<Ze` z?ow9fE%tP=r;<3-f7t=S#77}uwrpEG3@-%O8Dj+;>7%<e(^?(7gG5VgD2i$a&>+c= zy3E@NdZF`$NwS=p92^Z@G=6s%E3NUbUGzLXpFICgTT3+NA~TCT@Rg|@Q!Xg$raUs( z%Y0Meb5BPpK?CK(9G6uXkQC4(dRDoXm9^N_;D=KiGgy4N1{=6{$5{nH=FC*=_yGCg z+D|H@d;{U5mlIo?AOdx+W{R+^wa-;)AFM5_|LAl5R7s`@n(nt!DUXvxxzAP5-u5vR z5v^TS{He!ootcRq;S5hx7vBx`+3)nX3`9a8CA)FWzzlBIl(zUHr0_pZ2PCZceh;G2 zA_n*%ti%_0{(;>R1eke+g_&b}U;jbu1C?A;MyzC&T%lVY7$PCWdBqe3-i%-Jk6`h> zvsG{G<@9H?eqLjOiizl`3Dcsq5pk3B#2-dFFStGKrI*5_8#?^!nmo_0_a+k_Cvsgh zyl@o*Qv1q|?U5k7c!35O6@(c*(u;E>M90rxR??ABIn?|=Na80Pv2-W;^IvQeYk&n= z;gHR#XUGx}Y$Mq*7Pi+Qpk*%>(m#Ys_xB0ih#DD&)gY@f*6^}~Ks|oDk;Lh~q`<*7 z-?{SJH&UZPSB`AE!8Q|NT978cQW37>$GK3_Ncl)HKV}fF&}_XxlLvMH-7BkIto%)7 z)JDkomfl}5c$5#=@Sh|Zde!{OBWCb)sD%WwrNg$jMburnR{61`J4ePW9}RpHQ>NMv z1l!Vx<K>a^!^6X~vnl>zc{;kdXzbYr1_nAi<IVLJ0iiLmu{gI#i_F=v9%-rW88+`s z|B5A~$s{-HvPanHtR1uKerr-+<jqy_@q_Lu4YuBj<TD_8e$yQ9vA&*cUsMVF?Ci{~ zWgI7eoD8(}wilHX`D1chw8hRS_m_{s6!p6!bA4V26R!~G_YjnCFDlV}P>63|J>G|K z2NesJR~i@;Ln2XbSxS=up!U~4JjX(>D8op#S!)lR*31!XTDM3ns6%MQ5KQ_)B;PXS zShd6V;d-XCW1kF%diP5{9^gRJ>uhm;`Q{&buDsM=u)mzJ=~zfPM11~xFEBGADfV4N zf(Lv(;vxFj6BQ3YCPQpFk-%<wK_ox9^@al0-=?Gh`9rbi6Sx0<UXc{BP+DsuHJ{); z@wZBD4-umL(RD|$H!^DIer{lCaa+r6fYXy1shR5e%Zzk(?i-%b**C95mHO{*LWKb* z7obEb))c1ljF$<27aJQ3uolU|f89k?#WDd?*GYc6yaNwxkiD9FcH7@~-Cu|(-nTg= z!ZG8mX8lMT)=;v#0x3?_tAZ)c@d0(2$`%8hcMWB0C4hfGp4(ig6q>7UE5I^u|NU_F z_xv;ka;AiHvqa6@=;?Re=MDQ<!&7)b?(%!%tl==xfv;LII1R3{3PT=oR?t$V(>ySG z5XqtxH`$USShA%Q8g%f<GvH3lVU3k;UhZd<5=Asr2W8mG66f3>%$x@jHz!CCNyl#> z9q<hm>M1I}Ied7)sjOso#PyRkZZk>P0SHOex;Y%g+Jr$cN=Z=f+fNRpq{wz2uxwbW z1|GzUmlA$-#HqZ!-4{nf@j;=K6sf;=S`t|xI6IaC1@<xF#Cvk~I-_eKdw@P#f_|pg zd=uT5fOuT8tiV{FzodSvE!m3Dm!I(|q#Suhqad(R0ggZrx7>J(ac3T0PDxDJ)B|-H zKmk>Yy6Bus1_L@44h{~$)O~h&e{~3;Kiu8<vAQ!pP{c(9OL0VURAR)g3{lGBb7ACD z)k^LpBb6=I3ndy}-o5NCde64=^M}zDdS^=7m#~d#mv6eq?Qg--$Y_AH?Jaw$78<_Y zZn-v@+n2>tG!3tdH)3{;j@1ME&(H2vYuZWD3Zfu1+=~-MM{>BR#wAR{oZ!3C1aCM# zoPb<e)3W4Bnog5ee`<2aGj*-tb@n$=lhmCy?C`oZAjzS^{T+S`OX_!z<UJOa>i&M$ z%1Z)}1&Nd$RtW1CSzPYKrQzNfy4OQ5$Vv!&!J`(RTz1;MVpmo?Tzis2B=xH}N9|vI zXpGBaVd0iup+O~3CRUJ?zw_VRbmS#hVI(ZVPq_k2k_C!^-JdNikdBGTXYKx~YfvcF zo{*33v0|)`Ppj%i$)h-^ApN5MO~HGd(Zz^m4PM7#M4!b84|!oQv_?Y%UBE(@mPa;> zNc7L$Q>*lr+MX0=eT>zqoRcB|z$**(ud-DEe>Wh;MF89h-_EDoTk=yGmJ(Z_HY>6< zA!I%|J_aNm{rxh+N1mr_<{o%u4D3mb18Wn<$9J9Lq&NfAOrewU*VAnWb#`ZVmo)es zqW<jZtGQhLzgR{qn%)&F7hJ3~h{KF4a8{7&+Kq)sVxP=yK8%Ey7MW|M4_cC$frS5s zyhSgZV1A%>@^PnbT50lJnO}Zrx%!#WpjStaB$>)-EhP^@*PTs5cN&qx^Uo=Nr^`Sd zHaalr^}(y~8Xva#l<px4BpU2l8yXa~w&rbohF?{%C-|>xbHj7geyqG@P3Ox0;e1V; z??9o!eiAD$vify}x@ifIph((66vUSP#V2d{lFw9qo1EL9ot70<_wUOIt};?Qd@?UD z_}UxfP<8cR6Wi#|Juft?OnLB1?zUq!nNxwP#=WXTwoA-Vy^@Hc19-HwL^Z5$yr!kC zf3#RTkKvD#=Sgk|-t5?z3Qn$V2VH3A9~33}htjFV?UR+qGC>;N$Thc{4GWF%3D8yi z9Mei&KGEU6^oSYSd3bmLNFV@ghyxIK0iz)VQi^w(2`6wvXHPdI#OLjC6lyo-_Rq=9 zm6?*<H0|(y5iRTK>1l<|lq!?+T%;Lq7p>ATK<?4<w08Y(r5Olu50*;Cta>(*#tEaF zZ5fsh<_p=0E2Q|HVV0q_%le5?GJ@YLm(RiM-1`RMv0#53SZCFEAH?girX5X(jx(~_ ziUvW&Hsc^^B1PZu$~kdvfAnduc8Yv!LXvdA{F)%OgczFyWUqz8R?PegWW|shDfZ<T z1dY!;wn>tf*DlhNa=wK{9UaBVdG;52^$($p3_O|Q)XQv`SCec=-8)YSVLbkK<+BGK z@>L6fweQ@YuhySt*C%|ALMXT2(8=5H0aVJ8xmu1!$LuZlK*x^hIYk^k{^Z~@!g2GS zn^O4Adph}|p}BpbAOf)JN70cjNYz4jhq0vmZ~IpwY_ubgY1{YjWll<9UrNZOSy0Jp z=`U<Ml0E}sXNt=~*$qb!qBp>zwBKfQacG<yyDtR7YNZaTF4SB^z_C5geJ5DlH@rtX zP2roHl2r@ebiX+_uQ&=xJR)?m`GX}P$%<C>@50*Yf|2@z*nzqCmG5KVa|h#@13*Oe z^P>Wb%ATDN9T1UVqH|S{;o}*opa%3nJo3-`xGc$DDliji&s_IWbs$U&=0s8+xP!8i zPH7Tn%+FruuD7O*9X@K1axQ&u)Sg+iUzV3yv;Vs6^kYqrF4-ErR|1$&h!jrgun&^T zDZG*B-V^nGTy{QfTp7I<(L~?ooZSZ8ky-DGq~q-aKyW1&CXO@RGWwQ}(kzi4EgBC+ z_?n-lM$(lH&1^xwcXemmg9#R&o?k=fF+IbN(3oNep+Sl@EbaNm+z89dqa$DUUh4+~ z+TRQP#?0Sin49a<a)bpm)x-+7e3DOJx%_#oM<*|1$Pay~?%sBIBHI@`CfiESc@xuq z^*YMBK6y}Do<Y5(t;_VVS=M8W!T48b7%_$iaCu<HH>{b;iJqM52&)oV@y~sVzKlg8 z?phoh{Y)N|RC<AHd3NJg-T^T=tp{P6pl~GJR+-N8hwi=j9Ok!BYLiHM7R+L4SgnT> zF3n5+uNOa%Aa)R_D!DT`GRHtf=yrmXpkY9dyXFiC)OZ7cG_{~fKzx-@=0~<2b(#7( z!X}7L6su$cGHn-qGpj(#P1yR^v$W05^EZz-njoP3&@GdG+@M*r=VELQQK*&_XJO=7 zb)Mo`rF-90k$BknT=4t*jxHC;;$K}S62A{_IZg62)ANUIh7$(t@7zUn_(!n+BGS?Y zS(my@x89y^<RKh|ybP;FAJJWvbbvCdmV;{P$Z9c3UP<`~*Q$R}KvYGWkc)`tMNE*? zr*9jdkII=0P0&I|b90RjCaPbnuL|0uW|GEhxBC0FNF$w<v}ls78J~>rU`1|3_M3$< zjAF7yKY7&UN%k^iqS5_w)c;YZbP11<vf=NSG&SmNDy($ONVnN(i)Uv>BS7U2f{Idq zU5J^Om`H?b126LN)@GfX3-j{Iv{Osdzv~^Yt{Srv8v+j#w3*)v2l3Th)P0-+irXuX zedPme1x2zU8pIu@IH0h0T0XNbSqNS45C{VI#d?+0U4x>=it{drMxHi|JHs57eC{n% zL(|n$C@}$z#0Gy`uphMKOC5<S!R+$xTu+pEYFRnfV<(}Iv~Q#Y_3^+xC|jcCODiiY zfr0$yCTL1Y?>q@(F#6%V@}Di4x}XfA>FYh&^3xIL;7*$Afyt{%wMgloTYu}*s9#ph zOvjR~rIQ#Muue^$+&L<&&&_o|-;@0^P$FCW@a)CaJcVQgqA$3>F)wD~%4z!fz9HSw zf#Swp%+;+o)XP`=^6q490`k}Qd0Uh?df)|h=?LArB8c}zJCMhLt{Eu`QVVDI8Leau z=L;fM6r2gpSI-M3CHr7)y;0Y6SxvO^XW7!4|NE5k1HA4b*qVRKQOHp!^8HWO+rn_H zFZcb?NCSlLzMR9#aJ7~=@~|o%xo4*SbQ6ZUX8U^j_{uD3_TF*mvXAsT7qM`dlsUST zn?-=W7&5tL?vR_kp>}pUF4d4&$WdiR$YhQ&VfF#4Uok*;k~CE68430j%?Biecj5v9 z0umD4wY9Y!9mZAFT>)b-2BT|vZrlSQ{`PrmM6v8_lBzGX4)V^J`#1f28E%}{tOAO= z19EgzmwLRI*SesCVvLM^k@GJKg)47-Sc3{up>=rp`1MPU^vR%i1c1OK{&xt$;gzo- z6&Ms@r8v?LG}{18qc48er^G`&p30ZIl5TAy)oR|FbS=5DI4PS#U#H*I8geUyBcsJK zr%r~6D#Vx}MSU_YPZ4?z-%~L(<Kg1z&Q0vb_wRI(fIh*Ovd{Ueh(6^cpbx<3Fe>Do zQw-6Q-hF5?I_d~7#F^|otIkrbI*Z<x>QyM!mm0^FtuxLjjT7%lfDJ3D^S+=8)u52X zwJ!qU=z_{(bn~`*dYpI_i>Kk++gnsF!sCF!S}m#J=g#{GntblODcYjM+Ks2f5mL17 za#{J(1T0}HfuqlLBcEeo64uY`ifh)**w{Kcp{%c6apI}oj+Zbc|I278PH<}%_NnaW zuP}Ve$yHtb!w`wMVN?<l<RPm~PxgN}gnR|P*_-?X>0*#qgCSQ=<)EdT@XKMxf_*+~ zXJ_ZYr)Oc&dzb#LW<Nis)uU@6h8taJ7AbuT4gCNlL~!v3FbWW)c<~k)jMKr2DGn+| zVW_5Mv-$}16mjUUrcoT4UGV$~f(i<ub+ajxlamAxS<*GM|H4E0gMfx2xX740Qk~%@ zH~QaG+HlXfeZw+XsJ*vfM40zgw$<8u!(cSKNM1EHhW*zn=SW=Kvj^->jzLm>hsjPG zE6sKVF`=PQi7aA$xCY<=@OMSK=LIEGeAs1?xcJ65cl*7HjaWKre?)1cm+py*>C9Sm zATD`A9!iUboWHbmDSL)UqkqvS!d#>g%?hqs$fBdJG}0%qB0{UOTh3Uy7QB2;gWa4b zY8UHz&fulx<HZ%Dh-FzpUmu|4Oy$1Tt<w5B(55MRjDx-=aU1OF<HHtX$)7Fj0x*a9 zgOX~1XP2U7Xs@|Y?u@PpH(A!+<z3RK+2_s|(GB=`%Y>od?D*%fxzM6RY=335iR3d! zh8|sOh3-{Znb(3&=%h4v3VOkaEro*|s9G<5X(ZRD*N%QV?a(6p?`4eX%GQmBGeXm1 z=tyCkB}0%p9dFc6@nr%qRrJ&myKfZZ3qNS?LNoNZH>e*Mqr1{L1?MT+(BgtSCsK^0 zum>e|UXj~5Cy<ibS?^gg_>D*Q|Gx@rZI5qa@nAN{KVZ^pj#Inkku6>}RJ$pke8gWX z*m>8UUvH>Xe()-7G3BvyKOt;!%w3tl61uVHMQH_JTEdM<_#F&}j8teq*fNR4Xm|E> z6N-B!&M?KN^?y9I=y@R+o#SLSA6HzyYMS#(W5f>52R?^D#%q53(%094#rI&lH<;Go zBV#IYqF{<t>%B=G>3;Y-p+I+DYWDe_KE+W%_c&C(UC&=--n)l_BEbA!^>>#ea)7xV zbwA+`NwjRKS~Sz$I|{Zg4RnYHuBk_I%Z3r^qM&TI-&=E<uY%Sp@fZG(C0dQP7mMj1 z4Yo(`rf6JCJlpe=WfK=QD1s2^;_jRCc8Zi>(DDct6QNh+r1BeD7R^XH1u5$A@e<NA zw}3zZ+`fCMrKx!KIZz1@hI<R=L1QfBAPb6_Z3-S%bYm|kte<^;({jQ*@TxNeDZlBR zO8m%~AC^{qog}4VNb+@);NiPgwc;SB^?4p_Jx|?}ruogg>t8#Z#oRnB*`C5d1!wcU zeKD+9ni>SMr(W(qRgc4_3)2?$DTP$kX({m`f7@jq9^#-a#A!b^61R2Qj6?eAiq5z) z>K2V=><?cqYO{*2anFW12sSKy>oO1=+=)^BRiGS@7FWeya)2MWU)mQ-*1eIDtC{=h z+w~`YHC9>T44I524}m{Oh9r)%L#fetMBy|+=6D$571K#h;`coi+Y3f?o?g55r_WT% z@x2;meu9n%)UAx|Z$6#gPo1PyKIkD2PnGRgzxkvn_$Us)gV(lpmOXr=r)G=4UyPIT zE!DyYm1}$W`+MDvcRtJ<DpkJM`wf7}<=*z+o2fCA`XeCvUuEyaVylGP0*QA>LsrmV z<;*kMt9k1Wi%Hyd?tV%kI+f?gL&j{E!;!6z(-Bji@x!KK>E(NwkTI7%V&ICmN*;3p zW%>bQSg|UjB8K%}GBNT`wKe9Arj9>YoIbm4unjv}p=U&|Zx@=mr+$y53eL~}=^R>s z;=J8P;Fmh`Wsz!zBgx86XN}uIJ09JEdXJw3yGV{Z-FE{Rs}8#rexzlB9yFQNN(G?D z|DFy*^1a|(yzo(>`FFU4IU<|savh!oNI%AlhCr|!=m*mmE3JkWioQSpp3oU~KcT^V zUX4)t>Cc@m{K7>)UPVf>bVqMpqmC>s(uBm~aAwYEt?1`k@Cr^P%W2rq<MhSdD^@DB zebZ{I(5SouVJ2Jr!5j?BO)-jFTAj!-Sd>yC!x&YqwyBu$XdGs081*#b3s6ZdUp#Cy ztd=kRsyjct?wh~FYO#c7h^g%wVUvXA?7lM0j1t9w2SOeOL99N+Xb*Sdv<X-2pop^8 z*HJOoXJ-#;HyB7FBXkVvMFPhbauLz$0XCt*B%zRjto(YY8a=Dnh;Bw6WGL}L0y38I zW1ZvZp%Vdr+h+wz3I85iOf8bnDWG{P&v2*}3X(<!gA{}P#;vsfjtYsQ2sA4<p3g+6 z(k?YMSGEayuv^io$g2Fb6rv&!@<^OXsUd0Vi4ECIi_%a~*qL>R6D)(zU@-sogGJ-I zP>P2b^Vw<NOG;#uOL|NcQIFiuJ>*15^+KGSNl}Zx=qe+8)-vFisfVSI)xWea%w6Qa z7UoSKF20xgL0fB-lLm!(Mv+k#%=!4(#IUeMqsm&`U_b(<#|*jTh?KBoMCoZ`2C*J* z_FRQKOltrb@scCF0Zl2EG*SnT#Gqc@L8XDXWcuaA-7toC8C!fF>g!tSlnYd`oXWem zhVj~nH1+)5fm-V2-eEfRUgWG91EFk9;aV&_H&-IbIh;%mOln5{nirosq2gQfrta6| z2rBsTGyT1bZ(%4{^0Rb<pY1jpE)dN))%u~?q)Ll8lO2id5yPz;2NL%IoYWwFeuF4D zv?Lxnf4TT%_qGCm7Gr8{?W<4_jX{aFk{LUN4~jcpL_i#j?4pq$Od(fbw&{~UUNkp{ z5&m7HkkTb(2Bm*23nE3MT&<y6*bZEQ=*KNTU;?T)yqL+k`Q`EP+p%P5Ka9!>i!*!+ z$%CHs@6tcny~&oK$JvbkB1iuo$%-7QNC_U=R97qc@gp&&;7ZpVPFqWvitI;MFm|J^ zW$m!zpEc*3MATj?@UP~kiZ<KOUZARbi5+fZV-qKD;h+-k&79hg5z3I;a2I0weHxoQ zZ1+uReKUg8bzFzW^#}#CrPsV{lyf35vCEdJssI7&CC@8Aa_TnZ;$Y1G@q4=1bGrNd zWz`PH$uRkW>Zjd;GTDS)RFTB@AXu2rJ9m0q*Q@Tk91@A4>W{0LtNUi|4K24Ut7wn6 zB%RW~XxFpfb*)9VMmjz!f4P4V{@F;9)VbR>F#X%(Ov*T9sZR%Dd_a&g5`a>%n7FJE z&OU5NAw%c6a@pd^3$p+n%tU(A*%bfD*fl6qwuYIX_V|qo_`q?qp{7A&lL4hee8ZM> zRq1(?+ZXO`*RNnG1Ni<nBM~_0LFAz}qxX-6*P=th@JJ-PS&rJ34^Ht*vxMQ&?WeYQ z^u!|NI#x5AwH`Ui$S+!=?gQ%UH&ht&%C*Z@;$Kp~)fym*+P@nd9BgcCOiw52cu6w} zT-J9!HQnok+#nzm&kDVq?eSGWfa*}tdmt9el#vP>nW3?)F=<fES>i64zG#63fyLh~ zlaKz&bk0G{r9~bi{rl4V@T-NEyT^n+6d|@(&X}(t*_a>wnHGn4>lbcmsWBJgcDIDl zhPe2_ONx(7k5Ap|h}WOx1_-`UY}{wjpcVaW%Xfm2<f#JDLY4O2U|fC}%uc!+v)=J- z8XCA7WlGv&-n&Sl%WQ^W6cp0B#?ZdX+B!Tq%`iB@Pzr<yooC82Pz<zK_STz!AnTNy z#sE{^9#NAcFLzt$$7_}H<SD+Eq}|ia70ez!t!x#EC}?cFzrQ#2zI)_8j$rebZ5BW^ z0s+|$nPZMm1NViU-sfg?s_3CZ$6WwI;J+-`rWI;;J0J_<KSinwgdnT1&<xldnwgOe zHg<|n^deP#FZM90u-1G5^HJjAfxE{x)&7(bMWsj;WCVtNxuvaO>u<VfzPvxxuL#rY z(gp{pWNHjQR+b)+4H#U(KVJ7ZCXGUdF6j#;gNKFkG3N1AD|Ha|%Y(4F{t=FU8}F00 zY0$-KgCZ~kR2RCBd`K48vyL}j=N!P{jOqlFlnYsK`?3Xo(3XfHoAOo7tqvU>CQY`~ z9I|2ses0bt+qKD*HTxAEkE`-Xa`y>pf2x$U%9<rx4uvnMh(A3N*FwXu5bB+f7TDt~ z$k>R=82(Q%<v$GfnCZZ@9b**<t3`2k_J>I6Oq?;6NQX$jjLsWGV5H}4TGz@l2&bLe zKo*E``00D!Id$b6*}s1oU6Q3-4otpUjeh`rHBTx=ZT55^h`^jTYr+QT6?wMvxdWX$ z3yUq7osZYz^^^GV3EnB26gDtrAmpl^WzP!X>MZpFP<0v)rOrrfF*Oi8SSek6wCY)q z&Hx);;2zs^)bP`TtV9|}u&D*Z<v>sP9Tkb?INq*lj2hIO7Ms{ogZsM2Gl5Fh%?Cap zUY!Wf1_^HO%3^pxP*VBqw94%}&u%DC+gn-|UoB%w$J&}0*}`TZEji~pyBraFcjQxk zu6M&1r3~M6nZ*Iv08p-2hI4%0zFb|8Ob^Q_Su(EWy$_P=+#qR=*u;`InW>z~LYEw0 zG&?R;2ozO32XwHQ3=qqoy7`kGi@8@1so|}EYRD!N8;309yc4gv?Yu41#v1DTDGlqR z)g~sUj3ge$fvsyQAX&@?g8)Cq!PPwkkmhxcSk<i@b7#ix-}yt&CSLa{%D%u8xQB3@ zD61X3%Rvj3CZ0{kgCV`^8Q?>}Ih3`yK5$vNB_CoSP;PtQ`R}$P72%C`hyK%Nw_sce zxZmq%;3km_-IwcPa4%WS1*9{c$v3Q}t@ko+?_rqe;zU6wcII~`%hm`w5{4P}p++-r z3<~1*eQwHmyE=adp?O?whS&2q$ckN-=-_<vO)~Fw##cdGOG3Jf2)1)yzR~G^<6qF} zV{zrz+FPE?n+K9)^0X>5X+ZC<sC|TKMxjqvx<q3OTf4tqtq>aVbkoiC_z^{t_YIqb z1!&gp8XVEF^wQzqnEXk=NxL+ALA*lhjLtbCDxofo`eTP~OxHs~GHb4!fg`kV;xHeh z@AqPTxi%6AkkEzxxAy~Sb~>w7=DTe8zUSM!6QQQ9w<0IeIP24RqR7cE6*<}m+}^}k zI^KOCb1{Av$zYYXFpdttkyyCm%{perBp}_HKgh_Nsof|1K^4u3$!F8q#;Wzf@HGQW zfd5?Hd4CB{RQ(j*IS#Sm(fxLfa|sD0jOP2;KA(;>zisH0ptB{tW%Ip<bG0t6n1FWY zjwzZ+2lPdOb~`+)DUycw%Z&H7pVn&NF*JT-2AtADUp&YO7(k3tYheAn<<JzsiC1L7 z=E=AuL9aZz@$5MM`+M2H?GTQS%i3~gdjDolUwtfh7M)_^zc=V3Z1<S;38#PiZQ<AL z@E+{2=G|{&<JzumPotN3u?x!b?~Q6|zAfNdWl7IC38klFlO-OGTAM&MvH=MPXI$1N zPa*CsnhQl-6__RlL2FU0j%eqvp;}7a)o}wW)x2#b<v{tu*5N(I%Fvg$^{<f~77v9> z^>7&S6A<^6SpNt{Iy3j>*69pA_u8_451}GjQ@vxh`U_AbZ{Fk60RUzB_crPAK58p! z)nwwJ&HxoSA`33A`PE$Y1{t$Y?q-|~yAOGa!@6X%(l0!4p;SY`HD<8@+LJF%9U;%F zSb;Nb$u^4Uz5G4Sai0{<i0Fyw<kP1C5V3`Xoo)4BjGp!vTH^EB;>lK-E1m3dt^03O zY>Z}3M?Vi#YCm}!;|ksS?|RHW1$J}AE7znF{d!T8Y0O=>vQ!W+pRR7JUG*-6m3SUr z`zu_TCv%Ce?wxWuD~+v0LUMAPBs!QJ&<;pp4bYHNngy)o8VwGBt=-dPb{bOGl=U>9 zDJ9cm93zyMqOKVIxRrbg3B$4=uV=~C5v-AGY=oyjfOA0P^i!_dX&GJY%>9ShzL4;5 ztz|=d7X-O%tJc$WR2G|sa>_9jpnA4vjGPD1fG^bWif959B^M#*i;j56k^chN*-oCH zjKL`|ZK2%Qzcc|r&~YOzmL~avVCWnEfU}P4tIsNkuZX967TIo@2G{pDrAQvXK(flO zzBbxd_uBBTjN`etj2w^M*;tMhUs7}r$>?#wuYj=iACKxz_}Cxl^wT?>(thfxgo1!1 zM^GPKl6C4Z;PU$t9G^cYBAim;al;N-8*zR~W>iA>UDX;86$Oo73163oiD%=WQQR01 zQk_8M=3OvZ$&!Yp;}p1EM)uBt@Be`iKk<#+r4&d|did%!0{w-Y$6I?6r=$T0I*WY` z;p4%F%zl%bq^X^!0Br~i_GM!-5~p>x6rYz^<(kmg-}n#utFn}cv_BvDFh`t)$T%}f zm}2RXLQjqqEPi@0p_6dwBPhs2{@y8<Opyff%cLAt_P_qfO+l&)bZ1CkePH4^SXD9Y zo}g_&6X??(e7Yl)>~o8w4N_nh*wXqrcb=TDc*u$5>WlLZq`ZpH$rAum_t|;%jc$u- zemWTlWJrB%V+a`AXUmjPnX{_LvmJyBf{2}8GZ7{(-NTbM%6=GGAifSag8Xi=*Wg4` z>WI(lw`aQ`ZPizl=fY+E>$Fjdg;K|r>zSxU1z!izphK5JVJKkA!V1C)#`|6GcyjoI zx6S=(#NZsCog}N{*Dcas$T1s-!QgSbX4M{DZOEN$$<$TAr*h7kRgmWYI64Qvy8ku~ zpR5zs^3s-V>tu6zE!$cx+xGIww!LauC)@V&@^gOAzwmv1Kf3SxeO;QyDvFT@e_hsu z9PzCH{fK*^XVedj6UDR|^(nf!jp}RWrR&AkDJk!Z1_l#qg6C#H)T&E{{GNywmJtx* za=9(iJp1zK?Y??IJPSz9nz*3qGrIrSNKuOm7j1U2I_j_!3yok7Is5FP7tnu3;<?3d z_P9_F&v@L}nG`MxQ!nosa`51Q^@_CE<E%FQ{_Dt{GLuBe&$RPSqDT6+W9BBTpoE@! z<(Y6gSN`7RY2;Zo2om+{hapL#9qi|O_G_n0v_NR$#Le~3weg(T4AzJQ0$TbS_lh#i zu+y!FFe3Ut&P-f9dHh?|3e^_`Ntmf`1yoP8<L1$$_eXH3dKK*Opn4RONvF8P<Y3%V zNFnu*)8LPSu6o<4{iUhamzx_p?~(ZVQ`rI|o!RsHrTJ6!vf9a@Gy(p!`o9WqyJU$6 zxi*c3^9j{TKSUni{R!<9J&rHK@56nWrkm5cWSEcQs-*zjSG?HKJ)O6Y2e2>$<3Irh z-%R}<5yI{O_^08B@lO&#w2QDp3hP7r8zSUSr4JtuAHVQP(;272`(tH~jU5wtr<C%F z7+gQg6KkEiy0(sXb(P)kU$Jf!EX#QrX7Uy75j<7M3{;{gWsI5v0!>dEDq8Z<gW*Lf zW~qosgx@lR(Knb2!uYVr++KMKf3cQBqlRHYDcg3rx@f-Wx{U9CzB0n24YU~tR7xyd z{6=I#O&1k)+0R8p3*m!E8-Uy1?7ePB)QTMGU*i*wlG;$f$As`C5E$vK^l|&DRgrh` z4qkbDd}!Ya2Ff*2LyZVY`o?I=3jMpP1_8khrtFp19~Ly_a~9k3mHp5!YMho3&oT`f zk5go7!rusm7~vf4hGyi`M}IHJI2baZUhasw_zK^&U0$;z-x|96o9;)R@8Y7?edHm+ zi8w1!11tZ#N2aVNC%-fit3kKW&JwPzzTP^Yzbo!ms8T)g>Kd)#Bnox>)%_T%Ru<vI zPh5o05}BDPS=Bsee|rD049%!0@_u@Jy{4+FN>I{D;QPn*&3o?}RjpKZ!a0ASES_h$ zq~fei>*z0gkRjR;{7dB;?jW2DXiWk$0;#J^CQ@3CO+(p(F(^Lc^t2KiH}ab>p)Qtx z-zGgy54?}L0Ox9#P#~kBfBKtJ-d`$=N&N5{^vbw+4VKdDubnS(Gnm*uZ@4aYL=?vv z`|jCG4|hH$W5ZPJ4bBzgmF*hyE)E@Dp7v}MtHXwbBV^H_Xw%QXxn;;HK1Y4{B?|ij z6C51Og&hBz%n<RPp*(VQg3!DWG&<<wu&!J09I^K03kL-S`%a9{Ci{!u1`WG&lu$$a z^IXqH^v_+7$%ZT!-!P%DT$9!iIzh>=rKx|^^JCp$z^!_=JVE0Aa8nZrn^XBT$fgZ! z02o<f&~U0QRAM^1ubmGALKd0fA};=P%h#6Rphu3WnsX$O@x>Y<&M4jXwLMJLUt{B@ z6N=B}uh;o>A3kw$2ION_y5B=VW6LR;snaKWx#%#gBk1HB-ZeVAuP=;?+WgC{&_mpj zf^;&rm?kTCAp7(|79(-ySf?>e#*`S)riW0|(ps+ughx%J%&!aIIRc1DZLj2t486(_ zCccGJo*gDO<!=;IF#&>0n)8aJg4lZ4r1-Zs+IHCe_o_h{NM;xF(J{7J!a(sYC5w%q zer{49(mrx^G=}zN9XIG`7Y_{l*oRk!EYXm~X+b-@J*~%8iZ^VF_!Rv^)W*b;6oG=# z=lYDfPDCuN)ZsT3M2*rw&E$ObP<EY?%^2PQ>LtaVNcc=mO-ri?SeT4-t7mW7GzOcN zwDG%)<^{DT96N-k)b8>Yyj3x78_`q>u!RL9ieB~L+nW{h(DAIILE)FhO9mW$#C%w~ zjo5Ygi)^&^XFLHuVW|R@m2(Cbg_M%148<V1fh`nn*u>#mf#Ui47>aJt#WgztPDd-U zW<{?v-@l9RSXGZJ+BA0uKHa}q=12S@XIUnyZ$OGQC~OD1b~GA(f@q$g)|2~iEyhR$ zWP+6y{^hl-AyW{-q9$`3cL&APLlV-{q!MEEBHPYb`LVVFIcH<Sc_6dnT_qf?iE>xs zBEx9jF$~z|Nk(78Rx1amBq|DN{e|*2{g-H^MW(|4VIiMj+w5QN6NKJ^FeMD|)paaR zS!R{r*k4N=E<FGJBda^);hJBZ)J%W7WtrK0j9O!ISM}9oRxMNDfz3`m?uQN{PqO`S zPG(U1K%f5OjCGiyv}8LzGqY4|5IivOcWo`b$MN$ZN8`8uy6sHX0c6%{pN9P}cG_J% zKBB$dc<^Kt4F!#gG-)fjxhd^9v6g-^A3u?)QmSD4RIXBR4MMzY4uT8SDwwX;bg*ws zF{mU0x~bqNi=KRzlrK_hnYUar<IT3+J=)wlPoml0AM27a`gB{C9GJ2&;<m`t3d9Fv z@|W@axyikYHYoma4N@G$@J~$s^A&3}&=3bcuuzn^l|9;}EizxbaTPirBz5y3^TI%q zpXJ&iW6(eGx2d*z@9fNo)&I6o8g@HESZbbrmKPA{^dcVB-8!`h1DT$#!U$qKg&;*P z3fzhw{tQ=C${iv2Bh!nv@N*KU^=g#?9CpNGxgciXSJ=mf8{SPRw{~AUBIV&1)ZJW3 z`Yz%{aD6Iap(TP?DjLHY@{z~FjNjQ}t=Z#KJ#kA6xuUlP07(n_^fVj#u?a-{ZzN%5 zZCu2MNROM?!(I6ZzM_OSr9|-lH%#zjE2hBmx?IcDY39`=<G=r+)n-jO1Ti#36J=^1 z&b}KzqB%ytSL@GOuj*EbRhXUEs1eqoL|Ys!3kXCzoj0r0^yo6LbZ5DDSXh{IM!=gj zoIMneqp!gz0r%S10b>Ja<Hz2#dxE^IXXhHtEeyTno_$>YdyMw%PqZewlx(vF7hdcp zkClU)^6h7uZ}ssw1AG|q34lFkBg=t(dObqnPg00jkp3ZPugZBq^vvQn&aQ?cp+D&! zj0J=jG4(IOp9!ZL_vu3pN5u8DOD-RJeFkaFV9bxJ;>WXTqOUBcs34?zdk0gD+Y&_v zyX3Oyr?ot>K(-@u+3kinO~yvsSF+?(vcpYcyrZ*wtYprkpyxB@vawR{V?u|)Q~BpV z?b@>o7)M**p76}p-m!v!BY-B=gh*~WK)f(VTAI}lT;QmX*S%9ilbuJ0^7CiZ>}f)F zdg(S)jdlQg0+cQczo`7?!k^}?w$OdX)x|q+t(>y|aX>QhZ~LycQVo5v)~#n|FC?`= z8HQl3bK<^WFUYnG$LHVga4qJ{`sG6xeBpO1#x1!b;<l_ZwQ255xwS~$?;Hejnl>9n z%3dtYYa&tgw?h2aXO}e>7pW{P4Bx}#sIU+Qe(_h~e<(3P|9T@bqj6OtDT{UR8^Mwi zPS6x_zkV6|(jD1T6L!iFN63S%3!6BgM^VEM3@U*FGT@B^Z>k5`C_iGtf$O(oJi5@F z{q12&#mTOpjJYFy62pcBd>q&_Eij`Pm#OWu3(_tHUU-5DJX`HEQn;B+15nksJf*XC zd9rG>*$R#7UJ4EAa5jt}&w-tnZ`to*RjDi{H^n`NWAOfYl{Bk`)U=LrB|=NjtNl}8 zitN<J_~J67^&W)i#tRIwztE1KRasMe`-A%3NFeH4t++s#>(8EfxR7B2%GD1f6Elo} zj68)A6<yzM?|cbV)*qpxKzh}P3QNtTWya0)B5ATCeC2_EACyXt&%ccx(xG7Ibad&r z&~n>02Tp7Mu*?LE?iaP|FQ&<*N{A+n)EXVdmXzRN%r5KroAF*L#N3P}xbR*47&=Gl zyql?s{tj3A^&L+ZM?T*Y76;l4!wou%6#iNKAJ#TS!Mt#u0U*j_^OOUllI0qxk|<Hu z5!Ne!=>Ln}{A=CPNQ{)pnh6DBmZ+05F<_^**O$t}X@iu|XZUdcD8LvKd9_FOHY4xw z$D!A=k!nZE``=e+RK~O&0er!!l*{bz*&?ByF_2j2FT5a@mp#R>vL5q5*G3k&e%y#D zSM^-T(tUN-KD<x;@EzdvjMN`zO_7;WS$PT`1H*vkPu4|!MJC2o$gy;@gc{$y<L;rM zLttMU;!i}vxMN;Px~%LwN)5p`##o=?WBOw=z}47@Dzn7|wEgTRz!3fH17fq@v$yr< zd>!15{`QUW)E_qviNU&3lLl1^n#}>J*EDoTLChMG<?0fqE%7HRBsyt&di^NbZE7#_ zFX5Di8q$5uD&fHL?WVU0AO1?j!}tD~W+et?i9U8Fn^M<_7;E6%5i7vK%nc;d%5Bn_ zz9a-^1Apby2+e$`$6+iMi~db+=`Fr;r3vV|{r<CybdnqcdP3>_q`U9tz%t5NvY$qZ zSoCz<+WI3f+L{SaTWgg9hkd8e$;a6TwhMeMgZFV<Mu?*FLqs%!oadhokRyWCM`>j3 zW!n{~DHL0zV_>hBMskYITEpfNFkZx{`G<|9i}szbl^h&!kNt7IyF)kqxLxq_kZZ9E zw+x?L(M>&+F9Qf%vpd=S{+?|;wfK#bE^#O4DXe5vBL@c1bgpHs79^Ayv@CyWZ=)P# z8zE}y@68D51^p+m0)i~t0a%G-?#?yvwMATy{ht)zeL6L+yURSFnxqdT(=~}@9l5+d zf5%Z1X(ydHiHU((6LfG?N$9en%Js~$`JDS12bWG}mO4Js92n)uYVLQvtCFPRN0H50 zG1sF0aaLb;s{o@OCc*|t(5$no&h+D6YOnquRILKi1y22eR|id$Cx<sg2l+Uo9_9CK zu6fUlZA2e+o(-2<kQBS~(;CYnH)<w2%!w%3zQ#7D5f;Ey%7_x%)hRD}sOu`N+iH_j zaSAdH59q6;%Mc?M^oSGwU?v0@g$CbY(c;A|jqTmV9!a})q9^0!3u@F#p7hfY<?=0B zd?lrWTi~gfkG@>!|4K8G_VsJwYjMyUR5@}z|A_-|>h}>d$x!v}zG@%w0ttr`jUp-q z#47g4xuKKmzXRd#3(1q=dxL9NY@=(tVrG$)kweCglK#Ays-@`R3IO_)X=sEjPVY$E zB8=(i^qGVh9kgkZ2~DRo_a~FjdwM>HDufW|0<WwbdJh|FHMfi0WTY_F|7PqQ0)=c1 z&x{^k5SIrD?jr~3Vge3!Zm-08mMvr?FLvJlZFnh>g%=><^uUp8ie!II6`PF|-SXaM zE->xTaRXz%yEye;+VN+kr|0mMxTrgXvV;104_$=vXl^($fse`>uD+A`fW{^Vt(N8S zd#i^1b300jj2ZFOC9IAi@=#JS`Yh=ZV-DXQPtS~lgC)YcbSLm^6O;qfRq^aaEsd?4 z((zHtc>Mc=p3o5*tdMgoq^20U6)D=q0tE3TWpNaVv3$_7ZV;4R3n>o*gt6b)<7JE` zanQYe$pBYmy}Y9F!lnGD&0z@BBTw10s!qJMv`8v$XWgSv(Y7h>5G0@H;!YPt!g|EM zcMhPnKLR5)%~=Yb<s_)i8O0lCsh?Xoeo^CT@O6PeSR%Sp?^xUo0vMofvXN=HZSIRn zagA?PTv1fHEwvvI=u<APigUMT@>Tf-IC8SapY@B(zw(Xd#VwZQ5LDHJa?w|`i!@j* zw~a-SNxo8wm6VL1lZZ0}0Yl5{bn{R(J%XwIGDU~S|AVk_8i)Tp=++YxCLc@q32kso z>yKF%J$fL@$*!y}AH#<0$9MiZS=c%{g7=h$!#>HSI?j#2?27qT{8Qb52LQi|<L@k{ zhIL@d51Ce-vZLjPD%e=X5tSRJx5$!YRWq<HcyoY=<?0s#Ta#B_if4?G9zhQ$<Y9uc zSZaZMKNQMvie@qS1Ob0=Kbq)Y1}cy&77d+t{e99E=8?u+6hEhNR%^&gBAo;)VT5N1 zrx81Jp<CIdnzcXT9c}kDxd7G;@|ZB`Kp`0Z7nBBGj>h>{fJ6I-z*(Kz%48BVRwdC$ zpB2onKYwql7ow^F)?j=VtbCYSnmf}9gWyubw^=ubn7-1>hRBwume1$Mk`l9!R@+3W zz%Or8x486L$qP9h-Y{0Mut4$dTw8f~$p0rXajjo;L5=rrUJmXpaNxz4skmxFoD{Ca z*A`C7lvt0Fb_a8gF@SoBRDU^Pi)KX~DO`0k>F%3U<2S%bAjnxRUmIKUBOu`W2Bs&H z5HZ{HGYR4cqz{F1)$QiIdE}hctHtwfzP<E`v_E=ze%4%jGIPt$)NKQ>ZUJLz+)`|l zzb>DluQ5SD{AJ%^j2GRT#TmXKGMfjy%_jX!1Yu$8sVn%?Y|8jL`md4kV-qTya50b3 zO(d)@g|*th!GZI-G8wA&A${aex3!kZpZo1;lB^UTB%#yBMp{R*am?(JU-4ZNid_>T z!PsQg)LhNM7dsT2z=`qM7pRxHXo1_U{N&tjW!1#W?dQ^|{wfeYE$u{}E6Y+_)QXfs zzXeF=DIvYoDQU%4>6=$wB~VA3Dn<eqC6h=hDOTCNZl95nzpRsy>%hc(@z2{!_Z%u< z(_+4q{9-$PdSRI^Y63Z|iN-?40Eb+-7bMsrh5Sb*9qo35QLj>~8+MGO9}FN}Sd(u0 z2C)9xF&5}gjuI#fl0xpfNG(9><E}Gc-nrc-z#hxDJcA>@&`fPCI##I>`pZ5oD70q; zr0>v+kg$-nLT(5pg1{k)qBxB2s<y8ikL^3#tmpiq?1^PV6v`0#CHip0F+R>S#}-Q} zm{JJu*?KVv2aeCdlg9uWQ{b!<6PS$klFK_ngUjl^)7rBvJ@rpj$UDRnRI~|s3K4QY z%Hc?nt7BcM+4K6?ek;EL5b(s%7{U&%p|902-k_B(yqd+fXs&`0Q&@c{n`@nv#hPTb z#D{lCSc7|hzu`{fE{ZNGB1=gV0<HgGsdP6Htrn_{crs4L(n}YC8x)mG4h~}RUPR>` zJJbxJPbzub{6C5S7$K4TQtMl$7%Vgla{MomBnYt4!M-9Mg0{QdpYE6DtTWmDIp@n! zvk?zL9@*J!)v*6~Ar@SB*_T<uDyj;RJH$xH&CX-B2A%uB9h~1Ek*V%mJwMC&I;CQY zla;F5^KaSbh5kCL=KWcqfBl6keTVdPfEkVNqHOx-)*}o!w(*K^ni=^%bT+^*v^AQv zdZ-bJ)l%W9^Y^<MNBRY{n~C-{O&Be?hbI%=!>aDZT@r9)miPCIh$5$t*R(SfEU)?U z3S`3F0yT4Ho;Z6@bkL4ZK;7r9G_j6{v`7H1(q5QCXk7x{t<}1^EUGNsa-C#3f7gVc z*YGHSEZJSTpBrpEtqMU_3b;AVnzXqcE}G3>;I^xf2~pB%SVXN!#XGAp7bF$1CX&q^ zQ7QXl9|R{;U<440h|1r)%2HO$o|OB%nM*RWt?%K`QJ-B&S;h!A>}e81yZ$EZ%zfL0 z;jdSHI5yVUD&yk9$pJ@6Ey1?jd`Mp`C%)>>VfWRhJcE-@ntnfa;EaZ5&#mDc?rr%@ zsAi%!id(v8eghz<riM)^N(=p6v6d9S{8>aSc6{23U=CXiYbP}&mQAE@qo2Gsf*c>; zC0Yk6>rhqpEfB$ggs%fc6|VS$U;(!TmZ19~TEqa(s92Ha)pz}M^M=>F1Ye>wgQ27A z>+OoQ<_H2#YM*d-&4%>uZWQwFMoCdT2AzN$!F>ajyfhKCq<LN1mxsrf(?0%+gN`5- zXMPf&7hcPcmSvZl4fjc7pP9U;OC7A~DI)2-$Q`Uxf9!`AJC(JnH{z~@E~v0Ap`w1y zcB6baetBs}yS&8gBNjBFIc|(sP?}PlnkIHev0TlsI^a!VjfD9D#U?@!-wD4{UvWC| z@4FB6ILc|rGh5K6&EK`>uS4-dTrtI_tb0`p(cok~wY67fxoKp{*yDeO=j5ugtWRLN zchmY9TB&gu3~(FY;z~wq{f>cd{^O&|;n_&r`%4f-LLN{lnAG3N5^%()<m@@Nfj_O2 z>oC2|n*Ud|3fb^YDa@0@aNxU6!OC|)zy-+{+QKwrHRu^mPQKH0rR9$%9XFnN5%-e$ zf&<+uI+4i1VLfm`Eq5dvO-LIw7iN*g<eP0%QFFomq3V&O{r;rky@Nyzy6@H#ngS66 zIlo1`UXi0u%}m%Wy`Qj<;z$16+JKdH@y^IbrY_^{5F)$HZ|QC`VuWo!XBVk>y#|p% zF!!{Ew0eBLto+VxaX9|>^Pe!JW1|a>Tzd*c^s@^?)KR<2)`Wk(NOxV6R;6)NDyUq8 z9!I-hQf=#?KsD73`H!J^c`t|B&aJD{NyXWmTnPOU1JMlej8VJGiF5<K#^!Vf@qT=x zj70AGVSNYj9xMLDQ@!YVEuff5vZA;w1-Klzk0Y6ruO5g^;4N2Tgvz6iuA6fFHQoCY z#Q`9YTjX+O&9$l~%EqQ|bkx`N>c~RuU-TsN5$q>8+0#E;)f6P2*pV|1w?k<=W5)L( zR^O}KnspidH+{WUZ43Z0(q!$J<OBtAz>s=!6fr=je>F^@I{U3-u<Nml$8vUToEFfT zs$_sqc*fAsPNkXQNku-MzqY`}_l{HKQGlPLG$AcZ^x@n%Q5&ypm=Io3$4~pQD*Nu| zOJENz-m%N_Ffb!r_zz65A$d?CvTEV;TMf34VnfdrWwNmPjzzwC%`*Mo;8|rkEiTnU zv7f^2O{UI6=v%Ts&{85wf<OgJoHA}!77s12>%>*gRr^1Z=njBBg*MHk3PGWbfGO*j zm)qb=$2vxs$$F!&mB}qz5@EWR7>#PAIo-32>gf_xE+zuN!Ssk9<E~GiFz?c-`H~Wd z!(=^Qs#)wDfC|DT4;PdUgX`qKVfsU$o@47YKwxr6(N}Ea`BiTjC%3Xfr0Sfs6r<Kd z5AD9+`el&X5tXOS!V1rjUSM=8w<)(-KUMBPAymV4k3Z-M#?tmlMFjApl^l9kz>(xI z%v)@@H5@z+qN#<B9mu*Y2E8aHs?THq$%PTtG1E%Ol{iId`~2LiV7^IsrRSwvW!ys( z4Yl9!>L0ti(i!uE4M8$=xC03!4m%y!QA@!WQcWKSIO%*0HQj0n>>L_S+nuRdpW^p% zb*lV2{vO12=LxEAZ>Z0OK}!vdMz7nM1-Wj6OZJtR%msG&?h8Xp(EMmUff#%G1Q7bv z`T-Mcz~_JMfjCjeNNi4L*3?&`T%}pl#fm~*h(3y96=aU^>q<eq->+~f&vERz(GP^A z<ecxSXgZTnjYh7AjtFjn0qy4$I(@8CtgSTe+|G3E^k5YJIG|Y9sJT+KF0=yWm9vIi z#tmqGUc<F7gX+<4$7q^8j`@h#tRL|FeLel|^D67Ako;@83ov1e<$OQO1R5R;A0>O^ z(;6yhwI~*2zDqJj<f8=D0RD)KCb~tlAIMl^Rx*+k!UmZuF@?@5k7Lr8uiK0k0_0R+ zZ~4Fkls(}e?1d7*Q}$4F9N@|I?B6dcT)EfLbV<q7ni1o?{QXVlPC7jmqqM92Se@fV zrqaXrF)<O3ufr<a;uZ?-es>I9)O?(v*<<rK3oox|8+u&O0ey-s8k(h#a21Q3>c)wH zPzufcZUS;yW<Cz*$X=Th4ej7$u%euZe2{1;S3es`7;U4t0O2U`S3=1Px80`^<k}~1 z;U2$*Lzka|mF7<F1-6DcM>PgM_QR4RcQjpy6<+OIqJ0h2a`^;X!-fDce?FhT5)sbh zYjJWN{p7OPNwd`${_$k<^cIA3c!d}Aa2UIvr-&!m5VI#IVf$!kfFSlU&!s{@APk65 z@YkM0)4#p$!3JTVC$CRy-HFVPY#nYwpUMT}-s_|nt8P%p*Yfr3`cWxP##FLzXpc$W zq5*6ns}$|GWt-{cmLfA%de~iEGw$`4TOrAEjZKnOcpCJ{6V^#1DL3g>n`>=6SS^Dc z=?ky^sX>}?;FeM@TJFdW2b_=DgHpFoa?=%oFK&WlAFE!X*)09+MC5fyjvY@{UL7|% zOb1Z1!AGpV15|v(7#$>pPUzsz2d?#~EzA5&c_zcDB6(z+B&(l5i__SNfhsug9K_a~ zbB>WDPlnRD!XrLZ%d>EoTqA|Lx?QjY=Gi&darxQ`k&7tP@1wZTmm~sFKwG#JCcvrb zx$u!x(e`tss<i8FKg-|+TR3Ti@WadJ7{=7*0qiN=n-I6pHNy|T44aH4R;-z{QHLcP zCEC%3nSD;;exhMGk3*s(6wc)T%02(|g*ObHnmUA*$L=L`^8|8oGCDV?;w(namD=^? z#Q3bbmH3kJj^MIq9|^NH%J_Gv9l|1yPCp#Nh#IVUs_wu)UA4B%k=l*Zyjdk##=H)A z4Cx|#M;jMAiaN+2kwAo-b%gVTg}HtnIX4He6V(9b;uGWxV38M&adnT=X(RH}gD9w5 zc}4h-0w9K7gzu{6@!Eg9A<{S@>~L7x)W~X(wPQ)R*#6^w01hg=SQrj;N=c#sGeXf% z9QEz14raZ(1auC4@nUg@)VWlE6dln&grn54+`<&v-v?S(%u{00YcqP-zysPv4iJ4v z(LvxTG|xIQ2DkcID}2x;-9M5PxdKlsPD_h0Y!rTxk}|sMpTG3#QTocm)qOul%m-6B ziQ=n78>>d<uZGbEPjc^kX%P#FeCnW>Y%t&`ohutc0dUUgvimguOKU>Oo-5TX@eCqT z{PB?x=7$XXZ*y}fGB!srZ+SU*k%5m`vLHe6Vg~8H!=2_10jmUV4vSJ0d3a7`=r<-9 z9=a+FpP(o)!GS$jBttP-7Gw=?^+>fAeDuHmdbbG<!W=B2*J*k2*nmLcFuD{|ZVtm! z*TVVwG0kDV1#8s?**ks>`buEA_|qQY^wnPGR;j8Ww({joB~w9|ti=RJ{cyXEvaKX= zCmc4&GbW)*K6kJ{uP0J{tg%zBqUI<?WLFCw7sp$=x23UX3dB}@wZ|`f0UO?=AgU6c zFTYSf_G9~v{z5+6W@_rlHnKQ=R;Ky;N>yCw+_yY2)z|HCfd-3SXie_6e0ZanfQ{;e z-KUk*SWXjLAu@I6I<XaT`Ib}2ODZ#SV17R6@v&Cq$LB2k@sQ9AGnv$Sa@{EpADBNd zy#$}BC80z~33VuH-&-uu_a6jC!Ee`Jj(UEk+$Lv=W&545v)5wr9e_ziAD}`OE3y|i zU`pHQ=zT^K-dTs<6dnWhGBx}F6fQnMyU`0UD#FUkj74gdLmLel3b_#Rhq<!5dy|}o zUCg1B<r!veR1afdU&B!L@a}agD%o#<YsKa6)bl5xCp?@_t0oacO&~oL<Rg%sghcUz zGtC6HuNv?t#~DeINZCX1>({RV=}k$$8>RQ1;`<fMnXE)0VNb(h?cIrfMsxnlo2&9g zETsE0_JmM$j%ScC5H!3YJ0T+_bo|3|Sc7DRnI0^>r5VrqACyGj`~Iwd@a+EjKH-8^ zZW?Gt<Qyf2N1}SEQjTOBI31RlsIQAp84L|sh~j)irh)XOC}CcRYXPy*@-6Wt^Nz5C zIYi?zD(fwX#FE7M)k8Fn3tX=)MfruzfnNd@Ffo5k4gFaym>mHG%X6j^_;V7eRd@kP zwM_wi2~Ly%TD$_wWUMTP-CI82e;cHm`~%ZwXn;S^GS0%fD0_Z6o_z1<Ajph<lYuuj zXRrWZnNh4|S=0{(D{dBH-qH@b;0_W7hj*;+-Q`;eOig7+co;o;;q}5oH9+XlaYmCC zw8Z!5J}_1OQ7e)P@X5(Mbi|N$46=LzYne&=rcBe#kt_hVrO2e8x(2kxy{#@D99S9! zK!eRW)%Fg)H#r-ZGf<rpt)r4lY+epGGAQeViaZonsEhMGa4ZFcJT=MhN@x!K7)68$ zIv?Ke=<9az-jI|XaCHTw1x9u$XH_|MssgoT(?tU!YVgv-p2fzCi=lDYs6dsb)f+td z5!3Rc)gN|UW%kXub_jIIOhv_c(~Gx*as#@Ix)4<ua$-8tk{cI(p(2@JvCo7HBu~NA z8%w*Z>w)phu(&&^f?@J;vc#&I4CDx6cckJ5*su6n1fKDq2Lz4+`o^lao^77|pW|%G za6SrB9EA%z1Dq6!%;l(F2N6BWq`0zp6pz31XUB^|hZv~qNn`QxQ3MQh=(HJ0E+~&@ zX{Z}z@=;(+sTfK_@y@H;SeW7G=<9`(jyYB=P1E><NHF31l>5S5k)JvX-1$ah>KDiX zKiEF=QH6=ut|ELoGU0Y_Wry`QecCEhs*Y4r#X(gPb%d4v-iV&=_s5#w1OAD!h*lg^ z3tzlX`=NXhZU#6X0GOCe+%&j*WL~={)K(Cf;nOIU89>$eeMZeS4OKeemT?wNCrnCE zCr1_>VX2{AnD%~%Qso>yf(zbO!oUz)KD)vV^5s&L!qj>Lxxg{=JXiGorV9yXCYWRc z^xJ#1RX1;be#&@qZ&p>19fkIp$D(@sp`QpRcS<E2OBdOhHMhiby-1z;Q>sfdu`|2U z6$igf92~arEs=QK2)X2@LHu}TCP2mBWH)K*!Kx#ORE9`X8*cF{)a)QQF*Ut5J~F<_ z!Eu2CW=?xnz=GF=B~|V_6y`zby)fY?O%UcJ0M%m9jjR3MVa?3O3lq;&Sm5)iU(VY| zkjxTI+~X7=#v3teSXMqGsYdULpvqs=%4mOh=9_+(x|Le!g;Z_DYHI0}i+G6L-0Zit z%@Q7_UouvEMwv=j{7K2%0FXEK3IJx3HWbVO!&YvQ=F=R9>2i-2N)~$hENyywuAz3# zyIoz7WkL&R8F$3cXsWqLJh#KKjjhy>>za*3X1(#$`uPg3<<E437{ge~{=VUHhA{av z%kSUhdyZ97^tkB?4Q|f^V>)1@>`ie}LrXos^Gsm=&;UfpLgpX_ofht?l}FgF%GU13 zQPPN@W!?{6ga1mds=9(g800w66qwtBA1wBuIYo!i>3A{S1d8yJvpC=n<a59A{0rvz z!TYRjOXkN2&ahES>RBX$`t<MI4a?S??<}%U6c=v83b$IJ;IeI-EEm|j8l>E~g~j9J zuev&-lhSzjad6w=I~L$OzH9>s0w6gL7+IyT{|sP{hXK?leJAggWM=Uw2{|rh{q&cS z8AWW&UZh!D46(mX37?<eTCd8($p#69XqK7Oi}PASv&)dlu^y*v$s~Rp99Z-lWgZT+ zwi4udLwi6Yf`s)IVhr?kM+Y1Hnm=vqkT>VB*%i)pzb}$^{X80e2R-n;7;<66NyMqg zZWBOcLxUxl^29<a%sg#cB**@w0Oab$dYj1XeM894pE5&3$#QqO#fwS3DjY-%#i&p2 z|5eK3x{n+I0Z`(!(}-<zx*hk;y_+ueXgHc7c%0$Juha0+uvyN$?9^p=99n3-#zM>< zGhRRf>9hR*lrvN@v9og@sCDr3k_j_Hm8QimqE$oBw2F(T)2weF5t97M!3pO~<uj6H zvTW~z%ibLKBR&3pPfxyamGI@jQ{NaC&_(ETRN^bL);ELujn-krrFHG4$>pbq#I*Iq z=}idQAXs!H81-((6cO9`77Ay+-mbTJNA$^1e3B$8M`ZG~kL4P19r&UPu?0uG3jG@A zQFLP9U-KuWycv{&y=8OoerkmjDd#CS5DY+cJR}w@&&zJ-IvcKzlN>C<?(dJb47U_; zR~k>S)eM?T5n`IE+YOf8Vy2OXS*a%u40uXr&6Sc9WHXgM9;PI>WK6v4vcE|iE;~M{ z;Dc)SSrtR}l}i!NC)gHm177VhX)usl`%N^L*Vc3$&MbRY3%cO=dGjd%wDQZ-ENGHw zPPX462nPqZeD5xPGGwU7VngjFoFAHdFm3<hic;rI5dfYz6ET}I@{s7i(V5Ab(Yhdk zNWRj_lrgGTgz#tp0sf(t(82xp6ZkNSK@z_8wB0e~_M?FMW!W_$2s<I(l9;Fg{jm&^ zm4n4{t6P+4q`=Eh|Gc?`k@_8Q9O*5}e~aZSv+~8yoP&-JIw&=I7d2g*H$lRV-Cc?? zgIlxt?k%_qatQL^tG^Yb8OPDW$;q^h3VA(o13OMzrj?SQT<z%Y*M+_;5=RFLz|p0? zpY2OpWNv+onBPwq<P0jAaMFcUP9oj!W}Z)t-F0<$l~<~FA9`2vNGP9CvLO-+V8pGI zd>lC(Wg5PZ3=t;hPNLroJ-pCBA7?Do0X{_YNDz}Iwedc6RrT8Un@@Y)P}WCm?DanT zZ@4EQ64n`XqH^P>^eGsLo|y&drm<%;Z)$ltI{|LytS&M`r%LLM|3m?0no{G|gTU1b zQ|5r-NkWut9=a$Rpo^l3|4}n{W|m7A&R^4-f#I2<q<8<-2g$g;W$5TDBSvQ27hCRm z1%C9^BJ;|5X(+Xvr$T1b4XUG7<y|99CF42&_v_Y^pAW|WeyfH~fLOQ+4czma6#Q5D z65-}LadPVN@H_<?hMvJ@#sjYSl&>Tl-y|%3#3~HaNv-#j^200ml|D{8*YMbY;ZyB- zsQ<v0fSyY?LS)(kXhhPvia1e6@+qHVuuxW34MXS<ngU3WpUHTAC)ouHU;lt<#OBNl zbP%`=s6NY^7b*MB{@wXCu^G~@-G1r{6w1u}nG-0S_9<8RspA$#kf!;EuAkJ@U%j!) z$9qk;AckHr(e1Wk-ZVikLTb(Y95jPUe`L!qbUa^(m?X94@0qO0Fil2NgT3KggNCk% zPky~C{lYYgktlw8kZM&UvSES6UNnEgp^62)uW-;do~<tWb;x%>6DE@1X0$&MSeE=- z<a%cUusx4BK$P`o{oXQ;?tXh^RPH!N-Y}GTp|=+IMMUSsBI+`bvVhqAQR99nY9VTK zTtHCaR2)app8hI?t(>zl=f9RFi+R{Isc00GsiOObl3v^`kUHE=sGbd8MN3JM>3o2c zbpN+<Z7RfbyB|dYnIL^%J=;-gi?}Dgoo?DqU7pvekW(iN59^Pb6|0S?a1sbDRZL41 z6Yoo9O?-S{XcKF_eL(u0@E~&~661OGu}Dh8eo0T{@&kf>%=9jwfIRe4Folng7dx;k z&MydtGkv0%DG6%}?{0nSjP%penklwTWoEumKJwD4C}4DVfNU_GVO6amS8Dm*BwMDD zq6O>{?P6%*08rf^aJZ;J+z^I2|BE>jyD{U>4e1KS`P15BRH`UcTqk-dk;EAFx`fow zJ1V_St!S-W$n~QeeGw?>Oy9}ttg5N5j^T+oNSF#T)DJZ$4!JLJVex=q{uo!ao3Ac= zKR98itS*0MrOhTCQmqUByKO~Z9zY7MP!j{HHsnn7(kR!Ldk+<r0^nt2M?YOUqKK!F z5Gc21<rJqA8Xi$XfM5UpA_!7CzHP_}Nk2d7w{af3Q)2huaeDffAeN`<aCb**!xxeB z-EXxGot&?dp&+bAvWl9^MjeXAl+-SH+SMP&W`Z8Pa6Zo2nxBC5#&x6xVJUbR6;#+) zC|otOb%D7{5(!yK^{X8B=Bf3xIk32)Q(}4l`Pu4C8<q+D8&_-qDPzfFs_e_L1JKjD zvM1I^>oeRUuMam5rf4qX5ry-ut%C?Bv0Ht?h4<dKaOO_TiM%}kd8r_~mjLv@R_36b zMI!QPCQ6S@^l-ZCn$MRBh6Y@Wj_@J)lGp|_V|*E3xzx2TH>S^-H#VO*kgeFb5O7OM zl$)XjK12e<bDw!z6r_+Xuxeuq%QSUrDXj{>y$a=Tl9{dH2DzF3Fy9bcT3mE``4%Jy z10_QE3jkCSBBA&WI;Mo=yzzdPesNNz+?0h;XNV<Ax7iU)5C+Bt21!*#0f0-w;GcJM z5fytn!IrA{M?>U)pz@zx=q&<tlur6tL`3X1MgdlCsouiQZGf8m5%p>7OgXcTb<IWV zC$*8p33_alNGUqv;sOf(q+J!__Ph#1K4Lqi+?W_2h%~HE*6<frV~56T0$ZXPOIfIt zio-&o=;$RY#Mt)fw>4MlLP#J2z0NpwLkMHRl;(}#IXki>Y;4IaDj_I$9To><@{-s+ zC+T_}<^J+|8FS(<ed;#310bdBL>l>U^L>yO?>`o9%-q7o*N4S@wF9*nmu3b)tIMAK z87I+cNMMf&uXHU|y%RBzgXUZi%1FLEW)FIc`)tqaZ>_!y7*%DKEQ6<V3?Szfh7_7p z?xI#X0+^8SOL%?mAFet{=SZh$CM&qo8!IXdI=!s`uqr~HLg#1D3ri?|QwAPB9Tqq} zy`ikk<&MWG(f}fv{)C^eB(0oVUm)la7{S*ga&RRR>pYoNaYT=9CXN`tqT;GM3-ej? zHYcZf-M(Wz_8a(B^?omjrx@HsrIh;}LWB6UBuZxKM@iFPrFbsCK*;h5J^bWO_GrD1 z**}swYQ&hjArR+$`b+u6L0QcF+ozs)gXBUQeB?fa>>S}q)#vow7Z*+>L?#)uHW{TN zwXR=~q#ez-{E~<-r}FmheZPLI#%q-3*G=DmZuERg)vjNTudfYQa9o`WwLg9u>ox2j zanGtOSg%`sd3yS2hv}G4Srn;m8G*=7{-bt+(F}%sjdTfmO_FwPRDM>pR&xAEatpa0 zZDANI5k+YI2y71$)mS#C%x$h3IMK$L<a@5Yh1??ebE2UsjEzmDrE)@Vgo1`xSp}JK z#srwjmDMvdYF0*{1>F%RcWMvk{P<r)yrfP~8=DvO^o30u@>Nd-AcS7bswnV7lU#T) zqMS=`Zfq1!{cn6FNea|6_Hnf(erW@WR4u@kj?Qk<jin|2$3+nzRHr9mQjCcZRrI4? z&E+PZRRGpvaA+1YUJ6u`#_MoTj;%m(?{zo9>6blq>G`Hf4vrd%;6T=UQ3!QK@+4;+ z#$x;9$6)Vka<6c4i6}^nAvTQgnE{zDQihU>F5=~1^ic%tx>kGc7u}V(*SCs&KL?LT z3u2H8uOO7!*qoX6m|H6yS<3Qg4?8S|_aCWM%Mt;qD7lSCa)>sSz*UEtbF$4j5CDua zvRE{%7&<Z&+``X_?W9zp0|<W<?gGS60HD?!pcxkXZ8VJP>OCJPTE1IvxekP`r?$!_ z2g<!>CxTX$cTE-qUD^U#cJo3Ibah}9nHLuV$3n%=C)r4(X<;*Nvk?scBb^My#AIv8 zL*7aCg!4YSwsIE1fcfVM{bfwPe6%0m{X5QUj-5L2{_XjtN0SyA_bvJ85_2h4fvoKZ zv38Z;iJSEO+w}DGLrXL9w{K+Pd3m>F6mc-*)l$2Ovn71aE^V3VMc8R=h5fy4Qiv*x z-OBIFaX$<~-o45HawtK6<y_$;r&~~fB{_D4<vZv(Xw#c=k^9r~2OqD6X$eG%%mm`x zQ-T5lK;f*;{rjR;O=Fhuz!$G#wI1-DpX+NKOAu5u2MZXM(?sIa+q+I8gL#VVc24{# zg#IJs<SDk>CJrbSyp19hkopFd!dZCYz1$-`Kfn3Ju-u*+e{0k_J1Ey#oT0-VZEjy@ z<s4mc&bbc9ufNQiR9*EKOCNm@vcTgIh!QxFY;sohIBvD=^lmrywvs-Te1_38H`jhD zo&}1h$dxp660s8uTT`V)6&Gtif77$AtiGu1X!%YSgabWz0Y#Tapy_!H*3$a6w!86K zs_xCaZ0I0~Dzs|!d>5LTl}{HsO|y*pdse%^IXN<@+9u6+@5AN`*Yyk6%F^Peu6v1X z%r`y$9cTEa=D$UO!i__AveVr?YXFE&gB3}(@S3m8?d%0UWh0Q>qzwKRTn3_eYJ(vs z32D-u+W1tX6$bgUOM-}QPnksMHUbI4X$5kAdH3agx%2$jbRqiM?S)Em8W2CP%ZeL6 z!RHnjV4))T2IJrm5vW`BSg>F`{UwYq2<*^P<mod!*HLBe-Qmv5YT0rq!zv@MTNoQ- zOCB30$iW$e^ZUGNmfu&bexWq9tKdXR&nEy6&nkh<@@~Yz@8)7GDCp5=ar|9`BjuO# zdtHYLE!6sG-T(z?HxgB?8@A|H(Th@f6t+_NN?GV%8`FT`nw>W92KojT`ZT?|W8S{A zX`-^E;oJ4#VM!uvIr}P&P(n4bQ(v1_VB&Qr0Kscm@YkL&bXLA^juC-<&vq-JZdOpy z3F0Ci9)Y};W}wX^$<;ZYoljxhuf#&rDMH+GfCaWJ?ZiRSfx$l-gHFA=JC~_*^tWAb zhaXtwMKNgG*w@!{x1|L5p195KzHDk?>6@>-8}hEWY0wU^R?DCEx72$k$zPQ4Bh7W} zufJ^~@+1hhC7d2X2UwW_ikdcR4<2u906zafarRllKPN*Dn<+B%Bq~Bm?~$uxvU;T0 z)8&ZA)ail9&xggB3X0FxO-1F+@bgCy9>T^ZF7JDB0?vi)_$a}+nPe#~_xRnc$t%K; z;KAoe{cSkIU{7%^7GO2ya<P?X&Ot9Y<WFCZ3xV&CpRJvj1~02ok-7BD%*<|II{+$8 zy8F;bEvHn$w0%od{?W~2ch=*K$fY}>9yl)mNZWaoZQuPH#~?gNc*!LpQfE{yN^M-= zH1{!phIFw+4T@ad*F7f!c?x|-RI(U77k>DrY_2Re3KfZ;O_Ks}N`7wkk5A@*-=Qs0 z&LMshhUpb(ghMo=<=_RhvH`y?t3NGz&Yo&by)(7D#Ae=iNEqx+A<*3q+iT&V+J*Ez zzr1&>{ammn)XfrIIw9C5!vM#TW6u5qw443fv@K7c8@CTM1FsX56xOO8tI~HF6%C2s z+>ijAu!ZvTN}QhH-(<;)P=f2|aa4sdP=6axruRY?PAifnC!mw#hbE+kdS4+qVple( zA!Y^v7tbg2Oo$=<xem)ngmP$o=i3}uhBN|}f!IO?4Rjf(YL0(hspvd1(;cSXC+jXA zufk%)r^Yw4P(q+%ZzXlwjOhvoH;-~feK3Xd){4|00efy8ufBfdSU(dzudVM=rp@-2 zfe=bsr>@`mi~(xN&~%Ap_AVTvgre$Z<W$q1bD{afa><~Y#@C86Q$QZ4HUIaK%E@Jy zMB0JlkCWJW!yiasXt8B|Fijc~HkD^*&zF~zK=cYm3NX!x(}#oS1qgve=Gb<PTjXl! zoh?f8kx5K_ou%q_Db^=#<!x_J_yYI0Kdi1YVFgl7$o|6LM{li0GsaoJizlrzspR2x zf4L4u20WcGNO@0!hY+x?6H5-p$H%Aq?4u;~pTAtMIFR;tXpU(t9$Twdd?oQ5Ustv+ z)fy9qflmE?2Z&nE2ceIwy;0eHO0l9W00qW*H*iLkgb6Y`qa#3o6QE!0_!+A}5_?jc zO23h(37$=25)vpr)sizqh7y!3&_Ik4ws<OO>?l~ZxR5L4wcyqwN(N?Cex%nB5XUzi z2~GRfm{MpOZA|03LsbLDIb-fvHbdm+DpVcOh?|jQ|BY#xQp|b%lr_mFERlDx1uG%+ zvx}1p_vU%(j?ABFoWE#xdO6p4jvR7$36#INpFh)!ZEle*+JT1Sp*Sr?DwR>zV4*mi zp0~pG!cIoF>(I)P2}{Z(l<z&Ivnlgt!Ei-9JL=F0rY(P(ar;m18wk*S&@zUI5O@o6 zS#Fatg|YvP2p(c@%0N5E$P?S)CUt9xGm~U3l{+vD6J=mfXLJMH-ZS;@)l}xq{Qf`* zOHWMc{Ga%h7}kr7)h4nSx>AdIlQ8#ra*7qv$DSW9p~l7ghljYhIF@N2FCD37ZN}6I z^NM-;&@Po8ZI0@c@ghbuszm5E#^Jhce?6#^Gq}DNTC4nNS-}))GB}r!l>>s-^I7TD zVTRe0w}1C7ZflW8?m725&3x?@GQ^Fqc#x4aAd_bIm#Sk9f~5Z@FKieGBMgEqfFQjf zWZo5e$Ud$QsXFD&4cKLDpWnUQse(@Kvo?iN7aCZQK%K&&70zdp93F3K6gh#&7FCV) z7D8-_hUC`YE)#4GR=&^6sZlK3YY#q3w7FHfdyKZ2e-kc<TOQ9D8zTXT<_e>C@gHob z84s6m7OB?pjRw$}vlrCn!2n=kAy(irNHRksmF$lD>ZZ@jKPMX-G)KbrFGp~?0m4u~ zge|w<@jvJ7M_76?v$%2w_Fo@8yrvXYV8x1cMn+)@KP%#cev}9CE_tMn7UYmk*RPIj zTk>UFeIsgt!N?z{ZXIz5morh4rNqe<ZZZRij!kJ)9XxRb0aP;Pn9Z8ZZaK|jj2g1v z3#VE6Sr|D}Q|}KBFkZtxM3O5kK5$h2nR_q@IVJ){MFEBMIyyd*HJcC%8LDi3!HO6U z5H@1O^C(?K%5>=4^wg<*J~AT)>DB138>{T4`C<B0Nl>XX%HiJuk7Y`z&i${LodZO3 z(BgPpov@IJ-(C)T4IQCIU7RP!ip5i?@BuGM5(_?V=;qJ+p1NRmJ{^k(=CR|^Eq7CZ z{Lu%DI2D~L(*|7IW<jd0kLM)hr)+9$g>W(U=bt7Wp?6Aat{j_B<>od`^JWlJ+F*_F zHv^rdC7YLAYR^ES{qy^?TUT$ZW6L|^q3(v7B}`RISLKr&8cYKi<SCH<G!3c6lxqex zHzl(;Ce(X`I%O0gBN0%ZSutFpdF*s{ohXlzfGu_=)i&wdEW^ohy|d~1_I3$32p`l! zFo%G38-My*39W*qWz1!p3;xwa!2Z*GgxVIX#aZHq9ZEt%0!?woG+EYZM@xM1?RkHB z@&4Ssh1=y%1c5gBYOHf<o}T1xOmaR*-W<r$@c6N&w?duqAicsb#$2g~_d%CrJd16v zp?P;dG#c9GY(Mlvke=f6#)Gs7X8CbB6i?=Jwa451e#yUWUyMACh#nb+xnU<0tS7Y} zuFlTd0A5#WgfRShJ;A?a4MlbkJWUY;q~ffz2O;V_+D(=+1s5)ZA7CUXIF2$;<GNt} zZ0j>_7(=eFx%@Y}%``TqaN-h1KV}BvU_myDxwU!{xa*fk>@k-$49e8~3ZY7pY0Fz2 zI<9V`3#g!iJw2IHwiPE!4$4R{XAgpv@Vj{XIg6OiXxbNsl+Cpw3Ypq-@N85PA_QuP z7l@_MYg`dePmAx&cbhXt3DWOJipr(PnL}XZT@8<fy2#QZ;>?_!b%;W8Uk1(OtaEc4 z`^CPkSk3ar6gxNtVnAOK<iC&labuL~RZS_yF$L%09{&<cW4d}gE@`RNaLik;cz&1W zXR^vOa?!`ULq$yQhVjXM@O}KQ;ErnG$1zE2!Zt|W(1sM$+(Py&M%wQf2I5n{Tyy9W z^^rvZ{faV|A7;19-B7#?Bq5h!PRlf0hnm2ZN;uMi#Vq@&l^6_JnZuNDrP6Z>|IVdN z)r8<dsyg*ffbBKLh(>ghcJUxGztXg+Y5Lf>4&V$sVp-<IvQp10h-_3n=Xc4(e+=g$ zwK9D&-%=Z|e$p)ky{h`vo{g+YmYN}Mp&Xqg*#KdUszl0|BiVJ#uD<{UM}W`!bF}Ey z&oEKmtJZ})OoW3kE}K%sAWW!8K}3-D0T`B6RH_bX1DdiXewf<$UNLKyiuA8yo;J6{ z!4qz9Y83QaoK0Nb#LmU9N1V*?$ZNA>0GyOG<;aA|ia=L8YrmgX8mvbaf3ejqT)6n2 zy5VR{i-QWKtYl6ob@B@)n{p(hBZk4`NoemIT)-lyi~!($a__PRDJ#~&m}foh*9;X! z)=i}aIg4{mQy?;g2Tw=n!rY9#;v*=u=6+oS5`{#6hmtUFZf^2v%hl=szMh@glF9Pr zcNyLCC2ccC#tuljH}O|^m^IMjoXdr<r!)KG^b3|Dy(}QaFG35-VPU)9Nxh+)@0y;` z1tYQlHvlbm+sf*0C|Z#!y;J(|;79Dc*-s!>hISz)9OD+C+HD3G)oj??p^`iSbf@@y z%#I8j)D8&5>aF8>S_W=^lyyy<Rk{b7)k75_%*v0xyD9i``^DH?fyKH|zVp0w5&PD4 zn6@H!s~RVcwWg24HH$k8e6l;`%fAVve6o+PaVCs&#oUR7qA?rZ2}rJ7OY<fnW$P9G z?(Q8jjlx=XtcV^pgs!q_1wRpe^gDmnwYT$gaTRG+d@Y;X-p-RMSl-wmwX&d@J5Q9B zu3UlQ_{jzD9B|G@D6_K@#w7naUXosrSz!4`4qyZU$OR7%1pt96lm(x}F((2<jd}mx zghRogtLi6gVy>GfKbjrdVwsApDn_g+J|%<yn7;Wt%ajz5^3bi-1hN6WfQU7OjrGpx z;1-9n>3@O`9NiN$XE=%;BWQ@{)1>z7l4ZUcqoZ@PWiw-+xUWulvT0>{sowLuIA;EI z#2mXrSnuU<SUx;{=wUPTcgdcyN=$4~p6iXRuToc&7XMC1TGn!J3Mo+rg2?OS_5nfM z|0C%d7%FSK_Q`gW?V4OuO}07NZnACLHYQDzZF{m^lWqIk&-?v@v(Mi5y05j?1(nK@ z^8S2=RlGqP5>yb7Pww5?&`>mYEU%z&@9ER3)78=vAAe!Idd(sy2gY^cY!$g~iw;@0 z_T4`;)AMSI6YTDec5s&vWMdQ4_PvN{8e&4qDPe?w09<hTX9EGZb8MZam$(h*3gMpM z{vF|Z#8rHWYWc=nNy{z?_p!WjZ5JY5?H9hl`|<0q+QooDmr3ryPjhGozz)rcJ5H(M z5)$fK+FVh@#q_8a<Fe{hv`i(?Q?Z-Mj`cmB4HgO3Gm1l{1AfVzqGxb78t`BCT-zCI zQejZ>ks#OGH8wo@VBrcfL2S(}Tjb2;)SkrZ20VfY&qj=DVFUl&KIig!-0Y|6@5C%v zPMFni+b<tG%Y*VAGo&g1s3=mUmdyNKJiT-~^Iha&YfFpBf??(Izk-zH@)!K21S+Lu z0A8@rsyzw15;&i|20dMsx~KD)$$uUde{-eb<^m<jOsKt5>mW*F(o5Zr*{U|A=HGon ziRv@>^gG-BJJO?W--m2paEzKoWfYESae`6AS$!q8LTH?Ysip8RU-1C%^1=G5^1}8L z(=7L(^ztO6&2$B$DLsfU+5D)H0jCOo;vB?cpwj>@K|J&lc+9>5Z0HR{7t7eF!rFNn z%{XI_3f&f)s?)nieVKV+vH{QnAugjRPPPYLz+(W8_2mmYNSkqfLYZOf7gvjbgeblj z>~29Fz(R$faKPY4kR3Hrwig8wI290mq-RVC_Gu8dg==FE7v~81RuqVp7h$udr4G;z zh(4EIOCY*8r;AnkrWuB{%U9*>Lk~=`9}u*E4wPNm6dsT9-Fi_xB9nTc(RZorhsAf+ zc_}8f<3YZX{y6sWrChMw5Jp^Z(XWZiumtP|PtY#5)G<VVPUed|C@7J4NG91R4?eF8 zX{3MA{191aeO{uAeCz65+Vnba^ev~Txg%P@MHZt>MqENPJ76Ie4oAG{eMBQ(su>#J z9C|RXRxKb`8#`lNt&=aEb933{tNZTMrdG~iA#*2HGyPnw)OW!Iab#PwVO>{0m+TS} z$$Penw64<{qW)9gk1qn{qI@d9tPIz#>mBvnbt$}n@JwgF7%=M{+t*=ClcWHG*I0n) z_#b5|1&aS}v!EiZQ%B8hH0==1S*ZUG;m*UL3P1!9`6rHUGqf=+CQA~3)^;}?QoD&7 z^R((a1k5qCp*vl8G{X=vb-XVB)I!d4j1^L^-Pb!3N%-aiJtJJe2I}-+`%u+O_PEQs zg)zXZueHkG#-gv`+Rh$gueJk2pi1A|-hfw2t(ArT62^XfJ1i7oZ0;eF`)tFJ1?V)i zDgiUIB%*-3+7)Z8s1SL_Py%h(^I7O%FGHqF2$~eKH~ZRT+i{YeWS(lZZ|vqRfyiz6 zEg9gx;BPDY*rlMC`#t{F>U~o%LD}cZN=^UPS>$XZn#k?@70X7zM0#=(nTaxM;;%`a zELDA1mpmexR8qyKex#qLirO{S30VaccWh}b$k~~KSrT%Za|<vO0$nFr=~DiZ$Vb7& zgzJdYI1Xs)j+-L2Wh9cIFA?Cnnson($;L9U6J8%#l|73~5xuA9w$$1H;w+!jH9?gL z&-<Fz#A`;|N$|l%zg+x0t665GUJ#nOU>drD+>U>NJ6;t30`XB3G2v2yAsD@lQ+i6U zO%r7;p6Oxjb!N{6ytd(8psMGxE9zA*0U^sd^6eXdT5(o#j$!R}-wJ)EA7_>>C3l0_ z9$QpmBWoHv3YrWJnml^%zK3Iyv-qncH7vaW4tg7?EtOv%YzxI}64B!oD+7@o&mp17 ze6bu%6pa%;<d+WP?T?}#767CaF9d=+&f!)!KG!~n((`7!S9kB1Ck~`Rx-^OW{^n%< zqT2ez{5iO?cd&P5(8!N(39zC(ZepCLlDjlngS`QQ?Z*~*!x$(pNs_ESnmBKPXg`VY z`4ihWKZb^I{q;JISR@;=l)P~KL+8R0KQ!o?M;CZ3b=8K!$s=&8n%&#ud^XoOnnp?Z zah)t;O<bAhZ!eyYkB>7lG6YHDrHiF`$Ct@kxyBA}(L`_+LeC0C+6Y?$*dmS$k!k{~ zAgA}o2oK?-#4zF6HTmsqH5jC$zNnQvrbMvQM`bHAIA7N|dAvP7G5acp?h{7&<Rhk$ z#48O<S6AHt-e&yXPx1ddBw(WGlu4sfM^3gVrFQ{MN>~OAtL}+0-($llf<!?HqGUmd zQrm2K#H@OPam;l8BA)#4XB-$AQu+>++2P~DyuNV}I4wR`P-aPVg_EI8OgR|ypo=HA zm;4?f!Acy-2mVHpAYQG{nI1Q2epZC>4@^Jh2myAG>1T>?Kw|Oo(<5Gt->UgCe&d9e zCEK8eX@Y6vFe-VFYwen_)myP<_8!!sc;!qy)4<-OS$&A`_WSE&<)Vh~xY;c**r&k+ z;ycJgKk`2zUZ25`f8gYbyyMX*sDSTY9qmC%NC?Y}nOGl-wJ%MQ+4uAPNy-_H2McBH zBOPbxxj1&-NgMJFLSce>wL9=vFHOa9o8we(D_?s>OHwQ4nYkAcAovua!1v1#0`d8H zLg%|(GREHZ$=t;YePsLDF`*iwoUi`;!e-`%&4Ev!3YA3r$*Yl=CYeW-nRgW-#+RDJ zVo(ILILXIFFn4Y02N^R$axE_MU)k`D+1*X>x#B+W5{CS&$y)mwG?gN~X+gHP@jOR7 zjK6rE$<d2QXN?7$&pr!BfzyB=oVUD_!=`V2+ho8vLbPViPJur9^5R*`RR;zFJYhtq z`omC00SAr2iI52!Ym7i=cU9O|kkLUD2TqlPi>gJv^a?Kuif+VSgPSKb+qliI_~6bV z!?5E5zhDWO^Wv*dg4kw+0>9}YeI5a-^;bXn5G6=FZ7a8BLcguXPy6MsEXMaQiLn`U z;NkN`3K*c@bH^;<pq-y2B-0WN1A;Xs@jyU%9^$MRcpe$+<gYLAZrIT*jhz$n@P!Er z1ZsY&UUdT;n?hkcI)j$b8KWJ#M$pFCptqkWICpXerySa`!>>!U%OpW+YPQ%h>dPS- zy@yxDYPWP7F`?&n9nA0Ao<2yw=eMxRFQsdjZPa*rz{(6mSMtB{YI{D^JjbH|0dX_t zz-f*U{iV{j3}M2W0XV(7^YZ7}`TFJ_kp|tM+>|SqpK5INVOf3r`Facy?jr#?J&n*o zKgtzmSh_zrV082DlXvLh$UVBZol}#MFhhQ@Vu(Wi20|gK<a^mt{gY;Ad>->KD8%%< z1?%ndP&93W;g;X1#3V=cU{)|wrV>9ELT%z&PdgAxxN`&>Bkp%LS*DAHziiQ#+BoCL zq&d7u1Jb>i?STCy3OTLdOU4|oAPRk-K>aK1K;h-_p@V?f@Q~X|H&N->zS#(JX(^;a zrOes!nS6A2vT*oEgbEy`ldAO}n+9ronhQ;E+9Eyo_8diF==Vs|=tAWe>rKa{b=G>} zj(KdRnilt={P%b5r}Kk5Q|N>#+3&?asuuX)sN(<~Ut5tDRE)yy^BRE(Mi%#xilW^2 z5+YuoE1hSZ>Lm;oy=u-BX&`A(x_H*I5s0yvDg04}2pzOw>C&o0fC>v4*lR$Rt)W!y z-ABz4-B><Wra+9xCU@4mJAK%9`_*t@b8LF9aSpde%PG`AQ{U`>87W=tb(uPX(H2gt zWSHJe1U5vyA0=(#bNHnFA@cwpgv5L_c_i}g_+%UhGdCxUt6eFaSPOLzHjud8i48wu z68wjs%K+J4Vy)Cwb9`aWnc-2`@B53o499WC3uxz%#NXA`(*b)LLg1VN9d)Lk_Wnh8 z&{>!z_Ul(+@6wWSYU(L1l;kLViv~RMXf+L8`&uRHgo*-=5&;Or*w}ss2L<Cy+=HMg z6l~l(u<G_BG+g#nZuOsUL*m`#u!tuR;fp^5P0<HVS67t35Ztl=`VkW?)MeLL0U% z!)P_iB%huiDyPxy=*)KD)ijESxvF?h5ZXfQ=(k!nF5G!@M@`^Egd4R8A>)D8H){gW z@_2e`T_jb%E=AP1RLsHQvXe#nyj;O<bRxJic#8KQk;VN|T0Upa(zHQIR#-bT;ig?` z=$|Cu>O)(i2&IUp$u~%3Zs)yv!vA=_e;)ke@iaI5@K@UFUel^MM7<-XjBSePbt{_2 z+r{k;mkJulpkF8O=5N`s$zu4)p874bL>4+i)YH47VhJfFGC?X;nlu4bz7xnc2l$M~ zHC=9@t(agG%hwi1mtO>f$pgs1!}IFv`9L!*4U)vZ&}0EAd^{47h%bp`gOupm+4&2s z^Oj7~r2Tzy^mAA+1i_L74i|huvP2$OT-pM2;S({p>9X`h-}j_xGAxS%;HVISBPL^$ zoI0;2DSo~s>>ivhEw2G73CTjuUxdh6CC?bfGx+^CJJ9eJica=l#SZRq2CPnIB`UVX z<XV1}tMO1^ocF`%ApNyU5qluqTu?d$*xlAUN`1TcybAo)rdB{Anp%0|nhlzubTN>Y zn<-n8*qQ81Z9I#E@e_u}WEyXgyO4Qy=9t0==?)0PP&|A{o58LQ21{fkzN%;~%J^L6 zwV^Ui7my{YS`n6kM1Abzbr{NF<6*1MiU_$kUHSXBIj`>Aygf^ceK14&um`<@G5ErM z?9hby-?cG411U}gH2BQ%aZ!EBH&dC+{?LwIp46t|KcRm$SheE7tNJ53v6NdjUe!)x zdu!_J>Xa*yp%ew2(%Cwv)fK$faoV5-McNx+NoKIH;$<H|$r?@Jccf2FXx-sN$QSFT zSnHCnuSF;)E_Iq}H1wv2)&c%rLwv@0QX~n&k%ZCT2V!+aDg&T-IG{lT$wt8$s^T~q z8rGgb>gVA!8{uh-WV0m2kjTZEffv5gY^et|P<Em2!iQ$@Or}px7~b@H^Y2{}_}^5l z^1|}M%F)pT8!9Uiu({CUaF&<cb3|et_<I7@_L?%RMO&->C@-k4HmS`f5Xi*g{}mU` z(#X@IuIEa8tc!c+JEKhKaD}S{nOk@6*Zt91RL|iiDk=OSQ~+9gRY~iiaI2@y4&Png zv%rWb_`H*PnzbAq+Yigo3|qo?dzve87E=B_Y6b4Eh3=tRHDMt~n?&xqx1!C$@>Q~` zvGF0GbitzWYmvgs$v5v7Y8GS^;+;_pRvIE?yKxy;AAFX9SxIaqlSz#09~po^J1fR4 zYw4iO(|e{>v)yOSe0|Zp=}YAK{{Eky;iw;V0$&S$G^!%CS-`3eY2j<v;b(`Gha)<+ z22Tm*!;qM=qK-gALW_ZSZ?M@Tf+b5L%Ja!>OvO<cC0d(7#>K|VuVKKwb}e1HQWM@< z0E}k80V`Cnc~K`+LDmr*LnL;{_yXG+O!`Igdh#5OQdcO+0i$s75T}a^cp2H>lOsk{ zm@kN)*E<A3Bb{vS>w|wPCK?;{aIM(YCT_2O5DT*B-gN|x;W?l-y}MK-(Gs~YH&xW2 z3u?uvl_{}yM6*Fm);LiT#r`%@jpw0{OBfyj$8ylDY${x6YtT|I7G_h+h8{oVE}{h+ z*ujBBbxIpHgmn5|5@2tNXxh$adz8+*<;O&UUP_(h+Pr34|1D<dmzI8#_L11E?O3_0 zT!F#(nJmkF27Y^cVkJYYUGF4Y-GbB=e4hU8tuQzP!yvJM?`KPcwa(^%8Kx2zqm+(B z4roW0d1}Ro(BA#qraM<I3)5cX5aHl_Y(*2(SA$mk`&%RD_Qli$o?migD-*H(Jr7`a zyTnl-$FGULev8C3&<_vb^ip`ZcM#}v7w6h0tbML<$Z^95jw@#mO$(W9ZILeqVnJ<n zo5`GUrEMVY1j)GKx>VU2MRQAZn?_5T6vROs$2>^tvgG)#yMDw2C7#E=d4&H8IY$M4 zOr;azi9<C1C`l@VTzSq6qpA;?kA@vtyB#%I?oh|iNPGj5Q%P5{E)<g4JZfV;`vsP_ z_wNS9qb6#Vi@z4A8dtk>#xm&Cj7=xqE9O+$GefmDROsSN>n4*0NyOSKEje6x5jcgD znUUmiN!NGNjnaWq_HWSZ=Yuvqd{A$R8iJ}MfNr&>y3>j7w!X-i;IAQ4@^?FPKY6F; zR6+;g%h=2w5^h!+n8NTtA-1aFTk}8tkTlK4rKu%fD}ei*|GtF{BSZ1ag@PVzhAQD~ zD2z-8=-Jp%|EYSK!tnbI*u?_iT<MCTJhAyI2m>R~qPZKTS$ny2f~sEQOuR5BZGhdV zKY7dx>2^=_D1(A~&8(9#*{GF%538LRMI6KuwCiBF+!?VV5A9$@7PQ>|0y6rtZn+Ko zYY~+F`wb>RsW@8mq2+1`{JcCXe1=Z=bahk=$#yS`xxNhGzh#K6mOgA(uDafw<~}VI zeM_0t8y7<V%&4fv?hogbAxlx)jV&NG7VOkv5-qcdg~7s>1WZ5&ft8nI&`;9;a`?4E zuM;i30D+1T3fj46mRc@`HX^tj&^E_4?C?RPPSq#|(gJ)xbMM`>m&tra^5vVab=1U{ zJ*lFs5n0kveXtlt;MKvxsV`Plv{|5N`{{Gct(G9nHGaVxp(n8J%yc~u?Ok&z=u}w@ z-)-i`9Ti-kqo~kRaPVbrAeXC-kRIq03yv2dfGjyeDvZz~C+ZbZL83StAyx2p`l8vA z#AqTxh+3zUo!TEZb{KqtE-VdCygEv^|9<(rxxYJ5xV2@KQyzmICG$I4xlR~0{PnGh z_IoVS5YOPLDxA!;E1ZxvHl;CvZ<Mu}$E!pxXFIwp=?FNA-q`jZrO@HK^ofSZO;Rk) zxDMMw^Po<ffsG1j8RxzY<KpcBtN)~Xxm#e^3BQtq;T1s<OdD8SXFxU`{LR4}J&qqD zOp|d<(LT}o0s{2&uI+`UZht-!=x(&(@|-R!7H_#HCMMq{yk+5@r{!Q>nHM<)m>_;{ z0RBzE8DB=2^o8;9`JiX?I=GA#zsCf%YYMTte?2`V^9d)7Iq-NYzoPXw-<!(`rzC|2 zLXboQ<t0GC6<?8bX?*-GA9&vBKd+7VQw*uus+r9PQC|mdm^?w2zdWExXx!<^qg|Ib z>|Y7G8jO8sZj5pzQd|%Myfn1&Q|sI?j6>7EU7yVBZ57<kkYTfD8do;`sYaiG!n_$# zI1qCAn=fNTbTf40LBNo)t~(AV8ZJKU?EMwwU{g1=pU9OnY1idI^!Ym3xdjbnEgpR6 zmoPA2`mQ*5LxBm6O93ufqy0>%XLzPZFA^g@5HI)2OYjGonI@s-Int~?K4)CXm(*Va zCkSLjy`SLt9Vj$(OG&?_=WK|M9`>}N_LtO76I`T0@x>Zij4mJL+cEM;jS$F89a0pU zVU4Y;5pPn8>mV;G?3_LSy-X-92t+*dy?6z~$Qtr{%imv=#>u>*ck5?(=@mBAs~$f$ z2Vv)y)k>$|UCFEdwjs6^S*x{F^@~vai1i;X%*p6o&qf`(#)~*hl{f_-*>>ixPz&SO z4i}B~7Pe}><oPW^G2lYv?qRw4YHs3IJ&A*FVu;LY?r@DL*wN?bu%vAyvg-(m%2G7* z)UbU5AhlGQN{#Ggas)e9EPi5MA}#`O|GSqzK(V5cr${W5mzc4(geCFh=N6_5aVL0v zUEcVTiciZ>x$vSL7WN$r%oMCb_f_5BkHds_rU%QzA7VB@f{et3jn(Bgp;-rOIZd8C z1JmFAJRqNZP{&@=@LS&q7j6C#M0l=dAg&3z<e71vfMMg#47mn<=ksfi)yFfnn~zJs zXcI@)teLVl=V_xSdeRz|-{k;jQlOiQea|1a6@AEDR{v;<!FKYD<%t0#oq}2r`!8YG z%njYr(LHPSY{%9huJsi(SGK=PowW4c@q#x_3VAW#(meWgOitLR4H8n6x`tymB|FT7 z144Lv^5tnaXlu1DNd6=uxM4)W-H`^hVJ*_Djg$GLJJ@Z>FB+DVqQL`^u)co7r*d35 z7UkdcE7j;y%<4UW++1MIF#TUfjZ|gR&w3&<|FQbG73;nXjEHiAa#0Xi>qlW>l?}M3 zL8>XUH`%2pk`=fQ$?o&`t(k<GnozKVZlIkCG(zU^8@-v&mB+u@etA%W1ew3QeILD1 z(alI{d?e`*i}vzr9)}DO9~~R=(d<wCyE{#gC|UejYc?CkgJtJBZ}V_aQlHxnKYG9% z?Hy(%2iJYgUktj8{0?VuT~QSEL%zC7-NduS@^T}V;p<v*JQvAg`P^g+HrYh4=*u#_ zhmVi5Xra&R7N=LxpTfyg+JXT{?mi_v3$o)bw@q9oLEzB8po-}G$w4>D6uU;attW~& zJR;cH!rzgGLZWxV3ZSTeDT*`C<Bw?%-ePk8fI&e;96CIBm_G>$3YuS3`(H9-jJOD7 z{Espq+1adq<=EM?f4gTqdhNf0R>6=)jz@T+?PV#Va*}DHGPO29)o&3L6P=#%?8<Qx zu*QHnw*dMf)EHbWMqd{V0qef)(l_d=Dw^Q1EoYBtwFZfCts=q@`5OWmUAi#3@|M2H ze%MPoZ>m@pTDNKPLfr9SFtnhT&{4*=Wj8!2ai__y;)hgElypcLt#17@JNBaN+WBI? zh;A7L2AF6?y>X|9lgC91sEu1Gr@<ugfaIy_(J{}{<DqdZ-;cX@o!>v59TN360`!+e z1VkBcK>Rh|zB-FIOekj(H^^MyZ-YJsZ=cGovh^3dUHjFlRvN!nCcq_rqwt0&S)H7` zpX4J7;8)1Iabh6QixY3&>W=$w8bOvd5eeev=TDU`hK$#%2H0sp=;`5Y@!?^=z8~RE zUnHYu#&E=d=_8rX$0S2vSKK@9_*JBG)jWN|&-z}=FOg+>-Mr~{9)Z+xSK)~8r0ike z<^6&<D-6vL=1NdVzRjD&hjSp%b01+kLP@>g_cgRSFOmqvN#=F(EuYI~O56-9Z~xRP zUqt3P&Jaz+%@s>6n^bV!%BmDJlA-8h_!8A-a`QFKYV~Z?oZU2|A_faWIlz&Nz@(W! zdv`uN?_0?sCDzQC)0A&hY|b^GB#GfBO$Zk)F7pmm7=hhBYS<Y%441*zwL!+~JE%CR zFHyqH-%S<CF<;z1Vq#*{V|cC^TGz=mLUm#Zj*LdCe28+ZffAfSupj3nOiItNz1_b+ zt+46$)>2nj*VWb4+>9MH2#h9^jtJs~3u@NRfoVjBEEYUeUBn*zHB=Z&(5=TjBeXu` z^xiNx#+X7yPhnYM<RCzvHel~Fz=6*XbAQ4Cgo3`L%9}gq98DQG^t<E)EH=yV(@>}p za-i?qCJ9N(*|Q05S~p34>WrV4nR#jazc@Gx=7gw}8?>gRg`z$ahEF3-cV+F+_}=!= z24ZD$IhY-!&o2?0lSg6o0q)Vv(Z6?@Vv3t`w0bJgbd9{liK7Jj@PaaB=ksG>*RBxc z2X@~u+LfU!wGYT5-_Rn<@S&erJiYacNOa635@*&BR@2k19*bw?&NY8frsuogtJNb@ zjVI!g4@35Zk&T>zBDRRHT+0cSC*4Mq_}7%GY+P6aTjbt<LR=k9wY41`Zy)botmXjc z<H-JoW^rL=MyXT#6KHp_k-h$!5)hK6^qri9(6&`={P5UYv5TZhz4K(~rz5&g6ozFm zx&|ZS?IZs-e|cpK^%Z~FK-)+<S*eRz59*5(l|P7Q1>!jfCK5*V*;DC*@<@awl$bw% z1FMUG@OkGNx0z=<U1lXnQ=6lFoARd^A|R+_ImgY2z}jY*d3Z2rgvU`YgUz=p8L@Sv zANKdbMH*byCkh`;M??o3C?fSoWJVPnK;l_uFX<j^MiYJ7fG<ZAFQJ~h@Qe%lsjuwj za}t9DCdj?PA)w#!#9uvy!sw<+y~`@e%Kq!jLiZ)SvGuoZ1x`4TQTW3HLu_0a*PdcE zHvg6sNsW3XIyVr1ZZZu7H#T|!QnNE>?xMI}gPIlV3qip|N!Tm{%Oy()b!f+(ZX#;E zM5Xs?uV_o8#x`k#Tt&_|UZ#V7-h&|6M4`72EIWZ6@)$&;8Dtl2i5zQbaygF1{qwSJ z)-M&U@Oc36(vmLlU#d<R+rEnLP3FoW3hOs+=B!+-aACCaiElKU3uQlc3h##m&c(lv z6^Au*g@&5&0v1Yq*>&M1ahix;@i7c;g$V~alEg!J$KS}*ao5vDnQfTy4#4(hlvG`~ zEGQOK*R$gvL^zI6P5kkF{2f++wRfO77*m4L_!%#*+S5<@5tJ_<hIkUs&t80!A$)D= z%uC4`b?LvjC<;_`<;+7vKMne|Dh3pUkPYNg4C{J5yR+Tl_xJaWjSYt*a!V_#F{9cR zoho3<us55yb{;wg6$X(o^6$L6Ey|#2`Xr+QDns^YwJs`V1%`Oe0IPmrn%Y}y_=Qdl zE}y`$FeizhfGR~s)vx5`Wq-*}n=x){Fjqp_@m@*0Pi$!S%01X%)|w+^;pAeqb|JHN zf`D5@N`bX1y#9FAz?k8xqvIe-<_!}-Gm%+#a*N&leFIC!ILy1>jH{h;&Q`y>h>P9O zy+~5wco~Y820&Ma8xaU6GQZ5F=l05?kJ8s!`%GQyAbmS#3!#nu`Plw2k~Dj$;ID5) ze}xrg5<gw}Y-)MZ7VpP7wCV@{cCU1q(S{de;Mi)bjvd+_$sg+K#uUquWmwDH%~q+# zog+_`bp2#fJbWD%7M7g_7q-EX^)H716?CFsW<ploU;Qzj5}b4NOM*Pwh$>!aJecq7 z+~6k!{?e?33ZV=57^oCis9cn6u+uWyp4oWd%rMEopi*t7NUeO%)~!wFR_{{iU#Wa| z5@FhTD%<A236|JbWM4+_w+0lVt{q$i8k2ZjHY%Tc5IesQG~IxQWvo@-HT9A^u`sbx z&X|2lo=kTV1_7}G`YYUk`7A8CFKbIhJyoW{m1vOyz72Fvg!}%RI>y{j#2j)9`cO|o z9-cIr1782GEOWR~)s89^NN8G2nv|ze8I+)ynax4et>Vc%)$$NMlpw&k_6vLnuy8Zv zqK@>V>etMcLAfJ$pF6IyV@!;|kH?(NZ7de%j^H4n&Sq>`xA*$z5%&ng6;Aed>Ut`% ze-z6A>|-us?M*bZ2wa0FEG&@4tF2O)nQU}-=EXbe*h7Z4!lOtCJAd4dwL#$C^zyRV z$cI($+x-8dA8|qAZS!$mSP<PhGfk|rlOEfZ*&W&f<j4L8N~`<Bqyg%Ry1Kf99dP`9 zt1DXMI|O3P9+DC@P484DE17*I%?+K>+3n_;zry=lNB%QR;YjSgohL>d&+iF>3~j{Z z?F%X>IMN{X7G(7OYf3|^v}*N|Rijp;7O;24s2q&Q9&CMc{H3M<kQNjy($Fx5Es}v* z)Oyt~Qjws?^`7U-I`;D#o__`zwI)fDbqsQC@H{E^jMY1J&_}mOSM9ZjF5I2$TKd?a zy?e3@(E<ZI4r0mfKlD&iNs#C!jB!kp?j9V^+8t^QrssdEGVAvfV=2N|)XFvX(;TqU zHh#%}KwT}hfqv*=BqSi{biW9|d=QDg=!{pn;*X69OYn2GY?BTt;-AMoNscG+JC0;j zL}^g?EMtw7d<CPR@v-cv>nqzpOiRmJGg_)Ne-D|2aecoiRHAT>3iA5x%p&@FTQ8)n z{3}ORjxg^8+Uow0NCEDowKJg{ZC0c@M6CuMUk+;Fk3s3I(9gh8aD<rR5$XMy`h_in zf-Sco7XduUxX-=JQ~~KTX7;|{deo=qo}E)H_>J(g+t<e75rvQ-w7K!1rRwKKhNKjv z(2B7yw^MC_j6st<tcK0}J@=}#>~)L`7Jhy=?;kLQda-j+lA}x2ZO|QHvCw)*khQm! zZ-?&BPTRQJNjqm^-U@<oS~0In@M@Tf=J|$QnTEN;yiN&AgQ+cHonyP*`=69O-WP@! zB~PstgJXn^r|+DHM3rvm-NgM{^~$L^Aiq-lcNEU8_0b6bh+Sh^Il2@V7YNQBQO|hS zPB`%?H@YT_R4k@>*h11g?8wOXXjeMDW-w?xmWBW%*Bss(h6XC#-%ic1{H0(oZzotl z<`rIu4s!Vy{=DxPtQtr~%wRsY<CC$>p#j_9M)#@eSJ?UZk}{iBi0SfZc~*g@(6*c| zR`29*!@pu}daO>pY85(4bgA}@Dz)+u;R1GhPENq@4xaX=XQ<33k^kGZ&E=E@LHi|y z|6yVlSE%a8d&Kjws7YNN=^LbgA-*ixXp`V<^Gp}>Q}NT`F>a8fTLONNC+|qU^5r2| z@Kt&jV~jSw)6TR51r(1-Cu8}-yjG=F<)S&eY!NhZEQ9=v>){XOaqb5b`O-t46a+@< z><&fkNver6xQWjr*nLMo5P||bmZ7G*5>+0R)(-znkkeh+hHj`SD-EW*jz=+>F}c4i z&9V^MV)tuK4+(JDZNv%+DlrNqO2&TESMU0>7jGQkJup0TiU@{!2|!sO5x#uEk{Jgu z!iLQU7=B~>K)SVYtp;mG$MsBV&0dJQD;bZ-lo_Je&-VxQojhBbK~e!!Ri%wV#@hv? zNA?n*D>OddD41NDU)a#yXMU%wN0Z0oe}?nHF8wawKsVb8Lk>mYzK##4oW_iwW99m_ zDpE1RLYIy#Q2@c?Rg)|M=hIwPfbI3q=)f@-7itHR{kD8jaAMj>`Cdqy5jt}@3QB@} z9!hj%NoZSynQp#8r|T+N^#WfZ%;8c0;ECJe)1GKUl6>hS617NZqgLmXG}L!9(tt|c znibYu!FAl9x@QKZfq%nY7{SBW0R}&?D*-mH$YK5F?C64k6AVD)&|xGdBxDIAOBi{0 zcsMyZx!yZBC%RR*+5;o{&7q?ELQ!*#hkr;i2QlrY%f6v2c_|7IN;KedaEt`{r=D^c zk~!c7_xhDPShto^i4F}q6K(2y7-_Fdce%Jtr(5oxPfHOHeY~85ty5#>+gi+<*K*`b zhj%kz1!cv|@&Sev>%?;WF>q@|g3UD}>7w?2AAjC{H1&Bf$9#PaAGG&Pavb?09Hrh6 z%x#4x(qP56CE#hFz~A4%pt2rQG$U9^<y9_C86b1UG2LSJ-y7G}%i>6|C!V|=vZ>KD z%mE4NRX<+u4$H{M^cqZGKFSpTKo46dh4}&xRUc4oREwjFA?tnf@%|ctV-m&}jB598 z@mA*L1fQjQH+`a>?`4R=Wbs+3IFVM*uxRu8%VxWtHr5?Hf+8`D%eha=smCz5*1zu` z^K*#Bjo13D<dz@CQ<#aEBcedJDqIfoRxHc>f|C#B%MV(Lr0`+g*H_W0@o~g<Esm^> zwKe=hQ70#-073tHt|dyxfX$=&>dOGSl0aoyY7E)&8wi5E1Y!Ym84V+H6JbUIrg7Wm zkevuoNNCl`FVUDkW?~)In`d(UNbU+YA#4m1ww5VJlZ})FpSkMR3~PH#xLN0M7sw(h zldJLud8A8M=;)t$nL@-0!hG+d*+80=i!dleycdz!-L0*y-Q9WerEnxa#LHANC(P2u z2HAnReu(s->!{xJ8?bCjPs<PfQKayj0Ny4ul|%lREnW5S?l$B)Q>S7$@A67h^r9$U znmk9y44RGXfT2bQG>szl3Huac72WqF1Nm1U$nA(py36juV=0+Ijr@+Dz?~CN-7ODT zc-=k&O!s4FvWnXTGSBqL0>yBgo7=}pc@(6W0ID}NkYWp#Z`ad$;T`jn*K!nDTiiSA z-@^BL<^z`Qa53=krj`?yYQMNj25UP6oHk)X=NDHS_lpdnM3&)B2(5<a=P-p_$#Js) zWTP1uaog!_|0$R_>QiT`b15?(<#$+#rRre>x-_LqORH~kx`k?Gs){kW4$%3}&mMZ; znR4$uK0n@XZf+(g<;fCgu%aMQBaG`;I`r%q)5r^m_`R3S*`<ro{f3rvhEQk7r(uc| zXj-m?!ut+N>`&ECOx+g0Ax64XmQO+EQ)OzJcn~*8xQpJQJ~T|#zsL<{K5oeY>BSd% zx;&0{3g$&rbJ60;-ft~>)k*xa6t1ifP1YP<9-$kyKVuVkw(Zl)T8>;5{NBRvT}Txe z^S2pF%IA75?Q7ef$nJKg9ghO7@aFiR5+&>Su3S%kqfEw&*oLlv!GuAfYV-&{QM}nx z{`-lct2?-w86Q7!5W;X@z!p;06(be?+8b};TuMCeH9Kr%!9d?Y#7{Ak5?!E&Qm6!a z+1|eTuE&H0cQ}~T+PZ<Otn&VfV+2RRZJc}XlupINpPDOKjB0&%MdV*nTKew$d3JWz z*9RD0!XMvWY_u;dsFIZkB=d6f@=~}J{Wy;Ey(5nuH(?z$aU=k-FhJf-H%aC3WdPgR z*jbtDxSo7T&VAaFupR3Gkk9W=f;<_IJ&Ut8z!RLgrts#rzS38jC4i#YG`{GN##7e; zw!A@0ShZZGVkPX{l^REd1{08X0h#wJv9Yn~x)Wx%dwV99meN3cq%(K<!pXJ!Q|ihW zj*Qf<Pd&l@zmYxpu3ppKAC>$nNFjf^6bCyr(&5Mbc9B~;S(#-18xJgh-=q6oqg_K1 zjyNlUz+m?mItwNjcYJ*RAW$1`>V>CQfMs|}<>V$Jb}+H8RzrRlbHT^R9Q;M`k^+6U zR1U;2zMxMZJZ|<C%%rjIUxF-Il29wX4hChCP$`BU8j$k~6eXY)TkTuLYI>-_?!4(^ zvQrd3g<XVrJlf_1qJ<ds-hg5;XXNJQ=H!%wL+9jl_$5LV;D-SE2`&PGkLx%TWaM>Q z&hFCC4IO=|bkP^cx!!-`Yr=Qocewd$%$*eriu6Wa+W+qTOWLeGBLqB;hxOYEy>evt z<l&0z?7d9+?zoTA*V)b9uvey*PgstqR7r8!4yRBAxX~@M?zJmj9lv*O*}Wd%o8e(l zrH!f5rSSWYP*ti~)oO%OS1<A4$G!S~dcj=+G!;C@R)mkB*J6Wvk(yaptSBe%tWjBN z@2=xKN}Y%XsvNOYLSe{hIC;_k1`ByLeJA5QrMtO;?0+^jv3?{Z@1f6Ze_KR{S7G+d zr_EPHeCU~qBpofn_=S+O*yn52tEeBZf<@;s_Ezyc%%3KM5x0A#*pg#;k0^+TG;Y?i zVUcG?eYB>brJKrFZD<35kGR_+122@=Y*Lq6v5J)`?saDmCWsd^WZRrX-tl^Wf3HE0 z6(i0xCxLlA02v7|_pBFZz8uDaP%rfaQ389#nH#o|t-H{sMWP0)_z=RpUw{jY(D@3v zZRtv)Z<y)IROQQsTn(P(xW%`5SzF(ae_)UaLPsBY`4m(|Q{Ri{+;7G8Y3R*ZC*9X~ z95c>b`_InwJ#K=5j6p3j|2@a=V0V70(wA|u@ZHaH90^?OTT2%gYE4awxabQc3|UBB zzJ%k4A(&EBNH8$aaX&Y=CAAOZqERAWj8v6v=rXC5sS`0GeibXKFT5mfde1u-&7BO` z+1vYf@)dNm;8)B4gT`y%KG}<fr^91<fi{d^PZdfe<@Bh;ir0{2$IdKLP*NIis|$1e z3|Kmq9nVyz)r+jtN=ZQ9tB_SwE{_s7Ufq^-pG(NtvNO)Q(;T`XMIPQLRG|}<EUTbR zad}1y636Eg0mavTtzV%}8Vyfz=Js)S-%pgq-l1CiG6QsEJY?)-K2Nx-MK%vdBKQht zvep5mAnwi}MjzJz^(R(zwjZ)`l)FBb`sO^G^DUI5tqXJ&Ypr!lkCQAp?5)4FvXm|A z<Z$V!bNuR!<MA>lN?=Jsgl85T{6740Fyl%bHN~jP<c4HxMI;~_0q(4A5$Q~(9HDY> zv<yW}H%gj}VY7lZ{oJ@zPF3*?`~FQ5ZR_5i=%yu&l}9p%pn)l?L1=xqSmD|4zHfRA z4>+}RSIP*L=A7X{m``w5Ki$OgSQ<$*TuEP7pSi<y;LFn4InMK%Ue8N9q_o*-tXws< z{ROpGtIDh>MM$kSNga^wYoaz7tR4PBj<ImyJs8P_P~F7<ej%QrH5@!~RbO3;046Uz z*4X|{`1fb;E=3yqz4i5ME~PRRj?j%?_!mSzzY6||OH=*|!{O#9`cx!XBV@$wKv0uM z)c?WIAetm1pCm+e3Vq8I$o+1hH$^gPLipIHh(K=`j9tSVwUV(K&9kF6lze7?tmFCG zes0<Lw*d`o025HWhKfOGXKr0oD=h7PJau_)L1E`q80XxxwG<mH@$O&%H)u0VDFz4r zxET&2WV}vg>aF8)m%My%yODsI5eAUM0q#Fik>J4?sj4F08vFxIjPDK_Cz|=Diiypk z0jmxFBd<-LD%nIdco+;dCZa90ks^@-LBuj-!JO4nPRmuUtVf)vWFq%(Qe<`{IgwCs z3g?Qv3pd(~X=QemD0ECN>3nqE*A!`0frX>*ja6K-03vO}gD0^S6+~fBc%jM0C-%JC zzTdh)=1!XGb|QT2aUXv@T}#`Xf5M9s;>@4w;o>=qyM6*AqBn9N?aE(OJioXgA|Rkh z8nxya;~x&?geBn+4(c^%)Y4^4TRKIe3YsghXdj-;R2O+iBW4@9OM{gT_T(?MR%4EU zq{6uKEC9NJJFt1%N016VSsK2;k3D1tCi|~bZInpQzzSfHw+jP%zE>GqF1@okALZLt z<J=@ot`SBSFSy~K05eoUBz8$8<fFl7XruA=1g6u!WR1_?fzRMunF`(MpAFThPNO2O zd>=Yj9EXd2Lo%O0>fV1tI`+Gb{zQ0d^8+uvGo|e@vF7Nc`(6*loGzt^iR*L+MMEOI z-htF6)3cjD9+V&MS5GS|D<vt=<A&KXWcl-|)yjjE+3{k4c;pppqPXG9M~olaj!$B@ zA>8?93Gw%K*G+lT1@(1p_7$-`X;P?cTGU+M(LE2)#u6!9dbR_{Af}!`tbHR9LgP@| zSD;!rtZqV|Y17=@9kxKK*eBh=!)(BX_T-+@N2*AH@P39ZSSC69&m8WleGZuJmwb<L zAZ#IoL%0AKf%3f-$yE@O`LwN_2$d@QnnW>oGd{6|ma@gag`%%HA^O+5JFq+Ncmhy9 z^Z0$V^!2wkHyJVEMM_oL$#P+V|45Y{D{JCFd328YFZJ-nE}o?r=GJx&*Ye-bEfAA} z+=9>F7x{Ic^jXQ$c<uqx0+BoS?fd?zyjm6mvcPl)Sn_O%4`Ps?%etwZ95Eg5WPWh~ zR~L8VLYAm>DS6OeaQ`|;)XURVTyTH+w*OWeqbAC_F}dV~)1zh3Fw2J6(?N<fMDRAL z_dYN4rx-*>Fw(@Nu!tf{%Nei#y$<=d&CeNb<9MR*hwdDCqOS-0o1a}8#r5f?81UbO z?<=`m>;E_7eoaY9ad=BmwA<>cTspOmq)Yj0z#L3p5Lg#46bhSPpssm1b{Z!^P}jd^ zQ80L*FP75CqSX8^(qRC_z9#Pd(0wvb6BbH5400|!0-0-saP|<5sI0&@=xmwriSdYy zBx!Wdo-0|JvQWC^(M#|NUb6E3LxF6z)QU3GIqsS^Zz{3?9W>9I0thl_FxU5wzW=S_ zN?f;K$J<%|(1ya~dr21Qm7BX8IwkV?Q6?4m9#n!t8K%Q-R$y+^(0x}j8F3z62|}qR z1h|+2ho64h*~f)3Uv5p&_&=?$aKZLMmQX(LKJM&X{pveAJ8NrMsC-^_+^HzO4x82c zoPIpmZ^y&t|3nk)BQk{S!W&j47Ic{x1MMeJi-x0+S!5rJqNKU@S%jpt>I#KyF8ems z4C?B-_6eIn9xxAUY4jz+l{~t4BM-l5NOT*&j89B3Ffsz#AppYxXgg|f86D_UJq`CP z1q3)hc&?|4K(m%&Ur&=oQDPjr9yGxHfjhSGYus?*xinQ$<C=PEl3q1-Sjw2G0~z04 zKSh42Rqup>`EH?q?u4ARP0U12JJLs|BwR5(o$qY=+_=C@*In0Snf9+;Hp$;6db8_A zcgM$wf)#u`XBDby)?^6=Z4!kufUpyvAfO%?LN1*a6Hf&WL#06=Be4fdUOM|gzoRTc z{EjGr%_ocezQ;O3u)`dx0g1*>+?ho4i(`45`PNzC`i_MtiNAs)mp%3gEmp%$G!YV= z!+`IOV0;&&_clFE=m9P-wYCm^nDOcaI-o@ijM*QBm>=+4#bq&J#(@v%TU^9K$TrQA zF7`AeFqn3G&*;v!r$n+77Xhh$Q-#imF3IV9cYUG&69klo8uSOZ9<|#5<ax+8Vf9!L z_8wy)$heGj;>pnq_P&BU5@K$Vdl5AOZtU+QqlX9|K2mcCP2xx{F(83Prp{`om%<Ou z03kRMhkeBdycMSFZZL$t27!;^T!9b#CtdCF*z!i+w^}rD4sQhd#SWKUbMmB70wN+J zLc)!Iu)xIfu7|1Dd)laOn#~3zxB*q@lvg9rH-%Xu3FeBRhpVY97yyzcO%dDy!R!HG zSn}6Q)=Cd_gh*FBt6{MIKPV5;ztbq44l+I<2b?&CW<B>-$m9CJ6ovH2Xcu#&{Lm-; z`55?o*OzVAc8GwU+1XijeV=`ME{!GlkU$(GV=f3(PsEoCDw!PVf+JTGQ{@HB*K6Fx z&-$;_aI}Eprf!A4Is<<PtJU}+yBs9?V(&k9+^}~3_3KyQr|*1K9;V2L=~d*$T;*y) z<s<WvF3u`A43i@M3xa4T$RdsDOxU<2yYvI$9W}r$V^|{>-hCmVFy_M4$5<WQ0^f`y zAnv?Dipu^nGIBKb;@CR=Fy!2QP0N)=bQHGfOhx+7dGc^_4$QCl(G6dn?KcX^<o*U4 zfl(=iGg<hu0Xh4MOn3nr&o%=F<=d=ieef*3*(kQan?;cndlNBuxSbd%AraSPB*(_O z9&xdzDeh4A;Pl5{b>z}j#pge9D8c1V`KQ;fA4`^v;)Mw=oi#N;@woH!AxmJ+n&2LC zB#BmuygzQa7E7Rvu07MBvKm{pfnD_an39l3|E!sc=L+5lf<f`-C-wteA1W)O9(((P zg#l;im5dDB1IS?~ESTFbD@^$?1&Tp;4lo>Butx=ho-zBMoOcBS{Noj-9Bj|#VwgZp zVLZVUjHrr97L|Rz$|La(RCg#?b0gk70@nx-CJqKJE)KjH&rZGa1zT_U$zqrni*MR= zzmHNsUhO`Mos6qZP{Am|bRbdfCg964<adHlx3O=+r@s4>OR&*|tv^0>MbdRsBsljo z^hIfy@Yg_&kaSIuD+s_*Jk)ka>H1D>n{@1MBKgQy>w%`PuN~Sq4s?MnLSi`kPhRax zth`;e-yRdMME>E4=Ike~?SOnoN~*<v4xo_}#nnUQWM}_Yp#$!v$JeyfR4i=l!^6X^ z4iAh7QNX*vgUA!sMHt)%72Xy)C@YKa#rlr*8TzGnHVmo<v8hLx+%r8&mTNU_b4kpl z-k$db7JlxdmibfxY{>?PB1ENO7i{ARGf4g=7kJXVsQ%_^Zl<3J`jALchG98pSN(Zn z9MM<mPmy=W`E!DWfzn1M1Al3{d$TZqz;Katq{De0EhyH%M*YW=uoayG7K`ccL>MvZ zp1cHa*HJ&iVg0(h-z*WuB=ZW@YY_Q)xVeF5e0^=r7!E_QRmaxN4Omi}vEr^*;vvnS z&T7eNI+WR1hGq`A$L7vM{AZieRH0U`SMB$5cbr76fCktAIVOAamxOp0Ww;)X?d z69C@_fO2)Zwzif%c-%1wVA<YjaV>`bVcFF6YufIPbXR1q^no*9iz2oW<~8?geNTOC z)l0wV>7IMkZ>^h4c>43N5L71rb%$Aa(=iGxM@5&<vzygREU}u1>~%pa-(xJm1B*zU zpB_kwZV<Nn#QS(`3i(#?YlX>u#+fk$MYCW@<SPoq1;$~_2LC00Eqwa(S^2NO998PR z8i_w!@P4zS?;kMq{3{F`_Z4fk!WrP@^RFx~hl`SNb|r61DFIkdgvwY7(uO}vdk2}M zCVGFS%H-WnG(xR>UmVbK(O|wDWZ8A-F>%Uqpb73J04+Fo4h80MeN$6YN5}Y-TDjO{ z2zLQVU@tFVVr}b<c})KOrFUU3X9NNz;50CbVs(h)HvPLUm*1%$i*qjj;lg(>KGGm9 z^KUanwCzT_s^truo8*VHK}XWgGM~U&u+AuaKfb(hQ%C}?7`Y9K9u-%L;@J|reV1$d z2_d;P!n1;QJ)V21Os%}r@3TvX@$&qfCG_5tFGJSW&W;mzOxv9Kqw@@y&ctE36NQoI zBbcPJB3T3ln1*3h%ldCq3e@!y0}zbNr)AKaUx1CxxOoluw%y;Y`PUhz1c?%OL>CSY z4uFBM5;jY(eEc0;POvckZEwtyXq;ePXD4Y^s^rlp|F5?d_8?qhZ$0-F;a%a5U0Kcl zKJ-02u{>>--;s2c(T=LxrtPeFF;q#%Lu-3Fp83R{7~ZZqTT-B-uy;+U6f|*sYk@%p zk5(no6|Eu2=_kA|ykI<!V#G=nI;`P$0DOrN-%UMgt*BR7-3S?+RVo*umYLYWXp}kU zXuTb2o`L3o%m3V;)maJI+LNi(kS+d^AUR-GkBbO>k@a7<ogz({Hink>`ufVl!vi3c zDVGCbShyxMcw1}OyOrhmtFf}901{)o+LTeCO-#ZF%~zpIFm-nE6Y55>$j=z8Aoj&e zx<`5H2SYX=m`>YV4Q|Wj=lrRNCU&5M+*<J+*v(~#F{VZ7yYD91Ce;IFJ^1*5-e;EW zeM=Q*grqKXVB3Z&{vS3Bf$OpyvqM3<)_!IU0N1vf@pLyX@xsEM?nXC{A?dy-%vu2{ zL@vhpMGVcgt5B#_FsNc(1G^5TbAZ^-nOm1waKW-sktSYlAdD-~N2ExBnF!G~73n{q z>J4l$4i651uTvMuQu)9HQ>k7WZE@zFPz`U@pnt&q<wuP!ANh~>Aff=4%xih~kpH3G z|1+x4;n+z8`itTSNs=&K#2&_D(*Mi%fa;D93jgm>)@>hQyz>=2OFnrJ#SvL9l5*=u zCJiSM*^Z5auaUu=D}5zyw=cUPMYB4~3Vr@9l%0Dwo#)NTHr&=MYL4VSt=DLBpZne8 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	o(^qJI+G_%k?G_=gX)k9S z#bn9Q%6|*+h(LGMU<-M*#Zae7*67=r*RDY46F$WdP;-Ii=e_HC!+QwJB*anpbLlyH z;qkQYaVYJV|B7bn2ho?K1t_4Iy*7oG=xkFB(B#dr=cDL2@_MVvfQ>eNMZSS_<-C=O zZh2LGd+MtUq7SVx*5GLEdlLJ2cpSmqY(a^jMmms!C+mC=kTI&o<S%yL0|2(|1Pf>9 zTX|R1;k!ZfX_<T1LDH{R<^H_4RzfdMG2piLB^AWlpQcl#qOYISD%>#Kcs%bBN!SUO zrB;01rE|Ee7rdq=G0&hNi>84fK7xQ!z5rXohGwPwsClGA+}Tn{UW0)xk46QWod>q8 z0ZLJny!uZ`r+gQgAhcvb^U@|wG&O{cod6lr>HG2=XPd6K$=7G`Ca0jMFLf_^!1rA) z@cq=d+(CZ>-e%f%?I3Lt9$Mv#yA<K0L<0$7aWq&Nni#Fo2WT>$UTnCHamC7DVSEbf z_Bj!WbHI-KAOnXivg30;8-bi_0wa$5HyP+5;FWzu{?@fAQ&N~ZKtuq6ok9-c5w2Sd zBu}(pAa`OE{9DJYLe4_YWRxaT`Wz<>?m*?6q|@T)PlYLMnIMCNA6~zNbz7jXfYK`m zcHYHr0#i<^Tm81wr;<>wy<O)5@k=}wZVdjhMK>~dx%o6jOtYS+I<dZLhM;gk0^D!j zY!uatj2PjYkz?W<h~30KfTc{6E+-T=T2EGtdb%3;v4u|pDGO+G%Z;lyZ0|e&tB1BA zkg`L@#LQ4f=wvATq%LZ**zTR%XE0PlS^1BoK$dDIASr#9q(I%T?C-GLM+8A!7-PW^ zPkiRt8C^6hsZAICRQPJA2n}%BG+SdF(~6Q2F3$SaiZ^fjN()=+$haU1NcE*e1+$z5 ze(Ri+`|z@=)(7n;zo7?yBq;ZU<?0cL({Jl=Fhqs;fFwSaF(wZ0NUl6*^S%kgh>GQe zgWC#pI>Rur26YFP+m=|SOC+H(Ml=<lCyK5P0eVHk&jUX$uH>c-4InSf_YRUs*?4eG zld|3vDY@R0RLbHe{O-;364>;H0lhd(CW^OyY`p+3Qs|tUlS3U&!qn;1Y@@O1*||Xn zskgh1sP=u4zocoSDqXT<Kz^VvY9=}X+SdWz7n@cObr^*FlE`HY&+PGB{NKMV*5Gk7 zciOYOYO{zuof2CRlbSbgGxQXVFVYuI!~uPUPUSlIoHb$oJ(xrt_-WZ}gBTfr>!BSh z=leizqLS=k*V(`TqH%{(+nW530^DD}c7FXL^W72y``WHjaWV|&D)gzvRW03m3ZEL- zvb#KrTpb^d(RRLhrb%9W=?IbpH5%ljw7qhbV{U<ODHK;S($jrHUfl3qTG!FRg7>k{ zzC1!9Ab={qb&cOoJ>I!CZ%q)gpo@Tjkn}AFSMGR<6;pJ*8)L@av7DWr@_3TmuKC(A zc-R|eirqx`sCVy#3})W_@PF4hfs`y(Hk%6x(m}-j=Lnru%&CckV4vyp&;`)pSi^l+ zvgPSXt#uonu<%KrRCD-p?n?`#LCwM<_i=nsY1(=AE-d)4tip2~{aZ+f%rm_!_kvVn z)`^xi!0Uc*BVgWWZMqPo1<Y4;)Mmn80v6+Kt+A!51?GJBmBaO)dF{~NwQK7y1-i&6 zJRFp~S)h<ul1q26KZa|8_kW-Jv!A8@5wD~maujw1RR=z|t3Ba1Vh!Omw|0dp?C;9s zIl(OIBq3xyRJSHW_hRNP@9j(;HUL&&4vtc^?ivoPiN;M?zVFmYz7PK2BANV?f%efG zERfemzP3GlKEZ~nsQ&kkg^x_1Ajk-1-9|*r%+1ky1+V=l#7e^a`{73#1m*LF03~Q; zVV)o3QG^CNLzJXZ{wx8=piHnJs|PCc*+?X;b>g5;EL#`yW5u?iRh?gtr56KQ<$;@h zi2yCz(EINgb9FzyAHTEB&)zNP_B8+vrH$)17a+TPda2zSd548HoiWUstd}{qFz4}D zZiwE9A;dj;YC#>osKxC4Tqu)>t446n^+UJzn9<LeT!75aFMdrT;2?Y++3HQ($+8;Y zu*MEva$Yw6Qu{vpKCFY$I&?DmMK!%{>Jp>aAKzSn@F$vpV>VrmU4Yy1Bk;HrN)iJ$ zwH7c%Ud`(>7off$^4~XnO9N5@`lyej5$7~Web2TIx&P#U$Y8^9k<mFt^R&ibjo!S0 zSDPH|LsA1`BWzWdKZ3LzPRdzt8v&Fu2VVksX@M5r?XwGMhXok17s-*8o!y=%!;sC( z)s-e?c!)8O!n0`2h`N*bm%*48Q-Hyxt*$u#IEiD;m>JtwXR<4vX~EqpXKlH3$9T!C zo>`vay(H$mSqY0^N%(n@eZtxnvQM6rjV!Mlra?h*;N_*yzjFA4jX^%P5g8>^_joEL z5i|TWzOR2?KDi!pWWjX8KljLohy}qtkOqkQGrm3+Wb3|AuN7mS*{yqA?Wu6QpJbrO z+3de#VFoGWPOM93V!umnC@!|s{H&e#zTEn{&41vh;=hf$ZT&490W_-3sGNH)2nD?= z<(3|&42@-yD2WFhIYxai%wRq2p?ofeTLwA_Nq+pXGzjaYRpb5c3Se?&@%SIR38YTn zIA*`LqAt+H^lWjY?NhX*taAd8E?}jk2^+O`6QN+Jj4sz>;e!n>y}wYT%*NH#jWs+E z+pV*58QF4e*=4i#fsFxkrM1unGnGPM6%f;rsmR^we-5$O3>>v_ux4c|B__JK!{?}X zbaoP>a$b6wUlie^hFaBgHIh(D*PJE8-CoourET?Xr=B{r(+fPHN<SWP_gSBSY?tSr z8=0}X9tA^j+49HhEDfH~e|L4>A6mcLm5wvBxm13?mu$nWKr=khb?2PmW<2?x)Ef~R z9V<6XB~NFb=&&^A=}Alb)xjtQeIrrvwhh=Dyzz3k)c9|^%m1wFnNpQDesr6*a6{gl zs#ncd6zZP?-)k}%_f;t9;CnE~vJBU)P_&z=-$PE%z4<ZGM(Hu1zMals;8011iog#` z2csv!qlBt*z`$B^Nb;qRjnhbk8qvXAW3gO+lX3g3?v=Rm<-~l1C7C5QzdW|kn~)tx zanE0y?%l~hWkpY~2@`pbo%^hd*|Ll0guha6%Tj<_aA6KsfEN*kmzNhG8UD-0-}v4n zNg#lUAddPEqOp@3?h#xO4wd%IXT;_Yt_Eg5@J$3xh6x5x0iBT+=B5N(5)7E0gF1NB zG&@|;X6|U|=7CFYHE32X9Pf(=hF*6l=ut$@4M~mvP_{wEnlt&57~5)KtIkpyy7`&n z%&*23bP0c9Xk(9R!sOM4GtTHIgUOBNVlFRV>`p?1trGc{@&}9ZVZj<PG-C!%gZvo3 zlq$HU23um02+{Cm`4EmNSj%D$i_~17c?9;U5mBQ;_V<!Qp2ru1Fz6u&89Qm>p!U!G z-CfOo?QDS91`vx?q}iG<l+1ESsoUM?ENe)pJ4iI1AaZ;>dkgeo*aS(#Nsi$G;#j#K zjGboA*aTYY#&qf%NOt0X)XIWp`F>^;Uk$VrEjOi(BxnwQ!==hZkPXp_ZBe45A_)7! zK@ohvZs>@@nq%U9_Z3V*N=gIBM3`+M-815$_%OM>RJ~>Yq?%&4%Z^H5!f!Rx!%_u7 z=0pOpl-zmEItfQJ%{(CL7kiDBr~nZRzE0m4h~%6dm7;B--!Qnoi=#`1I(Bl_Bb_}l zLsdYeZ^sO`T8OVS5hJ*+oGV>LD9c*^hZeo+PDC*ID@h**7<&Ko5)A~#Mx5Be{36j| zA;4A#xLH71#FmC8n5sh0DOEU^ghs2rFmLLWCIN#seE?Uzu<Pn`=2<<4XwCgKF>Fdf zu4#oXCmwOhQ=meN=5l$37Sv-D{al{KhO?2`3@>44y*280TcF0N&kHRzSjeUc3wI-O zm&+_UFVZ*9U0RGbx%_6uUp;mkQAfdWst28x$A$g$!?A8uiP{r}A1e-wBl+i%Kd^my zK~0aUl7IpYIrn7>1n@ri+I1}KET(o#pS1yVH9CtFpj677a-+iP(!M0o?eoB9Ch9Fq zj?S*EWR2_BWJ>+5V_yU$^l*~I(?rU}f&@be;&DJeBAc!uYZyAr8nd54<YW?!s83Ju z5)rVwuD~i6-sj1J>=r>2%*AWtOP2#RBju+sUCr80$fg(<;vdg8j9cx*Q`^xm;WsVj zvQM<{BHeP#A&J@}px>qRznUkbazhV$lY64!-gjiGkH03YAg(0Ran_9vEy@vFPA*_c zFfS_>VG8~*7)zZ3g-c-pxF6s^Vey0S8yy`55|HQ=t4%uR`F#_1Cb^-5+Rm(oTACi7 zmU$X_pFRP|evAz4hX_KVLMkBqQ$I?83E%um;HL__1OZxpvSALaMx`7G$Q{}v=c{5i z@Yw)E70e|JK%*5ZpxMYKSfyXHi^v(7a1PIMv~Ayc;_}`YXdh2wPA-;~Vym~`EGm@B zrVel9T*U;vzOxiO(#51wV8g=fAO(?3LoGLz^HbOH=Z6AubuyUZqtTC#i6oBPNnDat z=#$X^IFs63>ce*jzRZz5uEjf#ZxaWf^z@Js!+;wcAn*1@(pqS$;wo~4#VP?co1M9N z{*<jL2ebq?<>v&hACfyl0HWEX1q(iGu2UEfhQ6)OCs^d@Jb1cDFviFk=|=FU=DM97 zc+n`T0F`5G2?mha<J;}b1S}|y;X<4~N?eq8C^je&CE#!Mx{gOK=CMhZFqZJU3>I$J z1lHQ$a6Y4f0Wh<+-KbJXm1P8)ZW_A9Dg3|&3XuTSp5H%V;{x&PfKLX<+NqcW#0^tB z05A*0V~R`wUMUD=T))f*6*`=j^F3V7Z-LK2@Rv3A&DA9ShCRA`qq-n<7%|;M%Eau* zslyrmFa=4wIVmDMCclxz+)Hb3kXhx}MDNpu^2d*w-zSj*Dxke12anwsuxSV^795eB zT6qTH=7{4bc8L@FeH`eB#(w=dl-<}qQ!}6*)ZFsR73RsF>4#I907%&zcbDF8E-BBL zR64nBA|%c97^wzW{D<YkqbqGBQKm2+QWYoA`z*D=9hd5blPhmSwuS9&^HxJ(DlH&B z0$@>Et|7a|zxV5Y%}yI~h<OJ}MRkph5#SzteA%gY>^<_v3@k!0Jel*^*7aC1;Nw_0 z3}Mpqz(v{4^1Q_8%iYzwDQURL5^=;V5Y}?f0UFGJTseXZhsvO*5K6F~XO30TfV}8n z8XAKsJsg&E*a{*aJQklKyavTJG8F<I@h;By1O|Uhwe2ae^{<Fs)W*?zalzm)H~|q6 zn{=k%JfOg-EO!rO!6F2Qzi?oA(C~FQOTB9}dhPF+U0JG6yY{6NzC2*`j7NT$aH;n# zYhOxc1O){jH@o3>W$Tv!k^s2t0NEt4lD!czVgN5bwUQ<5bs0ULBOXKnWQ0ma%N6*( zqkR%!PLlFD499{ULNM)(Bu<oWk7u9n%=!HDFXnxk>98JW`Kn}G=p`^hMjaA+tC~eM zOqFwa7(ZNs#h37Q>zgR~yP+#mI~*ho4i@^Tk8(!1lcDP#6yv>_W+n)qr~mUdWTMH5 zn}Q^>*t*|fIDU@<5gw~;DZ;2hCGqrTkOC{s_|mtF`>}u5zZJX)TQTRRQ`dt^kw|Pw zl#hd`QCnK{T{4B(I?_}Wb&9W{+GWa1tCHW*Gz(FqQpfKF+6V~nGskvzcJ8%^<K_Oy z+EKB{e2}5L?F5Zy<>UYcU4Q`}qJqa#odGWNYU2*6eCn_}7u}<x!QiJZMWRBpXusfh z=3L3-AKy#xtt2KY{_OjQBK;8Hy+Q60MiqLA2QMkTNO??fQX5$~fj}fwX#r9^g&j%2 zj_sq;iM$3WtEkvQKGO!^HJx175lbSkN3`2EZ|ZPRSQh>$(BJ@a#xm&trMNAXt$Y?@ zeX>HAU{u(`uEti3axV4hy1kSh?IvrVK;$Cs+E1HEx$w>oEXzugtl;mV(wB1^;bIQR z%%U!nMBHLF+=;y?)zN<Hp1e`Dp=6A`zTQ(VoLF33oSK?CTWO{g@eWpS70NQMPP1A9 zo-&In_^3HM*?ARp^@*`DgfK}U7;O66+LxfK?S4R<4}}VGDYW?$VwMl?QUy<1CCw0b zGzWibvI)q=<?pcGvVCB4WxzRFye%DxPp;TIghe!)DsT8nMgGLb4OD8&rl4aLbGn9T zqXJB!zX}-6rm)zeUYHl_pU|#<cAPm%CCR}J43?aFjvp{jH;l4f)OD|QouBuy>9Ehc zlT5#RPaVc$nin#_R|Bt%wjC<|_?@Nfy|cIXxbK|X#;XwVtQ80Ch)RN)2$<{89wqmK zmC*fXnq&zmkhs&^+iOtS)Y9^BI7OQ{7$yPmoJ(tKW0qXNKJPcj=KP-)f*xalk^aAU zH~WU3tH4gmkcf}_2M2@%1c2PC-e!W2pC8*9IoDgH>SpC@3fzx*&afUe8!?fhDI{iV zw;NX^w3<m6jmQJqe*!ufT*#F`C3Na#PY;*W;R{KXo{YcvbFgM-R)pZ0(O};|)Mqex z%s)9!r(;)VWRr%T6S3s;6I1eVo;lkj0P*Ccrcw6tLj`qk*B)%=#xRH44|GJ>vM$J% zU}>R$7(SSHmp8n5iZHwgAKf^biS!NE@u*1pRZ)g_A5Zj$w~C4BXgRD@keFHPDG07k zVF}OcPYlkPnPz0gsmPPW;^pA5!*V74oyiEh&b}!P*L?+SQ#VDLC_(+40@sI!3UFAm zACRd4JB4R^hcSCE2cU#{;HXl<3Rj>D1uqZ$@OE4d$-)R$QDb<U)JM)t5+jLp-Y}%X z^cI4AzWgJx6u}!xVX497K`!Z8vDXRn+fb0G0u!gVYSt<et>PVj{9GtYcc`Ld(8b=( zXUH&hFdbA06yGa=&ZG8I+qzW`Y}^?+r`?mgP8JKBG4HPi58HioMCEHu6!H3ATzj?o zf?stkW<R{*)ZEH~gM!)-4!u*h%-yGu{~wh<xjsdTl^g~qbtG@fz0U$jtK&LZJ4(Ce za^>vK*-bU=xv9P$2&YcwYBj`&p;eszTJ9_WD8ZvZOlczmz-Ys;ZVoZAgx|FWm4LWw z&y_m(QukMMRgysddm!=55=*VK>buvw;7PNjG!9$+f<)_E=+c!Ohv#7!eYg#cI*Kn( zJEF(Q?!}!nrObps?1rr#Ir--^68p$x0wT;XNVnY)p#&4-BpniSrH2T)k>M<xb8ELK z!bh=T8)aE!;bd}#m^oWe6D3b4B`l0N%g8j3!N^(FvIA?%=Rb2b+WARiQd}s2+*snu z+vLL60$i@ci$j}A+-H+y$%{G#ComaQY3AYURGCeDwYHUI(ZSBbGRXtv``b5W<iF=U z<%j#{{x}hxJt6kQk~x-tuf@bGDjI+C=r5KyxO4yH@)#3?BBN5jGz$Ve`dAV}1ppe) zLI5bEk`3!v01Y^BI%H@<s4>t-Lc*Ume@dE_a8qK~LWU0%`Naw>pbj@8Qb_i4^*YM; zi*5L>CF)Qt(hqiJRDya9SQU--nBJ~Q?dIFNg>pGU%EjeaesJ_Q1&yI|h<w6}<a@5L z^;yHeGB`Hcl}ci$^%btTHgAZH*xKh%<!BX!b-dZ+_hYw<l(Xl@I29tU=!TV}(LDvS zCb#U5ius!sj(uq5K$E}_Y~aNL0!x1DFwYAU0I%DBH<yH(if)2L9l!#{Q`r^d18MXt zXP*Cw5y#AHslt+k6)4GK=!66WB*@M$F4B~W{KcxfmA@4NL2OK4%1E^kxdy@8S>sZR zk+->Kwl)X53ak9l*|K`OaU$%q^hv@)R1K@zw}LHdvjYQj1r-7DZ3a(IB!b{Viy-9+ z0v2cmOkrLKwWzVL+-HcS4WS*vfSErm{ebDVjYgC~ymR4{0PnFMgHx=m`KM1Dyt02& z`=vnPMyL$iX;OjcRix%g13HT4lhfcGhIC(fn1=HD15*y~lljW~ji8|a2@%bToW6W% zS~-)-OHu$Q!F<fwNn#A8>NDr;+z{vGjZhXMOP~k_EbNH6Iu#x`5=3L`>&Emck{m~u z)0iNNiaT=9f#9dp-%X|!a8!g`hg&bO8!%V~MfvgF3GonW&%PV%YWC~zxk$v}@m}yo zIBWcKX%FZgLAjzG-gMUo>{>IDBq9op?^Tk%qjJ4RtQ9ifriqW2EUB*73^@~OaZknf zcag>g?}Ay)E9aL!YzRLgM-|QVxlf~WD*TwT)weD}`kiC>4{e>r(!<zF??qEsR(nPp z7*g%)D@2AN4h&?sTFS~I|NY`F1SAVKf)sG8sLOinGnwj_{0Srg&5}v#IJ;_A&ENmd zCDwuaey?P_*rSO5RRmwIG-U%aC4n(6B$qnOeW6ECSEhES0woykg-|DT%<j2H5r>(* zP6dh8CE7%wNSTrthOUhlYRS%Cg)boT<&V6Pa3z&tUHO+b6vWSp$yRb~z`c@Arx)Y} znoX6<eJd=GkIiQxh+F$2zrE>5h2<;+SSj#xFn0%e+~F5Of7*jIP?Y}P<_UvLanQw* zIg>+&MA#L=g)`>tgb@FNFHyB7pV7}k2sb;%ohn2@FDS2WpaqG)RSkBMAVoA}Dnz1& zKoDJg?OK^GEA_UC`dL*6uaR&V21b&Yozj%Ge)fL{pGj+D`_l%X2p0Mg^uMH{z)q8I zg@$apWm<M{1PQ<hC{Us{T%%8(s3`a30{IPju<$W%@7P~XslnBviC|?0>Lr*-I$-I0 zVV$&KcG>VALzQxvCgcamlL@J)e#2|vk^i3n(Go800_N2&-vp0}mEQySr_fC@k;<Ue zlN0{rp8$LUfNK}Ytx=s9)iZ}(ig+c7SzuTvp$iSP0_VN2$D`4w$g0KFCxB4*1bB@0 zBl5ED3rF?)4fEYSxuU{)a2;LuR>h>qvRRfHImCn*c8p{#s_%z;_mobjcXoDOzkc0n zwd{5~l4xsdYkPZJMjQ_!liG;iJM(;fy?f;czYly9)I^=CXQ)h;%AOiJKR=HMG@H!` zKSfcJ$>g=XF?GTQ7jmV;pc$t#|BYLPf}v30^F{ut3LqggCp;zSiA0F$q7MLQ!XPe1 zK*DJce;;7GJ7Cp&BJ*>gj*(RWy?_8fP=5e5n>_}x(t-vcwDSSPFq%nTMtW_~=AnbD z^xk`VM*N1>dxrsaq#jRT$k2VJhp?G-QYtYL!%UN`edPg^NF*E%N4wod;#e$}YPE_y z+T7g4<3N5)YD+c)e0bs^w&BiqUWCPESPnn{`BJ5-JJikwwIPDo8+z~Fy<4|#&CbqR zt=3AVg7m?#Ha0eNe_;b<IHHb*22cYU#|+|~&O(^W=fi~}U*P$l^Sl)4phqwIKnFkp zI>3o67mstfTwP5x%&NccYlDzM7JwRF?E-8ffIJ?B<CI-amNjbq7oGEX3?PYJV3`S0 zEq1V%q5Q@$vspzGd%%)`-AVl{@OTX1H*^k~=%=0Y`p_QEU`Rh<+m~gJEVJ^r*y#?| zF=5xS)Vrg#wY7Xc@ALU6imKP^>2!K`cXv=H8i3#ggFeyje~2v*nA>ps0Xzspc#@hd zQKe04vqiNEg!u&=Ge1ASyuAG2!Gp!cMW@q=(Y${B8lRU+B_xq9FKGZn2tt1Flb59G zX(}D1F77RtZmu+>I}GwVo&V#ZpXa9wg<v7LzrW83f+FCL0*0>J_n8Fa2S$$OIQl+E z)0`+$@i^3K=XGBz{<9WKo#SMr5887LKsDWh>8V`SSTau9_5196r&>+}sPmYW(AI1k zeadeRxj<w?br|%20lqVGz&|1GetLZW!x8-*b+*YlpJ8})3C+l9rob>Rg7vRFfKWTC zM)A-C5NPfBq_FH~U}g~(AHqXF<=>%pnp9Jv6dGs^Kz_e}W@ZNI^XSo|Kp>z&C!5WR zqNo>uz5(C319vbCD`l-x)op4UFV<jfIBx_%<4z~<bpChee|Y%tfANLNcRedlUxXu( zLL}1ADdvto1x^!v3js7oW7_DWc-$b0Wb;>g<48GdbDTDs0LaNHd5bJ#7DYYd=?UAl zS}m+p=m97Ou_iQ+$MgWS&uYbmlloJqs>fO?gI08i_opqL6QDnX+HH~`S;l0s63@Cw z?xGMafqwn$D=O2}#lKNNS-|1|M*sp?_A}H>l!`jcj!A6ps?27y)oOJ*ok*Xtv9a0N z*=RI6IXP*uSab<)7G@ED$e?9dc2JHYRdktM4XTla?9lC{$_rKAsoHHSN%3P;aV%0W zM2ZGsUDwP`emco19IbFih?V<`t2B)ma?tdL4AYLcyT!f_K*I;zG{=>LL6PIKT)<cp zS>**Mi;5!FYP!axNl~<Famq52o@4x^U8C(lx0T_YN}n{#%DY~5ESc1wROBEsR$vUk zJ#w)5Ye)cG2ZK~jn=qwvhzT*w1cMp;6@adk>5|_X(5OMJ3}porFXb&zg)wRj&7gfd z9MEXgYPE8?tSAai)4RL7#bU8qt=8*xU4rv~2MZ$z!3XeQnwm~fi7Hjyp?19B9S%T& z0PuW~=LMd3mcL&vJlZO{-QloMC<w*kL9qzQq;8q5Jm+4@Tvg^|VslE6Rz4sM`YBES z8ZE-F1N=)I^_O7!!#KyqI1cF(=Q1MqiHK4}Q5I{;F1*q$o;Rdc3mPjguznRbz`g+> z)nqf%9oWC?6^%YOs_HP4PB2K1ELSRo)0k3XEIZF)2BQ#dc3aJ_bgnJ~PzEw7NNvFu zP++5MC8}hhEQfH|%V{Q)Nu^SPAmFv#Zb$k=B9UY=nNFv53C;*c6PPHV>|n<je3Z{Y zIWQ6nST2}xSvRxUkUkw_m@l6G&eQZ0@$b9cKYsYndHxa7r%)hPE?*v$q3`fHN#Ybm zGrOYPmpMk}Xql$lG~IIVwTK?JKM3y-`m{uDU1UWOM3Ex^YRN57^eK&V)B_OO0?SSk z08PQv9_)d`q2h?Guxcp{44@7Cy9p^Lu1#;;^)DG=OU}yx|6YfXFio=TkYz>=G4qUu z^(5%m)4qzj3_!T?Heu5M2H7H0W@_I&{SoEehkZ0{Ks+9Ixm<XmD2l~msaC5yJ3E`3 zn~6k1m*A>UEkhZr0?X1vc?whk+JGb)P8xc`VLZl#`-1Q-A^IqqblV@fT;t2`Vlj;L zK@2^6rdMt`w04_|#gINNMQJF?1c4Fv@jncQlN6Q9W#{Mb{lWC~r-_94JECY+=>uZL zRUuR5H)~8^H5xqzG19jgp22pFMgXMJ2MxQp^owzA6b|oStE&Cr+G6i$<@oaFBe?l9 zfZrqMzXR~sMhyx3ZV&5OmhqC5zUu%gU2=C5GF|@jD|l6af_K(C;kf_D_FF%j#3C(} zPQ>~A`SU`d;Pd$?imKP^>2z8z`k-Wxw_)1@o&)N@YPOcCGUH+zhQ<LL4C*Qv>;Q=8 z^I2XHKoIJJuqBjSHgLIkx4RH_7Yb7dAbi7EOqcL~s2UM6dt(E;;}ijq5=^DGT`p&% z(KxIfCZdTQX-E7sF)qfl*{oivyINfUk!o3BStFrNY&=#|>C-~`C~SAg%>^}px&Zq5 z$e#W-z#ozGp99dN`jT<a$_$!xm-UiVPQetx`a7!=9RK2NtZ%w<1lfVM`Lf^t@zhkt z^Bl8zDxq;z*AX1T?j^izLNjGeQD&-YzVq9WQu$lu3RDL2<97Gx)3))Er*;)UAS9(E zY)#_NHn*F9=qmEAV$p~ILJaMVzGwaxz=x_WgB7eCa9ooM?gzOaadUHXNNTIqy1&1_ ze0O<!dz)r{L^IZSd|VU>tpGLwJ^}c&QySNj+=50ID`C(bc18sc%f{5Rg!bB@(FX?( zrh5R7yXGD_&b(SAnysFAu2#<I^wD%n%{YKEs-rHm89Bs+7{<ylz<enH^j7Et{Q&4_ zb{1x4UIhXvHZOT4Bs>y9`{~zC>@?%0PFg2+(LkFf2}%5ZQ&WKn_pklA)A_S}9;t-Z zzlX809(~Y+FJ?RRK_fqJZ4o}XT+=RB@qKrpu%rP9kFC~dsZ9Vd#5jfvx`PBj87?RW zxoOish(;ghqTl|`Utas4Yd@}3e!y`w{gS5f$kH^3Vo?+m?KaLA;ab(J7HNT*A*F(f zsb}es>HavV(>r&rE#8gZ0ksKR*PET8RIh`KB_gu~>ns~0IFCZK4)wPk*#%Mo^tR{& z9RM92b*y)dXYF^J4T8Ze$BA=u+cWEkgA}B?bKl3mVf3u?->0g^MwMZ5H2uWqOaJax z1~LP+loRxk<9wt?p9VC@&xeQP&gDW3@osm4cNL4Y2B6K&(NZe{&CrBCOpr5R29Z8A zCyGu{979`*j~jp2^h=X5`{`{(p*e+qPf;1fG0ZkiCy+sslo&07tJGzT7prBDWv5sa z&5}z3r6B?I7+cY=Uqi4z>zp@^A1!XdW3)de4Uio%6(>4mM2D<eWtovfOo-qd85D=O zp1ClYz-UBkHjUUOH5*dT^^I&e0AcveCNUHqdvAj;dF$4}(vlDkZv~~;OiTo^1f}lW z$6y8c=70-+rk(l)5aA%l!Q9-7>FFJIch|j({pF~O$18>3ze}H5n->JCL!UIHj|XKk zu(gE%8h5$)N3J68E)*sZK!~Bi%kNl}c<&a&-ADQ`9G6D=D4h7IGamm?6yZpOrC$Q9 z!Y2U1)RZhA$uf<`$@B+^p#ubvg-I0SiRyLtrY>d}X@Q=ieO}*`-!C~BX>B<Apb!So zVNe?e=@gggXUCWSu6u!B^;#tK4#O#z16ju0A;npVFdZ4BCxEP0u-jpBvSqbas}t2K z)M`+#kK!?|+K+XMa1f~g(x9VpM}v{3g@yL*+b?h3+FY6t_>C>tib3qeT(Z?P2K`0n z=0dHg1H1G={hKQz>o8_&3PPb&Fc{}%#ko(nVS5L5`g}LDxkn$E2@AjUM>P5fXSWvu z$mK%wx!wFD1ki1y4;o?!zwU5qG(Hf;AcOQ_4(Q^Gd!lF%#k?qfDvIAE)b@17DQKV8 z6vd$^_Y~!TQ?|LO^aqIqov6}PxG4a6B+2C@e@?esy&D=p2JK{QLwg0jGjf1G0T?^~ zm&dr$=>E?xr%D*f3nosMy|T>6j~JF=fu(^~$d}eb!62|Kc)b~qC-;hM(NYPHj`U8% zO{ohY&3f0Wnik8t)4A^Ry>zd>ntT<3$RQk_bx}pMRAJ>R0+C^ZYH|{mmy1hF5uV=) zZpHjD>?Ael7YRN3@O(nxg$wC}YPSi4+-|h6+g;#Y#bQ7M(CX^YxkZZDSyp5`A|nzD zilV2(Gd#9Bqj2jOz$%JIijq>41TikbB@)2|&;Wk~*DH(%+qEoDN|MtNayp$3r&CHe z)n~)OcSX%7IsX=bd*lFrtK;#k$cF1M=>J{S0Q-sB(4!CPM<aQ|+^PI#r9C#pG7g3T zW>5g(X#D=zeMt|l*NK@-q)pDx<A!d{&nL=(R0<RYGMSOH{PuJqfEobnin6h_wT>8q z^_TE+@9y54&4_G_s&@J=w!BN%`R;}L=rYaBRBqjRxxBo&RDHep8rdO&*yq%_xgLEA zMP7&)A{u>)P&|J^F4tj@%f-7~Mc!Q~SP(#np+sW1++uECiin;A6+pQh-FYqpm;v^W z2dWHe*J_DZuM)CMOvyHtCU7u{4*MLZmI~I4^PhzrPaXf*WcpZcYR`t!ibkIsli`Tu z@9}6W68;?N7ZX;Hif{%^3bGEC1vUn;GL-xG@e6?2si~Rw-lLb6pjw54127uFZU>gF zhr_R#rO2u)7K80=Kn#6(r2^>i5E>2gk|?~uTYyy+K<lfk>(E93?ZPhk^)8%X&`R~1 zcUlQ!P;H~Rv02-EJ@LBFiB4yaK1WVoc<K@~`fS7YWz(Wj(qUXKr`ydxau@i!NFOu} zLxby608y6XqP)uhp#5g&`2j$(bD2FJjR60z0Ev7aEvcxOl1Iv3zn^Arufrfoa{g7P z^l?>^R`3oV4<+0za3fOR52>+263dR}>o;}Z$!b0)B#DtjOo(Aj3<J!d07{z8vy+pv z;V|uXTMrKnMq|TfD|)?BZ7%+def0`9H%ZfMxAji#4N3)2CIdS=@cHLpFc6$(Nm;zm zihp-^9a;(~$1{!@^z7MnMwZ9bcXrlaz1lFD*5Ks^Y*g=7!P(c`E`891^?4xz5e-0B z&&2QPcB9R?Tm{}$EY2c*(4IaW;tf7Q00Fc_l|D@8;eS5f>e&;!9v}ZcB%ou2_KIpF zXn>090O&bLc>PMd8(OQX{Q$08D;j;?QI$#{%V?}5u@cM9vMjJsh_<0$S|EUCC~9Y7 zV!K9pZQnGT#|;MKLB&#*?CCTllVqzRgYf!GEfql3Dtz$;$rnmdV1FOaf3r7aS0VNA zzt5ZfbJhOEwM2%Sc)e0tUt1#_gbm~Xd5ZYEj6sL^9}f5ElS_sL4LxXes9(Kmu}D6w z%Z0|f-9_GAC{XweP3Qw(Zz`&t3Mz-X`8$t3UHt*T{T_B&JqJT-Kma9G1I<PO&`qhY zhVnM0g4`v`j2vRd83q_+Pzq9~haGe;R>&v&E8V*%0JH6hoh^#pr(CWHvzfH8!$YW4 zAe$w=MUk||FS|^gb3RY(UD6A}9at}w*4I|cP(J?QG6t>qd_DR=g9pLdp^wt7>#Kzy z76IgTTiot2*DUa$0SG^KCNt!_Y<A8I9W0zjAM#@i68a_ZN&iDzEs&n{=tHcfUmVw_ zh-&}wZHIB8u%n|TlkAHZY}AkRK?a=zpx#cfgS~uwhhIPxsbrG!`zIU@ilWFv1W>gK zxg3<sZ~N_ZlF9J4Be+O^uXj}{!^c4EDosqRXy|G3@CgsVB6XAqL<a7aTU!Vquv%GB zL^nl%LYM#uF?4V+$~(nQozLp6H331jKYd%ve?=9Ig4xXEatuW=WIwWQaOY2b<SueP zKW9GGYE4KIB}o%+`%SJ(rnen{p5plx;NdAULo<L1RFFPLa5R{sN(I)}Ntc<J=m1DP z7J1m%&>_yxRQvwhPS>w=?UH5OOJngkJ3h_=AcGk2p9`SR&!4aDlz;uUU*j6}l>*QP z{{(vUF^=XdlOd+M33ma6M?LuSD}9}W&8$*U(F3e%uTBm41+2gA7~i7)Kce`s5Z4J# Qv;Y7A07*qoM6N<$f^#K*Pyhe` literal 0 HcmV?d00001 diff --git a/book/src/chapter_1.md b/book/src/chapter_1.md index 9ced789..419a831 100644 --- a/book/src/chapter_1.md +++ b/book/src/chapter_1.md @@ -69,13 +69,7 @@ fn startup( commands.spawn(UICameraBundle::new()); let mut widget_context = KayakRootContext::new(); - let pre_existing_app_entity = widget_context.get_child_at(None); - let app_entity = if let Some(entity) = pre_existing_app_entity { - commands.get_or_spawn(entity).id() - } else { - commands.spawn_empty().id() - }; - + let app_entity = widget_context.spawn_widget(&mut commands, None); // Create default app bundle let mut app_bundle = KayakAppBundle { ..Default::default() @@ -85,12 +79,7 @@ fn startup( let mut children = KChildren::new(); // Create the text child - let pre_existing_text_entity = widget_context.get_child_at(Some(app_entity)); - let text_entity = if let Some(entity) = pre_existing_text_entity { - commands.get_or_spawn(entity).id() - } else { - commands.spawn_empty().id() - }; + let text_entity = widget_context.spawn_widget(&mut commands, Some(app_entity)); commands.entity(text_entity).insert(TextWidgetBundle { text: TextProps { content: "Hello World".into(), @@ -113,10 +102,11 @@ fn startup( } fn main() { App::new() - .add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest())) + .add_plugins(DefaultPlugins) .add_plugin(KayakContextPlugin) .add_plugin(KayakWidgets) .add_startup_system(startup) .run() } + ``` diff --git a/examples/bevy_scene.rs b/examples/bevy_scene.rs index 68a6568..dc9f966 100644 --- a/examples/bevy_scene.rs +++ b/examples/bevy_scene.rs @@ -227,29 +227,28 @@ fn startup( text={TextProps { size: 13.0, content: "You can check if the cursor is over the UI or on a focusable widget using the BevyContext resource.".to_string(), + user_styles: text_styles.clone(), ..Default::default() }} - styles={text_styles.clone()} /> <KButtonBundle + button={KButton { + text: "Change Tile Color".into(), + ..Default::default() + }} on_event={handle_change_color} styles={button_styles} - > - <TextWidgetBundle - text={TextProps { - size: 16.0, - content: "Change Tile Color".to_string(), - ..Default::default() - }} - /> - </KButtonBundle> + /> <TextWidgetBundle text={TextProps { size: 11.0, content: "Go ahead and click the button! The tile won't move.".to_string(), + user_styles: KStyle { + top: Units::Pixels(10.0).into(), + ..text_styles + }, ..Default::default() }} - styles={text_styles} /> </WindowBundle> </KayakAppBundle> diff --git a/examples/conditional_widget.rs b/examples/conditional_widget.rs new file mode 100644 index 0000000..a6de4d6 --- /dev/null +++ b/examples/conditional_widget.rs @@ -0,0 +1,143 @@ +use bevy::prelude::*; +use kayak_ui::prelude::{widgets::*, *}; + +#[derive(Component, Default, PartialEq, Clone)] +struct MyWidget; + +impl Widget for MyWidget {} + +#[derive(Component, Default, PartialEq, Clone)] +struct MyWidgetState { + pub show_window: bool, +} + +#[derive(Bundle)] +struct MyWidgetBundle { + count: MyWidget, + styles: KStyle, + widget_name: WidgetName, +} + +impl Default for MyWidgetBundle { + fn default() -> Self { + Self { + count: MyWidget::default(), + styles: KStyle::default(), + widget_name: MyWidget::default().get_name(), + } + } +} + +fn my_widget_render( + In((widget_context, entity)): In<(KayakWidgetContext, Entity)>, + mut commands: Commands, + query: Query<&MyWidgetState>, +) -> bool { + let state_entity = widget_context.use_state(&mut commands, entity, MyWidgetState::default()); + if let Ok(state) = query.get(state_entity) { + let parent_id = Some(entity); + rsx! { + <ElementBundle> + <KButtonBundle + button={KButton { + text: "Show Window".into(), + user_styles: KStyle { + left: Units::Stretch(1.0).into(), + right: Units::Stretch(1.0).into(), + ..Default::default() + } + }} + on_event={OnEvent::new( + move |In((event_dispatcher_context, _, mut event, _entity)): In<(EventDispatcherContext, WidgetState, Event, Entity)>, + mut query: Query<&mut MyWidgetState>| { + event.prevent_default(); + event.stop_propagation(); + match event.event_type { + EventType::Click(..) => { + if let Ok(mut state) = query.get_mut(state_entity) { + state.show_window = true; + } + } + _ => {} + } + (event_dispatcher_context, event) + }, + )} + /> + {if state.show_window { + constructor! { + <WindowBundle + window={KWindow { + title: "Conditional widget rendering!".into(), + draggable: true, + initial_position: Vec2::new(10.0, 10.0), + size: Vec2::new(300.0, 250.0), + ..KWindow::default() + }} + > + <KButtonBundle + button={KButton { text: "Hide Window".into(), ..Default::default() }} + on_event={OnEvent::new( + move |In((event_dispatcher_context, _, mut event, _entity)): In<(EventDispatcherContext, WidgetState, Event, Entity)>, + mut query: Query<&mut MyWidgetState>| { + match event.event_type { + EventType::Click(..) => { + event.prevent_default(); + event.stop_propagation(); + if let Ok(mut state) = query.get_mut(state_entity) { + state.show_window = false; + } + } + _ => {} + } + (event_dispatcher_context, event) + }, + )} + /> + </WindowBundle> + } + }} + </ElementBundle> + } + } + + true +} + +fn startup( + mut commands: Commands, + mut font_mapping: ResMut<FontMapping>, + asset_server: Res<AssetServer>, +) { + font_mapping.set_default(asset_server.load("lato-light.kayak_font")); + + // Camera 2D forces a clear pass in bevy. + // We do this because our scene is not rendering anything else. + commands.spawn(Camera2dBundle::default()); + commands.spawn(UICameraBundle::new()); + + let mut widget_context = KayakRootContext::new(); + let parent_id = None; + widget_context.add_widget_data::<MyWidget, MyWidgetState>(); + widget_context.add_widget_system( + MyWidget::default().get_name(), + widget_update::<MyWidget, MyWidgetState>, + my_widget_render, + ); + rsx! { + <KayakAppBundle> + <MyWidgetBundle /> + </KayakAppBundle> + } + commands.insert_resource(widget_context); +} + +fn main() { + App::new() + .insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0))) + .add_plugins(DefaultPlugins) + .add_plugin(KayakContextPlugin) + .add_plugin(KayakWidgets) + .add_startup_system(startup) + .run() +} diff --git a/examples/context.rs b/examples/context.rs index 5630b1f..bc128df 100644 --- a/examples/context.rs +++ b/examples/context.rs @@ -255,18 +255,17 @@ fn update_theme_demo( }; let parent_id = Some(entity); - let mut children = kayak_ui::prelude::KChildren::new(); rsx! { - <> + <ElementBundle> <TextWidgetBundle text={TextProps { content: select_lbl, size: 14.0, line_height: Some(28.0), - ..Default::default() - }} - styles={KStyle { - height: StyleProp::Value(Units::Pixels(28.0)), + user_styles: KStyle { + height: StyleProp::Value(Units::Pixels(28.0)), + ..Default::default() + }, ..Default::default() }} /> @@ -284,21 +283,14 @@ fn update_theme_demo( text={TextProps { content: "Lorem ipsum dolor...".into(), size: 12.0, + user_styles: text_styles.clone(), ..Default::default() }} - styles={text_styles.clone()} /> <KButtonBundle + button={KButton { text: "BUTTON".into(), ..Default::default() }} styles={btn_style.clone()} - > - <TextWidgetBundle - text={TextProps { - content: "BUTTON".into(), - size: 14.0, - ..Default::default() - }} - /> - </KButtonBundle> + /> { if theme_demo.is_root { widget_context.set_context_entity::<Theme>( @@ -321,10 +313,8 @@ fn update_theme_demo( } } </BackgroundBundle> - </> + </ElementBundle> } - - children.process(&widget_context, parent_id); } } } diff --git a/examples/hello_world_no_macro.rs b/examples/hello_world_no_macro.rs index 02192bd..647e31d 100644 --- a/examples/hello_world_no_macro.rs +++ b/examples/hello_world_no_macro.rs @@ -9,13 +9,7 @@ fn startup( commands.spawn(UICameraBundle::new()); let mut widget_context = KayakRootContext::new(); - let pre_existing_app_entity = widget_context.get_child_at(None); - let app_entity = if let Some(entity) = pre_existing_app_entity { - commands.get_or_spawn(entity).id() - } else { - commands.spawn_empty().id() - }; - + let app_entity = widget_context.spawn_widget(&mut commands, None); // Create default app bundle let mut app_bundle = KayakAppBundle { ..Default::default() @@ -25,12 +19,7 @@ fn startup( let mut children = KChildren::new(); // Create the text child - let pre_existing_text_entity = widget_context.get_child_at(Some(app_entity)); - let text_entity = if let Some(entity) = pre_existing_text_entity { - commands.get_or_spawn(entity).id() - } else { - commands.spawn_empty().id() - }; + let text_entity = widget_context.spawn_widget(&mut commands, Some(app_entity)); commands.entity(text_entity).insert(TextWidgetBundle { text: TextProps { content: "Hello World".into(), diff --git a/examples/quads.rs b/examples/quads.rs index 514c9a9..5e65231 100644 --- a/examples/quads.rs +++ b/examples/quads.rs @@ -9,6 +9,7 @@ pub struct MyQuad { pos: Vec2, pub size: Vec2, pub color: Color, + pub z_index: i32, } fn my_quad_update( @@ -24,16 +25,19 @@ fn my_quad_update( style.width = StyleProp::Value(Units::Pixels(quad.size.x)); style.height = StyleProp::Value(Units::Pixels(quad.size.y)); style.background_color = StyleProp::Value(quad.color); + style.z_index = StyleProp::Value(quad.z_index); } *on_event = OnEvent::new( - move |In((event_dispatcher_context, _, event, entity)): In<( + move |In((event_dispatcher_context, _, mut event, entity)): In<( EventDispatcherContext, WidgetState, Event, Entity, )>, mut query: Query<(&mut KStyle, &MyQuad)>| { + event.prevent_default(); + event.stop_propagation(); match event.event_type { EventType::MouseIn(..) => { if let Ok((mut styles, _)) = query.get_mut(entity) { @@ -99,7 +103,7 @@ fn startup( rsx! { <KayakAppBundle> { - (0..1000).for_each(|_| { + (0..1000i32).for_each(|i| { let pos = Vec2::new(fastrand::i32(0..1280) as f32, fastrand::i32(0..720) as f32); let size = Vec2::new( fastrand::i32(32..64) as f32, @@ -113,7 +117,7 @@ fn startup( ); constructor! { <MyQuadBundle - my_quad={MyQuad { pos, size, color }} + my_quad={MyQuad { pos, size, color, z_index: i }} /> } }); diff --git a/examples/scrolling.rs b/examples/scrolling.rs index 6c87b1b..baef12e 100644 --- a/examples/scrolling.rs +++ b/examples/scrolling.rs @@ -1,5 +1,5 @@ use bevy::prelude::*; -use kayak_ui::prelude::{widgets::*, KStyle, *}; +use kayak_ui::prelude::{widgets::*, *}; fn startup( mut commands: Commands, @@ -8,21 +8,14 @@ fn startup( ) { font_mapping.set_default(asset_server.load("roboto.kayak_font")); + // Camera 2D forces a clear pass in bevy. + // We do this because our scene is not rendering anything else. + commands.spawn(Camera2dBundle::default()); commands.spawn(UICameraBundle::new()); - let image = asset_server.load("kenny/panel_brown.png"); - let mut widget_context = KayakRootContext::new(); let parent_id = None; - let nine_patch_styles = KStyle { - width: StyleProp::Value(Units::Pixels(512.0)), - height: StyleProp::Value(Units::Pixels(512.0)), - offset: StyleProp::Value(Edge::all(Units::Stretch(1.0))), - padding: StyleProp::Value(Edge::all(Units::Pixels(25.0))), - ..KStyle::default() - }; - let lorem_ipsum = r#" Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sed tellus neque. Proin tempus ligula a mi molestie aliquam. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam venenatis consequat ultricies. Sed ac orci purus. Nullam velit nisl, dapibus vel mauris id, dignissim elementum sapien. Vestibulum faucibus sapien ut erat bibendum, id lobortis nisi luctus. Mauris feugiat at lectus at pretium. Pellentesque vitae finibus ante. Nulla non ex neque. Cras varius, lorem facilisis consequat blandit, lorem mauris mollis massa, eget consectetur magna sem vel enim. Nam aliquam risus pulvinar, volutpat leo eget, eleifend urna. Suspendisse in magna sed ligula vehicula volutpat non vitae augue. Phasellus aliquam viverra consequat. Nam rhoncus molestie purus, sed laoreet neque imperdiet eget. Sed egestas metus eget sodales congue. @@ -37,12 +30,14 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sed tellus neque. rsx! { <KayakAppBundle> - <NinePatchBundle - nine_patch={NinePatch { - handle: image.clone(), - border: Edge::all(30.0), + <WindowBundle + window={KWindow { + title: "Simple scrolling example".into(), + draggable: true, + initial_position: Vec2::new(10.0, 10.0), + size: Vec2::new(512.0, 512.0), + ..KWindow::default() }} - styles={nine_patch_styles} > <ScrollContextProviderBundle> <ScrollBoxBundle> @@ -55,7 +50,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sed tellus neque. /> </ScrollBoxBundle> </ScrollContextProviderBundle> - </NinePatchBundle> + </WindowBundle> </KayakAppBundle> } commands.insert_resource(widget_context); @@ -63,6 +58,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sed tellus neque. fn main() { App::new() + .insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0))) .add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest())) .add_plugin(KayakContextPlugin) .add_plugin(KayakWidgets) diff --git a/examples/simple_state.rs b/examples/simple_state.rs index eee326a..e55f5b2 100644 --- a/examples/simple_state.rs +++ b/examples/simple_state.rs @@ -38,22 +38,44 @@ fn current_count_render( if let Ok(current_count) = query.get(state_entity) { let parent_id = Some(entity); rsx! { - <TextWidgetBundle - text={ - TextProps { - content: format!("Current Count: {}", current_count.foo).into(), - size: 16.0, - line_height: Some(40.0), - ..Default::default() + <ElementBundle> + <TextWidgetBundle + text={ + TextProps { + content: format!("Current Count: {}", current_count.foo).into(), + size: 16.0, + line_height: Some(40.0), + ..Default::default() + } } - } - /> + /> + <KButtonBundle + button={KButton { + text: "Click me!".into(), + ..Default::default() + }} + on_event={OnEvent::new( + move |In((event_dispatcher_context, _, mut event, _entity)): In<(EventDispatcherContext, WidgetState, Event, Entity)>, + mut query: Query<&mut CurrentCountState>| { + match event.event_type { + EventType::Click(..) => { + event.prevent_default(); + event.stop_propagation(); + if let Ok(mut current_count) = query.get_mut(state_entity) { + current_count.foo += 1; + } + } + _ => {} + } + (event_dispatcher_context, event) + }, + )} + /> + </ElementBundle> } - - return true; } - false + true } fn startup( @@ -61,7 +83,7 @@ fn startup( mut font_mapping: ResMut<FontMapping>, asset_server: Res<AssetServer>, ) { - font_mapping.set_default(asset_server.load("roboto.kayak_font")); + font_mapping.set_default(asset_server.load("lato-light.kayak_font")); // Camera 2D forces a clear pass in bevy. // We do this because our scene is not rendering anything else. @@ -78,44 +100,30 @@ fn startup( ); rsx! { <KayakAppBundle> - <WindowBundle - window={KWindow { - title: "State Example Window".into(), - draggable: true, - initial_position: Vec2::new(10.0, 10.0), - size: Vec2::new(300.0, 250.0), - ..KWindow::default() - }} - > - <CurrentCountBundle id={"current_count_entity"} /> - <KButtonBundle - on_event={OnEvent::new( - move |In((event_dispatcher_context, widget_state, event, _entity)): In<(EventDispatcherContext, WidgetState, Event, Entity)>, - mut query: Query<&mut CurrentCountState>| { - match event.event_type { - EventType::Click(..) => { - if let Some(state_entity) = widget_state.get(current_count_entity) { - if let Ok(mut current_count) = query.get_mut(state_entity) { - current_count.foo += 1; - } - } - } - _ => {} - } - (event_dispatcher_context, event) - }, - )} + <WindowContextProviderBundle> + <WindowBundle + window={KWindow { + title: "State Example Window".into(), + draggable: true, + initial_position: Vec2::new(10.0, 10.0), + size: Vec2::new(300.0, 250.0), + ..KWindow::default() + }} > - <TextWidgetBundle - text={TextProps { - content: "Click me!".into(), - size: 16.0, - alignment: Alignment::Start, - ..Default::default() - }} - /> - </KButtonBundle> - </WindowBundle> + <CurrentCountBundle /> + </WindowBundle> + <WindowBundle + window={KWindow { + title: "State Example Window".into(), + draggable: true, + initial_position: Vec2::new(500.0, 10.0), + size: Vec2::new(300.0, 250.0), + ..KWindow::default() + }} + > + <CurrentCountBundle /> + </WindowBundle> + </WindowContextProviderBundle> </KayakAppBundle> } commands.insert_resource(widget_context); diff --git a/examples/tabs/tab.rs b/examples/tabs/tab.rs index 4088274..1260842 100644 --- a/examples/tabs/tab.rs +++ b/examples/tabs/tab.rs @@ -16,7 +16,6 @@ impl Widget for Tab {} #[derive(Bundle)] pub struct TabBundle { pub tab: Tab, - pub styles: KStyle, pub children: KChildren, pub widget_name: WidgetName, } @@ -26,11 +25,6 @@ impl Default for TabBundle { Self { tab: Default::default(), children: Default::default(), - styles: KStyle { - height: Units::Auto.into(), - top: Units::Pixels(0.0).into(), - ..Default::default() - }, widget_name: Tab::default().get_name(), } } @@ -51,7 +45,7 @@ pub fn tab_render( let styles = KStyle { background_color: StyleProp::Value(Color::rgba(0.0781, 0.0898, 0.101, 1.0)), padding: StyleProp::Value(Edge::all(Units::Pixels(15.0))), - height: Units::Pixels(100.0).into(), + height: Units::Stretch(1.0).into(), width: Units::Stretch(1.0).into(), ..Default::default() }; diff --git a/examples/tabs/tab_button.rs b/examples/tabs/tab_button.rs index 1e10a41..6099a8f 100644 --- a/examples/tabs/tab_button.rs +++ b/examples/tabs/tab_button.rs @@ -1,9 +1,10 @@ use bevy::prelude::{Bundle, Color, Commands, Component, Entity, In, Query}; -use kayak_ui::prelude::{ - rsx, - widgets::{KButtonBundle, TextProps, TextWidgetBundle}, - Event, EventDispatcherContext, EventType, KChildren, KStyle, KayakWidgetContext, OnEvent, - StyleProp, Units, Widget, WidgetName, WidgetState, +use kayak_ui::{ + prelude::{ + rsx, widgets::KButtonBundle, Corner, Event, EventDispatcherContext, EventType, KStyle, + KayakWidgetContext, OnEvent, StyleProp, Units, Widget, WidgetName, WidgetState, + }, + widgets::KButton, }; use crate::tab_context::TabContext; @@ -74,14 +75,18 @@ pub fn tab_button_render( rsx! { <KButtonBundle - on_event={on_event} - styles={KStyle { - background_color: StyleProp::Value(background_color), - height: StyleProp::Value(Units::Pixels(25.0)), + button={KButton { + text: tab_button.title.clone(), + user_styles: KStyle { + background_color: StyleProp::Value(background_color), + border_radius: Corner::all(0.0).into(), + height: StyleProp::Value(Units::Pixels(25.0)), + ..Default::default() + }, ..Default::default() - }}> - <TextWidgetBundle text={TextProps { content: tab_button.title.clone(), size: 16.0, line_height: Some(16.0), ..Default::default() }} /> - </KButtonBundle> + }} + on_event={on_event} + /> } } } diff --git a/examples/tabs/tabs.rs b/examples/tabs/tabs.rs index 416f0a9..8df527c 100644 --- a/examples/tabs/tabs.rs +++ b/examples/tabs/tabs.rs @@ -17,6 +17,9 @@ fn startup( ) { font_mapping.set_default(asset_server.load("roboto.kayak_font")); + // Camera 2D forces a clear pass in bevy. + // We do this because our scene is not rendering anything else. + commands.spawn(Camera2dBundle::default()); commands.spawn(UICameraBundle::new()); let mut widget_context = KayakRootContext::new(); @@ -89,6 +92,7 @@ fn startup( fn main() { App::new() + .insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0))) .add_plugins(DefaultPlugins) .add_plugin(KayakContextPlugin) .add_plugin(KayakWidgets) diff --git a/examples/text_box.rs b/examples/text_box.rs index 723f96e..812b046 100644 --- a/examples/text_box.rs +++ b/examples/text_box.rs @@ -124,6 +124,7 @@ fn startup( fn main() { App::new() + .insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0))) .add_plugins(DefaultPlugins) .add_plugin(KayakContextPlugin) .add_plugin(KayakWidgets) diff --git a/examples/todo/input.rs b/examples/todo/input.rs index 487632b..6e6b156 100644 --- a/examples/todo/input.rs +++ b/examples/todo/input.rs @@ -4,9 +4,7 @@ use kayak_ui::prelude::{widgets::*, *}; use crate::TodoList; #[derive(Component, Default, Clone, PartialEq)] -pub struct TodoInputProps { - has_focus: bool, -} +pub struct TodoInputProps; impl Widget for TodoInputProps {} @@ -39,120 +37,78 @@ impl Default for TodoInputBundle { pub fn render_todo_input( In((widget_context, entity)): In<(KayakWidgetContext, Entity)>, mut commands: Commands, - mut todo_list: ResMut<TodoList>, - keyboard_input: Res<Input<KeyCode>>, - change_query: Query<Entity, (With<TodoInputProps>, With<Mounted>)>, - prop_query: Query<&TodoInputProps>, + todo_list: Res<TodoList>, ) -> bool { - if todo_list.is_changed() || !change_query.is_empty() { - if let Ok(props) = prop_query.get(entity) { - let on_change = OnChange::new( - move |In((_widget_context, _, value)): In<(KayakWidgetContext, Entity, String)>, - mut todo_list: ResMut<TodoList>| { - todo_list.new_item = value; - }, - ); + let on_change = OnChange::new( + move |In((_widget_context, _, value)): In<(KayakWidgetContext, Entity, String)>, + mut todo_list: ResMut<TodoList>| { + todo_list.new_item = value; + }, + ); - if keyboard_input.just_pressed(KeyCode::Return) { - if props.has_focus { - let value = todo_list.new_item.clone(); - todo_list.items.push(value); - todo_list.new_item.clear(); + let handle_click = OnEvent::new( + move |In((event_dispatcher_context, _, event, _)): In<( + EventDispatcherContext, + WidgetState, + Event, + Entity, + )>, + mut todo_list: ResMut<TodoList>| { + match event.event_type { + EventType::Click(..) => { + if !todo_list.new_item.is_empty() { + let value = todo_list.new_item.clone(); + todo_list.items.push(value); + todo_list.new_item.clear(); + } } + _ => {} } + (event_dispatcher_context, event) + }, + ); - let handle_click = OnEvent::new( - move |In((event_dispatcher_context, _, event, _)): In<( - EventDispatcherContext, - WidgetState, - Event, - Entity, - )>, - mut todo_list: ResMut<TodoList>| { - match event.event_type { - EventType::Click(..) => { - let value = todo_list.new_item.clone(); - todo_list.items.push(value); - todo_list.new_item.clear(); - } - _ => {} - } - (event_dispatcher_context, event) - }, - ); - - let handle_focus = OnEvent::new( - move |In((event_dispatcher_context, _, event, _)): In<( - EventDispatcherContext, - WidgetState, - Event, - Entity, - )>, - mut props_query: Query<&mut TodoInputProps>| { - if let Ok(mut props) = props_query.get_mut(entity) { - match event.event_type { - EventType::Focus => { - props.has_focus = true; - } - EventType::Blur => { - props.has_focus = false; - } - _ => {} - } - } - (event_dispatcher_context, event) - }, - ); - - let parent_id = Some(entity); - rsx! { - <ElementBundle - id={"element_bundle"} - styles={KStyle { - layout_type: StyleProp::Value(LayoutType::Row), + let parent_id = Some(entity); + rsx! { + <ElementBundle + id={"element_bundle"} + styles={KStyle { + layout_type: StyleProp::Value(LayoutType::Row), + height: StyleProp::Value(Units::Pixels(32.0)), + cursor: StyleProp::Value(KCursorIcon(CursorIcon::Text)), + ..Default::default() + }} + > + { + // You can spawn whatever you want on UI widgets this way! :) + commands.entity(element_bundle).insert(Focusable); + } + <TextBoxBundle + styles={KStyle { + bottom: StyleProp::Value(Units::Stretch(1.0)), + top: StyleProp::Value(Units::Stretch(1.0)), + ..Default::default() + }} + text_box={TextBoxProps { + value: todo_list.new_item.clone(), + placeholder: Some("Add item here..".into()), + ..Default::default() + }} + on_change={on_change} + /> + <KButtonBundle + button={KButton { + text: "+".into(), + user_styles: KStyle { + width: StyleProp::Value(Units::Pixels(32.0)), height: StyleProp::Value(Units::Pixels(32.0)), - cursor: StyleProp::Value(KCursorIcon(CursorIcon::Text)), + left: StyleProp::Value(Units::Pixels(5.0)), ..Default::default() - }} - on_event={handle_focus} - > - { - // You can spawn whatever you want on UI widgets this way! :) - commands.entity(element_bundle).insert(Focusable); } - <TextBoxBundle - styles={KStyle { - bottom: StyleProp::Value(Units::Stretch(1.0)), - top: StyleProp::Value(Units::Stretch(1.0)), - ..Default::default() - }} - text_box={TextBoxProps { - value: todo_list.new_item.clone(), - placeholder: Some("Add item here..".into()), - ..Default::default() - }} - on_change={on_change} - /> - <KButtonBundle - styles={KStyle { - width: StyleProp::Value(Units::Pixels(32.0)), - height: StyleProp::Value(Units::Pixels(32.0)), - left: StyleProp::Value(Units::Pixels(5.0)), - ..Default::default() - }} - on_event={handle_click} - > - <TextWidgetBundle - text={TextProps { - content: "+".into(), - ..Default::default() - }} - /> - </KButtonBundle> - </ElementBundle> - } - return true; - } + }} + on_event={handle_click} + /> + </ElementBundle> } - false + true } diff --git a/examples/todo/items.rs b/examples/todo/items.rs index 789589c..2956999 100644 --- a/examples/todo/items.rs +++ b/examples/todo/items.rs @@ -65,7 +65,7 @@ pub fn render_todo_items( <ElementBundle styles={KStyle { render_command: StyleProp::Value(RenderCommand::Quad), - background_color: StyleProp::Value(Color::rgba(0.0781, 0.0898, 0.101, 1.0)), + background_color: Color::rgba(0.160, 0.172, 0.235, 1.0).into(), border_radius: StyleProp::Value(Corner::all(3.0)), bottom: StyleProp::Value(Units::Pixels(5.0)), height: StyleProp::Value(Units::Auto), @@ -77,29 +77,27 @@ pub fn render_todo_items( <TextWidgetBundle text={TextProps { content: content.clone(), - ..Default::default() - }} - styles={KStyle { - right: StyleProp::Value(Units::Stretch(1.0)), - top: StyleProp::Value(Units::Stretch(1.0)), - bottom: StyleProp::Value(Units::Stretch(1.0)), + user_styles: KStyle { + right: StyleProp::Value(Units::Stretch(1.0)), + top: StyleProp::Value(Units::Stretch(1.0)), + bottom: StyleProp::Value(Units::Stretch(1.0)), + ..Default::default() + }, ..Default::default() }} /> <KButtonBundle - styles={KStyle { - width: StyleProp::Value(Units::Pixels(32.0)), - height: StyleProp::Value(Units::Pixels(32.0)), - left: StyleProp::Value(Units::Pixels(15.0)), - ..Default::default() + button={KButton { + text: "X".into(), + user_styles: KStyle { + width: StyleProp::Value(Units::Pixels(32.0)), + height: StyleProp::Value(Units::Pixels(32.0)), + left: StyleProp::Value(Units::Pixels(15.0)), + ..Default::default() + } }} on_event={handle_click} - > - <TextWidgetBundle text={TextProps { - content: "X".into(), - ..Default::default() - }} /> - </KButtonBundle> + /> </ElementBundle> } })} diff --git a/examples/todo/todo.rs b/examples/todo/todo.rs index 25481cf..3da0b59 100644 --- a/examples/todo/todo.rs +++ b/examples/todo/todo.rs @@ -48,6 +48,9 @@ fn startup( ) { font_mapping.set_default(asset_server.load("roboto.kayak_font")); + // Camera 2D forces a clear pass in bevy. + // We do this because our scene is not rendering anything else. + commands.spawn(Camera2dBundle::default()); commands.spawn(UICameraBundle::new()); let mut widget_context = KayakRootContext::new(); @@ -93,6 +96,7 @@ fn startup( fn main() { App::new() + .insert_resource(ClearColor(Color::rgb(0.0, 0.0, 0.0))) .add_plugins(DefaultPlugins) .add_plugin(KayakContextPlugin) .add_plugin(KayakWidgets) diff --git a/kayak_ui_macros/src/widget.rs b/kayak_ui_macros/src/widget.rs index 55f3ef4..01f0b33 100644 --- a/kayak_ui_macros/src/widget.rs +++ b/kayak_ui_macros/src/widget.rs @@ -73,6 +73,7 @@ impl Widget { ( entity_id, quote! {{ + let parent_org = parent_id; #props #widget_block }}, @@ -197,14 +198,7 @@ impl Widget { } let props = quote! { - let entity = widget_context.get_child_at(parent_id); - let #entity_id = if let Some(entity) = entity { - // use bevy::prelude::DespawnRecursiveExt; - // commands.entity(entity).despawn_recursive(); - commands.get_or_spawn(entity).id() - } else { - commands.spawn_empty().id() - }; + let #entity_id = widget_context.spawn_widget(&mut commands, parent_org); let mut #prop_ident = #name { #assigned_attrs ..Default::default() diff --git a/src/calculate_nodes.rs b/src/calculate_nodes.rs index a053978..4b7ccc8 100644 --- a/src/calculate_nodes.rs +++ b/src/calculate_nodes.rs @@ -8,10 +8,10 @@ use morphorm::Hierarchy; use crate::{ layout::{DataCache, Rect}, node::{DirtyNode, Node, NodeBuilder, WrappedIndex}, - prelude::{KStyle, KayakRootContext}, + prelude::{KStyle, KayakRootContext, Tree}, render::font::FontMapping, render_primitive::RenderPrimitive, - styles::{StyleProp, Units}, + styles::{RenderCommand, StyleProp, Units}, }; pub fn calculate_nodes( @@ -37,7 +37,11 @@ pub fn calculate_nodes( // if query.is_empty() { // return; // } - if let Ok(tree) = context.tree.clone().read() { + if let Ok(tree) = context.tree.clone().try_read() { + if tree.root_node.is_none() { + return; + } + for dirty_entity in query.iter() { let dirty_entity = WrappedIndex(dirty_entity); let styles = all_styles_query @@ -48,10 +52,10 @@ pub fn calculate_nodes( // 2. Unresolved widget prop styles // 3. Unresolved default styles let parent_styles = if let Some(parent_widget_id) = tree.parents.get(&dirty_entity) { - if let Ok((_, parent_node)) = node_query.get(parent_widget_id.0) { - parent_node.resolved_styles.clone() - } else if let Some(parent_node) = new_nodes.get(&parent_widget_id.0) { + if let Some(parent_node) = new_nodes.get(&parent_widget_id.0) { parent_node.0.resolved_styles.clone() + } else if let Ok((_, parent_node)) = node_query.get(parent_widget_id.0) { + parent_node.resolved_styles.clone() } else if let Ok(parent_styles) = all_styles_query.get(parent_widget_id.0) { parent_styles.clone() } else { @@ -61,27 +65,21 @@ pub fn calculate_nodes( default_styles.clone() }; - let parent_z = if let Some(parent_widget_id) = tree.parents.get(&dirty_entity) { - if let Ok((_, parent_node)) = node_query.get(parent_widget_id.0) { - parent_node.z - } else if let Some(parent_node) = new_nodes.get(&parent_widget_id.0) { - parent_node.0.z - } else { - -1.0 - } - } else { - -1.0 - }; - - let current_z = { - if parent_z > -1.0 { - parent_z + 1.0 - } else { - let z = context.current_z; - context.current_z += 1.0; - z - } - }; + // let parent_z = if let Some(parent_widget_id) = tree.parents.get(&dirty_entity) { + // if let Some(parent_node) = new_nodes.get(&parent_widget_id.0) { + // parent_node.0.z + // } else if let Ok((_, parent_node)) = node_query.get(parent_widget_id.0) { + // parent_node.z + // } else { + // if let Ok(parent_styles) = all_styles_query.get(parent_widget_id.0) { + // parent_styles.z_index.resolve() as f32 + // } else { + // -1.0 + // } + // } + // } else { + // -1.0 + // }; let raw_styles = styles.clone(); let mut styles = raw_styles.clone(); @@ -90,6 +88,22 @@ pub fn calculate_nodes( // Fill in all `inherited` values for any `inherit` property styles.inherit(&parent_styles); + // let mut current_z = { + // if parent_z > -1.0 { + // parent_z + 1.0 + // } else { + // let z = context.current_z; + // context.current_z += 1.0; + // z + // } + // }; + + let current_z = if matches!(styles.z_index, StyleProp::Value(..)) { + styles.z_index.resolve() as f32 + } else { + -1.0 + }; + let (primitive, needs_layout) = create_primitive( &mut commands, &context, @@ -99,6 +113,11 @@ pub fn calculate_nodes( // &node_query, dirty_entity, &mut styles, + node_query + .get(dirty_entity.0) + .and_then(|(_, node)| Ok(node.raw_styles.clone().unwrap_or_default())) + .unwrap_or_default(), + &all_styles_query, ); let children = tree.children.get(&dirty_entity).cloned().unwrap_or(vec![]); @@ -127,6 +146,10 @@ pub fn calculate_nodes( ); } } + node.old_z = node_query + .get(dirty_entity.0) + .and_then(|old_node| Ok(old_node.1.z)) + .unwrap_or(0.0); node.z = current_z; new_nodes.insert(dirty_entity.0, (node, needs_layout)); } @@ -134,11 +157,13 @@ pub fn calculate_nodes( // let has_new_nodes = new_nodes.len() > 0; for (entity, (node, needs_layout)) in new_nodes.drain() { - commands.entity(entity).insert(node); if !needs_layout { commands.entity(entity).remove::<DirtyNode>(); - log::trace!("{:?} needs layout!", entity.id()); + } else { + // log::info!("{:?} needs layout!", entity.id()); } + + commands.entity(entity).insert(node); } } } @@ -162,7 +187,10 @@ pub fn calculate_layout( for (entity, change) in cache.geometry_changed.iter() { if !change.is_empty() { for child in tree.child_iter(*entity) { - commands.entity(child.0).insert(DirtyNode); + // log::info!("Layout changed for: {:?}", child.0.id()); + if let Some(mut entity_commands) = commands.get_entity(child.0) { + entity_commands.insert(DirtyNode); + } } } } @@ -179,6 +207,8 @@ fn create_primitive( dirty: &Query<Entity, With<DirtyNode>>, id: WrappedIndex, styles: &mut KStyle, + prev_styles: KStyle, + all_styles_query: &Query<&KStyle>, ) -> (RenderPrimitive, bool) { let mut render_primitive = RenderPrimitive::from(&styles.clone()); let mut needs_layout = true; @@ -196,34 +226,64 @@ fn create_primitive( if let Some(font) = fonts.get(&font_handle) { // self.bind(id, &asset); if let Ok(node_tree) = context.tree.try_read() { - if let Some(parent_id) = node_tree.get_parent(id) { - if !dirty.contains(parent_id.0) { - if let Some(parent_layout) = context.get_layout(&parent_id) { - properties.max_size = (parent_layout.width, parent_layout.height); - - if properties.max_size.0 == 0.0 || properties.max_size.1 == 0.0 { - needs_layout = true; - } else { - needs_layout = false; - } - - if context.get_geometry_changed(&parent_id) { - needs_layout = true; - } - - // --- Calculate Text Layout --- // - *text_layout = font.measure(&content, *properties); - let measurement = text_layout.size(); - - // --- Apply Layout --- // - if matches!(styles.width, StyleProp::Default) { - styles.width = StyleProp::Value(Units::Pixels(measurement.0)); - } - if matches!(styles.height, StyleProp::Default) { - styles.height = StyleProp::Value(Units::Pixels(measurement.1)); - } + if let Some(parent_id) = + find_not_empty_parent(&node_tree, all_styles_query, &id) + { + if let Some(parent_layout) = context.get_layout(&parent_id) { + let border_x = if let Ok(style) = all_styles_query.get(parent_id.0) { + let border = style.border.resolve(); + border.left + border.right + } else { + 0.0 + }; + let border_y = if let Ok(style) = all_styles_query.get(parent_id.0) { + let border = style.border.resolve(); + border.top + border.bottom + } else { + 0.0 + }; + properties.max_size = ( + parent_layout.width - border_x, + parent_layout.height - border_y, + ); + + needs_layout = false; + + if properties.max_size.0 == 0.0 || properties.max_size.1 == 0.0 { + needs_layout = true; + } + + if context.get_geometry_changed(&parent_id) { + needs_layout = true; + } + + if dirty.contains(parent_id.0) { + needs_layout = true; + } + + // --- Calculate Text Layout --- // + *text_layout = font.measure(&content, *properties); + let measurement = text_layout.size(); + + log::trace!( + "Text Node: {}, has a measurement of: {:?}, it's parent takes up: {:?}", + &content, + measurement, + properties.max_size + ); + + // --- Apply Layout --- // + if matches!(styles.width, StyleProp::Default) { + styles.width = StyleProp::Value(Units::Pixels(measurement.0)); + } + if matches!(styles.height, StyleProp::Default) { + styles.height = StyleProp::Value(Units::Pixels(measurement.1)); } + } else { + log::trace!("no layout for: {:?}", parent_id.0.id()); } + } else { + log::trace!("No parent found for: {:?}", id.0.id()); } } } @@ -237,9 +297,38 @@ fn create_primitive( commands.entity(id.0).insert(DirtyNode); } + // If we have data from the previous frame no need to do anything here! + if matches!(prev_styles.width, StyleProp::Value(..)) { + styles.width = prev_styles.width; + styles.height = prev_styles.height; + needs_layout = false; + } + (render_primitive, needs_layout) } +pub fn find_not_empty_parent( + tree: &Tree, + all_styles_query: &Query<&KStyle>, + node: &WrappedIndex, +) -> Option<WrappedIndex> { + if let Some(parent) = tree.parent(*node) { + if let Ok(styles) = all_styles_query.get(parent.0) { + if matches!(styles.render_command.resolve(), RenderCommand::Empty) + || matches!(styles.render_command.resolve(), RenderCommand::Layout) + { + find_not_empty_parent(tree, all_styles_query, &parent) + } else { + Some(parent) + } + } else { + find_not_empty_parent(tree, all_styles_query, &parent) + } + } else { + None + } +} + // pub fn build_nodes_tree(context: &mut Context, tree: &Tree, node_query: &Query<(Entity, &Node)>) { // if tree.root_node.is_none() { // return; diff --git a/src/children.rs b/src/children.rs index 810be98..10546b2 100644 --- a/src/children.rs +++ b/src/children.rs @@ -30,6 +30,14 @@ impl KChildren { } } + pub fn iter(&self) -> std::slice::Iter<Entity> { + self.inner.iter() + } + + pub fn len(&self) -> usize { + self.inner.len() + } + pub fn despawn(&mut self, commands: &mut Commands) { for child in self.inner.drain(..) { commands.entity(child).despawn_recursive(); diff --git a/src/clone_component.rs b/src/clone_component.rs index 5cfb47b..1514109 100644 --- a/src/clone_component.rs +++ b/src/clone_component.rs @@ -20,7 +20,9 @@ pub(crate) fn clone_system<T: Clone + Component>( ) { if let Some(v) = world.entity(reference).get::<T>() { let v = v.clone(); - world.entity_mut(target).insert(v); + if let Some(mut entity) = world.get_entity_mut(target) { + entity.insert(v); + } } } diff --git a/src/context.rs b/src/context.rs index 85c4c85..777cd36 100644 --- a/src/context.rs +++ b/src/context.rs @@ -81,7 +81,8 @@ pub struct KayakRootContext { pub(crate) clone_systems: Arc<RwLock<EntityCloneSystems>>, pub(crate) cloned_widget_entities: Arc<RwLock<HashMap<Entity, Entity>>>, pub(crate) widget_state: WidgetState, - index: Arc<RwLock<HashMap<Entity, usize>>>, + pub(crate) order_tree: Arc<RwLock<Tree>>, + pub(crate) index: Arc<RwLock<HashMap<Entity, usize>>>, } impl KayakRootContext { @@ -99,6 +100,7 @@ impl KayakRootContext { cloned_widget_entities: Default::default(), widget_state: Default::default(), index: Default::default(), + order_tree: Default::default(), } } @@ -188,36 +190,58 @@ impl KayakRootContext { } } - /// Returns a child entity or none if it does not exist. + /// Returns a new/existing widget entity. /// Because a re-render can potentially spawn new entities it's advised to use this /// to avoid creating a new entity. /// /// Usage: + /// ```rust /// fn setup() { /// let mut widget_context = WidgetContext::new(); /// // Root tree node, no parent node. - /// let root_entity = if let Some(root_entity) = widget_context.get_child_at(None) {\ - /// root_entity - /// } else { - /// // Spawn if it does not exist in the tree! - /// commands.spawn_empty().id() - /// }; + /// let root_entity = widget_context.spawn_widget(&mut commands, None); /// commands.entity(root_entity).insert(KayakAppBundle::default()); /// widget_context.add_widget(None, root_entity); /// } - /// - /// - pub fn get_child_at(&self, parent_entity: Option<Entity>) -> Option<Entity> { - if let Ok(tree) = self.tree.try_read() { - if let Some(entity) = parent_entity { - let children = tree.child_iter(WrappedIndex(entity)).collect::<Vec<_>>(); - return children - .get(self.get_and_add_index(entity)) - .cloned() - .map(|index| index.0); + ///``` + pub fn spawn_widget(&self, commands: &mut Commands, parent_id: Option<Entity>) -> Entity { + let mut entity = None; + if let Some(parent_entity) = parent_id { + let children = self.get_children_ordered(parent_entity); + let child = children.get(self.get_and_add_index(parent_entity)).cloned(); + if let Some(child) = child { + log::trace!("Reusing widget entity {:?}!", child.id()); + entity = Some(commands.get_or_spawn(child).id()); } } - None + + // If we have no entity spawn it! + if entity.is_none() { + entity = Some(commands.spawn_empty().id()); + log::trace!( + "Spawning new widget with entity {:?}!", + entity.unwrap().id() + ); + // We need to add it to the ordered tree + if let Ok(mut tree) = self.order_tree.try_write() { + tree.add( + WrappedIndex(entity.unwrap()), + parent_id.and_then(|parent| Some(WrappedIndex(parent))), + ) + } + } + entity.unwrap() + } + + fn get_children_ordered(&self, entity: Entity) -> Vec<Entity> { + let mut children = vec![]; + if let Ok(tree) = self.order_tree.read() { + let iterator = tree.child_iter(WrappedIndex(entity)); + + children = iterator.map(|index| index.0).collect::<Vec<_>>(); + } + + children } fn get_and_add_index(&self, parent: Entity) -> usize { @@ -256,98 +280,139 @@ impl KayakRootContext { // self.node_tree.dump(); - recurse_node_tree_to_build_primitives( - &*node_tree, - &self.layout_cache, - nodes, - widget_names, - node_tree.root_node.unwrap(), - 0.0, - RenderPrimitive::Empty, - ) + let render_primitives = if let Ok(mut layout_cache) = self.layout_cache.try_write() { + recurse_node_tree_to_build_primitives( + &*node_tree, + &mut layout_cache, + nodes, + widget_names, + node_tree.root_node.unwrap(), + 0.0, + RenderPrimitive::Empty, + ) + } else { + vec![] + }; + // render_primitives.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); + + // render_primitives.iter().enumerate().for_each(|(index, p)| { + // log::info!("Name: {:?}, Z: {:?}", p.to_string(), index); + // }); + + // dbg!(&render_primitives + // .iter() + // .map(|a| (a.1.to_string(), a.0)) + // .collect::<Vec<_>>()); + + render_primitives.into_iter().collect() } } fn recurse_node_tree_to_build_primitives( node_tree: &Tree, - layout_cache: &Arc<RwLock<LayoutCache>>, + layout_cache: &mut LayoutCache, nodes: &Query<&crate::node::Node>, widget_names: &Query<&WidgetName>, current_node: WrappedIndex, - mut main_z_index: f32, + main_z_index: f32, mut prev_clip: RenderPrimitive, ) -> Vec<RenderPrimitive> { let mut render_primitives = Vec::new(); if let Ok(node) = nodes.get(current_node.0) { - if let Ok(cache) = layout_cache.try_read() { - if let Some(layout) = cache.rect.get(¤t_node) { - let mut render_primitive = node.primitive.clone(); - let mut layout = *layout; - let new_z_index = if matches!(render_primitive, RenderPrimitive::Clip { .. }) { - main_z_index - 0.1 - } else { - main_z_index - }; - layout.z_index = new_z_index; - render_primitive.set_layout(layout); - - if matches!(render_primitive, RenderPrimitive::Empty) { - log::trace!( - "No render primitive for node: {}-{}", - widget_names.get(current_node.0).unwrap().0, - current_node.0.id(), - ); - } + let mut render_primitive = node.primitive.clone(); + let mut new_z_index = if matches!(render_primitive, RenderPrimitive::Clip { .. }) { + main_z_index + } else { + main_z_index + }; + let _layout = if let Some(layout) = layout_cache.rect.get_mut(¤t_node) { + // log::info!( + // "z_index is {} and node.z is {} for: {}-{}", + // new_z_index, + // node.z, + // widget_names.get(current_node.0).unwrap().0, + // current_node.0.id(), + // ); + + new_z_index += if node.z <= 0.0 { 0.0 } else { node.z }; + + layout.z_index = new_z_index; + render_primitive.set_layout(*layout); + *layout + } else { + log::warn!( + "No layout for node: {}-{}", + widget_names.get(current_node.0).unwrap().0, + current_node.0.id() + ); + Rect::default() + }; - render_primitives.push(render_primitive.clone()); + match &render_primitive { + RenderPrimitive::Text { content, .. } => { + log::trace!( + "Text node: {}-{} is equal to: {}", + widget_names.get(current_node.0).unwrap().0, + current_node.0.id(), + content, + ); + } + RenderPrimitive::Empty => { + log::trace!( + "Empty node: {}-{}", + widget_names.get(current_node.0).unwrap().0, + current_node.0.id(), + ); + } + _ => {} + } - let new_prev_clip = if matches!(render_primitive, RenderPrimitive::Clip { .. }) { - render_primitive.clone() - } else { - prev_clip - }; + render_primitives.push(render_primitive.clone()); - prev_clip = new_prev_clip.clone(); - if node_tree.children.contains_key(¤t_node) { - for child in node_tree.children.get(¤t_node).unwrap() { - main_z_index += 1.0; - render_primitives.extend(recurse_node_tree_to_build_primitives( - node_tree, - layout_cache, - nodes, - widget_names, - *child, - main_z_index, - new_prev_clip.clone(), - )); - - main_z_index = layout.z_index; - // Between each child node we need to reset the clip. - if matches!(prev_clip, RenderPrimitive::Clip { .. }) { - // main_z_index = new_z_index; - match &mut prev_clip { - RenderPrimitive::Clip { layout } => { - layout.z_index = main_z_index + 0.1; - } - _ => {} - }; - render_primitives.push(prev_clip.clone()); - } - } - } else { - log::trace!( - "No children for node: {}-{}", - widget_names.get(current_node.0).unwrap().0, - current_node.0.id() - ); - } - } else { - log::warn!( - "No layout for node: {}-{}", - widget_names.get(current_node.0).unwrap().0, - current_node.0.id() + let new_prev_clip = if matches!(render_primitive, RenderPrimitive::Clip { .. }) { + render_primitive.clone() + } else { + prev_clip + }; + + prev_clip = new_prev_clip.clone(); + if node_tree.children.contains_key(¤t_node) { + let z = 1.0f32; + let mut children_primitives = Vec::new(); + for child in node_tree.children.get(¤t_node).unwrap() { + // main_z_index += 1.0; + let mut children_p = recurse_node_tree_to_build_primitives( + node_tree, + layout_cache, + nodes, + widget_names, + *child, + main_z_index + if node.z < 0.0 { 0.0 } else { node.z } + z, + new_prev_clip.clone(), ); + + // Between each child node we need to reset the clip. + if matches!(prev_clip, RenderPrimitive::Clip { .. }) { + children_p.push(prev_clip.clone()); + } + + if let Ok(node) = nodes.get(child.0) { + let zz = if node.z < 0.0 { z } else { z + node.z }; + children_primitives.push((zz, children_p)); + } } + + // Sort and add + children_primitives.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); + for cp in children_primitives.drain(..) { + render_primitives.extend(cp.1); + } + } else { + log::trace!( + "No children for node: {}-{}", + widget_names.get(current_node.0).unwrap().0, + current_node.0.id() + ); } } else { log::error!( @@ -365,7 +430,10 @@ fn recurse_node_tree_to_build_primitives( ) .and_then(|v| Ok(v.0.clone())) .unwrap_or("None".into()), - widget_names.get(current_node.0).unwrap().0, + widget_names + .get(current_node.0) + .and_then(|v| Ok(v.0.clone())) + .unwrap_or("None".into()), current_node.0.id() ); } @@ -411,6 +479,8 @@ fn update_widgets_sys(world: &mut World) { &context.cloned_widget_entities, &context.widget_state, &mut new_ticks, + &context.order_tree, + &context.index, ); if let Some(old_focus) = old_focus { @@ -435,8 +505,18 @@ fn update_widgets_sys(world: &mut World) { // system.apply_buffers(world); } - // if let Ok(tree) = context.tree.try_read() { - // tree.dump(); + // Clear out indices + if let Ok(mut indices) = context.index.try_write() { + // for (entity, value) in indices.iter_mut() { + // if tree.root_node.unwrap().0.id() != entity.id() { + // *value = 0; + // } + // } + indices.clear(); + } + + // if let Ok(order_tree) = context.order_tree.try_read() { + // order_tree.dump(); // } world.insert_resource(context); @@ -454,6 +534,8 @@ fn update_widgets( cloned_widget_entities: &Arc<RwLock<HashMap<Entity, Entity>>>, widget_state: &WidgetState, new_ticks: &mut HashMap<String, u32>, + order_tree: &Arc<RwLock<Tree>>, + index: &Arc<RwLock<HashMap<Entity, usize>>>, ) { for entity in widgets.iter() { if let Some(entity_ref) = world.get_entity(entity.0) { @@ -463,9 +545,12 @@ fn update_widgets( context_entities.clone(), layout_cache.clone(), widget_state.clone(), + order_tree.clone(), + index.clone(), ); widget_context.copy_from_point(&tree, *entity); let children_before = widget_context.get_children(entity.0); + let widget_name = widget_type.0.clone(); let (widget_context, should_update_children) = update_widget( systems, tree, @@ -482,27 +567,82 @@ fn update_widgets( if should_update_children { if let Ok(mut tree) = tree.write() { + // let mut had_removal = false; let diff = tree.diff_children(&widget_context, *entity, UPDATE_DEPTH); for (_index, child, _parent, changes) in diff.changes.iter() { - for change in changes.iter() { - if matches!(change, Change::Inserted) { - if let Ok(mut cache) = layout_cache.try_write() { - cache.add(*child); + if changes + .iter() + .any(|change| matches!(change, Change::Inserted)) + { + if let Ok(mut cache) = layout_cache.try_write() { + cache.add(*child); + } + } + + if changes + .iter() + .any(|change| matches!(change, Change::Deleted)) + { + // Children of this node need to be despawned. + let mut despawn_list = Vec::default(); + for child in tree.down_iter_at(*child, true) { + let children = if let Some(parent) = tree.get_parent(child) { + world.entity(parent.0).get::<KChildren>() + } else { + None + }; + + if let Some(children) = children { + if !children.iter().any(|c| *c == child.0) { + despawn_list.push(child.0); + } + } else { + despawn_list.push(child.0); + } + if let Ok(mut order_tree) = order_tree.try_write() { + // had_removal = true; + log::trace!( + "Removing entity! {:?} inside of: {}-{:?}", + child.0.id(), + widget_name, + entity.0.id() + ); + order_tree.remove(child); + } + } + for entity in despawn_list.drain(..) { + if let Some(entity_mut) = world.get_entity_mut(entity) { + entity_mut.despawn(); } } } } - // dbg!("Dumping widget tree:"); - // widget_context.dump_at(*entity); - // dbg!(entity.0, &diff); + + // if had_removal { + // tree.dump(); + // dbg!(&diff); + // } tree.merge(&widget_context, *entity, diff, UPDATE_DEPTH); - // dbg!(tree.dump_at(*entity)); + + // if had_removal { + // tree.dump(); + // } + + for child in widget_context.child_iter(*entity) { + if let Some(mut entity_commands) = world.get_entity_mut(child.0) { + entity_commands.insert(DirtyNode); + } + } } } // if should_update_children { - let children = widget_context.child_iter(*entity).collect::<Vec<_>>(); + let children = if let Ok(tree) = tree.read() { + tree.child_iter(*entity).collect::<Vec<_>>() + } else { + vec![] + }; update_widgets( world, tree, @@ -515,6 +655,8 @@ fn update_widgets( cloned_widget_entities, widget_state, new_ticks, + order_tree, + index, ); // } } @@ -550,8 +692,16 @@ fn update_widget( let should_rerender = { let old_props_entity = if let Ok(mut cloned_widget_entities) = cloned_widget_entities.try_write() { - if let Some(entity) = cloned_widget_entities.get(&entity.0) { - *entity + if let Some(entity) = cloned_widget_entities.get(&entity.0).cloned() { + if let Some(possible_entity) = world.get_entity(entity) { + let target = possible_entity.id(); + cloned_widget_entities.insert(entity, target); + target + } else { + let target = world.spawn_empty().insert(PreviousWidget).id(); + cloned_widget_entities.insert(entity, target); + target + } } else { let target = world.spawn_empty().insert(PreviousWidget).id(); cloned_widget_entities.insert(entity.0, target); @@ -571,16 +721,23 @@ fn update_widget( if should_rerender { if let Ok(cloned_widget_entities) = cloned_widget_entities.try_read() { - let target_entity = cloned_widget_entities.get(&entity.0).unwrap(); - if let Ok(clone_systems) = clone_systems.try_read() { - for s in clone_systems.0.iter() { - s.0(world, *target_entity, entity.0); - s.1(world, *target_entity, entity.0, &widget_state); - if let Some(styles) = world.entity(entity.0).get::<KStyle>().cloned() { - world.entity_mut(*target_entity).insert(styles); - } - if let Some(children) = world.entity(entity.0).get::<KChildren>().cloned() { - world.entity_mut(*target_entity).insert(children); + if let Some(target_entity) = cloned_widget_entities.get(&entity.0) { + if let Ok(clone_systems) = clone_systems.try_read() { + for s in clone_systems.0.iter() { + s.0(world, *target_entity, entity.0); + s.1(world, *target_entity, entity.0, &widget_state); + if let Some(styles) = world.entity(entity.0).get::<KStyle>().cloned() { + if let Some(mut entity) = world.get_entity_mut(*target_entity) { + entity.insert(styles); + } + } + if let Some(children) = + world.entity(entity.0).get::<KChildren>().cloned() + { + if let Some(mut entity) = world.get_entity_mut(*target_entity) { + entity.insert(children); + } + } } } } @@ -600,8 +757,31 @@ fn update_widget( // } let should_update_children; - log::trace!("Re-rendering: {:?} {:?}", &widget_type, entity.0.id()); + if let Ok(tree) = tree.try_read() { + log::trace!( + "Re-rendering: {:?} {:?}, parent: {:?}", + &widget_type, + entity.0.id(), + tree.parent(entity) + .unwrap_or(WrappedIndex(Entity::from_raw(99999))) + .0 + .id() + ); + } { + // Before rendering widget we need to advance the indices correctly.. + if let Some(children) = world.get::<KChildren>(entity.0) { + let child_count = children.len(); + if let Ok(mut indices) = widget_context.index.try_write() { + indices.insert(entity.0, 0); + log::trace!( + "Advancing children for: {:?} by: {:?}", + entity.0.id(), + child_count + ); + } + } + // Remove children from previous render. widget_context.remove_children(previous_children); let widget_render_system = &mut systems.get_mut(&widget_type).unwrap().1; @@ -612,6 +792,10 @@ fn update_widget( new_ticks.insert(widget_type.clone(), new_tick); widget_render_system.set_last_change_tick(old_tick); widget_render_system.apply_buffers(world); + + if let Ok(mut indices) = widget_context.index.try_write() { + indices.insert(entity.0, 0); + } } let widget_context = widget_context.take(); let mut command_queue = CommandQueue::default(); @@ -631,34 +815,36 @@ fn update_widget( // Mark node as needing a recalculation of rendering/layout. commands.entity(entity.0).insert(DirtyNode); - for child in widget_context.child_iter(entity) { - commands.entity(child.0).insert(DirtyNode); - } - - if let Ok(cloned_widget_entities) = cloned_widget_entities.try_read() { - let target_entity = cloned_widget_entities.get(&entity.0).unwrap(); - if let Some(styles) = world.entity(entity.0).get::<KStyle>().cloned() { - commands.entity(*target_entity).insert(styles); - } - if let Some(children) = world.entity(entity.0).get::<KChildren>().cloned() { - commands.entity(*target_entity).insert(children); + for (_index, changed_entity, _parent, changes) in diff.changes.iter() { + if changes.iter().any(|change| *change == Change::Deleted) { + // commands.entity(changed_entity.0).despawn(); + // commands.entity(changed_entity.0).remove::<DirtyNode>(); + // commands.entity(changed_entity.0).despawn_recursive(); } - } - - if should_update_children { - for (_, changed_entity, _, changes) in diff.changes.iter() { - if changes.iter().any(|change| *change == Change::Deleted) { - // commands.entity(changed_entity.0).despawn(); - commands.entity(changed_entity.0).remove::<DirtyNode>(); - } - if changes.iter().any(|change| *change == Change::Inserted) { - commands.entity(changed_entity.0).insert(Mounted); + if changes.iter().any(|change| *change == Change::Inserted) { + if let Some(mut entity_commands) = commands.get_entity(changed_entity.0) { + entity_commands.insert(Mounted); } } } + command_queue.apply(world); if should_update_children { + if let Ok(cloned_widget_entities) = cloned_widget_entities.try_read() { + if let Some(target_entity) = cloned_widget_entities.get(&entity.0) { + if let Some(styles) = world.entity(entity.0).get::<KStyle>().cloned() { + if let Some(mut entity) = world.get_entity_mut(*target_entity) { + entity.insert(styles); + } + } + if let Some(children) = world.entity(entity.0).get::<KChildren>().cloned() { + if let Some(mut entity) = world.get_entity_mut(*target_entity) { + entity.insert(children); + } + } + } + } for (_, child_entity, _, changes) in diff.changes.iter() { // Clone to entity. if changes.iter().any(|change| *change == Change::Deleted) { @@ -729,7 +915,7 @@ fn calculate_ui(world: &mut World) { let mut layout_system = IntoSystem::into_system(calculate_layout); layout_system.initialize(world); - for _ in 0..5 { + for _ in 0..3 { node_system.run((), world); node_system.apply_buffers(world); @@ -771,7 +957,7 @@ fn calculate_ui(world: &mut World) { /// A simple component that stores the type name of a widget /// This is used by Kayak in order to find out which systems to run. -#[derive(Component, Debug)] +#[derive(Component, Debug, Clone, PartialEq)] pub struct WidgetName(pub String); impl From<String> for WidgetName { diff --git a/src/event.rs b/src/event.rs index 7442a23..773a89f 100644 --- a/src/event.rs +++ b/src/event.rs @@ -21,6 +21,8 @@ pub struct Event { pub(crate) default_prevented: bool, /// OnChange systems to call afterwards pub(crate) on_change_systems: Vec<OnChange>, + + pub testing_z_index: f32, } impl Default for Event { @@ -32,6 +34,7 @@ impl Default for Event { should_propagate: true, default_prevented: false, on_change_systems: Vec::new(), + testing_z_index: 0.0, } } } @@ -49,6 +52,7 @@ impl Event { should_propagate: event_type.propagates(), default_prevented: false, on_change_systems: Vec::new(), + testing_z_index: 0.0, } } @@ -59,7 +63,17 @@ impl Event { /// If called, prevents this event from propagating up the hierarchy pub fn stop_propagation(&mut self) { - self.should_propagate = false; + if matches!( + self.event_type, + EventType::Click(..) + | EventType::MouseIn(..) + | EventType::MouseDown(..) + | EventType::Scroll(..) + | EventType::Focus + | EventType::Hover(..) + ) { + self.should_propagate = false; + } } /// Returns whether this event's default action has been prevented or not diff --git a/src/event_dispatcher.rs b/src/event_dispatcher.rs index 53a6340..3c80a66 100644 --- a/src/event_dispatcher.rs +++ b/src/event_dispatcher.rs @@ -11,7 +11,7 @@ use crate::{ input_event::{InputEvent, InputEventCategory}, keyboard_event::{KeyboardEvent, KeyboardModifiers}, layout::Rect, - node::WrappedIndex, + node::{Node, WrappedIndex}, on_event::OnEvent, prelude::KayakWidgetContext, styles::{KStyle, RenderCommand}, @@ -243,6 +243,8 @@ impl EventDispatcher { context.context_entities.clone(), context.layout_cache.clone(), context.widget_state.clone(), + context.order_tree.clone(), + context.index.clone(), ); node_event.run_on_change(world, widget_context); } @@ -382,30 +384,32 @@ impl EventDispatcher { let (current, depth) = stack.pop().unwrap(); let mut enter_children = true; - for input_event in input_events { - // --- Process Event --- // - if matches!(input_event.category(), InputEventCategory::Mouse) { - // A widget's PointerEvents style will determine how it and its children are processed - let pointer_events = Self::resolve_pointer_events(current, world); - - match pointer_events { - PointerEvents::All | PointerEvents::SelfOnly => { - let events = self.process_pointer_events( - input_event, - (current, depth), - &mut states, - world, - context, - false, - ); - event_stream.extend(events); - - if matches!(pointer_events, PointerEvents::SelfOnly) { - enter_children = false; + if world.entity(current.0).contains::<OnEvent>() { + for input_event in input_events { + // --- Process Event --- // + if matches!(input_event.category(), InputEventCategory::Mouse) { + // A widget's PointerEvents style will determine how it and its children are processed + let pointer_events = Self::resolve_pointer_events(current, world); + + match pointer_events { + PointerEvents::All | PointerEvents::SelfOnly => { + let events = self.process_pointer_events( + input_event, + (current, depth), + &mut states, + world, + context, + false, + ); + event_stream.extend(events); + + if matches!(pointer_events, PointerEvents::SelfOnly) { + enter_children = false; + } } + PointerEvents::None => enter_children = false, + PointerEvents::ChildrenOnly => {} } - PointerEvents::None => enter_children = false, - PointerEvents::ChildrenOnly => {} } } } @@ -413,9 +417,17 @@ impl EventDispatcher { // --- Push Children to Stack --- // if enter_children { if let Some(children) = node_tree.children.get(¤t) { + let mut stack_children = Vec::new(); for child in children { - stack.push((*child, depth + 1)); + let child_z = world + .entity(child.0) + .get::<Node>() + .and_then(|node| Some(node.z)) + .unwrap_or(0.0); + stack_children.push((child_z, (*child, depth + 1))); } + stack_children.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); + stack.extend(stack_children.iter().map(|c| c.1)); } } } @@ -511,6 +523,9 @@ impl EventDispatcher { let mut event_stream = Vec::<Event>::new(); let (node, depth) = tree_node; + // let widget_name = world.entity(node.0).get::<WidgetName>(); + // dbg!(widget_name); + match input_event { InputEvent::MouseMoved(point) => { if let Some(layout) = context.get_layout(&node) { @@ -519,10 +534,23 @@ impl EventDispatcher { let is_contained = layout.contains(point); if !ignore_layout && was_contained != is_contained { if was_contained { + // Mouse out should fire even when event_stream .push(Event::new(node.0, EventType::MouseOut(cursor_event))); + // Self::update_state( + // states, + // (node, depth), + // &layout, + // EventType::MouseOut(cursor_event), + // ); } else { - event_stream.push(Event::new(node.0, EventType::MouseIn(cursor_event))); + // event_stream.push(Event::new(node.0, EventType::MouseIn(cursor_event))); + Self::update_state( + states, + (node, depth), + &layout, + EventType::MouseIn(cursor_event), + ); } } if self.contains_cursor.is_none() || !self.contains_cursor.unwrap_or_default() { @@ -557,7 +585,13 @@ impl EventDispatcher { if let Some(layout) = context.get_layout(&node) { if ignore_layout || layout.contains(&self.current_mouse_position) { let cursor_event = self.get_cursor_event(self.current_mouse_position); - event_stream.push(Event::new(node.0, EventType::MouseDown(cursor_event))); + // event_stream.push(Event::new(node.0, EventType::MouseDown(cursor_event))); + Self::update_state( + states, + (node, depth), + &layout, + EventType::MouseDown(cursor_event), + ); if world.get::<Focusable>(node.0).is_some() { Self::update_state(states, (node, depth), &layout, EventType::Focus); @@ -578,7 +612,13 @@ impl EventDispatcher { if let Some(layout) = context.get_layout(&node) { if ignore_layout || layout.contains(&self.current_mouse_position) { let cursor_event = self.get_cursor_event(self.current_mouse_position); - event_stream.push(Event::new(node.0, EventType::MouseUp(cursor_event))); + // event_stream.push(Event::new(node.0, EventType::MouseUp(cursor_event))); + Self::update_state( + states, + (node, depth), + &layout, + EventType::MouseUp(cursor_event), + ); // self.last_clicked.set(node); if Self::contains_event( @@ -701,11 +741,13 @@ impl EventDispatcher { let (node, depth) = tree_node; // Node is at or above best depth and is at or above best z-level + let mut should_update = depth >= state.best_depth && layout.z_index >= state.best_z_index; // OR node is above best z-level - should_update |= layout.z_index > state.best_z_index; + should_update |= layout.z_index >= state.best_z_index; if should_update { + // dbg!(node.0.id(), layout.z_index); state.best_match = Some(node); state.best_z_index = layout.z_index; state.best_depth = depth; diff --git a/src/node.rs b/src/node.rs index 0fb1acc..820e79d 100644 --- a/src/node.rs +++ b/src/node.rs @@ -23,6 +23,7 @@ pub struct Node { pub primitive: RenderPrimitive, /// The z-index of this node, used for controlling layering pub z: f32, + pub old_z: f32, } impl Default for Node { @@ -34,6 +35,7 @@ impl Default for Node { raw_styles: Default::default(), primitive: RenderPrimitive::Empty, z: Default::default(), + old_z: Default::default(), } } } @@ -54,6 +56,7 @@ impl NodeBuilder { raw_styles: None, primitive: RenderPrimitive::Empty, z: 0.0, + old_z: 0.0, }, } } @@ -68,6 +71,7 @@ impl NodeBuilder { raw_styles: None, primitive: RenderPrimitive::Empty, z: 0.0, + old_z: 0.0, }, } } diff --git a/src/render/unified/shader.wgsl b/src/render/unified/shader.wgsl index e299a44..3aac721 100644 --- a/src/render/unified/shader.wgsl +++ b/src/render/unified/shader.wgsl @@ -63,7 +63,7 @@ fn sdRoundBox(p: vec2<f32>, b: vec2<f32>, r: f32) -> f32 { @fragment fn fragment(in: VertexOutput) -> @location(0) vec4<f32> { - if (quad_type.t == 0) { + if quad_type.t == 0 { var size = in.size; var pos = in.pos.xy * 2.0; // Lock border to max size. This is similar to how HTML/CSS handles border radius. @@ -76,8 +76,8 @@ fn fragment(in: VertexOutput) -> @location(0) vec4<f32> { rect_dist = 1.0 - smoothstep(0.0, fwidth(rect_dist), rect_dist); return vec4<f32>(in.color.rgb, rect_dist * in.color.a); } - if (quad_type.t == 1) { - var px_range = 3.5; + if quad_type.t == 1 { + var px_range = 5.0; var tex_dimensions = textureDimensions(font_texture); var msdf_unit = vec2<f32>(px_range, px_range) / vec2<f32>(f32(tex_dimensions.x), f32(tex_dimensions.y)); var x = textureSample(font_texture, font_sampler, vec2<f32>(in.uv.x, 1.0 - in.uv.y), i32(in.uv.z)); @@ -86,7 +86,7 @@ fn fragment(in: VertexOutput) -> @location(0) vec4<f32> { var a = clamp(sig_dist + 0.5, 0.0, 1.0); return vec4<f32>(in.color.rgb, a); } - if (quad_type.t == 2) { + if quad_type.t == 2 { var bs = min(in.border_radius, min(in.size.x, in.size.y)); var mask = sdRoundBox( in.pos.xy * 2.0 - (in.size.xy), diff --git a/src/render_primitive.rs b/src/render_primitive.rs index 9e11073..799af3e 100644 --- a/src/render_primitive.rs +++ b/src/render_primitive.rs @@ -56,6 +56,18 @@ impl RenderPrimitive { _ => (), } } + + pub fn to_string(&self) -> String { + match self { + RenderPrimitive::Clip { .. } => "Clip".into(), + RenderPrimitive::Quad { .. } => "Quad".into(), + RenderPrimitive::Text { .. } => "Text".into(), + RenderPrimitive::Image { .. } => "Image".into(), + RenderPrimitive::NinePatch { .. } => "NinePatch".into(), + RenderPrimitive::TextureAtlas { .. } => "TextureAtlas".into(), + RenderPrimitive::Empty { .. } => "Empty".into(), + } + } } impl From<&KStyle> for RenderPrimitive { diff --git a/src/styles/style.rs b/src/styles/style.rs index dc8bb05..9decc31 100644 --- a/src/styles/style.rs +++ b/src/styles/style.rs @@ -361,6 +361,8 @@ define_styles! { pub top: StyleProp<Units>, /// The width of this widget pub width: StyleProp<Units>, + /// The z-index relative to it's parent. + pub z_index: StyleProp<i32>, } } @@ -402,6 +404,7 @@ impl KStyle { row_between: StyleProp::Default, top: StyleProp::Default, width: StyleProp::Default, + z_index: StyleProp::Default, } } } diff --git a/src/tree.rs b/src/tree.rs index 1f64537..5be5caf 100644 --- a/src/tree.rs +++ b/src/tree.rs @@ -78,10 +78,6 @@ impl Tree { children } else { // Is root node - self.root_node = None; - self.parents.clear(); - self.children.clear(); - Vec::default() } } @@ -358,7 +354,7 @@ impl Tree { .iter() .map(|(id, node, parent_node, change)| { if change[0] == Change::Deleted { - return (0, *node, *parent_node, change.clone()); + return (*id, *node, *parent_node, change.clone()); } else if change[0] == Change::Inserted { let child_id = other_tree .children @@ -672,6 +668,10 @@ impl Tree { } } } + + pub fn down_iter_at(&self, node: WrappedIndex, include_self: bool) -> DownwardIterator { + DownwardIterator::new(self, Some(node), include_self) + } } /// An iterator that performs a depth-first traversal down a tree starting diff --git a/src/widget.rs b/src/widget.rs index c079b2d..f6e2381 100644 --- a/src/widget.rs +++ b/src/widget.rs @@ -38,6 +38,12 @@ pub fn widget_update_with_context< // Uses bevy state changes to see if context has changed. if let Some(context_entity) = widget_context.get_context_entity::<Context>(entity) { if context_query.contains(context_entity) { + log::trace!( + "Entity context: {} has changed! {}-{}", + std::any::type_name::<Context>(), + widget_param.widget_names.get(entity).unwrap().0, + entity.id() + ); return true; } } @@ -66,6 +72,11 @@ impl<'w, 's, Props: PartialEq + Component, State: PartialEq + Component> previous_entity: Entity, ) -> bool { if !self.mounted_query.is_empty() { + log::trace!( + "Entity was mounted! {}-{}", + self.widget_names.get(current_entity).unwrap().0, + current_entity.id() + ); return true; } @@ -91,6 +102,11 @@ impl<'w, 's, Props: PartialEq + Component, State: PartialEq + Component> self.children_query.get(previous_entity), ) { if children != old_children { + log::trace!( + "Entity children have changed! {}-{}", + self.widget_names.get(current_entity).unwrap().0, + current_entity.id() + ); return true; } } diff --git a/src/widget_context.rs b/src/widget_context.rs index dd9cdb9..28c5839 100644 --- a/src/widget_context.rs +++ b/src/widget_context.rs @@ -23,8 +23,9 @@ pub struct KayakWidgetContext { new_tree: Arc<RwLock<Tree>>, context_entities: ContextEntities, layout_cache: Arc<RwLock<LayoutCache>>, - index: Arc<RwLock<HashMap<Entity, usize>>>, + pub(crate) index: Arc<RwLock<HashMap<Entity, usize>>>, widget_state: WidgetState, + order_tree: Arc<RwLock<Tree>>, } impl KayakWidgetContext { @@ -33,14 +34,17 @@ impl KayakWidgetContext { context_entities: ContextEntities, layout_cache: Arc<RwLock<LayoutCache>>, widget_state: WidgetState, + order_tree: Arc<RwLock<Tree>>, + index: Arc<RwLock<HashMap<Entity, usize>>>, ) -> Self { Self { old_tree, new_tree: Arc::new(RwLock::new(Tree::default())), context_entities, layout_cache, - index: Arc::new(RwLock::new(HashMap::default())), + index, widget_state, + order_tree, } } @@ -121,9 +125,9 @@ impl KayakWidgetContext { children } - fn get_children_old(&self, entity: Entity) -> Vec<Entity> { + fn get_children_ordered(&self, entity: Entity) -> Vec<Entity> { let mut children = vec![]; - if let Ok(tree) = self.old_tree.read() { + if let Ok(tree) = self.order_tree.read() { let iterator = tree.child_iter(WrappedIndex(entity)); children = iterator.map(|index| index.0).collect::<Vec<_>>(); @@ -164,15 +168,42 @@ impl KayakWidgetContext { self.widget_state.get(widget_entity) } - /// Returns a child entity or none if it does not exist. + /// Returns a new/existing widget entity. /// Because a re-render can potentially spawn new entities it's advised to use this /// to avoid creating a new entity. - pub fn get_child_at(&self, entity: Option<Entity>) -> Option<Entity> { - if let Some(entity) = entity { - let children = self.get_children_old(entity); - return children.get(self.get_and_add_index(entity)).cloned(); + pub fn spawn_widget(&self, commands: &mut Commands, parent_id: Option<Entity>) -> Entity { + let mut entity = None; + if let Some(parent_entity) = parent_id { + let children = self.get_children_ordered(parent_entity); + let index = self.get_and_add_index(parent_entity); + let child = children.get(index).cloned(); + if let Some(child) = child { + log::trace!( + "Reusing widget entity {:?} with parent: {:?}!", + child.id(), + parent_id.unwrap().id() + ); + entity = Some(commands.get_or_spawn(child).id()); + } } - None + + // If we have no entity spawn it! + if entity.is_none() { + entity = Some(commands.spawn_empty().id()); + log::trace!( + "Spawning new widget with entity {:?}!", + entity.unwrap().id() + ); + + // We need to add it to the ordered tree + if let Ok(mut tree) = self.order_tree.try_write() { + tree.add( + WrappedIndex(entity.unwrap()), + parent_id.and_then(|parent| Some(WrappedIndex(parent))), + ) + } + } + entity.unwrap() } /// Removes all matching children from the tree. @@ -186,6 +217,9 @@ impl KayakWidgetContext { /// Adds a new widget to the tree with a given parent. pub fn add_widget(&self, parent: Option<Entity>, entity: Entity) { + if let Some(parent) = parent { + assert!(parent != entity, "Parent cannot equal entity!"); + } if let Ok(mut tree) = self.new_tree.write() { tree.add( WrappedIndex(entity), diff --git a/src/widgets/app.rs b/src/widgets/app.rs index 8aa40a1..5d80ad7 100644 --- a/src/widgets/app.rs +++ b/src/widgets/app.rs @@ -1,4 +1,5 @@ use bevy::prelude::*; +use kayak_ui_macros::rsx; use morphorm::Units; use crate::{ @@ -10,6 +11,8 @@ use crate::{ CameraUIKayak, }; +use super::ClipBundle; + #[derive(Component, Default, Clone, PartialEq)] pub struct KayakApp; @@ -60,7 +63,7 @@ pub fn app_update( /// TODO: USE CAMERA INSTEAD OF WINDOW!! pub fn app_render( In((widget_context, entity)): In<(KayakWidgetContext, Entity)>, - _: Commands, + mut commands: Commands, windows: Res<Windows>, mut query: Query<(&mut KStyle, &KChildren)>, camera: Query<&Camera, With<CameraUIKayak>>, @@ -88,7 +91,13 @@ pub fn app_render( app_style.height = StyleProp::Value(Units::Pixels(height)); } app_style.render_command = StyleProp::Value(RenderCommand::Layout); - children.process(&widget_context, Some(entity)); + // children.process(&widget_context, Some(entity)); + let parent_id = Some(entity); + rsx! { + <ClipBundle + children={children.clone()} + /> + } } true diff --git a/src/widgets/button.rs b/src/widgets/button.rs index 3091064..419a5a7 100644 --- a/src/widgets/button.rs +++ b/src/widgets/button.rs @@ -2,17 +2,27 @@ use bevy::{ prelude::{Bundle, Color, Commands, Component, Entity, In, Query}, window::CursorIcon, }; +use kayak_font::Alignment; +use kayak_ui_macros::rsx; use crate::{ context::WidgetName, + event::{Event, EventType}, + event_dispatcher::EventDispatcherContext, on_event::OnEvent, prelude::{KChildren, KayakWidgetContext, Units}, - styles::{Corner, KCursorIcon, KStyle, RenderCommand, StyleProp}, + styles::{Corner, Edge, KCursorIcon, KStyle, RenderCommand, StyleProp}, widget::Widget, + widget_state::WidgetState, }; +use super::{ElementBundle, TextProps, TextWidgetBundle}; + #[derive(Component, PartialEq, Clone, Default)] -pub struct KButton; +pub struct KButton { + pub text: String, + pub user_styles: KStyle, +} /// Default button widget /// Accepts an OnEvent component @@ -21,7 +31,6 @@ pub struct KButtonBundle { pub button: KButton, pub styles: KStyle, pub on_event: OnEvent, - pub children: KChildren, pub widget_name: WidgetName, } @@ -31,7 +40,6 @@ impl Default for KButtonBundle { button: Default::default(), styles: Default::default(), on_event: Default::default(), - children: KChildren::default(), widget_name: KButton::default().get_name(), } } @@ -39,32 +47,95 @@ impl Default for KButtonBundle { impl Widget for KButton {} +#[derive(Component, Default, Debug, Clone, PartialEq)] +pub struct ButtonState { + hovering: bool, +} + pub fn button_render( In((widget_context, entity)): In<(KayakWidgetContext, Entity)>, - _: Commands, - mut query: Query<(&mut KStyle, &KChildren)>, + mut commands: Commands, + mut query: Query<(&KButton, &mut KStyle)>, + state_query: Query<&ButtonState>, ) -> bool { - if let Ok((mut style, children)) = query.get_mut(entity) { - *style = KStyle::default() - .with_style(KStyle { - render_command: StyleProp::Value(RenderCommand::Quad), - ..Default::default() - }) - .with_style(style.clone()) - .with_style(KStyle { - render_command: StyleProp::Value(RenderCommand::Quad), - background_color: StyleProp::Value(Color::rgba(0.0781, 0.0898, 0.101, 1.0)), - border_radius: StyleProp::Value(Corner::all(5.0)), - height: StyleProp::Value(Units::Pixels(45.0)), - padding_left: StyleProp::Value(Units::Stretch(1.0)), - padding_right: StyleProp::Value(Units::Stretch(1.0)), - padding_bottom: StyleProp::Value(Units::Stretch(1.0)), - padding_top: StyleProp::Value(Units::Stretch(1.0)), - cursor: StyleProp::Value(KCursorIcon(CursorIcon::Hand)), - ..Default::default() - }); + if let Ok((button, mut style)) = query.get_mut(entity) { + let hover_color = Color::rgba(0.592, 0.627, 0.749, 1.0); //Color::rgba(0.549, 0.666, 0.933, 1.0); + // let color = Color::rgba(0.254, 0.270, 0.349, 1.0); + let state_entity = + widget_context.use_state(&mut commands, entity, ButtonState { hovering: false }); - children.process(&widget_context, Some(entity)); + if let Ok(state) = state_query.get(state_entity) { + *style = KStyle::default() + .with_style(KStyle { + render_command: StyleProp::Value(RenderCommand::Quad), + ..Default::default() + }) + .with_style(button.user_styles.clone()) + .with_style(KStyle { + background_color: Color::rgba(0.254, 0.270, 0.349, 1.0).into(), + border_color: if state.hovering { + hover_color.into() + } else { + Color::rgba(0.254, 0.270, 0.349, 1.0).into() + }, + border: Edge::all(2.0).into(), + border_radius: StyleProp::Value(Corner::all(10.0)), + height: StyleProp::Value(Units::Pixels(28.0)), + width: Units::Stretch(1.0).into(), + cursor: StyleProp::Value(KCursorIcon(CursorIcon::Hand)), + ..Default::default() + }); + + let on_event = OnEvent::new( + move |In((event_dispatcher_context, _, mut event, _entity)): In<( + EventDispatcherContext, + WidgetState, + Event, + Entity, + )>, + mut query: Query<&mut ButtonState>| { + if let Ok(mut button) = query.get_mut(state_entity) { + match event.event_type { + EventType::MouseIn(..) => { + event.stop_propagation(); + button.hovering = true; + } + EventType::MouseOut(..) => { + button.hovering = false; + } + _ => {} + } + } + (event_dispatcher_context, event) + }, + ); + + let parent_id = Some(entity); + rsx! { + <ElementBundle + styles={KStyle { + width: Units::Stretch(1.0).into(), + height: Units::Stretch(1.0).into(), + ..Default::default() + }} + on_event={on_event} + > + <TextWidgetBundle + text={TextProps { + alignment: Alignment::Middle, + content: button.text.clone(), + size: 16.0, + user_styles: KStyle { + top: Units::Stretch(1.0).into(), + bottom: Units::Stretch(1.0).into(), + ..Default::default() + }, + ..Default::default() + }} + /> + </ElementBundle> + } + } } true diff --git a/src/widgets/clip.rs b/src/widgets/clip.rs index 8f81862..386bae9 100644 --- a/src/widgets/clip.rs +++ b/src/widgets/clip.rs @@ -45,9 +45,10 @@ impl Default for ClipBundle { pub fn clip_render( In((widget_context, entity)): In<(KayakWidgetContext, Entity)>, _: Commands, - mut query: Query<(&KStyle, &KChildren)>, + mut query: Query<(&mut KStyle, &KChildren)>, ) -> bool { - if let Ok((_, children)) = query.get_mut(entity) { + if let Ok((mut styles, children)) = query.get_mut(entity) { + styles.render_command = StyleProp::Value(RenderCommand::Clip); children.process(&widget_context, Some(entity)); } true diff --git a/src/widgets/mod.rs b/src/widgets/mod.rs index 586c634..a11e2cb 100644 --- a/src/widgets/mod.rs +++ b/src/widgets/mod.rs @@ -34,10 +34,11 @@ mod text; mod text_box; mod texture_atlas; mod window; +mod window_context_provider; pub use app::{KayakApp, KayakAppBundle}; pub use background::{Background, BackgroundBundle}; -pub use button::{KButton, KButtonBundle}; +pub use button::{ButtonState, KButton, KButtonBundle}; pub use clip::{Clip, ClipBundle}; pub use element::{Element, ElementBundle}; pub use image::{KImage, KImageBundle}; @@ -53,7 +54,10 @@ pub use scroll::{ pub use text::{TextProps, TextWidgetBundle}; pub use text_box::{TextBoxBundle, TextBoxProps, TextBoxState}; pub use texture_atlas::{TextureAtlasBundle, TextureAtlasProps}; -pub use window::{KWindow, WindowBundle}; +pub use window::{KWindow, KWindowState, WindowBundle}; +pub use window_context_provider::{ + WindowContext, WindowContextProvider, WindowContextProviderBundle, +}; use app::{app_render, app_update}; use background::background_render; @@ -76,7 +80,7 @@ use crate::{ widget::{widget_update, widget_update_with_context, EmptyState, Widget}, }; -use self::window::KWindowState; +use self::window_context_provider::window_context_render; pub struct KayakWidgets; @@ -88,9 +92,10 @@ impl Plugin for KayakWidgets { fn add_widget_systems(mut context: ResMut<KayakRootContext>) { context.add_widget_data::<KayakApp, EmptyState>(); - context.add_widget_data::<KButton, EmptyState>(); + context.add_widget_data::<KButton, ButtonState>(); context.add_widget_data::<TextProps, EmptyState>(); context.add_widget_data::<KWindow, KWindowState>(); + context.add_widget_data::<WindowContextProvider, EmptyState>(); context.add_widget_data::<Background, EmptyState>(); context.add_widget_data::<Clip, EmptyState>(); context.add_widget_data::<KImage, EmptyState>(); @@ -106,7 +111,7 @@ fn add_widget_systems(mut context: ResMut<KayakRootContext>) { context.add_widget_system(KayakApp::default().get_name(), app_update, app_render); context.add_widget_system( KButton::default().get_name(), - widget_update::<KButton, EmptyState>, + widget_update::<KButton, ButtonState>, button_render, ); context.add_widget_system( @@ -114,9 +119,14 @@ fn add_widget_systems(mut context: ResMut<KayakRootContext>) { widget_update::<TextProps, EmptyState>, text_render, ); + context.add_widget_system( + WindowContextProvider::default().get_name(), + widget_update::<WindowContextProvider, EmptyState>, + window_context_render, + ); context.add_widget_system( KWindow::default().get_name(), - widget_update::<KWindow, KWindowState>, + widget_update_with_context::<KWindow, KWindowState, WindowContext>, window_render, ); context.add_widget_system( diff --git a/src/widgets/scroll/scroll_bar.rs b/src/widgets/scroll/scroll_bar.rs index f56c754..5d63688 100644 --- a/src/widgets/scroll/scroll_bar.rs +++ b/src/widgets/scroll/scroll_bar.rs @@ -78,7 +78,7 @@ pub fn scroll_bar_render( let thickness = scrollbar.thickness; let thumb_color = scrollbar .thumb_color - .unwrap_or_else(|| Color::rgba(0.2981, 0.3098, 0.321, 0.95)); + .unwrap_or_else(|| Color::rgba(0.239, 0.258, 0.337, 1.0)); let thumb_styles = scrollbar.thumb_styles.clone(); let track_color = scrollbar .track_color diff --git a/src/widgets/scroll/scroll_box.rs b/src/widgets/scroll/scroll_box.rs index b294e4a..60eb4df 100644 --- a/src/widgets/scroll/scroll_box.rs +++ b/src/widgets/scroll/scroll_box.rs @@ -85,7 +85,7 @@ pub fn scroll_box_render( if let Ok((scroll_box, mut styles, scroll_box_children, mut on_layout)) = query.get_mut(entity) { if let Some(context_entity) = widget_context.get_context_entity::<ScrollContext>(entity) { - if let Ok(scroll_context) = context_query.p1().get(context_entity).cloned() { + if let Ok(scroll_context) = context_query.p0().get(context_entity).cloned() { // === Configuration === // let always_show_scrollbar = scroll_box.always_show_scrollbar; let disable_horizontal = scroll_box.disable_horizontal; diff --git a/src/widgets/scroll/scroll_content.rs b/src/widgets/scroll/scroll_content.rs index e3af6da..4f2a2fe 100644 --- a/src/widgets/scroll/scroll_content.rs +++ b/src/widgets/scroll/scroll_content.rs @@ -70,7 +70,7 @@ pub fn scroll_content_render( render_command: RenderCommand::Layout.into(), layout_type: LayoutType::Column.into(), min_width: Units::Pixels( - scroll_context.scrollbox_width - scroll_context.pad_x, + scroll_context.scrollbox_width - scroll_context.pad_x - 10.0, ) .into(), min_height: Units::Stretch( diff --git a/src/widgets/text.rs b/src/widgets/text.rs index 467628e..790272d 100644 --- a/src/widgets/text.rs +++ b/src/widgets/text.rs @@ -1,5 +1,6 @@ use bevy::prelude::*; use kayak_font::Alignment; +use kayak_ui_macros::rsx; use crate::{ context::WidgetName, @@ -8,6 +9,8 @@ use crate::{ widget::Widget, }; +use super::ElementBundle; + #[derive(Component, Debug, PartialEq, Clone)] pub struct TextProps { /// The string to display @@ -28,6 +31,8 @@ pub struct TextProps { pub size: f32, /// Text alignment. pub alignment: Alignment, + /// Custom styles to pass in. + pub user_styles: KStyle, } impl Default for TextProps { @@ -39,6 +44,7 @@ impl Default for TextProps { show_cursor: false, size: -1.0, alignment: Alignment::Start, + user_styles: Default::default(), } } } @@ -58,36 +64,60 @@ impl Default for TextWidgetBundle { fn default() -> Self { Self { text: Default::default(), - styles: Default::default(), + styles: KStyle { + ..Default::default() + }, widget_name: TextProps::default().get_name(), } } } pub fn text_render( - In((_, entity)): In<(KayakWidgetContext, Entity)>, - mut query: Query<(&mut KStyle, &TextProps)>, + In((widget_context, entity)): In<(KayakWidgetContext, Entity)>, + mut commands: Commands, + mut query: Query<&TextProps>, ) -> bool { - if let Ok((mut style, text)) = query.get_mut(entity) { - style.render_command = StyleProp::Value(RenderCommand::Text { - content: text.content.clone(), - alignment: text.alignment, - }); + if let Ok(text) = query.get_mut(entity) { + let mut style = KStyle::default(); - if let Some(ref font) = text.font { - style.font = StyleProp::Value(font.clone()); - } - if text.show_cursor { - style.cursor = StyleProp::Value(KCursorIcon(CursorIcon::Text)); - } - if text.size >= 0.0 { - style.font_size = StyleProp::Value(text.size); - } - if let Some(line_height) = text.line_height { - style.line_height = StyleProp::Value(line_height); - } + style = style.with_style(&text.user_styles).with_style(KStyle { + render_command: StyleProp::Value(RenderCommand::Text { + content: text.content.clone(), + alignment: text.alignment, + }), + font: if let Some(ref font) = text.font { + StyleProp::Value(font.clone()) + } else { + StyleProp::default() + }, + cursor: if text.show_cursor { + StyleProp::Value(KCursorIcon(CursorIcon::Text)) + } else { + StyleProp::default() + }, + font_size: if text.size >= 0.0 { + StyleProp::Value(text.size) + } else { + StyleProp::default() + }, + line_height: if let Some(line_height) = text.line_height { + StyleProp::Value(line_height) + } else { + StyleProp::default() + }, + // bottom: Units::Stretch(1.0).into(), + // top: Units::Stretch(1.0).into(), + // left: Units::Stretch(0.0).into(), + // right: Units::Stretch(0.0).into(), + ..Default::default() + }); // style.cursor = StyleProp::Value(KCursorIcon(CursorIcon::Hand)); + + let parent_id = Some(entity); + rsx! { + <ElementBundle styles={style} /> + } } true diff --git a/src/widgets/text_box.rs b/src/widgets/text_box.rs index b66738c..5c92aa9 100644 --- a/src/widgets/text_box.rs +++ b/src/widgets/text_box.rs @@ -8,7 +8,7 @@ use crate::{ on_event::OnEvent, on_layout::OnLayout, prelude::{KChildren, KayakWidgetContext, OnChange}, - styles::{Corner, KStyle, RenderCommand, StyleProp, Units}, + styles::{Edge, KStyle, RenderCommand, StyleProp, Units}, widget::Widget, widget_state::WidgetState, widgets::{ @@ -74,6 +74,7 @@ pub fn text_box_render( In((widget_context, entity)): In<(KayakWidgetContext, Entity)>, mut commands: Commands, mut query: Query<(&mut KStyle, &TextBoxProps, &mut OnEvent, &OnChange)>, + state_query: Query<&TextBoxState>, ) -> bool { if let Ok((mut styles, text_box, mut on_event, on_change)) = query.get_mut(entity) { let state_entity = widget_context.use_state::<TextBoxState>( @@ -82,102 +83,114 @@ pub fn text_box_render( TextBoxState::default(), ); - *styles = KStyle::default() - // Required styles - .with_style(KStyle { - render_command: RenderCommand::Layout.into(), - ..Default::default() - }) - // Apply any prop-given styles - .with_style(&*styles) - // If not set by props, apply these styles - .with_style(KStyle { - top: Units::Pixels(0.0).into(), - bottom: Units::Pixels(0.0).into(), + if let Ok(state) = state_query.get(state_entity) { + *styles = KStyle::default() + // Required styles + .with_style(KStyle { + render_command: RenderCommand::Layout.into(), + ..Default::default() + }) + // Apply any prop-given styles + .with_style(&*styles) + // If not set by props, apply these styles + .with_style(KStyle { + top: Units::Pixels(0.0).into(), + bottom: Units::Pixels(0.0).into(), + height: Units::Pixels(26.0).into(), + // cursor: CursorIcon::Text.into(), + ..Default::default() + }); + + let background_styles = KStyle { + render_command: StyleProp::Value(RenderCommand::Quad), + background_color: Color::rgba(0.160, 0.172, 0.235, 1.0).into(), + border_color: if state.focused { + Color::rgba(0.933, 0.745, 0.745, 1.0).into() + } else { + Color::rgba(0.360, 0.380, 0.474, 1.0).into() + }, + border: Edge::new(0.0, 0.0, 0.0, 2.0).into(), height: Units::Pixels(26.0).into(), - // cursor: CursorIcon::Text.into(), + padding_left: Units::Pixels(5.0).into(), + padding_right: Units::Pixels(5.0).into(), ..Default::default() - }); - - let background_styles = KStyle { - render_command: StyleProp::Value(RenderCommand::Quad), - background_color: StyleProp::Value(Color::rgba(0.176, 0.196, 0.215, 1.0)), - border_radius: Corner::all(5.0).into(), - height: Units::Pixels(26.0).into(), - padding_left: Units::Pixels(5.0).into(), - padding_right: Units::Pixels(5.0).into(), - ..Default::default() - }; + }; - let current_value = text_box.value.clone(); - let cloned_on_change = on_change.clone(); + let current_value = text_box.value.clone(); + let cloned_on_change = on_change.clone(); - *on_event = OnEvent::new( - move |In((event_dispatcher_context, _, mut event, _entity)): In<( - EventDispatcherContext, - WidgetState, - Event, - Entity, - )>, - mut state_query: Query<&mut TextBoxState>| { - match event.event_type { - EventType::CharInput { c } => { - let mut current_value = current_value.clone(); - let cloned_on_change = cloned_on_change.clone(); - if let Ok(state) = state_query.get(state_entity) { - if !state.focused { + *on_event = OnEvent::new( + move |In((event_dispatcher_context, _, mut event, _entity)): In<( + EventDispatcherContext, + WidgetState, + Event, + Entity, + )>, + mut state_query: Query<&mut TextBoxState>| { + match event.event_type { + EventType::CharInput { c } => { + let mut current_value = current_value.clone(); + let cloned_on_change = cloned_on_change.clone(); + if let Ok(state) = state_query.get(state_entity) { + if !state.focused { + return (event_dispatcher_context, event); + } + } else { return (event_dispatcher_context, event); } - } else { - return (event_dispatcher_context, event); - } - if is_backspace(c) { - if !current_value.is_empty() { - current_value.truncate(current_value.len() - 1); + if is_backspace(c) { + if !current_value.is_empty() { + current_value.truncate(current_value.len() - 1); + } + } else if !c.is_control() { + current_value.push(c); } - } else if !c.is_control() { - current_value.push(c); + cloned_on_change.set_value(current_value); + event.add_system(cloned_on_change); } - cloned_on_change.set_value(current_value); - event.add_system(cloned_on_change); - } - EventType::Focus => { - if let Ok(mut state) = state_query.get_mut(state_entity) { - state.focused = true; + EventType::Focus => { + if let Ok(mut state) = state_query.get_mut(state_entity) { + state.focused = true; + } } - } - EventType::Blur => { - if let Ok(mut state) = state_query.get_mut(state_entity) { - state.focused = false; + EventType::Blur => { + if let Ok(mut state) = state_query.get_mut(state_entity) { + state.focused = false; + } } + _ => {} } - _ => {} - } - (event_dispatcher_context, event) - }, - ); + (event_dispatcher_context, event) + }, + ); - let parent_id = Some(entity); - rsx! { - <BackgroundBundle styles={background_styles}> - <ClipBundle styles={KStyle { - height: Units::Pixels(26.0).into(), - padding_left: StyleProp::Value(Units::Stretch(0.0)), - padding_right: StyleProp::Value(Units::Stretch(0.0)), - padding_bottom: StyleProp::Value(Units::Stretch(1.0)), - padding_top: StyleProp::Value(Units::Stretch(1.0)), - ..Default::default() - }}> - <TextWidgetBundle - text={TextProps { - content: text_box.value.clone(), - size: 14.0, - line_height: Some(18.0), - ..Default::default() - }} - /> - </ClipBundle> - </BackgroundBundle> + let parent_id = Some(entity); + rsx! { + <BackgroundBundle styles={background_styles}> + <ClipBundle styles={KStyle { + height: Units::Pixels(26.0).into(), + padding_left: StyleProp::Value(Units::Stretch(0.0)), + padding_right: StyleProp::Value(Units::Stretch(0.0)), + padding_bottom: StyleProp::Value(Units::Stretch(1.0)), + padding_top: StyleProp::Value(Units::Stretch(1.0)), + ..Default::default() + }}> + <TextWidgetBundle + text={TextProps { + content: text_box.value.clone(), + size: 14.0, + line_height: Some(18.0), + user_styles: KStyle { + top: Units::Stretch(1.0).into(), + bottom: Units::Stretch(1.0).into(), + ..Default::default() + }, + ..Default::default() + }} + /> + </ClipBundle> + </BackgroundBundle> + } } } diff --git a/src/widgets/window.rs b/src/widgets/window.rs index d51c0f5..6ccf5ba 100644 --- a/src/widgets/window.rs +++ b/src/widgets/window.rs @@ -14,12 +14,14 @@ use crate::{ styles::{Corner, Edge, KCursorIcon, KPositionType, KStyle, RenderCommand, StyleProp, Units}, widget::Widget, widget_state::WidgetState, + Focusable, }; use super::{ background::BackgroundBundle, clip::ClipBundle, text::{TextProps, TextWidgetBundle}, + window_context_provider::WindowContext, ElementBundle, }; @@ -33,6 +35,10 @@ pub struct KWindow { pub size: Vec2, /// The text to display in the window's title bar pub title: String, + /// Styles for the main window quad. + pub window_styles: KStyle, + /// A set of styles to apply to the children element wrapper. + pub children_styles: KStyle, } #[derive(Component, PartialEq, Clone, Debug, Default)] @@ -40,6 +46,7 @@ pub struct KWindowState { pub is_dragging: bool, pub offset: Vec2, pub position: Vec2, + pub focused: bool, } impl Widget for KWindow {} @@ -69,10 +76,29 @@ impl Default for WindowBundle { pub fn window_render( In((widget_context, window_entity)): In<(KayakWidgetContext, Entity)>, mut commands: Commands, - mut query: Query<(&KStyle, &KChildren, &KWindow)>, + mut query: Query<(&mut KStyle, &KChildren, &KWindow)>, state_query: Query<&KWindowState>, + mut context_query: Query<&mut WindowContext>, ) -> bool { - if let Ok((window_style, window_children, window)) = query.get_mut(window_entity) { + if let Ok((mut window_style, window_children, window)) = query.get_mut(window_entity) { + let possible_context_entity = + widget_context.get_context_entity::<WindowContext>(window_entity); + let z_index = if let Some(window_context_entity) = possible_context_entity { + if let Ok(mut window_context) = context_query.get_mut(window_context_entity) { + Some(window_context.get_or_add(window_entity)) + } else { + None + } + } else { + None + }; + + window_style.z_index = if z_index.is_some() { + StyleProp::Value(z_index.unwrap() as i32 * 1000) + } else { + StyleProp::Default + }; + let title = window.title.clone(); let state_entity = widget_context.use_state( @@ -82,18 +108,55 @@ pub fn window_render( position: window.initial_position, offset: Vec2::ZERO, is_dragging: false, + focused: false, }, ); if let Ok(state) = state_query.get(state_entity) { let parent_id = Some(window_entity); + + let focus_event = OnEvent::new( + move |In((event_dispatcher_context, _, mut event, _entity)): In<( + EventDispatcherContext, + WidgetState, + Event, + Entity, + )>, + mut query: Query<&mut KWindowState>, + mut context_query: Query<&mut WindowContext>| { + if let Ok(mut window) = query.get_mut(state_entity) { + event.stop_propagation(); + event.prevent_default(); + match event.event_type { + EventType::Focus => { + window.focused = true; + if let Some(window_context_entity) = possible_context_entity { + if let Ok(mut context) = + context_query.get_mut(window_context_entity) + { + context.shift_to_top(window_entity); + } + } + } + EventType::Blur => { + window.focused = false; + window.is_dragging = false; + } + _ => {} + } + } + (event_dispatcher_context, event) + }, + ); + rsx! { <ElementBundle - styles={KStyle { - background_color: StyleProp::Value(Color::rgba(0.125, 0.125, 0.125, 1.0)), - border_color: StyleProp::Value(Color::rgba(0.0781, 0.0898, 0.101, 1.0)), - border: StyleProp::Value(Edge::all(4.0)), - border_radius: StyleProp::Value(Corner::all(5.0)), + id={"window_entity"} + styles={window.window_styles.clone().with_style(KStyle { + background_color: StyleProp::Value(Color::rgba(0.188, 0.203, 0.274, 1.0)), + border_color: StyleProp::Value(if state.focused { Color::rgba(0.933, 0.745, 0.745, 1.0) } else { Color::rgba(0.239, 0.258, 0.337, 1.0) }), + border: StyleProp::Value(Edge::all(2.0)), + border_radius: StyleProp::Value(Corner::all(10.0)), render_command: StyleProp::Value(RenderCommand::Quad), position_type: StyleProp::Value(KPositionType::SelfDirected), left: StyleProp::Value(Units::Pixels(state.position.x)), @@ -102,16 +165,18 @@ pub fn window_render( height: StyleProp::Value(Units::Pixels(window.size.y)), min_width: StyleProp::Value(Units::Pixels(window.size.x)), min_height: StyleProp::Value(Units::Pixels(window.size.y)), - ..window_style.clone() - }} + ..Default::default() + })} + on_event={focus_event} > + {commands.entity(window_entity).insert(Focusable)} <BackgroundBundle id={"title_bar_entity"} styles={KStyle { cursor: StyleProp::Value(KCursorIcon(CursorIcon::Hand)), render_command: StyleProp::Value(RenderCommand::Quad), - background_color: StyleProp::Value(Color::rgba(0.0781, 0.0898, 0.101, 1.0)), - border_radius: StyleProp::Value(Corner::all(5.0)), + background_color: StyleProp::Value(Color::rgba(0.188, 0.203, 0.274, 1.0)), + border_radius: Corner::all(10.0).into(), height: StyleProp::Value(Units::Pixels(24.0)), width: StyleProp::Value(Units::Stretch(1.0)), left: StyleProp::Value(Units::Pixels(0.0)), @@ -119,6 +184,8 @@ pub fn window_render( top: StyleProp::Value(Units::Pixels(0.0)), bottom: StyleProp::Value(Units::Pixels(0.0)), padding_left: StyleProp::Value(Units::Pixels(5.0)), + padding_top: Units::Stretch(1.0).into(), + padding_bottom: Units::Stretch(1.0).into(), ..KStyle::default() }} > @@ -126,21 +193,24 @@ pub fn window_render( text={TextProps { content: title.clone(), size: 14.0, - line_height: Some(25.0), + user_styles: KStyle { + top: Units::Stretch(1.0).into(), + bottom: Units::Stretch(1.0).into(), + ..Default::default() + }, ..Default::default() }} - styles={KStyle { - height: StyleProp::Value(Units::Pixels(25.0)), - ..KStyle::default() - }} /> </BackgroundBundle> { + // This code needs to go after the closing tag for the background bundle as that is when the + // widget is "spawned". Adding this code after just the starting tag will cause this OnEvent + // to be wiped out with a default version. if window.draggable { commands .entity(title_bar_entity) .insert(OnEvent::new( - move |In((mut event_dispatcher_context, _, event, entity)): In<( + move |In((mut event_dispatcher_context, _, mut event, entity)): In<( EventDispatcherContext, WidgetState, Event, @@ -148,6 +218,8 @@ pub fn window_render( )>, mut query: Query<&mut KWindowState>| { if let Ok(mut window) = query.get_mut(state_entity) { + event.prevent_default(); + event.stop_propagation(); match event.event_type { EventType::MouseDown(data) => { event_dispatcher_context.capture_cursor(entity); @@ -177,14 +249,22 @@ pub fn window_render( )); } } - <ClipBundle + <BackgroundBundle styles={KStyle { + background_color: StyleProp::Value(Color::rgba(0.239, 0.258, 0.337, 1.0)), + width: Units::Stretch(1.0).into(), + height: Units::Pixels(2.0).into(), + ..Default::default() + }} + /> + <ClipBundle + styles={window.children_styles.clone().with_style(KStyle { top: Units::Pixels(10.0).into(), left: Units::Pixels(10.0).into(), right: Units::Pixels(10.0).into(), bottom: Units::Pixels(10.0).into(), ..Default::default() - }} + })} children={window_children.clone()} /> </ElementBundle> diff --git a/src/widgets/window_context_provider.rs b/src/widgets/window_context_provider.rs new file mode 100644 index 0000000..6e424c5 --- /dev/null +++ b/src/widgets/window_context_provider.rs @@ -0,0 +1,81 @@ +use bevy::{prelude::*, utils::HashMap}; + +use crate::{ + children::KChildren, context::WidgetName, prelude::KayakWidgetContext, widget::Widget, +}; + +#[derive(Component, Default, Debug, Clone, PartialEq)] +pub struct WindowContext { + order: Vec<Entity>, + z_indices: HashMap<Entity, usize>, +} + +impl WindowContext { + pub fn add(&mut self, entity: Entity, index: usize) { + self.order.push(entity); + self.z_indices.insert(entity, index); + } + + pub fn shift_to_top(&mut self, entity: Entity) { + if let Some(index) = self.order.iter().position(|e| e.id() == entity.id()) { + self.order.remove(index); + self.order.push(entity); + } + + self.z_indices.clear(); + for (index, entity) in self.order.iter().enumerate() { + self.z_indices.insert(*entity, index); + } + } + + pub fn get(&self, entity: Entity) -> usize { + *self.z_indices.get(&entity).unwrap() + } + + pub fn get_or_add(&mut self, entity: Entity) -> usize { + if self.order.iter().any(|e| e.id() == entity.id()) { + self.get(entity) + } else { + self.add(entity, 0); + self.shift_to_top(entity); + self.get(entity) + } + } +} + +#[derive(Component, Default, Debug, Clone, PartialEq)] +pub struct WindowContextProvider; + +impl Widget for WindowContextProvider {} + +#[derive(Bundle, Debug, Clone, PartialEq)] +pub struct WindowContextProviderBundle { + pub context_provider: WindowContextProvider, + pub children: KChildren, + pub widget_name: WidgetName, +} + +impl Default for WindowContextProviderBundle { + fn default() -> Self { + Self { + context_provider: Default::default(), + children: Default::default(), + widget_name: WindowContextProvider::default().get_name(), + } + } +} + +pub fn window_context_render( + In((widget_context, window_context_entity)): In<(KayakWidgetContext, Entity)>, + mut commands: Commands, + children_query: Query<&KChildren>, +) -> bool { + if let Ok(children) = children_query.get(window_context_entity) { + let context_entity = commands.spawn(WindowContext::default()).id(); + widget_context + .set_context_entity::<WindowContext>(Some(window_context_entity), context_entity); + children.process(&widget_context, Some(window_context_entity)); + } + + true +} -- GitLab