From 5b67f181cab895c8450b03c3cfa9af6ea41111a4 Mon Sep 17 00:00:00 2001 From: Lizbeth Rika Date: Mon, 20 Jul 2015 22:55:25 +0100 Subject: [PATCH] Hibike! Cacophonium --- .../common/core/BotaniaCreativeTab.java | 1 + .../botania/common/item/ItemCacophonium.java | 105 ++++++++++++++++++ .../common/item/ItemObedienceStick.java | 3 + .../vazkii/botania/common/item/ModItems.java | 2 + .../botania/common/lib/LibItemNames.java | 1 + .../botania/common/lib/LibObfuscation.java | 4 +- .../resources/assets/botania/lang/en_US.lang | 1 + .../botania/textures/items/cacophonium.png | Bin 0 -> 18364 bytes .../botania/textures/items/livingwoodTwig.png | Bin 3258 -> 17690 bytes 9 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 src/main/java/vazkii/botania/common/item/ItemCacophonium.java create mode 100644 src/main/resources/assets/botania/textures/items/cacophonium.png diff --git a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java index b3a3ee1ee..422c349ce 100644 --- a/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java +++ b/src/main/java/vazkii/botania/common/core/BotaniaCreativeTab.java @@ -186,6 +186,7 @@ public final class BotaniaCreativeTab extends CreativeTabs { addItem(ModItems.terrasteelLegs); addItem(ModItems.terrasteelBoots); addItem(ModItems.phantomInk); + addItem(ModItems.cacophonium); addItem(ModItems.recordGaia1); addItem(ModItems.recordGaia2); addItem(ModItems.ancientWill); diff --git a/src/main/java/vazkii/botania/common/item/ItemCacophonium.java b/src/main/java/vazkii/botania/common/item/ItemCacophonium.java new file mode 100644 index 000000000..2dd4af04b --- /dev/null +++ b/src/main/java/vazkii/botania/common/item/ItemCacophonium.java @@ -0,0 +1,105 @@ +/** + * This class was created by . It's distributed as + * part of the Botania Mod. Get the Source Code in github: + * https://github.com/Vazkii/Botania + * + * Botania is Open Source and distributed under the + * Botania License: http://botaniamod.net/license.php + * + * File Created @ [Jul 20, 2015, 9:53:57 PM (GMT)] + */ +package vazkii.botania.common.item; + +import java.util.List; + +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import vazkii.botania.common.core.helper.ItemNBTHelper; +import vazkii.botania.common.lib.LibItemNames; +import vazkii.botania.common.lib.LibObfuscation; +import cpw.mods.fml.relauncher.ReflectionHelper; + +public class ItemCacophonium extends ItemMod { + + private static final String TAG_SOUND = "sound"; + private static final String TAG_SOUND_NAME = "soundName"; + private static final String TAG_HAS_SOUND = "hasSound"; + + public ItemCacophonium() { + setMaxStackSize(1); + setUnlocalizedName(LibItemNames.CACOPHONIUM); + } + + @Override + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity) { + if(entity instanceof EntityLiving) { + EntityLiving living = (EntityLiving) entity; + String sound = null; + try { + if(living instanceof EntityCreeper) + sound = "creeper.primed"; + else if(living instanceof EntitySlime) + sound = "mob.slime." + (((EntitySlime) living).getSlimeSize() > 1 ? "big" : "small"); + else sound = (String) ReflectionHelper.findMethod(EntityLiving.class, living, LibObfuscation.GET_LIVING_SOUND).invoke(living); + + if(sound != null) { + String s = EntityList.getEntityString(entity); + if(s == null) + s = "generic"; + + ItemNBTHelper.setString(stack, TAG_SOUND, sound); + ItemNBTHelper.setString(stack, TAG_SOUND_NAME, "entity." + s + ".name"); + ItemNBTHelper.setBoolean(stack, TAG_HAS_SOUND, true); + player.inventory.setInventorySlotContents(player.inventory.currentItem, stack.copy()); + + if(player.worldObj.isRemote) + player.swingItem(); + + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + return false; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean adv) { + if(ItemNBTHelper.getBoolean(stack, TAG_HAS_SOUND, false)) + list.add(StatCollector.translateToLocal(ItemNBTHelper.getString(stack, TAG_SOUND_NAME, ""))); + } + + @Override + public EnumAction getItemUseAction(ItemStack par1ItemStack) { + return EnumAction.block; + } + + @Override + public int getMaxItemUseDuration(ItemStack par1ItemStack) { + return 72000; + } + + @Override + public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { + if(ItemNBTHelper.getBoolean(par1ItemStack, TAG_HAS_SOUND, false)) + par3EntityPlayer.setItemInUse(par1ItemStack, 72000); + return par1ItemStack; + } + + @Override + public void onUsingTick(ItemStack stack, EntityPlayer player, int count) { + String sound = ItemNBTHelper.getString(stack, TAG_SOUND, ""); + if(count % 6 == 0 && sound != null && !sound.isEmpty()) + player.worldObj.playSoundAtEntity(player, sound, 0.9F, (player.worldObj.rand.nextFloat() - player.worldObj.rand.nextFloat()) * 0.2F + 1.0F); + } +} diff --git a/src/main/java/vazkii/botania/common/item/ItemObedienceStick.java b/src/main/java/vazkii/botania/common/item/ItemObedienceStick.java index 3d7b6062f..1813d488f 100644 --- a/src/main/java/vazkii/botania/common/item/ItemObedienceStick.java +++ b/src/main/java/vazkii/botania/common/item/ItemObedienceStick.java @@ -58,6 +58,9 @@ public class ItemObedienceStick extends ItemMod { } } } + + if(player.worldObj.isRemote) + player.swingItem(); } return false; } diff --git a/src/main/java/vazkii/botania/common/item/ModItems.java b/src/main/java/vazkii/botania/common/item/ModItems.java index a2c5529d6..6ffb20e84 100644 --- a/src/main/java/vazkii/botania/common/item/ModItems.java +++ b/src/main/java/vazkii/botania/common/item/ModItems.java @@ -245,6 +245,7 @@ public final class ModItems { public static Item terraAxe; public static Item waterBowl; public static Item obedienceStick; + public static Item cacophonium; public static void init() { lexicon = new ItemLexicon(); @@ -380,6 +381,7 @@ public final class ModItems { terraAxe = new ItemTerraAxe(); waterBowl = new ItemWaterBowl(); obedienceStick = new ItemObedienceStick(); + cacophonium = new ItemCacophonium(); OreDictionary.registerOre(LibOreDict.LEXICON, lexicon); for(int i = 0; i < 16; i++) { diff --git a/src/main/java/vazkii/botania/common/lib/LibItemNames.java b/src/main/java/vazkii/botania/common/lib/LibItemNames.java index 6a8f310ee..57cb2dece 100644 --- a/src/main/java/vazkii/botania/common/lib/LibItemNames.java +++ b/src/main/java/vazkii/botania/common/lib/LibItemNames.java @@ -146,6 +146,7 @@ public final class LibItemNames { public static final String TERRA_AXE = "terraAxe"; public static final String WATER_BOWL = "waterBowl"; public static final String OBEDIENCE_STICK = "obedienceStick"; + public static final String CACOPHONIUM = "cacophonium"; public static final String[] LENS_NAMES = new String[] { "lensNormal", diff --git a/src/main/java/vazkii/botania/common/lib/LibObfuscation.java b/src/main/java/vazkii/botania/common/lib/LibObfuscation.java index c81e472d8..b618bff60 100644 --- a/src/main/java/vazkii/botania/common/lib/LibObfuscation.java +++ b/src/main/java/vazkii/botania/common/lib/LibObfuscation.java @@ -76,5 +76,7 @@ public final class LibObfuscation { // GuiChat public static final String[] INPUT_FIELD = new String[] { "inputField", "field_146415_a", "a" }; public static final String[] COMPLETE_FLAG = new String[] { "field_146414_r", "r" }; + + // Entityliving + public static final String[] GET_LIVING_SOUND = new String[] { "getLivingSound", "func_70639_aQ", "t" }; } - diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index d1f887a93..51f917ebe 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -1435,6 +1435,7 @@ item.botania:root.name=Living Root item.botania:pebble.name=Pebble item.botania:waterBowl.name=Bowl of Water item.botania:obedienceStick.name=Floral Obedience Stick +item.botania:cacophonium.name=Cacophonium # BREW NAMES botania.brew.fallback=Fallback diff --git a/src/main/resources/assets/botania/textures/items/cacophonium.png b/src/main/resources/assets/botania/textures/items/cacophonium.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7301907c1fe5f5620a21d2d7c99b7de1310061 GIT binary patch literal 18364 zcmeI3cT`i^x5qDo(whxb#0f=3B$Wh6455T7O&|z}EhIM~LP$s=%@ILFundTZAP8bX zq^h7O0t$#&P!PL-paLQ~;0)+s174`&RrBWe-tVoqerqLbB{%!*^WEp1&pBt`bN{$I zS321!%FUMp06@{s*3wmYRT=rpNC|&`?H{HJFS1-)FFpXs&l>qk0I7%O0)U(|i%ed* z(w8IP@O?R4m>ro6wj>I}7{Ri2e2)*EupUSBu>dvlABU zY09dsh}AsuWR6SK3@fW?>en-4CF9~E_RMk7SJ)-@Sh_>=Xk65>*j+b2Ki_=J?_v4C z%iBZe9+A58`_qdXq$_0<4%iyF;35=qEEdjq7Im$r_IU@wEK*K~E9`eMU6VhkEdhK8 zClZ%wRZ3q1Btq`V%K(**X_cr2F~iEQEe@`ch}bSsDM&E3mx-7Sn1#hzoB+(MB_h&O z7P|qN(|`?iG@o{0B^=nWWb4a&Kt%e7gPSD)@BNx{Br+2K*eo#C67XFPVxyM=(>4Peu4`+D0NW1&v#t9)h<`0B zRO!+ak~&yKEY-nVMS9D?1EoDY5DRtd?bMddHl+SSO*KPQhaQ}ViNq>D>%Rp6nF(`* zqwOCIsaGnjuQ!YucD`pDw>5zD0_*h5Db^-l9$ zC!e`#U^k;k+3XyU+1=#P&mCc7b!2bplP8@W9gkPkSa?%!dTbeDR&VJ}ocfZN8kBAO50oPpihxr_@t#cDu{Wz&Oj) zJ^h$0t(_M8mR?fVW|3{x%EU9k)+w=xspWH`BmYy7=x$))y0&Uk5PTzU(NsLGO<&axuBDaE@Gh(rEs6>!b2_=mKWNN46wGGK&SW-g4NT_f+Hoar(9xA&cbd=#ovxnwX@GEIGS{CzOS0^0PEB%!NnO*lNLH9-|@Ix z*KPAE`IY3mULFyEIxDl z$!|e=WhsLiWxGvsbB^H21}h9aie3BnGfbu1QvyF65;)0r>1HSQhwo~g{dVb#rRpcJ z4y9;tjbHA80NG5+@5C3 zWve=x5Z)Iea{aQ@kCa&kUk=FbP06^lE+WH$lieCx(e-J;7UUphko_t9y^VsWRI!4N zRI@_;T;f$+Acv@dyw?1e3wiAoGjbL+iJJU;dqQa=@z?|F->sGRuxi(|>$J0L*|o-N#x4-ewfOwf-oU1?oukJ8%CZ&)3&TEFCE z$pz4^sAKgBuildKfaukDuPjgZ)oY8b3(^Y~JuE9I%bt;4>Xhh|m+_E!<@8@AH%fBO z&pX}uSgN_Ogk7?Q%JflVp1)dnr8lu6am&RmzYm&7E5bnEoNTz3lO2cD=_L5n3OKVu^ZfW;ym}<;YepG+#?w$7A>JZ5!M4Ec-)9V!- zD+KQY*FF!s`#wFbIIX(pWb>(B!(LWzOv~Y0*uzURybSnvu3RTSbLng}l|P(>@@vZv zcP2YWGS78sBWcJ4kAg?1&u0ba4p85!k^Uy}4!4uqiAJrMR5qAl{zATevsw!B`dV)2k^1U)(b=jwh?)9?17;4fPR9HHG*{6(sk&!T->l$8adM&6 z8r4iKWTRnY>|^p8y@gJFwt9|X`~FBM$A#)#HOSKMEZx2&XK%TKqQlcPLWXK;5R8p6 zAylBF_9g5Mw8+(TOe|r(X1-(u)#ZcHMMGBucArNsOp?CgSG+fWx))ro#Nxy&%4*$5 zdeTKq(1UUL_RgF519=(CZui_OzS+Fj=+N84!#y*rXFlIolC{I$1FqruvLb&YzK9qY z+AP;TXZo@otEBRY7j~8Cu^%|+^>`!~hF2^ObM%W`S9Nn+)j0{jH}dXsozYv~v^?rr z>+Fg2YCA{$v?E=eG-v0o!r9Gg$#b?o)@=#tRFC1@ynL`_|Jj_pno@cL<1VB7Wh*?x zTj@Y<^2=nU0L3RwXBFF4o$Y!5w^cJT`L=FzSyTzR^w?$Mg>o?aM*Z#Orj+B9ca%>Q z!`{13&ru(J2x#n8-(3DT_Kye6-sJ;>q#Ku--6h-|A21$(pY1*u511D2%U%gdM7 zuj#uW=qqaOoaJ%BBlQ$vJ^QubHE}5Mp7XV`LuILjrEC03d&4TuZDtH~t7jP1KYdpb z`j_hP!v`67lcyE^VVr@h1Mk~ZpN8|64A$3`JqcdYTTt#?zW$wAkNFew)0hXQ-a{>q z-?nVsSQ(tz-`HX^AQc_eFqH5*j(X36aa{(AzUiW4-~+BKqf1|MC)zYWi1$sZldLZb3{3E$)GRGHjD?lg*j1Z zVSY3`UCWdtM+_kd1F%5>6&Aww58x9*OtePh5`_Opiji8d(JBHz6D{+R24S9#D`8{~ z4}{?mI5-W3#=?y72s93jHAd^hFetPE5@moy8^F;R0t!z+<6z?-Es~t@ACX6A5L_*- z$D0#cCR)A%0hfS81_uWtf(;NH9utYi0KHs~{nQairfg zJE7!LLb)K)736a^@o1n`kZ>s4KN`J&#rQfo-$WYm{Iu_220yf1T>Dfj~>D03->QA{LHD!!cM2 z+K7NNBp6^=sBeAR>QM{6m%S z>2&4T!zqdHYGVPjvmzU!@rH(Q3<5nh%#?al;*73Sf?WV#KnR`I!={;7uu3T+cdJ*#zWJEq0vTk zDxEG2%`m2daAO=65BI^NeBj0m8X9L{h{A!O@kHn;^6x@B^H{<>N%fynXQcQ4Y7;*Q z^IcQ6EWU7chfZ1b!nHq|3EjZJZ%Zc}{;biA#-;N3;K+V8(VEz>lPPdA!;NT0_dS71 z8_9(v+Q@bS=|to=rC+->sT`NFzMsH@PCJO$OChec4 zy#K+DnVdApZRkIH(#H1RxA|`(ZGWFHi6ci2f-u(#H$QbW#|iIF-<5q`E@SmQM{=hB zrqTLF7?kjXM34NAOQ*V_QZLccscxwBtI|DyB_LtOTZ0r&QH`97#%|wk!XrFL5)KVo z1g*W26$1KuTC#-qM*c{~M;nf7ppG93y?!Q~;usf>P1BTv_GrEwD-|B&g-;O3$w!Fq zQt9M<=HL0}>xllHQ6aI!jX;2iHpRF^^MQE9xFA48n_^s|`9Qp4To53lO))Ofd>~#i zE(j3OrWluKJ`k@M7X*lCQ;bVAABb0s3j##6DaIw555z0R1py-36yp-j2jUguf&dY1 zigAhN1M!M+L4b%h#kfTCfq2EZAV5T$VqBv6K)hmH5FnyWF)q=3AYL&p2oTYx7?)^1 z5U&^)1c+!;j7u~hh*yjY0z|Ya#wD5$#4E-H0V3KI;}XpW;uYh901<79af#*w@rrRl zfQUB5xJ2`Tc*VFNKt!8jT%!3vykcAsAfin%F424-UNJ5R5YeVcTykGu$^`?2Z{h|E zU%B;u_V%IhbzKM-*xw1sQ(z5wOM&+I!?~+=CU&g>%P3x zy^2@dId)!JMIIEucV7YBp2hU_u5;+yv*>Y(G(xRV z_M!Ff33`vpN{(R<@3Ncj5@=zC+S?RY_2>P$ADxoiUeu;+H2?B(I#KS=zgna2f6*}h zqdM_f(DG>2mkCnGl&)+$eyT*b5V1t3(F5OpG{@a;TaNpk5>=WLb&oorTNs5ckkdhX z=`sF1OiWoF{Rb-lmg3hg$YHOZDwH`n;g0ml~dd#DG2oyaCC&NQ)xAq-Xy6_SVBnCht&q9%4mdXi9ele0f4LoDfVb5X98Qrid$Q? zYzgbWP|M{!pLUGwa9sJa-9a`A^4ql!)tJ z0kTHA948s`Y>ZDIE${3c8XSDGwa#!Sp~-RoETwjLwd0KU`w+~h>8YnTo-2iExQ3bX zy?a{Q^49YF+O}iM4!iffh&TOoRe0``+yjL=bN6y5RmlO{6~1vsX|aq_MP$3j`ciBj1bIU}4?SxOn0u`^ zW16)d2=y>O<_iG3jFe#brc%8IK>#qy3RAskAp5pvwOTd*+M1<3HNv0Vv=199)zunG z7z&X>*ZR3_EIeqa5^?vUoT?lAp}w3}wXJ7FB0~&T>u^m>mm&UvAedRBQW>_4&)|;W zN`ib>6p#B6C&f5H>D2Id@-=3BD`J!&jZu=e3Kj`SGlbm{JjB6FZbH{@2`bXX~RuHedZb=Dj8Z*`dfyVHmfa5BsO1CC=@BEUvqJLA#X+W6tV460N;u*=Z}T^3t`;)+i=6c9FbF1W?D-Ae-)l4`vMB z8q^$=9h9HgDU{)^?|bf@{c{z&rafC_h9rixhWN=T8U_w$)9iY4Pve&(<98Sqoi4Mx zU>ljcQp-OLb@$LJbBpsuXHGm=<0QF-zMMWlkwZLkMOu*_3DVEtX4`O5*@aj5<(Ujp-@l?8llWLjjpHc};LMOJK*l|Rd`d1IuXirQ zc_y0Q`IhA^8{9eDtV_EGD(fM_M48e+HF+=5f(ZXGWZi~KcRT;wt6GsVBUcflo1b?Y zh11-s=~!wvdE7%!U?9c!-AR`9vSF2+WMo$vS2%wR6EkSos_dd{N{Me>nlWtOY2TY8l(Wi87d=%B%lA4jd%D6X z;3h3+JSFqSuFyG$L{G}pF{M{n0t1-8czI2QnyrKJz zEzb3pKJGl>1R?p^;e_&b%-If;zf8nqsr4=cN&`OiKJ{le@NbacU}5#jYCO%(syusR z_7=-6mJN4X?w+~(C>5Emi+HRtoIafXIKBU>+m65;YGt`)*U082gFCXF$IB{d;X6>y z=bapOxR#m}WfZM{R8drsvplEVI?=iy^AY9N#W!V*WqDU+E)G56?=CL$Dcet=xJy&6 z-Y&j1o>-N*|N8#FW^@HaBRj+Qe&HfaP-acYxjd!ji| zwz7F+9W}!~{edY(no`a@G#M2WZE>&}mW+j^%hvbasT$nMn(}ph7JPpyBfT`eb}YC1 z!npQ0bv&}?REyTBjhW7x%zL-);GWtJwd)C=I-%~>Ul?M8vk9YI8CHZ7;R%jKk1t+5 zACNyycrA_n2kUog06T!u>C@Rc;_<5Pz`f;80DGyyu<2j~2;K52v&yv{J>w zw}rfXbWecrf)H~nL_|3}GTbpjFOCuAw5A=Aj0|Y+!7=-dJ{Tn#^`%n~HmD2Gtw>dD zK5P%BOXs@Qb-j9+hjUAZQ-+hdx5Zi%Otn~>=6$38)7WI>^Ni=h1N)>?;CEaZL8n`5 z--hR`%7d*?LnrB5MpnBzQtdA24s+FsyD8Spb+oPV~TvXRtPnfA% z1t0r6p%NLSbX)Vh+EDpn<-DVnmZFxu>FCT=X?r0)8oKBz#GzveM|}M5NzcYwyUP;V9gaCuTfzKp`q~oqdkwuTy31-&iz*iA0jeju~N}TiY2?H zlcf$kQRxXBl8vM{-AwH{emSq8uAJ27ao=O)MISVCr&v;c@{43KnrLU&Wzqiam&d05 zG46&Z-&N_ZI8=r!KYJ5%t&*J6*m`%19{wEuE&c;ud;EUy6~g0pwDxh?eU<-c{oT>M zvvPU{+jyhffycqB!=r=z(fniSv|e#^{>Zzek3OzN);_*t4ZQbxX9N_*${v?L?2x;! zi?@q^v}x2-tl^Ivvl*`gprYEM4u74jf3CH+Em)Gl2(x?3JU) z!S@)ZO{AHm+oyfp>Av&2O$)aD(W}1TPo~{}h@aHLI0tQ=#5YpAMh-qmq)fEMW}L{_ z9|C*df-&O^^SvB{lBNL_DTQwO>pT0dk)xWAY z#7}vqwYj1*KzY2V(x!6vTm3PEPF!zfhu+TFo+qz+4(zE8$eL{LF`ecQKh!pxFcmM3 zTNLiR8qa zK7XE{c~w0sbD_Jwwtn4>#z0NPuD9Dij@1P81jxNU+b?c2_$TCm%ADu>OH=muay}-? zBqq-B@up0EB5Fdr0bnzpig#i;Sy`fqbRQUjM0Y2{0(}_l3sC^T=mjzeL@zQ6;!dVe zX}SupD{d-4s3ctlN2Hay6$3~1q?!f$k?n)6@x)*+B8sG-hZVvEqS*<2$SeXR(8rs` zLm~Rl`WVH=~qx+E|NEi}IR7Yq*bWkt^5}~yjp$5@V zM`*&;HQ@+NC_)3RjzS}lkk2m#tPnfG_>nx&c19+jn`8f{tKi9EG0<>$KtKR2Kodsy zqred;6bi1c0oTxgvK3Hf5RF9$gwmLbi%GuZF(NaGepCjFN~b~Q^AgThiGHH)@|rLZ_d81`7vI6pFhMfbzg>E77IRrc-v ziGBN|;z*^D=mE@)82FFsZ&Up(5!r~qB4gQ0Q45MdKsB`R2pu$18?C9e1LR*6{b0AE zlc*j+U+hSzx(-xB9j}2vBiVn*P3j1=y82=ckn+bI>|H}5un7OBEMP4t4~dBOp!@j{ zSXinLfkK8eXcP?mTOmmKbuFQBbZ@#JyIW+eCI+eZMdLQsGTqIMEmcKPGv8zv?P{*|1-az^^CVyk}wG zqY1?Mvk*(1-%ex_2L4^?w{CrPezsBnzZ1BaA7uZ18v&kV+HdycVwMHL@BK`=2P=T! zM>e3amjj1GVlm>&$Eb`KM2w66~OKiVSzk*&-_&O zt>s0%)BH?&`!DEqG}PHIIAZ?uvlU$Zqt*F8Tfx;oTE96RXjB$f<8y026oXvzr}g5Y zV$Z&?AY<7>`?2Up^)_lC+1ts8%HFZe`E`iU{_Od&;+IC}-x)y_pN)&t1p4`3n8n3X z_QeJJx(5FB!sh!4{<`%4$HBJ|{f`ra({URC)8H6$adAWh7I1NaX>g3WxHuvL3%Izz zG&sgwTpSUB1zcQU8XRLTE{=%60xm8v4URDv7e_>30T&mT2FI9-iz6bifQt)EgJaCa z#Ssx$z{Lfo!7=9I;)n<=;Nk+);23jpaYO_baB+cYaE!UQI3fZIxVXSHIL2ID91(#9 zTwGup9Ahpnj)=elE-o+)jxiS(M?_!&7Z;cY$C!(YBOnc@rvQL7 z{n+l?CIG-QWNu`D59~UZ*tkd5R>Ih(V{}^S3cp3%V4&cjxFx@t_WJ{ZHKcckj~cuw z+`gkIa~GLFQft^%zTIJ)iI`z%*t$=%MuByK)@4sdl4Tgfp$s3h(PzaM_NR-i2SBTYU>*%hywq=rb>=O4=S1G<_o>nMVOSk5IyS8os~TH zWRz-CIjy}lwlD#@q*qIx&xp@~oED5q6B$&y@Unh|X6f)Pn6u*FdowU97xUoKUab>H zV$Ki_JWPx^^UO_o=;Ql?r(>R<9Iy>rt=N#L-(6O>y1ckWtYQBP=bD(_)0>Ci1x-!+ z@;Defyy<&TR%C^4!fbjX%c?^)U^cakzb^*-T_0$P0;gVBoMdX>OA6YqJ}S^U(G=nW z8)Nj$wYBn9qat64wnQe|%U-{8W^c;}>!hMCeJ^yCSo8KyS=Kte=MhFmx%o%5tYicd zq%!rIk%@6l5v-UjpPl#@mj&m+UCIrmA?VO<4Ozx{SZ;z{vsHDoMAh zT})S*E$bR5PfBId9XrO{T^~mY%JYpMxPY0;m=gtjvnL*U(i?BH7YAT&Y;9C*=yvem D8N9Av delta 13 UcmbQ$#kfmy!(^__pPkg104S*iR{#J2