From 9b6d67a02b7bef92bb649d055d74ffa7f9395a65 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Sat, 8 Mar 2014 19:23:03 -0800 Subject: [PATCH] Changed gutter to be stone --- .../resonantinduction/archaic/Archaic.java | 2 +- .../archaic/fluid/gutter/RenderGutter.java | 115 ------------------ .../archaic/fluid/gutter/TileGutter.java | 109 +++++++++++++++++ .../resonantinduction/models/gutter.png | Bin 1929 -> 5578 bytes 4 files changed, 110 insertions(+), 116 deletions(-) delete mode 100644 archaic/src/main/java/resonantinduction/archaic/fluid/gutter/RenderGutter.java diff --git a/archaic/src/main/java/resonantinduction/archaic/Archaic.java b/archaic/src/main/java/resonantinduction/archaic/Archaic.java index 1f90c630..c4f97a20 100644 --- a/archaic/src/main/java/resonantinduction/archaic/Archaic.java +++ b/archaic/src/main/java/resonantinduction/archaic/Archaic.java @@ -147,7 +147,7 @@ public class Archaic GameRegistry.addRecipe(new ShapedOreRecipe(blockTurntable, "SSS", "PGP", "WWW", 'S', Block.stone, 'G', UniversalRecipe.MOTOR.get(), 'P', Block.pistonBase, 'W', "logWood")); GameRegistry.addRecipe(new ShapedOreRecipe(blockCast, "I I", "IBI", "III", 'S', Item.ingotIron, 'B', Block.fenceIron)); - GameRegistry.addRecipe(new ShapedOreRecipe(blockGutter, "S S", "I I", "III", 'S', Item.stick, 'I', "plankWood")); + GameRegistry.addRecipe(new ShapedOreRecipe(blockGutter, "S S", "I I", "III", 'S', Item.stick, 'I', Block.cobblestone)); GameRegistry.addRecipe(new ShapedOreRecipe(blockGrate, "WBW", "B B", "WBW", 'B', Block.fenceIron, 'W', "plankWood")); GameRegistry.addRecipe(new ShapedOreRecipe(blockHotPlate, "SSS", "III", 'I', Item.ingotIron, 'S', Block.stone)); GameRegistry.addRecipe(new ShapedOreRecipe(blockMillstone, "SPS", "SAS", "SSS", 'P', Block.pistonBase, 'A', Item.pickaxeStone, 'S', Block.stone)); diff --git a/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/RenderGutter.java b/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/RenderGutter.java deleted file mode 100644 index aaa03e86..00000000 --- a/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/RenderGutter.java +++ /dev/null @@ -1,115 +0,0 @@ -package resonantinduction.archaic.fluid.gutter; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.model.AdvancedModelLoader; -import net.minecraftforge.client.model.IModelCustom; -import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; - -import org.lwjgl.opengl.GL11; - -import resonantinduction.archaic.fluid.tank.TileTank; -import resonantinduction.core.Reference; -import universalelectricity.api.vector.Vector3; -import calclavia.lib.render.FluidRenderUtility; -import calclavia.lib.render.RenderUtility; -import calclavia.lib.render.item.ISimpleItemRenderer; -import calclavia.lib.utility.FluidUtility; -import calclavia.lib.utility.WorldUtility; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class RenderGutter extends TileEntitySpecialRenderer implements ISimpleItemRenderer -{ - public static final RenderGutter INSTANCE = new RenderGutter(); - - public static final IModelCustom MODEL = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "gutter.tcn"); - public static ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "gutter.png"); - - public static void render(int meta, byte sides) - { - RenderUtility.bind(TEXTURE); - - for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) - { - if (dir != ForgeDirection.UP && dir != ForgeDirection.DOWN) - { - if (!WorldUtility.isEnabledSide(sides, dir)) - { - GL11.glPushMatrix(); - RenderUtility.rotateBlockBasedOnDirection(dir); - MODEL.renderOnly("left", "backCornerL", "frontCornerL"); - GL11.glPopMatrix(); - } - } - } - - if (!WorldUtility.isEnabledSide(sides, ForgeDirection.DOWN)) - { - MODEL.renderOnly("base"); - } - else - { - GL11.glPushMatrix(); - GL11.glRotatef(-90, 0, 0, 1); - MODEL.renderOnly("backCornerL", "frontCornerL"); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glRotatef(90, 0, 1, 0); - GL11.glRotatef(-90, 0, 0, 1); - MODEL.renderOnly("backCornerL", "frontCornerL"); - GL11.glPopMatrix(); - } - } - - @Override - public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) - { - TileGutter tile = ((TileGutter) tileEntity); - - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - - FluidStack liquid = tile.getInternalTank().getFluid(); - int capacity = tile.getInternalTank().getCapacity(); - byte renderSides = (tile instanceof TileGutter ? tile.renderSides : (byte) 0); - - render(0, renderSides); - - if (tileEntity.worldObj != null) - { - FluidTank tank = ((TileGutter) tileEntity).getInternalTank(); - double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity(); - - if (percentageFilled > 0.1) - { - GL11.glPushMatrix(); - GL11.glScaled(0.95, 0.95, 0.95); - - double ySouthEast = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.EAST); - double yNorthEast = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.EAST); - double ySouthWest = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.WEST); - double yNorthWest = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.WEST); - - FluidRenderUtility.renderFluidTesselation(tank, ySouthEast, yNorthEast, ySouthWest, yNorthWest); - GL11.glPopMatrix(); - } - } - - GL11.glPopMatrix(); - } - - @Override - public void renderInventoryItem(ItemStack itemStack) - { - GL11.glPushMatrix(); - GL11.glTranslated(0.5, 0.5, 0.5); - render(itemStack.getItemDamage(), Byte.parseByte("001100", 2)); - GL11.glPopMatrix(); - } -} \ No newline at end of file diff --git a/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/TileGutter.java b/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/TileGutter.java index 0f43efbb..4069610b 100644 --- a/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/TileGutter.java +++ b/archaic/src/main/java/resonantinduction/archaic/fluid/gutter/TileGutter.java @@ -3,23 +3,36 @@ package resonantinduction.archaic.fluid.gutter; import java.util.ArrayList; import java.util.List; +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.IFluidHandler; import resonantinduction.archaic.fluid.grate.TileGrate; +import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; import resonantinduction.core.fluid.TilePressureNode; import resonantinduction.core.grid.fluid.IPressureNodeProvider; import resonantinduction.core.grid.fluid.PressureNode; import universalelectricity.api.vector.Vector3; +import calclavia.lib.content.module.TileRender; import calclavia.lib.prefab.vector.Cuboid; +import calclavia.lib.render.FluidRenderUtility; +import calclavia.lib.render.RenderUtility; import calclavia.lib.utility.FluidUtility; import calclavia.lib.utility.WorldUtility; @@ -240,4 +253,100 @@ public class TileGutter extends TilePressureNode return from != ForgeDirection.UP && !fluid.isGaseous(); } + @SideOnly(Side.CLIENT) + @Override + protected TileRender newRenderer() + { + return new TileRender() + { + public final IModelCustom MODEL = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "gutter.tcn"); + public final ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "gutter.png"); + + @Override + public boolean renderStatic(Vector3 position) + { + return true; + } + + @Override + public boolean renderDynamic(Vector3 position, boolean isItem, float frame) + { + GL11.glPushMatrix(); + GL11.glTranslated(position.x + 0.5, position.y + 0.5, position.z + 0.5); + + FluidStack liquid = getInternalTank().getFluid(); + int capacity = getInternalTank().getCapacity(); + + render(0, renderSides); + + if (world() != null) + { + FluidTank tank = getInternalTank(); + double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity(); + + if (percentageFilled > 0.1) + { + GL11.glPushMatrix(); + GL11.glScaled(0.990, 0.99, 0.990); + + double ySouthEast = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, world(), position(), ForgeDirection.SOUTH, ForgeDirection.EAST); + double yNorthEast = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, world(), position(), ForgeDirection.NORTH, ForgeDirection.EAST); + double ySouthWest = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, world(), position(), ForgeDirection.SOUTH, ForgeDirection.WEST); + double yNorthWest = FluidUtility.getAveragePercentageFilledForSides(TileGutter.class, percentageFilled, world(), position(), ForgeDirection.NORTH, ForgeDirection.WEST); + + FluidRenderUtility.renderFluidTesselation(tank, ySouthEast, yNorthEast, ySouthWest, yNorthWest); + GL11.glPopMatrix(); + } + } + + GL11.glPopMatrix(); + return true; + } + + @Override + public boolean renderItem(ItemStack itemStack) + { + GL11.glTranslated(0.5, 0.5, 0.5); + render(itemStack.getItemDamage(), Byte.parseByte("001100", 2)); + return true; + } + + public void render(int meta, byte sides) + { + RenderUtility.bind(TEXTURE); + + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + if (dir != ForgeDirection.UP && dir != ForgeDirection.DOWN) + { + if (!WorldUtility.isEnabledSide(sides, dir)) + { + GL11.glPushMatrix(); + RenderUtility.rotateBlockBasedOnDirection(dir); + MODEL.renderOnly("left", "backCornerL", "frontCornerL"); + GL11.glPopMatrix(); + } + } + } + + if (!WorldUtility.isEnabledSide(sides, ForgeDirection.DOWN)) + { + MODEL.renderOnly("base"); + } + else + { + GL11.glPushMatrix(); + GL11.glRotatef(-90, 0, 0, 1); + MODEL.renderOnly("backCornerL", "frontCornerL"); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glRotatef(90, 0, 1, 0); + GL11.glRotatef(-90, 0, 0, 1); + MODEL.renderOnly("backCornerL", "frontCornerL"); + GL11.glPopMatrix(); + } + } + }; + } + } diff --git a/src/main/resources/assets/resonantinduction/models/gutter.png b/src/main/resources/assets/resonantinduction/models/gutter.png index d70ec44ff25dda03def08d90242176f1b3a8dccb..cd74e3abfe87ee2ea94512238329c6ed21859ef2 100644 GIT binary patch literal 5578 zcmaKu_d6V48^%Y7-Xcm6f@s<3QKGY}6Lt08mPD5gQKLj}LDbDE5zz^PY!JP(g6O>m z(QBgYJKulc{bA@hw|GV&j><{+45q8=?1A)n>FnXjrVfL#d3t*wp1V2%!0Q>bffL+d zi(dA8;RLD~9r9k&L!XYAO&=N;LYvGDVJD&1h-S~9rqgS?qpVE8+?yATpO_dDPp8L6 z9!ok!w8s81F}xr;w*PWDpulCK>3n18rfyPhv-}ucJ51C{OrEaxL{BV)yadX6XDPg= zvwL|>Kp~Wr(-WX3u61C4dHoO%xCoY!dCbvD^aH?qJw`?hv_3<%3f+&wQEfxBEbv0! z;ldHpnTXURv9o60%#GMosz&5KOm%Tj8Frdw&i;j2% z5Ci}=y$>J02Hs`?v?@o&GKY^VsW%~DrLt;dFr1Rgq2|Q=UPQ*m0<64Pb%w{Z;Tjt2oCFPRS9?eX<%EM+AYE1p3C#6RpDg!zmQzPHVz@-QfGhSc1s2g(J?F?& zPfCGy!*7(bo>c#AiF4X`n?gwl6nly9+Op3?B4% z&`cIn6V{J~vl*(f9Laj$l8mxY`JOD@3y6eWMK-AlzYnd^ll?_r2g4LgFuhgzNcPhK zDV&`|pNIPC{gp{JUOa#EXPGnAOp+X|N2vApJ)$R_u0jIc9nk8hd?cy%1JxYmBEnH7YJ3kTXp-&-Sr=C@s*%N z)tDZp_RToB)DTI&=VN=^8?lC7>sWiT#=ORUWKN21Hcx*TTPb#r82&z;ud}6R#Lh>uU%&-)# zyJNs?;8Y@A998O6>;aem6l{7OLulHe)u99Xq?cE1z1q~xMrO}g`;monqm@U@ zpGCDW!j2X$rRf>zCS_`6dS$9R&El22Md;7X%8jO%p_Ga}8ax&}s!mDR+vrV$X@mJ9 z(jxk2vQnp&0;Mj6%=wKutU_|MJc<_lnm7O54-&kFU%UM)I#ne%A*?0m zB%CG3-jnGP^YV~k5$u^g)Pq@eD8LGB(`+-A-zH;5WD3Sr5>%+-pLbiVa;~~{yLA_E z6LPb2Yd+h4wwJB{4DJZ(Uya2eP*$%1g~Up4Ck6D#qtw6zLR`!Yabn+bYM-*AYz46A=|*94VjZ8EwKeBAg-SJ2D4*xv2C{DP3s+ zq1}Yw78ik8MARD55VBpy88BSI~;qe)|4Eks4A=AJ27k*Ox1i)UTbT-HAhRM0_NA z3T6Re)jm>#Jo8WaliVcc$JzCykZ&FHmZ#)hlNN>6JW48uKHG=QO+;3zSvWi;`JETE zl>J$1z0qGc$i zUoyQc=kd_)U~T{GJBbhbxwu`LcADjs`oc&}V}2Hsjpp(fk~K13ezT;jbhjTz8WEPu ze2cAzxQ*+S?HXrP1~+s2KXVDSYU>YctHX2IAu}Xhj|keCo7}b3F%dLfth4y}YwrEmlCn;W!!TkLv9+6!AZV8#&dY-4ym3{%h|^R3CTs1G|NEf4<$KY{;)i|>uj*V#^9xR2~H2Q;0D z{u!S&Z#uu0>-#Zlh-dh095L>AseV~|E?*f_x^1J7>?dG-HgFlLYP4tkmeiHL* zoMluNuAemVct@48=fRH~^u8}Yg*b&_!iVmahn`A)Yg^|ei|4EqQZqjB0p-g?V-I{- zoLB^3K(mjsRZs@mm*#fn-*pD%Mkclw{I67JA5eV|l`-|xIEMEH()H%VhHj=mv}YG&8(8h(xM24Do9hA)=UdD<64?2ZX1_yv+{Ac}r0jh2vA@T8*ZJup{d}-D z&oy?SaoU$>ucAq($@)ZLS8*CPA2lv-els_#!*IUi(6pf z^>*tHW7TYTdpGNkzSmELtxk+CciVjDd|CDj7O8aB0@>d1;++3hpBnrux=dwEO~n!5 zXC7bKKjEJR&zo%aYWmLrz@G~MLc#&yFAf~H0N|An0BqX;fK(;`FnFX`cd3BK&{K6K zMfmHPKUwoSs8`HA^8AH60h*ec>*&Lp=sb~!%>C5q#GOw+yWi274<*X+TT3Px&Rtrz zTL~rNW=bI1#^Xe|OM97<(h?UI6e9T}>IzSqzkWTxzJKA_BP%1&+RVe3yh9zlICs!o zxwsz?RHb>?#b6zcLZOJmT01)ly6lqI*B$jsXz}s!Y2%awiGIfAZi)oy4pua zX-Ff&Zf=5`tONm`gbZd#)#Sj>pVaORsO{|+fL(RwNzc&G5MG{9Ss$V{Q;XYu{(IL> zRg1O^>*l9JZy1T^CYEJpW`>#|6e*RUQE2DqmxV^N@X?b2?hVX^`hC5fM$vW);82$JMhi!PinH@YsX|3ILij zGYLwRnwgsyX>s38VwG)Q_M|3_AdY~7@A&xomcSu=e0*%N9Neif`Xz7s9PDguL!tQ! z+^Nf)hjDRnxD-P?jlvWMk(iEU8w4T}njgX&`x_}`6|gIojY9cd9I(sfQq`FyOuKU5 zBmX$ICB&5QLDb6UHuBZ0XO`cQF_Dpk-y0kC%EoC)Z&zA2s$eWsswNH0&ErO#IaB+7 zj*W%SyYr-J=m})>t$Tmq40d`Q2?`dBI8V*bcR7e8_c>%{WwqG|+0;%02Y&;n zT*ZTL{yM#IabaX;#<%hJ|EF|l{pPx^iPYJ}1=a5$@)WIoc6Rpd4NlIej82i7TKP`H zYyulGxav7~38S*K!$U6s6nJN6=L6@>M1}bgM4?bW->A$BV^Iu;lp8(n=;*jdPMDsa z{&NcnR!7&sAbkAAdVktua9Q?3_rRC_+u{Sy)ouzePtSMF&9VfFOIWlt5{djdKCUdo zT2x(qN0B-+Cx`GqyN!<<-uS;-TbiAn)%m3f4?3H6GI&v!4I0B6bHA~%@z0+>LekQj z`MPYZNvXq|BU?xZ5k~NlSw*^CwVEiCBN9m~c`-3zv~u_jS#%vNzwDWrpU-|3ET52& zuy*VRT4D>C4H|SI@c5aLvGMfG3>5TjyYcky*&|RIu)y?j`MSJcW_Lk<-HGesr6ujO z6LuA6-a;}dQiCP!T=g16JjvIME?VC8kp`znN)3SltE;PXb$3tED7?qQqFgqvFOcEY zI6v3&CKn9Zi1VlX{Lp{@{5Li>c{OWis9pv{vT{O=LQLi^|z0Okw) z3|M_IC!*rwMjQ8I9cYpm zC8&t%`1m+zX`~cO1QZXg-Sg)UUz^Rlo}>q<8il`ich|4}9_w^H2w?S`8qARmFzVOU z)QsaB(k>bURRlPaiGdiUTMANSLPA0SNYw%pzFS`~n3&)&hR=qJ` zafsgYpoZ+~%(%Kp3ByzDb}w&7K--u-nnKMg5dQwzAO}~6@h2uGD8+~_b{iIdZ*PN5 zPOw+8Zi)}uxC3rsigct~O;I5M`21GJl6 zbuSi6Ng0Ko+V{50F5iT&rn)+GY^&2jM9BLMkfwD=jck5bV0Vz|XlkK6MSyj^IHAY&BrW zUcP)8A0H34r{dC5j$}3PbYN;`_7T+48xs%0mo@3-)+iS^rL((x_x?G)jYt;QLXf_` z$D^8p>hd^`AuOVHI4~^GLBhn+GRT#mm6bJJOdbwN0}FY!JBv$cW}#O;oH8rdFX2=^ zxV&ETmOSy7{m4s0OrQ%%0~Y|+j3fd|B-*H7(wnV-)1kZAD$4CFaNa4a`r+@&Pp_<} z|Mps77(}drLC4Zkp2MqocL~9!gLb?jcNdq{r?G~-v|uCyLAMZ*TwEOwcNI9hh%yCj zm<3KY9W>?=qqDp8)lfj4TK=cueFPS`yC z5(hUgkWPO=B7Gvg^@)^;g+*3ZkwL)X9mLt1{bm#Kn|DZ^mo{a5P)l1I@;Y&)cVNV> z`t`?wK_?bft3*WY^j%AY+{;_!gdKR#O)V`8%gV?=_2LA7sJ(g9!pW~HYYj;QwbkN& zs6P5qxfPTZdyyZhd~bI!T<-FM%-Jjv{c zVXk9b0RY29GX+t^INkBN3?lvqlxa7JVKgp`!=tezTrbn2fUm$7qmW1?OGcwmnIbc- z2@M8-1S_R+c$_$rBga%UnFB*Js5Ar{fZ$MrMkZg1;?QC=S*hm1PfymukW#^eWBtVp zu_g>nQO;bZMWdI^mdckcl?N%{&=4rtz##-wC@zBxs#LX(W8lH>bveY`;ikjTdkDUi z2Y*N^PAq}KFf9uC)7ZXp29pUP2#x9Ik04Ac#9}a6bO!MvzDz%kKf+-JKp!8Nh^AE} zaiRp_A7c>~4^F{x4TnzG>-97}n}%tV>CB*@AcqEvMxinXT#~mVl!g?;uFbxzIjX+akm1+g1 z*ZI81i^Uv~T8GQja#SSX!Gr=$sZ?;-2%E*^v;BeufqW)Y$PQ#N1v8K^gpK$k>_8^F zk1N3B=_*u>_i+`Ux&Hlf9j&0!5RnC_R+)h+!nK$RdcS0jvj1FI{px+>D*Dfb-7l9; zBtv&>>_0ZT&qZ{PWBRFW3FA}aqiUktwM1J_5b?ysY3UIO_)T8sSn$MGcd4kjwx(%ZfLq<{jHg}ASx;-Q8!ML2-Bv#IaYM(Rqe0QhX_UiHTFBgN zYo_yqvMJn|svffiuc+o}D@|2}UdwC7b@smGzAG7HGy9KxH%-5AGx~;Oe9V~Lbb^jT9Vb^#>wA#(ZbRGVs+kVWpfK-}adcHKooKn!b zF30*JRrltnLDNU@H%|zQmKf*QUhink_IOVrO+=y%qYklADf*Fq#n}4 z)Fg6&dqViibH+1?{)rlcRtuBhUrx^o|j=h?9Yhw4<3ZH#oLd3(VtbM^ddB^oM(_AC|ZA@io>$ccb zS5T`sQB_qiKyjz6*{OVZ?nX21%4AZiH&)?wfMpIO8TfUv_Zs(mO-9^yc6vwVWEB1y z4E$)%8j$TCm%+D7a^+3N_<$;K>&#)&LQ}n+9=gR1lngBYaazaiV}Yj!f$K|Rh1|&a zQC@2s+YAYpax>yMU`5-65#l#@OJ~^I$g>`RgV`KW!ri=st{t*hwkPw;TGq9fh_YKE zL}wqv3w>J2^LmrlV8{222IM399D^?YWg53>@9zDfFV@WIl5k1+oN4pL=V8gcr_o$# z*T7w4N3P#1JfDA%ebqu1_Da{(4>nUqitfN&lEy^S{NdWuf!u1#_DegmuE?mFK3TUn z+8$l3`ZIREiTd19B