From 8cff9b201566998ed37b5d60f7a4e85abe67f195 Mon Sep 17 00:00:00 2001 From: gotmachine <24925209+gotmachine@users.noreply.github.com> Date: Tue, 16 Nov 2021 15:39:20 +0100 Subject: [PATCH 1/2] PAWItemsOrder : Fix PAW items position randomly changing and flickering --- GameData/KSPCommunityFixes/Settings.cfg | 3 + KSPCommunityFixes/BugFixes/PAWItemOrder.cs | 315 +++++++++++++++++++++ KSPCommunityFixes/KSPCommunityFixes.cs | 1 + KSPCommunityFixes/KSPCommunityFixes.csproj | 1 + README.md | 23 +- 5 files changed, 332 insertions(+), 11 deletions(-) create mode 100644 KSPCommunityFixes/BugFixes/PAWItemOrder.cs diff --git a/GameData/KSPCommunityFixes/Settings.cfg b/GameData/KSPCommunityFixes/Settings.cfg index 7048e95..aa81030 100644 --- a/GameData/KSPCommunityFixes/Settings.cfg +++ b/GameData/KSPCommunityFixes/Settings.cfg @@ -34,6 +34,9 @@ KSP_COMMUNITY_FIXES // Prevent kraken events on flight scene load in laggy situations FlightSceneLoadKraken = true + // Fix PAW item position randomly changing and flickering + PAWItemsOrder = true + // ########################## // Quality of life fixes // ########################## diff --git a/KSPCommunityFixes/BugFixes/PAWItemOrder.cs b/KSPCommunityFixes/BugFixes/PAWItemOrder.cs new file mode 100644 index 0000000..d441321 --- /dev/null +++ b/KSPCommunityFixes/BugFixes/PAWItemOrder.cs @@ -0,0 +1,315 @@ +using HarmonyLib; +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace KSPCommunityFixes +{ + class PAWItemsOrder : BasePatch + { + protected override void ApplyPatches(ref List patches) + { + patches.Add(new PatchInfo( + PatchMethodType.Prefix, + AccessTools.Method(typeof(UIPartActionWindow), "AddGroup", new Type[] {typeof(Transform), typeof(BasePAWGroup)}), + GetType(), nameof(UIPartActionWindow_AddGroup_1_Prefix))); + + if (KSPCommunityFixes.KspVersion >= new Version(1, 11, 0)) + { + patches.Add(new PatchInfo( + PatchMethodType.Prefix, + AccessTools.Method(typeof(UIPartActionWindow), "AddGroup", new Type[] { typeof(Transform), typeof(string), typeof(bool) }), + GetType(), nameof(UIPartActionWindow_AddGroup_2_Prefix))); + } + +#if DEBUG + patches.Add(new PatchInfo( + PatchMethodType.Prefix, + AccessTools.Method(typeof(UIPartActionWindow), nameof(UIPartActionWindow.CreatePartList)), + GetType())); +#endif + } + + static bool UIPartActionWindow_AddGroup_1_Prefix(UIPartActionWindow __instance, Transform t, BasePAWGroup group, ref int ___controlIndex) + { + if (__instance.parameterGroups.TryGetValue(group.name, out UIPartActionGroup groupUI)) + { + groupUI.AddItemToContent(t); + ___controlIndex++; + return false; + } + groupUI = Object.Instantiate(UIPartActionController.Instance.groupPrefab); + groupUI.gameObject.SetActive(value: true); + groupUI.transform.SetParent(__instance.layoutGroup.transform, worldPositionStays: false); + groupUI.transform.SetSiblingIndex(___controlIndex++); + __instance.parameterGroups.Add(group.name, groupUI); + groupUI.AddItemToContent(t); + ___controlIndex++; // this was the missing bit + groupUI.Initialize(group.name, group.displayName, group.startCollapsed, __instance); + return false; + } + + static bool UIPartActionWindow_AddGroup_2_Prefix(UIPartActionWindow __instance, Transform t, string groupName, bool startCollapsed, ref int ___controlIndex) + { + if (__instance.parameterGroups.TryGetValue(groupName, out UIPartActionGroup groupUI)) + { + groupUI.AddItemToContent(t); + ___controlIndex++; + return false; + } + groupUI = Object.Instantiate(UIPartActionController.Instance.groupPrefab); + groupUI.gameObject.SetActive(value: true); + groupUI.transform.SetParent(__instance.layoutGroup.transform, worldPositionStays: false); + groupUI.transform.SetSiblingIndex(___controlIndex++); + __instance.parameterGroups.Add(groupName, groupUI); + groupUI.AddItemToContent(t); + ___controlIndex++; // this was the missing bit + groupUI.Initialize(groupName, groupName, startCollapsed, __instance); + return false; + } + +#if DEBUG + + // This is a replica of the 1.12.2 CreatePartList() method, for debugging purposes + + private static MethodInfo RemoveItemAt = AccessTools.Method(typeof(UIPartActionWindow), "RemoveItemAt"); + private static MethodInfo HasKerbalInventory = AccessTools.Method(typeof(UIPartActionWindow), "HasKerbalInventory"); + private static MethodInfo GetPartCrew = AccessTools.Method(typeof(UIPartActionWindow), "GetPartCrew"); + private static MethodInfo AddCrewInventory = AccessTools.Method(typeof(UIPartActionWindow), "AddCrewInventory", new Type[] { typeof(ProtoCrewMember) }); + private static MethodInfo RemoveCrewInventory = AccessTools.Method(typeof(UIPartActionWindow), "RemoveCrewInventory"); + + static bool UIPartActionWindow_CreatePartList_Prefix(UIPartActionWindow __instance, bool clearFirst, ref bool __result, ref int ___controlIndex, ref UIPartActionWindow.DisplayType ___displayType, ref UI_Scene ___scene) + { + if (__instance.part == null) + { + __result = false; + return false; + } + if (clearFirst) + { + __instance.ClearList(); + } + else + { + int count = __instance.ListItems.Count; + while (count-- > 0) + { + if (!__instance.ListItems[count].IsItemValid()) + { + if (__instance.ListItems[count] != null) + { + Object.DestroyImmediate(__instance.ListItems[count].gameObject); + } + + RemoveItemAt.Invoke(__instance, new object[] {count}); + //__instance.RemoveItemAt(count); + } + } + } + GameEvents.onPartActionUICreate.Fire(__instance.part); + ___controlIndex = 0; + if (___displayType != UIPartActionWindow.DisplayType.ResourceOnly) + { + int i = 0; + for (int count2 = __instance.part.Fields.Count; i < count2; i++) + { + BaseField baseField = __instance.part.Fields[i]; + if (__instance.CanActivateField(baseField, __instance.part, ___scene)) + { + if (clearFirst || !__instance.TrySetFieldControl(baseField, __instance.part, null)) + { + __instance.AddFieldControl(baseField, __instance.part, null); + } + } + else if (!clearFirst && !__instance.Pinned) + { + __instance.RemoveFieldControl(baseField, __instance.part, null); + } + } + int j = 0; + for (int count3 = __instance.part.Modules.Count; j < count3; j++) + { + PartModule partModule = __instance.part.Modules[j]; + if (!partModule.isEnabled) + { + continue; + } + int k = 0; + for (int count4 = partModule.Fields.Count; k < count4; k++) + { + BaseField baseField = partModule.Fields[k]; + if (__instance.CanActivateField(baseField, __instance.part, ___scene)) + { + if (clearFirst || !__instance.TrySetFieldControl(baseField, __instance.part, partModule)) + { + __instance.AddFieldControl(baseField, __instance.part, partModule); + } + } + else if (!clearFirst && !__instance.Pinned) + { + __instance.RemoveFieldControl(baseField, __instance.part, partModule); + } + } + } + + bool hasCrewInventory = (bool)HasKerbalInventory.Invoke(__instance, new object[] {__instance.part}); + if (hasCrewInventory) + { + bool flag = FlightGlobals.ActiveVessel == __instance.part.vessel || (__instance.part.transform.position - FlightGlobals.ActiveVessel.transform.position).magnitude < GameSettings.EVA_INVENTORY_RANGE; + List partCrew = (List)GetPartCrew.Invoke(__instance, new object[] {__instance.part});// __instance.GetPartCrew(__instance.part); + for (int l = 0; l < partCrew.Count; l++) + { + ProtoCrewMember protoCrewMember = partCrew[l]; + if (flag) + { + if (clearFirst || !__instance.TrySetFieldControl(protoCrewMember.KerbalInventoryModule.Fields["InventorySlots"], __instance.part, protoCrewMember.KerbalInventoryModule)) + { + AddCrewInventory.Invoke(__instance, new object[] {partCrew[l]}); + //__instance.AddCrewInventory(partCrew[l]); + } + } + else if (!clearFirst && !__instance.Pinned) + { + RemoveCrewInventory.Invoke(__instance, new object[] { __instance.part }); + //__instance.RemoveCrewInventory(__instance.part); + } + } + } + int m = 0; + for (int count5 = __instance.part.Events.Count; m < count5; m++) + { + BaseEvent byIndex = __instance.part.Events.GetByIndex(m); + if (__instance.CanActivateEvent(byIndex, __instance.part, ___scene)) + { + if (clearFirst || !__instance.TrySetEventControl(byIndex, __instance.part, null)) + { + __instance.AddEventControl(byIndex, __instance.part, null); + } + } + else if (!clearFirst && !__instance.Pinned) + { + __instance.RemoveEventControl(byIndex, __instance.part, null); + } + } + int n = 0; + for (int count6 = __instance.part.Modules.Count; n < count6; n++) + { + PartModule partModule = __instance.part.Modules[n]; + if (!partModule.isEnabled) + { + continue; + } + int num = 0; + for (int count7 = partModule.Events.Count; num < count7; num++) + { + BaseEvent byIndex = partModule.Events.GetByIndex(num); + if (__instance.CanActivateEvent(byIndex, __instance.part, ___scene)) + { + if (clearFirst || !__instance.TrySetEventControl(byIndex, __instance.part, partModule)) + { + __instance.AddEventControl(byIndex, __instance.part, partModule); + } + } + else if (!clearFirst && !__instance.Pinned) + { + __instance.RemoveEventControl(byIndex, __instance.part, partModule); + } + } + } + int num2 = 0; + for (int count8 = __instance.part.Resources.Count; num2 < count8; num2++) + { + PartResource r = __instance.part.Resources[num2]; + __instance.SetupResourceControls(r, clearFirst, ___scene, ref ___controlIndex); + } + if (__instance.CanActivateResourcePriorityDisplay(__instance.part)) + { + if (!__instance.TrySetResourcePriorityControl(__instance.part)) + { + __instance.AddResourcePriorityControl(__instance.part); + } + } + else + { + __instance.RemoveResourcePriorityControl(__instance.part); + } + if (__instance.CanActivateFuelFlowOverlay(__instance.part)) + { + if (!__instance.TrySetFuelFlowOverlay(__instance.part)) + { + __instance.AddFuelFlowOverlay(__instance.part); + } + } + else + { + __instance.RemoveFuelFlowOverlay(__instance.part); + } + if (__instance.CanActivateAeroDisplay(__instance.part)) + { + if (!__instance.TrySetAeroControl(__instance.part)) + { + __instance.AddAeroControl(__instance.part); + } + } + else + { + __instance.RemoveAeroControl(__instance.part); + } + if (__instance.CanActivateThermalDisplay(__instance.part)) + { + if (!__instance.TrySetThermalControl(__instance.part)) + { + __instance.AddThermalControl(__instance.part); + } + } + else + { + __instance.RemoveThermalControl(__instance.part); + } + if (__instance.CanActivateRoboticJointDisplay(__instance.part)) + { + if (!__instance.TrySetRoboticJointControl(__instance.part)) + { + __instance.AddRoboticJointControl(__instance.part); + } + } + else + { + __instance.RemoveRoboticJointControl(__instance.part); + } + } + else + { + int num3 = 0; + for (int count9 = __instance.part.Resources.Count; num3 < count9; num3++) + { + PartResource r = __instance.part.Resources[num3]; + if (UIPartActionController.Instance.resourcesShown.Contains(r.info.id)) + { + __instance.SetupResourceControls(r, clearFirst: false, ___scene, ref ___controlIndex); + } + else + { + __instance.RemoveResourceControlFlight(r); + } + } + } + if (__instance.ListItems.Count == 0 && !__instance.Pinned) + { + __result = false; + return false; + } + int num4 = 0; + for (int count10 = __instance.ListItems.Count; num4 < count10; num4++) + { + __instance.ListItems[num4].UpdateItem(); + } + __result = true; + return false; + } +#endif + + } +} diff --git a/KSPCommunityFixes/KSPCommunityFixes.cs b/KSPCommunityFixes/KSPCommunityFixes.cs index 54daa92..7aa4059 100644 --- a/KSPCommunityFixes/KSPCommunityFixes.cs +++ b/KSPCommunityFixes/KSPCommunityFixes.cs @@ -54,6 +54,7 @@ public void ModuleManagerPostLoad() BasePatch.Patch(); BasePatch.Patch(); BasePatch.Patch(); + BasePatch.Patch(); // QoL : BasePatch.Patch(); diff --git a/KSPCommunityFixes/KSPCommunityFixes.csproj b/KSPCommunityFixes/KSPCommunityFixes.csproj index 54eb014..2feccb4 100644 --- a/KSPCommunityFixes/KSPCommunityFixes.csproj +++ b/KSPCommunityFixes/KSPCommunityFixes.csproj @@ -57,6 +57,7 @@ + diff --git a/README.md b/README.md index 1174fb8..07ed9c7 100644 --- a/README.md +++ b/README.md @@ -27,22 +27,23 @@ Some patches will be applied only to specific KSP versions. #### Bugfixes -- **RefundingOnRecovery** [KSP 1.11.0 - 1.12.2] : Vessel recovery funds properly account for modules implementing IPartCostModifier. This bug affect stock fairings, cargo parts and many modules from various mods (part switchers and procedural parts mods, USI, Kerbalism, Tweakscale, etc). -- **DockingPortDrift** [KSP 1.12.2] : Prevent persistent position drift of docking port connections, as long as the "Rotation locked" advanced tweakables PAW option is enabled (it is by default). Credit to [JPLRepo for the fix](https://forum.kerbalspaceprogram.com/index.php?/topic/204248-*). -- **ModuleIndexingMismatch** [KSP 1.8.0 - 1.12.2] : Prevent modules persisted state from being lost in existing saves/ships following a mod installation/uninstallation/update. Note that this won't handle all cases, but it massively reduce occurences of that issue. -- **StockAlarmCustomFormatterDate** [KSP 1.12.0 - 1.12.2] : Make the stock alarm respect the day/year length defined by mods like Kronometer. Fix the underlying AppUIMemberDateTime UI widget API to use the mod-provided IDateTimeFormatter if present. -- **PAWGroupMemory** [KSP 1.8.0 - 1.12.2] : Fix the expanded/retracted state of Part Action Window groups being reset when the PAW is closed or internally rebuilt (especially frequent in the editor). -- **KerbalInventoryPersistence** [KSP 1.12.2] : Fix the whole kerbal inventory persistence system being inactive in KSP 1.12.2. This cause multiple issues, like being able to bypass kerbal inventories mass/volume limits, and various cargo part duplication / disappearance issues when EVAing / boarding. -- **FlightSceneLoadKraken** [KSP 1.8.0 - 1.12.2] : Prevent kraken events on flight scene load in laggy situations +- **RefundingOnRecovery** [KSP 1.11.0 - 1.12.2]
Vessel recovery funds properly account for modules implementing IPartCostModifier. This bug affect stock fairings, cargo parts and many modules from various mods (part switchers and procedural parts mods, USI, Kerbalism, Tweakscale, etc). +- **DockingPortDrift** [KSP 1.12.2]
Prevent persistent position drift of docking port connections, as long as the "Rotation locked" advanced tweakables PAW option is enabled (it is by default). Credit to [JPLRepo for the fix](https://forum.kerbalspaceprogram.com/index.php?/topic/204248-*). +- **ModuleIndexingMismatch** [KSP 1.8.0 - 1.12.2]
Prevent modules persisted state from being lost in existing saves/ships following a mod installation/uninstallation/update. Note that this won't handle all cases, but it massively reduce occurences of that issue. +- **StockAlarmCustomFormatterDate** [KSP 1.12.0 - 1.12.2]
Make the stock alarm respect the day/year length defined by mods like Kronometer. Fix the underlying AppUIMemberDateTime UI widget API to use the mod-provided IDateTimeFormatter if present. +- **PAWGroupMemory** [KSP 1.8.0 - 1.12.2]
Fix the expanded/retracted state of Part Action Window groups being reset when the PAW is closed or internally rebuilt (especially frequent in the editor). +- **KerbalInventoryPersistence** [KSP 1.12.2]
Fix the whole kerbal inventory persistence system being inactive in KSP 1.12.2. This cause multiple issues, like being able to bypass kerbal inventories mass/volume limits, and various cargo part duplication / disappearance issues when EVAing / boarding. +- **FlightSceneLoadKraken** [KSP 1.8.0 - 1.12.2]
Prevent kraken events on flight scene load in laggy situations +- **PAWItemsOrder** [KSP 1.8.0 - 1.12.2]
Fix PAW items position randomly changing and flickering #### Quality of Life tweaks -- **PAWCollapsedInventories** [KSP 1.11.0 - 1.12.2] : Part Action Window inventory UI widgets in a collapsed group by default, group title show slots usage and cargo mass. Applied to part and kerbal inventories.\ +- **PAWCollapsedInventories** [KSP 1.11.0 - 1.12.2]
Part Action Window inventory UI widgets in a collapsed group by default, group title show slots usage and cargo mass. Applied to part and kerbal inventories.\ ![](https://github.com/KSPModdingLibs/KSPCommunityFixes/raw/master/Screenshots/PAWCollapsedInventories.gif) -- **AltimeterHorizontalPosition** [KSP 1.8.0 - 1.12.2] : Altimeter widget horizontal position is now tweakable in the pause menu settings.\ +- **AltimeterHorizontalPosition** [KSP 1.8.0 - 1.12.2]
Altimeter widget horizontal position is now tweakable in the pause menu settings.\ ![](https://github.com/KSPModdingLibs/KSPCommunityFixes/raw/master/Screenshots/AltimeterHorizontalPosition.gif) -- **PAWStockGroups** [KSP 1.11.1 - 1.12.2] : Part Action Window groups for a selection of stock modules -- **TweakableWheelsAutostrut** [KSP 1.8.0 - 1.12.2] : Allow tweaking the autostrut mode of wheels/landing legs. Still default to "heaviest". +- **PAWStockGroups** [KSP 1.11.1 - 1.12.2]
Part Action Window groups for a selection of stock modules +- **TweakableWheelsAutostrut** [KSP 1.8.0 - 1.12.2]
Allow tweaking the autostrut mode of wheels/landing legs. Still default to "heaviest". #### Mod API - **MultipleModuleInPartAPI** : This API allow other plugins to implement PartModules that can exist in multiple occurrence in a single part and won't suffer "module indexing mismatch" persistent data losses following part configuration changes. [See documentation on the wiki](https://github.com/KSPModdingLibs/KSPCommunityFixes/wiki/MultipleModuleInPartAPI). From 45f55b62cd6f0c84866872ca74e4eeb8a3378a6a Mon Sep 17 00:00:00 2001 From: gotmachine <24925209+gotmachine@users.noreply.github.com> Date: Tue, 16 Nov 2021 16:13:56 +0100 Subject: [PATCH 2/2] 1.3 version bump --- .../KSPCommunityFixes.version | 2 +- KSPCommunityFixes/Properties/AssemblyInfo.cs | 4 ++-- README.md | 17 +++++++++-------- Screenshots/PAWGroups.png | Bin 0 -> 47067 bytes 4 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 Screenshots/PAWGroups.png diff --git a/GameData/KSPCommunityFixes/KSPCommunityFixes.version b/GameData/KSPCommunityFixes/KSPCommunityFixes.version index 41f65a8..2861d2f 100644 --- a/GameData/KSPCommunityFixes/KSPCommunityFixes.version +++ b/GameData/KSPCommunityFixes/KSPCommunityFixes.version @@ -2,7 +2,7 @@ "NAME": "KSPCommunityFixes", "URL": "https://raw.githubusercontent.com/KSPModdingLibs/KSPCommunityFixes/master/GameData/KSPCommunityFixes/KSPCommunityFixes.version", "DOWNLOAD": "https://github.com/KSPModdingLibs/KSPCommunityFixes/releases", - "VERSION": {"MAJOR": 1, "MINOR": 2, "PATCH": 0, "BUILD": 0}, + "VERSION": {"MAJOR": 1, "MINOR": 3, "PATCH": 0, "BUILD": 0}, "KSP_VERSION": {"MAJOR": 1, "MINOR": 12, "PATCH": 2}, "KSP_VERSION_MIN": {"MAJOR": 1, "MINOR": 8, "PATCH": 0}, "KSP_VERSION_MAX": {"MAJOR": 1, "MINOR": 12, "PATCH": 2} diff --git a/KSPCommunityFixes/Properties/AssemblyInfo.cs b/KSPCommunityFixes/Properties/AssemblyInfo.cs index 8b09eb5..816de2b 100644 --- a/KSPCommunityFixes/Properties/AssemblyInfo.cs +++ b/KSPCommunityFixes/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.2.0.0")] -[assembly: AssemblyFileVersion("1.2.0.0")] +[assembly: AssemblyVersion("1.3.0.0")] +[assembly: AssemblyFileVersion("1.3.0.0")] diff --git a/README.md b/README.md index 07ed9c7..d4e943e 100644 --- a/README.md +++ b/README.md @@ -29,24 +29,22 @@ Some patches will be applied only to specific KSP versions. - **RefundingOnRecovery** [KSP 1.11.0 - 1.12.2]
Vessel recovery funds properly account for modules implementing IPartCostModifier. This bug affect stock fairings, cargo parts and many modules from various mods (part switchers and procedural parts mods, USI, Kerbalism, Tweakscale, etc). - **DockingPortDrift** [KSP 1.12.2]
Prevent persistent position drift of docking port connections, as long as the "Rotation locked" advanced tweakables PAW option is enabled (it is by default). Credit to [JPLRepo for the fix](https://forum.kerbalspaceprogram.com/index.php?/topic/204248-*). +- **FlightSceneLoadKraken** [KSP 1.8.0 - 1.12.2]
Prevent kraken events on flight scene load in laggy situations - **ModuleIndexingMismatch** [KSP 1.8.0 - 1.12.2]
Prevent modules persisted state from being lost in existing saves/ships following a mod installation/uninstallation/update. Note that this won't handle all cases, but it massively reduce occurences of that issue. - **StockAlarmCustomFormatterDate** [KSP 1.12.0 - 1.12.2]
Make the stock alarm respect the day/year length defined by mods like Kronometer. Fix the underlying AppUIMemberDateTime UI widget API to use the mod-provided IDateTimeFormatter if present. -- **PAWGroupMemory** [KSP 1.8.0 - 1.12.2]
Fix the expanded/retracted state of Part Action Window groups being reset when the PAW is closed or internally rebuilt (especially frequent in the editor). - **KerbalInventoryPersistence** [KSP 1.12.2]
Fix the whole kerbal inventory persistence system being inactive in KSP 1.12.2. This cause multiple issues, like being able to bypass kerbal inventories mass/volume limits, and various cargo part duplication / disappearance issues when EVAing / boarding. -- **FlightSceneLoadKraken** [KSP 1.8.0 - 1.12.2]
Prevent kraken events on flight scene load in laggy situations +- **PAWGroupMemory** [KSP 1.8.0 - 1.12.2]
Fix the expanded/retracted state of Part Action Window groups being reset when the PAW is closed or internally rebuilt (especially frequent in the editor). - **PAWItemsOrder** [KSP 1.8.0 - 1.12.2]
Fix PAW items position randomly changing and flickering #### Quality of Life tweaks -- **PAWCollapsedInventories** [KSP 1.11.0 - 1.12.2]
Part Action Window inventory UI widgets in a collapsed group by default, group title show slots usage and cargo mass. Applied to part and kerbal inventories.\ -![](https://github.com/KSPModdingLibs/KSPCommunityFixes/raw/master/Screenshots/PAWCollapsedInventories.gif) -- **AltimeterHorizontalPosition** [KSP 1.8.0 - 1.12.2]
Altimeter widget horizontal position is now tweakable in the pause menu settings.\ -![](https://github.com/KSPModdingLibs/KSPCommunityFixes/raw/master/Screenshots/AltimeterHorizontalPosition.gif) -- **PAWStockGroups** [KSP 1.11.1 - 1.12.2]
Part Action Window groups for a selection of stock modules +- **PAWCollapsedInventories** [KSP 1.11.0 - 1.12.2]
Part Action Window inventory UI widgets in a collapsed group by default, group title show slots usage and cargo mass. Applied to part and kerbal inventories.
+- **AltimeterHorizontalPosition** [KSP 1.8.0 - 1.12.2]
Altimeter widget horizontal position is now tweakable in the pause menu settings.
+- **PAWStockGroups** [KSP 1.11.1 - 1.12.2]
Part Action Window groups for a selection of stock modules
- **TweakableWheelsAutostrut** [KSP 1.8.0 - 1.12.2]
Allow tweaking the autostrut mode of wheels/landing legs. Still default to "heaviest". #### Mod API -- **MultipleModuleInPartAPI** : This API allow other plugins to implement PartModules that can exist in multiple occurrence in a single part and won't suffer "module indexing mismatch" persistent data losses following part configuration changes. [See documentation on the wiki](https://github.com/KSPModdingLibs/KSPCommunityFixes/wiki/MultipleModuleInPartAPI). +- **MultipleModuleInPartAPI**
This API allow other plugins to implement PartModules that can exist in multiple occurrence in a single part and won't suffer "module indexing mismatch" persistent data losses following part configuration changes. [See documentation on the wiki](https://github.com/KSPModdingLibs/KSPCommunityFixes/wiki/MultipleModuleInPartAPI). ### License @@ -54,6 +52,9 @@ MIT ### Changelog +##### 1.3.0 +- New bugfix : PAWItemsOrder + ##### 1.2.0 - New QoL patch : TweakableWheelsAutostrut (issue #16)[https://github.com/KSPModdingLibs/KSPCommunityFixes/issues/16] - Fix PluginData folder being created in the Plugins folder diff --git a/Screenshots/PAWGroups.png b/Screenshots/PAWGroups.png new file mode 100644 index 0000000000000000000000000000000000000000..25883be469feb3ab5fd68f64c4896a12379cc4c6 GIT binary patch literal 47067 zcmY&<1yEJtx;7wFUH9YMIsZR*&FCiDN=z970;&^y{SzJ*{0&=y_zMC8GSK4VMi7 zi7ieCyGeH}+y|OmU)wN`MDbnT8gJ|I+QxxSpqYEtgX1MVZye-@ShuLX@8ZoO0#z1! z={KPti|OdQce;&Wbz*K~4=RUj(~(e+1UQU;$6a)j8&>@5bs((D{)M548I1iU$BTTU zveP}hO0%?bTksC)4X-tIk8^5Qhyj8<6`806Hg&uKxoD9@SSZzzq~PPnC?OH%6m4o& z2d1A;*grPlUIJE@Qtt|-x#`hh`1GtEjG%YtVF)-Eo_H*%I=iO>A`mp?4&dtAt0D3 zU;jY5+$UP;X#1s4K>3_@B=s|xZZ?thtkCQK0;?UwT6fL2C zQs`JQ3>4zR=pw=*BIsf;7TL2g%brMkEjO|bEiJy<4&>0~AH9}#E}uJl^5uWkQA!w?l-6^iQ6hiG43)|Gne|KfRw7K#=sCMp9D|2Tub z5BYlezoeq!Ac(393qu5Y2)|ydLUe)Xf#rUF5Fu!<|HdC~1@h*qFeo74jYmu7VzZYV z%|zSv4U^|rNQ{cW6vq{`565j1@ZsViV(Y$_)WfOoVcWk2RkCAC56~wMo04C_KwByY zQ2DT$ROWGdF($ne%^9oIA5$jB1Rvv9G<0~v9%3E_(u^YoDf9?vkpR}6mD0P;WX~DZCZZXq{u8U z%@Stw@d9#=d_~CBI7J~^YR-(+pL}la?(>gsp6+Yw>k+zTw1Siq+s8XQ;eX_UMAsmN zRb9B0;plaBGx3mNl_xm<+!DpvmQdSoD{|=HF?LP$z$hxh;Nxpl+f04qFdOACn=bOIapVq_9_Yly zLc2{v3-|Rj-ZkLzGRZY@bE`KpGn4f3fuzpOb#wPPm)eQCeYiWnHPWGf_l}yE6FF8Y zaL%}MZZ5^p1R*FWsJ^M`*Xe1y`THNSDOY7AKGXh>35n(|?$BqQb!iU?S0tkl_`7}6mxWqkI7Pr$ zYde$;qJpol;Y|@0!m3q|Hyl)gb=d54$cQ{n+pm4F_@q=;xCis!^7Nh zTa6X<=!c0o3FQ4Zte(B^efXS`V}1%RE-ivP1htxgU$wW;g!?h`#MZO6UVR`tm$BaC z>HDb&4D>UF0&}T$beQQ%t9Jw*8x$NI91{)_obO|h5v{_~RSI9t*Ee<>rk`s(J4E~i z?!>qivIIx-vwTGk5{L2mJ)pZ_k@bhBSs-GhsN_6MV2S5z4EldU67k!IS@XAU_pnh~ zELHMmh7FdG<=FI;`)ts@C7F#b)!{pvDitK+^NQ!*X;Y|^BsJ*y!doXrYttQhx0i@-Ck}WcX#)4I9_}C)cN6} zq21~{#@0Zg=B&lZ5WAW5S_v#Jxf>lb@j09K4SxBm{;-Vr*Oa4dBsEy3#B`w3-Obap z;v%gj{evq>Ze<|(=nXA7TjESN=BqMhOWOr|$BO}f9 zwhPBT4nn9j-H>E9)sMmZLshxAX9%IS7HKo3D`en}$Ca^tT3aEiEvA0JULB0(yOzoL z8>_kZipp3Ln2luijf|jVCEf4uPplq$1CyCJ>jJXj(P< zxqit<53G+9tWM6RweUvlt}DV%f#0DQ_Tv|JZoa%1!}el8*VPMVv^;GaEAA0Ti?yt zEEYSAn!ndPz)Sf%f9B!@Eu1qp``n2V>lk3xjHYsaovk{7;N^9{d7IPu)L((=rD-!) zXm_%5qwyB@jf!4I`#!*Oy0c&s$%rRwyW_HZ}McHtNTpgdf6t&V$$0 z#_X2xYcn#SQ{=+#Ys+Dvp`ZB_MoOuuXdL(dYDAF;xv#K$p7v$!-ECrC`W|a^c8d0o zjC4$>_)m%quGg(V>Yujz)bsIU;^XTse`>vr?r9Nim&sLb6ndUL@yPpK9lx8*Loiv^ zS3Q6kJ7hv9AP`uH{=!B6H)~dMc3>{ywwp>J^F!B|5$(xBi0TM>>2v1eH__&10em4B zEby_mr#bXm1x!`ql0d{8w6k%>B<*HzYiGj0r61ylPB&XJlW ztvL!xMh#EPf{&@grZTca5VN%#Uwb3*2l@>H2L2AxfCVYrK;2L*=bR=!`%R{#*13Gf zyFN6Dwz+>oFzdHm?)u?fcwi7LlKa|9yfwez_3y3GP;(-u$bFZ|HQe(2>gM=tB}c;%p2%Ex=bOEdBQW)3 zFJ{Pg@L`e4%AJbrl-rOM&(1F9nf~r@YfD_$=h^n&TB*#&q>C0~j-Zu0i79^}Cz{o( z|6&rMAW|Y{tBKUdu&Y<`^fTS9(*z&58Qoe#su%t(iSBO{THM3gsT^4*UzN|Un2col`L+9&oJ|;=kWIn>prbLN|^@sgwU$){A(Wp>_T?#0FV97Y5|3u4f?q)=#+He zaL)40AlFCxuk#Q&>JjRfc0uKHP`VNvE4WQ)KHjv)3J&D7@bChDjlyPJaa*{7xsI;d zi#ljRnZXOIVAwBVlg@4lN?#S%zT_ld_B=aYJ zeNKcxBfyX|R6bw1&vdcYL?;v?LsP9Qw zqVPL@LO#){6xz8stS9M3m%AUhaFzIGiFEbFBjHTMB*MQuA`)*cgkb9K|%Z}1lX zyxscZKL2|v0A>ex;k|GqquBnXe1{4 zob9RbU$#s{)UZj91Fl@oO(7(u-)v+^mZ!c?{uxBXLE6v0A!%uhhV~|B2~t$`4Gq&? zYFnIm&P@9_M`ubX6<%Ktq$v4UD0o7o) z0Qc_tfs~$s!F1rYK)daqWt@>4I%EKu%+-;E5%psGiEc~jkTx~$G`PMK370PdQSUEpnrf~=Dq(E|$6 zqonTB;BSP*X6)h7;3#!|q)bGKxA^^L3$4}Ijcoy6hHyDa|S{b@?REwn~K7bsB@=tY*&&w;;i+2c z5CYG;l$Y*#w2aGILtsrM3p`!5VZEG|D*^Z%KZmr8fw*}>#`HcgWrDWKV8ax=7-V~u zqL6r8FS7gBIet_o5=T=7qxpyiP8uDkgGq^^sk4Fn1%N&vv>OfI1sX}982$6xskhrh zbf)a&bv%Y*T+!+(?|2hCU|i3`zj1gNC`QrIwUm)u?>1j+GvN7k#&Pw5bgt4u5HxFd zFZI7tc}5gc!Kk_BJFy& z6jr;gbP|HjzBHjXtJ@{!_g8!Guv%9-e0^p@7M$(cK8z~0*+8$n+;Z%&=t|JU zJsX|KkM{p|9@?%wP<@xWcC>X>7q;3I8yg!ckweYW=2v`}{=ijityz1!5Iq||V9ca< z{(V^4`}$ElEL=A5$1U8aBF@*xR&6=j*;e-Ccrr-%*NmM7#eS?76t@&Zlk z)!>L)Xko$C#ym1Yheh(Gvy_g7&E zdTG8aii!l&Wx;hxW>YI*-ioe$GO6ykZaO|+MqFH4QgW+TlSTEHQC6M+O*$%A@^XFc z0x(6bt@+Sb2i~YC2Q0*(cP#zJ$^zJkM1u!rsHm=s+C@?D119WPB**<*oUX_bIXRRm zb8}oGn*KoFc=K>&aMx6nQl*c6v7#*+eY|vf{&{w=zo=}~2vC?nXt)ZeErx9-_3l_B z+5%jB10=Hv+AOx4$hz5<6Ns9pr zw5A@PKi~Ad7J=zsjrK`3y)t$RLtER?Y!k+mhh8nKg)>f|pFrvlnJobBLB!>APM<%T z*{8DhiTZEaC${DfFT)HJc(2^@$B%K(ytJw~4u%8*KlTK~oUy>1oGbpMghB|V!pZtY zgFBphe$>3_N_AJu0()44F=FJbILbSip!7DkhOmcka~!8P7vhGrYrAK0RtptzbvS>? zX}ObnkqOCg!e2ii$=)J*gLZG`(@Mq7!ioE3tioH8f2iR-qF#m+C#`KHRdZIDe%_gT z($>C0?Ce$MfCz$W%+pCzjljDXFpN$9Tg)_Fydw5cTe7?GU;#)IY)93Q$0#dnepATr>zPXdQ}$vRj?jFimXoc*9t#_n z<7(?{vWzfPooT!O^$wkJ%BQ{0wsFIYb~%ce?C_5>8+jc|&lfOi3<>8KzbM}x-Z0JB zN_=UU$=1NkQ%va(l2x;FaOz%Ih-*Mfnq?RXw)HQu|I#6tZ$T$3J0L4ZA;1)@5^~vW&qva!GHHZVRbiS|;hRX)BjLR3`owHDAD;w|QXDW~wLPBj z6-;tmGg`^*zv&~XSEOfhWwdjk1cStTB1qT*ZFHKH)YSt)MW@wzjr0tuxp|%u{?0d3 zq6JISrZm0DF0_V_p+tPF!ak(Oa9<)&MKiB+Xd;gAQypkSNI=XA3Gqk#1B5gW1gnDT zRy6&T3%mRBalUd}z2fXkK+nBBZve0+jaBc4Bm6+~fh{ztuTA(OFLG?(X>)rUw8=h$ z#e2_QM(EoIquS((x+=5tOAWkZG%l!BecR|9?U8n{FZ)K8z8u$lod{#249=d~2MvAE zHQH7QsKI+n^{i`at%-(@{GS;(!;{*;Dq(q*)kJLDM@FK4$78)>gSBHDLhAjMI_}px z)Ybg}gcYyHy&WQ6m&)GU&@uh)xq-seCT-@f<>kzHtgmov%;e}fV<9RHE00hI@Mb}N zBg4aQigUOrKAF%m=XWldixqxOtn=J*zli!&2&%eQQ7B=h>Njgu;Hx9Hk( zDD%!P7@5&_{H%LswrE%bp9rNzmj$ail_Ky$_A?bWk722SknY<88ChFKc-j;mo3}-Y zZ9Rn?JFj9?wI(qf%5(qJ0e7Ju%MWSHUT}*PAi@%4dKEKAkaE7Gli&=>s_5l7_PJc{ zk7c}p^EK>m_bGnZ#mvq&O1Zf&0+TB?CK*~-(*qVf+*i@Yup-$b7TxRq4n;SEJ(i{Q z{`&s(V7sV}dbm^vNG^>tuy(E0Wc?9DA)rJ;rJ@_+gQg4lBI z)?Ch%T`61^ojO6MOaCmKBeDcCB>9|wnnlyz0>mXHFT1lE-DdYVi4TkF6~&$qR#-Ni z2ZW!?qor`5->uUnIbO}ns}^g94;Zg6ocI>V<)0bNJ#R6?ULSOEd$w)OQ1+DwnuiAg z8EJ%(WBW7umZIPt52#?dR4z=^Ah__AF+mrm2%>ms;o@E| z8>6pPxbX3Z0~_oqSS@M3@V zDKRtV>%s#HlG;HO1 zr1u{d!o!owAf`Y4-YS~@S76|+>+5WZO=I>dUt@@_4dUd6A)w*dJGxTihO&ZW`<_a8&e2MlqKf0WG(f z{*BJD!~DBgu4f?}7mWx@y~kq-Oxwg_^`4Sl^-j?M7<4aGDhz&?}ldloyvebod{ z&`$%3ZA7LsnNO3EZ_S<$%Fen*gCTbR)p8;w6@&eQEu=^45RB|Uv7$UILRsy6kWTymMrha}o%k}o zc-`NlWhIM&HF9`(_-}dI^ihRK&B%;l1HXev;jeL~xaT1ipI#}{(;XR8Xjp7~>G++uv z5O5`b>VnmZEBzgqg-ZO(cV*e>~Cu zH>&DFhopGfazp*)mRL3OT$3*R&QMSxZ&8hw_7k>Xp9fLhpVv*~XfWARs%7}Tye;tn zd?>1-R8w9~hNimtpQ?HhXv=C@4816M1e*Oa6i0qAy$QYgcMVDZ5wIm0DZwwUBI7m<0WKVTr=?G zLs?#2D$WotkH5^}<>zS)S@itd$q*Co`&a+z4Zs9yWlO8~!*s9np)nTS*wiF0F;hf8 z10pOeT$&M8Hh*RVY>T2IB!~&xHe)0fdR}a>_70DT-OT2)&pqSXsmRZa#+W}V8eUs z1h&YMXIsho&TOcPTpBxiq(pddF#r9^Y^t1^uEf2-1QIQ+WW@J<;%*?^R)GHp`<7VV zz+lb0>*DIl;2|+G!t)N>N6;gkvn9*4x0)VkU5<~N7Qp^_JiQ>7cuOp%t`4s#bVYU2 z`r@y&YZ-yYwLgffGu00HDPY8fI&R>fWlcJ-D`bM^@NWbo1OyaO=D4%LuZ{&;+~4R~ zT5g*}x$sJYjK?YyYIWx_)=wULhTf72fTEs9f?*|)FMeMA2zJR}2|NZ6L_x`C1GXWT z%9=P~#!|j@!7}T)>ggeHh6hZD(PMA8kf=zbsnjcoTEsJ3bZrxpbRO^TB@1m(!VD!o z@X}Iu+LLO!X&;yR;c1fcS1F9Pb7>f2fpvtO;N7 z!QHaXkw#xL0PCyL;R+74K;?EuowaDsnd`{dd%TGLO?H4fY2xs4Y4iW!l&?rt0eSWQ z`WU7i4EGqJj7#7vyi>+hRlX0`H>{N%G??I0RCPL+UOAQxyf{eKE(O|+^ zmQQOyfY5U%Wdp3p6F1f8smdbL%qwZc(USsOV}J!xraX%y3>r7h?Ix(HDyqXoRH`?oPgSC^HE*LZab zooq3s%+843=KNI}77jLt!=WtDOC@r~vZwZ>A}Zur`jZ$z|I+hlC4xyO*TrZvPj)bg4eHvnwM!sdT*6`s+Co zVzFZ&vINnV15N8QfyEyFtj@gKu?4k&D^#_Lt|sPQ;(LcE%A->cZn zR&fRm13SAdjY=%w$Fak3WBb8+(%4zcu3XzMmXT*My3QjHTvqNU`dh{mN7gT=SFG&=;^mcs(AeytBMh zVZsxETG{94Gx~ZLv~{%YTpc$q=PrO}41Tdtc+?tsp=O68KFq!r;Vd%`AY`AO6^a85 z3b5`*m%YzhO~yN$*%N#CTyA7Q;1C!qVay-Nd|47A=i^EQ;H{E9VVJ>lWBVPStJUZ< zOKamv6}B^gncnp-Pc$SX(?Q-s#C&q^Y*{jo$1*Pe$^mVY$LrE97kgnYMdZyr24Pl+ zjJ3Rwth_Fo#v3|-7IuzXnt40|tsyt|ICl1?a`;iMQ20>86m!h2?@#O9{Wb0E*?_60)0$P@gjLfSiPGlbIv@pWHho3T)M{8cg zw_w{pG(-#hg3LV(XDtC|K4P;`y<)2z$BRE9cMne}{;6bvSDOE3gvle|FB6bLxNMiA zfa2leg5h$a5|?2_?4VigM6FyH?+u4CuX^codxn#iaCBOMS({_Hfq`MIItRRx^__!& z9PKEDvbLfxPJJ^?ue>dHtLs_M>j^nHil}RD03o15SXBWfsZ6)4Yl#>M$K`NQULz%J zSgVdQPG)THs`eX~(KVEpmnAt)C>`@j2D4`Ec&#&mpF|G*3Fk*sRW88#Y|^5!akKjQ zPs-ltFG*&hDJ_6(g_xx#AHd0-3qzPlIEY9k{91ogZ)k$Vrz4v%<5bkE|E4NaQs_6N(*y(h)?@S|~CH{_uMb4B%Lu0P?*IjU= z`WM7M%9hhVc+r#PXK_`z7;u<~1nmcD_OD5Jq(F^g5Pc2?6+Q+Sa<$cTJbOaw0k;h( zr1o4!wY}L=WCZDfbRK7%@VQPvlwze0&F7lwF+u|YjpcFPCL$N{2S(_(h`(|U4#g9H zE>+sgj)+r-+=bkf3|-iC{F{>vi6_Kt+lHHEuJPG zOr6%kR`A1lU^horwl2QxqkhPiyy-Ka%EliYS1#3VQIM9VXH@eQ-ibQ0m@B4thk+^J zB-muf50$3hz2vLr6SUT<5zd*aG<}lzY{>~VRpMEP)RNPuh>nh9T2*AV+?dhY;yKo6 z;usb$v#iww*`gcWV^!)96EJ7B_V*5n>#LoEB>_#BPqb7q`UdwLkAV(0DPw4pWdB!>fr(5|wXS#X&Q0)xqLXuLX;7alOS{9njKk68Ze zcL7)If6cD{`~(rz$}(`;IJ;UN*GnheN-I*3NzN2$PrS!Xk1r^Il|||GZB}2Bxk^%3 zcj+XVaB?OrUb&a9E}P3Wis(8#yy&e+v)KPNp^QIPj~Pm&=!MYJqr9wp9a3SunpNO> z)Em!Lk&TdeV_Jof@F!w2o@cz;GW}}^TH=r~2o{jXO3{JnOxw>>|GtiyIviK#&C!vO zU%E^13xzJe@4QGCq+KDFbu*<75C7CZC6sqGD%LA&C~t`kN+2J^CC5i-mfUHL_bV8x z9mT`|LuJ>=<#R01Q-)<_&{0J&0CBN<=ow1&QRpNeU)yTW-lT1oAf+1!DO# zm{{t;zXKQ7%A)iYut z*4obXpR#RO!+pIv9LwM;(L6tAEPKjzlavUo0NrH zh^+TVrTO6u0s_hB=WaO6J`db08*6JLO+z>!^VKV>lDDu(>RZfMWhS?g6D_oLV0(Q! z9&WUIH5o@mMLh;kdt#|u(#POv1W}%%iMUxpIrCwhZd4sutp_jQWwBQz7bj+%ws`Dw zXPupY{yDa*V^i;Fc|g??o-jUA6%aevC#>Ev5YG8 zWQbH&UJg&1r5S>TPDrX~F2xFRXSpUO0JDzgeUUY0$A5ab-tMo6+r-6sJg$a+3*Qc4 zrfNPVIU7RDvd6m7QivT|s9pTfz`zjY1#|u!HVzJ(+on3iYX~Oo!YnQ=Z8Y-=b6AY(ut^Hdwnk*s|(MUlA{tTe3fXKol zA$KTHkiQe`a*;WDDM91n=h3hB6QlaWh8+Np4jT?rVhf>N;!y^uw!p-NbY9zstZ(P! zse39km5w(bnDtto^Ow0zyOl@|=JA18o{@1?FjcqWu2=92=Gn1eP=>yLRODFqn_@i- z92^^ky*Ta{(CD_9?WRZ`Ee*ZBqbn=X&COnE@UT+yRV3oTu}dHdktK%I$>#+9Jiju4Q&bBOPRIK*92R{(SrH__6&$pSh{IfMx)PfB0LSS`V=xv=i@`g0)rel z7*au*)q0F(LGh=08g0IZJg74Piz~1OUiIP?GrVo2ZxfS8{aO z{(<2x^I{L<3t$4iu4P8m5^@GU9K9?}z*b<}2gcA{UAckQpt0o`)GUCFCr@Ln3}6DM zT!Y;ArY1(qn#6CNoeYBPg#mAXE>OUkI(S>iNr!bzmyinr0tH(~K`kxBJu=iLCJeuV z(A?;DulUX#*grvUO*A*ba+AKnsmL8yr^X8g@dgyx=p)it4X0>_t5c*jZ5mqO{4pQ1 zXYNe}0C?^IBygZn-MV!VXf;`|;;BE6Sf)Mvz%Ht{=RlN{l>BCkX$cI(EnvyuMM}Kp z)TS4MfU{P05I$<>>?~eXVu@`t*Nm@cy8zV=IMm(Vzcq#%4vs1}vnx0Vt0%WNAaYCe zxQ9Dk`~vR>f^e|qcMWm5wj*T@8L5eo!r-o7oF$eV&R3C2Hl(u%t;k80fB6l_tXvi^ zE=1vHnHlDcW5z&8z>x~nxU<93fU7+C17jq;t-Ue&11uR`Im&Py>}QQ`jcb11}Y5%q%g9sTyjZf5{i&fc|mZ?PmkA%&(x%ZoGZ~ ztoAWys@$Uo1Bl_kP85>}bUf~)wwyYbph?J{vP`+z9v^fK>2?CKSP(PZ03HeiAXL($ z{Zv0|g=BF?sKIdKR#OAfHI3(Eg8QqZNHM04l~FiQ1Ts0lYO`4A3#V_a=g)b8N^E>s zVDSFyeDYzsw&*t~jT+N80M#)i3%)4~5QGU5Z?1EBgV`6^F+7YNDe+O=oUZI|vizqC zWpgHI5+3RvaVddwbI#&qrL0=2ZJiGNO6EiOYxCfa-_#%7VIW9%Jo-DLT7Y61%=X*;r9fQ z{l?Qq{}`cx)KcTZm@wEB_OO2LGGfJ^qg+_>;n*m-$?Y!8`a{ux@gEnVjamzYSMR>v zXY_n+{>!VOCN8V?xP3w_WRYqebqb<6788G{AukzVX#7lfB%_(V*%VeGZyX5#k=sg__NUfE6+k79=%Rt z0Pzji>)C)E{a33#5a`iN-i{=|pN>!THEz)U9+yM8=bADT2U6o-t8jl#n*+mg{c0v} z{@9&CAQ^~2-=Gf4jn}l7-F=DGN_Bx2Tmkm6{gVWiPLq=%2qI%K%Hn-+Ba3!A?k{b5 z04ZdXqwn(Rg1+c}qqV-$pX}KjQqmi$@&Kt~2BECrZ<@KC`2hrQO`30QYtu?_d+j(L z;P&gejjYm^s5Y~VH&P&{EAif=2+hDA)(aqbR=f>Bc-!0dYaDZcb(xxpJB5W()8?ZQ zo#|cK5o_vI8~*eJ^0Kg*@|ojb{;i{OytuovzKNa=(pd5D9q<9EzQW3D8Y6jL%*H=o z-aP6MQsB(R`e@PiP0&N5xl^^9Gk|axURhT0anarG>_G3n>L~(0-z3iVSK@E z@}NR!iy-i1ngvSEfEhFy4!^Tsb1)fRt(ifMfw11N;U+x*7T+0@>@e&{U;^|hV+E=qJHXuiIZCcD=J0bV+=<2QND zZuZf<@$|;ws`zhLwe|DpiK1tyC|YYK+%AfHPL0qEbs4W`d*(c?orQ)$FAKu=Z-bgq z?)HrpsI4W8lrUDOQTE=jWN9w~%{Md`tWxvJ0MsfJfe%FQD$=h&vdrzpF!55nEc`aNvfvL2R1#*`cSKOZN zM+wqSdz1c+=xdK&yR7baFr3?3HuL4*>u;fpV5WyKO{5X<@l!xZmdf^TMh~Fc))yJR z;XvXy0l;Z8JfeMNGzpv^prX$IS8Y!THj(?y5y%@Ri~(q4I;!{i$Q@v2F5gQ?hm;7- zn&!D0Gohv%;)3-ZFza49yUuP!l2bd)-j&8RGehK3p);OdQm z-^Ele?Xsz>MEw(=XNT5i!f3@0DJl@B{BsMGRUqlxnYNwbfKw~Qx(#CHkJ+FI5#}s_{K91!TS{bvWlMtMXf#>H>U);zB?VRK_b~fZuhm#J8Lqc++#+04=u28^ z<{exWfIIy7FdKMUg^Y_CcT*$}fAdEunlvW~b9)M%KlH6<1y)r*$tQQ*i?hawhSUmF zG`8}&2P)jm9QC-4WUefu_XpDSjZ!Kv%VKWMYh5bd6>(C9Cl}BTp4=FS3I?o}=7%%k zX>)K0=jM?CVo@z(QD6yy)=DQ5u>Mvc`7{@Th9G*Y*FJ%aqg*$gv-tOedQXc<`vqv# zZnGUp^lbB?Korl@7`T7gF1|mIM$ZNs$ZvUOOgv_~-1vhh*!3aSbTd9#a-fGF-X1>E zWft>?L)@5J@o}7%o+LITlfMsdeiVfY$jkMN~<1IKKGY8V^nVE=U!WJ6%02(U_ zy?i6}{SXL3nwANvlTHU-^DM3NCZ1dz9N}Xdy0!A$v)4UpwVpYBEmjNBx9uII=;0+- zuX!}U$rmDIu@~jbv9WNKni@BLFrv!6Bqqc2c#&Lg8#z zK=JL%A9jgo&pA`!H@A2H3_!ZhCVVBu5%=`+^UsMrDFx}0M;8Zt&l}(1r2KDXZF91d zCA$pvObiT$cNl1L@1NsegGhvl?H5N4Mw^|?K4(N3*$Sed(1S~K#l>e5*+23`}e1N{xW)j z0o|c`8>(7El~STAFJ>q7ft1ZnN_{Q(aM?KPn?Lo%iiU3+xTuOYw*`HBTL~Rg?q)4y zuG|w;DE+GF7jEf$`Si*w^c0DRv3O>A*LLP(Tv1$U6cdE~JXL61`9kU(-Q1fA%kO75 zj1xW+d-I`P!Itd5rK;MbF;n@FuUpcGzhuhjfBa5~Fsu-CDSw#)=J{ls-x6Z$ zN6o$T3{g~IVT{+QQ&61MPwK5QZcIanU7Y*RDMHeFgt9L%W@|dZk5!e9R^k1O^*Z_l z5xopE*oJoszOKj8Ufi-rON+q3J#iP}<}OQ3hW!&VD-)31I)8z^-tz77+c!^}I+xwk zG0(guTa5w6YgA@c26|Q1ER2+t6mc4j8@T|_+`gyr(7A}r& zLnlJIrxC>qnG6QPzQiwbH4qnLp6X?C#m)Qp@bK{Hv*Pu$&jN$U%R-Z^ZG)f zx*lZvgV@n*<~wH9O5+{|E!gL)U3-Q`<)LK_d2=bWCl6 z$ky+BO(vwi=)<6OI>FSwyv(sY6AmjO<5SwO{`+{nv?1S7YXj_rt;Ow`h)*n{Ob!wy zEHpXoeDSHNgpp&#l7Uz04wLxMLO->o z@@IHMbi8giQndA+JEm;7*RXc`SC{}rm8*E}JH|GypWK$^c)2`M+DZ$HBDUp?xJ3@9 zF)%r<@0E%Nw$DyycrYHw{cWu69N{;$&u3gud^OvxDx-*0)g@spKWIj(N(H{aksrn; zgmLjeh5tpjl!1Jof>tzGkPrvSJOV7@PYy{&SVn`~XQkj^kpm;&b?FT!fqa5zUC!sk zpPyB^pH?EmN~agXLQCGNcuOYNt#A-Tf>`lqq>GWM>~E*o1=8k|O3Dz_L4{OXy1!~2 z8Ex{2DfzVq#IM+3Ywc+MwNUrvvXc%hUloHQul#5%FTh#8lo-rZ+-2e6yj%bWD@0yQ_Y4+IMn6 zv#MXZ&!Sirm*?f{B#h`(O&qzNway&^KV|x2!V2QqJ}i3#pv0+KHsORH(!b;SHFLna zPsDH$)Dxwg8*9t)Vg2qJ3I1%idoS7BshB^8b(Gl{yKju%iK&9VPHLcS$mb^U98yVg zjqp(moJfQP$OH{z{Y3;GF0|e5ifQoldvdxq$$9JD|MvqR8sz%HVHH#~*#>NEw#7l7 z;T+`Pv*8BpWVslfcp0Z{i~YMgT85|hG?>YQt}|?D?Z%a1-C+k4_MR!Hw|w87H6=>f zVf1d4lrL-@n4h(}DfoK@Yom7ma=7u_tyA0>Py8zU(g|gbIS+?s&tS?zO>p4#fZ>cT znA$2<6k|3(7m;J3?}{i>b?S`T)1eSGXXUM1I6ynw#2d{`&==Hw!r+@VkSEBRMlL86 zwfF-I*3~V%AR_KP^1g)XCjopIguuJ%g55N=qoOpC{27(v5$eu5ViXLsC`sRef#ju2 z3(hw|RYLpCe?id9FcPoZZW$R5Q*gZLRr2zxbA8g2Zq?hQY=mwa=`i7{{;t;y-AewN1ws;+{KG7>M zyOJn-qU2&pUIHoK=-TjoDjR->@%tn_Egtk5xSTP$hkmm&*D_gMX@)uRLaZe0^W!>7 zx9TxgP3W7SpS9X+HYt-M?3jSBBQg-3>!Q9lvWqTx}$+7Kb(Q(uQV?M|`iAzN(vFq1YJ&fa(WX8R|K#40`tWIv& zfcCRMTl`rg6pK5x0@BIvh96Ppf(p~6Zll%&SALoe{epg&>@uy3`I3BizwCFt!Q1}1 zd-uOt055C)zEa;IM^`NLf&sp8MiiomjIHP?OS_|O z>OFExuv7oT=Nsc5t$YpHw0v*K{^pHaw_b$s>+6OjTdJ%^lP8tQ*2ontF~OxM`PAva za>HzK`PM4NvF#HDOm0fISw@i#`~pN1o{*l<8aX`tA__SZaO_sMj^u6p5sk|68|E#r zac(z?i7HV`)bONvckZq?gD3re%R%}6*jfmlo~^TZQRX@-OG&X>_%&t4U)|XIoTKLI zcxm|suaVj$7pAPBbo?povxy{? ziv&B?t+#0#H+-y=oN7npCa-7@!Xi-;;rCD97S~6gbh369gBV47{_{DlD(C2q+~7Jg zQx{0u{+YVQd@80~y)@YT77a|ycjASUXymPMO*vSxJrTo}9Z|$Y#~s)(p=y{$CdLw3 zgE0i;kwMYGe0Rqw`At)dnf=Gvi zh%`t^ON%tpB}yaR(j_7#Al)r3-Cfe%_13xHd~e>&yEAv@%9R6WpS}NUtzRv2N=iyj z(&u5VW+{yP@#h{O z$MkGB7s>B{4DaadJ!{9an!OrZUrC%OvJ^pXvqK3!ki8 zrBbb7^BHD6e^p1Fe#o;qxE3A;wkf7LWA>zcG$ToJDsU^=%3d>-e?Q0~CAk4^VuL>*~r$D5nVP7R?+G=gb&wUTC zF(e+)W|*0 z0Bgio32ONGz#L<1cRKGkREaLxC3&5f6Gnj`*)wTN5~hB#jHs zCGpjIXh^7749eHa7973X?1gv|QXrN_N z(9yXLML*SK_1?1ORYjFt4-0tZeJ`lli-CuH%H;XK(Q;yUikcL(H^$Syi`3|7`2v^f z!)j%-l<>$2ByBrWh`)F)eX}X~jz_xi+cB1`lh<{gYO?N})crLYSb0{4--$WdZ)OVb z4GcUrX`}hx`|Xu;Y2r2#8;mKoT3kW2p_l~yveb_?-Rdq=8 zhnb}WtNPVu$Jxvu6>%GT0SHP&_xRzX7aO54A-u>nnwxvaX*Txh$$^R8b<-2@paV-{ zxH5J3zNhn3{i1t5T5!dlPziiB(RGXW-?dg{)oy^KfN-fN5AHvwwg$u7K+SvnZ_h2d zv%1uHKQ2A!B5Hk%7l61@L_vhnN*!~=$%`&-0{I$cV7&8K8Coj=864b){ua{_xBWtP z&ljAXT%1xtoIaF_jGx^jO7l5QOlPiPK7+L%`)|H9UEP&sC=N!X~g@t2SzEV>&VPp-&>zNOYb-)FPvDD@pER+2J60i7j zQ-+Pv{Dp>o$#vQj6eXrNnF#Lk{yl7~Nkr{dKZUdOEWn;VGuGJub7C zULay!hP$}HBr+^cyf)61Ri~<{=4F?YVS|{!R3Tdj0|We&JE()iNs7spfEn4bG{N=YKBvWizhbkl@qBSK$S^wZqW}vJ z(hX&GX3N1xkO}i=*%qEi6fs_He#cBZzhk$GEdPrjF>m&A?mh)*v$3pe( zwB{xaMgcLGwZfy4Y+3!bsk=zPX*P*|=JnjO4R#$bb;UM;vvXtT)eh>8Nq4STfaW0| zh?i>)8rusNFWua60$Sli1hE3r?&0o>f-r-p51z(%TdrCFdD_Y+xK@wX!o9n9EI}2n zpsu_$K^NQge&7eP5z1q?P=r#)^I@rmtg4(G<|t;RRxf@imR`rc3PeMAe0%=B`&+d1 z+3sR+LEZbyD3YN<;%5F0RrdGi=5k3wUEMkO@IsGg-7W-?K&FiA>T&L)=2tHhWGqX< z?m~{N;VE>pbQ^xb3b$p(zWXjD!4k3=zL;^l8Y-K+f#?`-Oxn`Iy2k5{-u(9Pn6fj$ z#*2It$6?BRJR_ShD*zL#H5 z={P(7r67raZ-js6VBw(87H)i@3pXbAenn1mg%ri;wx4^2!AmpMJ9<~HWN{pJ1;F|L zHM{EQVzQo$jZE0!s6v*cQEHR@79vjdZV`1OARr{&b+p&e(5T2|+GSNRU;DMPArDf% zCfDjRZie==hCXbP5TJtTpMHw&B0{K&MfLG8*M|)je!sOGEzqr}NKU4>?`HD=>OeTP z&dU6?yLQaBqwr~*pzw9~wBxZ}_n&zrx5}#zbu&i~y}XbOO;!i;-Y;qnU|GHWa|d^u zscGX@>3Ft*X6Yk{xY^S6lpd9Ps4ePro>>G&iio7@y5`aLgy&2#Pu+WONz@!tQ2;&= z{IK=>ggdq0)M?FU^=VWre(KTcsypiGT!y^!aZY>X&Ne@2G--M0!{9(k_e|08e}aej zrec*3aZinDK%1BWPM$;_XB0|GHe1_+)6+Mr{{MoFFyaI~(IVS}B^d2Jb_Swz)$>%h zD@#ysqhc2x3B6Golzc5q4IbPpNODo5lzz@s$jVP z@KRuFvQ0@jPi$kSeTl?Q`?K5rDJbbtAUI{Y3{(IoWTq;KoY z9)fcC^`Zndo|g~q|F%E4H630&% znTgD~`2EFAORwScs0is`qt8=39vI+Q>DHC`a(?u0Fqh8GM9%2&l)k>wgs4pPdhUBShX#Yl<&)Q z9c5La5~M5NcUBLRN>uvzFO1l!LYETSGjM`f`u_H;$Ki?!GcFr3cB`!wRlh?e7BE={ z4~6Y!3qweXK#u|TNyhs{39U-i>P45g@m~45+jDDl6h?>MIY`|p&ypxT$J=8pCUc1K zWv99sAdtxqIEIq5pe?tPW_h?I1Ox;FsUG(ccX{K$PsJ?wOizF8jcqy5hS>Kx*=L;3 zob4KX|4P{$_0}dTmJIS=k~dKIH8V{N(??@dRdcm31Ox>T0bAhwYiyNP^A8DZF)JWh>w?8}*rb8UV=OfKY-c(Gj<*-p9EH(Fiin8ZfI69mj%%r3$c1eBGzv;a z3o4~Wrf!N3YtSZUvga`a5vz71+XdEBr@t>IN(1t3C?dxp25aT)ar1`?J@HpBN7Qxg zt{0wE0ag5+Wm0RQL~~RwGs~nxbmh#+wL0YF;2^6>O9UumK%bv8S0(Y6IZk?1=<3QP z^LDMFkn8Vtg|sz4UF>!9;*BWQa2i^L`q(B~)o1Mit!$eHjB zWiAoe9_;TO?k-ge3h({-RCidjV|h#|(0yE3pMP{g%%*)dn5GJpk>u%ZBGmx#ui&_} zEP0$m?iCHjoU73Kr$(0#3fk%R2WPG_Grt1`#;na}-vBD)>goA1?;Br!aZm!029wH` zD*njMMgbf?;;cmbBI3<}Laqw@V$~9R_Pk#a#phFlusmqqs_SpODxYQB&i%z@WMuTe zhix*I`QCiCGDyv@Ry;SR=Y4-311L^x-#Xo}?(bumPJVw*TKbJ*y6SR!4;7m->qe|L zp2vX`FW^CLmN91t?_joG$v8bdGYtpT=cpl0P${t|^a${!Qlk4Lf(T^$-%RvM&o@X8 z$YUB(x74A~<|}&z$CBp8EM0x-Con1FfrAZhmHJJ=7y7o0J9(NNc3=F$ReJcY&SEU! ziTUCx2O#dIw@#U#qsfRFOyvz!p)lFUP z+sgBvgpvFXbBXLxyPavrfqZEb(&u@hb(u?`uPsyl)c7Ka6HW7{YMvvIoAAz#FAp*1 ze)kF;TML(YR5ovYV2ob>p3Tg{WGDLyRGvd-ghaVMDJKv0W*eJ7?o0%D$qV*^cI{eO z5l&L{%1h6xY5r#<*VnJMH~XV;+3F?bQDVsn|f6fO|(ols61lUG;LN2-)AsV^HN3Ex*;+Y)4D`l+DMcN-^-H-=8LbikzK1- zDc|2mwrN$mebDPB6mJ^#ClDyggvblXb4E-ua-cEbRn z)!$zt?$$ihBoe_1GFLABKcb{MgC#)e2u^pIB;HZkJGbFs+}md|_(6;x>?Z+waO1{- zCXP>Z9-KCbF z1!p-3RiR{(>FQD9pQ~aC>5f~fc&x5-TuYHwPE}m z87V_29_WI=36E$se57NGG%VCDxHcWgP`-pWAhDdxxchCq+UB~|#gytiNIT^^`cVAk z%L+X72TZR*r>j3oWGH4RF|JMJh+zuTSo>xpIvF%HbQm=( z%S(Pl^Ci0$2YVMxRShH$YDf`d9^`)@q5vx~h^N2j+S=N}&?9j64=V1!z57EE-@f%i zXX$J|hC{J_^$0xivi=yCj(^WD4(6*jkg`)W+}x-r-G1-M_f%aH1(R~kxwzdzVv1p% ztHl}j}pH?CQ^Zn<1qjT}MU%PT5W&&~~ZTO3_2(#QwL@_0UlrFEsomGaG`-qWEf z|9Thqm6hdc<|`0XfSJ5vEnp(KyFlJigboZ{D9XB)6K{@hS^cv|&En z$d2x+qn*ciLF2!Vq|b%MBF9u&UQ5a}nR3oskMV-f12H3-=MurgQe-oz8ffpLQED1e zm+1|zYOtqNx^3~n#rYUwT0bLerh)QyywddQ3ZWAnUBn;%WdjjTD#9TwlVt}`*jmcW zL^LF5>o@uRr?(%m^ZN9ad%T2bmp|SArJ!XlEs;8&4u@E2d8P=th5$RQsIZn{P(C?! z*{T*NLn|dM6<{%p2O*}N&#l18+L)bUmG$z#n1GP5trhjwWI@I{#W+B zppF@wl>bTe<+Oxl(#);SwNHMt;7RWeDy94S<>dvXl}kQ!JrQOk9XF?4LLQe!DZ9D& zFLaeeq4cn5axPxG?x6hF5&yyH3lER?DJ;ash-F5Yd)-cZ`8ds zna#D{wU@cU8FX@Zlf`#o+-D9e zewlIq@cjMS8eH+koz=eijCL)N9pq8|G`ORHrvyy!PsgCi8l<6^^l7K6bgj6Ronfrb z4H&N`*;|Fh?j#;3)}PvYj5~gU(9-?G$k6ck=wPLsN0#$SkYm)D_de2;Y?2g!1dn%* z7wKdjb2A8~iE)TX!Ne(+qrAV=&?rMH?3=$nM;|t6w@o zZaw2}f=ye)6;X3}i>j$v{o=T~pcE6)QQyQ7mMi@5o@DUO5ZB{%yzl;HWsEaohoj` z5Rs#$R`p#ugC@|2>P@av;y*}TZoJre2{z`I5;i@~Z*U9`0(L~xA(2cXSJ0qIZ$DIj$YQ1R zJa-O$Dqp|Sk9>6slT1zhJU-v=56uf_c4p)UQ_tj!Z3c;iX3w8spX_wK2^FOJ&#okL z@8-=90`zan4;Z>-+R~NhD|$#)#IaD(#TYcq{j-|VS&+RnWj~Fiz%?+5NedNz0*EcN z)n6I#wb~7hRv*Q7R6y~K7r1^-fX<5-a3@?+Tv_?fC_bJxgQ(}$fWkv7D>mr)D^%C` z-Of5ylHJ#BMpwBx_-B}dmf-q81P=>W!r;E!{t$_8{UH^L1}8P7KSJxgJ{pvk`s;6L zYO^T^fHiv%P^)KCO3w%~+4jjUj9`r(6SA4Ri9r*}j9E;^*>Fs=Il46$``BnzxkV>c zJK(2;{RtJ`xtgvD{(8@`X9}SEylEa>l17X^!DjgP_9t;FT+%F<1Ri#;#*N?u_jzIFEFcntC%DgE^F(zY$eXHh`o?Cl08=#AZ!a@dZSmRV+%7nI`=90 z;sE%sB03)5~2;kU9WRAmp=hHl|cfNTR6%%vo*L5u>Je2o8Rrp9dU-l#a z{y--E{yhVoe9Am1i8uMJ{kOIG?Y3M507<-CJ>5HVg$mE<$Bh9rxYy$m28r0Kq0oRd zz*A{xvmh@qHZfnT1v2AALI3{}isIQ`th?KBr5)~iAoob6QVtOT5eLMgks3jB#O&do zrCGCSRdZ2Cyk7STFewZPSXC3Lj-cXzi(^Y%95Vf{Q`WQMp@geKK zUcP);Q*>;BB6xBizTH+($V+>6t8w01uYA(!U>X}qz4BZ(*<(RbU$eXkda%uw*J(EB zQ$#XcWLXb)9*w$g~MY`TQ@fx?JW8%SUf5wKtz8DZUxlv$hKlYk| zzG-pM-g_NA4888)2F)@6opW-_&`*5+Uq5~y-@w?>-Irq#i#~0v|M@Dd$^NLC`IA5M z5zS3vPFOrfiMmBDc@GO+l+Od}?lTEoW&tWV!eYs)fz;9ucG^# zJ>7VH+mC)^18&hP&ryHq=X_huuG&lLmFbu{TcQgT|8rsL(tB46f9lq6HgtScx7FD| zGOl7$nnn=RVL6&KXXm$}>^>Y6Kt=uRg6%^DnUj+#JyW&&>yPlf?j3%NNh@P^t5-vf zf6E)!vr?Zgu%J0SX2;AWWpT{+cPN+Cm4u38(%$hRPdj0RS^KG?}Jh2J2}CeS_>Ni??+@FaGqB+tD~LxoF) zYrl}9PSdntt%r`~$n@c(G7Wxvh#{crW2cRi%(?`x#7}hxQToGiJCi8O7p z7?#9lcgNY+p_ba$zdwa0@DloH9mj4Iab=cQ6^#;#D}UHrO}qd^fLg~RycQJ;x7?IO zA|n9$(=f$&#^KpMYauf;SI6F0}p2%Mwerl^@jEX!cDOlmjL7qM7H;x zesFssBj-79O#k$l86^&CU09FJprWpD5lk+uznY1b9c`b)5U2WBB}}1HZeh-p?7W~D zQ|J+?pF|PapTc1_r=j*Lkq%nTk>M*MB1<_;3a!eb|SLfDy1BCke={z3$oI6%y zf8Z;r3iOav*lb*aOGwfihc@`&^bj9u%JC!#%&R!5!vMS?8n!qNkNaL;8i9fKP*uQu z|HinD-J?7AvUmrn`s7ml#iy9%pjCF;DZ^X8H7GoOa6?!rc=J-6gJPdqEPR0P>0Uv< zymX6aH$nF89Qy%m86Zwc#}@j)CNpkLwx%mH^4hH5H+U6{;8^sNLgN0>$KCn*ri&~+AP-W&0ZK0mnizFUKlueRuK&{#;gbk zK-+JjzO84@TOO0OykLitmc_N+#$> z)`05BbH5NwJ3!1=Kb}c2SPwOFsL)Xf-1ijLU14#VChWTK_1a9XcG`0T(||%wgQE{imA&AHsoT5;$X+)Cv(+J@9ciUY*RmERySM zd0+B?`^7T{fY4*Wj0NB-y;9Dd{CeT)y2m8aq9)HrP+f9d3g-X85E_H3`-kw`qYs_=*Ww)Xoj~?;<1HZckV(An>P&3Gi^RS3-f@RDE_HE5d_BGcR6PG#`XTN+Q_26h5>Hk z@aQBlIP;N_HCEVkLZCC+{DBKW$2O%LZ43>2Z?e~Bvx!s8CqysGEO>0zIT@oPxbihQ zY$nXfu~5IHcmf&DpQe~w>2!v!>sA^GfG-k)b&0oIJ#!g7Dag|<#3E|~C+T?E)dvD} zM5$OJs_!^vu)YL_j(6wB++ z000~P!MF`~9Xg*oS{HHa{Kn#&=JF089pBpYp6iyHBZHkwGE)i4!Ju(pvso#-^QCEC zbO+`gOEw4v)elDx=utwQL8oHIyX!?oE#)KX!~@Onp^<{CQ8U4=$iE6dRlet)?98&Qqp{krB)iX9-5z z139;kHd-MMm0@Jf`8?ni;xg`doT7mfx;sTMSiAaU=rma=Z7!M}AIMDo@uo^RND$YJ zj$*6tPm$bwt`fuE{^8}ci?oa!%8Lxe!E!Zu7$4tW9J@kWiy$fwjtX|hUFUEBp|TE` z!WN!ssqB2PTc~!tSMMj64NIA3`wwQS-|qd0~-@vLZwzDvZ~D@Hd!=s_RgDnU%q;-V+%r+*Isi2Ot}Bip5MD&^^mV zug;6i#&2Og z4E9XuuvxPqM~-RxR{Q=)t1G1s(*J3+1V58VRlfJ9_V7 zpM`{)Y8zq3t%N_mV(EAGEWVB{AZ>EBIADxB;Iaq?mtJ2Z7A!mtME~)p=cj8)n?7z} z`sbe>t(Jw)tD^iQg25;?x{xIC10$BzpmbvQN4HBnAZ{EDu$4%hyTjP^NJ9Xid?arl z--w8BE1lx;afu6or5?||aau}3)D-y27mrjvz$P4ODypv#`F6Ya<5A8UiIa=7{&}>~ znXl1>?}oR!R!O9w{mK;OPp&M{x8vB8z$DVW*ywY$Qtd%uirQ{N0m!||e(g^faWa4v zvt{ipgru%225bX__>eR|Ii{K@1of&wxK(Bv5(r07<@FH)XMQ_N6i z1bM~}%Yi+YD~WS;yO(!i-HyyR_Hy5&Dzlc%RhVdhzn{iSs`Cb(5AYiqpVlS-h_$Zy zxYeulpZ6<<3mlC#A8uVCAxbI)yS*R!CDbQ)MT5D~p324mkqSxh2rbD^A3*l5Oqa3j zT7Q1Yhgs^Yi~V`J1Rm>u_ij_H%lbK3T#vl^P^7NKM*RYZ$KJb(me4qu5)0citaILh zEybRvK|ekH_ouFNtqF`C@fUL=?{bj7c=5e|Qlfmca~^?5MctG`i7%^fE2Xl>gvrAF zRUdQ+nMwg&NC#?=?tRDfYWkeDJZhI4cYyMW(b&$p5<>E}CPsb?tFw$~=y-YRPCIT* zA(xEH6v_F4pj1$J%f4&jt-AV>gBzr#L6cz6U#tRBMO7dgHk^(2JymI>ecE)OueaSt zyo*JN`lkLxI`#yndzhGz1=f#73A?-AS8kODc#DI8+Fh~pEMXSjUa z+9W;8`krNH5^4zxo(6uuUQ9?{Y`bT<`DfnHcon3K2;$bv`!S+H5JMI2tNY?t1hbLx za#(nL>zHEmYZ)n#+@sZf2U)3B4LIX@oKESX zAM^&@rXk0hdY$_=K{3~97c=L}SS!7WqOXl4iki~(;Q)i(MNwr%`8Oj9^t~qW(#qmI zUy|Je(WUQ(i`zFBggN=UdmrXZIZZGDbrFh-HZ6 zC@Z`xs>ox2{6+}b*mU5B&uG)3diU?$Ym@a>@knLaPb#x1u_-rxV((y(qUEO}HZV%D zn`9?RtI4x8yB*n|-&gCjhK>kipY>{v>o#r@6FdDk*axu^oVU-9B{p{C55D)d9&r;5 zj+*`Xxw!%HA%03Z)@QXdb0B7up%DHCH0C>wgv!+d3b)Jg6=8RbcDcm#RreD;&Uk?H z@Ihe*X%`xv^};l5?lrZQ8zGh;5kQ=Xpxt|CJk>|s|H|0=*>w7Xad|Q{25+p}vEE&-8 zI3E3zfQ+n;ocH!x_im&~`5Vqpg!M-qh36Kxg4Jo#fpjzED4CCx1>$~Td94xfS8cYe z^^Av~N`VS~&N99B`Ij|`^If^1gONf9K$D8pnVEGe|t^T+ao+RJ<&t&i|OD{>$+0{CpbErbFG$Jn`jK zQeE4Q#n?Z*htOT+d6caC9nAO!1C}zky3t(I+J!vkxce(1RpaLR6;PhHemR|y{SLCg z#Hw%*Y_#~uY|ZcKxKKs?IqB}LfUoPgy&ykTFVQdR(oj-X?r!TVw}t2t5PCSRwR-*j zfR6x6{3M$9BC~m|PwAUcutk}1GnDD+8CZ_RUvcsK&?&R!3PGDpoCJxd%su&}r@nh{jFny)KGhdvcp#Odnd>jESN@pEmbj!# zH9yO$Fqu_&Dsf7SnTW}%zTC_2;wTM-&P%Jrzs$BKdp#!19jdc1VhfP4fchIRw&1tW z*9=ce5;N1NO4!*0X7cUT3O@)dDPW7zs}zskK3D9ywfV;DFMc+cKa(xhbv=8abADsV zIlx->+z9113<3bQeXdVo+Y9Ku=HurdJ@T;SAqNQS!K*CXt%PaUe?w^xp#y|r5@&Q_ z#0G?!0)m1zJmlaY-X9LprlH}z@~(%7oNn4@z{gPG1!!FrPg~Lza-a`Goa1u9D^yTU zzADfPLQD@x2)OIwf)b$)x$ENtf!Iy&m8~1#*DK;DC+BgC`tjo)pM$Bi@$pT}o4J@w zb)f|^Z}u{~B=b!Qy5qqjEl=sfOMo*F0lGl_zCt<7`u+Q>{l+Y@OK?3dHa4bUl>>Oq z2q7STZZ&0ow;#X0dTy@1J72P>My;@+AQ(9y&vLq^=X1rQ`0AP-OHrq(B@#FxC_FQT z!{_I_lk4MP&U`Gu9Cftgi4cDvYp_6U?%~!jJ^=9NCtNV~At*XJxg=cD5zjb)PI`)? zKd`I%I&^k)q-FlTU#bz@JpUqJ2?+o7m4%h%O9Wo+_;V09GY3DXA;Hg5+xoM`Xl6@vJ*>gK&!e+0PCc zhgeq|`r$`Jqv4KTm_=z{|1}HaY^^=!T)06hZ=u>uNb+ToiC(bE zUW5@MwiBDmI{)F{@?^``EK5E4a$-s33KS)aa$rMBlb0QCfR66x^g8k^B@x*5 z;&hONEt!)T*u_Tws6Mr!^2HN@uP*(HG+CMGQ~(F%4tE}%-Whd(ZsgyEp8Pj%E2+vf za!_3ky*&VVo_@#WIFuxKqMtsv-<|i>7r;Dq9!J_ISx*q>$vKQ&X@XYwFWW;sqCX+A zFlK#z1F`kcmi-01M*_<;0EnC4*B%An6!f9TRquT$Hk-=J6})PZOpoW)>?Nb?Z`DND zq#~6D)=YKN%^QN;kpg0k8DSZagtd0f;xMKcK#>nZ+qCc2ZZNjdWV8MPaKn8_l7Tp* zv(u6u`sm)1mlg$*h)FU`8r)BSKf|55F{Q@b7&SOPd~N^JQW^cOEaO)KV_E~npVm_=nVM97 zw|&wGSh!l0a{fBqeSCRw8J>fkRs<`LDxQ+1=Hay1Z#tTk^L6=FQ#wQRA?A9!_4%f= z$LV`E3X0ylAGxn}lYktH$=4DC^#($V@YUIfzAz-|QrJiU@ATy0+E@O^59=z@DCKig z=q-EAdpEeq%$yE@B9eX{ zG|q9wFxgUFt=F~LTw-9=scX6%AFS92+1{M?41+f>euNb06gFQeD~;72Nf0b(&^ zTU#+V>NC!D=o`g%^B~)_yfAxq_c_2v--F4DE`z!I*A6YyGGRod3cu&q>?M_zeyLWZ z2WhXMG@b(rRqF!CUfPmz!U<{C*lHpsxQLgS|80z#lQ$^gyBX$vY;G5mO9b@6Smg#k z#oDMJb$iIca){M~=L<%nVqZEsI$GP?6X3}GTWR2$Eo}1|O%Zn1hO~@!E0;ug_H&eR9umH;<N!`bm}$Uhcr zC~#gx{re*+G-_{@t z1;Nt-6}BjFC z=ux?fEO%@)i6p)B&k>P{*OEUcSQ%LCpZMj-$;l;ypH{2pqOrYnyO6^1suoivo)0uo z8XJ3*9{X>%R&Rc-UqVXK6691p4*>{I&A!Z|+kt=lu_BMlVas4UK70A7cK`aX3^w|v z7;^a^1*s#yJ8vN(@qpX!;@pq08Rie$J~?hN{IakgI7#$Y>yD`)f&ZpM$j*dl$qTl5 zWVCxzqQ%jqRP8cpf6eH+Rw}mMJN*9y0%AGYWzro~(><1Y@m@#XIeh<9E=Tvf4*UxX zGF7j;!s!u?E^BEY>l4(lx8`x1A(Pjv73@4CZ!PFs^@}I%=}xES`BZd|^wT@KyMI29 zOaxL9F;YGOaYYluUHA77T`)Vp=Qfq)!q_2+TB_^bWX z=BxKJd1#P33gfG4zI)K&*F0hO;D0|P)kKqp17QfYd6xauZODoHvA}$3I1C$orAd%1 z1cTU3(Ydq5(o-p^E`;tH*@QEKTSxcLl#ldHX~Dbyxn6L|DlnzS6dk)%EmYEEXpNS3 z5jz`AX3|I5zsVq61z)?(SLbwc8pQG&O*s^G;%nveRSile!=#NM-WtSVJmgpaq{nf8 zU<5qrUHK&B-Mq|Fq9O_c=?4KJ|DyE8sS_+u(aI_F3<3_z_MgA2I9{oSPct%O^Z;SW z1hBRN;tN$MpTKCOpc4XJGHfOJl12^!y-cMJ$`F^uG@H=e?X4~FpF1#B!{0J1nNRDl zQ2OlZszQ-nUE6Q}KgK#>hO9MlkVE*?zpq0?)I6B1rqYc7Xht$L=6$&<=y;^}w?sZ| za1Eqzf7q#|7_vJBj$ z>?E=^XT7LUc#8p`gM~HaVlcx1-a(yaz=okROmi zN5rc68g?~=3J;_JCQPG`W zBm`W)Nd4=$`2q}vORF1UolE8AdcJrA-6MR&1F|%?!qZwxw{rSnh+M{NRA~=zz6`&1 zD>EXSz1e*R%J}_>KlA_DOn`BJ*YXcdvPB=94>GB${}0?1`v1UPNzX%JA1$C;_>`1Z z67q3@{igbzr|gFwyB>9?wyUyTxnW%-`%N#9K*UsOeTI%u?OD!qfK1*W3=WFT=g=kv z0q`B(tebANgQ^bwFVf|2M`7X1-?6c}ZpmQ1+gl%d4Njk5hS%n9ZZ-XDQ}}76!4|UM zDjQxGQRdaVmj!GZ02joyb>6Ku&jLWyZCTzAuq)J1gyaqgo-|M*%X|}x{oEu<)Y?Ns z%NOxs6#xI;KD#HjuTC7)^NA3OKrxc{IeVE2oqHA2q7^?r1y1Evtx`QEN~34AwwTy- zFf45$JU&!dT$`USZcDCrBFP*5j?6EklsA}J~3AU)_#y;9j> zNX1qUjoP{`1WlR6oE?ta!A`r0QbE8HN9_U0=_2a3K{Je23P_uJ0ei(jyP22A4I4Mm zf>wJz@^3rXbb0^E_Ctm3oPP)rG{pY?et&G#WtYUT1q0&<^puCfDY>BT@qek`n_T~> zChP8Xz%pub3rp{oZc$4=y><hGpOErDXaZgK^nu3# zziL7c3yM9&woVC`t1IUG^!_f9(Po;rVzx)Tej^d+T&cB9`{!UEL%rq_b5!U{8t5+O zNSAxq==B;0q6^%YefO(aykAoJqhYU}V zaMK#_8b_k#A`b2Av)RNAVeYbr_KS`t9HP!|rwN+AGp5A>1Ow9=q_ID6J)vweFL=bv z>>bKwxd5OUg2w`|4O~kyK)^YlopB2uVRl($hioY@L}zAIo1_XjpEF0cheAA;4xkEC zc52u{;5NAV$PdfmhJpfC_FkQ53~p53Bv&K$-CQ4=L1Jp_Y+tOOi|`A0N!T&7d8NX) zOV;k}>@rX<&!#juh=zVo?q8>aPAU~1P|$?o z&h3Os-T_jZp1>BEE|7%0W?+buF&-^yZFLb9{ru~#MP_CeczxR2ClhQ9ctHZGJ^DeR zo&qvO9^79>q_6jz0`3WR(XWsp{6<|_M%~};P9(4pBJXhdw9$0kKqP*ho8Re*G(p-`TZ^-O91gpWUd(XCU}X{^7(K^^U(`Q zwuIsYbGC!4q7ItJjr$(xihb_dTAPWyb}Qo@@$s{~7m2HlR~reUTI61HeFP1xXbC+k zAGY3*N;jyBZfS62BgNv|zf)nqSSORNI0&g5l9hrDQK0Mao8Hzt`*~7%vVHy0bkbKK zDTKT0(z1t0I=b-Ve)n6Xg3RxGYY>-J_0q1m*v`6AOT{fzK8d$0L0S#b-YPQ^ei-#c zG>uJtqoYYm7vDCN)s<<2Haa~|@)F6NkpoKN|5po84JOW)g|#osS(E%jgO+n;6M(Ft zLvq-hpf3Ms&1ZOm_BvgrMO82b#>yVcLMj}`?Qy@Qh^J9e`<)xo|N8TvLH;<6uG*(@ zb8x$cX}xFH&FTLGHk-e>uEY~%W&s7M3J!NG89ev4%cmaa46o0g++t$?o2RI)<8fxx z)YSBIGvQ=G)L|PiI+ydIfGH1YD;-xmhJDHU?8ckIzTq5ZX1QMIRqk2^7N~k-8KE%Eo-HhvZjP6y@b=Yrcd>P+iB*@`Che42taeu#ewQQH zTpojK(<=6b;t?&a2CM6NJg-a&A6k}Z<83j@`Mq%J2Zs&rDj}{09sK4KHPL-SZj{wM z5{8D}HCA0CTg)DI0ZyG5*UA8X)}Opp00AoIO87f5_3CSb5%<%M!jaPPJj3tWk9kC1 zZA|vu5g!YWil*4ow^e_1`sTORnJ0Se=j1fXcbqYLCDq#09%I)S46(&%SV2|WB}k`T zDX6O~s>S@XpEHk8vWgwF__Oh|ilSO-Ctn{P5W27FHc;;49`7Bj4vinUT^)_yrxYTW zmzSq`y-;l-JVgH)nX2=SUFD#I(fY{iboa>-x0_~p=C^eb6x!8K?FV=$$gSDBRP#`# zo)v=-AC9QW2fPdK%FL&G`F9FnLrehhbOC?E<{0%)meq7tbNVy>IbN{jX_SNnCvcS< z2CJ=26Rtf{2`hyF zP2?n%mrLdob8>pX)|(`YaBd3QqmT*dyz0#A`kHk3`!WoT0v}C@k&~&umVZKJ`LQ^Y&(B2)A zP^j8kLR#Hx9&Lx>!|Wp7>7bxX&Ux>%5wVEGr6?MMGBtU*-Nhnoe++Z4f%)d~XT+5* z&r!41S1<(Gf_){pp52XC`}LtV%+l7E*M}yJJq9NbKTGP)FrMhC3+j&{0+K^!?Xs`s zGj2h_v*xtiC+F{vdg*jC;mMpDsHS@rsBQ-9E*Z;*Qd+h!v%_`V z5}#CGbba|r$LHCa^||)c31u;Yyrwo+c;4ga!Qc^D@sWvQ?r&2SWM(`qV4bJ=?c z+Z{E%y`OVUU}UD?>XO#)G90**tD57_x!(ArP|(wRV&VJaA4#GQ8rnxwq+{QVSKlDj zZ%!QK=E~P!J7Cnhe9V~LD*s#j@(lnN_t3Du!%@GQ>`4Ot0e?Tgh&UYiq)c%n$bz_t zb)O$7eoFI&q9RnN*5z-B>!|P)LXE>38w6-CwZ&06qck4}7zh;~IOP80qI)fH1Uz&9uo0KB~EoA<^n>96wU*2yZ-#aR}{lZN_GyRhEjegIn`8L-{>Npb-0lF3| z>P&JYK?29_{{041rj~X3yN|~BDI#kh1WkV`G@~Pu zl11Rt@ZQF=vexf1BM&JUg68ygoXAocVNa+>S$Z@48p?fzPe1i6Gc-5@}*z zc!9?-a&VZp`he?H1e7px`fdWPE`qVF+6e4v{6NR>Un;8U^iROzU)GfD3)Y>lXny|k zS+eqDrBawFDnl&m;>W7#`%s4v|7lwpMiUSv9cxtnW#7HGxM3ixO^G$;j6Ov$wwpVl z9@ac!dHeY69hGaEj%2d4#$x!0ioo%^A1IkUxGdy1=pM2Z!~jI-q08-(| zdTR{Dxb%HNpE6XHlK}V0@s>( zra$OWArI~Gm|WTXeVuir`!NDid6nW9+|)0~WC#E7tGiqOvqFDIDSNMZGT(T+tPM^x z1HG=%-9c}7#&PCH!!k%x-f(A+>D8EhqEv)*;t@?Gl}XpCCzzPy?^dYzqfTe z9(*lo_85VOR^l<&_mN(H|7a`Ki$6c=uaH7xdw=x>vT=1Xb2CZ$Wv(BO3cbi8s)q1g z}#%%i%CzCc$~k1B2SHp4KVJ*vDf>@-+MHd zTMg#0jFdtOQh!NJgL6sw{fCKeUX`+0t>Q%PSmwh1me=L2lvE}siQ>@;4T9d!` zXY=ViN*d*D^E3u&J)x zEUS1Nt7td^|4&z60aaz!b&HBpFWn&B-6&lG(jn3zjevwGT_Pa@BIQw1R0O2ETe_4+ zy1S+8U+4Y)d&m8*V>oblh{Ln@UVE*%=A7#-hFCSJ#vB7@aG^9U-UabTwI{67rgYp& zPxxNdJNg-Bqs1FyioD$O9GBLLR?e0;ny;aMq3_lkJpK4I%^S=8&K zB7@0WZTphuMFy^ahW5)BbJrj%u#GVfd(AC9KHEjJl0Q`_B{{o_Mhvr1rog|RJ} zuS2*_(_SB8Hs>PxlxWZ(pLCtHeQ9z*=$J+?Lo=i-*f9@xkI+VQ)+J^s-pN~;3Ims( zfnHPXQ-sseeR_F4B3XS}JoKv}w0Fu;-Ar>Xnjh5OVVbXJF*;=^Pb|rf&5``p&hR72 ztu$7j4@!!8_w!Edg5F>|DyPz6m*jmL zh`?h+1gRh1>99sTe|KZnMF)Ly|3HQNJrVK5(vcWD#`1m#ZbZHn#*KzNrb3e*EldEv) z9hbB63!dZBPr-lW6Qrgwkx{6NvSH3MaqsnuS^C=(F zqNCnYcL*7K5j1WXG&q-a&sF>PLt3-g_^~z|5=DL7<4r<~%C%t{# zc<87o6nUgET}MRUshby#g1WjxWDVGYg5e<@pt_v$kl5ggZ_!PTSlgeuo@9vK9nD&bv%30&|@}sK`x+xw{9UP2$ z(5g362%0wqaq(aypJPTTGev!UR%b3B1YCB-7M%{j0GeOQU=m~u?lo%2)H`-!O;ASq zt6weYfx^UUppp+2^#pqT-Klx+X)$dAs~3FpD9GjZTh9MlEm6YfZ}0^=zIH51iGx!=DE}b4Mr>P>;zN) zu8xFIHEaTMvpXAjZp9~N|Fh+9T^=sXxRKA+DK=lI*o3|zG&K}~OfXjY6iW&W9nAcY z4VqwAjVpwW8l~Irt`-t5YAN56;(Pv+_fM&PXC<2e)En~&h-ElE9k3|vR>FKMAqXYa zHwz&m{ky~WjI3y;nw#mt%3FOxIPX5Vd~HpX+gvxb{N3>3fbF81eDu%N)fK1dt~fX+ z!9;}EvJENo_IwF|CSwW)kv8`qIL%st5B)GQTF#l*4M6*FbdgT-Z27R>|1$ zAK1A?XDRnM)Hv;ajClgjotjcI-Xw|=pOC5*6uDJ30a8fm>(!A(BbACFEYsAn6c~$1 zpG}X1rT83yS8F zK=zMueQXzx*zvCnH#BN5JKoIxWb2kTwTqJj9+>_Wu1G`O1=ARjf&6c}k>e@*moM~{ zyOdPvFk8!5wJP{8n)BwntqFdgHl1W{Qh_wT`nSIxvnRmryQvYG@<7|-=D|vzMdR$; zyaCV21Qbw(mkNpQ@SJd4E$%#ex<%AX;uci{z*P%R&5_FtY{k9<9x%U?zk_pv3u2k} znf~a;KonueNu7nFrD|Gn&fwkM{2?XfMc@6_nP($ca*Cc7L+CH6Z$>H*zFcQ4wwVgs z4-!U6n(6~Sg55|d-$cOVjYiNqeiDAlS@CyW#@rl#Z?DMl#GWu(f-fHQzTN%i2o;M> zLKu=IX<*8`_Ph#aCgUMR#_*-D4D-GNf)9XXHq0=@^7D3Q5#UIguB$HDOX}Umk8O}* zj>8BD2oM(+@96fpelhsN+Ra8It*g{_SyNNL&x zX=I@E&?{hK5WoV#6xhtMCnQ2cE?J$$wTO??Z-H1LIwiP!iT==@0xTqhLCI5Q$Tm{r zR|5Ll=&&#}+x`?pzYlox9ItW-sE{-P1Nmob8#FRsPC2ZvtsxT|n>g~89kLiqRLEB} zDK-Baa1Wsj5B|whb4;I5<>Gj8B(_~wBNdL}T3hGHBD zSI}pb*q>F4SY-b&<-)iyq+BrlTl`M>rL>jR{n;a2cctw!oXohO<}dsXM4Mw}Xn|8c zQ{+MuWluwtGw8V_ZYAZNIbNr?C~C1M+!bAa_sV~M=;^e6ak4tqpBOS4MH_b<-K40T zr{tw}(?qv-*FvK}0Tx%l@fqfD-cM22ZD^oQ$qyXfDOj1VIUoEXFW~4dX4_X?)(z3` zYWLergCV+yyYr2rV$0)%NXW(Y~q%A%i?yiIV z12_H36E*0eev-7lSsf%hZ(*rlbmk{HQy4ScJ;MyhYDb3)G=j$JJf!*?O5ecI7%1`4 z16|>p;bk0+{TV(&7ZH14Gw8WLj{QY39omARHgBGhX4d<8Odx77cF{rmT&#TO$>4pecIX z#a^R7^kTaU?wt(7@h+i_EBwpdP>eYv?_;a>zNyX0I)q}F)B|u>Lh5H`Q$ze*#=e4W zYO#MWW^HXLjQWy@j=tM8JI8Rtb0u$d3=Bh{b<+b^=1LKM%ZYD`0!kkfivTnV|CBxL zZ6;mmT5+7rqPs;y@oLIxrA26mfS6oqKO} zG)xJ*gKIUooR{l=eaoq#4A(O4qTt`6f%e4c{b!W(@LQ`JLal2H9&vK5tkSWX8(8Sd zB8s^P-HTUOOp|zYcftB&Cv^(xvDz;#@o6aM>EF%Yk4c*Ky6^UNUxqpmgumQi)MjCO zMTcAcDD4AJ;f>1J#5>ZRLisn=$jOV-B3kVsZvl(bK9kFHeuuXBx5D{Vr;?W!D(*Yu ziUrhDWLLky>+VaT$-?~^*wWuMQUjx-aU~_Eh4Sq*lvQa3zX?@L4H$7B4A_rXomUJB zx3#wwTW`3d#PS$}MVxNVBNnz8qylL7>RP9U8M)Q)Cjar*;KxS!Z*+Sf)8PN2+n#Bd zbQiV*nR>WD{1~h3+`@r2D9mRxhsX4KW-9cz-Tc(?$n)LZm}>;rYcw3%#+kHCX7yXM zu)ZVuJP@jJrB3f=4z_Mp94)(iD!`Wh8hW@kl0hh7)6c*l5b-i+rs`dtdCN@743JP6VCDbV!o|b{ccLONC%{K^%g-2{yDXkyfI};IXD&k~ z2m*+`y}fj;*JqI1MvK3G#{UVWvP^>q=>k;b0CZz-l*~b(%YE}IVHOwLktgX%i^w$W z1rfpGL0j8{?zEO>Spe5*k+-RP*z0e>!4$U10cWSAq1aw{dAbqW+24Rb(eqJ4@2|Z~ z9

0;y{2zbIt#Tf&$ELXRn{E4EKJy!E3qx093pWyE|w_+27s@!*Sc2XJU>5!CcA8 zRJLket*713fFQr6XY zEyxny8LzpisVUc>CbcA?`PHXhl4TxWV%&^a4asW)OM^zcn%=hDmF2jUI2E9jYyf-@ zCe1EPhwLhdf(My{NKOq%Im87npm7cD{M*1Ses9p<>w#q&_S(6^mnY3_$!FufhvcW8 zTuy4LE4(RDkHw$a0w1}S*<*}2ZLstP2eS1laAFyYyf%(~&sz0h8ZqJByCAd6^K#zu zu0Pp#KpGYf=RDnkExSWRVug4!!#6!0sP(bInjtwmSSl)LQR z>I`^8?l$6L(JIXms{3> zK5do!&>dYq)H9u*JhcM98&%CGv~VD@blCsixkbwT{TFx`zkM44MVwrEAQYjX7l%;Y zBqv9`cv$h_G5+_3GzxIb`DrKEX}#xKBxwIDkgi41!ei{zZi}5@eqq(efyRAnyuFr` z^!a(7ADP5+R9FX9Q?(R4QWeN$Ux!MBGAiYoR7F-Rg&V8aDSy3l2&4%x{%{kLFd>;l zMy8W6^tt9{*&~|VZ5)@Ajv{+&*u9r%xSbOY?6(8%9NV`!=xyq3TcDs2dni4S(Gk?m zH#;>}e3z0{l-i`(oTT!>Y}B-*wYg>|FHhHr|I?4V$J2ifg{TAapfz{(&RIA>FQadO zIOhkIM_yfn`#T8N`zt*47m4uK5E*I+aB*>aNU-W9C1Fx}EHv2}Bc8YvP=cY!XOHM@ zFl7S~)Hsu^Sv7U{v~NO-Vl+%sRz9#%`^am3=PR|}M@TtA38?(gg*VSoaAmGtfe_lg zR24H_>&H@`v$C3}EPh*fEPpSM%&A1Xyu5sPC! zy|Mq_6O0eFB?KX|O|~@obj-|&B`a~{;=WeI`2Rd98~?%e=W({qn4`PbgiQ$mF2C%{ zo_oqgwAN)kUeel&&;Vs}5#R4f8UYG;gtc|GD4mxn#F%|48uiariC0T%uxuV<0rgsq)5O6t4#Uf+~&hj(|AF8DS)#}p2|LH+Aa zTS(9OU;Mfi|A9i}Gm+}0>dG?l2neW_UsoL{ z_9b%qiFCm|5YDk;Ekc8$*msx$UZiK^dzCyX4zQT#d5Q=5SqCe0timxczF5NBZNgTl zR6s`!N|N=je+N@!n^$8Pkn^WGMsuyt7BPHF-H8px$HAcqAd!2M1375^{{E0g0-j+B zS>EGjJoUThjC3+GrH;Ro&koo3|1_U6nyJd<>3$uhWaV`8c@z2O$?u2*bWBV}296{+ zCxZ5xX|}fN3qzkuh=?w{?OJkk9dYi8Hs|n2M57v4zL#Ae76eoKzAuR7qQxjZJD9Hw zd0`}@Qfm!8E_p52qRr^djSUqTxrrGP1Rft=t|`*H9)2XS^%Z|cLO-Q4 zooCD;#Ci!5p2u8tA$6sth67O>RJc&FdQOc`?F3v@b(MEo)#sza!(JV-INTj&@cnnIQp<(oB_o4oRv&f>zHZJi_y7QSYJVudcW{^>W%Nwg zQFwwzRFaP_6_(1;{oKrgP+AFFK*=yK6y+KPk`3NZz0bYi7O*c%ti5>qO9uvC$B|M) z0`wv^<@ie_I`W%WR>__K1Bh&Y7KPg1Q4pji4TgH@ngiu(-4uk*7sKKb);Ga|m#0Lo z30$fcGvp%*jHKx4lgB>Vy}K)c1GX;C2aA=R#wQ7B#@DO`wHLLu{3fxC+tmT@@0JiD zP1?k-HwE-LNswj}0L}OuZLJh3hVB78NwjeYtUx}$5o6F%dbuwP!WR`LUn(Pm$<0@@ zGi}&zQJSno5R_A(dpMY5>ro{xDID6^h!RUcm<6{rB*`e?eH26fh zx5D_Ls&QJIdJXDD6cC}P)>XfJsQL!@0bev(k-!(SXaTCh0${Bdw+mu32Rn~K!oq%k z_LqRInUl-_O95wXc4I*fGE@}650Sav;}RCgo=>q%m#$=R1)l8gveT2zUR_VNf_alC z)LxEbmEmY;7igeK4aM;eTro5JIUA-pzp`OuIRT7`oZ{Js|L2J`VkhBmPnC!n=6#qt zKXMzT@;ilCf8(RLIVX2#NcU2+%7(nACJJ)aL~6~p^ji8Nd;p?-{b$I>R6W-*j<%(w zBbIwloF?3LbG_3>N$P^fE$ASfhxr%~e1J^;4FnjIUW#U*NCHR8Qm65tCS0k|Y0c&z zODagdg>oJ}J!j9>5M3^F(rch75PeQaOmeCAk znft{nSLCrF3V6MmABhW@vxAjNPnsAOLWN#{BLdR6;{VM@#|6F*Kpw}PY0AVcd{jL7wu%#^JL1<>_h(56XSNWlm(5|A{6o z98M@9f%h-sadk6_VrZrDMukeSa)t%CssC(yAh7jGWZvoDEhbGHylWBz$wQze@-mj-lY|=u{C^CP zFcG@lSUe5dTRw{N3jCYDe_O3AA|I-t^PgZUz$a^LJ($&eLID!swVS>Chf*9b5ZD?E z8)`;BO6S(HnK{J5(9k9$8X9O)Qz=sK-m6mPd<;bkAbcnp8493vO0^f#O~U@#i5}SL z$jmADK+g>1|k8YAVL^@>1z>_`EpoOj8M>PQhwJI+^NJ7EoeY~nm7Yyu_ z$}Um_o2HHf1JG>fUQ<8m_>6{9sLv5>bh>xsK$5w%!A=rZWy~!t12k(gDH}l<85tl( z8IRi3O-sYnn5i0f8>pxX|2R&%t2k3rNe*$bt1ZtQPGN@<6uV7c{lW>m1qq06?bJ3I zBH#E1ZHabe7V!M5{6$D260|hlAs{m<`}pl=FuUxSOiGdGE&T+}xhj_&~$X z*5U>xnS?t5#-3|!g@sboAtNJ@sc-$((uyP#j+cWLP2=UY`FXUMe#y2R5=koUT)1YT z%+*curHX7TWyhxzOihLU(Dk~7Y|`)@9h1cm-a=7h`X21#a9@E}AuIUV0dm)x6jgRJMr&Q#bVXv zjmR{L;^w1NJ9RHPlm+^~|cCGs4;r5A|wljseH4PDG@Wy515{i9(x?eDIp0fpU zBq%^E!0W9wn9zcc(?d127RREFC9qrKIXBRG)oZgbU|o?U4SH4)4@vUC>X++yWV8J- zmfM9^P-MaKGE_0{zZB&!DSiql8c?Xl$3>vyNkB;0QgzUYoROUo77MeQbQ~&NzlM7H zJnbAMhG|VL<8Gag9i1k#Zg3+W0NREkn59PwZM~%-9SFl=VFRzB(1m``qGgis(@200 ziU?VdqeyJ~SqRC=!4vGg?{t@NNHD6K$F)BwYF(j2@`zcyb?R2A<~=riK;A)*XVCf` zd7Z6ngteH1W+Vb~9)RQ?zKLD|bTH6|`Mw|{SzUT?yb3YT7;_XQoHa%WF<@rh+#(BU zSpJJ=6dh@|uT7mEyj}A1+h(d)bmrv7SW-hYEm`Qx=IF#;4zrX>6pc!t_&a-*d3Ta( zdzv@p1ayg*C5uHsckQ$nFT#>KAd)*pREHyt_wW;YzSd2dXP*CNTvz+#=5k6Hp$Ef$ zuKg@#xkdg}cBqvvdL5Mvy%oxIGN6g9tjrhxjKxf~%Bij^&7nN~2W##{v8dO22 z8B2hq+fnkxsiVQUh=|wX;^O1lhaBUAi%mC>vlRxk830>hA?*&{$l%Bp`tyP>7Q*{=`UHD$V787!Vx*c3A!4wXbd`TFL7%;Fg+APZGl?Z^_SnErL84_E`kH~=b z!^P!=z3RkWO7KDtLpv2UNjOB?3E1V^ki3Wo9DyI+sj8n1&O=RmK?3+3P^e~Q>8ooK z!B{I9b2u1Ljbs?pr_d}vLzLZD6ky)s{~tGOUF18fgptjN{_dbe?qyf zdeWQdihKX6AQ*S|bDTSF{plj7PZy_;j9p3fqR7*g1EmF5qL4KR55@ub$1?pW=WRm* zj?(@0V-F!I@S3gnx$i$ubhtj!G&&kq6qiXzMcmnVe$`ToAi2Q{t>5~yGo$_em*Bh+ z3hg1VnSKgo3znHr#3B~kmmO%vKvft(9bxLDVvO3!dJaILjs=Gj7A ze}in!FceRu(A53vQ_;t0R@u?qy6tmz7~+&p336NjIgobo(9MTd`hz|k19eFKl)^E3 zQX23AwW1|e5$anG7uK0jW9UPY`03=Yz{g$^>e_3mzcqQdpaMXf9ovg@WHr*cfR?H6 z?w+mV#1&z0qOeU{JVwJA6$3-dQs*;qNj zCr*DF2NNAk{Ivm732bOE&L6hFaU8@TC1nQph@-nt6h3XPFo$qX6q`V5Ldcf0d6_=O z?lGj_v`Pf&>2yTIqj&c}4@^KdTiy#};H#f~0H|Wz<$kibfURV!cin0Mq$mF&cnua# zG}?XBRmYfk)?m1VNbv!foz|-<8Jc*IbOJgdu-$nLLnk5;x)F?3a{SAS%NG2Jp1z9= z0E-QzKciF~?a8;XvH~yhpQYiJAV3A{xX4R1oRXZL-gM>xff8OLPE~R#q!MPrd963h znr)-NdZtP4pUPt=xCgS$3f>tz@y3Je2^DM%ROm>0jobrdoFh9Mxf|oV5peG3Ks&c@ zAp>{sN#>qZm_3l?fW9u)fegU1ny5oDjfG!fYf3wjMs z8E^+$a2xfEfVTm~NI_Wow_xz5EHqzW?n`NqhHVI=2~dc@A`Y3;+VuOyRKJW}d>@kv zrkU-nUxw}AHvnhkj;#-bW@Bt>UzZQeKjg^%XZYwhplnxfyqa+XBtbMlbRBY^wLSXT!0BJKnn{%jbB+Z zevugp(2Rqcbz!s0>Mjlon9SZIC;x;}jDDv=thsEZ>H~l$9eMW)S}m5ETi5yCI4J)@ zqPHl}pVeXO@93fbs_lLJ{4S0y@i{VY{m;fAMDJ2>iPfi3+Q3$}-s0_Ad+?N#N&Ft6 ze{1y7Sy;{LSUnd&05F50e!MoJl)s4*!fEEwGc9jV7XWV4{7w(mE`I>2`3oVkm5b~o z&D#9GeWdnYHSSClAae82vM${%GW~O%oj{nW?lwQPMsZwMwmD_!w)OJ%?Z`CIM=xYy z;j=h{LulSZ9j@j1R8X+^6I(}ZkjX~Ki#UNEHb#u7qF~Kr*2fm6$n5OurL4X&{30$4 zS~)roC=Q?G%Fk8VM7W1qKX-ALuTd6z6K!qk9T!mGkCMFlgM8U1LH`5f=f`;f literal 0 HcmV?d00001