From bdead40a80eda36f6e26b5361530d9baf79e2903 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 21 Nov 2021 17:09:49 +1100 Subject: [PATCH] Thrusters (shuttle go nyoom) (#5352) --- .../Cargo/UI/CargoConsoleMenu.xaml.cs | 13 +- Content.Client/Entry/IgnoredComponents.cs | 1 + .../Shuttles/ShuttleConsoleComponent.cs | 1 + Content.Client/Shuttles/ThrusterVisualizer.cs | 67 +++ Content.IntegrationTests/Tests/ShuttleTest.cs | 1 + Content.Server/Alert/Click/StopPiloting.cs | 2 + .../Cargo/Components/CargoTelepadComponent.cs | 9 +- .../Physics/Controllers/MoverController.cs | 141 ++++-- .../Shuttles/Components/DockingComponent.cs | 21 + .../Shuttles/Components/ShuttleComponent.cs | 37 ++ .../ShuttleConsoleComponent.cs | 3 +- .../Shuttles/Components/ThrusterComponent.cs | 86 ++++ .../{ => EntitySystems}/DockingSystem.cs | 20 +- .../ShuttleConsoleSystem.cs | 7 +- .../{ => EntitySystems}/ShuttleSystem.cs | 81 +-- .../Shuttles/EntitySystems/ThrusterSystem.cs | 476 ++++++++++++++++++ Content.Server/Shuttles/ShuttleComponent.cs | 8 - .../{ => Components}/PilotComponent.cs | 2 +- .../SharedDockingComponent.cs | 3 +- .../SharedShuttleComponent.cs | 8 +- .../SharedShuttleConsoleComponent.cs | 2 +- .../Components/SharedThrusterComponent.cs | 12 + .../Shuttles/SharedShuttleConsoleSystem.cs | 1 + Resources/Audio/Effects/shuttle_thruster.ogg | Bin 0 -> 123868 bytes .../components/rotatable-component.ftl | 2 +- .../Catalog/Cargo/cargo_shuttle.yml | 23 + .../Machines/Computers/computers.yml | 2 + .../Structures/Shuttles/thrusters.yml | 85 ++++ .../Shuttles/gyroscope.rsi/base.png | Bin 0 -> 687 bytes .../Shuttles/gyroscope.rsi/meta.json | 43 ++ .../Shuttles/gyroscope.rsi/thrust.png | Bin 0 -> 6184 bytes .../Shuttles/gyroscope.rsi/thrust_burn.png | Bin 0 -> 14087 bytes .../gyroscope.rsi/thrust_burn_unshaded.png | Bin 0 -> 6034 bytes .../Structures/Shuttles/thruster.rsi/base.png | Bin 0 -> 2384 bytes .../Shuttles/thruster.rsi/meta.json | 83 +++ .../Shuttles/thruster.rsi/thrust.png | Bin 0 -> 1504 bytes .../thruster.rsi/thrust_burn_unshaded.png | Bin 0 -> 4298 bytes 37 files changed, 1100 insertions(+), 140 deletions(-) create mode 100644 Content.Client/Shuttles/ThrusterVisualizer.cs create mode 100644 Content.Server/Shuttles/Components/DockingComponent.cs create mode 100644 Content.Server/Shuttles/Components/ShuttleComponent.cs rename Content.Server/Shuttles/{ => Components}/ShuttleConsoleComponent.cs (87%) create mode 100644 Content.Server/Shuttles/Components/ThrusterComponent.cs rename Content.Server/Shuttles/{ => EntitySystems}/DockingSystem.cs (97%) rename Content.Server/Shuttles/{ => EntitySystems}/ShuttleConsoleSystem.cs (97%) rename Content.Server/Shuttles/{ => EntitySystems}/ShuttleSystem.cs (52%) create mode 100644 Content.Server/Shuttles/EntitySystems/ThrusterSystem.cs delete mode 100644 Content.Server/Shuttles/ShuttleComponent.cs rename Content.Shared/Shuttles/{ => Components}/PilotComponent.cs (97%) rename Content.Shared/Shuttles/{ => Components}/SharedDockingComponent.cs (87%) rename Content.Shared/Shuttles/{ => Components}/SharedShuttleComponent.cs (65%) rename Content.Shared/Shuttles/{ => Components}/SharedShuttleConsoleComponent.cs (87%) create mode 100644 Content.Shared/Shuttles/Components/SharedThrusterComponent.cs create mode 100644 Resources/Audio/Effects/shuttle_thruster.ogg create mode 100644 Resources/Prototypes/Catalog/Cargo/cargo_shuttle.yml create mode 100644 Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml create mode 100644 Resources/Textures/Structures/Shuttles/gyroscope.rsi/base.png create mode 100644 Resources/Textures/Structures/Shuttles/gyroscope.rsi/meta.json create mode 100644 Resources/Textures/Structures/Shuttles/gyroscope.rsi/thrust.png create mode 100644 Resources/Textures/Structures/Shuttles/gyroscope.rsi/thrust_burn.png create mode 100644 Resources/Textures/Structures/Shuttles/gyroscope.rsi/thrust_burn_unshaded.png create mode 100644 Resources/Textures/Structures/Shuttles/thruster.rsi/base.png create mode 100644 Resources/Textures/Structures/Shuttles/thruster.rsi/meta.json create mode 100644 Resources/Textures/Structures/Shuttles/thruster.rsi/thrust.png create mode 100644 Resources/Textures/Structures/Shuttles/thruster.rsi/thrust_burn_unshaded.png diff --git a/Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs b/Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs index b0d45d7bf1..7af91d114d 100644 --- a/Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs +++ b/Content.Client/Cargo/UI/CargoConsoleMenu.xaml.cs @@ -10,7 +10,9 @@ using Robust.Client.UserInterface.XAML; using Robust.Client.Utility; using Robust.Shared.IoC; using Robust.Shared.Localization; +using Robust.Shared.Log; using Robust.Shared.Maths; +using Robust.Shared.Utility; using static Robust.Client.UserInterface.Controls.BaseButton; using static Robust.Client.UserInterface.Controls.BoxContainer; @@ -146,6 +148,15 @@ namespace Content.Client.Cargo.UI foreach (var order in Owner.Orders.Orders) { + var productName = Owner.Market.GetProduct(order.ProductId)?.Name; + + if (productName == null) + { + DebugTools.Assert(false); + Logger.ErrorS("cargo", $"Unable to find product name for {order.ProductId}"); + continue; + } + var row = new CargoOrderRow { Order = order, @@ -154,7 +165,7 @@ namespace Content.Client.Cargo.UI { Text = Loc.GetString( "cargo-console-menu-populate-orders-cargo-order-row-product-name-text", - ("productName", Owner.Market.GetProduct(order.ProductId)?.Name!), + ("productName", productName), ("orderAmount", order.Amount), ("orderRequester", order.Requester)) }, diff --git a/Content.Client/Entry/IgnoredComponents.cs b/Content.Client/Entry/IgnoredComponents.cs index ee39094ede..35feb13d51 100644 --- a/Content.Client/Entry/IgnoredComponents.cs +++ b/Content.Client/Entry/IgnoredComponents.cs @@ -101,6 +101,7 @@ namespace Content.Client.Entry "Lock", "PresetIdCard", "SolarControlConsole", + "Thruster", "FlashOnTrigger", "SoundOnTrigger", "TriggerOnCollide", diff --git a/Content.Client/Shuttles/ShuttleConsoleComponent.cs b/Content.Client/Shuttles/ShuttleConsoleComponent.cs index e5632721f3..86c4410b86 100644 --- a/Content.Client/Shuttles/ShuttleConsoleComponent.cs +++ b/Content.Client/Shuttles/ShuttleConsoleComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Shuttles; +using Content.Shared.Shuttles.Components; using Robust.Shared.GameObjects; namespace Content.Client.Shuttles diff --git a/Content.Client/Shuttles/ThrusterVisualizer.cs b/Content.Client/Shuttles/ThrusterVisualizer.cs new file mode 100644 index 0000000000..6bc2ae6a6e --- /dev/null +++ b/Content.Client/Shuttles/ThrusterVisualizer.cs @@ -0,0 +1,67 @@ +using Content.Shared.Shuttles.Components; +using Robust.Client.GameObjects; + +namespace Content.Client.Shuttles +{ + public sealed class ThrusterVisualizer : AppearanceVisualizer + { + public override void OnChangeData(AppearanceComponent component) + { + base.OnChangeData(component); + + if (!component.Owner.TryGetComponent(out SpriteComponent? spriteComponent)) return; + + component.TryGetData(ThrusterVisualState.State, out bool state); + + switch (state) + { + case true: + spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustOn, true); + + if (component.TryGetData(ThrusterVisualState.Thrusting, out bool thrusting) && thrusting) + { + if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.Thrusting, out _)) + { + spriteComponent.LayerSetVisible(ThrusterVisualLayers.Thrusting, true); + } + + if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.ThrustingUnshaded, out _)) + { + spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustingUnshaded, true); + } + } + else + { + DisableThrusting(component, spriteComponent); + } + + break; + case false: + spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustOn, false); + DisableThrusting(component, spriteComponent); + break; + } + } + + private void DisableThrusting(AppearanceComponent component, SpriteComponent spriteComponent) + { + if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.Thrusting, out _)) + { + spriteComponent.LayerSetVisible(ThrusterVisualLayers.Thrusting, false); + } + + if (spriteComponent.LayerMapTryGet(ThrusterVisualLayers.ThrustingUnshaded, out _)) + { + spriteComponent.LayerSetVisible(ThrusterVisualLayers.ThrustingUnshaded, false); + } + } + } + + public enum ThrusterVisualLayers : byte + { + Base, + ThrustOn, + Thrusting, + ThrustingUnshaded, + } +} diff --git a/Content.IntegrationTests/Tests/ShuttleTest.cs b/Content.IntegrationTests/Tests/ShuttleTest.cs index 1696f36bec..1593082791 100644 --- a/Content.IntegrationTests/Tests/ShuttleTest.cs +++ b/Content.IntegrationTests/Tests/ShuttleTest.cs @@ -1,6 +1,7 @@ #nullable enable using System.Threading.Tasks; using Content.Server.Shuttles; +using Content.Server.Shuttles.Components; using NUnit.Framework; using Robust.Shared.GameObjects; using Robust.Shared.Map; diff --git a/Content.Server/Alert/Click/StopPiloting.cs b/Content.Server/Alert/Click/StopPiloting.cs index 51d5cb17bc..64b6841a70 100644 --- a/Content.Server/Alert/Click/StopPiloting.cs +++ b/Content.Server/Alert/Click/StopPiloting.cs @@ -1,6 +1,8 @@ using Content.Server.Shuttles; +using Content.Server.Shuttles.EntitySystems; using Content.Shared.Alert; using Content.Shared.Shuttles; +using Content.Shared.Shuttles.Components; using JetBrains.Annotations; using Robust.Shared.GameObjects; using Robust.Shared.Serialization.Manager.Attributes; diff --git a/Content.Server/Cargo/Components/CargoTelepadComponent.cs b/Content.Server/Cargo/Components/CargoTelepadComponent.cs index 4428a96661..d674713a4c 100644 --- a/Content.Server/Cargo/Components/CargoTelepadComponent.cs +++ b/Content.Server/Cargo/Components/CargoTelepadComponent.cs @@ -26,8 +26,6 @@ namespace Content.Server.Cargo.Components public class CargoTelepadComponent : Component { [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IEntityManager _entityManager = default!; - public override string Name => "CargoTelepad"; private const float TeleportDuration = 0.5f; @@ -120,11 +118,14 @@ namespace Content.Server.Cargo.Components // spawn the order if (!_prototypeManager.TryIndex(data.ProductId, out CargoProductPrototype? prototype)) return; + var product = Owner.EntityManager.SpawnEntity(prototype.Product, Owner.Transform.Coordinates); + product.Transform.Anchored = false; + // spawn a piece of paper. var printed = Owner.EntityManager.SpawnEntity(PrinterOutput, Owner.Transform.Coordinates); - if (!_entityManager.TryGetComponent(printed.Uid, out PaperComponent paper)) + if (!Owner.EntityManager.TryGetComponent(printed.Uid, out PaperComponent paper)) return; // fill in the order data @@ -137,7 +138,7 @@ namespace Content.Server.Cargo.Components ("approver", data.Approver))); // attempt to attach the label - if (_entityManager.TryGetComponent(product.Uid, out PaperLabelComponent label)) + if (Owner.EntityManager.TryGetComponent(product.Uid, out PaperLabelComponent label)) { EntitySystem.Get().TryInsert(OwnerUid, label.LabelSlot, printed); } diff --git a/Content.Server/Physics/Controllers/MoverController.cs b/Content.Server/Physics/Controllers/MoverController.cs index f39f1e3585..401a2d2eed 100644 --- a/Content.Server/Physics/Controllers/MoverController.cs +++ b/Content.Server/Physics/Controllers/MoverController.cs @@ -3,17 +3,16 @@ using System.Collections.Generic; using Content.Server.Inventory.Components; using Content.Server.Items; using Content.Server.Movement.Components; -using Content.Server.Shuttles; -using Content.Shared.Audio; +using Content.Server.Shuttles.Components; +using Content.Server.Shuttles.EntitySystems; using Content.Shared.CCVar; using Content.Shared.Inventory; using Content.Shared.Maps; using Content.Shared.Movement; using Content.Shared.Movement.Components; -using Content.Shared.Sound; using Content.Shared.Shuttles; +using Content.Shared.Shuttles.Components; using Content.Shared.Tag; -using Robust.Server.GameObjects; using Robust.Shared.Audio; using Robust.Shared.Configuration; using Robust.Shared.GameObjects; @@ -21,12 +20,7 @@ using Robust.Shared.IoC; using Robust.Shared.Log; using Robust.Shared.Map; using Robust.Shared.Maths; -using Robust.Shared.Physics; -using Robust.Shared.Physics.Collision.Shapes; -using Robust.Shared.Physics.Dynamics; using Robust.Shared.Player; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; using Robust.Shared.Utility; namespace Content.Server.Physics.Controllers @@ -95,44 +89,120 @@ namespace Content.Server.Physics.Controllers return; } - // Depending whether you have "cruise" mode on (tank controls, higher speed) or "docking" mode on (strafing, lower speed) - // inputs will do different things. - // TODO: Do that - float speedCap; - var angularSpeed = 0.075f; - // ShuttleSystem has already worked out the ratio so we'll just multiply it back by the mass. - var movement = (mover.VelocityDir.walking + mover.VelocityDir.sprinting); + var movement = mover.VelocityDir.walking + mover.VelocityDir.sprinting; + var system = EntitySystem.Get(); + + if (movement.Length.Equals(0f)) + { + // TODO: This visualization doesn't work with multiple pilots so need to address that somehow. + system.DisableAllThrustDirections(shuttleComponent); + return; + } + + var speedCap = 0f; switch (shuttleComponent.Mode) { case ShuttleMode.Docking: - if (physicsComponent.LinearVelocity.LengthSquared == 0f) - { - movement *= 5f; - } + system.DisableAllThrustDirections(shuttleComponent); + var dockDirection = movement.ToWorldAngle().GetDir(); + var dockFlag = dockDirection.AsFlag(); - if (movement.Length != 0f) - physicsComponent.ApplyLinearImpulse(physicsComponent.Owner.Transform.WorldRotation.RotateVec(movement) * shuttleComponent.SpeedMultipler * physicsComponent.Mass); + // Won't just do cardinal directions. + foreach (DirectionFlag dir in Enum.GetValues(typeof(DirectionFlag))) + { + // Brain no worky but I just want cardinals + switch (dir) + { + case DirectionFlag.South: + case DirectionFlag.East: + case DirectionFlag.North: + case DirectionFlag.West: + break; + default: + continue; + } + + if ((dir & dockFlag) == 0x0) continue; + + system.EnableThrustDirection(shuttleComponent, dir); + + var index = (int) Math.Log2((int) dir); + + var dockSpeed = shuttleComponent.LinearThrusterImpulse[index]; + + // TODO: Cvar for the speed drop + dockSpeed /= 5f; + + if (physicsComponent.LinearVelocity.LengthSquared == 0f) + { + dockSpeed *= 5f; + } + + var moveAngle = movement.ToWorldAngle(); + + physicsComponent.ApplyLinearImpulse(moveAngle.RotateVec(physicsComponent.Owner.Transform.WorldRotation.ToWorldVec()) * + dockSpeed); + } speedCap = _shuttleDockSpeedCap; break; case ShuttleMode.Cruise: - if (movement.Length != 0.0f) + if (movement.Y == 0f) { + system.DisableThrustDirection(shuttleComponent, DirectionFlag.South); + system.DisableThrustDirection(shuttleComponent, DirectionFlag.North); + } + else + { + var direction = movement.Y > 0f ? Direction.North : Direction.South; + var linearSpeed = shuttleComponent.LinearThrusterImpulse[(int) direction / 2]; + if (physicsComponent.LinearVelocity.LengthSquared == 0f) { - movement.Y *= 5f; + linearSpeed *= 5f; } // Currently this is slow BUT we'd have a separate multiplier for docking and cruising or whatever. - physicsComponent.ApplyLinearImpulse((physicsComponent.Owner.Transform.WorldRotation + new Angle(MathF.PI / 2)).ToVec() * - shuttleComponent.SpeedMultipler * - physicsComponent.Mass * - movement.Y * - 2.5f); + physicsComponent.ApplyLinearImpulse(physicsComponent.Owner.Transform.WorldRotation.Opposite().ToWorldVec() * + linearSpeed * + movement.Y); - physicsComponent.ApplyAngularImpulse(-movement.X * angularSpeed * physicsComponent.Mass); + switch (direction) + { + case Direction.North: + system.DisableThrustDirection(shuttleComponent, DirectionFlag.South); + system.EnableThrustDirection(shuttleComponent, DirectionFlag.North); + break; + case Direction.South: + system.DisableThrustDirection(shuttleComponent, DirectionFlag.North); + system.EnableThrustDirection(shuttleComponent, DirectionFlag.South); + break; + } + } + + var angularSpeed = shuttleComponent.AngularThrust; + + if (movement.X == 0f) + { + system.DisableThrustDirection(shuttleComponent, DirectionFlag.West); + system.DisableThrustDirection(shuttleComponent, DirectionFlag.East); + } + else if (movement.X != 0f) + { + physicsComponent.ApplyAngularImpulse(-movement.X * angularSpeed); + + if (movement.X < 0f) + { + system.EnableThrustDirection(shuttleComponent, DirectionFlag.West); + system.DisableThrustDirection(shuttleComponent, DirectionFlag.East); + } + else + { + system.EnableThrustDirection(shuttleComponent, DirectionFlag.East); + system.DisableThrustDirection(shuttleComponent, DirectionFlag.West); + } } // TODO WHEN THIS ACTUALLY WORKS @@ -142,15 +212,20 @@ namespace Content.Server.Physics.Controllers throw new ArgumentOutOfRangeException(); } - // Look don't my ride ass on this stuff most of the PR was just getting the thing working, we can - // ideaguys the shit out of it later. - var velocity = physicsComponent.LinearVelocity; + var angVelocity = physicsComponent.AngularVelocity; if (velocity.Length > speedCap) { physicsComponent.LinearVelocity = velocity.Normalized * speedCap; } + + /* TODO: Need to suss something out but this PR already BEEG + if (angVelocity > speedCap) + { + physicsComponent.AngularVelocity = speedCap; + } + */ } protected override void HandleFootsteps(IMoverComponent mover, IMobMoverComponent mobMover) diff --git a/Content.Server/Shuttles/Components/DockingComponent.cs b/Content.Server/Shuttles/Components/DockingComponent.cs new file mode 100644 index 0000000000..35c0374d31 --- /dev/null +++ b/Content.Server/Shuttles/Components/DockingComponent.cs @@ -0,0 +1,21 @@ +using Content.Shared.Shuttles; +using Content.Shared.Shuttles.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Physics.Dynamics.Joints; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Shuttles.Components +{ + [RegisterComponent] + public sealed class DockingComponent : SharedDockingComponent + { + [ViewVariables] + public DockingComponent? DockedWith; + + [ViewVariables] + public Joint? DockJoint; + + [ViewVariables] + public override bool Docked => DockedWith != null; + } +} diff --git a/Content.Server/Shuttles/Components/ShuttleComponent.cs b/Content.Server/Shuttles/Components/ShuttleComponent.cs new file mode 100644 index 0000000000..6f77caf198 --- /dev/null +++ b/Content.Server/Shuttles/Components/ShuttleComponent.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using Content.Shared.Shuttles.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Maths; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Shuttles.Components +{ + [RegisterComponent] + public sealed class ShuttleComponent : SharedShuttleComponent + { + /// + /// The cached impulse available for each cardinal direction + /// + [ViewVariables] + public readonly float[] LinearThrusterImpulse = new float[4]; + + /// + /// The thrusters contributing to each direction for impulse. + /// + public readonly List[] LinearThrusters = new List[4]; + + /// + /// The thrusters contributing to the angular impulse of the shuttle. + /// + public readonly List AngularThrusters = new List(); + + [ViewVariables] + public float AngularThrust = 0f; + + /// + /// A bitmask of all the directions we are considered thrusting. + /// + [ViewVariables] + public DirectionFlag ThrustDirections = DirectionFlag.None; + } +} diff --git a/Content.Server/Shuttles/ShuttleConsoleComponent.cs b/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs similarity index 87% rename from Content.Server/Shuttles/ShuttleConsoleComponent.cs rename to Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs index 4a7e1ffc4d..0be8e40d6e 100644 --- a/Content.Server/Shuttles/ShuttleConsoleComponent.cs +++ b/Content.Server/Shuttles/Components/ShuttleConsoleComponent.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; using Content.Shared.Shuttles; +using Content.Shared.Shuttles.Components; using Robust.Shared.GameObjects; using Robust.Shared.ViewVariables; -namespace Content.Server.Shuttles +namespace Content.Server.Shuttles.Components { [RegisterComponent] [ComponentReference(typeof(SharedShuttleConsoleComponent))] diff --git a/Content.Server/Shuttles/Components/ThrusterComponent.cs b/Content.Server/Shuttles/Components/ThrusterComponent.cs new file mode 100644 index 0000000000..9a04851d8e --- /dev/null +++ b/Content.Server/Shuttles/Components/ThrusterComponent.cs @@ -0,0 +1,86 @@ +using System.Collections.Generic; +using Content.Server.Shuttles.EntitySystems; +using Content.Shared.Damage; +using Robust.Shared.Analyzers; +using Robust.Shared.GameObjects; +using Robust.Shared.Maths; +using Robust.Shared.Physics.Collision.Shapes; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; + +namespace Content.Server.Shuttles.Components +{ + [RegisterComponent] + [Friend(typeof(ThrusterSystem))] + public sealed class ThrusterComponent : Component + { + public override string Name => "Thruster"; + + /// + /// Whether the thruster has been force to be enabled / disable (e.g. VV, interaction, etc.) + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("enabled")] + public bool Enabled + { + get => _enabled; + set + { + if (_enabled == value) return; + _enabled = value; + + var system = EntitySystem.Get(); + + if (!_enabled) + { + system.DisableThruster(OwnerUid, this); + } + else if (system.CanEnable(OwnerUid, this)) + { + system.EnableThruster(OwnerUid, this); + } + } + } + + private bool _enabled = true; + + /// + /// This determines whether the thruster is actually enabled for the purposes of thrust + /// + public bool IsOn; + + [ViewVariables] + [DataField("impulse")] + public float Impulse = 5f; + + [ViewVariables] + [DataField("thrusterType")] + public ThrusterType Type = ThrusterType.Linear; + + [DataField("burnShape")] public List BurnPoly = new() + { + new Vector2(-0.4f, 0.5f), + new Vector2(-0.1f, 1.2f), + new Vector2(0.1f, 1.2f), + new Vector2(0.4f, 0.5f) + }; + + /// + /// How much damage is done per second to anything colliding with our thrust. + /// + [ViewVariables] [DataField("damage")] public DamageSpecifier? Damage = new(); + + // Used for burns + + public List Colliding = new(); + + public bool Firing = false; + } + + public enum ThrusterType + { + Linear, + // Angular meaning rotational. + Angular, + } +} diff --git a/Content.Server/Shuttles/DockingSystem.cs b/Content.Server/Shuttles/EntitySystems/DockingSystem.cs similarity index 97% rename from Content.Server/Shuttles/DockingSystem.cs rename to Content.Server/Shuttles/EntitySystems/DockingSystem.cs index 0e77d19890..8d2a1d4e63 100644 --- a/Content.Server/Shuttles/DockingSystem.cs +++ b/Content.Server/Shuttles/EntitySystems/DockingSystem.cs @@ -1,8 +1,7 @@ -using System; using Content.Server.Doors.Components; using Content.Server.Power.Components; +using Content.Server.Shuttles.Components; using Content.Shared.Doors; -using Content.Shared.Shuttles; using Content.Shared.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.IoC; @@ -13,25 +12,10 @@ using Robust.Shared.Maths; using Robust.Shared.Physics; using Robust.Shared.Physics.Collision.Shapes; using Robust.Shared.Physics.Dynamics; -using Robust.Shared.Physics.Dynamics.Joints; using Robust.Shared.Utility; -using Robust.Shared.ViewVariables; -namespace Content.Server.Shuttles +namespace Content.Server.Shuttles.EntitySystems { - [RegisterComponent] - public sealed class DockingComponent : SharedDockingComponent - { - [ViewVariables] - public DockingComponent? DockedWith; - - [ViewVariables] - public Joint? DockJoint; - - [ViewVariables] - public override bool Docked => DockedWith != null; - } - public sealed class DockingSystem : EntitySystem { [Dependency] private readonly IMapManager _mapManager = default!; diff --git a/Content.Server/Shuttles/ShuttleConsoleSystem.cs b/Content.Server/Shuttles/EntitySystems/ShuttleConsoleSystem.cs similarity index 97% rename from Content.Server/Shuttles/ShuttleConsoleSystem.cs rename to Content.Server/Shuttles/EntitySystems/ShuttleConsoleSystem.cs index cbcbe867ef..e028546819 100644 --- a/Content.Server/Shuttles/ShuttleConsoleSystem.cs +++ b/Content.Server/Shuttles/EntitySystems/ShuttleConsoleSystem.cs @@ -1,20 +1,19 @@ -using System.Linq; using Content.Server.Alert; using Content.Server.Power.Components; +using Content.Server.Shuttles.Components; using Content.Shared.ActionBlocker; using Content.Shared.Alert; using Content.Shared.Interaction; using Content.Shared.Popups; using Content.Shared.Shuttles; +using Content.Shared.Shuttles.Components; using Content.Shared.Tag; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; -using Robust.Shared.Log; -using Robust.Shared.Physics; using Robust.Shared.Utility; -namespace Content.Server.Shuttles +namespace Content.Server.Shuttles.EntitySystems { internal sealed class ShuttleConsoleSystem : SharedShuttleConsoleSystem { diff --git a/Content.Server/Shuttles/ShuttleSystem.cs b/Content.Server/Shuttles/EntitySystems/ShuttleSystem.cs similarity index 52% rename from Content.Server/Shuttles/ShuttleSystem.cs rename to Content.Server/Shuttles/EntitySystems/ShuttleSystem.cs index 45d3e1c4c9..e1a259fec9 100644 --- a/Content.Server/Shuttles/ShuttleSystem.cs +++ b/Content.Server/Shuttles/EntitySystems/ShuttleSystem.cs @@ -1,86 +1,54 @@ -using System; -using Content.Shared.Shuttles; +using System.Collections.Generic; +using Content.Server.Shuttles.Components; using JetBrains.Annotations; -using Robust.Server.Physics; -using Robust.Shared.Configuration; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; using Robust.Shared.Physics; -namespace Content.Server.Shuttles +namespace Content.Server.Shuttles.EntitySystems { [UsedImplicitly] internal sealed class ShuttleSystem : EntitySystem { - private const float TileMassMultiplier = 1f; + private const float TileMassMultiplier = 4f; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(HandleShuttleStartup); - SubscribeLocalEvent(HandleShuttleShutdown); + SubscribeLocalEvent(OnShuttleAdd); + SubscribeLocalEvent(OnShuttleStartup); + SubscribeLocalEvent(OnShuttleShutdown); - SubscribeLocalEvent(HandleGridInit); - SubscribeLocalEvent(HandleGridFixtureChange); + SubscribeLocalEvent(OnGridInit); + SubscribeLocalEvent(OnGridFixtureChange); } - private void HandleGridFixtureChange(GridFixtureChangeEvent args) + private void OnShuttleAdd(EntityUid uid, ShuttleComponent component, ComponentAdd args) + { + // Easier than doing it in the comp and they don't have constructors. + for (var i = 0; i < component.LinearThrusters.Length; i++) + { + component.LinearThrusters[i] = new List(); + } + } + + private void OnGridFixtureChange(GridFixtureChangeEvent args) { // Look this is jank but it's a placeholder until we design it. if (args.NewFixtures.Count == 0) return; - var body = args.NewFixtures[0].Body; - foreach (var fixture in args.NewFixtures) { fixture.Mass = fixture.Area * TileMassMultiplier; fixture.Restitution = 0.1f; } - - if (body.Owner.TryGetComponent(out ShuttleComponent? shuttleComponent)) - { - RecalculateSpeedMultiplier(shuttleComponent, body); - } - } - private void HandleGridInit(GridInitializeEvent ev) + private void OnGridInit(GridInitializeEvent ev) { EntityManager.GetEntity(ev.EntityUid).EnsureComponent(); } - /// - /// Cache the thrust available to this shuttle. - /// - private void RecalculateSpeedMultiplier(SharedShuttleComponent shuttle, PhysicsComponent physics) - { - // TODO: Need per direction speed (Never Eat Soggy Weetbix). - // TODO: This will need hella tweaking. - var thrusters = physics.FixtureCount; - - if (thrusters == 0) - { - shuttle.SpeedMultipler = 0f; - } - - const float ThrustPerThruster = 0.25f; - const float MinimumThrustRequired = 0.005f; - - // Just so someone can't slap a single thruster on a station and call it a day; need to hit a minimum amount. - var thrustRatio = Math.Max(0, thrusters * ThrustPerThruster / physics.Mass); - - if (thrustRatio < MinimumThrustRequired) - shuttle.SpeedMultipler = 0f; - - const float MaxThrust = 10f; - // This doesn't need to align with MinimumThrustRequired; if you set this higher it just means the first few additional - // thrusters won't do anything. - const float MinThrust = MinimumThrustRequired; - - shuttle.SpeedMultipler = MathF.Max(MinThrust, MathF.Min(MaxThrust, thrustRatio)); - } - - private void HandleShuttleStartup(EntityUid uid, ShuttleComponent component, ComponentStartup args) + private void OnShuttleStartup(EntityUid uid, ShuttleComponent component, ComponentStartup args) { if (!component.Owner.HasComponent()) { @@ -96,11 +64,6 @@ namespace Content.Server.Shuttles { Enable(physicsComponent); } - - if (component.Owner.TryGetComponent(out ShuttleComponent? shuttleComponent)) - { - RecalculateSpeedMultiplier(shuttleComponent, physicsComponent); - } } public void Toggle(ShuttleComponent component) @@ -136,7 +99,7 @@ namespace Content.Server.Shuttles component.FixedRotation = true; } - private void HandleShuttleShutdown(EntityUid uid, ShuttleComponent component, ComponentShutdown args) + private void OnShuttleShutdown(EntityUid uid, ShuttleComponent component, ComponentShutdown args) { if (!component.Owner.TryGetComponent(out PhysicsComponent? physicsComponent)) { diff --git a/Content.Server/Shuttles/EntitySystems/ThrusterSystem.cs b/Content.Server/Shuttles/EntitySystems/ThrusterSystem.cs new file mode 100644 index 0000000000..ea102f3cb2 --- /dev/null +++ b/Content.Server/Shuttles/EntitySystems/ThrusterSystem.cs @@ -0,0 +1,476 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using Content.Server.Atmos.Components; +using Content.Server.Atmos.EntitySystems; +using Content.Server.Audio; +using Content.Server.Power.Components; +using Content.Server.Shuttles.Components; +using Content.Shared.Damage; +using Content.Shared.Damage.Prototypes; +using Content.Shared.FixedPoint; +using Content.Shared.Interaction; +using Content.Shared.Maps; +using Content.Shared.Physics; +using Content.Shared.Shuttles.Components; +using Robust.Shared.GameObjects; +using Robust.Shared.Log; +using Robust.Shared.Map; +using Robust.Shared.Maths; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Collision.Shapes; +using Robust.Shared.Physics.Dynamics; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Server.Shuttles.EntitySystems +{ + public sealed class ThrusterSystem : EntitySystem + { + [Robust.Shared.IoC.Dependency] private readonly IMapManager _mapManager = default!; + [Robust.Shared.IoC.Dependency] private readonly AmbientSoundSystem _ambient = default!; + [Robust.Shared.IoC.Dependency] private readonly SharedBroadphaseSystem _broadphase = default!; + [Robust.Shared.IoC.Dependency] private readonly DamageableSystem _damageable = default!; + + // Essentially whenever thruster enables we update the shuttle's available impulses which are used for movement. + // This is done for each direction available. + + public const string BurnFixture = "thruster-burn"; + + private readonly HashSet _activeThrusters = new(); + + // Used for accumulating burn if someone touches a firing thruster. + + private float _accumulator; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnActivateThruster); + SubscribeLocalEvent(OnThrusterInit); + SubscribeLocalEvent(OnThrusterShutdown); + SubscribeLocalEvent(OnPowerChange); + SubscribeLocalEvent(OnAnchorChange); + SubscribeLocalEvent(OnRotate); + + SubscribeLocalEvent(OnStartCollide); + SubscribeLocalEvent(OnEndCollide); + + _mapManager.TileChanged += OnTileChange; + } + + public override void Shutdown() + { + base.Shutdown(); + _mapManager.TileChanged -= OnTileChange; + } + + private void OnTileChange(object? sender, TileChangedEventArgs e) + { + // If the old tile was space but the new one isn't then disable all adjacent thrusters + if (e.NewTile.IsSpace() || !e.OldTile.IsSpace()) return; + + var tilePos = e.NewTile.GridIndices; + + for (var x = -1; x <= 1; x++) + { + for (var y = -1; y <= 1; y++) + { + if (x != 0 && y != 0) continue; + + var checkPos = tilePos + new Vector2i(x, y); + + foreach (var ent in _mapManager.GetGrid(e.NewTile.GridIndex).GetAnchoredEntities(checkPos)) + { + if (!EntityManager.TryGetComponent(ent, out ThrusterComponent? thruster) || thruster.Type == ThrusterType.Angular) continue; + + // Work out if the thruster is facing this direction + var direction = EntityManager.GetComponent(ent).LocalRotation.ToWorldVec(); + + if (new Vector2i((int) direction.X, (int) direction.Y) != new Vector2i(x, y)) continue; + + DisableThruster(ent, thruster); + } + } + } + } + + private void OnActivateThruster(EntityUid uid, ThrusterComponent component, ActivateInWorldEvent args) + { + component.Enabled ^= true; + } + + /// + /// If the thruster rotates change the direction where the linear thrust is applied + /// + private void OnRotate(EntityUid uid, ThrusterComponent component, ref RotateEvent args) + { + // TODO: Disable visualizer for old direction + + if (!component.IsOn || + component.Type != ThrusterType.Linear || + !EntityManager.TryGetComponent(uid, out TransformComponent? xform) || + !_mapManager.TryGetGrid(xform.GridID, out var grid) || + !EntityManager.TryGetComponent(grid.GridEntityId, out ShuttleComponent? shuttleComponent)) return; + + var oldDirection = (int) args.OldRotation.GetCardinalDir() / 2; + var direction = (int) args.NewRotation.GetCardinalDir() / 2; + + shuttleComponent.LinearThrusterImpulse[oldDirection] -= component.Impulse; + DebugTools.Assert(shuttleComponent.LinearThrusters[oldDirection].Contains(component)); + shuttleComponent.LinearThrusters[oldDirection].Remove(component); + + shuttleComponent.LinearThrusterImpulse[direction] += component.Impulse; + DebugTools.Assert(!shuttleComponent.LinearThrusters[direction].Contains(component)); + shuttleComponent.LinearThrusters[direction].Add(component); + } + + private void OnAnchorChange(EntityUid uid, ThrusterComponent component, ref AnchorStateChangedEvent args) + { + if (args.Anchored && CanEnable(uid, component)) + { + EnableThruster(uid, component); + } + else + { + DisableThruster(uid, component); + } + } + + private void OnThrusterInit(EntityUid uid, ThrusterComponent component, ComponentInit args) + { + _ambient.SetAmbience(uid, false); + + if (!component.Enabled) + { + return; + } + + if (CanEnable(uid, component)) + { + EnableThruster(uid, component); + } + } + + private void OnThrusterShutdown(EntityUid uid, ThrusterComponent component, ComponentShutdown args) + { + DisableThruster(uid, component); + } + + private void OnPowerChange(EntityUid uid, ThrusterComponent component, PowerChangedEvent args) + { + if (args.Powered && CanEnable(uid, component)) + { + EnableThruster(uid, component); + } + else + { + DisableThruster(uid, component); + } + } + + /// + /// Tries to enable the thruster and turn it on. If it's already enabled it does nothing. + /// + public void EnableThruster(EntityUid uid, ThrusterComponent component, TransformComponent? xform = null) + { + if (component.IsOn || + !Resolve(uid, ref xform) || + !_mapManager.TryGetGrid(xform.GridID, out var grid)) return; + + component.IsOn = true; + + if (!EntityManager.TryGetComponent(grid.GridEntityId, out ShuttleComponent? shuttleComponent)) return; + + Logger.DebugS("thruster", $"Enabled thruster {uid}"); + + switch (component.Type) + { + case ThrusterType.Linear: + var direction = (int) xform.LocalRotation.GetCardinalDir() / 2; + + shuttleComponent.LinearThrusterImpulse[direction] += component.Impulse; + DebugTools.Assert(!shuttleComponent.LinearThrusters[direction].Contains(component)); + shuttleComponent.LinearThrusters[direction].Add(component); + + // Don't just add / remove the fixture whenever the thruster fires because perf + if (EntityManager.TryGetComponent(uid, out PhysicsComponent? physicsComponent) && + component.BurnPoly.Count > 0) + { + var shape = new PolygonShape(); + + shape.SetVertices(component.BurnPoly); + + var fixture = new Fixture(physicsComponent, shape) + { + ID = BurnFixture, + Hard = false, + CollisionLayer = (int) CollisionGroup.MobImpassable + }; + + _broadphase.CreateFixture(physicsComponent, fixture); + } + + break; + case ThrusterType.Angular: + shuttleComponent.AngularThrust += component.Impulse; + DebugTools.Assert(!shuttleComponent.AngularThrusters.Contains(component)); + shuttleComponent.AngularThrusters.Add(component); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + if (EntityManager.TryGetComponent(uid, out SharedAppearanceComponent? appearanceComponent)) + { + appearanceComponent.SetData(ThrusterVisualState.State, true); + } + + _ambient.SetAmbience(uid, true); + } + + /// + /// Tries to disable the thruster. + /// + /// + /// + /// + /// + public void DisableThruster(EntityUid uid, ThrusterComponent component, TransformComponent? xform = null) + { + if (!component.IsOn || + !Resolve(uid, ref xform) || + !_mapManager.TryGetGrid(xform.GridID, out var grid)) return; + + component.IsOn = false; + + if (!EntityManager.TryGetComponent(grid.GridEntityId, out ShuttleComponent? shuttleComponent)) return; + + Logger.DebugS("thruster", $"Disabled thruster {uid}"); + + switch (component.Type) + { + case ThrusterType.Linear: + var direction = ((int) xform.LocalRotation.GetCardinalDir() / 2); + + shuttleComponent.LinearThrusterImpulse[direction] -= component.Impulse; + DebugTools.Assert(shuttleComponent.LinearThrusters[direction].Contains(component)); + shuttleComponent.LinearThrusters[direction].Remove(component); + break; + case ThrusterType.Angular: + shuttleComponent.AngularThrust -= component.Impulse; + DebugTools.Assert(shuttleComponent.AngularThrusters.Contains(component)); + shuttleComponent.AngularThrusters.Remove(component); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + if (EntityManager.TryGetComponent(uid, out SharedAppearanceComponent? appearanceComponent)) + { + appearanceComponent.SetData(ThrusterVisualState.State, false); + } + + _ambient.SetAmbience(uid, false); + + if (EntityManager.TryGetComponent(uid, out PhysicsComponent? physicsComponent)) + { + _broadphase.DestroyFixture(physicsComponent, BurnFixture); + } + + _activeThrusters.Remove(component); + component.Colliding.Clear(); + } + + public bool CanEnable(EntityUid uid, ThrusterComponent component) + { + if (!component.Enabled) return false; + + var xform = EntityManager.GetComponent(uid); + + if (!xform.Anchored || + EntityManager.TryGetComponent(uid, out ApcPowerReceiverComponent? receiver) && !receiver.Powered) + { + return false; + } + + if (component.Type == ThrusterType.Angular) + return true; + + var (x, y) = xform.LocalPosition + xform.LocalRotation.Opposite().ToWorldVec(); + var tile = _mapManager.GetGrid(xform.GridID).GetTileRef(new Vector2i((int) Math.Floor(x), (int) Math.Floor(y))); + + return tile.Tile.IsSpace(); + } + + #region Burning + + public override void Update(float frameTime) + { + base.Update(frameTime); + + _accumulator += frameTime; + + if (_accumulator < 1) return; + + _accumulator -= 1; + + foreach (var comp in _activeThrusters.ToArray()) + { + if (!comp.Firing || comp.Damage == null || comp.Paused || comp.Deleted) continue; + + DebugTools.Assert(comp.Colliding.Count > 0); + + foreach (var uid in comp.Colliding.ToArray()) + { + _damageable.TryChangeDamage(uid, comp.Damage); + } + } + } + + private void OnStartCollide(EntityUid uid, ThrusterComponent component, StartCollideEvent args) + { + if (args.OurFixture.ID != BurnFixture) return; + + _activeThrusters.Add(component); + component.Colliding.Add(args.OtherFixture.Body.OwnerUid); + } + + private void OnEndCollide(EntityUid uid, ThrusterComponent component, EndCollideEvent args) + { + if (args.OurFixture.ID != BurnFixture) return; + + component.Colliding.Remove(args.OtherFixture.Body.OwnerUid); + + if (component.Colliding.Count == 0) + { + _activeThrusters.Remove(component); + } + } + + /// + /// Considers a thrust direction as being active. + /// + public void EnableThrustDirection(ShuttleComponent component, DirectionFlag direction) + { + if ((component.ThrustDirections & direction) != 0x0) return; + + component.ThrustDirections |= direction; + + if ((direction & (DirectionFlag.East | DirectionFlag.West)) != 0x0) + { + switch (component.Mode) + { + case ShuttleMode.Cruise: + foreach (var comp in component.AngularThrusters) + { + if (!EntityManager.TryGetComponent(comp.OwnerUid, out SharedAppearanceComponent? appearanceComponent)) + continue; + + comp.Firing = true; + appearanceComponent.SetData(ThrusterVisualState.Thrusting, true); + } + break; + case ShuttleMode.Docking: + var index = GetFlagIndex(direction); + + foreach (var comp in component.LinearThrusters[index]) + { + if (!EntityManager.TryGetComponent(comp.OwnerUid, out SharedAppearanceComponent? appearanceComponent)) + continue; + + comp.Firing = true; + appearanceComponent.SetData(ThrusterVisualState.Thrusting, true); + } + + break; + } + } + else + { + var index = GetFlagIndex(direction); + + foreach (var comp in component.LinearThrusters[index]) + { + if (!EntityManager.TryGetComponent(comp.OwnerUid, out SharedAppearanceComponent? appearanceComponent)) + continue; + + comp.Firing = true; + appearanceComponent.SetData(ThrusterVisualState.Thrusting, true); + } + } + } + + /// + /// Disables a thrust direction. + /// + public void DisableThrustDirection(ShuttleComponent component, DirectionFlag direction) + { + if ((component.ThrustDirections & direction) == 0x0) return; + + component.ThrustDirections &= ~direction; + + if ((direction & (DirectionFlag.East | DirectionFlag.West)) != 0x0) + { + switch (component.Mode) + { + case ShuttleMode.Cruise: + foreach (var comp in component.AngularThrusters) + { + if (!EntityManager.TryGetComponent(comp.OwnerUid, out SharedAppearanceComponent? appearanceComponent)) + continue; + + comp.Firing = false; + appearanceComponent.SetData(ThrusterVisualState.Thrusting, false); + } + break; + case ShuttleMode.Docking: + var index = GetFlagIndex(direction); + + foreach (var comp in component.LinearThrusters[index]) + { + if (!EntityManager.TryGetComponent(comp.OwnerUid, out SharedAppearanceComponent? appearanceComponent)) + continue; + + comp.Firing = false; + appearanceComponent.SetData(ThrusterVisualState.Thrusting, false); + } + + break; + } + } + else + { + var index = GetFlagIndex(direction); + + foreach (var comp in component.LinearThrusters[index]) + { + if (!EntityManager.TryGetComponent(comp.OwnerUid, out SharedAppearanceComponent? appearanceComponent)) + continue; + + comp.Firing = false; + appearanceComponent.SetData(ThrusterVisualState.Thrusting, false); + } + } + } + + public void DisableAllThrustDirections(ShuttleComponent component) + { + foreach (DirectionFlag dir in Enum.GetValues(typeof(DirectionFlag))) + { + DisableThrustDirection(component, dir); + } + + DebugTools.Assert(component.ThrustDirections == DirectionFlag.None); + } + + #endregion + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private int GetFlagIndex(DirectionFlag flag) + { + return (int) Math.Log2((int) flag); + } + } +} diff --git a/Content.Server/Shuttles/ShuttleComponent.cs b/Content.Server/Shuttles/ShuttleComponent.cs deleted file mode 100644 index 952b3bda19..0000000000 --- a/Content.Server/Shuttles/ShuttleComponent.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Content.Shared.Shuttles; -using Robust.Shared.GameObjects; - -namespace Content.Server.Shuttles -{ - [RegisterComponent] - public sealed class ShuttleComponent : SharedShuttleComponent {} -} diff --git a/Content.Shared/Shuttles/PilotComponent.cs b/Content.Shared/Shuttles/Components/PilotComponent.cs similarity index 97% rename from Content.Shared/Shuttles/PilotComponent.cs rename to Content.Shared/Shuttles/Components/PilotComponent.cs index 889a618140..3521685492 100644 --- a/Content.Shared/Shuttles/PilotComponent.cs +++ b/Content.Shared/Shuttles/Components/PilotComponent.cs @@ -7,7 +7,7 @@ using Robust.Shared.Players; using Robust.Shared.Serialization; using Robust.Shared.ViewVariables; -namespace Content.Shared.Shuttles +namespace Content.Shared.Shuttles.Components { /// /// Stores what shuttle this entity is currently piloting. diff --git a/Content.Shared/Shuttles/SharedDockingComponent.cs b/Content.Shared/Shuttles/Components/SharedDockingComponent.cs similarity index 87% rename from Content.Shared/Shuttles/SharedDockingComponent.cs rename to Content.Shared/Shuttles/Components/SharedDockingComponent.cs index 30baf5be43..de039ddb1b 100644 --- a/Content.Shared/Shuttles/SharedDockingComponent.cs +++ b/Content.Shared/Shuttles/Components/SharedDockingComponent.cs @@ -1,8 +1,7 @@ using Robust.Shared.GameObjects; -using Robust.Shared.GameStates; using Robust.Shared.ViewVariables; -namespace Content.Shared.Shuttles +namespace Content.Shared.Shuttles.Components { public abstract class SharedDockingComponent : Component { diff --git a/Content.Shared/Shuttles/SharedShuttleComponent.cs b/Content.Shared/Shuttles/Components/SharedShuttleComponent.cs similarity index 65% rename from Content.Shared/Shuttles/SharedShuttleComponent.cs rename to Content.Shared/Shuttles/Components/SharedShuttleComponent.cs index 3e3a7765b6..a527715ee5 100644 --- a/Content.Shared/Shuttles/SharedShuttleComponent.cs +++ b/Content.Shared/Shuttles/Components/SharedShuttleComponent.cs @@ -1,7 +1,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.ViewVariables; -namespace Content.Shared.Shuttles +namespace Content.Shared.Shuttles.Components { public abstract class SharedShuttleComponent : Component { @@ -10,12 +10,6 @@ namespace Content.Shared.Shuttles [ViewVariables] public virtual bool Enabled { get; set; } = true; - /// - /// How much our linear impulse is multiplied by. - /// - [ViewVariables(VVAccess.ReadWrite)] - public float SpeedMultipler { get; set; } = 200.0f; - [ViewVariables] public ShuttleMode Mode { get; set; } = ShuttleMode.Cruise; } diff --git a/Content.Shared/Shuttles/SharedShuttleConsoleComponent.cs b/Content.Shared/Shuttles/Components/SharedShuttleConsoleComponent.cs similarity index 87% rename from Content.Shared/Shuttles/SharedShuttleConsoleComponent.cs rename to Content.Shared/Shuttles/Components/SharedShuttleConsoleComponent.cs index 13c1c4a211..8a5e51e43e 100644 --- a/Content.Shared/Shuttles/SharedShuttleConsoleComponent.cs +++ b/Content.Shared/Shuttles/Components/SharedShuttleConsoleComponent.cs @@ -1,7 +1,7 @@ using Robust.Shared.GameObjects; using Robust.Shared.GameStates; -namespace Content.Shared.Shuttles +namespace Content.Shared.Shuttles.Components { /// /// Interact with to start piloting a shuttle. diff --git a/Content.Shared/Shuttles/Components/SharedThrusterComponent.cs b/Content.Shared/Shuttles/Components/SharedThrusterComponent.cs new file mode 100644 index 0000000000..7b258be986 --- /dev/null +++ b/Content.Shared/Shuttles/Components/SharedThrusterComponent.cs @@ -0,0 +1,12 @@ +using System; +using Robust.Shared.Serialization; + +namespace Content.Shared.Shuttles.Components +{ + [Serializable, NetSerializable] + public enum ThrusterVisualState : byte + { + State, + Thrusting, + } +} diff --git a/Content.Shared/Shuttles/SharedShuttleConsoleSystem.cs b/Content.Shared/Shuttles/SharedShuttleConsoleSystem.cs index 8e9070571c..f3bb313daa 100644 --- a/Content.Shared/Shuttles/SharedShuttleConsoleSystem.cs +++ b/Content.Shared/Shuttles/SharedShuttleConsoleSystem.cs @@ -1,4 +1,5 @@ using Content.Shared.Movement; +using Content.Shared.Shuttles.Components; using Robust.Shared.GameObjects; namespace Content.Shared.Shuttles diff --git a/Resources/Audio/Effects/shuttle_thruster.ogg b/Resources/Audio/Effects/shuttle_thruster.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1100a1e838bd3740e8b73b80ce4e49e381662a48 GIT binary patch literal 123868 zcmagG1zc3y8#cOzE)fwBlvEG~L8TcwMY=mBq`N^vMFrGBY3c5eMiAtvAl)G%prWLL zihxqywP*DF&+ohU_g&5~4tvkqtKN9t=Y7}Fc68JS1mMpPN&x@i_N-z!iWL>$>0|5c zi(Ep1KosuQZ}@|JXhvxxE&u&NS|ZmL{DaQH`zFp_PUp3K9NFER zZH;h`XIEtxyeJ@eQShP=JCC-zhqITDgRg^!9~ybwdHAcSt*NQ3WuPyuBd=$ms;Hr? zZ>^zi%&x4Z#I9$ksi2{3t?c3G?BT$!RSOBcD1i#-t|3bTZoA6X^Q;#x8764*(H}VjLN{ zu|7E%XD#t!cG6hgcNp^LTW9S&it3A8JqFQSWJgSi0bEJB%N)1p^pH2(XpY;A@a+z> zPd7(#h7SdANzM%l!EW}O8iFeY30e{>CHYv1Ri64`1xo(o!PVMh}y2nLE zgp~CSG!5a8zol`2!&HF(R6v+%>Mir;Fw^E+=C5yA?%cYB-mXW0A>^1@A>9R+gE zV3HTmd8be2eZb@qM%}I;0QSg|u#?B1M#tx?7F~6za!zk_DsOb}tL5vfrNVs$N&yiv z8j$0hR`maRT{TU1`2T;&Id$^_Ik=XuyqRBlb1Lg`zVhKC#jS8RfO{&Z$Jgm2tl}&D z%2x`$RQ!~B5;X>XXdL~!3COksASb}w>CM~&S3{3~%tyr7S9;1UdAk(N%I zz_zBtX^SOK=-{WA#B}b4CkFWE{Sk{&tBk>aFz;cDm^bOJPslCdr(gCN>jUJ-wf|Fm zK8|ykR#BIE?~Wny`)xpQ%8@9yU_0jZszO&MA6`+ z`0pD|l<`tr5Fg9i%Tw1c*vE&wRlFFKSbO|}Mv+PYN->`Zl;Zmhi&?%^n9Ht(4U=Z) z3KR9z(1m!7f}6^2|3IFE38y5tQ+;~T#ZW8$yK!GRhmNs~{O2|FjaiqL3%*7K`SpdQ z4Gj#91Kdqh{AZeOS-$q4p9-6wx^I2r_WvnZ|7s3^N)v_C$wb?G0>1T~PSg0a!O4y>X{C>{R!Z|I z{twM@iY-o!Esl;|ipKK9Bs<5Xl|9LG>#bUA`Tu?Wt2rt@obUxTN7;w-Kbq4az^n+h zsg_T36F*1k5xAg!$|wH20RVJ7pi;-#5nVn02|bYsJ$^$2>HoXNz`GN|nq$InVUqx0 z0^khX6S`X8l3*E9R(v`A-=)hvj(yVDCV|Uj-gvdu2ew4c>Wi4kZYy z({ZUES018sm^!XGl_WeMETU^**mvA;!oYBbLDR62OY^v<<_`nI>VS60SXUR$wO#<$j3Qr1%0Tl+Y@s(h_+gYpI6T8md%RaJTIXXI{6cjo-E)pp*#=Z|}9H`ZD%)cbSj8v4&BS}qvFdAM5#W|{BY zs&$uqR=L*;A29k8Gvvwq1U9SlI0dhDZJv|8B91L|OoJmWt4uE|U#s;v_o8A=LDw+M zGRa|H%+mCP$GjNUeCmE)*=h@KUpwqb;BA*DbL&NB%NbF4BeS-WGR&@fhkVF&rptRz zVqx1qznY5tRUDKJ6e1hPd*yOD&Jje4qW}rV5}iH`ZzsDSjovDIfq?)Chp(1eCv&2X znhQtbIByrb0amp;BY{@U37t5qN19uxqvo2MIH~7aQ#5Y-g}s15&6z)O)Xb%{YuxPK zF*_Q;r2_jwRr11mS_Xw zbmkrclgzM10j;?zx{FTVoxdyXOcy(RR1eZQu8&WtiSSX6ZpN#rRVKyj^=Bj?kGhFf zQ$;t%t7*Vdsj1c6(lc`tn9R^~6M>_GkBV1w|$6)Bo@L2j74OHZcxs#Q*o>)nSp?A+TX(n2@> z&fM08ziZOA66u_`CMh0vzWB!M9wu?r7CtIo?;dPn?)Ic8*#+K6)4SWS_{P^wWP9AK z0_j5?dI;aRCtF6)>O>L(xkz${9K?hmYAYYDH>m1N5~f1No5PF+ zbaphS3mM_Q6w=wjwPp0BR^Vl_8GMQ-S+t+2yu=t4i_Mxq`C0K8rh5k1zm_r38j2ii;m5RBMNH4JHP;w5w!dt$sE z><&(;)Q1YLU8fOpBhl{ANSx5 z_-7Zqfmvck-ZFf#{{trf`$Yc#F^N)$vyK@-Z{5XsiVTm+FVW)uv~&9d(o^w&{s*)F z55522KAF2#LXrFL8<2ZOK?;78o-$GqN1vqRL*__B4T0W^R5)T1mZ;n4<$@@7jF>a>D51&oSRXC~V0(+4lE36+!x_T{t8C^JO zc9$QjoErSo_MXUXJ@}Q**R~Y`1*3XUKN;;RpaPk>!lAqJqZ=k|?=`^nhZbVe_O8gJ z86|k<;RPZuKlZ+zR8aSP=5XF@;| z)lKy<+JuVsc-i$lTM1xdVbe_-Np=5z{awms!46`}xBl!=>_i;VohZ5okvETf1bsN7 z-TV)^gmNJ@E@X}bfE9rFBkZS7r(v+vaYrA}JUkXpn{Yf4iZ1}~K;%&n$w?d?9eov> z|6+lVQ^`K6;N?dmF5GS8jf@N*su1Bm<3nmW27IWEgw#kkV&DCnR9NK1BrsA^5|X0g z5@M1VVR0!5SqWK;s5C}GLPAPHT3TL4R#I9*LQ+mj5+f-gDIp;)AucX1CN3r+j=@Mv zNlS=Hh{?*jS#4bZCoY8L0bO4+p^ZZ%Ddr}5qh}nev_$M_f;XlIzmq}9nvV7YQ&woZ z(1z5|CY25y=;E9Y3f=qkX~V7PQbDgwYbpQJiwo+!a+>9pSp(T^1VxR_-9JBgfp(LF zh{h$FvMG110?07IsV4IgJXL*R>`!x7aECZQ5x-N@9^FWjZ5se&9vwtbJF>PkdyMVYk5|1%9~=ca zAoAqw5imz->3(tq-Ai%0A&*||ZrG);^XX!HCai9iZ-7+{(v12_r~gbzG1~G)-8>;O zIW27viH#~&xtLp0Xb1m~gGc|{X@B&JDe4A~l(=YwaUBk?hgKjTn zMSO(&H%bbkTlUkIB}6o?gc*ECQ)o-pU2QF!ObYTnZtj;z!V2XL_T}`UMR85&E7eXo z+=(A3;6el*cx}Bohz+S%=N2;6Vi?ghznFHGf7WpDmodJt?9@QaHgA7Nl9XkA<8m^QtrsA z3uid#$P zhqB&nUN72WikHT1=VbsAXhFC6kLlUPmu$TW?$a0xW&w0lNd8&XufbFwo3B|L-+lM> znQJW0Bw&Z6p!jJbtEIid2091;>lsvJ==mmJ)>Y24qeaa#$3)I?e~+RePgXK5$h5qA z;Vl7ZM@Bp-6^lsUAFX~s4ZenhjtibD)SfOJB0ew#Qn~OVxX0WswccxU?? z;SLO-9og9`3|-s$oe+{NDDQ;eG8=feKmsJfBt-If+}ACyHvH73R-ck^YL%;go0v{z zNlBwrj9=XpsVa*=%1Z5plUbv(K#mN2Wu*i`yW)#QC(}%XR>Z4+WDfHbKjwH{Af3Jc zBAS0ZJZymgF<#gq=93>dlVV2xF#d$ATjPb6hUXJwOlpuQD95d$O*NszT@%3 zDTV|4HJJ=#VPMNiD!rHfO-4fxJ|bphBo^D?B+MGc?l|g zQm{QARl=IUNjQVIB%!P{Q|@Nj$)B0l;b@`J%Sby3=G>Np&StL|p&vb*?b?2^lR1<% zBT+A9b#ZTQ!<&;MaT>_LUI!PMp@ynU6Apd-yaNCqc=uT!71=7|W_SPI_^#ukiI#{u zwatCDkvGHbPuBU$Nz41VMo?BO`_Nzl`Bo2oL_?*Yac%+vPC8(E~X$CDd0tUUk1&Q?0=G#Ve|sF8GN&m}}mT&`LP+V@;HQs6*)O&b}fVu;&7=x6Dc0 zFUy-w-ptA#FuT6n7b(D@qo^qxc~`{fWT~-!O@bpz3e3IUk1#VJT5C~!C1fIt^ADGK zz%|Gy9Ns3cwNw*nJ;&X5?zC)Xizm&a#X&n;i^I=(yn3412@87g(1zXeJP3(+gT<%|-zFwXi}iQefb zVEqLrK1frtMzZxk?_|a21cFSXChZchdg%<7iW>4i*-hsvqZ&UnVVgXRkaHebT%LL5 z?-WmfYYx}VLJXRWC(ua!{+5VHm(DY@_YCK>9@MT_V)=vs`5^PnNfpV!li3!A!7thd z%uXo*8FIK;T{KtLTDbjBO?`d48E24*(734-4WFN-3(9LH$=)E_iUE6+FL$S_kL=nl zl#gg_kB5F_X=DM2!NJBsQ?-M0aELADfDVolbm%JX72na@Zr(bnt!$o9RX-(u?d537 ze1n@}#H^7TEeKbI-EK2;LLCe_3A}h;>$hHO>H2kxl_aYk z-6c=lDDqR8nmv|^cgI+$^U&6aRzbXi0#N{Lz@&qI=&(Cl2VGcDtY>)a^fAZcA}2?5 zV)@hBs0Z>rZJ{T?ArDl1b%ufc7DYrb6Aw{{PCr?9Xz3)TffH;kN0NJ1QzgY*C3x(Dpa>RDfL-2_GR(J7GfXV} zM$xzY#DMHh@g=>k{*99`Ip^F7Tc_i8sr>)XEk+MRRz!4v2yH7s!8a_*Uj! z7UAAZHw<}0#B95SHCa2$HUHjfXCnG%L>PGz&azUcAUa$rB71Yyv044k-V%b6&0>`` zw1dou(Gkg)rE19KqYU9TfB;+?9wPLJ$HdLGv03u-a9BQITG( zvf+|!ujL^+{ZZXkE<*lm@Y!FD#S>~X^o6uH z!B;9qwu^ku%&_mEWRKi2H#nvvmkUjP_#+$)5&6&(p|&JtJ=QM2MmRQx=DZ`%EIx@5d1T0_MsN?4w$P9 zkG>UYFeFy5|0u{DdF$kmUXqtDIBr5 zr&V_&(4x?FI%>x_+h}=cqi){jy7s-J2jt+e6pocGnCe3d+nZUqEyx0qfNPcjupMzw zc!oMN+i%A6sa$+|@#cm8iu;!1YE|T3VMjoF>A`O+pOQ8Ih^w3KF?i`?X9izW0O(>f zJn!IN9CE6>BFMAcCXd>gF6Qdye5T9<9~4j6-*!LYhZb2gPrToW^aGLe4B+e9%ZJ{q z1BPE%`!Fy0u|)1|JzfnDzTSuz8r=^~lfZ z{QbeeIhW+eVYB1DhanEP#Qcf$JTFp!xfr-CaZ(!IvnhXJHh2#r<48eA`yqXKQ{e|Q z!zQyM`tjI%l0v+44qT6g_1_kOEZ7V?h%)H(m(@eSL*U9Y0>s^1pakOW+4TkdyV}{W z*v2$_em>G;d#y@QJ@ozP_4ilJ2yr5=)r6=O4i6%z13>{V0qD-IzFL+Tqi&qhc|@?Z z!~Yw_PcQ9V9__Oq*G>6RIGEIgz@!V6OL1d9*TjXEpUH5x! zctAqz&cPMqv|)NtJU+ty3wgKqaAsD_09Tf@xm~z>DXFEc^HNQ7kOJq-+v6!g zt0o2q3M!+#pdChe*e*O2{f5J3aD_@R^k6to(#ES~x%C9mT2b`nf_q`f#Wk_MJ{O2x zq^V!MzV%K169up$haFcj72IEIN8luk*S@(vCx8a;%N^Y}Uvk47e&vD6buB z3Z;FSa7t^&@zE8f8s6wuoZBs?y3w+(DSaPrI>^DhasVtQd%KISC+V+D-WQxpQ4(By zO)}>sKq*mUd@Yaq$M+L{W*%5-aM-;casCyJo+XUdV0gHWkst&bJis2?{-ULu^~VZb~r6TlzhK?Yw4fDjLa5XASM4=YxakQ9SI z;$k8gDKQN0qlBO&Bo-vZMTNyg1R%qJf!9SvCB%g=;=+;`DPb{D2@FPDMqFG1(iGwt zaUpSGaUuBiEVwd*=P@u^$NTA}-~7iBr}Z$d#1`FG5+~E?b$6Wq=_fb3(5fx9lt!n= zOM*Z+;>#lfTri@-dcApFeNBiHAB@0oLaH4VxhpwgE*QM9R~VffkQgPBjf%|w?2>&$ zXH1VM{3$aTm~%Ra5M3mH>3VOwVzBq)||sXLcHb z7-uNtLkOTyMGOd()0+<;zz!o9pK;hue^+n_tS7AJGm||{#o(Wn``uw1Gm*0erOgz| zOem|eMN{XbqfYqk&}W3;feh%V)&gH`vMzDlqCGe1pDzE%s5ek;|JI9D{RhYMlg<($ zy=m=8eT1H>{(nySrxGFHtf}L3E#Lgd`_ro0c*)L;JUNZB)}rCgdn=QSl7UQ<@jsLQUkuRRP@!KbFVJ)tlr(cFhIqKSmW*Pd`$=e zwwQw8AYn5Un1W0GKJeu^Lx+Z1&q2O6PM@f6rZz3{_lGafRJr`en>J1F3THu#1%n(? z@KYFcY-cGL6wA!WleoY|ubr?*!+elPHsg{b>H2cLV{jf)k{kkviY$zY*RzXY>UI zR#03Rz+-Cw;_B<&PN4IjR2OBRiB3GO`#Hd+yrF6Dygfw+A+8~o6`=!U&9eWXBNDKG z3`AmLO9Zr6oZWl-oqXdqqQgnUsmVW{Y^Y6Zh0PEa0TLcZy=RSG!(af2%+LgM?41H7 zgR=@rOeM9m^7;kZr97fSX#oK=E8#BZ%_?X?){}$ZO~D4SYjawEO~oh*unK|5K)d*o zHTqA5Z3%o13=<9>2W4_CPuQ=$Ol){{5y&9Dsjx;hufOs@dPC?H2zR^!K*##g*sba5 zSu-EY$B*?YZ~TnH*+Nv2oy7*_8C`78MsB=|Z0fOMlYWd9hDlu8s92 zgg(qmrz8z|UsUM&g{J+ocK``F&Y4oDKvr*WyBHA{gw}&7Dw`bqe0L+rzisRv4m4vRyWTxm$+00RA;-Zu$f+@ z*8usIn<530BTtJd@rsT!N=>1Yf7nL^ngr5es?p^y4D-m)^eRwf1bg9NU~?y=kCjA zM;s0}FNL`ZH&O(!{RW_b5Lh(9G|N&|n^+0az`4+xnzqK#&P}>0Mh4fAPy=0g2fU~> zN%6k)pLduPy8MG`C>%N#sI+3R6swILyH|+3!&3y$)QKU^MwdaSHCjCEb27=Z+ zA^yF?HsjkLTT&XY=R3TN4wG|ud0&KBeXGyV`YtL9hhfR4);x+K7QsQ^6{x3Fp!xIk z(Uy@G0h#V^rW6U^CkyKJLJCV%uO66*;W@@oR_T9*Dp5j!SvdHu-RjyB$2_oc8l8l)UQUH zHoqK^3$llB`KmF@-m_y6DdBzh)gf-1qF~pjv<(!QWj#@G;Kjwf<}KQb!{q)MiJ%mpI28 ze$$s9E~r?Qzw)GobZ2LQKnJkGaY9|Ao085%bS?1^$zyb&L8R@In#AVdYk9<_lOg7v zQ+stDeV%7}>*Y%ct)QT2Edj)kOd@_2@f|SN;$;lLlztJmv?#n*ndCV7T#}Gi%2UU| z?WN*yF`5+-62OX|9XqtHm45&#BuM87!Q&p^M~;ndQ&;soG<84otJCKPM?F0l>u6vo zItkzo1wldSsnUKH4l@y*T>Pjg$fzA41vn$Sb|HIkNPaNxTxWWxd$MU za{5o`|5^-0X7pMT?@E4d&n??8!Q?+T6Kj7L?4Cc6BBV>-=}ZpVc@T0$>Qblw66`bU zefv^MRh=qSa-P7ensYM(ifs-r+DADj=Ol^qm=;JXnZgF=8-((AMo!%MgWai*w5`9Y zK+-dise}zJpz=kvCin2mZ27#F57^S^@ygK9{?3#g;iJ1kh{JB`tOgc4jpo_-L0cptxO;JmWRNV`W-3WtXr``%0@((bD^sWr4crL1ZIAb>h$pxJ zA`4vNlG?%oWO=_~<8^tR7piFLU+T}=Sr3xp<22(jZp6>X75s5FL8^}KazHWu} z33gh(IDWr-btADS+VNY`K}YqME3O6_WjTa0h+&yx9_jRt2$1G~=!(lAA%36@6?w$! z;wOPY1uiX-{;FgO8LO7@)-SJa{-DcO;j#yZ5I|$Mr66M*D2uQfP>WCqf)ke$20R(> z0!N%W4M>BiX6?xI;y3jp2@XwuXOfy^=zzJ)P(smnTC4*5Cuex8-alFTtxdxKgT9Nh zuTN^M1boh;=RX@zS;=?*N&IsWw8PO-y-1RBa{{aB{Rj^`>g!fJg^0h}*xZ=NLD7Q9 ziYt|al>vg2urs^A~dYwbALPyP#b1-=G>4nH=BQMZb$bn)6( zOT!H&Lg&p5t*2N%&aHttXs@wFQf2@1E2IbmlXH?1P_Z6X(REGtaylEd=6Amot+q?u z@5ve5Y17vaz;ky~%*R4zpM_5%5e-ZjAo3PU0CtbYn;ANK>i)?7cIupW&3A>%(~md$ zS7zI0$;a?EbP~ZUubl8;69;V}%yH$WoseXjY?FvhDtQv^u?AbbhHYKEu8i{zZW~{l86Rh0AaYILu6j+%g=-99Rpk!ozr}yQ+4L|I#i}ohzQ3#Q@w5F+LvVsbMmW-aRgw`p@QR^tI3kdBPL(z_SC8b0C8M(uw|jr7S8Uh7p&Pl9Z8<#0W~lk_T}qK@kxNAxSYQSj+$` z8)RjqC1e$4Wo6`)WTa&!B`~t`in5CG3i9x}w6wI0q@;|b3>=l#9w4aN8(qi6AM*e) z%)bc$gJiACz5a@fy3jI(76TS^>FMXMPLIAtNk@1QSV2_Diix_rmh~^}B_qXI<+C4Fy<0+%P8&>8l85QB?fwVS|7(64( z{@1oHLx8V4r1OPo9VvSt22w3Ks1C#Z)NDHq->G*7`ef$VXBL@Md-=&eXR{?UmJE3a zK$bY%L!^ZCD=Xdo!38()#bLX*# zj^CE^T^SnupyN<5E*GoBa?O#@bsE7 z$xrSgqHx5VBr{iq%*M55apdEZ0C2+dD!`^i+D%=Bx+o}#%Mjha@=0oJ@B5b%C*qPN z#4C9mS@87;NV>CawsJ^k8z$^w(jBG`B2d6J!eucacX;5OsA;0WEU$#z$+sOTrmIF; z^b=j7czd*tgp`mahaBKeD-t?+g@BHytx5bZq>{~Cx;lHv(athunQ>kkH#PnyyWxJ$ z#v%09`T?YmVQN(rM2fIv-S>6UD-pr=JUn9)9_iOu;Kq5eX!pX`XWSS{R(#w$Ce1?9y}R0dWz4BB*(^n_dkXY89$?NIt4Z2?n3 z3yA$gQr?kXphKM+_L_29{6}Y{exIU6MvPu&7%ThNX3mE_thQHiNeDSjvC5TM%4sulJoH=&?sSUZ+<5{N>J2KpI1`OpIRkuR^0jaiu)H(~W z(F4HRBhsYTaNo%yT|?b$YE&}%8P!pXqfh+RE&E5_6XLA&jFdeTx>SL+EKQz$Dr9LU7aPMU}L`^$f|8x|0aI{=40mEPpC26G_Y?*c#&T zP*UKvCeL2>i6y-?FNvkkekLKzg=*97pVCXDS#V7PhTdPQZpF1g!l;XoBzX)TFAQXD z-$CEJu*ms1ubywFmv3bD^zU!NG%mxaxkqpzvk{Upq8_TFR|>SWFvbpK06OnP6*pbZ z8{Ah99C*aLoq5I}JkRTdM2ZXXk-1XX)4&1*9Qio!kI#wyY$O87*)-_P=S(6PANiIG zK?mv+1wMu~rK;cAz8Xx{TW;WZ73v*C8z4&sfgJ63Tz9gkfY&F1Y5Bo7OB}_zCdU)4 zA{4{ouHUf;I<^LW+@N=$DIH&&!bfz26yZVectfC-6fw=^mg@rDR%W_#SWgT!u6RF zVixb%d>k$el7Ksj0<+WY^nJWJCk)Rv-A?e-aOjS@xqGJLk@l@h#_fE3NskN(P4wE~ zzeOW3i3_WN9kcY?oE>YIrR(Q00m5{jNqLn_5PsMs51i>H9*AhlHpo0x2 zV>jZQSkwLc-vsN2-~SLBcJ5r`_o?)r>UyPr?m?W72&ld8j~215ddP@!e#DWffvl*= zGuk0^t8+zGcPex{z9)q=q{aCSO!&5k4RAguWOiJ_JGZLf`j`H)us$#7HWJi60ALO# z8P`oKd8nm#TNShQ?`CiBG1xa6$NDebIkt5?P$+@=+HxiI=txmuoGDTGY;IQa2WX+7 z!XE)PwE)ybu*e5ryJ*?EYxkM8aO!8Ql75-inVyid%q%h2o?PW4a9p+rNHv*O3g5da z>C!)FUXBQ46ak>|WP1ILYk9R_n$vxLd1u)nsZ3Sj$5+HO69Xu<6o-OYREY64b6D6o z3~8JddI%G_aOB^$POYvzbon9f)9IFi{Ykg~BX25nOVY$GiK_d9Y`67UQbJt5X^8Ln zPyYxc--O#A6nOd?L~b7I+O1h9GBf_A+r^vC{Nv!f!-gh}vB2RTfvUZFU)ereImCjc zumS`#yw@VumVFhLY)N}UHs&-lsG?XS4J=xq*T-rL=Xuu_On({pO*BiaevO^5+E@2* zGV4IJdPyY3>oWv??-894_xih|Z8L`fIN;(c&rumMK9FEcV$y^-RXeH#4xaJhtq6 zf;PGs?uogMN<9fRXGJy&`;@V>aPNh!G zB8!it&~jk?3>A2Ns|F*hW)L*=bmHJWGcISoti%lAF-&EdB^t8 zX(a~a8NVGV-*2|CNo40jxeGm>d1<2qC|o3zOoMM z^RiE`Y={|wWD>4~=K^nU%X%CZ=AD=3R(FWWVMR%_n-ufn=p5rv%kE_?WbBr7{E5yr z7cl1%oDdP#dwR<|Go9`!39eGAkqI&^`hSWRB8kA)rvO~LmN>;Lc_EXfuAzt5*dALq zc;53^_H)V7^X6Rdu_D(oG(4Gocm>O@~T3Wb7otTSP)wn-qg)11QXmDkBPhXOO=Cosa?xk~!7U*(+U&UW` z_fzf7Ztz8)bpG6sH(-G09S8XowpuQ1)#KP56wG|vJfj6R6D1Oq-@C^pj!R!pU1h4j zpMQm!PC;$|Lgh?i8LUf%3W|+`I(DFgOfg)-;``6FT>qW{v#Z zcuWG3L#o0|>b->#zXI=3`KHzjy)~2rwo-J5_;gau0 z$^aRNCFqEsdT?&z4T|m&UFKQ0WB*tUJ-2t`_g<&DZ%(ZhGdA9qsTQ4}9D5GTl|W?= ze!S;@2aA}f(8G38N;v`WbGobG>3inJqd!kRqTM?*W=^|3C^Yi$=OH%Tn>*x8O4u%G zyX%QN?aR}raOrI<78F_sA`*iuRgs|po?^hJDZR z|JpKMdFy!*S3nhg8)pt+MXW_KVl7k=Ycao>8FLI-hl(O|e^H^3(`xi_$>%EzU9M4v zQcm&**NZ+Pod~ol9-$~27R&Xr{J{m;G(E6q00k;NaxAn4xsS!I{QceYfsV_Kdm8h4$CXBsj5UHKhrkwXV)e{`hZEVgnPP z30v`Ua<$uJypxfXd{*N9K->%Wyw2G^C0mAVl_lT1;tkXYzf0}NaNT;x4xt(T6i_gl z5doR3@rnK&$Lf^^jkVZ^3M=HFc0+?o@~Lf4R()v()epxR&LU&iiepw-^&e8kO@B|t zK-&pc3Nii^jom|SpX>1rF4b~ah&suCi;kX-U;6&SDMeY4g@hyF$gD4zUJRc#hqcim ze{0Y8pMuEbi37WbYI|?9FtMz0I#xmA74PkAvKi7EI~D~<$E_37Pi4U|V=rLjs_}Y` zR64@~f&4RIIABMkO!5_bKKI;@(%r%-?Y*m6<_rwS=iZs8&XUEYtB- zSb~Gp9{(xCkaPq#_g~O1Pt3Y79M$+lHv4jVsYisJWqP9hOm=aA#)~gjs`4m=bHr{V z#o)NANL=w5=qRv6Me0x0Rb)LXS?o@&4LZy6@*v*qPAGpDt#Dpt0X=Ck9N5p&{X1s=LgWmX2-hqDiDc({Yo@~E4cKQx^edG_YVe{73E@|?vqetwj8+ge!0jyZ7kA`O!xw> z*cIVt)(?(qfFqD4NGY=GwKpHkIK8EzEUe2_SW(${$%IELPt`x?Dht=p+K7qgDM*$f z8#P1)s{;*J5hcyutIQfkGWq$D7abOsRj5vj6w|MaOVkn#s|L3damr7H^K&{|Y^yDh z|EX>8K-dL5&p-_Sm2&GMQGtYkvb?;cw4{`@tTaYiQXaAg$SDgMj2yfsDWwR{P6&yL zio*H^5sa{?xCll9{wF4O0fUjmz`6%Mgp3dsL!^khiN@YyNAxfK5e*`TJU~ankxQ*( zUyB)p43>c_>1_#6lKecwUuMVA;Yi193<}>?PE-bK^LaI}akE zT2!JUS=1f!-=s?Fe&kP1iuWvYXbW9=QSDiHi#yd}spg@OM~baB3b6&S089Z!0#0Ek z@nH+hl9$6``wd;!)IhCyl;t_eGf#b~^(dH3*w+4OJ9^ht`plP;r(Ohh5Gu;l1p3$#QI-b&Ayj_7HJm+IIr?qPj|?_~;}7h5_NSV;EDjJN&rttC?4 z$t0Y?hfF&x%K7*34UB!-CqSgn`qTK;ZdT=Q8oy2Y3u@nbyT)v`efv26n$v3Icz~5) zI2k^D&WeGtDEHsAV-$?&`GL*a1!_sjM5($-4MTK@vMM{VvW|re%a?cJ&+U}_VdbJT z)U_$TSnHjC>uzDFwgXjVJ;LS9u>@(u*1L|mbZ^Z?YV#C&FckvXmt*gaRJ4h^)DwYr z#BQE9rF(`ixQ7{uKsDT1BX=r}SI(r4j^o!KCHMP!s1!zoe9!8#k6UY6Zt1jpVeuSS zYXcqB`|w%g3daY#@aT>VkTU`uDrbO>qOnN1c=?4UuJST-vwtLZXClu}YA~N7Gkdl) z4rbQ9^KY83;b0wd*5n!9MI*639QXwoe5>K5!T`VQz=5t@uP*U4yjZ|U=Ccb`BR`-#GuT=Y$C<_-W%OGcl|3Twa+X+%cmSU z?)VR-BrX1k6t>D#X>qEp^iK&TM3dLrL1bHmZ*}>qmy2KO&mxcc*dS}~n!Ahd3CEN~ z+pMJ?SMi;P!6;m8Y$IZ`ks#!6VJe#lxcK{+9p34}IWKlqm3j)BK%?Pn!sJh9;qD}B1Y>u`!)&-3;F zR#ncxc1>=WO$H5#)onhLXZUDs15yrfvij0scyTn>!2MI|c6t(pp`>8eL*Ld+o_hVU z#ZvFJgS6{l4hC9-DO9*)T}a_j7!E$aZ-Mwj$!u#PfF;bW>Jzvz}YE+MuSSBXFhf~HA8 zKgKZ3v-*+oOm;T0;UkeHv*X^LPBTtwY?d@-@R&d_oba|3wt0P}UItee3X`vFFfbzq z&Fi)gl44aSb;LxJNi!JyqbV&VwEB(3Ip>OCg=U2V& zx0X^);VoTJ`~D!7r&m`k;FH;(+8q^YLzw;cXh$4^BrcP=uSp29`QzK&ruWMXyz`Xm zlv6zo1X>DgHg4DeMu3#zum(SU>91XhuL{H^7T*b+0FS?>n0CdAp7SGBzoMb^R^roF zgO>)MBV3PV9tBp=vS_6s`N5`0BRQX zwZsNgXk2&U^sxHEU22i(C_IK@gbjyb@mz0Kg}Xm%@cgc%_ZqBH!7=K1`EYCdBg9l7C=POg9$Gm+jHrj^R!3^pVlM@s z7I#pKvbyKJew!x;Y7N}$L7DG7u*m%j0!|MO;s09!GXDf%@M+m2@tTbQk%lU}GoBw4 zXr^-JhvRi_L~oKHjj+|2sPVOSHQZrhWXoXL!OsE`peNgw#Ov_+YPo-+u9!S6(Sjf6 zth4L+02_auY<%HJ7n0S51*f=#0c2w#h=lC_UB!ki#)OshakI~J%{rPpuOe<=9`735 zWzjbyMo;4^N6xPS+}Ri;lHa?wQWH%CLlhg==vUXB`%+2v9#$IU$WVWdDN_=<|LwyE z!TfdU*8#wa=^&yC?j027(Z9kBorj7i=$JTL-NW#~<&>iLh{2Pe=#As`@2u|-QS|#f z$jOCi16JsGrtVK2s@;ql;&=jlMelgl>%Jc1zodb)LY~3bV%Nf* z0-?4d#ee|(BtHT^{~Q)0a`-isdhc{;y;hj{12TzOe6c~76e~=ZYgfo4re4{vKadrjMk~GV#^gvPe2hiUQcQdkm%& zPP$0n$}*Tq~!IIg5QK>VSkPxON@?b*$$^fY`car zRg&CHvvf4kjG?`y*Q>gO_%#k14GuDwh0Mz0Kp;{|4bxH(uuH9+kF~ONut~SoHvjqL zQImwqId&xyT1l3Mv^5q)ZL!vbJQh2Ot%z73kifm`=o1CQ>&0{rA6Xt)NRYMqn?-P% zL*5tG>#1ud>_uO%vYOqX;Iw z4jFGmU6-Vu!}6j_NPPoB;2=rCGo;|+1ervu(U*SSW%}IlXR5{zsm>HtIxtI&{li8{ zPK%thtWqZ%_ir*qYCl86S-GgdF);inB$?d(DdU6z6Hl`5`OPJ?^N^Gt&1Yi|S*ETp zDSPDVxYWR4D0Lt_8oCMh4Ji|bdLD5Wo^7tHVZZz4g=J!1MV`z4{>X8lx;^=_;RUzh z>o7x<72;CYF;S3tnXQ z56J50iSU2Bgy9nt5yyxMiDNE`OJPJM#Dp=zlJJ7KBxD!Fq-0Yah5me14rt25a_9B0fm8G z2Qj#@IiQWK<}9s|i<#;4^H)^&`6!aoK!TQX-HX9%+f;UF(_Dq~7nBC9F%h=hXHu%Wqdl>ciS>XoO z7XaCSV^_*UWw*KG^qe6Ap~?cVo4z zP~miw4%!Y-4>zt`_KwyaRw0!8A^lZ`!#Lt93Qee}^iyB~7r^HjXyBd2y!-|OLQa+F z?R&RGH5||&gO43(T_*xA8S5A#o7BH=r{kl+xlypt9XcML_i;$7<~Kbfrvv8wT;n zn=3h`Nv17L^1;W;mPVif*B9o&_2h0hbfYIW1esmP}z3;i=ii{kN0-sNYCu zXlTXZVQCblsvITi>jeN=qR-%YlO~XBp1cHb$5%teXBy>Obrbm}4iE46ue66TlGm+U z&cBwky&4FXGvI3h)0+V^=yn~L@NI4n0QU`69K~eS;wH~1Cw$Fzs*BIBarM=GISH_X z;5`kjHvqCS@}EW;Z0UVm=%rtEz1j`9j9z+ zeRd}&=20I+az4>((P+ZE?q5;I5g+$}z!X#!px7Ld!}6NWLuIXWkPIdS3y@<}FH7Z_ z>9F$>7HbNRTX!vf<|a%_R&lJO&mDg8F^1*?5NL^l4}n4xK%w}bh~YCHGj+3ACz-(GQ|TwJ(v*tmIWlZvsIuNK$SFGFy;x+?f=lJSv=^b_kOB= z`?!z+ZFlz|rP;8J)19e50vH3DQk)X9zj#Apv9F@3-F;ZPhgN!_O*C4sLEDF7l7Y2 zc57a7DA~TWjmV{P*q8H3Y)N<5h>sMi7!*C%;(+ZII#S5|8z|XObh5-I9yIkp_-@p1 zu1AIk_T_c!UG_*MGDgz0&~vu$&fOP()0Lwttzw zMXfHf`N^DLHL_M>WFB9pn%E2@3%<|}&NW(!&HziG*|4y}g1pBxRL!rDF2qx`=<}Uo zi~r&`3)>$g`1U5QmN|D$8uT{%fmn-b!@CB@&2yiD030a0Hr49s=79Xi1z~C%ebp&j zPYmOAnF&en>%I>p;<4cD6-Y%<4~j~WNg%M2rzD|lkyoZ4qx<(HR}EZ-HQDdpO-y$9 zN^ZY-16wTV(E8C;bg44}e-@P8j1Opo0m{bpI}nuq+;gK|k93GLr$IZdzu^P1nei{B zP0+QFdLu;d^MNEdo~gj??n8H1(HMBs60bS)8w}tgp^3cT2Yi=a4Br?ovY+Ol-RD+O z@s#-z>(X|(!Kg*YE-0)4S+IkPM~R+-^#C7#aCHo%qceWk5RH%7kome-T2BQrrhYeFP!IF`cRTNY1%Ig|(s9?2PT}2ozEC;=%^p42*6kK|nR^Q0qMe z)T=SyT6a&%JgH{9*f>6Y;ic+y&F%Vop;6&Bf8~=YRey%?6ZOA_vn{ZdWBwCbptJ{o zvAGOcetRUDpV=QFH9RuC>fpvcNH^KF^tQ5P!s}4qG(vf&$aLlbw>JWgdof!kL(5+O zfCq;=+6)I^jI^NkPUFiT{w&U3#-Hz5nou}1vDwNtt;EdEPbQ4PttRM4>>+~68?`36 zRA6u%M$3RB7Z70uT!b3$9n~Z**}BERr?bp zZ07fdzsrFG5nN0X%O$t$C0%-+1c5LHG`JDMY4twj%#KCf{T z_~fCfRvqXM0W{|rzHpn?_@#`(qxOoZch_!Lye?1AY@#(B#rkGXW_=Kr+c;x}Ua20SmJz6KX+-H=$bemr_h}&pPNro-oDw4VJRN;?y zbHpWw;KlIkYGnvGc6j5*)vb}B6}2F313d-xAmg6Q;VPark}+B~=;FJZUp}hB!iZ!+7LQ_y~i}nfy)M* zSl$W=-T@Pj+3sqep)GJ8eP-zal+GZ~HiKU2e@N$WJ+r~~KtrF{*Ja;EVtekUg-8V3 zuV-6C>RXVaSwA`|g@VyX-SBdU(JQdrds(2q$CdT1?e`X+Bv+E@w(B0!H9seP_MpCQ z6;ElJlZ+x#2@|$u;NhXtxC{h{Fm3SYG<%hdEE|G2iAiVDkj}pXYTGQ59JD`=hz&+Z zi*jDR61Mw`T705j=1M^iI%sJr#fX5@<7EWIWl zG?#FX3q3g)cD^CmO02JXRR}r-!Dzn|BM|Uca5(8b9%jLk3B!2v#!vq?9Zu89Z4W*& zO0UD}OEPnY{pRTwd6JgygeUo=1#=E)^EEnA>x$8~VMZ>>%uWqLodh}IN=82|G!*Ab^(&%DkkwIzSraO(w*D%1Nc;&yp8*rl+cU`$Tw2pa>EHPw81f3Y^ z8-+%v5KVU^*XRg~2amei1|vN`@U1>dNyHF&u)P~Jfx28v8AY+4Yg>V}nFT2Myg4jY zd%K+sshrB*ewNQPP$?_>;TKG&A$d*n?Yo}ByMLmGP-%lV;RU3*Pg1kyAv*raAuMl& zV9ovNm<|Y$Y-P=*zPd*-U@CtMJd*Z~q&91oRepPq@LmlqIT-Y5pu&{`GLab4s}9F! z$H3AxeKR=>kp6S9a9r#PB{ZzpEVj0O{@h%qDI6JjLpEe#3A4nl{=?4Ayz1kEC=6KK zsx=Ay_C}G9@R9+#PRWf=15Kdt4)p`=86VY;v&a-~+aQL@C(6~`a%KP6m z3#SCVR8?bwhW~CpiNubxuHwthfnKvTJ;7`Ts}JNofa*rEm~c1*iAMu5gx7V<-%hJp z>^^dnBslGM!(+45ZJ7iPbL6-A3*G|!6!bx8*%~j(`0_mM1O@6+G8Rj#ACd<3l{B8wQ0njVQ6kr zCtdH03;C`NGoEuRNY$$Au&) zpdb;(JJFxi`G7poCF<>9&XmaoU4ej0nQ}MZIyD)4bJGoZxy75o6u&o?${=tA0y(co zZ$K$NQ;-BUq&39worddW2&I7X3+%TJPmM4R%5tUrGJn4dz&T=8ek(=3Y=MnZM#Xp& zE|2EGA^hOPO%V#h$9%K(S-e4uV#)63;e(YE`3qYH+d50b!7?%3**7lIJ$%iebRRi0 zR}I*+WGaprYqX2kZXdMrA9i=|bKh@<&-Xirt)* zkyTFx6dWQ|5=T!?iODs6`detlfzta`hn))9^=lYGgA}!M z&exP&@-Au>(B2?iqrH!>?(|uKc%lB=;>nlLX7Xc!-|Y?Wm+(T=A?j1ZAD4jewWEP1 z^{<#GjAl;l`1L-8lCXoCY$_UGN3QtTrN?(dIX0K2S!jGCviY6V z@zMS`T}lu>0qk33>YFz^>H@2Gn+}|8Fc3f4A%zX$m(5o4vTSv16pnSix0i^zElaq3 znH!#^Xk+1P{`3#|*_?j?Wz)DtP*owngc6xZmuNz_fSqdmizU~A{OX2Uj?dM!r4hAO z4(&kq;QDFmOOeNR|wO?$wi_i z%Sw1k`G()CYxWd1kJ-%`QjJAzI3Ma`<9{4?b&&MRg0Jl1YP@rx53fd)=`oPXwc$bQ z`wOYjI)@yh{O$R>9%HMb(u96Ke7fET9G7qYNaCvZ_HxO|I9Fl<-d7#fD+Y2vpg1|e zfNuD9m&tTz9p?s1>fcjjKGm}NDBP=lQ@!S9*YCgCWo#a;E0^HdafeI)*h|DkyB3x_ zSN2?nHTJi;SAXRhF73_;@u#ZIwcNXyLS^Q~H5QPShdWX${J`vD4Xq8L>wylcb|L8n ziJVUn%(oq%w5Vb+$pAB%E{YL#$1WT`v8sHg`+E*nbWE(*+029S^$wA}IBov-?J#FR z7y!iwS;r;2 zL|&=G;pi6q#lXR&i+%Ltvn!(nK&+|2&#MO^13~2qYwivrRk5&S?YZ7Ke{eb*o>go7Fogy7L*4q*MuE!evOxW$1Vp4-8KYP7v+ zQ<8rjJf>{7!8Q+BdyFWxX{!E1zP112nE`q6?Li|aHbV%GVKFH%Xn;QUPH|C;fPN3t z5BJW>ADRtchPwWUh076$(EcY?d(MRm zed^_0P%GW7W&fbB>#%aT+)^BLcR(~s)AfGa)li4MVFP^Bnd1f?yQTR5Y-j(t;6Mep zDYZ`5AF20lnsSvyS9RctRrhmYJE+()tCC-nTnN3Uykh}YtCkZ^_?-h35F2p15=f7k zjSUfH?&$_d?CAewU>~^oFrh!N^cL9c-)_uqs0Z=_b{mgPCZWgZJTFL`9+b~&E(weXYK zLs?%={;?9?0|Ni^Vi{mGyt|+^@nm0ns5MMIFW)-bKyigjG{SvUh(Ph@b&HGorHw9M z6S{)qF=?T8`2OLOS{P3Dnm$t=V5xx5X31AVQKK_Lz|WdzrFewhAXmC%B#ys!{bob? zUg$Ne=mMfTRDuf}g3%I9bdm|X!cjp*r&XVkkxJUdf+GHr8|!nvSIAyAuGO-<$XS2D z$s+HzJ_I~kU@ZAL-fFYvnKdNPvyMqZP{CG>X1+;=m)i7KN>M!rlM5ximefrDVvNF{ zJT7w5IWF$w%(F#UfXWAHtnzAfx=yltAM`cEl;R>0rUX#Kcwc3T(>0!iCuAPK$yBKyQb zhWRk{fX~KhztU18@8V!nT`)Z3qn{cV%B^ZF0=+&X%3d?|RJ#h~`t`Oniqx5Vh7 zprIGNH4N3N$NY8-BKi;F9^^6jv~h;_EQpkc_|wRJTYkrCiZugovkHWo`9VI+90Z(h z0jC8v2#-)JqCLH5_0hyzoI9o8Cs<^?`ZFHV8~AMA`%*@xY=lg-@q~b#Ex5V|{B|1} zUpQ_J0Jeag zy&%m&Rjg;Ng}!EBmYxJsso&G-W06(7yqgL4k#!cC_Dlh0%cZ|Kvz-XCgWE}x_84>y z;ND-*kfDAZFf)$k@L_3xco|QDCj3+-cz;`lUAi%_RBd%kjG~BL0u!ozcJqsoFE)ZYOXfZ`P#=z)7MnHgW+TvB7DN_fK0uX|FVz* zhab)z06Pw#V-#bv1@J$RI9$Vkd`}JBG|9Tp;v6ea_I%B_F@h_Az1Nb9t!m}=}@3CuNz1HIgR@#n9z)3u66s5~cU zPgzkE1h6Xyb;sa2fd@e(z>={zT`1L91InHrA1YDIEHO8-)lh%)=gwL_jlvkBN;tx%fqEf1 zqESm3N3Av?$nhM9cmbmiXdD6${Aons#V02v0}CFM#ATF}WFuO40rJ+K+ewdyR{PISBiU2|p# z=n8+kb-k;bnBgbyjG}z&{L?(oR`0Iv{P25|nMiK2som2oppbyCcQrvNrO#FpaIdxl z9bCchqH9w1155oaL^b;d^|M(4LsreA2>Cj28Y@pBvXCtchNdYkj z*z*JYGCF~MAH8W-eY2DSMm0*K>vxrcMoWD;qdrqly(Iots{p!0!hstg6P;ICZ=dF+{2OoVUlpXddFh3wNVVnqU@Y&u0L-0ilc3yxk-*(tXsZHdx}txTlnM{r&8o9Bz1W5&xnG3)GM^- zoTy=?fwI85_=$Wi>e=8-O*fjEo){DS6W<|`Jnhx}FUL8zYH;%UOPgb@l{g;G+`fd2 zhVjIIqrj~kX$Z@K;Yt`__?Zx7jbZ+}fU`xAK9=bX=ZgxL-%N7%YUZYAAIh3?uuOT} z2?71R_~7mfK-(P3DG0O_DJLT!F#@Piq&)Zal9tGC0m0iiY!WO1U3hkKkHZ!QojxYJ zwcS77jIB{&r;dXHi%u%z-grzG^q%!#%edn~M3@le5LJ$!YpYeq@H%I-z`Tb~YIogj zEJ{sR+1rKJe@jL14B0?_V!m;CgV=)3P~g~!-4dUB$7bInlr#jc3Ush%#`NPIP9&cicrKficJMDnh3yj&l%$y zT^Ls0Hu-0GRkPmJxI(=2j!_GP*J`4~bDMqkC+v=8)_tiLjK8FiP_NsgAO+-ewhiD% zeg;SRL2n3Y`=D4BRu{vhZ@E9P1}c2_YAjgU-{+_KJb5s}q#!25#ILFZ-lT;pc#|na z*`SLPl@^~~8VFVs>8 zvM3k{K@s^fAb|Y@f^7E7PI|yiTu`^9V8CUJ`eElNS8a`^NV&rXTU#dM$@`DGR%0mj z$Nzu*Ie`C#>x{lyq30DrWBQDu2)@4VYd=hB3`==2BXA9Z!%KW4E&&A-SiHh^K)?jY zPt@A2!GKuGfqA?3AbV-aF5{&VO5BjbIHvb+r%vuX4|n#ic8vaZb#P|kWv;3&CP@1qb03#ZwpDNP#X=5s-669LZ%YtFHF&%z5BH{1Qd z>qf#T3fk8kUiBb$GXq`Ew9aHn(ZgDOYQ}z6^&CoTN6&FQJujKtt+W~ul0%*fcm8Ue znKHp1&g>(DNoXdS2{gd~y>Mf0A=aytl%#pC7SXYY)$pDqCjRn%)*G10msD-@pB1KF zKs`B_m!e#G?1u7E2KFSNLCV+UI>OuA-y)9NpSIQ|&A<>@$KzPW?q%T)yF^*(8pE{r^ZrEk$?{os zPPdPH-Hf z=BIjh4C@N{ql%X)^ZW0jv6)ew<-%s5Ej|O)*PZoP0gQnf55|9>F0|uEyhKKwmFquaSp+~Vq{Z>u@AwQJyA*&v#zQR|g3Dkw z#CBC_ahm(Pt1-{hTw_$aEvHiI9*45Do2N!{3QBx$8Om-T6cH~+z_T4p$#1MRtM;CQ zuey-06b7{9l5};AP3+H+$6KfTq~D$If2Y(IeEfE;pzFHWkD|#9PU_@4FaSGDeTws;fSd zhJU*!iGZ8?(+w2L;V!-IqjLt!H|G*0(P|xgO43!VWRrDqUX4Qst5IqIFF}r0m)g45 z!N1{pxr#y}X;mEpR-~2C1F!1;dcHv+3bYkBT*uvy$p)vza!RPi4YCuG1m8@Ag+T|F z=6q8GW>rCdDgS=O0u{6v!h*i&LD}zC8fNkW3l?wtmm#RaYm^Tx z5X0`=W&8F*QCm&_j+&|fH2_zGfDOqjC@u6VxS!+Ugu=u@p!jw1Gu!;#NS~ zom!4V1I4dCbvGF_KMUNQ=Ira1t`D;qXIEa~i2?HrK*U1NxB#<}(A^7Q+m8}KQ|*BP z;a=*;h;iL6Z7s-n(sCQ(R&a z%$Z3x;N~oDkM+z->{N;x_(~5EwWq;z0_gieGx_;t=%j=>lTO|t<{&GO&Wz))b73cL z@nD99R_*ia2a-VzVhT+t#~EZdu$er_9X`jkLBE$OBcTSQ=vf~;eN&<19IkecexzBLXd zu@1h5z`Yv3-T}VXPUA%9mTo|J4x6^aFygu8u5N~ z%0NhA#OvEV)Wo7g6#y|YT&w5+|THxJGDl-pqyu3Iqx>UMeE5>4Gf!a6)p+>^366QRU*!VVAi%-=BgHlzo%WOl`Re9h2{5OP9P)nV z=I)i);22OSNAloji)2UZ>6_NitH_kis>EB|Eb+IUI-@B#0^7$PlTQ33m^!ah5I z0DcU_ubb8Ps=UM8*Yg$w4pi;fUA*A9<-fB2!&1F(b;7l@N`;v^!-+S#w?}gV|UFo>=CEOw>H=5 zm5jM1t|F)mP@567fubmI_|+W)KY9WPmp24w&QdyfcfZi>`HlF8&2ADg;3qkq!^vk16`wLYTqDrio7w$1P2R~J@ zq^smhnZeIyk{v|pT>$%j)`5y{_alc+frYMOS8mq$SVdT`iH*9=&-5$5Sa$V31Yg19 zDu3yo(lBesei0$j=@u}_xQh)LCtKPp_x~w2rRe4<%sffmP${VG zzWA}qJ}atSu!F%il%Cmz?OuI7Cw%&Lu+n`$_RN$9jugC zdXvt0^<%~r!@u|nL~VT;4%5PKKlJr78L9K^w+|pD(F-q@=-mgee<(U$@?RJj6t9j5 zk|ap5lK1S5p{g6KPMR0NFj_9E=H_Q(9v+r@w$$_R6|Ws)2IZcL)(fF%JGg@vG|Atw zhdvN;^Z#91ewdVZwbmf5BQ{P`z~ly|>Z|*gun(4ZN|mraO@A^5hVAgdr8Nm$2*5Zs zc&609HZ?AY5j$w5I;gB5uOyP+C$D(OOnz9pl&#g#l^6M2FjRGVhtFm+d-o^Nf_AsBXE_-CeD7 zUXt4S{KYc}D-{JGdq2Ov+8m&Brp*Vu<(qn7hFwHV-rmt?pKIr@dwWzR*y#^d;s6_O^V>QrQzwZ|0I|Ou7zkMAFOG7_+6-r#j%^{la zc(h`9G8;D`Hpu%`W9`~S*K6JCSG}vKQ7ZsRe7zoMSI#t)c|eSR1rf9&E>8ZvsxWhV z<8tv+yibN942xM{ggw3pC*I%sn0uEnETMmw&LM~_7D&O#ehNrOtk>r7P841e%Sg${00&BW8Q?gnpdck9EhjGt zU1n0z^ghMuQ$_@(WewAcx(I8u?g`eF4N;LWap_4oaTB}S5zs2R z_;-KYmb^vv47gU~!*J3CcHp{%3XLGJJR*m(VxTwM(xgTd9}mr}O9$*}lF|v;zY>@f z4Q4c_Oj}77?mw!_JiH&Afw06tnLhE*+ZF+!8VIF5dQ0q{!G}V{qQA%$*Rl)GCamB2 z2dqDC(<#NA9#V3!@vyiz1yZthPZn4_)Qi&Oh>5<;43R><) zfH<9a5KViLF?&k}%fimz#iG)1;Z;#gr(;DiR5y^lg4b0ABzrBc*ng!U;7rCQbU2h>eH}N z7Va(vW!*R)bYJXlN`Bq^%YhnO{>~e^BeKUDB-n(R-bd`VEA^yPmyZ1;6kgv%z+$0m zm+gT#__H{=1q!YUe&9fj?HUMq6n;&fA$#iUGBCn8WwwWN>!3hHzFF|ekzbsE6a2G$_f39ghx=}f5SLGg& z4apgIWbMb`N50$tecAhCpH3ReBLQ%l!0sD$sYfrbmp2|jRIj&eYM1xt*Lnz*8jn^# zA5t_rN^nj~t}t4C?NRI2Dfu%CKajpPfLTiM*Gp-33@2=& z7-T!$lE~{;X8Xeo-edoGuy6;A+VcbFsng}YvqTjp)IeG-2NvDx&>+ywew2OG{J6?= z_i1sX^^2pgm*=mh#T%B4e+o^7Wm(d-1X7g&1BW0IH7!X;U4(wJL8 zO>^>#!-YNPdq3J$7%s9E(GLxzNxoOL9|fBl+;mJOCO|%<%eB?vmOh|Y2KjX*@G4(( zG*a`(A}R~6+gN5-ja+!;TxdN(O)waGBi*%f4}B?W>UUCEoy48a&qlAe>3fkWBALO?wHM z$OAoBb=BEQE0d(wfu8F3RY}IQXaoInf-eA9-PYxv;L$Qn&=j!NBJQ4I?1UjvafL@f*E0LFMFx4}8(4 zk-rY2ZN-pOp)u@ z5*T&Pe(d1RLA#4MR_rgL7)I2?q(8-sHrR zFHBWA`_>Mq)f0SN;IyF7*1S~zyfas==mqf&fP{f>q~(+aoP|ZshZ(>dK?(y3SR7UP z?96wmVT!7TEMH_X$v1hoTzuF01C3SK^dG=yNr6q+GXnDk0KI>z?~THV0=t8oqU+ZvPNb5b#okR;@uw&~?47*EnQ#ekbm&h6YM_6DGhloMY7Q#` zdME|Pp-J6V)Ujz+y0o;KE8JADYiswtJidNFCh%yVf&I{Sz|j=gvbDn-0yV}FOy~VS zIA946YF%N-OY-E+yjPPEPO`=Jl=WNqkLw@*lrob+3uiZj-qenE0E~@8(axPkP-rxs(4U~5V6aE`I7mEqm zm)A5h|2BN?cyY!saMJkZhV4!)wy-;X%wr>MwS_ zM$(lFQgyHV@+oV2R>EXq&V!H|2l_-q!co8Jj2QUs2AnphLy#iElB{NUU|^)cF~Qd0 zb79-xlQKa@RTp*RfZeE-4}a@12B}!(-zowfB_2q#p^Jaf;r&tX!4V)Ez{s%=gvHO_ zr!mrsGE|Uu`rG|Hpd?CrQhN9OG7}CmwozY?W-)@X59NWS2BEF2T&wpS zI)R(uv9f_G++I+}h5b5^alg%LKRo)D|Z72768cO0=#^QCBcx7}sZj!n?> zgSPJiFMJ7f8de{j&5npnzyjtBWU!?O}RIz^I%qlAV3y+?_1{q#sgPDbg zD(wF@11G<;9U+g%KB0kpH{aZj?QvY=^vnF&nDkDh;@_`K91kt-;6AU`@NFa*I00Mv^;Fwg)2VraxgQC^`a}e6LsD@j+yi& zx*gqAx3|Dv3fw|3;;Hv^#2KY_3bY%gO&(Q#Uj66%DtjdIrkqhUSxug{s{05)QmS2mb{uezl7eGtVH5gfi9Rliri_v8$Xfk79{6SYif8N+wvp#<7 zXp%Gax>8FYGv8M&lFL*m>kphTAz2<-zB!-K(ZXsLVz@R5Tc`RV*_fo~5A zmtD9G*gu^_FJ#~I{Q8&S8Q1*}DoAVUkdyk$xgQt#q%o3kQFTNN1k5M{&IwIRfRS(^ zf(oSVoOJkbyk$2=>?J*Namx4q|9{m+J4gOH4&>b(p0cNIAw2;03)#b5C}vyr<6 z_b7lu2JY2Y0S4^#P*5j7aesM&t616C*X49~^6H7)_l5q91`D4FC+kfAR8K2+?`=rT(Xg0ss@RgHy>4CmB|Vq52IFu%DcZfYEtiS>|G%{L>n zX7H(a&>aY9oBYdn-8L`bvZDG&y@Ss?MBvt--vFu604TLm$QLok!zcU>!!!>0f!$Ms z>0eqM=A(}_gPyG%SqygNhIqCl-dG235Y+my7aUg6&Tvf!Dd~6^u+NguLh5eMiP;^_ z-<&rpXxr?v)D*GB^S$gXJL{q`JKiUC`Wk-11VF)TXhhvkb9udFH$2@5Wx;#G3BCE` z{zT(dSH|UHelr8(@tCXfxNm5(8oO-lGAwC-a=jd{WaU@9|MC~8N2yR>5Ogh|$G9BE z_Qa6GeJX`*yl8LCe}z~S*r_}S#A#^lpdLq=>hzY@J* zNyH2ucnAzDi-V!&R|U(k4o4T*FbCgLb4g}!OX<14#IRyntSqT6(D9EbG z16V;;MoL;*US3g3UP?k*N={N-3^ZRzNyx&mgRGRiqNId~q&NT}#HA#~!ITTolp&o3 z1a3e;Te+6yDP6u!opt>1tA`Av@D4F|YkIe&*{@;Ckm-xC>4xht^;ArQV8)_~Cg0kJ zkrRbOfiBwp_SwoXSrl}@Q)%+EXjBtc-@r~9fKjSUgDgLLyU6?Ocbg|W@aeMC>i$}k ztd0yYQWc9JA&v=898X^9phuA6!~#zt@V!6s zxkru{BGQ!~s;JcoZ&SW__eN4jcJ5H}eG1_+j3@VOnn(<;&8Wdy`sR+!CFaXAI?&il zzSnt3qNWK$c@9a(<`PylWtJ)K&tdOAREgV$ay0)n;lheCGJ)E`(E%jwKvk)H&IL<= zlZTK==27`x^j5J{y?*q-yUD~K>n&p6HA8JqwEQLsJqasTnFLW~KZzX<>zQ?Cz-c_o zbDTaf_i?^ZP=_^lS%=_r^NeC*Vvr3pcQeinQbnZAit4n~eNqC{~T&A_DW@v}RN?3wbKKeUJw?`-yKjWiP*@&_?qiCmkP|EKPgskAP!CeD8 zLR1If)Xu+R45sV2P-EA3HsY>|S0Nv6@im`>ELbU+5|>qeS91PD`TE~f=?toY3;2bC z1~Ag|00%zUt4!dk)SUTc_NMQL>GYar0TS}@m|ADzq7oxN4=HZG)Yh4X4^z?)97aWW z=MgCJL<4&alK?PSA-j&N7E zRtAZ+rQ|e4n;d90Kbbq7;t;mrp0Qw%&ZN#(ooSA@`AI7Uzsh|eBRPxM2uK$Y5)c%* zu)5bAqn=_HYTGgP0;BtV*CRvBn!AhcZ2a@$9TSW_)6;yUz!3}n6eN@2dRN%b?$MU^ z))V3&;K3YQeUVuxQx)IHI*gD%>i*?)R~JRo3QiVhVdWpf@44MSui0Z>g_qwy3;Aq- zYMybr*|G4eyZ~M6ai`qbE1_H0Lzo;Nvs!bv9X2_yb7~mk|NCV!IjcTTIli zk6y4xcP79F`@nT-3Ht)Xqg*P={wXiP8_I96)(zpFC%Vn?+UM_%+hTE|^qN}mtdPyB zRwzIO;PsEBLaijQe_&Pt=tM8tKyL~Iy2CY^Im(52++8oey+Ez3EwJY8e4{yfz}LmZ z=I}|F&3q=9{{dg$Kn1Lf(a1Qcz_6f`bOI=~CqDc``qz1Ks#z19mW%s?mpgsxE|={} zCJTMu6?pQxK2QyeKQ#eY^MKu#0i(L`Tv$+|h}VNL2P?NCzeJSxh)~zZ&s<=e4wV)m z*yj?^*%k~Xq*|&E@3<02n~mPQu2jLlV9!UivJ6~*EgF*9kI`d)=CDj}Tkpt@8~VE{ z_Y$3@zF~dgBI&XQ<;VAtrCBv%FzWVC`>JZkX0clUa08gNOQpF0C+jBChQ!Q;HwIrG zA#ECqQ{U%we~V|bYWo+ueRZ&Fl6?$>Ln@lV431t4G{P-1qkS4I|`Is!B$8xJ>V zrVWyLH(5Cp?ay+eOXffo;u+F;OWU61w~Gsx$y?kYd%;u6fw-x9D%sm^zi`^ePF{t` zuYw~#>zwiArG;8)At-am@Y`O3+cV!;RpAJ(wZkQE<@LC~&G-N2;)%r)3g*Y&T=-W0 zZj8bplnBn8yvJlZ&?PCH00J!(2Lu_AKAS4~)+U{Ad~vI4kl=f!>_^>Szp%ALY%H}; z8;?tS{&uA+qR0U)JD`i#KG#r!ps*AG1&Qytxv#8=$(k$ld@|1AFBL9QGZaZT^uI;sILSw&(CDij%7uFWu$FEui zJ7~@0E59gRK?L^P|XH<&7#S*LGMnslSa{q|_& zf)>)*^JA5Ao6BcE`g$x_Ro?@cd3a6)3@@Rc-8T~vWJDso)H&1MdbsziB>oOTinG|= z7Y{Y2NAzDuJ@++I>24($?|MiCUk)_lVW1ldY(c=xG;-L(-8nlx3ZwY{4(vHy3x#Yl z*8g~lyVKIwFQ???{3$Hz5vfacuB$9WOB-JRUA!yGu^+Zb5XKJLF@@$x>en3&Mu%7O zsAlhRNfmL;DS8@De2Ts(!otU6rY9)PFxnoponC|Psp^4gJ@^1Rw-0rT20^HUouk;K zDMjes!E%Y(ariQKyrOBtlFVI>p%OhNWs8eX+tniA_Nv5PX-o6}a)Uvh`+ny*(O+WkP>IsjAE|Bs0UxR^9(hVZRVV$^&6V*t6K zF>1`wX0csoIgn`Y#?4?{EO|7+i3M!P{w)!KHVo8+2N-ivM`VAB139wv;pETEzicM1 zLz6$pUzX6^6yJ$S_S91mn|n9nbV2#s3r;%qQDb@Z@zsDbPcMe|&GE@GBNM>uZ#7!l z4m`EAS5y^}V}Tmtr@dE1s88d4K{$puA56WtJvXyua&)Dvdavv){KhE^#z@%dbS7XV5Vd*G+_P+xG z6`05RbV0K7PZ9Bt?>~eq>Vh7AF`fTtL1pEU6N67@_Ir?0&7Pc}3r$f}z=LuB+Mgp` zKz!992rvn!*9Fn@LK#DPZPRiqhe#p1JpxY0C?h&A$B+SEKc~$@O-XV@RyZ81{S+vH zvVI1=)B!lqh$Mn;`ZkS{zXF51>2*I)_5S$sqN>-_;EAPlWFMnPwOAzTp@C^87^(cf zHiNH#)23aHXVS`}IKys^V*JoTQGY^B&A5hdW*KCJT=$#F6Gy?cM1}R5-l!^_h`PAiBj<8Ale@ zD4c0+z$eZCqn(R*e=CPixN0~Sl0R_KS4YAMsGGbM@)EpDJ&7|zEi5rV56G~cNFh4= zlS=wLzsd}>M#66qmoSI`5#*~W*tF)UH?-fU^uS6{L}wcRiCLKCPnxDnCad;(LS;Jz z>_l!47r%el=F1&Ii&PD-g4qtRoyk(x<2*75D29COo@aP|NO+`0|Lb;J)b~rHpR49B zern?_8SMOL_@v7}GtUpuqI4!8tid+BVEheWMPOkHz+r}{Fd$=pETdD0M}MgWMR%Mg zw2CX0$HT=6~#9EtCL=JGuK2s`yxfK5ZOMnX%#ivtCkd%|VJJz^lv-Wuu z%gbCr$TCsg#v4_RYFI!+Zb;bTAJv))?@O??67Zpy$AUTBW`&eQ8&`Fh&Dfc?((z(e zcHa1lMLye8(Bk!NIHg5Hgq4_VKbrrY+10{UpW78!(B{Lt<(5OF8b%Az{57UJb#&O) z&ig8zysSSaMAF-NS%2Hr`q5% zY@WK%EX7nb^86XLj8R3;b0mebfea-b5p<{brut_>>j$CZua&nHOczr8y-nZg(WDS- z558F+0i_=teZZbl8bQ0k05iaN{yS+T}4JJ<2fkkZ#2QU06-wj-vNpOYqhp(XVdj({6=l4&hHZg0s6 zO(KdnB}Hpq0&o;jqElcWD}}o0A}qk*2x&EtrO1nsS*v-obfpL)<6q-z-`Y2xe)XF2 z;r!yzc-lP5Y$Im$|53fT10DxhY7L7{)w>%<*5ADEzPj`JDq`?Y>Q@8$(=y^D$+~bJ z!@vHxf$-_7ei^8n|4T~1USJ1?o3qtSr7g-!y#tQAJ^U)u83MU_pCadLWDC7Sd<3P7 zKPbF08mtulT)ZGp2@tVv(4fQmpT#SFE1ut`G19PWmpe z(xUHqA0VMV=&3ls+73A1vOz(wA~`3L?8pi-3L0>J;_>gw`%-36ciqWgGz_>Rd)cCI zn1{sCAL9&gXa{TU3~(R>e^ySHXevp`0yIHJTpA3w0AK=`U2#(wbXACmgE1D8;v&ML zq9QlJG)+-4aS?cgrl_>Iv^cPw1l<|nuSze`#m+_iFDm6r7!X>)Y&t6{z#_gRk@0_0EA}=W&Jr>D$6cg6VB|l+(R!y zpc3E!b{wz0`E|u?tyT?77@HW9Uym>{{eM(_Wk3~O+wN>qQlvvrP>>D@>F(|Zk#3L< z2^A$IB$beoP5}W40RvQ08l**}K_n&5n!Vw9zw?Vt1(Uk!Vsa@Z_3Od9}B0 z1INoJ_JEvy8QIzzg`AsQwPCQ{`?FRo2+R{bJnLJDYupGDe_Q3UfBdyzJ;j_ztX4Sm z>KCtc^7n_vf2M(CJaQ}$y9iP}6m}KGHxOimLU%nVBo>Sk4NEuTWAv%F7I6fMJ&oo< z1p+&tOlQ6iT#Q&(GM;urASpD2o)^4(m<9tPvg!-aA@xWvI}K9z_kI$^tHEB%eEpI9 zbgUhyM0jP8DT&V0Etpu!km8lbF|2<{KkZ& z0g7Y>GDfTyOli!Dj(6kMF8h=bfL2(Dx+kDXA+2h_u*)Dd1_Hph?)_fc>k)GzJT3+u zSIF9Do~cy5&tz$RFKpkHx1U48!PfIMA05yGz~1lOgYD4VE;c`S=w=o)=*ndgNsX1>}>9==!5 z9_yKyU{#U%_gML#d|&FCn9bMae=?=90k=DFNRg+X`YP-nuJnIQ>%{w^Hf<&C{A^9L z)S6X>JVvW8>0`ADw<`(=CGqpGq%B-lDrpDbI1-*jTxA$sbq+kdV zlJhP@JxEfBO!vq@Hvg1jvQfTeuW~f7Lm*3D{07qJ5(qwmY37}BfRRUfh|ht5vjIU3 zcggf*`}LC>JUsQ@(CU-1&8+!7y*yGZi*1c&4nj@rDD1C_6cU4z9Z6uzDh!1>+^}Pg z3Dy@6d{%M`@%~q%(AEAqw}0s~hudgZzBo`Llxhq0iY;4}`U%809& z$_-Tc3xQ%eA^eLaLsI^J_ zkhD%OPuKEvwdj_B^R=e;OUP&Q>3I!q<_MqBaFqsYv(C69Ak1pAr~=2M42H4@e(Yw# z0|t!g(ptN5?I0DM-o;dVC(=aH(t0S0Vn(FSy0k)BB7j@%qIN z^1DgsgvU<&4c(B+l(Af>a`K|421JEoEa>g&>*&;_4#CAphUKH+g#&q+py|jtJh5Ju zMzMyC4M2*5-zFEj;5oqp`9m?G12CgKb+fh{q)FC&5o2JhGUqA!pbgC@$8mGBKV1{u z3W?`ce*qh)Az{`R2jn^da>{(JITLdLJS}|3 zMOa1lKQ|Q6!;t{fm$(W(>W}s6-npj6{FgqrjmVf`D>oWPJXp%#LDp;r`qGs#z3P#66I01SL;!ni1nyW5%XlDb zbyx)o?zSQzEAgGRb$wipaQ%*dQ}Nx?##E$^pP4`OvjUsLZ`{y4k{I0k8;pRFc4L!p ziU%?+;8nBsySu@s?2n|)Q1YLWG@|jyCH<0-svpxEi7zO{B+-#p@W}cerNIQwv`{Z7 z6x{e13-Qm+_K{iV_%|%oF%82wU)gZwlnuuv3^@_zN^saC2X<4)K|3J)LqKq~AA(*U zUJFvTu2Z`tq^F|B@;KN`>X3bzwp#7e@gC1gylC*u6?9ZqXh)}DT8~Uv&d>f>D#-8N zRQ$V1SoLqGT|aTWu+s$_kqf+9z%4spt-e4H-Yr(v z+jnMwtX;p~PS#PBNSW(I<$LbU-$4XV=^VgoeF2Z0QSx43iIYR_Qy9?OGlNb&ixdK! z2{IO|kHYiQ7Mc1z*5$VB4!C9rb8r#PLG<= z!EPp_U415@eNF)zw@8iv9l36LVIC3^Dss-5Z3Pnswp((#9=aKoO*2-F#5KyQiaK#@ zaul6cE{(Y2y<|sy{{4%Oh+N^o-CBYRIFR)U@sUYyX_ogZT?%Kp>ueuUS899-SHd7; z>H!LFQZ-VRJ~b(cINCkV+lIsyHC zDzH!&VFNBeT>x;2Q|wXSy4_^(3*tcs_W+4p;1Q8P?XA@poWcbOxE*Nga#D-zUB5of&Gu3cT|dVWiURVv%7q#^ zz=ik$rUmIM<$5-)g207n>2CB=jzImP7ClhyT;3!aT2aPC1`hR6)HePf{h-+kf_68e z2X3nz@W1eNS0tf=KSiWI~BKOO*I2qBB{Sqzq-eD$sB zgYW5|;-g&nc3GOJ9jMzXh+5fv!=mn^V#g*7kGKqu3{Z}OcnrSfC>~_-YE=6Y`PI4G zKSn8ZBDLq^Vz|+tymamJoD*L`ATvx(SR4Q;r~^lF5CE1jp|QrN;h5GF?`bLWu*U0@ zoj0d?222Zr@U=C=k0Mr-RM zj2?I^BG`9}{H+7+6~y+Z^_et)VHF4lv5RmHlb=cd4N&KhYNYOfu4bU8zOQe1E`P{AbC$HRhCyt7W3YCS7z+?xQJ_86}A-y-@>XNh8zm)Px^Z~UV z+oIq`_L1i5w~!2)wjfcovzv4GJRC&;sS^iY`S3*lzgilYI}BcehME}eXC?iUJuV8) zAXAW~P+N=f2paveov8k_AA_WAcmCII0sh4_KmTGfbsTaF_HcckWheOE3+t^IHDMrG zICGbq$kZKj*CY(r??sK>o$P06`Yz|WCaM<b zHnS&2^)|m~a|!Nm99XaVHpN&HQ6f_|!WUo|0<0k4A*E>m8|DGfC{fzmS)cqHs>^ZL z5I0T?SDIBixN$60)>icbLxiJ>s=Jr$~|J}XY%%ok0B4utM9Tk!L02wLVU!egPZHkuM`l7FQOW*y> z%ZxhMO|e`M!EF4bEq2^vC1&6GqECf}=6|8|KluSLjoT%L4&HTKec`%WmPb8ZfO$jZ zkaak?D%pVR>-Cw}2F-rA9P32tIU2B0C4C$m!-3n2cF@yB@eo~aLm;aYnl3>0$y%@1 z>$AY8;e$1|PiU{TuC}0vpulwy_%&C6=sNeI zFN(|mRV_>AE#uT^iLU{lHwMrj=lbeaj;sb+I=H4zY6*fnw_b+lE(Hq?DR65rpLPtk zSI%YduMV_UDpgQRoLQgn@QNGgj;$v$K^_Ck^zv~T_aeEqPAhTI>K`yWk2txPaBn~KAhAAI{Fy*g|V!RgC% zfIhKzKISG50}iXGuMJ?Ka8m)SGQ#fIX8)Cx-*p(p5sfLjp?Qpj@zd2DA1#e<$Nio+ zeEnk!xkd>mK;sBy^Sgh1hOG$asosvMH$8YN{W+&`_H@6XOKIj<7M2pHmG}2du0=S^ zFkcWZTHp=@3jBZ%{w|3=sRk|k;Rf-PkRNT&9CE!BY6)@*F_r;Z~YwpG1lI z&CpyZ`ybt}fkzy#3;cMlzrU?hw7mQq&GbeIpN_!Z=dJDTFJEYxiIkr{F6W1WBaUa- zBHzw{k(b3?K&YsD>N{p!WWAHQoI>*0rLTxR(|_|0HxGPA<(kD`#+ zSCQ-&BnSg2*zQ;dr!1&q!b=o*cfdKkoFIg6#tt>_IQo>w)$MLl=4NJJ)*@Xn|H$5) z#}z|Z4N)hq3*NB|+uOZsLvu3Yc!EHj8XWsd8*ZEVF2TNC8~@}uSr8v_p|H7%9#c|G z+XXrXK2^CYh1fX^owNMiq0@JU5)qUR4r*@C3Z5?q=qP`3j04oNcgG=d~6A&bs8x9V3r*!5f$?IboffNdy z@IN?)j=az8{nK_)QssG|E=7a5*5mkB#40a4eq+p23)$K@6Z$lf(;Fd0c=et^q}zzp zBkFtTaFZf74({wAxq+KOePB-U6fLywOVMv^-XCZrSV|c-oq?LA%C1SFDlYSny1izU z-c`}km+Y$20Zu=-IY0ndH*NG4!M)LQW}gi@bhvKb>zZk%;hn(O0jwFLbG1k5Z#EaiA9P@Z}jeivvbZKv;oS4bX}z z0@$G`0Hr=36CI}mP;;NW@}|IOhiBazW0C47{4M6rg3-FSxmN$&+Yre#nx|LcMm={g zzT-Jg4z`@VNeY=4VMF9cY>d)kcY3S0UmD7%9Qy@2E8$n93`aGEsb0H(%8+EC)CB^J8%4rN-#1Y+MVjUq)s2Y2BXRi)%ZL``G{GTjpX; zsY)rxhpE8D3K4lQAr6&l0m|3xHlVE}6lUd$@}4=?>kagzjMLN6DnyioljTQ0q zsX*M|;GK{*rB4>*$jXfH1#}P4DuHy(x$ABcS{vRCh&z$Hl&QyZW?fHX@m)5@03={|jTZyygEnLMk#tYap4pb;<7J zOXFdfVy*57Nz#X`n40bpBgcSy5!N3bt-Dnyb5WhnMn81PMZimt&?z(uMkK)?77z>p zgH5~w4`M%YtC#NO%(k`tcANe)rZ?AfBag)G_mdB96Ic=r-7*R?p&PV7tppzep1O*r z`~a+cSRwPQBpU&KhI8;J{!ibW>>6e5n=BLkZjRS3ttvfAaa*>06>_ZF9wrPNtTN&7 z!AY+UR|#O!2~&%~-KPPsS;?S6_e59znHW>oeisu>(Dajy-a13#d0yNuTQlMxw_n~6 z#JO#O#7+QBS)hpsH|>$jFdzC;MhE!`PMYx+YrcB(becksp)scR+6`&{L&lZ4V7#qH z&DT538pG(yZPsH*C*a;#cvOMRoj10_OO+ZCfZv!I5t{ING>r#4a74+yI(EUjxJs>O z$eZKJ@TyXuE-~AT-aVsEi&=GaWT{h!Nc#bTc-=W49fr-?LfOx9($m}hd+Cz+)324gPcG1=#k9sBGo`cZ@)61lq7I^Zh-@dD-u_BF`9=hpkWWm zWCJa-6!VXlYRQMAS;S(K^{q6XPs?~8yg0RVT>sIdRi1@&l2@#N6h~>36~Xj$g)+C4Z`ir%_|$`u`6K2IMh- z%E)>$`^@ABeXtH_7bR;`cYG7R{!3p&?DBNHNcMO|I&O%g_n5*L0KI~z92#9v;bIttgIYZ}P;b9K+U%EPIR+ z`XY3AAH>Fj2SCcCcxHtdFkS}$Vo6Sxl!_6%fQ8i-Ep3`5R}nk)m|yn-gnh(FoBLi= zWN6til<~aT{RS*K;eWsh>vQ~vj)(>LV|0k})T1i7L7>A^U7v6~p{`qsmiLs5e4+!d zgMPi5Xh)^I*@zeVe#r?B31KFTBZ?nJ8PNbEq2eg4?0iTvH~oqb<7@Vb*J2jc?GEm< z9~{ih$XiTEcs?>Q9#z$S?3P6EKojB!X^)$sLR6XI;Kq&RglIQQNa@k6|Arg%;3&A5u| zcs-{^9co!RK3jyOkdQKz;s`hz6!0L!w{46f`ekK=+bI)1RYdu$w6}anoZgwvm6(aW zZCN;I5aJ}MdK>yNi2^A*>|?+)-$+Oci~a;kL?NIgw9xt0hU5LwjoJ{3iF;P2YrR2J zjLd=enZ(HYE8THk-(xf2Aejx*4ZsnWVuJk{&+2g>c~7Npz(}FM)2%#1cu9-ZD_3q* z&mZu8O5LDmJ(gOGRF(QO5l5_W<27PrQC!PuR8ii^oyKsC#2n7Fv6mZMb?UbOn+K4i zF}ZI;-5r0^_)41SN(NXf$o{c?u%re;J4Q*?^~ty9>}^-BA7wn$Y~~ic>tM6NH=zNy zV+ac|cUGA$(7FKex_t%u(|cb(_IB6ehW3`zL?dp_3x>707hQ&wo|>Csl6@8aB2pw4NW zBY(!+>(eEo`gZ203zP}2?*%*42idZFx9J}^2w8xUa%BhubJMh}L>C4QBD?#V1Fi&X zn)KGdK$=U@(9>?2ghe#PKjwgy)ayetcLJ31Vbz?zSCME?G!)7vug{pSBeAF=LM-&U zp#Lh?1nZF#Q)Qz5RpT!))D}NwGQYTR&+?dqpwL@kbQ7NWoCEAY)4%LCWa0VpTb{1W zEu~#$tt;lM$2TUd?qm*4uVanqD=fFD-wCdfW`xg`-d<4tol9qfp(hLUfDV|h%UP)( zZg>a$4Lj}4#YdyKyPp5)q56sUS(iiZazpEN6ThPd1Dy(_;Zq-O0^pTQAz?&ym+eF2 z5f+XotS>F8_vwEo=UruWvn=Zs@TiuqsQdc*VN3!i;*N_{Oq1utGo8BXTmldC7KHh? z;}Ajnfc{(g&3j%M8`zr{iUKHQl{e zknWXcla&y-Tl13!hdLPEP)MZk1$^Qw7SzlERKuppU1)Ib{2OR7RVQ!3#YRX)1z!;> zzV~)SDcioF=>}a7B{5boI2r&70x7O}e#mPeW)0AwsB}k7cHei!11?^}M29po-3N|j zb~m4f)5fCJniA7%(0+JH&Wt*nCh(E^CFh!DKzdybjHXuVjS8ytJSn2s-zVL_eO3SS zZ5zLzgPk5*oTkN{LT?Og_LCBBwitoCyTK}h|5=Y={du6CJF*Z$J(82jTj zhmo5l7K14@h=-x-B3C@GjpA22+QEma55dDm)YKd_nXa=z7Mg01`vM`YR>7h{@3nN! zf5fc!Klhd;D7h=dPxegiu~HMWUv|Iek2(@@;)gCg)UY9YAl;=4g(AK+4XyL5XGP=W zD5(ire+V_N2=;T4)y#X4D*lC%rnFnlHv+Cji3`Xa-$X9kpKMCgdh+nNXC zn{Rx~lbFoPzVbfC{*}}6lrJ@qY;{3|<6VqQYTYP_Ffz-o!;%Cu|BKEbzzo!}L4P{2 zaE?_A>a*q9OL>0ZDE-9he`wFGXiQQ3ZLUFgU}l;p{U#1x&70qZ7p;hoa03F>iXZ@g zS;ePgrR1gMWMt(eB_t$({3H;Rl#mjWmQx1WlAzBZAteFaE<`0|00cr(Tu540UP=Ur zPAZ6t3IY&?govmhuu{`UWOzl< zMT+Zld`#4v#Uu4%83b3APkZcX1Cu!5TIT$w78^0M5l4@&kw>;b)~QfysNh z(<8kyom_-A_~mxfmZ`XG(O$GsM**?dF$YB`wuZS z$szl{2R%9lVdW7>kg0_gdPBe4(a@3}m7AdEA?NnUf?65$eILACIGXix_zOcTCL zii5|k4Sh|L7oRhm>Sy)5#GuV_qlCxUU)XLSIgzo`sr` zqla_aI$%JdLD@|yR|Ru?Lp*q2GbH)h8vGf{Ky>hO?$M2^?@R2{v)wl@W$COyku>&+ zh8s5=F3M^+nbai)UKf7e!%90v3KLK6OB-BnvXinGt)|zxzavs*IEOEB&sWJ{7OC_W zTZhQ=nR2;+oKUhr&cLW*H^iwZx|DywOg?MMteCY<;MOS({RRdGM_Y=Scb5AHY<977 zwdyyR=uxMa=|I%2D^=WE74XJJVn%OGYGSSxZ`0)*_lRCE>xf~Iz zb3v|n6^dJe0xIH;J6}TYKSo0iBYeUno8XX#%D`k0v%q)Ow4R04Bf{%rI+opEub#d0E#pJfo{MX(CtHna%EN@*2Y#(Tyyn8 z3^OO@P8jlKI(BnJFj#D7%j?rNvo_>C6n+uGf}EBcJ4XahZNRKlxY_#_3RP;yfM__E ze+ZgniP|LrmG_}S3Y(BsoPYb@FvR@+c~wh!)<(Mp#Gj=`7L020~+58z@>!a z9?J4U8DZfE8n>+t-X-rm%2!1l;-XbMM6+W$uHlf9321Bf`K3&14V8r6?3E8$3|IQ|Y^yQ( zk_fvFF4^MVgQgS@Hv#U?ds#Uc#z5-K@L1v&G4&G=3MfbanATTHOBvzL4wj!)D*oL5 zkky6g4@-@pDmbleUkQFE()imtM>~W~pV8&Lt@HkniGpw&zC1mvvcfXZLAU8v73UUSttL5&iTPDCTA-?*Ker#u^ZvQwhwp*Q97UkaGt8*zGJ`Yz) z++FDiRHeWB;)Iiv3rz z%VHCFUp*&n@4ibbs2D>p3`CLaz?5O5NU)VZtgf zVG>Ap?ZfO6VSeCwjo?{4RNJofp?2sgn^i4!J31X4%6kFs4@FrBJZ(Z#l)Q!s%?Y|C z^L!g8m!&qlE3ayk=$}2*6XE2FIoNwRFfA6#5(FB!iuZPK;Ex~DTQBew=!YUFKgWG6 z`h3@OAd9q}hF{_Xhv_&`Bv%~f3RW~e2;F$D&u2AKrekFBW^3=|CF^K4WK9e>CVy6$ zVBCMh;>kOb=P=ExZ|JSxZzHLn(TCOjj9#=3>~6-3;p?jlQkD0t%P<8 zZV7me6afG}4|nP(5UvL9kV76Z+Sj-3xI{5W**|0gf%83k_Nj0w@ABQW-`3TS%cc{Bwq zSb4Go$@LXR20ab5MI>B!xY5W-F2LTxFlQj40Jq|@fw%_XmdrT{xlGWQHDcyh`dYL3 z&K5U6Z2l{2!KyR*K8p!0bL!bBBYGzM!UKUMkiZ4K0~Rv5iU@6r3u1rx>TV>vQfQD>b)d42l{|5eGf4{(kvRelU%F7B$_DF-(= z1dlxQ-@S&ze4=Jcs~Je5kzRfm(++3~fqTc+qlAIan~0JCnRj{xS}Kj_IlMY$mn_EN zFqjv9hilyTwBXS%#hvoez=6|ej06Z^#SUoeu>n}^z+?kCKWH5qw_pT^P2L-ZqnA!k zznlA|5Qt;v-n04iUN@D5>DIH<%R@#SM2cka39tT)pc}9s0X%Op(@h;gKvV#6*YrO) zj@?4MvX%SH>qS~;UOaGMYdF^%?~Fwzd#a>rwO>)|xE5nlGK**dc_#(tr$*PoZNM*q zeTzxwfMG%gBpJYY^$D2>rxRcA@wga0shTBwBwI{jg#X@WP2Bf;UC9Hr#c|3%pJzy7 zW`d(4=JT7ozD{Cpu%P8L9W+3evUPM zG@`iM9ir6Lu>17qm0r@AYFQ^2Vw9A79gM33Tp4(uhX_8x0(0$dir=z@n~NPza@mP? zj7?JUHFrbAJQphoG;j|ug;XoC8_Png=_D#06GetT!#TfyzlJ3wMG$&0gv@rIMlYSVH2ZN z%u)R(-E5#{J*gV&uqku$COW3D!0#{fn?ft^FeAYVfIA$ZKLJCGQCt2MAJhi2-G>zA z=_2&+DeJ-suISyI`s&tEh>;lQ$Bl&*7qc+XZ5W3j%4RR+{z9*5N1d8w2i=3)WJZQL1%?ju5wTDDe8+Ts zzV-MacM%Fqf%Nr*Q-81p@0viNo5fvWQSXxDy<>uDu1A@*pCNtkaMOU| z*Od`cN^?ru+BVBE@3~ zH(`jX42&4Nu+0Fn6Cu6B>_^MGUkdzrUKE)U;`*L8)C#^m6L(_$?oEcE1h|o6!2b1M z2I5p&8ag|GqytK80O~GffU?&;C&F|VwaZC4%99#$S$$-rQ~5pay9-3z_=zp_rpgyV z2cHXe@f#>Y#)ToKHy(ITl>`myuV1aJCuK$zjrMKUHy@M<{D5>dcX>C*Lg?mCm;S5nkx7?TZ_io`e22uh!C>{tzFPz zgXa{H34XTvD2$T@WE}uoz4+lkfQbEYC_>pP=PFNYp%&G@_I#X3ou>x$jlleB?q<$+ z2QlP<20U%RwQ6DKWa^QHT!Hq_0s!f`^k9I)6orR%60Sqqtd(owZhsUf;-nMDim59sZ>k z5%mJH4B9PyzzCdL_`d9!5_S|30e9!NQhA zf-;IIf~lFA31!oGI!9qAve4P5^1P_OHn?)2-UddnL)GeZ;fpNt2^_KrW(%yU09g^gC?;$}9%2 z7b!;gAC~($khvGefmDq{RG6v-x_N>Ro_x;5vAC zE<1Ax0jXaGhR|At{Ira#q1$SmtWR)!yd2}^tjZJKTtC`tcvJ406Ns!a)m2h1@&*_q zjR*Mw)G1fp#0NE2IlV+Y-j3{{%Xg^x3yL=~gBQvw2BFQM~Um$o-z`|NEXaPoK zHv#sI3@O zgfjYWo?NUI+pK2AwlrLV&W@ss74}%_CL56(15%+eINK=Z8{m;#3^>mbtCxX(yRb1c zTYvX(0Y<7|JS%1hrC7?YS~07Ne?`lLp}o=+DKewvEVv5uIp7TX{8C_CBiQ(%Log@6 zqG-qG#94)M#V1Zjng5nd+^z59<=Wvk)xOBqBWESdBLHSOsB}>B5P~*^$e@D*rh6v0 z1K+AulIJj#X}`~SWM?S%`Oz!>M*kNW!IAJTBP=uD*Km5Twt~7Tuopb2L4>|LeXswk zyK4TWYUT5wlk$$pr@I658%w8$SF%7KF1P`-T7O?bVysa}5WuhSTZ16NEPf5+U=0S2 zy@RMoDv?jKgz+1AiiQOVizw`)tI)@G@3XfT01jqowhF)(cbB7=uM~D38h1<#|0Ne| zZa}wqyjs4u>NJ8v9dr5*MXkCvp{Ny?AqxZ);sCYHXC!3d@G5=T*-Tr}>A1lKBKVIyfXvxpU%8`xp4x1u2=4U zb(`=!R0x<5b^PqzXJibgc3?BY%T&V=y1xC^Mt8?jxj(shQk9uS(BH5XsU62aD z{(hp-lR-G2g^hi$0~)E$9l(lzfuk1uTXj9nNY`@MA;i6dzc738;jP22H`Vy!s22h@ z)1dQvBme>6`hc3d1_TY7aT}%CZ%`Fy&=%{e7Kd0H&J5zb`=r#)phRR3|4e}W2iHv? zuY=d-0O;JLK%q6B_frN0PjXaBOieqjJ#9Zpl!%9D;=W`_bi+WvKXb1$N4_#}q6b;p zfsiT;6gwON;}!4GkOEs%-@+;tzs>7HB~?c@2kwKU^uI|f1w+_${@}g*zFHD6HQ@^X zP~|fOI0@T=5zvr`NIOweezj4~bHyOv+vEneGHqLNP8*xLXvi&Jf7Nlfv3}%%N$&Y_ z2FU*wWoWj=^ZvA|e_JeTdk?3WxfT9zM3D2oJ(}C?1Z)B>MvZjSes+2rZ9aHN*s~Y43JJtxE8Hs+3TCE$uK*Z;vL!wNOEw_m(}Pu1`D1@wa(ZtqUJ!h_VumcVu{0R3|Vnij>AzKu2r)E(NZ1C-tO{O>KhT8Q5yV67}YJU_Yrco z=F4PzF;)+m!z-+ZKH7YLx9mKm078>F9hB{Ly z@)!iJwK*WY{CL0clJtNhrI~)erN$Fc(4Vwo4<~TDf-SFU^k>K2z7BqyOwZVSll* zKwlW(zdSE9nhjX3DN%x?k2N(uHDBC zg$}Agv*Aa&^(&4iMMma)$|~AUXXRvb_@gz;FIjpVxPQ`ma6Sakp(SvpjN*Iz0j~xQ z?i>Hkxb7itLeK}Mk=^N|@JkC+V_|x6)4In=wZ=*E|H6-njWG}0JA-cvuw8|V-rkY( zb)Ak})&$TSC=_hMD3c`fC!%7~Kee69ARGP(_mr3B+3&dfUKz^#!&eySL^p?be6Ofu zyZ3|x>TyvN3N%Q7v)JRQqIZ1o2H}+9?c9vT%>~k-)w@#`(&b@%G9W^ND}8=PfDFtQ z^}Jy3A|ODdwr`cL?O!T=Z5SA&9{t&Shm1I#+wl3o(RX;c{b z1_I2z`c;cDOC_CAqMhGgTVie9+8sUg<^P+Ri*vX@jH+ttuU@)8)w)q}&V>tghuSu8 zLeJ;rY#Ic0sA;Rdr1#E~IAX=-70G!=Hp_PcNHTm!S2)$K7rAI=Fhgx|)R3QkleE5E zwC-AW1QXX^yKi^bK5jQJjaERk!mLm*4tS;e>_E)Mpv+FwA2b9c)Ck!_fhLKh#g8tR zW@4e_tXR_dl-Jr~svE{Sf_T~ZRzWURU5&UK!sdR*AsV<0CZjpqRH}VoLi^Lv5&?iC znnOGLJ5TxCUl)lPknV1424~!#d~8MH!n(qEh-s-dFj+r;`#rA>51Kd_K5>Hb8)@Ul+umT=7H0EoRT9~4an$~Kp@s3L@~|& zvscLiMkn(3l8wj5Uvd;H&OM?E822e0rq$|wWkFf3E8>j3!3Io#9l)jgFneb(z@+-W z{9+zh)othMGM360$PH~65B?oYpv@j6NjdBPX19Kezr6Ft5Q?PK3sZ)GbT!Dq&P8)+ z0P-^Jlh+CBEgQ04+Wh-Ar3O*PJ^3{UG_|zHW|8*_Ck>d8JSD<SQ?Pi~^d z37-(=@`p#|nSN%kxjBOV@=WIPz8i7(KfB5No5whZ5N>e*I{k&J1k7^)8BsSTBzjU+ zsH3HkjEzIB7SWL$?OC}?ZP217Kx!43aV>RjIl&gK1)xCez<5*4Y4jgbg(PV6I?O^| z!}GU3d8?R$BbehdyOJOsVt-gI;4Cy}Vm(;nUM+r=QOIYxDZlxLFf2KyF7~+?)IAp< z({!}9=QdF2M!Ilv^t9{m=npyCDR#Bxwa)+4g=@Ysp>2i5S3lb^jA#gb3wY8jU}5k5 zS5g2;47!_uGbK5%5@+UQ^q7WTIRjD}I^4=*G1zJpO3~_#vyEW1N*O@Fpn+cC^ZfUJ zR0+@#%ESi4b6V*u6kYdq-K;QcDfRze`nbCOCYe9gLn2}@i6j7l!sWW1Q(92-E6|Ua zz=GDir|LU1aq89dGPL~IwD0P0%e3k^e_N^LeU+B{M9~ZsykJd&qbcml=!s%^-}Pmr zG8O179OPj^fBi2lf3MP;cJ31>F0wavc<6BTjd7NV-|`jQ-!)Vy!R%2K{|!iT!JPq^ zu-yd4X2sX>Bz~+%e)@ZZB)LO*Ywkfru(e0`sQ68uq-&_0untxhM~ZMDS%rX4b_WsK zb*8Slto6#T#aJsxHx--F((Fpft>N@{Z_q{u^^k$4&N^~o^hE2TZ3NmqI$%^*nVe*6 zcl9@$B~K#B#*fGGOw~t?x>Z}3nQ8CW+@$2rMky!tv6G#<(Zd8tScRDh%AS1f?dy=J zyY`}UJTst70?!+_cA~M>c9bdFu8h-kEhF=0_NVK}f~0ON`{aL$r`9@9{sguZ0v6v8lz@w9@_7NMPPh`xU__fw2XwTq=Kr7tc0W@pkc^pC;}l$DMd8}&1vRypFOw{kJP#b zn3WAXsO|KlzTrtPISW(NK%-uDoB#zK?eWcA1@%Z54)0{ntdHqV%eXkfU=@R2#f5qY zoce8}RTYRb@uPu~fM*@SO}lhNBx_C84yD$jIkvMdPz{cQNseRf4y9}zaZ z|936xAqH5-$K(z77_ikz)3m1&Os!)ua-OM4m`jhyO?g{s3VGq9h~ssz;T0fq!Ek0b zq+-Y>Q1w539aEJ?7isTY{FF87ZF!T##;?aONpL5sO7*xIHd9c0j!Ot84e!3a2@pn$ zS??s^y<k5u$q%RC^0QLMD|FNaKfRkKz{_i@n4j zucLf0b0Ka~GC<~Zc6YC)Ysf6+s(Z{hXlT5NRfiQyA>=@$!Dd8l9C`GOhvqAu%2F~) zHUyZhe*d3XDSRA|N}>HqEm1S=lzZp<(xzQs$r?i^wBAw=aU z6{zYQK0Z;6nm3@bpR5TJR(ss@`;;)Gj-tu>+S`f~N}L+f_2uqc2w#h!Y<5Ho93d#p(f4Bv0WRPc<)KPPqP_7X!ud?c)OCWFwl@ZX*6(|1TyFg<@Wokq zp(91y&)48GvxPB$`oIsrArv;WdI}4L?*|1hE1|*j$a=~xf1PWx77E{3y%$Ko@$+qd zG`yAmUK-#7I;esjv!7sNp(bRT@H&^ckbDIyLf~^iUs9@B_3oO(3uhYT|@AQ+(Qg)DJ0_%Hm;64JXdiY0b` zk$L+Q>FZOfqkoRBF!mH*r{jG60d+YSoF4u+8z99DwFAiH^|H5il`F}lM>pPMOgQ!I zngo0tSIc+PH_kTF5TGLDbYj3QXR!w&7U09jR-#l_Vb0YNat!W90EJ4==zbjxdYRQ( z)RSDCaCL}TP+n1WUg*yA4BL~X?wD<}BRf?Jh#K|gD~ztbNA;p$q5=pl+E|F$&iG!- z1L0b)TGnb-6(WnH_jb!&ZBkX-AaNJ|>YlH_50;oQSa--aHpuk1md)?`d zVec+9drEAg{Cn^o7V)yr98XgEkPD9K*WX;jxJdAxdf!!R0R8-jl;1$=i;4gg(Jxbl zbepwbT%ER&=3}_GjvkgqtgSfAm15qj(fi#dWSJFy9WsZ}V1!_757RPGdI7-lYVij2 zXOd?f^X{f{TFQNTzNeBKiaIGO+u16eM2ypE{FpXn7ML8fO9{+~Q;@a6$D=FKEpnfw zloSE6V1{n=`F+2IImDfA;AIuPL+)N3pBg_RT#~w!_0lY%MMchUH9{{7bq~=` z;SbIw1U}dKF;ZCb7y`=jN~#i41C&maA-q>E-((rMzu1t08LVs?cD!X{pe<3)4s^Yd zhzEF%jgplFlO5pWezg>83my3(_G4;rk#_BEyOa6d-J zS*KG;``ISTqQi4pALh0Oq^RxWcI^*swCm{zi+@g^&<>SX6G*ooq_y1gVfjWae~4x| z*+X#q)>P-^rVO%04MI;k+DCVh>?T5(3jrVtsIjayCiGcc5{-P&&E7$8$&4(8j4XWp z8Jp_QKPKIW&n#M6Nd-iVT(Vt~gIHZqxmm@3wU`R1sfBQ%@MH|AF)-k5#=x9jTn*6@ zo3fOtO@X>hwKunQZiHRw4MXS@7z4XfdG|- zcAOyUu;-@U=5pE7L%E9J5B%wGpAaoHi$63Roimc;^nGtVqWOmjuyuj{_tL1# zj|AYQeNp(aji#UdpX*%mHm}#{t_x_OEGgiyP$_b zhjRktX{{E$fzkphdjcwmk6EENzukK*yV}>P=06v(T0ObF6)f~P%~rU7^M$Zlt7gUr z(fVGSnsA|~k&5t0yR}}lv%&TIKfYDa9@#2YVloWXKv;NbxnGAwdK=>fXbgz%u*@W1 zj$Exf?ez@k?AegDoc!6hyWI&|V^m=M*U`feIHWu;pm_slX>w>bQ?Fv+hTUP7qw}Cx zA*Gf5J?oZ&LfLZGx?v{c7>pD8^}y16CTdMB)?J(yARu)O@x2mwi=m2Rz$z-Fy$SAXWLG1A(3_ep_XGd=}S*ON~5(_wU`Q7)U*Yr4~dXLv&nY4cJi@`zg5qOy~Ie`{YMcBhSzHx*!4)96%zPM3Izxv z+6I%U!pkik%QH)L<-;;>P)%WX^0qPXq<#3w3B6Jk^7Ow=-H&Pbc>z%Lky~FMQ*e|3 z$(2}qrNs0cO&$xHL#xzc_t7Zyxt_!v`Ef%tkuZJO@@0;ed;bGrTGJ0lvaHV001()IHIF2!db8c z&%y5d>p0H?pznT`mwwv%JoMh~6}nlVDmE3pkV!6(T!h)t@e;^uvW-3B;W*SHRKB*^It=QoCJ(Ny>0*4GRTWQ^(o|mQ-xpXut*od z+&t#Jf|UNFTqea4!<8%Fnj5nS;Z6$h=TI_3>M|k6{~&u^xdc6!D%JIjRGG?28}oFn z)nH9>dtk%oBl}b!VZ$HiQ>*y>>4-^{XhmBvNCI770po~im|Inf;=U4*L4tyiW@^Dn zL3Is!oztkc^-VDo!xxmrw?|H*tb>zpO-WxLdpdv8L9nUBjfTer1^)war4It6m_mJc zyuaT(%?82j+j{m5j}9D%g@G2d$C*25GnnBU0^bvk4L{T#vd{EvEgjI&JmuBD28q8r z&WgwG^$xECIW*9X=Evm=eS;agCK2+`PE_5qtm=b<;9TEl7O!{p6$yObayBx#hIz{) zKM#(my^>drxsIKeKH4nJ1px|vmNeR?H%jF7jI-x@=xzKq=PIgFx$#J~(h9Y%Ji7** zm%}&jI)1&G-Vu&Za7*E|V#qM7DZ|@3OIHG6vzxhRTC}$6Df}7^O<9qWQJal7hFr8^ z$hE{NMEsl^Q<9s9J=zruZ;YYQTZ5v`&wlXpw>Admh2S?etA}Pm!W#j34f`!D>$o~L zT1k{4!G_0KvCofzs{<0%by9$kOlOAN5;1R(rSlDq@jEeUq5qk9^**nanqJCiSolV( zOKt*Jn98`B(xqIsNVc?pF>8f|dZur#$|P%JwIa@244rUe0o7t40)OWQTQ@|d6cpv; zl@%0Z<$!>Ltc;X|Ea)LfN-D@oh{`HTN{UJ;O3EuKt4YhqDND=ADrqPy%S+2DOGqfo z%Ss}XBn28RKn_B6|N9gWFvTr?oT8Xdo7v>RoxR*qfXnnuReb*1j`yG?9HdY4}qS-=Zm0*c86f7e16(tL>z87l1jV12!;zPET) zsC0-n$t-Bwt5k5R;r~(fl~Gx3UE7Tvnjb8oDJG2pAPK= zOe+n#=Mf+k-#Gq^4!qU?SJi~L#A~VO48D2GF#~K!&x{}=iWWY1wvR_O_N*Bk8WedI z>7?p&@k$l;XDZ#!3n^#5ZKHj`oPS;}sboKT$AGj9qT(4N8!kZFJm7;l0B3$62KiEh z3Xx@xCzhl#8nEsER5E54{%Ty&U$b3Ak>il={ozDYvL}_|+AZ%Oc}ioaFB6uvOO#MY z|M^RWwTljS$LzlcOs);|!Xyn^mD{y;i0K!)%-3-?mB+38lxi{LrIDaE9{c->vRLU+tAQ&k#&_we;=-f zaO$4#)1q7TLKDH)dMDZjj_Zv*nXD~jKSl2TxO-iRyYV<^^4@mBg+c%KA5!7Bt3&`n z9-P|o2{`DT|D&6!BCVEPhlD&&_mWncw)3TlKGc!QOt*|op(%fI5UA^*wpASe94J!T z!;EhBq+aZC``aqI5J9E4c^E);OmV zND`iZYDpDu3eE|UV?TN8-eIz1BCFaHjWS$T<42uXGXdiQea0@)c|F3l0Hn zA#mkF0QkPkz^S*JiZd&9pi<<;$Fz|Eu1{X|Bs#?!p;J>t3bCkUF#{GGDK$#rHk4Pw z=h1&};5FI_Of0~~?6TdE;(KJ<5z&^!YL=pXZT!9dYnDSP$Fat-Ps`3X@!UxFwea=> zk<67r36=(POtd_}i4Qw~0I@~oP3VE>?ZO2v>yf8B0=}kCwrtnGgs~sKDJscbQ>s_E znd5lcw~gWmv1R?343p~bQCDre!7Yk}vS z0ld7GdixHgY*@yhXbgJgZbUS%P?}7d-8sQlU=(=>!pQTsmQsWl+K) zil_AuG^pSPwDqa){z8EHJ0|v84AvEJ8E4q`kyN>o4Hqllq?C$6?)ttm&J&L>$XrpY`?@L| zqqeCvI)LB)@?2A zN(k%n_*)eJp9C2#Yz7(n{^1EO^?P>x?8%&MXJK0c2hWw~_ii7F2ETKyNoV=JZgdc= zty+0yi#-A!Z-jN$Unb%2I}qgjr)BO)Kcj`k`;GQfoqOtuU0Jb*E(wG~QRq6hU+9S4 zo*^D8g!ytSyqZBAWFR;TiJ=;`m;G_mwGJKysB9*QbFWh_l|=eDvAi9!G{#^0=2_lu z9VU3sr^sA^NXMol1=^88Wn|p4;`qC9?sp z_XAJnyxDX!Y)oq$@9B51-R5#lXCQ?u=LR6d1^eU`A_D-8NeD797kyh+l&Q?3L*tZM zdxQMQ<6?kCuB2^fo)@bjkYzJAFF`Z@>0@*e2~hEhJoxUjRIvH?d-R(^Ml%pp$WfnK z=Y9CqV&$Wa50?CCkcCRAIeXjVeQU2r3hiqZ46ixc1nu@8xpM(lA{aISIlb6S-rir9 zHx^Qt(M_b)6zhy`vuo%E*KpUJVrT8d97e~4_>xNBZfW3hUvgdpIGYRw|&+J zd^PvoFF0bjKFa%tH{IV1%O1)zH`Td~eaWk;j*yrhG`e<-hKj`XgLo{Su|d`AJt|o8 zFH@y@y_O2roud1S3@ zY~$0(gDgK8h<5Hg)PmU3tZ_RCeF3(89DSt@v34Wn`rII5yf^<^WArGAm&CQ+r6P7V zW1F;4R36u~l_u-y!-|!?KoicBTNtq3Nb*|b!9@$p(x~MbSakc@ID{Y`tn1KYn*QcB zhhE;k_#659Y7-0n9DBUsgKdH)h6^$2U5^7~H<%4lUi+9jMj(S;;25uujAj+vrLFwkgqAiV5Dq@}3bMRY1h8?DU&fcy>)Lm}t94&?jFJDdqoF}ZOwjMri}{lj(lhFB zj2wFYs<%A|&iszrgKUGkw+c^wG$(J6bN3#3w{s{6Luegv*Cuzc*&;g%9s;k?Z6-3N zE_`ih1$!YWr0EpxCdo|LPyH-6XyNxRmXCIXDRZR9tlBH7%Hr&U(w``7FIZCC?9YgV zkwPB8@p)rl?p6gN+ed>t;zglc2DCAe2abzQkp;O+RYtGRe(%_gp?iyc;MY~KI{T!< zuk#~ta7AO4?O2k(Iy+J&H&@{yNv6k&{Vo!CtU`g!f!9(lB3S0n-D*zAjx9{~o9RIL z2$^c|q$Bm?WmyFZ61~OYYYth$fj(!OGVK~6!%6HJvITXI<(L=UP+A~_07}(m{&V8CoK}}70Zo#DR%OxU{4L7RQ z@#Q1NGnSzkep`dp5xA28lJME8g#$5oQZ-{?sH_BZHC>Y_amqK<-kPwd)ami(>-Q9q zeoHj?Oh!-^PU(xUA$q6>7ima^zg3l>PCT2Ar^qhAjIwPlus2n z-LV5_ZLhDT;xTSqE9F(>+Nr&5$;9CS`{n`!a{B?!ard!QZ7#L=vMc){)=MiXIvmd> zISBK=i%jwWWsaW&h&PQv`u$tc3-xD%>Bk-Uo6%l78UvzyDV#jkwyN~{dqIt{qBu{{ zx1K1cVBs&Aw2=}?9;>LPxk6wCg;rs8XYCeg!-fKZYUgFHu&06J4%xLBn`rvXnE@ol zAh(mZezQmOJ-RQ=Pi%E^ON2ce-&u7}-A03Vhj?FXl3yTR6Or(}=}ZcJrhxu@P41em zQt;k$bAm3@ zG24=S$V`8~D#}k=5!>>~z+`CeVZKV=iH9K5GfLBc1cpHvQ@BDGK$tPqkNNJFl)NNB z5{D48WoR7(hx&ii0o<2}voCn<*|UEu*F=Eg>#0Dk&!+Dk3VYA}u8+DJdr@ zCn_zcCv-S2aOR#@w^Ve~kwU9rU+|Fng+Jl>|)$7Yf;y<}YqemSpf+qey^TG-5zC0MdyO4mc}qm`Y&= zNL^jkd&tfO%<4|o3&sQTBhIPG>B7Q+OF})>qKY1Bp=ax(Dplm;wxL=>?}v(RAfDq9 z4Jx)XpUgCP?i|<=Y70r_Agz9BvV3FE+xp(6cb133PfPT!fBYPc=Ch3!l|uWmT17&Y zJoA`s4Anu`6G-AUxDtM7LEvnJPm+$!?XPUmGkkC<(gg?w!gjH<=UB&UUsxEeOh|q- zV)m&R7ORTaFJHIVm~+OR>`THTh1QV}voVdpD4i>K>MTd{=B;o*oCz~dNXIO|I||KF z8CAMTuiv6fdH(SUg*jq7XY9cjcB&~ z!56QI8ipE-ct@Uhag`$YyxW(t?15F<*Lg{~}l(%CGJgGK=PZ0J6J=IdLJpV1?)nP^NBwbmOp?fMVqGJdL7`W81A4txEI zq}p>uiHX1)Jd@dNi+5?qyNwn_xO5^mO>T{`2T%Cmkl;n2xhD zA3xfmjP9vpDjw`)zb1-jFEq17*L)D748W&by?P>Gv0y&*49vKRDeoB;O*p;|z(3J* zwK@JXe3X~EPRcVw|MZbQH*1KiBHfO86lxyOD}syY%Sx~-qOgJPw?$b=J{ik`9OGDRoeXT&?B?V4d;Av`iXXq^viT(5Q>IJ^^J zWoJ2;Wf?}WdEe(-AMvKJ{hIpkR7GRPdHD-9ji1b@=?##Y4{_lXYHjaKN{8;2?^RrR z){VegW0=7O0;DcAAWWcbC$IQ2krB5M5$%9~M@#Jn8&mUKici*2I{pn^8QS8`Hb&MK zJVaO05J|q%f?$6wdJ#I%JR{tC1w9K4<#2hG_3$X7KS7hD_Z_lxaR95uc`C z-CS0;xpmTqP+$%V!ddq!k_iSKK&T4`@Q>{KoW4{+%k_<{o+XteQJFSY;w8#M=8fVC z)Z*l7(dZU@f`5tYe|6R{Q~+vw2^?gITKG*=vh0ZFT7OP;sf}EBmYL6Xc=UDAq_tH1 z)+2n!vI=ap5crcF(5(&t*9q*3@SsHwl5+9~9r_Hr^9PPE<|_$JJWN^?bD*@Mlj5Rfs#$^cq@1B|%Fw$?aD3g-hV$E!+fX zUL4UkJ5^add}-iD7-Gd7DM*6?#>$sD>~8^~q3=p1dw?B|`n?bZs$zMbB$SLg{zc6u zo%rX*9y!{klF_ICH=A*fU3Nz(<|r$uFFbvrWB}kHqAznpjv`{~u5W{6;kfp|EN?zs+cN z!Fd%6KVN}+wu<|h9E-WBDjD1_A3nQ$iZdTdO8^pw!L9|yYvC4+h&C1`B%nb-B*0sN zwn+Sgx8yfBbBzQ#VuPJlQLi$GuBWVfDX08nXHltD>wZTd-T-`Y4PYkF?yd{#aA5To z_%&D%{bl1vaRI|(+G2ya4rojcY(!$%QSav>YchT(0cn@QO#I3{#Tf#)WN5jeCI z;M;p)^uVL^D{(a7S^8l@HG8|9hdG&InUOzR?~pK44ZZWH>YpDVZ>FD&b?lr!S6N_8 zMYajU`~wVy6k#hL1boqcS%*a*o`T$!?90#)5+(0!d{qd#O1$=>3D9&&}i$F+tIkyZYz?S zpbgS2rn-I)G|Si1@OQ-)wX=Q42M{UXr-u~)FCxUSDYO#Z2q27M7seTU^9#QgXlHH` ztmCj5_yxP&^?kFv!C9XlX4>!P-~D*aBqmjrhw2X~S{q7~JYoBgl0$f0RcrJH?78&6 zH!<;NhmW$yqayN`xMtM+OLFh}IgTpYN_S5 z*4Sc`99P|=Rp$d52yjL4;#2l^(c#{I@mCP4QZ6SNfuE1t*hy92CC(4_R5|f-vw-wZ z%x#u$)9KlRZj}3K=6x=^H(aO|S?d_oORjpAJ{}K;A0vY0Hfb-lsv+R%HlpckWXAoz zwsj^0X|mW{Ry8Myza+P;^~-y%4s28VnLL6-qcKs*N7t?v9C85I4?~(Uyi{V}I7RkIJ2?B?!~#z&`YU9o;}uNC^ZD zkdD^#*9PDZ;+;CP+r9r5VQ95f9o3^j#@(By`P%xMxg<4WAM&;T@#RXsjo>cQLbpqh zA-dKUIi)^{GQsh$y)o~8R;}0w|KWf5x!xQ-sL|0`w#xn?g!~8o^aRNYo2dKd2 z0DT`k3co;5LimP2nUMH?e;hAK)t40Q61t5y8xIeSC%lttR}G_QZbFpl_*bNKMA$B( z-iNnOF0`-;YUuaUlAOa0k@kapo;wQ#HL+Czi`{1_dkwozpQ4t-Q$vW&Cij)h`cTS| z5hOUkpTwGJcM36azIq%1_p%BZ`n|EXR9=e}=}{2;fUjE*Z$&&p$AZE9yY5=?8?DgA z52?BvsLTG~2ha)^05z1tKT3%(aBOA((_ik|OkVl@Eh1(jjs`{(0{!}S-p?^7C8GCl zUjJ@@hui_b6a=t7-HkVZTemC1=)F!Xh1gQNlRu37%18lD8o7v7g>eczm4DD`O>e06QfjTt$TyGT|<)jMRlV!F+ z>MPhdLBKW>LO6YuAp&*|*tpMQkkILlyxS;=TbY}g1G(W3Uz=BrJjf+u#_PAVjSohg zLK3eWuJ{;u#NRiK6I*h!Fx0b892%+sWCnN%R~i=_?snM2 z=RZvR2h6CdL#QhvVV&L6zs5m5icHA3n;|L)$GNnw(zj|ox6=Z`eV&Sq4gxoXVHlO5 z?kezo@vJzS83IJm^b$_)?V@g{Gp>1RzU|Y`o*wBX{PiO9b``G;e*`n#$iMMgo%K&T zZV0#;?*1uWOX|l6tCW``qDZ;Gb-!WsVHo`s?)ey+`?)&4W5f`h!OTcWWp#S_scy97 zTn`fS``k1}W}cPaFG%nJ5zmmy>C2U4{$|cg79e;ahGv85{HkedJ=rULpYpMBEYtR* zvaC*$bKQ16$r(H_54Q{wgvMy$23+WL_nx@G|?}(PDaOdN1jm z(Wi3nmRbBU#iRv|(^jTtn{~0#$MxH0xa4_A@UjHn<7R*BpuG#8XbdJ$KdN2c$(Sgg z?emp)c9$FL5PsBR7eJ!#dDG*uoU}EEFYgZulV$k&yTdft|BTgSkXCttU&u0dZ&~4; zS8Gjb71lCgTAiXu+GAKRB0d)rUF&pfdu3SZj^kR(@^9D%7tQ}OdcMbo4UO?%EGvs$ z6Vz8vDQy@?luc~Xd_8>ccHvTYp4sL`TY~w6ikq`?l=0duNFfy9`@{C<0F}S8(}a`P zo2j7}llC_pjLUkywP+7LzI%}b@(OZ*#~>>uE3GK2sG=w> zD<`9%rl=q`J+>bH4wo79Dx#^_;**)L(o*`h6vr=7Oi%^X5owzYEZGfQ1rYMbQP$ zY(%-*8Gy|RMsehKCF5dLn7nAjc?~FLrOsKDKQOZ0oK27wsB3)4&ru%8g^7vijAj5P zL-qHiW$I&LVB>ljVrt`{FrO&c_wX=n6KfW8gLt&`Sp3-P{`f(rhPUzzo)oPcGJtz8 z$pCUl^`CiQIrpj?g{!<`v`SWw zqT>XgJi0uXA9+5vY|yk(e~+L&b)b1UnZ@e5-zDN^9rR}NGI!|M$ca%fj;VMuhy%EHJ$S;wX34P7XDY zO-1pxO(U)o-xI2&J9g66qI_a=lKqhQrZ{|UFIyk3-bJ+kIf2ttdVR>Osz`b_D{`Mu zxos-BdkKAvD&&56=jQBFhJv^1Zuxq{aSX?zJUf_kDaEoy2^I?k7zmHRctdQfFFuN8 z2ozCLp9r$7gS39TPfRQC4LDV~Q<(0&WPVhPnOn&BRJs_AdWiB|W11;To7y|0QJjF% z^~!okHLRrNpF7)b8N&42c0-ZwquPvXnxXtur6f;%yWdV}k(EXtd9pD>jhN?=o?5IF zmcb%6BryO3D%fuU!1YfGBhnq$^$ced^O$OZv0gP@`dJGh+}9;*&6WGAUbZMBCr8OmwZf?Sp|6)B#@w zUy`@Ye`mFQl7xWz99H6YKmF8dKG83{gim=M*`RER6(_t|YQp}TS+XL;g6}IusAp)EtJIh#iK}I#r+s1i$erFb zeC@PKX{Ffm_(FgW2c?#=#T1}?S9b$A<6dDietVrp0458&J)v6mdoXtX*{8aQ41M-M z;-VjU{idn6zwJqvomrdQiuFLFpZ&6P3l|v|K=qxO4_E(khTwA&1dfQsL0$2F<_Xw& zeGAH32{W0N!%J@i9IVN6D4&Tb;r0LYq7$#zqZDm;+veiiU5K>RZvtlo`GTfl*B zy}r5Lfwln6<)_$XM$)^%13jl#&W{Q7-+yH#D90#2&rfE~>vNaZu}^-__>izdbv#|N zK*PeY!^vPImV- z=E@Usg9!Du#F|gE`dQmKq&)MO8zs?bNF87g8A$_aPJ-~^H!7Z>j0!n&Lg#n!`Gp(2 zPe&gg=$KB7#s=Okbur<&D9oPkrOn*8h$!GNVWr?#!w1R?@WhPxV#6&dVjjPFIovhj zNC8paJ$7^5tfMa!$u)4Yc$t*Oq5g#AH;@?~u~g3AtbINoGhZXu8D4_>1_>r%PP;uG z-QD{y36=(>>j;eG_j0rD+=?~kZKy8DEzx1y`E+onKV3BSmFI{3Yf3l!kA_L4as>2| z%h!-{z-9_SL@SVC`VU6}mDmGf=-vPek!b?^fvI{xfJG7GMfhltrpQY0^+%*l`@{sD z*@rqxT)FX|`CoKIfg#3^t`LONZ}V}RGt%qu6gJ2$Wm`pek$x*ps?(2nVna7j>okc| z_6f4TB^#Dow`&00}FvHsi%LCe{JUTq}S@0-hj~KfUI@ zbV^I~Bdkm__XydlVZgtKhv2eY?1n_YiXmXtwEt5swOI z(cG8(p^r@I#R?VK80GgEi$ARP8?aenHpiHM+AL4D!XJNRodg8W393FOg%J&9Gx z6a16~fE+Am-$n`3L+UE9T(HaJuS?G~ZH%^krNQRmGHBg9SC>(EM#-GeX?VA6<{5pz z?f?gu!NA>r=Zu3n0=?3d0q~Ows5yxta>1`A^;E<|JHq1YZ-P6&)%z3PP){Lp!P{xq zJTmzn*c@q0KNm28{P&D7`im8Sikl3g*N2{I51U6QyvNNync00!mW-VwmtIsqw#6mO zupCF@7J3^uy5kzbXNEs7of%kR{zStpD?GSEbk4x35G`!o9Yk#|N?(ts&_8VZ@YS-f z;Dk8*UjCYlf5bvWZ|DWKLiUTDAmqgMf@GhJ~wBA z@~f9tL~Lrpa>gCQJbicyQ%oC14_5;QYL-%8akdNz()A$DCyl2OmcSbu@z|dMC4?1v zm>MNTd$fVeSAz@QSfZwyNm;QsY#St$jRmy~GG&Pw_N~u2kRPU!STo*17p4NhJ zC@!LNc!89=%LF;@&%1euUdQ`psBEMYt+G91IHe|Cm-w)YzG_vU-p@Mm`=ePD1HSdB zdOT2q0x)Twi5TW3US>%#A;Cr zvs}M0oZbhINO)8Xx(i&@nDHQ9^U7!|@XzrwFw@6^4kHYRcAwJu-S=PK72;n_6Jl*F z(8|4&y3C&(XH}k)%02pms-W2aRL&Wp%WpvaKl%x9OSt8sRp*N08j~8k_348qZ;QJm zYSidniNujk(xVb+rJ|TL@R2_W1SAO0gc@^Vi^{&F<$n;zXZR9P9&sa7>*(ZLeDKlu+@obGlL>qFN zB7ik_0^W<{OPl-09}U34aq*X7F`$j0L9H`OPZ#%MUkP-p1{djwGkF$w9vt2I7~V-> z>nipu>%&&iZH&qcJ;T?O(x}iMwu?(wuB~4!f^JvDkx|Wbn5|?!YlT$NwCiPm%YZ3y zYE|tBgLR4oXVt>I)HqTk{Konp4BnMq8Z<;#s0h;Df#8SmJ~&xIS2P_l0GD!hd6>$e zqtIIE1;bDVQNmEPLY=4XW5zsF+fQx>GhQF0#VF_r;dY||muJ#P67I{v>84vx!3hVc zIei+aeBw^0=A0z-!C^v?h|T8I=}&xZL(iW2rezJ5vjbix3vfE}|MUrfZl`Mug;iL`>RhL^>$4xFd`rdA?yY55k+dyI69+A&qURA6 zpEzF0&Kv)8iMTjDb47w>#SSk&cs|amtHVac;58VIvAkut=55?pZH}KMIsCo{Jp}&B z(*&|tR^5An%h}#}NFd`xw@H8eV#{&(Qi^C(OUIWm;_+=-rwHVTU1f1QzYFd4DB|C0 z^#r&bB{1Rp??7|^7z7jaKn;T!&`y)8!AJaCOujuCz4PqTREgKRTNNLb`(ZGCj}VyK zUfLH^O2!v$`N%TqTvLIc5b@xFzQ54+Roz8~JrDEDK(*sw2F5xy(7m>0a~$o>@&Nu` zuVyRd$C9Ub(E&l84%wZ@o#&NH_P3qf(Nm-%&H0`--F6nZs_DV;1*q&F2@w{;=KL^8 z;_LkDsi{x8x=D)$2Gt`cOS|~(b>*ra_3y4*ncpY)5g8hv6rCm#CFGG!gt!sh!Z7C# z)}A_a0#_zvfO0|*>4HdywS(ExjnLQmjwBODrb2H-Zx#+EJmn9>&!jc>Hh?S4b+)nZMiBVGr_xi@9(qpxsKWEeU0s;ddG6d3^&P}Be-v?)P@fkMi%f? zq4B>?yvIR)y!-$uzjtxeHre0UZl94SLZ)}Rac#>?g4#Ac*reOI{TzjA_u@UD>4N7% z;S0oXZ!qn;x_3!o5tg&>p>418>HG>k^ibLx?wot3YZ`QfB$fmFazF$gq*aZqLjFl zjI6AfyriV0yo9(6phn0@Ny$hH%gM{g$;m3pDN2ioiOB+s2MI|Tz@z~GTnbLul#v3s z39O#^8?n&b*LU#>$r6w@3i&Q>HKtvEtAjIEme@!?Z`Q|&>*|UfOy-Ev{dH*H9wK%m z#FPM67|66_fdmL~j$IxaF@Zj-pL=$&iYOWR?Gw&nYENp@hJb_5Eax_vI2}`~i zR_?pX&pmYfBjf&^Dq4r?0fJTwrf`VJ!X&eQOlvV9JIT#70cv;_JajH=hWk+rCDG-Wek?dF()Z(%nf^g{F<3U#e`YkmzHhm{?qH3 z6miRsy(i8x6DERb36(oWo>{l{FF5FC)fq4`CAEXxbZ`|k6hY83qV}BwyB%03VJ=XZ zp-I`rTKz9a)m(17sP97yg7tOFiY$+`@*f-dGZHqRCtc4R++}7ZXb#!1VuO`plGw-{ z2=(4*`&lItr`8QDsar9-l%w2JB+Td;c~+0T#4Xg?3+v^i?kFujrQ5pi!KKRh4qNuQ zRMnmRp~X7;9`J2Iw}n@X_0MiU&SN*fr16 z?@cpFcj?X)q!?2E9pg_5!7YhKAUZHEypjw_-kgTdou5q=o0txd%GIi)2GK}}L+V!9 zF^r+k9*)sKjU<6A&nyPcBJ6k){A0e^lQ9N8 zG{zn2CKyzc9J=MiePpqC=M)VY$D0ryP9p9n!d@OmmB9#Js2qak%S7)O{2H6PC_Cq& zAX3rOEc#OTC{DY`Q>xf@X4wQ!{e$&TYr%CuXP^LDTWp|IA3OPLv-XTm%IY06c=00gnBH-Y#NA=!f`>fkM^ zjH_ym5vZq;lO#b)&JUYnz{o7W!LPxR@qU#@q@&B0>}Jyr8-( z^Yq1ae08NU5Pt@_k@lYsJN&2}h-O{D+Oe0LHZXQnzSH_-&1!VPlL}Yu_DBPI2)F@o zY1ewS9^q@)4f6kXkfFx*T%AIm>B)SBQq2?{i5Rz4vt8YcEmkK)N}PW7 zvtOH+89A`DN0bi>)G~*NOzWhssc|?qWQF)9zK3-+VkeC4~%}ruZcf z4`tdMJNN}WnX@8iqK$ONM6M4QN1JxMS&k|Gw+shHG*QBfrYPao*AIH>xyQvQGr9U9LYrQZ`AYLPxCP(W``e0PDf# z5WwsJg#+q(j6`J1CN8=!^J<+{SvSjWpJF}T#Ouu*ag=lg*4uhYQIC10FeK3K!MAUQ z6B!KY;bInMgaBlo8yBKBYf<)ie!pLv%ei;;+Ur00J^|gyHD7kHCQla{0yLt_a{;3U z@!h5Vwgy+PwHyV$e?@Hr#$By{dXj30*BC+$rEc7M$1p{-cNouqx14MEDW&)=a&{5K zsRyEeVE1$wQfR;2oFst1e@?fgQ+6-Gotz)?0`iIUqZ_=&)qlpQOlF@*@NbP~Fy#>` zITZaQf@>f|a{PY=UBEA)O$+!1L>ScfhQDUC*Qv-#G4DKkZu?*xgRKi=tp=Hfscg$-1h-JB4-8-A{>3m_FRl6@aT<$vbDC?|OM+!GZ%73u|bjwJDaHgtvGg1SMvD5YOvhbhcQ~|{?#;@pyZro0` zESmJ}KhN1`Z%VOl1lN!4qLZ7wd&WnQMza>^phqPGVj++b@m=J)SrSJFQyBx%LBO!A zL5|n+lCxgzFX8%9Sd62pm9bne)zNnSn+p)Smv}@-HzH=^UyP|76n5S4lIvAc?N>?> zTn>mMEVIqF9mnd zb#^>E`U_Z3|EQNK{|w-Ed9eM2jxgtyg;z(J9uFyuC~G{8n}F+nM71WY4gxlia60c0>Wbp?m-*1<)w7Ej z45LWtL1D&d=#2(?-X8VYl9Vn-T6zt{E6Rr#t*&C?u5%7 z41}kWd@>mT^1sU25W5CNsUcDC2ruz`I+)y>84g#xSJ?K)?PUii8I!Hy;x)58>5PX$ zNhPwH!!Z^0lhnp_QD5G=#~!ugUOYh~0@YWjul}>`4mgAoT*x3lO_*5VuKr@?-1}5b zgd!%((fcP!TkFiXY&+6%fr;8t9tH}(;P$uo+0O5$h_h#ajRag$3u30-7WK`KL!cSj zq>Fot47yY6LHh;ujU(l@51*v;RN}@map@151d>@x+(sSA9{eVGOQ_R#}_f0Z9n-7~EnnfFL0o(I$ub#G~aBL$0Gi z34AVnbvG(RAElFYa*Y#NY`@|(%f5e`gVxKekPTJ9G2i8SCZLJvEp!bMw*NpBbEApFwe5Hx=j_ zZxoEBfb<(~*Z=IRA%~$ux4$14vV6PS@Gkm#@-53>cS@zxWtBFJ3$Ke@wAYsTCeG#x zz|HB1J8Y*1=OOI@TXs+6Fbt?^WX{S*UX9OdQ7iMI%3DW+8&>;fHVI@Z+lkxnm_%J{ zL_Qm!hrnCQts63vKAHg21|J(@ocaV67h_rrDoy} zPX^}fGch=HfSJv6R3ZEgw*v&z;SuX z8#k$lf$CvoJ(qhavxrY!%jr{JOrE=O<+nBG4J*jEQyY-LJP+Ld-$252=EMfCMY&(d zVULkkTi=%m7;2%iU_4+<3+HG2w4N_`{mYHgi24w}U$m)=RragV!(u55)8IQJ2_fO~bqt?FtGTR#?+2shXAbE$7U4*L zU>~|jDY)MNQhh-4$<2e_e4vFazrH0XEaEQVa>d{FlB4Z*L&kPLUA;o?i~a?4+1AzJo7RQn@}4l5(cpSS`yv zvh%M#Iy)GAcfIl{JuDEHeEM+Gf5~(^B%}N@SV5Oo3}f&;RA1rp!a07~q0B78wr+*m z%-?vc>G`t3W5T)LFC1q~D!#RqTHHZ^$|lMM%QJ2P@FF^H)7{onWA=0@Y1F=f?Q$@lVFN$r$^b=@1k$3y=ag+l;G$avcRYQi><9oPsXvH8K920}~YrP~Mn=DF5bJRLybA;GamYCBg+$ex>S$^F z9Ps72NpBwh<&1fC7Z6~B4kIQgSz$PFyL7~xgyXPj6R#}znuGb#FF`L4&$+{2(HFby zii<2y_=pfRJdNVG{x3eJCB7%jNz7>O%8{YtOzGSO3tE z48$QXi>xO`x2rvN+f5zo7_n-0XcHr3LP*1WOC1HO7JySD%!1s<#e`HuAfb=N5tJFP zmaVV*@oG)450kOwPMYVr1(c4&{|@mR3y*X4!>_2I`ptWV;7@1^#q42}w4|ebE?su$byR*0)s!kKVr9lg4(Qxk*GV<}BO?B`;R;`PQ zME#F10fP}&ummyq`|8P8OesMj32{kr87UDlN${Vzq^vZsm;{Oq2?+@q3E&SQBM$#h zLRwlv3Iu5?XsD~otI5gB!`=`I57uDu1IuXORSZJa=#o0d;YPPSG{~E zH?OimZ_%OMlsEl@aGddcJ}~vHY=wlA4hcNTmt>$-Lg?kaUS2MThNFR(|NgGBytO|t zM3PSKm}b&a`EHpBz-sY7Bpx5Z}s0tkGdzTiU zRsHmbIq@ZJUUaxqcwatRBy!x%owDFAut zZ<5<_84@z+QAhAHUbK&RW4S~UkuGH|2Tlmt&5pbwb2C37b&G7jq@X3Yr$oHA3X~9M z2z~&pS^x>mE+DDVe~x`P@rQ}Y#!#KMg7!@6yH}g!W?D|HGg`l2rbh}ij>>gF2;L*$ zi(<6zMIyG(GgVCp0;!~RH>txKAb^HO{%e{{5h5F_4biqs&wY+gLW7 zhUbQG!Wr;Ktp|?E z->_b%yth9|>5Vx-p2RHy&wC3DA`A1s) zexe6~D33HdyA=stz3t;s)DJOn`M1-kt?p$IS7W-ToDT-h(_f{+HNZBf_%KciM-%}2 zLJtt0jLrIiK%MSa-}|;WURFINoJ#GQ%~bix^ zk;pQ@E@O=gRVMG=d!Mx|w9rs+XiC17DSXbmkg93xT@ZG<>r#erg~f9qZ46mjFoT&a za27BIBxHjI8SMv63GwOf&3L|2X*5q$gW@#{US%{Vin|q?HMn5+V|_eCM%bGJe^y|` zTL>HR!X6OdqyM-V zrp^G1wlzok=N0P~90a@e(CWKUo9@+F{&gUgba-RES8DxK;6!S3MvJpgT*EnFWD5{a zz`hJB_VB-HmmpK1jMNqxFig>3S?T!se+*WYwY_u~3JHDcBfSDTbo z(9sqOdCBRl*G~)>1mGRG1s?i?75A^oA_egH*rW}Mu9YAzXq`$v13%KMUY*@1nc}7vwtEJf#n^N)|*7kuqZNve30<@!8C56KJ~^Gwd%o^IcL8<60I8WYZ`EQ2h;2A(^3 z4!8_^7jEWsde;NtFjAQ2wOVVR>Ixc6HhqQ=tEH-&_9ArE0UBkJ?_D~Y@8R%`(o5T* zNMOQC0HXnxOZ;^f764cADI~R=s^8HVSY0H{(^ryPVpJ9M7)suMp^x%Vy z!B9G5)Lu`tS3C6mp_BTBjjf)eh(;n3_gRwrgFl*4eYV~#P~70=eA6u;k)H(#zA-~1K38;weTPH> zSm$`hi@b~|cs$|$v_q`*$m>ht2N_U{9E@a=POVNuPUSjpb}Ky z0b>2ym1|HxV0~E7L)K=M@hUpR8QErRsRhyVE-GZ4wj!p6N!Z6absViZ zSMt0@ipQru9%k^#xfkr^Yl#Gat&`Qd_PfvDaxp)PrFl7L&-v@4xx>%n%(V7>LaNfI z*o{=GB!Kwx8vx2jaBM8=KY9{?6meLflKs46Wxa#a7bFgXYs|;wiCm8>r52H?JmX`6 z>NS{`QQmyH2?8a}DZo=eMrAYaBgln7EB1v0Wl)$Vkh;Dvg^>?IdVEPO^1!?f0tetM^CWe&qHOO>j*sSdJ7wqQ@ z^D*80Q&FGn3~JQXDUChNQ0L9PF?cGn?r)IrEM9R<0hH@NA&mSQ$uR)(c~PS1Q^shj?0Im3VXgXD6kIqN_!{o}!`JCruSkzg_C z+Ot2qFK8N#EfCW-V3#=tvdr6MStQsVE3Fl*W&g+^uPgQ9_oen>E+Uz{JLJVSTjjeG zN>rJ6dB0rRB`TdkxZWo&cyJ#AWUUnrq@zxEO4tvydGk=U3%Wf>EVaqGO4n^cPUllc ztxo-5<~3F0bIqkBYW+XF;x29i0rqBLy2XN+WQlgjT~fkgPnFVUI?<8L0mMcUeo+Oi zJV9IiXG;Ym%s?07s1~Lu=>7FIMy%h2_1G^WHI3CQ^Er{*-2Ia$b~FQXc*qKA`Yy@h z>Q=TQnB!aHl=A6-CHMl^SUs!(`Z}29l(V0OhLNjJEafHo@`LVIvjCNH+bE{GbX|c~ zJDt+3o5Rc(P`MSFr((rkyS%mR*mSPdeU=L(&|-SXDg6Onr~ir#RU}susB3t=DQ>yL z0FAr9#^)kM##%D#9x3|4*D|&ha*=w65M2j9CLJ@c*`K%B-hXput*C8D!-vcP?+VY9 zmT~{;-4;bV1EDY-=w5UE_4)D;8yy8FA(hg;uRd7XNqwCf(O7{_s2s$jZYtGV%v&6z zR9F%3fj}1UHp*INEY0a9*@b(On1A&WIm=x{I4&WeBQUc? zioL8sG8a%Ad-*6s(F+a}tfMm>6Vz)df24kim0lPna?zaizH?Ctz?6&Y---};>>u~x zGg3zr(Cl)}wY;S+qd~z3_94<@1}<_CDS7|E5@DNomM7T&gL_PO+r9D)4V@hqgDCx8 zmvWXe83U^w5^b?o9mE1c)D}?cbntSH;KmCcJ@2VQf%l{l?CW#cVnds3{21;F*S;;! zQSnC_oni7T_chzrw$c@#IcOw$rj6L((V(bGie z_bvXObH?LPW3Iuc1y1Pkn0EEWU^WrjV}R8u=1q#VDV zvOlV>q3&QajUQXfmhDrhr)iBcbtfCpfIPKBC>uHu$iE?S2+I49P|(rwMh4ch%kmcN zlh^hIO@(Qe$HsfaKiVclt>gXOKkHGptp^B1{oI@Akl~hGN`bA=CsfXoS?av0Z#kON~A=tD* zwdPfp=@sMIlv$+`u#zfIRQXOq6?O4H-H=526ETCL<2t6d+w1$!J=~Qsf#O^EK4xU9 z*e5zgqbyX&AAs0+Z1}*v_HvnTq@Y1%=z(WG`N^^R$*LF%>(WX0rM;txYN($6< zx%wOXyRkbQaS79&Ro-R4zIw@PicEs?Oa(4$nj?QAd9x1?O=CpGlO&AT+q^aGp-NVF zoU}Vt4H0Z=Yk0FyG|ehjo7d~8+Go&;tfHJAjY1}X+;aV1^$mxg zH!OX-X_y!;SsO`!NREV{z&IsC8W};8PreTXB*6*v-B^XE`yOxB&^-N>T^;PE``kx4 zSIBjG^R>|a>66nTtvEOnk#2#=3MYySXlMbr&i|A*J>Jmvv9uhY!&EV6#Ck4z%pRS2 z_tG!f5jU4;Zl}m<{DsGdXw=}2;sg}X4yVhhOqZB?J_h&zwZ?gkILyap-QU{A+^4^x z#pa_%(Wd9jJ*UGn63W4C$T;ILo_4TwP%=Pi2URX0k>`Op4rHP2%$x#p_#kU#)@e2? z-@L75v$nr$10f%j%&lA+8lK(KR`pK3^`;da6(#O+oHPV(rc0mvlLMtdbWkEIJc*1< zN`KKJ6|qe~7*7fe^2|6T_6yI{hO8?K5f&$Ij)|QzE;s?f zy7XWf8FELuYqeX82nK>iLHxVS`N{liF9DS%W!VJb@Eo7lL6)}_t)h5h1d{HkIA515 z!zMADF65}WHqC_94o+cJYYYVtvWu+L&-U*j0JB&+bC_{Jq14%|SDiI%LFBfjc5Uyv z&JJohUQ$h*2l}>Fi@OSDE)??=%&FGE4)X~_?l53;2ZkhIU5|VO$-q>?*)__;@;RlO zY7!bc4$TQx}26^D4@y0YN)(QLTKS+u`vBlIDJ`%@lkFg>wRw@O@TWen$vd92jw6r zF9WWg3qZ6y(#*SQWu*q4Ks*_x)5eT}I>bC@MrVT=CwZiqK!h7Dh1yVDKgjq|!_%zS z!veZOz@`gn5^bPmW-I_)*e-R>;F)%)KrZbjpFk90f}L+)LYxV938Amdw0Stu4E_Ai zFFmEFDz6R1KQ>Pu&Fwuki}{a{l6!gVJX`~dI}fS^-eswBzr%~Y4gS@{7KAyX$6U-+ zMXue{d|;3p{5q0I=J+2PcUeK($Qz_h3dmsqyrMIhOu2F@g94Xee4ZV#65W$?&84lZ z-xV7_ibOVj{QHhEFJZD``t=(_5<=AjAyST8|GMlTf2@`-tmu&Z9jNi$KO&h( zOqo5GU?MF3;j*;%XxLliFY;gc>pww1(D+$6Vp@hN8CQOR=5KS_!G^g9I3Y;)pOwDr zkfJ8kQeRM6Y`^Z9joTcCk$OV!FD4~kLDZ$(RO8d{tb~Q#&p!Ts@&p^3?||$1^R?!2 zEjJM445|$x(i0Pby5_Q8P%e+>e1%xbp!DHww@(TgpQ;;lgVEHVQ769ezd3@|tg!C8 z!T!5P=7@T8>+d_uK4RYR694JE&C@O#l>AS3zaZ-$t_LqpnlF*q2V!Y5s6oW2_umS& zd&l*O_I;URaKoatmgaR}{J>fBX=Rt~?s#w9eJk;lZ1b|31L@7QD54*~2w%V97l)7{ z10e-q$CkE*l;xg<<6Z}j#opuw1&T#tZ|Z(}oA!=N%m49dkCVS;$S(e54a+!XE7$tg zo~F__V(EfTnp%8nz=8A7V_5-z&~q?60Q?&nU_*riRX$!IZr;@?Zf#94pqQDgcL$k} zHqSK?v_GzylXkZ_1U&Ol!-`d_QesBHz`+&!7|Bb#ILAf<92^>korit;|p@VMb;yFJ?8#jdHsMI)H$Iue)J4;X?D%U zOT>NmyK$sS1dag)l_<_}!;fa-P;&*FeXTD1%@AO&05MU`Oc!-!9oi=qy9Vo5Y6ftY{rOl3y5 zx47fWJ^Htdn!ShapQ(dzyYL&67CGwCt&8^WH5pbEj<3c3AnQ?v;%7#fbIrMKb=xyVlr#(5osyM>B;Z{Sjm&qzRAWZOo zc5>zjGh8ab{Zt&*kCFUAXnRLU$Ng)sfU@+bxKVVun%z{V4bJZye-(yV(8`~dQep$g zNw{c@f-L?={`9yA!~k?Zrpy|u>W*Wq3#7RqkPvnx1tM|~ZWg%KQaWSE^VobdUGQKxA(;T{W|ZwK1K;nd zRONSVoNGr_XBJCo1KyXhPj$Jx!G!y>A(C2mFvo!@M@c95V3u`qhAFwa{y#MeZSzF~ zAAuxZ8~N)pa@y{eNt%U!Eb?!B{d=b?c|wu}a7R1j2tRtxMJ$4+?WDo9hJ|F=hJ=gvQmO(4?j>Aka{@Q<{^g`}cCL#r{6a3ANuAh?Ji7n|bj4k39A3BX&iD`8jb9By|hV z2hc*04+B`N9)Q~mFxNyqaofwQ9(LcRn0U9g7pL!B`SgH+L%y3Q;O&o3QQ^s@LBEf% zVI^7zGrAqH^agkUGV}ptXoNwX%QM)8EWC4bkMybeozwT_?pdMgZ5Us z{wV4BlNMXo5C6;r_oo|kmWW}2PbO=u`<%)Oue|pq+5v=4{ZQaaKKXWhqEv-WvsYp& z!;-R~aQM`wngHnLMMH(6Y!4#R!VI=mhV}bdLB`W6I3{Q0kN?l5k_qr&$srn_0)v>? zrtx3+$=d?fMAQYGWR)w~uJlSXsaR5+L)?>LvBulaA3+B!z`7bBXGHk3|L2bN6{WMa z0MS_`qv(j6tt(jFne1psmLpy`v@8EuI?ik;6X#Q?9&WWzK&Zu+9zTb`Y{9+Di^PzJYbdP~3K=`il{_VbB1E)E2V{fDqj=E_Y6iD_;9`wp_p z?w|(F`@HlD4$cW?UM;*;mnM!pvGGzi#lT<&@v zY=m^>902SaBB8+k5h*@p2PW$Zr<49SxUSW<7hcpdy#HEnIe&gzMa`U$eet~fRVgmv z`DgG8f&Kek7*4`y{@%ksdvxx9ogKv4(0EZ&y{%_U ze|{D49Ho>en?L$SofMjdpayauT?$K>7KGGr4}W_Bt&&223jUz;Yu8n$vb_z<_VRci z)+7EjBJsZNPn(i~==~G-?JC}6R|EG{nFfSE_yl}(OHkqXUpXT6qjc5)FMDf`b50d? z>2FpE-&ixMdc&qGpqO*3ln;yt`IN^^@rm4~=vEcRUOyvqfSoVcy1frt<*8jsoP$lICDvl(4lsPWjPI0@)hY zV*tV|l2HOj*MPSD0tI3+=@^YmdlVqs=ICkkr08>t)HlPjq728H9(_SSp$>ibKQt+S zJZ9hEycb6z2tbnm{<}%^<`Dx{V zMC(K)i0Z`;%#A!$xYE3eIRa<#u*jBjEBpc6jm-lSKLzQ9YVV=fSZLIJBd%}?j%FjT zN-9(p$BH}`mo!D(eqBsSx8-o6nv;HQ?6YcmO5>|MZNs;bP ztdWHHI7uRgt*+61z5?u6Ifk4W2by?||2Pr#Fz|2*L6Cq~jR*Iiic3gJNh(N706;-h zNc4e-xReO+vy?V=1w5+t0q$I#2#2<)?J^%y?F+mYwVNpTw z?Z*Fea)4bV0C2VnXrW4uj=G0hvZ<1CiN^G=60jMnDAs0Qgx*)KHms1Spy*=`*#0HH z*o6kx8Sst*WznSo)X$F@HY{-Q$lpMW&P?k^{`z3BwqiSH+w$8g>a*m~cT$Tkwy~X8 zIm_dm9Gj508zXX+;Jtoj0Ui(%$G#9$xfaNc4rv}tSh@=L6n|+=wR7uRr*%W&YTGHp z4^;?z8HzVWyg4o2o+gC5?68$b0M}+**j>Ph{191KiD`q#bVf=DW6&p7nCP#1jQum) z1p-4%f8$^I(OdsaG8KdFB|eqNz4_;JTj0R?D^ec+yrL} zcm3m~O#ncwbO9uq2QBPd1iGPVC$|3iz$Ar1NSrd9s9k~4e$l=2?6_)QAA6#j=mlMH zS1^`!1;AB7krwHB-S*i1k_)iMhk`c34P`Z&H)mce;(ay5T1>{vD)|1i{x3G-1ehv3U4^L#fR8rA0d-=SC-xpH*$N7cYZPPsIQTa_ z&p681)g$zFw8CAy%(nTxfQeqn>$qpn((wG@y$>^{FTDoReZ}y_;g6|1ER3q_Dj)d= zRDK5kcJBSABa-5^HX7H?F(ixoc#-&S-sbF}KVt&5T>;qP(Y^r24gb%0;SA*aNl#Jb ziWP|o7k@r@iIrF4x|RZc=ij$rj+4{3+esgRBys>3zN;8Un9T?Ln0#4* zZq!tE+pwcZd&y-VJD!!Udi%LiuP^uMrO**l2a zT>w%`{hO?RxX&{-&-I5KwVN@Xz0T)n;;S1A70K@~i&dKyvsJ2IfT1c2{Cl%wT!AfT zAQr(5++=9b*HR&ZF>|}$^)_8virD4`t^Dsw7;7o~(?socUA=Wgr|8lYJs_MufT4lH zBo4jwYQ>b^KLM~4HbmxWl{=;TsPu1Ie4xp3xzWc_xe+aysrK`xl76eXq?Xm^wJtZT zAQ-L|x}V!rLE$C_OQvd=fk5FElvPJ>W5)NHA@nB3ECai&*b#+F9D7@@e*WkCN4gsH z>94bKQqz(w3Q-wl(cZ)`!B8NwZ3N~)@O`yXihyNT<`?!n<~q%`t`6sW@{vZBJlNWKGgTB(pieL^~ex#ZF$q@Lu3`&`yMxcT9o*9+|cYsVAWBexQ+ zyMG@%9p^5#44s;={rZlW`RtK(iF<={W(;4hC~=CXv??`{g;{ZL{O}4NIms&+A&32Z zy>X8IP5<3!DtGfM&E=Gc*~ccBu0pX@L8akv7C|KfA* zD)<^5XeDOn@JNb@>&mCGkK@fL8rnV8Y5fCm8l2K)Oz%3+_C8DE?20fON75iKbg#eL zXlA}t&S4#y)55=DtHLyG%F7Qfu~_SN?4vhtwJ_bqSAJ!)5OOdm@Z)pIw;ySfmDnc8 zQwPqA0g0Y4e=%T%5dqK$pl&8?77sAzwbOD|8vJDyo&7ZT4{MTr_xaC+j@F*}&sL(p zF>=?q@YvCj1xFN)>i>|cD7ITLMPb#Bw@%$&gp-WrMP+Ide#IQGF-dME?NVEmFWm)u zNwT1X_-5>>yd?_!Hy99i=}(9NWCx6-F3n?iO0Plb#eVq;?tJzWICXxh;UD``rdXL` zg^n&{tj=nu=5{FyON)%{u4gggA{RkDN$|5dk)NDYwzaeL?L+ z3I`xa&0bSfhfHVkMVilkFlrxdvp*92{GB&TgY0S9uYQh1DaiPDPELuIX7(v*=+b(_ zT|z{B5H^Sk1xtE}69E=fq}FiODb8@)c4QC+jRw?<8>!NATT_Jp$y#%5$obf?wTMcX z&9_0lWpu)uyBJ4br%jB+5>?d4Lj~Gm0X<{6p@2ROzEq2}LKLlZLlc0_!Mk@D^2pg9Unh-3Ww$QW2 zZ3UNw+D?reKJVt#-m zYYdfxs7z2KS%bjwPegNA^pKmI{aaON&(51lI%YSB0-a1L77cmz%fjA9jf- zNZUJ0nQ$OM8xWNX3|TI_n%(V$XvhE(A9AjZs6n?h73wGr%T@e+SKHRSKRoie3)>s1 zU&KxGG!y6NCiq}zocXGA)phROPgp22yorGev>8TzW$5Xjbe$t?j4hM@%#GA8SfxxG z($gkd(lBnl(3;c?@N8gs)$pk3dxZGpDl+N?pE#y$BSYg8ul)WcO&+kriBTYi4P!+S zxrh3U4_T(=ca-c~@ME|!xG>GlX?>+KO4xW_tI1?K89j2b38#SCNzX2lAPIPP!)gb> z90H-WC&W--l4p&}{!w8Ym${_6rO>a@KPR;xh-Dj7(>BLqKYR|0F7Mm#i8{-Hkem~I zWabPk#YB=mcp+arXp;7*?xzEv$AMxS&(K(%UsbQ03cD*a|BtWkvLqi_n3>VmO0g{% z6DGwmk>GD8>xa^f3^!2_R0v=2&(@%YJBUEqBWG>7~i-2tqLvm}jy>SkWRbK00DlZJ28c^PtkmvH=Jm z6b?x5-^=L$jBJ83&s`A;oH0~5c%p6T$a}23npD;QS{coc@sLkW!HPqzBRbDCDZ_J9 z?fNw^I$t}zxXnsew&C<{k4!5AY0dx+ZGr0$i;4ZF)O%Ks{f!cJyVCM_>#r|9J+m^{ zV@@&q>UlUo`))!Yeo$d~$G^@RF%R~tC&lMxAgh7_R!}?u^HA#)Nc<#GN#vV%`rE@v za<;ehdiS`n$=}3Nk7;7w6PIFM%BVYZ$cgES4|#)|N_|AMB6IDI82Kzl`GXIFjsA;&}*J017;EW;M_I zBpdMypk^v6cFw;I4MWf9DOA+ni}%td#n<^fCzmr8pMS9;{MBGS!MW=5r4|Ip^z0U! z17Pe9832z7{UwE5PK1OVUu8%7dp}y`&}T}#L1Ab&hrK-Jy%m=Vg}^KZz&)O)f;w*uOuwpp@FVtT5Z_%Hh1q(FQ0m#2y}N6OYW3RzhVE3Je>g$W zfB&qb0QjWyX*eR{X?gmCU}Xti&-*iNXq9>IHnE2pZx2 zDVrSafDu$t_+PDn&AtJ5`En})iu{%aWLEs{kihm^1VFNP%e3kJ^z025%ES80_*)I3 zp4frOO&TOP0Zga=W5~mebuP5?00H4=CL9$1nt!S|GuW<`?;u^;n$Kr^#B?VMbue>g z@?oq`;1l%+m$GtBfNdaIe8|2WyuA(=+L^2;)UXR37gvfby(>sSJEycMTpO24ZQB@N z#6P=RtoO1Y`Ys{^eCJ3`xI4L`ijNfo<`e-$Cfu1JB<$H3^I)kup{wuF%GZ2v8sk)iwPQt7mc*+Jv}-pWkaHQ=REA)_onKr{upl z(X)JF<*-BmBmZC+dsSM2wCBt?42T89l?!Ku4O-ww@YBa9J8V!^{D72~UpsEwW$wPn zd?|VKjHI9M$||BBMjbBkhg;y4O?P-qTm~d%0M&)CtfUz12Jzs&s4%dDcpxby0m3?A zZwN6_aWM(e2NKdCPXmx2q@_Wq#sg6aQNWCl2k)H+RevNNdRG(BZoxI<-bow#^(;#$ z`S7HKXSJ`PsZhT77O`!*O3lmum7TABGx6%p<{ll_5BoF?Ra3{Sll}A;4sYU_l#gTSr6xW0^7BVYn!&$0woab z;QWg;q0MdFDuDq^_!j|>)EDroehHRqA9QEf-{IF*6f9dXeDrK0CUt;(y+F|;9fPxA z+Dc>Qb2BLC)q;Mcrx2qA4 zneB|hO1fQ0W6jazA@VjFN&lCgb=jrbuH<{7b~` zm^aZBn~R6iU!8>_noWJFHJ*>@BS4h`JYGtTCUBcG;jX9jfg-X_S?)G%V{*FH>e$zl}-gUA<`j;0Z=L!=okSYKCuSQK(ax7tx9F zuQ~dz-`gSoiW)*=`fl}zQjU>t$KvvuQZ@IFWJ^t?&>n7EOW%Pt7eFKf+rGlb$I&?^ z+jBI)WcPFmsDE#0t2K5W#8e+)85HibWb=Lt?c-yrU^n;RhpcPYF<>??azh}a%jUNM zfgE&P4p3*nPucyqANuw~mfkd1>`Q5^7KPO1Sq-N~*;N$r;-^@$IftvaHd7Sb&vpfz z2bcpQ7x?b-9^CR#1ujg0%&+Hjk&!V;68Atu2g9`ZB+ZEMtlaZsF(VDpA4*%ziLjO1 zh05dUl8@+3U{*0GPF5${kgVP_q0kyaL{<*uLb*KR#MjWaDx7Uy_l}Rp`(B1fq7duL zlB77^Pe%P4p09c>3VvWCx%j~N_Ul1&gW5w)KV0NI7zCovL*g&y4)fS0nvBbqpPEl~ zsbG5LFn`_(5Uw(nct|8QnjAqc%qMpfqP7E%&`A)Sg-Ng!09H;BRzf$RopDW4wX~Xc zg<1zWqSt0ydG7|py%#s1E5tvhN-(YY066LJ!=Hcy^zz|(9B};3f}leTC^^3Oj^dr$ zky-5PuNUP7Y@T^0u24b6U zai1p&3uo|bpH8)Nc{jbrYMgZ?I#+&7gntXY9;qIQtPs5Ue7^1VY_&(MIoUm4&p!%wRdxPK=GqUmX| zPRk8gQRRf;%*oR3%N*W`zSC%7R~-BD(BLsD@}8;?RBPMf_{uB)3^|7Z+x1it&>$tT zs3HX29hXj1Cl=aWdr+uYu?8{(3S-r6yUzWYXF?#OKH>ah4yub0fN4K zn#>^ZoJc9id5@uU6Me&e_HehpExy0gd6$5su;aueUl83Neo*#-Va;14>-UN(kh7$H zb;yep0~)6`{lZlws&W6rGEJM-&H8kuPdjrzlk$IvN9^}hA1pVAC|Ks#BVCojmC*_7 z=wTA*g|M(ZY~WEBE~Ah4N4aLSoHLyAyowFV-C%rMR@A=2QD&LuC&U#^=vxhn7+dfo zM^XY<3b=1vHn#GJEH!3C=W>_eo15ruDls{-Hd#)*>L+q**Jj@ z3etVbV~~dL3K=*#Ety7xaG}oJ=M$SaPw+)Gsw6YH)|b?ht?lx8hO1wjxDNMLPW?HJ z3nxS}=-?4CiZ%?P=ZY<0DSBnv$+f za6P%k9!;vEhzgTorUkh{FctEQ+!Cp}21rd=ywjrz`2rzMrMLC&gg!Ywr*j;d4GAN# z>`WdU~T zW*kZF2$tZ0BzT(n7aQuwLj+EvdV5%Imk={cu^h@1pf}GLkfUS8l0{^Z{VnEISVN02 zdKOLOld>TUfsgoJ1Dt)YG*5f;3KA%PZ$hjFZ{8*{^!ElWizivW`8b*!a^Lcy|DK-N z5Kn2I0pn2Zv7a!$N+be4tbu?;3fy+c5*3+t>2C;$dnb51Gb&G+nWL!p>pbRn7>*Pf zPP3&8lAyukNQc_T$dhg1W*S5fs@)5#8rR`6U_Ym&PPc}VCqg5Pj=Cy=1k~O zGhtR6Nq8i}x-WHFerAT_;!X_Pwc~F!4P&yUSU3yj1TZfw(h8k+=t^pQ;`EJ-1RT{1 zV@`A)U83#Pl+03wKTb5>A5v$vakZ(`%Tc#sy|^bkfgSzQAm=8$lOqpt05Xl#fhvLi z4+~nb$AW%oe_tc3)9rh=Za|u#GX$WutSe!GGWezFPF9=8aST=9N$n zo=O32qzEu#>5KK&zVo`2sG&50%DO+yd0OEx(XKN1v0;kLb8U_vBMU`jgBZ{`d<4P5 zP9*KV@#TGRACORbI*Gg?Vr8&V_BbP=?J*^Oaii=H^<(b?p^a zu3J2@sF%gL(v1DT@HV((ELow-iRxI#15XvYmfss`Wm?)NnI(~YT)xM9U%tI>X=A_k z-6lZ&Kjju^H~%-yx(2B=q(WwVRX$^^h6A{YJY85ZQ|%c0Hg;8#`wNnUhM$+Ql=biC z;?9FV-D8->(&z{YgTNi0AU1Sc0OD3^$zLLMDY;W(s(gbd;d4`?^LWUZK%gF*6kX!= zjpb`64lVu?GnXvya#{=bxx{tb*vmds8rUdNK$Qi+88ydVvxAlGuPp1n$e*?&-f<@F zi2F0H9qq?VTh1AbXG5lPN>}|^18s0KaFarUlq+`l@-PfB!5n4K=Jix(yE@1&Z^eJy z(+OqgXGTxEtqqfLnsz~L`~BDEMoh@I!2>I%y4*(-S?IJ{$6{fDFz7)2-$c46Ix5YZ zID>T5MU9a!n6a@Owjbg4Bow9Smaip>lvbOeh?0R{FA+GS&Hd+n4$GeC5P`)(oIT3- z%Pbu&J4OTP+#GcG@%A!qu4P3t_Wkt=olJeHf~&{xfJB0vi5d2qrB<$*JR}~42K76O z?j#x>-tnk=QoMdxDs6m{Z(J7nU3$Dl;4K#6=+BhYG)X#wNM3yhN^!Vcj%+}T)o#@5 zG$=HIk-h1#fg1|A%%TfsjC}s|+jO$T25sfX-ZZQViEtSdthcA17^h{3dhmvx?VER; zPzK ze6)!^ZT!3aZmyp@sYZ^!{u<9`K)(ZDqnX8Q+}&^$*e0AIS&0BX+4+_TbbwS1I+ni@ zYLxP1qY~8>SB!8!bPmNS4^~hRj|Yg|*jdI~oaw;@G(thJ8R4+Fvz*KGxWkT!l?eEQ zdCihQtp-Yg(FBU926%I8k9}E8{h-C*q2~p{1*+t6v$WhWovQ<%`ePHY1q0R@O)Dov zA5mD=psd$D8*%&Z8F*G*+om*i+0I@h`i&6kRSrhJe<&T^rfGMq7KhoOeY6?>6v?ZM zw1Q2=k-kVG!?P&xLAE2n*h4SUPGs>eXCOf_WFx#_gri!ONNH8WOHA}{qevNE9tEq7 z<=_t#xS;W{3WO8JU`ac`Zk_?_3oOXZ*JyySyI-}Q;Tl~o0fV~Houc2RFUAJQH@5QI z9{LSXq^Tp@_Q-m{&MVUsxPgWs7ZY?y*3&4+dD-J|IVz>Iz4=OoBHrQ`{{o&uRX< z+nsUbOf;z15cA;CMV6DHxdS&afY)sA4G=N&0qkjVHY>~K^zf%&hK0;)t32z0N!ud& zeeK|qCd;5DOd6wkO&Tr}gWDnfL z_9la>O7H#3P$c^6=CJ!{(B9%vndG^^HIp)`olcyi(N(ut`APk9#g|xc1J=>-U@UzD zWA4&5#!zMiC5sCUTKiC`u0Prv^Thy-!7ZegKENQT~hcP8oDOm_IW1992hRKrubDA^&Qpw4cLc~Iow!CD$*a@>_B+{+pP z-FNb#lkq+5O(+&gY4XpPEX-9MUN_;YJ$y71z-;({a`Pxz0Yt>ZTWSXMvrKS53u|-1 zkLr655jc=u&*8c1ba<|jxHNwMS{TQ{?o+p&_8+w`>~{o*B!VW0hz+>;{zrCzA%;t^ zffT$(5v}fvOA3pMib+Tbivjrr>_jOGUV-DJ@B@G}h>8GKgRrCoU_Z!!h)z*q30P(! z2~ss=#DO`4h{OYN3GhpU9udTX%pjpTkqcp33Ub)Q>#oiYNjhI{#aXF?a#lF+>C@k1 z56$D*7l|lR<@@ORQ+wX>Y_%rt-b3nV>x0FwxEz)MHX&H(y(O+aRo8o$Ole zFU;V>Nsd4cr>3dVamvPKM*YXAaEAR!Fp>T;pDhHX^BFOFpx^6S z*8azxm=u0_+Ia%?U%b{{IN7+n(0$Q<#*`KFi*mr50%4k?n$B68(%gWv$Kxc#)wfovzZLi>gIFskPQTA@qsZD3{r2wAhjgI z%#Ikk?`+C-yiUToQ#h4F{zkfj%Hoex zXmP>6Ud{xOKGXlqg+v>VVSP{ei1RoWRh8cDkaZ|~{3 zw8(<1Zcub|+o3?twZWe4HQR#WFI_aMG?==5%kn%7?sllIT=VYH{%OhF!)xF6@Fg~LeR5wWj$r@#;4|&ol57c= z5&@*n5{RH+8WmVMSEB7_nP||_YTasy0oM$du^^q2I*zA!!8z;mzwcj!+naNbi#3j? z`>O_j73SnoxsjOR(`>wr zib?Q~;-+LB^v3%2m%F%9{8Dc{49*m!`yxC?)buz%=gD|LhajVm{#ke zTCwLYRX?Y!Tq;rO(mqH#R@T4%%Rc*bxxBfCl-9X~rf45CzxClDeTd`(q#O=VxZyNn zxRV7MK}VE8z-BGmejijGx&JMSB|K3gz?>@{crQ=f)j9~aYk^fTI-s(E-^9!q}(%9!1 z`Ahh$DE@y>R|?HQRJxlOxbWfbLG%Y08C{1+8zP>5Sa^V|k&;pTFP87Qi(T$fSj9mQ z!!yAG2epc)k95@T{|%1jPNaZ`BzQi+Nc4YEkuZ*t3Q{iX71Qhzo(_$76)jxLki@9a zG5zhtvtRh3`Y}h<&$*XcCqC{TG7PxzP#KU5e}T-gGbG*aoQ(={NvloNxBujO zx0x+CT$OZ4@Eg=2OZvmRMqtJg~2ADY&2SOp+ zY#MnjMH|;lI-1fW9We1)T-MG)ucZs~D*V}H*K(gC*uX=N2p`;~LV{kG^6#r%5yS#b zav?e;Z#pn}8u=PA^D@fpU?WU^(YpvLCEw1hThV-V+by307-rdm17YGp7^s>ykkWAk z?EU=u8yXZK7H3+qU;7kCOXZt`WqQzw_T<~dJGO(AHLBN_CML)nk#D$8*UuVKLft%mUWU4DR zAdtJ7r6)rRzw@PwGO9|BWCW$zGK) zb~_+FL-3N=slDe6i>_ch8Z_uH4+`YtG?y}D@h^m&TIG)P;}#|i%Ifc;c+s-$+)j+H z_@APNIxf94>;V@5$@GIEKOnpV_h5mdVJ)2kr9Y44?)M4LErX=L=J4?D4j%T*S1v^g7>((8$2F9 z8d&OjNz$B>MD&ma6WR7o{Fmm41ZNRYdORj{UvXu=x^$b9Tku^%=x?*3EJYsP$ac4H z**^o{x%_(b0(e@TKZ8qM;5X7>>vwhb0Gt!#8j@DF)H@JSbf{=PdA^&Fc!T}E!x7qU zw*E&ni`w~wfH`9bStVEKgGfB2>n2P`c>r7%s6Z}6RC-AwW!x=C&L|yy3DY4hPqBO+ z{^9MELMF7${dQif_3DQ=5k&BuIl$l<$d`#M&=&(jU|UOZ)Oa_@<*zO20^uOO56cNd z$77zY@iL|kPjJj>3k>&ljbk5wixGa!`C6Si5Vaj%FG*lPaT!l2GW`8z0&Fg~vXpYK ziJI#sI)5a#Wp)1B<6P6{rNMlxL#OVo&1ZcZm_#l?zL!qcu-}O%vfqWj0BDwn!=OM4 zHxjl*L&3LeI;lOq(j*?kotsZyC_oYBi}`-vH`^DZ#S)+~Hl!O(Ur9UY%s3$F=B9mdoTnRStE$ z(gS_s1@S%bgX@AF1Nn!L25sBe!R~Xpd*Bj1nIGOZN63>x*bjS5czcbODy!7kW2DFI zIh-Ex-o1}ywn;@Gba=l|CjGr}ZQXU?*r@=P(ILCtX|p4MuKh2IIPfg$2x%Yz&!Q{_ z`nq3b#{cl>b931iKT_DDF_xeEhB|y*+F9j$^#IKutU_d>^O-tw=XIdKz*8m!Imh@H zX}ETf&;4w*&6{8R@IxiHTijazqOwS2zjmLq=I@gy5OTTzknb=P06W2M2B$x3VEZ$( z;7}dM-MUo5&yjjI`-T}mE0tdzs7tDm$V8N$b+vD9hs`11>M@wTKH&#XMvx5wsF`1R zL*lOW|sc|3Z4QGGG7>j%z%) zdW8*FFKHt{;%ql8BC-j{%a4{kDm6XG8^~h-jpLeR5HMS$5*n>af9wtzq2pj;!0?yC?EF=?DsL)TV zWf?KI9*&zQo~VT*R^DPfwMwLy6nnzD)wi_qNxD>)(dNb2JrnRH@WLZ3F5@q@d@g+2 z#UXlh=#Qs;wEc?a-7*cHysvLxTW)OQm9ZyRS8WMclgHi|Kkz3__YTlz7o2Y>Pt?OJ!-`bx##-~`)xk^ zLU^;`ImXPEYUvk%wk=K#bWXfTecJN47e5ezc@rJC3M3Nk7 zaSm+_&gj-BaEs+-WtlL(u#1eqsJ)$Jb3i8(^x|MmXGVrQHQ<1+H9NoW=D(M zk#5yVC)yRAp&Z5)E)fPY@ajS7J0q$nF9}jEB;{3PfS>||TmZR*gfs}c0Erh0GLlka zG5~mx0Jf9zvZ8XL5;BSk!V&<85C!l9aGsO_V%p3Y2&63_kzu!GG(2&NY{;9F+6&#{ z*GZ?f&yU@cG2_<95AkYmDN4T^`U#?VNnbV@TbbuoO)1f0o<>p~p6)q2`lA4JONboA4Qa;?%X+^^K6O`#+sr!K2Gal%0F@ zeseDT;63id;aM(wYm$F-oCbSicM> z8*iI5N3iD4t%pX-)jXdaKbkj2fy-<>IiS8na+2V~GnyExTxWn*M>V+fL-E^Y@Mmvd5%6jRZN)T%bwA0IsQ-9c-Noxv=yRmaB@~z3RY9IL8Ho?Ee zxzWUGE4<$Hbt9`_WoiDWyx!f3;}i_hZ|A!lDe??9HqtR^;!B z_`Z*C{p57BM`)p(hn#-LBveFzYlsT=9CIEv7zxzCS=e2EmS;d^86fv$)d;ukR!ejx zElsia=wV@tGlu>BU3SV+rHN)<-#-Xhw$~k-rEd!|T zf2R1k;5q=g7HjslxVs#4ET~QgL20}Mf8}{-z!Rn zspXKaQU!S#TwgTuWOGlOhKaEq!dOrk1SvWx&D^%giZ)330X?2A=rxlcl@P+s2? z^VqdW@*Ao=K^h)%05AmRc#Z!TH9P<SC(&L&UMA5VsV%qWXjDA z+0cpIS(+&l!tx&GBJx<;;zl69K|X={W-~902_n~*CA8WG1(r`!Ck)3nY$<{H0SB+EFV-2O}ebwe&s(%s*2QdqydVJ36&WKOCe zHz-t^HMq@(x9Z&=E-9Y_4sIoAQQ&$WDk#?jR7-#i1UNjvI*#KMjO!ph()*axJ3=vH zCz0O^4>uXu0~}pee||7oKu&Awz4BO(H48`VxYu zt}~49#{0Y_LO*DZKCJDJ7sn@dDPu7RO)twe~%gELbq`&}*HB^oxX zuRoq*+6#$-FA|9l1gXejo$K(fAsk-oav)ZhCHs)FzW5KOYaUa5z`LMmPxgCKIhHpJ z)3zoVV2n(@1o7dHe=}?8Oc9&5A~PDXIxgkHj6A^0Y?a~9{)GE z1>v>dQT4=+RVC#Iopw*fCpGTew0zF3TtU9}FQff&tk;`wKZYL{FOc-sry5V=gJm92 zul?NhN}l_}6PE#mMK(V0w-P1Kx~E*96WPevRC_Bl2z$xs)hlHrofYXYOiuBnB%+s@8?6_5%E_nff<_!CBC0t$KIk;;;}y37~#2I$&me9 z4TDx(_k}2nV0x3{*CncWZ=>by$8~0;5J;i#&K9y z3`heTn!?OcHJYW_-f;THe6z1@;PVGHEg#10gS9C0pYpZ@|pfH&c-9WGq|i z@<(d*RPDh~;uoKWTB z7sNU4tug-ft(m#Tt>ZG?EHZy3yQQ7`3?kZl_?Bjj%v9}nkSYxroCjlRW?BI3ut24nh`@v8hCZ*B zftRjM9*J|Sm0hWVBd@*}$&)6n-TNf!f9Ri;)^DfRh?{th1i4jRLEsfKn-~VUL2IIX z4az#Hvf9|{LFN6Sb~mHDy_$)zX*!|pwYps@rs%eA`cjxGenFlC`Xx%Q1Y!`7EJ9c; z2pH)8%uwap->uU1`KfM$6Eq{w(8^ui;=QX9yOg*VueVdOJov3 z#Z|sDT#|!u!cUlxp64e{V!t=GZlfu-#>UlB`Ms?AcI3;0^}E+p<2vltb!XmWieG?n zFlerZ#sScA3G>4rAde6qgrJkJT0IT@c4S}f8-CaBQT%WR`}wX1RSbGh|3lVL&&bau zy?gmnfWTn_K0wtKe1&`PXFy{Rj>(^r*)7Mh1X{=;Y0%g?*_ z%J)_G*m%5uLZXr+f*ihv#CSttP}UW8*4g`sj|%+&xHtY6zPR>fT$LkorGdxM7B*Er z7^weWRbLra#rD2Ebf>hGq?9P#Al==qfHWu_5{iTJRVbQ5na?%rmiS_Amx@L-q*Nr_X%E4Wy0gzh2<<0QF z0p8zARq`4n^T^2KUh0os)_J#n1~dI6(THCebUJzAiK%0!iDzN4;+2ZpVsSeeHZ5L8 zqzJ=0`G8N)HFB-02- zFT-hw9^8YbGmrp>Q)vW=>n`MH3U>Fc84TG6$%YLVrQ7k$wnN+#9?s5cKSbt5DW9H; z?UiU{*NzjC9NjD!GXB<*f!JG(Ut~Jm#`o}xz<7MC_$ew3433|Z(yo5FhFa{p^dL$h zPQoc~c~JH$v76n=hDob|@n)PJ4{=qr}@lv zN)gZVdF8rSdh%S+O?q#qxUjn$C=c++67e*nz^%JD&Ir%HK7FE99uUrRTqqzzxTLM> zhZlxoMN59+o>z@vu--i~Laor}rCE(?+R`j+Ji&!hpEN|mK1D>L21lJ$lgNfnFSHF&>+9_jf|b5q9jZ0Ae{c* z6Pr&>)2Z0j8UY6uMhR}eOuo8kr;IN!yuR@pG5RN*g8mcLV(6GafROAfv9JmG6P-@| z$S@f*47&!0c9KloY4r%78W6s*|KaK(gabzkFh2pVt_UPxaL{Et4mOwt5vQLfNd>Ib zt=!jq_sWoDwenu0ea06}RaA5nL+ul8tk+r#T5oO!QXuMHO;3u^-+-bBC|z)%uq}js zdSO5lf3CaHzJBN&J*WNty2ACeSGJURfos38rM*}p27=~+~(V5w^o&C5o{3Gegyk*si*XZ5(wakb=in~2Eon%~XO<^H2`|X-2@X7?9 zvVU2!ffrarq0m#*&^^=ZURx0_3mnW%J+z*S7-+NZ$StDd{{E}qY@6(F_>nmG!u2+_|ChVgz3>pYuikrRhbQY!09_$ zx{a>$>nB8GUN3L}2ob~?Av4eg`pYi=ZHWhaWf*QZJPOKb<>f0^w#bTI5!&~s+I|%k zj34<{BTv8l%kzeZ`;0te3519?<|OE(gHu!DeO5d;dbOcrCkW!stPwVw*$k6x8i2igRsP)xG5lclo^K7g!dTo{#NBB}pN3{z*WhV1v70Eo+NysH8XfAcraj zT!W@E_3wXlM)6xVg)aIMVh=6Z-hW;mvAa)Xop#M>d*0!N42}>0#DYZ-TLiG;f}7L{ zk_eE)bxc@0S!7vz=$&1|hF+S3x)iIfUq|vze0JFtJsw=?%Zc~)l|B)vs$v|r=gLbP z{{bD~<^!?~K?6Q-+?nMB2nJcuP>_>VRF=C9AP*990O0`pTu4aENJ;_c3q@I=>mV*E zAu22`CMhEVFb}t-Ma3kM9yNZt+xY!AX`xIh9BDYHgz58*|lSSxip+vO{< zT{9V%d%?!$$|l1{`|Dx{ZgMa+6-+yoOPA0*bKpk zK;M1wN+j@?ifl!={Z22RT&#~G$O*_SJivhcCxLNsPC1(ZnA(Mgt)1o1te=|-6i?D> zdoPoSD{xmaO8ri59g**|&1HSlrrGzC0P(Q!Caj>Lj_-Hm0ilRY6q$%zgXibi2v z#0@CpBq1ut#w@U;_cUYLe%V(p9jqIIH(vbVqF`F|cTKeq50Tjn!@WpU7&DtL0$l77 z-s1b;%pn3&1r!Ml-;Sei?xW+pRTNA@4cb%*al{9u?fXlwH}Y(DQm(Ig*o}G0VYV2% zHq1MzfV6uC+y|$!XO;M0^kgG0n4{n>Eqj(2*t~JvStt1OTqC&-T@({Fd~UZmmcHQe zxi<5cY&qeY`4=`@ju83?KY>;z3Az*%&j#R5Y)r>#+&6RmFlOZ0PeA|`R zBPa_X1p3$#e*h62$rKTOa3db%HJumVEn@66X_6$$6%>*xGY{05-wFS6vHMxmziW?&BPG?lMcj5p(>M znHIAzZ`pWnJ)bBZFh)&bATI>>^bqPqp2^qb8>%S+nT=| zK+8#CTNaScdfJS7?KUcW_*enu#mL6u8B0)esVsgl1$klTm$q9USg+vPR(!)0!<0Db zNvjUuc~GLHL6W!aN7Tdr$lqgt7VS0`yqy8hhy~E@U_Ln9_68RN4D`=gNJ*-cZ#XOB z_xU|L(UaU4O4o5It6CInEdy!Bog)>3>8LwA(G)+T!;@fup#JBB8F+Ce5%9S&LhTGz z+0$#L+IFYk@{Ur@5G?X)doFbq{*Y2T_Vs>F#*D(mD372~fH4}faSvYm*`f)fBRGHZ zC)=v0Sm#G;+zau^Ihr}Qe?Hc%cJpA4MW47_<{!)&8V=#aLDL#Dm zgTpVIoE1`6bgtzTwD_1`wp~U~`&F#Dg{9>s;A&UtIfm?UYg7193VJZDqFjiu-q7K8aOETX2vEYZhV zTUx5Qg@~sHm@mLyPtP5YlwqVPz@ODILByAhDur$N?UKcx^aR?96L?&P!Y_W3te^Ft zY_VxJJ+QrbV#y0c4B)pug+NfjBwj6`5ZSt8i%=KB<5+NF2I4Jni^Pz|Fg`<#6V@#LRngUck|_Ef}TOXI;&)E6P6~1 zHZC55yLL08iuI)Xa-Z1Ku*Rkkv&+Uo#?dXey6lu~B$^WNL`Q)+ASKi8o*X|t|2;!R zgWU|~#(vEE=Buo4A2W&=m-szY;CdPriU}txu~W1#+5#RKXIr`HK0*iY{0830rtVNr zUcR6h#u5FL=QO4P$7&Y4t=`57PLAk`3-+Bm0P(&UwcAdbz1@rRZBec-)#5QvMFtX6D1Y`Lj?LK#(P*1j1}c{dx(4S=3M+ zluq-BFKvQ$J?fD>+f|SJcUsa{J@;P5YzLZfz2f;HyIcOpIdXsN3vqusUk1lJ(6Rvs zhh}2<9WZu;v3r3zFJxe+$~UD&{T^ce5~SlK$=ePEpI3jIaAp&ISJ|UxKjtqhRjc%) z8oNH}+8u?4Vu=He;8|h^M2iAZ%z;;D1iAxSJG(k1_uTbgVhQ4{>#-^1;EDN~)O=)3 zZq=f;8(XsW(%dr7yM<(2@QMPem>g`=0Q2=zP&=|(qWcd`VxnkWV1o-cH8<<~kO%%SzxU_v z!&_#!WU`a1aTa=c=b5so^wHo#cQgoCmK}ir1t<5p5Co5@eSZX*a-38J+QeoG)}7R* z9}bu5e_!u$b7zVof#}o0LOqh;Y}x4;JE>6RkD+99map`NI6L01GYRTP1;+yaxLfFK;6FfhPR4cr+=ZlB!dS>_h{^K znb!~V(#-X$W_Ple{ee?Aim6KSaJPm80RZ3+$h+1+;R3wSVFU{=Cn0Ra?&D6c@-4tx z%66O7b@XbKjU8`|eg@T!^q&t&n^(Jq2*f4w*;KUK>?EJdzCLVh4?fQmr)?DZS8u8DIi?r)-_7#i3JK^WME8cBge zEKLl^ZxZTkdy{(Vakp=jpTD@yh1B~7E zuUT$w8asj8WW$%2Wbn=)yuwpSXtrB#HfAWP%U~MtRc`(3x4D+bCTvZ?Hb0^<+n<69 zha_N|G#K>vcR%?6{KQ4~7qb|zX~RlUg?@!LABC7ym)ENTjLuw)l7mQTQw2488^mWgvh;Z9lzQ64ig;>F%KSK81rT_T5qPa#88wFV~)JYY~rqvMaDn zmQVk+k*)unt6{j@Fe((gRclc5eANx3@p@piolK7ZV$0iO`&hK)KRM2_V%6x-McR4D zVc)gH=AFhZM0Z+x41ELw>Ih$g9N#DX;S@Mh)lH23>{NCx^kyx+ zV`r-h09z4rFyNpug$hvw2v-SkB#M=JKh!=jt{r3@M>AyD4sT5Uj{Zx=Q-1kUI*JpZ z2c*D3N2rD=Q5C5A&z(dO>f8X1ZtB$w`K5=QFKF$+@;I# ziD^2BSA2{KZ>ZQEQTKV9w9#+D!`E)nL(>dqkj7gqRO&a?P z{ldKwMfE@|2IERLe5pHZ2ZqoHV)>2+0XS!fDv&V~ml)TPyYa!2 z-SdE-$^-9rN~@(12~{=P_2pLH%6~u-u!qa3(L;w;Zd_ZD(6o0>Q$klYZ?kz3O5T>1Rgwkx2074AkO3Z= zfLtL101tACG8#%Mx0Pj8rQ}o;WR!uZB#?YiQk0fgQUW>;QnyvLm1K3Z;Y_EIIzC|D zsQh1YDvz=R7)ebr8rB%YFJ|gg6Z?XEN;c(F*oB;Kd|J14Be0G|d-I~giogto0D}Jj zAV#uu>^M&T8^r=fxCtsWF<$YlABUN9-_^)f-AukI&WJ|1)9u!!=;g+jg8=)JvH&EV-W zta?oQ&DNl4z4#zT(_TL5oqydUhQ*t$7z5xG;Q$Zf5TrXnNTvcfLV*jeE(&y#qr3S9 z&&lT+H-~}|NpR^)xw5A9h{o}7=WU+ybYB)}T!4xBs_^r7g`d;h%k3Gtr*2kp}S8p8G=@5q>-b4)sJeS4@KT9~uBLyu$ zj0Z}7&zJmLCra)o>WcIfxJI(}9eF*5Nah(uxcdb7_)u9K&l$@&?s!M$!g5d2;*m+G z-XFL9!Rl`Rn3@@e5l;;XxPO#XygkkqZr9wJ+)tCwOImwxx5L|RTUQ`^S5>5mU7)&A zm+v~L5WzXq_@xurw!k?fQuEX=3zr7?BEDMi(mM0iVGYw${n3M(Si_K>L$q z`Osy>_I1%ne@o!H9eyy_B|u2WHei0X1ZdMEA`-}*bV#7-@^x8O>DifO^3OP|S4>16 z7IJKj5_foFo#!27SvkHo8dS)11>+P^@CV{RpY=bWb8iv!^C>EHpRJg=(Ee7|!8v#7 zb(QWpSJrozinB+*)iuNmTb~Us*I;bK)BXD3g`7gnLN7M|ikto!3cO7KUZ%_Z)m!OH z40ClNMrcY|Q*pc(do3ab*}Llz-y7$#G~1gZJWgr`DUZ>!sliAnn|gp4tOYO_11n01 z#09Q3cP}&Fpa0&x>mVNRx>n&_+xr=gsO*`4%33b_EAh4V>>|yZSffBt5&VRq9TW92 zaD4pbd&XlyZ|XqNwtlg|G24?KgHDYLQEE zm{LLB)A`(jdZ@)tc`IaK% z6C0Li?wPCVQ8CE4?A*1NybbkpETCD!+bIr4c_4U(FyjGG1@HkPL zmS)Ed!;g~h8eIGwPhOTZZ^&Q>IT!iz=&mC_Vl`sQa|3_k`#bEGZXb0t}9emab1Vn0qdOsCBg@(2na7{ zIUv1&2UUDt5U=favnbFKTz4fm;q2f}b&PfUdcAk|<^Go-x!V`9H2RzsMlc8oHbn;N zDF4wk!EXTdFJr1Nje1E%<#356eu@I`8x|!%;aL)R(Hd*tH{O~WwVlCyh4pO~s=vG_O(btT)=<3_s& zDPb)rK>p`a3kawE1tDB);vg76aVJ?{sT|{oJ`Q?plivNKIE7>5mzOow?4>U0Hb0mn z#jRm7RawKd|fe#7nJ6Sgz424pmhQ2A8ysJh%VisF?(25H#=U7=MdG z0ODKYw}--&9|nW&J-&J4Yk64>8wkuYOZe4HjgtbT_BgL@C z20js}s_x$sQQG@yoIQ%(-h1YLO(ti{t?(3}S!V#Cww?ltU4dj`m?l4Ses1TnaY`+4 zNVfCO%)@O6(sJ-QvSbM|d#|SYj14zv_mgL&kCW09RHB9Hv$fkyepR!Y!>%dLeuv^v zC@#=*=Y~2f>b_i^>Wx+us;V(eOZsr>Q~hXP(>B){N*P1Q1csX(#dG_APD z4r8BCB~7P%lSe?R`OKHKYj;aX5^l7>1jleF7YMr4Q(Ktx3{NW;lP||;N9PmZHw=hM zZ9V%P$w*a6!>KW^=HC3RiTb{4p>UKUaSb@OdjTeje63MMo1tX9mI1N>-n!`e z$_(2WHqCtUVW+s5u(O(~5>N(q+H$tZ<1E(n2oE9EEBQ?9Sq9LuV~ zoJKMSGah~};}el(Ey?STq1h)C-ByfAL}gzFQQyzw=36S|SlpRvJQNIyZ1stIIr>Ti zSIr*GyFd_YG$5(iqRE1jywih2LWnpQ8qv6mYr@PDS@}%Iv+r5dJwKE71@U0l?^6fC zE+LJ&5lV!7DR*}f_wgk`IeSa!EdndMb+7~BEJZ@Ow>AGTM&qKdK4sK1@~L2>etPpK zUH0R=#FF1M{9;m1{Wu;-F^%mkqNzbZQ#(Rv z?N?jjvV>LuvtNI)$NxtbZ{DI%v=gJk{|0(r1W1qO+}e_-Lcbz z(v>@XnBBsG45xl9z}N`B2Lzm+0=hel4IQ32MCxzd?0KDUzEjQ@u;R{1+q1Cv=;s5j zXS9qp)moT}m3Z&Y(2`5No`_ z(|vj4p0rMRx^`vH^nG8P#9%>_+2NyWX^Seonc8Be;^;Ii@N>A40*|5*-21og7Y=Zy z=Hl+N7p*AeXxr9PYil6EVM<3dvE&n;}Noa@ex$gQ}4lo}HFky^GmQ2W;(%-8wG zvFSXD8_5541xqd$4dhvu?0BodLFgAk-}ECdIyz9n)4uht{`#Ci@Ct*Us{{ep*j7qf z(a}xGq4nO~@Yxz)lbO_UwXYuyTuxEooOg%~!7YW0%sAdOD&x*xGH7=#mts|OG_q^v z$_rw-WF2L^qa|TB7H@|Vz5Bljxqhh&@l+ansYPz6@44p#1*$*rxG{WvztzkkFnt1s zpPZ&fU;>XF!ng$Uis0jiv;FE#9Ay`AX*cG?qhqZsOSz>tk2ix{xp{%}i$Bd|OPDUg z_&t{BAJMgC?PDqytiIg7r{!5GKICtB<<>hHOE3JDI^`yI7U=@v&9#HW)%(29V^AN7 z<^n+ocwtAzz|=njOan3G~`Q93eDf0^KCkSh~ur zlXyg{bp3s>Ha?RyZ!q2-i&ciyf$;sbO_r`!Rj(la*85G@h(Dy{A>U3M$lruZVV*+Z z#o5*eR4{2S?#R0;IycWRn2F9uV8~M&M(IfRB&T)deQDdPRSo<4jO=7>?4ex^2^WMJ zjbHRAq_22eJPVlZL6gN5J8WW4%|#L=RB zR@>Gl>CAwhL_nY&(Qjf!$~?grm7y%$~Q zN8_SkDDQXE%ZGfzf}v#w@la!n|L4G%9dZ>`DfRni86j_x_-l*XTd%%gakS>1))?b0 zZ$Dgy!^|=UJr}7*pO+Q7(51jD87cylTOgbDH{Osz0gGTxM_0md_J~=}utihUru!*= z>wO~Lpig#$^QU)flXSP4&V7Hb$Od$x2bY}Le;e_!5)R+7k6)+WIXxrE0C;)`Kk12sL z``65`E`9=Gv*XHKw!OYlBs4jj%snNy(bz3}cI%EBI~In%x3>R1e6p>ojfXbnt|@gy z_DyNK9BGygq=VPk=JE2vOTFjy{nf2pG{9U48J4(@RQ1^j zypT=CfW8uch1}FzjT$mL*B#!Am}$BEl*buQ^goI)s{gj2qwxOR#B^{7b89thI9GGf z;^g+A9l;3Itr_aN8`z+aYHzOxK{7>fa{<|Apaq{-?*tx8Yl5DEH28O0K}r%xG)PG) zNK4+nEd_)eg4v+Q~! zT(GLbk})|=A=m!1L|^;C>3aX3G@e8Zu_jLKmc`|pk^XC8z3h#9F{dWCb55e@beeC< z5&X6_EhAR@{@8&cT^4Nt;3qX-{W}eTR=0FDlv{un%D)<2XWyp&ty#*FDEZ2qoRHu2 zXMd6XUY}^o8wL-GI%}oqSF@u`E(fz)z{4lR_zjTwh&|eF2wL?0P^YxmdNRIe{;i6- z8wFPa$g3L(ZPN?wCzspS&r7(HnK-pyRz;sh&0ngb;|9Ye4ve@%8V&Au9HGM6w;4ZP z5$#U81)ee5a4W>nDRsyGKHSC&`(3Y27<^n3tSP8t@bWnq0?q@Fz5fI^tS4b3&sI&h{>QK|%slc1V^D(@>ZFim){ zb*{Cxws!ZO)zos=OTUN%B3m74SHgQp6mMYE*gt8JwUE0gG7K1@nO{}E`|IG=o(f8}OV7!pUvLQsv{hq@Y39OlW1*Ha+yU56U?yUt`(=-~odJACW~Mvea!DBoY( zN7D{_fhyBcq|_@GN76#3=1h{NY%`YoB>ZW&ZLwj+C%&Up#akHS?ppXhF2e#aBI@!6 z=esHIrpaFduIn&C@>~JoKp{}9BG-RL_IudpWfU&9VVz1Nah%(u`@a-d3R>J(MvoI) zF;5^HT>~QWTVFud$elS zOI_3K+dQ~^`d;!F&+xb2?i}S%^w~`X)O>2|eUFLQ#Bk;WP~dRc7vzo#=0ZQWWqO>e z1V|ZvJn{2==J_P=>!&_ujX!fXM&Bq6SWlVyR2rm~CH#bd@D{uYVtIuCcLau2% zK%^&BP{~&=qY2uU!mCz46;jT-ef#i>EaT_XTr`7nVn}}3_E*!HmG49jLcp&YKFVNW z3~{8kj`TueJRHPOeY>vRxT=tr`H;E$!2D>mz4(;Ceq*Uj*iJ%W1I0qQ)H=@PH)b&W z^*&dxt--*EvYf9lej5zB8}C3%t3&JozXyANcj8zUa&ja`CHjjn$&25Yz<>BhH{{3T zr%Q5QIjGUl;Z_+?MaZve8*KeMBnGcgjRUGVGoO2I72L`+QS>hE$>obsL;UBi?h1u0 zt6c+RZ7Ucn)hBHRHpWO5>sWVD8FOC;xWxfaA|;^C+;k|n$Iaq{-p#-dd|brTtVHxa z5-+$uc)hiqrcW-tuR2eV2}uD!OzaLU290=kf6?dm%+UQyyI zZV-Yu?+PG63(5`BEh%0}uava4HtQ=s0 zbsOnG4eL1qVHqn^ph~e{?6yuB^>vy%z+1uaxwdqco+PjDipv|$ka2IH6juEkqfV$r z9@7pP$o*${6&Ot*0P9B&Ls(F9sUUj4eg>Wut_NxpL`M}?Y2;B)mP7pOUcFp8w&&Bj zb4_GPo$Z3yxx&C!eH5WALkL6Ok?8;7xVlFe;1ut8)8wjwPV^(J@ScT=k5%Ur@*KQ_ z7@ziVR{*@nHz^Ql5R~@(Q(}jQl%_d^vxtA#BIWClm#9OiWBdG~hD-NU%0SHTJlgP? z2@<}9{zGRXO+mb^C#U<^j=7ma0yxM+dW6mq;4j=ZN7P>ks;Dk>Jp~O4VWHj< zTNyCv3CXA=BixvcQY6YwS9cHj{(RD_S_v_VPLp5&kQdjKi1H4m39@6#9#T%8N z(SuH>5nyd0LLrRy0Mr3zl+X-|d2!ha=cL-z=GtgXaf$WTf$7JRsyB24-#lp=x)&E{ z@)e7(hK{6a=obzP98F>oy#Y8UKs*cpGB?F_$o1VxF5|3Bw(u`WkEWEJdU!y?a$lv4 z`Y2i@=w8EntiCG(pSL1kAN{C6%?3vjp%P%U{0D3Rx&1ACXztSCM`m=(z3z1nd!2!% z{M6TeeA1=N`A-%SvZrQRp6Yk)Y?I@K9vPz|^1>-%U8Hk8;x4eULgPrG`>lb>gx_2S zUX>Ip>UAd#=1>QJ*Ulhz4IjdtXOnFjDvf5KpdnIy6t(y`0T)T4#Zvx)ypg&6eho{w z_iNmYqNe!vU1EvHwfB?ve>9&Cyy03HJ9|erpg-KrF+1#{kt)%;+9;+$he)wtx;#>O z0Ot=vFcm1CTBT~li*lDAhbl*n1acJ>>=``#s&-Nm6UL>`QQNrSV9tXO{fy0~2GB2r z^jP3Ulhb2#fY=`iDXr|Qy_jFdCrGAm9gd0_YiD|YyjSTwJV^MXu#(ij-Xcl}ft3eR zMSq{++_zMA92x-KvYrcO?EWA~N#Mkr)nw8VJ+H=(O7Drud*PkZ_==`+MqhUnE;>QO z`{k6NSoXbEWSa^=?TDaI??(1CsdOt9B9UAU{`T93JX{AaIYeYlKiH-Ye&g4O$P=KX zV4wQpgiNg0KlKC4`FHV+A!&h{i| zYFUpWzNacb&6|}>j{_I4K(-2zoFS0|AgX!!12$u|Lt~$5?$N;D*Zfj$lTlZR26h*` z{U`h*@~jWJ^2LA1eDC7-xzsxYPVl9u*E@Vt;131U_|TR`a&$+>tA zY;eX?pj`Vby-()}CEV_ng(WY#$iyT}DFPywsnZ*JSh$-hJ{j{joqgo!-a2TkR%C}e zW>(4of{bXx9t}8sgk*rp-kSkBmVnq3u}S(gfzKs8@9QK^lv^WTuRT?9)fD&j(zcb- zmD{9sIpbazhladp@1nuYCO~SpN2*YOOjFAPLRF@QG&9gF?{X>GZ0QzO7@za~PR3A) zo<1!gadG~9?kDKQj%DB`!d1`?YZwEgk=ux23=&Spj1jsI6iM_+lq8*Pib$+M*{YN^n>3!4eGt&W8Zm z{vU152BL~Yh15OUaFVZA)-_vDmHhs}HTBzJ<1waYLqfyCR9(m=CsAQ23&$sm^0ajr zw{htvm;3)MQQH{M8;KS9^h#f!p(1VcIvaawzHmY&i`&e5t?}$5O#aI9wQ5Pxq(9t` zv5-jQI2h21FkpbebwC?PjT(wSFX^@!O(@$edyaR~d&dqns;e^hik)SRPJJOJeesT*NivpdzkL~0v-PnWyd+(t`6;Ax1kE|F(A7Qbl|hYiueUkfRvGvR8&-u zlamxxkOR(`z;!|vm{!P0$^jCE1YlN(OM*|>5K|JUIY>&$h)aV1U~Yv3_`jH#j1<^E z_VmV6uB|yBxjsG6BZnAqP@oXc{o1G&&mkRr)%X$CXP;+Z@_rEBP|xA=v{mOhclxBw z+LlHWz!=e&4Ny6-3IU$Zek-$=L|Br&-;Tey839C!8Ttq-#lU6Z#q&X9HQRvJkCO*a z6UoDKJ*={~d__wR3P?niMJ_0E(b~b`tT~0B@V7Xc+dn`6pJjAMvNW&0v(0-HHQKi! zzSI=lR^&Y)Jy`pZ!T*0imFa$Rek?h~Vi%K>|*az#2W~KO-On$6^ zcC93q(XU0lO8*tM&!Y3jp1{LnQbY6dcvS z0s1WDe5({Uq-ukhi<7@`d5fWwtqWIlcP^E-uQ|ixmwCPCu#?%H9IZ#Wz3qNyA=R|K zr(($JqNA7u8sWs1xp^G8L0g7Lf$~*Zl0Uid*Q@Jt3#Su5Y7?K8M<;}fpFz0Y_biHR zGijh#*b*a9Hux*1qW?$`-+aAMUgnWu{IqrcBvg~JD> z&nKI9<7i z(0)kk{lT4SQ{RGzExahmN=FDjlZOC`9Vx2?NzI7G2>j}$7fM%uMJOo{Y9PkG_Fib5phPklHd;hWu$!(>&&3<3$6wh4Xm(u4{TbA`@_8uh>iHuTH}j{K?s1Q-I7f55 zej1Lyu__}RnoTK0diF^C%asf_`N@icd)-*K~QpQ&PES2KO= zZPFqhoSvz1;KGP za$QFUaRD-FI!o_|_4c&)gBLqy_#nmwa5Vr)A=n$g5YF(7s1RW})VUZIu~Sx7t5B%# zW4G-UwcT?2^5RXgNh$t};MGH=9Ly&q*i7%v;LS|4?q4OG|t%0Jnp5I-$+jvh=6(wRfJ(~M9NgR^TeO8`n_v_B-P zb0oi5+^ngvs*)198-HFn;y{r0Wb5R&jXO$!p*v^05(-{23gQlc$5jE0X-BjwR&Z+I zrngTZ^%EZ7IG2tEc@@cPz2kEn^NB;C z+qx4NTxAb$Kg=7A_X=-n*=Q>&w8*B_oR2MKo7h^Bzw4Ga8n{8+a?Ce;GfCk*G?t(p z-ZqUU@;m=S1%V>V#smue<-D+3cB_2!NsORA{}|~l7tE(kJ&jru?;9wEyF6{!MwKz{ z@Fyv6Ari8oScLQdV(|CLz8t_wP-R?(b2Q&fvPf(XqAT#s|C-e;Xm~=HRb-td-L!R< zXrr+FwP;Ems61PO19K=A`3_+E%&lwz7*8UT8FD{uPGi(i*f{hbXS9{}YqA7&DM5Mh7^zm+2PoT@{o<452met)?u$uKUMg z`+D=vixQINS9oylgqjdVy(F-D#tAK`fCZ>Tp%XkWeh|}C3Zo!G%0r&XS%cjIRDYh z1>Jk5zD<1$ju6a~z}Ev@7wP}8*9EQODHKS1 zzuSlYT*PiId5{w~?P^T}^?H)QwRP11UTK1-wyrACG`YAyt=k^}Y6nA4y)R3P4UiNX zpaE$`3N>#>)(+ot9?zAmEn{Z*j7xS9@(iC0z3$z>?Ke}AMARmtNX;ymG6v8{uvJsp zBEtQJ!1eR2|7#|m)G{hc^2D9Hws?t-(jpwrE-=D>OKaSn772Ee5c8REGnDR5+H<492G$uxB0LK#B zEF-T8OciXwZ(J|ZLS{EWRW&!3-SO0TOQxK4GAvn_X9O5uTz@U z&>&0j%VFN@Uj;vyISYO{0|oTciL7F}=i+LTqJp<__xJs^2dq~m=xw~TmVZ9D{Pt!f z7hzgJsPtbMwZH!X2X1mm@hQd5zH(TQll(QN+w?{-{XEDiHO`}^vbTX!NkYw~$0O3( z9d=>wFuFSS2GLf4Q9D5T_j(R+d>9fZ6Pu6Uu&flfQotS;-4~6|Hpk{yagfbAY|Q&{ zv;2sip>7Euk-DS;Utt7&60{Z>j5M}UfzZ%BtyQw~=EdukRJ;l1Cp!|i)HlBp-4${n zCX*_*=%AY<)Hfw$L%nzkl*VeY&szUuO!cBb^uFlOs*|eSB+4!=yQnsYf~Tn7iMe>5 zW>>GcLKC%>%GU2!oPlUkj_^C<#ss4Qq}PL*0UBy28f5O#;=%dR_Q9=QeGBFpaVOv7f@%0rh$i4joyoep|p30 z@5c=;o^l%KIX@>PmbXr{73*hcLV>K|^Wm_UiN9lKxC#z&Fxm_i644-mMB2VvH*D%8 zFLa$V1-Xx`8S4~^zZUPfN13DAl_p7&D*7P$IvPC)aE(Br9HGRqCS_H|Nf3$(ZP(v> zHg3LOOv6YLmXO{0$)A9xUF-#l|-y2eS*%YcY%ytoP8 z^BQZgZ=&R|(2FFf9%NRNo_hkKQk=ya^DjK_`i)lb6^!Z+#y|h^a_qq9E9r<+{-=** zD*=cmCcyUtn$P$dpmoDNSSqNq0|hc~)L|uWTEK|uj`={t)5acFiP0ij(et&X5M#mD z;Gm&Iasg9H1>Aiqe(wJevj8CU^DZjn=55IsSczv|e|6Dtv+}1Jp(#PXO`VtCi{$jk zJt=t>Dkz>2TJSp$ncNR;b{h)-${X89;C(|-ASpzp^W&|dGuv=aSF2B^3W@FR1g${K z&8sCk>;YA#Jju-`kMobmR#u^Qu(M<1P-q{_r%wKT<)IkR!!UGc?x>_c`vJyt=dhYF z*1+#X<|o%b3+!FXZ!B{qsjbKogo4vRP*8(gw+Ja?1gin~e}2P+Qc^RR`S)rkij1G? zo0N701;y%PZtQ4;GH(xy6jx{JI{=6k{Jl3s)r+Qn*i8XG$l5}k28{?L4?$0zC>jn< z*STa#Z#}qw9<}q5^OR{-J~6#Xh31*YUJ2+oBQFJ&+S_w0+`bO`I%T zCc3IB9xf}PAzk_D?X}YhwxZOX7WKHq$Vv_b=cmyg1*ERx z;-2`tHea8;x*7eAn;m)BqHf5ne_6lIY&}6RyrolUWjDQNE#T}4WFQb8bi9oZ^-@Od zr=+@t!X)KCGF$E?KF9?oYL$NSfC3O-uNdj)}GAPhcJS0>5 zIs0}Rb0T|ArmdX`+euB|%=8$F$1a)Zm&;L<)ELPglwkPP48zxEOoF58ub<&rA(*I0 z7bngvc*VAO2H7@c$HmCHR~~-3(|z0AF;4bTHpM(69J&abXw!eUGQeR^0?zLMAEJ&Q ziqG&1b~w~JjA}8l(+cN1y)G_$KpnfwkWA`&9M0@=r4F+lY$44fZoY9?Sp#657kK}W z-h_!5G3-qb_~I|7{bU;oSuWU}V(pfNzV3XGVZ3-*Rr~NOE~1ig6Sb`Zn-A>#qqmoC zeAuDH7=VJ2%9GCjnqO_wbiwYf)D0?$W1oMW>16UmgG?ja2chKliH0gDMy4oLZW=^)dW?1<8jZvlmMPD0wKzegpar1Kedm z_8aKIXE;v`4xNmIn3#x!gpi<^fQYDwn24CTpoox=xUjH<$X#1{YVeTkv5Tq#tMc3u zmynAe8#u%RALZ;JxeBAH{en80>~6z`rTBwEO-i6WDsx4C>{bH$V!(=66XAsjSQnG< z^0$HwYY@W@QK-}L1`ag0D1f&z_u)r{@|1fmnPkR|MoMfwIj)I~jFxMq+!@3O6wXj8 zclufDEb>eXc3i`u0VU(z4&jzN!wn*N^0uWmw3SDX!W)HJYVw+1YH!P4t!?oZ0-868SJq(zOhw+QMa(F@RVatyA`+R=2tK^$V5O|&d; zcV?Ob(kGAwCQ$p`$A^CUtT%9#dQBeR6dK~NOJe;fEY#ii+W5C@DuY9=NEN8;O3yFb z_u`*zHMYUWJ{(=%f&1NpAc79x1ka+!st4b-DLCHpu|no-8*y5*%ohbffgj#+s}k>` zwi*#Z>GUlSLxFO|u%P=b8=1n)&-kmhMbyi&)ik0%Li+B%t=O5-!8fI(#`$Pnmdn5qI13^+I? z%Y{PQP$026%G8y}*S8m=%QSaGK7|K5vj7>-s_I@BD%UA-1BKDsh)=imv#dw{JYK2Hg@u z4P|XVGfOVX@`$|~p(|YYj-%@aB^#Z%DgOJLY3PEMAe0>Tbs1I%p2BP%n5!-$2I%4_ z(B$MvX*z3;<4i&&aV42*S{gN*h?|)S!|d1Cxjd8wW02pkTEChisQcpxCcz847_c3y z`f~_+wsE!-sJF0Pc3gJRK2l6dTT&xTRclHo{7ya*IS$PS^1*;F(O(+?qi%bYjd}ZBz^$Y24AYV27#$*y%gds z0y6wq(93)jnccC5%p}4WHWb0JBTq_y@2>DIi?63ju=?d`!&%DE6i9Jq>lZ-nj6C~9 z3h^Muk44OqJflWlRZ%KwiXm=7MAym5J?DL&-mVUk0&+Db;6AHG<;MU{{SWno6sY*5 zTe%?UD-_BVBo@6^cGTzbkVyDW$l=}t)FNG9wS?J5!2N)qOA{C=XYe#F6m24ew;^2U zr33^yU5GcBF_dbR)mQG2DRK&TeU99lA_-G-!a{}f&!Hw!dKaNfStqw5pAW~ep zixT=oxS^U^meqrNS4GdncxI3Fy+L{GEY8=oCe!nHR&fN+8>}_i=&jhvoxkGHU`M=S zg|tofE^^~li-lZ!3X<58$&KAl)-z%_S5|1yago372vF=@>kvj%f7I5f;IGu_mJ}YH zwXxaB&NpjniD@!8$-6&GUX)K_?~0#9h}g7*N`%iXn;e5Nseb@mxFnoPh|Ie{#74WL z+HCzK8L2e}-)p$oDw^lRST#LDr1;8sn#BM-=)boI+;~6_z~Y1fidTR-$xxtWsdG+Y zidlN+Eq%NGUXE9eZiXC!WS@E{F$ov}ds}q=jU0?z3owfYQnI48EKs4~*UrAdlkMGM ze`bw}Be%r>9baJ8)t0}Htadk8gD&~oEN?7c z4vdvkUR)|wTOOarWm_6wg2Vr;2@n0$J4{T`xw*RB47y$^_)~oUogBX@rKNdGk{zF< z#iPS11uNY#3Q8RnjGt5NeH2@nrZ-ggIWEt)>5Gac_dV0nm)Gpm)0d~}gwhgr?Ok8) TRonZf?S1=0t*7TFiT3{huT}MT literal 0 HcmV?d00001 diff --git a/Resources/Locale/en-US/rotation/components/rotatable-component.ftl b/Resources/Locale/en-US/rotation/components/rotatable-component.ftl index 3c373f130a..bc23e488fb 100644 --- a/Resources/Locale/en-US/rotation/components/rotatable-component.ftl +++ b/Resources/Locale/en-US/rotation/components/rotatable-component.ftl @@ -1,4 +1,4 @@ -# RotatableComponenet +# RotatableComponent rotatable-component-try-rotate-stuck = It's stuck. # RotateVerb diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_shuttle.yml b/Resources/Prototypes/Catalog/Cargo/cargo_shuttle.yml new file mode 100644 index 0000000000..d345a9d770 --- /dev/null +++ b/Resources/Prototypes/Catalog/Cargo/cargo_shuttle.yml @@ -0,0 +1,23 @@ +- type: cargoProduct + name: shuttle thruster + id: ShuttleThruster + description: A thruster that allows a shuttle to move. + icon: + sprite: Structures/Shuttles/thruster.rsi + state: base + product: Thruster + cost: 1500 + category: Shuttle + group: market + +- type: cargoProduct + name: shuttle gyroscope + id: ShuttleGyroscope + description: 1 gyroscope for use in rotating a shuttle. + icon: + sprite: Structures/Shuttles/gyroscope.rsi + state: base + product: Gyroscope + cost: 4000 + category: Shuttle + group: market diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 3f1511c3a8..e7114ab462 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -269,6 +269,8 @@ - EngineSingularityGenerator - EngineSingularityContainment - EngineParticleAccelerator + - ShuttleThruster + - ShuttleGyroscope - AtmosphericsAir - AtmosphericsOxygen - AtmosphericsNitrogen diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml new file mode 100644 index 0000000000..83fcb36daa --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml @@ -0,0 +1,85 @@ +- type: entity + id: BaseThruster + parent: BaseStructureDynamic + name: thruster + description: It goes nyooooooom. + abstract: true + components: + - type: AmbientSound + range: 4 + volume: -5 + sound: + path: /Audio/Effects/shuttle_thruster.ogg + - type: Transform + anchored: true + - type: Rotatable + rotateWhileAnchored: true + - type: Thruster + damage: + groups: + Burn: 40 + - type: InteractionOutline + - type: Sprite + netsync: false + - type: Appearance + visuals: + - type: ThrusterVisualizer + - type: ApcPowerReceiver + powerLoad: 1500 + - type: ExtensionCableReceiver + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 300 # Considering we need a lot of thrusters didn't want to make an individual one too tanky + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + placement: + mode: SnapgridCenter + +- type: entity + id: Thruster + parent: BaseThruster + name: thruster + description: It goes nyooooooom. + components: + - type: Sprite + sprite: Structures/Shuttles/thruster.rsi + layers: + - state: base + map: ["enum.ThrusterVisualLayers.Base"] + - state: thrust + map: ["enum.ThrusterVisualLayers.ThrustOn"] + shader: unshaded + - state: thrust_burn_unshaded + map: ["enum.ThrusterVisualLayers.ThrustingUnshaded"] + shader: unshaded + offset: 0, 1 + +- type: entity + id: Gyroscope + parent: BaseThruster + name: Gyroscope + description: Increases the shuttle's potential angular rotation. + components: + - type: Thruster + thrusterType: Angular + impulse: 2 + - type: Sprite + # Listen I'm not the biggest fan of the sprite but it was the most appropriate thing I could find. + sprite: Structures/Shuttles/gyroscope.rsi + layers: + - state: base + map: ["enum.ThrusterVisualLayers.Base"] + - state: thrust + map: ["enum.ThrusterVisualLayers.ThrustOn"] + shader: unshaded + - state: thrust_burn + map: [ "enum.ThrusterVisualLayers.Thrusting" ] + - state: thrust_burn_unshaded + map: ["enum.ThrusterVisualLayers.ThrustingUnshaded"] + shader: unshaded diff --git a/Resources/Textures/Structures/Shuttles/gyroscope.rsi/base.png b/Resources/Textures/Structures/Shuttles/gyroscope.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..94cda7007f3f667e37801f5ab9c4a38772ecffdd GIT binary patch literal 687 zcmV;g0#N;lP)>SB3&e=`M#O=W3>6r{(cJ) z#eNU_`|a$!_x-&0d$YS|=`YI~p!daj|Ma!WVush_nT>`&1|Y^Ww;rf#3*XAT=DWl9 z4~cwR5F-GXzrOL2_lGn~qi>(6s^iMu+~u`GJ-#VKRe-oT6gP*Vc5et_)PcjsSvq$- zLNCAHR|Yig1ST2EdQE&y_7&#`*(enN)ytXRUbP@zp|X#1uZ~6KkjeS z8{T8s&|W!Xu0E<1D@;Q}CoxZ{RMbKw0`&F|@HE48p}S0_^1I+&Mj2;Hf+Z zU-#+q#V*dL>x8xg*`BMkT5y9$>r-Hq@VT@)nt>CaMPL``i1TcJ+0@zS0j~F7qxtzZ zB6nY%sm@SL}? zs%(7VxN0)`Cd42W3q(WC8JhEc{Hz;8z%Py= VCd^gt;$Hv&002ovPDHLkV1mM&H?jZ# literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Shuttles/gyroscope.rsi/meta.json b/Resources/Textures/Structures/Shuttles/gyroscope.rsi/meta.json new file mode 100644 index 0000000000..574272c09a --- /dev/null +++ b/Resources/Textures/Structures/Shuttles/gyroscope.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "copyright": "Taken from https://github.com/discordia-space/CEV-Eris/tree/23e73e051a838bc190a589d6d464a318c641b6a5", + "license": "CC-BY-SA-3.0", + "states": [ + { + "name": "base" + }, + { + "name": "thrust" + }, + { + "name": "thrust_burn", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "thrust_burn_unshaded", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Shuttles/gyroscope.rsi/thrust.png b/Resources/Textures/Structures/Shuttles/gyroscope.rsi/thrust.png new file mode 100644 index 0000000000000000000000000000000000000000..718c9bd7387da85ecf00a1a8d561781b5ccedf44 GIT binary patch literal 6184 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 Zu-?|Gy$we`V1UCw%uOtf^9|j@{};R1^X&it literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Shuttles/gyroscope.rsi/thrust_burn.png b/Resources/Textures/Structures/Shuttles/gyroscope.rsi/thrust_burn.png new file mode 100644 index 0000000000000000000000000000000000000000..0563da7e6273b37f8c418524369a010e0b20a33a GIT binary patch literal 14087 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 JypgvI`#(6|WnlmS literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Shuttles/gyroscope.rsi/thrust_burn_unshaded.png b/Resources/Textures/Structures/Shuttles/gyroscope.rsi/thrust_burn_unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..7c955b68f97aec92ba342cd150aba4c94267b604 GIT binary patch literal 6034 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 kT5tjLkfixQ0B@=Qz3^-ceAmbg@9XTs6eqe zl#azpBod5-h!F?_uy`7chQ$%E1OgiNK#R8W#efve7p;&(yvMKsMQkAyDux7nq#P6Q z7let;P$<}r{E#0nl*#-E&lk9C7#|uY44Em1!^VOkAP;sG!K3287}Cyx$@&-}ryv00h0a95 zOn%`hhPa=|`XV>EWu~0Z6M@4&;(p=%q4pVP*o(=e+X&cU^7I^R%uw?2=^OzY;?QSK z2_OYW;NXd9e}K$JlW0^tn#!io(0G3?jRFE(yg#1&8I%KGBnJ3wP!0uyV;~rZizneZ z1R{Xu&^SaiiDL|){YeBen$4jYbMbgQ8xMRA;VOh+RRSTOXC;T?z)&<0Ph^t;92!UE z`lDf38X8~|$!L&FrQvY?WEz`Bn#qR4rrQdHJOG|fhzA6K*ie4Jj6qH~-IC>Ch9Y2a zpL$p!fS3yhz}Eo8=LjUCPbLqD2fB*^IiGk6(HKuMHa5mlNhBhP@X5&&6pCOi%2Dw+ z41qdhkxvXAE(fL-kSi4inCXYBp<4?MhZ(;`m`~VQX!e=G*p&$Bh(?ugv z@I*2JCY3-#lRypy4d6IrG?xqzxg08uMC7o)L>CFTVhJDwEd$_6;c8$B%~XRloF#Mh zm;RDKP|g&NfJfuukFf`yO2<*@1Of{C&zA>_mqNthVKuS|95ji{Wy5Nu63}EE0Y?QW z1dcJ=|I2j$=kf>yI-Wv@XLq(dQ>=W+`Y@TM*#DUB_YR+}aWF0K`{1<`UW&0F*Wy{e zGyCgs6>^D+d26rln9heNIhbjwI z7AThmkvrk8Jq|XO9`L``w@XxGaT<(v*V_3cE!3hbb)?}kYcG@=S0)3LDYDnlxO-fe3i1#HqVr)7mZ$o**+~6;o25{5X{K=@t7?v6wCAm)+k-xGlLN!WrqF70 G%)bF!IcgdJ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Shuttles/thruster.rsi/base.png b/Resources/Textures/Structures/Shuttles/thruster.rsi/base.png new file mode 100644 index 0000000000000000000000000000000000000000..b7879f970ad102be027a38e5fe66a438039830b6 GIT binary patch literal 2384 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Shuttles/thruster.rsi/thrust_burn_unshaded.png b/Resources/Textures/Structures/Shuttles/thruster.rsi/thrust_burn_unshaded.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdfde09fb0e838c613b4422b3e54b19350a285f GIT binary patch literal 4298 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 literal 0 HcmV?d00001