From c33d7176311fd15566cd86b89b1f158fe185f4a7 Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 17 Nov 2025 22:19:49 +0100 Subject: [PATCH] the lads --- changelog | 1 + .../hbm/inventory/gui/GUIFusionKlystron.java | 10 +++-- .../com/hbm/inventory/gui/GUIFusionTorus.java | 23 +++++++--- .../module/machine/ModuleMachineFusion.java | 2 + .../TileEntityMachineCompressorBase.java | 2 +- .../fusion/TileEntityFusionBreeder.java | 40 ++++++++++++++++++ .../fusion/TileEntityFusionCollector.java | 40 ++++++++++++++++++ .../fusion/TileEntityFusionKlystron.java | 2 + .../machine/fusion/TileEntityFusionTorus.java | 24 +++++++++-- .../hbm/textures/models/fusion/breeder.png | Bin 1583 -> 3638 bytes .../hbm/textures/models/fusion/collector.png | Bin 1548 -> 4219 bytes 11 files changed, 131 insertions(+), 13 deletions(-) diff --git a/changelog b/changelog index 8bb348e59..b6193771d 100644 --- a/changelog +++ b/changelog @@ -63,3 +63,4 @@ * Fixed assembly and chemical factories not properly saving their recipe fluid buffers * Fixed light blue and light gray dyes not working when dyeing cables * Fixed bismuth armor not having a valid repair material +* Fixed compressors needing at least one mB of fluid more to process a recipe than necessary diff --git a/src/main/java/com/hbm/inventory/gui/GUIFusionKlystron.java b/src/main/java/com/hbm/inventory/gui/GUIFusionKlystron.java index 88b74d3e6..162167848 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIFusionKlystron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIFusionKlystron.java @@ -50,7 +50,11 @@ public class GUIFusionKlystron extends GuiInfoContainer { super.drawScreen(mouseX, mouseY, interp); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 18, 16, 52, klystron.power, klystron.getMaxPower()); + + drawCustomInfoStat(mouseX, mouseY, guiLeft + 43, guiTop + 71, 18, 18, mouseX, mouseY, BobMathUtil.getShortNumber(klystron.output) + "KyU / " + BobMathUtil.getShortNumber(klystron.outputTarget) + "KyU"); klystron.compair.renderTankInfo(this, mouseX, mouseY, guiLeft + 76, guiTop + 71, 18, 18); + drawCustomInfoStat(mouseX, mouseY, guiLeft + 115, guiTop + 71, 18, 18, mouseX, mouseY, BobMathUtil.getShortNumber(klystron.output) + "HE / " + BobMathUtil.getShortNumber(klystron.outputTarget) + "HE"); + } @Override @@ -83,12 +87,12 @@ public class GUIFusionKlystron extends GuiInfoContainer { // power LED if(powerGauge >= 0.5 && klystron.output > 0) drawTexturedModalRect(guiLeft + 160, guiTop + 71, 210, 8, 8, 8); - else if(powerGauge < 0.5 && klystron.output > 0) drawTexturedModalRect(guiLeft + 160, guiTop + 71, 210, 0, 8, 8); + else if(powerGauge > 0) drawTexturedModalRect(guiLeft + 160, guiTop + 71, 210, 0, 8, 8); // cooling LED if(airGauge >= 0.5 && klystron.output > 0) drawTexturedModalRect(guiLeft + 170, guiTop + 71, 210, 8, 8, 8); - else if(airGauge < 0.5 && klystron.output > 0) drawTexturedModalRect(guiLeft + 170, guiTop + 71, 210, 0, 8, 8); + else if(airGauge > 0) drawTexturedModalRect(guiLeft + 170, guiTop + 71, 210, 0, 8, 8); // action LED - if(klystron.output >= klystron.outputTarget) drawTexturedModalRect(guiLeft + 180, guiTop + 71, 210, 8, 8, 8); + if(klystron.output >= klystron.outputTarget && klystron.output > 0) drawTexturedModalRect(guiLeft + 180, guiTop + 71, 210, 8, 8, 8); else if(klystron.output > 0) drawTexturedModalRect(guiLeft + 180, guiTop + 71, 210, 0, 8, 8); // output energy diff --git a/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java b/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java index fe18029b4..53334a99d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java +++ b/src/main/java/com/hbm/inventory/gui/GUIFusionTorus.java @@ -40,10 +40,25 @@ public class GUIFusionTorus extends GuiInfoContainer { torus.tanks[3].renderTankInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 52); torus.coolantTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 188, guiTop + 46, 16, 52); torus.coolantTanks[1].renderTankInfo(this, mouseX, mouseY, guiLeft + 206, guiTop + 46, 16, 52); + + FusionRecipe recipe = (FusionRecipe) FusionRecipes.INSTANCE.recipeNameMap.get(this.torus.fusionModule.recipe); + + if(recipe != null) { + drawCustomInfoStat(mouseX, mouseY, guiLeft + 43, guiTop + 115, 18, 18, mouseX, mouseY, BobMathUtil.getShortNumber(torus.klystronEnergy) + "KyU / " + BobMathUtil.getShortNumber(recipe.ignitionTemp) + "KyU"); + drawCustomInfoStat(mouseX, mouseY, guiLeft + 79, guiTop + 115, 18, 18, mouseX, mouseY, BobMathUtil.getShortNumber(torus.plasmaEnergy) + "TU / " + BobMathUtil.getShortNumber(recipe.outputTemp) + "TU"); + String[] lines = new String[recipe.inputFluid.length]; + for(int i = 0; i < lines.length; i++) { + int consumption = (int) Math.ceil(recipe.inputFluid[i].fill * torus.fuelConsumption); + lines[i] = consumption + "mB/t " + recipe.inputFluid[i].type.getLocalizedName(); + } + drawCustomInfoStat(mouseX, mouseY, guiLeft + 115, guiTop + 115, 18, 18, mouseX, mouseY, lines); + } else { + drawCustomInfoStat(mouseX, mouseY, guiLeft + 43, guiTop + 115, 18, 18, mouseX, mouseY, "0KyU / 0KyU"); + drawCustomInfoStat(mouseX, mouseY, guiLeft + 79, guiTop + 115, 18, 18, mouseX, mouseY, "0TU / 0TU"); + } if(guiLeft + 43 <= mouseX && guiLeft + 43 + 18 > mouseX && guiTop + 80 < mouseY && guiTop + 80 + 18 >= mouseY) { - if(this.torus.fusionModule.recipe != null && FusionRecipes.INSTANCE.recipeNameMap.containsKey(this.torus.fusionModule.recipe)) { - FusionRecipe recipe = (FusionRecipe) FusionRecipes.INSTANCE.recipeNameMap.get(this.torus.fusionModule.recipe); + if(recipe != null) { this.func_146283_a(recipe.print(), mouseX, mouseY); } else { this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY); @@ -112,10 +127,8 @@ public class GUIFusionTorus extends GuiInfoContainer { drawTexturedModalRect(guiLeft + 92, guiTop + 76, 246, 0, 3, 6); } - double demoGauge = BobMathUtil.sps((Minecraft.getMinecraft().theWorld.getTotalWorldTime() + interp) * 0.25) / 2 + 0.5D; - double inputGauge = recipe == null ? 0 : Math.min(((double) torus.klystronEnergy / (double) recipe.ignitionTemp), 1.5) / 1.5D; - double outputGauge = recipe == null ? 0 : Math.min(((double) torus.plasmaEnergy / (double) recipe.outputTemp), 1.5) / 1.5D; + double outputGauge = recipe == null ? 0 : Math.min(((double) torus.plasmaEnergy / (double) recipe.outputTemp), 1); // input energy GaugeUtil.drawSmoothGauge(guiLeft + 52, guiTop + 124, this.zLevel, inputGauge, 5, 2, 1, 0xA00000); diff --git a/src/main/java/com/hbm/module/machine/ModuleMachineFusion.java b/src/main/java/com/hbm/module/machine/ModuleMachineFusion.java index 83424b63b..3d4c40814 100644 --- a/src/main/java/com/hbm/module/machine/ModuleMachineFusion.java +++ b/src/main/java/com/hbm/module/machine/ModuleMachineFusion.java @@ -42,6 +42,8 @@ public class ModuleMachineFusion extends ModuleMachineBase { @Override protected boolean hasInput(GenericRecipe recipe) { + if(processSpeed <= 0) return false; + if(recipe.inputFluid != null) { for(int i = 0; i < Math.min(recipe.inputFluid.length, inputTanks.length); i++) { if(inputTanks[i].getFill() > 0 && inputTanks[i].getFill() < (int) Math.ceil(recipe.inputFluid[i].fill * processSpeed)) return false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressorBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressorBase.java index 74e7ccadf..26f9f6049 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressorBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCompressorBase.java @@ -161,7 +161,7 @@ public abstract class TileEntityMachineCompressorBase extends TileEntityMachineB return tanks[0].getFill() >= 1000 && tanks[1].getFill() + 1000 <= tanks[1].getMaxFill(); } - return tanks[0].getFill() > recipe.inputAmount && tanks[1].getFill() + recipe.output.fill <= tanks[1].getMaxFill(); + return tanks[0].getFill() >= recipe.inputAmount && tanks[1].getFill() + recipe.output.fill <= tanks[1].getMaxFill(); } public void process() { diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBreeder.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBreeder.java index 161b6fe04..24d58bf62 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBreeder.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionBreeder.java @@ -1,12 +1,52 @@ package com.hbm.tileentity.machine.fusion; +import com.hbm.uninos.GenNode; +import com.hbm.uninos.UniNodespace; +import com.hbm.uninos.networkproviders.PlasmaNetworkProvider; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityFusionBreeder extends TileEntity { + protected GenNode plasmaNode; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(plasmaNode == null || plasmaNode.expired) { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10).getOpposite(); + plasmaNode = UniNodespace.getNode(worldObj, xCoord + dir.offsetX * 2, yCoord + 2, zCoord + dir.offsetZ * 2, PlasmaNetworkProvider.THE_PROVIDER); + + if(plasmaNode == null) { + plasmaNode = new GenNode(PlasmaNetworkProvider.THE_PROVIDER, + new BlockPos(xCoord + dir.offsetX * 2, yCoord + 2, zCoord + dir.offsetZ * 2)) + .setConnections(new DirPos(xCoord + dir.offsetX * 3, yCoord + 2, zCoord + dir.offsetZ * 3, dir)); + + UniNodespace.createNode(worldObj, plasmaNode); + } + } + + if(plasmaNode != null && plasmaNode.hasValidNet()) plasmaNode.net.addReceiver(this); + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.plasmaNode != null) UniNodespace.destroyNode(worldObj, plasmaNode); + } + } + AxisAlignedBB bb = null; @Override diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionCollector.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionCollector.java index 6f04b20fe..c2984c199 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionCollector.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionCollector.java @@ -1,12 +1,52 @@ package com.hbm.tileentity.machine.fusion; +import com.hbm.uninos.GenNode; +import com.hbm.uninos.UniNodespace; +import com.hbm.uninos.networkproviders.PlasmaNetworkProvider; +import com.hbm.util.fauxpointtwelve.BlockPos; +import com.hbm.util.fauxpointtwelve.DirPos; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityFusionCollector extends TileEntity { + protected GenNode plasmaNode; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(plasmaNode == null || plasmaNode.expired) { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10).getOpposite(); + plasmaNode = UniNodespace.getNode(worldObj, xCoord + dir.offsetX * 2, yCoord + 2, zCoord + dir.offsetZ * 2, PlasmaNetworkProvider.THE_PROVIDER); + + if(plasmaNode == null) { + plasmaNode = new GenNode(PlasmaNetworkProvider.THE_PROVIDER, + new BlockPos(xCoord + dir.offsetX * 2, yCoord + 2, zCoord + dir.offsetZ * 2)) + .setConnections(new DirPos(xCoord + dir.offsetX * 3, yCoord + 2, zCoord + dir.offsetZ * 3, dir)); + + UniNodespace.createNode(worldObj, plasmaNode); + } + } + + if(plasmaNode != null && plasmaNode.hasValidNet()) plasmaNode.net.addReceiver(this); + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(!worldObj.isRemote) { + if(this.plasmaNode != null) UniNodespace.destroyNode(worldObj, plasmaNode); + } + } + AxisAlignedBB bb = null; @Override diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystron.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystron.java index 51adde280..48ab63193 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystron.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionKlystron.java @@ -89,6 +89,8 @@ public class TileEntityFusionKlystron extends TileEntityMachineBase implements I this.compair.setFill(this.compair.getFill() - airReq); } + if(output < outputTarget / 50) output = 0; + if(klystronNode == null || klystronNode.expired) { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10).getOpposite(); klystronNode = UniNodespace.getNode(worldObj, xCoord + dir.offsetX * 4, yCoord + 2, zCoord + dir.offsetZ * 4, KlystronNetworkProvider.THE_PROVIDER); diff --git a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java index c40b39fec..95b4ab17c 100644 --- a/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java +++ b/src/main/java/com/hbm/tileentity/machine/fusion/TileEntityFusionTorus.java @@ -1,5 +1,7 @@ package com.hbm.tileentity.machine.fusion; +import java.util.Map.Entry; + import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerFusionTorus; import com.hbm.inventory.fluid.Fluids; @@ -120,10 +122,23 @@ public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIP this.power = Library.chargeTEFromItems(slots, 0, power, this.getMaxPower()); + int collectors = 0; + for(int i = 0; i < 4; i++) { connections[i] = false; if(klystronNodes[i] != null && klystronNodes[i].hasValidNet() && !klystronNodes[i].net.providerEntries.isEmpty()) connections[i] = true; if(!connections[i] && plasmaNodes[i] != null && plasmaNodes[i].hasValidNet() && !plasmaNodes[i].net.receiverEntries.isEmpty()) connections[i] = true; + + if(plasmaNodes[i] != null && plasmaNodes[i].hasValidNet() && !plasmaNodes[i].net.receiverEntries.isEmpty()) { + + for(Object o : plasmaNodes[i].net.receiverEntries.entrySet()) { + Entry entry = (Entry) o; + if(entry.getKey() instanceof TileEntityFusionCollector) { + collectors++; + } + break; + } + } } FusionRecipe recipe = (FusionRecipe) this.fusionModule.getRecipe(); @@ -132,14 +147,15 @@ public class TileEntityFusionTorus extends TileEntityCooledBase implements IGUIP double fuel0Factor = recipe != null && recipe.inputFluid.length > 0 ? getSpeedScaled(tanks[0].getMaxFill(), tanks[0].getFill()) : 1D; double fuel1Factor = recipe != null && recipe.inputFluid.length > 1 ? getSpeedScaled(tanks[1].getMaxFill(), tanks[1].getFill()) : 1D; double fuel2Factor = recipe != null && recipe.inputFluid.length > 2 ? getSpeedScaled(tanks[2].getMaxFill(), tanks[2].getFill()) : 1D; - double klystronFactor = recipe != null ? getSpeedScaled(recipe.ignitionTemp, this.klystronEnergy) : 1D; - double factor = BobMathUtil.min(powerFactor, fuel0Factor, fuel1Factor, fuel2Factor, klystronFactor); + double factor = BobMathUtil.min(powerFactor, fuel0Factor, fuel1Factor, fuel2Factor); + + boolean ignition = recipe != null ? recipe.ignitionTemp <= this.klystronEnergy : true; this.plasmaEnergy = 0; this.fuelConsumption = 0; - this.fusionModule.preUpdate(factor, 0.5D); - this.fusionModule.update(1D, 1D, this.isCool(), slots[1]); + this.fusionModule.preUpdate(factor, collectors * 0.5D); + this.fusionModule.update(1D, 1D, this.isCool() && ignition, slots[1]); this.didProcess = this.fusionModule.didProcess; if(this.fusionModule.markDirty) this.markDirty(); if(didProcess && recipe != null) { diff --git a/src/main/resources/assets/hbm/textures/models/fusion/breeder.png b/src/main/resources/assets/hbm/textures/models/fusion/breeder.png index e4bd6d30fcb354ece149f683711856043198f52e..b79be9a62dff92950f877ad3c6c22a34d975ceec 100644 GIT binary patch literal 3638 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 literal 1583 zcmah~3rtgI7`?Q`76gl;f(nJ2s8fa=lPDyt#g=zLoi9d#3J6gY23pZlsE83e)@f_h zRfJOIp_Z*+&{8uft!1v;K%SEdNFRdD*pPStOJLi1gIsYx* zwPU0erQj4a&d~ph=A+8`}(L4(d#(RPlh586Bp&P zvXZu|nUo4?U{eLEJlgK~C-Y9iR8UX4HQn!KKlit`#$OvB0Ne-^tL@ApfB8i6kYOfm zz^0!KbSVqh`XTa?=y;cx9XL)u5(YzWom5Tvz{GH%kmWCi%M%TrfR^QePOsd1hAk&W zrOSI%1Jp3{&JqDneiSu*8pHdmeTWB(mHIX%E8uG~g5xL#w!Bg(x_L%D7Q!J=jK5{R z6tLtiH>Gb9!TA&8^{S1g2m9A2fv@{Z>q?7dVkT-tAb>y3MPNt)w4{g;eBA;DLSGGT zzT0niK~Cx~{Q-f@bDik@ii}1jE1>rrJ3j7lA5n`9HI@x-G`TATw==(2uFaz*ATWn& zpQxEVD}rhzJgg}@4Nmzfn{`1I$Sh%Ms^}Dp*JZbLKKjG-Vk#smRxDB0;L3zK)>TY_ zDSd*8A7fLk&7bM~5DfifS$T>f5tw_Rp|)OPJ?;l5^M=l^uyu?~kwqi4hF6>ySAUiJ z`suLGS8xL?Kc6G8Y~Z8uNxM3sjF_r8it-;AK1E=mWn}_%<2L8R6FK0On{-5@lPjin zv^uMG-eci<99foMs#1l@M3N)T%Bd~tXRQUh)g?w7-?IF4Qn;bo%k%BmY_a(P5yw1o z%Y@v)0`I8`d8W>^eWTSKH0!Xm-MeJVoR1Yxs1hzw^=IhqoY)SsN2?d&ZIdlJ-JiLq zor?H-cQquqpQ1h4d)Aghm(6T9Mu~Xk4w_)YuGh6)LwLasCaT9k5X~qzxHex4e086y zUOA2(Gk1?*P0mv;R?)*Avc?Ujd3lW_Q>NbMHT%K}fN&?Ns+G>rGbip1?)K0J<#sS5 z2_(k65(HoP>CnTdySPClLk|+Q{LI8-oGUzrn2OByg_@h-WpT$9IC*fbMzLghP$yPQ zwHh>!+1EPZe4PiTdzhiGTWBBAe{IXl7G_t+3b!8TyH1Be^GVht7tWL(amQ zmi&MUO6VeMddXU{&3;|OF>u2jp4#o5W#pBPQZo~4a)(LHxu~Ej$j4+YHpU19Ly|B3 zo9J&Ta)=tXlMH3_-Hz-~91}u}N&B%XUbl(i2}8%4yCtF8FN>gXxX_&nsn#Hf&>vZK zn@rq$XMrT&|0tKmxtpaN;c! zcc(Q(ve*IpSI}Vrd%hEDM@{FVo0o)5t%9tWl`dKLmrv4ot diff --git a/src/main/resources/assets/hbm/textures/models/fusion/collector.png b/src/main/resources/assets/hbm/textures/models/fusion/collector.png index c147b70f55494c667a47b2523306e4e21eb2f9f9..f2383cf8b93a9376b4b06ac0e83aaeddd63f4d50 100644 GIT binary patch literal 4219 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 U>rx>2ZvtRpW@TDw;_>AF0YiDRod5s; literal 1548 zcmYjRdpML?93Hn^YDj2XO<0Z3IQac)2hKw2ZOk4Z-{`kK0JVb7~Ijp z)(r-ea02V=avQ+g|1UQN_((?_bUY>po;bOHR2WRA-O<+OSakkJcH7xed({mS#TjmK zbCxL!MOz1LB=035@x5(o0r+qwD-Jc$+(DU=Xb@!bRv$vR#qDG$8TrOM>M!xN=nB$U zHj~%7_mc6!cxs+vSms%tligqIgYZqOffG7M;S2Rx#N;%$1D-+ z-Xa9TYysmdDQm#PkhEsCU=C;|AmMerup)Jowau6{8>bkqi*|~a#1rBrQ>-^rjnT4MFwxXL7AQ z`Up%DC#|$M9ZhgJmDLY6b|Phmx6wJY_?KNSLaV&MN!ibsBN%L}Enq{{K9SxkV2SSLv zKZbb?S<}DQ;Ad*~iOIeGDQ=rTp^l;fUf6aWpeRsGmWfj|%1}dDCm3L@6T}RhOsPpG zQr08Yix7VW{HTIj6>*@p=lYpIxM11t6`MpZo7w-!)r(mUGXA$t>pxj~*7G zlN~Bj-}7HzC6oHNiS&IwZV@8gi);mz;pRUH%&_~a+LhY3SjW)=@MIVCke2alJeb6Wj?DzWLX zy;)+-VtMOxs0$(FT!74j0N-gRgebDcV8cCtMW%t`y*lDUKktDM@gx78nmkO!MwB6f zv5mrMPjl2lpE%5Bc+9ewj0ERvjr3&sS(>d`eriyhov+H@BVb$c&@S$^-GWoCwT1r(1y{Ku{Gn~lkIxgSmWau&<_2;5Px;c zdMpiN)Sx&sgd#9Kdz$gn{X@+QbQlmc+ Q!FY!`+Bw@+9rV5QFHx)XJOBUy