From cd3dce43509b7bf55cc50115da07a1729aa7a32a Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 4 Mar 2023 22:22:26 +0100 Subject: [PATCH] vacuum distill GUI --- .../hbm/blocks/machine/MachineRefinery.java | 20 +--- .../blocks/machine/MachineVacuumDistill.java | 21 +++- .../container/ContainerMachineEPress.java | 1 - .../container/ContainerMachinePress.java | 3 - .../container/ContainerMachineRefinery.java | 45 ++++---- .../ContainerMachineVacuumDistill.java | 96 +++++++++++++++++ .../container/ContainerMicrowave.java | 32 +++--- .../gui/GUIMachineVacuumDistill.java | 62 +++++++++++ .../oil/TileEntityMachineVacuumDistill.java | 97 +++++++++++++++++- .../hbm/models/machines/vacuum_distill.obj | 6 +- .../hbm/textures/gui/processing/gui_mixer.png | Bin 3119 -> 3119 bytes .../gui/processing/gui_vacuum_distill.png | Bin 0 -> 3071 bytes .../models/machines/vacuum_distill.png | Bin 1205 -> 3631 bytes 13 files changed, 308 insertions(+), 75 deletions(-) create mode 100644 src/main/java/com/hbm/inventory/container/ContainerMachineVacuumDistill.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIMachineVacuumDistill.java create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_vacuum_distill.png diff --git a/src/main/java/com/hbm/blocks/machine/MachineRefinery.java b/src/main/java/com/hbm/blocks/machine/MachineRefinery.java index 4b61f0e86..d103d3711 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineRefinery.java +++ b/src/main/java/com/hbm/blocks/machine/MachineRefinery.java @@ -17,7 +17,6 @@ import com.hbm.tileentity.machine.oil.TileEntityMachineRefinery; import com.hbm.util.I18nUtil; import api.hbm.block.IToolable; -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; @@ -49,24 +48,7 @@ public class MachineRefinery extends BlockDummyable implements IPersistentInfoPr @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - - if(world.isRemote) { - return true; - } else if(!player.isSneaking()) { - int[] pos = this.findCore(world, x, y, z); - - if(pos == null) - return false; - - TileEntityMachineRefinery tank = (TileEntityMachineRefinery) world.getTileEntity(pos[0], pos[1], pos[2]); - - if(tank.hasExploded) return false; - - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, pos[0], pos[1], pos[2]); - return true; - } else { - return true; - } + return standardOpenBehavior(world, x, y, z, player, side); } @Override diff --git a/src/main/java/com/hbm/blocks/machine/MachineVacuumDistill.java b/src/main/java/com/hbm/blocks/machine/MachineVacuumDistill.java index c53eda0da..6382054c7 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineVacuumDistill.java +++ b/src/main/java/com/hbm/blocks/machine/MachineVacuumDistill.java @@ -1,11 +1,14 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.oil.TileEntityMachineVacuumDistill; import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class MachineVacuumDistill extends BlockDummyable { @@ -15,11 +18,25 @@ public class MachineVacuumDistill extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { - if(meta >= 12) return new TileEntityMachineVacuumDistill(); - + if(meta >= 6) return new TileEntityProxyCombo().fluid().power(); return null; } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return standardOpenBehavior(world, x, y, z, player, side); + } + + @Override + protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + this.makeExtra(world, x - dir.offsetX + 1, y, z - dir.offsetZ + 1); + this.makeExtra(world, x - dir.offsetX + 1, y, z - dir.offsetZ - 1); + this.makeExtra(world, x - dir.offsetX - 1, y, z - dir.offsetZ + 1); + this.makeExtra(world, x - dir.offsetX - 1, y, z - dir.offsetZ - 1); + } @Override public int[] getDimensions() { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java b/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java index c646499cf..30b4fdfeb 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineEPress.java @@ -3,7 +3,6 @@ package com.hbm.inventory.container; import com.hbm.inventory.SlotMachineOutput; import com.hbm.inventory.SlotUpgrade; import com.hbm.items.ModItems; -import com.hbm.items.machine.IItemFluidIdentifier; import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemStamp; import com.hbm.tileentity.machine.TileEntityMachineEPress; diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachinePress.java b/src/main/java/com/hbm/inventory/container/ContainerMachinePress.java index d915dd2bf..a056d14e7 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachinePress.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachinePress.java @@ -1,12 +1,9 @@ package com.hbm.inventory.container; import com.hbm.inventory.SlotMachineOutput; -import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemMachineUpgrade; import com.hbm.items.machine.ItemStamp; import com.hbm.tileentity.machine.TileEntityMachinePress; -import api.hbm.energy.IBatteryItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineRefinery.java b/src/main/java/com/hbm/inventory/container/ContainerMachineRefinery.java index 9ad0896f4..86cf6a951 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineRefinery.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineRefinery.java @@ -63,43 +63,36 @@ public class ContainerMachineRefinery extends Container { } @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) - { + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { ItemStack var3 = null; Slot var4 = (Slot) this.inventorySlots.get(par2); - - if (var4 != null && var4.getHasStack()) - { + + if(var4 != null && var4.getHasStack()) { ItemStack var5 = var4.getStack(); var3 = var5.copy(); - - if (par2 <= 11) { - if (!this.mergeItemStack(var5, 12, this.inventorySlots.size(), true)) - { + + if(par2 <= 11) { + if(!this.mergeItemStack(var5, 12, this.inventorySlots.size(), true)) { return null; } - } - else if (!this.mergeItemStack(var5, 0, 1, false)) - if (!this.mergeItemStack(var5, 1, 2, false)) - if (!this.mergeItemStack(var5, 3, 4, false)) - if (!this.mergeItemStack(var5, 5, 6, false)) - if (!this.mergeItemStack(var5, 7, 8, false)) - if (!this.mergeItemStack(var5, 9, 10, false)) { - return null; - } - - if (var5.stackSize == 0) - { + } else if(!this.mergeItemStack(var5, 0, 1, false)) + if(!this.mergeItemStack(var5, 1, 2, false)) + if(!this.mergeItemStack(var5, 3, 4, false)) + if(!this.mergeItemStack(var5, 5, 6, false)) + if(!this.mergeItemStack(var5, 7, 8, false)) + if(!this.mergeItemStack(var5, 9, 10, false)) { + return null; + } + + if(var5.stackSize == 0) { var4.putStack((ItemStack) null); - } - else - { + } else { var4.onSlotChanged(); } } - + return var3; - } + } @Override public boolean canInteractWith(EntityPlayer player) { diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineVacuumDistill.java b/src/main/java/com/hbm/inventory/container/ContainerMachineVacuumDistill.java new file mode 100644 index 000000000..53c9f10ed --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineVacuumDistill.java @@ -0,0 +1,96 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotMachineOutput; +import com.hbm.tileentity.machine.oil.TileEntityMachineVacuumDistill; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.ICrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerMachineVacuumDistill extends Container { + + private TileEntityMachineVacuumDistill distill; + + public ContainerMachineVacuumDistill(InventoryPlayer invPlayer, TileEntityMachineVacuumDistill tedf) { + + distill = tedf; + + //Battery + this.addSlotToContainer(new Slot(tedf, 0, 26, 90)); + //Canister Input + this.addSlotToContainer(new Slot(tedf, 1, 44, 90)); + //Canister Output + this.addSlotToContainer(new SlotMachineOutput(tedf, 2, 44, 108)); + //Heavy Oil Input + this.addSlotToContainer(new Slot(tedf, 3, 80, 90)); + //Heavy Oil Output + this.addSlotToContainer(new SlotMachineOutput(tedf, 4, 80, 108)); + //Nahptha Input + this.addSlotToContainer(new Slot(tedf, 5, 98, 90)); + //Nahptha Output + this.addSlotToContainer(new SlotMachineOutput(tedf, 6, 98, 108)); + //Light Oil Input + this.addSlotToContainer(new Slot(tedf, 7, 116, 90)); + //Light Oil Output + this.addSlotToContainer(new SlotMachineOutput(tedf, 8, 116, 108)); + //Petroleum Input + this.addSlotToContainer(new Slot(tedf, 9, 134, 90)); + //Petroleum Output + this.addSlotToContainer(new SlotMachineOutput(tedf, 10, 134, 108)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 156 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 214)); + } + } + + @Override + public void addCraftingToCrafters(ICrafting crafting) { + super.addCraftingToCrafters(crafting); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if(par2 <= 10) { + if(!this.mergeItemStack(var5, 11, this.inventorySlots.size(), true)) { + return null; + } + } else if(!this.mergeItemStack(var5, 0, 1, false)) + if(!this.mergeItemStack(var5, 1, 2, false)) + if(!this.mergeItemStack(var5, 3, 4, false)) + if(!this.mergeItemStack(var5, 5, 6, false)) + if(!this.mergeItemStack(var5, 7, 8, false)) + if(!this.mergeItemStack(var5, 9, 10, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack) null); + } else { + var4.onSlotChanged(); + } + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return distill.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerMicrowave.java b/src/main/java/com/hbm/inventory/container/ContainerMicrowave.java index d60826d4a..90bba6cc8 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMicrowave.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMicrowave.java @@ -36,39 +36,33 @@ private TileEntityMicrowave microwave; } @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) - { + public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { ItemStack var3 = null; Slot var4 = (Slot) this.inventorySlots.get(par2); - - if (var4 != null && var4.getHasStack()) - { + + if(var4 != null && var4.getHasStack()) { ItemStack var5 = var4.getStack(); var3 = var5.copy(); - - if (par2 <= 2) { - if (!this.mergeItemStack(var5, 2, this.inventorySlots.size(), true)) - { + + if(par2 <= 2) { + if(!this.mergeItemStack(var5, 3, this.inventorySlots.size(), true)) { return null; } } else { - if (!this.mergeItemStack(var5, 0, 1, true)) - if (!this.mergeItemStack(var5, 2, 3, true)) + if(!this.mergeItemStack(var5, 0, 1, true)) + if(!this.mergeItemStack(var5, 2, 3, true)) return null; } - - if (var5.stackSize == 0) - { + + if(var5.stackSize == 0) { var4.putStack((ItemStack) null); - } - else - { + } else { var4.onSlotChanged(); } } - + return var3; - } + } @Override public boolean canInteractWith(EntityPlayer player) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineVacuumDistill.java b/src/main/java/com/hbm/inventory/gui/GUIMachineVacuumDistill.java new file mode 100644 index 000000000..ccc063692 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineVacuumDistill.java @@ -0,0 +1,62 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerMachineVacuumDistill; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.oil.TileEntityMachineVacuumDistill; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIMachineVacuumDistill extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_vacuum_distill.png"); + private TileEntityMachineVacuumDistill refinery; + + public GUIMachineVacuumDistill(InventoryPlayer invPlayer, TileEntityMachineVacuumDistill tedf) { + super(new ContainerMachineVacuumDistill(invPlayer, tedf)); + refinery = tedf; + + this.xSize = 176; + this.ySize = 238; + } + + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + refinery.tanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 44, guiTop + 70 - 52, 16, 52); + refinery.tanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 70 - 52, 16, 52); + refinery.tanks[2].renderTankInfo(this, mouseX, mouseY, guiLeft + 98, guiTop + 70 - 52, 16, 52); + refinery.tanks[3].renderTankInfo(this, mouseX, mouseY, guiLeft + 116, guiTop + 70 - 52, 16, 52); + refinery.tanks[4].renderTankInfo(this, mouseX, mouseY, guiLeft + 134, guiTop + 70 - 52, 16, 52); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 70 - 52, 16, 52, refinery.power, refinery.maxPower); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.refinery.hasCustomInventoryName() ? this.refinery.getInventoryName() : I18n.format(this.refinery.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int j = (int) (refinery.power * 54 / refinery.maxPower); + drawTexturedModalRect(guiLeft + 8, guiTop + 70 - j, 176, 52 - j, 16, j); + + refinery.tanks[0].renderTank(guiLeft + 26, guiTop + 70, this.zLevel, 34, 52); + refinery.tanks[1].renderTank(guiLeft + 80, guiTop + 70, this.zLevel, 16, 52); + refinery.tanks[2].renderTank(guiLeft + 98, guiTop + 70, this.zLevel, 16, 52); + refinery.tanks[3].renderTank(guiLeft + 116, guiTop + 70, this.zLevel, 16, 52); + refinery.tanks[4].renderTank(guiLeft + 134, guiTop + 70, this.zLevel, 16, 52); + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java index 99432ca4d..98264f867 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineVacuumDistill.java @@ -1,11 +1,38 @@ package com.hbm.tileentity.machine.oil; +import com.hbm.inventory.container.ContainerMachineVacuumDistill; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineVacuumDistill; +import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; -public class TileEntityMachineVacuumDistill extends TileEntityMachineBase { +import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +public class TileEntityMachineVacuumDistill extends TileEntityMachineBase implements IEnergyUser, IFluidStandardTransceiver, IGUIProvider { + + public long power; + public static final long maxPower = 1_000_000; + + public FluidTank[] tanks; public TileEntityMachineVacuumDistill() { - super(0); + super(11); + + this.tanks = new FluidTank[5]; + this.tanks[0] = new FluidTank(Fluids.OIL, 64_000); + this.tanks[1] = new FluidTank(Fluids.HEAVYOIL, 24_000); + this.tanks[2] = new FluidTank(Fluids.NAPHTHA, 24_000); + this.tanks[3] = new FluidTank(Fluids.LIGHTOIL, 24_000); + this.tanks[4] = new FluidTank(Fluids.PETROLEUM, 24_000); } @Override @@ -17,4 +44,70 @@ public class TileEntityMachineVacuumDistill extends TileEntityMachineBase { public void updateEntity() { } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 1, + yCoord, + zCoord - 1, + xCoord + 2, + yCoord + 9, + zCoord + 2 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public long getPower() { + return power; + } + + @Override + public void setPower(long power) { + this.power = power; + } + + @Override + public long getMaxPower() { + return maxPower; + } + + @Override + public FluidTank[] getAllTanks() { + return null; + } + + @Override + public FluidTank[] getSendingTanks() { + return null; + } + + @Override + public FluidTank[] getReceivingTanks() { + return null; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerMachineVacuumDistill(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIMachineVacuumDistill(player.inventory, this); + } } diff --git a/src/main/resources/assets/hbm/models/machines/vacuum_distill.obj b/src/main/resources/assets/hbm/models/machines/vacuum_distill.obj index 86f67b7d3..14ebd5ea0 100644 --- a/src/main/resources/assets/hbm/models/machines/vacuum_distill.obj +++ b/src/main/resources/assets/hbm/models/machines/vacuum_distill.obj @@ -1599,7 +1599,7 @@ vt 0.692308 0.243590 vt 0.649038 0.602564 vt 0.605769 0.243590 vt 0.004808 0.692308 -vt -0.000000 0.602564 +vt 0.000000 0.602564 vt 0.605769 0.602564 vt 0.562500 0.243590 vt 0.562500 0.602564 @@ -1629,7 +1629,7 @@ vt 0.394231 0.692308 vt 0.350962 0.692308 vt 0.307692 0.692308 vt 0.264423 0.692308 -vt 0.219513 0.688949 +vt 0.221154 0.692308 vt 0.206731 0.692308 vt 0.177885 0.692308 vt 0.163462 0.692308 @@ -3052,7 +3052,7 @@ vt 0.423077 0.692308 vt 0.379808 0.692308 vt 0.336538 0.692308 vt 0.293269 0.692308 -vt 0.248453 0.688949 +vt 0.250000 0.692308 vt 0.461538 0.846154 vt 0.000000 -0.000000 vt 1.000000 0.538462 diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_mixer.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_mixer.png index 65143bb3ac775f544e6b4af8dfd151ccaa0f3992..dae11341596fb9f50342357f592ecdd19a724971 100644 GIT binary patch delta 2521 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 literal 1205 zcmeAS@N?(olHy`uVBq!ia0vp^7l3#U2OE&&vr|n5QY^(zo*^7SP{WbZ0p#X*x;TbZ z%z1m)(C@W}4EuwRUCd87Le{%gXk|Fw{J(kJ%3@|)1XEL1tev6ul$W# zI_1-!KQ=#GPoF-0^6jnt>;GCf9XDDDQ>6FoUgNdBWqiLP@9<6xY*Z-NIOXE1^|$7w z1~)1^km)$FYl`dn_ZuSDx5sDIUJqhzYG80YpeU1jJ7?G5qKNmuA5QqP)p>jKH*s&t zwOMOz=jZILyS?*{#D;aRy#gCE?j|0sTwVKsrDNOP;xD-|Tmre$=QI80=G|13nV-0M z{?AOk{C$2~`Hx&IUT9cQ&E#^suXmTM9{;V~d@PKNQ5%4s>Q_GF(=ctVHurw<+?R8h zb#L6^f4q>%(WL>!n@m9EAeT9y3X9)hKmY01&Rx5HJ)PJQ{A=c)4T@Ue;Ds1yDVPy$v2{HcOXFh3T|0MLT75o! zC16F}m&;6|9854f4;YxGe|`4-v(6NTi(CHPf0%pw>-WE(cFoyR7kH}R`&+~HcNzao zs=M`Od8(Fx@9O%u)33jeHt%2nIoR1^*0xHSdrJE%Wv>0+op|K~FendyV`5o4^_{Qfl_M}H4GWlDE?)|?V0`3Ua#;GX_~QHb6%FTIzViC=yBP%> z?D{>87G-)SY@1OajNYX_6F%%uj(q8p$Ksk6X;-=)kHJ z^!#4qg~#^~f9n7H%f2+?-_H2|WlxHc{0a}>9ehV3bJOOneSYV?I$Dy0+mKtcFa68f zdEa(&VT+xP&9A&)KL2C+{k}RZDFTxZ_A3_t$F_Z z`APklxH!MO>;G!sX0JWV&wBpl?O*?kk5}3Y)F@%3CL4Z}&0p{Syq{R?H~aUcFQq!7 z8EM}C*keBJs}}(>lUY~UKf5>i@|F3A_idL`f(Kc#g58l{zrSQWdiF7UzA`Y=1vGZ_ zOkEzg|JD-yr?0~h3c+bNK_o8?X!_dsUh(zk_Np(p-obyaRKf24B>D6RphZ*uGwiy= WR&2iPb^)*)V(@hJb6Mw<&;$TnWe+C+