From a6d06c97b39cef3fa97b21f3221cec630f96e81c Mon Sep 17 00:00:00 2001 From: Matt Caughey Date: Tue, 29 Oct 2013 16:52:51 -0400 Subject: [PATCH] Added hive sub-blocks, tweaked hive generation --- common/biomesoplenty/blocks/BlockHive.java | 80 ++++++++++++++++-- .../configuration/BOPBlocks.java | 3 +- .../itemblocks/ItemBlockHive.java | 35 ++++++++ .../biomesoplenty/worldgen/WorldGenHive.java | 67 ++++++++++----- .../assets/biomesoplenty/lang/en_US.lang | 5 +- .../biomesoplenty/textures/blocks/hive.png | Bin 697 -> 755 bytes .../textures/blocks/hivespawner.png | Bin 756 -> 709 bytes .../textures/blocks/honeycomb.png | Bin 0 -> 697 bytes .../blocks/{hivealt.png => honeycombalt.png} | Bin .../textures/blocks/honeycombspawner.png | Bin 0 -> 756 bytes 10 files changed, 159 insertions(+), 31 deletions(-) create mode 100644 common/biomesoplenty/itemblocks/ItemBlockHive.java create mode 100644 resources/assets/biomesoplenty/textures/blocks/honeycomb.png rename resources/assets/biomesoplenty/textures/blocks/{hivealt.png => honeycombalt.png} (100%) create mode 100644 resources/assets/biomesoplenty/textures/blocks/honeycombspawner.png diff --git a/common/biomesoplenty/blocks/BlockHive.java b/common/biomesoplenty/blocks/BlockHive.java index 0559879d1..8b6d042cf 100644 --- a/common/biomesoplenty/blocks/BlockHive.java +++ b/common/biomesoplenty/blocks/BlockHive.java @@ -1,30 +1,92 @@ package biomesoplenty.blocks; +import java.util.List; + import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.AxisAlignedBB; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityMobSpawner; +import net.minecraft.util.Icon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.ForgeDirection; import biomesoplenty.BiomesOPlenty; -import biomesoplenty.api.Items; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; public class BlockHive extends Block { + private static final String[] hiveTypes = new String[] {"honeycomb", "honeycombspawner", "hive", "hivespawner"}; + private Icon[] textures; + public BlockHive(int par1) { super(par1, Material.wood); this.setCreativeTab(BiomesOPlenty.tabBiomesOPlenty); } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + public TileEntity createNewTileEntity(World par1World) + { + return new TileEntityMobSpawner(); + } @Override - public void registerIcons(IconRegister par1IconRegister) + public void registerIcons(IconRegister iconRegister) { - blockIcon = par1IconRegister.registerIcon("biomesoplenty:hive"); + textures = new Icon[hiveTypes.length]; + + for (int i = 0; i < hiveTypes.length; ++i) { + textures[i] = iconRegister.registerIcon("biomesoplenty:"+hiveTypes[i]); + } + } + + @Override + public Icon getIcon(int side, int meta) + { + return textures[meta]; + } + + @Override + public void getSubBlocks(int blockID, CreativeTabs creativeTabs, List list) + { + for (int i = 0; i < hiveTypes.length; ++i) { + list.add(new ItemStack(blockID, 1, i)); + } + } + + @Override + public int damageDropped(int meta) + { + if (meta == 1) { + meta = 0; + } + if (meta == 3) { + meta = 2; + } + + return meta; + } + + @Override + public int getFlammability(IBlockAccess world, int x, int y, int z, int metadata, ForgeDirection face) + { + super.setBurnProperties(blockID, 2, 4); + return blockFlammability[blockID]; + } + + @Override + public int getFireSpreadSpeed(World world, int x, int y, int z, int metadata, ForgeDirection face) + { + return blockFireSpreadSpeed[blockID]; + } + + @Override + public boolean isFlammable(IBlockAccess world, int x, int y, int z, int metadata, ForgeDirection face) + { + return getFlammability(world, x, y, z, metadata, face) > 0; } } \ No newline at end of file diff --git a/common/biomesoplenty/configuration/BOPBlocks.java b/common/biomesoplenty/configuration/BOPBlocks.java index 98ba9453a..cc16f6ac3 100644 --- a/common/biomesoplenty/configuration/BOPBlocks.java +++ b/common/biomesoplenty/configuration/BOPBlocks.java @@ -64,6 +64,7 @@ import biomesoplenty.itemblocks.ItemBlockFoliage; import biomesoplenty.itemblocks.ItemBlockGlass; import biomesoplenty.itemblocks.ItemBlockGrass; import biomesoplenty.itemblocks.ItemBlockGrave; +import biomesoplenty.itemblocks.ItemBlockHive; import biomesoplenty.itemblocks.ItemBlockLeaves; import biomesoplenty.itemblocks.ItemBlockLog; import biomesoplenty.itemblocks.ItemBlockMoss; @@ -264,7 +265,7 @@ public class BOPBlocks GameRegistry.registerBlock(Blocks.moss.get(), ItemBlockMoss.class, "bop.moss"); GameRegistry.registerBlock(Blocks.cragRock.get(), "bop.cragRock"); GameRegistry.registerBlock(Blocks.cloud.get(), "bop.cloud"); - GameRegistry.registerBlock(Blocks.hive.get(), "bop.hive"); + GameRegistry.registerBlock(Blocks.hive.get(), ItemBlockHive.class, "bop.hive"); GameRegistry.registerBlock(Blocks.bones.get(), ItemBlockBones.class, "bop.bones"); GameRegistry.registerBlock(Blocks.glass.get(), ItemBlockGlass.class, "bop.glass"); diff --git a/common/biomesoplenty/itemblocks/ItemBlockHive.java b/common/biomesoplenty/itemblocks/ItemBlockHive.java new file mode 100644 index 000000000..b802815e1 --- /dev/null +++ b/common/biomesoplenty/itemblocks/ItemBlockHive.java @@ -0,0 +1,35 @@ +package biomesoplenty.itemblocks; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemBlockHive extends ItemBlock +{ + private static final String[] types = new String[] {"honeycomb", "honeycombspawner", "hive", "hivespawner"}; + + public ItemBlockHive(int par1) + { + super(par1); + setMaxDamage(0); + setHasSubtypes(true); + } + + @Override + public int getMetadata(int meta) + { + return meta & 15; + } + + @Override + public String getUnlocalizedName(ItemStack itemstack) { + int meta = itemstack.getItemDamage(); + if (meta < 0 || meta >= types.length) { + meta = 0; + } + + return super.getUnlocalizedName() + "." + types[meta]; + } +} diff --git a/common/biomesoplenty/worldgen/WorldGenHive.java b/common/biomesoplenty/worldgen/WorldGenHive.java index 336a832bf..dd28718bb 100644 --- a/common/biomesoplenty/worldgen/WorldGenHive.java +++ b/common/biomesoplenty/worldgen/WorldGenHive.java @@ -24,41 +24,50 @@ public class WorldGenHive extends WorldGenerator return false; } - for (int cubeno = 0; cubeno < 3; cubeno++) + for (int cubeno = 0; cubeno < 4; cubeno++) { float chance = 0.0F; + int meta = 0; switch (cubeno) { case 0: chance = 0.25F; + meta = 0; break; case 1: chance = 1.0F; + meta = 0; break; case 2: + chance = 1.0F; + meta = 2; + break; + + case 3: chance = 0.5F; + meta = 2; break; } int honeychance = rand.nextInt(2); //Top - generateHiveCubeSmall(world, x, y + cubeno, z, (baseHeight - 8) + (cubeno * 2), (baseWidth - 1) + cubeno, cubeno, chance); + generateHiveCubeSmall(world, x, y + cubeno, z, (baseHeight - 11) + (cubeno * 2), (baseWidth - 1) + cubeno, cubeno, chance, meta); //Middle - generateHiveCube(world, x, (y - 2) + cubeno, z, baseHeight + (cubeno * 2), baseWidth + cubeno, cubeno, chance, honeychance); + generateHiveCube(world, x, (y - 2) + cubeno, z, baseHeight + (cubeno * 2), baseWidth + cubeno, cubeno, chance, honeychance, meta); //Bottom - generateHiveCubeSmall(world, x, (y - (baseHeight + 4)) + cubeno, z, (baseHeight - 8) + (cubeno * 2), (baseWidth - 1) + cubeno, cubeno, chance); + generateHiveCubeSmall(world, x, (y - (baseHeight + 6)) + cubeno, z, (baseHeight - 10) + (cubeno * 2), (baseWidth - 1) + cubeno, cubeno, chance, meta); //Bottom 2 - generateHiveCubeSmall(world, x, (y - (baseHeight + 5)) + cubeno, z, (baseHeight - 7) + (cubeno * 2), (baseWidth - 2) + cubeno, cubeno, chance); + generateHiveCubeSmall(world, x, (y - (baseHeight + 7)) + cubeno, z, (baseHeight - 9) + (cubeno * 2), (baseWidth - 2) + cubeno, cubeno, chance, meta); //Bottom 3 - generateHiveCubeSmall(world, x, (y - (baseHeight + 7)) + cubeno, z, (baseHeight - 7) + (cubeno * 2), (baseWidth - 4) + cubeno, cubeno, chance); + generateHiveCubeSmall(world, x, (y - (baseHeight + 9)) + cubeno, z, (baseHeight - 9) + (cubeno * 2), (baseWidth - 4) + cubeno, cubeno, chance, meta); spawnWasps(world, rand, x, y, z, 15); } @@ -66,7 +75,7 @@ public class WorldGenHive extends WorldGenerator return true; } - public void generateHiveCube(World world, int origx, int origy, int origz, int height, int width, int cubeno, float chance, int honeychance) + public void generateHiveCube(World world, int origx, int origy, int origz, int height, int width, int cubeno, float chance, int honeychance, int meta) { for (int hLayer = 0; hLayer < height; hLayer++) { @@ -74,30 +83,33 @@ public class WorldGenHive extends WorldGenerator { for (int j = -width; j < width; j++) { - if ((hLayer == 0 || hLayer == (height - 1)) && (world.rand.nextFloat() <= chance)) world.setBlock(origx + i, origy - hLayer, origz + j, Blocks.hive.get().blockID); - else if ((i == -width || i == (width - 1) || j == -width || j == (width - 1)) && (world.rand.nextFloat() <= chance)) world.setBlock(origx + i, origy - hLayer, origz + j, Blocks.hive.get().blockID); + if ((hLayer == 0 || hLayer == (height - 1)) && (world.rand.nextFloat() <= chance)) world.setBlock(origx + i, origy - hLayer, origz + j, Blocks.hive.get().blockID, meta, 2); + else if ((i == -width || i == (width - 1) || j == -width || j == (width - 1)) && (world.rand.nextFloat() <= chance)) world.setBlock(origx + i, origy - hLayer, origz + j, Blocks.hive.get().blockID, meta, 2); if (hLayer > (height / 2)) { if (honeychance == 0) { if (cubeno < 2 && world.getBlockId(origx + i, origy - hLayer, origz + j) != Blocks.hive.get().blockID) world.setBlock(origx + i, origy - hLayer, origz + j, Fluids.honey.get().blockID); + if (cubeno < 2 && world.getBlockId(origx + i, origy - hLayer, origz + j) == Blocks.hive.get().blockID && world.getBlockMetadata(origx + i, origy - hLayer, origz + j) != 0) world.setBlock(origx + i, origy - hLayer, origz + j, Fluids.honey.get().blockID); } else { if (cubeno < 2 && world.getBlockId(origx + i, origy - hLayer, origz + j) != Blocks.hive.get().blockID) world.setBlockToAir(origx + i, origy - hLayer, origz + j); + if (cubeno < 2 && world.getBlockId(origx + i, origy - hLayer, origz + j) == Blocks.hive.get().blockID && world.getBlockMetadata(origx + i, origy - hLayer, origz + j) != 0) world.setBlockToAir(origx + i, origy - hLayer, origz + j); } } else { if (cubeno < 2 && world.getBlockId(origx + i, origy - hLayer, origz + j) != Blocks.hive.get().blockID) world.setBlockToAir(origx + i, origy - hLayer, origz + j); + if (cubeno < 2 && world.getBlockId(origx + i, origy - hLayer, origz + j) == Blocks.hive.get().blockID && world.getBlockMetadata(origx + i, origy - hLayer, origz + j) != 0) world.setBlockToAir(origx + i, origy - hLayer, origz + j); } } } } } - public void generateHiveCubeSmall(World world, int origx, int origy, int origz, int height, int width, int cubeno, float chance) + public void generateHiveCubeSmall(World world, int origx, int origy, int origz, int height, int width, int cubeno, float chance, int meta) { for (int hLayer = 0; hLayer < height; hLayer++) { @@ -105,8 +117,8 @@ public class WorldGenHive extends WorldGenerator { for (int j = -width; j < width; j++) { - if ((hLayer == 0 || hLayer == (height - 1)) && (world.rand.nextFloat() <= chance)) world.setBlock(origx + i, origy - hLayer, origz + j, Blocks.hive.get().blockID); - else if ((i == -width || i == (width - 1) || j == -width || j == (width - 1)) && (world.rand.nextFloat() <= chance)) world.setBlock(origx + i, origy - hLayer, origz + j, Blocks.hive.get().blockID); + if ((hLayer == 0 || hLayer == (height - 1)) && (world.rand.nextFloat() <= chance)) world.setBlock(origx + i, origy - hLayer, origz + j, Blocks.hive.get().blockID, meta, 2); + else if ((i == -width || i == (width - 1) || j == -width || j == (width - 1)) && (world.rand.nextFloat() <= chance)) world.setBlock(origx + i, origy - hLayer, origz + j, Blocks.hive.get().blockID, meta, 2); } } } @@ -122,14 +134,29 @@ public class WorldGenHive extends WorldGenerator if (world.getBlockId(spawnx, spawny, spawnz) == Blocks.hive.get().blockID) { - world.setBlock(spawnx, spawny, spawnz, Block.mobSpawner.blockID); - - TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner)world.getBlockTileEntity(spawnx, spawny, spawnz); - - if (tileentitymobspawner != null) - { - tileentitymobspawner.getSpawnerLogic().setMobID("BiomesOPlenty.Wasp"); - } + if (world.getBlockMetadata(spawnx, spawny, spawnz) == 0) + { + world.setBlock(spawnx, spawny, spawnz, Blocks.hive.get().blockID, 1, 0); + + TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner)world.getBlockTileEntity(spawnx, spawny, spawnz); + + if (tileentitymobspawner != null) + { + tileentitymobspawner.getSpawnerLogic().setMobID("BiomesOPlenty.Wasp"); + } + } + + if (world.getBlockMetadata(spawnx, spawny, spawnz) == 2) + { + world.setBlock(spawnx, spawny, spawnz, Blocks.hive.get().blockID, 3, 0); + + TileEntityMobSpawner tileentitymobspawner = (TileEntityMobSpawner)world.getBlockTileEntity(spawnx, spawny, spawnz); + + if (tileentitymobspawner != null) + { + tileentitymobspawner.getSpawnerLogic().setMobID("BiomesOPlenty.Wasp"); + } + } } } } diff --git a/resources/assets/biomesoplenty/lang/en_US.lang b/resources/assets/biomesoplenty/lang/en_US.lang index 0e492cd02..e899514da 100644 --- a/resources/assets/biomesoplenty/lang/en_US.lang +++ b/resources/assets/biomesoplenty/lang/en_US.lang @@ -157,7 +157,10 @@ tile.bop.moss.name=Moss tile.bop.cloud.name=Cloud Block -tile.bop.hive.name=Hive +tile.bop.hive.honeycomb.name=Honeycomb Block +tile.bop.hive.honeycombspawner.name=Honeycomb Wasp Spawner +tile.bop.hive.hive.name=Hive Block +tile.bop.hive.hivespawner.name=Hive Wasp Spawner tile.bop.bones.bones_small.name=Small Bone Segment tile.bop.bones.bones_medium.name=Medium Bone Segment diff --git a/resources/assets/biomesoplenty/textures/blocks/hive.png b/resources/assets/biomesoplenty/textures/blocks/hive.png index 37f1e1be3851b5b2f9eafe519a8b54961bc9db74..8dcbbace924ce470a54bcea0600796e82405844e 100644 GIT binary patch delta 670 zcmV;P0%85R1@i@vJPN`901my4!`kM>E-HQ?5??q+poC3|GP$3OQp7a3j9w|jMMR(XSPD4P(_M{O&A zI_^|8e?0PkJ`3+}%sJE@s|&-l7Gg50$ad4SVlSh(s5p=E=1OWN;TftQ`c8J{Ble;9 z1uKIp>)PtNa_^n~_f3jB54TK$ayg^Xjz7FU4(zNc8GmyU+=|PO3zqDXjE?iNV|!I$ zQ?^m^8oGsH^07wxpqevqFikfh3)=>NagQt2=silCv1z;!%sSh;xhxfSMPta)osG!0 zuc1laOUh>=ufJ2%!pClc4b$#GM<1=)S9?g%dSRpx^36Gx^ zZE)Mqs)FV&K}v2fugMvcPt5$svTW}=+R%FRU5b&r{7Px{hg}yR=@B48^XW8yR7|N7 zzBl~MMc=0UFJ0=Ei=w%<=f13Z{(Q|+O^2jl5PDeyGY&S592g0~(EPx+S`^SAqT4vt z2nNec%hkSj**Pq9(mVC4gJe+8uS~dgonWP=9=p#J`d~mjg2510V#V2yZ@L4olISnXJ@&<8#nA4y`1AAz&V;mNfQ@pOy>NI&E%YikM2YLdd+(`G| zUjFEjzoXY3&{Q*;xL{H9)_ z3QhrYU(_Y3m91P&2hRp&(Av+-!#CboKPBGz*|zZ?_5SYTHs2KZ0000907*qoM6N<$ Ef_t7z82|tP delta 611 zcmV-p0-XKx1-S)~JPN@801m+cxRGn^kwz(hHAzH4R5(vflG#sFVGzadf5C%>CLtx6Q^1U70>{HWoHRgnh3r{$0l|VRV>6*;C@_ zhD61(Cz!1sUfg2K3Sq?ujY)6Yb+220cQ6p3sycgKQ^7K*KZo+VDv}iHdX8%v3RX%F zvi;`e9KdOq|Gsm#yC_^{j-6WPD%k)*E%<-Mmu~II$yMr2jx74vtrs?6TOlaCL6Q&d zh@RiW`MoE?Mk`l8a-;|wdE|WsHMvX2?0Qo7FC;ikVfBVkS=Xvx*mpYpxhvg&l^*~b zqtN4>ELK+n-f4)xiOM>LF6(03>&u{uOYQ#ie0d5Ezu(~9{kHG^-dVDFh`CuUC zl2HqYFk9G6#{^+x5mb8LIkOQ-Gf%B*0TSzs5w&?5nsJI!T>zi%LkpORFszt77l-SP z!%M34{@2RF6%D99NXEm-*e9Q zobx^3bHtjfZ{72F!PpgFc)GRn+&z6O?W zR$*7&AORe)R6y=fx4+$+|5#hz-I}pa-Hyx+0L_FHL`mC;O^Q-nd0cetrA@`?MA+Tm zsCcW}7Qe0kAY-Obabvo?p(?%7{XC1(vyw6j!iBhIT7LE2zHj@bit=aG#njsPer9%a zMFHZdV9!RBU2PW#dGz;%e)PIVcBPzu(Br~L;|qIOsfRBUN`}VpJnFodi>i~WGGSA; z(N}U|(u41(BR@1?-yC|g;}nNE>$$7haDF=tW!5L-%W^PyXgfL7BAAly5-1&>kRFne zBUwH+MQs>n*G2^rk@Mkj35sFw5Wk7Q3n}3^XR4Q6CuR4q&znSJOEP2-Iz_90^4X== zNdphJ?j8y*S$eopwIi9?s`@o141inX_W0YbtkH)gCj0&7qSuqK^4Bu4BsCt zh@hi~b%OR8?!uMAlIjxT9F6_`U8<(_qLR>XJmesPq*yafnkOF_W6jLN?Ffj*d{03C z`H^AeUr&M(luffuSP`Q0_eMBc;2QjY8VpWh*2&759+kYtZajbx&1>jhw)Rm)J92H_ z_<&IbFQ4gQz&Thim}w2ds_Gzf(cHrYaHL$mX}p~fcV5dH{sHfH%yHSCEKC3Z002ov JPDHLkV1jq@HJ1PY delta 671 zcmV;Q0$}~c1@r}wJPN@801m+cxRGn^kwz(ha7jc#R5(vPQtMArVH`exLtpw(Yt6En zUntyk<;=3C(`i)8aE&r_T`Y0Ykff#KF33fsBnU(ZB#>EC3&k4(fr1DkX}0XTE?c*; z`49BCm$^M>JLk9O{k_lSP~S$bWg~)NC1c*v{L$O+ee}ABxoe<}9@Li4s>)1lC4-`W z%Cz--#&%&yUSoSuPJMaasA;Cr_U!<|y3=yj?ha-?@YY%H6jnsTfu(r#=gXUx_Tz*@ z;WT*z-nlLjHt=KY##$z&*J%bFw$-N>w>cEHe%e@{of-!_X=V`iLSNN}=W=h4MlKb5 z_yy1zi-r~=!9`;YCB1q8s+OLdkvATHg2aTW_Pv{BzE>(_FfkZg7SD@#+BvxE(MnCA{?ZygSQnAsS` z4AnM%;bTq#kt<^#9P6ojW3RKf=K1vX{em+1$wu!}>#OO^av~ezgH86qw_93G_Mz5Z zP9a1h;(yazlt`IPhGDN8Z4fp9>4XjZ8o&KIIOBFX;BZcJ5@Appl@f1XUo;Umw4wyU zMn%j0=VTI*Sl9_mn=7(*K9Bl;JK5UDE!MTru?$fletbIa?8lvG1Aj#HVI^9(+@-15 zdtQl)C^#njAYIask9^Spd?O4pM~vL6o#cKLu+;;>gzV@_Y7u@s&zwF<@%H?WpF`LH z!pt3r=qr$5w?b|-Jc1a+nutY0fhkzpOo|B`#V5^-|Dd^ZciL*NJOBU+002ovPDHLk FV1f@vNe2J` diff --git a/resources/assets/biomesoplenty/textures/blocks/honeycomb.png b/resources/assets/biomesoplenty/textures/blocks/honeycomb.png new file mode 100644 index 0000000000000000000000000000000000000000..37f1e1be3851b5b2f9eafe519a8b54961bc9db74 GIT binary patch literal 697 zcmV;q0!ICbP)N2bPDNB8 zb~7$DE-^7j^FlWO00K2hL_t(IPfe29Pg7wK#qWQ?gN7&w5=>l51Qb_95Cj1OR27y;C+gnOwcg6&Q@BRB7N7qQKQ2lq@#Pe`P)SI>p zVS{gdIl=%hnzzly3SF5#aW)n=F8*D|E@5<-LfKQ|>4rqbvL~3W9$wsH%L-w| z2aQQ@+jXy7cQ6p3sycgKQ^7K*KZo+VDv}iHdX8%v3RX%Fvi;`e9KdOq|Gsm#yC_^{ zj-6WPD%k)*E%<-Mmu~II$yMr2jx74vtrs?6TOlaCL6Q&dh@RiW`MoE?Mk`l8a-;|w zdE|WsHMvX2?0Qo7FC;ikVfBVkS=Xvx*mpYpxhvh39{?Mp(BqvfR#yVvaT9FmhwgSu zg5N2bPDNB8 zb~7$DE-^7j^FlWO00MAHL_t(IPd!rWPf}qVK7T`B`cP}lvYKBg+;rv4vZm8%RLgLU zGIU)manX>ZrQ8DqRO=Oe8zTRNM2)mP)>b$ z-l%D&(e~{C!n)IP*6t2wKJeCA?-W)L*X=e1KznV5jOB+?8aIq zrPpZ&9k$h{7q>YSwtm`JpPd>9J85PR_CjCPhUao`k47#Pd-w&=8H(_FfkZg7SD@#+BvxE(MnCA{?ZygSp*%-wP)i!?NV@?5)D`OuV>#2KV zud}!2`SkVuf-?BYM(aJTUt%_q1IkbAw(kLf74u)NSRHBVXqr) z5HC5^rB$G!Ztmq6ET5Ma%u?WD=2B*a=IUE3$Sz zkNP{=+Q%){wa~E)Q6PSNI_~VpooEApMD$@LTDRP#sn~m7iHj&WCi@^=(vXjQ(ExlS z3^GTI+^U`AeiX3P1Hpvs=t^o4emu{dK1uQR{EweQ*Z{)J9f;^FkYKk$ZZtfC7{r>0 mMM8loSlUdA2^+;H&5Zw`xpQ~gYOg#10000