From 4702c2229da31297c1f3dc3969b45b6822427bb0 Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 12 Oct 2019 01:50:26 -0400 Subject: [PATCH] New node Linear sticky block Flat sticky block Slippy block --- mesecons_slippyblocks/depends.txt | 2 + mesecons_slippyblocks/init.lua | 76 +++++++++ .../textures/mesecons_slippyblocks.png | Bin 0 -> 373 bytes mesecons_stickyblocks_flat/depends.txt | 2 + mesecons_stickyblocks_flat/init.lua | 157 ++++++++++++++++++ .../textures/mesecons_stickyblocks_flat.png | Bin 0 -> 792 bytes .../mesecons_stickyblocks_flat_sticky.png | Bin 0 -> 661 bytes mesecons_stickyblocks_linear/depends.txt | 2 + mesecons_stickyblocks_linear/init.lua | 144 ++++++++++++++++ .../textures/mesecons_stickyblocks_linear.png | Bin 0 -> 714 bytes .../mesecons_stickyblocks_linear_sticky.png | Bin 0 -> 661 bytes 11 files changed, 383 insertions(+) create mode 100644 mesecons_slippyblocks/depends.txt create mode 100644 mesecons_slippyblocks/init.lua create mode 100644 mesecons_slippyblocks/textures/mesecons_slippyblocks.png create mode 100644 mesecons_stickyblocks_flat/depends.txt create mode 100644 mesecons_stickyblocks_flat/init.lua create mode 100644 mesecons_stickyblocks_flat/textures/mesecons_stickyblocks_flat.png create mode 100644 mesecons_stickyblocks_flat/textures/mesecons_stickyblocks_flat_sticky.png create mode 100644 mesecons_stickyblocks_linear/depends.txt create mode 100644 mesecons_stickyblocks_linear/init.lua create mode 100644 mesecons_stickyblocks_linear/textures/mesecons_stickyblocks_linear.png create mode 100644 mesecons_stickyblocks_linear/textures/mesecons_stickyblocks_linear_sticky.png diff --git a/mesecons_slippyblocks/depends.txt b/mesecons_slippyblocks/depends.txt new file mode 100644 index 0000000..01f085b --- /dev/null +++ b/mesecons_slippyblocks/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_mvps diff --git a/mesecons_slippyblocks/init.lua b/mesecons_slippyblocks/init.lua new file mode 100644 index 0000000..c9fc73c --- /dev/null +++ b/mesecons_slippyblocks/init.lua @@ -0,0 +1,76 @@ +-- Stippy blocks can be used together with pistons or movestones + + minetest.register_node("mesecons_slippyblocks:slippy_block", { + description = "Slippy block)", + drawtype = "nodebox", + tiles = {"mesecons_slippyblocks.png"}, + walkable = true, + pointable = true, + diggable = true, + buildable_to = true, + groups = {cracky=3,oddly_breakable_by_hand=3}, + drop = "mesecons_slippyblocks:slippy_block", + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.4375, -0.4375, 0.4375, 0.4375, 0.4375}, -- MiddleBox + {0.4375, 0.4375, -0.5, 0.5, 0.5, 0.5}, -- f1 + {0.4375, -0.5, -0.5, 0.5, -0.4375, 0.5}, -- f2 + {-0.5, 0.4375, -0.5, -0.4375, 0.5, 0.5}, -- f3 + {-0.5, -0.5, -0.5, -0.4375, -0.4375, 0.5}, -- f4 + {-0.5, -0.5, -0.5, 0.5, -0.4375, -0.4375}, -- r1 + {-0.5, 0.4375, -0.5, 0.5, 0.5, -0.4375}, -- r2 + {-0.5, 0.4375, 0.4375, 0.5, 0.5, 0.5}, -- r3 + {-0.5, -0.5, 0.4375, 0.5, -0.4375, 0.5}, -- r4 + {0.4375, -0.5, -0.5, 0.5, 0.5, -0.4375}, -- t1 + {-0.5, -0.5, -0.5, -0.4375, 0.5, -0.4375}, -- t2 + {-0.5, -0.5, 0.4375, -0.4375, 0.5, 0.5}, -- t3 + {0.4375, -0.5, 0.4375, 0.5, 0.5, 0.5}, -- t4 + } + }, + on_destruct = function(pos) + minetest.add_item(pos, "mesecons_slippyblocks:slippy_block") + end, + -- Swap the node to a normal one while diging or building node. + on_dig = function(pos, node, player) + minetest.swap_node(pos, {name = "mesecons_slippyblocks:slippy_block_temp" }) + minetest.node_dig(pos, node, player) + end, + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + minetest.swap_node(pos, {name = "mesecons_slippyblocks:slippy_block_temp" }) + minetest.item_place_node(itemstack, placer, pointed_thing, param2) + minetest.swap_node(pos, {name = "mesecons_slippyblocks:slippy_block" }) + end, +}) + + minetest.register_node("mesecons_slippyblocks:slippy_block_temp", { + description = "Slippy block)", + drawtype = "nodebox", + tiles = {"mesecons_slippyblocks.png"}, + walkable = true, + pointable = true, + diggable = true, + buildable_to = false, + groups = {cracky=3,oddly_breakable_by_hand=3, not_in_creative_inventory = 1}, + drop = "mesecons_slippyblocks:slippy_block", + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.4375, -0.4375, 0.4375, 0.4375, 0.4375}, -- MiddleBox + {0.4375, 0.4375, -0.5, 0.5, 0.5, 0.5}, -- f1 + {0.4375, -0.5, -0.5, 0.5, -0.4375, 0.5}, -- f2 + {-0.5, 0.4375, -0.5, -0.4375, 0.5, 0.5}, -- f3 + {-0.5, -0.5, -0.5, -0.4375, -0.4375, 0.5}, -- f4 + {-0.5, -0.5, -0.5, 0.5, -0.4375, -0.4375}, -- r1 + {-0.5, 0.4375, -0.5, 0.5, 0.5, -0.4375}, -- r2 + {-0.5, 0.4375, 0.4375, 0.5, 0.5, 0.5}, -- r3 + {-0.5, -0.5, 0.4375, 0.5, -0.4375, 0.5}, -- r4 + {0.4375, -0.5, -0.5, 0.5, 0.5, -0.4375}, -- t1 + {-0.5, -0.5, -0.5, -0.4375, 0.5, -0.4375}, -- t2 + {-0.5, -0.5, 0.4375, -0.4375, 0.5, 0.5}, -- t3 + {0.4375, -0.5, 0.4375, 0.5, 0.5, 0.5}, -- t4 + } + }, + +}) + diff --git a/mesecons_slippyblocks/textures/mesecons_slippyblocks.png b/mesecons_slippyblocks/textures/mesecons_slippyblocks.png new file mode 100644 index 0000000000000000000000000000000000000000..8cdba3a4aa6aee31add740ff111dee9bdd921069 GIT binary patch literal 373 zcmV-*0gC>KP)R5(v%lMNQbAP9rCKli^!uh?1VN19?c-(z)X0tBqbar9bi zS(atkI!yc4TIszP&M+^0*L8)l-_~`F3xEWGNX9aF91YMv>Bc1@69h7YOu&DL$8Vgo z$DCyl7>v^?&uPCiQ3>`10RaqjWG-n>dG*dhO3dWjSOv2V_m!tC2&|z>NdijR4CJc| z0uXfu&s{J{WSQxxRoONXxn2|ewly@c(uyik?PDGw`2`yH5ag`TCf8j+qxf<8S!cEcx(e7YirwmL TlG`L|00000NkvXXu0mjfdc~Ux literal 0 HcmV?d00001 diff --git a/mesecons_stickyblocks_flat/depends.txt b/mesecons_stickyblocks_flat/depends.txt new file mode 100644 index 0000000..01f085b --- /dev/null +++ b/mesecons_stickyblocks_flat/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_mvps diff --git a/mesecons_stickyblocks_flat/init.lua b/mesecons_stickyblocks_flat/init.lua new file mode 100644 index 0000000..e6b65a9 --- /dev/null +++ b/mesecons_stickyblocks_flat/init.lua @@ -0,0 +1,157 @@ +-- Sticky blocks can be used together with pistons or movestones to push / pull +-- structures that are "glued" together using sticky blocks + + -- Flat sticky block not Y +minetest.register_node("mesecons_stickyblocks_flat:sticky_block_xz", { + description = "Flat Sticky Block", + drawtype = "nodebox", + tiles = { + "mesecons_stickyblocks_flat.png", + "mesecons_stickyblocks_flat.png", + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat_sticky.png", + }, + is_ground_content = false, + groups = {choppy=3, oddly_breakable_by_hand=2, sticky=1}, + mvps_sticky = function (pos, node) + local connected = {} + for _, r in ipairs(mesecon.rules.xz) do + table.insert(connected, vector.add(pos, r)) + end + return connected + end, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.4375, -0.4375, 0.4375, 0.4375, 0.4375}, + {-0.5, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, -0.5, 0.5, 0.5, -0.375}, + {-0.5, -0.5, -0.375, -0.375, 0.5, 0.375}, + {0.375, -0.5, -0.5, 0.5, 0.5, 0.5}, + } + }, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, player, pointed_thing) + if string.find(player:get_wielded_item():get_name(), "sticky_") then + minetest.swap_node(pos, {name = "mesecons_stickyblocks_flat:sticky_block_xy" }) + --minetest.chat_send_all("The word sticky_ was found.") + end + end, +}) + + -- Flat sticky block not Z +minetest.register_node("mesecons_stickyblocks_flat:sticky_block_xy", { + description = "Flat XY Sticky Block", + drawtype = "nodebox", + drop = "mesecons_stickyblocks_flat:sticky_block_xz", + tiles = { --+Y, -Y, +X, -X, +Z, -Z + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat.png", + "mesecons_stickyblocks_flat.png", + }, + is_ground_content = false, + groups = {choppy=3, oddly_breakable_by_hand=2, sticky=1, not_in_creative_inventory = 1}, + mvps_sticky = function (pos, node) + local connected = {} + for _, r in ipairs(mesecon.rules.xy) do + table.insert(connected, vector.add(pos, r)) + end + return connected + end, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.4375, -0.4375, 0.4375, 0.4375, 0.4375}, + {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, + {-0.5, 0.375, -0.5, 0.5, 0.5, 0.5}, + {-0.5, -0.375, -0.5, -0.375, 0.375, 0.5}, + {0.375, -0.5, -0.5, 0.5, 0.5, 0.5}, + } + }, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, player, pointed_thing) + if string.find(player:get_wielded_item():get_name(), "sticky_") then + minetest.swap_node(pos, {name = "mesecons_stickyblocks_flat:sticky_block_yz" }) + end + end, +}) + + -- Flat sticky block not X +minetest.register_node("mesecons_stickyblocks_flat:sticky_block_yz", { + description = "Flat YZ Sticky Block", + drawtype = "nodebox", + drop = "mesecons_stickyblocks_flat:sticky_block_xz", + tiles = { + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat.png", + "mesecons_stickyblocks_flat.png", + "mesecons_stickyblocks_flat_sticky.png", + "mesecons_stickyblocks_flat_sticky.png", + }, + is_ground_content = false, + groups = {choppy=3, oddly_breakable_by_hand=2, sticky=1, not_in_creative_inventory = 1}, + mvps_sticky = function (pos, node) + local connected = {} + for _, r in ipairs(mesecon.rules.yz) do + table.insert(connected, vector.add(pos, r)) + end + return connected + end, + node_box = { + type = "fixed", + fixed = { + {-0.4375, -0.4375, -0.4375, 0.4375, 0.4375, 0.4375}, + {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, + {-0.5, 0.375, -0.5, 0.5, 0.5, 0.5}, + {-0.5, -0.375, 0.375, 0.5, 0.375, 0.5}, + {-0.5, -0.5, -0.5, 0.5, 0.5, -0.375}, + } + }, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, player, pointed_thing) + local wilded_item_nane = player:get_wielded_item():get_name() + if string.find(player:get_wielded_item():get_name(), "sticky_") then + minetest.swap_node(pos, {name = "mesecons_stickyblocks_flat:sticky_block_xz" }) + end + end, +}) + + + +mesecon.rules.xz = { + {x = 1, y = 0, z = 0}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z = -1}, +} + +mesecon.rules.xy = { + {x = 1, y = 0, z = 0}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 1, z = 0}, + {x = 0, y = -1, z = 0}, +} + +mesecon.rules.yz = { + {x = 0, y = 1, z = 0}, + {x = 0, y = -1, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z = -1}, +} + + + + +minetest.register_craft({ + output = "mesecons_stickyblocks_flat:sticky_block_xz", + recipe = { + {"mesecons_materials:glue","group:wood", "mesecons_materials:glue"}, + } +}) + diff --git a/mesecons_stickyblocks_flat/textures/mesecons_stickyblocks_flat.png b/mesecons_stickyblocks_flat/textures/mesecons_stickyblocks_flat.png new file mode 100644 index 0000000000000000000000000000000000000000..ec16bf1ce66d60fed49afe245ac613a94b640cfd GIT binary patch literal 792 zcmV+z1LypSP)XIYb7jz46BV z0000NdQ@0+LvL_-a%pF1bN~PdnR9m5H2?qtV*uncvtu^^00MkTL_t(IPc2j1Zqq;% z9IrP{oHW-`QZDU7B~%F{egIzh0{(*U;{ovpyaGZ(LLhhm6eTpxwT@$Z<7H-BTlTKk zXXnh!IUBus{nW=M!ZxokIBH^@mGIu9f0ST$ouiXl)E>z6zuUxOvqx+UCi4t~P6D&t zRX8xBn>MhzDbVL)6h&Cylo%hU+~`1j0`dR0z^K<^e2skXaC+Q^b%z=PdGYcUK7X6w z;$n=n)d(PB@;o-+1Y8K;p2>8-efJ)pzRzJ#1}UyqIb3ysQYoM)9U|V^pv`>WUi#L+ zXSFSHf0V-B>?;VwapUFry#T@&9D@(UESyIYYt5r3^}xc{h`A;ZYe`WcNyEUJm|@IK zx)Fg)WH4J~NU2{N1Y#I35b2*@?_iI6Oipy*66SSQZ3%&bcs7 zt};A4>A)`OtU#)g^de@c3BocdyGC%WEUAUGNsh9}k>ijh6^Lym76N%t6>yA;xJh*` zsn^Izi6U6g9vrL#v$Q3q5I`IzY1#@V8EQ4gqH|}rveoJ&f@$>iA(*H>QL~wh1`0$m zv9+X5LypkEmZDw#Uxfuzg)s(FgU*UHzF+76?nsv@RB&^O}ol zX@Qu$I6xrTu0+9RDjhXay=O^(PBy6Oh&{oF9#(2HPV@*+AXd5ra>jB6dqW=TWfn)r zn+?fR4ZWI%Y)FgOV`l%WDpWiR%M~l|9x z!ax43@$6y*Qxp!DXMN1qdmh&$lyJ7(;e6c1jwepC#={iT#V(AZK3(K^!aZMqE$|-= WV|10Bs@re?0000`XoP`y&#%u_21sg+J+~utmg9~G@)FeTvc}Z`(YnsHKKaCoK2Z| zzp*h)?_Yl7>HD9{*r&GMTwm*WLCf2Jtaf?Nn9yk#R==gW1VxMI3p&iLJvkrc<-7zm zo8uoB5789CkpK`v#qJyjMPoe{#2jq;&2R11vXqSv3NVpJIsQsa9eh9sx?rvAsBy5{dR znyMFG%9vxW(|DGY`B;}a)RvC3}c=s$aKh`hQ2rPw(Z614_k z%6ED5z5ZuwWRc0M=fPH;IsB;;aN=?d}17N5REnf`fv%ypa_E0jDH# z!LucmrIc9!!z@zp5F!f%J@3mQXXC@Uny&wIW?(axImiOlh}(|58Ip$9a|%7DxOnMQ zeWvAflzsU0@c2#w3D9Gcp%S1ojKHn|V$Ots3`JDc-|hY7CAqf0F3Tc{Od$&9l={FS za7Iw5o(TsS1BFx0r^jKaWJ+8}?f*`E9Wn2vW)kc@C@F|VPD0Lj`&(CiNvCRyIFXA< zw%fM^q}Eza;`}8$o>B7`ce?`I!(>@3?+*KK%Mgq;n}>%ReDB@Y^ZZ#iE@s84?)sFj v7y6HNtqYkeu|B$+r5;{pzFC$({#pGGG9Y&QhxOGO00000NkvXXu0mjfO+`Yg literal 0 HcmV?d00001 diff --git a/mesecons_stickyblocks_linear/depends.txt b/mesecons_stickyblocks_linear/depends.txt new file mode 100644 index 0000000..01f085b --- /dev/null +++ b/mesecons_stickyblocks_linear/depends.txt @@ -0,0 +1,2 @@ +mesecons +mesecons_mvps diff --git a/mesecons_stickyblocks_linear/init.lua b/mesecons_stickyblocks_linear/init.lua new file mode 100644 index 0000000..e05c1b5 --- /dev/null +++ b/mesecons_stickyblocks_linear/init.lua @@ -0,0 +1,144 @@ +-- Sticky blocks can be used together with pistons or movestones to push / pull +-- structures that are "glued" together using sticky blocks + + -- X sticky block linear +minetest.register_node("mesecons_stickyblocks_linear:sticky_block_x", { + description = "X Sticky Block", + drawtype = "nodebox", + drop = "mesecons_stickyblocks_linear:sticky_block_y", + tiles = { + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear_sticky.png", + "mesecons_stickyblocks_linear_sticky.png", + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear.png", + }, + is_ground_content = false, + groups = {choppy=3, oddly_breakable_by_hand=2, sticky=1, not_in_creative_inventory = 1}, + mvps_sticky = function (pos, node) + local connected = {} + for _, r in ipairs(mesecon.rules.x) do + table.insert(connected, vector.add(pos, r)) + end + return connected + end, + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.375, -0.375, 0.375, 0.375, 0.375}, + {0.375, -0.5, -0.5, 0.5, 0.5, 0.5}, + {-0.5, -0.5, -0.5, -0.375, 0.5, 0.5}, + } + }, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, player, pointed_thing) + if string.find(player:get_wielded_item():get_name(), "sticky_") then + minetest.swap_node(pos, {name = "mesecons_stickyblocks_linear:sticky_block_y" }) + end + end, +}) + + -- Y sticky block +minetest.register_node("mesecons_stickyblocks_linear:sticky_block_y", { + description = "Linear Sticky Block", + drawtype = "nodebox", + tiles = { + "mesecons_stickyblocks_linear_sticky.png", + "mesecons_stickyblocks_linear_sticky.png", + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear.png", + }, + is_ground_content = false, + groups = {choppy=3, oddly_breakable_by_hand=2, sticky=1}, + mvps_sticky = function (pos, node) + local connected = {} + for _, r in ipairs(mesecon.rules.y) do + table.insert(connected, vector.add(pos, r)) + end + return connected + end, + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.375, -0.375, 0.375, 0.375, 0.375}, + {-0.5, 0.375, -0.5, 0.5, 0.5, 0.5}, + {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, + } + }, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, player, pointed_thing) + if string.find(player:get_wielded_item():get_name(), "sticky_") then + minetest.swap_node(pos, {name = "mesecons_stickyblocks_linear:sticky_block_z" }) + end + end, +}) + + -- Z sticky block +minetest.register_node("mesecons_stickyblocks_linear:sticky_block_z", { + description = "Z Sticky Block", + drawtype = "nodebox", + drop = "mesecons_stickyblocks_linear:sticky_block_y", + tiles = { + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear.png", + "mesecons_stickyblocks_linear_sticky.png", + "mesecons_stickyblocks_linear_sticky.png", + }, + is_ground_content = false, + groups = {choppy=3, oddly_breakable_by_hand=2, sticky=1, not_in_creative_inventory = 1}, + mvps_sticky = function (pos, node) + local connected = {} + for _, r in ipairs(mesecon.rules.z) do + table.insert(connected, vector.add(pos, r)) + end + return connected + end, + node_box = { + type = "fixed", + fixed = { + {-0.375, -0.375, -0.375, 0.375, 0.375, 0.375}, + {-0.5, -0.5, 0.375, 0.5, 0.5, 0.5}, + {-0.5, -0.5, -0.5, 0.5, 0.5, -0.375}, + } + }, + sounds = default.node_sound_wood_defaults(), + on_punch = function(pos, node, player, pointed_thing) + if string.find(player:get_wielded_item():get_name(), "sticky_") then + minetest.swap_node(pos, {name = "mesecons_stickyblocks_linear:sticky_block_x" }) + end + end, +}) + +mesecon.rules.y = { + {x = 0, y = 1, z = 0}, + {x = 0, y = -1, z = 0}, + {x = 0, y = 0, z = 0}, + {x = 0, y = 0, z = 0}, +} + +mesecon.rules.x = { + {x = 1, y = 0, z = 0}, + {x = -1, y = 0, z = 0}, + {x = 0, y = 0, z = 0}, + {x = 0, y = 0, z = 0}, +} + +mesecon.rules.z = { + {x = 0, y = 0, z = 0}, + {x = 0, y = 0, z = 0}, + {x = 0, y = 0, z = 1}, + {x = 0, y = 0, z = -1}, +} + +minetest.register_craft({ + output = "mesecons_stickyblocks_linear:sticky_block_y", + recipe = { + {"group:wood"}, + {"mesecons_materials:glue"}, + } +}) diff --git a/mesecons_stickyblocks_linear/textures/mesecons_stickyblocks_linear.png b/mesecons_stickyblocks_linear/textures/mesecons_stickyblocks_linear.png new file mode 100644 index 0000000000000000000000000000000000000000..e9647cfb3528fa810ca73dbb8ea0c068d04340f5 GIT binary patch literal 714 zcmV;*0yX`KP)R5(v9Q`>ISKolIWH%^>1*HTh0?L#G02_$|1Uibq3g74!2 z@dvyDLPA0ycmNb7G|jb+V|(LeW?NhKuGeSh%*;6(y?OoA$0ouyuP``jVx5)n-lKn% zV0N9OlUmds$n?M4#A35YYz!vz41-Prv)xrVFru3_u(~PG=VBB^Sl^TwAE(^tKzsu6 z|F*!W*J6B)eD832+=g|B8UlIo@)bURo8aPNjI`AVAY$@7HsAzY2;ZK`biaM~9-qF? zVNV7ru2wl*b%0VSpeP+8-rAteeBWOB*1%`AEpdO8!rtsF2*h#Y<@vn;!WSHa55z2- zM-pqzqbBvh!qZF6pd5s*>~~W~d3mGAX-8aIGw< zg|tbIvdEF+kR=s}Z6y{0c~BK_jElHQbuOvb$ViDISkN9EtOK*OC8iKS942Yn3MLt9 zHO8WIXScG|>Lh|`^z|W_s6J7%nT!SsL@}|oq)y~ezFR3W)C5C4jg&_;n{kh*Um&)} z&fBnkT~*Ns^~+uTnNb!9OU$$`7M}B(i)v|sn7lYZAla@&!DcEQHB!B2Nq`XoP`y&#%u_21sg+J+~utmg9~G@)FeTvc}Z`(YnsHKKaCoK2Z| zzp*h)?_Yl7>HD9{*r&GMTwm*WLCf2Jtaf?Nn9yk#R==gW1VxMI3p&iLJvkrc<-7zm zo8uoB5789CkpK`v#qJyjMPoe{#2jq;&2R11vXqSv3NVpJIsQsa9eh9sx?rvAsBy5{dR znyMFG%9vxW(|DGY`B;}a)RvC3}c=s$aKh`hQ2rPw(Z614_k z%6ED5z5ZuwWRc0M=fPH;IsB;;aN=?d}17N5REnf`fv%ypa_E0jDH# z!LucmrIc9!!z@zp5F!f%J@3mQXXC@Uny&wIW?(axImiOlh}(|58Ip$9a|%7DxOnMQ zeWvAflzsU0@c2#w3D9Gcp%S1ojKHn|V$Ots3`JDc-|hY7CAqf0F3Tc{Od$&9l={FS za7Iw5o(TsS1BFx0r^jKaWJ+8}?f*`E9Wn2vW)kc@C@F|VPD0Lj`&(CiNvCRyIFXA< zw%fM^q}Eza;`}8$o>B7`ce?`I!(>@3?+*KK%Mgq;n}>%ReDB@Y^ZZ#iE@s84?)sFj v7y6HNtqYkeu|B$+r5;{pzFC$({#pGGG9Y&QhxOGO00000NkvXXu0mjfO+`Yg literal 0 HcmV?d00001