From 3108d18ffb2fc4d2b10eac696842335b25aaf088 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 16 Feb 2013 05:09:27 +0100 Subject: [PATCH 01/30] Fix shape parameters sent for meshes tosupport the full number of faces --- OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index bd4a2d100d..a18719094d 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -3802,6 +3802,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP part.Shape.LightEntry = false; } } + + if (part.Shape != null && (part.Shape.SculptType == (byte)SculptType.Mesh)) + { + // Ensure that mesh has at least 8 valid faces + part.Shape.ProfileBegin = 12500; + part.Shape.ProfileEnd = 0; + part.Shape.ProfileHollow = 27500; + } } #region UpdateFlags to packet type conversion From e549c2922ab2af6c4fbe08c3492918a5d5f4ba61 Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Sat, 16 Feb 2013 19:28:38 -0800 Subject: [PATCH 02/30] BulletSim: fix physical object appearing to slowly float off when they stop moving. --- OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs index 0323b0d39f..4bb2a9ebb9 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs @@ -1667,7 +1667,7 @@ public class BSPrim : BSPhysObject // _velocity = entprop.Velocity; // DEBUG DEBUG DEBUG -- smooth velocity changes a bit. The simulator seems to be // very sensitive to velocity changes. - if (!entprop.Velocity.ApproxEquals(_velocity, 0.1f)) + if (entprop.Velocity == OMV.Vector3.Zero || !entprop.Velocity.ApproxEquals(_velocity, 0.1f)) _velocity = entprop.Velocity; _acceleration = entprop.Acceleration; _rotationalVelocity = entprop.RotationalVelocity; From 6560d80fa856fb73c51a7ccd37f720c25b12d42d Mon Sep 17 00:00:00 2001 From: teravus Date: Sat, 16 Feb 2013 22:54:37 -0500 Subject: [PATCH 03/30] * Fix walking to via autopilot. --- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 70e3952405..9c1d2b645f 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1847,7 +1847,11 @@ namespace OpenSim.Region.Framework.Scenes // Get terrain height for sub-region in a megaregion if necessary int X = (int)((m_scene.RegionInfo.RegionLocX * Constants.RegionSize) + pos.X); int Y = (int)((m_scene.RegionInfo.RegionLocY * Constants.RegionSize) + pos.Y); - UUID target_regionID = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y).RegionID; + GridRegion target_region = m_scene.GridService.GetRegionByPosition(m_scene.RegionInfo.ScopeID, X, Y); + // If X and Y is NaN, target_region will be null + if (target_region == null) + return; + UUID target_regionID = target_region.RegionID; Scene targetScene = m_scene; if (!SceneManager.Instance.TryGetScene(target_regionID, out targetScene)) From 885b45b112607e3edf12838cf01cfefa6da884ae Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Sat, 16 Feb 2013 22:14:38 -0800 Subject: [PATCH 04/30] BulletSim: rework parameter setting for different types of values (like vectors or quaternions). --- .../Region/Physics/BulletSPlugin/BSAPIXNA.cs | 4 +- .../Physics/BulletSPlugin/BSDynamics.cs | 6 +- .../BulletSPlugin/BSLinksetConstraints.cs | 4 +- .../Region/Physics/BulletSPlugin/BSParam.cs | 670 +++++++++--------- .../Region/Physics/BulletSPlugin/BSScene.cs | 54 +- 5 files changed, 346 insertions(+), 392 deletions(-) diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs index 39e62dd1f3..15fa52b59a 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs @@ -1133,8 +1133,8 @@ private sealed class BulletConstraintXNA : BulletConstraint p.numberOfSolverIterations = o[0].numberOfSolverIterations; p.linksetImplementation = BSParam.LinksetImplementation; - p.linkConstraintUseFrameOffset = BSParam.LinkConstraintUseFrameOffset; - p.linkConstraintEnableTransMotor = BSParam.LinkConstraintEnableTransMotor; + p.linkConstraintUseFrameOffset = BSParam.NumericBool(BSParam.LinkConstraintUseFrameOffset); + p.linkConstraintEnableTransMotor = BSParam.NumericBool(BSParam.LinkConstraintEnableTransMotor); p.linkConstraintTransMotorMaxVel = BSParam.LinkConstraintTransMotorMaxVel; p.linkConstraintTransMotorMaxForce = BSParam.LinkConstraintTransMotorMaxForce; p.linkConstraintERP = BSParam.LinkConstraintERP; diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs index 41d353a807..e6933f90bf 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSDynamics.cs @@ -144,7 +144,7 @@ namespace OpenSim.Region.Physics.BulletSPlugin enableAngularVerticalAttraction = true; enableAngularDeflection = false; enableAngularBanking = false; - if (BSParam.VehicleDebuggingEnabled != ConfigurationParameters.numericFalse) + if (BSParam.VehicleDebuggingEnabled) { enableAngularVerticalAttraction = true; enableAngularDeflection = false; @@ -607,8 +607,8 @@ namespace OpenSim.Region.Physics.BulletSPlugin // TODO: possibly set AngularFactor and LinearFactor for the type of vehicle. // Maybe compute linear and angular factor and damping from params. PhysicsScene.PE.SetAngularDamping(Prim.PhysBody, BSParam.VehicleAngularDamping); - PhysicsScene.PE.SetLinearFactor(Prim.PhysBody, BSParam.VehicleLinearFactorV); - PhysicsScene.PE.SetAngularFactorV(Prim.PhysBody, BSParam.VehicleAngularFactorV); + PhysicsScene.PE.SetLinearFactor(Prim.PhysBody, BSParam.VehicleLinearFactor); + PhysicsScene.PE.SetAngularFactorV(Prim.PhysBody, BSParam.VehicleAngularFactor); // Vehicles report collision events so we know when it's on the ground PhysicsScene.PE.AddToCollisionFlags(Prim.PhysBody, CollisionFlags.BS_VEHICLE_COLLISIONS); diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetConstraints.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetConstraints.cs index cc814d16d0..6d252caab2 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetConstraints.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetConstraints.cs @@ -223,8 +223,8 @@ public sealed class BSLinksetConstraints : BSLinkset constrain.SetAngularLimits(OMV.Vector3.Zero, OMV.Vector3.Zero); // tweek the constraint to increase stability - constrain.UseFrameOffset(BSParam.BoolNumeric(BSParam.LinkConstraintUseFrameOffset)); - constrain.TranslationalLimitMotor(BSParam.BoolNumeric(BSParam.LinkConstraintEnableTransMotor), + constrain.UseFrameOffset(BSParam.LinkConstraintUseFrameOffset); + constrain.TranslationalLimitMotor(BSParam.LinkConstraintEnableTransMotor, BSParam.LinkConstraintTransMotorMaxVel, BSParam.LinkConstraintTransMotorMaxForce); constrain.SetCFMAndERP(BSParam.LinkConstraintCFM, BSParam.LinkConstraintERP); diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs index 329169f79e..c2a967131a 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs @@ -37,6 +37,8 @@ namespace OpenSim.Region.Physics.BulletSPlugin { public static class BSParam { + private static string LogHeader = "[BULLETSIM PARAMETERS]"; + // Level of Detail values kept as float because that's what the Meshmerizer wants public static float MeshLOD { get; private set; } public static float MeshCircularLOD { get; private set; } @@ -80,14 +82,13 @@ public static class BSParam // Physics Engine operation public static float MaxPersistantManifoldPoolSize; public static float MaxCollisionAlgorithmPoolSize; - public static float ShouldDisableContactPoolDynamicAllocation; - public static float ShouldForceUpdateAllAabbs; - public static float ShouldRandomizeSolverOrder; - public static float ShouldSplitSimulationIslands; - public static float ShouldEnableFrictionCaching; + public static bool ShouldDisableContactPoolDynamicAllocation; + public static bool ShouldForceUpdateAllAabbs; + public static bool ShouldRandomizeSolverOrder; + public static bool ShouldSplitSimulationIslands; + public static bool ShouldEnableFrictionCaching; public static float NumberOfSolverIterations; - public static bool UseSingleSidedMeshes { get { return UseSingleSidedMeshesF != ConfigurationParameters.numericFalse; } } - public static float UseSingleSidedMeshesF; + public static bool UseSingleSidedMeshes; public static float GlobalContactBreakingThreshold; // Avatar parameters @@ -112,16 +113,14 @@ public static class BSParam public static float VehicleAngularDamping { get; private set; } public static float VehicleFriction { get; private set; } public static float VehicleRestitution { get; private set; } - public static float VehicleLinearFactor { get; private set; } - public static Vector3 VehicleLinearFactorV { get; private set; } - public static float VehicleAngularFactor { get; private set; } - public static Vector3 VehicleAngularFactorV { get; private set; } + public static Vector3 VehicleLinearFactor { get; private set; } + public static Vector3 VehicleAngularFactor { get; private set; } public static float VehicleGroundGravityFudge { get; private set; } - public static float VehicleDebuggingEnabled { get; private set; } + public static bool VehicleDebuggingEnabled { get; private set; } public static float LinksetImplementation { get; private set; } - public static float LinkConstraintUseFrameOffset { get; private set; } - public static float LinkConstraintEnableTransMotor { get; private set; } + public static bool LinkConstraintUseFrameOffset { get; private set; } + public static bool LinkConstraintEnableTransMotor { get; private set; } public static float LinkConstraintTransMotorMaxVel { get; private set; } public static float LinkConstraintTransMotorMaxForce { get; private set; } public static float LinkConstraintERP { get; private set; } @@ -141,40 +140,106 @@ public static class BSParam public const float MinRestitution = 0f; public const float MaxRestitution = 1f; - // =========================================================================== - public delegate void ParamUser(BSScene scene, IConfig conf, string paramName, float val); - public delegate float ParamGet(BSScene scene); - public delegate void ParamSet(BSScene scene, string paramName, uint localID, float val); - public delegate void SetOnObject(BSScene scene, BSPhysObject obj, float val); + // ===================================================================================== + // ===================================================================================== - public struct ParameterDefn + // Base parameter definition that gets and sets parameter values via a string + public abstract class ParameterDefnBase { public string name; // string name of the parameter public string desc; // a short description of what the parameter means - public float defaultValue; // default value if not specified anywhere else - public ParamUser userParam; // get the value from the configuration file - public ParamGet getter; // return the current value stored for this parameter - public ParamSet setter; // set the current value for this parameter - public SetOnObject onObject; // set the value on an object in the physical domain - public ParameterDefn(string n, string d, float v, ParamUser u, ParamGet g, ParamSet s) + public ParameterDefnBase(string pName, string pDesc) { - name = n; - desc = d; - defaultValue = v; - userParam = u; - getter = g; - setter = s; - onObject = null; + name = pName; + desc = pDesc; } - public ParameterDefn(string n, string d, float v, ParamUser u, ParamGet g, ParamSet s, SetOnObject o) + // Set the parameter value to the default + public abstract void AssignDefault(BSScene s); + // Get the value as a string + public abstract string GetValue(BSScene s); + // Set the value to this string value + public abstract void SetValue(BSScene s, string valAsString); + // set the value on a particular object (usually sets in physics engine) + public abstract void SetOnObject(BSScene s, BSPhysObject obj); + public abstract bool HasSetOnObject { get; } + } + + // Specific parameter definition for a parameter of a specific type. + public delegate T PGetValue(BSScene s); + public delegate void PSetValue(BSScene s, T val); + public delegate void PSetOnObject(BSScene scene, BSPhysObject obj); + public sealed class ParameterDefn : ParameterDefnBase + { + T defaultValue; + PSetValue setter; + PGetValue getter; + PSetOnObject objectSet; + public ParameterDefn(string pName, string pDesc, T pDefault, PGetValue pGetter, PSetValue pSetter) + : base(pName, pDesc) { - name = n; - desc = d; - defaultValue = v; - userParam = u; - getter = g; - setter = s; - onObject = o; + defaultValue = pDefault; + setter = pSetter; + getter = pGetter; + objectSet = null; + } + public ParameterDefn(string pName, string pDesc, T pDefault, PGetValue pGetter, PSetValue pSetter, PSetOnObject pObjSetter) + : base(pName, pDesc) + { + defaultValue = pDefault; + setter = pSetter; + getter = pGetter; + objectSet = pObjSetter; + } + public override void AssignDefault(BSScene s) + { + setter(s, defaultValue); + } + public override string GetValue(BSScene s) + { + return String.Format("{0}", getter(s)); + } + public override void SetValue(BSScene s, string valAsString) + { + // Get the generic type of the setter + Type genericType = setter.GetType().GetGenericArguments()[0]; + // Find the 'Parse' method on that type + System.Reflection.MethodInfo parser = null; + try + { + parser = genericType.GetMethod("Parse", new Type[] { typeof(String) } ); + } + catch (Exception e) + { + s.Logger.ErrorFormat("{0} Exception getting parser for type '{1}': {2}", LogHeader, genericType, e); + parser = null; + } + if (parser != null) + { + // Parse the input string + try + { + T setValue = (T)parser.Invoke(genericType, new Object[] { valAsString }); + setter(s, setValue); + // s.Logger.DebugFormat("{0} Parameter {1} = {2}", LogHeader, name, setValue); + } + catch + { + s.Logger.ErrorFormat("{0} Failed parsing parameter value '{1}' as type '{2}'", LogHeader, valAsString, genericType); + } + } + else + { + s.Logger.ErrorFormat("{0} Could not find parameter parser for type '{1}'", LogHeader, genericType); + } + } + public override bool HasSetOnObject + { + get { return objectSet != null; } + } + public override void SetOnObject(BSScene s, BSPhysObject obj) + { + if (objectSet != null) + objectSet(s, obj); } } @@ -184,462 +249,375 @@ public static class BSParam // location somewhere in the program and make an entry in this table with the // getters and setters. // It is easiest to find an existing definition and copy it. - // Parameter values are floats. Booleans are converted to a floating value. // - // A ParameterDefn() takes the following parameters: + // A ParameterDefn() takes the following parameters: // -- the text name of the parameter. This is used for console input and ini file. // -- a short text description of the parameter. This shows up in the console listing. - // -- a default value (float) - // -- a delegate for fetching the parameter from the ini file. - // Should handle fetching the right type from the ini file and converting it. - // -- a delegate for getting the value as a float - // -- a delegate for setting the value from a float + // -- a default value + // -- a delegate for getting the value + // -- a delegate for setting the value // -- an optional delegate to update the value in the world. Most often used to // push the new value to an in-world object. // // The single letter parameters for the delegates are: // s = BSScene // o = BSPhysObject - // p = string parameter name - // l = localID of referenced object // v = value (float) - // cf = parameter configuration class (for fetching values from ini file) - private static ParameterDefn[] ParameterDefinitions = + private static ParameterDefnBase[] ParameterDefinitions = { - new ParameterDefn("MeshSculptedPrim", "Whether to create meshes for sculpties", - ConfigurationParameters.numericTrue, - (s,cf,p,v) => { ShouldMeshSculptedPrim = cf.GetBoolean(p, BSParam.BoolNumeric(v)); }, - (s) => { return BSParam.NumericBool(ShouldMeshSculptedPrim); }, - (s,p,l,v) => { ShouldMeshSculptedPrim = BSParam.BoolNumeric(v); } ), - new ParameterDefn("ForceSimplePrimMeshing", "If true, only use primitive meshes for objects", - ConfigurationParameters.numericFalse, - (s,cf,p,v) => { ShouldForceSimplePrimMeshing = cf.GetBoolean(p, BSParam.BoolNumeric(v)); }, - (s) => { return BSParam.NumericBool(ShouldForceSimplePrimMeshing); }, - (s,p,l,v) => { ShouldForceSimplePrimMeshing = BSParam.BoolNumeric(v); } ), - new ParameterDefn("UseHullsForPhysicalObjects", "If true, create hulls for physical objects", - ConfigurationParameters.numericTrue, - (s,cf,p,v) => { ShouldUseHullsForPhysicalObjects = cf.GetBoolean(p, BSParam.BoolNumeric(v)); }, - (s) => { return BSParam.NumericBool(ShouldUseHullsForPhysicalObjects); }, - (s,p,l,v) => { ShouldUseHullsForPhysicalObjects = BSParam.BoolNumeric(v); } ), - new ParameterDefn("ShouldRemoveZeroWidthTriangles", "If true, remove degenerate triangles from meshes", - ConfigurationParameters.numericTrue, - (s,cf,p,v) => { ShouldRemoveZeroWidthTriangles = cf.GetBoolean(p, BSParam.BoolNumeric(v)); }, - (s) => { return BSParam.NumericBool(ShouldRemoveZeroWidthTriangles); }, - (s,p,l,v) => { ShouldRemoveZeroWidthTriangles = BSParam.BoolNumeric(v); } ), + new ParameterDefn("MeshSculptedPrim", "Whether to create meshes for sculpties", + true, + (s) => { return ShouldMeshSculptedPrim; }, + (s,v) => { ShouldMeshSculptedPrim = v; } ), + new ParameterDefn("ForceSimplePrimMeshing", "If true, only use primitive meshes for objects", + false, + (s) => { return ShouldForceSimplePrimMeshing; }, + (s,v) => { ShouldForceSimplePrimMeshing = v; } ), + new ParameterDefn("UseHullsForPhysicalObjects", "If true, create hulls for physical objects", + true, + (s) => { return ShouldUseHullsForPhysicalObjects; }, + (s,v) => { ShouldUseHullsForPhysicalObjects = v; } ), + new ParameterDefn("ShouldRemoveZeroWidthTriangles", "If true, remove degenerate triangles from meshes", + true, + (s) => { return ShouldRemoveZeroWidthTriangles; }, + (s,v) => { ShouldRemoveZeroWidthTriangles = v; } ), - new ParameterDefn("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)", + new ParameterDefn("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)", 32f, - (s,cf,p,v) => { MeshLOD = (float)cf.GetInt(p, (int)v); }, (s) => { return MeshLOD; }, - (s,p,l,v) => { MeshLOD = v; } ), - new ParameterDefn("MeshLevelOfDetailCircular", "Level of detail for prims with circular cuts or shapes", + (s,v) => { MeshLOD = v; } ), + new ParameterDefn("MeshLevelOfDetailCircular", "Level of detail for prims with circular cuts or shapes", 32f, - (s,cf,p,v) => { MeshCircularLOD = (float)cf.GetInt(p, (int)v); }, (s) => { return MeshCircularLOD; }, - (s,p,l,v) => { MeshCircularLOD = v; } ), - new ParameterDefn("MeshLevelOfDetailMegaPrimThreshold", "Size (in meters) of a mesh before using MeshMegaPrimLOD", + (s,v) => { MeshCircularLOD = v; } ), + new ParameterDefn("MeshLevelOfDetailMegaPrimThreshold", "Size (in meters) of a mesh before using MeshMegaPrimLOD", 10f, - (s,cf,p,v) => { MeshMegaPrimThreshold = (float)cf.GetInt(p, (int)v); }, (s) => { return MeshMegaPrimThreshold; }, - (s,p,l,v) => { MeshMegaPrimThreshold = v; } ), - new ParameterDefn("MeshLevelOfDetailMegaPrim", "Level of detail to render meshes larger than threshold meters", + (s,v) => { MeshMegaPrimThreshold = v; } ), + new ParameterDefn("MeshLevelOfDetailMegaPrim", "Level of detail to render meshes larger than threshold meters", 32f, - (s,cf,p,v) => { MeshMegaPrimLOD = (float)cf.GetInt(p, (int)v); }, (s) => { return MeshMegaPrimLOD; }, - (s,p,l,v) => { MeshMegaPrimLOD = v; } ), - new ParameterDefn("SculptLevelOfDetail", "Level of detail to render sculpties (32, 16, 8 or 4. 32=most detailed)", + (s,v) => { MeshMegaPrimLOD = v; } ), + new ParameterDefn("SculptLevelOfDetail", "Level of detail to render sculpties (32, 16, 8 or 4. 32=most detailed)", 32f, - (s,cf,p,v) => { SculptLOD = (float)cf.GetInt(p, (int)v); }, (s) => { return SculptLOD; }, - (s,p,l,v) => { SculptLOD = v; } ), + (s,v) => { SculptLOD = v; } ), - new ParameterDefn("MaxSubStep", "In simulation step, maximum number of substeps", - 10f, - (s,cf,p,v) => { s.m_maxSubSteps = cf.GetInt(p, (int)v); }, - (s) => { return (float)s.m_maxSubSteps; }, - (s,p,l,v) => { s.m_maxSubSteps = (int)v; } ), - new ParameterDefn("FixedTimeStep", "In simulation step, seconds of one substep (1/60)", + new ParameterDefn("MaxSubStep", "In simulation step, maximum number of substeps", + 10, + (s) => { return s.m_maxSubSteps; }, + (s,v) => { s.m_maxSubSteps = (int)v; } ), + new ParameterDefn("FixedTimeStep", "In simulation step, seconds of one substep (1/60)", 1f / 60f, - (s,cf,p,v) => { s.m_fixedTimeStep = cf.GetFloat(p, v); }, - (s) => { return (float)s.m_fixedTimeStep; }, - (s,p,l,v) => { s.m_fixedTimeStep = v; } ), - new ParameterDefn("NominalFrameRate", "The base frame rate we claim", + (s) => { return s.m_fixedTimeStep; }, + (s,v) => { s.m_fixedTimeStep = v; } ), + new ParameterDefn("NominalFrameRate", "The base frame rate we claim", 55f, - (s,cf,p,v) => { s.NominalFrameRate = cf.GetInt(p, (int)v); }, - (s) => { return (float)s.NominalFrameRate; }, - (s,p,l,v) => { s.NominalFrameRate = (int)v; } ), - new ParameterDefn("MaxCollisionsPerFrame", "Max collisions returned at end of each frame", - 2048f, - (s,cf,p,v) => { s.m_maxCollisionsPerFrame = cf.GetInt(p, (int)v); }, - (s) => { return (float)s.m_maxCollisionsPerFrame; }, - (s,p,l,v) => { s.m_maxCollisionsPerFrame = (int)v; } ), - new ParameterDefn("MaxUpdatesPerFrame", "Max updates returned at end of each frame", - 8000f, - (s,cf,p,v) => { s.m_maxUpdatesPerFrame = cf.GetInt(p, (int)v); }, - (s) => { return (float)s.m_maxUpdatesPerFrame; }, - (s,p,l,v) => { s.m_maxUpdatesPerFrame = (int)v; } ), + (s) => { return s.NominalFrameRate; }, + (s,v) => { s.NominalFrameRate = (int)v; } ), + new ParameterDefn("MaxCollisionsPerFrame", "Max collisions returned at end of each frame", + 2048, + (s) => { return s.m_maxCollisionsPerFrame; }, + (s,v) => { s.m_maxCollisionsPerFrame = (int)v; } ), + new ParameterDefn("MaxUpdatesPerFrame", "Max updates returned at end of each frame", + 8000, + (s) => { return s.m_maxUpdatesPerFrame; }, + (s,v) => { s.m_maxUpdatesPerFrame = (int)v; } ), - new ParameterDefn("MinObjectMass", "Minimum object mass (0.0001)", + new ParameterDefn("MinObjectMass", "Minimum object mass (0.0001)", 0.0001f, - (s,cf,p,v) => { MinimumObjectMass = cf.GetFloat(p, v); }, (s) => { return MinimumObjectMass; }, - (s,p,l,v) => { MinimumObjectMass = v; } ), - new ParameterDefn("MaxObjectMass", "Maximum object mass (10000.01)", + (s,v) => { MinimumObjectMass = v; } ), + new ParameterDefn("MaxObjectMass", "Maximum object mass (10000.01)", 10000.01f, - (s,cf,p,v) => { MaximumObjectMass = cf.GetFloat(p, v); }, (s) => { return MaximumObjectMass; }, - (s,p,l,v) => { MaximumObjectMass = v; } ), - new ParameterDefn("MaxLinearVelocity", "Maximum velocity magnitude that can be assigned to an object", + (s,v) => { MaximumObjectMass = v; } ), + new ParameterDefn("MaxLinearVelocity", "Maximum velocity magnitude that can be assigned to an object", 1000.0f, - (s,cf,p,v) => { MaxLinearVelocity = cf.GetFloat(p, v); }, (s) => { return MaxLinearVelocity; }, - (s,p,l,v) => { MaxLinearVelocity = v; } ), - new ParameterDefn("MaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to an object", + (s,v) => { MaxLinearVelocity = v; } ), + new ParameterDefn("MaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to an object", 1000.0f, - (s,cf,p,v) => { MaxAngularVelocity = cf.GetFloat(p, v); }, (s) => { return MaxAngularVelocity; }, - (s,p,l,v) => { MaxAngularVelocity = v; } ), + (s,v) => { MaxAngularVelocity = v; } ), // LL documentation says thie number should be 20f for llApplyImpulse and 200f for llRezObject - new ParameterDefn("MaxAddForceMagnitude", "Maximum force that can be applied by llApplyImpulse (SL says 20f)", + new ParameterDefn("MaxAddForceMagnitude", "Maximum force that can be applied by llApplyImpulse (SL says 20f)", 20000.0f, - (s,cf,p,v) => { MaxAddForceMagnitude = cf.GetFloat(p, v); }, (s) => { return MaxAddForceMagnitude; }, - (s,p,l,v) => { MaxAddForceMagnitude = v; } ), + (s,v) => { MaxAddForceMagnitude = v; } ), // Density is passed around as 100kg/m3. This scales that to 1kg/m3. - new ParameterDefn("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)", + new ParameterDefn("DensityScaleFactor", "Conversion for simulator/viewer density (100kg/m3) to physical density (1kg/m3)", 0.01f, - (s,cf,p,v) => { DensityScaleFactor = cf.GetFloat(p, v); }, (s) => { return DensityScaleFactor; }, - (s,p,l,v) => { DensityScaleFactor = v; } ), + (s,v) => { DensityScaleFactor = v; } ), - new ParameterDefn("PID_D", "Derivitive factor for motion smoothing", + new ParameterDefn("PID_D", "Derivitive factor for motion smoothing", 2200f, - (s,cf,p,v) => { PID_D = cf.GetFloat(p, v); }, (s) => { return (float)PID_D; }, - (s,p,l,v) => { PID_D = v; } ), - new ParameterDefn("PID_P", "Parameteric factor for motion smoothing", + (s,v) => { PID_D = v; } ), + new ParameterDefn("PID_P", "Parameteric factor for motion smoothing", 900f, - (s,cf,p,v) => { PID_P = cf.GetFloat(p, v); }, (s) => { return (float)PID_P; }, - (s,p,l,v) => { PID_P = v; } ), + (s,v) => { PID_P = v; } ), - new ParameterDefn("DefaultFriction", "Friction factor used on new objects", + new ParameterDefn("DefaultFriction", "Friction factor used on new objects", 0.2f, - (s,cf,p,v) => { DefaultFriction = cf.GetFloat(p, v); }, (s) => { return DefaultFriction; }, - (s,p,l,v) => { DefaultFriction = v; s.UnmanagedParams[0].defaultFriction = v; } ), - new ParameterDefn("DefaultDensity", "Density for new objects" , + (s,v) => { DefaultFriction = v; s.UnmanagedParams[0].defaultFriction = v; } ), + new ParameterDefn("DefaultDensity", "Density for new objects" , 10.000006836f, // Aluminum g/cm3 - (s,cf,p,v) => { DefaultDensity = cf.GetFloat(p, v); }, (s) => { return DefaultDensity; }, - (s,p,l,v) => { DefaultDensity = v; s.UnmanagedParams[0].defaultDensity = v; } ), - new ParameterDefn("DefaultRestitution", "Bouncyness of an object" , + (s,v) => { DefaultDensity = v; s.UnmanagedParams[0].defaultDensity = v; } ), + new ParameterDefn("DefaultRestitution", "Bouncyness of an object" , 0f, - (s,cf,p,v) => { DefaultRestitution = cf.GetFloat(p, v); }, (s) => { return DefaultRestitution; }, - (s,p,l,v) => { DefaultRestitution = v; s.UnmanagedParams[0].defaultRestitution = v; } ), - new ParameterDefn("CollisionMargin", "Margin around objects before collisions are calculated (must be zero!)", + (s,v) => { DefaultRestitution = v; s.UnmanagedParams[0].defaultRestitution = v; } ), + new ParameterDefn("CollisionMargin", "Margin around objects before collisions are calculated (must be zero!)", 0.04f, - (s,cf,p,v) => { CollisionMargin = cf.GetFloat(p, v); }, (s) => { return CollisionMargin; }, - (s,p,l,v) => { CollisionMargin = v; s.UnmanagedParams[0].collisionMargin = v; } ), - new ParameterDefn("Gravity", "Vertical force of gravity (negative means down)", + (s,v) => { CollisionMargin = v; s.UnmanagedParams[0].collisionMargin = v; } ), + new ParameterDefn("Gravity", "Vertical force of gravity (negative means down)", -9.80665f, - (s,cf,p,v) => { Gravity = cf.GetFloat(p, v); }, (s) => { return Gravity; }, - (s,p,l,v) => { Gravity = v; s.UnmanagedParams[0].gravity = v; }, - (s,o,v) => { s.PE.SetGravity(o.PhysBody, new Vector3(0f,0f,v)); } ), + (s,v) => { Gravity = v; s.UnmanagedParams[0].gravity = v; }, + (s,o) => { s.PE.SetGravity(o.PhysBody, new Vector3(0f,0f,Gravity)); } ), - new ParameterDefn("LinearDamping", "Factor to damp linear movement per second (0.0 - 1.0)", + new ParameterDefn("LinearDamping", "Factor to damp linear movement per second (0.0 - 1.0)", 0f, - (s,cf,p,v) => { LinearDamping = cf.GetFloat(p, v); }, (s) => { return LinearDamping; }, - (s,p,l,v) => { LinearDamping = v; }, - (s,o,v) => { s.PE.SetDamping(o.PhysBody, v, AngularDamping); } ), - new ParameterDefn("AngularDamping", "Factor to damp angular movement per second (0.0 - 1.0)", + (s,v) => { LinearDamping = v; }, + (s,o) => { s.PE.SetDamping(o.PhysBody, LinearDamping, AngularDamping); } ), + new ParameterDefn("AngularDamping", "Factor to damp angular movement per second (0.0 - 1.0)", 0f, - (s,cf,p,v) => { AngularDamping = cf.GetFloat(p, v); }, (s) => { return AngularDamping; }, - (s,p,l,v) => { AngularDamping = v; }, - (s,o,v) => { s.PE.SetDamping(o.PhysBody, LinearDamping, v); } ), - new ParameterDefn("DeactivationTime", "Seconds before considering an object potentially static", + (s,v) => { AngularDamping = v; }, + (s,o) => { s.PE.SetDamping(o.PhysBody, LinearDamping, AngularDamping); } ), + new ParameterDefn("DeactivationTime", "Seconds before considering an object potentially static", 0.2f, - (s,cf,p,v) => { DeactivationTime = cf.GetFloat(p, v); }, (s) => { return DeactivationTime; }, - (s,p,l,v) => { DeactivationTime = v; }, - (s,o,v) => { s.PE.SetDeactivationTime(o.PhysBody, v); } ), - new ParameterDefn("LinearSleepingThreshold", "Seconds to measure linear movement before considering static", + (s,v) => { DeactivationTime = v; }, + (s,o) => { s.PE.SetDeactivationTime(o.PhysBody, DeactivationTime); } ), + new ParameterDefn("LinearSleepingThreshold", "Seconds to measure linear movement before considering static", 0.8f, - (s,cf,p,v) => { LinearSleepingThreshold = cf.GetFloat(p, v); }, (s) => { return LinearSleepingThreshold; }, - (s,p,l,v) => { LinearSleepingThreshold = v;}, - (s,o,v) => { s.PE.SetSleepingThresholds(o.PhysBody, v, v); } ), - new ParameterDefn("AngularSleepingThreshold", "Seconds to measure angular movement before considering static", + (s,v) => { LinearSleepingThreshold = v;}, + (s,o) => { s.PE.SetSleepingThresholds(o.PhysBody, LinearSleepingThreshold, AngularSleepingThreshold); } ), + new ParameterDefn("AngularSleepingThreshold", "Seconds to measure angular movement before considering static", 1.0f, - (s,cf,p,v) => { AngularSleepingThreshold = cf.GetFloat(p, v); }, (s) => { return AngularSleepingThreshold; }, - (s,p,l,v) => { AngularSleepingThreshold = v;}, - (s,o,v) => { s.PE.SetSleepingThresholds(o.PhysBody, v, v); } ), - new ParameterDefn("CcdMotionThreshold", "Continuious collision detection threshold (0 means no CCD)" , + (s,v) => { AngularSleepingThreshold = v;}, + (s,o) => { s.PE.SetSleepingThresholds(o.PhysBody, LinearSleepingThreshold, AngularSleepingThreshold); } ), + new ParameterDefn("CcdMotionThreshold", "Continuious collision detection threshold (0 means no CCD)" , 0.0f, // set to zero to disable - (s,cf,p,v) => { CcdMotionThreshold = cf.GetFloat(p, v); }, (s) => { return CcdMotionThreshold; }, - (s,p,l,v) => { CcdMotionThreshold = v;}, - (s,o,v) => { s.PE.SetCcdMotionThreshold(o.PhysBody, v); } ), - new ParameterDefn("CcdSweptSphereRadius", "Continuious collision detection test radius" , + (s,v) => { CcdMotionThreshold = v;}, + (s,o) => { s.PE.SetCcdMotionThreshold(o.PhysBody, CcdMotionThreshold); } ), + new ParameterDefn("CcdSweptSphereRadius", "Continuious collision detection test radius" , 0.2f, - (s,cf,p,v) => { CcdSweptSphereRadius = cf.GetFloat(p, v); }, (s) => { return CcdSweptSphereRadius; }, - (s,p,l,v) => { CcdSweptSphereRadius = v;}, - (s,o,v) => { s.PE.SetCcdSweptSphereRadius(o.PhysBody, v); } ), - new ParameterDefn("ContactProcessingThreshold", "Distance above which contacts can be discarded (0 means no discard)" , + (s,v) => { CcdSweptSphereRadius = v;}, + (s,o) => { s.PE.SetCcdSweptSphereRadius(o.PhysBody, CcdSweptSphereRadius); } ), + new ParameterDefn("ContactProcessingThreshold", "Distance above which contacts can be discarded (0 means no discard)" , 0.0f, - (s,cf,p,v) => { ContactProcessingThreshold = cf.GetFloat(p, v); }, (s) => { return ContactProcessingThreshold; }, - (s,p,l,v) => { ContactProcessingThreshold = v;}, - (s,o,v) => { s.PE.SetContactProcessingThreshold(o.PhysBody, v); } ), + (s,v) => { ContactProcessingThreshold = v;}, + (s,o) => { s.PE.SetContactProcessingThreshold(o.PhysBody, ContactProcessingThreshold); } ), - new ParameterDefn("TerrainImplementation", "Type of shape to use for terrain (0=heightmap, 1=mesh)", + new ParameterDefn("TerrainImplementation", "Type of shape to use for terrain (0=heightmap, 1=mesh)", (float)BSTerrainPhys.TerrainImplementation.Mesh, - (s,cf,p,v) => { TerrainImplementation = cf.GetFloat(p,v); }, (s) => { return TerrainImplementation; }, - (s,p,l,v) => { TerrainImplementation = v; } ), - new ParameterDefn("TerrainFriction", "Factor to reduce movement against terrain surface" , + (s,v) => { TerrainImplementation = v; } ), + new ParameterDefn("TerrainFriction", "Factor to reduce movement against terrain surface" , 0.3f, - (s,cf,p,v) => { TerrainFriction = cf.GetFloat(p, v); }, (s) => { return TerrainFriction; }, - (s,p,l,v) => { TerrainFriction = v; /* TODO: set on real terrain */} ), - new ParameterDefn("TerrainHitFraction", "Distance to measure hit collisions" , + (s,v) => { TerrainFriction = v; /* TODO: set on real terrain */} ), + new ParameterDefn("TerrainHitFraction", "Distance to measure hit collisions" , 0.8f, - (s,cf,p,v) => { TerrainHitFraction = cf.GetFloat(p, v); }, (s) => { return TerrainHitFraction; }, - (s,p,l,v) => { TerrainHitFraction = v; /* TODO: set on real terrain */ } ), - new ParameterDefn("TerrainRestitution", "Bouncyness" , + (s,v) => { TerrainHitFraction = v; /* TODO: set on real terrain */ } ), + new ParameterDefn("TerrainRestitution", "Bouncyness" , 0f, - (s,cf,p,v) => { TerrainRestitution = cf.GetFloat(p, v); }, (s) => { return TerrainRestitution; }, - (s,p,l,v) => { TerrainRestitution = v; /* TODO: set on real terrain */ } ), - new ParameterDefn("TerrainCollisionMargin", "Margin where collision checking starts" , + (s,v) => { TerrainRestitution = v; /* TODO: set on real terrain */ } ), + new ParameterDefn("TerrainCollisionMargin", "Margin where collision checking starts" , 0.08f, - (s,cf,p,v) => { TerrainCollisionMargin = cf.GetFloat(p, v); }, (s) => { return TerrainCollisionMargin; }, - (s,p,l,v) => { TerrainCollisionMargin = v; /* TODO: set on real terrain */ } ), + (s,v) => { TerrainCollisionMargin = v; /* TODO: set on real terrain */ } ), - new ParameterDefn("AvatarFriction", "Factor to reduce movement against an avatar. Changed on avatar recreation.", + new ParameterDefn("AvatarFriction", "Factor to reduce movement against an avatar. Changed on avatar recreation.", 0.2f, - (s,cf,p,v) => { AvatarFriction = cf.GetFloat(p, v); }, (s) => { return AvatarFriction; }, - (s,p,l,v) => { AvatarFriction = v; } ), - new ParameterDefn("AvatarStandingFriction", "Avatar friction when standing. Changed on avatar recreation.", + (s,v) => { AvatarFriction = v; } ), + new ParameterDefn("AvatarStandingFriction", "Avatar friction when standing. Changed on avatar recreation.", 0.95f, - (s,cf,p,v) => { AvatarStandingFriction = cf.GetFloat(p, v); }, (s) => { return AvatarStandingFriction; }, - (s,p,l,v) => { AvatarStandingFriction = v; } ), - new ParameterDefn("AvatarAlwaysRunFactor", "Speed multiplier if avatar is set to always run", + (s,v) => { AvatarStandingFriction = v; } ), + new ParameterDefn("AvatarAlwaysRunFactor", "Speed multiplier if avatar is set to always run", 1.3f, - (s,cf,p,v) => { AvatarAlwaysRunFactor = cf.GetFloat(p, v); }, (s) => { return AvatarAlwaysRunFactor; }, - (s,p,l,v) => { AvatarAlwaysRunFactor = v; } ), - new ParameterDefn("AvatarDensity", "Density of an avatar. Changed on avatar recreation.", + (s,v) => { AvatarAlwaysRunFactor = v; } ), + new ParameterDefn("AvatarDensity", "Density of an avatar. Changed on avatar recreation.", 3.5f, - (s,cf,p,v) => { AvatarDensity = cf.GetFloat(p, v); }, (s) => { return AvatarDensity; }, - (s,p,l,v) => { AvatarDensity = v; } ), - new ParameterDefn("AvatarRestitution", "Bouncyness. Changed on avatar recreation.", + (s,v) => { AvatarDensity = v; } ), + new ParameterDefn("AvatarRestitution", "Bouncyness. Changed on avatar recreation.", 0f, - (s,cf,p,v) => { AvatarRestitution = cf.GetFloat(p, v); }, (s) => { return AvatarRestitution; }, - (s,p,l,v) => { AvatarRestitution = v; } ), - new ParameterDefn("AvatarCapsuleWidth", "The distance between the sides of the avatar capsule", + (s,v) => { AvatarRestitution = v; } ), + new ParameterDefn("AvatarCapsuleWidth", "The distance between the sides of the avatar capsule", 0.6f, - (s,cf,p,v) => { AvatarCapsuleWidth = cf.GetFloat(p, v); }, (s) => { return AvatarCapsuleWidth; }, - (s,p,l,v) => { AvatarCapsuleWidth = v; } ), - new ParameterDefn("AvatarCapsuleDepth", "The distance between the front and back of the avatar capsule", + (s,v) => { AvatarCapsuleWidth = v; } ), + new ParameterDefn("AvatarCapsuleDepth", "The distance between the front and back of the avatar capsule", 0.45f, - (s,cf,p,v) => { AvatarCapsuleDepth = cf.GetFloat(p, v); }, (s) => { return AvatarCapsuleDepth; }, - (s,p,l,v) => { AvatarCapsuleDepth = v; } ), - new ParameterDefn("AvatarCapsuleHeight", "Default height of space around avatar", + (s,v) => { AvatarCapsuleDepth = v; } ), + new ParameterDefn("AvatarCapsuleHeight", "Default height of space around avatar", 1.5f, - (s,cf,p,v) => { AvatarCapsuleHeight = cf.GetFloat(p, v); }, (s) => { return AvatarCapsuleHeight; }, - (s,p,l,v) => { AvatarCapsuleHeight = v; } ), - new ParameterDefn("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions", + (s,v) => { AvatarCapsuleHeight = v; } ), + new ParameterDefn("AvatarContactProcessingThreshold", "Distance from capsule to check for collisions", 0.1f, - (s,cf,p,v) => { AvatarContactProcessingThreshold = cf.GetFloat(p, v); }, (s) => { return AvatarContactProcessingThreshold; }, - (s,p,l,v) => { AvatarContactProcessingThreshold = v; } ), - new ParameterDefn("AvatarStepHeight", "Height of a step obstacle to consider step correction", + (s,v) => { AvatarContactProcessingThreshold = v; } ), + new ParameterDefn("AvatarStepHeight", "Height of a step obstacle to consider step correction", 0.3f, - (s,cf,p,v) => { AvatarStepHeight = cf.GetFloat(p, v); }, (s) => { return AvatarStepHeight; }, - (s,p,l,v) => { AvatarStepHeight = v; } ), - new ParameterDefn("AvatarStepApproachFactor", "Factor to control angle of approach to step (0=straight on)", + (s,v) => { AvatarStepHeight = v; } ), + new ParameterDefn("AvatarStepApproachFactor", "Factor to control angle of approach to step (0=straight on)", 0.6f, - (s,cf,p,v) => { AvatarStepApproachFactor = cf.GetFloat(p, v); }, (s) => { return AvatarStepApproachFactor; }, - (s,p,l,v) => { AvatarStepApproachFactor = v; } ), - new ParameterDefn("AvatarStepForceFactor", "Controls the amount of force up applied to step up onto a step", + (s,v) => { AvatarStepApproachFactor = v; } ), + new ParameterDefn("AvatarStepForceFactor", "Controls the amount of force up applied to step up onto a step", 2.0f, - (s,cf,p,v) => { AvatarStepForceFactor = cf.GetFloat(p, v); }, (s) => { return AvatarStepForceFactor; }, - (s,p,l,v) => { AvatarStepForceFactor = v; } ), + (s,v) => { AvatarStepForceFactor = v; } ), - new ParameterDefn("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle", + new ParameterDefn("VehicleMaxLinearVelocity", "Maximum velocity magnitude that can be assigned to a vehicle", 1000.0f, - (s,cf,p,v) => { VehicleMaxLinearVelocity = cf.GetFloat(p, v); }, (s) => { return (float)VehicleMaxLinearVelocity; }, - (s,p,l,v) => { VehicleMaxLinearVelocity = v; VehicleMaxLinearVelocitySq = v * v; } ), - new ParameterDefn("VehicleMaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to a vehicle", + (s,v) => { VehicleMaxLinearVelocity = v; VehicleMaxLinearVelocitySq = v * v; } ), + new ParameterDefn("VehicleMaxAngularVelocity", "Maximum rotational velocity magnitude that can be assigned to a vehicle", 12.0f, - (s,cf,p,v) => { VehicleMaxAngularVelocity = cf.GetFloat(p, v); }, (s) => { return (float)VehicleMaxAngularVelocity; }, - (s,p,l,v) => { VehicleMaxAngularVelocity = v; VehicleMaxAngularVelocitySq = v * v; } ), - new ParameterDefn("VehicleAngularDamping", "Factor to damp vehicle angular movement per second (0.0 - 1.0)", + (s,v) => { VehicleMaxAngularVelocity = v; VehicleMaxAngularVelocitySq = v * v; } ), + new ParameterDefn("VehicleAngularDamping", "Factor to damp vehicle angular movement per second (0.0 - 1.0)", 0.0f, - (s,cf,p,v) => { VehicleAngularDamping = cf.GetFloat(p, v); }, (s) => { return VehicleAngularDamping; }, - (s,p,l,v) => { VehicleAngularDamping = v; } ), - new ParameterDefn("VehicleLinearFactor", "Fraction of physical linear changes applied to vehicle (0.0 - 1.0)", - 1.0f, - (s,cf,p,v) => { VehicleLinearFactor = cf.GetFloat(p, v); }, + (s,v) => { VehicleAngularDamping = v; } ), + new ParameterDefn("VehicleLinearFactor", "Fraction of physical linear changes applied to vehicle (<0,0,0> to <1,1,1>)", + new Vector3(1f, 1f, 1f), (s) => { return VehicleLinearFactor; }, - (s,p,l,v) => { VehicleLinearFactor = v; VehicleLinearFactorV = new Vector3(v, v, v); } ), - new ParameterDefn("VehicleAngularFactor", "Fraction of physical angular changes applied to vehicle (0.0 - 1.0)", - 1.0f, - (s,cf,p,v) => { VehicleAngularFactor = cf.GetFloat(p, v); }, + (s,v) => { VehicleLinearFactor = v; } ), + new ParameterDefn("VehicleAngularFactor", "Fraction of physical angular changes applied to vehicle (<0,0,0> to <1,1,1>)", + new Vector3(1f, 1f, 1f), (s) => { return VehicleAngularFactor; }, - (s,p,l,v) => { VehicleAngularFactor = v; VehicleAngularFactorV = new Vector3(v, v, v); } ), - new ParameterDefn("VehicleFriction", "Friction of vehicle on the ground (0.0 - 1.0)", + (s,v) => { VehicleAngularFactor = v; } ), + new ParameterDefn("VehicleFriction", "Friction of vehicle on the ground (0.0 - 1.0)", 0.0f, - (s,cf,p,v) => { VehicleFriction = cf.GetFloat(p, v); }, (s) => { return VehicleFriction; }, - (s,p,l,v) => { VehicleFriction = v; } ), - new ParameterDefn("VehicleRestitution", "Bouncyness factor for vehicles (0.0 - 1.0)", + (s,v) => { VehicleFriction = v; } ), + new ParameterDefn("VehicleRestitution", "Bouncyness factor for vehicles (0.0 - 1.0)", 0.0f, - (s,cf,p,v) => { VehicleRestitution = cf.GetFloat(p, v); }, (s) => { return VehicleRestitution; }, - (s,p,l,v) => { VehicleRestitution = v; } ), - new ParameterDefn("VehicleGroundGravityFudge", "Factor to multiple gravity if a ground vehicle is probably on the ground (0.0 - 1.0)", + (s,v) => { VehicleRestitution = v; } ), + new ParameterDefn("VehicleGroundGravityFudge", "Factor to multiple gravity if a ground vehicle is probably on the ground (0.0 - 1.0)", 0.2f, - (s,cf,p,v) => { VehicleGroundGravityFudge = cf.GetFloat(p, v); }, (s) => { return VehicleGroundGravityFudge; }, - (s,p,l,v) => { VehicleGroundGravityFudge = v; } ), - new ParameterDefn("VehicleDebuggingEnable", "Turn on/off vehicle debugging", - ConfigurationParameters.numericFalse, - (s,cf,p,v) => { VehicleDebuggingEnabled = BSParam.NumericBool(cf.GetBoolean(p, BSParam.BoolNumeric(v))); }, + (s,v) => { VehicleGroundGravityFudge = v; } ), + new ParameterDefn("VehicleDebuggingEnable", "Turn on/off vehicle debugging", + false, (s) => { return VehicleDebuggingEnabled; }, - (s,p,l,v) => { VehicleDebuggingEnabled = v; } ), + (s,v) => { VehicleDebuggingEnabled = v; } ), - new ParameterDefn("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)", + new ParameterDefn("MaxPersistantManifoldPoolSize", "Number of manifolds pooled (0 means default of 4096)", 0f, - (s,cf,p,v) => { MaxPersistantManifoldPoolSize = cf.GetFloat(p, v); }, (s) => { return MaxPersistantManifoldPoolSize; }, - (s,p,l,v) => { MaxPersistantManifoldPoolSize = v; s.UnmanagedParams[0].maxPersistantManifoldPoolSize = v; } ), - new ParameterDefn("MaxCollisionAlgorithmPoolSize", "Number of collisions pooled (0 means default of 4096)", + (s,v) => { MaxPersistantManifoldPoolSize = v; s.UnmanagedParams[0].maxPersistantManifoldPoolSize = v; } ), + new ParameterDefn("MaxCollisionAlgorithmPoolSize", "Number of collisions pooled (0 means default of 4096)", 0f, - (s,cf,p,v) => { MaxCollisionAlgorithmPoolSize = cf.GetFloat(p, v); }, (s) => { return MaxCollisionAlgorithmPoolSize; }, - (s,p,l,v) => { MaxCollisionAlgorithmPoolSize = v; s.UnmanagedParams[0].maxCollisionAlgorithmPoolSize = v; } ), - new ParameterDefn("ShouldDisableContactPoolDynamicAllocation", "Enable to allow large changes in object count", - ConfigurationParameters.numericFalse, - (s,cf,p,v) => { ShouldDisableContactPoolDynamicAllocation = BSParam.NumericBool(cf.GetBoolean(p, BSParam.BoolNumeric(v))); }, + (s,v) => { MaxCollisionAlgorithmPoolSize = v; s.UnmanagedParams[0].maxCollisionAlgorithmPoolSize = v; } ), + new ParameterDefn("ShouldDisableContactPoolDynamicAllocation", "Enable to allow large changes in object count", + false, (s) => { return ShouldDisableContactPoolDynamicAllocation; }, - (s,p,l,v) => { ShouldDisableContactPoolDynamicAllocation = v; s.UnmanagedParams[0].shouldDisableContactPoolDynamicAllocation = v; } ), - new ParameterDefn("ShouldForceUpdateAllAabbs", "Enable to recomputer AABBs every simulator step", - ConfigurationParameters.numericFalse, - (s,cf,p,v) => { ShouldForceUpdateAllAabbs = BSParam.NumericBool(cf.GetBoolean(p, BSParam.BoolNumeric(v))); }, + (s,v) => { ShouldDisableContactPoolDynamicAllocation = v; + s.UnmanagedParams[0].shouldDisableContactPoolDynamicAllocation = NumericBool(v); } ), + new ParameterDefn("ShouldForceUpdateAllAabbs", "Enable to recomputer AABBs every simulator step", + false, (s) => { return ShouldForceUpdateAllAabbs; }, - (s,p,l,v) => { ShouldForceUpdateAllAabbs = v; s.UnmanagedParams[0].shouldForceUpdateAllAabbs = v; } ), - new ParameterDefn("ShouldRandomizeSolverOrder", "Enable for slightly better stacking interaction", - ConfigurationParameters.numericTrue, - (s,cf,p,v) => { ShouldRandomizeSolverOrder = BSParam.NumericBool(cf.GetBoolean(p, BSParam.BoolNumeric(v))); }, + (s,v) => { ShouldForceUpdateAllAabbs = v; s.UnmanagedParams[0].shouldForceUpdateAllAabbs = NumericBool(v); } ), + new ParameterDefn("ShouldRandomizeSolverOrder", "Enable for slightly better stacking interaction", + true, (s) => { return ShouldRandomizeSolverOrder; }, - (s,p,l,v) => { ShouldRandomizeSolverOrder = v; s.UnmanagedParams[0].shouldRandomizeSolverOrder = v; } ), - new ParameterDefn("ShouldSplitSimulationIslands", "Enable splitting active object scanning islands", - ConfigurationParameters.numericTrue, - (s,cf,p,v) => { ShouldSplitSimulationIslands = BSParam.NumericBool(cf.GetBoolean(p, BSParam.BoolNumeric(v))); }, + (s,v) => { ShouldRandomizeSolverOrder = v; s.UnmanagedParams[0].shouldRandomizeSolverOrder = NumericBool(v); } ), + new ParameterDefn("ShouldSplitSimulationIslands", "Enable splitting active object scanning islands", + true, (s) => { return ShouldSplitSimulationIslands; }, - (s,p,l,v) => { ShouldSplitSimulationIslands = v; s.UnmanagedParams[0].shouldSplitSimulationIslands = v; } ), - new ParameterDefn("ShouldEnableFrictionCaching", "Enable friction computation caching", - ConfigurationParameters.numericTrue, - (s,cf,p,v) => { ShouldEnableFrictionCaching = BSParam.NumericBool(cf.GetBoolean(p, BSParam.BoolNumeric(v))); }, + (s,v) => { ShouldSplitSimulationIslands = v; s.UnmanagedParams[0].shouldSplitSimulationIslands = NumericBool(v); } ), + new ParameterDefn("ShouldEnableFrictionCaching", "Enable friction computation caching", + true, (s) => { return ShouldEnableFrictionCaching; }, - (s,p,l,v) => { ShouldEnableFrictionCaching = v; s.UnmanagedParams[0].shouldEnableFrictionCaching = v; } ), - new ParameterDefn("NumberOfSolverIterations", "Number of internal iterations (0 means default)", + (s,v) => { ShouldEnableFrictionCaching = v; s.UnmanagedParams[0].shouldEnableFrictionCaching = NumericBool(v); } ), + new ParameterDefn("NumberOfSolverIterations", "Number of internal iterations (0 means default)", 0f, // zero says use Bullet default - (s,cf,p,v) => { NumberOfSolverIterations = cf.GetFloat(p, v); }, (s) => { return NumberOfSolverIterations; }, - (s,p,l,v) => { NumberOfSolverIterations = v; s.UnmanagedParams[0].numberOfSolverIterations = v; } ), - new ParameterDefn("UseSingleSidedMeshes", "Whether to compute collisions based on single sided meshes.", - ConfigurationParameters.numericTrue, - (s,cf,p,v) => { UseSingleSidedMeshesF = BSParam.NumericBool(cf.GetBoolean(p, BSParam.BoolNumeric(v))); }, - (s) => { return UseSingleSidedMeshesF; }, - (s,p,l,v) => { UseSingleSidedMeshesF = v; s.UnmanagedParams[0].useSingleSidedMeshes = v; } ), - new ParameterDefn("GlobalContactBreakingThreshold", "Amount of shape radius before breaking a collision contact (0 says Bullet default (0.2))", + (s,v) => { NumberOfSolverIterations = v; s.UnmanagedParams[0].numberOfSolverIterations = v; } ), + new ParameterDefn("UseSingleSidedMeshes", "Whether to compute collisions based on single sided meshes.", + true, + (s) => { return UseSingleSidedMeshes; }, + (s,v) => { UseSingleSidedMeshes = v; s.UnmanagedParams[0].useSingleSidedMeshes = NumericBool(v); } ), + new ParameterDefn("GlobalContactBreakingThreshold", "Amount of shape radius before breaking a collision contact (0 says Bullet default (0.2))", 0f, - (s,cf,p,v) => { GlobalContactBreakingThreshold = cf.GetFloat(p, v); }, (s) => { return GlobalContactBreakingThreshold; }, - (s,p,l,v) => { GlobalContactBreakingThreshold = v; s.UnmanagedParams[0].globalContactBreakingThreshold = v; } ), + (s,v) => { GlobalContactBreakingThreshold = v; s.UnmanagedParams[0].globalContactBreakingThreshold = v; } ), - new ParameterDefn("LinksetImplementation", "Type of linkset implementation (0=Constraint, 1=Compound, 2=Manual)", + new ParameterDefn("LinksetImplementation", "Type of linkset implementation (0=Constraint, 1=Compound, 2=Manual)", (float)BSLinkset.LinksetImplementation.Compound, - (s,cf,p,v) => { LinksetImplementation = cf.GetFloat(p,v); }, (s) => { return LinksetImplementation; }, - (s,p,l,v) => { LinksetImplementation = v; } ), - new ParameterDefn("LinkConstraintUseFrameOffset", "For linksets built with constraints, enable frame offsetFor linksets built with constraints, enable frame offset.", - ConfigurationParameters.numericFalse, - (s,cf,p,v) => { LinkConstraintUseFrameOffset = BSParam.NumericBool(cf.GetBoolean(p, BSParam.BoolNumeric(v))); }, + (s,v) => { LinksetImplementation = v; } ), + new ParameterDefn("LinkConstraintUseFrameOffset", "For linksets built with constraints, enable frame offsetFor linksets built with constraints, enable frame offset.", + false, (s) => { return LinkConstraintUseFrameOffset; }, - (s,p,l,v) => { LinkConstraintUseFrameOffset = v; } ), - new ParameterDefn("LinkConstraintEnableTransMotor", "Whether to enable translational motor on linkset constraints", - ConfigurationParameters.numericTrue, - (s,cf,p,v) => { LinkConstraintEnableTransMotor = BSParam.NumericBool(cf.GetBoolean(p, BSParam.BoolNumeric(v))); }, + (s,v) => { LinkConstraintUseFrameOffset = v; } ), + new ParameterDefn("LinkConstraintEnableTransMotor", "Whether to enable translational motor on linkset constraints", + true, (s) => { return LinkConstraintEnableTransMotor; }, - (s,p,l,v) => { LinkConstraintEnableTransMotor = v; } ), - new ParameterDefn("LinkConstraintTransMotorMaxVel", "Maximum velocity to be applied by translational motor in linkset constraints", + (s,v) => { LinkConstraintEnableTransMotor = v; } ), + new ParameterDefn("LinkConstraintTransMotorMaxVel", "Maximum velocity to be applied by translational motor in linkset constraints", 5.0f, - (s,cf,p,v) => { LinkConstraintTransMotorMaxVel = cf.GetFloat(p, v); }, (s) => { return LinkConstraintTransMotorMaxVel; }, - (s,p,l,v) => { LinkConstraintTransMotorMaxVel = v; } ), - new ParameterDefn("LinkConstraintTransMotorMaxForce", "Maximum force to be applied by translational motor in linkset constraints", + (s,v) => { LinkConstraintTransMotorMaxVel = v; } ), + new ParameterDefn("LinkConstraintTransMotorMaxForce", "Maximum force to be applied by translational motor in linkset constraints", 0.1f, - (s,cf,p,v) => { LinkConstraintTransMotorMaxForce = cf.GetFloat(p, v); }, (s) => { return LinkConstraintTransMotorMaxForce; }, - (s,p,l,v) => { LinkConstraintTransMotorMaxForce = v; } ), - new ParameterDefn("LinkConstraintCFM", "Amount constraint can be violated. 0=no violation, 1=infinite. Default=0.1", + (s,v) => { LinkConstraintTransMotorMaxForce = v; } ), + new ParameterDefn("LinkConstraintCFM", "Amount constraint can be violated. 0=no violation, 1=infinite. Default=0.1", 0.1f, - (s,cf,p,v) => { LinkConstraintCFM = cf.GetFloat(p, v); }, (s) => { return LinkConstraintCFM; }, - (s,p,l,v) => { LinkConstraintCFM = v; } ), - new ParameterDefn("LinkConstraintERP", "Amount constraint is corrected each tick. 0=none, 1=all. Default = 0.2", + (s,v) => { LinkConstraintCFM = v; } ), + new ParameterDefn("LinkConstraintERP", "Amount constraint is corrected each tick. 0=none, 1=all. Default = 0.2", 0.1f, - (s,cf,p,v) => { LinkConstraintERP = cf.GetFloat(p, v); }, (s) => { return LinkConstraintERP; }, - (s,p,l,v) => { LinkConstraintERP = v; } ), - new ParameterDefn("LinkConstraintSolverIterations", "Number of solver iterations when computing constraint. (0 = Bullet default)", + (s,v) => { LinkConstraintERP = v; } ), + new ParameterDefn("LinkConstraintSolverIterations", "Number of solver iterations when computing constraint. (0 = Bullet default)", 40, - (s,cf,p,v) => { LinkConstraintSolverIterations = cf.GetFloat(p, v); }, (s) => { return LinkConstraintSolverIterations; }, - (s,p,l,v) => { LinkConstraintSolverIterations = v; } ), + (s,v) => { LinkConstraintSolverIterations = v; } ), - new ParameterDefn("PhysicsMetricFrames", "Frames between outputting detailed phys metrics. (0 is off)", + new ParameterDefn("PhysicsMetricFrames", "Frames between outputting detailed phys metrics. (0 is off)", + 0, + (s) => { return s.PhysicsMetricDumpFrames; }, + (s,v) => { s.PhysicsMetricDumpFrames = v; } ), + new ParameterDefn("ResetBroadphasePool", "Setting this is any value resets the broadphase collision pool", 0f, - (s,cf,p,v) => { s.PhysicsMetricDumpFrames = cf.GetFloat(p, (int)v); }, - (s) => { return (float)s.PhysicsMetricDumpFrames; }, - (s,p,l,v) => { s.PhysicsMetricDumpFrames = (int)v; } ), - new ParameterDefn("ResetBroadphasePool", "Setting this is any value resets the broadphase collision pool", - 0f, - (s,cf,p,v) => { ; }, (s) => { return 0f; }, - (s,p,l,v) => { BSParam.ResetBroadphasePoolTainted(s, v); } ), - new ParameterDefn("ResetConstraintSolver", "Setting this is any value resets the constraint solver", + (s,v) => { BSParam.ResetBroadphasePoolTainted(s, v); } ), + new ParameterDefn("ResetConstraintSolver", "Setting this is any value resets the constraint solver", 0f, - (s,cf,p,v) => { ; }, (s) => { return 0f; }, - (s,p,l,v) => { BSParam.ResetConstraintSolverTainted(s, v); } ), + (s,v) => { BSParam.ResetConstraintSolverTainted(s, v); } ), }; // Convert a boolean to our numeric true and false values @@ -658,13 +636,13 @@ public static class BSParam // ParameterDefn structure. // Case does not matter as names are compared after converting to lower case. // Returns 'false' if the parameter is not found. - internal static bool TryGetParameter(string paramName, out ParameterDefn defn) + internal static bool TryGetParameter(string paramName, out ParameterDefnBase defn) { bool ret = false; - ParameterDefn foundDefn = new ParameterDefn(); + ParameterDefnBase foundDefn = null; string pName = paramName.ToLower(); - foreach (ParameterDefn parm in ParameterDefinitions) + foreach (ParameterDefnBase parm in ParameterDefinitions) { if (pName == parm.name.ToLower()) { @@ -680,18 +658,18 @@ public static class BSParam // Pass through the settable parameters and set the default values internal static void SetParameterDefaultValues(BSScene physicsScene) { - foreach (ParameterDefn parm in ParameterDefinitions) + foreach (ParameterDefnBase parm in ParameterDefinitions) { - parm.setter(physicsScene, parm.name, PhysParameterEntry.APPLY_TO_NONE, parm.defaultValue); + parm.AssignDefault(physicsScene); } } // Get user set values out of the ini file. internal static void SetParameterConfigurationValues(BSScene physicsScene, IConfig cfg) { - foreach (ParameterDefn parm in ParameterDefinitions) + foreach (ParameterDefnBase parm in ParameterDefinitions) { - parm.userParam(physicsScene, cfg, parm.name, parm.defaultValue); + parm.SetValue(physicsScene, cfg.GetString(parm.name, parm.GetValue(physicsScene))); } } @@ -706,11 +684,11 @@ public static class BSParam List entries = new List(); for (int ii = 0; ii < ParameterDefinitions.Length; ii++) { - ParameterDefn pd = ParameterDefinitions[ii]; + ParameterDefnBase pd = ParameterDefinitions[ii]; entries.Add(new PhysParameterEntry(pd.name, pd.desc)); } - // make the list alphabetical for estetic reasons + // make the list alphabetical for ease of finding anything entries.Sort((ppe1, ppe2) => { return ppe1.name.CompareTo(ppe2.name); }); SettableParameters = entries.ToArray(); diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs index 05722b8c34..e6aefd52ec 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs @@ -161,7 +161,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters private int m_physicsLoggingFileMinutes; private bool m_physicsLoggingDoFlush; private bool m_physicsPhysicalDumpEnabled; - public float PhysicsMetricDumpFrames { get; set; } + public int PhysicsMetricDumpFrames { get; set; } // 'true' of the vehicle code is to log lots of details public bool VehicleLoggingEnabled { get; private set; } public bool VehiclePhysicalLoggingEnabled { get; private set; } @@ -542,7 +542,7 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters collidersCount = 0; } - if ((m_simulationStep % PhysicsMetricDumpFrames) == 0) + if (PhysicsMetricDumpFrames != 0 && ((m_simulationStep % PhysicsMetricDumpFrames) == 0)) PE.DumpPhysicsStatistics(World); // Get a value for 'now' so all the collision and update routines don't have to get their own. @@ -880,38 +880,14 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters { bool ret = false; - float valf = 0f; - if (val.ToLower() == "true") - { - valf = PhysParameterEntry.NUMERIC_TRUE; - } - else - { - if (val.ToLower() == "false") - { - valf = PhysParameterEntry.NUMERIC_FALSE; - } - else - { - try - { - valf = float.Parse(val); - } - catch - { - valf = 0f; - } - } - } - - BSParam.ParameterDefn theParam; + BSParam.ParameterDefnBase theParam; if (BSParam.TryGetParameter(parm, out theParam)) { // Set the value in the C# code - theParam.setter(this, parm, localID, valf); + theParam.SetValue(this, val); // Optionally set the parameter in the unmanaged code - if (theParam.onObject != null) + if (theParam.HasSetOnObject) { // update all the localIDs specified // If the local ID is APPLY_TO_NONE, just change the default value @@ -923,16 +899,16 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters case PhysParameterEntry.APPLY_TO_NONE: // This will cause a call into the physical world if some operation is specified (SetOnObject). objectIDs.Add(TERRAIN_ID); - TaintedUpdateParameter(parm, objectIDs, valf); + TaintedUpdateParameter(parm, objectIDs, val); break; case PhysParameterEntry.APPLY_TO_ALL: lock (PhysObjects) objectIDs = new List(PhysObjects.Keys); - TaintedUpdateParameter(parm, objectIDs, valf); + TaintedUpdateParameter(parm, objectIDs, val); break; default: // setting only one localID objectIDs.Add(localID); - TaintedUpdateParameter(parm, objectIDs, valf); + TaintedUpdateParameter(parm, objectIDs, val); break; } } @@ -943,22 +919,22 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters } // schedule the actual updating of the paramter to when the phys engine is not busy - private void TaintedUpdateParameter(string parm, List lIDs, float val) + private void TaintedUpdateParameter(string parm, List lIDs, string val) { - float xval = val; + string xval = val; List xlIDs = lIDs; string xparm = parm; TaintedObject("BSScene.UpdateParameterSet", delegate() { - BSParam.ParameterDefn thisParam; + BSParam.ParameterDefnBase thisParam; if (BSParam.TryGetParameter(xparm, out thisParam)) { - if (thisParam.onObject != null) + if (thisParam.HasSetOnObject) { foreach (uint lID in xlIDs) { BSPhysObject theObject = null; if (PhysObjects.TryGetValue(lID, out theObject)) - thisParam.onObject(this, theObject, xval); + thisParam.SetOnObject(this, theObject); } } } @@ -971,10 +947,10 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters { string val = String.Empty; bool ret = false; - BSParam.ParameterDefn theParam; + BSParam.ParameterDefnBase theParam; if (BSParam.TryGetParameter(parm, out theParam)) { - val = theParam.getter(this).ToString(); + val = theParam.GetValue(this); ret = true; } value = val; From 1d7276235ace0ed6b7701efa36a7fd7f1b552bab Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Sun, 17 Feb 2013 20:07:04 -0800 Subject: [PATCH 05/30] BulletSim: add calls for creating all the different Bullet constraint types. Updated the DLLs and SOs and code for BulletXNA to create the types. All the detailed control calls are not all in place yet. --- .../Physics/BulletSPlugin/BSAPIUnman.cs | 102 ++++++++ .../Region/Physics/BulletSPlugin/BSAPIXNA.cs | 227 ++++++++++++++---- .../Physics/BulletSPlugin/BSApiTemplate.cs | 27 +++ .../Physics/BulletSPlugin/BSConstraint6Dof.cs | 16 ++ .../BulletSPlugin/BSConstraintCollection.cs | 13 +- bin/lib32/BulletSim.dll | Bin 546816 -> 570368 bytes bin/lib32/libBulletSim.so | Bin 1700826 -> 1751260 bytes bin/lib64/BulletSim.dll | Bin 694784 -> 720896 bytes bin/lib64/libBulletSim.so | Bin 1843498 -> 1908442 bytes 9 files changed, 338 insertions(+), 47 deletions(-) diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSAPIUnman.cs b/OpenSim/Region/Physics/BulletSPlugin/BSAPIUnman.cs index ae54499716..3a27d2c605 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSAPIUnman.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSAPIUnman.cs @@ -438,6 +438,28 @@ public override BulletConstraint Create6DofConstraintToPoint(BulletWorld world, joinPoint, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies)); } +public override BulletConstraint Create6DofConstraintFixed(BulletWorld world, BulletBody obj1, + Vector3 frameInBloc, Quaternion frameInBrot, + bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies) +{ + BulletWorldUnman worldu = world as BulletWorldUnman; + BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman; + return new BulletConstraintUnman(BSAPICPP.Create6DofConstraintFixed2(worldu.ptr, bodyu1.ptr, + frameInBloc, frameInBrot, useLinearReferenceFrameB, disableCollisionsBetweenLinkedBodies)); +} + +public override BulletConstraint Create6DofSpringConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 frame1loc, Quaternion frame1rot, + Vector3 frame2loc, Quaternion frame2rot, + bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies) +{ + BulletWorldUnman worldu = world as BulletWorldUnman; + BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman; + BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman; + return new BulletConstraintUnman(BSAPICPP.Create6DofSpringConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, frame1loc, frame1rot, + frame2loc, frame2rot, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies)); +} + public override BulletConstraint CreateHingeConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, Vector3 pivotinA, Vector3 pivotinB, Vector3 axisInA, Vector3 axisInB, @@ -450,6 +472,52 @@ public override BulletConstraint CreateHingeConstraint(BulletWorld world, Bullet pivotinA, pivotinB, axisInA, axisInB, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies)); } +public override BulletConstraint CreateSliderConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 frame1loc, Quaternion frame1rot, + Vector3 frame2loc, Quaternion frame2rot, + bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies) +{ + BulletWorldUnman worldu = world as BulletWorldUnman; + BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman; + BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman; + return new BulletConstraintUnman(BSAPICPP.CreateSliderConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, frame1loc, frame1rot, + frame2loc, frame2rot, useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies)); +} + +public override BulletConstraint CreateConeTwistConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 frame1loc, Quaternion frame1rot, + Vector3 frame2loc, Quaternion frame2rot, + bool disableCollisionsBetweenLinkedBodies) +{ + BulletWorldUnman worldu = world as BulletWorldUnman; + BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman; + BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman; + return new BulletConstraintUnman(BSAPICPP.CreateConeTwistConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, frame1loc, frame1rot, + frame2loc, frame2rot, disableCollisionsBetweenLinkedBodies)); +} + +public override BulletConstraint CreateGearConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 axisInA, Vector3 axisInB, + float ratio, bool disableCollisionsBetweenLinkedBodies) +{ + BulletWorldUnman worldu = world as BulletWorldUnman; + BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman; + BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman; + return new BulletConstraintUnman(BSAPICPP.CreateGearConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, axisInA, axisInB, + ratio, disableCollisionsBetweenLinkedBodies)); +} + +public override BulletConstraint CreatePoint2PointConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 pivotInA, Vector3 pivotInB, + bool disableCollisionsBetweenLinkedBodies) +{ + BulletWorldUnman worldu = world as BulletWorldUnman; + BulletBodyUnman bodyu1 = obj1 as BulletBodyUnman; + BulletBodyUnman bodyu2 = obj2 as BulletBodyUnman; + return new BulletConstraintUnman(BSAPICPP.CreatePoint2PointConstraint2(worldu.ptr, bodyu1.ptr, bodyu2.ptr, pivotInA, pivotInB, + disableCollisionsBetweenLinkedBodies)); +} + public override void SetConstraintEnable(BulletConstraint constrain, float numericTrueFalse) { BulletConstraintUnman constrainu = constrain as BulletConstraintUnman; @@ -1425,12 +1493,46 @@ public static extern IntPtr Create6DofConstraintToPoint2(IntPtr world, IntPtr ob Vector3 joinPoint, bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); +[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] +public static extern IntPtr Create6DofConstraintFixed2(IntPtr world, IntPtr obj1, + Vector3 frameInBloc, Quaternion frameInBrot, + bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies); + +[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] +public static extern IntPtr Create6DofSpringConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2, + Vector3 frame1loc, Quaternion frame1rot, + Vector3 frame2loc, Quaternion frame2rot, + bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); + [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] public static extern IntPtr CreateHingeConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2, Vector3 pivotinA, Vector3 pivotinB, Vector3 axisInA, Vector3 axisInB, bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); +[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] +public static extern IntPtr CreateSliderConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2, + Vector3 frameInAloc, Quaternion frameInArot, + Vector3 frameInBloc, Quaternion frameInBrot, + bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); + +[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] +public static extern IntPtr CreateConeTwistConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2, + Vector3 frameInAloc, Quaternion frameInArot, + Vector3 frameInBloc, Quaternion frameInBrot, + bool disableCollisionsBetweenLinkedBodies); + +[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] +public static extern IntPtr CreateGearConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2, + Vector3 axisInA, Vector3 axisInB, + float ratio, bool disableCollisionsBetweenLinkedBodies); + +[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] +public static extern IntPtr CreatePoint2PointConstraint2(IntPtr world, IntPtr obj1, IntPtr obj2, + Vector3 pivotInA, Vector3 pivotInB, + bool disableCollisionsBetweenLinkedBodies); + + [DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] public static extern void SetConstraintEnable2(IntPtr constrain, float numericTrueFalse); diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs index 15fa52b59a..6fc10e95ce 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSAPIXNA.cs @@ -559,8 +559,9 @@ private sealed class BulletConstraintXNA : BulletConstraint } - //BulletSimAPI.Create6DofConstraint(m_world.ptr, m_body1.ptr, m_body2.ptr,frame1, frame1rot,frame2, frame2rot,useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies)); - public override BulletConstraint Create6DofConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot, bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) + public override BulletConstraint Create6DofConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, + Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot, + bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) { DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; @@ -584,7 +585,24 @@ private sealed class BulletConstraintXNA : BulletConstraint return new BulletConstraintXNA(consttr); } - + public override BulletConstraint Create6DofConstraintFixed(BulletWorld pWorld, BulletBody pBody1, + Vector3 pframe1, Quaternion pframe1rot, + bool pUseLinearReferenceFrameB, bool pdisableCollisionsBetweenLinkedBodies) + { + DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; + RigidBody body1 = (pBody1 as BulletBodyXNA).rigidBody; + IndexedVector3 frame1v = new IndexedVector3(pframe1.X, pframe1.Y, pframe1.Z); + IndexedQuaternion frame1rot = new IndexedQuaternion(pframe1rot.X, pframe1rot.Y, pframe1rot.Z, pframe1rot.W); + IndexedMatrix frame1 = IndexedMatrix.CreateFromQuaternion(frame1rot); + frame1._origin = frame1v; + + Generic6DofConstraint consttr = new Generic6DofConstraint(body1, ref frame1, pUseLinearReferenceFrameB); + consttr.CalculateTransforms(); + world.AddConstraint(consttr,pdisableCollisionsBetweenLinkedBodies); + + return new BulletConstraintXNA(consttr); + } + /// /// /// @@ -1443,129 +1461,130 @@ private sealed class BulletConstraintXNA : BulletConstraint public BSPhysicsShapeType BSShapeTypeFromBroadPhaseNativeType(BroadphaseNativeTypes pin) { + BSPhysicsShapeType ret = BSPhysicsShapeType.SHAPE_UNKNOWN; switch (pin) { case BroadphaseNativeTypes.BOX_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_BOX; + ret = BSPhysicsShapeType.SHAPE_BOX; break; case BroadphaseNativeTypes.TRIANGLE_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.TETRAHEDRAL_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_MESH; + ret = BSPhysicsShapeType.SHAPE_MESH; break; case BroadphaseNativeTypes.CONVEX_HULL_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_HULL; + ret = BSPhysicsShapeType.SHAPE_HULL; break; case BroadphaseNativeTypes.CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.CUSTOM_POLYHEDRAL_SHAPE_TYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; //implicit convex shapes case BroadphaseNativeTypes.IMPLICIT_CONVEX_SHAPES_START_HERE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.SPHERE_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_SPHERE; + ret = BSPhysicsShapeType.SHAPE_SPHERE; break; case BroadphaseNativeTypes.MULTI_SPHERE_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.CAPSULE_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_CAPSULE; + ret = BSPhysicsShapeType.SHAPE_CAPSULE; break; case BroadphaseNativeTypes.CONE_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_CONE; + ret = BSPhysicsShapeType.SHAPE_CONE; break; case BroadphaseNativeTypes.CONVEX_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.CYLINDER_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_CYLINDER; + ret = BSPhysicsShapeType.SHAPE_CYLINDER; break; case BroadphaseNativeTypes.UNIFORM_SCALING_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.MINKOWSKI_SUM_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.MINKOWSKI_DIFFERENCE_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.BOX_2D_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.CONVEX_2D_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.CUSTOM_CONVEX_SHAPE_TYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; //concave shape case BroadphaseNativeTypes.CONCAVE_SHAPES_START_HERE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; //keep all the convex shapetype below here, for the check IsConvexShape in broadphase proxy! case BroadphaseNativeTypes.TRIANGLE_MESH_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_MESH; + ret = BSPhysicsShapeType.SHAPE_MESH; break; case BroadphaseNativeTypes.SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_MESH; + ret = BSPhysicsShapeType.SHAPE_MESH; break; ///used for demo integration FAST/Swift collision library and Bullet case BroadphaseNativeTypes.FAST_CONCAVE_MESH_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_MESH; + ret = BSPhysicsShapeType.SHAPE_MESH; break; //terrain case BroadphaseNativeTypes.TERRAIN_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_HEIGHTMAP; + ret = BSPhysicsShapeType.SHAPE_HEIGHTMAP; break; ///Used for GIMPACT Trimesh integration case BroadphaseNativeTypes.GIMPACT_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_MESH; + ret = BSPhysicsShapeType.SHAPE_MESH; break; ///Multimaterial mesh case BroadphaseNativeTypes.MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_MESH; + ret = BSPhysicsShapeType.SHAPE_MESH; break; case BroadphaseNativeTypes.EMPTY_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.STATIC_PLANE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_GROUNDPLANE; + ret = BSPhysicsShapeType.SHAPE_GROUNDPLANE; break; case BroadphaseNativeTypes.CUSTOM_CONCAVE_SHAPE_TYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.CONCAVE_SHAPES_END_HERE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.COMPOUND_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_COMPOUND; + ret = BSPhysicsShapeType.SHAPE_COMPOUND; break; case BroadphaseNativeTypes.SOFTBODY_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_MESH; + ret = BSPhysicsShapeType.SHAPE_MESH; break; case BroadphaseNativeTypes.HFFLUID_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.HFFLUID_BUOYANT_CONVEX_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; case BroadphaseNativeTypes.INVALID_SHAPE_PROXYTYPE: - return BSPhysicsShapeType.SHAPE_UNKNOWN; + ret = BSPhysicsShapeType.SHAPE_UNKNOWN; break; } - return BSPhysicsShapeType.SHAPE_UNKNOWN; + return ret; } public override void RemoveChildShapeFromCompoundShape(BulletShape cShape, BulletShape removeShape) { /* TODO */ } @@ -1579,7 +1598,39 @@ private sealed class BulletConstraintXNA : BulletConstraint return new BulletShapeXNA(m_planeshape, BSPhysicsShapeType.SHAPE_GROUNDPLANE); } - public override BulletConstraint CreateHingeConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, Vector3 ppivotInA, Vector3 ppivotInB, Vector3 paxisInA, Vector3 paxisInB, bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) + public override BulletConstraint Create6DofSpringConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, + Vector3 pframe1, Quaternion pframe1rot, Vector3 pframe2, Quaternion pframe2rot, + bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) + + { + Generic6DofSpringConstraint constrain = null; + DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; + RigidBody body1 = (pBody1 as BulletBodyXNA).rigidBody; + RigidBody body2 = (pBody2 as BulletBodyXNA).rigidBody; + if (body1 != null && body2 != null) + { + IndexedVector3 frame1v = new IndexedVector3(pframe1.X, pframe1.Y, pframe1.Z); + IndexedQuaternion frame1rot = new IndexedQuaternion(pframe1rot.X, pframe1rot.Y, pframe1rot.Z, pframe1rot.W); + IndexedMatrix frame1 = IndexedMatrix.CreateFromQuaternion(frame1rot); + frame1._origin = frame1v; + + IndexedVector3 frame2v = new IndexedVector3(pframe2.X, pframe2.Y, pframe2.Z); + IndexedQuaternion frame2rot = new IndexedQuaternion(pframe2rot.X, pframe2rot.Y, pframe2rot.Z, pframe2rot.W); + IndexedMatrix frame2 = IndexedMatrix.CreateFromQuaternion(frame2rot); + frame2._origin = frame1v; + + constrain = new Generic6DofSpringConstraint(body1, body2, ref frame1, ref frame2, puseLinearReferenceFrameA); + world.AddConstraint(constrain, pdisableCollisionsBetweenLinkedBodies); + + constrain.CalculateTransforms(); + } + + return new BulletConstraintXNA(constrain); + } + + public override BulletConstraint CreateHingeConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, + Vector3 ppivotInA, Vector3 ppivotInB, Vector3 paxisInA, Vector3 paxisInB, + bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) { HingeConstraint constrain = null; DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; @@ -1591,6 +1642,100 @@ private sealed class BulletConstraintXNA : BulletConstraint IndexedVector3 pivotInB = new IndexedVector3(ppivotInB.X, ppivotInB.Y, ppivotInB.Z); IndexedVector3 axisInA = new IndexedVector3(paxisInA.X, paxisInA.Y, paxisInA.Z); IndexedVector3 axisInB = new IndexedVector3(paxisInB.X, paxisInB.Y, paxisInB.Z); + constrain = new HingeConstraint(rb1, rb2, ref pivotInA, ref pivotInB, ref axisInA, ref axisInB, puseLinearReferenceFrameA); + world.AddConstraint(constrain, pdisableCollisionsBetweenLinkedBodies); + } + return new BulletConstraintXNA(constrain); + } + + public override BulletConstraint CreateSliderConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, + Vector3 pframe1, Quaternion pframe1rot, + Vector3 pframe2, Quaternion pframe2rot, + bool puseLinearReferenceFrameA, bool pdisableCollisionsBetweenLinkedBodies) + { + SliderConstraint constrain = null; + DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; + RigidBody rb1 = (pBody1 as BulletBodyXNA).rigidBody; + RigidBody rb2 = (pBody2 as BulletBodyXNA).rigidBody; + if (rb1 != null && rb2 != null) + { + IndexedVector3 frame1v = new IndexedVector3(pframe1.X, pframe1.Y, pframe1.Z); + IndexedQuaternion frame1rot = new IndexedQuaternion(pframe1rot.X, pframe1rot.Y, pframe1rot.Z, pframe1rot.W); + IndexedMatrix frame1 = IndexedMatrix.CreateFromQuaternion(frame1rot); + frame1._origin = frame1v; + + IndexedVector3 frame2v = new IndexedVector3(pframe2.X, pframe2.Y, pframe2.Z); + IndexedQuaternion frame2rot = new IndexedQuaternion(pframe2rot.X, pframe2rot.Y, pframe2rot.Z, pframe2rot.W); + IndexedMatrix frame2 = IndexedMatrix.CreateFromQuaternion(frame2rot); + frame2._origin = frame1v; + + constrain = new SliderConstraint(rb1, rb2, ref frame1, ref frame2, puseLinearReferenceFrameA); + world.AddConstraint(constrain, pdisableCollisionsBetweenLinkedBodies); + } + return new BulletConstraintXNA(constrain); + } + + public override BulletConstraint CreateConeTwistConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, + Vector3 pframe1, Quaternion pframe1rot, + Vector3 pframe2, Quaternion pframe2rot, + bool pdisableCollisionsBetweenLinkedBodies) + { + ConeTwistConstraint constrain = null; + DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; + RigidBody rb1 = (pBody1 as BulletBodyXNA).rigidBody; + RigidBody rb2 = (pBody2 as BulletBodyXNA).rigidBody; + if (rb1 != null && rb2 != null) + { + IndexedVector3 frame1v = new IndexedVector3(pframe1.X, pframe1.Y, pframe1.Z); + IndexedQuaternion frame1rot = new IndexedQuaternion(pframe1rot.X, pframe1rot.Y, pframe1rot.Z, pframe1rot.W); + IndexedMatrix frame1 = IndexedMatrix.CreateFromQuaternion(frame1rot); + frame1._origin = frame1v; + + IndexedVector3 frame2v = new IndexedVector3(pframe2.X, pframe2.Y, pframe2.Z); + IndexedQuaternion frame2rot = new IndexedQuaternion(pframe2rot.X, pframe2rot.Y, pframe2rot.Z, pframe2rot.W); + IndexedMatrix frame2 = IndexedMatrix.CreateFromQuaternion(frame2rot); + frame2._origin = frame1v; + + constrain = new ConeTwistConstraint(rb1, rb2, ref frame1, ref frame2); + world.AddConstraint(constrain, pdisableCollisionsBetweenLinkedBodies); + } + return new BulletConstraintXNA(constrain); + } + + public override BulletConstraint CreateGearConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, + Vector3 paxisInA, Vector3 paxisInB, + float pratio, bool pdisableCollisionsBetweenLinkedBodies) + { + Generic6DofConstraint constrain = null; + /* BulletXNA does not have a gear constraint + GearConstraint constrain = null; + DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; + RigidBody rb1 = (pBody1 as BulletBodyXNA).rigidBody; + RigidBody rb2 = (pBody2 as BulletBodyXNA).rigidBody; + if (rb1 != null && rb2 != null) + { + IndexedVector3 axis1 = new IndexedVector3(paxisInA.X, paxisInA.Y, paxisInA.Z); + IndexedVector3 axis2 = new IndexedVector3(paxisInB.X, paxisInB.Y, paxisInB.Z); + constrain = new GearConstraint(rb1, rb2, ref axis1, ref axis2, pratio); + world.AddConstraint(constrain, pdisableCollisionsBetweenLinkedBodies); + } + */ + return new BulletConstraintXNA(constrain); + } + + public override BulletConstraint CreatePoint2PointConstraint(BulletWorld pWorld, BulletBody pBody1, BulletBody pBody2, + Vector3 ppivotInA, Vector3 ppivotInB, + bool pdisableCollisionsBetweenLinkedBodies) + { + Point2PointConstraint constrain = null; + DiscreteDynamicsWorld world = (pWorld as BulletWorldXNA).world; + RigidBody rb1 = (pBody1 as BulletBodyXNA).rigidBody; + RigidBody rb2 = (pBody2 as BulletBodyXNA).rigidBody; + if (rb1 != null && rb2 != null) + { + IndexedVector3 pivotInA = new IndexedVector3(ppivotInA.X, ppivotInA.Y, ppivotInA.Z); + IndexedVector3 pivotInB = new IndexedVector3(ppivotInB.X, ppivotInB.Y, ppivotInB.Z); + constrain = new Point2PointConstraint(rb1, rb2, ref pivotInA, ref pivotInB); world.AddConstraint(constrain, pdisableCollisionsBetweenLinkedBodies); } return new BulletConstraintXNA(constrain); diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs b/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs index 3f83ef0ed2..5765b0dc86 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSApiTemplate.cs @@ -365,11 +365,38 @@ public abstract BulletConstraint Create6DofConstraintToPoint(BulletWorld world, Vector3 joinPoint, bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); +public abstract BulletConstraint Create6DofConstraintFixed(BulletWorld world, BulletBody obj1, + Vector3 frameInBloc, Quaternion frameInBrot, + bool useLinearReferenceFrameB, bool disableCollisionsBetweenLinkedBodies); + +public abstract BulletConstraint Create6DofSpringConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 frame1loc, Quaternion frame1rot, + Vector3 frame2loc, Quaternion frame2rot, + bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); + public abstract BulletConstraint CreateHingeConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, Vector3 pivotinA, Vector3 pivotinB, Vector3 axisInA, Vector3 axisInB, bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); +public abstract BulletConstraint CreateSliderConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 frameInAloc, Quaternion frameInArot, + Vector3 frameInBloc, Quaternion frameInBrot, + bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies); + +public abstract BulletConstraint CreateConeTwistConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 frameInAloc, Quaternion frameInArot, + Vector3 frameInBloc, Quaternion frameInBrot, + bool disableCollisionsBetweenLinkedBodies); + +public abstract BulletConstraint CreateGearConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 axisInA, Vector3 axisInB, + float ratio, bool disableCollisionsBetweenLinkedBodies); + +public abstract BulletConstraint CreatePoint2PointConstraint(BulletWorld world, BulletBody obj1, BulletBody obj2, + Vector3 pivotInA, Vector3 pivotInB, + bool disableCollisionsBetweenLinkedBodies); + public abstract void SetConstraintEnable(BulletConstraint constrain, float numericTrueFalse); public abstract void SetConstraintNumSolverIterations(BulletConstraint constrain, float iterations); diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSConstraint6Dof.cs b/OpenSim/Region/Physics/BulletSPlugin/BSConstraint6Dof.cs index ecb1b32884..476a0e5570 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSConstraint6Dof.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSConstraint6Dof.cs @@ -57,6 +57,7 @@ public sealed class BSConstraint6Dof : BSConstraint obj1.ID, obj1.AddrString, obj2.ID, obj2.AddrString); } + // 6 Dof constraint based on a midpoint between the two constrained bodies public BSConstraint6Dof(BulletWorld world, BulletBody obj1, BulletBody obj2, Vector3 joinPoint, bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies) @@ -94,6 +95,21 @@ public sealed class BSConstraint6Dof : BSConstraint } } + // A 6 Dof constraint that is fixed in the world and constrained to a on-the-fly created static object + public BSConstraint6Dof(BulletWorld world, BulletBody obj1, Vector3 frameInBloc, Quaternion frameInBrot, + bool useLinearReferenceFrameA, bool disableCollisionsBetweenLinkedBodies) + : base(world) + { + m_body1 = obj1; + m_body2 = obj1; // Look out for confusion down the road + m_constraint = PhysicsScene.PE.Create6DofConstraintFixed(m_world, m_body1, + frameInBloc, frameInBrot, + useLinearReferenceFrameA, disableCollisionsBetweenLinkedBodies); + m_enabled = true; + world.physicsScene.DetailLog("{0},BS6DofConstraint,createFixed,wID={1},rID={2},rBody={3}", + BSScene.DetailLogZero, world.worldID, obj1.ID, obj1.AddrString); + } + public bool SetFrames(Vector3 frameA, Quaternion frameArot, Vector3 frameB, Quaternion frameBrot) { bool ret = false; diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSConstraintCollection.cs b/OpenSim/Region/Physics/BulletSPlugin/BSConstraintCollection.cs index 2aeff25035..5c8d94e07e 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSConstraintCollection.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSConstraintCollection.cs @@ -117,8 +117,7 @@ public sealed class BSConstraintCollection : IDisposable if (this.TryGetConstraint(body1, body2, out constrain)) { // remove the constraint from our collection - RemoveAndDestroyConstraint(constrain); - ret = true; + ret = RemoveAndDestroyConstraint(constrain); } } @@ -126,17 +125,19 @@ public sealed class BSConstraintCollection : IDisposable } // The constraint MUST exist in the collection + // Could be called if the constraint was previously removed. + // Return 'true' if the constraint was actually removed and disposed. public bool RemoveAndDestroyConstraint(BSConstraint constrain) { + bool removed = false; lock (m_constraints) { // remove the constraint from our collection - m_constraints.Remove(constrain); + removed = m_constraints.Remove(constrain); } - // tell the engine that all its structures need to be freed + // Dispose() is safe to call multiple times constrain.Dispose(); - // we destroyed something - return true; + return removed; } // Remove all constraints that reference the passed body. diff --git a/bin/lib32/BulletSim.dll b/bin/lib32/BulletSim.dll index e7a8a41ec0474c5dc98bff3cc2b99a5a41b72de4..689b34f99d1625e9513bb38037d31094e8180572 100755 GIT binary patch delta 80625 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 z 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

GpfSRkQ%1mb$qku9FTGPDA;P10puWlOxtRkEbX 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 s#!u02wk* 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�zolcNL+>c=zqZ-o;&g9T#N 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 z⋙R!$k)?vD*%-@{RIz(gS9 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 z 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�ULf8f;}(_BhYltu*%az;w;b#eXs}yVFh&a#E=FV zo=K0u5bT4d6`o<$auxyS4Xbt-yl_~plm);>>@W<#DC~fyYzl^UXvm-oVLJ4|To}EW z^w4%G1wjYwmArab&0IpbV^}SdTuqO`pyvk0W+?^23Rxhml?6fz{=kj2MDiy5&{;67 zc1o_Hi_gXnYoO(pVYLN1U>EekC=CCY3fc%?JFF__zzT){zZ;f7PY97q1XmR`ht67R z4*f6;qp(&ce2N}{P8fhu*dy(oRAd?H1#<-34PDR+E1(Y=2=~K$7=m@sR5z^pm$CkB zh*lg9*a@Am7rLKg`79?R=z;<0h0a~WYAN9^SSjPd9QW&MW{b{uge@Ii~r zK-w2lA(#xqFdqiK9#%785ZYxpY=Ev~WGHPIhIW;mE}J2MZfqy4k@27tzZ;f9uj*kE zAwoFnVHk#B6!u9PqH5+vBse{)R>J^n#vg?3Fa#U%TV_Vp0Cd0*w9SvIrj_&{v_pqA zs+K?}bi>d>(qBxzp0mjK5^AelAhkh7@A?eSJs)kF+7p7dw`nO*hRdaB-VKKB_ zMNMH8hNOLURPBRyXvl#MDkgb7ErHRS=n-gIOFoxTaaasPuo6aLue6=?*yZGRM^r6> zmS54cmwSkCcT`obpd}kTo~9GRm-5ioPweIeuhehL)(?4 ze;}&5pv4_kYbAdZRa;;Pc1n9wRPBf1hv>1Zh+jpIc@SYl0NNg*VCecCHN2VvTbNuh z_&P1mBcnqkpe6P<7!v4*wX)&?(nH5#GA6zc77^bM%U}RjL&sZG7`pySPh3M!eHi8U zzX-=aCWQjx*HST<44pieya3w5#FO^dbgASq3cQX2`lD(E3`Uv6Fgiko z9dMK(fwoB_Y6T3#7U+#1QG2Cr81bmK>xqy!qE^BXtb_LHBdTFF5l$abb72$~LfecH z)g?KT454Mth?;la9v1tV%yhA*UoH&WoD5&m<6cs#Wx2u-W0hzy6F&<0Cx z!v4{S+6co1Q-4?PY&fqO}SuxuPrLoxz1tf7GWMpPSg z(L<#$3>%=gf)+tP48!0SDtrqCK1{~Y1`D7ax}gKsKqqW~F4zLyFn9~=-;3zRVX30v zLNb6U&<<_T0dt@e7C;wtL;toB)eoaErIkY=ObgsgRR=dkFU+qW?=xpzq(b{HG*5PDQY7Cq~pVY+u}{+64o! z2nJybjKZ+A4Wp{{R)!#RR4u!W9)Q)*n>DI-!@xD8YJL&<+&HS%LHkXkYAx}d>qb>i z7~!~cl>cNPV8f`|N`&A&WDG53qiW*qR0vvN)J+AT^EVU(!<$A`KQuiysv6c&z>|c- z=q~bs_UEYpbi#hC;lE)bwJB2Jmm?7Uscr(mpJ-}d7-g;uwSh|TMRy8 zPMhqxcR);g-#pJ)9LEn&?-i?mYn~rPXt2T<&$IY{LK1vGPMltnKb6R}fMzK_K{YG)Eq{Zxq|%6ytsT z1B}?$Wu7UzA2S<_(MkNaZKK$`-<-+|zWC*COxw|KZxnZZXiiOXqMJAVFr6EpFBaE_ zuGV!@0A2ROxJe;=&L8>~NAcz2yO^fOT{b=O;rPo>n{uDYAb(?H#bueyuY@;>@4VFg z-Hqbb$INNQVtmQ>>AD(ytELymH{K`i=rgB@dKwh}ulvNF$7tx%@`)8rjGs}iH!{n> zkMZu)bW#EOtMLxW*-l4(pobZ22|FCq&FGh7x)Z(gKJoH)I(N@~+5m`dnb3Qm_)0o` z_lafCQ`^ER^bq=STF`QzxJiKO4Rj489IZjQLDhH>e5+?=dc z|0ZcCi;>68GpFPezD>865Gj6dxmZgGAne=!%e>)x=P-kHqzF#DM_Jny! ze3@Hpe}ZBR72=R&`a@#b4s+_x9pt?Iq&64}6Zy9n&0aWV9ZxR!TCeJzJE-cJTg0Xv z)ZmX>#O@u`pyFZiuC%v5ERIR;*O(?UpJezxepo!P%bb=_nZ!TrJUk%o{mQ#IjmCsjNz@ zmi7ZxVuNIJmDmZVP2W18en=UH-3!H$TAICgt2ibjoY*Qp{*sxM`4m-4t`@s?F?jh; zFOAD zts;IW1=dxI#XG6#_G)pIR*0gV6kJg)z7iM}(kPFG)JtQ1wb&!07gdY5CD&AoFC`t- z+H4S3L8O&2BS#t;F{4NtvtoHwNF%XYR0(#axatA1{D^suXccs=RgYp!p3aYDwR)t* zPmTEs@I|+ZrFE3pzg3@qwfH`#_v8>XqmOPC)1Rhey3k!(oV572x5~z)#kXkj(&8Jm zI16R3U;7g2+-AO(ifJGE-L2X_WDKB5Bljd@2)$>k)-T2=dY6_bdziwnlw)W^Z1~J2zSKNMbWEbP)2Xpr@zSb;bcx<;KK>!rY=gQvp#0jNW&Y;qe&X&lrN*RY_tiSK9ipo$8;XL zLemT5t973!dX7Xju?WpXsEg??v@GU1W^tqDOBLbgm_bdkvXxz=^kK+(ohglN`cf77 z(zus3D!0vsWDX!zauZ-RRLK>$Fn)Ke@NOCLcd>|BXRs;63NJ*zs`;5kRr1(Lk3LW2 zFJckei11Y`VK4eWRpRjTc zq|r+ZdF&3>n-iyfz~;1#0XNjn5}(zZ7frTp)wZ#D#)8@W=6~zSO~ha<$8qacnU(`L z6Z^O9uRp9)g=vAI_)-A#D8SFDz-^vcDSD!jYp z_Ux4SA0t3g}b~1YTCq^xpsVJI*8}2`fNo941SwTP)pZRj=I2h-Iq)e)!W6?J?L!o zr`yG{J=C}eZF^kmw5e9|sm6Zbaj^+|sUK~q;eWO#<}Yjg=#k50DKdTsams4s_@#>O zJ#dOLNBWlJ#~jT+(Z0EbovhcFxHNq zfxi)d7(Hu;nEnY`nXkps{8{LX9kKHxUCZOE(T%>Gd}4=JgRvfmBUX4TdgYF>Q(c3x z8=FeTPJInVdA?|j#kHdQpU^f;V-C9e39*)~*jR+_dSX0H1@_@5^vdz*Y6MvhwHe@-) zgv-Yh-Ts5{pPme_B>Wk|FP<1a;k>?q@Pnu3FPFwzZAOacUo}rLwi9XaN%8WlRJ0e} zS}Wdt)x7W=g>%&2+EXewp7_u5JTZ$n8Bg(i1N{v2oF=pRoFaT-d{q-GCDZ*zUj{N= zC2>~o98jOt)BT2YOPlZ=#`k}%<4)o%6XIYK9T`EF3Gs>4mPPzaoDievYje;m>ju=v zCYB%nh}LOVd_{ye5`M+RaO(GfUcEROr;<4Bb>fbFzS!p`eM zFMN7H-E&G_@z0I7wVCDFK%57OV|Y42sQb7G%~{OSd0Iba6r)GA0@94t=)`BldQK*m zHlk-dGoW4_Ps*{YHYz&#(s*q@mNO(soC|#V(h8#&#b1RI}M^bmGe!5v!WH+^9g`HqtL%{a<>b0pp<&QAL2U9er#>yexGX zZ5|azWddahEgS6@H|#dgnJKH&$wFQ>+OMva)!Atf^Z#I8lu$yf0%BeIiaBix`bVSU zu0N2v3B4Qt`+qafOX$RC#CY=q^BiM8#_vYO)b}YbWhw7W85Jk~K#ygk|1>I658`*C z7pP(t`n(GC&1%0|OtBM3Bz~=afRt5}Yx*hToW`gbE|@GHKSr|E04mUi?=&<-&Sl z%7FU4tV2P(nBO8h)W(6)I3TWTG0!vGsL7NB9)Tib%#0WJ5yLFk(mOaq(m6Cqyn^$J zTAaU5MtdfSS6??TSY{=5%{lzjp=m%phCZ45)od|e=;I*cG!v)%G1LC#-E3yb<#p!atNS(&Ch^xfDh`^Tu<^>6U z3aF#C_Jz7)oK_KX4XjodQO%h0#|QBF0C zEf|jy%jm^;afZHOHKF}80`q_=;T&`hbItTqmOc$dM&Cqwd zYV_+f`z;;)CvD2VZ9EI}XouwI%mc?JLR9xFK;{VpY&TiIIBAI0KSp#L#L z-eKWd3f-&clhBU-H}Ri;ivaZ3W3^V!W8h<%W}!!80SSc|Nizq;gROLv8{piLkT}V^=bd+?hBEay9&OeC8%+v6Roydn+4#`x#o7 zCOOf+IAcJ)Q0#ljJU5{N^MNyBwP?Vo)r~YGdhb|37^5A-{1(+y&ZpwD#&Sr?!nB+; z6ACex&x#G18)M}xtzct4I%k$%p*HlTv$T`wgkE$$38o#PA50f;4v4`Wl6eW47~Zk0 z3NVD8RYE!XxmZAg52JA`Rx8GVSb;t0*JA}HUdX+TSZW*kFbUpori^@yzhON77mP9t z6+`_qMjb}h>;dr#(WV42ZWh1YW}ZK#8(FEz1Vc8Z5rw;G^Aa*JJ{dC{7?VxfUY<7YRBW^iZLF+*eZL!8sp2c z5I;up{Mfj3U@XJn>w`Jdtkj_&hhr=>gcP6H*#PRR3bd4C3 ztg#}37;`bSxzmSnImXzHLBmzat609)0hKen@r`z!T;BQxNfzNHgmVlV55H3nx8f=w z{9dcR+RD*oR%ywmsLC0(2f#i*uSFE zBFIs~hw&K3n?d%cR*aXZ+}eqilcRUT_~`Wz=bu_`X~x7He)n$G&W}XSduBsI29AG{ z+jZ}8&X$Mq1u+LWI$7h`AF#~}=>GTE%WE*!Es(d9Q%~dkF|HYV?*i6ST-Qe!$``(cx^e)G}L3?f0WoReA6V4q2@j zW#33*7rEo(y;aj#z9ZOfma%XBU8aT)7$eb=yg?i8fsA@Rxk zoP~Cwa~_iC_L|!kbEk0OV%6N7sG?0Ve<3>Vq4BHka_lcF#_c-nV1>|1LAF$gPda2N z=>2F}Vg$XXLL8MP=5p>;Ay)oPo(`j{D&)SMI#r$!$mfQ7vH!-MnM!oYLsIK^X8hQ> zo5fLVV+Z=$&Ef$LxyC+p!Dj8U*O+`IH$h_lEcCXRzYu*e<}XLL#{52Xc(ZosHU`kg zHj7U`;5wrlJ!{L@7GyMBMOSYThdU`c16{U7?EMh!KyTin-`{beOSg#a@~*ZQT^x(k zgx;X}XNjVZxIxr`#C}hzDdL+31cf`ZyP&12MlFJsR`N zN0)vTtCW0vDSoX|@)4${O8sVzA&;+LV*U(tVx_ELtRi_hqOppUpa=DeBze*4l_wkD zgn3t`cDifqMDM87`Y0iSK2*srbBHsSYq+DP`;9qh0bY_igxqhRl5}R9u+A40;wYGADy4Jpc38SyCiQR^~o>jta!C}hJLcdibj(&zN zL@$0qUwGwcD>tmvddGaT5ua~M;STD?n~&>gjUmxj>WcIsUkMQ_}xcd7Lz{--eJ z&q1%({Cb}jW0!GDOYc)-HReME%c}d)H9PfL(Sh#Y8QW{n$9C#7A^AsK;s|}+WT6{{ zws9pDpnYOMT_JAVZJsS^x|s>(_+A#`nQmr6J=$2O$8ANQAnrxtZ_Vbp#vV+iPT!sr z3)nub$wqN$#%zucX&-wjB>A%RhkXV&<;(>oLvhvBZ6?Iy>ljPH9w~<1d z1+$F-%nfz=rB=7DwaE~7Gq*5xe^R=pPbSI5%!wr_(Y2PO8ofB?_oElZ>gZyIDr0pN z|0C#8<4516zbr_-o{-@16qFM5-OE(_6?|qaGZ^HK^@@c+nadfhKBCp&hzt)^T#mOn#K5e@@CsWg>+_0CY zx`q0wuI$wU;ygkp#I{d<2Qy_6t_`^6OzfA~ci~oiwS@nYK9oOtXwl+o=iQ>_JF~&; zW(CN^n}}$5^#hUc70bf(Qw|JN>MMFZ6a5_#Se4_$7@x0=qXkz!;fwd{bFCD8`hLBn zT6D^OeMz_Inh}U~R2L58e)$db{3*!O_G=xGV7--1dp|?p%r8k~=D9em#AE0d7o(@| z|Ns9Yv{Fl~-%V*mr|#G1Y7o7Oitq*N(mr$^c|0|-F|vof;};Xjw{gz1UtAETyRy+M z4?HzpnQKJVJ~<#>mG|G>7*V~>#(G`LyQZ>7r%Y$vL@7cZTnyp&#W!JjT0$ht0lnKZ zzcw3Iv=Ga3fQMVlSdH(G_w1Eh3{~3AzPC?){g_+C$|UjFH*N_fI6m0H{hR&fGekYv z8LRPZI3QmB+MIf^e4O=qvc5}Zea`z~P+r*iacgqIPwk*}(_%^GJo{e7W+O=S(Y zbL;R)vG^Drkb!Q0N?d!4UA~vdgM2m9%_=v%dQ{wVjGM-8BJ6%f>>`5Ehc0_o96rW5 zL_6B{y!h&vd8sjiuHG+FzcHto11z)*UeHh&PbQ0ximSgdFEEF3=D)zH+$5aSkBa-g z;r^{$b-Nk{)NiG8@=@^$PGj>rmfxNUU-Wh2=-wyuP8CWYT@k^taF6ySl+pS#YQIl@ zahqn$MK9i?{rW7a1YNXeK)qS~tIa%H+sVDScI***`#1tNqc3=Ae9P^`UKv~S{piK} z^b4NkVrE%PXQ8L>i*4)Z6HWTpGv#Q*KKNifwY~=%f3^RfG8R z&_xHt`a$BCpbHNOt&?=Ao$xnJ(4D&0F8?CvXAWo+CLv`#gM5GmeVEHEP3z~sMY@(3 z3rUsehgsIKjbA(4Y`}Nd0eSk7c3L_e5yXC%I7h|4KJ)w~{g|cA1FCsqCtWvw1Wx`X zwI@7wCYT>#`DEj}t64i~U0jULIC$z8*?M}pJ695(e(+@PEpEV`O8li0%e!MdejDM* z2lXrQ9`vk(+Eu18(ZvpZP+ooNry@4&by~iuMh7}C7OxatdQkpMGtF3w_8t@mkE2`A z$Hwbn?85GxU`MbIO|Vmb#f9NP{X`)fz3rfW8XI9LY^461slQ?85qU*9Pt>2_D4D@L zYbWGE8M5(+`0NDVX~`$1r@R((uF;)J1!G3`Lt z#Iy_Teofy*yyz1ATm&XHp^uWOHc)eootUB5UR3URIKFyKq(<4itao!c@Y;kk znH(IwuW6SuNk!<7$tZT(U4eP{HSKD~DBo}ud`-KcOlm_P8Y?e$iO`F${WURlgff&; zI;urKtItGlXc_;4y8zqWqR-!QU28WBbt#X+Nv-IrmXlY9J($n5XlDvZiNEHAmY~=y z*M9e$fp2q*e#V=JE}=Ae5#&Ns3++<6M%Vm~I@Q>Ou8#RTb*=gP(Xn!jDH}AsQYC&i z`jr-aWD3zcTlDFW!W7+1U9_v3R}PO~)g(0%%kcWiZfwU4YX#1qqD$@U+;k7yZLA)d zy2dYm18y+pW4CB+((O|0U9mRSpetMSD}iQoZHs;-(1qR`ixbiPoXP7;#!|*+)go3+ zQc^Fsqm}qU)hL%CABDesd|ukJOY`WyVtkQFgX*-HF9XV#diC?|a)PpWZUeey@}Rzb z5SGnf3%<4%?ocNv=O^^b2(J%_ixZVg=4Ri^;yyH>o)yb24?6H=9vTo&CMs9XlkfZL zAwu_r2!4D`Zw#m}i5r(FXNaju%CdP8nbF|^b$2XY0W@tS9==85w;4*RxSQ{d5{mIv zAK}Y|BxON@7o($nKzx{_oRiRs;s5J^NSLb3OX$I9d~ZOUJyluq%jEl5vK_H=Nb;3k zlYuWCUwo`Q>9gar;RyCli~6sS&T1xg3pSt9A8$)fOu1u?!(CWklVadsbm`l zFQF0BrcwR4axO8u2E^6Vl#Ax)U^sY}iq?5oOt=1Qx`8K%ay-Fb9OA1yA|=#er2mVr zU#BVarUo#qpYuDF$zsz?Www}SQsz&M;w>8B|cvCgEdORBt|e0VuXpV%kx z{l}!tO=`oJ$O}GZh|7dBQ&>+^G7=IWV0`)q#0{q@ixRRhA_IJtCygSE&>&yoo~E38 zc^yU@Pg$NgyX1??TJep|B-u5s_yYLMX!*(HuM=O(kHvIFS(cEC>h31eA!dQ^wX7hZ{9p77G(!)%qH&0hCGPdEXn=M99S7xPlqXQ{}CntoJ zH2wHmQpB4qaYxVi}MB>Zjh(D_P=IA^AErqQyA zL-*xk%}gcDn1l9SE*_YvtTFn~nKz4%XDSQVw4u9R=vOT=Up{hFy71-l$l8e`6~>o? zZ{h;rK~vfzZpVDG{>k{tZxK^xDGRT+qjPvD_t@ylyz}uzc|7izF9lyQz6|2sDKola zx@B^H{M6}&E2rgSRuJaqIovD7>8CRePtH=#T_7JYS;8~8KOmg=De*_A8|=t1e)%l! zzluMlFo`G4R_0E%RnVV2F8h<|BCQ_h<+GJEPbp3(k3&x7szH8a#VRYvlt&|fH^Enj zuVBNVI)!lgk(KpV&-(Y zWafo7Q|1a0^c z`CT!+DE_BR4eDyeS5BJFzCm>znguMbp0Av7whyQETb?GbJM~o^UlOap71Oftw-U$u z?V#8?UpaSf1S5;(GqyD4;n-9~Ex#KSAI@hRmamto{eDoW^Et3MF}ihQjz?C!0*CAR zA^krXu%)jSUkScMwERe4BfesMW5vk17{FJAZ=sB&?LbBBJ$n2u!paDXmtlNl9$|c? z<35k(jN7VLfT7hsGGa15S%HZ@`L-Kbfr&mlK3Rc@h2-ONp5iOUS9prAeCrh~%~PCS zBIe^WPN+;hKF5T3nS?dt%fok_xN#9j(b@${@`b(lPVJ#6z7F=tGMS&&L-8AA7s+`k z-@=pCKPWz1pj$7HQ*Z?2H9KkH9hsG z_`31=PVx2Qt2@P)_z30lB<_j%S@7kb;>*P68sItd6C>v0EIB2^LVU&eX2@3Xkri~| zlMNa3Y0DI!8=pf);=q-+WpZ9seED?4+efrC@?Aoq>xNDq6=Ximk1%9ir#Rb**m;UC zgs)?QFPp@D_?#5@E4j;9#7Ac;vlHa|h-wA~#rJ0_3z7;jN?87niQ8`@!bRzv@YLdK z!M9l-=dyGqIiVe2^3b4oJY88dSH7vJJrX;pQ;Hne#78+JiVTYP)0K=( zAU_%WIq_v49~5UUVtH0$6ky!2NI54pfDw1?c&n|L9r&Wxh@Fc#hv`QblG_fkZzad{ zj}|HOljKW|T2Aqm;Y&GjGTzOLmH7$H_{vWViU$`fOA>l85{C!HD~pv&j2VxyL0uz` zEml$!^3av)pfI1MTyOMYwC0I*XL0J$hR%)?+s;x}B+1tuDe*(dQdb4cF$$1-}BPXsES1IB4>xabiFR)DFoyiP*O$-jd=%`mfm!lCX@oK#q@KOrK`%(h8xE>Oe^7Dd~x`= zf|6a7nYYD|S2g*Xt?}_co^JTd+ehRQXd;gDMzQf6x;})q@)m%3;`B`%|KB`ESuoXF z%cL)4I1|F4F`4a*5>!6>+UNO+bj3zm0dSbojB9AcTug8K2bY#2Iu zE~xDlJK5GY42k!bbETGtQG3sjFlQA<_lLsx?fC#?MdxwO2x^l+cWI+RnAm@$z$N`XVrAogrB3_upE>?ii z&V$^?PQhirX>Y08I3&K9q%4_RM}(e@L+USNaz0l6{P=S28xm*5(-ZRDRl)Khab3J} zzR^_2Nyh!+<;99s?1^V3=i_j18dColyY!0Zy0I2tq>{!?RxUY5zA37Q_a-crnQO<% zTRBfUa?Lb(F@r0UzbJ9~i1VE|UE!EpGg(Pa%6yu$5MG~mVDn-8}BT*Qf3;v1k3d3t5kNfd=FLsl!&-u3LAYtMvE~b?w-Omz2#YE z=B$Vige2u*B&S4FTWmX(5xn@~QX?Y4DDO;QxaLO0#YVci2P1-Un~{_23?K7n3Bzbq z7I^Y8Tvb23ax2EywS9c-Wy{O)b>bUqx%7GQb)4d>#}_;$Z8N@hd=t-*+VQn*k6io% zX9#EODT({=1tt_?pEuZhCOR*=lF1D}6_ z&x)@HU*ig~bOo1`iM!}!-kvbAmo4~e$a`#|$$T>Lc~9}>;;TNzSBS6j6rT%U#RQ*R zxE1(Z=S9R{RwzrRSESNQRDv^azNr(VE0hb2{Y1#f600szcoxNZ3SZGbuQ}G9$6bMJ zbWfJpbe^)x?3hb8u8OD|r;vEflj89^mAT?eVwr0RN#TVKX$gc}{G>eC&lStESn8&F zR_V17^>T6gb~f|7vy=s9E8`sHbqrNT05=F#@F_!*mOPz_HuOP z-Qw{1%1xdQwC$0IdLePf57@VzJkjhU-2M6wht{y0MRJNS1z#CHPByfU96B4m(o=jn z_*~;Y{UWCTX9-Tzgv2HIipL{rbI*;h2p`99?IR1R!RI_BZ3Di-Q_{BJD>%g$+|3P; z{8OCWM0A|uldtZ}!#A;li7#+ni!W(HWi0q|Cd88~I1``asfhl+Z6{BO?$&#l^7)RI zE+)d*>Pf~|jISKu#WHhF67GvFbvOQc{4!(t(Ru)%|CIC%_!{w@CnJ%b;`ChsX z{C7w{Te4_b$*h^5&5Vl@6vsh&vt+q0GPj0Fv}d#89No86}jT~7GKYF6Vb!*^;m z>+$>WPpoD$zQ$A1x8rNTH?f+sN!|E^_~T_Y`QY=!_2X>EIdOMLe35B=iqC?t^%P$w zzQ8HITzna?{V=~meCZQ>@-XGX$Irq(y@-23(yqg9(Co!YZRi&A&5|dI7O`ZdvfSLe zfN;U-K6`jwsXQ^ zZ)B1+i_Larv9Sc*+${Fm*`}Q7q_2;tpUXORZ4>k5{iOlBGFSV5G~aI{>S>b**-gkL z${b^aq?Nnn#>lT0NLsm@H@wIQ_r{VwbO}l2|D=_^5K(t=UTwH+o4)tGeTlNd)ABpg z{Be8&$$<{ytH76tmLF~K@wxF$JR9l9SB>unW6u?n%x_{^3%-f@WsqkkKKp@)xNnuR z=vF62>4Av4LMu)$uvA7Mqlq)S5??kxT66MPD;K6OmVV-lx8iTcUw1&9Sj9o23*B}= zq+O~kOESG8`#!>tBDAZ9UtOxqH_8_cmcAx-T&gTyR*o(U{IFqO89u=$8&QwX*CM_o zO==L`+7eM$(#gX^)D>K)267b3nmRxIeJG;;2R5N{to-g%FN2l$_xbE@9UnK1?2O6uHWZ- zUBA7q_ul8c&wb9E|K~nuW_QxwRD;f?`zO96ZK+Dn#WI+P`(TH*E`U1#7es%Pk6gP9 zZvQq`S(CB2#c+q<+V_*yk{(<}JH5?tM-!U7q3yVxaE%GP45U4|AJW;sskLv&g^$8% z9XM?x^-qGG?F7XJ3xgxU|LXx@Dq+DL(#VDj=+DbQ+D&^}KBQ!zJy!xJ8EDT{z_rhS zbk-`k36wlaGR4xv2Gi^;8{j9wPq%rtpcmig;0dYm>_82Um?jah2c@Mb)maBV!_PAY zN5pTUL~y>LnSx#hoO8Rn`#d9QP%-Yb?QP90wKX3uwH+4&w+t?2yE=6q6VCDTu(4_( z)|o_f#D3iI^q=+@IVy?lFfZbX+>8}KxUZ_^BB^lG`n6TRaM^JA9k_hB+zwm`+@ua% z1>8iqPNX9r1609H=+_k5df_a{b&!X)t7F;57|&7M8j(T}@{vf|%QQ>;*<2W0V+Sq~ zZs$8^cU*aG=8g{BB)F{|xI(!4csg$T3(teB?QoH$aGN`DYv49?;A-L4b>Mcvt?j@a zfLj9>Bn8#F(`<+x1DUBH$K!S$zekPDF?!{Nzk;Vjwo~A=4qO&o%fHU926_2sV>?c! z!(zCyc(pNydoWeFcm1nT{eBa7Mr!fw_j&f>IpXu2z(X>s&pe~o_^?-5V%xQ^WV~?@ z1%SI)GQO*#ZQ8uio;AmJ*0KnjMBLrv=Uti7xutVHr=wMH`3;Ty?H6`Hxcd8iBQAYE zoO2f@JaHI(lN>c&oiZwq!>{hZXTb;5(#PV}B@>J>ffI4>V1#?DYiydpKA|9$mLlHg z^eg8akNS3kaar>vTrF$$OP#ff72d?CO-9EQQ}OSbcVp z5!ddW*CUTHA5%-?KP2Mxsg!b}8qj#sJaLZDg z)TT_%Xyuo-nYBybh(oBsc(;k#wE1oQ#PNjP zQO@n0PgwA9=Bdyo?;A`a&gl)uBh)t+V^-ITd&Jo@*KW8SZ~>$u zA8CMta9cZYC*bNkZ~EWmTov4k4%|Aps#cB-kd$sK%xORQ~JZ&E2&JGDKh1&twzBSgs zZEeRzlDAqos^`>XBO-7w?iGYjlMQpY8h*LaKQMATRSEaHwTZsxa&F+4!G(`(@}8%@ z>&qVTi_6(1Ejov(b5xUchyAv4^A3C04Uo$q>Cc*ThDypcBGTn2)QRUbS$ExY%iB#h zZFk+J4O=8GdjFERqtzY64b0s^W;2_7H)vkZWjfmcS24OtyR6r;9km%YAmv>HAgYu2ZaalXL zc3E5BlS0I2F+0FrirYEuX4SkFlVv`Nn{Ok>o4AEB4~;@Jt`v>%o7JWl$nG9AR+p(B zQ;dX=-6$+8r&>i}?_71!6r*oc%DYtBytZqhqh-Mb!;Mjw-N@K`7QK+%b1^gSu&+OT zu66wlC}!PhUw<7MPBhHxN6b~1KF8t39>`3{wQ@~|x@4*m8={TF3c9n&`>=37&QYGJ zMz5&+2FCXMrq(SP{fpNlkvv?pwd{U6m1TDWoOV}}`TUAGb?t#jxl8r9igmgL_ny0& zybs7jFcE6TRoGWq?@<`ITdYK$yUOV4nGd%|b?At2yE|}e;da6KI;S*rJ>1TATnyZ9 zxMlY?na3f%+ZExC=jmN+i{6>kS>hc>XIiD%Gp*z#qH`CmTB$Ca#@;^>cN+g>IL(OY zI{|kXZy3D+9p>FM$Ms#EVi**_m%y)5*Q}v{?@TjB25yDh{0MJ5Rexl|^|{&@J|zr8 zq<%%ySsU&|xSenTk|rO?R3_Yx4%{TTt#B?=i@6wCXs5S9Zr68L|GL`f5w!v?ZDo`9 za$8S!bQ|C*;BFPYP!%wpJIe>)_N-KAZZ#shNLtzl47F8F-e;_|rcXC|j8B8x1?Rh_ z=+i2f<+-Xm!GopJ4_dL?wi;jF``e}sAeo~DoFe17hIiI~@6>l$vcLu4V0?vEn zMd52UpWS{1aI4{hB@sT7P8r;a&1wtjjH|-Ej_}TAs8!B&aBJb(*Y#F7N!!O|p}z-i z^%JV}8e>dE*hi$frY#)_PlT&lV}?hS;9kc2V13t-@Cvx4aC0mh|A%Xgz7ad&>Yr=V zi$QNcTbNFT=lg_B5~)y zmDH%ZYmJ0USL4>!S-VZfSb>9EqB7IU@7purFTw4sC~jLWN?KP7b6MGdUIBV}qE}q3 zlCNXFb$&ucty33XXAJEcd=UkB!D?gYeMDqSg|rn0M9w zAw9UKauzab_QR#UsG#;BXZ zKP4}ur5KO1NCO;tpIfTwyy-=Kc9_8t>lyO!d7Uv*)|( zjoxFn!mZ)`yPFB34q`4|=*%|{p6)XreK4f`U(&uy;bORMPux=G%h?4> z4_ynNSgU@S$^LaW?m4whYWBHCRQho|^GU>)Q8AF6%rW&OVw><;jth7I;M~q;LNSE3 z)T*LlBQ|OR?y$PHj*vy%X>bPIH`c9#?Zrmlo7TXk>_2-Ns)b903nq?yq(Hmi;ydUa zfQy0i6;kw$!$r2^qysoVr$S!GsJE^=^9F8NWWyELH}Now`8e$JHyC|gi{Y}jsE=>p z7Uu@s+M7+@N38IWS=`ca?qeBw3tQPTWM?x<+XIK7iRG^+9J5{e>Hji zttIrQS){!S?$Eoc>x~#^0smnsYEYNlDCaAF)9A?8EvzU zg9kRur<2B;W<<$;F8}4(eWwEMD4ehQ(@3KV?#P$w%Mxy%?8bfYtFx>9Alw1CaCGG( zO>sivbl?KMfbYOX!f6NEx>*X|RJhE&yyhCWm_U_GQo#%TWVTWd++=i*C_rI13Hkb_ zxm3aJ`pOz)Rk-(e2ww-c_bY3V?ZSQNE7i4>fpr9T*j_cL)QCMV^~bX-b`o4lJ8lx`7sAb>fxcDlRQlZevyH*7 zdN}7->db6o)SyP(hbVghy7H062tHsnnvau#9|L#bD^)ayUlUBgolPSQlL&ky&NR3= zaDFCZadY5G;2iC^MR3LK^fC!s0atiHeKUvtz909_uT}J1V_a0s*UZJd{#&juA1O~7 z+%C9qYkaD?#*p;M8fEzUP@9aW$=4ZRA{o2bsr<(}X=xa@Cv z6*-x7rcG6z6b#vOZ{}Ctk>5~?@6@$78wpVpaAy;Db&YWGzo{{|(38TyWoi3SO}~Xw=i{#WSv@KIJlwTEt8KR!(VbS~ zKK^r)`ihNjb(!HDvJ)cwXp=YD%!XCX`{Byqd=^j!VMpQSz?ob6P&J{1!(NcV#C z4Ff4eCfsp2x`!MAKT*c>f%D;(9c!}wL;xLG*O$SqKBo4Sv952$9dklCZZ(pkj^eKP zyUBVI1HD?HeMhsw&6J%&q`LlAV|k}~xJCY_l=oI6s`mjrn(I{Sq8*9%I9#Obl-hK= z(cQGajPJ=EO6@1?c({xXTn1cP2W}!IT*;ZUxr35|x0O5Zc77fb^CRuzRYkWO<2n`Nj<>42SEt2z%o5zr5;5-@ ztR?M~mo-Rp-ZokNbGy-RzyUNg{ZzYW`LGEJt;Iny+(Nh^;p(jdqi0m)VXUxjZEYv3 zLMq$=>iZmd)UUgG=nf;|%3`=fv{N_2I@>$%A`~@f^bQ$(=m&SBvLJ&?(h?C+)Ep&;HK51y`2uC^c%n5q)F$5o$28 zt@M)H6u3!nUFDK|gv)|UG1^KXTrON<2d)?{z8xnOJ|8Z|uzSdAJgGj#gvA zI?*X!zC?X;7msD{B2rki>UuY(N$@Ys197LkUTZR(dpD-dM7XSeyqefLkJ@~)*py*rn{RSY=gZPGRV z2b-dO;^CyIVkUD&GOu$cRp)yXmDfXumj4jgn`@JsY;q4|@D;o!Sv1u|b!i2fjgav~ zH%X64c2APpo^+Jr6A+8rcgPYm&8nUls5yj}B&)g#_K{V%S0t-1D~#9yTXF9gc*=Sn z!+w@D<|->*Ch-mszKpCbuzt%r_8vxauK;f8%v06_=!@{w zdYdBY76dzx1I7n zW_7w5_Zm@yGyfp%yV^=%5N8rxW;;#>LLpqnU3N)!+-o?K7QswFt4^|dURT5K6^D5% zSC-s4H?f?0PI)`&bgv2O*uBOe&jIwcd)jg*S2_;YQgJrt{FCV&E`)ITh+a6{i4I%} z+@3{e*HjkV?hafo+^$8ZJgu!M2^K@{?4URwZbt`h8QfAXoF_TqBXQTl?eD(13%_ZhvTR{TX?A8hL)GVg4FTeI+# z_utlx+hwuQ$8!{}0KKh*%SXznonVE!_w0rVgG+?#CgFTUFA?q#aoaamCR_}9?YT*C zk?pt?;ugY%-+M~ExR~EtRN>i=$9gIP&k;Oh3pmYRJBR*2RGDU+SE|_iF+>CYW&wIo zU2;FimW_mGSDx}dD;3aPmEX_8QAl|GeW$$VOEE*$j{A-Hkg~b-gT*W+qW4m^+H^Hz zGGK|35_kgb@Fl0b1LWu@ls`H%;%B9uq<6n|cJG=1m)(Jz2A2ir8*@@AbKo-J+E>6L zxQuq3^nn#{X|JhomKZ%c)#9G_nl;A_-7B64PPP7iP!c@?SJjTog=>M^4EI7OH7JQC zqu>D}&6WEP)BJL^>H%X+-U{41YtPQz2Dlw??Q^#SZfV`wdVAp(!};`NZaV^3RjURq zH4@Up8mZ6s&W@7^w-e46CzUwCW!NaB^Du5_qFO@Sh&kxV^;mYzPd?v^;EvR(50)Bv zo`blLHk@kxag9{K3Ag~#Za*^yG?8XIE*!l`I1O$B!dkK&IWp=bjSRxl2y5S36Gi`v zv$(-p0c6Ymwt`6HGC0YAuW&M+7Q;E;Qy)LbR&E#Wogb>M4;hn3#hju5|2gGNM@LT4 zF5~Um7 zvc@li+xmyv_plM`smC4mXWR9pvUkH7a2OzVWnbHRC;SLu@r1QsqFUf$;M&h2MhkV( zK`$OI@oa9emH{aV`WiqoJrPb4^l{Sa1#rPXshVX*PVWu4_fRNbcqHLF;CBCE&ou|} z9PoLx(=?lSSg*UJp&A3xLiEqAU+peYZI2qUz1QGA>S#WzxV3Oc9L<&yVk|eDfqP-{ z$;EK_wMK**v7Fy5r+S&Rh#5nQ@{t)j8*VY&5-CBbTCm*Yq0@dmC-C&C!ocMP*_z>M_C9N!NL^FKk9IROU0dX8R-P(j_>eL@ z;hmb#`p1>UaA|P9m9>IPtcFX4Yq9rYA|9lAD&@GuGI zBW2X?rm}8t_7>oDmSmXE%!edGmO&N^IVnRuJj(7w6{HYM3M{$?)p(%Vh;-G%)kdf@ z)l3|XxOc{>G0K?bD)!U0>?E~O!LP%8C`BDp{FGL6>RQTRm9xS~2us0j%xku8G;;8W z)jheIA2aiQR9)Loz;m+fMX1+T7*VlR!VPY=j^fE#DwtP6F;bhYUn2&qlO*aofZpaI zDt4uj6d24OA7l+}=HFt>1FpF%IpCTIcYK(7bS1j;a95?NZ7X^De<$u;Y0ci%*11Ig zRh&0CUAmSyTwS<|StA8^MS8QBCTrK@-?Mvsc4wJICZRKJM65?OI53*EV}EVTy4k50f2oZ*}czBf6{n?M3ihx~^Cpoz+9DjY~pG z;C8@K+n8%Z)h7{T!v6_l*pS8mI(m8YS!+{pARQgfH+#uc69bn5_kgvFzvl^KglisL z;q7YM6ZD#T-28p|nJ0`fK`pprmNa``>m+{=gn{s+5fhljQ|YT8Y3469%=`JzK56tF zvIuVR%4RReROUyf))jDttD3z`N9HG!?+tK!;AX3*JG1xh@)XAkN8z-mn!O)cYtE%l z8ADuIoq3V;)2i|*V^m-T?viJk`5C(TM9U9^2kwOnf3{iP?oaU>x36LTSPgj`^0bwZcMbPG_rullZ=+9B@^F6tv9?xCf12BF zlW?cJrmCN&J6GUd{aUkkhIL2gho_khcEa&bY(dW$lcOTL>e`wu&DJZpD5MPFRJhDH zC4<*I%TeZI&lu+iu7*q9fu2?Kr=KzUj5{E4-)TN;4|g1HHQXSx+N{OZ8N&78u(i#P zRAxBb+MR0pv*bM=cj0dJuH?5D6IH|T*%Wvd(fDO#+Af$zM5n{jT6!cxd`%Q zAsG2M8T_rIIHmnEo=4Lbj#8Y9M42pMont*@bDuEky7v&B1BmbV_t?|Gy9 zko|Bw;o4h>N8xtB`7$PLr-ky4_~vHs5n1qitHS4v$iOVP60ODiwoIG7)mq^y;9B$+ z??lT8IQTr%bS+$fd0q42nV##6zI__uoV{DTOkm~|I0sWP2B#55KknUPJ@M;Y#;7E* zHwkb)-Cu3GpE3COIv$OiKuDOQ#d;RFyuW&nG(+Y=)Qij>kQY$jN=TMpi#HZK z%sHsP`ozH)%YDJfh@IG-Mu=!DYdmpNA7QnFGn>_4ZG3@_vlzXy2=(y`oO0CSobiXRhZ_?xTbpkD|^cWJ!X$aXlH0e3Yxiw0LJoMsH70 zkFPg+rDsECK(eZ8&TA4{7mrlO`K{Yx$z2J0%h0P7y^GZ^>)8`l!8O8V1;C9`-Ci`( zyY7cOk=SD0D+*G1FYpfjV|fQN(dQ6g0dR^X^(g!v`1V~%3+FZT)6V9?;Ofz%M$C`IO@yoMz-7X1 z?!Zk7*ORpk9mqly*R|tfNN^t9+JS1@27a-$8n-d%>`ZKi3+}+}gbRT4^?S+KemG|b z?kJqrfzx`iq+it*H-)%|sxTb~wsi8QIcXODneHVcc2F2MpBsm?ShLDN8q~ImQ*UZ* zWz*y;Awlgb^$KxZRk#;lrN(Tc36~LnH}TER`F5NN*~qGJ1cmHrYS2cW{F6U#IDo=y z{kiBpacag!T3SyBrHU58ADf_&>}N?Lr)NC9pM+jJ0Fj2EndtmZNg6mx%z_i+h%)DHPvLMjNEzofVT^{YAL z`nkosw-crGM5!50X4y%vu?nU3CGF#?{53jrKJGHNdh#_RVdNs*`@5a??L|`OUv*`f5w5ED>DE1&tSG^;x^@umemPa|p>C{W zjAX-QM5!fp#^ezB=K(GGwD)25>ds$!t8dR|{c^p|gYmlvNgHz7JA+&}*Y{R^)`)fc zI*%dd$6>BzswZFPS0VFo=VqR6{ck(zSWDpw;QVpRN4Pa`(>idqaQSdDa^xd=yWq+? za0lR)!F4sYEWP7!OEXW0wq7`fKxaHANv686o_RVEcWtIBt>;1AT;WHb_Wj+`YxUT! zRd9`PN34UwvptBz~(b&`86P7J;{TtksngEw}o_gpFV{+gc+*>D}_Lhlh*jqWb z(Cm$HwHa#67P(!Vfcr94x`mxmF764Jt5sXr!fn7^aE1C)bPnLo%2Tm#;tuYwYcW@< z$#0^cfjd55-7W4y+`IDC`Zp=ZV%&T4)yHqro44ZLGetSJa?p7k_r$5E<%e7b4SVTU z8a9!?s&h_LrCS-O#kgy)Q5&~1b1cJs^qSUk{jrsD?S)%+y^46t$O}vzz^GqvnunI( zuBAIKe~UYPOW_KX`s^)c+QrW?53V}xJrqP8hj+JrDjmCxt`MHYRo1HM+t@#4;y%9i zv{$#RvsK&VGz)Imb85>rBcbb@8cvkb&v^4?QkbZY!3FLm{K$wi-mk4kUPf-`nd`7* z=J<>=vd@ZgW#FND@7~UD+6!=Ref6~W!5M10lYH*nZe)a*zb)@}#ydbJluJS_gC>3l z2FKp#S+wHLc;BPnILCzYGF95Fbcc~1QJBJ@&p6Y%?n>X82UnP(w(Z~{pVhec5dHwX zeUK>Q@tyNKPku)Z@upMY2zUKR(vurRQR+fCSK>hI=P|1EZD|YKVduTR z@onQ~J!RGs%3tH~|ILAk#zvvV!8q}H^&SWG^@P;>`JeF9e)7X6Sm;!Dzhm@Kb?+K( z_4>O;m)HC5G`DGcS}$bdG(+nx;o$Ex-q{%>BExqlr;f}FS}k)Ajj!EAeC7jl zsLH~3VuqoK^|GrwR;Z?3q|pjmPf+r$pXqiQep)yD#h+j}Bjo};fPBt)y|dFo{3yJ4 zHnpl9M-DyZ(72^Md$dbkHr?+@&*JGaD_EaOGF=U7KpkiR`@msv61YzKX+1y!NC!C} z4-|oNPzkC*4X6VRU>`UPP6F3I#0Lo=9pwDu=h5B}IKpkiR`@msv z61Yy007wAoAP3}uB2W%0K{coWb)W(41Bby$;A$p5NC4>|$HP}1C<5i65>$g4PzM^o zK5!VE1g;hm00|%+<-IuRdm7vH0$B}IKpkiR`@msv61W0L03?8PkOT5S5hw?hpc>SG zI?w?2fy3Y=a0L<{Bm~m_={Ryg9w-9kpb}Jr8c+usz&>yooCK~Q5&#Jx9pr#KPz1_B zC8!29pbj*Eec&)S30$3t4-!0lrGp%h2Z}&Bs07uZ2GoHDun!ytCxI)N1V92v2RR@Q z6oGP3393O2r~?gPA2fg(^2DnT`<0d=4O>;s3vN#J6g?g0`& zI^ag2mIpXK);QtkE!)HgHJ}bOfPLUFI0;-K#1EnU6L6%19FPZ!Ksl%c)u0B{fd;S- z90n(W%OC-e0MbDY$OA>798`j8Py^~f1K0-+gOkAJCcc~YPr#85azGv^0_C6*RD&8& z2O7XWa2T8fu5Kg%5<-LW%F;D*>c~9FPZ!Ksl%c z)u0B{fd;S-90n(WD~tp{0!RlrAP*FQa!?7XK@F$_4PYNQ3{C=9cc*qy555vWI>-Te zpa_(MN>B}IKpkiR`@msv61aMh0gwRFdpKYBervqua2%SY#{Fs}b=9VK(Xv1Rm@{47 z@vD*IS%i%w<_rd-`5heV)cRxk3@dZW&j__!kzxjUkW-NRkx59$txoN747cMjmZC4zaIh*|HodcG@CKL0f9`D{Q&e z<~P`~7AY4zj(iAt_dKUoiact|skdAHUC689``zK>;F1>*Ap^L+whD)2pvIQ3m;vO} z_BYt_Gh2RxOhv!zomPp%kmAoq#vzN5W0C8Si;yYvt&(4hl>wsdMs z5KEApFKDrMJGBDj0;E{5%WU~1QVs|s86xjstsbm!YU}YYxrau_zh;3`dlM6NTBTE) zh=1LER*j@Dw&YG*PQKr%@yMJub_ui1HXNsM{6d5yORctwc+jbx4}YyK*CQw3{}Xu; za?C^YK;$8$Shq)!QnE%{Iv;k*E3&mQ$XH|nQu@piAJA9`t zzg$jLNq?_%*Aqta_qHs4-O1{CCUm~T1M{Ic#DH-WnZ6y$clnV{A{aHu}&$s=vZ2tnJ z?0Qz){6?h2^K7+=kC3uW`ofk!B1htnR!&V0htEMu`1!WH+?F%!@cBq7$YNv+a-Hq3 zwdD?^#NUmS+n|S#G%0^FxWa1NOj{P)vdWe_Ywkkp+bR3prf$kj=;w zFERdi;;7$fb)p7a?nRoNW|LDJLwFWaE^rAl5m}BLid<*=_aLRoP9S9h8@kzwUx4h2 zzZ5B}W0@`Qu=&Lv95O7bkTNVb*b1*8rDWS|`GGC>A*E9tL`qwCe%ZS4Af%jTT!0k5 z%;r}hr63KqJb^62KlK$$dUoKDl6{Pn1b#tE=ZbjMsr5mQLQX<1K}r*3)H=2Ekn@qk z??zsSOnuF%U4wiSDa-N4Na2UpIW?Z3*CJncYL_BQkizdl9+&aIqaL#cBIgaK_Bir; zq_lDQ7N<4~c@TLma@?CvZ3FTc@WP zYw-`+vK}c-6wqMtLy_WNVEZ>9JwmkL=!=Yg55oaD3t5WXkIX) zTA|HX+y3=P$@osB4Cfy2JLUC`+I*zc%wpSr%=VvppYbmj82W*AfkLEQ;AY#u7AY61 zM@qtR6)8Et+m_EDr3zm{N7736OmGoyO2Z0{@;v4sxae-RfUt0 zQg!2hwjxeKn!Oz<7p_JwL`M8#@q>_JDHS7SSU!rB0z8R)1v%+gYi2D$N(NRTr3Ris z#>x0^z#&z)TL|QFTcOeRM;^7pW04X*9w`@?gp><7ezR*1DO30)q+IAOr06Y1N&!|Q zCF3#2EPoo(BRMa{Avs@xln85)GR#gQhar=Gw^qSoq-3vquI zviWve>pc%zR;q7Hl^5i1&WOIPlW)u9+X?wLD!vVd&;Iw>^A8bU+WHx!G{r_+Zb6D6 zvdfnHZ0R|KLn1UHC4#fFB@J6fA|+xHQmU*NDa&a`JHOi2_u2P8^ZaS}Wb}6<&CZRy z2LENj{xS+Y+Eg69AZ|g5;*&^G{1;L-iCJCzIZggwn$zh0Z>{NS(#@6e{|gQ&`QJ#% zKulLF1KCI^`G2$RI@)wT)6Hk1O(wpicbA=>&$9AaPNpFvgk=K874;_-oH14*U8 zA{kYjllhzL{|RIo{=`sAPD3W(Ux1Vvdk7hde8!e_HvccAWb8OnG7uK#uf2=>5-ITx zBPAY|l*d%~|HYIdJ)b3YiVMhvqq|#urwl3n6}JDF?eEru@h_dLxQC^%)RvoVx!0DB zNLe&|c7f0G>9__Y_4GIQ2a}OmsPbzNV&igq_pXmNNMwfNSVrmA}oF?QmVWN`5H2^x4*fy^Vx`=|BaFO zf3p$ONJui!(ZE0Oi8K>P@HcI`Q%JFBdi3`; zE=9^j)6rV~-y5me|8l{OR;q2C{tx4H3m25B`A<6o-4m^nL?flC;*pYG9#S%T2U2Qa zgYDmA`yB(U@B|MIQMeK*O>wO)OOdbOKg(Fe|Nm+$#w1x8OhihCCL$%HlWo7J+$QGR za)B)uBgMAcij)(Oj<(+^TTe^&H*LHeWDt7)&4halquaQv5n9xQhI zbI^7=bl2Sd3^RxS@)%w7bNb&XT2q^>!eSe%dY0(dVdgf7UJD)6IV#1IKYmI)x5>pRJeUMsYgg zv@pG{8pq`4%XDsc^M?`@6wHtvhSpu*IECCz?v)I!gcgO?7^OGaF<$q@u)=-O`hP*R zf1A-{-ta~Kdb*@J;A%VaF<)dZC;x`#n0y%%xb9EwpB>|+-Mm7Zbo71_BpLKw&Wh&$ zHeu)bqFG@*bSbyv=05sl0;YhF9Ez=T1HufrTb~72;ZVzh-Qj^f^#{2z;dts|^{vYt zJ#aD)Jvuh;qI$2CINQ+tpfv^KYB;T@p3KAHjvaOBDyfq@D&S8Z+;e>P$}V+jCwJTp z$LJ8BNR9{kY1&8-QY;DiqONqI+_IH^ZYoViVM?nK59$7^o~%3c+rGCIZXxiF_6j%N zLIQ#Mp=IhTE*|*TLwLLB!A~hYz#U)sGTqk9_(9_QB=M}G_tHQAk%Xi5`(LmXbhar0 zpjF{aDGC?p4>a+>5Y3~rztIMWf|-A^mdoPoxI|A>_XoJ+E?E5`zRCI*x7)=nMfHwW zb*s3&^z3WN-c)@f!_-W)3XR8GwMg{G&(+^#Jh0a|6d%#m{VF!l9UJ&iG~RdhUk9j* z18Jm>2I1YUw}h%v@w)E9`>Fon6!oxpjkRQDpPm+_HjDTBIfNe2C#0)S1Kn}@V)b{R zJ1Nj?vrxy99V#)1dV6sWabg`Q9(73&aW;!L-tpu0YPNV^6K{g!+jVN0ct_kyiiwWd zrRwD%cdv^x#hc{#{8egcv5Qp|Sk-7qqiPZQ6&ItC;<$zJqpv5l?tf?ul{5x9-hDvz z?Cg$qtURSgbaqGeouAJ9C;cU)6H5xPYrnUChvrCggvY5{JG)0*^tV*NIgWSc>Dn!# zU5e(dqU~$#WtUTcOh@cuUAtWr9wxB5ExBI$ic3ggjAQ8y>L0EfIOZ?(FLbNLiDm=t}o}=M8b#;h4B0##M zU(o{<$`eBQr8oK&|Ms4G3ZLV(IqHoNcXTJ|g?=To)i)AB`k-IwZ#mV5yH|j8H@`Xk zma4w^`b*dHyZMed%JdKGwO=r$?%tLBTfH+}pQrhi`M;~KG2D@koadBB%CU9UG)VyHVh z;P?d`)yxjPOI;GmHDli+Y~dC6tK0DnlqJFW*zGl%_Cz}XqY?Rk@JZf8OA7+$=^9r|5d3OVN5GB*E`4R zBbTcR@yZPC%+V9>R8Qj_ys8-G0{v|sdry!ixYMA2f{=}7CZv(*eD$I=M}P4}bwsWp zYmsxF9`w2D+T9)HkvZMz(IaUTGmYPff1))FqRTAqyjRa>%9N=~@9JjY0Q(|lNqgyc zXQ8!Je|(j#m4?PSty(1WsN`a~el9)FoaV0}aGG0F>$|&y0`J;I>?ifi>(pD_Ddt+y z-Jl)qQ2jnwpG`?bW`hnJ@6Kl)WhA!5j{v<)Pv$)#{stU zpdPwO&Bd$VrylO%PKubb3AVFiT#lwm0d%)sGY7`)NKyap;T}DDKEq{j;!c8Moi{K! zhy~_c2$?$R4ajZ{=W?&eKe;hn)1vN~fQ>dtoS031^e}aCPj}BgqT)Y7*P}x@b^;** zy`*P!6Cc!91!;6Uk2{?GI+)U`g6?sRr0vw(e-Fu96lxA;H5@U;4XC;`$N{Wr{x$g z?7`sQPj{&gd%2U7mNTL0FLmc!9ave=`sz~2{^Rwv)QsdukI;uMQ!x?ln51>hggl_n zlumnwC_z1l)=zYdbjf*y{yz4t|4({%H7kOpzteaw?sQ~!S1Q7t7#KK`zzZCIJfe0* z(8ND8&HLv$SjLY<(0k-XRsQ*o5<`Xb#w+%P|5QivH!2lx_OWe*PIDYN!$Shn@B6>4v!J0|Bp+$7UqMC*0Yv^vuaOH)=c|F0b}%pLkignrRMBVLy^%Kux(os-q5 zDEEx6O{A6TAMY>myWFFmk8=0x`s`#~EAUV9f7If>jB*douD+Iiw=4FGD7yJ0%XH1v zPwGs%dDP+ry!~Y;JK|F5^`h!Z(SIZM2@oQ2bS+M=Ru@ORV-a%@{YF$+CT#kBAK6CYn?!z35;!TBF%-EX zfmOw-Zy&}8G6xy($w88s!w;P1_F>61eK&tMUOghd-@20Etpiu8ms@?eMT}IR;&ZHP zR=@UP{+~e`xfbr8rra^^KAzqOxYSR*HSI58Us%>TEn0txAXoM3C#e5`NP0W4i)QDn zoQiTi{s0q*)R;aHg^{AvF8k5?ktC$EtPL6WoND!!?i2lqps=e zjv6I{)%9WO)0!r&p-1b|L0zBTz%Rk{i7@%V&Tgk@v(VB%UH^W1hN|!D9u+4&%=Mqz z7UFI~^-WPX`+zY{)cas+sqV4vs|>RrdB@R5=to@^C#Z^8cf98S5i4AN`t2xpF;)Ea zTU&LwkW1e|T|43mwEnl074itmgRvaxUOkBWGegYX@Q}x+a~q)^E(G~h{jo@DeC&y%cwdh*zM`QAz|)00Qu&G*2va=z>O zu-X3oZ|<}tyrw&1Jg=I0*Sl1(ASS%7U-7b4mWLl^9j@2q4RMY*XXoE%(yGc_nj!KJaONM5^zJIje4_ z$eu4w`+uz)50x{Ll+LQ0B8Zzn$d4r2zHU5_PqYSDb@MAazPcIs{#kW%GiIEhUQ2{G zTO)O>8(-yw+%M&OcE6PPnW6HX#6D9`ey~!$4?HZPpC<}Gh6d16lCiz?lx-Lfdh(;& zB@Y1nqXr@tp2zrL3kU$w@vsz|bTR`;3mu9RhN^yzFljm{%bT5|nTlH=!MPiR_T z+zJ%By;4Zj_`#j}vv_T0NXHMk;7YUV{i4(myu)OYV4(U%{WO!(#HU&Q0Kcdacj6ts zJYRx?{h~^*$2&rLh$GJMv(~BjbN>2WUE1FrHK_VFLUT%vYUYuuLmw2!<3=FlJ>u(z zB&rS9&pg8wFZ?B1t?KWNzv#N(@m-P5OzqI;qr0$GAJs`u6L@v;UtCUKNx=HnKr=Bb z#Wa0jI@c}wL;=Drmg?bOTxK=(yvM0x0 zW-L`f0s#Rrr1jWW8`YXbcW-C>sv|F|?TPLfXZ+K*Pf$x=k2?sMdJD~?E*U+(R%d#r2gUjo4D*)_={S@ta3%` z@eULYoUhgoaQ6w=yq1*ynd?!X4seHiUZIP{JN2t(Y1&Gu+!u-bdRqby!eKftyn{Gl z`ayp#{}G{IbkOLf|IGX!-(UC4*UdK5|3c%GXziC&Nuu}LB$1+D#R8%m3EaB?A@8Z; zBzJJ&lYT^2`k9gHt|WK#;I;g2J${@1>jzf*>sOGPd%)TC%Jp|oWr~x|C@f{N-p;valbY%m#@CN+}%B}{{jL}>gUW;W0Ku5 zo&cN~u=-)}Nzd_WbkN`SV(x0PP_L6qK$l+a5%Dwz=K+=t)H7zD7 ziUn*3@p{oZ&cJ)_ka+%u67SXZ^tGh^^m=E~1^gvRKvFkD;=O)=c=ow&VA;62oKlIQ zr9Vd0wxeM6d$PNGz(j^YVAaBnDmaBcAbM)L%_ZVX40&*jkJ9 z%Xr#ZlQ%6A8>0h5Mvkth0%pdf^SEy{Ql1EWesQ7lnDPsbB!j zy@mv8E5Be>WytD}5VoRS_yE0TFbef41MO_QOkjOG1^wSlNr7)QZd2g{-O-+}zp@kh z1D(e9dKDN@fuG*HOVjQj!-d=fFc5%M95P~t?;G`~u02#j_z=P}B-|_w;SsFPfk&@A z&+dhn5tiQ;KU)8XA9Du!9d8Ib^}#CEH)OZ+HGE87%%>hbqdBd0%!RZZx{5B!vi zeM0zGqSLPGdgzR{{cc4DvJ+7sa*hK^TT34shEWLCOR}UPfzsGPMIS#G2 z(Ae3k#UR@@g(ODnf67|%B>{(90}Y8l5=-c*ffIDSRMV~_Q5FgwssSPQ4YdbqdLtSa z>sMV%XcQp>%uutpnAwQXFJ@v6oUD&rrIrllXmH0)wL#=u{sC|>rhfAS>d0Vsf+M0t z8L1RA;$74|`rsfnB-P!^u`ohSOm+7e|M^t%x z0=Kj&aK1VMg?0LGSF7GbIKg^j0^W`KXqAc2^LZxusMT{1k<$>S2|Jf{R49gGehZH& z4ej$60ijnc(zT%@8v_M}tF0TE2kLD7FGaM_HP|p4|ON|n?CiD zG5`)#YjKgn-Z#_**V~N!^p??wk7UGUD9&_6mF8JB(my5dFqf9<2cU-w#7V z8>PoHZw|Zd^Az=28dn-LC(! zK)s*t9v)afj*v(7Z#30ugnOtbmW@GJTCB7{)JRr|w41W8GJB0*R9}v4(@LkCod`?n z?)&+P`fSUKAvGVnDs9e%rZR?9-fTkWT8(UQW+3UNCFmCpW2k@-xqxm+Y%G$0N>J{v z&m6|j8OmBiZG$CRf0%kt8!(>5QNN$i$67V4_|c{rl{Wa5OR38B1isv=z|6b+HzJQM zD^u)C_lYPVl*SE^`!Xnq*rKAxk}gl{dEFQ%VV+@|n3|f*;WuW{AEv zMh~U0rKze6cZ#R-Ay$^*NnfWk+P>?qYs0UQ-M@^s-^G__`Haw=4rY`qEniIN%i^12 z`BFna8iwXn%a;|}z+y9enl&&ch0dIh?`q4J8@iUsefV_CmmlhSjirszUwSsVd(Z`e1(>;ICOazeAipPlF)y;;+rY6ha+xIsI=_xVygkmLQ@{V zH_N)hywF~eXx?b~=7$c&=NVoiUca~sJ#;GlWcW>%caa`?qj*a#?_xdlJBd5n@-Edw ze;4l@%ezbueV@TF{AS6KUtE=Anbe41+zLH(k$7*lyzBHHx>Wk`f%?(mJe>6x zvvG)2znHjYfSNSQ-9Mmr5pnLwi&dUc?r{I7`r=coN4a|kY-3UyzVM46wVi-Y&oW^R zU%W$oGs@ko)5AaFc`!|#8Rd@XGz2Sl`0^`NpL1yD9h@*a{nFE)I!DuDzBj9i)o4j) zT}vM&oVmwXSb=x6ECzmYhy4Abo(tnqmob+A2>wWhN_v)6$fNjwV`WP>r$E2Bf||0 zf{~bK=@%qttH?}u;wZV%pMLR2W%hk^{@}Bnbw@H6KZ!-HM++?-!8QofFaDXo_sDdI z=gHFm=@$=SHqod0lzf_US3mvY%jh=}Rll`e+H!k7{o;nT&`W*MNZX2$HAWpJ?U9z! zeVB~;E}xR`9=_CjdanKj{6P@1h02wNHhDFAv^yoBH?~mv^z>)d+|k%O@#32?e4%;- zpZ~u1@u`iY-F*kF;dmr{=8IQym8Byw7lDcIhRG#eRg7`>_J|dmz9{5Mdy$`p z(S98WX)p^BP46cB{xPp|oq6z!B+M+JWd=v|Q5L7}I9$1+l={^w15 zW3ml}4@AklLKkBP7b3g;ssD7flin5?DqjtJc` z$9inUPalH)W9?1GnUATA2rUVb9r)gqb>Yoww3yJ-r#HKD^SwndI15aw2Y4rU` zSW{d0SaU-#qTf}osVV1jo?P9H?j~jIsXuZK|L!v8r_b!2MmE)O5ePB&6@*{WsA<9H z?ZTdsxmPbFO!joG;e#;4gC~r<){ei3um{?Q55J1=iI-e$$6rg>i=Orhp{r1s^wW8^ z!cM|IY#+XgUJ{)9B4&n}fkTA-+CIGZUc#poJZNXYNvS%6)(mEF!y$OaQeSvHVXAzb zJ2dtX^&`DY&xX3FElRX5hHUWsh(qedaTwxnOi&Hu+~<3OD5End@@aMkNgkQ>lkWV9 z*h$366qrMrU6>@_9|`n-obVVv}CL)QwB(9>$r1mN4AVwA7$0294vISBH|{nROnjN(M*) zqbjI4)$}<-Klqx!8!VqI^v&Dx&62Jz!{vn)_->Rc<}52z{=YQnCaE`$vO<6ToUl^M z7h^r}6_kH{cl!yfq%7Y^vYy-u$`1|dNtZoWcylEAqD*^MJ)O<`DhokS{%-;5?QD10 zD4EEE@>jOlQ~!!~$;qr9l>hl4QrpxnH7mv&PpXjd?(k?!>E+*P-d}x6)^&U8Q!iHI z$Gb~BGH`+_`%JL=UD>&0&77>lbQu#t4`eL1yX?d5f@C-ZEnEDc9kjk(kPL*N$F9q< zgWhcyBx4|G)xz0!&_RN7d>51cAM}*xZ#y5&?V?H74_f{aJFam-%8?DO%6;1-(02j*gd^ z(Yl~!1@_Q?xJ&(VzPopcS)z~iEht!}F`_7w`Ngy`mrYeb#t5k}7j(vr_4?V++5!Zz)9BkJYq4>NJ{8V39|T%} z)_#xhreoh#Z`Q-!gZr8#zN^~m!$+r_lFct%Rx8wZ6b}d(0$=MZt<-k)vBr`5xTHF! zzQg60u^b}Q72ufPE31A}-%&T`i7}|D(Kqi>OEyHaay@$Q>E+e*hK`~UQk5Qo=_MLYNcmQmB(f0978HW~wOd2g z*hY?G(5WBlpf+rT785%44Nuj#8##)k38i}fHV~6q54{skW=K=2|Bwl+9m0F)m`FlX zsyCXV9%_VA3axtDD)nw7sJx_Bed!X_(HIwkr24$d1PHqgL5~e#<4^{u<)r%jG*)YB zDpt5YLg8$Q)KZ4}Jo7BPWdT$p(5D&0m{g*-Mw_rEKs)FR_2b5lKuxPY;2oL72;h^6 z!;`Sfj7Y6|=WO)`a;|CB-~LLqrQ^nm)T&?Ftd>j1{R^o_Uly#kO?TAo_BD=+*nqb8R(mzY!X&z@bv`qd zK~=K`jdAfGP6`cWvIDPLA_=_!4$%qrC`3Z1l>Pb}to>{z(8aGX^nTsssO)r~fw8MG z)Cjh!)JjIjW@}VeGxRXoi+>%ZCN(omK^5zZR%UMWqBuAaUF1VI1y%b%oz@ITLT(CD zKgOfhVPA|^e{5!S*oT$Wm(3h8^-3oGlc6sT{820p)cxe*kc?GbUmX0w4urEYo_TF? z=>3!0yE&#?u{fN-KJ+BA$QppzirD#hhvan@%x#P%o0~hR+nVcZ#?uV-VsnSPBwsVy zT)KwHyAkoAo|K((1Wg%VNwP2ftd?kj`*>JP>a}pRX`Dfa?2?J2n(Ad)1h!R_Wjuw7 zg^p$xy)09Zso8M0*&z5VbSKoiE%dVV?8Hp1DECM4=QObw5Zg{kVQm!a-@R69)s~Lp z>0~Kz9D;359a-e@`gY4i-|ox5Dxu7R;}gsWV$)+zSJ9_HXKEtsKz-V(!2f zUoW(RZH`(Zy6v$E>ho5P$Q&_Wlo~5`W@dJ-8Qva+v&AC6`dlPdLhlHgedzac^1%rP znnf;*Aqb1~4HpaJh}MqK;+!&tH3poiQ|w7d0&O8?m2Iv0tkQj~`fF=GtDIV@K5y+P z=8aza=Rv#}ifUkI5ce9zuWV#au9#}AHn4}v*`^z~#aiG-5S+}WHrwRjJjN0cUdtB~ zcIa<$9%5|}-dV@;E}8FpA$SxZ46?}k=n)e9)oFevWVhh{3 zHgE&pQ7dQb12=9M2*F^LfD^*)ln49g_@fV8&o5vlBBWkkmOgO1;D_C_#lSt3?HH_N zV}WL$VT%>aKKTkNjN#>e#)YcEkWvtVPB`1vf}jAO@-|clqwNW}ZAORUcwpsy@stmM zPdtw8ES*7ELtxDeJe1u>2?|_d)oS3d_7(*623TXDFXNMyVEn_n{w@!dGXc&g!bRen zqM3a(l6cAdVjzDFkEyu|+S-UWSh)zF6sira$%nBsQ!2PH01#bA!hNQF8qZU&OK z#{GFpt<%m?PWikaViaxs1RKbR`#7){&3FsZXu=9&gcWVd8UbqqXCsoFC4yPjJb*1% zR+OEtKd_-hdPyWybMhqMS#=!9@Js|PCM=JD2{VwIB`3F$`m`N}$AtIb?fh#AHL|^U zt)WVLNBPJ@N}Yi0nCO6|105Yww6vmUP8gw_1gbM0y`v(`s+Y zGC22chfgQT4YE?ex=!d ziXppvF+4`a?|Q2MQqy+ALW4)>1xZ3y03%7*+Jf7ngMvRPRYA*ox(l>vQ02}`C?QdK+WvPx45l;Ruw$uMsIop z=ap;Js%_ijmJgh)8tO4L>)gdUyS?U6^!8BzC+GxVV(07s5|I}pe7P?s)}kL> zA9r%Nn#e^bcQ(?RgxK?R31Su07oCvRV5|eWGcQBXLYZ8Qx~XBEu{6oGXhW=;(%BJF zN-jECT~T%yD!T-ntTp1GfLgs+0nTDjbu#hLD9uKU}Rr@iPfcy z7@;O-vp?ZWIA)^$Y;}?~EU29D1vpE=h7k0o@D&VVBqYeo7=#4C*+?4Q#=f4ccIe_L znYMpAW}XXM_}0s0j#xJt-iyLp#2hicFTB4m>P!ihFh{&m9p1|}bZ&E0b#p~lZ9e>0 zxA#|%cX5O@eX$q5K(_flQdo;*c2If=J>cVwXYUCyI80Er6fME-(Lw1LC};B0uy>$s zQqke;NFTL&R~*z=K0t)g?6b#e+pah+aPK6xX01A|D_%SJdxE--fjk z%X05~tbQ?O;ziyFHPTKvp9~?TgUbY zrF4PDbOQ~h!Y9DT%$S3c$jtzM6q^A`N6w7I)+ffEop8Sa&h`$X=@Vnq5?GvSA(&0W zAC>TtgxlYyYLds6X8WKhRG)N%iIz{A%|Dr=y1MIUlKmsp+THbe^GFS~S9g8hY-v$v zbQkmH#_op$krfR1WL4_%QJ93oDUW>&TfmKZo&A>IY} zT%n!yr>Tp3=!&e$iIC4mf;wKO>(gdI%qnKK7{Et5C?*6hP*Y^3|Ed<~DK&c0YMGwK zh0vFX=8qvLvVm5SQ)w{5qV@2+Q>i)z0;FQ=lSS(Co?NlDEkfPflh2Wp-&Zg9bQELJ zs(&v>G*nkXd(<+$91%6dOxR!_+A#oIa~nBce0?U|`!=v>gqQNg#7t<;Rj2hr1B#h& zbr*F*FI^4r`*3EWp24Oe-drQDKI3ip$s`CH0B+X_+NhHo@IPuo#8IH9Ut#EKfT5?Q z8sIN5{^>?)fJkaULk-|wre^ns4p688hV^z7*YsAyvE!g-VePs@8wV$%iah8lfM2Jo zhkIkR$@y{T6ZIa%X}3YA^u!Q5h`8q{exV+DZiC*4P?P&O+BEwh3->gG+Dt^o#MGEY z$4tv-%0WqCCW+|Cq4Mx?pW zZwGae=Thfn6~1mFy4_iEESTMeuZZ*POkh2PFT}Y!9avA{b2;ljg|CU>%%G+En?SlmirFA7_ltWb=JVnG{jq~H!&Lub5@8aDMcDB zj-&XRnS-n&A)crB%dSx{H^p(|3gmg*8??(4NR&s>>>MKAb{SYM8IfTnK)pv}>p{5Sq<*L4ua#ZJ&G<=(C7gdtU8D9v&pAG_pI?|m; z_&%G>eV)3@Ai^9K9n89%Lxip7hj-M*Z)1)aln<=WAM8>4yp7)T47~u$L#ICa^1vU( z@-T=(g_5TuYEoYw`XZNu;cR0-FqVh4hwuqj1hZNAvxM+TgxiPXuf9Bd^S8;ANTkp3 zXRn&Czr!IHiVkyCPk%@8d_v)qqSov0h|DMSI&o^>{&-JXY_BI>RObL9J=K=}FnX*( z)x+pf7+YDnR+NM2|9P#TLjK2Ev0|&5IRLjK#AdpcI%)uR#6pGhRd03m07tYR-%6`T z2cU9={^n(ddIvPAzuASm7}RoRb_{!yGjO&LI%tX=Sw*h8itgP>CB{9Vk9CH&p&rHZ z_d{QV6EU?VLG3-z5gH@)H_3n-=oEWdB%yDmSCmsf8t4ee?EmdRM-<)D?)C5WU(-&{!loXthP74_Xt=Sgje*%#EMXaCd2v&Z>eLV zpqgo;%-`zggYX8t*cOjf&kTZoR_b2D@2k&|1-S=~9PEgwD@_>Z%FDyR3yAf@KEzg% z>d=_ti^Ay2!U4n*=u^Sk&UpM_e2PNue$&kACI~Mhx4#NHHw`E@6LA;o!tH&jsdxO^>lz}LQ0Bi=D~z%{LEy>}dSm4&}!hIVhOjUoN{Mr>d!dsZQz&K%qys9aju zI8Dy(&p;|e210Cxac&2(a&a~a#0hY=&AeolM0hNltB2W1fT&GV{JfpWu%DI0`&rZQ zw^SSLQ>HfYqlyQ%v628@z3SsL{oqWkC_nSjQa9>!NXh28@O zvkZi38qP*BX>5PC5cq@*edG&~QNZGS@p*NCPuz_u9`TWWO@Q@%37pW;23~|kL$zCdO2ysyd>abJ)&t|Ok&1Uoi?B+BPyO)| z!W9q>>4alwK1{{OT7od`H(*@AO&#a2d=_Cjl)>q-Qzib!AS6KFNf9+I@fihLF%dtG z@OG#jtzZ8`^X|+>_{-eM02{#BI#KnBEV|i4V$5nVU;St(HcRL0qQ+)_lB*sWih);s zPHuVi-cU!ZUqWxN)QDk@m^zd_6`eV>Rppu~nfcdEliI*KXVp~z2cyc4|xaRYhWY>LP08AEm*CjRD0QR*;E808l; zQ&KE-U|QKvG=r~%@L8QZ&*S!TN#P6NF9#&W3130y)4^bt5m{5+CxiK>5E}2?g7+t>%~`t_=a2K(ftIoyi)M~KyO&O$y&ig3LC`~@YEW}G^Lbb4XUEW9zIiW68MS`K1a-g6|{F5 ztgLbqlt5e1Bf_zv2(Klg1X!A8pd|dHv$+ifHx!ZWmWYCwrNSGDcSVX=BJ3sMZLH8w zg_xs?S|UDl!k;cPXNhQydJfP021Csp=uMMw`PxggIl^5CsC@4Q z+SnS{mV~!E&dKq(>PPj>SXs|6bRbF z5@6*PQ1?!9l&?Zp%)`4h!F6qFAND!ezFL9sF6|m4_#|Wq6l`*q3q9(S%Q;P9QEwhIe@blQyfSMUxtU@GkXW?BX%9v=~C7 z7VRvJuy=U0Ku8l{6*kqX{xI25EQ@L=ygT~{gxzqmiXJTov(Sg&2k|-#@4>zY`uo2y z1TBXBh;bg?FBMBE#bd#2o!V%MBe)cwGci1t`=fkIveRf-W5ZSvP9{bzk4gRbNOjf} zNAVif+Ck8&(byDWX0gyvVS_=QV?_7^EyL$q@rU{u;s^9X0w3SGsotC72(yJz=BqLX z1#V7Wt%gm-`ThYlsT+58s!zpzfrVK3!ngOFC*Qk>mfoE%wkuS_xJShd1 z2&@+2T8U0!ZVlhRXAiJ82=A=NweuVWvqIGG5AJ|sj$f4@1;PYFK#ZH^?~4?^zp@Gv z76bUukU$ZTeN(pu(~#35AEG(Im%pqjaD_Dm*v6M|4ja_)8#_vC)?Q#k3D@f8 zBkX9x?<@*K=4K*%u^v}D(~QM5AO2u1W@fet;I3B)&?-ei!sE=7I5|g9^`8Xe46(E% zW>tcO=bJC9)u!WsAA;MR;bwN`q}p~mUP}JzHb5w%$|GiZ>?f1qWOt+40d|hzu&RX@ z#6}KPhY;2Vj2vPK`I6vZ6VUz?g$)BZh6tjPLUHpP5`x(^?1!ievn2pm2nh=KNTV># zbS_qUu(aFn2D)D`h!Do=PzQ)&7StpA6~Gk&#Vo~pKq#Zv%fjQ>$d2-BYA?a?pW>6v z<#iz3rmCeA(KBiTw!O1w_Y_WXPVKY+BS zBvI6EbN)@C@VadNFlIvcr=k7^Cx&2I6eK=V*{$mEnT}+bxWAvNtKVqnK$?cvKi=^# zcaCX^{txxrjsTO1M6;vdoucNTVx~(R;uDWiPZsKmdPCX7WiZF2}97N9821NSQh^XJFI)JdlzTwhHa~5GY^l*6y zma(R=r$GFtYuT{hq*7@1?(Jn|qZEw#ifs=LLl)pfJE>Tb_4^(dZT z?Y{W|Ufn|FunmZ{-H^|xZq3@gjz-D%08i=!-Nw@zM{ITj;dgy8q0wtwQO%eG;|aI% zsD0+(Ej*#Sn~fVxJk<R<`4$LOflJod2^&AA{mnyyAFD;l0TdA~c zf0bV?HrElFAa82&dqs~SGe4?8wmFqX%ul)*dr^0_$6TZ!6?thj)Y!iVadHY9E-V@W&huTs94Rasb)C<)!8eLdRIpk&cVjyqrU)t7&P;64!$u2V z4nNd~jT1hllk>(3M4TwR-T0|KY_jn6axQxZ5vK}YKj+h>@J$oGfzCla;hQD)azmV@ z%<#flm@1#04y|EM#2iP z1dGgMT`3BO>e2#aDiY|l914#0;7A&gyKg3Oj+KSd#_0$ARI z;e3mO?{K_?h|;W71(pvV#sZwAE?eLTa(r3=G0U^1)6jIy5uBrby8v$?494T6yh239 zgs}tEHIrD-n@DRZDC_dlu)y}MiL`36r#-;<66oRA7_p-vqb~dCTQKOLct0=0u5cx8 z7^5S6SabIB7I*>JGup`UX2L@Mur$DIHfOo4wvqr7h#>l5D6_ncRC3vkkL3%a^#L~V zC9Hh{37yy*PFb(CE$vSPMH6wcFc@9gc%18b%})n9j~Idw#@f(W=*6lPK@Qge*h-*J zM+#%n|0j1D>rgcWZgkpl|zw!m$E zT0cer9Y+kUO7Bk_US^zVMAX?`wst^ZDr%JV$hohrW2=A%X!J%^#hl^?^e z9miYnGgu9`2l=3Fy_r>Et;*ppX%r(q+krpdz}ZL-!{pAPDm(NZD6!ph5oWfVIrDcA z{*p{sT3GKJfyjvvYNs!*;8)>_B|*iLFPO4O4O2NBel45z z7@>^S0nm(M@}{%rhN8b|7-{``2n_uXujjCXSS<2|Gm^+gjmk|PM;1k)o1j@qI^-U4)YRQIPsV+&d$FUg!-m%KkFOHEbNuq4Z_P2 zDZO%+V5z3J&Qtno7Yue__n*>FEWkCK)f&V1w(w;*3t(DK=`Vaa&iVfE4G_M5&OmHE zQsk#A@KKBjGZ9gKx&q(1xNr|BeJRvrQKFVHCw=rMby!hA_`a#O*!I~UAjw|5KSGPwspVg7@re_4am)Cx=op}i(xdf+n_u)Xk;pa99lV2)S3;E z%fLnWlpdTdSKYkSQ6$)nZ-OBDvUky}tTKScIvAw%`5Vwjp=okD=?bV1!6JXbEaE-L z-F#xX#3uop>5B*X0pD8Wro`6(+vtm@WI_JU&`uKn7T8fATwx8V0`@-{gf%J@rMm|3 z4iR`Qq5^B@1Ag$AO%l(C!(Smd9bdB>`1fCaB@>7RR)%n`0IMR9!4szmCIhYK>ES-cLj;N0mE}m&5@wLD<88{Rx zJ%C@0$0W!OAp9r7c<#`|HPD}A3x-im-SRJhM!E^gBZDRhH>ip47dQhs1<-qn!O12@ zDfVKCOL?Iz16T<_A_wt@F65V@0rdte%^*5m2lyN+CQ?i-*TM0#_6F)tkKTQC@MdGG zd&E+D>pS(Wr2y*8!yr$sOyjCf$y)eDv?_d2a?UnG!;o5>W&k=bTn~mXO8D%~Gml68ZRRKb6u*Z zMm(C}Ckm!olyhCGr{!QdT|Lxd2wY5&sh&qzIGF=Y!GpE9G}WbgHe>2gNE(YLg3nx+ z>ZwE%kMt#t z+6MX#ab>B=Ur352gVKTo<%4cV+(QytBFYK4;@yD5=ZV`By#B=HiRy}zZ*VTdciaIi z(m@|hQw2qS^)wY5YibHJ`xLw{^Kv0gs9K)FQetL50X?fTpxTx%ul<3rzkI``s>SaE zR6d-@T3%I)GKEC}DyzfxK$I0z6Mvy?{;&~p6IU06bRzMpkgAr&6Gk%AZmQ(2fClKW zP(FzF50-c7%1j4|GYz;(9MLSizJnF{uK4{gp|~g3W-xXW%cyhYWHnK%f@%Uiw2$O>5uQ29`22r>F=y?2%& zJG+4%e1)Ok=k;O%rCMZ{z_>vy(K!0oUY~vf@Fjo(7;?UKrQP*n-IZ)miUEEzFGVz= zu0QJbr|bs}L2FG^(LB85`t{$a2+8UX#;8|V`u(sOEs*59K$pSA$ZT;zy1Hq|5S0CM zz(+{Pqm}%oup-}ge?JECF9EnCK=?$bE#KVKA5*cZNKSpc{(ohnp6bxW~;A z5|?@cD^=Wgeem)1xT-LI<%?^*iM}cOMH8Ha;%e8$<)OIsNvJN9H@-ZM2jP`RL4@-q z6u#kA8=$MuT;)7A9o}kU?Xf$ZP$!007e0^kGGU3rmtZRVDMZ5hOYgl&>o0#4)?b=L zr1h7wty_P0BhCGAwxb{z*55Z3KfEo6aCR1dt`p%T5$x32(EG&e&y}~~Rv3{OLIdF> zNp?|T5blHJoJ;b8@D`DHQes{@4?o6)Fcw$X0#OYS(sm`5DoLY^+ph?kxObYg0kr-I z83pIVf*f%d^&)HxY#zW5ULnXfd-FXsSvw?b$5vt+IQ~>6F8=6e70(L&^RrTu_*qXA zM?6w-UDjI^u#7*_V&i9}zb>m8vzfmLphuV0sRb17iB0Y9i1B}{MibLwA2CU^n~5*> z5tFqR-i1jnVoC%0NlJ5+$5|B{)`;n1&mio}5i^9Z0@puA%oM)LPKJ&aF-wT4?u_jM z-)!M)=xmR*Fk+7IWjk$uLgqZmi8-p5vu75tcLmnZIp7hn`S8(J0Y|I{PvBobs3i(V ztb#Z!M5w}x6ILDA(jpc*G6~&`ZwFE#BNnp)5M3C~_8fn3pIwA+WKr;z)x+%;>@?Ap z=v!$Khn~eqjYeG%ny;qz=ds1q5X?qRgy^GVGNiVkH&{arQDS;$jdAXX_;K-AIWf!y zVP#&D*heO_5s_g2yk&$`4sJJCRG(mB3E)Oral9#{)?W`31m!3{bsRIAJcPG!eiXuA zJep=vlZy>%zcKXeC6I!>Be&rLUhb0J*Fb~S+T<>EhJ-|!nzS*w396be#0p{t`>P0^?;%>44XEhdt@ZuV#=xNdKPPtn@ z#{|aHss=_Kjm7MgmMNM4IGQ^*c8APR_A3NbZz-hgvJL{^PmkVZt)NbEcT?7i8kFxy z@EW8yBcs176x-dGeG73%DJ>F1waLTZVdoL{RD`R~vYcTG z4_8hEd^s`CsW%P)C6vPN}uVA~t{fZ>n z0U$)Auy#ude7_+4cOA2n(i<(2LlHOLK%>!b)3C>!pzzqH0IGSCq<8w+fV~M=%@W+( zW&?1}nT_bXDVSC(`c)hE9*TvR9D*1T-CweF5L?38C^sJR}Z_Ut9;wkbZH;@1i#2w!=1&&(s9psB)ighDen8cdH_|7gj(Jeow;cR2sv3 zQIsXXc^3zN_a$lt`cCtr+VK4@%jx|3JbaghFTuG5t?j-ddR}$sAtdd-DttAZtB=5U ztus%sma}v(_^u0IL+AEb_-+WM(%fm^3hzzfZSBNuUX%Nl@MSx%Lqp`gEqpm9Z^KL2 zue$F(LUlCBr6S#zMQYN4d=G@r>io!zXn$!Xa^Y~|ekgoJoWtF~9tn{ilTxtsU>u*^ zu%CQ{wj(KlObQK5ivqO}6I^Rx`gX{%F)7wm@DTQa9=DSX)nXRS8#5?xO#I>w?=As> zZ(>4qhj6cgN;Vbz7`0u??PA5S;PX7VbxFK&B4t!-Aa5NH6U}1}$5vbYSY0?`ISO?cf+_e?y zFBmv!7W{Rj*B;mfN=SD-=`9k-+Co-+=?w||9;O9%1L<`Ieu81*ZYaH;z_+Wz+emt& z1CJnY?#9wvBCr$oMDBFyRpJ9Zsqkk=e?s82abP!*-U@-)*Whg`y_Ewk)O(ssZ*^0v zyAW1$L?5KkIzEnm!KZb6sRj5Kzp^;0Eq?JG`g;tgP!>PmNzbv7^t`hlo=vT~=fmPr ztMV8`Z&Rzvc*HZAt$rk5B*e~P{eyC0J&s~*XVuS7rVVx=ELimyU7$v>YEUyX;-m+s=L7X%@Q{eWpRK8&2IZ-rlJB~k(i)eTYvB_!^K#T5bGnAO|OFH^b>Y(BFq80qCg@OCiql*W)cmPfh$c@WdmOy&+ zvsTp}v%UeD#bq;^9|=RR#h$q_>N>6`>kL{iI2*y({Y#)X8;QUvI$+NS7+_#gW{MlY z76VwLgHqYz9k&3bj_Y<1fOUHgh~1AM>2kHxppwQZ9?|LNy5inum%z9Kr$Zuj`!C9N z(DX9v4=7GD=q_s@a^X*pnJ1`Fu>iMv?5)bMN(w+%P^FjEKNIaLm<3teyC3j&D$l3+U z5ral$&O1(m(cQkFRIh+_o0vRn`Z!5Mf{Ym%_89jg#FeV8wz_{!==ii98Wa zbQS7bysPj|=4U;JcJ;G11@2FeE*{|G0e;pk$c@X|mq2>NURQg}qRxtO@)Q9c!t#uh z)d<}Hr`QOmhT{XMH`@d6cW@%yZu*QjoE#^o0bJ8T*=~AX^#^2wew@x_^+#-fdi1m2 z;aR8N=CVdm@SsTi^6F&;!6Dv;ENL&)711xS1{`NZMP|)q`C8PJW9G7ajcLYefoLvZ z#cJpcM>8J9efk82wl*B8-Fx zGfM~Bk{BY91Qv|_i+3P?=IrY2M}&%eh^&{ zPG(y&PO&Fgg&XpM#gZw5-Zql8(~cEGKD=ky$3dEqdO$OXA<8Zp7ucCj_yKY*q$kk+ z#OQ)lp^;*9zlMy_Z9`^SEBqLP0%oYC8iZGu*8fvEY zjDrOf^Vke6EL_yW2fcYeJ#^D}rv7d++@m4i<6hs(5>w|!#r>;{{Egyu|SH~)4+ zEYEJZxhJkPi0mp}ACzw$BhB9i;y}$yT9ZJTUk*l@ua(pKPL5AZzI%){|BhiHVvh8Q z$-z?Q11q$ci}jf86!r+a7Vln5$CvmT5)!qrtw0aMi8kUDBL48rPCM2MSH--iEn{(! zLqxa=@-rhs5^9iV+AbsfRTwEeu(+pb5rUzwiGo84H2yW-KP$isu%5;Fn(ExblE6t9 zJfcyPi_x9Ho@3+Ujkj)_O1v)M^f!2N)ZVQIN}^STN>$`@1}H1@((DS6?bH?+H#|lo z>)vE$`j}_n3$Ra8j4mjX%mB}Yj4+p`p|;kPrdkqzg6y|buRAW>Hw7M{xAiL=ibM*E z2kc4|<6n~~#MURHQo5NLy`+?`OU5sha-fHq|WvoEg zkz{3*nXLe{Nr&aChU;ih(RtTc_N`>58HmBY1LY^3W}in=LRrr$U`;gly9=u$rhN7% z7>|h6h2nrvpXQON<{xj1I%4)+SQy|$_fj;*9CO?(Q7Nn((8|ORBEnhcKAlY7h33MQ zrHG~g+vp-plJK6{S++nOByT66hyCUieDbfit=HQ}bG^*L*7) zvKtSP_@if&?3dnc=0h!Tt1l9nr~t!whjwa2)b`{8D92rE*OpLWMq>ZPmV&a*pz%Q)%BrM;R@5)UBI|rV7{^{?nJ<7< z+V4b|WZeMcsllSHgc#lUwiVUiK)>>Z#4Nyy?13R|kD_PK;3lxEe}a41FAf9I!m5K< z7fu#~c=*9xPWjdE>;5zWv5tO+GjW#_B?x}K00n3ny zpsWS_nL*(~LIvZh-v_8cUhPN0IBl@_Y#`;hEWhEv!R`WOU+9^pr0n!ZOU`52(G;{` z1)LHFk5__k&hPt$;z|Zf0wvv`nKB`c{y-dk(Zd^SIaUX>&Y<+tX=rTv?3nktU-MA2wOJ?dI!k07F9f8AiK&*=I zgQG>=z@`CJ_o4hEuAP2|9LH-~^A+Tw#>ZTV@gC5X zz9MK%i|NUpV=!|OdjKBr6~PGunf)S;a3tXzz$?BIXwi#V!K?@5KzRw!f4^Q%MSNZ{ zW(|vM3$-1I@Boc97@=H87qfxo|4R~50M_*-&_$b=J*+J>yI)fSbO6|g2)wH7hpA=5 z>BFKimsriKSe}VA350q3jrR9p-D3IB)qW<{2C%l1DBiL{R499aMvw6`*IB~XQ2YcH z80Uy361+$WN>&wf!4k3sAA^w}^&nY%O;9*jtQ|2!%=4=v%}8)c<>f&dtx_?Q&6meO zpH9`321XNu#j`KvtT)pKfmm0dLkx!R8bmK*#q2b{c?IQXGr?JG@TlL*btUG2Irah= zn}KfA8ORLn`eME}&%u7`_FfQv0C9Kn+h}5Ciuuc23`SDk$*X{oMyx#TK`T>?$wHS(c-^!IqvvZZT61D-mR%N^ z;sh|1IYjg6Ct_)eaa%&`$#L}&7~5VGMk`ZH2}?d~)%Xbi0gT^Xlf_wYT5=vsS$~6J zLH+94NByHZY0ZgAv+S|Sr6~fGl0?gsG0tjj`Ev_4ACaijnqZ{+3WF?tDdEZ}nu_zT zH+hyDaFl+ge=&6klTm4;D(+iD2kT*0^s`3^?0TgwjBe#)wpeHP*xJD}e%(O4jxO zdge8mI`P&S-5 z7K0bYh*SX57;zs-bBjYQVT@ShFuK9%kVxHrcL$SY)(ejZr0-|lf&93vlMun~F$gRMjB>UP=wi=P};Ge%8lmaX)K3aDRGq@c3P*3kc~EAxvUrP*PkB! ztN|VhxJLoAJgEQd7swvj01BTnYyd?1|F;3q(A8`J!H}le0H{he8vu1$%?7aJAkr_8 zzbodMvgYGRQnLa4OwZB=aF(8>4d4=+5ndA#Ey}dH2AoY zUugrF9K&R@S0J#KD2%iLEUTr(Y~mAB+5mzVYBBqWnAHED?tGoRm|LT*(t0_nufZ5BC0_xww{sQ}r6aQBdh7G_4P89LP zG+@{ODk8A94hU^WRZKrVHh|WEI~kNTfv!`M(HUU_7z}8f4$JjSw*j;-3bh+zu%)1^ z(`ojWBt^FY6vtMQ+W_{1afn#jbT4fH6UK;UV3z^j;$jq%3K5(!$Nb%PQSHp{N9>E> zqzK&x5C$U_by4O8Segi;E_55fMZ6G04ae#LY-~sn>JZofz8eO61`)ae?5h|eBx8-a z`FgzgM2sl_XZwnfHh@p_NfGM-e&Q=Z+5o0mrG&!(PxwlZHh>4kq&h^o4fKI8L)rjr zW${@k4>A#W5;sZU^vaYrfYC+qYBmwd0IX;bbQ{31Q2-kNXhk5eCOb7EYFpX>0>Uu< zu9J+nK^bY#_+Zp+04YJT*;FuAzQ!_NKo=_QmoZ1O_JDEJV9{2>E(J;(z}6|U5wD*_ z|9|ptT-^o`kL#rtX8#F$COBCPl4;lgc47EfSb4y;@>1-a2i*WvC$Is`!H8p-pmZ^4 z%5f4UDFrN#TB9;X0G@16xDcU#@m}>?9WC2s1sEF*R$d#xz_v*00MMTd2Bl>8P0nLk z*_igf^!v}x3?8pA-<;p~n_LpK!arm5!^t}M7aPFZ-;w(&pw!T5Xl!W%=pH94JriIT zjer|!QlrgjZ}{hQkmF}GDAS21<~_-hHh_b5W#{`4j4iLRqzzzjJDKDWFisIm^ulb> z3yGz8lPy0qmV^F2C@&0Qk|u2cbl-xH{E%O;8G_3zjI-)k{&^{7C4o_&SR(sUmb3xf z$EA=vXb#p%0i~ZIOqNpG0ESFvroV_b6^sRjFv*fOfHC9cSl$fAHl1atV#<*XfDWD9 z2CyHKhoO^E$Ou4(PF->HUu=zR@~?vV33mlikuK{jWYN$122G$s8rore1P|;QX^vTJ0NaO%8l)NmABB}Bp_XtgidSHvdSVpXoJR7>o zzfx0XI!uI}0Qc!)KMj|Q zxrhjW(L~TPAyxkUalha;Nk{^iW=IfA95nvJw_x{01f@ODF1{k9%D>TaDPlChNxmYa z%765JDPlRmwZ0Oh%KucV92Z{!{LYs^OB^)*+qQvlk#g}n(3`#tTH~Pd_h8QA1nU`W zmf`e*N|pcoG-jGi4G;sc91(c0u+K!8uJV7cFy?b2)d!(vUXmhNx7a|av=Q>est>i34q ze?dWn4FEh$mxRnnm4D(STo$1=dl%pmB4~Y2s{9MUboMn7wgTMkOOPu6wSDCX`5B;c zi5NbOCe|yc{AX=~35Mi610&!!Eg`Kvq{_c?hOC?7V3c`{B~|{3D`k>(!Dvn_Ek*1< zP&Q6;TjrINN%jF{*lWV1%0K%f*|_h5vCLN(mnBvHM^H~Z`#Zt-<~3PTsxX{y-_%zQu63fR*jQe)1>^tZp#0npO%pVhkFKb2m$fTW z@TXbMW$jOoG86%R)^SF_BF=c10%r2Z59m>ZuBXRU2=y+gg~cSY!iw`afDh>2+Z0)8 zCAKM8N1Sz&(EgE?*Kx1ac{CcATB^|}vg!NEO$xx51l=Zl1)cHRVH`>pKB)bm_J~X+ zLxgij93E>j2scN?TNj}wBkNFhoy~^gv2GX#YB}%sgS7NbJf&*yQ4gsHYy*pmqG;W$RGDabbq!5qte1Q0zS$qYMCqel5R^}9P|XRwy_Y!t^l}a z#IHp03vt<=f{a-%VpzgS>8LRA4J`5AZ6~%G&EzS>7*#M!05MS~%d=}38(0AxC!;q- zSu?>oUCwjaZ!55^ih2J8&Sd1E(2B1mOkElBaO;_1x9$Ie4A zp6M(QTDTyl81oy8SN}1rSrB4Jz=?u^PzuYuCyIR&A$JOI0c`X;Hf6Htln@`0;zign zmNXm@qS<)#B-Rn+9)`38HfI&UShfS2B{LfXWU_&FW)55?^ORs^mXo@8iGg5Fqh91^ zeG~2PXU*P-y!csZL}il2-0FR=`xX4-ckw@@H?o|2>S0a!D^&+V@VI&xI97fSe+}IN#d6*i!RuJWW$fGFY$TeQqD1(|j8#Hl>SaYk#BJAL zwir5Y?!euYrjEl&!2>bUql*f4zoI_1cSkJXDw^&x4?wCC4H9R7(31LMhYI zcD@8*YxHpYGoS#4?Ob8ofqbo_GRN8rO8qJ^Q#L?$4u5VEE8lha>^Dhfq%z4d{qp==0A%Q~x zDa7Qd>SoDe8Nl8}_-ev+uy!06=5pMqs zj{pOU;*^3H_IkrROh;w=c)!ByFtCv?0U&MU{z#e|!iV`WbBT!L6MylJKjeAw?%yF(W??SkdUJ^Id& zyo5)?LVF31Kg*Z!?n0VofT#M`4Di%-H3K{iLH#AXyGT+qz(1mAX@Gx5&(Z*IE>1fy z`4Zlq0a$903R`#^<~lgrGxBMKu54F*T-QW7*$#kviD1S)o(R$aA72XljoZ}!PXoPZ zFmwa_J}4jJ5N>AA@YnK(o``OMpM)jV%))?pb<|D;CS&(s2p!6L?!u0i3rPW`kwK$6 z@_7kwMrYcbbpqbc;7C!@06(m;CTbceszIY_r4*|n#gnX7PuwX%SfS28860dXJ0B>sy!#<{UGmG&7 zr2)QYl$Lxdfk}JOTEi~2Joaih*26(=7GG< zh(M_d1H6nN4e+;)X(=24nLc8J6lnbO1sS758sNWuU(~sU-2&&CA()z6jBeck{|C%G z7UsN%0RSg+EJv+0z`w*!UgWbXC>eQac7@1V2INb4^SWVk!mFYu*kdRLADz6|LN~xaKu)M7*-L=_540j1 zFX83K6hRHgJOE>fpk+e7g!ewygf2u#0a%v^ineUYm+*?m;*~~XbO74jSA;ac|LD(z zh;aa?5}O#lUv}%R4^T(4@}MLeG}`p|yo7hbgBouEIM<+X zA)&NAG{FFGFDI*gI2e-*7OyfWVu|IlyetbjOM!0mVepFZ$&tr$wi$ACKmq3`gU2hu zH|O{LR*#0bTcA8MXmrfB(;sO$!Ap3fKL@SwBeXD_-Y2C2{y{xi>E!_?>jX3n>K}bV z8sImgtMT#E29(Z36Z4+z64C&_wW6#A1&nF0v7`Zh`CQp0R)g^gu|zMdD0(4hC0o*! z5Sip*P<}ClNt!gk@589%BcFaD{P}CbqyfHBGbt+=Te~PYnSCis8sNWfjv<3(oh5=% zPa&GfnJlF=z}v^b;6=2KVDvSFNtQIgdjsWIo&v^foh3}_v?J#xb^bsv;Z1}U{przVrR{^u8cG4FoE>do zfEC^_EgHeV+@rGU66}3JzJ|wZ) z6O8{ludu|DmR6KK$0ltg5@NYvbR$+W&qgRCb7NX4`}=L^d5JI<;1pj19dXhkn7bz4 z^CH4Zfa`q;v?!)|S?MoP{`ZM-0O(kR{*h^ATQWt2tFN4;jw6~cZ<^7UGbO+ea zmq6=L+F&+)r6f!RIL9D}^(buu%RYhFYXE#oAa71PHGv5);l0?4e5&lv`B0M6fcqYl zUkzG)qDj_nwm6B23VQ&C^&edrpEx;H%)@CfS*e8(76ytpFAc(IrcSe&7tLadC|C_p z8XB|~l%^C^&YZsy1a$y9z+m`J)btv3T6Oa@>?GL~P-g2iBt?^ET7C230#J%j6|M*P zIT3hgvMW3(F$1S%n}_s~&3zn{v$`C+FDu8~8dKOh67~oT`cQ}zCRsGMroC@u6E`<74kp@aO1KFxx)B-nIC=C+NNGV+1RAS#m;o`uL=XrY!COFUafZ6hT)2|reJ>aS zUN<`p0tah=G&{{fGSckCU!D_YC(5}rJJCI8^ao7*FgqPa_z6mbMEjbZE+g=+4$ysQ zOo^J=X&CPM%>>BuzeEkf*&=v!&FoZS1TM}HUJ_V>FD}eZSI490Q;d4RG6)yRYi6hI z<4mSi6u&#LK@z85K6;BAA?~9IjxI5jE{f5g~U`1a|5_+XNZ^@N=OaLxeBBQ7f7JB$zS^MyrF0fPXt zzwzeIRHJ^@TJ$JFDO)aU3ksme%%9Pq=p>D;=p^`ZBF-^+dPx@$jb1`Gs>R5^Hjy6r zOI$bj$QPX?6Lh_k?1AS1oQ;J0c9NeFcu5DuOEVNpK}UGP9sqf1pv@6k?ZR z3xU=!63*71%ho$dIjDt36QK&g8omVCNgTzQX&MnS0p|J=&X&WyXm0_wvkEiyAgRNF zjwOc3zt&6G3QTXyNyK{q*XjhVb$K5MW2dJ}F<*i4oz5~kNjL~x%d(&Wfq zQae*Ne}3etD4Zy=y&oQpP7)K1?t_lP$|AVhE3AK=KB%c&)=W_SsYd;*ovkRpzX+y$ zxvYZ;q{mG9b_rG|GYmA+f=x36I)=1h3!hakJssI+h`Eb$K{0%mq$3FXO%JyR0Ofzk z>{HI9kQh9@X_61+vD8vN8<2k&&PGvu>W#r$7*2%S6YxWFP{`6j0xmSWvo-Xk`##MF$sd{SS57jj8`(R@j zdy}oiKSJ0l{Mig=`;&a)3%inahnm3srP8XzBvNqeH@>{GOt zpY9wqoNOvL012@4^sEX4oUBWLG4dY`heH zU9lrVt|6qjHKG{$3ZDF|71D4*X-GqzOosA|2_Vv~0+-Bw1PxAiW2{fOJ6!f`W>Ih)PpYEQqM6sGul_ zh{(&UC@SCYnRDhOo4o%o*Y#x2%-r`q&y+JWr<)h*@;F*$Q&P_+8Y zw4xNof4dOUbP`o7gg<7qw=^lyUcMqA4^z}5;InTiyPwTkb2w{ec3Z$*Pv?>zl+Rjb z)3cIfLk*H1&O;}4lFvuVJH|)G6YA`|$iCb@cGRQ=@(K`jtLJANu_Z0EzkSKAp09JB zJ!z4=Cf?)kA62ej7PC&$VhKn2*U5dFlBa1N!-R;wVsVOVLqo9p}wH0U%|C}#> zHdEh@Od9;@E>)*d3OJ1PWC7aF$tNSJeECFZ(ugM0;nH3TI42V19H~XC#6+)*dp>ZM zGy~h++Sg$T)uGh$Y|H0Uo3tXVyJsg;Qcd$K5-(!$?KlHyCUoXMM`L!{AH@Ibrcn`n zuJZMfvZe@{B~Yx0*+i!znwurg(f%EhDt*dbZ|ow{trh$MpuJppLemGRWBEs~?lsFa zI#haZymR16uU3pnpcnoRhTWe#o72zWOywibs7$iSg2PaI?>dJmKA z%bvoqvwWLY{fqX>m!=ZEXC$s3Oom3Rz7eu^N$3I)_)J@ z5^*3_0iOr-vI}Ied(gTQ(7+ov6sV8_odWPhE{KljC)YvmQ3G4;I=VyQ{sQBpMO9_; zjV{tqth@@rA)Dn&i6^130{Q_p6rf#60#vu@g6?JUY+dtV4O0|6PQiNu9h?i7JZXT_ z-T6P_BP!Kts5=!n6W|;HON*Ke2Tw9$G#~W?BQp6HQJ4+6V#1Z4`2tbhPR(NG@^&mM zfz=6g&G(7WJAPBM644!#Oi48_@b5P)Ub?WJmztZSlei{Xr6E}#Wbzx;Hu?tJFTl*r9gCH-Ai8VF^X~XPd>-o+MG;T}|*9JGE$~#A(prwmU0BdGx zn&!%PKuZ^qcWsH7xl3~m``g8>OBZR9PIgB%kL+y9JmynH`Ce0WcI~=Q_#%Ilg?77W zcIw^5?zR#rTSd$%s!UDxM_lYFuXLHuk&^zgmx?!Ag6u5lE&Pj^@k&>$GeZHR6mT@@ zApzPosAjye=6h1RD&3rICo+`jPD$fRQlfVQNj}-6`Ppn-fop)VoyzQBTl!3s(u8$q zFaCWR<87k5Y!qy#^5zdh$~Z!=;V z8RcW_6ZBU8F&LVCeg`*o9kYrv+(s$f1d?aCIMo*u zWI*MN+CD1@%KNvTqLQ)%qTEW@&8F0#(4)Q267tC=H@J_JI(|(eWPs#Gcs9H3@5?f% z>HV@os8^DDl?_>Sb}}W!G=Bwj3yYUj7To-2j#g=WvyAr(6vOO9y2?H{OuA%=W+#`nTuKZH0|(3dxeQrnDtc*bcX^Z0jMV+yUubKTg}Yl45&>Xsy9wK zQCOk7fgG5N?j|+d%pAaA(zN?I+37tAaSE6LXnrp6s0C8H`&K95J?9>F7nXM_$`0TM zaw&NimMag!=+%f@H)Q}IlOl@o73l9=29Er~gwV8)=Uat|SD4$R7nbrn1#BSe;?CwT z?BPxOy){@N6BM#CE;=B++LZW2ZwnGsgGQ^(L~l2SSKh}(bmJb0tR0(HmF=Tglg@na27b8}Vjsz7a|>R?h# z*~$364GBJR%#KL(_K*lkOY}Y>o7>X`ESrhmWd1k4b1}~ZwW$0l+aHyp{7JHj4_v-0FzXh<*050g|6=+6Y4y` zo@K-i;h(rrNH*kam*QEpawE|zvjGpAlI)YU3QwQ1Io=#JicV&YHjlhyAMH1o68J&|D8|;mNXM$EiEu{XxQ*%O60_$li8}Qwx+Ok4_k(> zEAqMjQbqJMnZ&1ijrpW=1Z<4Kf+9^uLGJqF*BiV;{l*4MsNXmvGy?|`VD-cf(V2~z zq^!jzxrKqBmTq`9N-P?NZ!npMN<pA4}J&YO=M?QxoWl%T1#gVOy3NzF$P>YFio($FmE!>jWZ?MlNIY^@Jlpz=|LKT zZGzaB)KU3}6rzZaJJErR#m)d5G#$*Mg1CFZjRTX0CE)v3ATJh#^#GO*jq>{ zL0E5KTY>Dts(WeSG%$~Aoa(O96+>y@1hW?#M!l~C@~npCHc8c3Zjb@;E4CWgQ6RT8 zOsgeJ_YHa^o*t7dUDyd(S+U7O>Bl-T&hEycLiCMmNM?q;#z|yLm*+SP%Udg4o#66&i$amnfRCG?02CD`3SbvE^Hyt#D@r1Ku@`BV0nZY85DSS&qd10`~^DM1r8Zy$0#=yy5qcu7|YMtLavZ-}`^Ze}U zSh+&ai$`WuyWX}#B61uHBUGn?YM?@q4k?|xqDD@#bws1e6tA%dozY6i z@Z1$8TgVtz-ctCZrZKWhDTI)PU4oS3ko-}yC3%OK!J_QObg~XrU`emB}XRJ@G~+8@+`e zP8?3CEhAO*N}%5kE5$&tpYVAsD5B&MOjp0&;0*N}8(gS<Rwj>ZcP1g`(;+t~dgjgjQg=0uzHq zbYqF)B(x~OQYyxDCRCL65I&3rg({UcU;TQGlo}%V5ut{aBLu@?Bf7O}ps+RB-JGJg zCX?JoB~K>R*&@~6nnLOWDs>8}&K9X^%SaVZ#IuFi8N7RltT$jm@k6}(!uBrsz52Cc zgTJVaxZoe^Hz8<(_GFa^7FNHdf_JIk#9#&Wn-si9{Z=+oCP?vi5juk9)>pcGcQZO5 zk%q5?)R^Qi{#43j&A{w-j__|-a93ppA#v&zLNX?Y7NaS!Sy)G)cU0jl2Bx}%YER%9 zDu*p<=)<|`wd4cLBo(||td z@}8_wth6Obi55!>l6R9-ziK{*(xgQXOQWEh7N%XCKx|r=rf~vsY0|PsY*<2?G_DgU zkv18a6DXA?O?=dbC8kZ8+|vyurA-0nBvm#-7RM+D#4@Xeblfg ztD|+t<6h%cEE?LBkP-ck0~}<8iH*4Z6v%z@@C+mR zqA3aFAJ`;kp)Q(RR4_KMR<3DZG;>st1=v;c&;1w5EXnAG{C)GiMpu~}!JWrcZ=`_s z6vnDMdZb6<$-!P5g|@;J)-h~0%-f`vxhI!tkBbmTyTs6Ya0LJG0GfW8j(65r?z3jF{bwPa>EdFqF$#r0ltMj&bS)96pBsubQqD3Ic%o}? zjtEo3g={cBe}Q6Wu+JMQH-z7w&%|zW>6Q{6Tbv0i4T1lkg`$6hLWS&L# zI@S*9CM0#jfuV zBhjjAWrYx$3QqMQxR9BS^%bYNf6Gj`!l!`hFCUrN_B7PC8UX%k@!hd2xAyYdx z;u5KMub}!t6suzzWic1=xM{wERP5+Ob?s|if-H}%2HhLvY;#e0+{rSskJc|%!jhy; z*h!MZBxjr*&NqrC%~P{FYuHuQ=pLjeW3dcV>%gR?PMQej6$caA1xC_mVXeWu4CW}N zcALEeD4+NqdLNiTmSJIFXMtFk3*xSTTMlN>6C7-Ui=vhu#FX5u{^uWlg|`V%0erL&`+#657^Kgr{n8?W--f)t000 zHijjP$FU??#45dSI;F-p?vKz8JZ1uC?n{%e~gaIKax$tTycLtEfhhF2f! z2=^U$pXTQpp<}=V(iWQm>?)AL4e~W{Kwc)#iUu z!wALH)E|-p*y{Jd%7n2CtIlLF6UK%DtOmPbJ#4xYTbG(# zs}{R@45 zt6^-@EPSwC)bG{4^n|SxlWvg_B@n>n8E7lGiVnIs{aE_ARk~& zfc*oc%zgQHii{@_-)p|&Of*vmw4wY$`2tIowHcI*H#VEb9djEi5cBw?HXLS<{sWc+ zW`v7b(;Z4TCALzCcD5gcYX1rGT`>Vv{%l z2xL(~SWRHHUn&4xtScd?B#hl9AYo+(`OLH@;uWy`ra$Cz4kog%89#r)fhsY4doh&W;qc4{X7MD8?}RFM&%@Nq0CTy?}E z2ubxk#rO;2JmJfE5w&|>Vka~G&A9}ij$MjWT9NA9rx#D8eIsF4Q=a54Qt7_8DYIQ( zW9kjb1l`)$a=#y?48vx0(D59YJi!ZDFi}s4sDUzqB9LWtZ)h4oGrppKzUryG+hELe3@%$6H zKd@9JdlDXj1%*tb1goiE>dn7`BCaK5*#%Fivh5eA;PZ&hTlEQ5mbR9%sX`l5lSvl+ zN^2P@$>UAJs%!~W+_H&;q_@Y;f%%@WDq2DnU9{TeX5c|$i_yC3i*8xRL?Fp#EbIHc z9u(d3@S8+y4}L*SlvA-%9D20|t~@9z50%&xkw{4T6PO&HjmkdRh9m#=MB4=}=0CU1 zDe!`P*%kATotY=Q6p}^e4QxJAhY73fiuv8_L_*TfV~4=}Kv)&HnBOh%fA-39seDWA zLGem$IGR%hzJtiT1ukCc3Q2B(e??7{-Yyc7elJ$HGS7<Q0=gwaAm|vk-IoO4-*=VDJ9v+qhuLAxtlUoXd+W~Jy#^E z7{(mJOR=Dk)!-$FL{d9ry+LdzyeBUrR23nW3Su#ccS-#mQ&l1xb}8jX(2(2`+8dnp z^wS*21O6}RFSp4D&bV(3liXCh!+0}3dP+iaS12cx!lR+Dg+0eyx`6oUgU8ERxr3Hf zWP{gu7t3ZRogA8C+`Z6V{O}_38CzI6Ijg*ObIh843+Cc&!(|`oILBPSmf#Y3CwWxX zIxE~6k=fYfvBup?MI$O}6Afn7-N^Kc{h>2(mU3O44A$ED^^gn@TxaX|cJ$ZV`dh7V z@WocPR*q!w@Fq^HZ{{$73Q;9+mT&!?44$ z;ic$QMMw0XvkR~X{qQN`R#A16L#?Tv*KD;>j`%@4IK~lw-4;)F#NV*J-)n`7AkgFK z?4$=db(TDX*1d|i_E1u?de0-yj{GH&d3WTJ)$b?{R*zh7k}O@|1MF|QL9qv%9l2z6 zcPJ4FNxz0QtjaV4M(xNYt2;x9Wz^oX71cjUu{|i&A@hRc!6QW49@vY8QXP&y$xbhy zg|WRTX*PO{RZgFpZ#ehBE+T0K7T=~VqDD!x(7&V)?9AjAmYAKS?UVFO3Go;LbqcC_ zG1DkDvd-UJG2-aoJPG1#UKF5K=H4xUQUh;to;3x~Z!UoKduswx$g*2F$w)!VA+JWY zQXSmNkkUwcOKd9`aWT!3vyi1aIJLnL)qz-_)Kf@`DcDiiS@4gN62jC@DI4}qDKgRC ziYyAFy^1I07tTtoL^Z=$4?teeqj<6*yo^=fO2ssm@~hJxQXwI!8lfG=xPWkIj5u*lb8~?Ks}UBJwk)$^#byDZ7;;NMJ32WSq6wflC*er@WvZ<(Ufs zw8U-z8UaXkn9@ab70oq!(FtNodP1aSVrp=dbI}Zjf*0-}tQKeevI%d(f&y0K>TPoH zJWuE&%)X~kw#@X>9Hy2|kkcsXFF&L=4WB&VkSY=)c@`Um>@S3U?U5BBWP|(FuQzy9 z{l*$0dFDdU9iQRa6^sg?n`5d{WJ5K=hus;)N|$L(ST%w?cHxsQ7?P(jg!=?`8vYO< zQ#4;WERFaflUwPE`qWQK%yJrYKBzY_RV}h%rXShBnaEYLwo1<^L*uNH^YrQG*>%eF zT(vZr?SJ4)tvPEny`=a0YQmBL2&j*+X(0QMJQ7p2BpY@Y7lF`t zuqVM?#P))nN#wEu*w7+im$q>g@;10D;BvscQV_QjoUxswD6BFkdSpUL^>sX*BUINxPhx#80?gF?fU>X#}od!1wNDxcpIHfC) zfdygz1vU}LCagEG5Rl~>=K5Nfm@?IKeJxpyLjs|^jxC0^1Hh*RX#cLx9`aDJa#l;w zZ-9*7!HNd-Rgi@{IYo0b3FlBD4RSLX1}g!^0_<;Cm0|QKz*5!NM6&{~O~X?iWSp3X zh_w&}<5{N2+Po(eg}DV(UVfdtTWS>}v;&$j(y?S%8(|zQz)~K!&1Ic{B@F*gW*}If z!Z17Q6VGlzRc0ME&30J_arrtbl~LG_okgWgXTCUrshw7f7@_zlSXu-51}jmA=?+MD z4a@Dcb)R4k7R*mrS8!v%q!+~XMD8+>Kd{-rmH}B`5H=CmO(4;`m}P*y0_0dh*b~5f zKpJ8BK#^$LIGD@&9F{PS zV54Alg7KJUQ4{LKv)8WYbcaSg{{u}Ze_-pNSx}zRH0>fcWt6dUv#PL?;)DOsb4(j> zUIKqIKPS*{HV&?LPwZNuHqdTB+5bGFeO=zG0p*YUG$S+um_Xjf+5t=G%I%w2k0tlf<0;D&&injaTvTM=h}$SvaA&^$0&V^?6Ugz>`v zW?goR7`g;Y7!P5U>lwy-FwQtEOU*fIstFb1P_i4CbZii~-@x3~>bbqP1~7r-U@L)@ zV#Ux1i|h!p#wzn~?lpoQu!M0EdmmOe7=s?t`=6^m^_9mN@4@^B^Va7s6>w@5RQ55w z3QEbCO*JefVGE|_`bIOEKJr|RPZin?BR|K4cCzgbbAPFIaU4YaGLfiZ#j;?`C z+QVcu8C+rmE^33>oFA7qayV;3iDr$IadCsJ5bechY{q}`gyJ%!Uzgqb5l(utxFh(N zIF=3V<}zO*KOgH&7H^{SRb&SzvefFpbJsWL4B&JD9Rq#M?)4iKEK|oTE6a6R~*@;}S==Urr4U zlW6JBMrCsg^IKw)`Sn=hClVk34*&F<45!v1AlVmwfvKbs?*u2Tj;<0%Q&!cLr%EQ0 zUI*(6Mg-J8lW2|BJ597#91lsx0_%j$2Kpo6sGd%VWJ4{&K49FzC4HU2CxW$agvG6g z)tlVp4wZ6)&57-ta^4HmF6Mkwo#&NAMgYs~C@HF>Wz5g%Xyx8CFU&<~2=U{v_<<;z z3GxI5Zwi%rxXZn3*1JZ9&LDMh0Yo&1=;b~!gAajtn$+hDA~=LD_pSK~gN$h%Bl%=L z2(KPX0CL?N@)uX=o&k0l#BVOjX_ImlJ!=Y+7=?q5mr@}dsTBh%6*vhyNF_D`5je}y z9Hn*}MXF?y1tJ@}0ZIy*EQh?Ha$6-9SV$^qHL$m_TK94766lkd>SwZ{TIIj&2vncG zZtWAnkkp~jZeXLJ?j`bLmuhM5q9ELNU2aG!Rwx5sWP*iu8DRNd`Ey+R9;{C^E9?W@ z8=ErLDEFx|v?sH3N*jpKA?!3_@~(jKN=zPGbNw%NH|GYwb=8tVA8^#p=TVd95~UBY zI0n1fD6Povnh}!r`Vh!ZSUX@lfgH~dvjWnUX-VCcQy!rbJ)eO)kEyvsHaNf=yPZiv z1TG_3<|U?YL~j$0?aj0y44F1kLc+hBsQa;8{=~3R{=Tp191|z&jVWwc5@n={gh)2U z_9EMda5@$gA!LI|>em~*NBzbI>#N^5BjqW{ZZ@ISSf1?Cjq)wjA#1AWG(&eGb_MMh z2p_?M!m>nsDI0Q#9omPOz#8vmA<%>mrjQWT$7ys`4ZwM#uY5a+l^N&iYg{aD_bL}B z)y;77A;!>oRGOeL6&r*~MX>kgQz0`G>@*9^``Aiw9l?yqhf}%r)IB;>368+;eHj{* zslZnipiD5z_m@~HlTW$S0bX4=S(vveOFvRS5S}H^D!L^bVU!;((JnFN6^Nd5ME#7Z z>Xi+8gT(<)>M6EYAo&4yKeC1T@;p5j6o%>ze+fT{sQa*7{=^ZJf<}4kzP_B|aPGbp z-iPSadxdcWt=@zm#e%|?R;r^2({r~;y#u)8W2)q`LCq!Xpyuvi`y`6iq5TXQ$hIM(GZqwzR9)x@0+RaRt1L4>j3i+?ri!Vw zq?ojIj&lRG5&9mAz|UjHpgakDYd#9AwU&6`d6D?n`%(YOx7P{b+j8+u7~i3get=~O zDqj)4fCYsjuBG%9f$M~P{qyoCPBO|Ll@m@zs^Eox4r|z)Q(OS+VnJb{5&T>Ivb+n0 z5EIw~udyTn+6h=cOqEmlC6$`;?N0K1l=uah@>#wbXf80vjxx$uF?-Rt3(fiuvpZH% z_d6M>A|j$!v8@O{P53n|C@SK^g#IkA5f4sP5gb-|c5#3YeCk2gGf+;G@GGW#QTf43 ze$*&m%amx<+STBM+Ax<-gY+g=;(o4Cb1Aniriij36I5CtG@5VnZdLuzJ2JfbAmx7* z#vJooE>Tn%CSTn3WHDp-eRs!>^ICS=Uv zoNR^1L@Fxl^n~y&1X?06$NZkt-4(`&KvdS13EXNhne~Tpfbb%72<+Q2Mo7K^EZNP$ zW|QS7q@It+l5!Y}&G~SXn#!aRSBXgyI|w>%AnU3LBgT=mo7xj-ioBT3Q-*~0m})oK zFelP%NnLwcNhsnRQ)nD$V=ZmD+q1Jax>0*5Hx!r{a=)~W3@O-ehBEhSWtN4eyZe^L+WSP zC=lNf{y8rqBrlAU)TlREDS+@kVj4-9YI@m_rq7UD36uJ}Cv)YkaiO+_>3?2mwXxGs zTY?^_sj8Y>>R^2$HzY5Us{C75K-rhHQw>hHs1X!oLB}0=xv92KGCWuNA;9Hs8zUfx~-Vp+TiPti|?%9zTdK zF)B34NkTR)#A6XQ(353((?VmX5X3<$JT^QG-WqI<`NRWEoi#%$p378n<8Z}V_P&!k zImM`0+onun7997Fq1@Y#i&w~W8JVhMfJ&2X5Eyx7x}<-FRc^%;D2}CCEH^7n7N@1a z(cWR8Lh>5*v%qd(gMgj_dKFVGDjTXr|Jcg4|0ndi$tQYCO!K)|J_*uXyp|ex0b7Z} zQq$bUFyZecH7b!k{Y>B_SepjpYK@?zsdpmMRjM%n_&cdjhG)fP%&5l{(wTJ&9wua@ zJuM;mpfiu$Wqis?!{5bDE0qys;PrP=Uw6$)%Igt zT-+p$qmt#@)qZtLpy1YE*T9~0v2%5C1P??og`N#dGbU) zI^thpcN}ZNWS$oCKcU`^nKdeW6i||YLV=Lse^Q1(Pu7_5=Q=tA>KgS1v#hQ7t{PE3 z$nD=Mmue*U3D__^_(nWXZManzx^FzLK4W(mZ$_&}p;^z^1&hu2xms>wTt;j;3B55u z6*_!Bnq#p!W^c}Q__s@5YM!F}@?~%TE{Tzxw_&Tvz11+C`!1dPn@>Phm#d}5A7~(< zH!PJyY6G2EPYH4kXb?VSW^H&)ka9jWm-X38bv4$4JQy&r9?MQIL8&5BentSfSN z4rkw1;KMeUk;yd8B-n2Y=IyG?|FZ#3c7bm@z>HLm-u&;_K6^73t(TBJK*VPFV*6kGe?MM|zZaZR zrln2@Sp=PGO`AA@o$G>Atr?xNMNb+&Dr>P7o{#7iY>wIP3JE_()bcj*@v`Vh-kqv5 zn-f!aq%QSkJAZG6%Kx&Re{48PUMkWO^c?fX5*)i?i^{zmROPs3h+Y$SMDRH*t{n&a zuIRN0(Q8`t5rA8AHLu&6n{3VG)@c4A)hl`jYLI_BL_a~)9xMLP{eIGWf_zdI`dQv- z!wl*7YUlscZXD*1<)+z+bU$yhqLvUd?ySkVRP@S>;(U)nmo#m-5&nR5AL&!n@K@S7 zcV@8;%`(kuespS>!mooJLZg?fQA2A4GR3JHradxqL!@awL>v3-Du58b$8JJC3OQK~ zesxW!L;<;p5U4{AJiSnYmJ^N*?0iEd+nph9T9^`Nsv^{PvbRgzIu2M1<-KGUTZ<## z_Fx~?8MbgURO}WGTX~y(0djj4Bg93ussBl^;~vxO_L`k6t0V_Y3na5#CS=dQvD21| zcV!9rJ18}|K`OIJ6Y8R~bE2r-3Nr`LeEiBRlw7zU%9wUY*dypz{=t@M_oA+u zy;;BbhdRL?nNjp7|1d|acV?w_qz*Ub<`z#@|L})+e_w5NqRT(h0ksZ)PHYuoGh50; z^Qf-3%n_W6^gm|WJ@M~Ma+jr++!nUnGEI5R!arGwP$981qnYsq;4meZSzpBAm>Nt@(KAC;r@XzAIwCuFZ^2uuFpJm#6 zf2nC_q>54+lh+)_@3Wbia({$>zG+X&{WF(KS6E=)!G0Q*b#i)Uh?AlIg{D1~+r8!1 zS{N&px8iA+x*QEZ$hQGT>;1!8>G)?T|5iEvd2RnznaC`!S(`Z#wYej*Hg`DQ zI+eM@txTpXr!sfBognk;veee|mRW(k)HGUaG}X)9n36d|LWh~S_O~f6Mb~HA!mVAd zTYqb}>>l#B(?h)B9>8y7Q)E?TdYomIy(1U)IP=OB*_ldsdQpj-{~Hz_1z|a6H*mB^ z?to#{MKT?3rTAGvQN@pcup9W&kE;=?$toxvjvfN?5i^i>lX(NRKT$+`yh#W&Zj~ok zB2aa+3R?COt5iU~g5yu}*yzN7-09^8lcu3;WKP}!q>^VNeo6aYdxD_fBgY-8{_ypQ z7O?6mU&YTa8gRpP2c~}QYkk*OHTpI1e8sc?+iU07(8)e_8Y793xio-UV^0^hJz1?Y z<;~mvCLR$}`9*u>=3jChITS~_dz#JU`5ST^*ofmqa(!oC|9cz(0@Fo*rkP47^*D)Q6qa>H)vZj}JSk4Fh$UN&LOkd2A-^ z%s|~2@`UGSPU8xVk(teLtABvU9*I_FX123f)A$EE5vMchHuVhuAgAB-Cs?0B(g_aA zoUjh`P>)`$6{@wAq@S(`UPs&qx#4H_-4Fvb2l;##* zl{Vc8mavORK{-r%q!}F>H6IX?N|iWk#0GvUK65%@9g77v}u4 zo%)zP&8{#VJ~l10oz#~O&*oT2IzT1qiBG9Ikn+FSgpnbbL(KA92e_gsX!CX8T!{dsg(mUf03$#bpvCvNZp`2fMr+7MkhSqnzq`l zl4m?}y^a=~GSQOu-X2*eIl4+z;qG{bT=pv&DcGi_9MDp@q3j$1)gSh&g3ADKy~-yKh3kBRi)~O$vO)@tOZs%W2VC;dc;Ui@3c$dQD~M$(j)UmiQ+nekALG z!%kz4$-F>u{70OI%E`?9S;9x1@FkgJ8ACso&iSE7e7=ay!0*+r-ye$Ka{ki@+*cIx zhtA&5RRYtjUlitPkFaVqV?u`cvCBN|miU_{3TBU5YKhZOMu{(#_d?u@U4z^$MOW9C znw*?GA;Yl1>H%|c1;lhPA$&j7-I!e=XWa_vLEN(vFBS5gt`NH?w)g^xs|qSPw`|VQ zI0tYi+}y85R`@ z?xQB?vU{Rrkdzw#O4bgZC_Vm$dw~5=WYy}}t28`WDVft`!16i43DzPY&tjdCoH7Ov z3P;&pd6W^B_;*D@JS!Gu4^m_7dbwEi2QY12SJ zJkY_|K-%v(u7h#mA5jaTX8WBK>31dVceo6Y6oH9v)$;geF?`6kT>Om`RvbHyoy567 zs`jms>sxac2V(7Y8Y*NI%??yOEHu#$wH`=|NgPaJn@6 zA6Wa)%^OhX(FQrCiw%sIy;rBk$v`_pv?nTU(R~IBqdf|3`)Frkl%8qT&@|D>O6}55 z%1%B#N=Tn$dmye4O8eKnNj}px(_T?ck8(eNq&SNBxF(8& zgM1+8D+dKx4@>I8Qy?ySzKcfpj&_{?_AiMNSTfchXdPw%TX>0vs;4@E*(YI=C7$QEwku+lCfmhXrHd2J1o{J}7Km%2EPI8>0Wqqz#lA9jW@XtNIV{-oTaWwx|eE+4Y`Rq9V8jGrDqHOGvqDagOzQt!np==XImmGnh@4 zvu$|ziyZF0qQpe#8>|Up!)-CNUWwFtMQaIJUJv3w93{i85Qnzm$ubLejzi$Wnmsy*|EYD2kzNO%m>PQ zA)dsnbFky-*0uv5Xts2_wcnD@sVIT{g_YtcvZISUrI7)-I}2EzIp~y(QJQ)< zPqaWzcgde?vLWNo$BDRgR=Fk6uGoCwTV42B7Y_QaVu+ttXhBZE4uL-9qR;0=k4Xgm zqe2UE1$Gm(k>-@xA~Da=?d8?Le^zjTzKqrF#!jK(q-iu2G(;NodX%6(!^VJ27oATh zs?v{O-uQ=@l3pRDV;vz5c8Mij;!as`mGtK67~h5=CaM@AKGT-*e+KMDE;~`PC7(I( z0k7xlM^P*f5ZzTx4C1Oimx3EU-KkAs-6$HzJ1PKVeS8 zR>NN5vKwi(S9}Uu%kL?N~+->>6QDoDFlNcuJ5If_{VtVfI;*<9hhs$qw8c{1!LSi zEYfdc_R3_O;>f$pl;_F0o>Qr-*5G-%SJW{>M z_X?MU`U5saoj4179lxij^JbI1^6oUw3S@rHxj6sS$Rf|pb%#RElJ(>=ue|UEcP!)1 zj!gXc6gx$ia+!8Xy2Ox#YX zh^dMFKeIp|P-sEk!b)*^EeYpMm?P=_0bwH-ejf)aEe83A?vPI_vJkIeb^92`MVEX!l59ie{s&-2H9YJ4o(Z4FR+&yH%&xQW0q3SMVaH8t$l1<)+851q6Rao_Yoa1weG0}Q?luFt%OpU{ZqTLyUyidG= zLR_@4FJi+`C}VN_Wv|cTv_xPj$L!#oy*j)d>~~tRNUoyv*k!axQH2!6)(qnhf9 z7Ij3u;Xg@lM7lk~6;~V?;p|DNM6N83J|PWVI$GrBU?-70=}MM%{q$|Z&(hJ(sv@wq zNuFSA_+glq%8(QBWh3+-s{yh?v}m6ZNG$tcMb19j6;UBFg9a5m6WTCrk;;<0QL zt3;n6wPrUe0>O!{U=>$Txmd*&ybRo`0$w#%wOmE2wu78{uBo7+n2v=}eaBU;sa3-* zNJ~{Ja$iSnM}CYFtrH>Id@!O76hH(IW7Zy26KCqeH*i(wllYpe+9*Qxz6jL`8z_8p z1rWu!?yMRR4Z5PuUC~cS_mOV*f);S-|6J)%zP5}|U3@>jwpFU4*bhq@z@-FNwXLgK zp0u8>YWoORAIue%z5Fz;c8M0TRak#{uUg4jy6|1JqIw1moYS?!W5F&{8PJy=icq}H zl{A0PXi>Y0Eyu+SSFoomC=WRU(|z@I#&v?u{1+SE4)rIUL9g5l=m-mC>Dy23FOorr z9xNlsd?!a7CD&p-7REI`)=)w5E28uC|TcjS>6*1KH zd(lvZ(__H^pet1lRK)NI#ZFIxd^B3be#V+0IKdTs)D={#lt-gwt<1m{-f4mTQ7ev) zP<$$esvRFKYRh`k#ZmmpRUEGs?F*ITRbf%IFI0|?c20VS4VVitRR;mBA1>iUXIjdk z)M$I)M&Dvku5zjlgv6YzBH3Q+Z9*c`3nmgD8s? zEny0N)3^Qk{> zN*!<)xo=cL(&r`v-K#R76I+`j6tg+J@;?(TYX4$4QEWL^7yTJm@lR?Q*jM)S9M~$u zzYfNRPY6?IusuTm*Qp?PMvHcj-Yn4u(czZ48SHd3P(5p>>v96vE|}^E&qXN4$RhuR zXi<9u8^d+~UtPf$A_ZU2g7!`$K{fs+ghxPqRcG*0L!Vk!PlcjY(yW%pED?Cxr(nxD!%S2Rsug*E4~?_*z8pl zk4BFm^(27~+5s&H1LXr#`%-41B zuFfF*9qA_Ns?aAQ6zUa6;bgS1&tNl9m@NvHI`4VXl_*W(DJ-+oF$kxko%5bb@l1r` zea&e2^Uh-ycV(P%!@fos(6htIn z$5ta-exa^|LauB&X)n66g(GF-a%CBr_H0D8s87`52hb}~oZu=Jbrg-jhI;IO;Pedg z5%@d6tHvrGp%{aNzobvphGVfqd04?FL+fE)glz{AB$p5pQug5_MrHVt60;m2z7&XO`kJFhaUu*tOaZ5 z3d;HS*ZxbL)$_?&P*L2AT|zZ+v95@ES~WbIwC9zKl)QoBaFJZO+0aqt@QH%2D1~TK zpNL(@l7?~M?+P~6f&ojdu$sDlz76(@%7DqKd9I%*KG%wZxAKWvyGK~OqWFfZ*veH@ zg00+|^a5>#DHq%13R3Q=kIMevUO`21J+>Ux5=(T!+dHb>a9`3^C>beuhsY-H7$JM- zGx+(Csv1%J7CVmWSXcES?Q3}VBkccQxU$_N>a#~geSZ8M_1VWKYUKtoXbk6$Pgk*z zRu9ma>niv%O`4&U`E@L@la?H(Stj;97pR^0E=y=7^2V2RGsKq50T<=)zazh2Jj=mu!U=K9w0z0)VC^;p6vPK`Q9 z%D+=X?OTv{>Y+otlJ9T$_ox_QeuZ^}?aR_d-s6x}(|*IrHUG;BEyzYgS?GWsW41HUy=P-bvB=nbrpgNzeC738Cu;TNF(gxQOr50oU6N~XG| z@S)GXrogO1ray8|qyLJp?oL+uFdiGmYDHWmQ~RccE9#j!a#8n&Ua>RDiVbuC1<_s? z#3fIf;Dn_Al?r^vN|020vaB37ksX9hd5oKxoTlh8g@NhUh;|7-gXS&Y@6YlQRM4Mc zC&?z|3GK|S2xo3ZI&(`o!}(X+8#{h zvy%2y7qp8ydd>_{G)6Bs#{k~}+-|T2F?NIX&OBO)T5TRV7M;Cztd5Gh(o7WpJku&b5%!SXy|szK`E#XpE!5+ijmegdmD z>Y+MgzFiMXbUoN({gN1aX7GmJ0zMMB{UE@y7@4Ewn%w;jP+K0eRR#O24BlsQ@$ZZo zKf&U35tKdTFx<^yr<;Sii)d$zGo6cT6F0$pDMm=aAPY5!ji1!6y`+iZe@GusdZxNZ z=;fG8Q^c44nVjwCCY2bWh--Js`!D?a99M^BR+OFkT_>1qRZHcY6IeOmQ{(}q{Z3Mk za08;>!ltMLxC2gS7!^)+;_dqr4mp*>-fM*8@TVI#WgO>x-m{e~xsBKG$y@CyTxGd3 zbt*;*mJ?#pIGW{nwl3T$w{Wvb-%Pq)xYJJIdfSEj)G1v5%t6fF{?8nbJ7$`(l)WKIye2?%AqT5Kcs)Mg}9b_J_ zNygteFnbYm-s#pXH&h2WAy>(7#N=2M<2S57MV%)_4fAP266`ACp2<@uR7gR6Dwp>Em8`(`U&wSHUz`C1@HxPbyQ z@TWYeYFJRXa?L4a8sm|tkwsi*Oi9T`gw$+ylT@KqMy3PS1gSBEgJO;Nr=)y1?GdGw zm{O9B2&E$9P!d*0RK{beD80Cv^KY*a85FWeg$7c-WRf$m93ZDj_zqKbAscpGG@*>4 zBVfbe7GdYW8f$oo3KoIoiJi(h_DH~;nr-lOG4O1x)L71vAS1Mq5q zJFy;shmt%wKQ>Z-AC zW-QCYyDNKs0`@PaDqA)pD!US(R8e{#<&UwOs3$&U8db2MaHX#2n%@p&{dZS4&wWI9 z!IYY8M5z7A$>LODoSc>ci?1AOM)x$c1?L~4xV`W3j=DPC^dt<2PF>cU- zGYFdjZxPTO&C6NKMMEJb59JHPRpxu1BSn^aK6$-^?*#us9gng+g*@ySYf1!8NM7rl z@`#edA8%B7-IN6Q;Rz51K$tRg=vbr55i|C%%q_#TW??33(Hr#^liM{!E5PfcMP(ze z=s-s_1Y_`9xuPe|XwgT$L3t_vLRV291!gH$osl#Qch&z8R;49D-CW^tXY}HsPI&vV zVQ^o9cUW`P7^ZqrTpxA{AhB<=vIO=ekV^$&UvrvJAoa16z|8f$f(ujqKn-J}W`)MG zj|pZL7R&OdI+*(k;6kIB#RakpYYnVBkiik`!ycGrG2U=qd8iGUL<3w#xjfP1uuBO4 zj;MEoQ*144g!aD92a$kSXZV+t!YjJKjLkWRXetFx^H;g_4zw2ElP$;cICu0#s3VeQ%RbW$(J<7z|?by^KIF6kR-+5`9 z?py)68ct#O5 z2UC4iHgq3d$hOl*m$AuLIA$EzopecmI%!{GCDT(_!bG0JC;T=R6iMl$DeBi7oUDH7 zqnnv?1nob;)C}WW5(;n0S0ddYGmyH6)D$fx-6prQ zT#S|k>7(}nUV`aSaZj|wyQ5-A!KCk~0kLTk`TWJ?Bzb&c@ozsFWdZtFXQXGR|L^#} z73L>cp7CFHiw;AW5s9w)J~KPQml3_0U)TuEe#}r1D*&!K>!zYxXHzhVu&>p&Ac!cKm%#u6_+}HMlG=&uN@&NL8yhklr(3L{GI_ z^71uUq4YPohz=|BLuPiECjd9$jJ|T++4E(u8gEpc;gtkArE(3zBnUK8*r+_^a1q&E^`SxY}Lh1{FuxQg_+`XkczfjGgRRqPlN(rfWxF@ewNw zRNg`0LOv0v^v$CrL5(SE#DPx_aIXNgj@TZko^6c(3EP~SbG&8WZ}J+Ck${^Ix zkj5IOE7(Xm%--&4Py8d8+R9lC10=;u^D$qt=v5ELByv$g*uWA4Z7 z18_5crQ1|}z=4i3!VOPxVIT3#!&XgF`nxHHuiPHS=@<9$pcLs#vE?|>5K%QuSB>|y zQuzT20}{X*>^PtSE-1zYg*Lrx7*7F6Jk25_ouL=dGEDbX=X3XJJvHBSW<6u-+>baK zgHjD^2W_vb9q%drzU&M*&=rsX>SNOYec^&)Tu^Az2h1Y?_KE?z4k$jyaUk#f$AWIY z>CAsd=*7>-6iU%gsYYnkp|sDXsebMDGD%RqY>-TjJ5KR28)%7G-3(qwM`}=0WrJOU z1=~G>jgzlX39uVB2JkY{*K4pd;BsgBcl037PT~(^s;kL{?rLwdZTPx*>1w_Cmns4x zI2hZ6=mo<6#e$+BJ?&-nOHbQko#wsi!1{f`GzYZE4)~aAADzGMYBN>MyIoCi($yA! z#@XP{`PejJ-PLR;T`l$uuK__k^RV61bb{f_X5I@~oj>R90@81O$#fT{MS4?dGK?)5#2tNKG5$|SWj`u& zP}rR0_$$qnjXcbDqa0=iq|jfl@QO=V&tcUk z^N`K6j6X3ub9YC3xSsmRKGq#zzQu-ts|Cc~|D!w$oc%vEkp=BJ0OQUwfdOg{XhuFQ zdvRB_r8A94*I^l}gK^12Et#cSd4(sB6{sab=rqcr`Wto<?H-#5B0qTSW zMN)RD-_)-+__z9vHBu^bEavG4B!H=1RyJfA$o%`9Nh6#v;P& zu%NI-d${^#ckRdwS_age-!S)qe3^vvm>x}4^VvP`OJ_`XdY%r_^Cr>>iXc!L+hd{f z7Yeb@;@d>8k$eJiR9#j5Del(e~1&hj?Hy-G=JW zB9ePq>^L6GCzB`hc>rvl$&m_>PM9&xFm?lZUBlGUgSs}Re#Fizklt7mVBZ0;E3kNO zyR}A30M<8Q2R7d-C_!hUJ(zEsl# zuqI(QEvO;T%QaOmgY7;($z2kKE;5k_WhYiQlTQ-C*r!?UvLYqwUGjR1_%AV4xv~*a zxl@6p3U$|a%s(HYHwL|%0(*fX3R%_e2x?bSKgTwKs6(o%-2?x)wJUL|cC(nx=bF|2 zRkhoW*a4WzUmgACt=tBroI&$z%sPYcL?WhQLE)*|?TXqrB%9x}Uou9nBw-JxYF9S$ z)Na%}PVKIj1w{?kdmdN~v5qi51pKpR>d9GGZqN5Y$cPmBkTV)WX@$)o()%K>DaTZX znr4I^{Fvz;$a~m+U^Rg}mJjC6dG>O{o%8IVGc&bvW+p4aNI6BNc_yK<5K~nq8+xYL zO)8z2{V-K>lAJ%su915V;a9Pskg2y|ruwBg4^o^npuWed&*1a`3FolL;!OSeBUA)) z*99heaM3U6v7)ReNv&L{(%Uh7$`U|%Y&D?rfSO}UOg8e4@vRA~F}`IiW4v19rJRHV z_Xc(n{tzIC9loVbM#&&z4^hXW>}=gJ-VVBByzpdpd?K%L56kU1EHt~I z_DJuInC5ILVU5e#QX?h&ASD)K63`GS6+${dfYM*@7C_yO%GwKuM(`I6a~6kNU~niji#45xL5VEF>ZB5#(-RjD<ce(Cam=;hZp@%$gui;)I`<6|JUBFRG}#~5TH20Vp!Edj~L zNE<=YV4{RFA>_ z;sN}h>5y>)Y>zb=u0TK7@CXQ@G1KA^yLZGA(#|zCN*ZS-%;(s0^@(uRP zNLVt`T?i}y&!~S0ga%E4Pa#c5{w5^3m*_^DYujMr14lN|2OnoDgVb@8}tqh1^Gy%T(Ee4&UC&=azkY=jXHj~g;qt7 zOh%dwvPvM)th{Sge1zqg2$mup2T>Cc6*x6v>N@MP@&!PUW)vyFvO6IBXPwL!^1A`w zr@$^5uuC;ot;2N#d_fxul4PV*knIG?j~dzgCB!pANO=CH7BLppBfdUJ1>k)Qbm=eD zrmCJtA@iLLvQ9{v^eZDKPwruviDebi zHLw+cWt7II8D`yp2&@gOLGl+;z*Kx{1tcf`Nv25uPTK<+vJ1qIkl@N;|LJ=VWe=b? zoqtG1vCn{tc?6}0yxWlV=Rf7?25j7dT>_BwK$;9P?*n)yfFx_e`|)0$8t)B$j@ccT zM^sqwlnsyk?A(jk+8hgKYrP3$U&Syd9|@5zD5*h#5N&*tJMW)9}m)hzm&n^gknyBdh?;ZKNKcdkUK1 zgK9J154`f!z)Ni=QOV7eJ?;Z2k7PVSS^+tgfUTv;(R4sJ;3e%pKLt&-$Jl=cT}RM} zf6{5AsjA8l1BfdlX``uF6O8775m+3m12YxLJRM#rM4i>d6fY&MNDmlfGL%$HDS@T$Hc&cfoHQeNA z;KJnJkH`0i*qL!SWI06AXh*=K2(rSe%5sJ@fm3Rum%kX3%bSP-yxLK%P@~&m4Nds~ zSswbkz07zw1mu!#s~4hpmY;^}5_lr_~tnDpY~=ZYUrTS`gz|M0XWTnc$8O8#hx za6amblZf%u8y1ft*c_DVS3&Ffi698iqgyFl{h>^$@!Em-fpSo?X=q{L-^r932gV}% zW6CB17e{^{mE%i|L&5vXKRYQkj&fcA-xZBdW4_!D&21dhR%L#vG3$I;^}481<3@z?T4u|de2 zCW*ugmH;n*Hp35fTb?6E{baGlH?{)Udi)}OHko)%fby(Mg1HCsbp9-sgXqw%6mjAw zi`Dov4A76;kBi@bvV=Q-hc?K{m#T+7K{5>>K^p5~gq70YpNC_645Cpl8 zdr)(U4Zfigi~@2(VS>B?5a7jb&Q^_p14hdvuZ=pCFo3dUdC=MTiBe@9P=7XR%oAwgV=P_t39>`=OkXwZcH^mw# z)o0Nn`m80q_EOj!sWH1SRIS}mkWO%sE1eL?s&_*5TCvULRH4g3vBpIOp|{S8`DZP5 zufVDxoWsNvarmqy%xk6%;8FGFkB5@?rh zbrmJf0o+Moq;z$iNF=brAV`ds`sRy<=PZFa=>$5YvoO(YUJ(QrNJ=-FX{hn*s?Bmh z5ho20n9DnXJ^U|h)4=s7@*?jYv_^K|qx* zj2@0c~?PD4$A8>Qi`P+}LX5d}zUTlS&F7-D}cjnZbRXMa#k1a>Y_C<+h#yF?Mll7mpnE~&T|e*F>|?0Zn$Br37@7mL5wo>-tim)<-P z7k;rsdDTLgAsv)z{~^3CTAb2^dt&NEOB{<3yDwU*Nyk1Be_yl&8A-9@yG0ApG5|?C3q<_i=TO7p14X-LMEU^ zU1NmdiX~iuHl4pF60caIgN}UyzMX7@H@4)E)bjio`l#O(O9b`RqAQl9@NK`K)CZt= z?xHf&OI*4TSykh2ND1P>70Vf8NWbr1Pr{m(@uJ5yw1g~E!tPd8#S9np zZC@X;{hGxtW&a?~BiD--lZ1-wfe>%6!64Dvk&wwM&J!Wm0g`P`$YznlMHYce;87)X zV249Q$LrwTLtp{>^iwg3Kw88ShOnY%#U_AGGW!Wm7K}kCgQl|=W_)xN$+VYh3?(H) zpD=;t!m5&WV}bCCB9IgUrAdKoR2HbFvk#Z3RGFa2c2PmhT&l%9Rs|X*FE1T{>|RpG z-35(24iU>(dS}t*23oP27&fwNEyc(i7Hi^W0{1g>MYW#C!GFe8fL0Be>ICx|AWqz{ zgh;joaUaZHo!dh6HO99H^RE^wnMyw zvU3FHLSpm}K!q84!V(Nc^9|#WnbhzIGA+ld=yXZ?SbZRlMUSb4A8$#ZTR2^Ms2Xtk zvdqje-bf}64Bl)~@+&YFgUs?SggFpscr7wl7Rv@=7#9gQEvX@LRv$JES;9>pLiGM@ zY)>)aCUkJ?Ae1(y(iXAxrp4;n1&)J$%0zMICN!v7ZSe{u(t7C1EsHgtv`znU=`Kv? zpeptB!BaXUrGjQvE@`oT?YK9hCs>T6uKJDLM~In#q=}QnrdyVfk~9JJhp)_mkiQ@x z#+T}wQq;z1vgp6d>?5qVVOU$j{nh)kQ+XouwmMt%5v+*lb=wl_mAoW6jwRa5 zt0IuKr6+Sl_d6K-d$8>K<`VpX8F!#o*FFU{SL$sRn+YTbMc+z_y&`@9SoC-7fa}{x zci-y7lRGfMq?7t~($gNIXi_RTbM2w>UKbIA&>3_YB;+wlD zv%^@h4U^Uci^q2@;a(qMj_H4tempLM?^)vHB}jix`m>~HbPsC{Ej{`RQr>7Zbw1j> z0?Cv_4L8@s6>H7zQ1D-r&Kb~KyMX(xAjk$WGGRJxHGS7?FM75>a9mXglZ~9v>-rL+@J>t1s+?XPbtw zn^x%j9C)UNh?|%Sr1RFvkpQD;a!cV!m;yvoP2jEH-lwT|Ylb*NUTXjUV^{u2({^VmyMo8erea zq|mc)iBUo3J^BZnk>AZeom)?-@vK>REol$CGLt|m{JXZ4B@fZ8&NNSF~1Fmt|U(j`}g_@s8b~*M7m~|FA z?R(1KgE`1zCp@S7pZWnCw-~Dti(L#Gz~Wb82Z;HWey=OO+gP|OoYWWp*RJRo`j4)d ziHrqErrb>^RPGA&(ILjxBJ-#VVeXEeGPeVb)<-KgsC^WobW(q~ZhCeJ9KX7_baE%1 ze)8Ws$uxx;y6QYN{o}H9bs#!ru`?#p^%ABQi#;1n`59a38XJQAxC3w{SnS+`bTwhX zSZwQBxW=!m2W(>~R)Pa=zoIo3XccLVQ&XF}-~3;@Y8g8HJ+1i`89ySKmXWF!>Z+SW ziEFW*$tY z=3nSd*P)GYjlJBOu1(>rvDlQwl>d2o%JEL1oEhure$RBeo?D7{ELiM;wLti=$n7{; z8(V#snE!_*%(<-%)BUj?h`XpwGM(RQ|0|kczzAc{YJN7+j)p$BA&;bZxJpwO-nqFC zvOu$FGtrE|Ba6i+K$E1=bOqMD0a?1(58&k@c8JD4A#>PaCnjQ68H#)`G`uHF#O}Rd zbC`?>%N$QD!GJi9z?(2S;wCVi*^yUSrweshVG9m{F)$POB4ak75Qj$>;`}VL)BBv)D7t8*HV^X^Tc7biI!YOeOpfoN>T=>%xV%%E` zM4MUVg@0LmQ*&Yd;>w1w2yEpv8;@bB0INfq#5>aqToV#@)50*(bRxW7|I2+0Mz<^48Ho1iHy)Ea=lq9OWG=m zKeLoJ9vKMjs_=AzDE|x&*O7su(=$toaeWiyW}04!706YfR#U5qp8$C-_!hWM{=(zA zrG`-ky45Wu8b7y`H&)vTR3E9Fm_^VbcuD2@`hFt5dv1x6dao9LJ-0*}c^q;F)Y&A$ zU!eG_v%xXw@FG#~g(bio{*vlmk`OFe>_xHVrKN(gcM}k$v6kZZmzET- zVi=@y-Po!HBL0;nU3xNBDVPF%70{@+j=;1`E*K~i7uQ>x_XW0}GKgk4Ya};0lI1$E zONnHn0+^Y&5tcmf4dN&^$bpj(V_jI)7TDM<^loxYjj`Ymz^-ypDEv0oa3u&5w>Q9~ z+5_Z47Xh?>-fzHV4#a4aezNnxT_yZ5)RY{U_!LyEdT;0|HMA9b0i*$yD_lc=R=f(R z8c976Z4;jr1a=n@ypERnz_04#@6a7=HlP$aCBU>?M-p%tiw@ zsW5&OY?tTcL)G936MhA7Yu$L8kxMP0}l;@yNUX*aux`G-yJY`3&$Y^+>j=^a--0isBJs17$IDZhc z$kC@CrkJA}u6~Xw@M-)VT?-KTIi5yiqtuZMy$W))9Hi5ga`b^R20MKEVwHBBo{tl@ zj!$5 z`-cMRMH7k!cKsqid8DmUcyS(pF-+;BEJ|kn;4ERv0gD1?!5^fjjq4Cn>Psv>j*N<}9M;fpC z1UM!4Yy#MJXl$yvNXgy1jFned&S)%(NaYc5O76Bt5cgQ)Q*i#QRgSpg$$NXw!FZ)i z3=xft+{c*!w?AcC>SXmX)_nAnS)SQGtbA*rW>21>qUcLB8j3FgYC-3074=Oa)DoDu zlqKW(s;FCqP^HcQwcPoa`us@;BO9wpOvScZ%Ia@4Tq)obR5ok&0&MH+cM~Qr9-8(m zA{TSYzS9-47#dP;_XS}spAMk7y$hXKONxM;+b9&uXr=zWkpT*t{88;hFE1W0{W?<2 z^5TBU^2i;1?5pavu}G$F*eZbeU|m30w85Rv0nMZQB;hR1{hf_4 zk}RU~m2_Ca^}F$Srk;Geg>LIVqFiTZ+%_ba!jJuexe-yF-GhL~B;+*+$nRQr68VkC z!diWaZ03b*UnCQQL1pH@aH|nDsSKjsM3jKsO2XHhmo$>29?|sLO_AWu!;D5egO13( z)k5TYbDI>KB8GTl$!xe%EcWIR($Yk6$eY*lIrAC{7@j!23hd-o6dzvZ(=>6w!u?Y2 zU>hzxnG_zzPH(M%P$#@RH3imAZ_V!tu!0u7&~p&LX*tV8j}qK!TsRm|_H(nCQ37lB z+m9i)&LXkB1dlLwh6xF8_K`tcEx~<_4H1`ww|&q?{9S^F)Sw20ciXyOnK=@xouSh; zLo&@p^_Vhk>tY83RDGtG!?3YDVEel$(6!Cyi4G<>FU{tOAtoLi(R>~Xn8Nmg=BSI# zydLt{N?^BrXDf+M#b}{^U4HyQwlBO(Z7?M&+Joek(8e$CWqYp)~lHBSwZWzdY zSj7pVOi3PC_a2RM6#E5zLqpAmfYnLttEkKImjEsRVkIF9jYkk$riTc@ za>as@Jj82tAfN+mz+mwOifeRi5!g?&u5Hu_WrSECBt^c`h9K7d9;mLfeqW*x2e2tb zp%fywGKdxI0L5?Y##Rw);o)9UV*x&6EBr+Z3$GP;6mD~Bse|CMRKF-IbV9bQ&|;5; z2PgeURVE|%UsPEbI1g8qc*7Wx$l)a_N?dS2G~?VZb$%pEr$6(hnrp(%LtAfB)+2miz|t{KHOSKQP%df{3le0bw^SwpegH* z3xTVH{6>Xwwkaah7Y?zalY9DzZocRfMfD5|#B^UC;H4_s>JP;xUv71(igv6uI^a*p z(!tkLyCWK156x6{uhI9a?gfFOG*PXfPIK!XTMMuP5Y^lwNLfLl>fVJ>plAtfFBgTV z?Z>?}Z7g3$wD;rIXjL22ma8Rh0QoLrkxMko^&)K)tNnPWm#TAbM~jnwZk_upMZEOm zaa9#F-w{Njee6Kn~CWJDK=c{ zB)0jxZ1}5&;-Wvgn+#t>%NutD3*dnAReTwS3SgG#OXeaclQ7pT#f?B- zy2Nsra4b=ia+DceGKdGa{*N=7ME#c;4V#p9yadyc5H`6s-c&_0%^=7;4_5^E%9?d_ zg_s=Vn(l2bi_JmY9-%B+0r1}?_BS~7bu?~WUAgMvZGV^`o(ExuD3&00tgw~hwr0v& z6*+=zLN_q=aWm3dCC~U#$eU0&zZvC^V+)bD%9XF~^~o#ToKi47#!#`j6sC61vErvv znDXa863+>KglF8rylR#@)q9|cli(oEL{b{;T9-N?Xkx37zo9TrS(m;xiDkh&5GV4) z-e7L8uT1r3@WdXYmswFfR4a+3N_4F<&UGq5ERYpk1ZGk@Ojp$=tQ4_U9wgoCE^1n_ zWT;DwW2We9<$+%6oF3g#%&~HtHih5L5__yzztkyQb*i`mP{Le&V|CBf96u3hbI;Y{ ze~895-rm_}3|iW-K3U2s{qPls(dHz)+xi9#xrf1jjAVN9Cm`UfEC+t#DKjE+>N+nl znUPd{AWMS-So{eqx&yENQPAc9vW%O+&dj4h@Q!&zfV-N45J@4tlymZaxR@0K=OEAV z1*Waev5)41qq2Z@I2vM?S?`#E)!E>9bRH*_bp~Rn7}^2!k&EGQhMI#S8zTC+`X!!O z*l3Y`9m*yGIikURaFWK+3n)=LlzYn| zjybr=CeTmR=rtw^am>M+zfg-=S*RF_Ud+L*QAtL>-TXesk$qxgC=W)1qCYhv zEySS?G?!r>=%?aHrZTwTby~LQbMY#aN0;~prNYRpX{s2Rq|*P*$PnZIFfy$$IF{y+ zy%uzzQAq&=nQgebjLfR7Vr^-ck=e0doGk4!GTktO5-ZgRI}=C>x68;Z-7fsXTt=qU zI#D^yWn>Z%%}8tln5MfKT}I|3L&t?c!+|EKrjJ!Y>>a=;3~mM*lag6&=F4)vj2g@w+fCYZ~K=HArf^ zG^gX$7h+{N_c1EA=k;FkMK}*sosIa-;z~HTHBc-NeT3zHGZY@vM5jwaQYE=8(7k;s zK^-8Qy9mrT!Q{3;)jkztB(~b!mMC+FIA?cT zqV{XW8-TH@5BmWWiB*Rh(eL1@gRhpY`V%KNi5d}Z8+CiV=oi65lWuJRV?^Z(sHeI> z%eRVeL0YFS&`U8#X@M4pBe$KtB8r@VGWcp@$Lo`J`hwBi2SikPGy=sNpBJ4$gW3GbUs@GxiS@ra9EEx?Idqd~*2v@Q(8;kv=#nUsYb! zyQLslMMN<~gyJ$M0pGf2Nz{jaBlgI@1WcHL()1lV=7>E}@J%Kx1=#gMw749FZEKvu zeICWj1wX>mC}VP|9uUgUAb?G_(k)rlbtgr3Gf_ z1IYD!Hw~VDrHZ>`oRQxi3|u9JvN-oe09PqZfy_F~J|~(GQMnj`LUo*}QK}6K<%#*_q6?8s{uE4Nok9(Z#qjVbWypP(;iV$*veuxX4O5eq=*(0Kh~ra4vlt$o zpbU1CsX(m((QcPOGZk!3AZl%}^M{L1V=xO9&#c|&;=34SWPgj{)r`ts!TA>QUcrBM z$4KP=u#|^~H2hW4KiaCV|w%} z%nI~8i*18b0!XS{moa^jDWc-xWsMsqvg3Iud2Bu6-5y)V* z?}v*43A}#$d)OT@TkQ4PVW!?he^?SKU-0!H&cWr@|YT5O-F}a3qS+_!IE|TWPsNd&_}Y4?+ftPuR0Po zTCx^R2Y9n0`d121m+G>#1%Pkw=`Us`@*uCbhX8rAtxv_aL~g4`t4GOb_9Ova_!6ah zv`6u+x}kVw4hPDcRV9bB@AB2yl|H&3NmLz(3gPssKOkZ>+wnq_O2YCagOk|Wb)rfV zb}XJx5Zx*JvshTpx$H(yF#}+t3@&ALN~4+7*z=Hh^Iv5jUkRqQtXx-d0ZbvZpqJdk zx?q=&g?7N#9g&pE(n+rQ!nX_$&+Uf&{hw(XSbhXIEZ$UfjB4@ZTV-XVQdNsb)GmX! z05X@7+?8N+hn~^>#q2V!mF{pOe8vn!>=#^a6ZKl6HZQtMYx&jVBSMKn(_NC3siNH)8c(95GeMrxn9&QtJuTdWqEyR>q+r>SswhKcTGwD z|FDF{&Z0y)%(8`pMSMAKSNBV&iQIBLqMj0ZrdEaowzd<_$s?Iklij!COuqauc`_xeE(xHABjQU-$iHoGl zw=u;oNgdI{y^#Nb3#Zr#ZR7KkZlYItn101n{W@ICF7MuC+IUuMEAQT9`mGuYdI3R( zu3ABg4!Aa%hW?^X8yhGhh^n^Shpr7y+X~bt4Tzd<5oAH!n@p{|QAk^0^Ia4oCxv?_ zs&;Mo9<_+cz|SWdxd^Qys=d1~RZL02JXGDqeJ{n96u6qIZ#X4SoKA5Yw|iFcCWW_j zF2^3O+0v4J+ea~Ot=}_lZ7!mo6#mJ^t*rv7#;u(K71u?EeW=r=S~`w_h2;l2!0vTc zHcWJUP&v%fE(&DeE7JgVB{F)-IhW(@b4xdMZ-q}5VC@R*vom<)N9q0c$7v$}qw*b_>WS zNT%($F!QaqP#O)#dg{dOioAr>d7*e#k(c(2pMbZ(Qzr>qC0^S&JPa>^S2Vs9eJk-u zezB4mDCpD)9su!H$yNXdt zs~q(}7}K~t@EM5Y1Nh1*{EF-ahAk~KbeX6Dw5k0&RI?)cJ`uvz5 zJ`W45yon>3@ro6S`W}UzrGn)a;*p_DSK}R4i67s{6)Y;#Jp;`fR|O%xH;261E8d7F zX*iUjRJ(AE&p=Vq>gDYdA?dudbI({n_4f^uC3?#e`=Ha+Qgt!W2muZ0zF#5F(Fx%w zbBF`5(2mcs2VrpBK@eqjOu#l$sG~e659u8F(2CK_@f^D@qa{Z$$VM9+9P!|2qb_ni zyo#pj;m>+Q3Ck^Ex^!oh;;%p_n*fYfAOqibRi{gjQ6Qsy8a3UaK*jm14?r2KKxUre z3CcJ{(R{dZ6manhE`Vpj5lK%_pkN+`9jbKtm>8x|DBp>NCOyfifOb9?4}Q{BS1Oth zoea{liqJT|y%lif6v`ytpgEvq1xn_#KLllY1xn@J;l`(@C{Q}TF$RztR%P+ES>RKT z%~t0xcd4S#zHp1~uWJ>XvL@rynNt!|9Ahtdu4T74G6If;t|lN6pSS+A7F zJMQrc*haG6z630N9~9UQlJyRrz4|4QU@5$dRECjM{1zOT4mYuu=7fu7Sv;1-if^)bwAY=*AZ@n_Z+5-T;(_faJVh%jvBBd(+ToZVeux1X zC@4@as9^z|FC?{1mDtes;O=y!F{~T-Ko=y_4FQdl=#&aoV(X`ZuFJTe#egb2qPz@s zYgq;l0RED>f@Q9g;JD!8QXG#;Y+yZ9rAOEP;$#&bkgT<^YXSuJy61z5ESYUGyA6&_ z1d>`g8(W2`;MeEFTOzP30=P=~BBLq~sZ|Q$p5LhIz10oPso!{>-kszMDeVPW)}p1V?fPf*@u@Xj1LR6MWBv&&AX1k>Ud zG8iiBSaAxn9MfT>B**h!w5z;lBQ#uBWCXAthOxM&wD?Q(t;YQWYhld`s6`!G>*@^L z)+QCkSKfAu<<)qU6uDa*uf`*5eX$9+;q(eIxdd4a5W1>RalQZ{iw2qbfX!}7AN~OT zLBJ>yPrJ(7g-EH+Q>6JH23DaFMoL?}tfl&hE!DZ7b8Ab8 zqEE>~lv!^rZUS$Pa{jRytt~Pb zDp~2wZh(4#*e+RZC4f~=5F?7qY5}mFe~L^UCuPYe9ReCRK9BtvD<@8rTwY|obXAmZiRvc}S2Xres9L06i_|&69 z0o`h2vr8^+%s-1$*e;P`eWbA|#ig>T1~Dz0mzJPXo3pV;fd8kmd2G3=FwYrNz~Rr< z*F&lEzeFA7sax&?%zGr0JS7oQtt^5Xf7qsmNT`WNPNznS+BJDtR$4o7t)?%xW8UdW zZP`+A?Iup8uM_@4%SfbhA?1KYGGe|3Z2JAa__QW3?I=mm*33_2DIT(vH;~{p*d-+y zQc#Jt;#o}|YFq@<8L%f0F;FcY5dHUB)Zu`%L;XTXXK?i*POawWF?R#L`r-@Gt`-lB zE>?yk4oe3`HH`{N62!iID9Y5~flhxK zv_LjI9Sp^>u0x}c!<-Ep!}RILu3XAf|&k)74!^%28xq65iQrUFXcneQO)v9ti#3z z0ufWChqzRaTT|N&V!AUKy(gjB@}cOAzVxmu1!{ZI`56V|XGq~$Jgq*UehSo(7rP|N zMIU-dt$;&5UH;?;C+Z|Pefi0{Es`Y#FQLvtw?7uGxB?4#AQ7?JHl-O z$>L_@htGxSd`Q_upgyt8$d40ObFf*e(0nj;VSVlsO!hP*U%O+3|mOF#HEyCV+GYAYxrOAJlLne?M5+O@EB?SOi{T3&a34=2g#>_ zHPp8+W{kpa1d=MkpIMiJYwM3IRs1I4b`-|@c>urD=e~+R3EY{&_$sX-e_tThCi(4- z-+=qG5Z;T`qdI=|a*(*&fZNi~Z9!~>foAbeoJv7b8jQBC{Ty^B4`N-A1?2$Ol<-Ph z{n=`(sM?U*JL^}0dkQcMT--{m=+CBRL&T*n=hPxLgJ7qN2t|yjgSK41n4{vq2kxvJ zZ)0BYk1}q@tq~_0Vyh{LTK1qwG4ZG&l;9rq?$cryg}D(Ak2ur>xVO#~s7f1*MQ0?n zA$AtK5V)c&o{8K>Jl1)*rcO6G)Ali(pPGiu3SWV=*1Wn*mzhecP%EZ740uI(ityPI zvcnWz*YUfs;hEtIWag(@fG$FTLiyOw07WZM5?@GAi~?ox%dmo(YIN6-S0aZdGmZ+7 z!kfxrVWt|;7!kAK3ueI!UHNOL;`*{DNq+G4 zpHCLvolJf79}mfjr%hZZ3*U|s)~2p!TaEq{)tYju?yo6Ga{LS$#GCtVeNeED>&&Adkw5KUZX&?iA~+dO_lSp#%AvGv9&?d%tdD| z2YHx1%Fgew5u$c8?EFp`DS9-+&TqHwVtO+~IZqFYZTRo3oQ^LrqRH$v1b9x+3R9}1 zosXRb*N6oJ8SWy0HB+{UpZWopiu}yNIAxo-^E}|1BEN$RrwLZhA{MWO*n|xNcH;XK z<{PLJ8lmhT_n)s;ayh8hxG3QOsK*xjj1eC;$G)t3MCtbx;&5~K`PfLO zil;7zL!urTc(n~+1Q2BiS!g_5XB2yih!$AIwTEDjL{1BI>aj(lcMERU9)Hbf1~K~} z;+R{E+z!{{uOUOk{ub!{sIlT&3m)Zsm59hMpj3P4rh}GHz2ikw+GeWyBZ580iF~}Q z?5Kpu!_$!qLu_;$XawiikzGrNS8+CE;4Hr`GOipVmVi|HLNI@aW(8DI42zEcFda~u z0+~5SWF3&MK%x95;VM^Dz$BgJGl;}fo^$AR^(l{ht32hQDWN{)Su`49ES+CCm1~ZW@Me|o7nHHn12(TIO zb6W9;5E);YT?Foq3$Lw0hf9mIt$4Jw<-T~=irebbVfdg%3vE!{Y{+ShqzKd)=tEjT zxo>d%Kz1qfKrq-%v>dm18H>KX71S|mugGhSce_@!5TZ3t3tG_vxqaDl(7Yv} zQQ#kfE<(mTSsJoyA}M&~>qh?UFm|niCiVD8q_yE;VIPvH*(I&`Bu5DdnF{hbE*8A& zfNvW)+weH4-VL#-4NrCkj{^N)t;$tjFrzfCy%TQkcY3s*)@5AQc9OaoJ67jW~kV=f*hblPtM0u`BT}ZdDk@DsIW|bo~MA9*bMR z={_oi?)Q-&t!vTKQ*3L`xwDx+KHyH@lQG*{t(*m8cBdB3hP2;^97Gw0Jq%wgX(J;Z zfZg8V1ZCx$@%u8MY`YfHd{_yr0QRmwjK^o=!O5B+(@b|N zN>uB>{llG52>XB}1dTG$6cGUC*n2OYB`3z7@8ht)P zwxBWTop9^NPWRR6VrsA=v!NVFrlH8CDSx`Jc-;Xfflu`n0Udd;d=@OGLG#lhy(3;^ zU3U^(jmL`)9pPh;<&0_Z!$~o*BP=J`%9xHZ6UA2GqURuxjOl9W4mTf_Wv@|$gc3|s zwi zy#my~b7UZiwI?Uf<^0=!qCf?n6NMXK|ZoHDy{uYXSioL|ZVD?Cf^7LuU z=41S&M0r{?VM_=oW`IeuH)quA#pophdkgk0xQe|?zdIngFn{bF*aB!vF)yf~JyD_$Iu)B59||Bzx=BFefw(U#-KYC{bYD(-jQc=V)d`?8 zYdJ{-cgNuX8SKv5Y!j6UoPeV)_B>`8BH9sn5!;*g0v2^hIJ@JCyFYBBeIR=_K&?LOV$Fls9z>X)1&q+QgO8*2Im)IshO~!Iy z*A$i^Q(R*gyC7ngWgG_fIFk6Z2lw)tdlUk0va!9y7d_BG8NADij}%vXz~0b#6LU6r|OFT$20lB)*WV72Yf+38QTKF9;MKT*hifI7+)uh}l}D>7yPJKrs%Jv)T9 z*x#|lT(m+iWgD<&8f#s9<~*#+)YfGPLK?ByO)4X~v}T1?$*P1TU4YBIv;DCk6oPY*t0gM#36m>cX%YyJTZ zG+fFT`FS`o^2QfbafaPf#gaT6FMFH@u(CmXB)-VQqc<7MF&xSizXLSRCEagps3L5= zd5o6~^)Y-|RW$6)qk}eNLU0d>E&EWX`vgfH{1R+~nA@9&Wy|<{iTwiHZ5Q5rp8B^0 zTTk4hB=!OrkEI&7sREF+-AZ1MeXaiRD)Fi}qOH7&04GWXk40!7c;!Dm6jkuw>6nE; z271aSLBdRuqD+!ftZRN3oqdsHNyT0#x|OX1a*L}Nol3A&;%V56APFacJmr=U$UY<0 zStVUK2dPAGAIK+e2}FPe!@gE}Hcs58N~MMh&wO6dxfiaM{WEDDES&7M=YNF57D#H{ zloNXP-O@MB5Q@P(u~|SaEKEQvt$n}L$qTCu5o`r=x0^r-747>BA14EO5{L_gRP4{M z;$S}aX5Gcfd~RbE#lw8O#VcJCyf06Z%9Ri``tmTZ+mF!s-+DMQML}O4R7M6bcpU9d zWULsW^R$|J*SrVC!Qm#G+`2-LJ^1^=j`&ufRHpqzsRl z<}+mcLGvO_pFd8-^n(l;%+&w>rDy;!aRJSXYWm8Ef@JMl0)8?hYWp6MiU%^8s-}L^ zJ@Fx!jB|&g&Q3#Jai|}rr3@`Iyo?fe`r+7R-ZkOfpZhmSZ=|{nJURW&dx)VsL*x%(<>4wuPNTFcArco~#riS8nI?W~n zIjgoAq`U@Nlx?#-X$~3c4HSb1@J>dW-L^MB32}V@I+xa8TP!=}Ej$Ne9^D=)q6hLU zso6)O7vS*Tn{>LKs4LsL3ey0|6u%A-4K${xttGoUNNgO4gV2xyv@wvUf+P0!5U?InO&GIhXf%ud1WJWuDn?Z`H^mk8eS1iReZXTH zk&@enNDC?fHwaW?+?4XH2$W}c1s$68A?nPJ%JrW6iPS9)mEwgluBcK2V?kYLfUlt zSz0nc+O_-(xdxqibvyS;hw@jQN)Rr0RN-#->3$B zbwzzA+!!_9OZ-g~0Bo$rdtc%Rpu~1;#y3KdObbyvyaG<0ix>^71Y*F}h<}ctlW-6L zBzN3o)D(9N$izh_j>o?VgU_&@Ef8-}1uYPq*a3DO)Do+=1wSE&q?F_i1T8D@tq{48 zd|(F=#Zsz^I}p54T$3>ySW#Gp8VGt8)nsf3b}vya9qkSTC*2mCN4o>TXP3mO(Fgzs zAoNk17qAsaO^{r5t7%3DJZ6(&<4?(Ts|0KnqR{H5hKL7#!^==IMH^r{6NTK9?hw%r zTRe)4QNT`c%jo2a5#!$CtfegEW1!8X5K4?lA!4--S`2ou5K;{hf6mg1zeLFQLqyXP zae55CK&8fr9m;CW_1osARbxb-aav2u5%T>QF&AE_Qon|Ukj}&Cqf%0%)>;VLrw~$& z5m)TP8Jmf6)20?GR1Fv>V@q2Z`n82v)qrtDbv((EIgb?LR0Br;MH=UI7pE&=oR4SS zcfqM=e*Bj(l$?M`HerlTZYgWA1Jf2sEi{nTF=KG%NGJB-Oai)s z4FS?g1d9H;;>RFF-qcrYF_0_V5?t})bv$>JCF}$8uv-E-r#RY&0P@5zhPQDb;v%p& z+#(eB74c)!4dNVXD}ClEUQFN>>#FhNA23~V{Mde{PS*`dt(z-;q>o8<429s)Ku#)5 zKr090$I-rG#6&p0P6yivlFwXZ6cQ-0Ur&cv zH`yKgb?79%2dKq<$7?aA=K?YQ5lBkc{v-DLpq&Vsg4J1#{Z5O_DcqK%hJN(xma<|@ z1G^v*$_nuV>8mUBdyT!B8B=(0q8j@>#jasF^cp({j$hqeYS5|1ghM8a^HUHLju|iB zPWfj{NWPXF6VgYq-}g>wb#!^KWhsFCuf(FqRNhmK344+)P-DW|v=;rxm~cl9oFv+{ zwY4n)rTceGNTt6Q6H@o6F(J(mH74vx%xX+X(}H5c7SmiY;q~I;@HBT!IPRIaGYxYi zrLizh$Nwu##L)k(J47A)51)pIEVW@o+3fuo1|*aBAwZ-EN^ID_s+d0A9UBhcE;bQ= z4o*kY|IuHGM?f3Z*zmkC&4BjOc?N`ryLXE+GkAa&8-_aYssNQW_;dVB5|XPdH8xyO zLkyUKSKS6y6kp7Mw!KAF5EQOkjPI1wpc}uyK0T7@!9hUgWS~(|nX01naJKN8$?+`* zB{mG5h)K{4#2wuXSLR$xUS=u?VS1&Iai(NsO4uZFV&_{9`D@ z9s%(wH-o3b5c^mhn2FDis9|8`NjP{(t@S(r1B~Qqtr`Xv6Zn=E5kv!-SeSt3Afmu^ z*aOHQg4#efBLbz}as`!{YWq`~1#d(i!M>mven2O3XK|Aj6Q(v41+(xyCOH-~=_{{N zCGH39*Z-1;$Z_W^ZkKmw5G%HU*DaUtiSFh|@0YK}kl#%b#@XubjID;gvxuLKP+E;7 z16$$M1sb}cV4pxDWc4!3P0%9A1<3!{CH_A~k~De#$6S>i>%ufjB>DYp-X?n?*7**l zlDi$o9{hlweRQQ#Iv|it;WhowE#kcL3R}2J#xa^3@)z$Ec}{ zwR0ix{z1+h967cAPOYbASEvbCJ6>w-^aFh^g5Kf6(^ei49wBt4OPKyOVC1o$Vt zD*Ac&;EITZQ9RuQ$8;Sl>&fF>oZ@aKhR-@h}7^D7We}GW;l~xmVRBUWu zG7LedzH33@3vBtXT52R_(mmz;Ff~-UqfUYrY;KA=9vQg=O{@d1MlQJsex0R(yVHGw zdQ_?xa8qTxXg43ttB(N<+sLwjpV1wqt_JR)i(e^)UNcqhTGdB+f$Y!?Fr8p4OXw7) z3t+ha4CfobkL=qzq2en* zz)FE4jHnW2c7N6u=b7v~7ou{X5x~*at4TfN7Rdh?j`DL??(7Nc( zY!;XnBAMhLd%H9i!tfTLEzfPs|NNuNTyxLEwqi-8hPDa`R31o1=Fd%5KxZ|`G1U^ z37l2)|NqZ9_s(rp%+=hqP0h4uPeoEm`=&)n$Vftz8gsj9(tfCrWEs+}q@rvIAqt_g zh3p}uLPA0mvj3m2&pGGLy_4_n@$b?5&gb)fzuxc9zMRkJb3O;bwVu#L%kK^Sg}Z^{ z+Hz?)QhO;ss|0&hw!Kf&1gm?SALqskfnMb2?K03B1>{|?)a2a9NS3km4S?STGO;w@ zbyTN94@YZ3_H~krmD& z@VxM53FXWRzZp2s?^&0y8xEWQx@8qeMpwXBC;Y=ehk^YIO;#PxKp(J|BU31~WA-%~QDgp_V`fXFy94iNpf$SOS7nE0l{8|1;g*ijyE zn;`SGrr)h%WHK%MIHZl{R=5detTGt;AKzvAMK%Y6~5+#)ZWR@KEW!ysd(>`ji5c; zQb>CfCiY|HFJp-w{N z3TZ-3wTIGtWb@(QE14IVv0|bXw1>ADQ|)I!yt0+PH4Wyiu&Yv;zSY#OtndXCa#r{& z@DVxl3?t7lvcf%yO^14+d-(?50aK>*|aAoHC4W%HM66az2)-H5+&v4|>^XNu`Mq&KD8@HZ~H(Jgpo@Bq?B(`~r^;kIW(OahFN*Ac&4 zW+b(7@j4HcVT1SqY1HJoIozg=iyVqZ{kmgU;z=S9`WqKx>j%L%mT*4Vk~-VwIyYcM4$2gNZ@5TJ$G*y2eqqr!Dvzw;5kyg;4n)5C*XD_--(uDp#Mu-aFMb~{g zP3muCTs)O;8Jg6O^QG)=b`Rj-lr*_nZ6^u4l_8euc1@aI6Yg@h)d z!``yxe^=k; zLpU^84RQT4NSI}lU>nHg)Zod8x~0VasFpf4*ytu~qhSvNGCBo|R+Sa+pbLiyTin7D zK7E!w6NH*ns=GJ4Lvx)i{k=T0S0G%KGUH;x-#^;&w3jLNOGw`+Gm+XqI!H`ZlJ-{! z_oqyhoj*K^ENVm#ju3s24oo*O z?j#E0A?N)Fm-Y#8Il^%Q1Qrb7QKw>m+p{niVQIPre=q96W&RsT4N*95gsZ7qz*GasUsg1StdIU@@s|)k=&kBiF6zYpL_+k zD%8`nZ7U!h%V4Hzv%)eESk)}&89&d@0desWC}%gQ7FqLHUNR*!4a7}lC`~22)?LHi zqWqhX^>};V;QheXe@OfHqgRG)W&1}e_noHx=xuEeGn~O!8~JrD*b)K=rx?P z66|ykXO|iCQFCfhn~#q)Jlb!|aS#(zC~xObGjg+YXdF6vx?mq19X&MLYJP{nvB;NVf{L2(svw@jE$~bkXHGi~H z71l}C{L76~=Uel~DAML+YyJ#%&Sn=g-!;y`6R3arSF6J{OHlbU)vH}(kH2(+l|R?s zM4(%s97W2uF827h+x90gze@?ck2*I56R19K|AjRB(?B)aT0-xGN%>zT`_kdbVqLw3 z*PP~A*4YS`Me%dcVoMnM(}psN|<=>R?A@YZyIhP?cSc8eEW-bWE)71GDb5Z;)V-_maLh7WiH;d^BOZ%;PAojvUo+gdCO z`w<>Y2WULX?`m(Spbg;Y9qgDwsbpw8a`TJqMql_VB_|*~IUS+#C_iCGN$Tvp%z|%8(ysT7RCO<1D&`Z7h?p zhCohCgDFhkP;2L?0T}9o^t?0#F^&2iwR+(Ej?RrVZaWTSVhTpQ)oJGUb>3jqH6h)K zaESn>GDY2?Uh>pY=MQrx75l~g6p+m+JJEF12xll=*exoL9U#6bGv=ezx8^6DqUOFW zhqaw!pdb&t5Dlutb$+L_G{zbOX(N~yGvAo{*8FRn3s_S#74-}dg+~}OsB4{kMnGe0 z0*I@Ru%)gwf3dUk9NX(!7w@F~-FJjB16%66(ZPpp1hKW8vDWs>&oO@5JK%qtvf$5M z%lgxdzE&Mkd65fC{jlj-v%=a@%nLUshazgYdEry!^tk%X3il~voF(T_0~;>q0Gx$- zyCdA-%ZoqfkJ+;MQB&iipJN1W(8`X3qZ{@1Z1#>XCH>x}&DVPC)bx@KzBQXRX8-1g zOTc^kHwW}K*KzhW1=#u7ei#0BC`aLF|Hkltwe5W{e@zLzSHOI&-|Y&!*>r$Bt>|cU zU3$gWm^w80dtuDBmZ51k2XT^6E|MCDcdjSR@9Fh(&yFU^8C5D3e0u&=G zNe7tiol17eH=Om5(OVEM5a43h55pj;*z>>U;Xo$VAl+aP0(g5jHM|X=n)Zv!d^;b4 z_$-B@wV55Fy7rTFipI=u2t!!#Q+$fWzZ&Kx{{~I${4YtrSt70tq={fA$fku?0S>efYdR#>-FFaQaIo-mlbyZ=OoJM4h+~d0w zT&lh-3o|15dwd5U#Odwv-2%qnY5BB&PPqVETBp-LfEWK7-VSpWdlG=YGBF6@uoR$N2lEtB zHD)G)n4UtFbuhQSz;dy%lSH~Ag$V4J3fRQn`j}t0o&)ikP$tRI2FjOI2Xod&AN3`O zA2U$i9+e6yFMJG25oKUjxQ3h_SCPmIHx)z9LQSFAUw#UPzrQRTHNxLtR#o@wo~e4H z0mh*mX{1%XtMQh4eA=iT-GDo~nIG-Vw6886kh-ihEIC`Y!_`_{EE zH>L#MYGu&14qL;E2FUD>`PnVd_eMMDTEBhBwl0_acYZ8HzMS(HUf=pA73Hv0YVcDa zfERqww?2$~f(*1r)-xp!dPT2m9sh)HWH^9JQy`kD*R{^3kr^X1kj<6+EE7s##p_$| zd(f}5D?mIdlu1kUADltoy5qQYK4=TvZ5bf1Vk>{M!UvH=WM9$EBDk->fbrkwN>AJGCNV6}ofCUc2dKW?7;c1HX}L=iNAt;8>U4Y!p7R zD}6^m3Qg^o<6S%*H2uupyPj#+YnXfm$$LC{l&7N8NuwNUS^Qg4Us z{~vXvd@mdUcr=tF4L7Zl)WP2}5ZGQFDeHw(HA41GFPy<4N^cUI0RtF@Mt3`|NgK=h zkZ08b{U~2@lk`a4cr8@kcHWhN-SYamG+Q1CEPDw72iN-P&cJSYpHp`B6JiVC-{9FT z@5~2$jrRi$Pww5B+%0d-!>Iijs0F&Z!LwW5;3s|Eir@R8F|?ao1iR(E`v`h<#rK2r zRJI1ebq!R4;B>EGx4gAn%&<$=7sA)&06XqVx7XiGTvf_c-+il7CZYRvxM0A{J zEfd^+K!0Zf&B;bCWgo*6ZMT!`$0>h3sGw5AsMPs^MO(;^VS9T5QR~(&n~Vcf(_p$G zADY6L@Y4=Vwzus8WK8E6y*4V2Q7Hj_W0{JsKJ`>wC7bwkVLsNa=aa;q2X^TlYxGv5 zv%XAE$>##-(X{<;{X43DaBaN-egNpZGT?aXX!K0|n8z^A)hc(+wf_PV`Z35~##q+~ zhS@QgO;ZAMja%6dK|Y~uxOB!w6J%`@WN+XXNW~OpSq^wXcCd@7h~37_TARw@Jfk)P zm1|RKF6UYLDLL_c=7IKN1ox$cUSYMjS3C=#POw1_fK2_R;Nu2e9wgv#JI+6U+^eo2qC$5)mjXtlt*7YT{LYVqwUxPW`WY`nsp6 z|8_Q(6i)?w;Qkjt;7y(hGlZ zyuGz8scm0^Fb?GiVMl*Egwa6e!oN;3*9fh4_MTRj)xCi&i}n(J9+cDw{ZzHL@44Kz zx;I>Ly~%FJAYTFXQ3~nhkg4%}cHs#OHd&tK-)zne>qg@+=+;EYk5%%g&D=KPB%?2K z=}xm*1kmiGrsRYZ4IB6wKu4CronNQ{`Lk-+D2L*_yA`o^HrC;D=(uc8RG=S?FRg7!Z2KQ@72)OVCco|IUgi36MwWNAT?;|Il#pDnh)&*Y z6Rh3NMba}R^|QT$9otQOZ&=ENS>N3zXB@@Sz6|75DYW+y9DNCgI)4^N#q$xY+1BBBk7-#W@JRAf_iKL2N_|| zSAd+6LLZS4mFm4d*1x)!j4&F@KtFk;#<^D1&k1Ejr3RbtHQ60DI&YQ3dl`{saw#vo zA8AAxmKA=5(I+qbw-~B>dExBjZ!hz9LKCWPM7N*kg>`XrR`^rgS>Y~X>vGksa6g;_ z&Mc;7cjzg%zTa|6Km27mE2(WyLO2`B>B)~B?fIw4Sx+_})}1LCIh(wUD$&<=Wzl|& zpXXE3RL-9AFPQ$9FtOIhn^naOdKbvOLJuMYjmJtJ61ms==QxL%n=ziKjhjZGGOtpau2K)-Z_sW6W+rLFg*U&W| z8>`s{_#>cSQ$R+vUhdI=3J+1R1bvhN4d~J`xWXh7+XnJ` z@!MqRDPBGuZNM)8d_`cdH2c~MR)ZV)6+I{kI>umjl^K(+D(la%%vXS1K3#@;zzo?3uLLpM&|P3^&@|yarseUqf72=aLA3S;k-%9zSuXkT!45MH^Ob<(V%&Wrdr7 ziP*=B(MC=ww#`48r=^}X+rxMtI;95wAop^=EMWx5OFb|N+p~^c0&d#x3{N@I;N?mC zPgdl5*0W{AzKx${kSFwWY_vUWERY6MzM~`aM-7ACkU~bkqtQpNY~%l^0}>)Hyo=w+ zyY1!NC#Swtmlgiycb9>*-`9kg7rq@<;t#MDC;LHuo=OQ*RY{+!s8aG$ZmM-S2K^DpokHt&KpL9)c14w` zOO8%8WjADi{{o7F@qnhgiK;teQn!v;T4n2>i!o4F2otMlXPnAGX=jBy;ETw~(P(<+ zyl_7;)c6W*8sc!T!|TWZ_LsE8sIU1 zSyojj$9w`0;N@9_*|X+mw(W=;xC#c>7R+hFnRwHq&8rTs_s2a=hn8(Hg~-RIFwv7v zC9lm$+rb{|eo8z~KmH*a4JpR#QATAR@Y|*01>fE-je+ZTc(B1#G?+EWHc=jMoVp^iGib%Fz0H4Y57XrKz+VxVyTsTiGBhAgT`eMR68WoFKX{pAP!W z>lm#3$;#12qdn-pWg4kD7}+*|0~%+Yyd?Dubd1p$3;IfFxIw;sPp-5(+u3Czl4C%( z0JyWv?2DRf^|imRLE6sMr=rQNr~$4m0|he}@$6PZ)X==One&KlG@b}>u7(DaxHlKX|(;p#l)mpr@sCs72UT%cNOwA ze*BL(DmxVFd9d0(O=}Ogt1Y+EbBg-}jIvO-<7=01OKi{MXAzX6*p-D^jj^&_y{D&_ zg=)}GrI4nADL}Qhtnk|iB8r&D$P4clL$bW^cmL4;Mbt@jaBe;GrwB7t(xi@Sy;$h!hv#daERCy$>w}e=hzJP+S_i7`kYrL%7BG zl2DocIKDdN%n)zfg_ChDF|H}N?#5+B&c%A_$F+)ObQ^)>OblD^5YP+wcSCWRCZPBv z^EVuyY5r!%=b68it;7dJVB}F*)(R;5X5OzukZar4m8rC#K7PFAY!ufi<=b}(Jn;v5 zE7AGnsH~w@7Zh6~?)P7c?}=Ncm>=TBcA_~8nuOlvNM{9la@Y!RqUG$JlPrFZ8`5S2 zdl<^Bk?=(5(b81nI@)6oJ)Tb2v0EawGBe6nHe#Mbf+Grr1W zC!Q$ZMaCEPvdH9<`59xc9F5ZF&Li)UX;f;3vmbhZuvVgDjD7C7ax2QR_PO(*@sZ*8 zRG|szXN>)b4B4R`Lp(!;lgUfgL;a)BmzlHFU`Y&yH*yKZX3SPD?#L ztQc8N)sS4KIxFy^fBA9R!Rii~1}q01KyD2>fTp;Mr-iLYpg~x<2>%!;E)CNGOvy!m z626hjh_t6_f#K01=x!oEN}dj$!^M5Fn$U+U(~=#+*6f>maD_o+-t&C ztJ_$kCt~Z%N6sqxnk;c%f&VUK@=Xr%eNS!jN($f13tKgA3R|Nw@+1DkP+S_yceki# zO$fT$l7m$LFbYW|Y%4`Z^^&0%W~v>oI~ z1T!F$uX50}g~v~_!oz2|Mu%!_*YT@y;ytw0Gu;eDZ?`Oc$?@6$(jGa>S5Ev>ivVw7 zEQ0!=vJJt3K*i(-@hh3zkZJY;Pl;Gw$BbsKw7!9^M(Zdx-l{<+nt_%z(R^wuYt+V8 z-Xg?tw}q`b(0Vk^NH*Ng-C+lA4_p602VjlDKuKU^&>5EL#;wHb_1PtzAGY>EjpuU# zHIOAo!oCAmupn%m0F40lB#;-6gjH_9vL28P(8Brj%sasBI}+EZ1tF1*_dxGpE|krT zA2KPFLt~5;`3_iO6hFc}3}xS8SuGKtb_6zYJ+McBJPmaLc22hKS|g9d)gZf`0kZ|t zO~TWG+!(;*@PdBpM1pP)R=5wLHDDh^yzU5WVmUBD_CVhNdk4r)$Ti7H*-S)QbNd6B z!%)Eju3ZL`dz7E*JsrIwDY;`8PvukfT%k@ZvFRi>Yf%VQ%Cd%{)EtElfs!0veD(00 zu=xpt%YklPz*G8AoS`nEwDOY0r>+mjad%+io%whegsN%v@~1%5nP!c z1+^oH>J{0Wfa20soiK>eNEblkKy*ObJspvFX8@n1OEONm`T;Tw@fgSyha6s-^!3KX z0l*J{dji@Gb`IhNM_@VWL(NV^X*LS?Zm2p_$tMB6cmz1n8rW9sxqJB0M+bI*`Mo@D z(sguRmH)NP5=-d>D{&H~*JDxG8VJont4bx?Du7J1*ZGUYA@r7c|X z8~hv~j58}|S*;dPLn_-=B`7WpmG3Ps-5T_(_K4Ss9C!j%)u_y-?TMwdk zoPxU$?09H7_+tE5L2+rwVv7?tg8l)Ymvhm9b=gr=s_Z2&)3@ED17Cd}>=R-Oz}|_J zqi5RgOYq)+a@w*c!$EC(0GlV#!k(D2ccl2yJ!jLnN~sN`yvcmXn%&6omK^5|g_P$)i4xg?kU%V;6#aq%)VDtU=n=kQj? zlCaeadI>|H0sby9B!^dPo1Dul{EbGi1hK>6B}l6(WTGucMn6!J@9aov%|k!8&pPFAkV_LKN=*`oHhf~^T+Ff_zyGhqgg-VyWQ~P3JHZ0A0+EbJ?jt1`rzeZ zYwX=&t0y^OqW+*~Z>VQ|mFFAgMg1Yq_z2JV>T65}tahi~jFE)-Koc*JV*wJ_6wfj^%$nZD7u=`{g_yL z9Y${BGdG{_Z~MFq*Y9ghSDV|oB5S#+u67k-Rf0F6f+d_k!Ec&;ZsSywmkG%aKtsXQ zP1;}Zd9M{Ku~T?#5NNFTj6Hssy80mY?Z zI+)S~E0;)rf!cxi6Twj&EHJG=4zI=ZzJe_NnU2LC1<%XkY9rj+;V3TlNpRCU&1>G7l_M_|msg$ohoJjoBk(B$g;RSXJ_VYWalZp3f0quPj6b|?tR zyF(9v!HVnUN3{`telVVWe?X(!F<=u4ya(XH&~6mA;r{|MNt44%n&L2d#{}kskA|&- zQ1zwkfKWk9URS>?uwA6j%sVv@oB)}ucCWgUw5QFEilui58?Dz+PqEV*{~#zXJ=2Q` zaU#+Y&>Rq#8?2?0NzRD%%&X(+L%E~Eal|dh}Pi(!4=VQ!22DMtoqCLB5 zr$T;IqNJX(^!@Vxp|qxkCw z{OYs-W_s(XQT*F|V1w2(6|qWnI<%ZX-okIHOO0Zxi-tYwlx!FPpzVNu#&3$WMscc0 zZ@huja-Pnr1eqe0gVv*OZ5B&o-{WDc<`ZEnx}4(&$WDaf(lBMv8rZb8VQVYY2Sh&v zm%99z3^KOBu?ko7%+zz^(3|+|>$72N>INPg(U}2!QJ|vx$CN{SQ@dt!TWm8qpN>xA z-Hil>(hJaf6xSi$A1KNp#qn2+Pd>dj_h@$^sHdT6yBJn#jnIvmPH7QOYr5+%aS&S@ zkq&*1J`GzHkE5PKCf>$YsB}jhW23l+bET!hXM4Ql+U~lQQ>H?t+u~FI#6TwuO#AX5 z7WYO=KUBIu&U4XZ3cy`NJ=ned;(F&gx zK7~iv$zyRYr`$e*8sE)J6ZlKot(TtA%KPS@tU);|EKy?p&+Ht5-3yHXzx_DIzP(6H zdgSn`osQ&8(Fv1E)tx`#MymP6ZXR>2;_u+eMmQ(ST8N!|58>Yk8C!B> z*wS6b#nOvn=OpM>Y`HsOd=15=Y>b_}iDuZw`3-+%nwv3Z+H!j3l1dwF%!amL=Xj7O zKyj%VGkTdc|2(G?%(DVBa%9A*z}-cpq$or8LzU?!68NV;aVg7Kk*L_Qb{(`I*rZyvH6JoHKo0d8B?D*^bx#kT z{v(>ZOd0HD^n+m5LS-3k6)(asgNL97_p*h8|3fG)u*s1p$q{Q$EhaC~y!0%Y@Y`ct zj%xP!Cj3?A+|R?U$F+)O=m07B>F2OD4C75O&=-nhPR8Run7`rp@8)lIJdBVAV_jn( z{WNAeNO9yZtiPh{o>-d!@se?{>3Sz3U zGOZEOt#|R|FMFAGb!$vq5`{qmbgy>3d76)smo%o6314B)`jgoO;a^PHzRw0U`b+nnJ+eVF#(MrplSDSK;>H*&@=DU zN8w)}{*$V@e|d(x%(UxmPTB`@YrCWV3R~U(4qLsc6EiNKVAcCq-&qTl-s)P@uZ4fx zKRneUn`Mu&>QynKkkXIbmX`I9hzY~6A>KgmSyG(R%oNhWTA zH+#|;V2l#PL}nx8_J^2 z(2OP)qm)EVarM?XA9l#MIw>OS5b`*#*8{m#HC)FE#;>qa7@? zUo#OLIklC~_iN`8zfO#vX?IiCd6(~}yYc@;I4tE_k;Wv*tB<WT6t17eI8QXXHI7@+g@+7_C~d@ zN9`qAV+@t9rmVK9+OF}fkl6>H$N#t=2rYE`I{Z)gcF4=*v-n@IwG8T%l9%79U*2ph zwx;vT3TrJcq088nnpqW?Ig+CF$S2WFrc%^VgY={qZb$pIRFZg2NM0|}*|Y6;Or%4q zUt4XdQ~opULpLRVJjCPbH%Ltt`oK5PpRV#))yU7DLE|HzOQd&bMEt})$5sthsy|kh z+G)>VfHJB0;W_-f>=`Bqx^T^a>mIAen&Vk2Pw1BT*`(xV=n$#73*0lg{G^g&QuFBH z=9K1Eo^-lOG4MwxeNm9?_bVHgm277gkeeYB zF*%6XSpF0z_)(;0LQ4pCHU1}|xHL?}dJ?gnMC#P+ENdHxw-8idZ}rHCwRM7s^;RWq z>v$0xS$XV)c$qh9B}y>a5p$(bJHc7$<b!Yt$)RRzyRZNLNO%9Ng4Kg|QaBfBSDFB53+-cua&Dm$EU{>Jm)N#4{dklDcq23qa8^@x-XIU0{QHmG z8olNrOF}OpZ-=Z`AeY0-_S1=4;(d~^5Zpu1UtmWfo{_>Phy97I)yURC`i5i@*}Z{W z4$syL%t`YPDroJhSyt>3&QIWf5sFLKR0(|>-FX+^UdULIBV~!# z*{sM@cVkLwbucpl>W`^#b6P4Cm$DbJFAKbg<-=|R8FO-^%*onNl2t5CSxQ2;Vr?+~ z^P#wOO~mvWKId{5?+nP8k|V>^f~PShwS}1Z0osD8CHU`!;+ON|MXaEn7qNA4wnE05 z92wS@zKJzy%F?mNF>XA{WM&_XgHT+`CT6-B*0Edg(m7;I$&q177bF%-s|sdDLp>hl zeREK!L2>CCOLyFZrGEI%fs7@yYGf4)Cbb(~e&(PXhcO9?3vF~uoMHzCKyiVM>Y7hb-Gpx|WK_*!j#Vt!8r0s04x{>23%ZaWV8(@(Zekb% z-!{a*L9N#CGVTdHT0*8R%i*=J7L4MFlU8s723(VBWCGZe5O)o*CZ%+~R*|mXat6Y` z6f)6~!=BK-KlQ)C?_=;-k&8d)XEZ;>vM}Xso|mEJSe=7^5fqmR;ut^A{N)5r3E_|2 z!u}$(9pvK(HbN$@sqhm`uv&8;N2H+WWAtS}e)VClaVbq>FXWtOgBJFmNEGeJc*STo zKZymqd3y!rQBWTY)Zj_FFJ!_oX+hyCZ+4wMwF{_W&`kTBYv{3K_A1gJDzze58iJ*! z& z&_ZAhfpiOCawrYsO?K|+jo0L6ca$Q!XeyyQu%ud}It%75`j>*4ALz@W*rc-aXQ0Ob zon~_L#n&kiFEb;$M=Q}5Yc&yfgR<#T9!Gy;U@VA?mCy}?g3N=u0Q(rouaI{V%+D$g z_fiMAbx;y>kV1F9bZBmed8=#>WISFJ(C@wWq1Fz~#9Y*>IbSsFn5nKXY>1v15M8*X6 z{tyC7AeaW3z~o?1IdC>TgEVAe7qkT{i}A03;?gkTWSvRfLRztA7K?^lT7uwp$P`sD zJG2s|gW3NAQdpBsn|9#71oP98xJhSmbqTmjp>e<}@|0N}GUihA#l#|DmjS6&i+yTf zt$|z?z=BXGt+?N|>NgLbSf`evP_-7}&$7o`^;_9GC1sYH5>MdD!_-O8Zp^uuy0g5w z5?w`FznA|=ZzcAg&V#|rY!gD&Sq@)|!sbB9OifJ&UCC5UknC63tp?_P3g+7*aTS=9 z3UeYf2b|M}y$Hyp+{{mnx!cd@{udxKp^dS zsScX8pc%;*vtm`;IylEb%Q5yFhO$ofQyLhvit_Iu6LR4 znMGU0eOwq-P(B%Y2Ln^^&w}DYo3fcsFYc7$TLKwfGtae(1#64ic~Ca9JzdiIJQNq$ zsOmci&Q^RMK}OXi(JB_K5Vh%fbRb>OJpki(C@!?gs*<}nXz&)(C}Fe}sS>>FU00&&M5ft$R%9>>av z-L+5wbBg6axQuC>HJZB0#NbM+Q8V!r&xr1jO5D4Q^ScCIgL%_XG@eJgwVYvKUwp)k zBp5xaHp2+8ui7zy9t?0n@mq=07#y7Mc|e4=fUDe|;S2KWuvagc@93M{c^`zWGazdN z;}(#vN5Ce(L~`E#f@e0U9k5~`CONuY&-K$Irb$njWs8LFoUceEw?pGlnTPbnz_K4t z%{Inb4gSfJK%;nVz*`|z(=k>9E7ImI)tu2}lCG^RTCfN2hk*A(rZ(W<0nSXM8~pwg zTr1*eCZTI4i?`rc_+LX05Qm%&Q~)S06GSz>+x#UT^y!FiK-H|nfCI8UsNRstE;*~R-fc#+k3R2FWW7vrpmlP6l`f^KMx zY*tphD@7t)3mQbE8w2VJ#br@h@vZqAjvq3Av#la``>6yt5KJLtGFuL2B7b(opp^44 zRu`Is!Abb9f#T9oHAsASnq}2P+8^2oVljdTAd{!52~Q%M*_9wyK!<^C0%CUz=A{Ad z{~XH(qdFGifMop(PciG16NtdsST2VB4Akm*3Jt4`p>h%6o6rVg*X0=wSXUs|bfj7t zTrhe0KO?Y}5dO@J0A1^p$`oF-rc;W+`yi8t=0te<)RCYphoCD!%L)Dk{97P5Eb7nA|>W=)rQxkSzXm^jWyp=LdfW21B$ z3O7nANAuEPhF3D+?GQSbFK8CKw z=1T1C2_h0qo&L`ZU5V!VP+Ez~aKgp%C-56?Wo*Xs-&n2G$xmWnnR718wgkBXIsmKz zkdXl_m__}c5om|zD5zWndj5&!V))NMjW^QCWA(=JmaW9CeW+7FK7&R8TM1-i0Na>c zk`t@zzK{PK$W#kCGNuDh&nKXl;i_Qrp@o=%Z8$kTiIk__$tLDmo zB6J8|{VqW|Dmd3^YDYQ}U$gclz*?yJW_CXSod=m1nkfY^Qa{dWFvot$XtDTm{~M@} z0yYgY5tkz);`%IMu`5#ziFGq*9Of6}UjfCXY+|m@fl1mHdH}>01VL__&vPla^|>(t zxz*c#sx<8fO*t%qK0afpvsTTFk1b zRV-E6>Rg{~4D6kae>fBuSaC0!R)A^|zN;XkYSt~SV!^tg=03~Md~|Pxu?UI_ZFHZm zi|+mS9*2ysSz6@e5B?3Pozj4T8`U@PZ-e3j8`V88qxuED!;n#xL&FxM;KQ4cS`mHn zw|JWizw&3yfS~Y8JRx+mtwvB>+SrQkH-G7~^xo1vpN6f6p^hNCfI0*6YHILEkeHpM z`~9599B2ZtQ9w$LgmnS7@CV*pSi#R~a5sZlawKjGxMOw_KWGoICxN_pBurnsYe#l; zhw@0?4j}siSWvLMJ4XfR0c0RF1X!rM%LZ)sauvWz=$nFrz?=`w1J@KtyCY%x*xxW9 zqo9|7oeAW^BVa{`Kc_UVfIkZ|rD0Z^Oli0c9{vEaRV=;Nzht%t{e`V1_#cMiQdB`) zW&TnS`oh|1Li`zO^9n~Y5!gL4)8H*BHR$9|aCl){PauJ}GG3;Dox^qy(r*r7Yo?db z$G&8>!SU?sV>utIEy`QAChJ3bf}8`b1U49m*C1;-yY$RO%}@OOID0!P1-}O_KV-sF9FSE)gD|lemxtpRlF0q>^}(gCyZKPn?rG0VGzB>n81FG&k;9lm19P{Bt zbsP75O?($4Sp%6GBS+AFU8GjzYZ6v0ZJGKBI)u5m@b7}+QdX^5Y5r1c^ewobK{aT| zHvSeC&=Ev>1rx4d0&OMqO+sP*fJTDL@5RAO$fPZRc@cgouN`na$Oqj+(vj$KqlpK1QYJ{xcv$D zb2zPtu9uGJ7HMz7t%xe(RU1)Ni2SGc4?%HRRCX*ef5Y+n&EIS*(NouR9|ycUv<;P` zdvo#}GU+wBj-Hj6%k;YkkWo-&+DaQBg92D#vU&Abt(v2e-3awSemSyh1NpS%MaYNE zL-q_b4f#@JucYKG0h$V2Y#l$OAL*hklq`D4#%G@+9}!(Qlr=%R-s#X<4D3Sr&%nT+ zy_4Ik$MS2=KzKK_A3%*hyow2#gq)l_wnnVLT}!9@9n^rvc^0yZ0=fTS&cMBk)H-qa zvmsLea%2qL=iWxmlj?p<qyc`+9>!a(%p8=_k;o8tvj2D1v0>zCkh(u$4>LBe3 zh3QDToo-jMh66DfGCbL#CK=KV;RL87fN97U1#*A&K~0mYJ;8q8OzUVzg-nN}@sKpp zdK`_7ftDN;BoD1iSd%H5xQe`dAKo{R$xAuX62qCQAHWp940|;O^|-$pqmjN$Iia|e zm6=mEeQ9zgA7&fK7?UH-m=!trAhx8p9Xp>vd$2Va|M^f{x~49_0Bk2x`^y*;PiA2g zklYHHoVhhwREwN(7>C+GLy$j$?2SO4Ipv#>n(`&?W7$B}`zL4~T6@s=InYWy&KK#k z=Z-}!uL_xT$dQo_Y71B7NcU%KRc*}ZioKJ7b%f$lHZ`nreO?qoS{u@ry)Q>#D%hoT zkbVUdPvD3yL{I4Z@O41fhuSbyU5|7HWKu4NKaPxZttJ!o342qR`k;J5-#u=C+Br}W zs+&OX3{-o8~idg8Cr?CXn#K148;X@N?k&{nR(|F z#1BC`fSic93uGc|rl3k#(dVlP;tcrbK_&>Z2x}D!yBgiMp%}5h68}^vF0iQyFBkBr zfYffnkOyKuf_tDVv$a5Orm7~0MuhIHLGUbOf-ozoy!MCRLHT%SHU_rg{|t%?Y=Us; z1sWnf7uo>gR|Me!ej?0-Rosk0l zYX^g8LZ6^622jwH5e)YzKz9ZqrWF*XC)*NG#WRMXRr{_nxB+jT$aeE_(AiRZo28M*zXKR$Ks7yb#3Xbs8|+W!Q>lI zbu#V>{1c(L)J)m@bvrw%NPmO|fw%?16A%?F#L`^y`utdZ_W;7f&>R3;5q{zU*uYhQ zvcp|u@FH8Ohec1S%liv&<$-?uL(Eo81Wn%;72k@;Nby(v$a1ay?BZbkBt$*Z)#4a3 z@7Tp7u+T>2+w?IzUX{)b2)=J zkp!87Y`M?R2-Dw1#b=I+Lh)gKWVs)-9P7Ohotv)a#$|~}#cPAYklL$VBOh%Xob}u7b<-{-s6UyMK zGtFNXD^I5SI9~(*8S;u)3o2HzOiaY&R7hX3u5>1EUP5t!6>w2=O2DZHs|93KO}1Ob zf=xs18t7_Nd*L5=CKHFa&_?%4g?|CQ(U8$KG36yF{4>$J9$Js?HTdU3ae+;G^>zC> zNS}ocfLMXxG03Dh=o+jmOl^R)H43+7OOOCKhzCS(0kqU1Ls*<`FY=OuG~ zxrJCdgE`3nnOK?zY8A`Q=pR`ogGOMyA@Y_`Tws&Hd8*^5;p+n#Ro7HV^u|LA z(Y*-&7$`2Z(LGVsViLYtkkK{KwTcB(dj5spL3IiKd!e|%CUbJA3|6x&s~42b)57xz zzJSOadc(BZP;50h*Q*5Ks|XHl=BF2;EzLnt7qtIG^Qg1@td+xb6_E;zB-h!a?&By! zBf2`vwy(2yJ&CX3^fsPv=;b`hpR9FF+n&~_IuG9MmJz;{73y-;G1j#APvFd3zh#Ee z0|sw^vI~y=>vN@*;wvIZ~4PEuj!p%S;fir>$j+{tecG(-y0ab*klQ7=2|A~A6YH@I#f4%$;j>Qgf?O%yGZ~tz#dHf*0&j~$Hh9Bq4^#?y)+}nok3<-bt$wLR~EGt*N47GucF>f*alGqv7)RkaABn%rF%YH4TJcUt&Z%Xd!MXl5QcA?KKJG+x}t)1%}9fY7e@6_V`+9>n;#Uh*i+9=jxv3|{9 zg>QjHrOK}RFhQEeA*3#-3*A9&$$r)=3Nc6A(i`qd(>v7lvQg~0!agMK!_KK`>C**w zp=S-cpEDrWYx+{S?AGLl-m&I2Ixq(e{UCrd#1~gUys9*5_u){;Hxk!W{^Ti{*@$!t zUTAMBnMc9WrFd#i&h8?Nz4u9n4iFO zxdYNZEj?`A`WJc!sNY5uwr&9oeUQnkJRjb7HpOoWRj`_3{Rk{AI?cs9m>KOJ;{By^ zv68z^kL9~_#JI-EP+TnDwN6HQ9~Y0SRMP`^NxYjfak`Q)bQid^H0X-L5Lc{r8da8m zzlyioxrCTx_wy>8($U}!*pFwbpD5mj%%FRS_iCoeLE>#S-C3H&8FwUi_l?Ee)slXQ zhSMaixIYp1Q@Cl>ZOUp?|=o<+-j}49yN@BwtrAhTI!qrUAQ% zc}plGkB5qPM<#BJc#AV}GsRm5F5B;5m2*qPygyS}H#&wMhF9wJHq!+Gb;V=oi85eC zcyEe#E!C&QDaQ&UUB zU6@R6!G=3cvOgFz{Mu28uyqSy=wCh*pY1D%soVZcB-4Ov#rvGZr13TygYeRHb*o?K zpOC#_nU}!I*wZC{q0`P%4Q%PvKyjlB;clkW$>4Sr_to;;(c->Qo;!bGa?=26+(t>? zFE8CM?)LKB>Wkp+EYH=Yf}tN$ow}koNUT4}Ex&za!|) z6A!VLE>7+`gCXuWi5jHPQAG9b^jXH_v2c2da}QmVZ&SQ+DV~85$64s<3o1Ug!g|`8=<_h}UaLvd`RDLF72x?<`3c z&y7_(L2lhZ7urhM6?mhWc)D{=)4tPuees6ewXR@L>?qsS)ncJWsi;>&_GZ8`k*W?y zcY%doF;>msC!X&9@^~qjt^x~fQ^onnD^1}>iutjrO(kXA`QmC9p zJa7#KFYeK)IEqzkrOz^fYdG&D&T;mKPE^CQFvG;j(FAIA)iPr{#I0dx7diuToeJhT zLEt|3CR-1tq0GM*@qF8Rta{6i`6;OhWX^qvUe|b)J?cC^dg5;u{}Zab-*1cej(DG! zjd$XGBi`Ojo^?MwhRb@HH=oAAJ!1I`OmXI)nU(Nnx%8&zbZNOG~V^3ijqB*b~KO zSjNn9^)t?(s$Lpps=-6a&O>6=FJJ!(x|o53f#!&W@es9C|o8 z^z7KF?)pbSy=X>IGk^;7ig@p4^0tY$2VQD+A*Ayt+;4ffuje%MXU}4H5&L_`%i1#Wyf7q4keDU0^c52)e zQ`g6Z-p>f)aj|xx>zBS@&x`kEChv9e9;KwyaJpMA^fxua?`reV)m?LXm@s3AO9K_N z(qjSBv{1255NnxZKjY-68P|q&x>!4?7yj@g-h>p-Xo|H^tmo4UT-;a0-BOMlat=L~ zj1P^~iwIKqcruCGm3!mkz_~9!s0iY{CEoII5T!b>bmJUDxz=~QA`nwo(1lJ$wbU;? zF*}IaQPrhxcFSN^Bf(q=UbO74X5`OaZ6#klFLuHy617{4$V_5XNzD_5*t*0n^o|)8 z%GuhwHrc!|);uCqt0$AgakrQIwkOeGwvx6ECH7ll|5IitJz6I|m3*-{%!@ z^*YT;CepgiFZ58dU|1}6Wn@*_eXSR)__}aUjn-*Z<}v&J@6{TrZq-Z;ln%b(70)j#abkuX}!2>>cM=MXp!uqwOW8fR{!_Czo9q zt8E{beD1goEptCC z;N|Q7y(pHK9Z`a=doEdbOe|*H&7V)6IwqDkT>J-~C;9J@e1A$R-iP9SR6a|>FTmZQ zhlPV)^APj|F+T@7F?#?7-J&`_^{bOP&a&heV`A630!`cmi01FFqlh(AtmP?IJyTUyAhs2`p2Hll-df7iT({?FWZ&^4ju3p@So5|EG z_(w4H)_r-KdbvJyzioH<$jbm()C=|Hae8sy$GN6^7f^4@mj~*t_;iDszUmeCQ2k(F z(1chos)ydx<4MZc_Wv-pM?98Kx=@c(z`_3n+_X4Xc@bo}{Hi0Kw0+$11bm`+*Jr8m zX&F5%-mn*wW3Py{jL1FWCF6GG9{F-6R!P>2aGErCE?KtBe;^cFFTQF0h6YeC_DEXk z=uNl(!0XMn|HSKEHt@~L2cUP?{!`(vSCaoGV>Kg+MV(iZ`3qy!oH4H^3&!!LgA%d* zRTOV#!Md)~Fi3E83%so+6U=I4LvY>1Tf?%FH_vGVYmiv`w9*tP>XqowE2is8DJ~H2 zqX5+yy;b5cgw{RHsTOFyB;I<_WZCG5o4;gw6+Nb$-NCRM$OTs|2q#mh*>dU5tz^@vj{8SjZ#E*TBpFu83? z;I=oCkK7rno3GN)dHT?Pbver)$?m`0>$)XqxYdB#$gMN)M}V3j&?$HGuwU1&P0EIy zTa)jMi=AMyL~me)p2|wkvAJU1Y0A2LkjcBndj?)hr*FXP^ftU}rD`5QWLYm?g_5R9 z6a+B6j1@YpDq*@M!RCs!I{DU>vGZHVuOspyK8TZ6Y&sAhx-Nso>Gx#UyJGc>icYAP zQ_%tSaw;50H!5c<6rD>ipN1+Qz{^a7Ubrfs2EBk)E)By!2q)jTGB!LS(?dTl%hAK1 zfX&R&@TaiSa#SUwBYGJnBc_h!WiVx2XQ@McyfZC#bhO$`!0S4xeBS+OIQiJbSgi`u z8M7mtY&|JftA$$9&pSZVlKdJdxlVFxZ^v(^V%7XCoa{9rc4Aj~bdoysWk#4fSRGnS z+w;Rz+wLzO4-%(&4_VS2vNN14xGHwKiAK|1;pDihVx3G?(_!z>rx`Z$#9CyYf$E;- zRc+ZgUF_R33V(=LJltv)mWG@uwpmX0c0{DDvx}j9rh7SFm9VLm0m_?~T zb#Sj-pgMzBE>Io1D;KEqC9HCR>eyYmn$hJ;uNDkZM0HHOTq$oCE3;s~6sugp9=8Wx zX2I6klUA^Y@T3a%lf8g53wEzqM;2`E*RV4SwvJdw7Hog9%N6W&@$}ePR_nvgnygyYzhJ&yvK_S+3A-P<2zO z*6FR#1zOlBGo~|F<&5dPR5@chAXUzo&P$a`;-LLr5{r}tdiOOmi$?y^@{XFuNqX zuKysXr2Q(vkEU~|tKO%%?@Q9L@ilg5(S31VfK zH%*Jx&%Wrt&a{|gCI9~?P4tz^|Hs{XfXh`@ zZT}}Z6In<}fSf=&0Ya5dC?X~FrVv7r5-AZvuV>R?=nz6cKp3j@CWOv=1VltcM7l_q zCM7^pU|#@T&0oe&2Qdb6rn<_qz99^XxLS&&;#;Uc3D+jo;4vJ)2A8 z4ol@Bor_a0o4GN^as3B$Uxl*XS6_v~BPJPX)n|8P4wRA1BPAICZC_Boy%x-K=1j<| zR#yJTSFQZJmyrCkOGdc#BCd=W`Ym)^1hI7E(c}Bq2K2nPff;md!&}GqA2g1K@G;oh zKC@QqbX{oRJG`bjdR$TG@=`8`g(e@j-+ zQ_*-mPwnFMJl~0@vyQ3(8mAro_a3JTcxW6KBkYoc(Re%@j^DSd>=M5V@puwk`w7jT z%qEYgzA<`|=ex0ZxEtroS}Y#q#+Ps`J^IuyD&V1QoLgM&wdi4HrTR13=F@C`?8V{9 zYdS5J4(C33uv+{5&2y4?JV34e;pUk)PDw60OXJTc>UsvAYu0i-!>pS0rBj%gJx^ic z@m#X@_caKZW14t9Pgin^uE)th&d2dMu=ZiSteztics%|KuX*;32X(bC$neGbc}|8C zZ#1mYgQG1kEyCl$SFE&>{VWt754sA^x1g-{-oKf(@z;s{=UIc<(4$?EN$ACOmj{$kC9%JfQJ;%j4?DL3}_IH|# zjmHyF!dumsn==$&8ga(_>Jee4vM&5kZITU zZ7g<5|DnCt=-1fbl>Wm9@RSEmF^`VD%&@y2=g_5b)s5P>=J5mrkXFE?U;HsJK1stL2JanM_ z_iZzrCgGU@-b3$g_=K{ZDYea2K6=;9*X>dAxBYazT#HAwUH?))Z}0xhH@|WzA*RSc=(muoREM(t7LQCT7pkQoNSYQvWlC*K@EG zujgPXho~6`OF7uhFjzXcS8V}#l;&)|MW^@Toq{#2qp|l-`w#A*IA)JYXXhl!Q}&oN z=YYl|%BoW{vb~`J;cDT4Q<5n@I= zscXjxy!;i(>#C4lW1oi3a8s)8OG(T@ZMya=nx{+gb{^DNq|slOstj&y*yul>#=;wW zH*_)eR}OxYV84qQzH+pi8IH~wzH)S%8DeyMSog?w2ldZd27}loF^W8F;jb7$rXE?3 zxnody*djd!lo!+sQ6H?w+$spx*y!y3L+cdsY8ii~UrKYePu1>jegY}E)x)BcRu8Mk zz%8%!<$(*_=9uifF<8jJ9o4T|hM|}*2RH`xK7L5!hI9H4UhT_2(wVL2@F=g=V^E9P zzCE<@?Q{EoXE6#qwTzrHiAqlG=e3Tn;0_wr*x}s%Yc4_=q?SPd-g-l@W_;_-H*dW4 z+BcfF&so~EL-t~xp2Otq``b0=_2>1UcWJ&kQprcx0kyn`Dctjwd7F)B>~)@gH~w@) z9 z3Kd;?yh@J&a#DH>kYjZZkgvw8P+g_Rt58m*Wtg25il?*;vtz9>Ut{$P`Y+V`xAQeF zxIov+uRee9m%)0E(PmP53~FQb7$3&!G4O)bV`LhOdLAvqpjg!IC_|E?<8KFbI$B0? zn2nkoEu*1WJ;qG2c3Gft!vXz=)X`MEXgxcCM~REp0aV7}sA$1iudRB2r~7XgWht8H zhDfA{MEl2O6rMb)MYO+EM%0;$Di92Nj_4lu#H5x(%g`>?2O}FxU)aBY?*$fY3_q~{ z21_xdMva4(PZP6I!=T5I8t=}v7HZsmVgI>$?-Hz2gCH*+&CA}H>q}=XFu!!xf^K?_ z!gFlwF$mA04AICTMqfG7B`!>9AAAEuyi7!hG73%bS^DhGTcDMgd zztAtdu=`p%U$dCCbx!Wl{)#!d^V-KBo3F{O);;EA{kXN7k=uE5h#Zd_sar-{vG!V| zvC$#@7i%naN&i~C$1pUD)?*l&_3tqZjn!iqniuwA=;kOiuhnA|n#37Kq3gYBcs+)p zc`|t@MYs-)}7PqOkjLBkg`>CvY_b$cbw$hf_SPJeV zZ5_I0Hf|dIssUl9^%xMw>M}efCNJliIsZ{jC4A+4}6f-`;z+HNF_sF|2Xh%pDJO zo%HRFAN6kZo_WyHjn#MP=+k&;)PUIm*Y$sn=(xIHSJ%8h=~!i!u6@qy*n5ty zkFM?L?A6%sCj&=zU36W?s_oy}VV(VU9pBmY#f=^7_G-+1b;nALM^_s#YopK1gO=!e z>E@0FI=W`LzvH#RU9-H_asDig@rw)`(s=iXUi}-_?9*%3#`3dw%+px?&i->XZdj}1 zTaCs${padhXL`q3vowBl-@p|czdohoTU|?h-ZAmpjWw?7-_e-*MX$NLKAUO4_PrYu zzCB>`#+Y0C59n&2Wx!3}YCKzY^lfavORvql7MXLvaW?ahciq2phrPz{v`piuANCs9 z_|XOf26YV|JmA>b8*5zKYf#q{iwwAEmaZd44Vb-G*9FTDxUjuzv+oYrb}7Fdbh*x& zZXoTf!R136>~vijpN39hXGzfqlYf=&Zq~LK~d@fLKu2*L5?mpW->v zgL8#8xQXk^;F$1Bf14_&jpw{Ia0jxO|S9E}`qJAA|kh2H$mE8GJANlE;nJ)6;_= zhBkQUK`dNlhaRNQ{}CQEKTgE;^x#pU4Zi8RGRTeDt!qg9PI~aY&<3|WI68z|yUzaD z{}|h(3CD#tc(3cqAa{JXc1V1GdhmhJ2Io5@I)o!#H&>8&!Sw2gg(EO{itEbYY2lYm z%01<0qzBIoZSWk|l|gPaZ(UI0^U{MCgf_9>c9{p2!OLSp>F^50SEdKA4sGxT*OkE= z!!LQq#DhF&1~Tvj&$8ZEy$I zl|gC?w5}oX`1IgTp$+cgx-z(D_+>%&QoMIP&Ar8aLmQmpx-v+`g4Pa+uTKx&7~0?$ zt}BCWhtHTt+$%lUuEz1-5EFeuW$+}|%})jKr1aqA&;~~wK_|L?MWk{<>w*%`pB@|; z+Tc;HtGXd5tk9ZBd`x=qxX=bqbzK?c0)^H*;?vTDXM{F*f$PfP&%)Ox%D=xD7p4g> z4sCF7en*5udK@o^ho%RIhc@_vu8?5Mz!zONwxfGuFu3*c@gi^=*UiqiRXi>|xLs(2SDp}g zka`xayM_4b^x!q2O{}+#Ix!L<6)##7iC0Jut`yqfJ+3Q*l*DMwBfd91cwcCPVA@+X4Njk&$A5{o4`M<|B>pfx_;F~1-#aDN5U%37 zxrSU-v|4&_bZCPwyRHmUl4OSCKgMfrcGlq3&<3Zut_)JRq;=mDzmpz(FSNnGx~>d< z5`I}hs-1jVPxDjpv(V-|HP*1V*zUTyhSWsqlOCKYw852KR|dI$s&zq$S4$6$R`cUO zVmqHu8Qk7=vqRz?(u3ne8=UA`e>X&~&1&tCcv5-AcrBrw0dyHaOIE zWsnjyt$D=5)2ky!L||||*Ofu))U+lNZ;&3`D73-dT~`JvX49HSyk~lF@6aaJ+m7;} zGDyLj)(hhv8zV4yk8Ax&6)E}Cx`xE}rU&l}ZSWb_l|iZkwdN5& zmmYjRw88hz$m7368&_+#CK69i4}KWh;ODL@gA^BP%_IIIJ=p7~KHcCft}BBSAe!O$ zk1?B@oi*4uw84R{D}$6NYVDACaC&fPXoHKot_&^~e%Te2Hd?%%=HlX#p$)F#x-z(C z_$870M{B1C*9~p(1lN^8$|AKcDDlMf;3PFa{v*!z36;TfTz8fZsikyYdhmkK25)e! zpW)(-;g>w>E!~_Ryfw7J-?-NCA8}7iD2Wthx;H&|Uuc8Rx~>d97kfYzmgD-|Q z_@-+O-G~%(iY=4h|1qYe3Ev5A@FUli!H>f)9Z~`6ll0)Hp$*P=CY@9U=Xc#%@+c8C z5|8iyh=pPXgG;-v3@#IXNhDr2Jvb_~!8Kg#JtM9ee#xWO)Y|F6bwgVn@dFPkgB!<$ zl1M?SG3mjvp$#79x-xip_$BWM#r5>yQK1c9<67f{XX^7$O{>;-De;u_;Ps&mKI2*k z8j-43t$D=Hr3ar6ZSZy1`tvJJ4L=uD`=3%-Z>9;Sg*Nz+YwdgS*l_vc z*0uhOic`WbiMlN&gWq*s8Kml(7F63m|6zPD%o;R|YA~*1Cqo>!k-b2yJjv*OkGs;g|l1 zH*4hgzs(eE5i=P4k?YFfcHx&q;_cIeJBBuRsB4{A5DyE#2CsCjA0*;c;g=4HuTBqM6WZWSt}Ck}ZjK2h@fO9mrU$!18~l~) z%HUn$m%LvqzB@g5PiTV=xULL77(RLN_ZQ=#G~pwm4Zh;KGDx+%)_qU>T6%D5XoIt# z&AgStzOI{Fl=^scxTn+6h`C}0gWq+ncd58?_+ z2_=!ze($6Q-wSPUz&Wu=;oPp9o0Q^z1Ji?pLmOPfwZ52$Ylh$5U%ic6g4RwGt{d9m z4_xbuiMVn2-HB}!5gd~q92?r;IM+HSEK*po^*uwpU3%M5U~q>B4DRAuf1Si#!!I2Y z@0K3iBecOuu62r5JURT5M?5(_cxq^akJmk@>~WF$g{@0U{6u>2sn7;{og2Ht>AJZq zdMj>E5B3Rd@H?(6gH%G~`+r$dj3s=A&Kg`Qw84#CR|YAV*qTQ?COtSdw82AMR|cu7 z*qW!f-ga1;@QBa`FL15#dhuuBmjxxhFgl|MqtU zBhHIW3g>g(+%m-Trw2!dHn^7S${=+gTi1|yo%G;(p$+bhuImVepg3e}BJsZI!Tm!U zJl(a97a|oTTl0v2njSnWw81-FR|Y9FNnZZ`Q2~A#cclsM4sGxy*OkGS!!MhZ_%G?f zS3?_|<$OBP&ux*4m8}a(JlpyC{ZFE;Z_HqD3D=duCBrWrQs{E&^x(3g4Sv_P4&CC) z;g>va-diO-xSH#Fry*l^EUN=3serSU~bzK=eGyEESH2v-`H^h(Sboh8^ zd%P|&=z`cxaIouU=iE*>G(9*xw88aVR|dJouyykiZ8M?rUtxtGn@Vn()!k2H$gC8RYiImPC)I zrw2a_ZE(<~v7nG!BwO={hom>;Qhol1MPP6h*Ofu4lC~xiua+Jh9opb{*OfsEm$v2+ z@01>#5Zd4wbq^{#L!`E8Ya;QP>A^;5gTHoN8N56EvI{AOdQW=r-p~f$bFD2ZQXX}N z<3Gl9pP{n`KMZYf&}A%KWsoAOtqV##Bt1ARw82$eYm17MT5Zi!TyI+~O*lHV!EIb? zoL1a6{IZ6`&oDt!!LQn&!-1pyeyCZFDh8~@>oN-p6lkvka+#{;D(_M zp6*(QWATjeONUg2Ju^Mn2yO6$E7Tvye*`sRTQ?2y#Pr~#&<20)TKitSJN(iiHD&Kf z58fNv;KQyfgO7yYJpNO7_OUeKA}IF4KCqYe>cP>!!LOh!d*H&xU6d({}JEw zpfb3M>*l_vTJCD;!O@`&KH|DE_-Od0L*mEMgO7(c__}Lt(YnOcm{1bmQ2b_ka9U`C zAGy|ml=yM@C6BVapQHyr4Q+6ptK!WK*L58$IF!Fo)a_kAO}Jrb+psZa{{bu4cl59_ zI6fwoJ}Kq9Q+jYhXoLH>t_MKdT?@RgI~DT z^*18*gR^cgy9@Zit}=es7B9nSB%xu6Ru9+@6o zD73*Y*Oftv8MiLzFRsyH@wPPK9ia_A@47Nb!Q<9M;uq6{FNZexhU?1Uo8gz8Ly_cZ z>A`pE5!gH8UtQ}9z4%G^C6P+XpQZ;t3vIA=ZEP9X$8~edP;Ggp^x({)4KAzZ!(xc# zVnXSVcvO0Dh0q3faIK5PL<%;yZW-e7>A{^s8@$VPWsr)_%G37Ge;D_KS%de6HuzW9 z+A`uN;g`I>DgHD)_*rO!A54iY13z@#+%g|2{&-6KS*(4m;FFlaVApk#2&pRFx`xEJ zr3dc_ZSY>#x{6h#@^ot+@qOvR`_T-GAs+V$`gtr;p1L)W_=)u3Q=tv^x}JG;LjZK$ zTti|#*~woE_6co}TGiyOg;+f%lub%JIz6~%XoDNMt_*%Z{95DK0|qQmuW|}JAg6Ti zT;c=Mg9nE;c%^HN?1@)}UzUXU>h$0>p$$IbT7Qy6mFbxANJ8C?$9#s)8hkvo!4F(l z20skHboi0tkJE#ngf_U;4YAGO(yp7^dYK#aPFgliI4ZQk?Of}U6Ol6Btvi=^hxFk1 z&<6K(T^XdZNNXPP-s!=8>k-(#;(o3xgZqbH){uH6ReJEi&;}23T^T$${E|l%@k7&t zhle(Jf|?&m5R?{gT~gwS>A^{%4W8jzzY0XkkGJL#pP3$Pgf@7MYn@mVsiva5=8*(r zN|-fxeQ1L>xYk)*@y77W8s4P%=JepLp$-1hwf^FYcZOf`sC|AH`=6!1OTpbSgTdds zt_gYj4DldU}%G9xz=qWVk7*rNvRNjPI~aX&<5{yt%JHq&G^;@CBDx+ z4X`8bj~NVp=(;laQTU}p;*ZmVpM*BJ)lGC#8Qj`+^FTwqO?q%#Xd73TxXT0mffaup z6H14~cc%yM32pE}*BZAF9}2(ZQR4oQ^x$Km4Zh)8Uv{{OE*429=<@HNO!A%k;994T#0SGK zdBhK;2OkM-aEbb@v7}3gOSZ)5FZJ@^YsFgQh}JDb{8W1Inb79ED;Bi3*zUTypgc{YPk8kjVx|ZTe#f;=0g8)xVhv>kkRz1DW52fA`cJSrxX4tZ3?G3mkMLK{5U zb!Cv}SF~;!cIh^`Tj99S2G4b^D}KcD*#E7GywEB6V(=%S4R*QKn25;3Fk7;NIbv z4vF_k5AGM*;N`9>gI9!K@`$e-na6*LwyR?XgHO2DK}UQt{E|rgRC@54&;|!D7;6ZJ zxbCdMrPA+y{}3>gCB-A*l(d&TR4a7<{OWA&h%ja&;~bktrZmOV`D<; zka)B7;1;0`?%`Uui;8=OU-F3eN)PT6+Ti=HD}&R+@6M~c@j;sKqtFJ|Svb}ZuJ5|J zhQu4B2R90B@aL{8gHyuq?$G1w(z|Y9eg1EVz~HWnMu%`W*PS(Zd-~mPAmTf6I=nNq z!C4oJ*MPIRZZ0(O?CHUN^$4t=xVURwBr7fvepzbbCDVgThc@`IYklJt9|^w(UrE1v zp^0D3>F{+mzW*Cyrtid3Lv!6+YT}vGgR_J-xZ~oH2gkeatieg?cXv*Fa!!Y*gsvN6 ziU+!#SiCMKlr<;5K0SD2XoDXv5uL-2TzA%>Eg61y=fpF+*I9$Jgtl3h)c#+7shAnA z;JUL0H%!0#MTj@b>F@`k4KA{DyarsofH2fr^B{obN?fLtHz&Rc(3cu8hj@G?iV3`HmAcs zhc>wOsCW&yj_b}E+&ca4*C5^|rq^qTaS<5&{tEFT@CU9tYjDT(yI+KOd`^cug*JG> zit!roXRbSI@TT;;U*o0~wf}F<8Q`s<4PLlXya>F=b#r$RUz{GiG_=9jUF+njI5qt8 zW+r|kJ@{5V0((nb)YyEylyjps2bZCQ*yVhwB@lWBG4vC*g4?Y#z;6dMu6@&-7ZW;f@I3&y(JS?=q z`&?HBe;A|bejQ=8@^a+*0r(8EXBz`(Q_-tr{eO8MFh2L`B%p;yD zJveh{gG;&A_%CAVm{69Kc$xIza-j|G?pileihG1#@`(3L5AGe>;9IVBRj)WLeDY%a z0psm7;k%&?Znb)>A>7(^a}9~NNe_+-ZSWG;suCn#8h%+&;>+CA_dmoHF@wS9UF!_8 z_(J$4k@&^*;LD*6ZaX>_6mI9bxuC?`rw4ZoZ9CQ_F7rTd8u9X&P&y>OB0YFjXoHWq z)~Ph{(eO(i@nh-1$3q+Z)OBUB{`Z(r5{W-c4}Kon;KFOf8p1_fH`kDO(e&VVLL1!B zb!Bj)@Von~yYc-r;l`m2?&VrPJjA`j?@si1pY-5D?Ql0mi9m2fZG+!=M!{8q&UCp=DVACf%M>lp$%^2TIbfq?}uL&l=uhf z!A(LNJQU6Ef5c%ip(GL?o*t}+Hh8&f{j3(R2*2bJUzr}fI<&z*xz@=^@rm%Y{qrBj zlWD@ILmQlPZMKpMFNt%xZf+Uk{^`L1p$-1jwJtvv8{wA)B|dxY{QWP{c5cjIaJO}$ zL%65wW{1Rkr3d#3ZSV`%+V^l>UZa^u+@2on<67gth&MgZ-M8XfuA7O()6#?Qgf=+q zdac(Q8^tBRAuFC7w}k{JtmY6H&eWMdT`6o1`lvu89Xrj zl1F?{dhn3Y2Cs3geJ@@ce#xt2Oi2@7AKKtF*D5O`z8!u^Bz`A7_+Ds(OKuoj1}^2g zxn+o#PEV}2EgONsAGy|jjpBCUmkx=yPY>=G+Te+j&Sl2oQCmt7m>5%yN z^x%o14L;>s1y&JH$Apqd{7icAxzGj|{Xr}!T+DTIL5aVU9$X@{!OFG1L5T;1ukD|I zelZSA6CNDe;ICclf_m}p@XLY{|0X^7+t3DQ**F#y&g#0kpv1GO`S(9W-wuvu?UpgfIOM39t&<3~JG&+Rax^8Y6;&JKK z5!*#z@Fv%l!CS*G9TNXndhi#a4bCz)-)!RSuA3ba_e~GZ5!%Fh+mAh{3{Hp%r9FL}hbrw4x-+TiD|Rh&os$JqG(UlRWz^9!G$vj%%@##(h6+}O2l zF%>rnzvK~*Ne_+aqU z&CVL!J+wjlVRQ&*aox-#o;5uvTZCW9O}Bcq{PG0gY$+q zxV7ub;5Olx4vDu-5B?~$!OLB10ApKy{;!A$C6V~b^x)N@4Zi7GKSss3!Y_Hm)6#?Q zgf`fBT&y7M=em0Zwf`~ZNE6N#+TizG>w*+@;DzCrJmQPegO`Lh_^xX`4?%n{{CY{m zct6Y<{2;W!@!Q9ifjhfyZW-bU>A_t?8+_cgPE?9dhF|(4ero$VFWgysO2IQRgTWu{ z5FNrXuA3baZ<-$5EVRKJ_KZAuqw8iK@lEN$ThN^UL+rM9B*NWYHxr5XNDuB6+TdHR z^@Bv57JgYn;+>ds%eroM_|e_^ldHxqgr9^q_z%}Qvm$;Ge%UfS z^0t?n7uZC!d!X|G;(V@k9zdKw{F2CHaYv>H7Yc1~9oMP?CaxQP$y-nH`su+9L)(UR ziQPP?4DKEiO5z@h_e>A&9opalt~DMg9vFVfJ4o@t>A^!o8$8K%Ww1UeCX~dJ6;DnN zo*LTVS*~>}j@SslA~kh8~h9VpLh3P#8+ZMNqklDYw5wMp$&fSTEAk&e}rH1h`&e= z_PWPEAqM-ot_;qhHpBV9Ic3b{Gj!HqM`(jXTvrB%hF>}yrg(UIa71W>OS!HLE**Z! zTjrkHf^EyD2}gxCxQ%NS*bujETzs7Fdf)E1v9aLxuA7Gf;vLe1<3k%9e{bZ$AG>bm z5$}{9oDkaJWY?9!Q||5YT}4LQsXjwz4W1U-V3%tRD~mkzxAi;}@onkBJ336Z9 z&|Ehc)PA?IF5yTM&Jx<-(ysO8NaP{HtsN3Cn;sk$+D0|roTTyz*LbM210s(XZcQbg zk{-N1w876@R|fx2_+`fuf1V!vBDBFF_r*HGq4)LJsKaCq_Zd2Ca71W>ySlCn?iPOO zka+j>;GUrkKIK}24C2$_m%OL%(*fX_G~sih4bJxaSW?)}b#reJ&ygOSE40B?U8`oP zI6C~&;Tnq9Ob@PIkHFRzf8bj6H$ zgQu(c7eK_BF`;yLmf}Ww@SM;FuXbG-{CW5#kNBGO;FQn??{Te5?8V=PukD}zFzyYr z2JZ`PaL)TNwOCFEXelI;Z9nBX&#NT{^&O(Zxx^AxF-xYtB9{fDC z!6p9?TLv!Ux|v73Y5moflpdTA+TcE}RW?Q3H~f;fpW^+~ zgH>pQ7rCwsUK&1m@dfZQ8JDLCuMBOl%e4-s;xEE49TMM`9=s#8!N*)z2LBj-$s>N; zJq-XNo`@L?&ig=YQaHcs<|bW0@yPVxLZJA|By8$8jqP6&$=!|(2}?IgvM(wp?KKL3*=F!+LNjiHGzhF=n2Qv7my@RiU8zxzlm zC|t#Lb62dYc(wH4=+Fk&u6v-;e&TvDp>#;RetK}j&;}25T^T$i{E|m}XnOGQ&<0O* ztt}%?RGZ-o;7Kwj`3#*kI61VzBOi}7gvYpUt|9TU>A~Ye8=UM~U!ufQ!Y>P|xZZYZ zn((yH2G4e_lXT)a;g`g76`z+Lydbo}+Mi-UVIS9>H8>>w?!Pz0L;sY=|Dg(o`wX21 z7j#`2Tqyj~Iq|~j!9_zGT-vq1h>6RDU-F2TO%IMjZ>Hlv;(VW=(I)W%*PS(ZOZweQ zO?+!khh3o!&i+KK`Rt9`&Kj^}ePD)gi0jU>EW|_8gTq4`+|aeI5fpzAe#s-=I6XKf zw83p%R|dyD(c_!lk7RD=Gj!JA4xtTh_Dn1{+|qS(L4T-ttMuSDp$&fgY~;bexo+nD z?OE;FPt$~-g*NANk=R>ocil{^DejXVoGG-yAG)p#ZWVsnGFvO&COtT=9)XP$4|AqwQLmPb8wZ;U+>EV|SKT!N( zdhp}W24{IbI)t;jZtg~MC)eba+;p!sHpn8zomLvf(%W+L&R^x%-t1~+hB8Qd`ZvY;C&{(gFJ&oEh@VgV+)=<1=dT{N~2KRTZIznP+_$80HO0W7$U0;$S zFnE<~Jq1v_Cj63kt>P)^!RtdCeAus^Wm4g7Zksk9(*~p!M0ao-@{&NGkmk_Eu-CM=&Zp$p$#tUTGtke z%Y|P$Bp#I>Tp_f}uQ{k7qrxibw9(?W5zDMdT>N&gB!TkUqf-j@JrrCioc&8+}O1)?MEEqfrfy@!(BI*l=z7B;E|yX zUgx?pczyV#!y6Rem>#@2w87=xh%K{RU19|fnjNmFc%}5<%ApO8aa|eQH2l&b@!0g> z=AjL)^=5Pk*LEHK`QKlRb<%|Eg*LdcYhBPLZW4a!ka$dbaBOIU<6UdGQT%cEC69Qg z@ai?hga{0t;aYVA#k0aMiNuZc;5nfU&hu8RAspzsxkU#l9-JN=8rp`wrO*H39_WsG zafz5vIwW2)J-BpegFkkyYZAo?;g`H!6z`fI+x(_Cu=NIbnB6H4OgiqA+7o*CNU z`L6ZrPrM-flJ_&k7p4a<4sCGuX|ZKsU)P;AxQUv7|L^|Uh%qK-fMY`&+|9MlKZ?7D zUpn7I@t*0yy+a#3+qHh6i|2%2^3I*6&;NO8!V5whyx4VR@RIOLBJri^!OKG%{H<%< zqb}YXe#!ft;``Er_fN~?|NRR7;1hH{P<+63^9}T%;)l|MkAyb(u50}`5#I~HbojpF z>FL1_LmT`A&G8@cx0p~8i9bybeiqu`ptoax!ojYa3pzyc(DdN&&<5vqT^Sq^zP5k< zn@`64X~L1A4X)+7GPrj5WkHG8Ne`|U+Tg~nb?gu~3BTkKk9j+f{}OFuV+Mo2cCCxq z#k<3=Ip2vj?_TKMird}O7Z$NkXoE|;)*y?xT==DP;!*DD`#)lZn8Dx=TA~|t8@$A|ZtE5=4Zq}Frug#oE`L{_ z|0^Rf_>pUsrWZdBza;)u@h9oQPeU7A_`TSqa1qzdExM@U#nOX|hc-B&?m=Y}#9d-S z>5zEW^x*EH4esGuqx0gP;g`I<6z`oL+&8qr{amYju(-e44B!7dWmG;xXAK@0+Tazg zRU1ycGW^ovRf?}p4_*`6;A^fcgRh5Q@)XzGrltws3~lgz*SZ!+oF0Bj{6O)C>A{af z8(ic4*cEV1*UeqAmg2S3gX_MZ$NzN|O!Nt=BPyQcx|v8kDLptjw82MQ>w9J+tcU-r8 z|HoK7O}J!egIl>)AwqHM@JokWZMB>lCtcw3p$&Grt_)V;m%N87ZMiCs{}OGFsqs?` z{?T=1@bU0V;-3^hksf?1w87aAh&6jBILcr%k8yxU$)?7n3;@qxd1^w^;JTeBR2?vKZxVh`f;1=PR4q1RZ zav|WIp$(2bFm?sp!gX_t5^ot^y@uE-0)yjR>t;mpN8y(aiMLA+?hxAGF0NGyR@^oG zlDC`U-P416hPFKq)aSp`1HDVdDkhY~TNK}#9_$Kj@LkvX-Y32ne#v`Z@$~fIhoKD~ zdQfZ`ctqWU=B7D9akmGLis=U5bgc{9#ka#R9d3QFPAsVL?uO$+8@$)GYR-wj55MHq zG44+jJ`mdAe22u6!jZ0<3%b`~`Xi%8hj8D}2B)}Ir7rQh@Joj$9j+s(8hK*9ZE^$# zM;s9y!ueb`JN${_)6#=ygf@7AYdvRA{8{*=L*fh5gBOQ3IJoY||H=l7L*j2iNqp%@ z4V|g6r0|u{1}7dB3kpwi-CWQ&PS&ncBM(jsZE&8+kp~B&xwWJF2=#Lr*Z2&bH8>@- z!Rf9w<|BR(e#u+)6b-GZ(IFfi+ThEsD}%3wU-I}k*SE~iG~6n*!AY+5G)VE3@Jr&V zr>a9W?@$~a+TeDsbyI`5efTBsB*l}`gOg8<&bBIW>0=JT0`ri(Ts%w0KGQWd(^ZRrBwEh|6OJgV(y&Q=`Qx;g`hg z6knenyfL)FU%1xYmf~&Um%Q5*-;o}?Gj!b$_j#bPUh(%ap(GODpB{W5w81A_tD=th zWcVeI_^I^ZGocN>;#%LJzFqIr_G(NhiNvp^2d9QM_=#)%WEcMye#s;LG(GrPXmidI ze|~$5?XL69&Hk^+=#wU#DYU`aUF!+JV&Cvfhy4`Kksh2Yw825Hb=FKA9Dd0gqIhU} zb;R%p3@+ljGPr2?C6Rcs^x)#54esn(PYxC*gkSP@QM_w}aO;3J{` z<-?!X;@P=ttFeY~-O&H?$-ykZCAkprvd{(}aINPIh!2L}Tu{Xir3dSeL}2h;*ZM{y zz88K;d|&bO^x%h~4Q?`Pyu0BT*UdvW@uum)%|aXe;jG&Kd@Ge`+bSlM4!2gkO?q%# zXoLH?)~{G`|L{v5ac6q)fY1gnaINnN;?G>S+}ewAp_`pGcyVZhzjmzwDe>;`ONYNv zd{27t-p~dYo-MWvT*P%}4X&Pk_pPOFjLsS0nxPGz=~|x<@vQJm=ifVDmy)UR{(-B7 z{&O59_!D8Z5Q8pYp>zNe|H%Vk>$U%lC&K>w4}{g{|KdwxN#P}~o9|xYOVfiq z309l>Up*1_-+v%%Jzu>0JK+0@r>6%$4E;5q2&->Gm&Ss^fA&DwI&Y{(zNz3jp$)$2 zT0c0%x56)PJmP8T!FNI%{K&ON(Zr9#FL}g&O;4=1{Vf86!)K3=3!K+=b5{_LNDs~* z+Ta?l^>B7^&G1WyYbjnkJ-BXYgJWjb-+$hvV-#!}6H4Nv*K1HhjgJ<5JoJC|Ib*Hg z|ChNzL#%3a2uFqfm(Lmd((}SH@85Y`SiQ;);enY5|Jn1xzUfoAzT)9l{%E&<`EV%Pu57B0YFyXoDBJ*7twJMKPfye$xjWeeK8pbbtTPC!P4d z|G)X56F>eppLFuCA9TW&x;VEMyfn1ICtd5(3-PJ&%NBiF@iXbc=R(&F@tOx3Bo<$f z2_=zuYI^X^&<5N4#>W@dTsMyw#C_6(Gle#|oa@S#>#NWIsF+YXTwd`C>A{sk8$8@~ zW$=jbOCE7OJ$O`TgV(s${Zrz#;YS|(A7e_I@cPgOSML{V2uHhauHhPr*Gvzt9opcl zt}BDDgjzjBDNUD=r&;>2Nv4qtb&bgf_UVYuzCx z?ly-X|5d(U!Ld1^`%f|Paqe~2;0d7(Ug272L&Ph?FP&ed`0DiFHK7fzHfO9XTpitd z{KpvWGj!JAnxPHu=~~Z=6!!|hbjaquJ~uhMF|@&VUF$2o_+I!WkJqX1oi7IW4Q=o^ z*OkHJ!!L=%C!_}_hBo-2YdsD|{3!gA_r4ZjdM*U~aC(maNVGlq0e|^)@DQJJtvl|; z>FIax7UBc1e`}9C_^Ip8 z8thjKKX+%{jXB)xtiicL8{D-|%nWyPt&ggBdive(3F0$yIy^J9!L4VC*MQr&)(E+H zjBEY@n!K1@3c`xX7Ud-2mFRStQ-w-QWY$mv} z>*jv`p5j%~gR6x$c#7-F;A!EP4o_EnMtbnf&<4l($*HPth#$q7s**^&U3zeb&<1yO zttYvQZ_PW-$0`*BWdP?+(8t{zmaV>A`zL8+^~T9uXwI zAAZRro}M23FtpVXbM}vY59e~--1q$zcccgB4sGyh*SaN9d?x(T;j@aLOAkID+Tg3M z_2s0${{Fuf6H4Oiil?Rr-wbW=Z?1L!tN3a7C9mx_-Q_wuYrUkY(!rY>&gc58sp z|HsR9sI%R&L-@`*QwS~KP#6MHex}_COup6IqAXkLjS9B9bczf z$Bd8m{)IZYEjxsi>0lp1%5?Dk0RHoG9U6YkJowM6b=38{K4z}Lf45x6-}UDEEZ>0e z^Uwx|bi}6#4t3r9G!0WcJUuv~9)XPzw{@*s2hUUU<3Hj_pP;W_;#02m^-Fv={qD|*-^=N6dT4|F2E>}fIb1i_d``u4 zr3X7g*A20W2bIAwF`))`Nx!>u;$3q(+xlU%D{jW{X%vgRi%o}3;$HME^NK;Qqb z^FY^di`U15l6ZsS8`Fa~hc@^}*SbhWd_4S;_b0_qqz9i0ZSb$ID}$fZV?s&%o8nK? zgP(;qxZvEedEp|io16FR+|A4QQuh|E|EtmueB{2W^22|BN%hydqPqTXUsAoO)_Ad8 zYq)r5gJWE47*E_Z{IZ6`W7C71hc?(bcaHycDyU*YNjyODf$716LmNEXwXSLw&k4We zovZk~^xy@d4gTJ>3h9Xtpj&_c?e~YTT^PZ4dT18OBJHsy>{z~y(>A|~08+^>QzW*cs7!yh&@#E>iCqf$> zH88deT+wxNL5WvN53U^A;7+bpS619Pd|m64A4H4^X~JDY8$8jq?#34&l-{{QC1p8n^xo@V?1Yq6*0w0B13 z9)c@`Hn@drm97`J48QEf0TlcB=9Pl{`)cj$6bkyG7GSGf2)Iq-`Hu$7Qa{8k-H|39 znv=W#X#YoR3+e0iSCkf-@q77UT7biIAz(eU!JoNSolo(?@XN-$Nb$w#!AnCMtPP3J zAnfD1`4Rlq5PdFZN)yf;+F(D|s!k`)5q{}#PQ`Pj2RlL=T+X!y{l!t?m%QZ_uaF*G zsUCr?B>vE~u2K-U3cn<7t$3UC;JDBR4|A7<~xxA4`5jE#-W*ap9M|Z+frZ@p_#T*#CS@Jwd_5cwvJ!G~P6D zX4lO(%{RRn=qsz7jMc~DUzIuer#E*0C4Q~8-q+pO=aT^o)St*zfKT^W1>$GYgU^LF z__}L7Gew*le%aP8@QQflU(UVOzI5!s@8rtA6*OkHH;g>D*KPZ-^T3PC!eer+0 zSk}B+i4m*_ziJWl$66U&z;$JCWcX!mqsmq+^naqrR{a}Q+0q;K>lE2qP%E)et_WNt zw2Ae$MLnntE*2BY+7f>!J-9?@gQHwm2A2=NQi?cwK7Ib#|J_IH zHDs>oGj!JA+Mx|z>sr@(i&Mg{!QZCe{Tjsg=5%;pXoIWHAIAo`8oG5WD!wy4cvonH%P$Ze!WCRMSC+a?b?P~>1-?#Qr+-x{i-Xu# zRm%E`;ze;))4!@-#2u~QA{6U8{FKrZn+b;2)}elyk&ZDtI!6Icdc@?BlY<|Atsc>6BSQP4^9eg z@I2SLkz71K{E|m}L3;4Q&<3w^t!hc))!|1TqZ&V#aZQ?VN@#;Ox~>e~6n^QD_~!KB zt)UIR;#&7@h_8lU@`ztcua1}+fx-7(>tmxt_V7#Mm&zkP=ZEpHT^+GbSwy~o!hcpC@qekj8pnU#v!maDef@V}a~~4_ z@0V9=xvSy-NqM!XYNjFrT3gDhu`A&JMtQZT^}0Q)q;dTJkCsW}yF~Xlp?{-FnjToD z!eBkir15UQBj54x&d>(mb*=04#OdLe4nI)*VS4c6&<6W2oW~2X!!-+}yrg(UIa71W>^SRcg6yp5hm%IfOkHq8qA7Y`H!Qkeu^;b>YBK(p_ zyk&ZDtI!4ya;@hNi3f*Y@(xjaXnOGQ&{jwM+ygyOM7$;@l*DTlPe~76AKKu(u0qOHrTdE>%!A{qz2_aVDmktk5d|-O;;LrvS zajmNw5r@Wvl6aWn!_$Mgl?)!~zKX|+N4ah;=+TOgNe>+Thx*D}(EVU-F38O%JXg+Tg~nRqbps z9sf6p2_^AoDiU$f(Yo+k?IN}Ae~0`;m5)!;Es|<0sdfLmcRtup>@6;Ysdqu7L-|+9KQu*S#BwlTj zTKB(o-hHBmac9foPX;mOn zTUD+5-@s*5twL>@+UIKB|K?a$g=N(4Q+r0O`(N+nls`%Z=hU`V>;89)bbXx_RB=vi zN44&Mw`;;8A6N+;Sh?H)BMBX<8A|F$-<+C6HVbL###t9BXH zkknMwNrJ|anD%tG-j$NnHqZ8uNGT+$98uYbszv?O#;8$1h}uBZ1ESOpjnX+ZD&f$m zbVGF;3fCNi_JZ2%hen%A?60;~wh7`cYFDaV zrS_e}qU|Ws_Ee+j3ikE+7#am&Xw-M1y{P&v)OMk63yqH> zZJXoubON=jPKdVriK=F$_Sc zsGdTb_5Y*oU7)m_`uOiX(=_Lqrj!oI-HB8(C5ld?15s*-M5$YaBpOLYbWaKCA){iV zWQc??5rxz^=ag}XobQBk9z^jtyr1uN?LF5v>wVVyU+cf#d#zv7XYYOOYwvyS^WnFb zgwi6xe_9|Nkxoc|WB@YX%5D6;9a)P!iad|JfP92V^~yI^e&z3PNSj;IOk1R@mHzx4 zfDA*5k*ko|$Qmn&5BZN|7qT1q75NRxyOqp`9E?a;OJ^&6`CEjXfs8~hKqet`kh#b* zWI6H>B2_ILt-Qfs$p==x1pKz{z`^h8OvYEl~%6fue4pPw(=N%*CCsc zDntq5240&POI9i;*Qu`Tm>vPZjbl@*UFjHna~R{gDC4Fr*k6W90(= zN^Y?7E`KGdw})~#eN68tmJN(p}@i>++puVjan+~s5%4`|I!SPnA`74nUfdi3~tmurtL`U=`Z&=X@`h@;DU}Y$M_$!%UWeI;J&mzwuHC7I| z2lq%HE2H@<`Pj;!dueQt#mEw5{;E)(6{2ss@Yfs98cAeSIhkqRr%@OKl^;C}J~ay_yDF%R(l%>y(D zR@yvB@j*6N`INtsuaR$%y~sYK{+cwCj&!p!j=z%UtnB6QKIE5&ICh6@csP`o_$ztW zN^0T}G7VB>&0mR**h_vv_8?s$20dpZ;yFqh2QNC1${NEI^jnNY6b z@3ly$O`+V!-_^)_R_bl0aY7D9IwO}o%ZrdX$Xw(`D;xN`A;CW%As-`qtmt}OozZE7 z=*W$3ztxSmIvz6_nSsnibb93mM2Asy0Odhs4YD55`HJk zp?`F9X(QwyM3;~1V$rV1Xe+u5RHDm0CEC9!(RNIU?$(s(YD~#oE4uGeqWdc)+)rtA zC8e&HlyH4yBDh0R*FQ>hy`!#l)NPH$h_>8IbeWiiR zFmw%^M7t$)vzu;dljs&UUA(5vY7$+Nri;;Z=b7#~>-{Db8KS*q5*K}y7Ni*IZ5h$ zMCL?v-ICT261qM~S0>$sXkGUqE4r;nHx%izA&D*%(gi|VG?wVDAKmYxyL+_Es;hS- zx>`rq>F8!0iEg@)Xzf>`i)nNjjV_i!62ZkWx-3Q)!OTT;uZtENbWe-!X3;u;q$$!2 z(X}X=sy`0thv=3P$%BY49(mKs`~206x9 z7dx%!h6>$Ep$jG?x-deb`yV8_-$8de=za!?u3M1kIt5*!pxY26y6r$W9O&`_U09&Y z2PC>nU|@oObUA=T8x|$n4=9mtejOf>YJG`R=Sy9_G~Y|4*QjM$i=97GMxpb+ z8ggr-?T?}p8b(jRawT#PBGtHchto1^n$4;RG6MPk8eade(Q@5UGK17aFhX^s(z=6C zH~4geMmI)uV?zZ-dL7*u(2f1vkj@Rc+(^j{WZb}Hp|l#_jRz9xZMDCL1t7%1I;66yAnK0j&7t2CRJ$?DXRKE9Tz12*TA6exImstla)l8sU$HJ z%Sfb1O3I_8eCU65QtNh3Z6`EQ+u78^(n2JW>KxZebbY}8)g_Z#snC(y9BIIjNTZEJ z3TvdKMha&n(jOy{ei-S5`LclTFC{P1-y+>BQmZ0WDpHdo)hN?JxzuaomS6|a-;F>Rh5jddW<%t~}5b}6D$tdfQttJKL<9W0gT;HVCZ>Kv%f ze(GGO&T{TWbTm`PE`uJd;@4cL`Fa6*4c6G)^=V$76R!8bwhz_mP?X~J0iOz`VT!_wmq$4`Qp<^35 zlA&W5I$@zx6~VcKtzoCr^&ea(Q+7IU;QA9fGY}jHpqW-vo^YK;b(_>>%4Q?HHrGqE zd0rdlwf9}3z3dY0RX-5X)^lw)A7VxO$F*l%`@bdZ?>5@ft?k;{qOI-M678ne4r;di zCjO7R*V-Sfy}$pfm#i(d?U4V~Th=C2?I)FJf2btb|EWEn+OsLqo=k1S)D}x^tJIcB z*V}cyW7msyJsH>g)t*7^2h<)w?eEi;K5f_27CmjhbA3$hpwn(RN!vs_{z0@`O`^?c z+JL6bWD;!_)BZ5+^^$1smPA{#v>i)Ztt8qhCDBeO?SATyXfu;GDrs|)HXhx8XlI4` z{jS@eP{05Gw!8hmy4iY}wrFTuhIUv;w1YysCbT1hT@Z<2hl6%CXvczfDQE+NHXUd~ zfi@AO97ZNW+96uw*K)l?%kL5`uWLzN%c=jTz22zPOaIUB^~w`1uS&FhswGpchH3>= ztD9QUoP}tCQj3pTaMWU=)(@XXv>vFXwz{2InQ3KBt7%#plW5`Vth|5qM%NFGH~lar z^~zJqJB(}E^2l|k8Y3xKjp}21b18`a79d4PJtP%*;g3)*`X{A)*0`nzWp(`{)kspy z?;6+i;Ph?{>Y>Q3{H1YCTX#(>sAnV--wdDU@xV_h_qhnkLgeS<&*}xTrAc{<@l9K1 zbo&)QeyvyDcYM=U*(HFaqGS0aEV~r6VsMA_7@Eza;ZK3oZ!V&Mrz3-=7;_gr=>t%-IC;S^Rg;umV$)U4HwyOCdIFD)?hnv{<_ zuW9Rg>DTX9e%*OZ+oexfwx5}OLHVN?rhlH+*!=KZ`G@*{^~+7n%y-LE&*%SxmhW$> zTa}ps4+@eCuC(V z6XcwbgWQ5*E3!^#kQ4k>HVHX5_^a#@a$fLPSs~=`ud+eN4T8V=+#!d5_02Y4q5zxwbYHxB;BYPm_k^ZE3l{ry zZ3`<^#S{5k-KzYoNljaJO|wzad*)zXW78_dG%z>8{(F{*r<6Z1scDPE%ktwEMo0&! zIOdqWa3$|hMD&hSUas$WAT0Y+qf$vYe)?xJ9M8)z_wZNtugHCa3^UAfd-7PkAj2@F z6xh#&i<)GZXQ(%Df2jFDnef02)24gq;4m^($;D9sy1|95$|qgev}Iy9>8<)E#WXkf zW1h=cf2a-E>+o6dah5-YGpAFx1n%=pjof>jibbc3WvgF~$>hJ^ToiFW|NYhD#&oKT z@g8V_gB*`z@ctej0=M$G6YPFUxf==4o;nfIklv4w6dSq-9m}9P&;@uYDW;^JhlkSX zcQU?;72~2A|BmqhkLeNA{uF?{b@*Ua1Mjin+4{cgsf}2ow1?6^_q~c!S(u6LI3d za&T>WZDtw~Rz$TPo(E4R?J)*y$`F;#}gaa_hd-UgSzy=@FtVO4tk5BxDNRE4Yb5 zSWMMig@JRhEv%|>t`5&n|NK~o>xWf$t$ho)Y;tDML@3j3fh*xNaUq^b)n0H>^a<0b z+G8PWQ)3PTPQD2Sx7!CsQmt2ed>A!p$;HtNeuT?l_kySR_%*Q0bYl)8#mK4QH_kDs zEqUJKg>Y%Wlz#XfdPC38X&*)~;gaZ}!~UHD>)}D(3yL~me_LkIh{=QPu%Tk2O+uQR zSVv=KdhWNuWgbuOM2tN??C>B36Sd!H2L^r;mv=U1H4nIA)cFW{_#VFuS9yG5Au;wc z*;e><&;E=q|IUOv;qCJi(F<}9gDZbbe1e6z$R@uBoJD&Si! zSHVRK@`HVo`b7PXCcyBu*8Vj(p7>9`sk8>OX|7{8|(mP@c#+)_TSt`PTw2y*=OX zCCDRrrY&6Mapz;B_XiK0h=b(BEYp`}S026q$0ld-zmSjYNil+*{d%}$N@RaTFJ1_j z*j!!-*IW|Wx1-LEU7A&!=Wg#!{0lvUMt%5Z9?yXbmPf7EFK}{M#AEv!v(Mvq;kLMU znYO6t-w}8OF7)i%Cg_UzF<1`w@*L#%`*#ekhU3^@V3YJmI0;X+JfT1KcSLpnd$9ZI zlYCu=6Mxq+Xf(h%55HmSI^3fUp9)vdKTtP7{e$Ij6&$zxMIHCQ!PT#3nf2K7i4&&P zKw}21%C{cmnNDyokGsR}rx*-|cdw3;cm%x1<8$h`Pt@T>aPl{o2WbEQl7k1LZ+h`y6nIUJi3eWDlPA~=p4+W!`& z!4T&>{N}CdaF05C8eB6uyS5lT2^T#QrQiW4tE$beO`%e_2!0|pOp$c@*ng$^M-|QI7!+I{ zg?QL0|Mp-bJPi+A01r8piUvO42CxivKP7o(9e%bBf8m(-2Q}Xx&cJePIGJiwHh~KR z_#0g6@$0A2yu!*`ioiXmlLuf|Q=U757{U##{UK-YpUv6E)DPWX0w>7>i6psFd0;CB zRbD1Jd?XGY%MZHM`Xt}Nf5I*W?mzS2FPwB1nQUFYd7Aggefv@T$NrQe$JOC8LRS34 z6qs7a!HsozRUKX{Zjoc&p$DQAcn?k};aDf!+e|oC#pMXf z|E<>GIt(hh$3 zQ}>=k`d4`dTPHDggI$czxbWXE+zIdY?59oscK|XkBBUFmKHkl61-uYrrC95W`H%f6 z#g0$ZF*vghm(<~Tb$F4uD%U(qF;=E(I)#es`CQYxW60;i?xz=C0~dA4GuPWpp4h1e zy5H$mMCU>WNvf`^m#a;xT!K-gMyp5%@sH1)=-qX0x8h zzJ;~_2yPbHC(PFv#Bo5y6nOAAT;lP5mrylF510;cV~>kq_fvq*l>4!HwZrrOz{PN` zjqxXNJf3G~NGSgur}FqYd1kkDFcGd9muL3aB>hBuULH3ehXFj`Qc|oW&rGvb>5Xu~ z%sg|kEk&=wrB~zy(|k(7v}t7GSrHF`-H-XFpZ*z(K@GDAF3D!WZdx=2`lYz^&mi@UCOnLxc~qFNI%b-md^|MXp`~$A4t;%08bpotpB&EHlr#?*Vrs4`FQ@ zk`wyF+SZ@1`cE&o1cO+sEK@%(d_fYpv_GFlbUH-*Z`dZ zYpYIAYd;mvd^GZKA*`kSHrD=OxM(vctQ&>?cfB0@M7E(V3L-E9uAZN5Vu@CvgUuKu z&&@J-SqHmd?WS-ZW?W%{t-r4 z#aHD7RlNdmH=HOK#+IIXVGODQMn^pp{&UMK;0;%W{Rh3U5}t7qr!KAi z^RPBYxB$cw*AnC3GtC0)pgU~xv(4+4XTkU5Ays8i%x;8}@1)my@FZMP6MeED;nE+n z%rg6Y3(~$D9TpWk1*iwC4fM@mMJRD82FZ8BsZtp%fy>rsno-t+_Vf8qRhBu_@;R_} zN4RfT0T*AHZZ5I*Nm!etl_K&lcD-TWV!mk!D**lA)k|wrC}A$dAb&X9tgQ!E!&Otm zKAt?d7uE(<>XpF5RFW$8Sbg&nX{bEW6V|>I@>XEK820Ot^{_5K+F37j|1q3A)1?^o z-(C!KXh}&Ng!n%&dx{%do(R87Cdz~rgC(#wvhe=E{XV$zy-br~x!DcWeCOnwPb`lU z-e5?18udi4%Wds2kdh7TVjf7p0)oC z)&@0~LVa#xoIoyj?oWaJs`z5K?B#TGI?pSB_rl%g1bKk@AH3ayf!UDH|HCBy9{!s= zajJdb54iG~s6P-Zqnv+8`M36iU~K_%0lXS^KU!dO2mCJc3GNd<0ar{{DWd!FB7UnFg=9HS+K#xPXDmLDu~Xu(pS7g_Xj8!zEAA8m5H) zbzKC1oo!Cx{lN<+U=ZJ&XLhBAd_P<^J~NotQvkNWYgsyd%6jlI96K+=T;C;h-)XTi z-}dF&7wcbtSV#Ce+5nsjYY(E!W2<1DFH5*2dkKTmH?rtnh8}(b$9~KT#`6k5^Cc!Y z?AX+L*dMOhlvSH4XTkA>`KA~4`lO5C>aU~LZjE?bda%Hu6v@7Y6c|YRKikImbPO5} zi89f-unsHg8|#5vVeK33X89pl`$}C+_8F|r%K6ql>sBT#%A%U@P+0p_T?$NutL|d{ ze}WD1EEzB}=`z(K*sRMii)@mA4r|A)^Pr%d7?Wq5`(xm0uWBx-V}Bc5m`)cBZt(#I{ARMEvS1uMOU>yM-Y`GjRrq^2!)(h(0Mlmd} zt!hncxR3yn;KB1}!HJ@iIly2aI1dAzdhBQ&TnpDM&oq6leah{u9bXgmdJlq=&8cv# z{Wv)Od6r39egv&;vu^B#nmxq)c@c zTr@f}XpR-bD!BBWOgs-?&|o?4VHd-`aP0E*+P2{|SX=)Nu{1v!pWxknjBd`OW>5ZIz zO<+*PKtf5V7-p_uL&BjPM1mE=*09e19%BPI2rjJ3F;7|h3b?3$miZ5vLMfJZrwNYr zxIEGa)}CY+;Qzoi^TWZd{7?LhK|ycM2iX{>SKxrbWiwu&9#Km;MsuuBpaaDpJB1Hou#;;L9wd!lD2i3qQ#7O+pXNa9F3U8(RBo;P#bK3O@*&XPEZqPa}3~QroSLb`UJF;#iR}O<^i8WV&^GSJt%Lfjh!ImTs!D@Q2bJuk5_icB*nw=e>)5c|IP}^r5@-F z7wyb4+OH^{0c(SLXY0YkvTvAYVg+G}Z4*=1$FSEY`W~*F6@AhMt0|_8t|!{(d%)61 z5sd$pghMbW-aor`;4u@{LDU@kz^$;h`nwd!xF3ttvTJL;VQ?93hqJ#N*7=j>_W3fn zf^vT-tN=bOX0~1XkAf+YS1^b#$q&l89Hc+MH}9Ec`tZ?}0@uM(PC;Ka$Rkg{I$7re z*y2HwcuuytKf|UNoSdC+if}Lg7Q#i#v&F`j0WFd7n&JKYT&&H3aDF zC=u4YG z3sUfqN9Yqi%%z@%pfsipRiJpX8V`to>ZLC{dhcZqKwaT1&3vn)2p6(#BIu&Ky3TWqO$3D(Jb7s0*oaIg*BJ$2fDU+q z6u3FdXiKI7G!(9xlxcd{0AB)Ec%$vx5*Q5W9~LV;@G$ItG5+%mTvZ(gPyyI2d#@g7 zy56~_{PW+Au;0TO4Hwb2oQa*De*jK0EvHN>PE=t~!Z%-TGfn0OhSMBE%CioRhYLs2 zWwQ3Aunw}i6xj>wj^JT7#(kgU1vA5yR7GesEX^G56HbN4Fcn+d{+D4Ol|IhHd*LBo zCfNWN(L-{j;zKb>NJSUKpfz0~scSjh@&&L|M7Rjt1ebh~W!}SH0eVba+vjBbQ-i_# zeWE#?zhJ+Qcl^`;o`}2vE+zmjz-!>CXVHVQFL)X*r7dtt{3Yyn1;cHn$PifSzh+wh#=(W(hs99#^WmyX(`~Oe z$2!%C6nFECus=1`N1(eW5$+I78#be!Vw+Sc^@?F%NuQet+T^>7ZX<6W+t zKMw1tUmI(m|03>L4L`#^UkIC$Y?F}^2KX}g_~o?!t}b7Rf%HZ-v>v0}>h{xZ3isa2(rlK3pRl#!9^U`!V?vKfHAlC&JIW>wOq=mxle;kM)V;7o76;dhw) z7xq{b!sc7>$^KNVj)ddO!i`0GK`~rBC&x6gU9xHLegnhty#jb0T+OW3VjH1%;3_Xq zG<<~!ZOsS*B=`MZ(firEHIbL;1!v-*(_K+re<6I!u&7vG4od@*OY+5V$%v?vx)!cs z{=ikeufx^shRd}6?}n3aM=4bARo-8;Gs*+ky~^S;GZw13lp?F(WNFj`+6))$jh0m2 zhp!(TwH-geF|TcC@R~8BsG0}kpJLn!u4Zppy7hl>0)yARq0`N94+fvEwR;&ZNamO< zo1}lhrL(imVU`bhox$X7k^Am&F=Y4`X1cNV-{rx8Ry) z*}+*Tg}CV(SoF>`pYcb0IXsaR>TBKK4olseyitn14;TCty|Bqv2BS>5sQH!sC9qV8 zbqqOSZj}MsYSJ*!Y;`3ZYo2ZXXcxZldpOBht{L{qBW>O!hTlfte31Cl>|j1X0lXge zr)uwon|Vt-Pr}uVmcy!<_WuJ6mQm5Db(05Q$^lC-`IZ}1lk2DFnN2pyd%#j^cro^h z(GWOU#F5R^@c9)mH{YA{?DOU=>{n#e&aw@KrBQ3To>%=h2ZIW)m^=knGSJAjFWd(E zbGQ4yO#s{H)_#IH@Di^vDu<A>9vbi zv*8i~JlNVl1e=r8Hc>W4-;Dd_3t_2)bG#9jqC58q zeuv|m82`I(-uOe3{HPpLV{_@zu(U1a*#MNlWnL+{7p~!(y64}5V>e`(gKP@seFSgI zGUwYQKNa??_DkT&GwuF=WwPrrD5Uwl$i^@UmwlCK{^v@`NHO$w$Ofmxp z()sCPv=WXnxvV5sj2b4H$YgNZ0#*$A!aq_E%&_*wa0T^*`y`jaeq(hjEM+N$xYzTm zk_o!id?Octy*N0rJ!&{`pcgjYL6WjBc%_ZO>99`VyB92irMTDy@J_hsx6EL7yPmKA zIU}7f(8R>^df`-fQ6@TTtp7_B7?fR+YxXq_U%3BHV$4KjYwMspEPXL9MW(`4>!X_S zI(QwKj>m&ccQ-5@0&QTu@DaGAL8ke&dFcQ5a1|>k{jC3qHeZlLOgbHCJva_79F${< zV&MbV!c|SOP24_kpO_?c#qx7l+S7io7rwCMOCm%?brSA_B!;Epr?=%-;P@KOqQjJu zg!vhRVsD`^=PN>dXP8Tsgl*vK+k^uN@!@b4V?|f)Pk`gY!>L=n@DjL&Jn#ldF87Ug zQ8AH%Eo}gff~6+1eZb8BkHw(!!gRx*;DJMSI<9WQFdePFNg0W(-m7TgS+&N z0=OEk{w3O^(*0|?1M8w`yy5VTC)%o5?f<11yvT01#(1cT<3DhrSIpLkM`oB*`@(nN zn!{0aV>$I36KG656IKc|hvVKN)G2U`af6qgEfwC&TeqGR-TnzVZ2Rj1*a6`DVD%t5=?ct609j z)7tNVrAV__?Z005Ck9etGRwZ;#P9i!{V9OsVX0@-H<$ZzxX|n6R>On5HKg5e@>7=M zYzm(819@V0o@r%M>^iuDtyr9Y31e^v2GX3qeUw}k!8WrN^?_cP6S zTh6b8rE}1ExK{ROL>-VH;9|!6&j0#9@d+8IxJ+IMqY@-h8^ZH3kn+hcHiVUMa!q!y z_gmk%+0Qg4JJZdVWMlF1aPf0_=ot%n3LK-?JdNjN|1eyAewLwY7<{rHU@5X%X?fr; z{O36K|EXfo17~62uUuXXS9Q-cM_T)j#IL5;?(z5&mik7QNxSdiK;)D(Q)=Cx0B3pw zk5O>V0?q;1JTM=wOw^7<^30tWNME$-a%Hl&;S-9ZC6%496x_HM{sosZH+-~xVbQPD zoL=)i7Or4Aet&Df2Cnkf6~BQKh2BbM^WX504vG6_UEyMH59buPWO1(f$R>HpUXs`w z@1G1y{fo;Ji{P$fqSkQ*JlR_b-Mp9bSK^h^?{Ki%b5L&|De^{MZMV7yEN#0TZ3+#C z{TYr+;8HKiZ-%Ajd9ZcA1}?75Fqhj;@b^B-Uk|&xU4zd&)v1q1HP_*A5lNO~J-7gt zG9$+?!_{7=^l!Li4fFrFSDtG82buEPtl*Q1Pl7j;<_DidrEWq3gDQHl&ckw8is(w)*-*xC8!0ZM`LNZNnNRGm@JWnb78mg-Me?nlCHy^5&>mWnU;i4yl= zP(la7wf~!7=?d&&1MnGK#)g42>uQ70K4IGZMF<%vEU^y^gr%_DJun%TTDSeI{W7>>|6J3$QJBR0|IH`(1r15q zD~YdxrDN1R|0i6)RBLBj6(92t#WsdUuE0Oq{}~umUKTAnmBSlq7YOpqMmX*jt50C5 z`*n4D%%lVw^<0e4glpLCR&6V)E8sXaqqKr4fN#LXZ)clrgfLkD&r89<@Qm8+^F!gP z{nE`|>%n_)!AY5>(B|4dVbd$Gc2{ioRG3LAC8=I83@&1$(VuA{KMqSLX;+(qjcB)} zQ~F>yX#d+{;4c_l3QNuRL-v8Y;bL-mJuRk9P{B;$YkP0e|5>4yw1c|e(T zx!hBVoc(6G-xSOjgzNu1FmOLUtN9uJhH0}y_`hP5S)TyVfpD3y8(iagcrq+iT`pH& zC-*EiyBFRGSAU#grrS^Owd{GmoooM_rKgzv@5|?9VKM6rmtLM#J6xUsOVfTX_KMN< zaDmrFTMf^AIx0mk!AUQG-@(#T?mj_7W}$V%g3ccY9=6B8-@!N@p5V>tTn_tlLQCM% z%~?TXqX0bumrTev%WaD7ge#^oM?{Qe-zGD~j6Dvu-qyY+T=N;9sL(pNLI%vyEVT~4 zgDW`i|GmwGhcN@`ule-Xj3fb=X(KQOmge1KEZ+r75w^ap0`Mj5FIxQpqarM7|A#W& zHIu5b86K#nn*^75^L&foDi$O<+W@BJkRo?SRdrKXsy;i~0Q7`Qnb_<}0F;O3z(q{q zY_R^{spn_V{=Z>8{2BvYHq+leki&_gFW3pCZ?2tChrm+L?_xL{PRPF_ODW>HmhXb4TiEq64{DHN5>l_~s>LVTvOB-u3?v(BcIFF2(spNLHCK2Zx;_er>@wl`u=LEnXajUNT*We*^Dqe)pPy}Rq1Y$_Er{wj zgQ7gs6JGsb6u=3vZt7Sh|1|zzjDi2n?uCoaM}aACkcaIk;FUBc?u7%zUMYAJ)(s1@ zYyfw`(xiX3<&zIgF@*!z1=}+8ufai7WVVCD`LjGzgn_Q)h}#Ed!n(F$mF4Yl!FN#y zRv*O!A2wG|w{6@IpE0 z#2KpOzRcQPu0vt}+|ERJCN-Vw6E1*bKjxZAHjjJ_@1__ZfPac$W{fTx?p=WU!AW-8 zbyNE<2UlQF>Qy8Uz!%Jj+VfZ8>gnNNQUR>riWKnncpeH%ue@HUVpjqe<>r|6HcxyE zZ@n|>U;HflIr*IbvLS5Jnh>5GEg-aqr7_!ucr;wX%BCy#x4}||tkzI3+yYmg7xj2P zhGT3{boItjZTRM_`!%%g$H3+r+W&(vP>im_pb8Hvtb@nl!r`3hv`P94T+@#U30pC> zX-g6^kZ_I3>990&y8vGa7cklEcsX3?O+tMj_t)kpYRm0j3@RIBna6EKF}Pid`IuQT z#aN$cJlyu4s2DAP{kh{caEUkV*6$DkaC%fTj({sJMsKzCe-%7obt0;%-o_v~KHvPu zrpRH3@_;un*&miRRTraM;mR3N{~-xWxw*4%)SdwS#K6U-*aCPT!~JG9LJz>(6EC9* z)F$~p45Sg)dC=o9iU~_54D*9;d>iafqrC_hGHd4Q`n|9;^SXNA{0=F>B`40mTj2O- zsB~teqEDXFk*ZyHfj9?~FgUA-%O-3Jl*0b}|7~yy$LYJ-JdxXp6ysQqt9o0(#Z$x0 zW_rPRxaf+U+78YfSa(fzv=Lg}iS|EvC2P0#n|z9cGI~6%t%JhD$;DUY2i<1nf%D*E zG^4rE@NC(Wr0PG&ei7`Sj@tw;i58p94n6Np+coT*;DJ$@!2v{tcq*erUDdYG2A~`+ zSQ2f$ehSuobA{GE2}>EeYyDzJ@JV`Q1~sYtJ08|mAFkj36kKy`rs-xQ+#*p(5`CL# z&ag>35%$OL3*oA7v-n=&H+viQk7)h^>-q;*^&ZtFW_deYHa==z_rXbeL~iKS=txq8 zic5J!71ae|HYBtQIbj~aAbEApUnXg-t&eU*0JH=GV9cV(KG zEoOJZrA*<>=LO0WkHb>)Ok)!SU>mIa$-+!e`~NovB@MI865HG!eH3;5dhY$O4-691 zUN^No5uP_A>axv(s}k8}qqTn=Et%_J3Yr8fcb23+`LuDRF-xI=dW@MWfX-UeViJiKi*)+>Q^t)uh*T3C0O zD9;4r|1B6~cH&kY`@$V?XQaqkREh$zZez0Z=CT1g>72 zVLI7Nmfw?1S9^#w#~cP%E>AZLNdd)p9Ne8gplg2T!iAl)%nqAEzrwl#AkhD(Bs-=T zN#ZT1pAK{9hbbZevY!MG^44_jgX31SiC*|Ftb5{ICjA4}En6-Hy7Z=AA=h`b{*8dE znBWMsW66X2Fo-j$biGZYKj6mqM?IhxeTeb%>E-N;1 z*y|Jg2A86rb%u3cbR0=IDYLd_ycqU%KrDoHBZq6A?}uMt3CFdTZ|eDkSFUR?@HdY& z>_@JCxOS_wIRcjUbUSon|0eEli6#`5!0xAh-b-+tl~SdkB9zge2%a7032|FEVZ2kW zJu%S5g)Wnv2^*GD`D8%~%!e!JBU0}K{4A`CaE`XT4X$Rh`98}%2Bes!tSc({^@)bU zl^nah8gCVVNdsvA59=2#5L|%+e;@A>Shu5oZ#{ezuBIMPE|-UIz`B2i4owiCUtsss zOZOX?65P(@DxL*!jH6m3t@|eiCU_xRrCl$0D-QfquwTO6D0a$}dSUkQbQ+0qU+Y0j z*c?mS0V_uL!d2d!(Nl2Yk!a+n7|6cy3AleNqjmdY%sw!9K@-y-)=gS^p)#H9 zb(M#kpm+wZ`V|js68;F6-koE1+5lt>q8{;<-+PN+i-vBe!Mf0@*8k@*(A{8N?F)OI zh|e4@t7o|st{#(RZm}AdVMT=@`#dHG5i_s#%_2wW0HOnnUDnzmxsE-Nk&%c z^pc`nYK?&|tkMID@!fFAS1hyHB>N23U1RPW4j4=T8b*D_#js&9dbAC|Yp}mZ)!UxPsfd%Inak?SK~22b{??%Uxilvq3<|26*aG?Zd7lg(xrC8&$@0ap?ihZa z_b7$#fNSoLiskFDUyOIcjVUFr*!>P~U{%cpuwYn*r#WJ{%7(i}FBk*!&j_ z%Jzjf!&USrT#`Qor?W{#5!Cx$)bj*5p<*F}9T1arMkNn7fP;wcl(N2D%wfxm2IvM|FSi%{9wx z0CGm~4Q)ju`*yJI4spfuJoq){d23HY?juK?V_63lBduoE=w$-i3GH=Z*hU z&tUd@XtYJ04sQmwb|5yVGes9HaGfNxlni%cPUblnqCw z1eck+s`n6hP{MOC0s~z{>sqrLU_&VtM_D^H+h*p!K31_ z`9|RoSIhlf(NXTt;WAn~*Sh`*o64w%b<`-@f880BXFZ%h3J3P57%hc$ovTa2EpWkO zQBC$eT*1a9m*i=qng7SVD2x%wJQ7RaGbH*06Y+{hfD5b;}W?}JYdYfGvzgKj7+JvK$-GMSeGNa2qzO5 z6fxcIs@lKc$4`w;JmiffmwNsBZm_QfV=%0n^jw~~6829xmccb_;czLq3XacYST7>BtJql73|5j}1iPQ|%xpNxu9zYl z!{xH4@p8rPZMX~$k7&~Vr;jH|I6SUgDi05Zbz!Xw&^hq+d?Jl@WnT)%wxcuFzF;X_ zMQi7p*L83ajmx3d{b#V*mKp5-R|Nlnb?ua4$9_x=%bG)^*SI)&48VD=;WT%hhexgYV(a>|$}#<;^c31=w!K2B;uLUEz}7 znd!9d&w{I)6Q{=rVT5Cuf815$7yDdH_?91WK($~D_;fHuRMPUHOFsn+0K z3~HE$Yi$Fx-(+G)u6JFqLii$@&w1AU@vy%*Jsn-lQ9(yMyEgp)h64cRL2zfDOB=l{LA-%BvqN59>b(|K_0@~H867>?6#cNNWt z^5EWR<8sqWm~a>n6|=UmzX|0exRQa+cQ!&7!HE)YfB&@@_^Z?R!F_si!?Jx~z3kUV z`T@Rzlb2@K9$;)Zm9ZrENowGtOnNkoj>p%7#b_?9i>e>B9)1Uxup;7Gug24f8k5O`un!t5c+E-SJfWWN1s89M zHY}bYp1_5vwis@Qby4m)*8jxs7<7Fi&3tVQ4xB+33y)lq^@3||VEUaj(+if!-dopO z2kS!n4)*ySaPiQ5^D;dWxzC-+d;r~gRpt6bBVb)2Y*U2tk3j_+22?l8!Nc%OMyu`{ zy$R2oo>n`_v>PrsCejhv|8i2~qUcoY1i13>+}cdI4Ax!sr&$00f!oxU60QGVkz#s# zRp~+SAc~Souk-w0P66ZUFl{}%jTw%r_I1F!?O$LoU>{S%I}!Evay zKk&+w;41mU;h_B=i$M|N`3V>(#+Sk0uvqMJ?Okx?xlt~D4<7kUG`ai(tb3_l2PXY0 z+)v?XHl0cZuqWJuZo5m-;qZuX1to0%FTg<8v${;T0-n+?DwdDHrCz7>J9yukH1l5q ztUR;dY%-ml(NF}si0P!N)F=R>;F{;Dkm`lJ5H4hLoAGZL5gc8{}p`t7^|ZR z5B9>v-bUr-)EkA&8@ihA6nG<>(bU)|02APn?e)#E_7iq5rN`rK$G;dhYxB)%YX9}X zd<=A7v`g}b;p$(~1HImg!JF`-J<@{aQ~V(u_mY4kHaxE zB)Hb_O;|T_CS1QieJ-8Eh0(-d8@Py*Pq*77oB`*uWOA?#@a=HriMh4Y=}*Itdd>At zSohJp$?6lXrUQ~h0RaKhCtD9!+|2yHnp=hV6Aaoj$KzVJ|H5$^m#H=Y2hXEedVRzr z;8JgJIt9MRTb8>T_E%7r!e(E(8D~@EMR@jB#{VwKTV2EW9}iqF_GtK}hoj;6nXs;X zb`yzf;a&_x>`2CJfh&&6t)1Kb1=bzJE>jP_mQQeOsGLrpa50=rFuy;*rodVZ;t%DR z(`;+F-*tF+PL{b0dnMTgaHDNeCVdqi;HAh;IG1sOd!d=1V$NgmT4GZ$3r=R|nzptr zxB*TScsrk}F!1&HybbGeVmExwyq@Nkk;}O@K(pb6??fs1GhEp->K~LWpq}tD*~n{d?}E5;4~Lkw%el}zyzxb(|N>BJJ)uqQ+@Rvvm9_WKjR zz~`KqX6D!w$h{%uUn(39yFul&D6966Ngo{O9%$Fx&V>EbYs=v3&EXXa3eY;Zie9hU za|Pg4xXkNz{{v6{HmWIm-AMC3JI&0t5uBR9KzDw-9?v>>w0CrB8(bF8GHdJuc?)U% ze#|!b8Kls$Fn5Co%Ww+NY`B_=iccKaKLc-JCHid3Tj97Dz(o2@7XyiAz?9$xYjl`pG=7k)~>4|$4qxEpbGg+p$E!SVbrQUwO7K?DdB+G2H zx&Cx`E}tNrF`@l0!6055<;n%{OmDt^Gdy5c6oYNBu5orX=bvx^d&4%{03E%U-E{OR zFSa}YuK77VIPb3jUksOhl4oulO9V9k{~QKYj7(hf_z_&e_J`HhgF}|k*f1J)J)(iI zzc4u#-ov@z^Kh?Eawoims#r55;um1Q)O-zhqxI~JebD|Na0@YD52))_PlI*;yX&Ps z0#|#DP42D#&I3K+3MLpj;h{>waJbal6M7-Moi3egI~Ky9Q!G!__+LqK8wT#DKx}|@ z!L=(DN0l>KOdrtk$#5y9!cAOW4;Q?aX`Zz61Fynm>31-Qg%eJ zj2Ddm6@a@j_|EI&Jq*_{4p1(a{j0FyNQGi3PQ8uMD+iSuS`RzHHS~~N^Lj2^*&Q9P z*8Kw6(+70+_rki^n)B~rh`zv}VlLfm+hscT_7t>Uare9RU>@vGwcZUE(5D+{?SF@Z z1BI3wETgfZ{hwy}BzS^%zHkv-&D?P9`Txf-xW?On_#*6|4UaA7g%nelq;WW}V{|xu zCR}qg>h~dVy&R5n5?U3T?6<+nf5A_gZZ`&1Yoei3!JUMd zy5-Q0|sT}VzB~nEnGc6(qMQ8Ttz*QWnZ`rF7Q@7GFMX9 zd*=lQiaph97r?87Zg=>;*(+)PQuMET5>yP&M;nQ|+)E1djr4e*4Oe)b z%-dyuUR3cs4#$YGd*NH~K59a}P$~K?T>L_Y8A^vj0qC)cOv%Kf>vNu+z~HvxXqV~? zxZ;6mxxEaIADCsHq`j91Nw}1@ptXHL`h65T@7T^v_$lTIU2}UM>~B!q1)0{_wSEJzzELpB4XA&$Aa?^@N_! zeUMB_uUVx?DbgPM%d_A@4yOfqM(zJH465kGx?b>e@DFseT_$P0hH1DrqkjKf zxSOYVY%}a@$NdfVmDQgA5EBlcgcp}6K;OejN|_p?p#9H#m|W^@5^W1taGc>#8>1m` z%?X+2bIViVYa7+C)qpfl_TGudd&QofulL2Dp_srvpYjMP6#l~V|BW$tfnKny*=E2M z>}=BDQJ>&pxB*=**Dc=#muyWp-_;9~{P0S~hRh+k#-GPQYzd$!!xmE#~4PWUc`3l(Ibow&<9EZk7~jxaLtS9wHp#Pz@zU;Go{Wym~%mi+JixjA7`nxUz$10zTi;UzX#+* zcsHAZTsfWt`-e*J5x>CIEw-)LB|bUJ?6G{<6SbL+2(WYjuUyZb4E5pkjfY`Sby>Q3 z#|B^$?6339h5K|#GcQ~Fo8_JZikHADR-55MZ#e!29B1=-JL~^%@MN}N=#wi2GuKm5 zB{&%59CX2;HN#^UpyS~o%+b`hFPH=uc)Qtef~#kSN+#st!*D9gYWhS9&{nvL;r&JK zg&TOGw^u9%C;X#U!!X!Qm+4?0P>M{2ljwe{v>rSTx1=g{0ZPJuEl3OW`{;#x;pHrE zC<5X`pCk{Q7^?M908fVfGourqRQq3@QM%=o`4rfI|HJg(B zDEM_YjgE&Eph0j26Am%!;f>-M^$p8DK>)YHhS_XaEVsj@Gj*~l^sfdU&UQOjk!5dU ztoUrywj}yta4aX0OY93r!AVvuM%x!Y0sE_5@4<0SwI~lLg@$b=*I$xdo39$R=Gu{eUUzHbZQc-|5)v>RJqdg15wcc~&k$zd`IGzv2{|90)-``#juVznZ zI8bO}dc!eq@^}#(_in*D_<247OET0gL4YQ})98}9V){J%9uaW8>>Ai<*$(vowRnLS zG~yCTQc^LV2~T5AC;Vnj%py2>f1bINUZd>afPIAozraNuqtS1J7hyh85iykh-vRLS zr_zF*Q%bQ3@G7SF3*GqtN(?^qI*AX!g`S5miyu!j=h!6w5MDr!$SIvV|0P1smdqha zQeLnGj!nup^y~w!f!&D*1)%H8M1YmhBUKsefh#d6^%RjVhRZ0HZf^GhIL5A6w*BGq8AjxKObr2Mwt#C0tBK3L| z;;-P!Qf@ZDAK4%DN{X38RqKk`Q1~8iiDf!mNMm+`^=}Eh=$okAXTM4caz-?9x_!Z1 z49uGu!Dv=5cpAQ)iN!9~-n>Q(z2o%)!83| zn71A<9j@M6-|$s}0OY@&VlM9$=Ht{1ADkA;WOe{cbq4qrhrbt&*J+~=k= zGIW@!|9qSFf5WC|Y}e==GL4SKSO=%V>%7h66X2FC#~*I(SHqd!%;`qBlh^os3l|QK zRz}m_r5^C|MC*4GB=HJbFQzn<#FycqbVqc9(Od9jPoYo}E}*S&ja7qfuvZVXgX3Pe zd=%UQ#V=n`3{;HohNm)n?n>2{33=d!sNQ=7h#ieC1zNyG-rn#YaEvV#6q3Nhi{L&h zLrp1q!BW`$^hrO5`rg@0V?U$6uw; zyYL;XjLNkB-|N3YQW>br2Mz z5wiETS}&136_LwSkHM#r>0CK~9rkxZ{SFsYM47VSL)Mzvf)N&b+W!+UFjOQi$tS|T zZkOxCj0IH{tK3(>#gq~yuTtPm_#tY-t~S8^Kf=H3>zn6no>~w4SGm0h*WQ|?@&5rI zQ+56jjeb|atz*&A>g}+v6Y5Xc?{Mt*3GTm(A}}59aBNsLD}dL*Cr^(~&D;&YPOn(~ zi-cmd34n*kA8&@F|(jn*|#JAA^T3MJC9;Ckblv$enPKPUs;v#a@9+IjS|$ z@@MeGaJzoE{@?O5zL{5%oDNrd3l3}GB&yfu+q%6?5_=AzxT?D!TmmZ(D9?<8{i)j} zu&+ntc{rTvrT)_c-(uje@ucj)12UCs|C_<3-g8Ggem;)C)6{S!G z>|b!S0d8?4TR2qzDge7NSmX8CI(<%zilT+d<6wXB`8GJ#n*|1&B2U8pxu9?1#oi}1 zJ4pd1IG6$mGVS5;7wgdf=N6St#-RAtD8>`unAdnLg_q8XV)QCpMn&a5!8h<1bTVCs zrRf)JSmZ4E93rSpcmy11JhBl!9`4YN`Tv2|!5J77r)QhHsX6q(ZEzKn#qF_ICVdzV zlFWMWDeRwaJNQci#GX)PGCe;KE}=D@N(hz0kHAatPwl__djWp59qqp>xBF2^52Cel zd=dNydOuvf@CjVPWwg)P7wo_5-?L!t;cC_oT*Xuj`}crc0sC`AE8tkdyPfVa3_4vI z?R2V!e;5|cgzkU~(G|-l4`MiacZ#XsH7z)9rx=&O?XHLhCiCErX$@V!{}I^V2lOVK zNM6q6(RipN`W}P&s7TVPmy#&wYl{Ni;ZwKyX9Q# zxDSrAPN)uvo^Rd=tFqp)~V? z^ ze!c?G@&`(V7sHXTKdp8hZ01J0Tk+wL_RJS_5B*D+XE8`J*W1x1 zNew)NUg|-X8~#Kmlg7if?}x%C?uf<(cfciHmunmR0V5;V7VL%h(xH+6ico`}u|JZE zDF^`Ve>)6{{u3PzKO5fQ?fba~K5A?<#j+SqUY=XK(zy|?LiwzlEl-LWD>k<&c)%~{ z4WTu3t>uxh*~Gj8-#8fm-+)03WwC4RH_qF`gu}uph8^KJ3kDT724}*uicDH3?uNb@yn+DnD3G3lef3dHJdch5?u7xMfh)U6Nc-^s4ulQj&ehax+ z59ozEG4MN?XZ_7lY;U*Qn{Z~U`nBhRGXEh)Inj+tr^3F1f$6aOsnf9rF7;MO-h_)2 zUd{9s2FU}mYIQ#MWk=Yrs3yst*>hK_u7;DWCAY;trQrQ(2||2oo*7FQM=vQ5cO5zz}@2K`7*jHG%8J__rJ)Ks&A#ppr=#Mn>lMUc+a1~Xz ztC-qxYh9dOF^*4wtGeZyv7!5fxd4M=PwUk^a3MRDciX!A!0c4B?%ikywDlNeLlWO@Qn}7Cx!0FG{;aC%EQHQ=e5xhi_LJ1Nh{?UDK6a#`|A2? zV0Z0T(Eb-RAjv*W542J#6CDLtKO3FXoe3vjrXTNyW^g8Ty(_klz#Ut=DHU!&E+9hQ z%;y2HuTO9mTtv5?V1(`e6Bty`hZ|{QIJhCX^y_FSb{|}PdwQ+%m`~sWuMb$%h!pdB zIOo8}vt?$P^=}S*7pGoaA8k?SO%|P2ZZZjRKf12V)qw(`#Wi7F8@~wUD1?G{2=RphuFsARSa(B zn_q1m9MX($^mKFw9mK*;x-S#K1pjd^7AXwZ5$fdSnLOaCz9I1s+lnJz-yP2JC){@uhGjo6lSi=`q>w ziq->OhZiJjqTTHs4jnMcKRG1girHAWnAWj1_DX>}VfWJuUxW*OqN=qi znt31rq|fMDzeC{jheunp`oM{TA$jH|TXXHfpu>;h+^$|Qkh_#NvUuzQFdp80Q?z?M z0hiE8b*)(?oFs{N5CA>@4IHQ9((~e2OByfMlp0$e-;(w}j)xtr!6FI#^*6O);r%EMy^*1zkhHd)!as|znK@x zU?&bHdV|eB;ACb-ZLhUYj7-V39KTujGvL*iMj8|6!KMFCRc9U_MUgh(?q(*;1Of@k zgy|+(!X03NKoSxz2@sH*kthNpM&xouh%AVrkZ_2%WEChxVMh@b`2@3yUjw4VV-c0b zfQ#aaOBC=1W4u? zzLQ~f7wb{U%AU~kaBXUG>{2Qz@I_d4DAc+=DLfZQ^nByt)%XK;o8^4CC)@AOISHs- zAs=8WC5P2A!UOP(A_k34C3+izeo zgj1DDncta8sT`}F1gnS9Z-+awpy9Tn$Kb@>@KXQpB|yWi#$o3J4RAFPx&kG4F|=*N zyq+xwR&TW!09UaT>o&8g@TR3+D_RJzBZt>G@$ZC7@GmI$9b^0d|0E!n^?a!d|OV())A#@->-vv31eHf~3B5q2yr z;`aYJU6F{D%`r}dqu?lI>~6i@0@r^P)Ot7q)WCTtC%0XH20xCmn!7F6rW^f$GNzmc zrz+2Hfh&e5YZvf86{~a&1Vq@!lijGyfu!za@v>mT@@X(!%TA~)5}D#xW*=&bpj=c@5$L**6kvgKBs@Vg_j^RrEFJCx8Kmlg6vL}=go`Vnk)f4Dvc!OdO zFsO&2jihUq0!e|#!s>0e^WozxFwA!1Uk|TD-^=N_{N52*-mX)**7;yTPf~9Zn-oo`4jjSWio2?CClUcda)0-gd0lmE$K|^tu?XV0P;k;RCR`vf8qku3RzEY*&o_ zS1$zY%>#80;$qRMrL*8qnCZwmB3s2R@YGv9Wpf|gFepU}Gk=!?<@V!)LxQn`$&yRq zYBsA~^?Mzhg&ncG=(VX*zHmG_ktOfK>gn|s{SkANDG8_tP3xnDUH^<;CX2-JC z$lrg0^ZaZ|JHP*NfT2w$0dmMC6EF%+RlMO;RuNFgAXMsq8Nn&}0G>|ncOv)>Hk3uG z;6N%N?OLj9nZoiyV0DiTD z&oS>q|Bob~gf$-7dS!~H!r!xPCVN5|;X2rO+8Y(`lh1GQ%=M4L)mS*V%1AFUwC^~| z-Q9V=J*+W#9pl6wffI8}ssHB^(CQVh45M&QI*vcq%;HnlF;S$4*?Je`T|%CZIVfaLZ^HT+2j4 zc1-g3H(~dm?AyPD3(j~&HhQ?Bjlww1ZRfM$xPzg14lajP2M5o>Pq2TG;p+eI30TJ< zQI25b2UA8ES|8f=N>~=by>NsBgIi!(N%z4ou;nt*;UjSUzr1@wet`3qGp}=UFrUh# z_9JuP98SYky6W&Q0`lJQY_%VUYi0zrQO*a>!WF1zqKpZYJ<`x_9N|m&1?>ShV-d>D zfl+V?Iq2>s&w&>yzuyfX>dgATs|QuHwMqOy~Fh@KJ0+WXB_) zzXE=0xmRTK;96ztb`z|<%8ki16DjZ|W5~hJnrcHGUJIY9+~75%tpr?-6N>Tlt+LGD zg&S}%;P&0$!x0u7T=m;!EGcG0ROS>(KCGH(E{9K)dd>1LaOWeQH@w4erFzEWJpz1m z6x12!0;cvgtgiK1;}DS9v0F)d!*#e?ll_7ecp4o2yFcME={S53(|bA5kiR#=?myXz zlEyY?O3wMlY+;+z1qHT#f4<;VJCtrI9l(S=beJ<9`tf3Z30YJ?N-7b@V_&> zHJ@_0`jUV)6FFp&)J~}61^$E9jRj~C$~-?s!|F0#$zb)YcNJV;rW zttS3H3p>I!*pS@gJ+Obo&1!sRzIRdYI;&*ksRc6{5*=~oiV?aj3P@LlMZoVdW;|3E+k4-9cq zaNQMTvEsjP1^nU;&pPfY_#|UIseB%z8U75fWbWsVfcj4Ia;QDeOoUZ4+0XKn|17KD;2i*46N< zcX`)vJPAkHI(^59@EEMl1<$~_qvDQ9WRYEj)qTIrtBl_nA}@mD{sEl%{|*8o%+1^s z9D*k+=ly)s7@{e@T&BUr3{qvQkXgI~R=wf84zHw=N#!Pg{{_B}>A1Uw)b?saYfrz? zP3nIsaXtYJAH|KyCC`FY&t+TTOm;41C6YPx0<0|vXcK+$_s_xO>G^V<4>p-j3SZ)K zYaWyFb%kr0h`0+DkHGSN;DrC5uLwBEu^YLAAwLk{%__!togD5hW4bP&jfZ7~i{ZTI zf?B#$%a6m?vlQ!gy^U}xHXwVP=lhn!Gd%wRH^bVU`2XqXeBc2BY8EDGeka1`;r5&h zF6Vcdg>Sn1G61$q7GR1v97zil?2VWraHWPdn)|?w1e7qJFNjGT((ZuAF@Wgh2)G`u|IM=z z`A{++bW@l#8-ehkINEu>4_sdC*XA*xkqMjyKh@G78#Brx+<luin*mfCs9XEV_O9 zzh#7P2emt$EY6xk7GiwXu}M6_2&^8tSP4fqVO-*Mel zv)H(KtD{8Lne0=k$b?TALf`7--jSnfI5B=MuM7Tn(#7 zub06yZ}uwfdN{Jgvjy7+SA3I{xYFr8IGUQ0@T4+$J_07xIr@JY0oBSX)_Pbg&mTZ26 zYmRbTwzDjkw}=tb7hZfzVGY+VYvdM({NP~%YF-OycRE>|wOE#sXX7~>u9@q((VhZd zqcpSSFz15BZN0(=#J>h)q>5Yngx89fer*x5N9TpJ4H3u>S9K}w-B0T|wzyAT>~HVb z-#)Rw`LVwRvA>1lvV!m)aiWKwE_xJ(n~IJrGTPhg3d2>p-MuKhd4b*hZ{cYHkyK@b zH>@xMqN{DB*?XQ2N1BMf&Gi;`&u7D1n}`t~hD}j2O)nCuv-A{uvK=1TM88y&hcjD? z=v9`_KCwSMrHNQys2AHcFNTwK`^>>`XG3%tY_=6059rx;`OD$8Np{BT;Y$tsy*IrmT8LW zo|zr&Zl8vS`$hIp!xRI)3ilAv62mV(Nzv0p%XGcK&b<)M@Y%B)!)b;nUKq*}4QE1s z5P9?UH2art!`qsOmtP~M(&zMUqWnpHoXGvj=xiVSDg0P-(fY|yKS2Tl_76#B=N9&` zkl7?4LRVXsID3p#M6=DpWRbVVD77c$nl-v8Y?~Rfi@TWznurCpdX8Px)11~qT;I=1 z5o=FpgzR?)nj4#m|4z4B+xteE6O-)W6HK9tON*_rxblQP$6k7wxi?8nnrw~{O|A;{ zwwq5ekNNCL)6GXx?dc25@__y85_6R<9-N7gAKz+bwh+IqHL~q7cM*^M+udd>gMw%q z)&$^I#PD~+VNrjFks}yuw-?n*jDS6VtC?(wq5XBs zesY_+KS|hgO-n=!BP2fFZl;Tp?s}?i?K1OqG3yGW$bNCRIZ3zs)tJkCqJEri+UNI} zsk+_w|IO0@5g1{$5RZ)3v+VMN<}SZTn_+Yj6*G)fd)`0HbIt4}$IQ(^8BYfh{n}_M z8p=(-*x9s6nppR~`KD-HX0)^GPMJZUo$;aha8nUHs5cjp1^Nilu-z)Q%Re)>2SlXN z{Lr|(OdPY!E@Im^W~S&Ava;;dZ_Q=8z2`f#YfIbbw~G9te!P(_4z)HiMD)XuPrNlG zv$I(Btez*L&*&+lMKi0l*f2L_iRd=Hzo>7U*~)&unf0^J{yNoKq1z9&vPSD-{mbDr zJCtGV35dd7RFj{|GBfNh+187MLa^C;49k9D zqSeq$gt}O%qS`W=+CNUWYMYAmY`u;6VYXEy`u3rea>_DW+PBTIsK|xq_0D$r4c13V z;+-y5OL1eN-obujp>)p~1DS7Z#cw{Nv}8{&h- zAqsb&K20=i(}Q;E->iltadcNG%Z}`}8g1u*V_0$ D>t)|w diff --git a/bin/lib64/BulletSim.dll b/bin/lib64/BulletSim.dll index 63ac1a91aa6755d65d6b4a3ab36538c643ac8328..33c4d08bf4db94989579276aab0471943adb39f2 100755 GIT binary patch delta 138384 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 =uz|#0dDIO+%eWjq#LOS20AMoH@nZtt%WhQU9 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 delta 115662 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

dx;MfL6F4NX(Hhl7Vedw1yu}1e-=vYSL6hI( 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

!CO=Q;HWT9MYidP-91W~vrG04cIq5tx;QHsk zmAj{uaylf+70O0es#`ob>B2|{D``(DJ(riz(@DLzl$!UIQuF?(ngwzaai0})%-)xx zATJDX+Tu!DZ{kd&T4dx**}s-)#r3NDY>p|nl4<{4f17ULpuL|)Oc)W<^G8nxlGs#O zCOUI2T*KQ42m0ngx*Mmfig-#s6#Zd9`NHifV z;IvTjloFb|6`{iC2}`j;*Jd!xpw3jrg++#zc|W~R)n>jrM7G6gnbOyknup~Jk0)oU zl^3k8oZ-Yzz=efhY&ECTVS1NAzUv6ziqrDMQ%Xk{P`>bavTn38Z$Rcc;$P*Zp-xzY zh?05oI%nV8gg(bV*OavvRF{;R}#qOz+STYinmcuJ|9l$6L2H8rxXMdaFh=S<}^ z1l2;2*#=9PMrv!)h23dc6L{;;G*6;9d;kz+}7d%1bTlCmS$FzWIW zm~0b@ufYtJME=3)x+fm#^9t+GR;%~$)|dP;j+?W=lu(G`OT$G=h&g{8VNdAiR`^(i zw#XMJKbp{A+>Uac(El$m}RY_A=(ye%`%gL{bZ1`h54A5u5}aD%ieeFgKM)^c4*` zbfEs;NbEo<7fpxKRmvWRoHFJ=tFQdotS4&8=XU(LreuG$OU?Kgj zlR4NRa|^=}fetp%UWN5p_VGfD6y!zaUb{SRyu+MvL2=>U)quygk7yI0C@!2v2a-8fURo>*4@K|U z>^^Ukjf@#H$;q5Cfi98)ip-Ul@@L*E^8^fzs;g1eQ}NdejH&}`(uq)U>fmCkN&_#D zSEXxMSJHpsB7@%mz6aQU$YKo7bD~&}xigPTDa9>YUtIWa4yhkESzB9Nm^#euH7Y4J zH^3N+cdqO8isi*c^#exk^H%=c54XbhjWPDXqHdP_tVe!Ln#SLTJamB?^rpLER8qA_ zjWR||oeRx93-uzCraPJc%2x#AmTfI|iX)b`x2(bJ19O9#>||C@M&8JUYH1B#l%ftw zqf1gLJUC>7Zh=bKKtx3go47z7m#SYy$&*DI*@8>dcM_9gW7fhFl9p9XiJjyrx#Z$X zCYpRyrkJxR7T%;&sz^>0&(eCfwOV~qJWFfoh4&ZFDtM7|Lz(TgQnGk8tNb?fAndju zlT{oe(k}8Pm!C(f8%Y;sn)^&5N8%>o z!osR6uzab&Gg6>}LGFjR7+0}QX=Cjyo~mtLplvP{W}!N*i{_n|(Q&$xGq7T!1?tEf zst(Oei3n+D3sl!lKniX37+7?N&EMXO{qEMW9QtPuWPyH}L1sjyXs$(Yt(N|1zLJxI zvXWOcJZMzhc(J+by1Cd&%`KX2$@f^Yt){oyYPuYWx|%Mr9JCHy{I{!!si#trbp==& zt+++&&k=fqqQ}3-O6XU#)snA|suZS8Em!F}6Kf+yznlZG)%*clqom$fdp<%wAM`3d zWo&+aIVb9$NA6A4mM<@OrSx*hn4ni}=0Bu$7FV*j`Mr47_biz6aR$@BoGG3)cO3o7 z)5>%#RQ)Tnqx6W>tywY}0w5n`kj{0X%GJd(f~R}tbLxzamcn$T39Pk(Bm@4}iC7o2 z>Xugtzn}%tuP#uxZy~%z$$~$RvIXi*d3tPDqO)$h3Hbq8H7<}(M{KYe+bQ1);kT6x zW})dfxRM#9ZC>Xh=53q7eZ{k?T%yB9|DEVRPwQV+s^_~(1jrKa0`>4Rx8sDQbd}|f znvfJSb?=YOfIf+3;brNq4yw^SPfQ25Uh3lKYB3K}(_5u%C*rU=g;@RYkcmZ&B$;mJ zmLo4i$cvYUPiTXJ%;Ryh%0rsJl~e3`zG{2?_R~VG??5L(1Wp zr28lF=6v}qhu>m8u=nX;o%)m$E?N|_AQG8XIg5m+`=nEjTXt7u)~K&_*eqQv;w0Fp zsX~uvI=xc56}i*i7pSZ^uwkLk49A92ibU$ORvr`?it=XxBunj_*r&T038EuA>RXOUa%y&v)mLEqqUh{q`QJ3M(` zU&%AkCGHWNu1(^hHifU|@pUu)tya=8dtZ;loy70Kg@u#lE+$xii=e{<&){N$O0H`N zhbP6UVOl~GaTOafFTsU{U7PsXt1y#Ad}Qy_A+`rK7pJYI73Fz8>+>qTKqo1o&}@o= zmgB=3ez*11q>QUSwh_neeIKG$0e;>SB_3mx>&bS(j=mh^wAfIVQM4J5PjEkaJdcR! zQzHKoPHJScES^$x%A>upqOe@^PJ$G@v&i1>BJNVqop521A^FbxXD~**lBn@GZA9^u zlIS0fMBy@$sQHgrk!O%{D}=joVG*K5E*gW#RfIO+v`F!k61j9dB8AJ7w8={BN8IPQ zg5${E;XFb#aV`%wrr7j)u7?b{r4GQML^uEQOw)Z3;ZE#ng%QO8N zr^Xsu4C!&W=5=!5v8Z>A8K=W?9d2R7<6Vfyr1vn{DX2FVZVS$`_kBQ~!o6`WPwDhp z(c5?|msr+jjj6h@o$*-3Bgt_dt`a3u@GwlxEqI{4-vv_&PMEb#Jf>3V%~=e8g)CoZ zP=j!~jKou_j2@L@7eSuz(I%0IbB4$WZV@glLZp!9jADoU;wya12|t6=Ld8=`=o~=# z!e@m!Q?2IxnkeT(;t%1%B12@}sNyoP%!|tR12J(xkV^d%Un#L~-i=scO|osLp}nsM znT>0L3yTmDn|JvG6jcYJ`s1{s;wdGuD$}BT;qoNiXeA~^nzFtD;Rak-gve6Gjq1|s zM$>zUc?ze+il>y=*PcPFaC+iaTCt0ex`+6KxUk63indvgq9+KQ#c7FWn=o1|B~rc% znlEggsNb!~6Ns#VtB(td5TodInMToeL|=u|V#QNRYQ^`FDx99Q3UV5p-_S@iR?Q*I z$Av|R)>K{`?psReF`O1Do>C$Q9YmyXd7>s;k(-eC4)ObNVUZz<=KVK_z9;YSh zwMZwDFF23)1}h_n(O-GwRKkUYOKWxT6=c*TDhH=!=%q&|Utk{V3M*nMBCaHUFfJ@i zT14$n5iya_wKx&ME5sNnGw>0d$GgGGIE{?Eh<^|l7A}!duWIjbaXEjiJ3A6a*_)m(ae{m@&$Hn9C zDsm+KoR(BfusIk+r>pZywV7%9@P0+Hm|Y3LO6U(J>mFiGF3WAUfK&jWj#hmRIWfxHIRgI#9fxviA*9MIQ1xUNdN zj?8?O{~=n~P)GOfq`;1*P>^*oXOUBr^Do&e4*LDq;7aMwF zi>>%D@HRjPdT{ZGbWS5v9EXMx)TQwX%zimLQNXJjBaX+v-pbjHoCRPvdUC{roLFfr zvB-7yK35mU>m85Svhd5>9}Au#=*j%ZB6C_ZqDS2Kp6r1UBODXR3vxfUxa8Wl0Ku21 zQ0n2d39N;?>ng^(bA=!?Hov?Ew?JN|?6Kxp5vLJxC8!ae2=Qp6`{mWLk%E+C)IbaF zYwx*j7#e_k#A6bVFqx{ItsW<=jVbT)^WV>@MK5@9dpf2@>X zTMj=GKL8gNCaFJpM?}OpLbD@WVlqmOwuQr!Qn`*Pk1*2iC;m}fSon2q{GdJm%(RGM z_P!hB8vs7U>6~jFb>j8V_gpxxp=ox zYbp32!Tx(b{+rPZa4oE>y`Ki2LF;OW)0Wk<5-olPLw65$i-qT2#?uh!uyf(rtnOf( zTP^NIdtVE_80?!KKBAny^U;KKWP zpOk%`SNYIrup8(^5Rc=ut@QYq9^F2u<6GV%^(41wyJakE8Kn!F8H`#kMiv}QB9KDwRwp#KU zd(Z8{iGO6je2#o_C?AgVy+QoJb~GlP#e;-OWl_F2moL0t*2>ql9RzY6I*Bs4un5sv zl zvB(utY<{wdIJ&V$dcT7ylG?+q;3-cJKhqqpVl zm0|tPUWTg$PVIUUC)tkpw`_!Gtpu@_?B0=oZLVV&!MB5Sj^ebr#G|H-7%|GJGvOqD zyrc2TW7F}=`=$Nz7HPk{!ZiOSBA>Q89kln|WUC^*c|%-SB$NKc@cVceZif%(JIe_< zZAiEcm~J?ouy`0~UDX!B!t4qB+6vC;&Hq=3FT{m~Qz}CAbep2NtFS8N1 z+I#L5%4vj%wox(BRA)2x^I(T9d@b$pKHl+T;Q^|>dr0|91KWXp5J`CT9{{Z@IQM(pc6>gt zaNH{l+H|98)< zckPqNz5nlfp3i#^`OUlDS+l3l?3vlS0_mnezZ<^_o5OBSqle8vmyw?&vwDpDeH+f# zVMwm)_Db)tm(bSS9_C|ui>sgfZF35qkg2=2x<~ZKUVXBd-j}}*ebA~-Gj zOmKtzy$H^y zVc<10!v*G|(s!gkiw z$qn;*cVo1Mx+&>;n1Q@@(8!;oMw|U+xwHyX}3MwwuI$8||rnOs9><92f} zyjT9yZ#!nD?=kWB?2kszV13{p_F=Zep7c}DSKt?K8F7`Xtks@~=9Syg>i(20i01OQ z@-gK69)TVBRoDb}jV_D-VvX9~aXIy)J0#mx-E*)F;L722{BoCx+$SH+OF-ShC)RtOsMn6O*iX!8SK(v-f)^N%IP9_Z9`VcZ*@RSDf^~N(4gu;#C&k zCM2tD+e(D<%1=Rv)7UE0+K6dQhyDnD6$9~)U1OKUf3e1FhY8!n>32-lSkLotRD|JM z{Ngoc!Orr~^DD8}ANYAnW;(CHcC|3tc9hL=J4lYlkfS~>Es}-orQ;5)?QzZaUy|Mr zk)!a7XTt)IC);q5o>yRd{wTL&Gg~joTDS82RNjRMjKr_PX0bEVHvWs5u^j^U7HcSf zhhmJWFx-z{waqVYgzcYtl-SNZB$@Y>u)hpzM_imZyWHT7%ByVlvS+s!dxwWv!x@gl zas4`Of?oFQ!ilTbCrR#pl6yjGFlv;Vz2+say2tl8qw|`*=_Th4To@0t-H4=*$FwiP zFJ3wpcy}|TACCWWdovt*UV-g#q`-D8lHA_dQgcpjkg2vDfG3L3AIGo4rnZZ$SNwNC z#hLM6Z2Pv~7LM_RjCmWzTm{3&_{GcOD0{7&9E`uf-4J~%#lI2$KjE#93#Ql~-ymUf z@rQEF&nmTdP?NBpJ~<7wu`<#I`P*|K-Y&t2r*q`Eg5Hgs#W?9n2Vm@ffjCyBMLsbJUNcnG-Wj z_F?RHi#y(zd)1&q1I+fM12pfkl%y`j~xjM55&qvEByj2XMso8@Brrso$`g z9jjpNB;1I#UV+DpXQY3E=;8VOusPyI)eLqzjuvOji?N@= z@H&3+q5?!WPr=u*bX+3N+u-~euDZA=jh%AcjbpSuDvgxuZtN}%aV612c9T=(??#M$ zFvdKBV@vf9w$UkXVCkI*{XG2Q8MRRD!>EGYadIoS<1*iH$=h=<-imQSF|d{A-6Esby#yCzu;t@|HJ)_~ zaz?JmJ0O^X4LjZ%4z?)rYLdh@`84koq-I+lywsH2~gt zam3F{^2+VF%(qJNu0-B(&~L%70%IjB`fJ<_(6Lvi)@&rff%5k@B-#RfCw>)nta#gM&=mdQiQ_W)yAjTYxVkhM`P+FYo@Zk0u}rO1`3?LVpcNdBZD`m8d+4{#Mn8pL+fTco zeNtTN#LGH92N663sC1~w-F|>lV*wBZS;z*o+7lU8p7tfdNq%SUb zeAG5p&nvJ=%AdzS%x->5)ViH)D?+w$>hsecY{-;1|!^+zqm9>@hiItd8&L zF+%w-_=nlwmZ{9aRJvEfb7t=N6*i+?Hud7aST>*91LnmTx*ETD*~CZG+zMHnfoVUK z^m!GiJ%j!reie4~c-bsKH4hy-;j~ANyaBMj3daWg;$;(8{lJea6CAP!zJn7A4%wqt z#D8&@Fmnoo?Qnazdx?t_*X-q$+YC0X{jcEg>=i-XB z8*{`pX?f+=$8nA1XmUAfnC$rWcLe^4b9`^hb1jB$#xE{LTyT89jA4#iDk;Vy#XRUw z<5yuvikC;_(KsB@aPg3Mvfh7R_Y5XeeNJvqcH|!C+eZ7FemH5Ru;_~N}TOa4~ zTA9}Y$nhieZTMB#k>aIz1GXwU-Vo<%-z2b_^?O!%bzBWx@2<^MWl z;n<%_mL?-nn}!URGK+=y9;e`1?1VR_9-N1dFZQ!FBB|7ksaF?csKvV-k|FO>w3goS zm^gM#z4~Ybxzke^*v&iP&Asp!jZw9)Y=yU)dn9U4QRCJqR%1Fhr7(duGcXU0U$T?M z1b)Gp>WC&u${SO?aY1`TQ^tNe0I_|N*v+Z=H)8i5m8P}l4QQ6NA4ellXc3K?ON71Lc3^^%I{ zsKuEk>Gc)S`HM5z^oEM))^xVC37aMNW~Wjw_>cSV`S16L)90sAh}oA%3l?YgX~4F- zy+2Z^W$AqjoukEw=%>Y*mfef4kg49ApBkSoz(nH&Z1dW?-^z6;vuSJZ!D{jeS40Ds zWU}=KFxmWS$%bDM-GOlTu?#<5ZS2XEmsA^T4&|lQ;>V z@^v1Uh=)b`Ddlgi94`?oZ=(EtH90*h+Itz6h#4ixwpI)8Gb%d9hC49)d$n-4QPHqv znbP`qGQ2RAx;|NVcAB$CMRS&A>X&R}xMgZddQUs+`G^)=6|Gs8DM@#^D*9nrrg{7A zS4j~TrE|6c>pXC@L?-I`s0I1R(a|OO*(L>+uN@r?c`nmDy>4_g@wrT^^zf^r<D+x|^xVHQ^*i;wN%DV_pZYa@UrM%M zJBj?8CA8rmp+z@GdoIs3Ygl!QSho79ZRsUk+ji{RZjJgZ&m3C9cA>q4unZg7Wmtgd zQ~!!)FVB>8-25*|&?)5~lRi+UZXIm<**hBLIw;xu<54SakA7I5Deajw^^AJ9Px4ZJ zPfWZponiWEcSzb_>}rp9I-BzW%D?K?VC84;i2A*d$u?TSFgBK@Oa0dVmSlUko+cBc zaka9A1(v%_jAp%%DQ?KNn!QJ{^Dj+z$SM7jiP4%DGNtK(lcFDAz~XK;IcoS~rha2FE0Sshhwd46LgWxPXC=kTGY&2&k{GuHQoa zcj&q6eJ%o(@oN05`ch+K;NEp!wJET1a1VVrJdv}ZY~mE|fIoK%b*IbBP4%j+mi?*E zjHbSt*{iGzhwrfoa+czy)1!aCilxZ*#=Xa3$cf)QJ^I8-HU))Mo{z^RbTa%5USFXGE1YZe~h3j>1OJIw^l$ z#M{k`<|BXEsf@ptSKScIj6R2+*E49=^KMyCO*!sfh?Y?;-ldy?)Q*=$RIeM z!DdWk)m5tQ$*JxQ`MbNLNpEDb{cF#XGToPAxE{hyDeuEvR_&at#)T?`dNx%%Tk$!= zs#nd5Qg3E5_3vc#aNW4F2+y4rwR#g9>9ez<5B%)D1x3(KnjMwDnQ4@sJUhDM%}lnG z&G~w`>Y8v?vTm$z#q6qnyJfSf%3=(#xm9mJPTi_(ST$DTl9oVaL#W=XdU~@m+eJ-e zbuWBS7R`UKX>3U*Z|!TTAM`<9>Kk82FdQnNu77<6%kp1};7PD+kLuu%VWZMCY%}Cz;JQ7V@g;^d&1J0Iue6@x<89;|e)dC9`z}?OSIbPZkUZsxnB+ngI|ByP)lYR!L zp(6{^we5avgXy00BC{GB(|V3S)C~<{fcpPaFm;U`@HD#)i}!4 zeN@J`=Th10>;#%T8r{1(Q+!BI#vel|_IX{-FxD}e5u9azO`o2#_`i5G`e}8hL3-k2 zQQfyQrHu}MT&D4&os;xrTx{x$eD!$L<>WP`Q-YpH)(eW6UI{!Mj#?)+Xdfgf^C>^9R{jZk{ zt6e+JeG8&CYcj>@|15}3T$4FFz2V8|!8MuArB6I16M4yh0*0U&L(rccQF1* zZu|`kqkC<9C&&M?`uKZ36Rkm9Th8_V#AYK0iw4NgmUO*WbYWS!_cKzQSdN!fL&%p< zj_*z46N;5@tR}1bKFar`D^n}d#_sryVE;FDoWNxTS^3jya-7A=+bQo%DVfmb; z(I4+-TF1Ns`npW(rdIE;Ove5RSIa0$PFaR8i^i_Y)Q?B`&$8&Ab(xdn3Hr~=D0kTE zxt=)_9Qu5;_j@wN+UKJ-?_~~+$Da1@XxMvb0L4x)vs}i096MccdPvUbGZ}gw>kqdU z9SeOquhMf9QvWRfO8oG@B>TQ_ocvPM`Tb18qb;-XWP8N(zxoyx8eil3qsZ=u zHXOI9Y!8T7p16icax_C==daOS?`N8&nn%muM;qY#RlWay=EHOrO!V4EnTEBpeyenkXv0UD11?G*T-?JO^_90Lq+!|X{5DUdXQeXnXzBgx#eaL! zvll!srHXf%I2q#z8N&`OO&?qor>++@`Z#lFrJch6+1T-jS0!ay@;|57R!fLU$r$re z#an*W8BfZ!I8_gywc%vZGku_S`t`g$P@L2M>0Fp%N*Z^E@!nKnFIj|z>7z>?_m}oK z=kfFbh4>fP&i>QE{?q>OWCf}=wr{`Cj9O&?L%)2ov{A~hjhc}gKJS$YhZkWL`B z=EQdu_6vKaTNI{`D4F0l?a{&hbBO)Nj@r(@CyA9p@llWoSS?FY1UM3Ce|U40C7%AF zsR{o6g*H@(ks-e>r9#;!q}voCcT#rm;nc{g&pys{^PAZ%>s4ud+rt3>2c#=7OR^W+ zXz)sO;@7y4vb_Bj*@f2T@rKRHjb0V`y}Z<~$Pk}lZQuk3K1LwjO!gTYxt5X7G0k87 z=j>|pACLc?g@3(*lkjhPB>u@iv*1SLtZY$;OVxb}(`Of^+ZJJ^qz4wJTh>pvEV0Jd z?LX<(d*hFHo&6`>+Tc(AP4*vebb4Prj>@mq*Z#wy+Wjz8+q){=!p8iY?LQnU@OHD) zFYv;2TN~ZYt5a!(-MkLR=pWL`E91Kkxk0hlWKa>E1ice9@X?55_^g(+3t|H zFE7{ZEifAn^4_vl5;_-bN2q49Ygcj&q*4pg&1KuOMO=^@;ccf4tW5&P=he*h)vm@k z0Am!qB@?-^R%%N+YuAL8TfPKD~?Q|Qhjw-*;WD6{xygE9j zB%AQ`9DQYuUhi$^@AkIy-}ZL&WLdURoafoMqiajDMU@94CqFOuzTO@86m1K);Oax} zYHX>lldsRc+Y54MVjks{wNkGq^JbH+q`UyPo5{v^5acf?Z@}3#sn)Q$&yQP{8$DT)ZP?H< zzclxL@KCOJkF#>icVbJt9QdVnj>VRdA8yx}|5fkE%Bnv9n<%^aw@KI{OU?QGPm<*P znlmbT%^9U!b4IEEa}C;!ro+3@FJ;+mbl%2{iP!$M@5XCC<`p%A_149~Mh9a|eyru8 zW^juf_3dICy)NqUbEZSQ*!T^!_iU})CCg8uy}Jrh{!w_GEi2{a_hq>)fsWG}b@PGf z*V{Dl{u{41%26$B3Gphoa?(aoAvT=tb_;GVgJ}4Vne#hX<_BNi?fJO{VK6m`$*{eQxY54%U z#>_SPES|XnJE4tVxHa(hSF-4;uYoTp=d1y{Qu(HI?n<>f-;B=H?WFjow70F=t`mRS zld=2mczd1Kge!8v*U{UJ@ubv_dfYcrr%jnA9qi7#_8Tc>yz@4uo!=IDkJ%L&pRMee z4Ze+T+mt!9hh=`g<9%7J0Q{QAo2k>chngehBOedd6-$!~b(^I3chR1|WctL#YW028 zpe)-h-hBDxk@r!xqg(IlBYedO?uM788*s+! zZmg6<8`3zMHM4pvr8IV_@&#^hou2mEK<3NZwz7A# zJFfEGY;TL5WMzB{Zs&>bVtdt#!q=#46oqe9*C-0#kFHS^z6@QXD0uVvU~D|teB!cb zQTQfwjje6;kMUM@fh{e+UaGOlw2+UPYHTK*C|BQ1E}~q0GYNijo5|@vyUk?!FS4?# zZzl67|6?;*%SiRjCxNMZo zo0Lv{^LVvgCvKY^#)QTD3ju+O5$a`(`^<+BrOAn^@vGj9*ExV_rlV z{eV~B>G(RYXX{*(qk!GH`2MZ8N%sr8yYRhPdygX*k5-Ofl8x&h*W*6qD7PQ+rPvzT z`4(%9?0oyQMs~hx>eWcjS5LiUap<*5@86Q;VP~98YgAi7c0sk-zRLx59_4>5s2dom zzF|zKTz$h>vb|Q+wiGWz*g~A}yG*P425>3me{KMC7^=Pj@N-V@ooX8=zwY$Vjqi5< z9^BF%#S4QnT)OR$ssC&@zY=@+wCk+zj;P=7nX(?1`7WgQa<$dU_ZxF$J3D;c(W{>D z)g)m&$N7KAG^-c1h;q$>+Cp5)Adb-f(f;7Gd2wxn&;GAqdZ$e7D?G8=H+eV0j#QMZ zC$fDob>Plu&mEbv^zfZk2kpolX{(ZlI%!$w_7lDBWYHF$`% z=jL=vxou5j3i1ZsA^-giy73$vPnDM8U7Ywj&W`$230gq*vh~ydPv5cozkBaZ-giq+ z4WeH8C`$59S2KBkt79Yk8rje>vdpKucekvbytCCn-qR{;`_EUT^5NR$3s5%j)a_A^ zTG`SD?4#cM(pGtNliEq^NM2SduKX`AD8(;#O_8$UASkaH*;ku(^@fer+3~wK%ROVW z`mWyTuzLJvMSQf&d9}hmJ7u5k9^SFK?(1ZoTAkgp+nRt0*Eya2uX{JT2OB>8?2p~P z{WU(h)Uz_XQupwd!T2FgXP@cbMr)7X46=51jqc$EjQKn_?S=rmJ@@v3Jw9q$m7Sn_ z&8XIaiayJuzYDV2GIm7nt;*AfLiTkG^co(uuAOaA$v(k7edDVx!tDRs``gyTN=>m1 z?CSLotFs$#Zxfz1$o-Ag*H!RM`dBwuM{lGr6y+(WtU{!XG9joyr zqkX@DU08c9;O!<4w+#a5u{vt%XA4hc7t~&x)Qx`sWDQyaJASrHMIQH9nSDGbay%U? zqo?NR8b8~-F*{=R@F?GJgKD{hq+Z3oBY}4mUhuPgM`1sCKcTdveHDV85_>D{^x|tl zEAQ%+1*<2oEYweR{pafn_GO8GzOImgx{KEptUTkvXnvh+wgLNB^_r$`NuMnTJ^OwH zx>JqT!%->yspff~=|ZtDN3hS*M2;7VmDwe!_nUq4kt|yK@&bDuwH5qwd2i+a@krB# z@kmpymhB_YWC>Y)7tb!OJOYmxchBzn5u}Yb!6QZ+XMdUAk2*{COoE;axIBkau3n}EAb{|!{orV5tGqhlLq7lt-2FL+uR-4#YX z_Q>wzp=-dX0#Kh_@Ok&8Qoki@*VcjFxwGogJ+ha3ZP^Q+he~f*&GyM?p7afuBijXo z?&zXkduPj%WH);zpoxg@<0W%ecFO|g$-Rc2Qn9^Uw9u_Rs3+U*l5_CJwZDQb1} zF%k8xmo4(p$3zT0*&#$tC%bj<{~N-dL3!5$iNYnrW&{urV+>t!2PvNwgA8QEik zhxc0-@FAZab60iUR^L@!x7Bx5*KPHrsyn*AUbbFZs<)$wh1q=6Z%5-W(`l*CPQ+#_ z6EUg4E^J^AVgIbew#Uc|Rz~Z;#p^X}uHIYdaWk;b2hiqxbW|qWu#~OD*NCH~_ax57 z*=xknz`Bjs?`bzhwv_Hgw&Eo|ZdsYFpXbQ-nK&CX_inD{M(gE~$!0T^Y?9nts1>=k z#B57ErzXozWEa)G*1d~6N-O`DJ4zd3JKe)Qysoq?sfM-_unls@l?yM~YQuQu>|C(j zZ4aMMwveN-W!a2}rjDbr-)Azl?Y4}DjIE`lj4c#W4~VP*O%X@KinC2UG#VUD zD$X|7ClWTAJdvoM=FV2D^ zyVJ2n(Hb%v7_A}iqBh*-&aF_1Mwe#yC}p#rIaR;=!HDKNqkBuU8L4S$X|}ljF6xZ!i2je!oYHL8L(`VgqS9=;_H0cuXVKcVZwBqQfQJ2?7tQuXeH&y;JT$=4tLGK= z@e5jsixxD@X6oDq0SUo@|sY_0arR0%*i5hWfjx9k*kQ_&Q28 z&SvZHqVn2?U;RC5jqnM(s5rM_HgA`%s#U4kt&k1qmHu`q6#W<{t=vU*z8#wl zndH>wTbV7CRiZl z8}zE##?d-QG;ZH)Nhw>`@T$krltvPd+rqH*($(W=_rk_A9c?nUY9Y0<_S9`489bf22pEt+h3!mA?(3T&| z=TxQI>GH$)oT^kiK0bht<~7H;?Diee`sO&^PEY=N_*y(kjE}*iy;|T{8mtgJYHc-VDV)k$Y%yQKF!e#D@GBL{UKG%)AOAq)n zpFFpVdf%G;xz>n*BZrh%9eEon0mPj1;k0u{FElA@6ji*GIyE}zj_e)Hd$&7m7hg*| z|3yQ)_6?%8gUZUH?@uo(i6$Ogl&$*vj_l@C@dYDyJ%wNP&$f-~mK4>gI%sk>KflTO zXZLQ`{=b;xh1P0X_OSfuqTcD!d^@?SK{K;A)NX*$+IITq7v6D!sy5u4eY&jdzgXg= zcR!asry$z&d0D2Q+mKO%E@~G|IyhZYwb#qpYw}y~Dsj8^g9nW~e&EmxuN;b%chRXM z1`faC;_?y0j_n#m)vbDaMRxffQBj|C(Ozxa4jMl2f}w+Ym5(eR(e;Ap z*g2^NQIq4dnP}Of`gN*aS(oipuPut$U9r!I#@&}XEvi_MEv&j_kD`-zuZK;l*T7M6X-^zhaplk} z2337jQuNf`(caTi*{XjXSTr)_b9qOfonF?aszuA9F=&CdD+5f-Fc}4s%Ez>nwu>g*bQIqkIcJh5WeXz zzpC$u@=;esdtaU^j2-GXwDMR_uX==R~+;;67yQN5~Do+;|*6(@_e zW}^!2s_tJ@^ktiFd{}c*c~Z%r&I^5VFQ*yuSk(eUMl%az|0*i&Hcn#W)f4*U>z!uE zcc~T_^4;arjwvbYDv??02z~M#ry253ss)Dpvy_SrJZw@==##fN&5-w&wja`Yfg#tc zh{hg|Vo9h_Eul{?a+)CzRxL1OG$PR?RjjFos3r8tL!D;GpQ;uZ@@Ey(PH=_#TpgiL z{>o{F{Jm;{A)_UWcnxll*bnLneezFEGvv0HbE^pqx!vVSF1Cu%UOk~tKE!E;JWI8} zkn!X%F4t^{-J_n+C*S8ZL*AlVV938-9yRHV#U-JwY6*SvcBdI~vk`6<$<0SZozqx{ z653BKp-(>0X@;D+!lfc-uSn*QZGRN2C-ljsPBY|vRSOKc*%eXeBQS>&YOa>hC-3hx zL++?rV91AD5zWa-b*NfGpM1E}47s~%fgzu8#k3<`p-xms=#zUo&5+MmEimK(vaHy& z$w2jlKKUZ28S*gI0z*bSD0BWU(q&byme41UaGD`ksumdXSSc2pR2iq9&?jH#G((=G zT42bNB^TRanWCQ1Cr@*lA>X4~V90Z>n0A<3@b{`C^vMr6&5$2gEihy}?~ZrFCnPps zJ)uv2%4vqYRkgs7w@EIx8S|TZLZ7_DX@>mhNVoHl(X!0?o|r`mJ+79}CogcCA@{!0 zr6Qwons^rbNUX1VLZ5t!(+v3+)dEAt1OGVJW{GW4Pw11kIn9vo3|zU$cxfQc#l~`` zsVDTwGn{6~twNWJj8=7Qt^-<2tc`j?pWNPQrhRl!=ipj1yC-lj`I?a$%qud-Sk4lzST4J7hLZ4jVG(+A?wZM># zrr%!HkkPi$oMW*T#opbG=95oynjueCEimLMvb64$*i`j|K6$#+40)Dn zIO_|eO{I97pDn}ps0U|#;rpCs$Qx7(4EYDi#rBzgR8Q!WH#yCaYhC5GE;3qkTK^Z$ z84{|kme42Hahf3?r&?gh$6uAqVi$=qr@j0ppP=J~hWwjqfgx{~Tx?wGclCrmd8gA1 zdH>OF7Rd*UPRhmRs18z3=#yJH&5(~!Eih!f=hWmxY+VvMN-d#J?(8%}9-~@d$k!lM zJ}$THGCy#fUA-}6yV901aYb;Vl-igJni-uk876BQ}YQmY?^h>FbBDzKP*3QS|8klk_mj85?7m7qd5q0f)>T5Ms3r8tr#sD%FHx8NTD+^?Ah8?O6Z+&^oMy@BWbbe zTx{lUk$OU(ywquieCw?)7a8s04LGi(Eb2ZBho~E***m)s$T$8gnHb*&y;(h>Prl7* zhWw;zfgz)Ly?7x!C9$W~6Z+(5oo2|tsD=w);mwkZP4#V24=#L#w>iy_+urUL0=eDo zNxArLYkT#e8bSCFry25a)dE8G)9S(E z5`NZchJ5E8ZWhT???`5mO%O)v34QWRry277ss)DpfaGGkg%7GH^vMr9&5)l_Eihy> zayYo#pyQmfza@UE;m9K=lt0nZwCppcKFI6otZ$RiPcgMPBp^5(+oMQT42aUlB-B!#p*#dpKz(u47r19fgyL4TpcBL zhO6Z+(foo2{mRl}1G;c=3S zEu2nJPw10xaGD{{QVn;x!m}k8TSdJ`J-EvizRzifyjV3HIE0tnnH)G|aH(2w;1GV^ zX@>l^YJnlIxifkjZ{>BB&^u}geeyb|8S;;+1%~{S%%N?q)&BRhdP1MP*=dHn+f=s} z$!OO#-XiKqYYp-;ZlX@)#bwZM?aOD?u+ zJ3&3zkcDq>njz0p4I8pBn!t@$&1@OIM?Kh(h3|8kA%CD+V8|azE;gt8k$OU({HfCn zd8=x;*%IC+xwgshZ|Xr!v+xe58S>uK+~!9{YrXLUKnWG91rGp)i=1Z22dfqsa;s@k zlf$utNvO42LZ95uX@-2FYJnl6iQuuehDAa>)DrsS-cB>*b5#or`8=eu&v4I^*!k)S zeewlPGvspB0zIr@FTBjNEXQ~B;ynb5z7*`^ns{@a5g}-u| zA^VZrO3AxLa*&kR?&`roQg~0N8FB~JaFrq4F-o2Q%HW}D!4p8?!<}Zx15^tPd0TG8eGQT;8kP(7hf9_=(kzFD=vkZ+O2#rCOhRZr-X zZ+Ds@Kd4$@$a5vvT!}rT9$do;&vTj~zo1%R$S+DRelhuydP1N4s?!YlUDZ(CDZCE3 zY|W_*zNePZCx7TPL;hJcJg5=gB*kK5+rOv>4{C&eb($gXKHY7pIvs3-KvEuCh_$Ey|?au>_hd0KKT=;8FH-|Zc8Pj!S?mG-d#eq)q;mU!gZWx$SqV03>j^{uRjW>YYFYI zme40351oM!Q>4k51njt@{T42akl53H~7OMxf#=^^-X2`Fr78o*G=U;ALj*-xtY6*SvDyJFp zN2&#e{IL}4V~KsDp3o<+cbXw@QY|p#UnJLNiEU92>T!j)In9vwoay!-@?JBOMb8cf z_ErxbqYG!8X2@++3k;`nNjDXOUk-Q=rpy2KKV?i z8S+Tg0z1OY9T%VCxcI?=(Z+sajyje@ZTP^YFKN@Q{jp7q=ul zq!MnVT42bH?@G2Vwp-9tJ*X2FZss&YZlfBuF5$M4tDOwDR}Z!>;X|Be$URgG47ulB z(>z>tNu-xLLZ95%X@-2RYPc~IK2J);J}b^w4{pqaFL0V6hpOR-DvTa3;v=dIUZoZs zQH94i&5)O>78vp}Db_NHJ*S?~CogxJA%Ct~V94lNBR)ERA+ayj6Z+(DoMy;*cXJ~N z3^{dol8fDRq}7AEYvEc>Gvrd$0z)p7TIr@F z(M~huQ&bBK`P94PLswS`ou(EXx`fYknjt@-8t#dO=S#8J?Z^W4gg*Icry25Fss)C; zN^-HYlGWIr@F?oKo0CaML7+*ES0XO(@_6Z+)lPBY|VR0|Bbv*cobEXS%R^vPYEX2@r$78vr` zv!Vew-gJ{tf3<`@`8=l?@+j2;L%wQOt!RzC!Is!)^@Kk88mAfZWYzFenD7*tMRp%E zRXunqOnAD}4EaITaDy$3c3k3v#9SGENIkg07M|xcLw-gzJm3^Ye>L_2CzoE8TJV5V zc!|>txz=oVydf8;7W!m#ffGL)J4s?aay;bTPBY|5s^NuTVRWMt&o-N?nW7%N5G*{+ zX@*>-8s2vhUL?8LzRhCw;L25anbQpURn-DReob<%kl5?$!Gm4ll}_|0g{W2@eEWC-VqnR$Z3Xrm1=<@kCt3)!slxBgg*IN zry25e)liWsjP`!U+EfO0n2~(x2)HeRAGhuKm!Eo2rKQWrfkzl6_y6JuU64 z7Q8Pj+`?&w+(k7!=@;%gH`%zDtDAa4pM0Xz4EaLU0zMr%5l3aMU(+s)ULtGnyAvb?0c{V1Y z{nUbIW5NeI&5-A)78vrq4<$>UJy+eYp3o=Hb($f6ty*Bn-$*X@b@i=!LZ7_BX@=^P4|>GqBBKYb0X?u=OXy&=gg&{A(+v3-)o?u^-1(8D zSnQ1JSoPp~K)8$347tB*fgz*cuK28Rj>OJYPw0~eIL(kl)o{}wJnE6;ra=a;QVVVx zgvU6|kf*2?81kJ`EcO~URXw;K5T5QdL!Pf%V8{z37dskzQayN@BfQXQhWxT>fg!&l zx!5_`Yw8Jo@*7Sw_m~&oMM|WXI&c>$ z+}CM_JXkfn4=a4hyySgY862V(ybmip)MeZ*F=d;QcviU?{u0W zANIJ*MLzuTBo{l;J3>9UO%^`dX@>lzYS_4h(b=Az$EejS#chh-e!@+Ryyl7I;zvU7 zs09~4!t0!7$i3#fROH_Cqvc(39*|HUwS+$TWTzSOWvbydD&e8?lh>$ZaF|-~8kKN` z(+v3<)o_g=eC_K{>pqFyuO3|c2+wtzA+J>}Fywa@MCklljYe-Vuz_G^vOp$&5(PjhALy>o=?Xodl~Ab4jkKs`#Q~#FH;Ri5aFRu zCr1z&9Htf=L4+%uX2_9hfgw+q8JsS$8S25~2;sY(X2?~lq5461k>pw=!;95}>IdOv zPBY|nss)Dpp5%H@V(+Ub^vNGN&5$>#hNoS^zep~&g}X&Pc-ker&1r^wz(Tiekq=y$ zY!K`V^dR-%`#IrOPBY{_s^PO4;l7fK9fnXEh+1&{ zCp^??hJ3kdfgz)j-}ulrLSk2_C-ljI(+v3*)dEAlbz%IaOIHc~OD&;Kp6E0~en2(6 zL@xZG6pP)XKBOL;RD|a_&5)~9!oRhw!J*Bp-Ch;Ad*V2OYv+IL(lMQw?{B!rP@- z>?inl_23Rsc&F10IrA*{gTRop&n6oxI~Oii4?gG+E_IqAAE{bk$VW*o_DFoRdP1Lk ztkVp+ziO!Y5k4o$b-+0?e6D&>^CLXKX?RETpw+lXoTC!92;qB^RMAhpOWG8z%rTJP z62lXHU^ueMEhO?$Ra2Lv7FQz2s3Y{r$2rZAA5$$bbne${D){Hbbaf=T!@$;D2Z*Q+P=$zM9nkpEOIFyy}^7khU8 zTRph{ATQ!l#{GwIv1)-Kmn@1p+m;<9R9`LlrdYUv(+v3_)dE9qxhSdPl+eLyK^3QP z8>boaF{+`8Q@Hb@WG!}<;bYZRKxpD!XHbnk7f81_27*Z;q^{4u4FiT0MA}C48;Z4Ec4{@Yz)q>a7 zgjYGuke^!O78m*HB}uW^-}f`>!NV-!MNTv1-IuytWb_UZ&thGP?V%pj+6fz{8FGKs za2ypz&*E{eb7c5j_24)vJiuv&{F-X`2v!(9liOU~SIF?|>cO*8;gwD^PByE!DInnkKPGJ^1chc&5_~x!!V@i(I%o z8ekg%lu%YJp-(PxnjueD4UedWXDm;O#SZK5QV$*@3eR?$As0zs^!BA2a`6kv`A0(a z)q?Yna090q@_5w(L!R(LG}eAEC86up68hwuoMy;dRl^ry!rPF_-d${y;osDQFT#X( zIL(k>d(ka;@`@LeT7JMWqe7e&Nx$es@ z6?u=BlY21cN}4!lRvL$lFv44EeWLk_}?J#C}%~?ksbcT)|o_X~G_HEw@VhE7xm+Fumz=`=&WMm0Q65We=+NG<>VH*z}fgzu$8n$!c^S9+kFZ_u^2Oyrn zfE*L~LZ=z>WYzF)qwo|Yv&W%sfH>KmY6^XFSgENZo15PvKj@#W_k`LLQAKiNda!Kq^_2BbV;lrI~$bo8sA&1Bn zpHTquOpa1h=##H@njt@|T42bJFc~0DHcw5VPk!8KhWxH-_;^!zolTZsTza+)zo#C2 zy(#>m(+oNLyIW%9BGp2l-12wXApmh<56&@>+c?dTyQ+r9B!#;n*}cbNmB?^+^`K21 z;gg(Z$S3S@g(aW3LskhOF4#$GLi6Opy_{yqm#T)F0O8A+3=k(9s;1B_ryY+er})`sY_pm|pS;y+hWu8ZyU-!8 zQZ4k!U*#q5t$!u4uX8-)@0@1HB`KGmTt5|GNS$3@Vx{T{eR4ym8S=8U%SC=pHGEqn z{Czqp>-RFeA;&}h(P>86bNSQ4o|lx>li_^zgg&{p(+v5?e3y&-lWL()&aV}h_3Zpw ziNBWowYNWHK)g=vo=JYQfLdV4D^cQKC!egCg$o=cMT;y|93w`p4I?1va zA+alRJmkP>hTLp-m!I5RH8h|ve8lca{v%}g$Q%#(7^fNXZhN}?K-5dAMq!PrlA1`LC1M^*J8$O-?i9vU)B*xq)i<9!|Jjy(E7-8E&8B zAs^y2L(a>({N$8sp-(Q(Ci#mcR+8f(mpRRlpDlLz$yKW1yC31Vij(|r$?&Qi4|$E# z4Ec^ym!CXQwa_QeElu*zmDoc$9`Zb=8S-fjU4HWEs)aszXu~A`P>Bu8@sKN=X2?Ao zyZq!{s^J|Z;R_ol`7e~=i*h{V!A>*e4NY8r@(-%v{RLrkwG)3km1-(}{`3fFR) zAvbU4@{?OMOTJ~0(0*#cw+zAuI?a%Ws)nj^;bG10#Dh#37_J8FSHhP&&5)<5hVQ$D zqh|5(uUjO;)72CD(mqaA|l;j#Bu}jqx`s86wGvtmfT`uw=EtA%fBy^}+aQi8IxYG=I?7=P-dECLW z=p{B@Jy`U@*E`LS-%~9x6+S#R;G4G(#S*8XheO zPmo*_WcWJugg*I3rx|jpwOd@ut>eYjJuNX$J?MHuxWH+KJW4fugDZShYxxFOhDWOh z-{1;g<1|BFsv17j7haZ>tJ^Xeeoj5Om=<2{G(-MXwZM?KO0KOE+om2gXD$+Lv`wB| zNvOVB@Z?Ikfzu562-VO5g7A@TlMWDM@F=yQ0|epDPBY{|s-f*i;fvcQOY3489;_a; z{V05?(+s&%H8id&JXUgzmEm#fLF1~z*E!9QXQ+lcZsD1dYo-j}r5@D(3eR?$AwR8J zV8{z4*FuRsqaM5pAiT(FhWwUlXp2C2mE>9_!>iSUwg`mRI?a$%?c5fj+%8%6X^DC2 z!JaK#;50+tS2c9eCEToC(nXgHHdhPoFogGanjs&hT42aWw~Jq{lE^XYz{^#_$2rZA z&sPoKObZW?85|(P1J#3XriCwZnjue6EimNkkjp-;mC*HS!P8pdo1A9IkE@1Wr-Yx7 zVm%?l^VNfQzJ#B0njx=NEimM_+eLFua>ZJsme42v$7zQAt7cK%! z_;;rn@}BM8rbXVXeX?ooB{8F(&?gr<&5+xv78r7S$<s*PQr=HL!4|JL#k5vtACJT>~T;pVTyn1kbBYeHn40)bvfgwLCxgM3+W9kWg@_eTm z@)xQFhWw@E`ch(FsVDTw-#X2Zhjwu5kvyz}y*-e?a5doeK=^W}8S=!AE)jWB$7F+; zB(cfr34QWZrx|j1h|5JDbx88zu7s{q3qITx9^*7aPIYprlsm~GP-32Xa0nDGaGD{P zsTLS=1Ig7uVhz<3`s5}~Gvv;y;ZdgWv6Aap89q)uXgNZ-tJ4g5q-tozOZZC3b)^gk z>Ir@FRZcVH2UWutZo+dV*IXHXNIm!%L3p0i47t`}ZrPIy4of~)l2C26;BzJ6I!-g> zL8{>@LipmtlGS*z3=dWht|Ejlb($fU9PWxmu77xvtG>ia)q@IN;f78#{*a(yeY@6;3eT!p$XDa~W=-p3o;B;50)%Sv9nSCwz+J zIz@(0RZr-X&v2R{->zC<$ahGtJ0vzyJ*WT^p5in^UZq-K$g3sSYKgtAp3o=1<1|Cw zt{UzSgnyS@zsv9r_2B+M_)n)9a)Tq?dL%bIGFgueCDuqip-*n=G(+yD8eYv2?k>5y z%kT;6LCc%MJ)CC96{-b>e7WShTw){C6Z+&Uoo2{)sumdXRLM0}V$;-vPA7$DIL(ls zPz^1N3D1{Y^JRE}deFj{@Y7B+&oqR`I?a$bsfLGq!oNtaUu1Z*dhm=- zc&pP4x#Q7p9?6Fsom5gu=uowwl1lh+rx|jkYPe?<9(#1MxW>xxIQ8J3QTRHi8S<;D zq3I~$*Cf|#GQ2`Pp-+C(X@V&g=9r{hMq+!b2d#?=XPjopXQ~z$@>!DWEQy`1 zp3ooh~YS2cY9EqtHkx=)7hR}a3X5}xZcL*Aeoy08@fL2~^d!yDBT`sAOTX2{Ju zyX8f0(K)FSm(YG{L6x}hflf2zd8*-BT=>z>$)bN$h96T8uEmAtJI#G5tJ$@?6iv}q-webs_Ct%O@R&5)<7hBvi^XB?k2CMJV3)q=*vgl9R;kk9Jk zN<}`qOWbl`R|)l33tA2oKF?`}yh=5kv4vN6Nmk-&8Gc(mIAaUH<1|A)zN;%1xl7k1 zR~LzORS&*=5kA3bhP+5MG=nR=SaL0v;U(%pE9Jt^In9t;cXQ<;x9OIYtBu6kswecx z9h_#!BUQr>q;38)Poxi;j5fx$UmqS81hERwNYX}st4WN3U6|nAIQ4a9^hx@)*_7Wv=iwCna-ujSOF_p3oj6yBWV z>bhBmx2Oj#BnWSFnjv4?!_6VNGOEO<4&5pxG*&I4PoCg3L*AlVV93Arh?>~%&Ly-} zEul}|?leQbq^Bztc}UM>X$_IsrRu@6LE&LeGvv=yLw_#9>wCuixyaDx>Og-k!e2Sf zkWcUBN<}`SS5m4oBzC5H(3-w*f2SGpDZO1T@~OR(_Rb}Anp)6ku<)5qGvqf^!`sTj zZ}zSgO*#in#LDnW_28W(;nhwvi)z@ign#XmY*{k6RV~=Egtt4*kT2=$W{^CjuWVTo zyHq{cvV?~@&5$2Z4Q*TqKPb5#l;OGR34QV-PBY~7ss)Dpx#ap>Vqd5y^vPd4&5#@P zbMr`U*e{vKh7xO}9^4ZPH+7mJ4^jVW%1L`>LS@BH<4t*9S8Ep?c7#i0~&)Gvwlv-SQ%roSZyklu&)O;2EQE z1E(2sTh#(XZg+CB=-WxGy?W4Sz3?GUGvpqsp#>u0o+rmA9~tVU4xD_1`#Q~#2dRdY zD15P$>S7rltRAdH;Y*!n$d#($)>C+_&C!{bWfnUZU!4Bw?5 zJgyX;?KDGvS~Wbb6kaH~7RvB5>cQhm;YCg}CnnjwFy z8k$ZQ{_f2w+VUM*-kU3jC@4EfAc+;&Pn>y%{UI!j__s|R<)!sj~8ke^WvZEg!c zdrH!&unbnI1@GPoFL9b7w>i}ni`@3qq*!ew)=oX4Pwwb6Lq170w5TZDLvr*T_HoMy;ZsfJJNg-1)S(K39sdhm(8@U>1ecx3#WoUas~+5!33qUsAuk&2a*-DgPI4`l*b?>N zeo^>2ry2675R)ylVY7Au`|_!i$UT3PBY}+ zE_1oa+b>IUZI{^Z>cO|F!aJR2$UTO;T;!g^oi0DSvB-ID7;B>ZIa<% z)Pp_;g@1LLA?K}hn-@8?GTFS+67$r9huFdePBY|vRl|Ec!p&AD@A1fBbG6_-9^w6+ zX2=~>Lr0s!9ako`^fGv;T2MGH$lx%wpcxL~3a1(J7}ao>Cw$Gynj=lT0Nmp{?2KJT$1O$RTAjb+C6%_#?C_X_@pMV_{qlgcnV#IRn1Vt&f z*s*{Cv0%Y~SSVsdK=a}$bG?gv4h(*5&c?544G(+CkYce$rct6DI2m5I6BNJsDn=knjv4{HM!1#m!epuuorqCxz2$v3YsC$crUa(dGq(QxiXQ~!uu4a zleY?*A@A%pnOG3K%X@l7fq9^Jkt+&#cF+v@?Ou~dL*TPetUF+*ypPPN1wJ=uhWwvi zOBnKpB-SE%n-fV7dzZp=^2dT^$lvjr+zErPK(SWBe%JfRoiO<7pc(S-ye4+q=l|170U+hP<`c_#}9bB zpc(SMUX$YoydPrqgMGC3k>dw^V9*TtSg*96#Wt zTCChs*bBXn96#WTf@a8jydPSgyyyFvz7J`=ypK%Z2i`kqhWtve$#hKMSG}*d!Z4HG zMQ(+`rv}ZCzu`5Rp%8re`??pG!+z8I$Yf^V?*z?|H~1h_k-XstdJBQ1M&3nkA;6mk z&5)nzHJN?}e3*o?^R*3wJ>2`qk9hF>pc(SZy(WWm;FAz*670#|M+WD>uL_zWANEnG zBKh!-v|MK)?QHKOYqEl$8#F^c&T9!nUht82R3we}F49rKCj`xqzwEVyA%6wMdKGD} zc^_GD0epGT40-*vp^D^Ytya+>t%3KE7puS<2hET-_gcb`XChW6(pq>QxoCj53YsDB z=QWuU75r$#>JNK>_mLMvzy}4*ke}@}`R)ZgUt^`3Zk81+x_lNIf&9SFv=I(OT37E= zm`>h3XombKuO$q5AH?c|v>fkKm`;9l&6ke@MG*@(u|@z8Q7djI=G@M?T~R-xf4O{)^XSB6{#&HP#uw z!v4+s$lQS7(K_xMnHv!NLa)ix>fj^2R+vscb)9}tJ{4(K@8Ls!UC<2q3a`my8t|3t zv_Gtb{jT?s>pA%9pc(QHy(XXPf`5cqAHiPhedJSJ@K1wg$fM8M7P9Cuc-rS$u4=HW zdmkCu025XwcqWrLP$E7HF8KJr!)cxBKG z`O1wU7WumybtD~0tGtVhq=T;snjv5BHCg-$e8Wa9)&|&Lcpv#G0{&Id4EaG{hGLQT z`cg;lkaUQ5kkK~hOI_9(=0CiPyrBVpTF?ync(2JC9pIOIsWrR= z_NCrO*609F1kI3N?KSzL5BwU5Wq+E&ywcD`jvb>3jt+yLlIxuK>J9 z&7*TEdV& zvPDOUko2f`kx?S>CxT|kpY@tNI|6?W#d;3*^WI0E9f6kx&5(cLHCeL{e51xnt?MG= zxqEL7%}HK&tF}R1q}B62GRHf(37R4A<26~106Yh=a$xuMKC&DEc>kao^3%O0E3ku~ zu~pxrhIyuUk@u*<&kC9$ztC%P7Xvs1iw9KhJ2~l5{7)))>MTZV?olh-lZ^|{Dq(y z@^8JCFyz}%tZhj9&ifRmlWz~2A+P;y=v?IK-)iSdN7`QAM<(nAuNyQ&-o$GOL*5jz znj)>4_mOoVz%zqp$Xk0&23f$f5GxCI8}B27Ea2^eX2_59noJu2e$=;a+5lL6yoXF1 z0NyWXhWtXWNk0W2`K|U-m=}2$>8Idhf@a7s_nQ1T2cLurPJ%tz`^b-T@T-Dm$oJkB zb|QJ*Z8$?9t)BOhGX%H^njvrJHTlpIeE)6wxeUw$yo-D;1KufUhWrq($x?yfy-}>* zun+Y>+wr@nWwQfKs*E5XBiIFLW`yB;_kS?o^Dc7#2mV3O4EYyclM5L5MlJThjj+G;KJxSy z{F|T|^1Zi*CLpi7-8DgOU8L3XKGKuHP0$Q^Pp>5m`9a$;@QAct-bV%=!FvbIke}@} z88-pX*K!TahkcIsk@-TvM+D7~Z}VEhkbj3*l}P*E`^d01_>Q0%@>V~D_9AcngLc0x zq_y!ra+(Bh7c@hjwj;#ye22!WhP3M5NABanYX!}aH}YD-kT>3;Yjhx~iFc7TI>0l6 zX2^SaEn&zH-l0D?k#vZ6k)NC3hXu`$pXIfLAwL^6%tzWe-beN#_=unx@~vJ=81ios zYa7zO^FDGB2HzeuLtcMpXnAt8Q(N93t%3KEUl-twgJ#GFcuk%`gAd%P&!A!EdKY;H z4SsCU4EZRp$s7gXqfxBUu*Y~GnWF%FT+j^p6<(8 zo7d#{0sqcx($e4u@6sW!gLi4`9s;xvrpXTrnjt^WYjUXpAF<2rjgBK=pYMI-QUg9R zXl7*U=zbX&Hl5=odHEWAu7(;o7xtarM_#@LpBFSkzSwKBLMQkV#99J-srQi;I>Da{ znjwG5YcfeQ_{)g(GVE8pkIc~w{(8_1`4?W3(?9q|#M%h^OYbA6fADXDX2`$yntXKy zz8$f)!~Vhh$X8e3yMkuO>;JgNK?QDp#6bnSf%lPv3cPX940&^}$#6b+rpD@+3A=^& zk>PysRzWkZQq_-EyL` z>w!>fx3)-apgj=C>jce^clDaACJNqdx3*w5?C#!2-Y^C~C}@U!xYrVf{4B&e3u$M2 zA9;QRes0hV`L$k481m~7>pG-e?|ozfXYgr3Gvq0+$!gEwvk_}H>^a^?-bw<$D`iVm{SngEdLMaK0RCyv40-3DLt~P6`B~q(K+=KUMc%pq&kmX)Kgnw{6(@M! z&)S-Kum^h|`G^*LXwVG#&0b3w@)(l6sD8k7BoYi@|yHw@YyKVY}j+W zkMv^jyMkuO@AaCzV+}qZvF5|R&-=(b*5D5Y&5*z5wS*ym9kE_V+8f?S7Onz+D`+F4Gxp?rdK{MnRdo5we z$Ns8cDIjT_cag6Yz%L1!A)o2Bgdx8j#X4r3Hs!HEd)*{IA!vrY$ZPU-JouDx?rZ1* zjkF$UBav?mnjzohHF@d`zPUhm;%3-eypKF}2HzGmL*9LS=n&*R#=BU#A2+MzmRO`0k(?@^+Vm1|#495^XRkpR425zU=bs0sOk4 z8S+xEB@FpOHrSI$e9Ai&rjtJtG(*10Ytk#gH%qX-)#PJz6#4*Pcp0Mu?-Vpc-uTi` zN%AI_Y7c9Qv}WE%4sGzvpc(T0ye40WfVaC;zYu}Bzju)@M8G=)&5-x3+6_!8S<`$Ar^VJLVeOXNt2EQ+A|J$PS6bb6<(9^1Mn*+ z>8XCQh8hR7p~x=@njzoqHJKU@{HMwKY0ecI>SCY`MP3jzLw>E-^Cb4Bgpzi$77yr4f8v& zA5g5_3rQDy7wKN$1wk|9OT8vPD8ZK%YkSq0sl}=Zw8bJ%51Juw;x)O418+K0pX)M$TM!XsF|WHWc}ZK{MpTy(Yr~;Ah>THGDaxv0ee% zSmdt<&5*zEHCb8?{DYLnx^A|{x*lj_kxvVnA)o6tS@RD3&e`@0-+|~WC-^=iU-*LO z1LNSI`W3^~`X}A+M2%J7^&;SWWLF$2NF+&r_!U7j zp?UDV4HqM#Y_ zm0puM7{T9V7Zc)wm3t?dgc1C`pc(RSyp}NJn;2{}61R9Kxvc=-7BoYCWDCvQwix+Q zEo#krNtQZAQXlUkFP?z+3z{K6$!jw12%gshrwbvjl7qdI3_OAl4Vobz=Qa8M0=z(i z-CHvhY`pi87xcg<1kI4o@S4nj4Sov?Cd3u2*gMGt*x)mRX2>7%ntaCz{;&jlsb5Cs z8L%JqKJtPC_!B`hcW){2?P}OPAoSeBiTvQ88S)#vmN4WuN-(z? z_Jeop0r5|uJs`**37R2)+G{dZ5co59yMe#cVJ`MAa>)Z<7BoX%b6z-3$!mE{rga8C zcAh>JIu`bEd-#x_7&JqEtJe~S{I+>|9=Hu@Grdn?I{6(zGvtfCCeJj%mmt;>*h{^S zoH)Us3z{K+-D@((GWZ*awH)@F-bX&@0)HoHhCJti(1zrFAJ97XMOr`aBa1A64+xqe zKig~a>Iir~V&%g=$NR`j2jC-uX2>u1n!GdyJ_)fV!Jh1Wo0X4D10J7|XdNv|ag`BPe~+-W#Wru)N1uBG5Jf@a9S^_slg2)+%6Rjv?s zLix@+$>V?0SypP;6fbR;LA@8^-97g1w7HO&YtRh&NnVpH zAb8#)9Ug&sk#~{d5%4iVGvwpFCa(yCUxH#?0{c?$Bd-X9CxT|kr+H20X#k(TNZ+G_ z`JQ)?_vpYs2$~`P#%pr#0lo>v%6eK`vJKGPV1c&_nj!D%HFy_`9FeY$j5n2ZWq7{q;l&%ru*F^Cu#5*K{Mn_ye9LDgD;icxPFn`LBf94`^c*f;4cKtkgxQb z+`ogrYrEI6;Y_&7`^aZ*;A?_r$hUY+<^%`ditd#w#8vWJ?1-sfi$&)GY>w;#;+qVw2BtM`vO4b319lewM+z0OxG(*1HYY9XCo&;NO$ET3? zzW0&kO29t~nj!zvYY9XC6$&=+_Fwh5m<6C*18S=GWOBnKx_3>`51a&R;wa>6H zoqTi94EY~klSy#Eqb#(T5Em>BXbVPOBWQ-ax!2^)GVn|UJ5z`Y*1|iTi!P@{VoLj-8O$**nSY0eIJ-8S<07CbtLRc?dS}W995b8S>A(mN4Y&5bTT| zD0NR?dU+ZHesItXx%oZRlDvV}G@^d}r+ti+opY)KZ8m*pJ>xo(Y5h95h4zWZe*q{HeMKwg`z&dncJ;8GK35 z4EZ7TLoo8*_2v4NE46H+X`ch_X^MP9&bx^1;!XG&04%R_yJ@+}Ye5kWKL zn;V2+S+#7dNVv8s9|5mS8X4 z!-xF2pc(Qzn}qn}cX_QaoqTx{=~L;_+DLnI4jce^uk@PS--5p@vE2PF>{Z@J?r*`@1kI4I^_twqfXlmE z+A*Z*T=Spqn^mSe1s@hPLq5`L2}6Dnn|~A%M|&r^GJ%f`njxR=wS*zRNrIgtL$?Ew zcC+`92@AoCgJ#Gd_nNGN4E_WQCdAcpfp?NucEFzunjwF|Yx0sj_=~n+_FND9CGR8W zdhl0+X2`$vn%t6tf5n0caRvL@JIQS%_~xJ)@;|&Lw~^q{e%O~nT(C5tyNv{|5i~=- z#%l>f{=N-XLw=AU?L+TVm`?t2&(fH4P2NYQ(+A%gG(+C7oz}zN zONC!PO~rkMlY*87ifKwC$0P981Ve5{Qr)L zr1J;K>H|2qn)riEzN7@t2$~^3&}%Zq2Y6RG7~32sw?MGFc^{eM1H4Dj4EboU$^6#f zW4tEc0)k&B@!d~NA#V3wzlRg~w4fRCd%PyYRp2EO%)U{=!rtqBY+k8oWgJ#GVdrh7Of-hk(AuiZb?<9`{!JiA7Az$S+`M@1~ zwFFxw_xr5nd)`Mz=D|M*njzofH5pa}--?0_{F|oWtFWWPtM#EP$z74iV!9Mgp za>EP$anKBTlLItw+r`M69)NBk#1*WWcan!v;F&=)HB zTMhho1{30f{o$Qtay9Y}nr1tHHSlI$lLsx}86EJT1$J}qBM(}@TL#UL5A#~WkPnww z?hro=h1X|cqf_85&Wy58S?F3OBnJWY$fdp7HK=Zk9;x( zzB_1!{GN{7yK>V8UeXb-0mHu6`^Zfj`29gMh;wJYo;lALQ-*tR0)+73*?o zPtL^(Y}=Fn%?lUU<&X!Wm^*#Z<B~ zPk1e1$O|Qwdr=)}mwO+1Q62n>pc(QTy(VwWfKRjKviGb)+7<#^836d ztHXld&tO7aum`-8EDsC*P|ytd^InsAw839sFd;73i{44*BLROoXomblugTpB_(upf z@b8*n{%|={?9d*`X`*azCFe9zwzraVnkd^_$vI`z-#C$buGH1F*IM5WasvkbY0wP$ zmtK>hXz;JtUVr0UR=Ekao@{wMX$3x&3G1w>wqrH{_XX!{yf+(t3FxneP$2chC&^gYqyGC>GkDwXyK3EO@1(dzu+}lcnAC=iSM3l32}v8yN46`r$IC1XY^2id%TmM z*#p78V8Eb!4mGvv2zG*LqF9%>ciS!GySA*Lx@VHUoTG&Of}%`f@a81_L>~k;6vpM(f261bin?H_mL$E z!A}dCA-~vbGF>hBSbMgSm!TPJocEEJp}{W+njxR;wS*zRLSnh$K_Tumc%^qLOeZf2 znjyc@Yx0ZVrZalxj0CwayMJ|k#`{3)-=Yd+wM7)*!@_Oy4B*L=X21kI4I@R}?? z3cixTgt%budM8$?Nw9`RiUw81gq5Oo$7%+&dMflfNA_L;jK15{7&&g9&lLKK4$9>ExdU&5&>Q zTEdWTL9jEoBJo@ABrh3)R|d_H4?9#dw>^V=xYuNy0Q~+#bz~wnsh`YI&lNrFR^- zukSTk))m}HEZ6)(T)`T6C%GbkHx8O1Z|*gDLI9r0U_xB57T!sQ%E4O&&5$4IHJLjO z{HVifxnU8QeY}edi-7kFnjyc`YY9U>LCV!vCfN8Ny3jF=;r1h|tG%Iy;`hKBH8uXZHIZ*E#dm=lYH50IZPh2ID^3I6EfXc% z_I+wE)laUYcsB5oI+{KWcFVmry#w&@y*2%J*uU4)^m_X!X6>Wt{pzay^IxQohX1)n z{l){YF}nQ%q@VQ{>EA;)4R!n0z#a{C`(_PPulpD2JE8AvtbR3`C^l=N+aKCU?eG60 z{ayG!&`kZ70arBB?Ta&1za~?0Ch);bO<#lbqQ6MbZ=u^AyRYKuz%l#k_V*)w;9sOS zZKd1wX|0$CJg>EGzZCXoS(?5LnAS$qZ`rB(H^A*cSy0aPpR<3|^d-QTfwIn)O;7&1 zLys%2A3~hs*96h+?}API4mPo2f%*|g!X|zWy8?)nL6Q+j)B~$q5V@!ZaR<_g`(L6N zwg)!3RBbK@(GE88VA#Y#&Q3;=5_vce2jW=R#3IdU=s(zCeDO? zyJ9k$2Z6W+_Euo6%e4T+qha?4?v7!{N$TGTcti}ZgngAm*^?hYAda1^0f;}r{uwyr z3QZ@DflcJ<2*lk;CyvCj1`Z|vD6L2X66GT4E*8Y!uT`6P*Y#=>^KMX^SmQ>uiA!J; z7f;i4i#Gr0rs*mWugAg&Tu|Xj*u?FyiCip!IBtfoh zPh5<2&OHAXY~rV|iQmKKgz)v}YCZp8|ga z{tj$?rxt*-%6Csf=m9)FhG)ShPJ~T-4mNQEY+~A7njx_TY+~{-2*jbVi3?y8SHdQK z1Dja;Zq1O`1~xGVHZU2T0fBfqY~oDVw*xu-$G|3D1sj-*Zi7I45H@iY?A5^EfWHIhmuiN@_h7F9Zd$16n}JU}skWkY zidP`K3S0~P7+CWu-Jlk*cMOk*O&kN8I2$%`32cY9Q+^16_&sb+)ZJ;37J!%sn|LAY zkwDIVO`Hz>Cg20W2L;_hu>=BfHEiN0*qedB#&DmfwSdIdusPp#H`v4zVGFwaqmdAZ z*TW{>3wu8B#Tc%GP23He*yI^4U{m0c9_wquFbKm^^(V+daWBmIz!kuiz#|vyW=8=Z z2R;FOIfkFZCjJhan6X6T0h3V|2*e!N#7|)pe}PSGvJ@2t9u4ddoD{>iU@OW_d1{#k zSOnxu+{9teYC3T_Y~n%BX*%&@*kgh30oMR)zo7o<7Hy{(4Pgv$6>v51ju&+UVxuy( z8w2M6=K`C(r0E&JtAW=5ckO|$Q*yp=;t)*iO{|C6xA*b0aBBu7uwReiWv^*^0{A0v zH?Y;~nl7jZMJ|Lvz^h{T#ap_;M&Pa(roXM}!~?gsAruBLOMgCVeqDcG}t?e2SIWh4Gfd*Iu!&RG>1M>0u!;QUmzegs`d0(Cis6vAA820*7 z(+>s?jUhj;AYOxXVkvB5zppf&qI8Z`5LN@zzE%f*1JVL^OCZ0CAewK~pLhgp;)$?{ zT{o$}L)$sWZBd~BI5mckz$QKio464+k*}i?bGB-H;u)|lx`SgR1mY#IiN&yq%U~1v zx+9U_ZWH+mBQfh+Es&tgKROBmaU^WwB-liL8$sNEn+9wT>>a}qu!#xSiEX$zp7Nar zAf~=odp7Wq7_Np*+z6Xkce`#+JP0;1A9j8ca2$v_Ci(XfeE!oCV958R~dMiFrY>=CIKug_?9(Oj6sC9sJv!zONo zP23KfXnxe}h?%f6Q=i`;XR#Au5^L>NcVai#*}$`6cpYrwY}mwQu!*@pY5YNo$!HV= zVhL>GYp`DjeiXwlKWji@9&F+a*u>ee73C&6`UZ;Ifawig@;oFjgS-m3x`9jX+)%fg+DLH*aB(A-{4vbpCYpQ?aCsA#+`qBP zH$i^7YH}WuC;WNxZ+OS?6ud{354`_S8$8L?Q)KFJcU;9EOvfH1|I2e^Zr49Uw7~66#h)6+p9;pG0&Q0+f}UUH;KC5M()K=Ro92%ETI(noi_;#za}0*lphd*ayhf zg=K|cmrk6QnN;E5JujJu4NHOX=Og~{#GTp~=*Kl@iL!pID*%^|Jt~RiN@Xorm%#N~ zi3QM!Tt<~BOQO2%9s$Y{rq1RHrm_mDv;S)FKgm&lB1ip+RY(8-_QC&T#L<5)4#{;L ziCmhI$ki2zvQna};Ss>W!2jAfsPsP$fd0FI&-gfId|Z+l%X)aOKtwL6)^w@%4UVF@ zK``6@{pi=r>cFuf;$MvsF|e$*<}zFcloivQT@K`8XGB@J%%xj&#~&9RBXZp^qO1Yt zHsBIqvW%Cr*8sU{7Lf~I5xI61kxNYp>haIzqKF-_>}8sXB*fL!o_$Tb^?vi^ee{{Sd!C^-9@ zB#118;DrCbN6C^LF8kjdC2Nd=%jEH{0z}U7PL%oDT{;odswX4PuP$?>I|m}CGAGKk z+4C!4N1fFb=aJ_r^6sS^LC!ay?fw98;0ASaC`a^7bm=Uc9| zMh|m0hUAWa1dz#;T|gq|K_<$a#xDH>Ag3cHaz2OhT9l%Yu?;x>p6>`|9lNL)IRGl&pnHV~K2$v|X64`&lO7Y9-1)o|&%k|3NC zgDBHmI0vFkQQ_o0z6Zz#dksm)3`Ta7HpCA+E zb7EHz1MC#T(bl&8e+&}%K`xQs)DrnwEKxpjbs6vrSAKAK6UHz(21?`@DAA6Ay5sM^ zJs65n&?A5>2tQgR$_I$9z(o0WP>+9pM9A;|i1IC;+knW=@QD19jwoNnIe#KQ9sBdq zOFMX(t*2HxUWEWe`PRz?B(6J52F;o+u0K8FiL_MNO&R&sqLWi?Z_eo2sB)-tjEIA3 zrlroiIpe@az0XK3_2@O6SUEL)RUr(*SIip*hho-3f(3Di>jEsXDo;Fo& z;>6ce=g!FJ+OT|(eo;bv=z`RI(d$fHp!&oGsgLdU#juG*{Znmkk?jq>NFjc+B6Y6l zb#}j0-xX{3OR2fHWE|4+Wi_*a?Ye6{-TyP!pWNt<;tbQU{}1X#Y}q%}wpcRBKgc*o z;_dsT&K14Ej#C>rowzx5Z*fMqy|XUY=vkLHNPSYA(QEH)2-zaExK)H42st90X@xup zc_Q2?!oK+s@-NpcZa67k;M+1xoo|+FPTwp~W!{!?aD(M*< zyQ=23P0hbe+9+qc>N(p}AKR_VU@zIOex<24GcyjUwq$$ijF}ln)!6_!>YkcEGvnYo z8}@7H%5?9b)CRGuUp=Nts>SUYN7kvCY~m8qFHfC&yExX{t#+3;QuD2S=!?xOT*j_u|{^B+w_4ure&KX5_XS!|9m{QFl z|4X&GBco9&Z>edXYI#S-K}mLGrdzBY)ri=StLil)cH^pgt%&`(s$M%{f3B*hN9fOb zVqjwRXs?JJo0`SyQJsh#yQ;o-#ExB6uN$$0SJmr9?BS{-|LV~`5j%C&4eCei)Kzs8 zu~S#o8$|5gRrQ7uJ9!m788wR7*{dW(jU)E?s(O=%UB9Z{G-7A3syB<+>8t7)(KpiV zyY4AkUOj3avET2RRz1p$%C@H_&Cd9sTK10AkU1G$lkpmLk`2=Sq(Z%&{;w4pAbPcE z?72U=wdnq+-Zbti5*{vBhl2#}>LN64>wKYT!DVo(yf7Kt!QGKfDY0_eO zKWGi~^cY1q!@ppQ`v0mYlISJI;n`ZlM4Lsg5q72h@oCVPx$Npi551`u2E8W9 z8$r+?doxw%F6k+!{Y5@}EEUg(%eOP1t;nAXl4t70GCEk$HUrld9~>*!ptoJQ8c8GS z9}9N;+o`wi%4nZ9KlS}x8O_pOP^eJ&)xk0CWFs3qs;2!c3zCaeozbj&E4c@;yQT=chMjjX^b+XBQdj#o)opgnJV~~tC@t3wQkojAhn}~p zs%}Svtbb)pAC+1!rD#4$l5Ht^@6w*hhPmD)r`_csxfnr;U*F4Rr+Zgkw36PI7KKw# z2NY(W=r+@G`0Mp6iUvyATw!8yR*G)pl;A*RoRcLx@lQr2%d2K=O}jxwY=gt z(95CQbE5sbY9IACZ)riDZm&v>q|IH8i?yT~&Rq^s(QQfNyXI&3N4Hk>Ps+LH&vrrW z255-k(O5Ugd9UgQn^NmbSD`iMulQ_vJJC<;_CPX>V$0N`f*@Z4+=wqQDDK~Le&;Gq?fvU?LoYixn zvp_4M7du`0iZ)9WUD84~sH`TvU;fxvo3>QlRIjSfhn^kN57-wO*R1OQ67>8%b=y~m zx6%!Y_Drw^XsvolOn)1C8T2giwSVVlseeUGPiv!kR7(paZticf=&rA3#S+G~#RheB zgEDN;dOy|6V)`o4)8x))MC^{Ec{{5&iE?i5?jmF(&Xdri+q>KPM-dZ_*q*0Q?hAGMV;nLDw~s#?+yp_jxmp4d_S zD`GY4+(|PiiDmo+^rDzPC)rs8kr6kx5%3~YM?xuQWOg};Ph4nXgXv?tz+eEh+=wTL)vfISXp1<^?%aoa?JPY zr3pD}HDMk$_#oBhLAkm4IW^_MjBaV2QVYdOl|Gn}kv81%w5bXYD=bx5Yvlfgeun6_xD|7&cFNaW z{3ddr8|xeg9*unz+u#<_Z6~OR`EP@N&YhZpT+!WMUVn{~AJd`_OHcw#h*!0-Qu~b_1orjxtMOzqFk7|_lb&u0d#>}EK@xh6?~!zC!sYq zV1u%Csvj#u2KKMU>6)?mO7$VgcqsIOpH$x)`{x$X?SWtMi?$vQ{P&*0GHY<2R{do|) z0=*deuV|aAhyQu}4rjUeoubm$s`iMtT!I9z)S}$uiY1Q{Q&XOlqyGju8`%6y-`D(k zBy`MIy)34`1-(3`PdG>YD`NV-=c-;A(_dFzt{xv~#wnC*;(5A333N7KjS;Gs#`M|H z%RkXLJk+|#MZi|9GNvyP-JOQ7wCyDM_eREjFVKX1mk{*T(4#l1Htd-f{&_*a7TskK z^Pf2KPby%qUUe_B8^~bB_gdHMP@q}R%b?GI-ad8fBI$+4DhyYcpm2kOxaDVymFNyh&g?};pQOD?N)%!&y zv4q(OR1^!e0D5sue=XJEnT%$~tV2He=~|B?P%d+^)~^IQd+^!NbM{jID{JWnt5V}7 zTymo%+v?}Va*M`V{rf-cBb7b>nmYYopQ!BT^hVL3*n^5}#=&z-#yV8=hIXu}EK^UL zY1oAlI4D>bdugK6nIt%BLW5&6R zqnti_i>DlM_hEyHNGLDV0?Dr?_xGIW4WxG+gx-bnL~n?03(9%28pD4l<2 zl|k^|CA!Tx8@EEtxS{;+vIUhlU~T;)XDVNd5nnC3bZHdV$N28(hJ?>0>jU%#q^AAgzp z^D~K4q0bZDW>D5x3v>eXKSZ~kuIvFV&~oTa66&AKxlrvZWe_ovult#^DPp?9_)s$4nT>=zIhkh6K(G$dB67L;**f`7$6+M>Dc{3{!^m*c_hn|^v6O~)PfP|0{72ebq?#eP{|lf$D!L6+gyWt~y#{*a zvD$J?a8K0yDm^;#Q+hr~c0iz>l3-gRueI(oHr)x>pdzUo@Nk+ay36=b&EN!W@#r4J z;TPpREE`KpTmK`v>(S9k^G!xQkx(>56EabtqeORSu4z?IrFrn*|8Vv13jgz<=iu^v z9rT+;w-w_nx@@7%&Oa%qOq>vykXEE6&0eT2@hSoh5ZzwQx|eI)>;wH&(QO75t*Um? ztD$F4)m_FGT`Ib5iIUqSz7!&QUH;j>jYXP4Ier_lC8|x)3^-E_^&_DdpRXA-vO(nU zEYWQSl><~iP~~Vl^wNK5#SRwzBAeEEs%F4fXnSFUQKH*G=1twXqo6+mf6gq?3i@Wz zZ3|Vb)Vflyd$q)oZulc^TJg#+;9!ElQd%x^1BXJiFoXb`$*h<~Vz6rRcUm#hbN2 zpCQgsQWL8e4b^k)`!yxO_O{VTFcY;U4#x&hi*B2gpDnSVJE7;`0$&UMZLe4VJe+x` z=ZkJL&c+?Zc=#8I?(Q~=hw7>AbR=w*1bcs-gYj{+X!IijmCe!KCwD~dFY5-)nBQ6O z1aKg#Rf7tq0`w}o`KHqskm!?N1(lN=3xspxKRrfzZ2;y zy3M$(k@ktxc(-}JB)EM%qv}y`0|N1_VrIO;`O9&&P5XHpSKKJtF1pR>gt*9gh3^ z1M&0mo4+^o{gcylgS_F|DR|hN09_`vcdoBj(=A4dZu4D#TeJw z3vu2O-Bth}^(3PONT_iW_RUF}LEAJ<=nXwZFhQQBr(&_WBKm;RtxO3S;y zmC%=7s4d#e`Ah%XfP{+qdcd69M>ptkvlggYH{F2y@)*%=4LDCN_x)(-{HlV5aJ?p$4sIXvUn>xFz&spyv!#e;)T!M7O&pXQu8N zx$AX*v*BMVS1EV=ao;RKLeb3{C<_~`hMv_%J>P(yeTx>fVvXwWVi!z?KI;f=Ikv=f z(QV6d%3wKT>hb>^68PP7Yh5$cFu7VScyD5JJ>ZHNub?Wp_Zst>>h6QF;8q!wrZ{EMKM zXKMvIL;po|+d0bJJ7LmOSfXaLG=nlc$7qTThC#2qT8|$--&icVZ8o57s>mwQ{d$Vp(9f1ak?r!tm)qcSm6pC(}I%})?cY^;i#3?&Z zYs{<2UMY=lMySq~K2-FitwG)!+FzvCxxW*!0lyXFftZBOnRNQY|8CK3fyz(U0)2w+ zy&k$bN%e`SS-sg>Ao=dd)<24Pjyy#YY@odNv_O3Ld7J3A=}PXd+KFC)p7WUM1{r_i zbU6XU#wx#K91I(Ez?mwlHb*nA@vGhy$t{ulYbm;Ip|!KMa~%l1AN=zM)N{%q(C5Ox z6gOoz;jH~TbbbW85Bz&4=V}K0$em}5YejeaxV7&4{jk%vLO-~R7U($CIJy%pgrASD zb4ex{qT4u?)iukG$oMMJZN-wD*u4o77GQ&N+`5cI1|9CwKs|objDLgw5ztFwzwXWw z-FDv6ceDbm*cDEfJB!6`mnEa+2vm$f`LT1`W1`!VVqU)J3lyl)-Kyu@pois3#5qWG zn{m-5&6pKC0sfrpzoqk+{+Dzc$Z@$$I}w}i0nu&K74*}6ycrp!&C{kX!$Vm5cNEMD z8f!tRA5fwN$|>-)77S2p&Vi>9T>a)@`VFluF zDu?#)uW_GdT((fp2g&8=b)6-_U7hA=6ZOUhM?=p+?`3a4AAyQ6^gjyzGoW+vBr)CJ zd?B_1SLFbR$>FrFU;%xR_L4`gu7t){Te8Lmj+_XJpjGzSKS4S6Fs0cHn@q) z(u|`{PM2{h&ZNYIzLH>1ASJkX9DohRh;DyBm*8a$y;8{6`S34Wrzf04;lEgPTjSCd zdfDa0toMUjAh$Y_?f-I7a(@>hfpa^u25*b*nr=VsD~IXTH0tnA?6T>)%Zd=EkLcFF zsEfAHO7w|w@Xx}Sq}`S7_`6vWY;P>xPa~gOQzLDIULI-2>BykLL+a1@iuZ?p8gwoO z&>8v+(QSd+9<6~3q2K$ERud*4W2_FPE2q$^aJJ0V*}+OknU;uv10l2W= zA-Zi*eo2jdqYt5T(*Mq5kU{N7HG}M~da>zJT@$*CZUb?C$gc384F8g!G-I~h9q{KA z^asHI4eRf2_`k-M`MA1p%leOL39^pg+ig<~TjoG7Ia^Cc{}IrmFST-*Xf*m(bbBHx zMK9x3ZSTijO_C93t$G$2w9|x$3o+@1S!TV0UUZ`tC>{P+h;H{qc6V)T9#;>+pDQ|a zhW}dlPa0}_pLFZH==q*veDq zQ=;2_$4RU1v;Ovgdkuk#@!P5e0yS8m8RvhZP1*(r?vc|Ia(l`Q=`eE z+l;xq3H|4a?uG_SYUl>?Q_KB*EeZD2RuCH+{0SKpZ>{b8j)DJvrJ6zF89kuc)aOFy zG+I196QbK)W`@*tCmjEZ^-b8IsIC^MJ~DVzbbFnx8@tYKgFh!4VQ1{KPz%KAIBr9n zyF|AcS7I!*yuoNq>G-53M4dI`OVHHApqpRxxMIzcqT41lv1b7PgnxbyZHacs_&L$D z?D5v?ZERUNsjf?76?Z}BB6++D?Ee(EJXDy?GyXGd6!c=;ru9UgOGMXW{B3w-;|XRX zc&xV`5-|roJBeC%l;5s4Cr-!Cd*%y8xBkTgb^ptu?f&kCKWC+F2tDIz=bwxg)zwq> zH8_jpYeJNdw?VnVm7?2>xrPyY>P*q?HMlZ1g0m3*Z6|7TGtTRXU*wJu>0=DE)&-KY z(Q|r@Z^E0+a&H6y+Dp1rELQ)TT{Vu&K=iJn+m_?p9X!+uMRz~yxdg`f$apR` zD8eX!_U|bA3>nlqNi#SC{#)T+d7c)OeW>XY&A1>oVAKtIWt+Wh{pB4F)a(LDur=%u(M@xG+mGL6VJ0eJ~KM08vAJp2&i6=N{; zqBr$Ke+uGH7X4oPqHq?z=*>pL;|zooaSrqkp_`}m~qgbj8ar+fP{WbhmGyykkUx(fOs&uhk<+MUPARMBn5 zrH^RFt>M2+^rX!=FLo__9UD|G(Yl_G5@o%h2W}b0@nK*NHn8;n#*x)qib7Qw7mqIV4`6s0aNXTxa z`)n%$y^26w8}N4M+o5x<(U#CNUeOG4(0Qvv&lBD5N=`M~ANs{sw~x;_fg)@0C^q1d ze*0mAa_D)R^|;@erU^A(wHg2GWG;1_E}h!wVf+x{WJ50=vX}OMcP5g=(8@ z{zcE4u0+#NRnrf28!C}Xo0SU|2EO>KH`Fr>@?|bplyG$`%bzwGj5NB3OsUQTlE#)7AOxN zKpJE)9R6A8W!x7Np>zF@+u;8z^m({XJ;Cadf7D{RHg!SlH{?Okv+&g&d(H9C_r*ik zPRQUq(cP&KcXKSzHT1{L&@u48Lv(jrSdOpp(veUm3HFy(6#J!B>rHKm;@E3pM~H6w zO4&KuSL$QmkAq&>N)LqU)ii@U5ht3D%UT99eoPW<4Jw!HT>C+J+= zm}i*%-qJWFxZE9r_ya|Er?%(yxNWG1wXDsJgsgWo1$OBoesHDKArhKNs zakA*P^G4WZkfVj7+m=q2VA!k{GWY<2qMPbEr5*NVvlW^_{H>6lqT38AWA7;DI$eIP zeXcu^yXHc~nX8w_rZS={Ih!2cFHN}T(wqeL9^e` zU0DGCkd_bG`hcWqT2%H z#~$N90KEhwJJRP4a~o_xLeZrfh-bQ;$e?_swghkN2dtI?xnE_c3$t0d#TzBod0K+# z3g|gF1Mon+Lv-6+D{k)YJO{ylA^Zzs&t5(d-L~OzZlExVy1{?F`X?iu59fBZgm1N=>{jW4_JxJJ6gv1_zu<~pqz zCtcV`B?!f*~UxDWc21GOlpLVpH&HePHS0DT4Y@(;CQ705qIdtWmc_)`t%S{?nq zHFUFE&m=hrG!S~xw{@KI6ZG>%w=Gn1l%4?CLNnlB-d^?Ns_O>ti|$4)voL_9$udvO z2O4O~I1SMP8MG4Jw!|7-H?^H)8Y=kbVSJCL!V&O~?$gKFPso@u3!!%N%jvPlC>ci>W^Zol8vj=jH25Bvf3W8KX-?(MMY2 zXp8Douxr|iZkzhtl(tY~6lfUqyx6JjR_K*Dpc()9Br+(@(k6Npr2oMttZ)& zajtFliRz<&)}tmHaSjvR?i#ND+Zp=h(C6NvyR3=R63iubq#wk2vc(~~1_0Um)~w(mYk7os{&dL7p529?XS6SZ-vQFM&xc3*Nu z9yawgqT2(s^V-CS9)-N*$ivBFEh9}6W)O;W)V~tf z!CYj#1UlEHVu3yp-L_E9Gg{De6sX2VjgyRGFZu2(39k2c-N%JyNqa$`xl2z;%%Bef zm0*CF$NlNh%XaFnWI?Y+oE&|EpNuA>MD4!R5^;^8mZ(`SbS_h$1%15euBorm>!w^r z-CysoG)~stdRfVWJ{WpA#(S$dUHabyNw9(P@lulBYRNKh&==tDZZHD920afCSb9SL z3>g$(r$@(y(8qkO1>%zBr$N6#bob(S^TYHo8-j#~B*8w*Dp;e31^Yx90_DffXzOht zsX+1dwOjxM8+pdg6%9tv9~6#!v-Ut)`GT% z|Gm(&F>=L>KZlFkbvaS>md{Y1tBy6DMpG^B~$?^0Ra(#1QotGH4NZf{{Ma(-sOH2cy8RVsni=#ebCM;QmB7s5jLmoCT*km326%Z95Xq zww2e{hgx)@xBU7eL0?5t{1Hb0-QtHud^hNK5zZfW(#CR1hH$a%AK+-7zpek1sF1>U zhXuui)Uu8fPIW}K#Wy5X`K%;ZsYk@o8>1+V zeinuF;YPJ>OW^waftq9@aDBbJF8FLAoE6FrDn|%4p7ltmo|S}5OR2mg@PeMe6J0Ah zl$fSj(}DZ29x@Yro(4X(wuFw~;bm_S&Xt<|O;p^>^d#RZc0v-|*hnd2=n+@o`of%( zf#??#?v!A^F!C}Z`mF|TZdcv}+`@{HTB7<%lFy9X)r-1o2TEW~_0eoK^$mnGeR{H# z>~@iB-AXvOx3sZFW`jP4bH9Ir{!P$ZajcJO4EmT7SnyxTqEYuW@GRzY+OanKMHKRN z75WK~58(`|;&(;BD25OGTC&}Qv#C=RD>y8EFE5-%oD$sp46zaTKI5eGR>GZ7 z_(m&-fp!}Q31}D3h)fZDl+7vJKe!Q z9d#6nSZa!=kwM?w>$W#yz_Kp)&HRr4GyRMhdBP6 z?_Fk70&5y{u1>S)Q3d(kjSTuEp2qe!9C{j=V{xGa=syCzzR5cV_@9JxRc338q6IFI zZ}t2`G>V;&i1rLJ%pjaI%xfo>xDzFdfL`C^RYjiyt}jwn0-vM6b3PY7+RD2AN#$o# z9C$_&)T_r(sA7Ek8o|{kmI40;FH|;zfF$9psQXcAr>&t;>$8H#F3NQ%g&Tc+BHWQ1 zIZ;$VjdPNa!A=Q1Rx|{-KIqm2g6|{TF=;7rMpg7V!nqa1ACy+0z336}i6PLH*GPAU z89B=-<^B>Cn!hKi9fznZf$NK^)qpP}oK^5um0sj$^qcH2|Tp(I%D?qbA0Fcc|4mqyfJYJYl>R5+ew?!vyV9vVTHAI;1driU z>c!BsAti9hth5MFHycPeTPS4+xE{DZly(vLJg)TE%d`{m;w51IE?K0%!2wEADy(AuNFm0etKV1K$UFcdpQX0s%E>I|}nDUP4Oz8R#!1 zoSip}k$DYtxYiI#;1d7&q+}4^re{>ZD6mQ@T?Z@w1|FlsL;QOkg7eFYfZ!J4pccB= z!Kr;>D3K5P5fMsY!KoU;Xe1Ku0)Fy0QAi`k2f#D6CCF=YDnVOkxx~Jv!skQq=|(v7 zUxWzK8u&cm5q)KLG7@$pA$~>#HvrzFyfD&N?lr- zGcxu+e+s>7C5dQ{8K=w&2xq}lP&L}VXAv&JdlW1gmJ-f_*WoL* zGFkyf=A9t#fj*AulMjNw0)BdvD5PWkGI%Ok;Qcy%&XBi8ZKGF*p@kra2C7_C2I;s(|}u;#e4w# zN#Idz%hXoz75K->ib5D1TE6i$MR3VWq+}s5>Pk3UB75QW^^`V+a8~Fe+=?_4^lN~d zPP&=-JEOK&`7g>Dzee2kR}pAk<`Iq|jKb80*AVWww-L*}2L0T(gu!BH@Hg-`j|kom z_yn)RhZ_0_Vf`ASWusbBM4vIi8b&x5@vkky=rJ&g0pIne;5rD)63&VSai5`%h^y2V zJ_#oPP(#y>?_wmZ!Zu4CtMnn9ZSKd(SZ#+P!W~OoD)G6r7|_}SK4%kCYm`FI6*u32@3Vh!lDY5iF^u8?kB$i2V>>lu;m)XSD!TMaNEm?(0USbZ3w$NvtWdyMxOpA)@jYV8TA)8lI9teHR$}lH;I(~% zhwm-J<)@3pk!A64ia=o8?75Cv;iPxway zy`*F-;4G7o5IP{k!W+?_t|6RDJgKn|s!!|z?!%Zwedr|c1on<-E2~^z_ypv;V1%ys zmfw|>z|Aayo0heiO(UEw5qd;QHVsv<6ZC1&>vZ!&;9=t;46A_%_7$0iUP((bnt*S! zQ=rgx;GMlvVm0Z0!danKmc$Il@_hzoeAxS`@iSGhyU8C{?41E+d@jZ)z!c zcL-h&`v2I{M7XoilfoMVWhI~0w7HlrZd~c#g>V*-PKiQ;Az(4#Y|?O9>0NYe^DuDt zT49_I`d#4T%g3qc`A9g63|Y+cY62h7LSkeb7eciLew%|+jEuE%kjB8*0rx#D_%PrJ z!dcP6n^YyHTc04|0YlTjfrpKc%PkAU5}EHM@^pcK7~w2n-R)B1=YhWfdS6^xnFf+0 z5oEX=9eICb_zU<~b;Mb8de*t62#)R%!E-=Ao^TfI{ze2h2Yv+f!FPq8TD$Y>;1~MH zls_dyUu0NK30%ji1roxZ#pLK1GVu2T{z)qRx0TSlF?5mMlP-uLoE0)}R-OU;0U4M_ z&NF%z3Fg_fw;&*Xmxx>eMLz+(dAz(-Yf;F0SDf@J&|eAMce(I6?gU|~|0ELJm^$lf zN98ucD1b`|wEG%NIF~GRQW!}E(f%9YVN4&jd%PF8+vsPHGtOJ%-8k@32bwl)D*}R8 zAC+=gR!_p6cu-TCSsC#qYZ>Tc@5)$eFfzOhJdGicDs&QjLO0>U#LMB1-ixK(XYkdG zrs~eG72#asrR}7w+RUy3-Vgn$2BP_dJBmIk7Q&eTYb)pvye2;Mro=zXdQ%x;dZ(s7 z20Vl<^E#3K9e4uQ^}hqlwQ47VGabb=X^~^iC7k<$81~m`|9e-vh-66N+EAS^Z=noa z;(1M_#9FfNAs~V4L|=o2YPA=7zp@>UU{( zJ%Im!4E13NRVb%}2zLKov|08b+!2gRftq6d=vm-3T|ys8qXh3FA(50}YY2i%Tq4Ud zQDdRGGU05Y*OS7iHt2f*&mKUD;f!|^&I%oAA@nVTK4Ps$hBVe1v}At*cUO|SRPXg% zDvT`SjBFRe`ABLQM^aHPYaroV_vxL|7n~of5nk7#HQ=8R(KN(9;3Uw%-WE-pp=6%| zzvX+uwH5d}5+i3U)rtP%GKO(Dbs%&I6V595(XLd5`#_(nC}XKTkn}QhBtCv)?sCH6 zL$~{3CAu2u%XD(&(r5IC#9eby+Z`!^8JU+xUo9D|)b~<5Ls3b~fp_g7Mbv@w7VycW z#9QwGecj81|Mmtfmtv{fa3T`S!vMDc?=)WobVUhl!r4M8W5?bh!r7v3g0#G{ zek9>+xxg#OH5$TMK)!KR>s!Em6-6NtPjB>el@bR~Vr_>t2xmTS z%=&ui{B#Hej0eHzm)i6R6+Z0BKW(o6sb4p zuZkdH(WRn$KP0RqoE1uB#BH%sZG8ef^M_QKcKl_!ivW5(#^In&-4uAamql<8{Cg74 z{3EdkL;y{NoZoGfz;zSH)pFYIH-S;m=q>grUS!&5SwA>@%3Hqg#D`R&GCf35j}*9} zRUaB%K?&@o78XVFfzKekk`t;Pp}$z?AhtW}Nc$-853#)01v&o)9zw^bM$hXhDg<#D zKnJ!xfk!cyS8rM*c*N>aL!izOuo4-vxLt+Dt|KD?Fnahm3upA318S*)>TN@eurfE8w$-JoCW)FCwg_@cY^-Tno4X3$MzOR?nu$D@kYW~A*-H*g2kx4{lLT5N`py(&-dUHU&wqY40k|+ z)kjJ^{wJ}mmaG%-MGb|se$$yxI13If6#*}xQlA1I@QH6MTxCBH(V|4`lF9 zkl3MuD_tQ99mArX4k)9*V;BoGg@7}_Q}`H-ple;$R}_u^AQn9Y`dNfK%ak!}&JgFc ztTo6$7lApX>U~>)?-?K#>Ig<}5YFzJFiw~LOt=&7Z;>hsgT8z}q2KifZWh*dHJTFG zq^Z`ZGt}ieWN2tqjjKPZ;03YVMQG7M;8AQ9-9D@%kchn7~%W z0g@qgmk2lryc_Tg?xoSzF-qyPV(NXMp9lO}Eb>XJWo?R30+-mI7US!f{!_x)bRjgG z#$Z(LN>S(l*1)yyTNCck8)K58pbsw*k(i!Dg%?M}H zon9byABL$%01p^3^$zecV{n{sj#TL%9j_`puD8uepiiyX#;GNK4|v-6T6YElvM#Zl zs7rg0uYx6v^Ta&}=MsmDyq-k$KN=ZgPZSL-a|q`WU+_MYV~Y)76f-^|9|9l$qec0g z0H2s~khv_4xSc8W%JpK>hA?$QP9VWPns8RA1D=YPcxPE*!ddXRI>Ki?BI7;4 zeK_XSK&RA?L%=87B|{xpVlQyt3xaDPDn3{Q#Es8~J%DFhNUT))QNW|Qq9V0+=Qn?F zM4Tmax71m02)+*)Vn2vmtp@%&;ap-1YkN8Z{}uGDjm^x~5V4#e<5X3s4)ACM&!*{6 zye=| zcEmSVz{2{D4xCQ_KaBIljZlE9!^IMlc>RdmUsWV@qXe#dcNZx^AK*iP z`)qN>6L6N*z%$r?Fc0+aKtL218}tJHJMiEIcLF-?ztITMXxSbStR}q*cn;Qk#bxMC zdEgri`qhMU0b*{k<&_Zp8tCtSUifR^`gMfs3a9QXCxQ59-LI1BK1 z6=zhZo5#2_RoF&UCPpD&>OL%gk#_XL2iL+qMlT0Gq zDf(#PuWoz`@Njo-hg6*(gVDqgS|A1e>n{HU(~0>IlMFA+=`C-C^)!btbmwHPfWPCX%(!~3q*3c|T+%&qZR!ktx( zxmSyTmteZwkT42k-BkP8KEQo#Wo)z?njR*c1(*S#`WSd6&cyk_zc1lTzi11Fv)Z6% zIT`3^Cr;aI@3Ne5uFLm(h@x}A=wUD#b>Tu0rR@T4KDqNL@W%McSY5hv%c?L|G%|1a ztqVNZTTJbP;0}bdLcwBUiSOV;H-Y{TKJ2K|eX4wn-m6k%oG@D4M@qH_0`h_T`ikI( zfnP;9o6dZzWCn2ahVKmUwkL&ubMP55UaBUNMsU{taVjOSfNfY^SEsWHcS;-(gFN^oli*YNuyD`<90h&+XNe!O_k`M?YoZ7UjgS)5g@Brbb367uCPSUZ zDDlM(UfxP!RH@xmh;X)C3hO=tKz}pvC-FhI0q}Pj=PyL&ZR%yO6TyMyB3Ofb0pToQ z)k9J;b*_=X6ULXI#e}ovQol*4PNSpU4gP65WW@33{Q0b}!6<;i*BhvsI+KLaT9-ui zhNzqAgtJ0s#M}w`Fdjvi1B;#|oGltIynM}(Z#9@Kj8Uf!C%1ZP89*Z4bnQ)>3RbX)h*?e zX+26dAGm+0RLvb2_1yv7SVg6Wa*$xYn_h03lsJa7v_l}E2jN`e3@#Z~g{Fhvd~)bz z;PVj=zC^+Dr!yZK&Q3I@AO%iBSu2jm03}>l)=1#yI@?jgxoYCZ_nh1rqG-B;3yU_uo4O8)h^Eg&)g>T%R&EvGCC)?TF!NYD3tzIR8$|zC!7V3#{DF1 zCH`4fYh-X61C3tD;9DsX@EnH8OMsgjISvxeCC=h|C|aNO74Q`9b_$^Y5%+A=4bDDk zFV~51*3|c_bRJ(J!%e`iX;U=xE+yP)1;$yar$BFQmXK8(zVg1%M=T#EV_Ik5AcMK> zzVsYXXmMi^oPk0$f&2T(z(f~udjk*UiRHB2-#|Dkdf1r`Q|BE3qX&>+K1KgLGjiri z`@u4NyR?VXVj8RTTw!^@_@vYyc-A&k#t@W@lxC=J96L2e=>m44#DPrUGAw^<_r@@qd_bE?5>Lj!RfD{dN%UEd4J!B^qrP+-fpk z1gEj7O;YK@6XDD#v_z_`G)z60a5kxh%_=eQxdZfrFr?`Oe7*9YXuL7{5{DgyeUj&(@WiEviPcfZh2f>Y07 zoaagn>x-$i3hqRPS1%R3DN42$0?d~pUI2Xzhv{`x`2px(`Cj-m2A>*>rD{?eF<07+ zgaS%n6J5JnGN`kR03OFQR%7^b#c?>KA^1E2eEQA8=Puwo2xm)VCrDK;Erqp;Unzl| z#gFABt;=$^h(dYTLxxsn)dl_Pwl1ir+p50$x%1(&y4V)(1{wFzen#c{JkB!CiUDS(@g?V1DI$Ta96%qx`9|IV%-Nu0b{di zmT)#*$T+Fgc&P}mR>;`sArxRb;jB;)&z$JkYZ-9!qNN=UPIINz%S9t~u1_E!R7*nU zLX_BlyO=Z~A1%)hKn4-cCH7;-*VUk(O*kv`oiUJE2Yds6THyY_J~CL#B!jPom~Jad z7AD-8D`Ck|C)}$YoMr+zqoM8ldBRzt07i-0jE@k`D+ZG;STSJv);E;Enud%jXncp@ zD~;yY3Ani@?keEs9RjlmXN97@q+r*hU=QDcxze>qqzY8iKf$Os1ZzBS-zf^cxmD#go`1y0^*Zpou*!P)~Oq<_hgmayZzo5=I!>gdb z3F~GW0Y4&~6-^BhKHG%7^`+vrC^Qo#h)lc(88AN2MTWJ6v!+E}#G|yQfZyFx+WjEV z9|hk0pa`A}eAvChr^}~;YZdP$oD_{%alE-HhPA9KmP>{|w@U^s*(}1@)N$k0ttWw} zu%xNJ@+xrOW~rLpP$&)lzV=)IvcHb$s>H++K4Y712g2EjG6<#hz-Tn+&6$%8d}x0u zz&X$-2xp5Hc}Ioo|2<>~9+XMyZ9Dy@xfU31Z7@0SYb^-3cQYd}kGmLPyT=Yq? zL>%~Z!kzJd(3q(_3P$6x!l!{H1AHmAf6M}-yp^I*$pb~JY#8AzIEHsrv}$eweflSy zQ2Y#xo<%}-y@XzUllwE^KVUMN5Bj?IiC_!gleJln0e=5nQD`mbX94$}FEHBQCQ9ID zW8UHOJu<}c#a#tdT_yBc<1V`#eEfF$Si{?eZ$X8eDegZN)1V*Kd z_PrhSnT=A%y$~pB-VaM`lSrpa5)*)%4>zp^9?9VGfU1be)@mtPe3vxH=1^!PaBGls zyLCaojBqY-2B*O#D$s{Q&<6{Iem3}=0sTPnp~CThRa;Dyz?L0#mIB}bV^h;O!ddVS z_%5w+;wIpEKT6$eB#jf!Rh%dz3dzWd>i;7o+>aB7FGJIBfM>gkCA0*U9}q_F;bQ6& zmr90-gmWDSu`s6vh=AVOAh!7s{NH7IepEbeT+#C_C2+~i?ZU;@2)=KdlxzkVbqBs3 z0}ZvrB*MAGW)A;)9%_ycNPKaUCeyns6?edzExo<>8FOfDgvrL|ug*$GEfH zbqoE)w%zAMf6M9$j(-DRk9oBY;;OF``qWS2N9x{#2xkofBLqK;esdM*-E>lke>xuD zEqKJ5i`|PECz-lC8ox55GPtG1ywePfHmDk(VgI54|wpXxNV7Ck#EH*fd$A#y@f|3 zw-V0nE%lX@Kv&v#f!=(puFj((IJ;ZizY+xZC7c_&A2$JLD4ZBUh6HYV*Z%Zj!dan| zbGvQfR`<7o$8c&@Ep!I>K4Yb#^<%>4uO(s$@hb6869+cgV5o;8RJdqN(#98bu5`$aTt-$mCloAXE zqf#4%-n^u}DdAiIAC}Rz0P~f;h_6unZ$Jk3z0$smV}gDhcmN+o--qCVPlzP~#{CvE z31`7k#19qx9`IN#>1VZyj}h){4Tu}PMXe{LWc~|wq_ONPfhX{#K?B#_gtOqR@hoqG zaCSPMaeK>K;1i_o(eZy}^cNDW@1;3u6*T{s2ncSG5_}3LnnyTSncGlw3-EVelq&lc zmfNTF*uqPVP}*O~O(GzKy-4UgtV;-I0exl&qYhxy1Nbp~DA$-j4}8*i5>i9&W55$L zB*M}%)HX+laD@a&) zg$SO54BryY3Ykv~lzB$*rWo8c1bqX-S#XKVgpUq&T7iD7)87|E^O0dG*3FdB_rPmm z+vrg!I`cUZ;6udJ0mur%S%7)t!IQv!@Hx6SUw&yMB>pXPtJ0|B-ymR0zLab>=yRV( z)fkucHUS?CCP-s5ktmto80@a1QHJ}eP zk&@j9`VR@DjM1Pq-bf**l1egQm;#UE{!6mpAt z!danmxQ0sO#4x4*gO)q_r;KJJA+<>AekT;#0Y(AizK#s&)0ITH0v>2Cb=d?0P6Ce_8)T}z48d+uv=tN` z7SV)HB$jPOvsnw=jpI}uA>bI{?A0k8Y1MJV8Kr+yy4~MFU-cCcZ0>t)4m|Quu9Wz5 zWavlc0FtoK5c<5C}(a8DL=5t_V zeJe&*Mh#yT0e)PrrX}u3I4c?#MwV0r-QfZ}eTg92M?3($b&=}>NUc{Xft?~!|6#$o-x; z%XZ*jg3$tu4>a^v*dYS$zDrE~CkoI2_>>0(*NYB@5Y7d*=)QHQTD1Ayj11=e%&U@CGD<{+UnmMEJd!_UCe#>)x~cd}2=UW%t= z+@O=u&V;k68?BKN>vVk_@F1F{L>J3?XlF!B;lpd-?IHMm%D^TH;VP9N@ZW*^aF=#1 zG}o4|gHIc&lEkxZV@lFtRUgeNC{hs&zB7J zqh6L0Plcj$3FiW22Z%zt=lNyezNk!rB7HFxI*Wu;h=AHFmV6U}v8!Yf1YG3cG(Nz3 zfOfAP2B8LaggXl1 z3!ZLtbMKa3BxGDgRGV;i@5~}@&=eH>(5Mw9uq8akE{vtXEu7$<2>L4T2z>_kK<>wU zco^_mm^G@RN#NUHA!m5XLFpJJa0#q25-hqxK!tY&_dhHx`WRaDRKmFg3FA)erJzr= zl*%fJI@<}{XFPiGHQ~-T$nZ-NY;`nPY>&%&ga)e_T#gigLLCTa3)R>ub$LDTVT5x5 z{)MeSEr5qXU*>+H*D78QJopl>Lsr2rBVo4@V)g+KVKS!gLXO-kg41|e`YH%s20Zkt zm|zsD<{05zfWrH)q*JgOz6VAd#M`wYh6#6K;Z}AQddmU=Zg+4xR)G<}7GOQ$EFgm$ zAohX&HSh`FA$&9dWZEJj^hnW!b6^y}&N~%Qe;;|Z({P8=Uo2{#aaQdP!nrb{c-*=( zRCp1%g(sa6jID3M=jeW^qRDNflQS?cp#obTbYld-qF*ES^?q z2}TnMXUipyi-48Dza^Xt5HK#Xtav~oNn1n`M=U!|eM(?Pk74{L{hwvc0Pe>TGp)QB z;aq~#*Nfo6FzI8UpNFx8T4E3I9HSdJOSm(e%Ji37YzO}i925Z|Y>Sq-LDMqAxnyoU z+^X(p6Yf|79hROBIs$yWak**bLqh-AN*uIo2-7v81TI+y7syHZEbAs@cnMQ@XCg{@ zGK4!F89px72cO&zL_i#)Fdb>P10FUv4@^RW&v?}S7Q$H}w{ClafJcG*Fw2?+{F=ie z*l&cwn+az=(XtX4-auU*h)@EXG>e9-z3Vw-2p}ZQfq+Z@E%erUY3NEnoN%s!v~gDa z9?<)YO~_jbXaBfwyvyBxpYuPI85@YSO}mbW*1>wx$17`KAL7ZaHcAagU}%rS*$Q5yr_ z3Hm9<;Rn}8Ql{J7!si*Z{#wAhVXaiBuLXpYVI$VD6Ous%%%TLRD9NHBcd2BsZZUeR z7a-vMj>1Q04Ew+*V>GHCK%aJYUr?OLK{M>~v6LWoi}dr?pac&R&I-lRpQ~**5zej= z#t=+v_d}&OI+LG4AG>f-hT~L&PlVAFEFpA7+?fiz*zZ99fXTF9pt|#X9D-g z?E=U0p9#mH@ky^a@Xq)`-VXGmfb(m>{2K}U2Ev{8o|HPuK()67FR+FWk_Dg9(A^?kOQhl z{g5yn6E^j?X~4~QwC*O{u>|(8X$yXwaIU1RajxkQ_}qq$y*XQg8$fSbt>X+KJW+H8 zb?^%C1XdI8fayL4p28SPXPmw-rDR9Wh!YG3{iDE-;VXr9bDt6}r+ns1hGEFyqOm;t zggN=CK{zXF<5FM7e$zY)$=u&W+Q0?@(6XTU?o-4mw> zceXwFjloru@5DqFdQi2{NW$4y66oN>PBeZ7{w}8OO8+GATm-Z_u-qQP+0v(4V%x*R zNca*N%!m8_K!$dhL3agx+3$r>^k1S1Cf-(m!nuwE*l!U8{aC`e02frHwEvZ0WZvL; z5V*BhmH>3>aR!Xi7!QYGig7i=`bop_i0;`-g}mcrZY00!{OO z6uheO`Ev!~j+1T^U%3(V?}Fa^I{69kGvQ=aU9c+h+%2{?PtlbptNN84UFm&&ZcX5qu`GK z?*RM?OwKeUj{_g`$l0x+&z6z+0fi#gBb4Awwy=LfL+=h`@L}Mfihd6P>8k~)fljDl zRuna#5xNw(dEM0{!krrt(ql!VhG@qTWH4V;vYiYRpni~{t`8IHw?KajZh_T_{HLHd zzciORA&Lfh7RmmvpCJnEf8tMo|`9C%2a z_aw=7+TVC2nD5)&N;oTI;SR;GQ1{(_5!`)BoKXkJGYMy3`R-W}`6lS^10FVd#Y4Y1 z+aAdLxSG(947tBTuulX`2Hu5mXUMfd{M?PY4-(FTpT`Fw^`U!!yN!|jcJNQVk8KZ# zAC^T!8fN4+OnNDB^E>Kf!dan=ae2*B&~L+Dy}l^Gal+Z637iPKEYe6)M*b#(tp(y- z+TTA+IA@rHPv6?UcL1knM;r$8A>b7FxS~=8)nTD(zYCuXhWSa*NBScnj29!MEm+oE z!r2n$jq;BW&Ly^t@qZe8%y*3{oEE_Wuh{r;CVumof)zBLUpHO$H#3w+126zgWm22J4{}bc?ZOeBK)eb^u0^zG4Xty-xuT|0tc!0mSMoaCc9! zL~E3I;9nwm>TAMh0`NJ6v*k`=Z{Iz@mq(BxWgMX1jSN17*cDorir0`hQ5Sf(zeT_& z)g*EZfq+?rvn2w?JmNmkN3z4kxn4)a`G^wOM5)`w_>CbT3r6PCizVnGF%}RtmVw$5 z&Ls{HliBRYP-uYSUps*-Vhu;aHDHv*RyTE)b;uB?D5lo-y;T|ECWl4f^BMRwoF!GD zPI?;n^H_(^cj&49+qgLwj|pdASylK^ zNZMby;-XO$U!Zj%q8Z_wp$zWz(mrAa@QpYFrzKuSI9tMxebp5BoZt7LKZZV{F$&hH zL_`F%!(KXdu7M?l(cQTGjk;~;H=b~3u!>Gg1JoMOoAY~jN#UP3AQsYr%o5<=^}u1- zE1=P9l)xoOzb2-u1i`tb1UDa?Xim6%aT`m2v8{r}*03eW8GS|?;%rFz4D^Yg1=p!e zy1iCLRA+utTlwQy9RMcRlRi!=)+Ywf{`PQ1EbwY$QBdbwLdK=BZAFa)!68DcvnR8>L-e_1I(c9ZyvmY_S~Tx9_qFKUkh zOdy;EyC0RRsRVp0@DR2QwS{whOSrR;mqifPkW{6d2r&D>fxz8353C{YdcvLHk7Ibf zA$SGhPSv=ir@mSWZnY{ecw##i^0XhEg#;g7R@C6U3;6Q`g@cB+1BCNdkT5pYL9X?0 z!rAG9#^(Ag;cU6W-4GH;tezD_qZF>;=n77=fyZzjNmtb4gfpW!)=sq7*#-LSP>Ibb zu=OYK;L}nyl4@DaA{E7S0lYttPc1a1=5UL-*{EBYH&aSp(8AA(P+q>K>S!RdYn zeL_Yq5exjShUE6lC}kX|>PMUuJyHeH`>*T-&h&0%}(l{LJc()fLAj?lU7a)AQ)bVxT^CoaVZmrW+^AYpm z>w1FNA~Of=uS!)4&h(5|2&=?up$3GrqSkd%HP8A*!Ybg2HZs$wjtpND&Q+GdWfkgM zRjLV}7%AlVe|gl+XiDG`6uxI90@eY~7QJQNdJT-+#^p7~LGQ76Qw zeCsw!V8I)(j;@op1mPT5EPO=t!K6DtFONbOehByixF3T%HMOg{@b@*9hBq4pZdjc< zayF@Zm<(q>M#5yu;5c1hG4*Pg^iIN^F;J>#NRC550k&DGlb!?~FuvrMt04;Qir}WB zEhyPkB*cuBgeQQv`&B}Uc231=ilY8+rS6x(hb|%9aYhVXRH1dibq8ET=TNUAp#l_I z35C7_UKNkFF9BZCBZ7S)G3mb~PFaJ2n~z8@C!7^(eXkVYGT{@kox!)1fIZfR-0cnuLuZW6siRqL^xMv{nkbKT<6f!`6Y9c!h^_=gS8VCoB;j`t$*|H z5-EYT$6-X@;fx#qj}z|nigEFk4xlebn_gL=IDZo1_NU|G`A9GiOnyx`n{F-!8ai>W zTU!`q>PX#dNFG8s)30-uDlAJ|Qv~$+cv!I`$)3zg-H!~>^BYkZwXB24(5sV_xT(Na z7WDsdwbMl+csWjbsO9<*E?>Iu0L4ID-lB7tl69mgp;pq~bo_cX;arpu-2NVDuod*# zptM^WM?1g$N{_*yx_up=!zW_l&DHbIFN~oCu8glQl_J)MfSJJkmBo)90RE^jvSQO@ zn5$m)Ch!z)ziR~g-@!+2{vJyA*dw8Kz6jQh#C?UIbuIAt+tRL7@FT$8X9a&6e7

T3`4C z{}B4l;J=b^Qkh` zo0zcxdowbmhl{4#_3i*3`c?4SF!gER{iaI+UPA#&H0A=(M*1H_6K%mQ2zLrlza*F6 zvW6kUQY5s+S3M2CFA>fqONGQqF9!XGz|DP$wVQ~5n6bOA6XDFq|Ge<2PhTsX-y$TK zZ^u0VMwz)XaJ(0S-v>U`Cw-iT)1SfT#NRS1`33YjO-1l-Eaquzx-5c(>ea+_+Yl`W z0}tU~8>-R@1E1Db=S?gIS^(EE*NDxU#;8pl$k)lg{vl@pv;SgM7HDtA&u>8N}-@T}3&*AmXQ zGVg|d6}Wku{+EPvd&}bPTn%}-1&&-gFpA#UhqBa>1S|S@(Y2$Yz|(k*PQ7C$;jGXz z7*J_wyPa?roG@bTX7IUUJr|hTLT?D(g@iaZCWx0?)^XsUVMSD9;W-G%K)^ik$!{qZ zorHs-PXZrKI4hd%B9(VF zK!AB(gt6ejJC?5c-a+&X&u(E>pj2!T%xP!O_Bh592=i=RF9pu!(~){$)9X z(=S!HR9J?W3QHaEjVGMT(tDSby`5yV9wgj}S$MlhReJ?|0w0U@v@87!e2!rKO-(Yq zqr*S)A6to^p#-Ol&O-eK>-4~HL;uqh3VjNEE#4Zu9(ajPQh;P2`tz*M=aqNTUrw@6GrAOS}y?)8jl)(1w4#Fg7$9(orQl0pC(80`WW|1qmkgo zF+^=iw-C;z4mqd$3J>=^L^xN?U}OKvCh*DrB5wH>3!vX#;4=||bg29#;m*;U0LJ1v z&AzCM2rw^+4iN5GsDk*!ctpQzfQN7=g$notc=&Re|I{+WrjhEYfj-J$BD1il- zdk;1d&Zp?78mH)AA)GCd_o67Iv1u>(gdP^bN$|J2O1tWXYXB;0zf^@1n9<2O!stRT1N3w^|md;WGKLpMrbrwi7soD!V6NAy<#31o2N zzCdkG-+gc$37jQRyZsYi4p&468D1kK%W0$7J>dL)EaO=vV&~aoa zAe`w-J|}o<2p&W@TQq~Kl-0K;fj*2=A~cVcl0V1-obKpp{)V*dP}RA391p z3jyYkIIpi1Acpm5ofuw5I4kr$9*E^-VaFZ%A|Zs2mX$HwT0=OO*xZ2r9_YieN9X(& zolk(LQ@PCA8tnX=9;E6gd@{IcP}eKE5bktGxs|1jZ-L;6$S~cwz~dIe9XB&J7j6fA z0OL+wKsib{m)P8Basqhh8$9Du22t{!{*obmvpCDQD8XUES#bPmiIM8xCqci#cyqVn z00_pdG=spW58=$m_k!@rb&2m;*Kr1?JuIWY*yxjR#fQf4uYg~S7@=j%xl-uOx9~i` z&6h5&1n$EcPF<+Bl5p~}h~>w|O0A`TA;Vc?DZf!r%9yPwUG5uTGz9qMei9>eO?MLT z@C+%l<9?LqKIP+F6GQEx1-#&WN?=QvJzue_L~!(BiHG?RTpxIFxKy56t~2n=Nulot z`Y7QJe|&mJ_heZwBEyP{r37Ci!#l`u`wN0=6&xp=8))VmX_|@`8z=%sVN$Gk1H#!Y z``}4Bt%55EciMxw<7+V`IJ1MJB0yI%*Mm{GrBuOV82_De=*eAoh?{8$t1$>AHkRF5 z0;fm&obKWLO?yKqfd%{Ux~KMt3y>jTeE8kq(9`~>bI z=+HNY8xxft(;gibEg_ubMywFF5$O158yHo_oKidA*Cm5x9^@~7wG?1;8}X(Nu!)aw zN1+b{zXJGB;BrYA)l&fyCQ$-!BbbD31ZX~16dBAN8~-AlD>Z~uFxt>lpts~PT1)Zo z33n`wyZENCT-J8XP|FK3_(POMZjNX+zE0A=`U8Hv+>BxSKt`HHU5tw zr+=7m^e>j!aSh6NH{njD8c)6KB%E#dZ;Vs4<$Wr6#5!D0s<{#bxQB~?G_I1m0|TBg z@GLeOEC+o8c;Hi+KA(^t&ni7a1ec9jMFfGy(2x)xM>6oOo+r8LmlDDl;lz=F+Z#p*`ochms-@atj~al-YCW8FT6~zqUb!2l(ix7 z&cIt@tfH-BG~+x6{R>yUYG_5QXn{P->2A(}BinfHJFA(mu4&(i>!-TWoFxIfNHT?)al_O~1ZNbQQoe0h| ze4;zyETA(wC-wHBz=H_k+RW|%AM@qZw+ZK}3}a7eBoBhW0HgR{(idEgNqgx@qEJ8d z-#*YcBAgY9;ap7w&A31C6jtFHfqn=0xQpJ37O|>K7LDS#i%u6Rn*$GFz}oSU~y*vBY`^c-6^3 zq1SjC;vC^z$C;H9F?)l)+VxO$r$o#I@NR^&LVw&$3bFqWL&69oSlHd5oy1*Wl=xF( zctw=#E#ScuqUf!_eN#oi`v^o@uugBojc z(F4HKI1;VXyS!<_$A^zX%4ZPpcnRUZ9g5yPEk`cX&fxVNZ62E`18W+9m*zuons7E< z{zFoib$}m-faq!wFaXZmWx6O7z{et0XcXbhCwtNv1k!^kVDuyPBOAYv3WwH`PJ|9Gs?i zj|d};Xx9VJEEIea1m8+HS8y1b!HJ7;DHn`23Y{E?EML z857}L?Pduc#c^305<0&rgtJ0&1sK_18LdNxRApJUo`P8VDdAjaKGd0-y6O$W=qo(! zb`KQo4?KCNnBW88(|`vsTXooT{Xa$tT!J`W+jtV1o&o-LXJOO_jLOay!7Z>1q|Gl% zIP+O}rO@kg&waoXcvrYN`20k;v&dmScv5qYlsIH8T3kXn3rM$@R)9?&)_%g-q%{_c z;IGj9thp!{F5yMFtonpAeaSVr{!N{$7ZS|ZJmxrzN?Y@`C}%0c%@7d8;+~H6wt&x; zb)t~QiMK)jc~`-^>prmzG88^4Cjx5RD3*xgi%f5rt_|UAiQ&d-=HN7Oz@8@UEP4TtI=vc&98DNc32dtrrlk!b_&(s%Z;*DP5oROd ztmqkk(RTG3@V@7yebz%uPXiA$lYnuMvvJ6qu}~O=qSA}J4#6)G&XtgJxw1KZY2>O%13B9hh90zWFkMnnTfKi*MFfv~jp9?*sig;6t(GkxvVh&adub2wqvreq(FRwEgISoGQs$&)2N#vR6D;b8gcALd{mL zN@HeqpE3Q0*|Ww>o<6%^TsUmm&)(^(-q!hZ?Cf3>rcanPd0e|5GbRoS&zd~_I)ixZ z?BEQ_*xLDbatd8p?5a9w>g4eg46ey($(l2#)EGTtKns)xKy~wTj7qxA5Fwtj<3&Dpb#otf^Mr4t(sn+>X4Gmz&(x$`dN) z89id~)vf-4ztzjWYNo4NveU($Q#sZCk+mHS=J@RyRdPz$)sDM5*iRpI<=PWVdfj%5 zt8;4G>pOTpsP|8-TeX=z;fC4$CQt7-dD`UJH`tM(-j?=jV?7m;n=bME;wssF)`T&$ zC)ky)%BkXNZC85P=os6s&5B!t zCd{^{_V!+6FI=26DY?9-r=YZbYCukn($jD3In5#)_OV<2?I}q9IKXpnPNl(Dw{BC! z5A4y6^BUNhy?Ji?ql0-B?Oiu`E807+@(j!C`_GpBVz;+bve`h-${d@vg%vMT=u>to znA6{GaGj@KGBemSv!p#?Ku*oPRvm7bFuVVldHrY1o-wP>wD6p%H%#a`F?r=kPrKso zzNR+&7v*{ECtS5^CfASl>?l#uOn={<|d8^u)&90tyrxUK+g1-Mm)Vj@e6J~cGGj-gYsZ@942hSQa{f3D% zW=-p6yZpr(Cw~Zgj+FZ^UhJ!#6R>-%cU_u1x6sqAg1xoCQ`sK(L$#`Q%qIOCmB$4W1xqPCrA;_=!qe&*_)JiXpC+;ySHkD2SLVjmtws%;)wtyXez+|#vKnE`#z zR|C~<&E)HkdRA7bX;f^X1pDXt-aI=nrdrkH+^wFTWn2E=+eWL_l4MJ>QkAXtDiI{KV#GW{Y0O5&(pp_ zQJw95gL5vjm)FQCQ=FRF0DG}b&3*n6SIwk%pXXfh(&r+E$YS8jH)tuFZ+>Fd9{-*j(P6RH5`4>Q=WXspY3dgTE*?P z4|{9bzRtyRlb`(Hxyw~{K%pNxkvOin1hMl>_TRi#bS-2FHI;MAfp}?D8!aI0SQF~n=+1~$iPBpu)uUMC4yoA@zsrFAS zd)O;Zx$4-#+w> z_3L>T7O%}6#(%YMGTzAB)K$JnU9nA?C*N)C{XEz6Uo-ZwpY2ahy=SGXcJg2=@6#n3 z{4XaQKecCYZgOFJ@6NIfipVQ8b1VPk>62#%$IKct?S`Inlb3b(-c{Ocqmf|Fg$?ES z@|=2hi_40YvQPH&eqj=SvB1;K{@|XR{N%6wy`_u)m!RA@FQ-AyfWG$5i8*!bze{@S zBs&fCwkh?08BcVbejUaWV}5cCO{Ru>_vPmOvjJ>&Kx(dcjrHy?(u}Dq=w|zRR%~G3 zI?h|8?1i;QzEWV@Cnq?|Qw}?d#{d%GkNNG_w5pJ6AP(>Vdqf$-{Sg50&|k)>G$3YT(ZucGa-! zH7-`gUe};l_2dutd#@^CyC-=5TfLGQo4E$rGnc#SB(HhUds%K_r|R^>kJ_$+IC=|L$jh_K_3}2gAImLPH@WU9Z=VuXDJGn6TWWFJS3j?=?Vg#}%FdRiTI#sf zJFZ-XB7uLly?7fH?%zM;c#_*+^FCYl|7|?c)ee=Uo^!yEoKnf?yWWkZ@~I{NQxsE` zrq8xNf7DaMc29AYw2QCyxb1nr=Tx?n-&d=aPvgY@k#*+Lyyo^5NAoHrw;u4`SFF;1 zgh4y{oVOr3<*@h5l12N%e)g%QE_ZU&r{0{L3uEtVce)zeSB&vCwm)f_vpQKb<4qN- zN>c!glrK;_vOUL_{OwEcp<)+sb|3XzZ1?QpscKi)nA11e=o@d39FKHU|1>4C7q6nh z%8pKXm6P{==Y2Y-*7-^;6vS>Q-CzDGZ#_HoqxV?t{~qJ0McH4pt(IrMvY9+{%1_>Z zx!V8#wXL~Hch-Ap=`t5g6DTg|2sYXKjJHnlyup3`)61wzE6t>01$O6o?IW{XmF>sQ zc^BF5{gqSdKc;%z0VnhS^8Q-9NHn4GeY0dna-BdaEZttyn9!l>dKtXsgx}rjHpr6|<$DlgB2%$g9;T$KKx2 zTccvDR+8wdeyGfV0gULe+)KP9P4ww9Z7#dvahS`O<_v1Ls3 zw9-X}7n|EW`TM+ioPADg@eMPOS0^+mx|%m%^FVT9dL74;C#rb2Suw+sqK~xoMt?WK z2^VM`$etq*S|9C;PD%`2k1kWrn^HVBEth9rT+Rl80#2OQv$$>CSFw8wq?T(@b4ILl zDXU)CB*b`QCOH>8-J;8l?+_aW^*I-2iw(r~n(=taggoKU zrEC>r%Vc`1M8`V5&;v0^9n0QcniQRot$?q}tj`B_ONa`4E=12y85D~M%VJ;aS~mNJ z4rAYRx;eh?ISMZEd9zK1>B~h`oDrV7_*~7H7W)cxjGGb@JL%a4yS)kJLgARA(awy} z)|iS>Ekc7}+81KCFS*0D{bAd17 zyY!kI>*Ok)_qi^0vOC!)hof5s0-X*+Md(bEqmQydQ@_@=(q}TzLp+Xd0xP25tpZMs}BP);lPY;Gko5d z7E3;_JZtiicBRW?`huHE?{;R4&)x8C@1wnqpHD?TalPQ>bb}w$SC+;!&PZ&bW3Z9dEf{!RXSyeDQ%E zFHd&%yc~>;D!RyNUVK`*6B-d$HmZ3j7}q0*GbJO|J1=x8uB5*@OhT98IJIzG8>kD^ z0}Ler4S_~LW57@o2LJsU2ha@giPI8cYoHC#Ry-552Oa@B0-b;^XfRIK(Bo0X{Kh$S z2MqNB`T+fb0l+}O&=U-tK?;W;911+8a}$gJo(4vl6OeI#GGMvRS0elX_)zC2 zSO=utb8ZgT0~>&iz$RcbuobYhjp=oq?cnUNT!cG;PwzQT$MNU)obSc)7r>Xm*T6yG z5O5gy7WfW03Y-8=0;d2&XMnRnCSd3XW3QiZ@C$GOxCj{f4Y&kc2Ce{C0YldqIM)&0 z0R8}Oig#P#-w6NJ@m++`=x$fl4$#z`MXwU>We9DgXCzupGFTR^WW4c&iYu(eXNjX~245 z1Mm^B4cHFs06qae19k&@085|WbG#SFUjX}nFHQM>rHlI&9zgiDjt?R{1Y`i;0N(*e zfMdW3;1qBgI0G2URCo^I&%m$1Z{l4-cm=qs^WPEPFs3&2r^3Gx{sY_vqO+l&0dfL{ zViD#B@&I{(e1M_+2nzs(bzT%EC${N-Z4tv1q_7|zNh2& z5v~9}(D`bFYk&`dwZJ;S(0YU$b-W4TM>^h&a0{><_!!s;d;)w5qyxKv-GKiK{Cou* z05X7k=^LDX4;%+h0;hn}fT1%8&+7P`LSEtTdGUThcmcQw{03YCt^iko-%a^n!@+gn z55Ur&IKBzo0&d^K{~O2unDZEPIzVsSv`#Kv5tbC<%CD zQ2wQHa4(g?d0FwwA*`U|iV98KN;s|pR0XO5)d53^2x|hhfZ9MEpgzzLXae|v7C>vD z4ba|?pGN>g9T0W|Is;vR?m!=)FVG(t1Plg-07HRcz*E2o;A!Al;5lFvFa|I*4&n2_ z1f3gR0LPPn$$)VT4P8 z<-kf{HLw;il!kBvuqg)R{}B#016zQtz&7Ax;1l38U^igs3xr<+T6Q86zx#Fl0K$Vn zhR#idZ*lzHJ?G!!_$Y83IN|bL|A(6Go>1l)9A^SQ0q22VfQ!H-;4)w+3*qm;b>If@ z7jP4}1^f;C1N;kEx_i%Ybauzd2E+ia|ILnroIos)3&;)R0rCPKpde5fFjPcgF@*6z z3E%;sBw(o&j=efBt*{)z@<0V30jL601^m_VW2gqgS~@o8wRK!qVLgQPfrdaMpb5|v z@BxOJBWwXY473!_@LS=y4bWb^M-X-dIs?hsk^inZ=nnJ(`T+d^L;VpB08)S_#2c(| z2*P2&lfYBrjX?OUj#Cjn2aMABXoO>QY-Eqs@wn_L|M5C`9^nhXi@;0bnaC4y8~`Q* zQ-SHgOyE^u7BCwyG)LiU2O6>wpcw zMqm@L71$1Z4D0|t0X_xNfn9*1-3a&S_;ZC{C^Xl<)bUpc_XGX|_&F%1iEvoQ-yr-} z$43yJ1Wo~GfK1>A;3wcb@H1fP7aU&%E{S&;;T7O2@Vj`|5&jAMWy=314sHW?fPa90 zfv6l5mmOgaAP&e2Kn)qdLTn;D?Q~)XhB$R)p|4z^> za9kCr22=+U0Yfzr*4A+yg!OgY0AVAbvCf+)Y>LpQt883mbW zWCFs8hN1I-!bu1x15<%%z;wXSOoX#_JO^PAmt&etMb2c!Y(fla_>U<=zzk52oC{=f$xCtfg`{%;5cv+I1T&&82S<6Ip93-Gw>^5 z=pw@3fXl#DV}svua2@yq_zSRfQ^&Uy-ck6Ejgu2?1&9W60I`6fIECgo7mo7)d4c?Z z2Pgy-1BwF=DXf67B9NeS6Sp#ss{qx28bD2;Hejd@!n!~` zAPHy)Gy)7YM%dIGn?BfwgXTaB;9;O8V5k+s)<7Gb8(upccK|wx*BN25j=Lc23Umj0 z0FMDZ0ZYAb+*{{;5cUO(ey1M}`U3-i6yR~d&_INPfgw5{ittHbIPf&^ERYI}1PqNr zI2stM^Kl4Y044wv0Y4A`CIN;f=Y;;LIGF*w0=x>$0bT>b1BSLC+zx!K^BoG!wNG&T zna+13+ym^>`IiX40`>z3fkVJy;2XfucM8q%_r@egfTO@k;1qBMI13ocMEHY_&m+75 zTm*g-&&0WeKX~mm;2FTsvk0F9MgpUN(SV_`2*&~Affo(WZGQ+~!pTHn z5-=H<0!#&_19*n%%mNI}Mi>O<0wG{N@Frkrfx<-!-%@C$iRZn%fP8OK|It-v<%wB%HX!>wJaZ{0&SQZ%AXmh-d~qn={9qQi=R!dp7e-hV zhzE*`_W;6DKpCA^Kv)T=0#pZT0JVTRKwY3dkOVXUBB>#Gjp9(f8snfzM1*EI_legW zVGE$8&RZdD4Ybj@5!@EX9dzDNVJC&15heqV0$qV_KzG1UPd^TN0sVmfKnn0UFbEh5 zJP8;Yj&KCRF=@VQ? z2X+B_fW5#MfTgc+d_d=i5q<-F4;%rG0>^+8z)8T+DTJqiGeD+zKOy`D_|=rZp-Z}O z8R1nR3%Cya3ETv319t#CVs)|uIe}Op4#)%K0}K^JSXjsAyayxMpaf77F!T_@ zGJc(qg~dIj@Pk?Gy%si0TTgZt@c0tS+;cDv~C+3+@m3ME!e zh$-D*sW&vJ>V;5pwZzbrYK=pCstt;16y5QOP-68NG2L%QUkIgFuNpJ-%J9*l8`Yr}7GbYt~=t*z07Ippzc@mTIl(=4UXrEIX*JnSl;_*;Q z;-JvJ#6fwU?e^Ew9=}fB`QX%2?}dCd>x9PF>>2v5X4Ozktr?+Ut@M%y6Z3s=_x9cL zrP95pJFi<-bke00N!1J9z3y*Pan#1~wMR$AUN4hp$%=1QcH4NTPM)Yxo_g`2gnHd# zLJvKcBQ&Glu+WWqX(b!vSY7as-5Zxo3C!Q}%Ib3acK$Kor99V3tXmTmEqiIji$wt{m99cP}=5OyNZJ8Zg zFK?)7v&8uMzrQgz*M;bf*Qc$nbZz#dJq8EP_gcTP%)ZcsW-~&uzO@ls~@^_y({#?(JW4;~z{k*nyLP>2CLnGSujXCuAo#CO3wh0^Ww5<~rs?)x0 zDA0b^M$aRKqe2NCIuw4q{(`Yb{w$FGcG{GpQMVg?u%uAyk3zu?Gh#lDu2U!E?btIk zq2rWgF`c4fy;bu)^x=Z`qe6u{4+{l4Cx$k4?iR|E+&45LdCjttU7|wXN882}`gFl- z8&e+*M}-P^^M;bTwTyWp|ID$WDcw-zy0s0ZM#U7*=EOM})9+c_Lv4QIcQ^@b$0(G2 z<|rM7lDoIfzM!2wOY0t={m4r;R(m{FW&CQ`^uePI$1N}aS<5Sf%@OX^P|qHT*<1a0 z*9X`c`kVk!!=0=UFZ>?eY;IY_Kf-x8`b&E=1Yqg%l_F&E4{-M z-I9HSm6v_OKlW-_t2=v-NtRdaEqgTPzk3@kv%F0V$}Z7 zk{-oEnLQKzmpxHVX(ulxkleOc)VKuD0c;>Jd|zYo%aZN%Muaj>ZYNiNtQ3Jti~rZd z&<*|@*~xzxPo@oB#3ODaC-V`?DMz-`3;RAG$M0mCDG{iRE}Z|F3VdPm3yB}~G5II5 zr~sbICEpD4Q;w5gMEsJys5sn+ii?RqR|!2DW8%X-n|(iqYIrHA`qLCt(&b`dDA@=q z;&@JT1C&Snr0h|yCDP0Q6+|@{KbdlaC4y!g0(x5y7uS_W@q?ezp8O z*fnPK7Cvg80DCj?zZkrwGNJy1W^EgUB5`Tec_t{cJr(m8Gb+?#le5>RTWffs+YKtP{2Jd=LB_{a zKyjGnr!%2m4@KK&w@2Pov%JXG(Z`jJI<}bdmtLU!0xlor|LyO}!7Q52YyvTqa8;Ht z3r?Wk?k@(~*z{v6QHl~|o9m@7s37@cCg=|p8J@GcIbPd@ifc;F;Y7WN zTd-)-e_$cPwX^*_yoHMQ-l8Cu9EPRXP-aY>wt^hEbe9$-lAm~!p3YXf!Po|AI-76; z3&nP3N9R!fvD1{_l46|i)?#a$NvZEPQ)*4OryDzrqh-^{{5wi0!Hn>lk-8UN!K<_$qJ5e88`)*d@C z1A$ZbXW-@qCe+)T@jrC$f^{}AL9NY$ACSMfE)P)7Xd*}P$wdHe)Ik-K!^ zNAlC(W#yHDoPnQEalkxL0>J<-nZ2^6ZnZRztUx8)UzGo^=m$+12UJT(@PgBLC2z3L zt!!nS{0rk}nAK8{d9q+==UT>(H_x^})!kpLRh^dnMvPxqrW=%D_)fF1=0(L%E64bwM>D?dgifHH8%sR%KKQ2o z&(jTcvGdPdNPCKoXs-CBE;B*tUot`b#q+dDRGc!BtpjerrN=5#!N_q`3XS?TOpuNypx;h%qnid9*h=x*dkFC^a%(SAb_xDMw4ZPV6G zF4jn}&(kEx*}w$7BmNQ8dc*JFXlP{>^jk;;$JjeLt#rc{>|iyHC8IeTq^%P<>QK`Da_pNK{B2Mbn`vt|~ z)Z`#d&99Ps7uG@4Y5Crv=nj@IpT9;vzpD5{$0=iG0man+Q@W5og9#g%2Uh8uk#xfualfD|3=~Mk>Bs8s<#x|Y4QQ%FVKT{w=Xc|UrU3`%;Plaue#%{ z1-zl46i*YsriNA?O)#wG>Q-a?K>;RckK&(dPrldemjKb;SVudD{2P;I$cI}&Ee^9* zXMRiHYUgr;GHANQ1*~*&YWE3w$xk&a-=L3Fhk{KhXYikF9cA3BSfQWDI*~pm7wf-V zxD$`f-KNYvv&ei zg8mQ7k4LE>)jSji+5NWPqjk9BgFjdqF`9O%Wf$fk7%^q5Hy`tOr?}IhCdWd|H#QZ$ z$c$w?$s|5UG0tj#C#J~Vs{$s9(4}Wu%G72}5|rltVl&sj>1V0HHnaJfy(Vk++FkL- z&1XWBe_;mdi(h9t<-{DL9MnOV9!EE86kp6Fzk!#tSNu%8rC<{3EyUXXfcP6ywIE70*9IT^e4 zcmQ?KrEf7(FoFu6X1&Fn(xqLk$bZx9hXajsf3XV%^8yn;qYits+`R03jNZ>p=mX@p zQT$^+FhQyR8#A)~Kkzbd2&nh7z1H?JoOqi)d!=?_)x}W&;oC5w-h| znoxe`Sr(bn={(jS`rVYOdwoqQE#H{!K5(4P42E&(EeyF_(`hl?CUp2$w1o2zi=e(V z+-}7LO)f}ABgxsYPx1YQd4pA4b_&~f>Mknw=!UTcn4t6w@)N{A`7ASV!)#LnRT97A zFe*rl@E?WNksln%I)wEf(%&c~Qo4@!U%eCqeUdjI><3v5xU)X`F8z(Uvq8 zO?WJG7OnX6abV=1Z%Fw|#7|gj_!$4^`-2y(=^8hqpu`B@-l01AUh~ill%&>?b%mDm zX`KM;3@$ari$Z41nA|?UdtOZZ2eL6i$IM*O)PHNz8#8!ePs9KucUhKMN@prYV{vKm zLh;YhW^jlu9m9Oy6lH2_x}aQAa11FkmiX=*Gi*Gp+y2&|S1=b6)d`fM9Ovr;%vrMb z|Dc<9Y5W)}NHfo(KyZ{UOTW4m+MJ62 z)z00@t~fk~zD@3<*BC$3Y}Wz(C^_CcEVA@MECTC@su|Y{y&bM<{NGgyk{Yqh zvg-2&TYEdLXO6w2Sh+eX{!T4ehTF3lW1{2ILA+|`PDp;Zzquy2qvE9+ioySr7G&~* zyNL)abOA1vbBEP=oz%8W5c(>Y`hKpWX-ZG0MKfnFJg&*vwVo`3B8q<$iVT0scJghn z=zqQjFT`qCJxMp5+iM&Vq*bC~Tb8$0F@8O>jTB@nZ++Ks<#iG(GJXNcNxseaS!Rb6 zh*z=o>r*!a82@Ku4&KoX^Qn@F-TU4`DvaV5o1%Spu<#i-cktiVrH z5Y!4PYX+8F&r(i?Ea6InerH!_UT7b@U%`!fRFG(%yo0W~zgTp7R+iACW7-ef#$alb z0nb4gb3cSKapk_65F( zzTm4;vQXFiEp+}($|?D?*#Qo+6N8?Z)fxrCPiQnd_{%HSLURWcO+MHpD)=g;-jU?#F@kC$KZ=a^$k4Vrf z^%=kCG%8pp{^|3qj9IFTHUk@qGh=>FWtNT2acC(8O^op2BNCXipo+jcq9!wG(!lcj zo8^bwDJLW1aow|rSxGbZxRuoJq$s78;IxgYBOj^s8$dxp4bf^SezU%epL&-Wcv?O` z+@E|;91|2He&1HK#0U9kq1mn+l>f7652jL-+{z2KcbdAAf`Z-Xh$>6*Q8)~f(5#+R zTvYsC8ps4TQ;x0F{T`>BKt(2qcVQ<=S?D$6|B)kk!vqN$^QRQNMVI+KMlgm3A{{27 zzx7~zTUR=7CV%8D^6iKyi0;lLv`f+ZRPkuz6-lR=RLICdl^dW&bjcsJN4?d4baDY+h?BFP8al(KC7^zsI9~UI^&fuI=w* zv?A*LK$S>0{Q4`)GV*!g^Qyc~b@~bOmYJa}_yd!H@Mlb@ZGIouW`=Y4wQ$&j@tsHD zYt0RB{7lpN#Bb7=%`Z8LB5d=U`ZnWV(U`8M;>RF@k@H$#%Bd#)Q&*UQ^bt(xf8+nE zukwcBCwaqk-Eeg^`6JZd&lA7&ZMNe?bvD+dt>dU5?c-QCrs}TKXBy=kRO_H!(f^*n zOvRLqS3@OR1o@!J&v8gRDk?l8p&A4b?yumr)bhyP=y~ns~neRjvtif*Bryg z_&-JK_OD67qBmGJqYuy$=6!2JSs%&Mt)oA%1C34B$1a(TnMPLu=QihE(98W)&M5Rw)-G*X!!ruBi~vsW(VtvPh-Z?Zt}4^ za5CkmXqIhilH30c!D!I5`(j$BgM)Kv#D;ewKM(0EDXG(##Q5oT)t{ z6~%9>N*eg}{tVyvdoJ#4!Rk_j~a;2&(PO%A8ocKJ;p1*ixTbGuoc9;zw zLqeDGW-@+e6;?W1#03YC@8qWB?ymiD%k@EQ1!{Y(VoQ1VZ z2L8mQ5+j+jo=q5&>akph*|f1-@FbOh(bxhDRe;PjQZ@bG|SfMaE%lMRo#{3d=>22~o zS7|hyy7W$G3OY513hI#UeC&2YC7fYe|5sPwe1wsb+X?-~BHm}>oAN(vFI>Fm0{BmU z#~fsx$YG-X_f46J+bAgf5952>t9TLSHS$ybBtKROEzy+;J-C1gwPhc78T!q0eNV)= zz0)k-@P;}SJC{p^=P_km^;HV8j;JPbVfa1dlC6U0FVS*oT1)0#$gtKMhCiwCzb%65 zy`@;saw;ijb9T}a;oB4e|Kn1gFId~N+Of9V%KIF?0b>%B2KR1=H3PfEHMh*r+%iA? zA9nU?a+$2jrSrqF?VlM|Eg5_zOB*$gv3vWY{vBWOZ*??eqmwdS> z$M1AvZEv6p3#Tfjv#20i9;8Y#bDXXvR2m%nq%nvy3A%ih_52Yf=<8loJWEAMY1kLt zkNkq>>9?u>w(OU^Nd+0dGU~TV(7Z)VP~y+zd&M_HJd?A%dPZDI{HIj8{xYv9gDl^C zFUKU*dyTev)Xf2EZjWtdB$L+(YSW1I?OQ7;K`P_oQjlwtnx9rUSBl@LE#oJe&F`S$ z;$O$37Srwn5d)lVrVg3$zq=D3k?l|^rZjUF8?l}4Ne#n;=8X&x<{K`(JCTahv?y(B z`|HYaq8>a^L<7{D}(((-9FWYJv6>eP>H1!G$>*++T}UMcg$va z&}#P=FKb|HmMO|iExB69l>-Jd2^!Irb;35k0y8oGHy3=Gz1ntv9-WY}L^xtzFn9*z zrz;1=q&RwEWzk>3gaAhQ1549C!`vNlvT>{U$)vuX~EwdKM6m;!%3TiI}PpAky z(G=tn|DS9u0*`qu3v^oi#%R?hWAR!Cw5?$HgXA}!Mfv_(x}nEX<~S`v!3Q_kzP$@L z*0ZL&i!w3_hV-T&$aQJUjj(U^p$MXYlD5k$CN%v7nu)3Z2@;gl z!(7Pgq-e+T1LA)cM+M=CT{1VpHwjADR0~~zOBp{gq3IC|kh^M7PKMs@*$ju{w!e|^ z!KSu5TKPn}Tv~FO3X(Nh>>_@Rd9+YfP0j2$;P3fr9eO0oVG9N>&oKU(4YcTwk^?bZ z|1VXC7slzr{@dj%e0w6O=Ghd^O7glD|Szxs-Jp zAixqX<=LyUjA8A?VArKW=)YZmaD}$nN4ERHFjMx~8!$o3#Q(85<@kPJ2CQGX@fs7f z+&<)X?T?!(F64!0exx9q(zkwQ5%?OiAMPOqIqooi@@Y0p>oH%vMSkLH@<%HJR|+se z?u&GgK`pR(-4Sp-+5_*wK3h99|?>!cFYArBLTMQxXAz!jRJ zN%YYYZN&FyF$0NX3?KIYSr>+*>`n7a(_qq8uJX@Q(3LGzP+jpueHlMp&DA4*hOI-l znPXe_GksM2p!qxvXruWt~>qII#D$jEnzKpy%`mMYrYZ$Do_81qwFlpsX#OR1oL#C+kGo^CU9!e{8XY$Yvsi}L*$qu5fX%LTqsRgNO!aat`@ z4wK`F18IrpRhVZhQi1a=6|_}C_h8-KWX!jUHt5P$=$z|EIW6q?zp8F%ouwSVNKcnd zE^XKvDoDLa1-58XZ_*M$JB>vFVlppNLX33&N`>QpSDY_G} zNYv6@Br4(r58ki%@tYKs^$abyQVMQOAwP98i_(4^@?9u4mUA%NHq>45r^2(j`~Q8z zX`2};f|NVF!BdzffF)geY&a8IXDxGsUfY?gvJE8Qe1-ll#%tbX0r>VBV7LGm3ccu#WHRAZ5OwR@(g<$uj0%g`5M zuz2R`ca9dJ;l z?}saP>ChJD;KVInC@20Ncpj7EqM9(UZetB+Aom|T#AdYB@CPQLfr$48zq`)(iRKe7 zAo~H(Lyb(`!uT&G;uVbT)0Bg^m{*o{MwQj>hRbeCo}WF_@Q$Qitj@zb<)YvttZ z!q$;#CMu@>|L4)3W)2?GF!?npsGmyyH)`Ky#4n|xRc1UZuT{_r-LJ94oklF0j*7n? zqgk`umweB1pWFUQo~4PB_1z!a%>GF-DaD=+J~rpJWN5E<|{d%cs0wPF|si6 zZ*RUo{@EPNaZ1GAkiF{|Kdga__CMq6b1kT#el!Ik;VzY!#v8^;0S(A+h8x8P>M_1r zne+2LPUU=jyzUH>oCOas$62-5EX`+i4f#)@mKs4R5!>c+Yc0r$SPL42MI{s8TaYdY z6C;;;yhVP7`Uu8wp>wrt{?(h^hu;26!0_4;5r+bH&E z7HnroVa#~kVS8mJ2y~*YEb`AD+j;sp@PJ}*_^z(VQm%i z18Uzn#BYMdWTQAikJ+dmk7jB!17Z1(Jd&T^M>(nYKG-nr@2y8@qCIn&QfrBSQHk7X zx!!6CNbx>6d1HyMGZh?G%lB_fN$h`e@ry_|DOk}^#&Cj zj2Ojcs!n({)~n*)h3}!9p-Iz=TrneJX{W5eB~z4aCU2n6 zbi?eGR8UYai@*)I)ElNVWgphwFWbyQE2!8h&dOU_@mtNNoIBczfpoj{UK08K8IxLbTi%%xg2*KYr4i)2lcuwhIlSD{F#b98WD97|1c_nQJkzwYI8iy$M`$% z(66Mp@lpRiyu@~#-htJ}*50KWOt#k?&o-xbi!wnzy#MuN=xf3P}DSC0vEUYfug-q^+)x=BzSSjsJXt(LVFKg)d}fo{4DGf-6g zs4v(T1oRrN9cO$RQU-SAa>pP4?P@E!SQjoajmK0p(W&I8wjICc$N=EH-9gbeZo#ApZ$V_35Z?B*wY!P&J=Y)9Aw-s}2 z%Qz0pU2fSAXF{#wO$)_$vsNy`da7ktKxQ9ej)OtYg#OSCOU^Js?pF}O zTPXhCcj?j6bJB-eQ?DGr_>ns(YOR(<{hE#1cKj2jt0o6GK4OmH$Xv?Xj5*jFu|*@j zGb?XcBO>eD7aSyisGfw-PVkslC@1}K4rKh}89HmusTJru9o7;*Jw}tJ{Y;-|6FPMi zbKq>HskI*A6w-P?hF(yzmdMkW8JqLoeMRYa+9+oO-Tk=OR<9gC)PN?JuHy54i! zC}_D>O06R*mYWGmG~a*&eZZ1)s#j+GavDq8_+MdhyR_rSb2*inRs8H*yx}3ec)Qtx+*K0ihApZtaiO3?~xL-Bi`W!YyoXPFznV)Q$`Ml;7fHORC> zsI_}}L%21Y%{0}OM^S{Pl9utYEUiiR{-gNcGU6#&qUv!bC^Ma9QbCUHuOGGlC%G2; zZ&YTNf`!$~MNA~}X%w4kzC{Q6L-CJ(%J`0^@wT=nY2Ke|zFP)rtx<1`CaInzKQCCv zQvC&{G+AHP8tC4Jc8<}o@m%4L7~c*kiZoXdXiR5Y$Le;p#Amf=A=Gh~N(^REdhA;; zuKjW8&q=(H_A_g{E#tq?oQ&ec$Ef%@32FovYdmJ!FZaj4j6yX<^UORdep2y!+=#*h z$GlFG{+&;a!|{*#k||AnoMntTrAu$MB7b#$3K}CpZK_eh$`{DTsY|}E7(Zn&<=j%U z>DPhrhiPzY9aJ+|0vW^le-*}L{_tXe`uo(aOk)|9*=jUvle1x__JPj1zxZ%&eHMXN zW!y&m1v_auXCqrjMgd+pyI=92GV)>neai9RPBf`6;!_H_4{1uJ?*aIvpr)ExvYMIo z2PgN?5?KvtiT=9qYDs3G=)DsjQ~uw~WlDW}X$jl>`f1=0*(`s{qJqS+Y-YIKrS4j| z$XG-;Gx3X==1Omo8)d&Q!Y8h)rh;4@**?E)M|2&6-!gwc3-)$5~TS;X(_I>gLNw_!i7KOf14=^T%jPVxV!5Q@bZ|CmQdw& zhN4q3337U{RxePIUEIwC1@zE~1%&5{;}n0${qny<2 zKA+5-eW$15$f!$`FcdR_5>;1hE7&}h@w=&LIx7Az^H{`A3pZnar>rjgah1ZN{@I-^<-XJ zA~A`s=@BV-ryT`llW+e-8MuoQF_x(J7%Srs;#Yf?@&jF11Q6?z`F{>~|4-y=Hp_fe zkf8^Kk4jL%pIC_!v)6PvwvU+cG!MrMGox&`YC7kNy^XCbRC;!+5R@e zhnrd**i2KOl%RKJlJ9+&rfVhs(vGx*FJi%=;2g$J)`v_mx_4=Mb@J2ITuVvLvu`1W zTYDq+{XMWmf+n(c{H+^CO=o=PJtoLDvr(&Qp|;mq_ST}W{y=_m#75?9cmQbhI{t~g zVXzcbz>0?H*TXR^V>`$D>OtOcOr3{qH8=W_e?!A+cvhG8HewyBuK!FqEB*(l_QujX ze&-m>Ur84x3}lXj6`8Xh;uknTexMaC(M$YQU1^Erdsnk?EdZFDeOa3svvQ`nGo-vu z`opX}sw;lybELrBa8Qp}t&5G@#grzNpppBjvzeymWIvqxq7t<83KNw13dfSRGmFu@ zAX6DQp!g#z8ogNm&(H>=V!9C1oQij;*RlyZ@+cMfB63_~Gx_OyFQB&MY+lFKk=dF# zww+lAR3?+*EK?^;{kP5OyVW#xn&yOB6nFN+2b($(&^n+;3c7#E_*q3+G`3f)J5;Sh z8xC!M{|L&$DE7R~qL~IcZu^@WWDZg`u6C zGE7jWzHs=C_*>US$TH z<&P| zBOS{Z0rCU-67Lg??p(uQ(=@--A}q3G*Z#Qp)nm*-Skr7qux0%BE%Fo1HylA_)r{9=bNPNJQy-SM9xZkU6I4~J*tYq- ze~y*T(XKW-B3g=SZ*tZt;vKOMKjYJ`jE3~2Tou4KlhHm+LXVrjt1|V!nwu`XhJzc- z;4`e+UQYbyYS7flU(%%ZZ|u%iV0^FMh~)4DbH!_FuCY{Xn`^K4DaWh#3ELR?ru=tg zF-2aD=Vc-MdzehBPv+NP<#xB%m>e(F(8^lK{LiN0uTeAGtPIp>P5E{7Bm~c_T>7}A z#{U`hn6tWQr-rJfQ*rQfwr}$fD~7J>2}W9k2b>3qM)6l4vT_w?bmzC%X`xJx^&D%7 zz--1Za9ZR4Qo7*_6oDz5v=da!J=*x(crtI8HlGUGD}INQ%vowpHrGVv!x>tNMc~sS zl=XlKs$0QZl%w@ed?ao^%O>z7Yc*EkT>2aB$0TToTUqc}UHrRCWT6d=|2^e7tC}%> z;Cm*>c3Sn|0*#yuZE#j}C!haE<}9EAf-U=I7bqyLBL%%I#mSW!zo}NU;K*F6qlCVu z*LCWM|7%Oi$(ffbStaqs`6rklzxNVN9b;MpXu|tcaO?_is6@6iK$WPkHV$AM;nI^B zp_rVFE6(_~(tYNSbiV5OxDI&}1VU)GRQI&C4B|46<;=gl@8A!RAhyB0pE_1A+ppw_9*jBo&xWR3f zdNaz7lx{$-$?@xY##2EGYPMjG9c@Y(E&e4(7S%hWsTzMcRmxL=PxEryo2|r+M!_3; z;=z32eSs!w-)0Ln$mjmzjR-Vjcl0a^p>Dd=@n0q=-Tb)?Xqx+r&j4S-_}|=+6)~mq zXnvom34={gg@a6xSKoNG{B%vh(mOJV*2VrIhm-N2!=Yx6ru`{?&HHT;d_9(y2%As* zgSs=m<3;ajEK#x-i>9RbyWlzv|Hl#J+iCg0+mw^yXSds*fzx3P|SiPoV_mLvKljtOnW4EUWVN;5@MBHnfh zR3|??l{d^&j?Mq9njA;2`HZPg#kI}fOM;@LIo}N?)Tv1m{2og|u~EiC82@J`kW)w= zs`2*}lz56cu!GFTUJA<6K7S?)j|IX^&?b$bYth#=rO%B*6dt z*Qq?Yl^5#Vrf6H+^Iaj|S;pFnwIr8(Ur<3-MJ9AE1Lr2%r?JpTy)RrriqjjK%8m`r z+RkGVYVHX&2SqE^bHu>-|ub0 zgg&S(9o9l^9IgNR^a?f{nM-5cp%rF45ns8xh%z>cBfsliWh!gCXC^Z+QWjcwK}D$| zu&rjU`jo^=TK{h+#VtOfphVOQLobLwqZ}2t7|o)w-KbxcF>;mbnbNeJSD$D^D|M+8 zioj$b&AvD2+8>u%)}dl&5*63b4QF91w`jEO)_Szfn5Y<+9Ql3l&S)kk{t3Nc@Tlbc zIE?&sy^d!s;Wy6#%?;0VWX|sDhId;tK^gkM=oaxuHmBk=Eu+COE=`qU&kvMi%edGl zl<(920PE)440s6(|AK2ZA`E!{T_wt4xzNy+cwL14A0%!@lo~#36j%M zjw>L?MX!KAh&z$-4v+VcihHu|vWeIm6zZ&H^$B+V3WP`Op zP)hOhPhvtd&(jk7#4q;)<0nRpF+amd$?x`l8YWSTODvP1*D8}g{CV=L zh~GFLGZ6eI*5#BIf1j4`Qnh^7R{Ul*p+9T?k4@cKy!or<6T>pLq1`Gvh;ec zRs62_K|PSLb*SSzl+#)-FxXbm2d>k|Khl+okq(#E`d9NpZ}rCobs-M3Zgazoh#aKN zBES793L2#No7&Jq?-nKhIq^$%VEk9~_|1CQ-0zd`e^29lJ7L)Eqo6Wc{jv@uPV@V; zYILzZq+nQkS}1azASVX=rfwxi?4EBrTzv}nlKB7oURSn(s=fLGf-Qn7ZeNhs$*RF- zW6O9We6Xn#U+rg|fWcf^iqWRA+`rl#XNw@`dDX2C8I%44?XUb~qZpr9)1ww!1RGRl zWxCO%ouuG$St@8fihSD&hD%N`LQYHp#=q42{`eU^q1O)+CFeE`Um9q(z$rR1x1QLHcW-M_jE5jF(pLZKqM19&5=C?lIpPPy^ z^;d}pXb@-OXEb$|#`Csl7OYhnYjxXJ(!M`4L4h0`BPB`keiWs#v`@{?OTORPGLI>( ztbv1_EP6&zkmpC%37gQzv{d70sb-869F{+b{9JFn1ZFHvJ1A^r%>Am7kNrQsU+=GU zAI_HPPSXT7XO+*8pV^EiwPki2egqPDNHk&jrE}-wW!5R%$GfWTtYa{@dQE zk19pR2P}JA8Drb?hSm{VFT;zOv&4uwqp=P@Y6Th%KdsrZ ze^ou2=$-HBO1nwHT8xH`OLpWatOD~tmqx*zh>^^dwdA+{lZw%Yk#kANvbWHqhFJsHG)OfM)EtT_v5Zx z*xzouwM(&KTQ<5O=PrI!uB|@RpptP)qW?CoIz^9c(7Ie|pdnqkh#_5rs!UK=yJg)B znDT$ExN7?$R>lPq6upclU4D@!gJ#J-(+J0Uw7q+%z!UKTL)0S1kJoM(j7MC` zK;Pl+{|`s3;cV^A8zLu*H8A`&MR0606I4cm7MxNBGz_htvB)}%GwXM!@il5Z=~;Utq|G)XO`*xDY824iyO(^4!Pt4p=o zlmE(VRNPAZc78k%G|engE0*!PuuzNAK`lz#0Z55}5@i0x6VylXy;I1~irB=mL6+;E zn~LoOW_d9t$X{KHM2P27*Gn{ArvA4*Q<|4feOd{+lST!F&2kyY`h(iFDQJZr&D2u-{#px4 znZ+d9@xAUl;m6o0`& z#_ynJW-T!Tx0`Rhq(yw{WlL}9HRJ#AS*EC`1ZC4gW2P1wX%GAZFe;s?T{k&i#0UAA!(Z8^4Z!(aj-S$YXtKTWBk;zW2XxK8|v6DITb)sVH z+mEBjjG&B&r{DE^kspY7ir&y&s=*vmZ%8~OOJo`UW6H*#8hzhHIN; zv)b|#5qrH`q4pWe?LERGfd6r+j+)s8J)E`~`*kkmc>JHzbk=jdif-5B%+VrLk^~(- zry|hP@8RNaLnmY$Q9v&i*uYwJL5GU;iPY?;qmdn-@{>0S&`Zr(BwR znF>4|Y5WJoH_w<&LSrNLfagOuZ5&$g^1aOr{~rAm<)mq^n0iaU^R_$pLk{%m1)GB* z^QmBb#JgZa;4zJ2pZ@K_#t&mRt0@BCPI@fcTzy)6UUNOhP5Qgaz^llKyZ>jFhSj#c z`qVq!h~U4hR^Vi@G8User=MN@8p4L!QKl|0#iOLSffSdN|Hv2z|6%HXhH6(Hq`>6t zlE&?}2>PHM8YD|2eOl6n)m;X&TELoQMg@kEN6YJ@>Oyuwf47w~%s}8g zE8S3vcV5Pr4|4oYRn1gvCsAKz?^W5C)(z7z{Wc~IMEvVjSuH{ZmfY{@UTx0!-$i^Q z;?yi=V6D4?iu!LAANhzWP1Ste+T)iRB8$bjBZ~+@XuL{$OOfil7ja(nDq6 z@GSY>)*P^?_jaDZ^xkg-W#}amj}(7^8%@rpHDXrti9Z6N;V-XEz8%k3M(^Uf-hcAA zF@I8>m|ut%N{M)l=M1hJIc@7}{BIRxS7(!@S21mSorXD{>E+VZM_9))6q<~nbWO8u zk!|^1tx12gXZwP~@H{4=$!6#dI;8Q3GxJ+D8@*&|Z!rJF=qiXZ(d~ zK?9i)T4H(KRf7)`qVl>$rkxLM#eWU+FIPcgDowgd7xExMMzKc;Y9s!QIgH=p4CB8q z{-@C77J)v~w?;#;;|m!7orrFIb`{F^r$)THSr-n$D88T>jBS459pp#;MQc;#_-Mq# zsN=&KzwkOHw7Du{f+nd!ZqNVU`v27+P3kMi`dLnuXuEP;QaP@m91rY71+(PaVMv!s zJWl?Oh<8SpMp3>;|D4S9p#4?s%nLz{N^SF~sPX?r^?v9xTuOv#jfF0%b=bNx3+sKR z2r>ecP*L#{R2d`x(zSRa6oJ|QlN?b5?Y2-*qMijeq~CFJ$sZ(Zl4@P@?&?fXt!Xs1 zwa^L;K(6a`TkBVLsm`51oiqODzyD}`e;Eb+^cw})PUWdutX#Xbxy%kq*A`$U%F-~L zci}(ZS5VFsJ*co2dj1^cgxk>(^|9ms#yB@7-QIyBHpz6$8?xO8HO;p3_$N+NP`Z|4 zt%8S+&~j-J8^PG&lGn zKGB%>Q(7YPE)!Z&?S51;GthWG`R$ou=eHY-?~|YKTSt*y4;Xx%n1i5hm{5c{OV+2E z+KB(zcgk_ZYxx}yQL&@X?#U2N({{8(SYO8-N;!V#&%HE-Ct?NU4J^Hw=JelRrAo2q zs1$2sf;DNWN|fV7>;ve6Nv$c$$bUrr$!9EqeIBFrq|-K!l=4&%`46W*zeGXlqiCT; zD*Uo?L~G@UZ0GdQbF@T^7MoCYT*|}}jwwpVJf=78Z=Wu-e2_QH&=xG4px!gdzo20? z=9DhIJcS7jPh^7j$ks1n>}7I%p$p3%Zos8Jc%owX_x|Im+y3*d;|(M9EExX8rKRrV z5(5oAT(a%Hfd(vVe&v9rmK6VjZp{=~Y85IjCjLX1;<=tt`vcC$Q~sFOk$;n-$p2`4 z0dqNHqJW+U1{mLIjIor7ANg0T*$+{HZx#n2Rn-boAjc>U?0`u?>FzIP``MJBDSlqa z&cMl~BB(rzIlv&5bWzPr8;QDz-4DZGqabk>#{ssC(>`JRlz%8^f$GZi94rE#7OQi( z_J^?YEqKEYhc}Fqf)7)vAblgtxSsgsH3m%67ZYSrXD2+P87XDzZ@X+?P)MWRbS+MO zFFF46YWJxT4;DYJMpF+8FhP5C!#ib_0}aD%C-h@q#*h4y+4uhCzu_*>>X*bg72kB@ z`<>DHDotr!DIi~+@pL|yvtRsq8sS9#DQ$&YRGgt@dpic~1-_|6S^Ln;K-NN6o?`sq zdXq8O-#U;(88o%;T~;FdaOo*XG?lKfp5NQ}{a28GBI0rUrMGCI%$qDSRW0Y4>wE>< zd+#gQru>VcA2bS1X>Zoos=YsjZZ*$0;1s;ZD-X z=HxpOU%{=tgb7Wao`>~6q#Hi1&UT-!2Z+|;p5KsJtgPM z+;Xwne9~6@g)oe3X$|L#aQuTE5XrpIL+kT(bVCPBk&LM`w5P+?_N2LtANgmsH+w5* z7n#uRk~2Pu2?|Dh%%Xw+b>0xr^L}_%mmY1&oc$f~#N)_u3d*z}5K#QDR0OFi0$b@8 z&Y}FY4_O%tEB-&Qw6TOg^>e1Qhc0Y;fjJw$m9=NK_(dOPf|lwt-8P~7|Kh^Jpoo9F zs5y&@!+IqvuZk=d&x(xVj1q1o^*a@%;K9~ZaH}8{TLqo4MccFj@6*h|HpTz;BPKLn z4;*c$)j<9utj}|HR{Xz5F#a{S-8)WImyi1QP-7}yt$#3pCwA#LdM}gGe-4$&WMF?rjLWeZ8vu{wj{gtq5lkuFa0DH;xuJf<;?W=s z9E^fw?SS+uegQZf0DBUW?x#?X*f@Ew5mQv3H?S6$D=>Fx2>c080a@9iv080)UxE~Q5jpGzo;24 z)b`U>T!46a$o=d(T8FlIHIlOS}G%vIi|6k2& zBR3{*+9*L0?~3F==VfxdH=@-vl7mW=gVG?@@AQ0=IY>Rj_PtArTf0jpc==S{^}~SK zrO*s2ctxY(1o8WypoP+kvM=}qGbTfu)kh?6rK3Bd!avf~#K-u5x;7e=XM88oopfSV zOcMz-QQnda&<8=Fl1_o#VX|D8Dq z&t(p3ivI!nb#p_e9!A+5=fZ-e+wQdvXcKyT2^F`DcycnVKIIqJ8xqDqZu=|u4=Y{d z-{iKrK|zs!x0~=a1!cXL!(_({|osk5g(VWt!B1L4yvx?D5RvNq$1uog1oUHjvv zL(pUtpXtLK*ddn(*9tmuPR4YZKnk|M&-l?-8Na>wo3645GM=V~_)CtW5(b|}v7^DK z&6xjE9yyRlSgT8`(v1*5<0#uph?kwUB^W=m3d?w=Tx?<|7L60}^_=0zvB_BEzvQl5 z<7NQ;zcvn3RSxEEpn_yQQn4xR{UUSRe;adLUh&U8Kn0$5N|5;bQ5HsVo);NES^V!1 z8vcbkh7bFX(1rNZR2=!Iu|Y3y81gg)*~)c!EOQ(?co*4`1qx5zh z(Df|F|E8IROR<&|P+5N3oXsymlhJY#G#Vx~@e^mzRUa3>YLJyHP5=F1Ewt+yCNw2t zZW+3uIy4|3>wga>*m=D%O`51~)Ha)3x7nPM^(v-m6^4%f&Dn0c9$dl=xHM9WQ<2|{ zJc~+f%05-&|6&?{I4|{QioCg)Gh1dgDlr>k;^6o2YYF!14_M>wFcGoG#w^M>F)#(zqF;tgcQxMYt$ zv0#gAWF;yNk7q(D&2jQRM1Bdr-sAsoKhI?>i5io7^`)XyO3>^(OAz|3UW=( z(wb30PsM*?s_KMZLaQjgZz3&}s(;C1T|xc(*WDaa#7WnCJhqHmt)qfPS{0*u{OiTr zOi)nyL!G@wcb%Kn4&!5$@{U_Jpg~;#qjz*_o1nqr^ ziZN<-DS0RPiP{HXE%(WTbVNRFg#eoX7_o176VNGJP0J_c`70igFhDZ@6D$ zG1-_pQ%_8hA(w71qT&?2@nBm`0!(eX-9QBYt1YTS{tYMxP%rlv|L;AIDUJNs+cPV9 zL%Kd5u~+dw{gur!<#G0Y7gdxGqZykr_IwVP2U^cQ$|=y6@rT6IqW&%tG#9PFm?#jj zTm9iyyrE7$-Y~|-S7pplW$YyW(eBK^KZ_aPdeU-ehsJUNeS}Vx(eHS*n&oIU%X+l+ z?=T0+*HkphSym&O)D!Uy_(ob-aPFb1Q54tP` z1-CN?k^fe^usr!MjAhQ~Kpbbfnrnudt1Wx~HaQ~wub_2YoANP1nPy9essE|00?wpa zRIu{g{R%qlAV2a?Y4a5&|44tvFW_baA2j=eMfTsH%!)s)2;+=o&V%X;Ca5p4b)xY)jsGM6-L{oF zo6}lsnkqqk7qd=y<$7f}=hfOwkoR9!^903jS(^zO|1B-#ktdq8kNosxKT~R(U-w>A zkfjZT{UqqmuUVEsEvwrR&I8k_IQ0S*TMHeZON&PSxoui=mc7@mh|>Sz9q=PeQTQwq zq~{M#7HXww$7v%t4){O1&I7)UB5U9q(?nMwBmzPZ-9P{lnnM*`zyX3#Oc&jB5dxSh zQ6oYV)utSX?h8%ffS7V1+M%Na(M?zQD5eVtU~0aZeQ%_{7HhxX7jyrad2e2s+1c6E zu8eZ?{{K}(!7iGNHkS5?Zm+{wpYfV5*xP58dPqO-=O(Vq+J}pv*gfJRH-|sDu5{?_ z7v;jEUj=QwlGOipa&!G@=Dxli-=1e0n!{bx&dljB*58)j=9ikE;r{OPj8~g3OQ+ z^Ag{P#j)GP$)AR$#d{$Ul-D;RhE&kPCkapM+wD!i{p0bkMNV{tNFJ&Di_L`Z#%(97Bf8zTzL6_$U@`)?adv-P5n%Pyz}{EmcXGwtXW88fb|>n8u&Je)4OKqj18;8hA6e^W3a< zF(9v7x1z@LK3Q1nSHxvwwcyUHg=b=~NFVnW4|<2cECs2(1Vpr_@2H2O>LKTeCx4du zm2D&$&9$k2j4>AoHc1N`i~I+4>OFr4@x=Y>_y%XZJ+xru^~Dpx#pm|_Cnuq--p6a# z5DY9W3W8t5J$1UsIXf^rWY!nXwf3MdY>@oBDSBAN=_2LU&0|D}ft}&u=5Hdvjs2 z;8azxie9{i7Zg{|t0DM$Q8i3od2*75_=7b?zTFw|$6rzf9rC#}DCy3{W~)iTMZLn~ zABlnkRKa(~B{s$t{Tc4HD(8V8C1j;Q$aeNGR7~RPwdD%B{_xJ%BuZ)$WmV9)6Gd@N z?|5`8AAhg7I;Ah2m07{OMO!`8v8Z_HMXf($wpg6fd&Ki7f9xe)|Ht(!*pF(-xj(7J zi%V8d)dn9A=vhvG>Ex1ek@dtAkFG{sfUNoRgNdYes?j;8gO6R!TQ6GidMAId`JBb9UYw^oi> z{|CQr`|oL@psK%Wmkclu5PU6yl6x)Si#S(ZdXkZAJ#=4OEK4i@xJ~4www0;(kS#>> z8UD4R*>CvXtQj+gRkTMp>&au*!y-r`=XsZ!hSuVhhs1)FHMuS{bF<~i)#Rk5dcD~j zOZ}fellt~MzxJ4^iVHs&#pbYjt$y=(zgir46Vh+yv}P?k{t)Sq3yrnV^1g|}Z?i(o zk<%5dKGb$*livK}{bH-$o0zzFI6ue|v@1kV z{qwn6f2D6^IE8hJb))GWT~)_Em2}=)J#qSHVsK&OjGRW@oPXz2qBtD5&335ihwW(a z)2g%95Pt1xV%Z7Wq3TbSqh3ZiTZz4(0wLUR`Hj5 zLGY>aGjz?kiQc?2{qT>Eo)81PxzZuy0RLF1OXPIiEBs33nXx7*Y!cbcAbXfcwfy5y zGrlb^Z6L{IUS!}OH$NhRg5L#RY*U>X_4OSt1b69~XRm%4~Q+Vxkv21=#u8Y-|$=T=-F1( zw_LBK{HE`xq*7F2J4rrmrrF@7LWdH&5)QyJ9K5No7uY{?VS04$agp*OKx*?Tl%E{~Ok4IKx_S z>%T;CO~2b4Rld*)5`x%{l3Z&jzvE5eRegHq1ohnAe+~cW<@j4|Qk!4HnoVhc{J9;9 zkFOQW+Vqi3mvoyQtfN4uQrFSr-_g*_l^ptQ9_i5wkBOY%*Km)1MsrJ_0Wqy){4cw$ z2=ZQ#*qe^~$HC)8(7w9=f2>-3-fd!Wekn=Ds%Gi8*GT<)G$&Tj`h|wFOW>g}z1jaR)xrc$?hKIL(-tg6?9bp=V0AJr$Qo#&1=7ce$S z(;4lNd$;qw{}Kxh3tYWkW42`cWHbv_d;Cu=du>VK>A+8{UfobEUg0enct2|WZ_EVX z&o}SLJYn{Kq=5etIf?LBS02&(FEbs^|FP+S`PJnx3T$ODS;zypfM zo6GMN?E8Phfu~;|J6Sq(t1iRc`hSAoz|{XrPBzX%(^Jx++BnIHi}YL&Evo_gv%B-v zu(z(0`bGQA37h}su^j)Hu)G%N@BUp9&FHc{H8+v;r_-xw{i{rjZ3u#2&z)aK(>!|1 zW?ij6=Qycvzx!>Ebj zyiIe$1#J0)DG>g>;Ip0&v-@UZ8u8&{Rc(Pw#qlxWGrbiUZ6Y^A1M|@bz{MV&_6z7fY%8$R$);Et}=^c-P@^LGR;>r5Nq?tDS9o4(*_P`dpu9yy%DGqLdcw zd4ve+)-BZamCyNAc0|K#%D8Yzbnc&$6VauFYmRzPn6sKSARc(4YPsFTu(ZGEHU5`o z=EosMlTD%<^f_ILwC8Q27mIP-728WYbg7wBt%BIyVt~8G%e^NZip^cbuerO{ACM~^ zuQpZq&NfMH{73yqT$&Bsy}I&U>1jnjm*Zx-mCb_RcC@Ci*Iq@leLnwY)S_NgAH#7T z+W!%eUkN-XIKJ#Z|8MsB^&^pP6#Q=$vFuL0ximp7IKV7vti_Ayu!^9oB$>^j(l>$ke|~bZ2r3>b4UAm>nDxH8Ixeo>Ua+@^sb)Jg zW=~13XOutso5(3$DwFs88sm3$+&`?(oSFR}X|a=D6c%-5;#_^szT&!g@D(jbi2^Ss z9bHxxKXH?E==#9BpzkwlGTYItezsRn5#G#YF@_sPAz-YTu%FExy>b5 z?(~}aQUyIKvENyJ_u&@8ANgH+?q@KQ9y>{GM;$Rbp9OJ>-U8q(ed({7UXq7aKWt|Nn>g#5a4Z;`7ZF zkM+b-`jDuLWp+KWIQOR1cb4txU)7q|ZtGhz&BW&)-|wU$)0^3Dct4{nrMP+6&CmZw zw83*`T-l@uj}ZlC5$qq2{VcpXQev;qq;Es!9SIxzsQ$QIM!)&C|5=6MsMqwiBtJz!S_|XbTq6q;nI+XL|mAOgE28e*ewq zy04L6!DsbX@K%sL4mM{+-_`0-x7YjqIU;|GZtLwN)xGCdGWuy?a^Y8hB-~9zCmFM?-qfSI{?`SI_sR7VvvlAW zP5DnGNsIb+8(G1b*Y>|It}f_TG@XKPbS53tnbe(}y38JtRb2mAt?z%++j(>b41V|f zgRMkySf7O2K`rZ31s9AK%bbE!E|LzVZju;3uJxyzVPzF}>7y7X;{K5dnJlvfhixQ+ z5?V0zOX1nTFCLCvQ!Gg7<+q%yJ@0jMU0~;r;Kyg@UM)QMaod>4$$0UApk39~g@CJ9 zGRtQ>oN9sh1Uz%CDt=!qeo75E$4o@FL&1;OPPs)8W%VO8&ZTRdBAzSi$;_QQett*fq~?)@%uaTOvhm;9j0YQn zt*(#|tfC4=o5iQKpsH89FX%ZUvaayTe3FJcE-DS4Es28IXqh3Vs%78qDDt1ki~RFc z{s;FP{Z?^7e?%e<^t_j*NP|<<0>|%rQDW~MEsDo#hZcH3>R!7O$lB?|W7h$G4J- zMdg#<6;G7(s@Y9Y4;XIcWc3x!PtI!_nDO_(gVLaw6^o-PXw9FcL2?tb5;2GSaM0^J zOUSZ;cRt_unOGbR%$N)4DA-k(`EIIyaStOWW3sd`QTn)^D!$R2By3MpGi9;mM#p}p z+`4qqdg9VaT7UH+@kH`4ssE6U`#p6FCmq@v?xxkD091+`26EVbHmV{6~loKn0;ZA$r`Z#D}I{S ze`WLKuF|0?dM?Pg9xZ!>6#O@^fsj>K7Xq%XnIy0sJwGLuxvV}{M}Zd@1#c`Q9!=@% zIbW3iXS|2aJymN#MVHAgxn9^xEO@^8fgx|U**vnA#qBH5&EdxPb(f3h!uqC^`$d6w zL{2(-ir(>XYs@>02mSYdj@FfrjB<1Ki)pgx3r1aN#@;T1*3i+hWt(Vty&&~t`mtJ< zynC-I^^dhAf_;btcy{;EQVci^#ss%ThDbKokTws;FnmI>Uo(ep0 z_}hn4Kll;b%sJxeG+xc>kN-2xF1GK|uO!=L8Zn>W*$_pxX6_eQ4+X!fd$PYiFdL8`W@I7Ip@L2|!^w82ppVx&PrQDEc;ZfdeU8ia z?e(nKp=U*Rmg~7##`l4`73-38M!U$_U9Ysp`2IJ_f4@Tt#_7Jj?kYzA_kY0XG%taZ4ms#`kk9gEW`Q^XPNIj z@Bem?j)pInSZ=F=e%F~XrXMWLDxaxKx~MMcG*!Gu?({=r_W$`gT+`@`2@dft;?i2=dqf_5+$hc@;R-T!yvej}3{mPh?fDC2*(v9PVtXA6R# z)xGT{@kCa)Ox&*68q0~|;Ma3kG*8i5IpM=(U4EsyE_1dfqyA3FA3HYwXY4KoMRk!& zmbcE34$c3FxY|u1k51GMeJ@$^oO-BxU8(N{PC|Fgkrxkb!xs;kHZv+_{;_Yfi|gC3 z!Z#veEh;(49W`*q~H2dicxPclFiVGjo z&Fb})FPNDj7VM~(PHSkvH+u5uJXI`n6V7FN^0;S6c)!+0a^L3$@iXXAPQ82gC0I;r0YG4qUne158Q zDEM*P+inztAC!qMDYn{GI`q4SV8%TXg1FB4+D|Wgt|$n8V*P^crK1}K zc1G6Gb4s}BoMOh`Ls3zDx^5<)s2w_2m&w78(r#uvX*(MHDDA#mh~n#i5m!%BIro|c zgsp#{4ofpH`NzTs8pG`VfAAx-OZbaJ^H56QO@`iCBIrw<4^~z|uRbq4rZb~E`<5$`cni|pEgNjj;Q~y z=iR9@<2@fq2!2*xy-SC&?hWfG_U>O-_y220%2c|xHdt0yy{W*e_hUVIWEyuc{1z*& zFQdi_{DwTK=ZIK`oXmF8q<-N#F?fxPE+|%1#dqs2S4n@Tmr(xdL{U)FSca8fYSvQL zbHR_#9<{&l!tLVGNm~Dve~TybSy}4UpZ_2KA88Q$`0SFO3a{!kI7AefncF`$HzzI2V}X}Wy>qa1G;c3oq5h2`;MPVM{9v(oD-Lh-lVT`bu;5;dQF(pJ05qb0WX@+S-l%>r2GHwnr*Qj zv8?cc%m-$|@{f}?6ALPhFPHdy^cf@_K?H|L=`+sUT%ZPNNpnR(c>eYu(C8D0!eYo)8r&XUDEj%4~27JVW!pG}k)y<@B zd)g42m()&NT=IWi>5#YAW6~h_h0}?8j=1qnv3O6dztLIZ(#mA(bzNK%YBVW2QGE-8g=ClAezBZ01(IgD*&uM)j%sHtlF3uOV1c zvcWwcFqnB#8pIcp;rEdk=pCq89sDZhTUUwV!grE%WmRzD!(u>Q=XUXj=e=jH3#?(m zuVsE=+F732V*}CXlIt2X-fTfQE)#{b`0#~AaW-%_d$gYYf*+?0ZzG1iGr!0`RXcjh zwjy7@HJP!CTK|}B?k3qCijw}gq*r;^fBBl8la0Mn9`-W>Eil_<34H&pmJmEr+h>L;){+QRVm-7ELk8bEbLHZwZF37y01(nmKr}3j?>bO98?@Uop z2}~^SKPL*3+er4f8xnV#m5(0+y~Szf-klHa;I2seom1-Tr6H&3tr2L zpf?^BL3=14+E^@(?j{!NMu;~`L-X}1Qa`Hoe>M}54NdUdk?-m%Ib{vDagIsb=F%Gj|%`53U-QyzPo98W2kk^;kgq3gHp&_VA`u{08>0NxU z(QjQ;wzopeF;48l(ytajzFwEh` z{dZi z%E?Tz{&9t#raiq#HL2hqnd3K=q>BcAg!ZYq{I)JCRK*1cXcE0JK`eXtd9mz2+S4<1 zDOS~`nDgjnW;JZ(q;;F$4evp7y>N@SsQLa^U{`uob0W8vy{k*1-L4-fJ`AK+IZ|gsAp^g7(v!oz>uuLqstE-ncHLNFsU%#AX zhKc3Z>&2@{5&!r$B9_$xcftPJTX;p!qR!x7uhZZE)^v+yYZWwpoG4iTXo<1A!1%)K za@kmV`i3O8pMTHOnvD9(W--Hj^~#@OP3&)xla1Mh^N;IwKOlVjLX!VxDd!*Q(?#)K z{i1k9!QRf06LU*EMzgoueCy-b)g* zr8KKYJ}Qc1MVYyrAp7u&pQL+=f^)Q^{hEwvO~xt8e={p6TfeB+5za#wXY_oW+*w>y z)CSwUC^->5NvfKe*gqz$qp{T2_MbVA@D+7!nAWwS^Tdxw$?&euHdCZITvC^w7de@f z-YAUv#h!QiRIzNjPO%3oUv3NO(3gQ14rGkOtYydTBA$3t>o3_UyzigQA(%fQa@LLb zJmYPk4JM4%7_TBTnv4AvW|FrGp4FAlDq4Sonh2`u3%s11%}tDK{Y!N7*-U)?af)eZ z`C)pR7LS_v$BnOS!TGxT6|A85_fovSXUaA? zR$LwYOy^5xUhwz-|DiLKp1!?1jXv9%bAD}q*6K}VXI#CjuFj{n3frUORFt=}_MYsk*Hy&gx!Jcx!R>_bRDZ z$9G=Gw>uqI%&@c_4Sv4!1G8V}8<5d)>?VW*%^eI|@bG0Kc@Xpod98ny8t{!8u%q&ib!zWCM&xI<(Sr84SUg@Y7-Sh@_5pvCo(8`I`i+_V zZAV9+CxRxcoLS~t%<>y`N#{Iz$wj)j{X!<9veY-fe?L?#3%83)-`DKjUpI+T`W?{q zRl%CyN&Vo>=Kb@cApDakFiGwo>*~p-cALnT)bqSq{kEfK{XgwDv0#)oczrdo;0L|+ z>MU5_Or`!XTUP{`ob`|0+Jy%{O!}QUty@o2b@AzPVt&0Z5ViLO?D@yVert_QQct@V ztAe#QlF$S%%^p8O6nuD(7+{+F$AYHER`E^xXqL-~r+>8z7PIZ9H#XKbwXJ^drt2=EU~Rp=k6R(;*vQP;R`D_?NQb%vd-3l@PIUpvs$S(s z7tHT}txJ;`iOO&0WMYp8?hu!HW5j8P>(upGS~^;=Km0Stp8mg{cf8IY^91IPOP&zV z#r~8Ix%uPk3q*eHx{L_=NCh3OCyzS=cP^J-N)(p@8;VUkGf) zp7V<;K727>(P*{HjV;trmPw4VIt;=(B z?(vUIT0$`HLD6`r@-r3_IVJyNbjJT}T5$FiqS({DAh%4O{<84ev0{N6_itVx3WDEy z{kMiPdZ-NSv8v$p`Bc6d=7+|{f81B%>cS+6y_uN&c`(Lpj zA9%?82$OwQ!RZ%E{gGNfrW=h>wb*(3GBYvQ`Y+t8&;Ph7wm&Wk3V|Dl8~vb`T_GEd z$LJ^sn~BArk}nZ%Mz4SDJ6`0J0`G`;T~|smeXMs&ng7hMnLZSkW}lNeF06tM{I7&2 zyRF31OauP0%XqQiTV0Bo;qD(>J}4auexmh(32MNV3;OlS>Y|%7=gXX&4BY$KVoOoH zoqoMKF7my_bbMFUrOwr}&DqPkbnOEq1kMx7=xt z-SHq%oLX2Ei=#a6tE06;6NRs!A(&uBfsK7-Z>hPY^247IUfohg(;lk$w1-9Us9&U` za$R7?--DVI!B-{zrZZqQ@T1Wq&BS0W*mQppc9WT)6=3G$Cr*11;OukKC+=G_~A|Cb91=X*NmCzU^ME`4kW zvO7smyrx&jvsYJ-c8eU7%l@&SegB?~WhHQv_~9dkSJ#%L8>JoE+iV=#`dQsdai`aJ z9?&G!kJh+{Oy-&^DqBCQGo}ne&%4i@buBMu0&g_iaupGj)E^|far}>y#DWzc77N}k5Ru`I>(`={npDrO(hcil{J-SaBwKr{So zPm?={CtPw}x31KW>duJs#Hn9M$SO(62{{#+-x2G~m_A*|St38kzgCB=Ipi=}@ z^xn^CRdBSPY=Yl3VICkLa1U zX4~RDXO3NNe9z$9BBEj9Do&D-`{yywk}$Bvqr z-@WadB^Eg8sN+qQBYM^yvE106snNF4Jx}Myj_Wz-p3x&`-g9`{&>}q>j94zxllpMk zm3nR*+xAD#&7;Te*7MzRZMXHjIH%?yB$_mW}u7-4>YdcBs%&Ho;C)KO+Fvw-)8vMEa+ zWx_wd_o4pplb5modp_^Wdiyr-BrS`X_OIV>uk7dbezwfc?o(F3(o7BWcq8UIg(JLk zwSg)2L||K8VExBm>;jjl<3c_w{=P6_jce_#LTghjIZPR|WY1FY0~t-T=?4{6c_7+x6~J zIZ%*N1(g5~tDu1ZPbsekcuhML`cHERDsO5CGJ%5Fej0)Rj~=Wc2=L0j!rKG9syq?k zF}-t{R9-*36!sTEoq-0PDozD>TfLcW=2y!1YD+UjjC@bZTWF9di+ z-?vi^@PaC+1bFlSkuwnBX?#57>3jPJ0z7ttzFoE&C`f99(38y}DE^_tCcxu%#x_SJz>~U^i3WIH>nEPfG%ES5OF)hfs0^c6<25|k=Xg+C{+7nGL+JQLMRn@XUdxV{J)2yjo|u~rT6lKviVFu*IyYXM#rp7BDZ<`BfSL*W1~ zX@?>KUY#f%jRts46}Jbtr*dLGH~x3SFRTS2o%3jFu13bRAtf&(KURB-|;Hh<_ ze)}6R*v3DtCxaLZ3{M^^Q*uXuSCl6LJlrMqy8=9~^3wsHHgf#@>kbsuR6#DlE2^L` zz>BJ&7~pX|ne_*`o>R(i=-cI-tHYOz1tAsacuoIzIKcDT(MW)Y^>_B|0iM(jCF)$q zU)Y@%>jg6YimIS9z+q_i<13a3UAO-z_f|Bxq0FSRH^@jqysyw2G zIL{TEu=v?zzfRz=OC+%^P<~G{eb{4C?Aq@g&F_i zX)mR(qw3c=-tnw^rNP{01=WNq&>7OzkN!h=yUrty$9EQx1EbX#spIS(Es@5Byhjw2Y1l*YV$lp0Yvc#fAmsMJRBac2;wL3tn!)E14Dr1%1TH zx{eC^TJR_=WBv9PJf__2t~D#@(*5-y?{2}f`o7&@{r(ob(#+NWrV|6r1%}8`ZNUdy z@LCH#G%UCJ^&3b*3qmb;xCM{2;2kY^+;XcwsJPIgL6`oZCs;rFQX@&5V&8(tz%y*n zfdcY)3!Z4flP!4X-?_v;_4fil_+2e{cMBe^wD3d=9;;-AZ_v@ALA(V|wBX4Wywh=O zKV6-21p(gGf~Q;X?iM^7;NpLyEEg#7{crxsx8T(lJoVb}9_<>Qo9qAK3%s1JSc2JJ zZNa1ZyW3#>R4eYk6wcTmY|y1|iwp8}3*Oy=S3exy6NBV+{~K4=Sm69`|9(8Ypp-7f zf*th+hp!(UhWq;4hbgdnV=Z_`3!Z4flP!4oTV4MLEr@(Oyak;tcvlNvYr%)=+}O|I z*P%b!3U(;bf|pwGY70IX3!ZAh zdw=o`$oy^ig?}F2vPcUaZNb}H@K_Uf{x`1fXe#i%@Bb5T!TVeAnBL3{=1|9Q-0F`H zS73Oe1y8o%oh^8(1<#pFFyH=QPxHEu7v#Myc%cRFYr%^Ro@p9>{f&Yqp89S0oG7&5 z)jx-?->27*4Z}44gMTZK_{a4n4~+)G6D@eM1@COZQ<)Y8T`hRJ1@CUbvn_Z|`QO(6 z`4$a&Tkt{)-q(Vs^sP1O(Z=}eYAz5zn}5?SxTjwT3x+1zg0~OLjsDoM1!g{I!P6~x z372x$xJ?0LKoyr@j-~V1t74-wY$j*2lFXJL*1_@HaW;(#+4lU_lYrY)yjn%Y(uCalOYA97#TMK>&=6D{(+eJd{ZEVCXRCq@!unB%Adj`+?jsPv z`e7{RjowUs_+^_5>b%;5yU*GL71Z=|H$m>+zunAD{9}3pvALk}=tYp%TGV%+HV@W! z503}A|Kx?uzhHrT0wTy$dgn68ORYFAR2bs^ry4nwS<6b(ql$v4VPWO&ZL+p1c^0Q# z@IA#y?g*C@^20Y@xUXPhr7AIpL3omy`C_2gd(Fiz`?M zP*5D3Q{?XB&_OxweH}qwz|=m<#@~e?j4cx?D7N5PjBnQOMz$}3%kLccB;612$6qfB zp2J2#A9yze6~WV}-w*zgG0Yuh@G|xZDo{tlpl{`B52t%C0$kJ|fu5L|x; z=JOi3eM^};LiOQo>^}xGRH|Ok%!?RitRF`GeoR~u@O9w11o($GF?|1SLeXjw1V{L1OL?hn$MIK!Kb66nSK#8u#VPRbv1yeC ze;$T)gCFZcWA*1y;6B=E+vUOa&Gx>yUhrGdp#u0}eogtOAN*!`u4K4xzx7%NVwS+B z68Rtm-H9Zsflq_tA#nXsqLen|XS_=xDAg!v;vsUxG7Nq?EK9fG5%7!su4w$DC@?RS zsUPj&ySkW}(ir$(P}~9D36CbhFTg14%%EUfcp?Y>2Nd*z|IXNhUknc=@YD-=S?l}j z|4ZujnpH0ZorbI)0G|sFRl#3}oD>w3XR*#OyfOX;A;^7gz{=}_Ao3gpk=G!{{M@>J zq#>uljs83YH44l`1VMkn6WtI*-U~V8-hUelkarRLkmc5X+e!DUK-=9M6p;5p0eKh- z_CZeMA&0yOIT;p2ASjLOjelpF`wmy%e= zc?s~F;E5!77kKA?vHqU}%Tj3YA{2Ll-vgcoUld8#4W7ZU%sOuEUz+3I6&M~uhw|X> zz}3CrtH5&w@V%{T^ymYhWI8JTH-$wMoCXE`-~&#I`C9@%0*cGv=B0x5qXNESBLwE{ z@+ercQQ%dThk;LN!f_B`!nu1{#10RIN3GnZnJI&uD_zRHJS?9*wf1*dJ zdV%=`ICu`c7u>`3J$WAW|Ao=f3qHYi)VaHig6U{b0bdm^9RRoQ+I2@2d|yoAL*VyA zP9_2i+R&gKTwfmG>xhAGiV$=mC&&}1e-1(%l^qaS|Fa;D4FvKe1i5$V+a7g-k3ol0 z;N~a$^`p?lo&Qa74h5T`f#>#WOdaw(>K}>Z>IHXSBeL52z)y8KWc8O(@CatK3ivcA z7yzGw`c-iAX50EP2!2hSngx#GzWuiDiLOWHzay}CQ6ysr_-1f*0(=0;m;`?fibIWD z$#^UX<1Q6>7X;~N7kzPQ@Ey^iZt(Nrp^k;+Cmyz{aE*T!4SvM%$bqi{-rlglBkzI% z+_#^$OHwqB8g()JHSI7;ByfBIQTLc1qtw7>+((fJ5k`?du%O8 zfnNd(LfE1u&!PTN7)^O_eV2$8@AX=4^Uv=jTwOqeGA!!@4J# zVObdkr@?{>_-&{^0KTVhll)T!zZ)GI1m8{M$oQ+F;AF&j2>e{cGK>&hQIDlbI`G9| zaT;8|ZtC|m_Y&6s%b=%yXz&!WJ%xu=$g3@Q3J;&Ke#t#?VeMyuhrQk=j+;*8MRfFT zgsdO@NElE8Z!?}2|C>$}V1X@gM-m)>Yx)i!b54{YMNEeD?Q%IJ~4x6#*K0T08n z7&=N`Y{6qNfb}cB0mgotS4{=5pozl*@&R=81`Oj4bcnp4Twf6FTik)3vcUjc-Nez+ zCXSAhSJBaZG$;J{$I&BKV0%<*!Q<#C>sQgyCXS9a@p;#k{IeloK?sWXLiUEiSH^IS zfZyQzQvQj8kHguoz0QsP#gOft^#ae^9I@;M*Y{8O8gk&LKu#X~a~RMIKG`O<*l!kx zDA)o$9RN44RjMB$gkX1!jxhLj;1O_rag{GC(~g4sFlBav{}WSeH+UC9kOd#WIik>l zhvbfmtpC}d7Y%O0oL>gt03E7;_aOuW;LD;zRq%H1{|}--zv1n>s0RK&#BvDyFyxB& zN@HeR4IT}Fzv4P-;~z$WzW&Tt905NC7DvI4gMxPOOPm5DDF*%_>US9K=b!cR$G%GW zCyoa0%h9$Z0e%exCBd`cUEl|TryD%uy^192ZWMTXAof}C2x6H7cW<1u9nFKEV}TyM z;A!8ZI{peM7>5}5fp3Bs7r{GGzaL!RpXRGBf!__o${7@lfn^o&ZYUT4-`bgF{#L;| zP=647am*_<<^KAAek4~IcRFuHha%vYA-Vd%YY1f-d?F^IFrI!j+|7R`OPdSowk2Ee zbPHa^6An~dL5IGqcgW};K*2q5-4OUdy@A;$fZ{#D^WeWB#_d?rk@wm9)_z;}OEf4# z(78yuesF!0o$sX*_^B9XW$+YYUjfftg%}T@;1md|g71co4ubEC9IAnDQV*orZ~%W> zJgxCZ%szxmL*QFOaTt7l)Q^DQ55-Y%{UEJh+Ws2W|0!g30u9`kCTxo^9x@@%%uNMxd;9% zJQr=jGi4}dgESiGx4Qk%bc5eUSA&0qVcZM;9EM+?a9RIfg;QVSl3 zV%ATh{y2o7({SH@+nL{BSq=@}0ndX^L&$o;Pe;-fz;A(^{szx@UC8QzMuE2&dO8Gt z3@jOVzFu1-E+YfUDd_#YDYy6`q(6^HN4LZQ1E@q~r3;YUnG!3rb1oq{0gFk@! z*$fI6fr4J}>)`4#_~!6L1$-*%4}hPF&{UQC>woil_4*OV3WvNpzuY>pRmlgT;CUoz z0&>U)A;<8>_^Uxs39$^}A@eh#APl|&ENh2i@-S9b4Q}+eL(tE4KbZRhEqDz4OVsZG ze-TL?2cLlnEn&H}-@5d9#4LpdVC_%@vr{9z;|pPdU_o!F3oZ0Z_gvIw%{HNWBuH3nc)SMU@;q%(V<`A z>I%4iRM0md@oqyt`Jk(B?T=wXsJQ~e=fn6O0zVOoJt!Cn4~4+z_+62I!r-49z2bjU z7D2&dXb=V82pvj-zlr4P1b-64H3#0&kZ<(k`F|96u@*epf~Q;Xd<$OmxzTSsPsNoM z4QefT7(Ym$91k-cc^;mKaR0v-1+x*$0=Rw$-gjUb{1oI+1-u`80DOwd_v2qh!K#>W zLhm)Q_Yx#s82sf%EWHT0ewx=Wje@Vu`Q|;W|KCPWlW1^1lMDPhBv%Uj3>c6Dp94Ah zIyd&;g&y_R3(UtEU~vI_HUyQyr+`<$@5ZPZ03T=11-}2y-zo|gLx)261@j@ui7@z7 zoKzyt^KhdEq_+`H5H2ygh{D@JI2T#G(ec&4ykGZ1){uMep z0DdpzgfbsBrq~V8({}I|!DHY@Kv1Fu?*xAfqadZ+U;jS}*X7XQQH+8-_%+~t;9EjY zKlrmq#u9kEG5>kqAPUxkpc?q)2u%p<{A<8t;BP`s2Y90H2^0S$3VK~2&EGEYu6hHr zUj%*-6z9PYz_{-PkHd2X%WeMIx)UI%4-MW2?+0HC9W8-J(b3rKMsATO8pF@aupo~D z@;DwSXyRD5lSi@gAs<9X^%L4M{%R;V0~QQ{ABSf)Kd*XleZjgC7ey?Xxot z7o87RC(yurZmoVK!PkW1PVhb$kOIF7^Ff#6*8VloAngha*Y8L8%5&iQ{a2so!81@W z*n+42Y8Y(mi~o(N8e&gDeGv39JW&LU zA-aUeL_TKez?~{^Rhx3pqsjxt{~|-S{j25-70# zH%ED>1^<0`-tINF>8Ln_--?rG(nzinlCFs4B99@t$iqmkCXU={;*vwM{%1i2$wi(= za*?NzTuuC|hKI=W$gNVF^S^O*4avm@6(m;^M{<#ekwfIQ;keabL2|J{1<6I8Mskto zkzC{z_mx#in$=ai-bBo}!M$weMUa*=l7Bv(@bl8ZcoBqASb!3U6AtUsW+<*)x) z(2e9G??rNv4(!`M~7~kX`LPlQt8tZ=+MB!?355uyF z*BU3ACXO2t@1!2Y*ijx>-tRKU0 zA`j#AOc z@DO=FEF&L)VdRk^tp8ci4U5T3uy`TP2e6pD1dE$^-C$!s3*xYtJPM1+OR$){3X933 z7{)$#<1Y(~*`N%I??H@1pESldc@D#mybHsRJky2Y$AT_QrR42!HThr*UPcI5zbqk; z^*;*+FU6|U*D<-%6{IfIQq1c2PK+^pHUIqUj&IJV|9eEZ>*Tfq+m+@HO zAz8?)t$2MLd(CpN+@_oqa!9z2zc`YJ4dO^5@+^{wJcS%0k0Xc3s~IE<3p^~X$m7Tr z@&aN{K8TQ=if#Csa)15*7naFI#F9LZST^xSEIsltLPlO|=5GEom*0pb8-x){@-$*e zo_(9;E|A+Pe|6ysBLW6nW>ONe(lIKwWTX-T5{ysLJdmXp-?}{E3T!G=Y z!r~GXH*wTI8j8!{KfptSkYl;{-zck~K>-%m(13gZ^%sR@gW&5zaR_HiaP$37oaIp9 zg>aT5PvC4uUW4NAFrkH^xQY9Ejs4cxrUED?PeL*I5ETChIpkr9)(=mF!B6A*KZ1fa z(VznzB9Eee8pAA(`sD4XzlO^9;~zu87{opSej*g)Tkv8FUTMLTpJ4r;Mz(jN!6tBN zH~7o&&>;9fFq&%M7a&QK^~I{Op9KX>ndIdbJd5=K>w7pykY_Q&`rM7b5Kg;$!-5h{ zyGkSP+K-@-7HE9urOia+)~g)VYm+Hv~QB0%rbpLQoTj zAo48aynxY^f}AF9&bv8*O9!PPgy z)dhIE!Hxa`T-_+}yeM2s?!l!^92*zpQJg!-v)0qremneFkb~!qqF_q*Vjo7Q=4{d}A3+68{dwW;)K({owmxA{qo=iHgCqICl(z zABla#j?c0F{|qaie&oddP&@$sG!zViZv>vjE?N_JA-49jpn@kL$!kz>Hcn1M;58%5 z9i348B|;Fvg2i(2ziAc0GP$V%7L(+iSPhe>p!idCGz!Jw87~UODDa|COrC;b@@^;8@H<^*nZF6}HKDi*{5;5sV#aLZUt|5xf;0qu zgJIbX{x)Kn1^)$eehO1~6R&s3*w2D0=4$d3PEOS8hEJxmjHRI%Yod1o`8Z27_R_&3gX~9!GHw#MHn?n@Kx*eP5e7iaIJ*h|2GAG5(IUDAJ5o> z-wHWd@EPEJc0#lHXN_V(FBWX-zfl%N zgLmL+4-LqxEqDxamVlfv>Vs#z+VBNl2L$~Omc_x}MeL)HL+;@!m^|UjG4|U|_Q0j> z5JVn=Ao5OhXf#6B0XgIm$QhkMgA@cEWIE-JI0TVLA&5K;IgcSplaS-MvETdv9fDke z<=qez#)Ojte+vfmfq!5H=urm$5ED`5d#wM{h~)qp>M^}E2YrvY_t z?7t5Mef0v*`#vjJYd`q9$o3)d38>!zPycS^`~Ek76DX*nK^OSBNYZZb3_ORPV3kI@1FEr|#=YL#n z`xie#BkyZ8@cx1)hQLop$Rb$b{2Q@Pg0JSw(fD_w;Bprm)1LwG!x8%-EUU=}QU7ij z7Q)JkJk9lgb-_l9ZYVewqo4pj9v$t5f`yPnec*c`lttzK`u_+B>PLfpU~vijM7X*J z{@+Iby&>>V5V8;^qB9n%&wu9CiYRD@Ct~0`!?F(Wf1-W@JcVJ|4gPK2U=#m76zo$k zFmFTz{}i6+2j3s{OW-@h;wt#V=;)y3HveoVw?=~+8f*x~L*OSMCn9))Vjjqef**{I z#=tWd!=(unoB;)0;3vVQrQeJNY5;i}^#@VE8~hE)AsK&J6dVVOJ)E4#OQ=5y29&{H zf+s5A2O$IlzheFW8M3+)ipi@Gv^s`U3iZh&@X${%tle>I|3$DM=?V;A1r~IIUyNAh z!7qmaz2I|gjP&RSf5_Aq|C_==6x@UoQxMi!CkN{ z3jRAh)DFHDk~9W>6=K{09%?A|;yyR_TecGvC(vMhSe69;8L{jJ{{(W1;F};<`oW*! zPpzvc2t)A@`17zJhC3uDLO~aJ2y)WkN2o{r_;;gVH^eLpegZ7+1wR1w2f)8ZXsY0k z!GQ9gSpTyij-OhSS8(r#JoIN{BAS7YhQUvUCn9xj?El=24f8izFYvsFASeO8D3UP= zJ`Y0B2|g8`NP+KQ<-76Mg@WafL}~CG6z9ON0Ph2T5OONuzo0{z0TeunVKW4NC1Tc& z7YOVK#WC=I!_^(&G02Gvm-YWAm~cALU{y58f!~La<-xy2{a*05(4hkO|G59(kAfmB z8w6hqF0Fyji%~EHJ{k4Bxs4>f&KY3i-+_Yl(4Z6iH&~DdUk6Fo3;r--Tmjz@@&^p} z^Ur#%9oZhje&3l0O&EL|SR4U=01BeuN1&t02G4kpKtX4t!22I~FZj_=&CGaBn)_ne_9|h0BvNHI35Htk7 z7%Yz9qVqT8N(}tfx*QY#4isz)#r@#lLqP?6Jn9dCkE$y$PgdZf_WzKiNy}~iS=oo0 z|93|x8f=A}$bnyqSoVR>i;fn-`@3s<-wtKUB|Lb3fWeA(kzoJ1G_?B>W z4*Y7=&x8L3PxscjvHxturcf_1_l4ooKJXhLs0e-@I#dRK7a^#D?`Lz!jlUrjYyj8g zaK&>pEb9aRHxw7a4@SuP!Q)8YOc@2s!?Ho}Z=tvb{vC$X5cpZB?=9GvVIPFz!G(OD z@vP3{(9@a}`1~1IHUz#A72un$6tO z1>vG78XN_S+rgiNf*AN$kkbMFIO@mAN7Uy(GYU}fH54bo?}f#k;P;_^3jAqIP+i~? z>m4=mPov;WDCh?7L(H<^m%_3f_zehU9{f!3UdwI%*;qb-;ZZqi2%fK7 zX4d)O$3adBJhLMNl~J%7JW&Dv!*tdi1K>}feii&yB<~>j_aa2bUkwG5;fW#eC7o9L zchSZuSRWw>fo}|p!{8@CPGnJC|JzQUje;l|d<6^I!MB6wV&EP^&;dRNJnp!)e*uik zgex%o2PjB_Ux^NNf}aA5Q{eoKX&3l@M!xvpC`+T@-^kK#@IMjbEO-w(ngg#QGl*>qeor^4JJX*0QlliTm_#A zIfLMC5DNMs$Xl$D?Ki_iA@JK_Sr~i(9gTn=qZ67R|0oK+KoYfsFOL~8 z2L2u_>j1w4_2b}IfF~By^}p@p6%dp}gA2hs!9(yw3jBB^T^INP@I<=Kjs5S#b=~y> zGc3^{3x0~}tUGexQFJs9K7>&Af-h)0>c(FI1r;dn1D^~9MezAhzaRW2*Gu!a1b#I< zmnoy*19+kW-jA3Kfd2=)3jPBW4}y=uL{}3o>;FBVcnA%afMwp|jZv^96o1H}Ga)Aq{*v>Mjei0K^P;Co@GTMhPH=udBn5sy zJlX}m5j z*gV+`ibLQ(K|vV&LnK!O{4U6eg0F}iYFF<69^?Zkh@rt)1#RPJ_P<4|Rj@SI;dI|11g?LK5Y`PlikL;J2bfz2H}% zLj~}~A*auBn}4>G&%xp%8jMDV`oS+l2uk3~ftSJeL5C{fnJ=Mu00lKzRt0|)E*%8_ z8J5++e}kMM@SkK9==dAi7zGEyf)Mzudd$qTV&IQJK?HmjIvNEZ15dP%)b+ouyEz)f z&|rOppac9qcrFfJM28aK{N+T_ach4B7I(S=!v|n-3LK-!>jK{$AxMM2j0WA{H<*s9 z|IH{s!S}E@2Ywj@<-zxaOMAheM~4dFuQUwHczr1N10g7ap8yZ_gO3LS;gz?JR%=G4KnJ)g9nZLUA1YO5{)id^Pao61x7ko!J#DpH4J* z2Chqi^Y=Yn;4={WH2C>Y++F9!{yWehTQ4wQxkPg1z+teL2R{iO>IE+&sSDuU)?hdO z`cQBk8Wh1VLQeF9e~*rqz*m69W$+&GOa%oaVcG!rS@2L5d>?dZ5PTsdT@Cz1@FC$D zfB5wy#@>>RQSdKxC~mwkHI_e@tDwO>5HtY396VG7e-IWAf^UzUsDTf0 z{Xc|)17Vprx-kkChoBJnQcxTQp8%61;1}v}_2VB!!NwTJ?cf{WwO7r4NizezMW7#4Jb^X7C4d>$z70$&_*(sgd^M~A%bdV%NNjRslpDTsXz zd`*NV4}Li0^n!n5N0S?W1r&UW5cGlfASa68dqP1!`2O%{349CiOc@0iB8e*CU&EyX z;9VFURq)&4i9ztOFsvqA*8iJ8@emqZg$c(S(-;NU!-5d_(@-1+e;Wowz&DxK`QHeP zqTpRv)(+0!@x;IvMu$4U%LrKQA7c9iB*nZw*16;O*ck@JC@l7x+`~Xxeb! zew)xqxTqTqYKU1DyaEL|@I2(?!C!#l-UiQjOQN9ADDY-LP#^dY&UL2KMerZd(SGoG z(a{q4oBpWL_?J;|Jrq~KFTl7T0N)e53cdkCGYB37uVqlc4~h!^B}+1a+`lPe-^`8 zsDK8KBf0v(A43R=;Nviw`oX_LM@!(D+tHwmf+!kPz!!mK1K{@{G*$3UbaW7WtQaQa zuZDuJ5VIlhtH8ab8>8S^xHJSl20RRY89EwS8tea+U|AFm9)Ty?!4HF=82D&-v;+JC z@VMjF{#_9Jgex%oZdjZIufV09;ES0y?nr?zgBUl7y@elvIq{9|~utIm!6 zr=uWUFYvrI(4lT{zIrVSz65e22Ofs!^5D}fcjK=Y1v|o}1@O($p+4}B5warq06NqU z9!LF52?gImaT&Z5yaIj+JU0OTHtJWw--H2!!e#ycCR|iQgB@VO5cum*>@C|E1vyw2 z0xw{6guyEz=YP|I2ntq&f++Y%bhI6OH6&dO{8iNdf5z@SE~@JP1OGU33rS@p7sS+& z(g;l_%rw#(Nopd^39}5dCelQ*oX9QBW<*Jr$cfTJXf@Ghep)6nCCVJJ#B7_)iVs>% zw0vgFY9dRrh2Q)2zBBN)zQ5n&=O4oJb3fS|~up9Ry8 zzmO=nKy)Y~@;K3rmtg!;hOT|doMEQXT|66Q;L*zqgz54jm$_hlm z60riO$iEdGS}yYU#K^ftK1S3p75VL5bH!!whyt%zpjzZxsDrV8UXgDW=ZP&Mzf6pT zPvn1y`t_XC_M`62T|F}R#R6HPp?xC1O4JXCe3e*1v&gRzBN`O>7oFozod}77{$d3Y zk)I{@WxL2tVh$OGbR7l#V#7v1<3;{>w4=O!lPEYxtRPwBH;P?j7Wq`M#c3i>6eDL5 z`E1e7gdyVo|6Z|xRV?tR7zvxm<+s?_MShN`KTG7LVk8`$Ic@(Av2O}G3+O2sF{DnB zpDIou%SFCU)OU+~v)Hgwk#|EL+y5R>aE@rGTIA1*UE>w`D`Jbci2Ofd*Z4$!j~EG8 zy(rMciv1!_6)V^$@>QaKK;)CeK5iEI?_%VFdamF9H;SHy!~)yIu8D{|DC)P1Tz+eo zVQAM;@Qv7jc#(fA|NfUr6kIM=oGkLY#n72W{;}v#n#d1|5weK<)Yu4N|4$GF&x-}D zBJVF&Y!mtGV#RimKPU28BL7w74$67{VIm%k^@x5i5DWY+hR!K+`CTu|MLtp7GrC1y zEZQ&a%3X#6v1OjF0>dcLP_@WQ#Rz#t{+VcJi^z+_#mOh~Z+S9CkH30R@QGM~U*t}) z1^YyvBJzO9Gew7*MP4ZC2VJ6IhbRb%{9&=rA|lTa_1i`Mxu|b2cO3<%iVcg8=6wHO zDE6^QEYMA?AX(%+MQ#?kTWoQf$hV047Ln)6&;L#k1@DQ&&nog;#HrLK@-boq>>~eF ztaz5lFYRoH_P;|E7{!VUME;%_I;Y5g=xm4{7l`~mv0}H#=Zm})Ip!bQC=*-Y5ev)_ zd9}#T77cktzCzUBBJu%Z*Z4&4S}V4=UKCs*CXrv{hr~$i6ZsNRKOpi-kvEIHNxzus z$6rtsEEFpUiF}h7>WIic7F*md@MLtS& zXp6{S5*_k!PTP;{Rk3gC#R5*TV!y~g7WqDr%dg=Hh`gIn@MZr~~ry-F~ z6k8S%d8X)4yU3@CtDhmYYqH-TZJ+mlyeN23^wcEs_r(g5MQ#);FpK;%(N3DkbGr7u z!ICQO|4;fJFR_4AtiUSrp<)F#kP22HhR!eY6QZGgBA+aFO+e%!akw_?xqkn@Sri1t0)^sC7ZUl`qN5R!_ZK74F7lg1 zM-69o9R=Ox{eQeD@QQ{^B7Z{6iDZ!nL~a)O`Qq?S6Zw?boWTCKh=LBW?WIkC5{F;A$ZJJzI7>eY`2K&pSV4TW z0G+ppkuZroO>{I_m#in zf6b!cR57GMk!xaKhD3gwI8Q`G{-{`SyU3@A$!i!c?*H4xisOfOT_gsJU0@RV7BN?n zMSg?ms9EHvh>oVka%}(mqQDX>pgco#XoAS)m(E&6o+Xb0kxvsHwTt{t8X+p6N+@jzvF{?{Oety>i29L;{V%JoQJX6&7 zihPzB(Jh?Q_G99HE4J7t7I<9@X}!o(MDCZl*y4R6m$&%=kq_(~f9gcDDA+DWA}I2g z#EL^AzeH?VMC31u4Qm&9Vf5(G*FU0bwyzNTGG64Fq9K#WUl+%HvdC``ho4#Gmx^}M zMu_|WxuPM9Sm0xEbW9L=NHk;>`MY9-Y$6{oM%3P!)AnB`hHh480sTpKF%k}u|0-5o zAo5(X@0}taBsO5V$e%_Y+y8D+uuiPFROB~`5%P%KBetwsF%qRBZxs!BM1GYR>S~c+DYn=v@>98^(c^E6D98~j_KEyXv1Role7OY zj)Jen3gSh6NaQAwuN56l7I~T21!j?dDZl?eO%%k5hAbk_79E`+a;sQ@Rpj%;B(;gW zN9Rb;{EV&7MbJg;+$>4V22cYP*$x$Zr$7(kAk`v|fGu zsWrPOSSyBlmdGCw9d(F&u2?~V$e$7II7PmqYeZd!<)UDMSimjv<6JHMJ%vP45?4#mx(Q|7x`Ht_lx}7*#4rQ`$V41=ig{yKomSG zhPqkg(?ml-k$)lTheSSBj9f(IFGO?R|Lvk6U+e-yde>2qDH@6w`TxXhH;Mdw(a~g) zUnz2Py14(hbxjIGnpofuu?s9B-zOTHAo69RLspT`6B}Ub%xU`7<5#g4z_q99Hz;1>C6F%qRBzgdi&N8}%h`qd(zC)#&; zMM16@i7g`kOKh=E9~ABQ zMgE4qYxLu9pD1`jY*|3$zl-xkv&e^weH;||<6=ZZBHttO$S86De^l(7cCmo`3&w_X zyN-gO*s^$$Cy2w?B=QlWqsg%x+y9nWz#J=}{7$hzn#hlfj#@m2GpB>!*-v1F%kT15ZUF0*wzBi2SItp$R9gP?H zPO-%%kxv!vCyy5Q|E*%^%wmDZ#I8vb`FUam7Lgwn$M*!0e=SyQ?aXQW&l6i<>nt!B zE)pHGi~Mvk)U!lBS9H`N@>@my0+BDku8AFgPEjyZEU;YUd&RzVi@Zf_K&i<0iV^aN z{5&y-T-Bn$Ew$?=Zc05W4exl|B9iG7kQG{WhRkd8OyQ%lSRQ3 zV)mLvzE^Bia}~wKy#6MLtN3oZlr128x1xBELs86cG6vVkDYH{)fneB5x6SD4O&A ze}kAT5wXBsVsf>M{3@}J4VJE>AXls)UgXon2$@7aU4H*hvM9Jw>@%~-w~2<*M1GIx zkVWK|h>@Eh^6xt53hjTZC|E5{I5v@Q6C-37`ChStSt4H~HozhBN5w8KK#uu`je17IFXoq-ZE27MLv-XcxIh zoDU4=bsYt#i=!r9rdW>cUoW;eIaWYAt3b_0wt4LjI%Fg7)8XK#gF7_6|BgIWamCcUtQ zT?6Aw%fe=M6^yS23!B*GFuwFCY+x6|_==x!|%Hf9Ql*y0BnJS>>?P)YB<1l6(Yz$ z;O8J89t-=}c`#ng2z%MN@Hp7R&Vet0-RvwF?==cL*_rSJ*ul<#FNE!|Yj`>Wd{!`Q z?9a30ftTN1Q<_>h7D{Zd>*@AuMcSm%~@V26iz#9gdvfIRM+?AiD^@8V;PG^>+*} zM39TX&lU3F8L*F?2VVnw*}3pc*u&0&uZ7+0EciOu$9-2%^rz3c<|`*vrm^@e!f0hn)j2h288dcp2*&Nb^?4aY+xH^hycYJd z55Og`hrJ)Z4|cN~;dQW+-2j)u4t5>vDnnrBU@L-h*vhVjD_{$|2EHFQv#a1r*u*Y} zAAk+)Vt73q`HklQ?16*qBC@OCK?DH~3Q?g7_OtWhhhQH&4}KW-vUA}Lu!o%kZ-m|K zELg!#b|zd6JJ=a(aQ%M-ft`bNRH%Wi>{NIYY+_+%m*vW2y zx4;f|oeRNp2<#keg}1_1b}jrL*ut)XpNGxtD)tH`SAASY)vGd?<+9wz5;<*I^4g1%3lIvy09QBy zH^P2)E4&Bxv0LD`U@!Xs{5I@i?}zuoZgwNw1UuOc@IKh_3$4FncpZXw5ZJlGR(L;b zW!J**!WMQ7{2pv(SHbVYCU!ae0c>Cw!ym$tHl71;01md%`a6afA@~SEfGZTj2Vg%t zAO0BjvGd@Au$P?+e*$~hIq;{jo1F!J20PiAa5L<1agc%FzX|yVRzk}WEM)-fQlidJ^$gZ%1gE|CZRIszR!be~$yB7W)wy1^)n> z*yZq#uz_6+{{%-OJO|(iU;l#~6e0K-6$0!+xDEER^Wk4$A3F~|27B4L@UO6kodf>{ zyV+UraoEYugxmT0@8BQgGdl_X3pTM6;J;x5+X#2S zk)L=D;M8w$b)z82K^p>mP(2)AAAyaqpWO;~hkfi8I1cu*55OAiVeg0Wt&CweyAj5_ zuES1t1MG@N;NYMR0p6M$wzIdwcr`U_W!J)|!4`H6+!HpltKeR+iCqr&h7D}K*x?W7 zgd;!l9H4Sn0lt4S9OR$~3-o~l>_RvR_OtV0y!;dPvGd@*u$P?+<1cZ9J?tD9-{ci` zv$NmOW!|ul-2&tDreQDp06ZM_u=m3w zU^lxF#+Rjro$Lk|0{qc~u!Dm-_#D{I-U_F~R(35s61K2w;8C!dT?L;Do7m;>XxP9m zhVgYV;mA>pfNKQ;3xXgAMeuoWfL#b@z{E+uSX*T7R@GrJ0&2AkOBFut)bY+x6| z)8WVw7q)l>0=z9N96SOS!B@ipb|H*6M~40Ee0T=zW9Pxwz+QGPj8}2P9(E3VE$n7z z!Pmh~7YCULW+8B}GvMoCJ3Af5Tlm9Pb}Bp@wy;y+8(=d#37!L+*a`5Buz_ua@qBdH z6$xXDPuxR+13{482Hy+^*hk=e*w1c-Z-IU67I-e~Wgmd&!5;R07%zl}-RwqqKG_v^ za?pSPPfv#(>^gV>Y-ewU3t=m}7QPL(uxsFju$f&2-wvDD~~$UJHBK2jCLe!`=_y2fNvguxlLxCkG7(N?`}P4laZ3?5%J) zY-QKN6|jX}1K$su*;Q~QY+{$g55NX?G1*nH9zo|FR&*u&0&x5IAO zH9QN!4g^lFkO|kr4t56o8f<5$!ws;NoeIAWTi7Y^8?c$31n-1R>;(8t*g$r53^yX! zg&^`Z&w;ziemKZ(gLlIL_7S)d_On~zJ+P160>1@&*$3daVGnyhycc$V&DZ}%1WgE> zT%iHp2Rqnx@H?=by%pXMTiLbnyRd~_1HT8G*;VlSu!&s`e*hc4c43Q)5qyXs(h9GD z18|UC1b+kv*oE)`*w4;~KZbqmJoq5&W#_`5z#euE{3+~qagc@JGXzd{Cfp1=*ctGD zVLLk=Zh@`rRQM2VVW+@{VKX}k{v0;36W}jkmw^K#f-ez7zT!EsoE(IM>^Ar-IKVyv zx59pQEBrO=W4FNHz+UzN_*>Y+-Vc9Ac7@#>G$QyPDmd8)Z{VO9!B40V3Gy6(BXE#i1pf>N*oAN#>}Ti0zra3r z9()Y;vUA~IVGlb8{*AByZVs{#97hEwI}>h)9qbJFci7HOhfly(b}IY_Y+^8U?9AF=Tjj*5H3U`Nn>=rl<_OcJa z8th^3hh3*2aC6Xz;8fVjZh+%q2fGgL0o&PI;RM*qu7yv7E$kW?f3GTRW>>+zU=zEX z>?-Juz`#K@FFJ4@fK70aT?F@m1MET=Z-fi`+4=D4u#cSw_l3ReT(}?XVdpHv z^}jy?HwRg$FaUP4GhzH0*sz100po3AVLLk=PJylLR2c6s3tQMJF#g^|*vw9X2g4?I z!ZLn>0D*x6BPtAqBcEdgPAnyx;UK#W9tH>4N8nW0&u)d!gnjH57+;DQ_OcJa!(k75 zzYD<#1a1x*;j>{Uy8*`cO@$roIvAfd2;13P;dI!_u7yX!7IqCh3O2K=;B#RU+f|ML zf0{RJ;Gh`B--ioF4)Yvwe0VJEW9Py63*KQbI~N`Ydtle_ z90V62aC3z$cs%T6XTta@zp#Uy0bdB)+39d5Y-Ojy7r_>G3Oo@uvy|Zu$P?+&xAcL4ssA& zi@?p!g7J+RVJABio&`JD8SwS6ot+Nn!B%!EjQ6dDE$kHd2H4C_g7NK4VV8-61OzuC zFtCmAO>pGD7=aUu$qqQkZi8=z1MDL(J`Ni8vs>X?U>~~$o(p@~2jF>RSJ=bBegwCo zf}7n4&xf7t2Dkuru#Zwz6yC|G*Y@ z4g5T8X1l5oynw*OK{@;)Y+x6|FTs(6JO^MO9Ap>4FT(+LAzTOh+4=A*u#cSwZ-c$C zYj`e#R}px)LJqtgcC)kK9k7#~3D?68b_VM z8-a%_?1%TlZgwNw1UuOc@IKhVu7lr!?d+}ae%Q*ch2MoO>>Btz*!(fAzhih6g7*=a zxI#Jn0c>Cw!ym$t1E{|O4!}Wn5&RJxU>Cv%U_Uz_{uuVL^WcN9*Tq3Df=>{5*g5d0 zu$!F)e+E0*nQ$}gU}wPph3)KgxCOSdQ{h9fg`EN)hFxY3k`R23z{E~~zkm&FBm5;C z`3NI$!buLoL3SJb6&zq6fm>leyA}Q#_OV;wZ^*8&mxBWczC{HOdq4ag>}EH@|AU?E z1~>#e*mZCiwzIdwM_?eEm0bP=(+JR4}p2;U8fGyBPinjs$oPz!5me zE`ooC1MEV$4feD1;a^}MI}bj_*MBbuxd?tm1rIw1{tb4sv*6>flbs2-!wz-^{5x!C zr^6>;D?1hb1GcbJ;6M5LZss5f!C$CgVkf|V!v?ky?tmj7@*G%1HgqQk*==w)IKVyv z8(}}Y748oE*e$Rt4uO}00|@Y0!?1_FA3gf1Gclb!U?dI zT??NETi7*ZS3yq%W)7-Qp%-jom&3hb1G^Ybgd-pD9Dq%5kX;1#fdlM9I0^Q%^I?34 zaoESsTZHR>Uj$wba!~k2Ag~70iod6Gk4QwM!U)w+<@IKFhJIH1@$Zms&!2$LWI2HD@Tj4Wd zAG^hc0N?&P!X|b(JQ_Bzi{UYF{j?v*!M19|634D zLEz;I2jFbj!`=_$8@Ix4b|ZW_>|{5t%9dMA{2Hy+^*hk=e*w1c-Zy~$FJ`P$C%tZw+`v5!-_OSQE zx593ABRn5=vKwH0dM)f=*TD;5J9{f!2wT~;@NM}1nXrX}8Uzbb!OX6LZ--6na`+C| zz%GUt!I6DD2Vf^0WEa8shV5{GT?iM!es(^5S9d)A_i>PiU@F^5J%1(t>x)4}6NI`H9Y-T6Ht6&p50meu8!v?ky=H(+z zJO^$gyHOrwx52C70Q(4B4Ex!wuxkwh9|tW6*1}%)0k{PAu=m6F!ESaVybgA<8{ksd z!LEbLU^{y&Tn<~=wPaU81p*5PHK=euY-U%%m9U9j4nF`J*v0UAII@@L0PKN->>~I< zIKVE1t6)Dn|2ACzA41^cAP*HDhP~`ucmwQV=fE3bH#-Yfu#=q$SHli=2K)$YXQ#t8 zu$7&98?OJG5Lh@!L50n*nVkeb3Y*vo@MExnZG<0(BX9E@C?tE~AiE8I0uHc`z_qZS z-ReT{Bmy4?E$~yYmwf|{5c2E`;k~KkOQwkKh#qKCX}l zZ-c$;T=-Sk!_I-X!)|sKyaRT!GvRvJ!OnnRgYE2exB<43>H43F;B^ERu8;!10h`%L z@J`soPJrKp4QwO43y$pJIk152hlA`kcsCqiAAuWT{~o^nw<6esz{eF@;J08e`vCkl z>|yVR_rh*=BisZ#*$wbM*uk!Y-+}Gyt?+)>y2phc*CKcqfrTs7!0*9kb`|_SY+{$g zAHW87G5jGMX+(P~-~b$C7r`IF0d^sL0QS2$$Vc!o0v|gMJ_vi+x$q~jhn)j|3cJ}^ z@Mo}-oe4L?4t56oU)au0hg)Emm4j3ShY(oUDez&~%ua$ohfVAR_zT#;Ho{-Rk=;B8 z=rg+oK{&{6gTI0U>?3e1*%kJ4(2C$|RPeD|;BR0r`vCkc>|yVRzk}WEM)-fQlidJ^ zU{C|E(O|ocy`2LEpoxPRp zDo8+J<)9W7PJ=D%8n`EHW>>+zU=zC>?hPB*#c(1Vd9wrO0oViw*+p<4IKVEPkL!OD z0zU`&sBk*$W9PwrVJ|xu?gx9=IdFg2&CY@cz)p51oD4hI88H54QP|E-pO5Q*3IZz! zsi=T2st#M&DexJvnVkd=hE41QcnEA@8)1B#Q#i5{BXHtYvKbDt+u&hvfPKV;AQge1 zgI4%V*hfxG)5>m2FeIL%wNk@-JijEGv;sZYO;?>g_*M*Cg?8@bQ3hLyf3dM6z+Z~t ziT#`Do|H@r8f<0XPQGTwl6>2mNscV?;-0pONmzAgz*c&t$5uIb?9U?&Q!9s`ML(#) zA8u7;$KrDO+vC*Lq<&#j3=*U~3yXa#E~1tTL3 zhMBac#VJ(1!m4+v_Z(a0q`i@m>gQu|LkDf9nZUJvA(7~0X4JR5$yRujr=uk zsd2_U_2jQ{6T3}Q!C&JBCVfl~xNT)~LR2k;YQHq9(|(IPclc9>C`Y#DEjxGQin6zC zWnYFC(k;ortVamkH?)c@EUp^$X13`uL>C!FNiHR_zU&X z@wk4*?>Q}X`>;r7-J8!9B7is41*B$IoSAVPZSNEQXyKsO;yMVT%y<+A!*oLxC zQPuON`rt%dMYmtnm}dPeB3^bTA%5ySn{yGf~L^u{Tu&`J2PVe@2N&x zWwzI*x3%tPS^={u^q=im8A@s2@R|m0SCccff$EMw<0hJ0=~)H6*b^V9^exJI_iq^j2QQL!7 zZjZL|bE8`IcidUV*$wK+zvI%4u159Y-*Hz>-$mmU+kKIaj_3>xzuuW%+?9Sz2Vt~s zT30%Ux*koFB5Gkr+#uuA@2IklxXlB0@P?uv)BN;bHqZX5w>M1G&NMz+zu{&r-MHJY zf){FoHf+((?b)=Wv!%@&zS3?te$k}t-L&)(S@g^{^=wxGHm)D$PuU*4*VceH*czgv z`o8jZ(*~b6^bIb?M{9ZbK75VGW*^N2Klam2UvzYoWgm^v`nvkDn>P21!tbeC#mr_~ zWu=o&iB!BVIx)R(s5^|>MaDDh)PIcHz~TGo6dK*$7mjw0SXD!3swm~dz_{p3)nU{Y z8~?jg)pys@)#Kf@0mf5a2c}+B@HtjfQvWyl*AxnGqXsG+6L!(Z9Sxz=&>cGPD>pc( zHx(t%Q?03GU+IVA2kMeI?fl8~q8A-Qep|%`AKIu`60lX4`03Zg>v&5ad9kBo7hVSs zeHcBB=*2d@m6V{`7N?Eq)}{`{X(>HbxN`&UQQb6cq4CSt)gn!sZ0z|Oex|F#nwC21 z4mziW%3jd-2R@w}+RR4{b+rUtom$o!ZU3y#l{HSwFj_xSH=d#m9rn`mvF?2PU3BBP zx6$gBFVthFXenp+{R-QX-E3R^7Cz-5Pc^U6o{x_FW9rLOw7ZNaUQ;&@p|0I~Dh=$} zJ9O+mRU3Nl{d7p|vQYz}Vw&L?N;;IT^WoR%d8~4#J9-#9Rj+t0^X!r@vF4KH*!{Fa zofS>ed)5Usc4gUr@+MO8j+bITdN>Uu}F!cbZet zO(~#Xarvhk4cqFY4mGm3HpmsZHSyC8)qhc?ic0)QOrv{-PoKuGwu+tjL3}~ytN2m2 zZ%SDsWv@09eo5?88Kj?6%PRNjED6w0TiMQf{_(1xew3DM!~Yw6h+b#TGZ0J;^Tc3TjOe3Z7-@c#v`0teu{W_YlWk3- zb83Y#aXal1b!Un;;0!uZ%IQDzi_SUI@P+EvPkX=LN;*Z;KEgQ7iq5ctZR&VG?QEm# zC1vifU1c2el5+OfvW=k^@iSe0)n6NAd?Jdp0a}0K`WKaTfHtb%)%3muFX;r)wO&*Avr~=BkxWW;CbLsPe5-5*PVtKW^YdtzsvB5Fgd~YLrjw zti+GRw6`%`^@JBA@^Z9(u0MsQMKZPhOQNe!rI~xQQ$LPgHL)sjfYMx#9=jVtL|a)& zgnsPJ?l4e0=o%)S`%T<8pORQ|2f7@~vm>JLSgpXQ_Hc_w7?P)&hj)l9!v-5sBKT<*)>Ea&F`TywQ zKU)uWwH~52^pR-_mD8E^|8EBaT}@1+n~<47y0qhZ?(FK}QQUu4Zs4S{lDl3(gR0*? zPk)+sLpL?}EN#f>ALvhOCXUWNmbl5ExIKXHG2vUvPh)X5tuDJ=zsG%lx3X{6`YH2R zO*8$HI7$@F*rOh_X=6v~`xkdaO`%-6zv7+i!MT}lldxyA>rwd0){WO{gOue0t#>l_ zjSo=&ljwN%7SwncHAW1g?dvK}q;aBEbo;)WhaPjN@MT)YNvpi;_5Y7m{`TDewaQ`s zu2sH@8YB9hv`Pb=atN!h#?G;NW`gpiX?% z{oYFbZl;q!C~^BtK56NLxRD-j?altX+xNqw<&kK4L@&Sgm1sF{;@|J=;e&e3QH!l? zRfrC%>~HA5X+ipL=3#1w_f~)O$~8Ls8`&+R-qmjsr!gZ~MQi z&8<^o$56FNbt-R+HqqGevZ}_<-7l+8$IwmSsE^fY7H#0D)lE2+nrJuo$$p*=jR3lE znC=W?;g(oyMLn&{O>$%O#CjdK1wQZB5r_2s~B9xkKT>5U+7#_FQa-$Z|(D4|5#T} zhGsI3d{e!bK@S8ktI=ys42VT-TlDaY%_l87z?h)-$Y^<^t3cI_)sp*-tfD^Qwxt5+ zBHsPU@2M}xYG?G$p*sYMy%>yppHf#}to6J6INcfPkLG>R+T%8KbbLP~R`0WamG`4^ zT7i#h(5Z}9kh)vVJD=`+-=wpzt?Qw~PfzkXE-mP6!yR4VnTKf|bdKnJl#%_fDr=|; z?R{FJDYVR^BIj!ZGd9x`Fwv<|as#dimHLC(V{|OXa=s;r<~{4wMdRome^jknpH0tS zEFPzwH{7k?X7OqGU@bM$In6JnO=`#be%Q<>({IOV$;n&j6#D%Y`o=be5?;mvO`-fJ zW2f6>;~c-rxj-v5{<2x!k)=&gJ;!T3jOH33UHzD)^;XlzYp1v(SXcB}lC|`pg2s@p zYjshZ#7 zdKtG>b{!;ikPk2#cIt=KWt;eL?Y$VMvFN@}=InI!*hO0Wus>=#I!?SPnaO; z9sBXo~W5*8+3&{HIxXwh|-W)x~s~-7BhwgYl@6fSrCly3bM=N%plnyZ7 zSI5=6PrP63IODRNDlkz?9{A`cj8p8~O-~-{llr@Ds@o*mL$f!jV7AuJxOSr&_PjPy znQU6TanbWCGM)CwJRID7H$zXw)Tp1QX#M)umZLq4JDs0-9++y?C3fus_17dV$+)ye z^|@FZ+I?PAhq`3Cc82kS8b0g?{6u>)F>N0mm~`2Tc4APp(x{`4$W9K9mCvL(O$$ux zT;L!*39Y=B&_P`Li1J@T{XWgB9=Jra7_W~y=_%c&sIPcgcT=@q-?IZYtE;AKy^O1? z)tu>CigC%aD%GlG3_Pz|cH=VIMn4YkyoWG0X=;O&&d{D`^|862s%vZ-ls+~e-}le4 z`RXy8Yo;5mN+0G0bV-N}^BD(eb)A#jL6dt6Z8)EaS~jW|CTj!xjaf?#>Sx#3Q8)1w zb!f6Sd%|=&usio_;#zz~8}*mYA5EcSH~^x*m+r#vooCkTAH<0$yH71Y!_xU6>#hen z&rgH;ZLa5);zSc$>F+P=v*qFq`ew}cbZv&Qu2^ljl%BQR`>@)5sW!0BA-)Zu=f3o9 zIlP`vj;Bn~`WpXeh@B{V_vCvRo1I03{If? zqGylhHC?6mJfKd?(asolZ*gZMp=h;1SQSs1rqJ~J_1+D~&hH%0&fZ;BqaUGjOS@VQ zRqAtNH$S5!cXZ+g%#HKZ?>SnZ@q@6v71=)Qiba?wovqKHn2v^~P<`hyPUi;R79E;9ql@J5Nl13F`XMYb-FUo0p9AJ~ zVh+6P(&vCXTKL?3qA>1JHDj7Ks`pZwu(TdNx11ooRF@ee8Z< zOwX>f`fCqjr32OYtF$a*&vJdu<4U?3@9ujxdWwIdj8CKHneu#Q#zP_b@MV6PGEb*7 zw(}V^e!6y+FG`8C=|9KbufECE zCK#V{>l=2(40`@|_MNy{IZy4JK^M)9FR71aXy+S)PW|!B`Pte4{bt3n4)^~l>Zhye z(a7f=amni5YiK6auTmdgL$9F}-%AJXDC0HvD)WQda8*5%u8bXCRXW*t^?7MGK57UC9zSS?VCqLw}(mamdKhunfJ`S7h(I0ZHc6UDHnv_t_ zr-!DHsaWltMYp#PUZ)K(OWcCWZ?Zm$R#5{i+J#n^N ze^$$jAGA{r@-f{M8Wmk?36?sO?j6vhuBDtOFO?r%s=x9Rm?tW=Lse)_qK=piw^;#{&N+Rf+hRPSD| zUEzA!h}R>V>QAN1Z|IsLT8f@Ij@HSh!=bCkwv&6Dd=Ir)GUep(Ou7uwEqM=mHGdN| z{Qar)i^3YZ8nx05q+Vs*a$|yv>x^4`a-B(@SebJ>XWOih&DrSAIRV;^vmdz ztIS`}(J{HKNo@2IdX}wX1NvNc%~|nN%g#DWCC%0b3_03O9|SzK4qbBRNrT{hL|r~x z8+!e&#d0t#CvUg$c3GHqa^Y~gd~^+?`Q*anr_`?5^lb8`yVYU*9KAvPj-NL#QvGkx zCJo7mc8&K>KkC02%Kl5$oi}J>uKMJTj*cnxGGdFZa@^!-ecBR3=ndNIqW%j!$>@Aj z;zK9&lm9G!8ZVkOh3+m;Ki;6F8t2`EiFl5>XpWYga9}g4H-&O))SNkVWIPx3gKl*n z?2fv+OuYn;r?Eo)4bX6Fe>iTCB{8CC+jjU3o-J}gQ zUcFF_xJfG?a{J#s_~41hVAtbN?3(AVEmt4hqz#;V2i+cY?R~sdLze-*Rhmne)~*td zDA`Zb3FB8xHBR29Qc>%vXs!2FsVg1Y8434B{po$`PO>G08xv~9^siQ&qLs#It-Mug zCzjeA^<28LpS*5|SZe#NdfSg}R6TB{b$gTT4)3~o+ph7om)mQZTQ;d6v4)fTMPFp}Tlo=UQ>cm#+>=`|iB{G|YaL#pF1m$UxiRYR)~K6rq0as~ zUlre?jdNW^e?*;jL;We3Brg|qb@r3H(R`om_hP+|qvM$G2l(Ze=<#_8j;+dQLQlos zj0Q}$GCYrBji>v&YEhcIM1O6<`6p_X;D`EPmX@rpnyX#d{ky+=sPehmITxoE{&T}3 zSfEmWF708OM<;J~NR;lShl+FQm`$rviSy{^iYj$3e!jO{U5TGxtX2!?XF?#KTBO;R zT&32NEnB0`U;fY5ecW07m{=RFwQ#jMG>-;x@*;}O%jy z>gM^{xWvS07kED&n5&+iubt=mkj`Xf*@xGxIy`h)5njiy>|26UudP!1hU!SXnYcVj$t?Shb#4lG>ue!(HC|!#C+y zPr4#Le5?muVCfeR{nA-ZM|Sigy_n1CBJDiZLwO6dk$oCy>nE4JO?CHSC^zM+!v)&V z#5`U}6TTYH5W4*qm9T(rly+9PN6m|HJuM}T0YuF`i+>K^qNn!k%SUeSxEPu zD^{x)3hCj5`9{@Ls0|&r-ht^gt~%OnZgV9cg8af0jS)YBYNkV(nhK(~Z_HPNZleR? z#~ajzw`oKB57wKwRyNV&W_8DH+6>oIbnaS{eXLtW_OXky|4iIW&u1>#MGf)TE835= z?s&Q28fr{`#$^V*|8kam%B7T!ecB`+E$%}J7WnFdnC)@ATShQ+AN3 ztP8bsjcIGtqJ`R^ew*m>XRE-}#M`R43-#Bj#~0G85^vw88W(Emt}+_7ikb9k=(rKT z>N}EJF@%cH)99nKTe%7y2;+vyD%15UetL~6t|B>B`9iA9w=Jj3x@UIPjqj@4>&A|L zdSy*kK7ONe-%hXSeKjZA)NxF8I^S~7-o<{#ak0j4>T2rMSlzI!`*>H~zFl?8Vs#J6 zx_9Yyd7zg)OzTjm-=QTB&52cRkd@CzG}IrZ>QG37nM$Hr~k753_Uj=(G+9%1?n27mhO0|t%o6$K~Lv& zHuD4}^y2cLi3(4upN?g@`4Y;1Nu0I&`;pvI;%IFpYIfG*PV~BoYu&K>dyQ+oqi%kW zUWVFnmo`O>zf)^Au3L`hd=DDWTc(CB(MIp+cb695&3N}xHFPl@DzlfWN%%QwshYi* zrd!Pt)EcZdE!Nf=k1qzEFkZtyvsI6!+6~5+??QM{BF$4;p)H>N)2fg5P%kgl`VVm( zr4C-V8=KaSnM{RTVLs>T-6DF7Jm4VR)A|3uv(zPb)3bxU7ARLKT}s#7O%HglUaJbrsE6Bt;0(3zZtY6rn(5fc6g6gr zHrm*uOx?7CMtn~xe)d0XTg3-_}_zpYuMnJ#+;3`(Su2LzLT%Y|ON^rX5l8tUE86b-e z#)>A|)xuR;@)^0du7v|w_;9So1e@|wjSGf|8qKJIXT`bsr{?}+*-)&ce6IQt%Q{63 zUN#b|v6s$Tu}&XEtH)v`&%4ybd+A)BJ6&CSuQsIn_HTNqW%p`Vb}yh`-o`H}^vmfk zdOG6R0yWpADa&j+AM2xtcap6+YPVHr&+Z>-NZf8%>rX7%N9PnuHc)~gJ$I@a>DIhg zj%?EXaSry6cK98gbNMu;^+IWE_tN{Ave$mIB$2AU8m;yN%{NKkacYx}J{$ z+L{u$<_xRQcF&(LWrr{ml*l1qs;H%Uh z#oF0}9?t7pE2ed4g+tTSq&3=lc=+5Y)go70`am+>dT^;mB27PR1=yhq(OxkCM`Lq|hX@a@omj5kyiXfAa2Hjlv%4FuMBgz(yz_7m6}eA4 zxBEc)#k@`%)cub`J=DeP=ylfp^vfb7&(klJ>$I~67_aSG<56@Lljet+IB%Mb@6J?D zlxn9Ne_Mr9=Wyftnd-qZa*It}T&krHcwp84vG9e_g|AzsFPs%!c+e_+;Ste=PtfTv zwym9OF1bcu^PbD~g&(*_U-P=l^@WQr$C~@AH_EhOt_yK;Eu(!Jy<0%nhf{V1oKVo9OvDZ@LOqbtjq zq3$TBNqov=RZBl7w(57C{^%X&D|B+fj(xr&`+5D1$NTWT(gyTk$H`SoZ&IcTEv3)> zC&zPcQWsTd!@4!7CzfeL)XEAiqi+vXDZ{H9_0jdHWokDq-1iXfVoxgheTw=CB`^G| zWRqPDzMo25|0?OVOkGJOuB-o5vS^CFJ=-d>w?*H`-?=?!{;PH$yR40?g+KbyfTqx| zIPIR)(=|(FZMy1A6V;pkRsGvbW%b}mjX(0Q+UusP^D4Ee#&a%Ku1aliQaPQaXb~K2 z7VM0MCF;dWdNTfrdFr!Dy73!!y&CWUohQDXr5=2MZWeBTfSzsJu>`pCk`}su)F0Z^ zcW(V&%Jg|r-?@!-oM9&V=<@?Mx`n1S?YvQcFTw@u>4nOPlXc8ruPy1gV;^;<%q_B-KmFrwoYOOV4|%$}8x$=TQ&cn6`~o+dbNuNz zl^>Caw=&{!20#4ScNd=bdgG} zqOO=>Ex$k?IZl#dzaI{Q5`l zV>CB;mr|!ET(t2aZH%#LJQrz|bpCxu1s-9q%XzH;#x`9pENbli^Y|x%O_2UfO?s(LTb=pvMiPCzi zw>N4RYqua)ftR#1cATZOz1@sAEZlLlTAR?VNAYBOkku4Abe_7iMjP0}q4S)DIxp7w z>};K9=$to3=Lst>`%t0IW}P=*qjS5?4<|Ac9@aT+UWfW3?UX@k{3d#{&0M-a8Ljmj zP|@#~muLo5=F&ZpDYl7eCw1+#oC3UcZm{u>(OhQSeU}1%b(Ve7!L0i<#)P%q8UNiGpXQ9GI^%6R&=*VP#8@(k2zU1~6Z!mqUmOqR z@v1#Ue{DP**n{j#WxsZ#P$rj|%+D)|f_J)?OyskH1g8PH5sdCUg9_YCej$*P?!9e& zG!0w^sW5oBiKMkPOeDqCEk@Gx8nk(t{Ht`oJ-xLY*q+vqLcWzNQPy&Kl61WRC9RO# zg?`_;7KWiXFW)9Ddt0-v&3YwgcyHT|mFNoWkbc>YvQ_{@cmob1jH;}ZKbB_J zr&TL)h`wok%2_D~1`Ph6Sf>}90w8b=XNF`x_}hsTyb6^&bTTVXUL{YK)^()(RWKrE zcckFe_#M%a68Uedjx>0++(ydlK=_WIB@r~ zEA9Ihoyw0Ux9@P>r>Rj`KSOTI!=LW`0a~?BKf1aYtHvb}=A;i!GKpY_Gai-1$<{|t z&Gh3?KTa?YQn{{?J+-~yCb()7sY^ph36C|ho3yAV2jg81#fwDxM>S253&TYde*H1` z&IMiZL|VR$rnzh6D$$+WaG-p7>pkP!(!7w-SwqeP=e47hUUU_wMk^-va#qNg`PNYUw6`r)TPu%ehe8X;&0mS2 zLu)~#pM=wuwQ?pq65>of@Doy}R;Eio$yF<+1c>&a%jS-O!Gor=ojvLh!ndbuNe9~U z-$45HXDt3Izd`Bi7q3HIGD4zDmuiKc45$l+eWCNYExE$S_&dxrpk(7Apc zMOL|cf@{nZD~~!*`^|E`bVFdyPhOkAk+#c#F5C7SJT#x1>8yJ~0mUaMeiTADY%q6= zJV4r)L=U%M#*h1vYREmM9?tjxKl;d!N09e6d2;lb8t`fgMN)iZetwmrw9YOjKV{jh ziPUMk>~H+FO;#*Y|9Eaf#gf~0*)O^kH0-M|q==%lVi=Q~7=TgN68&eRqFmlK7&gn6 z2&_4w6xTTKOPhX|E3i6V1xD8I@)(PB+=sVZo6S5~k?Z7Ios!stu+aZS~)LA1$pKZ3uU|T_FU}lf>9tY9{XJ=bePI7Cb9LhQGq7De4 z4m;(F9{+sDlMXslYX#7RopOV|b%l%-XHA_PnqV@}gCg73ix)}n0b_Z$n^SOj7M1~v z2_Ab8T~r3bRotb#TZych@$;ynELAef(Sityw& zB07g6RbV>MtAM0ka%`vB!J;a+*G1KH;HARpSQd$JTFDXIX;qvXDwL<_JZg%LO%A0g zyFlP=y}0!qL0P-xa{duqXTEN3HVL46yKoUuHXG#n-Glc%B1kk*r0@R$*P%l^UY+Nk zE{@mZ@qNxXF4GJ0J;M`2>+nkO)Ti!tDeRkxBa!XtFZKyLV3O&tdU8eDxEp>_r6@5EeTGI*EINKh9ELNOie=kx;FvsVtAk_1VDZgPz@ zZDwhW`jya>K>hMJGo7EW_hs*4}j%i4QDYWS5tz4lrTLl<_7t3)0&f z?<^>Gg|lqQg02DU)7?Vhn|Ru7GPlj#JI1{)K@_6Y3c+sz))JJOI{88w>x_=3ibcog zZWL1?=@5MF7^BO0Y7FF0DT2z65NLb8dMrSSu zZOO9PUjg`3HL*1~vUGtJyh_?%Q#cjG+R8YVA)ZAsCHCqfwjMfBw+xk6)pHG>la z=$;Q)P`TNK6ljG~ndyn4&fZlQ{L{lm=MLe7*imNc(0P@q@nKl7edEk{*I@B0Z*}8J z^28CjhH?9_+|VM|hw48_9>?Uc{wKM}5H~P!J`OmPFdK+tqgveI$aFT?ur^2A*n~n! zdYJKI+(RX5&9U;X;<=BEr2E1JA*{tWs?ywJa(uN~oV$h9C>GhMA+ncL7ENUq!fek9 zNIoXV^uGX+RI*R)h3tK;Pp2W+O7>~2P%=e*nhAz}y-y!h5q*kU&#C?OKHcOz#?j%_ z7|){VHo7GF#*=%t+#$vW^rQ(bP-Lwqlvp^`_v3Avri#06R(TI|^-7h%LU9L#-{%N- zRv8jtR{0iU=9Mag3WXi2j4e^!zb?(nmWNAIL+C*^yb;HJsnQ8KQhFLd?M}%4<<4;= zJ9oB^1<>dda=c5RJFL)tPhb*H387sl7#XvaU5%g;0&Luqi5^#>QO=Bl~H&gJhFAl6~p;X=uR;HAEu& z_KAZYW@9}!;g0O7^aceS+(UP+$>GtNI!6+GJjFM_FFqE7v*pw?W#bjjb3L)RuhTR`hvxo5Z4M%GAv*kF-pa%pCh`HU*lY~G3 z1B)Ygf`RWppk`;}uGJTFGsTn_=!mHCnXp{2I!W(<;qwc%qQ*);+IdC}F2Cs^M+0Y7 zP(YS#w2CVTXW+5vRgu)Qa!vLdFyH8`oHWFp7p%X>Iv+dH*69aKH2lEptmc9Xk4<$z zUl*cNxz3gs7ZidP#g=dY>1BA0N-Aok?Lwo-DO}N34CL~_yJ3`>40};jfcojMkS7(f zc{u1hhvBe_XivZpBXz4nE6(F~b(?c?fM2@8o4~k4m+m;bblO2zuV8!Qg8-U)4kt^> zRHlvRWZ!DHgnjE**zy?>jVp$K!s*TJRFxi{lYN@Cc9=sG&lhFcM)2{NLp#dJ{MDfy z08@cJx&Xc)v#r6Dd>$l!x(dB>9uAVN(9}8ntEa^+iV>{{=Oe09WxTx*lPfs-^#5wZ z#h>!e%fWB9yl1Z?>V&j!&lKg;1U6j4LEEoEbYfjNXVo`f|-b0v$ zr5f19JNa4zxk4cevGqY!ntDkNEZ8~c|HVeJ&mFY#JPwL* zK8opg+evz*_^7Vv#w!f`iwH~;~saB@j4cNgGE=0ds=d$FsG!Ktt9RWxu=%s!7I4?88Q?D!`VS+ z$KHG4pzkiop%ojVf&XTvN^XLg*t<}BV!}8#Njrk*+BG>gI+$~DX_a@ll1M78^2WJ1 zRo+@p(S;(F_mbOX08mQhC7?7{c>!;krC(EdUH+jB*X8K);s5ZlbB$|iyfGm{L9|s~{vxeZWcW08WM!o{W-D4>gKF;~S@t>DF+Nr$e}%g5N^YJ5+&dX)v+mYxQ` zhcxh>+$7QO8frF7+B&9TVS~f)Zj7mu;1y50=LEO$0Z-*zb)eX!Xy;ZyR}z%UtcRt5 zF4(Y*coVLIJR5e9j@zkHj$G5*^*OJ{=dtLap~$N=_dd!lg6Xs2K5U^)_i1^K>=V(( z70*f~-Jd%7ewi`l(2|hxUJwkqZiTTbA#^SWn*DJ;*>hxH|BtyJiJv>*3!Gv!rutIM zZTLm*`WDdK7$uNdJqqaO7$sc#L88nDvX|$od(Kgsa;nxd(FGQb{yQGvT3M1W<=qDR z47YOjfjcNx@nf~E1=JxI``*7@rOD6WvA*;W8*I5RX?Yz`N^Y*~>vHEMC-0|licI}o zR=nR9=3hx?+7DM9bo`}@AAf4%P##@*1}l5y9e|mCmpcE0$kMusr*u1yM=E+>5a=se ze=VecVf~6vi|ezm!3SVI9|3@^3lJPwk=opp%exk_TKSihT}$z*(H^?{|KYUw^J2zI zaM~1a!D(gJ3DKMM09OCTuhCH0J-M2f^o$oT$>AQ)Ow#Ji`K1(T9TT9r(O8nSeh|x` zS4gWeTw8*)Ci^={YX?LlCoMJ{e*U)i<#?Z8En@OZ($+w%2)?`zLtlD9Ki`MA{_%-P zTa}=tU!yIzvyKw9)xUzEEtU@R!2x>oubC?_@hWkh_Y%Y?BRlIvWG9_zx^XdYluS&vUP>la22|NDv>Vz-xFeTwZ;p})- z5_(a@W7&6DO`&~X6Nk~a0Ijq*`~e*+DGpzls`FKG`0%EvnO%a9-+Ls)VN$U;?1-Vg zA`ailF)<;8tq_MfylWXfN{Yj0nAE(-a&PIIN0jnJ4jz~zCfCG~DMYJ^Rff4v3lt05 zB8&3QY2E~b6tZ!7-k2-jESU6Vu%a-N76~L4RoH%-YWyn?l+qs3m;cJKE;%68ub;r^ zoBUJ`@JT5|9am+}9qz|@!bA>Re*v($pK6;5Oc(!2M`?K#f+c0SLg zNj3H@)~N2!tfQ2d zqArr}LI8NbloRC5AawBrQ6OD;DXY@tOO*3c zu1s$qk;~GGmvX3F4omxzB~($ObHEH>;y)nYgSpi$Pp%dBf|GE=qzBfo_<45Owoq8r zeCsqj*^-I7IO1p~sN+6JiXVdM{8ILff5GXc(Q$w-Q58N)KAo>uU5&;Zd2&-9OSkAU zubfA@lm}CJvFy!;{fRY7yzE<{`U!w_I{gy=#Hi3{{37hlj}a`DWxE3dq}0pQi!VB; z`cs$DRL3rdL?7=`vJt-56~}v<$PvLAUVgxt5GhS=(o{PxP`7$O2kfBcfCu!%j!X3I zuW*zJQ(_kgJJun`m$!>F*kR6#F)>$ZlmnMRvdwg^P+&`<8qSwpp_L9?FSvGven$~M zZ>MO@m;rAlN{E?FgwcK9f%i=A-lIwd&^lhvsX>AK2AjkR7QClK(eDK~ie1x;EKrm{ z>HNzDBb9m!`Y4{3vj{bjKK*;adc`jw3mn5wID&4>2L_!7XWoCY;Ia}Gw0St+a}>v$ zpFqIjf05-_|N8e47HrU_>?iCC4Q=en=T9ul=ZamG%eMC~37mbFoYpgRXPGEmVYyqh zSo;inBcaZ6vtY~}kd&IWB#4T%-KmH8RxmH%VUD)X4M)MwPu8@&=zr!&xm-%_7Jzi#8XH;{dQ*aOuUb| zhAA~9<1zisloqTjtePMfrHWMl7A3hTb)=Q8X|juw;5PdtIw!mc9tUWLixL(&rZp!O z@BaCG;Cz{o%_s2Y-;RR)iIJAV_+NjMCM&h1W;dy^ti(&@Zqf&`(p73}qrI~7?vzG@ zbPu6mbGt8nMzWI%XWVfVWF_%UBPbj*H8pbt@5ydb1U?Kh;zO^07;R^EB3ucVXjI` zY20NR;i|;A+yX(;U00Lmj(%qC#EqLADUGc?Fgu7DBD`O|9m*3hb zddz3yP8#B_RFxiGraA6PA8Fsel;f_1_>Y0!L#JR5h*c+OT7X@DhANd)Dof)ZQ>$`H zP3guN`nVj{H?gN_MLES=@;yyPIc1IKaWsTh%n8RUiHGSus}gKEL>X44NwqH_64HB! zODiVW&L)}{q6!YEqGqB%V%jr$YE@>`9=wf1D}(<003`ju@w)+(V4htT(YdEYcQ+Ph zZ_K5iJ(Q60O}SZU?!IO6Y6WNMvWF7v^MyIj2T-1$3Ky-tbAh9v8a4I=xul+@KAuXb zWXYt-o=T+j{0V*UsnoR`pv#_0pqrR+A>D0{Nhz7?DE-XmAsTVt_Re7bk zw0Q^3F0V}NWbi?l@+Y5*ME>YOZ}NwTlf-g`SYw)iI!G7_40;Sv@X zYcA6;U#Pwjf6*FW<$odVJB#~SLc8T-r1>asbCUa&!=^o<`al-hM*U4o{gfza<`p{N z2O9A^OgH_&3?JGISAQkh!XDN#Pgb%28D_n5D})R)_bcZcv?xHS!76VyGb`qRXknN* z50Qq76AZlVbnmLQs31V8&;C5=Aj>?QT<;O6)Mi6|H7mMAp`zHGn{tsa3CudZ<4T$= z{0NI5A8sBORw$8`n20HW97hAGnJszNKu%z0ygQF~=JC|MeooIi&q3<#Uy*8BGCQ&4 zDcRi@)TE*kQ1!_!0f!&!5lw!JVi}z|Xpv;Hc#R!2rJ}Ngo!Dd!LZTB?H%O_)ra2Q> z@(E{7lk>D9NNFm)8An%xlo0nNg~nXE_of=;9t{5dvPQ|lzTo}rzs+d`{^dkdxjDz2 z{X*`>U+I%zrB3;t-0@^S?jL>=9^+Ta?m)%Tz8x z@kw+lz-{XUY>vx%y!ABBV5M>A%z0n1-WgtKI%doKu0i#q0$Tla@7b{>MFp?mrZ@7RLcC{ew<~Dn9j-HbILfaH+y4tEl*~?~z>MEVHP?1(b6hkKLfqN=mTj zdoUNoECJ*-yi+0$`uWl@oW$vUwve)%=VcBS$Hjop{#ewd5xh(OAQQa(>FkPg>@Hjl zn6%>${ca+NDy_kaG$c%sD?Hom>_BR!7YB0FWDPHIV6(!3S8}(O%#{}*R~))%K))S< z1M7z{rMfkFw-X?Mt^3`{F6FbZpu|f~?FDw9fC9{0JR*7;yu|N=^9|53)de0=_c$*k zR&XZuUcOv9zWgT|P+5tQLVu^vD=Ukna510$E&PSlE4lPbfgxB3H5x0CSBL~{dGk~g zNpFJ+O#(T2jT4A}i;s@*%#r|Qu6vxk`QzIE0yvMSngCzG3^M^!<70Ti~Fgcn7|*wSB$D~wuM9F~t$uSg{&rmtAVaF9h+{@qht>~0CguxSfj zjD%765XM@R64YH1D;2&NGbQjz$OGPb2a!?)?wt~pwZT~=$ySuz-fT?}dE!a>BuaUM zMP72^JN6Jgh*JC|te4lHl!NNF1Q(PhvuWn|u5h;8vWDmK4haVdKnf#Z=L#B7O=-%O z{pQ5i4JXG*)%J6rjt||grg#p#y5&{a8z8m{2Uh|1PNCF5Q}ekMQta~jj*I@%?vO`f z1z+S28FGlbyn<+awBqf_7fvRy1H9jfTWDFd;yWP4q#M&fM|#!&@nS`ERA}5LuI3KI zu~pDDB;jq7RlFGIJ=lpIGMxt6S_nRf3cgby8acO(ys9hhq>K$TsJasC-9Ze9oAX6m z4*>_o)`PU}u<0FMy-xUMt852fz2+T$hF%o!JoL?rfxo{7&MbL)39>^6u=l@iQn-zR;r&owRNK3yb&sZg#scW3>;Wl{t zn!AU6@auFBUtrP}=NTNF%qdUb)c|u%&!$5)l%A|NxLO>~X&484`BOYw6{ob3lnwMl zoRTFqJ|*0A-G*;R>&3psp4?<`y67qj^b8Wx!p1?< zCEQ(zS*J^Q);>OXF^lgCm5bK}g`zFx5{`$ev{hV$q0M=Qt0<$t5H4)F&O&aA;2Dkz z+>feKNW4;(LK-Oka(4&|)1#{I->Jd=wq-1%K@F7p)loTcX$ zm9{+vAE2W9(P}!K3{q=UYWI5add0<;E^$y;u-YkvRpYBR&(?7t4dvDIqxjGdjC&u? zr^vZcI?WAMW6N(rswgzBE}kWje?oe8uJ_3UvSb8O zLe$y*%OiRHUhn%^WA|BSxdSa6t79W|dKscdL{1jj{rK0}IyK_&w%`tb52RUVJ;nrB zBk?rHZtvESy3smR{oTSot)i0>rZ!FjiGphg#UM0G;$$buzo@uTxsAI)S~7fLudu z9rOWw6*=o2c%&e5mu(0l){ru}OL*jsZ4TqD8ftloRr1x1PvX^|CH8@rZq%r)uC=fh zsSdi3pjKm}%L8^DHKuN>@_b?*TW9s-D2WY*%R@~p8DLka;!^y4{^yLrnq5j-omN1YmV)p{e{3(LqVFT)%A$2zkS z;G?VFk3G;>4Mc{`_xo8vGpG*lbOp__$0ciA=v zzf-rzaKSL9XL5RrNMOXfovKs4W@>eJ7gaCwQ57V~VMrR)4Bb1S=(Mbv+Krw6#6eFG zs3lJo){vUYEUE9fSe&4^RQylbhbM+*fI@v*;TBx(xo)w^(7U}>t z2!SRo)d8IfmOBdKpK({wcau33>kR(Rn-lb9+gxX2CQmFBRTD+xSQTo%bDuqPxp?AP zwpt%K=uS(uVZhk;AhblLHDoGs%9t%&8t0&9NoqsCP~_*tnv+>5+-&K{osV30bfkk$ zCaD`(yN?|-y_LF|?Oo)chOO0#6~B91NJFlJ({gr*7wgK8M^d_+d&Bs!wOU^Z?>t|$ zt@Y{GtZy?MTTJ(^bF~^|aTcx&c_gP*u+<<3Wp_|(>K~61HM?ChTsx{aS-9)mS8G1J zP^#wbuN>svRoyG?d1{>Rst$FL`aLw7rKt5RQsoCUu_q>`$>$Ek(o21Akp{uU>!a49 zm_F*KJhHKm+EyAU61RB`bQCnR?9I_Zzb0zl7~m|P-&dU}4R9FK`>8IH)X!ne9-xl4 zNPQfJW1#wuMe6M^-WjZZV5$1BZ{frZ?+=9oj^_%;)|*EPC#pk#2T4QKdQvY3H5#f$ zyZkd0>eMo`tQSog3c}t#)J$g=dpcW);avi=AR8mZO{8ng?OAg)@e z!hdJ)mYnvOf27w|(9L0N9I2kM1gtot;Vv^sFlD?)!VYzG(3?}$ zKGK-qY4=n$&7;@f=)kl-P?TW0h{u0XpHJ0TDdcZT|5V*A9Y0N-rm0<}<)@9+(;$Go zAD`07w6w-%j*dt1et4wJBVzg~Iy7DV)N+d2&rtncPXb=|{m@EHPT?6GHOzZ9QsOg{ ztdVEZT86vv@w?}pr0-{_DN^vsuV<MOPWjqcA zruA|dBbTZxT-bm}2YIYgD^<_y0Y~Vt*ut+OWA^iGw~&^cvHbuD9Y9ha;I~hX)YL)! zR;hK_fkqCZRcZ}ZrG z>H2rZ&R^6a?yfJ%EFKZRkYX~``WB+$nJD11kQQdDe=~a>2aVpP4rlWaxUfqd%Bq`z zMl@x&+L&!jaL~@(>YHVg6NK&dd-z9A{N(fxBO&3m?6CK>K#!hNl)yw<%rtaJzXo) z%-Ve~_~^TIjmjQXqy3)G6Pz8v&jfN zI;r+$!3cCYr9#F$v*V_Z>c{#`*Nj7_R6ApDP1Weo-)aiWo1#(p8TA`BV2WmBo>8q5 z8#GxnPM%ZyO43Blh`Xq^SJ~bVHDk&R)zeb(NP!(wK0Q2B5U%I+@IMjYEY$6uo!0%M z9%AD>9L9v3>NE?h^npf>TdIxCw1S0gY6g2&&OsA$)G2OH^6bKj%X#Ohom_6Kq0PD% ziA^C!M-|6&Iy|-)6n_0&{5I>3eH459jPE!Da&c^XdDCvZd0U-tsW9YUJM1^lRNgOs zI^gjwJGtFa8=}#MvRWUu3RrS?)ef>}12yBUtF{guLFhAg?JXCU{?u+f@zlCVY*tT= zlD)KP-9}&Jqw#PH&uJoTNl&+MTmPaoU+8a)6=`jY(k2w8)hSA=T9g)c(N00$T1&S5 zxt)f3YdhFW5J!ZMHjfQOV7ret+vV@4_5wQUqgAJ|zFIK*u|B>S+^cM$vB_79WUO*m zjV=Ue-?8Y8c4K;=<}a}Uodg0mvFLqv>K?2$X4`@E`N1gkc!!-Dg=jNa`b`n2NLNC% z2u4@!h8C(dVr*+0&1hX&TV-Jtk~QN_xVFTFJvnYS(xbE}3;W@FI~moqZmeb&@D{B# zVVjz1M#pIF3}b5=YerNJ4QrAG=k0{@4avKvR=|>%+sU_<)~D>D9rl9s)H$F7@{HEP zjAgYnUx^uO?Z(yw?UBX%mqqr1Bhf5cr|J7Vr8vMAS+M4AqPq?KO7`Lkd0V zp#9F~02jY@)Ec{92ohx?T!J+tucH=dVQaS8$-lGqK5JP~qx8<&A8ZK%?Yd}nSi3-t zrgzb9u`Y()c(1FbSy-zrcAC<InR!wi`cm(?(hX3}3BGmMI8;;zF@4XZvbKjUF5~ zD}S+5a0+JIf1;gQrDzjb-X=TkP0{{j-!8Dz;+`O<3E$Xhe@}2o-OYBg^+aJS0v^3U zclUm^Q+zKij2%Sajb2(fTZO>nURpIa7J;?Bv{=>>f%Cj@Wd!mO@RfeGaG37SnFwaBeK8tiG@8|VW%GlX#H57QFcQgs8x}? zMlR!XIVn68cZe{Takjq8>_&^h+SkCWrWqH8Xn64Tf}$CfhkO5MXyX}Mn`$=}yr(5F@2~LSdz-XfIUYIu!?o?h{cHoL+UfEr zZASAK13YY5Q~jeu3i=L+m>|5KrE9OR}96+5C(S&p!LFSbd7@ooA3}+cv;% ztQoD%x8MzFdqKB)0VKu@7QV1N7^c%V^7pF$r-gDK=gGPfj=(cws*SOspWWW zVfj$xl}O*!)lT=uLx8-4K+6f*&#W4{^mKyO+JE58|7xu*I)m2g)8`*UN}rx!r`{8_ z_X2A_U2q7jL$GxQDF~Nc;LkZ5%r_-q|_F{nt9@`mvq7CZltmkyoN~g8+TU zWNnns(R;7eIR|)2pJ@A-1kAZl(PAabNu%);t%1bkV^Or>upUNJ&g#k()8$~Bhi?z$ ztjFv*g%Ni6cxn z2_=$}&7`mrNs(rf74w%l4ZJ?+eLG#6rbUU&iGerUj{5Y{hMdQQKVo_T31KB14Y7Pl>xVKgsJp_1>+8OnKaf zCpSKF4^W0f-oOn}<`71b-uTNb{A47Y1{n8EUzDKL&w*YZ?a6gKJ^7|BF;UttN-k{}sv21a zPLK9z?WJ?qDRHk>E%cY`CV)2qU>U+DfQ1P0YMZaq?7dpoij5G@UBy#sB9xrgC>&u< zl4^>bUhLHpq}*#%W1m)|#g1zxJb%Dji?9jrTZH&l(jL$^OniBMQQUma$Nv#tfzu8)#GC_vmAZxxB;P6i1l*9*`E8OHImz}?h;ZkKvfh(&FFk_jrz=@n zpmbtC*|W56^?vVz+|<2*3r-9{%|a*@IFxloQ0DV;LW%&2?Vxnv>1!;@@8Cf&4H^5Ps`@K2~wSFduI@2 z^AW9^hxb_Cz(lNNFZIdM#@gwlBid}1J^;&;qY%UMFybReHFz%j+bQ;#c06u*6F|%8 zE}-qt8D&E2UznEr^W0%`pUo_TY-y~TGx|L{#T?hVvp@uF@wl>Q@ zt6_2WVj!z@wzX=B?7ZIS!%1xn+dI-uc_$$(*C6133Rd+yVA&_9wAQQ(Sgy&R+Hv*; z+V?mOd-Dz8G3vBdnX%68?9}OumcbGS+l|X-v|3VlwWFYvBx~Oj*2pW?l%POo^g7I; zzAoX`6mR{gYScN;?ffS&B+g&Z8U$56j5;uvK8QnpfHN|pwl&4w{jf?kFKT~C>!ax5 zMJ>(m(FQJsx&IU-XxrPEPnEp>rzqpAOIneWCUP$%fte8u8n$1hqgP=JA0CLAx~lbMOJLb_y9PUI(ms{G zxCV>9+&Vtv8DU3)Hx! z#jr9647jDWW4{3QdL9^xK;A7-%EkJ28g0{BFhXFfP20pCgD&39(XNzV9aUy(11K)s z55lZ?k6Il?{cmfJm|I=+D;LX&Q*}VWxmpnWwT|6bm&=zmXONV2M_Vr~6BCT59PVm! z1KY1CoaOo9{4|^`FjgSnWl5CL@SfJl;x#r-O!V~d7sv)W8c*M<8tM17`WBDzhDl8$ z{6K&27%KhwK>7^;Twyl zce)7MPF51_Ph1p5-#*rw*7~MCjI3rwvsv^1t2c<(!|bMYwv*2jZ4i@V?DX*yt(#{7 zG&=eX3B~hAwT6wt^X<*;)cmQ|RiY^R`lAPN~DRymf`DqQ% zCkV(9$r+Qv-?gQ>+Nruj3oGBTbb2SG4|HfZ*|Q&1qfLQ!*TQ__?Nr~QN3eTwb{b^S zzj3|xgIXpj{)X-C5If0|-k9BP3~ABJ>PvkkeU8VA?|J8Y$xrZW`zRQ?mX~?n$WG{O zq%n}`t{4SS@}7$x#(qa&o{K)mGX|3jtOx_d!?qLk;$;0c+wm>j{EA-Q!t5Y94uN{B zdKznk*iBX6!X_gx3KEVRH{%`f0GSdq0+>%`XKf}Rfwvx`UsfM z5q4_puK$lEhucXlr=RdGvqUY^KD{e{ODibu8-aLl{L=k$dPlZ+u}X*o5brv!irlv~7D4{}gsrQ;o$M9#8q!Bm6ziqOvQQ)p z@X~`>fuG%&>ZNzFxPKH?X1@?X77U#_`{|+N@YdbfwK6dKeRSU`J$*rQK2EE<9gkr1 zrqIf7$m8R|cup%nn#Y5S^s+g~Hw(1BG-W_ek#M+$CsQFq&xE)yD}f=N+y< zg>&84pCc3IK!0RXn6DmE_9szHZaF5(Xy>cPNfjzR0rVM}$!Yt>Xxt>NRK-r8`|AM} zo;(&A*6GW5-_jGl{UD0A`|BIa#q$g-1Jd@{zV?ALBR~&nF{V6PGBII$!CTGP&c|=7 z&gU>=J0G-dD!y=rFdwRI3=e~Ek38kD?%Vc8L6rr77L%=ZV|buG*JAa)jjZ(Te!S|B zxI(T3=@(gjbmC@^erd{kg=zs?Nl*uE-Y*@m|4KZnIG%IyVSZ^RDC+Aa^8fgc{9eWF zy_A;k6oZGoR{K z)lXSh;k#(V=5k$M&o)ekWfG}ZWAzbe6{*)`E(lDF)YrKDgc+mLsaku*)dl2rg#J#| z+PZCLJZuh>{&?z|RIx+?k~xWC_s#>Oj~@uWtfnuM21n7cYI?0I6D8FB47@ZQeZ~a7 zgLn?!3M*uvK0N;$dOyd_no zv@|G+I#$=CV~5Cez)~%)22Uqv6t*aru^VM$ z^q(y3d0xJ;HC9isu;tJ4jR!UKT@q_JUZu@7^gX{R)^e0e=j-b6 ztjq_()EFzBvC<_UHI&xW)620R0L`eUw`08#kn8L1BsVLq^;KhOYJI&GYxSOL9IVf2 zqRvS5>o3bz-O^BBE(MN!n|IZ@hx8`4S;Vm$5BCXgt90ZDj?ryMR9caL6TNrmZ{8B4 z$`&U-dfkRLI*0%J@gKWT9^RiIo1dPV)dhTtgvM`)^8H>|BeS4?;Mu|7idZgszKhk) zg>(6|r-|Ocx5B%;+Ft9-HK-=e?|8)IjZh7*rh24>We-=WX`=4O&LYq|Q6J9QA+R?Q zSQxHC2`1_ZtOf#c&45o0fs|%?63bNJU~8uLb$1`8mYFz!bB;PpC9OFyJNr$QW;EAB z*a!r^Z?3oV4tSG~tM9BoMZZ10!fgj0=9Ah&Px8ndDzZ|~aMAN2Qv0^h|6qB5Rk5W$ zjD3aO@)<38KL-p}X=9RJl{E&`b4hxt?}kAFTL;kiPXkSi$g78{G^Ul_H)f6ni?YZA zIS}FEh|na&bKt2Hk@tCI2snhF7a9y|x3|(4voQlzTHIP+z%C3>saCQ+ij6?v`()S< zi33#Qc(Oi?v0Tt+_x5^oOZ0ogK+qXudqRq!2T5hpQo~`rq-I*u?xH%{M;m zs!z9gR!YG{&cx9ZZj5s=Uo0<3k{-(YWaQ|Y(v`jo&kU3o)Jl52(5oFsRn zt4f`E=y!dyyNCjO>+j={*2uGf7jdNvIO7da_YTa$$~W{twgQ2jZ|G;(>ErpdC`C_U zhcD+FPg3;C7QY#r^RbR}!H9Fl0+FWR==^6s)##-kEBpR7E>z_MwWAERx8BRb)~(N{ zA$|1P6~4P=VrAq3{(Il{)Rs?c`{;pXzc)mcGPR=Ucpp8XowlCG`@#X2{w@~q+@S%5 zRt61nWfnIvC*^*Ybr1;Qq^L=0OXUPBmACv0ty}Q==A20-K1ym=-uP z-5r6&EtDkYc0J#?-a;{87dKOlrAbP*h1F=P8XvS)zLwbjMp$pORla1bW_{##PJt+CuC^%&w~%-kp@GjMc5J8VkEBpGqt>9vs_4dB|#P$|sLE zl!I)@#(cW)hSG;kh*POS3I_8eRyEG2C=cA(KcOledsB(Vc94osdMX*LYN%?=8K%tE z*cM-v{NGn5F%^M@@8edPUjVr8edVzW3-eZuePa|&X1*Q}-xHLTDx3Hn2K%Y9h+XBO>DINJ^cloCvNrCBH!I-J;6ge@a#PV{tx>o~7JkUszP?`EYQL$`#c21rGE`y@pDM;LbCu>6W_zO0^DmVF zJ{_L|LQAXX@8Oxwij7mBEA;MHN))S$LJPmbjku-H6yw-e%6tp^_>n?y&R61ES|5vk zU^f{Km9y5^E8{dAX9@~^WF~_HdS#+#Ju?M!eD_53QzYRJ=a>Bt6*@Z~)cZ9+dM;2t z3>9@Ts-mux>=Z+(Zx<+WZhjmTO1WnNz?B7xcfhR&3V0YO=)S+DHEOdst^(gB)3<&n@9DQ8Lfge~|ypL#D;7P#9p_~cFs z_rtdN1KRnG(uY#;hc(E^ryYxwHz{C|Qi1K9lTUGrFpEnN=(b21!Qv4>{uGZPx#$)A zs$pDQbj?+$!(t_ZRYPFxVx>I`L}2e?;C9<>gEKTY;{(NXe%=E0hjw2vQoY z1P8u5BcD=NDzR+h8~L<(r4q)D-2kpvDzz&gzrp8?>+@lnwfiCLPJYQ#W`4y95yM!H zf^n;q0M-$K4y%;r%pHNRRw<2G@brA+#3}_V^vr7tU0w}h-Fi(iT)$Pk6*k=#NtM?s zjaecBL)I$2n8yW$cCJ+}Fw3n-W7$v2K}&c77?jgtOl=;(ahyN-pCkOwUY;J|2ewXM zk69RfRx!4%SDGuXS5FE;a$kQ^F_g{92+8%mY?HJaWGggbi?Z1Dz;Uz4{NoCR7z(jE z&GKoRq0C@SFqzG^D#7gTh-MmDPymv6-WPiZcPB_7}{^*;->AdYpw7mi~{IIwe$ci-DROEJFM zseIT8hgG?;U?%TmWIF^N0kuP5P|VWm2|drt3t{#rH_A$y`ue-Xg`y; z|2J>Han#;O`uG@Bz@sQUICe~#5&p6TC=m_K3Ezn60+VE;BfF5|IX`>_QfxnVfmA*Y zHPCa5LanpGBfYjL#@pG-Q49MgJf9kz#Ke5LS)s2_g6}*K@I9rp!j)o$2A)!WV72S! z8?JvMz|uVOY0KZrAMBttpT?bms(9HUpPrskeq!wr=zk86dG0@}EMQ-@7qPAEuXg$5 ze_mO`Vh~tyS!qlK=aopduWde6y8yixkHC%#N)AhE19Rk}@(uejIiFfxQc_qa1Xl3C z)7JU)@{-cPWozqv+^#sMRH9y&LC~F$4v+)b-B$S|T~Ye8IS357qI6;P5HPNQw{9op zlYCWaSaw|!R!}fY%RZtF=agnHwt>hI9XfIqud&I9-M$J&_4COm-)qW1_EgEIkFO~g z+1S;J(fhg*p|YSbENO2mAF~e}c~o#)$;QK3dB(|H(Wl?v`|SJTac-r5|6vR;BIAEzsH=Ov`ED^kMql-ul5 zHK^Bo+>dT*2Eysje5D`T4g#ocSKg~oElp5*!lU`%AGCRIekA>7hdfy~KhnsvE6prE zcV;Q#JSYyw<1T^dOov$tbuEDW3!9}FD+`oPQmq###pz~xIDayJG(WQ>mIvU9i^#I3 zo`Q|W6EAQn7b_n?&B~G*Z*l)D71@G)j-}$=eWpgl`XDKun_%X7QZRz{1@B*fZu7#S zX-&bN9S-SPdj;iw9!Z;-noxPj%{(qt-E*gj5luH0NOzcilfpe9mA;>*keiG87HfyV zco(%2TYWu`mbj>6E4w~2tM2*KS(R&FYjM>npDI*aRtK|c2z(=}RoLWfd9+(rm&7)i z>g;JIX37oi2i2YO$rf|CijzJfNgNe91OL<*4a$SIfxfx%rZ>?W|OM!XAz$$^s%Of zu&SRZ#u81@E=iPBsbG=_aH7|#wgFO+Ta%vmqhQRf5YUiMb{a_^h=b_~<9^@IFt?D{Um5t*S zacH^N+MmmvQl5Q_s^;8%nMYxs>gwprV-@H2#A$>~e*v~8xaAIe14&MQ!KpC{J@8b+ zSv?38-}1OUP#z;2SzfKj9)GCN59M))amt5^5n4gb#p#&Qih=EkaEtWuC~A9C3!*MQ zY6Yp@2UM<}UXiBxsJ)p7MAT&;HHKXQM5`}OI(~&fKOSg_z)!wvU88GXJ&dHA?K;ho5Wq(rQ06oI(mMao6CXTROa?Phv z1N8Hjjz))p`Y*Dy^blEw=|4+%4;q_>=~Y~$ef#L_+xldw)jsO^j^0-~aD%qIqc@P| z+@MGAzz5Rw1~q+GPmyk3r-kq8Z7t2{`nx(wVS8xONK{L`MtLLk;ZlR$Jl>u*zNg1a zi?15j-_tu=q&8P5;RAi9wCghc@qs>0YIB(qM)CM1`eT&dS^8oJSx4*sgU0O0!#3jn z9K6Ma!$mKPPx|yh248%}ErPTA3H%1>UHQi1F z#=Osb43$I#KrxY}pBPpK=<@(D~uqV~D$5OWV1 zlLDvfiBhw5)Ni`}jkM+`dNEy3miqog&1YcB^}{rF28j2}AzCv-uNJcIP##uU-NQBf z59NOR$een727!u5+ZTsu?pJy>@}H>>3at`}6RpGHFn{Wl4ZQKYr+H^Uz&B3QqM7=` z@}55;!St=q;=c7ykI~XudZ@JX678I&$5#1*Pd(o*$h|J!s>wYJhWTG)5yS9HF6o!4 z!e{z>Qtl2){Y>9vi7*n=8#F$Tnrzh@g@47f zQ=Z^URo%mri-Frd=IJ}`K~-HLTDDcM8u-yD^e+vM@Lo3kL&8%8Cs9uDRJyWN_mZAh zrDt39{`~iiZJ5(%RcZe=AOOG5@H^#M)nZix**dB?p0jj9UI}Ls6bfvTslRvw51$rwC?{w_p0WFX`Uy>%@U^jEk3L(H?#`o1`*k1b^gOD+ zU+?2-D=LjWnGCrX(RcgxPM)_)C)X#Ev-Ek=KUHZ_mVQpURh7ma&|^JsmM(U10sVFW zwf`xd{Nn=hKBzaHQkA~^rw;1O zB3-LWXAbG>r0Z2_=3%|6bfYRiPgt$q>gjm}xwyCOUH%5TU%aRB(_-G$qK*nZIBOiI z8tB1e!}G}Vh;FNRrD~Z}nY=kFpu#aS!;hTAyl@BDF>)P6kbejf0ql+-`;x`n&d95>lg2c}4DoJ~)3BFaPRf?5p0C(3Z{&^wC85SSqS{ zJVM63oE@psjhouv7?$mY7Upg3kL;J>f;G}26dKA%>Oa^}@!Yw77NxO^9Xf$Y1qBJp@wzCkp)MLmZ~fG^9-7F9$mkf%?_xOvlC$`cWwQ^da%k*mqS`E}8Q=SjowYkP@o%(!y+P1Y{-?HENuKVbYN?HT@Y(t#xD;z!u+KY`Lt?Quh21fz9BvkC z^Oyqo?xps7+dawU^pmb14ULA*am~k5@bo3_=GI9rhf%Mz^=wa}N}DmCqAZBztW(rq zj^FY=DXo5`T~FA4q2&`6os*yy#3+@LbUSH3N;_@9%rhb8H(UOR+A=R&#UU#|Vc)ZS-I zK)o%rUkd(=b2`b{CoTP=-Ncak_m;NhRxm#=z0LhXI$W3LG2Bol!F!i6p6+2Ft+cNP z;8s6Z(U1KHeca9}dVXNJ)Pd#hGwJC*sNeDQ8cFe-%BGKvRdB^e)V__CJ=|1w4|-f~w{s6NbK~38iG$#DjD-8#%@#ns>rF^mOhEI40}lG7SI zKGs8VL0m&)dXPt=H-ix{&M03E(Vpp}7554g*APC#m=qENgK;6Yn!{tQIG;bGnsF zTP?ZO=8cC*8nZAQVnkN}zxSWVu$cqgnFN>zXxcn-SN5rV8 ztSXdjrJ}}Gp&|`jeQ{9i;L5dP=1Xa=oHZe555XdL&fa2wgYt@ukc_>s*PU}}<$6$K z_M4{9-bQ9-6`j#&oQ~f?4DNu)=-irBh?MGx!+Y?l3$8i4*0CJg*XMBc=7c%P)ujIb zC+c&F#B(b+G~lkX8#|UmaRY8U3+>8bxd+#aZH>T34{nSwH-N@q@oC-Hou#p!+%AU9 z{{h?@advjMEO6WtaGK02b+ybMiry|1eK!X}135dkX6Jc*rV!7wkbrSr=$rFw^0-p=;$!npu}c^-iX$n`N3$Go_eY;c%Tz(`o*%?)O~ zS}CRUgJz96KlWnFav0Q@8>3ZvRi36pEIeq;ZPP|MD0SsF8|M3PcJ@Qf(L_LVi=KbU zjZBQm?O_$2CqDfKj`?ss*{N;I!OoWpWFryy#+U1$4Wz1pKAUV<>Wf;|ta-Uq?u$Ky z>l2*xE%OqTnag~3}!du z&a)xG<l+s*o5Ec51EZ}zfpx%6Fg?gi0W5llNzqYIIGwBpth$M%!d99*N*u3`n? z{u{0BFCW0FE$7ROgOIk|2=qCXGMs!E4YVp zkJ$$`%YhB!+?kQ!8HW9~#8XMIKCBGmT9Vnz;bs`;LH;U%vM_Ew>0Saqbl`q;Fms{p zG?6ax@Cr3m;;i2SPlr~q zTp?oxOdQvnguaD-aa=djKNI%Haf8W{8Bi~tbFLknM@QS$9--LImR`=2XGqcU++l`s z1(LwM*KVz+)WPt6(&q#&k0C#$z`QP802!46$LMd{6zO#rZa71Vra)3Ru7WkUD~I0Q zv5ofDEr(s*xoK=O1bljM%h**oK%eQsb!9su;P5Rsk-chD4hz5K64{9e6o1S0CyjeS zTu<(d*7pHcM6O2s790|}ktDr4%t_?72gH_?;XyOB)6pnDD?4L|p2Fx+3uktEDqLA5 z*|D^Sag{XV9t^-cv?Qk+-eBamSv9B4s~GiYz6}@4rRKf3MDu#D-(fR8LN|i^7eZ8w zawbH+{SLPFoBH2H;Sx%3y=D9-RrNsQ&y4N%p*D%cT=PDmUz&cRCp(o{?LE& zv^&s!0C&ZG+Eto6bC2A}LArhDIg?}FV8l3&K{|X&r9y7=2Eqq&t*ov7RSRLE{63bg zYLvr*f!yJy&0bT&V>wP!ULiNaK=FLlDs`mrUR*4=$!_IpWPALT3uH+Bj&mULD|q)E z=MK_$oU`-RS6DiH01iu@<}o&UR>ediBh6!~8Gc0|PvPsvTD&TwM`j)2yJRk?{@(b? z-mRXOTvsi;A{GuLa{){YJWJ-^9iG=W`O*oiWydk8760_n6Z_ZvGQmYGqn;kRqmr; zj%Jvdr7QLwrbh#2a)e4)i?D(FD1~KT6|Y>@RC9Bb!m^EuUv9!rVfo)%v{XkAncyjm zZe|5f_qJ8}KDkF}K)$39QbXke6+jDAEp)WJSHWn$YYI1~aXw`FEnrf)79`>pv`*y$ zcxyF6pv>KZiK(2MZxd9;D*shkaalz*_f-jPDLOE_9Fk6^ay1yHDHNvR663&r(4}#H zUbFWj1AY+|pZ>J1N5v_(kI;Gwk5;^`C%kBu2keJ-)495_(ND_I?oaNllB_5x*dU+| z3K)(8ehalQ5t3-a$(wMN1i+fJrDANX#?gObP_& z87MK?1ZUY4qGoWeZJL|lnl!B@F>5Ur!$hdoz)WjI(-hXBfLagsR%NqgAY7ri-3FW+ z^7#Zp`3%m_a-sp}gt)f>jh3Zz4$wKB8(!znJ&FJ{?CE|^u5FedTuev%Y3Ckzm(Dqp z`Fp@BgBwGf_u!*LXkY!g8;)im{n&1Jn!(j4D|S=51Gr>zVOG9hwR*tcFea0WWPIU3 zCf6z5!G|`Yvhpoh7<96r`lzmNY(mFQs;d?*sun(9Equ6Ic-zhtNXRN>K8ICcbf5z&;*&^Kp^$=^edK9e*{n&rdb>7B0(B=OJ{k#c%`hUp|P zxFGWSI#|u+n$wzY_a=}NPi9eiy++19HG=QDCTw>#zSk6j^(}*)T z(Nx{KeR+iDg?f$Az#MZQ0_Jhfj0eQyPscjQYMki@AEb5lSe2hh1C_D(`=~+H#!b6l z6mE3;;|KcYado-h4B=e`(zSV_;i)GUxH!JQZBak zxCqr*M6V5@vuIy12+PpU=-v#DEaQG9%bLPe;080{@CdjCWK9zovz!Yi!4`P_Bs_HtbE;PM?7t;BI|P9R7t(NyRc2v1gWyXZG7PV~li-RQGJxA8!m z?TP@{vDy}hU69DXLZU;HO0QRir25C$2)kk~}&)pxK^ErHa+z;aOxz^-> zpOll&Y4PxdFD&^9=e|T=IQSFyQ@ukzO1*R`#1qnZSa}JShgPNS86OzEhWmjGx(H=! zxHwYxB1Esn-*Xpe*c(o)^9dmUY_4Vedr)^oo0LL1Bt zp5C;^14nXWT%^~cTjq}%!@ujfBr<1<)N=zjmyo5C7@tvY$CyzT_vwQDf-%9B})YyJ?3RFmV(stAks4W%wx6 z4z3<}?xd==RqDBuo5R?2+D+r)2jJh}C%EVlZCzUl-tXd~37H|a-OYJ3q+|&U-NS7r z2}{6oFE@>J%Y@v$TsvZ&DP7#lIWXkVbohH8S73i*H4YuIzGzfq`{J;nn~Vd9d~7wG z+Rrs5_CHCV_H%W#Bzum;9pk1lY`yVi(yZfLEJJ=?2*01;mXkUQrI9DOXBMPQDs(%~ zxz}6Hd_6`RZhm!n-Vo-W=Nh+KGDIo5T1RtepmOxPkZ)Sm>T3RbLp{A7UIy>Zb6XnC zHA7wY!fQo+&QJx=U}~1$gFHel=d8pQvFv#tv0{Q5oVdVc+c?a|=vik5CB68_#!IIhBa{XBG--EwU}l^Q}|ayu)oCh;qE5Wgx|<+t6;_@u9#S7!HCOT zJ=QL{4CY?uoXD`xu=z4K%Km&Bjfjg9>h4*KS%}N|BHx@?20mA~tGKU)i|Z?xp65(x zb(KqWzL<&nvd!>}fbx=B<<+?J4-FMGaR5#Fv06bxX`r%#w!{BaP~mWe8D|GfsrEH4 zQafY;jiIr72>q{dgSol=DZ?B2+A_5u1vAuw6!t5V?q25zV{^K1Sw$E+%INY+*(=2- zVBz)eTsOxy(=oG`{wK5Ygv2uFa|0K0f2P5z8@Rwbmj(xKaDI-5u@;T&^uf4phIc!! zErc&O&|mA(yG&YjlUrV+PEL39O!(3@8~(%m#@v=7?{lH%WMY{#=P{>YNX84i;Ll}~ z#xKC;DL0ngiY1)$l$*qk?OX;GPq{NLePwfWF#d^^PT$ANz+Y_RG>?h+SJPLPp8kQW z4C475bboS#$eX_*;V&-8^#SSxG6?9x>F$xJ!^2c~x)3k=^fl|HB|Oq31=HLDypJXoZiZ zImKKiLxc~&z2dU8{jp6@xJ3ahd&PxY-596jIgTE!OcI0MgYFfV?RlcJ+O&;QjLG06 zSX7La;vL~3f3TdPNqYxBzUGemzPyjfo;R`FgUv1dpHAQr^1P!U={PzVrw0`&p1u!h zZ@6!QCo4pHJ*X4Lpy%5A`zq1IJ_>~%L2ZaPCGaP~OCe~&@r2nME{vGnm)gDMW-=tL zNILzF8^e(MccAG9t~(i33^^arC%60#Z2o}r;;=h#`vd1oTHgWle{hVmxC71q!Cv{~ zHhxKfixJMgFgMF>mWlrO@)x*o$_*gix54%!*N?2w!K9D4^f_v54P9PL8La=v{lIo^ zUIqc5xY2C?E@k+c6CC%N$oK+2XCK@Q6(;9Xbh5A~nmJeT#5jy&wds%)U5IW_97OCo zSbV_OT0*H!vFIlFm2h@3!){V~2W3jJv?dA}%dW{#;(d+BX!<{@vqvZ<%0L5_HEf`=!C<=(uP0NVXN+V{>MQ^pWKgnE34`CHAN0;@A7B z@3vLZNBsx=x(PkrAHrD98a8Tp7q)eWGB~T@)6L}~b2At>n{$u`*5GR~Brg%h)#PpL zr(lo8!8Ebpt4;Kn&5&P{caA!Zx^A>^dwi!9M;*eVX`pflJBq_mbqjY(SA`p0w%8vS z3qC?y(uzjWEZ+p3Ecm{m?;25tLOg0B|Asnmd9WM4`Ij6WpCiZRyu*W3^uWY)EbDLK zNlfv2^bKQG%54YINN?m{`jtVk1@F!-MCq1VUhF*+Hd6I-evF$&-WsA zPJorbJF~mnltG}tcdxzPs48d$s)l$9A3Z2rz7Xq=JOfyT!Kc{d;nVmXPhK! z-ly(4Y%+`};7!CNagBtXELW434=b(tUUd^qX#pzj!E)eikR~@aiFe|l60g}RX_^gx zjv?FuDWWcK$&jrVpobmbuKgq|h|yhvH8a{Yd?*xK)<{(*uYoI!HL1&YGYms+Hils+ zAfOCaZg?&Jyt(o8H)fkzUKJ_C6$YY*+7G@S793n@6XLMo)MmcL5=4S9~RgS^V5HeUP@#&Jsx>H!XS z(pjU$U^w5AgKwmbX;=nUjroi0BBwIxQDeS8!&=rUgHT_730vw?Cf)JnWrmP4IOWeT zCWlr@-v;o5S(3RNjy2(TlWPE@oAN; zEQ8Eo-ihp93TuLSN6#TUu^gzgo_&|9fODb&W82$+@#}z}cj2#h>a&D)44h26Jh7bF zpYFB!|7H2Zdh8{5@qo_Cn%2mHi<;AT^+>%yj}}Ry#zVnkB+7mg<55;zd^hLsGxeJO zs6>%1z0T6RiD$7#U?eMBJT?2FCEt$RUj$8C@%Pw-AgrU-{2q37paLX5vB3nTUdEY-H}Mb0Vt2%SJbQJ9cvubtLwFnE`M;P6 zs_tK~4KqV<*ccB#h49Bh!`^?LyV{Bpk4Q8Ol&Yk&@{uxR%hj}@SD4gzE`wF= z_?G0~4REU+Dt2t`GHBMG??$%eLQZ?$-|p;7nl5hY;Y(|{gjJrIT;x**SK9N-wDK24 z==sqwDwOwUpSqX9PoaFv^x2go3N~5sLo8y*Seoo(S|s`|H!eD@<#8o6GDVyCKb7wSzvr>s`dU0OAjlV~go>RN3URRmhA0#}b{ zX#8|TrOZ;d|B*S%RA#AX8EgsT14yqNxEscAxBO`?4%lAN$-h&b+c_5&b>Jh(khyTT z10ThPc$Go@aI6jifo|cvpShD6u2x?c)^dRSa6XJQo&!(9d0%4w1JsJ(o3a;Yo5T51 zzAa=#@O?vrQNZzGlGq+Dh^e%Qq)Y;~Lf^U4|QV zUYGY)-~WHSyFn%lqu%QOhh7`$Cd+y`26+?(@2ob|yJ1xc_`QWLdAxNSM43j>Rz|T> zqwK9l*S#@_d|R^&7DV%%$c>fK<7mE{hTKkrW}UDN_N3D`s0&j&;p9Iht*Rlc;dv*l z-Uq3)HR?iK0w2Uab}WO81U``TDT93pe0}0o3bzyZF(hm;M0LjLV%?8$vojyevrni- zYMlCDhdHOjY#=t$m+_w+uZ%EuZSs}m4Q3omn9XMV7)0Lk@Hhh8+-T0M(@IYUY+ifCUmD2Z?XwQ+8QDqTVyoa_> z)jyn~TP=X#?tDXXJrVkL=lz%@$nDNI={)9z-srF0U#_R`8|K>fN;39Td_7<7sU4Bg z*ul2dF|Me-dcMXz5yT!SJQ3R9Pp30Fj8nOPTN9;MdWOq!AS&L7DXmZZ-<0OlSe0G* zU2RMWRn>X~$dK9N)m9uZ$)pt>tQ8=|wnR%Mn-g6|+uSX5;t$aI_9Ni?~9~ef(=?meIaYb4!8n_=D!E5jt;# z3XBk)6Vw=z5x3U}?Jz={jL@2N1*D0rFd`SLxD$n%JR@$75y~_|sYYm$0%c%~F-F{Q zBb01}`Wm603Y2j|EYx%{AmzY6;CM1`H(<*-tT8$}J;K(l(me{HItRs9b>&evt1%$G zHquS|bqw;TLjl!)G~weRcn}{~BOo1zELUj%4etZ{2Ju<^l=BA0cEu1nn7>N=21~Vv zV8pw#Ajz5ow*j$SsBwxxEd|twhX?%Oe1*}tXFzA;cy-nrK8DjAQKBb}Ix+PxP zGMyjHkia;omCm;zA7UXk9gWkE#V|abA5R9x!ozevgw&4(rwqh<6hrF_ejHi!4eZQ7 zeAjPOeD@c?W#WAOE=G#aq;1IRp!ZC^Gg%ZZ?VL#w8=k|_EJOrFNn$odg#QhWv-qMR z8~fub3XL7*(nKP*@zY#f#L+#2K(u82m|j!~aBrtsRw+RMpB6(Nu|_0nlm|9>JVwts zjlP&gSh*4N0uj}bN=&w)h(1eDh?Q+bf9N%v-=Ix6q;wK|)UC!GKHMt#uF@_Bf7q!+ zNSedvHV*Yx2U}&!nUz!aDD5q;dyKtN@g^%>DOdBv6Kc)n?X*2<&&t)#$o@imwjBz=gaGZ>Ka2HS8IRThu{7N#e z8RReH_dBho+LG7ZV{GLsw#rRRtZ;eed1)l@7EI&B3$)?|kBFSIh@8JEsiT64^RS4> zd7)hRLkEbB9C!hKTF!fTbN|C%s;H#GU#9S9on_=d&r|lgz^veXyw@rmGz}Ahxz(e| zDM}oddWL*-HO5lK%3Xa z{4Ao|2}{@WowZx`(stEs72)-IzFVz}jm*vDj#P>BG;i>B^#*>oPrF~S+VGiIx142VWBp47*5Uf98j< zq`4#9-OWEBEw{nJJ^Z?Q2OO{t1J`4IV%tUroecV2y$>r--wNaQqN~O}6>99`T}Wb< z)NmjFfgun8j=%7~+9%ajY>x>JtW03o!y6ntxiVhrRPS zTWz)?JP;GBIKnsN3KuA0vk#sSaFmZFi<}_sD4OHFownRKispDLM>NMhCVgd&dm^q- z(+2;l#&xg)QFA=N2zeW!21dwPfv9b5XT;SuLc9^u7@>;vdXKsJIzO!m*wFMvhEDu81|gzeQ(76De6lL=uy8zA2pMHds z1?XLBHdiVu;OjE%yb*e^KFbed-ACx98E5$;M2MJ+ea#UcD3M#wg@|)Fds)wg5$E`1 zvTF`pJI60{al+nO{1kJm>wq71F}Y}KF1rua!;JHMT{4w{W#{=+_eRd z6L%_7t?&+Tbe=HF9E*(_?riQ1O)lV)?zkCbT)>g0$t;Mw$RE)5UZc#dA`9FlKFP*` zs$dqL3OAd`DW}8bn%VdQKc7f;X2JDKd@~l3^GoxGoRNEaXm*`%XK_!@ zVz1IPfN9tH04^Crn6PcGUfO@1Ph;6pz4g%K7XLH(X&OAa#SbPera{zgzPn5yl)w3(*)cJCDeyTzj^XYP#fn%b-$b?9A@kGfO^H&AI*c0Y zQ)xK|(Q<|&y}b@I)&PM%I=(*pWeCdB@pi0vlpa>;_{MdlAs991uC7ekBtIq3$%H#P zTy1=l2{tcq3ED6dTE5^r1l8|I`P7Qk{ZNcgf#jx#%Ku_UqO*Qg??y}%qjObIzBw3k z_JZ%#e9B`ZWuc(l7bz5ftqM;;ITG=-8`|N%Ie&@mH%JfeFM0Rq)`PIo zc*RSE`>e7L4Tc%F3S>tb9#544^KcRc(P1I0&`tg^5z{f?Cnl-|1n^E54ESZ5$PF`!hG( zTxW9+37e5n^a>5_0n_2jE50Q=q=Oz>z2+U;oWSWyJ#(wO-1&bk{KH5$weYtgk1{j8 z9jKQUyypL@!4|dF!|acIs%2^~Y#zhA&bU&bXX{BXz0~~^-;*JG-@wii^wzz;1s!M6%M7%acD{n8dfva*K&dL9`R(9o6mRW_ zDATN^v@>Ka<6Avc==s6ofvPwU;}p|Vuxn~ydfh`0i^_1@W8gKoUWVgw_%-0mc}Ft& z8hDlS9r>TG;wVM87|&jnQp$0l=Tk4K7|->WVD%S%AlrYWepvJo$+*>>tT-T*z;%_#O+?%Snwgzg{3`(k#$yJ$1I*}C@PjT@9(9z1TVIt zqkb79v?KobAPpnfFuSB4jIfX+ZV#mAyzqq~pNrtRC>$i_MX;up@C%uG7kXFL z$@0*82CY6a_IoTKo2{lgJeRh(DHK+U!@u5eaFz+fjKqE0vDqoy@( z4Wa!id(_e6&1AvFuHYM5-i6)pm?_@beoM!vT<0%~q_wUty?%!jk}1%EPpK76b%B(l3L z^w7D1(23op)x)|5!dv!es2-Mh2pPm{vsBkp=wd-O<%4Te!CwMD;SsTimDHjzoGaez zgmw*fT+ODHkQXRiw%WHs>9^_^Xq~sNfbW9@uLjdpY~LriHpHWW=x=hvzk{eVs`f;z z?H8OLdbJQd;a-qX*Vb({wP5h!;$-E3G2P?}wvaSU1bc?O0SWWMvgE}Q@MtdFw-lGC z37(|cK>Mjy3&C4?%%+9l!bWNox!xpi8O&-SG$aETOFLT#OYnI6LI`h-^{{FoOlU2* zGm~IxYoQtQ2`;o2vdE1EkkCeG$t;4oZGVB znYzHY6ZViU^Wa!Jp)2{E3$@z|iLN{5vFaOf&g&3D??{oQ7g|;LBp_zg6D7A70$KBh zsAlbj!R#eFJv0av_L7!ANVh|U*^I-UxvW`C?y)_naTo(nYGX9#RfvRLXGOfx-$Cd^ zqH;iJCya;qa3PQ^m;>qILL1U`4*VJ}bSGw;p-zO*pLq%6BZL{k%b}{~So+&K!@m*2 zY>W9DSybjwF9_%?IK!4m!Haa61=k~mM#N?oltl{5T(W0X7GfGgriH*Z9|5~M3IXh6 z7d<@bh-KJfrHAM!A&<1kf;&;dWO8CABt#2!$;Fv4G+HQP9za+OW+)BT#RyGF%S^Z( zBg`jTGo&Hk2;Va7S{$KH#0st1WEH3fb>jppwmF8p<1is}1bW8_j_lu$2^ZJ`M+Nu}z9a}D+XX|&6v=84*wtC^hV;&YFS{4V zWDGT9ry)?ci_oCfa9kyzVvqC~Ajhb&MTgjs@?h8Qv~o8n5sAhsvouIKL(CnPa&|Yu#==ehR0ong=Ew#7}rhc z=G@Deu#%B?Nyf15^J940O>kv;0n=Sbb)b~0Yh!hA*rnI-HQSP;rQL-{hI~6odeB2~ zV3=>=)3?H0ZpO`0>L9dTKLO_U6hiAyoIq8^s+$#lk$xD$mR|Vf0la^Xf8x<&=+}J$ zyyz*sAq5ZNexeXb(jH3nlZ0Htj=`~LPj6J5?epPWZz0S&{0l8@svC9hJ;C$$^7t}v z>LY|$+s&s##W~A4WjIvOv=5Gkk$r>{!2IYh=>gw!0)GBTzkgaX?YYElqVGdKYu6o|M{M!um4VTmz=0})b7+#4a3 zhkQMZd)D5Zc@Pr{jg1KM|U&G|odK-yMV=^=gRJ z>j))QR3LQG$amJrcLJd^%Vwjz!w3y`Ou#zYk5KxVWmGM88X31Bq$a!$Axs#ftU^dl zc&U+Z0YbHvmd#OdSf(t5)+_R+8~LUn)K0;TGxCiJZD1_7!harR|#tgPWNX=ldkuLxtRh~COC=dA>Af(E3Ht?mR2Mj-D2w@u|pB5oiXIO-=jS=^GRAu9oAcRef#e9d5 zs{O?ZE}b$yGcrC#2(|hIj)X?s4TMyImyNhWgj9j25K?vKsDh*N4jB1%Bcx_<8$zlQ zZa_$tmp=-}KUIAIk=RWz@*;#(TrNV`O%ONBh)YKZwI6jk1tGP+Pe2H@ANfWZ`Gz8d z-55(e5FvH^=xyZdVdP6pFfzudj3_$X$QWW|Y=MxPa1cUjxAQUbc^dfSjrjF%oXe(v z4_!tJoyn?8uwk^&s=^XEs3{Dij;6_nZ%-H68t!6OaE~KArA{--~^1csOSGi znvOW+uZlFXCt##ouw|k!gRtL1qe((y-Om$Qvnk;*S%pkwt1p)GUC_HKZ#ye3orH@K zA?yt`Yj8V9Zt(^Rrw9#eTUKJwe#G^@*&FyWMewep?MBl|jPr0pyx<|vIxV%DDg-j* zMi&^7B1DlNy1*|fg0D}XF4Uxt#BKjytI0{u$Li^V<90O?Y2X)(z0~n zlZKp(g!!|CdL%ni+CEEgWl2^CxHwk`BW@j}S~@~ZPWb{zIEO%6yE+IJhPtC z9*c%co9-UVRYJ%1Am<8)oqYC`;^)uLL@%d)h&*$24L_-YFT%1Ga?o8kHcwb+wcway z>SE#WU2{3}nAA5<_?t9Zaij|EBTpjAjm0Sg&}3TT4Bsyl;_MqD+0q}W zmRaTKSH@d=n4Ii(Q@XMcmuI%`X(QvO4(MmF@If>bp($@JSuYXn2>GKK_%0KAk%P@( z?lNI48FUlMmI>czx9%^+XLvm`?I0e6O%8UIHJt77gtq?5>$K7RcGv>HThXvLTFGg z&mT^o9$V)EM--6;B^mfYE_fv9=GVnV_L-Cw&^hyE0OFmF{M#dP(yt;~8&-Sov@8MX?2kxdo7?_$`y8rM8^Oi=6Lx*pF# zAeZTq#{nfN9*if;lmcz5M%Vvnpr16*YkwVIzs^7p-7mGv7X}gXy$@_$BP5exA4$7b zm~2iS{sx&Fh2~__Z@_KB)#J;Jf)nYk1mZ}I-ym_5aGm_=0Y00BF67A>n6X*7ND3N2 z>=vO3Ine;pw+M~N{sP#s1-pkfTl%;~_>mz8+#zS1;74Y=!=Y^`aG1Mvdz+BYl4rg! zX(#rIUT$z`rw~KhI0L&2oA%jU@ZKeiw_WF?j4av8)(F1(fg{v>C)l$~Xh4QLNw;Aer4y5pJXpA6^p@p<5K4;&Q|a8I<_Rb1**LcP0A=?15D-|7F`sC$ua+FY%WM`^CH zGfFFRYepx3iq3f-ed-T$x)TN&2ZV)T^EM-e#gj+rAz7u&3_Ht%k!D-TB)j9dvctSQ zmPaTIxQ!N~keErqbp3*qpig+gCVn$?IVjkZrkkY^2ZeR!jF}`J73wqOVJ#`>SK%Q; zz6fA-T-Zc<3LqU9PLjjEka9w}P5knq%SqH|t9%$ue?P2-T>5)^HEca83?RNfz@0)D z&Yo1M-zlL1Lvp790`{=#v~ZK;rx*j@z>Na*TSjTnyhy^O%|_^BMW&pL*?Ixfry_`6O7rktmI#&U=0~4(io&< zDA*C0tp=9aS(VuDXMoM`!gr*GLF}U6F^$X9VejvP4Uwj+2^Ul3gz0L+9ybIR|JJCB z#)OaI9;{M79tzfwa8xC>)^r$qL->{)OoMYbFsZI-;CoYWuy2uOBI6$33Q=UZr$OJF z!fL6?_+wHb_!iC;uclG{&grYBRcBp6 zb)Pn029k`K{(xOV!G5n`4Vj)^iS4dn4Yd_jiEXD~lP#iK`AqawV*4Tn@3Y}ah%@%| zzO^*qHtG`F(VCUs-9>$5yY?uB`1?4z?Rq1vy)TsF$9%h%N~<0T=WA;1zc0o8t&tuU zxbuuY&pCe!$L)H?U>A<1w~~vqDi2mS7+wl}o(q!Y@L`73s6T&LDb$yRo-B(%nvBEY zhMBnaDU5EIJhZf;_{u`LH~n3T*$gz?(r; ztrPaLZ9A4q$uF?Ov#Yz6O5raB{2KJ2q*CBt3xBZbiKX!NwXmN(-?J1pzd^U&=mDir z`z<;i$DV?YZ-p3E3@w#@e2X2G-56CWIldPrFr?veSolG3X0P@sg*_hxJF90yXki}9 zmnW1~$XgM6=Y!Ca4Z)sV=O4kF9oV*1YWI(j&#>!ymBOQs!e#b4W?|PS!GXQisuV7K z5@H;OC(#;wpzDXepoQuU#Fp6H@;GGhFG0^{djtlQpl8z^ff*%&GygPEO;$e!b6+AX zV4t@ug_fo0eOwS)3K^xsZw}3SVjD!77e6%Fro@j^v?zuCdUT>T`O`yMtrzOygBI7| zP?<21F$ceLEdI5t@Ljp^d-S0v)G)O2{6+l@*+YNP64UH90OEE7V7tixIBzrno@)$% z-^wSD_OIYmC+7-5X-T%3>aQl{3LO4dctZAHhE<=1R%GgBxcymZPg-0CyDx%2+p|e2 zM1Mi=-+_nFszQ*s(2I%yu_ZpIQGo*>cc78@lB6Fl^1w&3{Hd$TGCN0k(lKNc;?P5c ze^vL!0R^J&jon6Qn-SVzgz^=LIz+&TTV#ZCjnFJ3ly0klG)jsADMxoGg)OYukiF_# z3fEZi9eXsk6wa87&Dr%nIP{x~FBtZKcPYH6A+|{GjXgy-41Ilub7HYHjCWQm!)<6! ziZ@rk8j9zy@gp8?m7C729O6wir!Y6%L${sASy+wkTuC?A;d78kmy4rOK0f|ykZ&X3 zrwDw=rZT~c(WUT9O|b!c)~gim)fAhgkEI;F=?R!22&wth6`=@|qb{ucy%){O8C@hj zpb$c%aMZPF*x{0WC}t{R@WPiHZt}@T+Nm16Px*Z#H|~!eC^!Kv2<2=c4k%CJ@Xy;Y z$h8m?*~5)W;cpA^sL%b5I3C=>Tx4VGVkfzXVO<*CJ*2y1&*k1BRPG!32F{e1v|<-F zy3Ja;1xpZcJO>0Vcyw`_HK(SS?Q@oojEp>*PTY{xjKET0+(didtV-6Zq&ibp zC8^1ns9Kj;J4Ja?q?_o(u*Dvw(ja#+zh=|aMwo#tx^=75qE^czFs!q|L<}v~n}*L~ z?hN5rRK;fAVhU+mAno=R&$6r+TMASBM0fVD`lYbSPi)FwA*FEL54-#%#30}R4gAG^ zWcO+*%U^V4$mmtl+5mAoLr$-NxFGQeGefG`M6_ktg-j{#V2a@k*}e=0H4{g*>bZ>I zgWr*8THpgiA1!}yL?}#s?3?Zswp7S9DALmZv*iz$(59g4P`70g7c8zL%v9;;7GiC} zt_doIldZ(pq~Ai=(^{O+O0$p(Zi+D@@Yt>84?2ul7~wI9b}N+N{A>ZG(~q7h`FQ?nj6X(AHQMDSFrWV4<+t8@~D|jEK@Gx(RP2$Cd=dC{3^^agj_)K!v+uc5IMxZ}%c;;X zL0m!l-jhxxi1@AWy0uCreP=P0@eTh{f}H?e1O_E(iebDjqjN!J$KMlfSgFdmEw_3E zgS(19l3AZY-&J&Up8K$*B6mOSPV~qxeIm0K>YDOGX8dOe>Lz-S=TD($H!+0iB`xhH z+Tlj?ZG50tbSL?brR&|rx8~&NCn!h~N7sq{gt_>&YA|o}3Br4c-b^=XR4;K5leFU> zq#vlt2nn-T19D%C_LTi%a_80K4N{outaGgyrT61*7gy*)X4pSdAkJ9+wrjh z3aE^&hGl0=m+FIDqicrvqi>hcbGkO#E!Sz%nsZ%YeqYf}J4X#}?Fzg4igii!DEO_f z_};nuza@C&Esnkjte$1VBhAVaO@GTNZ{Suxu?>lP4|V#Bjcgmd#~c-zeug5cvxo9B zQp=la>S_TCX+Smf3uO+~w@T^hQdpky%#c<8o3N+9*iL(;Ldogw1Ssh*PPBb`mD1nH z-Zd-dA}lpzT;g=B^_vnHc^RMWvAYU$28zy1JZu^$PIrAVjL^&PH!QuLpq2Fm?X*5O z@i4_7)L^r9m@0*RCpwXaZ-!7CD)E|S_dhKCJr7{Wa<)e4)=9Q^=2DuKXYLTl8YB)Q z5gW>vMu>)ZSgY6J;IN3f3GKPpQ-g6Yi}ifc)ltB@lpQt5Eh*ink zG6h^Fipk{Yw~#ead`yn_fI*YQ9=1b!P}VF1>z`EY+$nHnl9)hTdw}a?5zlCJhwGEY zwzk%II-(kDv&m3@iufHl)D0e_i1lFY6mcf`(iJ?Wio3Nrs2F&rwqsWqJ6+7h=W0bu z@@N7~O~DA?b)gZKkUgDY{50fk^H$+4O)%kII1YYGMP8c(Xq+Yj>E8(o(!`D0kFONo zeeslcnQNyp*aYZpJVRe-UyaMT$pbLh?>? z0~s766=jN@8Sc+0MF;#IM?uppaRnD)2)B%qZfA*Y@e5pgB%4{{YJ3OcFL0kLy1=#B z;(WVD;aHv71vo5WcCDN|l>D9#he>n9?Ih$+2|4THV^4q3DD&WK4%Qa?)EIxN^zH}o zs)odEgVPJee6q8ZG;oo)k0nKCCEKMUry)Dffcr|ZfwPUtn1CH$Z*2_grmuj3E5&AH zN}vQQ#l#w9=K_3i4~KzCyFt57%n}77uRQ5ItXLE=R*JeOF0a~!UBBu|e;*_n zd-$5O7|2UiPKH^??@oibUbN?X9;clc?+xr)gdYzUJ7~W-M&oFbc}QI^b}al?Z7QAIWRlr%9IjuyKWAf~ql* zVw!Ya66^UB%*y`?x9~B&a za^`C{cb-POp@HhMq?ew?DaGoo>prOja*t!rdD8&492ehlzoa7tzw-2|0jxhE25}C# z*g(0S?_W27hbP1Za^Re^)|}`G|WzL*L6dQM_9W zd6z{8cF1=nudg9(1}bM(szSnKO1#51N6B~yuIs8iME z>YA$!vRzR2sVkxj^Aw(35yR>qovDg6eduEVqAGLOdpU$(729iDFQiCK?nB7ED!Q4E zLp7=D_LUbKC(xMKD~CQh7KC6G*uOn{J6;>a@CTEV|Np@YS^gx5Y;!i0@xY8t(V=Xb^amcPAYFgEUW;S+qe zweP^GduUk&CQ%XM-aGL0o@ftwMPhCCO1~0VS0uV=a|csm$iy3Pp$N6<-Zbcb4_8Vp zhL^z9dtx*usK_|eQ;`vQo67JA8rl~}qa}2qmmAXU7M2JP{pUqlQDt9?%1-ww>90IS ziDvuu7LDcr3HL=ly$;5uir;!3{Vj;e!vniC;(*GCiX&9Bfr?f1FIyqW_xh;uh#C*; z^d#1mF-ZfflI-Jeu^Bd_aNQ6zj#ZBZK23U^N{m)s&DMR!oK=6|O?Ry_$(p){)#-{V z&%riT)c$zS5^#Tj4e~pLJP`knu{(ioqG}w!pG?YD)0qNgD`78-5LpW%guQ5iuxVMu zh%6NmA|Mt-j0C0ZkwvN(A+i=^iGWfJLO{UE8WpiBV%(rYfrzLjWeLpxd(-OU^PKm0 z&f9Z(K6mb&yUv}-B$>>#c&PBPSVHM;@U2|@r*A4-^Odh5v& zasLkq9ZfGkSK`n7LB5ITF-N@eV?qa|&m6Jm$AoUCqKPG<|gK;ukLlHUNy=$sE4%IJbbM#C!n{;$alS*%al7`D+V?FKr!OXCE1?Tw=%s{I zQ^VdR{?{)ha0k|Y=fzXE6W;M>T}c?F7(elU9ZvY#SZRYijB?lIgZ|yu=!j{>=n{YM zcP6fBLAMfrjXx45mop9J!8Hpb32jZwCzXhUkp!F4q(DR?3B66VN0f-P66Sl2$4kWc zl7u#<-Sp90lJKJGyQfS1)o=1DO;sarCmiK@wn5S4UcwGjGmezs-lGFegQA9>FwvCU zrsU0fYHhJjPjH!Lx0Va!m+=Sv|1i z%|bQH6gPnSdYrWe`oii~P&QyPKVike~iZG4HCs;F~KPZPMUs9h6N#&ZI|!{YPh zry(_nO*g42_a*j^O{$`1nH&fewVIfHDWQ^h)1=lk?R=(0>@ulo#_i&UNgZ5i`V+A+ zYqd=bj8ik~-M{6ZX&*Zz)%wr!<%Cux;!K=cV%pueLWVbYV(?p zZRMEDUBU`DZyqjh;xWxeNnN)3jSbanis?6+{%49hJ+W|;JT@mjnO3@wG!`=&tL>_d zCN@nTE_rR{0`0Th0ejXaaj3DHQfGebl^}MpeWF8NY@f&#E?k<=&iN!y<8Gq%SI*~( zK~2>AP3_8;2v-w&c6p;{(^PF#F|^TWD0-}1iEuPk=T#rU68G3XO&1de5SI7Zet4t* zW>a;C(X_cTFZ}nb4%4uvC8A<;wRghDJaJ6c#5dQ4>--~{tLKc(nl)zHekDKo;OBKk z$=#UJ1mra2$tmo2E(_I%s5L@cnXjZE)%E%EQLs`nX9pEN9eYiv8F#Ln#a zG$nTPp?}T{39uu7Ip^=W!c%feCqYVVVn1@MT*y7Uk(k9Jk^FzOR%ga3>)-T0 z*Iqqr98{OvjcZAVv=N8Kaai2KeGOim9=i#hLq4A`qujj}|4v^Z(}%`x-%k1z(trG~ z^zk2wSr4kc5*No}PiP}fP-;T8kNjUgsGc^)FI^s+U(a;zVclX=PiUXl+w#aW5lT`x$M-8Oo{ldLB#jXT%Qb!yU5vI_H&cosL^uyWTp&Wd5d(7 zZJnLMm;8pyFUW{%T8UWRUHx8Z{kxddL#?hXSSaT8pp4|5BG5x^(D1Q^rJWeKjTa=Q zn3*q*mORU;0T&=J^B>r~-mmvixv_=sJ<+z8I$qguO?Z2$^^^whi37dVVM?=WqI#Oz zs(y{8u~Q@7&i;M#8GB0o%g^u#SGfcAU+aH5O|554z8TMUeKo%sEiC=wp~uJ`PkmDK zOMHn~(_3v2cYt)!GFNLZe(S9!G(S>BPJ`cz_Qm|E=#2&?deL*NbNN^1-9I1HJwf)A zht=myS1Xl>oQKtLw`j%K{3%Leq80tl!sTb=c>GEz_Ga#?H~n>A>?ja>{!~Kc(t65a z(QH$R`1ldEX4OxNB7EfjsrLKOp>*8`B^%v7? z$tB{mzUrqukZ?smwoz}lIMGiXs1);vGrO9uY?~!A?Ysn3tXU!+>95+1Z;I^x>L_LS zEB=f9Rn=%5Ep7}@>m`i-XP3VG$_3G2pjtJVD7jnx{RZRl3v%Z0c4Aqff51TXiMYhS zo{Sy+94XOsEv?*;5&n-JQ+p`!J*P1}_&lX?C4bydb-zh@d$#}ZXh)AP4rlz<|;3S#HA(b#Clgc8|8xlmOUgl zJ>MNPNt}4GHjNc{VR?yF)oubJKcEMvi{g13r8z@R{dokfnbzrqQ z?PJY*vZ6Mu@r#6cL7CFt|M{EhY;OA9Qw&s5#Hn^xM;Wdp^I^&CxGuJ`}EUM(~lE0wnR##(V}qiR)-trbmk zRiO-6BM#-#mR)Q7T{o%KjFw6~;Qn&O-#JV)J6sgaXW`u&r3=63i^-c+eyx%(KHki0 z(8kSbva&X|(63U@m2xwbYf;``^#sA000a9(1OJ7s>f*R+OZKuN zZ=~ccf@5z2T}3bN6?1m5N8WD{zwS`SDj}ojyOWB_Efml0RGTQ9Y-0IN^#Svm*W>`m z1EbR>PVQ8Pn2oiKhN*33%!OppVi*1WC0RVVOHEVu?-Lt$sU4M9_lX~Nsf`;oG_ZS@ zRr~iFHra%t!SiD~bOI9YY(~Vtaxa5eb8Tfgr5xOPP2QH(aYV~F%qwf}%Hq?H zm^HmC`)_@u?l;yQt}*v}$F2~jXiw~E7-c6<)ts9D%zo9Um?lk)_+LG!UQkR6CP&0G zht&m2ol5>c4yzBEO!*TdqQ$3bj?%xJ|L~{kKE?F>_=uQwTwSMh-5~0pU@t5mv$lBQ z1Y7Hi^_=ahPbrhui|Z%Y*Bh@F51mw7DaGsj6Hcmjqq0Hu?>(h{K;SN45vW{A)5yR2 zGxf4bIs3MM-j^Icl#MIJ{xhmuY5t?IeWkWk&eY*{1Zs2BbXxcJSL(~g??kl%dRgZO z(fVt(lbBOL;!~3%VpoAWOX(1jvAvAnimb2I!OGh2#j&r|L8cqdSbCCZ`HebPdH2rH*y;-LI z1RgC^Uo#!=7ZKkUs7&_su-uY-G3bh#!h6GMSJZXJ#HK&VOVQick5Q-APoi;H zecUv1IKvoLTN;muU17Cd@?pv;JJ-MbE(Mi-vAVe2=)?ZIVRfQ0u^=RiN%$;AxuYR5 z;~K@>H#8y&uBqMQI}-mV-_0C1in_n67mWw~<*uuBP0HnOMdQEJ)m2>I$}fwDRm&o?S8O6@;Hy@>i? z;*Xp-@NLz}(udBRzAnZ^)Xhp#fly1-Oy%TPBCA9lqD=l>oGMW*N&SDP>NAr$0P+ zh}Xjep1^shg!y}4v1oBq?Qbfa8WAtwRKHOE{8HF&scV$JzlrcII#%QPh(G-{Cko2d z>;8UsINa9?2IawP_z`||cvuE|%kRU6CF}``h4<8E4Hw6f`R(x_c57Ek249Ff7)Y}4 z24r}V`Pqp7t9$Ch$^&BuG9BjR&-nLA-9X|l*N`ViWAFZbkxpFE+ww+xsxFb5i72x0hSWbG=nWTzyBLm@Ol&tO|K+tX_*mGyMmUYbP0+c6|~OHuAgdXh&^B-jc%8H>wbB4#|ZCATK;_k zdbtIi%B`R^O?Z{HIfJ^MzOengQ{rp|tx?LqqQ;S0b~Ah)61U~=Y0~PHs8>--zVF?? zBa%;vw2Im<+KWx)326S+*SJ)v-y;!!Y9;Nj3Z`lgMnv<W;OJh~aIuMy4Jq5&x{VT0@h`Q9dFz zw%3YHPnV1MS9Q=f8BL#6jre#S`vWoi-scAHk9C|$0JSG#F#D#u^D z!4~I|hS-A^?A0UwPlz^}j#rC_lJ45oghw|qQ^v}Nbk*s%N&MbJ+o1S&h!s6GyE1rz z_@yV!id!H$_0q;G6XuKDURnd?k@@0SFRh-^WWFfsrHxh|3;X+}X&aS2{=ZkIb){eSIX z&E(YofFwEfPcl|t+qJdI&ELfI{#vSXOf@x?%`rP6D?&25AkIm)40BgS5d3Z(O+{ zKRc7>H8p06rh~Q4@qLMsXB}r=63)TetXf0Yay(mbk++xK8UB87cDbH#7|FYzf|xRuw%Xcil{eIt0{gOr6nj+3dFThWbRquw~W?y^IREj zXfuXVN1qXQrR~r7?;or2M$&!9|9hs^)u?p4?Qbba2)z3xABI3N4F1bU(~BE!qL@Q7nGQ z(jHJAJtWN2wAM=fL!#?6Ev&TtSXifP%`2AwIJW7UiTWe88rpTI46iYU?kQS&WqN1<_-cmZV&=i(#|0)S7#k z(At7S@&*kYvHq@UwcWpQ7B9j|wO#&&v$cM4%JJ>un{4|2(kW4HuJ&HdB@<=7qhomvna6A3 zp$W3kx8*fTH0DrQw#{-iwL~P&(~=%YmWdoQPV=};c}2TBmZkImWO-U>f)*KT*FJMkTc+_8Gp|-)OT-YS`FVdb> zhJPxWEY=3pKKscH{qjjZ*DL*vLCx4nA{Sj2X`95-#k@8b4h0z(g)076+DcD9m1}S!%8uE$iM>_QLS@1ew=a>|LsLYtSc_+Pkcx?AYz| zVjUY+u6bvAHBkhX@z4mXXx5RVPi%@Vy<1vm=M`F)q*T_6mCQ>$6;r|o4+_r;ZA8*hKCLQ^ z{JYY$2gU6b8rLv;{qN*x1?7|$Z;2OHX^$(r_K43{Y3a(iJ)-7nUT}Nv5w_LZ{mS=4 z#51e4pR}VbOY5E?_qINL#1OAGLwRPP_`=HpB0DJJbJx4XGmyiR+dYT;6PyztW=i+jgi z-p$!*(e9n%)H+(RWvPg)V@G^`sd!+$_C$Qjs?wKm-~Hl^^;-Y<&)zOw9&*39yk2{x znyYjl(~gt@3gC{ir!l*zTBl%Q$BQyqFq{(#!F&}M;G@`xjd1~b}nju zVl9Ubmbb)~ON#of746>Fmeu`e4e{A2@^Q~sKa)SzN&ov(0#ng}S>l)XwTA6q`p-I- z=atCsSz;eKeNyx@376yKBp6DlY)-C`-_kt1Ms)muw=xA?#iS3k2dk~-z&vA`-1X(F zY3!UjyQbLpf!3>0FPZd=Op>SPu_P<61DvE@-B@<5qj-NeuZHb+YqhHV$&q-*lmAuF z_cg@W-CEmf+hx*Vne@-eaZU}fZMW7Y{>%BL)BEun;@92U()fyHV{Y(@S$SHM__M1^ zx54Sv{ODL~Qg2Jy@;d3_C+o{i`x76n@KeN3iWaXHf8}Wn;>VY*G-|b|yNCB0ZOfLM z|DA~=O+}gWYrd~9O8r1g*rQqEBkXx{H@UV-EZf5i+TvB>uRYqu@*COX7WWcglv8Uc zFWvCp{7~Zoo}aW7FYnd*DlfM5AKR;C8kJuX#RL1aA#J{?XW;pFbFLb->>8!VfW|K; zvI%ozAFpwg?CLR6DPg?Z_^92q|pO zj#+P>pY(@}rs5ZFi0uL1@UB=Pt_HM0N`oE#E(f#`M&)pA@%BM&tm3FG?nz6M#n_Lv zluDoSyl#2nOmng9V=Yaw-6y{JSbME@ace3`lZT7$5_?J-$BxXD^rFS@_+L1r#qrCG z$v4Ez!@PK0Tq0H;)>5^i)eX32>874lEB*C4->(+mAJ!UHnk)|hbGRjxsD4Bn=XZRf zCB?a0R*2}G`FH&v|LJA%L;jES|F3*w{(r7JxkAMM`!VeclPH)|ty)6b=qz4n%l^dR z=1Q$re=l)ABYyPv@%LJv?%!)C`0sOwq*VU%Cf+ylN&bHz+)bnhwPvFGXWE06XW!G^ z-T43buekQ)H5h~=q%|xr%OSixY-}vbeXcd?M^W7-SDDjk`?hU1Qo2XC{&A-Nm_gmf zWM#ZG<>|~`lPA59HFfl}ld{TMSMkZ4dc`Mh>Zga@)Q3OHZ&(K0)Nl2Vg@yQ>PaN9p zsZmRO_qoh}=l(^@KDFU)Qh|Lw-kbfuf&2~Z>vDM^ z|HspA>qQ;^@Bam)5AShX|GE2ZeF6V+-QnH-@AdzWvJ(EOq$ZhHj5a3uM}4g=xUagQ z+8wPFWTpE?$F#jx^vzg z{fX?-f7|>!dT8N)mYpoiw45?!IFEn(;?n=-DF6R=IpbgP|6V6|$sIko^p1YO6Z>zf z+utHH|78(+=E~A=v~-17eC`tewu{=h3iZc+7u5%aqWZ4yqxw3+*9lJ#wrH#CZnxZ4 zVsuASb^pWHG^Lz-FNfxDcuU~vctbBB9GZDU&)RJ;gwgti!EpTL8@gkR!JxWs=-Hgm zj>9<4pva2uu(a1gNp zU3e3HSY`GNJ&4tKl?>y9XdY)UJcCx;fOb5APCWhE4c&vo=8zw2WRo8|&7)#mf|h3t zh68BBUA$g6pJ661wA@Jb;`tq7P1zE#{(;v$lL}goT*??hUsd zH_2caLqrPB!!+E5nOK0?cn@>2184F1cnAxzkhcYKlMRMbymF-A5Fhz*GG<~9X5(?p z#aozCco5StaVG^}C(Oo?n2R$oA2(wmp2xW74TgrCucx3L z({KuA;wsF>e9Xln%tz&Y@?%psfjB;j7>+6U1*T!z2NZw{F&n?aTuk0g0XP;5(T8z- z@NolEuxlRq@g>Z}dzg(c>>)p1!F+7{A^Fig%})V*CKJXKd~Ywa7aM-WY)63}H1A`# z!Z{ek;~2(n``JsT84S14iq8kgk45OjjR(k&1?a=I2g#48F+7d^zxT%!z-P5*(29>7 zq5uq_6Wbl80NjQ?eD??iU|l{|2;<{ue$ilf6Rmg}?f6JO`7wYVyoo+c{gnJT1;a10 z|9?clJi}lpK`UC1QUFdwC(cC=u0@EL)mnM{fkH}q6|3^TCmNe-!a0&{TADGESyh;4_Bex%};85vB)em|2B z*PiD{icem+p?lGbQ4Z||XyN?gceG*8LiT?Lfu{+$a6fvn?XMi!(1sz*#wcD#OLv3e z;foZ2GthzKFOeUoqZb!o09RoMKfov+LQ4-eHQKQ768pb{z@J38&`?AHn2rIwhap^l znF28F3I+7!$b~k1^(qa(hGFt!YxH7I3}6O^a12H<3oX4k&Y%rfhS~oe1TGTc!t3b8 zuD?+L4#yC_g;DIw7h9GzgTaM1T!IcfjoH}jcjgEl!UD8kCm-gbr8mbHwBcEFU|;ti zR7_ysUsQ~b6;mNjxWTr4*kBlRn{A8N?yzlfLzFpzL+>&tF#aBM0xRjv3H%Y`9x)is z86$cM#wig!4bw0avoRZwU@p4j_=YNWr$5F+9rM)3?<`f}o2kpi#) z9e5pGXs$#7n1TW9jv;hl6lb8NADaekn2QeFi!LlcFJ8w$KR5e(JOvPuj#11+i=A^| zw4oOrxC>o)1icu>04n#9AM0Zj+oGjE4MH0(KnLcb3y-50Ll|%qxJe*{NoESbW@s6} zEJhoSLDmN^b~D)1s!PC$d4`2i-WX?TMrPJN<;{= zF^X%@@+d=&Hav+AR1+xxQ_+i$VE~`Q5PC3*o6+(ZCmfZ@kM+@kozR7kqZePO?4|$$ zZx9heA4c&MS~55;pbc-L11nac0Q6!m7GgfeSB>a}n2d2l42Bi8*n98;v||vRcojWZ zKAF7-Q``iC1O{Ljv(P-0mtC~thiJ#s=)^F3a7Jwkz+x=Gj+TgCjQ#6G^rT@1!z@h2 zH!uTtU>2Ul9K48m=vL}d0Do=s~s5YYGkF)gdFt=)o-X;Q|ak!T!I6K$wUEG;`HWFreUOaUgv){Q(T;^U9plEb+hPiK?aZqk4#G?vgSq%B=A#!2 z@k0!}OanW+nY{$g6A{HIT3k#T8x6o_=)k_{LI-+r76xz`hVTQ7VgN0#7z{_zhG)@% z@m!5j_~!ll<5OgXp#q2oo5E=GnZ+pcTDn$CK#9_+Au%S?I%g7{u!sMkS5> zuQFn2#lC3AQRu{(=s_>~@FWIbW&e-wO#wtKLGx=28CtR7!xVr{bmE8T!2?RODl$Ot9XwZt*VHAK4 zbmDaM;PBxTfDpm{z=w8z=)@Z=LT97E{BI0usst78DWVhG2fJ4#>`0m}l; zP|$`)(1Ag8;T7~^(vuW`=@`N>7{w`QS;#g<8?HnL9zhotpcluDBtOo^5WX>z{Xa_J zAQ6^Dyvm^scRj`ai+_%$=NLDJo}(3m*cHP#4$X_1J7~pyXve-|89AJZ9&}`qA17fD zmth$9Wx6TALyw+j=x_pN;5y90PcaA2VjeCVN6YabM)4wAUgtoCHmvdtJx2?=uq%4e zjscv2AomhVY zJ;%1_!+99QZ5YNPG%sWS|C4}~Kosp*ep@I(QUE&8yqt8jVm8|G zI6Cnh1a#*3KrCbR!_CNqx2415K%a3$v8dzgnobQch~ zNT3+2FQI_97&1)7bj-jk%)-5xgFj*(W-n!kvGp?YV^2(Fn>#QAr(+f#M=zeo0M1*^ zCPd$I_J4Vq@KGYtu+tmNezxs+Ol6zBg;|(~mes6>HY`F1#;;&ELkoJbCkD`gA#9t& zw#PKIc$utd!$s)8^RdZAAWB3oX1vLe;v@{?QA~P=-49doHfCVbTQm$?Vh*Nb9!|gl z%*J9|gGp-`IZVZKn1P9c{Mgn_Acw$I%tH?r;0`Rt)Rh#lme+Ai#VpLgeVB#$n1eSl z54*liejJ3w7{#P@jL<6bV+YK@L70W^2?TNo6kr}+!~!&|rT|RFr1dleQ?Vyz;AwQ> zY%e2+Ud+d%ScnzZGMP6}AzHCJ+A#~AxCT8N*#G4Zw0uO^)-m+>Fotm%nm5uzw4!r8 z1>kga;%xNbBJ`mbgSZ33n7V<6=Q8wYL)%8?79K(mokFux0xZw^O%G2?=s?U0?h~%;KNvq zE=+n?ehSWz<4MfGvzUb!F$WX3PyjZ^0(4?A&cmcF>~@%n=P?5tZ6!ap#~e&YcOC)5 zHg*?OF^X2SY-QV_4Tqxx$Dj+H=*8(6z*QK+(-_5bXxYY*aXb0ZhFNI#F+ym0k3;=- z4nXg*|62$|iAY87PAWjxE?S7b-3&3>^O#&1+DAngI79(H8j?>%7(7aTbeyE2=)x@Y zpa*@JivbK^5DU=ynVW*%qXB1l(Lrkg1z_M?GGYjG(Q}pt$n>9Be+Ly`;DCjmt5k&H zYpf?NW)q+#LU}vsc?sJdgZC(xo`=wbVa%1wZbOM)Kp={RtmrV7=ur${(k}UFSBah} z<%hXG3{+)(3{@ljee$7I%I|Mo7~qGyIT%ErTyDhr7{V|{(fk1&;MeD==nfOeAP`L} z(X-LQT`Rok!T@@PkYP6&CYI<9^r2HW5VK{^(2HTrlRigD|gw+MDrR(3cc%Sz=!Prfm|{Y5#32k{kWSJqWu^vp!qyKLEBXd z*h>$>^bj4_iANWD=&1*D(Tf4}VGbETJO*>v|$0-(H$n> zAP{$eO@MZEVJ3Reg>YEP{tc>>Pa8dP_&}ccvDY9 z7dkLxyy@0G1RTmuJ&aMb9HLIKEQ1*dM%-;9 zP(Z+ixpL?+AA?*wlEV;l6LZ}shk6JFVQ>V>A;u&|z{<5Isp!HC3}P1Axemp`$OK2y zQ1pyqgfNQcV{~*hBXo@Y-$Njc2xlf4(K?X^po?3ZCmp8&XhlmF>!Al77?{BjqV*+4 z5WO=QK`FP!56bk}^cZc~G~@*N=aC;>3#bRZ3z-uq+{|hMxkQ8)G0Ef#i)kr3UZ;g8 ziN}y^IcBmPSi&+|ma-mt(R_-A2u2D+-!eiN#VC5t(vcwLen$h)dydJ9KFo0w2oUh0 z{TiDBt=Gwjw!dh=XH;~9S&mV3qO<)iJ%Fw*w{+X*6oeV*;qk{VDNktj%6QDf5Km519-A;q;=t2j&a|l>@*mb^4K!orY?!2WZeMteBiYka1s@w>tz~*_E&G|#pvYW_Gw=+2j0Bp)^i91-=at8TTcN6RJenNpaWg# z#Hd_8c1zFvnjyrrFIXQP7{DwHq6b5mi(w346bsON{FWX@3&zQg9CzQ+1hI0xJ5J^slK0?Px<6W}w$iz)8S| z*%(4E+P`6&VHhoES^k!c=)es0pc8$VjREvx81pcSLA0D@)1eKc=)k1!XaG9U9U$N$ z5JfLq&oM;k!=!Wc98)pyJr$uV#CmA{iS?wv(7^9$&;=TVj*Ij-#E4#^!RRYulVK3E z(Q<`NBGYfO{5AW(i-4DH>cKp@Z83;GEW`jtF^EauFhXd>Fs5M?9caGACO`{%(2BWe z!vNZ`038@cCtAN_|Mw6`lRd@&J+R%TV%Z}M{6NK6fKjykNctT{1YKxHOO&2qRA(#0b^=tOrR0Z*mddK7(_^a}-|6~kyDK8mSm zj=!yEoTor^VgPf{dEae4h%PL|Aet}GAWXq9+R$kxzl=wxj5ptQ>)8Zs3Ac40+A*V$ z9#*Dj7{It+$$%D&Vm^ke(x8hpD2X1T6*JL}E_7l5Js3hCMlpz%OXNov`f9pw>s|uR zTDSE)v?kNyA}Zoy#V`iBfHCDV4QxZh(8cwHKJ;N2gFR`;6&jqurokWvG4M1MT_xW* zdXAQ7ZtDdY#iTIHJbNJ(!)^i&0>S5LfJ~T5j~IF@W}*#UXvZ9Mpbwpxj~)!67mLw{ zX1QrFMQ#eTVF>f(kYfm=Sd4D-3uIuZEtrBTz-WD*#y?vWI)ecdccrd z=Fu=Y)R@JP2IezzXkNfb{!WF9SRY-O^atfEW-_C7*=;==ZRkY@7RYZtoCLxQy$j=h zqaw7R7gN!Pb_`%92GNBf%)v1FFpBwTUd|As1&h&&=4(`pDQHI%J2a7R;g$z{~qZmcUpRC8TQ1V!|Vi0YZM7$lX=)^SipbNv8gRYg#CA6<%#AW;{ z_Wz{6h*-^#pc5VFK^F$SWI)S1^hCyETroquiyolseHwrPEW{8-(eV+R>;~!RW!Zyy z=)+9n1N+!rF|?2U-$%f^pUHqxEJibTvo}ZR;Q@MrKFmVb5qerefnTt#S+<;|K$flO zlJS^}J`Bs{bIhTeq<_!)EZak@&$0tuXm|fe0|@xA0E1|`MMXc+5SG0^(-W2hn2Ek$ zr~spwkKXfCgdxnlO~DsvAcik9VrafXIcU2|hwhN?Hzpz4t}){1_Wi|B5b)iiMXVUW z91Nll!(1vj|%z+lPl_MW| z(TVo*cl2y@qDN={H^<-6^K}Zs5C#&c&|owK(Td(Gcl1p3p$qL*@94Q0#vq!xh`bQ3 z7?tU0H4rD0pYZxc-+4f=y`= zhA|Dz&FDE=(S>&Oq7&`qDL|&9`F=)5E@M81u@G%7sIUV0(2CIqmAs^Eu!5}>lcpjow50*kc5E|rwP!>y*zt~TuEZR8h!H?*XBvi48wH`O3!4NzeMyg} zq5YU-Xt9%yHVmS@KbwU59GHbpHvta;7v`b|1L(y}GK4XFAIk$60W%e19tH+7glHZ_ z!xJbFt!R0a5yI$WG!R`Gl!qQP%W^OUeP~0sc_=L*U_lSsFc%#dKo=IE7tOL_Ou-PQ zVH6!`8AgR@!#I_m4rj>G_c#s00A^wkUFaOaTu_Z}Lx6x!CSX2>Foa<&mMc0ah}&M- zM^X?vF%!K{k&eF6^dymdV`wNn4P#i20Orc{u?#&rGRen!UUXq#934z_6EU71ar-Uj zWVSi_(1TI*p=&AyqZh+6BgU~D!eR`gxeCiKP!2{hO)gKT9J!3SXqiPr(1C>*WbT>W zRhdluhQpOa174@#Y7F5L3PSTz3c`@II`PZdROo$!0x`ORhRNkO*#tFc_*+znLG)o5 z^C>?ds1U;#mG!M;M5)h)?o#!~zUs7|mWf zK!dE9f_Ajf5D(fggoPMbLp*m$3$9`RPbCm0!j4hQM9W%61a0U=ALgNbJwqtdH_#Id zqqPFq`<$5th-M&o-|^IY;R*n%yVpApsYL z(2JJ36o59goMhXgH%LJkz|?v)Aj-C7eal@&0&SQ}x-%}S7t8f9iS^9oqIv;ZF^mq3 ztIu-zsBT5Kmp~=~Tg9mEVFf$p$`vtyPPCKm!5s8qA%-xDVN7a3gV2iRN>M!xt>{2I z=AuuH>OpjAQ9VzVhr#;n|6T$v5~Ap6NCAmaJqvBgQ9U2M^{Ai`1)vp!XvZ)*G1MTc zXUq78G>CFSm_)uXS}}@gXl_KstY^U>TCuQ^n-&s?OQEOe#Q^4^IfWI`f`w?uC^|8z zF%_T<&5da|Mw>)+`6F9%Q{rVl%s?wT(T3S*$6VGA+)sIK0zm>vO=vl$VHh1~Zq7)c z6?0@f`eb|y8ipR^A-e|e15}83z(TaPVMNGh$1pn4o!yKA2zW7w zd1&s;h}=(wPceBYD2ib;k0PFQ3tG^IspvpEdNC6Nm_hy^I%PQ+K<5}5gf7fQ@0cjx z|23zeu@rz_%tYrj8iFniv!Vy%SoUEM16YVbjA9g%TF}7hj2v1qOD?~{NT7EiJx3p= zVGs+^ve-=l1ni6Hk(Cuzu>yuxQvin1g8?rM!r(f3+!8mD-U_!cNzuGDs)x|Bjopv+ ztZ06Kaxn!RXu|+HFo;|vWht^LSGW1{+ z%|{vXHuMaw7{E029HWQm!z>w(9&~+11JV0A9mLRAbgYeh{pUxDscor%A1P*_6SL5R zAq@XOgW6HiB??B%6&i$2p8Z#hfnr7^mG}q+qYDerUc!jAXT6&=5N)?8AAOiDm+!EC zd-nejfiMx~yHwPH3ek$*drV3Up;Im^clCU9mcOf~K1juwfl+j!r6TEQt#Mbkbfh6Q z@9K8+*1D^E=!hlxuAYZpOrwE;+IP7$lYpnrT|JkKAt@Qc7(jE~yLt$n4Jhy-(wpAZ zGcnxquI`hzqC)9|clEeVl+%&*Fl3`*G(=v#@DWjfQM8d@c2Y1}F$?XOgHFst7X~r>96j$& z`XnkuCuX5_G8N1CDU>VYF^sO~S-%JMO{08tZsr~mxdg)8Ga;81q8LESRto6J5WRPo z9~3cUJ1GFIyIAhUGUj6#3o-CMJx?P)4{R)?JjYRb$ofu9MUPx&J?AM#0=?*x`P~GZ zG9zZAbYK9TSb(l83~@T^qXh$)iXn8O z?JAoR9T-iQum4r<=^1?(Qgoud>ODOV9T=ryPRt;KN5-Qs>7E`!yXBtlVZAU0WxhK1 z^svl_aeZkB+R<6}9={tx>pgxiM11FadJ1}N_jGeVHw6+%=|=-F4WsBl2S3mEp$mf; z!a@x8pkZk1b&uZ(QP40NB7Ks03}6<9FoaP|>d&Sfdr!BbT~OZu%14`6rMUM#)Bh>#w>dQZ=m7T?ngdfH&(tLu6u+R*JHU?-4+4)mc1^D%%S3}G>vxetZ;QP#&43}Xg5>*{(T z+Un{2{D%CP^cc(ab$)(Be#}Hy1L{F%3gu(8iSE|J1iV&VPt9OxAD}>tw$k}|4Gro_ z#pvu$%ZIQ$NatrXRPY21Lo-iWEk@UqG-xOd=H~PH(hW3V7(M-f^)Y%#=XXNHAK^|Z zq&xB%8T93+>bh5E_>_#S7{n0Tk5Vv(&^(+59-{&@2X#GbxEPt5*s%PrTgCdIo?;$h zWo53|mYP^s*~P7_q}y}F73q(;BECKTk}H}^YitsIrIR*^3DV)4#3JeJO=6ogxJjIp zDx1X>Y0_p9-vJ9Zi{{cZn?+w~{$?>j`r&4=NV;RQ*e3OE7AK`k$S<8u{s(aq`K1o> zOS8!@O@3D_lD_k<*e0#NMVypw+#;?>>ueSA9dXT8(Ol};D*8%iZ50!wQ?`ml(ve%m zHtC?P;-s|aR&hm|O8$p%4Ed!zO|P$XCi$gVCEloiZpAxi0_O?w~OY|>N`Z=&WZQezq`7D zp>}O^g^J6Jd`@QIDq{X8@3^7YU^(vlDq=9^NelLibJC;x#ck=m{UW(5 z#sx$tX?#G8kai4+nRwsF{LcFm>WMq2iH%(uyhjg+lX8W;1LBG_ctFH=!!rj&b7}qo z(O3G(0Wm>(@PJq(-FHB2lkOnDbjm?-rOf#5EISX1=F;&8MPKQtgJOczaZoIh4nHWi zNizEx! zmKRAa@Cm)0b|G===Vkb0X-S?(((eS$QJ`lX5Fm&TD_dXMpw-e&yLFv9pr|7856 zHyJ-^G2-`zA-|OJwn=A_U+N^kbR7B9 zk$lai%g8TXN`C1=@=Gayn^e{>JwSeGfc$;%L-I@MZ(r$7@=KX-i=ip!7ZQqR@ z(n`24H$2e(y+ii>&kkuPoq6*?Uv|i+^2IsoQ%2^C+tT6rBDo(9%NL!bkLHUJ(n0z1 zfKXQ%kuO$BN9Bus(y`>1jv>F)L4G?@PA6$T`R&wG^HVvl$>nV|`KI7gv2PGz2jMnH z2>8ok5PCtd^F{ zHTD!Fvt$x}qbz$i;d4ht{6OM!36DP}nh&JnAmJ;qa9uHFU}9YPVj`T!#Z0+kQf+>D za6+t-;Z(wJosc7(Tt0(v&Ix%~tX+=ayc4B^kwbXq32}QM?U{6XG2H`5F#5uW67U2(1$pcn$`5eN&Q{uKPW5cPka*5kH`RBT?BFCcvO zl<4$W=_;qGX#>H!v9)KuRvM(9eUHkriKZ>F;UKt4r zC6|>kosy>$TaQgb5s$HQD&b*dlyfSB@KEAqc?1Vh^pMhEe+Fc5Y0yr||BtcnfvciQ z-@jb07ea!$MTLNfNQg*^Mu>)rMu> zVqF$pV>dD)Q%XuAQYyBLsMwZ_|6HBl^UitadhdnZ&u=~-eV+Gu-}7hAoO9;P++pT+ zNt2LsnxwZQXQCnadzVvUDDdmUQg-vs}SZVq*HpJiW4^ufR5biew5Q~G=L z^wSM~q4*mP1dLYzEtX>7_ihn8)?id+f*)uR2iIUH3c<}Eij&ZjD#5cq>{lOmDrAdZ zh@lbwMyvncSak7?ZyU`_?!__5aG!gIm5BjK|~q||$ydx?>9 zraVjFzwiky`LWmoKhL}we22f*)66~Kbi}~Uc#Y&9so-n<`^Agv zlu5q17^Tbn`_-dV+mHLi+v}969u`;Ff@X z^#;e-4O&*(61ovnL@@jr@SC3bNd(@bOf~l*QDT5tyG{uXT?D7Q;{Y&TvR5Q#I^NI| zDE9tJ2@D6F7TB*wJC^gHEQjip5C4sUyt8F6Rt1W)=}LgL7W_^m^l&W0-Dn?Vt?4ur@Vn9Oy!)fr zhD5&U5bLM)tDjR&)jx_uBo;y3czwV628qx9D9%y#waC6dykGsoF?-`#Eq~gPRwSyO z-meaTo7SRES;)zRA-grAUwx0nr9X;w5Unu~ub$Dbenu6Ufd`lLb~V1IHSDk(ujP=4 za;E8`VP?Pj8pU7j7{6bO?{$ceK|H=oZCEs`U#+9~i+F&_o`2I$j}o(3cfWGYOgc8r zk=Xg@eswMa?LqE0*vEYj{2$Ei7wgv3L^2cmKUcf@ONs(l=Z@bNlyNHj|Ge?P`*Y!c zJch3A1Hwzd2V>+sV6TMnuUflOUe)kFbCWpxGER-n;BVa2uP%jdk9}MoVv6m7|1IywRMVc&+k6nwY>B&y%O$RPfY!a$?K{zjK}l_!Y`40l#Y=PGgSc-M-U3 z6GduugMTCZR!6^atG({c@V|$AaeB4(fQR7ihPODzK5@D3-k4`@f&agqa--nSg#QnY z>5Y5sWu?M@4*s7x`R%7<4?`{jLgvdEx&(a6e6f2M8loC}+I)Fg-wb}kd^vOXfKO-c zJqyzn^C<8@$vslRubD6BYjZA)8S}N4GnatR1yyq)|YAeZIEbw0dK9-8lchpP!@PZ-qb1 zspm|w_ncJt+ZXh!-#E4Im-g1rh5rvXBY&s#PwMGC3?&G-Vxer=YH;_3+75a&gL^LI z7VLo$v`|~CTfOJtP%P|Mvz$s?XD=}d{$KtNe=7WchX1cl>0h&_&xJo>QNMb-lYgb| zpKd5Yz~=uRV5o+_auN3%@YfdcVFf?DNbafkTnykv@&YLe{225lbXdXL7RlR3x!?nw zPYF2QPb>Q+xM?xx5AMUf2i#xAOz_6Y3=+SXuLPQ-K(AfQy#_pRvApKV1&>;+jX{qR z@STgXqQEN5qZ&p#jHhTx)(qp~V&Sz#3GnCvpPnG6Jr8fpsH#Ki!@qfntdqG1#=A?j%9_1#_6uIBUBxep z0#90s$-}98Ez-M}Ar<~#+|sW;>Qu;Ptq?5C@V7cRh1}9FzRJbwsSL*5iQEdcFkaJ* zRv7NLa$WjhthrS-oL{WL@H!k?TgAX=Wk)*r%p_jd=EG=8lC>`bpS(<_t_9Cu#zCzx ze3P|fmYjGx#r*TP6n zk)^kS|3Pw(KJbAQ6hezdzc{=xafPf_40vQJFRapG+?uNOPLF)>`*lYdjKWmj5%4o` zP~qlQ7!fOFf9?ZMWbTI3-Gqsm0~N?FII}Z=~Df4rM!4Wz?qfux)}8Rm13j} zBLwta6f$$OGBv3KhO(+(y~nA;tg-h>8~iKb-{#~mu=|5<#x>U}ImqL|UtT4=tQb3) z;D1>qcPpt7MiVl*%_);qdnOg|55nKzx_ded-v`j_Fs2v6*z`cZ`bVdMRG|$d8YmU; z|0la&T%C`UjW7a#-Y;&>$1yq&T_SWcSZO4iRYw zIR#?;NQRj!5!U#oJUcdmH?e*m{OFq^Wh)NhBFvC1hk;jv7fJcGH|due++~8i=S^{P zmy~ztnM2NhQ{JFy1TW@-&V%pb7}H{`MOhC6FMLz%EkKru;K=7#0WPI;!4n#Y2bVvJ z`%`7GFEz+BRV}#bEqSK$XocYqgC+!zJ{XI1k6!}Ly1FL@#unX^4x@xU=6o23-;ztN zGVuDhw8__83*PmXh{Qx}ZUs*{PB;7mCxE6M7aK|TTY?gf%ez%E;K|47*Dc(>0Z%w%pNl@U3sl z2FM4mWL^gT0rOh$A?B^%p}3LyYh(`^(kM1=qwEvW6W!Ex6#r4aprUK)DpJ$dCHbSvIkjT?=)s`rgY zzpBCeVT%pu6Pwz^8-k6=)I#?eIWOk-aXoOT8vPWgPu4o_qY|@c3QR%=*Vfh zlNvZ-8CvkPY#z|>P78Un5`5q^-Hk!>fNy9K-w`hZZ*S42HFGU^cZ<9M*$Vz;i%7wA zXYK>9{809rWZbg-P-Yne{_=-fQ<>Aj%Wy}^imDfar+y?Z5U&K!!JVHZR19=Yt5~od zIi3g4YNZwroUk1Iyj5)6Dd}2{NQAt;RUCX&$_2QQv_MjPsVtK2(NrShUSwS%<>Xd* zBl$e!q*l40GNs@EAaBY9G`p34eb6Wp9;CvdrXp*aXh35*k4o?u&Z7~05sF+aL!z}i zS^;L$3hX?xehD&Y1+v~I>C?!X?s-Ao+bUb92)qOdsYR;66F-)%(+Ym?C-TNEXc{QB zj$bNT>JxbgK~p{vd$;30_3fXCV^1PuNNYjq7IYbS&L{Fn)`GWvB9CM%co*(dX-5zI zK)XD8D^aI*v6TiaXhpj?ScF{C!K>QE$s#&<;NG9gIi&*J=Tq(OnYkW33_8sW9pE!Q zm1D$)o)`2f-{3m^zS#C8#z@#IOzWS@1#u$yu}{T8I=-OCKb1$X2)yP~dB`fkU;9)Z zNzgr9{CV)b9Bx{TDgINjks21X_*1d_MM?8GIvet4u2d1aSGHcMhni)jsu9rlsT_69 z;Fq|9J>cGFWy^b~;fByzZ6*kh0ym%SS3@z#?U&*AXs2TBhuu{8Jzc(++SOx0?<8N8YEPyU+o! zBXpBG9{f8#Sef7>9A7A7c2gTvfcKycXbh@#B|E_!UZcS`R8hRGo_R9Z4J3w^bRxvcAcAj`S zeG4)$c^nrjp2IC+dav^Vyiopi)XMaqx5PFQqc8*`@HTmcBD>!bhaiS$u0wLX3I1xw z{8!2Rsc{P7j~dd>CE*p|9e52r#@pq(7}K<1imit~U`RWuBz1saKRVWr|T6P zcpaw=%EEdxVXM$gnX~XG7%|ob*k7HeyYgN$}C-eg6 zu3=i71dHgsxW;XSkUAn3>_vC(0dF0VPndW=fLF8_}LM;G))KZv&kh~KDhCs zwg54M_Sj@gnQLJfF3J^EE4bH1d2!bV9&=G%r1;^iw&9{2Ix*n4b4)sT;YD$b&gh_} z2!9dnMqe}Xza+zJ!Ht(h0A2rq_FNPTuu3A@c2O>8e};=8B*e*WUJUx;v5S1ImU{H^ z0a}B(c(t61!%*E!#Q9(9S9gM&VvdS)6*!p`LCn`he-`Pj-z~amJ0fQO9{r&eMMkM| z6$cuu%8KM*B2?vq0@SF=i)qllOMJ-%o}QX6H?7V=ix5JO zg7{$udxA3u&Eu5m;7Ey(zzLuQsyv2e;Mp`OF!EtMI3Gp@j7>0R#=@wFk*OOUFerm< zl(h{;I;WXV-)lml|Mh3-c=+@5;7k}B|3`2k{3UvD1&reV5nK=ds|a2}we5iMI~d<% zKYVQ%3dlzOKL5sFwJQaWu#K4h-3G){acF*UFL14;vSE0_I7KUW@C%d;-K+uc1D{wS z`RCv>X~_ls1o#TlaiTd4{?sniAq++xj2H3nf=42ZW*86N1S6Y0=U#?U1mjD1Mq#X~ zgs~xgKsD2l=gkjT54{1q@U|`jNpFRojCfxMomLY)&=bDkZ^K%e2DCxRD3Z-Bms^3kTu7p9*)1#MK^7d`8(=ShzWw;J9$9da!8pGo(dx*WI%1fT98_Fr_ueD z30^*)DHCzjAmzf}a=m!&kTTa?34S76oIIpNE^7skh#XL_aVRthya#$T^lH)*DL>HKE#+0C8uva-DA~JRx%i)L0WdRj-L{)yf=m$wLrt5{Ijm zNOL{7vQT^p?$raHkbw7fP7sTJQi4QErQ#*x|Ez?VeCJ(D&UYQfibGb2afbVsDMI)Z9n$_lqxUQ0bt}=(6jD*I$$c zp_$+f+0NaC^2vvO0{XC*SX8BiiQRuezogHMZFy)wJz_6XR;B}bNS<@wqJG&2-9Jx! ziL{G?9zmfGk3F<8(7T}rQ=VE^S)(6WZHZA|r1miTzmPMY#@zaM^YMcjLrB}@eTRSES< zhqwiA2=2T_T)NY8ow(<(%4};TM9-rG@+la~4I3SXdgxj2_Ki8VtlH&h4px$c{uT8Z~6U*zAY1Tf7Cr%H@pF6n#%G|pE|9v>1zTmJc zq=!M@b!I@Nk*{y0$3x!^{U0vz>ChwE#>VGD4`~~SR;d~EjWQ~NBhDoO)xH9HblZRk zJfbYO(r4g8J{eF0^^`#B5vE5`8g!gpxkng(rgt~3_V90kpT35!Z(8l4N1q)~6-P zD1I#KgVFu%fOv$Auq`;;{~i$gk1ESO@?o498W2Ch<5dY`k8MC*aWxIjsbbmRmFvCw zNc0_4{}~{Dn2w|OyT2>byb>Qnzl|JJqpuJzErj^(-<6xq)eu|eipXP_BW&PGoY;Cy z37AboG~vcU^(GS<>f8O?K+AkW+&37#v_Z3MA~j;-R?H>1m2~cNS_;4zg0bQs%6#8S z7*UM9iRwty}g*$FD|4DU%aRSB)GKyeqxp`1L_)lf( zlxi4h7%Dgq**7|ljnI?h2gM--dGx@jfpLZmze3Dm3kSt03~M}$yt2VDojV=+hH>;< z=vmNRr~V@7YoJfES3-{13XXT^ecDK_mGRaw^F}iqX~@W7glh@TLr)$@r!UeZjHCNK zjzI<8wcse|(RSS`t4qfz5snDEMsj#N0( z#?iB(uX)~O4^VI+#gC(xLH9>KysXhGOBJn#PCMX%M%P68j~tC~&>lNA5%dn|xFzkR z2SMtCK7^ip?k#1~&;8JrC!QO7&WM8EGLD`Iy?q=#6MCnM9)rU2DISHbJFd*}sD=@Z zo8-?Q$AD^u5x00yym1_ZvkwL)3~`RaqPAmU1>@?sl^LruVbmfr`mC*f{4vMFcsYfe}WEgM2m}mMm4$!k>n;-~!7W5mDTHh$A z80Z_2IIs~pWy5IKjWQU?w+xDHz!v8$}0$ZFZ5^K#OKEqe4ze>GQ}ekVp{f~xa9=uM_)${s{S{7o@19Vu_wX)8Kfw*lpAa!U9!B2wLG1>lVU-yL!?o|YLUPsE)L^l0R? z9j~ZAjNMJJ1c~QPDv=)am8RY&2gTbbl_l1&T{x6@C%x+o5D&fdcY|sUa?v*$Bk9n) zp__FPNX?Q9y%Tyq=_`xfcbb;_gp?SK>(Fx4K}+CI*gL4UW8dWkvRvitJf%$XqR&6| zRt%~QX7SpqxM(_l3RhCzzrh&VKd7$sByp-x_bU@bP_q)UI+Hwy2GtN`rEl7}hQ0y1 zRtI*FUIM)ZdbS=648y-l=n>Tz*Uie*)y*)XYX;?Qat@@#=b`T+-C@L$PG6Yn{L7$v z$w8+b_1leE@vk`9H>2+*!Z>;ao#lO6Qo!(k151kcF{@^tG|=(9cm93@#HhKfo^& zxe%k@9+XddxRr@@A1ISnmm!C4yl33;m{RfdajQ}UAJMY~lHLgY1mYe043*dcy+I6# z2liv~r4L|b{cdQ?6-5~Ic4V4`1o}pq#zPNj98__UY2Q-8=)+mN8ZjH~#}c*@MmO%z z&#Z*e2V=`A%tDpQoW)Vt{oaW~PM7_ZZ6fp`=+D?Ql@lfn<2>&n^*iXM(C5VWm1vz3 zh|yP~&eUWRo)dwu;NUbO2Y;U-c?X(vp`7W9TMBgQ(E3Kbst>v+e#YGP3Jx=Ug)49B zkl0T~B8-S>L*f(}xiFOQA@LI#WiU=m9}c0~+{o2#&s^f|5rKOYiLRVj~6 zDS{FA(2zP!FAqpXRzOdCXh=-MIPqwN;h8riR=lcAnsOdS_pgVXE^8@;4SMgdhr~`w z5mt&edTK}T|kGq1~m=cBKtDA9T_yp(jIkYzETnp(l)^w?dDDeg$Im zjpFI^U(rKD_l@a=CR_=(7Gtt)1}}j=n3QK ziO}Pq`?|~|nb4zO)Q=L*L$pzA<->7caO^NGfnGC?UJ3o^IC?$whH>;(=qFtCFgo`1 zakHAe;%ti&>g$J*oQ&EvKsS|^h>0I!DUtp>QocAO9-L&E6rL{)^%NrHEuK}la9c9b zcud}gDT9AYh1l_-lHz+FxwRj__ZlW3w=++P(`S@Waq&ZCx^Fy&X4-4`a)Spv2cHtF zYm{rn@{g36X8HnJ$lt`)kCc?TG_dpD8dCp8v%n(EX?!}1E-|{h;Y97ZT%KG_FW}(6 zjjtoa%zPaFXB?eA`c`V!9r|=D9J}leSq2r*1ARMm*9y^>1hxjiwlI<G+(XA!3|-nmIm{ zVpsTtWFVh-(DTsaE)BV>c?R)>1vel6-KI=2hvCl2hD+kAPm~2_`WD`aOXBQXsAUnj zr#iNl70?aPU293-O7w^BTFYkWA>-t8p5q;BNqc3393IFfLC?oLbq%O>8X zjbHLNQilJREVjC`3JgSi@!FyO&bL;C|h)9-hP zw<(zkqj1fY!|JU*NcO88V)Zbl=gA$)Vr%|OsM7SYGgt|91-k3Ft%UA5PJBId19We# zq2zybi0KoEL*Zj*ydLPi;p5C;raxe$1P!Z;DUU>-kgYscgP`|9kCb_9|5E`m(2t@3 z*X2Vh^cv_>C=z{WE$5RBy&d_;z7^pU{Rle>;V?`dRud=zZ!y3!=n<2}j?eI;S2K9& zWO3{>3~BFu=pa+Y$Y)AqY&>}9^?DDNiK%kw(7RpqFzC6^vqHt%&y~={W#BY(u7Iv@ zl(u@GocnLkMIfbZ#4x6F%WuFC68b?#PApvi+yNS?uMGTMm0W=eODRe9!>{}36KF7}_Rr_r* zN1GqWr2NX@KT+zO4!YG)4M)RRhoKSrQRt34MHzKKuNg=0gMMHf-FrVysn91;O?abx z!k`~0#b=6K3y9|gMm-ux3DTkOK}N26F7(oI^djiH#;H&R^coCJ%F|$>|FBU{s)gg| zbn)`PF!OYPheU{z|5D}#)5kXVpvkY)BISP+9|gTMLIiw?->cKXk0Qo(XL6y}jH4Gp zKLGt<$}Z6-%b4rqNfoMquAqx;()C|Ry%zcg=&p63?|Wv=7#4wF;=X<#j9mzFt%Ub0 z$n=@9dKh%iarAiThH>-W6D~Rx+5tV}X>syvJpW`mfabqp zSloOK?n#C@8i|fZHXEm=SOUVqkD|_IWTkJEZ3U*v8t56|rm0)R8v}Uswh_S_P=~*{ zLtW<6YjnTX9m}9wCc>n~I}g9-oME*A90MxN_=X%f^x4-M7oFxyzdy(3{dhf^$|0_!MY(AbDUxBu=+OojOqSI#o{Wg8=m||nLfP{;oW7! z+8YuOqiyNd(!tnJ3SjHai~ zW%$MztxcXU5Q~388Gq|mrU&;S>cpMHDo^pzG{IAQc^|@Idr^#ZW8R{V%^tl|gnp|m z^)0MK*=vT?6PV;oo(1AR(=CDG>2H-;!L5k$#JBLYb7`Va^ajqU2YTL%;_SD0fWWUB z4e*O$^=pL|jkv4*oiaN-8{(d=!|Hb0LB1xLP_Z`m1G=LNE;kdKzGgq>7uVUi8jdt1ppK<)RB$8oWazH(9ncfT z(dl!%apUOTuVcEf>sDC=6+qwZjj%f|>+#S-#?jNE`;Vj3S8|ncboy$pr>joo(`R%I zaJbI2^jTd>;Ho!s0j@fIN0=()s?&FcX$M?&`p&SG_Sn@C1qU^etDXp*n$%U#gieRR zRnLc>JdR!hoenYLX|9o544@Lz#DP7-Y7!PPrmr3rFaDs+n9zaf2J!F(46>~6@%XR} zwqd{c?gxzLu)k0*5)1wVo(hhq5j36;-o0O}C%pnZuTtzL-UxoQQXD2upG7v{J*>q2 z4x^^82xBjJJb39VBC;2M1f2<<^}AvD>MvPOZEWRZCWzZRtp3G>iiYNi2YYc}wi&_u zUK)0K?0`DfdFXqf2XY1kq}wR-SH|{ezrSLqpu4W*qM-Lyj@1*PcUKN)Ii2;W0Qzoo z$T$V$L-&V%HPwVSil?s`Q@o>22Z+9Iyr*(loLXd=6x;~I6G8XrDS{4$G%S9^NFM7NPm91>&7ZXj;4Jg+n+i79o-6fnn`#qPbEt zv?~;^M(I#*b`!6ChhFgh1!c-?)87#Nr(tzDRYQBC%(zTn(NlH8X!ygQOC`MgOA+`J zu6t6EX#1bUf}ikAOa*w&8)ElQ%F>PJ!P^_h9tj)t7U+%*;)e|V>d;T?aa|3rZ=^>- zZ-H*nMPMraB|>k9zRiPvqQzZ+Zxs)5cb_tCSs6T@C}E023aWlJ#%uy~ymQiEio{N6 zyNIWBj9cU+zgoU|vK8qg-od(Jxg}tN#>JO?I08XOFlg|m$9^RsI3C>42%JM>P-Xe z0Q3xSQ`AOnaboU4aA&7>_A-0_9hrP3Mg~yH81SQ=B6N_>#uyA~UkKW`e<~0%_UCxg)EUiquuhgERjB?y}e6B4&gR-Hah76 z1k)5^dUJzVH-u8k5Rm+h^Z1NMKsEHVZ^YgqWr0TzxS@MkY&)h*n&piS8Qnds3d$vN z!{vjsRUVsLC(0oa^9D-m7NNL(V$K9l_*SG0V@+QTo`>`gBRv*lA^O!#BlHM-P1Kik z-l$u3Ko1#5?}P3S-L-pq*UNZUJq)_%e}?ZH^SDJk9Lj%&)u}F5+3CMImg<*9eRT2xNEf{&!&x@cBT@af`&|BzB;%Q&KzI_N>* ztt_k|pzpc&nn%R8i+BRB7Dj}}i2S=tE{|&8486f)M7(j4?n1%XXA@^H((g+c z(Q7UatHTH~-S~i*cnL=`u>oT)(7A3@=S=9G7m>-A=K)390&Sp=VL;R69qkF96b?w z#5j5;^n?KCe5mkz&i|+zjFrWvofGg_^>2+O^yj2Lp2;t4vs^K~0x>myBk~V2ahry& zb0{r+(f$PVJHbs=S#)|gcOceq%?l?j0lxHMd&4#OP$juHWxeo|WvV&qZDe(g2ynAR znlr%@t`#Y6mVnqo@U&~~MMP5(w3}tnH@N6jbT#zt*NVMvmQZsm_=#)9aW~7{S>71M z%5@{!TcJ!3-)A4m^aKq3P??B1n~q*gBgVsZBGhP^8=DKB5Hd36Qltoa9CRb%^^JOW z1@!0;vD;|DUo3-nhKPek%L1#7@(CR~_Wa&KKG0|CnEd*?keH^_9 zdJA+&(!Vt?1ea=n-7Bo=;ABkBrw@j)aWSfAu+nPyHWakg0MX^HeI0^bllqHg9T|8G4l zQ_PJJ56lsV5pYExc=C<-q^$VtI6Ai56_!A+m{T}WLo;3}pHW+S1$t}|#N-6A`3jt( zs==dg!6^!hxY^A#Kodr^zaKLh*Vs?}A;t}I6}L>Tu=|i`!;%s0Ie1?hu`pC`Op2!F zyTn8<%beKsW*qb75MA0W7kVCa$M%mwOcC@A%f)6d%Uo+ccxlSmHgAQ#3%cuysfXif zaOs8w>81)HD@yTa!(@!{Q@G309SYW@S zMR7FZ+Yxsw#eH_C2=um0T9pdXaLb6AOyWD26NhBm(`t7a^0B^)K-@p+e3s~wXM6!W zjAKk&6#kXLeAYJIn2Nd3@l;0{g~2g|jNBbE zqC*r9y?2F(^ug&j8$5ZX@ba_ZlPd6)QJPiwPPIdtc<^fIhSg%Pk7Yq@52lN>J4V!3 zA(?Kv!`>A_j1S1enL1JHGJY8U?TCAw;(~>jFP0VY(DtpyJc!DguDC;3EfzdG*zBKcN}Wod9L zcyc!O+993_?tz|`EzVkSa`$UR%!4E9%`P!f(DNP?0axKzr-L8O6-%$O95#D@jC0mb zF>;j!zu$tl>~vn@P<;}icSD~?dFuBzeyN??wT_w%zh}|d(NzfDFpgdZeF*vKjZ4|0 zpM@Bz;pm0KaT3-JH}nIKqBU*G{9scX3pF1@|o>^ggN0oUuWl5O*#R)iuOGA9B&D zxl*AUisg)&EBRVlFO`6oqVQ`_!Fuq9t&;bE_ihtsNe^mAJ3KDDuC**(oeds={O2J% z*Jh`3ir`O%{}xC8WAd<2gH&RW#65v-hsnxRyF$Ept!3)Htw`i=9Z^H7d zfB0#q{XRwOKkIz#VxUJs?=2Dm*IDNNJR5vZ@yM8atA)@@p*tQq%Cn5)CxGi4>DA-J zQym*+yf(NNpXbC6>M4Pg*ap29h5eqUYTl?-{4iLy>>5#V8Z(&gN)Z$NEmM6HA^QJj zM8%51U|NtOZiZ;iKZ{QB8?oLW6Hx`Y^3;fmt6=+<3RX)o&{vu0p~dUOKm0ATt)_G6 z7*)>Qn5q;6y%)Mmzc<7{-}B7a`5_g0={R~e^j**$+mYI(P{zxfvK5*kc27djtC##B z@eavPPO_w!qdG8To)ZB9mbtUD!8eqT$Y&e0K`tN4qTNl$zaor5^5)bl!Dpzh>xZmEsu12Yn6! z-$Dzr%=JnKrzX@V`1^t^lfB9ywjUT#JGCpMY2r^omTA7{F?u!}8o~2`(4g8S02*#74cbwM=t zU}K_q=u;bA9m{~xrwW|Kur2u>3{Q1*Qz&W7Nu z>h~3@(j$yhag~<{e!?*7wBn-TGod#?H|li)YSn^%bR4||dJS~f=BR|e=ikmV1`Vfr z=%xQ25r?K)mYcoLqrc%@aZ@cR!I|LOZO#d3_wu1{v5AeC8J3l4d_>-GPNr8nthNsV zs$?zuzj1@X8y#b93}2GV7}JU+;_Xn&)L0vW(^TgIDHFf1anf?psUlI(6I87t9;q6a zizjO?j27eACM$w|VjR5!dINM5*N{M~J@ljF#5Y5)8Am@)`Cl5bsw-VGvcX}%9=Pg$ zT^L8uU1#?w=+V%_UGhnUPAxITK@S7Z#FRlT_ZYb8bjae%=YC_7Tvp@34r;O@WN<*$ zZqm{Ga{y_+!l5yV#p1;<%hV~Y@E`RWb*fN2()B>!=Qb+Ng<0lXqrO2WK@gVm_Klh= z5&BX0(Xl^MLa%}DI^go54NZ*1!oa=dG+mdX76o&F-08m1bK=(thsuUqFe!{|hn zr^BIdbWF}eAA&wx7lAZ;*q|#{jEe84WA;e>4$4(xL4+k`N(Fcps^?g3Dyh<37-|Vfr2oJx^SSutYA30pGR4xd5tZD)jBpUDIaMRD?WVqI?3y z+8Ma=DMM^Gw7a3{8|_s!^yv9w?+i2ZrPzn72GIHE;YVmsLH7Vj?B(3DY^KKI- zBP}V5qW+D7?-^C`&1L&W@rls=@8gQzN^|;p`H3VqE(;yA_IzzuogyP3H068{5Tw~Reer9=0J9*j_Zqy5VrC!XqC#PL}a zoO=21UiBL}mGG}Ye%|Eg4f){<^>C!YahqW#r@Oq6a}w zfbN=44D`6ilbw$g6`aZm9FHLB*<6659tFJ+I^LeM@ditzM>RNFQ$B#$>}d3`L4Um- z>)k6G{enwf!=QUUF{)NN=<(q3(DywdB4^>YZy`9Y*EY^VN2(zHq}UDaTaP&)tzcCB zk>Ak8;- zK6>AnN8jt=h%O)7&01vw_2`7lIZ;J>ptrm@s#+XcntF}tCrn%w;zBgm*D>JTe-xo} zEKALW;COgu;~YA?;4S!uGx+p+@ZLX-I@L!T*FESm-;Bz?p!sU9I5o#IX_gIQ7R1M? zpm*o;Av3PTsda@uZm1GreVDBNB(9o^9|O|C+YgSaxmUvF?ry&e9c zrct#OdE+LwVl0P0Nj4n$^Wi`G?x=jR4*7H8$D0OdBYzqE$tOnTH?LOG6&HTT`neo1 z={QpxYB6p%AmErgcI?L4LY<0xsM>|&shcb_d}-9SoElZ%A$R{Q@x^}ponv^cWs$jX z2)*w#zD`cP13c?AzEF<6ZUoCe zn|g(Z?6~if=ywrK=4Vr5+{7&Wt-P3iGsa0a#36{^X@6^ozbv~M2dEO_fosHbH)EaD z3LbHtO~qKGE){YQdd#wkbaIquyFU1n;h!h{(VO9+uI+sZO>~_YxfusJ2KO zVG+20kWJl1@w^oRE1;JKiQVy*t>z#VOO6oXwa~I4BNM!3n$79DHVEwRd_PEK@OQ(HvzL8K1*?Wme^s>5lHy?l-xp<*ZvqK2xEWetXutl&qrWJT zHZ_#aNhw&(>i3}CGx=v1P7rD!N+d4L14oTvj+e%NAgU-+z`(oMYY& zJ`<0v`P3u07r{r6iOC=iFSdl{^dLB4gL4h3u}nrcLmc$0!S#*wAn19sZDW==G0?X_ zcl;xDYTQ(cj}{9OaPO%CJS_$vVF&L4Z@|w530MY1;S-z+Zrd)g%$=VN9#=HBK84Vu zp*z-x@-KsaBFCn_DHbMJ{KfB=pj)4(JRY>E=P^m&i2*ve#B#kk1`kHI=Zes!m`t<5 zH|!L*FSRV4QcVv`?y@;upU@#{gzmpf9(>>P=+e7#ZQ4gmP2Y!#b4&5~srLk={H5)M zQ<$5g&{x6L(*V=aP%-TmOg@9d8i?c$-#6-&+pLB>3Pho-}aSC4AZ3*=$g698Q zn>yJGny=WJXo;L&Z$`C+&FM!q?d*$KPw2GVFrAqyP9ns&XPece;iX`OHMRS!<*M|54m9=cD*m*0? z#q~%QvIpOm$NX>}Jh?)AbSqAAex7KJ-(%`Ru)a}OjDns89j62PMtUOjHO*u7Oy~)S zNBh_}iqD50H;!HcJ^J^yv47882}i^@3F@JTjH9ygU7sW?OD6{!e5G(q#KO$<-V|~5GRxF?sff;d*?DBpZe>H?;-b^hDTKcLWjR4j zuYjSPa!yR0p%x`=K;jH=)8;AKGqN5X2;PU3)EUe+7%ljI&@%MbFs!{#AeZMn5RPBG z-M^$iC8D>w%G>sd7?5j_+d@p6rVGLJCpg!N+mbCeE~-Gvg!gPt@7|?K)pj?b~Li#9$st^wh$ViPS(b z6Hx~Ij{S^4<1uVu}qti4sq9y&WD-G$%VchS<{(fdWkgD>*3Hhn%^oh73@LcOd8c^ zg7|N8QY_)-J}T=cu{OmLcrP9iIPjCr=?Qze4 zwDY$-UfCG+{)0C44rF4wF-S}aw1nWD*p?Zg^+=guxj1GTZiVhS@uK=8zasa`6k? z%r^VsRI}kJVO)vnA|8C-^CEI3?i%ERhb+J7bdgLM7D4yNLo_RqVJo=j>Wgakb#gWI z*-Fc7-!Sy(134GfWi(m-W0HItV9qMbOmn^hPo7x63Pn|bC%h zSA*9yUX)*0=4wz+XoP+gx-U{&2cf{`7EbGlCTsXyT5*Kc>gvLgJ zZ$EWWzBq;xQ(1`=(|l1~t!D_N$s!YaUb9HK9fz+7e5hG$CSFbY`(p3yD60d!^L=rW zxc4>aO)dD+4=(s(z&+1gRR1u69*D#{Rqw!JzYtJ}9`Bp@xgO`Bg%NSeJEup@(=z85F7u9ggj;3u_(_9!Rn$j&vQ^Kx8n@_l;7CKa) znj{{&V!kA1-f5ZPkqaZu*JE zJU5At?!@kT<5gt6iWs@mlH!|*9=LDCCG~ckdrUr8(PdePcq9XtQMK?KSbItR*ax0| zi+s1>DR^?cCn5bWFO4~WhC%O!{)9ulwL=d*ZPO+Br3?0vo(}y4^je2_8lbt*^Bxjw z??Q{!gO@&XahrX$e2F z?Ow}QS9&F!G-)-$SMMSpvn+Z(&+UqU4{@cAZJ+jfBU~m-mnVzP=~p~|zuWbJA?!C? zFZF%8KTP@)*k2Pa{oC0e5+VIr>{nRNV(bmq{L@-KmgPsUlj%e5m)NpaV&__ln>;PL zjq8~ybpyvGu$`8v#RYCZFXQs=#vF&O^Z|)2cY102vyc6_rqld+?B9O3^f$2IuwMGp z*dKk5^w;#s{CkHu{jkK+Vd-ySzk&5MM#Dwv?;V!u4G(E+2SYSt+Cvky`qkK^KjAUy zPunW7^fAppQ&FWq>m8}*F)EB9jM48<{563s6Xt09nHESl`*61^NaDVrE2+GhAs*6S z6C-uQ0*MVbN^D{5ypiIsnVG=x4IJM&U&i%voPl*E=E@^;-nATYLnreR`~HO&sMK$o zAK3Om(E@af{h)S|0a~vcR#(rORD-1dA2+t<5jk0 zcDM_|cEKv?A7=ZB%j0W}n|sKdInt)%__Vv{6?15iTg|&bz*u^*i)P|zDge$-p&KS#>#F)XD!&tyr%vjD?#aPGK#Ms8z#W+x6 z(#kiOf6EnM3}=jGOk&Jn%wa5GEM_cctYWNVY+`I<>|z}FtyLCmewr)57|s~Wn8cXD zn8R4WSjbz*u^+tWnzAYE5I1e7|WQ%n8BFCSio4!Sk73*SjX7J*v8n! zXdPf;F69a^hBL-8CNX9(<}em87BiMJRx#EwHZis_c1g4v23RmZ%N1Y@XN+Y`V$5L7 zVJu)QW-Mo{Vyt6qVr*mV(h&V`fCck&Tmi;###qKA#tg#F)XD!&tyr%vjD?#aPGK#Mma$ zYUpBNfYJOrt^i{=V=QA5V+LamV*z6^V>x3LV;y4?W1EKP|6ME$Fq-#r1sKB_V;Pee zGZ=Fi3mA(T%NeT}>lm9D+X!j=b+ItOXnv6^z!=UL%b3KN!I;BXz*x*!&RE4*$JoT! z2GquX7YhT7<_fL=V>n|hV-jNqV-8~hV=-enV-;f^V-sUr1&{wO76us2zvl`thBL-8 zCNX9(<}em87BiMJRx#EwHZivSp2vR|3j>Vim$(9q;f%42NsJkcIgAC2#f;^QRg86v zO^j_;CS8mJjOIUZ1sKB_V;PeeGZ=Fi3mA(T%NeT}>lm9Dt!+%Y7zY^5`?vy(;f%42 zNsJkcIgAC2#f;^QRg86vO%kn!HWs=V2N=zNx3LV;y4?A&tK_7P=S*7|r{+0*v8| zv5ZNK8H_oM1&qav<&0H~b&O3wZTz>f(8V~wXs+Z6ForY6GA1!*Fy=58FcveGGgdLy zF*a55_-|vOi*bO_{0diqF`O}$F^MsQF^92$v6!)(v5K*dvFR17ETD~rF2(^ya}`&B zF`O}$F^MsQF^92$v6!)(v5K*dvB}D$jj@YyfYJOaSAa2`F_tljF@rIOv4F9dv7E7r zv5wK&#H5X}i*bO_e1I#!7|s~Wn8cXDn8R4WSjJVDv@v!u4ltSzas?Q}8Dklf7&91i7z-GS8Os@~ z80!dW{57%A#@NL;z-T_i6<`c!jAcw>%wWu6EMP2VEN84@tOIJ}zlnu5#xBMIMsqb+ zfH9mgmNAJjgE5D(fU%gdoUw|ruA0Yx6ANvOU5o>a=09@<7{eK38Iu?@7;_j47>gOp z8LJrU{>xd zTmi;###qKA#tgLlxW8*#92e z^auxSQ(|O(k4n>OC}%;xd%KVAWEo)SW;>Vd^qXV`dWHwtmiKh=3^d#S;rQlQ8Lzj` zS+=jz{1`?(P6ECU&$fOS_u6^R8HBMdGcXupUF>9+_zV|2n{90eX&6_tP{%c1A14dk z&-R4*&h`Npd&L6j-^=k|v;9Z5i*I(`fikvf2efIV%0ZwsM_m#$x%k^%?C)G`8`~?n z0x9vb0{S6NXB&R4e8bBu1aN|SwimKJ!nXcf?Q08VhWat@WLrNZ7ua6H>0=hj_%&>o zu)T-NH-s&g0Z(y24cmGG&jjh$D;Vlx$Fsee)4#@c9{TDl#u{W)hew7RS)l zU^{{B11@$q+xj62zg?!+n|uS?Uvc`>JEUJ9hHIs5HR#7ImjiVB3AXRz4BFVfo^6|p z9hxo+SjGN4wqIrYx;v%+ZMM&9Hu~SMS;)+g0s2f=#&$USkFl*+u$k>C?Eju^y^omh zlKEkR)wWQ!^`Dty$)^7QFAnfuBNONu#<8tuknUpVv9143wadj{>0&py*d4H`e8V+d zfeRd<+n#sJ3h6ZtVq33JoQs{#c0A`->f*00)nji7&CT zpm&-omjuUM?9W~75w`VC8j>k1s8=AKZM{WqXIpO(>q9IkyvJ4-`x&-xV1GT^Q`!E^ zCH~(o_C*)_%6nu5Ila{|iv|6dCa|p+xXH!8-Nk;6ZG8_9u&wW56We-)yPa(GKd*b8 zYGjCVu~)g+c`o*IE_SVp-Nv?sTdbRH?T}OdH{K^Jptpb@+j^gv#dacRu$gWBnD1eG z3j2?^r2o*x-|OJl#-CS~tiU?X;Ad>>85XgvSLh`d|36&(pSbu3T>Q%YvOMIkm2a5M zf?hxh+j@&+vaNU0T(--&!iM!SLw(Jd%(mV_o7k2Q78ndqu>F`>mTwr`V6Tyu<+Z<% zwqBuVw)GZS?c(3aHXiTQwq0!NXVb%M>lJEedm5K-7-c~(AYh|&1!CCN$8{Rp`hul{ z?QL9vH4n=4dY`Fa8;=HR+h1~}->NU6zGOk4>j&7@3%u%=GJ$T-a>RfB{I;_F zFjufg+E)AA@3~19peG1odjlsZa`EqRv8!F|2Da@}Ioq>1zkr9RJhZ=Fzz$6?82-!w z(Rs2$2iZRBVi!Fu{r_hF=FQSBWcvrU^*-VKi1h27I+$!a{`wxzy``XS9{TR-NzelN-{JB0n- zkIMY$@lo31*bdPw{LR>-eE!#m*=7#VmtY6k)`v|C+xm*9n{EBV;sV?HqeI?XWCe6P zoNfIO#BH(40KEdYbAVpJMwbMIF80%G>vQ`)w)KhTb++|k{Q=v0dEHhP^t083$7F@{ z1YvCJ2^O)fACiqOb~)SHb4O@q^H!OkZWpkvA2RE17W4`nU|T=^wy_<{$IN@1%rK4Z zOt!yeJE>6m^(&{B*w*8JV4E-Jt%kLa%LMxMeG}XBIYYw}(*HBIbJ)I-XR^I~2p?eo zCARhW?CmnW-s>ZNE$zp(c#OX)7M|n`qINh27z_v5evtjw?v(z`Z0}?XGLPWUz3dM7kIB{R_N0Jil}5ar@ea$gxGCaz9EtYeGlT( z-?9BQ+bzG975bXXH`F~X1wBCr+cBI#c}DtgWjljy-M`z#-{Rsol{%+SVcV*An*9Gq z+QKX0<0xE(aHWc~2=g!=lu%G@s-{=3&^UUU+Iqx~s&a^YLcV$EqnZR3;o+jzs zB|<^0r29$QsFAsnHs+3vl8%=6cO`Au%vXYTDTV@NsYt*Wc#wyHVQCbr&0e#2KGpRQG$0RZRS|g23}e2mSIWf=-E+}B1s!H_)yYD z4QH-^Jhi_OF_R)n(P!Q0kd=aOEGRN0{f!(6!&V8tQQ~At8?M=@l5VD_q9|uT>-J}K zi;EIq*o0-ZP-v|A9FjimAvFB3?%4#NxY73Yfq0Ak~UT>mn3~d@{hbE6c`Dfk+hNEV>iCvc7gv| z%HNfAU5kitCGUJzVUDEZr9eM7{&+Y3W;gmnNgD&x-;y?ZQP3`tp7aB{lsFk-v}uZ@ zjVf*-=>(afv640t*d=Krf%hbBI2u2bw4whiNelh3|G#8}kwDz;XKN%w(ncG8C~2dK zZo1)rm9)_$QG1@%mn!M6sX)~K%I_5bqfOes@~l8VNgGYF*p0v0jsKw={ZP_Ih8(X7 z{bYoC|KB4c3?uwX(uUC;+y88aK9#gF5x%6holYs8A)S-qNlHT z9uNYtQot!`!^$%yeMs^jN!r-UMZGTMjT&kqX~PBzByHH#Xi59Z^p#>6VdQYLn}U6A z3eK1cM2;@H$v>8~Q2@V#B7;T&-j%ddlwVQq$q1uFVTYbAQ9Vf;3foKC$naQ68&&T8 zhLAV-@sc*ygxw_Vij`G5T}BuQtdw+H$^Tx`F_JF#rbr-L(#<4obhGwubPq`z^3w(F zQVazrB*4hPXOcED5Pw)C*iGG2QnHzma()A=i=?Lk=OcsZ)Qv|w_G&%?M zy@D?)>VUR7TTvPq2c6YL^2XNmKOI}H`9k0a$mBdP3fd^H+cBm~aX-h*l>$bm94=`i z1OMAO=RY2EK64C7{op?xL;j~@NB2WF_cOJBduB%c!2OWS{Yc9F$jSYPX@{(#LRsbR zCr0ikM5PaO^nOSOBJ^jh0Nsxt+`aei&UL>pg}gB{#7WvP=?piziKLO97zcWkMCchA zEosB1=Stcb=U$bxk-)od^yiW`wl#MoZMZj-OCrM=#yFTEBaE%(e{#lmlXxQo?#_32 z-}g|7kI;*UUn7=uh$ufc+cLuF^?$o1V81MK94Qr~NZL@?Qqsn1V1T4&N&G`ecaXH< zS$6&3yOu=?|D|WyrI;m;QV zv{3_#C2i~yc7dk!^*3M9|BDh}Och~Yi4qvSB3IHc5*UAXB)wCR%JORhZ}f_7k~T_w z%#FTuP40tQO9e?^3k8Ni14(a@{O=`gWXOK~S$u+|M@sw)k~UTsAG^_yugiUqu|NvC zAru+|M}nk{l2e1~;E+GMCarMi_uY&jOTB-S`RLKBGXX=SFvPqsO|@OP`@( z|L(hecaP1#S;gyR+9efMlqEd#Oaka7ZnWiAsRB^{b9cCeNq}K=*^)Naup=dHB)C%2 zIWhyEOWJ6HpCoPQQ*Vn5%miNV|Epw#VYP2b+E8#&()DEmjypnuvF44JbgJZck+gx| zENP=xy(Z~h=KTMiP#7T<{D0*IbQ<%&yBDxnX2__4|Kx;Q|rJ=u+R_ldc0RSlPy=?7gU6&PDb_r2^k$u~Ay=1xvFnY&BM z-5rtogDB8miN7i6l5$m|-hn~)1m76T*GSqh!mW}vjPRnQ4SkmTLcWR2 zKr@|2{Tn{7jS^re+~FqhNYX|E@jnTL+oi&P>gNQ{NbsM!IjQ{(fV-dbtW3bj(EsXo zyyPbTPu!5g{tY8@cSGKEQ*ckx23~m}YQUgXNz=eWf2$;Ic!I+o3cNvYd?@FCBf{Ma z=!8A9z(a&=JH%idS4dCwc8YKBkMFEw+C2bg4rAHz`!{yXg z(#FU-Ued-;yv`*fjIGn_k~T7QO45eHM{f9Xzla2l3}i_9Ynj2IUj^UjH4P+f?4(>p zGQwB^&3B`BNV|I=j2av+Y1o{ezOqSK{(BSYDeZYJQ$TuGPLeQ4hBo>_E`mEEd^7k4ef%K?8*ViH{P@0f>pwlMDi zYym75uZj^&@$mHOUo=v&SiNXPXJOXzI1AD}tMLwp8c)wmMM>r#`IS!(c@vb@F%f3{LDa?aW z_4{>R%ESE2hg$Ierx-Qb(&;+ z^-0{IVDwhi5()lWtm;S;?1yiG-P~XcOaNOx2BO1RH^e`WU~7$rWD3Rerg3Vl^%cBt z&a&Znb3Qgs4Y%$L1+{PWMZO+XFY?|!g^d&lpBCE7utO$f^DRpk6`xU2#EWzFBdZb z*a+q>6JYO8i3GDd3xV=yMH~3)N@@&q^0z9f!9H(6rNzNczr??;qz3scC<57-o&1%v zcs0n{dq2n)>^WXBUXAuSdJ0r))?++x9HY2B>vju1hUBf6aCrUs$v|R|x7zPzrSgRVmzf+B73SZz< z6MXd6(kx@%;>Vn7xU1GssEM+Snv7dkRM(ofqJ$urIjuv07|S=${)}kkxAhNw9qT3Llt&7JJkT zWRfMH^94j+Aa1f{z+ApJL3LQp|HeN_fbo1)gWse7+bVMZL^a)~a57-EEltMp=80(M zDQ%FiOpDiSUPR=~7T{)E-ssO4C92^*TYmz#iKW9bejrgr@xJ4i6Oq&dyvWzm%ksDu ze?sK8Y@mi&zNyY5l3*Q=9)cWa`Jj+D1?jr_3dqHl`53s^Mk_1>LH3+r=2;Dz)>-%} zMVUwSb{x!81Tai`a$5j4Szbq{)d4ra{H_EL!e0Ct>bF?}FqkmGMO+g5o)&PiImUEqWW@Qxj$ULOD z$8u^o??z-^2FQJu@0#*rA`9?BM$7A#8Qy$zWwnw|y9AI&EWPgYPl-JK7r<{@_Wr~z z$*Rk8>=vJvtR}H?d|$Gf*DZP*UJB_E6@VEnd)V zm3b5mLYdidFi-yjfb7m==!bJ5a|6tK{{SFM^cZf9f(8#isHb2g!S7X3eJs0A@IR`k zVXiGN8pQ#oDd9wMg4lS)W9+dXWMO)O)4w!#jN&o=3i`g@m5RZcRl*HqWa1vKv>&k! zK=rYW;JrkAJrAfVvU!i(tLch}_GE1|Zah5Cla zLcE~%VhRR(>H{9Do>bybQq*Wc?Y?!D$5&P3L#SCj4zNl7cwa4o%tru=-iDviP-89l zzoe>~65aj_WacgqzndtLSOlXU=W(NKWqz}&`kD14+S;?1^9_Ein(BCNNMlUjLtLm1 zX2VDkYvcLV)WEW6%3bdQH?7NT{#^4!)li5G&>XD82tUt)ZI z8S6i`A9~(Ku&pP`n4M@)^!#X#%6C@BU@-3^eh#9pM7%%QvnHFhQqD>-c11}@~p!yERlfvU^XiapsB~R0b4L0ulgjJK41$JnA`?jXx(fo(K4vsZo?Cn9&^P>0%vz;2)=A?4w!D za|W9Z1Fu3s@>c+O|z*2u{;2Y#l82xht7rZktao3M6$+A9RJUui&@_n_egmWlvgU7A@FNy zt)t?Q>;+Z{lcx@_LrWNf$he_Y?F!V_Y`|{rlZNTxX(o?PQ=K92??!Z4%gy@83AM#@ ztj18pJZA~#1Jl$jS7>vlREa+emi23VQ1GEeBQAc;n1y#Srzo+SqG(^P!fV!*K8VKX zrL}y3pXHF0r}pkV;+@cWR?UKSpF!Cb&nW1xntu{%)$F>E@=9!pO>B5{BdkD^TLxon zhC+`3md#Vr)j<4fl&*&3U!Qcf9{%l2SHmoO`|}Ud)##+IqaZY82}-25PsQ>W{t;{w zp^@2XJ%Dcf4(icsPCO6FfK7kah-YW0(UppqF=Y$#z!n3)?jK~RBY15N?#*XspeIqk z@_Om7$9y-aO0??p+I4;+Q$|xV^hW-&6_99mJ<);qM8{k(lRwB%BlK~?>v*@tJgBBx zSMSzd9~Tbhg*DaS=UUOaI*>gXhngn4Uprk`sB`gcQ+OujzRR^>V!9`urI0?l!e&?~Z)JSVxtnR&T zvjx0)Ev(vR)`Og<1+O(8UrUYmnS%MwtFh(Q627w*mI%i%eR{RG+?>VF)l!389d>|Q zV96|pR)rz32po>aA&7)v%(Pha>SU>T8I4PT955S}23$S@4P7jSm??EYA(;J21E^bh zb+i1~PXeZbIY$D@=p)Xh1$;uC+PpRs{9W9uUE*+Wg_qIO@XHI z7OzmAnu&!=62=3sPc2>E<2^Ffq(oX-czt29() zrN)+9(i*Rt_Db;jPQ)F}QmfRf*%LoD$Cd!@(EPBS?{!m%J*0+33HmqF1 zcVWC+Ev?7j&Q=|jE?L3r7Wkp;S}Lw}I1p^jDH%I;9VmFeANQ<-eGL9P@!xgzDpU-u zhrMY5!KOf9HVKKm1u~sKd>V$HG~#apZ@Z}!`i}Y`(NQ08O!uf1b{xD@rR8=0mum;+Tmi3-Cp$n9Rhbf8^L1e;C>jCsnM*;xz?p_2S8_XsI5Jl5_ zih~{g5`dNC*Q3F^gE_E7gDiW6rpW8s1dL|-*fSk~#fBC>Fh}*V)+hjCL;VSSVvZWD z_kHgdYo6fibJPe&m(5Uo8~A&sVw9hT9q-r5EW{72ph2h`cpo_y%b(_`L1owX?tE=swU(9Ez2090J?2;Is==0N4fyYM)y{U^ET67M`@k&yJ!5&V zTs6j(^H@=ey*=1jDDu}KUhHEN1FhcdW7NDQx`z@sVq|Yj2sfh?rP9&Lic-I-?rf;G zb}aJXxt?QETh{=O@$v?DXCqKf_b&wr>MU-XwBBsP0 zVn1PAwM1LXmLCeT8@oXzio=>e?hQ5?S+PXNmt)8GfY-F&YtaaC@3V(Uz=J)2!0)Dzl5**9MWNhPoiUv0 zyCYOWLKYP);e2;|CRRU8pGWL2s*v}c^!W+qBbIQM>LBswZ|V8MBYLg|6)bTlh7*>s z5JL+~I*Iq&vq}}8shi`d61408S~o6K&SKQ^GnI1`5$__{ntzN$OV!QihxjREfZ0^OMi;2WkE_z>H25G`!W%Q`v&%x_ z4vMGv6?^D&ZaCr-n_~sU5?n{=vjFYG5}q`~XHr9KgjhpZSmiC=7{GPwc>$JIx`sx6 z2ik?M@Sn|RAF}^U4P8aVO)68uT_jhkhJHn4d88{C_7t$~Y4|W|==VF%)X-ZqIq4J%oPUZe{5PkM-h0lcQUFefmuq>hcYKlLZN-=}cMOnhQwe)G( zMxVRiq|deJ9;`gmFz+QMx;~hQ3;g>K{|4oud)uMP6WE^Jg($f7JTP4(CYI@nUmQ3E z%vA$JzrSSv15rxCZmbfq2>u%B_(b0aKy~$2l*pJW-6~-&%z-(_RNd4;uX>O0`zau+ z*MXcR+S4Pvd_Q;-V^Rfe^$6cG0c4FI3W#m@2pN z{4_QgapTQ+8!Z>)yLEJ3x!9P-M7 z&Tg^rk|M~=I~cV{%<?K}&fy97`^w;1hs3F{Tpx zVImK2q6T?c-v*c0YJyc@3Im6;KQefaCaS~dR3ON=*s=HdEaLXWawFy(du0RP4Ki`f zEs)n)1Pv8`Ax$gn@7Z*VUj^bvc8l|0nqX16U<$}z*@t6z#inYcYw~dz@(6UA_#GJ2 zJ$*)RgaYUL2cgcn$qOdq98e4MnzJ@q!s;xT0f&(Dn@pIxbMQm@g?A->NjCUCQ_hjx z_Fg3C@iJ`JxeR9Q=?wPAm0RZxeA=BSzl5B0oBNEsgi-876*85(5H0O#_Zb<99>Y8^ z@Ci?MAiFF!uz`kb>Oq6>sW4U1}cYmFHDQ&RhnUHkHwGM=$^T$5MPL3 zD}(IH?UjSMu)Xrx`Dz}bwt%^p0N1Ehg}W(`b?*<|dqePfgYtF?fKN;7qpI2GRlv{(qpAFt3;_IbBI?FIx`P}_HS9+SagSWRt-oYNG zL%+vQk81L@&D99Yo~8UqbJXUx=@5I;wIaVlvBjtPljgA2_bUVJ&3=bVwFN*;(LH>8 zSr)I;LJe{KJ`T)sY*LQ&Oe{)Jl$8jw$ieJrOTZm$$Hzuz2lHTQfC@|ViDv0#net{T z3Udz3iv$pb31Rp10I1B4zYFF)Fdmys`)mAS3)R0*M~oUva=|X2s3@TbrfgZbGkmhx zS(+uPf{|r1?IeIbpamm=Pb0Q?up*N007N$vg}yuU7XX^Gzu`h|iQ1U`9mv)!a19^a zQjN6qJHZ!G^hRXerwjY@UH(c-HOSI&E&r&c8kgM=)0S>akx5uXBFK6PVJA*Nz{R%1 znZ~lfXiUsf))>rQ3gT7r)d*K&XOv+sd#5i7SPazs5+w3YWvEEH7PF2uq~UG@VmG0L z-G#6rSV8!#WNW;k;vFzPDN#YWgNj!%()g@pZQqe9z60VXT?Id#ua@z78yjz*jjY{L zel;Kdslqgn+gV;W{&zlh3>jGW`0QcHJfaoqqB%O9&uc8}I9Yv2X3HNk7$w% zU(A&0OsSquX<}ibU3r4}D}xGw$x-Vc1zt@-S+&7f1Xr&mkbc?}2dLU&Vzg^6jeQMJ6aWc*cyz=P(6<2q71e@WTn^_R>xw*ni@vsqO7D>2HnO7!zLD`8Eh7+ z9J6SXWZt&58e(lT5@fn#CLi5eP4v>3m#xOn64e@h&(tAnws8NpYOH7Kum_uYT3a>F zx)1J{)DfF@^4@LLiq`InATw&kD!!nt8e|W}qJSwi+54k`88bYQA81P%7y@efZ@2j! zlCQrG)Vk|wJfNN0!a5L+l+**ud+*k2WV;^Hhu*!YOmJxN*%`nrtw|i_@-lkN?po2{H^dG+N)JvZ(>^zStE*S zJ^V#XAvFfC>#SRfNBA-9UTYNf(M<*GrWvyprN$6J`hmn6vBuENIvC5SZ;QYkCK@&f z4hYg)BaUrCEA2+GQ3A|P(pagC9RzSC_EvRR%10(wE@T{R11h?Pb0=m__BFV7O@xrg zSh@j#DjQp(HW~C<5kvwQhtGTuULB8-a_p-JUcAmnPU)b8)?78}-AjjK4>4U?T`-&L z0DQ|*3#D&iNKJUii)EH(hPSc8u#P?KCw z=40kgOQ?Y)HLvnaNo&^uwoIK-BdWci?AlffEWCrDA~pJcd0Iz7rD&g51G1B#afAaB*^(ps}%}zh#(gOOyp2OE@xUUX4tghlqHYoRZROh z3*3=ZB_7f1n0AB6QG(pX0vOeLT4h!*tvp;{X)q9~e_AH%44&Fat>g;s1DWwRBjtp# z7%)!I+B!6lRR$+*a%0#ZrONh!cd#^nS3B^h4Yx{<(^>GoD9x{iPLVb{1FIk1oBR`a zzm@PEPBs>WOIz@H11R@Hnn4I6pJI8G&C1U~3d?f1M`sw)p`O@gdZefQR$Eab@9B*J z4^}6Pf9bU-4t@#jeu_b6(JbTZ?HG=*& z3Ur>R^o`yg+Qod(EeW6G5xv!0yG?Yykl*gDg`y**w-)3s@9OMgQ?MHzAI~p!#?I&v z2i15--pVd&yo;`Hq&L4a66;W^&F+{(N-smxn|qB%^k|AEfLytzHy_(rUgKD4NC>{T zCz9U$Z47qoRYS~>r7Ixm&BI};dTOULuoyFvqe~v?&6{pPayJb*Bqv1ve3_r^f<>1A zb@1gsby3TQQ{AVxWmRipVnwj2w917w>G8Z`S2R!2X=v?saT9*?h?r9Wn?q2C4h>{u zh~K?%8Wa4@;JsYJcd!fS)#-&>?2vs6@t+V+PsUFA^bd?YPvNOa@B2Fpo!tcDClkd# z?y6d?-WgyI4!+N?bXCJxI{yRztSgccIqK6XJiHrDwsdMj{3v`KkL-L1HXIWWWLnge z7$zg?LS$;TpInyc) zAhb0|U$~+!5D&n8Qi9L{f$Z@@s91UP4gMW+?X_z&C| zr8Dnfv$5t#-@ADu@7NtinDqiAFPxgsUES62trC-tpK=?ESzbX-a4THFyK9mUN zy$do|7oFrEc2{##x9T5v6B z85_V0zpL|ta`f9v8Cu6-!k9hS9BR}xR2Oyi3r`tZCbn%JY!k(k%__N!63z&S^kDlD z`8I;>0n{=3Z}@~8f?V_&fmizTojp{Cmk#DANNp0t>ri2F{bi*9$pBe zrd>`(?7;mzt5A*57TaM(l=(n5zZO&cvO9djhY;*VEWrKp>U#4pz{0V@%uzYpiB9+oluV3dV-pV<(*$gulc+RQ6Dm-(7oz>-m<6a zU|o1oPpo2T-Rd{d<2qji%97ED@93#EbnPz09@jVQ57?s90Z+Q(?0pl(c6NlhS)5xA zVr+9>8czG7_(6gL1Fs56bRq*NK43AS3UuUaSrj&JNVo~AeRO`cE z>%4|FRyk+;%cxIhb$yTB(xoWRIftVXROcC20ovJl@+gKN=U+o{AMUA#z5M71$XsU9Wiv@&bOeCH~1Gwj1(9c8aaIn+CS#Ud#hSI8aaIn zzQRI;l|lD@7F5M1)2>7;vVXy^z=T-fkH}Y^Atrc%?2l&L`Mf&FMP}+d^LRtKi~pE# zRB(*mWTn3ILT5`y!0l2jGFjinlNLyp1$Avmk^TCvxKUrS!b`Epn0?o5$LgGxIxGXM z28I}!w(o{F;FHmLZAyueo%?PL`B}1xOjbQc-OBgnW_@_4K5As`q)8Z6eBX?zhf@x# z@2wN0|DEnY+&X~*HCP-CJ-772X(PJf`37yDY0#O}jUVWP12t0MdxUvmec^{->kZ>( za@zDgSu;RReU-p7W$qBI>Z0^_{Lrm}jm|p1j*&lfd z|GclNS&}C4ANt}hQMp9;ylSRXZFWOFq+3B7Tf^`Q-ilH)(}JZ3hG|P9MqtKz06Pf5 zMgq)!SYxy~AzsZqHVKUBCew(o&sHFAlNoP+kAyND64IrIrQy$~i%K))RfRYewKNH%18J}|R1+h zLGU~3&i%nFu#2;>u8kC>H-bnOEhOFjqYyW-bi8!;FF@QHGv3|ZzZ0B;CfB}}3SqeW zXS^eKE}3V6_<~R?sHld&-#45o)U@nASbv&qF~~`G|M(C1twFlG|I0vLcCcE}BWCYl zUS+WAh!)=dTfafUrOLkFuB$_QtFF`qveZW-b0PnpB_K!$rnCR>bRJrSRfTl+x8|9kd~{!b5=;D&cOz2z z`yV&p#YH9le#;pCQc;P&|8N(68l>Ux&pw8{g`w)=5u~~3eIkTOe}B!ryuy$YfB(A` zc-b2tiq9UVTjzn1d^euD#q3>PlPNQ45PJ&2vMr1Z3#)c8VYU5ebrK0?B@=+LNSsl< zyb`=j#OIaf=|;?xhGRb^O!&RQJb$?AaEkM)%NRQKRJTBAM~R?m!c*6BJ{%V}XfwSqqC~+=9$9_Xm^U6# zV!~I~^C2L;^dl?2ggDYx2Tb7yN0iv=-!=F*Bh=W&&a5`5WI3bgk77n4%abz-#|p%p zQM$o=pGUBD)Z50GQ68P+twx$N$}y~glK^5{@UfTB-3e`<0Hx-P^0<(%9jQhoiy7rk zKC1s7pic>|E4Nb~>_Z`G&M4p9Nv$}~f?KZ5NZ@$EP8i6V%ZvsZ7X z>?KefVykhl(du)0S8}$^F5r&Q=vbm~=T7iOqtQ9Vv=}m+7mYRxvDU#CjTVL2H(Jf= zQG2OAVvNHKE2qINNa4R8F{qgTdc>%`%8xf6gAK75G%9TpUCzQbw!yV<1e=Ryc41?w zOiY6VF7Z`k%rou|SlU?FJz#$^@y1}%wbcxMeT+E|=1=9;v8tn%m94)e^=XXIp)@ctnB!a9}GE5u+$%)F}BIoJn zffz)n#Z>n=36tZ&ruiVJg0Zkfg}yTgVRDQZTZrs#1^0l7;Pc0;{#E4Q@be-$q<#Ya zWy0u5*kwlKF?aS{ermiqW_*uFW6T&#(;r0_qw5v2 zi_rm_*~PA*T(=Nxzah4yi)CUTc!-Mp6dz^5vOOWboh|^FUF=Q<&JqX|gV+=V+Y@e` zsQSr%wsQ;*n`rj4CF6L5iDo~0={z4a(d=g@L->M;qMz-VsE&4>nu5CX!yYk^y>JZa zPdN0cqWm!$DfRA%+aCzFN@NY--+}w4Y;kZEERzEfGabBnrTJUn^C>%XV>xt;k&xdC z-p&$!FzYxT`fsrPXuQ*zP;e4V*TK5TW-`C@M;O9UHcs#g3Q{2DzB&>E~<{Knq5sZrku%{g6cq;@i^3A zglWh1kb|ZOw)&7W?U<()V-+SQgrC>*F2(3dv=4Cd$;J47pqK%EpUrm`o0fTL0zX%* z20O(x*7Qwi3x&!`2tv1=@}N{}t5622Vt&)6sF|H(s(fB(&I(i=|Mjdu>i*5F;5&iu zn1WS`m=#=e`6pA%rQ{zs_%Bn`7^_%HMvUMUr>Yh72{@+f<&Hdisv6NlYicHXzupAiw5pBBp_*w~-Zg0Nf)cqGTF4jkwQB$BSv;=u|a0R$g`T=nlmcgz}$} z1p27B>U5+$|8uGuin(FjHXbrfpBvuu;@Q*mx#8NUyceFZm)XTKST_28GaL z4~QAx6MeAj6O8T2q?kJD8+SqJ?tQvja4rp0)f+m`s(siTrzO<{NgK##Mi!9L_m!teBUgP*994A3D@9ot?3$vn5&SF1o<9%o08wKNL@CAsjl8-ag3QO5l zcz_NezwB$IbeB?FSdyP$rlZ!eixK=w(v`3oLNBqZ&-14sBghgf9AahQU12SHD@r>A zkz1t^Tfdywo(x09v6hbun1|Ro{e}VY+5AbP#+U#wGZ^>SrjY&Ws+S+bgvT}|&?N*t@6XuwMTeTdX zKgXPQ?KwP)d@p79y1aTA1c=v7c0&rHFT>B&{f-%H3UnQ4~L9YVw2BF4K zK@IngJ&bRirw@GZzQ9k-)0e{E&r@RxWA=I+RupPgR;M2(G6Y#g)Ri&fiP13QZ2)?J z+1CV^qhU*!3Y&=dX{C8$G<@8H51Ef<7en9DK78?fbDP|9A`=OJ1G(=@WX)}I^-uX1 z^GmkL&-1_Lmu!=|X9?&nD61BXfiB>Ag2C3c zbI&oQbwD4%4AP$Gfc6tQBek_t0PQcR8139b@CFDfUQ59)I$)rnlC*b(mVqnbH0-E5+EJi47q#b?_RO}61VKdE+^B`AH+_b?2%@-$B zL6Ns|lN<&y4UIay6av{0hhMYXS2#S0wSW28WB!tSQ`k6;iqR|to3n`=rGlqqWx7C(fdyW zLA5&(b5qu9cXTSU;qS-+zBmxbMqY-%fzEg3&Y?SW_d&4T1CS}%tc(}LUjG_hUq7^( zVDhl3^0MBA8ubB82eZkMB6Bv;AH{5Pnqr0D=D9@O^)9&)H6YYpr^&~H7J^XoD2KPHTxgk5Gt&MgW*v=VJ5m(WA_S1U`F(6`>>jF(I!7Z|V1alSR> zYn=NzYz;9U`0vI*Rx|Q1 zToh0|nhhRnQg(bRW?~BrEz>W5#*i*xaEt3efziuoVU=E)|t z;E(pa1yOTo=v%leoENRe3S$~ki=tNWMMO<$gp4eHxsdN$jZI$Gk^$BDh1IwX(|Rya zoUNf(^pNVUn?C2sYoIKYa`$4mgSP-xW;hC;wY?r6yhhFQTKp$;@dInr%I*7Nt!>S& z{uGsTWE{K~g`ka-X&v5et=h=yQxU^-%}T%WJ!^3jxJg~`YW-e@Usjx9B@c zFS5U`@wJjvm8c91r)}#*-ye^@^V}K?2bIL4LeY-30TnMOPwmtd^kb)>tonWUIthaE z)7FmxGEq==?TI&#Ni<4WqRYFqk(0r!ESN#sgj--H3o1-|1%q6jDuRmCGRFfcx4to2 z3_R{;{Ne@>eZ78k?)~PMznrYWC4%W#ORK60`vL8dG)eWA2o=@hC zd6Ly&6kDeOdk(QSV!;-?%37&rJx5_-mBY(yz#E%>!@T-?PJG>t*hUpYo*qa(d><@2 zCn*AgxOB=a;e#R}Q(4f9K|lHu{Nxj;SGu}u2`_@5B`1Z{dqi(!mHz=Eyr+TJv^DR#QH@IJ9{^VKy7zRWvNxb~4o$>YQ4wUSr{Nlftsa6!<+Nkt0rMzvx}^$Z}|KF*cjg16W;U0wPl7%_s)7fW`!?!Vw?NVR`{ z6;IfthItikfD~`K363=Vu~S48AF~P9`M1DCa`;PNq)uCf$8KSN>6r}DwR%oQH6X}L z&hSNr)M8tvLs^gS%QIyLf4WHxPl@ji$({#V!yZry^u!Qdx+5fekhI8CE!JWVaJ_xc z^JbgX*seO&r)LUNI{NGVH%yn>0}1*bo{$oAN-d@}Lz?{_!T!kzkVLo+z6{_E6O3Y? ztc)ZE#B2P_W;96+^og9o({J#Ho7HHq5A=2n*#ZX_Io@+755ti!*$1PY%5Vgk(?FJ5 z1i@+juuZ7I3%9`GIH4~D<_=xLCvQb}+5+J>JnU5|VrAx=5Y^5cY_~M%Ix#UC?fZ^0m1L}MQ1C+%XgLRLG z)3y_RMNzjmLj5_j=ApAncZ~ih7SQwOnhWTa00gi|c{yh#bgriaR{>G7f}XU5&)I6O zptI8X9-_nw`qoB%eyizs`D_G#vQ>5T5liTe*g3FfNTC2h=(JPX<`ViAIgJK`InE6L zKQrYFerDmXw`19`1QFg8>t$Vs&$O2w@+mK>fx!h>TZA^M1GNp>&&Ok9YCk0^<^X@? zMYWP8?Et^@q8itz{4Ve&(2Enu7oXgcnUr07p>hcoqSsk5&duOP+!k1JnwGm?E{oT;kzkP-* zBf^8df`RHNf{kjM*(nmJ6v|)WG`{^MwYq+ZKD5s!42M+POvU=4^!7Nk&!T4KYKOw#T7;M*b>gi>LEW+f`rvf@f%-VHmy{ zH$>#lIJ8fdPbB)FdrEYzFSJif>N@8QF_BUR3$ySywqwqJ3GEl!pOu*b9|3}_i4L1l zo*~;%o&eM#5CfPK+&cdRAz-nrNg`lFHw|YB$+1ATxfvpsQyq{^vHp-9O7i-MM}93& zl+|PH<$Ao!%eaf2Ihl`n8U5>fIGRJZ+Q#xtFJrvujwaE^LGf_|nlRGUz~B|S+j$3S zagUEW3Gi#no0Bj3p4+-G4 zcBsDAQJCFA50zQUo9$48;&ZkE`j+~tyotXW(2WE)%JriS=y!G;=JR)`!SP>_?Vqw? z)1~_WE&+MHG

_S)r!~Y~iPYwp8xN@9e+)Z>svuiuA$Ti@uNyuboVxtY>^#9wWqZIpP#VzT zPbBc&i6ksrs5Q@kcY*juscS~^!#nX!&M$WW_jCLbV9L&h>l8sY3CSU)M_6-*{{G=v zX%;B}q!Y+c^q>Y5JXw7m3YsClphN+g6857-sLN0bYkE$a{cs@087N#O3}H{cumpTd%gvDn#+BqxG7tppIlzNE3P2HVbu>{df8PY?5XyVVGvt60c{=CC(b z@%_8iYOXm2QoqHn&m}Ajvr=UQk*|`TrL<;w*C0BHo$V_NiOq-JVOj#--V{;V=r67b zZNwNnX9uY^u=~(~BTbM#$k<2w^WJ;Z?1Gpo&PArHh-UNu+Eqkz=)ZOq@yC1ANO_%R z;-|u%EG&N>?rkC1svuD}KM}mljrN+?X|^n&BdiyIebL05exkP;@+EuCbBCob@k4vf z>ojkkM7Ed}bFhtqo)88~={Jf*T&2?S!f#~XXZnqj_hBzA{6@!64t)&c z(Yr>4h1jYh*m9`)OT0t1%RognFtUkRs%=c~(8>Y`v<3Hh6TvfIExA#%yuVDs1^zt3 z=ty;|ZP!nWn^t7?J1D2-Yd&y-amBNr{k z=CS|0YO zAuge%pO%Gna7eMB2I*VmkZFQyK2)2x34${PIa1#vhs+k#SS@cX1m_BBqIPjTsCh)` z-}l^%wQ$HHnp!-f@paFwPZe%|O$~J=!P^wFRKW1f&hd{yE)(Q(Y(J^6AuHGj6xLQ3 z1rx7_uu~cBR2bp1z!KvwS~=t+I+d)@91XYw0`^cmVIZg7Sjgq))8v;e-vR4G($^ep z`0(+~V0e2%ZVbS7m=b2+fcd=vAb!VL;NO0@RZgTHm@|A4bOprECi}S?fcZj~j|MNH zG~cTM^7i1HRg#|vUK7c8K{S~4h=2kM+w+IaVsCH>*{D-9u*bB_Q^cs0e22m&k-4^Ge1--2pYH!2D#1%Pd9+YfUCno?TrE z?ziC5aPVv*(KaB0*`-vO&$5832(l)ES?z8BI9NBV8TBu=CV^SKG~nGM07SDF#z+mW z=HRw1LEv2sYf+GRHYggo7y!m-VwNgu2zw8^-;l~IwL02)KDg^k5LEwm`apj^0)9w! zwt605`vG~o1g6(n2n!8SY)VK5`!*73T>$&mQl4{AtM-d zbCEbkI>H_3XN z4dx;Okd2as#Lk7bLYA`&KO>IXXD@@fuQcEWmf|73S%xMn_Cqkwl?K?r3F+%%OR;O# z+vW#wAC@3OSX=5RgIM$O&~IIi9Rk9$rG7sPI)<@H_;w*n05{DI5zMy1Sr{^!ZA9T| zbYb~GbRm>p5c?LFs<+KqOvxcG=GqEH!@-{HrYMBH(*{YcX9KDLu^iluB?!HJgV`0V zzeD!0DR#M(c@v1^CJJ@79+N@HyR3XW+`mS1vCCk(ZVo#lRyG-?M{_AzmBYh9wA@&&&?cagW)p)H3LAtPqfX z1T(TxzaKLCi2a6}Jo?&uDwuOh177O36j*cJ5F*B{#DX>-w6QC0t8b0!Iw~v?i)#zZV0*!@8_fvM zf*=r!p!>X-ypK?mHCqcvrJzC}EOv{I%mu2AiL}!lNzp4CyI6cM;Laix8E_9BKBxpr zFYmx>7s7DhVJ#C#S)_(Z4*+dsvk@aMW81)dl_d41vwsQ8gJ)gvP9XjRlLyaw4=26? z8p_7G5Xr9L%HwO6qc%#|-WD8{_G5Q6e02be}1+y{3wVabiEg(QI- zL!`?idLPp&{tkMqU>{@JCX92r&DTk$cX;(sSQP5Jfkj5{jPpG}#Ueh<T! z^E3fO{sP&bYoT}F$c>VJ3%nmo^S4{TKhW~Fj8Nq!u7l})}2 z>z!b#fOocylJ8q>0A_On=(PyGe;M#kCGU~^KHv>5&0qc|_@{RrlL^cOZvpX*0z3&t z20xt~A^F?D+imc%V8aU$$Y8&CaT6-@1Q=(CDVk89*#jAULoxS?&u20Rw*k0kf{??| zCP?9W%NCMf1}$3-L6*S5(guKkYbaKHEE@5t#M5(U&!rTM7W|+SlKEkS70uKbkai_7 z*~IOpK+nTdFjO`G%whtFCU(7o2`=~ViW|UMf#`KQ3m^dVG? zqZn8kV#M*XehjWRJx29vh&RdRIj&+yP~V!D{udYxs=>DMGN@NI*p#Ozc{TMZN%KJ> zuDmEQl;BDZX1Ba(LD{wA9RQ3KRHU}_6;SblO3}6v>!;m8L+8m;ut8eb zW>E4JY-q!)D4`{KtVV9xyiA($^o_=kl&dU3Vxv(Pi-5drLE^nKt%$4x(gpN9H;^@+z{&(kS`_l8|FvUgW-Cq(pl|!Wew$R#9GL3*?*)H^dBC8tU>Q zhZG`x(#94T!g8$3i>yNno~?$Q9P9ET55vo%OT24H2$kYiQC?)+Flf`GM7-kJ^;=X{ z<2!(>e_}wxJs5J&$V-*iHoK_u{>xjH(dY;N+PhKv7Z0p%sjC#cfbXv&*g6np?}|_J zR^3KL+kR zVf948q`N>dU0=qY&BDF|9n<3armewq8Jq*|e-LzF$C?yWsy$7||?skc<-Ok~e#<9feU4>bZ@0Kqyt` z$c=veXYYa9IN2gl8UVQjDy7P}6iOa&)&b0JCICaVxE&M#e=Zw=`0)l$AIHV@pjyko zTm;5igDJgX#vS=yJCXE0FpobAuv5m7NpWqc+%lQTOF&&Wk=O{xn?zq?FxE@)Cz!4> zm_1}MbT#I8h4ZlqW8vUB-4NytqeGZLsTNrt5KRar8pr%rR;ztr_5fp0i3+{iO&?N_ zs|z4g!Cv+(L^PrK)y*?^r5)@B>^Rm`PvK2VoL*9*AphDDx8k`m0K7#6mO=jFy54N*FE92G3zIR^mM{czK3~ zt^wcKtvwxn-fD{&=ZZ6!tDIk8=jrWii4&?a&b_;_4{=s&t>9%WcQAALI-|02{Y;6P zUJVDXp&8epLfbkUj^0`wU@A0LX(O@Z4Xtg=Q-_F|Y0Oh|h?gbjDMf9E;Sz_fD(piZ zw(5`Ku$2Z8d0UaPZQfQ4--2Qy*s1_fa@P8X%TrN)MSfTon2iZgg8+82C0L)h#n|Wo zzJWoYo&Xe;fTW3vquJYkOHH!?SVbT`DKRePkU9qw7a!-51?>jntu2_UB#bg{Zy;de zJa@$oz|I49twfnVMjBTli^+fR2uuZHrPR>(hN$q*oaY7s<4v()R(kZZif0%7^RiNt zcv))`Mm$n+!>r9Hf+2-4D@`_D`e&H67e$K*dJMCUG$Paxuz%84a~fO9gDPD*pz0 zC2>8XvBfH?4w4HJTdcrxkX_Xu3qsmq1u!aP_!>6oMN9z*wr)rR*QG`L9yT3ui_Lg@ zZ*XBsQ))ryhs$E6N8@Dx4!lV1uS<)eA&~8u3DswYvG41gyRDWyrQB(qsm1dyNqIYBxOgG*3UpFowvCmofF?adIL{vp2DKsoXmOO1gh zAE&qQ07Q9<$1d1Qh8as#j2>auS;VC1sA&iBx+jP8!bN#fZv zzmwvqES_<}kpvu7*lB3^48cZ{0aTYdBaMBF$Ug;x=d3JW!KKG%F+bpf5Oe|a$0u4w zLR-C@WLd{m0mv-@oyDV_Qbuche;fU=*&eL-sg+r0uzH$E^i+DumZR1EF!Zo7h@WQg zTxMGIQ&5hA{>8GT)&a5IKruU|h0E77TR=@=`azkYqiz6H?|c+4%=$SP-t-vtBl2T+ z^!s|ds6lz5U#~&BB-04hsaK)A&2P=`pg0DL>cm=~q#Z+8Jfy22*hmf4rXD|r<$&xg z;`v%$KE$QRyVxMajTQ00+n*2C>qxK7Sq;|95-tH?a|!4c9*x?(L&+{4fUTYW<3oqR zI$8Ekd^$#^%Tdo&Jd!^FRF>$ ze(eE8_>BTjZ7`YWbx{_pwtf_<`v$cF?m}v{8-V&omQy>AHM!%api;E5=o^l2h2>>x zb&<5=mY{O9#vg#XjU76)G}87A1a(JH`C7|LpuQ7GSAiC}ALRFf?4mWO0i{0(s)u&2 zDR_4U)mw?GaSe00Rc&|_m#t>RY^vv{OKW0wrc z3eQRgJS&Np?dj%X^*^{7dV_S*g-TZZ9$@^g=Llm{aR8v_!C`9B8z(}Fdiv|F6UjvL z*!}h9sVKRT{_zi?I7*U9{^4anMoTiI9HV3$v3Q>alIewDo4N~SV|FU9Fv=Lwjgr{# zNH9hT3_)h&k*t!+8fIMx%9|ejhA+W_&QX`q&u#g48;1(YlciSte?N)j>Y0_0fl=L2 zUy@e;_i{ltz$pRrTB7~@CoTfrP?C24E+Zk_Sd!)a_hCWpXd=lV|FwevZYs$z{}<3r z9L*#d>Hl4Akj*6-;~$OOI$B6F-hXg1WLrwomE^ynF6ewor}#gZ3Un(;rux^v39_{$ zGyGo;2iaDVnM(UVpse1+Pf+>}NeT3;FddQ-f5gAU*03Fxc;N^7OdgI&B=IGUo@a*B zbK{|SR&Z&^H9i*C8veu`r1}}(K}$jXnwM#~vUqxp!>+31a}ltyxK8``U<8_jfiSN7 z?_i@7dscl4s*BDT=fDro^za3SPKMi|1IHB#%C6B;Kdz^sf;nbRH6D;@{?-ovGmrn zq|A{3V5x=CGpRlc+KVeL2sV99ZNxWZDTvE7NVPw%7v zdM@p>va(;s2gZN>O=(GmJ7+-GH-J1Ufl--tEEIlKfC_p3X&)S8QmX!7l}8X+lN*bq zfp?yO=R|xh;)%p`Eqb=ZwjpWsesp-&5{Sa-GlDxqHr7@qrj0N6hoNvEu@2cN7L z7Iy)RehDgJ7;6GVdjykZbLoog6+Q*bEVKE5;=F{cgjq*H$eSKJI;l{VM$iv1rM%b% z-?T&aQg#{-F-VRM`Th+{=~zWqamV&5>Lq$S6j8+lGWv0~Nx~b?!=4GvccJ;Ep3A{Hw;_kct zNfBPw5acGz`UNrR(aU;FXco@E3@W-ZD3T+~|US(5cRrVZN#prvd)CjGefjCx5~`U+`W2S#H^+3v}B?#zw= zR5k@`#kekv>c4CPJ$Gefx@DU#z;h2q-LCAfE~tpBV)2h80er-zSTuURJ_66xEWz}A znVzd#BJdo{=3$(P>&1%uVJC77HP;4nM<)c^DWVKOU$!6PE&T=?8wutF0-TY6aGVXq z4P>j~HGA@!3y2lquKRzKy$5(yMfmvj8)MBh&ig}(|kV(6Cw3D(x-(mk+f0OSxe21t5Mv8#JdHMd>Tk~gX2pC zXC5V?WvZOnHDlx$Nc1shBqn9#wei&}#E`v0z5Rwn)ChUY1S4gKsg(@&v+q_PwsPso z0U4gaq*%emGCs|OP`A22uQ6f5;=aI&AnU7PmoaY|za~klhmMUxub;>#wslVLO^Q?tn}&|G zb!}%?lBOO#HVbX%urQimBx!14%TV?Prx|+EWpu2sHgXA&y)(R@tRBx15>^e6cEFi> z)&*kz^k8SKn#V0-*&l^fU#_pU!cgGJ2?Z%6T~aZt&?KE0ehk;+o-(801Ftj+v_Ivz zTkn92rYJ7lrOd->6U^fY!&2qu=x(DL*CY|GQu415ZV${y3C-yiLx|2c9ho z`WP|izT_CR!t9i@xkxiH_$#1q`+r7JLpAA1p%jGFHkii)%Y4323uc7WD+GQN2+Ri_ zKaqB7k;0Jr7V&Qh&J@A2(EHz+uVe6hx3Ne;&(l-u>i*q zhIf!k-*je{*c{5I$7(G^1Ei-4;qtMoJ^8pd^b!|^+C&e8{RD6pH1I$u+{RiMk8oEdxC7yqWI!%gvY!g=i||2g0iHwn zN&+w|W!c+PQqDm534(7#Xd0tbBBed28u>Vql6M}ctaqq{C2y#$S?hO3)nMJ)om`agaUZ-Q;3 z2Gg3dUrSxlLmuP03vgRSn|#YvBOj)YERhc2WyE_cA~CVY&4_%okaIxz$15q2!ytbo zFd6jt4yhLYV=zdJF-Hc@7KS!b*BJRS^(q9q*gN9souG7YV57f2BUQ-WK{{gntA;Y|@*dRh@M319>BF}=1>6A&zvhuu_xxyWnro1d)xNw8P!|6Ge)`8<9C7dFcB3T#6 zl}O5v^O5AsY^z==&KfJ%Bq_UIBXpcxVyDQZN7i`BMa#434pfT1{>WM>b((5fpMx^)sIO3d6xVe-PlPYH6N_a`fKxAzCI!*>paJ40GABaRdNZF)l#jmro8c( zQ9U5~3Dra=!<^Ex&QwRaKA9uHc!W~}GxnU9)kA&eN4Yu@VhPga2@~d=mepVVdJ7L$ z3UCL)EeR7A7^a@T*IIZE;VTIX=9HE-S}mQ=wCbAH=62O!71SARLlxK~8#EcdB=Ow+G5JgoO#f zud81$nYCH%$@jcvVqyi-RSBZ5o}t+OPJYhEfw%8!uJKx zsf=}ynyoM2Ahjsw+f}P$t3w5}~EKgf=v@H8=sHI6=wjAm(eL6_t5F|!MeOa%EI=;&^kknZhguMiC2S5SmimdlSd0cSK5MT_#3zGpk zGi7}d@~{2Kmd-^;mkW_pY32l$^;77db;=wjcR<`1*m3nCXQnJKJmgMWHZMcGQ-zXq zPF7m@mavWSI|%=G!74Q540!Zz`N_VEj4WzeAips#9?p(dsmZi1czyP>a`w5|A2go(Slni7pb*L3{g(*My!U z-T{P;dF(#Y-KyiEUAB{N&pn<4TP2ESo=>?-b{qb|BnCP1*;{t%?HxmBAMJK9ty zJh=ktR3=Zd+Bw#X_F-x)L}7yRCC?QnS^v14vy{ZT9MLs`>ZApetlheCY;Pd^5s{h5 zv=yB!H_1A`KNenrc&{R5rdH)+@VbTg;-evd60_jx7N~QlX zOJ;7x?CA#B`U|861}r9duGmOFu1jeGsb+{y7g8rJXrvEOj;asgBSmH+(^hn{TqC_T zh1(R>bdY%!G1EAuVs$IkHJlnfhZ;|fUJn`(Z-x%Y&;hhvU5O8hP`s(p9nL#OS_+M{ z+in`E$dVeVKT~}LcNmu@@}yS!4`I~^GU2h_coU5@gT2!Np{=(dt$~MRJd2r(XfA9- zys6RgI_aY&;LA+P|AJ8j$Qr=Hy@@pdfk@{6&oux!bln<&k2SXjASLhC0Ho2nHGsyi z5P!8_rgAOQCe*C4C}4p#fY#!-YXBX@Z`T02;1AXS9%82Ba$-@;1#1Zw~@zGjpI5K=3VUMqx&Bv=FZp2dQY zlEvjm18Gb$%!Hm@19)PivPRwn*`L6Cd8rYT33d(Ou89)SkI4T?FxHe^1E|d$lu1v$ zJ(LvAq$eiD>Sp-gRcB6MJWO6g>THnQ0CU7%^~i0Ww_-Q_Pe@HdJVOvuI>8#iq3X`a zWiyad%YXF}H6?rbwJZFRBf2^`=0N>r9 ztdY5h7bc7ZYXBSnWb~(_S&P(^d9Vg>)&w`H{z#J0t^o|~4S@JV zYGRVqt^sU&g3+hWshv_6hksc3~Jz?~Bcn6{upDOQ=nmEZhK!dK-wAVng0n}hT?2TmmW%ck zkWZ2@-`Qg>Oc#Y+11K!=y#MK({Q(_&+cjw2=FFc}uxkL_xeeMBMN8nbML~B|I>u{fE%x{28X>z`@itt*kBFd#>KJ*PzrNdMJ}-h zP=ixeSlxnnYegg`al0A!W)D2&e$A4wqENU#Rb?NnPY zC%n&a5NAtPAKbwjz^h}4suj}i2|{9uB}bPTE*~o6-w`mA6Pzxv~5M*Tn z`y%sUgh<{*d;A;%`AIO{bRA{a0Q%?J z##iG5N)K0&vTFdl$Jr>)faoQZX@xJCRw$I8-80ytyFCQhdQ~q)ZQgzB-a_FY~x!TBDDW^)A@n`<|D(SB6l)rRncFJEm zSUcq}opCVbf6<3L^^Z%FR3=aPUr(UC55Wk`N$?dIr@B==hV;1v@h(DnGG88|$olKS z6O{LfnA`{PRYi)U$WHmc^COQBAXJJ`a}<~Mg-%8=<$vmM<#iCC3BuC^FzK{F4|V=O zOf3u02jM_JVIr9F-}w+XU7Ha0cFO;OJFJOA2)|D@VW<3OKWj}K&$O0IAp|91r~HTYw#P*a zgzb_6ImI#K|MH`h{{TtFAf&^S2|33x<^Kfzo(5(ioSO{TDgT=Nly^ib;A(_737|_m z_6uRbl>e(I)1M3U5Wv$FA>UHpsG`pFv7bPF0P&enx@L{3V9I~lO+3XaUBX`w$L|j! ztd1tFL@x|<3C-eMsB5q(#2E=np8_=MX8iro;AO-+5azs!9Mr$8lu_!_5 zOa@c_%Q+a-wMaK4h~!g_o$_C}5bQ~i7d7Tfxx}R1C#L)tS0`*A;)8)D5@ViLABc{|AT8-g%O|u!c&t0JLUg+kv&3sAoK?ckyL5Hl>e9a+2dp~#GJs6 zs}DQnpFPZ$&6N;qs!(>y|Mm?w%54xkgmN)5{vdC5%D=^FHp=%w4puQ{r~J3xZ7cT} zM3j;XjA>hT%Ksh8Ngtz4AWj#mLUXb+{%!rqEE`CB$^{u&#h9J)pE|~#hzcPVRx%cx zIrOZPbj1~?{41PYDl_C?uR{yO>EjK$_>AZq#1N5QE+hJpcx@=M)aW;f0Hujz67Y-G zJC1`OVnR}&E1qJE3ys)6rIrWK2-k9D{#V%!kT+^03aiX4q*^NtUj9BT1CMGhES^pjk zO#LvIuuqX5tw_Y00rLRfH;gG870s=~K@}#4#)juj>Rqn9OqF?9vMu@T)Qtf5GNuNb zx$4Y3Dz9SaL8WN8!6^~;f1JdPBl?XI2kWr=lf09hyoVc{+a6m#m+RfkaD!H#BK@@| z(en!BaD%NZ2W0+Ho8<9?Z@9tsOOgI1Qh6;=xWU*-i2s%~o^aE>DxCj@$dxj{0p*AD zH)IpShqkoJ=OAUHPzkHGL>O**h=8G717)VFhkg?yM^rdhN%oZbmCS`nO`7CT#coA` zQF+!Z)FWy=M`l>nL)p=t1DH6fjds35{>HcKZVgt#mp_G)hT8HdzBWKTE$nt{L4lwEJ;f(}7gZPsG ziAnp@PYK5)$Hph+MTfXhN|l>w=XuRb&v}moGlJ~ z)|&Ror>0`^hw51cq^6FVg{HiZQ4NEbsWsQ;N7C#2cT=00b=Bq?JeDHz%aN_oa$V3; zRk2!Qw5dNH1g)p0#;mDrU^^11s1srNQK$^{&}!Bd@5SKz5I-cS3&h~^y6#WE)e@}; z7gm`K)N3R|o()vhKI8T|oXucGE%+zSrbHU5LraynkV90R1>3(O5A}5)tY)g%IShOy zI~PI}1Qfs{UF%_|v6^`aR}FLrYAMnyl8MqhfTn6z13SXlfbdBTtbO3P^jiKsT;pe+ zs;;J4sW%9JKcU=4{dgC`W~vo~%8>dF$xjLC6jjs%X>+yu4w+Rxj`W$#O4nEIfc#&# zRsLVNU;gE&ON}02d@=gOOil*b>-K%YsMT-x4_5}8-@bd)Tdg#wtB2S_f$Q4;?*2wBL9xRpOWQYv_-z%J5PDv zipGij)x_E8Ybz~(wi}&9f#|nJ)+LbZ!$$_y=SeKDq}{?x;}ELh{EZGMCx4UP+gK?< zwm6V$D?sv;clO?G&)8~S3$Q^Tot4;8yg>52c=rBuZm-faDm%VlP`|4ZrB8cu8&=?< z-lV{JQiITlcr&7spN!~l5+L5ua{E%O`T1MFq#nOMiD!lL$8pe6kLf>!l-GQ$^b+*n zDRe+a#Ze)@FGa}1wYX&-cmMpfmhKOJh;FwX@D)-ZoY|Cq#G zK&T|zKFxIES9Bsc6CNu>iqJmI)B-`LKqv{8_p`dEnaa*o-X2Vz$DKV*D#N9?tWfk z{Tk{AA$8J%HOw1^A&a0^8)qZaR&=u58fH(K!f6H3IiNzZL2G+dPjBR(Pf&zOGpfe? zOF(M$aU$j29wHPk-|kz_8=}z#7Qfa&k?pK2#;kW zrFsUZchL{`eS+lMKx!LQlg8Yd#(MgRuy#FtEK%!4^KVnt+FsSuYx|d>l@V%F!QTOWaZlfWd;6eS|6`KAFV6Wl)G?6E@{rv!$xZf(Ri-nCMIA zc$E`<8)QZ_3pOHN4oRJKX>A$NZW0`6!bJT%36{0`v5bY?^Li3SV*d|o^>S3W=k>JT zKCd?sYi_Mx%HOTkOVf30^>PFT&+GLkF>bAXi1_VV{Rr{fwffQcgSGm>b2-rxi#p*u zR&a1>@>EpPTK!!E8N8BD)e>QQ0pb?0YxNsiFxvQ5+P~a-KO#W{YxTD?Pq7XYAytTU zo)9LIV6DD&Ly=yEP-Cwa{OVJo|qJ?TZw;Hy*Ptrh4GL&6{KZ=IbyFm>28MSI!!q~;vs^V(h1h; z<@QTsqyTAAvJtyhAG_Qcxe{r4vJJad-(kJ8u@&jV$u=}`Nd3}+@;52jgZRBiP{5>rM7i7k+)gPjoOdXto^eiDvMUGYOdA%V@StI8m z9-A-{tku8Bb?Isy%|fK6%!9T1ONa8D2n{-<)+PzFGLes9*&%Taz9i80fNkY3;KVpkZuHP?7 zYS-%TT}b-0>O>LR^xC!hf#Y0_`AM2~t^Qmt2aV>sBu%?kzmpu8x_&ayOgyjm<&B=V zlSsqrU8G;*OdTby)$3tOuvUMpiLwf*KQK3nvkH=4ooIcYrPbTDdYSq+F?0m(Z4~7A zcigRaFz}A1OuyBXd035wDNGoa!^|Ar!CHNv@iHlJIZSzivq!C6tN)3Cyoq)z$a593 zm@lwPfL*I!$h^>QT@?R?{!uja(W%><`Ljh~*Xo-tcR8!Ub@8bo3^348hd_P`u-F}9C0MJ!>uT25Ik~ACKl0EF&h`OzCH~6L zvx7|;sWu2Z3ZT1yr04baK5hy{4MTcT<6D4{eckgBHfp4LY66bUT;bYZxI*ZXN1QDa27Q1 zK@$0bQ8I>+5xgFf$63ltks|Vge~)f5QnQ! zcCG#iCZ6ONQ_-J^0%xO?p@ccOg0=bhqe} z^iP5)63R5`WU7C-#|Ufd3Wyu3*s^Q&kB#J;LDYnL0OBb>Va(>zuGNoT!r4-=_aHt^ z7;|M&pWYxV@(VM(`V#X`h!9z`2fJQFd6%-)YxUYA&+GjcgL*MVU-Ihb^<)_Sf2IZI z+Lag zmoq~Wog()H=PZ`SrJu{o@wNBUxwOBWCDL8$Nu`{n(yL8SbEm|;oGaCk-&w=LrAeX` zPvhzE>y(;G;DSI9)91V!V4UjHY6a5k6U2HEnw9ySFP3m=a<5pt?{|*>Co56rl$LXf z8p0_3d$O&cHTy`Y2X!*)Dp{G#sjEM<{)YfRA^bBLkV~AL25L=js)cZM${!RqF0dfC zr{!d;dh)z-Oo)z1yC(>9&dX_|j^Aa0^AV0q0OpjI(^)O($dsm7C`ITe19CpfIa^)) zJ}p&%n-H!~2IPF?=gd;4Y_yGdJJM&92{|9-6st4HZ#yxu58=UNK+Z=w^VQ)E7C445 z{AZ9+b3V$sTs^P{?YaoEM5wDXCRO0^yq>Ia=d4vPakuUQ+MwzQGAM!V5X@3L)NkEc zQjw%gfta75bjPVt(+}tTqh4MEb`{8t6)}v-LU>ME=$chbZR?CZ1oCtOds*VNhT4TL z9)h8Fk$#aNk~?bYfpfZrUiu2`PY`*_hi$UvA?KWdp@*w6DI)2XuLd_4KsTnCucI;@ zbxwZhxI$aqy+MWsc4EoYgwTMI47kNu0Yp4u%u>>~<`jo^x3spdfw;MfElthyL$|$W zjXeUgvx+h4fpabiwPr0*m-|N$Usf@usmnusC|8{@j{>ZYv$?bhldd)A=Fo1I0(94! z{TIhyd%;YLNXBjpy~K2*#s)*=RWg?7GUf5-pgXPDn^qCgNy?&QM)VfUMdZ-*GoqWs zZ-V8Y>C{BPbK?D6tGq7W5An8|@CrpQ_g|S$t~4q8_GT_DXff(nnB)%^G$|X(va_lI z8xw#9-qBoHHMy<>c2pyR{j^3rI;LWB5@ANPdnRP_^Y~&XQ&%DSm zc@0Y5qs=M7u0j1ytac4b5|Conpd=%94NC5y4%VQ$|HI%9mnNo@*PzZLaAF{k`<#90 zxLJf^4eIy)ibpBP-9`K@6>61McWY4BFXE{rk>A4Koyl^u232qw2ZCrkh3q+zo9Nvd zRKrV2BEf1Oe_vTSBV@OHWY(ZA*lVpwF&~EutZ4b0SAJlvWFl)7$ej_h2Gwk^oty3l zaIQc)E3x%>$*)<1x;}@FSw79IW)M8T5~Y`(lAk@3wkrjm8odEDBHoOse|9?yPNqt~mlsB!sFxMns>k7iI{i{!-I3zU``WX=lD9ePvv~IZWO2*X@8Nsl zYpG_~%s#4EGUp2#WJQcirRwlslxjv`hd^LnwPdw^=e0k|8l^})%U zp}xYFnhr5XsBPMIUDF~$s>@~;WdyhqVRrd7vbBvw zANjfyIJ_G?Xe4dI%IkM%M5~1!z_)s!n8_DgNygN>S-3Z@F2EJ&^a$I&b^=N11?H8-xA^k}R zlYZAq)bnIrUZSXKK-I$;z}2p91NGD!S6MS>K%5m&)T?bIF#v656v7Jy@O4Daj%_8K z#@On=2xPfnI?J(xcoU7};U;!qcL%}uRigg2`;e;QogbhPDbdvE2l7N^!~{#a_`ZM$ z#XGtshdn2&IO{d`WFDRBO4P7qF^?brWUy1YZ7B%sBqh&d&dG^vKk*aEPRphk9A6y4|qx+#n zvE7Z9EjBq;62)frf@1U41&|YQX`+%;ZgbhaEC`Q1fLH&SauYMU*sQ0WS0RLAlXPe3 zbH(V3W#HXxs(zo$J)C8A`N#t7IC-M1ZKWXcGxbuf@uj-pI5PhzmZYTlDkQVBYVp?umv*7-nRoMA>aZHsf+a8s@5Wzlg3_;yYI|ohoetk~J~@$PeJSU+X|NGV z?C7jaU6?--@ULx9`bY*$K^xo%xD}Ts8cAjOA9nWy;ie7#&c4^)mqr-0L9wTsWrYxu zGz&N*`VapRVMbqJN>tySFU6;ujww-FpcO*AsjF;(-a`pyrtoJA)Hfx%Fz$IGQd9UV z#-(kOJ@bNrphRyRpbWJV;o1bHAFa{lsAH9))lE1fI+A9>xd1dGX&v3uw9ejCpeay4 z-!w>fR97z1pV0bKViJ|460Oc|1Dpvrt<#jK6ll;Eg95D(LXw`s=Cq!Sko9ej6A2lO zwSwrqjc6O$}MVEl@`? zbL6|2$5*GNiAQ&mlW%8lfP8CYT!-h>}(a5@KS<`wcL68f}ogBQ4f%e+!P zhM?~leS&HC%$4$<`B2jWCXC7%v}9f-`{AZrl*C_zWK|P2yFtH2xVDh%9rk z8i8PXLU;kirC)U)lSuh==zPIOs7J_%^5L!uSi4@)MSn3eGjIH>Qc`{_q|v*<9u<_2 zE)%EzbZ8g-@yX1wtw^BMp9bFs`Z%y@-m-7LF`7B?u8Yy7zBKr2MaW*brA9@V5j}-y zB6xiYUHn6aw&okExplbH)RPaecFJYnHP2inQl*9<9F0rc!8{A!kK><TXJ|z#*y@p#vcKFF~DQxy(we)^SY|ir5sdE z2FX!xlG%!wsE`kI=(cb$oC7mZk8|C z=)csce3vRCI#fjKE)lQ%r|N)=sC+mvHTts-DHcTN)aW9-Lk`U5NblB9{0+D}wbMuJ zCyG*}T*@MR6qh!iKb}QveTptiBYcst-A!S#D#hqubz< z8`IM;=tv%Y{Ex{w2dE=xD7MJG-|#OEBmp2?uxnbU39H}CKO z*oCIpw8055#llI#m7YT|Jx&+3awQtW@5>`R6ie0gHIR2}dhN~axxaURG04bT&ji&M z(b%gX?{fPwrv!I1T>_7-rtrra;48RMtu4D{mBYh=95tR3=cf z0HjwN?4JlUrY~!QK*wuqeE|j~pswoE#>ATc4!M8a6wnEpn*~!UoGwW7=8!IG=XDqy zw@Ow>La}NZya8xaU{HhRdjwrnzTXDh6M7eFyt>Ap2Yn-fOPpjqcNlgjzE6SLS~^j~ zM*x2n*wp3#_1!&illL6d8LFX~7){O=jp$0NY)a6O&PzE(MF-TEofA%?S+*y@HOtQG zC`ZqLOeIov9)FW?Y0`Y%38*XgeY5hBHJ3}>nw%xbF!$^uzl^_?0Zroj?0{=llQ|B{ zg*CS|MsM?QGPsv%wgIO-vWmMCIQL*MMT76c>`QRdRow^RTCPwWGU>YLQZ@Hmz~~le znjzVZk-JFFMRLf>G0kgkBw*m_?h!>yhKlsUn&_dv$SvA=UH|49KgV!LeF6}PdbeGCiVpFLrh~x%bn%Gsb6Zp6DZgp$a-)9=U zueL!XPrTKwku?JRWeFCGfl9xQ_89rfX&AZrI&$3_MX)MNUFcw^D_;z)TjTlaR=1(Z zZx*wsDEZ29&$>1C%_q7uogUE{l@fXwiC>L!DlR(Ft6Sqd?o3z3YiD=l?#QJe*WqkV z<+I1;JY-I7b?bfgh_200Hc408Aa@9TiY}L=Gh5xp3w#ZRHTWUW7ZuHVGt?X@TrF3> z7$Mhru1!+6BFc!yupJREwU4*sC6cCr_3Go7Ce!I6_FY>~UpN+{p|ArRs`KH- z;nH*)qtpF;it+|FQDQ^I`MbmlnP;=T?sRpuYuWjBxoXX6BNKoH7~r zs7|jU39>YW*IU%;c906xE%cU47_oFWyH~07x2{3j!|d`cy0&yKwR)P}>s9(crR?@H zyEm%z%UB?+b+*}E$1S*$f?9o5oEh_raA~!CeJ1Iw^5}gWH4T0)E={B=_5lB0u5X2xBDgXT(qJ~C)3vASL6}<4-+h5FD3EUs)4QLY!-9bw z@T6*b59E6RO&6-UJ|9)1)t;*hE~2?#VE&TwPungD0{oMCkgolX+v#~bC4_UN1{>Dm zF;bjKIH$gC>~!s)*H1H1&GaT{M8L$B(SXfxsjF(fmt+o@$GW1ex8t=&9QvYKl)sI> zi`q~VaM1sT>olIAp&NnjPMFn$H+xkvZ3u}NGH!-WL^Vyn1o?J?eo0EWi+ZX9X3tqB zhkhtlU4!2PF_A`&_@+5^aTbG5m)!dYfS)_}nP3=sqE=}P*j}q>jpSkECEL*$k-pAO zJB4C3w8jX)F@XjNnZjA2>!{d%oscxmERgsw4WQV)B!tVKlh|}UKR#BIF-@*ZK)L{E zbrPNteH4MN&{XYZ)|)<-uX7XJ@t67x9=m3XU$WTg2>b3Z@2sA`kds)~=1RosAO5Pt zq)Dl{gKoNdeIhAo*=(Slc;lec^l3sq$e&6YP!sFf1a_$5D`eq%oo>!96~ zLL((o6|Y16UxF`9l9z}zi$P7-CZUTHv1;>nA``!#>#eO` zAu>$(jkprg43!snMNZZZY}ebok{9%Lm>0ha+G&nF(-ff>_Pn#vz5q8b z$RlRv&-X&TZ(k1XV52h}x3QRvx^#N+dJ(=5Vfkl> zOpeyGc@g$g$Lpp=sm+#F(cHGe$zJ?(B6CWoT4j&05O=b~aJtSCSqUG<{kj(GXtxt0 zyxHS9j@;fb&)0`h{1n=-Gdr=f zsfb=gIS3QWo%y7u)z%9=6B2>6t=aS2$?jEpcMH4iWw%`KuD2~uH$VM1OTASR=!ekSwn~34*eP$Z zM!e%auPuF~Hu6JAyn&G)LT9c$&?miSk9}f8h0h#GN=S&)9VBzC{3c*ysk5QN;tg!5 z@N#X#*EUWGALUFVHk|Gk*2Ye3yr6A(p;N-*6BAxU9%7%Rm$pMq!_};^Q(AVGNkAsm zlGa!h&u#o&}$7s$FZBN z&H;3$gDt3{6Q2q0uqQ0;_ag8{*iBXWG_Il@_mbt;gTD;=URAs`xWo2Z+#~E4(3B>X za}XbdXzy9RDXFh5KY_q3*bY_s>4+S5%;Gx<8wonGD&CEmE{6^1X6u8nOF>_B_=`<^ z+ojVvh3~UR+9JuXM*F;CvFGBr!^U+0 zqeX<@h$|7}L{*Zdw-ZX*=xtt!-$i?dmGsfuT(77*GZZZga{0k=ap2~+hHZO^fs4sO&T9Ru@>&{ZW;scYxk}?mHOWdrH?N0 z$k8>sn9oA1ty-A@!glfKBkKXrBh-J5H!c>k{1spKfW#{FB;BDhaR>;lc1r5pN}gMO>*xQO%gj(*ek;& z?946pQaeeI7m=@#7mLyvzO{6f-7dl6?FhEvO2megXOZ3x^NKDJ%TKe{G`oW3(o!$A zm#)*&vcR{{`O1)>J*p28)HaDjXbHFdTGdXbq@h>`-Ast0W9dNC9KDd9(PC1ONU_ki9qR{adq z+bkLFW&6MNsHC&h+XkoGqON(`VyTXCo`mbssze%Z&7?zA24?)4*sVun8wFM5EQm*s zR;PQZSM-Dol}~2wNAwq8>212>@az`q%|$r*^ZI)w>$t8%~H?nL!X)J8O~ zl=}J7FrJmVCGqp6ZP=Z>`K8n_I~;$Z@?rC(i9Bbx-1*W<>`t%wWpH-Kn=eh}d4omg zOKY(^vH1(Z>`omoK95AY#5L?=j}^*2P68*hrkg0@jBxo1e?CXXZV3;UFY(KswYkdZ zv-YmR>F?$^1CLunOE7dL@J$sA>0!a5YPI+jgVy#vR?*+Jgv;Y+?UiD#KL{}O zdDWZ2fDAI0s3H9%hGvXfb4*mzAugKhrM_%+276^rGnPu76p~U_(*gtW#>}xf zox&j|_IJ^JrX@}DqkmJL87N<(`V;dTVW&5HsL?-zs{I?)6I&%GUSG$VF=Ohyl*J3o zfYa&pKF8=@kM0QcX3u72dR~fn^`Mb#&r6YPYcr9K4c+)NbxX>{(-|z&%AAev=Nel- zVQam%)y@MmwixiwZlBoQ;(J9MSl9{O5BMZb_jckT|B<#tQ!FNWSd#^IJCcllLiizE ziKx;HyrMy3=oj|VTPGP(oOvQ`C1~y>FVapjVNXG#?JRDwmLI`#7uexGe~e&1&vMFVaOaDp7USQ56q|aMlmmSZY%3w-Nq0u0+g8Bs27O zLdjgc^@*iiVtJ9>eYiv{`aBTnDS=+3o0O5*akjIDo8pfXhhl=~WL$|DkvQJa+X-I$ zeoSXua+=+~i$(|Nb8z!~nY56KkX~G$2O|AMpxeDf8vh*=1y*&?2;27P;O9Y=iwUtH z9wlAK{8HWzYFdz7)(sI0E0|mzY&FN&?e$oA93}t73MNQ|7vBQ!xLKC}3I0papB(Pe z?8SG1J8ZGVN0R7M+AxH`B@(Eu9|CvSdn4?r@e%mGuyZQ$xn);ci?7=4LYmn{?Pb_m zK8(B#%;5D;R`jRc)+7e`F7SQMm`iJEgfT&6jTDcRZ~VawhGxgCR^ySjLebuX=Ap{k zoIoNQB~;gqjIQEu6MGY@H^*+@MZX3Yycsy1bsKx07f)}%s}3zzdz6kY+dBgr-C<`t z-qz)6zif$RPa3s$!pQUt-|BcD8C~ysRJWpbaa+3mrE101G}PCp@ZXziSI38UwsR+< zOI03mA9jitoM-YHCGZUld{Zgz_5S?07db4!;qn`4N753D{8wmcp}z@CZ)Xn_@u)eI zXcP~T1Pb@8wHzn%5!-wl#r1YuKvZ3zd*e#PhBO9EI%2yecR@~qnw3mmrqu8zH!vca z_H9pdr-Z|ITeapS@xHa|Mx|$-?Sj6sq7{ff#9HZBo4L&@eltmx*cW}vsnRj2=bIvt zmm{RE{c98}z!4kN#BOsNaWJ=MJdM*eTYU_9){VMpa~guhI@;|P@KKT?+I(JV$9YVh-)5Tau+k9=WzUS&2A2)6v7KVgEK_&0mU#Rfdf~Uc zh(WC%Y{mvLi%Pow=O~Suxh{66?)nEE&HB?ao$fq}}d9yEU2vjP}~D=chOH zop6qYnm6W6SOBG!qwwNyVAEmCExrQ$CeY1Q@$bP`SnMvlJp{fB^nHi>iONVj&GQ_$ z)AG4Zcv}W+>KT3J)2i##lSUlR4j${<&7 zK~w4)^je48s;2W@1s=6nhTZN0e;D*xhbQv-0Jz3{YOJ&6o1e;x2JGLCcjiksccX0_ zIS8vO_f52&(nzbk0_8?$a%(uQLeuc#N5CDn+Tw@6hl2X~Rry#8Ub;>^ZuQve{0oi zUtsEb7uvDTG<%$G_O3Dt4>SHd{``dY3uxD|TCME1xxBe&D608RJ<(LYfOlLk%denr zE(Tp$6_2#ywU`#mx7$PDTS2#1#hZZ(ChgBFwR|p7?t}f!@j+%*&!z+L6U}}A>Q3t_ ztGxy7x?Q-d5Lc-Om;vsvO%{(5mfM93i7Ac`VjKS#MR%os_pI)3t^##x&sp^X!j_?V zz0*#V+6yBdxr=-7q-yxK~cQXkAmNlNL&X<)TGwDbL}?wbk?HK zywzzZiee=AaEle$?H2H-LH7x+FC>E4hOQyDN7Qo|m&0?>gA|QZ^R0Tc4IcqIixYI_ zo!l$AtfyvYd5d<#I%bt+3t&40?8<=s3f3^>e}{#40gn&h)d3u$vvACRE!&)->&k$= zAz&N8I_5jeu7G_!U~dlC&amIP6#r%6L%^Q}@a+LS0@yJpjy2_<%P={OGovX9J@^T6 zFTtWhSjU`h*)6bV1?=6a>7!hQNki; zqZHrGpVQcEHCLc{Iz%_8DIT)qvtA|E;@_dP#lkPz?IDyVBJ`b-D~G~X4EC%2qs(ZP zlm4aMSzoeRU)gOgXS4Na-tV-L> zb35_oB(Azz;wmM61Nb40aVZ)aZ;Kv&Fl>S23)bdO;&vD(uW7kxXFh-mv(9lrnYY@s ziA$gV5^in;KC#Ud?5qC}U~br*sWw8K*iMPAdV{~T<9p$=w zUAQ>*e`<7}Q_pA#>^_;b4BFYsE0I7(Fs0+XV&`d=5? zhZ4>v(A{AzDN3tRCs?tllbcrGC6~|C5?CZ@2z|`oPdHtN;!z7^Fp$>Zpd>CL+Qo13 z=S)uVt?lSpyjY|+O&eDtR;b02LwY;eYqeoD1u_|tDUeuJ&u?rM4I?nQiegzm(UyWL zIur2}8^vXITR>E+3D;TnV_89-#g>C^v+yq99fa#V$Ff|WTTS&z(a#7>icZ?Fk&7FV zs!s__PSHsldj5xC*Jxfs?2P|sf*q|i@5U{3eQc6W+7P5jYynBxc^}yA3fLjAIz=aK z2vYP^LtTRRSo)x+Q+qUKEHT9fNAc|YNg<4VMc?qG#hB9B%GLfdb7&;4DSNcg;S@0P&kq+$4vJv+^siPHNd)b>h!mzLtpv_fe|UUxMX{V z#aGzvI@B`B%IP@WDTv2(3SuoaTE;mbHLCTcT%6uRR{xlffeGj=at6dB21?~)U3JEo zmdA}5Qebf@I;XnVn#k|N8yF{Rx`iRn}&(coMGzuw1Y+8v9@Gw%RyeT zC^!SdtfBoFT1xmzT#0B&cV1L{GM<~*+m6#`2=S-|O_;f^8sT;w8f5)A<&US}^%m5_7{r4wVJB)S)(RkoB|$dpJJp-5}rkSy1CK@ybjl*XXj= zCXxB;Y*HSaWm1x#!vrUSQz*L7RnpGKF-N>; z6$y0K4qB@_usQ^brMZ%b*XrYyO5|nw%QsOb_n_j?U#v<-e*|z#ak_BDV-78`6n_;R z$DTafBz_S(TM#~0MJN6>xWi7j`2PO%KOew;QI$V|k)PuRTE1H@MK_d=5?3)v@fP3? zn`-fO;AevNsfrH-*O>Hw3oU;Pell!HRemPC!@jY2{s7Or4s@Ht&!rA1puECy5ehkC zr=7W_>}s^XwOY|aQ&c<9erqWAw|(N&gYu2v5AV1P%V!KEr8MdqxJr3{1KeSkS$q+A z8_>ZH4-$9RG7?wQCC>NaKcMc^ZnWzAQJ; zsKKn1p*gvV_RVX(wM*ly&fkif!qWK={Ht zpCUCqv^_mgj7P8Ip%SZiS+PmZe)P{pcTQD(a>J{e`y?4?fdQvjTw)A#8_JCtC_i1n zK&U*|#GhLsKlRM6$T^x($KY!W=f(_N zrS`H4++htZo_`MaWq=Nut%{px!Js*5{m{m*Q%2iCJRRZnfL}s7FWe7z!>?_4M9_>q9jDVq5YP zym&{nZ?jsxchx%ox-tN?0+PTfI zo}Y+%F}iW9bHzMcY3S}m@4uCG3opHlgx{K2Q1REJex+3#I^U@059cO5RI87yly5Ko zEV#oaS$qe0YtXYCp6Ia-f={+sncZfL;HnpNhTwVu#^ub5hZ$rqwA@C!T?D@pc8fFb z@WQtmk(nfJ^%U>n7l09UE`7l1pg z`T|pO>%cpL_N|Iv0q(HQ7C$zU<8KP=QpX2*lQD3;zY~jq51{VU@~nFPC_ep$=7UZ< zDELJuU&chM#Y*gU2l#(M^{BM|R6QzP+jC+1@%}f2%D3(Gn5z5|&ZS9rCl!m1vvH5L zm2n=EU}&_!m592GX*B7GH!ZmcauC$WWHLVIa_)<^#8<66(R*ut!t&@V~(i|>( z>f38;);r44K4g`S+HJS|XJutC{wTP^s+HQB0{;{=`+QCU6(XBI=|ZpmT@p^m zP&(jt-Ue(JxAIFzCGF*v%E46sE*W=*%181n!ikK{)^m=pZsW+Z+hfEv7<&b{3Q?8z zT|>T}*PoWuOTEvcoo%%`+iiXxA9_S{t7(YeFvBRy-4s`wl_My`WO7hYW zF}@zG9EFy%Lh4(s>2{kjnv*`7P4g>{)^AU=nQLX zk=tT(C_4F-ZF=z=e0axQWBL8?7sIZs%1^w46%dQvZnxc-zS|1A-QhtY#amzLdFw6q zfZeVG-v|0Xjr-I>z_%JWmiFJ5`Fb-?kuj~~Y&$7XgTUlTfsAQgS5p;P5-dlPcdA;= zkRT&doiKy&PBQ1ejz9Nigr8)6RFG@jT%NaJub@M_Nze1(}@HGi4D`p7h{4TMW0ls0{IU zW4K;dYB+sPgR$zL6Kwvg6KwK-h0<#*2$#@LsVoub5~!!AaDAbPb4C)Y|XR9E)_iUj;e(49Gj`3&u`Lq${fshYvt}qH45*xC7~Zm593P zF+v&~RX6_13s`8H>Sgx#1eC3-28~0PRHGAC2Lg$G8``4pDGpbPr`poY$R`8jrBLpP zB=_?{%os~FUUE7-G-m@nxF1q7VXAvu#XSc^NJ{ZF*Di~)FlvmiXCe`&xV7->r zn44t%(?D%SKsn@Wh zRKwgd=UHeyUa^>X-OLLGoEiF*-s?D5PsY^A`x|o03rFd`ta;%x#>~ zOayn>VT&IF-w66lC0xgTZg3;prKmcUF&C3?pMuZ7kf|{A{-~l`3Y?6=1z?Wnzz`bbc)?B!sJ_o9~|#v zQ>;k!-mbS)Zz;B?TJ$D6SGOOP@C5n>oX(_SHgAdH%O>1VtK}(sM_7cejhiJYyp%iT6cylT~TC)V32;`=T~HNtL&T$#WS+w@acYAef2Mi53ru{y`Eg8m+9A zyX`h(3UdR5--0U{yENzA0-Jc>O4`DLv;s9cpvO@oGvV#RSL_yTGcM|yv#0gGHmr)3M>_3 zw;2VjVX;&7o^njOj|{7WB-#?!I12;OrtV_>Ie}em}CRu@$xL{1e~ywf3-5nIFxZXa+rl8C-tG@|v~rh~4hMmc0D% zxT!WT;*q>~ku+)E1?V{TC99Lc0(5Jzv#RJ^t)^!(kKmssLu1#bUbSs&5o#}^GJi7t zR%4AY={bLH$)sSf*ZjHD7qTbAaGCNfTWWQ8+3hk_tv3<0yc&R-T&C{iaBSR44kwCh zVWHQ!HM(;BL%lEB{}<c0Z~3kyPlbvnFN1fM33nT16fz9eMOs!HXd@sNNsS77qwc8xC`LjK*MFBZ^a*iPSwb;6-@`6f`$}f z=@o4`uMO-;400zz=?8bp?%ET~sim~;Msx=m={CQ#m~%*|>Yn;(4D6MlU(Tt-r z#>V8*S_fs%)L~v}H;T3CIO)RV09dV5H&WMhnzQ()wcM5&q$dK))2wCTKkANh(;^3+ z`+5qtxa$msLxDn(%K!?O+z20c+*Ou80$*pkOM2WzKz>imB)|GjamT)Cb%xPFUpt-g zx5@7^mtUD!YP!tiX>w`1)15v!EN#SDWvD7{#VIIndI)8vi&w~lP$Qggzwljz1B3uqJ4#W$vbd!EpE_dNbA(OrQ4&0qS&t$P5HbN45h+bXGXsrb<1b4X45nJzV3U24``hmHGOY6i8JJriSY*>b&fK)^>_jvblORIgan< zqp@8=oauZ^w`EG;TR(_nyNM&WboBtyFqPi-;?^0q_n#&Ab+x0ZxFD|vVJ z=3BdWVK;LYosCv{)+iOo;kLOEmS1vQ*_&k5$3RL6v|F zEta25B0dcgvB#!*{`Bc6m>QleS(q^xqwhGS*R1jjC^wqzviy!!E^WcQM$>mpZA_2` z-)|z?dnLeW`jNLxdQY9p6;5DcuQ8FQqks9 zzb!7+SwCW;`Dt<4>(=}XtF}z(XpWj_miW4ZlagxstJIIPe%pH{mXvwi`a&$e>EM2q zgHM<6+?Pe=*Sn>c@Gjn|Te9w}emB+Ji>p4RWFDhwZT%F8vv|~6F2(Y8EEj66+RCWq zmfdUR-`MR%x^w5Pspd!@&*_Ns)k)ZGp`5M8@0--_#pa)Z%@)>XLE*)c*cLL0L~18X z!uoN^)U>SzoN~<%jFHatL<{CHC#t*jwn}H&m&NpJ&c;kzZAJzjh5fHc+TZ3E-nc{W zn|8L|zxW98`8s>;|3Ajw1ipsr{U4vX_vR+CC1i?_MC1w*61&*N9((MemY|3&h!j^O z6V%eG+Knm|ElRCbd#Tv9TD5dh)uKgp(^75Gmf!n1=Q)!bpYP}M|L66Z%$zyzXF1P# z&U2n~X70VL3T7|}uUZVarlLVgXnPjE1;P*7!kY@=2*c@;O;cu*N?b-<2bVVDj-n3z zQZ}L3WPGUu5+B)wHnItL@o6k&rc6U`K8?j<2Sv(SoQpon$wn5SnIB>U)YDGzrHsj} zlK@kh9e86iWr>~)R5G}mKRAKxs*@zKsL#$N`VEwS4bY`S;w$pr#@3@}5SRCv=B)at zPi1!f&9$viJy@r=2JxWTTj`Q)!frle%hoegZ!Wv8r#Fso=keJrQ5@vM*e*%t=bgcP zxGuf>8kV&9^9!Iid||Qeb%6B>$;wi7*kZY`SX2fqMyo_%#1B9sF$PtSiJ&s4i(3j_ z_baL8HIQ8)GT|%J+0YxarBhE=M$8t5o*_0AoQqavj}-xFhAus2ZuVFak!I*JBt4jx zy@L$-8pfk%mTZfO-ZJUUF?@r+%v}=ADda{k>cbaM@9oGopDl{=OS;T_l7y#yi3PrA zsZd?1TQYv9qf~VntGbR=U1qYb3t87?tZQy|_BGOV34Fk_g6*zU zU9Ho5edtxG>g!Lbx~7n-l}mubMxm-w@#Al#s;8$Q{#DFWX5PqVzMUg=-^jXOlm5Jk zb-$7$&Af?KKb<4Zyopucmy;cg)Kr>z3#nkFJ#4a#bqX1UnEP**gBiBR5Gp)IaP{iQccdO>Z+<7Gw*DLneRR6N+6ij5(qd2OM&bI}$K z!F5Wg66(9LbuVS7 zcb$X!ZVoxtPiLnmRzrPvW&P~*l{Dvf=X!*aLx_wXvxj)n<6N{ZJAKY}+)(Ab?Cd;h z<1f#GYhMRX>p5lLzE~c2BR{=f9K@aSNMPQ3K_=;zu zumx;DeUB$Cw`6xbfGsLaQMQ=Kwz!=oZIQ{gxRxbtp~{!C(x>kM)91OZr?X_+C#kk) z$+k~YZO@WzpNytMKH8oo+fFyAoR^h-j@mA?pQf~zP0cCXR8uuITf?Mf&Zf}%0$b;| zENMMe-Z4#DPnCbelGP;lcz+S7Rtl3SOKkZ;T4W5IpctM@%ZXqmTjWxXw8(30k#jlH zBC32kC%pvCE~}IUa?;ykRbrPn=A_e09-h?>Qx47*Iq5C_0$?>0%*{z3un2(H*&;9G zNDHmua&As`O=_>O(0T_wKBo~YP4t$q35^Kp4jZ|=55`7o7rY5U`vjvcKbW$a-~1%c z*U;P>Xl}Y-yib^f_MFqZBj@q#FVOCMoGA0emYx1@V`!`DZ)d01N)=^Ue<|DB`9~?> z3Ja3i-+K;IW`Erjn} z{#nXQL_bGQRgF3;8b!I6I|%U~cp3wgJ`xAYKRC;F3${bnmRiR;~}o)r7jS1}Vdr}W0*Bu5~P=jNX-YANlL9!seR`cT zB!^RWTx)Lx!`CY@Vrk(LEFFu|%?lJm-CP`(tEVz9_YTLuc*w{~gKkBgG?Zw{^`cVf zlBbxG?xmbEl%}EzMxBks+7m7qE0qWRD#;>|qdK#d>fx+AWWSJQqVC3F9P+-xT^kojn~Q!a1>gZ<0EV5UIp+S7@%_{`aJD@`hOblR-`Jai zkeU6V<{LtYVqVkyUAFETr1Zx!S4w%Ku#`7!DIYNRcqS84HWZTbUIj?mCZyD4)I>ff z&cHU9Eo2)B5zl{Q=WkP;FQNjayV~=2}m~COEd0_g7&2$fI&JMLl@gydZ z*mw6FandxSh&!71W&5?6_^1#TK+>#7M1#d+t$i$}Jp;`Vfl%eRlag+Fft) zc6MaQ4nC)X=PNeP(`>|)biv`Y(8FOOPlsyr)`029qJ4_`6Xuc+F2`*yA2XLUlDp{& z;z9y3UltM+?NxyVf+OHCv-{9JTL@%oB+=7Z;fnKZD)){LJ^s*&P7!GJIMEZ5Ef zf{A!?0lsZYfNyaZMP$YA4~9q1!8dED<^ki=x}q)MWu;sSS>{iU|G6Nkh38&UlTwN# zJ@_!BloC=nKOFlv?v!y6CH*z#^EEKYuo;xG8Ej|*fn~%b%O00blSP=gBZ$cvhcTDL zxtJSlE@6rbdHM^q(OJ=@kaL(K4-`Mx6crUk`U-4a0Z!&&#VfyvJC$9Ea0@fgOa$K8 zS*q!kZ4T|Ro(EoL=VE8|5RIN{;*O#|$y`#w1n*_D{i-P@r1&>?K~>YGkUug-J}A}_ zg(*6}rXm?TY48}rlUdkejh}!+J#j}-8-GdjM`8v3g)O(9VnTA84Fy#rmqIpRid;~X zovk!&hHp{@FxwxaKhcK6G;L^qB(%e_>od=+5?NZ2<&Ox`4>tSM(u+ulVb#j4T++4wxLbYjavI&FJqi7%mj zn`K5Y&^*~2ec#a~w-EAZQK)%3yX4G>Z-Jt5I_rDL>EoiQLGe#|DCKA`;|u3(Iel0T zzPX@2^KZ*QDW@;X`Hi+Fuob~_(z3>5zt^R&{vkTk* z60HIjxaiv%m3kMMc_g-t_Sjl35L!|ggp7VB88l(CbBA#kh{ z9!xu3V6b2gblBulgyH|nc4^pF4|z$o%iLsh7@R(W@YL(f!P65eYeh9Yy?@ndE}WBb&*OU;_W6U;^{^hu?eThJb=s)%?&IcsU(p zHSrKzcKxqPHfdX?H>mEr6tWXjBrZi7Y*XA<6jIy!KH8dkvGL&W&~+4Y6!mcCLLU%) z%jWV>aUr>14+qs_mqN~C3JsI?ZJXk;q7Wa00i1-;t6E^t_yaKT_cImcLFSMO4vp}Z zfo!Y4pUO%tu0OzMG0z10+3QQN+;b*Q~zYkhrIGE zkMa)){5J+975tQ-1P41F1YWcSRwyj6f)eO`%$(~nnP^ePLM=)KCr`AWVw}UsL=y{? zx(k)nqHPJH4birQB*stkl~AQX0=i}*vK3D?L7}*xVssvaylM-nri6H3atJtnn$c!U zT@%M*$B1^svy@bkGnx1ZjHiwODDJ^dX)FzC&SP6j9b3vpW?q7Ea>A}Bg_w(^l=_9F zlw1vKH5LfPy)RRzLdsA)nvibR*p?E;^?eFSX-`0+Q0{8)E>M0$Q8t+j@$!i~>7M zuaoIh`7E5EM}b7RS{yBI`iKFnqQ-%SK0{sfa zz;wMPL(CvQ#kz~1Y*^w-eD#|xVvyaiMuP<04rljSQYWSp4H;ZW!p)^HgJ+nZV!fQ9 zc@S~j7BP%lvBDJJD-JxZhma97D z!0#4}7G|L@Xp`?2jP~OvSvlUDEb9yAB$_o=$@FS`TUE;i-gv))_p&J7xqn5wy?$T1 z`Ey3e{!*<}sP!Jyl1}5bZA-7m18>{*PnOb!>4XwlN(m8CSJG~$>8CiC43HA?At3@A z!%~82a>Mb|Nyw1?K))g4O=sRkm{Q1?&N5O&G%EfE)S4sIQv7E#I&u|WNwDS2VKMtm zZ#V;95NGtij7KjPa>SPkngV}s))h@zAOMQ}-^?W!Vt%y6EGQ7Om;n#@ETt?eBxSK* zZxczk+Ehxyvfg6}gknEFP+IL8#3V0QR(6g@5&p@j+f}t45^BI5BmWYV7wvdRg)`4WbpWbs3yNhn!VlgmB(OmiC^q{kL2oirLtgNLEpW5l zB;jeBMUza?ruIy*)>p*VLL%11LdSRf6zhRSdB8x#U$%&M?2eJ%{0^H9ztkp{=&B6w zz92=JT7Tvwn)PlWnXe*E_w4mkvOZ&EK4kXAVnq(2y@i{#x1gu87=O`M!u~=MUPu0^ zc@Ft0)}4yUW<{<+9I!r9RlM^k zTXF0u%N={la;gl=Ww9(j<|JgEC?xZ>`jGj7pOV#pk=GzI_f=)M4@e|E|48wMFrdCK z%QJ;o4hjLwbAF1IvxIC$VjjN3%w~DcZiTlsv(g!8-aP^a7ySCj=N3ZgOKSWhnqg$t zY6us*?x$GSWy(B=sJl{WeVzLv#T&%+wfQVqepjG00#`L!ihVCkskm)ow6+%M!Ajfy z-xp|}$cVRWzBE(+Ah?L#C5-nU3yF!^gQh(cv!Y^OKS^+POBEP zq+7AJm@*e4YOYcyD=9=!ApWx^@FfL9(XghBUuH{0$AlCTv1b5C%D5Hh5+!9Lu0g_L zDZ#|@zl<%y^FZM3X?_>8F2;nSOF|1oz*c>$!NtObR*HSmQc_Ifo7nKchZf`r4`*Ag z;8-YW5P$K(n|S6Q$duA}6$%+IvOp}1H#P-gquol>3?|Hj$WgY)XuDxzdoQ}cc2yal zYuXZFyefr6j2sCO)!d5pAx3JL+|Jk{scO z$t)yh)Ov{NEQ}e+RQ>sU4PxH6#dKEY@>b{ieuboTEz}{&g*xQGRdh%%w`2@=S;3Tv zh-ww`R6}|x3G(55FZc54lqn{A$1r@kEfAjDr=S_=kc+n<;aRt0{3#>zARyNk@T?FZ z@-OkS-LtlYjf}tGD`7x^1oTHUq&%L%fGuby z&WK)A=)Fvp52|ILlKIG)g80{?o}d{nLsRryIkd z#Lw&~SU+ZtD=1xN_{e(C~z<;opT6{QD^d|1PYcDq@wkl@+PNTuGsSeHD5v3YdSSMlG>%=n3$r z)Ke+)J(FI8La}ctlLh$Gn}6ia!ejyd)K9{jn=t;S5;;lp6!EuR8H07$zYtQ=Uojpp zx62VCw_|%{BRoUAUsRGMtjLz0Qqo^8CKhIU1ItSr4Xh^5vh(ZsQ|F5hwRNkAerfE_ z?>b~-dm9p)2qoxax@HQt;yq3M>CrrWiZ{!ohabuQwECdu(B9>qrv&Vp2ZFKwG%m<5 z%t>ufPGHY(2`k{@)6Ed`2bb6QA-f(=8pOD_9`ew6`Ny{OTv~2d5X;C66ZL9%< zcl{ON_8O8wDi{=dTQPXoR@z$*5~#iS-Din3#hBdfpNJFyTA6t2i?<&Ai5L>iO|&ny zm)nqLP9Ph7z{N4SdV5ybpSk@ArL*Ys)B6~c>g~mldwk9sC!W6^5DrGk-Lj_u^4+t1 zVOaS=EN?4jKcCN8qp*bgkVQNPjotLaZZJn2J$}F7ugu`AEgP8+b5z}|%wb+o&Te`S zGRJ>v`I_TXVGiNk!XBRqdyuo5-SAY=^Er#|WS;hiLB8;(?;{W&hZ6R>%+)Em`d#K9 zR#Wmn1-qKULYEknta+<(K4!&27EHh=w6apMY9ewy@EPde-%Gk(4nZEI;KT{m$ zbC!r3e=66?G3g7CJb(GiZ$Qe+5n=~p40@jUD`{FCvI6AiLhL!aL!PjM;|q1HO8Cab zdD2$Z_fkB-zb!LQ+=+J!P|+Jl1~H+X>2aS91k2}8^5PII>7o$JD;T;Hh)QuvWsZ5^xCZw( z;>aK#g5$su;J62+Gh0k%c?P9IEQgN*OCnROrZP+IU04A3AK}O#Cd4vxC)%wL^B9>5 zWcjVS7K20BiY}zB7QzOZ<$A&XFEe->pYuV~6}XX46HQ9jDs60zE~8vM^HnrKksM~y z$X)n8X^^c@q;w(WO-5@nbv&=jXY99pHgiGrK5&F$26v(CZa;}=IE(I@Retk94Ww!#Uc8gE(&$h zRDdQBE5$yN#pFTE65L;fBZGKQC(Y3lp2crQb#ZLPjiWfg6#hq7g}8PDY64LzZn4Z& z!#?9}+`o$>gP4e}e{($214cCFb1IOfwu1u>(e-p8O*4HWOhe!O(S)#&ucb3lK8V@^ zm#T>9LYZcJbMAWgcw+GD%LQ}`nLZK$Vm3(f6g^%1Cw&b}xS2yhPjn<-Tgwb`!Qdol zK2;3pLTa5zM3tiPtyGLX&gW~Oc?6h&k9Lce(#3xYt$^T=x#T##!y_Hx2YEKN#C>?- z1T=jV1G*pvV+ReIqD9Yj^hcSpG&g-qnY#}DW$rkJr(VqHllhWi9{9`v^jIN2^dt|A zMr+ZBbgH4>pz{9Bq^IZmiS}z*g9eS%qL1q1kI1P*$(i^SLL>9v{fd;M?Z-RE;1v4~ zH<&Kyi|K4RHE=`7xz429m{f_W^QA4uJoXKQ{fU2>y|F>Dhml|LITgZsfn7!+VLry8 z3Sk_<;!+R1JI18J3#7jJV6g(I4T^;b$ij1<>xKSTxL%BpJb>^10`{~2#MeV4?#-~5 z_?!#)pMbh{vN=R>7VM77O7;cKFE_^KWFf!?LjB_oN+9$q;ujd1H zh+;1SwP4>7;Y`8WGdvIQnSd_(Pxv3OO$UZeQ<4}JmB05}g)&kK?^z~n&V=x>@ml2{{C;s!eX_YQ0$;TL zqu*KqhsE5d^YL$JKm40i0r4mE;tBi!0uztmbL1iT04Q$Y5ZV?VlR-|Z5N;=iV+F8C zW73!SoC_93cHy_Pa0nK3fd-^#?kF0yP z=YjP{Ah?X9kQubh9H^sU+G0P^3hgkyr3KJ3yBV&u7n)SQME8Z!?tyq*(k)Eou_o?y z#3AN4y3i*M!a}6#h-6&jatJPa;Zk#_BX5@dwgr?E!ssRoj^lGG6v)E;r8qKT@efwW zs4LE?8O_BRzbVxgQ8=C{(oMd|2kCAguH*1+YD)SgbX0Uh2ZcuXlMKoY9fX57YVP*b znR^jq(wWm2e2&b=E4F)dtql&rkv%v?dT^ZUCejDIf0yjdWr`2@3>WrlmFq|V=4~xA z0+Y-ouKkhEx!^w>yfdHTj{!CBJf;VR^;jZ1=NjP40KKT-bfH7Ot<+KL+hbh}I zrBX-M(-4|>2|C?7i^#-~;e1YnksgAt|6Xph6haB&@~@#T!{+fh?+D^=RbbmFyqHVS zYtqa?PO2yf@84pEc$sOp@mYi4jt0uBSkQ$WXE(ornnRu-QDp2fKBt0a4PaaM;`xi{ z8(i@?TcE+D9WK-RN78WL@Hrnu7XiDDL(nK)wan_EQ7~<(B#Xop?bxSl5jYBo;K4xm z(K3ACBM;Q$CO-ze7VdS&AqE3osKL+&*E|^d<5F|qKCK4B%@hm<58Y(JaeU5&0yA*` zH5?hlnFd2+aZb%>E6x}UW*}@D&m`%5z6R2RK-|XR+f;in&;;%?7zif@L$Rx{_-~(K zFfgaPd``reE3seKp2Zpp#;Ou@i`Unhy(Dy;Ro0xJhLm!{%^%rF!@+yGOhuiBTpg^1NMT#(}kE&=*I+N`X1;;7E6T_c8AfwIgFnGVaoC= zq{LiscmSfw?{U*a=%ZigLvN4PD(AYWhQ6rEYj$JWP^LwH!yjgF@Jp7#XC@a@ylzX1 z*u`fv46BdIFLQmWnI4GgUKQaUYIZ|95yleY`Fsspt~Q~_W~C-w$l3NRqGe{w_c1gW zJe|*p2>0g!d#q?wUXp&hBoqmA24dv}KTdZcW8xxh#$eikp=L0bvwY4w1^ZVxsB2Ad zh;iXFNx)Ezom2t0*W5ZnYi3iVcZ&8B^Ux3qh5$8Qv9Mc_N!g%+>90z|r2@VP&@~bc z`AVcVu8t02TTyWghX_J+fggA5gr+?_jcd)l#(^&dUypwih=YTnzJ#TO`~O>0tKy>(ysyhhYj|(!I=SA*akCbIiC|h#QOeyjQ=|C z`?gzVxX57V>LNc_l&DR+^9jD5gUL4Xc^Al2L8%nW5|cL++Xb)!9bm9=M$_ioV1I`K zXI}Xj{jX4oud@+>-Ujp;rI?DA< zst_K1oU#bB^vbZfKn!<8s#?tH8l+$ZsG0&&P^u2=XR@G-WIaQ{4x3}Quo{h~O-uZv>F zQ^-wkNGqm+;vN8L`M!4Wb?YCXvD5VNYl2F@E}bWtv|20AZBe8An#hD-&)~}CEK&Kj z0%-0h7>$`b(MfMJWd1tI?=+Nq1w4x%F$-%~5TT17;Rt< zN)eSAt^%~Iw*#~+()aIjgnsr@sKhjRe6ETVvkvrVfkT7_+Yd5Je~y(9!+z)UT)>9_ zxo2iKRpC~xr?2oNFW>adtY{6}?+W}S|DRy+>GY^J?M$Ch42EfeE z4a1HXQ`Y2j62{^^5S2K}`qPCEhgHv^{es0Opw1kEn4(BqGK-C1Q5RG#6$_5m80p6V zSFm)32b{yo3Q!pqoQ}I9ULnuBOe+)yX&Yn%(*QOX0)6Hw=DZ|mrY2!P8vu>sUvBlR2Tx@igpX;}pcD2pOX7-UNr7v~32 zjlktu9AXI5g-VZ8an0%RFkEWxOu+H`Km2b3iC@Sn9p-aYtdZs&L;PKb$_!#nL%Ov% zr)G2&=M-(+a;*LwJ5f4~LkOk|5{xWm>qOLQ?yqhl1t&K7%==3|&xMRTxc>x41~DNK z2gMmtV+Ur#%O*n)z9swQHb^3mev~^>q643zj3je8VDZc`k#jl(~Y{x=MQHN$e)OAh4(ilD$ z@G*c+RdA8fiT+PO|EHOZo66_gz`q5ow0j8mKbY?Xa|L>X!AY3+P6Pb;e=yHX23)~D zWcWtF{{qzS6x$OQ;`e8;9ks)OWp@_ZufUI)C;)-J8VDLHB2I5pwQ+Z0BS$;j?~g-_ zO}Z%bC}ZS17@9XYtn<0)w#xzGDBr=py~9BzZd z6c8}t>-{K$OITnr#Vj_BDKYHUNOa7G40oZ!z2$blJ>ew~m-k^J; zHy$GCnWMjo8uZ3s+?|9&=p%Mie0wAL1Nfg}{0$38g8&O8c{nnNUi8K;a8-zZ7Rc|H#lv=&-@}0 zP-G35d@i=BT7a_a)6`n#Hq0Xm_94S>13n(m%|38B{^V$H=91EQHdaNRjSJ@cajl=A zVf(@56CA>{bfG52im27xFKS4oNs^NO9cz*F6;?^O?>+7rjk~Xc)IXr%0SkyLY)qpF=0|Aw-D({#p(mo_X69VwNCJd@8&!(0J z^h}`h6mz=poy69oEV^+A$YoCbIixZJ&Dbubo(7*YfHwNbS4r`n6whI#hwmIlW#pd) zlNgbTNvty~S)6(Qmr0Df3)U8y{$a#!rA@DQ*u${xnhLgOpVCUrVfg+psuGh}JWK1y zv}zKQVv^J(#!`JIF__1m!ziidIZP-u3jNue8K&`hE|j_tsg92^{t9L14(TPckK_AMqsci(>1bY5| zFwdL-Jma)`Oc!t!t7AY9DmY!hT`-58hw9TT%J~@^u~T+J8ffkSCKYlzPAG>AzF=ZU zgi%}hd>ZJWv%1y+hp%xsD<4>Rl&T_+QlFf8h#MA80TV9{F-qw|<;*#_Miz_rud9xj ziEGWh33&H*^=|@+-^MC^&F8AukP+ejQ5+e>nuhKWaZb$`E6x~ZFJPYkhAHyjl_r=A z%I^Ru^@(qzoQuqY#8#|_k;19OR+f^_ zhHd6^z_<9G8bGi8Cww?WY+;yrmM_wP*U#a30S?jYwu(Z-IGrjAG`xuXN|CyDOASwh zMQfm@DHfdT;g^z|BP7#X|6j8-2a}lQ(do!Y4E-L$HF4K6A7NRdIL0un>UY>G1=jv)^uve}zk7d>DB6UqCvDL*VTV-LQc2xaa=$nGlJ8iu)v%G7VBDT|oSu<4d1G9I0h3#2IN_lkJeR45hbm$TSM+ znQvM*fjB6(xy=3w*q_1uPjO@rxoB?*Xs!@%2qfCy1c~z>K$N@4?WK!?G-`0Iox-6OI=0__>F$&5!nC3#?*hNZ3ot3*(DQLO9@qp*OUxaU5C-N|upQ>Ho|#oUW%zp&jN zWjm3x2BQMDBQ6vA;-6xFmc{%7G23xJABRnzK^)0+Q^gsk+e7)^S(LuRAxtL{MBfZF z-$a#Sdx_ci{~jaoQ|!*+$RK)QyW80DRftE7JP2ewP(5%6SD_0Z(-j2`hUF|wV{`%2 zt%m`oRmG&qEKIG~UOxl}JRZ5NX|q7CMyWk(?uMZi=s1I?0lWd=OG>cXYEy%hDrk@{ z^ckcD>57STKeINL*T+p}_zRzZ1LMb_E%q6=s9+oSZ=_$2a=70ZhcG8ys6m~GYaY~X zaH+Xl2CC^yjA>$cM>TbyY;rRF{?BMsynrKvSX2L166e&68sdyW{rwYIhe=xVdB+d< zF(3fm#UU&&GGOYcX;VKz7-m>+J_rAZZ&3nNn&*iwGXO*Yb1;$yg_^?X@j&aJV=llU zm~)Ons{(|;7@aC8+`7L7b>=)QP!*})e%Z8hV9^?=?uvzN$ILmPaWkx{$rm+$!Vf?L zyHMc^i;UB$qCn(*WJXn)bReG>g2f)7?kE5bz`J__b^# z4~pYVhW!T4L0@1S5r?n`HzrL@KXS`E6_0@T;DbU;wVcn%KjW=hP(G`u)#RmR&Oe0s zqi{bmeh2W=fIaXOUOxS<{E>RHM}cEa@C1O+>{s92rDK?mTWfMX{GqT85(_ifI!FrbttnMa?_# z0o*@~BZG)U=o*g*q7W}Iav_k{E+PKj0jf}^YMHN`MlUk%D4%}=KIlvA1K|+x!i(+E zyx3+l5K5RqtU)Sc4Wjsb%KVal)wDrhLjG9AP&t*BIT${ua8=)v-L?bxR{;I!DY)$w z{Mf~Ng9TJ(Lgf`Q`jJ=Mz&xhdniClo{2PAn7raYd=Jxr_g6UfIK63IyD92h@G%fRe z#Pm$2KFsIw;8F)1QWO`T34yrCdBBH@nOPT;X+D#G%I9-n;{}U3iVa=RyrQ|U(A--B zvxvgpW}2FJ@j(v2-cvMmA!+siK1aVupGX#U+-8NfClIUEzoJ6 zt{j95yq}@hiO0*)9p&wh_^$W~<6JOXhPTS}uK3@iLMDp3zEoe6hEk+tx>O&H#J5RB zRTo(Wby2czIp!Da*G_RL=;Igg(nUCub+9p)>ce{=_lcknq3gPk_d5gxPC>OFv?>MK z$ok*WEoaqQwMbQbQC=!+pdAfFrmWv;glr*ipRWC09n;=Ze~D3e%dkBhMt7HnQ#%}f z6)Rx1@A4a&o~bzk{3><_fkO{4M5TX;qu}L=#Exs-;Z))BKR6VxwmzPZI}J!9M}Yrc z+;O;ELos_h0$gS^{mjl1!Nna8E-sgKs+iHZ+)lv!0(P|yt>OH3_zC9Y)sGrA=E2%70XDl$b|XArSmJOB$?qV;ny zt@ex_*O6qONXG3jx_vYN2#BjQ$m&?ahzOAN_ujWAlrW5POD6-Jp^pTTewZj|0ClET zT1QLPlrW+L-Z3C(&5_R5Mn=)hqe`Nbf4CkND@64O^ll_gl1K1R z+|$bFxfKDr(B!1mILPogrd6;~gN$%THJ4=u84{J8e3sHs*qLJ=mxexS|Dsi}a~4S|v&vQReqy zD4x(~R@F5z+`XmbKoa(p*Tmw@J|Z0ieXO@PV{4?0b7NJZrc zw`RRm$|w?e`FW^T)sdZUtuAGR241CNtmEc8)?q5%?}TD?N3vyIM{&ewR2%OY^%C^> z4qSdEF~YZl$29eUh-1>PE#4&48NV_^ysM(J(xL_wS+T zb$l?`T7zQR*YBXX(D5?jtG*d=U?&cH1h{I0(<+Cx0*NH4@ewL75VI`&`$ z2*59>yk7t)r?3AV>^C?{FSBBwF(MsnZ&{t5flePS1>M_@V{@%^D$Z<+;ugpGe%3-1 zJ0F|}qHT`T8PI7l=7HC7NRh$kp@vpYZ`A;Z9gZI$SKo!&d_u_1yHAKvJ*6yI?s3d= zTYo-dR0-@Ai{e4Y&|j^}rBOWc59kj&w*O}JE^U~O{9D!+rH$%(3CmT+Xk~gfU^q>L&Tt zlLN<%`UCMq&@VvU@`CyZ9X{;R;>JW+AC@u71&|BJrH^TA{aglf26=GY_zz#QikC%+ z95^l`Aj*m_i*UL1sMWcw5$1Svy)~N7`9E1N;ymOEM!b+TuNYn_$6;$qJ{f1$M_&9A z_3dWV?WFqZ+!AuqxZEi}VGo+>&!FytFFpBa+zkH@EdNl%ee%V)SMruv)u}{27q{Zy zDpt2p!y`*uZ+&e|3pJ{iBkRWP*5?+-_g&y%d8KvF2J8J$Bie!U%}}GJr#GJF>3;#? zghCP(OdoC5D(K|lao-k=vl^5$K8-&Clg1B?*$?=A)cYal3EEf+rQmJ&FK3wueO!B8 ziyvoZTaC&?r7g!nGqe9(YZ#Si3X5NMXq~mNJSHug!s0g!!HC#JTwVpg^#wc+;2!#! z0$%*yFI!lbK@uQJXSS8Ho|HE#wV!u}=c>S9WL-FdP6%}bX{cTeYt;CL`W&o|#Ee!0 zi261PzDrYHd~^M?Mb?-wqii5eRPk-~`BSa=R6K>$EIw858eweTNta zr=HsfPRDI-vh|^2j*Xw9Pd#rv0#P7MZSkhw=O-&N94u*mil3!tkGEQc8{y`k2>tOd z>)w^RRIp=7P3w+BHUkPCCYek08}L9e@r^;{L|=gaNpN^wuZuiMC^a9IOML<7iNh8> zt{(%oq4EF&tgpk3A^~3!;yrz?^=r5h5hzL@=xGzJ(h)`lN0m4$Ap-3vH2`w1>7%w< z15k84X<|)_Fk;G`+KSsn9XHy5DOtXxUT-|^lyrn!ha-%pj`E$Y#}P)TIcp9+!%|bL z8G>(3|8fQPyR_lxTnzM(u6OZ(noF*bG{`5fewYSsc& z&T9Qa5jZ?a@Z5O11V3kKo$8#m^%0Pjjw5JPsOCn*@ZjriR#h;L@XP_vgKGMstyWT`5$=BssgCo-s@9lDg!@mEti^yha+g?pQ7L@T`9|n-))gv| zOFQ5C=aHpXG{UQpOFOq*oTh8jp^#qW8N8o~gOtE9nS}pZgg$?^)uy6RK@3;tk%0@X zF%^v#u{64z9}OOhSiB4*YYWK66InUE8#>upM*nxT^+iR@FEp~8(fY3)EN7Gv8(R&5 zR}U%;c{rpzt)fmHs#C0LGwlA_J-l8RYWLfsS9& z7%?BUOMO{fo^KuV7}Xq+ovhzH=s&m1DqRWZtF^2qI9F{wnAL9!t8~X9)fYhwWYm)%5DuJcRBF4HO+ z4Lgr?SaH!j^*X~vaPsYny6^QvQHcWXklF{s2m2VC7*$?phw6!%!)L>tj17Inv` zSe>zc_vO8km5my$8xEn=II3|39Dnvgtg52PO62(Au4ojiP?&IdYGND^)Ky*Yig~p+ zjv%6;VbIWep|TN$(_8ZNVPzvMU^@~ZSDQvRtvi*C@OUi?q}>+77xdpj>MF0ugWG|L z_=m`RIRG>R%Y0}xtb&kmD$Po%f>DBVHqPePc--n5-x>?Wp(OZa@K|E=0kx>ln2E^I zg6g-R?p>-+5o(sv4;2IV=RdG8nUZsTgu08q^rC+9GY#;3ks{B}sQcZAzN-H111K;x zu_A}-Vqu6qI9Nc0z8yX3nwe#_t7=5H{`nGkv`2L>8xl;jHAd@uUjny$>S`Ec6e=eX zK-f|`Od0(d>^`_&i|uS}u8Me2F9oGFZL+L$RgpW;pmwcqc+|RE)u<5B{|zv?2L=yq zCOpHrcKN?z#m5-ooyomj2lLUH228IfgyX|}IBdJ<4^e-jXfoE3RNn`6L+yIiH8gd( zPOr_eR)A$F1p(KY3u`oux=)V~$)f9gyVtC45)^+i(LDsJ^Mxy|7OxG7>A6d0x zjZnwTwpOQD?RAk*2GO zrqzCJ3QXx*ZQ+fZRc&!ub)FmLN-1F#@Sv~DWZa3lH~^|?v2{nlM6q=c+w^L^qv-#a zNR0H@u9&Lz*iIkP{~6i%U)?zg|La8}|7nh%tXXNd?ucx(Oem-qKY`4k(q27yi77RH zVF5mRx=(MlfQkV{X`i6dK>ZieyD}2kO8fQcP{rY?T0%dv9p(3QeH(7<#u0Q9O!4}y ztjO2(Q@DB4t_c1J)xj6=FMd%Dgm%@_7h`B^HT2ieEtSku`aKA6>i>Yk32m8OO+6oS z@FhdI6=~lNYOay2T9+S#=Morh7E*Ic`0*Fpl$srTaS;AjtMeZHKS)t1_EZf0|HPo$ zb7Y`uzu%)PX*Ya0n^{L$*%`-0EZB{-5?K zJ(rqDuM_Ik9@V1%GqH}>WB1Rd|NURVV;VhnOjW8_wvGP36po5&oiRl9So0A5PeBjr zvH!Ni|LX0q2+%jd1>@dCBcy*#|G2P~`oPU-K>UBZ*B@v@yF&gI1=cY*f{LGoI3NFN zjGKM!ir^4b2Z!RH@~_>N8IQ?Wk|{gQ0l`w6$k$G!V7;KG{guTal9KvEJA4&0Tt|V*@G-z4K0dQAxE9d#vg; zuy^7=02{||qoTP7yU6smxP65F_D8(;(-^fa3lO3D zTV<^YHH`|r8o=@0+w}O}yzS^M0BKQ+AL8A+Iu%l)F>Ou9_HCVnZ_#o%Tga7vVb}%~ zDI6YG$jB(vHI$`*kg>m8H)|SI&7z3nb(&J-aCjm^{yBnDGg+z_^2=D1n#)pD$Ui+n zpD1}(3i%YyQm2Kis~WQI97-)^UGV4QH+6g^S{*o2 zK;5vEvbfnI7OSl|+*oi|=&dK{bGBLQY8e#+dSv3ww}gn<*2lGwr}fCR9@R4H2dwOY zyUpAGWi_a6RFkECfvv33DEaR>jk+NVtkt!RHUXkAd|asYV{M~eK#zA(HMVGNt4bY| zx?{~(cihT1t>@|(RUCKUu;$k>DhKR9a$I-f+RfH`b&QHN2VoYd`~0#My!GY?E=E?? z&sD(>!Qlv^mg!mp{nR8-P0pxh6{|}MjYDbaU*B8J>w;sORVb~xUf&v9*XR;38VPUR z-AhxgV<-hSM>0`2Ouuv4DpwEfYktXUR}Xtr{jfz}x3T_lS8Gl^qh8>v6;T|nPhDo6 zsAn{Bl%8oh>l^ioB(%is#d@E|n$@ztQLEnpMEA&gQDpY;^>E61V^8)G_H>5lcSbRN zxNw93XZS3{zk1_ju^5UN;Pu9TB*4MW@SEwVogjO*EYiaRG1kZRv4uWmjP+xEWPod6 z#(FWEr&}cwjL_Ei)}T})uPeq^5G0qz5kxA`&db>!QPAEV2w^dK9rG&Qnz16SPK)3vH>H~QR>?)*V+Loj#1mJGYLja*uO7hF#5+fjfb!M z8TjOPFPX+_At8np+yMUkd2QV7C+{YPBxCUT_m_T|9I_(|r2(?kGh}NVkOO5YC8RW3 zA8^pa1sCKWGO9VXi=1g$?dB}GgNnNkkO(NuDJa`li!R2(CVFX$mjT~Hh=i*xmmzEn(?#h3Mv zMp!)hkCVlP08??iD0cEJ)k9h$De%uAot&N(ddNpjQJqO9ae7wiA>UH*d0E_|m)6Oq z{&9LI1n(X=g2=e^G~wTutr-omksLZ4_^CG{c`dX8m^FlJC2(c*IMn#(w6DXxybpDU zee1XMLjBB)0M5TJq3)`0eQo%g|J(+x@S-E-=MPZ#q@X?`MxTO~`Op8nEh-JjjKm?8 zl-t5hb>l@ySdwV;L`P_Pc)vizn?`gGS)DWd*IetZMn*)b zXt;hrB3sJs3@`Sl^#$(Nzl5wgpsT#U&K>eS6_aIgqdTNLd^4cCEN*c(*DrNMb-N=| zt!j<&tY)8uQv0`CS=|~NRmD@KfX=rwt?7;VsZu~^zo}?SP7O>_N1-1-RSM`lr9D3x zdY!6PqQ>{BQb6a!hy(foMW$%!sZv1aaCjOq(?3(R{8TBRbH_Jv`)5H`LW+|le{ZrX zHo-`vXG;N{`xLQSG{LhaGG9PXy>FZ@Yhu)Bnf@`*123&b71g{1 z%p$^77PvC{WU3!Dc&0Av-$va#1@#g7XD6*|O^iwbPmpW|jCjz;D%KP$3wHyQ#)kfC z#Wgh=1}uw5>G=!Ot@NfwcqdWHs`@-WU4Wj~C)dIY)HtMO!PE-~B^6qLWJWXWhSD(5 zR{`)Qfs|VK!XYi-1Ti&qxHZ!Wm%t3ntR+bw8vXLNpzJN^V7opF^u4GZ5Y?AU=v{8BG7M!|L7wny(j}u*x?#TAEX?!n*@Y zPC{Z4at^tAU^%*^Nk0*xBCtGV9PspzV&CAga~O4%!xJ3RU=8ZR-xYOb6UD>Kz>vNZ zq}w_5MSuyv(^`lJnSmiqkkB~wO>|$lYD=922bQ+3G>7NVUO-@(DrUw28#)Mbav?4LxkewEdY4R?f2gj6Z1934|F)5db>HQUYH>QqA z_PUzLRAVw4;gyJ(vt|m+8gl}fz7g}!c?WUoj17gHTdM8zZ^LGr}( zEQR%>7BxH=LoK1#JS1Wv<3cnoVZ>3ZX-mU@z{~K9gf!e1J$dOesz%CEk&q5vltxjX zP`|c8$VnJYuIBKR4Y`duC}AuGc!wt}B;x|=(q*Z-e1M&h(zu+pwxtmgN{_1(QeO5) zZ@gY#buxjhk6RiMy=C=qH>xkIYTvk%kkb1R$DKc@o?;fqorIKcFu&@>5(>Cd*hxsK z5oEP!#bGBQrOYqZ;8up=c-YCB+{zf!>}7O7!t5hhSJAAgpC@u^7lP!z<7mjd@^kqC z+|NE$H~OJ!VfK8hVrvB1?JH1P_H7#mM!{x^M+L;fgq0hSpb7R(eX8c2L)Du7_gHd@ zPt}Jylv-ErcdnXfSGCdC{{gB^o#1SOA<41cZEZZ$xOz4QXu^S*MtEErkZ|i1Xxbec z1n@2Dv~~+UV0lZlEM($9Tz|V92pYfH11)D8!&8nJBplR>G=yK`2pZWK_7HQ0mDmP5 z<)Uv+9L5;ZTcKWc3%#I_aAHJdo=S#N6?KcOmoF$JoajlbGgFZ%TG2r#8m(vAm5Nq% z>4|@zg|v4BS!>xTlH~iD>;>l)i4sSXOTvjnS~mVtSX^nndbSnT7KtU!4ci)F9ZOWh z>Zw5jnQSN;TR#A0wIm3C#*I}@lV{V&NCA$TI)U*Gzraqw5kv%faMB}aRT_0xUR$Gd z8NxJZqpt*DLjkCV^>JGxCLjgzomIb`5m#Bop51tE-$`5_rpqqv=yudlTqe^5S6YAWgf%G1C>_w?L)`1$cd3<~ zgePmF)Wblu3c_kvpN)TuaRl`RxgOjC|2a>O?)kxW>r|2v6|i6m7OyFv_p$CKA?nwy zXO(P^=Rfz>Shd^ZS>gJ4t8aTFsYHo~@PAK@8!ZqG6F;=Jw>QG-8<+z;b*UvH340TZ z6i+=;6fw*hK4ut-2{KtOi^mrW9M6VHGa1FU5o@F0a&9G>B;_ge?SC7~{r z#xBE(!J!`m(T4?urS*G@K$xR{g?r!n-oLxZD%lawgYGS|YIHQpS6NQ6eA%pHoc`8F z^P1ua`dcVaRv(OS<6c=L+?vqQh;mH*z*^Q3d*5G{u@2y@kF~z(Xhe7x{Q_D0Zv6$7 zZ-DkEqL&Sb(CeV!IWp9$(8+klUw;w8&g5E+JK<6E>L;kVQu9S?Kqn)@tcTF%`RlE9 zy4IQcZbTxUYT;l$p?Ux|Z9FdhpI7mEDgoxAa;XiFU0qK9(F-ny{@x2fyp7sDPa#6} z($tAn^zN_;G{a&Th%XW~>rp4X?-6hq$lEEQfQATyv13*OiPRy{gUv>*;q-CPj>5Kgw^~%eUf7B zfAL9cbr(DYl-^i+hIP6NG9BrS0}fhux)_xzNO#nb);RRPA=c3f3V)9oO}e91t1Dj7 zl8(5)tTnK!5z$LJ;t?$49QrW8#}ts*j+l*mFZkZSOAb0yUxs^c*!OuqkEpEkU2XR~ zF@~efB_OX7`hif0-Sf~JR!B13bI3PVLNeTQcc#^!&Py9w)02(xM$$jiXhNTjz&{@c zw@CTtCcJj2zk&OkeCzZVtxL%mcG6Q%jDo?5WRNqq`a90@*8AnVd^bG0W=#HFz8-D=cyYk2npw|ZR9THM{J-g3VPxcgy6mkhY% zGaPVNVJfG9i$L32KMrp@gCpp$uy`3=2H^YWm-n#aZ$9$G#lYx+z&wK^=mddfQ{_HM zbk9eFtqwhmsID^p-cE+Wdjd6#;DUEBsSx}*%6J$>E*0JPyBlCL6?bMAMgc&9F}nZA zi`IKR5WW$%ukPpS`2!hZ$oG4wfn^oT$&!xwgw?E4UMnXSKDE%HEUK?mkA#{&Ea=N`pFAk(AxS!OE#I`~XR#{x|MBI{DPeDaXP> zP%ne~9=lGaBoR6Wx78yBK~awD1%FyODKrG-d~i;V zm4MP|*0mI)LNy+{YhMQPHcn8EnP&Ef~(fFR;4xEf~(tUa}^mNW*z~ z--6*h!LSbZEf~%jzga)^H3pfdr=xuvyO3Yr#(KC|ZfFf%tN$1(w7|_I96_mnpoIE2 zv4}195 zKH#Hn9K^O)aJightRkBnLn0kP#-atq?)OouKozth@Ygn!D$2Ux5YJ(h#Eat&k70(q zfJ8OeBcWwOZcr&&LL);OAZ-nfA>ACFN+E$%ikGFTa#a}|_AMmQ>PDZ}l~)~DInX*K zIP6vM(%+!l1mG>N;IK1jfS@>vD)T=UD#2l$w}S2)MW={q)e#)_5Gk@Ce&{2P797E0 zGoYRxj3yVR_;CkQ)TFAFP{engQad=)TE*> z9s0y>_%3`LLF0RqS}Nr|w$s`^zz#K2Hd>#94TqX}8;J005Zx#sv_s7wxc86meT157 z17)abKhP*2AXDD4o2)SdF~An@wB`*&z?t>FwS6E0PQpR!Q#$)^v>u{H>puc|DySB+HGT4aha&nknm3j6Smoh;ix8vFSK1Q)UdpGH& zX{~SsC5e`**?YonYsz4_p@P+eriI$ z2Y!!jp1~yAPC4pt1Rw;mD&UYpC7@1EjTEbmT%_j^BP${vf!I~DOI9BYtK4v1E14`~ z5xu(?Kf(HC2wbuD65Q{-rLGk`6njde=b-d#nINm?P$UPjm_bUWYMrfaLyhpL8yM~- zhfS!Wi+2e1e&9M7N6>Wqqrn_E!CE-fs1x=qqH}P)^7*(OqL0EusBpTZK-%C#>*`QE z5IH>p?59LPCq9i`2>?ZySF+Xu!aqjxz+4pMk@!_ zO=pJvx3xS`{*TC3B+CjPjty_QdNN;<%Rq--r5_#;;|OvOL_6eg>Y&S2)x&SCwBdHd zt1uA)^yh({X5;OM_f=o(o#A%GTh`aQG~AAOi@ztrt01~nKxjw2zi{ud?|nqPxDhhq zbsS+wyn}|7J^}{yZm{N$K*T%gXT385k?!gR>vNp-E!LwEh(t2redx6!(+s1HT)&(D zpk-l5empp2J7HoO;*O(J^#-`#+O8`c;?^~`ylHlb+j+!VlLlw!1Z%u?7E2YGrH1NDO<9LP^%4 zkyvbT5Ng`fx;C;P2u+Eyij6Y5v>gnu4lY$`9r`k4z`s~_$4fWYLiYcRQq6D0fN+JJ zua8nKSqcdGurqevYs*rx()wU4Z$`2vmOLT>Q|*CUy>NGc*T4#`|97^(}@ zD*aLgs}qRY#J&NdxAa=rFl&wm=)FNOEV3q!wdal++1Bc@_S{iB5jwmHR@-q%p1~yAjz+g3L_dzob58*DEvX?UrW4J<8elXHgc!u{%3NB+@ZGvw1*8>!H%M_XYAM@VmK1D<81_tjlG;T z%78xFb-`B4ztRPM*utiy485R zk@Wv4`x5Y&t~c&`W|9~pW|&DNF?FeipSB8SW zmDM*3oO#5(f@ha8u%l1qviTq^GeiqDsioA;jdoPj2XHg@YX2ad4srnZ^$b}J>0^my zV1#6$yfJ`#`~;dufJ(2r%H-wI3uLl6-8(`Xp5bavn>e+F8Ca3|vnR$QWx892>dk3S zs`E4+;mv6;mAhnf+FQ6}bJ|C^N-AL!-^V1jO#jOyWH0ig%s{c;q1dC#!8J&@EcO7j zon;0S3^l`kp)_9QFEd0C{q2J_KvRUwQ2U1y0Uah>;r0vff;L>ZBJ4E1Dl(A0uE)7^@Co9T;nW{NbRK@UP4g3_lwQ z5Lv85ttte{(?a4sEl&{tu&KxK2641+*{ATbM_@+n8$jopDB;5~jqnY80Rj!|hGDMh zTTZxa_SmCvIYmVL?Q@U86(n3v`~Hn^$$5FGJ#G(NA%Yfe-$%$$;fi>ZA#}x84Py@x zh}8qV1H)m)YRCX6Ng8=thVp+KNQpzyh+E=nk^S=#h<1Ot^^LP=MpVWcfY=JgS^|H} z*5f4-UZ-`3S3iTM)MYOhC`w!%rY#stC;q3v5%aQ4;c#2) z#-P=ET1=~x<%q677HeH`_47VJ04AF!sl&Ps$7(i=bua>CHrnL0(J_7ghm&&+8bVxy z0e7_(S&s045deu-#ONpx$fKV_Vx!}Wwd){Tzaph$So22kZ1OxyEB%(Eym!G3xSD#S zDXyb6c*_yghkG=;-vM_Oz2KUZ;F`2U%5;Gdnm|mx9gM94{^l5Oj>!OhvVke0Xj{mN zOB`RQ6(Uf}caxxYyP;#X@85Fxt7EVb;nBdi+(@k0(5DPor4U^vscL4|gyD0ihlz}r}r z#i&TJAMFHJgm8J-=?1_Ck#PC)Vn|0n8&na*lJ+HUX|uB(fof(xeBThh{`T=dfu)*o zIqf^pXg8=XTqus?fRux?aC=WJrvL=!pAyu_o&>}UcCHSK44Z6bhrf|J! z{|yaIgWAFsV}GJz{i;D7;f%AlM3d1#PLJa4KJj3b=TV#5*L@0_oF28br{i=`gZhFm z(SD->Tyescq=dCkVMw6H*+`&JN^?|6_9i3W2F+PIe62)6h4Hi$qg3=5TTI)Wy3h=DNHW#qK=d`AJYJ`N>G zLxTA=xzJC0f1IPbWyo7_HSNArJ3kIJZw~6aU-KdDwa4Qem5O;y2CYp;t^9b5o`(5> z)VA>ht<88x`C^4ACVuUkYh#G?2unA9o$5W)mVgvpD+Z*_&zr~>+f6q68d7d23fX=b z>)X#LsbbjdKfu*>@FMNOc+7kHFVjlqIx1WGW3AJ#M@X1fKi3h(R%t_Xal~@+B0&2% z{{f@P=Fi2c>A2n+M#h}pXvS{(Dile-e!n% z^iCx)WAw`(JyNbI{sfNuF3Dxto1?%rImOD9S(M0LP{RjCN{wOT(areHNH5?ahwzZA zfL_PI*ba|JI>xYH(N+4*dcKTDBa{O>Whh!szQb;5hlK>ccRj{w3-TS!2TX`Xi{lq^ z5h5b(p93Gc11*&)GJFKB9a}e{GALe`K=rg-$A9g0k1#IqZ$kFX2&?gbj31?e=92dN?7U9n;Edn)d`WTGY<@7u-UCCQO&*Ax;acvjW=c z{aR3iRDhZa5hcw@4-f@DnqSc!q7wzPzd7hyNx<5QQw2_Q(0Z)@__q_zAe?o^2*;nF z^Tg?QbI`sqaQ0AhF_Xg^7^a{@CkJXi}*EWOQF#W%h5TqE(pasI1aK z9{(XLY_fF4j78Uoo|Vp5(UQ9VkT21CvG(MBoV>*%y#J6WG_vHu(sT|%*Vz_~MR}X4 zv+2CFqV7K=6N6OFyLN0}S8%kX?muMoILJJt^C39FQvD0b^4+V!2{yXcnLX3lL~wO+ z$%z&*$x+_4?vd7J5>_qnOr7M2s4dpSLlZDe)FxGj0!i73n z%L5vJc(ti^W)cpF$K`83O+w@M3zj+jS6j0++hmL}mjKJ#1MznYf>51mqsIDgiM*?| zoQwvzA-T4nT&0Z$hq?+J5FQx=F}u$BBB*g_lHZ1r*~Vp*WnoC<3Fz7MHivCYOJ1?`aYYv)T7$Y9P*9Q9E_rHfW8Su|1ny4I@C8JWS4-_>^(_V04frIPe1l#4EII_n+FucN{g!=#6tH z);bDrqXzpHXnxZiZxl=X5U$GpTI*?!at_)@700bxv4{W=B1ffYInx|LF)RyLJT@Bn z15$z?Rc@5#2&9%+v1^nc=>ssPGgXMUN4A4&v~VTauU*p4O>+c>?wpBoCSP;F3l-xq zBW)yKbHFaAT)w8SO{q}^Rog1* z(?Of-PG4{U^v^dRl>ux3Z9CCLQs63ua@viVj_{FdRv>9^gYvtoA_xz>o|_wCzBdKJ)Wxah&G&T!CwN?(ltn!~@_1a0&Thp*){Mg86~i#BT( zwzRrT1nAMJZ?!G692F|<=mgq}^2@+d2$mx*apCOK1)!B+Yw>p2lUa@`Y@k+tHqJ)Z zY=e(>#8A;~u_6KI&SP)Es@RJo!{ft5jZ*Abe^=rw2$#)%tQ&9@g)7uPZwFiv!WC^_ zORh-ainm`v^BW&U5=|A7`0GybRfVfFpRLAMt0bJs_NWtJlylEs_JfPzl5@{~_R&?e z%d;`haIS=}oJ*#+R3?(xY v;^P`25dPlOeF~EfT*8U>rW)6Qv!QU}y{Qi5Y$Tks zWc7{@9g9}~I5=37Nkyx7eCT&oP?x%s_wiCd$Wc{%==MLgci(mRccJDX;h*YkvVO;hex&{Vt|OqXz*HIy(OjYst9bOj4c=DX znEjRc8#NXO4XB&I0Y+NkHcjIz-2Z)yu{rwr|FOcY70fY?F%DO?gLAM0BsSbu{I1=a zV{Euxz6KHOHw69!#yXBh4#tMthIh26xyBOriqT@IYGQSr^?OWgB^ zYEcEWM|Vg|!c*N-9}8v_i|$i#b`Hi}$zZ-|QlYRf22pGrh!YI}jW|(`Djf6k1#Kbx zm$=i!Qg^-ipzVbJVS^@O&reC=u)@HWn-KIxP=73nu*Hi=h^6jQ^QDsi0_E|xt|Z1M za?|hfM6KRDoORMqRjtta&BHKAu5}lh&`Kap*buO$68lV^Z^l}8hwUIv24RjNTj*)* z3i|f~VhyN!iy{OpfXUs$bHAdMp^(l4c1?Ra&r#YmK-0YEJHqvYyZK!}_D6{ghmncR zBWo;tzs%Np%tsc@o~WtwG4nB_nt1q^I|O`WpRP1<{i!o8q`h|z^VZ03F{}29Y>#`@&5jCQ^|{-EUiArUs3_h_*p!;6GyXBAX=vM4=0Zn=>6bg&(uFvkOULd5JN)KENnQ=`_SYEbUa`RBVH4!+W$i=3{7&;F+7-nD-)tEZ5VMfcAA9!O1%k$m8Zc(XrP_FFJ1E&&Z<5^#o(+UoiU{tg%enju{8*1FDXC) zVwDrAB1V+qe90rQD$583;gkz2b$eR7~&f{eK0^Ymkg zZ)&7Nj321Yq|@T_NfS7mOJ_-++&OTzkWQOVuT1c^l1_)ub~Ijrt)HC_@q_?b9?Em>a(mdoJrCd?ejZ2^S}<$ z`KC{^AK~mMoiRQeg5c~dopDN6^%;aU&JCM`;ay}Ex>KfGWYkkUqB^2Tv8b=_(SJ3p zfv~7`cCx=6MD|uRhF9?J(YT7ZqUmoed^CxPgOKDVu|I(u_v3ozpjYbd3_&Ri@8LBU zt=@FBUEzJr@WK4aqsB|Pda0a}6O7jm`}GDtt=V-!kqGZETsHd~C~n~cgv;L}inw~0 zgg6JATL<>Re`7_LsH_lwHnQoYk%bnFY>9M{NMr-4JW5#jm{XWD6SgjUKs3(QOwh(P zIVRZz3l=8n>K#u@8HDOZR*xzTv}TJPp>cE-Ph>2m8b22mS)VQj;q7u{+^4Ymv3_aj zF`BUvV9kKBUWYHWgZJ4D*6a0Ni_}>UGE*BA} z;37MY)x4HqXhf}dWVevgTGb_3WTMUb$o`wAYF&wT9W(F9!7qnsxl3^HkQ(;L5qJMp zv?WV$)QKAI$gEwcBy1(5Z-o(R*+_eF?Fn6J!tXyhpxs^K=xoyRwT4R_eyWy_Z*Zlu zn0e3>#(EHc7#iXqaZ0q~Ci^k03tR&Xq8uoN^;n2vQz>OK2p-$}0XVE03PKI~Y)9N3 z&Q5nFRT|Bf0I>naAjv?oG0e5Srri%q9bsM8bW->Ux*D5wOE^ZQw4z$$f0LB%^`HQ& za(BRd6w%KSBJI0~o58Bw+t*C%vCPrt^&DpJ897`GRwIWuLCQ`TYcPCe4u8K)g6=Uvbi zE;q7x)MoAAax9IBES}$2y9S!f;reJ7*ewL{fP&#_*+_elhLq?$hvT$}6(Wc8S2+Ay z${fxHa0-ld5B`|#BjPi1_&vB*8bq1HLYPbHwH1zfb(j2&%66V5A*GSJrfR&>cVy32 zz+H{kI>FiyF?7bN!xpx~hdk6f9zoL_R#06Vz6wXcPVa_u8vF7K ztzZ?_+-8>7wyeSdklyGj!oOnQUe~U!!eLzQyu^ajwSVC>6?~!jug04O1z!MlldT`5 zHD2uqh^mKD82%&MhWUL}M9RckV&$$qj8w2Ub`L=m=gz-b#|4_t8cYLXUx50Og(fRXRnG7CKAK(1PNfeU zc?3kW$zvpDFkMNVT5iM!SPTj;W*YTWPs}7DQV9YlCwiNnBu^@$ z9Z&_+Lu~gI;{wWk;0m4hGnGvT=4l<)Ivka_Gs;wHm5%LVV0*JQ7#)NkHDCKjo4FP@ zSB|X(#jluIQ|;hdM|D%+Ozr+!lz=6OR=CB3rD=|JIFwT!o0#EMJ$g;o;@9B>jDtPNZT8Qj^{Be;>afSkjq!1ea1-$47=aHe`RZlXPblZ9y^>mB}h#H`2dieXyM z^|))ayq2>bq0-{;qw)9|(%Cm_wWtA!aD||$O0PR8SN&vn7alkrLugTgh2sC{XtZmtV z3pir1bQr$N)JA)-0i}!1j)m_tebhy>ZA1@8{ayG+rmJ3B4LB|IGEVpb+{52tqoaIi za#y@w8j7Hjm*Qm!7!j2167_ZgY>PH;BVH1=eW&f;=!h&{r4|x7)6-m1ySLF1RyFZH zoM$|zHKa=?{sOaknIV808eEmfA(uTnXK1mTum~Pb*;35>#|*9iCPzRA?({Z4PlN&k z!JGC9e*oi%pFC$B#@s#xsOdnw=R#5G!?prPIn7&&YiBk&f}^=J)V!`E+W0R4{=vmS zYT3AMlIxMDqrMif8F@*k=E5tR+qKZ*H#;1~=?rK1zn*)SYrQwigP-9gyl$a;;(0f8 zIo^?j5qW3hiUhD~{$TR+`eU880ZhdoP_e6T{$R59111(jLmD-Rk(3!iIdK6UBW^ch&{W;&sT@DSk zVJVC(Sv9tIkb{6FNNO6t)aWvsDSI)fsBs}3DS}wlsDVy~x{d!YurdDggz{SSR>#mD zeXLlFR=-2*We!U0h}rO@5!8(0CQ}dU$AWuOH|Ei{8z{YKO2Q}Q!M(#mU_EsPzI{j? z59-K*`;tOY^-=7Y$CDx2?^_)Xe;QW?&!*DgK^A5uh80eF!j50#4P0CL>rR#@k#%Hi)Xb1P;h#!Pn6pl7#m` zTrMRf@i3?o2d`uopUFHt0O~P`-~g)E!Ry#Lw1<~T#8nV)xdW)C2XAKGf7kqXAa)ad zwb&h4r>Xjb)(6jsg-ETfr0-D749CC-?QN^zhd9!y>R?aP+V`~$JFp;k@33}iha)na zDpPQ_$p?)Vy8@=4h>@p@jRqEA40mY0J5l;La-*pgmaJLWT8yAz+>in;R;+>#n9ALP zz*c~CalvMhCgLP?@JUl`lx8*p)C>cG(5Q_K{@hdtZR9#ig;^lZCqPX-FH%qmgTFQ< z?^BdRgxCV=ZbIk)s@lP~P4lj3zwAUI;m*gVmy0#qE=N!V)!|^p+!m}nnFH5h=nYde zwI0;dy6nQeNK~hTgUu#w;x5!js;t2g=BJ&t^$;bTHO*JrYUkiImCw=cgNN7J;AHd5 z?ONb&M^NwD>yTh95OJ>zBT`I`8;!ci2ar@-{x9|QKQY>Z-Hw#-*XCk$k)xc8^?{Yo zxkC3~L6^_TTCl(kh%}6KEU3&j9{&LKr3qUis|!L?gD6#%ef(AJ{vJngTQMPfJ{70L5r6gT1#odfy6eFWPF=wV{-w24IfF-+a=@5MYM z(XN%)=P2h4LvCUs76`JOh>Z?Kn$tuqLuuO#`tceH>)Bgyx))*6yaB>B5m zZD1kR)p75~JB5z$b|SH_2jB}!5XUrVvJ}Qzi2^ked*^AmcESH7(S$;zzs*WoiS^CM ztR)`WvqFcnLr*?)Gvfq{3-GJ=_W8KVU^VFWbU!?ZN{f-cKzKi=EZ|W1GcaY@& zUlXE+2OMR)$q5l@sZWR~ne_=#0kU165REJkdo)79geZgTazd0%b~z!+hn*%w+U5gj zO7Z+0PgTxtPQ)up@`Hb1k@Ly0-;Ex+6=zkj!fA1%RF}wK<(;yQI z0HvZqwUP1=Qd>-J3fEw1f(wZUBoRg%@sXocM>*M9J%Hp7gm>C&5@wdi7-9n}TUS?O z1|SPvFiIH&BgitBj##lP2V8#BSR%7y1tF@MU7@G!TYiVl_ zh)S4_)N__ zwWY@#v8I>=?J~J>)53E+tH_DaYOKT+hC-~@UaV@vNU>sMf~nDoJT2k4qfzlK?U6XX zp39@Ona9zY+b|pnf5Y?q9Bs#ON0>erS~Oj|2B$t3T9i+7p}Ua!m?ZN`Z=*KGH5V#% zPOEal5z?H`Qi_>KTHs8Uz0P75DKNo_FD#!1%%h(&7cPP!&Q$=GeKcdu0ODqNVl$nDhzI**@A)k|8HR&5*EM#%JLF#wFuTG%ILy2iX2o=1LGWn`IWg2jT-pGh;F7X zI?$r-!x)U!pjp)a1Z$-}aSW5QpmV6p`YfmoHJbl93o6+TBLljpCAjxs6wKFWK@_@c z7IfhgV-{3Ma4`!SjG98TpnpFxWW-Ga(r5TGuI4GEAT0dhLD zZH1JO3}Rn*3357=dQ3{l0dazqP-Hrk)I{do2cWKy2(E;j4t8aEEG zNI+`4!ALJ-Qj}j3nzsS9qk(|Za#GavZG3Bv(qbftV+c@F&k;E(y0s9UCn08ox_}Tm zKu(H2Pt!j84DpteqMx>C58 zb&|89%^S37@b1E$HO&{H>{e1`9^@>2O%_$?;AZCNLHN2BnnP9y#7RPl)Rwu$QOV{Z zJ+$W#EvHh?0V{@76VU&hN>P>jztnI(ntc_cWuA5PYJNWf6Zdj&o<+%RKW12}Qm)R~ zk9ozmA8mkJMPt6?E{nZa1*Vj%Pj4j9t9idz;A$vND)`&u_G*5gJEGNF+2Cktg(y>n z6nje?$SK$U68Pz@m0)I@40oRjQ796LfOLnkUI&%g(3~p+Fbpq;cA?ym%PrwI3RJZy z!uBJ;K;1(RQ!Z@`rnPJV5FZ*Syf4RU9Dz661iwPVU#3_aMsa2Aq(M-WflUgS63T)e zQ2Z(4b>iTmpCb)gcLpuRBYI^GdzEH>31rY8bRi-?)^y7s)W`huc@=Qfzk^y6gQ!21 zKZuOe{8hgP`L9OM8Hf4JL7Oq*3wpj9`ADC=2|6$t)PIReCqKc$lQekMPLp0uD2y69eW7cj3{j-95Vg`_IO8{nRapf+N-;)>%6fq|Owi$yc@fOMsfBKDz^*m$%LjF-fv{1D zl~Qsn9e|r zDa3RN4A=h`69OqjR~I(GbaxU{rj`Ky=}8J4n z3V_{#C}QQ=h>1A&j+)OJf!N#~ke!TxGEF0cWUtl_#4H0K4rfs9wyD~YVs@`~8^;4b z)ifKWi_HRVzJW!7{9`pjtIVo?jw-@7g0jO!9n8|OEFToX=AsWav6GylJ-gtjsxJBz zBL%+MxR$o|?Q4;V;WwTDf#HeA;A(I!qc3*wZTs-$eA|9Fs&4q2Ux4x86YX`h@#x3y z4}tdvmiP&B8OBPY@nXF2--7#I;W^qMh}}E2ETgX&h41+KEI2@9Gw@eHsHL2}EZd7? zLg9OSP=*7Ez7c;r-08QYK|i2$Wy%KP_zbiQL>IxAWt@I24)whvyxA}Kdt%U4USLrH zx>6{otsi1boupXt=Lcg*;q>!WkQ-b|b|S4 zj$nmfv(M)H?)X?u4!ozng5q6{>u3QndRi#KJuR!@@FJ_zLYg=&d&q;V-D%a_7SV0k zDdgiXrBOk9E$Yhi(f-)Pl!)Hc4xlOaSg{hc?nLuz&WfYmiWtaVK#C_At(3#G8pi#H zGC%lLHvIX>-bMkSx3GYdvAS?H)rNlMsH>*I>P3O{@I_H#k#*?HE*`HfH*(+o7^y|Z zl>)#x7_bxU`(dmV;VTXX0Mmkf2ET6%e_Ir&V3Ny^cR+Y7h$^^VSq#g;VUL-hG9RpA z1;AMAkZkdN8T}B!mso^YNT8YkG<1PNC?IixV`R4=lus_H8vrQ;;#%6!Y2#bt_`@~_ zKP4O4Kk8S=$^+zG7mVV}u@ER$-TpyGJb^-82h>(Va@EjIizUwYl0Z8F|F2$=!qw7O z-5RNA3w{RT&(k)T?_dZo92x{a$2lV z$cwDq*HZ+ljG>Pr@q;ZCZ+_;5TZ)`{`EL@Yq+G<^4U`5B{81X{XI>7Vx1vKcY$^x~ z&)~F;m2k{Pc|(69`M1H(i*)EwPSl5%Xq;cK58PMOhjsuM_2CgXpTSrM!`H1olt5AR zqvn$P+eU!ust=VxcvBGnqdugT!F{F>$=U+aonToc+t!_A==EWBJX5|QPzC_`E>K?q z5=+Txx1}Tvfb|3t+Wbd-ID_iJ4gqq`1*13@tq)#x@O2mp^$t)E2+375>O);LZp;ie z2aF7iOW|ti^}&g=Pb?CM+MlD-c7usEX)08_ZRMrQ)3O_x>}lx?ycb!W+{4K|K!i3< z%V9-#y)QbE?icPor)CAwP;IRfVy7~yX-VO-*>AlE?n*&xaa zV(4mEpay-O%xSTJ+l#E8mXlm{Ds4_n2zj>&!v&@XRCq^+C$e~qXnV=?MFfSi{}1Pj zs9t!}Iz)Ik#_fG+EYOoRgEViszE0_{udh?l)z{al4thUPhk&8FX#@y>JqS0kV(0PwbQr0& zT)w}=N^iiM;5=fHD#+0U5vkLg@v}|WSS@t*LP#4>JGu*zr=M(7bs?#sX1dFe2cl{% z*JaEBb)mZqc_8XZ6{Nq=WCzHF?n1I{C>g)9_V5$wcM-NLgb232%2jxA*h)1$gTf-@-9#dVlE>EB6~Zt=H96BiyKR!(r1nMQO}gn-Nj!D>ock_tA4~ zfE#D|=E$tdrVbr-PSuT*6QfK=f73Y^8=SpW{j}Cki||1o1ZrmcK>Zv>+L= z4@?JvBN%15sNL0>-1tc7OH=z4U@~1eS!?AHvd0+2i(uyfvZg4^rV?0JK%O!ihc_R# z@uWBk^f$!8%c4+#Yax?DoH48~YuIr-TyKH-L?|A($Da zV~HY-SedWE1|yP4g$Rx)FkQklni7T80<|6?gotu%@Tfsb_#)HrSyDu25PKRT6bV>t z@<0>8C5#0z*CoN&e|qq{qI^U_ECg{00aU%)l3P;yD=EsSgxCk_VRsR<03N={G}wa) z5tl%`K>%F>2W&HKXv2hrXCNxy7|{q|^3b36a`|FUAc$&tcZ56$_~&S*{E0yTs}Eum zcYxdxOSz261Oa-1IM4+!cEq;V!w@S6gsDX28rmomk=p6rh{r>Z4I^<_DGcK;whWL> zE*LM`I7rwYFkjCyg)+@Q2I9hND7nQ}I91d!b`OYuTqqh!h{_d!kD5YYre~E{DbVj* zOj^H1{g>*wu<{V%8P5S&pEa|F0Jes4!@2h6e!@zbne_*mUgCCx*hrqfC0ERR8jFu? z8XyZ?FdFozI>g&NClm>~5#+rt2p3`;YD|fi$$lP)Yc3Q|GUHHV-|CR_2vqYWLn8{x zMt^#6q2|vzL8AZ_m?|zDPXu?(A9+5YCNdt74lWo?$!+u}w;6B>a_(-xh5|CmfFZMK zQvhcoueFkiJ`KbL1^`(D;X15@mjl&<*PpF`93Yrzlw^^RXC=$lmZ|U+5I0{#@h!vp z=4>3SqGp#p2f_>GRp!kMQ3~b8;-6|+8DuCRRS717lrXuom|R)v-yDdJuL+YIjtx6W zStEhSeodC#aNOG&H5@s?<^i!(bqSNPI3Ctbqyv?zztT+!=E30aq~ z1996xiJeEZf|v`V-QyNIzv+1oK6HMQPkQP6CZ84aeainAG>zF6uc1g*r-fz=P7BQ< zJT2ky@wD`Yj~7{;78*V{Eu+Xozb7C)E<#dtNcTB6u<=JHLPJIq zQ0#?P%{n(hnnM%kE7L7@1T^K7V#gzWSe?DWa;Mv0;G08c@D=?&3b}3z#TyS5x&}(hvt|AazUKz4xs)> z4H?ON*T_P=1k}~;2!Ke+&+KMI-3c&qXc z2$t{k?6gr9D5}`M4bj*q?=j^vRk$!fs<~hX2_{ho+0zENqm&Y?B@o?RDBf^#sAz{n zUh+3xSQ;SXi^3p`Hibj1rg!Jy)j=My_W)Vpf_+M1N1>pgH5!P#*JN?jSk<%?!xSz|17y`}!l-QxnP_^W zxJ>s$K%9O}7)MPtB_Lh7tRH~*?KN4{w1#|OI*V-p-n16Kf%@l*v@RM;4qIyaBv!(z z15uw)y#9%_h-S9K=s#H-_$M0@LRtksq zZ@B*x#=66Eut5;7BuTDkEDMB5F5;#d0h`*JDy2WJ&h|M3I z9$bf!J@jD*K|J9O;JZIwtY9$u3;46|@b{xTfN$@3v+cKWfgcHd0iq`?)(ff(gCokY z_kKiOClMj=kKzadh`pNtu>lmw1}~Lznt_;TpitZR4p4cvy$)8QNX!rrGYo((hHn8y zG7AtYUm~6b$RdLADBJ#k6~g!?&>QTn5^^DVC%g~8g8I)*Aj&nTHvLvPVDjZ#GsK&sQ^(`U<@f@k8cKs z*IY^hXzdNUE=26{RmRYZXKxAsnFQidv7LYw#hz!cdTjv?hH}(wc)$M&if6CuY&tP| zS}4IiEroD+k=1D-O`Mj~gsX+2(W-1sX#)xaO^ z&D2mxC@eL3)p^|qIxd9(C)d*c|@zHq24-L#xvU15_jnyGySJ?s;91=uh}BBHY3;fl0~$zVEdgjx zpkAC?Z(4uYgxmRuo&s8$i;nXbqHTSNf-;m?rhzzz03vw3ZM^~d4UUTk~ zpt|r)C;}1%o6^_QG5{1WvN|mku+uVzJjmJ|D^ygPU&2F{X2SjN(!2w}LKrJ?xRvJ9 za9%O|ZJxjI!i<6~N;3&9TAGXaK*ww_JGrLaJE1H>r+JVeb)o^AODEyttvjz_O#y5J zVePv}HqxK7eiLn-0|oxH)|oArY3H3=Uh`3g+~y2d*tmNLh(e?K8^EsMuw<3*SipV^ zyFP=++8{TEu@X+6 z#=P#M4Edci{KV*dN9a_rxhePy8-rO4Kl$+!D34&QHGq>hl1K#~Fttk+3_gia5`X?M z62{-LuCcPR)I+x*6K;J<1-UMuUZiXHwxW!jfX9E9kyl&cu>j`6ScyY*D`*eDSskGH}_e4tVscoQ?x4P__zO?(sQ7=K5)&>y9XeFj>jgy0?lPv8**$Te7Iv;`)EY5?HWxLLz2PfDLpowE=bv8kZWtE_N zLg@a@^7JHbR;LdMv-`k3hOxFms?Zm9_NoXqq2dP!gx_`P^8kG{jI}EP^k#4`fvU`f zOnzf#O#m7ah)WTm7}gur;hYG8QyMZT^;Uyevn1c^_xW0LIlR&H2jxhJ||=8C8ltbQ)C%aN=ClZ3JNFz@`B8Z~;}6 zQCn~Nqu8M@rDB=Tjg0^#gJ3*;;jeN+FE$yT?;8ZyXDh_TYBB5uCBxwDM|qGzJjlI( zpCuNN4HOX(Cmv)hOF=Sb{{N{4K@|$SvpX3(mG%q$cjJ20R|X1nTYR! zj{q3EMdShhBsHrEP)iq(f-I5;U67Iqxs%p$eJwoT!GLGESZ;9^RV05eQepCMdu1Pr zyYo4V2Kagx3njleL>tRaP?=oyH+0$uLCA;VoZ~dm=M4^IY*W;ag!NY;UzRgpj{6;$ zr!cCBDI&RbJ%C$&fZh=1$3ecR1eIW9Y8a7JhO#lpPsTy4E+Ke+$|V^ksuk4&PfG_- zya?pUQ=qC3Rq-kC3}FLN{>!&Iv=`-{y+r~p`@&|UwhhM@DI_|!J^-BW;hAFD6v7nZ z^t2SzM=SRZ2Ar0rA#316C)Vpsgj+x79?gi#*q0z)hq3bSCD?}i386ZTHV6MCn#zf| zOe-!L;f6Dk$h;xaA4YJ>SjDg}hB2jSrHya%Ol+S$8%6TEy1&BC{gAQPvshDD z8?b^KKxFholkip`bcutfm5#}yWk_s*YGQHbwtS584--m%)W1YCqA->UTn;g`hpNoh zg;L#*)0`973=j$oBBeTboKtwPY@G_qZi6b5J(jN#JEt$gfSEqYjg&Ewmh5Z%{bZoU z$8Z+L@TAY41gQ(Jua!LqlAd!EgQ`I=QZ)h#Hu`oE(ozlk8u4CrA6+7)Kj*3Q3Z6ri z#CC5W6}RKcX@=7Q~6f-s&Z#M0@vzm7JEIpn8!N#j728j3f^#drr$++B)VNsxBfQy71g- zQ6>|x?il*tM&5Kgsi)-ttcf>MQM2neBRhTarOp+&T`5ac#_oXl2aI(${+R8+-#ldn z&HMyQO)!FnlpQn#E6TXPkR-BDP~I@8M#^sg2bjb%7+BNinyH9!bUPrs5c*?;z)+_v z-UhDSxUNQHYUa2sVDj8?bR@HW(!GlqsQ2OWJPyQB@Jj*OMnIwX2hdv|KFpj6mX2GJ zdD-*iV$TA3hod!S_ARGg8x2TjzavI&dU2TLFAUCLq)^IfsCpK4pnlgHgN!;*jDu?f z*!UH2469fg@k;LU4cC?D1M36OU;~K$AyM@Ks7F(@AxNO&T-qc6rn^9~?ECTvwbw;N ze;>2}t^~(z1ZFScctVQf*)i=tlyI1iDHIw2vYb!+NRJA-i9b zQ5;^9!x>754~&F!WGrimJgh(98zg8Wp@a_yR|Bv%fkke%V)r)!H|QK%P$*i8W7@fd z5ib?i{_ygm&%~&nmXWY0#!Ny9ZB~x#^o^W4HQ{!ZP@*#SK8R~ztV8g}Y)gPc-50by z@H%MFP(mM-WJ9O%h`nFh$M z(?cDm)N)$rV@{ryMZkC^S0oSmteh7y)~1Pxt$E;jcr<~)I^*HiQ_ntkEV@&tF<~NX z^I-NPu=k#!d$JM-LyA4aid^$BMnV{aUnv+tlqoihO&RWKhhf&8u6!sV&=e1(5D(eKJCJXD}V@Ly+grrw#WNG zFC+xl%C;L;N=M>Gs}GkKS#fR}Y3Z~aB@e2Cp4^(a7HzC0HjcWUIxmp8u+Xi$3dR{k zV(c-=L$hrqGPA|uA2m$SZ168@(2yW&z!KYtodFMf1B7}8(MXVcm>tD7ZXRolGCVoD zCy)aK8u6zT;lP9|-gq~r1$<04FAkgx&@joKX>Fom*AL+pw}UcNHX5-^KLwb4Q&f0+V&YPnqrRb1Y}W!3iTZPYri-{fd;{@DionQPvPMTwar$AA5lvC-O%?p@Elz+I zNv)ZwLiljD12W>G7|COw;Lq9_I6W2!`HBk9+I29xw8RBb03@eQG~BM#_!kX%TnHm7 z^8q;!#@fS8&M>z16d<8-HdktJbX@~!o5_>kf?=aVDiqHq4H4fuq?)IN;7> zc!EoL7l8FJV~jXLOy(HHbacJSdHV@%GQ7;#YLSdh9z?bA}DoB$2 zQQ+@fTLipOKBG}~OQFe)fZ+;|g^>bTis>iy4Y*7NP=HpZyfX2Zkpw9^_f;unE~In< zwEwG8l#F!1b!A6Or5^%53DCK(!(RZNAz>RYsY2N#bZ|R>J)+}zNkHN%89P0Y=TeI^ zbp(7n;5PyNSBLXBnF|Wlk%-iAM*il4?W&BBhZh#aBa4RW^U&h>ECBxh&tTrSg-mlFOrf?dEn(WdWB>X0F{?h+Hp4wV|~d{F0txj;o7gX0jS0nfWPq zQqI3B(bxQFjF6~Hx($gciQEp6wXvTcRe~fzYg0L-Dj>w44L~NigZeN#!{80?C;R*IF1uj>^W;)#>I`@>RUDNG9=xHxjb8 z$!9ubo`wH+FzFj^Rko%pPYrk}`7uJ1$@?Gjjlw zj`++Rz@$UT90%BmyJnT5W62x`99-nEWsU<*I{cN4XTI2AO%M^>C!cenIWl%iKAf$AuR<@UI-pSTr@zjFzLjK=qjm;Nl*)T^@icO z#s%?A^Jqk#idPGgNo;qe%!(a_>?91GCc}RLOgagH$n*~U*-y#vz$ht&BN2X^PJ(4S zSoQ#M0fyI9vM_VOdNng!@#ymnT;>9*h{*_)m+_29$k`|xRPW0|3=Q=E0oKprE(T?W zqzob{)M;dNapL8SPM$pe%HL9jbnw;%UniZH#~7+-c~!&*auy11MBqDchjkVKrpxDf zFlT~s(ksl#%3FM!%ya0kjl{~!fv$q{Y*$aTSolR_5PM9!;_wYouO$oG@A5epq+5{q zP?x$MqZ=yAN=Er`u=WsehkQN+yfk(>LtuC!y5LO!&+aMUv*a@gL%MiC+v#xCg&zof zTrYv|AfMZTPXjhj$GhO_8@Ogr=0Qb0FJ5Bz641>$oGe^N z8i+j3T6GOW+wqN%&(vaN1iXofqU1U$pWDIx5}ZDmk8@_ShzQXdMn-r1>DX^1j}3!_ zT7WfvjRy-_E#T=zJ1Q9m@Tarfk*w)pO$B1S&Po;$97)T#0-n1P`%*s7gJ%VZhjbpY z5Kk6OCQG!}oiv$P6_C)hoWY5Sl8V4*~59SSk!pVzP)h)3-J= zT7qYk#7>aUB=pAf0bB7JkJB;{H7g?pOu8=VQm5@6XdzC4Nd`iIoax)qY387HicL-_}0lm`waT zB!hyNpQN_6e@2JiUywKHflV}Gwsl}uu=~MS3-E`LWe8J`fY75CcBxrqgJ6s6iq(*x zQIe2%XCX${ti9B5J2V^&IL|s;dn4;e6CE>5Vr}S=C^(TY?e(nlv>aD~P9-f(Ye3%) z!_$W>)U@D{rr~e66!g1%rbFO2@V^0*PMnlC85FHY64C0K$eSO5RBSkN1jEZc7flVy zIn+m+cMl?9&X84am)61Q>!6|s#)#Sv-RL#b82CQv;j2qk28d8rL;6Zgq z%cP|HQc~XN=>X*2z*?`lV49l$?m(GGgT%857NXTLsY372tYToz{;hatPo0$vl=I36M(#n%GZD6pkJ^6tYd}6Q&V7nf`2SQ{^5x|GS zl_&yOECN_016U#gc$l9XE2U%)*3Jc^h&3A`q`pJj`}hSTfw=k`guEmneWP%77ScBf z>C2_`&6jy%Jk8IYE2YIrY3eYg%obwhgM1~oxJ<;KkB7!=oQcS8|nt)<)0`U>ugFPbusN8Sd22asKsiJ?dN6Z}r zuxOr?aSK4#OOD?#kuZx;f_{TPZ)5BcMjJ!2bWF6wJ_WWMUMk{kj6FhcW2$48v0^n#z>ka5Zv+sd}AGo0}-C1u?0O%xY;;C!#z0~FswAliGo?K=78Ohbw7ahM2 z`dfnWT|+LGr&rm2dU|)Jj!GdQ6}BS#f-&^ zUvCL)hI~Gyj;9%LJTU(udSI!~05)|3Aq9r#&BY9)joXMajo5TK8>PHtbUoAIKMy9I z*mHhiN7rf@mOEDWmo+}C3wH`va@OQ2M7)K}HWhSMyq2Iz&WOMg zc1Ib;F!{WMu-<~eC9j5+O+E-Fd!=@)f^V?8TrzBv&lq$F^ugM1bVjm>%$kS5s+Kwm zCoUP6#WP^k)X;*<_hEk z`78wTYXE+O;Tgn51CB-Jzz)WW!CrMXChJoK?~n57k0#F+fHTQ3oR@CrqjVcNSixsL z$s4Jzc;Wk=N=DsdI0qpamra$W0|Gh#RiFzX3)V~)NbIBAQ2Y9olj)ADWwG)LuO)w4F|JGp`$gQjyd2w5%nk^o|(+=}{qJEVA8 zh?G(J4{*yeF-I>*;9CmfW*8nTvWQYkC)>u;K`n28(=qs-h2iCf&qS599dOUp!{4lz zHORXU!V{Qu;vy|l>EN5mqa4~)7%qb>D0_5BERC=_|0O9W8SPtbU>d@t6DOBLXXH$Y zaP@}~a#YxgG-AY|OL1Noc~=N&li)uSCY|_6S{fmBL=%bhM~k!>{(Ib!8FcziN8FLf zY#_fWhvu%0Qzjjclc}I(R_zlIJbhsdwKefsZy^hWi^eUvT_yi*`OF)PuE#l(zYkZC zl=s_KxMm4ga^C3maLuL=PzUmAZ-MJw;YyLE0>fH5?RQs7n}0)=R%n+2wkQ9s+`=Nt zaTh6${w3%$m z25B}7FB@cWFB)F-0jM_-YyWoEiCOta{T{su|%MmX0EPTI*;X=t$L}=1c z2qi{c*cB->8MV3?E)TH5q>~IT^FuT(<=!-f!m~CEm&qF}w~km%BOYB&)tj;qLta<- z_k~F(ewt8?uYUt)OS+rV;GP1*<&mX`j`RY38u96}noF5g(V%UF|1Owxl0iDAs?AOy zS&zZ_4Gb4amLekQlIb*J(?$I(Mb3iAf8g&K0+A$x)a1xtB*ON+h|sS!Ez+d21)5d?VE%7*gp0RFMHun|1|( zJb~fGj4ag1Wwk)vEZ>SBtisx&7mfYK7m6J64#iL$#+5@#+TY;Qg)WuCOQNNy3tT)* zy0?mdKGCI{w3T*nje~I|;n?7vxEq=8?vJhDvIZZ~eU&s4q(}I-Ln5h0B9IT^e-tL2 zq|%l^dNQ}HR?`P^%W^e+6oqdtSgb0OSpWTySx=Wx{Fsn*6Os;M)|fdk9aOSm;+fC8 zjj(#OSZXeqke~I%HsYnRleyrZJiY|0JD=v|It~k2#iY!_o7_Tnof~Wae z>qj6_27LK3#q(i)*7Rry8`wzkC-<-US>LWCH(h~_(LsJzz#8pxHD9OqY#Fi9pLi~; z?(3`4z5HRbXwZ-Jg%Wg;x*qu6PlXb=NM0!eTqul7398T;bcMPO8*^5``vKk<&?n*U zaP$KCe5@RHhmzl1usc7iMl}_o-w~x@dwy0(4{{3f=KL%=e-U;^Or@9SXC26OITz*U z{wlQ_ErZQ_bP(J>i^NUNEp|$1GfF34+X3=FGMgr|?Bj5j*6h)~0kwaS*t@3%j}w}! z!%%Kso?A((9?e(s8+|5d^UjFpS*?GxuVX|gcH-DGs&5V!h(3ch(I&H4%mTxFnFuUp zGV?-f5Ej6wQ=$4bnR$~(p!C=dkD64cf*7S4^_P>`2+|Mt-19B9_{pr4pLR3aH%#RL z`t1S{7j$Q~y)+{#uenmu>( zbGVufq*gccbGVke`%->R!4B3~32VreqE)DzHx5A$-F+%Qr+hH7s3F?|z03tC^K&=K zu%F1Vc{GmK@U5;6rQGPp?^Q*smLL7OP;QcZK7xXiSsSWKNvtR0V=5S_hB<`|Q^Im2IdLirEl+ak8iO#EmElsRLCVL}EKOqc zt^zfExxwd!m>fe4O34f^W*~}5ZWT%ID(SKy&yods5k&HWJX?m`OBUogvV>4c=S5_$ zQL=M0T{5)`wR|1w1nJS(P$C@_YY{8U)y7b8&no~~^cTxgMs*<$!_%-OdR;&!i=S89 z7bxfx5M5E)>2nQwHobLG#9e)i{Az%({)BNgUeto-RKijVKItHupU3$*B?luxH#2>e zGiNfg*`Pnn&!M>i-1NZ)YE!4OB%TlXRF}80$K0E8GlXizb|FXQmANAI!aH5bczqw- zySOAYyOY`0kKjJSXz?EPc{00Ay~c4yI`jJMX`vP24Eo+gwv5=cuSEn?FmiB4VjKzM z9zRsqh4XP<51*e95&SAYr%g?WJuM?}3K5vVBT$73=vhV*XmCE6{rrDed-HfNhyQ*2 zwVY13eW=$t?b__5O&uihrcz0i6lt*}ROdKy-$@)4qL8gSq!N-!wm7K}Z)-@1k|bn_ zM9NOS*K_XYHS;=0@6Yd_UytU@bzgJM^PZV|UiUrs%-l0K$5W5Ma5+M4)%!qG-tW5f z1{;(e)#>(e*kk(%7jj(i@(r|GY84*Q^ymkjB9#FR%| zh4S9W8FO^6=4@SkWNlB}0uF)mS;H^$@)bYFr?x|LzE(Q(9|ZPSl^Qk9(A$qw7>rzD~V>q-)~O<8TfcML1Z+J=E`j2F(`8 zg2VJ2L43fGxkgPHK2mklplbn*e4l31(lx#Sx(bF@sO~T5MnW@|Isr)l%skGUCip z?fdGlL!5UY+XR=){LqvQ8#OZ3>@m43%Dj&epL7HG6{6kI^=V5;K$UmWFHc6Hi=9I! zCYkQ6eg`}vT0?y_T$$Lgg}&oVSUd^TKsal$LQoZxg#%$yqS4e~H8~9?$AiBau1t(r zlM~K`$$N41IGi;ppo+!GGGZ#RXlaaE{A+)-H$Ftbr*LIr#NJKnbVsk9N+zm5-~imh z@g}h+oV}O=l5+k9Wl(-K;!INQ0`-?7PFu)&R*xgaJSQpUxS~U@W?#m5L1Q++^Q{!I zu4GIB$=U8lX37sa57kYzpQ}F>aUOu|ITt5h*CAK8FT=N~ZXI;%q1jBGfW&q&ioX1Q z+!(j3wrEmvRXgD6v`;HsWjLGr&2jf*Fyo^Gj!%WNLGo<|6P{ z!bx;2%%w1SDfqE)WhM9{y%*P~k3s`N5_$`m2jHw#0adI%_b9AN zOtEJ3KUmGS#1rKW1iS}VCPr*ZJ1j&>H{j@JIBQZs6_c|0XsN`arA2CSGA!0_gQ>A_ zWnv>qXw)=GXuCGZe|LmgvjVD^-D3sJN>rMAPt6wKX>keoF>qz=@W&=pRtnEdz|nnh z)}nwa7EfIZixP{LDh~cKDbn*`^1ldp3$9FzNJ>Zifh&+%i=!{$tV!EHnJN_-qn@B9 z*1$wzTeL*r$|RCa)!M}{(Gb*uaMpzFjZBq_?1T!9J5c=+JPuAmz-e%063g1y_hZ-? zjH8R;tPR^+m?{++qmEV+Q(>i5H)_*=++V;ox|Hks#dKr#!DK%*JXCR0HAvZi=gHUGT{aH{a# z&+un8{*;P=OvT+v@i$U`5v+HCupeBRn1bOlWBtLHqlfgod|MJ@z4~=<&y}5+Zh*6S zaOo+Ziqp(rn8;VCKN|8mkiL@0QU3)=o`(;@wEgCXrI+K_4qkmON!^A&dEWV|@tiMw++P*Vd`UkiUF~UJmsaL0+SMI#mnKUJfspl?-XMqgt=1 zgPTHIXnRpFKvFZxUXFFA5R#xyWh4fVq>^A%`o9+{s3>0L{55T_+X z-bTkZ)hJWcADj@^7-m1aAgup>f4CV#m3nR|OxJu} zkrZ9SZxVkrq|ZU|CY-%=Hj(z^hn$X+e*}IboISY!TP4P>c7gKNa$GA-&|^@|Advn5D9( z)c+0g+aaAvxohEMPc17$?46liC+g*Z~!7+#K`vD z!4~3jw3R74UFD-oP@5(~d-uQfgYeeSS9Le3zXs+PL;5=9_C3Oy{|*gU%HC0V2`=C! zNPqpeeA78tr$}TK$WFoJB=u9FuhRj8WpFm@_NBs_zYJ|}%1%=GZ;*F^^z?tr&qCRB zQ`x2J_rs+LA$^{5TQ>1iU32@?DLf8Edv;Q^y~g&_7?(_rf9#D>i8-(~O1bCNUj%EP z!qWFutVvo&j7PIJ^Cx(7j8=OART@=KOUqZHUaeRC9`);>sMDtXzSHZ)P3%t#I}iETBqO=1bdHqB08$H7g}ZeQ`&;Gr*OJ4SON~eDcIpif8Vv zPr#{=9tYXga5gKpxty1kgBB!N`Ad_0;vMn5-H??&YGA1PzroP`F!ES6L&%D3^p<%J z{CjXVD*~!yMYe}4m8i_Z3e8GCr2aQiAB(Jr4V#ry-$&)8r2V(a)ma2-Q^>es>9uZ8W&V!uMZwAB+Ji(64k zGSd<82%OELtrDqH5!1kVYG^bJEeHQTT$x0&b@%h9VB#|z$@fdvguN80Qjsz0Rcc~Q z1#Ilm39p)PWfIHUkS&ff%|RUwXKmOdrboJz4-o6dDi9v(PQwJO(oK2W4BU!%d zOw6y)1kF>w4iuf?`oLBB^`^>CU6V@j3~jzk@-rH;%izXQZj02;H7}oqx6PL;6W#af zuYvACxF@OSFAA&qLOx}BB7Z^slH*YkApPuL@-g+Bp)YlQB44HcRLG0qDr~-GC0@<9 zkT&14e0jNSPt#U2@P+!nLD2#3N;v=fu)Vm023?$LzN3bO*jYIzYLs>A%P-`jRP$7! z>@{P%?JEjpanTVqzQpllM4Js~E1UqnM9l+E70TMsg|bF<>9siCs3udJlZ^HIPdfE3 z_|M_W#1b-5c8~Q3r^?Uz01qiu9;E&v#K>0Q&)#r0BLYwx`=ttHTbpv(jp<+&U%Vwb zO`Q|aISJV#jAO4N=F?q;dv=&=zP&&~WVCMV2^w{XMwQItUF%o9Jz$g-w~LBY^WT)f z+Hv)tk$1*|WR}MumR1eBAsPnYkbhfRvI2BwDbDi=oGmQ@=}QI;8j?Ejg3o~g&jI`z zFjXjPMHkA7(1o%VY3Txx!!=F!R45pYeC+|ZKU|rZmg0NW`h&~fwLW?VT6VyR+d^_I zoISAsGzWVh1H%&c9<}$N`fI?QFJibdi79of{6A>ZCJMYHuTg2qiTL0Miu>T~<#5f= z^1;wkmi{5R5>p|69@0YiDvuxUn#)yd34Ep2|Jh<&0(~Eq=CqpVq5f|$aRA&A-juBf zNa+|fTq&EO@_wB$y$RCkl;3mM&dxkg<@fy{XRcjw#d#P=H}x_L5beKkw*2f@NcnAf zF*;LY&Q*UAPPh^L_i$wr-4^0&NE#K}RavJCx>})b0A~xuH>oS`hn~6ve@qH-H1x+n z+rPR#X{ruQ+EZw%wnAh^TB(uOAo3VQT*=7V!tNK2e+G@QZb{@mqhv$4X5HdrF|L-|r+$kb;F2tl8xI=I}RNF{?mjCF(DNya}YoP<~8&W}jS>p}lZ? zKAf#F0;;rm8c9p^c(A-KYqeDCbi*(f_&eds#D-LxF(dBAT3pkT^!=^=XeeKdKkJjL zlOwg)eTifZg0{qao{o!Sl$xS`Nq2PnA<2ir+1#BRcRd|Vx}$J>3Y<-@fGWw&No!N0 zFqs=Qx$|M}GVoWym5B|T+<{NvS*ItQqyFwaFx?x1q?x=|<~x|Q;^q*~sZiBo^@l^f z#;I#Mb$O4+uy2}*I_YEdEr@@IxCq&{dD5q@bYqmInome4?buGK5wc%&ra5Fs!r80} zKvpZzoA)FhH@G#OFU?Ug#XN4&ymmSngRJ0(!Ig;-n|#^Ql#0~Wr2J<>c^3rCtKDi; zuA^+7O3^+lPW8k@{R*e9nW4H|w$i0)s;UP={RPA+6uix=wnJTBlXfifI&EL%bx+9Z z!r8pqk$_aGM5Vdco7WfDsssUzNR3>&B7XaJnGVLRzlr6Oyfac8LC z_7t=)z+VqnCXuWOg9cpYP8`jEvnFisd8$-oGc{_nifu_c?u3nH2zUdoOk!CZyA8m=yRN>UuaM>iMQ=^_QkKa@o6(+iX3A@2>B{7BHRmfUwX#n?J)ULxzH{zAw{L3-`K?r(X~^57367Dz`fw| zYY42%HprB9Re9Uf@JYwXXwrB5w_Y}2rtVB$A?OD|I^y5*Q7}*0aFuU|{1!;3{YyUL zg3obP=Yn5$GWtX8Wwm{wdRb3EaH>?|Eq^pAkT2Bl(;H1@@IS$oi2=Ey3$2eUD%;fZ z>^n3S3lXChYIsk${4&v(_KpP=`hJLCEZzojY}>l>qeA2O*aC@X`$45CS1voJ(((b@ zleE?DgE|1!wbjp%8Y8aT)&CDeb= zxB#gzw(I%e@BYCdx=V3%d5TA95I+J_w((gmn@rHyG&S1xbaZjzw{aX?@=7bnS#7?i zGY)Mhtn8stDBDhq_im+NVHEUBp*;*gWv|z_ zHQe%E&PsKWw>4x9PdFaiZg0HMyquN7vEAOMY7+KV)8o>2qYJJ1YuUW_l`+_)_|2^T z0&taOdymY~IQIZJTRZ~zsxkyvUsZ+zrV3>vkV4t-BY9PkL^C6u^{lIqp-JE$f-4it zQe-Due{fkZ_-D#}zFam`VU&>?wQaw2>QyM@wr0!1UMa*+m4A*m8_FiB{7%S!hIDV- zcdY!_xW&L+{iY0`tGeybwT7lAbsOW0p}UyjpQ^4;e^hp8Vy8p*r~Q$POzqbP*+N#% z3-6eR-%_9cedP%G*sDKU?GGl`avy!BEQFy&FtUnfNf<{DQp91kJXI;<&tCVuD8 z6ycU-Ga$g8P}XnQum7uq$qL%ApXovcvV4(vdb)yC8x`BnksSzjK zj>!GMkAO=mzMv{?y`|8UN?h8jGe1e$D%iaP{4}^SF(MaX%(3XGpkjYjwmmDIdKUuQ zPazwMXg`H;5~=XL+b~D>fY%`5FQ_)kE+o9|Z)dg_2NCns;9W*GuWiY-hr*gE$=raI6Scv8_hW1~{%?H1? zQR$?U7eDtG&_&8v^ELKD#C{VoKVobF_5u{9F~&aPWAxHwHVcP)oa7o$f1oPa?mZ9L zUJnh8vNNdm*?8}Tx+Pqh7?EsW(Gs`b1JB5G0(m-|ElL4ZY|7SWr4o-FO6xVj9Y(?E z6$ls)S0+YmSvH5BlD|~C3d)BdcoEK)<%{w9A-Tp)8NR_!pX0{o z;Csd#niL!Kw^jSsq+;C(?S9a;p;r5JP+=!7M^POIzAv23m4GU_%Hkc4sD4d8&Zhx-(iG_X@$UdWvQWLcYqwgAbl4Iel32oB5%9h-jQ5vV< ztub>lWc}c5Y1ko-RH;Ozxm(oiD44w*{Izgp5=k;rQT`=f3n+OeSN>bD(&K3wqI;mRbEm?&@11Vaz1s5s;|z2=bS za1U+O^*r3&z<&$pqL+z56ld9k)<=E4buv!#8;t8N%{ z_dzp{I=v-JxjX@`uode0h&w(+SR+m)mLnU9GesLTGl4nm=$T2Drdq1Xm`} zZL##5kA7BF{Goou1V|@B@fe&f7u%%+J)Xq4Ee*Lsa*EXku+A-fG+DNzL5cb)Ef6e- znE2no$VwPkPa}F?mO|SIuJ9WCQb#P8TXYJKJOgJlJzch4v)QsYYa;>p^c^uuH{lP> zPuA0Py#V(#qf6neb$hGLuS;UVTE+QO_o(?fFn=ck z?t?3n__oyMpeKlmrK${up?4aB&*5yL+0G$fXm8?4BZaoi`go7H=ME4*Lj5P4O_J^C zOO;lL37UOX%@2e526%k#2UjMsBq1YilPk~$R7W^#!(OUXsmK_0rJ8shCI*2Y23IDL ztclMgJt2;+fwLwmY|8O9G6=?9t2Pe2FrAtOejZ$z#Iohl4)-Z4cBpa!ly5<>7B2rb zh1=Q!JPIjm`-fH+$p3_Nzkzt2xB9Bj!i)7;7@m7|I(5*+$@?2h@l3f(w86u=Bb-gX zy-A=1aNJ{YV!W^VT`xijfFA}|CXs9jY@H(|fTL^RU;@|Q{-RI`KeNoF^?TJuffHbWCeZ;T$x0&g?JSzl~qXnyGfGRK%kjCl+r=U%UugdNg5J;{(#YQ%5&V0&hg4 z67xkyXQOAiirBTkYoxB+2QeGAJ6M=(Nvq1S!*e(8 zQ}go68J`&c;ppYN}5YOXCJCU@1T)~3(~J=cB8tez1n`PitXm4pD0N0 zk!QSJ`?&1JT&`tThA*xXtuN^%Rp|5D$M=4KjLvT#zk4GxdQM6F!;QISyK))k?AG{` z4|4T0bB>Jv_#oFT)BUJ;-w$)SLMfy#kBTq937hC#f3zkP>!52PWD$HP>92*hg&_27 z(wnN#i%4Uw^gJW4lK#1hdJXAcu_}F@@o$fg8&AaaqQ4kEA5|}0^2Qr)B-d6F(5-_e zcVU{BTzxKRq$GUuMBE z@w$n*I(0W3qo3*JONN zklvn|mDaM8D1|*V=&OGPE$$INcMHB28+mfP<`xvgh@SBdIX?cBxbCg^&Yue{XAeQK zHO?>Ydx8w~BC&(5flnXOhO1(JCnPaMHh2p|2wSdn&zT2~M>w`K3#g4|~Tw zC+CXm|3%G%X-SPwX45|L)ss;&Wqsm%C*#*ze0p3tIoG1m+S4^z;xaz&kf8vlWGdO?2t5(dmor!SMPO(-&i$# zWB+)jgmZ=J?0uOkgsrO>QlZcp?fuZD=X3|T)^!oAS zUxR*}=ckZ=tJ(>cNkE1C65oZTV2O{inNdEh7EtFbP3*^2Gjk~U4ORJ0 zApY{s++Ov#E_Zf(wn`yQIxF7uu3S<5*_2~bg(`MlIx9X_1nVidr<&l8v*NP5a2Xm8 z(3C%%t#TPV42bWCfqJJg{Hd%f)m>3tN(aR6N_YjsZ%U`b%aWp!@LLDO=_$EGGD`=< zE#P>C@`T9N1jvo-aEzXWtPC*8_CUf>5d5q|@YBwZc<_!ONjIff*kAHltE~mr4AC^Y91DARK5MnL!FC%` zBmVsET4?_L&jxMEo&1|2W-m=<9F`O<+^c+((J2Z+XY{Aq2^~5 zD%rN=dP}qki4@?tu;p5rnNSQ>OnB=;`oPY zxrUi1hR1u}m#bUv^WiF7i(0SsM|8gokB_?#`zh@+Lc_nxduocH1p~gT7SN3WKUNDE z$^bm{@=rB}{B@ahP#ceo4z)5hC9611>&#|`-jrbx$mxTTny!hN^tilqHy9Z=nVze2 z?s$ezt$MPl7O$12*9`y>|X7)-dFIn9RHIo5^nzQ`!I(Q@cm;+4tv)TbD$dmTL>Vpgsg#@ivP$ zRsE?8T^_~H-H&;4a~ThBta_J`;FYBBL4#G(Av~9+&CX1tzS`?4G?$>w;*lH-_x$do zHB~R6#h7PifASTt;b){5S`3vi;4MVZA{CzN&Su}o3A*_cTtxk+Rqc!=|3y{)7V?kb zhk!N-Mk>?TS_Zuz4EP&0sef{U2H?3~ZSwkH-xGvhLAiaaus2Ylzac#%gKiBY#v6jJ zak&=5x(o{08WFnr5GrneDjE^V7_fqK0}Te%YO;h4DWp!xvn%D@vs$DrW8(v6=MJ}#&b%@nK>X^J z@olrw{~`ubSH<&Z=jvKK^s4yH*}2mi3x7|ACg#>O?lwJYCBJ3~*-;T6^RUJ^@9KEK z!+6UU{=jQA#>05=%rvW&X>R}9DlOr&8U840Tyf^YJd=lBt5Kgv%K@DUN7M@RO-v%r zWhmNk!r$P6R++;g=s7NPTrK>!f&XTLT0JuR*9u1C6}Ee8`2!oRgBg}A8i&*_ z5xdP`7q&pa4i0u(A_vI{E3aCR>l`$f(&%@+7CIW_c$2&oiO}jUp}`IDH_zZ%Citcs zRQX;it&LuxA1A$9YP2@zBw#HAum$6Gsa&>ZNr;)CmOjHddjuCs_?$V}ix-YxI&odQkIJ9MsHS9&Cgk+$ewapfI~jHyjpb zqs$@b)Gyd2yQ>`Uk_|J5#Ct75w;`TO`)luzByQGCnmF9Sw1-FNg`{UXx+&;aN&hBK z4|`)1`pYV`y{`$Kny9vKPvdTboi)=1%`3pyBY!7u)>>7YgXg+5*=zBm*2^M17niBd zbBUPhJlBKCRZ)ZE<0jAMYFQ1}W2vs$o@g3K1Dy+|WSj8` zDXsg)lj03uq7Q{Do>aHcVN(3rv$@(ANJ>Ud(sDxQ&*QwUO2A|WRLjUL^7#?=Lxh(Z za6^sswoFb+TgW!e+nR4ehX2wYCKp@C8Fsbo_0aqFV~{ zGcb%acKLfF$=Ci+-$WWaT#ZXA*a4ttlKvKVI!TeM<`&}04vcm#G zf15}u1oIQrJc*={U!-QM=6}*1nwF~hUqIUD-)59_wR|c)sCq{4+<8VxSI;QdzS3=RcLcx++tbo02`B^msE?%uT84O zT%5!_SI)_=MzYm%H)*=&x@zwD&1SZ0?v_zqHFN8x+sqZpiRRAoSKt<%4O;CA%p{$6 z1>~Y~@@W1=6`qqt^LaTHCy!=-sq%xd-!s&fU+lGLcw`#$LXLbW-tU!MW1GsH_xdN|FAiCVoy2X2N&6ot61mv7umbzrM16y zqez5d^YjF_SE)c_=Eaj=#TbW3W>NB&w168hubfPq{WgOlXfE`@P;)M9_9ypNcnD}t ze9a!5zD`ds<;bb3*$<^}(f&{l16j9*As ztr$%g?6hLEUEnK5?Z@&eM&Bn?U$tTkBmJ+6F_|G%E5@uRY{js5mgSUGtr$O%uKH7I z^rZdyG?dG};7LtQ)t}G$C++XV8ejI5O3+1~_hfsI^c;Dz+DE9A>Gr4M+uq34Iz}+R zWY5knOfSbv(i>>Gzp*6g8k2A?AC<)*Po9Yt3*(iq<#I=egbPAtZ*q+Tp$~dm(=?^Z zkEO%YHR2UN=i1t=ZKuX&%?`9m)TYnGFTSBaC{9JpO5alQqn2L|rw(R+bah^S3!L(Y z*}M5a5zg<+Za`cA82=ODe7{Wl{q6KKXK` zy%x4Kwp8X{Xjd8y7TMCcSW4!EMLWIFeMwin(4$HJkBeLQtXivjaSwdfUff}F!hw`j zy}11NEc$JS5q_TJ6+0IS|2}mYM~WBLGhU6!}&apRLKC<5%R93Q?0Jqg@i zIs1wHhV1KofN<`NoLygq<_^f&%|hE6D{Ag^oc$w}ek{-~W0{1&O^mZmA-Atk!g8D9 zZ1eP{G| z{n~TO)GS8%Fcs>8%puxoC8MP~8?_WZ8MSP7x(t$X2U0s?iC!l36t>t$hm9qCCnK6d zbB|GJy0PnB_+*4Lmp(}bRsTK8DeS*TIc2Don>8k*o3>X<=u<9?uUVJNb?2sv*(T|m zGH2>dOL}g&hoaPQ4!+1(Dt9x?e(HL;gvP#w@n`E$u-u3+iHi{uPe7hl@owxG6%YyLS`z~u~TlHj6X{Y`F z67WC!?3mI}R^+)#fiqIJYsAaP7+#8he(-4L{8_&0>47_;`T2+<_}Q zE1mu|`ANyJNuQ;aSALqiB%8&~Sn<}+Q3bf0RTkaAd82IDlq%l$i(LIC+(}AabTwQI zaW|;!&GA`ZU>_9j`INmm!-O?~j5{=CUr$vT731bg**54;y+G~+_9A_zg@tKai!)70 zbK8LI?J@}EXfD#9#R&ACi|vHsf@U};7MPD;*oc-k7md&6cP@&8tHl2+0L#MLs9CJ$ z9^di}CM(STJpN&0t|*IT*5ms&=Jw5EDRe8T&-Kj{BRY&C)(@R%qoA`l@dqb<7M-~^ zW@b{-=UP+5=(|lw?X0yVI%^XWy|YhznJcdI@19w?gRy6pt4C)SW_gL4BN!_{$9sL1 zYgms0u-T6b&man0AZTif=UbM?{ef8D!-)X4+CNqWZx5BNspb?b9|(CqAF_*s%A;aCSW zK6X>CNfyg^#^-LrylD2hOK8&PUN^)3cHxr#_PQDNwF{T@wb#ug{p?LM+Q(j(t3&4X zut>>i4|P2A+gw4*|ItOw)flTq)t>7l>Q1_@-Um%Xt@`nh=88@b>Jp?A{FDv8)hua>B>yj^_L=3MJGTv0Bsk6FUGY+UwUoP@1n z3Bb~D(ye$>OD?9CbamQSc&-CVOpMrE32GCw4p^HP&~{2-n4xp>X@ zSj&tnfo1FB;cH*qL^3y#Hx;^>;IRoVk|5bn;&wu>+YnFT}tBbY4Kw}ps}T$>NO<}R(DF`?4);H;>@`( ziKE@=HV#%vO5$)4q`V$^dnvXiarW72JMZni5vvcyGk?T=0!s)b01E+GP;V!F&0+-| z+;PjT$jwf=f+c+XvvGPWh6{Jn4=ur1BPWT@)o=28k|n(BHXFSqSFg$I#+Kln^lb_~ ze4Fk5v?HBd4<_$NBoeIq5^q4dE4ZXf){d#UJ2e+&$s1CVXk0%f`?K8F?W>{mrE!gv z>;~6wE^4lOlGn>GG}kSW9@#zAitu~>Ymst7j3DWHL&QaOnk>n>E7|=Aw}~m&pW56eI`EV(xR4?Uz}I8XF=sY7Z#NiR9-Zq zXnf7e-7YJ7vVP@9lZ(zOjIl3Faplms=*oh4_S*U-m8VQAdTWok@UPqS z_O6`$Sz%($Sa4L#{~Iiod(KL8Hnh4T?uMs9ac5e0-g_ zb+6*1D^EPNc*?HvPp4;cmBE1GC=*W{SbTcr-h+z&E{vzXTC`U@`Ni~!@rKvart;dM z#g#$j$kO8L_l!HSt0> zKwRKCL)_kRp&>456IVP?r~Zi=bfl9+0dWV<8RF9%7aC%GH~P=A;(DEXYgiwri2~v? zJZFd>a$IPLXR9rKgZi-3L;>+!&l%#^9Tys6e6niO^@fHmcbX_5e%o_~xKZ1rcr&Tc z5aY8~YinN(YwR>pK-|o8hWIYWg@$-aVyg>3p^cp;3W)FVoFSg!xX=*KY>Q|3KXvMz zsA2azO%xD6=s83Dwc|oVjBj>r9>3ABO->U9#G5^5hU$@N0^%P%XNdoHTxf`Qv`fl;hlc&*G*RGidzMRNGKzDK3k`8m`@|MM%`SGDC?Kxq zIYZpcaiJk@4qN|47By%;Cy4^$13hPmk8oUQi1F#Sty=9gti97j0r63uGsImS7aHQO zYOAY;o#Zr8K-|M~hWK>Hg@(AV+Tyq8XE;q15TEHeLwv5|LPLyEEStykH0*q*i2~wb zo-@Sr92Xj5eC%#*&DXF;ohAy1ANQOg9#X<;5*lKBFmG+0qhaSdO%xCh^_(FtIMUl9 zu5n~yiyz+?I!zQ1@8UT_{IKIfLyQmhZMx=Y*dtC81;q0`XNbEU<J5^YQbGj69vRmJ!gm?avYxiif1Rbx^St3hn)sbf5me>XNW5u7aC%$ix8Ln zj3=XpJ?k`4K)lp*hWHi7g@*W5%_A38c+F{|fOxs*4Do8mg@$;I+TuzKA304F5U=x` zA>QP;&=6zQ23se-)v)iJCJKnRc+L?2>A27k|E0G6(y+gsCJKmC9axtlL)_JIp&>r0 zLy|787}4EnqJX%k=L~Ug$AyNtPlu!>p+ToR30e}0`+3d~&vaa9i0{{AaaoE7oF)p0 zXM4^NFL7LGh?lA@E@ttZ(?kLBGS3;}-y9bj;@^?Qm3X3Q(4S5c1;jf%XNVs?hF2pr z#8^1P)`$ff_L$Q|0r8WbGsNp17aHPE6I&g)2*+nm69vQ@J!gowIxaNv-UI8@j(2&n z*mV9$>1{4J3W$I4oFQ)A(PxjiO~?4tH&Id=bcB;c0da}v4Dm$Ag@zbwhS-vtq+vHZ zO%xDM_M9PZcC1epF=l<(CW!{^=Ok#7C_d10hIoPFLPPu*Ov%d>moIt3X`+C5q2~;7 z%}zd9#6hRHVkR2l8nla(L;>;co-@Qv92Xkmrk#>xab8O^r-=gM{XJ)hk9J&Wh&yzO zk9`LhQG)i+Ah|xB~B9s#Ls)q5RW+7 zr;8Y??o_;j>Z?JeP7(#g<(@Od!+UyD#8|jTl6CM14IAk+Q9yi&=gcKNr-=gM<2`4HFK}FFh=*BQ^-t8G3!Nkih=+U55I^iVG^Z8M(PVLr zp+}qs&1uE+J!go&b{sk=6n~?(I1z4>)1ZSw@n+8%;^wFM;v(MfG+SI9xRB8SP7?*h z2Yb#C4|NtU_^RIVpn146 zXi$ZdL;>-&o-@R&92Xkm4>Vbv(YV@aqJVg<=M3>5jtdR(pK6OsNd4_JX!a^j_2Jb* zvsZCr$AyNtNuT5=*i^%sISn3?iud=NAue@XXo#_5)r@;lTpDzVlSBdWD9;(R$U={USqDPH6_JjfJdF)jNr>daNOKF$*nulJlGKC`b+ zEb&==lQJBjVP`u{6c7*goFTr$ad8i~@nW^L zSdW)D4W1y1pZA<0e$#QGA%3f`?K#wtx19n#hl*Ev&Jcg=xX=)Pr>Xi*!!|oj6cGR5 zIYV4Rj6S#od(Za#k+dW5I1ognv05?sx7W;*34<}OHjPO=M3=?jzcG% z;&y7QogTM$8g$YrKFV{3xTv4cBXM!RB#&H5t*+BV0dWJ*8RB-13k`Ame#r=m1|8`n z7(r3o!E=VVx8v}RtGG|UqEMyH7a;z^z}#1A+wG{g_8Em=rT{ypS0Q9wM$bB6c@$AyM?ncCt~ zbT2wh6cE4cIYa!h<3dA>iS70lu};H2aT*K=DBj>XL;R!TLPNY&ZE*#>ZBBz1UB$n6 z&JY*&_Z5}6X8+{XO@nrE61=)8-raMCxW3~;L)@T$l0`1O*U)LAfVi>e3~_tMVboAD z7U{F2hI)9Ulc3Hk?%+8?+}m-e^NO*~pB*96!_%DvbzX5l&l%!d9Tytn$(lnh8F-u1 zL;>-go-@Sr9EUD$#aLd@R*3m}{HW8Qi(B#Io-@R+IW9EBuVbk~gK-@Vdc#SgfcP!X z8R9P-7aC%$YPj!xb?SH4pf8;y3W&e)oFV?laiJl`HyrWGPw~2UW>W3a>f2Fd#RZ-- z#I+n38e%M_XiKZMhUJ_l3W)1?&JgeCxX=*queP`_;{i^C7P;bsJ!gn}IxaNCr>HHi z<#?*oL;-Oh&l%$L92Xkm^VJsDf4snHB79wyl;K65GsM?AE;PjB)Yfwe z*5ikr2ID%4=X%Z%zv#Ho5M$+0o358M?7vPE1;np<&Jcg%xX=)oR(d*a3ek}PuV)Fw_71;ougXNZq>96DPS zW1Uso*{X-fI0-si6?gKSA@1e4&=8+GAnDuFpx#b`zCFc#J!gnVIxaNCSl!iL#8M3_ zbDAh1zSMJu_$tSRhPXm)RcP4NP7?*h<2+}GZ*g2`h_R}yP1mg&HrZ*SfcOs28R8|5 z!w8XLtW0ZdE!E@aoCYIAikErL5U+DwXox>iTc2pydZ&p3;?F#1h&MYfG{oPlt?xB# zi_=5_@m9|n;=ddh8sfjz*54Yo!)c;`IDIy2cw~rocU)+QvGT4huRSzuPp63j;=Mg* zh!1mIXo#_TueH@e!wz?vC?Ia_IYWG`<8ZTA+(~WmbI#+O1~+@fCwR^f4|iN>h)0~A z^c`zZsgt1ZSaG@M3~`0yLPLDDCX4G2U*j}UKs?@ahWIweg@zbw72D#vUBm8hnkXQi z;yFV++i{^GepqdB-Q!1`1|7bN=X=f&zwEfs5Wk|fUe&PIoCf3WikExN5P#*k&=7yE zwz%H%CZ|E?vEt31GsM9_R^QMN?=mncFD}u%o6|%A@t&SD#0NVrG{lFfEw1W(nA4zL zqPV5!3~>*~g@*WKwbfI@PH~zjAU@4=hIpjoaEn%4Ixy)-(8Eid1RV*AM|sW=Pj*~r zh;K`h)rHGX-{CZRns~m@ZWW^t7aeb)A ztDOe@$coo`&Jcg)I8-miU#qQe^mvogpn56Z>^Vc69^|W+!-L{MbI|vzL0Kn>0^&l? z8RA-w!wZ_?+Jlms$`!hEPJBjtdQO z`JniR)jo@tI!P1|hn_RUvEwk-p?E5i^`JL(x06Hx@ifmF;%6L(VOzzOn!`#xUgR|B z?N+?RbB1`O<3dCHuG->qD?VRsaUu1gP7?*h7kbVRk8@mTh{vm~@fvoW z)8Nfm@dVEq;`svZa6cD%ZoFVS&ILskae3IJ2 zlJ~a9xVzI}4w>Sfo-@Q}IS%jGiU+7Iu0L_M)8HLj@nFvx;)@-JF;T@>t3ujJXARfm z5l(|KQN?ARGsH_AhgSr}OC1*l#903#8BOCt80mBPE5=tIiVHkvh`Trrladv8Jtw&! zTr}e(r@^FT#XUS{h(|asG{o35z|MQnpi(D6+f{M7=M3>!$AyOY%5##jU=6Bp5{v~a zzSeVw_?KZUiO>-LIxNW{m-hJ0X`+DmPtO_R+=bp2anXf|EiMRB>@=9AuDG7(4DsQP z3k@+gNw7_7E+f*)X`+C*t>+AJPsgD*Q!&;Y5nElj;X*H`i2~x@o-@S592Xkm3ok_V z+O2NA6E*B&r-=gMk)AWeH#jad#1k}++}Ytqr@;V`;z^z}#7{UbG{o2h!j{*Q8upaa zL;>+Lo-@R&9fv8lir1(uZYc4Q(_o6N;&q-g#D6#r^8*xP?+Kf(KlS)8r-=gMe>`W1 z>t5vR7jeCd;(rdqcz_1gcakU|Zsa*b+{SUCA#Qt7G7(aPj&Kr8gj8JOIYWGk<3dB+ z3#mfw>dYN8PIVgel`HP!IYYeGarnMQ@yBXwogRPUG#E}(yuovZxbMZjw205RI7t`x z>FDn?Q9wMvbB6d{$AyL%TYA_$PSddaoF)p0XL`;MKR(>2ix}I2SX)nM*pp5Z1;kH# z&Jcg*xX=)PuC}=StB+$cOodit+#eaCt5br(0XOVcH z5lI%gvq>$di2~vx&l%#w9EZ0C#VynpH$yqxY4FydxV7gD@kx#g4RJTM#r;#dI}O?d zihFv_5TEb3&=3z*TikNx0;j>Sj^c|vXNWI%Txf{Ls4Z^Oa)r}G0r6FyGsNFI4#Ovk zzZ;PZpXlNDPJ-bR#Xow^5Z4^(FC%dG!1E5@ENw$eAy z^VdHt>aK3 z6n{4|sStYjy_29qDE`rNhPbY7x+6_};(DdY14x7FI|&{@iW_;(5MSfC&=6zi9;px~ zUaMi_oF)p0ulJlGZc*mzDe>X)j%CI5JGa!JR!)MZlH#_WGsGV`4xdsg#s)(6Q%XJj z*h%myrQ-FTGsNRA@u?!l9z?dvkJqs4oCeiY@dVEq;<9pYi};fAq`O0dE_D)gcPI`$ zXNbRdTxf{5l*gYwf*P+uKR8Jg5dY*kL%iFiK2^lKUm91;hA9o&!%3om*m%wmH*{QR zh#Os+6jmb*+t+C@d0uf-&l%!YjtdQOYqiCFnc6r_6cD%boFQgDq{b6>R$HA_-^IrZ zh`V{t5SKYFG{l!&np{K;y3|Q<5fz7?GsM#z7aHRGQ1a44p+Pg81U(drXL-&LA2-Th zMB?K|VQ)TML=F0nlSBb=XU`epa>s>+_|j2vMQgNAHRv)Yi2~x$o-@P~F7v4(zVWj7 z)>TNA22FI5C?LMYbB6fj(3>Le875V$r-q&4H0ab;e46JB@i~qQ4e_~Z>pTrR-)ZnM ztm0vwGsL4E7aHQr)fPACy25Gj&{uqw=M3?KjtdR(Lu!kAdOhqk7$8?X*K>w=wd3&i zqj-(lTBFAwISt-^6tDA~A^y&B_?%qv<}i8o=;8NHf@hE7A3bM?cZ>XGB*q?N_GY6& zdpHShHj0hs3~_tMVHTR=5}1;;EA;S4C&4T<#T`6nh|h3bXo#`8roGAc)3E+dgO?1& z13YJlFL50Dv=w7FG~1`GhnG4D?hlGX&l%!J9EUXz6wghPbi??tK&jL{FB<^ilW<`1~VKL|Kd4Ayz6LR zABcAwozw>n+QUgu9~2wU8RF)S3k~spqmzrs4dD)O8q6G1e6Z&XaeK$1ZYeH7vZQY5 z;gL>)x}~^-=M3?wjtdR(X`}6YiOw3-+et8ALUCWu8RB7%L$8hE3rB0OjUHd@H0ZTa zJkoQ9_zK5`hIp)&)>sX@(rKcA_-fA?;+q{88sb|LTU~C^uv?ub3W#s_oFSg>xX=*K zKpyQ+7`Q9%5Z=M3@NjtdR(iqY{4cla9d zj*~XNd1~Txf{z(&Cz;VX@O-wxr^FJZFdt#^e>f;u>R;qA%3r znoff+B^2-KIYT_kaiJl;Ol@&<#mH%*fOw4O4DpSQ3k~s2W0FRf22FGlG`bYu;yFV+ z+i{r1q4;4<78h}T#Az^#L-Bmi8RAur!!Wzz4-#8(-Ic{Hi*~!hmnZS=S0s-D4cfy= z@F-AhJZFf{avVl_6l2dw`#c|@$7eeYMtT$v_M9O;VXRLU@rh#-Tb(tmi_=5_aW~Hy z;`W&l%$WSNa?h zV}ndvT4!q5Sx$p*1r-nUoFRV2aabcmF*eu~TU}n&90e;`6Uc@;FqFFK`<4^C`Z_bB1_og)cASyDJh~+$i*3 zr-=gM>7Fyhe>o0Q=M?{~wsz?8KTdQ;&U8_*BZs=UY(Tvd3t=l)8Ms6 z@i5OB;sdUs{m>9&OVha5dW=$Q*g;Mc1;mGX&JaK7IK0*vrb8u>IZn@KULGfaeTxq3-r7c_glRL(+$@LAy8!`tTL+ z?m0s|!EvD>zVU{nd7wcPodnGT#kY9Q5I^R)&=5a9W=8+RN~7Whc9y!-}+X3YwJ4oy4i^Y9mj=+ zc%|BcZ*9HnG*Ljj%5#SJ{1rZr#6wpkd4z9mUEnlmaVoyZbB1`fJxW+p^kHm%V*gT#I-`c9_G(l2j*9}~0q-Qgg#j9NcAkcKu;&c%WsVCCahRmF3w)c_$Z7D3t$2**4Dsld zKHtQbuS~8jd~0ir(?kLBm7X)i_c$&z#P=q)I>WcNra4U%5YON!JvsN+IIeAv4M@sE4gt=Cz@ zS~yJ<5V!K2A#U@YPZx39_X@D#ASNnl*bz>HIZuj9JZFd(J1#WDOWsTJ2;b&$sncL0 zrs5YoXNbqV@6$zm#rw%m0lu|0)@h=ExWaRW_{0yqE#l6O!%so+^beAs!gM{Jk*6V^ z~qK)rtL_`qB&_uH!jF+|_ZIOsx2%)k#|6+q8CbnkXPX*>i?? z^BSLT;_n@YK`_O2KT6VC_oGB#Pkl)%aYN4;;?|A}4RM=~lC;9NX>IE?Q9#_@bB4I# z$3CsZjT{#R#BD#eX+5*8h8>ZoAujQpA^vlnw@>_+9{B$etUgV)^BUriaZVRyPh+|^FH*aLYQ;@O@v#C<;V_K8n-99GCseDPqG7-0X^8*uoFTqz zlebSi#c@$UJb#n5-(|jrJ({N>e%y10_>=Fved6`s*}BpNzO5^tIt@M+SNyr>3~}?# z-WKtGn-g2`t*!l?CJKlT@|+>=={U>|SA2@vf^Tj0avIDISKQlkhWN1WeY%KSe4nHX zzO{9@(_pfu;?|xs#Jg|twutxGlGuW8ZSCna_?}ns-kvkWvmJ+Ku;Pc+7JO@Kj?N!K)eyh(Tamm(#`05Ah)a$HaM>-9Lu@!gloFTr&arh=) z@vU2v@`7*EHQ8zKO}yeeJZFfPI1V4YC|;_z;9FbIISsyvSG>$~hIpgn(B+``OSJ{x z+WN|A(B+_bljjU^;ZMH2h-?0o>R zwFTeW8s#)mKpc6_5YKZQ=G`iuueRV@TaP*op23PA_naZ_w%zBExcl}bkMOOn9!`S= z_Z6SwIYa!If3Q=`>M5{J!T5@lTEm z4e>U$1>f4*?le(A{Hx~-af6=|y>vqnH~cv%FZkA0Bd0-oQE?N`8RB-1!+Lm%+p8`3 z)>etrL;>;9o-@R~9EYVw6rZZL;9Fa#ISsmr6rb)nLwu3rLPLD9+JbLw4R@L-ATITs zAs+9z&=6mzw%}V^*E>xV5Z~xIL%hgw_-!kGR&BwzwiY`Le%p$l^PC}G>o|OOqxfUB z1>f3Q=QL43{Hf;*@pi|BhWKZ-1>f5G#c85|_;=44;-X&?z0@z_;$M>b1>f4L<1|=$ zRB?UJ8RDZH7aHQD)fRkftAo=-0r9b(GsNdP4uisq&sSUUt*xO>gD;mAU+6hQe7)na zOrqi&)E0beYl7260r5o78RB`4!@W@Pe6XsBbiudjI@f8iA&ugpo-@RE zJ1#WD_oyxS*4DjFgNXu)r+dy2H~Y<(7jg673Z}e_ZZ8em&q**jOYwo8GsInf_oj%u z{+<*)e4DJ3oCco*EAHVrL)_vIZ;SZwKN4H;t*w?$gKxbRxAB}IUi7E8Mf~iai7oin z)?%l@tx)lEo-@SnIW9EB@2f5N*48Sgi2~x)o-@S1IxaNCzx`PdcX|(HuVKGCO%xFS z#E1Ts<%BBOYf=L~U^9X?&eO?M>ef^Tg#a~dp1tayLV8RAPF7aHPGJ8;WsjV^5syUc0u zm4xEao-@SvIS#YJ6i*jhFQIjQ~Z+V5x&jif1L*F;wgUB zbB6e1$6-}m#p~1-d~53yr@?2uiZ^)95byGjFMHx$|4GUozO}WR(_q07#d~_r5TEEc zj1(#EthV4=TV0$6Gx8L7^PC~R&T*k3zFuv?x3+F@8tj3k_$JR8;>R3^R|Un7t1bA} z))P*HR|UljJ!gpDcU)+QSE()d*477369vR;JZFgib{x9Z74J}6@U5+XoCb5u9OmQ) z%rQ$P_yG0gu}yqnO6P@X*g;N%d0~nV^_(H@?zqqp_edqvM|x=3$xef<4ixwDoFP8n zarll`@ldrjRF5xk8jQ9ozQ}Wi_$J4NhIpddny6uuoCaOGif{FtAztD*bag0Rsvi4j_s992@8|dR`+dK^$M@_% z_Vv78_qDEduY28Vz1MiJZ;Z;EpgD52@?jCl zuDm{;gre#eB9AA5YX!}b`=AYU9bN1kC?(vfE(*G!Z>W-;=p z6L?n89QjkzWS~m$2ISfRf1}07K$YOng67DVRS3;RzPv)bj6E(#*%cNe2jt+ZgXYMe zm?qEefLB+**h}!&Sd2Wo1706AM?R}!s290UMQ!^&C_CF?hT!L9=DkM1o_FJIr7Da zg?f=MIZTckewU}oQFf`tLYBloTx>P0@Y zvgSGyWoKE89D#uQ2F;NVt`c&Q52>QL4nbMMV&vul_^_ZkawpT|f(E#A6@C2>?(r5P z*E7Ifg652?hH4!IE?-rvRUUo?i^)%r4+)whA7`2jHw129Rfijb+rdKQ(Hn5*pgHnv z)8yHE@ElZY4*av9vKaX^4EThgIr3c7Z=27wSdMc3Q7&lpSF)GJrSusGvFWRMV1t*<_Sd3iH0KXPANB-F~`7kT^7v%Z{{$7j8 zPmq5Pnj;@qGqe}EeNEkjP}IRfWD^2+4w@s+HBGuIcwS9y`g!o@Ta0v7@S>nO^5L~Y zwaD4E&{a`(gvCf#1s@eOM;>UJynF{9gj|E*Uu-e*@*OxYXpWpVO$PP>KPb8Uz&>yv zvJe^A2mEl*9Qk9@f0f0^88vuK&>Xp8?a*B0MzyuM8lkMQ#mE&d@DV|C zB79eE&f4Mf=>i^)%rFAbU_PcThBfdei?u0r?|Ek-_p1D+f-M_z84+^htzK&}<= zODsliR)Rkcnj>#DE$PVHkZT*twp&bog8WU;oN=Ad_6LE>*U`2w55I!N$PXI$kf1qo zL(}BOC%6%EHG<#RVq`snj|iG0cQj3Ie1bb6S10(LEk@2Fln%wvVUyoeZ!yjTXa^n*`JZO$Q+BCWG3BDV-?uLJl#mJ3M@ZW;w z$kR=e7yZGHBG;qvi!3HTL4GV~j$Ey7=o4gDS5K)?RNX@4lp0(sXpTI@G#Q&8JhZNM zuc7dVS&V#)6?{X`9C?dr@}fU@D{^gxzs+LgMSt*)pgD56dSMZb>*;9VC@OCuG8#De z;Gj8jj%i6pZdXqiu^q~ewHSHi58NSWj(nAAa@`GlHF8}I{~C*t>u%udg67E2nI_|I zgP+%2J)VdEg2l+V+u)ai=E%vc&|KvFEIG#MAdfzwY?Q_1C&+&Znj^QWA99gf*RL2q zzTORGZ7fC}UkA4fnj?Q@nw;%{x763R-vWQD#mLzn`0JoK^6-|SUgQxi^&}KUH&}?A zgo1Ahnj_!SI;0}s+d8gRk9$#epT)@CYw*~hIdYXYAs4x78ysGuteVBh;U&06&>VST z+mMUAsBK)YE{jmM*kWV^5Af4LbH>MpT!H`C+>3%EO8m+KC{hsDSZ7I3eiIr62ZB^^0$tc>1~kdqCRU1l-)3G$Ue zbL3l0lL0otw_+J@h5r|ek+HVGcLdFm$CxG;`N3l~SGx5lG91N%0|LkkF|&mzTVyfv zQF-u^pgHm@rpbrZz^@`#G5psoMh1ceFAJI@e`cBt77N~tT$|y4ZZR@gEcmOSIr47P zBudRs|CthT1C54p(Cj!(BeNCrzp(eoA}Z>oS_44NaaGfke} z1Fs*i)%q0v28)r~?cma&IdZiLp;}}&K@W&gRNX@4fEZjWXpVfIX-P*ue}Y!)0+d~7 zG5HDdfS@_@-%OLCiNIqf=-2~r$6APtJpdjbG)G=;nw*}3SD;!Y@ISN|S&874L38Bt zg`u^`6$*6`E1;~R#pEZ*iJ&?18K%iQX5gO4)eC-ai;=;p!F__}$RkaY=c~at7V1cx zaBsE{dBy}hDrk=UvS~?2eg)Nf1!b>VOn!p=de9s>cVcKR@~IPbtWgx5W+5`xD7bsj z9QkU~l8$`MMBnlax}oS=3&~HAhXl=$|7M!>E%2C$ao^(H##)HX;Dg_Ym#}{KW$@p$7}*Je-wB!{Z!k?hR0-awxq57b zzsX|c-6QbkpgHn>)8x<-98JRT3X^mNmxJ}kp5zKabL3X0$@{(F){}JmX#>Bl#mM_Y z;A4a4$U{w&-$n4SN&348cesVf?;?0)&>Z;_)8uY1cr~iE2L4)$ks(mQp9am5x0xo7 zzJj+S*LL_{Ta5hvfWHlzBcJm?*nY_8KA_*cM$!2eB5(A8`v=XDuQE+ezrj~Ope=tj z{A(;mPQSs|1b?eErb82#mE)}ekW*-yumctg1{R!SC5VGH(88qLEz0nbL9P|$rc2TCSwbl zj4cQ@-h#jtg67DrOp`4L+p{B_e1Rge7w;;H~Ekw2;@W`M! z@=nv_TlU~xsMc=y-&>5lC=T8eG)F#hO6c|EE>q%T=k(0Yb=%gt`+xxQJyWy|?m^kT z79)@1fyV^Rkyn@|kBx#$kgEj#hZZA82jG=KbL6b4q2lEFQ}rYrMGY)OPSU}RgXYMc zOq2V%;LcO^zAoJ3Eky3?g1ZFGk?TJgYDI4Fpte>+lr^##`4j^{a`aGWdUCmk^inK}%3FwBiUl7WG)Hb^nhcl^ zZv2q0#m4Xtw-^~PAKWBpj=cThP%ZM;4{NTkQMSWk@)P9mg67D-nI^*$f`3P@-{J4G z7#W!XT<#IpLB8knEze$X8GAEqT8`9;k&@I{op zWHI>(@+(1eSAQZbBe}*C+FmtKR?}i+I1q51pgD3|)8wOi;2h-2f#1$zB-Q!$V;EpMO=!qmn}vfvIiFj&5=JaO^!Lh z%b(O^4!A2UM2&HCceq$jrjuCig&>XqdyihB0>v`JlZBW+MV&u3Hd~DDh z`4rQVj+~2JxhOl;V)7H@(}U*7*O-=cY%FwGaM& zi;-7)$n&|zTo<71LW_}GVc-ElbL4AG zliw)t;5b)|aK$TLinA3X3(eHd(9R?&0^&68@w!Nj{Ko%Nk{$&xjsVK#}<>HAb%1xNB-Wlq$B@; zTtA@fM~jgYMexr-bL584gk>Z*dIl>8WrtggtQ>HYpgHnf)8q+x@I2(24}XEh$geAS zanKz31JmTZ0KEJeJuiT}!b0S{0Q^zV9J&0nVG+p{p4COHfU=4fBe$EuiJ&=hGt-ie z+#I=@qpXF+crLUdxyf_dhD}g*q{Yau4Y+C09J!}y@;zyAFXZY4zqiH6 zEqidEpgHn|rpX5+!2LB>^ZxKJvKaa319(u-+@SQv#&YhFGAZfE1*ld5%KmCG`3dsq zpgHmk(`2^}o~gOgHyR5e10C^2&wgzQuEk-WJgFg+LBmZKWoMeOd%FO&pHr!t=L{757`-0}khdm$q6uI*A z@k#ao6jiYhImrgQpgHnwrX?NucGKi*df;WxqyG!U{r}Aag2?X#&5?JQChy#XzjKYyqO6g{$eko`cF-L8G}Drfd^&QSj=lZzAb2uT;U&~y~q{+ z5w};5gHd*f#mLC$;7UPre;WWU_{-MKZbcf&EVq`cCaI2s>^2Mel9r+TU%fDoc zvP&&SUa|#W9yCY3)3l@`-=)jgeKgAMwix;9HTb@uIr0?Kd#7y$=5ki;-c9z;6Z3 zkv}#~u2q0nqPYZfC1{@`UnbL5XrljZ`iM6Q+aS6PfS z7kEw39C?dr@`4k1D{^gxzs+Lg1t;*1pgD5OrJ?D`t(NL;wH3-*Ta3KG0L}@TBlj~+ zzPSrNXDRNV9H;Xs2OHl%0apl`BX=@QF71FjAE))2+Fo;|VSO(0w4gciqo&E-IdD;X z+?|6z!(!y_9Qg5|Ir0|Mr0v05+iRbgwp#1;cUWI9^7NoNa``o(?a39^Xs!wnXd4y^5Qu2r6o{eRJcN#t4=f@-K`sfJBd;|r>B#Fk z>RmY$t+x=lD+k^fG)Mm0G`Z0P-qBHSG{ODGLgYphcxTWY`FGRgb_aN0N9_n#cG6|P z3f6Zj^5CF3@;uYzk~?^QC(Sh<{sN1UQ&sTdpgHnookP2mFYm0mE=SoF79(R5fv*ml zBUd;+gXYM+P6)Zky-(0wy-{|i#mE5I;Io6~$X}Qy1FVC; zM6TT@>3qJ2^=(hy6EsIY_T*46@^L5Y7p70qqN8DbDsr=+Ir2i&eXR#YCs~MG_yFey&5;+FCJ(-X7v^fU8lR@sIvmzli`*n= zj{KZy@;)s1`O`Gl$^A6fDX=~lxoglI`5M#Yax-{vKh3oj{x*w|Uuy7m^v9 zi~LH^9Qi%dl8*fT1#zw(pZ3>W8(@7da%s>Ud8cXea4&dQe;gzY&|KwUeJ*l^pgD3) z(_}PfaIFEljH3o>u3KPzF7jd@~v$ ziL!i)k#FdMZw;Cw|IIXcUk5x!K9;qzUW0CM$6AQIuLB+*G)I2Qw4@_1LA92k>}iY1 zPmrGrnj^nqn!L0KUWQ!D;J;}x^0oo^ouE1LD$|mV{0VY>g0j^XBYPz9x}Z7oSEk9p z0pKl~tH)OO+bl+Q;NTrWbL4%d$){Dp`(;JPpH^LmEgv@C^1&5?=E$8)lfDe@yiWTv z+~X}o`ZBmn&>Z<<)8qmc_>y(H6Un_;t92@@uNL|ApgHmo(_|PA@X(9(VLZ6QEkqv1 z1CI=vBd1K0>+s-$i*a2I)x6ZIF4xt-mj}&}hnpt91>g}_#M#I_$L1#odEog$bL3^F zB^~+Ai?z8vxkQ_5HLPzg^17fo@>ixw?*ebRM2C_d|M9C@~BGD;kH4sy+fKhI+1@Bq9pXpa25X>tw$-iKWK;P1B>d1Q*b zUYk;y&>aM>W}19q8tm5V>$PyJTZlZ;4z3k6M{aAHJmmz=S+8p`2Yx$?k*A!%?StmX zeN2;YfPv4}Ts_W)-`8T~8(`pbgXYMCO-nlRwd>`_;IORv15kFo#pEZ*!-D3>pO_{u z;(=G2COs3p%jfrx?eB*0{Q*JbJwbEiGd|@yl9z75JwMe(9CVqMT@33t1#(`{9Qk_F zl8!v&vN+ekAt)PaG5HDdh@d(0OQy-_&)}t|$p=Nj(dAfhf%rC1Iaps=a)qEdau3sz zj(o=Dy5MJ^tf$4uryRg%2F;O&nkLULgNI$N?~TD7ZXvSE1dj}wBj0A4-2MXJez}gk z3^!#VGV(I`&Y(H+p21<&l7AYkOZXGYezutW1o_vXIdbi5LoRZiYc*FLl-0Eu8KMGQ zKWL8J)->5}!8yp41HYZc$aV{EA2dhqW14KY;IonIZ1{aGMz&kOYH2iA8+^8BDV@=DWW%w_PZThpo6<%-X3n(9$lpNc#)Xpa1iX-P-^_BL&<0i!k7 zKvw`0>{6DEiVu@)P8(L38BkcZbeJe)Mki2$apR80it<$Ajj` z?d}P=$j9EJi`WZmqPMLb*#(391kI60nU-|qTd)>yMcH30Muxls-w`xN9&ef)nS&=F zS0Vg~79-Dzf+q*fk>{BvSJA=qk!wEu1r{S$(ZP#@=E$o}lXr8$YcyB-k(yaKbsB68 z4N7jfQ5&=&${JaWJfQ;44w@sMYMR`h0(af0FMPp0%|hfp5V(8L9QiBLVTvrm%?Q2R7*P7mN3K#DTAp0hH2EMgxK$~R(FNjT^wtLik#mCP$lXj!I&$|? zZNu&;>tQi6njW}U&>VTIX)+8JcpGwUhyS(3$n!7YZ-eH@)jkUgPIjMZy{2JZ|J~NV z+&~6T51J$IGEIKx!Mm602{C3<-DW2z#Nb*%bL8fx$#`wx7N}MW_$@6)#%lw&37R86 zVw!we3p`zO4cv`tes5Km!w>MDpgD5M%b~f*ADSjZNPxe48T~{c?k77B2qJ$UG)GRn z7G^*`^fg@{hoY>K#pEZ*Rf6Wo7nzoHl` z-Srxlf9FH(FarhR4)ae7$xo2q51J$Q`Z%N__cl$AE5P|5V+Nxj+;Tt=`L>`r^1xML z2IN7e$x!6r`&OaL3&czCw*!L6~g67EmKMA?W7k#3+2B2)9#mF`dz9eXlyv#JYb_{+Kx!!{Rw#CT1g5Y<9 z=E&n$hkB7Gtk!xJqHLnY$YCXTa?l+4A=Bh|13V46>Y**OtWD)zRB*$fIdU`8Vyst{FT!Xpa1ZX>!yEo`qbq;6G_Ga;OKM8#G6L)igQO z0~aG#G5psoMh^AB%Yx>}lRppLi#+9X?Osz+mbMsq{ti4XXpTI~w4@_HiCnW$HpgP* zoESVmXpa1mY4U|x@W;sYp8=P-&hq~=;IbSt{Aa-Bak{~-#D=oUHXeDv7`!HEj{J>j za?N9JWU&QNZ;79O3witQ)6Z}cg9J$(;p<&6+wEP6Q#g{lr6o?zPiomCT8CSN)>F~Q*jJ#9?J|k$3e6eZri~;x(saX7y4E#$iMsDVVFAtg{=bI)k z6@f=-y}FNre~ZP)Lr>t_g67B*O-nlRB;=ZevIi_CKS7=vG)JCinp~R$&;RmIAD`|| z9KE*t|E6!_&PVGluojgonc&4ibL96;OFHrgU+PQ3C|Y45@{%z4qo6tR7SrVMe(+Xw zh^_FqS&Up<1n&r%BbWOsY@xMPaKT3dqd2p zkw>d`=Ex_RmUQHkQLmFxc8bNwv$Ei>L389AO_OiCgKzpuuPng5*+S&X0(ex= z9C@;7Nk^W7YE4C1+G6D36+A6yj=ah=d72FT337b`f3?NPQx)KKL38BqOiMcQPU#Wv z$_*V9?Xr;k1o?-cIdb(ap>vUIY|$Q317$TWMn-l6*9n>rt%Byr15J~!_JId! zy}A#Af3d~LBQ)T=pgD4pY4Q;X@C+>DO!$vkj0_?Io)t7lUSe9(k)QUpgtBKX zCO<)bA!v?#>9)}J2aS z{~H79PeV2TZdI4NPvGf6bL6K@OFHs1*cSi9!TGyCpv}br`F(SdIUv7pF7j1~_svC? zLHXld7k4+$TGeIO1%4rDj{JdXGNuN2`8GYWguB8*q?YeWij%OA9!%k z9Qk(Bl8$`Gc76U3MJWrB=MTYm2F;PvrpX}*_(4>w;e*zknvY{3u&uxQ81kI5jGEIIn!PAgy z8vMUojQlu(rw7fEA2TiK$d4n}<0yN=V)7H@*+FyU)uzdb2zU*0t%1MRV&p^w{Ath} zIr=WN7rESbdQkvHVTXY4YtQ z@T1@1K|J^~EJhy013w-#N1kJvJopNptM%$W7ydkpkq2MF3xnp!-&5@7U8JeElY$wj!P}baHJ^Z>Q^NSvS-IDo555I27|G)gY#}{ab zFRgLp>1OcOpgHn4rpawI@V7hT+i2b4erF+a8x6cWXpX$!H2E|EINF7u|6RI1%E9{e zL9P%qN3L#K(vfTIinq0aHBeU5V&u{xxK7X<`F7LfkRN=9Y558AgHl)jj#)bE2^sdV z{_e0RCO6ovzg!Jb*2rSy=pLLMG)JCpn*4HsAKi^#F8DJnMt-@#j|a_>n|vSYMLzO- z-3$FmA6kg_Xn)e@GU8l+=7|4)<`{E-(ib51zaiJgv09F{)gyzHfSU!)kvo`{bmWd$ zjU7?e$zt*oXV>IXhEXpVf5Y4Ug|cmQ$@fIrY;rIpQCBZ|G>rWc5JnmjYkb9`jPmbZiBZB70zndoS`-1nOUi;whw-|Zfm;3`a zJ$c_3+|;zBBOmjFZjQ&GteM5+C&(>>=E&!mmUQHEf6%A%QFOkA$OR^F|DZYYEvCu$ z(80H&TDQXgi^a&xA>ccL=E#3HE$PS)BiF+yd&FYo0ZMRD&>Z<0(~^$-><{{sFN&VG z5P8ZM{9@1?`EApZj{MFK>ETX}>`?Si3z5fV!S4snk-s-hj^M#R=o0q$0sfB`BS-My zpM&Pem49R>Njh?sA7x)(F{^$zlvT4B89NeOBWRA?(X^x^cluGU$D!zW3z6$_;4VRP zA=m$| z-?#eDhho^n^Z)aq7<~BT&-_r#{|O&=DaCgGnQj013Gx>~bL5&ovCqliR^VDc>0Y%K z{Mr^HpAZ4p3z{RhHcf5;fZJ%U=564&wHWzi7WmkpxntAGMY1dGX_DN00rx_+dcp5) zF>><-+$U&`e4}ad$P4(UpY+}(+?y>#9(e(e3YsI|Z(7ok$D>-~Q8vM1e3y44~voCS#YnQIr2TG$<3-6PszxnhrU+Vb-5Sv zeO8>GAdd~2BR^=Gq$#%qX}UiId72gHC&-Tk&5`GtCiic^^K{7u%!j|gV&us>@Zz93 za>HLji<29fCMV|LD}PB(_)wk}dQQXnsRn-~g3M1f_$xzXeyYJ=86yAZvkg)7|Mh1Z z;xoM~u`aJVVEvK@2hEXhFinQa0FV4dhsuC^qlL&&8Q^5l9C?Ci@+l>7;V-&j7s8)t zG4d`GcyiDj`61KfCK7lWa!rH(cZ-pmNZ{!~bL5vylYxZ5OOb0S{Fg08zHkXH4w@ss zX_|Z|4*ZtpNSPB3FXJ z8-wP^zndl}^x%D{);{?AEk;i0$$Po$kP~|Fai+-!#=!0O>U#bY$LsI@=Zx2{A3j4h zJ6P4_7B0AR&>ZGC;IeYH8#Fl|I_yiZ>(1BmL*K6uzgRE= z_BPlF?^lSYufIaePlD|UJ7|TLkNFtotJL;{oxV!T&;CU9A7RU_R=?J2Ex#WAXKPg7 z37fT6%hM?T6qe-&qn!FHm`?O~c{u%p@N2AB{Rr6h>oxx*_&Yz<^8K(iHfVYN2G!?n zRQn?A2OG8g^G&MXRjPIZ?95Uve-ZwfpJ{o2*y}&j@-~}QZ~BGW4zOo@q2(Lkul!2O zKZo7(m6jjzrRpXBqI}^NEg!v2?L)Bhx9Rj}J*)j=7VKhJ`M6ZP{u@27*12eA;v2)6RlV`%n0^hqu>!wES!Ut$YH&ujf<*h_+$^+VeVS0$L7! zPrDxF95?>GjvD_y?79rQ13vA(*iS`~LKM~MqzPz`f=}BKKJ6LsX)l0J%R$;{InX+7 zJXpHSKjNtA6_3{n&~gNHT8?5)`{fB5PkYaa>eEh!Pdf`f?F-`j`9~i7-&+}W4Sd?| z@M(X8PusJL=II4{UWT0kewslqd`=k!*e z_TV$sr+pDV?Xa`7oOWm*^=Z4Ftv>BZ{nY1J>Z!pHXlKKx-3p)f=yNndQ`l=@2gCM0 zSIf_Y9gty%z=usmcR-+B1)sy0{|f&%*dxx<8E{DQ5%6j2p0DM!@3@?U&~kio+V@dT`!#&piWh3agJGLw*pBdN>-N|9dfxi}-w8rz*z+>%2>7)3!oLsp z@eErGpO%B9)5?J7af|F08*hJyT%cO_ku(|MQ2f?T1 z`0upiP)<7w{;U+>^$fcaKJ8xkwAq8Sg0x-W)AoaZ4(#v@n}VMrOn^YU6h7?+__W`^ zr~Ms1ZIz3)g0yYm(_(PzRK!uPhazAYtPD3D_fpzP@M)if&mpAWg#Q-o7TB$@hhC!j zD#5mlt@OWE5YB?_13Mgc1nflENw81DJ_EZ7mg7)wfxi{@pi8v^w6(nN`+p2#+aQ2; zBz)Qj;nO}3pY}uev^(L`R?0&Qz+NRb-u^uJztI_XI(*uf;nS{$PrC;`t-DO~(zb<9 z+w(GP|GiK!D8q8>VcO_&O-Re(erboHoc4D3cffM+T-rLb_+_S$PT z{yNzEGVBugv}@qg{tBPAe(E|+SRb~1hV2WVc0K%0VK2O1r|%E@aE5(qh?diChEJQ? z1A(^2P@RCb4Sd>O@M*7xPkSqT+OOg7fK3e3{IIF0Aq3jd@M#}}PdgtzZ83b>ui@{2 ztv_66NP8!IwbK9Fj?jP{*mW6p^bJ~0d&5ZeN5X!aVJqLL<+P3A(;f>ywtoBT4uSRt z_#9ZB1>+aL( zX=jX4ePaKEN(**^?GHfAy+8OX?!Y<3O+u(19U2(rw zs08-e@#;SZyFLZr>(g$62GE`l{{q-C8FmHy64(lbIz4Sq_`P6nguMwi^$LLY)QOs) zE9^C}gJH*H*hk?P!M*{@ky19or;R3Qe%Msh8bTY`VHtKc{57zAxs~?Z2Q=Y%u=2KP z+?i>|!XF2_u#A=d{{{pO<*^YyZ8RA*hHVYo26kA6-36a-qI8*})6?DqKem4RD}g{; zf2vME+ZjG>g9o*ouVS`=Py1K+cfu~uuzXe0+j#pg_mCz$2)1#C<$D{nzdx+;wACI_ z-@)=71=`urX# z5cmjOjVE*hT0S#Q+ZE-s!{F0Kvvhje3GfSHUxh7B0oKBjbnP z!KeKJK5e6CFay|mupHTHIegj*&uTnv^JlUB3&bsOB5W5}xrr6)v`wB^K5gaawSu&K&6@Tblz$7`F!h2?&=B_Y40{25 z+EMUnEB-^LKNz-IhP?zn?OpKsvPo(x1lsNJX{)}dGoU>aJ}vL|)8?U^b~Joie(4@I z6|F=7t$cbuUgxwo!oLajRakxlp5Je$-HLKren*{FzKI^^*MAQTDOagM?{`(Y^*yx{ zVJE$(_fQwWckgTYg|PkK*YX-GRG;yo+J&$(xOIFF_7are3VkB%B$R&*zw5_3eIMBT zk9GQK@cXXP@=IZ5=;=6rg_WwG3H|1ba)pojD+Rqa{uS<0Y}mQ?JZirkIcM9`|oba z^2Q`@NQN7Z+5-RXeqx#XhkhT;`*nl+X@bn#ahbQ@*fNK$)%eW2X_by9_=pKRQag z1?BvJ=zjRoI&G=W8TOKO_>K5?H!3c{gd<=xZ%ky~7hv23#M91!&yPLsOF`fl8{K-X zDQymXT7LGBRz6`E@9eIFl}`@FKEF8F^HcSC^_^GSX;Zx1PRq;fw7lF-`|mHi>kR(~ zuezrqUUuil-1s3jT7FE8mLEi;{S`~dkDFEBpcVLo3zBim@H(Vg>HoYC`R^`3^1>po zCuUwBhGq1+QSJnLXXP41NYt4C)iS}PzY+~YDFav%+X#)I0*!dZD4Sa9o z?VsNqqV2j-D?+;kK0gBVz$Pu{hkW?u99n+;hISp|Y5Bz&vAX}^XJcr$mFf)m2^ja8 z`n3FR3hi{1)4mU%b}xKd4!vJ*Gq(Tcn{@^)V9(63!{F1V;B!!V4k%B{LE&kqe6IO9 z!26T%XQu!k!~RcPZi{>OfA?xzikIE~pI&a`2-x3Z0cbheG_8yr9aoT6Mtb&sDgs0t zrkR$bD${agWLg>JI8I2*5sGOip`3O;{IVB9r2l1J&H8s|I85{b5-x}3D7Lf*eWewo zYjp_723+J_tYadST{iJg*D#av-Nmao{ly zX2$b;>c@Sp70W!!&AeQfd8wv7ru!WB3s@OiEA9iZsi-*wj*oTyw;I4Pt~fpwEytLm zHB$Vs#u{fJgZGSXfT%TaUwhpqw3l)Usy%S*qp z_1hn>{W39!l=<&olI3(9P33>!60L6kyfn)Rzr~W$M!U2HXgQV%t&Bkuw-9ZE-Rg71 z5g9ckE-!*T@_Y4*XJPy271GR0u$fmhd1ZqaG%~NC9)-jmGc3oGpyikl1HQ-h&%qcn zuLn}+01LFo{GdxfdoKL*U^!X=Ek_)neHL-gr2y|_SiZndD=*{6O;{DS6KrSLdV92- zmT$Dv4nsNZIQS{TTnMzA;Qza;=KssD5&!qD2}e;W7Od7!zQttwQ;u6Mh_8?F)i2t&kbstNYtgPlIW1qCqHVudEAX!` zXtvV;2J%HB+A&B#JAJReYF6j@`a`l7mP@}mH0z3kZt9nAF)XW1&B5pTrj#rFu+eW( z`ubs6t!oZGyPOulR@q-JJx>a%C;OC-3uvSCwqaRqD~-BBeHT4 zoW5>&R+}0lj?%X~X!EW}&lSB=$-SzV+?(F)r{4*mwr|&TixDz??zqM`V z$gUPwE0LX^IU=i5b-3BEr?*XS_mf|FwuaFzJvrUt2GO&}t4>?Fe)>AmtGAl%;lGN4O( zyZGf>O|O+c^5(3QDlJ@GE3V1?H>a<=SprXNT08c8zmcBn{d>06iT!3n(%Zei@ceqQ zpVuMXA}NWgj;)uzBAInk?P#hNlr+@NcC>`$rJqe^wX9UKBrBd~z_9f8WY(~hb5wRyv}>-c1j+P`bcocfoHR_%v072x;Y3jl(f#!7o4OB__dn9@ zZp*5h>WAWJ(;;!5LN(EB=!IXYFgI6c^D}0X-J$Gk${(b&*?GS<#BbF#z7zDmXjfJ% zPxK1Wu5|jgtgKWsG_EdD6y1%9_?lpM%@xgtJ`%4F_J{tW=;fj+(K}6b>F{!4^gi_W zGxUw3%gpy<^7Ny(WmQjg{uhP#_ub3-%Uxf89HWk6{R%krHP!oN zRC;i;xY9MHM*7EE4{4VE==Q9p<>sV6yIt1Qhse|S6>X+$MAYwuUX-C%s-p45 z8F~tODRjSA^nbOgYJ7Gxt!S+K-=#TH;At+LoOlCC5vDw7EU>FZ4zKLSH7jU*M7fx(cf3m5?YJ zDXs4dN>R`YHEkjXVqVV~ShjO5gr1wBA1A%i$M=PP1M(as>olG*^kL9HPN5)o5No6* z56RJ6oCrEAbY*?ji=b;eMNy)G>d|GIhn;sm^z011b3=_!LseDqHHw9uPE4w38<$9d`q}1wL;X-IzsiF4839##1Gc^ z;z<9Vg&VW~H$g9gegJs$L(6f)hl1Gm74EklPRrdFM!VY+MP8% z`{J_k_e0Ntj=@o)s>jFi(!iIOo!~Ali27ckI`@n}Lm!c$k2pbRT$rJ665V%|=oM`V z9?0}NQT2j&E0g)N;AIpPWAmeaY!^)Mg(hNWoG!X=xy%--a+1auWyIepx{oi@LcW9T z#RSC}6AU?7C&+A}&qVi~y69wGDc8m;E{e`NMfL1cR38cbb?8OVheL0l8%62I$7Izi z*CRb+jP#^IYDTCjP%||)?G{V0KRPYK(P;un_Cha)o(H{a`m(WEb$gz7sxCv{*L7{~ zKygZRzYHt8YF(Lb4D|Oi^eJ(=c5_fX`81tO4)x-{XP_5l=�mD>=T)J}==YhdTk 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 From 26421294f644b224234e874210bbfd2a1aabf451 Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Sun, 17 Feb 2013 20:11:40 -0800 Subject: [PATCH 06/30] BulletSim: experimental lock axis code using constraints. Not enabled by default. Like more debugging is needed. --- .../BulletSPlugin/BSLinksetCompound.cs | 4 +- .../Region/Physics/BulletSPlugin/BSPrim.cs | 98 ++++++++++++++----- 2 files changed, 77 insertions(+), 25 deletions(-) diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs index 4ce58c7d75..e05562a2c9 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSLinksetCompound.cs @@ -485,8 +485,8 @@ public sealed class BSLinksetCompound : BSLinkset } OMV.Vector3 offsetPos = (cPrim.RawPosition - LinksetRoot.RawPosition) * invRootOrientation - centerDisplacement; OMV.Quaternion offsetRot = cPrim.RawOrientation * invRootOrientation; - PhysicsScene.PE.AddChildShapeToCompoundShape(LinksetRoot.PhysShape, cPrim.PhysShape, offsetPos, offsetRot); - DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,addNonNative,indx={1},rShape={2},cShape={3},offPos={4},offRot={5}", + PhysicsScene.PE.AddChildShapeToCompoundShape(LinksetRoot.PhysShape, cPrim.PhysShape, offsetPos, offsetRot); + DetailLog("{0},BSLinksetCompound.RecomputeLinksetCompound,addNonNative,indx={1},rShape={2},cShape={3},offPos={4},offRot={5}", LinksetRoot.LocalID, memberIndex, LinksetRoot.PhysShape, cPrim.PhysShape, offsetPos, offsetRot); } diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs index 4bb2a9ebb9..4d61ad20f0 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs @@ -239,50 +239,98 @@ public class BSPrim : BSPhysObject }); } + bool TryExperimentalLockAxisCode = false; + BSConstraint LockAxisConstraint = null; public override void LockAngularMotion(OMV.Vector3 axis) { DetailLog("{0},BSPrim.LockAngularMotion,call,axis={1}", LocalID, axis); + // "1" means free, "0" means locked OMV.Vector3 locking = new OMV.Vector3(1f, 1f, 1f); if (axis.X != 1) locking.X = 0f; if (axis.Y != 1) locking.Y = 0f; if (axis.Z != 1) locking.Z = 0f; LockedAxis = locking; - /* Not implemented yet - if (LockedAxis != LockedAxisFree) + if (TryExperimentalLockAxisCode && LockedAxis != LockedAxisFree) { - // Something is locked so start the thingy that keeps that axis from changing - RegisterPreUpdatePropertyAction("BSPrim.LockAngularMotion", delegate(ref EntityProperties entprop) + // Lock that axis by creating a 6DOF constraint that has one end in the world and + // the other in the object. + // http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=20817 + // http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?p=26380 + + PhysicsScene.TaintedObject("BSPrim.LockAngularMotion", delegate() { - if (LockedAxis != LockedAxisFree) - { - if (IsPhysicallyActive) - { - // Bullet can lock axis but it only works for global axis. - // Check if this prim is aligned on global axis and use Bullet's - // system if so. + CleanUpLockAxisPhysicals(true /* inTaintTime */); - ForceOrientation = entprop.Rotation; - ForceRotationalVelocity = entprop.RotationalVelocity; - } - } - else - { - UnRegisterPreUpdatePropertyAction("BSPrim.LockAngularMotion"); - } + BSConstraint6Dof axisConstrainer = new BSConstraint6Dof(PhysicsScene.World, PhysBody, + OMV.Vector3.Zero, OMV.Quaternion.Inverse(RawOrientation), + true /* useLinearReferenceFrameB */, true /* disableCollisionsBetweenLinkedBodies */); + LockAxisConstraint = axisConstrainer; + PhysicsScene.Constraints.AddConstraint(LockAxisConstraint); + // The constraint is tied to the world and oriented to the prim. + + // Free to move linearly + OMV.Vector3 linearLow = OMV.Vector3.Zero; + OMV.Vector3 linearHigh = PhysicsScene.TerrainManager.DefaultRegionSize; + axisConstrainer.SetLinearLimits(linearLow, linearHigh); + + // Angular with some axis locked + float f2PI = (float)Math.PI * 2f; + OMV.Vector3 angularLow = new OMV.Vector3(-f2PI, -f2PI, -f2PI); + OMV.Vector3 angularHigh = new OMV.Vector3(f2PI, f2PI, f2PI); + if (LockedAxis.X != 1f) + { + angularLow.X = 0f; + angularHigh.X = 0f; + } + if (LockedAxis.Y != 1f) + { + angularLow.Y = 0f; + angularHigh.Y = 0f; + } + if (LockedAxis.Z != 1f) + { + angularLow.Z = 0f; + angularHigh.Z = 0f; + } + axisConstrainer.SetAngularLimits(angularLow, angularHigh); + + DetailLog("{0},BSPrim.LockAngularMotion,create,linLow={1},linHi={2},angLow={3},angHi={4}", + LocalID, linearLow, linearHigh, angularLow, angularHigh); + + // Constants from one of the posts mentioned above and used in Bullet's ConstraintDemo. + axisConstrainer.TranslationalLimitMotor(true /* enable */, 5.0f, 0.1f); + + axisConstrainer.RecomputeConstraintVariables(RawMass); }); } else { // Everything seems unlocked - UnRegisterPreUpdatePropertyAction("BSPrim.LockAngularMotion"); + CleanUpLockAxisPhysicals(false /* inTaintTime */); } - */ return; } + // Get rid of any constraint built for LockAxis + // Most often the constraint is removed when the constraint collection is cleaned for this prim. + private void CleanUpLockAxisPhysicals(bool inTaintTime) + { + if (LockAxisConstraint != null) + { + PhysicsScene.TaintedObject(inTaintTime, "BSPrim.CleanUpLockAxisPhysicals", delegate() + { + if (LockAxisConstraint != null) + { + PhysicsScene.Constraints.RemoveAndDestroyConstraint(LockAxisConstraint); + LockAxisConstraint = null; + DetailLog("{0},BSPrim.CleanUpLockAxisPhysicals,destroyingConstraint", LocalID); + } + }); + } + } public override OMV.Vector3 RawPosition { @@ -762,6 +810,7 @@ public class BSPrim : BSPhysObject SetObjectDynamic(true); // whether phys-to-static or static-to-phys, the object is not moving. ZeroMotion(true); + }); } } @@ -885,6 +934,8 @@ public class BSPrim : BSPhysObject // For good measure, make sure the transform is set through to the motion state ForcePosition = _position; + ForceVelocity = _velocity; + ForceRotationalVelocity = _rotationalVelocity; // A dynamic object has mass UpdatePhysicalMassProperties(RawMass, false); @@ -1064,8 +1115,8 @@ public class BSPrim : BSPhysObject _buoyancy = value; // DetailLog("{0},BSPrim.setForceBuoyancy,taint,buoy={1}", LocalID, _buoyancy); // Force the recalculation of the various inertia,etc variables in the object - DetailLog("{0},BSPrim.ForceBuoyancy,buoy={1},mass={2}", LocalID, _buoyancy, _mass); - UpdatePhysicalMassProperties(_mass, true); + UpdatePhysicalMassProperties(RawMass, true); + DetailLog("{0},BSPrim.ForceBuoyancy,buoy={1},mass={2},grav={3}", LocalID, _buoyancy, RawMass, Gravity); ActivateIfPhysical(false); } } @@ -1303,6 +1354,7 @@ public class BSPrim : BSPhysObject { if (PhysBody.HasPhysicalBody) { + DetailLog("{0},BSPrim.AddAngularForce,taint,angForce={1}", LocalID, angForce); PhysicsScene.PE.ApplyTorque(PhysBody, angForce); ActivateIfPhysical(false); } From 8b1b8a3921595088e85f4e11bc2b1d335aed83aa Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 18 Feb 2013 12:08:05 -0800 Subject: [PATCH 07/30] I need these for OfflineIM and Groups. --- .../Data/MySQL/MySQLGenericTableHandler.cs | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs index 995c6a5317..35fa89f416 100644 --- a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs +++ b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs @@ -301,5 +301,65 @@ namespace OpenSim.Data.MySQL return ExecuteNonQuery(cmd) > 0; } } + + public long GetCount(string field, string key) + { + return GetCount(new string[] { field }, new string[] { key }); + } + + public long GetCount(string[] fields, string[] keys) + { + if (fields.Length != keys.Length) + return 0; + + List terms = new List(); + + using (MySqlCommand cmd = new MySqlCommand()) + { + for (int i = 0; i < fields.Length; i++) + { + cmd.Parameters.AddWithValue(fields[i], keys[i]); + terms.Add("`" + fields[i] + "` = ?" + fields[i]); + } + + string where = String.Join(" and ", terms.ToArray()); + + string query = String.Format("select count(*) from {0} where {1}", + m_Realm, where); + + cmd.CommandText = query; + + Object result = DoQueryScalar(cmd); + + return Convert.ToInt64(result); + } + } + + public long GetCount(string where) + { + using (MySqlCommand cmd = new MySqlCommand()) + { + string query = String.Format("select count(*) from {0} where {1}", + m_Realm, where); + + cmd.CommandText = query; + + object result = DoQueryScalar(cmd); + + return Convert.ToInt64(result); + } + } + + public object DoQueryScalar(MySqlCommand cmd) + { + using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) + { + dbcon.Open(); + cmd.Connection = dbcon; + + return cmd.ExecuteScalar(); + } + } + } } \ No newline at end of file From 050ef1dc4e9c6e2a8afe353343e19d8ae0ff72ee Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 18 Feb 2013 22:59:29 +0000 Subject: [PATCH 08/30] minor: Rename regression test method TestGetArrayLength() -> JsonTestGetArrayLength() to match others --- .../Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs index 3d9ad163a2..db82d4bcdd 100644 --- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs +++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs @@ -400,7 +400,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests // } [Test] - public void TestGetArrayLength() + public void TestJsonGetArrayLength() { TestHelpers.InMethod(); // TestHelpers.EnableLogging(); From 5e709b087ccf380749c6a6da8a8293c23f211efd Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 18 Feb 2013 15:44:00 -0800 Subject: [PATCH 09/30] Donating Diva OfflineIM as an addon in a single dll, OpenSim.Addons.OpenSim.dll --- .../Addons/OfflineIM/Data/IOfflineIMData.cs | 49 ++++ .../OfflineIM/Data/MySQLOfflineIMData.cs | 68 +++++ .../Addons/OfflineIM/OfflineIMRegionModule.cs | 267 ++++++++++++++++++ .../OfflineIM/Properties/AssemblyInfo.cs | 37 +++ .../Remote/OfflineIMServiceRemoteConnector.cs | 143 ++++++++++ .../Remote/OfflineIMServiceRobustConnector.cs | 215 ++++++++++++++ .../OfflineIM/Resources/IM_Store.migrations | 23 ++ .../OfflineIM/Service/OfflineIMService.cs | 131 +++++++++ .../OfflineIM/Service/OfflineIMServiceBase.cs | 83 ++++++ bin/OpenSim.ini.example | 14 +- bin/Robust.HG.ini.example | 16 +- bin/Robust.ini.example | 7 + prebuild.xml | 50 ++++ 13 files changed, 1088 insertions(+), 15 deletions(-) create mode 100644 OpenSim/Addons/OfflineIM/Data/IOfflineIMData.cs create mode 100644 OpenSim/Addons/OfflineIM/Data/MySQLOfflineIMData.cs create mode 100644 OpenSim/Addons/OfflineIM/OfflineIMRegionModule.cs create mode 100644 OpenSim/Addons/OfflineIM/Properties/AssemblyInfo.cs create mode 100644 OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRemoteConnector.cs create mode 100644 OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs create mode 100644 OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations create mode 100644 OpenSim/Addons/OfflineIM/Service/OfflineIMService.cs create mode 100644 OpenSim/Addons/OfflineIM/Service/OfflineIMServiceBase.cs diff --git a/OpenSim/Addons/OfflineIM/Data/IOfflineIMData.cs b/OpenSim/Addons/OfflineIM/Data/IOfflineIMData.cs new file mode 100644 index 0000000000..a507f7d240 --- /dev/null +++ b/OpenSim/Addons/OfflineIM/Data/IOfflineIMData.cs @@ -0,0 +1,49 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using OpenSim.Data; +using OpenMetaverse; + +namespace OpenSim.OfflineIM +{ + public class OfflineIMData + { + public UUID PrincipalID; + public Dictionary Data; + } + + + public interface IOfflineIMData + { + OfflineIMData[] Get(string field, string val); + long GetCount(string field, string key); + bool Store(OfflineIMData data); + bool Delete(string field, string val); + void DeleteOld(); + } +} diff --git a/OpenSim/Addons/OfflineIM/Data/MySQLOfflineIMData.cs b/OpenSim/Addons/OfflineIM/Data/MySQLOfflineIMData.cs new file mode 100644 index 0000000000..0a61cd291b --- /dev/null +++ b/OpenSim/Addons/OfflineIM/Data/MySQLOfflineIMData.cs @@ -0,0 +1,68 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using OpenSim.Framework; +using OpenSim.Data.MySQL; + +using OpenMetaverse; +using MySql.Data.MySqlClient; + +namespace OpenSim.OfflineIM +{ + public class MySQLOfflineIMData : MySQLGenericTableHandler, IOfflineIMData + { + protected override Assembly Assembly + { + // WARNING! Moving migrations to this assembly!!! + get { return GetType().Assembly; } + } + + public MySQLOfflineIMData(string connectionString, string realm) + : base(connectionString, realm, "IM_Store") + { + } + + public void DeleteOld() + { + uint now = (uint)Util.UnixTimeSinceEpoch(); + + using (MySqlCommand cmd = new MySqlCommand()) + { + cmd.CommandText = String.Format("delete from {0} where TMStamp < ?tstamp", m_Realm); + cmd.Parameters.AddWithValue("?tstamp", now - 14 * 24 * 60 * 60); // > 2 weeks old + + ExecuteNonQuery(cmd); + } + + } + } +} diff --git a/OpenSim/Addons/OfflineIM/OfflineIMRegionModule.cs b/OpenSim/Addons/OfflineIM/OfflineIMRegionModule.cs new file mode 100644 index 0000000000..050ebd20f0 --- /dev/null +++ b/OpenSim/Addons/OfflineIM/OfflineIMRegionModule.cs @@ -0,0 +1,267 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +using System; +using System.Collections.Generic; +using System.Reflection; +using log4net; +using Mono.Addins; +using Nini.Config; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Framework.Servers; +using OpenSim.Framework.Client; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; + +namespace OpenSim.OfflineIM +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "OfflineIMConnectorModule")] + public class OfflineIMRegionModule : ISharedRegionModule, IOfflineIMService + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private bool m_Enabled = false; + private List m_SceneList = new List(); + IMessageTransferModule m_TransferModule = null; + private bool m_ForwardOfflineGroupMessages = true; + + private IOfflineIMService m_OfflineIMService; + + public void Initialise(IConfigSource config) + { + IConfig cnf = config.Configs["Messaging"]; + if (cnf == null) + return; + if (cnf != null && cnf.GetString("OfflineMessageModule", string.Empty) != Name) + return; + + m_Enabled = true; + + string serviceLocation = cnf.GetString("OfflineMessageURL", string.Empty); + if (serviceLocation == string.Empty) + m_OfflineIMService = new OfflineIMService(config); + else + m_OfflineIMService = new OfflineIMServiceRemoteConnector(serviceLocation); + + m_ForwardOfflineGroupMessages = cnf.GetBoolean("ForwardOfflineGroupMessages", m_ForwardOfflineGroupMessages); + m_log.DebugFormat("[OfflineIM.V2]: Offline messages enabled by {0}", Name); + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + scene.RegisterModuleInterface(this); + m_SceneList.Add(scene); + scene.EventManager.OnNewClient += OnNewClient; + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + + if (m_TransferModule == null) + { + m_TransferModule = scene.RequestModuleInterface(); + if (m_TransferModule == null) + { + scene.EventManager.OnNewClient -= OnNewClient; + + m_SceneList.Clear(); + + m_log.Error("[OfflineIM.V2]: No message transfer module is enabled. Disabling offline messages"); + } + m_TransferModule.OnUndeliveredMessage += UndeliveredMessage; + } + } + + public void RemoveRegion(Scene scene) + { + if (!m_Enabled) + return; + + m_SceneList.Remove(scene); + scene.EventManager.OnNewClient -= OnNewClient; + m_TransferModule.OnUndeliveredMessage -= UndeliveredMessage; + + scene.ForEachClient(delegate(IClientAPI client) + { + client.OnRetrieveInstantMessages -= RetrieveInstantMessages; + client.OnMuteListRequest -= OnMuteListRequest; + }); + } + + public void PostInitialise() + { + } + + public string Name + { + get { return "Offline Message Module V2"; } + } + + public Type ReplaceableInterface + { + get { return null; } + } + + public void Close() + { + m_SceneList.Clear(); + } + + private Scene FindScene(UUID agentID) + { + foreach (Scene s in m_SceneList) + { + ScenePresence presence = s.GetScenePresence(agentID); + if (presence != null && !presence.IsChildAgent) + return s; + } + return null; + } + + private IClientAPI FindClient(UUID agentID) + { + foreach (Scene s in m_SceneList) + { + ScenePresence presence = s.GetScenePresence(agentID); + if (presence != null && !presence.IsChildAgent) + return presence.ControllingClient; + } + return null; + } + + private void OnNewClient(IClientAPI client) + { + client.OnRetrieveInstantMessages += RetrieveInstantMessages; + client.OnMuteListRequest += OnMuteListRequest; + } + + private void RetrieveInstantMessages(IClientAPI client) + { + m_log.DebugFormat("[OfflineIM.V2]: Retrieving stored messages for {0}", client.AgentId); + + List msglist = m_OfflineIMService.GetMessages(client.AgentId); + + if (msglist == null) + m_log.DebugFormat("[OfflineIM.V2]: WARNING null message list."); + + foreach (GridInstantMessage im in msglist) + { + if (im.dialog == (byte)InstantMessageDialog.InventoryOffered) + // send it directly or else the item will be given twice + client.SendInstantMessage(im); + else + { + // Send through scene event manager so all modules get a chance + // to look at this message before it gets delivered. + // + // Needed for proper state management for stored group + // invitations + // + Scene s = FindScene(client.AgentId); + if (s != null) + s.EventManager.TriggerIncomingInstantMessage(im); + } + } + } + + // Apparently this is needed in order for the viewer to request the IMs. + private void OnMuteListRequest(IClientAPI client, uint crc) + { + m_log.DebugFormat("[OfflineIM.V2] Got mute list request for crc {0}", crc); + string filename = "mutes" + client.AgentId.ToString(); + + IXfer xfer = client.Scene.RequestModuleInterface(); + if (xfer != null) + { + xfer.AddNewFile(filename, new Byte[0]); + client.SendMuteListUpdate(filename); + } + } + + private void UndeliveredMessage(GridInstantMessage im) + { + if (im.dialog != (byte)InstantMessageDialog.MessageFromObject && + im.dialog != (byte)InstantMessageDialog.MessageFromAgent && + im.dialog != (byte)InstantMessageDialog.GroupNotice && + im.dialog != (byte)InstantMessageDialog.GroupInvitation && + im.dialog != (byte)InstantMessageDialog.InventoryOffered) + { + return; + } + + if (!m_ForwardOfflineGroupMessages) + { + if (im.dialog == (byte)InstantMessageDialog.GroupNotice || + im.dialog == (byte)InstantMessageDialog.GroupInvitation) + return; + } + + Scene scene = FindScene(new UUID(im.fromAgentID)); + if (scene == null) + scene = m_SceneList[0]; + + string reason = string.Empty; + bool success = m_OfflineIMService.StoreMessage(im, out reason); + + if (im.dialog == (byte)InstantMessageDialog.MessageFromAgent) + { + IClientAPI client = FindClient(new UUID(im.fromAgentID)); + if (client == null) + return; + + client.SendInstantMessage(new GridInstantMessage( + null, new UUID(im.toAgentID), + "System", new UUID(im.fromAgentID), + (byte)InstantMessageDialog.MessageFromAgent, + "User is not logged in. " + + (success ? "Message saved." : "Message not saved: " + reason), + false, new Vector3())); + } + } + + #region IOfflineIM + + public List GetMessages(UUID principalID) + { + return m_OfflineIMService.GetMessages(principalID); + } + + public bool StoreMessage(GridInstantMessage im, out string reason) + { + return m_OfflineIMService.StoreMessage(im, out reason); + } + + #endregion + } +} + diff --git a/OpenSim/Addons/OfflineIM/Properties/AssemblyInfo.cs b/OpenSim/Addons/OfflineIM/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..31667eb745 --- /dev/null +++ b/OpenSim/Addons/OfflineIM/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Mono.Addins; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OpenSim.Addons.OfflineIM")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("http://opensimulator.org")] +[assembly: AssemblyProduct("OpenSim.Addons.OfflineIM")] +[assembly: AssemblyCopyright("Copyright (c) OpenSimulator.org Developers")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a16a9905-4393-4872-9fca-4c81bedbd9f2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("0.7.5.*")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: Addin("OpenSim.OfflineIM", "0.1")] +[assembly: AddinDependency("OpenSim", "0.5")] diff --git a/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRemoteConnector.cs b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRemoteConnector.cs new file mode 100644 index 0000000000..69feb762f9 --- /dev/null +++ b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRemoteConnector.cs @@ -0,0 +1,143 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +using OpenSim.Framework; +using OpenSim.Server.Base; +using OpenSim.Services.Interfaces; + +using OpenMetaverse; +using log4net; +using Nini.Config; + +namespace OpenSim.OfflineIM +{ + public class OfflineIMServiceRemoteConnector : IOfflineIMService + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private string m_ServerURI = string.Empty; + private object m_Lock = new object(); + + public OfflineIMServiceRemoteConnector(string url) + { + m_ServerURI = url; + m_log.DebugFormat("[OfflineIM.V2.RemoteConnector]: Offline IM server at {0}", m_ServerURI); + } + + public OfflineIMServiceRemoteConnector(IConfigSource config) + { + IConfig cnf = config.Configs["Messaging"]; + if (cnf == null) + { + m_log.WarnFormat("[OfflineIM.V2.RemoteConnector]: Missing Messaging configuration"); + return; + } + + m_ServerURI = cnf.GetString("OfflineMessageURL", string.Empty); + + } + + #region IOfflineIMService + public List GetMessages(UUID principalID) + { + List ims = new List(); + + Dictionary sendData = new Dictionary(); + sendData["PrincipalID"] = principalID; + Dictionary ret = MakeRequest("GET", sendData); + + if (ret == null) + return ims; + + if (!ret.ContainsKey("RESULT")) + return ims; + + if (ret["RESULT"].ToString() == "NULL") + return ims; + + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + GridInstantMessage m = OfflineIMDataUtils.GridInstantMessage((Dictionary)v); + ims.Add(m); + } + + return ims; + } + + public bool StoreMessage(GridInstantMessage im, out string reason) + { + reason = string.Empty; + Dictionary sendData = OfflineIMDataUtils.GridInstantMessage(im); + + Dictionary ret = MakeRequest("STORE", sendData); + + if (ret == null) + { + reason = "Bad response from server"; + return false; + } + + string result = ret["RESULT"].ToString(); + if (result == "NULL" || result.ToLower() == "false") + { + reason = ret["REASON"].ToString(); + return false; + } + + return true; + } + + #endregion + + + #region Make Request + + private Dictionary MakeRequest(string method, Dictionary sendData) + { + sendData["METHOD"] = method; + + string reply = string.Empty; + lock (m_Lock) + reply = SynchronousRestFormsRequester.MakeRequest("POST", + m_ServerURI + "/offlineim", + ServerUtils.BuildQueryString(sendData)); + + Dictionary replyData = ServerUtils.ParseXmlResponse( + reply); + + return replyData; + } + #endregion + + } +} diff --git a/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs new file mode 100644 index 0000000000..2b3a01d32d --- /dev/null +++ b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs @@ -0,0 +1,215 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Reflection; +using System.Text; +using System.Xml; +using System.Collections.Generic; +using System.IO; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Server.Base; +using OpenSim.Services.Interfaces; +using OpenSim.Framework.Servers.HttpServer; +using OpenSim.Server.Handlers.Base; +using log4net; +using OpenMetaverse; + +namespace OpenSim.OfflineIM +{ + public class OfflineIMServiceRobustConnector : ServiceConnector + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private IOfflineIMService m_OfflineIMService; + private string m_ConfigName = "Messaging"; + + public OfflineIMServiceRobustConnector(IConfigSource config, IHttpServer server, string configName) : + base(config, server, configName) + { + if (configName != String.Empty) + m_ConfigName = configName; + + m_log.DebugFormat("[OfflineIM.V2.RobustConnector]: Starting with config name {0}", m_ConfigName); + + m_OfflineIMService = new OfflineIMService(config); + + server.AddStreamHandler(new OfflineIMServicePostHandler(m_OfflineIMService)); + } + } + + public class OfflineIMServicePostHandler : BaseStreamHandler + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private IOfflineIMService m_OfflineIMService; + + public OfflineIMServicePostHandler(IOfflineIMService service) : + base("POST", "/offlineim") + { + m_OfflineIMService = service; + } + + public override byte[] Handle(string path, Stream requestData, + IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) + { + StreamReader sr = new StreamReader(requestData); + string body = sr.ReadToEnd(); + sr.Close(); + body = body.Trim(); + + //m_log.DebugFormat("[XXX]: query String: {0}", body); + + try + { + Dictionary request = + ServerUtils.ParseQueryString(body); + + if (!request.ContainsKey("METHOD")) + return FailureResult(); + + string method = request["METHOD"].ToString(); + request.Remove("METHOD"); + + m_log.DebugFormat("[OfflineIM.V2.Handler]: {0}", method); + switch (method) + { + case "GET": + return HandleGet(request); + case "STORE": + return HandleStore(request); + } + m_log.DebugFormat("[OFFLINE IM HANDLER]: unknown method request: {0}", method); + } + catch (Exception e) + { + m_log.DebugFormat("[OFFLINE IM HANDLER]: Exception {0}", e.StackTrace); + } + + return FailureResult(); + } + + byte[] HandleStore(Dictionary request) + { + Dictionary result = new Dictionary(); + + GridInstantMessage im = OfflineIMDataUtils.GridInstantMessage(request); + + string reason = string.Empty; + + bool success = m_OfflineIMService.StoreMessage(im, out reason); + + result["RESULT"] = success.ToString(); + if (!success) + result["REASON"] = reason; + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleGet(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("PrincipalID")) + NullResult(result, "Bad network data"); + else + { + UUID principalID = new UUID(request["PrincipalID"].ToString()); + List ims = m_OfflineIMService.GetMessages(principalID); + + Dictionary dict = new Dictionary(); + int i = 0; + foreach (GridInstantMessage m in ims) + dict["im-" + i++] = OfflineIMDataUtils.GridInstantMessage(m); + + result["RESULT"] = dict; + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + #region Helpers + + private void NullResult(Dictionary result, string reason) + { + result["RESULT"] = "NULL"; + result["REASON"] = reason; + } + + private byte[] FailureResult() + { + return BoolResult(false); + } + + private byte[] SuccessResult() + { + return BoolResult(true); + } + + private byte[] BoolResult(bool value) + { + XmlDocument doc = new XmlDocument(); + + XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, + "", ""); + + doc.AppendChild(xmlnode); + + XmlElement rootElement = doc.CreateElement("", "ServerResponse", + ""); + + doc.AppendChild(rootElement); + + XmlElement result = doc.CreateElement("", "RESULT", ""); + result.AppendChild(doc.CreateTextNode(value.ToString())); + + rootElement.AppendChild(result); + + return DocToBytes(doc); + } + + private byte[] DocToBytes(XmlDocument doc) + { + MemoryStream ms = new MemoryStream(); + XmlTextWriter xw = new XmlTextWriter(ms, null); + xw.Formatting = Formatting.Indented; + doc.WriteTo(xw); + xw.Flush(); + + return ms.ToArray(); + } + + #endregion + } +} diff --git a/OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations b/OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations new file mode 100644 index 0000000000..d1cff8e70c --- /dev/null +++ b/OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations @@ -0,0 +1,23 @@ +:VERSION 1 # -------------------------- + +BEGIN; + +CREATE TABLE `im_offline` ( + `ID` MEDIUMINT NOT NULL AUTO_INCREMENT, + `PrincipalID` char(36) NOT NULL default '', + `Message` text NOT NULL, + `TMStamp` timestamp NOT NULL, + PRIMARY KEY (`ID`), + KEY `PrincipalID` (`PrincipalID`) +) ENGINE=MyISAM; + +COMMIT; + +:VERSION 2 # -------------------------- + +BEGIN; + +INSERT INTO `im_offline` SELECT * from `diva_im_offline`; +DROP TABLE `diva_im_offline`; + +COMMIT; \ No newline at end of file diff --git a/OpenSim/Addons/OfflineIM/Service/OfflineIMService.cs b/OpenSim/Addons/OfflineIM/Service/OfflineIMService.cs new file mode 100644 index 0000000000..6ba022cd93 --- /dev/null +++ b/OpenSim/Addons/OfflineIM/Service/OfflineIMService.cs @@ -0,0 +1,131 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; +using System.Timers; +using System.Xml; +using System.Xml.Serialization; +using log4net; +using Nini.Config; + +using OpenMetaverse; +using OpenSim.Data; +using OpenSim.Framework; +using OpenSim.Services.Interfaces; + +namespace OpenSim.OfflineIM +{ + public class OfflineIMService : OfflineIMServiceBase, IOfflineIMService + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private const int MAX_IM = 25; + + private XmlSerializer m_serializer; + private static bool m_Initialized = false; + + public OfflineIMService(IConfigSource config) + : base(config) + { + m_serializer = new XmlSerializer(typeof(GridInstantMessage)); + if (!m_Initialized) + { + m_Database.DeleteOld(); + m_Initialized = true; + } + } + + public List GetMessages(UUID principalID) + { + List ims = new List(); + + OfflineIMData[] messages = m_Database.Get("PrincipalID", principalID.ToString()); + + if (messages == null || (messages != null && messages.Length == 0)) + return ims; + + foreach (OfflineIMData m in messages) + { + using (MemoryStream mstream = new MemoryStream(Encoding.UTF8.GetBytes(m.Data["Message"]))) + { + GridInstantMessage im = (GridInstantMessage)m_serializer.Deserialize(mstream); + ims.Add(im); + } + } + + // Then, delete them + m_Database.Delete("PrincipalID", principalID.ToString()); + + return ims; + } + + public bool StoreMessage(GridInstantMessage im, out string reason) + { + reason = string.Empty; + + // TODO Check limits + UUID principalID = new UUID(im.toAgentID); + long count = m_Database.GetCount("PrincipalID", principalID.ToString()); + if (count >= MAX_IM) + { + reason = "Number of offline IMs has maxed out"; + return false; + } + + string imXml = string.Empty; + using (MemoryStream mstream = new MemoryStream()) + { + XmlWriterSettings settings = new XmlWriterSettings(); + settings.Encoding = Encoding.UTF8; + + using (XmlWriter writer = XmlWriter.Create(mstream, settings)) + { + m_serializer.Serialize(writer, im); + writer.Flush(); + + mstream.Position = 0; + using (StreamReader sreader = new StreamReader(mstream)) + { + imXml = sreader.ReadToEnd(); + } + } + } + + OfflineIMData data = new OfflineIMData(); + data.PrincipalID = principalID; + data.Data = new Dictionary(); + data.Data["Message"] = imXml; + + return m_Database.Store(data); + + } + } +} diff --git a/OpenSim/Addons/OfflineIM/Service/OfflineIMServiceBase.cs b/OpenSim/Addons/OfflineIM/Service/OfflineIMServiceBase.cs new file mode 100644 index 0000000000..3376be4737 --- /dev/null +++ b/OpenSim/Addons/OfflineIM/Service/OfflineIMServiceBase.cs @@ -0,0 +1,83 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +using System; +using System.Collections.Generic; +using System.Reflection; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Data; +using OpenSim.Services.Interfaces; +using OpenSim.Services.Base; + +namespace OpenSim.OfflineIM +{ + public class OfflineIMServiceBase : ServiceBase + { + protected IOfflineIMData m_Database = null; + + public OfflineIMServiceBase(IConfigSource config) + : base(config) + { + string dllName = String.Empty; + string connString = String.Empty; + string realm = "im_offline"; + + // + // Try reading the [DatabaseService] section, if it exists + // + IConfig dbConfig = config.Configs["DatabaseService"]; + if (dbConfig != null) + { + if (dllName == String.Empty) + dllName = dbConfig.GetString("StorageProvider", String.Empty); + if (connString == String.Empty) + connString = dbConfig.GetString("ConnectionString", String.Empty); + } + + // + // [Messaging] section overrides [DatabaseService], if it exists + // + IConfig imConfig = config.Configs["Messaging"]; + if (imConfig != null) + { + dllName = imConfig.GetString("StorageProvider", dllName); + connString = imConfig.GetString("ConnectionString", connString); + realm = imConfig.GetString("Realm", realm); + } + + // + // We tried, but this doesn't exist. We can't proceed. + // + if (dllName.Equals(String.Empty)) + throw new Exception("No StorageProvider configured"); + + m_Database = LoadPlugin(dllName, new Object[] { connString, realm }); + if (m_Database == null) + throw new Exception("Could not find a storage interface in the given module " + dllName); + } + } +} diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 653de5cc4f..07e7357c03 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -531,14 +531,20 @@ [Messaging] - ;# {OfflineMessageModule} {} {Module to use for offline message storage} {OfflineMessageModule *} + ;# {OfflineMessageModule} {} {Module to use for offline message storage} {OfflineMessageModule "Offline Message Module V2" *} ;; Module to handle offline messaging. The core module requires an external ;; web service to do this. See OpenSim wiki. ; OfflineMessageModule = OfflineMessageModule + ;; Or, alternatively, use this one, which works for both standalones and grids + ; OfflineMessageModule = "Offline Message Module V2" - ;# {OfflineMessageURL} {OfflineMessageModule:OfflineMessageModule} {URL of offline messaging service} {} - ;; URL of web service for offline message storage - ; OfflineMessageURL = http://yourserver/Offline.php + ;# {OfflineMessageURL} {OfflineMessageModule:OfflineMessageModule Offline Message Module V2:Offline Message Module V2} {URL of offline messaging service} {} + ;; URL of web service for offline message storage. Leave it commented if your service is local to the sim. + ; OfflineMessageURL = http://yourserver/Offline.php or http://yourrobustserver:8003 + + ;# {StorageProvider} {Offline Message Module V2:Offline Message Module V2} {DLL that provides the storage interface} {OpenSim.Addons.OfflineIM} + ;; For standalones, use the service directly. This is the storage dll. + ; StorageProvider = OpenSim.Addons.OfflineIM.dll ;# {MuteListModule} {OfflineMessageModule:OfflineMessageModule} {} {} MuteListModule ;; Mute list handler (not yet implemented). MUST BE SET to allow offline diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example index c7d4b7f0f5..fd86bca7a8 100644 --- a/bin/Robust.HG.ini.example +++ b/bin/Robust.HG.ini.example @@ -51,6 +51,8 @@ GridUserServiceConnector = "8003/OpenSim.Server.Handlers.dll:GridUserServiceConn FriendsServiceConnector = "8003/OpenSim.Server.Handlers.dll:FriendsServiceConnector" MapAddServiceConnector = "8003/OpenSim.Server.Handlers.dll:MapAddServiceConnector" MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnector" +;; Uncomment this if you want offline IM to work +;OfflineIMServiceConnector = "8003/OpenSim.Addons.OfflineIM.dll:OfflineIMServiceRobustConnector" ;; Additions for Hypergrid @@ -545,15 +547,7 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset InGatekeeper = True [Messaging] - ; If you have an Offline IM server, set the vars in this section, so that - ; incomming IMs to local users from foreign grids can be saved - ; - ;# {OfflineMessageURL} {OfflineMessageModule:OfflineMessageModule} {URL of offline messaging service} {} - ;; URL of web service for offline message storage - ; OfflineMessageURL = http://yourserver/Offline.php - - ;; Control whether group messages are forwarded to offline users. - ;; Default is true. - ;; This applies to the core groups module (Flotsam) only. - ; ForwardOfflineGroupMessages = true + ; OfflineIM + StorageProvider = "OpenSim.Addons.OfflineIM.dll" + OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example index bc5cbccb9d..9dd0d71ef6 100644 --- a/bin/Robust.ini.example +++ b/bin/Robust.ini.example @@ -43,6 +43,9 @@ GridUserServiceConnector = "8003/OpenSim.Server.Handlers.dll:GridUserServiceConn FriendsServiceConnector = "8003/OpenSim.Server.Handlers.dll:FriendsServiceConnector" MapAddServiceConnector = "8003/OpenSim.Server.Handlers.dll:MapAddServiceConnector" MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnector" +;; Uncomment this if you want offline IM to work +;OfflineIMServiceConnector = "8003/OpenSim.Addons.OfflineIM.dll:OfflineIMServiceRobustConnector" + ; * This is common for all services, it's the network setup for the entire ; * server instance, if none is specified above @@ -329,6 +332,10 @@ MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnecto ; HasProxy = false +[Messaging] + ; OfflineIM + StorageProvider = "OpenSim.Addons.OfflineIM.dll" + OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" [GridInfoService] ; These settings are used to return information on a get_grid_info call. diff --git a/prebuild.xml b/prebuild.xml index 68a9539a74..1caa54bbc0 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -2521,6 +2521,56 @@ + + + + + + + ../../../bin/ + + + + + ../../../bin/ + + + + ../../../bin/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9e460f2af8cb012a9cd333ed6683f409ce1bede8 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 18 Feb 2013 19:54:18 -0800 Subject: [PATCH 10/30] One more sql statement on migration #2 for offline im, to really clean up things. --- OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations | 1 + 1 file changed, 1 insertion(+) diff --git a/OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations b/OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations index d1cff8e70c..7cfcd43888 100644 --- a/OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations +++ b/OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations @@ -19,5 +19,6 @@ BEGIN; INSERT INTO `im_offline` SELECT * from `diva_im_offline`; DROP TABLE `diva_im_offline`; +DELETE FROM `migrations` WHERE name='diva_im_Store'; COMMIT; \ No newline at end of file From 46e182dbf546dcb58d088c043a0baa2dcfed9125 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 19 Feb 2013 06:37:20 -0800 Subject: [PATCH 11/30] Offline IM: moved the Data and MySQL bits to the corresponding places in core, so that it will be easier to plugin a SQLite backend, if anyone is interested in doing that. --- OpenSim/{Addons/OfflineIM => }/Data/IOfflineIMData.cs | 2 +- .../OfflineIM/Data => Data/MySQL}/MySQLOfflineIMData.cs | 8 +------- .../MySQL}/Resources/IM_Store.migrations | 0 bin/OpenSim.ini.example | 6 +++--- bin/Robust.HG.ini.example | 1 - bin/Robust.ini.example | 1 - 6 files changed, 5 insertions(+), 13 deletions(-) rename OpenSim/{Addons/OfflineIM => }/Data/IOfflineIMData.cs (98%) rename OpenSim/{Addons/OfflineIM/Data => Data/MySQL}/MySQLOfflineIMData.cs (92%) rename OpenSim/{Addons/OfflineIM => Data/MySQL}/Resources/IM_Store.migrations (100%) diff --git a/OpenSim/Addons/OfflineIM/Data/IOfflineIMData.cs b/OpenSim/Data/IOfflineIMData.cs similarity index 98% rename from OpenSim/Addons/OfflineIM/Data/IOfflineIMData.cs rename to OpenSim/Data/IOfflineIMData.cs index a507f7d240..e780304ec8 100644 --- a/OpenSim/Addons/OfflineIM/Data/IOfflineIMData.cs +++ b/OpenSim/Data/IOfflineIMData.cs @@ -29,7 +29,7 @@ using System.Collections.Generic; using OpenSim.Data; using OpenMetaverse; -namespace OpenSim.OfflineIM +namespace OpenSim.Data { public class OfflineIMData { diff --git a/OpenSim/Addons/OfflineIM/Data/MySQLOfflineIMData.cs b/OpenSim/Data/MySQL/MySQLOfflineIMData.cs similarity index 92% rename from OpenSim/Addons/OfflineIM/Data/MySQLOfflineIMData.cs rename to OpenSim/Data/MySQL/MySQLOfflineIMData.cs index 0a61cd291b..252f358b7c 100644 --- a/OpenSim/Addons/OfflineIM/Data/MySQLOfflineIMData.cs +++ b/OpenSim/Data/MySQL/MySQLOfflineIMData.cs @@ -36,16 +36,10 @@ using OpenSim.Data.MySQL; using OpenMetaverse; using MySql.Data.MySqlClient; -namespace OpenSim.OfflineIM +namespace OpenSim.Data.MySQL { public class MySQLOfflineIMData : MySQLGenericTableHandler, IOfflineIMData { - protected override Assembly Assembly - { - // WARNING! Moving migrations to this assembly!!! - get { return GetType().Assembly; } - } - public MySQLOfflineIMData(string connectionString, string realm) : base(connectionString, realm, "IM_Store") { diff --git a/OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations b/OpenSim/Data/MySQL/Resources/IM_Store.migrations similarity index 100% rename from OpenSim/Addons/OfflineIM/Resources/IM_Store.migrations rename to OpenSim/Data/MySQL/Resources/IM_Store.migrations diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 07e7357c03..674a66c147 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -542,9 +542,9 @@ ;; URL of web service for offline message storage. Leave it commented if your service is local to the sim. ; OfflineMessageURL = http://yourserver/Offline.php or http://yourrobustserver:8003 - ;# {StorageProvider} {Offline Message Module V2:Offline Message Module V2} {DLL that provides the storage interface} {OpenSim.Addons.OfflineIM} - ;; For standalones, use the service directly. This is the storage dll. - ; StorageProvider = OpenSim.Addons.OfflineIM.dll + ;# {StorageProvider} {Offline Message Module V2:Offline Message Module V2} {DLL that provides the storage interface} {OpenSim.Data.MySQL.dll} + ;; For standalones, this is the storage dll. + ; StorageProvider = OpenSim.Data.MySQL.dll ;# {MuteListModule} {OfflineMessageModule:OfflineMessageModule} {} {} MuteListModule ;; Mute list handler (not yet implemented). MUST BE SET to allow offline diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example index fd86bca7a8..020815e1eb 100644 --- a/bin/Robust.HG.ini.example +++ b/bin/Robust.HG.ini.example @@ -548,6 +548,5 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset [Messaging] ; OfflineIM - StorageProvider = "OpenSim.Addons.OfflineIM.dll" OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example index 9dd0d71ef6..63a569937f 100644 --- a/bin/Robust.ini.example +++ b/bin/Robust.ini.example @@ -334,7 +334,6 @@ MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnecto [Messaging] ; OfflineIM - StorageProvider = "OpenSim.Addons.OfflineIM.dll" OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" [GridInfoService] From 9380d01976726885bd993573aa649f2cb0992909 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 19 Feb 2013 07:26:40 -0800 Subject: [PATCH 12/30] First commit of Diva Groups. The Data bits went to OpenSim.Data core, the rest to Addons.Groups.dll. --- OpenSim/Addons/Groups/ForeignImporter.cs | 77 + OpenSim/Addons/Groups/GroupsExtendedData.cs | 509 ++++++ .../Addons/Groups/GroupsMessagingModule.cs | 594 +++++++ OpenSim/Addons/Groups/GroupsModule.cs | 1467 +++++++++++++++++ .../Hypergrid/GroupsServiceHGConnector.cs | 289 ++++ .../GroupsServiceHGConnectorModule.cs | 717 ++++++++ .../HGGroupsServiceRobustConnector.cs | 443 +++++ .../Addons/Groups/IGroupsServicesConnector.cs | 118 ++ .../GroupsServiceLocalConnectorModule.cs | 347 ++++ .../Addons/Groups/Properties/AssemblyInfo.cs | 37 + .../Remote/GroupsServiceRemoteConnector.cs | 642 ++++++++ .../GroupsServiceRemoteConnectorModule.cs | 437 +++++ .../Remote/GroupsServiceRobustConnector.cs | 760 +++++++++ .../Groups/RemoteConnectorCacheWrapper.cs | 824 +++++++++ .../Addons/Groups/Service/GroupsService.cs | 1014 ++++++++++++ .../Groups/Service/GroupsServiceBase.cs | 84 + .../Addons/Groups/Service/HGGroupsService.cs | 353 ++++ OpenSim/Data/IGroupsData.cs | 144 ++ OpenSim/Data/MySQL/MySQLGroupsData.cs | 484 ++++++ .../Resources/os_groups_Store.migrations | 115 ++ bin/OpenSim.ini.example | 44 +- bin/Robust.HG.ini.example | 10 + bin/Robust.ini.example | 2 + prebuild.xml | 48 + 24 files changed, 9544 insertions(+), 15 deletions(-) create mode 100644 OpenSim/Addons/Groups/ForeignImporter.cs create mode 100644 OpenSim/Addons/Groups/GroupsExtendedData.cs create mode 100644 OpenSim/Addons/Groups/GroupsMessagingModule.cs create mode 100644 OpenSim/Addons/Groups/GroupsModule.cs create mode 100644 OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnector.cs create mode 100644 OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnectorModule.cs create mode 100644 OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs create mode 100644 OpenSim/Addons/Groups/IGroupsServicesConnector.cs create mode 100644 OpenSim/Addons/Groups/Local/GroupsServiceLocalConnectorModule.cs create mode 100644 OpenSim/Addons/Groups/Properties/AssemblyInfo.cs create mode 100644 OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs create mode 100644 OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs create mode 100644 OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs create mode 100644 OpenSim/Addons/Groups/RemoteConnectorCacheWrapper.cs create mode 100644 OpenSim/Addons/Groups/Service/GroupsService.cs create mode 100644 OpenSim/Addons/Groups/Service/GroupsServiceBase.cs create mode 100644 OpenSim/Addons/Groups/Service/HGGroupsService.cs create mode 100644 OpenSim/Data/IGroupsData.cs create mode 100644 OpenSim/Data/MySQL/MySQLGroupsData.cs create mode 100644 OpenSim/Data/MySQL/Resources/os_groups_Store.migrations diff --git a/OpenSim/Addons/Groups/ForeignImporter.cs b/OpenSim/Addons/Groups/ForeignImporter.cs new file mode 100644 index 0000000000..788d21dfc5 --- /dev/null +++ b/OpenSim/Addons/Groups/ForeignImporter.cs @@ -0,0 +1,77 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; + +using OpenSim.Framework; +using OpenSim.Region.Framework.Interfaces; + +namespace OpenSim.Groups +{ + public class ForeignImporter + { + IUserManagement m_UserManagement; + public ForeignImporter(IUserManagement uman) + { + m_UserManagement = uman; + } + + public GroupMembersData ConvertGroupMembersData(ExtendedGroupMembersData _m) + { + GroupMembersData m = new GroupMembersData(); + m.AcceptNotices = _m.AcceptNotices; + m.AgentPowers = _m.AgentPowers; + m.Contribution = _m.Contribution; + m.IsOwner = _m.IsOwner; + m.ListInProfile = _m.ListInProfile; + m.OnlineStatus = _m.OnlineStatus; + m.Title = _m.Title; + + string url = string.Empty, first = string.Empty, last = string.Empty, tmp = string.Empty; + Util.ParseUniversalUserIdentifier(_m.AgentID, out m.AgentID, out url, out first, out last, out tmp); + if (url != string.Empty) + m_UserManagement.AddUser(m.AgentID, first, last, url); + + return m; + } + + public GroupRoleMembersData ConvertGroupRoleMembersData(ExtendedGroupRoleMembersData _rm) + { + GroupRoleMembersData rm = new GroupRoleMembersData(); + rm.RoleID = _rm.RoleID; + + string url = string.Empty, first = string.Empty, last = string.Empty, tmp = string.Empty; + Util.ParseUniversalUserIdentifier(_rm.MemberID, out rm.MemberID, out url, out first, out last, out tmp); + if (url != string.Empty) + m_UserManagement.AddUser(rm.MemberID, first, last, url); + + return rm; + } + + } +} diff --git a/OpenSim/Addons/Groups/GroupsExtendedData.cs b/OpenSim/Addons/Groups/GroupsExtendedData.cs new file mode 100644 index 0000000000..6f4db286f4 --- /dev/null +++ b/OpenSim/Addons/Groups/GroupsExtendedData.cs @@ -0,0 +1,509 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; + +using OpenSim.Framework; +using OpenMetaverse; + +namespace OpenSim.Groups +{ + public class ExtendedGroupRecord : GroupRecord + { + public int MemberCount; + public int RoleCount; + public string ServiceLocation; + public string FounderUUI; + } + + public class ExtendedGroupMembershipData : GroupMembershipData + { + public string AccessToken; + } + + public class ExtendedGroupMembersData + { + // This is the only difference: this is a string + public string AgentID; + public int Contribution; + public string OnlineStatus; + public ulong AgentPowers; + public string Title; + public bool IsOwner; + public bool ListInProfile; + public bool AcceptNotices; + public string AccessToken; + } + + public class ExtendedGroupRoleMembersData + { + public UUID RoleID; + // This is the only difference: this is a string + public string MemberID; + + } + + public struct ExtendedGroupNoticeData + { + public UUID NoticeID; + public uint Timestamp; + public string FromName; + public string Subject; + public bool HasAttachment; + public byte AttachmentType; + public string AttachmentName; + public UUID AttachmentItemID; + public string AttachmentOwnerID; + + public GroupNoticeData ToGroupNoticeData() + { + GroupNoticeData n = new GroupNoticeData(); + n.FromName = this.FromName; + n.AssetType = this.AttachmentType; + n.HasAttachment = this.HasAttachment; + n.NoticeID = this.NoticeID; + n.Subject = this.Subject; + n.Timestamp = this.Timestamp; + + return n; + } + } + + public class GroupsDataUtils + { + public static string Sanitize(string s) + { + return s == null ? string.Empty : s; + } + + public static Dictionary GroupRecord(ExtendedGroupRecord grec) + { + Dictionary dict = new Dictionary(); + if (grec == null) + return dict; + + dict["AllowPublish"] = grec.AllowPublish.ToString(); + dict["Charter"] = Sanitize(grec.Charter); + dict["FounderID"] = grec.FounderID.ToString(); + dict["FounderUUI"] = Sanitize(grec.FounderUUI); + dict["GroupID"] = grec.GroupID.ToString(); + dict["GroupName"] = Sanitize(grec.GroupName); + dict["InsigniaID"] = grec.GroupPicture.ToString(); + dict["MaturePublish"] = grec.MaturePublish.ToString(); + dict["MembershipFee"] = grec.MembershipFee.ToString(); + dict["OpenEnrollment"] = grec.OpenEnrollment.ToString(); + dict["OwnerRoleID"] = grec.OwnerRoleID.ToString(); + dict["ServiceLocation"] = Sanitize(grec.ServiceLocation); + dict["ShownInList"] = grec.ShowInList.ToString(); + dict["MemberCount"] = grec.MemberCount.ToString(); + dict["RoleCount"] = grec.RoleCount.ToString(); + + return dict; + } + + public static ExtendedGroupRecord GroupRecord(Dictionary dict) + { + if (dict == null) + return null; + + ExtendedGroupRecord grec = new ExtendedGroupRecord(); + if (dict.ContainsKey("AllowPublish") && dict["AllowPublish"] != null) + grec.AllowPublish = bool.Parse(dict["AllowPublish"].ToString()); + + if (dict.ContainsKey("Charter") && dict["Charter"] != null) + grec.Charter = dict["Charter"].ToString(); + else + grec.Charter = string.Empty; + + if (dict.ContainsKey("FounderID") && dict["FounderID"] != null) + grec.FounderID = UUID.Parse(dict["FounderID"].ToString()); + + if (dict.ContainsKey("FounderUUI") && dict["FounderUUI"] != null) + grec.FounderUUI = dict["FounderUUI"].ToString(); + else + grec.FounderUUI = string.Empty; + + if (dict.ContainsKey("GroupID") && dict["GroupID"] != null) + grec.GroupID = UUID.Parse(dict["GroupID"].ToString()); + + if (dict.ContainsKey("GroupName") && dict["GroupName"] != null) + grec.GroupName = dict["GroupName"].ToString(); + else + grec.GroupName = string.Empty; + + if (dict.ContainsKey("InsigniaID") && dict["InsigniaID"] != null) + grec.GroupPicture = UUID.Parse(dict["InsigniaID"].ToString()); + + if (dict.ContainsKey("MaturePublish") && dict["MaturePublish"] != null) + grec.MaturePublish = bool.Parse(dict["MaturePublish"].ToString()); + + if (dict.ContainsKey("MembershipFee") && dict["MembershipFee"] != null) + grec.MembershipFee = Int32.Parse(dict["MembershipFee"].ToString()); + + if (dict.ContainsKey("OpenEnrollment") && dict["OpenEnrollment"] != null) + grec.OpenEnrollment = bool.Parse(dict["OpenEnrollment"].ToString()); + + if (dict.ContainsKey("OwnerRoleID") && dict["OwnerRoleID"] != null) + grec.OwnerRoleID = UUID.Parse(dict["OwnerRoleID"].ToString()); + + if (dict.ContainsKey("ServiceLocation") && dict["ServiceLocation"] != null) + grec.ServiceLocation = dict["ServiceLocation"].ToString(); + else + grec.GroupName = string.Empty; + + if (dict.ContainsKey("ShownInList") && dict["ShownInList"] != null) + grec.ShowInList = bool.Parse(dict["ShownInList"].ToString()); + + if (dict.ContainsKey("MemberCount") && dict["MemberCount"] != null) + grec.MemberCount = Int32.Parse(dict["MemberCount"].ToString()); + + if (dict.ContainsKey("RoleCount") && dict["RoleCount"] != null) + grec.RoleCount = Int32.Parse(dict["RoleCount"].ToString()); + + return grec; + } + + public static Dictionary GroupMembershipData(ExtendedGroupMembershipData membership) + { + Dictionary dict = new Dictionary(); + if (membership == null) + return dict; + + dict["AcceptNotices"] = membership.AcceptNotices.ToString(); + dict["AccessToken"] = Sanitize(membership.AccessToken); + dict["Active"] = membership.Active.ToString(); + dict["ActiveRole"] = membership.ActiveRole.ToString(); + dict["AllowPublish"] = membership.AllowPublish.ToString(); + dict["Charter"] = Sanitize(membership.Charter); + dict["Contribution"] = membership.Contribution.ToString(); + dict["FounderID"] = membership.FounderID.ToString(); + dict["GroupID"] = membership.GroupID.ToString(); + dict["GroupName"] = Sanitize(membership.GroupName); + dict["GroupPicture"] = membership.GroupPicture.ToString(); + dict["GroupPowers"] = membership.GroupPowers.ToString(); + dict["GroupTitle"] = Sanitize(membership.GroupTitle); + dict["ListInProfile"] = membership.ListInProfile.ToString(); + dict["MaturePublish"] = membership.MaturePublish.ToString(); + dict["MembershipFee"] = membership.MembershipFee.ToString(); + dict["OpenEnrollment"] = membership.OpenEnrollment.ToString(); + dict["ShowInList"] = membership.ShowInList.ToString(); + + return dict; + } + + public static ExtendedGroupMembershipData GroupMembershipData(Dictionary dict) + { + if (dict == null) + return null; + + ExtendedGroupMembershipData membership = new ExtendedGroupMembershipData(); + + if (dict.ContainsKey("AcceptNotices") && dict["AcceptNotices"] != null) + membership.AcceptNotices = bool.Parse(dict["AcceptNotices"].ToString()); + + if (dict.ContainsKey("AccessToken") && dict["AccessToken"] != null) + membership.AccessToken = dict["AccessToken"].ToString(); + else + membership.AccessToken = string.Empty; + + if (dict.ContainsKey("Active") && dict["Active"] != null) + membership.Active = bool.Parse(dict["Active"].ToString()); + + if (dict.ContainsKey("ActiveRole") && dict["ActiveRole"] != null) + membership.ActiveRole = UUID.Parse(dict["ActiveRole"].ToString()); + + if (dict.ContainsKey("AllowPublish") && dict["AllowPublish"] != null) + membership.AllowPublish = bool.Parse(dict["AllowPublish"].ToString()); + + if (dict.ContainsKey("Charter") && dict["Charter"] != null) + membership.Charter = dict["Charter"].ToString(); + else + membership.Charter = string.Empty; + + if (dict.ContainsKey("Contribution") && dict["Contribution"] != null) + membership.Contribution = Int32.Parse(dict["Contribution"].ToString()); + + if (dict.ContainsKey("FounderID") && dict["FounderID"] != null) + membership.FounderID = UUID.Parse(dict["FounderID"].ToString()); + + if (dict.ContainsKey("GroupID") && dict["GroupID"] != null) + membership.GroupID = UUID.Parse(dict["GroupID"].ToString()); + + if (dict.ContainsKey("GroupName") && dict["GroupName"] != null) + membership.GroupName = dict["GroupName"].ToString(); + else + membership.GroupName = string.Empty; + + if (dict.ContainsKey("GroupPicture") && dict["GroupPicture"] != null) + membership.GroupPicture = UUID.Parse(dict["GroupPicture"].ToString()); + + if (dict.ContainsKey("GroupPowers") && dict["GroupPowers"] != null) + membership.GroupPowers = UInt64.Parse(dict["GroupPowers"].ToString()); + + if (dict.ContainsKey("GroupTitle") && dict["GroupTitle"] != null) + membership.GroupTitle = dict["GroupTitle"].ToString(); + else + membership.GroupTitle = string.Empty; + + if (dict.ContainsKey("ListInProfile") && dict["ListInProfile"] != null) + membership.ListInProfile = bool.Parse(dict["ListInProfile"].ToString()); + + if (dict.ContainsKey("MaturePublish") && dict["MaturePublish"] != null) + membership.MaturePublish = bool.Parse(dict["MaturePublish"].ToString()); + + if (dict.ContainsKey("MembershipFee") && dict["MembershipFee"] != null) + membership.MembershipFee = Int32.Parse(dict["MembershipFee"].ToString()); + + if (dict.ContainsKey("OpenEnrollment") && dict["OpenEnrollment"] != null) + membership.OpenEnrollment = bool.Parse(dict["OpenEnrollment"].ToString()); + + if (dict.ContainsKey("ShowInList") && dict["ShowInList"] != null) + membership.ShowInList = bool.Parse(dict["ShowInList"].ToString()); + + return membership; + } + + public static Dictionary GroupMembersData(ExtendedGroupMembersData member) + { + Dictionary dict = new Dictionary(); + + dict["AcceptNotices"] = member.AcceptNotices.ToString(); + dict["AccessToken"] = Sanitize(member.AccessToken); + dict["AgentID"] = Sanitize(member.AgentID); + dict["AgentPowers"] = member.AgentPowers.ToString(); + dict["Contribution"] = member.Contribution.ToString(); + dict["IsOwner"] = member.IsOwner.ToString(); + dict["ListInProfile"] = member.ListInProfile.ToString(); + dict["OnlineStatus"] = Sanitize(member.OnlineStatus); + dict["Title"] = Sanitize(member.Title); + + return dict; + } + + public static ExtendedGroupMembersData GroupMembersData(Dictionary dict) + { + ExtendedGroupMembersData member = new ExtendedGroupMembersData(); + + if (dict == null) + return member; + + if (dict.ContainsKey("AcceptNotices") && dict["AcceptNotices"] != null) + member.AcceptNotices = bool.Parse(dict["AcceptNotices"].ToString()); + + if (dict.ContainsKey("AccessToken") && dict["AccessToken"] != null) + member.AccessToken = Sanitize(dict["AccessToken"].ToString()); + else + member.AccessToken = string.Empty; + + if (dict.ContainsKey("AgentID") && dict["AgentID"] != null) + member.AgentID = Sanitize(dict["AgentID"].ToString()); + else + member.AgentID = UUID.Zero.ToString(); + + if (dict.ContainsKey("AgentPowers") && dict["AgentPowers"] != null) + member.AgentPowers = UInt64.Parse(dict["AgentPowers"].ToString()); + + if (dict.ContainsKey("Contribution") && dict["Contribution"] != null) + member.Contribution = Int32.Parse(dict["Contribution"].ToString()); + + if (dict.ContainsKey("IsOwner") && dict["IsOwner"] != null) + member.IsOwner = bool.Parse(dict["IsOwner"].ToString()); + + if (dict.ContainsKey("ListInProfile") && dict["ListInProfile"] != null) + member.ListInProfile = bool.Parse(dict["ListInProfile"].ToString()); + + if (dict.ContainsKey("OnlineStatus") && dict["OnlineStatus"] != null) + member.OnlineStatus = Sanitize(dict["OnlineStatus"].ToString()); + else + member.OnlineStatus = string.Empty; + + if (dict.ContainsKey("Title") && dict["Title"] != null) + member.Title = Sanitize(dict["Title"].ToString()); + else + member.Title = string.Empty; + + return member; + } + + public static Dictionary GroupRolesData(GroupRolesData role) + { + Dictionary dict = new Dictionary(); + + dict["Description"] = Sanitize(role.Description); + dict["Members"] = role.Members.ToString(); + dict["Name"] = Sanitize(role.Name); + dict["Powers"] = role.Powers.ToString(); + dict["RoleID"] = role.RoleID.ToString(); + dict["Title"] = Sanitize(role.Title); + + return dict; + } + + public static GroupRolesData GroupRolesData(Dictionary dict) + { + GroupRolesData role = new GroupRolesData(); + + if (dict == null) + return role; + + if (dict.ContainsKey("Description") && dict["Description"] != null) + role.Description = Sanitize(dict["Description"].ToString()); + else + role.Description = string.Empty; + + if (dict.ContainsKey("Members") && dict["Members"] != null) + role.Members = Int32.Parse(dict["Members"].ToString()); + + if (dict.ContainsKey("Name") && dict["Name"] != null) + role.Name = Sanitize(dict["Name"].ToString()); + else + role.Name = string.Empty; + + if (dict.ContainsKey("Powers") && dict["Powers"] != null) + role.Powers = UInt64.Parse(dict["Powers"].ToString()); + + if (dict.ContainsKey("Title") && dict["Title"] != null) + role.Title = Sanitize(dict["Title"].ToString()); + else + role.Title = string.Empty; + + if (dict.ContainsKey("RoleID") && dict["RoleID"] != null) + role.RoleID = UUID.Parse(dict["RoleID"].ToString()); + + return role; + } + + public static Dictionary GroupRoleMembersData(ExtendedGroupRoleMembersData rmember) + { + Dictionary dict = new Dictionary(); + + dict["RoleID"] = rmember.RoleID.ToString(); + dict["MemberID"] = rmember.MemberID; + return dict; + } + + public static ExtendedGroupRoleMembersData GroupRoleMembersData(Dictionary dict) + { + ExtendedGroupRoleMembersData rmember = new ExtendedGroupRoleMembersData(); + + if (dict.ContainsKey("RoleID") && dict["RoleID"] != null) + rmember.RoleID = new UUID(dict["RoleID"].ToString()); + + if (dict.ContainsKey("MemberID") && dict["MemberID"] != null) + rmember.MemberID = dict["MemberID"].ToString(); + + return rmember; + } + + public static Dictionary GroupInviteInfo(GroupInviteInfo invite) + { + Dictionary dict = new Dictionary(); + + dict["InviteID"] = invite.InviteID.ToString(); + dict["GroupID"] = invite.GroupID.ToString(); + dict["RoleID"] = invite.RoleID.ToString(); + dict["AgentID"] = invite.AgentID; + + return dict; + } + + public static GroupInviteInfo GroupInviteInfo(Dictionary dict) + { + if (dict == null) + return null; + + GroupInviteInfo invite = new GroupInviteInfo(); + + invite.InviteID = new UUID(dict["InviteID"].ToString()); + invite.GroupID = new UUID(dict["GroupID"].ToString()); + invite.RoleID = new UUID(dict["RoleID"].ToString()); + invite.AgentID = Sanitize(dict["AgentID"].ToString()); + + return invite; + } + + public static Dictionary GroupNoticeData(ExtendedGroupNoticeData notice) + { + Dictionary dict = new Dictionary(); + + dict["NoticeID"] = notice.NoticeID.ToString(); + dict["Timestamp"] = notice.Timestamp.ToString(); + dict["FromName"] = Sanitize(notice.FromName); + dict["Subject"] = Sanitize(notice.Subject); + dict["HasAttachment"] = notice.HasAttachment.ToString(); + dict["AttachmentItemID"] = notice.AttachmentItemID.ToString(); + dict["AttachmentName"] = Sanitize(notice.AttachmentName); + dict["AttachmentType"] = notice.AttachmentType.ToString(); + dict["AttachmentOwnerID"] = Sanitize(notice.AttachmentOwnerID); + + return dict; + } + + public static ExtendedGroupNoticeData GroupNoticeData(Dictionary dict) + { + ExtendedGroupNoticeData notice = new ExtendedGroupNoticeData(); + + if (dict == null) + return notice; + + notice.NoticeID = new UUID(dict["NoticeID"].ToString()); + notice.Timestamp = UInt32.Parse(dict["Timestamp"].ToString()); + notice.FromName = Sanitize(dict["FromName"].ToString()); + notice.Subject = Sanitize(dict["Subject"].ToString()); + notice.HasAttachment = bool.Parse(dict["HasAttachment"].ToString()); + notice.AttachmentItemID = new UUID(dict["AttachmentItemID"].ToString()); + notice.AttachmentName = dict["AttachmentName"].ToString(); + notice.AttachmentType = byte.Parse(dict["AttachmentType"].ToString()); + notice.AttachmentOwnerID = dict["AttachmentOwnerID"].ToString(); + + return notice; + } + + public static Dictionary GroupNoticeInfo(GroupNoticeInfo notice) + { + Dictionary dict = GroupNoticeData(notice.noticeData); + + dict["GroupID"] = notice.GroupID.ToString(); + dict["Message"] = Sanitize(notice.Message); + + return dict; + } + + public static GroupNoticeInfo GroupNoticeInfo(Dictionary dict) + { + GroupNoticeInfo notice = new GroupNoticeInfo(); + + notice.noticeData = GroupNoticeData(dict); + notice.GroupID = new UUID(dict["GroupID"].ToString()); + notice.Message = Sanitize(dict["Message"].ToString()); + + return notice; + } + } + +} diff --git a/OpenSim/Addons/Groups/GroupsMessagingModule.cs b/OpenSim/Addons/Groups/GroupsMessagingModule.cs new file mode 100644 index 0000000000..d172d48c6c --- /dev/null +++ b/OpenSim/Addons/Groups/GroupsMessagingModule.cs @@ -0,0 +1,594 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using log4net; +using Mono.Addins; +using Nini.Config; +using OpenMetaverse; +using OpenMetaverse.StructuredData; +using OpenSim.Framework; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; +using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; + +namespace OpenSim.Groups +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GroupsMessagingModule")] + public class GroupsMessagingModule : ISharedRegionModule, IGroupsMessagingModule + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private List m_sceneList = new List(); + private IPresenceService m_presenceService; + + private IMessageTransferModule m_msgTransferModule = null; + + private IGroupsServicesConnector m_groupData = null; + + // Config Options + private bool m_groupMessagingEnabled = false; + private bool m_debugEnabled = true; + + ///

+ /// If enabled, module only tries to send group IMs to online users by querying cached presence information. + /// + private bool m_messageOnlineAgentsOnly; + + /// + /// Cache for online users. + /// + /// + /// Group ID is key, presence information for online members is value. + /// Will only be non-null if m_messageOnlineAgentsOnly = true + /// We cache here so that group messages don't constantly have to re-request the online user list to avoid + /// attempted expensive sending of messages to offline users. + /// The tradeoff is that a user that comes online will not receive messages consistently from all other users + /// until caches have updated. + /// Therefore, we set the cache expiry to just 20 seconds. + /// + private ExpiringCache m_usersOnlineCache; + + private int m_usersOnlineCacheExpirySeconds = 20; + + #region Region Module interfaceBase Members + + public void Initialise(IConfigSource config) + { + IConfig groupsConfig = config.Configs["Groups"]; + + if (groupsConfig == null) + // Do not run this module by default. + return; + + // if groups aren't enabled, we're not needed. + // if we're not specified as the connector to use, then we're not wanted + if ((groupsConfig.GetBoolean("Enabled", false) == false) + || (groupsConfig.GetString("MessagingModule", "") != Name)) + { + m_groupMessagingEnabled = false; + return; + } + + m_groupMessagingEnabled = groupsConfig.GetBoolean("MessagingEnabled", true); + + if (!m_groupMessagingEnabled) + return; + + m_messageOnlineAgentsOnly = groupsConfig.GetBoolean("MessageOnlineUsersOnly", false); + + if (m_messageOnlineAgentsOnly) + m_usersOnlineCache = new ExpiringCache(); + + m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", true); + + m_log.InfoFormat( + "[Groups.Messaging]: GroupsMessagingModule enabled with MessageOnlineOnly = {0}, DebugEnabled = {1}", + m_messageOnlineAgentsOnly, m_debugEnabled); + } + + public void AddRegion(Scene scene) + { + if (!m_groupMessagingEnabled) + return; + + scene.RegisterModuleInterface(this); + m_sceneList.Add(scene); + + scene.EventManager.OnNewClient += OnNewClient; + scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; + scene.EventManager.OnClientLogin += OnClientLogin; + } + + public void RegionLoaded(Scene scene) + { + if (!m_groupMessagingEnabled) + return; + + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + m_groupData = scene.RequestModuleInterface(); + + // No groups module, no groups messaging + if (m_groupData == null) + { + m_log.Error("[Groups.Messaging]: Could not get IGroupsServicesConnector, GroupsMessagingModule is now disabled."); + RemoveRegion(scene); + return; + } + + m_msgTransferModule = scene.RequestModuleInterface(); + + // No message transfer module, no groups messaging + if (m_msgTransferModule == null) + { + m_log.Error("[Groups.Messaging]: Could not get MessageTransferModule"); + RemoveRegion(scene); + return; + } + + if (m_presenceService == null) + m_presenceService = scene.PresenceService; + + } + + public void RemoveRegion(Scene scene) + { + if (!m_groupMessagingEnabled) + return; + + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + m_sceneList.Remove(scene); + scene.EventManager.OnNewClient -= OnNewClient; + scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage; + scene.EventManager.OnClientLogin -= OnClientLogin; + scene.UnregisterModuleInterface(this); + } + + public void Close() + { + if (!m_groupMessagingEnabled) + return; + + if (m_debugEnabled) m_log.Debug("[Groups.Messaging]: Shutting down GroupsMessagingModule module."); + + m_sceneList.Clear(); + + m_groupData = null; + m_msgTransferModule = null; + } + + public Type ReplaceableInterface + { + get { return null; } + } + + public string Name + { + get { return "Groups Messaging Module V2"; } + } + + public void PostInitialise() + { + // NoOp + } + + #endregion + + + /// + /// Not really needed, but does confirm that the group exists. + /// + public bool StartGroupChatSession(UUID agentID, UUID groupID) + { + if (m_debugEnabled) + m_log.DebugFormat("[Groups.Messaging]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + GroupRecord groupInfo = m_groupData.GetGroupRecord(agentID.ToString(), groupID, null); + + if (groupInfo != null) + { + return true; + } + else + { + return false; + } + } + + public void SendMessageToGroup(GridInstantMessage im, UUID groupID) + { + List groupMembers = m_groupData.GetGroupMembers(new UUID(im.fromAgentID).ToString(), groupID); + int groupMembersCount = groupMembers.Count; + + if (m_messageOnlineAgentsOnly) + { + string[] t1 = groupMembers.ConvertAll(gmd => gmd.AgentID.ToString()).ToArray(); + + // We cache in order not to overwhlem the presence service on large grids with many groups. This does + // mean that members coming online will not see all group members until after m_usersOnlineCacheExpirySeconds has elapsed. + // (assuming this is the same across all grid simulators). + PresenceInfo[] onlineAgents; + if (!m_usersOnlineCache.TryGetValue(groupID, out onlineAgents)) + { + onlineAgents = m_presenceService.GetAgents(t1); + m_usersOnlineCache.Add(groupID, onlineAgents, m_usersOnlineCacheExpirySeconds); + } + + HashSet onlineAgentsUuidSet = new HashSet(); + Array.ForEach(onlineAgents, pi => onlineAgentsUuidSet.Add(pi.UserID)); + + groupMembers = groupMembers.Where(gmd => onlineAgentsUuidSet.Contains(gmd.AgentID.ToString())).ToList(); + + // if (m_debugEnabled) +// m_log.DebugFormat( +// "[Groups.Messaging]: SendMessageToGroup called for group {0} with {1} visible members, {2} online", +// groupID, groupMembersCount, groupMembers.Count()); + } + else + { + if (m_debugEnabled) + m_log.DebugFormat( + "[Groups.Messaging]: SendMessageToGroup called for group {0} with {1} visible members", + groupID, groupMembers.Count); + } + + int requestStartTick = Environment.TickCount; + + foreach (GroupMembersData member in groupMembers) + { + if (m_groupData.hasAgentDroppedGroupChatSession(member.AgentID.ToString(), groupID)) + { + // Don't deliver messages to people who have dropped this session + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: {0} has dropped session, not delivering to them", member.AgentID); + continue; + } + + // Copy Message + GridInstantMessage msg = new GridInstantMessage(); + msg.imSessionID = groupID.Guid; + msg.fromAgentName = im.fromAgentName; + msg.message = im.message; + msg.dialog = im.dialog; + msg.offline = im.offline; + msg.ParentEstateID = im.ParentEstateID; + msg.Position = im.Position; + msg.RegionID = im.RegionID; + msg.binaryBucket = im.binaryBucket; + msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); + + msg.fromAgentID = im.fromAgentID; + msg.fromGroup = true; + + msg.toAgentID = member.AgentID.Guid; + + IClientAPI client = GetActiveClient(member.AgentID); + if (client == null) + { + // If they're not local, forward across the grid + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: Delivering to {0} via Grid", member.AgentID); + m_msgTransferModule.SendInstantMessage(msg, delegate(bool success) { }); + } + else + { + // Deliver locally, directly + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: Passing to ProcessMessageFromGroupSession to deliver to {0} locally", client.Name); + ProcessMessageFromGroupSession(msg); + } + } + + // Temporary for assessing how long it still takes to send messages to large online groups. + if (m_messageOnlineAgentsOnly) + m_log.DebugFormat( + "[Groups.Messaging]: SendMessageToGroup for group {0} with {1} visible members, {2} online took {3}ms", + groupID, groupMembersCount, groupMembers.Count(), Environment.TickCount - requestStartTick); + } + + #region SimGridEventHandlers + + void OnClientLogin(IClientAPI client) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: OnInstantMessage registered for {0}", client.Name); + } + + private void OnNewClient(IClientAPI client) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: OnInstantMessage registered for {0}", client.Name); + + client.OnInstantMessage += OnInstantMessage; + } + + private void OnGridInstantMessage(GridInstantMessage msg) + { + // The instant message module will only deliver messages of dialog types: + // MessageFromAgent, StartTyping, StopTyping, MessageFromObject + // + // Any other message type will not be delivered to a client by the + // Instant Message Module + + + if (m_debugEnabled) + { + m_log.DebugFormat("[Groups.Messaging]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + DebugGridInstantMessage(msg); + } + + // Incoming message from a group + if ((msg.fromGroup == true) && + ((msg.dialog == (byte)InstantMessageDialog.SessionSend) + || (msg.dialog == (byte)InstantMessageDialog.SessionAdd) + || (msg.dialog == (byte)InstantMessageDialog.SessionDrop))) + { + ProcessMessageFromGroupSession(msg); + } + } + + private void ProcessMessageFromGroupSession(GridInstantMessage msg) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: Session message from {0} going to agent {1}", msg.fromAgentName, msg.toAgentID); + + UUID AgentID = new UUID(msg.fromAgentID); + UUID GroupID = new UUID(msg.imSessionID); + + switch (msg.dialog) + { + case (byte)InstantMessageDialog.SessionAdd: + m_groupData.AgentInvitedToGroupChatSession(AgentID.ToString(), GroupID); + break; + + case (byte)InstantMessageDialog.SessionDrop: + m_groupData.AgentDroppedFromGroupChatSession(AgentID.ToString(), GroupID); + break; + + case (byte)InstantMessageDialog.SessionSend: + if (!m_groupData.hasAgentDroppedGroupChatSession(AgentID.ToString(), GroupID) + && !m_groupData.hasAgentBeenInvitedToGroupChatSession(AgentID.ToString(), GroupID) + ) + { + // Agent not in session and hasn't dropped from session + // Add them to the session for now, and Invite them + m_groupData.AgentInvitedToGroupChatSession(AgentID.ToString(), GroupID); + + UUID toAgentID = new UUID(msg.toAgentID); + IClientAPI activeClient = GetActiveClient(toAgentID); + if (activeClient != null) + { + GroupRecord groupInfo = m_groupData.GetGroupRecord(UUID.Zero.ToString(), GroupID, null); + if (groupInfo != null) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: Sending chatterbox invite instant message"); + + // Force? open the group session dialog??? + // and simultanously deliver the message, so we don't need to do a seperate client.SendInstantMessage(msg); + IEventQueue eq = activeClient.Scene.RequestModuleInterface(); + eq.ChatterboxInvitation( + GroupID + , groupInfo.GroupName + , new UUID(msg.fromAgentID) + , msg.message + , new UUID(msg.toAgentID) + , msg.fromAgentName + , msg.dialog + , msg.timestamp + , msg.offline == 1 + , (int)msg.ParentEstateID + , msg.Position + , 1 + , new UUID(msg.imSessionID) + , msg.fromGroup + , OpenMetaverse.Utils.StringToBytes(groupInfo.GroupName) + ); + + eq.ChatterBoxSessionAgentListUpdates( + new UUID(GroupID) + , new UUID(msg.fromAgentID) + , new UUID(msg.toAgentID) + , false //canVoiceChat + , false //isModerator + , false //text mute + ); + } + } + } + else if (!m_groupData.hasAgentDroppedGroupChatSession(AgentID.ToString(), GroupID)) + { + // User hasn't dropped, so they're in the session, + // maybe we should deliver it. + IClientAPI client = GetActiveClient(new UUID(msg.toAgentID)); + if (client != null) + { + // Deliver locally, directly + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: Delivering to {0} locally", client.Name); + client.SendInstantMessage(msg); + } + else + { + m_log.WarnFormat("[Groups.Messaging]: Received a message over the grid for a client that isn't here: {0}", msg.toAgentID); + } + } + break; + + default: + m_log.WarnFormat("[Groups.Messaging]: I don't know how to proccess a {0} message.", ((InstantMessageDialog)msg.dialog).ToString()); + break; + } + } + + #endregion + + + #region ClientEvents + private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) + { + if (m_debugEnabled) + { + m_log.DebugFormat("[Groups.Messaging]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + DebugGridInstantMessage(im); + } + + // Start group IM session + if ((im.dialog == (byte)InstantMessageDialog.SessionGroupStart)) + { + if (m_debugEnabled) m_log.InfoFormat("[Groups.Messaging]: imSessionID({0}) toAgentID({1})", im.imSessionID, im.toAgentID); + + UUID GroupID = new UUID(im.imSessionID); + UUID AgentID = new UUID(im.fromAgentID); + + GroupRecord groupInfo = m_groupData.GetGroupRecord(UUID.Zero.ToString(), GroupID, null); + + if (groupInfo != null) + { + m_groupData.AgentInvitedToGroupChatSession(AgentID.ToString(), GroupID); + + ChatterBoxSessionStartReplyViaCaps(remoteClient, groupInfo.GroupName, GroupID); + + IEventQueue queue = remoteClient.Scene.RequestModuleInterface(); + queue.ChatterBoxSessionAgentListUpdates( + GroupID + , AgentID + , new UUID(im.toAgentID) + , false //canVoiceChat + , false //isModerator + , false //text mute + ); + } + } + + // Send a message from locally connected client to a group + if ((im.dialog == (byte)InstantMessageDialog.SessionSend)) + { + UUID GroupID = new UUID(im.imSessionID); + UUID AgentID = new UUID(im.fromAgentID); + + if (m_debugEnabled) + m_log.DebugFormat("[Groups.Messaging]: Send message to session for group {0} with session ID {1}", GroupID, im.imSessionID.ToString()); + + //If this agent is sending a message, then they want to be in the session + m_groupData.AgentInvitedToGroupChatSession(AgentID.ToString(), GroupID); + + SendMessageToGroup(im, GroupID); + } + } + + #endregion + + void ChatterBoxSessionStartReplyViaCaps(IClientAPI remoteClient, string groupName, UUID groupID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + OSDMap moderatedMap = new OSDMap(4); + moderatedMap.Add("voice", OSD.FromBoolean(false)); + + OSDMap sessionMap = new OSDMap(4); + sessionMap.Add("moderated_mode", moderatedMap); + sessionMap.Add("session_name", OSD.FromString(groupName)); + sessionMap.Add("type", OSD.FromInteger(0)); + sessionMap.Add("voice_enabled", OSD.FromBoolean(false)); + + OSDMap bodyMap = new OSDMap(4); + bodyMap.Add("session_id", OSD.FromUUID(groupID)); + bodyMap.Add("temp_session_id", OSD.FromUUID(groupID)); + bodyMap.Add("success", OSD.FromBoolean(true)); + bodyMap.Add("session_info", sessionMap); + + IEventQueue queue = remoteClient.Scene.RequestModuleInterface(); + + if (queue != null) + { + queue.Enqueue(queue.BuildEvent("ChatterBoxSessionStartReply", bodyMap), remoteClient.AgentId); + } + } + + private void DebugGridInstantMessage(GridInstantMessage im) + { + // Don't log any normal IMs (privacy!) + if (m_debugEnabled && im.dialog != (byte)InstantMessageDialog.MessageFromAgent) + { + m_log.WarnFormat("[Groups.Messaging]: IM: fromGroup({0})", im.fromGroup ? "True" : "False"); + m_log.WarnFormat("[Groups.Messaging]: IM: Dialog({0})", ((InstantMessageDialog)im.dialog).ToString()); + m_log.WarnFormat("[Groups.Messaging]: IM: fromAgentID({0})", im.fromAgentID.ToString()); + m_log.WarnFormat("[Groups.Messaging]: IM: fromAgentName({0})", im.fromAgentName.ToString()); + m_log.WarnFormat("[Groups.Messaging]: IM: imSessionID({0})", im.imSessionID.ToString()); + m_log.WarnFormat("[Groups.Messaging]: IM: message({0})", im.message.ToString()); + m_log.WarnFormat("[Groups.Messaging]: IM: offline({0})", im.offline.ToString()); + m_log.WarnFormat("[Groups.Messaging]: IM: toAgentID({0})", im.toAgentID.ToString()); + m_log.WarnFormat("[Groups.Messaging]: IM: binaryBucket({0})", OpenMetaverse.Utils.BytesToHexString(im.binaryBucket, "BinaryBucket")); + } + } + + #region Client Tools + + /// + /// Try to find an active IClientAPI reference for agentID giving preference to root connections + /// + private IClientAPI GetActiveClient(UUID agentID) + { + if (m_debugEnabled) m_log.WarnFormat("[Groups.Messaging]: Looking for local client {0}", agentID); + + IClientAPI child = null; + + // Try root avatar first + foreach (Scene scene in m_sceneList) + { + ScenePresence sp = scene.GetScenePresence(agentID); + if (sp != null) + { + if (!sp.IsChildAgent) + { + if (m_debugEnabled) m_log.WarnFormat("[Groups.Messaging]: Found root agent for client : {0}", sp.ControllingClient.Name); + return sp.ControllingClient; + } + else + { + if (m_debugEnabled) m_log.WarnFormat("[Groups.Messaging]: Found child agent for client : {0}", sp.ControllingClient.Name); + child = sp.ControllingClient; + } + } + } + + // If we didn't find a root, then just return whichever child we found, or null if none + if (child == null) + { + if (m_debugEnabled) m_log.WarnFormat("[Groups.Messaging]: Could not find local client for agent : {0}", agentID); + } + else + { + if (m_debugEnabled) m_log.WarnFormat("[Groups.Messaging]: Returning child agent for client : {0}", child.Name); + } + return child; + } + + #endregion + } +} diff --git a/OpenSim/Addons/Groups/GroupsModule.cs b/OpenSim/Addons/Groups/GroupsModule.cs new file mode 100644 index 0000000000..10bfa8f852 --- /dev/null +++ b/OpenSim/Addons/Groups/GroupsModule.cs @@ -0,0 +1,1467 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Timers; +using log4net; +using Mono.Addins; +using Nini.Config; +using OpenMetaverse; +using OpenMetaverse.StructuredData; +using OpenSim.Framework; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; +using DirFindFlags = OpenMetaverse.DirectoryManager.DirFindFlags; + +namespace OpenSim.Groups +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GroupsModule")] + public class GroupsModule : ISharedRegionModule, IGroupsModule + { + /// + /// + + private static readonly ILog m_log = + LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private List m_sceneList = new List(); + + private IMessageTransferModule m_msgTransferModule = null; + + private IGroupsServicesConnector m_groupData = null; + private IUserManagement m_UserManagement; + + // Configuration settings + private bool m_groupsEnabled = false; + private bool m_groupNoticesEnabled = true; + private bool m_debugEnabled = false; + private int m_levelGroupCreate = 0; + + #region Region Module interfaceBase Members + + public void Initialise(IConfigSource config) + { + IConfig groupsConfig = config.Configs["Groups"]; + + if (groupsConfig == null) + { + // Do not run this module by default. + return; + } + else + { + m_groupsEnabled = groupsConfig.GetBoolean("Enabled", false); + if (!m_groupsEnabled) + { + return; + } + + if (groupsConfig.GetString("Module", "Default") != Name) + { + m_groupsEnabled = false; + + return; + } + + m_log.InfoFormat("[Groups]: Initializing {0}", this.Name); + + m_groupNoticesEnabled = groupsConfig.GetBoolean("NoticesEnabled", true); + m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", false); + m_levelGroupCreate = groupsConfig.GetInt("LevelGroupCreate", 0); + } + } + + public void AddRegion(Scene scene) + { + if (m_groupsEnabled) + { + scene.RegisterModuleInterface(this); + scene.AddCommand( + "debug", + this, + "debug groups verbose", + "debug groups verbose ", + "This setting turns on very verbose groups debugging", + HandleDebugGroupsVerbose); + } + } + + private void HandleDebugGroupsVerbose(object modules, string[] args) + { + if (args.Length < 4) + { + MainConsole.Instance.Output("Usage: debug groups verbose "); + return; + } + + bool verbose = false; + if (!bool.TryParse(args[3], out verbose)) + { + MainConsole.Instance.Output("Usage: debug groups verbose "); + return; + } + + m_debugEnabled = verbose; + + MainConsole.Instance.OutputFormat("{0} verbose logging set to {1}", Name, m_debugEnabled); + } + + public void RegionLoaded(Scene scene) + { + if (!m_groupsEnabled) + return; + + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + scene.EventManager.OnNewClient += OnNewClient; + scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; + // The InstantMessageModule itself doesn't do this, + // so lets see if things explode if we don't do it + // scene.EventManager.OnClientClosed += OnClientClosed; + + if (m_groupData == null) + { + m_groupData = scene.RequestModuleInterface(); + + // No Groups Service Connector, then nothing works... + if (m_groupData == null) + { + m_groupsEnabled = false; + m_log.Error("[Groups]: Could not get IGroupsServicesConnector"); + RemoveRegion(scene); + return; + } + } + + if (m_msgTransferModule == null) + { + m_msgTransferModule = scene.RequestModuleInterface(); + + // No message transfer module, no notices, group invites, rejects, ejects, etc + if (m_msgTransferModule == null) + { + m_log.Warn("[Groups]: Could not get MessageTransferModule"); + } + } + + if (m_UserManagement == null) + { + m_UserManagement = scene.RequestModuleInterface(); + if (m_UserManagement == null) + m_log.Warn("[Groups]: Could not get UserManagementModule"); + } + + lock (m_sceneList) + { + m_sceneList.Add(scene); + } + + + } + + public void RemoveRegion(Scene scene) + { + if (!m_groupsEnabled) + return; + + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + scene.EventManager.OnNewClient -= OnNewClient; + scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage; + + lock (m_sceneList) + { + m_sceneList.Remove(scene); + } + } + + public void Close() + { + if (!m_groupsEnabled) + return; + + if (m_debugEnabled) m_log.Debug("[Groups]: Shutting down Groups module."); + } + + public Type ReplaceableInterface + { + get { return null; } + } + + public string Name + { + get { return "Groups Module V2"; } + } + + public void PostInitialise() + { + // NoOp + } + + #endregion + + #region EventHandlers + private void OnNewClient(IClientAPI client) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest; + client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest; + client.OnDirFindQuery += OnDirFindQuery; + client.OnRequestAvatarProperties += OnRequestAvatarProperties; + + // Used for Notices and Group Invites/Accept/Reject + client.OnInstantMessage += OnInstantMessage; + + // Send client their groups information. + SendAgentGroupDataUpdate(client, client.AgentId); + } + + private void OnRequestAvatarProperties(IClientAPI remoteClient, UUID avatarID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + //GroupMembershipData[] avatarGroups = m_groupData.GetAgentGroupMemberships(GetRequestingAgentID(remoteClient), avatarID).ToArray(); + GroupMembershipData[] avatarGroups = GetProfileListedGroupMemberships(remoteClient, avatarID); + remoteClient.SendAvatarGroupsReply(avatarID, avatarGroups); + } + + /* + * This becomes very problematic in a shared module. In a shared module you may have more then one + * reference to IClientAPI's, one for 0 or 1 root connections, and 0 or more child connections. + * The OnClientClosed event does not provide anything to indicate which one of those should be closed + * nor does it provide what scene it was from so that the specific reference can be looked up. + * The InstantMessageModule.cs does not currently worry about unregistering the handles, + * and it should be an issue, since it's the client that references us not the other way around + * , so as long as we don't keep a reference to the client laying around, the client can still be GC'ed + private void OnClientClosed(UUID AgentId) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + lock (m_ActiveClients) + { + if (m_ActiveClients.ContainsKey(AgentId)) + { + IClientAPI client = m_ActiveClients[AgentId]; + client.OnUUIDGroupNameRequest -= HandleUUIDGroupNameRequest; + client.OnAgentDataUpdateRequest -= OnAgentDataUpdateRequest; + client.OnDirFindQuery -= OnDirFindQuery; + client.OnInstantMessage -= OnInstantMessage; + + m_ActiveClients.Remove(AgentId); + } + else + { + if (m_debugEnabled) m_log.WarnFormat("[Groups]: Client closed that wasn't registered here."); + } + + + } + } + */ + + void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart) + { + if (((DirFindFlags)queryFlags & DirFindFlags.Groups) == DirFindFlags.Groups) + { + if (m_debugEnabled) + m_log.DebugFormat( + "[Groups]: {0} called with queryText({1}) queryFlags({2}) queryStart({3})", + System.Reflection.MethodBase.GetCurrentMethod().Name, queryText, (DirFindFlags)queryFlags, queryStart); + + // TODO: This currently ignores pretty much all the query flags including Mature and sort order + remoteClient.SendDirGroupsReply(queryID, m_groupData.FindGroups(GetRequestingAgentIDStr(remoteClient), queryText).ToArray()); + } + + } + + private void OnAgentDataUpdateRequest(IClientAPI remoteClient, UUID dataForAgentID, UUID sessionID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + UUID activeGroupID = UUID.Zero; + string activeGroupTitle = string.Empty; + string activeGroupName = string.Empty; + ulong activeGroupPowers = (ulong)GroupPowers.None; + + GroupMembershipData membership = m_groupData.GetAgentActiveMembership(GetRequestingAgentIDStr(remoteClient), dataForAgentID.ToString()); + if (membership != null) + { + activeGroupID = membership.GroupID; + activeGroupTitle = membership.GroupTitle; + activeGroupPowers = membership.GroupPowers; + } + + SendAgentDataUpdate(remoteClient, dataForAgentID, activeGroupID, activeGroupName, activeGroupPowers, activeGroupTitle); + + SendScenePresenceUpdate(dataForAgentID, activeGroupTitle); + } + + private void HandleUUIDGroupNameRequest(UUID GroupID, IClientAPI remoteClient) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + string GroupName; + + GroupRecord group = m_groupData.GetGroupRecord(GetRequestingAgentIDStr(remoteClient), GroupID, null); + if (group != null) + { + GroupName = group.GroupName; + } + else + { + GroupName = "Unknown"; + } + + remoteClient.SendGroupNameReply(GroupID, GroupName); + } + + private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + m_log.DebugFormat("[Groups]: IM From {0} to {1} msg {2} type {3}", im.fromAgentID, im.toAgentID, im.message, (InstantMessageDialog)im.dialog); + // Group invitations + if ((im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) || (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline)) + { + UUID inviteID = new UUID(im.imSessionID); + GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(GetRequestingAgentIDStr(remoteClient), inviteID); + + if (inviteInfo == null) + { + if (m_debugEnabled) m_log.WarnFormat("[Groups]: Received an Invite IM for an invite that does not exist {0}.", inviteID); + return; + } + + //m_log.DebugFormat("[XXX]: Invite is for Agent {0} to Group {1}.", inviteInfo.AgentID, inviteInfo.GroupID); + + UUID fromAgentID = new UUID(im.fromAgentID); + UUID invitee = UUID.Zero; + string tmp = string.Empty; + Util.ParseUniversalUserIdentifier(inviteInfo.AgentID, out invitee, out tmp, out tmp, out tmp, out tmp); + if ((inviteInfo != null) && (fromAgentID == invitee)) + { + // Accept + if (im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) + { + //m_log.DebugFormat("[XXX]: Received an accept invite notice."); + + // and the sessionid is the role + string reason = string.Empty; + if (!m_groupData.AddAgentToGroup(GetRequestingAgentIDStr(remoteClient), invitee.ToString(), inviteInfo.GroupID, inviteInfo.RoleID, string.Empty, out reason)) + remoteClient.SendAgentAlertMessage("Unable to add you to the group: " + reason, false); + else + { + GridInstantMessage msg = new GridInstantMessage(); + msg.imSessionID = UUID.Zero.Guid; + msg.fromAgentID = UUID.Zero.Guid; + msg.toAgentID = invitee.Guid; + msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); + msg.fromAgentName = "Groups"; + msg.message = string.Format("You have been added to the group."); + msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.MessageBox; + msg.fromGroup = false; + msg.offline = (byte)0; + msg.ParentEstateID = 0; + msg.Position = Vector3.Zero; + msg.RegionID = UUID.Zero.Guid; + msg.binaryBucket = new byte[0]; + + OutgoingInstantMessage(msg, invitee); + + UpdateAllClientsWithGroupInfo(invitee); + } + + m_groupData.RemoveAgentToGroupInvite(GetRequestingAgentIDStr(remoteClient), inviteID); + + } + + // Reject + if (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: Received a reject invite notice."); + m_groupData.RemoveAgentToGroupInvite(GetRequestingAgentIDStr(remoteClient), inviteID); + + m_groupData.RemoveAgentFromGroup(GetRequestingAgentIDStr(remoteClient), inviteInfo.AgentID, inviteInfo.GroupID); + } + } + } + + // Group notices + if ((im.dialog == (byte)InstantMessageDialog.GroupNotice)) + { + if (!m_groupNoticesEnabled) + { + return; + } + + UUID GroupID = new UUID(im.toAgentID); + if (m_groupData.GetGroupRecord(GetRequestingAgentIDStr(remoteClient), GroupID, null) != null) + { + UUID NoticeID = UUID.Random(); + string Subject = im.message.Substring(0, im.message.IndexOf('|')); + string Message = im.message.Substring(Subject.Length + 1); + + InventoryItemBase item = null; + bool hasAttachment = false; + + if (im.binaryBucket.Length >= 1 && im.binaryBucket[0] > 0) + { + hasAttachment = true; + string binBucket = OpenMetaverse.Utils.BytesToString(im.binaryBucket); + binBucket = binBucket.Remove(0, 14).Trim(); + + OSD binBucketOSD = OSDParser.DeserializeLLSDXml(binBucket); + if (binBucketOSD is OSDMap) + { + OSDMap binBucketMap = (OSDMap)binBucketOSD; + + UUID itemID = binBucketMap["item_id"].AsUUID(); + UUID ownerID = binBucketMap["owner_id"].AsUUID(); + item = new InventoryItemBase(itemID, ownerID); + item = m_sceneList[0].InventoryService.GetItem(item); + } + else + m_log.DebugFormat("[Groups]: Received OSD with unexpected type: {0}", binBucketOSD.GetType()); + } + + if (m_groupData.AddGroupNotice(GetRequestingAgentIDStr(remoteClient), GroupID, NoticeID, im.fromAgentName, Subject, Message, + hasAttachment, + (byte)(item == null ? 0 : item.AssetType), + item == null ? null : item.Name, + item == null ? UUID.Zero : item.ID, + item == null ? UUID.Zero.ToString() : item.Owner.ToString())) + { + if (OnNewGroupNotice != null) + { + OnNewGroupNotice(GroupID, NoticeID); + } + + // Send notice out to everyone that wants notices + // Build notice IIM + GridInstantMessage msg = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice); + foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetRequestingAgentIDStr(remoteClient), GroupID)) + { + if (member.AcceptNotices) + { + msg.toAgentID = member.AgentID.Guid; + OutgoingInstantMessage(msg, member.AgentID); + } + } + } + } + } + + if (im.dialog == (byte)InstantMessageDialog.GroupNoticeInventoryAccepted) + { + if (im.binaryBucket.Length < 16) // Invalid + return; + + //// 16 bytes are the UUID. Maybe. + UUID folderID = new UUID(im.binaryBucket, 0); + UUID noticeID = new UUID(im.imSessionID); + + GroupNoticeInfo notice = m_groupData.GetGroupNotice(remoteClient.AgentId.ToString(), noticeID); + if (notice != null) + { + UUID giver = new UUID(im.toAgentID); + string tmp = string.Empty; + Util.ParseUniversalUserIdentifier(notice.noticeData.AttachmentOwnerID, out giver, out tmp, out tmp, out tmp, out tmp); + + m_log.DebugFormat("[Groups]: Giving inventory from {0} to {1}", giver, remoteClient.AgentId); + InventoryItemBase itemCopy = ((Scene)(remoteClient.Scene)).GiveInventoryItem(remoteClient.AgentId, + giver, notice.noticeData.AttachmentItemID); + + if (itemCopy == null) + { + remoteClient.SendAgentAlertMessage("Can't find item to give. Nothing given.", false); + return; + } + + remoteClient.SendInventoryItemCreateUpdate(itemCopy, 0); + } + + } + + // Interop, received special 210 code for ejecting a group member + // this only works within the comms servers domain, and won't work hypergrid + // TODO:FIXME: Use a presense server of some kind to find out where the + // client actually is, and try contacting that region directly to notify them, + // or provide the notification via xmlrpc update queue + if ((im.dialog == 210)) + { + // This is sent from the region that the ejectee was ejected from + // if it's being delivered here, then the ejectee is here + // so we need to send local updates to the agent. + + UUID ejecteeID = new UUID(im.toAgentID); + + im.dialog = (byte)InstantMessageDialog.MessageFromAgent; + OutgoingInstantMessage(im, ejecteeID); + + IClientAPI ejectee = GetActiveClient(ejecteeID); + if (ejectee != null) + { + UUID groupID = new UUID(im.imSessionID); + ejectee.SendAgentDropGroup(groupID); + } + } + } + + private void OnGridInstantMessage(GridInstantMessage msg) + { + if (m_debugEnabled) m_log.InfoFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + // Trigger the above event handler + OnInstantMessage(null, msg); + + // If a message from a group arrives here, it may need to be forwarded to a local client + if (msg.fromGroup == true) + { + switch (msg.dialog) + { + case (byte)InstantMessageDialog.GroupInvitation: + case (byte)InstantMessageDialog.GroupNotice: + UUID toAgentID = new UUID(msg.toAgentID); + IClientAPI localClient = GetActiveClient(toAgentID); + if (localClient != null) + { + localClient.SendInstantMessage(msg); + } + break; + } + } + } + + #endregion + + #region IGroupsModule Members + + public event NewGroupNotice OnNewGroupNotice; + + public GroupRecord GetGroupRecord(UUID GroupID) + { + return m_groupData.GetGroupRecord(UUID.Zero.ToString(), GroupID, null); + } + + public GroupRecord GetGroupRecord(string name) + { + return m_groupData.GetGroupRecord(UUID.Zero.ToString(), UUID.Zero, name); + } + + public void ActivateGroup(IClientAPI remoteClient, UUID groupID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + m_groupData.SetAgentActiveGroup(GetRequestingAgentIDStr(remoteClient), GetRequestingAgentIDStr(remoteClient), groupID); + + // Changing active group changes title, active powers, all kinds of things + // anyone who is in any region that can see this client, should probably be + // updated with new group info. At a minimum, they should get ScenePresence + // updated with new title. + UpdateAllClientsWithGroupInfo(remoteClient.AgentId); + } + + /// + /// Get the Role Titles for an Agent, for a specific group + /// + public List GroupTitlesRequest(IClientAPI remoteClient, UUID groupID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + List agentRoles = m_groupData.GetAgentGroupRoles(GetRequestingAgentIDStr(remoteClient), GetRequestingAgentIDStr(remoteClient), groupID); + GroupMembershipData agentMembership = m_groupData.GetAgentGroupMembership(GetRequestingAgentIDStr(remoteClient), GetRequestingAgentIDStr(remoteClient), groupID); + + List titles = new List(); + foreach (GroupRolesData role in agentRoles) + { + GroupTitlesData title = new GroupTitlesData(); + title.Name = role.Name; + if (agentMembership != null) + { + title.Selected = agentMembership.ActiveRole == role.RoleID; + } + title.UUID = role.RoleID; + + titles.Add(title); + } + + return titles; + } + + public List GroupMembersRequest(IClientAPI remoteClient, UUID groupID) + { + if (m_debugEnabled) + m_log.DebugFormat( + "[Groups]: GroupMembersRequest called for {0} from client {1}", groupID, remoteClient.Name); + + List data = m_groupData.GetGroupMembers(GetRequestingAgentIDStr(remoteClient), groupID); + + if (m_debugEnabled) + { + foreach (GroupMembersData member in data) + { + m_log.DebugFormat("[Groups]: Member({0}) - IsOwner({1})", member.AgentID, member.IsOwner); + } + } + + return data; + + } + + public List GroupRoleDataRequest(IClientAPI remoteClient, UUID groupID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + List data = m_groupData.GetGroupRoles(GetRequestingAgentIDStr(remoteClient), groupID); + + return data; + } + + public List GroupRoleMembersRequest(IClientAPI remoteClient, UUID groupID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + List data = m_groupData.GetGroupRoleMembers(GetRequestingAgentIDStr(remoteClient), groupID); + + if (m_debugEnabled) + { + foreach (GroupRoleMembersData member in data) + { + m_log.DebugFormat("[Groups]: Member({0}) - Role({1})", member.MemberID, member.RoleID); + } + } + return data; + } + + public GroupProfileData GroupProfileRequest(IClientAPI remoteClient, UUID groupID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + GroupProfileData profile = new GroupProfileData(); + + // just to get the OwnerRole... + ExtendedGroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentIDStr(remoteClient), groupID, string.Empty); + GroupMembershipData memberInfo = m_groupData.GetAgentGroupMembership(GetRequestingAgentIDStr(remoteClient), GetRequestingAgentIDStr(remoteClient), groupID); + if (groupInfo != null) + { + profile.AllowPublish = groupInfo.AllowPublish; + profile.Charter = groupInfo.Charter; + profile.FounderID = groupInfo.FounderID; + profile.GroupID = groupID; + profile.GroupMembershipCount = groupInfo.MemberCount; + profile.GroupRolesCount = groupInfo.RoleCount; + profile.InsigniaID = groupInfo.GroupPicture; + profile.MaturePublish = groupInfo.MaturePublish; + profile.MembershipFee = groupInfo.MembershipFee; + profile.Money = 0; + profile.Name = groupInfo.GroupName; + profile.OpenEnrollment = groupInfo.OpenEnrollment; + profile.OwnerRole = groupInfo.OwnerRoleID; + profile.ShowInList = groupInfo.ShowInList; + } + if (memberInfo != null) + { + profile.MemberTitle = memberInfo.GroupTitle; + profile.PowersMask = memberInfo.GroupPowers; + } + + return profile; + } + + public GroupMembershipData[] GetMembershipData(UUID agentID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + return m_groupData.GetAgentGroupMemberships(UUID.Zero.ToString(), agentID.ToString()).ToArray(); + } + + public GroupMembershipData GetMembershipData(UUID groupID, UUID agentID) + { + if (m_debugEnabled) + m_log.DebugFormat( + "[Groups]: {0} called with groupID={1}, agentID={2}", + System.Reflection.MethodBase.GetCurrentMethod().Name, groupID, agentID); + + return m_groupData.GetAgentGroupMembership(UUID.Zero.ToString(), agentID.ToString(), groupID); + } + + public void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + // Note: Permissions checking for modification rights is handled by the Groups Server/Service + string reason = string.Empty; + if (!m_groupData.UpdateGroup(GetRequestingAgentIDStr(remoteClient), groupID, charter, showInList, insigniaID, membershipFee, + openEnrollment, allowPublish, maturePublish, out reason)) + remoteClient.SendAgentAlertMessage(reason, false); + } + + public void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile) + { + // Note: Permissions checking for modification rights is handled by the Groups Server/Service + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + m_groupData.UpdateMembership(GetRequestingAgentIDStr(remoteClient), GetRequestingAgentIDStr(remoteClient), groupID, acceptNotices, listInProfile); + } + + public UUID CreateGroup(IClientAPI remoteClient, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called in {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, remoteClient.Scene.RegionInfo.RegionName); + + if (m_groupData.GetGroupRecord(GetRequestingAgentIDStr(remoteClient), UUID.Zero, name) != null) + { + remoteClient.SendCreateGroupReply(UUID.Zero, false, "A group with the same name already exists."); + return UUID.Zero; + } + + // check user level + ScenePresence avatar = null; + Scene scene = (Scene)remoteClient.Scene; + scene.TryGetScenePresence(remoteClient.AgentId, out avatar); + + if (avatar != null) + { + if (avatar.UserLevel < m_levelGroupCreate) + { + remoteClient.SendCreateGroupReply(UUID.Zero, false, String.Format("Insufficient permissions to create a group. Requires level {0}", m_levelGroupCreate)); + return UUID.Zero; + } + } + + // check funds + // is there is a money module present ? + IMoneyModule money = scene.RequestModuleInterface(); + if (money != null) + { + // do the transaction, that is if the agent has got sufficient funds + if (!money.AmountCovered(remoteClient.AgentId, money.GroupCreationCharge)) { + remoteClient.SendCreateGroupReply(UUID.Zero, false, "Insufficient funds to create a group."); + return UUID.Zero; + } + money.ApplyCharge(remoteClient.AgentId, money.GroupCreationCharge, "Group Creation"); + } + string reason = string.Empty; + UUID groupID = m_groupData.CreateGroup(remoteClient.AgentId, name, charter, showInList, insigniaID, membershipFee, openEnrollment, + allowPublish, maturePublish, remoteClient.AgentId, out reason); + + if (groupID != UUID.Zero) + { + remoteClient.SendCreateGroupReply(groupID, true, "Group created successfullly"); + + // Update the founder with new group information. + SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient)); + } + else + remoteClient.SendCreateGroupReply(groupID, false, reason); + + return groupID; + } + + public GroupNoticeData[] GroupNoticesListRequest(IClientAPI remoteClient, UUID groupID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + // ToDo: check if agent is a member of group and is allowed to see notices? + + List notices = m_groupData.GetGroupNotices(GetRequestingAgentIDStr(remoteClient), groupID); + List os_notices = new List(); + foreach (ExtendedGroupNoticeData n in notices) + { + GroupNoticeData osn = n.ToGroupNoticeData(); + os_notices.Add(osn); + } + + return os_notices.ToArray(); + } + + /// + /// Get the title of the agent's current role. + /// + public string GetGroupTitle(UUID avatarID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + GroupMembershipData membership = m_groupData.GetAgentActiveMembership(UUID.Zero.ToString(), avatarID.ToString()); + if (membership != null) + { + return membership.GroupTitle; + } + return string.Empty; + } + + /// + /// Change the current Active Group Role for Agent + /// + public void GroupTitleUpdate(IClientAPI remoteClient, UUID groupID, UUID titleRoleID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + m_groupData.SetAgentActiveGroupRole(GetRequestingAgentIDStr(remoteClient), GetRequestingAgentIDStr(remoteClient), groupID, titleRoleID); + + // TODO: Not sure what all is needed here, but if the active group role change is for the group + // the client currently has set active, then we need to do a scene presence update too + // if (m_groupData.GetAgentActiveMembership(GetRequestingAgentID(remoteClient)).GroupID == GroupID) + + UpdateAllClientsWithGroupInfo(GetRequestingAgentID(remoteClient)); + } + + + public void GroupRoleUpdate(IClientAPI remoteClient, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, byte updateType) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + // Security Checks are handled in the Groups Service. + + switch ((OpenMetaverse.GroupRoleUpdate)updateType) + { + case OpenMetaverse.GroupRoleUpdate.Create: + string reason = string.Empty; + if (!m_groupData.AddGroupRole(GetRequestingAgentIDStr(remoteClient), groupID, UUID.Random(), name, description, title, powers, out reason)) + remoteClient.SendAgentAlertMessage("Unable to create role: " + reason, false); + break; + + case OpenMetaverse.GroupRoleUpdate.Delete: + m_groupData.RemoveGroupRole(GetRequestingAgentIDStr(remoteClient), groupID, roleID); + break; + + case OpenMetaverse.GroupRoleUpdate.UpdateAll: + case OpenMetaverse.GroupRoleUpdate.UpdateData: + case OpenMetaverse.GroupRoleUpdate.UpdatePowers: + if (m_debugEnabled) + { + GroupPowers gp = (GroupPowers)powers; + m_log.DebugFormat("[Groups]: Role ({0}) updated with Powers ({1}) ({2})", name, powers.ToString(), gp.ToString()); + } + m_groupData.UpdateGroupRole(GetRequestingAgentIDStr(remoteClient), groupID, roleID, name, description, title, powers); + break; + + case OpenMetaverse.GroupRoleUpdate.NoUpdate: + default: + // No Op + break; + + } + + // TODO: This update really should send out updates for everyone in the role that just got changed. + SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient)); + } + + public void GroupRoleChanges(IClientAPI remoteClient, UUID groupID, UUID roleID, UUID memberID, uint changes) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + // Todo: Security check + + switch (changes) + { + case 0: + // Add + m_groupData.AddAgentToGroupRole(GetRequestingAgentIDStr(remoteClient), memberID.ToString(), groupID, roleID); + + break; + case 1: + // Remove + m_groupData.RemoveAgentFromGroupRole(GetRequestingAgentIDStr(remoteClient), memberID.ToString(), groupID, roleID); + + break; + default: + m_log.ErrorFormat("[Groups]: {0} does not understand changes == {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, changes); + break; + } + + // TODO: This update really should send out updates for everyone in the role that just got changed. + SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient)); + } + + public void GroupNoticeRequest(IClientAPI remoteClient, UUID groupNoticeID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called for notice {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, groupNoticeID); + + //GroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), data.GroupID, null); + + GridInstantMessage msg = CreateGroupNoticeIM(remoteClient.AgentId, groupNoticeID, (byte)InstantMessageDialog.GroupNoticeRequested); + //GridInstantMessage msg = new GridInstantMessage(); + //msg.imSessionID = UUID.Zero.Guid; + //msg.fromAgentID = data.GroupID.Guid; + //msg.toAgentID = GetRequestingAgentID(remoteClient).Guid; + //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); + //msg.fromAgentName = "Group Notice : " + groupInfo == null ? "Unknown" : groupInfo.GroupName; + //msg.message = data.noticeData.Subject + "|" + data.Message; + //msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupNoticeRequested; + //msg.fromGroup = true; + //msg.offline = (byte)0; + //msg.ParentEstateID = 0; + //msg.Position = Vector3.Zero; + //msg.RegionID = UUID.Zero.Guid; + //msg.binaryBucket = data.BinaryBucket; + + OutgoingInstantMessage(msg, GetRequestingAgentID(remoteClient)); + } + + public GridInstantMessage CreateGroupNoticeIM(UUID agentID, UUID groupNoticeID, byte dialog) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + GridInstantMessage msg = new GridInstantMessage(); + byte[] bucket; + + msg.imSessionID = groupNoticeID.Guid; + msg.toAgentID = agentID.Guid; + msg.dialog = dialog; + // msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupNotice; + msg.fromGroup = true; + msg.offline = (byte)0; + msg.ParentEstateID = 0; + msg.Position = Vector3.Zero; + msg.RegionID = UUID.Zero.Guid; + + GroupNoticeInfo info = m_groupData.GetGroupNotice(agentID.ToString(), groupNoticeID); + if (info != null) + { + msg.fromAgentID = info.GroupID.Guid; + msg.timestamp = info.noticeData.Timestamp; + msg.fromAgentName = info.noticeData.FromName; + msg.message = info.noticeData.Subject + "|" + info.Message; + if (info.noticeData.HasAttachment) + { + byte[] name = System.Text.Encoding.UTF8.GetBytes(info.noticeData.AttachmentName); + bucket = new byte[19 + name.Length]; + bucket[0] = 1; // has attachment? + bucket[1] = info.noticeData.AttachmentType; // attachment type + name.CopyTo(bucket, 18); + } + else + { + bucket = new byte[19]; + bucket[0] = 0; // Has att? + bucket[1] = 0; // type + bucket[18] = 0; // null terminated + } + + info.GroupID.ToBytes(bucket, 2); + msg.binaryBucket = bucket; + } + else + { + m_log.DebugFormat("[Groups]: Group Notice {0} not found, composing empty message.", groupNoticeID); + msg.fromAgentID = UUID.Zero.Guid; + msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); ; + msg.fromAgentName = string.Empty; + msg.message = string.Empty; + msg.binaryBucket = new byte[0]; + } + + return msg; + } + + public void SendAgentGroupDataUpdate(IClientAPI remoteClient) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + // Send agent information about his groups + SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient)); + } + + public void JoinGroupRequest(IClientAPI remoteClient, UUID groupID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + string reason = string.Empty; + // Should check to see if OpenEnrollment, or if there's an outstanding invitation + if (m_groupData.AddAgentToGroup(GetRequestingAgentIDStr(remoteClient), GetRequestingAgentIDStr(remoteClient), groupID, UUID.Zero, string.Empty, out reason)) + { + + remoteClient.SendJoinGroupReply(groupID, true); + + // Should this send updates to everyone in the group? + SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient)); + } + else + remoteClient.SendJoinGroupReply(groupID, false); + } + + public void LeaveGroupRequest(IClientAPI remoteClient, UUID groupID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + m_groupData.RemoveAgentFromGroup(GetRequestingAgentIDStr(remoteClient), GetRequestingAgentIDStr(remoteClient), groupID); + + remoteClient.SendLeaveGroupReply(groupID, true); + + remoteClient.SendAgentDropGroup(groupID); + + // SL sends out notifcations to the group messaging session that the person has left + // Should this also update everyone who is in the group? + SendAgentGroupDataUpdate(remoteClient, GetRequestingAgentID(remoteClient)); + } + + public void EjectGroupMemberRequest(IClientAPI remoteClient, UUID groupID, UUID ejecteeID) + { + EjectGroupMember(remoteClient, GetRequestingAgentID(remoteClient), groupID, ejecteeID); + } + + public void EjectGroupMember(IClientAPI remoteClient, UUID agentID, UUID groupID, UUID ejecteeID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + // Todo: Security check? + m_groupData.RemoveAgentFromGroup(agentID.ToString(), ejecteeID.ToString(), groupID); + + string agentName; + RegionInfo regionInfo; + + // remoteClient provided or just agentID? + if (remoteClient != null) + { + agentName = remoteClient.Name; + regionInfo = remoteClient.Scene.RegionInfo; + remoteClient.SendEjectGroupMemberReply(agentID, groupID, true); + } + else + { + IClientAPI client = GetActiveClient(agentID); + + if (client != null) + { + agentName = client.Name; + regionInfo = client.Scene.RegionInfo; + client.SendEjectGroupMemberReply(agentID, groupID, true); + } + else + { + regionInfo = m_sceneList[0].RegionInfo; + UserAccount acc = m_sceneList[0].UserAccountService.GetUserAccount(regionInfo.ScopeID, agentID); + + if (acc != null) + { + agentName = acc.FirstName + " " + acc.LastName; + } + else + { + agentName = "Unknown member"; + } + } + } + + GroupRecord groupInfo = m_groupData.GetGroupRecord(agentID.ToString(), groupID, null); + + UserAccount account = m_sceneList[0].UserAccountService.GetUserAccount(regionInfo.ScopeID, ejecteeID); + if ((groupInfo == null) || (account == null)) + { + return; + } + + // Send Message to Ejectee + GridInstantMessage msg = new GridInstantMessage(); + + msg.imSessionID = UUID.Zero.Guid; + msg.fromAgentID = agentID.Guid; + // msg.fromAgentID = info.GroupID; + msg.toAgentID = ejecteeID.Guid; + //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); + msg.timestamp = 0; + msg.fromAgentName = agentName; + msg.message = string.Format("You have been ejected from '{1}' by {0}.", agentName, groupInfo.GroupName); + msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.MessageFromAgent; + msg.fromGroup = false; + msg.offline = (byte)0; + msg.ParentEstateID = 0; + msg.Position = Vector3.Zero; + msg.RegionID = regionInfo.RegionID.Guid; + msg.binaryBucket = new byte[0]; + OutgoingInstantMessage(msg, ejecteeID); + + // Message to ejector + // Interop, received special 210 code for ejecting a group member + // this only works within the comms servers domain, and won't work hypergrid + // TODO:FIXME: Use a presense server of some kind to find out where the + // client actually is, and try contacting that region directly to notify them, + // or provide the notification via xmlrpc update queue + + msg = new GridInstantMessage(); + msg.imSessionID = UUID.Zero.Guid; + msg.fromAgentID = agentID.Guid; + msg.toAgentID = agentID.Guid; + msg.timestamp = 0; + msg.fromAgentName = agentName; + if (account != null) + { + msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", agentName, groupInfo.GroupName, account.FirstName + " " + account.LastName); + } + else + { + msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", agentName, groupInfo.GroupName, "Unknown member"); + } + msg.dialog = (byte)210; //interop + msg.fromGroup = false; + msg.offline = (byte)0; + msg.ParentEstateID = 0; + msg.Position = Vector3.Zero; + msg.RegionID = regionInfo.RegionID.Guid; + msg.binaryBucket = new byte[0]; + OutgoingInstantMessage(msg, agentID); + + + // SL sends out messages to everyone in the group + // Who all should receive updates and what should they be updated with? + UpdateAllClientsWithGroupInfo(ejecteeID); + } + + public void InviteGroupRequest(IClientAPI remoteClient, UUID groupID, UUID invitedAgentID, UUID roleID) + { + InviteGroup(remoteClient, GetRequestingAgentID(remoteClient), groupID, invitedAgentID, roleID); + } + + public void InviteGroup(IClientAPI remoteClient, UUID agentID, UUID groupID, UUID invitedAgentID, UUID roleID) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + string agentName = m_UserManagement.GetUserName(agentID); + RegionInfo regionInfo = m_sceneList[0].RegionInfo; + + GroupRecord group = m_groupData.GetGroupRecord(agentID.ToString(), groupID, null); + if (group == null) + { + m_log.DebugFormat("[Groups]: No such group {0}", groupID); + return; + } + + // Todo: Security check, probably also want to send some kind of notification + UUID InviteID = UUID.Random(); + + if (m_groupData.AddAgentToGroupInvite(agentID.ToString(), InviteID, groupID, roleID, invitedAgentID.ToString())) + { + if (m_msgTransferModule != null) + { + Guid inviteUUID = InviteID.Guid; + + GridInstantMessage msg = new GridInstantMessage(); + + msg.imSessionID = inviteUUID; + + // msg.fromAgentID = agentID.Guid; + msg.fromAgentID = groupID.Guid; + msg.toAgentID = invitedAgentID.Guid; + //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); + msg.timestamp = 0; + msg.fromAgentName = agentName; + msg.message = string.Format("{0} has invited you to join a group called {1}. There is no cost to join this group.", agentName, group.GroupName); + msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupInvitation; + msg.fromGroup = true; + msg.offline = (byte)0; + msg.ParentEstateID = 0; + msg.Position = Vector3.Zero; + msg.RegionID = regionInfo.RegionID.Guid; + msg.binaryBucket = new byte[20]; + + OutgoingInstantMessage(msg, invitedAgentID); + } + } + } + + #endregion + + #region Client/Update Tools + + /// + /// Try to find an active IClientAPI reference for agentID giving preference to root connections + /// + private IClientAPI GetActiveClient(UUID agentID) + { + IClientAPI child = null; + + // Try root avatar first + foreach (Scene scene in m_sceneList) + { + ScenePresence sp = scene.GetScenePresence(agentID); + if (sp != null) + { + if (!sp.IsChildAgent) + { + return sp.ControllingClient; + } + else + { + child = sp.ControllingClient; + } + } + } + + // If we didn't find a root, then just return whichever child we found, or null if none + return child; + } + + /// + /// Send 'remoteClient' the group membership 'data' for agent 'dataForAgentID'. + /// + private void SendGroupMembershipInfoViaCaps(IClientAPI remoteClient, UUID dataForAgentID, GroupMembershipData[] data) + { + if (m_debugEnabled) m_log.InfoFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + OSDArray AgentData = new OSDArray(1); + OSDMap AgentDataMap = new OSDMap(1); + AgentDataMap.Add("AgentID", OSD.FromUUID(dataForAgentID)); + AgentData.Add(AgentDataMap); + + + OSDArray GroupData = new OSDArray(data.Length); + OSDArray NewGroupData = new OSDArray(data.Length); + + foreach (GroupMembershipData membership in data) + { + if (GetRequestingAgentID(remoteClient) != dataForAgentID) + { + if (!membership.ListInProfile) + { + // If we're sending group info to remoteclient about another agent, + // filter out groups the other agent doesn't want to share. + continue; + } + } + + OSDMap GroupDataMap = new OSDMap(6); + OSDMap NewGroupDataMap = new OSDMap(1); + + GroupDataMap.Add("GroupID", OSD.FromUUID(membership.GroupID)); + GroupDataMap.Add("GroupPowers", OSD.FromULong(membership.GroupPowers)); + GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(membership.AcceptNotices)); + GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(membership.GroupPicture)); + GroupDataMap.Add("Contribution", OSD.FromInteger(membership.Contribution)); + GroupDataMap.Add("GroupName", OSD.FromString(membership.GroupName)); + NewGroupDataMap.Add("ListInProfile", OSD.FromBoolean(membership.ListInProfile)); + + GroupData.Add(GroupDataMap); + NewGroupData.Add(NewGroupDataMap); + } + + OSDMap llDataStruct = new OSDMap(3); + llDataStruct.Add("AgentData", AgentData); + llDataStruct.Add("GroupData", GroupData); + llDataStruct.Add("NewGroupData", NewGroupData); + + if (m_debugEnabled) + { + m_log.InfoFormat("[Groups]: {0}", OSDParser.SerializeJsonString(llDataStruct)); + } + + IEventQueue queue = remoteClient.Scene.RequestModuleInterface(); + + if (queue != null) + { + queue.Enqueue(queue.BuildEvent("AgentGroupDataUpdate", llDataStruct), GetRequestingAgentID(remoteClient)); + } + + } + + private void SendScenePresenceUpdate(UUID AgentID, string Title) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: Updating scene title for {0} with title: {1}", AgentID, Title); + + ScenePresence presence = null; + + foreach (Scene scene in m_sceneList) + { + presence = scene.GetScenePresence(AgentID); + if (presence != null) + { + if (presence.Grouptitle != Title) + { + presence.Grouptitle = Title; + + if (! presence.IsChildAgent) + presence.SendAvatarDataToAllAgents(); + } + } + } + } + + /// + /// Send updates to all clients who might be interested in groups data for dataForClientID + /// + private void UpdateAllClientsWithGroupInfo(UUID dataForClientID) + { + if (m_debugEnabled) m_log.InfoFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + // TODO: Probably isn't nessesary to update every client in every scene. + // Need to examine client updates and do only what's nessesary. + lock (m_sceneList) + { + foreach (Scene scene in m_sceneList) + { + scene.ForEachClient(delegate(IClientAPI client) { SendAgentGroupDataUpdate(client, dataForClientID); }); + } + } + } + + /// + /// Update remoteClient with group information about dataForAgentID + /// + private void SendAgentGroupDataUpdate(IClientAPI remoteClient, UUID dataForAgentID) + { + if (m_debugEnabled) m_log.InfoFormat("[Groups]: {0} called for {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, remoteClient.Name); + + // TODO: All the client update functions need to be reexamined because most do too much and send too much stuff + + OnAgentDataUpdateRequest(remoteClient, dataForAgentID, UUID.Zero); + + // Need to send a group membership update to the client + // UDP version doesn't seem to behave nicely. But we're going to send it out here + // with an empty group membership to hopefully remove groups being displayed due + // to the core Groups Stub + //remoteClient.SendGroupMembership(new GroupMembershipData[0]); + + GroupMembershipData[] membershipArray = GetProfileListedGroupMemberships(remoteClient, dataForAgentID); + SendGroupMembershipInfoViaCaps(remoteClient, dataForAgentID, membershipArray); + //remoteClient.SendAvatarGroupsReply(dataForAgentID, membershipArray); + if (remoteClient.AgentId == dataForAgentID) + remoteClient.RefreshGroupMembership(); + } + + /// + /// Get a list of groups memberships for the agent that are marked "ListInProfile" + /// (unless that agent has a godLike aspect, in which case get all groups) + /// + /// + /// + private GroupMembershipData[] GetProfileListedGroupMemberships(IClientAPI requestingClient, UUID dataForAgentID) + { + List membershipData = m_groupData.GetAgentGroupMemberships(requestingClient.AgentId.ToString(), dataForAgentID.ToString()); + GroupMembershipData[] membershipArray; + + // cScene and property accessor 'isGod' are in support of the opertions to bypass 'hidden' group attributes for + // those with a GodLike aspect. + Scene cScene = (Scene)requestingClient.Scene; + bool isGod = cScene.Permissions.IsGod(requestingClient.AgentId); + + if (isGod) + { + membershipArray = membershipData.ToArray(); + } + else + { + if (requestingClient.AgentId != dataForAgentID) + { + Predicate showInProfile = delegate(GroupMembershipData membership) + { + return membership.ListInProfile; + }; + + membershipArray = membershipData.FindAll(showInProfile).ToArray(); + } + else + { + membershipArray = membershipData.ToArray(); + } + } + + if (m_debugEnabled) + { + m_log.InfoFormat("[Groups]: Get group membership information for {0} requested by {1}", dataForAgentID, requestingClient.AgentId); + foreach (GroupMembershipData membership in membershipArray) + { + m_log.InfoFormat("[Groups]: {0} :: {1} - {2} - {3}", dataForAgentID, membership.GroupName, membership.GroupTitle, membership.GroupPowers); + } + } + + return membershipArray; + } + + + private void SendAgentDataUpdate(IClientAPI remoteClient, UUID dataForAgentID, UUID activeGroupID, string activeGroupName, ulong activeGroupPowers, string activeGroupTitle) + { + if (m_debugEnabled) m_log.DebugFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + // TODO: All the client update functions need to be reexamined because most do too much and send too much stuff + UserAccount account = m_sceneList[0].UserAccountService.GetUserAccount(remoteClient.Scene.RegionInfo.ScopeID, dataForAgentID); + string firstname, lastname; + if (account != null) + { + firstname = account.FirstName; + lastname = account.LastName; + } + else + { + firstname = "Unknown"; + lastname = "Unknown"; + } + + remoteClient.SendAgentDataUpdate(dataForAgentID, activeGroupID, firstname, + lastname, activeGroupPowers, activeGroupName, + activeGroupTitle); + } + + #endregion + + #region IM Backed Processes + + private void OutgoingInstantMessage(GridInstantMessage msg, UUID msgTo) + { + if (m_debugEnabled) m_log.InfoFormat("[Groups]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); + + IClientAPI localClient = GetActiveClient(msgTo); + if (localClient != null) + { + if (m_debugEnabled) m_log.InfoFormat("[Groups]: MsgTo ({0}) is local, delivering directly", localClient.Name); + localClient.SendInstantMessage(msg); + } + else if (m_msgTransferModule != null) + { + if (m_debugEnabled) m_log.InfoFormat("[Groups]: MsgTo ({0}) is not local, delivering via TransferModule", msgTo); + m_msgTransferModule.SendInstantMessage(msg, delegate(bool success) { if (m_debugEnabled) m_log.DebugFormat("[Groups]: Message Sent: {0}", success?"Succeeded":"Failed"); }); + } + } + + public void NotifyChange(UUID groupID) + { + // Notify all group members of a chnge in group roles and/or + // permissions + // + } + + #endregion + + private string GetRequestingAgentIDStr(IClientAPI client) + { + return GetRequestingAgentID(client).ToString(); + } + + private UUID GetRequestingAgentID(IClientAPI client) + { + UUID requestingAgentID = UUID.Zero; + if (client != null) + { + requestingAgentID = client.AgentId; + } + return requestingAgentID; + } + + } + +} diff --git a/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnector.cs b/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnector.cs new file mode 100644 index 0000000000..59fec6fa38 --- /dev/null +++ b/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnector.cs @@ -0,0 +1,289 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +using OpenSim.Framework; +using OpenSim.Server.Base; + +using OpenMetaverse; +using log4net; + +namespace OpenSim.Groups +{ + public class GroupsServiceHGConnector + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private string m_ServerURI; + private object m_Lock = new object(); + + public GroupsServiceHGConnector(string url) + { + m_ServerURI = url; + if (!m_ServerURI.EndsWith("/")) + m_ServerURI += "/"; + + m_log.DebugFormat("[Groups.HGConnector]: Groups server at {0}", m_ServerURI); + } + + public bool CreateProxy(string RequestingAgentID, string AgentID, string accessToken, UUID groupID, string url, string name, out string reason) + { + reason = string.Empty; + + Dictionary sendData = new Dictionary(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["AgentID"] = AgentID.ToString(); + sendData["AccessToken"] = accessToken; + sendData["GroupID"] = groupID.ToString(); + sendData["Location"] = url; + sendData["Name"] = name; + Dictionary ret = MakeRequest("POSTGROUP", sendData); + + if (ret == null) + return false; + + if (!ret.ContainsKey("RESULT")) + return false; + + if (ret["RESULT"].ToString().ToLower() != "true") + { + reason = ret["REASON"].ToString(); + return false; + } + + return true; + + } + + public void RemoveAgentFromGroup(string AgentID, UUID GroupID, string token) + { + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID; + sendData["GroupID"] = GroupID.ToString(); + sendData["AccessToken"] = GroupsDataUtils.Sanitize(token); + MakeRequest("REMOVEAGENTFROMGROUP", sendData); + } + + public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string GroupName, string token) + { + if (GroupID == UUID.Zero && (GroupName == null || (GroupName != null && GroupName == string.Empty))) + return null; + + Dictionary sendData = new Dictionary(); + if (GroupID != UUID.Zero) + sendData["GroupID"] = GroupID.ToString(); + if (GroupName != null && GroupName != string.Empty) + sendData["Name"] = GroupsDataUtils.Sanitize(GroupName); + + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["AccessToken"] = GroupsDataUtils.Sanitize(token); + + Dictionary ret = MakeRequest("GETGROUP", sendData); + + if (ret == null) + return null; + + if (!ret.ContainsKey("RESULT")) + return null; + + if (ret["RESULT"].ToString() == "NULL") + return null; + + return GroupsDataUtils.GroupRecord((Dictionary)ret["RESULT"]); + } + + public List GetGroupMembers(string RequestingAgentID, UUID GroupID, string token) + { + List members = new List(); + + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["AccessToken"] = GroupsDataUtils.Sanitize(token); + Dictionary ret = MakeRequest("GETGROUPMEMBERS", sendData); + + if (ret == null) + return members; + + if (!ret.ContainsKey("RESULT")) + return members; + + if (ret["RESULT"].ToString() == "NULL") + return members; + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + ExtendedGroupMembersData m = GroupsDataUtils.GroupMembersData((Dictionary)v); + members.Add(m); + } + + return members; + } + + public List GetGroupRoles(string RequestingAgentID, UUID GroupID, string token) + { + List roles = new List(); + + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["AccessToken"] = GroupsDataUtils.Sanitize(token); + Dictionary ret = MakeRequest("GETGROUPROLES", sendData); + + if (ret == null) + return roles; + + if (!ret.ContainsKey("RESULT")) + return roles; + + if (ret["RESULT"].ToString() == "NULL") + return roles; + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + GroupRolesData m = GroupsDataUtils.GroupRolesData((Dictionary)v); + roles.Add(m); + } + + return roles; + } + + public List GetGroupRoleMembers(string RequestingAgentID, UUID GroupID, string token) + { + List rmembers = new List(); + + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["AccessToken"] = GroupsDataUtils.Sanitize(token); + Dictionary ret = MakeRequest("GETROLEMEMBERS", sendData); + + if (ret == null) + return rmembers; + + if (!ret.ContainsKey("RESULT")) + return rmembers; + + if (ret["RESULT"].ToString() == "NULL") + return rmembers; + + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + ExtendedGroupRoleMembersData m = GroupsDataUtils.GroupRoleMembersData((Dictionary)v); + rmembers.Add(m); + } + + return rmembers; + } + + public bool AddNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, + bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) + { + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = groupID.ToString(); + sendData["NoticeID"] = noticeID.ToString(); + sendData["FromName"] = GroupsDataUtils.Sanitize(fromName); + sendData["Subject"] = GroupsDataUtils.Sanitize(subject); + sendData["Message"] = GroupsDataUtils.Sanitize(message); + sendData["HasAttachment"] = hasAttachment.ToString(); + if (hasAttachment) + { + sendData["AttachmentType"] = attType.ToString(); + sendData["AttachmentName"] = attName.ToString(); + sendData["AttachmentItemID"] = attItemID.ToString(); + sendData["AttachmentOwnerID"] = attOwnerID; + } + sendData["RequestingAgentID"] = RequestingAgentID; + + Dictionary ret = MakeRequest("ADDNOTICE", sendData); + + if (ret == null) + return false; + + if (!ret.ContainsKey("RESULT")) + return false; + + if (ret["RESULT"].ToString().ToLower() != "true") + return false; + + return true; + } + + public bool VerifyNotice(UUID noticeID, UUID groupID) + { + Dictionary sendData = new Dictionary(); + sendData["NoticeID"] = noticeID.ToString(); + sendData["GroupID"] = groupID.ToString(); + Dictionary ret = MakeRequest("VERIFYNOTICE", sendData); + + if (ret == null) + return false; + + if (!ret.ContainsKey("RESULT")) + return false; + + if (ret["RESULT"].ToString().ToLower() != "true") + return false; + + return true; + } + + // + // + // + // + // + + #region Make Request + + private Dictionary MakeRequest(string method, Dictionary sendData) + { + sendData["METHOD"] = method; + + string reply = string.Empty; + lock (m_Lock) + reply = SynchronousRestFormsRequester.MakeRequest("POST", + m_ServerURI + "hg-groups", + ServerUtils.BuildQueryString(sendData)); + + //m_log.DebugFormat("[XXX]: reply was {0}", reply); + + if (reply == string.Empty || reply == null) + return null; + + Dictionary replyData = ServerUtils.ParseXmlResponse( + reply); + + return replyData; + } + #endregion + + } +} diff --git a/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnectorModule.cs b/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnectorModule.cs new file mode 100644 index 0000000000..f670272662 --- /dev/null +++ b/OpenSim/Addons/Groups/Hypergrid/GroupsServiceHGConnectorModule.cs @@ -0,0 +1,717 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +using OpenSim.Framework; +using OpenSim.Framework.Servers; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Services.Interfaces; + +using OpenMetaverse; +using Mono.Addins; +using log4net; +using Nini.Config; + +namespace OpenSim.Groups +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GroupsServiceHGConnectorModule")] + public class GroupsServiceHGConnectorModule : ISharedRegionModule, IGroupsServicesConnector + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private bool m_Enabled = false; + private IGroupsServicesConnector m_LocalGroupsConnector; + private string m_LocalGroupsServiceLocation; + private IUserManagement m_UserManagement; + private IOfflineIMService m_OfflineIM; + private IMessageTransferModule m_Messaging; + private List m_Scenes; + private ForeignImporter m_ForeignImporter; + private string m_ServiceLocation; + private IConfigSource m_Config; + + private Dictionary m_NetworkConnectors = new Dictionary(); + private RemoteConnectorCacheWrapper m_CacheWrapper; // for caching info of external group services + + #region ISharedRegionModule + + public void Initialise(IConfigSource config) + { + IConfig groupsConfig = config.Configs["Groups"]; + if (groupsConfig == null) + return; + + if ((groupsConfig.GetBoolean("Enabled", false) == false) + || (groupsConfig.GetString("ServicesConnectorModule", string.Empty) != Name)) + { + return; + } + + m_Config = config; + m_ServiceLocation = groupsConfig.GetString("LocalService", "local"); // local or remote + m_LocalGroupsServiceLocation = groupsConfig.GetString("GroupsExternalURI", "http://127.0.0.1"); + m_Scenes = new List(); + + m_Enabled = true; + + m_log.DebugFormat("[Groups]: Initializing {0} with LocalService {1}", this.Name, m_ServiceLocation); + } + + public string Name + { + get { return "Groups HG Service Connector"; } + } + + public Type ReplaceableInterface + { + get { return null; } + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + m_log.DebugFormat("[Groups]: Registering {0} with {1}", this.Name, scene.RegionInfo.RegionName); + scene.RegisterModuleInterface(this); + m_Scenes.Add(scene); + + scene.EventManager.OnNewClient += OnNewClient; + } + + public void RemoveRegion(Scene scene) + { + if (!m_Enabled) + return; + + scene.UnregisterModuleInterface(this); + m_Scenes.Remove(scene); + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + + if (m_UserManagement == null) + { + m_UserManagement = scene.RequestModuleInterface(); + m_OfflineIM = scene.RequestModuleInterface(); + m_Messaging = scene.RequestModuleInterface(); + m_ForeignImporter = new ForeignImporter(m_UserManagement); + + if (m_ServiceLocation.Equals("local")) + { + m_LocalGroupsConnector = new GroupsServiceLocalConnectorModule(m_Config, m_UserManagement); + // Also, if local, create the endpoint for the HGGroupsService + new HGGroupsServiceRobustConnector(m_Config, MainServer.Instance, string.Empty, + scene.RequestModuleInterface(), scene.RequestModuleInterface()); + + } + else + m_LocalGroupsConnector = new GroupsServiceRemoteConnectorModule(m_Config, m_UserManagement); + + m_CacheWrapper = new RemoteConnectorCacheWrapper(m_UserManagement); + } + + } + + public void PostInitialise() + { + } + + public void Close() + { + } + + #endregion + + private void OnNewClient(IClientAPI client) + { + client.OnCompleteMovementToRegion += OnCompleteMovementToRegion; + } + + void OnCompleteMovementToRegion(IClientAPI client, bool arg2) + { + object sp = null; + if (client.Scene.TryGetScenePresence(client.AgentId, out sp)) + { + if (sp is ScenePresence && ((ScenePresence)sp).PresenceType != PresenceType.Npc) + { + AgentCircuitData aCircuit = ((ScenePresence)sp).Scene.AuthenticateHandler.GetAgentCircuitData(client.AgentId); + if (aCircuit != null && (aCircuit.teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0 && + m_OfflineIM != null && m_Messaging != null) + { + List ims = m_OfflineIM.GetMessages(aCircuit.AgentID); + if (ims != null && ims.Count > 0) + foreach (GridInstantMessage im in ims) + m_Messaging.SendInstantMessage(im, delegate(bool success) { }); + } + } + } + } + + #region IGroupsServicesConnector + + public UUID CreateGroup(UUID RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, + bool allowPublish, bool maturePublish, UUID founderID, out string reason) + { + m_log.DebugFormat("[Groups]: Creating group {0}", name); + reason = string.Empty; + if (m_UserManagement.IsLocalGridUser(RequestingAgentID)) + return m_LocalGroupsConnector.CreateGroup(RequestingAgentID, name, charter, showInList, insigniaID, + membershipFee, openEnrollment, allowPublish, maturePublish, founderID, out reason); + else + { + reason = "Only local grid users are allowed to create a new group"; + return UUID.Zero; + } + } + + public bool UpdateGroup(string RequestingAgentID, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, + bool openEnrollment, bool allowPublish, bool maturePublish, out string reason) + { + reason = string.Empty; + string url = string.Empty; + string name = string.Empty; + if (IsLocal(groupID, out url, out name)) + return m_LocalGroupsConnector.UpdateGroup(AgentUUI(RequestingAgentID), groupID, charter, showInList, insigniaID, membershipFee, + openEnrollment, allowPublish, maturePublish, out reason); + else + { + reason = "Changes to remote group not allowed. Please go to the group's original world."; + return false; + } + } + + public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string GroupName) + { + string url = string.Empty; + string name = string.Empty; + if (IsLocal(GroupID, out url, out name)) + return m_LocalGroupsConnector.GetGroupRecord(AgentUUI(RequestingAgentID), GroupID, GroupName); + else if (url != string.Empty) + { + ExtendedGroupMembershipData membership = m_LocalGroupsConnector.GetAgentGroupMembership(RequestingAgentID, RequestingAgentID, GroupID); + string accessToken = string.Empty; + if (membership != null) + accessToken = membership.AccessToken; + else + return null; + + GroupsServiceHGConnector c = GetConnector(url); + if (c != null) + { + ExtendedGroupRecord grec = m_CacheWrapper.GetGroupRecord(RequestingAgentID, GroupID, GroupName, delegate + { + return c.GetGroupRecord(AgentUUIForOutside(RequestingAgentID), GroupID, GroupName, accessToken); + }); + + if (grec != null) + ImportForeigner(grec.FounderUUI); + return grec; + } + } + + return null; + } + + public List FindGroups(string RequestingAgentID, string search) + { + return m_LocalGroupsConnector.FindGroups(AgentUUI(RequestingAgentID), search); + } + + public List GetGroupMembers(string RequestingAgentID, UUID GroupID) + { + string url = string.Empty, gname = string.Empty; + if (IsLocal(GroupID, out url, out gname)) + return m_LocalGroupsConnector.GetGroupMembers(AgentUUI(RequestingAgentID), GroupID); + else if (!string.IsNullOrEmpty(url)) + { + ExtendedGroupMembershipData membership = m_LocalGroupsConnector.GetAgentGroupMembership(RequestingAgentID, RequestingAgentID, GroupID); + string accessToken = string.Empty; + if (membership != null) + accessToken = membership.AccessToken; + else + return null; + + GroupsServiceHGConnector c = GetConnector(url); + if (c != null) + { + return m_CacheWrapper.GetGroupMembers(RequestingAgentID, GroupID, delegate + { + return c.GetGroupMembers(AgentUUIForOutside(RequestingAgentID), GroupID, accessToken); + }); + + } + } + return new List(); + } + + public bool AddGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, out string reason) + { + reason = string.Empty; + string url = string.Empty, gname = string.Empty; + + if (IsLocal(groupID, out url, out gname)) + return m_LocalGroupsConnector.AddGroupRole(AgentUUI(RequestingAgentID), groupID, roleID, name, description, title, powers, out reason); + else + { + reason = "Operation not allowed outside this group's origin world."; + return false; + } + } + + public bool UpdateGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(groupID, out url, out gname)) + return m_LocalGroupsConnector.UpdateGroupRole(AgentUUI(RequestingAgentID), groupID, roleID, name, description, title, powers); + else + { + return false; + } + + } + + public void RemoveGroupRole(string RequestingAgentID, UUID groupID, UUID roleID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(groupID, out url, out gname)) + m_LocalGroupsConnector.RemoveGroupRole(AgentUUI(RequestingAgentID), groupID, roleID); + else + { + return; + } + } + + public List GetGroupRoles(string RequestingAgentID, UUID groupID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(groupID, out url, out gname)) + return m_LocalGroupsConnector.GetGroupRoles(AgentUUI(RequestingAgentID), groupID); + else if (!string.IsNullOrEmpty(url)) + { + ExtendedGroupMembershipData membership = m_LocalGroupsConnector.GetAgentGroupMembership(RequestingAgentID, RequestingAgentID, groupID); + string accessToken = string.Empty; + if (membership != null) + accessToken = membership.AccessToken; + else + return null; + + GroupsServiceHGConnector c = GetConnector(url); + if (c != null) + { + return m_CacheWrapper.GetGroupRoles(RequestingAgentID, groupID, delegate + { + return c.GetGroupRoles(AgentUUIForOutside(RequestingAgentID), groupID, accessToken); + }); + + } + } + + return new List(); + } + + public List GetGroupRoleMembers(string RequestingAgentID, UUID groupID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(groupID, out url, out gname)) + return m_LocalGroupsConnector.GetGroupRoleMembers(AgentUUI(RequestingAgentID), groupID); + else if (!string.IsNullOrEmpty(url)) + { + ExtendedGroupMembershipData membership = m_LocalGroupsConnector.GetAgentGroupMembership(RequestingAgentID, RequestingAgentID, groupID); + string accessToken = string.Empty; + if (membership != null) + accessToken = membership.AccessToken; + else + return null; + + GroupsServiceHGConnector c = GetConnector(url); + if (c != null) + { + return m_CacheWrapper.GetGroupRoleMembers(RequestingAgentID, groupID, delegate + { + return c.GetGroupRoleMembers(AgentUUIForOutside(RequestingAgentID), groupID, accessToken); + }); + + } + } + + return new List(); + } + + public bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason) + { + string url = string.Empty; + string name = string.Empty; + reason = string.Empty; + + UUID uid = new UUID(AgentID); + if (IsLocal(GroupID, out url, out name)) + { + if (m_UserManagement.IsLocalGridUser(uid)) // local user + { + // normal case: local group, local user + return m_LocalGroupsConnector.AddAgentToGroup(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID, RoleID, token, out reason); + } + else // local group, foreign user + { + // the user is accepting the invitation, or joining, where the group resides + token = UUID.Random().ToString(); + bool success = m_LocalGroupsConnector.AddAgentToGroup(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID, RoleID, token, out reason); + + if (success) + { + url = m_UserManagement.GetUserServerURL(uid, "GroupsServerURI"); + if (url == string.Empty) + { + reason = "User doesn't have a groups server"; + return false; + } + + GroupsServiceHGConnector c = GetConnector(url); + if (c != null) + return c.CreateProxy(AgentUUI(RequestingAgentID), AgentID, token, GroupID, m_LocalGroupsServiceLocation, name, out reason); + } + } + } + else if (m_UserManagement.IsLocalGridUser(uid)) // local user + { + // foreign group, local user. She's been added already by the HG service. + // Let's just check + if (m_LocalGroupsConnector.GetAgentGroupMembership(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID) != null) + return true; + } + + reason = "Operation not allowed outside this group's origin world"; + return false; + } + + + public void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + string url = string.Empty, name = string.Empty; + if (!IsLocal(GroupID, out url, out name) && url != string.Empty) + { + ExtendedGroupMembershipData membership = m_LocalGroupsConnector.GetAgentGroupMembership(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID); + if (membership != null) + { + GroupsServiceHGConnector c = GetConnector(url); + if (c != null) + c.RemoveAgentFromGroup(AgentUUIForOutside(AgentID), GroupID, membership.AccessToken); + } + } + + // remove from local service + m_LocalGroupsConnector.RemoveAgentFromGroup(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID); + } + + public bool AddAgentToGroupInvite(string RequestingAgentID, UUID inviteID, UUID groupID, UUID roleID, string agentID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(groupID, out url, out gname)) + return m_LocalGroupsConnector.AddAgentToGroupInvite(AgentUUI(RequestingAgentID), inviteID, groupID, roleID, AgentUUI(agentID)); + else + return false; + } + + public GroupInviteInfo GetAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + return m_LocalGroupsConnector.GetAgentToGroupInvite(AgentUUI(RequestingAgentID), inviteID); ; + } + + public void RemoveAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + m_LocalGroupsConnector.RemoveAgentToGroupInvite(AgentUUI(RequestingAgentID), inviteID); + } + + public void AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(GroupID, out url, out gname)) + m_LocalGroupsConnector.AddAgentToGroupRole(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID, RoleID); + + } + + public void RemoveAgentFromGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(GroupID, out url, out gname)) + m_LocalGroupsConnector.RemoveAgentFromGroupRole(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID, RoleID); + } + + public List GetAgentGroupRoles(string RequestingAgentID, string AgentID, UUID GroupID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(GroupID, out url, out gname)) + return m_LocalGroupsConnector.GetAgentGroupRoles(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID); + else + return new List(); + } + + public void SetAgentActiveGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(GroupID, out url, out gname)) + m_LocalGroupsConnector.SetAgentActiveGroup(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID); + } + + public ExtendedGroupMembershipData GetAgentActiveMembership(string RequestingAgentID, string AgentID) + { + return m_LocalGroupsConnector.GetAgentActiveMembership(AgentUUI(RequestingAgentID), AgentUUI(AgentID)); + } + + public void SetAgentActiveGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(GroupID, out url, out gname)) + m_LocalGroupsConnector.SetAgentActiveGroupRole(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID, RoleID); + } + + public void UpdateMembership(string RequestingAgentID, string AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile) + { + m_LocalGroupsConnector.UpdateMembership(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID, AcceptNotices, ListInProfile); + } + + public ExtendedGroupMembershipData GetAgentGroupMembership(string RequestingAgentID, string AgentID, UUID GroupID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(GroupID, out url, out gname)) + return m_LocalGroupsConnector.GetAgentGroupMembership(AgentUUI(RequestingAgentID), AgentUUI(AgentID), GroupID); + else + return null; + } + + public List GetAgentGroupMemberships(string RequestingAgentID, string AgentID) + { + return m_LocalGroupsConnector.GetAgentGroupMemberships(AgentUUI(RequestingAgentID), AgentUUI(AgentID)); + } + + public bool AddGroupNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, + bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) + { + string url = string.Empty, gname = string.Empty; + + if (IsLocal(groupID, out url, out gname)) + { + if (m_LocalGroupsConnector.AddGroupNotice(AgentUUI(RequestingAgentID), groupID, noticeID, fromName, subject, message, + hasAttachment, attType, attName, attItemID, AgentUUI(attOwnerID))) + { + // then send the notice to every grid for which there are members in this group + List members = m_LocalGroupsConnector.GetGroupMembers(AgentUUI(RequestingAgentID), groupID); + List urls = new List(); + foreach (GroupMembersData m in members) + { + UUID userID = UUID.Zero; + if (!m_UserManagement.IsLocalGridUser(m.AgentID)) + { + string gURL = m_UserManagement.GetUserServerURL(m.AgentID, "GroupsServerURI"); + if (!urls.Contains(gURL)) + urls.Add(gURL); + } + } + + // so we have the list of urls to send the notice to + // this may take a long time... + Util.FireAndForget(delegate + { + foreach (string u in urls) + { + GroupsServiceHGConnector c = GetConnector(u); + if (c != null) + { + c.AddNotice(AgentUUIForOutside(RequestingAgentID), groupID, noticeID, fromName, subject, message, + hasAttachment, attType, attName, attItemID, AgentUUIForOutside(attOwnerID)); + } + } + }); + + return true; + } + + return false; + } + else + return false; + } + + public GroupNoticeInfo GetGroupNotice(string RequestingAgentID, UUID noticeID) + { + GroupNoticeInfo notice = m_LocalGroupsConnector.GetGroupNotice(AgentUUI(RequestingAgentID), noticeID); + + if (notice != null && notice.noticeData.HasAttachment && notice.noticeData.AttachmentOwnerID != null) + ImportForeigner(notice.noticeData.AttachmentOwnerID); + + return notice; + } + + public List GetGroupNotices(string RequestingAgentID, UUID GroupID) + { + return m_LocalGroupsConnector.GetGroupNotices(AgentUUI(RequestingAgentID), GroupID); + } + + public void ResetAgentGroupChatSessions(string agentID) + { + } + + public bool hasAgentBeenInvitedToGroupChatSession(string agentID, UUID groupID) + { + return false; + } + + public bool hasAgentDroppedGroupChatSession(string agentID, UUID groupID) + { + return false; + } + + public void AgentDroppedFromGroupChatSession(string agentID, UUID groupID) + { + } + + public void AgentInvitedToGroupChatSession(string agentID, UUID groupID) + { + } + + #endregion + + #region hypergrid groups + + private string AgentUUI(string AgentIDStr) + { + UUID AgentID = UUID.Zero; + try + { + AgentID = new UUID(AgentIDStr); + } + catch (FormatException) + { + return AgentID.ToString(); + } + + if (m_UserManagement.IsLocalGridUser(AgentID)) + return AgentID.ToString(); + + AgentCircuitData agent = null; + foreach (Scene scene in m_Scenes) + { + agent = scene.AuthenticateHandler.GetAgentCircuitData(AgentID); + if (agent != null) + break; + } + if (agent == null) // oops + return AgentID.ToString(); + + return Util.ProduceUserUniversalIdentifier(agent); + } + + private string AgentUUIForOutside(string AgentIDStr) + { + UUID AgentID = UUID.Zero; + try + { + AgentID = new UUID(AgentIDStr); + } + catch (FormatException) + { + return AgentID.ToString(); + } + + AgentCircuitData agent = null; + foreach (Scene scene in m_Scenes) + { + agent = scene.AuthenticateHandler.GetAgentCircuitData(AgentID); + if (agent != null) + break; + } + if (agent == null) // oops + return AgentID.ToString(); + + return Util.ProduceUserUniversalIdentifier(agent); + } + + private UUID ImportForeigner(string uID) + { + UUID userID = UUID.Zero; + string url = string.Empty, first = string.Empty, last = string.Empty, tmp = string.Empty; + if (Util.ParseUniversalUserIdentifier(uID, out userID, out url, out first, out last, out tmp)) + m_UserManagement.AddUser(userID, first, last, url); + + return userID; + } + + private bool IsLocal(UUID groupID, out string serviceLocation, out string name) + { + serviceLocation = string.Empty; + name = string.Empty; + ExtendedGroupRecord group = m_LocalGroupsConnector.GetGroupRecord(UUID.Zero.ToString(), groupID, string.Empty); + if (group == null) + { + //m_log.DebugFormat("[XXX]: IsLocal? group {0} not found -- no.", groupID); + return false; + } + + serviceLocation = group.ServiceLocation; + name = group.GroupName; + bool isLocal = (group.ServiceLocation == string.Empty); + //m_log.DebugFormat("[XXX]: IsLocal? {0}", isLocal); + return isLocal; + } + + private GroupsServiceHGConnector GetConnector(string url) + { + lock (m_NetworkConnectors) + { + if (m_NetworkConnectors.ContainsKey(url)) + return m_NetworkConnectors[url]; + + GroupsServiceHGConnector c = new GroupsServiceHGConnector(url); + m_NetworkConnectors[url] = c; + } + + return m_NetworkConnectors[url]; + } + #endregion + } +} diff --git a/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs b/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs new file mode 100644 index 0000000000..92dd85cd1d --- /dev/null +++ b/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs @@ -0,0 +1,443 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Reflection; +using System.Text; +using System.Xml; +using System.Collections.Generic; +using System.IO; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Server.Base; +using OpenSim.Services.Interfaces; +using OpenSim.Framework.Servers.HttpServer; +using OpenSim.Server.Handlers.Base; +using log4net; +using OpenMetaverse; + +namespace OpenSim.Groups +{ + public class HGGroupsServiceRobustConnector : ServiceConnector + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private HGGroupsService m_GroupsService; + private string m_HomeURI = string.Empty; + private string m_ConfigName = "Groups"; + + // Called by Robust shell + public HGGroupsServiceRobustConnector(IConfigSource config, IHttpServer server, string configName) : + this(config, server, configName, null, null) + { + } + + // Called by the sim-bound module + public HGGroupsServiceRobustConnector(IConfigSource config, IHttpServer server, string configName, IOfflineIMService im, IUserAccountService users) : + base(config, server, configName) + { + if (configName != String.Empty) + m_ConfigName = configName; + + m_log.DebugFormat("[Groups.RobustHGConnector]: Starting with config name {0}", m_ConfigName); + + IConfig cnf = config.Configs[m_ConfigName]; + if (cnf == null) + throw new Exception(String.Format("[Groups.RobustHGConnector]: {0} section does not exist", m_ConfigName)); + + string homeURI = cnf.GetString("HomeURI", string.Empty); + if (homeURI == string.Empty) + throw new Exception(String.Format("[Groups.RobustHGConnector]: please provide the HomeURI in section {0}", m_ConfigName)); + + if (im == null) + { + string imDll = cnf.GetString("OfflineIMService", string.Empty); + if (imDll == string.Empty) + throw new Exception(String.Format("[Groups.RobustHGConnector]: please provide OfflineIMService in section {0}", m_ConfigName)); + + Object[] args = new Object[] { config }; + im = ServerUtils.LoadPlugin(imDll, args); + } + + if (users == null) + { + string usersDll = cnf.GetString("UserAccountService", string.Empty); + if (usersDll == string.Empty) + throw new Exception(String.Format("[Groups.RobustHGConnector]: please provide UserAccountService in section {0}", m_ConfigName)); + + Object[] args = new Object[] { config }; + users = ServerUtils.LoadPlugin(usersDll, args); + } + + m_GroupsService = new HGGroupsService(config, im, users, homeURI); + + server.AddStreamHandler(new HGGroupsServicePostHandler(m_GroupsService)); + } + + } + + public class HGGroupsServicePostHandler : BaseStreamHandler + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private HGGroupsService m_GroupsService; + + public HGGroupsServicePostHandler(HGGroupsService service) : + base("POST", "/hg-groups") + { + m_GroupsService = service; + } + + public override byte[] Handle(string path, Stream requestData, + IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) + { + StreamReader sr = new StreamReader(requestData); + string body = sr.ReadToEnd(); + sr.Close(); + body = body.Trim(); + + //m_log.DebugFormat("[XXX]: query String: {0}", body); + + try + { + Dictionary request = + ServerUtils.ParseQueryString(body); + + if (!request.ContainsKey("METHOD")) + return FailureResult(); + + string method = request["METHOD"].ToString(); + request.Remove("METHOD"); + + m_log.DebugFormat("[Groups.RobustHGConnector]: {0}", method); + switch (method) + { + case "POSTGROUP": + return HandleAddGroupProxy(request); + case "REMOVEAGENTFROMGROUP": + return HandleRemoveAgentFromGroup(request); + case "GETGROUP": + return HandleGetGroup(request); + case "ADDNOTICE": + return HandleAddNotice(request); + case "VERIFYNOTICE": + return HandleVerifyNotice(request); + case "GETGROUPMEMBERS": + return HandleGetGroupMembers(request); + case "GETGROUPROLES": + return HandleGetGroupRoles(request); + case "GETROLEMEMBERS": + return HandleGetRoleMembers(request); + + } + m_log.DebugFormat("[Groups.RobustHGConnector]: unknown method request: {0}", method); + } + catch (Exception e) + { + m_log.DebugFormat("[Groups.RobustHGConnector]: Exception {0}", e.StackTrace); + } + + return FailureResult(); + } + + byte[] HandleAddGroupProxy(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") + || !request.ContainsKey("AgentID") + || !request.ContainsKey("AccessToken") || !request.ContainsKey("Location")) + NullResult(result, "Bad network data"); + + else + { + string RequestingAgentID = request["RequestingAgentID"].ToString(); + string agentID = request["AgentID"].ToString(); + UUID groupID = new UUID(request["GroupID"].ToString()); + string accessToken = request["AccessToken"].ToString(); + string location = request["Location"].ToString(); + string name = string.Empty; + if (request.ContainsKey("Name")) + name = request["Name"].ToString(); + + string reason = string.Empty; + bool success = m_GroupsService.CreateGroupProxy(RequestingAgentID, agentID, accessToken, groupID, location, name, out reason); + result["REASON"] = reason; + result["RESULT"] = success.ToString(); + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleRemoveAgentFromGroup(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("AccessToken") || !request.ContainsKey("AgentID") || + !request.ContainsKey("GroupID")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + string agentID = request["AgentID"].ToString(); + string token = request["AccessToken"].ToString(); + string reason = string.Empty; + + m_GroupsService.RemoveAgentFromGroup(agentID, agentID, groupID, token); + } + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + result["RESULT"] = "true"; + return Util.UTF8NoBomEncoding.GetBytes(ServerUtils.BuildXmlResponse(result)); + } + + byte[] HandleGetGroup(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("AccessToken")) + NullResult(result, "Bad network data"); + else + { + string RequestingAgentID = request["RequestingAgentID"].ToString(); + string token = request["AccessToken"].ToString(); + + UUID groupID = UUID.Zero; + string groupName = string.Empty; + + if (request.ContainsKey("GroupID")) + groupID = new UUID(request["GroupID"].ToString()); + if (request.ContainsKey("Name")) + groupName = request["Name"].ToString(); + + ExtendedGroupRecord grec = m_GroupsService.GetGroupRecord(RequestingAgentID, groupID, groupName, token); + if (grec == null) + NullResult(result, "Group not found"); + else + result["RESULT"] = GroupsDataUtils.GroupRecord(grec); + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleGetGroupMembers(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || !request.ContainsKey("AccessToken")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + string requestingAgentID = request["RequestingAgentID"].ToString(); + string token = request["AccessToken"].ToString(); + + List members = m_GroupsService.GetGroupMembers(requestingAgentID, groupID, token); + if (members == null || (members != null && members.Count == 0)) + { + NullResult(result, "No members"); + } + else + { + Dictionary dict = new Dictionary(); + int i = 0; + foreach (ExtendedGroupMembersData m in members) + { + dict["m-" + i++] = GroupsDataUtils.GroupMembersData(m); + } + + result["RESULT"] = dict; + } + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleGetGroupRoles(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || !request.ContainsKey("AccessToken")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + string requestingAgentID = request["RequestingAgentID"].ToString(); + string token = request["AccessToken"].ToString(); + + List roles = m_GroupsService.GetGroupRoles(requestingAgentID, groupID, token); + if (roles == null || (roles != null && roles.Count == 0)) + { + NullResult(result, "No members"); + } + else + { + Dictionary dict = new Dictionary(); + int i = 0; + foreach (GroupRolesData r in roles) + dict["r-" + i++] = GroupsDataUtils.GroupRolesData(r); + + result["RESULT"] = dict; + } + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleGetRoleMembers(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || !request.ContainsKey("AccessToken")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + string requestingAgentID = request["RequestingAgentID"].ToString(); + string token = request["AccessToken"].ToString(); + + List rmembers = m_GroupsService.GetGroupRoleMembers(requestingAgentID, groupID, token); + if (rmembers == null || (rmembers != null && rmembers.Count == 0)) + { + NullResult(result, "No members"); + } + else + { + Dictionary dict = new Dictionary(); + int i = 0; + foreach (ExtendedGroupRoleMembersData rm in rmembers) + dict["rm-" + i++] = GroupsDataUtils.GroupRoleMembersData(rm); + + result["RESULT"] = dict; + } + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleAddNotice(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || !request.ContainsKey("NoticeID") || + !request.ContainsKey("FromName") || !request.ContainsKey("Subject") || !request.ContainsKey("Message") || + !request.ContainsKey("HasAttachment")) + NullResult(result, "Bad network data"); + + else + { + + bool hasAtt = bool.Parse(request["HasAttachment"].ToString()); + byte attType = 0; + string attName = string.Empty; + string attOwner = string.Empty; + UUID attItem = UUID.Zero; + if (request.ContainsKey("AttachmentType")) + attType = byte.Parse(request["AttachmentType"].ToString()); + if (request.ContainsKey("AttachmentName")) + attName = request["AttachmentType"].ToString(); + if (request.ContainsKey("AttachmentItemID")) + attItem = new UUID(request["AttachmentItemID"].ToString()); + if (request.ContainsKey("AttachmentOwnerID")) + attOwner = request["AttachmentOwnerID"].ToString(); + + bool success = m_GroupsService.AddNotice(request["RequestingAgentID"].ToString(), new UUID(request["GroupID"].ToString()), + new UUID(request["NoticeID"].ToString()), request["FromName"].ToString(), request["Subject"].ToString(), + request["Message"].ToString(), hasAtt, attType, attName, attItem, attOwner); + + result["RESULT"] = success.ToString(); + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleVerifyNotice(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("NoticeID") || !request.ContainsKey("GroupID")) + NullResult(result, "Bad network data"); + + else + { + UUID noticeID = new UUID(request["NoticeID"].ToString()); + UUID groupID = new UUID(request["GroupID"].ToString()); + + bool success = m_GroupsService.VerifyNotice(noticeID, groupID); + //m_log.DebugFormat("[XXX]: VerifyNotice returned {0}", success); + result["RESULT"] = success.ToString(); + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + // + // + // + // + // + + #region Helpers + + private void NullResult(Dictionary result, string reason) + { + result["RESULT"] = "NULL"; + result["REASON"] = reason; + } + + private byte[] FailureResult() + { + Dictionary result = new Dictionary(); + NullResult(result, "Unknown method"); + string xmlString = ServerUtils.BuildXmlResponse(result); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + #endregion + } +} diff --git a/OpenSim/Addons/Groups/IGroupsServicesConnector.cs b/OpenSim/Addons/Groups/IGroupsServicesConnector.cs new file mode 100644 index 0000000000..73deb7a7b4 --- /dev/null +++ b/OpenSim/Addons/Groups/IGroupsServicesConnector.cs @@ -0,0 +1,118 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using OpenMetaverse; +using OpenSim.Framework; + +namespace OpenSim.Groups +{ + public interface IGroupsServicesConnector + { + UUID CreateGroup(UUID RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, + bool openEnrollment, bool allowPublish, bool maturePublish, UUID founderID, out string reason); + bool UpdateGroup(string RequestingAgentID, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, + bool openEnrollment, bool allowPublish, bool maturePublish, out string reason); + ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string GroupName); + List FindGroups(string RequestingAgentID, string search); + List GetGroupMembers(string RequestingAgentID, UUID GroupID); + + bool AddGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, out string reason); + bool UpdateGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers); + void RemoveGroupRole(string RequestingAgentID, UUID groupID, UUID roleID); + List GetGroupRoles(string RequestingAgentID, UUID GroupID); + List GetGroupRoleMembers(string RequestingAgentID, UUID GroupID); + + bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason); + void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID); + + bool AddAgentToGroupInvite(string RequestingAgentID, UUID inviteID, UUID groupID, UUID roleID, string agentID); + GroupInviteInfo GetAgentToGroupInvite(string RequestingAgentID, UUID inviteID); + void RemoveAgentToGroupInvite(string RequestingAgentID, UUID inviteID); + + void AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID); + void RemoveAgentFromGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID); + List GetAgentGroupRoles(string RequestingAgentID, string AgentID, UUID GroupID); + + void SetAgentActiveGroup(string RequestingAgentID, string AgentID, UUID GroupID); + ExtendedGroupMembershipData GetAgentActiveMembership(string RequestingAgentID, string AgentID); + + void SetAgentActiveGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID); + void UpdateMembership(string RequestingAgentID, string AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile); + + /// + /// Get information about a specific group to which the user belongs. + /// + /// The agent requesting the information. + /// The agent requested. + /// The group requested. + /// + /// If the user is a member of the group then the data structure is returned. If not, then null is returned. + /// + ExtendedGroupMembershipData GetAgentGroupMembership(string RequestingAgentID, string AgentID, UUID GroupID); + + /// + /// Get information about the groups to which a user belongs. + /// + /// The agent requesting the information. + /// The agent requested. + /// + /// Information about the groups to which the user belongs. If the user belongs to no groups then an empty + /// list is returned. + /// + List GetAgentGroupMemberships(string RequestingAgentID, string AgentID); + + bool AddGroupNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, + bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID); + GroupNoticeInfo GetGroupNotice(string RequestingAgentID, UUID noticeID); + List GetGroupNotices(string RequestingAgentID, UUID GroupID); + + void ResetAgentGroupChatSessions(string agentID); + bool hasAgentBeenInvitedToGroupChatSession(string agentID, UUID groupID); + bool hasAgentDroppedGroupChatSession(string agentID, UUID groupID); + void AgentDroppedFromGroupChatSession(string agentID, UUID groupID); + void AgentInvitedToGroupChatSession(string agentID, UUID groupID); + + } + + public class GroupInviteInfo + { + public UUID GroupID = UUID.Zero; + public UUID RoleID = UUID.Zero; + public string AgentID = string.Empty; + public UUID InviteID = UUID.Zero; + } + + public class GroupNoticeInfo + { + public ExtendedGroupNoticeData noticeData = new ExtendedGroupNoticeData(); + public UUID GroupID = UUID.Zero; + public string Message = string.Empty; + } + +} diff --git a/OpenSim/Addons/Groups/Local/GroupsServiceLocalConnectorModule.cs b/OpenSim/Addons/Groups/Local/GroupsServiceLocalConnectorModule.cs new file mode 100644 index 0000000000..905bc913ff --- /dev/null +++ b/OpenSim/Addons/Groups/Local/GroupsServiceLocalConnectorModule.cs @@ -0,0 +1,347 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Region.Framework.Interfaces; + +using OpenMetaverse; +using Mono.Addins; +using log4net; +using Nini.Config; + +namespace OpenSim.Groups +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GroupsServiceLocalConnectorModule")] + public class GroupsServiceLocalConnectorModule : ISharedRegionModule, IGroupsServicesConnector + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private bool m_Enabled = false; + private GroupsService m_GroupsService; + private IUserManagement m_UserManagement; + private List m_Scenes; + private ForeignImporter m_ForeignImporter; + + #region constructors + public GroupsServiceLocalConnectorModule() + { + } + + public GroupsServiceLocalConnectorModule(IConfigSource config, IUserManagement uman) + { + Init(config); + m_UserManagement = uman; + m_ForeignImporter = new ForeignImporter(uman); + } + #endregion + + private void Init(IConfigSource config) + { + m_GroupsService = new GroupsService(config); + m_Scenes = new List(); + } + + #region ISharedRegionModule + + public void Initialise(IConfigSource config) + { + IConfig groupsConfig = config.Configs["Groups"]; + if (groupsConfig == null) + return; + + if ((groupsConfig.GetBoolean("Enabled", false) == false) + || (groupsConfig.GetString("ServicesConnectorModule", string.Empty) != Name)) + { + return; + } + + Init(config); + m_Enabled = true; + + m_log.DebugFormat("[Groups]: Initializing {0}", this.Name); + } + + public string Name + { + get { return "Groups Local Service Connector"; } + } + + public Type ReplaceableInterface + { + get { return null; } + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + m_log.DebugFormat("[Groups]: Registering {0} with {1}", this.Name, scene.RegionInfo.RegionName); + scene.RegisterModuleInterface(this); + m_Scenes.Add(scene); + } + + public void RemoveRegion(Scene scene) + { + if (!m_Enabled) + return; + + scene.UnregisterModuleInterface(this); + m_Scenes.Remove(scene); + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + + if (m_UserManagement == null) + { + m_UserManagement = scene.RequestModuleInterface(); + m_ForeignImporter = new ForeignImporter(m_UserManagement); + } + } + + public void PostInitialise() + { + } + + public void Close() + { + } + + #endregion + + #region IGroupsServicesConnector + + public UUID CreateGroup(UUID RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, + bool allowPublish, bool maturePublish, UUID founderID, out string reason) + { + m_log.DebugFormat("[Groups]: Creating group {0}", name); + reason = string.Empty; + return m_GroupsService.CreateGroup(RequestingAgentID.ToString(), name, charter, showInList, insigniaID, + membershipFee, openEnrollment, allowPublish, maturePublish, founderID, out reason); + } + + public bool UpdateGroup(string RequestingAgentID, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, + bool openEnrollment, bool allowPublish, bool maturePublish, out string reason) + { + reason = string.Empty; + m_GroupsService.UpdateGroup(RequestingAgentID, groupID, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish); + return true; + } + + public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string GroupName) + { + if (GroupID != UUID.Zero) + return m_GroupsService.GetGroupRecord(RequestingAgentID, GroupID); + else if (GroupName != null) + return m_GroupsService.GetGroupRecord(RequestingAgentID, GroupName); + + return null; + } + + public List FindGroups(string RequestingAgentID, string search) + { + return m_GroupsService.FindGroups(RequestingAgentID, search); + } + + public List GetGroupMembers(string RequestingAgentID, UUID GroupID) + { + List _members = m_GroupsService.GetGroupMembers(RequestingAgentID, GroupID); + if (_members != null && _members.Count > 0) + { + List members = _members.ConvertAll(new Converter(m_ForeignImporter.ConvertGroupMembersData)); + return members; + } + + return new List(); + } + + public bool AddGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, out string reason) + { + return m_GroupsService.AddGroupRole(RequestingAgentID, groupID, roleID, name, description, title, powers, out reason); + } + + public bool UpdateGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers) + { + return m_GroupsService.UpdateGroupRole(RequestingAgentID, groupID, roleID, name, description, title, powers); + } + + public void RemoveGroupRole(string RequestingAgentID, UUID groupID, UUID roleID) + { + m_GroupsService.RemoveGroupRole(RequestingAgentID, groupID, roleID); + } + + public List GetGroupRoles(string RequestingAgentID, UUID GroupID) + { + return m_GroupsService.GetGroupRoles(RequestingAgentID, GroupID); + } + + public List GetGroupRoleMembers(string RequestingAgentID, UUID GroupID) + { + List _rm = m_GroupsService.GetGroupRoleMembers(RequestingAgentID, GroupID); + if (_rm != null && _rm.Count > 0) + { + List rm = _rm.ConvertAll(new Converter(m_ForeignImporter.ConvertGroupRoleMembersData)); + return rm; + } + + return new List(); + + } + + public bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason) + { + return m_GroupsService.AddAgentToGroup(RequestingAgentID, AgentID, GroupID, RoleID, token, out reason); + } + + public void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + m_GroupsService.RemoveAgentFromGroup(RequestingAgentID, AgentID, GroupID); + } + + public bool AddAgentToGroupInvite(string RequestingAgentID, UUID inviteID, UUID groupID, UUID roleID, string agentID) + { + return m_GroupsService.AddAgentToGroupInvite(RequestingAgentID, inviteID, groupID, roleID, agentID); + } + + public GroupInviteInfo GetAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + return m_GroupsService.GetAgentToGroupInvite(RequestingAgentID, inviteID); ; + } + + public void RemoveAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + m_GroupsService.RemoveAgentToGroupInvite(RequestingAgentID, inviteID); + } + + public void AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + m_GroupsService.AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); + } + + public void RemoveAgentFromGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + m_GroupsService.RemoveAgentFromGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); + } + + public List GetAgentGroupRoles(string RequestingAgentID, string AgentID, UUID GroupID) + { + return m_GroupsService.GetAgentGroupRoles(RequestingAgentID, AgentID, GroupID); + } + + public void SetAgentActiveGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + m_GroupsService.SetAgentActiveGroup(RequestingAgentID, AgentID, GroupID); + } + + public ExtendedGroupMembershipData GetAgentActiveMembership(string RequestingAgentID, string AgentID) + { + return m_GroupsService.GetAgentActiveMembership(RequestingAgentID, AgentID); + } + + public void SetAgentActiveGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + m_GroupsService.SetAgentActiveGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); + } + + public void UpdateMembership(string RequestingAgentID, string AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile) + { + m_GroupsService.UpdateMembership(RequestingAgentID, AgentID, GroupID, AcceptNotices, ListInProfile); + } + + public ExtendedGroupMembershipData GetAgentGroupMembership(string RequestingAgentID, string AgentID, UUID GroupID) + { + return m_GroupsService.GetAgentGroupMembership(RequestingAgentID, AgentID, GroupID); ; + } + + public List GetAgentGroupMemberships(string RequestingAgentID, string AgentID) + { + return m_GroupsService.GetAgentGroupMemberships(RequestingAgentID, AgentID); + } + + public bool AddGroupNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, + bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) + { + return m_GroupsService.AddGroupNotice(RequestingAgentID, groupID, noticeID, fromName, subject, message, + hasAttachment, attType, attName, attItemID, attOwnerID); + } + + public GroupNoticeInfo GetGroupNotice(string RequestingAgentID, UUID noticeID) + { + GroupNoticeInfo notice = m_GroupsService.GetGroupNotice(RequestingAgentID, noticeID); + + //if (notice != null && notice.noticeData.HasAttachment && notice.noticeData.AttachmentOwnerID != null) + //{ + // UUID userID = UUID.Zero; + // string url = string.Empty, first = string.Empty, last = string.Empty, tmp = string.Empty; + // Util.ParseUniversalUserIdentifier(notice.noticeData.AttachmentOwnerID, out userID, out url, out first, out last, out tmp); + // if (url != string.Empty) + // m_UserManagement.AddUser(userID, first, last, url); + //} + + return notice; + } + + public List GetGroupNotices(string RequestingAgentID, UUID GroupID) + { + return m_GroupsService.GetGroupNotices(RequestingAgentID, GroupID); + } + + public void ResetAgentGroupChatSessions(string agentID) + { + } + + public bool hasAgentBeenInvitedToGroupChatSession(string agentID, UUID groupID) + { + return false; + } + + public bool hasAgentDroppedGroupChatSession(string agentID, UUID groupID) + { + return false; + } + + public void AgentDroppedFromGroupChatSession(string agentID, UUID groupID) + { + } + + public void AgentInvitedToGroupChatSession(string agentID, UUID groupID) + { + } + + #endregion + } +} diff --git a/OpenSim/Addons/Groups/Properties/AssemblyInfo.cs b/OpenSim/Addons/Groups/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..166803f7f5 --- /dev/null +++ b/OpenSim/Addons/Groups/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Mono.Addins; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OpenSim.Addons.Groups")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("http://opensimulator.org")] +[assembly: AssemblyProduct("OpenSim.Addons.Groups")] +[assembly: AssemblyCopyright("Copyright (c) OpenSimulator.org Developers")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("313d4865-d179-4735-9b5a-fe74885878b2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("0.7.5.*")] +[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: Addin("OpenSim.Groups", "0.1")] +[assembly: AddinDependency("OpenSim", "0.5")] diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs new file mode 100644 index 0000000000..04328c9c3a --- /dev/null +++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs @@ -0,0 +1,642 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; + +using OpenSim.Framework; +using OpenSim.Server.Base; + +using OpenMetaverse; +using log4net; + +namespace OpenSim.Groups +{ + public class GroupsServiceRemoteConnector + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private string m_ServerURI; + private object m_Lock = new object(); + + public GroupsServiceRemoteConnector(string url) + { + m_ServerURI = url; + if (!m_ServerURI.EndsWith("/")) + m_ServerURI += "/"; + + m_log.DebugFormat("[Groups.RemoteConnector]: Groups server at {0}", m_ServerURI); + } + + public ExtendedGroupRecord CreateGroup(string RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, + bool allowPublish, bool maturePublish, UUID founderID, out string reason) + { + reason = string.Empty; + + ExtendedGroupRecord rec = new ExtendedGroupRecord(); + rec.AllowPublish = allowPublish; + rec.Charter = charter; + rec.FounderID = founderID; + rec.GroupName = name; + rec.GroupPicture = insigniaID; + rec.MaturePublish = maturePublish; + rec.MembershipFee = membershipFee; + rec.OpenEnrollment = openEnrollment; + rec.ShowInList = showInList; + + Dictionary sendData = GroupsDataUtils.GroupRecord(rec); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "ADD"; + Dictionary ret = MakeRequest("PUTGROUP", sendData); + + if (ret == null) + return null; + + if (ret["RESULT"].ToString() == "NULL") + { + reason = ret["REASON"].ToString(); + return null; + } + + return GroupsDataUtils.GroupRecord((Dictionary)ret["RESULT"]); + + } + + public ExtendedGroupRecord UpdateGroup(string RequestingAgentID, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) + { + ExtendedGroupRecord rec = new ExtendedGroupRecord(); + rec.AllowPublish = allowPublish; + rec.Charter = charter; + rec.GroupPicture = insigniaID; + rec.MaturePublish = maturePublish; + rec.GroupID = groupID; + rec.MembershipFee = membershipFee; + rec.OpenEnrollment = openEnrollment; + rec.ShowInList = showInList; + + Dictionary sendData = GroupsDataUtils.GroupRecord(rec); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "UPDATE"; + Dictionary ret = MakeRequest("PUTGROUP", sendData); + + if (ret == null || (ret != null && ret["RESULT"].ToString() == "NULL")) + return null; + + return GroupsDataUtils.GroupRecord((Dictionary)ret["RESULT"]); + } + + public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string GroupName) + { + if (GroupID == UUID.Zero && (GroupName == null || (GroupName != null && GroupName == string.Empty))) + return null; + + Dictionary sendData = new Dictionary(); + if (GroupID != UUID.Zero) + sendData["GroupID"] = GroupID.ToString(); + if (GroupName != null && GroupName != string.Empty) + sendData["Name"] = GroupsDataUtils.Sanitize(GroupName); + + sendData["RequestingAgentID"] = RequestingAgentID; + + Dictionary ret = MakeRequest("GETGROUP", sendData); + + if (ret == null || (ret != null && ret["RESULT"].ToString() == "NULL")) + return null; + + return GroupsDataUtils.GroupRecord((Dictionary)ret["RESULT"]); + } + + public GroupMembershipData AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason) + { + reason = string.Empty; + + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID; + sendData["GroupID"] = GroupID.ToString(); + sendData["RoleID"] = RoleID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["AccessToken"] = token; + Dictionary ret = MakeRequest("ADDAGENTTOGROUP", sendData); + + if (ret == null) + return null; + + if (!ret.ContainsKey("RESULT")) + return null; + + if (ret["RESULT"].ToString() == "NULL") + { + reason = ret["REASON"].ToString(); + return null; + } + + return GroupsDataUtils.GroupMembershipData((Dictionary)ret["RESULT"]); + + } + + public void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID; + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + MakeRequest("REMOVEAGENTFROMGROUP", sendData); + } + + public ExtendedGroupMembershipData GetMembership(string RequestingAgentID, string AgentID, UUID GroupID) + { + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID; + if (GroupID != UUID.Zero) + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + Dictionary ret = MakeRequest("GETMEMBERSHIP", sendData); + + if (ret == null) + return null; + + if (!ret.ContainsKey("RESULT")) + return null; + + if (ret["RESULT"].ToString() == "NULL") + return null; + + return GroupsDataUtils.GroupMembershipData((Dictionary)ret["RESULT"]); + } + + public List GetMemberships(string RequestingAgentID, string AgentID) + { + List memberships = new List(); + + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID; + sendData["ALL"] = "true"; + sendData["RequestingAgentID"] = RequestingAgentID; + Dictionary ret = MakeRequest("GETMEMBERSHIP", sendData); + + if (ret == null) + return memberships; + + if (!ret.ContainsKey("RESULT")) + return memberships; + + if (ret["RESULT"].ToString() == "NULL") + return memberships; + + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + GroupMembershipData m = GroupsDataUtils.GroupMembershipData((Dictionary)v); + memberships.Add(m); + } + + return memberships; + } + + public List GetGroupMembers(string RequestingAgentID, UUID GroupID) + { + List members = new List(); + + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + Dictionary ret = MakeRequest("GETGROUPMEMBERS", sendData); + + if (ret == null) + return members; + + if (!ret.ContainsKey("RESULT")) + return members; + + if (ret["RESULT"].ToString() == "NULL") + return members; + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + ExtendedGroupMembersData m = GroupsDataUtils.GroupMembersData((Dictionary)v); + members.Add(m); + } + + return members; + } + + public bool AddGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, out string reason) + { + reason = string.Empty; + + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = groupID.ToString(); + sendData["RoleID"] = roleID.ToString(); + sendData["Name"] = GroupsDataUtils.Sanitize(name); + sendData["Description"] = GroupsDataUtils.Sanitize(description); + sendData["Title"] = GroupsDataUtils.Sanitize(title); + sendData["Powers"] = powers.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "ADD"; + Dictionary ret = MakeRequest("PUTROLE", sendData); + + if (ret == null) + return false; + + if (!ret.ContainsKey("RESULT")) + return false; + + if (ret["RESULT"].ToString().ToLower() != "true") + { + reason = ret["REASON"].ToString(); + return false; + } + + return true; + } + + public bool UpdateGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers) + { + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = groupID.ToString(); + sendData["RoleID"] = roleID.ToString(); + sendData["Name"] = GroupsDataUtils.Sanitize(name); + sendData["Description"] = GroupsDataUtils.Sanitize(description); + sendData["Title"] = GroupsDataUtils.Sanitize(title); + sendData["Powers"] = powers.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "UPDATE"; + Dictionary ret = MakeRequest("PUTROLE", sendData); + + if (ret == null) + return false; + + if (!ret.ContainsKey("RESULT")) + return false; + + if (ret["RESULT"].ToString().ToLower() != "true") + return false; + + return true; + } + + public void RemoveGroupRole(string RequestingAgentID, UUID groupID, UUID roleID) + { + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = groupID.ToString(); + sendData["RoleID"] = roleID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + MakeRequest("REMOVEROLE", sendData); + } + + public List GetGroupRoles(string RequestingAgentID, UUID GroupID) + { + List roles = new List(); + + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + Dictionary ret = MakeRequest("GETGROUPROLES", sendData); + + if (ret == null) + return roles; + + if (!ret.ContainsKey("RESULT")) + return roles; + + if (ret["RESULT"].ToString() == "NULL") + return roles; + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + GroupRolesData m = GroupsDataUtils.GroupRolesData((Dictionary)v); + roles.Add(m); + } + + return roles; + } + + public List GetGroupRoleMembers(string RequestingAgentID, UUID GroupID) + { + List rmembers = new List(); + + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + Dictionary ret = MakeRequest("GETROLEMEMBERS", sendData); + + if (ret == null) + return rmembers; + + if (!ret.ContainsKey("RESULT")) + return rmembers; + + if (ret["RESULT"].ToString() == "NULL") + return rmembers; + + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + ExtendedGroupRoleMembersData m = GroupsDataUtils.GroupRoleMembersData((Dictionary)v); + rmembers.Add(m); + } + + return rmembers; + } + + public bool AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID.ToString(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RoleID"] = RoleID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "ADD"; + + Dictionary ret = MakeRequest("AGENTROLE", sendData); + + if (ret == null) + return false; + + if (!ret.ContainsKey("RESULT")) + return false; + + if (ret["RESULT"].ToString().ToLower() != "true") + return false; + + return true; + } + + public bool RemoveAgentFromGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID.ToString(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RoleID"] = RoleID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "DELETE"; + + Dictionary ret = MakeRequest("AGENTROLE", sendData); + + if (ret == null) + return false; + + if (!ret.ContainsKey("RESULT")) + return false; + + if (ret["RESULT"].ToString().ToLower() != "true") + return false; + + return true; + } + + public List GetAgentGroupRoles(string RequestingAgentID, string AgentID, UUID GroupID) + { + List roles = new List(); + + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID.ToString(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + Dictionary ret = MakeRequest("GETAGENTROLES", sendData); + + if (ret == null) + return roles; + + if (!ret.ContainsKey("RESULT")) + return roles; + + if (ret["RESULT"].ToString() == "NULL") + return roles; + + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + GroupRolesData m = GroupsDataUtils.GroupRolesData((Dictionary)v); + roles.Add(m); + } + + return roles; + } + + public GroupMembershipData SetAgentActiveGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID.ToString(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "GROUP"; + + Dictionary ret = MakeRequest("SETACTIVE", sendData); + + if (ret == null) + return null; + + if (!ret.ContainsKey("RESULT")) + return null; + + if (ret["RESULT"].ToString() == "NULL") + return null; + + return GroupsDataUtils.GroupMembershipData((Dictionary)ret["RESULT"]); + } + + public void SetAgentActiveGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID.ToString(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RoleID"] = RoleID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "ROLE"; + + MakeRequest("SETACTIVE", sendData); + } + + public void UpdateMembership(string RequestingAgentID, string AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile) + { + Dictionary sendData = new Dictionary(); + sendData["AgentID"] = AgentID.ToString(); + sendData["GroupID"] = GroupID.ToString(); + sendData["AcceptNotices"] = AcceptNotices.ToString(); + sendData["ListInProfile"] = ListInProfile.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + MakeRequest("UPDATEMEMBERSHIP", sendData); + } + + public bool AddAgentToGroupInvite(string RequestingAgentID, UUID inviteID, UUID groupID, UUID roleID, string agentID) + { + Dictionary sendData = new Dictionary(); + sendData["InviteID"] = inviteID.ToString(); + sendData["GroupID"] = groupID.ToString(); + sendData["RoleID"] = roleID.ToString(); + sendData["AgentID"] = agentID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "ADD"; + + Dictionary ret = MakeRequest("INVITE", sendData); + + if (ret == null) + return false; + + if (!ret.ContainsKey("RESULT")) + return false; + + if (ret["RESULT"].ToString().ToLower() != "true") // it may return "NULL" + return false; + + return true; + } + + public GroupInviteInfo GetAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + Dictionary sendData = new Dictionary(); + sendData["InviteID"] = inviteID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "GET"; + + Dictionary ret = MakeRequest("INVITE", sendData); + + if (ret == null) + return null; + + if (!ret.ContainsKey("RESULT")) + return null; + + if (ret["RESULT"].ToString() == "NULL") + return null; + + return GroupsDataUtils.GroupInviteInfo((Dictionary)ret["RESULT"]); + } + + public void RemoveAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + Dictionary sendData = new Dictionary(); + sendData["InviteID"] = inviteID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + sendData["OP"] = "DELETE"; + + MakeRequest("INVITE", sendData); + } + + public bool AddGroupNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, + bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) + { + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = groupID.ToString(); + sendData["NoticeID"] = noticeID.ToString(); + sendData["FromName"] = GroupsDataUtils.Sanitize(fromName); + sendData["Subject"] = GroupsDataUtils.Sanitize(subject); + sendData["Message"] = GroupsDataUtils.Sanitize(message); + sendData["HasAttachment"] = hasAttachment.ToString(); + if (hasAttachment) + { + sendData["AttachmentType"] = attType.ToString(); + sendData["AttachmentName"] = attName.ToString(); + sendData["AttachmentItemID"] = attItemID.ToString(); + sendData["AttachmentOwnerID"] = attOwnerID; + } + sendData["RequestingAgentID"] = RequestingAgentID; + + Dictionary ret = MakeRequest("ADDNOTICE", sendData); + + if (ret == null) + return false; + + if (!ret.ContainsKey("RESULT")) + return false; + + if (ret["RESULT"].ToString().ToLower() != "true") + return false; + + return true; + } + + public GroupNoticeInfo GetGroupNotice(string RequestingAgentID, UUID noticeID) + { + Dictionary sendData = new Dictionary(); + sendData["NoticeID"] = noticeID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + + Dictionary ret = MakeRequest("GETNOTICES", sendData); + + if (ret == null) + return null; + + if (!ret.ContainsKey("RESULT")) + return null; + + if (ret["RESULT"].ToString() == "NULL") + return null; + + return GroupsDataUtils.GroupNoticeInfo((Dictionary)ret["RESULT"]); + } + + public List GetGroupNotices(string RequestingAgentID, UUID GroupID) + { + List notices = new List(); + + Dictionary sendData = new Dictionary(); + sendData["GroupID"] = GroupID.ToString(); + sendData["RequestingAgentID"] = RequestingAgentID; + Dictionary ret = MakeRequest("GETNOTICES", sendData); + + if (ret == null) + return notices; + + if (!ret.ContainsKey("RESULT")) + return notices; + + if (ret["RESULT"].ToString() == "NULL") + return notices; + + foreach (object v in ((Dictionary)ret["RESULT"]).Values) + { + ExtendedGroupNoticeData m = GroupsDataUtils.GroupNoticeData((Dictionary)v); + notices.Add(m); + } + + return notices; + } + + #region Make Request + + private Dictionary MakeRequest(string method, Dictionary sendData) + { + sendData["METHOD"] = method; + + string reply = string.Empty; + lock (m_Lock) + reply = SynchronousRestFormsRequester.MakeRequest("POST", + m_ServerURI + "groups", + ServerUtils.BuildQueryString(sendData)); + + if (reply == string.Empty) + return null; + + Dictionary replyData = ServerUtils.ParseXmlResponse( + reply); + + return replyData; + } + #endregion + + } +} diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs new file mode 100644 index 0000000000..d1c02db721 --- /dev/null +++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs @@ -0,0 +1,437 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Threading; +using System.Text; + +using OpenSim.Framework; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Server.Base; + +using OpenMetaverse; +using Mono.Addins; +using log4net; +using Nini.Config; + +namespace OpenSim.Groups +{ + [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GroupsServiceRemoteConnectorModule")] + public class GroupsServiceRemoteConnectorModule : ISharedRegionModule, IGroupsServicesConnector + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private bool m_Enabled = false; + private GroupsServiceRemoteConnector m_GroupsService; + private IUserManagement m_UserManagement; + private List m_Scenes; + + private RemoteConnectorCacheWrapper m_CacheWrapper; + + #region constructors + public GroupsServiceRemoteConnectorModule() + { + } + + public GroupsServiceRemoteConnectorModule(IConfigSource config, IUserManagement uman) + { + Init(config); + m_UserManagement = uman; + m_CacheWrapper = new RemoteConnectorCacheWrapper(m_UserManagement); + + } + #endregion + + private void Init(IConfigSource config) + { + IConfig groupsConfig = config.Configs["Groups"]; + string url = groupsConfig.GetString("GroupsServerURI", string.Empty); + if (url == string.Empty) + { + m_log.WarnFormat("[Groups.RemoteConnector]: Groups server URL not provided. Groups will not work."); + return; + } + + m_GroupsService = new GroupsServiceRemoteConnector(url); + m_Scenes = new List(); + + } + + #region ISharedRegionModule + + public void Initialise(IConfigSource config) + { + IConfig groupsConfig = config.Configs["Groups"]; + if (groupsConfig == null) + return; + + if ((groupsConfig.GetBoolean("Enabled", false) == false) + || (groupsConfig.GetString("ServicesConnectorModule", string.Empty) != Name)) + { + return; + } + + Init(config); + + m_Enabled = true; + m_log.DebugFormat("[Groups.RemoteConnector]: Initializing {0}", this.Name); + } + + public string Name + { + get { return "Groups Remote Service Connector"; } + } + + public Type ReplaceableInterface + { + get { return null; } + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + m_log.DebugFormat("[Groups.RemoteConnector]: Registering {0} with {1}", this.Name, scene.RegionInfo.RegionName); + scene.RegisterModuleInterface(this); + m_Scenes.Add(scene); + } + + public void RemoveRegion(Scene scene) + { + if (!m_Enabled) + return; + + scene.UnregisterModuleInterface(this); + m_Scenes.Remove(scene); + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + + if (m_UserManagement == null) + { + m_UserManagement = scene.RequestModuleInterface(); + m_CacheWrapper = new RemoteConnectorCacheWrapper(m_UserManagement); + } + } + + public void PostInitialise() + { + } + + public void Close() + { + } + + #endregion + + #region IGroupsServicesConnector + + public UUID CreateGroup(UUID RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, + bool allowPublish, bool maturePublish, UUID founderID, out string reason) + { + m_log.DebugFormat("[Groups.RemoteConnector]: Creating group {0}", name); + string r = string.Empty; + + UUID groupID = m_CacheWrapper.CreateGroup(RequestingAgentID, delegate + { + return m_GroupsService.CreateGroup(RequestingAgentID.ToString(), name, charter, showInList, insigniaID, + membershipFee, openEnrollment, allowPublish, maturePublish, founderID, out r); + }); + + reason = r; + return groupID; + } + + public bool UpdateGroup(string RequestingAgentID, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, + bool openEnrollment, bool allowPublish, bool maturePublish, out string reason) + { + string r = string.Empty; + + bool success = m_CacheWrapper.UpdateGroup(groupID, delegate + { + return m_GroupsService.UpdateGroup(RequestingAgentID, groupID, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish); + }); + + reason = r; + return success; + } + + public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string GroupName) + { + if (GroupID == UUID.Zero && (GroupName == null || GroupName != null && GroupName == string.Empty)) + return null; + + return m_CacheWrapper.GetGroupRecord(RequestingAgentID,GroupID,GroupName, delegate + { + return m_GroupsService.GetGroupRecord(RequestingAgentID, GroupID, GroupName); + }); + } + + public List FindGroups(string RequestingAgentID, string search) + { + // TODO! + return new List(); + } + + public bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason) + { + string agentFullID = AgentID; + m_log.DebugFormat("[Groups.RemoteConnector]: Add agent {0} to group {1}", agentFullID, GroupID); + string r = string.Empty; + + bool success = m_CacheWrapper.AddAgentToGroup(RequestingAgentID, AgentID, GroupID, delegate + { + return m_GroupsService.AddAgentToGroup(RequestingAgentID, agentFullID, GroupID, RoleID, token, out r); + }); + + reason = r; + return success; + } + + public void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + m_CacheWrapper.RemoveAgentFromGroup(RequestingAgentID, AgentID, GroupID, delegate + { + m_GroupsService.RemoveAgentFromGroup(RequestingAgentID, AgentID, GroupID); + }); + + } + + public void SetAgentActiveGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + m_CacheWrapper.SetAgentActiveGroup(AgentID, delegate + { + return m_GroupsService.SetAgentActiveGroup(RequestingAgentID, AgentID, GroupID); + }); + } + + public ExtendedGroupMembershipData GetAgentActiveMembership(string RequestingAgentID, string AgentID) + { + return m_CacheWrapper.GetAgentActiveMembership(AgentID, delegate + { + return m_GroupsService.GetMembership(RequestingAgentID, AgentID, UUID.Zero); + }); + } + + public ExtendedGroupMembershipData GetAgentGroupMembership(string RequestingAgentID, string AgentID, UUID GroupID) + { + return m_CacheWrapper.GetAgentGroupMembership(AgentID, GroupID, delegate + { + return m_GroupsService.GetMembership(RequestingAgentID, AgentID, GroupID); + }); + } + + public List GetAgentGroupMemberships(string RequestingAgentID, string AgentID) + { + return m_CacheWrapper.GetAgentGroupMemberships(AgentID, delegate + { + return m_GroupsService.GetMemberships(RequestingAgentID, AgentID); + }); + } + + + public List GetGroupMembers(string RequestingAgentID, UUID GroupID) + { + return m_CacheWrapper.GetGroupMembers(RequestingAgentID, GroupID, delegate + { + return m_GroupsService.GetGroupMembers(RequestingAgentID, GroupID); + }); + } + + public bool AddGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, out string reason) + { + string r = string.Empty; + bool success = m_CacheWrapper.AddGroupRole(roleID, description, name, powers, title, delegate + { + return m_GroupsService.AddGroupRole(RequestingAgentID, groupID, roleID, name, description, title, powers, out r); + }); + + reason = r; + return success; + } + + public bool UpdateGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers) + { + return m_CacheWrapper.UpdateGroupRole(groupID, roleID, name, description, title, powers, delegate + { + return m_GroupsService.UpdateGroupRole(RequestingAgentID, groupID, roleID, name, description, title, powers); + }); + } + + public void RemoveGroupRole(string RequestingAgentID, UUID groupID, UUID roleID) + { + m_CacheWrapper.RemoveGroupRole(RequestingAgentID, groupID, roleID, delegate + { + m_GroupsService.RemoveGroupRole(RequestingAgentID, groupID, roleID); + }); + } + + public List GetGroupRoles(string RequestingAgentID, UUID GroupID) + { + return m_CacheWrapper.GetGroupRoles(RequestingAgentID, GroupID, delegate + { + return m_GroupsService.GetGroupRoles(RequestingAgentID, GroupID); + }); + } + + public List GetGroupRoleMembers(string RequestingAgentID, UUID GroupID) + { + return m_CacheWrapper.GetGroupRoleMembers(RequestingAgentID, GroupID, delegate + { + return m_GroupsService.GetGroupRoleMembers(RequestingAgentID, GroupID); + }); + } + + public void AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + m_CacheWrapper.AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID, delegate + { + return m_GroupsService.AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); + }); + } + + public void RemoveAgentFromGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + m_CacheWrapper.RemoveAgentFromGroupRole(RequestingAgentID, AgentID, GroupID, RoleID, delegate + { + return m_GroupsService.RemoveAgentFromGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); + }); + } + + public List GetAgentGroupRoles(string RequestingAgentID, string AgentID, UUID GroupID) + { + return m_CacheWrapper.GetAgentGroupRoles(RequestingAgentID, AgentID, GroupID, delegate + { + return m_GroupsService.GetAgentGroupRoles(RequestingAgentID, AgentID, GroupID); ; + }); + } + + public void SetAgentActiveGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + m_CacheWrapper.SetAgentActiveGroupRole(AgentID, GroupID, delegate + { + m_GroupsService.SetAgentActiveGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); + }); + } + + public void UpdateMembership(string RequestingAgentID, string AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile) + { + m_CacheWrapper.UpdateMembership(AgentID, GroupID, AcceptNotices, ListInProfile, delegate + { + m_GroupsService.UpdateMembership(RequestingAgentID, AgentID, GroupID, AcceptNotices, ListInProfile); + }); + } + + public bool AddAgentToGroupInvite(string RequestingAgentID, UUID inviteID, UUID groupID, UUID roleID, string agentID) + { + return m_GroupsService.AddAgentToGroupInvite(RequestingAgentID, inviteID, groupID, roleID, agentID); + } + + public GroupInviteInfo GetAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + return m_GroupsService.GetAgentToGroupInvite(RequestingAgentID, inviteID); + } + + public void RemoveAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + m_GroupsService.RemoveAgentToGroupInvite(RequestingAgentID, inviteID); + } + + public bool AddGroupNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, + bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) + { + GroupNoticeInfo notice = new GroupNoticeInfo(); + notice.GroupID = groupID; + notice.Message = message; + notice.noticeData = new ExtendedGroupNoticeData(); + notice.noticeData.AttachmentItemID = attItemID; + notice.noticeData.AttachmentName = attName; + notice.noticeData.AttachmentOwnerID = attOwnerID.ToString(); + notice.noticeData.AttachmentType = attType; + notice.noticeData.FromName = fromName; + notice.noticeData.HasAttachment = hasAttachment; + notice.noticeData.NoticeID = noticeID; + notice.noticeData.Subject = subject; + notice.noticeData.Timestamp = (uint)Util.UnixTimeSinceEpoch(); + + return m_CacheWrapper.AddGroupNotice(groupID, noticeID, notice, delegate + { + return m_GroupsService.AddGroupNotice(RequestingAgentID, groupID, noticeID, fromName, subject, message, + hasAttachment, attType, attName, attItemID, attOwnerID); + }); + } + + public GroupNoticeInfo GetGroupNotice(string RequestingAgentID, UUID noticeID) + { + return m_CacheWrapper.GetGroupNotice(noticeID, delegate + { + return m_GroupsService.GetGroupNotice(RequestingAgentID, noticeID); + }); + } + + public List GetGroupNotices(string RequestingAgentID, UUID GroupID) + { + return m_CacheWrapper.GetGroupNotices(GroupID, delegate + { + return m_GroupsService.GetGroupNotices(RequestingAgentID, GroupID); + }); + } + + public void ResetAgentGroupChatSessions(string agentID) + { + } + + public bool hasAgentBeenInvitedToGroupChatSession(string agentID, UUID groupID) + { + return false; + } + + public bool hasAgentDroppedGroupChatSession(string agentID, UUID groupID) + { + return false; + } + + public void AgentDroppedFromGroupChatSession(string agentID, UUID groupID) + { + } + + public void AgentInvitedToGroupChatSession(string agentID, UUID groupID) + { + } + + #endregion + } + +} diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs new file mode 100644 index 0000000000..8c257edcc0 --- /dev/null +++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs @@ -0,0 +1,760 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Reflection; +using System.Text; +using System.Xml; +using System.Collections.Generic; +using System.IO; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Server.Base; +using OpenSim.Services.Interfaces; +using OpenSim.Framework.Servers.HttpServer; +using OpenSim.Server.Handlers.Base; +using log4net; +using OpenMetaverse; + +namespace OpenSim.Groups +{ + public class GroupsServiceRobustConnector : ServiceConnector + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private GroupsService m_GroupsService; + private string m_ConfigName = "Groups"; + + public GroupsServiceRobustConnector(IConfigSource config, IHttpServer server, string configName) : + base(config, server, configName) + { + if (configName != String.Empty) + m_ConfigName = configName; + + m_log.DebugFormat("[Groups.RobustConnector]: Starting with config name {0}", m_ConfigName); + + m_GroupsService = new GroupsService(config); + + server.AddStreamHandler(new GroupsServicePostHandler(m_GroupsService)); + } + } + + public class GroupsServicePostHandler : BaseStreamHandler + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private GroupsService m_GroupsService; + + public GroupsServicePostHandler(GroupsService service) : + base("POST", "/groups") + { + m_GroupsService = service; + } + + public override byte[] Handle(string path, Stream requestData, + IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) + { + StreamReader sr = new StreamReader(requestData); + string body = sr.ReadToEnd(); + sr.Close(); + body = body.Trim(); + + //m_log.DebugFormat("[XXX]: query String: {0}", body); + + try + { + Dictionary request = + ServerUtils.ParseQueryString(body); + + if (!request.ContainsKey("METHOD")) + return FailureResult(); + + string method = request["METHOD"].ToString(); + request.Remove("METHOD"); + + m_log.DebugFormat("[Groups.Handler]: {0}", method); + switch (method) + { + case "PUTGROUP": + return HandleAddOrUpdateGroup(request); + case "GETGROUP": + return HandleGetGroup(request); + case "ADDAGENTTOGROUP": + return HandleAddAgentToGroup(request); + case "REMOVEAGENTFROMGROUP": + return HandleRemoveAgentFromGroup(request); + case "GETMEMBERSHIP": + return HandleGetMembership(request); + case "GETGROUPMEMBERS": + return HandleGetGroupMembers(request); + case "PUTROLE": + return HandlePutRole(request); + case "REMOVEROLE": + return HandleRemoveRole(request); + case "GETGROUPROLES": + return HandleGetGroupRoles(request); + case "GETROLEMEMBERS": + return HandleGetRoleMembers(request); + case "AGENTROLE": + return HandleAgentRole(request); + case "GETAGENTROLES": + return HandleGetAgentRoles(request); + case "SETACTIVE": + return HandleSetActive(request); + case "UPDATEMEMBERSHIP": + return HandleUpdateMembership(request); + case "INVITE": + return HandleInvite(request); + case "ADDNOTICE": + return HandleAddNotice(request); + case "GETNOTICES": + return HandleGetNotices(request); + } + m_log.DebugFormat("[GROUPS HANDLER]: unknown method request: {0}", method); + } + catch (Exception e) + { + m_log.DebugFormat("[GROUPS HANDLER]: Exception {0}", e.StackTrace); + } + + return FailureResult(); + } + + byte[] HandleAddOrUpdateGroup(Dictionary request) + { + Dictionary result = new Dictionary(); + + ExtendedGroupRecord grec = GroupsDataUtils.GroupRecord(request); + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("OP")) + NullResult(result, "Bad network data"); + + else + { + string RequestingAgentID = request["RequestingAgentID"].ToString(); + string reason = string.Empty; + string op = request["OP"].ToString(); + if (op == "ADD") + { + grec.GroupID = m_GroupsService.CreateGroup(RequestingAgentID, grec.GroupName, grec.Charter, grec.ShowInList, grec.GroupPicture, grec.MembershipFee, + grec.OpenEnrollment, grec.AllowPublish, grec.MaturePublish, grec.FounderID, out reason); + + } + else if (op == "UPDATE") + { + m_GroupsService.UpdateGroup(RequestingAgentID, grec.GroupID, grec.Charter, grec.ShowInList, grec.GroupPicture, grec.MembershipFee, + grec.OpenEnrollment, grec.AllowPublish, grec.MaturePublish); + + } + + grec = m_GroupsService.GetGroupRecord(RequestingAgentID, grec.GroupID); + if (grec == null) + NullResult(result, "Internal Error"); + else + result["RESULT"] = GroupsDataUtils.GroupRecord(grec); + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleGetGroup(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID")) + NullResult(result, "Bad network data"); + else + { + string RequestingAgentID = request["RequestingAgentID"].ToString(); + ExtendedGroupRecord grec = null; + if (request.ContainsKey("GroupID")) + { + UUID groupID = new UUID(request["GroupID"].ToString()); + grec = m_GroupsService.GetGroupRecord(RequestingAgentID, groupID); + } + else if (request.ContainsKey("Name")) + { + string name = request["Name"].ToString(); + grec = m_GroupsService.GetGroupRecord(RequestingAgentID, name); + } + + if (grec == null) + NullResult(result, "Group not found"); + else + result["RESULT"] = GroupsDataUtils.GroupRecord(grec); + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleAddAgentToGroup(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("AgentID") || + !request.ContainsKey("GroupID") || !request.ContainsKey("RoleID")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + UUID roleID = new UUID(request["RoleID"].ToString()); + string agentID = request["AgentID"].ToString(); + string requestingAgentID = request["RequestingAgentID"].ToString(); + string token = string.Empty; + string reason = string.Empty; + + if (request.ContainsKey("AccessToken")) + token = request["AccessToken"].ToString(); + + if (!m_GroupsService.AddAgentToGroup(requestingAgentID, agentID, groupID, roleID, token, out reason)) + NullResult(result, reason); + else + { + GroupMembershipData membership = m_GroupsService.GetAgentGroupMembership(requestingAgentID, agentID, groupID); + if (membership == null) + NullResult(result, "Internal error"); + else + result["RESULT"] = GroupsDataUtils.GroupMembershipData((ExtendedGroupMembershipData)membership); + } + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleRemoveAgentFromGroup(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("AgentID") || !request.ContainsKey("GroupID")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + string agentID = request["AgentID"].ToString(); + string requestingAgentID = request["RequestingAgentID"].ToString(); + string reason = string.Empty; + + m_GroupsService.RemoveAgentFromGroup(requestingAgentID, agentID, groupID); + } + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + result["RESULT"] = "true"; + return Util.UTF8NoBomEncoding.GetBytes(ServerUtils.BuildXmlResponse(result)); + } + + byte[] HandleGetMembership(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("AgentID")) + NullResult(result, "Bad network data"); + else + { + string agentID = request["AgentID"].ToString(); + UUID groupID = UUID.Zero; + if (request.ContainsKey("GroupID")) + groupID = new UUID(request["GroupID"].ToString()); + string requestingAgentID = request["RequestingAgentID"].ToString(); + bool all = request.ContainsKey("ALL"); + + if (!all) + { + ExtendedGroupMembershipData membership = null; + if (groupID == UUID.Zero) + { + membership = m_GroupsService.GetAgentActiveMembership(requestingAgentID, agentID); + } + else + { + membership = m_GroupsService.GetAgentGroupMembership(requestingAgentID, agentID, groupID); + } + + if (membership == null) + NullResult(result, "No such membership"); + else + result["RESULT"] = GroupsDataUtils.GroupMembershipData(membership); + } + else + { + List memberships = m_GroupsService.GetAgentGroupMemberships(requestingAgentID, agentID); + if (memberships == null || (memberships != null && memberships.Count == 0)) + { + NullResult(result, "No memberships"); + } + else + { + Dictionary dict = new Dictionary(); + int i = 0; + foreach (GroupMembershipData m in memberships) + dict["m-" + i++] = GroupsDataUtils.GroupMembershipData((ExtendedGroupMembershipData)m); + + result["RESULT"] = dict; + } + } + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleGetGroupMembers(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + string requestingAgentID = request["RequestingAgentID"].ToString(); + + List members = m_GroupsService.GetGroupMembers(requestingAgentID, groupID); + if (members == null || (members != null && members.Count == 0)) + { + NullResult(result, "No members"); + } + else + { + Dictionary dict = new Dictionary(); + int i = 0; + foreach (ExtendedGroupMembersData m in members) + { + dict["m-" + i++] = GroupsDataUtils.GroupMembersData(m); + } + + result["RESULT"] = dict; + } + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandlePutRole(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || !request.ContainsKey("RoleID") || + !request.ContainsKey("Name") || !request.ContainsKey("Descrption") || !request.ContainsKey("Title") || + !request.ContainsKey("Powers") || !request.ContainsKey("OP")) + NullResult(result, "Bad network data"); + + else + { + string op = request["OP"].ToString(); + string reason = string.Empty; + + bool success = false; + if (op == "ADD") + success = m_GroupsService.AddGroupRole(request["RequestingAgentID"].ToString(), new UUID(request["GroupID"].ToString()), + new UUID(request["RoleID"].ToString()), request["Name"].ToString(), request["Description"].ToString(), + request["Title"].ToString(), UInt64.Parse(request["Powers"].ToString()), out reason); + + else if (op == "UPDATE") + success = m_GroupsService.UpdateGroupRole(request["RequestingAgentID"].ToString(), new UUID(request["GroupID"].ToString()), + new UUID(request["RoleID"].ToString()), request["Name"].ToString(), request["Description"].ToString(), + request["Title"].ToString(), UInt64.Parse(request["Powers"].ToString())); + + result["RESULT"] = success.ToString(); + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleRemoveRole(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || !request.ContainsKey("RoleID")) + NullResult(result, "Bad network data"); + + else + { + m_GroupsService.RemoveGroupRole(request["RequestingAgentID"].ToString(), new UUID(request["GroupID"].ToString()), + new UUID(request["RoleID"].ToString())); + result["RESULT"] = "true"; + } + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(ServerUtils.BuildXmlResponse(result)); + } + + byte[] HandleGetGroupRoles(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + string requestingAgentID = request["RequestingAgentID"].ToString(); + + List roles = m_GroupsService.GetGroupRoles(requestingAgentID, groupID); + if (roles == null || (roles != null && roles.Count == 0)) + { + NullResult(result, "No members"); + } + else + { + Dictionary dict = new Dictionary(); + int i = 0; + foreach (GroupRolesData r in roles) + dict["r-" + i++] = GroupsDataUtils.GroupRolesData(r); + + result["RESULT"] = dict; + } + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleGetRoleMembers(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + string requestingAgentID = request["RequestingAgentID"].ToString(); + + List rmembers = m_GroupsService.GetGroupRoleMembers(requestingAgentID, groupID); + if (rmembers == null || (rmembers != null && rmembers.Count == 0)) + { + NullResult(result, "No members"); + } + else + { + Dictionary dict = new Dictionary(); + int i = 0; + foreach (ExtendedGroupRoleMembersData rm in rmembers) + dict["rm-" + i++] = GroupsDataUtils.GroupRoleMembersData(rm); + + result["RESULT"] = dict; + } + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleAgentRole(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || !request.ContainsKey("RoleID") || + !request.ContainsKey("AgentID") || !request.ContainsKey("OP")) + NullResult(result, "Bad network data"); + + else + { + string op = request["OP"].ToString(); + string reason = string.Empty; + + bool success = false; + if (op == "ADD") + success = m_GroupsService.AddAgentToGroupRole(request["RequestingAgentID"].ToString(), request["AgentID"].ToString(), + new UUID(request["GroupID"].ToString()), new UUID(request["RoleID"].ToString())); + + else if (op == "DELETE") + success = m_GroupsService.RemoveAgentFromGroupRole(request["RequestingAgentID"].ToString(), request["AgentID"].ToString(), + new UUID(request["GroupID"].ToString()), new UUID(request["RoleID"].ToString())); + + result["RESULT"] = success.ToString(); + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleGetAgentRoles(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || !request.ContainsKey("AgentID")) + NullResult(result, "Bad network data"); + else + { + UUID groupID = new UUID(request["GroupID"].ToString()); + string agentID = request["AgentID"].ToString(); + string requestingAgentID = request["RequestingAgentID"].ToString(); + + List roles = m_GroupsService.GetAgentGroupRoles(requestingAgentID, agentID, groupID); + if (roles == null || (roles != null && roles.Count == 0)) + { + NullResult(result, "No members"); + } + else + { + Dictionary dict = new Dictionary(); + int i = 0; + foreach (GroupRolesData r in roles) + dict["r-" + i++] = GroupsDataUtils.GroupRolesData(r); + + result["RESULT"] = dict; + } + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleSetActive(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || + !request.ContainsKey("AgentID") || !request.ContainsKey("OP")) + { + NullResult(result, "Bad network data"); + string xmlString = ServerUtils.BuildXmlResponse(result); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + else + { + string op = request["OP"].ToString(); + string reason = string.Empty; + + if (op == "GROUP") + { + ExtendedGroupMembershipData group = m_GroupsService.SetAgentActiveGroup(request["RequestingAgentID"].ToString(), + request["AgentID"].ToString(), new UUID(request["GroupID"].ToString())); + + if (group == null) + NullResult(result, "Internal error"); + else + result["RESULT"] = GroupsDataUtils.GroupMembershipData(group); + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + + } + else if (op == "ROLE" && request.ContainsKey("RoleID")) + { + m_GroupsService.SetAgentActiveGroupRole(request["RequestingAgentID"].ToString(), request["AgentID"].ToString(), + new UUID(request["GroupID"].ToString()), new UUID(request["RoleID"].ToString())); + result["RESULT"] = "true"; + } + + return Util.UTF8NoBomEncoding.GetBytes(ServerUtils.BuildXmlResponse(result)); + } + + } + + byte[] HandleUpdateMembership(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("AgentID") || !request.ContainsKey("GroupID") || + !request.ContainsKey("AcceptNotices") || !request.ContainsKey("ListInProfile")) + NullResult(result, "Bad network data"); + + else + { + m_GroupsService.UpdateMembership(request["RequestingAgentID"].ToString(), request["AgentID"].ToString(), new UUID(request["GroupID"].ToString()), + bool.Parse(request["AcceptNotices"].ToString()), bool.Parse(request["ListInProfile"].ToString())); + + result["RESULT"] = "true"; + } + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(ServerUtils.BuildXmlResponse(result)); + } + + byte[] HandleInvite(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("InviteID")) + { + NullResult(result, "Bad network data"); + string xmlString = ServerUtils.BuildXmlResponse(result); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + else + { + string op = request["OP"].ToString(); + string reason = string.Empty; + + if (op == "ADD" && request.ContainsKey("GroupID") && request.ContainsKey("RoleID") && request.ContainsKey("AgentID")) + { + bool success = m_GroupsService.AddAgentToGroupInvite(request["RequestingAgentID"].ToString(), + new UUID(request["InviteID"].ToString()), new UUID(request["GroupID"].ToString()), + new UUID(request["RoleID"].ToString()), request["AgentID"].ToString()); + + result["RESULT"] = success.ToString(); + return Util.UTF8NoBomEncoding.GetBytes(ServerUtils.BuildXmlResponse(result)); + + } + else if (op == "DELETE") + { + m_GroupsService.RemoveAgentToGroupInvite(request["RequestingAgentID"].ToString(), new UUID(request["InviteID"].ToString())); + result["RESULT"] = "true"; + return Util.UTF8NoBomEncoding.GetBytes(ServerUtils.BuildXmlResponse(result)); + } + else if (op == "GET") + { + GroupInviteInfo invite = m_GroupsService.GetAgentToGroupInvite(request["RequestingAgentID"].ToString(), + new UUID(request["InviteID"].ToString())); + + result["RESULT"] = GroupsDataUtils.GroupInviteInfo(invite); + return Util.UTF8NoBomEncoding.GetBytes(ServerUtils.BuildXmlResponse(result)); + } + + NullResult(result, "Bad OP in request"); + return Util.UTF8NoBomEncoding.GetBytes(ServerUtils.BuildXmlResponse(result)); + } + + } + + byte[] HandleAddNotice(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID") || !request.ContainsKey("GroupID") || !request.ContainsKey("NoticeID") || + !request.ContainsKey("FromName") || !request.ContainsKey("Subject") || !request.ContainsKey("Message") || + !request.ContainsKey("HasAttachment")) + NullResult(result, "Bad network data"); + + else + { + + bool hasAtt = bool.Parse(request["HasAttachment"].ToString()); + byte attType = 0; + string attName = string.Empty; + string attOwner = string.Empty; + UUID attItem = UUID.Zero; + if (request.ContainsKey("AttachmentType")) + attType = byte.Parse(request["AttachmentType"].ToString()); + if (request.ContainsKey("AttachmentName")) + attName = request["AttachmentName"].ToString(); + if (request.ContainsKey("AttachmentItemID")) + attItem = new UUID(request["AttachmentItemID"].ToString()); + if (request.ContainsKey("AttachmentOwnerID")) + attOwner = request["AttachmentOwnerID"].ToString(); + + bool success = m_GroupsService.AddGroupNotice(request["RequestingAgentID"].ToString(), new UUID(request["GroupID"].ToString()), + new UUID(request["NoticeID"].ToString()), request["FromName"].ToString(), request["Subject"].ToString(), + request["Message"].ToString(), hasAtt, attType, attName, attItem, attOwner); + + result["RESULT"] = success.ToString(); + } + + string xmlString = ServerUtils.BuildXmlResponse(result); + + //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + byte[] HandleGetNotices(Dictionary request) + { + Dictionary result = new Dictionary(); + + if (!request.ContainsKey("RequestingAgentID")) + NullResult(result, "Bad network data"); + + else if (request.ContainsKey("NoticeID")) // just one + { + GroupNoticeInfo notice = m_GroupsService.GetGroupNotice(request["RequestingAgentID"].ToString(), new UUID(request["NoticeID"].ToString())); + + if (notice == null) + NullResult(result, "NO such notice"); + else + result["RESULT"] = GroupsDataUtils.GroupNoticeInfo(notice); + + } + else if (request.ContainsKey("GroupID")) // all notices for group + { + List notices = m_GroupsService.GetGroupNotices(request["RequestingAgentID"].ToString(), new UUID(request["GroupID"].ToString())); + + if (notices == null || (notices != null && notices.Count == 0)) + NullResult(result, "No notices"); + else + { + Dictionary dict = new Dictionary(); + int i = 0; + foreach (ExtendedGroupNoticeData n in notices) + dict["n-" + i++] = GroupsDataUtils.GroupNoticeData(n); + + result["RESULT"] = dict; + } + + } + else + NullResult(result, "Bad OP in request"); + + string xmlString = ServerUtils.BuildXmlResponse(result); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + + + #region Helpers + + private void NullResult(Dictionary result, string reason) + { + result["RESULT"] = "NULL"; + result["REASON"] = reason; + } + + private byte[] FailureResult() + { + Dictionary result = new Dictionary(); + NullResult(result, "Unknown method"); + string xmlString = ServerUtils.BuildXmlResponse(result); + return Util.UTF8NoBomEncoding.GetBytes(xmlString); + } + #endregion + } +} diff --git a/OpenSim/Addons/Groups/RemoteConnectorCacheWrapper.cs b/OpenSim/Addons/Groups/RemoteConnectorCacheWrapper.cs new file mode 100644 index 0000000000..f789626d07 --- /dev/null +++ b/OpenSim/Addons/Groups/RemoteConnectorCacheWrapper.cs @@ -0,0 +1,824 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Threading; + +using OpenSim.Framework; +using OpenSim.Region.Framework.Interfaces; + +using OpenMetaverse; + +namespace OpenSim.Groups +{ + public delegate ExtendedGroupRecord GroupRecordDelegate(); + public delegate GroupMembershipData GroupMembershipDelegate(); + public delegate List GroupMembershipListDelegate(); + public delegate List GroupMembersListDelegate(); + public delegate List GroupRolesListDelegate(); + public delegate List RoleMembersListDelegate(); + public delegate GroupNoticeInfo NoticeDelegate(); + public delegate List NoticeListDelegate(); + public delegate void VoidDelegate(); + public delegate bool BooleanDelegate(); + + public class RemoteConnectorCacheWrapper + { + private ForeignImporter m_ForeignImporter; + + private Dictionary m_ActiveRequests = new Dictionary(); + private const int GROUPS_CACHE_TIMEOUT = 5 * 60; // 5 minutes + + // This all important cache cahces objects of different types: + // group- or group- => ExtendedGroupRecord + // active- => GroupMembershipData + // membership-- => GroupMembershipData + // memberships- => List + // members-- => List + // role- => GroupRolesData + // roles- => List ; all roles in the group + // roles-- => List ; roles that the agent has + // rolemembers-- => List + // notice- => GroupNoticeInfo + // notices- => List + private ExpiringCache m_Cache = new ExpiringCache(); + + public RemoteConnectorCacheWrapper(IUserManagement uman) + { + m_ForeignImporter = new ForeignImporter(uman); + } + + public UUID CreateGroup(UUID RequestingAgentID, GroupRecordDelegate d) + { + //m_log.DebugFormat("[Groups.RemoteConnector]: Creating group {0}", name); + //reason = string.Empty; + + //ExtendedGroupRecord group = m_GroupsService.CreateGroup(RequestingAgentID.ToString(), name, charter, showInList, insigniaID, + // membershipFee, openEnrollment, allowPublish, maturePublish, founderID, out reason); + ExtendedGroupRecord group = d(); + + if (group == null) + return UUID.Zero; + + if (group.GroupID != UUID.Zero) + lock (m_Cache) + { + m_Cache.Add("group-" + group.GroupID.ToString(), group, GROUPS_CACHE_TIMEOUT); + if (m_Cache.Contains("memberships-" + RequestingAgentID.ToString())) + m_Cache.Remove("memberships-" + RequestingAgentID.ToString()); + } + + return group.GroupID; + } + + public bool UpdateGroup(UUID groupID, GroupRecordDelegate d) + { + //reason = string.Empty; + //ExtendedGroupRecord group = m_GroupsService.UpdateGroup(RequestingAgentID, groupID, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish); + ExtendedGroupRecord group = d(); + + if (group != null && group.GroupID != UUID.Zero) + lock (m_Cache) + m_Cache.AddOrUpdate("group-" + group.GroupID.ToString(), group, GROUPS_CACHE_TIMEOUT); + return true; + } + + public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string GroupName, GroupRecordDelegate d) + { + //if (GroupID == UUID.Zero && (GroupName == null || GroupName != null && GroupName == string.Empty)) + // return null; + + object group = null; + bool firstCall = false; + string cacheKey = "group-"; + if (GroupID != UUID.Zero) + cacheKey += GroupID.ToString(); + else + cacheKey += GroupName; + + //m_log.DebugFormat("[XXX]: GetGroupRecord {0}", cacheKey); + + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out group)) + { + //m_log.DebugFormat("[XXX]: GetGroupRecord {0} cached!", cacheKey); + return (ExtendedGroupRecord)group; + } + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + //group = m_GroupsService.GetGroupRecord(RequestingAgentID, GroupID, GroupName); + group = d(); + + lock (m_Cache) + { + m_Cache.AddOrUpdate(cacheKey, group, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + return (ExtendedGroupRecord)group; + } + } + else + Thread.Sleep(50); + } + } + + public bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, GroupMembershipDelegate d) + { + GroupMembershipData membership = d(); + if (membership == null) + return false; + + lock (m_Cache) + { + // first, remove everything! add a user is a heavy-duty op + m_Cache.Clear(); + + m_Cache.AddOrUpdate("active-" + AgentID.ToString(), membership, GROUPS_CACHE_TIMEOUT); + m_Cache.AddOrUpdate("membership-" + AgentID.ToString() + "-" + GroupID.ToString(), membership, GROUPS_CACHE_TIMEOUT); + } + + + return true; + } + + public void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID, VoidDelegate d) + { + d(); + + lock (m_Cache) + { + string cacheKey = "active-" + AgentID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + cacheKey = "memberships-" + AgentID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + cacheKey = "membership-" + AgentID.ToString() + "-" + GroupID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + cacheKey = "members-" + RequestingAgentID.ToString() + "-" + GroupID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + cacheKey = "roles-" + "-" + GroupID.ToString() + "-" + AgentID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + } + } + + public void SetAgentActiveGroup(string AgentID, GroupMembershipDelegate d) + { + GroupMembershipData activeGroup = d(); + if (activeGroup != null) + { + string cacheKey = "active-" + AgentID.ToString(); + lock (m_Cache) + if (m_Cache.Contains(cacheKey)) + m_Cache.AddOrUpdate(cacheKey, activeGroup, GROUPS_CACHE_TIMEOUT); + } + } + + public ExtendedGroupMembershipData GetAgentActiveMembership(string AgentID, GroupMembershipDelegate d) + { + object membership = null; + bool firstCall = false; + string cacheKey = "active-" + AgentID.ToString(); + + //m_log.DebugFormat("[XXX]: GetAgentActiveMembership {0}", cacheKey); + + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out membership)) + { + //m_log.DebugFormat("[XXX]: GetAgentActiveMembership {0} cached!", cacheKey); + return (ExtendedGroupMembershipData)membership; + } + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + membership = d(); + + lock (m_Cache) + { + m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + return (ExtendedGroupMembershipData)membership; + } + } + else + Thread.Sleep(50); + } + + } + + public ExtendedGroupMembershipData GetAgentGroupMembership(string AgentID, UUID GroupID, GroupMembershipDelegate d) + { + object membership = null; + bool firstCall = false; + string cacheKey = "membership-" + AgentID.ToString() + "-" + GroupID.ToString(); + + //m_log.DebugFormat("[XXX]: GetAgentGroupMembership {0}", cacheKey); + + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out membership)) + { + //m_log.DebugFormat("[XXX]: GetAgentGroupMembership {0}", cacheKey); + return (ExtendedGroupMembershipData)membership; + } + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + membership = d(); + lock (m_Cache) + { + m_Cache.AddOrUpdate(cacheKey, membership, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + return (ExtendedGroupMembershipData)membership; + } + } + else + Thread.Sleep(50); + } + } + + public List GetAgentGroupMemberships(string AgentID, GroupMembershipListDelegate d) + { + object memberships = null; + bool firstCall = false; + string cacheKey = "memberships-" + AgentID.ToString(); + + //m_log.DebugFormat("[XXX]: GetAgentGroupMemberships {0}", cacheKey); + + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out memberships)) + { + //m_log.DebugFormat("[XXX]: GetAgentGroupMemberships {0} cached!", cacheKey); + return (List)memberships; + } + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + memberships = d(); + lock (m_Cache) + { + m_Cache.AddOrUpdate(cacheKey, memberships, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + return (List)memberships; + } + } + else + Thread.Sleep(50); + } + } + + public List GetGroupMembers(string RequestingAgentID, UUID GroupID, GroupMembersListDelegate d) + { + object members = null; + bool firstCall = false; + // we need to key in also on the requester, because different ppl have different view privileges + string cacheKey = "members-" + RequestingAgentID.ToString() + "-" + GroupID.ToString(); + + //m_log.DebugFormat("[XXX]: GetGroupMembers {0}", cacheKey); + + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out members)) + { + List xx = (List)members; + return xx.ConvertAll(new Converter(m_ForeignImporter.ConvertGroupMembersData)); + } + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + List _members = d(); + + if (_members != null && _members.Count > 0) + members = _members.ConvertAll(new Converter(m_ForeignImporter.ConvertGroupMembersData)); + else + members = new List(); + + lock (m_Cache) + { + //m_Cache.AddOrUpdate(cacheKey, members, GROUPS_CACHE_TIMEOUT); + m_Cache.AddOrUpdate(cacheKey, _members, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + + return (List)members; + } + } + else + Thread.Sleep(50); + } + } + + public bool AddGroupRole(UUID roleID, string description, string name, ulong powers, string title, BooleanDelegate d) + { + if (d()) + { + GroupRolesData role = new GroupRolesData(); + role.Description = description; + role.Members = 0; + role.Name = name; + role.Powers = powers; + role.RoleID = roleID; + role.Title = title; + + lock (m_Cache) + m_Cache.AddOrUpdate("role-" + roleID.ToString(), role, GROUPS_CACHE_TIMEOUT); + + return true; + } + + return false; + } + + public bool UpdateGroupRole(UUID groupID, UUID roleID, string name, string description, string title, ulong powers, BooleanDelegate d) + { + if (d()) + { + object role; + lock (m_Cache) + if (m_Cache.TryGetValue("role-" + roleID.ToString(), out role)) + { + GroupRolesData r = (GroupRolesData)role; + r.Description = description; + r.Name = name; + r.Powers = powers; + r.Title = title; + + m_Cache.Update("role-" + roleID.ToString(), r, GROUPS_CACHE_TIMEOUT); + } + return true; + } + else + { + lock (m_Cache) + { + if (m_Cache.Contains("role-" + roleID.ToString())) + m_Cache.Remove("role-" + roleID.ToString()); + + // also remove these lists, because they will have an outdated role + if (m_Cache.Contains("roles-" + groupID.ToString())) + m_Cache.Remove("roles-" + groupID.ToString()); + + } + + return false; + } + } + + public void RemoveGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, VoidDelegate d) + { + d(); + + lock (m_Cache) + { + if (m_Cache.Contains("role-" + roleID.ToString())) + m_Cache.Remove("role-" + roleID.ToString()); + + // also remove the list, because it will have an removed role + if (m_Cache.Contains("roles-" + groupID.ToString())) + m_Cache.Remove("roles-" + groupID.ToString()); + + if (m_Cache.Contains("roles-" + groupID.ToString() + "-" + RequestingAgentID.ToString())) + m_Cache.Remove("roles-" + groupID.ToString() + "-" + RequestingAgentID.ToString()); + + if (m_Cache.Contains("rolemembers-" + RequestingAgentID.ToString() + "-" + groupID.ToString())) + m_Cache.Remove("rolemembers-" + RequestingAgentID.ToString() + "-" + groupID.ToString()); + } + } + + public List GetGroupRoles(string RequestingAgentID, UUID GroupID, GroupRolesListDelegate d) + { + object roles = null; + bool firstCall = false; + string cacheKey = "roles-" + GroupID.ToString(); + + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out roles)) + return (List)roles; + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + roles = d(); + if (roles != null) + { + lock (m_Cache) + { + m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + return (List)roles; + } + } + } + else + Thread.Sleep(50); + } + } + + public List GetGroupRoleMembers(string RequestingAgentID, UUID GroupID, RoleMembersListDelegate d) + { + object rmembers = null; + bool firstCall = false; + // we need to key in also on the requester, because different ppl have different view privileges + string cacheKey = "rolemembers-" + RequestingAgentID.ToString() + "-" + GroupID.ToString(); + + //m_log.DebugFormat("[XXX]: GetGroupRoleMembers {0}", cacheKey); + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out rmembers)) + { + List xx = (List)rmembers; + return xx.ConvertAll(m_ForeignImporter.ConvertGroupRoleMembersData); + } + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + List _rmembers = d(); + + if (_rmembers != null && _rmembers.Count > 0) + rmembers = _rmembers.ConvertAll(new Converter(m_ForeignImporter.ConvertGroupRoleMembersData)); + else + rmembers = new List(); + + lock (m_Cache) + { + // For some strange reason, when I cache the list of GroupRoleMembersData, + // it gets emptied out. The TryGet gets an empty list... + //m_Cache.AddOrUpdate(cacheKey, rmembers, GROUPS_CACHE_TIMEOUT); + // Caching the list of ExtendedGroupRoleMembersData doesn't show that issue + // I don't get it. + m_Cache.AddOrUpdate(cacheKey, _rmembers, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + return (List)rmembers; + } + } + else + Thread.Sleep(50); + } + } + + public void AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, BooleanDelegate d) + { + if (d()) + { + lock (m_Cache) + { + // update the cached role + string cacheKey = "role-" + RoleID.ToString(); + object obj; + if (m_Cache.TryGetValue(cacheKey, out obj)) + { + GroupRolesData r = (GroupRolesData)obj; + r.Members++; + } + + // add this agent to the list of role members + cacheKey = "rolemembers-" + RequestingAgentID.ToString() + "-" + GroupID.ToString(); + if (m_Cache.TryGetValue(cacheKey, out obj)) + { + try + { + // This may throw an exception, in which case the agentID is not a UUID but a full ID + // In that case, let's just remove the whoe things from the cache + UUID id = new UUID(AgentID); + List xx = (List)obj; + List rmlist = xx.ConvertAll(m_ForeignImporter.ConvertGroupRoleMembersData); + GroupRoleMembersData rm = new GroupRoleMembersData(); + rm.MemberID = id; + rm.RoleID = RoleID; + rmlist.Add(rm); + } + catch + { + m_Cache.Remove(cacheKey); + } + } + + // Remove the cached info about this agent's roles + // because we don't have enough local info about the new role + cacheKey = "roles-" + GroupID.ToString() + "-" + AgentID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + } + } + } + + public void RemoveAgentFromGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, BooleanDelegate d) + { + if (d()) + { + lock (m_Cache) + { + // update the cached role + string cacheKey = "role-" + RoleID.ToString(); + object obj; + if (m_Cache.TryGetValue(cacheKey, out obj)) + { + GroupRolesData r = (GroupRolesData)obj; + r.Members--; + } + + cacheKey = "roles-" + GroupID.ToString() + "-" + AgentID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + cacheKey = "rolemembers-" + RequestingAgentID.ToString() + "-" + GroupID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + } + } + } + + public List GetAgentGroupRoles(string RequestingAgentID, string AgentID, UUID GroupID, GroupRolesListDelegate d) + { + object roles = null; + bool firstCall = false; + string cacheKey = "roles-" + GroupID.ToString() + "-" + AgentID.ToString(); + + //m_log.DebugFormat("[XXX]: GetAgentGroupRoles {0}", cacheKey); + + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out roles)) + { + //m_log.DebugFormat("[XXX]: GetAgentGroupRoles {0} cached!", cacheKey); + return (List)roles; + } + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + roles = d(); + lock (m_Cache) + { + m_Cache.AddOrUpdate(cacheKey, roles, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + return (List)roles; + } + } + else + Thread.Sleep(50); + } + } + + public void SetAgentActiveGroupRole(string AgentID, UUID GroupID, VoidDelegate d) + { + d(); + + lock (m_Cache) + { + // Invalidate cached info, because it has ActiveRoleID and Powers + string cacheKey = "membership-" + AgentID.ToString() + "-" + GroupID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + cacheKey = "memberships-" + AgentID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + } + } + + public void UpdateMembership(string AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile, VoidDelegate d) + { + d(); + + lock (m_Cache) + { + string cacheKey = "membership-" + AgentID.ToString() + "-" + GroupID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + cacheKey = "memberships-" + AgentID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + cacheKey = "active-" + AgentID.ToString(); + object m = null; + if (m_Cache.TryGetValue(cacheKey, out m)) + { + GroupMembershipData membership = (GroupMembershipData)m; + membership.ListInProfile = ListInProfile; + membership.AcceptNotices = AcceptNotices; + } + } + } + + public bool AddGroupNotice(UUID groupID, UUID noticeID, GroupNoticeInfo notice, BooleanDelegate d) + { + if (d()) + { + lock (m_Cache) + { + m_Cache.AddOrUpdate("notice-" + noticeID.ToString(), notice, GROUPS_CACHE_TIMEOUT); + string cacheKey = "notices-" + groupID.ToString(); + if (m_Cache.Contains(cacheKey)) + m_Cache.Remove(cacheKey); + + } + + return true; + } + + return false; + } + + public GroupNoticeInfo GetGroupNotice(UUID noticeID, NoticeDelegate d) + { + object notice = null; + bool firstCall = false; + string cacheKey = "notice-" + noticeID.ToString(); + + //m_log.DebugFormat("[XXX]: GetAgentGroupRoles {0}", cacheKey); + + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out notice)) + { + return (GroupNoticeInfo)notice; + } + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + GroupNoticeInfo _notice = d(); + + lock (m_Cache) + { + m_Cache.AddOrUpdate(cacheKey, _notice, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + return _notice; + } + } + else + Thread.Sleep(50); + } + } + + public List GetGroupNotices(UUID GroupID, NoticeListDelegate d) + { + object notices = null; + bool firstCall = false; + string cacheKey = "notices-" + GroupID.ToString(); + + //m_log.DebugFormat("[XXX]: GetGroupNotices {0}", cacheKey); + + while (true) + { + lock (m_Cache) + { + if (m_Cache.TryGetValue(cacheKey, out notices)) + { + //m_log.DebugFormat("[XXX]: GetGroupNotices {0} cached!", cacheKey); + return (List)notices; + } + + // not cached + if (!m_ActiveRequests.ContainsKey(cacheKey)) + { + m_ActiveRequests.Add(cacheKey, true); + firstCall = true; + } + } + + if (firstCall) + { + notices = d(); + + lock (m_Cache) + { + m_Cache.AddOrUpdate(cacheKey, notices, GROUPS_CACHE_TIMEOUT); + m_ActiveRequests.Remove(cacheKey); + return (List)notices; + } + } + else + Thread.Sleep(50); + } + } + + + } +} diff --git a/OpenSim/Addons/Groups/Service/GroupsService.cs b/OpenSim/Addons/Groups/Service/GroupsService.cs new file mode 100644 index 0000000000..fc567dd6c3 --- /dev/null +++ b/OpenSim/Addons/Groups/Service/GroupsService.cs @@ -0,0 +1,1014 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Timers; +using log4net; +using Nini.Config; + +using OpenMetaverse; +using OpenSim.Data; +using OpenSim.Framework; +using OpenSim.Services.Interfaces; + +namespace OpenSim.Groups +{ + public class GroupsService : GroupsServiceBase + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + public const GroupPowers DefaultEveryonePowers = GroupPowers.AllowSetHome | + GroupPowers.Accountable | + GroupPowers.JoinChat | + GroupPowers.AllowVoiceChat | + GroupPowers.ReceiveNotices | + GroupPowers.StartProposal | + GroupPowers.VoteOnProposal; + + public const GroupPowers OwnerPowers = GroupPowers.Accountable | + GroupPowers.AllowEditLand | + GroupPowers.AllowFly | + GroupPowers.AllowLandmark | + GroupPowers.AllowRez | + GroupPowers.AllowSetHome | + GroupPowers.AllowVoiceChat | + GroupPowers.AssignMember | + GroupPowers.AssignMemberLimited | + GroupPowers.ChangeActions | + GroupPowers.ChangeIdentity | + GroupPowers.ChangeMedia | + GroupPowers.ChangeOptions | + GroupPowers.CreateRole | + GroupPowers.DeedObject | + GroupPowers.DeleteRole | + GroupPowers.Eject | + GroupPowers.FindPlaces | + GroupPowers.Invite | + GroupPowers.JoinChat | + GroupPowers.LandChangeIdentity | + GroupPowers.LandDeed | + GroupPowers.LandDivideJoin | + GroupPowers.LandEdit | + GroupPowers.LandEjectAndFreeze | + GroupPowers.LandGardening | + GroupPowers.LandManageAllowed | + GroupPowers.LandManageBanned | + GroupPowers.LandManagePasses | + GroupPowers.LandOptions | + GroupPowers.LandRelease | + GroupPowers.LandSetSale | + GroupPowers.ModerateChat | + GroupPowers.ObjectManipulate | + GroupPowers.ObjectSetForSale | + GroupPowers.ReceiveNotices | + GroupPowers.RemoveMember | + GroupPowers.ReturnGroupOwned | + GroupPowers.ReturnGroupSet | + GroupPowers.ReturnNonGroup | + GroupPowers.RoleProperties | + GroupPowers.SendNotices | + GroupPowers.SetLandingPoint | + GroupPowers.StartProposal | + GroupPowers.VoteOnProposal; + + #region Daily Cleanup + + private Timer m_CleanupTimer; + + public GroupsService(IConfigSource config, string configName) + : base(config, configName) + { + } + + public GroupsService(IConfigSource config) + : this(config, string.Empty) + { + // Once a day + m_CleanupTimer = new Timer(24 * 60 * 60 * 1000); + m_CleanupTimer.AutoReset = true; + m_CleanupTimer.Elapsed += new ElapsedEventHandler(m_CleanupTimer_Elapsed); + m_CleanupTimer.Enabled = true; + m_CleanupTimer.Start(); + } + + private void m_CleanupTimer_Elapsed(object sender, ElapsedEventArgs e) + { + m_Database.DeleteOldNotices(); + m_Database.DeleteOldInvites(); + } + + #endregion + + public UUID CreateGroup(string RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, + bool allowPublish, bool maturePublish, UUID founderID, out string reason) + { + reason = string.Empty; + + // Create the group + GroupData data = new GroupData(); + data.GroupID = UUID.Random(); + data.Data = new Dictionary(); + data.Data["Name"] = name; + data.Data["Charter"] = charter; + data.Data["InsigniaID"] = insigniaID.ToString(); + data.Data["FounderID"] = founderID.ToString(); + data.Data["MembershipFee"] = membershipFee.ToString(); + data.Data["OpenEnrollment"] = openEnrollment ? "1" : "0"; + data.Data["ShowInList"] = showInList ? "1" : "0"; + data.Data["AllowPublish"] = allowPublish ? "1" : "0"; + data.Data["MaturePublish"] = maturePublish ? "1" : "0"; + data.Data["OwnerRoleID"] = UUID.Random().ToString(); + + if (!m_Database.StoreGroup(data)) + return UUID.Zero; + + // Create Everyone role + _AddOrUpdateGroupRole(RequestingAgentID, data.GroupID, UUID.Zero, "Everyone", "Everyone in the group", "Member of " + name, (ulong)DefaultEveryonePowers, true); + + // Create Owner role + UUID roleID = UUID.Random(); + _AddOrUpdateGroupRole(RequestingAgentID, data.GroupID, roleID, "Owners", "Owners of the group", "Owner of " + name, (ulong)OwnerPowers, true); + + // Add founder to group + _AddAgentToGroup(RequestingAgentID, founderID.ToString(), data.GroupID, roleID); + + return data.GroupID; + } + + public void UpdateGroup(string RequestingAgentID, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) + { + GroupData data = m_Database.RetrieveGroup(groupID); + if (data == null) + return; + + // Check perms + if (!HasPower(RequestingAgentID, groupID, GroupPowers.ChangeActions)) + { + m_log.DebugFormat("[Groups]: ({0}) Attempt at updating group {1} denied because of lack of permission", RequestingAgentID, groupID); + return; + } + + data.GroupID = groupID; + data.Data["Charter"] = charter; + data.Data["ShowInList"] = showInList ? "1" : "0"; + data.Data["InsigniaID"] = insigniaID.ToString(); + data.Data["MembershipFee"] = membershipFee.ToString(); + data.Data["OpenEnrollment"] = openEnrollment ? "1" : "0"; + data.Data["AllowPublish"] = allowPublish ? "1" : "0"; + data.Data["MaturePublish"] = maturePublish ? "1" : "0"; + + m_Database.StoreGroup(data); + + } + + public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID) + { + GroupData data = m_Database.RetrieveGroup(GroupID); + + return _GroupDataToRecord(data); + } + + public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, string GroupName) + { + GroupData data = m_Database.RetrieveGroup(GroupName); + + return _GroupDataToRecord(data); + } + + public List FindGroups(string RequestingAgentID, string search) + { + List groups = new List(); + + GroupData[] data = m_Database.RetrieveGroups(search); + + if (data != null && data.Length > 0) + { + foreach (GroupData d in data) + { + // Don't list group proxies + if (d.Data.ContainsKey("Location") && d.Data["Location"] != string.Empty) + continue; + + DirGroupsReplyData g = new DirGroupsReplyData(); + g.groupID = d.GroupID; + + if (d.Data.ContainsKey("Name")) + g.groupName = d.Data["Name"]; + else + m_log.DebugFormat("[Groups]: Key Name not found"); + + g.members = m_Database.MemberCount(d.GroupID); + + groups.Add(g); + } + } + + return groups; + } + + public List GetGroupMembers(string RequestingAgentID, UUID GroupID) + { + List members = new List(); + + GroupData group = m_Database.RetrieveGroup(GroupID); + if (group == null) + return members; + + UUID ownerRoleID = new UUID(group.Data["OwnerRoleID"]); + + RoleData[] roles = m_Database.RetrieveRoles(GroupID); + if (roles == null) + // something wrong with this group + return members; + List rolesList = new List(roles); + + // Is the requester a member of the group? + bool isInGroup = false; + if (m_Database.RetrieveMember(GroupID, RequestingAgentID) != null) + isInGroup = true; + + if (!isInGroup) // reduce the roles to the visible ones + rolesList = rolesList.FindAll(r => (UInt64.Parse(r.Data["Powers"]) & (ulong)GroupPowers.MemberVisible) != 0); + + MembershipData[] datas = m_Database.RetrieveMembers(GroupID); + if (datas == null || (datas != null && datas.Length == 0)) + return members; + + // OK, we have everything we need + + foreach (MembershipData d in datas) + { + RoleMembershipData[] rolememberships = m_Database.RetrieveMemberRoles(GroupID, d.PrincipalID); + List rolemembershipsList = new List(rolememberships); + + ExtendedGroupMembersData m = new ExtendedGroupMembersData(); + + // What's this person's current role in the group? + UUID selectedRole = new UUID(d.Data["SelectedRoleID"]); + RoleData selected = rolesList.Find(r => r.RoleID == selectedRole); + + if (selected != null) + { + m.Title = selected.Data["Title"]; + m.AgentPowers = UInt64.Parse(selected.Data["Powers"]); + + m.AgentID = d.PrincipalID; + m.AcceptNotices = d.Data["AcceptNotices"] == "1" ? true : false; + m.Contribution = Int32.Parse(d.Data["Contribution"]); + m.ListInProfile = d.Data["ListInProfile"] == "1" ? true : false; + + // Is this person an owner of the group? + m.IsOwner = (rolemembershipsList.Find(r => r.RoleID == ownerRoleID) != null) ? true : false; + + members.Add(m); + } + } + + return members; + } + + public bool AddGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, out string reason) + { + reason = string.Empty; + // check that the requesting agent has permissions to add role + if (!HasPower(RequestingAgentID, groupID, GroupPowers.CreateRole)) + { + m_log.DebugFormat("[Groups]: ({0}) Attempt at creating role in group {1} denied because of lack of permission", RequestingAgentID, groupID); + reason = "Insufficient permission to create role"; + return false; + } + + return _AddOrUpdateGroupRole(RequestingAgentID, groupID, roleID, name, description, title, powers, true); + + } + + public bool UpdateGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers) + { + // check perms + if (!HasPower(RequestingAgentID, groupID, GroupPowers.ChangeActions)) + { + m_log.DebugFormat("[Groups]: ({0}) Attempt at changing role in group {1} denied because of lack of permission", RequestingAgentID, groupID); + return false; + } + + return _AddOrUpdateGroupRole(RequestingAgentID, groupID, roleID, name, description, title, powers, false); + } + + public void RemoveGroupRole(string RequestingAgentID, UUID groupID, UUID roleID) + { + // check perms + if (!HasPower(RequestingAgentID, groupID, GroupPowers.DeleteRole)) + { + m_log.DebugFormat("[Groups]: ({0}) Attempt at deleting role from group {1} denied because of lack of permission", RequestingAgentID, groupID); + return; + } + + // Can't delete Everyone and Owners roles + if (roleID == UUID.Zero) + { + m_log.DebugFormat("[Groups]: Attempt at deleting Everyone role from group {0} denied", groupID); + return; + } + + GroupData group = m_Database.RetrieveGroup(groupID); + if (group == null) + { + m_log.DebugFormat("[Groups]: Attempt at deleting role from non-existing group {0}", groupID); + return; + } + + if (roleID == new UUID(group.Data["OwnerRoleID"])) + { + m_log.DebugFormat("[Groups]: Attempt at deleting Owners role from group {0} denied", groupID); + return; + } + + _RemoveGroupRole(groupID, roleID); + } + + public List GetGroupRoles(string RequestingAgentID, UUID GroupID) + { + // TODO: check perms + return _GetGroupRoles(GroupID); + } + + public List GetGroupRoleMembers(string RequestingAgentID, UUID GroupID) + { + // TODO: check perms + + // Is the requester a member of the group? + bool isInGroup = false; + if (m_Database.RetrieveMember(GroupID, RequestingAgentID) != null) + isInGroup = true; + + return _GetGroupRoleMembers(GroupID, isInGroup); + } + + public bool AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string token, out string reason) + { + reason = string.Empty; + + _AddAgentToGroup(RequestingAgentID, AgentID, GroupID, RoleID, token); + + return true; + } + + public void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + // check perms + if (RequestingAgentID != AgentID && !HasPower(RequestingAgentID, GroupID, GroupPowers.Eject)) + return; + + _RemoveAgentFromGroup(RequestingAgentID, AgentID, GroupID); + } + + public bool AddAgentToGroupInvite(string RequestingAgentID, UUID inviteID, UUID groupID, UUID roleID, string agentID) + { + // Check whether the invitee is already a member of the group + MembershipData m = m_Database.RetrieveMember(groupID, agentID); + if (m != null) + return false; + + // Check permission to invite + if (!HasPower(RequestingAgentID, groupID, GroupPowers.Invite)) + { + m_log.DebugFormat("[Groups]: ({0}) Attempt at inviting to group {1} denied because of lack of permission", RequestingAgentID, groupID); + return false; + } + + // Check whether there are pending invitations and delete them + InvitationData invite = m_Database.RetrieveInvitation(groupID, agentID); + if (invite != null) + m_Database.DeleteInvite(invite.InviteID); + + invite = new InvitationData(); + invite.InviteID = inviteID; + invite.PrincipalID = agentID; + invite.GroupID = groupID; + invite.RoleID = roleID; + invite.Data = new Dictionary(); + + return m_Database.StoreInvitation(invite); + } + + public GroupInviteInfo GetAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + InvitationData data = m_Database.RetrieveInvitation(inviteID); + + if (data == null) + return null; + + GroupInviteInfo inviteInfo = new GroupInviteInfo(); + inviteInfo.AgentID = data.PrincipalID; + inviteInfo.GroupID = data.GroupID; + inviteInfo.InviteID = data.InviteID; + inviteInfo.RoleID = data.RoleID; + + return inviteInfo; + } + + public void RemoveAgentToGroupInvite(string RequestingAgentID, UUID inviteID) + { + m_Database.DeleteInvite(inviteID); + } + + public bool AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + //if (!m_Database.CheckOwnerRole(RequestingAgentID, GroupID, RoleID)) + // return; + + // check permissions + bool limited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMemberLimited); + bool unlimited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMember) | IsOwner(RequestingAgentID, GroupID); + if (!limited || !unlimited) + { + m_log.DebugFormat("[Groups]: ({0}) Attempt at assigning {1} to role {2} denied because of lack of permission", RequestingAgentID, AgentID, RoleID); + return false; + } + + // AssignMemberLimited means that the person can assign another person to the same roles that she has in the group + if (!unlimited && limited) + { + // check whether person's has this role + RoleMembershipData rolemembership = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); + if (rolemembership == null) + { + m_log.DebugFormat("[Groups]: ({0}) Attempt at assigning {1} to role {2} denied because of limited permission", RequestingAgentID, AgentID, RoleID); + return false; + } + } + + _AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); + + return true; + } + + public bool RemoveAgentFromGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + // Don't remove from Everyone role! + if (RoleID == UUID.Zero) + return false; + + // check permissions + bool unlimited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMember) || IsOwner(RequestingAgentID, GroupID); + if (!unlimited) + { + m_log.DebugFormat("[Groups]: ({0}) Attempt at removing {1} from role {2} denied because of lack of permission", RequestingAgentID, AgentID, RoleID); + return false; + } + + RoleMembershipData rolemember = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); + + if (rolemember == null) + return false; + + m_Database.DeleteRoleMember(rolemember); + + // Find another role for this person + UUID newRoleID = UUID.Zero; // Everyone + RoleMembershipData[] rdata = m_Database.RetrieveMemberRoles(GroupID, AgentID); + if (rdata != null) + foreach (RoleMembershipData r in rdata) + { + if (r.RoleID != UUID.Zero) + { + newRoleID = r.RoleID; + break; + } + } + + MembershipData member = m_Database.RetrieveMember(GroupID, AgentID); + if (member != null) + { + member.Data["SelectedRoleID"] = newRoleID.ToString(); + m_Database.StoreMember(member); + } + + return true; + } + + public List GetAgentGroupRoles(string RequestingAgentID, string AgentID, UUID GroupID) + { + List roles = new List(); + // TODO: check permissions + + RoleMembershipData[] data = m_Database.RetrieveMemberRoles(GroupID, AgentID); + if (data == null || (data != null && data.Length ==0)) + return roles; + + foreach (RoleMembershipData d in data) + { + RoleData rdata = m_Database.RetrieveRole(GroupID, d.RoleID); + if (rdata == null) // hippos + continue; + + GroupRolesData r = new GroupRolesData(); + r.Name = rdata.Data["Name"]; + r.Powers = UInt64.Parse(rdata.Data["Powers"]); + r.RoleID = rdata.RoleID; + r.Title = rdata.Data["Title"]; + + roles.Add(r); + } + + return roles; + } + + public ExtendedGroupMembershipData SetAgentActiveGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + // TODO: check perms + PrincipalData principal = new PrincipalData(); + principal.PrincipalID = AgentID; + principal.ActiveGroupID = GroupID; + m_Database.StorePrincipal(principal); + + return GetAgentGroupMembership(RequestingAgentID, AgentID, GroupID); + } + + public ExtendedGroupMembershipData GetAgentActiveMembership(string RequestingAgentID, string AgentID) + { + // 1. get the principal data for the active group + PrincipalData principal = m_Database.RetrievePrincipal(AgentID); + if (principal == null) + return null; + + return GetAgentGroupMembership(RequestingAgentID, AgentID, principal.ActiveGroupID); + } + + public ExtendedGroupMembershipData GetAgentGroupMembership(string RequestingAgentID, string AgentID, UUID GroupID) + { + return GetAgentGroupMembership(RequestingAgentID, AgentID, GroupID, null); + } + + private ExtendedGroupMembershipData GetAgentGroupMembership(string RequestingAgentID, string AgentID, UUID GroupID, MembershipData membership) + { + // 2. get the active group + GroupData group = m_Database.RetrieveGroup(GroupID); + if (group == null) + return null; + + // 3. get the membership info if we don't have it already + if (membership == null) + { + membership = m_Database.RetrieveMember(group.GroupID, AgentID); + if (membership == null) + return null; + } + + // 4. get the active role + UUID activeRoleID = new UUID(membership.Data["SelectedRoleID"]); + RoleData role = m_Database.RetrieveRole(group.GroupID, activeRoleID); + + ExtendedGroupMembershipData data = new ExtendedGroupMembershipData(); + data.AcceptNotices = membership.Data["AcceptNotices"] == "1" ? true : false; + data.AccessToken = membership.Data["AccessToken"]; + data.Active = true; + data.ActiveRole = activeRoleID; + data.AllowPublish = group.Data["AllowPublish"] == "1" ? true : false; + data.Charter = group.Data["Charter"]; + data.Contribution = Int32.Parse(membership.Data["Contribution"]); + data.FounderID = new UUID(group.Data["FounderID"]); + data.GroupID = new UUID(group.GroupID); + data.GroupName = group.Data["Name"]; + data.GroupPicture = new UUID(group.Data["InsigniaID"]); + if (role != null) + { + data.GroupPowers = UInt64.Parse(role.Data["Powers"]); + data.GroupTitle = role.Data["Title"]; + } + data.ListInProfile = membership.Data["ListInProfile"] == "1" ? true : false; + data.MaturePublish = group.Data["MaturePublish"] == "1" ? true : false; + data.MembershipFee = Int32.Parse(group.Data["MembershipFee"]); + data.OpenEnrollment = group.Data["OpenEnrollment"] == "1" ? true : false; + data.ShowInList = group.Data["ShowInList"] == "1" ? true : false; + + return data; + } + + public List GetAgentGroupMemberships(string RequestingAgentID, string AgentID) + { + List memberships = new List(); + + // 1. Get all the groups that this person is a member of + MembershipData[] mdata = m_Database.RetrieveMemberships(AgentID); + + if (mdata == null || (mdata != null && mdata.Length == 0)) + return memberships; + + foreach (MembershipData d in mdata) + { + GroupMembershipData gmember = GetAgentGroupMembership(RequestingAgentID, AgentID, d.GroupID, d); + if (gmember != null) + { + memberships.Add(gmember); + //m_log.DebugFormat("[XXX]: Member of {0} as {1}", gmember.GroupName, gmember.GroupTitle); + //Util.PrintCallStack(); + } + } + + return memberships; + } + + public void SetAgentActiveGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + MembershipData data = m_Database.RetrieveMember(GroupID, AgentID); + if (data == null) + return; + + data.Data["SelectedRoleID"] = RoleID.ToString(); + m_Database.StoreMember(data); + } + + public void UpdateMembership(string RequestingAgentID, string AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile) + { + // TODO: check perms + + MembershipData membership = m_Database.RetrieveMember(GroupID, AgentID); + if (membership == null) + return; + + membership.Data["AcceptNotices"] = AcceptNotices ? "1" : "0"; + membership.Data["ListInProfile"] = ListInProfile ? "1" : "0"; + + m_Database.StoreMember(membership); + } + + public bool AddGroupNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, + bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) + { + // Check perms + if (!HasPower(RequestingAgentID, groupID, GroupPowers.SendNotices)) + { + m_log.DebugFormat("[Groups]: ({0}) Attempt at sending notice to group {1} denied because of lack of permission", RequestingAgentID, groupID); + return false; + } + + return _AddNotice(groupID, noticeID, fromName, subject, message, hasAttachment, attType, attName, attItemID, attOwnerID); + } + + public GroupNoticeInfo GetGroupNotice(string RequestingAgentID, UUID noticeID) + { + NoticeData data = m_Database.RetrieveNotice(noticeID); + + if (data == null) + return null; + + return _NoticeDataToInfo(data); + } + + public List GetGroupNotices(string RequestingAgentID, UUID groupID) + { + NoticeData[] data = m_Database.RetrieveNotices(groupID); + List infos = new List(); + + if (data == null || (data != null && data.Length == 0)) + return infos; + + foreach (NoticeData d in data) + { + ExtendedGroupNoticeData info = _NoticeDataToData(d); + infos.Add(info); + } + + return infos; + } + + public void ResetAgentGroupChatSessions(string agentID) + { + } + + public bool hasAgentBeenInvitedToGroupChatSession(string agentID, UUID groupID) + { + return false; + } + + public bool hasAgentDroppedGroupChatSession(string agentID, UUID groupID) + { + return false; + } + + public void AgentDroppedFromGroupChatSession(string agentID, UUID groupID) + { + } + + public void AgentInvitedToGroupChatSession(string agentID, UUID groupID) + { + } + + #region Actions without permission checks + + private void _AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + _AddAgentToGroup(RequestingAgentID, AgentID, GroupID, RoleID, string.Empty); + } + + public void _RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID) + { + // 1. Delete membership + m_Database.DeleteMember(GroupID, AgentID); + + // 2. Remove from rolememberships + m_Database.DeleteMemberAllRoles(GroupID, AgentID); + + // 3. if it was active group, inactivate it + PrincipalData principal = m_Database.RetrievePrincipal(AgentID); + if (principal != null && principal.ActiveGroupID == GroupID) + { + principal.ActiveGroupID = UUID.Zero; + m_Database.StorePrincipal(principal); + } + } + + protected void _AddAgentToGroup(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID, string accessToken) + { + // Check if it's already there + MembershipData data = m_Database.RetrieveMember(GroupID, AgentID); + if (data != null) + return; + + // Add the membership + data = new MembershipData(); + data.PrincipalID = AgentID; + data.GroupID = GroupID; + data.Data = new Dictionary(); + data.Data["SelectedRoleID"] = RoleID.ToString(); + data.Data["Contribution"] = "0"; + data.Data["ListInProfile"] = "1"; + data.Data["AcceptNotices"] = "1"; + data.Data["AccessToken"] = accessToken; + + m_Database.StoreMember(data); + + // Add principal to everyone role + _AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, UUID.Zero); + + // Add principal to role, if different from everyone role + if (RoleID != UUID.Zero) + _AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); + + // Make thit this active group + PrincipalData pdata = new PrincipalData(); + pdata.PrincipalID = AgentID; + pdata.ActiveGroupID = GroupID; + m_Database.StorePrincipal(pdata); + + } + + private bool _AddOrUpdateGroupRole(string RequestingAgentID, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, bool add) + { + RoleData data = m_Database.RetrieveRole(groupID, roleID); + + if (add && data != null) // it already exists, can't create + return false; + + if (!add && data == null) // it deosn't exist, can't update + return false; + + if (add) + data = new RoleData(); + + data.GroupID = groupID; + data.RoleID = roleID; + data.Data = new Dictionary(); + data.Data["Name"] = name; + data.Data["Description"] = description; + data.Data["Title"] = title; + data.Data["Powers"] = powers.ToString(); + + return m_Database.StoreRole(data); + } + + private void _RemoveGroupRole(UUID groupID, UUID roleID) + { + m_Database.DeleteRole(groupID, roleID); + } + + private void _AddAgentToGroupRole(string RequestingAgentID, string AgentID, UUID GroupID, UUID RoleID) + { + RoleMembershipData data = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); + if (data != null) + return; + + data = new RoleMembershipData(); + data.GroupID = GroupID; + data.PrincipalID = AgentID; + data.RoleID = RoleID; + m_Database.StoreRoleMember(data); + + // Make it the SelectedRoleID + MembershipData membership = m_Database.RetrieveMember(GroupID, AgentID); + if (membership == null) + { + m_log.DebugFormat("[Groups]: ({0}) No such member {0} in group {1}", AgentID, GroupID); + return; + } + + membership.Data["SelectedRoleID"] = RoleID.ToString(); + m_Database.StoreMember(membership); + + } + + private List _GetGroupRoles(UUID groupID) + { + List roles = new List(); + + RoleData[] data = m_Database.RetrieveRoles(groupID); + + if (data == null || (data != null && data.Length == 0)) + return roles; + + foreach (RoleData d in data) + { + GroupRolesData r = new GroupRolesData(); + r.Description = d.Data["Description"]; + r.Members = m_Database.RoleMemberCount(groupID, d.RoleID); + r.Name = d.Data["Name"]; + r.Powers = UInt64.Parse(d.Data["Powers"]); + r.RoleID = d.RoleID; + r.Title = d.Data["Title"]; + + roles.Add(r); + } + + return roles; + } + + private List _GetGroupRoleMembers(UUID GroupID, bool isInGroup) + { + List rmembers = new List(); + + RoleData[] rdata = new RoleData[0]; + if (!isInGroup) + { + rdata = m_Database.RetrieveRoles(GroupID); + if (rdata == null || (rdata != null && rdata.Length == 0)) + return rmembers; + } + List rlist = new List(rdata); + if (!isInGroup) + rlist = rlist.FindAll(r => (UInt64.Parse(r.Data["Powers"]) & (ulong)GroupPowers.MemberVisible) != 0); + + RoleMembershipData[] data = m_Database.RetrieveRolesMembers(GroupID); + + if (data == null || (data != null && data.Length == 0)) + return rmembers; + + foreach (RoleMembershipData d in data) + { + if (!isInGroup) + { + RoleData rd = rlist.Find(_r => _r.RoleID == d.RoleID); // visible role + if (rd == null) + continue; + } + + ExtendedGroupRoleMembersData r = new ExtendedGroupRoleMembersData(); + r.MemberID = d.PrincipalID; + r.RoleID = d.RoleID; + + rmembers.Add(r); + } + + return rmembers; + } + + protected bool _AddNotice(UUID groupID, UUID noticeID, string fromName, string subject, string message, + bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) + { + NoticeData data = new NoticeData(); + data.GroupID = groupID; + data.NoticeID = noticeID; + data.Data = new Dictionary(); + data.Data["FromName"] = fromName; + data.Data["Subject"] = subject; + data.Data["Message"] = message; + data.Data["HasAttachment"] = hasAttachment ? "1" : "0"; + if (hasAttachment) + { + data.Data["AttachmentType"] = attType.ToString(); + data.Data["AttachmentName"] = attName; + data.Data["AttachmentItemID"] = attItemID.ToString(); + data.Data["AttachmentOwnerID"] = attOwnerID; + } + data.Data["TMStamp"] = ((uint)Util.UnixTimeSinceEpoch()).ToString(); + + return m_Database.StoreNotice(data); + } + + #endregion + + #region structure translations + ExtendedGroupRecord _GroupDataToRecord(GroupData data) + { + if (data == null) + return null; + + ExtendedGroupRecord rec = new ExtendedGroupRecord(); + rec.AllowPublish = data.Data["AllowPublish"] == "1" ? true : false; + rec.Charter = data.Data["Charter"]; + rec.FounderID = new UUID(data.Data["FounderID"]); + rec.GroupID = data.GroupID; + rec.GroupName = data.Data["Name"]; + rec.GroupPicture = new UUID(data.Data["InsigniaID"]); + rec.MaturePublish = data.Data["MaturePublish"] == "1" ? true : false; + rec.MembershipFee = Int32.Parse(data.Data["MembershipFee"]); + rec.OpenEnrollment = data.Data["OpenEnrollment"] == "1" ? true : false; + rec.OwnerRoleID = new UUID(data.Data["OwnerRoleID"]); + rec.ShowInList = data.Data["ShowInList"] == "1" ? true : false; + rec.ServiceLocation = data.Data["Location"]; + rec.MemberCount = m_Database.MemberCount(data.GroupID); + rec.RoleCount = m_Database.RoleCount(data.GroupID); + + return rec; + } + + GroupNoticeInfo _NoticeDataToInfo(NoticeData data) + { + GroupNoticeInfo notice = new GroupNoticeInfo(); + notice.GroupID = data.GroupID; + notice.Message = data.Data["Message"]; + notice.noticeData = _NoticeDataToData(data); + + return notice; + } + + ExtendedGroupNoticeData _NoticeDataToData(NoticeData data) + { + ExtendedGroupNoticeData notice = new ExtendedGroupNoticeData(); + notice.FromName = data.Data["FromName"]; + notice.NoticeID = data.NoticeID; + notice.Subject = data.Data["Subject"]; + notice.Timestamp = uint.Parse((string)data.Data["TMStamp"]); + notice.HasAttachment = data.Data["HasAttachment"] == "1" ? true : false; + if (notice.HasAttachment) + { + notice.AttachmentName = data.Data["AttachmentName"]; + notice.AttachmentItemID = new UUID(data.Data["AttachmentItemID"].ToString()); + notice.AttachmentType = byte.Parse(data.Data["AttachmentType"].ToString()); + notice.AttachmentOwnerID = data.Data["AttachmentOwnerID"].ToString(); + } + + + return notice; + } + + #endregion + + #region permissions + private bool HasPower(string agentID, UUID groupID, GroupPowers power) + { + RoleMembershipData[] rmembership = m_Database.RetrieveMemberRoles(groupID, agentID); + if (rmembership == null || (rmembership != null && rmembership.Length == 0)) + return false; + + foreach (RoleMembershipData rdata in rmembership) + { + RoleData role = m_Database.RetrieveRole(groupID, rdata.RoleID); + if ( (UInt64.Parse(role.Data["Powers"]) & (ulong)power) != 0 ) + return true; + } + return false; + } + + private bool IsOwner(string agentID, UUID groupID) + { + GroupData group = m_Database.RetrieveGroup(groupID); + if (group == null) + return false; + + RoleMembershipData rmembership = m_Database.RetrieveRoleMember(groupID, new UUID(group.Data["OwnerRoleID"]), agentID); + if (rmembership == null) + return false; + + return true; + } + #endregion + + } +} diff --git a/OpenSim/Addons/Groups/Service/GroupsServiceBase.cs b/OpenSim/Addons/Groups/Service/GroupsServiceBase.cs new file mode 100644 index 0000000000..2611a3d922 --- /dev/null +++ b/OpenSim/Addons/Groups/Service/GroupsServiceBase.cs @@ -0,0 +1,84 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Reflection; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Data; +using OpenSim.Services.Interfaces; +using OpenSim.Services.Base; + +namespace OpenSim.Groups +{ + public class GroupsServiceBase : ServiceBase + { + protected IGroupsData m_Database = null; + + public GroupsServiceBase(IConfigSource config, string cName) + : base(config) + { + string dllName = String.Empty; + string connString = String.Empty; + string realm = "os_groups"; + string configName = (cName == string.Empty) ? "Groups" : cName; + + // + // Try reading the [DatabaseService] section, if it exists + // + IConfig dbConfig = config.Configs["DatabaseService"]; + if (dbConfig != null) + { + if (dllName == String.Empty) + dllName = dbConfig.GetString("StorageProvider", String.Empty); + if (connString == String.Empty) + connString = dbConfig.GetString("ConnectionString", String.Empty); + } + + // + // [Groups] section overrides [DatabaseService], if it exists + // + IConfig groupsConfig = config.Configs[configName]; + if (groupsConfig != null) + { + dllName = groupsConfig.GetString("StorageProvider", dllName); + connString = groupsConfig.GetString("ConnectionString", connString); + realm = groupsConfig.GetString("Realm", realm); + } + + // + // We tried, but this doesn't exist. We can't proceed. + // + if (dllName.Equals(String.Empty)) + throw new Exception("No StorageProvider configured"); + + m_Database = LoadPlugin(dllName, new Object[] { connString, realm }); + if (m_Database == null) + throw new Exception("Could not find a storage interface in the given module " + dllName); + } + } +} \ No newline at end of file diff --git a/OpenSim/Addons/Groups/Service/HGGroupsService.cs b/OpenSim/Addons/Groups/Service/HGGroupsService.cs new file mode 100644 index 0000000000..9d7961cd20 --- /dev/null +++ b/OpenSim/Addons/Groups/Service/HGGroupsService.cs @@ -0,0 +1,353 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Timers; +using log4net; +using Nini.Config; + +using OpenMetaverse; +using OpenSim.Data; +using OpenSim.Framework; +using OpenSim.Services.Interfaces; + +namespace OpenSim.Groups +{ + public class HGGroupsService : GroupsService + { + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private IOfflineIMService m_OfflineIM; + private IUserAccountService m_UserAccounts; + private string m_HomeURI; + + public HGGroupsService(IConfigSource config, IOfflineIMService im, IUserAccountService users, string homeURI) + : base(config, string.Empty) + { + m_OfflineIM = im; + m_UserAccounts = users; + m_HomeURI = homeURI; + if (!m_HomeURI.EndsWith("/")) + m_HomeURI += "/"; + } + + + #region HG specific operations + + public bool CreateGroupProxy(string RequestingAgentID, string agentID, string accessToken, UUID groupID, string serviceLocation, string name, out string reason) + { + reason = string.Empty; + Uri uri = null; + try + { + uri = new Uri(serviceLocation); + } + catch (UriFormatException) + { + reason = "Bad location for group proxy"; + return false; + } + + // Check if it already exists + GroupData grec = m_Database.RetrieveGroup(groupID); + if (grec == null || + (grec != null && grec.Data["Location"] != string.Empty && grec.Data["Location"].ToLower() != serviceLocation.ToLower())) + { + // Create the group + grec = new GroupData(); + grec.GroupID = groupID; + grec.Data = new Dictionary(); + grec.Data["Name"] = name + " @ " + uri.Authority; + grec.Data["Location"] = serviceLocation; + grec.Data["Charter"] = string.Empty; + grec.Data["InsigniaID"] = UUID.Zero.ToString(); + grec.Data["FounderID"] = UUID.Zero.ToString(); + grec.Data["MembershipFee"] = "0"; + grec.Data["OpenEnrollment"] = "0"; + grec.Data["ShowInList"] = "0"; + grec.Data["AllowPublish"] = "0"; + grec.Data["MaturePublish"] = "0"; + grec.Data["OwnerRoleID"] = UUID.Zero.ToString(); + + + if (!m_Database.StoreGroup(grec)) + return false; + } + + if (grec.Data["Location"] == string.Empty) + { + reason = "Cannot add proxy membership to non-proxy group"; + return false; + } + + UUID uid = UUID.Zero; + string url = string.Empty, first = string.Empty, last = string.Empty, tmp = string.Empty; + Util.ParseUniversalUserIdentifier(RequestingAgentID, out uid, out url, out first, out last, out tmp); + string fromName = first + "." + last + "@" + url; + + // Invite to group again + InviteToGroup(fromName, groupID, new UUID(agentID), grec.Data["Name"]); + + // Stick the proxy membership in the DB already + // we'll delete it if the agent declines the invitation + MembershipData membership = new MembershipData(); + membership.PrincipalID = agentID; + membership.GroupID = groupID; + membership.Data = new Dictionary(); + membership.Data["SelectedRoleID"] = UUID.Zero.ToString(); + membership.Data["Contribution"] = "0"; + membership.Data["ListInProfile"] = "1"; + membership.Data["AcceptNotices"] = "1"; + membership.Data["AccessToken"] = accessToken; + + m_Database.StoreMember(membership); + + return true; + } + + public void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID, string token) + { + // check the token + MembershipData membership = m_Database.RetrieveMember(GroupID, AgentID); + if (membership != null) + { + if (token != string.Empty && token.Equals(membership.Data["AccessToken"])) + RemoveAgentFromGroup(RequestingAgentID, AgentID, GroupID); + else + m_log.DebugFormat("[Groups.HGGroupsService]: access token {0} did not match stored one {1}", token, membership.Data["AccessToken"]); + } + else + m_log.DebugFormat("[Groups.HGGroupsService]: membership not found for {0}", AgentID); + } + + public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string groupName, string token) + { + // check the token + if (!VerifyToken(GroupID, RequestingAgentID, token)) + return null; + + ExtendedGroupRecord grec; + if (GroupID == UUID.Zero) + grec = GetGroupRecord(RequestingAgentID, groupName); + else + grec = GetGroupRecord(RequestingAgentID, GroupID); + + if (grec != null) + FillFounderUUI(grec); + + return grec; + } + + public List GetGroupMembers(string RequestingAgentID, UUID GroupID, string token) + { + if (!VerifyToken(GroupID, RequestingAgentID, token)) + return new List(); + + List members = GetGroupMembers(RequestingAgentID, GroupID); + + // convert UUIDs to UUIs + members.ForEach(delegate (ExtendedGroupMembersData m) + { + if (m.AgentID.ToString().Length == 36) // UUID + { + UserAccount account = m_UserAccounts.GetUserAccount(UUID.Zero, new UUID(m.AgentID)); + if (account != null) + m.AgentID = Util.UniversalIdentifier(account.PrincipalID, account.FirstName, account.LastName, m_HomeURI); + } + }); + + return members; + } + + public List GetGroupRoles(string RequestingAgentID, UUID GroupID, string token) + { + if (!VerifyToken(GroupID, RequestingAgentID, token)) + return new List(); + + return GetGroupRoles(RequestingAgentID, GroupID); + } + + public List GetGroupRoleMembers(string RequestingAgentID, UUID GroupID, string token) + { + if (!VerifyToken(GroupID, RequestingAgentID, token)) + return new List(); + + List rolemembers = GetGroupRoleMembers(RequestingAgentID, GroupID); + + // convert UUIDs to UUIs + rolemembers.ForEach(delegate(ExtendedGroupRoleMembersData m) + { + if (m.MemberID.ToString().Length == 36) // UUID + { + UserAccount account = m_UserAccounts.GetUserAccount(UUID.Zero, new UUID(m.MemberID)); + if (account != null) + m.MemberID = Util.UniversalIdentifier(account.PrincipalID, account.FirstName, account.LastName, m_HomeURI); + } + }); + + return rolemembers; + } + + public bool AddNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, + bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) + { + // check that the group proxy exists + ExtendedGroupRecord grec = GetGroupRecord(RequestingAgentID, groupID); + if (grec == null) + { + m_log.DebugFormat("[Groups.HGGroupsService]: attempt at adding notice to non-existent group proxy"); + return false; + } + + // check that the group is remote + if (grec.ServiceLocation == string.Empty) + { + m_log.DebugFormat("[Groups.HGGroupsService]: attempt at adding notice to local (non-proxy) group"); + return false; + } + + // check that there isn't already a notice with the same ID + if (GetGroupNotice(RequestingAgentID, noticeID) != null) + { + m_log.DebugFormat("[Groups.HGGroupsService]: a notice with the same ID already exists", grec.ServiceLocation); + return false; + } + + // This has good intentions (security) but it will potentially DDS the origin... + // We'll need to send a proof along with the message. Maybe encrypt the message + // using key pairs + // + //// check that the notice actually exists in the origin + //GroupsServiceHGConnector c = new GroupsServiceHGConnector(grec.ServiceLocation); + //if (!c.VerifyNotice(noticeID, groupID)) + //{ + // m_log.DebugFormat("[Groups.HGGroupsService]: notice does not exist at origin {0}", grec.ServiceLocation); + // return false; + //} + + // ok, we're good! + return _AddNotice(groupID, noticeID, fromName, subject, message, hasAttachment, attType, attName, attItemID, attOwnerID); + } + + public bool VerifyNotice(UUID noticeID, UUID groupID) + { + GroupNoticeInfo notice = GetGroupNotice(string.Empty, noticeID); + + if (notice == null) + return false; + + if (notice.GroupID != groupID) + return false; + + return true; + } + + #endregion + + private void InviteToGroup(string fromName, UUID groupID, UUID invitedAgentID, string groupName) + { + // Todo: Security check, probably also want to send some kind of notification + UUID InviteID = UUID.Random(); + + if (AddAgentToGroupInvite(InviteID, groupID, invitedAgentID.ToString())) + { + Guid inviteUUID = InviteID.Guid; + + GridInstantMessage msg = new GridInstantMessage(); + + msg.imSessionID = inviteUUID; + + // msg.fromAgentID = agentID.Guid; + msg.fromAgentID = groupID.Guid; + msg.toAgentID = invitedAgentID.Guid; + //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); + msg.timestamp = 0; + msg.fromAgentName = fromName; + msg.message = string.Format("Please confirm your acceptance to join group {0}.", groupName); + msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupInvitation; + msg.fromGroup = true; + msg.offline = (byte)0; + msg.ParentEstateID = 0; + msg.Position = Vector3.Zero; + msg.RegionID = UUID.Zero.Guid; + msg.binaryBucket = new byte[20]; + + string reason = string.Empty; + m_OfflineIM.StoreMessage(msg, out reason); + + } + } + + private bool AddAgentToGroupInvite(UUID inviteID, UUID groupID, string agentID) + { + // Check whether the invitee is already a member of the group + MembershipData m = m_Database.RetrieveMember(groupID, agentID); + if (m != null) + return false; + + // Check whether there are pending invitations and delete them + InvitationData invite = m_Database.RetrieveInvitation(groupID, agentID); + if (invite != null) + m_Database.DeleteInvite(invite.InviteID); + + invite = new InvitationData(); + invite.InviteID = inviteID; + invite.PrincipalID = agentID; + invite.GroupID = groupID; + invite.RoleID = UUID.Zero; + invite.Data = new Dictionary(); + + return m_Database.StoreInvitation(invite); + } + + private void FillFounderUUI(ExtendedGroupRecord grec) + { + UserAccount account = m_UserAccounts.GetUserAccount(UUID.Zero, grec.FounderID); + if (account != null) + grec.FounderUUI = Util.UniversalIdentifier(account.PrincipalID, account.FirstName, account.LastName, m_HomeURI); + } + + private bool VerifyToken(UUID groupID, string agentID, string token) + { + // check the token + MembershipData membership = m_Database.RetrieveMember(groupID, agentID); + if (membership != null) + { + if (token != string.Empty && token.Equals(membership.Data["AccessToken"])) + return true; + else + m_log.DebugFormat("[Groups.HGGroupsService]: access token {0} did not match stored one {1}", token, membership.Data["AccessToken"]); + } + else + m_log.DebugFormat("[Groups.HGGroupsService]: membership not found for {0}", agentID); + + return false; + } + } +} diff --git a/OpenSim/Data/IGroupsData.cs b/OpenSim/Data/IGroupsData.cs new file mode 100644 index 0000000000..c11e6499a5 --- /dev/null +++ b/OpenSim/Data/IGroupsData.cs @@ -0,0 +1,144 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using OpenSim.Data; +using OpenMetaverse; + +namespace OpenSim.Data +{ + public class GroupData + { + public UUID GroupID; + public Dictionary Data; + } + + public class MembershipData + { + public UUID GroupID; + public string PrincipalID; + public Dictionary Data; + } + + public class RoleData + { + public UUID GroupID; + public UUID RoleID; + public Dictionary Data; + } + + public class RoleMembershipData + { + public UUID GroupID; + public UUID RoleID; + public string PrincipalID; + } + + public class PrincipalData + { + public string PrincipalID; + public UUID ActiveGroupID; + } + + public class InvitationData + { + public UUID InviteID; + public UUID GroupID; + public UUID RoleID; + public string PrincipalID; + public Dictionary Data; + } + + public class NoticeData + { + public UUID GroupID; + public UUID NoticeID; + public Dictionary Data; + } + + + public interface IGroupsData + { + // groups table + bool StoreGroup(GroupData data); + GroupData RetrieveGroup(UUID groupID); + GroupData RetrieveGroup(string name); + GroupData[] RetrieveGroups(string pattern); + bool DeleteGroup(UUID groupID); + int GroupsCount(); + + // membership table + MembershipData RetrieveMember(UUID groupID, string pricipalID); + MembershipData[] RetrieveMembers(UUID groupID); + MembershipData[] RetrieveMemberships(string pricipalID); + bool StoreMember(MembershipData data); + bool DeleteMember(UUID groupID, string pricipalID); + int MemberCount(UUID groupID); + + // roles table + bool StoreRole(RoleData data); + RoleData RetrieveRole(UUID groupID, UUID roleID); + RoleData[] RetrieveRoles(UUID groupID); + bool DeleteRole(UUID groupID, UUID roleID); + int RoleCount(UUID groupID); + + // rolememberhip table + RoleMembershipData[] RetrieveRolesMembers(UUID groupID); + RoleMembershipData[] RetrieveRoleMembers(UUID groupID, UUID roleID); + RoleMembershipData[] RetrieveMemberRoles(UUID groupID, string principalID); + RoleMembershipData RetrieveRoleMember(UUID groupID, UUID roleID, string principalID); + int RoleMemberCount(UUID groupID, UUID roleID); + bool StoreRoleMember(RoleMembershipData data); + bool DeleteRoleMember(RoleMembershipData data); + bool DeleteMemberAllRoles(UUID groupID, string principalID); + + // principals table + bool StorePrincipal(PrincipalData data); + PrincipalData RetrievePrincipal(string principalID); + bool DeletePrincipal(string principalID); + + // invites table + bool StoreInvitation(InvitationData data); + InvitationData RetrieveInvitation(UUID inviteID); + InvitationData RetrieveInvitation(UUID groupID, string principalID); + bool DeleteInvite(UUID inviteID); + void DeleteOldInvites(); + + // notices table + bool StoreNotice(NoticeData data); + NoticeData RetrieveNotice(UUID noticeID); + NoticeData[] RetrieveNotices(UUID groupID); + bool DeleteNotice(UUID noticeID); + void DeleteOldNotices(); + + // combinations + MembershipData RetrievePrincipalGroupMembership(string principalID, UUID groupID); + MembershipData[] RetrievePrincipalGroupMemberships(string principalID); + + // Misc + } +} diff --git a/OpenSim/Data/MySQL/MySQLGroupsData.cs b/OpenSim/Data/MySQL/MySQLGroupsData.cs new file mode 100644 index 0000000000..2a1bd6c48e --- /dev/null +++ b/OpenSim/Data/MySQL/MySQLGroupsData.cs @@ -0,0 +1,484 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; + +using OpenSim.Framework; +using OpenSim.Data.MySQL; + +using OpenMetaverse; +using MySql.Data.MySqlClient; + +namespace OpenSim.Data.MySQL +{ + public class MySQLGroupsData : IGroupsData + { + private MySqlGroupsGroupsHandler m_Groups; + private MySqlGroupsMembershipHandler m_Membership; + private MySqlGroupsRolesHandler m_Roles; + private MySqlGroupsRoleMembershipHandler m_RoleMembership; + private MySqlGroupsInvitesHandler m_Invites; + private MySqlGroupsNoticesHandler m_Notices; + private MySqlGroupsPrincipalsHandler m_Principals; + + public MySQLGroupsData(string connectionString, string realm) + { + m_Groups = new MySqlGroupsGroupsHandler(connectionString, realm + "_groups", realm + "_Store"); + m_Membership = new MySqlGroupsMembershipHandler(connectionString, realm + "_membership"); + m_Roles = new MySqlGroupsRolesHandler(connectionString, realm + "_roles"); + m_RoleMembership = new MySqlGroupsRoleMembershipHandler(connectionString, realm + "_rolemembership"); + m_Invites = new MySqlGroupsInvitesHandler(connectionString, realm + "_invites"); + m_Notices = new MySqlGroupsNoticesHandler(connectionString, realm + "_notices"); + m_Principals = new MySqlGroupsPrincipalsHandler(connectionString, realm + "_principals"); + } + + #region groups table + public bool StoreGroup(GroupData data) + { + return m_Groups.Store(data); + } + + public GroupData RetrieveGroup(UUID groupID) + { + GroupData[] groups = m_Groups.Get("GroupID", groupID.ToString()); + if (groups.Length > 0) + return groups[0]; + + return null; + } + + public GroupData RetrieveGroup(string name) + { + GroupData[] groups = m_Groups.Get("Name", name); + if (groups.Length > 0) + return groups[0]; + + return null; + } + + public GroupData[] RetrieveGroups(string pattern) + { + if (string.IsNullOrEmpty(pattern)) + pattern = "1 ORDER BY Name LIMIT 100"; + else + pattern = string.Format("Name LIKE %{0}% ORDER BY Name LIMIT 100", pattern); + + return m_Groups.Get(pattern); + } + + public bool DeleteGroup(UUID groupID) + { + return m_Groups.Delete("GroupID", groupID.ToString()); + } + + public int GroupsCount() + { + return (int)m_Groups.GetCount("Location=\"\""); + } + + #endregion + + #region membership table + public MembershipData[] RetrieveMembers(UUID groupID) + { + return m_Membership.Get("GroupID", groupID.ToString()); + } + + public MembershipData RetrieveMember(UUID groupID, string pricipalID) + { + MembershipData[] m = m_Membership.Get(new string[] { "GroupID", "PrincipalID" }, + new string[] { groupID.ToString(), pricipalID }); + if (m != null && m.Length > 0) + return m[0]; + + return null; + } + + public MembershipData[] RetrieveMemberships(string pricipalID) + { + return m_Membership.Get("PrincipalID", pricipalID.ToString()); + } + + public bool StoreMember(MembershipData data) + { + return m_Membership.Store(data); + } + + public bool DeleteMember(UUID groupID, string pricipalID) + { + return m_Membership.Delete(new string[] { "GroupID", "PrincipalID" }, + new string[] { groupID.ToString(), pricipalID }); + } + + public int MemberCount(UUID groupID) + { + return (int)m_Membership.GetCount("GroupID", groupID.ToString()); + } + #endregion + + #region roles table + public bool StoreRole(RoleData data) + { + return m_Roles.Store(data); + } + + public RoleData RetrieveRole(UUID groupID, UUID roleID) + { + RoleData[] data = m_Roles.Get(new string[] { "GroupID", "RoleID" }, + new string[] { groupID.ToString(), roleID.ToString() }); + + if (data != null && data.Length > 0) + return data[0]; + + return null; + } + + public RoleData[] RetrieveRoles(UUID groupID) + { + //return m_Roles.RetrieveRoles(groupID); + return m_Roles.Get("GroupID", groupID.ToString()); + } + + public bool DeleteRole(UUID groupID, UUID roleID) + { + return m_Roles.Delete(new string[] { "GroupID", "RoleID" }, + new string[] { groupID.ToString(), roleID.ToString() }); + } + + public int RoleCount(UUID groupID) + { + return (int)m_Roles.GetCount("GroupID", groupID.ToString()); + } + + + #endregion + + #region rolememberhip table + public RoleMembershipData[] RetrieveRolesMembers(UUID groupID) + { + RoleMembershipData[] data = m_RoleMembership.Get("GroupID", groupID.ToString()); + + return data; + } + + public RoleMembershipData[] RetrieveRoleMembers(UUID groupID, UUID roleID) + { + RoleMembershipData[] data = m_RoleMembership.Get(new string[] { "GroupID", "RoleID" }, + new string[] { groupID.ToString(), roleID.ToString() }); + + return data; + } + + public RoleMembershipData[] RetrieveMemberRoles(UUID groupID, string principalID) + { + RoleMembershipData[] data = m_RoleMembership.Get(new string[] { "GroupID", "PrincipalID" }, + new string[] { groupID.ToString(), principalID.ToString() }); + + return data; + } + + public RoleMembershipData RetrieveRoleMember(UUID groupID, UUID roleID, string principalID) + { + RoleMembershipData[] data = m_RoleMembership.Get(new string[] { "GroupID", "RoleID", "PrincipalID" }, + new string[] { groupID.ToString(), roleID.ToString(), principalID.ToString() }); + + if (data != null && data.Length > 0) + return data[0]; + + return null; + } + + public int RoleMemberCount(UUID groupID, UUID roleID) + { + return (int)m_RoleMembership.GetCount(new string[] { "GroupID", "RoleID" }, + new string[] { groupID.ToString(), roleID.ToString() }); + } + + public bool StoreRoleMember(RoleMembershipData data) + { + return m_RoleMembership.Store(data); + } + + public bool DeleteRoleMember(RoleMembershipData data) + { + return m_RoleMembership.Delete(new string[] { "GroupID", "RoleID", "PrincipalID"}, + new string[] { data.GroupID.ToString(), data.RoleID.ToString(), data.PrincipalID }); + } + + public bool DeleteMemberAllRoles(UUID groupID, string principalID) + { + return m_RoleMembership.Delete(new string[] { "GroupID", "PrincipalID" }, + new string[] { groupID.ToString(), principalID }); + } + + #endregion + + #region principals table + public bool StorePrincipal(PrincipalData data) + { + return m_Principals.Store(data); + } + + public PrincipalData RetrievePrincipal(string principalID) + { + PrincipalData[] p = m_Principals.Get("PrincipalID", principalID); + if (p != null && p.Length > 0) + return p[0]; + + return null; + } + + public bool DeletePrincipal(string principalID) + { + return m_Principals.Delete("PrincipalID", principalID); + } + #endregion + + #region invites table + + public bool StoreInvitation(InvitationData data) + { + return m_Invites.Store(data); + } + + public InvitationData RetrieveInvitation(UUID inviteID) + { + InvitationData[] invites = m_Invites.Get("InviteID", inviteID.ToString()); + + if (invites != null && invites.Length > 0) + return invites[0]; + + return null; + } + + public InvitationData RetrieveInvitation(UUID groupID, string principalID) + { + InvitationData[] invites = m_Invites.Get(new string[] { "GroupID", "PrincipalID" }, + new string[] { groupID.ToString(), principalID }); + + if (invites != null && invites.Length > 0) + return invites[0]; + + return null; + } + + public bool DeleteInvite(UUID inviteID) + { + return m_Invites.Delete("InviteID", inviteID.ToString()); + } + + public void DeleteOldInvites() + { + m_Invites.DeleteOld(); + } + + #endregion + + #region notices table + + public bool StoreNotice(NoticeData data) + { + return m_Notices.Store(data); + } + + public NoticeData RetrieveNotice(UUID noticeID) + { + NoticeData[] notices = m_Notices.Get("NoticeID", noticeID.ToString()); + + if (notices != null && notices.Length > 0) + return notices[0]; + + return null; + } + + public NoticeData[] RetrieveNotices(UUID groupID) + { + NoticeData[] notices = m_Notices.Get("GroupID", groupID.ToString()); + + return notices; + } + + public bool DeleteNotice(UUID noticeID) + { + return m_Notices.Delete("NoticeID", noticeID.ToString()); + } + + public void DeleteOldNotices() + { + m_Notices.DeleteOld(); + } + + #endregion + + #region combinations + public MembershipData RetrievePrincipalGroupMembership(string principalID, UUID groupID) + { + // TODO + return null; + } + public MembershipData[] RetrievePrincipalGroupMemberships(string principalID) + { + // TODO + return null; + } + + #endregion + } + + public class MySqlGroupsGroupsHandler : MySQLGenericTableHandler + { + protected override Assembly Assembly + { + // WARNING! Moving migrations to this assembly!!! + get { return GetType().Assembly; } + } + + public MySqlGroupsGroupsHandler(string connectionString, string realm, string store) + : base(connectionString, realm, store) + { + } + + } + + public class MySqlGroupsMembershipHandler : MySQLGenericTableHandler + { + protected override Assembly Assembly + { + // WARNING! Moving migrations to this assembly!!! + get { return GetType().Assembly; } + } + + public MySqlGroupsMembershipHandler(string connectionString, string realm) + : base(connectionString, realm, string.Empty) + { + } + + } + + public class MySqlGroupsRolesHandler : MySQLGenericTableHandler + { + protected override Assembly Assembly + { + // WARNING! Moving migrations to this assembly!!! + get { return GetType().Assembly; } + } + + public MySqlGroupsRolesHandler(string connectionString, string realm) + : base(connectionString, realm, string.Empty) + { + } + + } + + public class MySqlGroupsRoleMembershipHandler : MySQLGenericTableHandler + { + protected override Assembly Assembly + { + // WARNING! Moving migrations to this assembly!!! + get { return GetType().Assembly; } + } + + public MySqlGroupsRoleMembershipHandler(string connectionString, string realm) + : base(connectionString, realm, string.Empty) + { + } + + } + + public class MySqlGroupsInvitesHandler : MySQLGenericTableHandler + { + protected override Assembly Assembly + { + // WARNING! Moving migrations to this assembly!!! + get { return GetType().Assembly; } + } + + public MySqlGroupsInvitesHandler(string connectionString, string realm) + : base(connectionString, realm, string.Empty) + { + } + + public void DeleteOld() + { + uint now = (uint)Util.UnixTimeSinceEpoch(); + + using (MySqlCommand cmd = new MySqlCommand()) + { + cmd.CommandText = String.Format("delete from {0} where TMStamp < ?tstamp", m_Realm); + cmd.Parameters.AddWithValue("?tstamp", now - 14 * 24 * 60 * 60); // > 2 weeks old + + ExecuteNonQuery(cmd); + } + + } + } + + public class MySqlGroupsNoticesHandler : MySQLGenericTableHandler + { + protected override Assembly Assembly + { + // WARNING! Moving migrations to this assembly!!! + get { return GetType().Assembly; } + } + + public MySqlGroupsNoticesHandler(string connectionString, string realm) + : base(connectionString, realm, string.Empty) + { + } + + public void DeleteOld() + { + uint now = (uint)Util.UnixTimeSinceEpoch(); + + using (MySqlCommand cmd = new MySqlCommand()) + { + cmd.CommandText = String.Format("delete from {0} where TMStamp < ?tstamp", m_Realm); + cmd.Parameters.AddWithValue("?tstamp", now - 14 * 24 * 60 * 60); // > 2 weeks old + + ExecuteNonQuery(cmd); + } + + } + } + + public class MySqlGroupsPrincipalsHandler : MySQLGenericTableHandler + { + protected override Assembly Assembly + { + // WARNING! Moving migrations to this assembly!!! + get { return GetType().Assembly; } + } + + public MySqlGroupsPrincipalsHandler(string connectionString, string realm) + : base(connectionString, realm, string.Empty) + { + } + } +} diff --git a/OpenSim/Data/MySQL/Resources/os_groups_Store.migrations b/OpenSim/Data/MySQL/Resources/os_groups_Store.migrations new file mode 100644 index 0000000000..9e6f1c112c --- /dev/null +++ b/OpenSim/Data/MySQL/Resources/os_groups_Store.migrations @@ -0,0 +1,115 @@ +:VERSION 1 # -------------------------- + +BEGIN; + +CREATE TABLE `os_groups_groups` ( + `GroupID` char(36) NOT NULL default '', + `Location` varchar(255) NOT NULL default '', + `Name` varchar(255) NOT NULL default '', + `Charter` text NOT NULL, + `InsigniaID` char(36) NOT NULL default '', + `FounderID` char(36) NOT NULL default '', + `MembershipFee` int(11) NOT NULL default '0', + `OpenEnrollment` varchar(255) NOT NULL default '', + `ShowInList` int(4) NOT NULL default '0', + `AllowPublish` int(4) NOT NULL default '0', + `MaturePublish` int(4) NOT NULL default '0', + `OwnerRoleID` char(36) NOT NULL default '', + PRIMARY KEY (`GroupID`), + UNIQUE KEY `Name` (`Name`), + FULLTEXT KEY `Name_2` (`Name`) +) ENGINE=MyISAM; + + +CREATE TABLE `os_groups_membership` ( + `GroupID`char(36) NOT NULL default '', + `PrincipalID` VARCHAR(255) NOT NULL default '', + `SelectedRoleID` char(36) NOT NULL default '', + `Contribution` int(11) NOT NULL default '0', + `ListInProfile` int(4) NOT NULL default '1', + `AcceptNotices` int(4) NOT NULL default '1', + `AccessToken` char(36) NOT NULL default '', + PRIMARY KEY (`GroupID`,`PrincipalID`), + KEY `PrincipalID` (`PrincipalID`) +) ENGINE=MyISAM; + + +CREATE TABLE `os_groups_roles` ( + `GroupID` char(36) NOT NULL default '', + `RoleID` char(36) NOT NULL default '', + `Name` varchar(255) NOT NULL default '', + `Description` varchar(255) NOT NULL default '', + `Title` varchar(255) NOT NULL default '', + `Powers` bigint(20) unsigned NOT NULL default '0', + PRIMARY KEY (`GroupID`,`RoleID`), + KEY `GroupID` (`GroupID`) +) ENGINE=MyISAM; + + +CREATE TABLE `os_groups_rolemembership` ( + `GroupID` char(36) NOT NULL default '', + `RoleID` char(36) NOT NULL default '', + `PrincipalID` VARCHAR(255) NOT NULL default '', + PRIMARY KEY (`GroupID`,`RoleID`,`PrincipalID`), + KEY `PrincipalID` (`PrincipalID`) +) ENGINE=MyISAM; + + +CREATE TABLE `os_groups_invites` ( + `InviteID` char(36) NOT NULL default '', + `GroupID` char(36) NOT NULL default '', + `RoleID` char(36) NOT NULL default '', + `PrincipalID` VARCHAR(255) NOT NULL default '', + `TMStamp` timestamp NOT NULL, + PRIMARY KEY (`InviteID`), + UNIQUE KEY `PrincipalGroup` (`GroupID`,`PrincipalID`) +) ENGINE=MyISAM; + + +CREATE TABLE `os_groups_notices` ( + `GroupID` char(36) NOT NULL default '', + `NoticeID` char(36) NOT NULL default '', + `TMStamp` int(10) unsigned NOT NULL default '0', + `FromName` varchar(255) NOT NULL default '', + `Subject` varchar(255) NOT NULL default '', + `Message` text NOT NULL, + `HasAttachment` int(4) NOT NULL default '0', + `AttachmentType` int(4) NOT NULL default '0', + `AttachmentName` varchar(128) NOT NULL default '', + `AttachmentItemID` char(36) NOT NULL default '', + `AttachmentOwnerID` varchar(255) NOT NULL default '', + PRIMARY KEY (`NoticeID`), + KEY `GroupID` (`GroupID`), + KEY `TMStamp` (`TMStamp`) +) ENGINE=MyISAM; + +CREATE TABLE `os_groups_principals` ( + `PrincipalID` VARCHAR(255) NOT NULL default '', + `ActiveGroupID` char(36) NOT NULL default '', + PRIMARY KEY (`PrincipalID`) +) ENGINE=MyISAM; + +COMMIT; + +:VERSION 2 # -------------------------- + +BEGIN; + +INSERT INTO `os_groups_groups` SELECT * from `diva_groups_groups`; +DROP TABLE `diva_groups_groups`; +INSERT INTO `os_groups_membership` SELECT * from `diva_groups_membership`; +DROP TABLE `diva_groups_membership`; +INSERT INTO `os_groups_roles` SELECT * from `diva_groups_roles`; +DROP TABLE `diva_groups_roles`; +INSERT INTO `os_groups_rolemembership` SELECT * from `diva_groups_rolemembership`; +DROP TABLE `diva_groups_rolemembership`; +INSERT INTO `os_groups_invites` SELECT * from `diva_groups_invites`; +DROP TABLE `diva_groups_invites`; +INSERT INTO `os_groups_notices` SELECT * from `diva_groups_notices`; +DROP TABLE `diva_groups_notices`; +INSERT INTO `os_groups_principals` SELECT * from `diva_groups_principals`; +DROP TABLE `diva_groups_principals`; + +DELETE FROM `migrations` WHERE name='diva_im_Store'; + +COMMIT; \ No newline at end of file diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 674a66c147..cb978f1285 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -931,33 +931,47 @@ ;; Enables the groups module ; Enabled = false - ;# {Module} {Enabled:true} {Groups module to use? (Use GroupsModule to use Flotsam/Simian)} {} Default - ;; This is the current groups stub in Region.CoreModules.Avatar.Groups. - ;; All the other settings below only really apply to the Flotsam/SimianGrid - ;; GroupsModule. - ;; This module can use a PHP XmlRpc server from the Flotsam project at + ;# {Module} {Enabled:true} {Groups module to use? (Use GroupsModule to use Flotsam/Simian)} {Default "Groups Module V2"} Default + ;; The default module can use a PHP XmlRpc server from the Flotsam project at ;; http://code.google.com/p/flotsam/ ;; or from the SimianGrid project at http://code.google.com/p/openmetaverse ; Module = Default + ;; or... use Groups Module V2, which works for standalones and robust grids + ; Module = "Groups Module V2" - ;# {MessagingEnabled} {Module:GroupsModule} {Is groups messaging enabled?} {true false} true - ; MessagingEnabled = true + ;# {StorageProvider} {Module:Groups Module V2} {The DLL that provides the storage for V2} {OpenSim.Data.MySQL.dll} + ; StorageProvider = OpenSim.Data.MySQL.dll - ;# {MessagingModule} {MessagingEnabled:true} {Module to use for groups messaging} {GroupsMessagingModule} GroupsMessagingModule - ; MessagingModule = GroupsMessagingModule - - ;# {ServicesConnectorModule} {Module:GroupsModule} {Service connector to use for groups} {XmlRpcGroupsServicesConnector SimianGroupsServicesConnector} XmlRpcGroupsServicesConnector + ;# {ServicesConnectorModule} {Module:GroupsModule Module:Groups Module V2} {Service connector to use for groups} {XmlRpcGroupsServicesConnector SimianGroupsServicesConnector "Groups Local Service Connector" "Groups Remote Service Connector" "Groups HG Service Connector"} XmlRpcGroupsServicesConnector ;; Service connectors to the Groups Service as used in the GroupsModule. Select one depending on - ;; whether you're using a Flotsam XmlRpc backend or a SimianGrid backend + ;; whether you're using a Flotsam XmlRpc backend or a SimianGrid backend or several flavours of V2, Hypergrided or not, standalone or grided. ; ServicesConnectorModule = XmlRpcGroupsServicesConnector - ;# {GroupsServerURI} {Module:GroupsModule} {Groups Server URI} {} - ;; URI for the groups services + ;# {LocalService} {ServicesConnectorModule:Groups HG Service Connector} {Is the group service in this process or elsewhere?} {local remote} local + ;; Used for V2 in HG only. If standalone, set this to local; if grided sim, set this to remote + ; LocalService = local + + ;# {GroupsServerURI} {Module:GroupsModule (ServicesConnectorModule:Groups Remote Service Connector or (ServicesConnectorModule:Groups HG Service Connector and LocalService:remote))} {Groups Server URI} {} + ;; URI for the groups services of this grid ;; e.g. http://yourxmlrpcserver.com/xmlrpc.php for Flotsam XmlRpc ;; or http://mygridserver.com:82/Grid/ for SimianGrid + ;; or http:://mygridserver.com:8003 for robust, V2 ; GroupsServerURI = "" - ;# {NoticesEnabled} {Module:GroupsModule} {Enable group notices?} {true false} true + ;# {HomeURI} {ServicesConnectorModule:Groups HG Service Connector} {What's the home address of this world?} {} + ;; Used for V2 in HG only. For example + ;; http://mygridserver.com:9000 or http://mygridserver.com:8002 + ; HomeURI = "" + + ;# {MessagingEnabled} {Module:GroupsModule Module:Groups Module V2} {Is groups messaging enabled?} {true false} true + ; MessagingEnabled = true + + ;# {MessagingModule} {MessagingEnabled:true} {Module to use for groups messaging} {GroupsMessagingModule "Groups Messaging Module V2"} GroupsMessagingModule + ; MessagingModule = GroupsMessagingModule + ;; or use V2 for Groups V2 + ; MessagingModule = "Groups Messaging Module V2" + + ;# {NoticesEnabled} {Module:GroupsModule Module:Groups Module V2} {Enable group notices?} {true false} true ;; Enable Group Notices ; NoticesEnabled = true diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example index 020815e1eb..f249dd235d 100644 --- a/bin/Robust.HG.ini.example +++ b/bin/Robust.HG.ini.example @@ -53,6 +53,8 @@ MapAddServiceConnector = "8003/OpenSim.Server.Handlers.dll:MapAddServiceConnecto MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnector" ;; Uncomment this if you want offline IM to work ;OfflineIMServiceConnector = "8003/OpenSim.Addons.OfflineIM.dll:OfflineIMServiceRobustConnector" +;; Uncomment this if you want Groups V2 to work +;GroupsServiceConnector = "8003/OpenSim.Addons.Groups.dll:GroupsServiceRobustConnector" ;; Additions for Hypergrid @@ -63,6 +65,8 @@ HGFriendsServerConnector = "8002/OpenSim.Server.Handlers.dll:HGFriendsServerConn InstantMessageServerConnector = "8002/OpenSim.Server.Handlers.dll:InstantMessageServerConnector" HGInventoryServiceConnector = "HGInventoryService@8002/OpenSim.Server.Handlers.dll:XInventoryInConnector" HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:AssetServiceConnector" +;; Uncomment this if you want Groups V2, HG to work +;HGGroupsServiceConnector = "8002/Diva.Groups.dll:HGGroupsServiceRobustConnector" ;; Additions for other add-on modules. For example: ;; WifiServerConnector = "8002/Diva.Wifi.dll:WifiServerConnector" @@ -550,3 +554,9 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset ; OfflineIM OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" +[Groups] + ;; for the HG Groups service + OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" + ; What is the HomeURI of users associated with this grid? + HomeURI = "http://127.0.0.1:8002" + UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example index 63a569937f..eee313aba5 100644 --- a/bin/Robust.ini.example +++ b/bin/Robust.ini.example @@ -45,6 +45,8 @@ MapAddServiceConnector = "8003/OpenSim.Server.Handlers.dll:MapAddServiceConnecto MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnector" ;; Uncomment this if you want offline IM to work ;OfflineIMServiceConnector = "8003/OpenSim.Addons.OfflineIM.dll:OfflineIMServiceRobustConnector" +;; Uncomment this if you want Groups V2 to work +;GroupsServiceConnector = "8003/OpenSim.Addons.Groups.dll:GroupsServiceRobustConnector" ; * This is common for all services, it's the network setup for the entire diff --git a/prebuild.xml b/prebuild.xml index 1caa54bbc0..fa193d9f28 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -2571,6 +2571,54 @@ + + + + ../../../bin/ + + + + + ../../../bin/ + + + + ../../bin/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From fc89987656ec8247b1ae703628f4b83e3b0eeb60 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 19 Feb 2013 07:30:55 -0800 Subject: [PATCH 13/30] Previous build failed. Checking in a dummy change to see if the fail persists. --- bin/Robust.HG.ini.example | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example index f249dd235d..3858a3c0f9 100644 --- a/bin/Robust.HG.ini.example +++ b/bin/Robust.HG.ini.example @@ -52,9 +52,9 @@ FriendsServiceConnector = "8003/OpenSim.Server.Handlers.dll:FriendsServiceConnec MapAddServiceConnector = "8003/OpenSim.Server.Handlers.dll:MapAddServiceConnector" MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnector" ;; Uncomment this if you want offline IM to work -;OfflineIMServiceConnector = "8003/OpenSim.Addons.OfflineIM.dll:OfflineIMServiceRobustConnector" +; OfflineIMServiceConnector = "8003/OpenSim.Addons.OfflineIM.dll:OfflineIMServiceRobustConnector" ;; Uncomment this if you want Groups V2 to work -;GroupsServiceConnector = "8003/OpenSim.Addons.Groups.dll:GroupsServiceRobustConnector" +; GroupsServiceConnector = "8003/OpenSim.Addons.Groups.dll:GroupsServiceRobustConnector" ;; Additions for Hypergrid @@ -66,7 +66,7 @@ InstantMessageServerConnector = "8002/OpenSim.Server.Handlers.dll:InstantMessage HGInventoryServiceConnector = "HGInventoryService@8002/OpenSim.Server.Handlers.dll:XInventoryInConnector" HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:AssetServiceConnector" ;; Uncomment this if you want Groups V2, HG to work -;HGGroupsServiceConnector = "8002/Diva.Groups.dll:HGGroupsServiceRobustConnector" +; HGGroupsServiceConnector = "8002/Diva.Groups.dll:HGGroupsServiceRobustConnector" ;; Additions for other add-on modules. For example: ;; WifiServerConnector = "8002/Diva.Wifi.dll:WifiServerConnector" From 036d73c52aaab019c868081630e6c839ff84fe4d Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 19 Feb 2013 07:55:20 -0800 Subject: [PATCH 14/30] This should fix the build fail. Fingers crossed. --- prebuild.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prebuild.xml b/prebuild.xml index fa193d9f28..7b28085839 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -2583,7 +2583,7 @@ - ../../bin/ + ../../../bin/ From 26dca1adc32e834e9debf47e66625fa36e7f3ace Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Tue, 19 Feb 2013 23:53:30 +0000 Subject: [PATCH 15/30] Convert JsonTestPath() use in json regression tests to JsonGetPathType() instead --- .../Tests/JsonStoreScriptModuleTests.cs | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs index db82d4bcdd..b64dbd40e9 100644 --- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs +++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/Tests/JsonStoreScriptModuleTests.cs @@ -158,8 +158,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests Assert.That(dsrv, Is.EqualTo(1)); - int tprv = (int)InvokeOp("JsonTestPath", storeId, "Hello"); - Assert.That(tprv, Is.EqualTo(0)); + int tprv = (int)InvokeOp("JsonGetPathType", storeId, "Hello"); + Assert.That(tprv, Is.EqualTo(JsonStoreScriptModule.JSON_TYPE_UNDEF)); } [Test] @@ -277,8 +277,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests int returnValue = (int)InvokeOp( "JsonRemoveValue", storeId, "Hello"); Assert.That(returnValue, Is.EqualTo(1)); - int result = (int)InvokeOp("JsonTestPath", storeId, "Hello"); - Assert.That(result, Is.EqualTo(0)); + int result = (int)InvokeOp("JsonGetPathType", storeId, "Hello"); + Assert.That(result, Is.EqualTo(JsonStoreScriptModule.JSON_TYPE_UNDEF)); string returnValue2 = (string)InvokeOp("JsonGetValue", storeId, "Hello"); Assert.That(returnValue2, Is.EqualTo("")); @@ -291,8 +291,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests int returnValue = (int)InvokeOp( "JsonRemoveValue", storeId, "Hello"); Assert.That(returnValue, Is.EqualTo(1)); - int result = (int)InvokeOp("JsonTestPath", storeId, "Hello"); - Assert.That(result, Is.EqualTo(0)); + int result = (int)InvokeOp("JsonGetPathType", storeId, "Hello"); + Assert.That(result, Is.EqualTo(JsonStoreScriptModule.JSON_TYPE_UNDEF)); string returnValue2 = (string)InvokeOp("JsonGetJson", storeId, "Hello"); Assert.That(returnValue2, Is.EqualTo("")); @@ -306,11 +306,11 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore.Tests int returnValue = (int)InvokeOp( "JsonRemoveValue", storeId, "Hello[0]"); Assert.That(returnValue, Is.EqualTo(1)); - int result = (int)InvokeOp("JsonTestPath", storeId, "Hello[0]"); - Assert.That(result, Is.EqualTo(1)); + int result = (int)InvokeOp("JsonGetPathType", storeId, "Hello[0]"); + Assert.That(result, Is.EqualTo(JsonStoreScriptModule.JSON_TYPE_VALUE)); - result = (int)InvokeOp("JsonTestPath", storeId, "Hello[1]"); - Assert.That(result, Is.EqualTo(0)); + result = (int)InvokeOp("JsonGetPathType", storeId, "Hello[1]"); + Assert.That(result, Is.EqualTo(JsonStoreScriptModule.JSON_TYPE_UNDEF)); string stringReturnValue = (string)InvokeOp("JsonGetValue", storeId, "Hello[0]"); Assert.That(stringReturnValue, Is.EqualTo("value2")); From 8a6f2432fc0c57645cb395578f373474548975e9 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 20 Feb 2013 00:01:20 +0000 Subject: [PATCH 16/30] minor: remove some mono compiler warnings in OpenSim.Region.ClientStack.Linden.Caps.dll --- .../ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs | 2 +- .../Region/ClientStack/Linden/Caps/RegionConsoleModule.cs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs index 1af61db48b..20df8a6a2e 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs @@ -912,7 +912,7 @@ namespace OpenSim.Region.ClientStack.Linden string param, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) { - OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request); +// OSDMap req = (OSDMap)OSDParser.DeserializeLLSDXml(request); OSDMap resp = new OSDMap(); OSDMap accessPrefs = new OSDMap(); diff --git a/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs index 17c7270479..69dd76fe45 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs @@ -56,8 +56,8 @@ namespace OpenSim.Region.ClientStack.Linden [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "RegionConsoleModule")] public class RegionConsoleModule : INonSharedRegionModule, IRegionConsole { - private static readonly ILog m_log = - LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); +// private static readonly ILog m_log = +// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private Scene m_scene; private IEventQueue m_eventQueue; @@ -157,8 +157,8 @@ namespace OpenSim.Region.ClientStack.Linden public class ConsoleHandler : BaseStreamHandler { - private static readonly ILog m_log = - LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); +// private static readonly ILog m_log = +// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private RegionConsoleModule m_consoleModule; private UUID m_agentID; From db2b3627f2e22f6e677dc77cd0225c3937fff1b8 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 20 Feb 2013 00:48:02 +0000 Subject: [PATCH 17/30] Add information about MinLoginLevel to example ini files --- bin/Robust.ini.example | 7 ++++++- bin/config-include/StandaloneCommon.ini.example | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example index eee313aba5..05ea67024f 100644 --- a/bin/Robust.ini.example +++ b/bin/Robust.ini.example @@ -261,7 +261,12 @@ MapGetServiceConnector = "8002/OpenSim.Server.Handlers.dll:MapGetServiceConnecto LibraryService = "OpenSim.Services.InventoryService.dll:LibraryService" FriendsService = "OpenSim.Services.FriendsService.dll:FriendsService" - ;; Ask co-operative viewers to use a different currency name + ; The minimum user level required for a user to be able to login. 0 by default + ; If you disable a particular user's account then you can set their login level below this number. + ; You can also change this level from the console though these changes will not be persisted. + ; MinLoginLevel = 0 + + ; Ask co-operative viewers to use a different currency name ;Currency = "" WelcomeMessage = "Welcome, Avatar!" diff --git a/bin/config-include/StandaloneCommon.ini.example b/bin/config-include/StandaloneCommon.ini.example index f28de437cd..ffa2d4999a 100644 --- a/bin/config-include/StandaloneCommon.ini.example +++ b/bin/config-include/StandaloneCommon.ini.example @@ -85,6 +85,11 @@ ;; For Viewer 2 MapTileURL = "http://127.0.0.1:9000/" + ; The minimum user level required for a user to be able to login. 0 by default + ; If you disable a particular user's account then you can set their login level below this number. + ; You can also change this level from the console though these changes will not be persisted. + ; MinLoginLevel = 0 + ;; Ask co-operative viewers to use a different currency name ;Currency = "" From 05a0998f57437c8fc38e9876dfda5ad037ddeb5f Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 20 Feb 2013 00:51:55 +0000 Subject: [PATCH 18/30] Give the user some feedback about the success or failure of console login property commands --- OpenSim/Services/LLLoginService/LLLoginService.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 59fb55981b..5f30f84f74 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs @@ -961,14 +961,25 @@ namespace OpenSim.Services.LLLoginService // or fixing critical issues // if (cmd.Length > 2) - Int32.TryParse(cmd[2], out m_MinLoginLevel); + { + if (Int32.TryParse(cmd[2], out m_MinLoginLevel)) + MainConsole.Instance.OutputFormat("Set minimum login level to {0}", m_MinLoginLevel); + else + MainConsole.Instance.OutputFormat("ERROR: {0} is not a valid login level", cmd[2]); + } break; - case "reset": + + case "reset": m_MinLoginLevel = 0; + MainConsole.Instance.OutputFormat("Reset min login level to {0}", m_MinLoginLevel); break; + case "text": if (cmd.Length > 2) + { m_WelcomeMessage = cmd[2]; + MainConsole.Instance.OutputFormat("Login welcome message set to '{0}'", m_WelcomeMessage); + } break; } } From 66bc526e4c52be5985eef648d27cc2c9edca8d34 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 19 Feb 2013 17:04:21 -0800 Subject: [PATCH 19/30] Updated AssemblyInfo.cs for Groups and OfflineIM to 0.7.6.*. Removed AssemblyFileVersionNumber too. --- OpenSim/Addons/Groups/Properties/AssemblyInfo.cs | 3 +-- OpenSim/Addons/OfflineIM/Properties/AssemblyInfo.cs | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/OpenSim/Addons/Groups/Properties/AssemblyInfo.cs b/OpenSim/Addons/Groups/Properties/AssemblyInfo.cs index 166803f7f5..5ccd7fea1b 100644 --- a/OpenSim/Addons/Groups/Properties/AssemblyInfo.cs +++ b/OpenSim/Addons/Groups/Properties/AssemblyInfo.cs @@ -30,8 +30,7 @@ using Mono.Addins; // Build Number // Revision // -[assembly: AssemblyVersion("0.7.5.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("0.7.6.*")] [assembly: Addin("OpenSim.Groups", "0.1")] [assembly: AddinDependency("OpenSim", "0.5")] diff --git a/OpenSim/Addons/OfflineIM/Properties/AssemblyInfo.cs b/OpenSim/Addons/OfflineIM/Properties/AssemblyInfo.cs index 31667eb745..ffe8a3ec21 100644 --- a/OpenSim/Addons/OfflineIM/Properties/AssemblyInfo.cs +++ b/OpenSim/Addons/OfflineIM/Properties/AssemblyInfo.cs @@ -30,8 +30,7 @@ using Mono.Addins; // Build Number // Revision // -[assembly: AssemblyVersion("0.7.5.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("0.7.6.*")] [assembly: Addin("OpenSim.OfflineIM", "0.1")] [assembly: AddinDependency("OpenSim", "0.5")] From 4779f7d7d5ce0e284d9ed15104389f8479b11545 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Tue, 19 Feb 2013 17:14:55 -0800 Subject: [PATCH 20/30] Deleted all AssemblyFileVersion directives --- .../ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs | 1 - .../RegionModulesController/Properties/AssemblyInfo.cs | 2 +- .../RemoteController/Properties/AssemblyInfo.cs | 2 +- OpenSim/Capabilities/Handlers/Properties/AssemblyInfo.cs | 2 +- OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs | 2 +- OpenSim/Data/MySQL/Properties/AssemblyInfo.cs | 2 +- OpenSim/Data/Null/Properties/AssemblyInfo.cs | 2 +- OpenSim/Data/Properties/AssemblyInfo.cs | 2 +- OpenSim/Data/SQLite/Properties/AssemblyInfo.cs | 2 +- OpenSim/Framework/AssemblyInfo.cs | 1 - .../Framework/AssetLoader/Filesystem/Properties/AssemblyInfo.cs | 2 +- OpenSim/Framework/Communications/Properties/AssemblyInfo.cs | 2 +- OpenSim/Framework/Configuration/HTTP/Properties/AssemblyInfo.cs | 2 +- OpenSim/Framework/Configuration/XML/Properties/AssemblyInfo.cs | 2 +- OpenSim/Framework/Monitoring/Properties/AssemblyInfo.cs | 2 +- .../RegionLoader/Filesystem/Properties/AssemblyInfo.cs | 2 +- OpenSim/Framework/RegionLoader/Web/Properties/AssemblyInfo.cs | 2 +- OpenSim/Framework/Serialization/Properties/AssemblyInfo.cs | 2 +- OpenSim/Framework/Servers/HttpServer/Properties/AssemblyInfo.cs | 2 +- .../Region/ClientStack/Linden/Caps/Properties/AssemblyInfo.cs | 2 +- .../Region/ClientStack/Linden/UDP/Properties/AssemblyInfo.cs | 2 +- OpenSim/Region/CoreModules/Properties/AssemblyInfo.cs | 2 +- OpenSim/Region/DataSnapshot/Properties/AssemblyInfo.cs | 2 +- OpenSim/Region/Framework/Properties/AssemblyInfo.cs | 2 +- OpenSim/Region/OptionalModules/Properties/AssemblyInfo.cs | 2 +- OpenSim/Region/Physics/BulletSPlugin/Properties/AssemblyInfo.cs | 2 +- .../ConvexDecompositionDotNet/Properties/AssemblyInfo.cs | 2 +- OpenSim/Region/Physics/Meshing/Properties/AssemblyInfo.cs | 2 +- OpenSim/Region/RegionCombinerModule/Properties/AssemblyInfo.cs | 2 +- .../Shared/Api/Implementation/Properties/AssemblyInfo.cs | 2 +- .../ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs | 2 +- .../ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs | 2 +- OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs | 2 +- OpenSim/Region/UserStatistics/Properties/AssemblyInfo.cs | 2 +- OpenSim/Server/Base/Properties/AssemblyInfo.cs | 2 +- OpenSim/Server/Handlers/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/AssetService/Properties/AssemblyInfo.cs | 2 +- .../Services/AuthenticationService/Properties/AssemblyInfo.cs | 2 +- .../Services/AuthorizationService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/AvatarService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/Base/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/Connectors/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/FreeswitchService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/Friends/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/GridService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/HypergridService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/Interfaces/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/InventoryService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/LLLoginService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/MapImageService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/PresenceService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Services/UserAccountService/Properties/AssemblyInfo.cs | 2 +- OpenSim/Tools/Compiler/Properties/AssemblyInfo.cs | 2 +- OpenSim/Tools/Configger/Properties/AssemblyInfo.cs | 2 +- OpenSim/Tools/pCampBot/Properties/AssemblyInfo.cs | 2 +- 55 files changed, 53 insertions(+), 55 deletions(-) diff --git a/OpenSim/ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs b/OpenSim/ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs index b81c1e5f28..1b6a3e1a8e 100644 --- a/OpenSim/ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs +++ b/OpenSim/ApplicationPlugins/LoadRegions/Properties/AssemblyInfo.cs @@ -63,4 +63,3 @@ using System.Runtime.InteropServices; // [assembly: AssemblyVersion("0.7.6.*")] [assembly : AssemblyVersion("0.7.6.*")] -[assembly : AssemblyFileVersion("0.6.5.0")] \ No newline at end of file diff --git a/OpenSim/ApplicationPlugins/RegionModulesController/Properties/AssemblyInfo.cs b/OpenSim/ApplicationPlugins/RegionModulesController/Properties/AssemblyInfo.cs index be6054d150..5683a72313 100644 --- a/OpenSim/ApplicationPlugins/RegionModulesController/Properties/AssemblyInfo.cs +++ b/OpenSim/ApplicationPlugins/RegionModulesController/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs b/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs index 3ec7a13883..a9d3f74ecd 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Capabilities/Handlers/Properties/AssemblyInfo.cs b/OpenSim/Capabilities/Handlers/Properties/AssemblyInfo.cs index 4ff5fe1d9a..f8f63f437b 100644 --- a/OpenSim/Capabilities/Handlers/Properties/AssemblyInfo.cs +++ b/OpenSim/Capabilities/Handlers/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs b/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs index 4e96be8da4..9bc580e76a 100644 --- a/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs +++ b/OpenSim/Data/MSSQL/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: [assembly : AssemblyVersion("0.7.6.*")] -[assembly : AssemblyFileVersion("0.6.5.0")] + diff --git a/OpenSim/Data/MySQL/Properties/AssemblyInfo.cs b/OpenSim/Data/MySQL/Properties/AssemblyInfo.cs index 7bfa28dd39..1146d92e9d 100644 --- a/OpenSim/Data/MySQL/Properties/AssemblyInfo.cs +++ b/OpenSim/Data/MySQL/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: [assembly : AssemblyVersion("0.7.6.*")] -[assembly : AssemblyFileVersion("0.6.5.0")] + diff --git a/OpenSim/Data/Null/Properties/AssemblyInfo.cs b/OpenSim/Data/Null/Properties/AssemblyInfo.cs index 3931b3dab8..1e02c31bda 100644 --- a/OpenSim/Data/Null/Properties/AssemblyInfo.cs +++ b/OpenSim/Data/Null/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: [assembly : AssemblyVersion("0.7.6.*")] -[assembly : AssemblyFileVersion("0.6.5.0")] + diff --git a/OpenSim/Data/Properties/AssemblyInfo.cs b/OpenSim/Data/Properties/AssemblyInfo.cs index 9f342ad571..a85f47306c 100644 --- a/OpenSim/Data/Properties/AssemblyInfo.cs +++ b/OpenSim/Data/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: [assembly : AssemblyVersion("0.7.6.*")] -[assembly : AssemblyFileVersion("0.6.5.0")] + diff --git a/OpenSim/Data/SQLite/Properties/AssemblyInfo.cs b/OpenSim/Data/SQLite/Properties/AssemblyInfo.cs index ba52f8258b..992982ce76 100644 --- a/OpenSim/Data/SQLite/Properties/AssemblyInfo.cs +++ b/OpenSim/Data/SQLite/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: [assembly : AssemblyVersion("0.7.6.*")] -[assembly : AssemblyFileVersion("0.6.5.0")] + diff --git a/OpenSim/Framework/AssemblyInfo.cs b/OpenSim/Framework/AssemblyInfo.cs index b3db56c3ec..d6b4e6adbf 100644 --- a/OpenSim/Framework/AssemblyInfo.cs +++ b/OpenSim/Framework/AssemblyInfo.cs @@ -60,4 +60,3 @@ using System.Runtime.InteropServices; // [assembly : AssemblyVersion("0.7.6.*")] -[assembly : AssemblyFileVersion("0.6.5.0")] \ No newline at end of file diff --git a/OpenSim/Framework/AssetLoader/Filesystem/Properties/AssemblyInfo.cs b/OpenSim/Framework/AssetLoader/Filesystem/Properties/AssemblyInfo.cs index 077244d4e6..feffa26dbc 100644 --- a/OpenSim/Framework/AssetLoader/Filesystem/Properties/AssemblyInfo.cs +++ b/OpenSim/Framework/AssetLoader/Filesystem/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs b/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs index cf575ac63b..df8eb520e1 100644 --- a/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs +++ b/OpenSim/Framework/Communications/Properties/AssemblyInfo.cs @@ -62,4 +62,4 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: [assembly : AssemblyVersion("0.7.6.*")] -[assembly : AssemblyFileVersion("0.6.5.0")] + diff --git a/OpenSim/Framework/Configuration/HTTP/Properties/AssemblyInfo.cs b/OpenSim/Framework/Configuration/HTTP/Properties/AssemblyInfo.cs index c3b6227e9c..3ef9682a95 100644 --- a/OpenSim/Framework/Configuration/HTTP/Properties/AssemblyInfo.cs +++ b/OpenSim/Framework/Configuration/HTTP/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Framework/Configuration/XML/Properties/AssemblyInfo.cs b/OpenSim/Framework/Configuration/XML/Properties/AssemblyInfo.cs index b0d2d67424..cbdffeb78c 100644 --- a/OpenSim/Framework/Configuration/XML/Properties/AssemblyInfo.cs +++ b/OpenSim/Framework/Configuration/XML/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Framework/Monitoring/Properties/AssemblyInfo.cs b/OpenSim/Framework/Monitoring/Properties/AssemblyInfo.cs index bb83db1d73..36678bbe3e 100644 --- a/OpenSim/Framework/Monitoring/Properties/AssemblyInfo.cs +++ b/OpenSim/Framework/Monitoring/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Framework/RegionLoader/Filesystem/Properties/AssemblyInfo.cs b/OpenSim/Framework/RegionLoader/Filesystem/Properties/AssemblyInfo.cs index f836350fec..d4806f17f6 100644 --- a/OpenSim/Framework/RegionLoader/Filesystem/Properties/AssemblyInfo.cs +++ b/OpenSim/Framework/RegionLoader/Filesystem/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Framework/RegionLoader/Web/Properties/AssemblyInfo.cs b/OpenSim/Framework/RegionLoader/Web/Properties/AssemblyInfo.cs index 72fa67981a..1541a5bced 100644 --- a/OpenSim/Framework/RegionLoader/Web/Properties/AssemblyInfo.cs +++ b/OpenSim/Framework/RegionLoader/Web/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Framework/Serialization/Properties/AssemblyInfo.cs b/OpenSim/Framework/Serialization/Properties/AssemblyInfo.cs index 7a122dadbe..a8dff93458 100644 --- a/OpenSim/Framework/Serialization/Properties/AssemblyInfo.cs +++ b/OpenSim/Framework/Serialization/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Framework/Servers/HttpServer/Properties/AssemblyInfo.cs b/OpenSim/Framework/Servers/HttpServer/Properties/AssemblyInfo.cs index 386be2de5c..8e592c1e07 100644 --- a/OpenSim/Framework/Servers/HttpServer/Properties/AssemblyInfo.cs +++ b/OpenSim/Framework/Servers/HttpServer/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/ClientStack/Linden/Caps/Properties/AssemblyInfo.cs b/OpenSim/Region/ClientStack/Linden/Caps/Properties/AssemblyInfo.cs index d29a00174e..595d01a365 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/ClientStack/Linden/UDP/Properties/AssemblyInfo.cs b/OpenSim/Region/ClientStack/Linden/UDP/Properties/AssemblyInfo.cs index 8f9dad35ba..98ef72f6b1 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/CoreModules/Properties/AssemblyInfo.cs b/OpenSim/Region/CoreModules/Properties/AssemblyInfo.cs index f6353f913f..bfe0383c26 100644 --- a/OpenSim/Region/CoreModules/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/CoreModules/Properties/AssemblyInfo.cs @@ -31,7 +31,7 @@ using Mono.Addins; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + [assembly: Addin("OpenSim.Region.CoreModules", "0.1")] [assembly: AddinDependency("OpenSim", "0.5")] diff --git a/OpenSim/Region/DataSnapshot/Properties/AssemblyInfo.cs b/OpenSim/Region/DataSnapshot/Properties/AssemblyInfo.cs index 0f083c7b35..0e7df07adb 100644 --- a/OpenSim/Region/DataSnapshot/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/DataSnapshot/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/Framework/Properties/AssemblyInfo.cs b/OpenSim/Region/Framework/Properties/AssemblyInfo.cs index 2a5828e072..167c248390 100644 --- a/OpenSim/Region/Framework/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/Framework/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/OptionalModules/Properties/AssemblyInfo.cs b/OpenSim/Region/OptionalModules/Properties/AssemblyInfo.cs index 00655312d1..70bda72c07 100644 --- a/OpenSim/Region/OptionalModules/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/OptionalModules/Properties/AssemblyInfo.cs @@ -31,7 +31,7 @@ using Mono.Addins; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + [assembly: Addin("OpenSim.Region.OptionalModules", "0.1")] [assembly: AddinDependency("OpenSim", "0.5")] diff --git a/OpenSim/Region/Physics/BulletSPlugin/Properties/AssemblyInfo.cs b/OpenSim/Region/Physics/BulletSPlugin/Properties/AssemblyInfo.cs index d240c71814..02b03a8cfe 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/Physics/ConvexDecompositionDotNet/Properties/AssemblyInfo.cs b/OpenSim/Region/Physics/ConvexDecompositionDotNet/Properties/AssemblyInfo.cs index cafd7f41f5..f611b9ac26 100644 --- a/OpenSim/Region/Physics/ConvexDecompositionDotNet/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/Physics/ConvexDecompositionDotNet/Properties/AssemblyInfo.cs @@ -33,4 +33,4 @@ using System.Runtime.InteropServices; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/Physics/Meshing/Properties/AssemblyInfo.cs b/OpenSim/Region/Physics/Meshing/Properties/AssemblyInfo.cs index bd70296cb6..3de061a83c 100644 --- a/OpenSim/Region/Physics/Meshing/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/Physics/Meshing/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/RegionCombinerModule/Properties/AssemblyInfo.cs b/OpenSim/Region/RegionCombinerModule/Properties/AssemblyInfo.cs index ca945b579f..86a3101061 100644 --- a/OpenSim/Region/RegionCombinerModule/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/RegionCombinerModule/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Properties/AssemblyInfo.cs index 3c01eecc89..6d218a6778 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs index fd37753eb0..5b5c4fd954 100644 --- a/OpenSim/Region/ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/ScriptEngine/Shared/CodeTools/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs index 74747a2435..48964b6028 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Instance/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs index a8871715a1..f0640da83e 100644 --- a/OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/ScriptEngine/XEngine/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Region/UserStatistics/Properties/AssemblyInfo.cs b/OpenSim/Region/UserStatistics/Properties/AssemblyInfo.cs index caa6d4e2a0..1fff12a60c 100644 --- a/OpenSim/Region/UserStatistics/Properties/AssemblyInfo.cs +++ b/OpenSim/Region/UserStatistics/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Server/Base/Properties/AssemblyInfo.cs b/OpenSim/Server/Base/Properties/AssemblyInfo.cs index 8b4556418e..b4732b883a 100644 --- a/OpenSim/Server/Base/Properties/AssemblyInfo.cs +++ b/OpenSim/Server/Base/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Server/Handlers/Properties/AssemblyInfo.cs b/OpenSim/Server/Handlers/Properties/AssemblyInfo.cs index d72d36a091..3295ffd7b8 100644 --- a/OpenSim/Server/Handlers/Properties/AssemblyInfo.cs +++ b/OpenSim/Server/Handlers/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/AssetService/Properties/AssemblyInfo.cs b/OpenSim/Services/AssetService/Properties/AssemblyInfo.cs index b57052c4d7..50ee0335a3 100644 --- a/OpenSim/Services/AssetService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/AssetService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/AuthenticationService/Properties/AssemblyInfo.cs b/OpenSim/Services/AuthenticationService/Properties/AssemblyInfo.cs index 99c46ecb33..435852da35 100644 --- a/OpenSim/Services/AuthenticationService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/AuthenticationService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/AuthorizationService/Properties/AssemblyInfo.cs b/OpenSim/Services/AuthorizationService/Properties/AssemblyInfo.cs index 33e48d3c3c..8db16710ba 100644 --- a/OpenSim/Services/AuthorizationService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/AuthorizationService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/AvatarService/Properties/AssemblyInfo.cs b/OpenSim/Services/AvatarService/Properties/AssemblyInfo.cs index 8b0214a536..138d4cd4c1 100644 --- a/OpenSim/Services/AvatarService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/AvatarService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/Base/Properties/AssemblyInfo.cs b/OpenSim/Services/Base/Properties/AssemblyInfo.cs index 2825a8865e..84a40f0f7e 100644 --- a/OpenSim/Services/Base/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/Base/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/Connectors/Properties/AssemblyInfo.cs b/OpenSim/Services/Connectors/Properties/AssemblyInfo.cs index 73fc72c5a6..8b18afb515 100644 --- a/OpenSim/Services/Connectors/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/Connectors/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/FreeswitchService/Properties/AssemblyInfo.cs b/OpenSim/Services/FreeswitchService/Properties/AssemblyInfo.cs index fdd4b694f5..b488b361e3 100644 --- a/OpenSim/Services/FreeswitchService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/FreeswitchService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/Friends/Properties/AssemblyInfo.cs b/OpenSim/Services/Friends/Properties/AssemblyInfo.cs index cb624f03db..b11d07d926 100644 --- a/OpenSim/Services/Friends/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/Friends/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/GridService/Properties/AssemblyInfo.cs b/OpenSim/Services/GridService/Properties/AssemblyInfo.cs index 09084d328d..b1e5e12cf7 100644 --- a/OpenSim/Services/GridService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/GridService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/HypergridService/Properties/AssemblyInfo.cs b/OpenSim/Services/HypergridService/Properties/AssemblyInfo.cs index fe1889d06f..8d66f1b778 100644 --- a/OpenSim/Services/HypergridService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/HypergridService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/Interfaces/Properties/AssemblyInfo.cs b/OpenSim/Services/Interfaces/Properties/AssemblyInfo.cs index 669e0b889c..47ece7513c 100644 --- a/OpenSim/Services/Interfaces/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/Interfaces/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/InventoryService/Properties/AssemblyInfo.cs b/OpenSim/Services/InventoryService/Properties/AssemblyInfo.cs index 0870065ff3..bfae81f33c 100644 --- a/OpenSim/Services/InventoryService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/InventoryService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/LLLoginService/Properties/AssemblyInfo.cs b/OpenSim/Services/LLLoginService/Properties/AssemblyInfo.cs index 3ac8af7a1f..0a6daee62d 100644 --- a/OpenSim/Services/LLLoginService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/LLLoginService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/MapImageService/Properties/AssemblyInfo.cs b/OpenSim/Services/MapImageService/Properties/AssemblyInfo.cs index 69adf73a37..19936e5628 100644 --- a/OpenSim/Services/MapImageService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/MapImageService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/PresenceService/Properties/AssemblyInfo.cs b/OpenSim/Services/PresenceService/Properties/AssemblyInfo.cs index 040bbe0640..5d433df753 100644 --- a/OpenSim/Services/PresenceService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/PresenceService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Services/UserAccountService/Properties/AssemblyInfo.cs b/OpenSim/Services/UserAccountService/Properties/AssemblyInfo.cs index 576ccce768..e7d2d6fe97 100644 --- a/OpenSim/Services/UserAccountService/Properties/AssemblyInfo.cs +++ b/OpenSim/Services/UserAccountService/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Tools/Compiler/Properties/AssemblyInfo.cs b/OpenSim/Tools/Compiler/Properties/AssemblyInfo.cs index b98e2d2712..088be45ac9 100644 --- a/OpenSim/Tools/Compiler/Properties/AssemblyInfo.cs +++ b/OpenSim/Tools/Compiler/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Tools/Configger/Properties/AssemblyInfo.cs b/OpenSim/Tools/Configger/Properties/AssemblyInfo.cs index 89aafa3b57..0348628ecb 100644 --- a/OpenSim/Tools/Configger/Properties/AssemblyInfo.cs +++ b/OpenSim/Tools/Configger/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + diff --git a/OpenSim/Tools/pCampBot/Properties/AssemblyInfo.cs b/OpenSim/Tools/pCampBot/Properties/AssemblyInfo.cs index c4d278a2e7..78f3603b2e 100644 --- a/OpenSim/Tools/pCampBot/Properties/AssemblyInfo.cs +++ b/OpenSim/Tools/pCampBot/Properties/AssemblyInfo.cs @@ -30,4 +30,4 @@ using System.Runtime.InteropServices; // Revision // [assembly: AssemblyVersion("0.7.6.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] + From 903b40b47e53cc131b57919e8a8a83db3cb36f96 Mon Sep 17 00:00:00 2001 From: Mic Bowman Date: Tue, 19 Feb 2013 22:53:46 -0800 Subject: [PATCH 21/30] Fix the JsonStore path set problem justincc found earlier today and remove the deprecated TestPath functions. --- .../Framework/Interfaces/IJsonStoreModule.cs | 1 - .../Scripting/JsonStore/JsonStore.cs | 28 ++------------ .../Scripting/JsonStore/JsonStoreModule.cs | 32 ---------------- .../JsonStore/JsonStoreScriptModule.cs | 38 ------------------- 4 files changed, 3 insertions(+), 96 deletions(-) diff --git a/OpenSim/Region/Framework/Interfaces/IJsonStoreModule.cs b/OpenSim/Region/Framework/Interfaces/IJsonStoreModule.cs index b40d24fa72..345f01bce2 100644 --- a/OpenSim/Region/Framework/Interfaces/IJsonStoreModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IJsonStoreModule.cs @@ -51,7 +51,6 @@ namespace OpenSim.Region.Framework.Interfaces JsonStoreNodeType GetPathType(UUID storeID, string path); bool TestStore(UUID storeID); - bool TestPath(UUID storeID, string path, bool useJson); bool SetValue(UUID storeID, string path, string value, bool useJson); bool RemoveValue(UUID storeID, string path); diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs index ca3989a668..40adba1939 100644 --- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs +++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs @@ -84,11 +84,11 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore protected static Regex m_PathComponent = new Regex("\\.({[^}]+}|\\[[0-9]+\\]|\\[\\+\\])"); // extract the internals of an array reference - protected static Regex m_SimpleArrayPattern = new Regex("\\[([0-9]+)\\]"); - protected static Regex m_ArrayPattern = new Regex("\\[([0-9]+|\\+)\\]"); + protected static Regex m_SimpleArrayPattern = new Regex("^\\[([0-9]+)\\]$"); + protected static Regex m_ArrayPattern = new Regex("^\\[([0-9]+|\\+)\\]$"); // extract the internals of a has reference - protected static Regex m_HashPattern = new Regex("{([^}]+)}"); + protected static Regex m_HashPattern = new Regex("^{([^}]+)}$"); // ----------------------------------------------------------------- /// @@ -168,28 +168,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore return JsonStoreNodeType.Undefined; } - // ----------------------------------------------------------------- - /// - /// - /// - // ----------------------------------------------------------------- - public bool TestPath(string expr, bool useJson) - { - Stack path; - if (! ParsePathExpression(expr,out path)) - return false; - - OSD result = ProcessPathExpression(ValueStore,path); - - if (result == null) - return false; - - if (useJson || OSDBaseType(result.Type)) - return true; - - return false; - } - // ----------------------------------------------------------------- /// /// diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs index fb350683a6..e78a2f4fa3 100644 --- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs +++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs @@ -297,38 +297,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore return JsonStoreNodeType.Undefined; } - // ----------------------------------------------------------------- - /// - /// - /// - // ----------------------------------------------------------------- - public bool TestPath(UUID storeID, string path, bool useJson) - { - if (! m_enabled) return false; - - JsonStore map = null; - lock (m_JsonValueStore) - { - if (! m_JsonValueStore.TryGetValue(storeID,out map)) - { - m_log.InfoFormat("[JsonStore] Missing store {0}",storeID); - return false; - } - } - - try - { - lock (map) - return map.TestPath(path,useJson); - } - catch (Exception e) - { - m_log.Error(string.Format("[JsonStore]: Path test failed for {0} in {1}", path, storeID), e); - } - - return false; - } - // ----------------------------------------------------------------- /// /// diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs index ef08c05b9c..e13eb56439 100644 --- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs +++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreScriptModule.cs @@ -168,32 +168,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore { m_comms.RegisterScriptInvocations(this); m_comms.RegisterConstants(this); - - // m_comms.RegisterScriptInvocation(this, "JsonCreateStore"); - // m_comms.RegisterScriptInvocation(this, "JsonAttachObjectStore"); - // m_comms.RegisterScriptInvocation(this, "JsonDestroyStore"); - // m_comms.RegisterScriptInvocation(this, "JsonTestStore"); - - // m_comms.RegisterScriptInvocation(this, "JsonReadNotecard"); - // m_comms.RegisterScriptInvocation(this, "JsonWriteNotecard"); - - // m_comms.RegisterScriptInvocation(this, "JsonTestPathList"); - // m_comms.RegisterScriptInvocation(this, "JsonTestPath"); - // m_comms.RegisterScriptInvocation(this, "JsonTestPathJson"); - - // m_comms.RegisterScriptInvocation(this, "JsonGetValue"); - // m_comms.RegisterScriptInvocation(this, "JsonGetValueJson"); - - // m_comms.RegisterScriptInvocation(this, "JsonTakeValue"); - // m_comms.RegisterScriptInvocation(this, "JsonTakeValueJson"); - - // m_comms.RegisterScriptInvocation(this, "JsonReadValue"); - // m_comms.RegisterScriptInvocation(this, "JsonReadValueJson"); - - // m_comms.RegisterScriptInvocation(this, "JsonSetValue"); - // m_comms.RegisterScriptInvocation(this, "JsonSetValueJson"); - - // m_comms.RegisterScriptInvocation(this, "JsonRemoveValue"); } catch (Exception e) { @@ -341,18 +315,6 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore return (int)m_store.GetPathType(storeID,path); } - [ScriptInvocation] - public int JsonTestPath(UUID hostID, UUID scriptID, UUID storeID, string path) - { - return m_store.TestPath(storeID,path,false) ? 1 : 0; - } - - [ScriptInvocation] - public int JsonTestPathJson(UUID hostID, UUID scriptID, UUID storeID, string path) - { - return m_store.TestPath(storeID,path,true) ? 1 : 0; - } - // ----------------------------------------------------------------- /// /// From a671c06ee59e17a6ae7be9740e8e045ae9ac224c Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 20 Feb 2013 22:09:33 +0000 Subject: [PATCH 22/30] Correct mistake in parsing 'show object pos' and similar pos commands where the 'to' text would be treat as the end vector rather than discarded. Before this, the commands still work but the help text is wrong - one has to leave out the 'to' in stating the vectors --- OpenSim/Framework/Console/ConsoleUtil.cs | 8 ++++---- .../World/Objects/Commands/ObjectCommandsModule.cs | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/OpenSim/Framework/Console/ConsoleUtil.cs b/OpenSim/Framework/Console/ConsoleUtil.cs index dff956adb3..97a86a8099 100644 --- a/OpenSim/Framework/Console/ConsoleUtil.cs +++ b/OpenSim/Framework/Console/ConsoleUtil.cs @@ -49,14 +49,14 @@ namespace OpenSim.Framework.Console = @"Each component of the coord is comma separated. There must be no spaces between the commas. If you don't care about the z component you can simply omit it. If you don't care about the x or y components then you can leave them blank (though a comma is still required) - If you want to specify the maxmimum value of a component then you can use ~ instead of a number + If you want to specify the maximum value of a component then you can use ~ instead of a number If you want to specify the minimum value of a component then you can use -~ instead of a number e.g. - delete object pos 20,20,20 to 40,40,40 + show object pos 20,20,20 to 40,40,40 delete object pos 20,20 to 40,40 - delete object pos ,20,20 to ,40,40 + show object pos ,20,20 to ,40,40 delete object pos ,,30 to ,,~ - delete object pos ,,-~ to ,,30"; + show object pos ,,-~ to ,,30"; public const string MinRawConsoleVectorValue = "-~"; public const string MaxRawConsoleVectorValue = "~"; diff --git a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs index 9fc2dafafc..28db407a47 100644 --- a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs @@ -416,7 +416,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands if (!ConsoleUtil.TryParseConsoleMinVector(rawConsoleStartVector, out startVector)) { - m_console.OutputFormat("Error: Start vector {0} does not have a valid format", rawConsoleStartVector); + m_console.OutputFormat("Error: Start vector '{0}' does not have a valid format", rawConsoleStartVector); return; } @@ -425,7 +425,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands if (!ConsoleUtil.TryParseConsoleMaxVector(rawConsoleEndVector, out endVector)) { - m_console.OutputFormat("Error: End vector {0} does not have a valid format", rawConsoleEndVector); + m_console.OutputFormat("Error: End vector '{0}' does not have a valid format", rawConsoleEndVector); return; } @@ -896,17 +896,17 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands if (!ConsoleUtil.TryParseConsoleMinVector(rawConsoleStartVector, out startVector)) { - m_console.OutputFormat("Error: Start vector {0} does not have a valid format", rawConsoleStartVector); + m_console.OutputFormat("Error: Start vector '{0}' does not have a valid format", rawConsoleStartVector); endVector = Vector3.Zero; return false; } - string rawConsoleEndVector = rawComponents.Skip(1).Take(1).Single(); + string rawConsoleEndVector = rawComponents.Skip(2).Take(1).Single(); if (!ConsoleUtil.TryParseConsoleMaxVector(rawConsoleEndVector, out endVector)) { - m_console.OutputFormat("Error: End vector {0} does not have a valid format", rawConsoleEndVector); + m_console.OutputFormat("Error: End vector '{0}' does not have a valid format", rawConsoleEndVector); return false; } From 16bb40229b84cff5f2543591464256907855cb2a Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Wed, 20 Feb 2013 14:10:32 -0800 Subject: [PATCH 23/30] Add flush after write feature to LogWriter --- .../Framework/Statistics/Logging/LogWriter.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/OpenSim/Region/CoreModules/Framework/Statistics/Logging/LogWriter.cs b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/LogWriter.cs index fd8d5e32bd..3c8e0efa05 100755 --- a/OpenSim/Region/CoreModules/Framework/Statistics/Logging/LogWriter.cs +++ b/OpenSim/Region/CoreModules/Framework/Statistics/Logging/LogWriter.cs @@ -52,6 +52,7 @@ namespace OpenSim.Region.CoreModules.Framework.Statistics.Logging private TimeSpan m_logFileLife; private DateTime m_logFileEndTime; private Object m_logFileWriteLock = new Object(); + private bool m_flushWrite; // set externally when debugging. If let 'null', this does not write any error messages. public ILog ErrorLogger = null; @@ -73,7 +74,9 @@ namespace OpenSim.Region.CoreModules.Framework.Statistics.Logging /// The directory to create the log file in. May be 'null' for default. /// The characters that begin the log file name. May be 'null' for default. /// Maximum age of a log file in minutes. If zero, will set default. - public LogWriter(string dir, string headr, int maxFileTime) + /// Whether to do a flush after every log write. Best left off but + /// if one is looking for a crash, this is a good thing to turn on. + public LogWriter(string dir, string headr, int maxFileTime, bool flushWrite) { m_logDirectory = dir == null ? "." : dir; @@ -86,8 +89,14 @@ namespace OpenSim.Region.CoreModules.Framework.Statistics.Logging m_logFileLife = new TimeSpan(0, m_logMaxFileTimeMin, 0); m_logFileEndTime = DateTime.Now + m_logFileLife; + m_flushWrite = flushWrite; + Enabled = true; } + // Constructor that assumes flushWrite is off. + public LogWriter(string dir, string headr, int maxFileTime) : this(dir, headr, maxFileTime, false) + { + } public void Dispose() { @@ -153,6 +162,8 @@ namespace OpenSim.Region.CoreModules.Framework.Statistics.Logging buff.Append(line); buff.Append("\r\n"); m_logFile.Write(buff.ToString()); + if (m_flushWrite) + m_logFile.Flush(); } } } From 681653ca130eaf15c62aae6fd1a7c5276036a0e9 Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Wed, 20 Feb 2013 14:11:02 -0800 Subject: [PATCH 24/30] Add a method to IStatsCollector for returning stats as an OSDMap. Extend implementors of IStatsCollector to return an OSDMap of stats. Update UserStatsCollector and AssetStatsCollector to return both string and OSDMap data (as well as console format). --- .../Monitoring/AssetStatsCollector.cs | 26 +++++++++++++++++++ .../Monitoring/BaseStatsCollector.cs | 7 +++++ .../Monitoring/Interfaces/IStatsCollector.cs | 9 +++++++ .../Monitoring/SimExtraStatsCollector.cs | 21 ++++++++++++--- .../Monitoring/UserStatsCollector.cs | 18 +++++++++++++ .../ClientStack/Linden/UDP/LLClientView.cs | 5 ++++ 6 files changed, 82 insertions(+), 4 deletions(-) diff --git a/OpenSim/Framework/Monitoring/AssetStatsCollector.cs b/OpenSim/Framework/Monitoring/AssetStatsCollector.cs index 2a4d45bf0c..6a0f676b42 100644 --- a/OpenSim/Framework/Monitoring/AssetStatsCollector.cs +++ b/OpenSim/Framework/Monitoring/AssetStatsCollector.cs @@ -28,6 +28,8 @@ using System; using System.Timers; +using OpenMetaverse.StructuredData; + namespace OpenSim.Framework.Monitoring { /// @@ -100,5 +102,29 @@ Asset requests yesterday : {3} ({4} per hour) of which {5} were not found", AssetRequestsToday, assetRequestsTodayPerHour, AssetRequestsNotFoundToday, AssetRequestsYesterday, assetRequestsYesterdayPerHour, AssetRequestsNotFoundYesterday); } + + public override string XReport(string uptime, string version) + { + return OSDParser.SerializeJsonString(OReport(uptime, version)); + } + + public override OSDMap OReport(string uptime, string version) + { + double elapsedHours = (DateTime.Now - startTime).TotalHours; + if (elapsedHours <= 0) { elapsedHours = 1; } // prevent divide by zero + + long assetRequestsTodayPerHour = (long)Math.Round(AssetRequestsToday / elapsedHours); + long assetRequestsYesterdayPerHour = (long)Math.Round(AssetRequestsYesterday / 24.0); + + OSDMap ret = new OSDMap(); + ret.Add("AssetRequestsToday", OSD.FromLong(AssetRequestsToday)); + ret.Add("AssetRequestsTodayPerHour", OSD.FromLong(assetRequestsTodayPerHour)); + ret.Add("AssetRequestsNotFoundToday", OSD.FromLong(AssetRequestsNotFoundToday)); + ret.Add("AssetRequestsYesterday", OSD.FromLong(AssetRequestsYesterday)); + ret.Add("AssetRequestsYesterdayPerHour", OSD.FromLong(assetRequestsYesterdayPerHour)); + ret.Add("AssetRequestsNotFoundYesterday", OSD.FromLong(assetRequestsNotFoundYesterday)); + + return ret; + } } } diff --git a/OpenSim/Framework/Monitoring/BaseStatsCollector.cs b/OpenSim/Framework/Monitoring/BaseStatsCollector.cs index 2903b6e7fe..be1d02bd10 100644 --- a/OpenSim/Framework/Monitoring/BaseStatsCollector.cs +++ b/OpenSim/Framework/Monitoring/BaseStatsCollector.cs @@ -67,5 +67,12 @@ namespace OpenSim.Framework.Monitoring { return (string) Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0).ToString() ; } + + public virtual OSDMap OReport(string uptime, string version) + { + OSDMap ret = new OSDMap(); + ret.Add("TotalMemory", new OSDReal(Math.Round(GC.GetTotalMemory(false) / 1024.0 / 1024.0))); + return ret; + } } } diff --git a/OpenSim/Framework/Monitoring/Interfaces/IStatsCollector.cs b/OpenSim/Framework/Monitoring/Interfaces/IStatsCollector.cs index 99f75e34b1..40df562a95 100644 --- a/OpenSim/Framework/Monitoring/Interfaces/IStatsCollector.cs +++ b/OpenSim/Framework/Monitoring/Interfaces/IStatsCollector.cs @@ -25,6 +25,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using OpenMetaverse.StructuredData; + namespace OpenSim.Framework.Monitoring { /// @@ -45,5 +47,12 @@ namespace OpenSim.Framework.Monitoring /// A /// string XReport(string uptime, string version); + + /// + /// Report back collected statistical information as an OSDMap of key/values + /// + /// + /// + OSDMap OReport(string uptime, string version); } } diff --git a/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs b/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs index 3765efb361..109a58f741 100644 --- a/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs +++ b/OpenSim/Framework/Monitoring/SimExtraStatsCollector.cs @@ -404,6 +404,15 @@ Asset service request failures: {3}" + Environment.NewLine, /// /// public override string XReport(string uptime, string version) + { + return OSDParser.SerializeJsonString(OReport(uptime, version)); + } + + /// + /// Report back collected statistical information as an OSDMap + /// + /// + public override OSDMap OReport(string uptime, string version) { OSDMap args = new OSDMap(30); // args["AssetsInCache"] = OSD.FromString (String.Format ("{0:0.##}", AssetsInCache)); @@ -442,13 +451,11 @@ Asset service request failures: {3}" + Environment.NewLine, args["Uptime"] = OSD.FromString (uptime); args["Version"] = OSD.FromString (version); - string strBuffer = ""; - strBuffer = OSDParser.SerializeJsonString(args); - - return strBuffer; + return args; } } + /// /// Pull packet queue stats from packet queues and report /// @@ -474,5 +481,11 @@ Asset service request failures: {3}" + Environment.NewLine, { return ""; } + + public OSDMap OReport(string uptime, string version) + { + OSDMap ret = new OSDMap(); + return ret; + } } } diff --git a/OpenSim/Framework/Monitoring/UserStatsCollector.cs b/OpenSim/Framework/Monitoring/UserStatsCollector.cs index e89c8e6344..81e0fa4e21 100644 --- a/OpenSim/Framework/Monitoring/UserStatsCollector.cs +++ b/OpenSim/Framework/Monitoring/UserStatsCollector.cs @@ -27,6 +27,8 @@ using System.Timers; +using OpenMetaverse.StructuredData; + namespace OpenSim.Framework.Monitoring { /// @@ -88,5 +90,21 @@ namespace OpenSim.Framework.Monitoring Logouts total : {3}", SuccessfulLogins, SuccessfulLoginsToday, SuccessfulLoginsYesterday, Logouts); } + + public override string XReport(string uptime, string version) + { + return OSDParser.SerializeJsonString(OReport(uptime, version)); + } + + public override OSDMap OReport(string uptime, string version) + { + OSDMap ret = new OSDMap(); + ret.Add("SuccessfulLogins", OSD.FromInteger(SuccessfulLogins)); + ret.Add("SuccessfulLoginsToday", OSD.FromInteger(SuccessfulLoginsToday)); + ret.Add("SuccessfulLoginsYesterday", OSD.FromInteger(SuccessfulLoginsYesterday)); + ret.Add("Logouts", OSD.FromInteger(Logouts)); + + return ret; + } } } diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index a18719094d..5675870f83 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -12138,6 +12138,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP return String.Empty; } + public OSDMap OReport(string uptime, string version) + { + return new OSDMap(); + } + /// /// Make an asset request to the asset service in response to a client request. /// From efb5da0aa672551a8a68e16066f3dd3991f75da4 Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Thu, 21 Feb 2013 08:52:11 -0800 Subject: [PATCH 25/30] BulletSim: add OutOfBounds logic and some position sanity checking to eliminate some of the "cannot find terrain height" warning messages. --- .../Physics/BulletSPlugin/BSCharacter.cs | 7 ++- .../Region/Physics/BulletSPlugin/BSParam.cs | 43 ++++++++++++------- .../Region/Physics/BulletSPlugin/BSPrim.cs | 27 ++++++++++-- .../BulletSPlugin/BSShapeCollection.cs | 2 +- .../Physics/BulletSPlugin/BulletSimTODO.txt | 22 +++++----- 5 files changed, 68 insertions(+), 33 deletions(-) diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs index 8dca7c65d5..1f186c371c 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs @@ -443,6 +443,7 @@ public sealed class BSCharacter : BSPhysObject PhysicsScene.TaintedObject("BSCharacter.setPosition", delegate() { DetailLog("{0},BSCharacter.SetPosition,taint,pos={1},orient={2}", LocalID, _position, _orientation); + PositionSanityCheck(); ForcePosition = _position; }); } @@ -456,7 +457,6 @@ public sealed class BSCharacter : BSPhysObject _position = value; if (PhysBody.HasPhysicalBody) { - PositionSanityCheck(); PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); } } @@ -512,9 +512,8 @@ public sealed class BSCharacter : BSPhysObject // just assign to "Position" because of potential call loops. PhysicsScene.TaintedObject(inTaintTime, "BSCharacter.PositionSanityCheck", delegate() { - DetailLog("{0},BSCharacter.PositionSanityCheck,taint,pos={1},orient={2}", LocalID, _position, _orientation); - if (PhysBody.HasPhysicalBody) - PhysicsScene.PE.SetTranslation(PhysBody, _position, _orientation); + DetailLog("{0},BSCharacter.PositionSanityCheck,taint,pos={1},orient={2}", LocalID, _position, _orientation); + ForcePosition = _position; }); ret = true; } diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs index c2a967131a..dc57b676e5 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSParam.cs @@ -46,6 +46,8 @@ public static class BSParam public static float MeshMegaPrimThreshold { get; private set; } public static float SculptLOD { get; private set; } + public static int CrossingFailuresBeforeOutOfBounds { get; private set; } + public static float MinimumObjectMass { get; private set; } public static float MaximumObjectMass { get; private set; } public static float MaxLinearVelocity { get; private set; } @@ -73,23 +75,23 @@ public static class BSParam public static float TerrainRestitution { get; private set; } public static float TerrainCollisionMargin { get; private set; } - public static float DefaultFriction; - public static float DefaultDensity; - public static float DefaultRestitution; - public static float CollisionMargin; - public static float Gravity; + public static float DefaultFriction { get; private set; } + public static float DefaultDensity { get; private set; } + public static float DefaultRestitution { get; private set; } + public static float CollisionMargin { get; private set; } + public static float Gravity { get; private set; } // Physics Engine operation - public static float MaxPersistantManifoldPoolSize; - public static float MaxCollisionAlgorithmPoolSize; - public static bool ShouldDisableContactPoolDynamicAllocation; - public static bool ShouldForceUpdateAllAabbs; - public static bool ShouldRandomizeSolverOrder; - public static bool ShouldSplitSimulationIslands; - public static bool ShouldEnableFrictionCaching; - public static float NumberOfSolverIterations; - public static bool UseSingleSidedMeshes; - public static float GlobalContactBreakingThreshold; + public static float MaxPersistantManifoldPoolSize { get; private set; } + public static float MaxCollisionAlgorithmPoolSize { get; private set; } + public static bool ShouldDisableContactPoolDynamicAllocation { get; private set; } + public static bool ShouldForceUpdateAllAabbs { get; private set; } + public static bool ShouldRandomizeSolverOrder { get; private set; } + public static bool ShouldSplitSimulationIslands { get; private set; } + public static bool ShouldEnableFrictionCaching { get; private set; } + public static float NumberOfSolverIterations { get; private set; } + public static bool UseSingleSidedMeshes { get; private set; } + public static float GlobalContactBreakingThreshold { get; private set; } // Avatar parameters public static float AvatarFriction { get; private set; } @@ -118,6 +120,7 @@ public static class BSParam public static float VehicleGroundGravityFudge { get; private set; } public static bool VehicleDebuggingEnabled { get; private set; } + // Linkset implementation parameters public static float LinksetImplementation { get; private set; } public static bool LinkConstraintUseFrameOffset { get; private set; } public static bool LinkConstraintEnableTransMotor { get; private set; } @@ -282,6 +285,11 @@ public static class BSParam (s) => { return ShouldRemoveZeroWidthTriangles; }, (s,v) => { ShouldRemoveZeroWidthTriangles = v; } ), + new ParameterDefn("CrossingFailuresBeforeOutOfBounds", "How forgiving we are about getting into adjactent regions", + 5, + (s) => { return CrossingFailuresBeforeOutOfBounds; }, + (s,v) => { CrossingFailuresBeforeOutOfBounds = v; } ), + new ParameterDefn("MeshLevelOfDetail", "Level of detail to render meshes (32, 16, 8 or 4. 32=most detailed)", 32f, (s) => { return MeshLOD; }, @@ -695,6 +703,10 @@ public static class BSParam } } + // ===================================================================== + // ===================================================================== + // There are parameters that, when set, cause things to happen in the physics engine. + // This causes the broadphase collision cache to be cleared. private static void ResetBroadphasePoolTainted(BSScene pPhysScene, float v) { BSScene physScene = pPhysScene; @@ -704,6 +716,7 @@ public static class BSParam }); } + // This causes the constraint solver cache to be cleared and reset. private static void ResetConstraintSolverTainted(BSScene pPhysScene, float v) { BSScene physScene = pPhysScene; diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs index 4d61ad20f0..4dff9278f1 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs @@ -70,6 +70,8 @@ public class BSPrim : BSPhysObject private bool _kinematic; private float _buoyancy; + private int CrossingFailures { get; set; } + public BSDynamics VehicleController { get; private set; } private BSVMotor _targetMotor; @@ -197,7 +199,20 @@ public class BSPrim : BSPhysObject { get { return _isSelected; } } - public override void CrossingFailure() { return; } + + public override void CrossingFailure() + { + CrossingFailures++; + if (CrossingFailures > BSParam.CrossingFailuresBeforeOutOfBounds) + { + base.RaiseOutOfBounds(RawPosition); + } + else if (CrossingFailures == BSParam.CrossingFailuresBeforeOutOfBounds) + { + m_log.WarnFormat("{0} Too many crossing failures for {1}", LogHeader, Name); + } + return; + } // link me to the specified parent public override void link(PhysicsActor obj) { @@ -1123,7 +1138,11 @@ public class BSPrim : BSPhysObject // Used for MoveTo public override OMV.Vector3 PIDTarget { - set { _PIDTarget = value; } + set + { + // TODO: add a sanity check -- don't move more than a region or something like that. + _PIDTarget = value; + } } public override float PIDTau { set { _PIDTau = value; } @@ -1177,7 +1196,9 @@ public class BSPrim : BSPhysObject } else { - ForcePosition = movePosition; + _position = movePosition; + PositionSanityCheck(true /* intaintTime */); + ForcePosition = _position; } DetailLog("{0},BSPrim.PIDTarget,move,fromPos={1},movePos={2}", LocalID, origPosition, movePosition); }); diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs index 15747c9020..219372be65 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs @@ -568,7 +568,7 @@ public sealed class BSShapeCollection : IDisposable { newShape = PhysicsScene.PE.BuildCapsuleShape(PhysicsScene.World, 1f, 1f, prim.Scale); - if (DDetail) DetailLog("{0},BSShapeCollection.BuiletPhysicalNativeShape,capsule,scale={1}", prim.LocalID, prim.Scale); + if (DDetail) DetailLog("{0},BSShapeCollection.BuildPhysicalNativeShape,capsule,scale={1}", prim.LocalID, prim.Scale); } else { diff --git a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt index bda7c471b1..49718c4e0f 100755 --- a/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt +++ b/OpenSim/Region/Physics/BulletSPlugin/BulletSimTODO.txt @@ -1,17 +1,16 @@ CURRENT PRIORITIES ================================================= -One sided meshes? Should terrain be built into a closed shape? - When meshes get partially wedged into the terrain, they cannot push themselves out. - It is possible that Bullet processes collisions whether entering or leaving a mesh. - Ref: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4869 Deleting a linkset while standing on the root will leave the physical shape of the root behind. Not sure if it is because standing on it. Done with large prim linksets. -Terrain detail: double terrain mesh detail Vehicle angular vertical attraction vehicle angular banking Center-of-gravity Vehicle angular deflection Preferred orientation angular correction fix +Enable vehicle border crossings (at least as poorly as ODE) + Terrain skirts + Avatar created in previous region and not new region when crossing border + Vehicle recreated in new sim at small Z value (offset from root value?) (DONE) when should angular and linear motor targets be zeroed? when selected? Need a vehicle.clear()? Or an 'else' in prestep if not physical. Teravus llMoveToTarget script debug @@ -26,14 +25,16 @@ Avatar movement flying into a wall doesn't stop avatar who keeps appearing to move through the obstacle (DONE) walking up stairs is not calibrated correctly (stairs out of Kepler cabin) avatar capsule rotation completed (NOT DONE - Bullet's capsule shape is not the solution) -Enable vehicle border crossings (at least as poorly as ODE) - Terrain skirts - Avatar created in previous region and not new region when crossing border - Vehicle recreated in new sim at small Z value (offset from root value?) (DONE) Vehicle script tuning/debugging Avanti speed script Weapon shooter script -Add material densities to the material types +Move material definitions (friction, ...) into simulator. +Add material densities to the material types. +Terrain detail: double terrain mesh detail +One sided meshes? Should terrain be built into a closed shape? + When meshes get partially wedged into the terrain, they cannot push themselves out. + It is possible that Bullet processes collisions whether entering or leaving a mesh. + Ref: http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?t=4869 VEHICLES TODO LIST: ================================================= @@ -65,6 +66,7 @@ Vehicle attributes are not restored when a vehicle is rezzed on region creation GENERAL TODO LIST: ================================================= +Add a sanity check for PIDTarget location. Level-of-detail for mesh creation. Prims with circular interiors require lod of 32. Is much saved with lower LODs? At the moment, all set to 32. Collisions are inconsistant: arrows are supposed to hit and report collision. Often don't. From 9de670c550fd6847c2c14413d2c956f446b958f0 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Thu, 21 Feb 2013 23:08:50 +0000 Subject: [PATCH 26/30] minor: Change summary in "show appearance" console command to "incomplete" rather than "corrupt" Corrupt is misleading - it implies textures were uploaded but are not j2k valid. The actual situation is that at least one required baked texture is not present. --- .../CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs | 2 +- .../OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index ce79f07172..00d1fd887c 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs @@ -693,7 +693,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory } bool bakedTextureValid = m_scene.AvatarFactory.ValidateBakedTextureCache(sp); - outputAction("{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "corrupt"); + outputAction("{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "incomplete"); } } } diff --git a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs index d718a2f052..fa35f0ffad 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs @@ -222,7 +222,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance { bool bakedTextureValid = scene.AvatarFactory.ValidateBakedTextureCache(sp); MainConsole.Instance.OutputFormat( - "{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "corrupt"); + "{0} baked appearance texture is {1}", sp.Name, bakedTextureValid ? "OK" : "incomplete"); } ); } From 303e21babe48e9daf39dad6b3d721fd5b9bbfb8f Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Thu, 21 Feb 2013 13:36:31 -0800 Subject: [PATCH 27/30] Add CounterStat which is a wrapper for a counter stat but, because the 'count' event is internal, historical data can be built it. Also includes EventHistogram class for building time based, bucketed history of event occurances. Make Stat implement IDisposable for subclasses that might need it. --- .../Framework/Monitoring/Stats/CounterStat.cs | 211 ++++++++++++++++++ OpenSim/Framework/Monitoring/Stats/Stat.cs | 8 +- 2 files changed, 218 insertions(+), 1 deletion(-) create mode 100755 OpenSim/Framework/Monitoring/Stats/CounterStat.cs diff --git a/OpenSim/Framework/Monitoring/Stats/CounterStat.cs b/OpenSim/Framework/Monitoring/Stats/CounterStat.cs new file mode 100755 index 0000000000..d81f1828e6 --- /dev/null +++ b/OpenSim/Framework/Monitoring/Stats/CounterStat.cs @@ -0,0 +1,211 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using OpenMetaverse.StructuredData; + +namespace OpenSim.Framework.Monitoring +{ +// Create a time histogram of events. The histogram is built in a wrap-around +// array of equally distributed buckets. +// For instance, a minute long histogram of second sized buckets would be: +// new EventHistogram(60, 1000) +public class EventHistogram +{ + private int m_timeBase; + private int m_numBuckets; + private int m_bucketMilliseconds; + private int m_lastBucket; + private int m_totalHistogramMilliseconds; + private long[] m_histogram; + private object histoLock = new object(); + + public EventHistogram(int numberOfBuckets, int millisecondsPerBucket) + { + m_numBuckets = numberOfBuckets; + m_bucketMilliseconds = millisecondsPerBucket; + m_totalHistogramMilliseconds = m_numBuckets * m_bucketMilliseconds; + + m_histogram = new long[m_numBuckets]; + Zero(); + m_lastBucket = 0; + m_timeBase = Util.EnvironmentTickCount(); + } + + public void Event() + { + this.Event(1); + } + + // Record an event at time 'now' in the histogram. + public void Event(int cnt) + { + lock (histoLock) + { + // The time as displaced from the base of the histogram + int bucketTime = Util.EnvironmentTickCountSubtract(m_timeBase); + + // If more than the total time of the histogram, we just start over + if (bucketTime > m_totalHistogramMilliseconds) + { + Zero(); + m_lastBucket = 0; + m_timeBase = Util.EnvironmentTickCount(); + } + else + { + // To which bucket should we add this event? + int bucket = bucketTime / m_bucketMilliseconds; + + // Advance m_lastBucket to the new bucket. Zero any buckets skipped over. + while (bucket != m_lastBucket) + { + // Zero from just after the last bucket to the new bucket or the end + for (int jj = m_lastBucket + 1; jj <= Math.Min(bucket, m_numBuckets - 1); jj++) + { + m_histogram[jj] = 0; + } + m_lastBucket = bucket; + // If the new bucket is off the end, wrap around to the beginning + if (bucket > m_numBuckets) + { + bucket -= m_numBuckets; + m_lastBucket = 0; + m_histogram[m_lastBucket] = 0; + m_timeBase += m_totalHistogramMilliseconds; + } + } + } + m_histogram[m_lastBucket] += cnt; + } + } + + // Get a copy of the current histogram + public long[] GetHistogram() + { + long[] ret = new long[m_numBuckets]; + lock (histoLock) + { + int indx = m_lastBucket + 1; + for (int ii = 0; ii < m_numBuckets; ii++, indx++) + { + if (indx >= m_numBuckets) + indx = 0; + ret[ii] = m_histogram[indx]; + } + } + return ret; + } + + // Get a copy of the current histogram + public OSDArray GetHistogramAsOSDArray() + { + OSDArray ret = new OSDArray(m_numBuckets); + lock (histoLock) + { + int indx = m_lastBucket + 1; + for (int ii = 0; ii < m_numBuckets; ii++, indx++) + { + if (indx >= m_numBuckets) + indx = 0; + ret[ii] = OSD.FromLong(m_histogram[indx]); + } + } + return ret; + } + + // Zero out the histogram + public void Zero() + { + lock (histoLock) + { + for (int ii = 0; ii < m_numBuckets; ii++) + m_histogram[ii] = 0; + } + } +} + +// A statistic that wraps a counter. +// Built this way mostly so histograms and history can be created. +public class CounterStat : Stat +{ + private SortedDictionary m_histograms; + private object counterLock = new object(); + + public CounterStat( + string shortName, + string name, + string description, + string unitName, + string category, + string container, + StatVerbosity verbosity) + : base(shortName, name, description, unitName, category, container, StatType.Push, null, verbosity) + { + m_histograms = new SortedDictionary(); + } + + // Histograms are presumably added at intialization time and the list does not change thereafter. + // Thus no locking of the histogram list. + public void AddHistogram(string histoName, EventHistogram histo) + { + m_histograms.Add(histoName, histo); + } + + public delegate void ProcessHistogram(string name, EventHistogram histo); + public void ForEachHistogram(ProcessHistogram process) + { + foreach (KeyValuePair kvp in m_histograms) + { + process(kvp.Key, kvp.Value); + } + } + + public void Event() + { + this.Event(1); + } + + // Count the underlying counter. + public void Event(int cnt) + { + lock (counterLock) + { + base.Value += cnt; + + foreach (EventHistogram histo in m_histograms.Values) + { + histo.Event(cnt); + } + } + } +} +} diff --git a/OpenSim/Framework/Monitoring/Stats/Stat.cs b/OpenSim/Framework/Monitoring/Stats/Stat.cs index f91251b6ea..fccc4601ca 100644 --- a/OpenSim/Framework/Monitoring/Stats/Stat.cs +++ b/OpenSim/Framework/Monitoring/Stats/Stat.cs @@ -34,7 +34,7 @@ namespace OpenSim.Framework.Monitoring /// /// Holds individual statistic details /// - public class Stat + public class Stat : IDisposable { /// /// Category of this stat (e.g. cache, scene, etc). @@ -181,6 +181,12 @@ namespace OpenSim.Framework.Monitoring Verbosity = verbosity; } + // IDisposable.Dispose() + public virtual void Dispose() + { + return; + } + /// /// Record a value in the sample set. /// From 76ee47c7972969d7dbadff2c66d050ad84b10078 Mon Sep 17 00:00:00 2001 From: Robert Adams Date: Thu, 21 Feb 2013 15:48:19 -0800 Subject: [PATCH 28/30] Add a virtual ToOSDMap() function to Monitoring.Stat for future overloading by aggregation statistics and browser based stat viewers. --- OpenSim/Framework/Monitoring/Stats/Stat.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/OpenSim/Framework/Monitoring/Stats/Stat.cs b/OpenSim/Framework/Monitoring/Stats/Stat.cs index fccc4601ca..c8d91744c1 100644 --- a/OpenSim/Framework/Monitoring/Stats/Stat.cs +++ b/OpenSim/Framework/Monitoring/Stats/Stat.cs @@ -29,6 +29,8 @@ using System; using System.Collections.Generic; using System.Text; +using OpenMetaverse.StructuredData; + namespace OpenSim.Framework.Monitoring { /// @@ -216,6 +218,20 @@ namespace OpenSim.Framework.Monitoring return sb.ToString(); } + public virtual OSDMap ToOSDMap() + { + OSDMap ret = new OSDMap(); + ret.Add("Category", OSD.FromString(Category)); + ret.Add("Container", OSD.FromString(Container)); + ret.Add("ShortName", OSD.FromString(ShortName)); + ret.Add("Name", OSD.FromString(Name)); + ret.Add("Description", OSD.FromString(Description)); + ret.Add("UnitName", OSD.FromString(UnitName)); + ret.Add("Value", OSD.FromReal(Value)); + + return ret; + } + protected void AppendMeasuresOfInterest(StringBuilder sb) { if ((MeasuresOfInterest & MeasuresOfInterest.AverageChangeOverTime) From e515cdddec435e97e9ed4722de08ee410e94a7e6 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 21 Feb 2013 17:26:19 -0800 Subject: [PATCH 29/30] Simplification of HG configs: HomeURI and GatekeeperURI now are defined as default under [Startup]. They can then be overwritten in the other sections (but probably shouldn't). I kept the existing code for backwards compatibility, so this should not cause any breaks from people's current configurations. But people should move to have these 2 vars under [Startup] -- see OpenSim.ini.example and Robust.HG.ini.example. And yes, both names now end with "URI" for consistency. --- .../HGGroupsServiceRobustConnector.cs | 8 +-- OpenSim/Framework/Util.cs | 22 ++++++- .../CoreModules/Avatar/Lure/HGLureModule.cs | 4 +- .../HGInventoryAccessModule.cs | 9 ++- .../DataSnapshot/DataSnapshotManager.cs | 13 +++- .../Shared/Api/Implementation/OSSL_Api.cs | 12 +++- .../Server/Handlers/Grid/GridInfoHandlers.cs | 20 +++--- .../Services/GridService/HypergridLinker.cs | 4 +- .../HypergridService/GatekeeperService.cs | 3 +- .../HypergridService/HGInventoryService.cs | 5 +- .../HGSuitcaseInventoryService.cs | 3 +- .../HypergridService/UserAgentService.cs | 11 +++- .../Services/LLLoginService/LLLoginService.cs | 2 +- bin/OpenSim.ini.example | 16 +++++ bin/Robust.HG.ini.example | 61 +++++++++++++------ .../StandaloneCommon.ini.example | 25 +++++--- 16 files changed, 152 insertions(+), 66 deletions(-) diff --git a/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs b/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs index 92dd85cd1d..0e71c72ad6 100644 --- a/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs +++ b/OpenSim/Addons/Groups/Hypergrid/HGGroupsServiceRobustConnector.cs @@ -65,14 +65,14 @@ namespace OpenSim.Groups m_log.DebugFormat("[Groups.RobustHGConnector]: Starting with config name {0}", m_ConfigName); + string homeURI = Util.GetConfigVarWithDefaultSection(config, "HomeURI", m_ConfigName); //cnf.GetString("HomeURI", string.Empty); + if (homeURI == string.Empty) + throw new Exception(String.Format("[Groups.RobustHGConnector]: please provide the HomeURI [Startup] or in section {0}", m_ConfigName)); + IConfig cnf = config.Configs[m_ConfigName]; if (cnf == null) throw new Exception(String.Format("[Groups.RobustHGConnector]: {0} section does not exist", m_ConfigName)); - string homeURI = cnf.GetString("HomeURI", string.Empty); - if (homeURI == string.Empty) - throw new Exception(String.Format("[Groups.RobustHGConnector]: please provide the HomeURI in section {0}", m_ConfigName)); - if (im == null) { string imDll = cnf.GetString("OfflineIMService", string.Empty); diff --git a/OpenSim/Framework/Util.cs b/OpenSim/Framework/Util.cs index d9148fb7c1..1700d3eb97 100644 --- a/OpenSim/Framework/Util.cs +++ b/OpenSim/Framework/Util.cs @@ -863,7 +863,7 @@ namespace OpenSim.Framework return FileName; } - // Nini (config) related Methods + #region Nini (config) related Methods public static IConfigSource ConvertDataRowToXMLConfig(DataRow row, string fileName) { if (!File.Exists(fileName)) @@ -886,6 +886,26 @@ namespace OpenSim.Framework } } + public static string GetConfigVarWithDefaultSection(IConfigSource config, string varname, string section) + { + // First, check the Startup section, the default section + IConfig cnf = config.Configs["Startup"]; + if (cnf == null) + return string.Empty; + string val = cnf.GetString(varname, string.Empty); + + // Then check for an overwrite of the default in the given section + if (!string.IsNullOrEmpty(section)) + { + cnf = config.Configs[section]; + if (cnf != null) + val = cnf.GetString(varname, val); + } + + return val; + } + #endregion + public static float Clip(float x, float min, float max) { return Math.Min(Math.Max(x, min), max); diff --git a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs index 232a4fe5ae..784a78862f 100644 --- a/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Lure/HGLureModule.cs @@ -65,7 +65,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Lure { m_Enabled = true; - m_ThisGridURL = config.Configs["Messaging"].GetString("Gatekeeper", string.Empty); + m_ThisGridURL = Util.GetConfigVarWithDefaultSection(config, "GatekeeperURI", "Messaging"); + // Legacy. Remove soon! + m_ThisGridURL = config.Configs["Messaging"].GetString("Gatekeeper", m_ThisGridURL); m_log.DebugFormat("[LURE MODULE]: {0} enabled", Name); } } diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs index 964efdaa46..c439ea811f 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs @@ -88,12 +88,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess IConfig thisModuleConfig = source.Configs["HGInventoryAccessModule"]; if (thisModuleConfig != null) { - // legacy configuration [obsolete] - m_HomeURI = thisModuleConfig.GetString("ProfileServerURI", string.Empty); - // preferred - m_HomeURI = thisModuleConfig.GetString("HomeURI", m_HomeURI); + m_HomeURI = Util.GetConfigVarWithDefaultSection(source, "HomeURI", "HGInventoryAccessModule"); m_OutboundPermission = thisModuleConfig.GetBoolean("OutboundPermission", true); - m_ThisGatekeeper = thisModuleConfig.GetString("Gatekeeper", string.Empty); + m_ThisGatekeeper = Util.GetConfigVarWithDefaultSection(source, "GatekeeperURI", "HGInventoryAccessModule"); + // Legacy. Renove soon! + m_ThisGatekeeper = thisModuleConfig.GetString("Gatekeeper", m_ThisGatekeeper); m_RestrictInventoryAccessAbroad = thisModuleConfig.GetBoolean("RestrictInventoryAccessAbroad", true); } else diff --git a/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs b/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs index 5e62f23b0c..13d9d31b35 100644 --- a/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs +++ b/OpenSim/Region/DataSnapshot/DataSnapshotManager.cs @@ -113,9 +113,16 @@ namespace OpenSim.Region.DataSnapshot try { m_enabled = config.Configs["DataSnapshot"].GetBoolean("index_sims", m_enabled); - IConfig conf = config.Configs["GridService"]; - if (conf != null) - m_gridinfo.Add("gatekeeperURL", conf.GetString("Gatekeeper", String.Empty)); + string gatekeeper = Util.GetConfigVarWithDefaultSection(config, "GatekeeperURI", "GridService"); + // Legacy. Remove soon! + if (string.IsNullOrEmpty(gatekeeper)) + { + IConfig conf = config.Configs["GridService"]; + if (conf != null) + gatekeeper = conf.GetString("Gatekeeper", gatekeeper); + } + if (!string.IsNullOrEmpty(gatekeeper)) + m_gridinfo.Add("gatekeeperURL", gatekeeper); m_gridinfo.Add( "name", config.Configs["DataSnapshot"].GetString("gridname", "the lost continent of hippo")); diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs index 14260705f1..0334169ab1 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs @@ -2137,9 +2137,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api CheckThreatLevel(ThreatLevel.Moderate, "osGetGridHomeURI"); m_host.AddScriptLPS(1); - string HomeURI = String.Empty; IConfigSource config = m_ScriptEngine.ConfigSource; + string HomeURI = Util.GetConfigVarWithDefaultSection(config, "HomeURI", string.Empty); + if (!string.IsNullOrEmpty(HomeURI)) + return HomeURI; + + // Legacy. Remove soon! if (config.Configs["LoginService"] != null) HomeURI = config.Configs["LoginService"].GetString("SRV_HomeURI", HomeURI); @@ -2154,9 +2158,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api CheckThreatLevel(ThreatLevel.Moderate, "osGetGridGatekeeperURI"); m_host.AddScriptLPS(1); - string gatekeeperURI = String.Empty; IConfigSource config = m_ScriptEngine.ConfigSource; + string gatekeeperURI = Util.GetConfigVarWithDefaultSection(config, "GatekeeperURI", string.Empty); + if (!string.IsNullOrEmpty(gatekeeperURI)) + return gatekeeperURI; + + // Legacy. Remove soon! if (config.Configs["GridService"] != null) gatekeeperURI = config.Configs["GridService"].GetString("Gatekeeper", gatekeeperURI); diff --git a/OpenSim/Server/Handlers/Grid/GridInfoHandlers.cs b/OpenSim/Server/Handlers/Grid/GridInfoHandlers.cs index 965a54e48e..35f86c5acf 100644 --- a/OpenSim/Server/Handlers/Grid/GridInfoHandlers.cs +++ b/OpenSim/Server/Handlers/Grid/GridInfoHandlers.cs @@ -170,14 +170,6 @@ namespace OpenSim.Server.Handlers.Grid public string JsonGetGridInfoMethod(string request, string path, string param, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) { - string HomeURI = String.Empty; - IConfig cfg = m_Config.Configs["LoginService"]; - - if (null != cfg) - { - HomeURI = cfg.GetString("SRV_HomeURI", HomeURI); - } - OSDMap map = new OSDMap(); foreach (string k in _info.Keys) @@ -185,9 +177,19 @@ namespace OpenSim.Server.Handlers.Grid map[k] = OSD.FromString(_info[k].ToString()); } + string HomeURI = Util.GetConfigVarWithDefaultSection(m_Config, "HomeURI", string.Empty); + if (!String.IsNullOrEmpty(HomeURI)) + map["home"] = OSD.FromString(HomeURI); + else // Legacy. Remove soon! { - map["home"] = OSD.FromString(HomeURI); + IConfig cfg = m_Config.Configs["LoginService"]; + + if (null != cfg) + HomeURI = cfg.GetString("SRV_HomeURI", HomeURI); + + if (!String.IsNullOrEmpty(HomeURI)) + map["home"] = OSD.FromString(HomeURI); } return OSDParser.SerializeJsonString(map).ToString(); diff --git a/OpenSim/Services/GridService/HypergridLinker.cs b/OpenSim/Services/GridService/HypergridLinker.cs index 073197f8db..3e7c556f46 100644 --- a/OpenSim/Services/GridService/HypergridLinker.cs +++ b/OpenSim/Services/GridService/HypergridLinker.cs @@ -128,7 +128,9 @@ namespace OpenSim.Services.GridService m_MapTileDirectory = gridConfig.GetString("MapTileDirectory", "maptiles"); - m_ThisGatekeeper = gridConfig.GetString("Gatekeeper", string.Empty); + m_ThisGatekeeper = Util.GetConfigVarWithDefaultSection(config, "GatekeeperURI", "GridService"); + // Legacy. Remove soon! + m_ThisGatekeeper = gridConfig.GetString("Gatekeeper", m_ThisGatekeeper); try { m_ThisGatekeeperURI = new Uri(m_ThisGatekeeper); diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs index 7b84d55ded..21f363c3a8 100644 --- a/OpenSim/Services/HypergridService/GatekeeperService.cs +++ b/OpenSim/Services/HypergridService/GatekeeperService.cs @@ -96,7 +96,8 @@ namespace OpenSim.Services.HypergridService UUID.TryParse(scope, out m_ScopeID); //m_WelcomeMessage = serverConfig.GetString("WelcomeMessage", "Welcome to OpenSim!"); m_AllowTeleportsToAnyRegion = serverConfig.GetBoolean("AllowTeleportsToAnyRegion", true); - m_ExternalName = serverConfig.GetString("ExternalName", string.Empty); + m_ExternalName = Util.GetConfigVarWithDefaultSection(config, "GatekeeperURI", "GatekeeperService"); + m_ExternalName = serverConfig.GetString("ExternalName", m_ExternalName); if (m_ExternalName != string.Empty && !m_ExternalName.EndsWith("/")) m_ExternalName = m_ExternalName + "/"; diff --git a/OpenSim/Services/HypergridService/HGInventoryService.cs b/OpenSim/Services/HypergridService/HGInventoryService.cs index 2e9bd40cd2..a9661f41a8 100644 --- a/OpenSim/Services/HypergridService/HGInventoryService.cs +++ b/OpenSim/Services/HypergridService/HGInventoryService.cs @@ -81,10 +81,7 @@ namespace OpenSim.Services.HypergridService if (m_UserAccountService == null) throw new Exception(String.Format("Unable to create UserAccountService from {0}", userAccountsDll)); - // legacy configuration [obsolete] - m_HomeURL = invConfig.GetString("ProfileServerURI", string.Empty); - // Preferred - m_HomeURL = invConfig.GetString("HomeURI", m_HomeURL); + m_HomeURL = Util.GetConfigVarWithDefaultSection(config, "HomeURI", m_ConfigName); m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); } diff --git a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs index 784f136bb0..dd546b8e06 100644 --- a/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs +++ b/OpenSim/Services/HypergridService/HGSuitcaseInventoryService.cs @@ -96,8 +96,7 @@ namespace OpenSim.Services.HypergridService if (m_AvatarService == null) throw new Exception(String.Format("Unable to create m_AvatarService from {0}", avatarDll)); - // Preferred - m_HomeURL = invConfig.GetString("HomeURI", m_HomeURL); + m_HomeURL = Util.GetConfigVarWithDefaultSection(config, "HomeURI", m_ConfigName); // m_Cache = UserAccountCache.CreateUserAccountCache(m_UserAccountService); } diff --git a/OpenSim/Services/HypergridService/UserAgentService.cs b/OpenSim/Services/HypergridService/UserAgentService.cs index a26a9222bd..8757a4ca59 100644 --- a/OpenSim/Services/HypergridService/UserAgentService.cs +++ b/OpenSim/Services/HypergridService/UserAgentService.cs @@ -131,12 +131,17 @@ namespace OpenSim.Services.HypergridService LoadDomainExceptionsFromConfig(serverConfig, "AllowExcept", m_TripsAllowedExceptions); LoadDomainExceptionsFromConfig(serverConfig, "DisallowExcept", m_TripsDisallowedExceptions); - m_GridName = serverConfig.GetString("ExternalName", string.Empty); - if (m_GridName == string.Empty) + m_GridName = Util.GetConfigVarWithDefaultSection(config, "GatekeeperURI", "UserAgentService"); + if (string.IsNullOrEmpty(m_GridName)) // Legacy. Remove soon. { - serverConfig = config.Configs["GatekeeperService"]; m_GridName = serverConfig.GetString("ExternalName", string.Empty); + if (m_GridName == string.Empty) + { + serverConfig = config.Configs["GatekeeperService"]; + m_GridName = serverConfig.GetString("ExternalName", string.Empty); + } } + if (!m_GridName.EndsWith("/")) m_GridName = m_GridName + "/"; diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs index 5f30f84f74..7f32d3058d 100644 --- a/OpenSim/Services/LLLoginService/LLLoginService.cs +++ b/OpenSim/Services/LLLoginService/LLLoginService.cs @@ -110,7 +110,7 @@ namespace OpenSim.Services.LLLoginService m_RequireInventory = m_LoginServerConfig.GetBoolean("RequireInventory", true); m_AllowRemoteSetLoginLevel = m_LoginServerConfig.GetBoolean("AllowRemoteSetLoginLevel", false); m_MinLoginLevel = m_LoginServerConfig.GetInt("MinLoginLevel", 0); - m_GatekeeperURL = m_LoginServerConfig.GetString("GatekeeperURI", string.Empty); + m_GatekeeperURL = Util.GetConfigVarWithDefaultSection(config, "GatekeeperURI", "LoginService"); m_MapTileURL = m_LoginServerConfig.GetString("MapTileURL", string.Empty); m_ProfileURL = m_LoginServerConfig.GetString("ProfileServerURL", string.Empty); m_OpenIDURL = m_LoginServerConfig.GetString("OpenIDServerURL", String.Empty); diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index cb978f1285..4199441a53 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -346,6 +346,21 @@ ;; - "Imprudence 1.3.1" has access ; BannedViewerList = + ;# {HomeURI} {Hypergrid} {The Home URL of this world} {} + ;; If this is a standalone world, this is the address of this instance. + ;; If this is a grided simulator, this is the address of the external robust server that + ;; runs the UserAgentsService. + ;; For example http://myworld.com:9000 or http://myworld.com:8002 + ;; This is a default that can be overwritten in some sections. + ; HomeURI = "http://127.0.0.1:9000" + + ;# {GatekeeperURI} {Hypergrid} {The URL of the gatekeeper of this world} {} + ;; If this is a standalone world, this is the address of this instance. + ;; If this is a grided simulator, this is the address of the external robust server + ;; that runs the Gatekeeper service. + ;; For example http://myworld.com:9000 or http://myworld.com:8002 + ;; This is a default that can be overwritten in some sections. + ; GatekeeperURI = "http://127.0.0.1:9000" [Estates] ; If these values are commented out then the user will be asked for estate details when required (this is the normal case). @@ -961,6 +976,7 @@ ;# {HomeURI} {ServicesConnectorModule:Groups HG Service Connector} {What's the home address of this world?} {} ;; Used for V2 in HG only. For example ;; http://mygridserver.com:9000 or http://mygridserver.com:8002 + ;; If you have this set under [Startup], no need to set it here, leave it commented ; HomeURI = "" ;# {MessagingEnabled} {Module:GroupsModule Module:Groups Module V2} {Is groups messaging enabled?} {true false} true diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example index 3858a3c0f9..274132e4ff 100644 --- a/bin/Robust.HG.ini.example +++ b/bin/Robust.HG.ini.example @@ -22,17 +22,31 @@ ; * [Startup] -; Plugin Registry Location -; Set path to directory for plugin registry. Information -; about the registered repositories and installed plugins -; will be stored here -; The Robust.exe process must hvae R/W access to the location -RegistryLocation = "." + ; Plugin Registry Location + ; Set path to directory for plugin registry. Information + ; about the registered repositories and installed plugins + ; will be stored here + ; The Robust.exe process must hvae R/W access to the location + RegistryLocation = "." -; Modular configurations -; Set path to directory for modular ini files... -; The Robust.exe process must hvae R/W access to the location -ConfigDirectory = "/home/opensim/etc/Configs" + ; Modular configurations + ; Set path to directory for modular ini files... + ; The Robust.exe process must hvae R/W access to the location + ConfigDirectory = "/home/opensim/etc/Configs" + + ;# {HomeURI} {Hypergrid} {The Home URL of this world} {} + ;; This is the address of the external robust server that + ;; runs the UserAgentsService, possibly this server. + ;; For example http://myworld.com:8002 + ;; This is a default that can be overwritten in some sections. + ; HomeURI = "http://127.0.0.1:8002" + + ;# {GatekeeperURI} {Hypergrid} {The URL of the gatekeeper of this world} {} + ;; This is the address of the external robust server + ;; that runs the Gatekeeper service, possibly this server. + ;; For example http://myworld.com:8002 + ;; This is a default that can be overwritten in some sections. + ; GatekeeperURI = "http://127.0.0.1:8002" [ServiceList] @@ -155,7 +169,8 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset ;; Allow Hyperlinks to be created at the console HypergridLinker = true - Gatekeeper = "http://127.0.0.1:8002" + ;; If you have this set under [Startup], no need to set it here, leave it commented + ; GatekeeperURI = "http://127.0.0.1:8002" ; * This is the configuration for the freeswitch server in grid mode @@ -309,8 +324,8 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset ; HasProxy = false ; Defaults for the users, if none is specified in the useraccounts table entry (ServiceURLs) - ; CHANGE THIS - GatekeeperURI = "http://127.0.0.1:8002" + ;; If you have Gatekeeper set under [Startup], no need to set it here, leave it commented + ; GatekeeperURI = "http://127.0.0.1:8002" SRV_HomeURI = "http://127.0.0.1:8002" SRV_InventoryServerURI = "http://127.0.0.1:8002" @@ -417,8 +432,8 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset AuthenticationService = "OpenSim.Services.Connectors.dll:AuthenticationServicesConnector" SimulationService ="OpenSim.Services.Connectors.dll:SimulationServiceConnector" ; how does the outside world reach me? This acts as public key too. - ; CHANGE THIS - ExternalName = "http://127.0.0.1:8002" + ;; If you have GatekeeperURI set under [Startup], no need to set it here, leave it commented + ; ExternalName = "http://127.0.0.1:8002" ; Does this grid allow incoming links to any region in it? ; If false, HG TPs happen only to the Default regions specified in [GridService] section @@ -511,7 +526,9 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService" AvatarService = "OpenSim.Services.AvatarService.dll:AvatarService" - HomeURI = "http://127.0.0.1:8002" + + ;; Can overwrite the default in [Startup], but probably shouldn't + ; HomeURI = "http://127.0.0.1:8002" ; * The interface that local users get when they are in other grids. ; * This restricts the access that the rest of the world has to @@ -520,7 +537,9 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset [HGAssetService] LocalServiceModule = "OpenSim.Services.HypergridService.dll:HGAssetService" UserAccountsService = "OpenSim.Services.UserAccountService.dll:UserAccountService" - HomeURI = "http://127.0.0.1:8002" + + ;; Can overwrite the default in [Startup], but probably shouldn't + ; HomeURI = "http://127.0.0.1:8002" ;; The asset types that this grid can export to / import from other grids. ;; Comma separated. @@ -557,6 +576,10 @@ HGAssetServiceConnector = "HGAssetService@8002/OpenSim.Server.Handlers.dll:Asset [Groups] ;; for the HG Groups service OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" - ; What is the HomeURI of users associated with this grid? - HomeURI = "http://127.0.0.1:8002" UserAccountService = "OpenSim.Services.UserAccountService.dll:UserAccountService" + + ;; What is the HomeURI of users associated with this grid? + ;; Can overwrite the default in [Startup], but probably shouldn't + ; HomeURI = "http://127.0.0.1:8002" + + diff --git a/bin/config-include/StandaloneCommon.ini.example b/bin/config-include/StandaloneCommon.ini.example index ffa2d4999a..3129078861 100644 --- a/bin/config-include/StandaloneCommon.ini.example +++ b/bin/config-include/StandaloneCommon.ini.example @@ -64,8 +64,8 @@ Region_Welcome_Area = "DefaultRegion, FallbackRegion" ; === HG ONLY === - ;; change this to the address of your simulator - Gatekeeper="http://127.0.0.1:9000" + ;; If you have this set under [Startup], no need to set it here, leave it commented + ; GatekeeperURI="http://127.0.0.1:9000" [LibraryModule] ; Set this if you want to change the name of the OpenSim Library @@ -73,7 +73,8 @@ [LoginService] WelcomeMessage = "Welcome, Avatar!" - GatekeeperURI = "http://127.0.0.1:9000" + ;; If you have Gatekeeper set under [Startup], no need to set it here, leave it commented + ; GatekeeperURI = "http://127.0.0.1:9000" SRV_HomeURI = "http://127.0.0.1:9000" SRV_InventoryServerURI = "http://127.0.0.1:9000" @@ -218,7 +219,8 @@ ;; HG configurations ;; [GatekeeperService] - ExternalName = "http://127.0.0.1:9000" + ;; If you have GatekeeperURI set under [Startup], no need to set it here, leave it commented + ; ExternalName = "http://127.0.0.1:9000" ; Does this grid allow incoming links to any region in it? ; If false, HG TPs happen only to the Default regions specified in [GridService] section @@ -274,10 +276,12 @@ ; AllowExcept_Level_200 = "http://griefer.com:8002, http://enemy.com:8002" [HGInventoryService] - HomeURI = "http://127.0.0.1:9000" + ;; If you have this set under [Startup], no need to set it here, leave it commented + ; HomeURI = "http://127.0.0.1:9000" [HGAssetService] - HomeURI = "http://127.0.0.1:9000" + ;; If you have this set under [Startup], no need to set it here, leave it commented + ; HomeURI = "http://127.0.0.1:9000" ;; The asset types that this grid can export to / import from other grids. ;; Comma separated. @@ -293,8 +297,9 @@ [HGInventoryAccessModule] - HomeURI = "http://127.0.0.1:9000" - Gatekeeper = "http://127.0.0.1:9000" + ;; If you have these set under [Startup], no need to set it here, leave it commented + ; HomeURI = "http://127.0.0.1:9000" + ; GatekeeperURI = "http://127.0.0.1:9000" ;; If you want to protect your assets from being copied by foreign visitors ;; uncomment the next line. You may want to do this on sims that have licensed content. @@ -311,8 +316,8 @@ [Messaging] ; === HG ONLY === - ;; change this to the address of your simulator - Gatekeeper = "http://127.0.0.1:9000" + ;; If you have this set under [Startup], no need to set it here, leave it commented + ; GatekeeperURI = "http://127.0.0.1:9000" [EntityTransfer] From 0e5859d2b47fcc9bff1d9501b868d4984f4802c1 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 21 Feb 2013 17:26:37 -0800 Subject: [PATCH 30/30] Minor formatting cleanup. No changes. --- bin/Robust.ini.example | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example index 05ea67024f..ecbed1fcba 100644 --- a/bin/Robust.ini.example +++ b/bin/Robust.ini.example @@ -14,18 +14,18 @@ ; * [Startup] -; Plugin Registry Location -; Set path to directory for plugin registry. Information -; about the registered repositories and installed plugins -; will be stored here -; The Robust.exe process must hvae R/W access to the location -RegistryLocation = "." + ; Plugin Registry Location + ; Set path to directory for plugin registry. Information + ; about the registered repositories and installed plugins + ; will be stored here + ; The Robust.exe process must hvae R/W access to the location + RegistryLocation = "." -; Modular configurations -; Set path to directory for modular ini files... -; The Robust.exe process must hvae R/W access to the location -ConfigDirectory = "/home/opensim/etc/Configs" + ; Modular configurations + ; Set path to directory for modular ini files... + ; The Robust.exe process must hvae R/W access to the location + ConfigDirectory = "/home/opensim/etc/Configs" [ServiceList] AssetServiceConnector = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector"

pJOH=UDjlhUC|!Js)vPFHPza=w-ZS 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 F{{W12teOA- diff --git a/bin/lib64/libBulletSim.so b/bin/lib64/libBulletSim.so index 422681e4236ccca5dfb75f6cd7b0711e3d99ed68..79207fedc9abc9e35a32709b852c1308ee47644e 100755 GIT binary patch delta 723430 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 za�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