From 03957b423a7aab23c4bf31d0ec9139dd75de79e4 Mon Sep 17 00:00:00 2001 From: stfwi Date: Tue, 17 Sep 2019 17:56:08 +0200 Subject: [PATCH] Main readme updated, documentation updated, Makefiles updated. Experimental features snapshot. 1.14: Crafting table item rendering added. Recipe collision resolver added. Lang files updated. --- 1.12/Makefile | 6 +- 1.12/readme.md | 6 +- .../java/wile/engineersdecor/ModContent.java | 6 + .../blocks/BlockDecorCraftingTable.java | 139 ++++++++++++--- .../wile/engineersdecor/detail/ModConfig.java | 4 + .../wile/engineersdecor/detail/ModTesrs.java | 85 +++++++++ .../detail/RecipeCondModSpecific.java | 4 + .../block/device/small_tree_cutter_model.json | 9 +- .../testing/collision_test1_diorite.json | 22 +++ .../testing/collision_test2_diorite.json | 22 +++ .../testing/collision_test3_diorite.json | 22 +++ .../gui/treated_wood_crafting_table.png | Bin 27102 -> 27786 bytes 1.14/Makefile | 4 +- 1.14/build.gradle | 16 +- 1.14/gradle.properties | 2 +- 1.14/readme.md | 10 +- .../java/wile/engineersdecor/ModContent.java | 56 +++--- .../engineersdecor/ModEngineersDecor.java | 38 +++- .../engineersdecor/blocks/BlockDecor.java | 81 ++++++++- .../blocks/BlockDecorChair.java | 2 +- .../blocks/BlockDecorCraftingTable.java | 134 +++++++++++--- .../blocks/BlockDecorDirected.java | 18 +- .../blocks/BlockDecorDirectedHorizontal.java | 18 +- .../blocks/BlockDecorDropper.java | 2 +- .../blocks/BlockDecorFloorGrating.java | 4 +- .../engineersdecor/blocks/BlockDecorFull.java | 18 -- .../blocks/BlockDecorFurnace.java | 2 +- .../blocks/BlockDecorHalfSlab.java | 12 +- .../blocks/BlockDecorHorizontalSupport.java | 9 +- .../blocks/BlockDecorMineralSmelter.java | 1 - .../blocks/BlockDecorPipeValve.java | 7 +- .../engineersdecor/blocks/BlockDecorSlab.java | 6 +- .../blocks/BlockDecorSolarPanel.java | 2 +- .../blocks/BlockDecorStraightPole.java | 16 +- .../blocks/BlockDecorWasteIncinerator.java | 2 +- .../blocks/BlockDecorWindow.java | 10 +- .../wile/engineersdecor/detail/ModConfig.java | 28 ++- .../wile/engineersdecor/detail/ModTesrs.java | 84 +++++++++ .../detail/OptionalRecipeCondition.java | 11 +- .../gui/treated_wood_crafting_table.png | Bin 27102 -> 27786 bytes .../testing/collision_test1_diorite.json | 21 +++ .../testing/collision_test2_diorite.json | 21 +++ .../testing/collision_test3_diorite.json | 21 +++ .../engineers-decor-crafting-table-items.png | Bin 0 -> 169032 bytes ...ers-decor-factory-dropper-directional.png} | Bin ...> engineers-decor-factory-dropper-gui.png} | Bin ...ctory-dropper-metal-press-compression.png} | Bin ...all-mineral-smelter-vanilla-automated.png} | Bin ... => engineers-decor-small-solar-panel.png} | Bin ... => engineers-decor-small-tree-cutter.png} | Bin documentation/readme.md | 11 +- readme.md | 168 +++++++++--------- 52 files changed, 893 insertions(+), 267 deletions(-) create mode 100644 1.12/src/main/java/wile/engineersdecor/detail/ModTesrs.java create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test1_diorite.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test2_diorite.json create mode 100644 1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test3_diorite.json delete mode 100644 1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFull.java create mode 100644 1.14/src/main/java/wile/engineersdecor/detail/ModTesrs.java create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test1_diorite.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test2_diorite.json create mode 100644 1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test3_diorite.json create mode 100644 documentation/engineers-decor-crafting-table-items.png rename documentation/{factory-dropper-directional.png => engineers-decor-factory-dropper-directional.png} (100%) rename documentation/{factory-dropper-gui.png => engineers-decor-factory-dropper-gui.png} (100%) rename documentation/{factory-dropper-metal-press-compression.png => engineers-decor-factory-dropper-metal-press-compression.png} (100%) rename documentation/{small-mineral-smelter-vanilla-automated.png => engineers-decor-small-mineral-smelter-vanilla-automated.png} (100%) rename documentation/{small-solar-panel.png => engineers-decor-small-solar-panel.png} (100%) rename documentation/{small-tree-cutter.png => engineers-decor-small-tree-cutter.png} (100%) diff --git a/1.12/Makefile b/1.12/Makefile index 8818ab3..4530a2e 100644 --- a/1.12/Makefile +++ b/1.12/Makefile @@ -28,7 +28,7 @@ wildcardr=$(foreach d,$(wildcard $1*),$(call wildcardr,$d/,$2) $(filter $(subst # # Targets # -.PHONY: default mod init clean clean-all mrproper all run install sanatize dist-check dist start-server port-languages +.PHONY: default mod init clean clean-all mrproper all run install sanatize dist-check dist dist-files start-server port-languages default: mod @@ -94,12 +94,14 @@ dist-check: @echo "[1.12] Running dist checks ..." @djs tasks.js dist-check -dist: sanatize dist-check clean-all init mod +dist-files: clean-all init mod @echo "[1.12] Distribution files ..." @mkdir -p dist @cp build/libs/$(MOD_JAR_PREFIX)* dist/ @djs tasks.js dist +dist: sanatize dist-check dist-files + port-languages: @echo "[1.12] Porting language files to 1.14 ..." @djs tasks.js port-languages diff --git a/1.12/readme.md b/1.12/readme.md index f1124bf..b73abfe 100644 --- a/1.12/readme.md +++ b/1.12/readme.md @@ -10,7 +10,11 @@ Mod sources for Minecraft version 1.12.2. ---- ## Version history - ~ v1.0.12-b2 [A] Lang files updated. + ~ v1.0.12-b2 [A] Crafting Table: Added recipe collision resolver, + also applies to crafting history refabrication. + [A] Crafting Table: Added rendering of placed items + on the top surface of the table. + [M] Lang files updated. - v1.0.12-b1 [A] Mineal Smelter non-experimental now. [M] Window submodels stripped (reopened issue #19, thx overchoice). diff --git a/1.12/src/main/java/wile/engineersdecor/ModContent.java b/1.12/src/main/java/wile/engineersdecor/ModContent.java index b955ceb..e608fe9 100644 --- a/1.12/src/main/java/wile/engineersdecor/ModContent.java +++ b/1.12/src/main/java/wile/engineersdecor/ModContent.java @@ -25,6 +25,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.event.RegistryEvent; +import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; @@ -595,6 +596,11 @@ public class ModContent for(Item e:registeredItems) { if(e instanceof ItemDecor) ((ItemDecor)e).initModel(); } + if(!ModConfig.optout.without_tesrs) { + if(!ModConfig.isOptedOut(TREATED_WOOD_CRAFTING_TABLE)) { + ClientRegistry.bindTileEntitySpecialRenderer(BlockDecorCraftingTable.BTileEntity.class, new ModTesrs.TesrDecorCraftingTable()); + } + } } // Invoked from CommonProxy.registerItems() diff --git a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java index 6d1bc89..1de8749 100644 --- a/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java +++ b/1.12/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java @@ -9,24 +9,29 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SPacketUpdateTileEntity; import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.detail.Networking; +import net.minecraft.world.World; +import net.minecraft.world.Explosion; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; -import net.minecraft.world.World; -import net.minecraft.world.Explosion; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.*; +import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.init.Items; +import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.Ingredient; +import net.minecraft.network.play.server.SPacketSetSlot; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.*; @@ -342,12 +347,13 @@ public class BlockDecorCraftingTable extends BlockDecorDirected protected static final int BUTTON_NEXT = 0; protected static final int BUTTON_PREV = 1; protected static final int BUTTON_CLEAR_GRID = 2; - protected static final int BUTTON_FROM_STORAGE = 3; - protected static final int BUTTON_TO_STORAGE = 4; - protected static final int BUTTON_FROM_PLAYER = 5; - protected static final int BUTTON_TO_PLAYER = 6; - protected static final int ACTION_PLACE_CURRENT_HISTORY_SEL = 7; - protected static final int ACTION_PLACE_SHIFTCLICKED_STACK = 8; + protected static final int BUTTON_NEXT_COLLISION_RECIPE = 3; + protected static final int BUTTON_FROM_STORAGE = 4; + protected static final int BUTTON_TO_STORAGE = 5; + protected static final int BUTTON_FROM_PLAYER = 6; + protected static final int BUTTON_TO_PLAYER = 7; + protected static final int ACTION_PLACE_CURRENT_HISTORY_SEL = 8; + protected static final int ACTION_PLACE_SHIFTCLICKED_STACK = 9; protected static final ResourceLocation BACKGROUND = new ResourceLocation(ModEngineersDecor.MODID, "textures/gui/treated_wood_crafting_table.png"); protected final BTileEntity te; @@ -369,6 +375,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected buttons.add(addButton(new GuiButtonImage(BUTTON_NEXT, x0+158,y0+44, 12,12, 194,44, 12, BACKGROUND))); buttons.add(addButton(new GuiButtonImage(BUTTON_PREV, x0+158,y0+30, 12,12, 180,30, 12, BACKGROUND))); buttons.add(addButton(new GuiButtonImage(BUTTON_CLEAR_GRID, x0+158,y0+58, 12,12, 194,8, 12, BACKGROUND))); + buttons.add(addButton(new GuiButtonImage(BUTTON_NEXT_COLLISION_RECIPE, x0+132,y0+18, 20,10, 183,95, 12, BACKGROUND))); if(with_assist_quickmove_buttons) { buttons.add(addButton(new GuiButtonImage(BUTTON_FROM_STORAGE, x0+49, y0+34, 9,17, 219,34, 17, BACKGROUND))); buttons.add(addButton(new GuiButtonImage(BUTTON_TO_STORAGE, x0+49, y0+52, 9,17, 208,16, 17, BACKGROUND))); @@ -381,6 +388,10 @@ public class BlockDecorCraftingTable extends BlockDecorDirected @Override public void drawScreen(int mouseX, int mouseY, float partialTicks) { + if(with_assist) { + buttons.get(BUTTON_NEXT_COLLISION_RECIPE).visible = te.has_recipe_collision(); + buttons.get(BUTTON_NEXT_COLLISION_RECIPE).enabled = te.has_recipe_collision(); + } drawDefaultBackground(); super.drawScreen(mouseX, mouseY, partialTicks); renderHoveredToolTip(mouseX, mouseY); @@ -476,7 +487,8 @@ public class BlockDecorCraftingTable extends BlockDecorDirected case BUTTON_TO_STORAGE: case BUTTON_FROM_PLAYER: case BUTTON_TO_PLAYER: - case ACTION_PLACE_CURRENT_HISTORY_SEL: { + case ACTION_PLACE_CURRENT_HISTORY_SEL: + case BUTTON_NEXT_COLLISION_RECIPE: { NBTTagCompound nbt = new NBTTagCompound(); nbt.setInteger("action", button.id); Networking.PacketTileNotify.sendToServer(te, nbt); @@ -615,8 +627,32 @@ public class BlockDecorCraftingTable extends BlockDecorDirected @Override public void onCraftMatrixChanged(IInventory inv) { + if(world.isRemote) return; try { - slotChangedCraftingGrid(world, player, craftMatrix, craftResult); + InventoryCrafting grid = craftMatrix; + InventoryCraftResult result = craftResult; + EntityPlayerMP pl = (EntityPlayerMP)player; + ItemStack stack = ItemStack.EMPTY; + List matching_recipes = new ArrayList(); + final IRecipe current_recipe = result.getRecipeUsed(); + final ItemStack current_recipe_stack = result.getStackInSlot(0); + IRecipe current_recipe_matching = null; + for(IRecipe r:CraftingManager.REGISTRY) { + if((r==null) || (!r.matches(grid, world))) continue; + if((!r.isDynamic()) && (world.getGameRules().getBoolean("doLimitedCrafting")) && (!pl.getRecipeBook().isUnlocked(r))) continue; + matching_recipes.add(r); + ItemStack recipe_result_stack = r.getCraftingResult(grid); + if((r==current_recipe) || (recipe_result_stack.isItemEqual(current_recipe_stack))) current_recipe_matching = r; + } + te.has_recipe_collision_ = (matching_recipes.size() > 1); + if(matching_recipes.size() > 0) { + if(current_recipe_matching==null) current_recipe_matching = matching_recipes.get(0); + result.setRecipeUsed(current_recipe_matching); + stack = current_recipe_matching.getCraftingResult(grid); + } + result.setInventorySlotContents(0, stack); + pl.connection.sendPacket(new SPacketSetSlot(this.windowId, 0, stack)); + te.syncProperties(player); } catch(Throwable exc) { ModEngineersDecor.logger.error("Recipe failed:", exc); } @@ -676,6 +712,31 @@ public class BlockDecorCraftingTable extends BlockDecorDirected public void setCraftingMatrixSlot(int slot_index, ItemStack stack) { craftMatrix.setInventorySlotContents(slot_index, stack.copy()); } + + public void select_next_collision_recipe(IInventory inv, EntityPlayer player) + { + if(world.isRemote) return; + try { + EntityPlayerMP pl = (EntityPlayerMP) player; + List matching_recipes = new ArrayList(); + final IRecipe current_recipe = craftResult.getRecipeUsed(); + final ItemStack current_recipe_stack = craftResult.getStackInSlot(0); + int next_recipe_index = 0; + for(IRecipe r:CraftingManager.REGISTRY) { + if((r==null) || (!r.matches(craftMatrix, world))) continue; + if((!r.isDynamic()) && (world.getGameRules().getBoolean("doLimitedCrafting")) && (!pl.getRecipeBook().isUnlocked(r))) continue; + matching_recipes.add(r); + ItemStack recipe_result_stack = r.getCraftingResult(craftMatrix); + if((r==current_recipe) || (recipe_result_stack.isItemEqual(current_recipe_stack))) next_recipe_index = matching_recipes.size(); + } + IRecipe next_recipe = matching_recipes.get((next_recipe_index >= matching_recipes.size()) ? 0 : next_recipe_index); + craftResult.setInventorySlotContents(0, next_recipe.getCraftingResult(craftMatrix)); + craftResult.setRecipeUsed(next_recipe); + onCraftMatrixChanged(inv); + } catch(Throwable exc) { + ModEngineersDecor.logger.error("Recipe failed:", exc); + } + } } //-------------------------------------------------------------------------------------------------------------------- @@ -741,6 +802,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected public static final int NUM_OF_SLOTS = NUM_OF_CRAFTING_SLOTS+NUM_OF_STORAGE_SLOTS; protected NonNullList stacks; protected final CraftingHistory history = new CraftingHistory(); + protected boolean has_recipe_collision_ = false; public BTileEntity() { stacks = NonNullList.withSize(NUM_OF_SLOTS, ItemStack.EMPTY); } @@ -764,6 +826,9 @@ public class BlockDecorCraftingTable extends BlockDecorDirected // private aux methods --------------------------------------------------------------------- + private boolean has_recipe_collision() + { return has_recipe_collision_; } + private boolean itemstack_recipe_match(ItemStack grid_stack, ItemStack history_stack) { if(history.current_recipe()!=null) { @@ -948,7 +1013,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected } enum EnumRefabPlacement { UNCHANGED, INCOMPLETE, PLACED } - private EnumRefabPlacement place_refab_stacks(IInventory inventory, final int slot_begin, final int slot_end) + private EnumRefabPlacement place_refab_stacks(IInventory inventory, final int slot_begin, final int slot_end, @Nullable EntityPlayer player) { List to_fill = crafting_slot_stacks_to_add(); boolean slots_changed = false; @@ -978,6 +1043,9 @@ public class BlockDecorCraftingTable extends BlockDecorDirected if(!slots_updated) break; } } + if((history.current_recipe() != null) && (player!=null) && (player.openContainer instanceof BContainer)) { + ((BContainer)player.openContainer).craftResult.setRecipeUsed(history.current_recipe()); + } if(!slots_changed) { return EnumRefabPlacement.UNCHANGED; } else if(missing_item) { @@ -1094,25 +1162,25 @@ public class BlockDecorCraftingTable extends BlockDecorDirected if(clear_grid_to_player(player)) { te_changed = true; player_inventory_changed = true; } } break; case BGui.BUTTON_FROM_STORAGE: { - EnumRefabPlacement from_storage = place_refab_stacks(this, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN + NUM_OF_STORAGE_SLOTS); + EnumRefabPlacement from_storage = place_refab_stacks(this, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN + NUM_OF_STORAGE_SLOTS, player); if(from_storage != EnumRefabPlacement.UNCHANGED) te_changed = true; } break; case BGui.BUTTON_FROM_PLAYER: { - EnumRefabPlacement from_player_inv = place_refab_stacks(player.inventory, 9, 36); + EnumRefabPlacement from_player_inv = place_refab_stacks(player.inventory, 9, 36, player); if(from_player_inv != EnumRefabPlacement.UNCHANGED) { te_changed = true; player_inventory_changed = true; } if(from_player_inv != EnumRefabPlacement.PLACED) { - EnumRefabPlacement from_hotbar = place_refab_stacks(player.inventory, 0, 9); + EnumRefabPlacement from_hotbar = place_refab_stacks(player.inventory, 0, 9, player); if(from_hotbar != EnumRefabPlacement.UNCHANGED) { te_changed = true; player_inventory_changed = true; } } } break; case BGui.ACTION_PLACE_CURRENT_HISTORY_SEL: { - EnumRefabPlacement from_storage = place_refab_stacks(this, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN + NUM_OF_STORAGE_SLOTS); + EnumRefabPlacement from_storage = place_refab_stacks(this, STORAGE_SLOTS_BEGIN, STORAGE_SLOTS_BEGIN + NUM_OF_STORAGE_SLOTS, player); if(from_storage != EnumRefabPlacement.UNCHANGED) te_changed = true; if(from_storage != EnumRefabPlacement.PLACED) { - EnumRefabPlacement from_player_inv = place_refab_stacks(player.inventory, 9, 36); + EnumRefabPlacement from_player_inv = place_refab_stacks(player.inventory, 9, 36, player); if(from_player_inv != EnumRefabPlacement.UNCHANGED) { te_changed = true; player_inventory_changed = true; } if(from_player_inv != EnumRefabPlacement.PLACED) { - EnumRefabPlacement from_hotbar = place_refab_stacks(player.inventory, 0, 9); + EnumRefabPlacement from_hotbar = place_refab_stacks(player.inventory, 0, 9, player); if(from_hotbar != EnumRefabPlacement.UNCHANGED) { te_changed = true; player_inventory_changed = true; } } } @@ -1132,6 +1200,11 @@ public class BlockDecorCraftingTable extends BlockDecorDirected if(stat != EnumRefabPlacement.UNCHANGED) { player_inventory_changed = true; te_changed = true; } } } break; + case BGui.BUTTON_NEXT_COLLISION_RECIPE: { + if(player.openContainer instanceof BContainer) { + ((BContainer)player.openContainer).select_next_collision_recipe(this, player); + } + } break; } } if(te_changed) markDirty(); @@ -1146,6 +1219,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected public void onServerPacketReceived(NBTTagCompound nbt) { if(nbt.hasKey("historydata")) history.read(nbt.getCompoundTag("historydata")); + if(nbt.hasKey("hascollision")) has_recipe_collision_ = nbt.getBoolean("hascollision"); } private void syncHistory(EntityPlayer player) @@ -1155,6 +1229,15 @@ public class BlockDecorCraftingTable extends BlockDecorDirected history.write(history_nbt); NBTTagCompound rnbt = new NBTTagCompound(); rnbt.setTag("historydata", history_nbt); + rnbt.setBoolean("hascollision", has_recipe_collision_); + Networking.PacketTileNotify.sendToPlayer(player, this, rnbt); + } + + private void syncProperties(EntityPlayer player) + { + if(!with_assist) return; + NBTTagCompound rnbt = new NBTTagCompound(); + rnbt.setBoolean("hascollision", has_recipe_collision_); Networking.PacketTileNotify.sendToPlayer(player, this, rnbt); } @@ -1173,9 +1256,26 @@ public class BlockDecorCraftingTable extends BlockDecorDirected { super.writeToNBT(nbt); writenbt(nbt); return nbt; } @Override - public NBTTagCompound getUpdateTag() + public NBTTagCompound getUpdateTag() // on server { NBTTagCompound nbt = new NBTTagCompound(); super.writeToNBT(nbt); writenbt(nbt); return nbt; } + @Override + public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) // on client + { super.readFromNBT(pkt.getNbtCompound()); readnbt(pkt.getNbtCompound()); super.onDataPacket(net, pkt); } + + @Override + public SPacketUpdateTileEntity getUpdatePacket() // on server + { return new SPacketUpdateTileEntity(pos, 1, getUpdateTag()); } + + @Override + public void handleUpdateTag(NBTTagCompound tag) // on client + { readFromNBT(tag); } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { return 400; } + // IWorldNamable --------------------------------------------------------------------------- @Override @@ -1256,7 +1356,6 @@ public class BlockDecorCraftingTable extends BlockDecorDirected @Override public void clear() { stacks.clear(); } - } } diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java index c89380f..a1c49b8 100644 --- a/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModConfig.java @@ -191,6 +191,10 @@ public class ModConfig @Config.Comment({"Disable CTRL-SHIFT item tooltip display."}) @Config.Name("Without tooltips") public boolean without_tooltips = false; + + @Config.Comment({"Disable all tile entity special renderers."}) + @Config.Name("Without TESRs") + public boolean without_tesrs = false; } @Config.Comment({ diff --git a/1.12/src/main/java/wile/engineersdecor/detail/ModTesrs.java b/1.12/src/main/java/wile/engineersdecor/detail/ModTesrs.java new file mode 100644 index 0000000..e040887 --- /dev/null +++ b/1.12/src/main/java/wile/engineersdecor/detail/ModTesrs.java @@ -0,0 +1,85 @@ +/* + * @file ModTesrs.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2018 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Yet unstructured initial experiments with TESRs. + * May be structured after I know what I am doing there. + */ +package wile.engineersdecor.detail; + +import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.blocks.BlockDecorCraftingTable; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; + +public class ModTesrs +{ + //-------------------------------------------------------------------------------------------------------------------- + // Crafting table + //-------------------------------------------------------------------------------------------------------------------- + + @SideOnly(Side.CLIENT) + public static class TesrDecorCraftingTable extends TileEntitySpecialRenderer + { + private static int tesr_error_counter = 4; + private static double scaler = 0.10; + private static double gap = 0.19; + private static double yrotations[] = {0, 90, 180, 270}; // [hdirection] S-W-N-E + private static double offsets[][][] = { // [hdirection][slotindex][xz] + { {-1,-1},{+0,-1},{+1,-1}, {-1,+0},{+0,+0},{+1,+0}, {-1,+1},{+0,+1},{+1,+1} }, // S + { {+1,-1},{+1,+0},{+1,+1}, {+0,-1},{+0,+0},{+0,+1}, {-1,-1},{-1,+0},{-1,+1} }, // W + { {+1,+1},{+0,+1},{-1,+1}, {+1,+0},{+0,+0},{-1,+0}, {+1,-1},{+0,-1},{-1,-1} }, // N + { {-1,+1},{-1,+0},{-1,-1}, {+0,+1},{+0,+0},{+0,-1}, {+1,+1},{+1,+0},{+1,-1} }, // E + }; + + @Override + public void render(final BlockDecorCraftingTable.BTileEntity te, final double x, final double y, final double z, final float partialTicks, final int destroyStage, final float alpha) + { + if(tesr_error_counter<=0) return; + try { + int di = MathHelper.clamp(te.getWorld().getBlockState(te.getPos()).getValue(BlockDecorCraftingTable.FACING).getHorizontalIndex(), 0, 3); + long posrnd = te.getPos().toLong(); + posrnd = (posrnd>>16)^(posrnd<<1); + for(int i=0; i block_registry = ForgeRegistries.BLOCKS; final IForgeRegistry item_registry = ForgeRegistries.ITEMS; final JsonArray items = json.getAsJsonArray("required"); diff --git a/1.12/src/main/resources/assets/engineersdecor/models/block/device/small_tree_cutter_model.json b/1.12/src/main/resources/assets/engineersdecor/models/block/device/small_tree_cutter_model.json index 79ef38f..4a59c10 100644 --- a/1.12/src/main/resources/assets/engineersdecor/models/block/device/small_tree_cutter_model.json +++ b/1.12/src/main/resources/assets/engineersdecor/models/block/device/small_tree_cutter_model.json @@ -199,11 +199,16 @@ "display": { "thirdperson_righthand": { "rotation": [85, 3, -10], - "translation": [1.75, -0.75, -2.25], + "translation": [0.75, 0.25, 0.5], "scale": [0.35, 0.35, 0.35] }, + "firstperson_righthand": { + "rotation": [18, 22, 0], + "translation": [1.25, 0, 0], + "scale": [0.4, 0.4, 0.4] + }, "ground": { - "translation": [0, -0.75, 0], + "translation": [0, -1.25, 0], "scale": [0.2, 0.2, 0.2] }, "gui": { diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test1_diorite.json b/1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test1_diorite.json new file mode 100644 index 0000000..2597836 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test1_diorite.json @@ -0,0 +1,22 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "experimental": true + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "DDD", + " D ", + " D " + ], + "key": { + "D": { "item": "minecraft:stone", "data":3 } + }, + "result": { + "item": "minecraft:stone", + "data": 0, + "count": 1 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test2_diorite.json b/1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test2_diorite.json new file mode 100644 index 0000000..8eaa485 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test2_diorite.json @@ -0,0 +1,22 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "experimental": true + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "DDD", + " D ", + " D " + ], + "key": { + "D": { "item": "minecraft:stone", "data":3 } + }, + "result": { + "item": "minecraft:stone", + "data": 1, + "count": 1 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test3_diorite.json b/1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test3_diorite.json new file mode 100644 index 0000000..a700163 --- /dev/null +++ b/1.12/src/main/resources/assets/engineersdecor/recipes/testing/collision_test3_diorite.json @@ -0,0 +1,22 @@ +{ + "conditions": [ + { + "type": "engineersdecor:grc", + "experimental": true + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "DDD", + " D ", + " D " + ], + "key": { + "D": { "item": "minecraft:stone", "data":3 } + }, + "result": { + "item": "minecraft:stone", + "data": 5, + "count": 1 + } +} diff --git a/1.12/src/main/resources/assets/engineersdecor/textures/gui/treated_wood_crafting_table.png b/1.12/src/main/resources/assets/engineersdecor/textures/gui/treated_wood_crafting_table.png index bc26abf9cc0fff2b24bdc5ad61762bff742425bf..c6c18dc7aacfc9672be747cd6616b3a8d21b389f 100644 GIT binary patch delta 11483 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 Ji&U*%{vQOO6HNdB delta 10775 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

`y^q;tNv+Lb+>pLX);F&)Uk{y2oDhAhKyszm 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 diff --git a/1.14/Makefile b/1.14/Makefile index 6a275f5..9251e35 100644 --- a/1.14/Makefile +++ b/1.14/Makefile @@ -72,12 +72,14 @@ dist-check: @echo "[1.14] Running dist checks ..." @djs tasks.js dist-check -dist: sanatize dist-check clean-all init mod +dist-files: clean-all init mod @echo "[1.14] Distribution files ..." @mkdir -p dist @cp build/libs/$(MOD_JAR_PREFIX)* dist/ @djs tasks.js dist +dist: sanatize dist-check dist-files + assets: @echo "[1.14] Running asset generators ..." @djs tasks.js create-slab-assets diff --git a/1.14/build.gradle b/1.14/build.gradle index 0f376da..885f8f9 100644 --- a/1.14/build.gradle +++ b/1.14/build.gradle @@ -19,21 +19,12 @@ version = "${version_engineersdecor}" group = "wile.engineersdecor" archivesBaseName = "engineersdecor-${version_minecraft}" -def signing = { -> +def signingData = { -> def sp = new Properties() if(file("signing.properties").exists()) file("signing.properties").withInputStream { sp.load(it) } return sp }() -def git_version = { -> - def stdout = new ByteArrayOutputStream() - exec { - commandLine 'git', 'log', '-1', '--format=%h' - standardOutput = stdout - } - return stdout.toString().trim() -}() - repositories { maven { name = "Progwml6 maven"; url = "https://dvs1.progwml6.com/files/maven/" } // JEI files maven { name = "ModMaven"; url = "modmaven.k-4u.nl" } // JEI files, fallback @@ -83,6 +74,11 @@ dependencies { runtimeOnly fg.deobf("mezz.jei:jei-${version_jei}") } +processResources { + outputs.upToDateWhen { false } // thx to @tterrag for this hint + doLast { file("${sourceSets.main.output.resourcesDir}/.gitversion").text = 'git log "-1" "--format=%h"'.execute().in.text.trim() } +} + jar { manifest { attributes([ diff --git a/1.14/gradle.properties b/1.14/gradle.properties index 7d0644d..f51882d 100644 --- a/1.14/gradle.properties +++ b/1.14/gradle.properties @@ -5,4 +5,4 @@ version_minecraft=1.14.4 version_forge_minecraft=1.14.4-28.0.105 version_fml_mappings=20190719-1.14.3 version_jei=1.14.4:6.0.0.10 -version_engineersdecor=1.0.12-b2 +version_engineersdecor=1.0.12-b3 diff --git a/1.14/readme.md b/1.14/readme.md index cd609d5..7a1055e 100644 --- a/1.14/readme.md +++ b/1.14/readme.md @@ -1,7 +1,7 @@ -## Engineer's Decor (MC1.14.3) +## Engineer's Decor (MC1.14.4) -Mod sources for Minecraft version 1.14.3. +Mod sources for Minecraft version 1.14.4. - Description, credits, and features: Please see the readme in the repository root. @@ -11,6 +11,12 @@ Mod sources for Minecraft version 1.14.3. ## Version history + ~ v1.0.12-b3 [A] Crafting Table: Added recipe collision resolver, + also applies to crafting history refabrication. + [A] Crafting Table: Added rendering of placed items + on the top surface of the table. + [A] Waterlogging of non-full-blocks added. + - v1.0.12-b2 [U] Updated to Forge 1.14.4-28.0.105/20190719-1.14.3. [A] Small Solar Panel added. [M] Items fall through the Steel Floor Grating like in 1.12.2 version. diff --git a/1.14/src/main/java/wile/engineersdecor/ModContent.java b/1.14/src/main/java/wile/engineersdecor/ModContent.java index d84de10..33262c7 100644 --- a/1.14/src/main/java/wile/engineersdecor/ModContent.java +++ b/1.14/src/main/java/wile/engineersdecor/ModContent.java @@ -12,6 +12,7 @@ */ package wile.engineersdecor; +import net.minecraftforge.fml.client.registry.ClientRegistry; import org.apache.commons.lang3.ArrayUtils; import wile.engineersdecor.blocks.*; import wile.engineersdecor.detail.ModAuxiliaries; @@ -32,6 +33,8 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.event.RegistryEvent; +import wile.engineersdecor.detail.ModTesrs; + import java.util.ArrayList; import java.util.List; import java.util.Collections; @@ -40,12 +43,11 @@ import javax.annotation.Nonnull; @SuppressWarnings("unused") public class ModContent { - //-------------------------------------------------------------------------------------------------------------------- // Blocks //-------------------------------------------------------------------------------------------------------------------- - public static final BlockDecorFull CLINKER_BRICK_BLOCK = (BlockDecorFull)(new BlockDecorFull( + public static final BlockDecor CLINKER_BRICK_BLOCK = (BlockDecor)(new BlockDecor( BlockDecor.CFG_DEFAULT, Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "clinker_brick_block")); @@ -68,7 +70,7 @@ public class ModContent // ------------------------------------------------------------------------------------------------------------------- - public static final BlockDecorFull CLINKER_BRICK_STAINED_BLOCK = (BlockDecorFull)(new BlockDecorFull( + public static final BlockDecor CLINKER_BRICK_STAINED_BLOCK = (BlockDecor)(new BlockDecor( BlockDecor.CFG_DEFAULT, Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "clinker_brick_stained_block")); @@ -86,7 +88,7 @@ public class ModContent // ------------------------------------------------------------------------------------------------------------------- - public static final BlockDecorFull SLAG_BRICK_BLOCK = (BlockDecorFull)(new BlockDecorFull( + public static final BlockDecor SLAG_BRICK_BLOCK = (BlockDecor)(new BlockDecor( BlockDecor.CFG_DEFAULT, Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(3f, 50f).sound(SoundType.STONE) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "slag_brick_block")); @@ -109,7 +111,7 @@ public class ModContent // ------------------------------------------------------------------------------------------------------------------- - public static final BlockDecorFull REBAR_CONCRETE_BLOCK = (BlockDecorFull)(new BlockDecorFull( + public static final BlockDecor REBAR_CONCRETE_BLOCK = (BlockDecor)(new BlockDecor( BlockDecor.CFG_DEFAULT, Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete")); @@ -131,13 +133,13 @@ public class ModContent )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete_wall")); public static final BlockDecorHalfSlab HALFSLAB_REBARCONCRETE = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( - BlockDecor.CFG_DEFAULT, + BlockDecor.CFG_CUTOUT, Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_rebar_concrete")); // ------------------------------------------------------------------------------------------------------------------- - public static final BlockDecorFull REBAR_CONCRETE_TILE = (BlockDecorFull)(new BlockDecorFull( + public static final BlockDecor REBAR_CONCRETE_TILE = (BlockDecor)(new BlockDecor( BlockDecor.CFG_DEFAULT, Block.Properties.create(Material.ROCK, MaterialColor.STONE).hardnessAndResistance(5f, 2000f).sound(SoundType.STONE) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "rebar_concrete_tile")); @@ -184,7 +186,7 @@ public class ModContent // ------------------------------------------------------------------------------------------------------------------- - public static final BlockDecor TREATED_WOOD_TABLE = (BlockDecor)(new BlockDecor( + public static final BlockDecor.WaterLoggable TREATED_WOOD_TABLE = (BlockDecor.WaterLoggable)(new BlockDecor.WaterLoggable( BlockDecor.CFG_CUTOUT, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), ModAuxiliaries.getPixeledAABB(1,0,1, 15,15.9,15) @@ -196,25 +198,25 @@ public class ModContent ModAuxiliaries.getPixeledAABB(4.1,0,4.1, 11.8,8.8,11.8) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_stool")); - public static final BlockDecor TREATED_WOOD_SIDE_TABLE = (BlockDecor)(new BlockDecor( + public static final BlockDecor.WaterLoggable TREATED_WOOD_SIDE_TABLE = (BlockDecor.WaterLoggable)(new BlockDecor.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), ModAuxiliaries.getPixeledAABB(2,0,2, 14,15.9,14) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_side_table")); - public static final BlockDecorDirected TREATED_WOOD_WINDOWSILL = (BlockDecorDirected)(new BlockDecorDirected( + public static final BlockDecorDirected.WaterLoggable TREATED_WOOD_WINDOWSILL = (BlockDecorDirected.WaterLoggable)(new BlockDecorDirected.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_FACING_PLACEMENT, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), ModAuxiliaries.getPixeledAABB(0.5,15,10.5, 15.5,16,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "treated_wood_windowsill")); - public static final BlockDecorDirected INSET_LIGHT_IRON = (BlockDecorDirected)(new BlockDecorDirected( + public static final BlockDecorDirected.WaterLoggable INSET_LIGHT_IRON = (BlockDecorDirected.WaterLoggable)(new BlockDecorDirected.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_OPPOSITE_PLACEMENT, Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(2f, 15f).sound(SoundType.METAL).lightValue(15), ModAuxiliaries.getPixeledAABB(5.2,5.2,15.7, 10.8,10.8,16.0) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "iron_inset_light")); - public static final BlockDecor STEEL_TABLE = (BlockDecor)(new BlockDecor( + public static final BlockDecor.WaterLoggable STEEL_TABLE = (BlockDecor.WaterLoggable)(new BlockDecor.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HORIZIONTAL|BlockDecor.CFG_LOOK_PLACEMENT, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(2f, 15f).sound(SoundType.WOOD), ModAuxiliaries.getPixeledAABB(0,0,0, 16,16,16) @@ -292,43 +294,42 @@ public class ModContent // ------------------------------------------------------------------------------------------------------------------- - public static final BlockDecorDirected SIGN_MODLOGO = (BlockDecorDirected)(new BlockDecorDirected( + public static final BlockDecorDirected.WaterLoggable SIGN_MODLOGO = (BlockDecorDirected.WaterLoggable)(new BlockDecorDirected.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1000f).sound(SoundType.WOOD).lightValue(1), ModAuxiliaries.getPixeledAABB(0,0,15.6, 16,16,16.0) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_decor")); - public static final BlockDecorDirected SIGN_HOTWIRE = (BlockDecorDirected)(new BlockDecorDirected( + public static final BlockDecorDirected.WaterLoggable SIGN_HOTWIRE = (BlockDecorDirected.WaterLoggable)(new BlockDecorDirected.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_hotwire")); - public static final BlockDecorDirected SIGN_DANGER = (BlockDecorDirected)(new BlockDecorDirected( + public static final BlockDecorDirected.WaterLoggable SIGN_DANGER = (BlockDecorDirected.WaterLoggable)(new BlockDecorDirected.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_danger")); - public static final BlockDecorDirected SIGN_DEFENSE = (BlockDecorDirected)(new BlockDecorDirected( + public static final BlockDecorDirected.WaterLoggable SIGN_DEFENSE = (BlockDecorDirected.WaterLoggable)(new BlockDecorDirected.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_defense")); - public static final BlockDecorDirected SIGN_FACTORY_AREA = (BlockDecorDirected)(new BlockDecorDirected( + public static final BlockDecorDirected.WaterLoggable SIGN_FACTORY_AREA = (BlockDecorDirected.WaterLoggable)(new BlockDecorDirected.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), ModAuxiliaries.getPixeledAABB(2,2,15.6, 14,14,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_factoryarea")); - public static final BlockDecorDirected SIGN_EXIT = (BlockDecorDirected)(new BlockDecorDirected( + public static final BlockDecorDirected.WaterLoggable SIGN_EXIT = (BlockDecorDirected.WaterLoggable)(new BlockDecorDirected.WaterLoggable( BlockDecor.CFG_CUTOUT|BlockDecor.CFG_FACING_PLACEMENT|BlockDecor.CFG_HORIZIONTAL, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 1f).sound(SoundType.WOOD), ModAuxiliaries.getPixeledAABB(3,7,15.6, 13,13,16) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "sign_exit")); - // ------------------------------------------------------------------------------------------------------------------- public static final BlockDecorCraftingTable TREATED_WOOD_CRAFTING_TABLE = (BlockDecorCraftingTable)(new BlockDecorCraftingTable( @@ -410,32 +411,32 @@ public class ModContent )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_concrete")); public static final BlockDecorHalfSlab HALFSLAB_TREATEDWOOD = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( - BlockDecor.CFG_CUTOUT, + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, Block.Properties.create(Material.WOOD, MaterialColor.WOOD).hardnessAndResistance(1f, 4f).sound(SoundType.WOOD) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_treated_wood")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALIRON = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( - BlockDecor.CFG_CUTOUT, + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_iron")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALSTEEL = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( - BlockDecor.CFG_CUTOUT, + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_steel")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALCOPPER = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( - BlockDecor.CFG_CUTOUT, + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_copper")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALGOLD = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( - BlockDecor.CFG_CUTOUT, + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_gold")); public static final BlockDecorHalfSlab HALFSLAB_SHEETMETALALUMINIUM = (BlockDecorHalfSlab)(new BlockDecorHalfSlab( - BlockDecor.CFG_CUTOUT, + BlockDecor.CFG_CUTOUT|BlockDecor.CFG_HARD_IE_DEPENDENT, Block.Properties.create(Material.IRON, MaterialColor.IRON).hardnessAndResistance(1f, 10f).sound(SoundType.METAL) )).setRegistryName(new ResourceLocation(ModEngineersDecor.MODID, "halfslab_sheetmetal_aluminum")); @@ -701,4 +702,9 @@ public class ModContent ScreenManager.registerFactory(CT_WASTE_INCINERATOR, BlockDecorWasteIncinerator.BGui::new); } + @OnlyIn(Dist.CLIENT) + public static final void registerTileEntityRenderers(final FMLClientSetupEvent event) + { + ClientRegistry.bindTileEntitySpecialRenderer(BlockDecorCraftingTable.BTileEntity.class, new ModTesrs.TesrDecorCraftingTable()); + } } diff --git a/1.14/src/main/java/wile/engineersdecor/ModEngineersDecor.java b/1.14/src/main/java/wile/engineersdecor/ModEngineersDecor.java index f494ea6..fd7efdc 100644 --- a/1.14/src/main/java/wile/engineersdecor/ModEngineersDecor.java +++ b/1.14/src/main/java/wile/engineersdecor/ModEngineersDecor.java @@ -1,16 +1,15 @@ package wile.engineersdecor; import wile.engineersdecor.detail.ModConfig; -import wile.engineersdecor.detail.OptionalRecipeCondition; import wile.engineersdecor.detail.Networking; import wile.engineersdecor.blocks.*; +import wile.engineersdecor.detail.OptionalRecipeCondition.Serializer; import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.ItemGroup; import net.minecraft.tileentity.TileEntityType; -import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraft.block.Block; import net.minecraft.item.Item; @@ -33,7 +32,6 @@ import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import wile.engineersdecor.detail.OptionalRecipeCondition.Serializer; import javax.annotation.Nullable; @@ -70,7 +68,7 @@ public class ModEngineersDecor } private void onClientSetup(final FMLClientSetupEvent event) - { ModContent.registerContainerGuis(event); } + { ModContent.registerContainerGuis(event); ModContent.registerTileEntityRenderers(event); } private void onSendImc(final InterModEnqueueEvent event) {} @@ -78,12 +76,8 @@ public class ModEngineersDecor private void onRecvImc(final InterModProcessEvent event) {} - @SubscribeEvent - public void onServerStarting(FMLServerStartingEvent event) - {} - @Mod.EventBusSubscriber(bus=Mod.EventBusSubscriber.Bus.MOD) - public static class RegistryEvents + public static class ForgeEvents { @SubscribeEvent public static void onBlocksRegistry(final RegistryEvent.Register event) @@ -104,6 +98,32 @@ public class ModEngineersDecor @SubscribeEvent public static void onRegisterContainerTypes(final RegistryEvent.Register> event) { ModContent.registerContainers(event); } + + // @SubscribeEvent + public static void onServerStarting(FMLServerStartingEvent event) + {} + + // @SubscribeEvent + public static void onConfigLoad(net.minecraftforge.fml.config.ModConfig.Loading configEvent) + { + try { + ModEngineersDecor.logger().info("Loaded config file {}", configEvent.getConfig().getFileName()); + ModConfig.apply(); + } catch(Throwable e) { + ModEngineersDecor.logger().error("Failed to load config: " + e.getMessage()); + } + } + + @SubscribeEvent + public static void onConfigFileChange(net.minecraftforge.fml.config.ModConfig.ConfigReloading configEvent) + { + try { + ModEngineersDecor.logger().info("Config file changed {}", configEvent.getConfig().getFileName()); + ModConfig.apply(); + } catch(Throwable e) { + ModEngineersDecor.logger().error("Failed to load changed config: " + e.getMessage()); + } + } } // diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecor.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecor.java index 0374051..af1fbf4 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecor.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecor.java @@ -12,10 +12,16 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.block.IWaterLoggable; +import net.minecraft.state.StateContainer; import wile.engineersdecor.detail.ModAuxiliaries; +import net.minecraft.state.BooleanProperty; +import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.IFluidState; +import net.minecraft.fluid.Fluids; +import net.minecraft.world.IWorld; import net.minecraft.world.Explosion; import net.minecraft.world.World; import net.minecraft.util.math.AxisAlignedBB; @@ -26,6 +32,7 @@ import net.minecraft.util.math.shapes.VoxelShapes; import net.minecraft.block.Block; import net.minecraft.block.material.PushReaction; import net.minecraft.block.BlockState; +import net.minecraft.item.BlockItemUseContext; import net.minecraft.item.ItemStack; import net.minecraft.world.IBlockReader; import net.minecraft.world.storage.loot.LootContext; @@ -54,18 +61,20 @@ public class BlockDecor extends Block implements IDecorBlock public static final long CFG_REDSTONE_CONTROLLED = 0x0000000000020000L; // Denotes if a component has somehow a redstone control input public static final long CFG_ANALOG = 0x0000000000040000L; // Denotes if a component has analog behaviour public static final long CFG_HARD_IE_DEPENDENT = 0x8000000000000000L; // The block is implicitly opt'ed out if IE is not installed + public static final long CFG_WATERLOGGABLE = 0x4000000000000000L; // The derived block extends IWaterLoggable + public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public final long config; public final VoxelShape vshape; - public BlockDecor(long config, Block.Properties properties) - { this(config, properties, ModAuxiliaries.getPixeledAABB(0, 0, 0, 16, 16,16 )); } + public BlockDecor(long conf, Block.Properties properties) + { this(conf, properties, ModAuxiliaries.getPixeledAABB(0, 0, 0, 16, 16,16 )); } - public BlockDecor(long config, Block.Properties properties, AxisAlignedBB aabb) - { super(properties); this.config = config; this.vshape = VoxelShapes.create(aabb); } + public BlockDecor(long conf, Block.Properties properties, AxisAlignedBB aabb) + { super(properties); config = conf; vshape = VoxelShapes.create(aabb); } - public BlockDecor(long config, Block.Properties properties, VoxelShape voxel_shape) - { super(properties); this.config = config; this.vshape = voxel_shape; } + public BlockDecor(long conf, Block.Properties properties, VoxelShape voxel_shape) + { super(properties); config = conf; vshape = voxel_shape; } @Override @OnlyIn(Dist.CLIENT) @@ -87,6 +96,18 @@ public class BlockDecor extends Block implements IDecorBlock public VoxelShape getCollisionShape(BlockState state, IBlockReader world, BlockPos pos, ISelectionContext selectionContext) { return vshape; } + @Override + @Nullable + public BlockState getStateForPlacement(BlockItemUseContext context) + { + BlockState state = super.getStateForPlacement(context); + if((config & CFG_WATERLOGGABLE)!=0) { + IFluidState fs = context.getWorld().getFluidState(context.getPos()); + state = state.with(WATERLOGGED,fs.getFluid()==Fluids.WATER); + } + return state; + } + @Override public boolean canSpawnInBlock() { return false; } @@ -130,4 +151,52 @@ public class BlockDecor extends Block implements IDecorBlock public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(ItemStack.EMPTY); } // { return Collections.singletonList(new ItemStack(this.asItem())); } // + @Override + public boolean propagatesSkylightDown(BlockState state, IBlockReader reader, BlockPos pos) + { + if((config & CFG_WATERLOGGABLE)!=0) { + if(state.get(WATERLOGGED)) return false; + } + return super.propagatesSkylightDown(state, reader, pos); + } + + @Override + @SuppressWarnings("deprecation") + public IFluidState getFluidState(BlockState state) + { + if((config & CFG_WATERLOGGABLE)!=0) { + return state.get(WATERLOGGED) ? Fluids.WATER.getStillFluidState(false) : super.getFluidState(state); + } + return super.getFluidState(state); + } + + @Override + @SuppressWarnings("deprecation") + public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld world, BlockPos pos, BlockPos facingPos) + { + if((config & CFG_WATERLOGGABLE)!=0) { + if(state.get(WATERLOGGED)) world.getPendingFluidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); + } + return state; + } + + /** + * Water loggable version of the basic block. + */ + public static class WaterLoggable extends BlockDecor implements IWaterLoggable + { + public WaterLoggable(long config, Block.Properties properties) + { super(config|CFG_WATERLOGGABLE, properties); } + + public WaterLoggable(long config, Block.Properties properties, AxisAlignedBB aabb) + { super(config|CFG_WATERLOGGABLE, properties, aabb); } + + public WaterLoggable(long config, Block.Properties properties, VoxelShape voxel_shape) + { super(config|CFG_WATERLOGGABLE, properties, voxel_shape); } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { super.fillStateContainer(builder); builder.add(WATERLOGGED); } + } + } diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java index c5d39bf..597cdd1 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorChair.java @@ -28,7 +28,7 @@ import java.util.List; import java.util.Random; -public class BlockDecorChair extends BlockDecorDirected +public class BlockDecorChair extends BlockDecorDirected.WaterLoggable { private static boolean sitting_enabled = true; private static double sitting_probability = 0.1; diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java index 0d28e3a..cc86b26 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorCraftingTable.java @@ -11,16 +11,10 @@ package wile.engineersdecor.blocks; import wile.engineersdecor.ModContent; import wile.engineersdecor.ModEngineersDecor; import wile.engineersdecor.detail.Networking; -import net.minecraft.client.gui.screen.inventory.ContainerScreen; -import net.minecraft.client.gui.widget.button.ImageButton; import net.minecraft.inventory.container.*; -import net.minecraft.item.Items; -import net.minecraft.item.crafting.ICraftingRecipe; -import net.minecraft.item.crafting.IRecipeType; -import net.minecraft.item.crafting.Ingredient; import net.minecraft.network.play.server.SSetSlotPacket; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.play.server.SUpdateTileEntityPacket; import net.minecraft.world.*; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -31,7 +25,11 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.Item; +import net.minecraft.item.Items; import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.ICraftingRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.IRecipe; import net.minecraft.inventory.*; import net.minecraft.nbt.CompoundNBT; @@ -40,8 +38,12 @@ import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; -import net.minecraft.client.gui.widget.button.Button; +import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.text.StringTextComponent; import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.gui.screen.inventory.ContainerScreen; +import net.minecraft.client.gui.widget.button.ImageButton; +import net.minecraft.client.gui.widget.button.Button; import net.minecraftforge.fml.network.NetworkHooks; import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.registries.ForgeRegistries; @@ -51,9 +53,10 @@ import com.mojang.blaze3d.platform.GlStateManager; import com.google.common.collect.ImmutableList; import javax.annotation.Nullable; import java.util.*; +import java.util.stream.Collectors; -public class BlockDecorCraftingTable extends BlockDecorDirected +public class BlockDecorCraftingTable extends BlockDecorDirected.WaterLoggable { public static boolean with_assist = true; public static boolean with_assist_direct_history_refab = false; @@ -68,7 +71,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected } public BlockDecorCraftingTable(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) - { super(config, builder, unrotatedAABB); } + { super(config|CFG_WATERLOGGABLE, builder, unrotatedAABB); } @Override public boolean hasTileEntity(BlockState state) @@ -168,20 +171,33 @@ public class BlockDecorCraftingTable extends BlockDecorDirected // TileEntity ------------------------------------------------------------------------------ @Override - public void read(CompoundNBT compound) - { super.read(compound); readnbt(compound); } + public void read(CompoundNBT nbt) + { super.read(nbt); readnbt(nbt); } @Override - public CompoundNBT write(CompoundNBT compound) - { super.write(compound); writenbt(compound); return compound; } + public CompoundNBT write(CompoundNBT nbt) + { super.write(nbt); writenbt(nbt); return nbt; } @Override public CompoundNBT getUpdateTag() { CompoundNBT nbt = super.getUpdateTag(); writenbt(nbt); return nbt; } @Override - public void onLoad() - {} + @Nullable + public SUpdateTileEntityPacket getUpdatePacket() + { return new SUpdateTileEntityPacket(pos, 1, getUpdateTag()); } + + @Override + public void onDataPacket(NetworkManager net, SUpdateTileEntityPacket pkt) // on client + { super.read(pkt.getNbtCompound()); readnbt(pkt.getNbtCompound()); super.onDataPacket(net, pkt); } + + @Override + public void handleUpdateTag(CompoundNBT tag) // on client + { read(tag); } + + @OnlyIn(Dist.CLIENT) + public double getMaxRenderDistanceSquared() + { return 400; } // INameable --------------------------------------------------------------------------- @@ -251,7 +267,13 @@ public class BlockDecorCraftingTable extends BlockDecorDirected @Override public void closeInventory(PlayerEntity player) - { this.markDirty(); } + { + markDirty(); + if(world instanceof World) { + BlockState state = world.getBlockState(pos); + world.notifyBlockUpdate(pos, state, state, 1|2); + } + } @Override public boolean isItemValidForSlot(int index, ItemStack stack) @@ -356,6 +378,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected private final CraftingHistory history_; private final BInventoryCrafting matrix_; private final CraftResultInventory result_; + private boolean has_recipe_collision_; public BContainer(int cid, PlayerInventory pinv) { this(cid, pinv, new Inventory(BTileEntity.NUM_OF_SLOTS), IWorldPosCallable.DUMMY); } @@ -423,15 +446,22 @@ public class BlockDecorCraftingTable extends BlockDecorDirected //craft(windowId, world, player_, matrix_, result_); ServerPlayerEntity player = (ServerPlayerEntity) player_; ItemStack stack = ItemStack.EMPTY; - Optional optional = world.getServer().getRecipeManager().getRecipe(IRecipeType.CRAFTING, matrix_, world); - if(optional.isPresent()) { - ICraftingRecipe icraftingrecipe = optional.get(); - if(result_.canUseRecipe(world, player, icraftingrecipe)) { - stack = icraftingrecipe.getCraftingResult(matrix_); + List recipes = world.getServer().getRecipeManager().getRecipes(IRecipeType.CRAFTING, matrix_, world); + has_recipe_collision_ = false; + if(recipes.size() > 0) { + ICraftingRecipe recipe = recipes.get(0); + IRecipe currently_used = result_.getRecipeUsed(); + has_recipe_collision_ = (recipes.size() > 1); + if((recipes.size() > 1) && (currently_used instanceof ICraftingRecipe) && (recipes.contains(currently_used))) { + recipe = (ICraftingRecipe)currently_used; + } + if(result_.canUseRecipe(world, player, recipe)) { + stack = recipe.getCraftingResult(matrix_); } } result_.setInventorySlotContents(0, stack); player.connection.sendPacket(new SSetSlotPacket(windowId, 0, stack)); + syncProperties(player); } catch(Throwable exc) { ModEngineersDecor.logger().error("Recipe failed:", exc); } @@ -492,6 +522,39 @@ public class BlockDecorCraftingTable extends BlockDecorDirected // private aux methods --------------------------------------------------------------------- + public boolean has_recipe_collision() + { return has_recipe_collision_; } + + public void select_next_collision_recipe(IInventory inv) + { + wpc_.consume((world,pos)->{ + if(world.isRemote) return; + try { + ServerPlayerEntity player = (ServerPlayerEntity) player_; + final List matching_recipes = world.getServer().getRecipeManager().getRecipes(IRecipeType.CRAFTING, matrix_, world); + if(matching_recipes.size() < 2) return; // nothing to change + IRecipe currently_used = result_.getRecipeUsed(); + List usable_recipes = matching_recipes.stream() + .filter((r)->result_.canUseRecipe(world,player,r)) + .sorted((a,b)->Integer.compare(a.getId().hashCode(), b.getId().hashCode())) + .collect(Collectors.toList()); + for(int i=0; i= usable_recipes.size()) i=0; + currently_used = usable_recipes.get(i); + ItemStack stack = ((ICraftingRecipe)currently_used).getCraftingResult(matrix_); + result_.setInventorySlotContents(0, stack); + result_.setRecipeUsed(currently_used); + break; + } + } + onCraftMatrixChanged(inv); + } catch(Throwable exc) { + ModEngineersDecor.logger().error("Recipe failed:", exc); + } + }); + } + private boolean itemstack_recipe_match(ItemStack grid_stack, ItemStack history_stack) { if(history_.current_recipe()!=null) { @@ -680,6 +743,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected private EnumRefabPlacement place_refab_stacks(IInventory inventory, final int slot_begin, final int slot_end) { List to_fill = crafting_slot_stacks_to_add(); + if(history_.current_recipe() != null) result_.setRecipeUsed(history_.current_recipe()); boolean slots_changed = false; boolean missing_item = false; int num_slots_placed = 0; @@ -719,6 +783,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected private EnumRefabPlacement distribute_stack(IInventory inventory, final int slotno) { List to_refab = crafting_slot_stacks_to_add(); + if(history_.current_recipe() != null) result_.setRecipeUsed(history_.current_recipe()); ItemStack to_distribute = inventory.getStackInSlot(slotno).copy(); if(to_distribute.isEmpty()) return EnumRefabPlacement.UNCHANGED; int matching_grid_stack_sizes[] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; @@ -796,9 +861,8 @@ public class BlockDecorCraftingTable extends BlockDecorDirected public void onServerPacketReceived(int windowId, CompoundNBT nbt) { - if(nbt.contains("history")) { - history_.read(nbt.getCompound("history")); - } + if(nbt.contains("history")) history_.read(nbt.getCompound("history")); + if(nbt.contains("hascollision")) has_recipe_collision_ = nbt.getBoolean("hascollision"); } public void onClientPacketReceived(int windowId, PlayerEntity player, CompoundNBT nbt) @@ -871,6 +935,9 @@ public class BlockDecorCraftingTable extends BlockDecorDirected if(stat != EnumRefabPlacement.UNCHANGED) { player_inventory_changed = true; changed = true; } } } break; + case BGui.BUTTON_NEXT_COLLISION_RECIPE: { + select_next_collision_recipe(inventory_); + } break; } } if(changed) inventory_.markDirty(); @@ -895,6 +962,14 @@ public class BlockDecorCraftingTable extends BlockDecorDirected } final CompoundNBT nbt = new CompoundNBT(); nbt.put("history", hist_nbt); + nbt.putBoolean("hascollision", has_recipe_collision_); + Networking.PacketContainerSyncServerToClient.sendToPlayer(player, windowId, nbt); + } + + private void syncProperties(PlayerEntity player) + { + final CompoundNBT nbt = new CompoundNBT(); + nbt.putBoolean("hascollision", has_recipe_collision_); Networking.PacketContainerSyncServerToClient.sendToPlayer(player, windowId, nbt); } } @@ -913,6 +988,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected protected static final String BUTTON_TO_STORAGE = "to-storage"; protected static final String BUTTON_FROM_PLAYER = "from-player"; protected static final String BUTTON_TO_PLAYER = "to-player"; + protected static final String BUTTON_NEXT_COLLISION_RECIPE = "next-recipe"; protected static final String ACTION_PLACE_CURRENT_HISTORY_SEL = "place-refab"; protected static final String ACTION_PLACE_SHIFTCLICKED_STACK = "place-stack"; protected static final ResourceLocation BACKGROUND = new ResourceLocation(ModEngineersDecor.MODID, "textures/gui/treated_wood_crafting_table.png"); @@ -936,6 +1012,7 @@ public class BlockDecorCraftingTable extends BlockDecorDirected buttons.add(addButton(new ImageButton(x0+158,y0+44, 12,12, 194,44, 12, BACKGROUND, (bt)->action(BUTTON_NEXT)))); buttons.add(addButton(new ImageButton(x0+158,y0+30, 12,12, 180,30, 12, BACKGROUND, (bt)->action(BUTTON_PREV)))); buttons.add(addButton(new ImageButton(x0+158,y0+58, 12,12, 194,8, 12, BACKGROUND, (bt)->action(BUTTON_CLEAR_GRID)))); + buttons.add(addButton(new ImageButton(x0+132,y0+18, 20,10, 183,95, 12, BACKGROUND, (bt)->action(BUTTON_NEXT_COLLISION_RECIPE)))); if(with_assist_quickmove_buttons) { buttons.add(addButton(new ImageButton(x0+49, y0+34, 9,17, 219,34, 17, BACKGROUND, (bt)->action(BUTTON_FROM_STORAGE)))); buttons.add(addButton(new ImageButton(x0+49, y0+52, 9,17, 208,16, 17, BACKGROUND, (bt)->action(BUTTON_TO_STORAGE)))); @@ -948,6 +1025,11 @@ public class BlockDecorCraftingTable extends BlockDecorDirected @Override public void render(int mouseX, int mouseY, float partialTicks) { + if(with_assist) { + boolean is_collision = getContainer().has_recipe_collision(); + buttons.get(3).visible = is_collision; + buttons.get(3).active = is_collision; + } renderBackground(); super.render(mouseX, mouseY, partialTicks); renderHoveredToolTip(mouseX, mouseY); diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirected.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirected.java index 792240f..e9083c9 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirected.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirected.java @@ -8,6 +8,7 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.block.IWaterLoggable; import wile.engineersdecor.detail.ModAuxiliaries; import net.minecraft.entity.EntityType; import net.minecraft.state.StateContainer; @@ -77,7 +78,7 @@ public class BlockDecorDirected extends BlockDecor @Override protected void fillStateContainer(StateContainer.Builder builder) - { builder.add(FACING); } + { super.fillStateContainer(builder); builder.add(FACING); } @Override @Nullable @@ -98,7 +99,20 @@ public class BlockDecorDirected extends BlockDecor } if((config & CFG_OPPOSITE_PLACEMENT)!=0) facing = facing.getOpposite(); if(((config & CFG_FLIP_PLACEMENT_SHIFTCLICK) != 0) && (context.getPlayer().isSneaking())) facing = facing.getOpposite(); - return getDefaultState().with(FACING, facing); + return super.getStateForPlacement(context).with(FACING, facing); + } + + /** + * Water loggable version of directed blocks. + */ + public static class WaterLoggable extends BlockDecorDirected implements IWaterLoggable + { + public WaterLoggable(long config, Block.Properties properties, AxisAlignedBB aabb) + { super(config|CFG_WATERLOGGABLE, properties, aabb); } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { super.fillStateContainer(builder); builder.add(WATERLOGGED); } } } diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirectedHorizontal.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirectedHorizontal.java index 9773cf6..4f4f98c 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirectedHorizontal.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDirectedHorizontal.java @@ -10,6 +10,7 @@ package wile.engineersdecor.blocks; import net.minecraft.block.HorizontalBlock; +import net.minecraft.block.IWaterLoggable; import net.minecraft.util.Mirror; import net.minecraft.util.Rotation; import net.minecraft.entity.EntityType; @@ -80,7 +81,7 @@ public class BlockDecorDirectedHorizontal extends BlockDecor @Override protected void fillStateContainer(StateContainer.Builder builder) - { builder.add(HORIZONTAL_FACING); } + { super.fillStateContainer(builder); builder.add(HORIZONTAL_FACING); } @Override @Nullable @@ -96,7 +97,7 @@ public class BlockDecorDirectedHorizontal extends BlockDecor } if((config & CFG_OPPOSITE_PLACEMENT)!=0) facing = facing.getOpposite(); if(((config & CFG_FLIP_PLACEMENT_SHIFTCLICK) != 0) && (context.getPlayer().isSneaking())) facing = facing.getOpposite(); - return getDefaultState().with(HORIZONTAL_FACING, facing); + return super.getStateForPlacement(context).with(HORIZONTAL_FACING, facing); } @Override @@ -109,4 +110,17 @@ public class BlockDecorDirectedHorizontal extends BlockDecor public BlockState mirror(BlockState state, Mirror mirrorIn) { return state.rotate(mirrorIn.toRotation(state.get(HORIZONTAL_FACING))); } + /** + * Water loggable version of directed blocks. + */ + public static class WaterLoggable extends BlockDecorDirectedHorizontal implements IWaterLoggable + { + public WaterLoggable(long config, Block.Properties properties, AxisAlignedBB aabb) + { super(config|CFG_WATERLOGGABLE, properties, aabb); } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { super.fillStateContainer(builder); builder.add(WATERLOGGED); } + } + } diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java index 18167a1..c5311bb 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorDropper.java @@ -73,7 +73,7 @@ public class BlockDecorDropper extends BlockDecorDirected @Override protected void fillStateContainer(StateContainer.Builder builder) - { builder.add(FACING, OPEN); } + { super.fillStateContainer(builder); builder.add(OPEN); } @Override @Nullable diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFloorGrating.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFloorGrating.java index 1b48b01..7b6db1f 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFloorGrating.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFloorGrating.java @@ -22,10 +22,10 @@ import net.minecraft.world.IBlockReader; import net.minecraft.world.World; -public class BlockDecorFloorGrating extends BlockDecor +public class BlockDecorFloorGrating extends BlockDecor.WaterLoggable { public BlockDecorFloorGrating(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) - { super(config, builder); } + { super(config|CFG_WATERLOGGABLE, builder); } @Override public boolean propagatesSkylightDown(BlockState state, IBlockReader reader, BlockPos pos) diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFull.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFull.java deleted file mode 100644 index e0716f4..0000000 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFull.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * @file BlockDecorFull.java - * @author Stefan Wilhelm (wile) - * @copyright (C) 2019 Stefan Wilhelm - * @license MIT (see https://opensource.org/licenses/MIT) - * - * Full block characteristics class. Explicitly overrides some - * `Block` methods to return faster due to exclusive block properties. - */ -package wile.engineersdecor.blocks; - -import net.minecraft.block.Block; - -public class BlockDecorFull extends BlockDecor -{ - public BlockDecorFull(long config, Block.Properties properties) - { super(config, properties); } -} diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java index 9d7254a..1e7cddb 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorFurnace.java @@ -84,7 +84,7 @@ public class BlockDecorFurnace extends BlockDecorDirected @Override @Nullable public BlockState getStateForPlacement(BlockItemUseContext context) - { return getDefaultState().with(FACING, context.getPlacementHorizontalFacing().getOpposite()).with(LIT, false); } + { return super.getStateForPlacement(context).with(FACING, context.getPlacementHorizontalFacing().getOpposite()).with(LIT, false); } @Override @SuppressWarnings("deprecation") diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHalfSlab.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHalfSlab.java index 9230a86..83997c6 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHalfSlab.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHalfSlab.java @@ -38,7 +38,7 @@ import java.util.Collections; import java.util.List; -public class BlockDecorHalfSlab extends BlockDecor +public class BlockDecorHalfSlab extends BlockDecor implements IWaterLoggable { public static final IntegerProperty PARTS = IntegerProperty.create("parts", 0, 14); @@ -61,12 +61,10 @@ public class BlockDecorHalfSlab extends BlockDecor VoxelShapes.create(new AxisAlignedBB(0,0,0,1,1,1)) // <- with 4bit fill }; - protected static final int num_slabs_contained_in_parts_[] = { - 1,2,3,4,5,6,7,8,7,6,5,4,3,2,1 ,0x1 // <- with 4bit fill - }; + protected static final int num_slabs_contained_in_parts_[] = { 1,2,3,4,5,6,7,8,7,6,5,4,3,2,1 ,0x1 }; // <- with 4bit fill public BlockDecorHalfSlab(long config, Block.Properties builder) - { super(config, builder); } + { super(config|CFG_WATERLOGGABLE, builder); } protected boolean is_cube(BlockState state) { return state.get(PARTS) == 0x07; } @@ -105,7 +103,7 @@ public class BlockDecorHalfSlab extends BlockDecor @Override protected void fillStateContainer(StateContainer.Builder builder) - { builder.add(PARTS); } + { super.fillStateContainer(builder); builder.add(PARTS, WATERLOGGED); } @Override @Nullable @@ -113,7 +111,7 @@ public class BlockDecorHalfSlab extends BlockDecor { final Direction facing = context.getFace(); double y = context.getHitVec().getY(); - return getDefaultState().with(PARTS, ((facing==Direction.UP) || ((facing!=Direction.DOWN) && (y < 0.6))) ? 0 : 14); + return super.getStateForPlacement(context).with(PARTS, ((facing==Direction.UP) || ((facing!=Direction.DOWN) && (y < 0.6))) ? 0 : 14); } @Override diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java index 87d093c..c940c1b 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorHorizontalSupport.java @@ -9,6 +9,7 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.block.IWaterLoggable; import wile.engineersdecor.ModContent; import wile.engineersdecor.detail.ModAuxiliaries; import net.minecraft.entity.EntityType; @@ -35,7 +36,7 @@ import java.util.ArrayList; import java.util.Arrays; -public class BlockDecorHorizontalSupport extends BlockDecor +public class BlockDecorHorizontalSupport extends BlockDecor implements IWaterLoggable { public static final BooleanProperty EASTWEST = BooleanProperty.create("eastwest"); public static final BooleanProperty LEFTBEAM = BooleanProperty.create("leftbeam"); @@ -45,7 +46,7 @@ public class BlockDecorHorizontalSupport extends BlockDecor public BlockDecorHorizontalSupport(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) { - super(config|CFG_HORIZIONTAL, builder); + super(config|CFG_HORIZIONTAL|CFG_WATERLOGGABLE, builder); AABBs = new ArrayList(Arrays.asList( // Effective bounding box VoxelShapes.create(ModAuxiliaries.getRotatedAABB(unrotatedAABB.grow(2.0/16, 0, 0), Direction.NORTH, true)), @@ -80,12 +81,12 @@ public class BlockDecorHorizontalSupport extends BlockDecor @Override protected void fillStateContainer(StateContainer.Builder builder) - { builder.add(EASTWEST, RIGHTBEAM, LEFTBEAM, DOWNCONNECT); } + { super.fillStateContainer(builder); builder.add(EASTWEST, RIGHTBEAM, LEFTBEAM, DOWNCONNECT, WATERLOGGED); } @Override @Nullable public BlockState getStateForPlacement(BlockItemUseContext context) - { return temp_block_update_until_better(getDefaultState().with(EASTWEST, context.getPlacementHorizontalFacing().getAxis()==Direction.Axis.X), context.getWorld(), context.getPos()); } + { return temp_block_update_until_better(super.getStateForPlacement(context).with(EASTWEST, context.getPlacementHorizontalFacing().getAxis()==Direction.Axis.X), context.getWorld(), context.getPos()); } private BlockState temp_block_update_until_better(BlockState state, IWorld world, BlockPos pos) { diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java index d7733dd..a8567c4 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorMineralSmelter.java @@ -70,7 +70,6 @@ public class BlockDecorMineralSmelter extends BlockDecorDirectedHorizontal public BlockState getStateForPlacement(BlockItemUseContext context) { return super.getStateForPlacement(context).with(PHASE, 0); } - @Override @SuppressWarnings("deprecation") public boolean hasComparatorInputOverride(BlockState state) diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java index 3c12253..b751872 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorPipeValve.java @@ -9,6 +9,7 @@ */ package wile.engineersdecor.blocks; +import net.minecraft.block.IWaterLoggable; import wile.engineersdecor.ModContent; import wile.engineersdecor.ModEngineersDecor; import net.minecraft.state.BooleanProperty; @@ -36,7 +37,7 @@ import net.minecraft.util.math.BlockPos; import javax.annotation.Nullable; -public class BlockDecorPipeValve extends BlockDecorDirected +public class BlockDecorPipeValve extends BlockDecorDirected implements IWaterLoggable { public static final BooleanProperty RS_CN_N = BooleanProperty.create("rs_n"); public static final BooleanProperty RS_CN_S = BooleanProperty.create("rs_s"); @@ -53,7 +54,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected } public BlockDecorPipeValve(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) - { super(config, builder, unrotatedAABB); } + { super(config|CFG_WATERLOGGABLE, builder, unrotatedAABB); } private BlockState get_rsconnector_state(BlockState state, IWorld world, BlockPos pos, @Nullable BlockPos fromPos) { @@ -88,7 +89,7 @@ public class BlockDecorPipeValve extends BlockDecorDirected @Override protected void fillStateContainer(StateContainer.Builder builder) - { builder.add(FACING, RS_CN_N, RS_CN_S, RS_CN_E, RS_CN_W, RS_CN_U, RS_CN_D); } + { super.fillStateContainer(builder); builder.add(RS_CN_N, RS_CN_S, RS_CN_E, RS_CN_W, RS_CN_U, RS_CN_D, WATERLOGGED); } @Override @Nullable diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSlab.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSlab.java index ecd0084..d4d0728 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSlab.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSlab.java @@ -51,7 +51,7 @@ public class BlockDecorSlab extends BlockDecor { return state.get(PARTS) >= 2; } public BlockDecorSlab(long config, Block.Properties builder) - { super(config, builder); } + { super(config|CFG_WATERLOGGABLE, builder); } @Override @OnlyIn(Dist.CLIENT) @@ -87,7 +87,7 @@ public class BlockDecorSlab extends BlockDecor @Override protected void fillStateContainer(StateContainer.Builder builder) - { builder.add(PARTS, TEXTURE_VARIANT); } + { super.fillStateContainer(builder); builder.add(PARTS, TEXTURE_VARIANT, WATERLOGGED); } @Override @Nullable @@ -96,7 +96,7 @@ public class BlockDecorSlab extends BlockDecor final Direction facing = context.getFace(); double y = context.getHitVec().getY(); int rnd = MathHelper.clamp((int)(MathHelper.getPositionRandom(context.getPos()) % 4), 0, 3); - return getDefaultState().with(PARTS, ((facing==Direction.UP) || ((facing!=Direction.DOWN) && (y < 0.6))) ? 0 : 1).with(TEXTURE_VARIANT, rnd); + return super.getStateForPlacement(context).with(PARTS, ((facing==Direction.UP) || ((facing!=Direction.DOWN) && (y < 0.6))) ? 0 : 1).with(TEXTURE_VARIANT, rnd); } @Override diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java index 3106f67..d3b1870 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorSolarPanel.java @@ -46,7 +46,7 @@ public class BlockDecorSolarPanel extends BlockDecor @Override @Nullable public BlockState getStateForPlacement(BlockItemUseContext context) - { return getDefaultState(); } + { return super.getStateForPlacement(context); } @Override public boolean hasTileEntity(BlockState state) diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorStraightPole.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorStraightPole.java index 57c25f5..1e70a64 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorStraightPole.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorStraightPole.java @@ -10,7 +10,10 @@ package wile.engineersdecor.blocks; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.IWaterLoggable; +import net.minecraft.fluid.Fluids; import net.minecraft.item.BlockItemUseContext; +import net.minecraft.state.StateContainer; import net.minecraft.world.World; import net.minecraft.util.Direction; import net.minecraft.util.math.AxisAlignedBB; @@ -18,22 +21,27 @@ import net.minecraft.util.math.BlockPos; import javax.annotation.Nullable; -public class BlockDecorStraightPole extends BlockDecorDirected +public class BlockDecorStraightPole extends BlockDecorDirected implements IWaterLoggable { public BlockDecorStraightPole(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) - { super(config, builder, unrotatedAABB); } + { super(config|CFG_WATERLOGGABLE, builder, unrotatedAABB); } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { super.fillStateContainer(builder); builder.add(WATERLOGGED); } @Override @Nullable public BlockState getStateForPlacement(BlockItemUseContext context) { Direction facing = context.getFace(); - BlockState state = getDefaultState().with(FACING, facing); + final boolean waterlogged = context.getWorld().getFluidState(context.getPos()).getFluid()==Fluids.WATER; + BlockState state = super.getStateForPlacement(context).with(FACING, facing).with(WATERLOGGED, waterlogged); if((config & CFG_FLIP_PLACEMENT_IF_SAME) != 0) { World world = context.getWorld(); BlockPos pos = context.getPos(); if(world.getBlockState(pos.offset(facing.getOpposite())).getBlock() instanceof BlockDecorStraightPole) { - state = state.with(FACING, state.get(FACING).getOpposite()); + state = state.with(FACING, state.get(FACING).getOpposite()).with(WATERLOGGED, waterlogged); } } return state; diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java index 74fad14..e5793d9 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWasteIncinerator.java @@ -71,7 +71,7 @@ public class BlockDecorWasteIncinerator extends BlockDecor @Override protected void fillStateContainer(StateContainer.Builder builder) - { builder.add(LIT); } + { super.fillStateContainer(builder); builder.add(LIT); } @Override @Nullable diff --git a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java index 0ffe709..f670831 100644 --- a/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java +++ b/1.14/src/main/java/wile/engineersdecor/blocks/BlockDecorWindow.java @@ -10,15 +10,17 @@ package wile.engineersdecor.blocks; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.block.IWaterLoggable; +import net.minecraft.state.StateContainer; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.math.AxisAlignedBB; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -public class BlockDecorWindow extends BlockDecorDirected +public class BlockDecorWindow extends BlockDecorDirected implements IWaterLoggable { public BlockDecorWindow(long config, Block.Properties builder, final AxisAlignedBB unrotatedAABB) - { super(config, builder, unrotatedAABB); } + { super(config|CFG_WATERLOGGABLE, builder, unrotatedAABB); } @Override @OnlyIn(Dist.CLIENT) @@ -29,4 +31,8 @@ public class BlockDecorWindow extends BlockDecorDirected @OnlyIn(Dist.CLIENT) public boolean canRenderInLayer(BlockState state, BlockRenderLayer layer) { return (layer==BlockRenderLayer.CUTOUT) || (layer==BlockRenderLayer.TRANSLUCENT); } + + @Override + protected void fillStateContainer(StateContainer.Builder builder) + { super.fillStateContainer(builder); builder.add(WATERLOGGED); } } diff --git a/1.14/src/main/java/wile/engineersdecor/detail/ModConfig.java b/1.14/src/main/java/wile/engineersdecor/detail/ModConfig.java index 1f20253..9da05b9 100644 --- a/1.14/src/main/java/wile/engineersdecor/detail/ModConfig.java +++ b/1.14/src/main/java/wile/engineersdecor/detail/ModConfig.java @@ -11,13 +11,12 @@ package wile.engineersdecor.detail; import wile.engineersdecor.ModContent; import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.blocks.*; +import wile.engineersdecor.blocks.BlockDecorSolarPanel.BTileEntity; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.eventbus.api.SubscribeEvent; import org.apache.commons.lang3.tuple.Pair; -import wile.engineersdecor.blocks.*; -import wile.engineersdecor.blocks.BlockDecorSolarPanel.BTileEntity; import javax.annotation.Nullable; import java.util.ArrayList; @@ -45,14 +44,6 @@ public class ModConfig CLIENT = client_.getLeft(); } - @SubscribeEvent - public static void onLoad(final net.minecraftforge.fml.config.ModConfig.Loading configEvent) - { apply(); ModEngineersDecor.logger().info("Loaded config file {}", configEvent.getConfig().getFileName()); } - - @SubscribeEvent - public static void onFileChange(final net.minecraftforge.fml.config.ModConfig.ConfigReloading configEvent) - { ModEngineersDecor.logger().info("Config file changed {}", configEvent.getConfig().getFileName()); } - //-------------------------------------------------------------------------------------------------------------------- public static class ClientConfig @@ -465,6 +456,9 @@ public class ModConfig return false; } + public static boolean withExperimental() + { return with_experimental_features_; } + //-------------------------------------------------------------------------------------------------------------------- // Cache //-------------------------------------------------------------------------------------------------------------------- @@ -472,6 +466,7 @@ public class ModConfig private static final ArrayList excludes_ = new ArrayList(); public static boolean without_crafting_table = false; public static boolean immersiveengineering_installed = false; + private static boolean with_experimental_features_ = false; public static final void apply() { @@ -484,10 +479,14 @@ public class ModConfig BlockDecorSolarPanel.BTileEntity.on_config(COMMON.small_solar_panel_peak_production.get()); without_crafting_table = isOptedOut(ModContent.TREATED_WOOD_CRAFTING_TABLE); immersiveengineering_installed = ModAuxiliaries.isModLoaded("immersiveengineering"); + with_experimental_features_ = COMMON.with_experimental.get(); + if(with_experimental_features_) { + ModEngineersDecor.logger().info("Config: EXPERIMENTAL FEATURES ENABLED."); + } { String inc = COMMON.pattern_includes.get().toLowerCase().replaceAll(ModEngineersDecor.MODID+":", "").replaceAll("[^*_,a-z0-9]", ""); if(COMMON.pattern_includes.get() != inc) COMMON.pattern_includes.set(inc); - if(!inc.isEmpty()) ModEngineersDecor.logger().info("Pattern includes: '" + inc + "'"); + if(!inc.isEmpty()) ModEngineersDecor.logger().info("Config pattern includes: '" + inc + "'"); String[] incl = inc.split(","); includes_.clear(); for(int i=0; i< incl.length; ++i) { @@ -497,7 +496,7 @@ public class ModConfig } { String exc = COMMON.pattern_includes.get().toLowerCase().replaceAll(ModEngineersDecor.MODID+":", "").replaceAll("[^*_,a-z0-9]", ""); - if(!exc.isEmpty()) ModEngineersDecor.logger().info("Pattern excludes: '" + exc + "'"); + if(!exc.isEmpty()) ModEngineersDecor.logger().info("Config pattern excludes: '" + exc + "'"); String[] excl = exc.split(","); excludes_.clear(); for(int i=0; i< excl.length; ++i) { @@ -505,8 +504,5 @@ public class ModConfig if(!excl[i].isEmpty()) excludes_.add(excl[i]); } } - - } - } diff --git a/1.14/src/main/java/wile/engineersdecor/detail/ModTesrs.java b/1.14/src/main/java/wile/engineersdecor/detail/ModTesrs.java new file mode 100644 index 0000000..274bf6a --- /dev/null +++ b/1.14/src/main/java/wile/engineersdecor/detail/ModTesrs.java @@ -0,0 +1,84 @@ +/* + * @file ModTesrs.java + * @author Stefan Wilhelm (wile) + * @copyright (C) 2018 Stefan Wilhelm + * @license MIT (see https://opensource.org/licenses/MIT) + * + * Yet unstructured initial experiments with TESRs. + * May be structured after I know what I am doing there. + */ +package wile.engineersdecor.detail; + +import wile.engineersdecor.ModEngineersDecor; +import wile.engineersdecor.blocks.BlockDecorCraftingTable; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.MathHelper; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import com.mojang.blaze3d.platform.GlStateManager; + + +public class ModTesrs +{ + //-------------------------------------------------------------------------------------------------------------------- + // Crafting table + //-------------------------------------------------------------------------------------------------------------------- + + @OnlyIn(Dist.CLIENT) + public static class TesrDecorCraftingTable extends TileEntityRenderer + { + private static int tesr_error_counter = 4; + private static double scaler = 0.10; + private static double gap = 0.19; + private static double yrotations[] = {0, 90, 180, 270}; // [hdirection] S-W-N-E + private static double offsets[][][] = { // [hdirection][slotindex][xz] + { {-1,-1},{+0,-1},{+1,-1}, {-1,+0},{+0,+0},{+1,+0}, {-1,+1},{+0,+1},{+1,+1} }, // S + { {+1,-1},{+1,+0},{+1,+1}, {+0,-1},{+0,+0},{+0,+1}, {-1,-1},{-1,+0},{-1,+1} }, // W + { {+1,+1},{+0,+1},{-1,+1}, {+1,+0},{+0,+0},{-1,+0}, {+1,-1},{+0,-1},{-1,-1} }, // N + { {-1,+1},{-1,+0},{-1,-1}, {+0,+1},{+0,+0},{+0,-1}, {+1,+1},{+1,+0},{+1,-1} }, // E + }; + + @Override + @SuppressWarnings("deprecation") + public void render(final BlockDecorCraftingTable.BTileEntity te, double x, double y, double z, float partialTicks, int destroyStage) + { + if(tesr_error_counter<=0) return; + try { + int di = MathHelper.clamp(te.getWorld().getBlockState(te.getPos()).get(BlockDecorCraftingTable.FACING).getHorizontalIndex(), 0, 3); + long posrnd = te.getPos().toLong(); + posrnd = (posrnd>>16)^(posrnd<<1); + for(int i=0; i<9; ++i) { + final ItemStack stack = te.getStackInSlot(i); + if(stack.isEmpty()) continue; + double prnd = ((double)(((Integer.rotateRight(stack.getItem().hashCode()^(int)posrnd,(stack.getCount()+i)&31)))&1023))/1024.0; + double rndo = gap * ((prnd*0.1)-0.05); + double ox = gap * offsets[di][i][0], oz = gap * offsets[di][i][1]; + double oy = 0.5; + double ry = ((yrotations[di]+180) + ((prnd*60)-30)) % 360; + if(stack.isEmpty()) return; + GlStateManager.pushMatrix(); + GlStateManager.disableLighting(); + RenderHelper.enableStandardItemLighting(); + GlStateManager.translated(x+0.5+ox, y+0.5+oy, z+0.5+oz); + GlStateManager.rotated(90, 1, 0, 0); + GlStateManager.rotated(ry, 0, 0, 1); + GlStateManager.translated(rndo, rndo, 0); + GlStateManager.scaled(scaler, scaler, scaler); + Minecraft.getInstance().getItemRenderer().renderItem(stack, net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType.FIXED); + RenderHelper.disableStandardItemLighting(); + GlStateManager.enableLighting(); + GlStateManager.popMatrix(); + } + } catch(Throwable e) { + if(--tesr_error_counter<=0) { + ModEngineersDecor.logger().error("TESR was disabled because broken, exception was: " + e.getMessage()); + ModEngineersDecor.logger().error(e.getStackTrace()); + } + } + } + } + +} diff --git a/1.14/src/main/java/wile/engineersdecor/detail/OptionalRecipeCondition.java b/1.14/src/main/java/wile/engineersdecor/detail/OptionalRecipeCondition.java index 348dfcd..c13f213 100644 --- a/1.14/src/main/java/wile/engineersdecor/detail/OptionalRecipeCondition.java +++ b/1.14/src/main/java/wile/engineersdecor/detail/OptionalRecipeCondition.java @@ -32,9 +32,10 @@ public class OptionalRecipeCondition implements ICondition private final List all_required; private final List any_missing; private final @Nullable ResourceLocation result; + private final boolean experimental; - public OptionalRecipeCondition(ResourceLocation result, List required, List missing) - { all_required = required; any_missing = missing; this.result = result; } + public OptionalRecipeCondition(ResourceLocation result, List required, List missing, boolean isexperimental) + { all_required = required; any_missing = missing; this.result = result; experimental=isexperimental; } @Override public ResourceLocation getID() @@ -49,12 +50,14 @@ public class OptionalRecipeCondition implements ICondition sb.delete(sb.length()-1, sb.length()).append("], any-missing: ["); for(ResourceLocation e:any_missing) sb.append(e.toString()).append(","); sb.delete(sb.length()-1, sb.length()).append("]"); + if(experimental) sb.append(" EXPERIMENTAL"); return sb.toString(); } @Override public boolean test() { + if((experimental) && (!ModConfig.withExperimental())) return false; final IForgeRegistry block_registry = ForgeRegistries.BLOCKS; final IForgeRegistry item_registry = ForgeRegistries.ITEMS; if(result != null) { @@ -103,6 +106,7 @@ public class OptionalRecipeCondition implements ICondition List required = new ArrayList<>(); List missing = new ArrayList<>(); ResourceLocation result = null; + boolean experimental = false; if(json.has("result")) result = new ResourceLocation(json.get("result").getAsString()); if(json.has("required")) { for(JsonElement e:JSONUtils.getJsonArray(json, "required")) required.add(new ResourceLocation(e.getAsString())); @@ -110,7 +114,8 @@ public class OptionalRecipeCondition implements ICondition if(json.has("missing")) { for(JsonElement e:JSONUtils.getJsonArray(json, "missing")) missing.add(new ResourceLocation(e.getAsString())); } - return new OptionalRecipeCondition(result, required, missing); + if(json.has("experimental")) experimental = json.get("experimental").getAsBoolean(); + return new OptionalRecipeCondition(result, required, missing, experimental); } } } diff --git a/1.14/src/main/resources/assets/engineersdecor/textures/gui/treated_wood_crafting_table.png b/1.14/src/main/resources/assets/engineersdecor/textures/gui/treated_wood_crafting_table.png index bc26abf9cc0fff2b24bdc5ad61762bff742425bf..c6c18dc7aacfc9672be747cd6616b3a8d21b389f 100644 GIT binary patch delta 11483 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 Ji&U*%{vQOO6HNdB delta 10775 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

`y^q;tNv+Lb+>pLX);F&)Uk{y2oDhAhKyszm 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 diff --git a/1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test1_diorite.json b/1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test1_diorite.json new file mode 100644 index 0000000..138ffb8 --- /dev/null +++ b/1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test1_diorite.json @@ -0,0 +1,21 @@ +{ + "conditions": [ + { + "type": "engineersdecor:optional", + "experimental": true + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "DDD", + " D ", + " D " + ], + "key": { + "D": { "item": "minecraft:diorite" } + }, + "result": { + "item": "minecraft:stone", + "count": 1 + } +} diff --git a/1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test2_diorite.json b/1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test2_diorite.json new file mode 100644 index 0000000..a2ba7c7 --- /dev/null +++ b/1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test2_diorite.json @@ -0,0 +1,21 @@ +{ + "conditions": [ + { + "type": "engineersdecor:optional", + "experimental": true + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "DDD", + " D ", + " D " + ], + "key": { + "D": { "item": "minecraft:diorite" } + }, + "result": { + "item": "minecraft:granite", + "count": 1 + } +} diff --git a/1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test3_diorite.json b/1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test3_diorite.json new file mode 100644 index 0000000..a8cc4b3 --- /dev/null +++ b/1.14/src/main/resources/data/engineersdecor/recipes/testing/collision_test3_diorite.json @@ -0,0 +1,21 @@ +{ + "conditions": [ + { + "type": "engineersdecor:optional", + "experimental": true + } + ], + "type": "minecraft:crafting_shaped", + "pattern": [ + "DDD", + " D ", + " D " + ], + "key": { + "D": { "item": "minecraft:diorite" } + }, + "result": { + "item": "minecraft:andesite", + "count": 1 + } +} diff --git a/documentation/engineers-decor-crafting-table-items.png b/documentation/engineers-decor-crafting-table-items.png new file mode 100644 index 0000000000000000000000000000000000000000..f6da094d171b396d561bce267c20638b2e1bd9d9 GIT binary patch literal 169032 zcmV*qKt;caP)nkxhCPcJYcraWT+GklAK;SKo1q!GX|9H(bx&K@6iNXFpa3L9 z0tuB`L}Y07;;AcKaN*+mjYOF-%>YaB;$3&Y?&o~xJKs4@&Rm(*T5D*fp`?b^00_Vs z1>*$nmlO(8YV!weKL>yi0v1s)MgT&>g zr@We<)YZDfjK@9SJ=6U~(u_bUG2_x2WvR?kXg~_--x*^BJZAnoi(EpM3LpR_0E?=B z(^~tbCFIbaC>4}aelV2Uu@C|tRqLs>eMcG~lpu=j`_uN{g86}j-!D<*(my{=8Mqyr zk{VJd_o~5T21=`SH*+=5H1m_@>nTB;a{r97Q0~K^jDknB8gno%x0kj3Y@;3f`AH!m z3gtgb8Lf?_K0o-MBf;-MV9$xJ#+mSHFDVVT)LNN6={7o{1jO!r4ej?KG$5pccKePJ zL^1czruNLb@0X&QL!2@&&H$MGmk-M7d?A<*{PO+iuObs5gg|SJIN|;)C?$Ta55IQ+ z$ofUKPL%lHE2U7nJz@Wi+A~QA5I49VA_;Ago1d=MT1sVyLl7mbHXp4tK!S6t-Mb~V zcSdP7hsqWKl%jUVC?$vHXa*A61ZTSPO#IpP48MXfYHWxdTy3ABdR=}#_7{(+AGegs z7+CvR73>2_jm-?7DTM+EF?%)mPR1!1r+$n@Ce3$S+sndt9gI~;<=>H8LmjL&b??vq zTm3y8o-29GKbf%^XF`ZsTP56iplFW7AjF>ULPC_)86d$Kj#G{(W`4{EyP2PBlvH*} zYmFik(CW~B3675QSCmrYPn@X=){{`PXLN09_Inh(ojANFrBEnyVdu>dH@NZ5_AE-F zADf?hf7JS4QA%rH%-o}d`Qb~cAd)z1<8KerE9M4_a%_T8=pC6Apw4YNnwdrBG{ zj59D!jD1lWTGjCYx%Bda&WFM{D{2HH1(o zG671B!*PcX1Ob@Spws{+giZ$p%7Q+(_~rl;zxe(jT7VYVENHDE3gi5p(_|4fU_~gD zr86qTgR9WUc_&8zAruG*2(uv2K3_@mA0gIR#LUkvJfsF(C=1Zc_i#>Y2GeX1vz}4R zptZJZT{kv_R4~$QIsyV=9kT;hZr$7iv{H7h?E2Dby;OKm1Bc`Q5MajO{*72ap;QH6 zlmbK{ELbJrQDu}>;MfQO8Y8jayh>{1nec}tG#WfI`;dS@!)#pRNHvrOilK4%#P1(F zAE}^}_V3a;ad!aSXNi5jcS?5c38@fzSyYBZ302`*VgQ!gdLox0=JjLIcpO}X?>z+c z;W(V5ss5SNoKTc7Z=saZ7ToE|0E!Cq@`zY~W7dL4)Q{~jxN{)XIdAf#07`>$S~IvR z0A}GFh#$9pd;zSZasVUzcS3-XiPS&0$OZCY1=PY{l-2=HXzX2p;=VJ_L=_lPcu?wq zhO;$3NC^N*2%i0)wMJP;yWVD>I-779EI23jV}Oeg3&!k*$_J%8dKL)R?S%>)aTGHj z^k@YL;Q|s;1vb`EQARzOaOcF0#RQlx=#buCFixs~MOOj1e_amrLnDg04J-(xRK^+E zkGW_2JzGlejCjltr_8TMF)XV+d;eL+P&RG?>h4$b18m(NwKzu-R_^cVbq5Zj1c5MiNDCH(_CdMC` zwXf{3Ruxe|X)umpZ@Ito{=o$-DtuSOlOJwhN+IpfQUBd8AoT=+^~Ej_@Sm}J!GR`1 z%zmf^Qh|-u0JM9zc6T#Q?b*;EwDLDv1LV}@84Uu%Jh94YYiNJ4-5@;jw-Z!a+ejur zsHED^lu_>_YoJW&>VRw13}OgOJSeaRz@bwmly}@JI4C@3ev>JwAceMutlDT&C@{_{ zhJ^t6u!OWI*f9qVJcd!Po0|$EDFgtGQsOs-i?)<~!S1{L#??Pg2sq}%ZC*+(Gsf&1 z25afQ(}7hbm5-bVfpLU~4wHL+==OBLt~oZ5aq7{0S;z`(p&qqUS_QybYwx&;eJAdW zI>+NS9%Iz6sZzRP3GJMcM&!YYC~cGyFf?v0O!P?oJO;hOf0j^!v>EyLU?NNHL3QZ3 zoH2H*LTF{IOeCpoROY~(F-l6Q8q?wd9e}b_5Tyk9kw}Qr${AwGb!{>qJqS>Fi_u-Mo*b6zUj;B3DX(*LZnp9YYb^&>S9 z7&`y(y=se;TqY+B)?F~75s(_Nz%*DRf;y0OWQPl6rH~#IPzR()1*W_ovg4+~_q(5W z!KNFNvg6~9fwO_MDD7F-8a(0FCg^IPTISoZd&Ga%?+Zpe&d}Oq+_c?O)mhWEjEPnX zj8pK0BTkrE|KsPUbRD%DqZ%dL9!~S6MJ}N%%M}`tD$=eFyg`VlC~#fTf_~74m>4rz zdME;@*b@iT9Iz9Gvdo4#WSldLzHL+;7^E;j=8=i`9Q~U0N(+jVOs@0?y}gKI1!2;zkKbhQ+fQ*g%J{hWzrE6^-T0cq3MJYq=Ok>59E zE-SX9=JPd@Mr2bSX0HqfWu3tyA!8QommrEg%+inm;JH+T5URpBwM|!NVh*Q!LJ%*7 z0jloj+T%$r_2(HE;IT75I@RzFA=nTY?l%h04l>y z)}0uY7KE}l8 z0MrHNM+kSujlJ<1fFPwtZCW<7K_YC*oy8PT@EIe|Xfg9W?p1nVpn*m^3iiLtQfbfD z`n4nO?5SXXR<^+fC1H?e=5Yx82c&@mPL$G$Wh3w;jT>v)iu^lqfq*)c=C5UP9I$tp zHyf0@F*sl0EUA+4Hnswm6)UeTspP)bu~Z;c(1;)l;(f6_L+;&^lb5EoOV3bBt@eWY ziRMG$C&Xiez+G@6RY0u;G_#|iovz3I`NuRH1V%UEp6MbxWhcku%E37bzV1*}9YqKF zuP|p%XhpS?!zz-)^sdrXYJr-_-#ZRsqA5ph3L$H(QOyts&V}0Cark0nuqL5~;W1yN zotCAVR|tqhBkcfi2p)8xSBVoAtkT2f73d2>)~8A>5UY8sz>cl~hFY|E zNI#-cr6T|!j#-UO6alkTOMx8%K1!Lh;++mRnjHU{R9(9l{y9lGSj_C;>dy?{y@p1T zMs(-45u&~Sx&(J`3S_*89u!*r(6R#t1vV^(7t z;y`O90xby+=_i%cHZA$M&c!gSm6mPLE&TW>B}kgQ1`tD#8zuD5zE780slBtBz0Ce2s_oz($oj>I--AsBXZb9SxscUsWOF0tAggufi?t3$_ZA5|8j zZs)@woYvgmg(*_MXNY%06`GEo~nHQS-gk+PWaZF-+~T1X0R84hhfoVH**$ z!Nlr_D==OWLIei4z=OF;x8?Mlp@hYZM|;^yxSwlUO`*LHblIG;RN#bKVY>AMqEI+{ zWzGwODW@2lY9MJEkzZLz$U-5rI)N&8ZP54lR1+hUDOf}yONH&V9tPb40FbsKjEtp- z5|hds4oVCT3WJgZ1kM-*bu5!Ili*3kJUL3wu>eYHl%=%7eCpXR=a60GRTiE5J^gk&iBvG+@uCWL;$F1k9mRhc-Y^2T{1CT$NBr8d1gYD0eVzv>X6Wt*WTS z>ECL46o)h|gBV%BLYZL_r8LHD*elTM8_Bhk=Hz5~or|(QxdU-S|abv2G?3sn(}|kb5KCY{zJ{BOlpnRc8?U z2f1HA9x)$nQ${fC7CxAulpt+!|2>0Ffoxd%h$~LG3D>QFbYi9fr8Oua=ywaB;(*p* ztcpS_5N_6N&@E8p(mSs_E4^KeQ|`gO*4m%5ItU;>tP znF!JhCf)ALUew@-)5x=4Ny_VBEChf;qR6VbG)EK9=9IbcQ7j=Q_38o(#wnWZxJsE0 z1qQvM#%?ecYHBLb5jQx-r<>l9clWZI5%&(+f*teRYTr9;TbwYHiuRFPJuu0f#?_^G z1D0`ckej*LH1Wt}>YvMal?rnVvP+!-K(ifr;9M3qn6nH)S*lu~U|11SPe)p2q&=R1 zSYT3S0?Rjdy#pMdZDMSyQ3VF23>+lT?-sR`lgkQfr7`GNspUA~Xtbi5Y@oD)VQtw? z2cDvcp*5b^3;}^Cq}7U=2W3NHfTwoMT4mGYlv}Z~eK#=$Y&t1Uxd#=Zlo%WoP|BL@Z3>z4p+MFzAN<_Kl6SEZOK}!wBu;7P4-Md{A1^It90d zPTB|3R5lT>G0^R)#pb=PkaN$@ zX&su+E__Q)I z*-%(#OKjxDjQC#}qde#p-ch?;w`U++^^G>pK$OZ9I4HwrL^1O^E@9Wu>H0!OK}u*10tnHF%*>{&#S5-N-0LCn?YnKYwXsK$dC33T^zzvpEst-&<_YhZtA08vDJg}Rms zSwF|_{rgZ-R@Lw(2W8XmI$(x1+DA`-a1P>9=RES@*%!>XOpH=BofV-JP{s#koday$ zxecDg7@0`Tb8QjK-sS*OX-xDfl2(fOOPA1^nFF+fC^V8ZK@`WJltDpN8G=LQ>eR(o zTA|EK^w!t0bN3d?EJKt;&{6`w9tF%qdCTk-u z538CD%PNp{I@q~?51rLVfD$ISuzM#T3Im+&9&C>`as2G_m|Z-DxY0nw8KNkH91bC+ zfK*O~BP+Tem3~=Cg~rr0_8;EE-h+F{I~@%7cTtulN+BSGgj5R5Vie9f#ugSaaq0}x z(J{1V=D`3k%AkrI<)9B5F~cxhAMHRE2{J5%a)5I@{QN4qkCq|&J;*!*D1}f8nGguY zKXI#t54Jl$mR20&bmF8 zU}U0Un5;k;#<>AEY14pe| z5~QQrU#7xTrf#Jab!$BFOOUo+70Rt)=jtH5z zN@(hIA`vDR#?aUnAf;i`iXa_G9I_^WDoczUIa;fx)v8LBH%20iOr-uf!@k*XUTPDR zM~bWuIqdqq+S?oYA_v9^#-^Ky997ODkk)u5_Ef~Sgs>5_OCxCW{>mWzrM33$BMe#` z0HSMJd>lxST>+)Tl6f1sN`=vdMNFJLV_7VXw9z(9pL@3n4Rlr-*+A6(tV+v_a*liN z|E>ZwT7v}7)Ff~)jAP{Z6NpF00d1<2$0tUi@wnDf!)ZiGm9C;ysaW1Sz@x9O+Hnvg z$nBS)suE5(Cb=;>fwOP_)Pw3~E5*q8xH%6>BO4ZwO4ZuLgegW*l+aRuGLDV!u4Cu! zEf8wcC!&P5^CdcD`Un~`vzUJFWym}?+NwA~+H84!qhaw$O%T3y^Lv00L}>%*#H6*K zC6=##g8up{2sHtYw9lji1ro3qQL~NXuf2tIY6{RANs>VKd&cDd%F->R#jelTT$tb z`&%0*20cukzl^9gg1mcx?b|odx$&J3`jP$+09Aq-$TJXfU=kB(vd)ETfOMSpt}o%{E2@ZhciidutMReM-*r=&zaBnabRlwtq&4>(wP0G^}(B|b3l6`-CCW@yYWpuMn!ayUeHV-2gdwLc}ElLV$cWW9GVy{SlC9w6(Kcd=P`BRG9Uzs?g9EM4{-3{9?GJCAQauaKq-}FS2aFa z-2!18Jc`g59Yfk40Xg;5tR{!@^iRIBgrbnPPYglYiZC(PG&D1S-a&4nLQ;tn!!llB zwHF3a+A0tG;TrQ2wrxaq7qj zTBEU#NISbZl$15}3?1ri;5QtPs>%qT-U>7#qL3z^>^5^LeB{NrN!R(x!2nH}pRMP! z!&V3FvDj4c*>^DLl^FI5NCHd_IoO~oAfQy&QZNJov!WG7&z$#BKP3dMkwz7$SYue$5&@<73KXcw0rf6u`q=vg$A?&k5iof>CX{0QmZ#g(MT&+Mo0-6mYxMw z3Q8I_fDnL25mv8#j{OJsDz!sVn)hd4XvC|^FqWiPeCIDA3zHI0k`$apJ|Z(!oz(Xf zleVN@+qLqzmk@N;R`J8T|AL4{f2QG7)fZ~~=rJt4@QQJ|T4Qv49BJC{?_5Y(i~j5S zGzpOx25eG>ox8WN_SI*GiYEjr&wQCQA;bb_^InqiDa^nA4wNVXXryV=GY(o;dPK?? zHgEob?BKxfi{{K6lJN;^P$_or+{EfLk;i{eC4z z_8K3G{>~OUD-WwNKXC!0C(f8PEekAv`X_W(9~qf~2D(MzTc$8VkT{{WQdqe19Of=u zf>sKYN7(rE1IR2hwo@v|KRaKIk;UVfz4DB4)>>ob!{4JgH~|%kRGnk!7B36tyA+0%E~{RuZ#Mzkt@lk~weL5L=&pjIy(D=C3t!A!@QF zWmy+ODNelob0lLECh+O^u=)AN{(NdFA@cmOUTp5%Oq{)dsSB4Nivn5-tbF(fl!JkH zo^HO*vbZ(pjV6vf{|cJZv(QSR=pJDC{og=|(w-|o1ZT*I&IPnmNXEx8bLk3Nb4Seh z`dzGl@)3jucT#Huf`c_S!6^ad+|O4Q1&Yodc5Z%$Y;PBYGH4-CX4zp?lu5HSnwWp? zCA4PdAj<-S^;PWM_zrT|Hy|1srKlIK7?z)cH=9^^`AsAvV~}}lJfnHvCKq$4*PchChxp)-k-gp~~bCmr)x~t3B`Qcl$Hz+mfLtR-Mr4ywvfbl7u8YmEypE*LRz%+VN$ zy`n$s7uehAdx|wmc+I)WKmf}lhP1`OY`SLHFTGxbM+~je1e6m`+h+Zu)`Nq`v{phI z>`$Xv3Mx%Pftza>SK6kKj2ZotZ>8X>h3v2ob~5xjnNKTCA8FeXbtf(_g9^b4sAy%I zp7Dz9$_4_WkcY(PRT-{tMyY}3XoBWw?C00n9(o-QWfVtFjG;LeoAhD7L}zi2%0R0h83^xcCVLzw_7YI-OH-gl6=88k zgUT0zBX9l`$@ruJSW2N0r-6YmeM>Ynwr<}ymUb)beDNuUo9mvr>6c|tnWlsCZh<4uyoj+Ar_C!V3f%eqyEu5X;z7KS zAsbXRB~?P;#7nQ>_{*}+zxc94nwt&f2mK}23Vc)do^em3O{R^nF1R(_LUwnd{ z8{Zm`1cJg>j~O&e~=B_+z zm=qpij zCmELC{~g3|5S%yVSrW#%se-nF`iYZ_T zSxlTbWqS#h*!=j95dEGHriZ2Q04t7|(G+S8mNqbb;Yo}hJpn=~loVL`@O=!nHY(pD ztDbiX+OM4w0&|zIVCLeJCf(fcV*A_c=&!HZAi}j~&_3w!LUpY%dF}#co_yA}o}k#g zehvHg?$|zt5=E9nT3f5bbbnc5`rHM~T(|@to7N`#-(5$4<-TY2^0M?Pc1j62GZGkC z6c|5q4o9AT0hBR_BFEM@Ut#aTJt$E^YXT|5q6clxh6TFqBa4`O@@b@_V<4Pk=lgH4 z_5C+hVS!W-HuWZhM&ST3_r!V3UwR5rqha>+@Tjvf$<}YIQPnH7@e5~d6`H z8%Wv>cTcej7pMi)(ig zRxZd=2RaT@?cq{@WiCx>h#Cq%X>ec0YXB>$X%UiU1jedfTg+;?C?n_}6xe>$^;H!| zPL5e|GrSJ0$g3VQj$WpkpmhLD-xh$hy{J%cPoRTC(3)Ss(yMR#v|oR79ru3wugH5{ z+t*5<%!?pe=3tCLD}|`p!ufyucZgeUfKZhE9yUJyBjj-4jcYCswG+@)#oNr~r!jr* zGL$HxM2VdrzC~~Ofiaj$q0ELq+In0og{gBFFn#eUn|@K)x^@-)jWrO;>>*P%cEhoU zN(xM$egcaxzX4eof%WFK&#-;tTN^nOl&W5_7WN!U$0u<7jd$SMzvl-XJbd?Gz>?G& zCxwt_(3XvW)`&+&aq^wNuD-~SH9aA3}}5GV&d{7BntNKxYaPyYh5=gxaz zxB7=)L)kQp(#q!Du6+i|xEHb3^jt~o*`W5q5|&>7iFZcb)fKFL{;2`-grFD> zQI>`6-BWkKlrfxq^Bt4I(i&y2hqXWa3WS@n_45*WS%GNAjBS7hc-p|p*WN;Fdd9q` zeji`|>R*s`yM|$=1TkY(P^Gmm2oQOOC;swp3}^tLl*G;7{|3G7EzerDlDG!45M&0X z&Yr`<^DmpT97lL`^<(Vay$#CD-pmGr8u$(O^~n4Jj=lPZWlsqPt1H<4;$z>+yATp0 zaDb65Nmo*0?D#3nU3m_1qY1(o4ptuE!ABqXw4Dqb5^(_BzVxWs!tpoXLEIWKOlqEC z)84B8g!A{lp`QD0)jw+ zF%BNbXiiOI=KLijBcq_4W3ac2`yaiJ;odGpkyjOdVVRyii#$m&d+ABEX6DeCoPsP% zY<}|*IxeBW8C#{A%vKU2CEC{b#mJo+q}f)XpGi)0!odrxhyN~PZTq>$Bkp>5yPNYAkT#V z-bOnzX(?M(x3@JgS|KY4Z;d6sn!%+C`v zAzVRgGhQbO_dUaM3D|Wp0$m1@R?YNWs?$}B#R)@;7(G<89s3px+iN}KgS={vni}nx zC?xXIRC%hf?^A;#9}2X_Qj~>+C?&Snde~m=p*5DEVOdH_33{CjSziDYhzP~$9gcRF zfJzgk3aJ2XOq+>_DiGN|vV^(kUa~qBhTYpYvG(~@$h<(@Xre4iXrd4$sWGx4Bf}${ zeCIEajEtJ~IOt&Wi%(Dtdhq#5tq}#CoJ|=yfhtQ(Uw#_X7oRe7Za1;~$KPY{Xc;_? ztR5&{m+5NNMXx45K!F>a5W)NCCn)cE9`-Q4)g?T?uQ0l4(^I71)@b zMbc_{Cp6sNg6#I;jZWuUXE2+X(CrSe{ z&;>{VMw!>h?LN2%mLyOXFbGvekzCVCSgh4!j+FvPhz23LazsHfMv+%(lAW91fn{?I$RQ12m_mjaF}L3}D<=C=qa_(GPV#veGpb`vdgX zSJ9rC1p&}#w=ur7ga_BZGQdy)gF_mj$wq2h+$4B(^*|X=6q^W13 zno)#^G2b^!Y2_<@#h{O(+eI=u1}y|;&RxXDci%u+hoJyuLim7-5dv<1-(6qD&aEFX zbN-UiSI*2~?94fc?tyu3&H2I!c1&ez_W<3M2RL&182}oS$4{Z?cCq~VCm@XbbbsiG zi2Z%u>*B!&f56g9uc9$A1)ijsdG;l+VIRygTi#x}_Ak2X{}vI7G)X`>gOU=*Uwspg zKKTHh2loI%kZ_Jn2uRn9%7Gp!vHbA|=x?rL>4jH7;{+3zpFuo6i6n|V&{P57@On?J z(U_P(lqLr3HX6A6%l{4=-(Sbd7gsUZ-vejNXhmH=#{hVA9xWs5>|^f9r!ju~B$`K0 zBAK2=!YJZ21&?A|prC3&H6_ewvEl^r=qLy!XpddQ_~Ifqzx^7!cWyxs24FmbPzr^V zR+~e>;s~nDapyO`!uatMm^ym_t=T!uJpT%GHbkS@0*_^b=r|B5kDDdic;Zbmq)5wPxJQw{Bv6b=6t} z0>T(hUb>7+m!87*-8=!R(cH;kEppW#tN{t zZHh-N73=RBM9_&iq7}2Hfg-q;#g%ls;(@Z1H36#uio#!yW16SZ>be0^^*E6h)VlPm zYs~0`{b?&gl19GN+1$-#^-zVx#Fs;~yEYx`(sO|!Cb|NvqYFoI{Pnj%C<9MZ-23nk z*uQ@tvMfLu!*IWYBG41KbdX~rPQ3XOOq@Dnngbr}WADpPQ1-gsD1=T~X@x?VbgU8r zM_zp0q?`x=j}vTN{{q|Je&v~>LP!W7X%jDOG*L#1lW+b6jR}*^lzEPa|LvcQz?2Z= zLSayf8a3*~!LlfD=`a5V()C*{kVmcD8j2~WK}JwmBRR`(-=E;!bDd>;Nb`FVfXe8zqZ?*Ze6Y7QW{cX>f|Y0 z{^ehLW2yQ*^j7XypMjTO1wyFGnM|KKhxW{zXAM62-~RzDia?;zFG_443_O5}8AUtc zw#ACT@#kN{+_{T>E}UB3kq**FH99&h%+N?DC;cAUy?q1AfBL|Gm$X$rI&kIXG|1~aAj4p1L|<0oiN&-yiKwOinE@@KjkRoYIaq!H}ussZke-~20fZr?CMVSB!$ z131<$`860B#nMY}Aa0NNO4a_}4$8dn?6+_F81}UDXH?_Vm8Ve_1(XoD|K4xWTYF^o ztTw?40z}pUHwif?Bx;v_>*E zj)~Lf&|W%j0a%XS@_lsg-!*$41X)=kFQsYOKnNmk@8u-~?U`B3U49C!sc8%k4$#?H z$HQx1Vt;KFEQ)Hq>U`fjB|#ZS+8)9DnX_2B^c12r#jxAO?ax2O^7r2(PE%+?A+<)g zvtMcQ>`NaR8^ipG6L|9Vx4;-h*4f8!Zx?G{e2Ux(;zhvXImTLBW}8Ma-do=@g%V{6 zG3-MO2By)dOJ%vc*k1VgNr+Nme``?d3>%hJ3)>IN?Tw@v`7Y$XJ9lu`Rnm;A266~4 zbGA|Wuvgtb6{Q>v+wa4axhm7lFX-bFwi<{nOXU`P&@GVJ9xSfoxVy|%>qB>40f-yb zJyA+(lvyPTCe&1v0o5g@{e#SFwAy1aMkg9I@p;&rYS=H)Kd8D#hh5AayHvXr+1;0C z|6IR6jZ}?Z1Aj+?K1r^E&^Oc*y4Dae?7-iiX!vz;UFn?;YOFPmi}D2MUJ)Gr!~OPx zDlZT$Jo7xXQs7B~Z~p85gWY>~{W}n4Sp!#9w`vW-7>>R2I%chqmk@%{@$p)^#N4qK zG^KR?P@EIA_gPZLvG(;BSo`ub?}&s_HBqf91$1B_rp}(j(O2H^4tI2H%vYu1F*z+B z6W5wvRmNC!R#$N2H@||k)Vfp}2YJ=*p(bFK5_6ZYVD9o2lmFKm6VuawcHV%QcP-l& zG;J(;U3~JN{{cLyoaV;fYa?T0258{_->;DUrHtW^|J(m+ zbP)tN$O`QAsta*rS~0mwN}PW26)f8K4G^e77h-?cmuhEaS<_%~%Bt@FQexrCGgbHG zIL0^s_<#EM_ZYykAjvITd+rEMy!~^Z3Z>BK-oN8Psnme1wK0)FQGmeW#V5hy7=%!C zHrMg>yZ?%;*K@BUB;HJGg+}V_VtalOM_zstN|d0CWBJR^u>AR_R<~vfgu;RZ_yQGx z$1$Gzi(g{;#7WbuF3)i9kME%uX!WX+P-|}}^MJKEHI381_-m6Up$rEP?_&LnPpf+^ z8G~X~QAMN`Tnk*{1mx#0K}i8`LMhg6 z-^7hSeHiFn>J4?ZOB36@xp4X{Ui|C7L7C?ujA8lr?_#jE;h&w0vL-_3lzFZu9h<<> zSKdTCGHQai?g5tH|E)Qrgg{dU$*XF428~!7R!xf%3$MJ1_K`(nn;66TXMe)}y*oDj z1fPZqh2%a(l%_cP*3S`JP`n||e-ZC->%8& z<_RobehMs#j4t%Ux!5Bk{s?mBv_MjI-X zLcb_$fF*X7sf1wi*hwrt{T$+E6IyHRt}Nrurypb3**8}K9SQ|P7By}*aq^kxapbJg zc=iuE`10LfqqDPZb-zFE*(}6z8;d6MDZ>KnGWd@Hm`2 zvDZvc?~jFRR7WbuSPlhZ%P@-CS-Nv9YNJlGLE= zA~(ITOm&%U)EVCE#)$u{yV}FudFC4p)~eK0&`n&|E}Wzkn4D{&Ihy!1-}?Oy3fl{c za%OrqvFaKO>bnk`sLoZzxl3EauFizn29NHpF%93v+qLvhn%p$4qo&n^D?rcyhTYO% zFiI)G$W&@CmNtjFzn^2+HxXq+MEK=}zebugp^3)fOM2-c7aTR3CX%)3ikrWG7b{ipt$dodUg=b&D;`1+=YAB_U5McYpcSidJm`WJm4-C*AU28NarZ9Q(lxG3T zejm#p{sF_?9a|=?FbvoytrXNS^9F4C%sHI-#V=6~O;uKJbp?Z+O01|UKQ#BM2M|vZ zOrLqe940Hky!*RfW3atx+e!fYgRHh%k!2O!ST6nhzqji~k#+WP`#1k;fr6>rDT7O< z?Z&FoPsdK+slWNR5LWlKb?YW>fB2qHzm&rvL{R}`YMC5U*_Gkt|LH#=9Un8jz48pp z@BbFVoo&0u1d>O7tqC*|UCo^^hV%da?;(ra>r!t1-~Z^Df?Npnvg+BTQWzA%i?+|b z@*0*dUiOto2lsDd>&s6;tOl!}7s#v_835uavJTtmVxIXA|AS=$48XeiU;Zzspx|Oq z7D4xB;sy4h<}FGartM3wi(CKvU;G{_G>`|3iq;aac0-mW&b;v!=FXn?d*J%7{snus zV$heu1lNkBF$ZVN`W}K~Z@z=Z#FWv&L=isx&;L;K7UiKdqY9YN#fz74>8C#jz+U!f=1jRK;2*s_y-&f{O9uC$RLwE0$%Bv2y(@EPs6s(xx_ZAd7ALs#-fz))^w74kuu_K~ak_3Ei_gD= z(WPUC`6^4?`Q#&P-M{BQbC4AtAcpf6Wr>l=Nxbpz{tjug2^Pobt}J8o%d3!iW>RcY zq7cHTmKmd_$)&Y%HJvdlq1jQqjrxwJ-Jnks80CE~P! zr+@ix&=?y-(rjU{vyBIzeuTWU58>yoQSTZvB9b@4mKG zo)U#r$bxl`7&QT_m6*()yMW1)XAm`w3}W-<4eZ~$WiuN_!cYW14?+-g1|PzR&;q=qbpfNIvwAI4e*I%H& zwu)?j&lUmHnBMXQ%xzz( zVZR7&$hK95!6lI{YI7ad-Hr9`?xX6~YeU1B4(6tt^q^ay@48RBMw<3|2zU9e5=PwK z9EmY9(ZIw^3zQMa(f}`i)rD;s>c;ANUO~fO*WtRnQhOH_v*|r|4-w-OEMh?)BiFgy z-1*dK#{f+C@?o#Q)}x;9VB8u@FfyJPofIXuk*4rnnWv77pgo?V(T>3F<;v0u`>ShQ z2$Zyaq{dT>&onSHks@uyey&EtRduCRwllD_Vtsc_LX>bwsZb1!;Jz$OIyN4O(HsEd z-wyEb>KC~8|hTirTB;^1|HqhBv zM{jEbgY8Z9wl~q;-a>b46TPiX3=j4(efB(fvjr(7vQ7u9pL}2_d<$^0vaH=@CuWh&HsMW&4 z2nv2^Wq$v-(5#%eI3#|E2XRJ zj5uQ`q(m816;3Z5#l-BKw;g$B4}*<$!{iWxVQGx7A_Phs;Wf7ruAA@Jkwr6J#<2JO zHz3-`QW&MS#SB1gN|rNb){mNV-JYF8(r#M;yT<Ol&)Wl$W3q`+MUG^I=Y1HZ@DU4QhxV?qu+8qCufC*j$4g4v>zFpfNU%nd2ux8NmbKR}shAdF%B=rK$jKMg7cMyF>nF*lF#xp}mvW-u~4 zhtZi?j7-mBW^oa%u?fh2-(1HxGKz^K3pjS+BIZw=r~=SzXzYURJtm|wEfxsD-o^%2 zZr;N7qeqZZVd~@=%wIG`2s};Enwmy?b{6fK8MJ0*ac5^AQKN~d*#wUh#LWgcq4ku5 zYokDH3j{){5>wwn+%h?YQp73o7d0xOAT6`xI*Z3mZn_3@YA&Kx)pZ<%5EO;5njei} zuc-P$5%_zG{Dsgqjp-`$xJ_HSYfA?9ni11s-hc{!k)_u5^Tab=!Zjof`ux=HI&v3R zyF2U}9C5VKW}O4{jC9p-P{6OBi={CJ%CN` z3=lucO;w}IcT?h19#jc1B_XU4U3%&nj4mBB`Z`9jeDz~&-@aM76opz^52Wh2O(??{ z#$;Fk03ZNKL_t*XH{Ze3*>g}u4hmrVyRXr?d&_sOK3uvkyt6m@isR3}jFIUX^LJ5% z&F{WOw!H~%>Hc1x+mwZ2{8Vn9142Ne2&doqIT~X|P+txQ*tziyq5y0`lfEeORiyH8 zRaV$cQfZuc={3WmXpOAj$ITD_h)fX>%iPF7WbM)q=H4}hWON)8$Br9zfl>^%w=me= z@J_PocpluR=2|^it;Xo=yic(d2Oad*)(|C$t+JBfjvlpZuH1Jig|WGLB+aJj&`k*B zun(0Fs*fv}o;ai`f7hsfzP+&I)0!^mffJWo=gxH{scmwG2CLdMw2}xs;=c6&rG^1< zS{TMCxU8-T3h8+e0!;|YvVf9C`_r6XK=a; zL}`ll%q;TGp1(3ClB^QxTk$oc#^H6>SCJj;BWaC5mL(=np2q5@A3~Oe(Q^VQi>k;( z5&|7_zn8O}4TxUXr*39Wp2qUjmlz&&JRnw(HK~EKfl;%GZ+`bK-u|Ee6N)?sr4+MI zJ&S|2N06my96CBPhmpytTD5F=H)7d608t7&juF|mCii~*Peub^wLJaYRLV)EQAmZD zGk`JlH#e~H)fZTN={3l*#K_zc9Dngu^w%HNI@*VtD4#YXfG#q~{auV6I{_^vPCorC z($)yR`t7e#lmeVmL{>yzOVQgxfV*FR4Ot3YdFyS6vc%-&D`+hqMH(l;bzgNY1EIDf zzt&)JjM#!@5^C2`^PH!*ke6jr|f9@jto0F71) z+yV_>oo&xBXACz#{RHcG?%>j^uVHFw31er^qqVSvByE86$W)Yuy|#E{FVJT8BI^iI zvjtF%WPSmy@ktE#cChpH7wA2Di1ug`xk$0q?W3@)A_Ya1Hn4gB9(EqB7>(1#OPDx* z66xd=R8fF)4jxCKL3+8S&$6v1l94gHw}FwDUd8bIMRYgTu>S4W*u8%T%{WFWD@KkI ztL++Q*!un(>_51V_S`(C&OCwXXI?ZmhDXTv_aKG?%Rn3EU)rn3oSY=v+Oid{K%6Fc z@t1#v-PK1}yLAiqu78Dor-O)d2-|w3uy!dg3v8?`W9{JsOfM{8;q)1tf8j+;KXCzC zD^N-?+}%Oh?<4);PQ7Oz0CMW`j1D`D1HhFxk3P0g#n7~+cY?a``T*CM(+eAQ)mhiK zZfHfuq3g#lWp-E2_&csNOlR|=5{|m7bDXCtasjIguI{U{IdMt}qO`j7(%qBi7$I}l zU5O$KdVCyOgD7Ucn>vVTchG3XUOQ$|Zqi@ko3ywWt}AWs^l~D4%1jks)m)WSl}*+b zl)0>>FOvpGYc%l=x4V~FaAtaNHAWL(eM1g4q14*k`)F7-*uF6Zx}Dq`ZF7M&^;)Rp z)&TLt+^5lF#*px+x~4&wK0T#GiTP(^c8;>)%|%)(_tWUFlKRq6DnF5&|b){|QDH7LD`d99y4#jQ*pCweohUq!*Ir zgCWYymK>KQPQLw99J%tW*ClOz^CfnE_|^at4U|$LFJ(}QT^UX#1kSwuGfW&kZm#2q zB3%E~zhL|B?W*JWVZB;_-K7wC;`KMNcLMimJssnq>891#{t8NL-fA^atyPVo&sSEH0J&) zo3-!1`Tyv8&nG#KG|lsI_YkQ|WoZem0RjXGYT4{&%h~H2Tid&}wcWK-W_SO@{T26N z?d~1pq>e(jqG>t5St@_xs=;9ub8m&Dy%zKxRfpM25fq zzR&Y}aOeH^(ou8b)H0*tOpHhz#y+b@Bdl3y%GvL7yClrrMZ@q$4}t&PkyFGz=VKu4#zF%jiHrWY@v06*&>VT@cQH= z?cTkG%`ZOz)$Y@75Tfk`<~v)I!pi8u2Im%V;N{nJQK!0GPNA5?#^j`el;$*hgjtB9 z2vVr~XXVZvT>jlZBi7?l`2)1}T4;ig~6O zV9d5rpP9u|zx)eCz7I+nHtyWSgD*Y@vuq=e*k5EDCZH4;nVG}kXPyJ0458P<&b>R> zzI8*PFepXHIeg9UA^;dwqi#YJoV7AGf$`JlP^b+;@EAMy?_%TH*BZM(5eZ>%D{4$m zQFd%|JxcXaOka8)%yAL)x>&h=3-`aiiZBSkEK7^$#bYqsq;q@x;!~JdSioR?3_Omo zefJjryt6K^MZ22!S?^U#lT`B8~eFwrl? zVH#j+J1hq#g^uRQ{>TH5=Q@6N=6I6NGqZe~s(2A6bx2v6b0(!kZ!b&(SfL_bvLgQG zT373*l*X+#R4}6c+;}%R9zDWM7&`rKq{orz=bP`xC9Fjs_Khy2E=bF^n{xp{rZE#z z2uz%R3dNDS21r`ixb_X&tIMb#IE?D}gmH}Ko^hEmVR3i_LkABl&5V>-zws@Wzx)g= zLjf223Py?4(p(-H#i7@JY!+A1>mu51;qUF@{yV>e z2m-_B$u8~*vqlw19M$o0ocYDSNclg6pinG={5g85UfkKf2Y(!=g5b#aaOa&rpuN6o z9!}jL%IgENKlC`prGNWB7|oFs0=3#;j;*!d4`x|b4uXkH3=9tftbg_a`kU)H?U$j)Y^oa2|8S$s9nFQD%}OKnX}jRJ(EOd)$8SZBt-z?M}=43G&zX z)&Kc_MHB?4fLZ_ctIRbZIT&tMSt9|sr7}hi95gzzUaN&`zxxe(&24iJhWp%cS)LaF zJoT6V3YB`@m^sjCBiL!^ZXe(UQTA%UW@$d9BH|x4&OQ-E*!bcT#eLJG{oS6IE3yl= zWr|z?IQaUT%6Y4eDtG?y8+5leO_!C+eMK%!yO1J|F?;c8j2%CvG<;EnZ~pWyHXlAT ze<$QTPfyS2dmtsIj~u~;*WWN2uHCg&-2T(srpQuyqBvh!Po!c4X79QIqC!0#QQo*68E}3y@90b_7_6>HI9vUuR7-tM;di{=gqV*#f zUO0%U(`OW?jZ&Sc8{9)2>ojYg0tH1T?K+_u zTY4nuxGF5vb}aB%m}1ZGN2)W$h;cC{?-lhU#IZCZ#bVXb^mrIRXyPV}BY~hFX-H=h zEUk9)$wN7gRPeJ2{?vJcraeK3$yZZ(b~Z{iN9lny9wF4{1X3c7HNHWgQ`=>z3>AzP zF7jjSHu@%)z))5(`S}!4l5z|WoI3ZBK8Nl)+V5Ll|?6Od_ zEj7lHN;5V0%nKM?IADrl8HI2P1#_RseO)J_^)CsL*e;dTPKa|b%f`yrU*f?>e}Y|9 z#m;^-fYdyoWM!&OOk)0pSB!;{_xo^}WpeKlPD}P@VKHhRY|L>{7#uWCC=tha`2O2y zudkU0b0-5q&2yAgx8=l-e}<~ok?<%&)a~S`PF%>x#xseH8HA!ZH~_0qM67rJo%L1R z`QvYN!KWV0ejJ@teu^F#<&4%jUN$e|7(*lF@6a?#(%a}fO#yE6% z5Mbl-$MBjBvwLoKdb#URa#FFsh$1}kZ~rFiqd0waof-u_SXLf*4K{Us`+ zqsCqK&0qgNno*WqH<@!XMwtRB4g#Eh^A{MNoijrHdmp}!RjprC=8o8)MT{OPlX_iW zIEb@9{e`-h2|>_opz-+!W}M1}z+T_a9kY`e6IaG3G5dld(-W$|md)#5E8#X&7q{*C zCYz2Df`ZLVp-mXW!plE0OffvV5~?c85u2A5{qNGE{?tSV^qh+wKg}# zH*fzD+e?phaJ16GWs5wErlNgFiP;k;apb8>$?A*Ul_fm*{1d|m<3b?ja(`NqcEX1! z4G!Ymo4-JzRs&%SySHzmzxoJqdrzTd!U(-EHr)(MyWOaUWflg9F#Ys%Mm!(;KJI<+ zj$%qt`q*wl=-3>gL9T^b4KruYW9;a0Fv~*F?PBq}Z?JUzJ5#vzf(WtTDguoXxE3?` z4JjoKUU&-A$Bx4(Drv>~&FfgbaSfs8X>Aj96imLYNTfs@g_t^d8q+6Fp*S!I<~Zmr zK0xR0_Yl4ZN(gp(K6*iDo(D{8+z5ck4={H4Fs9F(LvdgT)N#;w_yB7+Z=l!QRt6kO zb4?G!0Tco}j!+w$z=0<&U|@0zZnX-pwS%qiuc5oS0TFmg6PL-Q6;i^FVgxZq6h*LI z7n8?NVCwiul!u4m@9kp!+pFj_w&1t-KqynvC7G@buEk(82Bxtm^;2h2o1KSS8-(RL zxcAi+tlYYZpwrgTX=!Ji5Tfow${=_Q+i@{_`ZV6Xc^^)psF6fF2)Z4`!7@37I`8hO zA1x@9K37h@C=`Zml8C@5Rg0PJFciv;?#d_#XKyb+(2tc%uVkZCwsSauFyM$|rLXb( z5qP9nO^I#_8D5qU62-EEQpHx-0WP%wUX9FbMzNI~qU&di6&4`jvf+*ndbqF!1Ksg|oTLWxA zVO&Y&Sj)U8)9z699uxj^VdnfrOrAb#c5qv_ zzQ=XN0;_Scv_bJ25b@A?h_&>}!Ab`@aBpM2tGgX1dF`jtkRUA5Z-Ym?kH*etPhwqyL z%VHEY*FnBS$!K~A!O>s;cWFSZ?cmXW{p*w|MF@JC5h>a4g(bj&AN@>qaEOWxx%big zrUL`0EVk@^ff5rp2mqKkdK^byc*(dp_tsW$@7+Hbwv>>H50%YT7p7noaLZL({L6o3 zSUi#E;miN>|EjbBBq8Mcx>(tJ$+B?l)gPgLDD4I}u3koeeMLb)0rbL1xiNJ{scWmq zBBH-@{nS~Eox1=YhM=~C{^C9Ces|TF4fmGD==iH3l|HaN#rW@`0$IbU~qN;B90;A7~g;VKGtvF)aOy6AI3SimaAD)$(v6f zKZz61zi1FIt))fW{^SF-0oKKNkd1sH%2i4=E2~(m;pj`RpjsbQg}mR#?zdMEG&VtP zTge6D7(9vN(hyfeBrg_GKYj`$C(o)lvi2StcW-0m>#uZ|l;&cll1$y?*$Mztr_W;K z@NwAX3J3v~u6>KO+c(kKZh$g|AXXC$ho#++zBhYNV9Q#T5dbJ;kL`c!wSw4dN6! zkFZ#EP%K%hAS0?UO0KNsFbE;h+Y8L-O2IcR(*+Y;qSpz)V~L<2VYi`PM?jQAhyay= zf(%hd|7-%bGnz|TAF^YpjIP%hKDAW{3 z#&!$1|IxeHxqr_D?qK@8ucEw?UsZ(b$Ft-5C6%=mg(F3e}`5B1q7>t9`vk|iZ zGD2XIS!^4VPh3=q?|Nsq{p}U_ySpGz_h-l@z-%}y!^g^u1ST#%i|U~x2!jB`ve3DG zU6J0k9lM__Ml_{i+nTu|r9^FV3iU&W(+-30Vds&`3rlhmc@QaQp2=rR;})cpn7eQh zwefMpK>%toG#}hYf461C@`=U{+1CpRrWZ)7R7OPy(t;?wLa?)KEa?);1tu~-SPmHE z1tkQf;W{LxrXULTc7ZrDi)6%QZtSmgi!dRsPIVw7Zl`by1z45^o@Iks*=UVS2O|N! z3Tblihz^L4xqu)dS40V!KAWuUn3Yo4wq5(y1uw>Mh889XtnK+EFa_w7;&dsA(Qk}TbQ)lsTx21N^ zdecF5SCSCL|4E7q>bht@ya&s6FnsJJL>QnrIg6mNh5qUi2&HhTnpAL^Mu=Hd6i%&80((5Xaw@|?GAH9iNZ~Y!oCU;O|#_Y=J$qd?M>9bD|`5|hv^AIt|!6%;q z2*cvHU#aXy^_WTv{#fZ%y)XhKaO=x2(Cc*Z{9pV9q>z|6dJN3A@y#E8tC1zD^W#N% zO=H2fKp92Q>*C%gA7cKACowoR4QkmKJbfO!*T06hv8p^U(uLUwjs|$tg@7KZ%jK zd2HOhjmYydugOM(!EC&Q5a{mgVDsTaOdUFe`s_T0CZ{ld@G!o6=Pkrh2-~)FS1tq> zN(j!SfUVt#OW%Ei?Zro!K6x6G$4|m4SKy3JC zI6Dr;j~qp9Y#i;4H9Yw2V+7p}9E*Vol~bBLLz3THr?CaU)4}?!?=gSjNz@M>Mrmje zgNKj6v2ATYA_iQZ6sK_#B(2A{<)L9%j*a@VlR?&dHECASHmxj=;ov1W8kPXrzCn z#Eio;&eXx}*eDa(#IrtjM0;4Q5zgIaUb4x12RET z=-2ndC`BS<7bXCdGE_$DkTEyy!Jx5`vn~=!Fjy+2W0}l(ka3LR!-r6+RLt0T_4Z9w z)aAO5@-eM(w%FmZKoCTxgQaZt=_rw9kORmR%f^K&C0y49&s?8UeH316Cl_R#JrBvq zI~i~JTbrm(O{?x_9HTye0A#nR2>wvxB~PSAz79x43h%Mk75*TmA!~KM(e>HRA%Q)XL#Vu1-O+Om}949F|`c(1OS*! zfvAZvJGt)%r)MxUKab5@-{;t1*{&|<0zz-5dEjCB>SY`#6;K_Ygzefm@#0H3_uA{Q zZQJO6q=b@SBoY!!EpkcqNC-i!e}A(lPoY>Fz~_JeH?V964k4fxhvx@+Y$(v>p&5C0 zcXx5^-M4W3rB^X}@DOORgrO&&#iZlHab5HCux$%=2IQ;Osz@IK$w>nyPM*Th`~trI z`~QNl*E4`jqYsu60$goo2tnxe@!-REFn#VxOrCuL%wjlj;Ua9?hMRmQAs~r71?l&8 z3T_VR6UQ-_ZDHc@5e(1F;@h|Xi0zeSST;q)vJiw3f-pqPRT#X@l!>Lg+rpjCK1OR} z9rG8Sgj*X_>w#sXP$(D~1!EQ*H+3!wArMDVsyR#6>RJtjY8BP7aXh&E3AXRwQ-%r3 z5OVeVOrFVvQp90^UbBIl@4kid*I(iI%deq4GHP^wQELai#-@ri10Z$t!%Qq38{PGl zjOL4A;>;76tW+_1>I@!Uxs1iHt|;t{<06h@L_F3oYGr0{yIuJG9`-iZv3dJ@jGuV| z)yZjuLLde}f*zt~Lv0l)(G46R*lT4bIr>?8{NjX^LL!c()+0%res)@ubDWlA^gan~J#pulAZbESC|MYpte7rW=*MX9_=rO_&I3tOuTxQ;rFC8j zHla{fMEGPkEyX^!V-Ta?iE^TLme9|WaUD;AixMhU$5hgkpf*%6#a>d#7`nQU2z_qy z3=_8-rD-T-sp_Cuu}$$IG!rZVi*hd17?G#D8MkQXI#UT~RhsdZ9P5r0 z5?rF)^w94p4G5)*h+i303F|~iR9e9N9RaSNo3Rk+1W^v=XL7*+RE9@z_E*0)&L+Rp z#`nMbCwRNNsaQ3^2V`MwH2ogsu?b9HdO=aLr3CjqY<%_sM4TEM)Q&vW+AvCTFwWZa z9A;m5SpzsJIvcBa^xhwhV@C*yXdnIB$_lE5z}%}pRwQTL&Dpzt75?TLKowU?GPO%L zI&cZtndhZdDr5Gg*THn8N*o0E;y?Xg>cOcy1fCx}URda+o`@nGeBl*EAlKcesMkT` z%a3#7=d6=7(XWw=xP9vBXHl7)HihQe*I%M><2yqk_o5iBzMtx32vokEd&L;`001BW zNklGH>L8HvV>do)*?c2XM zBg04tcoBch36^zHo__Hq960-gc}>{ups(SuhOV4h&ndlY zUSw9TUcu(g>k7gNpxf)Ales=Fql)FF3;){eJZ3IEpE1zbs8nm|F;Ip=sbEGtfK*wU zf`fCeg|Nb8TM|OhT3*7pzxg{b-3^pdjd-)?pirJE;KmIwYW8+4+TPl}9viGyh zZ^W2o!FKE%U7icB^=E4IckOq-L4UVpI)`Bx7zk$qbhI)EkILjUW}kaW>#dZmD1 z?m7-cW+NuK%pHSeTV||m3_q5ooRpNHxw?wGpDP(b;$qzGDhxr=46<2jUx))ACtiI6 zLv!=#Z?fCP-s-aI_!3oIWCzzuQzdea-N~aTP#qmL-R}n<{Ruk{?qwWi0kdti zSC+8$7D5>Uq|jYj zHI9W;=dxTM!}#fQC=QQ+**4<#9{Tt1AZj%sxH2OA?#@!~`7fZe2owF2PW8jF3lnK| ztSRG!s-3OvFciy(C>r@`f8+AD61gj z1jHF@O;#LnbJ7^2unWvM6$w?kDG^JfH%h{ylVXZcVz@puv6$-zVKQ1X1tBEdqK(Rc zn|7H9QPlCwh@iLUBk*EFT;WkFKn5g=6$gW(rF185Q9W{%rcm;Fkvd=c&r4MY1x>F< zk_<0p%3ac!h6J7{ghXXf{k>h>e)o@PZ>;N%jf70Zha_DDlhKNZBMi+hVD7n>Q~@KU z+KqZW@W3;R7SEU*ASL{67c!2JZdoM;4jcrJB2dcUwRW(4`QudAAO!rt&pmXhOe-Zq z2u4qy!O-F3rr@?H0|`76YFrteKy_>kS(SJchGsV=cx*zJlbo^ppL~GZ@4jtfX;jNO z-CfIs+oj*na$UUqzx;2x#id-Wng|U-2)ve}BWL4hEXOjV9%kEs?)D@dl-nP?hu!rx zeLf`mL4Y94MDtLZ)2z6)0i6ETe~UN?Po@-Q!zfdKr&uoKTEbx%q~J>_70FxwIb{s% zcW&X@+kez~a;m`Uh4JGS^Gtzt_LWzaUL?t2^gZxyCv~7{LUUHWP%OG8V@_&Frd_J& zR0V>Suf9;I3tg1#J6G6Pj+5(1#@dzDX*ST? z-bQs|6642Cn4NsDxsCgOdRqm>CQfI)fFyuoi)!RWvXL1Z$FVnmX|6p1uy*+qWLJ!A zw3n2~#g-|-`UEDsbBjvgzh=&fx`q&TU+c>~D&)`W%#l1w~Fvaw{gjc5Mle~)6VraF?Yi-&)D2Rrxgruc$=tif!DlE*Pd z4j;wLlb2LH3)D4Q`RpTf)|S&}MiRbjM8`72Yh#!={RF1YKc&|#im2Pg(q|vS+i4oD zW~eno6w0U9#n!d2vA49S zy3Z;CMB^MX%@BQxc@&~FI*z%gpGRq=4r*Bn#{AV6@OHK#!T9JToauq!o)I7ajK z_vo*$z;7xu0GDcf9q&UUBu1k0@G!=Yoxs4uYG-{vO`;rjki8W`N@YQZdPdR5`ZV%{eeNt=#ex zlW_$!u;3)tt$-_y@(zg|P{YKY2+Pc>wRV5w0wmu3WPCB;yZ4054STt>mFUdHO6$gTo3e z#~3>6Yq1v>N+ylH7l6sQG^4p{REaCNioa9!>eE6{+E|EXG@LNf_Q%iOXdo!b1%PwL+8%x zYfI6*dkd?VKQ>W0u@GqcK^g!|l*Ky11Q0@S;DuLFKXTkS#trM0Rw_8~(rYNx228QD z^7+STFD<4_Ga(T0e3qtTu@sx)7I5^9pTn(G(&FaIWwh?!Hf}tbL`ISH-qL$U!=gL> z%fD0wzkZLEPd`L=W6f-Q{3wJU#u-Q%^ky=BUEn-)&**>SaWoJw;KM0(<=+hcihWvr-r5!_%`k{QQexOrs!{ z7qNHi8vLE6(E=#}IXCOC;qK`*Z1VIuj2$@vSL>U4o9o!T`Xz#H8$@qjgCumCs1RvN zVMP4QaWFW45R>OG8b@DebqPCnZo+GBE188(Ul9Ad&XhvN99FT2f%$_NJa8CRsf^g` z!{6S-&aG<*IvpK;ts>q?BK{`nBtpayiuEy6rsq(bKM1>AM%Zq{Z*HM^?J8og4=~HP zce5y{WNnoaC=Lu_U}^?47oUZMgtyzm?&>lccW^YAXX*9T$hyF^ksP-Wr_*TovMZInkwQJbDYZDtvO=l%#9V9O<~*F@ehStRGlzMfMOSz+#smrN8f(_wW8jkDb8O6BkV;o`@qnc<(KEJ3DDw+GDh5 zWX4d65i@$~EU4C4NWsxvUPRDp<@6^){BUt4g~0d=ufiD^1|$bz7TRBZj%cT0iorPM zIp<=?Irzo!Ch=*ilZ>*X!X6EuB77FY3GL!%wBpPgYyR= zb-@|+d${|XzXQt@&wiA@Km0I8tX0Z_b4;DPfT>ewwHAzF@4+qXeE(ev6%_*AAjl5vcgmw$x9$fz0H_SRR?xO&-)*J7@U#VpUrwpfaNkP>6ZPGUjR(E-43?O^4j zKY{C9Nm?3+tb}o9W;QY_)s2BAyXyCIvzWOrJV~`STZ32|&M(#?{XdL%E!F!1XffS zme}v3b^ROk)>hJ@QwSAL^cYxGC#ICjIPm&U!3qUHNW{K}ooiRoTX_VkyM0kC&<#S( z`;sYuIw1r&4i3Hc6O=|qAvuTOG1_-;p?xRKedUnoY7~*u5UQxI#3}C91~7c&I4Tp9 z>NyujXx_br)`PpcqX`fxfD9v0YCM9}u~w{5ME&GhROb#r#xbIP7rm85wC~^1{3xQ$ zVInsMPavs;64=EO#?C#7p+iR@;ut&(vA4E@jcZ>c?Df=0Q>29_G+M!7ROve@1$7*Z z9y^7pa~Hs)2t4r7UtYxSjc?6Hhf4`R(f8_tF*zTEF*xNi%3~84I(!U&_0LKs5&Itc z+YObb(Q5~3=T>((LZ9o-PXVQ>odPy{5xjn^V4`|VXFC~ypmqahHdzS#7-7hjn^2Dw zIp^S9qOwBk*GQ{TP<57*m!-4cfpdqz*(vfV~|bK})?y z=*0%NkbOA0B@58)Ktc%yhKg`YcDhLDf-rH{slewndr|7>nR|Wo4YW5_ z^}|FhR$<0jl#CxNk{TfmngQ3;9K z#I(|~5e8~GXx+M=5O+QAus(Yp$!NeCRvLMSDANooVt4pohah`k;*u6%}(occQEtfYhZ2x)Gc7>%mvUw0o~bkttq{OhFy@(AXHJkDtVy_uj(Z+NyHgo9E%)8rmW1qMwr^}2gO zT7|~K@Uen^3}#V8zOuDj4ukDj28bqf2THM{U|fb063kM<^Gozf=hUv$OvE6d+0Hnb|o=JQ5h;=Xsl#15JNvk zYpV~xAH(lQO7G=bDSe$Jf_-(tgizhK-L0+?%x4^QCJ36U!qF+Hh>GO=dEH23CWsNY zClNw_j&+lb_(}dbgo9z}1<#Tp`1~KCFHpt_HLMK(p`X^f81nNWx5a zVqkg>j>AB#1dK~Ti{)H_&*BIflaw+s7^kg3bzuRl;G`G_LQpL@po!~{0DcgeVuI*J z+>rb=u+!GNZo^k%1f_yy3g{%wAPC^iZ&Q1%pz&GPO>J%UgW$++O9je7L z;xICA!xN}hl26#_VPkC_6-l**g~Bfnp<`{R4haBB8A6-nJDoX5w8W#kcQHFOY7iX4 zE}~zqfhXEN#?%6uDfT3l>AlZveDUr(c=A`j*5^cmj!Yn`E+gpdsTd_Nw5gr1q-myQ zZ%eE$ZJ^LiJAc%+(Y2~NuQDk@kp3<*#wc^|ZSCQ~)$d?w1O=fCVQCa$l$va$3&d7h zsL6dYFDWHfKfR2~#FUX0$l5skUYzOL5Ug3Y$*N2i)Wl7VrVshi7ikWul%Tc+pqid~ zn%`XzWkWXPbSWj|`=6)pslN}khSR_QXNdh~%%+9y;@UmPZ||hx^-_S)5+sUg=iALX z3X)=tn6+tja|d#LI~C>=0!r;XOcVPehvH;npmoBVO^}VIcG2k=CQ`y2LQEin1qoO- zz+>fD&ZR1-ELeYY9gqI$Z!r4w^C*o?z%G{IEF6SwIbf8++u1f<;k~uxT+=}cnG=+& z215Z(Z2+f!^=s@dFXGYV&k%On;J%lk>nB<{v#>)-frlTxkK(m&F?Ie)6b6SOq(ryV zLAhLpj3dPTzH)*~VV?2(dn2*$q1W67b6wcw3hZhXmhG_o_)6<~{9Xi5g*RX<5o{Ag zfg-RIs)+5B5!f~ZKok~1^P>`LEoG@_JE4&?-FZ^lBMG-)q1O(;r9`1@nPN&6)Wqzr zl432=T?fl%;IV+;Q-t*>RMo!_5|%|#tU5@(AEiVEGg~SzaA&g*qFsl6FU;f`0>mat za}{z>E3uBJ-7z5)n=9#dWjkYu4vOloSLmq%lroCYiw(lTj5L#T{pX;RmI|{L`h!bV z2c@cm%0T)#dpln4^Xoed^=$&`B#aH!t}SFU@-laZ4YNS`i^u=dU92$X$BM>RDd;KcH^+gPi)zx?=j?oJu5Ft~& zffRstL{Y{t`NWeLKY7+*pNKN*oicj284pQni!p*R~w093C_SEDt$kf z1;;WD#6){wF$Sr{zunD^%!8Pi7JTl(rMp;Wp%gNg%Lgeje&jf!>A6f-CC|W;LJ3%t zhoe(0V&>>EIJyugl%hu&`auk8!Nhck9BTxIca}v?WdEVIgV~qgfRm{ZgE-aGWsAn_ zKNhn=^?Nf)5zQaN&0Durvi=a|9kJOt|V*Xn#uVRgeX#tiR9Q4^U==Ej$+!mE(Qk&)o)k`wA*dO zaSTc+DwPU~#UeNth{6!9Rtt=?+4O%y`Qr?T`#Vh@^Rqx=4)zj$*|IwbXcmGG!X@yP=`8&#&7U z++%7YLkNN(0L_kXNJbx~Ey>eQKZk*Xht>Di50dtsTgtYt1(C)27|Qj!i7`@mjC@gP z7mFwik3ez`r&PwZfBai?*H_FgQIWC5;|a(~#$Om>^u#GlU$|sMw{D>T8u}21$gQ*+ zvB+nXeqvTxxVK6n_jPd{tECuIx;%Q5zXHLdMA3`k;bCJj zX0{Ds*^h-|=WZ}aggws)1ds z>OgMX$ygejl@yC&-*}ow0iqx<{GjbSH?jEXNBQyIzG4siv|Xj)Iu8BhXJ%vs05l5K zxWvagX+ z!uNgixdjc11%OVcV+yNkwTg-s-e-%B?Eh}HTIl!tC>D!wwBs_4WB9&rzH6aSK&4WF zZQIz~+*BdYQet>`7^RY$B>29MX0vHtGchq?&eQhxw)q~FN(HrA&3yOG%}w*$8Xq5r zWhuRBv)M#XBRY!3B1T43luZ;xSY2HO*PEcx(NWV~?{>TBbULQc866!p=VEJXOU1I- zHfpsRYT6jF|GXsEb9;LmoO9Icb(BgaaL&U1#DMb(jSX)~|5Co`HDi|6X!oa`) z;yA|M-X6BLwm>O`Wm)EaA(VkgfwGJ-8TT85@8NAX z3_EduVGQkjOrCee`Y1+@pGI|RRvR|j@EV(F+`OTZ4H4ej001BWNklbt(-Br@PLk#@-lP_DYD z47!HA-fxH4UhAl0MT@X=$OJ%vLRs30v22Rru@WpN9kK0h_tEbJrZ^Eoxdx^9VF8Hh zDv?}3W#C1*U`uAHT*Ra%vn(}6Bs9N>2%g%Qxlm)${JF_wGG)e(Dc6OeR8{)2r1Q4E zxMxP9&?DB`P|7iinZ%K`B5HkV7OY;cXT}`K|CbF4sv}m0z$-~QBhIN!1|h+0T-3$e@92d8PL4C$jF4$z~sPgGBX>- zbB&RL-KdE)|FLM5o}LbMKq87|U}`EUp34kecRu9N`Tf>Q5JHTuks1O#m8yxYt!=@E zT@Y5FQ+u>mSB=wEFk1+830_iC5@2ldlM7dEfE5TvSawxNfQMpYVzL^LVUUuRUKCRd z=QWpAh6oDUMh^Y`YwD4UI7}EC7N#J&`z(~2mNwaFZDsXKCkrq-s_9=VzedN#TD3Yw zr=)z?Ky1OyP8w}RCN=r+fhKvY9fd|m4F4U_P zms@nz*3<;oW&rPGY}GJh!!>*4B2Q=e{X0pvGhp#zVq(@^L3k)wVg~m1nEd?w2GIpd z^akI*uagY?{+&5iMM_L8)~p48K=SHKuC1-T&j}bNAmc|Gzyi$Ap zLIg6lf%-oKBG_+r(|ZP*3?0Erk;fAP$8^*EjChp1h;d@T%pGh%{KviCSUmGoAmSp1 zw4dvZylXxc5XRWlxwX=Je|Le^@-Wdz3mud=;i_i*Wzm%(b^+{mE}I-G-Mm7!((a8K zb5VOVRl|7h>;9_fD^3s1?rx(&OI%@sEqJpYO}zV|D*I^tvcW|<%o&>OZ%$}M6lQx> zkBRgzP$a;wpdM^>7XV~<#9Symu_dB88Hf<$qik)Mp~#p&^$mU4SXegIO_PMmFxv%e z6934xJknF}FjY9*ik-;KAc`&f&Y!rxOEIiBm_{;^AtzhKF7cEWCGjZUQ6n!ib%v@- z%e5DdoP^LO(md|?3I}h+u>;kTa#TI!Ui1L!N({m;A&5EMh{8zDuKs~XC3&2#=P<)x zvgJnXD#ydM_z&&v3%k013@bf1!as!EYt=;6qoyg5@G_2^vG#!9m`)qlz)99lVc zk*v7_^tJVNx68bcfC8PL61^I$pqWQO7~pb&-giQzlPg@r-+KI8yHaoiY2l~xo~0dP z10G=keYeTeYP8|sAa|_$4kG&FZVc)%enCkRDU08ebkJfp9$x)IKArqY& zIJB|dif$FrS5ecwq=fAE@ApNB7T>);k>=2bM*8GPW_ptER z{>;U<5~Dc1yHVDEj`ZnN8~&5`8q#hbjOFqCt99k%e!^!K*cv~7qEW&r<_cKi@0m45 z#KfRCwvh?@l87MzJNYBGodpNN$muBvaMJW8mjcsxLfOvQe6GKu1J1X4?4<<6#l;Cf ze&h&Qn47~9^NHr*;3$2bx8bU9Y=mX_1b9|jIy%EOIn~CtHl*nr`9Af^MR~(H3kV)^ zE_h;MB7M24x;lfZNWHQ^t9ri#Rg)UNWMyMRvU5YKLal#gMWcp7HZr|93APu{aqJlc z0;P)?I6KednU$y@Q&Us#XV%u#WU_1?9+p48d3$>Ur*cZFcj<9=gz|O+2J%0NH3Q($XHM=WI0;Ee)Y>xH2A7sn88DI@wd@+ZYe%mIFo9$N zc(KxW`L`bW$O-TA*^eXV=QRxJKp=vEfB-}!ffOQ*tB{j-C(GNl zsxvPtaaL)jE?F2m(mvs;p-^h#2hAPIR>bq9#?sK8ZbE4+7QSk0=$qH17Ln}BDPplUK;V#!1oaJFULxJIf+|OL@%?b z6cFK-#8i?}i+5HLMhaoNe8$#_5#nPe_hpsZ9;yRF+N&P!@L3h+C$=CtDu?oc8R7mh|4;;$+bVIN7o*@a;k( z-TK4l^fm|N52Uza%&35x6w>qj`}DXi*}_xE%dlA2k#CxXydhf)P6QK7#)T`JQy7tHJa;*iqa|$E}cKZV+%*|K81+&k%(WLk3BD1ak}u4B2i+& zLF+7Y4$Zv1w3#T!6(V(C1UcK`U&)miO(|Rp$-4W4&G=NhFS3-&cX{@G5(_yVS!zxS zmrpX5Y5Y=uaxFM)(?`lf>#(FL1SGgLCSqthp~=psxok0}L{i|*hKo_AsIi$#-FN3*EviS=_2)tb)V{OO_8BK`<)vJRnU zW_A;oQ=A3yVwg`1H{^H)Gg(GELWjc=GL$jJj%niD+wm00feyjauxFj)B=#+1@`5J5 z?ap~W5R^C_E0{tsb|i|97u?z(R@?8NmRi;K=)jc9Li+g93Vw1!!opdL zbPT0VG~KP@f$KXn$aw(PO!O|_7m9prEp?8XW$Yoa2Z^}Eu&t1c6%x*k{klzt6l(SC z$~w$Eam*X>604plmL%;DD|Z6rB8=gX1o`9y=9aiH@qME6_j7dliw*I)BZ{iUgerR~ zUPodO+pM%~ZCv?===u?rojZ0jpA4ViLWiKl8HQCCCv^<*=|`|nB|Ifu2LVfw^FB%X z(!Y&6ZJ=Y?R9g~k#JSWfDFrRkt zZpO`zX=0eDbYQ{cq+~8-3G>@l zS@IYot`L=s8|Z1u)UgfTJ5LvRI(_^xiam%dbG!L8?tt4a9@;pS6nJN!4OVs@6T zUoid@ikA!S-C?S60x%dc^s;PSuB6ZQJ(__8P^(6US{=%Ka9EwCDF~=y+28NS5kyud zeymQO5O&`Y2itxLL%1(<<_0U7=R;Gax_*GpecKgw<)*_9U3uRYjIQ;QSN!qy!82`E zmf^(h8k=No+IN**uN2beeI|aY_uRW@&v27lQnJcyV;K|ZlfpGFczUJS?>2qinF><1g_FD zieXp8TS*w!;&ICWckgAAHQ{DAvPRL8n5BFwgA)@^sunfguuwqmX%Kx46o@UT+*trcx@X zwvwd8_p=Qe)r%hP5@9G3U&ip7a?GM44*mC;QEXT#0Nj1&#hjhh@$>pUFUKMkQzy4LZy#LXd2fHXYKM}ARPj=NBob8y}2)z)tE}p!hhT8LIZmTtB-J;Wv`~Zz4p@)FeRGK&QwA05{6;&tqrJS6 zWU21tl0KZEs2xXc>5>FZRh8>RD*hlj8&q?Dquk_<7xF2>bo4|wT2H3FaTGU5FBjpP>Ap|!@ znUn;*tJ)$rrA>y?>fa#x#EqYw;!>BAm9oaTek@FvlCeQ88JLQ0|>jB?@PI`(^ z%F?VO{U^uX@&zzMamYMZqI#9_=r7gCrZjo}C5R$fvoHm!Sl1icb8%m+snolb8 ze%t;2$Mk604~DN+&8l8+np)OPU$Ws2`UTY-Sn5{V5!=%>@nd>xtCG7I&nC2rmd+?; za9ZP{9ZizJ*F)>b_04DFKTeYp<2!C`aAncu)jm^fug|>D`=n&YAPCf1kY0>kSh*4# zX$4s$*FZ6U?!>Jk9FaSboL^s;dR}0lspbmINBb0ef)3|sbf;GGr|=Cgk0r%CeZ4(q zX-suy>7XWIP^NH{%}(uC&2qg4Nar!yA0_|+C;K@^D@PHradjdhutHv=a*-`>dLvkv zERK|a?#M-l$c&A!4M&$S)PgIEFm4261&BDxoV7ssb~(T)%+hOxvi3YA0QSL`gN~dM zHbA+<<5p6jShm~3NgSh7F+t$`T`B1 zL)huo>Eo|!*{oGlEcL1W$|KsY^`ti}8E5`zA!V)n=iv3#U9}*fMNkymRn~G zXq+uW{=bzstz5edBvth-Euj#FoYHtG`<^Z70;0_|qV1%-SK?`X-ni0V1wLpy?Cg`I z5>Ue-ISW7K3f!+ydf{90ybwNO>JN3kU-}t3yy7mCqFj(9-?aNrai9r#k?&^Z<=5AT z;7$vK0e@qSi36-ZBsahWviBwHdm;0)6h=oWGd=Z9-A`5Ab$2VcB7{^n?!71Idr8Rq zoe#Y%0xf!rMNXk*dOWHfA+;`Wk7CZh^;+l|vDq+qJZg*a(=m9GYtFRNyr|6go0C&~ z5>$Adr&WN~Dz(TjRc_3d<%_0)R>eUo#Pg!Z3K9-~W&H%lExUJk^v<+6HbM)3`0S%m z{iu=lq+Bwk7P&j{;&2(RsM}9^b}z&D$AFMcj}qcnq;o> zZ)@sj2FJ%E)}3FC`VHroXzaQ>OP_@y8A`dVDfUwygdP@lc7IO4>5E{|#WHuipX6l` z67wgpmJCA1nHp{M@M@A&tz+(oX>(r&E~x578+DL?UX84EyOyQVHRpXq-V3wt`%J7n zy73vk&S)3wQVHf^WFtYr?;j7Q3fy;sVUvy={7+b4kuuI)s16?Gl0Oga_EnWR-wP-T zK7TrxhwI&=keV&?^dqxEIJUlQ!)kjw(FYpu`~LZ5-LBRqoI(8{Z&2h_r+;ge=fg`Ri=nSjv>R*+=lp?rn1sRJ`JF+x;$i`Z}*1Yy6zV;yG^qw?JSK9+8}@y@RxF!Pqn@0DVD`5 zpa$j_+7biS0J3!A3LHH$tn`q*L>wcvEAs6Rqj94K2>8dx3N4s7mSrF%%)d4%n|Fi? zjt%1@NTPA%qlEEL>!5*>=?z@5z?sE8)M809m3HX4h&5*;$8x=nBt^?7ymeplqia}U)?Eae^v~SZbjPEH`cuk@j1TX;!V5=JKoz_} zy+UAHz}^VrEdUu+r|yW%`PrGF5G!ZqhTU>ZC&J7qzDCw5b#jSr0!}~i>F*{&3>x{) zi|QrflW%zv4=6f+oG7$0oKdl_HZT+lg!Nd%dyS*Toe{`=eR#0fb4LEO6%;!x zSzoO8{pAb>qTA{7R?-^R!MsNT?zxH!U&~Usa&#S)7@w=jKivFu6?qI$&z=flxB{p9 z&_#=6f_`zy6Y!=s_M@8_z*dk#(WKfi*xnZ!?uNHf7z|d+GTE%7wT4zwZ8K3B+tSkV zWACN<+yt0(5m7}4J9~apG3HWK;5LL>C_>29@FSs9D?-65?oVBY{=>)9HCEK)gEFZ% z?KTBo_d8%-_j&zF$Ho;n05AnOxvJPSa~cn@TlvpbK8Qk<;?)SfHzy)%w&xG9^+y08 zr!^!;wQ=^C{$LJc*kPBT*3huAxM~3-W8s6bs_-rflti+@$yFHzmAGsWSOS>pb@9rO z{(uE2V5+Qilx!-!fBl8WUlI^peMV)+$NJXE&bx66Q|Cbeises(Fro{en<}eR>Rb)2TDsX`y6MB*6kkUakp!Tm}a0}*j++xsN?bn6?ASE(mUDAcnG+4 zFfisNl$vv8@%l?@k!Q9=l+0=s0X}FBwH~&Z&Z>27Wn+y4oqT}u2|qfKR7^QNk)U2f zt)pW3#EyM!Yis1`sbhXoi6KdYBvUPGvQ*oQF9%Rkmo-~*WyO|gg79nbzIuAxc3(7W zp#vL8D9;$U6S`9Cnky9G!1#wFXx{;U)r$?*SBs?H=EzaheFV$m05uP~h0V1!=lp~z zRE2*7e`e}+n&dM}?X+X022#3!uKLFFK>j|CtziRrYm%jlhYepPZrypI@<%U_Uv&80 zHT<70J33R3O_u(=K0~Gb2^-oCbfbd zg)UQHTYCWbt@N@_JGXXGAhBgl*6FYSui!0%CcYGg3)(1$&yJv9?SM11uGDUvj(s#(#0- z>o%#4;GHB8FCBl(YJ1rb?%UqAZhN1~qMe#Rv2310%nV1x*ql6Gf6yFLCCNni-BcNlN(sK-4_ zq-8=1hMtKwY~vU?KSNHvSvMOb>dHWht`yA29)h--M3NPB+5f)xcK*w!eb6P@sC|?) zYp5Fc+$OtSh4^Tl$9yKR;OoWq2|-VY^J~=TSLk7(AWMS@6Q;2SV{s;UY^k>QrIWU| z>uEXV>&S{C+6U;KH8p$&}nTQwdO%u)Sqc&eKC!)9XMr@!}$;)=R_h}oxmDe4I093Q&evH!9B z(IQ7<(|v4TJTZRW8Hx;Bd~Mz8cdEO1`4R58$8>U4WT8PZBj}C|Lee3Ln&Mc0zZ3*X z!=6~!I3t!YW|^PP$CKmeo>c#taMpK=U7sN?T5F|fT!8yFU(YMftqw+5Br96dXw;SD z@^b{*8uQzC*=>{`MS%V9qxmzIkd*lHtr@Ue_*OiQi4H(|ApB7}V>q!kM8fI-EsA&# zDDD&~d#Uixf8kLq$HVbw&V6r%&U>!e+eTa_=SV8jK8^B<{?eJZDu z>T^NYE-SiVeLrDMy4*fd6R1~WqpllTx^=NCTVE8Nyyd^4l|*Ika*1%N<1i(b$9$87 z{#sqJV=gEw$ZZ>T{06jvP+COFmrm_2N%lA+<&L2tKHHh{v=*&v^pP-UZitUIfq`L) zJ>ui8e5CXY^-Usi8sx)-nbr8iK|U74x08esDWIPejJ7%(@fsOM|IDF{G z@(FN-puXM!^vvLjHAk*2BEgtN#AYq#5%pOvnQ(;?e#S;$)vbcoO3a0mFn<5FoszhT4C|c6Av;6?oFTu?qa0Dc zVQ1W~(=q3yjHl?mXv0MsC6gaE-ANXTrJo8Lg|(*oFt`+BOQR(S+7itU3AaP9ht2h>-*f0u}UVf#zSRX{4P9VZxZ9`e~DS0H5dEGvDzBVe_Q zU&+&sFS$9bazf6V21+A3Ohb`QsylxaaMt>%qC0^_8=tX0^?N8E;jqo1@>y5+2v2o>v)u)jo8S9~-OE?rhnW6_Be-598E)p6 z#HP|cg+|6(UHV@QjomK?HHwWG969N$b1wWiofJAcp$NUz)b+fTM3(d(gr!)RZbfld#@=lQYkuIq@+c=hndPWA*80h9dyeUyQ{`qMpo11 zi9TFYEA2@)YwT=}zr*c=;eWaP@#Gy)GBCB(wGO`HW9j;5OMflDLvrL1oYmvI8ZkxW zuZAE0`zF)~Ezof}ydcHVdh7eCtOWz51Qd3t#~I=~a_gpFt&vv-sZsZspbS;XAnMk; zbFun+FX4bwUD&gIS13JW-h%Td=n|%FuDXOTCZT#KwMC9b9~Ro1d`sPw8V<%gpiYqFLJ^&i zFX$c(b{NY4$wN0uHFt3bWE?`k2ck+MjbjIh57ESlG1y^ktYN}(Y}71JLrp6-+64LEgc-*& zr&jGUcBr9br}QaK00T@)(d;O+=-j}pTe8a3-(3GZOouU>)cdgEuv>SyCzV;TTuA&< z)}cINcqAV2dgLLI5epQpJQ`*bwvAQ9(3I}F_C$h9$Dv+ZaNA=47+tQ|!-OVUjZgSh z^~ajzL$Vr(oUlYGrAzqZln;RD_Z=o#uXyZ%Z3JHEy#Sov=NN+j?7i}Q=@V_I=UzQo z8kw&S@|OQ<4JH<|$+mliKUjA``W@R^-AHOtl3 z$K6?a46H?%H0pG7_y)fcwvP^g zC+Um9`?JPTZW%fDMn+piDHQ|_EZTtrPfUb#421NRhwV3??2Z?#DV_G6L}1X#&Ut0e z;AUr!^Cv!!?O%-_IVMPz?HU>ioj1ycs+ir7& z!7yfK5RYZwXU3YYE8;*l$a2Fry}$*{6faCI6EhkN((vVBT2J6-{eOW`HrS&6ae7b4 z_`6_~lOc(cz6SmhKoLkpD}|3!)^jURC^eu-=zy^PQbta6qxK|*QzWNAg9s%{I`%O>WRhOMZcU%VQ z0u$&@C5AywQWhB$=>G7~Pif>*3yee0KjK$9-@y1u6=R^LXB?#S%|Pcpl~sAs#w|k< zT$;PR0(SW zh9L2&jTj;^pn|GHqf&#GkgU)_?ib=A3C38#Y)f?5u&J8IKadwpr9r<;*d3>K9ZAUB zmelzVkb1Gk52RbM94NIBkAsV9IJC%JVG=`NTo*n_{>dJ#drEp0b0V;lwHn_SZ9^w%1U5P4tBXWUjihg#x^z&;f=Lx?WJTaE4GfY_HepB>HDrqiKpJD&PGHj~GYi~*)wXYBJ$tq1)c8DMzf1Gp6d<1aVSVi{-2^DUpJ>QqfDn4{rf zrYliqw(%Htqan=s*8+n&9Jws~^L2$4EbJkV5OHPtEMp{^JFKqiP%zZp_rA17k^o!eA41(u zI$mOgMJ((a5OfqAZlvFp6kpr~E%hc%(O!2OM}EF8G`5h{^o8_ZZtA|A=js2bqYbg; zu35hgDUbfJOA_aE244nmoNerKfw6*SZ#R;H=?`KSi zv}CT~BEE~&KaJF-HTq8#BkvESpIVDge7EDT^pe0z(rLZ)JMj?tXvj7Y%&86&-rNNnMaTdM=kZk^pH zvWBnrCe1k@bek!&HKi10immez++jY|4hgt3gKef6w%}u$r#?o%WRocWWR^=d1u0+~ zR1P*9ILwz(BN;@NP!Vs^F|ee=y~cqtwy?mdON@quQG0pSp?l;UpAUX?@JsOl)#Nhp z8blXi?_ zps0WTDv5`P0Ffjy1YM32e4(m=M*`tuEz9dD7LgXUYDyR37A+wqEWm2-?@9%qr=?Xz z<*5)$(xMMQ#sS!5FC$Q0BpZ&UFckIV!&l7N(_xD{9LR5Q;0jM$S=9QYDuX3#j`$xZ zbkxqN!Wl&o#SS9d#`o(5o3%P^lpp@4GioJ|k={!mv@9X~;NvqSDjH$XM>Ol0Z?Khg zrKewu*vgAL0o<1t!y%+P&`x z*r8a;aM(lJhDg}N;^NptSccIQ_kOWTC)EY*KEF_oChtpc;Lp#`zGY%&c9B7hH9)F} z#MyMfa86d0=wajk;J0Gi`{zS@8v{Q`sLC(PxTdA@=FY>aJ2rh#yjgozc>!l&ai}_u z5nE3C-*8jpMB*JKLSw@daXjpkG2S-ybXL`6AE{@eL1Y+&V#|FE@?G8HS&IeInS4db z-(;RfmeT~&1V6uV+D`<0FcK;cmXt@0n5lq`TWJ8SLd)()V;oco-Iyj!JAtZ#(rFO( zI6g3b(!9KH(7f_{9_ZIn(O;y6$4!&Uacpn#D)f4*g%BCD!ds=IXH zqSzHWVoaln!^VDNj))=Z`%%HBm6PBpK~Ali$18N1*Xi*3!e^dGomoEFD5+<$L{uZC zF}Aet9fuDloMOB3-CF&djVV|wweHYtgAF23@O?xu!@4*qyaS&*^c`YtghtN8F2wQS zCGe=CjYp}ZQ%mDDLmxL;Xdljvgh;eI zY=S+UUh3gi(?;kzy?SBKLNr(QfLoN#fKM(bs?*T93cKtKZed2oyd9c9 zm#7qLU2>ew?)KXtAJI2w!#mwl5~)HDC%SLMN+E&jzf+d!4bsVYkRLhHF-Aa~rZ^q) z*43jf_+D`bo_dCMJI6+z2K`ha5?ViU^ zZd-nxJ7J*a9^sKi4d;s8jTE;^o25<` zG@GWgoxPZ$JRVZ?chBj_)A~BX(#aghgOd}!z;jLKNsoBLm}eV1o$z^;O_NQuXldqM zrqfh&2GWSmH$c&VdH@5vwAXYxr+P1o=pkYg#g$nxRnaKb_QkCHhA7dk)u=K5+fHac z=MsxfMGFmwMv~AupGMSG`OXA7lxBiBSl7}hLGG&t-xMr_t7W3usx=FU|1V>NLAIcm z(1DbzAIXw|Sa+M5QPl?7)JU*w)jIfv&)!>FL!}=ah`;&}qE^nV@I~AYi|$X^Bh1Vo z1+y-3&GH+nSVaNcXlEnT+OCHJ?iw@|*h!kn;RoW^$xgEYADdgqW#2$&E*%A~k}9Iu}| zJZpgPfy}-JA_H^f)_Dd|5Neb*79(bwb55XBZ(MbWCJV^qiT$sDZNrrl#UB7NTF|Oa zwXUJKU}4k+#%@A%i+c*)vEb~4LkB3WnzbZRQ%f02=PRB+`n8Kzhe#&p=de2R<%xOg z`NP#ryjGp2E@|x!Ti0%HdIQtU|5UEDUB}N_u;8c1gc5H4gL_^Uf*{kXr&XP;?_2v< zpjD(?eXz05>;DY^Z#g^>XXZVDZw~&y?>c4Za0%ch^RYn(o~}D}!@0N42AyZoL(uWe z&J!b+A$Jv=)C=0mA$PI_A@k($1sQk62LOE>zRjSVllpnjPT7Jbf!UN3c6tVZ1$D*+ zE|Z<=Dp`8&1G%Fw)>%KGjSvnhMA~!?J=^fVDDG zJ(M~!1e$r`S=UG`f2=|%$4om4rqwgWG`c{-bI2YR1q%Y>gP0^&P zLm&M9VG`;*_hyYlCXQ+&yHl2iDc53MtCt5dSpBLe2%B2a*S-h@;l>FmGtcJp^+k!O zeZS&_1ZoB5tGnlz4|uyf?#3)D#T7-`O1A8H7FXql#eyv%4v$gO>LA26ERFw|MXb7g zf5K;9>?u4JqsCH0zdO1mn67xglfuG6gi2;CM#jgV_#YPtFq1E}UO8R5A2(q6oB7HX z`E#s@G^{O{nJ{6GUinLLr(rchrbsl8?-zW_oq}ANSImU{>P0d03md6MU?o>)#rJtQrMkzol}$aiJo?*Y8eZj zat;(W_nUBx5qS*mxEZc!6~;1^lC>DNuVQKC(3LHF5}ctpYtxFY1oXW-Y|3ow5e`&C zX?!G^G((*sX7C3Zs{i!6!En(t=+*$(E$J%ectz@;*|b3goNQSi0|W_SF+u+_Yz1eT=Y z&l>V=#h=-Vb>AOs(d;*S_o?HIP7*3*_;eSRTjO24G@=oPsbGjt*QtFbc`Cn)l06?Y zB-xQ({YokZ$-hKjTnyUCPWWUP!Rmb%oc*C$z9gc8iS`i-rofFLPv|zz%`E7WwWm|_gSy?_J(MaXrR<=XtglC($x@@`hbl;#@Cw%M z@`FAIovyTO7X=@s3zOZ!KDu~LgT%<{$d4h2Z7{9-L3*Xzqe6@yckx-XmJJExknVe{ zE4Gx!MVMb4&=f^)c7=onQGFHkb^ARGD=nmA^^jM()Fav#7o_RBSXH|+fn zEBGS@qnShF%lt^Rb8Myl8)J>{U#1dFf?wq^)9bYFO#(nyD4dvSDeI% zr&Q|9%qFQjSANg>;u@s^;8*}-Gvj}#)MAh8yIsZaf&0-cWqbmcsZA%q${cX={;yTz z{6bx$%)3ao`HW128IAFP$ExM>@Znw1B(($fcaJCRd|$VFoWV+`JLdAHS0zltKNQ<< z_N`Z^?(axBcj#q(9na@$|1R_1D~uMgQDT+qf|hg1casm=E~_u{>$^20FXlhp`#$3A zIsJ*HOG0UcR0>gmLwob~iU)s-$L;KKOs61}8;1A1tdXlte=t^RL_R;mjAx2DJF_kO z8kmTr7JzBD4$}bN;%!?d%VBqik~D-65(!A-S7FRTqIeY+wYANZ&k(5-lVInG6a5V#Qy;DHu znNtnPEk3x7ky$%)8*0i48p_Hbif^cmAT3a^bmMTh0-jTD$Vst)A$7A8y@$#qG{y;4*dw!fc`HLf> zZ-c1!^J*PZG;#%pXfw-IXpZ=h10=e=Qj1=j>u+`^k*Kx7&z`!RaH$#Ued5=L)NRQM zNfq^Stq&#M+|1S3!{FSfCvL~13fBBlv`UH_5=LG1xz~rX%o*%{-fKVnrRb^cVC4z6+;|X;PQ=-` zA($0tKhwJM#M&PC<`=Z=dkY(!n8JW*SM))s*k&UhHz`qVkSMBVMTs%-wt@*b^BP34FsZtI_TF|EXE@kbw6P)ytz2r# z^&Q@$s`+h)M7jQIbSE3I;@pEB-2GAldw0CiWy5|goYVs8e+){!Y1I^xkS)P5z5DUy zWFkd3YLmg`ORkg&-C`kq9Z*4~U2kq~hQ*YuRQ^P>Ln{@bK?wz@&s=}gGk$!e2okyx z%!J}uL+v4vEtvu6lL8fl#z3hTgH4GclGay?^_96^;*AS=U5Oz}8npolu{SSYaZ{*mSjdghrr-W}I@g0xQI$0QR`6>B;Ihf5HVZdg zSc6m56i23SEb-jYun<0Qp$yNLT!AE+1F4_B8W!QO*)*wNN^qOQu%*-C!ppM~prd5> zQ{Xa~SQD9p$0_klM~W`)vzb4eTMtJgGaR)~3{rtId*!N=)p73b6tdrrmtzF|b>Gh?vpkOc z9+`q=Ror^S3gSC(5|rpex?C`(8$aqG*<|zCt}qeb2#kDpAKClTCnZX{6Q3&=(e5*M zKkg+b$0HU&1l6XM%Xj)UqOEwWD}FKYBf;=*n3Tc0zTGR-x)7^SxQEC-g9vout0T0a73y|PO!FkU^WHZ=Ln!A_0Q-1># z9NqRzF*J_+V$&KD#H4?txqLFda%RSr*w#LnJ*wqRlDy_E3@Zg>(6BXszbY8;8qN(W zqElLC@|6bta#NF1m1|GLh9(n^4gIAwNHRO9sLbvw{~5@hc3j9!s$uxGSR=+Oe#&g* z`9jdZ1`v!&3ZO5};Nic5>0*7A+{Z@DrtoTQ5dMFx!aqnzDhAy3enP!8m`peYs$~oT zB?8k-cK3jWLKuv*kR<&fKo!P~#B2Vk7!rzcgue>#T;(N7IqStUcH5`k$7>S$!20+<3U(MQ+)YZIG|%3Gqcl2(9?>(?Nui>R1qNQt8IKE`fz3~pQuENv z@dsgK1*;B|8q|!ylfS}0nw?T-lFonPX+4cGTE@mANwQdAvV z&8qmiWIFJXH|p*6_j|^zm6r84_F~(FnrIv5atY~Ynf%a9IGzJQxf3AIi2Z*6cR`50 z6L_N%9RX0E>7w&NK#RHy2`o|QIT^T;pq|E!04VvDkz+r3a}i@j%?nh8(;BBRh8FN~w%EO?B(QFh_0@f(B(O<*qC!azPCuXiG3QTwIs+ z08G1^bW#ry)dHtFBYoC#mOJ2}q{7m=xSNa0bRDjpY?d8?jG@RS#(PVwmNZKvXCo?4 z8X-FCbqB7v;27^MaQBmu_e8GI=)`FEYZcb2$R&n5i;{A;T7@7ID|ENjpz(5jrc5ZR z8WE)`!P5Z1ug$?fT2#w2hs?G$a;df(6hVk5zWp8aPHtBO)gS!uAFvqif9iatw8s8? zSw`Y0g+{lF=l|V*Wuj#)fLRU)c<=B3PxmxM>ss{-Fsgr_f>&GMV{lg|M&y!-n>zfWV4l+nLr2( z(**|0#gXPXzM@6^yf1O|MUDlqG+dSRzgU1J*zw@iagaqJk3Ja30a(sh_=s4EvEL7i zCDlO?^Ld85Q1VEOo@N}nzm4wJwzEv2&NjL?`T@!h0t$Y~h$3`otcJs((_B%QHI*Kz z^NiM2tJNyu)0A~clRAm%NnB17K9#5lWKq5#-SY^b(U|&Rh(MOlR!yf<2c(F3A%I36 zTa>RzWk{b1qIs9fo1X@jNk2woP1-9zQ;DEWN9dr^ZoTN(Gv~$hJXB zV=StQk`k@AV-H-JjVxz5Ci_dXpSmn55fCCb^t$!xq7%af!{FWw_iv0UsI$G6pxvuk z^2&PN3{y;oX-Oq&YpNRZ%DBm*e0nyNqv=iz!V-j$>$@(>@*h(`@b(P+lchCbW$wcC zy?!`js7E0JQMy`3Nez#D?FDRJxageFi*$)=Kl=%0JNK$LbA9jzJXm<(N^3OxJv{fP z{|1be{z1#(03ZF}Z``1LvAs+hEKQ|e6miC7%aOYP)2UilI;KnL} zF-+6kW^giRp%AaEud{s$XTI=^J1)i;1~;!`=Yx0ANg_0p5X~e+BaTpuLe!(s{2NCQ z9Jp;omq%hM{2<}~%uLiVa2%k2KkU`Nl)?Iay_7x42b!WeQ`U$R;gp)ErNLEv;ZbZ;T?Gl2|0O@VXn^h#v>NkVYa zW|3}+JgbPsGK_?BU`I;nIvB~niNKD}ssW`R7wr={mD9a93`1A8BM&IruJ7DV%Th^< znj45cBQQnH3%*-C8IKav(`YoDw-$l5!y0`2`GGV_)YV7hLI$p6w?MvJe&{&upYQiY z03}HhcZ_~cAc0Xj$K=^@=l{D9mR3`J(f-xZk7>pmLRtj3m@@8uj>(wiSj;kS5;fqZ*@;WPCT8Mxmb2Vxx0E(PuO4Y(y|o1D&8XbA z)<~BUvvF$5g|;jx0&A~e2UwA5BnX0jOF6LYRG-e0<`xsna@I>M}}RTv8h za>HjDL8`FvUXCc$(B4?DcH}XS1u#zf620wHc<6<1pm*vtWS%<{wGV&#Biw)g9T!Lp z0EO0-r&6gjrfKeUT?SnB@%W41M$&4T9pDV8p#{d*%OYnnAimRQlK3G2zP|}CA z4*%x>Sj=V`{$2srznsA`(LCZ)*F|M*{rQK&YcM&+;QKKd4|v61Y5pT5xEFFz4r^D`GoJ4Gc;DtnPeigZ`Btn(f7*ct*K zq!Z(uyUan-oB5?U-|cpE4FTgYhkU*ZsovuA9ffDE@Z5JJ{R0_Pv zaRn(hkRyV2(PV`Mcm8Z7wMGda6dLQB*tq%xYW+1t&6Y`=NSFBJXFtVae;4U=>U6C? zx_COziVX^9MEAED2x|XvXi)oG`mj=uLs5L^w zwZLW%5(A{HCzf_>QQ>6@m9!Z2rEUT$d!YW)A4kC$Fqw#clj zyR-sBrP1id=xsC*)r33#BhQ22OIYU!nraP01XQ| z*a}cn6dw8gMY^v$KxPrsq~TAR{)S&9(mZaLSmT~N8ZiF+BvLk zo-kTmAuydzF&qvZ;Gl{5fG*AZe~RN-E|;!EM9VLi%ZdfVYWZw`f8T*95_c1bBOpL8 zAFz>)Yx2hno zt@(WJ7^-@`?wCnmw?+CYKkINlpI4mY$>f%nrG^Cm^B@R}-yDE03T&dlX|+VbO!kCQ zrr}Fk5j=xQ*YJJGRGy=G;w07|c?|WflO`o02r#~N6N8UFz|eX`{_y&}Qc6h>S z4QQL-ZcfgVFPyfWe6C0m-lPGX>s-Xs8_xmW@r7ZCz+-JlmsaFCR(;V$7#fC3YXnh@ zn{T{|>%aabmXon#Z4`iIE-TMjXMlDGICBeBc?%FV} z^3|I>Lm1n*4ck4Ym4YmCNK21Xz53ms{S)rK|88Yco6Q%<^72Nmv_>Ni(eTDWQs6dWCd1pHV` zRB;R;6$67fhS>U0!@SR>r8*Xz0Q7MLY5x*{b(~}SeaP^S53q0Uqy@ck7M)gUZ7>`TU5SXqv)`#l zU2;@D@>w1de*1O_)O|IS7{iB+N!DjBjKCUVcR%rRjE zq?*m9D;1LW7cEN+9F;z)v4EB(07spnG#37K<1ht)w$5?Bn4_T!C<0Mh8&6ECwOhPH zIjdT0h%iFj>0;~IuOO&5Tsd*Ra}UG!-oju1@-@KC$%Y7GryuI+D5`>#r(ZmWRxd#m zi^`MmbhLEwHuSrESs=@b%H2l<_7vVP2Xe6fUtw6o{Rx;5?0JV zO=qJx@C2`wBfm1Y?ks5!iH6nTwTD2s{%;y7BzeuYQSlKY0IW>=l4s zt9Ep~7Gns4$9MeT$(FeKYeMRf`?KNop zsSA_J#6F9*S{7`zT5h}u9QtELK-N7RL*cYsU{fwD2^NJk)wQbhKvXIfS}F7%zKXTS zo+^#B8N+}0kAH>Pts9kYMRw`QO-&w!S{v5r8~^$t2*K@BjR}Mu?af{As@57sW^x8) zpX`UL?iqjx-TWwvAYLjuWOfoFopkg2S!?<#3c zKud0Yst< z>LvZi!{7V^te-nyQlCoU`b$5;_~!LWnMGM6!ivC|X)sp3Z8z37@Z`VyZ&9QraGLM! z;^UwGs1o&}l)`kms5r!P#?XkuQm>;mM6Hg^FTVg$t2#mtfBs`g&&LJ~$UQ?*(m~ys z%<$U19fW~6(gfW|LPViB@dcD$+SZfRh z12^yZr8Q!kNWVm2hDvLkbH^CbBu_2>RL-K#Ish&{hF;{^M6Xql<#!hn$fE!E^<2K@ z$lWV#Y19WU#DWp{aE|46`A$@y8c{D+ANAzR2I#t~t^H3|p+g8NEcT zX^vxHT7x;WVeRfS%DZ=KWo#d|zxE>HP8U1~@jw4>|A(m@?cGN)n?Y*@_Q-Q5HMF6m z^Grerh9|#v+B$`D|?6QQm5 zS0Sry(Mp>qRc@Wvc@Ut!wvN+Z`8q@tK`R9wh8TW)4WGR96R0A0=vZluX_h1Nz!hiA zfh#JcaxQT3E6-!=@yOllR`j{Q9*j9WGU6 zBA}A(&u`qqvM7$mWN?mlBRX;k?YQg}#Vq`nULG{r-~T_r`hT=csH+CU4_YldWdDqC zS08EkrP7!$vm>*sy0wnv^mDp%2DNgZT|P0|E}=yRIj{jNKI zk|s8b?pwK+0ze&*KC4c~mb7jkBoQzqU_wHB`dbp>)6YJ$P91$z8eJWq!(8wWE3Y0F z8hse>TK)ZDW~PT#PiVV*C5G#;D$CKn670}@dhqu_ANsSu{|{nESIutyf2~_5&g&(5 zC{XikM41t7AINtll1JOFqsEDCG*6$yU%&FY)gg1_vnlfN2mzEvmYHZ7tpQb-th{DB zMx$SY2#k665`a(IQ!fC`v-awa_`4n^sMUA}vtl3PB{$Y?;o!&@w$`0)vUQ z$*n_sV1rkaMu>L51`%+~#;J{3G2MWEXCvp_0jz39ABPakmLSb>6}hVD44Cco<0~S< zER&9P3v8|;l_%4*01-B1Kfy{LPH-?>xhEh-8cXknmlu9H(&mm?H~D}&q=${izkt@M zGXUo(vK%6cF?jzS+URR~P3 ze~j7f8ORIo;N6`)ELK3==XuqW@aPPW z1~}QM=%dZCQmJD(iHl>hSM2|0@6DPeInFD=;~snNcdrFN6;J>H0w6#T011LCC{h$D zswJ`8Of%N+^E5wU9`GyXX`a+JFWqJ{JvJkCv#F*eQd}T_*g3j>XnA(ur~2$OQCA z@%|lvkZd$2^BeJrkCS}a)X5H4vXfg_xEv@v7io5~hZH_L1TW44PRq*KTRazj+li0Z z5woJ`PlRt&giY7N#}EvN2mGn!g=0RzHqqjS5GxX~+6q909DBl|#yLYTv~NO1mg1rB{t$yI zvWD)+lN;A?^R<`3j7htU6j%(|u6M|B&&Sy(o`xHS^P5EA&Y=ctBwPl{l4#>6#U^FNqS)1>Hx0}wC=RMWlWgK*d1q_k8|F~0amvISw|h`an@V@ zu)-HWy$M7afJ8BT0v}i5;R}cnK|+*(0Ps0bK66_>R92BwGhpeihJbv1XiOaQ}l?dGO& zI5_{Mr_nik&Jy+w-~An&=@=cVe*+KzCV2r~`@IIWCtD>Y?*7`h5k~eC=J?u8WXTLp zt8K0fw*~?WDX~8~DBEyP@B?R@p%u9BsN3`e_gc3qg*3S#H~E}wYTf?d!AmL$-jLn< zY+u9ztCN0d<~Oqj<(HF!LC4|nTyC+%$3c%O9-|oT!x^m4ty+%xy*`{>m9l$JQhUqA?Ca1%l85jrr&?`%O9>?ldnG2OBLYsFMxqzx--{|&Ib_vSGd&a`x zmZqa#Fc(M$k&E7HSON;h;0G?i6s~_b#B`YG&$%u~(DJal)z*QrqzN1C&9HlYY|-$J zq1DpISx87}-`o7qK_~Jx;Nc2rjTz4Db0EUpU#AkuwJh3N*_mObZv_SqJcy0Qz66n` z+M0QM;~GBx)!&y{gGSBRaU8Tg*D6`e)V#E(q=e)7xb(H>&_8##23L$R%x+x8&Wpc9 z5QX#%4YgKNb05HwPf|;o6`x=-r z&f)k0+FNH3t*mJOFYdS)Uilc;Uivkh%HL}~o{KmA{n-rradKkd;=6nfu1;LCY1o0* z5GRTM0kCdcvilbRll1TFq=!r4vQ4@kscrqF4*{*fLs7BMC!lqaU3m|Ft6P;-)R7F2 zQ+q%;3KWq3$(&HlGFqK=S;i3EPPb!r#vR4V9K~2I(+yF%k;dIzhf0OCF6p)aXp06D z5SX7QZzlo~`bVk|N8r5I%|`tgWr-XmT~OL%8F$iOBs!nYq+wq zqPq!Q*TrZw(pigx!2qMtNLy7XrLfHcjG2QA`2;N`;6OrwK`~wm;SFCy{T-?96e7`{ca#AgQu*xrAe?3HJ5NbOKr4%Ly32t2-BTI^shhrrO>#s%d zBUgjFBA1wrGt9=R6%)Z7UdG^5B3mt1Cxg-|q)uiF44uq{ozlfCwK3|r?s&f}{jQz{+qqDYAdQDZ}C8)QGDup=D(KbZxtM}ZC z)?k3udoEf(vb_)9$M(xFRI2)19~3ccb?!>LvsUH0^#>lr`6s_(fh*2AI{g9MFFs|p zrKUxJzSV_TivG9(Xt?Vl==Kn;ZI&0?DM42@onYtfx4>P`&OQ{v>WpGwm}VK?-`iVC z|KDk%>x6!z36}F_orCH#jJP@NOUZwZy*39t_!o7wO}xJ3JdgCGV6Xv;#TY|7@-dp8 z?7@Y(9+FSr!>qfh?OaSiK^mCBV6e0!uFiOoXB7D~ZES4lbts^jevfsF1=Cd>fc9CU z^UL!bw{G3ilRP=a)4e3iGHr4SKs%Px`s9P9?}LW3xKau`J3AUg`M!^hjScJl@p!B) z2s)h(R#sN#_kSU^~ZfEbD}2Wl0j!$8oGpT~}6CwAg=t ze;@n%`^d6PhiFr`B>_=#>Zd$GviA`};Nai@!{HE~=b_*4>upej!EiXl-rk2#47xcm8f`Og+zoqfmC@ z8R6L6LWru%z%{r~Qp!T7XX1b9HSE zj_ZOuu4Oq<+(|E_O0m2sgax9c5cu@hzrg6mHT#IF3@HofFoxG|-o)-~cH(H3$am3+ zyc4qt<;~J?_5GF-cMP5U=Fj-&TaaW>oA+m`>nan7Pw0~Gp6iAXp+j)?AEQNgwA+&u6fvi@mH7^NPpC?Z*0>-qUs#tkS zVqIpqSH^IRb|onl(n8>GKD-Lk`^jMp?A}M#6&OPhI@-zo*&p2x#uwU^%4xr6rBS-8eiEaM#G>sN8(>m4b zg~Y*lcH;4s+=a7wH&(XJ>d7(7GHh>e>xW1xZQW_xj4|x)?rNrJFc=^-8f-rK$=wdi=x2J&W>dO+VA%@U@3|MdwYA~qOu&Zj%LY^Ko|j+y}don z?h*57I?o>-9%^e0GA^b4lQX?(9!pU?bWL`5cdf2WI(`CDl(lHO@S8!{6v1SccgK`m6UoU0`C_eUEOau9m!cOwXa;YS}p%%(uq%`m!t1(UrUNGxXKab7WEdRGe3`X15uC2Vk6J*qg>ytGXFCV*7WL3Me=mBy zo}O55-n@w z$i&of91UX3Og>^w=<{{A_g=53Ss!B3=r?0BNmO1lCu{;yrWe=l?ylZH8KDy3$n#u3 zxDz0t(jI{6ZAuG3m;A^Le=?b9!&NG!QVH3NU^2IF zmY9dbp?;rUX0W#cAi=Pzay%@j;8o}Re|rClHYA+`tg1w)OLZ>CQ-5#~A{W|3GfRt7 zm~PC&jKN}|%#xhrFzY=j6|%TMmgG7-xpYr=(CP(nJx2@Sg($oE=B2-C%5X~1LXs`U zfIO2(rWr(`tokRJff>Pw==4K$2Z45Lr_X1pKs?PC#LG&~g)@=?-I(Fru7g&}wB|}k ziAkIw&T{J(>~IF(Xyunhf!698KKJeKA?S2VaK#vu5V-Zm%h>(h>sGW37{@Yl-r=?E zyUOHj^GjdRAc}F0VmignOTR`w9>PSe!#KrZoGg?w7Q~=Z;=+?prYEJ+tiFjq#0 z*pFu?F6#uIi*7q=$jmSc_?@I=^3nDlk~D8rl4|NU?l{gJOQ%PHfu;bfZbtZ7y-Xv> z&+2$j145g=Ryq;x*%(*}2FLwAWQAzPeiagfuo1xTZCZZ{t zH?s?iqOjs*h$$mMyp$3L2M3l>YQNvNN~okoGo9>-$&*sz@bJ(Q&YMo`^>MA249TV4 z_kAl*Y^tsWE`lT?wD32prcf1E25t+$!9_h3h&<TEl7nwko6s3oiD!qdkV{p7u>qVbuj3JrkNN0s+$;gdZ3cCZQ z%oq&N=?B^{RTc_D0_m(kQAjv02iK15$~s5k0q6HP&hNR1a%KU+;dF*V2=Gd0#jDSd z0U2o^IvbmK;2X~&?DoozIL-hmvHja$$*- zU;45JCX8`p(=oPR`VErNVR^olo@^K=7$s@VWRW2kvW(@ZmMqKg(6isbg~uKT=M1jr z!u4F_!y$Ixcm*;`^^cG-h9b)#@?3Y6E4{6GCy|m0%=K{Y>1Po32lFv@9E>i%i^(S+ zmdqTWmsye-;D(hNy*$PCWPEbX4P$6WVI#3Hu^mlbc~Riz!MFm(>@!=Av%jN&sA^mu zWdCFg&Yi$>)7NPLq56zF81q76wc9?qCzip2o%H2!R%WxEm`PP&S%R4pA&Nr%-SB-M zlgY$lVCo%qrZIm467pc%BC#gl2I}6Hk)?ritD(7$vC0)Qrq=UDt|yA;GoTIY&T*N>OI_qInJkE{NqKa6q4 z-X6OBKDg(>@dLO)0H?PWJ@2|zHys$11UB#LAxjF34-=$mQRn5Oo4X9UnoOZ?io4%)pEOwmHkXL%x#B?4JeKFyK7$@QGl`Q0r` zU5w4!@ukObVVmR3K8H(!^Qv@nI4vne6I_+#Tm^utCFu6>`RBfisMoJrJIlJ}_DjFP z4!$ZqMJIM=-(`;e8X$7um z-J&RP&m&*JL(e`7UOi!P&f$0-Zocv&^2ylJaus=we2MO=elr(YhV_RY!QkS376mG1 zGwi#{M2C$Cu%{lHqKWl(RvV%_OH+sNm>O${0ywt#*v`8%lRGuOaT3TC56C1Gt zRHCWJ&nz>Kq=`Mxa}-4Z-}fy+HBGKGA=AB!z<@bX6YF7u1p;tXn$PoGPw*s~j^kKw zGs`j^0Ym_hB6$d8nV&a78co!7kVasI7?wJaG=USVG-T_kXVC(ETMEwDRZV%4NR_pl^`On#r z-dcp&BrCN|a$atuco#GIA?lRC$iA^N?WC^RE?xnMS~nl#41={6+`!T6f-%fSIi{n` zzLCkwqf6SI68-fSI;)}17393^W{f8p>JML@?;vQoAX^8q(y7Sg%`xNDnZ{m|~; zDWt^Sc(zc&5rz!|-DJEl#1nt~uQYQ-nyXuHyn^9}mo2a&rP9$i%fOX+zU_@I-1nV7 zw5<%3!syB;IQ-~x3A*UXS4a$#)ZPYwT-423C30fjWHFG;aq#KSe};H}&pKYE z6q3ngQ5!GqQBYE1?f%bU>(R%-3}(e~J>2-k-z->K6jEZASD?gL4$~Q~8v&>%nOs_d z57%)TOv11n?@zkltGkDvG3Y3NKXb;7eP+PnUm}Cm^q5a#r1|@NamFxcN6oq>RYMlb z;mueq#=u2}!VTd?t&-iZCS20b&^XdWXU-wZj5rApk@u1*K8~Wu3jd`JKQq$C^kX7T z76AofI?UrT^8;y}+=%X~GhH;%)8~t#u!5)Q7)+35zVCUS1|T%y6PO{!%JlFeKuD83 z0V5OWQQ+~i*ql1Z@_ipgQD`7R=SH1`w7(=tG;pEyh()5~rt3xT6FW#C%>~CLJTOd?vU~l0;uOI!0nL31ktNBoNR#DEH`xkxcctfc=hjphN%QbNvfA=mRlu23Yf0nZ2KFVc>0h31deM^ z_Ke}yYcFH;(R+X>pz;hV&mi-x6ag-qpruhOR0@tC;LI1kh_Kh2->4i1`)|F1_|{FE znUfNuny8jltl&rc`_*Wi?B#ndI#JNj9J1L2%o)S>!5B%F|9;_<>%))QaDxzT5Te^( zL3c2K*Y3ez*+75m9KyjGSkwV;_aTD_DxMsB%uWLu7P8Mi8+3IlfaO+NwI*d)y3S3O zrd^ssN`$@#uhOEPWMPa|-K-}S$ty&Gi)q^AyUd`947nS^55rQ2X|O?>Nl#NtGju!f zY_cU;mg&i#bUc}%86|LGGF@g@G64k>0GTWjZHs^%O~xjWAO?=Wm{~3)HsvUgML>~C zd;~!07|A|?bU|iGl-?&WWr8%varCj#an=n@moZu9{t18(Frn=dNG1Ihu|H%mO2^DTU!=T2?RadvrsQxShuPsXw?_e(~c1qy4z@pHf;}?uQf^V-dZ{7emd2F4gVD*=MAvSz3R@}f}4;v7XT7oXP{ zv^N$Rh&mp(IwhfiWSV0-N})ulQxXjD1#sUj2dh&K!K)v+l$hoPW_eLl8YtxX+*!BO zS8-f;>~TE!>^CewDk%l7yz~Ng-hCU6L5WK#Eo%a6kZS+mJ$oMKp8Rs@J!O3UgWtZ0 z4_=gjK ze{H9+3%gu8v2e7{-;28+e586>%aFtgz!>6qhRJx0FpO~i{CNxpeH2B3pa1>eqf<;# z4EOE`6cvCxFB-8Ngau~eog9)RxLqixnZ^Qe?&hFhC#T9##)PN$a6 zjD+(9yr$Es#q^LJ0UZ~0%27FuI^~ER%ky0CgT{}<_rww&931G9A^>ghxy<3dUL_$B zIhlW&;`7O5qS+|&lp>%dgg_j}I*NwMjAj=iT_gH`dY?cf?VI*N0(jEvrD=-UY^KN0 zbzN&8bPT55L=;8(8WF=q0F4+>`hHS#104fhL+X4b5Jz2@be*@iw=GswN(px9u?^+< zj@1hPRYpZr?!Q`|zxszr|840C2D+lbM1S1n91>TQL;L@DLyT&3{Hw*+3Q`R+p54B;$}<_u}!VzKqvidlj#}_8O8T(Ki{= zF+BO?llbwEe~cGicmZ#`@dh4TZ6Vv+UgCp>h0^RO&LEUJF>sJd;Y_cs32w%4qIeg^ zc_Ye;F@{l+;xJAdfuxq_q8&7I^=AxlIco%T(n4ToG(9<+gffu%+*-GB!$vNf`J5>Q zjN-JBFPq{H^8OjDo;e3zXnjVE=$(dWW2)TW%o zfSB()j)Q)`Z{_|CheOMxmFyi%05X|Otj@h&ucs&5EXyz&jr9A}-Kc+WMS<~nY#oDX zyh#xHC`=m&GF_$Ptdk@4?;~{rx~{8DNeRFl931F-4{bLL zLyK86OSS|u>p+c;jo2Z&js!x99U=#Ivs_6LJ=EY3MG;!9mS&M?j7^)1!C;^p9H>)} z%DMyw39!?7Os7-LV46Udt}}Ikk~u6fm5ed4hn_xbjj9w1pL=2xSu8A2QVP{Qa5ndL zl1d?&<_kZ%WgUh}DfpoW*O^aRj#uUw9^9NQ00O1TJU}oU!OG0tB^-yNyBaQ1>V-ry z%@>SDJ1ZePe-7HDlDNBlA0A(Q3Jw;H+Kzg{ww<@Cl0hwNOG$|je*QD;Tz=R3dvS#3 ziY>eODTPbl`vIcNjq~VMrk?}= zD6)nC0-13h2V@ZlavTTi#sea`$J693rPS{6b$~|OCjdksi%c)2@xWz9)&Q_Pun1)J z`+ZB$Jsb|T9*TUd%+Te-!$W-xCO{&YeSA!^^bn`c3kI2EDz7w>K zx=n`JojRM%wC@%Hv0ksIORZ$ZQIB4t|IhPWGiIhiDSe;FtL^gT%N9oQeIL&Hxz6*N zk;x^pq`>;QF1W+A_Gz%*LVrDi>pO7$d4At;cUCb;hJMMJcM#IzdJfvXQm^Is9B$QV zSmY9;y#z%rYv!R6l1hJukYL$_=Xe~Qm0;n$JP}A{g|%JI8TuP7c-~yN=sGU8TIcc9 z=GWjk0l34<4!UY#oFBRH>ffkPs~Kd<7(+T9;nn}}e`0j=hV{b~>bT%afpMnI0Ru-R=d1@zwPCLa6hH}IY3p2HJQJb{gk4ZQj0 zoA}^^5Ac(p`~Id*D3y0ELp$tx*j>|4X)2ZF_ovM7OEC3Wl z9vp|wbDbF=a*6SNV$_(*m<}oALIAP8@iJou1rWA;eUkLGWsaZ&kh8SG0T5OsVw zhDQ~o!r6EQpI?0fsfabuFLCy&001BWNklmbV-P|j6@|4mR^7bn%$FNQIQQkRBU)M0j1+erBzrp;fA}68BZrMu zEQAz`te;|wPWvl&U&P?TMazt?$aCz!_dD#o{t6t=wB5=V+?L>+e%8DfBIRh zUV6YPWr{4tr$74%W_!CO; z#HCA@P)tV{zWD-}b9*2$%LwDEbL?H%8vNmVS)t?NS!;tUQ-&DJFJ(CJ1$NnU4B+?gB;(_z)jr34--c7Ywc_A=KvSvDc z#*wXG!1~69)xCG~=1t2eb1)bzqyijetC1v$E;S7X104uVIxo^&kqF+@V^Q>rS?VG~ zP5OUwE!Ph^RiLq{ry7k$mYch2G-{UG%u*jYm(w=Pav8B{rkB=uJhlKM8GC9;N3{CMmY22GYD4KHK63Ki`n*d?7sFA3d_yB)DD%biL$_(WTmY?GXPM~>*LaM z-$l@#i%PlY;qZg^vHjw&Exit73~`>Jkc-~(F1H23N=mdh&)~w>zg@bu8|QQ5rC(!w z_0t+~W|%JX{gM*z-rB}t+DzEqivk2*b9;rRkuOpzT;CmHnq((0St*5;c7)CmnxIeo zH3UI`y(&=Eq_62|m@$UIV1P4c&fvZG-osz~#b4m9SAL7+y_atbuo!?@USJew4NGkf zR@>pR*_b3PAP;BwUq>-M0dNJtA%J}V34j@Zz~#8aIYc+an}x*6Mi-E!nXw51b0M)e zjT*9XqGlQZYTv2w878Z zi$Q13)RI<+zQ+r|Purw%q;WO3K|tFCa|Dve1)jz+2m%e(2tbit1uf21e|lklMDwtQ;0&&LztP-nqRR;N&zX~F}MZL`zS*&5@1G2P&p11V_*g~=r|5MDzx$8lP(RjAOce9lNi;3`l9MpA`j!6qe~{sXuYbv~Xi_g8+Ab^&1G< z-4Z@AfIALG*RJ5!J8vS*OM!eYOJALFmLV&0O<5O30Z|C-%_g`xoiqYhf#;wdcn$R_ z>QwBNkP6%TCugr{((8tSP61e$M3NlST*9qr_b?2#Kg{atsy_a1w~NtegyC?A2Os<# zZocz6kj!pdB2-FYmK94wjF0p3T?dhOJW!e?IVL+}oSUZL6|j;30svhAy8t2p6RGg1 zkT{oQxRK%3@Y*HGCecn-e}_*59VZKQ?7ta`f5vJ6rPWNC^l zOOd8Ix_*K`c_P8N%@!WI)WgFM4DiGwD|q^gYxw>*&*FREJPX%lIJX&LJS{LB=E#Mp zI&#&C%Gr!Dq`7Deu$ZB|SoSWzO%ed-459C0mgbG@Ex0UDa2HM(X#-N4kO_d$WJ^GZ z-akqzV3yg)IzZo(Dw9bv?j)AQ)X(_7ugiE;ZZpetR7xU;bt*|x#v!pb#I6wFxSbg) z>4)k*Sf&{%fkv_kpt2aTWmMv%^Cg=B(-q#-4H0W)o-d6J*(BU4@qw%ki0L85p9J6p zP-x%O$w_RGSyrWUH1|#Bp2QFl8$?W;=`e2^htm8^V82hoZD?< zGazia2qO=yR&SdOQ)Ee@St!%2)HEq&+7;d{6YUFCEiyIirI9ELMja=G9jwS z8rwV*D8Z3w@+yVI#qWF{t<_a9%$?%%$r#%&`~yUiEKH8&Q%_Bhsyp|LMM*sTgMWqA z%4(^>qB7lVhTT_RLN*?0zb!_ZfPB&a#&aCFOK!sFzVv1E&)o%8v0V&6Hl5(gZ~qbT zcx+F!LLje~906oX;Jy95hSmxUoxp3{VP%^7HF@m}CrGor5kLz(7oEUA^1Kf-0k_@5 z*48H4?Y4e0HA@E6VI-x*csxd@-9}KvRfsmbEx4nJzRAmT_^|*MV+_|n+Q9>b#0G#I zfB-P67~=m0z@G#7e*v@rYy)_;S}&@eB8G8_b~l;}bWa1Y2psxO)daG*FwW7+rt)^PV-Ej;{CAOH5x zE~4A<(Cr5J(qkKV`|=2$=U6xAJ1vgG5%`WJvpDX;o$~XGi|rj)U&;xJ9=>F=IHx>8 z;kV%VfmN0_HBrP25D+r8txLaymDY)LHgzqP32y3fJM`amfMhZj=45N?jYxxI0yWx3 znxQ zw5#};c0WL?>!Uje&>e*64nnkh0fN9S%Yn)+o21hmqk|Zu{RE?f1f%@~vq^>`m!+uO z`0)}`wd~1>u@cmYy!6`=g)FIVRWJ23te)xUp%WC=x=UX8lz-1#C!kcuTdni?Rb6^5w8|a^&H>Feb0Rl;b3L%(#{xU zQQ*qo{ zqDxU=<>I|K^TgATd2X;J4A)-$Ee<~Y$lA67kjcdoh37c<@bF*(cpZPDchGJ5C(?&l z>|U({^n}$9T)A~vr5&8qw2~q4T(o^}L10P~|EK_R$3qlFI_#8gZuC@0rg-#p*6a7N z6*(B~-nuO-0RVAB4=e!iIY(4GcH5P^oJ?+9zJ>n{z#4#CDEljR0E885^+L690Hihv z06bWI<^upZW5^iLY5CRnR8{~B&B0;dRnI&}U!y>zV6!ohj4_%_F*?{s6357rF@F4H z3f~3dRA8D4#Hm1DNC>G=h*ECAIm2XDU>p~4I4etrp@a2}2)}&o7WQ}26EmNAA<#QT zrz}q4yzhGsW=S(6U8W?`T!4pd3kVVWVP^K3EYO`MePWqN&`yAY0003OGs=dxO{E>u z&Je>=cY`+#Jc%VT*|0irNz>GFQV+w>Vwead&^mQ9Qqm_8D57JcVZ?9Yu+o{?Y8!dG8=faki8IJw8|19=AVmSJ;dynyO2|1fvZf2Me#Nm{0dyn zL4-im?c%9F`XL5eTO|Ne3f%KBy?Fy4{N3L`B(b(>Uuh-Yvj!=6sYYV|2=lF=n|oi~1mPj*SN&#$8W-1x23CSufYa&MPnC;PN|g z{J?s`Eh+%yI3;UGi|4vF(94|Zy|RSL7+lZC{>PVb<)z=i3j+&8=R#Il zgY$np?qD~Gu@lFOOy4mU31F?;DjCKG%W1$BW56`Y5ND$CzPn+d^AZ;TQ1yUuAYJsj zU428Pba*pbgjlW7XoPOJgUNfZ!tuP@4xdyCZcYb$>Bs+O#C1Yht{B|YIe@c+$aE2@w%|0u0%#?$u-O(%&u`@L3 z6UYg}@Qx2h1f)p&LM1vg>Vz`nsAJJAuMsdHP-1qSnE=WxU(qp|F6lI}oAwQ6d5)=tex3=k>Lo?90l4n_z}J4EH^{0nc|p;&&mcQWc+TifD-^8RAI}QFS0nso*#aepq(6 z`JscbX5 zp}P;$S%K*&#dMTmI?j>2dVu7$Llmhjoy;o{dm$A{6L$mrfFYsN8@giUsOE@kL-g_Iv_umHhJROyU zDzuu8m4KDYd08&yMhOJ~cU;`_^=~8S5A=6~bB;Vo@!n7W8ocJ$BUNb!z-ssSSQPkV zG;E{;Qc9uU3ec*wS0{};xs$N-&JzvCjs0I>VbxVL%~rJ(~-b*R3M&8Y~M_9^=gdEA5QS*+e7S+GraM;Lu`){y#3(_jt2~<1;*0? zaVqfo+lTnz!{PFW&10~pE-x9le;$CvA*9s7>?dWhm=u_*(#4#v1z7^n0|PM|6eIKstYN0=Ymby;K1V}U% z1dvP?%hZk0`4Y=ymK|vf2$0r6l&OO=zeDvGhgKy- zN(px1^K06%({aoE!7qOMp1Ea#0=k2s^uDV7xQDwl?S^ia=g!>IgCDsTBUBU;dp9Oa zpKe7a7JP#omm})bs7lT-9j1t<*@Bqe4@!%O`iuW=41ObBv@TGKB2QLnVeI3RSUYE5H0Z6iK`=;V-LlQQLO?wQ}DBIQQgNtnDiy@aYS`#PI5;)=iMg zEyt)jmN%777Z<+vZFo^+jH83mNAKhC-M8kMhP87(YBI9U$8~Y`sjs4c@jlB?)C(iL z^6&p0((!0vd`CwxB{$+Jwhd?Gle}Ecu+eYhG*QFN*(-)goZ{xer18F8hvRIob4P$C zL7;HnDashD;*aLBOeI5E0`TK_Va8d3g9gzp1kSd)E%E;HUP6i7#YRaO%# zYXMvz-~or@Gu(JT#wUBj#+D0#=VD{fg3H-yzWj|pn&txIS=LN!uN0=;P4w2!pw)`3 zvfAF>o@F1fwzjskyLZ`lHqUd6MkDP9wXw0G0h>|^J3Bj;b9oqsmO-Xc$}$mEN@*u^ zV*hC$v`qk3R~^|Jn2|f=ByL92jK^audyuRZw0uPft?i+gX(d7BKhsKr%r;Hyp!zyt z7;4K30t1JKhn9wn9PW=h?iA1Cc^+0)RxCfT$z+1Dp~K~zTjNEBpr#cCx#OGj(quA0 zk|dU%%LIaCn_(q~v|4Dl+xnWD9f0*?F&*4Zr+%{5AaJXc!f-gW3|w#AxS<(04Vo`} zeoZl*MOd!*#c$m+2RUtT0bEI`uzP)C8H6$h_>qe<7y7!as0V(QW4ISD+`yzz$dbbH z(kinK-O}Gm+A%xHEXQ<|*}5hL1c3+cGJ7T$fcuXJU=snw>yyIra)Iy8BZDa3W&QkJ z_}ZWUYZSRH@|SszkN@tc5NTZ2D~$t{OImc6fh(mHx@XSe?yr9v!VosfqQLc6U&79N zZ(DW;3?*<|rt6YYEo|TMJly|>KZ0j?p`c=&ii16f*=*@CEgPLh<4py}^U*nf9&Rx2 zxN%$;AN=YcaP{?97Pb`^%XL1}JjXi+`&LQzB<$5{Cpx}ipY`WR&Iwx~%|jes~LmP6Wn)G|6!|O(B)S+4a(? zx!VfRiTvAIF#LW1R>^)g9e;L$ASY`ds=Rd!-A<=txwP-^?_1tgbgrPC>$i2BLc1_$RhnJ>CHx?kp*1a?Y6~uQrwUE@M=2I*MaNRt5-Fn zr*&%=KEI|M*PhrO|N7l!X|G-D29zZrI@q0Qs|ND3YV~|{SE9M0sMcW#OonMyvrut{OvJcLq6 zi(={RkXPqZsCib`*?aH9vp@Qig)b7din@MqtecbL@TD;|N=X!jfGl#06}tTQ{}tC> zeF<(5F5JxI5jWX-SSNQJY(4rIHb4JpElirB6}8~iGQVzj^L1T!am>m9!qOSu*!TF> zO}z87pCTCzEkn^GTabWUE0G2tQD^-@5=II2`9jwG=E2ukyp5F(+>O}!M;b#M|mc5cf zU}rpS#9}E0bXz{wy3uKHQuDxV2Bew5XqqqlUXj8{z`Kw|AEYN!s7=-N=(lDe(Uz-9t# z^gS?xxlPZjD2nv=fWpT=`sgF81nf9YDRNg@`&5<{&fQmL85NmCo(UA0KpN*5?I)Ow z(vnM2fD|P&<5g|W$uvVe&Jb7s9vvi@jWbB0Ajwi86G&${id)B6+eh|P50x-s_>rySKo&-I16Iv2X$|XShC{V!xrGC}#}aD7a&J>YoZ+F~%^BGfb1Ld3lg? zthB<$lM?}v)4UF6X=8w(0JH<|NcPc?_E~}Mj4d9wSvoN%@Y^n6NDG1d6aZHN=!C(7 zzVt-?P7OcDDh*~*R6b-4P+pn~taO6rAdk`<7{fB*gpx`(IxSlqmm@C(ipsq7qzj}( zt^fp!-dH9pL%vZ*S*g^uK|v7c3AQK-YZ509D*`@sUn+W#CS8#E{iF$+G)Cq+q}{2D z=kL^gNCJCPdserSFt=l_W5(vxEh*|9h;&?Z-lU5n|0&W(nL0Bv_%wz1%K$AcW}FU% zEt}w$%tr}4n|@hj(LmyPGn0{guxRYaj)KP16!DXlgxMWx3hn6}&F_<`0i&^}YfK%D zw3zGA@$T*IS=U%81$N<~HQkTnxDL3(@Z@(c*oZWjm<;WZPsX5~+Ux8=DU4sVPf)US zTCbUnW3V3K%*B2gJZwy!lVO74UTiU4w|R_&yOSe$Yg*Dg#`WoTJ;OxbF z@%2Cbv(kK&o^TuoVY`ikk3U2lp*~h)4cJ--V1#UqOkE8Xi&nMvnW>%#*H;VoH1;6BX~zd8YM+>Dt7NU>`_t_ zn5OxObU;=#2!O!%P6<;_g^-aKMI$$QI+yi+8>^k5F$<@_AWnA**gc#!H|ceJ$iW$` zZEjg*t;55^rP`sR%2UhO6w)w-VW`WDWDBvoySuxg$_s-6aRl=jP zB(0O@xi+GtSHIuaV1v5-%yp=A85#Q7qA08oYM=~AZddaO0mb?{?RMMR4rz=`25)6$ zMQe!2H;R}n+E%C2vC5!#8vi(sF&d2!1c7FcOcs$!tkh|_wzg)CJ(YURbtn*<)*)7o z?uE3Dsh65gr#!B)oOv`#rUtNBAj!!lX1-BV*kxE{qogwC-*XyC%?OH(R#*G`+I%{idmQJcD3heLiTP3}< zwKa?Jp>r{>_r}JC?&u??jn*;Gw_Yx+ud}kUf+&hK<6}CDn*w@sJ7!D}E#}w~!)Jm% zr4(AN*3u}Wqd-=k=Nja$uC7`jt0)R=Z*SWV3+w9(V@n=Wv<_`Y&u_CChQr~UP^bj@ z^>xTffqwJ7UenN}d;kC-07*naRL>eW(utYdsh46YZpbVhudlD;z4zYJ$Cu}M*#WzG zclUYM{b00_6AiBpbdVehlhCMzx*di zQ7nL{P7qX@7-hw0xQtmepn`(mYU9GU{s3;xmqtm6_kaGkD2%{X`phzL#Tmo(*%aeE zx4$z>Og4{NJl8=l^h+PG+mtVEw{SG5XBgu?oWvN#=>kQ5+=VfQOh}}KIQ7!hB0|C_cYhybO6hD9pp{Fi&c!yC|78Ad-^+N z#?Y9PR}@7H!2YP~XU4~n@uw-Q4#UvOx1)7T&`ohXw9afcv(}+$kbm=r&G(_p4`$+YYsXW)9!(ep}vl3M?vRevQ{+y#7LRjp%7}? z7g;&f*P-z@%}b*w(&cOFZZw-RbkyGFUESyF19I2>D@%P0vQ%I?%up1Pic)%lbR1S1 zcpCGvlnQw!AqpePg}j@jgx2QLLAe}W1>)-E$YpmGRw(#yO~H3_s~=reK3Ad!uI5?^ zfHQJv2VBp^7r*@--2K4kEC+Q!Vf)S3arL*qDFyAd^4~I>heApuH7!D(W!SoOKOTPW zyC|sq#~8Td;_%ataP@^>m7vaafH&M=7bXJ3u$1x+T|dCq<4+(mUEopLJ$(F+zeaL+ zQ050x+z+2?(=s73%L^n~fg~4TU=V5^^^;dXb@hP<(K&lg`-qh$rwSkc3JG;Af2w5@%GzlhtT7ig-p5Xhp*nLv%1 zfh_WkqHq4i#zb8W{!_6f9(sR5&) zZes4^IJR_Xw_At4D^$KU*Eu*iuwrrmz**gDKTn3DszMECFZQ)#yAn!U0F==-C9CE7 z4qT5z3W*{wBWq+)E+U@?LUUFM*2xjv^&I#ChwD4=f@<+Og0_dwAVApi;CT)_-+>>L z|CU8IIDF7A&Fq|bgoWzZ_OLVjS=YB~kPd%aj4+iVMjq}KbKoofJ_&* z86HigNi%aWNfL|6s)H;5+Vs+7yXxzZFuk6|XvXG{B}9EYb?10u?x?~;f_}3DkbvK^ z48!_$Ff#;avzcWCYUUUcz$=OZaU5G9j=J||vzfNsps}N4AW?dKI|L>HXd%3rcWACd z$741+5CcjL6D0Z%!w`9%>+&NB++Ej&)9HuLi@b6{XJyC8#`$iU^Ou(wBy4-|Ll=JN zB4~N#5;~ZTGo&*zNt>5mT-TXrvKg@|j>qA8RVSb`U;MyB*!JdKf)0b@mZil!5wJ)Q z2Vi3X{Bj?dh$YpV<<7H_=avrZ1|Sl7hA;i_Pq2C6;sUt3`MWo;{l=?{BK0Hg8-eu`ucDiwwk!{!Mos|muc?p z$2D~^VAAtk+#dG#4NMrNsFn0$)qf$tDgw?nJAL?E?3+FMwg8hq2Y{tk)PLy!iy*Ls zshIm0>=Oirwndq={rX~o5HR0`!%P_FF1S%ZA#Oyenl`7~x{P~{Dg|WQcGUMyu`23! zN~@)gub37!J}k?MoW#}p<2X(P))eEWSQPb4)1OgQa&Amkq1s=?!J4Xsj03TF3Qv6| zeqYj!o8#%r_-Dp}HFf>2>tZw-MdEnISk#vbj0% z-tSUfQ>)cVv_JBFA8cyQ`kB&NscrdaBTCuTrc0oVBtQ}(~+!ZU4{+Xp|8K+|@1fKYtA7l2=;g}as zsJXiMHE!kz+Q)(`F0eDQlhcxvFe?>2{nLL3t5V%<3{41pdxUFmy#~9}&g6H3K94dt zg~3SHj(+B$)0n>hpV{H)5Oi%1G-Mam&L}}i*E8kj zQV2Z!qkjXVWFc*z-@A4h&gL3QrU66KqMd~4M~zYFjKMNBScVRrQGC;BhV6;=5qtnt zO}&sU1Ay#(ytnxuBge;fr(Y-_|EW__lLA&VOi8Dy)v6NR`Xwgu$pv1IEoIbzR3` zFi6-(#M{3pV@uUDRDH&_ZB#0i=v>oaMV(Vzz^|@3Zi<@Le<_Vp9EhcLTXC&Z8muWs zO{K=-Rd5Ofs&s7pGjSu&^!MeB?f9lZvC?Iwn>g2MwMb*8z@BP~tpIVkTu!ieDt#FL zj7k}*G2{C_`u%>wbhK8hfiV_2#H;6^EF2W8rC2`oUBlrpkuq#Hn_!G3bggV=vGOxL z)naDxPz{6;m}L#VClb5o32fc!1uG4f^rg~G4OFA4e0aDj3)7H-OK@L;vcM(Yuvn1( zB8r_M5M07@f_0P<$}^q8y6vI##Q>(J1-l;Xx~9R<^+b?2GzL@CP%(7qTG-z&1Syq9 z9jCwl11uds5g~ouFu<6GjW0jPwexT1_)vxE$Jqb43}dhAfXf;+kr1-21u1O4UE!^wrBqMeVD)RflQkqXJ-?wPd=PF;q>xkmiV>m^A|>1Uvm99MAv%JuoRMaQ`+j zKScqS{3BnByu$)5J~)d$4*)2c`kop8YQDSeJ|30EmT1&kD+Q5vjxnSWf5rOqR*e~PCy72Bii8*1%H0H{1hCccoCv2MRVAyluxg3H^ zm?aIm5$Ld(5$L3JGw{$-pnz!<+!Jty9-NT}*Wqv-4rdgsY#K8b%(Au%B*MS-{h;YH zWdu~C!EP{E7e^>vaUv#0?KC0U-raQ;XpU&y2vABi<`?k9kN*y{hYkm(oRmV-b&T3A ztbX(XRzLX&EM+b#qy&e|q$52p&`)_Fao@xA@(NDB^fF2za}}i|T^HLQzlYJ*dZN-V z2oU+Y1!a_)X5Y+u11o2qhGvx$44m8VVeP~B;136h)SQqKtx@RMopz?DG~;6=d>{3t zWgLC_I~fXxI}SF^zY!oXvD=`VbAkSF1kd*%Ifn>$2!ZwC2)9SWeS<3kpls+cSg~{z zD;Pi}fVF0~u=iHcwAw^Gn+git)p&^d9|C{6eM}3LJ)3G(dYnL-%{!2?F~UmkanZ zEO5HVodBT1!%#9<Wl>!HGEmiz83cSV5QR7XT z<4jiEm{U2P#|=`|wWbY8^WIPOH!5AKgyeCtze>+3c1eM(IB-;&E7j96ZXg@iQz>Io z1ymK#RM)LYiukisOr2t?)H97=w>qazrxUS(3Y3v!r{`omJtYNj@~P$IfMf(_Ne9#E z*tALFzbV0}=fbsls)Y+suIiXwu10Cc`0rfDhv2)dGb8}g_h4QbLBHkhMq2Dv@#V45 zln}6-hgqAO$JxLC_s}gX!N|D7AujylpU~glN@%XamWJSAxg&}F!t(`swwJVf5CXON z1)TcsODI*Vi6}^P4cCA9|G?{YGrBGzcE2MYK~?H5kx-KY*7Pinz5FAX)mn-<^Kt#% zchJ0gDPbl`2*JR1&~vhm3g!Rf|NS4ay|cZ4U_?pb%0XJNa*z;$c7KS?cE2#dp#=r*6=e*&Ukw<5k>?lo zk23XuF|L?;frc@%@N-@74sylL_kcAqRW|Oa<J&=x=^DeK z*&4J0ixCOH_jw@zE~Lcvz%G<3^o$DF^fKlb7NUR*06RN7==FLD;rQa>VuHzx>wxmM zc$=GYxr}Lp-IZ`s>B3)?C*`v)RlvY)&^a-r3nnXtGpu zXvOLPLED{Pub0qi&Cbq707`*^?d|Qv_r?9c6j14OItih@GU$v8)VtkoBK4^JrP9~8 zy}h0A4O7Ru)50empOqP?uIo{c#AqCNUgU?S1mu=wp;oI!KvA{mQQ$~{rnoVwvQ+4H zy9v;)u1OtV`G2WnD?hAiwVD90svQ%h6t{2RjsRG6t;bH!NrcRm5?7ymYGpUbYXs$* zxhG(yK$<=D;MzPhfmszDOGoON7f$sij6Vz4@li4BxWBy&#`DWQ^IlsyChZ}(j}uQl zn|ZK;bA0@d{}H23E8}qP3kg3Qq=9f-M1x_JBjU7bH9Y-q|32f=u2vv=PJTLQIh2%@ z%8+8$&HVNkKIf1*{pZ#$evJ#Sy^>+zJkP_(&h`qEQewVV&UvmBvk#rZ{HaF*Z?4$q zt&#;p*OL!lwT&oSIjI7MSAY4>ct%5wN&393_eo_7jBbB?FC;IRQqkm_@;Me+b*-1;z$2T{cnDCj_tx zjE~O1MR(-vI~6XZ#PW0%jj~zjTDTB}#uxyMJdXCz-hVT7DbTMU#N5I{B7Fn^8yg#m z6qRY3k*oGzQiYUKtgo*}%#H#^>Ti_$dVCR5E|(L%29?`Hr41^ z9YZ}2bsp+xwr!)`ZYPe_Xf&egKy?q>?RLV5*|IFu!=9PynJFXN)z#JLSW)%q@ze8? zX(S;`Klj69(VQnmxDp6yTPXt&HRw6ueztEI)hH;7uhfDE;yFI-fuF393s-f9r6G=O zq?D+a8hGi%4=`JuOSTaq1eR3_+SsIKNX|KUm}kwKxf09@rSR+#KK`%&3By(^!zlPd zz{zo*7gECZc_wfhmWAj4;XlAAmy>!W?DkE{iz$NVdtK?Kkvj+jK_$>N(~^-tj2qhu;k(-T!LaWwzB6-2(Dkgg#Y}% z|F7V_w{OEHQ`0b2Hur6&slsRTP>;8J*$c>0uILJ6&Cbq7X&#k|RK87WuAiQsPNcx3lxQ}a zi9l?cW`Yf(l%mt=MD1zR&lC_-=g2vaK$c41rGXfw6s=Y(Y9XW8t~kh20C973GxBCq zPU>-xMJdJB)>fo9Qq^@cGcyTL=elmfJzm|1IFsdhUer7}zKsJ}dCx>KQ3^;YH}*J? zYq#4`nonuQs?};D{-_GYIDnd-o=$*5#X!ZiW~%Lw8e@v_Qh+u-PU7j}PN##57cWLJ zChCc}aH#e(%4mW;S~)(YdJ|_}T+i__=sJK*ilGB*g=}9!DI}bs4{yZ7hRnMT@4CsL zm$cAqG1MtZjuW%@{PuvlFL7rVkV${5U&nE+P=yDb%b&)dBY5}0g8Wuvj+N;M6` zRuiB7{J&w80#_ttuJXVYml944Tq(m;N*SK~>%T#LZa(upre&dIS)hz1cN&QMGe6ff z7*+|oVSv!xp9e3Wp9NQ%hR)^&zIppi&``V{*PV^*09>U-?PXI(NoPs3N-1E}8aVvI z_XCD3J+Y34kiH9VG=gudeF({YaMy)19Kan8;SPuJY#SRFzs3h2yodGMtA$cxQw3Mz z@pM6vZQytqI9?$kw5e;TnMOe-4u#S#ik%(#yqM<^L1=$M?{dCDnwv2R-=`2n!j%#a zoT{KUU&Z6kHt^`9E*hl)W*ZK=T>-~4_Ke2~0UTez_IZJZ$6;z*WBCGI09*oH&qrf! z26Ok{hxsFi@cfJ4fz%At=I3zknKN*>fS?R>ON%I(M$ku8aQGxJ?*$={;djwH0N0W0 z?cXqz0Ji6&W*LRjgsM2D$g897rQ`2^K|n-cZ0%43rC6n&@+gW|6)M5@xOa4%9!u$I z;+h-j;$*8lujxR zvXoVZvR{bW(!{PSF4|XMOcemA`>4{4aZ3&5bET{x)N_klFT{_fK4Y3@1PawPaLz#< zJi8PTM5>wk*_V&TD5hPYH0rzXT%OSk1R{01+ub*$x?G#X?z_ogK!Ws_X0VK=%auOP z9eEayubcrR3?hc`C;{x|Hn?pkB}oW+2y(vL5Sjqsu8YRe;~6%IPzt-#!8fn{3WJ^P z1gk;;41Erd^BkLY0$+#(fMW=9vkyG~T`b@KK!PD*hKco$-v=KKGO0(2fVq;nDTbgY zq>Nb^NGVWVT*1Q0Mvcjfxj#@;F%48qy>RlWD0{_) z#AbI0r$`V7FlCvjmh?hFt7v)<09+x^wcSFjAfp5`Wh>Vom1FWq}+`j3<8S*`WEJA>u?V(+S!2)1u3=PZ7 zYDxh(LPBtk)ovgE=I{On=bk--Yd6=>YISkwz#;&N&CM3dtzz#^Yv@E0 zi+wZ5l{wTFR!|Cqtzv1K&1NF4Rw|WHtJU^Y$rdf1Lj4aAG)A79no6({yF(jczcp#D3*7iDNq^%4=Wa61kY6nLXc!6g*?X$z{6wj(|Hh4n6xqkT*^}Ozt|k z^y^>1?zBM@LU3T{`mlXJ0~RPDFv6;v_zXrF!~M@akA)NW2i1ZRxH7Q%?%QZzy`1^} z$l*Na=Y;0>O)SqX;Lx)#!grI@tMq-WeflxHZYQb&RPOSQ=fU;745LU%Adt=)milPi z_aO9`XP3G$ZmWr%FFp-hBPClB`8k?50$}L-xH;(W8(gVDUR0|zDfUWA3ET4vrS<~A zSPWcY0$`C~G8PSE*)dLWWT}nm+6c#vHsIJpoOz*+m4h>A4eRhEgI_Aauyo95Q)u7l zfHDTXR>Mm#`}pV+j#gVjcmlpJ_l_tE-jk8XQMV+L0ta9q1bSTJ!G|Bh_Z~fo%U5pU z>u;`MI0_ap!WZcE2Uy?O!inQYFx{BKKmV71MsvG~gHtA|mVt`NpfL&oiRp@o1Je~; zT<>DNGX!Xv;beRGJN)HtGWm0Lu+1c3y+ch&Y69FT|^7Q-th;gEn zqS0tXRsjkGbi3UI%cBB!r_)LFHdG)YZkG`E+fra^A=In^fnIrjejXbe8xer$bUKN4 zFDiwm#O4Z2t*xzLc6K(pm!@fAZf*`+TU&{qf4=Wyc6K&8*38Tdy4^0i-EMTQgTVlt z^IV-=9I(ab|9ZV1fvKIHok%C8fb`tl99peb#9YR!9TljZo}P}XIioo$WWW@_QqN8? zW-5I=91bI0meO*m>y4))<0)L#ZU+D~5%!A{zKFofsPCrI5qVl9!1uC%M+k}KV^f$} zssyg?u>dcH#K!f0vNs_BO%Ob|p<`x9A&3K!1FmvcMj`M^rX&THo;-)z!NVE$N^p*E ze(`fSIhA}Pk7GEdF|iSWmt<=0$dhNW^x#QwFUcykE?-3F`qdaMn7luEKc__IYm|h* z!$1D-68bSUAUD4F1Dcn=$rz$?&M}OME)x@prh^fZX?9&ZdII(P9?YBr0nqyLvkbUW z&t{z7?Pjl-m4O6MGxe~FvetE`jSv40pN^4GqL7qqn*Wchmys6rF7yOG^Y7 zTXN6$!_+lk*IE7h}mih2WQKetCjG;avh5e3m;zDf<_2fY%!`+ z3QN}trPd^Xf$hSmT7?D;V-%twi&Zvs^c*iplkWFCgojbD1=}h|fCT`irlv3)4x>1w z7>RMI!aR_r`q*_kod~4G8%itPO}rXVRjtJVgK8EWH}q81j!L&hDaG{kbi&)p^E?a& zgM@%urS6n&3jq54e$e(UG$U2w{I~Z5PJLNIFXVDs}&65vi{PW_O% z%E>+=>YTlc6u}G=$6x+I0N~;ek5UY`Hqg5CO?WNIip8O0hs;&#dI*8e=x#sH{o?!8J!IeQwQm5(I~;@aENY7=y^n!-*hK^3ZkJo(Kzrz+IdC!b zeE3{qWx9-keN4~+-&#l^+Uag-J)4lLpp3~?|Mzo&8b zYd78|Nr7^?oM1=Npg;kGxchtjywc~N1`zRMseki8hB`0xuR50co^gWpJ2jKf1HWk} z^!WFWD^yUw8+ZJBnKQ?IPt*?Z4$IQK-)K_Gz$rcU8f!WQ_eJ2=o)c6AmoQ368eI}# zex-(T-Gpm%_^~P{-xKIHLzh=0ROd6G+y@pmf$4#SP5r=hO0BTN2ET;;*+Ed7{A$vPolE80^zyQ^-`vxck?RT_D;5N0TQ zF0mCeIobIn$S?H zNqo9G!o1yprES9>bWvR{!{-!+K8g@q9m%)r!ZoB2{l?=By1oA17@}*=GP>2 zN5UaI0j~1;SV68S|P^2 zO$!^Qrh5w#rs3GLFJR`#G4R-GiBJl++rjE@Ux#no86mjG#h5Z>0*#T}*=*|QanuhU zPBK@7LU=CLJ~$7_{j7Li%CQuD9vG6GW9ry_m^tx40Ip*9&FQqz{^rZT2P@TY(s9T4 z8EZN=`Z2S-{jpaJWkdgygDVA$x+AwxdmdGtR+L{MlVaq?bPd>lT5b1O24!&iCO-Ij zfQJuC^xbXDR!q!ImtmHwK(7z(w9u3txFZksr5P}fgRBoRWoo!|tpz!7A!Q#6Qv%Hn z$NWqiYuoiZf~?84xFKM%Vi5p1RIlJlcYtQ6k7JsS(a1r&(}QUmIC^jex7W9D_4+L| z>Q$UR`vk6D_!`5(00s-q4mAod)RMWr0HZ) zH>{4F!1FF}3?U_IB|Vtm_j^s0!D(%wGERam+8MeIQ`f^M6MU)Cr>kxK_O0YK0np;-&BHb|5fY4TR#}S~ z=#j)^4G}O)JZ^1306!-XO9Iqd5{s(>lqX+U2?@^^xxrhbLB(Dg^f0r8!!Q3Wv~neb zj)&{FvHrU^KvjHTKgz8LV~nC+%9ha+rs43Jr!kYNOjO|N>MOqpKp0J%m5QJ$ zF=uG$dEg2X^+QK+;M_AA-4%Cjte$@p-k_gt5-laXF_mSx6uA&6HKwun__?g$PzVgx zR^j!#S+MAfvAPgRfUBJr7%Ao;T`lPo36*=D#L1o5tC2eqpjRpBV>LdBRqb5^906Ft zNJ(VTOxi93np$B?NKm^1XJq5kYaB0~vCtC)Q-ok=XNdMz7iH7L#ioN&t%jMl4ztz8 zVEZyW=rD8>U8fC3e2jVmh6M=tcV|c@0T>D3_&x~C%&5>nAZ!Qkz4IRC78kI1=nx16 zcG_Jyt_Rz3F{?4yBQG=|mT0gpTI1;v?T(YqF=z=bGe*$@Hz2`pI3rjFjo**_>I1f9!&z|86Az&#gA3%ENL({m%w z%**llW||1pkgDpIK8VP_@08N~*N0NnAAShZ=gCtDoyRF*xp$C;ReJSW1t$)!K#O@W zNs+H{WjW7MN{RI^KF5{wZ-ME?J@SkhNCYNq96j|Q%CmEs_eClON781-iOPt{VJhz4p|T&Y{`}Zlage|Is^PKKY=a<8V{X<_E_}hEWsEU_ zS`N695?DF)D3(s1PFC^}0mufV7(`d<|MOgHD2tvQ66q1ktjx;K0j$C}x>_ay@;9Nim4x?nDF+GKH$;6fGw_#`+ zrsftf=(J$>`_Qa_k)NxX(5EbL5qyWnfW93xivRLf8&@`aI8?V1CZ#~2Eh`GJY|n@7 zb5sigtVw~alEyG%v{;&2O038p{^5W6pCh68odb9ltPnylZ0+FEYrlr?c{#cp58!@& z=0VE=S%RQC*umW6=W>~qk{R|(OlQhy(04aoP(~?D1n~5$M{}O%fkz$%cSgAN>BnQ{ zS$T(dITgPg8`s``9VcG;A*@v8pYQwVb-Spgv}OQc7&=_<-m0A$BM@O)HXi8BY7O`O z)sJxLwO>Jmy#{wDRvm;;NZ-qn4L*m)lB_ME6wM2t!f7`#fA*Oa=^`+)M<|&kFq-tj z3sR+liF$^R(O3u$W#)EE36O`*E=dpq$#++^=Y9}4x!VIb>KQ1wjN0E23Y2SRMwnHlJUb68W;IQHUS!6?_#Zzl%VuAp<_4@oc-ern+JTt{v~2#mbS2_dj>`Z3fG zAI+S%;2c+8`9Ku9UI>zc zhQ^Qrx~9W4ODNZ>V1|kA)&>TSi|KMOPclMa=`0AQB#;K!9>>V_QDqbrjfEPmG#D1x z?hOl$nSd3Zt6GKAgpy3A(fGji(6@`}%M8Q7-~Idl9``?ZGEp`^7G&js6+$UStsPu^ z<(D}umxT1Zpjm7V6PL##K}t-Yd<2dAPiFK>1c4V+l&Xt~sR^ZFtc@eHFcme1$s#25 zpNz4{N;`J_z4N&Bhfl^ZcVkj@$Qr;&A;63hjz0fA)RvbsOp;+3LDOf$*p;k=k@L#w&QCpgg7F*nq}jpPF*p=EsDKoC-b2$Enh1D40a z^3&geIX#z5qY;9gE0=KV;}3F=XK5O=98H6iG8bI=j)Ucsr*P!lvtW8k6GRA_pM8ko zt(zH*lIwE}oV|l9DJ6_b6^EaB9!8~>sTlMIeY8IRIJf_x%>`VZJtiRpnr;Mc_NkxO z4je*t`9Rhq%=57R$%o*co4tPl&6)d>w`?2NJDoz{Dk!yQ69HF5PC~#O^2Awi0IMIqAN($7At527&Lwf(RA$O^`?&DND>!`aSGvQ!56moK<>}`@4Kqps5=t?3--Ga67v1YuvhgWu zq@MN3i~wjfkw~~3>#zp{%$<4^jU)F(8f1yU`Q33GG%sDiVC^=jrbWk9#U4CIGuFPf z5&BTZPV4k@2V^?1oOom&_P|TJ21p5`q@!9lBUUR;arW8{d^gKNm3)f(woRCRj?hr> z+|_|fIgLx99sKUgf#xdp`_}cVxc=_jnczV}aK-XGQ2-2_tjn zlRe*U0g(Y-l%cwO5N5rRcxjogW8=#|VEgL}WAaMwu0AC829|UU@7}(R_88x-JyXP# zpfUm9D*&KE6kcX?A+gyT74jicE8Rxfn26;>U=vc50Ry_W1KaZpL#*j?36{?8=~gQp znvgPBT_R{9BOpLP3!PKXb}@AP!UYLamKjI|A}<+o=h#ScCvW$4A$8i!BzU#PiR-fCmm8-qZb& zkfSiGV7GR%%)OKW5pailo5v45@YDa0y8!Wr1KfJ|EpXe0NTndT z9KU8^lw{LTLZGs85c7{bnFJk#Knj7KOW$Di!*{`q>~r@*Mo*5pubF2?DHb0%iIvlj zW;MW^W8;JK@cO+>=16iM{vK?5;zu-Ubu2#l6iPF*DV>!>_xd$#fBA=85`|#AG$eCP zVfT{8p`%!S>N^o|RQJyx4zPOu4cM(6kdz&bn#1CUeD&(>XlyIEM@~O`AgVVMTw>6% z@$l0t+10A0!>SsYv>+iszvIGnvJ|Z@2u^NTFgVGI#_s~INEnBcHGc^0-oS;2 zPGRMVGa33-N{Q*288A%`jw^SMF9A5Nd(Yxt5w`qD1H8fZ7H+)%PFDK`0Nf9&W3u33 zwco>~R;#eSsHC&NCu#!h6`6nqf#Y**bVr4+OQRIi)e`7L2&@SKtdRrT|I+}haiC@r z`m{*_tVYR1-7<>bYXAbNimH7W%@RUzyV)(A(iKwT#6n{-Rv!}>&y*0XcZY?FNF)H0 zQk+{{in>|c?Oq=K-Vb2brxF^I=NRd*)nx4UtmwuFCpQPZ} z{KN0jy7YB!4B=z?KN27}Eh#(?i)Wre?a-0j7k=~WFR}62r`a}VK(3eJoj?}%JRCmr z6c!$MD0e(=y#G!BvT{0w?1jlnGL8((=blA*elY{|oOTPV=ikUw(%&=43b*>9qnJDS z2sEpbB2!G$kHnybzFH{wmX#0-tSdp>5lRCVxr@YL-5cG#VAM za7CE}&>A@C6sdHI0mtb|X(9k(68bA4C7S)wM9$~i2C#;%hu+AWh#kS9>H0*@iBHBa zA3I~Jp6?Z0FVxGZmL_0$J0UF=mlE5(QQ>3ETNa*NSlp9Syk4&0@Jl}o<3%zvv2)>b zG%tRYUzn65@3>RomO`L1zlcLG{vZk3LUw8Wqj%B0aW(gS7$;32W4tN3>tN~0XHYwG z3~7ZucOBe(|99wZtmhhNdR!n+G?3Q?gAfAGwsG{_Ggy4^BuL7uQ2IW$KK&3*r=9sb z?s*Wt7Z{W7C2~p$$}}uL^E|BSnSeZzyXjQB)x_qfAA;w^PO7wPIqy>B4Hmmig8Qf} zu3+xrM+0jLksKGTOJ8H_^N-;Thk=C$Ns<;^$|S&2e_O5@Khtyyrm;v@wQ_60k|GX6f3BXl)00_@R?br#-Kk*cpX=cEc z&UBa|{TTqF-JOID6VpGJLV)`|gy7MCt6fzwW(O9<##dip?ejm}B~;uUT#*pbHx3@g z(eJ#N0R$v8%_~={Ae1I|#sa^UkWJg`j#yiS#7-&NH?L#o@;5n?iVT>mF_YGnP8)0e ze#Yhfo_Zj1!pU#`zVshXE? zPdgfHgG@duJQMb-+RrLkaaY#=uBWh!JQ7gI#Ad1askMDS<{QbVEmXZ55Of%pN)d zP1m7m8Z=FVUNTWxSc2PW!ME+G#SKyMO4DJx9!8D_Uj*PTzPmn8{I}z|Xs_OcGw7qS zd|=l%OiJkGGHNS_zZJH zelgI72j~md%p59<%iyCSyul#QT7~~p_wrJ!n|)92du&0bX~(lK9}P~<$@Ut&qg^~B znBUg0xW#gpPtwazX(?2m0avbrsgsXj>cLZ))dryyW~m%F@8-PzOrvAVRP(AyBoDwB zr6lFv9(Y?duU)}cuV%}6@8-0dtIZGs*7OXHfA=NmRylc32;dI}&;$=FM3TU(x4n(l z&1-vRX#%HyhK0w@Kufh#AOPHc4>#X=1H$(+W^SqgA#ZYRI}SctUoXr$F-p*|jEMx; zNw8M{(6v2m_eT?9)Rr1$OeRi~$@C!P9L@e{A^>Z-Q7Lq7>J&uir&Sa~3L&x49Tt9W zgb>VE%P8rrcw=tdU3@=qygOey0XP?E5ABJJ$pbSrm^#bY2;4g;4p#0(&xi|&&d4tO zp6Ha~%))YTk7WEAWZS)g5UiYe8uf#RGK10|jj;aC>p{FC$+7^SkMlJI7^Tp(Y;h1P zSvc_Qi!d8gnHc8wy14%4EAWTIO!h!X8EAvYRM(HY_X{UaWA?$5iS!wv6#i(4)!)7W zx8KW6O^%CYTmoLMoJV5mp;I_~_G!eMtP)D$J2qB-_gmQQR-!ds@SX~EyFEBLhSa&e zW5X2e+>xU=_RM#JbB_u7rSD<;qxUe{+Q>+Rgp}}o0WXvtCE^7oFm#srE~06uEG}c| z$)^Jk&8R|?LU12z@1IBK#VGzeiChNpMy25y~yGt=l;QO0s?K+g(G zrQoO?I*Pedk7e@Igb?(%HgNg%SMu}aLXNG387ClQnug=geHXQ*~4@saL%x8JR7>NvbGwZCVV0kvWxcWC5#7*3$@ zV#+Mx^z1@nP8K;gSxO1BR>$%0|1fu6cRMYtzx67pku~geeLl9T(=@c~_>&TPrHVt} zeK}Wb?mITFzxFHm!(oOL;6moMj8nidBl(aLTFJuE?|vUfwU!fCIj+C{8+gNBu6}8p zcNLd_n*&m$;5hi$8LT||cs3SDiOtVHMeE9?EbtKm?M`>By~a3Q+ro+aapde%x!D$b za}%5I{}wdu6Db2t?YR4B=q!stq(o);0G7`_mpeX&+nc!l>aP;t_3O*4(ZVBY>3i(d zT;}~a{oKLKARz>(%~+V8FDHLT2*4#OZ}vgk9Fk^34ZXvpAjVi3)DIoS;uBA0DkC5T zZoKgu3^v!sgDZIlaFz20>(v^T&OQUZTF>}G^)}aW<+a~rA6j_sW8Kq{@1RZ@!;!Pk zVD|Wlj8i+L#O6ou!R@wlo!Yr$-xIh30Bd$0%TGTC%CyvZXt@3UI~Z+m=7T8Yube0$ zxY%mpdZ$xpH7zBeYZSE!xwcP&y;9Z;w>yKvOo5aV)slg-sl^vt=-d0#2u%WD1;N3G z<9ZW07Gqig0752}^-K&Z&iQ1<6Q#K=R{oS*x?%8sH$!7MIMjhReQ#Bh5P>z{mt z!Ok{72wn*RR>Yc02{yA>{#jaAwRpIm7)(r~m|v-)F;~vKOmrYnes=)c;y~6I{hq*; zloCwWQ9E!5OHV$NV3PhB=)!3re=JEIZ4ZZ>zXb1%CLTOp(xoK{PEE_=BjW`=~c|9GJWy{njmGK%f~ z5Vqq+%|`dTODW+Cpzj3cmumNU&<^UJcRqn#2>3pqSip~K818+?J&ol(?SxDOfW$%8 zw{4pQnBhXg&=@Rp0*jkSmsIp#69|byeqV7`a=K(C7fE@>v6N!4y#=$@KzVj9(*li| zCAi%-M9N}-kf0H_pQCA2CHd)TEig3Q4m47;^MRf=rh`@AKiJvI%%4h+m4BbJz<>|} z?tAF2-b7_#5k{q&00&GrP@Y@BU}p=iJ<874Brw7Cg-q-!zNX_7)imr}y8_A>stb#V zN@c^zzce)sAq1K?ufucQXm`UZc%>stpGP#_V|#!DTr_W7$JELJSYaw&;->%rAOJ~3 zK~&RkbuW#216rjDx6_7j-4q50jakFRQ&0d$!{rX%s!s*& z`ograS*@eGv;w==#i-ZCl~yly?mq?pJZ0EiRWZdB0K_9n2d=JtOny|)SB7i^$8HwBC`|iC>{*CZF9C+kW z9C`97Xc~<~ftnut+h4tb{_4#rP^g_ThQVNjk!=UTIV}q094;4$-Qxno!4Sv4_j2GP zB9aZT{XrkC&wdZ-*a=}E1wbX>dVVAdjPC$&so6q5tYEySJ@(=VDN#0clyq$}fe^U6 z5_S(D&G9(4I|EFj3{5qY%>@>JsvVdZ08!WX=LkT)t=C5;1ZJd^pp2qy>J!o8O={B^ zE$ll-2!X>nbVgCtjf4xgDq=#+e3DQKyVF8_c?G&Nl93w z#i80k%Xm1?%rg|i_tD>2N2xIdvtHkg15!e>ER^Tw(cjvH?>HG?0|Y)SajIQC~h7x)KCqNHa~;mk&TQ z41Ds%g$&!trWYzdQ&t9QKX76Sj8W(&L!}<%jNOqB&*AVK4#(p#wtUn-8iBboIz2Cxi)kM9fkLV&R>C?NneL&w2qUPN_qDX1oi#Z1a5R)6~%hMOBXK`U^g9XIa; z^s0a#Haz7*1ZAR{jzcfJgwoVZ)~AGXtiAUR{6Qa#F=&*6#daD_2AQ2wND`WS#&#kE z=8hf5eb0Rtx@kn{nX&*$4{qPW))${bb%u{B8z@D;Kfqu(gpk1sBEI{f2$F}@5o&iG z7e~%LgXzOZa#M=^8&@%0Tg_CxP(on4e(ogBD8c4vh-;nBL?+UTIYIVn5+IEbbcQxY z6HA}53H18=AN8_1ku>4NSS$pUpw0wX){f&~$|%8L zG={PA&y%|@yukqVl>^BDDP_>-*7srWY-Th|Gz?G@IV%}L@-qR1V7Rjlqf$j_YC7?I z${3~&A4PZV7Cbvyh(f}5PO6l^IDn9P&cgRF+}c2CY8pnllDIa_vS5@eXkNLP$q3P~ z`$S%9QWa8WJTXH?koz7Qiz}J)sm?8+)M#M)(l;4R7A50BR@71`l@8>dhvtpzpp2n5 zzYw3~Kn)X>l|$gR4X3q}%!Y;JPf&@OCIb+%Sv&!dgXgx1&duwnE-ph;?)XxIvVfKR z`t~}Ueh*UcC@N{1k$u68k_N#AJeQ-}OnOX60xWJ4%&h~0W}}Hf1 zp|X%o(-F#W?bTmkw6mQnHuL!%z?IBzl*!Bz4nOw-%=%RBV7>X)t8luV{PsQJ`Q?Qc zCr_*^B}%nAjz0BVZdy}tAKMo%?0R#=&!2OQ?&Of3=e;5&%G1-BJANV;Tn%pBMEk4H za`kJj=a0>Y4}BjOo2{Idp!dG%jO8}({!?y&1HU^lN%NmGxcW=j)WrI2dybUSiRjEE zfT80B?T#j~$e94hk_dE}I-_Id7x!|k>%9(6&(80j7a4z^{mpgsHrCNNa4_lXBm|~U zJqo+I1-rSEi3wCOOt}w>=8CT{{*GR6pWZ@whV*y$shd$AO0Wz8(5C+mogT$ zf60vpIpfvs_t06rfl^~C0W>7%s4gzy=nLP+_499phSsrpS_}N1TtE9PMEHLi%WAIH zKK}!B)56lp)0y*`J$4_Yl(_oaH!~nhqXAeQ>j6e-j%lmF)%Sh}%`mZW-~EYuL3IOj zPn?BbucQ6d7tys-reWsDF&Nd_oqf}CioB!{@CJQUre`u^K`)gsd*m3JH?D=PcL;Ld zF5eg69?t+PDu5$52^yUcT%{kR&vVNm6}ZY%>QlqO{OKo9KXeo#=47t&$g6L@atClF z#sY#|a1~ZqteklYmAS=4n*u^9xZ_~;oj1mUt8o*E1mKE%v8QfXxc{Y>QHoQv(dxp- z^*3LGH|z&i{4q7O;2iBvcWh7`S7l+8D|q0=?`IlQD-B!s;)RUhUHxrdemxMWW3osnJmo$k60 zwnrn(SymJ$2qi(U+|&YHPGyMVG?gPxY0kFl@~K~|y;jWKLp_#A{%EIfQVVLc$F zM0I%u_x;u1fO0<*_Xq&bA75NSNxoLmcN`do0h-ey?BJrgXIeDn6}5Q1a+z#$lwq#1eRzLQva@@beQGs+Ljyynn*j4sMMGtJ^t%0NpR79MyA z?bRD_y4@_m5?p4$6$oHD0drOFW)0?ov|FGLA~~+;x<+%s711;-Ja!h1BPXI}iwa7u2rG(&0w*^brU@<+Kzm-rr zz4g}DvGMt*IQ-mqGi}R^#uQebe+foT7J?{7=S~wJl0`<9+4+FM2?KR{D;>WN(sgm= zoj0;s9RkQZv3xSyDu(JhHa`Cp+;y@1#2HY^cAu4$C{546v@BFAmApX*!9}LU+U~Du zPSrJm;C=u?C`rUlLI_TrIg3)IjIYn1$Eep$#CRz}kT|aKH6fYn)6EjDyn7zCg$3OI zofl!&YSDcY+()m~gstnSgy!87i5p>&15KrsL4d}}LDC zLih55lY}P%!Ckxwv@!#Wa-AZ%B4E0XqtAU0m4#(U!FT)pg<#;?`|n_|v7TSHs!C+Z zn6aE<5fr#O^8EK;&CDghm0G=Qe(@>#&F$dtQcRQM`|xXH-G;=wys=?Ow{7vryOp{xa$kgFFlpj=NGX2(8v{NWa|^yGZYZcx3QO0%RqPc2_(EVb0SEAJ`}UUtu>KW9?j6Y7ZuaoN z%Iw&*%)J5{KA|yI()CDRT5RzoajW0MvBvc7d_f6738cpplL%!D%}W=-3==D7pH9RH zDJ6(ef>Eo(FpYb2C&{T^mr`a5tJ0sDf8Zf>*Kc9-n{4YIMhGM&@W#!{IjdM^7-(L( z2=2Q$c=p*8s1dLS0|?(owN}d=Uj!JFp5_pQfR6FiA_%nI>3QhzBadNvc?G}w$N!8` zua}U}NGb35KIeffrfC@N?BLQnZ{hy$z67IOPJmO_bs@T4)EbRY&vxgBNcU<(6IO!m z>h1#kQ=XoIra%?$Ms6d|&W&s6+`JCLScXZm zJ%85_aZlh15Wa_{lc%uoz{%WRPQC3-G_PIReK@Hg7?l5xh0SAr%yH@mKgw<7Y;SL& zcjeO9>NtO#wFQ8y?G_x)3xgRc<-|O%CJC;Bdne&|{$xb=g#1MW`EM&r_m{9yN++hL z^L+u^^en7#kO(B42M zemCs*z*ytn#=pEf6T-$cs=oiFAHuV3v~OI?%-5(TA zG8q7H9S1!rQLEQO26s0lN@&Ptjgzf}ZHw|R5+IBw>>{}5p)xg%7ygI;5pVxr|0nE} z!@LZczk2~$AOwS*ZG7{_t2q4RS=1MoqwgeyfOC#+yNznC2HiBrMiSq3aO;cDvf_UP zeGc>Dn>*-3v#bQL)r61%W0mt#R2+hbZn3~)XbiX-n+Fy=_vhu=c^vu9_rMGz=S7tG z>Q_Gxz*U}Wy6=yFdB;5jDY5v-<0wr{=Ze1D*RNsq!*_S90%Duv^RYDSZh2|;`>OK` zIDF=r+;bgu+PM7YtMJ|YesInmbU`ncz!_05-o&MO@Js;8j>S9Hv3 zbfeqFdVf%yIYD4O&VrBEv*Qm_Rqq4A+`8&^b(d%}hLt^Lh#Y8%l5Ww?%I6lvn%uqt1Yx#u} zQgEz1{vgp;F>6B(}fD9`Jk3IVWbj!;0`tn^D zU;XA6=x(kD6(*@;av{f0a^oD6rNohQPh8MQj9A+i@^ zyu)0_!LMKaHCESdPo)3ZY}LvIr27R|lZts<2wc3qGnsOA?7^NvNSMbLG55dx1m*+F zX#Mi{_4k;72TBS~ zP1g&Hyy}9ikAx7kgD7_%zNbi?F`O8ybE00mGv^6`>GiNVvJi8RJ;AZ3p3MX(@%AR0 zm)=bsJ`UDWNr_R}AVXsB@Ny2kQ(m>k^uv!0H@^Z%k|ZsnYVC6K7cUWaTK!PcopGg& zB|Ief;5aHX1u2wb?&&X3onIWu>{w&i{_wrD`tBg{T?m3GCWzw9NSSgJUIxgrSW5K< z=f3(4O7-!5(KF>Z?5^JCgO~r2pxMk6+dgb~>YO4oYYY#4sSkZy+LVW5}};^04o)N)cpAiUt(@6H`0eb z3|wWEHd=#Mt+Dvj=TN@i7ip72Bjw#&OMLwE7m0%)Ra!l8GqE;^G zN<|NJez{sjciOqtf;!O|LA{iGr-aP@VhdiaI+FWE2$Cq|%^&}WjVm7`9A^YbNs+(U zi99O-oiM(z$c5)$$n-9hN-;h$fjIb?wf*Z8xy#=>Z@t0a{?-3kfMpC+JcqHeM^Q&n zOR^Ax_1z9TouIJArQ#i8T&)fA#1v!y%^$HV6M|+Nx9a119$vMA+UVd~LHyBeR1l*t zufPW@*lq}}N(YIf?%AD2h}7$?7bhddA4dg8^Ns3#@8Fe8E25wn$3FoCQBs&uH^5Z2 zgj*2!wtE0p5%;^^2@2E2ni(roulU7O0`@^xQBlNZH!6f9CWPR@i3!F$m%S|Gq!o-j z5o;}Oxy;4y{%gwP6Z`u`2$G=7>KnhKdE?qhrJO}z92YCIBlfN}C=SfO)*_^0{QLvV zJo-cmcn&DhcUEq(^vjp}QPl%rz@{{ZdjVP2TBPGJ^Vn0=PoEztG&5ny#@nwFWN@Jc z&`T1!VfJRmQ3}`1u2wJA8=QXb%Ty+(_EB1t9{=nA@;~j5G9Ec)0Apppu=JqZqvdzM zi-4m9AKuz74EWVNkBaAJPjZPt%r|iU$M3VYwLxoVHx;?-t4m8Mu|iO(RIylGAt@^t z&kE{|I`&7uN38A=zjFgycJHyzL}~#PC&i>QtmVXHtxz4aqE3})!*(aUZ%@0yeNNZP zg#oN|M_pW>?e;=?i7q6HRrOuw8kIl1C>Ck8W3w9-lE!zXqzVPM;@38US?{mRu zH;i)D7=e>B2TR9c>Y>MJoV~E$A6KM;n`^)MMQ$~JcnHW+O5x|shyGZdv(LYf8dC4w z^hrtBZu9!z{71r0J5xLIC?LyP%hd4`eCFHVLnrab0^DA{$?~uNDYJ6eN|^%Y41Spy zqztX)?}q?uU@_>R#%C%&uz;&P&P<=fcRW7(#N$Zi+8!L~i6NccIDwSL_8>8BwIGZ@kW> zU%is6O>h{wI`2M(RLnl`AXBH$j*72YOTE!RIrlCiD5d1(pZ$pC8`p4@lW7NZFRkLa zlzpeLMP*Q|algiOQVMoDVeaH`lw-{IP+7iv7Syo`%>VEmZZEH}xxS9p8r`4F2EK=b z)NB|8L^>fzLb^#rI}Ff|9;f-alO&51_?K4U9yGgz5Ol&~q5u}~9Yw_}u3(|a!;%)J zn1aw>#d8ZwZ5N6p`;&N>voXE*=nj-UcNkGDB3e|`tvXVqT1*9*N{8AoQ7YZ3I9Do_ z1{e{!mh`r_sm{((nV1~CF298GOSEp?7)_(~E9mp0SXKxmHq!>Cb9;r_!Z94bG`fkK zUqpuiy{*m6K9@qG57AD{O37Peh}up3iOIC^?7%t4PMxE-u}TtjN5-1lpOCXO1Z`hV zNFCguSWD9Dv3qNYsWa!0O6~K(bzGN)2OgxmvrW+4>08z9PZQ>OnGV(+%cy-&u)E9l z$}LVj^l-np?#_AqdV`5`7wD|6VEX*%VFRSmguQ?yiqLyn5=BHw0@iYMySdMA$Qpxc z%v63*cFQb|AE)f35A?}LAGxJECp$&Q;W}61kQZ&{;={~7 z^cWd}Tqwt-F+Pq|PNo5^8R~D0Hl-9&?6>LBQG`k2G(?;=2@64UZIyR_{t{7;orXHJ za?NI!;96s-&CGD|Yu`j491K!n!XDCSk{}@I?Qe0fM;!Lje;#Niium}_CH~>>{}#{l z3z=kVWxucmW#HLdOe9ROvfU|cAr?Sm&!oNg8OoE>sQ>QUZ0>BazP?Tp$He_=SlNGW zuIC|@!gXCd-^Wo7uImyf3B4#}tG$bEhfK8u>eBK(0j$JWx=~!ry;>-H4kfp^f`vi> zmMsuq^{E9#d1e-UNC81X=H0P2c#bOUUO!PA>K+fJ1ieTX62*#*rtWzuIM}nX%;I86 z$6@{5-!uRCXZqsJ2eKiJ22ra?)M}1qM669c1qb#vdzvwZIEv|pA-y;rX&YCs&{#Z) zU#Se|(sZ%6lqROwxwS;t?O+fXYxemB4p)tgHFW! zpC#DbAnvqB)@pZHFl9y%PwI$Z(&ceTG*7QH3482Zzslt4GdP|^K{ z{%Ef6wnwN5&O~jJ#m0$Yd9CPw(cNsdjMnsaclL)B`vRi=SiNs}IZC{4F5l#%mwr0h zNqwqRqO+?ahMhZzf(eEZC8ITy4?M)oBcC~->t+#-OR%IonZ^09zs_dTC1`ika_l`sOQjT!=i)kU{~b(UWNU4z)@%%&B%dah#tCsoDo}(G*WP@M2fz6IK35J4IOPgw zzxFMz{L??uy1kN_M#~!zmTZ6^m11Y<2G&{@pZ+|K?~lkU%|H7E)?WK9o!iR?D*Y^F zFP*=-8P)M=?+?SA2aP!@FMy!Jlvu%_8 z3Q9ea`H|>2=A9RR#v@<-I^*;6!*$;pgX5Pt`IWD;_WL(!E?rNfnghH6lpTji8=?$3 zBy9{inNQ&t`T58r$0QLIuJIV#bR-jv0|q<)1#cYm%}2xgynipunCMp{eK zSzG1iD=(!8QSLS3?1#ML7@ZTjNllXX8eodP>U)pb$3IKs+=C;8cA*r#jWssj{2fud zJpvpBf_5(?%GkZ6-dGC9aS&M*gY^dIU-%|ob!^{xt+jaN3cvc_{{x-P%}fINVO0_7 z4kJ6{>UbVce&_qtCa3mkiVOzG+FP%&do^40$|xtdx~_L}fP!VVTG^jou@-fFit2y=r>q6L?5uAR^(SwwHAW}INgBmcO5yn> z9HmgoNeQV^5{D7ZsDm_unW#*AYa4%hoVow)H}?dvVr|&!1i7h$dj$!#l1t-0iWaP~ z7$cae@8Bp+xg;ogmZgm`T7f$>aX-qDm_7%qFxw-T8LJea0|)g=M7b0(QI1g3^4_&N zv35X!;~ec9I#EnJj0*v#7C1Ihqv918u}cah>S<$Xb)&*kh3Ch|nL4nU)V(m1`vkD? z_>-Le(pN~r-bj>d_r^7D{_>?vk5^+Yy+r3;cM!$d^Sv>gdg4jWKK*Rw!0her@c!TZ zHP)DH%FAIv5-W0pCe^7KPJQ_+D9;}$)-rL->Z`w|yS|$F_uVMYO|ZBj{EVSGm{^+5An7ti)6L zx3I~pQ7sp?6HZ@F3X5*U+OX3J3*jUII8ssb5A zghD`Lrb2b1#0%e@;*n>kIC0A3_;H7xt{_|wVJ%T~wCIi!f>@jTHVfW6mTM*NzWdG? zL1S#2iAuyn&(3n;p&DQO#w1#lnVIw1T#HB&d(YrfAc*pO>5hN`9VLt9*A>Xck|H$% zF66xxf>3K_D*M5+kTTVq$^t^$Ta?DfDUVO=+r(RADAgP2IHtR?mMLpsvANMaN6O5i z3?T&DE4OIOFHmWWkE8+|zeKq)PILLz$Yy&OfH-Vo$oO1HNzw~wtt?YtJTVd+5K>Y< zd77;c-p!nU(li>mM00EHsO6dvBw>%%$};08PK_lQpAi56AOJ~3K~zMlgb+05=25Q8 z=F*K^T2WTSS?u|LgNR(cQo?r~94zhI%f#(nrq5pltNZJFnvSi`&Hto3$1|fuCP~=({TqZk+nF67#7So4Y5?e5*U2Tr zU;NI$qMR}4rQ>k_&`GxCOX7OD3$ihq zTiaXghT(muL@ZG99DLU)Y(X!Qdj)BFaHkU%lK!zk*>&*uROr|+q4i%r$8y8c+TJEk z5(KFqrq(+3JX8+8U!q#8;kh14sWh@>4ZScVGzmsprn?@S%eM*pp?6~}_0Zzn1Hg*3 zCX97q0M&OC{!svy0I38gAE+~XqQam4F2=P~yKDMB!I>;#QdXV|%V8TygJ!6i!}aFxRJ-Egk$ zwD$GAwRR7{5&|nFRw~X;jgRgOvAEcw2GI~18iOj87(e#_GmkyFUrVDuKsu`{-2BB$ z+1`PDaFrO78@b9VFSXX<*T-3S<~iJQ6~P^X+~B%)K75bX^(&d+E7m%pG(Z z{r+H@yZA6uXU?aQxB~;awYJKQx86vV+R3VN$RG38=0~q8^#*62dYWn@jhNke$m#i3 zew!L&%f8U%-j>+(eyvV02bwhro9#ANwzlru%y}>_DkZPb%Bv!ySJql~IuTK93Oi?` zrUy#36Ug;rzCPj`6mTo1pbaLPVP7<%ov&rK6|2@;?e7YDEgeO$U9nGps4l+Sa|`gB${ zD3u)AErpd8W@gLO+-)WsAxRjsFfUk~+GS=u#Pex3i6MT_(?*9UA@a zZPmGXT1(f`Xvm(wl~UkHk&ewI zL$`L(?Iw;=I8qLqk`g5(l9U@X(gvXFK=ro(dK>FFo=0tFcHg}UA@HhI#^x5-xwV9j zqY;qhIx08XI3S82tS%fBjx}#BF}84Q#C8TLDNW6i^a8@2?U8kK0CD)F*5QU0*M(Jlk~?G~m#+u_S!ALqfd z9_JpcpgjlSHjs`-wA&%vZqnJ_q0{Wr+D)*DM#W8hyMr;3R^ShULI1n}%RzZdCmz+B95p-juSHoyadwG*2aY&*rQD?4^gs*0SRC8r z^lS&E1fCo84cOHI&>`p*R82T=lo%^}f3TjKj*^6l=1{HVdjOO@V>mfcA1dohA&^S; z?acO5I;2u`H`f_kI7Ve+ih)<&Fm=@T*X^#Y?2C2`)*eqO+P!F$LUUM3PYA-GORu@h z+`03aL5Q)%lXNy#iQ27^33H&cc!)_zfBhZ(puM_+5R$QlkNu@M$`R=f~+{Ay?UF<zsFAajgge`;zV-SD zvK}Jy9HCZAs(W)~XNPumX*4rMDB^5J$VjKd4hhcrSgAlMdt~ot#2;v@- z;~{HX<+K8G@Qw&UJB-o@!hwbRURz2TuxXm#bMEXq4{26>^6zMCNVFYU1CG+tYfYm; z2iJ$Av@p>m#xh^64(DMh(`s`aA0TXtG}XU*{Tfpj9>mE=6_%%Fh&wI9=5FR3=_pAz zN^%83^XAr|)dCBR*||~5ia=OzyiWc2DbxX}BI$Zm7mg9NTJ*NJMu6;QBB$Wvo8ZvC4J1{0~23XX$#b-`6MV{Mu~p zlV7WI?i+vH_kcQJZ(uYV@4Q9x#J$Xsu<^7sVjzw)(A@i*nVyz#@o zX8YF7qk*d&o`N-ov8idE_@i%U^0G`Ev-;L+1bv;55in^jkB+cbXjUP3j;*H zt0?^eN3Vo{jol!(O7%$htQ`E2XD-kRc1j9GUy8v|D91q}5wXUJ46+@=S{HqFhj_hB zk{C*EnNl;R*A1X=WGVzWLNRx3m&Wb(J?T{>#;|k9nE$i@mN9}8GrKIzg#5{O>wNi( zH5{*m?@LHZ*u*0a0({d213@UL)D@M<3N{847PW#&faI7 z7@NzjJW9$tF_uQzAJPvFYX{RUwegtmeyhwx9WI=&P;(4XXAF@TWYne_Zxb8E?oLGG z^b}(Y<8+rhsMt{UEMZS$U5{JsHeOjGtYvaMW_`PcQYnANaTL8MPUq_T1XzO>C5DNy za$)iwLP)gH6ePull7b{Lg-O74;+Tr-Qr(jtQjXK7QP>dxV040xdQ4roIKtPGQsOrz z*tv2!6LhHl!XD?$&Gbp}S;xkW>&%=!Gt|f04**=o78YsUTFNwrzMDB96J!Cw_9i+E z8CyI)BE95QYt)Y&XXEmvOs?}lKPr!tW&6byBXejJvGL*iskdKad?Xs8N@Xf@3zVv3 z)aDnd&MgdEZSEM8izlegE--QI1mnk!?`yTW1sV&BG>#o-Y<_Xr>I=uIPR*i&fZ87Z znd)2rIF8HYxeNHdPrSO47Q!iorxcgBnrTW_O0+c?EKXkJB-T0&r)4bqeznHa-~ZS6 z)!Ik|32XWI=P$B*^G5CiJqoxQlyaW>(pNGgQwYKKtzW&u_VTR}a5fM}vw4D{g8|(aoE+&TrFin&-_7-xYA#))dE+Y5 z&8`mYMG09vVJQSXo$&GYcA;d}itiR`pHifNwh+(_6M{G?3{W~k;5*J}zF)w2&u|5c zClyL6giK3!jkP$Ai!ml8llIfXdNagn0d44vdpOETtuLj((UQ6AyUc#Ph5r9p;8P$l zmJ#`uK?K-!3=bUNq3p%{xBtZ~+A6wsg7qaAzq)`Bmhtc^GTFwuY2V%ILc1GLpP0a{ zmvJ^VDvB`OF5z~UMk!)^(m@N&VyDgePMNJ8CwEsa?VZ$marbTSDQak}=8;nyOinnQ zUKr!t1)p}{V)O(PPLFcuV-lsXLQ#&E+3roye*ZRlu8I&La|;!wV-IvhFA!*40v#bd zLEVWtdvceLuZ<(6#bT+Jd^%xN7?6$=O{*JGEf@1n%RcbXx;XjKYT2RLDaMH*(wgN~ zi|Ix^^_pc+{U?cgz057}?$Q#QAAQK=nR6rSLV046W6wOt@^5~T0a{Y~uq3D2HRb9` zOh#p(a$SD^(;xHXpL~x>qcLLbQl6aR+&8{WxU-26GH3I1$T*ke(nTDww{l7=jg#xH}if&{{G7x)WEH+B;l*|O?S6_aS(_i{3b#5;%+oP!sW zT1~{n$*A$6j$`Vxb3FddKOO~FeekvPyI-?)_2YeiYx|4(oz4;YtF+yp3myQJ()a|& zKleraT5Tj%rd*fZ8`s#m(&t=dq~AJWoLkb8pG%fMa{*H{Pq4Qj`qCqgpUQ$*q3BtI)TuaMgyquSzK%=|=v0Pk z1sn&eL0VuDNQIFez0GATmZoFTqD*<>7(%&tag!O*p?4*ub4^gMmYA9KiJ~4NQEYb% zA8f^#*is*do#3CB8zlN^){?94ima`qVXD?6GJ-EYQ^mFg>r3MxU8FP+YeF+dM;P47 zIHrD_ndk=L+BU6L2Y;$TvlFwnw93X#k9Hz(J)hgVJ&b|v4V5lpdw^}N?6J|3g@H01rT+Sdy@9ng#_c!Qtc>QnxnlJzR|2+M^gAt|1 zIMtcibdz?3CncpsWm^2C1vzCeR`OVkv@2nh;#iu_<IUUT<^~>a^K>?``U3Z)CS1fKC*VBqq}iM*y{wpACY9 zpnmc+)8{Uv(Yk{vSii)zpZ;yid&?j+hOxoqfJrF??IdEg)xI)6J$S z?uvHk+8ARsi6fa>YBGIw2kjj#auvq9FqmqG&*iX409Tl?~#!Mcm${8zk1JHLZgZ3f|RUo8M=w4w>pK8`^Akbo_lDN{$8JT(4RMpDu9uP$PwHR;ExMR75bjX zE3f{BGmkz&V`5?-fN)(mZ+F>`BFW)%7|sDn%;dw5)7#plv%It~^J1-~>bXqSDy+9U znE*~ofirzU>AmH~u`w5SH?dwS8jOcPjy&l$ev*nFGX;Y>(R_a{3%-|W?5sHqX zacq&r&wQ4Zx8KOla(Id$P7S;d-g06r7K4}Zy;3Pw-g+IZW$MC%BVaWx5VBM%6^>H* zptVNzEATU4hODT7wNw`t@f+V_<<~F62iNw4N+D3QmC_IPf;EffM7=t4qJ;-8^6*z) z!1eu+Sw?w2*MI&qT1(f4Wt@B4fUKVDy(<_obR0Atg7+3B%mzOx5>t zWf7$7viP|#;g+kTI$N&Gtyf;Ay>cs)XQquMiu3s=2Fs<*Ey6e{Btm4YrC#+>s@SN4 z6tci`3AWk+K~$Wvvk-!bYUR*$qn}u6VZwMTWOloo?rI`UtK>59h!MjOf0`yPl`Cxe zA+AtNu5?)Za0`_jeL)K1gg7Zql0r#I$x-=>xU?8QCeViCGlHevgebQ3f{>sa62%6u z>{Ief#9J+rPCze6xZN_e0!uS;+3mvW?Ja`X(oJGwqq(vgvfY6XmMquSEheZQIwr%S z#5ebb{qItMQ)`E=PB=MlXmvC-PmzQHyP-#-9lD)}_GS|ji&t{MK)f4}7|HdfWpgKF zrKyOF!+KlO4kb6X5~47s)mF4O>qtH7@#(t`JDpx3DR4nraaF7MnH5(@eix-IbUY5C z=0%8)3Lyx4JzC8skALQ~X~trYci=D!v$uUhNM1;Z@;o{#H%BuhK*@E`#-{UeW{N92 z)h&dey}gBw6XwpI8_DXVsX&tt8tx)1k;k7N%&8``4PP7!rFbT-#B$JIa+EQ<>} z=vF6(AJSU6g;%LjK489`QUVNGC#mgNhFsA;uB4ENeJz!lko}Y)LL!yA(`4F&6vOWu z;tKAotvkRB1{w=a_%;8A^?bk%|q3AlO`|xs*@hPjvonP5?V`NV69fqIor#)SZIC zRgtMdfGE+lf?}grLV)M0L&r9xTqV_iAoH7D08VXmX_g(eo-bZ&taq`dV?-#{z>!!gq72ZA@Ac1bMi6<@NwK`Ht#)XR~J!0h(1_7~# zwE%1{CfMp?Ey%8e5r)VH{iwPii4@UJow(;@lfd?Xp`vd&>~GTSU5yP(uRF%8OIvh} z<*oG&&tG(?R#qvMC+T#$XrqYMLrzr37_0i2swLQNVv-muEajv{5Gtxl@ZL@dW2!V; zF>%+$Ny@nZq2#LKDky>NRzPXeDU91C09VPvbh`jbo+3(2A?Z=26d!%~KEHkCpLptX zUl`It2Hv2#5urR|JZl*{d7AF+TkKr^AagT5Ggcu?lHnLTIL}BaGUpi~1j`@1$K>K7 z(QB3CKry{{V&uNG)&yaX)~y@#c6aiEj+y?CgU9GQF0Qa_UB5za zcXy8xykY$085TbKxisK&;H2e+<3z0{-L>1pzi})%r1SoTFFg1V4}bM*nc&JA!}4pt zp|yw5ZucO2+XowYvyzbX%U(x+K{^hLPk({hvE!qILkNPcO|HH2@(96f2(FS;NHlL^ za2=T&^7Y2*oOt%Refjjg_uRU6h0V8L!zq<;O63u-6GSn-RJl92TFK9T7qzB->I_pC z9zw^_NO^GFZgTS%FCvV|4Bw`O2_|=9GXmbZy`H9Ui%OIEs&KuWB4r+g5cJ|0ZFFJh zv=%0+<$Ipc2S7;+L9M5$_Y#DKmM3X@l5W|eR6y*x%q{OyZbq2<1h0`c1@|Y1hTt8c zSac_`R&e=x4<(^DWhuKBd_iCYcB4(b-DS5OvbxnKF&4)IlL&}*F-Gv~)hZqlo;FBf z`0%oaDj65^XqC>H?LZU9(A|t#-zrlx<4C~Gc>+QR%DzX`2?~>43Bm|%Y@wSd zRWQJk5`0(Ei*#Xg#_xXp3m$mzp|sFu@Z5zM0UU$>A2xT>VuP94kNvb^2QHewb6D^gyZI4~ZQFy!?g|2<#)w|_yU(a2mYo9k=b{QcXhoIz$q zKZk(KoOteegi>r@`6%=B^|C`d%=Qhn zSQ2dJTIKjY*MIpECqDN@#!sIex#uK_@x~{){r)?2)^3j$#o08o74{VpviQ+so=eH| zMr?a_Z{DD@cAJyWe~s$w{GAHYeo>8Et5Y_HUO###9-eND^zRoIXTe&IKl(W5pZQ$o z#G>Pvl~;ew_SKJuwnjoKs?#$#eyLA{&G);OGCy*K5Y&&KV&d$DePC}8a*cZdAO7Tr z^qRYAIB(DISRmAzFw(i}fTvQGTYCV2Sev?OpZNS2sm(29+9gP136_^qDSf3VH75E| zEIYgmZB1@uMmY*cs$5W8nVZY}UTX{+Z@lW}yDfc92OR9Ngcf%}ttNRGdVC zrx>evg)U+OQ79lV)^dBh$!@1OsRCmyC#J^>yUszXTv>=+Md&MPtq6Uei&|m~D?9DN zuG3nmm%Y2zgwi4bY492yP%+15#&DFNUbXlxD3PFu2@{L3kR;IU3A7QsdZmghHOfYS z!Ea51u%BFk++QF!yFp=IlY>QWs#eN2t36~ahc*T)sL!_XeM=a_^mvSvf^wxqwd~RA zB$PbMPA6olW{46)uV;y3Sl>yjzVyao|NakM5(%Q1+uN;7-sh3Vy0I)w))^lw6@FC#QsthIXi5+DEimE3HPwTHi1L+{{$ znD?H)o4@b?7ryYN+;{Qz+pn|v;rp3bzyjSU%BArrCG!IU)-wP2lT4m}a0FzfT3Rv7 zZ~Ts(>sL@2mG+5A=|g#iKvmbJUIpPQfJ)ZrojLI?e!^h=vB_$Q^`MZNa zEpGyFl*%OzrX7>NOK#t~!OANy=T81x-GFXRI@DE?V(+}(;| z&le?{8|yp$YLSAjQA!r48U@P$+|i&BmitNz4$jx=MeKA7)WEXPsQCA68>7(}QnIuV zV9H$r6;Q9h?ATx>2dyFKr7{q^H>VLY6%9;Zje7t#p8~)VLNHPB)6~Y15L!QVFF=$! zXcgmHA77Pdbqt-#7LJ6P*B=W(1#2Wp&&L{p!`<<}Vy#)*ZD&RWjvgTrJa~MzP(Wmi z9cnBVb!cO0c8Zg#z*-)kouTIKuS|EP7@;u?zEgQVC%*7ys&n%rYlu*a*0qmW`Ryxd zRbd9m*=Tj?<#0tUY1Lb%o|Mrvrf2!;zyHq&JDt&I=s3LdqrYS8=8ar>$)O!QJsHmc03ZNKL_t)ZVEoKEgp~ULmgs-Cn%P5g zAN=7r|KvNIefnAMFw^g_&ZU(2r4&TDl?q;^iaTiK3d-}4j*D`$o9p{{zMuO!N+Fap zN=)m6tM~ryuL-s{vx(`}rqwxz>_WX9Kwxyj!egId?AT&vzFG)DsZ>cLW?3Z1PYjEH zGPpYIMPGU4Ws)$+ROszS3GH4)c0r<`6UE%vZRWbUALZ~|Nu^Y9^h$`r`B%H$klk)j zAjq)PN`9esKnDR<5nUiiO^=H-c?Kvs&OL)_iA13gRwAs#L=L^4Antm!n;yH{X>0Cy zwA&80IgS({hc%Ysp2txTCxu2_gb-9*=ja;>+rJYlAoh__85?=%$U$0#jT{I|xZQE+ zj$xxx`g>L(QTKG6QIZtO!!jn_6qkLsuyaZwQe*o9-ytbdaBd0$*0%3eI9scx)w2WZ zG9geSgLfsD0y^#*RaoLQtasAzBZqTF|Su+EJ>_f)Sd>~@(ueFl>u zp)_~lLAF%3MEPrE*i&rY{KVAKX;-KB|D}`Yaz5Uj7E zqfto>rw?RXLAKn+Kqe(`Z11eDqFk5p`S}c8N5jI!huOY$lU}Qt9m)EH$wK7(ju3*N zxr=lZ<8uq6>$tU)C#Kk4x{l7UX4@;_kyZ7V_IWCYF(3*I&84Me^XkX=^>NCXAj_e? zut;ZPeHh)_7bCH$X!L;6bnwTLN=UdFk$Woy&E=a|Dfwu9Ys9W91z6UiTsM{AFIRZ% z;seElD=Be3FXb*BXm*dsRMrEJgMg2J{vumfKN=yO4La+n;L2Ld*!(e0JoEYNfg>g5 zN|kb@ia1!hnbDMT&`C^pcZaywCGG`~BqU*vq!)}dYYftJGwmvb7zWig28f z2&e_xVMNpi!&&{;i6XA=se~vZf-_e0@tk5)c>+;5Xz4{UD_gC?bbKsn)nv6)ybffwD6tYEjAh$Cc4lobR9{>a|-6p7eDTml61qk&=j^dhDNnq=(UPZ z0bmUj{EJEt3n6Gl5!012o>Kdy1M@WDgrjKRy2<$2b7@-2j>;OTa+%)k<-T{`{yny% zB-W+{Dp|TlvM*`mNI9h244MRzUcmU=9Byf}+SD3DxzS*EWtk)c;E6l4apuop4KV#+ z$icR|wn}wkg6jChFt{-AD0WIE>L*UpTD?u!ZbP33J!nD*JjcP43Qx+R1V(QdsN|g%M!hia2|8!sI(JlG+1+J8oIIhdm zyYGz7gcc@`pUkfEvKFUQ;>yb}vhvOwnMAb|L?nljyFJIrv|X{rP^vdL`P}pPWA%}o zxpZANFJB_s*~)bzkF`PDz27ZJqL857N`=Tgw;$RZwM$5P0T;gg{SlSl0kG??ud@E; ztHj+-=6#28(w85&L$Kcm29)CMwKak`E^J~{QZiom3onD;t9D+<`J~{++77LtSaSPh zt-@H@FC1PJ9l=skaAUJs_%$}l{yh=B?-pAX&1VY|O)HEFy-d$hOje55d=o<5#qZqP zX65GQPGNqGgJYsrVSaL~u*jh3&!25PJ4I5le*{e#O%zz_w=yD zgEfZo^bBXe^<9z-k!pa}<@ae{`7mcA3u~yeaiE>@$(ni{OA&{pRN7UjUu!$xfCYfb#iSEO7(HhzVOY|UgzM$ zkdn^YDjOfX)Aynp?PzUnpX-s`0iKkYl231Bv#;=->p zH83vzUhMt$gVUG6@7$pj4`&*&44$s zT`4ruDDYfG5G94ZpY14Oxz*-Wqdw%a4kItwJ3P9Z8!Z3!SIj;23?^fJ8@uo@(asjp z=6Z%PGfdUWtTk;WH_2K{q;)1QNhn3oZ1Ta2KjV>aeS2ixwbn9o<{Z1XZ?kgg{UdLP z5u=VFLP+8;bd8+^720rHg`wYH<4P1*&H6BrxbM` zn!SvI25Y(Y`fK!BZO%UX`F#M-_8n)YA9x7mdfa;B)zNjozd02~5L=Te;n0m@Dp?>) z2uvK)xxGSd;TX#EapumR!>f#H`lQ6Q9p3ue|CkAW_Dwp6Oniq`9yDg>c$*epO zQnK>K@7TC}DHEj+JQKqt-wLGU<_qLmW0-&J38d?0o=Te}zLPku+e|GvD(eFSR$S?=H3;ynoaTd6ytahv^lCptp3^oW-#`n%aEF(dw^ z#+VVJ@BJQ00xJdb`Gygfobvm^I;x-(w|LXtZ*+2Vp8W|Op zUbV)#7rx1dKlx#9gimDnEbi@_ddZ`i6Ukcs;60k_t32^1-y2bq}e zeutFc7?E2T)`?=OIgu=rM6_3KQJ$JXJ$U}y4-R(F6Axdcv%ST8|L|j?Aio0Ze!$h_ z;&C4T)^~DrIRslDzR%jbZ|6rSl7!wNles!%F%(j9{OQk8KYlVBycxsFo3GJazL`lZ zr~mzV_b-H?=D9h(Mi#GH<=E4o$E{SdC-QEG+rRzgF!Fcs-oqrJ6XZu{93{E3y2UxOTX$Bz#OB=g|rkw`SP}gxtv_YG@Z^l|$K}a`@2%>nTg^8vYYkF}~ zOzXcJQJf5cMiEVGLy%}XVN55=Zi%tPiMh9COg~k0Z!OYk-wMG9k7Y2=d>Wg9!ufKC zEF^zOhqjiI=Th;#g5Q6Ua&QaoQ*9{JmM2Iw*1}}Dbk~tvlO%+@JJe5{%FINlQW@#_ zgzL96Kd<;+YImix?_;ou6gi%@VW&-He1g(gee`)I2@4NiWaZKa#JwPg^!~}u?x0N3 zuqj1%XPcQ*r;(1kU+vvml;<&i>I}O#moQN;waeT4_kAI9kqgXI-dUVMFA`D`b-QdY z-(=?WSzO;w^&|VdHDN7{#S?&~y}pJuCX;wSu=KHe0IliI>AfVCMe?0AOLk?a)vsL> zU<^^ag*tok#19TmAmTuq%g#l^ zRBt5GnqC~|K7B_?{6oaaCeNN{=HkPd;7TgR=0}&2K9lOaSK;CM#*bI6{OM}oSEbjdg7NsO* z&%qd*Np3t!GsdL+I4KVGjk=d6g{0jJX&zEpdDJ6H46R;ByBFPK3yJ!kfcu+H!J17M zf}?N%27o5Fy$6oO_LF;VgLJ!E$&DLD=$M-r^AFur(#QoWIq;+0C9lbS@&o;^o*bDg-=#Bmf# zijk&`9fII}6@20jppkn3%%DZ>HqEs)#%AY1sMM)Ir<*mMXpoB9+%baHWk_O_N)_Uz z6#dG=JM)c{1Ft|aTr*rHkwW$X=%}<)6a)lYTg;t4L%CYTaU5LN#dTejfT@$GP_D=J zt)<~Rc<}yAKOLJ4)~-FDN7`We*|IC!tvfT*Kt15xsXG8m2tg7>*ejRlwVIg(v`+o1JIzv(IFrb*U6POV?R`{nbqS9uOpnA<<@^M$g_K&vAz4s5YaOre~RX;3es_g3(#JQe7hH?CYhPwLJ%Yg*P6S;Mw5Dz-+Rlt?yBbut0{_V zQp(KI*ZVn?6s$Kpg&I5W9e?)+01twT{)8mNy@QfZ04$$Y^hQd_zm((C04<+J1nbj^ zwtX5$qBUbBAJ26P@7JQaSc3)lFw3-iKPhYlJx(?1BiE|>;5%#65pHcznwY{ZS2A@J z-LVF7a~sp^Wd;?>o`dJQl)ceb@?3l`m69mA2S0OgtR?BRnK*MU)tejutbX$=73$M7 zw3lx}9H$_yuk|%-QV?r1;-p~rT%!_VbQ2^5VY^LxW1aDS6mQ=;U{YR`Td5MPE+eqR zdd0ox5K`oFy$8TD%P?CALC|WkySB#c*>fZ7zR{Yo=^096V{9+o7zyeOI9ZOAxehIf zHmPeyd(?k;2(Sj=YW>PbES3+e7(A?mQ=qNRPA?=0^|^VT`tJABn>+{(q$29H`S_)u zWg_L2-JhyldrILu4xUmtQVyFGf=-kWX`Q*FFHcSL&^P`#bFU$!Bx<*~`tyIxEkV`B z5+5>YOCcz`PHsrr8pFA7e;=ch3@r~u_tp(sm)^Y-2{>@2QKAWw!-<<~-42^UQ0OAy zDoM3qVNGi-CExoLq!~0@t?s8n^8K`;0{>DXBA-_D=3f%P8uY`bar{dFSpq?rBuvyQ z1)mqpr_cvdq*aB5$u^K$tOx-UrP4mQVXe&t8P*u$R*S}&bJ>{_&%-8~aC_sB%}pwD znzgYWnhVRlQRX{4!?@kTXq|fdW*q)l9fV+a`DXU@34x;|@geCn7=i`feo zGtcjhHIS~Cdidq2st-VTCdiT!S1EcqAgkAEvbnUxiANsIJb!g+8u$NW@6Ed7IMOV^ zYm2+bhJ6P?f~!c1;-Y<5N~zpbS=CufSI?X?^9SZ(=BZ!joctT}GA}b{w(i=xDlp~#T_|fhn0b}({^*4#d+J= zD*z}|s#qyhb`20fqBJ*yL~nnn z;yIK;-~LG`-w!~RM&wi~7&C&HK$crBWA*+$j68BOWUebDhen`;L~V6h19HqDi_riC zhPg)&LQpLhu`qQT8se<08Z^W0FN#;D%${a!w}*z^$9&5~ z4Go7rM=6E-pItEE zqvrd@P3?>MxweK-E2Yqtu-gvU0Km3*+Y-_~I8YT<3gu9$_=j3{(_y^_u;LxF-BKQ~ zSjqM)ySLd)2m~f1A(b{A%68X6#rH9oN^aP58z6^hKu&dK8Ht`g*gZX=O6zuaFKUZ( zkZv_x_&S2;kkAXDQpS**x`E{2FcN(OO@xIMJ_e5*#p?7ulvb8QU4*QMtWeVdCw9)QlsMmS+KMS>3L8}Ldgd;Fs({RA)%z$@NY^=FaSg;)I5L94Tlhd zbWabGUENShp|qOC;DO0N=zM(&Bq@>UAHd+@qsYz81gUj4Wnf{1ffBlg1=j!lbfLV4 zM;Hx!HF#lh0foiIK!zS<%dC}x(wbwGQs^2Oz@x9dUQYnsET&n@=P>oryQt=J;i6+e z;16XO(2}cXcDQZh&{I#NduUk8fZhM%(;x+p=KZ3c3rPnqZBAix8roG-2xLaa(0$;L z_Ry;>EuehoX59wbJO-{WQ1<-5e!Vs(542d4jN?`=3s1_n$}%uYwYeL2c0dI-^|l|V zN+DOO?t!aa;?L8G{*}APRJ>~d76A(7Duj@2ZMQ-YeqZzb_O=&5(&ni7qOEHqSF2&B zP{g6$o(S7t#wN-0jh@)|5B z(Im$}NC2*`|Ngh|T~`mTBBTaNuBVkFP)cF&&|wTr9t;3j6To9AFE3*G<~2~pwclt; z9?A*PikU(wIK6!sIrn7neLBsno8LqFzLq_!Nd?E^Yqu9xj~HpZf3aA^{X(Iw;EEt{ zY^O17{EV_#p1V@0v|amZHy)~S0jxdX_Mjhj6CjFf?k?s^813t7t67iK_qTTXP$~q; z>1|HiYAOVPnPL%r$pkW%^&pK-gWb^lO=Wc%%U8d{(CKp^n*_WS6nLf!Lod7rhX6d& zt&Mhfk_r8qR0^J}&t$-CM@u*`%fkLApT^SEP57Z%Kok<3qU=d6$TR7>DFAoA_!Qi+ zF?#%D$oDCv#`eLoEI5unYlu>S6#8g>#u;qKS?eRU>5r9C@HH+;iLNf3eC>5y`u&?I zE-y9pK_ftbcmzWD2*Z=Ul;Atzcy(U&jY;;*-~K%^{R41oZZo)H4D(-q0r;Lax0#X( z%D{A#T^}{gElMecv7?XR@t?l|ZuoWH z?tKT~boGS#o)OBhbm3jN`K;bFsRI2a-DXtteOz8xY`gCQXF)EgI5uXB$HUyrujbp9 zcW|$Cj&a)qSP$05ZUV7Eri8Ax>z`U}23U>5IOEu;d6l+4x8nO)D3y@x?%psbgi$zF zAvb*w-IIrr=<5$(YpD#FlYnLG6M$3O0XIZ*QqR-qOh%VfUq4R%{FnIt?SF4lf^U?h z#ZmQqNVUCna`nA;z$_cXhmV9NhjweVfTVC7!(6_vA!nj6rfO2TL}pkg2mW|$|*r2k;J)Q{t7Ia zL8(}V=X&rwf33PT7c-xHgwpJEcu43v8?sK0z?XHQuQ2p11QMAHp7`ZoYQdH8Jbe4R ze*@+E30n2dO28@GLQ*rqm6Yh7JdDB9XT!l2W2nsBg_~Oe(FkqII^C;XK!o6azJRJ| z@2!jga5zH@Ry^>!&PlrurhK`&%gii)-r@dxC45fors4^KY%!jIk~sW6IVb2&*==1T zfxu)AIoI6+b57vbDwzBF3kbKS1!11=8cp1uTQdfJS+>3HOOcWiLx+yw@bfQe$G34# zn1+mjLQCQ?Wvlh*)Qy0$y1G@ks`-yzx6tp%&L zZEI5rvaxjX*BcLYg&{*KghsfcZcyxW8b@Aw6`B6Qa0IIqRxW>q()5%zgQ-+XYnE#W zeHI#Go16dE_t7&tipSshrAC>Sz%7+<^}Ro!TF@uMtqB2N>iw<~oS`R~2v1=kC7kXa zj6D9dW>Qdi`5ach{6ueKuCrGr5LER%TwYj!YY;u%-sVP-ajf;HX^1PDGA=eRE^*Yjij)eJl30?T6GCEWQ{G=QB#NRH4*j*v{pF zSr(S>PN92vByd6xX{+!1YXYgpXRDAsma%%^LGUhG7iL{wgJ*Lnf>0)n+ct&{9YTI# z0p-<|P#7v0v$V;yxGdLV>H|89RUtUD%{+;cCD+JDK z`D(b?PAP?CcQ;PG`Z_ZG{n~GsyK)(`SHIITM?xvo3`*FH5)7o0+Eh5yvM~PKOW>(= zxZjnO$Y1>yeyOOR-1TZ$S@?Qx9xK&qnb!B=Eje zk=Yf(ieIZCH#>{2p@M34j2auNYh;tZ7YwaP3G$}LdF>i>TmmHaAJ@7+N) zyMp5K5-KapD6cM~w6fGx%PY$$EiJ;%bglK*12I$yYFQXK5D2B_7ZySn#GPDWZ7wwQ zE%|!pN=T_^uIe3WT5-pJ{4=C_`$IPg$}P-&{2nR`vs!Sa4B#qgc%Wpi+k_}%IC$n9 zdPYXH6Ke6+4cz|h6YYeQN}=NU#)UMTPV4hC`aZ^GII}=+36soWXP11 zQo@U1uktk)vxP!isdNP(X)|p^QMZ?xh}v4q})gQ4U`kYx(IQBq*# z##QtjJOpcVRAIeTt5tArHAS;EisuP1&O;;qf^(6B5E|}lLO61;LL)G}l<1_c6Fn5`*Pmou@D$JKZKfYWdM5>6@|iZ5!V67GEX9&-1l znt}t?V+c_PdI3O^O^b{WrTyDf{{SYQd=8o6<^vCvln3ug{d3JUiqe;!7;oDAz_j* zE7pRQoF zBKn&DT%vpbL5!SxO6#;vlmZGlh+0Ln>=Y)RdcOWI;fk`gY7PJEfBv75OeEUAaSo*u zv24l~XKhcf0R*W#rslJ;TlEB1%eA&M zhDpxx#ON>*b<9CSbE3U=ir)@SsC7IQGhGfzFg>Wm~olFT1E0?ofaG`S;(TS}ZgVbMR2Oo@L1hJbS#(T6G!;A_L7L1~azQ>{Bj z;{rj95@eE2EaovGHk)05?$plTMM-NxAPrO6mJWa4#kRyoB1Afa+^sB@G31P*-P3~r zaHT}mkLSX$QmnT9VnzTQ>+i#4cURL`MD5mnr_Lh1|DbNOgF8Qi;-#d%Be)`jz+rmup@hKjV`q^b84FGK6Xf1Yz_#ts_b3HeHaBkCmSy3q z&o1K1rEl8q1Hu_Wg2%M^@_2Nwd?B$?D8u!|+U8CvMar@2{j;+}RH|s7g2b9%S?lj2 zgo16uXT|2s%)Y2P+-n0)VU)tL*xH>))!D*0AQo+8sE(mXA)B7+oQpn%Disa}%&@iWV zrC<#V!x|ihyR;B$At8i-GX`In{fD)|TfUE(&prlEB#;@~2es)r()ZCjc?iOFF@5nu zcpCsXjH2QTb4nlGUcfk(@7}?U3m@Ugb1#5Wy5T%mN`i8Zi5FhMo%h~GWoa=KWKl{0 zX_)g0fwZ~~WJ!ss^Y7u{^FKoG{$`Nn*J?QY%yVFtg?nFr8G4>mLO@Op^fbMp!C*x# znDLXRaOj!m^n=M5lF6ib5ea1kaF$~mO%nl?>KmVNf2wUi+TLL&L_B6#8eE-waukpJ=*LYccRjdDrBd4lS3qD|3 zN!LrLLc!LrGU*kWt(~__m3Kh4l?Iwhv=(^}lB#;i- z(@oM1ULlXfz#w=!6W$k20@QNgE-x7S%f$FKat_$%+Um1lzfAsk%fhMC;&YpqoMC$i3CyuLnzMP*WwV3f)emXi+5y!N{@Wc=Yw3X%${6 zrJ>+z!@*P!4bdH3lu>ZoUc23f9c%$}6^>2`r6?>f;l_oJ0`sM20o7_%vltqqNa`50 zx`Y40*MA-w)zC1nHWE+@;Y0Y%RY@5{%y>S8=Y`hkJGb$>fBDCjn8mG@q{U%d@f;RO z%Zg8qAjW_x5u+Z_Zd62%lL^|b01Jq(-Eqx7rBsaB4oKTYgdbc|qYvxtuSe4M1o4y* z+$$7tq_-y&&}u;zr6}ILjjqGTg6O}EM}A<{=^KD7m*D2Ifj^dJT{ct!!YbLssBNwd zz>*pq(axj3!$(nBn1`xWz&QtFbVIcm3!X;xP7Ni4Iy@)ExKw|{|Os|C6iA%o-jK71jek+TA=tJQnD%}z>;K6VaZ z9KOc6u##QD^7X4m|1POyz_2O3NXFHLIk;{WjJ1~y;*26;vsiA2jhu;b9L!3^7myyO z7SWzO!^2bJ97#r~F%{WP=XYFL1e79(V~RI2e25s>Gf~|K`La9oogp5Xw*u<$l0 zh1F|Uz-$LShmUDlrqRcr#_aibAw4(rJ!!{6%@^>Z+zT`v07yZ%zRyw#%w7Hl$?hKX zPacNwHkwAI?_==rQ4m6L>%s@{tJP57us}~tA0#A|0wlC z28Tg{o{0m<>_1?%ci%q$LC_APu&Oj3$oESHELF;F2Uk)lWD+r%?^M8E#RXR4)Vq%B zVA}&&4_ApZu{fm!F}b`!C<#vD@gECxvEu0!ixT)kwY|>?fUbm%Y^mDzHZPVdm@kzv zo=G=>LsQ&*CA)&v+t<;5^aNzc<()Z6^gVhOvmgE;kVXpWbDJ}`K)ALf3C2nY0c(?_ z#QL&wZD32qgPMOw;hlreINHPUI^6p$M-dzZAvLHCxP_v7)o<9 zkirKWNhNfelZ2oq}A`5Nl>xVemt2 zm<>bCx`aR}iPbx|kRBd|)77=19p8L^wN5}0UI)_Tzc3O9fM z8&p=7_2~yx^ua}_d2%Ou`mpcG=kyvvgkb5;6bg$Ah6$zM864vqo2Jdos`W>H{0lf; z-J#DRlp;Sji^ANjcH*~kkShT5ix>Y86YBO6VAy(1us3VDa+T`iMcLklB9_>9Gmzrbq~2 zMQH8`8R1{46qYZ2rI%fh0(~b=Aw9ZJ+YU;CNPMz`3!+Rp6I6tQuLj~qI=$_bb23W##F?ReUPX73(@M_^cS4s#> zz56z**{l{!v;?k*xp%pfz~Pr)N1~@!3$C)$_i*FIBviD7IOFR zX_+!+Cp1xn-DwElN6*+ePQ3cs1I6?ZFtKp?8|3fZF{1HEkvIb5qLISK#8c0s|KO3( z!6THyEtT-yAKqMZY7g708h%&0wh{md&a`cj!bkV$KJ0t?`Fi&A@E_j${32?Ff_Y<( zP`a%Of!T5~7N^b!x3zdS@C4_vMH5LCF9;GczLYzZl3nYAC1t#RX>s;TtR_Oxc+6o9 zo+&o7YqR{B~Z&oqOU(3xJU`7 zrx$K63+dJZ*BDASR7xorWpy@^8fy?uxKVa}jU?-Abl+{BqA5_LUDzo=dzI`1Di-lI3Q1PZVfrN3KGLDHeqqtF^K{)N?~&rpEN_vd_{Ym8qM!bN&O!dgyFetvlrhbR0rH zfCPFMy8o1r7&>tZgU26*sHd{oTonlBzqkmQTZUtWgC~noP!eSPc6fLtAZrP)Lv=$K z$G$U9pl5vIfi}see)CHuEPZ(q5dIoU-dt+=tUn#Vic4Ix@$6UuKcO-9d%W|#kx(~|lCat@KHAuO3!aCO zu5LJ%-E`VB#_CDnH&sfZqyVJ^nc)$w=_@@visJk%gy(_~+RQ=`0#FK~4Xmm=avM;y zQVNyDd2~-6*7grirXi{&)K;^`H6Oh$iSh6KN*R@vWps^CgqlzZAxI4jfm#*{Gxs&= zg#sTnA*J@a8_M@K(+2{qOx?ouxp^dd`Zj>9I>4%r0Tj4p;1+~bP1TnQ6eQA=!>NH@R|@H&VN5*pq8^M8g2ivY#Om$q#`pL_8V_cv6sn$Y zY;V`d7{*SW(L3=Af#q*LMQwFO>x(9&#C)!7+;|8fxK&tE$gI6x0YivTBpD{By3@HT4D@#T!A`FSJ8*DN+q_VrQ zkcFsK;AFbjFbf;aB!3<3pb}Oxh2H&>c=FuY@Q6XBFn{$5Zk_)ypa``$BNFM*YXVnF zDI|OQF!|DJpt|=Eg3{a!mM(u2sLpC78KTWT71xJvNbGAR5;*zOH?(<|DCfxCx`zC% ztDsyDFc$Kq$QxzWt75fQi-o;nl%P9l$HoF#oNqA{d8>zfjQFH(o{bM+(Os>9wFj{D z2NsR7?E(8ApP7)w9C)!=Q%JSxGSILrcy*AqS(!W7_hpC+Mr##yi-s}f%r^h4cs@9z z=t(4+=Ba6)kiHMURz+rHOnZrMoXh29y-ZPq#fn;!$_TP*00EK%Lt4TiHNGEysetP8 zlHN&whaihkiptUgtaJwH;n8s1LMggO$01x7#l<--5Mz`;8bFp*fP~UoXr^*S2-k)1 zT{x*sz)Fs0lD~#huu^ICj8A}CHqM-Qq`8fZAwNHdsf!mP(J$KpxN3CT#Ir9V(bpej zYYZv1ToyAI&qLIz+Q}xRS=@{epyv5-eW`7aSFPa0PyQlsFbtJsV5luGV&&2oT98Kx zLAG2)&5-<(5Q3T%m@SuL*-oWW=tN}egNijKY*#zD$CxIk696mD z5_fJt)U%33<;2`pZ5&=}?QicGOQ_&bk`I83kZRkYr>RPbsvBhE5bLXK{J(13wGm}0 zq#j7^WIa_pAA{+1lW&hwswoS~`nl#;%3!vQMBjk+P)l_6z%3Txm5bYEvKsTk1hT42 z3!vOWY9t)kC@Em~_CZw2aC58LbD9tW;d+65f~KOL_fM(jN(e=1eiljybd66m=OwIb zUv-U+1`M|fgO6^$_B##dF$-2E-48+jg8ieN|(cKLW6-XfTjO_!pEbStz zw>6_2>p{W2$H5X;qH!?>G3bW;6v>4kq!HHvWtwL=(io+OUwSdL0 z60ip#{$wB}hPkqyd59~IqN>v|lEvFUu`y(X#4a=;*Lx4gu&y|x!5$t%+c~A6r2T;} zgb);57fa<5CVF}{v|UOGA%qrWfeYCDf*e1=K1P0DL0qJ?DEX;+H5QH&|KmIhN@an)-h3*o;I+mIpBftWF zK959yf9QE_*)|S8`yz68rcf&s!m$GZQVs*O?|IOD2+d~`6t`GF{{A#Lvp9MuCc!w@ zEH(naR>76u{}yhkWJIA+;Hp8xX*Vn>Fm~=qWJX4{x%&vExckR9*HEdhL`9i2{I2xE zs1k!mj$+`@(R%K#@Ln$7yA8im(zYddPoOc<*Ok%^*<7)JszJYNCxsD$v=iSc5Vx=> z5V!VKywQU{^b)0u)J|{`_9#y(ZPNDk&7Bz8$(VBc?UiU?Zc_>mG8Ujn31BgTnjeEy z4k7qLT}UMo8(OarxSbF}wP#cI<~2;d_^S3|pBWm#=$R)l`}G(4Gmct-^Z;eB ztSG?YhP_?*So!Q@jQ{8-U^>P5WD1i%{skP{(K3HZN)SdsBOme^@fE6Wa@cAQwF>$Og;q;0@*QZw|7nN&KWX9LcQbq-q!SG2UWr`% zaj;B`f-?e7#K2J2_fEfVHf(pXD8W~&Is7mG`G0EaB&8w_a3$fpE(r8{@5qT$C@(Ey z_3l)l7Zvt}j6r$AxIjE#z~XvF&99V^yKxnLCr@jAt=w7_N(wlZL1Epm10-r@j#Py7 zlTr%Q5Fu-)(m3(czrfW$yopM7#X!`wGI7lyi!;mCf~(@<0;Vp!4_U3iUKbrk)+LA* zO2P9aT-^;+0h9tM3P`D8d4!MN1BbBhnTCL;28i67g1fY^0Ss;Kj;fRpFq>pJ=U^6J zL(^(g!ev4!`i?#VE0fWJJt&E#tKS94J51cIu}Xvpw40QEc&4&Blw3C!htmd)9%Y`~ zu4OXF52hgfXo1e{`Z$9C`uC8Yi;?GEfe6X^LI{E9d0>RWvMgkIewHG(v=o)mK&a65tg%zc>T z4hSK}vo(Madg6jG1}~ojVI0Y!kx-(95VDpjgEMXh{2&ob7Ku#Br0Q%~m|0Ru2|Ja> zz@fufp1K9UQi%Xr(dG7Pp|!nJ34z6{S5R7*H(t#=KPrqhK>sH56y+R8e*AN7;^YPh zTmJ0h$g5(_kDi>CL0&>Bg=F6V_C5Qe9$XQEYIYfg>AMl&%8x$smBPpOrq}wX9bjQ| z|0iu04Pth%@x&eG9XB|MJ;&Z2{j^v1O1x_rK+=jg(!jA8;=<6L>*DR-{RZV?aa%yw zsAZ-UdM5Ux_rRoiuVXBzCKgMY&wCJp?3Hg&xP8L_RshfUAR@?zRwQ#6j~;XB>;3ao zU7G6L-~M+<^z=l4+wBcLJF=Oe`5q! zgi_4E_j`E7f^pD_o`_WTwH?PWfdiU+^xV^6jy^pQq{Qua-ZHiYN`XWrw+3)!aS5xn zS}bR9u<7tveXoKfqA{v9cOd#Mc6{{^L=f&_#OSpa_eFzrU=(7Vr!hC5QG%)`Vr@Pl zfFA?fO$b4$R6<|>0ES0Lw>NIeJU=tTBPh<#!VfXutv_p9@f9H^B>)*@SV;^HYy7?* z04UBlC=Jr{gvp3VUqE;+r0<7T<@-=VK=>Y{@U^v}d=NIjrIY|6=$kx*)q8g#UDqIO zvULWFuV27QDU_BLalf<#?&zJ-TwlPA$kk+X3X5u-lj}^>=;?ECy1KP~PD)DTuU&zg zUj?B|937qN#+B*)Kkgo`4Yvg9(7e zQVDl*x!Cp{MhI+9V+9b5?*5~9kHLEQOS~RTd*z3*j)Amop;&Wc1B#8@cyX8_JD&SV*)*&Bk)4ZILW zLKJ7FA*96k3$NDC`Vclu2)M$>>i3s4k$eQzd=7<$S@@n8xqwaPL?{Kjs|OR$JP)!C z^br8HS}h<%ILGj#k74<%&&&@0Qo@a3-xMC0g?Ph1ODToo!W^orS@6UAv`EVxiIm}UDGicYZk{NK z?j9uj2O61Ak?b4PGE+(^EM2>S;{2R>q@`%O1+1qi34pTa<7PG++u=^?>{XoDp^=4s z4_y5TSpn=Jhab{hidBvNVZiD!BVCIH{-z=(pGryyI3sXlkZqupVl|t^@Bif=ae8cY zd)-6`#-Do`ezj89AKUm8nn<8~@-P;^{Q}H(Odo0#A#FTc3p6Q3?*3iam%qlyxu+pQ z9OwxMq?9P-R&npb``}KZd2$c}LMVLCgIjYA3=*m5dev)Uf>QXthXXIa2H`#c;cG&> zQX)Azj=smvVfm|1K{P&MoYDZ889)}P%Pc6Rz!_suN}{kZhibmz(5{L0lM<8wT?yN` zicA|#;K4tNzC*{12OMV%J(Gt(4jwjaY7(^;(5)Wz(jcrQ(@r3=aDc zBCH8Rc^4U<(0T^#x8 zUuaFG>HU+SmW73nKh&n_W0b-n1XbTR?vI2JP{ui=>!MaHteMz!sR1~pa4a5~g2A`| zdiyZ>0v#l}001BWNklA;xsuw-UXh2vJQ(wFNcZ5$UfC<1MC^|rrEn*gi$uOVx&=|X>)ETuJlJEe_9&*^QbY&lQ`~QO7}f+MBs5Q4TlZK_5a$+4 z3Bl*{3){NHy7?UDzqqLPvjSkHGw46@SRhbonh!0!K5Czqo{M|u--TB!=yUaQ3x|L5 zOQZ*fjL+hh6{++dnHGx>WN+TU^u_bWb2>S;4+CePG=3i=1Wp7_Vg1Vcwc4bAak#I$ zt>8*21=8x>qnxeSNj{grw`O|P@SLC zgTs2VccD~h6d@Z;Cw{&8k2eCWoikU=vM~9=E9l*SK-+mrDI}9gB$7$;bH; z9PIJ;Rwu?Hc90eG;~QDzd?{n?BZ5G-A&$?HO2L%^{mBH_R>wmrR2CPI9vKDKou`B# zIWUOI@&ZJqq8At?I~NEcl)^3K;1=@e-ao0$dSa#0Nc8k!<>plo%C!AX35AHTxEVnf zAy7h~aQ_}MW8<(hUD_MB-P;E%lRuU>@s69>eCS-<;q{nAf|%X|2ay>XHiD}} zA`uC$q*CyO*xDk{)F`KR$~f+S`6(*dWiz-^GLjAFAjpFl=N)RXT)}jqxOFCu5J>4`@zU2uUn4>p z297@#sUELd*ptaRAV$aoW@oKZio(4qRF@Y)8P&Rx^-dndu{VAN<@s7)aK<1>p<$VO2=fDph> zy?$sPTDLuzJHLD1e(ZnlMNqm)wqgAVrzDcL4aT_ky$XQuc@Qn`VuVu6eEC^u$EAix zksjR#rG&Qq#kpC`e*TGZ@(C$WtW+Qjd9Vl}$h$S%%w}T)SPfB8J8t%h(T5^>Fz(!g zYb;zR&`Hcdu@g8ki27DBzeC0D!^9}T_^D1)RUpD$=NvTkAeWRBQqXc#YuvNmx zf!BV4WdESCO*h~A9r82N#Oo@P0o1A${iZG@makob@LZ!}d!<%`5Yjjagp!yk7U4@7+s4HS zfn(4eYtN>Oj_6)J3_c)x)X$$QbJ7X5s`#ZEI+FZ(3!g!@xt@|XhgX&L+;--(Y`ghL zX`Q)gscUqdF4dLO!;FoGGEE}ueUqWSZ9#%qc9u%GjLP!vOxD)2W_b~YAX(YOP zA%!2hi4aP$boDaIOY@-IGTdBzc)l=hM1&BOTo(n`jdjCHSUmQ7Ev+Z~ei*=2?EY7s z0*QN)NL#xh#60d&Dr|>D-p*_xTmAMJ=dciRTe?uK{)v!Md$30p-xu(F5#i>c0)Vy6 zWvir$6gS<;o-?(&ii~aHU~g}e1;?aC)i{fnu3mxD-5rRFYJS^${1m)G0e(?0MP&29 z!Q3>~QYr``!3+zbvb2cBZ@<9Exo5OmT!d1LKlLoiE6b=A^4j@m**26?kv>^bAj_{* zF#XAS9Q*k%wQXYD!swIFV(zn#QCggjJo}YW;2S%qwS{7wEK0#jCb9qJ*I}hIS{jgA z7FI5QjndqVF=r8!g7n;-Z+^aqv1eXDW^5m%Mz1Px#>*pj`=$|G2`N#o)*|1@09;$i z#(Jl<80$#N8qOXL_G(XD^dZDfKbRLZ%-dUv`$EF|~vB?n~KP^VIgIN1Xc#rxZ6=vKY-|U~h7@AuTk$I6sT*%^Mgvep0)~@>Ck> zefyES_MNdUj>S;*%o0hSFF_1iiG&aortcy(IEv=SsN!Uv&K-Eo5l6FeuEQ#^|#?{pHiT`iiMrn51e2q~OUJEwX=o^MaqJI!w`wkd8!!6`7{oy+iod#5D z(SVOLif%R{LSq-_S{jdH6_uhRQmF%*S7~lhT#bxg5T3vD6R|FEI{xfSk>8fR{(a=*Dm5>1v2seW zR4$|7y0L0faTZMWxXW%97A2bw`*v^WVe5t{(l%#gDGj%Gwe!BIxT59$+fH$Xh&1oe zoqkMtVK7#84^~I^|4S zR9?A^*)KoC{^wuT5(rZG=sx@iD)Tc&=?2^45YjVZ2BiSk7qAVH?TlMky!P%)wst;f-Fi=oS((>N+ zDBZRn*H+#WC%~%tK5nnBqA!tXN{1Hs{OH#!WekPc8O(k4IrcyQ68u^%bYihY0t4rs z#=<8b1rkJ>vp!*QR6IYz{|oSiG`g^Or2?kUzl#GezYZ&v4hLDDhXXIZ0>&-OefwpQ zW{=P&fm2EVhjUbm#Ypmo)b~E6!3>4DS=|5hV@$sEBmF*02u2=%8jGKO1W_u5T6(xp z(e~*`a3v+2?rw}e@$3e0wfS!dV_3QTHQd~)5nL%LTK2n&lEv@Zw?7a!GZepCLFw*o z&`pV)15EnB!=UDQ!EHNYce}N^8mnorkxer3Vbi){*s5O&!QZ)+X8+l1!4wRgaqkR;sRNe z5Uf_KxSPx2P+xE8`;~$5CY&QXbqk5UehfZxB1n(7X>ULX|=8D3`Q-1Siv z6+k%!V=NE^V+ zzBxS)B?Q@84a=1(gjBKKm?)ueTSzXw(+z`mND{{smD&!1X8lrnD1gJBul}EPQHp>( zL}o$}^QUl1;B^AX)fu_C-aP#lXZiY7^zNSwz|&?Dq;5h>4v(Pc z*a;M-ZWvV61BoDCnKxhs(h$4T{%rN`6s%+lW9OdInlO1HfkQ97iW~2~janhEeU_a` zLrH;Jscc$6P*NKGt(6eC{r(@pYzKV@4{7I)-9L!_r(XoF+-{x^2ory=cSa*KxyAL> zwk?c5{uJzF0+ww(sE!qYtNIEmFV17}yGzCo0)T3%)Dr)#TF@Oi^7_wVcXjLY8d8e# z?0ppP+%k8xQmA-di#fS-w=r@Aw)U64BY0Mg-BRNK+zZ9M}H+U$HuM+mMS`!S3lpVsu~AZ?s=c zDSZHtbid(NUHV|c5HZM5Sz5&XPtHezE4NyOY$4hs%4RP-4}*`Kgwxe+REu?US>&#L zXOv_BfKttid?z6UOXUhyD%IGNEmJ}|vQaz)Lgag8Z*)4}XC3G^`H&3_L1(09Iw1u^ zNxWY}02EvocXRnBU#zts7_kmR_V!KWXYL!pM{;-+U5AcE1HM+yiU4^U|J|=uaqFG8 zP|N2Gj`#w-2PQFg`mC80krGZ<2F$i1Wu>BWTyZCX>%ae<(aBy(32Hk?43C1W!%b8N zt~h7L$*7b<_kl_D95`fj0`sdCEPnSbq%;F3-*w@;(SBD^Y=;y+y2mFleCo6jtSKR} z{MBa=ReiJsAp}(~NVh;Dz?CNjt}ZXbiaAj+r>rv@-X44P1BN7fGVy=r`0C-C(VcKb zP(jd+>Oh*F*rhrM!S$6amdll<3wJB&#*~zp`Ra4?S?YP{IeHxF@%=`ohXCNMd@i9z zCW}xC;dz+)=v_$9(*h{rx)^!%H1mzic)~`a+=Q`H{z&!x%oDnd^+2I^AQheu%f@y|N2fl1}>*#ts-Bo_S3= zG(MD&j_CTa4t$JI3U~7P&=fjR=LDe?)!ZuXod3Wq^bKI}?31v&x+Ar=S^`-S1O%ZJ zwcILh{_)Kq(oxfo()ZCfc?d%%9yO{B5K7^6cY#HGV=Ev_cpmP2_`cEq3s9hmB%Hw! zfRJW@MJY3)ZzUyC!y`EG>dzwu&WiK1C@(EUrYWeE%aOLwR@e^8IR=iOM54FPxXYGi zrcs)ij=b%Z-DuMwqZD`Y`AC+lEsK_R1}f~aS3hjPxM#WBD-Yu|=oDP!G3RY&2x%!r_9lg08q)U;OcMwTZDvE5M5~Z^leO)L#bKwNJ$Ci zI2b?%Ig=$ zMKx}nFSniy`t0a1oXx<6L`z^$#&GkGZ{g9u`A-3prI8~@4vk{y$>)*1{FOE#G!R4; z!gegUq|Ww zogne0rUMb-l>LRw)&Htl{5zB8h`9y#~s;K5CFLleb7jmaUg=08sIKNJNLbE|yD} zi4rtx$0DV)BWAl!`9X9NjC9KXY7boPm8~5f?V5KamJA4gDi*5~npnYmCk2QK~(U{aOtpCm%(%ki$3s{133xY5j8m$QD36p(L;t8YG^ot6ALp@7Rd|z=TL=K?Na{`8&7a=5v89Q>oA@q=4r|i)2QDD*%wbhtX4~k?8Bw z`*9HhuUNp+SDzX;2?C%h1UxAtw-N${TiIOfX&wmajD8CqLU6Trc<+@z#mtlIG8DxA zMe5<3-5t415*SmswD*EcI`U1Q-k*ULVw!6y;kpo5zJ3+L5S0f2o?AnuRDzNcN`+Mw z(>#xmW^!HZJM%amed8~UEqEh%siT*=J&^vj^9N|C+R7pD|Ur84rh zTI{+iobir(ITKMxk1# zrw@at&OsP*15(COSz5sSm!E=KcEltQ@LDi_E2$y{!kn&djGjIRW?9CGQ<%Di^4v`1 zJF6{#D@q6|o{P`t=EFta+E^$h9lK?b4lkC6X`|jNd!-o%cZ$M#_^uJ1@&ly=9g%DR zI>(kRmn+CttKnw8sQzFKt5dhII(5@1-9QLIxm1E^K@_~*=SHNG0Am<`>@2#5MP`Yv@4ti6(n3=wQxmvK4Ub^o3qOLDN@*D)$~f|OZ(-)b`;oHxzLfBU zjATk$=}5vDM$eo>qPI`~TS6eJ736PUkBkhc`hjUMYET#fzL=eBj@XE0QPPf0-aYf+ z-Z$-)_LUCAy{yf>hjIROB3s2;`kW5=w{}7stLpo>o6Cnr%c&O36wJ1rOc#b8 zdjdR_HUk*9hNa72N9aNX#q~u?vtG4ewoDBUqwnBhNMG;ErG&uJmlxrcipGg0m4e#> zt7bEXd$~Mne*DNiV6SM0HnYy&LOKE%_t>kw@~12vrGy{C?(1OxSs{+$TN&n7E8jwz zGqTOf2*FaRjJaYl{H$x?-NJP-^Z6$bZq+ytLI_mKoIK|I7%kKnN;}b0{y&M=I4;d=cprMhU@cwTe5rd`I@P zPNl@@_+ju6mOTb*uQVM#Qi0P>MX+`%lCZN|Qt(wBkZhn7l!z?{3@89)A-A-BN~K!L zBdHWnlX6>IvnM4^8}jQaLO>!uwwBLf_0ALqj-7x~dJIsjR>3U`mSx3)vdgPkWT$R! z@(T-sNCuCeGWv_9N5*mdjlaURw|)Z_;<~iqvM*b6(5D9UPwLMpOy2`Nz`&C!a6kpg zj@LbW;N)oxo;+jJlu}A!@te<4oSlvYFm4^dkjM$EqPG&pFn;bSNZ;3Yh*F@O!=?n2 zue@eF0Tlpu(;^{^VPN6_65ZWv@2FL4_{ab6|3c~Ry~rfkJ7<$cn#6(ya+R}Z81 z)n3_s%*YRA8j?0XhpgMrq>2ZYD23Rfrad81ayJT2t2TW{#WRaW6A)0=8P2CsT9Q&ifQhG`gY;Zj$wYW#7{|i*myn;n8-TM2G~MuRGRltCC!R5fk^)B0Jpre$ zFOum>XELz*&$P%dkY=bSCA@X?;`G!le1GZN*ufR*vJ9O%1UhOS++(l)yunReK!a@c z$F1!NN(Gzvwr7S2ZyKrZi@s28F@*)$Ow4+c{S93SWfjUX%}NT9lI7!9{rz|ytvaNzk@j20?xr?KzMIo$r_qYeH? zp>3or@C7pwG5|PLuuWgUfcdXJ!^pX(&^3O*kXeRc_|#d{iUs`t?7eA_BuRE2_PKjR z3o z335R!u-L`!&g{;$Gt)iO(>;A3)pg%@Rvr=Vt{;(EUDcHt{-P?frn@#B=D=VkD-I8L zf1iKvz3;6~P6XRRD#+40a6U0GC@Hb@1eWs&(=5xzzyJUK4V04Lb#~oZhC_D}+H32bjGzHD$76V7pbs&Nqu{#6{a7 xz$BWnpD(1dBtD&~oT# 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 FV1kFa*TDb) literal 0 HcmV?d00001 diff --git a/documentation/factory-dropper-directional.png b/documentation/engineers-decor-factory-dropper-directional.png similarity index 100% rename from documentation/factory-dropper-directional.png rename to documentation/engineers-decor-factory-dropper-directional.png diff --git a/documentation/factory-dropper-gui.png b/documentation/engineers-decor-factory-dropper-gui.png similarity index 100% rename from documentation/factory-dropper-gui.png rename to documentation/engineers-decor-factory-dropper-gui.png diff --git a/documentation/factory-dropper-metal-press-compression.png b/documentation/engineers-decor-factory-dropper-metal-press-compression.png similarity index 100% rename from documentation/factory-dropper-metal-press-compression.png rename to documentation/engineers-decor-factory-dropper-metal-press-compression.png diff --git a/documentation/small-mineral-smelter-vanilla-automated.png b/documentation/engineers-decor-small-mineral-smelter-vanilla-automated.png similarity index 100% rename from documentation/small-mineral-smelter-vanilla-automated.png rename to documentation/engineers-decor-small-mineral-smelter-vanilla-automated.png diff --git a/documentation/small-solar-panel.png b/documentation/engineers-decor-small-solar-panel.png similarity index 100% rename from documentation/small-solar-panel.png rename to documentation/engineers-decor-small-solar-panel.png diff --git a/documentation/small-tree-cutter.png b/documentation/engineers-decor-small-tree-cutter.png similarity index 100% rename from documentation/small-tree-cutter.png rename to documentation/engineers-decor-small-tree-cutter.png diff --git a/documentation/readme.md b/documentation/readme.md index 2045340..06d746e 100644 --- a/documentation/readme.md +++ b/documentation/readme.md @@ -3,6 +3,7 @@ ![](engineers-decor-v103-summary.png) ![](engineers-decor-v104a-craftinggui.png) +![](engineers-decor-crafting-table-items.png) ![](engineers-decor-v103-labfurnacegui.png) ![](engineers-decor-v103-labfurnace-electrical-speedup.png) ![](engineers-decor-v100a-concrete-stuff.png) @@ -18,8 +19,8 @@ ![](engineers-decor-v106a-wasteincinerator-gui.png) ![](engineers-decor-v104a-redstone-valves.png) ![](engineers-decor-v106a-factorydropper.png) -![](factory-dropper-gui.png) -![](factory-dropper-metal-press-compression.png) -![](small-mineral-smelter-vanilla-automated.png) -![](small-solar-panel.png) -![](small-tree-cutter.png) +![](engineers-decor-factory-dropper-gui.png) +![](engineers-decor-factory-dropper-metal-press-compression.png) +![](engineers-decor-small-mineral-smelter-vanilla-automated.png) +![](engineers-decor-small-solar-panel.png) +![](engineers-decor-small-tree-cutter.png) diff --git a/readme.md b/readme.md index a0f69d9..3e66384 100644 --- a/readme.md +++ b/readme.md @@ -22,136 +22,134 @@ Main distribution channel for this mod is CurseForge: The mod has its focus decorative blocks and devices helping you to build nice looking manufacturing contraptions. Current feature set: -- *Treated wood crafting table*: 3x3 crafting table with IE style GUI and a model +- *Treated Wood Crafting Table*: 3x3 crafting table with IE style GUI and a model fitting better in the engineer's workshop. Keeps its inventory, has eight additional - storage slots on the left side of the crafting grid. Crafted 2x2 with three - treated wood planks and one vanilla crafting table. + storage slots on the left side of the crafting grid. Crafting history for fast + refabrication of previous recipes. Providesa a recipe collision resolver (selection + button for ambiguous recipes). Quick-move buttons (opt-in) to from/to storage or + player inventory. Smart shift-click placement (balanced placing of items in the + crafting grid). Shows the placed items on the top of the table. -- *Small laboratory furnace*: Solid fuel consuming, updraught. Slightly hotter and +- *Small Laboratory Furnace*: Solid fuel consuming, updraught. Slightly hotter and better isolated than a cobblestone furnace, therefore more efficient. Has internal hopper FiFos for input, output, and fuel (two stacks each). Two auxilliary slots - (storage tray). Keeps inventory when relocated. Crafted with one cobblestone - furnace, one hopper, and seven metal plates. + (storage tray). Keeps inventory when relocated. Can be boosted with RF power when + a IE heater is placed in the furnace. -- *Small electrical furnace*: Pass-through electrical furnace. Can pull items out - input side inventories, inserts items into inventories at the output side. Internal - fifo slots. Automatically bypasses items that cannot be cooked or smelted. Electrical - RF/FE power can be applied on all sides. Items can be inserted or drawn from all - sides (e.g. with filtered hopper or whatever). Fits ideally into a conveyor belt - line/lane. Consumption and efficiency tunable via config. +- *Small Electrical Furnace*: Pass-through electrical furnace. Can pull items out of + inventories at the input side, inserts items into inventories at the output side. + Internal fifo slots. Automatically bypasses items that cannot be cooked or smelted. + Electrical RF/FE power can be applied on all sides. Items can be inserted or drawn + from all sides (e.g. with filtered hopper or whatever). Fits ideally into a conveyor + belt line/lane. Consumption and efficiency tunable via config. -- *Factory dropper*: Dropper with GUI configurable drop force, direction, stack size, +- *Factory Dropper*: Dropper with GUI configurable drop force, direction, stack size, trigger cool-down delay, and trigger logic. Three trigger slots ("filter slots") can be used as internal trigger. They emit an internal signal if their item is found in in the dropper inventory (also at least the stack size of a trigger slot). Internal triggers can be easily combined with the external redstone signal trigger using logical *AND* or *OR* gates. If internal triggers match, the dropper will spit out - exactly the stacks in these slots. That allows to drop e.g. always nine lapis, - redstone, nuggets, etc on a conveyor to feed a compression metal press - instantly + exactly the stacks in these slots. That allows to drop e.g. always nine Lapis, + Redstone, nuggets, etc on a conveyor to feed a compression metal press - instantly and automatically after nine of these items have been inserted into the dropper. + Provides redstone pulse mode (drop like a vanilla dropper) or continuous mode + (continue dropping as long as the redstone signal is on). -- *Small waste incinerator*: Buffered and delayed item disposal device. 16 fifo +- *Small Waste Incinerator*: Buffered and delayed item disposal device. 16 fifo slots are filled when new items are pushed in from any side. A GUI allows to take out accidentally trashed items or put in items to get rid of. When the fifo is full, the oldest stack will be disposed. The processing speed can be increased by connecting electrical RF/FE power. -- *Clinker bricks*: Slightly darker and more colorful version of the vanilla brick +- *Clinker Bricks*: Slightly darker and more colorful version of the vanilla brick block. Eight position dependent texture variations are implemented to make the wall look more "alive". Crafted 3x3 with a brick block in the centre and any combination of bricks and nether bricks around (actually, anything where the - ore dictionary says it's a "brick ingot"). Higher explosion resistance than the - vanilla bricks. Also available as stairs and wall, crafted as usual. There - is a reverse recipe to get three clinker brick blocks back from stairs or walls. + ore dictionary says it's a "brick ingot" - useful for bigger industrial buildings + where clay is a rare resource). Higher explosion resistance than the vanilla + bricks. Also available as stairs and wall, crafted as usual. There is a reverse + recipe to get three clinker brick blocks back from stairs or walls. There are + also *Stained Clinker Bricks* (crafted Dirt and Clinkers), which can be mixed + in Clinker walls for more variations. -- *Slag bricks*: Gray-brownish brick, also eight texture variations. Crafted 3x3 +- *Slag Bricks*: Gray-brownish brick, also eight texture variations. Crafted 3x3 from slag in the centre and any kind of bricks ("brick ingot") around. Has a higher explosion resistance than bricks. Also available as stairs and wall, also with reverse recipes. -- Rebar (steel) reinforced concrete: Expensive but creeper-proof. Crafted 3x3 from - four concrete blocks and five steel rods. Texture design oriented at the IE concrete, - slightly darker, eight (position dependent) random texture variations with rust - traces. Also creaftable in form of *stairs* and *walls*. Like the IE contrete *tiles*, - you can craft rebar concrete tiles with corresponding stairs. Reverse recipes - available for all blocks crafted from rebar concrete. +- *Rebar Concrete*: Steel reinforced concrete. Expensive, creeper-proof. + Texture design oriented at the IE concrete, slightly darker, eight (position + dependent) random texture variations with rust traces. Also creaftable in form + of *stairs* and *walls*. Like the IE contrete *tiles*, you can craft rebar + concrete tiles with corresponding stairs. Reverse recipes available for all + blocks crafted from rebar concrete. -- Concrete wall: Solid concrete wall (not the vanilla wall design), crafted 3x3 - from six IE concrete blocks (normal wall recipe). +- *Concrete Wall*: Solid concrete wall (not the vanilla wall design). -- *Treated wood ladder*: Crafted 3x3 with the known ladder pattern, items are - treated wood sticks. Climbing is faster if looking up/down and not sneaking. +- *Treated Wood Ladder*: Stylish ladder, climbing is faster if looking up/down and not + sneaking (but not OP-fast). -- *Metal rung ladder*: Industrial wall-fixed ladder with horizontal bent rods. - Crafted 3x3 with five iron or steel rods in a "U" pattern. Climbing is faster - if looking up/down and not sneaking. +- *Metal Rung Ladder*: Industrial wall-fixed ladder with horizontal bent rods. Climbing + is faster if looking up/down and not sneaking. -- *Staggered metal steps*: Industrial wall-fixed sparse ladder with steps in a - zip pattern. Crafted 3x3 with six iron or steel rods in a zip pattern. Climbing - is faster when looking up/down and not sneaking. +- *Staggered Metal Steps*: Industrial wall-fixed sparse ladder with steps in a zip pattern. + Climbing is faster when looking up/down and not sneaking. -- *Panzer glass*: Reinforced, dark gray tinted glass block. Explosion-proof. - Faint structural lines are visible, multiple texture variations for seemless - look. Crafted 3x3 with four metal rods, four glass blocks, and one diamond. +- *Panzer Glass*: Reinforced, dark gray tinted glass block. Explosion-proof. Faint + structural lines are visible, multiple texture variations for seemless look. -- *Treated wood table*: Four leg table made out of treated wood. Crafted 3x3 - with three treated wood slabs and four treated wood poles. Guess the pattern. +- *Treated Wood Table*: Four leg table made out of treated wood. -- *Treated wood stool*: Simple small stool fitting to the table. Crafted 3x3 - with three treated wood slabs and one treated wood pole. +- *Treated Wood Stool*: Simple small stool fitting to the table. You can sit on it, and + also mobs will occationally do that (only mobs which actually can sit). -- *Treated wood pole*: Pole fragment that can be placed in all directions. It - does intentionally not connect to posts, fences, etc - just a straigt pole. - Can be used e.g. for structural support or wire relay post, where the height - of the IE wire posts does not match. +- *Treated Wood Pole*: Pole fragment that can be placed in all directions. It does + intentionally not connect to posts, fences, etc - just a straigt pole. Can be used e.g. + for structural support or wire relay post, where the height of the IE wire posts does + not match. -- *Thin and thick steel support poles*: Hollow steel pole fragments, can be - placed in all directions. Also with head/food end components. Thin poles crafted - 3x3 from three steel ingots (output 12), thick poles crafted 3x3 from six thin - steel poles. +- *Thin and thick Steel Support Poles*: Hollow steel pole fragments, can be placed in all + directions. Also with head/food end components. -- *Double-T steel support*: Horizontal top-aligned support beam, placed in the - direction you look. Auto connects to adjacent beams if facing towards them. Auto - connects to steel poles underneath. Crafted 3x3 from thin steel poles in a T-shape - (output: 6 beams). +- *Double-T Steel Support*: Horizontal top-aligned support beam, placed in the direction + you look. Auto connects to adjacent beams if facing towards them. Auto connects to steel + poles underneath. Note: When sneaking you can pass underneath it, not all mobs sneak. -- *Inset spot light*: Small metal framed glowstone based light source for ceiling, - wall, or floor. Light level like a torch. Thin, hence not blocking the way. - Allows illuminating places where electrical light installations are problematic. +- *Inset Spot Light*: Small metal framed glowstone based light source for ceiling, wall, + or floor. Light level like a torch. Thin, hence not blocking the way. Allows illuminating + places where electrical light installations are problematic. -- *Industrial signs*: "Danger", "Electrical Hazard", "Exit", etc. +- *Industrial Signs*: "Danger", "Electrical Hazard", "Exit", etc. Makes a factory looking + more alive. -- *Slab slices*: Decorative stackable thin slabs made of of IE metal sheets, - concretes, treated wood. Useful e.g. for roofs or ramps. Left-clicking with - the same slab type in your hand while looking up/down removes slices again. - Crafted 3x3 from four slabs. +- *Slab Slices*: Decorative stackable thin slabs made of of IE metal sheets, concretes, + treated wood. Useful e.g. for roofs or ramps. Left-clicking with the same slab type in + your hand while looking up/down removes slices again. -- *Fluid pipe check valve*: Check valve: IE fluid pipe styled straight valve that - conducts fluids only in one direction. Crafted from 3x3 from three fluid pipes. - Supports IE pressurized fluid transfer. +- *Fluid Pipe Check Valve*: IE fluid pipe styled straight valve that conducts fluids only + in one direction. Crafted from 3x3 from three fluid pipes. Supports IE pressurized fluid + transfer. -- *Redstone controlled valves*: Conduct only in one direction, on-off - variant (open on redstone power) and analog variant (closed at power 0, linear - flow slope, fully open at power 15). Support IE pressurized fluid transfer. +- *Redstone Controlled Valves*: Conduct only in one direction, on-off variant (open on redstone + power) and analog variant (closed at power 0, linear flow slope, fully open at power 15). + Support IE pressurized fluid transfer. -- *Passive fluid accumulator*: Block with one output and five input sides, that - draws fluids out of adjacent tanks when a pump drains fluid from the output port. - Implicit round-robin balanced drain from adjacent blocks. Random initial fluid - drip-in to allow pumps to detect that fluids can be drained. The accumulator - has a vacuum suction delay. +- *Passive Fluid Accumulator*: Block with one output and five input sides, that draws fluids + out of adjacent tanks when a pump drains fluid from the output port. Implicit round-robin + balanced drain from adjacent blocks. Random initial fluid drip-in to allow pumps to detect + that fluids can be drained. The accumulator has a vacuum suction delay. -- *Small Solar Panel*: Produces a small amount of RF power, comparable to a - IE thermal peltier generator over one day cycle. No power at night, reduced - power when raining. The power curve during day time is non-linear. Useful - for electrical lighting of remote places. +- *Small Solar Panel*: Produces a small amount of RF power, comparable to a IE thermal + peltier generator over one day cycle. No power at night, reduced power when raining. The + power curve during day time is non-linear. Useful for electrical lighting of remote places. -- *Small Tree Cutter*: A slab sized device that chops a tree in front of it. - Needs by default about one minute, with RF power less than 10 seconds. Useful - to build a contraptive automated tree farm. +- *Small Tree Cutter*: A slab sized device that chops a tree in front of it. Needs by default + about one minute, with RF power less than 10 seconds. Useful to build a contraptive automated + tree farm. -- *Small Mineral Smelter*: Device that slowly converts most stones or sands to - magma blocks and finally to lava. Needs a lot of power. When the lava is cooled - down in the smelter by removing the RF power, obsidian is generated. +- *Small Mineral Smelter*: Device that slowly converts most stones or sands to magma blocks and + finally to lava. Needs a lot of power. When the lava is cooled down in the smelter by removing + the RF power, obsidian is generated. More to come slowly but steadily.