From 7cbe16f12b9e978b4df2d8921f006031b1c928e4 Mon Sep 17 00:00:00 2001 From: mrsterner Date: Tue, 2 Jul 2024 21:18:53 +0200 Subject: [PATCH] fix #19 --- gradle.properties | 2 +- .../culturaldelights/CulturalDelights.java | 5 +- .../common/block/FruitingLeaves.java | 103 ++++++++++++++++++ .../common/registry/CDObjects.java | 10 +- .../world/AvocadoBundleTreeDecorator.java | 54 --------- .../blockstates/fruiting_avocado_leaves.json | 19 ++++ .../block/fruiting_avocado_leaves_0.json | 6 + .../block/fruiting_avocado_leaves_1.json | 6 + .../block/fruiting_avocado_leaves_2.json | 6 + .../block/fruiting_avocado_leaves_3.json | 6 + .../block/fruiting_avocado_leaves_4.json | 6 + .../models/item/fruiting_avocado_leaves.json | 3 + .../block/fruiting_avocado_leaves_0.png | Bin 0 -> 553 bytes .../block/fruiting_avocado_leaves_1.png | Bin 0 -> 573 bytes .../block/fruiting_avocado_leaves_2.png | Bin 0 -> 580 bytes .../block/fruiting_avocado_leaves_3.png | Bin 0 -> 556 bytes .../block/fruiting_avocado_leaves_4.png | Bin 0 -> 569 bytes .../worldgen/configured_feature/avocado.json | 37 +++++-- 18 files changed, 188 insertions(+), 75 deletions(-) create mode 100644 src/main/java/dev/sterner/culturaldelights/common/block/FruitingLeaves.java delete mode 100644 src/main/java/dev/sterner/culturaldelights/common/world/AvocadoBundleTreeDecorator.java create mode 100644 src/main/resources/assets/culturaldelights/blockstates/fruiting_avocado_leaves.json create mode 100644 src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_0.json create mode 100644 src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_1.json create mode 100644 src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_2.json create mode 100644 src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_3.json create mode 100644 src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_4.json create mode 100644 src/main/resources/assets/culturaldelights/models/item/fruiting_avocado_leaves.json create mode 100644 src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_0.png create mode 100644 src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_1.png create mode 100644 src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_2.png create mode 100644 src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_3.png create mode 100644 src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_4.png diff --git a/gradle.properties b/gradle.properties index 74addb2..6379cbf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=1.20.1+build.9 loader_version=0.15.9 # Mod Properties -mod_version = 1.0.1+1.20.1 +mod_version = 1.0.3+1.20.1 maven_group = dev.sterner archives_base_name = cultural-delights-fabric diff --git a/src/main/java/dev/sterner/culturaldelights/CulturalDelights.java b/src/main/java/dev/sterner/culturaldelights/CulturalDelights.java index 2fc6ff0..f392b4d 100644 --- a/src/main/java/dev/sterner/culturaldelights/CulturalDelights.java +++ b/src/main/java/dev/sterner/culturaldelights/CulturalDelights.java @@ -6,7 +6,6 @@ import dev.sterner.culturaldelights.common.registry.CDTags; import dev.sterner.culturaldelights.common.registry.CDWorldGenerators; import dev.sterner.culturaldelights.common.utils.Constants; -import dev.sterner.culturaldelights.common.world.AvocadoBundleTreeDecorator; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.biome.v1.BiomeModifications; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; @@ -33,7 +32,6 @@ import net.minecraft.world.level.levelgen.feature.treedecorators.TreeDecoratorType; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.entries.LootItem; -import vectorwing.farmersdelight.FarmersDelight; public class CulturalDelights implements ModInitializer { public static final String MOD_ID = "culturaldelights"; @@ -42,8 +40,7 @@ public class CulturalDelights implements ModInitializer { public static final ResourceKey ITEM_GROUP = ResourceKey.create(Registries.CREATIVE_MODE_TAB, new ResourceLocation(MOD_ID)); - public static final TreeDecoratorType AVOCADO_BUNDLE_TREE_DECORATOR_TYPE = register(Constants.id("avocado_bundle"), AvocadoBundleTreeDecorator.CODEC); - + private static

TreeDecoratorType

register(ResourceLocation id, Codec

codec) { return Registry.register(BuiltInRegistries.TREE_DECORATOR_TYPE, id, new TreeDecoratorType<>(codec)); } diff --git a/src/main/java/dev/sterner/culturaldelights/common/block/FruitingLeaves.java b/src/main/java/dev/sterner/culturaldelights/common/block/FruitingLeaves.java new file mode 100644 index 0000000..3dc4763 --- /dev/null +++ b/src/main/java/dev/sterner/culturaldelights/common/block/FruitingLeaves.java @@ -0,0 +1,103 @@ +package dev.sterner.culturaldelights.common.block; + +import dev.sterner.culturaldelights.common.registry.CDObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.BlockHitResult; + +public class FruitingLeaves extends LeavesBlock implements BonemealableBlock { + public static final int MAX_AGE = 4; + public static final IntegerProperty AGE = BlockStateProperties.AGE_4; + + public FruitingLeaves(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any() + .setValue(AGE, Integer.valueOf(0)) + .setValue(DISTANCE, Integer.valueOf(7)) + .setValue(PERSISTENT, Boolean.valueOf(false)) + .setValue(WATERLOGGED, Boolean.valueOf(false))); + + } + + //public ItemStack getCloneItemStack(BlockGetter p_57256_, BlockPos p_57257_, BlockState p_57258_) { + // return new ItemStack(ModItems.AVOCADO.get()); + //} + @Override + public boolean isRandomlyTicking(BlockState state) { + return state.getValue(AGE) < MAX_AGE || state.getValue(DISTANCE) == 7 && !state.getValue(PERSISTENT); + } + @Override + public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource rand) { + if (this.decaying(state)) { + dropResources(state, world, pos); + world.removeBlock(pos, false); + } + else { + int age = state.getValue(AGE); + if (age < MAX_AGE) { + BlockState blockstate = state.setValue(AGE, Integer.valueOf(age + 1)); + world.setBlock(pos, blockstate, 2); + world.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(blockstate)); + } + } + } + @Override + public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult result) { + int i = state.getValue(AGE); + boolean flag = i == MAX_AGE; + if (!flag && player.getItemInHand(hand).is(Items.BONE_MEAL)) { + return InteractionResult.PASS; + } else if (i > 1) { + int j = 1 + world.random.nextInt(2); + popResource(world, pos, new ItemStack(CDObjects.AVOCADO, j + (flag ? 1 : 0))); + world.playSound((Player)null, pos, SoundEvents.SWEET_BERRY_BUSH_PICK_BERRIES, SoundSource.BLOCKS, 1.0F, 0.8F + world.random.nextFloat() * 0.4F); + BlockState blockstate = state.setValue(AGE, Integer.valueOf(0)); + world.setBlock(pos, blockstate, 2); + world.gameEvent(GameEvent.BLOCK_CHANGE, pos, GameEvent.Context.of(player, blockstate)); + return InteractionResult.sidedSuccess(world.isClientSide); + } else { + return super.use(state, world, pos, player, hand, result); + } + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder state) { + state.add(AGE); + state.add(DISTANCE, PERSISTENT, WATERLOGGED); + } + + @Override + public boolean isValidBonemealTarget(LevelReader levelReader, BlockPos blockPos, BlockState blockState, boolean bl) { + return blockState.getValue(AGE) < MAX_AGE; + } + + @Override + public boolean isBonemealSuccess(Level p_222558_, RandomSource p_222559_, BlockPos p_222560_, BlockState p_222561_) { + return true; + } + @Override + public void performBonemeal(ServerLevel p_222553_, RandomSource p_222554_, BlockPos p_222555_, BlockState p_222556_) { + int i = Math.min(MAX_AGE, p_222556_.getValue(AGE) + 1); + p_222553_.setBlock(p_222555_, p_222556_.setValue(AGE, Integer.valueOf(i)), 2); + } +} \ No newline at end of file diff --git a/src/main/java/dev/sterner/culturaldelights/common/registry/CDObjects.java b/src/main/java/dev/sterner/culturaldelights/common/registry/CDObjects.java index 66b3c05..c14767f 100644 --- a/src/main/java/dev/sterner/culturaldelights/common/registry/CDObjects.java +++ b/src/main/java/dev/sterner/culturaldelights/common/registry/CDObjects.java @@ -19,6 +19,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemNameBlockItem; import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.state.BlockBehaviour; import vectorwing.farmersdelight.FarmersDelight; import vectorwing.farmersdelight.common.block.WildCropBlock; import vectorwing.farmersdelight.common.registry.ModBlocks; @@ -82,8 +83,8 @@ public class CDObjects { public static final Item CALAMARI_ROLL = register("calamari_roll", new Item(settings().food(CDFoodComponents.CALAMARI_ROLL))); - - public static final Block AVOCADO_BUNDLE = register("avocado_bundle", new Block(FabricBlockSettings.copy(Blocks.PUMPKIN)), settings(), true); + public static final Block FRUITING_AVOCADO_LEAVES = register("fruiting_avocado_leaves", + new FruitingLeaves(BlockBehaviour.Properties.copy(Blocks.JUNGLE_LEAVES)), settings(), false); public static final Block WILD_CUCUMBERS = register("wild_cucumbers", new WildCropBlock(MobEffects.DAMAGE_BOOST, 6, FabricBlockSettings.copyOf(Blocks.TALL_GRASS)), settings(), true); public static final Block WILD_CORN = register("wild_corn", new WildCropBlock(MobEffects.DAMAGE_BOOST, 6, FabricBlockSettings.copyOf(Blocks.TALL_GRASS)), settings(), true); @@ -91,7 +92,7 @@ public class CDObjects { public static final Block AVOCADO_LOG = register("avocado_log", new RotatedPillarBlock(FabricBlockSettings.copy(Blocks.JUNGLE_LOG)), settings(), true); public static final Block AVOCADO_WOOD = register("avocado_wood", new RotatedPillarBlock(FabricBlockSettings.copy(Blocks.JUNGLE_WOOD)), settings(), true); - public static final Block AVOCADO_LEAVES = register("avocado_leaves", new RotatedPillarBlock(FabricBlockSettings.copy(Blocks.JUNGLE_LEAVES)), settings(), true); + public static final Block AVOCADO_LEAVES = register("avocado_leaves", new LeavesBlock(FabricBlockSettings.copy(Blocks.JUNGLE_LEAVES)), settings(), true); public static final Block AVOCADO_SAPLING = register("avocado_sapling", new SaplingBlock(new AvocadoSaplingGenerator(), FabricBlockSettings.copy(Blocks.OAK_SAPLING)), settings(), true); @@ -141,6 +142,7 @@ public static void init() { FlammableBlockRegistry flammableRegistry = FlammableBlockRegistry.getDefaultInstance(); flammableRegistry.add(AVOCADO_LEAVES, 30, 60); + flammableRegistry.add(FRUITING_AVOCADO_LEAVES, 30, 60); flammableRegistry.add(AVOCADO_LOG, 5, 5); flammableRegistry.add(AVOCADO_WOOD, 5, 5); @@ -166,6 +168,6 @@ public static void init() { compostRegistry.add(POPCORN, 0.85f); - compostRegistry.add(AVOCADO_BUNDLE, 1f); + compostRegistry.add(FRUITING_AVOCADO_LEAVES, 0.65f); } } diff --git a/src/main/java/dev/sterner/culturaldelights/common/world/AvocadoBundleTreeDecorator.java b/src/main/java/dev/sterner/culturaldelights/common/world/AvocadoBundleTreeDecorator.java deleted file mode 100644 index a3a885f..0000000 --- a/src/main/java/dev/sterner/culturaldelights/common/world/AvocadoBundleTreeDecorator.java +++ /dev/null @@ -1,54 +0,0 @@ -package dev.sterner.culturaldelights.common.world; - -import com.mojang.serialization.Codec; -import dev.sterner.culturaldelights.CulturalDelights; -import dev.sterner.culturaldelights.common.registry.CDObjects; -import dev.sterner.culturaldelights.common.registry.CDWorldGenerators; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.levelgen.feature.treedecorators.TreeDecorator; -import net.minecraft.world.level.levelgen.feature.treedecorators.TreeDecoratorType; - -public class AvocadoBundleTreeDecorator extends TreeDecorator { - - public static final Codec CODEC = Codec.floatRange(0.0F, 1.0F).fieldOf("probability").xmap(AvocadoBundleTreeDecorator::new, (thing) -> thing.probability).codec(); - private final float probability; - - public AvocadoBundleTreeDecorator(float probability) { - this.probability = probability; - } - - @Override - protected TreeDecoratorType type() { - return CulturalDelights.AVOCADO_BUNDLE_TREE_DECORATOR_TYPE; - } - - @Override - public void place(Context generator) { - RandomSource random = generator.random(); - if ((random.nextFloat() < this.probability)) { - List list = generator.leaves(); - if (!list.isEmpty()) { - List list3 = list.stream().filter((pos) -> generator.isAir(pos.below()) && generator.isAir(pos.below(2)) && generator.isAir(pos.below(3))).collect(Collectors.toList()); - if (!list3.isEmpty()) { - for(Direction direction : Direction.Plane.HORIZONTAL) { - if (random.nextFloat() <= 0.25F) { - Collections.shuffle(list3); - Optional optional = list3.stream().findFirst(); - if (optional.isPresent()) { - generator.setBlock(optional.get().below(), CDObjects.AVOCADO_BUNDLE.defaultBlockState()); - } - } - } - - } - } - } - - } -} diff --git a/src/main/resources/assets/culturaldelights/blockstates/fruiting_avocado_leaves.json b/src/main/resources/assets/culturaldelights/blockstates/fruiting_avocado_leaves.json new file mode 100644 index 0000000..5ea5ac0 --- /dev/null +++ b/src/main/resources/assets/culturaldelights/blockstates/fruiting_avocado_leaves.json @@ -0,0 +1,19 @@ +{ + "variants": { + "age=0": { + "model": "culturaldelights:block/fruiting_avocado_leaves_0" + }, + "age=1": { + "model": "culturaldelights:block/fruiting_avocado_leaves_1" + }, + "age=2": { + "model": "culturaldelights:block/fruiting_avocado_leaves_2" + }, + "age=3": { + "model": "culturaldelights:block/fruiting_avocado_leaves_3" + }, + "age=4": { + "model": "culturaldelights:block/fruiting_avocado_leaves_4" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_0.json b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_0.json new file mode 100644 index 0000000..1194220 --- /dev/null +++ b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_0.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "culturaldelights:block/fruiting_avocado_leaves_0" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_1.json b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_1.json new file mode 100644 index 0000000..763ed39 --- /dev/null +++ b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "culturaldelights:block/fruiting_avocado_leaves_1" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_2.json b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_2.json new file mode 100644 index 0000000..d9b1f09 --- /dev/null +++ b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "culturaldelights:block/fruiting_avocado_leaves_2" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_3.json b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_3.json new file mode 100644 index 0000000..b9307de --- /dev/null +++ b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "culturaldelights:block/fruiting_avocado_leaves_3" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_4.json b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_4.json new file mode 100644 index 0000000..dae4946 --- /dev/null +++ b/src/main/resources/assets/culturaldelights/models/block/fruiting_avocado_leaves_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/leaves", + "textures": { + "all": "culturaldelights:block/fruiting_avocado_leaves_4" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/culturaldelights/models/item/fruiting_avocado_leaves.json b/src/main/resources/assets/culturaldelights/models/item/fruiting_avocado_leaves.json new file mode 100644 index 0000000..511dbf7 --- /dev/null +++ b/src/main/resources/assets/culturaldelights/models/item/fruiting_avocado_leaves.json @@ -0,0 +1,3 @@ +{ + "parent": "culturaldelights:block/fruiting_avocado_leaves_0" +} \ No newline at end of file diff --git a/src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_0.png b/src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_0.png new file mode 100644 index 0000000000000000000000000000000000000000..53109f6fa3e2430042944da2e51b602f02f00dbf GIT binary patch literal 553 zcmV+^0@nSBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0lrB@K~y+TO_IG! zLqQP4@10QsrVt~DK~tmcqFr-tNuL?#*p5voaahs}F8;JmZcE7s140F6`|eaPdTsYt|dC zv{&im8uyPbH8SMhUY);fZDZ5FIs*?kcA>Bk=%uH*Z8J1d|RF@?L3#ai%RMZ#dm zL?|DfjADewlc#|#65U|e4zNVz$!Qu)8@W*2usruR0qsY0fKFuz^5-=Z*` r9sd0V2?zi%p3!7XgGF)w#FgL&ZZt=|xl4SU00000NkvXXu0mjf@_y($ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_1.png b/src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_1.png new file mode 100644 index 0000000000000000000000000000000000000000..68a47eb3654ff4826f58d49edd48446ddb098a42 GIT binary patch literal 573 zcmV-D0>b@?P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0n$lCK~y+TO_IM$ zf?*KHpZC#9(4`C_DF=t3_QrmU^#?T9-X=6e;Ly?#G&NO_Lrp~`4HX1ILPHVJq7dO= zVF+278j|H3pObs@mV55*`@LV!IaBd*H=lhrL!&Wsw0!Q2&5gLho?a6Ob(&JXVA9Eq z=PNwDn8;wislB~=ev1LQUi~%*0mu(GIRmNP_f!298=)}TQG-Mf&`7z~kZPxEmx5`0 zoVhb=tI`!Xx{eMH7)ww|R3S)3s;M7x_Wr=^#TUG8{2`yjEOX$5NZSOFa9=>cBhxWA zb+KX=cdyOF?7YNuTngAyu`UKeRu;({GRg66rJLrxSTW5?LvRpv9~J;WX1(297biBF zt`vBcdUQU!T3C{6+ydaCbE2_T_#rB4HyX>FkB8CR12Zyc8x4ICrhocechBpLk z4u&M)ARi}|ygiUe4hbPUq6t-NHwa`FjmA#_nS~%(^=#XHbf8DIe>mxGpOj@+AK%UY zQ)V6|t3cKTLMCZqBkvs)Wa1W}9ur_Rt*KBQQ5=izhz7-%PG+1x{ToS{6ElxV00000 LNkvXXu0mjfgCFkw literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_2.png b/src/main/resources/assets/culturaldelights/textures/block/fruiting_avocado_leaves_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8e1d7a02ec2b3b48c3460f085bc2773c6b824766 GIT binary patch literal 580 zcmV-K0=xZ*P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0oh4JK~y+TZIa6_ zLvaws=loF(b%_!o>b4**3lCN=WOX)H8J06g$l@9>~AfFx<1X8WT4Tq`Q-vJf0hlo?5Ho zpOvJ1AIR*&KxFIE!1?!8eE_O*NWLLc9N%{kifd_58wTG>w0k%bNUU`-GM1_EwNDMm zd+}Y#O%p9z+~SS|K3WrvGL&gkax~pRT){s?afsnyQgcCmyP!oJ3D4)nc*n9A#CL$m zzIG!(jEODoNcg)W$KXfTr-mBPtotT#P@BILZaAu{N SrDBu-0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0l`T`K~y+TU6MUc z0#Ou&-#i3~0#U&jiJ+3G5iM*iF|m_fxCWQt0$hVju+zdyN_$8wFrq<;BGCb57yk4CCx+XWDFzky>kf}(V+gmkW)06HqJ4q?7 zaZ5rfHXZEPaa;)~_(ODr=&!|tSoN|lMJx&79aRU2?5i39VmhH{Ktgy&#N^jPBuSxr zt3JHJmAzK(C73I3nR@LZxHw{3B%RO7MA(SW8de4Q&P0XG`RWZo;9w|1o>zG>h>d1| z=5j~?Er1r(R}ThE9#qO3N&`70x-pvG07rx$pH2h9ViT7M*oT{!tba`I&NLJZi%r~; usK=G`P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0nSN8K~y+TZIaDO zLQxRM&pl>Jnv3jHO8dZ|HqjzzQ7u{py+o@XphxHddIle%T`i(TZi0wf8AJ$LSV7u{ zMqY1f{f6dpk^XR*b7s!W|37ob+1lIamTw-+{K~93+&^*FcNV*`pHT2iJh0|AA-H3=D&R)Zh5H7gcFN21!_R=oEUOGS8#p+