From abfd9b68fc309d4da95c28b9054df9f9bbbbdc91 Mon Sep 17 00:00:00 2001 From: Minjae Song Date: Sat, 29 Dec 2018 04:11:26 +0900 Subject: [PATCH] detailed impl of fixtures WIP --- .../torvald/terrarum/blockproperties/Block.kt | 197 +++++++++--------- src/net/torvald/terrarum/gameactors/Actor.kt | 5 +- .../terrarum/gameactors/ActorWithBody.kt | 2 - .../terrarum/modulebasegame/BuildingMaker.kt | 95 +++++++-- .../modulebasegame/gameactors/FixtureBase.kt | 62 ++++-- .../gameactors/FixtureTikiTorch.kt | 5 +- .../modulebasegame/gameactors/Interactable.kt | 25 +++ .../terrarum_ui_elements_coord_explained.png | Bin 0 -> 34872 bytes .../terrarum_ui_elements_coord_explained.psd | 3 + 9 files changed, 259 insertions(+), 135 deletions(-) create mode 100644 src/net/torvald/terrarum/modulebasegame/gameactors/Interactable.kt create mode 100644 work_files/terrarum_ui_elements_coord_explained.png create mode 100644 work_files/terrarum_ui_elements_coord_explained.psd diff --git a/src/net/torvald/terrarum/blockproperties/Block.kt b/src/net/torvald/terrarum/blockproperties/Block.kt index aaa1f2a0a..5a130838a 100644 --- a/src/net/torvald/terrarum/blockproperties/Block.kt +++ b/src/net/torvald/terrarum/blockproperties/Block.kt @@ -5,119 +5,126 @@ package net.torvald.terrarum.blockproperties */ object Block { - val AIR = 0 // hard coded; this is the standard + const val AIR = 0 // hard coded; this is the standard - val STONE = 16 - val STONE_QUARRIED = 17 - val STONE_TILE_WHITE = 18 - val STONE_BRICKS = 19 + const val STONE = 16 + const val STONE_QUARRIED = 17 + const val STONE_TILE_WHITE = 18 + const val STONE_BRICKS = 19 - val DIRT = 32 - val GRASS = 33 - val GRASSWALL = 34 + const val DIRT = 32 + const val GRASS = 33 + const val GRASSWALL = 34 - val PLANK_NORMAL = 48 - val PLANK_EBONY = 49 - val PLANK_BIRCH = 50 - val PLANK_BLOODROSE = 51 + const val PLANK_NORMAL = 48 + const val PLANK_EBONY = 49 + const val PLANK_BIRCH = 50 + const val PLANK_BLOODROSE = 51 - val TRUNK_NORMAL = 64 - val TRUNK_EBONY = 65 - val TRUNK_BIRCH = 66 - val TRUNK_BLOODROSE = 67 + const val TRUNK_NORMAL = 64 + const val TRUNK_EBONY = 65 + const val TRUNK_BIRCH = 66 + const val TRUNK_BLOODROSE = 67 - val SAND = 80 - val SAND_WHITE = 81 - val SAND_RED = 82 - val SAND_DESERT = 83 - val SAND_BLACK = 84 - val SAND_GREEN = 85 + const val SAND = 80 + const val SAND_WHITE = 81 + const val SAND_RED = 82 + const val SAND_DESERT = 83 + const val SAND_BLACK = 84 + const val SAND_GREEN = 85 - val GRAVEL = 96 - val GRAVEL_GREY = 97 + const val GRAVEL = 96 + const val GRAVEL_GREY = 97 - val ORE_COPPER = 112 - val ORE_IRON = 113 - val ORE_GOLD = 114 - val ORE_SILVER = 115 - val ORE_ILMENITE = 116 - val ORE_AURICHALCUM = 117 + const val ORE_COPPER = 112 + const val ORE_IRON = 113 + const val ORE_GOLD = 114 + const val ORE_SILVER = 115 + const val ORE_ILMENITE = 116 + const val ORE_AURICHALCUM = 117 - val RAW_RUBY = 128 - val RAW_EMERALD = 129 - val RAW_SAPPHIRE = 130 - val RAW_TOPAZ = 131 - val RAW_DIAMOND = 132 - val RAW_AMETHYST = 133 + const val RAW_RUBY = 128 + const val RAW_EMERALD = 129 + const val RAW_SAPPHIRE = 130 + const val RAW_TOPAZ = 131 + const val RAW_DIAMOND = 132 + const val RAW_AMETHYST = 133 - val SNOW = 144 - val ICE_FRAGILE = 145 - val ICE_NATURAL = 146 - val ICE_MAGICAL = 147 + const val SNOW = 144 + const val ICE_FRAGILE = 145 + const val ICE_NATURAL = 146 + const val ICE_MAGICAL = 147 - val GLASS_CRUDE = 148 - val GLASS_CLEAN = 149 + const val GLASS_CRUDE = 148 + const val GLASS_CLEAN = 149 - val PLATFORM_STONE = 160 - val PLATFORM_WOODEN = 161 - val PLATFORM_EBONY = 162 - val PLATFORM_BIRCH = 163 - val PLATFORM_BLOODROSE = 164 + const val PLATFORM_STONE = 160 + const val PLATFORM_WOODEN = 161 + const val PLATFORM_EBONY = 162 + const val PLATFORM_BIRCH = 163 + const val PLATFORM_BLOODROSE = 164 - val TORCH = 176 - val TORCH_FROST = 177 + const val TORCH = 176 + const val TORCH_FROST = 177 - val TORCH_OFF = 192 - val TORCH_FROST_OFF = 193 + const val TORCH_OFF = 192 + const val TORCH_FROST_OFF = 193 - val ILLUMINATOR_WHITE = 208 - val ILLUMINATOR_YELLOW = 209 - val ILLUMINATOR_ORANGE = 210 - val ILLUMINATOR_RED = 211 - val ILLUMINATOR_FUCHSIA = 212 - val ILLUMINATOR_PURPLE = 213 - val ILLUMINATOR_BLUE = 214 - val ILLUMINATOR_CYAN = 215 - val ILLUMINATOR_GREEN = 216 - val ILLUMINATOR_GREEN_DARK = 217 - val ILLUMINATOR_BROWN = 218 - val ILLUMINATOR_TAN = 219 - val ILLUMINATOR_GREY_LIGHT = 220 - val ILLUMINATOR_GREY_MED = 221 - val ILLUMINATOR_GREY_DARK = 222 - val ILLUMINATOR_BLACK = 223 + const val ILLUMINATOR_WHITE = 208 + const val ILLUMINATOR_YELLOW = 209 + const val ILLUMINATOR_ORANGE = 210 + const val ILLUMINATOR_RED = 211 + const val ILLUMINATOR_FUCHSIA = 212 + const val ILLUMINATOR_PURPLE = 213 + const val ILLUMINATOR_BLUE = 214 + const val ILLUMINATOR_CYAN = 215 + const val ILLUMINATOR_GREEN = 216 + const val ILLUMINATOR_GREEN_DARK = 217 + const val ILLUMINATOR_BROWN = 218 + const val ILLUMINATOR_TAN = 219 + const val ILLUMINATOR_GREY_LIGHT = 220 + const val ILLUMINATOR_GREY_MED = 221 + const val ILLUMINATOR_GREY_DARK = 222 + const val ILLUMINATOR_BLACK = 223 - val ILLUMINATOR_WHITE_OFF = 224 - val ILLUMINATOR_YELLOW_OFF = 225 - val ILLUMINATOR_ORANGE_OFF = 226 - val ILLUMINATOR_RED_OFF = 227 - val ILLUMINATOR_FUCHSIA_OFF = 228 - val ILLUMINATOR_PURPLE_OFF = 229 - val ILLUMINATOR_BLUE_OFF = 230 - val ILLUMINATOR_CYAN_OFF = 231 - val ILLUMINATOR_GREEN_OFF = 232 - val ILLUMINATOR_GREEN_DARK_OFF = 233 - val ILLUMINATOR_BROWN_OFF = 234 - val ILLUMINATOR_TAN_OFF = 235 - val ILLUMINATOR_GREY_LIGHT_OFF = 236 - val ILLUMINATOR_GREY_MED_OFF = 237 - val ILLUMINATOR_GREY_DARK_OFF = 238 - val ILLUMINATOR_BLACK_OFF = 239 + const val ILLUMINATOR_WHITE_OFF = 224 + const val ILLUMINATOR_YELLOW_OFF = 225 + const val ILLUMINATOR_ORANGE_OFF = 226 + const val ILLUMINATOR_RED_OFF = 227 + const val ILLUMINATOR_FUCHSIA_OFF = 228 + const val ILLUMINATOR_PURPLE_OFF = 229 + const val ILLUMINATOR_BLUE_OFF = 230 + const val ILLUMINATOR_CYAN_OFF = 231 + const val ILLUMINATOR_GREEN_OFF = 232 + const val ILLUMINATOR_GREEN_DARK_OFF = 233 + const val ILLUMINATOR_BROWN_OFF = 234 + const val ILLUMINATOR_TAN_OFF = 235 + const val ILLUMINATOR_GREY_LIGHT_OFF = 236 + const val ILLUMINATOR_GREY_MED_OFF = 237 + const val ILLUMINATOR_GREY_DARK_OFF = 238 + const val ILLUMINATOR_BLACK_OFF = 239 - val SANDSTONE = 240 - val SANDSTONE_WHITE = 241 - val SANDSTONE_RED = 242 - val SANDSTONE_DESERT = 243 - val SANDSTONE_BLACK = 244 - val SANDSTONE_GREEN = 245 + const val SANDSTONE = 240 + const val SANDSTONE_WHITE = 241 + const val SANDSTONE_RED = 242 + const val SANDSTONE_DESERT = 243 + const val SANDSTONE_BLACK = 244 + const val SANDSTONE_GREEN = 245 - val LANTERN = 256 - val SUNSTONE = 257 - val DAYLIGHT_CAPACITOR = 258 + const val LANTERN = 256 + const val SUNSTONE = 257 + const val DAYLIGHT_CAPACITOR = 258 - val LAVA = 4094 - val WATER = 4095 + const val ACTORBLOCK_NO_COLLISION = 4191 + const val ACTORBLOCK_FULL_COLLISION = 4092 + const val ACTORBLOCK_ALLOW_MOVE_DOWN = 4093 + const val ACTORBLOCK_NO_PASS_RIGHT = 4094 + const val ACTORBLOCK_NO_PASS_LEFT = 4095 - val NULL = -1 + + const val LAVA = 4094 + const val WATER = 4095 + + const val NULL = -1 } diff --git a/src/net/torvald/terrarum/gameactors/Actor.kt b/src/net/torvald/terrarum/gameactors/Actor.kt index 5585db8cd..7a158c51e 100644 --- a/src/net/torvald/terrarum/gameactors/Actor.kt +++ b/src/net/torvald/terrarum/gameactors/Actor.kt @@ -1,8 +1,5 @@ package net.torvald.terrarum.gameactors -import net.torvald.random.HQRNG -import net.torvald.terrarum.Terrarum -import net.torvald.terrarum.itemproperties.ItemCodex import net.torvald.terrarum.itemproperties.ItemCodex.ACTORID_MIN @@ -64,6 +61,8 @@ abstract class Actor(val renderOrder: RenderOrder) : Comparable, Runnable */ abstract @Event fun onActorValueChange(key: String, value: Any?) + abstract fun dispose() + } annotation class Event diff --git a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt index d62ad3a7f..964f0110d 100644 --- a/src/net/torvald/terrarum/gameactors/ActorWithBody.kt +++ b/src/net/torvald/terrarum/gameactors/ActorWithBody.kt @@ -12,6 +12,4 @@ abstract class ActorWithBody(renderOrder: RenderOrder) : Actor(renderOrder) { abstract fun drawBody(batch: SpriteBatch) abstract fun drawGlow(batch: SpriteBatch) open var tooltipText: String? = null // null: display nothing - - abstract fun dispose() } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt index 31cc45f6e..da251ef8f 100644 --- a/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt +++ b/src/net/torvald/terrarum/modulebasegame/BuildingMaker.kt @@ -1,9 +1,13 @@ package net.torvald.terrarum.modulebasegame import com.badlogic.gdx.Gdx +import com.badlogic.gdx.InputAdapter import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.g2d.SpriteBatch -import net.torvald.terrarum.* +import net.torvald.terrarum.AppLoader +import net.torvald.terrarum.IngameInstance +import net.torvald.terrarum.Terrarum +import net.torvald.terrarum.Yaml import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.gameactors.* import net.torvald.terrarum.gamecontroller.KeyToggler @@ -11,8 +15,8 @@ import net.torvald.terrarum.modulebasegame.gameactors.ActorHumanoid import net.torvald.terrarum.modulebasegame.gameworld.GameWorldExtension import net.torvald.terrarum.modulebasegame.gameworld.WorldTime import net.torvald.terrarum.modulebasegame.ui.Notification -import net.torvald.terrarum.modulebasegame.ui.UIBuildingMakerToolbox import net.torvald.terrarum.ui.UICanvas +import net.torvald.terrarum.ui.UINSMenu import net.torvald.terrarum.worlddrawer.LightmapRenderer import net.torvald.terrarum.worlddrawer.WorldCamera import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack @@ -23,6 +27,32 @@ import kotlin.system.measureNanoTime */ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { + private val menuYaml = Yaml(""" +- File + - New + - Export… + - Export sel… + - Import… + - Save world… + - Load world… +- Tool + - Pencil + - Eyedropper + - Select mrq. + - Move + - Undo + - Redo +- Time + - Morning + - Noon + - Dusk + - Night + - Set… +- Weather + - Sunny + - Raining + """.trimIndent()) + private val timeNow = System.currentTimeMillis() / 1000 val gameWorld = GameWorldExtension(1, 1024, 256, timeNow, timeNow, 0) @@ -49,7 +79,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { override var actorNowPlaying: ActorHumanoid? = MovableWorldCamera() - val uiToolbox = UIBuildingMakerToolbox() + val uiToolbox = UINSMenu("Menu", 100, menuYaml) val notifier = Notification() val uiContainer = ArrayList() @@ -106,7 +136,8 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { - uiToolbox.setPosition(Terrarum.WIDTH - 20, 4) + uiToolbox.setPosition(0, 0) + uiToolbox.isVisible = true notifier.setPosition( (Terrarum.WIDTH - notifier.width) / 2, Terrarum.HEIGHT - notifier.height) @@ -118,6 +149,11 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { LightmapRenderer.fireRecalculateEvent() } + override fun show() { + Gdx.input.inputProcessor = BuildingMakerController(this) + super.show() + } + override fun render(delta: Float) { Gdx.graphics.setTitle(Ingame.getCanonicalTitle()) @@ -172,7 +208,7 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { override fun resize(width: Int, height: Int) { IngameRenderer.resize(Terrarum.WIDTH, Terrarum.HEIGHT) - uiToolbox.setPosition(Terrarum.WIDTH - 20, 4) + uiToolbox.setPosition(0, 0) notifier.setPosition( (Terrarum.WIDTH - notifier.width) / 2, Terrarum.HEIGHT - notifier.height) println("[BuildingMaker] Resize event") @@ -181,16 +217,49 @@ class BuildingMaker(batch: SpriteBatch) : IngameInstance(batch) { override fun dispose() { IngameRenderer.dispose() } - - private val menuYaml = Yaml(""" -- File - - New - - Export - - Import -- Edit - """.trimIndent()) } +class BuildingMakerController(val screen: BuildingMaker) : InputAdapter() { + override fun touchUp(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean { + screen.uiContainer.forEach { it.touchUp(screenX, screenY, pointer, button) } + return true + } + + override fun mouseMoved(screenX: Int, screenY: Int): Boolean { + screen.uiContainer.forEach { it.mouseMoved(screenX, screenY) } + return true + } + + override fun keyTyped(character: Char): Boolean { + screen.uiContainer.forEach { it.keyTyped(character) } + return true + } + + override fun scrolled(amount: Int): Boolean { + screen.uiContainer.forEach { it.scrolled(amount) } + return true + } + + override fun keyUp(keycode: Int): Boolean { + screen.uiContainer.forEach { it.keyUp(keycode) } + return true + } + + override fun touchDragged(screenX: Int, screenY: Int, pointer: Int): Boolean { + screen.uiContainer.forEach { it.touchDragged(screenX, screenY, pointer) } + return true + } + + override fun keyDown(keycode: Int): Boolean { + screen.uiContainer.forEach { it.keyDown(keycode) } + return true + } + + override fun touchDown(screenX: Int, screenY: Int, pointer: Int, button: Int): Boolean { + screen.uiContainer.forEach { it.touchDown(screenX, screenY, pointer, button) } + return true + } +} class MovableWorldCamera : ActorHumanoid(0, usePhysics = false) { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt index 823e16fac..9198bf242 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureBase.kt @@ -1,31 +1,53 @@ package net.torvald.terrarum.modulebasegame.gameactors +import net.torvald.terrarum.Point2d +import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.gameactors.ActorWBMovable -import net.torvald.terrarum.gameworld.GameWorld /** * Created by minjaesong on 2016-06-17. */ -open class FixtureBase(physics: Boolean = true) : - ActorWBMovable(RenderOrder.BEHIND, immobileBody = true, usePhysics = physics) { - /** - * 0: Open - * 1: Blocked - * 2: Platform; can be stood on, press DOWN to go down. Also allows other blocks can be places on top of it (e.g. torch) - * 3: Wall_left; blocks rightward movement - * 4: Wall_right: blocks leftward movement - * 5: Same as 2 but player CANNOT go down - * For example, flag of 4 is good for tables; player can stand on, which means - * downward movement is blocked within the fixtures' AABB. - */ - var collisionFlag: Int = 0 +open class FixtureBase(val blockBox: BlockBox) : +// disabling physics (not allowing the fixture to move) WILL make things easier + ActorWBMovable(RenderOrder.BEHIND, immobileBody = true, usePhysics = false) { + /** + * Block-wise position of this fixture when it's placed on the world. Null if it's not on the world + */ + private var worldBlockPos: Point2d? = null + + /** + * Adds this instance of the fixture to the world + */ + open fun spawn() { + // place filler blocks + // place the filler blocks where: + // origin posX: centre-left if mouseX is on the right-half of the game window, + // centre-right otherwise + // origin posY: bottom + // place the actor within the blockBox where: + // posX: centre of the blockBox + // posY: bottom of the blockBox + // using the actor's hitbox + + + + } + + /** + * Removes this instance of the fixture from the world + */ + open fun despawn() { + // remove filler block + } +} + +data class BlockBox(val collisionType: Int, val width: Int, val height: Int) { companion object { - val COLLISION_OPEN = 0 - val COLLISION_BLOCKED = 1 - val COLLISION_PLATFORM = 2 - val COLLISION_WALL_LEFT = 3 - val COLLISION_WALL_RIGHT = 4 - val COLLISION_PLATFORM_NOGODOWN = 5 + const val NO_COLLISION = Block.ACTORBLOCK_NO_COLLISION + const val FULL_COLLISION = Block.ACTORBLOCK_FULL_COLLISION + const val ALLOW_MOVE_DOWN = Block.ACTORBLOCK_ALLOW_MOVE_DOWN + const val NO_PASS_RIGHT = Block.ACTORBLOCK_NO_PASS_RIGHT + const val NO_PASS_LEFT = Block.ACTORBLOCK_NO_PASS_LEFT } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt index 740b8945b..664760179 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureTikiTorch.kt @@ -7,14 +7,15 @@ import net.torvald.terrarum.blockproperties.BlockCodex import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.Hitbox import net.torvald.terrarum.gameactors.Luminous -import net.torvald.terrarum.gameworld.GameWorld import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import java.util.* /** * Created by minjaesong on 2016-06-17. */ -internal class FixtureTikiTorch : FixtureBase(), Luminous { +internal class FixtureTikiTorch : FixtureBase( + BlockBox(BlockBox.NO_COLLISION, 1, 2) +), Luminous { override var color: Color get() = BlockCodex[Block.TORCH].luminosity diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/Interactable.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/Interactable.kt new file mode 100644 index 000000000..dab0e7c94 --- /dev/null +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/Interactable.kt @@ -0,0 +1,25 @@ +package net.torvald.terrarum.modulebasegame.gameactors + +import net.torvald.terrarum.ui.UICanvas + +/** + * Furnitures that opens its own UI when right-clicked/interact-key-downed + * + * It is recommended to override dispose() as follows: + * ``` + * override fun dispose() { + * closeUI() // UI will be closed when the furniture is being destroyed while the UI is opened + * super.dispose() + * } + * ``` + * + * Created by minjaesong on 2018-12-29. + */ +interface Interactable { + + val ui: UICanvas + + fun openUI() + fun closeUI() + +} \ No newline at end of file diff --git a/work_files/terrarum_ui_elements_coord_explained.png b/work_files/terrarum_ui_elements_coord_explained.png new file mode 100644 index 0000000000000000000000000000000000000000..d376a842fa2b9d9755cb51960cb71b4c84307c93 GIT binary patch literal 34872 zcmeFYbyQtnk}!(9YjC#&clY2f!Q}!McXtmG9D;jr2*KSUL4r$gcXua{?~>$~?wQp+ z-EZc5>%BjQwGudc*RHBvyQ+4{IpInQlE?`72w-4f$kI~cDqvs`nqXkymv9iE5nI;J zL7-po_EK6-U|@)t&;P)|(lTCvfYU70G@Ui&<#>(lY#0G1c1A!(cN=>UG#D7akh?v= z*b3-OY6LX1uoWObY3U#*wJ;GN*Wi$6mbVuJnp;SDIs#Qa71WG9t&Dk0$b|$+`Q3Rz z2yB4P08)1wYg;E?cLDOBczHp8KMymJll}y8wh|y0c_v7zDX&B-X6Fbb%^zqd=hvk2n1t%ilIiJhAh-SggmuK|h!oPh%5 z&+`l{tPIR-YOHL$>|7vqdd1Ac%gp=>R345#F*FA&d~+{Iy(y+fEkd<-q!3VHF%YhP%#{fU zBM6d*!-xaGz|Fx0lAtlWF$2JagNuP1Xk^UJ0p#Ll1%hPwH@aeW)^?8ab|xU1vyqcN zA2=@vJ&0Anvxy0iv-}>^eAZTLmtTWitjwSvCYI;_f6r_Ei}}AztJ_+DL<|zmv&!)P zq^}C{ULXcIIXKujevd0zxC5;<#VtTmbNa~$=QF9FOMXsi{oND?XzJOWJ)0@7l!X&W z@jQMz995vh@4u`qNPk);FTnWMCXAm|6lg;Jd)VS19Pz&=%wK5T%z+?r{TF)s3(U#R z)Y%Q-2ox~`$@t$f4W@s_zZ1aqzvi9;2;}DG0rD_#v$7g9m;l+i833FB69!`=6H^mo z9%EJ(W8=Se{|~w6=4Ipl%aHz?-2WD?u{prj3<$c9n8^S8`vDr6n1Ga+hXKF_05EVE z{WKBK&Nxg=LAGOR#KF!2QsIAe8vnpC{J*~+V>??{pyS_Zm_5J|0J>Izj!pvPrjB+t zqyT$+YYXF_hQ{P-Yx4WH`eU1<&UU1K^F;qtZYDrSi@(!^zo+tt1=9bE^!}yZ{d@9vhi~ka)#Pjj|yoq`Lkze?CH4$_*^MV}xAJ_l?%t`;EZ}&fS z_Ros*N2hqzfbPz601uE7{`M=P0JFb&n7_gOgi!$Ls{pwp&>Ezpu0VM^7bl=5lNKoh zwV5*?sk*cnz}6Mu#7j!c!pTj~!oy1UXGYo?XagGOr03!QUGD!0>oW`gbF6=75B~}O zFRuS$kI~-FNt6B$x6hASAdcDCKmjZJKV$CST>P(jcoxJT4*q(0rq2T+&&~DE>Hh`$ zll8wI{(j-VqD^i6cV|TUd}9CPApQa1zlr;qt$zda-@yJYylUn^Qjx!TM$%tF;=iQx zUoCs4`_uM+DLd2O6y`se!%vXEOECUg1y?yr;rnsXTiWc z#ihkX)ZFKf+AN%OW)hFHD^@G)g+7-zGd1%CVIO>HQ@?q$^@cZdAkL+%na_fc7-K@= z@N>NhdKwK%ywtmVxcCp;0c`O0)Sao4>u|_e@bV~!vmx6QbU(Czm}NuT5(P}XpexLW ztwV4b>Gi#aa{N(wJ=f#*v;b*PA$a9e=mZ5I6<(ki$-m;`1N!t=$loRLIC=?k% zg!a$Dz}TqYpd$UfA3#7LNKzAHWzbU4dbH}Q;^&nmRB&^eKk-dr1pkH3Knksz=hw7P zY8@2W|3%b)LVE zKZYwJbwuG2eC~o0C6U(#CV{5%FsrS5DikV_haLij&8-8 zYi4gjPd`jwv&JE3etXFjN^oYo>~==S$ECI*#t1KdYhftqa;N$#3&t<9b=qC_zO1I& z#)3UCmRaW&sW@t#hi2ZAA4r`Y0f51?QeQ? zz+5j*)|-$;ky6G^qrr`L+<_(u zGIY~3RG03;ylS|nybNsy%GRfmt;!QYC%FeQX8*m3#B#HC_268AqkKVaJD239cF+up zo<32Z{1GFGujcf^P)yJPfP#f?DjjBgL0wzL$s)dtL!Z%jkb%dNQsX5O&+$S$Pt0^Y zYT0?-1Z^d`qhZ~N5m46C?}dgHl}qQT;*Vlmlyo#zKG*fyWcc9E-_j;bpQsA12kLN| zuw$G#xs8VlaTQiLC3yE$42IJq?42kVjg~n^hEo>P94fM%sPncbN2txJN85NAX859D z!3=d7Iek{RTB6K?E~Ap0X53*`gW*?N2pbn7OMGj3aLuwEaM2htyR$BLU){fHd_%oO zK00|GT-I36Hz|!5dbR4fsi%+ggmvE9c|=_u?mC;YSJI+tATP-)78i{_85E@0pvap5 z*(mQbZbxV^IWE*mv}ofi(b$(6zAPn~xVX!~-+5%R;wT$3_GXX)kJX`5H1=eq>2|U4 zuDFJdb2jz<0KNxlBLv3-$Y-Jr6TV_YRX#|@WRl&)f!+#kc~PR_gPGN!3uG#kXw=zS zzjUj5S47bGP>|n&9@YAaC`+Ns7ng5{3;4l8_D#-lNrkC$->h)LVq}_u0$20abzq6H zI!tFPdJOjcEn@8eX9PAzP`kXWO zu=XQ$Lc~8cqz0zG&vO(o>K;d2=@BJbWl*GXY5P|BSscX+(z!rCtdMz^r()UuxXzSm zK33ygFkz$o?(lFWmv_Yd)r+Ki>VSi*3ZE7EEBu?|E@HAA2-K775@AC&wJf`twI$m# zZO6kzY^Lv7v3xs_0fc^})ohF3&aJw}Sk22?820Ky;O(v55_4S1$^FPrX}}#AdJH_Q>0`f?vtdh({Xb28uxZKqw}y}^cauRncT(!NigRd zV0}?5UZ*Ba^n9WzEHQ-hx+O&F!}s!O2dhoaH-1UcJrWRTrw}H9h-}8Mes;p zk#dB$w}my+9o4&K3ybh_+#>X3`eS&AFs2}&_EX;H`P*Kmt&uN=r(pr>yDX3|{9F~m zy4jXHSC>LEInh@=LUr1*(L1DlSa$V^Bd#?1?qABOn)9UuMx|c|oR}A<3csEx2Xt>x zZ)aW$OI3?Y2jY{ z6vj5b@w)#ii!#dM9@=ApRfV>Hf$wp8#j|j ztAlu4i8k~Rvh2YtF|$@=0gmtUR|hi-r%?pHF!;HOs7bhKjv@P##7Ov``AHY=-2%{r zu*T}$2waDRw?cuE1O*$R?Q9UubiE(;_>% zk%7uFwTh!xB=if(O38dmuW=;K&34DHvQyJj46n&Hg8iwg87u@jY zgrn`ac#lp~iB1fVdEykgD26Xtr(2>M&fUYW%hJ$C zE(T-P8;_X$VBJx${1(6S&<2=wx+z4v%<^w9B6eD*$Kcr* z)t=vLgp6x7V<0D6)XsdJ*&Onp+WWUnV%ov7m!f%T?14d)B>` z=_J7+X{Mg}&}(#+lA+QG+1YA-=u4L`=`xO4iH_X~yc@Ta+YM636-+X-Bq#TW!%C*{ z(h<6m_UR|9hP~2UL`6_S;rBWP>NX1EqK!io8wxQZobcnRV^e#yOkpmEKEx5*eHxBa z*GvHyt=auB3EMs5CBhxO@L7xI5$niwN(~mPRXZrAwMokEcA+b9%o~w*b4fA=5-bKK zVZU*=7g^}F><9Ilnwn$jE^lZGJayMzzDTyxK|*<1iB>!ok%t1WQrdRitNFS;QJ1&8 z$bC3ipnewi0#G2L=xT>G-GA+lPiL^3NW>4p!9J&uzpjb8mt8 z&gi^>DJe6C#ks{zBy1s_BD@B3FKfmn5~t&FoFiS|z0Gyl(M)>BpAskJ4J;Xd$AZ~7 zx}CSN82xB2Eq2X>`oa|o@2(PlSncr=N(Jg0EWn!iAuN=6kL}`S2F6mF{+famSYT1DQs*NzE|9^00sgr!2I zT1D+)o~YEr+Hq4FY|HUu(=DXpcyg|0bvSV&5waQ#+?xgJ5cf{yUsD#D7L@*_ibEO+7!2U54l{vL(b^i zG19*i0ykbf7@WlINQ)YcN);LB!&O|9wG ztgE$H4Cw6Hjp131e?#9h5DJh#u6upcyK^rF9#yCsJ9N9VBFIGBKXXFsVKGgBrRP{- zfCMwxCX_V{a|HDq`@>~JqJ4O1R|$_E#X~LHA@{6NL&9Q0q8f>=(3HFd=QV1?+C@(E z9=u@li_LsIcI+?XeZuL#qjhkdfCQ8{u-j$p^}cAFNY{L!mlYjXp?K1%&3B}vI@`Er zma})Bvm3H?`yjvKBYxJ=-%qg}FR0z0L{=wM5NtPphX0b_F*$ zUw^-xWA$JAAXYc*0W{tA0FqDHkGfxJ~H;iGyb#ll$$FPoBeRy-qa`XHo_CVy{Z99PwItMDx0>2X9I!Hc3w28?_OR^ z#Fctua;U07v?z)OsUUXX4_J57McG_-hnFVX!z+Xw;kDRlS-7O*3)ej*CPjE^t;7x$ zav}Q&h>k*RvNyKT)T1|j_t7t6%svia(eK18OG?VCXuNDClDl6+^wd4PM2+Izu%S)Y zz_82ZiZxBz{kAOMMbCM1qtS)65h1d<`|Yf_VWJho0i&n|&1iy!qIa+Ajom<(<-x&~ z##@VwI3+!FZC1_t1@mFc{&6pz39C>7y?SftCh&@_3sr;5G}tQI*(B7AaqS9#q#Thv z!r+mg6G+!C(?)bIeA%{_K4hjN`F`Ta8JF{!G#HMx&`ju7T6b=sOL?3Y?kcO>j@yZ{ zy?F;IG`nH6ur$DWMRkha)-Tz5bwzfOZt-#8Re9l9%?AYNaMfXb$RtL;LH(+V>D0br z(1o*T^6fpGf;v} zE!ldh6A6A4F}e2z{zeZ8msuw|)kbSy0PH3uWv@-+*k-`_OALK-`7nXhrS`Ji_mZo5 zvUT;2udmcEma0>Un#=fCISRSnORsnyMFtj}Ph83SaSYO>xV$5)FdSS-ONFXk(WzIC zU#{u(R>i)NOKKX=j*evN_qI}B<`fWcQ|~ZTrN8j(F7NHE?)XJ( z&?%8bVDzjkY3-y7ZY{CJuO%rXKb6<6-h|;b-oGCTiPQW*6u~Hldux=>>Q(ix^R82D9}r_ zzqtF!+12eJrG}7ZRB4VV#(B!~6(V0NY;X&)`}c0agqFEYCl7;3P;sN7htbYpOiZ7} zvCVZdkmwTMzHbTn^@;6RGh5quu{4?eiA{7x`*qnk)-^rukgwH(4{+p4re((a!L)wo zJcX0lbl%3`zOvj)rYzu9S>?s?re?8?Je}OhcHKPoc3Vf%K}C2Qf9dc zws?E5ygq_~OBkdzYk|5fx3YnCPs#m=Vy@kpOHrl}S-UD%H@O9+Y%AjDdd+RTd$9k? zm1|Al`t*A|Vc7~axO}}>FO+z7gJGxJDLU!w*5*TK{7{Pp%*^d(ON6vM0cWH1t}LE4 z^NFDi*wjn^x0h0dT!wHRn--34MR+f!C?JQYZ5Q-6N4}`lZyu*`CU;K4i3Xl-fvs`& zVAz#yZ5FtTETi0GGm1)wiL+AIEuNTnGmsNQT zgr;o;d5!eJv<&T48;G}2L@7|=JjWEU5a|F=C=fb;SyF*3hTPZM$&h<5b5gt#%@BPb!ogt6ou5(it)52Ed@ypE@&O4TTl^;3zHe@_JI&`Jk%f8a_CgLtSBm=44b?(r7Om&0z|~Agagcnq@1p zOzEOkdnUuMoaoZaFV==f`W^3==LW64mey@z1*qH@aj-U1socU{FQiV^oakNL2<+4w zwLUIw*^q0ejf`h3@@?1{q;3cZ>Yk2Ra<9uf3D9zRsv2ZZ94)qvkCVG1v*R~tZs_Mt z2{OX@?2LXRzO0uY(8(&(%0q=d2^^DKqGx?b@ZrEM71}4Fx-I3wp0<`TTI`xNEILjm zDt*Q2q%$#kR4<4Wx-4S@Haq6_xy@JEN5(yL8U70BS)7pNyNcbjP%-EhqINHZkU-=G zi~k(7l=!HirETa8gBd@an~bz>v0c|MQpLI<*`0SQk?tto5L&sFj3%#u0v5-IkH;l83R=y}7VeQy zk3}>P!5T7i9AiJrx<|$V_GMh`yv4A^IGZ+lf{cAS%eK?y4NH)sHD{(l4X@3z7YSV| zGN=1OO+USxv#egx*+1|^Mivh5BpDFM^+aD+f8U!EjQa%pL1a}l*XSk zc*vu*&VWalun;l0lj~J9xSYm1x<5qLCblfevv=Vxzv>`Xp~L1WWu4zPv=E|WmW{IV zLuw&&TX`Kh-~NpvA=J0USJ6D(r_*Zrd6rw?5~gJ}WgN?vq7P7KY(ZuUNx2}m5g0q) z2a~HMsB9PAh-iHsJAE=d^zj^Lf0$~7Sdo6DV6>bFiDpEho3s6_Ov7)fn*MU zbmU2|vXvVYa%MRlM7|;5ULpj=%?G*H$6I7#bCJ;4_ONluJbdkMVzwei!R=K0X|J{# zyBNZDqba)2*D&<<5~zgd77+KT(-P7@O?whp*0|;T<_2;N<-+_(BAXEn>eFWdK;ck| zsygl)Pva5y7QOvs6g(@bM;CIwgCnn))8X@Iu2R_Ei~$j3IiGRkH!>!H_CFraSrK7f z?5`{{-JZns?v<{rh6{sNFV{1OnGe!adX@uzxeOA-;C(Fp@-t2bzI7YzH-<^Hx>l@x zXBj9f#zkpcy~6v0xte}1AjuN8rC)w$bJ9LE_by!GbE#){DE-oCwN2ZO(8Tir6!DkQ zH@CsY;x&1_g3#D@Y3|{Z{IHm=WI5_*?$)u#3UulNrOCQK=23@3?00zE7^bgl41RBw z1|m0=&vPtqkdn6XJK6|e%Od}~i*({Dodm&8)1a&Qm`L2MpMQrfw57gKkzuUo$EP12uQ9U-=Th6K3?WnezN47gsj}li-S1C{q3Izgi{g( z{YBe4FH5|j2X{#BhO?+zgnXvU1Qx#$j#S=c)wm8*f3Rnd!QHgc`O$Ndw#ST$-=>>7 zGvYNi7um&d`UNAXyIL*iD5=v31XdJGa14(p!--A2EBK7SydjW;w(Ud^VoopQV zw<$HVD4Mbbx7~wpJ2##Y8nWGg{(SuZhHr3ssk{b^g?PSy< zu8$sRKVTNZgnt|UJ}JoKJzp)9a2D)8$KXZrqkf)RV5~&mPc`{hAl;I%WDZvu)>R;Q z^HCDGrWsmLyXhAaP*V$p4hGz^VJBT%boJPZAQ3H+~!{#T3sr*`1w551XAbUti*XByMgxPx=zb;1!< zquxFTv{h~DmAhrc?C;J0)r!^Wsh4k`v*k_}>6#L3Qeo6M*wk**WsFl>URo&Y+ti+H zD|9&Dk|}6vBj$81*ZTBEdLPuYb&{Ws`)&Eow<-@?j&XgJk2m%ZB;a0LFq_jK7t`Vh z1RNQhZ>BRr?Tlj<%p#3X4Fki!BTUj;xf=DLsx0kI)QUv^nM-93OoF^}Q0zvOVhQVlRp|?`X;M z+x3x>l0W$!g;s!icfDNtG0uceOsIo(5((|?1iLsXAJ_Qw>DX|$^E`X>ob;$PqFBGW)s9TEU2#PyFZA&f!hsakKU*qxb!Sr z+{K)UOBZuwvlI->E1AJBu7zw{gm>seE;=b>-T<_WfK7lKPvG#{?sigH=34n{75ol53n3`j+OQw_K8{2EB`AXSa(|`8DWqi03z7%wUn)Y`;)s zB9Dl3F%#}tcT1i%6?+{aK^Q~kveVlQ^Cdi<(t-NG532UmkSPRD41(%*m9VCZQFn%D^E#-(T$11fO-}km;#|-}gdC8GGK&jE(;e5P zJKRrq*eBT8M~Qs6NU75uAu*sZO%~LN!d|)Ug>gFDigkE+y2h<=7fM_xVpFm2)n3Jy z=q_IdI~=X4@l97Cn*+iqKPrNE%mERcoM;6X+Rmb8&}sM{+CFy|dklqF=f-|7BYjS= z;JcIiS5fq>0uFF2iO^_@6KYMBk(=`{4}}46mFMI$iPSq) zxN)UX#0`U20nR;zj&eJ7E^f$zS`ndJcto-{m2Fbo4WCdSHK=7k_Dsr*Huj?AK8JdQ z6>hk))Qca(mUAEr&tG--^=-nUz7j9>C~DyQl8RAJI`0qA%%rUxn59A=!m&0_T&O)a zr!(k!WoS;)i9({cQ_Zs%(-eIY#$Z#!Cy7jn;3OrVk5fDF6o`+%WbAHl^)mLNYGhw7 zgQ$n0m8wZ)t!j*<=1l+mYT#(HENF~~jc$>rVThAP0P#}0#^n%nnn8whPlk7Euz{7h zLxUqvnRo_mz7CJ~GeeEL zC(h9NDe$|`vTB=cPy-(>sCP0+3iaKVX@51pp&G5h>^)$_J=6mNmg{W#w$}w_kMe0^IQR43 zu~PXC=bc#;e(+|RH2bm1sZb4+r5uwCI81I4MbWeB&8Dk@mn=o8{dtKlefA<^Y+$1k2L6V7oOa~9 zU0z)sgY=BfeWG>HdzYY!D9)kXjsb*7V~DVnE-1X7Z&<^(y{U&`xN$YLxSmcq8CuMq z9AdFx*Pq8#ZnT1N;etVuZRH5O(Vkk+x=iuV+>K7}FXBtsAvgVeB~jt!LFv%k(`dwH z2x&TO#QU}wyfU?S;y{lp6&n{0{D&<{YW~pI`>)t^mqkpr5|hxAF`pXJ_iy`N*Wr{v zQX^6#nvH)XS{$~^*7@jAp$v+$)3PxiS`)}!mv<)lYs884r@rCaxvT{6=O$mt z+-N?+xvMp1=yxFh;!0SXkV3wUePA1z-`$27h!BJQo7FBP$fn-A>*(>rDlf(WbQsbg^b$ucY_~z>ViC|}7zVF$TFoJ7$ zhEBQsM-bbVedi2l-@aCP&vfTyGAcOdri8M79ZT5#0N}AkZh+kc6TE`Ok!68!8(_T5 za$jL+X&Ah&8yn2C)W+56CaR`TJXb>0{Iq%eJ~JjhOlAzfI87eB!JN^LuM@2}+ms#u zd}8qoMJ&xK*XNYO0=w4o_8#rL@kk8B0uR3P{}^VmL1lEBjw2r`E+4AbUT;K8TLG6h(A0DkOjIXRS~ka4y^LbFA-#!T7a zVQRA?4Ap5g?!>h2q9HFQrDMZz$ghq-Kck zM9&X@rGLqh_JYVU^kx2fm$APTa&XG~fxS&(Mz5r&h+=pguM|CE0CBF%v(tj$ulD$Q#U)r|k&@Q+5kV^?4Q&Ah8?J>z z{IJ7Aw*ZJK=_LoA=w3YO$W=SA0?Q;*h98WC&lQNQU%9j`=uGz1z=wjZ(xY#b3${1P93G1F7K3$kibS0=hmMN>_fiXL+*_x4Wx&)zh&je<@*v z4)w(O(6AJKoMnQ#n8&mkaV^CM5g;ZE@rjI(l`<@5WYA+akUk?8lZ~~8QnnM`b^~KZ z=M)kpAzN<0yj$Qk;pbqcw{DaXw^BF)f)jm5&`mi3{ct(Zk?6<)m9MqL300AbU<>Y@ zR!76Ma7%k!9P(e}403!xGM@wboB{u-xg={pGiNw;=-qO?-mG9@nJBa z*qrPvq9w4+!%!#DMvS}$r*nuf8U3m?bsw1_vW8w972Xf6vPyCby|3ipjgVzQA;wKk zK}(5`DJqY%XHGhgj6x#HPKYg1eP6SUOW+rfA8TQikKGVT0aNvK_*|tR&2Nh&{mgK$ zdcgES43;0Q;ca(5;ducj1wejv-FC&5dgf)Q|2-H;J2anJXYZ2cCA8u}) zdwP*?;gkXr%rZrF>IYiKsYU#5SImBTX zWu_A54MM4&LSJdE@E9&zMgq>NDCa} zG`+Ig4}POyxkj?)UHZC&aKzl{yb+8Kum^rhFJAIv@dtM{)T~IHWb4G1eJ_hv z>qvaWN#R;W$qDvVXrP%FS$wSikt^^JBod|*LEZ+f%O;UNZXW9okXKL@%NOyfFr~A z;;uJ36Q^pzv$Rotn=iCgj6Zz2#3Nf?n<6*y>T=EZP#7se)xa$6dXO>_SA8KL`Q~jY z`(qANorBUL|3FRC59^IliA8ji(qoF&9xl#y0EWXbeahVC$7m!)O6uAx(|9(sE&A_j zX!t@#r(Olznjh=Hh`g4TB^{EV6BLl{SCSGYt?hljEG7MzsD0VNJ3fUfdYO*b)}a7a z6?;p03NLq;8y!s&>=|%4U(lxeH4brAnGE}z%8}w^H5Aj2P73p)hM@4SW%r7!@2i3+ zR3V))(y9Cj{Kh>k>!vT|tFVIV`U@2HW5>yOYU4q^3pZ9?B3t-A^gz7yUD1ve6E&9F=8g=2`l4h~(&oQk~Fp=a1{_)mNqMf(J(R85KB zIp<1Vd!^=_P&IAB0wfoQ5JXI_K6qlbjq%bIkxd)+>Cvbr*w;@H9lAEVRHD0B$HH_H zU<@!YCSKQ4WWLxJ zwD5^w!ElRjDv{B(^S>zG^kve^{POucFl64O+^<-|k^4fw*@=a^>yMDY6SEjQSK$jo zV2#5n^n?QzOM~iYBb>r{jy`W-NRmV;;Q7>EFJb4tgVyr@;UF<$euKc!Y{=HZ!cp;f zUP{WI_jWlr+O1}V$gPh8qiWeQdGamPXwk@l+P4wSqPXB_(z(&Ci^D_fpbwj$OQuTL zj`23V2HNri`tRMpH!3WHXFDT}$%Q3?yNeb}Nmu5Rnulm=d@7u!@B(w6(zXJ3!~F6P z@qkN3QY|6jm)NmiuAlX8d@*?*VdJT_w9P?CSga;9+2*ZBHtnE&;- z!HZWSVWuQ;afrvz+|fkQ9>-zqb$iQ$z9;XkU^K2GBDm3AT8dOurL@YjRbzvgfaCz` zk`Ki+m^5{><`~PH*NqW^9RW`LTF|+llqq>LKK!K7wJx$%tqB~Q#XyxQ`0gwH3ft5IN4+DjC(g2Y`%$JtrRG6>0 zrdZWiiEfo4Z~O`CR#mYYb_`;_mQo59L;pzY}G2 z@Se)PN?Zo6+YbsZ{FQB$gboGiA|2mg!Q!D@>Fr_sX=iURF`9dEH>als7V_%Y$W2;d9igIxsQ z{C3FRGgEuOrM*#}d8R;#^08j#fQ84jFhe{LuEeo4c82Fh*AqKuL4z8Ir?arTYYw{Y z#_FoH%fEEkeCNuC;r%cRipYV`)k>?85^P_j>N#cEzVgQtj*I&yJf@4qiAjBS$XqmJ z)Ru$na%X3vd>rtd`l3$?R3fxtJyQ6=`!FM!nb(}^A9#9n*dQxPB?UziaAQbNs)bhq z_2!HY;$Y+IHkCCEe~DzVBH%V~%)HH($x?$#{a%j(*Bte0*ACI|O6&Ct(y6xylABTy zwK+u+um~B>GG>`m;MThy<3F^;nBckVq|=4a+EF|`ls5ed&0}Gd5d1|{!eB_sR9?C~ z45QVhH4*_XjAx%J0U}O!(G{M#9f2&>r~# zNvcK}{|wzf0Fj&bF5ci(U2*1d14Ow3B19IM_?^a50;U2R90Imw0PCtGu4Jvl5jK1i_{O9=6z z7uYIbTHhV8g8;T@muIhT!2rs%)WxdPqC1GJA3%G3jfh}~DZ>3SjCF$uo?IMKx#giQ z#+IuzJdc;RusrYUX{Ctj6dXw|p0Z(UUbH!sJdOcXZT}$5JX1gMWbV#8eirCoH?F`6 zX)U+-4MJ>AvbbWiW5y|ow-j2lb)y@v=xmzxYe_o|ZvVHtbuND6i7hTd>vM?qG34R> zaVZXr8ZNLi)qCPubg2`$7VaMu>$lhF{z{t(f=^%gcXC=pNPjfAUnA=>Xj%c3d$xna z1>ex5SXR)`6zdYzsrQW69GIJllXIx#72#S;)0PS<9VXdwM=P%O?fNroLWo&fZ6bY< z`3)9hl-9nHBr=MsL z1U@Jh7Eh|*#cD`no2!vRUr*^e@4~?@IAdXjZ!~L{y1=Q8g7-@9-YZXO@^dB;62t}| zl(+|CqFv2W3tu+nI zD&t>SFEFy~oP&jW##Ves=jstN^csEkicJPe&7{A)8;oGqH$w z05uT{VdyHOkg1R*;jWrr(ziD*V6a|t`_;)GR5*wq|6Kej$w?O$TBnHv>F4V$ppG*t zI6xSpDIQV7T6qHY1+?+DoW>H3rwC3)V_w9hON05W$4#s4yph3UxG(d0?uERt%uMn{U1+eN$vPo*_jHG_EBe%Y8PP|lqZdO0ViKw(54D@^{oHGjk++^FL^Bb|A5 zaXHqdS8Y{sh%AGqL>N!j;sehw>Xmb+>4;P+dtC7G@T26)M?CsP3a`~6@KDeEIO1+M zcGs!nFyygq+|7d|V}BNI!D3k65X8VI#TL`GfT*(lNdso4;+(BTq-$6C>a|D%H)6ci)8*;KLb@OYx`ix zQebziWeT1BS>nU|BXaT>ZzrX*aDtn^?Ktq*y0uJ43Hvpl72TVl!_Z)S$`U;T$KofW zS(SgeFpptle~4i#y7Li*8rExFz*9*~vK3NcEnjYgdZ+|F9g)*brsx=GtKSXS+WZw#8gM#W{I9L*MG_k*$N z)6U4MLMQ4cO7iS@RkmZKQ!UEZc!$c4 zpg0DTwTe=fH?NLrT!rCV3$Q`ZR$S$RwIZmwPQfN~YHrE?uQxP6vJOi`~HK$*;P9g5QJZ$5oj^}BCq#DFJODRv9)J9Nb!QqLg&SWi(CSOt}GUcNA6Ms`YD1)(m_> z3?8F$dKDOa`LCPptL?+k=>+TBmtEQ=!^z$+)_W4XY#yyV3B8p9@x0u-^@4<8r8Pdh zqL`B@!hrTC(IP1O*5i92b{D4xrC*X;J$WhJMFW7xm94V%o2MUsLSDOHY?mqV4m^_h zOY6}J8^FrrUpk#y8)@oQf#Ve?Sqgtr*DkMKm!U|372ory@dR5Y_U^gq4*~0?}=rw7}e4Iq>jarfz31ph@1>9qVzNJq#m?NqrqK zGR|AlvckFOIbtJGO-i^Z*?M5na4imdZJ6Snb1bR% z$nWNgHeZaAmgdU>4i(5BNbH`@wZiF4cc&8{O3a-;;1Mqy4`i=$i&bJ~8MRIIScy;P zlZyOq5h$(&d%Dc5+I8J{>ehC81*sNGB6SOSP1BGEyzNKd+8metYeQ+I-}%;R_3DK# znW=x>P@vlMmtS9TJjW6eXrRv}e-|x&e%kTx51xSDAAPPVKO@`J&x67ck)nY6d1$2Q z!JszEb7BAQ22=hF2IKvK{5J>JB49+<-|2h=y)}jZECYDTKb(WSF^J~#1^8=F5OLw9 zj@#g|K($%uA)Hj_@^QRgr+!)`7=YMnOw#wK#HJ z)z46OJq%twj~%5S48tO!-iYqaakoFqff2b<9FmwcTA<>$LGgYWDacQuTg-5oOm|_@ zf22t=nh9aNTGo|t5SK-Ury{O(f{-5oiJQ1`rzDJ z%Nimw3Zi%~9@i>T71_7(RN@7=|DZe_$Q{e|-IKgOQ}YIu*Y~3#iofbxUA|OxmMMMUb6EwRleg6eE{CR`L4iqrbgo8<@PxyW8#0&#zg=Mm9 zERxA<(lEIEsDW8;%XXd#LO3Wn#;zXZxDeAKt*wZXFUGmXU}k_ydrB6JWbW8V`eq|N z_1scWDIve3#n25V->n~oJ3@*OOFZoa*uj;?oCo@xv_S1RvF+JLe;UAP`-Krg0a|BD z0*_%KquR~88wlu@MaHo&g4SODr@gO?in49n9deKyq@-Iy!UsXRV+N3J1VL#K7?AE5 zN>D&jB!?COX+*jtq)SQ|LK;Tt-ZwtJ&-?xO_P1;8{cH1M7HiGD?z!W-&Nztj05%uufgEqlK zPmF%bot2KJ-TQPjVjWD*^yQW(QcSzlgQp!r)tM2gTb|7>;q zm*|hk2Mmk`cukC6EgTbAU{dlq{`1QoKOP8ok$C{*NZG7uob`vY=&eFXuz!@4muski z2>*V5n>IqQlLlZUyaZlv&4tXV1*=Ifob2lq>(pO59y!}2RNa%cy);(yV-fo4vS^`z zr6#_d0b;wa3~?>jYL8(8Sk#hl4AWywL_u+4Pf9B$x!!KZXXd&JYW%uLP|E}%#ICzY z6ULMTvCoykU~KE0I{|KRMo!15s{6E+TNraeqi40O8o%iAGO z4{Sid8un^*-P7^Lklw#Bh$u+{@IJd46+;Xg^m}gr813c1ycPPh?JsKi`V5}XR7Gus zt$Mp`dWboOIc18M#s_GxAm1{Y$DPksF%L5aaXrQ1PbPpNz}0=%>h_gUbhXG5C!X(e z6KoBU4#E=#SRu=YLIitoS<1n_>3!ELEtz`LS}N7QA_-8>pXu9_T>-EHZxp2hR&3Uo zRoKm<18jbKAcO#QKS|ZQ&<)d=s3P2bYYKzyH0J_f`AMXIC^IzH)zcc-I1E#}Ee+Dr zE(}Bc_lvznqOIBlmLqTozK|{J6c>-}+6BGf`zxXqK=d+Tj{vq11T(K>oy>{-$x;DR z%d`HT;T%=7p01Hc=8pV~?=iq;!+?XJu2O1gxjI*jXIas{R|B`tTIf3b=c3YsDZ{i4 zS%uIjC7oOVl<6pjYld8%CV#dx$k$D)IZ~f3*)priO#xsal$5^WdjTb(eio||bx7D2 zZnpa8F`#LHV+ZZ>D>T)9i1$@bsrpt#Fv$W*BT1kZ$FKD;Vz0BN2}~~A6pt_Nn!n0) zsUXCHQY{1=e{(pbh=rLe`+RNu?rLS))HP4=4ldu9l~k9FInsSE{t=ALR#5_Fyx?2` zdtUC5NCg2*3@vPZRrj}v!C@T&F$yzeJCQMT?h7@x-0y?^%ZxN*$wBHFsku~_Ood4w>XmGWjL6f;Aolvy zdsrlWvXYIMRCuy1&{fWLUm0R19fek2Op0WfEYZd{Y?oj<1J~U)b`BuT{(CQJyiHjo zy7<_#Rs^+0-ANb9I=|VlZs6xK*Z#gvpfNMjRUfpcT zo7a*H?UBm(?aG;V^8J)JS*|Zzu00#8H2wspzRI#E8GC*<1C@Y#o#mUo&a}&NuqRz{ znr<>Uy2>Cky4eSS_V4IG_JrK1X#P@ax{!koh^90=Fh6HbXmW;GX?w^JOSH9%Ct}m- ztuP6hbYzZ%fYlaag$L%X3&s1#RUC5#^%ge2OU^KtPtu*XNLo}2DQHzH9}|B= z7X`yk^(L<)#NFNiIM*n5RZp0l<7oJ^)`NBS!|x0(ey;g-Yo5#IGBl%%x2yDoxiJHT zRja0>2KtGEuxWn2))-;hvu=7!`Veg9roxei+@RU{BEZ}B01Nj;i5#rb)haQbM z$6UkRTfdaOYr<;cj2dgj!g9B^I$BPTbqvW+%>bOZE!;B>lQW+f!Us~Hry<{tQT2P& z%>>nkQM!Oy-i{M$pZpAG3}peOQpy}lhi-s)SRBM4NDw4hRrDjdMprC9J)>G0y@CzU z<4{!mlb~oiO}Gv2+>F4t5N4d~8lNH<-3QF9=fR{Hs2&5IR`EV*t^}B$r5!dxzCxoX zYOHu{S#>$ISaz6RZk)ghAXYRp=ugGd*=;0*i2aaO*^)_OLKT9fs$Fs8`>W(PN($hi zW60LO3A@73@ZyEn!bdp#?;q^ZymmMdG#$-v*6O*X7k*E8^?4-|HeqWarCo3|F4$HR z7j=6=nSMpH&E-OHZ44RCVjCY8zC~Rd@0G_t9U%k3aWx6D1TrlV6s5~z0CRIP2A_HC z0h85>4^H*ep8`GSJ=d%l%Dy$YZvo5?pFGA){(Le9H4b|b*H(Al!xZ~sB`Z?Kd^yXN zFd2oiL=|0~c@cAxcnr}*#*HcHR{Y`Guha5}7x;BMy&mMWc;FuXUUqDxggZ*i@1QVU z`YnAEdwN`FaylUR!9`IHn0QVYk zhw)!S*K+B=e$9k5xYDEN(yP3`QR`1IzPPGqQxzf-O3n_N&J%x&A=h&+4>O}#O#WzM zw>lL6%0<`ToyYwHomrU1!=&`~L#QZYaC7#Q_pyXiU?qx!GxV8~*`8&Sg&o46Gb-lG zm%}r|lRLVb!5byjIpkKhgu>kUt#a80CE@5)GGF)kl83**qKw&;J!RF6`98*s5Pm|0*Q*iU@@}clEquXt9DGpAi!p zEQttxEY=;V5R@?HYV6PT#T~?;i9e->djB?`nzv(d)ZDk4eu{mS{nP2E`jgY}tX$pu zyr%`}YS6ye)L$uk42Cpb!ds>$p5pVyXXxI)JqwZ@tnV%41Cv!xCr+CoG zpaE5gjuVh*7vS28XE^b;E_zS{a=Vn;0t6CrcNb^5e6Qm6!CtD13i-PFszUHcI#iH7 ziww@2Qv0HI$C9y^nA`me5nCJMf*&KIQ789DPgR;n6Kje<6ns(xr_~KPG}t9GDk7xQw?67B}AT5y+inEGlHKY&2j>3jHAC)Vj_>HS(yxjGQm`qZka#$L4Fav!aa)QL{HcoY zcji&;3`QLJC|T>f<73?hy_FF#SLO(L-S3qv=m7(ND|k(Hc4;nRNL_}Y2q!qtUkLeV zQw#>tCO^%n_|@dTu=RK|G$HQ}NDYI{YA8aKF+@JQfB}DjD}xddpO0so!`w25RvjLX zqO~a#Gj@!6V~|;BRfKOafpE|q7q0rQ3tw^{NBg(I`qhkq_+c%az^**yAKQNn_i9MPeVMd3QQi72YI7;Fkn`w zA>j+Z7gs;*-b#(au`NgG76yH2ubz2U&c?jvE3D!QBx_WzkJ{gDOh(Or@T?(>=p)&P zWcRCNrfwJi_+IrgEq9>L;*j;)dtN#=PpQ>eO(!~sff=uGYR{^vkV^VHdYR0%Jv=nh zxG|DUnWK3;hGly55x<&EeW>kFMrD;8_gzc5Q`6ggc5e#&D`WrU>a}-e>NlUHv1?hn_GuHBa-ES7>2k>;|$0TeEW|>=onZ0%sJOR=o2hzw8gn|+u#rsXfy}S3@U!` zJ?b&Mth+dPO_!qdebiL7@;f7fteDl6HKwrn)z9}bR02KhBRV3)wXOTui}dMB17xUw z(f*3i>BvWE=Z$f`0_f8kU55}(+?4_K2hZB22Cl1Fr%B@@DfMdPi*s^Ea`n_H@aI+p zb95h0!?_7BI{w-*-JF2ymI@e8XKf3I#U$6j2m%CC^Ur>&$2~3#Kbx1G&(7Aw_suJG zC{}gAP-@?~`zK^C)dGOWk7h@?RpHB{+@<$T7HehjJ^FXGxp1B@VzwKEKET$*VNd1o zK7B(%*={N?BBe+-ti{pzP0|X2r$C?FVGisXEW)or!&w-HsqHP7r$XjEQZNc8W@9ni7c8&`$nUVLJ3C*{wsYb(P$nESsyr4hhsJ_MU zbX$Iyx2sD~ynGkFOrz%%hg*s>^YY96CUPdWvidHX9Z{T|N=;$Zct;Zasbs2SB@r`t zl?gA{(`3u(E!y{}hapI%!~Iyjsq6g7G{GGvdIhB=bBb@?Fygk0^FVu#t4HxX2-r@W z)i9A({A}4UOs5?}g zCv}xJxJ~rBb0plhA{#p%2QLDmCaZxX$`cVUr}SWnW`wvG0Qk(@s7R6+(_CyC@@bVN z+n9hf<|buGp+}rm6VmgYnH_vOwqTZ$cK@cD7a-R(nNbr3rwWCw8ji>B< z8&6$DqhXC|u2vNn812BjBu>t(EV+V6VM^#{7HpBUovTm{oH=SN`p6;QIq>(s;VW5K z_}HRnOo}(?4g+tBFq27+>hP`F5)Bh<%c`we67QMc9uDJv_o~YZ|4^~ir4-6x{SmT? zu!!)mO}2(p@rEbMJ|Y?+SMTd3bH(hn7R*(nY$`{bQYUmJm6`?wskyJUe`<=1Z>OFnAJz76q!|j_+f3^ius=lkbjqd$ zbxw~PA)fb5R|^L^`&Q4p&>tLT6TmTrVXc5$R^{$ll*$L?Cp=AihZn#q#n2*bPrt>$=fUiNrMYLlLtRm#_G zBTI}R-o9t!QM-c+M8_5PzK7Y$+{j2gt9@S#{_sCN9~Q6>2xlZJ%9iFQ$Gsy@i}dHK zry7<5qB*Gz`6r8WKv1iF0^~65zvSS=c1yz8X%*~qOB$5%@xMM20wG+(5o0h~lkr$k z;ZGbQgoi=mR$xt5xnj~8m2H4SFrsGj5h8+-1*#=e<=7saIifU0kDy0lO2sj5*YhX* zRGx3x|Gd>)f)eld>}JDVM@|7`xQJd5(J-=bJA}v!D&j|Px)bqOL<~fN+^A@Z11xC) zh>EEGeS(+_>E6>@9nPVF1)rM%8!X03-iYlVzj(=z*GA8iATW;CID(amJBM-TQ)or= zL7P!aIDRD5Zztfn^gLQ;eD@1&0AV-(C)EbwI)4gb@?7m!k8VEcqCF!~@omD{QZ+5A zD%n`yCqs+@54P0ipDr4neA9L1wg@y(qZACIeOd0TamDb0IB_hblKzeSzfh!!4Cxbm zc*_ND-L2PQ^NRUn8`yTQ`?Nr#L+#*D%^}C2d%1OOaLu8kDu16>I#^Of`Qh)8df8!_ zk>U)D5uxr9-gNOO)wWORCTS*cs%(5{2O6=Mjse0;cjLfdkipDa@?aCi?3^K2N>Pf( zghvVhJf4oK&MQ>+plzWOIaoc267-&0*UhFOuYZWm!It_0Q-)&EJ*O3LHW=#Jq|E{< z4t0%M5X@1S(a@_irZp@t_k98BrPo0VGnm(vyJniO`Cmj+wncz?kzWRTO3PaEXWwop z)({CSl)vaxwpdZQ(*l|2a@J~KxHi3K>{htA41YjPt9$oxNJH-70U-}I@>{Hs*dHNZ zK8RV&30p7Idw68aDAY#)>o&HXo5L8^ zD)?eh?TI&o4Dy}F?!bbB#>=8xQ|rljVMJkfT|{%@ZsNFbhX>lNg-3a8=c83v7*%7g zXYf;0UDbC6cPIvP#>)+1k+u_A5Qm2FvmK4Y+|~vJqfzL>yy|?d$4My&w)IJ?mAA2V zW2IV(3%iii>*K{Dl4p>AVEN2U_~M?-Y9T)jnfl{Gx6Mh>=v`zoWf{kt8rno!G=GW> zU>uzd1Bpx$qc;_h=K0$1BVJ~QG(?yPQgrR5CQ;njUcen_hiWonhbVnn6`{-3+xd|G zieq{GX1TdgIngq-f2Q-Lv6c}enSQf}_2H_^5-#R9ljTco0udbI$|8X&p;K=-lu zi40Hb(&b#IuzdFH7KW z#Lt&OwumGj@bF(YP65MmJ`JRXFZ1`x&dVAUJj!l#f%jcyI9HH~j!)@NgbEkV2e za(#rZEX^JVtg5UfnRoHzwt`l4?Kc~JpOEk)%8TW57umHn#g6z7w+d#Z4Ue%tVn^b@ zK&Iv-xFj|F(*~=$Z99+MpRmgm74FTDQDVqtup^#rEz3U^_p`US+HVLfdo{WFlOFyE z1133TP{#^p4HjH^O^(*dmcjqU&X_2N5htMXY{+Fiv_jK-o`|l!FI?r^1Y!pLTpiof zgL52GYv|v|a4|Oj;v%$RNa$Yz4Wr=U-Fipi_fPBszn-!h7R4ScIv&(Z=4+pIGBDeM z*OaF9$%I&uoFMZ#t_=9LJ&k>JU_?nF!?#PB$g8G>jVV^7TQ|j-msW+iMw#}PV`BG{4L!axpU8`VX_8Tpg>mMsx1cKb?u{qY(d7C* z2)l(5`Yx!k`ASh}-RFMKtT-}y^@uk-X#(QacGQcW`mivk72Lo<5;4i>wbVa~1Z6#9V> z5ANF(Z9OvNB*ztHc}-00$>W}VCbMjGyd9NjM1$9dX#v+D9SDIKfo6LMn#HT}rgAAg zllMBI$swQnJllk@HGhU}R{BU%i2B#(&RzqsH8b8##oW-*L6m7_zmu*bQ9$Nk3!`gz zVhGCe4zu^0x=|ZBMt}W5`*O*I^i%ET@v>9%4q3Oktp2s1?EA2C=DE1IPGwQ=QOV+= zAu%L9)#{SsF^g^Ci${yx0~~8M$)iJfxj)wd>2ksYE2U!G-X9kOGVN}z#?G<@8~Jwr zcZDI0u=*(EFXZ&fHv6%*seDGJ)i+kj?0$KU{_VsJ_&MlKMyAe;CO(*^jDj=r7f(+} zi-#@txVi?*^VnKIUUWwL?D5q@av7`r}_q4)A72u#VZ-ZaL~sopJXv; z?vvOnP{eOfBr@=MUo2Df4IPF8s(PSr`->=}O&%Q~cx_HpO=pPnVWyjF>m-%?cy#IN zV^ny%-B^^gm!8tS;CtrJ{p|d#a+$?V_2Zw6XKgCJ+p-*wG1%9BVB%Lz0{hVEXk_2! zS-ts<|91c@7=o5Pf0*3DyP4&Mr9~eM1%G-|f-*j9(liKlyH35ob@>NXZ~oSB3p{#k*wDGOTB% z5>E`tfFi%gLWyi|UII`(CaQJ%ETq#GVO-pG{)VS`A0JHG@(_aDS#%ccgkro_j9nF8 zVWn|36S}*tc>v^@>}8c}mo_j;$emk#^0Pvq;D;fHdyrda6emtRPaoQF zU-4gS@c1jw#J)S@>IW9d4*l4Quwh1|HOY954SGiAB%5YB5XS#C6JAn$s)PP=Ox4;w zWePMhY^wBJt?1w$iFG?30S|Fw_AVw1b<^H(;;^9;|JI-FSK9|M#1PWf+Cs8rPh6RA zWP2kc#vnqw@8u(L1>a|W&L;gO1kH;@rX5~oE}UAD|7|6eAk8NQP|4O<#1!5!aiY(C zg0?#%Dd?|@y{CnPQcEu3@E19UjH?*i%z&&mqQrnROk-73sq3Mi&PjC9e1g`$61x+x zwaFPQ3-?zUO#|P$+$Lm*42G0RbbaQqLNjA1d&uDcdAh!x$M z<)uaGa-Z=BV=K0>7@5ypZ+|ha=5WwUMJMdW3-lG2?UQlHL8KV|IB90t$TI57VoB@E z02ksO46lboqac0-==Fhq3iZh`zo`&JpZ^e0hln|$vtcjMS06|=6!RCqAF5s(iOy2& z%osG6KW>P3&s@PU4tn;kdZS7SVY#TV1}-&@zLB*|$%yzBuIN7X&XMfH!ZTTBc<{R= z8<0&|ftfY6IK#3r(Y3$urel`R7PY$ArS4jYeUf)Ry#M5SFdwfInk$f2k;`S0?_np+ z4LyuxZ%k1s_Ob9`EB|$8j}!M%*2Q$L&ja-(z1W?$An<-e-d0Sy9YLM{n)t$L?1yU* zo|aCwgMyNJpK?|2`_2IqHPK|3H(92Cz0r!Mev7fW1P3l*BXAcnI@H732}@F;4Veq0ZIZ1WBASQ;%G&bp{LCajW`cnj}Zz3Z8#; z9omRyp_TytixlkjG5Fn!hs(yo7FhRX3VQQCuEQ z6P2mWy%k=sD>u>@txW|D`1rRl>w8(C)e5a_qx@AGbbK2rmot1 z=bHp4m=uLH8NYOB@4a7-$1EVWmN}-lE_y0jG`Qy)Q0J;aIqykS^KrJ~N_1_gp=-T$ zG-#4OX+opQwbD4D6wM^-a+1w`Y(B(H)b#DML9UY%;+*Xl;(Xp1?@O2^?2Jn z<~b0pk-%~?T+lb;JK$L7d!MsN1;^4&VX$J{sZUZL{c8)HXTMsdVgT-k zGDCVCUCgqgSkY8AmbfFs#MEW9+A^gRy`kU_>TEJ6<+N85nQ|tiWis|Bcst?bi?zrN zkURMk61Bfxm*;tpSkfA7ovoXS-zB{2gvzKKwz|F0YWnuLnM!Ku!`IE)d?IzM)+$%^ zKE7!j%wX+?XuAv@unkrAD3({<%5&L8pth+vpUYBkZ}3?4npE^n1re7ao>;PqU4kGp z)ZOwPlA^dgV)z028WbWui+&(^jye5yN7zcBMZzqlXiCMgTY`%IZ~}`xF~vud5&Z#- z-VE092|;9DQ>k{R$bV%K=2e zP6x-mD3t{k{*ChQd{U-f$3q{6GuNE-*kWOCB55-OY`119g@GrVn8bw50pc|u$`l&m z%E)FNPJNf<0H@f&-YG~apy6du>EfN@GYf z9FZ%wj2or}8RQwbsU5jt@g}kH4h3Zoeo;TRI4>12nZDyR_wi}y(c#W$0H9UyvUM{I z-va}+1wUo!E$xdR+_jJ)ofDA83ua$&S5e<+Lr|BW2SbSOF%`b^!73|JPsZrx&L1V# zs{Jx6Yf}G7lUY`c(TUyGM~lzC5}u|dQ6KYH6f=z%ZraR?758p6&-b(@2xbR`F)j%J zS2#M6pO zCw1G}iI~!23@2;p(i*+w>AaG-Bp{Ghknmw}2#V<<$7y47|G9L^&=~YiAE8Jv9cd9< zj8dxLg#t!<)2T1%DAiuaA+=}~6T#Z*1&|G4O1o8l1tNxRl#b-`6};mqocK_V^=p4) zfnU4iUwq3cbE=#4$dHD0xQNt;!jpDhT-zPe&Ue3r+rn_x;=~&b$thgNRa0!94=%)L zFw1sn1suA}CeHv(5o#I}0ZFXHAM*QxFU!z<&$`|pUb@)4&ZA;#S6HQF!0;8o=5CAG zvC|QShKL0jF_y*_E{&;<`5=8~+P zpY+U)aW|mSaMrWxyD6}vx;X$iR4yHOK_}kpmeePa0H!XG;i|Er)2i%wdyu*nmr*@J zKE9voR~SR^V>&+E#-AhE4~oF-#Ge3$D>FMU!NEAic*F$l5bvwyJ;E=1;o3?K%ey^8 z4DbOeAsSi|*aak9i5MbZOrSSfRX}xETR`$dvF-|ptJiA)wrc&0!MvSu>{e(fKxdy1 z0qqcaL(FP6+Zxd?^K$5!9Hq5UsBPMqOeQPBX#0x&$!LwZP~ zB-|=v=4o&ZwYN8xARi$(sUC%gkIelqp_73?hHHy2-iyP3aknVNXV^u+?&IY$k#sne zAcBOL)5~a7bBTXv@>eOkRQ|Ty^kV;y)prev(EfPS%#|C>&+qkr(AEgT!lP1tYvH^% z<*;Q0UR23C=+dr;Bjdi6Qq7Y;Wuc&>1*oA*EsAql?H+3FgWJ=Rzt*NxXy-sN>bhpR zkrV(`I*$g#%Yl{GwgbYBn{BpL(d#XYtaU3Tz%ioF zmc4J1ZwH-+62zL_d>@c@UCbbvTEP|yK=3!Ip@T!Y)<=lsXD5qV*X50*Ez-jeri!FY zT5O7V7;*=Grb6@PT?`ElY9#%NEI#D-;YjHD=7v8fmY?{1s~D%Oy+YXz7&k_za=_y#|gVz20FLd zdzn)?u8O>H4KKWj*1$O0w5PYldn>BBwXd2?{AQ7pka*T0DZ^7 zFwqACCv6Lj+=C%L;7cv*gZczv~S?Rz}$x!|)^nsu?lQQmYk(Y$P@_<%s$3JjPe~d5H~4 z22h^;?vz=*hX1!T73kavboso|l>hFr z2?O-Tzq@7vdh_4Y(}ERlI&1>s_8Tqj??Y}R$v21GxSQXH+$`z;aL5tz|Ew#{F&49# z-_Ncof(sVB-!tuQ#?|HhJ+|(j>2UT_`2U@uasRuc?*2WG?w`qdGgM@V=fr;x)-$sP zn4P}|?)@)M(fdzM4cy3|p?o{hz}Miv2kY@y{d1@PlLPwx%Tx3IbEQW>QNp{>--GpL zQjAoAMfpFT{r5k4>VJ6I}r_H(0op%S4Ajg1otz<|?hC z3$UssT>K4iPzwwCFiIi+$puoC*D>(mav54mGq4;vLL+W(42QXIKgh-Wict%AmFFzB z$2+s&#+)s`tC?WieVQ!BHxWe)$p}O|JQz7fW}T zW%_~5psiSsdU22geT<@zqX%bIL6GOGVw~>JydR}DA5X9`mcXC+*>k(tN>;-V!J0(eXLEkiwCM9G!z(lsgIKWc_b zCZ$&7V{f&fa%OIVP_WpuoqH31wTFp8)`fXN`u<#RtHrx<8Yu~IO<0W%VZ)yscGuf# zS|+dNk?R5SxzsrNFkAc{t<@_R>4U>fYH2UqapXPuFo&-9gL+z+Irw7Z#mc46A6un1 zvo@b)2MBQaUoutm0vVSI(n>R`Z-TaVC)R$3kyGq;i5WG#h;Jh_YuP@DBL6}f3D}M! zoDpt=ZOb?g+#Gve+G=QRf~Zi+ImMmUk9Z>i(?_3PQomDG+MSu2Wo`y&q((t@H6?#{ zLVfT<3JMRAV^W}s0H!vuH!%%%CjsTCpN=p>W|)k{uRGr+F?~hf-SI>PDiyW3qaEaH zRMc>Cu9QZcRqkC4x7>qO`=10V02XqG09g}?tj+b~W;%#XJc~Ho73OVB9PrVnzM62zdTHtN4AM?j?Sy>w;VSEiLx1jW ziT>ENCr*SO?V8ae6=d>^o(!=6j~H`#xw$Jjjor%-W+hFIO0ngVmF#3^COb8k#q;IW zn?RkA7?B=Se8lq{jO)lp{i)>I5=>&iu8)gM6h8C%TAM`gbI1zroxv{?OA)eIA0=T{ zgS@p5HbDAJ{HTe&td67Jc@BPHU~QwiRG2$pY*!diRXX47e_q`uhFj9|K%dxaW-6SB zRyT5Kqmv!ji0353zyiKnu3q=1;PxtQu-3f~%%Iwv&$ykM#8u69u+R#R6q zCiF8t*%8}q3RzrJU7h{BkC#4S+>e67 zSnm8D22X{~BfXN5ID%i=UsP>;H-!S8N>Jh*LP1^@k0~go9@ga!)N3A;;mZwBag*ys zzxq%^h+cs|J+;x1@$fhrzPuYYg96gX7Dt~yFDp8GV(_xq3vtw&m7(L)a#|!d{^OXw zM!1fQ-VtA{qN_oT<~2j$Y9}MRL${ym#uhw zg!UeG3T%(a7V%NNcaE^vtKVeWf6p{Nk5wIYFcn&m-SY6c>ZUV2FK_jcXAu1l(^ENn zlFZ}&Yu4Z9(A3}JzUlrk=f2hhT@|3c7bShQsYww}8*iCAQI=V>lxdZ3BC}E6Vr;Q- zlTv+P7*gO{izPb1G5=6edtuTukGIP8=VyK9T$hvMN59>)gTcF>F~iq$_bdu