From f42d1fc825b7b9d22ae05836992531d9abd2a26d Mon Sep 17 00:00:00 2001 From: lbsa71 Date: Tue, 27 Mar 2007 21:42:14 +0000 Subject: [PATCH] * revert the revert - begin the beguine --- .../OpenGridServices.GridServer.csproj | 12 +- .../OpenGridServices.UserServer.csproj | 47 ++- .../OpenSim.Config.SimConfigDb4o.csproj | 6 +- .../OpenSim.Config.SimConfigDb4o.dll.build | 4 +- .../OpenSim.Framework.Console.csproj | 2 +- OpenSim.Framework/OpenSim.Framework.csproj | 2 +- .../Local/OpenSim.GridInterfaces.Local.csproj | 6 +- .../OpenSim.GridInterfaces.Local.dll.build | 4 +- .../OpenSim.GridInterfaces.Remote.csproj | 6 +- .../OpenSim.GridInterfaces.Remote.dll.build | 4 +- .../OpenSim.Physics.BasicPhysicsPlugin.csproj | 4 +- ...enSim.Physics.BasicPhysicsPlugin.dll.build | 2 +- .../Manager/OpenSim.Physics.Manager.csproj | 10 +- .../Manager/OpenSim.Physics.Manager.dll.build | 3 +- .../OpenSim.Physics.OdePlugin.csproj | 4 +- .../OpenSim.Physics.OdePlugin.dll.build | 2 +- .../OpenSim.Physics.PhysXPlugin.csproj | 4 +- .../OpenSim.Physics.PhysXPlugin.dll.build | 2 +- OpenSim.RegionServer/AgentAssetUpload.cs | 17 +- OpenSim.RegionServer/CAPS/AdminWebFront.cs | 11 +- OpenSim.RegionServer/CAPS/SimHttp.cs | 41 ++- .../OpenSim.RegionServer.csproj | 68 ++-- .../OpenSim.RegionServer.dll.build | 7 +- OpenSim.RegionServer/OpenSimMain.cs | 8 +- OpenSim.RegionServer/SimClient.cs | 99 +++--- .../UserServer/LocalUserProfileManager.cs | 18 +- .../UserServer/LoginServer.cs | 20 +- OpenSim.RegionServer/world/Avatar.cs | 39 +- OpenSim.RegionServer/world/Primitive.cs | 27 +- OpenSim.RegionServer/world/World.cs | 31 +- .../OpenSim.Storage.LocalStorageDb4o.csproj | 6 +- ...OpenSim.Storage.LocalStorageDb4o.dll.build | 4 +- OpenSim.build | 11 +- OpenSim.sln | 191 +++++----- OpenSim/OpenSim.csproj | 10 +- OpenSim/OpenSim.exe.build | 8 +- OpenSim/RegionServer.cs | 14 +- Prebuild/Prebuild.sln | 10 +- Prebuild/src/Core/Targets/NAntTarget.cs | 28 +- Prebuild/src/Prebuild.csproj | 2 +- Servers/BaseHttpServer.cs | 10 + Servers/CapsHttpServer.cs | 332 ------------------ Servers/OpenSim.Servers.csproj | 27 +- Servers/OpenSim.Servers.dll.build | 3 +- bin/Prebuild.exe | Bin 176128 -> 176128 bytes prebuild.xml | 16 +- 46 files changed, 488 insertions(+), 694 deletions(-) create mode 100644 Servers/BaseHttpServer.cs delete mode 100644 Servers/CapsHttpServer.cs diff --git a/OpenGridServices.GridServer/OpenGridServices.GridServer.csproj b/OpenGridServices.GridServer/OpenGridServices.GridServer.csproj index 856505f698..378d2610ed 100644 --- a/OpenGridServices.GridServer/OpenGridServices.GridServer.csproj +++ b/OpenGridServices.GridServer/OpenGridServices.GridServer.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {3378EE78-2D72-4C21-8F9D-680B33AAFFEE} + {0CE4ED02-8BB2-439C-8225-E42F2D661D44} Debug AnyCPU @@ -74,16 +74,18 @@ ..\bin\OpenSim.Framework.dll False - - ..\bin\OpenSim.Framework.Console.dll - False - ..\bin\libsecondlife.dll False + + OpenSim.Framework.Console + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + False + diff --git a/OpenGridServices.UserServer/OpenGridServices.UserServer.csproj b/OpenGridServices.UserServer/OpenGridServices.UserServer.csproj index 1b67165b1c..c27c0f7e08 100644 --- a/OpenGridServices.UserServer/OpenGridServices.UserServer.csproj +++ b/OpenGridServices.UserServer/OpenGridServices.UserServer.csproj @@ -1,13 +1,12 @@ - + Local 8.0.50727 2.0 - {36895293-A627-42EC-BA77-6AF6F5A4A7DF} + {98EC7DD5-BAB2-4678-AEA1-7C2B27B27BC9} Debug AnyCPU - - + OpenGridServices.UserServer @@ -16,11 +15,9 @@ IE50 false Exe - - + OpenGridServices.UserServer - - + @@ -31,8 +28,7 @@ TRACE;DEBUG - - + True 4096 False @@ -41,8 +37,7 @@ False False 4 - - + False @@ -51,8 +46,7 @@ TRACE - - + False 4096 True @@ -61,36 +55,37 @@ False False 4 - - + - + System.dll False - + System.Data.dll False - + System.Xml.dll False - + ..\bin\OpenSim.Framework.dll False - - ..\bin\OpenSim.Framework.Console.dll - False - - + ..\bin\libsecondlife.dll False + + OpenSim.Framework.Console + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + False + @@ -110,4 +105,4 @@ - \ No newline at end of file + diff --git a/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.csproj b/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.csproj index 80796ea6bb..c3486052d8 100644 --- a/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.csproj +++ b/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {C83C9D5B-655E-447D-90CA-7C4AB2F814DD} + {A6463B2D-0956-4680-9D03-082199779C66} Debug AnyCPU @@ -82,13 +82,13 @@ OpenSim.Framework - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1} + {BD7866A4-04BA-47F0-905F-B2359118F5B2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False OpenSim.Framework.Console - {7AED7536-7D6B-4E28-8016-B5A554C663B4} + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False diff --git a/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.dll.build b/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.dll.build index 3dfa7ceb18..e5767288ed 100644 --- a/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.dll.build +++ b/OpenSim.Config/SimConfigDb4o/OpenSim.Config.SimConfigDb4o.dll.build @@ -25,8 +25,8 @@ - - + + diff --git a/OpenSim.Framework.Console/OpenSim.Framework.Console.csproj b/OpenSim.Framework.Console/OpenSim.Framework.Console.csproj index bd10ce213d..3572f4af09 100644 --- a/OpenSim.Framework.Console/OpenSim.Framework.Console.csproj +++ b/OpenSim.Framework.Console/OpenSim.Framework.Console.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {7AED7536-7D6B-4E28-8016-B5A554C663B4} + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} Debug AnyCPU diff --git a/OpenSim.Framework/OpenSim.Framework.csproj b/OpenSim.Framework/OpenSim.Framework.csproj index b81afb5364..014dd57686 100644 --- a/OpenSim.Framework/OpenSim.Framework.csproj +++ b/OpenSim.Framework/OpenSim.Framework.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1} + {BD7866A4-04BA-47F0-905F-B2359118F5B2} Debug AnyCPU diff --git a/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.csproj b/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.csproj index e504a0a913..4401b969e1 100644 --- a/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.csproj +++ b/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {21403281-9649-4CE8-869C-E4F2075DEE94} + {CBC22F47-9CF2-4748-B6C6-85CDAB267554} Debug AnyCPU @@ -78,13 +78,13 @@ OpenSim.Framework - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1} + {BD7866A4-04BA-47F0-905F-B2359118F5B2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False OpenSim.Framework.Console - {7AED7536-7D6B-4E28-8016-B5A554C663B4} + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False diff --git a/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.dll.build b/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.dll.build index ec65ba8c71..6bf398e574 100644 --- a/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.dll.build +++ b/OpenSim.GridInterfaces/Local/OpenSim.GridInterfaces.Local.dll.build @@ -24,8 +24,8 @@ - - + + diff --git a/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj b/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj index fe32cd6874..a8a676089f 100644 --- a/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj +++ b/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {BFCBC85D-2071-4294-923C-EC62D841A219} + {76C00C0A-1AEF-49C9-8E4E-19A529B364E8} Debug AnyCPU @@ -74,13 +74,13 @@ OpenSim.Framework - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1} + {BD7866A4-04BA-47F0-905F-B2359118F5B2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False OpenSim.Framework.Console - {7AED7536-7D6B-4E28-8016-B5A554C663B4} + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False diff --git a/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build b/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build index 206045444e..dd6db181d1 100644 --- a/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build +++ b/OpenSim.GridInterfaces/Remote/OpenSim.GridInterfaces.Remote.dll.build @@ -23,8 +23,8 @@ - - + + diff --git a/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj index 23985fda9b..ec632b16c1 100644 --- a/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj +++ b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {1F6E0D7F-D82D-4A21-B61D-970294EC1CAD} + {E168B13F-8D18-43E7-8546-C0EC1899579F} Debug AnyCPU @@ -70,7 +70,7 @@ OpenSim.Physics.Manager - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348} + {2EAB18A1-8187-4C79-9947-A671F9C007D9} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False diff --git a/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.dll.build b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.dll.build index f14673337a..3497a55352 100644 --- a/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.dll.build +++ b/OpenSim.Physics/BasicPhysicsPlugin/OpenSim.Physics.BasicPhysicsPlugin.dll.build @@ -21,7 +21,7 @@ - + diff --git a/OpenSim.Physics/Manager/OpenSim.Physics.Manager.csproj b/OpenSim.Physics/Manager/OpenSim.Physics.Manager.csproj index 0055c9caf3..b4679a91c9 100644 --- a/OpenSim.Physics/Manager/OpenSim.Physics.Manager.csproj +++ b/OpenSim.Physics/Manager/OpenSim.Physics.Manager.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348} + {2EAB18A1-8187-4C79-9947-A671F9C007D9} Debug AnyCPU @@ -72,9 +72,15 @@ + + OpenSim.Framework + {BD7866A4-04BA-47F0-905F-B2359118F5B2} + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + False + OpenSim.Framework.Console - {7AED7536-7D6B-4E28-8016-B5A554C663B4} + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False diff --git a/OpenSim.Physics/Manager/OpenSim.Physics.Manager.dll.build b/OpenSim.Physics/Manager/OpenSim.Physics.Manager.dll.build index 47e55347cc..4b5ee51cc6 100644 --- a/OpenSim.Physics/Manager/OpenSim.Physics.Manager.dll.build +++ b/OpenSim.Physics/Manager/OpenSim.Physics.Manager.dll.build @@ -25,7 +25,8 @@ - + + diff --git a/OpenSim.Physics/OdePlugin/OpenSim.Physics.OdePlugin.csproj b/OpenSim.Physics/OdePlugin/OpenSim.Physics.OdePlugin.csproj index 7e83efde93..6fd3e8c94f 100644 --- a/OpenSim.Physics/OdePlugin/OpenSim.Physics.OdePlugin.csproj +++ b/OpenSim.Physics/OdePlugin/OpenSim.Physics.OdePlugin.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {C81B7E61-943D-4190-87C3-CB02BF67A2B3} + {F23A90E8-FDED-4D8C-A1B9-2ABE0A8C8EB2} Debug AnyCPU @@ -74,7 +74,7 @@ OpenSim.Physics.Manager - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348} + {2EAB18A1-8187-4C79-9947-A671F9C007D9} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False diff --git a/OpenSim.Physics/OdePlugin/OpenSim.Physics.OdePlugin.dll.build b/OpenSim.Physics/OdePlugin/OpenSim.Physics.OdePlugin.dll.build index 8e49f8f554..f25361a432 100644 --- a/OpenSim.Physics/OdePlugin/OpenSim.Physics.OdePlugin.dll.build +++ b/OpenSim.Physics/OdePlugin/OpenSim.Physics.OdePlugin.dll.build @@ -21,7 +21,7 @@ - + diff --git a/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.csproj b/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.csproj index d2039a12a4..8d36b0049f 100644 --- a/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.csproj +++ b/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {E1510E0F-EFCB-4702-BCB6-96A084454B55} + {0EF13F92-86F1-403D-882A-AA9DD4421B32} Debug AnyCPU @@ -74,7 +74,7 @@ OpenSim.Physics.Manager - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348} + {2EAB18A1-8187-4C79-9947-A671F9C007D9} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False diff --git a/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.dll.build b/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.dll.build index 8f9e7dc80f..5ab70bb7c1 100644 --- a/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.dll.build +++ b/OpenSim.Physics/PhysXPlugin/OpenSim.Physics.PhysXPlugin.dll.build @@ -22,7 +22,7 @@ - + diff --git a/OpenSim.RegionServer/AgentAssetUpload.cs b/OpenSim.RegionServer/AgentAssetUpload.cs index a482e80219..9f85598327 100644 --- a/OpenSim.RegionServer/AgentAssetUpload.cs +++ b/OpenSim.RegionServer/AgentAssetUpload.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using OpenSim.Assets; using OpenSim.Framework.Assets; using OpenSim.Framework.Utilities; using libsecondlife; @@ -12,10 +13,14 @@ namespace OpenSim { private Dictionary transactions = new Dictionary(); private SimClient ourClient; + private AssetCache m_assetCache; + private InventoryCache m_inventoryCache; - public AgentAssetUpload(SimClient client) + public AgentAssetUpload(SimClient client, AssetCache assetCache, InventoryCache inventoryCache) { this.ourClient = client; + m_assetCache = assetCache; + m_inventoryCache = inventoryCache; } public void AddUpload(LLUUID transactionID, AssetBase asset) @@ -148,8 +153,8 @@ namespace OpenSim //check if we should add it to inventory if (trans.AddToInventory) { - OpenSimRoot.Instance.AssetCache.AddAsset(trans.Asset); - OpenSimRoot.Instance.InventoryCache.AddNewInventoryItem(this.ourClient, trans.InventFolder, trans.Asset); + m_assetCache.AddAsset(trans.Asset); + m_inventoryCache.AddNewInventoryItem(this.ourClient, trans.InventFolder, trans.Asset); } @@ -176,7 +181,7 @@ namespace OpenSim AssetTransaction trans = this.transactions[transactionID]; if (trans.UploadComplete) { - OpenSimRoot.Instance.AssetCache.AddAsset(trans.Asset); + m_assetCache.AddAsset(trans.Asset); asset = trans.Asset; } } @@ -195,8 +200,8 @@ namespace OpenSim if (trans.UploadComplete) { //already complete so we can add it to the inventory - OpenSimRoot.Instance.AssetCache.AddAsset(trans.Asset); - Console.WriteLine( "ITem created is " +OpenSimRoot.Instance.InventoryCache.AddNewInventoryItem(this.ourClient, packet.InventoryBlock.FolderID, trans.Asset).ToStringHyphenated()); + m_assetCache.AddAsset(trans.Asset); + Console.WriteLine( "ITem created is " +m_inventoryCache.AddNewInventoryItem(this.ourClient, packet.InventoryBlock.FolderID, trans.Asset).ToStringHyphenated()); } else { diff --git a/OpenSim.RegionServer/CAPS/AdminWebFront.cs b/OpenSim.RegionServer/CAPS/AdminWebFront.cs index ea325897a0..03f86923ca 100644 --- a/OpenSim.RegionServer/CAPS/AdminWebFront.cs +++ b/OpenSim.RegionServer/CAPS/AdminWebFront.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Text; using System.IO; +using OpenSim.world; namespace OpenSim.CAPS { @@ -11,9 +12,11 @@ namespace OpenSim.CAPS private string NewAccountForm; private string LoginForm; private string passWord = "Admin"; + private World m_world; - public AdminWebFront(string password) + public AdminWebFront(string password, World world) { + m_world = world; passWord = password; LoadAdminPage(); } @@ -45,11 +48,11 @@ namespace OpenSim.CAPS { responseString = "

Listing connected Clients

"; OpenSim.world.Avatar TempAv; - foreach (libsecondlife.LLUUID UUID in OpenSimRoot.Instance.LocalWorld.Entities.Keys) + foreach (libsecondlife.LLUUID UUID in m_world.Entities.Keys) { - if (OpenSimRoot.Instance.LocalWorld.Entities[UUID].ToString() == "OpenSim.world.Avatar") + if (m_world.Entities[UUID].ToString() == "OpenSim.world.Avatar") { - TempAv = (OpenSim.world.Avatar)OpenSimRoot.Instance.LocalWorld.Entities[UUID]; + TempAv = (OpenSim.world.Avatar)m_world.Entities[UUID]; responseString += "

"; responseString += String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}", TempAv.firstname, TempAv.lastname, UUID, TempAv.ControllingClient.SessionID, TempAv.ControllingClient.CircuitCode, TempAv.ControllingClient.userEP.ToString()); responseString += "

"; diff --git a/OpenSim.RegionServer/CAPS/SimHttp.cs b/OpenSim.RegionServer/CAPS/SimHttp.cs index a1073f0427..92bbc6f3b3 100644 --- a/OpenSim.RegionServer/CAPS/SimHttp.cs +++ b/OpenSim.RegionServer/CAPS/SimHttp.cs @@ -39,22 +39,27 @@ using System.Collections.Generic; using libsecondlife; using OpenSim.Framework.Console; using OpenSim.Framework.Interfaces; +using OpenSim.Servers; namespace OpenSim.CAPS { // Dummy HTTP server, does nothing useful for now - public class SimCAPSHTTPServer + public class SimCAPSHTTPServer : BaseHttpServer { - public Thread HTTPD; - public HttpListener Listener; - private Dictionary restHandlers = new Dictionary(); + private Thread m_workerThread; + private HttpListener m_httpListener; + private Dictionary m_restHandlers = new Dictionary(); + private IGridServer m_gridServer; + private int m_port; - public SimCAPSHTTPServer() + public SimCAPSHTTPServer(IGridServer gridServer, int port) { OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Starting up HTTP Server"); - HTTPD = new Thread(new ThreadStart(StartHTTP)); - HTTPD.Start(); + m_workerThread = new Thread(new ThreadStart(StartHTTP)); + m_workerThread.Start(); + m_gridServer = gridServer; + m_port = port; } public void StartHTTP() @@ -62,15 +67,15 @@ namespace OpenSim.CAPS try { OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimHttp.cs:StartHTTP() - Spawned main thread OK"); - Listener = new HttpListener(); + m_httpListener = new HttpListener(); - Listener.Prefixes.Add("http://+:" + OpenSimRoot.Instance.Cfg.IPListenPort + "/"); - Listener.Start(); + m_httpListener.Prefixes.Add("http://+:" + m_port + "/"); + m_httpListener.Start(); HttpListenerContext context; while (true) { - context = Listener.GetContext(); + context = m_httpListener.GetContext(); ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest), context); } } @@ -82,9 +87,9 @@ namespace OpenSim.CAPS public bool AddRestHandler(string path, IRestHandler handler) { - if (!this.restHandlers.ContainsKey(path)) + if (!this.m_restHandlers.ContainsKey(path)) { - this.restHandlers.Add(path, handler); + this.m_restHandlers.Add(path, handler); return true; } @@ -108,12 +113,12 @@ namespace OpenSim.CAPS agent_data.lastname = (string)requestData["lastname"]; agent_data.AgentID = new LLUUID((string)requestData["agent_id"]); agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); - if (OpenSimRoot.Instance.GridServers.GridServer.GetName() == "Remote") + if (m_gridServer.GetName() == "Remote") { - ((RemoteGridBase)OpenSimRoot.Instance.GridServers.GridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data); + + ((RemoteGridBase)m_gridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data); } return ""; - break; } } catch (Exception e) @@ -135,9 +140,9 @@ namespace OpenSim.CAPS //path[0] should be empty so we are interested in path[1] if (path.Length > 1) { - if ((path[1] != "") && (this.restHandlers.ContainsKey(path[1]))) + if ((path[1] != "") && (this.m_restHandlers.ContainsKey(path[1]))) { - responseString = this.restHandlers[path[1]].HandleREST(requestBody, requestURL, requestMethod); + responseString = this.m_restHandlers[path[1]].HandleREST(requestBody, requestURL, requestMethod); } } diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.csproj b/OpenSim.RegionServer/OpenSim.RegionServer.csproj index f376e04951..1ce2837aa8 100644 --- a/OpenSim.RegionServer/OpenSim.RegionServer.csproj +++ b/OpenSim.RegionServer/OpenSim.RegionServer.csproj @@ -1,13 +1,12 @@ - + Local 8.0.50727 2.0 - {4171D545-81F5-4C64-AD29-6D7414C38181} + {ADD974E2-994C-4998-864E-4B54D8AD5F00} Debug AnyCPU - - + OpenSim.RegionServer @@ -16,11 +15,9 @@ IE50 false Library - - + OpenSim.RegionServer - - + @@ -31,8 +28,7 @@ TRACE;DEBUG - - + True 4096 False @@ -41,8 +37,7 @@ False False 4 - - + False @@ -51,8 +46,7 @@ TRACE - - + False 4096 True @@ -61,58 +55,60 @@ False False 4 - - + - + System.dll False - - + System.Xml.dll False - + ..\bin\libsecondlife.dll False - + ..\bin\Axiom.MathLib.dll False - + ..\bin\Db4objects.Db4o.dll False + + OpenSim.Framework + {BD7866A4-04BA-47F0-905F-B2359118F5B2} + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + False + OpenSim.Framework.Console - {7AED7536-7D6B-4E28-8016-B5A554C663B4} + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Physics.Manager - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348} + {2EAB18A1-8187-4C79-9947-A671F9C007D9} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False - - OpenSim.Framework - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1} + + OpenSim.Servers + {B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False Code - - Code @@ -146,6 +142,12 @@ Code + + Code + + + Code + Code @@ -193,4 +195,4 @@ - \ No newline at end of file + diff --git a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build index 4e44c4b102..04e86bcc6b 100644 --- a/OpenSim.RegionServer/OpenSim.RegionServer.dll.build +++ b/OpenSim.RegionServer/OpenSim.RegionServer.dll.build @@ -49,9 +49,10 @@ - - - + + + + diff --git a/OpenSim.RegionServer/OpenSimMain.cs b/OpenSim.RegionServer/OpenSimMain.cs index 7425fca690..d6453e24c7 100644 --- a/OpenSim.RegionServer/OpenSimMain.cs +++ b/OpenSim.RegionServer/OpenSimMain.cs @@ -91,7 +91,7 @@ namespace OpenSim OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Startup() - We are " + OpenSimRoot.Instance.Cfg.RegionName + " at " + OpenSimRoot.Instance.Cfg.RegionLocX.ToString() + "," + OpenSimRoot.Instance.Cfg.RegionLocY.ToString()); OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Initialising world"); - OpenSimRoot.Instance.LocalWorld = new World(); + OpenSimRoot.Instance.LocalWorld = new World(OpenSimRoot.Instance.ClientThreads, OpenSimRoot.Instance.Cfg.RegionHandle, OpenSimRoot.Instance.Cfg.RegionName, OpenSimRoot.Instance.Cfg); OpenSimRoot.Instance.LocalWorld.LandMap = OpenSimRoot.Instance.Cfg.LoadWorld(); this.physManager = new OpenSim.Physics.Manager.PhysicsManager(); @@ -113,8 +113,8 @@ namespace OpenSim } OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting CAPS HTTP server"); - OpenSimRoot.Instance.HttpServer = new SimCAPSHTTPServer(); - OpenSimRoot.Instance.HttpServer.AddRestHandler("Admin", new AdminWebFront("Admin")); + OpenSimRoot.Instance.HttpServer = new SimCAPSHTTPServer(OpenSimRoot.Instance.GridServers.GridServer, OpenSimRoot.Instance.Cfg.IPListenPort); + OpenSimRoot.Instance.HttpServer.AddRestHandler("Admin", new AdminWebFront("Admin", OpenSimRoot.Instance.LocalWorld)); timer1.Enabled = true; timer1.Interval = 100; @@ -172,7 +172,7 @@ namespace OpenSim { // new client UseCircuitCodePacket useCircuit = (UseCircuitCodePacket)packet; this.clientCircuits.Add(epSender, useCircuit.CircuitCode.Code); - SimClient newuser = new SimClient(epSender, useCircuit); + SimClient newuser = new SimClient(epSender, useCircuit, OpenSimRoot.Instance.LocalWorld, OpenSimRoot.Instance.ClientThreads, OpenSimRoot.Instance.AssetCache, OpenSimRoot.Instance.GridServers.GridServer, OpenSimRoot.Instance.Application, OpenSimRoot.Instance.InventoryCache, OpenSimRoot.Instance.Sandbox); //OpenSimRoot.Instance.ClientThreads.Add(epSender, newuser); OpenSimRoot.Instance.ClientThreads.Add(useCircuit.CircuitCode.Code, newuser); } diff --git a/OpenSim.RegionServer/SimClient.cs b/OpenSim.RegionServer/SimClient.cs index d463c75e4e..698053d048 100644 --- a/OpenSim.RegionServer/SimClient.cs +++ b/OpenSim.RegionServer/SimClient.cs @@ -71,6 +71,13 @@ namespace OpenSim private AgentAssetUpload UploadAssets; private LLUUID newAssetFolder = LLUUID.Zero; private bool debug = false; + private World m_world; + private Dictionary m_clientThreads; + private AssetCache m_assetCache; + private IGridServer m_gridServer; + private OpenSimApplication m_application; + private InventoryCache m_inventoryCache; + private bool m_sandboxMode; private void ack_pack(Packet Pack) { @@ -105,15 +112,15 @@ namespace OpenSim switch (Pack.Type) { case PacketType.CompleteAgentMovement: - ClientAvatar.CompleteMovement(OpenSimRoot.Instance.LocalWorld); + ClientAvatar.CompleteMovement(m_world); ClientAvatar.SendInitialPosition(); break; case PacketType.RegionHandshakeReply: - OpenSimRoot.Instance.LocalWorld.SendLayerData(this); + m_world.SendLayerData(this); break; case PacketType.AgentWearablesRequest: ClientAvatar.SendInitialAppearance(); - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { if (client.AgentID != this.AgentID) { @@ -122,7 +129,7 @@ namespace OpenSim client.ClientAvatar.SendAppearanceToOtherAgent(this); } } - OpenSimRoot.Instance.LocalWorld.GetInitialPrims(this); + m_world.GetInitialPrims(this); break; case PacketType.AgentIsNowWearing: AgentIsNowWearingPacket wear = (AgentIsNowWearingPacket)Pack; @@ -134,7 +141,7 @@ namespace OpenSim this.ClientAvatar.SetAppearance(appear); break; case PacketType.ObjectAdd: - OpenSimRoot.Instance.LocalWorld.AddNewPrim((ObjectAddPacket)Pack, this); + m_world.AddNewPrim((ObjectAddPacket)Pack, this); break; case PacketType.ObjectLink: OpenSim.Framework.Console.MainConsole.Instance.WriteLine(Pack.ToString()); @@ -146,7 +153,7 @@ namespace OpenSim ObjectShapePacket shape = (ObjectShapePacket)Pack; for (int i = 0; i < shape.ObjectData.Length; i++) { - foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values) + foreach (Entity ent in m_world.Entities.Values) { if (ent.localid == shape.ObjectData[i].ObjectLocalID) { @@ -163,7 +170,7 @@ namespace OpenSim if (multipleupdate.ObjectData[i].Type == 9) //change position { libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); - foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values) + foreach (Entity ent in m_world.Entities.Values) { if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID) { @@ -177,7 +184,7 @@ namespace OpenSim else if (multipleupdate.ObjectData[i].Type == 10)//rotation { libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true); - foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values) + foreach (Entity ent in m_world.Entities.Values) { if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID) { @@ -190,7 +197,7 @@ namespace OpenSim { libsecondlife.LLVector3 scale = new LLVector3(multipleupdate.ObjectData[i].Data, 12); - foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values) + foreach (Entity ent in m_world.Entities.Values) { if (ent.localid == multipleupdate.ObjectData[i].ObjectLocalID) { @@ -204,13 +211,13 @@ namespace OpenSim RequestImagePacket imageRequest = (RequestImagePacket)Pack; for (int i = 0; i < imageRequest.RequestImage.Length; i++) { - OpenSimRoot.Instance.AssetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image); + m_assetCache.AddTextureRequest(this, imageRequest.RequestImage[i].Image); } break; case PacketType.TransferRequest: //Console.WriteLine("OpenSimClient.cs:ProcessInPacket() - Got transfer request"); TransferRequestPacket transfer = (TransferRequestPacket)Pack; - OpenSimRoot.Instance.AssetCache.AddAssetRequest(this, transfer); + m_assetCache.AddAssetRequest(this, transfer); break; case PacketType.AgentUpdate: ClientAvatar.HandleUpdate((AgentUpdatePacket)Pack); @@ -230,18 +237,18 @@ namespace OpenSim kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); kill.ObjectData[0].ID = this.ClientAvatar.localid; - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { client.OutPacket(kill); } - OpenSimRoot.Instance.GridServers.GridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode); - lock (OpenSimRoot.Instance.LocalWorld.Entities) + m_gridServer.LogoutSession(this.SessionID, this.AgentID, this.CircuitCode); + lock (m_world.Entities) { - OpenSimRoot.Instance.LocalWorld.Entities.Remove(this.AgentID); + m_world.Entities.Remove(this.AgentID); } //need to do other cleaning up here too - OpenSimRoot.Instance.ClientThreads.Remove(this.CircuitCode); //this.userEP); - OpenSimRoot.Instance.Application.RemoveClientCircuit(this.CircuitCode); + m_clientThreads.Remove(this.CircuitCode); //this.userEP); + m_application.RemoveClientCircuit(this.CircuitCode); this.ClientThread.Abort(); break; case PacketType.ChatFromViewer: @@ -258,7 +265,7 @@ namespace OpenSim reply.ChatData.FromName = _enc.GetBytes(this.ClientAvatar.firstname + " " + this.ClientAvatar.lastname + "\0"); reply.ChatData.OwnerID = this.AgentID; reply.ChatData.SourceID = this.AgentID; - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { client.OutPacket(reply); } @@ -267,7 +274,7 @@ namespace OpenSim ObjectImagePacket imagePack = (ObjectImagePacket)Pack; for (int i = 0; i < imagePack.ObjectData.Length; i++) { - foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values) + foreach (Entity ent in m_world.Entities.Values) { if (ent.localid == imagePack.ObjectData[i].ObjectLocalID) { @@ -278,7 +285,7 @@ namespace OpenSim break; case PacketType.ObjectFlagUpdate: ObjectFlagUpdatePacket flags = (ObjectFlagUpdatePacket)Pack; - foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values) + foreach (Entity ent in m_world.Entities.Values) { if (ent.localid == flags.AgentData.ObjectLocalID) { @@ -306,7 +313,7 @@ namespace OpenSim break; case PacketType.CreateInventoryFolder: CreateInventoryFolderPacket invFolder = (CreateInventoryFolderPacket)Pack; - OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type); + m_inventoryCache.CreateNewInventoryFolder(this, invFolder.FolderData.FolderID, (ushort)invFolder.FolderData.Type); Console.WriteLine(Pack.ToString()); break; case PacketType.CreateInventoryItem: @@ -320,11 +327,11 @@ namespace OpenSim case PacketType.FetchInventory: //Console.WriteLine("fetch item packet"); FetchInventoryPacket FetchInventory = (FetchInventoryPacket)Pack; - OpenSimRoot.Instance.InventoryCache.FetchInventory(this, FetchInventory); + m_inventoryCache.FetchInventory(this, FetchInventory); break; case PacketType.FetchInventoryDescendents: FetchInventoryDescendentsPacket Fetch = (FetchInventoryDescendentsPacket)Pack; - OpenSimRoot.Instance.InventoryCache.FetchInventoryDescendents(this, Fetch); + m_inventoryCache.FetchInventoryDescendents(this, Fetch); break; case PacketType.UpdateInventoryItem: UpdateInventoryItemPacket update = (UpdateInventoryItemPacket)Pack; @@ -332,17 +339,17 @@ namespace OpenSim { if (update.InventoryData[i].TransactionID != LLUUID.Zero) { - AssetBase asset = OpenSimRoot.Instance.AssetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID)); + AssetBase asset = m_assetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID)); if (asset != null) { - OpenSimRoot.Instance.InventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset); + m_inventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset); } else { asset = this.UploadAssets.AddUploadToAssetCache(update.InventoryData[i].TransactionID); if (asset != null) { - OpenSimRoot.Instance.InventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset); + m_inventoryCache.UpdateInventoryItem(this, update.InventoryData[i].ItemID, asset); } } } @@ -350,7 +357,7 @@ namespace OpenSim break; case PacketType.ViewerEffect: ViewerEffectPacket viewer = (ViewerEffectPacket)Pack; - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { if (client.AgentID != this.AgentID) { @@ -362,7 +369,7 @@ namespace OpenSim break; case PacketType.DeRezObject: //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Received DeRezObject packet"); - OpenSimRoot.Instance.LocalWorld.DeRezObject((DeRezObjectPacket)Pack, this); + m_world.DeRezObject((DeRezObjectPacket)Pack, this); break; } } @@ -501,11 +508,11 @@ namespace OpenSim if (Pack.Header.Zerocoded) { int packetsize = Helpers.ZeroEncode(sendbuffer, sendbuffer.Length, ZeroOutBuffer); - OpenSimRoot.Instance.Application.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP); + m_application.SendPacketTo(ZeroOutBuffer, packetsize, SocketFlags.None, CircuitCode);//userEP); } else { - OpenSimRoot.Instance.Application.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP); + m_application.SendPacketTo(sendbuffer, sendbuffer.Length, SocketFlags.None, CircuitCode); //userEP); } } catch (Exception) @@ -569,14 +576,22 @@ namespace OpenSim this.PacketQueue.Enqueue(item); } - public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack) + public SimClient(EndPoint remoteEP, UseCircuitCodePacket initialcirpack, World world, Dictionary clientThreads, AssetCache assetCache, IGridServer gridServer, OpenSimApplication application, InventoryCache inventoryCache, bool sandboxMode) { + m_world = world; + m_clientThreads = clientThreads; + m_assetCache = assetCache; + m_gridServer = gridServer; + m_application = application; + m_inventoryCache = inventoryCache; + m_sandboxMode = sandboxMode; + OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs - Started up new client thread to handle incoming request"); cirpack = initialcirpack; userEP = remoteEP; PacketQueue = new BlockingQueue(); - this.UploadAssets = new AgentAssetUpload(this); + this.UploadAssets = new AgentAssetUpload(this, m_assetCache, m_inventoryCache ); AckTimer = new System.Timers.Timer(500); AckTimer.Elapsed += new ElapsedEventHandler(AckTimer_Elapsed); AckTimer.Start(); @@ -608,14 +623,16 @@ namespace OpenSim protected virtual void InitNewClient() { OpenSim.Framework.Console.MainConsole.Instance.WriteLine("OpenSimClient.cs:InitNewClient() - Adding viewer agent to world"); - OpenSimRoot.Instance.LocalWorld.AddViewerAgent(this); - world.Entity tempent = OpenSimRoot.Instance.LocalWorld.Entities[this.AgentID]; + + m_world.AddViewerAgent(this); + world.Entity tempent = m_world.Entities[this.AgentID]; + this.ClientAvatar = (world.Avatar)tempent; } protected virtual void AuthUser() { - AuthenticateResponse sessionInfo = OpenSimRoot.Instance.GridServers.GridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code); + AuthenticateResponse sessionInfo = m_gridServer.AuthenticateSession(cirpack.CircuitCode.SessionID, cirpack.CircuitCode.ID, cirpack.CircuitCode.Code); if (!sessionInfo.Authorised) { //session/circuit not authorised @@ -638,23 +655,23 @@ namespace OpenSim } // Create Inventory, currently only works for sandbox mode - if (OpenSimRoot.Instance.Sandbox) + if (m_sandboxMode) { if (sessionInfo.LoginInfo.InventoryFolder != null) { this.CreateInventory(sessionInfo.LoginInfo.InventoryFolder); if (sessionInfo.LoginInfo.BaseFolder != null) { - OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder); + m_inventoryCache.CreateNewInventoryFolder(this, sessionInfo.LoginInfo.BaseFolder); this.newAssetFolder = sessionInfo.LoginInfo.BaseFolder; - AssetBase[] inventorySet = OpenSimRoot.Instance.AssetCache.CreateNewInventorySet(this.AgentID); + AssetBase[] inventorySet = m_assetCache.CreateNewInventorySet(this.AgentID); if (inventorySet != null) { for (int i = 0; i < inventorySet.Length; i++) { if (inventorySet[i] != null) { - OpenSimRoot.Instance.InventoryCache.AddNewInventoryItem(this, sessionInfo.LoginInfo.BaseFolder, inventorySet[i]); + m_inventoryCache.AddNewInventoryItem(this, sessionInfo.LoginInfo.BaseFolder, inventorySet[i]); } } } @@ -670,8 +687,8 @@ namespace OpenSim { AgentInventory inventory = new AgentInventory(); inventory.AgentID = this.AgentID; - OpenSimRoot.Instance.InventoryCache.AddNewAgentsInventory(inventory); - OpenSimRoot.Instance.InventoryCache.CreateNewInventoryFolder(this, baseFolder); + m_inventoryCache.AddNewAgentsInventory(inventory); + m_inventoryCache.CreateNewInventoryFolder(this, baseFolder); } } } diff --git a/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs b/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs index 83e340b473..eee1c3ae1b 100644 --- a/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs +++ b/OpenSim.RegionServer/UserServer/LocalUserProfileManager.cs @@ -12,11 +12,15 @@ namespace OpenSim.UserServer { class LocalUserProfileManager : UserProfileManager { - private IGridServer _gridServer; + private IGridServer m_gridServer; + private int m_port; + private string m_ipAddr; - public LocalUserProfileManager(IGridServer gridServer) + public LocalUserProfileManager(IGridServer gridServer, int simPort, string ipAddr) { - _gridServer = gridServer; + m_gridServer = gridServer; + m_port = simPort; + m_ipAddr = ipAddr; } public override void InitUserProfiles() @@ -29,8 +33,8 @@ namespace OpenSim.UserServer uint circode = (uint)response["circuit_code"]; theUser.AddSimCircuit(circode, LLUUID.Random()); response["home"] = "{'region_handle':[r" + (997 * 256).ToString() + ",r" + (996 * 256).ToString() + "], 'position':[r" + theUser.homepos.X.ToString() + ",r" + theUser.homepos.Y.ToString() + ",r" + theUser.homepos.Z.ToString() + "], 'look_at':[r" + theUser.homelookat.X.ToString() + ",r" + theUser.homelookat.Y.ToString() + ",r" + theUser.homelookat.Z.ToString() + "]}"; - response["sim_port"] = OpenSimRoot.Instance.Cfg.IPListenPort; - response["sim_ip"] = OpenSimRoot.Instance.Cfg.IPListenAddr; + response["sim_port"] = m_port; + response["sim_ip"] = m_ipAddr; response["region_y"] = (Int32)996 * 256; response["region_x"] = (Int32)997* 256; @@ -67,9 +71,9 @@ namespace OpenSim.UserServer _login.InventoryFolder = new LLUUID((string)Inventory1["folder_id"]); //working on local computer if so lets add to the gridserver's list of sessions? - if (OpenSimRoot.Instance.GridServers.GridServer.GetName() == "Local") + if (m_gridServer.GetName() == "Local") { - ((LocalGridBase)this._gridServer).AddNewSession(_login); + ((LocalGridBase)this.m_gridServer).AddNewSession(_login); } } } diff --git a/OpenSim.RegionServer/UserServer/LoginServer.cs b/OpenSim.RegionServer/UserServer/LoginServer.cs index 86b098a9ca..47af8a88b8 100644 --- a/OpenSim.RegionServer/UserServer/LoginServer.cs +++ b/OpenSim.RegionServer/UserServer/LoginServer.cs @@ -52,7 +52,7 @@ namespace OpenSim.UserServer /// public class LoginServer : LoginService , IUserServer { - private IGridServer _gridServer; + private IGridServer m_gridServer; private ushort _loginPort = 8080; public IPAddress clientAddress = IPAddress.Loopback; public IPAddress remoteAddress = IPAddress.Any; @@ -63,10 +63,14 @@ namespace OpenSim.UserServer private string _mpasswd; private bool _needPasswd = false; private LocalUserProfileManager userManager; + private int m_simPort; + private string m_simAddr; - public LoginServer(IGridServer gridServer) + public LoginServer(IGridServer gridServer, string simAddr, int simPort) { - _gridServer = gridServer; + m_gridServer = gridServer; + m_simPort = simPort; + m_simAddr = simAddr; } // InitializeLogin: initialize the login @@ -89,7 +93,7 @@ namespace OpenSim.UserServer SR.Close(); this._mpasswd = EncodePassword("testpass"); - userManager = new LocalUserProfileManager(this._gridServer); + userManager = new LocalUserProfileManager(this.m_gridServer, m_simPort, m_simAddr ); userManager.InitUserProfiles(); userManager.SetKeys("", "", "", "Welcome to OpenSim"); @@ -289,8 +293,8 @@ namespace OpenSim.UserServer XmlRpcResponse response = (XmlRpcResponse)(new XmlRpcResponseDeserializer()).Deserialize(this._defaultResponse); Hashtable responseData = (Hashtable)response.Value; - responseData["sim_port"] = OpenSimRoot.Instance.Cfg.IPListenPort; - responseData["sim_ip"] = OpenSimRoot.Instance.Cfg.IPListenAddr; + responseData["sim_port"] = m_simPort; + responseData["sim_ip"] = m_simAddr; responseData["agent_id"] = Agent.ToStringHyphenated(); responseData["session_id"] = Session.ToStringHyphenated(); responseData["secure_session_id"]= secureSess.ToStringHyphenated(); @@ -327,9 +331,9 @@ namespace OpenSim.UserServer _login.InventoryFolder = InventoryFolderID; //working on local computer if so lets add to the gridserver's list of sessions? - if (OpenSimRoot.Instance.GridServers.GridServer.GetName() == "Local") + if (m_gridServer.GetName() == "Local") { - ((LocalGridBase)this._gridServer).AddNewSession(_login); + ((LocalGridBase)m_gridServer).AddNewSession(_login); } // forward the XML-RPC response to the client diff --git a/OpenSim.RegionServer/world/Avatar.cs b/OpenSim.RegionServer/world/Avatar.cs index 75f2cff948..2ae99926ed 100644 --- a/OpenSim.RegionServer/world/Avatar.cs +++ b/OpenSim.RegionServer/world/Avatar.cs @@ -30,14 +30,23 @@ namespace OpenSim.world private byte[] visualParams; private AvatarWearable[] Wearables; private LLVector3 positionLastFrame = new LLVector3(0, 0, 0); + private World m_world; + private ulong m_regionHandle; + private Dictionary m_clientThreads; + private string m_regionName; - public Avatar(SimClient TheClient) + public Avatar(SimClient TheClient, World world, string regionName, Dictionary clientThreads, ulong regionHandle) { + m_world = world; + m_clientThreads = clientThreads; + m_regionName = regionName; + m_regionHandle = regionHandle; + OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)"); ControllingClient = TheClient; - localid = 8880000 + (OpenSimRoot.Instance.LocalWorld._localNumber++); + localid = 8880000 + (m_world._localNumber++); position = new LLVector3(100.0f, 100.0f, 30.0f); - position.Z = OpenSimRoot.Instance.LocalWorld.LandMap[(int)position.Y * 256 + (int)position.X] + 1; + position.Z = m_world.LandMap[(int)position.Y * 256 + (int)position.X] + 1; visualParams = new byte[218]; for (int i = 0; i < 218; i++) { @@ -52,7 +61,7 @@ namespace OpenSim.world this.Wearables[0].ItemID = LLUUID.Random(); this.avatarAppearanceTexture = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005")); - + } public PhysicsActor PhysActor @@ -96,11 +105,11 @@ namespace OpenSim.world //use CreateTerseBlock() ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock(); ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); - terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME + terse.RegionData.RegionHandle = m_regionHandle; // FIXME terse.RegionData.TimeDilation = 64096; terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; terse.ObjectData[0] = terseBlock; - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { client.OutPacket(terse); } @@ -119,11 +128,11 @@ namespace OpenSim.world //It has been a while since last update was sent so lets send one. ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock(); ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); - terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME + terse.RegionData.RegionHandle = m_regionHandle; // FIXME terse.RegionData.TimeDilation = 64096; terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; terse.ObjectData[0] = terseBlock; - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { client.OutPacket(terse); } @@ -172,7 +181,7 @@ namespace OpenSim.world AgentMovementCompletePacket mov = new AgentMovementCompletePacket(); mov.AgentData.SessionID = this.ControllingClient.SessionID; mov.AgentData.AgentID = this.ControllingClient.AgentID; - mov.Data.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; + mov.Data.RegionHandle = m_regionHandle; // TODO - dynamicalise this stuff mov.Data.Timestamp = 1172750370; mov.Data.Position = new LLVector3(100f, 100f, 23f); @@ -187,7 +196,7 @@ namespace OpenSim.world System.Text.Encoding _enc = System.Text.Encoding.ASCII; //send a objectupdate packet with information about the clients avatar ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; + objupdate.RegionData.RegionHandle = m_regionHandle; objupdate.RegionData.TimeDilation = 64096; objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; @@ -202,9 +211,9 @@ namespace OpenSim.world byte[] pb = pos2.GetBytes(); Array.Copy(pb, 0, objupdate.ObjectData[0].ObjectData, 16, pb.Length); - OpenSimRoot.Instance.LocalWorld._localNumber++; + m_world._localNumber++; - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { client.OutPacket(objupdate); if (client.AgentID != ControllingClient.AgentID) @@ -241,7 +250,7 @@ namespace OpenSim.world System.Text.Encoding _enc = System.Text.Encoding.ASCII; //send a objectupdate packet with information about the clients avatar ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; + objupdate.RegionData.RegionHandle = m_regionHandle; objupdate.RegionData.TimeDilation = 64096; objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; @@ -293,7 +302,7 @@ namespace OpenSim.world this.visualParams[i] = appear.VisualParam[i].ParamValue; } - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { if (client.AgentID != ControllingClient.AgentID) { @@ -490,7 +499,7 @@ namespace OpenSim.world handshake.RegionInfo.SimAccess = 13; handshake.RegionInfo.WaterHeight = 20; handshake.RegionInfo.RegionFlags = 72458694; - handshake.RegionInfo.SimName = _enc.GetBytes(OpenSimRoot.Instance.Cfg.RegionName + "\0"); + handshake.RegionInfo.SimName = _enc.GetBytes(m_regionName + "\0"); handshake.RegionInfo.SimOwner = new LLUUID("00000000-0000-0000-0000-000000000000"); handshake.RegionInfo.TerrainBase0 = new LLUUID("b8d3965a-ad78-bf43-699b-bff8eca6c975"); handshake.RegionInfo.TerrainBase1 = new LLUUID("abb783e6-3e93-26c0-248a-247666855da3"); diff --git a/OpenSim.RegionServer/world/Primitive.cs b/OpenSim.RegionServer/world/Primitive.cs index 6ff66a3847..a185f0bc70 100644 --- a/OpenSim.RegionServer/world/Primitive.cs +++ b/OpenSim.RegionServer/world/Primitive.cs @@ -22,6 +22,9 @@ namespace OpenSim.world private PhysicsActor _physActor; private bool physicsEnabled = false; private bool physicstest = false; //just added for testing + private Dictionary m_clientThreads; + private ulong m_regionHandle; + private World m_world; public bool PhysicsEnabled { @@ -65,10 +68,14 @@ namespace OpenSim.world } } - public Primitive() + public Primitive(Dictionary clientThreads, ulong regionHandle, World world) { mesh_cutbegin = 0.0f; mesh_cutend = 1.0f; + + m_clientThreads = clientThreads; + m_regionHandle = regionHandle; + m_world = world; } public override Mesh getMesh() @@ -99,7 +106,7 @@ namespace OpenSim.world { if (this.newPrimFlag) { - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { client.OutPacket(OurPacket); } @@ -108,11 +115,11 @@ namespace OpenSim.world else if (this.updateFlag) { ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); - terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME + terse.RegionData.RegionHandle = m_regionHandle; // FIXME terse.RegionData.TimeDilation = 64096; terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; terse.ObjectData[0] = this.CreateImprovedBlock(); - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { client.OutPacket(terse); } @@ -120,7 +127,7 @@ namespace OpenSim.world } else if (this.dirtyFlag) { - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { UpdateClient(client); } @@ -131,11 +138,11 @@ namespace OpenSim.world if (this._physActor != null && this.physicsEnabled) { ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); - terse.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; // FIXME + terse.RegionData.RegionHandle = m_regionHandle; // FIXME terse.RegionData.TimeDilation = 64096; terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; terse.ObjectData[0] = this.CreateImprovedBlock(); - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { client.OutPacket(terse); } @@ -255,7 +262,7 @@ namespace OpenSim.world public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID) { ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; + objupdate.RegionData.RegionHandle = m_regionHandle; objupdate.RegionData.TimeDilation = 64096; objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; @@ -323,7 +330,7 @@ namespace OpenSim.world { //need to clean this up as it shares a lot of code with CreateFromPacket() ObjectUpdatePacket objupdate = new ObjectUpdatePacket(); - objupdate.RegionData.RegionHandle = OpenSimRoot.Instance.Cfg.RegionHandle; + objupdate.RegionData.RegionHandle = m_regionHandle; objupdate.RegionData.TimeDilation = 64096; objupdate.ObjectData = new libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock[1]; @@ -480,7 +487,7 @@ namespace OpenSim.world this.primData.LocalID = this.localid; this.primData.Position = this.position; this.primData.Rotation = new LLQuaternion(this.rotation.x, this.rotation.y, this.rotation.z, this.rotation.w); - OpenSimRoot.Instance.LocalWorld.localStorage.StorePrim(this.primData); + m_world.localStorage.StorePrim(this.primData); } } diff --git a/OpenSim.RegionServer/world/World.cs b/OpenSim.RegionServer/world/World.cs index e6d8921e0d..0d126e6b87 100644 --- a/OpenSim.RegionServer/world/World.cs +++ b/OpenSim.RegionServer/world/World.cs @@ -25,10 +25,19 @@ namespace OpenSim.world private Random Rand = new Random(); private uint _primCount = 702000; private int storageCount; + private Dictionary m_clientThreads; + private ulong m_regionHandle; + private string m_regionName; + private SimConfig m_cfg; - public World() + public World(Dictionary clientThreads, ulong regionHandle, string regionName, SimConfig cfg) { - OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance"); + m_clientThreads = clientThreads; + m_regionHandle = regionHandle; + m_regionName = regionName; + m_cfg = cfg; + + OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating new entitities instance"); Entities = new Dictionary(); OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs - creating LandMap"); @@ -115,9 +124,9 @@ namespace OpenSim.world HeightmapGenHills hills = new HeightmapGenHills(); this.LandMap = hills.GenerateHeightmap(200, 4.0f, 80.0f, false); this.phyScene.SetTerrain(this.LandMap); - OpenSimRoot.Instance.Cfg.SaveMap(this.LandMap); + m_cfg.SaveMap(this.LandMap); - foreach(SimClient client in OpenSimRoot.Instance.ClientThreads.Values) { + foreach(SimClient client in m_clientThreads.Values) { this.SendLayerData(client); } } @@ -134,7 +143,7 @@ namespace OpenSim.world _primCount = prim.LocalID + 1; } OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: PrimFromStorage() - Reloading prim (localId "+ prim.LocalID+ " ) from storage"); - Primitive nPrim = new Primitive(); + Primitive nPrim = new Primitive(m_clientThreads, m_regionHandle, this); nPrim.CreateFromStorage(prim); this.Entities.Add(nPrim.uuid, nPrim); } @@ -175,7 +184,7 @@ namespace OpenSim.world public void AddViewerAgent(SimClient AgentClient) { OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent"); - Avatar NewAvatar = new Avatar(AgentClient); + Avatar NewAvatar = new Avatar(AgentClient, this, m_regionName, m_clientThreads, m_regionHandle ); OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world"); OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake "); NewAvatar.SendRegionHandshake(this); @@ -187,7 +196,7 @@ namespace OpenSim.world public void AddNewPrim(ObjectAddPacket addPacket, SimClient AgentClient) { OpenSim.Framework.Console.MainConsole.Instance.WriteLine("World.cs: AddNewPrim() - Creating new prim"); - Primitive prim = new Primitive(); + Primitive prim = new Primitive(m_clientThreads, m_regionHandle, this ); prim.CreateFromPacket(addPacket, AgentClient.AgentID, this._primCount); PhysicsVector pVec = new PhysicsVector(prim.position.X, prim.position.Y, prim.position.Z); PhysicsVector pSize = new PhysicsVector( 0.255f, 0.255f, 0.255f); @@ -210,7 +219,7 @@ namespace OpenSim.world foreach( DeRezObjectPacket.ObjectDataBlock Data in DeRezPacket.ObjectData ) { //OpenSim.Framework.Console.MainConsole.Instance.WriteLine("LocalID:" + Data.ObjectLocalID.ToString()); - foreach (Entity ent in OpenSimRoot.Instance.LocalWorld.Entities.Values) + foreach (Entity ent in this.Entities.Values) { if (ent.localid == Data.ObjectLocalID) { @@ -220,7 +229,7 @@ namespace OpenSim.world kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; kill.ObjectData[0] = new KillObjectPacket.ObjectDataBlock(); kill.ObjectData[0].ID = ent.localid; - foreach (SimClient client in OpenSimRoot.Instance.ClientThreads.Values) + foreach (SimClient client in m_clientThreads.Values) { client.OutPacket(kill); } @@ -234,9 +243,9 @@ namespace OpenSim.world } foreach( libsecondlife.LLUUID uuid in DeRezEnts ) { - lock (OpenSimRoot.Instance.LocalWorld.Entities) + lock (this.Entities) { - OpenSimRoot.Instance.LocalWorld.Entities.Remove(uuid); + this.Entities.Remove(uuid); } } diff --git a/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj b/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj index 1f2eb240fa..024dcfc496 100644 --- a/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj +++ b/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {CB1411EF-BF7B-49B4-814B-A1D50D1AC7D2} + {55969A66-0E92-4F76-BFF6-2256C6A5CAF7} Debug AnyCPU @@ -78,13 +78,13 @@ OpenSim.Framework - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1} + {BD7866A4-04BA-47F0-905F-B2359118F5B2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False OpenSim.Framework.Console - {7AED7536-7D6B-4E28-8016-B5A554C663B4} + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False diff --git a/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.dll.build b/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.dll.build index 44e8597715..550eaa5cd5 100644 --- a/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.dll.build +++ b/OpenSim.Storage/LocalStorageDb4o/OpenSim.Storage.LocalStorageDb4o.dll.build @@ -24,8 +24,8 @@ - - + + diff --git a/OpenSim.build b/OpenSim.build index c61b728fb6..b012a1b092 100644 --- a/OpenSim.build +++ b/OpenSim.build @@ -46,7 +46,7 @@ - + @@ -56,16 +56,18 @@ + - + + @@ -88,7 +90,7 @@ - + @@ -98,10 +100,11 @@ + - + diff --git a/OpenSim.sln b/OpenSim.sln index 8370bef7aa..207bbbadfc 100644 --- a/OpenSim.sln +++ b/OpenSim.sln @@ -1,97 +1,130 @@ Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.PhysXPlugin", "OpenSim.Physics\PhysXPlugin\OpenSim.Physics.PhysXPlugin.csproj", "{E1510E0F-EFCB-4702-BCB6-96A084454B55}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Servers", "Servers\OpenSim.Servers.csproj", "{B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework.Console", "OpenSim.Framework.Console\OpenSim.Framework.Console.csproj", "{7AED7536-7D6B-4E28-8016-B5A554C663B4}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework.Console", "OpenSim.Framework.Console\OpenSim.Framework.Console.csproj", "{4B0A7290-36C2-4C74-B9B4-07775B031CF2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Config.SimConfigDb4o", "OpenSim.Config\SimConfigDb4o\OpenSim.Config.SimConfigDb4o.csproj", "{C83C9D5B-655E-447D-90CA-7C4AB2F814DD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Config.SimConfigDb4o", "OpenSim.Config\SimConfigDb4o\OpenSim.Config.SimConfigDb4o.csproj", "{A6463B2D-0956-4680-9D03-082199779C66}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenGridServices.UserServer", "OpenGridServices.UserServer\OpenGridServices.UserServer.csproj", "{36895293-A627-42EC-BA77-6AF6F5A4A7DF}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenGridServices.UserServer", "OpenGridServices.UserServer\OpenGridServices.UserServer.csproj", "{98EC7DD5-BAB2-4678-AEA1-7C2B27B27BC9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.GridInterfaces.Remote", "OpenSim.GridInterfaces\Remote\OpenSim.GridInterfaces.Remote.csproj", "{BFCBC85D-2071-4294-923C-EC62D841A219}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.GridInterfaces.Remote", "OpenSim.GridInterfaces\Remote\OpenSim.GridInterfaces.Remote.csproj", "{76C00C0A-1AEF-49C9-8E4E-19A529B364E8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Storage.LocalStorageDb4o", "OpenSim.Storage\LocalStorageDb4o\OpenSim.Storage.LocalStorageDb4o.csproj", "{CB1411EF-BF7B-49B4-814B-A1D50D1AC7D2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Storage.LocalStorageDb4o", "OpenSim.Storage\LocalStorageDb4o\OpenSim.Storage.LocalStorageDb4o.csproj", "{55969A66-0E92-4F76-BFF6-2256C6A5CAF7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework", "OpenSim.Framework\OpenSim.Framework.csproj", "{90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework", "OpenSim.Framework\OpenSim.Framework.csproj", "{BD7866A4-04BA-47F0-905F-B2359118F5B2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenGridServices.GridServer", "OpenGridServices.GridServer\OpenGridServices.GridServer.csproj", "{3378EE78-2D72-4C21-8F9D-680B33AAFFEE}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenGridServices.GridServer", "OpenGridServices.GridServer\OpenGridServices.GridServer.csproj", "{0CE4ED02-8BB2-439C-8225-E42F2D661D44}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.OdePlugin", "OpenSim.Physics\OdePlugin\OpenSim.Physics.OdePlugin.csproj", "{C81B7E61-943D-4190-87C3-CB02BF67A2B3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.OdePlugin", "OpenSim.Physics\OdePlugin\OpenSim.Physics.OdePlugin.csproj", "{F23A90E8-FDED-4D8C-A1B9-2ABE0A8C8EB2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.BasicPhysicsPlugin", "OpenSim.Physics\BasicPhysicsPlugin\OpenSim.Physics.BasicPhysicsPlugin.csproj", "{1F6E0D7F-D82D-4A21-B61D-970294EC1CAD}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.BasicPhysicsPlugin", "OpenSim.Physics\BasicPhysicsPlugin\OpenSim.Physics.BasicPhysicsPlugin.csproj", "{E168B13F-8D18-43E7-8546-C0EC1899579F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.RegionServer", "OpenSim.RegionServer\OpenSim.RegionServer.csproj", "{4171D545-81F5-4C64-AD29-6D7414C38181}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim", "OpenSim\OpenSim.csproj", "{8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.Manager", "OpenSim.Physics\Manager\OpenSim.Physics.Manager.csproj", "{0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.RegionServer", "OpenSim.RegionServer\OpenSim.RegionServer.csproj", "{ADD974E2-994C-4998-864E-4B54D8AD5F00}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.GridInterfaces.Local", "OpenSim.GridInterfaces\Local\OpenSim.GridInterfaces.Local.csproj", "{21403281-9649-4CE8-869C-E4F2075DEE94}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.Manager", "OpenSim.Physics\Manager\OpenSim.Physics.Manager.csproj", "{2EAB18A1-8187-4C79-9947-A671F9C007D9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim", "OpenSim\OpenSim.csproj", "{5304CCD5-4902-4C6B-ADDE-2181B2F42FD6}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.GridInterfaces.Local", "OpenSim.GridInterfaces\Local\OpenSim.GridInterfaces.Local.csproj", "{CBC22F47-9CF2-4748-B6C6-85CDAB267554}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Physics.PhysXPlugin", "OpenSim.Physics\PhysXPlugin\OpenSim.Physics.PhysXPlugin.csproj", "{0EF13F92-86F1-403D-882A-AA9DD4421B32}" EndProject Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E1510E0F-EFCB-4702-BCB6-96A084454B55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1510E0F-EFCB-4702-BCB6-96A084454B55}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1510E0F-EFCB-4702-BCB6-96A084454B55}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1510E0F-EFCB-4702-BCB6-96A084454B55}.Release|Any CPU.Build.0 = Release|Any CPU - {7AED7536-7D6B-4E28-8016-B5A554C663B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7AED7536-7D6B-4E28-8016-B5A554C663B4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7AED7536-7D6B-4E28-8016-B5A554C663B4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7AED7536-7D6B-4E28-8016-B5A554C663B4}.Release|Any CPU.Build.0 = Release|Any CPU - {C83C9D5B-655E-447D-90CA-7C4AB2F814DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C83C9D5B-655E-447D-90CA-7C4AB2F814DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C83C9D5B-655E-447D-90CA-7C4AB2F814DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C83C9D5B-655E-447D-90CA-7C4AB2F814DD}.Release|Any CPU.Build.0 = Release|Any CPU - {36895293-A627-42EC-BA77-6AF6F5A4A7DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {36895293-A627-42EC-BA77-6AF6F5A4A7DF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {36895293-A627-42EC-BA77-6AF6F5A4A7DF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {36895293-A627-42EC-BA77-6AF6F5A4A7DF}.Release|Any CPU.Build.0 = Release|Any CPU - {BFCBC85D-2071-4294-923C-EC62D841A219}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BFCBC85D-2071-4294-923C-EC62D841A219}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BFCBC85D-2071-4294-923C-EC62D841A219}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BFCBC85D-2071-4294-923C-EC62D841A219}.Release|Any CPU.Build.0 = Release|Any CPU - {CB1411EF-BF7B-49B4-814B-A1D50D1AC7D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB1411EF-BF7B-49B4-814B-A1D50D1AC7D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB1411EF-BF7B-49B4-814B-A1D50D1AC7D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB1411EF-BF7B-49B4-814B-A1D50D1AC7D2}.Release|Any CPU.Build.0 = Release|Any CPU - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1}.Release|Any CPU.Build.0 = Release|Any CPU - {3378EE78-2D72-4C21-8F9D-680B33AAFFEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3378EE78-2D72-4C21-8F9D-680B33AAFFEE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3378EE78-2D72-4C21-8F9D-680B33AAFFEE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3378EE78-2D72-4C21-8F9D-680B33AAFFEE}.Release|Any CPU.Build.0 = Release|Any CPU - {C81B7E61-943D-4190-87C3-CB02BF67A2B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C81B7E61-943D-4190-87C3-CB02BF67A2B3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C81B7E61-943D-4190-87C3-CB02BF67A2B3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C81B7E61-943D-4190-87C3-CB02BF67A2B3}.Release|Any CPU.Build.0 = Release|Any CPU - {1F6E0D7F-D82D-4A21-B61D-970294EC1CAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F6E0D7F-D82D-4A21-B61D-970294EC1CAD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F6E0D7F-D82D-4A21-B61D-970294EC1CAD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F6E0D7F-D82D-4A21-B61D-970294EC1CAD}.Release|Any CPU.Build.0 = Release|Any CPU - {4171D545-81F5-4C64-AD29-6D7414C38181}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4171D545-81F5-4C64-AD29-6D7414C38181}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4171D545-81F5-4C64-AD29-6D7414C38181}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4171D545-81F5-4C64-AD29-6D7414C38181}.Release|Any CPU.Build.0 = Release|Any CPU - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348}.Release|Any CPU.Build.0 = Release|Any CPU - {21403281-9649-4CE8-869C-E4F2075DEE94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21403281-9649-4CE8-869C-E4F2075DEE94}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21403281-9649-4CE8-869C-E4F2075DEE94}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21403281-9649-4CE8-869C-E4F2075DEE94}.Release|Any CPU.Build.0 = Release|Any CPU - {5304CCD5-4902-4C6B-ADDE-2181B2F42FD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5304CCD5-4902-4C6B-ADDE-2181B2F42FD6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5304CCD5-4902-4C6B-ADDE-2181B2F42FD6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5304CCD5-4902-4C6B-ADDE-2181B2F42FD6}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectDependencies) = postSolution + ({B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE}).2 = ({BD7866A4-04BA-47F0-905F-B2359118F5B2}) + ({B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE}).3 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({A6463B2D-0956-4680-9D03-082199779C66}).5 = ({BD7866A4-04BA-47F0-905F-B2359118F5B2}) + ({A6463B2D-0956-4680-9D03-082199779C66}).6 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({98EC7DD5-BAB2-4678-AEA1-7C2B27B27BC9}).4 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({76C00C0A-1AEF-49C9-8E4E-19A529B364E8}).3 = ({BD7866A4-04BA-47F0-905F-B2359118F5B2}) + ({76C00C0A-1AEF-49C9-8E4E-19A529B364E8}).4 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({55969A66-0E92-4F76-BFF6-2256C6A5CAF7}).4 = ({BD7866A4-04BA-47F0-905F-B2359118F5B2}) + ({55969A66-0E92-4F76-BFF6-2256C6A5CAF7}).5 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({0CE4ED02-8BB2-439C-8225-E42F2D661D44}).4 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({F23A90E8-FDED-4D8C-A1B9-2ABE0A8C8EB2}).2 = ({2EAB18A1-8187-4C79-9947-A671F9C007D9}) + ({E168B13F-8D18-43E7-8546-C0EC1899579F}).2 = ({2EAB18A1-8187-4C79-9947-A671F9C007D9}) + ({8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1}).5 = ({BD7866A4-04BA-47F0-905F-B2359118F5B2}) + ({8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1}).6 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1}).7 = ({2EAB18A1-8187-4C79-9947-A671F9C007D9}) + ({8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1}).8 = ({ADD974E2-994C-4998-864E-4B54D8AD5F00}) + ({ADD974E2-994C-4998-864E-4B54D8AD5F00}).5 = ({BD7866A4-04BA-47F0-905F-B2359118F5B2}) + ({ADD974E2-994C-4998-864E-4B54D8AD5F00}).6 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({ADD974E2-994C-4998-864E-4B54D8AD5F00}).7 = ({2EAB18A1-8187-4C79-9947-A671F9C007D9}) + ({ADD974E2-994C-4998-864E-4B54D8AD5F00}).8 = ({B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE}) + ({2EAB18A1-8187-4C79-9947-A671F9C007D9}).3 = ({BD7866A4-04BA-47F0-905F-B2359118F5B2}) + ({2EAB18A1-8187-4C79-9947-A671F9C007D9}).4 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({CBC22F47-9CF2-4748-B6C6-85CDAB267554}).4 = ({BD7866A4-04BA-47F0-905F-B2359118F5B2}) + ({CBC22F47-9CF2-4748-B6C6-85CDAB267554}).5 = ({4B0A7290-36C2-4C74-B9B4-07775B031CF2}) + ({0EF13F92-86F1-403D-882A-AA9DD4421B32}).3 = ({2EAB18A1-8187-4C79-9947-A671F9C007D9}) + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE}.Release|Any CPU.Build.0 = Release|Any CPU + {4B0A7290-36C2-4C74-B9B4-07775B031CF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B0A7290-36C2-4C74-B9B4-07775B031CF2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B0A7290-36C2-4C74-B9B4-07775B031CF2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B0A7290-36C2-4C74-B9B4-07775B031CF2}.Release|Any CPU.Build.0 = Release|Any CPU + {A6463B2D-0956-4680-9D03-082199779C66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6463B2D-0956-4680-9D03-082199779C66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6463B2D-0956-4680-9D03-082199779C66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6463B2D-0956-4680-9D03-082199779C66}.Release|Any CPU.Build.0 = Release|Any CPU + {98EC7DD5-BAB2-4678-AEA1-7C2B27B27BC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {98EC7DD5-BAB2-4678-AEA1-7C2B27B27BC9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {98EC7DD5-BAB2-4678-AEA1-7C2B27B27BC9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {98EC7DD5-BAB2-4678-AEA1-7C2B27B27BC9}.Release|Any CPU.Build.0 = Release|Any CPU + {76C00C0A-1AEF-49C9-8E4E-19A529B364E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {76C00C0A-1AEF-49C9-8E4E-19A529B364E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {76C00C0A-1AEF-49C9-8E4E-19A529B364E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {76C00C0A-1AEF-49C9-8E4E-19A529B364E8}.Release|Any CPU.Build.0 = Release|Any CPU + {55969A66-0E92-4F76-BFF6-2256C6A5CAF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55969A66-0E92-4F76-BFF6-2256C6A5CAF7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55969A66-0E92-4F76-BFF6-2256C6A5CAF7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55969A66-0E92-4F76-BFF6-2256C6A5CAF7}.Release|Any CPU.Build.0 = Release|Any CPU + {BD7866A4-04BA-47F0-905F-B2359118F5B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD7866A4-04BA-47F0-905F-B2359118F5B2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD7866A4-04BA-47F0-905F-B2359118F5B2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD7866A4-04BA-47F0-905F-B2359118F5B2}.Release|Any CPU.Build.0 = Release|Any CPU + {0CE4ED02-8BB2-439C-8225-E42F2D661D44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CE4ED02-8BB2-439C-8225-E42F2D661D44}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CE4ED02-8BB2-439C-8225-E42F2D661D44}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CE4ED02-8BB2-439C-8225-E42F2D661D44}.Release|Any CPU.Build.0 = Release|Any CPU + {F23A90E8-FDED-4D8C-A1B9-2ABE0A8C8EB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F23A90E8-FDED-4D8C-A1B9-2ABE0A8C8EB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F23A90E8-FDED-4D8C-A1B9-2ABE0A8C8EB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F23A90E8-FDED-4D8C-A1B9-2ABE0A8C8EB2}.Release|Any CPU.Build.0 = Release|Any CPU + {E168B13F-8D18-43E7-8546-C0EC1899579F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E168B13F-8D18-43E7-8546-C0EC1899579F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E168B13F-8D18-43E7-8546-C0EC1899579F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E168B13F-8D18-43E7-8546-C0EC1899579F}.Release|Any CPU.Build.0 = Release|Any CPU + {8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1}.Release|Any CPU.Build.0 = Release|Any CPU + {ADD974E2-994C-4998-864E-4B54D8AD5F00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADD974E2-994C-4998-864E-4B54D8AD5F00}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADD974E2-994C-4998-864E-4B54D8AD5F00}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADD974E2-994C-4998-864E-4B54D8AD5F00}.Release|Any CPU.Build.0 = Release|Any CPU + {2EAB18A1-8187-4C79-9947-A671F9C007D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2EAB18A1-8187-4C79-9947-A671F9C007D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2EAB18A1-8187-4C79-9947-A671F9C007D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2EAB18A1-8187-4C79-9947-A671F9C007D9}.Release|Any CPU.Build.0 = Release|Any CPU + {CBC22F47-9CF2-4748-B6C6-85CDAB267554}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBC22F47-9CF2-4748-B6C6-85CDAB267554}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBC22F47-9CF2-4748-B6C6-85CDAB267554}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBC22F47-9CF2-4748-B6C6-85CDAB267554}.Release|Any CPU.Build.0 = Release|Any CPU + {0EF13F92-86F1-403D-882A-AA9DD4421B32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0EF13F92-86F1-403D-882A-AA9DD4421B32}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0EF13F92-86F1-403D-882A-AA9DD4421B32}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0EF13F92-86F1-403D-882A-AA9DD4421B32}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection EndGlobal diff --git a/OpenSim/OpenSim.csproj b/OpenSim/OpenSim.csproj index bf575159d3..8e0d2638e3 100644 --- a/OpenSim/OpenSim.csproj +++ b/OpenSim/OpenSim.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {5304CCD5-4902-4C6B-ADDE-2181B2F42FD6} + {8B0B16BC-D9D0-4200-8FEF-6B12AA896EC1} Debug AnyCPU @@ -82,25 +82,25 @@ OpenSim.Framework - {90D4F7AF-D75E-4DE8-A0E1-70CC242B31A1} + {BD7866A4-04BA-47F0-905F-B2359118F5B2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False OpenSim.Framework.Console - {7AED7536-7D6B-4E28-8016-B5A554C663B4} + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False OpenSim.Physics.Manager - {0AAA0EEB-1F2C-4B4B-9BFA-7C3E45BCD348} + {2EAB18A1-8187-4C79-9947-A671F9C007D9} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False OpenSim.RegionServer - {4171D545-81F5-4C64-AD29-6D7414C38181} + {ADD974E2-994C-4998-864E-4B54D8AD5F00} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} False diff --git a/OpenSim/OpenSim.exe.build b/OpenSim/OpenSim.exe.build index 7d69d90e1e..613f5275a2 100644 --- a/OpenSim/OpenSim.exe.build +++ b/OpenSim/OpenSim.exe.build @@ -23,10 +23,10 @@ - - - - + + + + diff --git a/OpenSim/RegionServer.cs b/OpenSim/RegionServer.cs index 3612d49a70..a0037b18c0 100644 --- a/OpenSim/RegionServer.cs +++ b/OpenSim/RegionServer.cs @@ -7,7 +7,7 @@ using OpenSim.Framework.Console; namespace OpenSim { public class RegionServer : OpenSimMain - { + { [STAThread] public static void Main(string[] args) { @@ -63,14 +63,14 @@ namespace OpenSim OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Starting in Grid mode"); } - if (sim.loginserver && sim.sandbox) - { - LoginServer loginServer = new LoginServer(OpenSimRoot.Instance.GridServers.GridServer); - loginServer.Startup(); - } - OpenSimRoot.Instance.StartUp(); + if (sim.loginserver && sim.sandbox) + { + LoginServer loginServer = new LoginServer(OpenSimRoot.Instance.GridServers.GridServer, OpenSimRoot.Instance.Cfg.IPListenAddr, OpenSimRoot.Instance.Cfg.IPListenPort); + loginServer.Startup(); + } + while (true) { OpenSim.Framework.Console.MainConsole.Instance.MainConsolePrompt(); diff --git a/Prebuild/Prebuild.sln b/Prebuild/Prebuild.sln index 55052249dd..6dcce98ec1 100644 --- a/Prebuild/Prebuild.sln +++ b/Prebuild/Prebuild.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prebuild", "src\Prebuild.csproj", "{912F8E52-C5A0-4912-A702-D6DC3F1B4B54}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prebuild", "src\Prebuild.csproj", "{1C3A6B91-4AE9-440A-B0E0-E847681BF6D0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -8,10 +8,10 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {912F8E52-C5A0-4912-A702-D6DC3F1B4B54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {912F8E52-C5A0-4912-A702-D6DC3F1B4B54}.Debug|Any CPU.Build.0 = Debug|Any CPU - {912F8E52-C5A0-4912-A702-D6DC3F1B4B54}.Release|Any CPU.ActiveCfg = Release|Any CPU - {912F8E52-C5A0-4912-A702-D6DC3F1B4B54}.Release|Any CPU.Build.0 = Release|Any CPU + {1C3A6B91-4AE9-440A-B0E0-E847681BF6D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C3A6B91-4AE9-440A-B0E0-E847681BF6D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C3A6B91-4AE9-440A-B0E0-E847681BF6D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C3A6B91-4AE9-440A-B0E0-E847681BF6D0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Prebuild/src/Core/Targets/NAntTarget.cs b/Prebuild/src/Core/Targets/NAntTarget.cs index bd366dccfb..0f0deb2462 100644 --- a/Prebuild/src/Core/Targets/NAntTarget.cs +++ b/Prebuild/src/Core/Targets/NAntTarget.cs @@ -77,16 +77,16 @@ namespace Prebuild.Core.Targets return tmpPath; } - private static string BuildReference(SolutionNode solution, ReferenceNode refr) + private static string BuildReference(SolutionNode solution, ProjectNode currentProject, ReferenceNode refr) { string ret = ""; if(solution.ProjectsTable.ContainsKey(refr.Name)) { - ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; - string fileRef = FindFileReference(refr.Name, project); - string finalPath = Helper.NormalizePath(Helper.MakeFilePath(project.FullPath + "/${build.dir}/", refr.Name, "dll"), '/'); - ret += finalPath; - return ret; + ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; + + string finalPath = Helper.NormalizePath(((ReferencePathNode)currentProject.ReferencePaths[0]).Path + refr.Name + ".dll", '/'); + + return finalPath; } else { @@ -126,12 +126,11 @@ namespace Prebuild.Core.Targets string ret = ""; if(solution.ProjectsTable.ContainsKey(refr.Name)) { - ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; - string fileRef = FindFileReference(refr.Name, project); - string finalPath = Helper.NormalizePath(Helper.MakeReferencePath(project.FullPath + "/${build.dir}/"), '/'); - ret += finalPath; - return ret; - } + ProjectNode project = (ProjectNode)solution.ProjectsTable[refr.Name]; + string finalPath = Helper.NormalizePath(((ReferencePathNode)project.ReferencePaths[0]).Path, '/'); + + return finalPath; + } else { ProjectNode project = (ProjectNode)refr.Parent; @@ -226,7 +225,7 @@ namespace Prebuild.Core.Targets { if (refr.LocalCopy) { - ss.WriteLine(" ", '/')); + ss.WriteLine(" ", '/')); } } ss.WriteLine(" "); @@ -316,7 +315,8 @@ namespace Prebuild.Core.Targets ss.WriteLine(" "); foreach(ReferenceNode refr in project.References) { - ss.WriteLine(" ", '/')); + string path = Helper.NormalizePath(Helper.MakePathRelativeTo(project.FullPath, BuildReference(solution, project, refr)), '/'); + ss.WriteLine(" " ); } ss.WriteLine(" "); diff --git a/Prebuild/src/Prebuild.csproj b/Prebuild/src/Prebuild.csproj index eddfe74d93..34daca99f4 100644 --- a/Prebuild/src/Prebuild.csproj +++ b/Prebuild/src/Prebuild.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {912F8E52-C5A0-4912-A702-D6DC3F1B4B54} + {1C3A6B91-4AE9-440A-B0E0-E847681BF6D0} Debug AnyCPU App.ico diff --git a/Servers/BaseHttpServer.cs b/Servers/BaseHttpServer.cs new file mode 100644 index 0000000000..28849dca93 --- /dev/null +++ b/Servers/BaseHttpServer.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OpenSim.Servers +{ + public class BaseHttpServer + { + } +} diff --git a/Servers/CapsHttpServer.cs b/Servers/CapsHttpServer.cs deleted file mode 100644 index 1e62c8183e..0000000000 --- a/Servers/CapsHttpServer.cs +++ /dev/null @@ -1,332 +0,0 @@ -/* -Copyright (c) OpenSimCAPS project, http://osgrid.org/ - - -* All rights reserved. -* -* 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 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 ``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 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.Text; -using Nwc.XmlRpc; -using System.Threading; -using System.Text.RegularExpressions; -using System.Net; -using System.IO; -using System.Collections; -using System.Collections.Generic; -using libsecondlife; -using OpenSim.Framework.Console; -using OpenSim.Framework.Interfaces; - -namespace OpenSim.Servers -{ - // Dummy HTTP server, does nothing useful for now - - public class CapsHttpServer - { - public Thread HTTPD; - public HttpListener Listener; - private string AdminPage; - private string NewAccountForm; - private string LoginForm; - private string passWord = "Admin"; - - public CapsHttpServer() - { - OpenSim.Framework.Console.MainConsole.Instance.WriteLine("Starting up HTTP Server"); - HTTPD = new Thread(new ThreadStart(StartHTTP)); - HTTPD.Start(); - LoadAdminPage(); - } - - public void StartHTTP() - { - try - { - OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimHttp.cs:StartHTTP() - Spawned main thread OK"); - Listener = new HttpListener(); - - Listener.Prefixes.Add("http://+:" + OpenSimRoot.Instance.Cfg.IPListenPort + "/"); - Listener.Start(); - - HttpListenerContext context; - while (true) - { - context = Listener.GetContext(); - ThreadPool.QueueUserWorkItem(new WaitCallback(HandleRequest), context); - } - } - catch (Exception e) - { - OpenSim.Framework.Console.MainConsole.Instance.WriteLine(e.Message); - } - } - - private string ParseXMLRPC(string requestBody) - { - try - { - XmlRpcRequest request = (XmlRpcRequest)(new XmlRpcRequestDeserializer()).Deserialize(requestBody); - - Hashtable requestData = (Hashtable)request.Params[0]; - switch (request.MethodName) - { - case "expect_user": - AgentCircuitData agent_data = new AgentCircuitData(); - agent_data.SessionID = new LLUUID((string)requestData["session_id"]); - agent_data.SecureSessionID = new LLUUID((string)requestData["secure_session_id"]); - agent_data.firstname = (string)requestData["firstname"]; - agent_data.lastname = (string)requestData["lastname"]; - agent_data.AgentID = new LLUUID((string)requestData["agent_id"]); - agent_data.circuitcode = Convert.ToUInt32(requestData["circuit_code"]); - if (OpenSimRoot.Instance.GridServers.GridServer.GetName() == "Remote") - { - ((RemoteGridBase)OpenSimRoot.Instance.GridServers.GridServer).agentcircuits.Add((uint)agent_data.circuitcode, agent_data); - } - return ""; - break; - } - } - catch (Exception e) - { - Console.WriteLine(e.ToString()); - } - return ""; - } - - private string ParseREST(string requestBody, string requestURL, string requestMethod) - { - string responseString = ""; - try - { - switch (requestURL) - { - case "/Admin/Accounts": - if (requestMethod == "GET") - { - responseString = "

Account management

"; - responseString += "
"; - responseString += "

Create New Account

"; - responseString += NewAccountForm; - } - break; - case "/Admin/Clients": - if (requestMethod == "GET") - { - responseString = "

Listing connected Clients

"; - OpenSim.world.Avatar TempAv; - foreach (libsecondlife.LLUUID UUID in OpenSimRoot.Instance.LocalWorld.Entities.Keys) - { - if (OpenSimRoot.Instance.LocalWorld.Entities[UUID].ToString() == "OpenSim.world.Avatar") - { - TempAv = (OpenSim.world.Avatar)OpenSimRoot.Instance.LocalWorld.Entities[UUID]; - responseString += "

"; - responseString += String.Format("{0,-16}{1,-16}{2,-25}{3,-25}{4,-16},{5,-16}", TempAv.firstname, TempAv.lastname, UUID, TempAv.ControllingClient.SessionID, TempAv.ControllingClient.CircuitCode, TempAv.ControllingClient.userEP.ToString()); - responseString += "

"; - } - } - } - break; - case "/Admin/NewAccount": - if (requestMethod == "POST") - { - string[] comp = new string[10]; - string[] passw = new string[3]; - string delimStr = "&"; - char[] delimiter = delimStr.ToCharArray(); - string delimStr2 = "="; - char[] delimiter2 = delimStr2.ToCharArray(); - - //Console.WriteLine(requestBody); - comp = requestBody.Split(delimiter); - passw = comp[3].Split(delimiter2); - if (passw[1] == passWord) - { - responseString = "

New Account created

"; - } - else - { - responseString = "

Admin password is incorrect, please login with the correct password

"; - responseString += "

" + LoginForm; - } - } - break; - case "/Admin/Login": - if (requestMethod == "POST") - { - // Console.WriteLine(requestBody); - if (requestBody == passWord) - { - responseString = "

Login Successful

"; - } - else - { - responseString = "

Password Error

"; - responseString += "

Please Login with the correct password

"; - responseString += "

" + LoginForm; - } - } - break; - case "/Admin/Welcome": - if (requestMethod == "GET") - { - responseString = "Welcome to the OpenSim Admin Page"; - responseString += "


" + LoginForm; - - } - break; - } - } - catch (Exception e) - { - Console.WriteLine(e.ToString()); - } - - return responseString; - } - - private string ParseLLSDXML(string requestBody) - { - // dummy function for now - IMPLEMENT ME! - return ""; - } - - public void HandleRequest(Object stateinfo) - { - // Console.WriteLine("new http incoming"); - HttpListenerContext context = (HttpListenerContext)stateinfo; - - HttpListenerRequest request = context.Request; - HttpListenerResponse response = context.Response; - - response.KeepAlive = false; - response.SendChunked = false; - - System.IO.Stream body = request.InputStream; - System.Text.Encoding encoding = System.Text.Encoding.UTF8; - System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding); - - string requestBody = reader.ReadToEnd(); - body.Close(); - reader.Close(); - - //Console.WriteLine(request.HttpMethod + " " + request.RawUrl + " Http/" + request.ProtocolVersion.ToString() + " content type: " + request.ContentType); - //Console.WriteLine(requestBody); - - string responseString = ""; - switch (request.ContentType) - { - case "text/xml": - // must be XML-RPC, so pass to the XML-RPC parser - - responseString = ParseXMLRPC(requestBody); - response.AddHeader("Content-type", "text/xml"); - break; - - case "application/xml": - // probably LLSD we hope, otherwise it should be ignored by the parser - responseString = ParseLLSDXML(requestBody); - response.AddHeader("Content-type", "application/xml"); - break; - - case "application/x-www-form-urlencoded": - // a form data POST so send to the REST parser - responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); - response.AddHeader("Content-type", "text/html"); - break; - - case null: - if ((request.HttpMethod == "GET") && (request.RawUrl == "/Admin")) - { - responseString = AdminPage; - response.AddHeader("Content-type", "text/html"); - } - else - { - // must be REST or invalid crap, so pass to the REST parser - responseString = ParseREST(requestBody, request.RawUrl, request.HttpMethod); - response.AddHeader("Content-type", "text/html"); - } - break; - - } - - byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString); - System.IO.Stream output = response.OutputStream; - response.SendChunked = false; - response.ContentLength64 = buffer.Length; - output.Write(buffer, 0, buffer.Length); - output.Close(); - } - - private void LoadAdminPage() - { - try - { - StreamReader SR; - string lines; - AdminPage = ""; - NewAccountForm = ""; - LoginForm = ""; - SR = File.OpenText("testadmin.htm"); - - while (!SR.EndOfStream) - { - lines = SR.ReadLine(); - AdminPage += lines + "\n"; - - } - SR.Close(); - - SR = File.OpenText("newaccountform.htm"); - - while (!SR.EndOfStream) - { - lines = SR.ReadLine(); - NewAccountForm += lines + "\n"; - - } - SR.Close(); - - SR = File.OpenText("login.htm"); - - while (!SR.EndOfStream) - { - lines = SR.ReadLine(); - LoginForm += lines + "\n"; - - } - SR.Close(); - } - catch (Exception e) - { - Console.WriteLine(e.ToString()); - } - - } - } - - -} diff --git a/Servers/OpenSim.Servers.csproj b/Servers/OpenSim.Servers.csproj index 9c66943f4d..460f7e2341 100644 --- a/Servers/OpenSim.Servers.csproj +++ b/Servers/OpenSim.Servers.csproj @@ -3,7 +3,7 @@ Local 8.0.50727 2.0 - {A8E12EC9-CB2F-4D25-AFD0-626BF2162F5D} + {B9D6A5F0-3BD2-4161-8AF1-90C03295D4EE} Debug AnyCPU @@ -66,23 +66,30 @@ System.Xml.dll False - - ..\bin\OpenSim.Framework.dll - False - - - ..\bin\OpenSim.Framework.Console.dll - False - ..\bin\libsecondlife.dll False
+ + OpenSim.Framework + {BD7866A4-04BA-47F0-905F-B2359118F5B2} + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + False + + + OpenSim.Framework.Console + {4B0A7290-36C2-4C74-B9B4-07775B031CF2} + {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + False + - + + Code + + Code diff --git a/Servers/OpenSim.Servers.dll.build b/Servers/OpenSim.Servers.dll.build index 1321629d56..f3845fb166 100644 --- a/Servers/OpenSim.Servers.dll.build +++ b/Servers/OpenSim.Servers.dll.build @@ -11,7 +11,8 @@ - + + diff --git a/bin/Prebuild.exe b/bin/Prebuild.exe index a473e449a6b1045a1b80656ae04a93eda055d219..4d798b36e48475a8a5b59ee94f2aa5750f5eea56 100644 GIT binary patch literal 176128 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 LswnXPCk6f=t{9ZU literal 176128 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%0D`)bq@0$j(WggU~ z?m?cq>pQ4HbBL{6LFpqHG^-qt+4G;4?gh;l08{AXM>9M+q5i=eDM1cfFaigt;Ja34ek_hUk$RFAvKjKXDvakd#PIMEmeAg zwD`3)R?s}@MoR=i^8+pHbX{AbgZ|~9ey@cyp#JM72esbKPB;VVQ(E$|<7-9zSW9mD zZwGah7JgU@=icJrWGH!-mi&_zb_Tnk=?r%IJ|Ns9u6B31>Knkmpn3DH7}U`ZABX1n z<=bktu4P^GVW>Q^%W++A*EZu1)B`gp20#um-S7B+r6Rp<`!80c!X{=b=GnJf^leaV zLN(AF2V~|*NjC~WWb1>%w_84YS)fFkjIYEer(m!=h;4tNkqr|)PdHmDo1Vj!@ z)^<*SQyMgYTs7df&f0w*iQZp5CpZXR!v8TZ?sJ0Q(6H&}1g`t7v8ABhjY}~I+q%EE zKTRp;&dCnJyfPX*k_wS&zDKCU9&;*vJw{(I;;XDD8e;^?!C6Gza@`p0MX=oD3&i-g?Ht!Nqj>!s7AJ_!kGh!1O+|4*UV?}5Ye?;IA9ML* zkc0YVococg-kOIwjZ2y{aprpqYh@)kLa{t423gBlL|y)m$u!N2sXT3UBQFKa0+;m5 zzQ^@5+QHW~%Yz%KZ=WHT5LDN}*h|H^D%n61v5)Rhls5&&>O||bDZp#uwzZaZi(ufASb8(jAWI*8(>*FZC*#E zCQzOkn4CqW&rn`8kJNym!DybfJPMj8+-v0xnon!tMpGU5jav8}gsbh+bKQcbe;TFD zv1=PN2Q%bF4KkM@b2SKlEytE!TP-}m4!fmRvNa1T=@MMfyor!`GbU(0iLk!d37XBP zTXHiU-#NwfjZWHo2ui0nmA27IbKL4w+JO5Vwja{M8xdB^vuiF$qj&5BcA9-zpVf$W zJ890cPL);Zq!mAyM)OnvRC$impj9^~EzLugezI0N$12o!9Mtv?r4`W|09C{r>1mst zv>p$qp4VEr-u1~8hD&9F}1UP7(4zjTPN>aB_ESt_o z)UlF+FSZNky7ACJHOQB%@B@hOTRV5qbi|n^w%-m$Y^tKAAJRDEmMV=4d<87|Q$B?X z!0}N%XobpSJ`WGlgUKH>J&)*BKa*ksUd>w47%f2uGV8Ac4dc(*G#+#X7b)H5|3ox0 zNVI6C)tor4kX5&(`r|<p^IGxg7u(fS(9>KA!X`Y!@&JQ7%MEYi3@~ z@;+YH9D4x@Q;$vCRu;FXc?3-mM|1_HK>NsI#}{IwLy|{QsG?dL5`wALQ{QaF4dF!pi`W z3hSo12L^O93)tFGHt^_VMBT3h68S#hk3j+@yOvrrls0xb z-DGYFZ|Y;PO6zpgwsbP76gnyBnV-?u;m?BdQd!Ei6lU`VSyC?Pky9^O5Ur;ik>K+W zBur)(Qx%`g6B3*K&tqw}9SQHrq<_Hzin+oo2 zmC}VbpICC)Bv*4slUM2k3paP{g<2({6hY~7*})^*BN4U5t0rsf5PS}weUR$!^_C-LlFWDCoRv+q&PVdOE>v#yZJN_o%53R!=8guA9m+$b5 zBcj7cAr6CQJe&sq9r2?9$CWoO{E3Kf1pI2B8~z>Q<$zz7HfDYRI83H7H4R<`*iT6N z0dQ-qqcgHHz%h4pk9E!&8Gc_(-7ykU7rgQ|GXE5hpMNMzZVbz-M_!H2PW1hMM zMRDM=EI!y9!4RLH_@~jq!~lxnOg+)E+Cnk-WQ#7yN1B{zx+KX zpV19=0_#8URX}{XUS6SHOB%H30RDI^iv9r%`NoetXY%WpeFX9Xd?kroI?Y8^Ts*P~ zwT7~v01a~gR#R(K{D1D^kqo@h>pd6w&HktY&-!pDh^k6^X7xaqiD=iFWT5W6JtW_I z*<(aKf8Q^X`F;@}hIRHegwAOfh{*dzw0j(Izle7I2-cxA2UqutjG|_QTZiAdU*vJx zYKf7lx|q6M_4`F`KpyKgoEHg?rw$>rhPU=}a1fg#r@=n;)_%6y1o83qRtyt{THo5w zw%*#$PO7)|vyoWa_taxUTVV zUD2^zBhJ@#R6B=Kr1`oImFOHqsYJf6LnS(gaw_rY9?WMK@M$_HZz_?m>rgqJBS)3U z*LA2w=Uh=G{<-Tq6cy*BQBj$MqemaM0gFgG6l^(Qd~1&SF%+_$+FdXq^Ct+6yS;Hk#{fPv4Nj+Zn_z$HVcgQ!Qda@DG8^}U0&cBoXiYH| zxP56(z?6`5XzJ0>rOBBlCQf%PTR(-;f@fj0Ku1jeZ|4t5#p5K zEFxTM8qa)dO=I5?!g-vb*X`?0+rT-O!obyay@3w zD}WMt{3;SrNb~)jL!ff{uF?0m3@3wbw_iq&gRse8ZWrEkbX+HkJ;VP!|J`R$m;Y=3 z-98b+z>q_88IqOmze{Vxn*Db*Y)rcj+JBepT+>`4g7K_58q3;IKNn%__QIROJ|MhU zOTHIjPvRIY^&^HHr$LMbv@5`;DLHvL>1T3s5D%Iqz_JSMsD*oL;hUHe6w~Hqk(L^K zmCAwk+Nm7?v1s0+g;#0eCa*a-gYB><@ekBMjs4ULbZ|AzPDW%SBAH!mwd4HU5FNN- zam@2@avhpS>Ut8)`e2=c4UR zEvK{Jk(LuGqMM zVT+xT9q;XGXyY}sYL47%kf_vD?+1PV;7x%8^n)rpbI@%2woOQP(9SKvT+lXVy#1LC z*$%X^gXX;mW4Xg;^-8zaq=Vef$Cp6ytxi7(Q_)Y+?<@*5;K>tx_#79#1Jde9zm_3p zG|*~rDK?TN2F=5kq6X^M=-{@CnA(^RuzR!SX&5x;>Z#Uxjhboq=O9%%N8^qNL>@5oxE3Y{*R(0tdv|{Rk>|65?m#xfV}-|DqG(djM~bHGs2!;pN|kYJnc>_8*AG?cXDj^C7%&n`4-T zHrOjSv+1=Z*|#4+cN~5c`~i5SDt#aKXB$R;qOBywd#BH%ZPnY0&}evM91p#y$@g)9 z+s{bSN!w2){~Fp)wO3fCwx3Ex*p7V4>jZ9*C!tIT!`cQT5_EUS0sJDJ5}bVx*M4dS zzeq<#_$br8pX&HU9_4fnx2M|ol1-kvTMnR5u|MGpsbSlTxBnww$j0wGR-p!uLaj+k zeFx>DrF$UWXcvG{+}UtV_dui>gK~y+X2mXTI0z5K?RHss2kZl@V)|}dERxaD(C>0I z^lOfW0X6jq)Z%EU(wu1t2Grpwz7|JAzjQPV9@x>)kJB7@i2Rov4e>^bCZjnu$>;$7 zg!SN0SWjEKQsd=+SZjsV7Wq;+1YUUX$mABwYd6cEuvWKNU1LfQ&Y#c`h|9UR%`jBz z0r07&&bkk8G}#dTlw)WLKz9wX-m2Gl$o-M$2E^{#1Gzuy%>hC`*~RGzxbgfWiw!sY zU|bs=YiA9Jx^E-x+hZrtH7;TI!|>v-0|qaByt)zbqk&7mL8!y`Bfb&vwQ1w(Nj~Yr z_$r<{eiOu(0iS#vb@)jbn~DG*f~OA0I~K+Q;L>jkIOC+tx6v5}oPGWbzKvve|3`cq zo$}v7Q)#}9Jd*ye`ZjjvaTJ>i+-c}i0rDk3fN!J2zcY;fRo_OUWsUu4t{M*zIx(XM zd4NDfNjLtYZ{xx8gy|k8A^#yy?z4n;%alLjcK9}SKqPTA72+{ZrSP#bd?AHPWcXqV zmvT6sIDww*2MJF?_JizF4bqh%>3)zyLB_hj(JK9rDJmwkv;I}}FPw;HwJpd%~06L|d1R&7|&?%+}Kq>%0yPV?s0FoF1q=!{FD-D%h&ng?< zw|$^N*yXU(Iw7r@Tt`sd=}nHXtTG1&$*NjmD$@#6Q8LWLCfUbK-inuz{;osPx>k5IG2ZEFw45T)g>mqxpl;4K z1xs9G5Y>4sL8UM(J9#m~aYp3Op-54zosZwKxP;P`FFpNY4=sC_+r87LP6t%NW;>zm za_}DZ6xZ=sw@RaS=v+)91lQ0&$s}+UkHmAbk;345SS!$m5Z<(=M~)HCO`d0Xe4*55 zh|*7ws?8-T4PrVY>I?OeS^C7XJs}zF9q1Fy4$8OfTg2dliurqLGzhe$-`2{7v6A#! zlRREuJb^PLe>hu5_}#8O#@%veIe94N z0yI^{FR6M1J~n^ZffP1E{3+V~LoWwH1wtreRb`FQk5m?-&Z9sKY-b~$jQA6)5j6^6 z^~vn>90!#(B6SS^nTV24%kV7z{crSpb?IZ+s{#==S~(@B00TCf?qwy_O{~EegrhXO z^lcKLOd>UwmeEdblWUkK=h82yl|(>Crb_H1TjC`*qKNAwqz!GGp9bkCy)&s#z$PRw zG=lhjblDZ6KG_Wt5C{}3bqYT$YuvV8NCiOxoLapTzUe!m>hgC-aO)BuAEJAhss;_% zQgM$(C+vlbv?YrT`lP-<0kLdAQfn!MGlQtVZ8(}Odzw`Mavkc&o$Lj@`AUp%&}>4Q zKuqQs1+iesT2`iB>AFQLyFouLgThM@?54CWcpg(aFo=`5} z5*hZPt$&==gVAR z(<8hpq-c7ed{%!WqZ{UnYh-Vf;}F$JjzhJVi4j4S8BVtF)Xhq)1GUt8d?BSCtjdJ5 zsKY!+d?bAyE`ns1UOseKSpzEH%fCaf$&^pg!phF0p0Ib1pySFpnBU7{3wv44K8`R8 zK&0#0NL{3DLmRLJWF4s={@F5|{8>f}`LA%=UGk_9sE$V=oyS3sG{a#(@qG@ulH^;C zJ+k?b2E7Y-5*r{X9*4b#iTtox=-0&|Rdw0Q81y5_J|1s8bt}o$UmWpU6CMqrM2&t@ zTmzwAs#ssD1G1%HpXld4q>*Hjet&$rCLb7fB_A6N{5NsNnbemc;Z1FH6Y@optvy;& z>MNv&6WA5UD~8ag+w_iq0e8C_!dma=tEM%e5R|b9bRysd%_KjbxGc@640;mRP@eT99J!xi7&$p~%48Vu zCrsR~1os9lz>F;XYu1dO&5S1jA&Lq70c3QUvv539nap-Q>+|cDjw(+6@$(y z6)Qep4P)+ne%`w?clJ}yjWvf%dHv3b_s;ly&8lOZ)W04|4ZpVYzfyz5?{7^ITkbto ztQ#2?qfT!s-dMbJphdMx?DpP%%iR02^X?Qz{bz))&TZndD{fj>xp75P3+JyshYlZc zYWdI$#qO6!i!bj!Rjf5bqWtVb#hY)x+s~r8`MYmgH9z8^D&HyFMWdm=iH7}miF(oT z;)4$t)4={8eI`tv(rx5ry~Xb5QexATu3~j6C`O&#RJ^rhDGeC>S-bK3His0=5qbTE zI5Z_hv#Wm;p*pvU4?cR=#`!_eeK3FibJK0Ncf0=b3&qZ-uM+ETJ65c|HY`S-lMrvc z_mN%y)oV8w6(*k%(SE;+rq>8@$dJ7vui$p^(8CXrA?44$s;a+K{;d-xb{KQ@#bVdf zmy6Xm6^YNxJW+N*iCFaRC*3XDcZ_}fkY-2B716%?MXT%n5bbaLRTMOvCMMrGrKg3n zr|J*yzAs*Hzxv|9NTX*^5#^Q{BYXINy&lX*FK67oCHy`=e=uubn7dvNP zEY{snEIv2u3A4xX;*|$(nz-qai@I#O@4PNc@4oiZM#ayISl{18yPNlmlcwz#`OO~? zQ|`LkF8}8(pJi1(G-%-mgZyH}m3iXhE5rE9;lJfqMg;v)d^!F;!QZm0a>S=s`Nhm0 zkayox#P^R~EWQ}mO02y$CWf7Lw0Q75zxZ@WP^=yr5>K6pSI;BdSIs12! z--^n=%Pybfuy*qKFMeh=7T+(qU+h>sU3~w}{bI|~>Ehe>?-v{2yH9-m?lk;O6`S6i zEH=%*P3%}YMZ7-iMp4%PG_mWk0phcNwiIiJ<%yB!ogiMmccj?;_MKwyn|F$j9=<`; zYkI%P>s=*|L;0sa{f8*XQ2x3*&w1&yiq_(ntt-XP->(%v>|7^y>{%za?_Dpx+lS}Q z&+)fX?B4dF*zxsyV$Tnsir1DrC$8;(rr7)V0P%Unp<->St{8D%NAcFYM}_!)g%CTI ziBA_jC*rN9iu&-QD!CKo&)F~HE#2~``mekD{Q0ZOQT~=S;`{GD7h6!?rd?~q)?HtS z&3iV8ExXoneA~7a;=Aq3#ID_+!p_VW!v~xtwmopRSb1Gzv0+3bVV-}ocoREaa5`a{GHn<`#>?gdx*>+kOV(yB2DvE%#C zQN}v4COlO{_BO zipuMY#pvGM#1m6)7C(Ocg!sMkHSyfEdqhsV=fqLdh3GIth)y$wh%}oj-g|4&Ad>qZ z;z#cLR{1+o{x+1e74_cy%Vx3tm#t#QZ{Le;zik&=f88Q>0=5Ub@za_&#JjJe{Rf?m z@=p<;q(b7WG3~{u3(gS>9-1hA-LypP+xwY#^QD(WcIVgHL&Dqb1yrbrbaNhW; zca|=(?H}<$<$s3yQ~6u=Q2F1AEhuXj%HI9kZm~`55hF;H|o zrit2-q+w2XSHq`BQa;NQAUNHn^zA6Uw>nnQoI8S`FZn@aI z?sf6oSMQ0HZ_XAslwBh3zH^fJcGDIy@%CHAh|^o_`{t|9F4Q?#5B*<_{zrBE;j0hC z{>r7|mvu|TuGQ~|-Cuq(XXmCbb04{X+E=5@GEp(=dNFbGonODb^xbnGeRRg?iW~kZ z<}G+d^y}YWO#b)HV)vTG;*alFibXFzD#}NcE&2B?w|y~l)}vy{(k0@t#~&B{iO*ga zh*>jdPTIR?ANH=P|Mz(5i!rUmuUl4$U%mwon^%avTULsnHm?$UzFzUmvrj#~dBH0S z2F{y1_q>X0F55Zi{4>N^XLPH&_|i+Z4ZY%0aocUTh^vRC#5rf4CLWwLUhLbnO5Aqq zP4BPWu))7`$IeHVzOzKkd+s^$;d>v5ufP3f)8kLhy8P_Z&)N6J8?R$wX&7HX{+~ns zzij6=Ln$wPFs+IQy(K#N!W66Z7Z2`1t<)KYD-pd2gHL%a(op{0lFNx8HtStXci} z4_|%rP5WDJ8-Md1lO{b&G}qkI{pHoD|Lz^Iv#>E+_dy4L`9^&I#}=`0=>jqRzUgB5 z$IJGw_;|&-dGqFrC!csyj2k;v^zYqEj2JN-vRx|PUHYzAw{{(LY@8@L_E_=M6Hioq zyXjkOuwj?r?Em(?YsJ=| zz82fi*SG(=P3#kU9(#T1YnM-+bcdMz%roMVnKQ+bB}>L`*s!7F!w)_9{PiP8h--%p z6ANB_RV-MrK)n0zQn7sbaxwMZsp5{wlf}a`9{GOiefPb4?X}nL_~4}{#k_~_5R2Y? zU99@-^DWb+P5btxdGlBgsr;4b|64HDd<(m`ZU1($`}f^qZ`IzptG`+^@LxBMty=WP zo0YFGT-cxZU9sY059;*sbt6ZLTW`HpJPy5j_St8}{Q2|6TZ`WoD_4FhmO>s6Km4$m za?ibD{0-M*Jo-{R{oqvb)}pt>eN(53R4Vn+%9SevL~q^Q-RG11x1s#asQZpzzY}{= z{;ofEiXX&Y@#JIo{WR&{x4t#)-f7R?F?rJS!>%3n$)JG)xy(6p=7{_6zhBInHA_4) z;}LP!T~oxw3Ag`z+b#cIJm$LV7TqxRMlr5pq}UH#dicJ(#rWH%h%2rb`q8H=KW#!~ z(`WtN7tH%?Y)i-=wx4W1Y~2o&y>tKf;=9eO_UzgI<%KKW|1fXDEfY?d|NN6f7QXuY z#fw&a(B;FGpPcs6%dhl$a`uyVKJ>u-uigK^L$|#B&f6Efv-r&;wtVwt)~`S9YPjs( zH@{l|n^d)bhj{t!p<;5c<~yF8JO)cd=dgZA?X#~HpIsH% zv|)VvY%86ftEcpQaa~zm@$2(viJzYCDt>spv-s)Blg0jLPZPhra>2%5U+Fpfw*|dk z5U=-{`|B&c=KMDQy!U^YbE??)^eN)UXHFOUU+li;_g8w)`Tey%&+mVw=kveL?>=|` z{PXAiI`7=M`(HZy+u!D%Bla)2Kzw;?OR+Llu=$IziI86Y+Pf}zWyL@Pb9h61F%(by zeRehe=sCm?pW|<}dVY3=f%zX`_*;FY@&8fxCh&Dt)&BT8H*-2u+R~QN+q9)EwCTVM zEs!Q@8%dgyp%etmZE~BYO>)D%HyuzkWfByWDj*0dh|dufpE#i46XhXw0vw*AsPJ&$ z>C@-<9=<2`|NX9Y_C4p^dy}RNe*VAqlXcJ9!`f@Fz4qE`4`-i4KVo`3e;?03L>m3W zGt=|$he-cD;-L3kJU^bE_59CnX^xct@Aqu~*uQR;L*MA1aOgXk=@`%L@5#&z#lHjm zy9j68_tP`*$KUCPp5!0G`1c*8{jR19@+hs#W*>SSaZmJ5I`r5U@bi{)e{tx=KSj#_ zpJ%?>{ABvL|9gCA)uA6;KKszW?K}1r`kQ^|sVn9j`nNaM9D1U+j0x_4ljKU%T(w5A^K$(XH*-=fCjQz5n^u+uK}u?)T84 zNrw*oebVFjt0?@ds2Ijl|6%`PNK-G~@CvUCe^(EScjfR6!0*H#wkd|+^!AG3Hyw)5 z`LYNK#yxoY@5!YitIyfn-xuGVOlNvi18Ztl)~=|DCkMJx-Ms@nYifqF+n1eQ6F=wd z3Dv9jX3orX?MU_~;>o^be{vwZE|u)qa)?5>G};6Ucgy_q#N zJF?lqGnX&lvu983o|9@*>7M1QR;*aLd`nAnyHcu&XA|k3WOiesKbaX!bR~0Hx(5cg z)n-yd>8|8<RXHomxPNgNeAc^SYd@s>n3yCb9EWR(XBbADGr?N_LLN)oWs@>Sw5#QtsDc+ljC*ob{ zR3@`*urHB?IQ!#hfo0w4-rdQ8IE1-Or5VqrQho6~J9@izD3wHCUusV#-ksc?>`M(o zL69JxOk{fd_QiXW1IctEn?&x^&SY0Mo=V626T6b}?Y(`dJIVmMGnH0CO%08Uz{5ay zTp9BTQmR^HCf+;H)i*?iJ2SqyHv>hAw`YN;EIov~in)~*kdv0i+jk_=gAK;mQV4J$ zl|xv}#=3!QtuKqU?G5qf-mc_8CV8e(P|%j_?#*P=z1xPYd5~!+lLRAi(>djKTkk+3 zy^odY&n%7a>CNt7HTjzw%EtTAMYi{LsbVaRC(@8bGTq;s%_fagNCu6T?2c!5prN1{ zAVi6xnrN$m?p~G*u^?lAG7H|6u@mA^)-v(bcE=MsCDKBR;^|~I0bWTou`LBv=*sCN zG#IsAia4};A1X-#q4KnpxYjSq69m%Lm+0+JrfcIPu!15(GI6Y+qTNGX$ybXTHVQe7 z^hEN%9F37e3{@?gO!p@GGE_$sy0#Xx`SlGqcdmXNh#!FIp@^6^F@&ZixqWenF}^KH zr9cBh?FYJ3X($L{QAB^rG#}N@vV*WAb;q|O!o;3QZO`su!}^6gmB|byyQnju(MwHA zQ(MpjsW%zgUvj2-IyN-5$J<-ibzD%_))>e0rnc72=tm9lwHL-aHZ;cTIy*MBw#66K zwIg;>yl!Iy{w|C+ZrRk<*xnvTR8z~Q<|bqSg|@nl9ZikxOXE!&>zg|pnl`RqYOJm8 z?1*n{?T9xwwKR1gZAa@;rCyjf-nuT{(%4qN0i^2IHZ?bOT&RVvYwFm@0@tC$y7;EL zwvMLy&gQzd_@>UbO|9*XRt_uC(9~YvT-Vgn*iZ{TP;9($bK}O2c>9LB=H_sn);5Bl zy0y)XMijMbXliS$?;!iZQ$3^sR+?c9HZ|5a;Xwu0xTO*Gu4}t+DP>UKy0N|S{7xi9 zf_Ot+OWpd$_W0tE7>Y>%vaauJYiuERsCIkj+V+m7j?Rw8`1;n?hITCn#M>L&HaFEb zwx1PmZl%cA#XH*@Vbbe5>a=i>fpid!v}-%tn^aCs8#@}?+B!FNG_`JA65r5z0fYcP z>yVW#*br~ss11oWZf(2Jidv`gP?;}{U$CJOacJI+tX)T29R<_g(biPYX7rmz%kOAy z>j>2~zOiwAbJP09jrEP>sFhSMXlid<60d7(0(a}RFp#AlT~K#nycNoUN>SUuojr!M za;dgoylGv$u3x{Jp}llX zjT_Qxa>Fx5(ZRmt-j02PNe$C6JCnR@2ri5tqCt*MI=P)>QeDYRrY7FsJJ8zIHI#;@ z01PX~`9BBPa$@~4hR*2W?;M{8<)cPv+Wu{3a? zx^}f@HYd`kiE*ja^F*Rye)Uz*MWpJBBMT|6sX;tP#(^H6YGE_vYX0(?p>_Ii(v+WOs~4fdZm;S&WOE!WPsd z#{gy)oLjt1P1SaId3rap9vzVpV9TwkX-jTTrfF<86_?&iH8FYABdRwNo4%#e2FkMn zXtv@FcSQO(0*w(A$91RT1^1;eKjKs>q;lIZ0ZAs%w@1%9W@XEfDP|a184fxj+vwLX zGFbSQ!YB2Q>eb!JOm7dSSnE=Ka4$n5a;7=gt#ZOD)-5p`gJ--xof;a1wHvu_j!I;N z<{cXcy_kBu!sEEju*Wy3PEQm)O(OsZ_8OSEScEBZ%&lQ()gUPh>L5{%w8xHWv41m@}^bimAF= zO{(*WG!1M|(e8#=$PEoSORydD{bY?Jtjd))=xJEUyt8O$+iiS}x&qo4nJABrZ)*-S zs~Fv#RbCG7_#eq|{L-rI*c`pGSo<@}6q)xpq4f`h$F>Q9-fMT!wjL{;dQOEpF<(n>#{yd``~&`m7|UtTSSi+VrLJ=zli2>U7{i2hEf=aA zvCxX?!%G&_rc@^TiV$iW8px*=6-lmpwGL>3?L%EUSN63*8?kWI)!@+h7awuhH7zI{ zQuB%n8P$<;)b;I2?8{Ak;ksEjEizoU4z%LDW_b?Kg$)5)Uk{W6JNkVp?;X`q=)?|E~Qoal;4ZWPC? zcOaYWfsgC*TT*Cc6L$qNnA|$wEH``1H8z%P3R0aM8fssS_Vq=OsmnB`(^wP^b?YNG zGwnlz*nY`m9L*3d=jcbf=P0&RReVgd(2H1WE6BI9<8hkm`YfJWH_l1O@!8!`PEOme`r*&sF z(Wl1u<*>FE6Q8>7ZfaME%#n(oEmzlvsVH~rLUdfG&09hpS+h2#+Oyr56NG3Saoe4j z+&5-TGG{X$SCj3$nV04Pil=sE>QEtN@OLdVnC(yEZhM7ObjTe2J57;U~l zBbihgLKVynz@|5O%ND+`lxr%Nx|rZIL)$u{s~76wyDTb&S4ZMDlNh7K(Kt6BV{ghs2^>F z4;b>=Ud3Ld1%(APQa36xB^W6wW@eE7?&QYg9;_C=^5WMvOgiglnjh*{VN0pOc}otK z-R2d{tac+Z&9LD>2{SS;zge1y?e~q3PeeCD8~5_u4NTO_8dQ|IoL%r|K_e_0`-)af z&5#5BSh2<8v2TW@libZMI%Urd8n$la)TtOJC=YI8a&NJoas*_?H2kpqLQ}}lkYyfu z=wZSlGv54xXM|)$hMf^p77RKgq#R|)QKb%5%O4Ly-GZY=sITOd$`3K<$mru0bG-6Rls{69AWk+>!8kQS+6I5qC~VC}NSZ&OjgYL^a5h5H;)B_%(d362 z#K>QM1CM10W4>3unQfGG)@Ec6uyE)aLCzx%TrX49nmun6(Xde$(A@|!`Z$!|9Ix;y zx3XzxgTV(*Hm_}e4KCZW7fisF&ryeY=md(@OhP=C` z^ZBRxe9SCT`|E6`DL4o>f?Slr(6~&Y&-6x&mO;J@L1pULT87N{>$^pU=ceCq9pG|2)?8)_Kfz4`8)? zVjk0fW!~+8FX9<|)-Zfp4Z}}X*jhtsmm$1duBaiM_bdEoh5ubcnz8u|KThH5`K(== z!b>z{Na4E`u7zwT%8T=VRy9#d7O-`uEgbBN zvt_knlf3^!o@3=)#pWq?oHT)^$TDDa&`X;YJ43MrK31pLiNsK&jhb({k6obHsnV%& z3B^|9Rzr}KU5eF9kH+m$>~-Lhn4U0-mNKneC&gY?UOHQ-2IAO zA^)n_ql&#z9#bmc^?vNlkvGe~Y21GSE0Y_Dp}fCp+)eURjjN0??lvEr7F!rAlRIFy zSo&Fty+{6Au@=Q}A0&uOmMx0CPbMjr1a>pNbXB9+K8^dJEK=+S#Xck_DRw)syW|u2 zDmPI1Ah0>Wn!PHt=6%4X$Ug&P2@k{`2QQzKixvBoVh>1y+2jSqzJNR6V?YnVe9n`H zWLRmAFL@j^ACjvTJ6f@?5ChG*z{;Q}S9?>Wy7UZa;Iz^;fD0AY0(x?0DYfFfQoL{@ zof>j!>3Td5l(N;crRM|wOX+67UzT13_Vy zZHHyQqx^pWFDm&zgr8o)TrCRi`8^f0!LL1kpkl87Twea;iZ$Nm;pZyO1$<$x~bS(V$7vQFU!Ku<2HBqy&^*k5@rLSA1<&aXl)Pj1vS zcWOvY)pmrRP(=xxp|C+=hr(`!mZr4&UgR}uM#ty})TYStYSKBonx*fpW{DqB_=3XY z$1(gOg$EQqsqpCW4DV3*hVg4q%E!ku@2@pv(FDe}O<>4-6+WvW<0mq_b|S-fDg1=O zKPy~0iLqNJk=i>aG0o>Ev8E=O%#?G*N$-j&&p~?o6>-QQWM=||mg$s`Q4Ps9`ic(sA6g90yVNKP4A^ht{kx$bW zD{J@B%zK_{uZ4tTjgv<-jcJ$BG5X& zwFxjlvTZo~E!7(35S`&jY+{dMn`Tr?d3GOsCcEnL+yY zZ1CMPRE7#4Q1~^4-<|Ow^8R=R^FBL+dB>9e*T=ZB9M69{=0R}l%_J-b^km#jZ3TtX z6wX(8g2ESOvX94RkxuQbR#>ld6mFPxFD%UYvjS~-uHwFu&BG@gOSoL&X@IWW=PEvf z@HNL0u2r}m(39=QegSY|8J}sFo`}Qv$pN_*W3nfIo@dxwOK=68ET}Q;4qzqH;bR{y znGO%LbiT!X7ICHWLB*~;=8=+F7!yAc!5+wA$06<;IcyEXygjwC}*gQX`Xd*a|MZA>`H~a)XL|z zgh#7LvsRw)G19D+9~tJ6=5qOo@uKovA-{-Vm8U2#m87yl;yy+yD`Z%)YqjnxrQGLZU#M6N>_N*XEN_(zpGun7%A*yvm{8uP*e|_rRh;adEKgXR(mYw7SL{*E zce2EEj%&U66gkGQ%6lp^_`>%JAG=qv4Lzyg3XEC3ZewIA8#;AOw>K<>k{K7D8vDI?) z*&0_lzWP4IE%hVzp#_jFMO_H~1JOxLQ7-*nZq^{TZa}IF}_D zFXzg2^;X`d>WtLMT|U-by%5;FKKAD7ow8OQ@v+;g4+49_$G(ENdU@W*euB7q`LmCe zkK2iv()b1|Vfwg(z>e{;Q^#ebQC9fahH(plt@g29h+8KeKK4e$t&>ZA?4J;~UiSLf z7ZJB!uJ*BCB5s4+>0>V-g)u^Q4kXAh6eWj{gdQFOrA+X6lRyT2{w98^2+dT0gu#|^gjT!(D&u}2Ws zDT6-tG~znt4L(*eX(#Sxz1hc(opcb`T|Rcsq>Nl3pZBrWNeh8J;$x{v*LhpyX&>7^ z=_|mV_p$ea=7oaB)^_+9XkIAe6|<4#BDu@rv>#n0$84~ak5BrVcadz#Vc+y#D|afk zUw(+vFOhHh*v}_@$9tVLH!+{}j!Wff#c16YdkMMWHAa(GYMXq($7o-+$%BenzHPGO zJWZ**bjjWbc5Jgzp=IxqlYNXdyQJC2E;@=>w~y^o>h2 zsV{onGVEj9re1-RxB1xRQ{M*cJ|DYLvB!LDe040=EzcKLjSER_Y+MrCB{v&Z`N?TJWkBxru`f(J2<-Dd_OFOb$rC>I zZN#PIZ$9<|#0|>P=(@C@KcBWTHYiJd?03^n1$Me&D(lPSKmE8jPj8Q1CZ!iK->q`n z^ew=yQ|y4eclyP^{^nyJnVyVgVVuoeIT|+9#m|P0z+I z*H1uz7dcpddF%~x%r?dykiSpACU%9~40J6`gXbR7Q@KryQTD2 z!^r0y@`Pf>=bdu#yBKGDzDJ%{?3c>td*zT~#^-yb@;0V4KHn?n`WX3qpImpl#ZmHi z%QxR`7`eVjF1>@8N&cVY^NJbQACkvD$hiGNu0J9Ve%vr}{ZU!^3B$Q6Gxxc<0IzK@u3{Rvs5m~s6HS)tg~mCw(}VC8RvkNs`NLSP*}Hu;#0d{X*+Y(A!U zpOn2mb}HiTlbd{O1LE$JJALdT#C=Nc_pzOb`;>gy#~vzsIQGx-Lm#{Rn6Cl*xnjoI zr{#N}BG>yd@A-D@)AHqiHjFxWzx?@O!`^YsM`E9qXC5<*a`~KGdeAV+<@3_j@7v-Ib?U$#HnI&J8_gkD$TfZpx`xx^*D32MY^MHrsXNnou z56Sb2nHD@GmwuBa9Kg2%-V*zgJn}8W*zRAJE#D?)+WHmU_j20$h}{2u##y^RD&Kp` zFxKyDviL`av3`%qpB1xqKPbaLW}LPA*Jb?E#H`)FA@db8KEEML6|;8#hBWvX+x;7| z$;a64-;^Cb#&-XvWPOb7{w=w|$Jp-QlG}WY?fz}K&&SyA-OUGrDg8iJ z{E3)p!4KsTA7g7iC0qWiajFGBl9Xcm<&V&UAIV28PPO1i@}Q3~-;d=9!&D2NmR~7m zb$D8SZK0odoxUv0@@-4%3r2L~i=f|BoYnJ>`UhuKA6g&N| z#!GTmHS)Fk*cG!T0^6dPdCh;49e&&`v!<5(Nrrvw{j-h%_AVd$S&px~4kZk#zrJOsvvBdK} z>|?dFUsDqE7XRJi>SkXPEA_7PvE~_@O3J*abJ#Vp3h!?|)-rojNu_tO-V=7Kv>;!# z_XZ#9oV~eZocBx)driqiFOGFb_J?gqIoad-EV1nDOG>7A!#;N9>}@4SVGGdWZkXLy zGR^Dru{&mGOOEj#^RW-lenZJ@uM+F5r1Hht*OtunRw!nAJ&zGs%_Me5iNhZC{y6)+ z-h4mqQSazu?=D%8!{Wz&v}BQYdXCDMN)~&U8-`vrOHS}^$YEH&@_w7cj*}BT{p=!i z=|IJ!CCj`WSa+pnrH*}~WQF%VAA94mv#`VeqGGmsx5}Gb%9OTxx5~TJFkQVn$-7xG zTfM_4Z6T!}97p)4rvY7wtL8J!=;e-`!*Mf7?OLU2&u`af_; zva52&B&aGX%;@4rcH*vmB=)}Qn>?K zQ6?v-%_$!1$@^4u?g5O+2MeCfCVxc3ttW=dH9Pqg#Fogn0ZZj6O<5TJKcVp8*^_CD zS?+v5Pt11JYe!N^9mGtWKWq@Dt_5se4{R*eZ)5m4xdhhw;t}LA* zfApU(DY@SB=5C1{&@>0U*0~GifOiofQ%=WvRqxyvy-x}EL_USp(7Q|T_TDu2Bc)Z~ zd6s;{r_AS1>GSR0XXgG3=(8?_Cn#KrHQOK0z0SK(exvX&fDe1K;(sVT=q-s~6T90x zCH_BnUW4a{y{5QVRwbL_Q_8NFE%E7Pw|mL>YfAP@CO#X_pP5@z_7uumD9-{eE=wpU z3HeNXdD(t>AYKpn_4tOeKX?z7ZN&2r;_aaG$M}VSrSmefU#86an&-txp;u0umnb{v zHO{*xMrsS?N!dK_WUoqIhm^N_Jqr8gUFSV1dl(+Oao$dOKuesW6qxI(vUzxZ3pn{k z)lFqfV$aOG6(RpQ?@ok#CVn?UEY}P3-cq(wbNz?P=Zx5a3X}6k%g%^#kMseF*Lw^gs{*x?y~{x7t7S8VJFe%)w$)tc-R^y;=I>>fDYXN_)u3K^tmZed zUU_`dRewbOvS3y9!&(ck+R9`5w7hdOiC8saExw@+4{DtqXzTN9z zSPib;wD6PF2`#ZVcH_bas(WMa2Bb{BRDHdCbm1e_4`9Fb>(w($sPppxe_cJVz{3j+<>0G!M++vne^6^Dmkp7hTf{9+q-xpmIdmz>nzXbGuyI|8qa(E%& zDes20D)?MP2^eu*^lG_#!PCOuAUVO#G-jb&mUxjB%n40;PiTkug*t6aN3iV5P zKJL;bcTGGa#(7Vr3`>JoDOXDq;B`0yS&5T{?SMCH_-z_~r-t99;UB;WzDj)IJ^^^2 zrnz6!d|uOB?UCAb9;w~nk=o4~a+`+4V~kx8W9;G>W0%HQR)dCb(C}sr-=yIkF_yI@ z#^lLD(~zkO=gYl_JxQO>lF#9}UZ2myz1+3ZF0&>* zBC}D)67Q`gedY53_m$V{^H;qqy(`O~1N?M(SL{mf%jH)A{;d2Sz~d{v3b+^WtkP>L zp2PD`tLjUx^nO#-1-P#ID!|U_djNM-FDNDb`qKB~W7b`Oe;s!fVEg!c0N+3UtAJ}K zJO_CGgpx9ZOqdV&zZ0%1Bjx$!vn!gs{gvU?`nkeNoT0pN(siZp zF8xgDqorRjeZ2Jhr9Uoxru3Jk|5;j5c6wP)*-+VIWo6~l%IB2Vl%HH)Up`cROZgq; zca?v<{Oje9mw&JPsq$Z!|E~Pc<^NlLsJyIVQpLQAl@+ZOmsY&D>b|PaSAD7KYgON= zdZFsYs#tYJ_4w+U)eEantKMCGP4(NW@2dWA_5Ib4SC@=iIPUau&EsA>ZpXMck9+sH z`^Wuo+%w~TH?DmAapTV%f64fs@!9b=j{n5?`^W!qeCdQG6Hc12bwdAy>nGel;rkQH zCr+F=ZQ`tnb0?lK@$`ue6JIlN>%?6XcTc=+VktbUN}Qgq!r7{7Xx2EKYZ|ZK&_sAc zlkop2oHd#%N8_x}G@SIAF7t5qdNr`Kfwjr8*cF~5TX2rK3o$+Lo_4@{>V@~T6W-G< zeC6&kcu;9sEIf^~PfnD};b*-GXJdv%TFgAtsrz$*N;h750o5Hd#m_lkv4H=m7Lp%>m`3a!a z+UjLevXBR+GS{ODA6NLa!k;Vrlfpa7$HzqeHgyVM>Cr5G&e6{7U-dN#tX73LllXBurUEB8Z6=L-t0#Vvf@G*S+yG~TQQjb^yS_Gv8r;%O{> z=QNi7!ZdPtNMY%8K2Mmw8fl)NKAhvh=o`H27?yaS!hcctErs=^-+M*U&pnFtzdw`k zIfcJgI54HG1aAw?z7g=5*#`jsWA?2jG4#0-%uyy{b{Rvjs{ovgUdeCk;&a~Uh4`2_ z`XRnBioS@C$jVA!{3PC^Lq0BBuauMQJg) z6eD^}5-2l<^A&3VyW||eZj=^-P2dUl9e^>|g+@H@RM>|jA~9G9!hXIJfqm*GJg4M5 zJP!iKU^`myoK~0xFELn=R)p*ZFEJTXxCf&gPID`~9A{f%urho%;tjA&F^rysS71Kl z$r}Mx6qFOJ(=$P1kckH&hUPQ zkYfO2GS7P!aH01c;7acofG2r;Q{`kp^fm84@O&y@OiuHDgXhx~p6UG-A!jH&3p+_T zK@S*{b=Vz>$!oknA*99o3!a-5ZuI^KA+3PuU*2Ewe7?eVykUc0rm(|%5#gPH=xg2~ zz-|x!Bng0?1+Ok9JG?T4^a7R+bCrYtp4$P_FVB?B0JIQ>ausDh>`i{y+e!<=mKLNt zP+E<>0Q*PkDXg75HkmXs?J5Xp z0A1#*b2m~)N!RAWVNSH@XyOk2hDCWc0!(e32!I6N{EdMo3Be8NnqD!G+@t z6908qebyVA>~6N48_K5mWtfaFvYcwL)oU#fM>2zNu=wft5f=Y(b2~qf<0Ij3 zx2!4>7S3~07;%X=w{Nzu6-fu!;=N#ydw)N^2-1xEDC_Z&6$lVl4&}9eXSTNw-&|q4 z4yAErceVj{t9PN&`(#714+0Q-1GqVr+BGyN&8Z%31pcaiWf&y=nXXj2uXmfY@541> z{bDz+QZf8a(bUkJ8BApo+xn8SnRf~+m5_4Q_u+khjc&w6K+=M*C*dnHnQQ}IwC-V3 zwcyh((lmf8UHkgnji_Qbjpb1PLc_dRc&s&M1dsLfg#f zg7ewwbYfpK?uBEW{LeaM@a$_J*ygq52(VUgEK-*cXWGP04s25bw};ei$4w^ddIx$l zI~Zhr*KXl1!dh)RKMRAeXI&2YnGObwYoXh5kTRJqq|LxwI}vd*=W|%p#9gKNOu=g! zM1u!JNiwI>&<|ls!9#cC5Ad_6NG4ZwghI zdIzg7Jkef+MpvV@9$yUeGmDxs4Q(1g_f|1FGGcu(2~#{^5$Jp{dEZS_yzbv5XS*(-=HP!-|7z?TAX_( z0rzZ!5OTrJ_~T_p^m_BHTQNK%5VhnLXdK{pUz_CL*@6fRc1)#LkBGZiM0jlo%!l1^ zC7~-nMDMu}yTyWrH*~p@_KGZfLR;vv7NFq~w0|p%Wp6h^-B?Ov5gJWlEpU02-w!~I z(u>ezK$s%&2n7Z-WpY$pITmcCa}0&44X%_CKSL9~vtsP&U>;?jR=}sm$8df%5TR-i zCkNJ{>+zA9tgKJk-M+pr0W`ukaGwc0Ii~R#F2*+-98hc^C(#gQ1^K*3|JI^c>T0gyF(gntCZL6J(7#nTLMRj*rVovx;*B@IHDBN{?4!fwvhXa|j931UKl7{M}O9rIP?Q za1$pf>-rKsF0MV9HLLBsfShHHnA{O8W!MfzEnJ>`i$tn@i6+pXLTiB#-yTHzx{n0? zx1djk`dsne<3d9!9(r^-U7)8$^sboJ6=+7d-J>mg!V<1tV7IgBysc8ysxv(kYg6*6hAi%*orZWE2W&MykX#NkJ$6$5D{GQOKup$9AXhmqLd*NzBBvKy@@N2~9ygD%` zS1Te~FFrtj{F=G;c68l0MYJ1@7|CumVk8TQ3QUWPh^#3zbz^LvlnR47bWW;-!k-c| zk>!?p3{}Z*z(Pl#|G_u^V|ZL@3YsaWB(CZ@?QjZ`C(4`{o#aNWeYECLMaipW6tx=W zszUvxv*{~~dc^KqVA?p%4%2xtKPepz#yX7u>98O{E(khHKiYi}52!zbWI67!HH}Y& zDA7n-Hhv_4t>W@%a)$(s76~!B5fUz*Q&KMMVHJ%lLlMlfHEowhe9^}L$<+f7=OvSa z_-WjoOrM8UCOo1oFfSx~R+xI#{v$&*2dkqG49R6CV%ZsQPkv5KoJ(j?jr^`RW{p{U zXvSorV+UrV>#<-2mD6VzXh}jb7GP#pzoHG+VW{D|V8W8<+67eCC-n&*vh1a7oQJC) zrA&4+@p_C|?K)mz4!jYIW}HCa5sM|5c<#;C<8#oq5D?5~IGxd({vBN|8MWan+rcV> z5vP20A(*^bL?m{SzeG*i!h+HA|XuUlTfypVgwxPpSvj4KyEoHxCh5f9wW9Q zF^4X`g_vNakMw<1db_5w&<7f!eKw(IZk^Un?n+m8$L$qIIBsI8IpL((Xr3ME3 z5uyT6Zzi{6U}bOOj?G&8KBlk{^5WfC&%s|+v6v`xV$4acX<&D17j}Z`GW!O)z&$o2 zM4#&ueSO<#qSwNV;!`}D3{`R&xa;D3<)Yugk&P%>_q<@82Ox%|Tk39VyfKwE&{EP*w>Cvk`zYyT|S7&tw-C69&QIo4rS8` zj01jvbAN&?uKaq4Vkljtd?-aXjBR>Xkvv%GOZWEd$QDNVrm8SPhq8fv#UeufbzwC8 zIQ_~L41Hl_M{gF>%G_>heRDgD>FZ4lgjn;1)6V5R7>(LZxzEt!mKZ2(Q)>_s&~nM? zGhn{qBy4_nt#+!^AaV#csyl4~F#+1>HHz?M;z0l$H+XL4a;mv1{$sr%aIF z_f%DI+1_p3)eDKQy`!#U2ehp_$dGW$W-ahu64)_Q#p7n7x=?Ca(5l$$qJN;_ezmZX zolFm=do#%#cO%AF-LcOAgSf4aTR-a)UHA8p#GL$DSL1;_ZKmk!$ol(b_=fjxj5 z1iyiK`t2k7IEjAUtqP*JCZB*)=+`Zo+llODAMN52KX!O&I9n1su{DS$I%$>R zy#v4*qyCNX^N%nQwBzi08El`p9n$s5+;%B|A9FHJmFuZZfH7wW@diw3KWLX*D9+k_)!6(QF70Y51 zJwvGvV#dIfSm;3EXoTj}9)I$uGRIjEUqYOhbq*wk(70*t#n$PU4+E;}>v7J*7L9ZJ ziMH*xT<5j5Sj%512!P&#{4dZxG!5!N!fv6fQGhZ%m(S%6wK@Jt!PsY z`|@L81TYC)hYhQc;`=5ION$ANmM!=IY%(2GOxGm!c)?oKA2PBg)S`96$TDaO1lA8_ zvZ=tW!5cR;EacSshX3UaLm(PA^q9406W|O=FAqPc)z&&F3u=PkW?4?iDGP5o>*kPf z3HGSVp3r3j*k??((cdw@4*7&iEq9K=j?17(8w@lOF0OwnWfR6O+G|`F--9M{C<=w% zf$^0Dt6cf;8hg9_YPv`@q!)L{cRuQz=Rz@?7Ak?t?7o|9#o(SOQHNi zI7bN@FOam^vsDsii}PGll%OAndbN!jv>ZD52%&z5&KYj@o*bg3Q%!MK{vx;PEV>4vYtG;tj%8o6AIjm>a0BN_elN~FF4r^R%n&drLU-`mp^s7|A4 z3v#pap!*_?GVWUyP|#UIPK^RntD_;rmoww-Nvt;Te3Y6WntLdX`U%a6Ox6v6T_~TO zD#)j*U9V$Ejux7Z47R3Kbg)OAgTdJ&^=aU4z_Ee|G8gpPb~NnPUYvqSZNp_^E2V3d zz?P|Q1v3Z#B-6GeG|y%}lHe&6>(9OXlxBAl!!kBi5t?Zl$aVaT^x26g^t6!1yIGLH zU$#k*DuKh``{|HpiW5i~JqPn*+Mc98|H*`fhfW5;Qq+`U0sC2u%pED6x(G~H8a9CG z!I?Ui+u0Rh2RO3iG$t77R3y1@9e;9|#*t%qDoISAv@-AxV6*I_)fgyrGOrPkH0SmG zI?%%;>=Udw+I%Q&lO(le0dT0nz zTie@}3Ie*J;cz?IjE45{OBWL$Z=7gO;S@GJUMA(@SkZ1K$|(@_)P(J0Wyr`4k4yi|4U~l(i^X5BGsVM*oG8%cTh`Rt~@%< z<2d&ouF2WR^IA|IRLU$NgLB_fSBH8eltu!l*I5JOpdWR#S}j8;d0|Wj^63SIF4UPd zI8(f){Bq++7yaJ>N&#QnRWfm33PBBI&vMWu2P`*A!D02G_^k2}2iJiNwrfquSzKH> zE*(~xw9QC6EEz!!Ts~J${_hr?!EaWYlr|+{ZN*l=q(Ef>T{&+#VpGta{QLpl?8gTs z8l^p;M9DhZGJNB5G}a)J2buGqOp%tUG6ZapIW`YPVC*i%GsTp}?;v8*zHs`14`>M~ zKM&O~S}8U?j`|PZLUs}$g5ea2iv8b|i>Le@6A9!Sgj{+drvyTKQ6SqO0VbU0C-DYD z67giw#hYAq15ZNh0(vP;HK0WG?F;%)0y)`&luR7$w;eE1#BzlD72fL@ zzTFkeiX|Yze*D&g$X=fi_05b)7lcgGrlmU&p9QOD;!yo^OrH9mW9FPMsIG*0=kF@~z8kK4SRO%t zXEPgri%_0dU#z??%}<_4y$M(5hK)3Nu|aP@Wi8Y4YZOQG%RW*bMAxD5>H)W`$ztSK zg5MUcvDJnhcmvY*X>Bri36dSt41Ej2t+iNNY6+FgWWh8v0Sw!KmhV;#7!XGy$OZ%r|YuqGUi3tK#pEQemHFuN@CXepD(6&?iGLbcHEev~Ab<5FLv zEgd%Xn=lNvDu-@h30jV2nRa^e{5q85#-DqntUxX>Ddq|GxIg77Tj_0lnG%o zBI5$5K&DdO&iU#_ebXYdS###xgE;JMYikUF6Ub*=Fl0#ydS1&q@Mn^?p2pENOfwD& zq{_jFMw)tU!^;42vL`a1@5)`);g7S_9A{Z*OY&VJr_E6Zhr{6j{#*ZN-!}Q#fZ_Nv zN0ge2y1u>z+GIwUHFGW`9S2KMST^gx&_IfA2#o42HDol+mpQedVj3T|YrdveIbTC6 ztUUx*YEW`A{Fw_dzO~6l7@3WD-;qi{!ErR9!8eB_FwJrGG1;UX8UlZ?4jveNFk^cs zh_i`;u1RXHqZhBu4Z$$8_nG`+OJileSG@N7zav|`c_O5dd_u?LV{(3DPQ1R}4~dRrG4+)_S- zVW9(@Q;sr|bqNm&8y$rz>-xKprc0%c6;%ATB0mROLRq=a?;Pv~DWzl%BIQgU%{%}z zOggJ6qf!Xq#o(4INkx=N_GI22>VbQ8WRi6%N}J|E#?dG1v*#)1Rkk6V>b@7Av<)7V zPaNIODLrReoOhYB()6=LR}M|R;q12N@ZyctHDOwg$1&Hiskre=fvdrsv{*Oe+`4eU zQ%F|lg!y2OEb5g;JDX84N8EKI&aIrGu|YtpwxPTM%6sZ6e8=GwI2G-{nhpJ7@1U8b8J5}Ro}^WZgV5t`c(dAU zg3KmYG^>tsMm2>sla-`vTv1oB<_%7%kkCp;1K57-XMMgtw(E0v{^B$( zXh)gKVTxwI5B@$aA8gDd>NER<-=oJh0H^L^AcUl7<80o_9OR5r9UD)^-(h$v!*()S ztSutl%~76aMq{bRyh$AcQb7#0Mq}ni^RREzkqhd10k8qM%h27bP8}V#KpI?630c4s zqj+?@u%RudA&qRgz!5TwWqQvRHu=)=EH?0Rtwq;&T3!wne60pls9#vHq9trJ{~HR36SK zq+#;rta;R&EA!j2c-evT>kZ|%L%1Z@=7H_Xpf6FD?8ls%aGdW2bZc4xWom#)INU0f zTozNM{8F8R&Hm1*iOI<3@76~7%P(FTr706Q)u3Hbtjb|B&e~r?*HbEmyevXkke8zx zZ7f$KO=?be7AfsT;QDZM#z3QSWE#|0@;e49XSEePpFX}@zL zL)pdjdnQq5=&5pgiV>!aKAV(O;}3r1v?^e`{8Hk$Ph=1>@TOFOK1UE6jWDU4Q0s^6 zMZ8RN7+cfj0Y`chUMX^*gmx!w0X$khYvv>T&reTn%*y;YsY5sou?4+M#<3zu|J&YCRmfK z9QvYNqz@U{bVI3DFcx(#RiQ~_K);exzZ#XNt-p1` zAEthB>4NKgTrwri<+|!-^APrD=*d}5rWyWy_%o|W9?F%P}ad?YoiOgf`L?KF4fnk%g{ z4o_=@I>AG0#;rPaz7^neJGfhezaz99D~~wG8MWx&-O!aI&N;3Yw!m`IO8FD%IgPka ztOGh%=i9kGBtCQI>f>`d&(KLUKDh^Y zS{GbpejJvS`anBqUI@K)dIGhOXCq3Nv+C7mus^vpbvh!^$EK&v(Tel51Zc9)vnR91 zz-FCf`&We&Txyp#i>Cw>mhBtQjVt!B%4ph4TkQ4qOK zi+b;tx(+>}9XVRi+ReBLYAY5I8SCSRs3LM@1NQ<7KYK; zsDpUxw0TJ_KUbk5o(c5}RBnxrp{veW1__6qg*a5rP4m48wrs@)LswsBU41O&f%5E; z&4w(byF@cGvYAAAa0J5L%a+BI6BzFN4r$%XAJQ=FQwxGYgeLK17^^~hbdI|4O?s;Q zR&d2d!49-hw3DJfOY&0`azImtlyfcRCMYu%x)Il+Eykp>77HXNF@BN7*P{hDY8Poj z*<4KA3YlD}a$&cSc_VeiHO?Jbl%FEng>vcU7w?*D;0D;raSe=&an-K+&bC<$J>#&I z-=R^1;WyJF1mfBX_UWy(BD79B%VO;9FBs91T!QVEV)0S-U8>@2TtZQzQAW2SIT4&v zSiQsLWktUh?*D7#QVbxR&@NN=W#kHSUy#cNbPwXNNpy7SW-o$BxID@p-v#_UgmVj) z3!fZb26RfpJPAxTn12}tN%lWZ7dcF@x6*Z50FAmLmzr)Mr!~v)%d}j)eI1^-SGfpW zd-DpbAFdgyy3m@G4aiAIyWNNu&zg`?aI4%J|~-8yr%;}=`T~9&Uyy4 z@WDy6OB%AS#q(~2Z3PT3qSYV|9d6@eKyYh2u<(CZ?pB||8t8?(D~(Jw_VRHP3|gq5 zya}Y@Ch@W;Tr!^vOXp}RRTkHaDGi+wSs9f#TZi_7t-ctt$fp9W@^jEmb)a>&LjO%; z7OPINy*UMUs?RCZ<`v7pbK)fV@uEpWN3b?NROl8`jgXS_BzU`O?9{))_|6Qn#XpaYfOrc zAJS#0+eD(P>?BTJy(zAooCaW8kzZ!CHD8O8IF)BvTHgtdhHAnQNX@m>Sfu7!_|=q} zdk>>DGqwb8r zyK_6{OxU|qu&Ht~(s|Pg^J4U#U&u`~9XMX(T5w%Xhs>8-hMp8mW4u(K{;k#>hSKQJRK93kyn?~l42X5RMwp2vtiP;*!C{%<|1KR3 z)Vf?cPD1fD5tOt|WLY>ppIsiCoH*KaS25g=$Vs#WsUxM4jYJ?h4$xfruoZ}q{8aY& z^5d{+d7aeustJk8OWu@Ur&q!Va91R75?xQ@zJ^v@*iR*=8tt-Lumvx%(a2P(&MsTu0R) zWH8j=I*R@{kmosbKWLkbc^@Zo9H< z?Y9ZIjhS2^b1SHvATL&rqE6RJ*;}L8DX3s_`qCN^Eco`J*ob<#iBzbm8uOdR_=!>o ztC2Z+(FwA=HeaZtS^15y)A>_7O2l>oY)?Kkl^MQ1%1n4`Yz^jFT#4nX;4VOJhuTI8 z#Zqip+_uVWUTNz9mY&vt>lYog*j0qzO^`Zcx(j>!pFsdAxRa3C1QoF~wOKP{R&A1ma^U%Qx}pE8P{ z#qB>FMBvse)?gE(cYq7fB{rf1xJ~z{(zE~P^WiLjaYN~uv|B-=1FkwD*Qun!R>!4G z2l%=3(f-^^C|u!HSxyUY*Diw;mqE_n8R5`+|T z@bkmCN$dpVYeMc|-V&x5-ag`5;R0PLw9P86I^gPl$k%N!2Nc8WUtFzX-s1nAV+LA# ziqmR9jrqC^kHT?Vi?nFdljhCP-$Q2y8!&_O=x{SP93+j09 zu$Y7jH?E>I1FVpGbj=cFjL@#dR)q6qX63MqU^faB^&JRz=!%3EtKQ#k9^JqMo!4{9XJj2C$F6VPWjw5cj&Jf9h zz0G82=%`AZ?{V-jGsW?Vd6?gtg)=UigA}N;A{0IUdNidiPV0Hh;X8~drzge^v+`9n zTOXp$Cuyz;atvT>7gDkZ+Pa5%hsFA4cw?MB&!#{eL)!DosKGc8RE29*+#7`4$g^A6 zju&LJv-2ct=YpK@?Tn$FC8Zolnv~qBB_|1*^l)y@YuQF&0~3@UZe|&Nr>*zcQEnDM zt)NKxOiz=e_4XW2eQ*uNt&2T&JPPT#`!f&R zz=q#yOjuWS=jNQ)^MxJ|GH=G|j!D2_Y;bl>mxfy&RR2IO`E*UM<+AOlCKni4HR?E3 z$b?3fA=@dfyj9YjJ#%Rs*IX!O<+xz!+KsiOO0uQQjBpcQhTqen1yMfRkc9m&XqTY* z+#!FHs*|Qw$ohbFqWtbkSCR#?EyzB*p;-WXnJ* zZ4Ej?q+@PO+^4|>XRdi&h_s~56`GBT*>+fi=H;fmtsijTlquW5)&VY*ZPLXd7D~0F zuf^T@PW4~;nhcNS&|``trd5AArMFSQSmg#VExJ|Fs^-|T#RSJ1m*v_(e}m67CpJ7l z#ENmwEW_{O+EfRMq7zL{*D0^8m2GacA(k8GT#4mUJ3~A1%h%VqqG9!?1l=Y(Ph|3J z3M<16cCOKO!1!BbEnOU;9Jm?7Rw9G;mXB2nZ$aBuH^tAxDkj1>7->b(7it0Pk&W4z zhI<06D^sq;lP$ryiCnl^)>xD|cV1hx6?oEvJF;XrD2vjkjM;Q|P-yw$qfRh^OXg}w zji6lW5o4!wT!YxG(@uFYmMXyJq?BD1gJP+Hlrd9L_QXuCtPnMr?1MR{qNb1}=UA}< z*}P$9oN5PJRM=6Biqo=AWu%ZrzRk%4coYvCoYLcyqbyVNDWiXuodB<27S4zDpz#{j z3!2Sw#hJTyj3TrUJnW4*&B~GDY9RsouF0|WhZvzBIS z`LY)`F-&UR&;ko5eZ2@`_+2BBj22T5Gt5nV^R5=dMvmrEaG7+nj}Z5!Q#_JwoKSnI%- zTkLhSB>c`ACxqnK^79yCaD@W3jH7Z!DV+;lE51^5t}CT!?4|Gpuzj!|_UhPTE!AFy z&_+v)of5Y~D8=B|B

y+Nr`*RykgGjjaUk>C&o1XRKDj;SM_G%DQ4~WzhoJnTUQ! z$9X{Pzb~uwG3t(;nR4^|knVJijeDCLcf01vl`LnToP1I6JTFc1ud=-xqgY>7)2}IBe>y|#8fM|GlXLLnMAde{wG*B-Qf}tk zjHci~ZSP$bbl~B~i)YRsDT|GKi@{uUJgp0j>NeH~7r3;52~M^6@^HVpPV1l{Tw%_@ z&hlVDKDAyV|F2f49r{f3Xqv>SIh~roz*zNu@c(M{I??*S8Ip`tVEZe>M$U`AAC7K=~*e(ywVRwN(y%bG5wFY$|C9Y+q zEUb!Q%W+VKduCBbuSn|I3>$%Z)q2Rei#(N(uY!`s@#YO1$)(DCQLJrNv>*>^UeyAQ zxSAjp^}w+^F|Gx_8^LWBVSK@6P-K5kzJR!JVJARXMR&NG%ST*t%y$5ohE;Hj3w%Qi z*YlznqY=C%Zq#_O57YBV(;n>~RDcZrn2)QDOvl|YreI1oliM!lB!T&?G)`8S+EtyY z+2crYH~xY*z?sV4=3$!rH{uz~_wX6V)w?u2?85vexUHbG6$`(XHmo?@KH%H&6mPx? zoh{xubVXNdhbit;(}c3Q>5Q;+a^<8CWg5Q9t<;Z3WTeI;S-Z}HWJhL|{kb@MHPq<|xiX9VqY$2e&tsiKvInAGwy66ZW7!zocTk9j2TL-?HTn5SbnXb(8sK zD7JxDo>H~Zfi(^~DYb|bM|XW;L>`fo2&;>D2(p}Zkn0Is$t@Nx&GOhRs)T#xc;*uwj%>;dG^o#SV0q+}dw zi`LN@xV~t*nHQ*3-MHI~a%f1f#{r3RBydzB)aSKBn!J6B{e7P4FX*2A}tP1v~9bPD?)QweJ+MH$pLSJv|O!uR0JAM zAIeG8Y+r;PG?p|tl#w4^!@!GFsJ(e5&!r^7dP7+U`Q)6!TG=bHBk!k0I03J=A;K#~ znp8^%qIHK=iH-6{_)Py zQ)M_#K`%JiQX0G_Go=z_>t=QBu~1`qE-K$9fir}LT^`B?p^yq45bML-Wwvo{9omaM z6Ddl-L#S4?@Imi!={Vr4pLmLKyZi|F1%0)_&KICGSv#%$q^MTNB)U@^YpGAT=w?!5 zgddsPsQSgeLXWi#v}h~2#!CMfi{L>6Ip#-lG;E(O>}-%3sxv(%ngI%lUZQzAY;03G z=NU3Bx5n6!$cDu;H*>L(tQmaa!L+fdo#I3U0fWvsRw#N$gNe!2%AbtPb(BU(KaHhC zJv%hRCG`*!O%BbM?R`7Po9brkyAe~x4|x7zU@IrbRk*6#(&VVKRt1^lA4 z8By8Uu0FzZM@;F21#)%TQhbi6<@ttbc`jd$ruHB+POgPfQnFt4kGh(OYO!4xfZ{auZ#<{K$fk>y@l>Z6mtOBTFwsH9T1f5IUH!3R)b!&_ZF87%M6zL z*-Al~s>^U|?SJ%+@#1=jl7~O%GPvK>D1tr;k3DdnKwr+*X;|FaoayDhV)Q;vb{IR8 z;I3l`%+Z-R^gz!ji%Ib|(Bo8{Z+hiZSd1+o-eW)tLDjhS%#?vTdc$vZ47=aeU^lqU z$1;%Re*`nvJ0{%kYBe2P;bC`Uw`N_D@^T^zkLNQ+B9((mZ` zofP~*9Fns-@AYRl#i+9D6iNnlI=@(IhOI_d3Os#Ek%JT+Lbe7s={PU9`Ar}vP&{WO ziY|Qg+Kp}`qCBCr;Ws<7`M;(L`QH7jW+5ZXI{Ca1Uk%Z5r;bd&y;y=`VWZ1x^xo!% zf|18$=LmYkA1PLNv9MQ{p)oiKBaR`CTdI0a(pbnX{@-JyFD%my z|F66U=9Q_lJ^a4>LLL5(@U=#3P#c82+#JyHmH#_>4?O{g?A)NMLVgA4xq(~h>8cBP zVy_7=oS{K;y>Yae441>WYQlHPktbDHKYChBV>92Vr)#sv=;R_gaJjEV(Gg&bZIe1v zc%t?K6 zW8*pnCpyk$qqK~R+DNOCr{Jz&rpigO)6sRm)XeZzLriTZko&G##Bpn|AJfV+kurnH zB>ipP8)y!r&O{1~LO|W-+b@s%3sCoMK^=119F)S_O1D!pyIh$2T@7wcM)}Ut$U0~1 z2wcMFyoVBrI8&p!H_^RO_tJ$M^`qS)x)gC_Gj|pH@HMWMBmItUci7IwCjVyfMrP0H zpFd@o5?C+a{Y8kgKYmEg%H(rOi&RW#Xv>kSM?aXI$PT5w+ERXJKF|61KSIjxc2paN zJ>4?N=Yu%qStuMzb435Pm{ZPOSMEX3XuV3>TVU$)tMk&tnlp80<Hw!i3Sc(p_`=_|9hxpjCL!`UbQRKh(7mtZ{j`I9p@2(SiJKJRE~A{&0*oX}@t-zOMtDyH%Zd4w=qQ zA;V0Q=hzKD<^TB?;r8uzXi*tX4X*hxel{rViW9jzg$+_LDu|M=TZR=o|p&dY-X|cDP-;y zGYU>lJkia4B3rlMNua0?R4B1R7cW>^4;u8I!%5G@kF`OgjJ83$-1`H?BsVrD?{-Wa z?)RlJ8Ju=`=`8*O`z=na|KBu)+hx^tOvj>>th!4U-?oXmG`2X7b67Z;sZ2#)c z(jAtDvy77s-n#U zn7&mh;}Nb|CDn#&9;oz%E90*nt`rhA;OYxk#(UuAdHSuY7-5zLeB?m7#s)@Jx$Uin z7OF8F#@|7d#-DIkx7xg^m6O)e%gmQ4UQ@Webu7jabMx!Eo+t1au=XmSrl6_owQ~BJ zXirjD)U_&X=21XpB38*G{Y{{LHrNmkRnMcOM`=1Wio`dDOeMMoxJc_ zCse?{$0G&N<$(wu`Pc^kw^F2tG8R+Hk;e_MdR)>SAO9#WDTx13Tv9|;$dYH?v@#~a zX2D2Hrt!^mK!`7dj);g%;;ST0|jC$dmO`XVPgePT`{474P8JRX519X4hhUjex}LxstNaVBFL169|qLe1RpURO1A7Wtu^&R^QjT%8k-!?v&)*wz7AX4Co9{T^9V|)%ISM`L)Z}7tLJs zvHLM+DUDvEJ*|8(A#2L+5O<j2zqXg7YSGDFv> z%G;ugzp)Tz6HCvCud&IBzzCrn5{Gs(lZnA5>8yY>*f2^Fj(Z)NDy093`z}1TCYQdT zVgbRWElklNs~!C$9a2fJzt#eQe2|o+H5}iby1>eW1+!)Pe#MHH z=9dC*S)VKp;z-6b*fw|crOlBJ88<^K@y@* z6GG?8bqRPcMlWI16FO-Iy}%3CjLiaVP%oaw68Zlz5vFvE2y3sI zR4sW+hIZN=J{;GQKmXF24`GuAmxweD(qsF%+qq)oR!?n(=slkIVT(^C{SfwF^JD;d3*NYpJDc!y)&I_MGcJ4)4l~4=i=zGp@P^Q5TC8 zu`eF>+7ofu)*92KT|7;+i`GCffQu>XyZF(b^7S%=b`XE}7O$?LCd zT{s-a)I>2=(R|m8kJkJg&3A1?I}X2x@37$$O52RjtvI9=$F~8#%QWse}(kkT>`m8-fG`% zHlQ@s6d9)JjN*f)saMf$3_>nR!o(5c%-g>~_hD@^22Ws;Nk4b9u)=Um(}w$uixM%| z*Mh^d4gFY)ibi-h7i@Vep zCp0hy5Cf&seI67>wae8Y4YOK`)v3Z@(P0Hjr~Bb|;O46HDKNasQW>F{%g{|z9*JDi z@!B7jqTo-bQ1L`hDRe*7%2!T8axsdEw+wwPnjFx?x7zi00`r>7yLiYG8#7^RrpDSm zs#Nc-L0sV6=)(SPtXZ?650zaRS>7)X{)xdb?>L5ptxqMd%vhL+IGu(lmL@r|ZQNF= z2iGeoF-k>MDMd#kRP#PPa(^~iI&_$@)*$zN_#UIdEb)KSbGKk6cg^_?Eyg>yjzt>f z;7Z^$VuDVIcdEWjGZx~4eyA{X)3R*$aTq#!Gsn!Os7`LtQ^y{w;Y#$(v}34HP}YLC{b_8{ye?l(OHzFDgV&M6G9Fy=hi`L;LfD|G)@`PhrE zr$L%qVVor!Yb=x_RlkT$fA#@nWb>gKUSO1iCw^q9xtO{6t4AC!2J5)k$sC!2=i$ zI&#%!^w~V4WLK8T2u)ugjee~!_lZhp8=+N}N?+I1fsGy6#^M;3+;AV|RlDD5(`7Am zKDDS$dVUR-4w{lXsW$1P=l=;nrc+(`M~1YxD`$1-f=e zSA_1zVv-JjyRmd(*svC`(~6PvQ5=q#G2B<^d$*WVix{1!(s*?<6^Z;OO+7QjKq*86 z|1m~wtMB>(Y0hGKk#62<=NHf@C0vCV%kq123q!9HxP}xRQcpqRl&&|n?8-X+N+1~e zVzg;U2>M1z4V;?fFq4_fRi!lQi)gLp{k`Vu<YbJ0S zqpncYKqjSLgJpmo$_T5nRH9+vSkYdW;=ZguVD`bP$KFUr_`Y$*IyP!&^)hSDjXq5- z9@gW9p&!QB7wiYrEOfP$bkug5*Dl^hxYv?P-07X#A9Uf?`GNG9)Z5Ef;zoT zndPs#IYi^?r8IH~&MR{J7w>(uV2#CaEZ&o_v5JvH*OE)zS`}oYgqzd$V%or`R1@~V zX+$fX&)8r@r8LrR4wriZcHo+TgrsTq5o{&xy)aUT2F{vatg*Wi>JOuOxtgZLo2}q= zf!aFkjw&y%9eB6~ng&}d%9n8?MZR%*`;ocPU+P{_#=PD!f(OauAM7Jvs@e9}N`+Xz zWj0v$<~KxNSpLc{b({9)-Aqv;%b;u=BlUWi-tJ{;Gj8O;U*NY=E|*8=C=GK)#S6u_AyiI%PGcT;A;%a8NP;sUL9woH?A44g0G(WA6ZW5do`{r zH8?Cb@At{dQi-mBr2a6@fbXs7_A>GstzXEFcN$^hM^zdp6XP=%^@DU0s0tx_Dzd&_=YlVxn|n%28A9(rZx6T3L7+r+-(fwSKj=>v}d;V z7E~D|aj(Lvw!X^bHjlU5D&*m&Kp3$rp#Il^?MS)5uq;O>u3`PX);msg({rMJjAa_g zbjfi9BLx2`^!G-`vfNz54UBMM zP03b=FH55J>2J2O_IhbG^O(u5(8Ij@5^p}~-1d$UUQz;%VrPYcd^Ktg-$iG}9_m_h z$sJ!{!N4~dIuH{B<{nA2Ogv5&vY#{V5gemgS`@re$7OXNR>cm?eR~Q>+g*Ra0;tkT0^BFhgTE%Zump1b5x8#o_f=E+zBE;hC-O zZ>}?Z(?pgUA6-%0AI~$T6F3I=5#QSM1oQlEZORB~#0@bTZ_IE-uKC$N9^aCy7Zvyd zNbJ=~qv*xVZ)>IT;S>^2-5rG>TUS>Sv5!2CQy+H;wj^WYA1-d#0la_$&2;;lI(iqFUu!znOBj#+btHaN_yJ;H?0 z_m;&6PRvrL^Fq}Oq|faIMKr(*jgnlmjqYqm$eWGTE$s~aqmel;WuErBUFDVzS|;0uPY38J)tsh0+7 z;CKub8(X)x5sDAJ;`K!CE_3zAA7ryRT0LSM_VJBRx z!REByc>n%0J21B(qQH~$=%?2Yg<>y@3Zq`&7gt#&X3v7byk4Jbj zNMH=c9rk_c;m*2|bSOev<(zHgwTcJFu`L%i2sFiqL&RaeB(i8DR@|*H!$g4sMlSF; zQxh#&pK?rIdIT{QTvixA5E`|tT<+Z1oE_Lyy^CSK23jCtRy4@fXlQ`dFxbKpm|r6x zihi~rN0)}?>B~jk@!nreROx};S1DQZH$y_D+&D>C%XUqx;2&AXy340@?`+9R z?_TbNTd{I%&ZZkoI(GC7Q{U|rbqBFGn{ts8|JA`{xI^xh*=|;W%*k-YNj1u(#+tp& zJ~i4ZJBi!49Vve^ZW(Rm__WI7-&aiK^t6sGVFc14Oi~Xq~J0Bo<>OMqO0~MQn}4OMGVVCl^IrLzCsF~ z@)%-BF@dQH;SKyWS+<67VX>rXqdw0$=BY9sj?9-pPaW3V11I#xTHa@o4fibo%ov( zde!NDa76ZH3_4_tVkYn(_{L+UrZNv;I{f=6`9L-0gI+{!Ks%bfk$m!nqcq^J{9}F5 z&{#fmA10a^<5Zr2ZPFw;Ds|PKI6gF*w3343-^<1)?_hrv>$CmU^}q3f+uuK2-HJ2& zJ_YiNQE<6!cJ&8Q>I`YW$yZBQf@ppCVvox0k$k@#uiDea2TsR8w7`1s_JHxpZE7K^ zzSIz!uh)xDev__K`7x(~HwbtNNV^O=N^eI#P;RX%hu*g<9JneCr|fATxF$WOaw3=V zc<{;Lu_07yT)q8od~$h)yp6g1-5YhO8szqYmf$a^zpw$!-Rk-6_~01k51zj;;HcUU z#|M73%K)pkdY&~tI85_?{%BWWsdUWmsJ>mRef|tq zi|W6nU#Bptw{-vVrE`$uJ=3=;ue$oa(aM$5W+_*4VH`(er~x&w4&6AoFCOz94Kpq& z^q%mOHrnqTN_MO92Q@0-Jq={mbl&n2XrjcNOC*I=GFfviQ%(AW4EkZ8Vf)+FL|EXd zAHgLK9Q%h&3~6soYSKq}I96j)s0vP*`D&CJ^IL(=rvMW`nkDRia;ECZ9?z&*6s-9` zQ1q7NJEh}+@Id9Y;a$W2CQ1X8unJDb@Mti`sHJCfgupaJw1zv6~?ZCVO5GltN*nDWlxRXZ535Fyy7 zMFjB&*MeH{6Z%T{k~QakMYLDiTaJ8tFUkg1@1@y^LR&~(8w?gtI%A@y zl*K;O@%%lzg#DApA0Bj5n?sXAgvAo+z}ZnauTK_icwn`wZ$3Z>|u9VolTuRoK0)Fg5-^}DTi6Y^S+97fJSRj z6UJc&jwXzwiH3vEZMECY+Ie{}2QX327(QG;*i^$L&pi+;Z|ie>Q$B_u%@8e(Jh$Tl zL?GP|Yp6XaG`usHN{Cc57*5J3?Jk-D@FSnP;}p#>?TjP5 zGs+#_T{}mkP!2u`XKyYL<8t=LLr0q{n8U4B5YZ6@xAQ52^H?Js5qw6bCJ1PP048NP zABlX#F^GPkVK`2S0QLY*T38$i8IDsT06&0JKRj}-@Ub>mki}{ZAB&7*!41CUxUs>Z z;dyz%p;{rGLm7TN01jmyIP4CE9sK7%_JXEIPPV8P)tO9+brKQPQ>u4lftyFwT$|0K7- zM~gKgOmHFc7V$q|Kx~9Fg_-4WFvTpNEJR#uTnIk(58+2=f4c~Fc4Ro#FcA!R&b&1s z4p$~8!WrY>Y*v(wBeio-s0czzfOCY2AWnln8;3f3prk=oz5-qZU!5@#TA8_)>{5K= zgYCf1Y>N1kon<}E;T$FTm4-5}#px?%buO60w~jEb91iEED%-~^MKf>R)ULY;lGy$4BmV0DO=8neGhKf6}0flsM*~<`}3pk^ttil{!=c$ zyXERFmtR`2dCREAgLBFkt!|k5z|aSK{{5!HtFPX-z0dt09g2A&A_B`|X#n@7cBMjz?=hHLl%_pPUTK z+xg6*OvjQv%rTY*yDgaYi8IV5VA&*Ws;N;(+LAwBGt?Z!U0{^p2 zF`rlrIKi#j`A+Q|!g6hoXlrZ00(sV%_p~#GMRTY#KOEWeZ*n+uo%zi;3lyjGVQ2nb zRz~2=4{_FwM5!VjkwLY%^j2$R5SO2UMMT(aLE+asV>FgF4Y%2yP4VcAaMp2#Ih$JT zwh(3(r)S==%->+E%^(>?6bCw-E%||gL-sYUh3EH13B&W_>=sdn<&Tx4&Ent(7C!zt zExdgCWd z_U3Z1(DVkF-tjpJ$r>7GM;1F4A}BJ49V}x(TK%BQ29j&Wd)AOi2gj;mkLrO-p&)-8BQHZfFrV zc1?CCJQkOp=*}9MnlYyDXn7T)zD3lIO68!q^z8VNoEQx5m*wt~o06IsGuoY=!!z6# z;pmrB9J~fJ}W&X zJ*k&_w4410Z?K5^6(QMC*)dsJ8Ci@4p|QD{nOW}aY!xd+J&UN-H#a9UH>Y2G4)gwI zi@2eiJKfE4;*QQp$W7zIREP}7R8d3HQaM&i1wa^|!S|l-aWWEEqunENlX|3&%*aYJ zfEwUVO3BV~XK`KhNat$?8-ahai0cNp(=tZ85tPJ{sDTRNd!#31xixxHHKxjX=n|jp zj!H~KsboC>Z&YeZQaX~d)oT&)ruo!S_bmor=&xc-TIf=1`+icwK@<;K* z9f-19xoPq>f(17yB7$2Yo}6v1P)9vvBdN`|`J?1LO4~0hBSFJo@$jfSfia_v496)E z0{#F_{m|BOob6;*#Kp1Bv9tIhqMav#YcPKSfjv6*3wuruvoUn{FMNYi!PL?fjxdRc=$hrwAQoVGCM6VCh> zocYsPomm~>`EyX7_}rX~oQ#ZAuDM#Q@SOe8zO6QC132p1>}+W`9Cl~^Jcl)el|5^} ziZJdN5LkzKlnGrBVs+N#`eH^xVFU$n?K<<{<;T#9TMj}+zAKdwmx_&U$4$1nth-qc zr84hxoxK@IB!Go?jmbPj^IyP$+UtoP(WnT0P=cUEe)gzVr`2E9i82}WlMHdtWkFYu{G>zz0%29`)Og8! z13S6cT=@JD4?CFxaHOI>^Fuu4znja?^5by0Z1pS3#&yvS)Uq5J3uY`(MS0jN0#wL| zEPrngTqYW=EN_vOTUjtON$Yu2&=liwf+1>m*z0mL>BzP`w<>2xYi$$xmPQ+~a64m| z+~C)0N!EpEmI8WVcY3q9SRuMwMAxnvnd7ojl9F>=E|!iq&G>YWi+kyuWcL_X_l(pu zcXm@(bbPw2cSc5*JJ}td=!#EIQ06V=}#4S-S?KxAXaE)YL?vk0HC!~VcQYc_tVX&|T+d6ibI^q^Q4z%7l zI4eH0PewXhF>cKU7?_-uF(%uRH@mqdZ({5??s?Lh$GQ`8vr=-#HSg!nN=wPkhN;jT z{YQ_!dPr1GPFBi@+#GjPS6X&LMpkOdh^DSV?kuG4*t&U3{55rT%}ve8&2o24cjxA0 z#iurP^~)WRnv%f%;J}Q>-02-h+xQbu96;^S*df@Bv zxmGbBg{k<>4{F1AgV_CJ7@uR<-7J;nK-FuCkdOCXj8W8%=l zG-2u%Q^QGqARS_+TeN9)Os!)-`4O06=lW^H;c)E0M^B|YGLKyGk{Oq0u~Oi@35=h9 zz|=9OzUA9lFL8qhZl*^2IL`*9pnIUUS+`mYF@mSdd>sRfK@3A*P>H;9KYlnKH0OJ)v2V*uxdbmks>}IMBXYt$oy(GHC7 z7<$c0j%z3$J40{O3yL&jSw^sAm ziywSEw8uZtoN=If%Ajktb4dz0=kFGf;;)U zt~SqH@bO3dHhukdGS4iOq>mg{k~}i0Wbx7!Q%cIp(6oJidkVK0w1`jiH3zKx_~YBt zlM+i7=MSQSXZ}jB4-TjJ-hZX7y9#5Bzz(; zM$V`%f6s`g-_|`(MXz+HeWPp9nEM;izrNf!TtUA|XM(0Yw`@*`b2^C|KBQpBWEz?L z^u7a!wl-2}e(#kBqq>hzeUQ$4@;Duw*`4-gh0*vvx6&8uH$ALi9y|GS<2zcsc{TXH z6LfRxWx8qTX{sOo41M$MmjhLr-+O(2+Kg_aM-HJgOET!_j2J4+u+x}6jcDD5jgKgp zdk>vz7WtP&_uw@Q2E&@z^WWdg3K&;F?X- zrq39p(wx0|CFtCqHLVMuZ69+WuW|I=iFZZsnb_3tv75v9KXqqx>4&4DznJ&;$HycO zrP75XXkUI)+LcwGvIe%NRj)t&!qIudqL0q$AH8wrDEG}xm(q0){YEYSQBHrGT~62E z@jA_TX{HDNuSGj82i}bT{G0et+WM%Iwme#kk2>1%!=tqc2cCc6V;djeKURmfKNd=F z4`hBnbRV61cLeRpYfO7bT}PR{+t3^RLuq@8oeERK==}lLQ`il!GXAUd*BMu-*TUcE z`o_Tjk_SKduy@*kk9TH8(5VftQOTFD(y6arqoR$k(vh!UqeGkL&`+CY^D&E#eld-X zuAEFI8)wj(`4cI7Xb(F5?jyAGsXx=+Oec-*-+?}PWi*{xKb^|Hm`>lll~45>y++O< zSLt5HfBy$psDU5+`=<9@v2(&*bn$or{d#IIoiE)-C1>~1iLxK*&J=%3 zB|mMZv*)+dXB(E#sG+^6?7c^5*MwVXZ$>@J?cbT!Eq{mT)K;RB?`iwmC3IusS#-lg zSE$`|#=oeXZv3;E|0w^ynFCht7|-~NcGIboyQqlq9X-99j-TE`$IkAjqSO1d=i=h6 zbn?Xabo$J8)-x+9=aJr2{CXcM7#l(Rb8n`s0bOa`M{m;AW8cx0V_(tkPv57To6e=i zPjLBxeDa6o+B&)+{rGre8a=ohefs_@bZN``bpG49wBd~xDZIrZ zYWWgTmw8vI=lfUay4z;a$4fpk;s0@F?1~*vG@+7HyBNnlDmu@&%ZsS!*JE`2;!!&B z>k+Pt19ajH*T?yv>6elnw07~Uls&8)9i7#Uc4XC~1LK;~<3qa9KWF@dE^PTH{dV9p zS~B}(s?%}_-Tf+2r@2H?Zxhva&7#fg*2aVHSLlM)_7(n8#$U{Mj&r$>T|7o7E*__n z%crRL@(DVAsfbEB>@3U1FT4Lmn?B|GkMG0y@1t!QVRZP3)-)!rFRgy_1-f)}1Dz|| zNnfm3K_S;op~i8msac;To1l z(vkHa(EXi9)9}H=>9OSD)VXamMYl*QIa7MR z-AgBr6w>Ma1-nn}-!l8`@m=Rm|5`$2m&zFb<%Ro??yuLaYt)HHlT#SyrxgG2Lo|3` ze>%MH2P)gQhAto8Oa)&or2OmznmK(c9XVP=FHD(4x%c0B?&rfhA5^$;{gLIrklP>1 zc>eG=RDNJ1UEH^UP8WVfXAW*#RC@Ga-FdIgK0GEXnz$kzyIE`)vHzy zU%qTv{|V_MOXCOhq~1NdT^-?0C{9gw)8xs|QCemO_3hPz-kACfojbaNCQo|$>%IH; zhnAL<&fECa23o#k34Ocy8~W+U&qv=|Fh8l!{e92<>tAb9fPWA3e;4!r;_+=%R$NFY zOLnsk+D#?g77KT5qPg?taoa3m|5qWt`SSA}i(a2Y55x|j`#N`|=~JiB)~#D<@7}$% zh;j7k-ILyXV>Yc^{_%U|QKl%-t`?ep1NgKU2bbmUYbWb1Z`wf2LDcis%U9BZ ze=eZBC!eIDLk3fBZVvNyBW>EaiT3T?$1;{j?e4jU-v8%6uO2yiWF+7xCM5ju(7=8) zYsL#yuww`9KX~Zr)oWJA&U*QkHxR$)W!68e|4)?drQ^T+M8(|JPh2Xdb9DCIH5)%m znl|-CTKM6IH1F-VX~TvMPwwBpzw=vfzOi)N=v*3=nMtcZ{ghU(UQL@eZKNN5_IrY&PfkEThJ zCeeE=SBn=frj;vK(z-9#Q$fLY+Q|HP>#etF#>=nJGx_7VKRQSsyfKT`tzAcRX3e6E zjEwIJ3JPq1w{K?bO7Op!@gL)|ms~nYWsLvyl~OuSWwhYkIloMOcG9}pugqTj;1^iyuB*!?|eDB6{t$*J%Fy`803tJbLM+8T7*QQ+}QN+_PUkF?Q_Q{3j<;-h|Oq z&a(8@oSF2@2Zq-Cj1wb zo;b|1|05NjJxIl;57Eiv``8vJo^MQx`|=BAx1Bk6q4R}HS6dVnm$o}qdbWdi8ud&> zZxLPL3(<*%qiE-2wU6$9rgeyl$F*?AppW-u*P}~Id($r;#L)Toy3j8Rx>EV#9&~wC z+@VXW1}(h2dhkcI=7D9GRt;Wsd1e2v&oAmu=RUZPE_`@Dm46(2_P13-7X9|w153+S z4O)6>W$d!@l>?SvTHbG2`HDVAE-&j#<*Vc9;G{oOK}LgPd!B3(X2ieurMOjFhYPmh z1?@@YD<3=4_`o$q&@Mg-E3P|}1>1id#z*0!g7zXk-|yu6-JC`{_#WwT?B?`4@XYYG z^Zk~rn~xuSxt9t5Pw$LexM7f>Z`0~hLH3Q@pUY!gb_4CXfSIO29@HQ)o+8)+L3 z4#QEvX}4?X^gJ4@Q4MJe$8AlkN1KN*J(D{hr7P!5_i%#Z%Dhw zMf^cWL)tSTl6F0L8*NPqqVEzNbZ*^Cxklcr`?9TX_c-?P#PP>gP8|0~9Yw328FzSo z(wM!k#O56TbjsLM>*uf+hWSTSkLYT>EqvH~51TEI9b2kAtemE+u;jJ0gz)inp0G^J zd!C - + @@ -138,7 +138,7 @@ - + @@ -163,7 +163,7 @@ - + @@ -188,6 +188,7 @@ + @@ -354,9 +355,10 @@ + - +