From 4e64b30da84789b33777b41753884700daf6ef76 Mon Sep 17 00:00:00 2001 From: James Billy Date: Fri, 26 Apr 2024 11:15:39 +0200 Subject: [PATCH 1/5] Update AlienRaces reference. --- Source/AlienRacesPatch/PatchCore.cs | 5 ++--- Source/AlienRacesPatch/refs/AlienRace.dll | Bin 227328 -> 324096 bytes 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Source/AlienRacesPatch/PatchCore.cs b/Source/AlienRacesPatch/PatchCore.cs index 8c537d25..203b822b 100644 --- a/Source/AlienRacesPatch/PatchCore.cs +++ b/Source/AlienRacesPatch/PatchCore.cs @@ -1,7 +1,6 @@ -using System; -using AlienRace; -using AM; +using AlienRace; using JetBrains.Annotations; +using System; using Verse; namespace AM.AlienRacesPatch; diff --git a/Source/AlienRacesPatch/refs/AlienRace.dll b/Source/AlienRacesPatch/refs/AlienRace.dll index 7353940eb38c7b6dc466b152051b394f82c20dae..40461aab3c820d8adaef07ddd4098adbacf6335b 100644 GIT binary patch literal 324096 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 literal 227328 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 Date: Fri, 26 Apr 2024 11:46:29 +0200 Subject: [PATCH 2/5] Priximity detector bug fix (#43) * Rider IDE support. * Untested patch for Anomaly proximity detector. * Update Rider support gitignore. --- .gitignore | 26 +++++++++++++++++ Source/AnimationMod/AnimRenderer.cs | 8 +++--- ...Building_ProximityDetector_RunDetection.cs | 28 +++++++++++++++++++ ...lityUtility_IsPsychologicallyInvisible.cs} | 2 +- ...ch_DrawFaceGraphicsComp_CompRenderNodes.cs | 4 +-- 5 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 Source/AnimationMod/Patches/Patch_Building_ProximityDetector_RunDetection.cs rename Source/AnimationMod/Patches/{Patch_PawnUtility_IsInvisible.cs => Patch_InvisibilityUtility_IsPsychologicallyInvisible.cs} (93%) diff --git a/.gitignore b/.gitignore index 931516db..cd438d82 100644 --- a/.gitignore +++ b/.gitignore @@ -373,3 +373,29 @@ Source/packages/ Source/Content/Unity/RimVibes Bundles/Temp/ Source/UnityProject/UserSettings/ + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries diff --git a/Source/AnimationMod/AnimRenderer.cs b/Source/AnimationMod/AnimRenderer.cs index 016c03a8..343e7915 100644 --- a/Source/AnimationMod/AnimRenderer.cs +++ b/Source/AnimationMod/AnimRenderer.cs @@ -911,14 +911,14 @@ protected void DrawPawns(Action labelDraw = null) Patch_PawnRenderer_RenderPawnAt.AllowNext = true; Patch_PawnRenderer_RenderPawnAt.DoNotModify = true; // Don't use animation position/rotation. Patch_PawnRenderer_RenderPawnAt.NextDrawMode = Patch_PawnRenderer_RenderPawnAt.DrawMode.Full; - Patch_PawnUtility_IsInvisible.IsRendering = true; + Patch_InvisibilityUtility_IsPsychologicallyInvisible.IsRendering = true; PrePawnSpecialRender?.Invoke(pawn, this, Map); pawn.DrawNowAt(pawn.DrawPosHeld ?? pawn.DrawPos); PostPawnSpecialRender?.Invoke(pawn, this, Map); Patch_PawnRenderer_RenderPawnAt.DoNotModify = false; - Patch_PawnUtility_IsInvisible.IsRendering = false; + Patch_InvisibilityUtility_IsPsychologicallyInvisible.IsRendering = false; // Draw label. Vector3 drawPos2 = pawn.DrawPos; @@ -971,7 +971,7 @@ protected void DrawPawns(Action labelDraw = null) : i == 0 ? Patch_PawnRenderer_RenderPawnAt.DrawMode.BodyOnly : Patch_PawnRenderer_RenderPawnAt.DrawMode.HeadOnly; Patch_PawnRenderer_DrawShadowInternal.Suppress = suppressShadow; // In 1.4 shadow rendering is baked into RenderPawnAt and may need to be prevented. - Patch_PawnUtility_IsInvisible.IsRendering = true; + Patch_InvisibilityUtility_IsPsychologicallyInvisible.IsRendering = true; PrePawnSpecialRender?.Invoke(pawn, this, Map); @@ -979,7 +979,7 @@ protected void DrawPawns(Action labelDraw = null) PostPawnSpecialRender?.Invoke(pawn, this, Map); Patch_PawnRenderer_DrawShadowInternal.Suppress = false; - Patch_PawnUtility_IsInvisible.IsRendering = false; + Patch_InvisibilityUtility_IsPsychologicallyInvisible.IsRendering = false; } // Render shadow. diff --git a/Source/AnimationMod/Patches/Patch_Building_ProximityDetector_RunDetection.cs b/Source/AnimationMod/Patches/Patch_Building_ProximityDetector_RunDetection.cs new file mode 100644 index 00000000..cf17d65d --- /dev/null +++ b/Source/AnimationMod/Patches/Patch_Building_ProximityDetector_RunDetection.cs @@ -0,0 +1,28 @@ +using HarmonyLib; +using JetBrains.Annotations; +using RimWorld; + +namespace AM.Patches; + +///

+/// The proximity detector freaks out if it detects any invisible pawn in range, +/// which includes the animated pawns. +/// This patch makes them not be considered invisible when the detection process is running. +/// +[HarmonyPatch(typeof(Building_ProximityDetector), nameof(Building_ProximityDetector.RunDetection))] +[UsedImplicitly(ImplicitUseKindFlags.Access, ImplicitUseTargetFlags.Itself | ImplicitUseTargetFlags.WithMembers)] +public class Patch_Building_ProximityDetector_RunDetection +{ + [HarmonyPriority(Priority.First)] + private static void Prefix(ref bool __state) + { + __state = Patch_InvisibilityUtility_IsPsychologicallyInvisible.IsRendering; + Patch_InvisibilityUtility_IsPsychologicallyInvisible.IsRendering = true; + } + + [HarmonyPriority(Priority.First)] + private static void Postfix(bool __state) + { + Patch_InvisibilityUtility_IsPsychologicallyInvisible.IsRendering = __state; + } +} \ No newline at end of file diff --git a/Source/AnimationMod/Patches/Patch_PawnUtility_IsInvisible.cs b/Source/AnimationMod/Patches/Patch_InvisibilityUtility_IsPsychologicallyInvisible.cs similarity index 93% rename from Source/AnimationMod/Patches/Patch_PawnUtility_IsInvisible.cs rename to Source/AnimationMod/Patches/Patch_InvisibilityUtility_IsPsychologicallyInvisible.cs index 2e0c0c27..a771d208 100644 --- a/Source/AnimationMod/Patches/Patch_PawnUtility_IsInvisible.cs +++ b/Source/AnimationMod/Patches/Patch_InvisibilityUtility_IsPsychologicallyInvisible.cs @@ -14,7 +14,7 @@ namespace AM.Patches; /// compromise. /// [HarmonyPatch(typeof(InvisibilityUtility), nameof(InvisibilityUtility.IsPsychologicallyInvisible))] -public static class Patch_PawnUtility_IsInvisible +public static class Patch_InvisibilityUtility_IsPsychologicallyInvisible { public static bool IsRendering; diff --git a/Source/FacialAnimationPatch/Patch_DrawFaceGraphicsComp_CompRenderNodes.cs b/Source/FacialAnimationPatch/Patch_DrawFaceGraphicsComp_CompRenderNodes.cs index 16c0a69a..561686cc 100644 --- a/Source/FacialAnimationPatch/Patch_DrawFaceGraphicsComp_CompRenderNodes.cs +++ b/Source/FacialAnimationPatch/Patch_DrawFaceGraphicsComp_CompRenderNodes.cs @@ -30,7 +30,7 @@ private static void Prefix(DrawFaceGraphicsComp __instance, ref bool __state) { __state = true; __instance.SetDirty(); - Patch_PawnUtility_IsInvisible.IsRendering = true; + Patch_InvisibilityUtility_IsPsychologicallyInvisible.IsRendering = true; } } @@ -38,7 +38,7 @@ private static void Postfix(bool __state) { if (__state) { - Patch_PawnUtility_IsInvisible.IsRendering = false; + Patch_InvisibilityUtility_IsPsychologicallyInvisible.IsRendering = false; } } } \ No newline at end of file From 67d83e494adb0909cef774d3e613be1dcc2e3f20 Mon Sep 17 00:00:00 2001 From: James B Date: Fri, 26 Apr 2024 13:11:28 +0200 Subject: [PATCH 3/5] Full multiversion support (#44) * Move current code into 1.5 subfolder. * Adjust 1.5 output paths. * Add 1.4 source. * Update CI/CD scripts. * Build and test on pull requests. --- .github/workflows/BuildModCheck.yml | 23 +- .../workflows/GenerateCompatibilityList.yml | 30 +- .github/workflows/GenerateReleaseZip.yml | 99 +- .../AMRetextureSupport.csproj | 35 + .../AMRetextureSupport/ActiveTextureReport.cs | 0 .../AMRetextureSupport/RetextureUtility.cs | 315 ++++ .../AlienRacesPatch/AlienRacesPatch.csproj | 43 + Source/1.4/AlienRacesPatch/PatchCore.cs | 40 + .../AlienRacesPatch/refs/1.4/AlienRace14.dll | Bin 0 -> 227328 bytes Source/1.4/AnimationMod.sln | 80 + Source/1.4/AnimationMod.sln.DotSettings | 46 + .../CAI5000Patch/AntiRetreatPatch.cs | 0 .../CAI5000Patch/CAI5000AnimationPatch.cs | 0 Source/1.4/CAI5000Patch/CAI5000Patch.csproj | 59 + Source/1.4/CAI5000Patch/CombatAI_14.dll | Bin 0 -> 384000 bytes .../CAI5000Patch/FixCustomRenderInAnimator.cs | 38 + Source/{ => 1.4}/CAI5000Patch/PatchCore.cs | 0 ...ngComp_CombatAI_CompTickRare_Transpiler.cs | 0 ...Comp_CombatAI_OnScanFinished_Transpiler.cs | 0 .../CombatExtendedOutcomeWorker.cs | 0 .../CombatExtendedPatch.csproj | 56 + .../CombatExtendedPatch/CombatExtended_14.dll | Bin 0 -> 929280 bytes .../CombatExtendedPatch/PatchCore.cs | 0 .../Assembly-CSharp.dll | Bin .../CompatibilityReportGenerator.csproj | 48 + .../CompatibilityReportGenerator/Program.cs | 110 ++ .../Properties/Resources.Designer.cs | 0 .../Properties/Resources.resx | 0 .../Properties/launchSettings.json | 0 .../CompatibilityReportGenerator/Template.md | 0 .../UnityEngine.CoreModule.dll | Bin .../UnityEngine.SharedInternalsModule.dll | Bin .../{ => 1.4}/LightsaberPatch/Extensions.cs | 0 .../LightsaberPatch/LightsaberPatch.csproj | 57 + .../LightsaberSweepProvider.cs | 0 Source/{ => 1.4}/LightsaberPatch/PatchCore.cs | 0 .../LightsaberPatch/SaberRenderer.cs | 0 .../refs/1.4/CompActivatableEffect.dll | Bin 0 -> 16896 bytes .../refs/1.4/CompSlotLoadable.dll | Bin 0 -> 38400 bytes .../1.4/LightsaberPatch/refs/1.4/SWSaber.dll | Bin 0 -> 16384 bytes .../Controllers/ModReportingController.cs | 0 .../DAL/ModReportingDAL.cs | 0 .../Facade/ModReportingFacade.cs | 0 .../ModRequestAPI.Backend/LambdaEntryPoint.cs | 0 .../ModRequestAPI.Backend/LocalEntryPoint.cs | 0 .../ModRequestAPI.Backend.csproj | 0 .../Properties/launchSettings.json | 0 .../src/ModRequestAPI.Backend/Readme.md | 0 .../src/ModRequestAPI.Backend/Startup.cs | 0 .../appsettings.Development.json | 0 .../ModRequestAPI.Backend/appsettings.json | 0 .../aws-lambda-tools-defaults.json | 0 .../ModRequestAPI.Backend/serverless.template | 0 .../ModRequestAPI.Models/MissingModRequest.cs | 0 .../ModRequestAPI.Models.csproj | 11 + Source/1.4/ModRequestAPI/ModRequestAPI.csproj | 22 + .../ModRequestAPI/ModRequestClient.cs | 0 .../PerformanceOptimizerPatch/PatchCore.cs | 0 ...ation_PawnUtility_IsInvisible_DoPatches.cs | 0 ...h_Optimization_RefreshRate_DrawSettings.cs | 0 .../PerformanceOptimizerPatch.csproj | 56 + .../refs/1.4}/PerformanceOptimizer.dll | Bin Source/{ => 1.4}/TacticowlPatch/PatchCore.cs | 0 .../refs => 1.4/TacticowlPatch}/Tacticowl.dll | Bin .../1.4/TacticowlPatch/TacticowlPatch.csproj | 48 + Source/1.4/ThingGenerator/0ColourPicker.dll | Bin 0 -> 19968 bytes .../AMSettings/Presets/Default.cs | 0 .../AMSettings/Presets/NoLassos.cs | 0 .../AMSettings/Presets/VanillaPlus.cs | 0 .../1.4/ThingGenerator/AMSettings/Settings.cs | 468 ++++++ .../AMSettings/SimpleSettings.cs | 1272 ++++++++++++++ Source/1.4/ThingGenerator/AM_DefOf.cs | 50 + .../ThingGenerator}/AnimCellData.cs | 0 Source/1.4/ThingGenerator/AnimDef.cs | 458 +++++ Source/1.4/ThingGenerator/AnimRenderer.cs | 1470 +++++++++++++++++ .../ThingGenerator}/AnimType.cs | 0 Source/1.4/ThingGenerator/AnimationManager.cs | 265 +++ Source/1.4/ThingGenerator/AnimationMod.csproj | 62 + .../AnimationStartParameters.cs | 0 .../ThingGenerator}/AudioCredits.txt | 0 .../ThingGenerator}/AudioUtility.cs | 0 .../AutoDuel/AutoFriendlyDuelMapComp.cs | 169 ++ .../AutoDuel/JoyGiver_FriendlyDuel.cs | 53 + .../AutoDuel/JoyGiver_SpectateFriendlyDuel.cs | 0 .../ThingGenerator}/Bezier.cs | 0 .../Buildings/Building_DuelSpot.cs | 0 .../ColumnWorkers/PawnColumnWorker_Base.cs | 0 .../ColumnWorkers/PawnColumnWorker_Execute.cs | 0 .../ColumnWorkers/PawnColumnWorker_Lasso.cs | 0 .../ThingGenerator}/Content.cs | 0 .../Controller/ActionController.cs | 0 .../Controller/Reports/DuelAttemptReport.cs | 0 .../Reports/ExecutionAttemptReport.cs | 0 .../Reports/GrappleAttemptReport.cs | 0 .../Controller/Requests/DuelAttemptRequest.cs | 0 .../Requests/ExecutionAttemptRequest.cs | 0 .../Requests/GrappleAttemptsRequest.cs | 0 .../ThingGenerator}/Core.cs | 0 Source/1.4/ThingGenerator/Data/AnimData.cs | 698 ++++++++ .../Data/Model/AnimDataModel.cs | 0 .../Data/Model/AnimPartModel.cs | 0 .../ThingGenerator}/Data/Model/CurveModel.cs | 0 .../ThingGenerator}/Data/Model/EventModel.cs | 0 .../ThingGenerator}/Data/Model/SweepPoint.cs | 0 .../ThingGenerator}/Events/AudioEvent.cs | 0 .../ThingGenerator}/Events/CamShakeEvent.cs | 0 .../ThingGenerator}/Events/ClashAudioEvent.cs | 0 .../Events/DamageEffectEvent.cs | 0 .../ThingGenerator}/Events/DuelEvent.cs | 0 .../ThingGenerator}/Events/EventBase.cs | 0 .../ThingGenerator}/Events/EventHelper.cs | 0 .../ThingGenerator}/Events/GoreSplashEvent.cs | 0 .../ThingGenerator}/Events/KillPawnEvent.cs | 0 .../ThingGenerator}/Events/MoteEvent.cs | 0 .../ThingGenerator}/Events/PuntPawnEvent.cs | 0 .../ThingGenerator}/Events/TextMoteEvent.cs | 0 .../Events/Workers/AnimEventInput.cs | 0 .../Events/Workers/AudioWorker.cs | 0 .../Events/Workers/ClashAudioWorker.cs | 0 .../Events/Workers/DamageEffectWorker.cs | 0 .../Events/Workers/DuelSectionWorker.cs | 0 .../Events/Workers/EventWorkerBase.cs | 0 .../Events/Workers/GoreSplashWorker.cs | 0 .../Events/Workers/KillPawnWorker.cs | 0 .../Events/Workers/MoteWorker.cs | 0 .../Events/Workers/PuntPawnWorker.cs | 0 .../Events/Workers/TextMoteWorker.cs | 0 .../ThingGenerator}/ExecutionOutcome.cs | 0 Source/1.4/ThingGenerator/Extensions.cs | 321 ++++ Source/1.4/ThingGenerator/GameComp.cs | 185 +++ .../ThingGenerator}/Grappling/GrabUtility.cs | 0 .../ThingGenerator/Grappling/GrappleFlyer.cs | 209 +++ .../Grappling/JobDriver_GrapplePawn.cs | 0 .../Grappling/KnockbackFlyer.cs | 212 +++ .../1.4/ThingGenerator/Heads/HeadInstance.cs | 53 + .../HediffCompProperties_SingleTendRemove.cs | 0 .../Health/HediffComp_SingleTendRemove.cs | 0 .../1.4/ThingGenerator/Idle/IdleClassifier.cs | 72 + .../ThingGenerator/Idle/IdleControllerComp.cs | 594 +++++++ .../ThingGenerator}/Idle/IdleType.cs | 0 .../ThingGenerator}/Idle/WeaponCat.cs | 0 .../ThingGenerator}/Idle/WeaponSize.cs | 0 .../Jobs/IDuelEndNotificationReceiver.cs | 0 .../Jobs/JobDriver_ChannelAnimation.cs | 0 .../Jobs/JobDriver_DoAnimation.cs | 0 .../Jobs/JobDriver_DoFriendlyDuel.cs | 0 .../Jobs/JobDriver_GoToAnimationSpot.cs | 0 .../Jobs/JobDriver_GoToExecutionSpot.cs | 0 .../Jobs/JobDriver_SpectateDuel.cs | 0 .../ThingGenerator}/Jobs/ToilUtils.cs | 0 .../MeleeAnimationAdjustmentDef.cs | 0 .../ThingGenerator}/Outcome/IOutcomeWorker.cs | 0 .../ThingGenerator/Outcome/OutcomeUtility.cs | 554 +++++++ .../Outcome/PossibleMeleeAttack.cs | 0 .../Outcome/VanillaOutcomeWorker.cs | 0 .../ThingGenerator}/PartRenderer.cs | 0 .../1.4/ThingGenerator/Patches/PatchMaster.cs | 19 + .../Patches/Patch_Corpse_DrawAt.cs | 68 + ...atch_FloatMenuMakerMap_AddDraftedOrders.cs | 0 ...lTextureAtlasManager_TryGetPawnFrameSet.cs | 28 + .../Patch_PawnGenerator_GeneratePawn.cs | 77 + .../Patch_PawnRenderer_DrawEquipmentAiming.cs | 35 + .../Patch_PawnRenderer_DrawInvisibleShadow.cs | 17 + .../Patch_PawnRenderer_LayingFacing.cs | 31 + .../Patch_PawnRenderer_RenderPawnAt.cs | 34 + .../Patch_PawnRenderer_RenderPawnInternal.cs | 88 + .../Patches/Patch_PawnUtility_GetPosture.cs | 23 + .../Patches/Patch_PawnUtility_IsInvisible.cs | 34 + .../Patches/Patch_Pawn_DrawGUIOverlay.cs | 0 ...h_Pawn_DrawTracker_Notify_MeleeAttackOn.cs | 0 .../Patches/Patch_VBE_Utils_DrawBG.cs | 0 ...rb_MeleeAttack_ApplyMeleeDamageToTarget.cs | 0 .../Patch_Verb_MeleeAttack_TryCastShot.cs | 0 .../ThingGenerator}/PawnData/AutoOption.cs | 0 .../ThingGenerator}/PawnData/PawnMeleeData.cs | 0 .../Preview/PreviewRenderer.cs | 0 .../Processing/MapPawnProcessor.cs | 625 +++++++ .../ThingGenerator}/Processing/RefTimer.cs | 0 .../MustHaveHeadPromotionWorker.cs | 0 .../AnimationRendererWorker.cs | 0 .../GilgameshRendererWorker.cs | 0 .../ThingGenerator}/Reqs/AndReq.cs | 0 .../ThingGenerator}/Reqs/AnyCategory.cs | 0 .../ThingGenerator}/Reqs/AnySize.cs | 0 .../ThingGenerator}/Reqs/AnyType.cs | 0 .../ThingGenerator}/Reqs/False.cs | 0 .../ThingGenerator}/Reqs/OnlyType.cs | 0 .../ThingGenerator}/Reqs/OrReq.cs | 0 .../ThingGenerator}/Reqs/Req.cs | 0 .../ThingGenerator}/Reqs/ReqInput.cs | 0 .../ThingGenerator}/Reqs/SpecificWeapon.cs | 0 .../ThingGenerator}/Reqs/True.cs | 0 .../ThingGenerator}/SpaceChecker.cs | 0 .../Stats/StatWorker_DuelAbility.cs | 0 .../Stats/StatWorker_ExecCooldown.cs | 0 .../Stats/StatWorker_Lethality.cs | 0 .../Sweep/BasicSweepProvider.cs | 0 .../ThingGenerator}/Sweep/ISweepProvider.cs | 0 .../ThingGenerator}/Sweep/PartWithSweep.cs | 0 .../ThingGenerator}/Sweep/SweepMesh.cs | 0 .../ThingGenerator}/Tweaks/ColorConverter.cs | 0 .../ThingGenerator}/Tweaks/HandsMode.cs | 0 .../ThingGenerator/Tweaks/ItemTweakData.cs | 350 ++++ .../ThingGenerator}/Tweaks/MeleeWeaponType.cs | 0 .../ThingGenerator/Tweaks/TweakDataManager.cs | 275 +++ Source/1.4/ThingGenerator/UI/BGRenderer.cs | 152 ++ .../UI/Dialog_AnimationDebugger.cs | 840 ++++++++++ .../ThingGenerator/UI/Dialog_TweakEditor.cs | 607 +++++++ .../UI/DraftedFloatMenuOptionsUI.cs | 0 .../ThingGenerator}/UniqueSkillDef.cs | 0 .../ChanneledUniqueSkillInstance.cs | 0 .../ExecutionUniqueSkillInstance.cs | 0 .../UniqueSkills/Instances/ExecutionSkills.cs | 0 .../UniqueSkills/Instances/GilgameshSkill.cs | 0 .../ThingGenerator}/UniqueSkills/SkillType.cs | 0 .../UniqueSkills/UniqueSkillInstance.cs | 0 .../ThingGenerator}/Video/BundleManager.cs | 0 .../ThingGenerator}/Video/VideoPlayerUtil.cs | 0 .../AMRetextureSupport.csproj | 0 .../AMRetextureSupport/ActiveTextureReport.cs | 47 + .../AMRetextureSupport/RetextureUtility.cs | 0 .../AlienRacesPatch/AlienRacesPatch.csproj | 2 +- Source/{ => 1.5}/AlienRacesPatch/PatchCore.cs | 0 .../AlienRacesPatch/refs/AlienRace.dll | Bin Source/{ => 1.5}/AnimationMod.sln | 0 Source/{ => 1.5}/AnimationMod.sln.DotSettings | 0 .../AMSettings/Presets/Default.cs | 10 + .../AMSettings/Presets/NoLassos.cs | 20 + .../AMSettings/Presets/VanillaPlus.cs | 23 + .../AnimationMod/AMSettings/Settings.cs | 0 .../AnimationMod/AMSettings/SimpleSettings.cs | 0 Source/{ => 1.5}/AnimationMod/AM_DefOf.cs | 0 Source/1.5/AnimationMod/AnimCellData.cs | 48 + Source/{ => 1.5}/AnimationMod/AnimDef.cs | 0 Source/{ => 1.5}/AnimationMod/AnimRenderer.cs | 0 Source/1.5/AnimationMod/AnimType.cs | 11 + .../AnimationMod/AnimationManager.cs | 0 .../AnimationMod/AnimationMod.csproj | 2 +- .../AnimationMod/AnimationStartParameters.cs | 148 ++ Source/1.5/AnimationMod/AudioCredits.txt | 15 + Source/1.5/AnimationMod/AudioUtility.cs | 92 ++ .../AutoDuel/AutoFriendlyDuelMapComp.cs | 0 .../AutoDuel/JoyGiver_FriendlyDuel.cs | 0 .../AutoDuel/JoyGiver_SpectateFriendlyDuel.cs | 49 + Source/1.5/AnimationMod/Bezier.cs | 48 + .../Buildings/Building_DuelSpot.cs | 276 ++++ .../ColumnWorkers/PawnColumnWorker_Base.cs | 75 + .../ColumnWorkers/PawnColumnWorker_Execute.cs | 40 + .../ColumnWorkers/PawnColumnWorker_Lasso.cs | 41 + Source/1.5/AnimationMod/Content.cs | 164 ++ .../Controller/ActionController.cs | 784 +++++++++ .../Controller/Reports/DuelAttemptReport.cs | 79 + .../Reports/ExecutionAttemptReport.cs | 130 ++ .../Reports/GrappleAttemptReport.cs | 76 + .../Controller/Requests/DuelAttemptRequest.cs | 22 + .../Requests/ExecutionAttemptRequest.cs | 77 + .../Requests/GrappleAttemptsRequest.cs | 60 + Source/1.5/AnimationMod/Core.cs | 363 ++++ .../{ => 1.5}/AnimationMod/Data/AnimData.cs | 0 .../AnimationMod/Data/Model/AnimDataModel.cs | 42 + .../AnimationMod/Data/Model/AnimPartModel.cs | 61 + .../1.5/AnimationMod/Data/Model/CurveModel.cs | 34 + .../1.5/AnimationMod/Data/Model/EventModel.cs | 14 + .../1.5/AnimationMod/Data/Model/SweepPoint.cs | 87 + Source/1.5/AnimationMod/Events/AudioEvent.cs | 24 + .../1.5/AnimationMod/Events/CamShakeEvent.cs | 22 + .../AnimationMod/Events/ClashAudioEvent.cs | 14 + .../AnimationMod/Events/DamageEffectEvent.cs | 18 + Source/1.5/AnimationMod/Events/DuelEvent.cs | 13 + Source/1.5/AnimationMod/Events/EventBase.cs | 125 ++ Source/1.5/AnimationMod/Events/EventHelper.cs | 18 + .../AnimationMod/Events/GoreSplashEvent.cs | 20 + .../1.5/AnimationMod/Events/KillPawnEvent.cs | 30 + Source/1.5/AnimationMod/Events/MoteEvent.cs | 36 + .../1.5/AnimationMod/Events/PuntPawnEvent.cs | 18 + .../1.5/AnimationMod/Events/TextMoteEvent.cs | 24 + .../Events/Workers/AnimEventInput.cs | 39 + .../Events/Workers/AudioWorker.cs | 34 + .../Events/Workers/ClashAudioWorker.cs | 25 + .../Events/Workers/DamageEffectWorker.cs | 56 + .../Events/Workers/DuelSectionWorker.cs | 288 ++++ .../Events/Workers/EventWorkerBase.cs | 46 + .../Events/Workers/GoreSplashWorker.cs | 52 + .../Events/Workers/KillPawnWorker.cs | 154 ++ .../AnimationMod/Events/Workers/MoteWorker.cs | 53 + .../Events/Workers/PuntPawnWorker.cs | 42 + .../Events/Workers/TextMoteWorker.cs | 28 + Source/1.5/AnimationMod/ExecutionOutcome.cs | 14 + Source/{ => 1.5}/AnimationMod/Extensions.cs | 0 Source/{ => 1.5}/AnimationMod/GameComp.cs | 0 .../1.5/AnimationMod/Grappling/GrabUtility.cs | 163 ++ .../AnimationMod/Grappling/GrappleFlyer.cs | 0 .../Grappling/JobDriver_GrapplePawn.cs | 202 +++ .../AnimationMod/Grappling/KnockbackFlyer.cs | 0 .../AnimationMod/Heads/HeadInstance.cs | 0 .../HediffCompProperties_SingleTendRemove.cs | 13 + .../Health/HediffComp_SingleTendRemove.cs | 13 + .../AnimationMod/Idle/IdleClassifier.cs | 0 .../AnimationMod/Idle/IdleControllerComp.cs | 0 Source/1.5/AnimationMod/Idle/IdleType.cs | 12 + Source/1.5/AnimationMod/Idle/WeaponCat.cs | 11 + Source/1.5/AnimationMod/Idle/WeaponSize.cs | 20 + .../Jobs/IDuelEndNotificationReceiver.cs | 6 + .../Jobs/JobDriver_ChannelAnimation.cs | 53 + .../Jobs/JobDriver_DoAnimation.cs | 81 + .../Jobs/JobDriver_DoFriendlyDuel.cs | 366 ++++ .../Jobs/JobDriver_GoToAnimationSpot.cs | 107 ++ .../Jobs/JobDriver_GoToExecutionSpot.cs | 147 ++ .../Jobs/JobDriver_SpectateDuel.cs | 87 + Source/1.5/AnimationMod/Jobs/ToilUtils.cs | 53 + .../MeleeAnimationAdjustmentDef.cs | 64 + .../AnimationMod/Outcome/IOutcomeWorker.cs | 18 + .../AnimationMod/Outcome/OutcomeUtility.cs | 0 .../Outcome/PossibleMeleeAttack.cs | 15 + .../Outcome/VanillaOutcomeWorker.cs | 68 + Source/1.5/AnimationMod/PartRenderer.cs | 26 + .../AnimationMod/Patches/PatchMaster.cs | 0 ...Building_ProximityDetector_RunDetection.cs | 0 .../Patches/Patch_Corpse_DrawAt.cs | 0 ...atch_FloatMenuMakerMap_AddDraftedOrders.cs | 20 + .../Patches/Patch_HediffSet_HasHead.cs | 0 ...ilityUtility_IsPsychologicallyInvisible.cs | 0 .../Patch_PawnGenerator_GeneratePawn.cs | 0 .../Patch_PawnRenderer_DrawEquipmentAiming.cs | 0 .../Patch_PawnRenderer_DrawShadowInternal.cs | 0 .../Patch_PawnRenderer_RenderPawnAt.cs | 0 .../Patches/Patch_Pawn_DrawGUIOverlay.cs | 25 + ...h_Pawn_DrawTracker_Notify_MeleeAttackOn.cs | 32 + .../Patches/Patch_VBE_Utils_DrawBG.cs | 68 + ...rb_MeleeAttack_ApplyMeleeDamageToTarget.cs | 60 + .../Patch_Verb_MeleeAttack_TryCastShot.cs | 20 + .../1.5/AnimationMod/PawnData/AutoOption.cs | 9 + .../AnimationMod/PawnData/PawnMeleeData.cs | 61 + .../AnimationMod/Preview/PreviewRenderer.cs | 56 + .../Processing/MapPawnProcessor.cs | 0 .../1.5/AnimationMod/Processing/RefTimer.cs | 26 + .../MustHaveHeadPromotionWorker.cs | 10 + .../AnimationRendererWorker.cs | 53 + .../GilgameshRendererWorker.cs | 106 ++ Source/1.5/AnimationMod/Reqs/AndReq.cs | 14 + Source/1.5/AnimationMod/Reqs/AnyCategory.cs | 13 + Source/1.5/AnimationMod/Reqs/AnySize.cs | 14 + Source/1.5/AnimationMod/Reqs/AnyType.cs | 15 + Source/1.5/AnimationMod/Reqs/False.cs | 9 + Source/1.5/AnimationMod/Reqs/OnlyType.cs | 14 + Source/1.5/AnimationMod/Reqs/OrReq.cs | 15 + Source/1.5/AnimationMod/Reqs/Req.cs | 7 + Source/1.5/AnimationMod/Reqs/ReqInput.cs | 30 + .../1.5/AnimationMod/Reqs/SpecificWeapon.cs | 18 + Source/1.5/AnimationMod/Reqs/True.cs | 9 + Source/1.5/AnimationMod/SpaceChecker.cs | 96 ++ .../Stats/StatWorker_DuelAbility.cs | 94 ++ .../Stats/StatWorker_ExecCooldown.cs | 68 + .../Stats/StatWorker_Lethality.cs | 131 ++ .../AnimationMod/Sweep/BasicSweepProvider.cs | 37 + .../1.5/AnimationMod/Sweep/ISweepProvider.cs | 18 + .../1.5/AnimationMod/Sweep/PartWithSweep.cs | 154 ++ Source/1.5/AnimationMod/Sweep/SweepMesh.cs | 119 ++ .../1.5/AnimationMod/Tweaks/ColorConverter.cs | 231 +++ Source/1.5/AnimationMod/Tweaks/HandsMode.cs | 9 + .../AnimationMod/Tweaks/ItemTweakData.cs | 0 .../AnimationMod/Tweaks/MeleeWeaponType.cs | 15 + .../AnimationMod/Tweaks/TweakDataManager.cs | 0 .../{ => 1.5}/AnimationMod/UI/BGRenderer.cs | 0 .../UI/Dialog_AnimationDebugger.cs | 0 .../AnimationMod/UI/Dialog_TweakEditor.cs | 0 .../UI/DraftedFloatMenuOptionsUI.cs | 607 +++++++ Source/1.5/AnimationMod/UniqueSkillDef.cs | 84 + .../ChanneledUniqueSkillInstance.cs | 126 ++ .../ExecutionUniqueSkillInstance.cs | 79 + .../UniqueSkills/Instances/ExecutionSkills.cs | 9 + .../UniqueSkills/Instances/GilgameshSkill.cs | 84 + .../AnimationMod/UniqueSkills/SkillType.cs | 20 + .../UniqueSkills/UniqueSkillInstance.cs | 41 + .../1.5/AnimationMod/Video/BundleManager.cs | 142 ++ .../1.5/AnimationMod/Video/VideoPlayerUtil.cs | 90 + .../AnimationMod/refs/0ColourPicker.dll | Bin Source/1.5/CAI5000Patch/AntiRetreatPatch.cs | 22 + .../1.5/CAI5000Patch/CAI5000AnimationPatch.cs | 63 + .../CAI5000Patch/CAI5000Patch.csproj | 2 +- .../CAI5000Patch/FixCustomRenderInAnimator.cs | 0 Source/1.5/CAI5000Patch/PatchCore.cs | 26 + ...ngComp_CombatAI_CompTickRare_Transpiler.cs | 57 + ...Comp_CombatAI_OnScanFinished_Transpiler.cs | 57 + .../{ => 1.5}/CAI5000Patch/refs/CombatAI.dll | Bin Source/{ => 1.5}/Calc.py | 0 .../CombatExtendedOutcomeWorker.cs | 82 + .../CombatExtendedPatch.csproj | 2 +- Source/1.5/CombatExtendedPatch/PatchCore.cs | 24 + .../refs/CombatExtended.dll | Bin .../Assembly-CSharp.dll | Bin 0 -> 11575296 bytes .../CompatibilityReportGenerator.csproj | 0 .../CompatibilityReportGenerator/Program.cs | 0 .../Properties/Resources.Designer.cs | 84 + .../Properties/Resources.resx | 124 ++ .../Properties/launchSettings.json | 8 + .../CompatibilityReportGenerator/Template.md | 25 + .../UnityEngine.CoreModule.dll | Bin 0 -> 1012736 bytes .../UnityEngine.SharedInternalsModule.dll | Bin 0 -> 19456 bytes Source/{ => 1.5}/Directory.Build.props | 0 .../FacialAnimationPatch - Backup.csproj | 0 .../FacialAnimationPatch.csproj | 2 +- .../FacialAnimationPatch/PatchCore.cs | 0 ...ch_DrawFaceGraphicsComp_CompRenderNodes.cs | 0 .../refs/FacialAnimation.dll | Bin Source/1.5/LightsaberPatch/Extensions.cs | 29 + .../LightsaberPatch/LightsaberPatch.csproj | 2 +- .../LightsaberSweepProvider.cs | 46 + Source/1.5/LightsaberPatch/PatchCore.cs | 17 + Source/1.5/LightsaberPatch/SaberRenderer.cs | 29 + .../refs/CompActivatableEffect.dll | Bin .../LightsaberPatch/refs/CompSlotLoadable.dll | Bin .../LightsaberPatch/refs/SWSaber.dll | Bin .../Controllers/ModReportingController.cs | 37 + .../DAL/ModReportingDAL.cs | 82 + .../Facade/ModReportingFacade.cs | 41 + .../ModRequestAPI.Backend/LambdaEntryPoint.cs | 45 + .../ModRequestAPI.Backend/LocalEntryPoint.cs | 20 + .../ModRequestAPI.Backend.csproj | 23 + .../Properties/launchSettings.json | 17 + .../src/ModRequestAPI.Backend/Readme.md | 69 + .../src/ModRequestAPI.Backend/Startup.cs | 56 + .../appsettings.Development.json | 5 + .../ModRequestAPI.Backend/appsettings.json | 10 + .../aws-lambda-tools-defaults.json | 17 + .../ModRequestAPI.Backend/serverless.template | 47 + .../ModRequestAPI.Models/MissingModRequest.cs | 25 + .../ModRequestAPI.Models.csproj | 0 .../ModRequestAPI/ModRequestAPI.csproj | 0 Source/1.5/ModRequestAPI/ModRequestClient.cs | 44 + .../PerformanceOptimizerPatch/PatchCore.cs | 33 + ...ation_PawnUtility_IsInvisible_DoPatches.cs | 20 + ...h_Optimization_RefreshRate_DrawSettings.cs | 23 + .../PerformanceOptimizerPatch.csproj | 2 +- .../refs/PerformanceOptimizer.dll | Bin 0 -> 92160 bytes Source/1.5/TacticowlPatch/PatchCore.cs | 40 + .../TacticowlPatch/TacticowlPatch.csproj | 2 +- Source/1.5/TacticowlPatch/refs/Tacticowl.dll | Bin 0 -> 83968 bytes Source/IdleMovementAnimPlan.xlsx | Bin 9794 -> 0 bytes 439 files changed, 21558 insertions(+), 101 deletions(-) create mode 100644 Source/1.4/AMRetextureSupport/AMRetextureSupport.csproj rename Source/{ => 1.4}/AMRetextureSupport/ActiveTextureReport.cs (100%) create mode 100644 Source/1.4/AMRetextureSupport/RetextureUtility.cs create mode 100644 Source/1.4/AlienRacesPatch/AlienRacesPatch.csproj create mode 100644 Source/1.4/AlienRacesPatch/PatchCore.cs create mode 100644 Source/1.4/AlienRacesPatch/refs/1.4/AlienRace14.dll create mode 100644 Source/1.4/AnimationMod.sln create mode 100644 Source/1.4/AnimationMod.sln.DotSettings rename Source/{ => 1.4}/CAI5000Patch/AntiRetreatPatch.cs (100%) rename Source/{ => 1.4}/CAI5000Patch/CAI5000AnimationPatch.cs (100%) create mode 100644 Source/1.4/CAI5000Patch/CAI5000Patch.csproj create mode 100644 Source/1.4/CAI5000Patch/CombatAI_14.dll create mode 100644 Source/1.4/CAI5000Patch/FixCustomRenderInAnimator.cs rename Source/{ => 1.4}/CAI5000Patch/PatchCore.cs (100%) rename Source/{ => 1.4}/CAI5000Patch/ThingComp_CombatAI_CompTickRare_Transpiler.cs (100%) rename Source/{ => 1.4}/CAI5000Patch/ThingComp_CombatAI_OnScanFinished_Transpiler.cs (100%) rename Source/{ => 1.4}/CombatExtendedPatch/CombatExtendedOutcomeWorker.cs (100%) create mode 100644 Source/1.4/CombatExtendedPatch/CombatExtendedPatch.csproj create mode 100644 Source/1.4/CombatExtendedPatch/CombatExtended_14.dll rename Source/{ => 1.4}/CombatExtendedPatch/PatchCore.cs (100%) rename Source/{ => 1.4}/CompatibilityReportGenerator/Assembly-CSharp.dll (100%) create mode 100644 Source/1.4/CompatibilityReportGenerator/CompatibilityReportGenerator.csproj create mode 100644 Source/1.4/CompatibilityReportGenerator/Program.cs rename Source/{ => 1.4}/CompatibilityReportGenerator/Properties/Resources.Designer.cs (100%) rename Source/{ => 1.4}/CompatibilityReportGenerator/Properties/Resources.resx (100%) rename Source/{ => 1.4}/CompatibilityReportGenerator/Properties/launchSettings.json (100%) rename Source/{ => 1.4}/CompatibilityReportGenerator/Template.md (100%) rename Source/{ => 1.4}/CompatibilityReportGenerator/UnityEngine.CoreModule.dll (100%) rename Source/{ => 1.4}/CompatibilityReportGenerator/UnityEngine.SharedInternalsModule.dll (100%) rename Source/{ => 1.4}/LightsaberPatch/Extensions.cs (100%) create mode 100644 Source/1.4/LightsaberPatch/LightsaberPatch.csproj rename Source/{ => 1.4}/LightsaberPatch/LightsaberSweepProvider.cs (100%) rename Source/{ => 1.4}/LightsaberPatch/PatchCore.cs (100%) rename Source/{ => 1.4}/LightsaberPatch/SaberRenderer.cs (100%) create mode 100644 Source/1.4/LightsaberPatch/refs/1.4/CompActivatableEffect.dll create mode 100644 Source/1.4/LightsaberPatch/refs/1.4/CompSlotLoadable.dll create mode 100644 Source/1.4/LightsaberPatch/refs/1.4/SWSaber.dll rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Controllers/ModReportingController.cs (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/DAL/ModReportingDAL.cs (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Facade/ModReportingFacade.cs (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/LambdaEntryPoint.cs (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/LocalEntryPoint.cs (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/ModRequestAPI.Backend.csproj (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Properties/launchSettings.json (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Readme.md (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Startup.cs (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/appsettings.Development.json (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/appsettings.json (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/aws-lambda-tools-defaults.json (100%) rename Source/{ => 1.4}/ModRequestAPI.Backend/src/ModRequestAPI.Backend/serverless.template (100%) rename Source/{ => 1.4}/ModRequestAPI.Models/MissingModRequest.cs (100%) create mode 100644 Source/1.4/ModRequestAPI.Models/ModRequestAPI.Models.csproj create mode 100644 Source/1.4/ModRequestAPI/ModRequestAPI.csproj rename Source/{ => 1.4}/ModRequestAPI/ModRequestClient.cs (100%) rename Source/{ => 1.4}/PerformanceOptimizerPatch/PatchCore.cs (100%) rename Source/{ => 1.4}/PerformanceOptimizerPatch/Patch_Optimization_PawnUtility_IsInvisible_DoPatches.cs (100%) rename Source/{ => 1.4}/PerformanceOptimizerPatch/Patch_Optimization_RefreshRate_DrawSettings.cs (100%) create mode 100644 Source/1.4/PerformanceOptimizerPatch/PerformanceOptimizerPatch.csproj rename Source/{PerformanceOptimizerPatch/refs => 1.4/PerformanceOptimizerPatch/refs/1.4}/PerformanceOptimizer.dll (100%) rename Source/{ => 1.4}/TacticowlPatch/PatchCore.cs (100%) rename Source/{TacticowlPatch/refs => 1.4/TacticowlPatch}/Tacticowl.dll (100%) create mode 100644 Source/1.4/TacticowlPatch/TacticowlPatch.csproj create mode 100644 Source/1.4/ThingGenerator/0ColourPicker.dll rename Source/{AnimationMod => 1.4/ThingGenerator}/AMSettings/Presets/Default.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/AMSettings/Presets/NoLassos.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/AMSettings/Presets/VanillaPlus.cs (100%) create mode 100644 Source/1.4/ThingGenerator/AMSettings/Settings.cs create mode 100644 Source/1.4/ThingGenerator/AMSettings/SimpleSettings.cs create mode 100644 Source/1.4/ThingGenerator/AM_DefOf.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/AnimCellData.cs (100%) create mode 100644 Source/1.4/ThingGenerator/AnimDef.cs create mode 100644 Source/1.4/ThingGenerator/AnimRenderer.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/AnimType.cs (100%) create mode 100644 Source/1.4/ThingGenerator/AnimationManager.cs create mode 100644 Source/1.4/ThingGenerator/AnimationMod.csproj rename Source/{AnimationMod => 1.4/ThingGenerator}/AnimationStartParameters.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/AudioCredits.txt (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/AudioUtility.cs (100%) create mode 100644 Source/1.4/ThingGenerator/AutoDuel/AutoFriendlyDuelMapComp.cs create mode 100644 Source/1.4/ThingGenerator/AutoDuel/JoyGiver_FriendlyDuel.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/AutoDuel/JoyGiver_SpectateFriendlyDuel.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Bezier.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Buildings/Building_DuelSpot.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/ColumnWorkers/PawnColumnWorker_Base.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/ColumnWorkers/PawnColumnWorker_Execute.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/ColumnWorkers/PawnColumnWorker_Lasso.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Content.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Controller/ActionController.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Controller/Reports/DuelAttemptReport.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Controller/Reports/ExecutionAttemptReport.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Controller/Reports/GrappleAttemptReport.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Controller/Requests/DuelAttemptRequest.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Controller/Requests/ExecutionAttemptRequest.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Controller/Requests/GrappleAttemptsRequest.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Core.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Data/AnimData.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Data/Model/AnimDataModel.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Data/Model/AnimPartModel.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Data/Model/CurveModel.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Data/Model/EventModel.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Data/Model/SweepPoint.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/AudioEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/CamShakeEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/ClashAudioEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/DamageEffectEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/DuelEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/EventBase.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/EventHelper.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/GoreSplashEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/KillPawnEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/MoteEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/PuntPawnEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/TextMoteEvent.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/AnimEventInput.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/AudioWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/ClashAudioWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/DamageEffectWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/DuelSectionWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/EventWorkerBase.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/GoreSplashWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/KillPawnWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/MoteWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/PuntPawnWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Events/Workers/TextMoteWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/ExecutionOutcome.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Extensions.cs create mode 100644 Source/1.4/ThingGenerator/GameComp.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Grappling/GrabUtility.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Grappling/GrappleFlyer.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Grappling/JobDriver_GrapplePawn.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Grappling/KnockbackFlyer.cs create mode 100644 Source/1.4/ThingGenerator/Heads/HeadInstance.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Health/HediffCompProperties_SingleTendRemove.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Health/HediffComp_SingleTendRemove.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Idle/IdleClassifier.cs create mode 100644 Source/1.4/ThingGenerator/Idle/IdleControllerComp.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Idle/IdleType.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Idle/WeaponCat.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Idle/WeaponSize.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Jobs/IDuelEndNotificationReceiver.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Jobs/JobDriver_ChannelAnimation.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Jobs/JobDriver_DoAnimation.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Jobs/JobDriver_DoFriendlyDuel.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Jobs/JobDriver_GoToAnimationSpot.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Jobs/JobDriver_GoToExecutionSpot.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Jobs/JobDriver_SpectateDuel.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Jobs/ToilUtils.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/MeleeAnimationAdjustmentDef.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Outcome/IOutcomeWorker.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Outcome/OutcomeUtility.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Outcome/PossibleMeleeAttack.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Outcome/VanillaOutcomeWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/PartRenderer.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Patches/PatchMaster.cs create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_Corpse_DrawAt.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Patches/Patch_FloatMenuMakerMap_AddDraftedOrders.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_GlobalTextureAtlasManager_TryGetPawnFrameSet.cs create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_PawnGenerator_GeneratePawn.cs create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_DrawEquipmentAiming.cs create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_DrawInvisibleShadow.cs create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_LayingFacing.cs create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_RenderPawnAt.cs create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_RenderPawnInternal.cs create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_PawnUtility_GetPosture.cs create mode 100644 Source/1.4/ThingGenerator/Patches/Patch_PawnUtility_IsInvisible.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Patches/Patch_Pawn_DrawGUIOverlay.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Patches/Patch_Pawn_DrawTracker_Notify_MeleeAttackOn.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Patches/Patch_VBE_Utils_DrawBG.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Patches/Patch_Verb_MeleeAttack_ApplyMeleeDamageToTarget.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Patches/Patch_Verb_MeleeAttack_TryCastShot.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/PawnData/AutoOption.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/PawnData/PawnMeleeData.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Preview/PreviewRenderer.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Processing/MapPawnProcessor.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Processing/RefTimer.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/PromotionWorkers/MustHaveHeadPromotionWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/RendererWorkers/AnimationRendererWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/RendererWorkers/GilgameshRendererWorker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/AndReq.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/AnyCategory.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/AnySize.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/AnyType.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/False.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/OnlyType.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/OrReq.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/Req.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/ReqInput.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/SpecificWeapon.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Reqs/True.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/SpaceChecker.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Stats/StatWorker_DuelAbility.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Stats/StatWorker_ExecCooldown.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Stats/StatWorker_Lethality.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Sweep/BasicSweepProvider.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Sweep/ISweepProvider.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Sweep/PartWithSweep.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Sweep/SweepMesh.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Tweaks/ColorConverter.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Tweaks/HandsMode.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Tweaks/ItemTweakData.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/Tweaks/MeleeWeaponType.cs (100%) create mode 100644 Source/1.4/ThingGenerator/Tweaks/TweakDataManager.cs create mode 100644 Source/1.4/ThingGenerator/UI/BGRenderer.cs create mode 100644 Source/1.4/ThingGenerator/UI/Dialog_AnimationDebugger.cs create mode 100644 Source/1.4/ThingGenerator/UI/Dialog_TweakEditor.cs rename Source/{AnimationMod => 1.4/ThingGenerator}/UI/DraftedFloatMenuOptionsUI.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/UniqueSkillDef.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/UniqueSkills/ChanneledUniqueSkillInstance.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/UniqueSkills/ExecutionUniqueSkillInstance.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/UniqueSkills/Instances/ExecutionSkills.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/UniqueSkills/Instances/GilgameshSkill.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/UniqueSkills/SkillType.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/UniqueSkills/UniqueSkillInstance.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Video/BundleManager.cs (100%) rename Source/{AnimationMod => 1.4/ThingGenerator}/Video/VideoPlayerUtil.cs (100%) rename Source/{ => 1.5}/AMRetextureSupport/AMRetextureSupport.csproj (100%) create mode 100644 Source/1.5/AMRetextureSupport/ActiveTextureReport.cs rename Source/{ => 1.5}/AMRetextureSupport/RetextureUtility.cs (100%) rename Source/{ => 1.5}/AlienRacesPatch/AlienRacesPatch.csproj (93%) rename Source/{ => 1.5}/AlienRacesPatch/PatchCore.cs (100%) rename Source/{ => 1.5}/AlienRacesPatch/refs/AlienRace.dll (100%) rename Source/{ => 1.5}/AnimationMod.sln (100%) rename Source/{ => 1.5}/AnimationMod.sln.DotSettings (100%) create mode 100644 Source/1.5/AnimationMod/AMSettings/Presets/Default.cs create mode 100644 Source/1.5/AnimationMod/AMSettings/Presets/NoLassos.cs create mode 100644 Source/1.5/AnimationMod/AMSettings/Presets/VanillaPlus.cs rename Source/{ => 1.5}/AnimationMod/AMSettings/Settings.cs (100%) rename Source/{ => 1.5}/AnimationMod/AMSettings/SimpleSettings.cs (100%) rename Source/{ => 1.5}/AnimationMod/AM_DefOf.cs (100%) create mode 100644 Source/1.5/AnimationMod/AnimCellData.cs rename Source/{ => 1.5}/AnimationMod/AnimDef.cs (100%) rename Source/{ => 1.5}/AnimationMod/AnimRenderer.cs (100%) create mode 100644 Source/1.5/AnimationMod/AnimType.cs rename Source/{ => 1.5}/AnimationMod/AnimationManager.cs (100%) rename Source/{ => 1.5}/AnimationMod/AnimationMod.csproj (96%) create mode 100644 Source/1.5/AnimationMod/AnimationStartParameters.cs create mode 100644 Source/1.5/AnimationMod/AudioCredits.txt create mode 100644 Source/1.5/AnimationMod/AudioUtility.cs rename Source/{ => 1.5}/AnimationMod/AutoDuel/AutoFriendlyDuelMapComp.cs (100%) rename Source/{ => 1.5}/AnimationMod/AutoDuel/JoyGiver_FriendlyDuel.cs (100%) create mode 100644 Source/1.5/AnimationMod/AutoDuel/JoyGiver_SpectateFriendlyDuel.cs create mode 100644 Source/1.5/AnimationMod/Bezier.cs create mode 100644 Source/1.5/AnimationMod/Buildings/Building_DuelSpot.cs create mode 100644 Source/1.5/AnimationMod/ColumnWorkers/PawnColumnWorker_Base.cs create mode 100644 Source/1.5/AnimationMod/ColumnWorkers/PawnColumnWorker_Execute.cs create mode 100644 Source/1.5/AnimationMod/ColumnWorkers/PawnColumnWorker_Lasso.cs create mode 100644 Source/1.5/AnimationMod/Content.cs create mode 100644 Source/1.5/AnimationMod/Controller/ActionController.cs create mode 100644 Source/1.5/AnimationMod/Controller/Reports/DuelAttemptReport.cs create mode 100644 Source/1.5/AnimationMod/Controller/Reports/ExecutionAttemptReport.cs create mode 100644 Source/1.5/AnimationMod/Controller/Reports/GrappleAttemptReport.cs create mode 100644 Source/1.5/AnimationMod/Controller/Requests/DuelAttemptRequest.cs create mode 100644 Source/1.5/AnimationMod/Controller/Requests/ExecutionAttemptRequest.cs create mode 100644 Source/1.5/AnimationMod/Controller/Requests/GrappleAttemptsRequest.cs create mode 100644 Source/1.5/AnimationMod/Core.cs rename Source/{ => 1.5}/AnimationMod/Data/AnimData.cs (100%) create mode 100644 Source/1.5/AnimationMod/Data/Model/AnimDataModel.cs create mode 100644 Source/1.5/AnimationMod/Data/Model/AnimPartModel.cs create mode 100644 Source/1.5/AnimationMod/Data/Model/CurveModel.cs create mode 100644 Source/1.5/AnimationMod/Data/Model/EventModel.cs create mode 100644 Source/1.5/AnimationMod/Data/Model/SweepPoint.cs create mode 100644 Source/1.5/AnimationMod/Events/AudioEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/CamShakeEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/ClashAudioEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/DamageEffectEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/DuelEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/EventBase.cs create mode 100644 Source/1.5/AnimationMod/Events/EventHelper.cs create mode 100644 Source/1.5/AnimationMod/Events/GoreSplashEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/KillPawnEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/MoteEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/PuntPawnEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/TextMoteEvent.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/AnimEventInput.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/AudioWorker.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/ClashAudioWorker.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/DamageEffectWorker.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/DuelSectionWorker.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/EventWorkerBase.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/GoreSplashWorker.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/KillPawnWorker.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/MoteWorker.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/PuntPawnWorker.cs create mode 100644 Source/1.5/AnimationMod/Events/Workers/TextMoteWorker.cs create mode 100644 Source/1.5/AnimationMod/ExecutionOutcome.cs rename Source/{ => 1.5}/AnimationMod/Extensions.cs (100%) rename Source/{ => 1.5}/AnimationMod/GameComp.cs (100%) create mode 100644 Source/1.5/AnimationMod/Grappling/GrabUtility.cs rename Source/{ => 1.5}/AnimationMod/Grappling/GrappleFlyer.cs (100%) create mode 100644 Source/1.5/AnimationMod/Grappling/JobDriver_GrapplePawn.cs rename Source/{ => 1.5}/AnimationMod/Grappling/KnockbackFlyer.cs (100%) rename Source/{ => 1.5}/AnimationMod/Heads/HeadInstance.cs (100%) create mode 100644 Source/1.5/AnimationMod/Health/HediffCompProperties_SingleTendRemove.cs create mode 100644 Source/1.5/AnimationMod/Health/HediffComp_SingleTendRemove.cs rename Source/{ => 1.5}/AnimationMod/Idle/IdleClassifier.cs (100%) rename Source/{ => 1.5}/AnimationMod/Idle/IdleControllerComp.cs (100%) create mode 100644 Source/1.5/AnimationMod/Idle/IdleType.cs create mode 100644 Source/1.5/AnimationMod/Idle/WeaponCat.cs create mode 100644 Source/1.5/AnimationMod/Idle/WeaponSize.cs create mode 100644 Source/1.5/AnimationMod/Jobs/IDuelEndNotificationReceiver.cs create mode 100644 Source/1.5/AnimationMod/Jobs/JobDriver_ChannelAnimation.cs create mode 100644 Source/1.5/AnimationMod/Jobs/JobDriver_DoAnimation.cs create mode 100644 Source/1.5/AnimationMod/Jobs/JobDriver_DoFriendlyDuel.cs create mode 100644 Source/1.5/AnimationMod/Jobs/JobDriver_GoToAnimationSpot.cs create mode 100644 Source/1.5/AnimationMod/Jobs/JobDriver_GoToExecutionSpot.cs create mode 100644 Source/1.5/AnimationMod/Jobs/JobDriver_SpectateDuel.cs create mode 100644 Source/1.5/AnimationMod/Jobs/ToilUtils.cs create mode 100644 Source/1.5/AnimationMod/MeleeAnimationAdjustmentDef.cs create mode 100644 Source/1.5/AnimationMod/Outcome/IOutcomeWorker.cs rename Source/{ => 1.5}/AnimationMod/Outcome/OutcomeUtility.cs (100%) create mode 100644 Source/1.5/AnimationMod/Outcome/PossibleMeleeAttack.cs create mode 100644 Source/1.5/AnimationMod/Outcome/VanillaOutcomeWorker.cs create mode 100644 Source/1.5/AnimationMod/PartRenderer.cs rename Source/{ => 1.5}/AnimationMod/Patches/PatchMaster.cs (100%) rename Source/{ => 1.5}/AnimationMod/Patches/Patch_Building_ProximityDetector_RunDetection.cs (100%) rename Source/{ => 1.5}/AnimationMod/Patches/Patch_Corpse_DrawAt.cs (100%) create mode 100644 Source/1.5/AnimationMod/Patches/Patch_FloatMenuMakerMap_AddDraftedOrders.cs rename Source/{ => 1.5}/AnimationMod/Patches/Patch_HediffSet_HasHead.cs (100%) rename Source/{ => 1.5}/AnimationMod/Patches/Patch_InvisibilityUtility_IsPsychologicallyInvisible.cs (100%) rename Source/{ => 1.5}/AnimationMod/Patches/Patch_PawnGenerator_GeneratePawn.cs (100%) rename Source/{ => 1.5}/AnimationMod/Patches/Patch_PawnRenderer_DrawEquipmentAiming.cs (100%) rename Source/{ => 1.5}/AnimationMod/Patches/Patch_PawnRenderer_DrawShadowInternal.cs (100%) rename Source/{ => 1.5}/AnimationMod/Patches/Patch_PawnRenderer_RenderPawnAt.cs (100%) create mode 100644 Source/1.5/AnimationMod/Patches/Patch_Pawn_DrawGUIOverlay.cs create mode 100644 Source/1.5/AnimationMod/Patches/Patch_Pawn_DrawTracker_Notify_MeleeAttackOn.cs create mode 100644 Source/1.5/AnimationMod/Patches/Patch_VBE_Utils_DrawBG.cs create mode 100644 Source/1.5/AnimationMod/Patches/Patch_Verb_MeleeAttack_ApplyMeleeDamageToTarget.cs create mode 100644 Source/1.5/AnimationMod/Patches/Patch_Verb_MeleeAttack_TryCastShot.cs create mode 100644 Source/1.5/AnimationMod/PawnData/AutoOption.cs create mode 100644 Source/1.5/AnimationMod/PawnData/PawnMeleeData.cs create mode 100644 Source/1.5/AnimationMod/Preview/PreviewRenderer.cs rename Source/{ => 1.5}/AnimationMod/Processing/MapPawnProcessor.cs (100%) create mode 100644 Source/1.5/AnimationMod/Processing/RefTimer.cs create mode 100644 Source/1.5/AnimationMod/PromotionWorkers/MustHaveHeadPromotionWorker.cs create mode 100644 Source/1.5/AnimationMod/RendererWorkers/AnimationRendererWorker.cs create mode 100644 Source/1.5/AnimationMod/RendererWorkers/GilgameshRendererWorker.cs create mode 100644 Source/1.5/AnimationMod/Reqs/AndReq.cs create mode 100644 Source/1.5/AnimationMod/Reqs/AnyCategory.cs create mode 100644 Source/1.5/AnimationMod/Reqs/AnySize.cs create mode 100644 Source/1.5/AnimationMod/Reqs/AnyType.cs create mode 100644 Source/1.5/AnimationMod/Reqs/False.cs create mode 100644 Source/1.5/AnimationMod/Reqs/OnlyType.cs create mode 100644 Source/1.5/AnimationMod/Reqs/OrReq.cs create mode 100644 Source/1.5/AnimationMod/Reqs/Req.cs create mode 100644 Source/1.5/AnimationMod/Reqs/ReqInput.cs create mode 100644 Source/1.5/AnimationMod/Reqs/SpecificWeapon.cs create mode 100644 Source/1.5/AnimationMod/Reqs/True.cs create mode 100644 Source/1.5/AnimationMod/SpaceChecker.cs create mode 100644 Source/1.5/AnimationMod/Stats/StatWorker_DuelAbility.cs create mode 100644 Source/1.5/AnimationMod/Stats/StatWorker_ExecCooldown.cs create mode 100644 Source/1.5/AnimationMod/Stats/StatWorker_Lethality.cs create mode 100644 Source/1.5/AnimationMod/Sweep/BasicSweepProvider.cs create mode 100644 Source/1.5/AnimationMod/Sweep/ISweepProvider.cs create mode 100644 Source/1.5/AnimationMod/Sweep/PartWithSweep.cs create mode 100644 Source/1.5/AnimationMod/Sweep/SweepMesh.cs create mode 100644 Source/1.5/AnimationMod/Tweaks/ColorConverter.cs create mode 100644 Source/1.5/AnimationMod/Tweaks/HandsMode.cs rename Source/{ => 1.5}/AnimationMod/Tweaks/ItemTweakData.cs (100%) create mode 100644 Source/1.5/AnimationMod/Tweaks/MeleeWeaponType.cs rename Source/{ => 1.5}/AnimationMod/Tweaks/TweakDataManager.cs (100%) rename Source/{ => 1.5}/AnimationMod/UI/BGRenderer.cs (100%) rename Source/{ => 1.5}/AnimationMod/UI/Dialog_AnimationDebugger.cs (100%) rename Source/{ => 1.5}/AnimationMod/UI/Dialog_TweakEditor.cs (100%) create mode 100644 Source/1.5/AnimationMod/UI/DraftedFloatMenuOptionsUI.cs create mode 100644 Source/1.5/AnimationMod/UniqueSkillDef.cs create mode 100644 Source/1.5/AnimationMod/UniqueSkills/ChanneledUniqueSkillInstance.cs create mode 100644 Source/1.5/AnimationMod/UniqueSkills/ExecutionUniqueSkillInstance.cs create mode 100644 Source/1.5/AnimationMod/UniqueSkills/Instances/ExecutionSkills.cs create mode 100644 Source/1.5/AnimationMod/UniqueSkills/Instances/GilgameshSkill.cs create mode 100644 Source/1.5/AnimationMod/UniqueSkills/SkillType.cs create mode 100644 Source/1.5/AnimationMod/UniqueSkills/UniqueSkillInstance.cs create mode 100644 Source/1.5/AnimationMod/Video/BundleManager.cs create mode 100644 Source/1.5/AnimationMod/Video/VideoPlayerUtil.cs rename Source/{ => 1.5}/AnimationMod/refs/0ColourPicker.dll (100%) create mode 100644 Source/1.5/CAI5000Patch/AntiRetreatPatch.cs create mode 100644 Source/1.5/CAI5000Patch/CAI5000AnimationPatch.cs rename Source/{ => 1.5}/CAI5000Patch/CAI5000Patch.csproj (95%) rename Source/{ => 1.5}/CAI5000Patch/FixCustomRenderInAnimator.cs (100%) create mode 100644 Source/1.5/CAI5000Patch/PatchCore.cs create mode 100644 Source/1.5/CAI5000Patch/ThingComp_CombatAI_CompTickRare_Transpiler.cs create mode 100644 Source/1.5/CAI5000Patch/ThingComp_CombatAI_OnScanFinished_Transpiler.cs rename Source/{ => 1.5}/CAI5000Patch/refs/CombatAI.dll (100%) rename Source/{ => 1.5}/Calc.py (100%) create mode 100644 Source/1.5/CombatExtendedPatch/CombatExtendedOutcomeWorker.cs rename Source/{ => 1.5}/CombatExtendedPatch/CombatExtendedPatch.csproj (95%) create mode 100644 Source/1.5/CombatExtendedPatch/PatchCore.cs rename Source/{ => 1.5}/CombatExtendedPatch/refs/CombatExtended.dll (100%) create mode 100644 Source/1.5/CompatibilityReportGenerator/Assembly-CSharp.dll rename Source/{ => 1.5}/CompatibilityReportGenerator/CompatibilityReportGenerator.csproj (100%) rename Source/{ => 1.5}/CompatibilityReportGenerator/Program.cs (100%) create mode 100644 Source/1.5/CompatibilityReportGenerator/Properties/Resources.Designer.cs create mode 100644 Source/1.5/CompatibilityReportGenerator/Properties/Resources.resx create mode 100644 Source/1.5/CompatibilityReportGenerator/Properties/launchSettings.json create mode 100644 Source/1.5/CompatibilityReportGenerator/Template.md create mode 100644 Source/1.5/CompatibilityReportGenerator/UnityEngine.CoreModule.dll create mode 100644 Source/1.5/CompatibilityReportGenerator/UnityEngine.SharedInternalsModule.dll rename Source/{ => 1.5}/Directory.Build.props (100%) rename Source/{ => 1.5}/FacialAnimationPatch/FacialAnimationPatch - Backup.csproj (100%) rename Source/{ => 1.5}/FacialAnimationPatch/FacialAnimationPatch.csproj (94%) rename Source/{ => 1.5}/FacialAnimationPatch/PatchCore.cs (100%) rename Source/{ => 1.5}/FacialAnimationPatch/Patch_DrawFaceGraphicsComp_CompRenderNodes.cs (100%) rename Source/{ => 1.5}/FacialAnimationPatch/refs/FacialAnimation.dll (100%) create mode 100644 Source/1.5/LightsaberPatch/Extensions.cs rename Source/{ => 1.5}/LightsaberPatch/LightsaberPatch.csproj (95%) create mode 100644 Source/1.5/LightsaberPatch/LightsaberSweepProvider.cs create mode 100644 Source/1.5/LightsaberPatch/PatchCore.cs create mode 100644 Source/1.5/LightsaberPatch/SaberRenderer.cs rename Source/{ => 1.5}/LightsaberPatch/refs/CompActivatableEffect.dll (100%) rename Source/{ => 1.5}/LightsaberPatch/refs/CompSlotLoadable.dll (100%) rename Source/{ => 1.5}/LightsaberPatch/refs/SWSaber.dll (100%) create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Controllers/ModReportingController.cs create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/DAL/ModReportingDAL.cs create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Facade/ModReportingFacade.cs create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/LambdaEntryPoint.cs create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/LocalEntryPoint.cs create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/ModRequestAPI.Backend.csproj create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Properties/launchSettings.json create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Readme.md create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/Startup.cs create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/appsettings.Development.json create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/appsettings.json create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/aws-lambda-tools-defaults.json create mode 100644 Source/1.5/ModRequestAPI.Backend/src/ModRequestAPI.Backend/serverless.template create mode 100644 Source/1.5/ModRequestAPI.Models/MissingModRequest.cs rename Source/{ => 1.5}/ModRequestAPI.Models/ModRequestAPI.Models.csproj (100%) rename Source/{ => 1.5}/ModRequestAPI/ModRequestAPI.csproj (100%) create mode 100644 Source/1.5/ModRequestAPI/ModRequestClient.cs create mode 100644 Source/1.5/PerformanceOptimizerPatch/PatchCore.cs create mode 100644 Source/1.5/PerformanceOptimizerPatch/Patch_Optimization_PawnUtility_IsInvisible_DoPatches.cs create mode 100644 Source/1.5/PerformanceOptimizerPatch/Patch_Optimization_RefreshRate_DrawSettings.cs rename Source/{ => 1.5}/PerformanceOptimizerPatch/PerformanceOptimizerPatch.csproj (94%) create mode 100644 Source/1.5/PerformanceOptimizerPatch/refs/PerformanceOptimizer.dll create mode 100644 Source/1.5/TacticowlPatch/PatchCore.cs rename Source/{ => 1.5}/TacticowlPatch/TacticowlPatch.csproj (93%) create mode 100644 Source/1.5/TacticowlPatch/refs/Tacticowl.dll delete mode 100644 Source/IdleMovementAnimPlan.xlsx diff --git a/.github/workflows/BuildModCheck.yml b/.github/workflows/BuildModCheck.yml index f6cbc86c..6f4eb937 100644 --- a/.github/workflows/BuildModCheck.yml +++ b/.github/workflows/BuildModCheck.yml @@ -1,9 +1,5 @@ name: Check Build Status -env: - # Change this to point to your solution, or the folder in which your solution - # can be found. - SLN_PATH: Source/ on: push: @@ -17,23 +13,30 @@ on: # use a separate workflow for them. - 'v*' + pull_request: + branches: + - master + - develop + jobs: build: - name: Build on ${{ matrix.operating-system }} + name: Build & Test v${{ matrix.rimworld-version }} on ${{ matrix.operating-system }} runs-on: ${{ matrix.operating-system }} strategy: matrix: - # You can configure operating systems to build on here. It shouldn't make a difference - # operating-system: [ubuntu-latest, windows-latest, macOS-latest] operating-system: [ubuntu-latest] + rimworld-version: [1.4, 1.5] steps: - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.4 - name: Setup Dotnet - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4.0.0 with: dotnet-version: 8.0.x - name: Build Mod - run: dotnet build ${{ env.SLN_PATH }} --configuration Release + run: dotnet build Source/${{ matrix.rimworld-version }} --configuration Release + + - name: Test Mod + run: dotnet test Source/${{ matrix.rimworld-version }} --configuration Release diff --git a/.github/workflows/GenerateCompatibilityList.yml b/.github/workflows/GenerateCompatibilityList.yml index cc038711..50314814 100644 --- a/.github/workflows/GenerateCompatibilityList.yml +++ b/.github/workflows/GenerateCompatibilityList.yml @@ -1,13 +1,8 @@ -# This is a basic workflow to help you get started with Actions - name: Generate Compatibility List env: - # Change this to point to your solution, or the folder in which your solution - # can be found. - SLN_PATH: Source/ + LATEST_RW_VERSION: 1.5 -# Controls when the workflow will run on: # Triggers the workflow on push or pull request events but only for the master branch push: @@ -15,40 +10,39 @@ on: paths: - WeaponTweakData/* -# A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: build: if: "!contains(github.event.commits[0].message, '[AUTO CI]')" runs-on: windows-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v4.1.4 - name: Setup Dotnet - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4.0.0 with: - dotnet-version: 6.0.x + dotnet-version: 8.0.x - - name: Build Mod 1.4 - run: dotnet build ${{ env.SLN_PATH }} --configuration v1.4 + - name: Build Mod ${{ env.LATEST_RW_VERSION }} + run: dotnet build Source/${{ env.LATEST_RW_VERSION }} --configuration Release - - name: Run generator. - run: .\Source\CompatibilityReportGenerator\bin\Debug\net472\CompatibilityReportGenerator.exe --directory "./WeaponTweakData" --output "./WeaponTweakData/Compatible Mods.md" + - name: Run generator + run: .\Source\${{ env.LATEST_RW_VERSION }}\CompatibilityReportGenerator\bin\Debug\net472\CompatibilityReportGenerator.exe --directory "./WeaponTweakData" --output "./WeaponTweakData/Compatible Mods.md" - - name: Check for changes. + - name: Check for changes run: git status - - name: Stage changes. + - name: Stage changes run: git add . - - name: Commit changes. + - name: Commit changes run: | git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" git config --local user.name "github-actions[bot]" git commit -m "[AUTO CI] Update compatible mod list." -m "[skip ci]" - name: Push to ${{ github.ref }}. - uses: ad-m/github-push-action@master + uses: ad-m/github-push-action@v0.8.0 with: github_token: ${{ secrets.CI_TOKEN }} branch: ${{ github.ref }} diff --git a/.github/workflows/GenerateReleaseZip.yml b/.github/workflows/GenerateReleaseZip.yml index 39ed7069..19b94e2f 100644 --- a/.github/workflows/GenerateReleaseZip.yml +++ b/.github/workflows/GenerateReleaseZip.yml @@ -1,9 +1,6 @@ name: Generate Github Release Zip env: - # Change this to point to your solution, or the folder in which your solution - # can be found. - SLN_PATH: Source/ # Change this to what you want your folder name to be in people's Mods/ # folder. It should be unique to your mod. MOD_NAME: MeleeAnimation @@ -12,6 +9,23 @@ env: RELEASE_DRAFT: false RELEASE_PRERELEASE: false + MOD_CONTENTS: | + About/ + Animations/ + Bundles/ + WeaponTweakData/ + Defs/ + Patches/ + Languages/ + Patch_AlienRaces/ + Patch_FacialAnimation/ + Patch_Lightsabers/ + Patch_CAI5000/ + Patch_CombatExtended/ + Sounds/ + Textures/ + loadfolders.xml + on: push: tags: @@ -20,6 +34,7 @@ on: - 'v*' jobs: + build: name: Build on ${{ matrix.operating-system }} runs-on: ${{ matrix.operating-system }} @@ -29,58 +44,35 @@ jobs: # cross-platform using mono. I chose Ubuntu because it ran the fastest # for the build steps. operating-system: [ubuntu-latest] + rimworld-version: [1.4, 1.5] # Add Rimworld version here! steps: - name: Checkout Repository - uses: actions/checkout@v3 + uses: actions/checkout@v4.1.4 - name: Setup Dotnet - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4.0.0 with: dotnet-version: 8.0.x - - name: Build Mod - run: dotnet build ${{ env.SLN_PATH }} --configuration Release - - # I don't know how well testing will work without Rimworld actually installed. - # But if you have unit tests configured to work with dotnet, you may be able - # to uncomment this and add a testing step. - # - name: Test Mod - # run: dotnet test ${{ env.SLN_PATH }} --no-restore --verbosity normal - - # There is no `zip` command on windows so you need to use tar. - # - name: Zip-up Mod - # run: tar --exclude="*." -zcvf dist.tar.gz About/ Assemblies/ Defs/ Languages/ Patches/ RimCI/ Sounds/ Textures/ + - name: Build Mod (RW ${{ matrix.rimworld-version }}) + run: dotnet build Source/${{ matrix.rimworld-version }} --configuration Release # To modify this with your own directory structure, just change the paths to # whatever you want. It will not upload any empty directories, those with only # hidden files will also be excluded. - - name: Upload Mod Artifacts - uses: actions/upload-artifact@v3 + - name: Upload Mod Artifacts (RW ${{ matrix.rimworld-version }}) + uses: actions/upload-artifact@v4.3.3 with: - name: build - retention-days: 7 + name: build-${{ matrix.rimworld-version }} + retention-days: 1 path: | - 1.4/ - 1.5/ - About/ - Animations/ - Bundles/ - WeaponTweakData/ - Defs/ - Patches/ - Languages/ - Patch_AlienRaces/ - Patch_FacialAnimation/ - Patch_Lightsabers/ - Patch_CAI5000/ - Patch_CombatExtended/ - Sounds/ - Textures/ - loadfolders.xml + ${{ matrix.rimworld-version }}/ + ${{ env.MOD_CONTENTS }} !**/.* # This final path is to exclude hidden files such as .gitkeep and .DS_STORE. # I would recommend keeping it, but I don't think it will break anything if # you remove or modify it. + package: name: Package needs: build @@ -90,37 +82,16 @@ jobs: # This is a special syntax for GitHub Actions that sets an environment # variable. See: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable run: echo "MOD_PATH=$HOME/$MOD_NAME" >> $GITHUB_ENV - # run: echo "::set-env name=MOD_PATH::$HOME/$MOD_NAME" - name: Create Mod Folder run: mkdir -p ${{ env.MOD_PATH }} - name: Download Mod Artifacts from Build Step - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4.1.7 with: - name: build + # Note that 'name' is not specified, this will cause all artifacts from this run to be downloaded. + merge-multiple: true # Important, this merges the different rimworld version outputs path: ${{ env.MOD_PATH }} - - # If you have any other Rimworld folders that didn't get scooped up in the - # artifacts, add them here. It may be neccessary to change this for v1.1 mods. - - name: Create Mod Folders - run: | - mkdir -p ${{ env.MOD_PATH }}/1.4/ - mkdir -p ${{ env.MOD_PATH }}/1.5/ - mkdir -p ${{ env.MOD_PATH }}/About/ - mkdir -p ${{ env.MOD_PATH }}/Animations/ - mkdir -p ${{ env.MOD_PATH }}/Bundles/ - mkdir -p ${{ env.MOD_PATH }}/WeaponTweakData/ - mkdir -p ${{ env.MOD_PATH }}/Defs/ - mkdir -p ${{ env.MOD_PATH }}/Patches/ - mkdir -p ${{ env.MOD_PATH }}/Languages/ - mkdir -p ${{ env.MOD_PATH }}/Patch_AlienRaces/ - mkdir -p ${{ env.MOD_PATH }}/Patch_FacialAnimation/ - mkdir -p ${{ env.MOD_PATH }}/Patch_Lightsabers/ - mkdir -p ${{ env.MOD_PATH }}/Patch_CAI5000/ - mkdir -p ${{ env.MOD_PATH }}/Patch_CombatExtended/ - mkdir -p ${{ env.MOD_PATH }}/Sounds/ - mkdir -p ${{ env.MOD_PATH }}/Textures/ - name: Zip Mod run: | @@ -143,13 +114,11 @@ jobs: id: get_version # This is a special syntax for GitHub Actions that sets an output # variable. See: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable - # run: echo ::set-output name=VERSION::$(echo ${{ github.ref }} | cut -d / -f 3) run: echo "VERSION=$(echo ${{ github.ref }} | cut -d / -f 3)" >> $GITHUB_OUTPUT - name: Set Environment Variables # This is a special syntax for GitHub Actions that sets an environment # variable. See: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable - # run: echo "::set-env name=MOD_RELEASE::$MOD_NAME-${{ steps.get_version.outputs.VERSION }}" run: echo "MOD_RELEASE=$MOD_NAME-${{ steps.get_version.outputs.VERSION }}" >> $GITHUB_ENV - name: Download Mod Artifacts from Build Step @@ -160,7 +129,7 @@ jobs: - name: Create Release id: create_release - uses: actions/create-release@v1 + uses: actions/create-release@v1.1.4 env: GITHUB_TOKEN: ${{ secrets.CI_TOKEN }} with: diff --git a/Source/1.4/AMRetextureSupport/AMRetextureSupport.csproj b/Source/1.4/AMRetextureSupport/AMRetextureSupport.csproj new file mode 100644 index 00000000..6ff72ee5 --- /dev/null +++ b/Source/1.4/AMRetextureSupport/AMRetextureSupport.csproj @@ -0,0 +1,35 @@ + + + + net472 + Library + false + false + 11 + false + false + AM.Retexture + Release + disable + true + none + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + diff --git a/Source/AMRetextureSupport/ActiveTextureReport.cs b/Source/1.4/AMRetextureSupport/ActiveTextureReport.cs similarity index 100% rename from Source/AMRetextureSupport/ActiveTextureReport.cs rename to Source/1.4/AMRetextureSupport/ActiveTextureReport.cs diff --git a/Source/1.4/AMRetextureSupport/RetextureUtility.cs b/Source/1.4/AMRetextureSupport/RetextureUtility.cs new file mode 100644 index 00000000..e4ce3953 --- /dev/null +++ b/Source/1.4/AMRetextureSupport/RetextureUtility.cs @@ -0,0 +1,315 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using UnityEngine; +using Verse; + +namespace AM.Retexture; + +[HotSwapAll] +public static class RetextureUtility +{ + public static Predicate IsMeleeWeapon; + public static int CachedReportCount => reportCache.Count; + public static IEnumerable AllCachedReports => reportCache.Values; + + private static readonly Dictionary reportCache = new Dictionary(128); + private static readonly Dictionary reportCacheIsFull = new Dictionary(128); + private static readonly Dictionary> graphicClassCustomHandlers = new Dictionary>() + { + // AdvancedGraphics Single Randomized, is a collection despite being marked as Graphic_Single. + {"AdvancedGraphics.Graphic_SingleRandomized", (path, pass) => pass switch + { + 0 => (true, path), + _ => (false, null) + } + }, + + // AdvancedGraphics SingleQuality. The tex name has a _Quality suffix. + // If the _Normal graphic cannot be found, the fallback is the raw xml path. + {"AdvancedGraphics.Graphic_SingleQuality", (path, pass) => pass switch + { + 0 => (false, path + "_Normal"), + 1 => (false, path), + _ => (false, null) + } + }, + + }; + private static HashSet OfficialMods; + private static ModContentPack CoreMCP; + + /// + /// Gets the mod that is providing the active texture for this weapon def. + /// + public static ModContentPack GetTextureSupplier(ThingDef weapon) + => weapon == null ? null : GetTextureReport(weapon).ActiveRetextureMod; + + public static TimeSpan PreCacheAllTextureReports(Action onReport, bool full) + { + var sw = Stopwatch.StartNew(); + foreach (var weapon in DefDatabase.AllDefsListForReading.Where(d => IsMeleeWeapon(d))) + { + onReport(GetTextureReport(weapon, 0, full)); + } + sw.Stop(); + return sw.Elapsed; + } + + /// + /// Generates information about a weapon's textures, such as what mod(s) are supplying textures. + /// + public static ActiveTextureReport GetTextureReport(ThingDef weapon, int pass = 0, bool full = true, bool loadFromCache = true, bool saveToCache = true) + { + if (weapon == null) + return default; + + if (loadFromCache && reportCache.TryGetValue(weapon, out var found) && reportCacheIsFull[weapon] == full) + return found; + + // 0. Get active texture. + string texPath = ResolveTexturePath(weapon, pass, out bool canDoAnotherPass); + if (string.IsNullOrWhiteSpace(texPath)) + return new ActiveTextureReport($"Failed to find texture path i.e. graphicData.texPath '{weapon.graphicData.texPath}' ({weapon.graphicData.graphicClass.FullName}) pass {pass}"); + + // Make basic report. Data still missing. + var report = new ActiveTextureReport + { + Weapon = weapon, + AllRetextures = new List<(ModContentPack, Texture2D)>(), + TexturePath = texPath, + }; + + // 1. Find all texture paths. + bool hasFirst = false; + foreach ((ModContentPack mod, Texture2D texture, string path) in GetAllModTextures()) + { + // If the texture path does not match, ignore it... + if (path != texPath) + continue; + + if (!hasFirst) + { + hasFirst = true; + report.ActiveTexture = texture; + report.ActiveRetextureMod = mod; + } + + report.AllRetextures.Add((mod, texture)); + + if (full) + continue; + if (saveToCache) + { + reportCache[weapon] = report; + reportCacheIsFull[weapon] = false; + } + return report; + } + + // 2. Check base game resources + // Resources load, which is how base game and dlc load content... + var resource = Resources.Load($"Textures/{texPath}"); + if (resource != null) + { + OfficialMods ??= LoadedModManager.RunningModsListForReading.Where(m => m.IsOfficialMod).ToHashSet(); + CoreMCP ??= OfficialMods.First(m => m.PackageId == ModContentPack.CoreModPackageId); + + // If the weapon comes from a dlc, then that dlc is the texture provider. + // Otherwise, just set the provider as one of the official mods (core or dlc). + ModContentPack mod = weapon.modContentPack; + if (!OfficialMods.Contains(mod)) + mod = CoreMCP; + + if (!hasFirst) + { + hasFirst = true; + report.ActiveTexture = resource; + report.ActiveRetextureMod = mod; + } + report.AllRetextures.Add((mod, resource)); + if (!full) + { + if (!saveToCache) + return report; + reportCache[weapon] = report; + reportCacheIsFull[weapon] = false; + return report; + } + } + + // 3. Asset bundles scan. + // Used by DLC as well as some weird mods. + foreach (var pair in ScanAssetBundles(texPath)) + { + if (!hasFirst) + { + hasFirst = true; + report.ActiveTexture = pair.texture; + report.ActiveRetextureMod = pair.mod; + } + report.AllRetextures.Add((pair.mod, pair.texture)); + + if (full) + continue; + if (saveToCache) + { + reportCache[weapon] = report; + reportCacheIsFull[weapon] = false; + } + return report; + } + + if (report.AllRetextures.Count == 0) + { + report.ErrorMessage = $"No textures found for path '{report.TexturePath}' ({weapon.graphicData.graphicClass.FullName})"; + if (canDoAnotherPass) + { + return GetTextureReport(weapon, pass + 1, full, loadFromCache, saveToCache); + } + } + + if (!saveToCache) + return report; + + reportCache[weapon] = report; + reportCacheIsFull[weapon] = full; + return report; + } + + public static IEnumerable GetModWeaponReports(ModContentPack mod) + { + if (mod == null) + yield break; + + foreach (var pair in reportCache) + { + if (pair.Value.AllRetextures.Any(p => p.mod == mod)) + yield return pair.Value; + } + } + + private static IEnumerable<(ModContentPack mod, Texture2D texture)> ScanAssetBundles(string texPath) + { + var mods = LoadedModManager.RunningModsListForReading; + string path = Path.Combine("Assets", "Data"); + + for (int i = mods.Count - 1; i >= 0; i--) + { + string path2 = Path.Combine(path, mods[i].FolderName); + foreach (AssetBundle assetBundle in mods[i].assetBundles.loadedAssetBundles) + { + string str = Path.Combine(Path.Combine(path2, GenFilePaths.ContentPath()), texPath); + + foreach (string ext in ModAssetBundlesHandler.TextureExtensions) + { + var loaded = assetBundle.LoadAsset(str + ext); + if (loaded != null) + yield return (mods[i], loaded); + } + } + } + } + + private static IEnumerable<(ModContentPack mod, Texture2D texture, string path)> GetAllModTextures() + { + var mods = LoadedModManager.RunningModsListForReading; + for (int i = mods.Count - 1; i >= 0; i--) + { + var mod = mods[i]; + + var textures = mod.textures?.contentList; + if (textures == null) + continue; + + foreach (var pair in textures) + { + yield return (mod, pair.Value, pair.Key); + } + } + + } + + [DebugOutput("Melee Animation")] + private static void LogAllTextureReports() + { + var meleeWeapons = DefDatabase.AllDefsListForReading.Where(d => IsMeleeWeapon(d)); + + TableDataGetter[] table = new TableDataGetter[6]; + table[0] = new TableDataGetter("Def Name", d => d.defName); + table[1] = new TableDataGetter("Name", d => d.LabelCap); + table[2] = new TableDataGetter("Source", def => $"{GetTextureReport(def).SourceMod?.Name ?? "?"} ({GetTextureReport(def).SourceMod?.PackageId ?? "?"})"); + table[3] = new TableDataGetter("Texture Path", def => $"{GetTextureReport(def).TexturePath ?? "?"}"); + table[4] = new TableDataGetter("Texture Source", def => $"{GetTextureReport(def).ActiveRetextureMod?.Name ?? "?"} ({GetTextureReport(def).ActiveRetextureMod?.PackageId ?? "?"})"); + table[5] = new TableDataGetter("Retextures", def => + { + var report = GetTextureReport(def); + if (report.HasError) + return report.ErrorMessage ?? "Error: ?"; + + if (report.AllRetextures.Count <= 1) + return "---"; + + return string.Join(",\n", report.AllRetextures.Select(p => p.mod.Name)); + }); + + DebugTables.MakeTablesDialog(meleeWeapons, table); + } + + private static string ResolveTexturePath(ThingDef weapon, int pass, out bool canDoAnotherPass) + { + canDoAnotherPass = false; + string xmlPath = weapon.graphicData?.texPath.Replace('\\', '/'); + if (string.IsNullOrWhiteSpace(xmlPath)) + return null; + + var gc = weapon.graphicData.graphicClass; + bool isCollection = gc.IsSubclassOf(typeof(Graphic_Collection)); + + // Attempt to get custom handler for this graphic class (required for some modded classes) + // and override the xmlpath and/or collection status. + if (graphicClassCustomHandlers.TryGetValue(gc.FullName, out var func)) + { + (isCollection, xmlPath) = func(xmlPath, pass); + canDoAnotherPass = xmlPath != null; + } + + // Collections load from sub-folders, normal graphic types don't: + if (!isCollection) + return xmlPath; + + // Other graphic classes will pull images from a sub-folder. + // Scan mod in reverse load order and attempt to find a subfolder with the correct path. + var mods = LoadedModManager.RunningModsListForReading; + for (int i = mods.Count - 1; i >= 0; i--) + { + var mod = mods[i]; + + var textures = mod.textures?.contentListTrie; + if (textures == null) + continue; + + string prefix = (xmlPath[xmlPath.Length - 1] == '/') ? xmlPath : xmlPath + "/"; + foreach (string path in textures.GetByPrefix(prefix).OrderBy(s => s)) + { + return path; + } + } + + // If no mods have it, check vanilla resources. + var inFolder = Resources.LoadAll($"Textures/{xmlPath}"); + if (inFolder is { Length: > 0 }) + { + string name = inFolder.OrderBy(t => t.name).FirstOrDefault().name; + Resources.UnloadUnusedAssets(); + return $"{xmlPath}/{name}"; + } + + // Nothing was found. + return null; + } +} + +public class HotSwapAllAttribute : Attribute { } diff --git a/Source/1.4/AlienRacesPatch/AlienRacesPatch.csproj b/Source/1.4/AlienRacesPatch/AlienRacesPatch.csproj new file mode 100644 index 00000000..89950518 --- /dev/null +++ b/Source/1.4/AlienRacesPatch/AlienRacesPatch.csproj @@ -0,0 +1,43 @@ + + + + net48 + Library + false + false + preview + false + false + Release + AM.AlienRacesPatch + AM.AlienRacesPatch + + + + + False + False + all + + + + + + + refs/1.4/AlienRace14.dll + False + False + + + 1.4.3901 + + + + + none + ..\..\..\Patch_AlienRaces\1.4\Assemblies\ + true + TRACE;V14 + + + diff --git a/Source/1.4/AlienRacesPatch/PatchCore.cs b/Source/1.4/AlienRacesPatch/PatchCore.cs new file mode 100644 index 00000000..8c537d25 --- /dev/null +++ b/Source/1.4/AlienRacesPatch/PatchCore.cs @@ -0,0 +1,40 @@ +using System; +using AlienRace; +using AM; +using JetBrains.Annotations; +using Verse; + +namespace AM.AlienRacesPatch; + +[HotSwapAll] +[UsedImplicitly] +public class PatchCore : Mod +{ + public static void Log(string msg) + { + Core.Log($"[Alien Races Patch] {msg}"); + } + + public PatchCore(ModContentPack content) : base(content) + { + Log("Loaded alien races patch!"); + + Core.GetBodyDrawSizeFactor = GetBodySizeFactor; + } + + public static float GetBodySizeFactor(Pawn pawn) + { + try + { + if (pawn?.def is not ThingDef_AlienRace race) + return 1f; + + return race.alienRace.generalSettings.alienPartGenerator.customDrawSize.x; + } + catch (Exception e) + { + Log($"Error getting body size factor:\n{e}"); + return 1f; + } + } +} diff --git a/Source/1.4/AlienRacesPatch/refs/1.4/AlienRace14.dll b/Source/1.4/AlienRacesPatch/refs/1.4/AlienRace14.dll new file mode 100644 index 0000000000000000000000000000000000000000..7353940eb38c7b6dc466b152051b394f82c20dae GIT binary patch literal 227328 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 + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True \ No newline at end of file diff --git a/Source/CAI5000Patch/AntiRetreatPatch.cs b/Source/1.4/CAI5000Patch/AntiRetreatPatch.cs similarity index 100% rename from Source/CAI5000Patch/AntiRetreatPatch.cs rename to Source/1.4/CAI5000Patch/AntiRetreatPatch.cs diff --git a/Source/CAI5000Patch/CAI5000AnimationPatch.cs b/Source/1.4/CAI5000Patch/CAI5000AnimationPatch.cs similarity index 100% rename from Source/CAI5000Patch/CAI5000AnimationPatch.cs rename to Source/1.4/CAI5000Patch/CAI5000AnimationPatch.cs diff --git a/Source/1.4/CAI5000Patch/CAI5000Patch.csproj b/Source/1.4/CAI5000Patch/CAI5000Patch.csproj new file mode 100644 index 00000000..c3b8b6f8 --- /dev/null +++ b/Source/1.4/CAI5000Patch/CAI5000Patch.csproj @@ -0,0 +1,59 @@ + + + + net472 + Library + preview + false + true + false + false + Release + AM.CAI5000Patch + AM.CAI5000Patch + disable + true + none + + + + + False + False + all + + + runtime + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + 1.4.3901 + + + CombatAI_14.dll + False + False + runtime + + + + + + + + + + none + ..\..\..\Patch_CAI5000\1.4\Assemblies\ + true + TRACE;V14 + + + diff --git a/Source/1.4/CAI5000Patch/CombatAI_14.dll b/Source/1.4/CAI5000Patch/CombatAI_14.dll new file mode 100644 index 0000000000000000000000000000000000000000..890f7aca888d7f526d743154c727e2fb1c398e7a GIT binary patch literal 384000 zcmeFacVHaF6+gb(z1zFnlVqPH-??GQ#xlzl7a5FYj3t}iYm6*oFufR9b4Oq8A!-8H z^pL~>Vz40uNJ2;>At96$k^nL31qf-RlS&Fn#P{=gvwOE!WSsK*{l0(v&eqP%n>X*h zdGn^v&K^2^lV)g|7Qx?}Z))13aQPdQ=k_0?h;Hxxbi4Mk#B(zrZ8_w*na7-QW~pa= z(K)?%;yFDhpLp)M&iOqjo!V2p;M|@w&+Xag@S}UqaZWjPZd;o*+b4a*zM6K*HM;h~ zJ|Db2;P!iMR!>r&uW8?oD#3z?9`TH}(4k+iMw^83*8?Bm{2AKXt1CGf6c8R0m8T~N zS0Gh@_)P77pH5wb1V{fA)sATvv7@jaO*4;NGD*yTi$M+Kb?r zBI>H1p6QylU`hy0H|%x@*K0X@5G|`|)RhI|I_P(3ig<^nd#K|PxXxnWd2tme_ao4A z6{0fsAjo)BI*`gs>fp>BKe8jLxIx&7y-$AMjvSfUgyNr z#3Kq;YGTTAAWH7Yco^CFB{JUGmWrj?hB{*@OWDr`D=6j8_9n0iDKj-;w@7M2ram1cQ!+6O}FKajVCstL?ZTDr0R^OqFwfh@Z~#;4Hk0Uv2X!NG9s*KWYrGBu^f5LWW~m5x3EH>3$pC}7%f#7P zNGP5@-DQM>k%Wkb3WdgR+I;lwkPMcY($n@70CktrS?Q$N(PCc!Y~7_`&V}&4Y{l}X zXHtngr{!b1hfL-&hY z@WxvF+%@C7?-2oCT|?*20LqEl$WM~)R(ENk7Bp zcx)-4S5Oellcw#W#ph}5$_84b97sDiN4L9c33SyEFf;Zjb6~^Z%)-}$a@Dj}E#9T* zaSZeUvcOL-T@Gw-8idnJSI|41UcQzVxm2ep}FMMGQJ zqG?I$+`gt7i`<|F?*hbpOICN8Bj@cBO<|mOz>8Y6_*2Ng8FQ{huvL${*BWTf`v5AW zRT>3yu0#A{AZdR1dV~ujQn(7@ZUCgW&^o8X7@IUt)21bIGu(|0Fw4CGu+oiqw4t@Q z3GS-y8GU^|>+;P2*hp^rRBu6;rNy;}ua7k?kY4kMP1+xGyJ2q%0DQMyahOE_^@r0&9ge7`*+ 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 E1tz4}qW}N^ literal 0 HcmV?d00001 diff --git a/Source/1.4/CAI5000Patch/FixCustomRenderInAnimator.cs b/Source/1.4/CAI5000Patch/FixCustomRenderInAnimator.cs new file mode 100644 index 00000000..3faeb147 --- /dev/null +++ b/Source/1.4/CAI5000Patch/FixCustomRenderInAnimator.cs @@ -0,0 +1,38 @@ +using CombatAI; +using CombatAI.Patches; +using Verse; + +namespace AM.CAI5000Patch; + +/* + * In certain specific animations, the pawn may be rendered using + * the regular Pawn.DrawAt method. + * In CombatAI, when this method is called a prefix is run that expects + * a static property called fogThings to be populated. + * fogThings is assigned during a call to DrawDynamicThings which in turn is called + * when a map is rendered. However, because the animators are rendered + * during a map component update, DrawDynamicThings has not yet been invoked + * and so the property is null. + * This patch fixes that my ensuring that the property is set even during custom render calls. + */ +public static class FixCustomRenderInAnimator +{ + public static void PreCustomPawnRender(Pawn pawn, AnimRenderer anim) + { + var map = anim.Map; + + // This is CAI code: + if (Pawn_Patch.fogThings == null || Pawn_Patch.fogThings.map != map) + { + Pawn_Patch.fogThings = map.GetComp_Fast(); + } + } + + public static void PostCustomPawnRender(Pawn pawn, AnimRenderer anim) + { + // CAI always sets fogThings to null after the map has rendered each frame. + // I do not know why, probably to make sure it can be GC'd once the player exits to the main menu. + // In any case, I will do the same even if it means having to call GetComp_Fast multiple times per frame above. + Pawn_Patch.fogThings = null; + } +} diff --git a/Source/CAI5000Patch/PatchCore.cs b/Source/1.4/CAI5000Patch/PatchCore.cs similarity index 100% rename from Source/CAI5000Patch/PatchCore.cs rename to Source/1.4/CAI5000Patch/PatchCore.cs diff --git a/Source/CAI5000Patch/ThingComp_CombatAI_CompTickRare_Transpiler.cs b/Source/1.4/CAI5000Patch/ThingComp_CombatAI_CompTickRare_Transpiler.cs similarity index 100% rename from Source/CAI5000Patch/ThingComp_CombatAI_CompTickRare_Transpiler.cs rename to Source/1.4/CAI5000Patch/ThingComp_CombatAI_CompTickRare_Transpiler.cs diff --git a/Source/CAI5000Patch/ThingComp_CombatAI_OnScanFinished_Transpiler.cs b/Source/1.4/CAI5000Patch/ThingComp_CombatAI_OnScanFinished_Transpiler.cs similarity index 100% rename from Source/CAI5000Patch/ThingComp_CombatAI_OnScanFinished_Transpiler.cs rename to Source/1.4/CAI5000Patch/ThingComp_CombatAI_OnScanFinished_Transpiler.cs diff --git a/Source/CombatExtendedPatch/CombatExtendedOutcomeWorker.cs b/Source/1.4/CombatExtendedPatch/CombatExtendedOutcomeWorker.cs similarity index 100% rename from Source/CombatExtendedPatch/CombatExtendedOutcomeWorker.cs rename to Source/1.4/CombatExtendedPatch/CombatExtendedOutcomeWorker.cs diff --git a/Source/1.4/CombatExtendedPatch/CombatExtendedPatch.csproj b/Source/1.4/CombatExtendedPatch/CombatExtendedPatch.csproj new file mode 100644 index 00000000..2153b8dc --- /dev/null +++ b/Source/1.4/CombatExtendedPatch/CombatExtendedPatch.csproj @@ -0,0 +1,56 @@ + + + + net472 + Library + preview + false + true + false + false + Release + AM.CombatExtendedPatch + zz.AM.CombatExtendedPatch + disable + true + none + + + + + runtime + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + False + False + all + + + + + + + 1.4.3901 + + + CombatExtended_14.dll + False + False + runtime + + + + + + + none + ..\..\..\Patch_CombatExtended\1.4\Assemblies\ + true + TRACE;V14 + + + diff --git a/Source/1.4/CombatExtendedPatch/CombatExtended_14.dll b/Source/1.4/CombatExtendedPatch/CombatExtended_14.dll new file mode 100644 index 0000000000000000000000000000000000000000..6cd91e20ae1325d8e8de1d5adc1dcba4c3108261 GIT binary patch literal 929280 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�B=B$#Poj&;8utk_O~kS^wm(UQn%~Ev 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±9QOTXGmUFq^kqmV%`1oi_|;kvc|h}#{ctC;9}}`W4Ozv6M}TZ} zCEq>OgLBcdc)?;JtTB%1uB&)u?lyA>SFFP-LUGSwtnSz)?&msP;(A^COM;_6-}Z?c zF^Dp9`ohN|k8A)e<&nF$N4#agN<>=*HnX^^ zQMiF4Yg?(kcrdZGiQjur4|1|_KEQY-UWaJCGdve zI=Gd*>)jZXZcBSzrT~)~8Bb|PYB}wAN*rb5anNfEI-~5G$LK0XP=Frc435V*J%aJ1 zIRA)=r7n7Ufq0Adh7BSb_gr`6k5`aco1*g3)hcc*)slOLheF#f{9c+Hl1tED@507 zHXGH&W?FU!ZY_DFy->UnceUE8iEYI~7c z^)scg6LHl&l=nR9a1=Pq{EX^pEqFKeW2^octUDpfmci4(5fq38Q*q`OM$1%#gPtuS zawHWZ+V5QU{&_@Hu#xHL)Y66;ITb#Q0uW+#PT)}Bj;npe-!|}b^CtIp;f15Oq_&06 zrMA=Cw(8y?zwza)nqNk|7U6^di z6s-9Z8qj1TyelFb{YLG}X+&fr#e_#o+<1{Hke$3Wg{8;?BoG-}95!)_> z(o&VaG-_3ksxRpbu?i2g!hAIcTGbqI)l9(fmD8a~Y~_l8e>W>7%Ixtmx&<3&IDNvR z4=mPSD%E!%mw@L9=_Mri9vRK8TWP4ebYLh%PAQazh3s(T2t**vvM_NUn$n@U^7^Dw zR|UyK&-m5&e{o%-*uyYmlQ_JRVTKJ}`hwwC5ghpP2c+pMeGAspDCZdvM< zjq66oUWqby905q2IUEl$7u z!2V#Cu+8GH57G%_Pxe#VpDF8SJc6$B=^ESp*wbWDO8i#+M5@dNo=0K4N@LcQRFA1< z8BP86tQ}0xBC8FvdVAw`4frM1)5315jc@H!ST##qKQ_l>qi$z)sxEsL9WjDZI56;>jc1xDB$aatq8^ILyTI%nsj(Z=`*9 z$dg>KVGc7}J3XmcCKq%KogP%Xg02b%bb-J7m$6FFx)#$TErd&1 zcMUfJ{!NsFU8D4C&c>%Zcny6Ui-qFMpQxw$@&i;6it6E~C(Y36PcqHun!JzVN@#X<22P6uj_Dg5TVcgO-K?fWFw&{}8B0C}vYkuO#)Dr(XtJ0@iMFdgfPzP$ zt&f(Yd*FR$bFl@MCeRpGaPN~#Q!IurqZ5Gp+bJx*{>R1XLitZ4$8vu|F|VuRf2_;6M@dpUuH0rs#4*cd%C z+{gg6?rxT{cwl4E%8nfF4b%lS)jWmGIhz!QgXVP*ma55~)7=o-HTgyA(7b+rIMWTL z<1AweobYYkmRZD9*V^snq#rFVr+bJ5L97hJCEP@%-8-9IhS0CYl44s;*$Ny6S{x0L%#4w7 zwvZ5xv*U|RA!9=EbY&Vf#VUA}+n05h!1+bH1nRNlog&?~((3ew%-H5s+FQJrL(Flr zZf%|kUP772tIXPDBe*P`>ALoA`2uBIzfi7SNs!x#%9viikhSeLRigq14*`dEM6h+L zkPW@n4O!a@Qwph4PDFvl>}SzSHuY9lXG3HtTMIZ&1M|CiW3L?@nk9SS?SeDGTDmf3 zwVdUEwXrXC1E`d1ceM~I_e^qR3r&ku)pQ#)S!{;=Ty=;-C{ue#NwGVj8XdX5MTOJR zFu82U!|dfdbB;9^&WViY%d3AuLZfOh+EM20LOJ2V7cP%)lM#aOB8Q_clld`O81xP! zTR*>PWLd57Y;mWL&coiLtxc`9i~WZz&)S^c*_?a@L{Ctg#;pdMpq;ECFa(>_{uoyG zUDgqLYO5(MckR#QNcLA&;?oFl&F)&Ww>C>iexi4v%Uk?+ReSQG4$qij|FxJFE?*!o zYZLVk)7oh>KU1Bmy;G3v9Fg6ymXA&XioJ$6&nrBg?J9>XGB932zO%g(caJQ+Dp@ym zz-2-0VIXsqKu{{R_svoT+y9huYaAfHbH#S7&fe8+0Jp7NMZa9~&O7OVlRB1#lr`j0 zM-2k1qWSoF42$rCnv`Rm*q>p2=)`^lPZ&F$6fYo!OBX$etQ_xGNxxHuj|ZvdC()CI zH^M$9R-~+pj}N$~)3dw^wgk(Gb?)R7|9CzF;$*|YnIrrQsTe&YY$oUy<=W>VO4{+D zuILxg$t;PYSCdT3(3iA^bLex_1%Z)OiXr?A2tNHJLkQC|+bL>jJh=CC^snThtKk3u zTVXP86`y*I%1GIUW&MlNA4dPCkhE2&c?0iW_*mVMDxG$F8~;m|=nj4aP<1iPO!{o$ zcEod9xcM{bOH$& zc*zQrgtaybqz6bZkOnD)l6C`0NCO8_NP&=c6G$MW-GuadlbhVD{660^^KOx4NbbG= z`#gU=_P*~s<;(imb++KI7!|lr^OoAJ7xuV7NK3ib!+cxZAmqb2}GY z%{11^X3Qa9F716(dTH!kj9Id>(D*HarnMTkc6%)CG073`dA#_a@RE?|5GNiBmdC zv#%7WJVu-wlnUi*T96IjC%|+NIdYst|Ha%0P`w%KiCe}L}O zHKC7V9S&%_X%8Gbcnd?{LH|!RUr~=`9ht=@4CiZhN-+3>nt%V>eKo14v&ljn`n=g> zQ!FK*Y9`-Sf={dI5U43Nqj)BcV zPplhBFLFK;+433msZ_+mYj&u;d?6pU7m1UOu20_Wq@!kMiPw-keij`m33h%FuT`+T zgne*QFDE;l+>0#Hi;#Os8;eHRB7+lDZ>}?L1ql0*xjm01#jLG&(!~*kZMmTzyKiGB z8R2s<8)ElwaN=Bc`YSkwUDQtXPKl7I#Z#hB%@Qg;Yze+a*(Vy!4L2NqRK3bOXv4S& z9?={5)Txsr?8E?FGJQAvU5H0jg*a> zr&jyU;<3$s$gvH{iC1!(WFEf;;bpNZUT`lZ?L6fi{64&7CDR{u?Xc`}QwpMfdN_8WO)`NTk{rKmKbDyCS7AmLC{Uj{qjLLk3i@tS(D4fT zX;aW91^vMV*~&(0`w0sAucjc}#xmvHRrU3c)OO)g4hiyiCT~Qq_bASVyw0~^dV^f! z-sbP$|kG_SCKy-;~4Q8fiklV!Jpr+q0kxrY4Fh|h+Jbo3rT*lZ;o-OOvL zF`eyQV3}hNi8KxqDGX+{5~`Myy=H*YE0= zy~uM5<(O-!wgG2`nW+#cJf!34)Th>9G2wUyDq=TUqdhm6&)J9}*f@lav?;Q)eO2HV z7J~KBNvH>DM}tSaknSq2sis@Kfjh;^Og7ZG@h)i8KdqRElO;=+UqgQ@cKFQiR-~VH z97e3!>krRW=0gOtzStPhn0O|qL16ORNE_W^&yj#wYl^s|GB#$SpDXx102S)m<`IE+ z*s)!a6|Q_LOzEc{bfSXvL$d9P>fe+zJ$LKGWb@{swAIJhq_@^^{934>4|QJcy5T5je>3YNxmfll_{~jqd9@8_Q}4%)Y0eG zZCrSG1gENxR55X7VhoH~ZDsy5{bgu@3uAkO*bjh-D+4CnVXDqdP3%vXG-+i{1B&_? zL}x$NJE=e+tF<8SgP0OFYvc}Argpi+)Rs#Ym|Pd~ISzGe{e!FAYUR)p_dUx(uJb(77e( z#f0oqeDzMjg8mHXIJw;Pz4X)qx{xQT2sr48DFSzOg$Mc;JGtj*uiU%WbFTulOj=g?Tlmm9#)W+` zk1M2dD;sAxANCi1j zido7^)o3udsNus@UMJqCIL1etp!Cq-uv0P{8KxF0l}m(S%Zf;blcY!+Q|8XzVTNBV z3jVoG%x(bcV+{=CV4pR(YBrY63jTKl1tXGiTDQdX$j!jF$$MrLh+>8^p%rX^z{3DsiKdu#o9Xl1q{jvMR^J9_pl zx@L&q51o5_3w4_f8%2tpr`AYVi&rElxWX|Kt8i??BeFZNLa~%{PjN~r#jMboz~$nO z!3r}eA3WEfy1XPNQ?VjjmH&phmHrC!Y;h%w*~Q&1Z1g?HQ~lEiNwAlFxEC zuHMDCy1Z#z4Z@|uklQa2wduMA2do|6LE@b!ZoULf7m~wBaiEix3anM)`n}9ZufBa z5vI{| zV~s0x&!o`3!oB{7g$7~A;(eQ?)YHPJjl6^Thi|ZI4%#+|#6?N#^-n9tb-=yDz14>M zg!_z0#i0%N4Z^*5-G=+ohRox##r?zmJNI*K*wfI4`_E*Dn%i(++Hk*m8}8TKhWo1Y z1HuDL_Uv7gJ)Vv=VS^kl9vB`ta!(4^jy+ZWa1ai|y1ONXP4$9>&!*03XO1k1A7IE0 zhi9^TDV>&qqhsKGGOkj=`)uF$5=#(PDL#Gz=*acBH%w+dYh|@rpjp0Ujz6-7+8!9R%{*d~N z)5i`A4;y^m5*{TI9+i;r=8hjOnA)T zCc>))5Nha3y$M$R(~5Dp9UC4i+>Q&6t6_0$V?z$V8|LLN>{zmAOW4u7Z&ufIO0_&b zJbq+Kk*%{DG&%y_thO~5zF393R#i;BRg0U#O$o7!Cxj=Aut7PP+)uDMH9 zPjN=pt{V2lne6^bSL-c~-&y}Y$?^8d!<;J=uy0q#=@}?EfnrF>J`Vs@sS6J zpzS9hA#hI*PiGmZ?}*|A-8$%7!E`^ht8$W>8Jz>I$t=S5GBsI5@{)AHM42lR3 zZ8U8cw}e~N*k^=i;B4MqJTo7j(s^dWh-Zaov4U8wU>^!kX<&h~!?VLP-Foub#g<3q zh6+<3LH=`;|C}WMx#783W_HehUU*)3&el~NbU8W^F~=`BSm$B2K31ThyxhIkUFq2S z)Mk$_8qApgP#1f0GxN(iq|~Axvu|$zIdNpFC9v~pHt{qk6@~Ht)+|lM^JhF8!!OCZ zaJH&7g|m7Tyo)9sW^U1#{uRunt|eU4(Z=xS5dK-h_iqT-`oUq8x!LTB(QeSr>Hh83 za9l#@bpIu4JE!|A#s<1%E54mgmf@r(mZSv_m$=}x+3-4=;VrGhQ;fkgY3_~Lg7a+P zj0ukJdQE23Op49#pW=>BnQN0b-hCK}Se@To$}*KAZ>Rog#hA}ivLDp$#6@Y;!O|s< zdn&k$GRNz0mgMfBfIWxY)#L7h@o{?H`t|#CXU%q$b+#kI zrq`QoNb^;Hq?=)3bjt=8QTBwD?aoKB4Ffttjp2~={edn1ah1Bp;y#W*yOV-#gIV7* zor>FDD%l}0F2A{eV7Zz42$h1BKq&&fY$K+d9f1I63>V zSn%yQoxw#fFL zIXJe%&6dlxu=6mTvbIhmeEdG+Q?M>OGcxO%E~9bKlp-is51%g`e2sitL|Z$5#;w`d z#aA5Vei{ieiFF3$y|7i+kC4;Zz?+G~)=b=%S#jC&O9`oMesv2sqJp!aGEeubH+Ab9 z8@npc0H7bDWH{np^77k&<04`X+48yEHdsaNVjFBCRooij=c(T!M{iYUaM-PM?5e#6 zxB11An!(%=aNjdrl?MkJ7E=a~YWSGlOoJ>So=S;NUY?&%xPzkb@>rINJ`AY_7rJMR zE4VkOS&L~!>gn`dR-{(bZ*84(r~RTINOf6L^DqRurbJt=8B?3_5FKhORFWrJ6MUzZ z&{7pV#2J1kYtv1l4MrIC{-c7o$TuF=3jUGH3HTK!zWMx*P0vygBgKBT{7oh zv(XbdsKnhUc(!DE7DcEl?6UwOE3yUKzgqna<+CyFULLedW6YW4>5lIsqJJpAmWt86 zTH-b2q*ZdO3g2FR5Gk&Ee^O~E?OgH{^Hd) zT(7^6t5ls|rh`1A&jB6GEkApB+pGY$Tc_I$jiKnHy5fq-DR@dudzo5!m{Th`i}8f| zHiLoWOyp}xc^|}Q&Aq1Q=^V?S5`I=wf1Y+u({$+viSry7eICrZbQxfYb9>Z{Ch=!1 zLL_+x`eBb!lns>Xh=H68~_Nj~?Uf<_a^R z4jqF+(Pyk&QE?rof^nn=Qnb6 zaP7Z3GE^nAgg|;sMQa)4s3Yv;K9echo0vJ@b^CNCw(gJKnhDrf?Dujp8#tIvOOvBD zbm&tPW2T!P!g!-`A{Bi>Ejys`*X=hv!sLDBG9oE*`W{=K?+VIamURC$vI@fA4-vS! z#uAwT<|93&EKc8&Uz>;XoY`!<9! zSF)B9GL+H3S~%Wcj(&@YMYrQ#1}EAM5H)@b@)K5h*A5+Q*UG%7vPG5#gCO8^g&a*PCxiI}gpr_Gz z%FTIjspvskaSBovI_GT{2K}2{nB9&vF}69^UV^{z#7kT$4foxXI;Nt}5+$@pQxPtH z+3|@~^m(4{%QKqgkMm5o(Z;jX5cZ_eZ2a1G?5+4yG>y&~#MP+86DbU_H?n!HQmv_H(~+yZXr)lwp6V?c$j7IWIP+kK+*}C`D@5@+3h*Em4Y6 z+tu>r*X$H5jLIJ&I5`_669^#zd3rDEeVd}Ru`>J{LtZPl4v zYKlRahpBMg@y}JC>dIzR+w*{*UeC{tI;x}12r9|?9r|%e48eT&N?e<~s_x|Z% zhgiM=v3wnwd;^YohZrfPTYAJiLqnqtUT<56yQ%8sk|k)0h1DG#1B)MT!W=z%6eun z1rK(>f&oU7g_LP%4kO@INHQp8A9{%m#B6$t!nvzFB4z`A*1ZeQG%jt_<^7<`B#XAYwV*d zet@s;=sG2^ap`!<)}I6?r*|eYlvnjNW;!OfiF8}`0!wD4n5bjhvU(X0SKl95|GKCt zeQ=MZpBA&4|6d5OU%R=|cEY01p%0jl*{Fd+L8-_NIyCyE?5=3spfui05vc>p^}O!F zlpW(3V|PN!MCdU0K$>dC?jjzfvQtXxbDBhUV}fL#w>?}*0z0mKXkn^SNj?mmJ4!`k zu;gox!?{WlXB$AxPerc;`zeJ{h#syGjVJFS56Xw;X^+sZgBAC*V}J)QZTP4>6V+_+ zbQh9LtLIaz#0+vi@!MAGG95gtx=JmTuTnFrx|XgX&^}Le9bDm)#BfzY6-~;_D8#W6 z#fEY%jTvj;LpQGbb`cr8+;0jOt$eui8GM#&m**4iXd<6MbmhX7f*^?=4RmL`37+lp zyr7oHTI_k?d-=QJ#3@CPQxD6z6k5KVd>6WW(}c$lL4Z_LJ2kV;15jn0%$DeDBm!VV zvd=)&w$k#>dC|SRacra|%-dm~`S|OWo=7y`!q6kEV9uNA#!^_@PUw;+ev?i&JS-Tv z)ai!e6SM1rYijbBXt7gv%xIk+smUEo*r!BA|0+WJS7ZFiZ-B#;uunzSnHa4!F3Jb% zBCEd}!yJcK_fBSaOc9yg9i!RZx6F$|G0|tGZd>=l$n-@slO$W~c?!^w5?~owr>?eXu|4?@Ahme#}Wv34{c&65|Z~1mtzJPX|jV`w~~*#|h>FtN6QQm50?ovxvxf&?6G?i0J{zAYQ0GK7bh=>vgdMH5wd;J=@QGO3-I(p_&o}57u zJ;t-e4R(Ru)R2w8Pmt3&h8|#ev9qaON8gHFdE&eHaniv3;$#2rx&=MqS70#t1L7kb z_DT`Q-jw_RGfT)6hM7m|7+lGjw#nmYG`w|kCTOPirQIAC=V!9Vt35wVs)%+eagC>X zAmN)7ZbuW}M|d&QI+){@F6Szu39xB?h!qmu-%t<8gx?OsdMqKO^}J_Wq$a$=mj9 zph`0dGdD<3$rj=q!PooZ2*a)=bJhmPzf+0z=tG;M(Kq~Q@rjlMyJM3ay3SR@w<%l1 z3-ML3K{eHkw4=&Ssjx^kBGJuuepSIYt0<{r8-5gt7BVPLrI`|~Ue3UgKV~uznF;*SC)hp|pspHG7MQ?15 zrsQ@?#;LM_cvvcju9K{g%+~Wc@Z01ObWfd|w3qsFz4NnZf22C@ez13>%V9cYZ)&-f2y8yreiUgHDxjBl5=-zllNAEr@mNz-y&uM2-GRER95g_BwC`qdVxXU57-c9;3zB-;m5w!JIZ@Vy9t*U#684R>(sI?go^c;!rgZwL5?atof^@Hq zHGadLGC!uaHeb>_gbic?!>Z=YZ}Kz}Pt}UGWo_fK+u^b)rSVCV`KyEB*TYq9(Rmjz zmJ5c`cnUScz*AUwyz$9lyihQd#wRrx*gi!vsm94U1_QIg*lC>|xH}cKifsL!m?H%G zSNJ!(Y|B;?5;G~!NN@Mdx5)F`Z{TlD|F0L0aCHG->I}2WI$UMZBgNFtrjDJ){;-rt zG9V-2p(*uPR2Wf&hbqNGG$z@b-9shuCEkJi$OH$aCjYA3uOciNBf1a*@}@Rv^fx8* zyvnwhQY!v0bPO3G*fLU@l5pXDv)(0Bct1_=l0>|Z>0Oxr6I@SkdQz^JLdqa>c~D+R z-%3@4dSZZ3@6$Y{{QEJwoo=J)F0WJ%v@_LR+W0@MN)4i>@?V5RGor&Q3|C+Rw}o@tf9OpEi}zMI7oQN|lrRAT1eKAbU3am7uH9`5@r+{9%B2`hH($R_F zl&oW>rxcc|sOjBmgU!}x*6wJL)ff?|1~yakzCrn&6yq8DX3CE~POY`JTCiQ;4VCJ4 zl|n1jIQc!u_FShE=2cfG-Y5}jGbeMOn5wNir7GfAhQd_z2ZnTWP~aT&s11Y?@hd6m zhC;)2cf&Om{f+cPt380F4Xrphzp;{T7}Gr7HESyRPcqW@Xl;acPpQfY6I?5LiOP-X zb}0Y0>! z8#4#d$&4HPP&b6pSi`X0K-qk|VD_e>xZQVo2i5xN_EWB^iEvhkLE3=QeQ54Ku^OCIr!Gnekk z)6|8=^fS&+Qz;_8m=5B*>Xf#n;`u;uN7KHPe#bPacD(F*+J9EG8@Y@bEM^8Jd2r z)i6B4fQFPsU}Ma2yVmCi?pi!fG<^}U`&JgwUz(={qN2Q@x-dm7K3fD`IZaaD#JzlB z(XlU&Rgq$CX$%jVOy5GK!_?q-y zYwk{Vl>LHi)XRsT-=_kW zn*I2lig1W%k#h)f}EiS3QOa{#|q`55m z1i@}%5tk9=_U%qHu?%yL?haYG0UiOs?92Ta-w04MqO=PnDmo_0CQXdrjA(o+$79ar{5rC zN*d15aSEP9rQ>`lxb*r#Lr~SF_5tc;34}USmo8cc-FK>5)~3PHd^6gzSs>53YEJo% zaPo5P9xo>+bz7kaZQ2r?L7TG0g}yX=eocY)y+ZT z&W-yOa%_b7%E7j;h=xnD<&tbRU|S0egP)`zE;z5}YT~pRCqgXiZINdAk*P zjz;Crkl$Sd@Jlig?|w<qq%7Y9 z#7@6nn#^W+Wj7ijsIqOF>G(cJ>To)WPu9F=8O7yXDK0b&A{B11vFVC*5M1T>cZhbGizs zDl*!WA9@Jq0MrM;y$F*9Y;Wpf8Ci(nC}J{pTSkRzF@i<(@{5qrDLZd%%YXJ`iOJ^Hb2AdIV6wE5-!x#5NaiZ?lIRP4X=f3K@`8C zY@2D7tWS)*MftPwi^Fbjp!H?hiMQu51*~s(5kre>UG)5ku1nxh{cXz2XyL39`&ZNuNG@nNKH z$oWIy)E*eqx0xLGO>gsn4w8W5i5^yk4Yq|PXQ+jQ(BT;Ym7e3D z7gk?Finh`@M&h>8c%Vy{4Yvdyx}YTelf&E1!&&U%g#Ov;tEN3V^6CFL66M9JfAt;6 zWY0u*sih8w0tmad+{p8t)UnQ{idJq%bB%9eNb~8xPDN+3-{5zWqxcHZ^;9f6la_90 zOMX7)OcKP|@S9ZcO!O{&X|D*=x92b+t{g!@)g$?dkK)Hv-DNwW!|n1!Y9e)1lI56M z7M)JCbC#Z3mPKTF1ni1z88NZRa`n)QTFusC_cnkQr|lHho#EUf*cZVe8HwlDt|()J z$63MBYkTP_{oUnlh3+@^?cCtDcIO*`UU-~{HL&O8@jRymfrUkrG23o}30c~x+(=+I zKKIeVNFbCK07>`%A@FKz4x0oebL3Fn!e*%l=cjFrHx-{i0`juB`+oAF{{I36U~4-1 zD^;}RWG;_kCVjSSWh&5D`$V$&R9k(XEfYTOB;tlb8x#4NcK*60oz&(u4dE?9`TRs#{?*u2-8zhqsB#GD8{e{Y@$os3S>fL*zJ?dp^BW1Tl zX;7nGApPk8;T(1u$Q(IUeUO1B>%m1N>9IX^E0Z?DDk+Fiz#`q%T|o(Kx?M!C$HddH zCHO1&zEm{)M{EEM)$V8=`4_T+p(C%>`8dpz5y4JIkkE9;6PX2<(G^ma*PS)TgkSk% zWsJ^-546$T&8!_{i!qQrPs`cn+|oe#YWm_%(d;b3ZG1V|%XhP}(ni>wCe;+B z&d~{T#!IV$pCKn-COSl)g#Lc5?o?w#tw`jt1r2|mG^yzK2uKnn)$S^VmG?9F)l_l@ zlD6!SKQYoS@Ec)RHaG0`Y!O#4b8Zk@Y!bZQoHoYo8Y^piBNz^95KI#QO?3}ts^BK; zcD3(S)WBhw<}||F4lxK){Y@*%+YRjfDR&on%-Dwwsk9fE(+X}29y-=vfH4c0XR=Pq zU|0VkYDex@(=}R4a+N`u#i#vU2ne+TlgdV?xIH0Z~CSF73`oyo4o`*xypAf!?1XavNay-6lH-WH!CC%Svm{)SH>RNsGg1^CrEru&f7m6YZ)n|4#oZ4SkaR zlvca-%A%Tk8LN#y)1%|jGsLhfpABx&F{IyWmYW8QoD0acYB^Wc_fpjfYxsNO4vsOc z;eQJe7q6~#ec;F+T=^pHU6e(1O%o$jZ(&O4;V5|oP3iz{Cq(><1~rIrz!j&!MqZl3 zsP7WK&*v8RW7KR2bQ96Q-OQp3g>7q4YP;lK`IQI;=G3Ua?79A^%a(LZwdxQfe7)ng zSjPoP+I2uTxk<=-_ie-iV@xVIQEkJY*A;tdfFXQ6OrO%(?ShWvvzd71FL1VO1B!L~ zV>k1bBsoo?WBjPNbNwK-#rmXqNmQ6Gds|W}SWlU+aJ*^IuBJJCO(LdPn&xs&r25$0 zXLD1A_bJH)7o>vVm33Hi&85{!Oo>NHnTkf~3~;oG9s&mlTqPRN*j8^%>ujED``#=_ z)2D`s#Y&&jf;G!@^Nm*a+{n_H%wB;HVWWQG@_PXx=1uHp^O-q7(Z@%pb`VX6n;+!uTig3Z0*Y^?_;uUd6oSno zC)B49$zI|$!K>~__KTzg#IxU1*|?BkPLW4q=`yFtBY2s~a-3@76sZ^~jXHi|DFl(L zCpARXlTkNO%}TReHifx&*_7FMi-?IAUUa%%f>ilE2)(+i#MBuCr^8Es0Owjqiu`Y z@#?tAOIEf_MYTOt#uc`M%0#wZY=&yoYC)0=(R&1+=gmBI4Wmvq6%%NV$$fn;pxS%{ zYP-3SoJ%dXEzn#Ld9ICGe}Gpt=0)eAlqO66u=05%EEa}elfrFRt7gTPe7C!8PlpKa z#niZb^ffzaxwcA#Axzq-yENp}yscI0$y(~`^`=!dOAR&d-ho}SbZBRP)P z(KD%B*fEoRmRR~KMRf$ATYR&pcav-H{-aPW1fDb?jYPV{QG zl7=w`x5Ci3xo$Azy1~$2H%RJ*@kbaZd&Z+@1HkF(ax&x4hL-Y2ph5YQ2}vR>9EJL7 znMc}b@FG-sW!jSr>t~H}HNs4=Oj-WilLM<<2oj#iy8`jVu0YIxij2i;Jtw$|Y|v*7 z&2WCLb;J2{H*I_o$gSl-^ytsfa^0Xi`JsKL`$tm4taJD$f%U4{eRx+r zxPIr|k|1y0)^%C`ZrxT+U32!vj#k$fwVc`!7}po`!?FRkR*!*~P2?WU%S`qn@$Xh> z*FUY8=)9y4?-`WGX#`(HAKotwYo(K%J>d+ks)k1TVW@?;K{tvJV zTk7l~MA^fkS1g%v7$X%7jSt{r@Y#=wB6BO#q9vUKoFz!G8bT7&P&oG8NPzKod%+mwD? za2RQQDUsv*0lt4IwYIA%>p`YDyEIR$d=Z+u_chhy5>7hSIO!5`(%ZnQe_Aoo+j+hG zXu8-=@NET-ksOaGL&lvjsoHIAFL8TZognF%MXG#jBSC6m4Fr*&qzJOrAIt_VT7ui4 z#p^^1Z?8$<+Nfm&Zp)VEUFYRaQx`sk7TL<7N*Yhwd& zFKyOmr$K#v%@zOd! zD(0#95faNKNS&k3k8P!M=?rQF)Vy8^2dP`t!!SJf)0i%7D~GC*nBn0Z?^eh2mS0!Df$qC9w$(x(lZ%?>FRz|BRhzG7mFA%)@hk$e*E z246lDV=akHZK5rp^Y4J`1VeZ92j02=`Z6`xA9;`8L_!G8#eZBrG|r3 zNkgB&%S?7s`LG}(coY*|K%O8U;n`B^NT)ZoR%2-En=4mQ`IXBE;hdRFW>Z6e=9+<9 zAUUeGZ}e|<^+7aqdi&boo}VOodnRD68NAtOh|+sK_!m5%Y?~y5?oZREEs)Gbo9R^( zY>hlUNzp|LYTA>p5u_V8ir)jo$#$Ev?GfZVS=)?GBRBIiP0*%C!`wL6uOuJY@o~Vm zG~8d9)!vxk`UEd2;{_9hZMke*rmfc|I0#FpZpd(T1gBP+E|omWry;(|7bY^S*wWb& zJqKvlTtvRSRf$8$O;X;7r19!?0$dfO_C2k;svwik5ex#TCY?F1>veVHcJD1kHo47# z$S3DUB+TuMM9!h!@hUIkn^6z*JLjP8rXjYXHMFX|wRU(5bi6@y6w4=bFJC`Dw$*1| z|BHH?^)U3dJt)7mdUC?_CmGXUA*OeFn_`;uw)3bk_(?UKQ*TQEKSX`pd#0|i^>~F% zx*8W#SIR&c!(BDe!5-g92Xi25I$wKfi=Ra4thWxENqK7d$x}F=>B%H;x6m0D)W0}) zZXq!$G0be?;JFsgp5yMJF_o~M1H{k{y@EgVR?wKO-Fs!v?Wg`pu%^}NdZ{3q_v}}@ z_obYPG>u02mf7w3|Bt!!=b4K9@64q?36In#)Yg}w@~)@Rdob42W{Y!9qf^4|xv=F< z)96!RP)(!toP!e-Jc}LbLE?$pWczty`ub!$bdzo7)uEeg7ny7q-DDfb?9Q-j_GFu+ z#rkBs$Yi^iOtx{z*~MhL^B0|K()+(L^HdY&ED+zHz=@ z{Ih$dJ> zr#cUL)o6b>p18M4el?9j1-l10{sjw5<|E4dsy|8L7C&x*WcZU_fEF>yx_cqMgP*lE zcTw~~cfKKWxaN5<3XC(onrG_8erUN|Hb9#YR-Xa)n@!*e_ej{zR^zXuq@cBYtGbd*l^wYXHt$*_Nye?+Vc-;PlmH>7FM zbF%sX`8{aHif#NbpOk$8IznZxL=G1ByzMH1kP*!C6T)a5(|q&*&@IfB(^?K+!$skh zzkz11!oJDO#KpbQTd;@YHkgkthoWZl>TrNuty;^g$>cj=y?a&1np?Z7)>dEZpH@u# z5nd}yinPrCj~28y1?4ISl6-5vaxr`~luIaimumI}SIf9WhfeP{nNV^!DLWE8b_VPqA%0?PQcxrr^6^&?v= zP#({$&2qOo(cCQ4^=45_y;&&6+T|&WQKOL9coh`qVAeTs6T^~897~=#Sl05?nAW~_ z#kLkH#;p^`SobM0pPN8inhEs6I)N1P-z8ATEVkV>O~kvqrU~m9>{6*SA#+w%HDuSB zr+sw6O&Sw2*tJ@N@*AK@8$0y6ye&s#J$}t@zg0RrM^2u`ISma!9&zJLyxEE9g>ejWGMv|CL>S4`}gf zt-X3$Y-1ct7C56HvdKh8sQWm-ENlAGCFDEY)@;2!{|p4iMF@<gfeIHGLwCYDC1NX#YAlov*{L(CR=|x*i6}jzHC>d?7~m;Md^J__3Y*%URp0g zF%j-hB~vG4$LL`#_pfl=R$oEc2UkxTPUkz<0MMOQtM> z0&d;&M+sI2uihV0!8xRPkJ=#3(pk-kcwe{m$@sq(xT3zCRtsxbPSfQcPsa{C)JluL z8S8FICgg`9sI~aU@{e=A5ex|gpZISd%D=gR2kgoQxdhy}!S7<;OE7C*Ph%td9W;^H z;IF6Oa^y<+=4QyMJN;}9xXmC*vK~jOU!F8PY7i5Akj3@&zEz~!2A$IF7b(k-3 zgc;VEy4{Jq6WrnQGP)}pCofPZPEVcBBe6+x{BiJJ>N)uulIV=KtwcKhY|C!fhm+$f z#Y~boA>$FLdl=sS7N+g!|YT{bl8fn{Cp+8)DjaglYIkeCRrUWM0qM#eGV};O}vbkne3YtdnH-= zrxg=jgp7!`@`EQ>YeirxmohuZRxY-D?nc1ZDwFoV^%vWx6cM(^S7Obsusb_bY|Hta z<{NFd#+ccn{KqbIfb2Vn>A|JoVWYT zdD{n$%gNr>;^y$!uFF83frA2Dlh;W%u37vwK}5`+m<)8$ZnTW&5H2vuIx|ML9Ev`J z(5JjtLaBU=r$jb-e6G#q-dVhM$GY^3QE<6UxCn{s0i|^jU;e5&%jXnDR|sBkVp7No z$BT}A=-0PDb-hM7+u0O)jXm|MiQPx!hMd&TDH+ZusmbV+wqTR@f5W9clgn91U+)s(h z=k)mGCImg_=HokDdOO7<*;D_fS{Zlf&6S~qbGPW+B$9g=TvGmI4OopmQnap-{UwOe zxnb5C{Xm$GRiS)q{85wv^cr&;+c#;RZ23{(mw%TO;>^>1FD{KbxHlqFd|ea9V-S+| zE53V(*1#!xF1{OKE7f5!pqoA>B@a9f=UQb)p^4Ln{(Q5YFpl(A8 zP89f>#SjxTbUg@97`Yc)KTy-)T&j+crE*!@D||NJY@x8VsOeE$MAdzhCB{C4lGrq7 z?Qa{CM&TN~gx?Q-g&-Y??(KQ))5+!|k=}5{LuHkSOU*FiP*#iWnfp3+#}BA1XX4=i zX{6Q2hX_sD5gM^??o9e-5@M#1c(D~TA{S}reZ(;(((1k7tK0xOrp^JtDtsctl%=q! zc#5=Cx{pmNRlVkd)-acjU%X5&CYbcszE$^qfha5aJrB{%OES@hyGn zcBIOFM7p}*7S2x5k)q@d&47ZE_&#l8S~E{|mp}5}3GFUdsLKkR1Ar4w7&HNRRx^MmJC;vhd7)^#ol&y0&4?6V4K2#A6lol> zJ;eCE=ugE3rT)$Z(Jgvih=J{TC6nse(HbtS+^hlLz5){6Dt+tgw9tZ??*FVWrW@71 zN0xPWJ6Ao%*Nf`Wt;KMdZNeOkW=uqlHA^tYvaQomjkSu!C*dvab)K4ox4KKmb#^=6 z>IuRg$6C4?esEFP8(j+3xpucVih1$t@Z1VNNYbM5U)Wo>9~O&LrQ0#$?Nqb7nGwlR zW5R!u|BA(=+QxgVq=#J%ytiaH5brHC%``d zX4vPLNSsHB#2XiV8}hE0%|%NhTZj^!+$H-w=p)_! z-TY71Sj1Xg{Aez51kc9sWsv-6{+~Z9{F{7_lYR(Gdt>^ukQhURbI4ayIGdRQ2?jiE zYT@#)*#?{sHp|?>KF8qI4?>MS7x<44@R1zIfm9wM9~*t7W@-#J0h8$cza~lt|8R3m zzAm3-jCc1I<6jCH3bDAXfxlWyr(My?Axii1Z#^xs7SHQgn4+H z|E4@TIY7M)nOW*2fxJAuPiGtJ_yMrha6@mQQCpi@tus@8LX4$Tj4M2-EEX0UYTh+` zH|aXNT;&&$qdQz=os0XvialY^;6OltI+e)`sIf?sS<)Fbl-f~4Q@`#o#GO_019Eg1 zLy@C9?1UUk!XvBEnA)jJ%+JhkiLOGfBF}MHr&|Qhcj86Cg}-uanF^}&zIH;&SXz4c z-lQ?RqGLm+LH|vyB^9XA)+h@?OLRA(-sEWW^T)~mA@R2tZD!?RBy>KGwp~!}k3QDh zWJVLqn;8)B|CCV;pHO4l=CDGvhRL8=&EymMFvYVkLScAWv020^8F#@jWy4x}e_QDU z%Cl}GZzYY(a)de{8J8RSjFdBuIpcbjU4hCtcU<`m9Y;m}MRiS^?^7Y&H6^dNwB7#O z#@E%L!NCt~-buU(+k?kQo^|PRF2VP-0q4f`6Xrzh=9tTaPPR_~-u#n(!t=wPrmBUO z6Q!3)4^GgO#+6j;h^A1dY_*gY;nro!mR!uZ*YB<5pcAyXk?n`{(w63tEvsFS22?YQ zRRPX)E-1c?VbfnZIX#L|@eE0Z%}fgDex`nQN&UPU#^b60ZpP?rHIgLL;uk>{&c?B= zDDwq2)f#bDW)={5NYX+JsX%aWu<9(wqmrAq1Nsipzzme$h-}KF(PHqKJJ-3rv>zVZ zsxsFyIt?H?o}x8Qs{I!+&Cx1K5~smP6iGRX+y_Nc%@pxmRHKWy<#-RJy!`calDaDD z7|xQ;Nv~**!MBibq*_wjJugWD9O*(Ma6(4WR|(ZR?25L!lqZ|8sLgBCFtIWiq313; z0a4rZFw5V=^(~GslcrxemyXpFpU1B$*>$bDkZtzK9}G574Y8{1Wy3tpUgqW;T>Qd; z*U;70wU>DUyAG){3kGEzlsTBGnwcRvkJCJ9#VC?jxV<}@C4K0!jp;4XOIX)kIIkv~ z8f}-mC1ocj=FpdCiZ-N73h}tE=E+n*^UU}S@Mq%oX*S0;W?|nz^_@s;GcCalr2mN0 zC${u2(-`HSBrRf-To3A+pR$seieImpblvmH8)rOLz8E)E?sYu{;?}H8Af;~As~1`0)SEc~meowtiS$f&W6ivmkz0GQhN~U( zCvh8@fyEh$)HmQ&!G=I)|MT_+qhkU-}Cm- zRl(-x1#P0H`ukR%9~XX}t>7Y*h_%V5qts*M7pt*(ynKz$)BHXGZKeIlQ(LS|Oqfg2 zW_OX^56zU@xRw#qSWYf$&Y#GGrQjw-gw9mME#Y>x9!RdtR({0WU~e}5p`Hufcl;8V z$#2Zb4PFs+w?iH|cKPV9k`~M6)7e_V0PT(lieE~eAvX0@PG_OR-OQ|=JtpLtVEc%% z4jm`R5R{3&LDr#9!5=u!98%}}*8Eodrc13>BrkSohwB5U21mU$k+Yd#BPd;qa%zT& z(L#!)mG>fS5;rgIT~(`cZUWoFxf)x$LuYLU-8wN=lNl{q1FgZ^F(NC+wdmxIj?;Nr4InJ zJy)JeIJUm}SaW5UL94+O>^z=lldiiv6fYkY2c-rQ3PqC{t zTM?RWsncwC^gS=6&(5q~!h%M!2((k$b>I`MnUFLQet z-r2vnF+o1rPb}}Z+RCE?6)j;HnzPI+c2y=~^U2Fpf~GQSYmz&cnRuSIxUH|toh1Zq z{g}F7@cSD4iVF6R{iH(&0UjD=pZIs4$ZY#l_zU>|b9m)KK1?~|TekHQPsVlh?3x-_ z=R#OiY+r8(*8wyaV#PW5)IY%gW(`iZtY(MtPvBy$Z8Vdu8(z-KO!h|crrY|U7`OF7 zS}t2we?^n~VPVd#4{pn9c6b4RS5X&6BHuUi%z*ONAF$(U8PPUAw8^+@drvh3!baIZ zQ_EkI?#YJN{dd~%YLIeUitTx}wze6+Av;^`L+v~<)=}GCaWADb?{M|~zL?3Q_IN&Z zrn*nT>UCap+PKy^jsC6m)b?Gs?lmlLo4s2-COKl<&;Q>NtopQT_EhkLVB_lgdL|dI z1fNzrQhC-N>Z3Mmic6DGyLw!GM#~|fE65XMNqUXRRQ9wog})TuY%QH%nNQzIrtmK8 zq{_8Br8~HKMKcfFBp&z>GOd4FG0~)n=tj`a&(hAp)XrQTeaW)Fu*Q*qTLaLNS&wPN zicP)3Am4~pE$pPqbqQ9ru!F15ZN}=Ib*vOq$EucP7FNOnRkpU&Y2zNt0RJa@k^j3s zPw;GTw|KzMlbq6k?WTSBwL}s6A*6sC+(N&R*<4i2T}5|=ew27dIxH#eCC+V0GIXrf z=_y-jgD_J%#QQNd1@2LOenRo*@iLQrk0^eh@quFMK2zqdEc1_P6mq7xjifkJTrB|H z;mO0s=4|j4`12ms$IZ)X=m_VX@o(caQ{m5?U>3lKV);(v(JS%wN43{<^Bu;+ z>~;P}*cJJSR`oBlA>qnp^8+R*WMv=BDTh=xu26j=EKmcB3>-^W|@H%dn`kUVj(dILmpcA0sW z?=zymTa$MAFph9!TsFq2qGIZH<0nsF`5^9WP3hA?4|uJyJK4B`H`+nZpaJt{qhy<} z`~=*b1tmyw%%>U3cSVoVTS~i^PZLkdT-Tu9RNhDpvOSGvEe)P^JTrEO_q~FdG3{V8 z7TlSzY+(C=g>a1=S-K+j?sCH;zE0V#6C9na!0I|i zR=Z88Q+3I?o$C8je;G%E%qA<<77=_SGDCS286DkIrsLV%hbhLt0Y90={0IuUG-+GM zx=(fRqq}V^Dma7O;TYt=otq!P8>G3cp#lxK^OfE6W&ws9xW&X_R5C2HwkfGHl3I@&{|#z9RYX z06#vPka5{+F+Lm4(%RnWj_fdI`*RQ5zi{4w zPT|W9J`En0Rr<~FZ1f;ZIg!~k-kz@oeN|(e7`Gi}%Uf4=eHnTFd0(#CDY>glP=}U! zCU*VD8xXCR?0pDP!qL=EG&Ct5c}^N}D5Fc(!U~3Z(7NmbP>ebsMQUw$+zh??O{=oqZS z0aHFDfi=qt&jIKrDdOv?nR_)`eEldBcZ`&ctskfLygC734*cx$Y!6N81K|8(&GpiU z=Xg!=zm5N_k(pV2EziC9FOxlIU{pQ~xeFzXMR(W>cbMI2F9WFxhgcD{TdML=d*NQ# zkJ$^0*>~AXcJc<$z0%!~{@*D3;|7JYKVdJF&C#?JN!g#W7s~#$y-+p|ltfYXJ@zuI z>{M_o71AFE0gHuFa0}*5RnNbwg8o%i^slOGu?O%nte--X^(N24%f@R=rV|Bue+Pw62xTwK2pN#2DY3uTxLA+EO(=!2U zWx*HJm&nfL>>AWh4(4)EG}iHDn6F#%{(i=QXca$@4xdH2uF7T6c`HgeZHLuNG1oY( zHD$xQUfvp8_H)?J4Vm$7fW;mg+iW~f1yjJezflIP^qn!Wv&nF~jjo72Q47wl3wwFr zUOLpLzWm=w!8q}KE5K{zqW3X5*Gg z9js-^{<;dX4+EY997%L)!>T4=SnaagIse6tWwO=naiT((X5$DXt=&>;Pn;Z)rnTRFWj4|e4bvG?VK0C6{_j_Py0?MtM&cu@!Lesd}&^;L0?!7oI#VD zmE&2EtGt~wsmf;o<#f9Gc$p2xkg5+f@`-%Dw1{87qD`7@ZiHihV9UzAKpAYyHmtZY z551Ep;!wM#hn?;WTP&Jcs>(YkzSzQALTMHA&J>4gWaAqRB>{^bgDZ5tN0{YSc!nDe z$-9YIH{c9CKnB_{ew%Y|E}voUi}2)i9+l3`Csp|zz~vq} za+TzGYUp}6ULu{gUvOxXrrbZsqrmJ^@sH+p=-OE50 zO5FayySd6)O~VK%rs7N7%f*c%X=?I4nGf@Rac zRCFsTP14vb!Df6{q{=tdlrU*+R(2}7P1P68W%oXvZu?c$xB5lV#%$8@?W8allisG_ z_bIr=&X7)R+Y>GjY`m zUHK41@ZDMd*{@P<8>{P57{Q*rR@3Ce;jyt+cfOfgwLM9#8i4N#`Nv8PRLEBT1$1|n z)O_`2>%!A4I5|DP2RnmquJMh2O25Lma&(aE8Eea> z&!A(#{UbzgKb$u0Kc;8=)Lc3<(KBv0X7r)^T_0SAw46S~tg5#AM2ioTZ$o3alAe-# z6)suxD(tW+STY6=j8Q{xPhEFm&v;vDW#CFNE}gG(4s+#h?90ix_5pPFG?*_`~Ysckn}+Q0;eV9?8?VGFi>J_e+9`p}= zC!I!z{^rr)5Js1;SOO%Ulb^|W@eRYr(v*@DW&$-~6T=2UT zdgY?uJTFn9F*#*uj;4x@{Y(DCP!XJt|Z%hxQpw-*iE`! zq16W=i^MFtlDnWU`ZThexQe{%OV7ZcsB-PbmIV~6A8F3=U1fPczHI%|iis+WSJ8HUrXM1U<`PyreSonvIU@@0QAu2d4IhQ- zW&DsJlW`XY>f*ess8q292)gk}T|Ob)-QdBVJWten`06EVSJ;L7Xg$>qmx`s3hQQDG zz>K?1s+h~fZ=_MS7Nu5e?=2qU+P}go87tCuEdR<4TNJUyZomn%6Oqhs7qZJp9_rol zFE8|NDdLb(=Gx}Otc@Eo`gl)ZB_I{*TKI^4(PUPrsWt6Mli2T(HrcvDTWk+)`EU8nr%EFb;2%ILdj%RI^!>W7&szG zr{a6zSJMCB(3#Z9_&a5TZ;|=iDr51rh$jxddFW3m6hUeH%+4SB_xeZgLw~M)6nc|s z{1g(CgylEr+17h4HhBSI=Iy2p<&O~2HF+Q93SK?@3-xer-YXp$U}WXirflmC+^K#; z^|NG%m(i7qEzwyymKj^Rx^SMjp)39zF>I2{FkQkbo4f8p6csx2&}Rdts2#0Y3y|XR zev`sKadf>`bQPU{?Y_UL@6C{6m zMnX{4`b$EY@=s^QHBha*^es*K3J>j9qtZB0U0u=VsoUfi_`#z^RB6k%-oUip)hvJA zh5P(QyrJ_iOAHqe3qQQy#Se?PNMcb3G@Seu`dqQaJ+khR>t>T98&v7gXzTX_zu21Z z-lwOvd#@r+GG8R1`Xzp%FY}`*J1X^H4wtZ=aePNfnBP@G&FwkuJ>RZflLqH237o+p zf*#=OAy(rYN0s9y3dBd^C^?u#3De4-?MYIhy(nBeLtB$TJCx=y{w%+^37Rca%2Y7; zEVyIvNU$Hv#t(wPUQegmJ!4jJhvZjlNUm&%60+({>&?a2uoGU|@Wl407D%^mtMnd@ z;NhM#q>QVd%xLmzeGTYXCOcXRiXiTMj#()`R!fP&0VhYsgCwPhKBiq04t02&QF+~A zxP#%Npq4X|uDbNQ2aMLSv~dtWMVF%b879CMIi(t9nITxt>O*`@sgbmyS+J_2gM}mk z%~?s;GuE0P?;Vf7M#}i>{1l69=`BXz&@1P2c6C`HVORB=2`pVp`z=0fOK)+e`}&40 zy_l``mfdF2@Q)#M=b~sIeRac^Tn8hN7)YvOA;T){dFTr$O0KoPQETmgB|iSP5~+U5 z+cUPL0mEJ}>~$D&3(8`T;o?RNd+QkXHem>`WsY1AVRrD0_EUwHPGYl zyQas|W_m1#9?Km)Rs`V+PmdLi^jKb}$MRY9So*(Ak0nj?V6SHrJz5++`s~2u&OS$v zmC$3QqX(mK^ro9AVL?twNbhnYxERXaoH|;!&RHcR6%NoVGCX4A;x?9VYICd(Hsr$MR-`Yut1l4gH@aSFvlC=^Tzzh2YdGQoAg{+`2yRjbs{{FDxpuPt2Z z%2V^6<6hZI(6`XnBFvnu*cPJuQF)}^$egDgXpBD@j0Q0~d0C=bN3x5Qj8zKVtyRp% zSPZhPDVV1T+A7OpX4EkF1Wyo+Z=b4NerRc}qGwSluXap-+v`4QJOAlXhc`_#FIgt? zh4uNux_n`K10JUUzd*@=NwxZ!(pp%w2{bWM7+zC(+BKa%F(17EmE|Nir{=~i85zFk z$oH7YchN(5EG1*Sn&MIDJq`C{23A4vJUIp~f&`kjMBH1#3SW9{DaTb|ya#hfaTsFF zH|A2>e>vcE6dy3@2`%x%e;YBJDr(jPN%r`WS){QF=;(OUG# zcFAjv9=x=*D}I!Kwdn5|op%>JuDW!pF7yq+F#R!nq`y3Op2KT>tC zqPlHe?JF1V&YbX3IL;;?xvs8G5rcUK=k}v*= z$nrfZbnPPgR{U>#uAQCmx6KK)ebFV%cXh?fnd+>qJ`99%_uIkur$8_zGx`~C(M{l? z1rxVV>6&1BexCeHn5(3Mi+TP~ZAG8mi*$w35!rZ8UbIb317P(Dfzae*kQ;QR)V=3^ z3a_dGOs%IwbOt%Y{~E+ZJG)?sb}Wo;(N_U^UXPi=l)!_w>X@0o%3`abJs9um{VptbLX*C^C5 zWHpv9*}Ko~xu*njkORU*)_}aA4nziiVW_IEJ4IS#TYfN?_inQ(zd_8^w5rbq01!cm7c{;)B4PR-0TH zBki#5k6>yCM$s`A2065(a}JAlm<_p93aadr$TVi^j`jfD<;vBeZH2YOlG7PmuYIG# zPeZD|KZpg#Oa+GvnMS5ZvkqPi$7CZ!ZoyqtR3d(2%pJZc>&mFBeYe$Kd-`9Eoc_0l zx_723zotcIdq!MLGLBNLP=`X3DT~6p51m-`_|U?26XSNDDIr17?pzoW)#MKl(6$YB zv}&kQFQWVQ0JOnlpt~0__67>5-*ATn{teg^bHlF#D3h_@>I)MrlYP5ih}%l6`WSCp zZHqJK^&ZORAVhq@j!CI+17-^U4bU(%28ZCZH5%l!1M^^0W=FT+Zo$6ig4-Q@r`sxY zJA%@8Xr}&Fa@flLBB5mc{v7rDW{3HF*s`VFlg#Lop8(YzqZ4CBrj*gr3dV>avk2?( zwL4b_oNxV?f)kgxeL<<<9l_0qC%*M*+Y9>B**x)NOwi^S0yiPYFgdep`W|b?^ZN))y_JY9f$m+Lt<>$^r{iRq6S-+m2lN&>JDCEwK4QUo`Amq0j>LELx ze;6UtqdsI>r3KX=`Z6V_pSsN7HkM#zHkJ@rnJb^9OqE8*t@o$&&}yr8BMlq+kloQ$ z+Rd;6gP)q;iV_Q31tWM-dT_MR7+IToGKx8Mllx<1X&w z%;+dHF5?=1pYMC_t)#ggh7tTKr`pZkn|&F8@EZ}<)WlOHdi8}F(Awi#II zs{gL}5vMRsz^>z(lG(C5o6DKDf(E+=i*|q`0k5U~TN8sO3xge!cg6-vg?sfPQA~Re z8{NDtmx&kAK0|9uw}wVK0c8*HO>NT#+=h99%bQlNz1@{!v(#9=TmM=u>)S=Vd~*G% zw^=Jxy1Ac!&hmIK<=+G^g~8kDTk&_+8;;o4Fg|A-Z*T#l;^0%Kw~?wJj>063)3*^Q z3%3)k^^W};`D{Nub)rkMuZrEBX6d&usmX#)j~AW5k~P25|0;S)U3nssB3l_iTuf)K z`w@dh=j^ihLR1ij*LoyZOfHEhP9{6ddoE>i8w$>3LZfMZ%OEVy6#gD6Y5WrPbi5 zf8x!gRg>3owUh4VkOVstT;Ep0INrDYh`-G*j;VXVtDa8hJL$$p75`@-&*pP^r&jIp z>OThD{sMaU%Kn(x6<^2HQosU5Rkl<=Nr+Plu|J3+2t|FVz`nrW#Jb;I2o6IQhMS$Ml$(hpyFpXCx{53ALi}%5w_6Nd8qhQf2Ot)iDL&cCkmah z!EEgsXdnoX0>_K>ACeC#(yhC%@dg_TVBS}n5F%t{!9ux%5G+Qt|U$c43y&dhujIgD_iq*+0`dm&&lA=^Gry*ZRxFAxQy)jRfbxZF~Az?bXzBL{Kfk>;efqa(Y;RO+AcRssNz~3ey}fJ zUp?9SQZ>vs2~|d=SUOA0`6d|?XK_DJP+em{1SzL&l86fITI43aK-5C6{Oh6s1iYp_ zW!?sku|4HpyU>Xt40$=A1-sgmSf>?HveBN-2Pr_pAU4h8Do&r6rB*)7@X6)~aH|WW zET8tZj4Gp?ePy_oE%&r>jh6-L?aTji#H&Tq4wer9!GV9p))w4RFvL zbB-aqc`*ZLb6DQiezr|~(ZW-x(jcA!!=nzqWNe{)!_D}yEM#QvfjU!(kNU=6pRSyz zuP5alPCY+2-ghie90cPECCH=pYzp$ry;M&3%B05@xo5hzora0D2e$#Ql#Rzb`Fe$T zS1Q_@2ZSd+&)n^Cgp4&tZH8&QRscsc*dAU*1!G-KUFhuPOg-lU>c>J#@o}2&eB9M6 zmeL-}883Tr)2=$>&G?@83*(5lTOwjK{b$ienzf~X%elTyBkh(p!Odv<^Zg7i)*L|On;-$BW#mdO>wfdwq z8FT>4!CR(t)4>DKTz|e5`sC&~tdQP1Q^L0jDX-W(-Cqp8OUhD_vb2kNGN%=`wsN(~ znmjGDwfqb$qcdCGIFP^Byq75zPV*|EfN;jp zHQ63~p@Q23j&G%#y_quOIEj(fjbf%c&1gq9f@$7V;-kSUMb90e+X~HL0?9wUl@)+? zF}u{pQqL5CKNmN%>8(?xp6xSiSLSC*3lq$h3at;?+|hJxS3Z5y;mI33o%D+PB*8u* z?KsjEf_wDZX}xI?`e5P>ssDg(?>-RuWXv0l3yNrT{LGnr#>I3wJlU!eA{y9}h{V7| zjc&Ev*x*__gKLOX{TYk`#OfoK9Yb+4rHO&%A$H6|e2hmo{i%z!IiOn{lwaStf6%D}x#O!vw< z)5%pVbCIi_Be}}yUKL|{89JDLkl`xU8V9}-!(Ow2l>*^($KakJ&i2(^BZ+RQdTXoQ zjellh+r>?lu>|vBp~toe{zWsYbdFsf7p{4~q@A;8QlRcuIE)gRCiQTW-kV`9_1pOg zkAz!c49EP;pYPHHi)ifNKv3cl_VLr7o{$WQAc$}#1B9J~-f#*T=?TeEV=r3%IRM)H}cx`CJ7*^7lz zoPZ&!DkfMDHHp5(68}kUXs@b1pcX6^%v!{phW_?jLRjaq=<0&IkrtJ-hH4c5*)VeR zKi9hLd|=7IfJoLG7#J+iE&%e-=Z67*l~>)5>@o1>GOeuuS=IL!n7T`BESxRSv2HFd z8Hkg27TFGYoWPJ&J&Fnj0-WO}wOUu0ZscOEj(Ql|S~qn=`rfyh@VGdAjP^RI5Q zk;IC1+OG6+F3Rm8y&tY?+MMvsaF_n>iA5xtJx3i3`^-j%Q%I?YTWfPb9)1>OHr|jto%)z{T z0;j+#E!-*4%jNJ+;CVsBM;#VF5 zM%psRYDlMNDi8K8KpB4ta~KmBi-)7UdI>2kWo#~IzrnshBKcx4TE?4S+lyb+E3^CX zEQhQ3T~nVS)3W%im+fVo0LZ8(&@nNoeg)XPdX2&E3J#W%3FjYe1!g4*tl z{TvEj>I$}UPyY+bP1z8Bn!;Uzd1`R7-=@Eyj`Y(MpLQh!ukRfMO<~E4k2g&Zn1}ko zN!XN_@=KPbCwtu6BK?vu?9^IAn)p9Y(AYk)T6D)7n8BFOoc`9nvf&wUY)Ko^qjO(; z7i%Chyv>`fB@7IiX#6f2b((6o&#Nwng`SDt8b( zBi>=%f&9NJn52rYCmxVFjlv%lCIxFd4?2RWguP zkF4R=*Vt33ey{}_>p;ZNF5A_+6w+pw?-#$M2L6Kg zRnU(8c4_t+T80kJF9%CNYIHg+%+~aaq=Gg{LmpElOkNIkgV$}b?Ptu$y)O@zlGD9Q zrhB2-z=Lq1putFsbx^p>@i3Vue^ZjGTyHYhBZCUO#CKcn!I=^`*P5Q0+ z&UvU`_gZUXZ7<3(rXn+hND{%#@UCzL!QGXEZ~(QEH#suiTM1VJa(!>$N3_sFvgGAl z% zmxC*8A&M!tr4h2F%dBLy{~}lAxvKI(GzQ0x;fF=mPj!wPq}P^H!R4%2Q7Y-$Pn}Fc z(*yPEJb^p2@O!Iw$GHq$M^+7HoF?UHWch44Fg|w<~PBJaK45gFE|I@7l)o} zugmP$v){CSM}@bX$DHf^QFZOQC|T$hcRf29Vbun8nzp>lEOfHfR}rvcwVhNL$eHOr z1pFC#X3ee>_sr$&da~8Gx8=%r<~nK5Ts?7J-z3*ia!jLXA}2Fsmac9we0TVDQAMG% z%#-&lv)@@ZWvf4G1ErMi$OlSTOJ~^`_PjqCPOjavpyDp|v+X5x<$^wO0E|`odG=Jc zp*A1j4ZV9QUG?t84ryQY$=85U^GArQKYT9pvL7$3-bQ(dl}lYM)mmmC+W`?{EENn= z;`qHz5&v&35o|QpzaQY8^-4E>L_63zqQ16qP@(YZfPnZh^@q1G*v*KOe)qkVq_c5V z{~5&O+k6zT;1{R2krg|h?nuifg>JWG2qc5BNYFU-7#&JC^L@(2LWXfzKCtMo{4-lW z(jv-D5@&Mv0h+}cifaYi3uYj$FEP;EnOt9drl;^sEmx5oDZ?``_vcwTqP{;_+`b{| zlX@MUN9!}JKcoHg?D~Q2pQoh8x>Dgm1o^gaV(89#DXjQVkK2Y0wgM})OXU=;XwB*e zlRRrXK~%S}en|T#_7b8M;fB3v&r7MjZc0CtbT*}fA-fsm?Zn4%hb3`LoOX)u<*m4h zBo5&);|+CHX5&ojk_h9%8E?3&f=boI2klt3_T``-+jic8HSq##ZC7P&oN|4$keJf; zNSR*jnCX0N66T+(P3i`Vo2O0c6N{VMCiRX3Tr*2Yn}lZ;nM&< zr@sMXo-3BzisiNT^bV(#d+dF%enj(qsD5PgeYn1%`M#vSvH8BVzNz`XtiHMVzP!Gr z`My{EsOI~MLjCC0N3s6Q)<;+UnAS&k{n*w=PyM*oM{oUEt&fHEt*wtm_2XL~rTPi2 zkG}e|TOa-P6I&kx^^;m3i|Z%1KFak|S|5Y;ZLN=?`l+pt;reOGM?*}6`7q@@A3USU zEzQ2%x-MT)*lvz8uaL&&{>dDWt1o5y<#V_gM%jg@NHZKxo;`D}CgZT5&` zyTp8=Aa1F*>zC0kTR&gQ%kJ!})QF$KHAWhWnb$7y0r1kaOT4@@|ErbX*(E9_I2%;R z?5n+w*C>tCe=BAlyTo(uYu1q1C2HPHc^A?a)ZECe$GR!zd0zb&nw?T1CZU>km_?3t zVXW!$%#9qKLzGPI(zc(?$$yeS90)FP=a5^$whJCM0WT z&mgX$Do3wI7JV&EVNrCI8kmZ%)*~HV!^32!l-B^>n&v5I-?&ZojX~<<`t?dFYwQLu zyR&x)BlHtkS4?m#vAC>ZP9sLq6= z$5gMmU&MSpbu?6h!I$wq1AHmN=gA16Y#}{N0JYSlU+9X}#F^ks8r_pRdFMD&dvGC9 z<=`xW`qPC>duWONCU|@BCuxr}=6OY9@H{Wyo~$nyD@Vt;K27JrW6G5>ew@k~3brh= zb$z-$XAGEI)MJc-X~VzMnAE^2Ky4=>-U=qIZN9gfFxvyFD-F0D_Notoh2R`u90>N+ z!Ns!W_eRgfHP+rXYB@GhESK5lc#OVULs87(3v7+y_LIzBmBM$rcn_|-lsQfNAYTVoF;^+-W=g+_0K>emn|?t#KfuO1^Yq;^M#)e6SDAg ztN%=c*&I99nk=0`<3H8=vj4de?wL{9e)xPMYUkHJ%0;|5@DBz@ExqD=;=vC zA9Y55u}>G6TG=}3U#Q&*{s{Rz)Q%wjTfxG?iei6HUr&J5KIwyhBw>GVUvIFEk|?LK zajH-|gm3^~gl8=D|{R2MW6d(JK@t*X`-C{oS*65m-&umX`o>cQ(J{H*`<*Dod+h zIs>i(BN_HkQamiCqm8G5a`2YCKx!S#k&M?xm*tE;Y8O*>-&0r z|Bmn8bnOy@qutHuVWv{(bVs_Xwt|{F!xoxGp+-IKraP?yzCo(SA6g|Bvr@!lvv%b# zE!mPYH_2n`b9UwO_<`B*XI8MA<4r}eNNe=rG}n}>M}xoNXDrv7VMhdPu<$_k9P~KT z#O=ZOKxfI__#+icrPQ4YW@rwom9(js;00+<;yN=abI{3Si{MCYY7pbu>uw45!%nRmXR3V)dfV|<7MWxH_2XbQRA^jS zdfUp%dJk>$O*!0FVM|#IUo<0`kI>i5Q-1{!Fi*XShh&2u?=m1QxIXTsz@i^sN_#o( zqq_u7MG4SjOk6Vfaj1l(Z_Y0r$nAk+#ynAGoj5qaje3hQT3A}jl*?RTycp}7rKK!- z!M~<003;>OryM|c86-~6@HSv68eVtY1O8%PFzXoD+8YSa0=Q9>o|M=KfnZac0?-6`*A%IkK0cm@a#IS1BMZmpFO%;mI781oL` zzG@|@g@jacaa4EK&xhy3wCEbOMIr!X#k_!9_yw-}a+R|kec6a@1|A>WNNYR84l~7A zXV|Lv?kc!KGw;IIomb|8Sl(1M+KZ_jf1vxvR+`F{!x0)s$q-U?V_BzRbB78g{$Km) z_Ctjlqh+6!f!YvUK~uvk`6>D*o5v)wCwy?-e`r>+>k+yKda`CKV~df)O6k#im(XhG5(hW5pUG$pUqJ%1D05|+-hdPK^Csa`><%UqcNaP{3%9Pul8=OcO#3on zFI{WJp=8z6iAc2WXaSjbx8dZgCqoZ-=%*KLw>I0ROK;vcVB3#j6+XJA;I?`Cu*ac? z&8%xBBi=Yf2p6+SsyqA{4BTb#DqFC0Ig?sihE*=6R7gBd+1ZIDB-8GCsnF8W#6@^1 zhe~ZfEancS{pi+lCc&^uKg3Oz@zteXA!LVDPIMM=#>-|&010ME*1wQbmIP&ktK3(~ zdE-I-A}5vyv@r7ASKv3gngINA=Dr1`g~6Pg0YM>DF0XtXvK7B!T}arsOb@l|wnSN2 zeGTQr#zecWX{z?_Y=yQ?Iw$g($%V0jrN$2`U~i#l&v{P@cL4v`Nc?d%ALB!@U!}LP zZ&Z5$Axje(m>F$}hbOe>GSws1bB$^`*sk3-j}x=YnwJsuX2Zt`W!uKE=}yy%7i^$z zraR^)S*A-_1sB>M?^@@Am1GdXteoaKIWNUg@Dxt>moWXrmyxQhRphs}xwQ+cbEFcw zN$10ge!a@fV{6lGAXIwpeM$dK!)M1ib70BpPTp_;YTMRv);#TQNOck5uqxOMRTooRL{ zjavsRW}bEMA@69`&{_wJ#%q%pI^G$byC?bFB>aowTMvlF`Z0cv zD0=L0l-JT>?;0T37T&gU7+Xd7-vMd0`vDrKoyxIA`QVjITI`wHSyQAa)9{qokc}O+ z1Q#NUfajz>Q*M5NN=>~tHk^bT9QRS7+aOg*T7aI=%-BpIg^Poa>+#y*>nGgc+mOJg zQnWU;t=*x-^^k$gjxPF^^V+9aM0K4X&dsuY&uvB73%QR(6x=T5a2o-<xR3Wb`UtyIxF_$=(s{=Mi_yP50? z#)7cM(`u21qrn4P@|qUL*>pGtw>Yge*#FD)9aLO7r-kaL-LHd$;)6qPl{Wf_f@_EF!u82>u^&`I?jGgi}R}x0< zh~ToyPEW{60M_X)0c$g_)e=!QuZdi~l5u9oFPs&fRMGTr?H0IVF*klFchB?Y60fem z3q%@oc_%NsvtJcLZ=g9N4aEeng7{5-z?hHgT(WiqBca{B;yYKO7m*+c9KJ-R+VKS zidiIW^pCBys~-6htwi`zfx;ZoqzT{qkiLamH)otcuhJLv8q+N%xF`#5B2zLE+2-#T z;Z+Bnl0>wx8xNdk-ME)6h&tDe>{3(coNFw!%w0=;q7*=&e|z{c?4?#*bDEdhy5btz zrIii)JPL7gf$uTG-Mr_A?CP2#x6CacBdi8YsiNh}*XTjkQ||{4CNqzbXV8rWvAcNf z!qsuv;MH_)VgbMrzEt>UkV10Hr;RI{WB06U98dgjWlpT$$&bC+E?EP`YED&rB zayDfR84Nm4Q9(Z?>D7c*cQ=op;~0glImh!kTWq=!g3hg#wA<%GdDnZ-0?@G@C|Sk) z8M1*Snd~)&nzDf(%Ndensg*&Ms-Fbq$44kM!DzmcTr%wNa~D)F){`>R8N(B$(pR9W z9Na=b3Rmi`f|udk3bZ9HNxb}~thDJRmZ+?jdzv2ZZeq|EiT)F)lM!N0mk)$y}|qOuvmDz)Rly5}b>JP|}T~$o&*w5d5vQjT@O> z!K3<+CNvmxQTGMBURI`X-C}qZoQ&DvYOgNn{P2~eJy`=I{3~kJOstiNrqO4!M5(di zjTuv2Xz;^VDQ)e=3}H9~&fQGxGUwDdN3MQ_3QIZLJuT(!5!?waMXx3o(Af=&F>L?z z)UcU_GO~r&2_Q3S?KD6aGhuuNuc1&o(gCaaEQvWRcq%kIw3b7HwI7qPk`Xi8q#2W! z?`@p!@5Vt3xvD#s#E5Zro88HEl-=(n{A1v#+NU?6&Qj#U*O6^tpgj9}RoYWm&-mdR z_$c+9;#HniPpPZ$@Yvq5zgEZo6=_BqiV5Bbc3tc3a<1S_!Zt?GV@UnJopDErGWwd~ z#INKrz<^~#^&)!?Rd3X@p_(+t(%x5S-7@-r_BT`{A3hvFkjBtN!kFdOCJbX-Y!Q8i z*lbO|bT7)>H;{eyKgo)3q6jlMPCVsndb%`2!5aZR`YZt`^P|7!8N7**{O;^;)v()m z4_HT42>9LHfZr?N%}ViRQq(_BW*eh;SY(X;S+TbhJJL{0a64&waEeq2-ojhFUQ2sl z0Kny1o8Y~3U$evtMoyWQ6fp^!HX&|@*0637XG}z%&wPsw6lciq0 zNMQ9}Ri5a_trBFQ)g}8ZX_ImYZ0@YeDBv4EbD6?-A^TZt-YSI2_#uF2VzsGSZMf^$ z8_F)tK)ZxWd~EShIpVdb8Iw8X5@nX!QQgl~RmS`s$57gqKNM#ebOqx$ypo@)xk3@- z4K*aV6G+0l_^E%>dJN55cJ^+8cLzPxu>NQmQVe5`9#Q3cds%<=8iwv6JyV2PW>vkq z0X|GJJ^&6}m#HI=dDGRO5R~-ULb4`eIQ{Xdx&mB(82%S|)!(TETbs43 z-)OVjKXLe0HiwO+2lSfX*A*H+C0ZxB`3c(UrL{4}bOcwCVl1_TYqS=0WplNA)qE7Q zmD+v0Mc*YcO7%WrMzV6ZS6`$S-pznx`Z|xx&EKY1T!UtU)9DwyD`(|j%eiBYUv;Vt zd%oZE7EeC%jz-HAt(*Ve<|vmRdD*~8X@4dH9{ap+^Ddc(Uh8oGzdypigM z+TOp~d~c}v2~GZ2GL`7I0vyiX2$L!JgV_4QP=lbFeh;;2o-+Eus4q4>lJB!JkeW() z1uu+F#tsydMC_+&td(B?}Mkgm_{BR0sUH%O(R;$k;w6>cA|>n@`6i`^_4& z``&`Zx&v!IxOXvpJN0x`o}UZf!AmzBtM&jdwRiFpzKfrp$`~{MyLrR>%wS-^y+@xK zX4IGuuSZ;V{c46~?JvhIHr#~( zH7J9r>Q?ZA1LB-rs8Y#PSG*Uc-DsXcY7EXsDj96FslL>nOD*cHF6v$jT2_6p zp23H~vg0bqwF?3SEN_2r-9>IZ=|psRgKf_e{#B*0BMob3-v<^OA_eGjfwu_M+^_xH z>W25x{`V7UObBO=soB%OSX3sdpN_EVV{ZqRRE&m{`En9GRUBn%3^nC)%jVaVZz_e} zf2Ya}IA$Rs-m3e(=K`x&2#TYbBy>Sjg;3R7trH64!D3fIDyMoML5s@)drD?VtTA>t z_3mRlewY+~pBFwzb07*7Pu&$R>EuME+l*j5EcEJ@DjR-)M9@dKZDK4vAme?Ca#pDv zcNhYl-)}*+*4&?m-Cz`)v-85k(|LPN+QH#X+b_=5bY57&dbS1Y)Ubl}YzEJs#aDn| zfntc!FvH={Lda=%jfPS>8~lg}r+7llwMCBvNViRB^NLwl!)Ie3bB}j8AW5e5n9pAB zZF!%g1?ifPXT0K(Q##=jC^KchQ!~Z10hqGishO^9a6fZy&VJ3{SCT5bG4VlkbHTzo z)&l#p6TcxYo8Ml{<+meOq$dy)n4$2@F*AK}8K2=iT$9n&;zQKhhuTZxy!2UHkU%=x zX@YwI-9>2NZ0$Wn)g8H1cq_1#RO%+c1x`W2i{C?uDA8+OWp z@h{psy{(=dNj;aTo?HK-dXzL3-qcpl)$`Sp@}$vOqxPg?2WJ`v!M}h$XyymdM(rVn z&e%$vTIy@(2l=ug;s%VRG}|{Df;e?O-0#TdzFOH_HLYx*!Th795u%+x*#9G#>>}gX zx$A!eCS}_brnGlAc-q(cJ-D7Rz_o_I;DHW;c4If&J%Q>&Dyk;>AjK;-@76tX*1ikr z4#k=9Wyj7p?$(t8HXU1vXKJN+?Gn?(p3l9-w!u3v1#74pSfD<@6Rkg)bm)3Za_I%qN%j|Q(1#&5PC_Y*13sAJ#@(BLH@@TyTk`K|* zBMrp_Z-b>8|LU&P^2Wbd2Auw5%RZ0+tBbIJI0^5%)&EnjzhaLYi5e~nE1qy2KxJWtU`BYirvbrjs)?saaPvT-%TCvw;r2n)TlM0k>glE~o zvYaG~*Cuf2Yii}LoH8V{?4Eg6bmY<3Q{-9MtjC&Sbdo4LzRYS<8aJUx^YF2xhljr)#v?$rUazUIRGgugga`*|pu zhg!x%SmYsu`_^r7H!PA-1u~Lwn)XiQiRNAKf1QmHH7!15u+9(ukr22zqpFLWZ&T?^ z@B|??l;P<^7V;fJ;=$X#;FFCDMg<=3A4OZ=B-Qw`RCoyk&!Mtt6QFc4@kSXM1!Nv? z_HagB7p}T;3;meE3b8GQA|F0!;;>CBjveXqCIhluO~KgC{75ye+9UYK3hp)+gt3xe z=Y;UIfF_P1r72b{g>FFuM173w-Pt3=0I+B%4u+2drwQ0B|43u~Xeh?w;2IiL`yoH| z0x%c@$@8*1yGi-6|AK)iCb$O%(w}p55x1@*JNrEC**7cueKd2Vp_rhG{HLDWld5n0;Nb0Z~_CKs4Cj&7lnbxF3V{Qn#a_9^I3T*|YWYSB2&Z)?<3Eay+G@ zy?*cyL>9kDyywKQ2MIAV5ud}DK&ZApkDkdQbZ*vK9J4TT$n#dVV zxC6|6xjjfC*G3WurF)VD_GTi9LQE0`NFwQr7DW^%{zgstUv%Ht>NYwQZx~?Dr)hkL z$n5CEENHeTqqDm_5Pn)iQqDw=PMEJKxy}x3y439~@noy_7q!APgD~|{5uz4fzlAoL z{WzWh%i@^x@Gemz-15kzBaIEWrVP{Wa>}u7GO(${uPI^p5hes7ZhoE!+hyC#u^I7o zF>LYc=Lp&Q^MgTw(`~cI} zwSZ<1>3&UsmiM@S1}I3uMGQ_xig!9Qos*2`b(=n|6TZSah@5CtC8fvRBR9~LNWvpYy0v+bBzR) z=x3Hlu%^6=o9%4Nb9f9%6Y%l<{xaBNw|PsbloMk1kgb;z9=(W{-Pvb}4LeU5iU}aO zN^q~%4pp}Px+>GTaF!QFjhkD(!uS{&?^%Q9*rvZyy0W_VF{pe_;KFJHpn~s0;Wq!- z-Km-YO(4q`nVaMBbVuiSlG;JS&3M8m(`2$E@7eG=NMcP}KW7KaAvgOLB_X{8+m*3e^w9B^C zS~-@qQgCI%Pl(ON4Q#c0Fx;tzV~G-}yOXvq@h-Z-=@jJ;^i8ytCL_PPR7o+N4K7yB zz}>4FjPjzrN84qWRdI*5ht2KJM4o~5%h1FC)82yTntU5g_Bxsjn~3{pg?Gu#4(_WF z`9;$)$UMXo{J^As<12fvw<@HVvH{Y$-a0YNFet|{b$gPho7!PX942*hofQ@Q+Hr@rajNj@t2)N1s;fTO z79@NuW!*6Yg!s`*)?_v}1>$}1IC$SlM8~Y8X)+GZi8*9WOb=Yp@iijR#3lp)_Y@N} zW=70z_QYZeQ;ZpYB-BXscbn19CuL7u`R9Nr*|;RxBbH2pta$BUrBEI$yTeen&qRth zG*g6+z;^_Jw28#*Y*tajVPA2q*Hy7sh^qoqALwi%=}sdZpsErpBIF{QBIa{b_<-l? z1?PCo_ARwpuL>kzF)vJ%y2G>3oY_AAXwq5M;cnflhSwfttd+XrvGtvwz;WeV{#z70 zeh1WB++AjSBH0;>v7iat&DYGqS8NUrlOm=+;i!GaQBM#@-2u8r8j1;C4M!ar&#syM zBo!v3+r;elk|rpLmC|pZrP;?w7~Cfwyo~z#7fu}HvuIx!F4fl}ue4~#3dWKQoYir1 z*TsFFq$oLLa36wLU1^btl}l`A@P)twaoClrpcbuQOax?F0_z!E%<&$S7?w!4sgmg9 zBr5d_uiP!CfOlCyh&Lwd^?}L}wS(<+ti<30?0~DAc~{FJo?9F`oIG1Nxyo>&nBY~0 z6YL9gS*&UpDh;Uy_5o1Pg;$fZe|Tbr>KhJUpfCK>43w6H2Xn2l^xpE;WEY^4iB3rx zvt*toFE1@u(XxAp5#v&IG@0v9mFV4;NEBCE(zi4|f7rjGv|`-xq70;Zjl7&hAR?Y~-9pTE_+d*oUZRTO6w0B># zh_DVqyzd+$T!9|+>&5l|=v?^?cBAft!ZptSQ@cuC;S0ms}qA#Fm_4@W(^yz9*2!s zmNIOV_FFnI$U?7)jrkDz#4-VHZ9iO!$DYz^+P=EE%f0zLAO%{)HSYqRm=(JTNiE&i(n_z4*iIIQu&RJ9%Fmslr%~=)h>#Bl>o4o~s)} z1(zv@tei1(AKwugv{>bM`D1C;2o<;skmP z7SP||=_xQHnM3RHmqXtN3&!-G>v`!3#=FuxuA~^I7v_9OsqCeOf-gwUNtJ`o>p8*R zz2s*#T_r;6U=Zm+>iK7R&Fa11zL8~T8ptJSobvz zLbR(;xh4(C2~<;_1KImY6`$gqJNo*w`P$Xmq{LA8g*c6 z`1Me#pPcE>QHPYd?hq5QjV5EZAJ?4?=SUb~KKLToGC^b;-enm{>@P`4WF~x6IXDM+ z?R8kXC*yQF^fV7>Ur;6Ka09C!3T{f3A7$7+ciO#$Zr5z70*3A8`uk#56*d@Wh&gWp9-!# z&pUh5p(R&};5NOZIz{)$&jW@ga`ms_Ub+k6U01~)?hvJoeU`%%AU`HLtQIY_W_``vwgwBQ>J}M`4W&*=_p2H_Opq1H3bYX`7UkqdM?lODF2@6tb!Zv;~dc#tyQU1HqlB z&JvWzUOlBRbmD^OZh?m}n0Gycfw_8uf{fG@&RprOurqsBRP9A@YFjwQ#3)_m7-_!h z@~$H<{8`dVvcqZz@gqf0wjND6K>5Dr@~xjI-`>oRks`>aN1QL^ok6}sjdp8C5bk6k ztCTfX4ew$k-N62?M5D-3SUTWh3hiZX8|jIZ3O}5K=p>cG*}yh~+3=+fwO{+rhq=0h z7t=3W)8F6^Sfh9dI36mJhgBG$D=bRZlSP&?CgrjB>wK-Y`Rh=a$s|tpz=~_9vQ($( z%yRG!s0l(gJ)q+e>Jv+!!WS8x2)0pGhKp$~RkG?$g|-#o>h!&XNk8G*uz_-2|170{ zf^!*uI#w-)dX-j|krIGJJ?;`kokxw@*OIH&yZW1PiSh#ZVZ9W~ zoe_~LXbbdf77(tX4%3B(-(j&&=jd)?_D0OpChC0X1Aqs^OK6wjLj=_<+Vlp*?j#l= z{&NgW551C=fv{%J@L0wgl9R)I%9HWA>DwI$WBbRTv`UTT9y=(Hb&^49rMTfq=T_T+ zXiv`cNBa+Hk8T6EJ*B^A(_0W&yIjSIzR~O*+Q#)}@Yx#Imeq}GMNq#U^Ns5*^W?K} ztqAhzVfkoda3RbS;@Cu3wJzdlnG)JqoHI_YW=){9j5$@$L#6q;D8jB)HF@_I@P9b8 zGy7aRRyNzqAVrQotmJ_x87eO`%DWyxQU24CRAhJ|eN&m;}QVn3?DHowBd(M#IX zF69xT^;GbEBTcZ*OuDyMy&a6O$#*A=Ww5&c2hgw|q7lQ{+X)SjY`78mC7BGd9ty^Z z#<09bru}&}$0BBZwA`y6Pkwel_AIM%LiM+bOSy}R%dVz_R8t*)343~*=EQ@Io^1Fm z>TkJa$~TW>(GMwG#~o>7xYaIbx9nB7K7`+?>gV{48`NDHwyK=hk^$2?m_>l0kEZG@ z6Ml)j4OZS*HU*9tatz*QJ2$-eYyB6RCe>T@NeZr}KZt)}^9z$|#f%bI-Na9DKZ(oL ztMq!XTFSxZ`+da49g;Ea2%7LJ(PWcXy@_N?Zyh3Lr0iotoWf?9|KaMVdSp_(r24WC z$r5-83}#N5r&1;xbj`ky)H32#KS+8%TV4Jz)$fOJG$+?`%Z0ZBcVpn8UiC0ivePF@ zh|^mCR6n2+AWwG&DRE%cGx04bHXD2q0vyZAhE0O497<5sPoAQvlOCDBs8>-`F5F5_ zn}96B_e()ur8DC7sSOu9*RFKj%YjwBMtNvmBqUjy2AF^(f+J4st z&PoouNBb7*8?2OEVDM$?!f+;TxfXoDedCAchkM0G=5P5MG{%A-(hUh;eG*LjYgff> z7*3Dp{a_bWRTd1dC`zgNU3I2Iw@!C6?4C*C^B{}!Ex0Gr_#NveTBFrS8v7OQP2vLa z-SY$0x+b0d1Yfe0x3QgfgeOyEm!At5Fc?UU?~@IWQzc7sx>YKRt-srI7^Ni%elRt9 z8Re*(l_tbjosOrR#nF)$>J>c~#?P40ro-J3Ahvw_^<{%U>ote>*<7tgR9vB!XHN5< z?=L)Ygh#>@RgHfMC3|*v`PnTcyH2L;r1%D9h${H-(W5;Id-_qN+`Oy+NZt8cG#E= zYt!J38wx9YxsRKVnAp3H<&u^9h`u_sdt)5 zVY^5d859|nt*N%~{WUPq`$@COIm1Ob)UZsc@CQ`z6mYx9?%3YF?OsE__H1B7zH4ku zcBBQnrV9O;8hT@NENOhSWG_D=I!>=E_KKdR=hA4a#gKhdbbRuVU#HLNrHoXo;r@F^!dd&Wic16OAAKV5%Pw=}6_-tL03V%cjC)?Y} z%U%}}K8$|RM01nhm?FHRtv`bES^n%;#UV#YMiNd@32T&OYhOk{HlLR@_->I4=3Ya+ zqCCk?&qQMLm_58B_shq`toaM@@qY}P1*;2 zIp`ubsnVlbX}t-%F;-eCz4{1@rg>;fi<3*?Pb^Lj71v5dhw!j5nf7#M?-(~GRj47t zv=0!#XNY5H$=wtKkAR01uwpM;Q)fZB4YgJ_AG$eA3wHyrCdj57s21YNcHTFzFSJjK zMkjQf%akOM6wMO2y`;%KN^*L?IVF)t^`>U_DSmC$5!?Z9_<4}dH#{zmtVdkkifRLc ziy(wT^cJb$$BZ9aFS90abFgn41CkT9rL{Hb(WTtYcq?g85uj(|G6=I+bBh<_R&2>t z`?vv-0cN!(KaEER@Fl?Jr`?|j%aUbJ_)GotG0=J{dtqWM%O3tYo)P{N5SdO?=S-eh zp$h;8h#mh1!d0rnG$%gA!(xU*hrai0uX0TyPi4I-upVQy>DSJt{g?W+bM#m>G=B7H zf7rXQsYQ!AZuhFq(|+w-5=>q?E%pLmyI|Ay;QN3%JvkHn1fT%@ED|u95KI^}_7z?Q zg1RaNKR8%iL#HiJ2OY(`>BQ3>l7V-eqr2x@ZfU$AG4T(_W4iNQxh8+vNboHGwu|l8 zlqK9w6;LNc$FSOy!L+4{M{wo3wy?3q@rS(c)t11E+{rOp5~6xbIM4C(Bok8+iDJ|i z^B@P&G!XS?9Z8k4i`Q~XONFT+soopC#OKJ*1sfySt+@RKdIZ0tZf|t$>`CNqwD?HY z!@kvfmf^^Vh8bInsDe8QsJ>OO4kT&$yIQg?8^$-UcV4n zI67Fg+#9#oFLK{qIg1&bw1DZ!?)t?<;9@)cXAz`KbP8UfzjuP83I^E5?98+)Z2KY? zkR!lK+rDT4l{Gf{+z)QGrl$Hcd)?Y&%WefcsvpbrsCh)b$D#&XQKiiJZ4pCOh~?>w z7;Z&a-nKkTEFjL)7QVEVrIcw4U)D-*DcYizx3bKM>d)?V>y~D#Tz}1C3{$+vLajlb z-xi{lfS0xqHKDPQALzc7)1ZePv;_(9#>S2ygITpUHnt@cxK?6&Xn$@+Uwk3=ujyC2 zkh?!W8!%9N3e~SNjfDGY&~j;IIO<+pCjq!=J=XY18Q`jN?14})I`c_6*B78`9 zNMRBasSDqq{A=!I&1Am2E6ZSo%dwUo9_p?v9`3G`mULHomU56}SvNL)1ajJO1FYjR zVDO!K-_7A!)7epsxBON_d4Hrldpe_Yq#R-2mmaD93dBU0@`|p=#SF$VLmz9#47r%0 zIA%jDX4u6H$1!KNVwSj=C2>rn6|>aEERAFCZpAEfG0WnZPbV=ztA^d(K=YkOr@dkz zx|}!oPN+xBcMgmt85S%4=w5#97P+_O`7(2JYjS&=JX5uto$`#rY^}LP2-BY*lrZc< z7`cL|>dyfvF=zI7Ua27e<1J0Fzf%QtiY#jpa?(MM3W?>EBJ_ieg7&fmpJs#CODT@NQsPtE+d61^?0uGgmu1e+n@NM?;9gZiLvuse^iu-K{xSRo_(%Lp4872Kfq&n@x5p8>gMy>tEepeH!IU^A2Hx@I$Y`Z zTT$W9iFYdiw zNiVeXe8Do1#L_G70|cSfUbcGZS*YQ(dGtXWI^bq`pC6Hg6CC9W0*$G8+WY!-=?uU}j6yh$XEkYal)3$#G??5My ztVZ+DsO;Nkqk^R6Ky+PIVTuB1{a93CaHcPIFa}r z4^po!qi8n8o(yo;5N;0gYd=B6jBX?``ch?#uD18u>$Ou{d#$wb>F`=XN`lLH2B(oX zrh?!(ysxpbhOv$JY}JonhwW0~Urm&(xOejG3XbE~F7x&tdJHmnXmju^LV|xs*5T7l z1Djmfb&62#?%;Uk^3(a?5&>X`WwIH>4u-+_n@3;b2fqZ>=1bp5EB-!;4zy{J6gyu@ z3))h+?^X(1cb*FDC%UoxI+EKWiY8u4rE!}(8soxp+?$lGNpM1=Cm|{@z#9VGPvwJ9 zAZsr*?O|){;f_xGEzcrU+jv5CxSk(IHFVjm7F%#tn>GY+D?!%q*Da#3B`7<~mY~O* zxEH9MhJ1etzKKTXh1osO`^7Ju5W{Az!0gu*;qtU9dXm9oeG$ubtajt7Do4f@(4RYR zrhy~oZ_lKojn-+CrxSD2{4sDU5tFlHN^_?;JghtRO%1mZTa&yf|4OZ${~ZrNwCI85 z_HBV3cNaWw7LYD1 z4Q4<%{4^E(+;kTwN&;8~ZE4JW(tCPp;2lI{^)UHHR@^pb1CnQWxc zk?I&oIs6<5)6^%1#Zn7Cxu5!0pMz7z#+q@=8*WYw>(;+E7JWO*c#7&Cz{R`B1g6-P zi%kJUjFj2W*_9UonC<`Xpe;UA0d#2PrILU#{9j*5(M~o@W@iSd3yy?VWpgKShCIKm zP-DQ+4N5V3t`sN@Uj0lYy!*ZBNJw_P<0jwpwmDo~N8mtkE61hc4UY+SNYs4c9k0{; zhU);x^gnn*OhG@ntldWiUu212>R{LSL8-c$p<^=SL1e<(LF{bhK!(}wR(TAu5menb&Z<7Ves8<~x*I7tm7I~t z&l}a*KYYh}ry5Nn%KS>jxV|5waBKB*NXmF&;HJ-ZY7`Kqaodaye@(Wo2^=x%7~607 z&=J5lkuOdpLYcuqy_gzLFv(8X0aA`u~ZPF(N;g=b5df=$n$(y&)zFAh~jYs#jX z>DE_2y9RR#>Q^PAwZc??ff;M!i|Xfm?Tu=xle0KC5>HI-s1SnsM@UoZ_9H2zc)Ip$ zCYXu-ld_sYYHi3?9{!2COW9}w&dy6dI)xyG7tO~R)qC?bFe{O^IO1NKc(Xz zcE}K`{$$T|)Z4s_KBa}5`Da%4e!>4j-u0)ujoA(LPBS_QYETeUmb7pTNFxJdKH4Y3 zIBaKwfi!X=j{oZ~1@8I=5Wr@&O>jp0I5F6ws`{`@SI^khOEZy#k!FyF@Qe-QW{^aZ znMl8Tj+!(^-xD!icCbkKB#3w7n&Gyu7jsFrsbZf6bGYcP&b>Wx>2-Gr8BT}!JK8$F zw589C@t_SFofy^(BJO-;!Yt$XY2ss^^Lt7dOdUi47CMzB>v0TGegt3 zLZ%JU?ejxAepHe+`~%>)326+ogsbV>@iismzfaGEDsV?vofQ%Ok#d?4Sdbfj?C~|H z2kyrz+90=i!ZooxP&RTY2Y*rt2#XLh%i0(hF)x$Lu3_yePK-dGF{`o-S96o}6s~$i9M& zjg_|N%^DJ1cIVBsA5+OWakg&NLBd?tDGrinypApPxrMBk>%o|;J@**Ji>tTlTB8sq zP6sVz=Mo;?0blp9pVOUWlq0Si{W^QjcGgB-S6dsUN1< zO0j``l78s56>@|^(9E<#j#LOUXe(s1LKYQDxIf|KK`v&kB@TpglC;!Q>Mbqo>)*Zj zdl;vbP=~ZK;$^5Q@h;O5k9VPB-@xw0m#gf7fxgAN7mw(5v9!Fg z26u44-htYLvFqnmB*mQIdk645-N_ENa&)TW#?7P*UZhDP6Wpjr@M8OY3BRU9 zk)8DFX5O~+si#Ws?!duk8vB{&)AMz!gE`975_Je#NZ7Fb(jWtX7rXfEOpxWPYc|Jk z<0e6+yxnpEzs##EARp${pnNVk2;qy{fnxiHEOHafXZ#zi)3UaoG^x4`(?zWcH|5{8 zGg%&bo8ooi_cksobNlq4uaj$p;?QhCwOc*G`(>_SuOZb?W7x%G$@byt9)WWmD~b{u zWt41x&6lv7WHZxRXcw5xWreqw1H)h;bZW+x#mn~TDW?8RmgF++=pievfqQubm(p-+ zV}I75K;>>NZ?@PKLbI9Z)?ZE|=w#`lehEBNYJ004MLZPPLbA_yHz~HY3tPJf)q+CS z8aOm%>Q2)_o*=j%+7jGCuj$tBVivELz?RjOEPAmk76T3s6oZ9)cJ;B!x&=h$+~tj1 z$$}rOMMR-2ad{01dDl8oLw|an2z70L#x*@NYUPSWReYr#eELIx5?AYT`Wmii=}9dzglxPPI&~jxCHlC^cJ| z;EoqtN_e@}h6_Q1lh*jQz?`<(QZOuS^`N}a~DL*{j zUqE6hWBWZL@ea>O z-fi%V6vC4FaiogRl6V`aAJuWG3$lam+&PNv!n@;_I~YK|F%OGRnNdhtI#w3kuV*An zh2Yf79K$I`e?<^6uj7HzG5$n1$M;lvW_$DoUQ7q`UCMi&t4Db#1tr3E4;vtTnp#5g zj6N0tf_qC%xe{H0sTsef@-PTc`7VhA2Q33i1e9ikJ7DznT1%z0sTnf4PyJpT+pt{4 zd)Nnp&Omi(RxJw2hW!NDdc3}Yb#5Hhl)c-(2bA)Sni11r)$|W3?_}C~hPAa-s8s{v zP?gZmU@`e{>gxglzH&VkuQ2+15UwvCuhGMZ*)_|(8d}_| z5S8>#aI7jBy)RbM*^1GnvXvsQsP42_>exR^V|CzpXWE#&gUGN9%qs>ksL~xJWIFC~ z{cO?CQT)WK<*vFC=iE{`$6lR%2Po7lwllESrn!a^jsC#fHGmOl_&!WtZ?ud_YhPQ4$vG z%Lq1|4RcaMY`wmmkeSKgYwT$mi({)fYs!A7v#H-o>7`tu9K3=TtO#SXUYnO5g9gqv zT1Ghm@v=aFKS8OJO>^94Y4&D9{g#p0j_c`IhWKLc9;N#6p4`qA0xWi9ZM$+au#+pL zDTR8R$$)2vRt>hyiMG>WeR91LWilsb9r8)e?Z2o01(_SP-!eC4sWsGO{H%UAUE(-d zw->ws+p5Of2=Od@aI&H3(F?rm6c}7XbR09~Vou}+Y9(olH$JB^bB^H)7uYAM+uj7d z6tjGBShr}WbU_PuTXk2~_#C(VAVfKnosQ$TUmUIkP1PHqc-v;PF+-V>19d;dnDJt} z`3dcCkDt`?X4TU4yXt#`d!)^wt#74Ld3!h0*ySimq20cHwx?G8X`2hqwYH^#+f`rv z9x#yYTM+II%n(P0)ktNj3#GQ_(qOKY3-=+GQD8hwvW~j@`BqM_il|hun%`iApKuL7 zGqd~h8#hKiqon&jPw9i#QLFQw6_CX9o*3%#s<(ivoSm6*9^P|BEaILhc)BTvO^R=0 zlcbJzdg^_&S*U9vIEfQqpKOY1yX=~+zU;L!PJowZoLxI2me)1l4UI#AKJO!I`QcB# zfp7Oc@B9w9db6gE;0#`H0+WI>%-IyM>siF8r>~9Bdvmzgba&%cdg2%G^2p{XVaE%O z1$Vt%Ws>gA1o-c-h;LOEq`T|)f$~>eoDUu%khx#>K?9!q9GbrMCycs=l6X&1L1Qz9 zJ7{qbdAQI-j`u($?l_NNLugd5Jzl2N6LN!RvB&BvWpwdfrf_H9f)OKOr}7H+f|X4M z=c<+3Ok#u<$3Kc&k8a$0bjNNzsD}efy*V9M)`j3SEnZET$|G)O0z~h`leE0l>)^oW zyxLL9ywMQij<@UNJ*x-PSxh`m>b`uE%7K!y%fiWV+?FZam_83I9OVu@ zrNwOoURrDvPE(A+gI-}*be`+YJ3_a^_9Eud#IMSyKo;A_UN@5>_1T}#?{S(W`9GeI zBwUdq@@<4|=N~6W-nh}f3l9mqhX0n{GUaU|%>|5w*>M_Q%(5S|mKVe6>*jnPOvU>EauP3Hs{5X0;wq+tLj7O^1x|7TuZS_X$0Ir)*@oD~b z`+b66UAgLRu8s{K@DW%EKE#jHF{R92+D^kI&ZN$dvnpbs-`y|J>Q;%=sZ3B=zKj=(FGQojxMxkHo92P zbaaV*W}+E;c14%kvpc%Xp2g^Lo?bR{Y;=(Vc4uEU7x+xJrl@TWu8j9y;F=L!FE_YS z(G|*=j;dA=L+nIH8BcB&>(F@Sp?Mu@d2%ynN{yY&id{!nDyyi-W;p$<+-yHCI#l#d z{gO+!pA&b56)R2@m!#~Qwolp;G&ob5MOty|+*Y`K&TCZ_e@+rv>G{|h9zmx!G%X`Z zov@+xGdoKi4RNoPH(__vnkZCZ6W+wOP|ay*M70WVZ(`s!LK<%;79>h8xJxidE=h%` zFc=|Y$G{s#40SQKQacal_?bz#(^J9k#junj#-}8sIE5r#QW&cw3E6coe6y7GZKcFF z#}g+u&%+gCN#bJcns^_-<9D`bF>U+Vm(u6Bda=bU(m=OYJ@8TQirFJU-?d3?GuzXt z!KoRvJ*iudg8!i@A!-9jvT<#$n>G?6HN_eax+Y z`f}6dK6uR7o)98<2?I#qkmnnMFrE;8f`4Mh#RiUdlMX0cM1)zTq9+4G2lm=t>?0xj z^yRsdT&YQUqC?746_bJCuC2U`cO?D%)bLIJw_tnPvSQe#|01~lqW(0}cF6_2WA4$P*j~P0V<)mQ_)zagR&4U|o;aDtPo&bt zS5ls77U^s03p{bK#wJ6IL1=-VtHF4OE8o3Z>F(9acCQAvdwrj3EJs2PkB9UyWpVT& zz1BA|lA?$0^-4keh)efj_xOk&u?G+E^+A26Ba6&LiZp)Yc=~1H>8~`N?ngVsc~jBV zJTNt>=^1@Mxoaw8Y`I?(Bx8%SI~8U0@7DyXxuRmZHY6_ms<~X)s~k^pE{`GC+8hUH z-iTj~W?V82)wWu!8-owoIt4!*Zhga^GpRgV5S7Etpd^+Ugcy(Tfd(WzR(oJ^ko< zJyOvP7Mjt8!&di;^~^*s;lZiQZ2H*fMuqIozHV+c*_vX~$C`OKi^gt}Sp`<`v1cZFnVy;G7q?MY zRdwAS!+)ED@XZFHpBfB5MbAgK^Vy3b7dBMco%*O<#ZSDXpzyaO4e8C4gSU`l&8Tdv z%a(i1=-;At(HIz8n1oq=bOUh(wONYuYZ^;#<>L58%G&~bvx4sqgU^rNLPA=5haQ>e ztvooL6WyuL-PyM$V8qMjHQAbC;t5Cd7fd$xdCy?Kb5r=J=sK==yGYsrihLl~D8{2| zHe@=OWX$;#;n>{ZK=5qgS*G5`G5k1}aYDOtD>A-fJeLbmAE8~ITNTA4dr@lcpoZ`+ z>VPd}oHJ!yGL=YppR?sSB98>31db%7xF!v4Y@B-f^ipygW85j8V--yL?p;OLyzXXO zj{}Qw;y57Ym2RQu`Yr3>hT6M|ev_OKqtVK5M%`i-5P#yrnl+oNB8KFj_$S4Omv@~ndpA| zOh<3$*(#q=doRUwa3(+aEVW^LVoU?27>p-ACc7zy1ayd@xZMgD*VtGN{=uOj_^^Xk zJUXv4vQGBL;y~E4lLuJLmsuBT5%qJeYz1SSw+SfNUJ=e zebWha<2eoZ92VsVU*6do9b08MccV@3EBUy+HBx&&k0hez)Y$ z2sX}Uz}t!Qg4@tw)!zf{?asbW1jlATG03B<32*1EYl4-(H~S7^@JbZEg`nu2B2;Vv z^{l?p-^*`JNQ=ArntH-qlRXewi0!8sg=7hE_Y#N?^0KA z1vOi_t>9wq3={~C3VQo`gHdebZQG-|DtfP9 zYUzWM-Vq%w!G;8TV9r_ebz6T1B0R6s>%Q>~Yu`y0VIb~Md~r29lo~43fMIG|&$8*U zSAU;Zy#{rKBd}6ma3=-C*W2O@z}@1p{$+neqYQU%Uh^v+y7^#!_>)c(--F)G{O`qk zqTgM|`%c0>$bT2_`g`0PYb54jy3^tFRkschYLNTkd3<(P z07IBA2@()a_v(hr1cdVif=((r5H2tf zChLY_mnIWls5G*F8e*Tt4=>^~ajdl*E@&Ws;weC0@>qf{{JZED(iYBYd%{eA*(Q4@ z&f0)UJ78Kk6EFtAC>70zvm5sSKy#wx4QQJAZ7#ipUBa1M9I(gX>=O)T-y7oT>|TQJ z)BlOjh-c!a%VtOQ1t$fi6Qf*9lbjc17VoYcmJOA5tS@VRs%NsHxiL;nKVuk2y4mm; zBD3ZPEOGFK<-Z|qlyy$K{ znA~bKyJ!vv4MSWo&>i2{(9Hz{J@JhVJ;{v?$Td1=u>)My!BtaFGT&FX6)?m~D4{Sscu4_B+-Nn1h+FRm$dg_j^t@T_ir z97``3SP0okv?ENiUfE2QE~FoGwBAY}quSg0+1Bi;UPvZ(F8@XI$j2zq6~N{s+mu*o zmwEtk7YSX8`qNgS zEQEsa3ZN=-SG*To$s1aq@asl;81Cf4Z}3V6BCAA>>#lgNEkd4Y9-?qQQF^`63HAs0 zlSA7NGZt`;^AO@BaxjSrxA9xuLDPb}XqZ=hw_d9NZ$tP*ulkv0++gEVKsKtPKJAM7 zgoYr9SW(7U>xHZ=s^QZmH9%-@nZm5J*Lvg~J%i6d1?NvhkH2=|ht4)^0_{B$bF$w?%uub5nFO@1;z10zy;xZDsT*{)H58 z{s8^mrx&~KA2d@1KzJ*x&Z{g=V$;d>LoX$~ zucy6ycOSJC+!1`dL{fK3FwCJK?C;H$dRoU3IT(kfesCi|OD-n=Lt75$1EQ|@!*uFQ zKeAC+w@~1;nd+wp!qt+&2cfec^5VL-z5f2;zF~{Pe0ECz(=$O2w89yG!MZWHfnkH0 zclalWp^5Dm1CE{X`~Ya5eMq?H9)O&k%ScLZbJFlZ5+nyLhQf11`K8=Q?Ir4o!5K2V zl(*@r$O3W}?s_2IzofJT2U>kg+Zt6{LrchKN%-k>8^uwFrQuDK=V7&&eqxm<@@78Q zpQ}59Sa<9$f2TFdw9knAIGUUz+eDl1^*!&${3rGp8Y4dju{YQlX*(Bj2usPLCS=6Z zg1i+@JW4X>>#{2sj~g3I|Btmdfsdpp|G0Z+l1X;53uHGtlkCkxmNt_FSg!1HEVr;A za{qT1MQ-Gfh75~Br(*y)CF-&55yJ(Dcp z`@YF%x~r?6dg`gCo_gwjYFcAOISnvhQBJiwqS}&H5-tIRTwh7l&>&{J39p@D?<_P_ zl0sTZ3KJ@cc1seqNK_)ZYC*%=*|wUt(^U(HDyU;HFAW7R4aF0nH7gB;25HcFC8VL@bc#tsab42DC1Dw9SdCmTXedL1CKY@QZ0;$u-ur)(!`%@?@tT{u5d$A_31f=?%S2! zXje+%#h{~0X$|{R!NVFCT33%Yg}qEn8C!T^Td@| zIzy!MKC4G-4h3g1Z`CQ&bEkQ>4u6+3w4FDj+u_4#Y3t1k$7bL-XA&H{GX}7}tsA_S zA~stU7OPKx7!Eg|r?JbqF0S%qgFJ4fTmb;}*b-*|!)+Y3@m9{}WUaq49IMT}M(S($ z@wE9R8eJHhYHZ=wShfqO)AO9m_(RG#9ixBMB9_PQr5Na2=gfH9d7_1DoOh;JMim0C z)ikU3;fy{6A3G|WaRl}9zZa8^M2?==_J=sJ-o0dWRX;|=F(r=u#PZnvII363>p{7$l)7~=}6{XQNmi9cbUz?^KeR^Wj*C}cBxk>uB6O;CJaemOZhf7=Qe%cUzfyo6Y zS`jwwA-R?o^hE2H>{zga$2ohtL&&RE7woK2&YmsyT(x@T>Jz82zAp@B#YHGuSDiS$ zz1^EF3^v%YZS~aEY+&td*@!gl&mFlz>of4IR8sF9r><^4n&au8Av-G%IbmiiJ1*_4 zdM+Fj{&u9w&rgs^5V=0;A$Qd3%NOOWjTJCV{>xgJRhZwq3WF)=mcHGw{eGthAA1OH z_tBrv2j_wJLh+@=+NXn=ssD=fE}iv{ledn_UPykMGzAlZ?}4o7J19~OqSIkFBg?hB zO^vVj!&sJ(F-z)-7gla*sR5%zAf<8Kb+$O- zbkCD1b4)$M%Z|I!FyrN)9WSxZY-1tSJ?5I+dQY9R6BU=GnKRkHSb2E(gY@6s2*2PC zo}(Z)%ya$MI6qdsyirBkGV};}!Pfd0^d%EMYm^mDzT~(A8*nn8 z&bM3-D7WZnursrreaz}7x6!qseJEx-?cT@w>vp69m@k6gzgAnf*>#h1Yi_4|Yq#RNt{CZP9>Xs^9}w zu2vG*oBuL7>0dl5i7CiPTqXJnKA#b?{`CvdSNX7NZgXpCuVDK^{51kvtZ<^QESG;D z_n0wdOi^-Uis1Sd^*VN^*dS%MjymS%I=PMm8$jcQ-U*e3zF@Yp3_mS=--H0H#0}rg zxvp+I*VPq$3%^sD2%0kXQ^>H&U!bIzx%s85RH{=5N$?@#{p92OODX$w;MHyF`uAkg!@6FhzTtp^>6<5cXZ6jV z*@5D;_EGHGyP@KH4ythK@{{^fqgtC0RTH-!9+@do zA6ngy#-w+2zLsIPs7-rTUlj@@r8U-Se)MO37AxD+?)^p14yMM}^w*nE&4SECgRlxc zfU=7I3Xm3<%*%i2YIF2Lao`r3My@trQSY(I0!E^Q)Y0QL>he2F`Ta8A(KmQVnQ0M4 z($qivGEs|UslGXP`a$_AS{rneU|`7j=l&mB(4s8jGOp&I}0R! zJ2?2Z6u!;DPrwc=XNi?CmB!;<-{Wq~OsO$5R5@ivnwiYBhjc^>o$Zrn=Ae3J9E3}- zGfl8_LT0{{%}h#QdkWv)keNF6OlD@JuroYv%Qh&pI39%|Co?~&@@ zI(|ru+001wr2Ofa1ZUy6iyu=f_NTq5TGzi^^{P6TX1+Ibn&XG4vvPEsbbjw5pmyYO z^-k4{xAocyc?~?lj@bw`JPUWude`yfgImDIJx0(IP{n&02{O-==z;qa^q-R(*lU!! z+2JC0RWN$s9+q1V+{ekS2kzU+NTLVsJLJ}b?wg`1dqH{xmnCz{t|6pbsr2dqbl=(Z zt?%VViH8*-7#`MXe688E1l%PRe9Uy^m6ZSJZ&K~|Ytv9YsfOwuQ;2Pe8vR`(%LM}4(B^);1+!L0hyaxLnM zi(#78m+p#j%8c`kb@kQWpuVu-W7=zKd=FG>G^>SPtw4Pg*-PXJC3;o6n8%9l&3Mde z_Fy`g^QoQF9^NEfy-hms;*6<}W(x9!MxM@1l}qoKLY%&&JDBRrJ<;S&U$#!JVlw*D zL3n*R)%0;)T@Jjax@`5}tzK!k&(RkfiJey`Rw0g9x~w8rJ&(Dx8crV;nurZ5we%;| za0Q<}<36$2?hiti&h~R=E|;6y{Rmx!!}4t)X{sWqj`IV z_u=fHlaC+JdxL_#-B-GIfgu*1r@6#de%QD0t>KkWoey8)v-%i&PtWLcV>#(W{Xx!R zM-FD?M9#nTYDxa1S8IYTr@#{Rj@lYA=Oa?Mya&<#ru`dXmI3n#;Ywl3?3LONn9&VH z&Omwb==wOu3ri$DcS_%lDJ1+MeXC4bE5Y+g@Km=0P6r)k1LTonJC=lnlmYYh!t)uX zr$UOiGTPag$`454UyV9;c1{}!NL>|E9Tik z*rra9LNWwRj%R}uPpJ{lP#up#n(&A}S7-S%KSfh+M6*jri zGFPwGWS(B=gZcJuO&0JD@>CTrXvtI+SJ_nmwa?{R;oH&UTj&ri@`yI_h&C3Yf}0ac zHsnJ{cbbUwuN*CSUgM+cy_9A0YdIGjbunAna>;M>5gv!CLoer(XZ6{VJf~M{@+)4Z z`&xp184!P3GLwrHKOfx(DpV)tlJep1@GKZ&mjko3n9)2;}S~P z%&5)dE)llHE1z0(CmX z5#$))K2{Yg2V>BF6*H4cI=l<9_W5!?g-b<7+$%nNJeF%8T3(e2FRyYC;A29*ysETh zLl0&dsztG{a0Rq#qZiHcveRX>Oyymnyl-HH>1p7Gljs4*U9KZ5gnNp+Dcc_;V6p9A zZ3%XO;k}tM@$nqTtzdSwg3;75?Z&}sw=vr|d7j(qd1{-OXJTf;F#u=W)!;=)9g{cp z8E?yEoIscHJzd79PhEBz+4j_|`hQJLrUcs362Kv9>Lt)f$g0K?K)hTDJW6x^7O10l zu_Xnr`{EPLCTlbOJ}{*Vp_ zwB<_S-pH>T?P-0G4p~6Yf_f5_833>YWy!R{=nG!aKs!v_F))w9l`~sLef|bc=c)38K|NsEjOUE ze6i-pXG2=YG^TZQJuQV~(khZx(dDZnO{=4pF9{uK73=vbl2);n)*}d3^e7K(No~mB z{Ks-mPw`Bz;gMj2#~X}NS!4}H1>r~8FBEZ-0&~IOSueUmPTfc-8SGrYhDU-99%nqs z@}9MvH2PbD)A>ZYINLKS#bPXWPqbV&rchTDZl<_%h*49}+39jWBj}tF{{mTln7LiI zizqCM46WPD3Jf<8D)I6sf}wL1)kk1zBpZSCm`NfW=pw9#I#@83$&p!|vznkvpdGA3 z%>{_fl9K?j;;*!Yst2HQXL%B!=TJo+2zyD|_c#gAt#zOU+&Mn8r?Y1gs4MDFa{$s_ zNAATGJ3T|7yz*|J*lZx?bk3Os;vf&PpaYP(opUDvS>i$F12M02-XstkG$c$(r~ow; zuxtx0HBDzFuN|MXGW0HGLIOZ@r7pYP-M?ZozH z&3~{h(8f<2!TEHaL;mmJn^}zDV%}h|Kl$J1{WmynCE%+9m!<+mWj|V>?&0*S~Ec``$F9!ar8Gr3P9|iwst&I*(L9qSu%MsZv=$hUM zF^^P?9v3g4;NiNgRIr^J!bXp6R655<={yO1@0dcuduVz_In0x7o{kmFQwF1u@Lpg- zxL3hA=SrGO&VjNGmJV@xQIQ=gS-|w6*4J`z8LAh_?pwH(8ewit*Dlb)nt!Uv^=C~c zgWkqNOSB7a7tY42>{`N^I|=sf9DLy?ts@Yi)+Miq+(L|r5>Jr zCN3{qI1gvqGkhBM$aEj`wJi~&4>aS@7oeMy8}v8WZym6CG{WT|+4IEA;r)Drj5CMN z5S@un{A8*bKdy8s2qlxrsZ|;*9`GT10fe7y<`2xo>nl5%4Fs)|r*;rJ+lT*7U#oMf z3s2OIv$fJcfq-#5qWD zI15$^3hh_+4&)bC+VY_d?cBK;vr9dF>cB6^koG+N&$xCY0Tu^z2B(f|YtJzwnf`gJ z-II5t@yS}zylX`1hF?j=u$?MwA?+$~;M;1E>z-cgF7gvy=a9!QSROmtiiP=`Eo8X7 zTMM4^_(_?(jo%PI?2pbLd{gDX!h#J3x8!5N!ojWe+Hr8G!rfl#@L_2(7poI6t+GWf zR&Qxqr7st&i$=#G7ptE!O;>ZMb2F{N4FPKDr&S8BB-;D@&45-)o^Pj;^cSHoH_*W~ z%Cr7Wk9KN>n+eoHSJzU28n6AFH%E_K#%D1lI;XRxBF|soS-k);Wx<6_ix=T)vjG(! z7xM8A*#;6CYvV3CZqxP5;ru?x$i>D#vq>Krlk9jIU?Uwe(2fiopd#{gz82hp8Ms}* zHN+Qx;c$La7f;*bpHo`8?^iz$9Um**kViGy<-Xqry^tnn|j#s zM%WYTunI9)$Wkd?iD>^*ez&0H`%Ag_Uwp*>;E|7>bJPoLuzEB&#*}p5{Cs>3>;HZ8 zTcY9<2p?U>A{*IGKeuiCya^COZ}PzU9GvSvv|2N`zW>177J%%$ zuVMP8i>h(>2{7E`{6S1v9pRt(x` zKbAF9@TvGZ#XB?W6`@Jd=G-strgfRsod#qs{5APa*2CFH%a_il+yGsZtO!O##F+3MvbCev@lA->8nU~xl9UZtPb7_b z{EalDu1{ScQ%Km#q+%0UR%}L}@mL{g+aUga)%dG$$6w{W&R_X+T?G8S(DPSWO!P4R zeo*|)FtJ({9 zNa$%sJ3ScQ7)|SKgIEcRR(Bpo<@@y--(C5tSnB0#`LOc6%$KidN%XMty+Y+{Iw=Gf zjlFc`JVN8`IUUA|KBmeTo6W~37cbyhDn%8%0<*cb5D(WaE{AsXsZaM{ZHTXiGjyBw z&qtqSr7RaOlHboUj!d2Gqj}nhZ=5^07L=1}P2XYD_nX}JVD&2yJT|}=Xx9A8H5q+d z=i*KA%16JT%Oa#w*}0fiML&kPi*q#x#e(NB!mFr;Uhh1$#YF4duX2 z6aCdY8Q!@iIN5eTMrZR`zPN>HuHMpug`bRQ#ET&(&?@2PJk-mubar#e)Y93mmd+c& z$Lw&Wj@0RkLh%1T&X$^O)BMO2#*ghq=R)$dC}2qI?k77TJRgt#dHE4$_b9j;Onk92 zuRwJY4$WJSCKvA@9QOm7c5d!f0WZf_Qh|b0N22c}S9*^5#*`1GeHQB??F_uz=kXK? zASMqB%dWyQpMyRyyDp!*<4f5iBX7nPGn0ah{2pyk^E%AD_F%V5A0}Y;1j;fPE@1G% zv5P(MI6+qf{Bswx7ig|SR;}*4#D$fXbQ`GqTD9=cs7JGHY`vpwkm=l<+46N`7TspF zoposD(4kX$iBeMEZ^L6Fk5_|@qZ=grm5EMQE6Z)rNU{((6 zeV0*Vn*==y#3 zDxk6O7>ZB4`-R{y@y)wnmv`I?yUS9sWomt5YU;kxJk(R>!C^ozlefT07!@Zk$*T&&3M1A*ZdE4OV|4 zDcak|arP6w32))(%Wz5^S+2HdXjJ#HB(0aYuf@|@%?(KlolM_I!NtOY{|vgGNsd+0 zwcL*TJXoGFlk$GfWfpd4f;OVDZdC{{v>ANM+6Kk%XxmNw${atn&1svgg}-iol{uA# zb}h`%mB`%?=W&9e?*ce97c8aX&yM4T{0I}w-H(?$5;$@|>KvTy{m)0$<($8qHZI~K z(+f!j9JyGLbFt!uB_<~$#?-}RwLBO6#}cUQ1e83Y9t9nOOY!th-YU4Vft8Ct`!N)z zu^>wjxATO4y%YtsTo`T_T=sIj`cJW7L~vC$WX|Zgu=iA=WUi(3Bzc7EzFI#sqveOM``5c zn_~P%9~Bv;7-K3(AKdG11gtg+fFG%mkc&kWR#MH!@z9(m9u}C3m0>L9zn}g@awu*R z6oXDk-eDguu4kb#beOzjJtxVKyw{x}Tg$gBrO_=*`lw||A7sf$SZy>kWy#1gs#mWw zXM*urIvgiiQnquk@)vf){M19C=CK6U>Z3xCpqy~|XsRcU%Z{+H3<@o&FTIe8+CZO` zVOk<9kIS$=bsH;H(rG4F9#?&bnh2{_J*l9LfY}RLwnXcN8*;t}WnPn+{?Nl&;ns_- z8IGn*`)`&$g?bQrVbJiu1McdtR-|vTBY` zXYGNhQY5(%6`s5AF*l+D_3qa!Nha=>ZGoA;QgJP}3I7U}&NVP*8$@bae>b3d^=o&Z zoGtMAG9B5^y{)DzZ313nY?YY#0Ey#uRG+`e+8w8NV8UK576~wZfO^TDmswU8JGbN|X+rO=+MT+P1f4j`#+n;T^y%YoBkWp5ulIZ{!|mQK02cE2=DwSb0g zL}{cArBPt(Iq%ZeqfjNn^pkh2ok=8tIQjg&0-NOXT==hFRz8(QmpRF&B~g=4Q78G- zJ1d`Wg(KfK`BZEtpAx0Id>U4h&ljOX@_7v5iFk$kopP)6aUUhCYpBh`Wj0)P*2bXjR^>$$mGk+=#w?2Wd^} z)RfQC9}-`W;^m$yecXR%_C*)6nxmf7PpFYT+zAS$h=$I{HYWZvS zw^Q@lmpDQl;IMfxd~?&Bi?}PP)!Rv}<}amFzf+SLC$kc%y3ATBn9Tm!%j~IyCt?b6 zdYatgpvmb!C8vxqNAQT*zF1`PgeL>j{}M8m;N4f^@;l9F}ugJIWh;;=FR@;Q+Y#~`P%5jjEe8}ojrSI}wd@i0{-DUu>x0JuOx7=c@ z!`DXhIF)hgPl=poiR4G`V0auot1smN`HGkdKEe~%00u) z+r*!-Ie_ztV)HomO{TB(3lBfs4%4A=Jy@#~X7bQY1{~9X<^94Ugdn)wg{0Og<=Z=u zTilh4FUUX*R(nM8g`$|*p_75qWWsIv_7ZA`prjU?r z8fHP=wlNLY-S@51}; zN!pCwF@=O2058&4jq7+_a4rhx+?o78ty`1XMWAQ zL0BxLmu40U@xP|P4;BzK(Koth<6_{7#!pskBvQ;1T}_9aCIsBMfO%Z|^AsQ0K=Huf z|C+zS>NYB-Yg{o|W$0UyAKqtMR^r~RDJwoU+CKeYc1%?v7hey&IbDTVkvBVF&OgHR z12d$#__G4~JH?wP8(ODi5i|HMx{QV2#mGTgOSXh3-ahlv4=HoQs(&siXJa|M8F95M zb{RFE!hGcQM#bkyV4%&WG%K@*fjPMlVaU8_SCbB7Rm>kx!@372z1xSsaxXhkTEcIW zuW;`aE_|n^k=uvwo-8o=2jn-dw|$;Oebas;PL+%Lp(>Zq`jG;lANucAyJ@0C%MvvE zcJ51S`}*nImMgk#mSuNJ;2A&T@@8|h8DI))UAbV>Ah)@jZ^?1eD7Sq&_mT?^ql2)o zwF^p*xtF|0tWLe=VOZT;uX5^;&fw97-2!lW^@64K`T{TAW1!=M^zGhDSjIDY0&XW? z1V;TjMPWZiZbTm8lM1>CmtyFh+`xlQfxwtAxldI1Sn3T5#7BLar~}{1g~~1sywHu$ zV!@gjMMn@tCxR&Akvc*0bOe1#s22R&5wsM7WKExQ}Pl z+>#5$aHtV3PmSw`?kfMLe(1q4QNMOFslVerM}1~W%8c8lL|@P`+hfiKF@O@!tWW6H zC%;!KN7uefuIlZ(IP2EWc7Z1KNmYD_9@eJsg|B9j-(z*+D|l1g2CMtxJ@!?;q{G^g z_P)~`OlFfnarl{~R1&`s5q;a%QNBSOLk5~88P%6tx1|4H>2`2nBslK_HRF6q3w> z;13D%HSTsnp$A)od#FU;H@+#DzBJ=k2$(qcSSeLXL)wu!bSOnPv@tM4tlhZYwc`41 zjJqLdbf2rj;W{^O#)oM|oy0*z?*KIXH(6c7wobKnY&PU*zDa5=>{Nxt51{~)JAu!| zdPdC2pnp1BmOc--M->mC_3Yrn@qu3qAN@YS*5->D7+a}y!n+*4)Y?|GK+t{QWN*YlMDz&to*ShPi zHTiaWLDFB>3o28m7mlI$q!&bAqKD~)6Y-^XMZCuD#*?Nz{wWd?VJ6#pZU0pIjaBVF z;j|=@2NcD%Z5u+1Yugk)$sEgRq_NI*f_yMcG5^5wqWH8`*}AH>s)OGK{3k()0*Q4OT3Vi0y~P(EHOkJ!zah>v1eC_Sv?C6kNq7m=)=pwMetmNL^_p*Ls~Q zl4-r1%_MaR^vBi_`=#xd=J`aO%dh59jAgZX6mcq*M~y>&SSv#(j}no(JQ^n32Y?w3 zlSh%C=z(lLB)3Y;Wb+IlwChc6)~VM}0ugpTfch~2;WQQLRy<<$45M*1FZ8iG0$I7Z z4H|+fy&6m;=Hj0SenSK&`X;r~SxmHZ8rAob!nF2W@>3w%y$QurCGp8)_+U#>uZRWv z!s{fBnvdXH^-K_|1lp4)grKvflst~Z)7$~MMu;0Z&F*Z81!k#qwu}gpl|u}T+01(X zXiyk_*8^U?4lm5(x`nEljTIfs0K@6hP z8^$KM8gyu~!Cs_dG9U;SJ2a2?$i%0Il`PvW7j1L8O59|Tb2nMEbCCrbmQNt}Q`37a zsFWH{on}<>uxwSIkyWakle@;$lc^Ax21)Rfwv30tD)pqj*;lzu3eHy&lXT$roExmZ zk0Kv?67Otp?P1NT`1ZKIY&u8x2=`K9p0?)eMciQ~NU zSSt^aOtC1?bcXg}E7-Jx_ZRQe%Twsx?Lk6BsX;|=qF6GZ_8soeMgp6TT*^{d1AGS5 z3b3b#>*T}JDc1fYvuKOd&Vl_hKDNmzZY8zRry$Y#UgF$%;T$q+HZ^+36k?V&T*UE0 zl7@xnA@9u7pp4FjBHDl-rvjfLDOv&HepDUpWo~x=ItGamO_kWHZkp7nk_w=2LX}LO zfh-zKm5p^K<$wn3vM9{<(yD#9!`cT0yY@llUvD3*Y^{Abm$cMhv0~K&_s@AHDpqSB zE&_u4j>G?=`!Tv*-|hM=5TrLXSWa8eYw5|WNuGX|%9Fy>@IS}f&7S`O7h^|x_~~YU{4A*`J?mDODi`EcRD2e4|Ar;tMV@;f3o0_7kS0H7Gu#?|GZ?o z)!_z6K+gFxOwantdR#I2Gw?$?5GL|0u_eUl3inZq_yc^CzX);co2JU(3f3k0R= z0$#=|!M0Ql@+EoDn0k-!=O*AU;5*)uU`)sRml6(RixHwjmP(5uN5G27U-?XN|HjtQm5cwuH)kSvju$>AW$``QuJB2yGfi0KD3;o`e`dh0mA(Kt?Pdpm*$a@fx^ z{iE>Ln}1*yD;Uy#yP<=LHzebG*4`QJ>PH|m$+d~U?)hI(CKAEaV+w(ZN`$H-x0Azn zA%`?-yMirO{kV|i4T*aSRig4Dj(oz^R2FS%EJm-e#Ns@CfnF{~v5mVJwWzMSvR0(( zi$qGSP)kXRVXvpJdJwe|p`7k@e%*vV+L(|b_LRsS(&MjKI-Y0~yO6G5WuW4+9v?%h zo(mzhG0PAJnk_5s?id=%%T$$fv52;j(@wOS|De@$$&D92AyOu9@%|&$mlKta=^8oA z2w4MyPreR!dn^|Z&Go%xJ+ulW~NC7Rs~D$6EDk>!;V9Is(2MWkCq znpl5*02cW@@40v~I_eEF_Xb%a4wIb|unt{Y#Hl1YDC9@^`o=o*Ra4Q*R~z}NX9+Vv z=F^m$%^Coe5e-2U^^NAC)^NB^#T(4S1t=-Z$0{*#t)5rwymFH421)&A;G*?Z?ew*$ z$dSj461}l4*BSrDb;c)(ilNun@OqJ)tZJROdSCZF1z)t^7)Q6VN^;d;gl#q0?j~5vq*YVu0rP@ySNGm>ktV8*V?AMe4MR^8hBUR$ zO_JK|Mp!mud%CBKZVtcka(S532uYaopHXwnX>k^6sv7UoB1-qx@P2x`$$CN*yQgA| z7e1fT5n)@_jIJrvr82iM6>C7mLhB>BwXJ(=vgX7_~EB(9V;!dTu1648l8~vXCK@zBW zx$b>;Y8#^Ne+DJQSexa4?Ti?#ej6gjW`e0+;bw^v5!G1XN_hJU*DZMH(^?hx6a@Dh z9|Z7veZ@biu5lfs%~o8t2${ZLo3CbRMNf#G&!xPKD|X&=#v zWNBbV*5_T8N#!t^FaSNdGxiSURZ^XRYC)^ zLy{uN*5mqn>ToL?;aqfMn`{j;093!qC9)f!*3-g-(D3^nVnTia7}ZC}4S%fmDLc9@ z`$C{;Q-Oc87H;5=);@t1mJkyKh-R(KO5p)`z!**;)fjV^3X>CXz^7+w6(JO1>HdcG zhxgjo&llUgjbHeCl>{?ubRASt&+ZTlW?U`o(_TXoAtUrcrDJ%#hZ`0PffuC-RuziL zLR|1#FIPO>jm0y10#KTDU3x9$TVEOzz2k-BNYWLK9St7lI@ptq&}2i0S1*URrx9;$ zjm;rCz6sIF8lpuGkzNkb>_$ZD%vxeyiD2|;BIm`b%gPo{<|6x z>-x$h)b!Q&yuK2>i5{k}ZkN8ww7?q?;1xnIPSR=Iv#jt**3*6jnsu(HVTALD9he2yoMnP?DN(npt>e`tHt=tsDm7CaIFE_(v<#s3Oshts15P^Z$+usmwvv+3uiQm z`B{j0E>_scSyb5ZQUZQ=eZU0-Ib+++YyX!kr0!`dVEDFmVzM1onY{v3eUIdu*30FB0Gfd?h zqf`3=jwv*&4N4@#l(UT~V{d>dpv!Z2Q=ScXxQ4u@>%mJufh2)kTnM>mslfdUb9WqvbH>ecA>%M>xK2yOXm|xA zxZsgE&Hdtw;iHZFART;Z{kOh zDNbDj8nL&x*yO)?&3~}ERydakCwp7_;fwY`-9TN{_Dk)97`=)z)gCAR`7!soKSeM^ zG>&TX3@?Q<4fZycD$H`2Y%A=PnQTwrOpSN;2?T&{pxf4<8*Fd?Pw*UKEyt+@L6X{b zyux!x$8}O^vgbjs;lQP(h0)#pPvtgMYmmx8P&3dfr$DB{RPCJGlYsxsBlEZY>i zz{U%gG!%O8@U@^YMN(go_6c4HWPP>Qwdl*hK}}X3tR`nO^M2s_H*k?-kz*JCYW2!Z z%DD4BCwXt4>n{oF}k~(=(e7K zLToKddv6{#xmKo}T&t|>axH(i_vU#o*J5d+hspJePOe{;3~rC7giP`~I*kq*GB;TL zqk@(zh)r+rpd6ca;_O0@7c++FqN@yj~6e1f5^(`HAI$k^_@!mHp! zbT;cG6FLHeZPu|fNn4sHZW`rNic;H);qhR9(Cy7o|6wT$A$2i)TUvtIPHJ<9bNI>> zYWVANX$QmbjUP-4v%*kqn8ozW1_PfkTh9yerx1ma^MDDt3A5-hJP2=xe^|rtZ3Vmz zh7*a>jNyTGV8|wa70KJi6q7?odp#FZE_s8w5So!qdD#6vPF;H)t+HaCjl9zmVtZ%JADT8wx37%$v73GVJD+^8G2q$$~2op{9Rgi>~OLV{VZ6Y_U; z;xE2VC?km;Rww@D>cqGN|IK*nw19Mdli=?mG)}*+5ER0tvA*_AyFF+EV1_YQ;oo{z z@^IAd=^_YTb@)-ESHX^6;j7bY30d33{xjK_2m`6sW1Od`tnx+Kwns)eqSnEPBbWXo21{0fA~1%8BIsEB>VEI zPPo9;Zy%9IxSoRc!=-+h-pN~dAWj0K-_9m!7e$?Oh5LBx6K{ZiyYj#$Y2g~5HHB@y zzVpt}2*1tD>;tG9{I##S{<}6n3%ie1QY^nW8nIIHZp~HY^kXY0LA!Did+X(7Sgf4d zNltxtx&bhjI2scDL;x za~H28SO-6;L`T5QT5KI8EeyUj>tzTBw@bYaCyl|uLKt(zU|_Mcvf4i<4XsfSasi1p z(734~CWDSri{ij(FfQVwJ<=ALWoMdGdQQvHWChuTh^c6$zP^csN?x0M&W zx0u5T_{NNeeQuWzy-Vv=Pt`r*L$}hHWg%aLC2_z+-@w9Ld=%NA*;eL4-L|lklI(0B zpMrA+&Uf_B^tN98saeauoki!CI<7DuIvUJ{@ZCJ7XCVi>C$dkJi7eefcxtVHk05m` z|C#iFEiXsPhZ8{QcO63aOBUJPCj+&cd(ICm)ZNU`YB%sY6eB`m-&!>lnct^GxQ~>i60>x7cEf<>cTsaEi~^)o-PHwTY_Zv1CEL{t{&9UH0#8|L)OypM3Nb zv&E9O5{Jncl3ScBsYzMwe+sy~_OA+UqwZH|P4{;XruI{|go<_Qey$sZ509DdQ+)PC zuVX%;G_)0~G(!)wZ+EC)yes}}H(qF1#gk5d5AT>Qf=Gg#?iq1BkAvZ4GC5tI90ujp zk7xKauTi~R+~diFcJ>(}eK@COF5THjYj`B`sO+)gwxKv; zIkrd!8D7ua=W63aP+@U$BEV+=$e^|eGK5$3v4YB;qtxw|=wmP{0~meG=@C;RizmTs zv3wiA`Dkc_ROKdm7ue0vhScCB#i+CR#b}NS(D-7RqHc{Xw`0aO3B8#|7S08Xu9WSF z};6!3{j<$D*_qFsx@mOmGMxsQ>1fjxku2ux*lf0K`^e|54 zWea)U$aXEB+j#U#s(bAU@?^~7#7Z$a)42_6FA|cRRrjz$Q=KeV+GWB-%}H{$3%7W_ zfF(@I&#jI+Q$(D$6=@~jiczkzPo|i>Pm$}yqC`83W+ps2M7tys2A14=?*?y0Bbqd4IQ8*Sf&)P;p+U;>)Nr@rQZzba!<{AHgwt68^UHQ;KQ4Fo<@j zUQR&om_ov*wFG)TuH1+b8_OMbP(l#XxGuAWf z$LZPDcD^s7sI^6MkDU)m-miRQsQtJYumI*opTq@_Y>(MhuB^xB;@1XWZRl)8#$vk9 z37jsajBv#>UKk+1#^LY^M88W{o>YQ~g= zgnPYX3JKZZs_nqKZDJ|AH7LIf-VK3sdC*IE#hP}mtL3H{JvK%)HQ7cN%lMYyPEdc~XI;Yxsu zG?otd3T8o}V109}moC{|&JI~~UwOq9%U4^YlY&^BHxVaou;k$~;GV9L?*oFG@dni3 z#fm?oXQ?}7x%tIemOGy;%bib#<@NHHXy_^sR$mRVmqm$2s=act;=A(cPRoahbvt_H zIx!Y?d=~qkF+bjA?DXudkhx_aV7qQERELUG#P#u6EgFdWPR)TCZq&84bzBBsqr)>e zH&c5v@is+ANhY|wWGQn?R@7D%{z=6Zqjy*xvZ7y1E)hFN2T**uSZ>TPzVRmMQbiuI zr|I!pfjF;hfjFORfjFN`f#hO&IUe_T9m*t_j=yf@ZHag};fxq3#{&J*Gh!OY ztAISyOJaI`9Ipx|nd&{t(a_>wf@`d^831qOm^bB4PiB@UyAaY(Ef5hWL2MdGRD^}V2`dM*Nj<#qWN!Y3g@*6}~dSIl{1ZweN=`gUgE z^(nlgx6=~H)^7ke5@0yRs z*s$EcT|WM_-dnnN{BCkQZ^>dZP21wSHPhljigeBib}X~MBOjdxj4N<6o$2Nh_pRgJ z-Q$KF!@YF|_ngf__Z4jlQe8AGJH7)m9o7M`b3QDKoddQ)5^XNA+Bz@8GfH3Cbze&e z&=={8uLtnfUq1W@!)i_%)D4}OS(N^5oS}^VO`Vzk(XYTA>lKJiTihEOI!+8SXxZ$K$JM-PmnoXRnUB@&cv16 zzR+(IN-~b2O<^}Thb<@G1}@%r6c$b+g?<+P;f!v}WD-iFmGE>vBUWXLr*4HBNd${- z*DJj{HD`CrdR*Uaz_q3k*BOnt1Pd;`Qe0D%mw-D#w9i#ENBh91h(-5eO->qMl;dh9NM5hVwu zNVN~a>ElVbVd!cf76Rs4NN(i5#xyNNU_QjBsRi2mfy~7Z@C?6wCyR`Sx z{xaN}6K72|Xp= zT<3Z71o7a_>Q;y5orY4iVS;oOqk_D)OW-yUv_@Oe(s>MXSwB7;Vde2TX#9cNkastZnyx0YL% zBgflX<{Eh`9vM?6vQ_H`;wf``oz>5Kp8gDYc=`-4c&b+}ev;=zo+_*`qUYp1Rje9M zZMG*&W?#R0B zNj@rQvw2<`xF%}-x5}^_eow8SJFwE2rv@ktCIOW}R8D?F^uQKuXi6a2)W1z4a{zbU zDJGmJZAr7mA;V&*Y=s|1Q-=DbSJ-WBaXLz4lLoF@bRVtNBbE5~Eph#eBc`5qIMDJk7QuJear^#3b z>6sL#R}QM)3OBT3z=GE1cqOkmu2@DzkI6=PDYfEqqT)TFC zEJl>7)G9Ype2%kN2oY3hN$RX5|-fQkeV-vF5Jm$3#09Mc;dhj474ciN2+?bd@0LSCYjRCq}r6J!F8nf3#I4#wI$c*T8E~U zSlJ=o;B?o4P#bjnB!@32Gaf`|HtYAP`|g|0n|%;^ ze>sufT>NK|_D4PbN=8k}e1&Na!&-pAuD8LGqK&-D!z6CeF~=-kE)iY0)2i?aN*hxH zgryyYJJQO-+>87RB@U0dO62-lt--F+Gy2OkH#Ic^11xD%aCP0*%=#;@ShYMHLKkHy zb^35Ao{Ka2aR4F4unK;FvFOSxdUgnx0cX1|GqCaRO|V5kbO2J64PvJT)u9%&^2F}& zlz4>=OGnGpi%9Z+Bv!rr|M}B(3y~NMZQ;vu3U$l z<5PnvcZ!tJ{{vL8v47#G`8?MZ{SRLhti~9%F(O7wM27W=yxb4JLfW}_9O#j4DJi>K z_{1I)ftYBx~9${lajV|jVF zYEOZU04#ZEnxSOK)qtg&nSxT=(EcZp$BBn?k($ z-hg;5?WU#0hT(n(>ywW_Q1B?m$k#Zi%C`HY*`T*y&U-Pqv<317%rRm>^p|~Jx%0cnU&V1 zL&@(Tb3NI8P}3FWw&$*ovuPicLTme=%C&t^zlZME*ax)(ZSZsOp99RqM}4(t?%?<( zwVDl2bAe$g%95}C8hpu2Q4+i72DlTE%@WS>kQ{9f$C55Vuwbi5!O-VGl&k(mQD-S2 zc26Nllx=cvJ|l`2?jQtWK~BoGz^c~_R+$B0jER0oD()MLpy0Hw;zZk7%R$o+G1(EH z_GCR_E*oX+zumb;C6mb+B6b3H`qX8+>&k#!C@!-2De}f=wL+0w$9qBE6V~yzgkSn) z*YS*bE`CYz>+5(TN9%ZcU!=_18q6+m?D<-`xOF@gdVL+wFxooa@1R2Kcryr3^uXOI zw~EHr?p^^xb{um7J-Oi5Y8!{IqSm@2CwpCv%bHP^%ZnQ6mxvgiq{8gM$VNxyAnXOq z#x)J&jqIP0@mCrsj6H2v7`{b#)DvkpBgW1O__z5UKB$_-+dlF)V%E3Z7iDK~4oGd# zgpomvN~D7(T{h<~gLC)I4+KYC>P!O;R{ug?#>x;#MGP^GTk1CrQO_k?Gr+OFE$-AHD#*RyS)|-YAokLvwL2pGH-7C31%p|0aYI z`O0*Yx4yS1aUfMlHs(=FKx=I`<--AHB`mYK_)Q+RZ&KL7YS%QlT_I51{+GC|b>dwp zL3yy@+5-Ngw-$zXC4l2-z(dfAeEe?$a`EPT*9_x3uO&6F9rCfF=i)70tikFcrMVSf zeZwwGcFHXdq`;%yNFm-`>G$R1H}jrFO2?$5#UWyKRrkQ#8)aO<&7n%_7)``{7&Zre zX9c69e07C4(sCh(3g?KMptuF%wE-@BJ%CFM;POe5FcN$^A2p~WI1pxOZ_hJcCIUWU z0S`jea`|nmM~!|i;p96TWJF(XaR#eP#I_xQP|0vI$ZlS}i9jd*m=;H3zLfpuvIE80 zRdJT(M_Es5N%!XSxliU3US9!5j%Esp>PIeKK{UQk!z|riqKnfLdXuI3UNIx7}=>@I9zO1z{T|&cT!^~j#x2fW_Aw)-I!#sIq8!bU|AM-ld2NkNT z=^~ub)`#wH3A8`_H>SJy2QDA&iR=wupeXE%JrT2DHZe6hTs@%77;R}4g3C$kcjBR!wNo-nt`xy+_xbP*sf3iHeaZOZpz`Ka zryU_W+?CGeWU~#m?T@_i|-9L#Y0{(>m1%5@kZ6_j@+pi!QYYBF>3@J;e5E8SXjyRh0T{s!| zoXjiigvfr*e_6mu3Wzww36B(7Gm|-3Jx1zr7(aGHg!AAp2g0NE#OK}Er>katYf!Ec z%K4zo4p82Wryro4E(FlkcveFIwJ}Qltj0+sxy~_4YoPUr7m#aqq!GXAzLlvY!ujsb zAl;5mhOWID2F-cL{B^=@^ zFb{be$a)7BEl#Nx_;}%XRe%x`c)c^(n}-*d>JYUO%|-bo?-c=zx|DG<9U_m2dyR|9 z7%owvw%Qd{1~Z zS}Qt$@M5XMZt|&~4pIg{G@=~FEhguIfm04V+he({r(vtZGxE^_V)q|DwX``Vdfz7y z42}@JdLRhHU$6^dU{@E5efk7Ddsv&h4;NrmmuErqdzhl=pXGe>vwehvKtx@%cKYp% z%8UXTW1Jd3%yVX|PuBuETdM~HAN?N>WPUQ5r*^ikiWW*!BO~WR65om50atRa#DHP+ zFqz(zQ$_NmhoHo<#I)>rZ4UOH*o0@;*4B4C-Se%$6`uhqY;q@tIq6?z4D_6jx7QXI z;8Z!Z1RNF!LfT8NfWxopoIMMAL8ZX|Zk5Q69}9*IUC65({t~t>&dn*AWi{tHUf7tL zT3scsujY}wA4qDb;@MGdqalUu6|9z>oRK+$?QVp%gV_p5<#roLddcKgsGQs?H+8wS zBus8&FSjB$(Zgi*Ov$Q5@*;dvkwkB{2FOY9vdJWSxCx97Aq()+-2b2!buip~8-8{J z>9nB_tM1u-qtk<_ZQ)vEUGlLs#vjPH1BueIQ%@NG<7$GLnvkacwUuUeRQ3v{vX7c% zIy+3j-4UX*u>yVqCt3>q?VZy)+uTt_j;{1`9eEZSS(rAHlX9IM<&`rzjpG7MXvSM~ zYH{G|PL6Aer1s8slD&DSQ0tUB^TYh*70bi*^;PWDZ0#O98(q+2S^Ya%4ecxw=NZFi zfeQ~MFRN!3$>lq6bru$^7d}fhu~yMewyYO`>6l~A-4Q76Ker@R4;c!bntXt7PBZbleDexN4#F6ZQV4-UL>n;icj0BI)g$e2SFfaEUFKnZ#bvUdIkKoZ1IHbTM6^OYUs<6c@hrh~xfSQo< z?C=EyGWm#5=VE&q^mt)u4aqTJNn z$>oMd&js_7dsz6-#ro(;MhS%yeKeSjw4BcN2-hCfi0z|>P0zAJ5IY~0&3Iv%cqWCH zoFGM=vp`4ToD|_qkI+qco~Il&xBI=wi+z)3=C-&L<%yP|N~70Grg=aP95Pq_s% z_?7w5uL(BfSJ{~Vy(=R_U*KctZavrl5eyYUIK=7sU}$$9)*1;jC)3K|v68^6L) zcqJc~yPOEXnjNFjg>e=E-|@n>jq+-~OQxqe zQkj+a@OY7ANM|>N`#Mz)epJL*eNz?3euhG3q(N-Lw&Y*y{{|R2(x4eM|6jaIps~&8I<> z9YjtiE?VO4)zL$77o(FX&=iwV|5m7nxvNr7p|@@Y8^^-4(657A@|K?7Hrw z4Ae^A6{8&fPS8O`yE>f53+Caz($qe#)T{^dVja1w!OEp|xp$@{)s?7a*J?tynWOFw ze^0#R22#v*vn$oDy43j`w4!aV|i|0g5l{f~vsB;^mHkQ#<%Ds*5s*W{ciuJiLSEoWTMkG>ai4>bF zThnoAF@GvW;rdI)a|7_bv$}_;(zM`KNI<-~%#DqMn|)%n#71|nuY35LjjYF)NxGq{ zXBBf^Qzl)v@$*Kpo@qzV`M8q5x{>f)tU$-J`HkqT?NvINw)f99J?7e8X}NmaYx>99 z-fKuj8d&*D^su(~v-molxDORTe}1Ly0Jzb=+%)=0ClJDIL-J45V*OU`YZ_Q z)Oqh^>cXy1cm2C#!TT5JtbWmm;GCq=kM-nWB~LfSvYY#G0XD_5ps0Bvn`6-tN+9bt z_u`Y7-DN-OO=2Hgtm;Q7_fO|ym4I(yvYpT`D_u8M`zlW5zcn}-4dD8q3Z_j^pA)T) zcD2@Q(mrTq0sq@oP8>QHprNbuxKEEi=z*D6*9Zt9qY-Sr%B+0y6(wIz8{>NfS1i5;xyUJ+kKW!HWiL+($Q?tO*ZeksIs^9IR#U{0pkb4 zSWe_=a$qTNr83{+g`-kNxk*)n?QVp%Oe?@>adnm5Hso2DT%JX0JXC;>C zVR^nsc|L-wa63NDBNW?TwH?{}2WbFvhhTJ(Nyua_XHzpH!a0TL8?@ex!046Q7;$PL z`Z_)~6wEO7PH=dp-i=fGz9rD?fa9rx;i>dIIso3)?|U(u~^1{0({_lr789yLkVQI~Fu#4cj6c zx-WF#;RqErPI$D9j`ED&%fk&<7zwoo<>?iqV|pc++J_Y?OCkIM{e|d@Jd&MS$kQ2h z4^M);7oN}DDt9B9Or8aeY+0(&D4C2H7!>1frV$to8|Cu#Nr>3+WKo<6^Q()3wcNOQ z{NF)Hn;B6zYUjeL8ie(OqEl_>#}v!NU71ju)sPjq8ho^xfnxk#nAdFvuNbuTU7j*l zG7?g|eCoBCd!RsCEMD1f6Tsmh% zZmcezl}$gB^!##oCP_E!qkRB8zOp`q6W+H4`?dxFd&7`5g;H0U{+&=)(|Pdhc)cIE z&G~K3Z(Dvl^4pEy3Vt%iav;A|{In6Ia(LzNA>C9q^d~)R3h`#O;552)=1>hon7Igs z{-Vd08tQXjX)qM&ah@Ju*Mlt{!O#?R$k1XvcGlxqJL={_n3>Vmy128DRxT1 z`)Vwi+YHfd^S&vdNKJm~(Avu<{B&c&#`$?osOr4x9hkOQ`>RjT;g!nne*Z((Z%N23 zIVS0{e)Bc+*5p@=F2%3PB9Kmm>RwVE+25WHLdue7Qqc&{f%b-c7?txIsSGMd5xEqe z+XS4V`&licRz8Me!PG_^6uVgNx>^pR*a)F1iDre%2Su*JtWCLM(+Rz<`{-k?*A&x9sSjMgDUhqkG!SFr8gVVVbpe;<4Vocq zlS>{|XA?lTAA~*b#7i#^Iinde7b`R!g}L-*HUe3bt`KYAv{pV|)3L5SmjbT0=cZq* zJ^wkpQG2eco9JQf`SbX?zSXnfVmqeV$|nf5K3=h4tz}0W))VlHjzJJ-w$5lZ3z^f} z?I6bV8ExaUP`nrq&csa4hkY~J+LQO&yUiNhE_|vgKyA6ptzOarvb5+-Oa-;!0VZm1&v7$okgtCOG%~sV%BfjRq0}z7PY;VHC)$* z9{_A|2783b3>}Z%FcYU>U4@<=n~~988uCwLOy^is2$@sR%vu*~3>f-1q-z<)CJ@PE z4bG>g&Q+E&vn)MhN;&)>0k(tT8ZcxNaCCS~;uZweE+(v@Z!&B%^iMbsLsMbN7+|suQ7bHc)l#-%=uRa7OJeb}@Mglc`oZeU2=v%vKZrHiG_&1FyHEl%1 zpite%1M8rITVpENx|U=1Z^4s~E>pTPji$8R9NL!d!_CcQrq3{7{JUD5f%Vcj@1~Iz zX_^CR4{ikc$|*YU)dJntws0(3ZBU`I#O^t5^qU{fVR@|4uV_~lTYFRF@Tl4wZXtBN z()WlpmFHU>iJ$kD{9Z8;zBQM`*YcH) zP1L2+UwXXbMIfvR%^dGo=C-fPgqVtUpz)Z;Br!6_JhCJ9--FxtS6{}7E^Q51BMWY@ zeH#jG8n0_E$?m*)42M-e>lO-9jou%4hle3t$t$?<&};NeJp5eBBBCu{o%~Uuv7Yh> zY@w8k`S=*y!2)Z@&Y_GWmOctG=gDMtqXB_6(wGD-gA zJmf!d<|cVbq2)xGu)e5q#U(IaIRF2l?#<)mDyshfo9>yOna*UwESV)C3xR}7dL}GE z=!7j0_I)=A3JQp_Hq3yaH+LMxUC_r36=V?v6%Z7C6i^Wb5m(}hB1BL@Me%VLS;pV{ zbI!fDZ}&`;=lgm+fBcfy)U7^s>eQ)Ir%vrvFyNE>Z78hc4mRRiTO=Y`TSOn4{=VpV zTO{Gu+ajZHZP7oIwn%x2Hw?Y}}`nt5#pUqU`u+ezz7$V>N;#WG99K`Sbs_!#d1uC zX8~nSdka1jg%0R)T=f!KTAgb-G28uZW2xFcHt_D(5f?jCL+?u`XDm?oDV&~JIXz8f z$7e=(P%Mif%|64;v%PD&oU0tmX-A@e*=QlC;esH<3 z)sHzu;5}O0srtShICXue@3QRsoRkE0ILXKG3rx4o?oFV3M>}R&yOH*H_iyGvo_bAn;;$(69>qed~7Ai-Kxx7SiYac>Eb!evD`f(f+ zW{0gUgsgf9eXrtEa?^EZ)nA7g+z`Y>Hd| za)@qEIAPK<%$3(!x-}Mtlf;dW+OGWGo&v99*iIL^nHj{rbzYNmy}1Piw&JG^E&W#Y zSxUjlw5zRV?-fcrJ5vnu$Gl&#x%ETsDN5%kD?3+q_H#0}jCd^Vc69~>s`tt1*Sz8` z%!5`hkaM@3CvmJ%Hh#vqC#@83Bi15!x5ghUTL?=2@RQbo(Uv-G;xW)ofJRT5vWaIa zkr{|Z*jitC(kQn&m1LJuoyud=QyH9|inM|;GNaQAvSWogo@@Xt+BRlQc8l4wjXGoa z=AY>JA%i+gT@2MmvA;TPc$b3wwBaAnRqar*%nVJ>hD73IETL?Z(Mo30*k_uYcWh*A zbnvH2o~@FWyhzjz#?Ci#IW)S9p)m!T4% zg4omQq-LSQ32#Qo;Xl1+>yhfKD@$(kyRe!`saX0KQ)#~( zew$edul4gAl_c55zr?tAS7bP#kTPB?)3#~otWc-1povDBS?(tD5{#FMUV}IU32lX8 zTMyI6$uSq+U{;-{bb>i_bbS(Z-k#@2W`%8-p$focM>@_ZW$liSGt?;6#~F(5?@x05 znT<0f-B^x|Gq_Ae;|#8BC{1h!uzqFL_WYtBv3!hU>ZJ)TB(pKd$7$Czrl5P_*RQT1 zAia6@wB)X!sUc_NZV}>=2jbM&zpRcf32@ers~(iVD(_>AZ--J4L>`N_ME3)&N%Hov z;&th9E~cf*-aSg7S5R_E7uq4=)1Y`anKN>w^}A?VnM0gtuH5xHFXj8jb8Y)dg`4o= z-SFByJ}016K898(=Xjo7$Kp$1Z*O+-rGXBX=Kl0s@VWd|wh1=16+%wAanfhd{2X?} z-)VkMjrj?n86==lV_{{`Ml}2^d+(R}j|d7!xnF0`_M+i$voaSyoC{J6C91xL#`o%b za3Q=d`gSJfR~A<;sGh7oMLUR9_BIC9U9~RxsMaORk8mtrXI(@O4;ND42`lVeuXQ6t zReC#xqi{QgBY+Mbm*YM0DTcoBDjfO^LgQr5heV6BJ4Tg;SSSUp1|-Kz@D`a&UrT4>lCsET9btZ*g`!HqiobIJG7CvWbR$uRUf*G^t?}??0 zSMw89s?#6v%Pwgs6?DP55O-@!?_>bX3_5x?)-=AKUZ!#^u;-X(lkt<|k0IAIb!AH^ zT-1Tf7I|K4sWE?9&}m1@wBUJ0Y&v}{BvN22d4m&cuU}WsvcRHTqoT_*I%x9={6Y_-Z+8j4vxJR@lqB zYT15F5<@#5?1yT4;#FH2egaJOCe*m^1?wU*dg$Adrm+45^61Ga%${O@qLNxrxgYf)w$fziggOt(jT-Z(;h=g$z$a4zLpiaqXQ4;n`ILi zj|wYfzs3+rEeVMT$%)RPp6kidcIbpJ@c)6HutV#tU}bfDlWX}CT30rtlIGMn82?Br zdvshZdCuphIlo64N=yYg_e@zSJSW}Yd};cc`Lz&QGWxrQq!Qhj`A9?lT{l($%w=%N z_;o2K%$F#I$-lGGTbroRr(-d^{(ur=F905jItS?J6(+ z>3qB@wc9J5lQX;3iFO6c>Vc}l3bZQT9H@GuK&w<9$jN#!SDzzn&+NFj-D-5|ZMSh? zbA+4`x3*hih~-$@%>i4xK-4eApi#;O|I5ctC2V4UKpJTusGzsnC3-g?q1wlAXm?K+ z&OyRiKE{6C(!?Q#?`^PMw^WD@2js8+E+6CILTTa%;czjK-pWbu30gkJA~!epSoA`~ z_VMYGV_Row;#lD@mw6~^q<#b~{!K`Ad@pbDmyfXxp)_%#u+|qZxDYIL;s=RNks+SS+8rl;-h3FiDY`vVCz+7x;;#>flH@^Y- z*rmk;T&{po1)S^;XNg9Cr98^g(7BmPFfqrwF3TqXL-=yC+lL-3# z3qBOH5Ts@o^W_Q;-0)M_UYBKeNH5r4oZ_AqlWY7&!*gu;!_R?D1$YbOOt}TLqa3wK zG8?~1_-MG&sqBk}3lRQGL2t&Vr1iCePSpH${6@_cBYm>nx$Ltj35g;D-H}@hp+te2 zi|pi_!=&b}-Zu%(;c49|MYlD0=9#)~i(C?=Us3A1t+b`v`Znrz*>qbmUAI+Ub=@|K zrrS4?uJ+PMM6n$FZ;)TIHQoL+7_e@+k4DbyIkF5q}sf^qu&`lD-!(*I$U=g^wE|a5W93Z}e@Zi0C+C zd)2}?FgLpRFU4SVp%m;69|3$E^lp5Lp>O=;WDc6j@Y-^H3kI4GDCIkBUM; z0+MQn{M!>-BpG zNc8%Bcu7e6^gD~(Yi{W%oO$*9Sa-U4^~$2kqUzVkag{v}LA6iA-96--Cg*K9HfJts zDz5kQ4ad>0_(S*re1K1lT3L=S7ob1Bf=~5K;?d(UoJf$`{WR|5SdH?=tGSiiA4t5J zpTqO=XoKqvu}^kKBNATl;AQ|*Em0X*8-G~je+(!iFGw!d@D3@#EFcAlM3O@E9ry`v z@l=?bKfi(8z*-|1eM3zDQ<&ev8Qvx(B+7$%oLeDeI9?gB2}#~F9->cyQivp^8YYUp zbUP>u3h(8Hl{9M(@z~+JkTci3F#Wu$OS(LM8xiaB8~Zy<#qWgzbw>qcvtFhb<9jkJ z^wcidnLb1gb+8FF1PF_hsQYWv*o3u6Cpse23DBSuRJRn#aShuiamqIeJbw8BUuO4aV=4RojvYoLoNUr_m|gdOlp9?DM2Qt0e(ZP#@VB)SzxD059HTBviB5Z;8tb@~;^5I<|t8gbi+@{AU_N=t( z<5Xhlv4?V{CcTlAcg2ctQq%$CnqI7Fk>{~5cB+;K)1r!XO(jcdk>IXH4+zqHCzWcW z{_;8`!Y&l)kP*&wNPMI^q&;O@WaZ&Hq~fmYkWn%n`Ywq}hi)M}R%w{t{0Jyx`JeEa zxJ{JzFGjbkvc5@klJu3!8RWVtkgsHr+@#azppt0b?IPGXCRgY*diQhE|2KNK2lC-L zB*x^5-=ufHalM=8dM5x<>?=YP-}~&|hBfMA}J8?~HV&cj6?k zcipCUis5>v!mjI`Q8K-InB=8*cM=|}G)(V)2{do7?jj)3n!E8%u~!P8MsI!tna%1= zA*hhQ9^+H-oAgG*4D3~h>x~f16nzDcE6hFkq%aDqQYmDp1apPC7azKyPqTeGGyz+? zcn(t%*UOp31?J1NXfv|e;0nRLEj=ycKVamok+7Od)KTkhN(j@oV2znJvsGe9;P}fp zXo(n2wZ!s+9wXN zCVSTr6>VKdjFRcd<0LK}`6}VD3cz&a_dxSH@-+ey9r-%mDLSI?X>{aIkayIE^qGz*hUgaB}QbTQKojh|lhXdagD4Hi(JNd>1bXYk%S$ z1-1iNx(fe)-Ji%5cTjy+&H#0!dZ3(h`G}h-@l%gu`1AKk1RW=I{u(^ zh4H`9_Vn2Rfdi62!aLNYeMeyfvDma32b19Vodh|qBMdepJf9JBgrR1HZ>#mIGSld- z-{Z7?eSP75Kz)p2>CSDAwc18b5=3s~WT^9+QJF$(U~$X;gfPDu;pwJ4ENDjfVp9@~ zJ{sj@a!e+J#I%p5RBjTmONOCHLnPHPFGZDVXQ7>*r+l2~HCJU?`!1|aw(!i;)9Iv# zgpk%FjV1asefD}Jb+6YWD@ChEPbc+gBjK@>kUI5!`K5POrzTaWa&_n@1SECnA-qW) zk|`XpG!;%AqG!W|`3v9U+k6i}<-p2;)gINA<#Jvs=VCcm%lWRHf619gB2~_K1l5z| z@DN*2y7iYp2JXMDY${Tv_l>`{FR(Ib4knmyJG_=O|>l27$t5XFQm z5>xKfA+A{wz=%ac$xS9Qr(GCBh(J5AW}PsPJPtXx<%v_i;L zSw|RbMzC7ell3v5S0D2eOqY8dGonMyaeOvWQpnXYL!H}Xs~DT%rPTQc@#a>s@aaql)H))b8kec`O8m^oET=eB)9N9iW>(aTg9rd6_q zU5(^WZmG2of#vhx9y>8a8m+8){JCWQRr1f~Uk5Xr;C4tRqi%;xjm-|RDbU*UhY62W zNwGtlHFy)%F|_qsg=2>>0GS;s;kWyscC4IWRzWyH zVPn09tg9Df{J0Vrh=pTy&JxVwp5BZ**obSB(IS%C)yZT3bg^kQ%Cj;9na$@?Eh4p0y=}Ux#cT1K3Y$1%k zl33r%LjIxk^#vRrps4 z_jRW~LZyLBW5rR5$xLXn*dj>Ijy%avR7JutRk1S2_mT`@uo*#fr-evacY|zLL(^kP z3^}a1%~)pNJm0KTl$)8G*N7ifwo|D!$t^YpwroOWK~>_MoHL6@9yz>=-@7I9`ERFG z@0Og-lL4mwBAD5Nxu*M)jqASDv#$FlGt>RP#1=e7cr3-j7W|L=(gCvtb5$pnkIm;Z z@ehFPhN^9cZQaO24X!{Toe}NgS|pTz3T6MI&pZDX&8nTxM#c>Crwo#-M$Z!`sYd@& zbQDB$S6lOS`yvDzU+VVjfptUK^3Jv-X(LQu-(j>ql&<?7hOf=r!T`vC=^ zzx>>qNIOZ5iLH#XF|jyF+YHU=&a-->7+!CrkM(+El&s!tL-HCE&ro)x6joO%K=bWp zi!x);;}TvHYSe3m=k$6Y)9W1|v>ClF25KpMpOoUG*ZFo=dTnoA-HNCB9UQcHhSYOT zEOb1Ds11*6aR)vXkAkY70-I35T#I?=Ra&f%Yw?q4sINeA5w3wvizhJ!!~HqP^@1#% zovQGT=-_XOy69o5U``KPA&ed>ab`wNOc@C(TZs?Rj}2uoMcFMwkv0e+Vb^qJwau_e zb_!KCTvwJ0GF4Z$MJoEs>xx)$lF}8EM5ZfZC9f-6nyx5@>xzoFt}8~#bY+C(r7P`( z#}d8i%FaOZx-yf1L|10vO>|`|io|W8!l#*ITM3zeGsng?Mv1N{e$yPAu9-tSexqWa z6AQu0pK~pVc5H!95?4_51Fju{xps8pLp$`D#>N@A!Nz5f)W%Khl`4p)Sru&0ls8VZ z3LJOhpeW)aokBBqDQ1Opm><`t(AJp}NGwtU!CeV<6~vSvzmCXVbo7uKbwHGzqIAG0 zXF4E8@;WfzbU-m&2UK)*9WY9!1G|vAbYM2&u>@>7um{k*4)hR^=s+LdDfU9)IeRgf z*^7N3v>AI*3bcIh_CoQo7Zmf9c91(p`~A9&#|gE^dr*yCiHd3{o~gzhJZ?A!@JTfk zRDHr#Loip3L3|XcKGUd%fg4mKgScuuI6CZg!TVQ&o7_MhhkGh^2CDXILNLzZ=Pk5}-GCkWLC>^we z_)H7|T=w>&ZPeO$bk=XU5Mk9fFEH%M_0Q%JB~i=yicM*2E_X}XorT7i5E$nubDCR` ze&zdDgZxhK!?e4qUxFm6o8+*UKABhAotRY)lWYrKX;OhgP#rO&v*%O}h zcCJi&JMq>Q!muw1`E(YtO;gCvvydfC)Mh`L%$dYXEu=np%4T!oZ57fVhyK})kL3Yn z7sw~7E+@YLjM+#iK2nOrV}Hn&0^6uj4^Bov9No+ieD&!VO&MEK-Yq*i)9od&+R!cA zlBgg{WHv0aGPA^eI>9(yjkKp>Y{N2Q`4El`Bsso(YZ<3d^L*Lyu&-Jc^T<9aZfp!T zv5~L8hA`BO;G;81-8-m;HFtU}l|T+_UNe@@J}FC=XcU!0-Let2vNO6>&uuOP^BWNv zm5E$BDw8PdLgmqNemkLbjz&8RpG>EVm6vQ>wkWGFUXN9u>h;(P&Fb+XNj+Xjcr5*= zPH!duBKb8}ag^8TV^yas0J9-hrIrr5a#eT)jHC*0FJ#?oGDto1d1QrBfAixb&EIH0 z9Q)9NN-zJ%e1DrB3aow@$7-k|s)p{s*K6ob_zD}Bq+`R;OFxn+YP>>W{qfFxs@f-~ zn1&w-N=%l>cLwcHV`FU)!ek=l@G!e(^Ox;@#T_rG78!(5Wh&QZQM4?+G_|IymT%mXG#CYU!<0YD#)OGpwOzEDh5Nk?7`V&27X|vt&&783U^N613~C zeE!?TlIpJJ7f(s&6qL53lp3M99 z0HR%SIR1(=UmIY@TF`o2xx&{rP{hD(X*?tb|QvOu^r76V|t1$S8w+L zH>tP#Dw@WRCy`!g^R5b|Klt3b{pgU`S#PSe9koU)?W^CL`|BbsISbC&0s4=ABI8{1 zbE)VIJBM*VP&g<(he3OETsptf8r+M$*xGbLe9*5{o3F(FUHiYS5?xl=zIp?_hw43Y z9+hJcR_#vA>e+I*3^AyVkN};~6Zy~yRU+E)a{ymH2kJBW8A>odNZ!8qVE-KApF{m~ zn12rEBXhGKU+=&kfzQ^4fy(b4*CP!tQX0JF$?Qu74HD3n7C8^aMkJmt&%t6NUHuV8 zs9^C1SHD$q@L1oVnvSb=^HKA83HUoe^7}T|HN$=W?CY{U+6p#YEkw$m_1Z32r%9uw z&5+tRP^FFRe$UOyVbjv>O+zNQgvWsuY%H~G8H4p5Q*10XurWw?fsLi#gse7}Ho~33 z2T}%=kgjvFfx9@3P5vG$wn7-pGcdA$KK((aj$A<7=hL}N`D8t>p0Xf?NadYwXSJJJ z<~EjyX}~}}x&9rw{@x2!=W6Ugc2^q76o(S)iscC9`-ilAjwt2HG5pRSLdNB~jJBMG1>x!Q(YT88B8EU~w0*%?*lkFjT0H zF_>c9-H4&0c8sAEL+7>9+!w~5NA;6wLQ86HigsZGn%cLGFV6bAKS$B(!xL}vEc(1O zIvX5vsqA5^e^xe=lud4m-ePT;#wz4vx#%UB8oPSS(Cdp$VqPeot@&xxuS>W|p$b#Q zkrb;b&!Ej*%Cag{#m)8mQjPH^>2r+EevG>PMe26=2lgaFDsP;Q6)g^UN$hsOO90oF z<3tE#eVwBP2}gRQ-J>W$g%=`=Cw6qeOO{`ra)sQ8{n!K7)YjPxVFjK5${{5 zv8(qjjF9y$&VpZ!Z}%rWmNB=!#rZ&OFVcCw7wJOnMau4-J07&!HMHW5quLh(PMX$r zc$?2?D|njuwwR>;&3v2m$>&-WziGbhlL(IX>`^{QM+jEz>+yJ-^b&khDFxXDsFbr{ zUh*%+hn>);c~XUqt_GHU@Wa5f7n90fHkDR8fX8D*~q!Oa$RHPD?w@f9JxX&&4 zy`@V`ClteVLZwvK38Q2>@mf-pPMkn^EMb~XydG$N65~VylHz_DUJ_DYY8#~FeJO=o zc_(Lxda}v2H$zE9KJ^R{``H*L@x%uEqZOY%5OW4Es1Gy@-v8oFkkhKCqFL1gsg~6< z$_UHInmbIX{%c0pP&j|F}}VyX8DBXC5`VdXyY)-^nf3{vf|4?% zKF2xefaZ#<(8eDiWHEriYPdI+meIj9qg;nu&uD&n#?XdRv`5gOOdjLvC2m}i_Af{8 zNJX1VU~U@ox~VbiJ3qcYP0V>|%+niUa&{u^Ef{NCrf9l4s?M6__?ht={q#wWq4_C( zPXoU7E?6H`o(t!5@N`%c$NfKK$L^TO4C0|}oa*CDbZ&n&vYpSUT%oMrW53X3~%B~|o z(^PHgr+T8?hD7{)Pt--%mC_%}(JzeeSYJwZyxA$l+=Dbs*emK`-b}wyl&qO)FpG+bF*gH?> z1Uz$nBi9n`LIQomS0uFlcmp5N8&iNCB_3A*bwV85HZ?*8^LGAq_()FC>?pB*Z}=rtdWsHsZ-Hr^o)wGefuaP$DsHyPc(8Pyz}@; zTPRL3%D+yknSK_=H^NCFl6-R85G=xA8sT#d5zNGVleFAU&i`fB0K1*ExI;rtB z(obcmT*QVpH$^)>MN?f?cp^)y>DSq~Q5vXFleug&ihwrX>J z%~6+3=r3QFO$t_Us>@b@SzQ*7Xp?Y05N>-QOOX8}_=PRSq82qo6 zUs{d-BKf6aR>v;~n>u|ZpNR>8eh1mXq^Ezyh^w*7wL=-P4DXiwV9Z$_S?)igD#62B z<$ly?#2PO9VUmt!C*Spd1IZ+2;Ek4|#+~{7t3vos`&Wg-!oV@vis`2(GF6B#Rtf{L zaBS7WQrvj#=5Yrbacu*ih@|poAv0KJ@)s$Wzj&|9-;yx-Uv2W&n$Y!Ao-R zzV7&-V8j&X#l)$QM-0NtDAkB#yXEn>iuB09(($+8nJm4L1joKlz>*1tgq%aDFpSU} zthFBi9-a-|J$CaSXP&^JVu%Ko1bmhBhNS)5`0K0>9sDXdcV4<|b8Xt4)v^uM&pU+N zs=e{?`j4TFN7jGL-T2d#RI<7=@g@pp<3TBObSVkgm}BD2R-(N-%m^021@kH0!T3Lz z{6R8X1fx3%?;{9D#gYhFdigYUc35)hY8wcDs7$tnoEEmuz6?MqsQv_$uC|4XELhFF z?qddiH}IS^%MyBZrr)C%zLwRI@FJYf)&vrzkZ=Mvc!OiDD&LPuD|!&eu5;GG$&t3j zL2&n8l{T(-=E6>UaH|-;hS-|))fGw|-K|}%A%~fne&}85EYyC=&#u;*puMI3-m=|> z5tO>iwTA?vYZCnok6i(6xBS(vqG=oF+-iBnyeWYZ$7%gRivHft?#|(t2VETr(vp!` zOM7Pd8&Tb}D!UrRCg9?bYwR%;4VbecicPEb_EJ>ute#o+RMgQyRa+FMuweYvI8tf` zr=Q!!SmhS8G>WcncM=clMO{mWAFey0;iUDd_2*oO2Xv)zZ~s z((mo*=}D?eSL^s&RM%CBI4v&)N3nN&s$-9}$M@sxFm1DaP;OvuyeJB}jBavR!sK_2g0TC*IDl;>6pmrplJJ1lshp-0GiS zV_BomMuE>?I`)39NLFs)k21C_Ez}zX4`FBK)F=1_2p#MedD5H z+M#+aMlhMtu#?pp;?Si#F+N|?pBpq{qjSp#80m2ivnONmYin#*;H5-2{njRJOEu`1 z%`Mj6MCQidn${`IFN&46OOpNCb9Qt}N~-1`Odjj3qDUrBS` zk%iWJE}jy4iD{H{xrRQWR^J1w1U|Fu4C-&kb=If=WD( zpx^7q*mPbFSI|=me@(0)JcB82I=6}zam>8TZE_plr60fLhd;r%1zNB0+LM5|D~k(} z>c1_2;qNRY7t<7(H}pi__GgA14<~ZM&=GK97kaE${M9GSOmlf4`qj2JJcv)0^Zf-| z7amZDg)C+^#P3YwvoWCDzE;}+>hZD4<@R;q*(&NnBx!Ov9ByA}>?xSy+B<%P*S4dU zdIsh_`t=5ysfM?m->YcWk&54sx9Oe?g-$c?|0OK?X6OA|gNrC*pZ8aM#)M2a(M|Ei z6Y5A%>8Ny7E~@Sc9>YJI#+VZuCu6rmI=);?MecqOe=Oc1QHUI zH>V~sozNNE$bH`&j}xPY6W_~ixCvmgbO(g$*FP^AJ>*EbI5drZllAB&>hWmJE4hC8 z&ky8-4c9MwZU&RwZ0cihtc)Q=tzUgXoNN7xy$XoS{^|Ub{_^7S`fU4DWYKN$UM>qh$T=J4svPo(~WntCaA6NPd-{ zjdi{PMt&f2B>{=%U5%GSwFa>jY0`ftO@&XRd-p+Rv$|IZSU*g3Pw|`9oIXS#3ioY3 zNKOc*RM+6~f&I1kq#g>YjH5yV_^AFmd{i@ie9Hbwnf`C#XtTe8H5c!j{YTObyKIlJ zumv{4&aTT4dVCcQnyIwX^(A8o-BWmyxDA6xZGA~umu8A7FY$W?X;@$S)vxO7OQPmf zRL+)_telm2TF%fWKH)Ii~5Z#CyeO%6|R5N=-r8sshHoeA` z4?0x!BhkM}^trD0FqC}!CJbWZO6Dg;$_?7B!X$5v=S+llB230(_1x7n9#l=!-`eFmSDO&Hb3q?3h6FxR)w;zM~9 zjlt=cV0BkD#WepNwhu)k2BVDA>lF zjc>~4kDsXbMSODS7GVt-x9Ry5%bRZ)S8B1L45lcyVcbxpv_eSoXDU70R9Z4usPgS9 z{S!f^&c&XDH1(IaW1{UOrQasHOuxlSUcXnEek+FSw{)Yf-$u#w`$3YIet(+qSY>7U zy$NXEcKtU2iIRODZ(_T)rVQP7DSTQT`z3^4fQ~8t|3b%vE(N*MzJ=&^zOG|mz$YCO zMyg|ixsH7iA3COJsgB9dolCe4Iwrt0I%eSSpij9G|MWU$bX~{ZlIhrU%{ulur9NQX zraESMa~)G^v7rp6D5hhEA}taEmuKPn@fX)I$y}j=yN*33$P3dk(RPy3F(aMnm{`f{ z*v_V7is3pY)u`*3Q8FESl;ovjcMu+{tW3v#4OHWW8Mdj=`s)2U;we}u_!9l67eSw) z!Z_1DWwx^U*tW#O=l4?rUOJkgbqla<7GUMGTWWSk2OrM{8D<4+jC2$;5$UzH<3EIm z85dy5_TdJYrMHnAfRcIOZJ=1+k7SKpWp1GBX4PFTq*u)9ved(<^&8L2csah#%gj1> z`~w=NYToNIJd>sOYToOQ>JLpQBrGxn?Hv0vTxuki8xz(30W1LYH@?0snSpeTXA?*( zhV5qDGORxXnp>X@Z-CF=418h7GyyhMUKi1;>ltlKuzr_In$|2=>9^cYJbIHs%U1ZyVEz9 zzaLryrS6%NrT@y1xW}lxws%&kdzRt!cH!&p?4Grbr2bAAL}zvQ;Idm`h86yUkfkbd z?u^mon-6c9#hBead(|$Kc&T@bO3=N9*Og+xoRR-4)Misq$)*3HUWu8Q(Mo;Gfmazg z`ZiMw3%9R*htK#2VLYcD?-TdmC1A;fLc%KJi*Th)OO=+6anDS7q5x46*Z33N3wEI% zjlG{}WhNxz%ZXI#YK^bp8;pO6>R9`yWwmH*#2-?4B-fvYJ%qWJV(n1enF;u581Lkn zybA9@b(d;~5hTT|Jp-BSDY*7lf2VYdmK3MyNz;zr&dSk+1t*QP7v`SSuf>A_*$2()4R0N^TN16M z$5(xoh|^DpCcW;{;dbIsoCnfV9`wHffKTk`C^Aj)y&XQizGo@F{~cqcrsBq5il zif$40bGt0*Es`7vVowb#ahCmu&!v8ZbhRrgNzEdu^mbnHgCeEY;N}t-vD~qIv zjjk6!jgh;i(ym!8ag3`z3YmG@l`o_2q(r6jy}doX;V&tq-tHWMI<%+1x3Ai(NaL!3 z-F-C{9?F{Ato=rw{_g&jPf51jbL>3=EA<>DQvi^k1UdR04z*yQdtmtRh6v3X(-dK_ zdvLfbk?S8NK4$1#%75IO6_}uMc0TogM{JiJ@|amRnRV{znXA_c^~g>RiMh=?F~RrFxQH9q~C@4`1QmsW|$J{Et88e>{`@ zkgc1+aucHw>Q~Wb9e6Z3)MHw{CU&&s&c9+*K;6fSI4jl^Yac{w3(+BTOpP(c4bzIEHa{$La zjM|1RwBrgq)nQ{+?iR&RRxwrT(!N*w!A2R=(WH z2deFnn3M#+$uAyksg;D2+Xq3*oc7(nD-<6e@(NwjcUL%lcfHl&H*9ExSbwc!kheSh zY)H#&>&xr4j-q>^<>y4$Zm?Z?PGl&Uw{v<l{zFhaC-L?$mJ4NmBk1Ux& z^gX^lg!r*iVhAAysy0{0m2e7OjtPh##HWF)zUuj@`z}o8+75#MG$MBb0;Hh1hl7`6 z2(TF5Y1NAZ-f8Vi!0NJ&&%$PS4;6!@U6I@v2oa*{qvr^fsFTom*hr|-(O|9AR1cWS zPS}c$tmNnQI8_(u zFFzg@D^5{k6)PhjtDKV+gEP}FX6i5IsMx$s_BlUJ9wqwe;}}(w`Z&f?v2hFr#>O!l z36CGZVN8QKxx-I>t--g0fkm6iXW}7%x-aKk&F!3rGrH|8W+Uu!XW6S_umHjI(;5V$ zOI=@2rc{?qFkjKq7smK~IApeMCb)CCi#Zrqa5_#Z1P1}PwdHhWpY@HlpxA$OzzNsQ ztnJgUNKjZFDIP%I$My-(_c@xC5b;(D4o&G|mo|~2JySozL(=-u^d!6)!T}Pt9Rs?~ z;pZT!2_C4FieVcD$yR2TkM&6~j}q7@n6t>f3npi`9s@0zbNHoVxZT;nU2Q z4w1xW=SzzL6F$kjmf|lr0Dpo{di#Na zB0(;Xe=U4fA$dYB7%SI0aN^(aQ;I3Nm5Zo!0)%A+{T3f$)5p(Ny%UL83#hG7b@1m> zFlEII2ItebH;qUnCZzZm@()-F7$kL)(*&&w3MWZ+Cdsb4$mXOZF{-V&nVi$dscF?m z@eWnxh&^Tc_>V%QtiJQ~z1kGF&t(yb2WHo{3dXyU(rE2w2FNC_t7WIYi{bRW4oFuM z_XA3C>U@Nb7wa#r<9a7Z!b*7S7jN}ith{>LuKhB5SREF&*I}tly$%}{tHb>yUADS9 zA78$mWPUrqbdj6rKRWb zK|n&6mi`Z4K7Z6_^X+6O#oo{W`VQCn_UyCIO=e6R+D+SQO!q3;GW~!~{$YpweoG(7 zxBFz*Q`ua{pH-=6kzNhU--wAxEpL2x)>=1Dy`}`!$Tct<|H(32h@Rr>tu?bER;eV0 z>dvaTT=b?;Ypwr+PY`|M-{DX>gh}OKf!QjDesb*@uD8~|L7AwEis4OdHpy&*No$rR zWN`FRvs}kLTI#MflBQ-^d?(GaA*;R5nq>ugv;0?lYL>;5HOm5cv-~%F%89<7lffh> z-YhGM>aD^H8!TShEK47$--2b$vhu5Z_Qm2S5t%j1U$kafimOnG((CLZL8jK(51@tm zOY5x8`M5|GRqe8sMy_49Q0JzpT~-05?XuQr_Ov=Je6Q20mi0PqbgWJuF(l$nl@*9(%5X9(;A$Ks`*-q z;y1N9KP3@rvvnTl#6k$dyR~Y~4%c2aIX9zI@iV|>$`xMygG#QjL9pWDx$IsSwV`S^ z(+8M*;*#}in37{R)3toi>y;!k!L}D0^J#WMX|jI_nyca2H~H1RN`TLsY{SiOU@sZz zUs@7n*Yi{* zy9Q&x2B+^LH?kaJ+rmOFYpTRNC`GlDt9LW>t?k9+oNjrwADl%jjck!bn-56}i9V^C zJq=!WPD#=_8fBq`%W#~(!IZySm3ksORdx|i;|_)uBGee&l;gSL2m7aN*_mhoYE1E# z<9SIGeVzJHLVeS*X%vxGcpk&f7xa4ii zT=YhNscljFCnh~5wSShPw}0$6QSs#4xV_E3D2Ce?sdU}G7$tkZ@^I2t8z*VTa;%Lz z4yfv0DR>Y;`ZzG!lF+&arZb^$B+qCgqcrW&5YA9-HS_A6CUp&%E?QaBd}UXO`9vv1 za)&8+eQW!m1zwwJ)U>@UN49cEAza9WdAvaJJc7-7jvvg1^W?UZkSjRLXL>wid7Ptt zY2XRr^NPQa_-?iuiD9JUi9)yb6$>4GHhzkT!G^C*G|Zy&;~X~;cT2yx3p?612vIP?S5J@ZIz_l z3c+6RbD-t`xZ+7{ybOWZRC`%fiVSd5MX6S1HZWdHc!K7|tNH)hInqzbr)YP~?Snq0 zNUtEg5N$28TtBDnfl4B30(bTlZ0a8YlAO-83Tx1ngU3s;AOTaUS_~kYFO|Q(9?+8f zsvV%6;!CLdNJos0bg=3owntcg8Rm!X*H*VUSz)n)$t6_1nPgJNSJUswF&o_not>C_ zF!s&1a@x6E8>4+O_4Cz^G~X%fl@oF?O10UfZ#!8vK_N;@BBetgM4zC7otvJ1vR>uE zNu{Cucyf6gsDxWUH{U)j0hqK;+v2ryE(RlrF{GTiPYqzxd6Q&6O{eWxs6LM%?1C+$ zG`5~P9uJFX(!>wa@xH=3s zJW$Q^BDKN03P|%Ttjd942~b<8pejD}QXdQ&wsk8}(a(4%9JE4_7%W(0og~v|(GoJ& zTHjO%l@qnrmYDGo?gahzJo*~0emYI+yN0}psJtu|T-IeoR!#%|U| zi?6)S(HErNDu(Nv#9!ArqhxLLStKc)lZawD_+KQyq-8oc28Op~BZzf>>0G!q8^X)Q zki+6^Yc9rnfLjQc=<$$#RUK|Lq;qbeDNh_o@_*b$MyLl`ltLu*+EQZI28bQxp@UMe zy$Nc74hcF}xOVp9bx>xKvl}x%IptbEjd3=HIc z3=Y7K=J?#i#XKM4j!PWsQoq0lMPZ9DQKakVb9v%Rg-ZgDq^ASIx2>{T!EI-@r@?D2xP_F-$5N8(a9+Dxmasb8Qsa*GaxKI` z++1a$cCxg6Hw)$U9QgqgHUNxVmu=Q?)~7{e3&5(i4Al|pJjSJTPlAI?-;FtWF*z8&26va2(>NxYwnVzuNV;`Nu$5*SNpvBJ zE|Uvd7p-3r4EqsP*+Q__H&wI^(z=Bv^4myVZ|EPucs4Vvg=C;KZNwhs)CmaF&DO% zOT~BBqaEE)?H0WW*fm>D0nQRDpT00^|-XN-> zj!PLcYx7VYi~`CYu24t7dP@1g>7(e}lto!*QMy~ZOCitIJ1l%y9fE+ZlW$Yy)9g}T ze|RMod}#ouo$U?0s$E#sE35uzMD4i}$B{U$tyZycKUA89C7}fB025-;K+z>z!~-PFdvia@GOtgrv_9fiU8-sH6} zyor_{OWhTWa}#{_n+ibMNz2WxR2EsTwc&co*x4}9eiUeLYfo#q1`6ScjI#Z-9d}lq zp(rY;a9_e~N1tXH3~YUypt8s_P>9Y1_hmM`ofVAlCsK~#TilX6 zME{cV?f25QV(w2%xCV_vbS`c?Pi+b1Zr#ODiIjK}yu-gJq1A^*pH zDu4&#PpiRupBgF`VbU2?V6JdB&?>c<4gtKM3U0BZPZ8NG_-*(c=DvzNINB zvY^j-+bFt8jL&6whA|Kp)l1XfG>#@}-sVO)=l&Pf1KKpA(Z=J-U%L&g@N%4i+C8|` zrq=*A16PV9heXWWYoZ@XE+hG^Ps_b5@>|tP>QoHCC0>doLQgN8?PWX;#0P4eU$zvu zDnukc0N3F*R*$SqJA?nO^ZhzucPZuS9SFqXBXnEq(Y)+Tm=$Kkrv#`J zW|rt(Wr-J}OMrzpK{mb=U#UNSCm*N_rFI}SbXKK0_Cc7IMJmPr1-QGVqsB82<@jAf z?dBxGhf9u#zlk-ink(l@qtP zkyuK+VhgPlnBkalS-Osyni<|4c>OHd-J(ajjvow*bjonOV?b{Oe}ncMrohDPAC6z$ zdVy3M62um2g7U-givT1hvfPqQ_6u^-{G3z}n9kL^K9+Q(t zqE;AvmOLY8j~n)3@@Pe$sh&-+>`uZiw|rlLJHq+u5A*dxW$0!<#7REiZNW9j?1#C_yeo~~Rp!cHukK`KV)fdr(qBy=98)>MV6N9}uNL9iX3)d4_*7bRrjBXjq;`wE z*PBRW1_pWxp6_^~Ybt@M*gEcmN|$Y?{rKLO<(l$y)2f$(@>A!GdAix*M!d zXccQOCI*|>jDq^CEkTKTdMxRU-Jp6(pYcXmp+v6b)1W%n0dUnxTAD)iQ9y<0dUNGZ z)rbwzIr~F{djo;g`L3WXZ(2)jCdl{`gwi|xSX!sjeiE>cH^ZEO_b1S+E#cI;kQ?5I z?oyiJ*ZIm~2pHY2h9$Az2Dk%2(%neN^@WF7Z_Vs)AvlXNNY+~=jb<|8Uoh4wMML-) zSj=v&V#330^}Mu=P}Vq)nh{aS4Y!T9{U$iK(mFcC$D3bouVzse$y$>|nNkJ@trtX| zvNAQyIIEr(H$3TDZupw*6H^O2eeNplD&&#tLYkVpkHbC{@lPr-h8R=ZAiL^7ZGNsCPh3IC{PnO_slG2<&x{RR&ZwouIG=W}9y%sfk+%UUq!3cB77U z%q-Tpb~#x-S@zmubQ39z@6PJm^4ZCcJ@}#h$OFsHafneJUj?{Mf7v&S(OWI2Elc|= z+l=2zB6e6wsZEwXt2{1ZiE7D&LPDQr721|V%@1c_D>|Z z?6Q0=ZvkBEBK7EHB%RA|ZYRR0p_#1odpTig_6xRGXsei!ukWg_&(D7e z9v}AIf?ss+GT&3r1i`jGPhSWIf_XcobM}Q`KK1YKw8@;>B@I*_`Zj0ZR_V0WT&C@x zg%75=g@A|C(RiY-qWraUHJkh2{M3ZK!tGoo`-ub#&r|5<@KKBOsr>{Sg-yKBs2JoS zAT{i^w*AD^iO+$#7{z?Uj)1( zwCvTXV4N?l4;X*h`hc?I_1*8PUW-0@S@`;Zl%c*pV5!*pz#Xuru8hhemSbxIUje#o zJ?z{8gxub#Pk6XG+WF<5FBtd<70;LOrs?lNUR>XVprtF*HLc&YR2JAWq5^`#=m=Ik z{-UT1!~)quoIJM9rht^D_7JVJJSo`oq%`Y!61-q}x;M$wT|irfx`Z(%5y39hXcfB%DnpWDaQ;h9|WL*+#E! zP%(NrwbE*T(XDGoWsm3^Mih&i!L}R!N+a=&B7UXjS|=0|p3CUnEUpf~{S+(EsfM}j zr1q0~TR6h0y-pV#Cnap$gY;G6CN=+Fya-NX+__mCV>(kL8%09|Ve=AL27{A3(9YH5U&yv3oy33A^7E7U?$f zD})Aq1#o`9;Sq!{eqUnzD%klIy*j^^kn#I)!tb{TkL4J@zYxDU3;JyW62`uZH<4pq zrxiY}PAdSNK1w?M9TDLa4j0Pco&HtA`vX8?ImY{w zO}uXuzD19}k9P|13ZIsD1;Bevynjzb24aDXcX^C=1>|{WVh9_fVCP*))_E7)dH;RF z`wxJ`a*X#sH}U>M;XCg?#yf>~g-^@70^t3<;{8V=!Wkt##=AVmy8`mOpJco%*m+ly zb>0Pc-v65L{veQ8j`99X6YoC}zVrSN-YL8*d|KWW0PkNA?>`lhfmk5pT^{3I0eRkE zX1pudc~_Ek-UWBwpG$cE8IV|x@m^r(CVMI`V6Qt**E}rj=n>p-A;;YF6=9QtJX4S2 z^)=$UJy9@us@oF*yng=N(5*g8$6s#zD%klIwK~6+jMdMQ9S1K&j}acrF@8J6@A9$P zd?tPYQ1;|K@Gg6@e5^;{UkNPxQ49_tJ^d?2Kclr8-rK)sq=$DdMt{K^4-fly{Bfe0 zkyrf5QXizo&Q!l~LLnhXZdmW?Uv_wLxT|=3hM5g z@hT=2%C+ATH2O0N);q=zH6{L=G;u|mEX}JYu8=J8oMHMs@T5HcfY;08kL2|;oWUwY z3U1P|Jb4vX<$@d3~$eoFp#id+`h<*T28<0ZDxgKkQnV*Sh?^ox~s;&qMFG~B>#Xu)&PO-cx9rggXs{Ht)8=CC_?!|9+ zd%qP=^_Oy(JPNAaAky#No)3LF5m3=T!`Bb0w6kry`YA9?CG?AZ_k@PqV+tIlLqIy^ zifmWB3E+xT#wU9E#(yWA!W9}@e7^+EG?q$QD7;>+sMe$AiZ@9^L6$&&Jd?1>zI5=# zg(0yH?LSOQjs9Rt|D~dz<|tC!&H^h#Mx|iCc~>3iBqzW|ZWNQx!ITfWPLqHLurb?lZ=vBVp}MM$fBk>Qkg2q5{Lp2Fi|#Hq795LT|vVgkS^5v<1T(x z7Bpm86TqZjzBrOX_mV zM6ETNk#G7QrEQgqsbiH_qC@&i$12*dBnf({YCK}4>*JAnpk$#y6O;$i-&A2HZR9(U z>#3Q3d)-wvtJhsi#p>=-SX15oC*kqaIQXBHUmA`7dHGe)`2QupbQ%8)n205L{6+bt z8u(k~mt66;$uCiw4OmV}81)_bOw0zzaNjn->iY~ur!O;;+7o971eTpv%w0dhtleB9 z+07Hn?kYs{_z|7V;DAlVczuT+TXFHTVc6V-xV2L>p#c6OekAx?;Z5-u8zvi{h_wx_ z2hJRe*=4=%+Ka$N7P*DI_SKDat`KQs^{XC zut;G%sg>j!)lv50pUVZRIZl~xn(SvvZ-%v`*De`KaOM^^h{2E7y4=o zFc!gSN~e+12DXiri*+$X`W=23XQr+a_qf^FnAt%wJdmmPD?d-_}av35}|^vyx~$@1@{r_Ea7TzYlM2Pi1S+PQ`tt)icGX z9Z^N5K2K>!27xhKVynfxjlHbeu9k#tfjk-^XKNau>btOC)xXI(z0H~!?f{fQ7Ht`y zVZMcE8E*I(S`oiUzY81mG0Eq=>;^M1Tj*Fs%e?E?o*D0AROBv(p+IY2D{q#MeIEcv zsAoIy^)4B`g?2S|TfvD~*x4eBg+jC(H#|^nS_O59S;Vn6P25_WCO{1(U>6`h#nv|t zacI+oMw@oOY&I>S=dsUF3z0=lTL6`TS^xoIRe%lRGLefU zXI>0?c520_7bN-?O=v&wP4oc^jZ)!R|%?x61=e|N{i zzHCq7svh-5y|mn2A9GW(q+_2*nz=sS%Ryo(UX4@TPSq+Eq02+?G#&Z7JL=Mj*8l)r zAG>`g-dBJPa$PB`EO(mI05WkEbZ|lY8xYq6>JqVmRB>}PZ$JGmY|v+#nrGl?YTo`v zMXuMp7TdCS6!KGrWB;QO3=e1i>r9tMdi9L$*4tW~C_i3>2Gc6^CN^BAR-#%E!;z;X zNuuz&|LVm6RlA2dtm0-wSqd-495yHA7h*LeHIydBy%hDNK41khMF`3`=BHT*Y8uwB zJ2O6jba|vTbJw$-mmii>ySS+-n{(5&uR;ORY|0#10b6-a&QXKrNhbbC`jD${C@^~p zSABtt=gC>3=%!ao|D9f~Gu>;@s{=)tXI%NXUL7RB2Dwdol>^oFiaV90S6_3zvbZ_D zI@pMB&}SOGGVnBdb%7eO$wf zRDJ5%oS&q<>7X=WDV3G36=tebN-wWe-uuvPU8}x^HhK5{a5Yg)=LIKeGWD15+pCrH z)=k}aYvr=;dq`N?{~JRDugdxr-hbbY@OuBa1b588939A3V zu}KqQsu+$IMRV83$I0IxAFmJ3$MW$Oa;*dG6Dd@U;yMBQW!7qnJgug<2r4^n23vQg z)UnrEZnM_2o&mL<%A37=N$V+pcWc^u(sNlg(_2p^8owB)dT$~H6P#yQ@RWl5-L3WP z$1eeZ(DZRpyi|YaESxI=72dBxh@nOm4vz!YlarD^s2C93Dk$4=ri@iKsnyQ3dd;%ptTdEOCL z-&hzgGhox+08XlDLjhB<(WCV0H~x*fQNQn8!8@`1uZd(`GNXxP#_{szZOQ4Rlh~3o zm88%6ZA~6STjy4|jl(p48(24(J>U-Y$RKiMtI*C)8nRR9AOAyzq9D-9RS=eSr*H^Zjro$c`` zpF$*eR)@V2q4~vQ`THh+)j#8~;gwLocSd*a_{{It30O0~8()IxOunOYe#?CKBfxB$ z+(s~VJB?Bcs@FA+Il8*-LI#r`$*Zn>_SAe#w8b6MdHHDgB=W1R3|@_kl$o?URz1XLI@#| zv4(=H-eLFENDmY$*?Z%Ax*${M*8V~n=`Y{@infzf`)kFQwZ9TbTIaOBa#p5KUgxB) z^*U#iZ2s(3B(L`OY{Fydi`A_f(7fJ{5s>Kp1$Yy^-->ix?-f4H{KNT>+3fs7A?PB1 zXB(f2-?Tr3NgOHo?^U#OVj-B)z8a6K^hNko=nArXc2Q};T%})wk3!SO)s%bi5;fgE z0ZUD1bzJakrk;l96*{h$Cw?sv*rSZA-snE2vb2>ti!E9JSMSsKCb_`z`HD7Rys&d* zRmzu&THy(2rU=KWNeCqxg^FWWgi%3E5%TvoaDi{2zq}qO$4*gtV0q5;K#b(|;G9gp zt_Lc8fOV}`fJMy;+f4lLwn!o+{JD5K;9I`o@Bs`J7Q}}xoe`oVoIk$3dbq}Oc z<<9k>O2GwHE*}r7y2Z14xSZF?xkApjv}s~X%PZFZQ|@Fq$NAcA@9`V(0hr+9Pm?kvZ3Mhgfd2SReC#!I#kW|I zKz`%*n}rj}byfX(YK*i2QQ+}6>o%X;0o$6{N{unNcFC?MTfmHp+u0H9>_GZv;CO0& zllTAZnzVR>QW}Vr5$n%bc^W6axFDVi<9lL)r*LUYcsVMAjZ~^UMn)Z}XF|+*vyf)u zO}R{P-RL2d8ksni3GR9Ii`sdm$7p^M3duRP%0RB95_ z*q2i=HOQXJs*=`>PWQ?h6#zl+M5(&OT*ToWifh8-iSI_@e%l_i>523%m_~XFXHFYQ zT_)GZ#w+@glsc!4G&_s*K*N=NNu*iLk+{^gyz!}wJ-fp16U+wXN?~DFb0k%(jm%ai z)#csO7LX0#?XyKY)F+qMRsJ~wM~ylqpHRBzkNwprVz2VvE= zy^io$#vA|Z<(J*Ic5XuL-14!D`Aob8;IbPTLr_*tuYN{XGlCeu2FHB1l9O*9-$vA= zd3=Ycz@zRw`WB{fj`1o4+D9h*{!iM+%4wC;?3ttLR%#M$z5guvJ|O2aa&(rl`ivY+ z9ah)Kk%6dQBIkBFKaw*;jU#PKP~{q=pn8@Z#?wLd>p0dLDlclyF5&B~;eX*PY&65NG?Wf2!qWC)>dSEkM1{?3|QQpSe&8eINN9D)QQe*Mi5cn z`h%6xuQ!?+BRH=aznS2c%?LSy4^BgHelvbE!3E6-IfB2Nh9FH&lOUTZ(rz?i6jF}#YbJqh& zt*!@_Bhv%j6)HWrhVb}m9Q@bH{}K762UkiDf_;uTcpn-RgvL21{$9QF@*S41*kQ$v zD+Or{&cfYzS25U{0nhGVX74^TVp|_`{^;rFyi&^$!EY{Z4c_=<5Nv(iF~M2qlmd>9 z23sF++(G;D-N5g27lOafS+$de%)dg=I^)GZzqZn`fFIAySfR}uN}a1Vf=l>=$KWc6 zuw^;mEJi@-1n1CT@^+2k(bNaXAlS%PP3kB3JDWeXwrambOFZ0xhtWwu%V??-1b05= zp>T}sU_azOJ&$qI*V51r?=~X| zeeA0#z0Z(Q#~b9ho%?<}Gxc2qJ%>HXWRLq6?dU!P#)GuZ!F^{qUMbk+lPOpI=Qyk< zIQyr(M|7sR+V|>|-s2g)zn+{@-t)*b^k?(ZG-j`WUQH6ZB=K=zbLouWxr+s>AR)=Q zKe#*#y<=0#%VB~cp;GXLB=lp!d-ryUmxIr9X@uwK{fRV6!G*19j{fvNDV4s}X^w7T zBFAGK%54ztYoWBg-<>2Nwrs;nCl9bBq8&cR#H>DiBn{=fSUBSyQ^wOUj zT*VBuYe~m9(p;`fWc9P)hcjG43un}2b>7Z1jK6a5*WWv*+~O|bP-xO9L%;W4>skA`&d2{V^#8qH|G)3+)pvc~d#$zCUVH7e z*WS+j?s{O7GjX zx_p|pK490|BQ|1JjTXOPeN+_9#pstw#6B%X(Xry)V$^lM`gx6woNc$O?5tfnzc2l% zy=87ys@dbp*TKs}Q7UMu`G^6T>7K>JFD~8W#eI~TFB2^;mFp?1%%u@n3li-Y5JQH_ zO`lGX8FcBPrRudWYHPnUhpE@@!MZoS&B(E)f3o?d+8~uU1$}01MX4u#p+>x0r-V}L zS8Hom#E?W-S$xzed{bUmo2z*1BTA*;6wM{6|7?c_VWjx;XI-%yfpYPCM4CZ1t z*w~nZ*qx7SnJ8u9!)WQFx{b~V)^usu9i_>LQ)5eR8jdg6B*Nlr)T&#(2y^LaZ$EI-cRkSE%>BjM`v0JqZGefi!2~i0P9q! zlGiJC2A&k`1a>AFTNFMJ-&eC4^K`n7{6qzzz6q=zDLE%M9rdzQZc0Vo5bNhIQO(DZ zxkU4>zqOAT{8z59@!E&*y;!glqZI1c3Z-tjq!NE1&O}R|S<+gT_D$2?URxr49Lf<_ zn_-_wjI=SdbG~Zs3;U#XK5UkLe;FVWx#`1KRr8szM8c(t@RiBqF0I50kc?iWpZ3wn zuBd}HU;S#=U`cO(i_(wJYQO0#l{!{kEocvqi!FDc53w)c?W5o7l~0SvQF)r;dvuBEkllwIZC(d?ErFwsI@2seOJcqycCVdpeE-uvQXLP)`;Du{h6-d0TKVk0?OHX6`BD?)g%ZCgi zvW4u-Gyx`jzaol7cKCBjeS%$5S__X5S(m=T3N@pQ(h<9Bth0XEfJ#QR96?SKYNO?Q zVvgE3Z<5;g3dSK;Rd1zK7wi?%Z;5^?k%hG?`rf`#Tk|2F1?w_Ld;7~$Cv0S|x=tku z+9)XteWs7+g98xH=3kWBy`)<1F0a&tlbYr4K{gYso<>{=HO%h&gE0GIOD~%f@3q(r z%jbGN%}3oZZ>F|&X?8t_hQq@yg-#JuQEGXu^ybn+NSIdCFB{dWilv3hN7F`1g`AHT z;=MPil{3L7_HFm-h$!Xu)?hv=g}u@6<)aTas|6LX0wlLzw@GC`M~yC88a}6E+w_r8 zE^YB7^3kjnq9q><_NXYWuznu!uG;)&ex-`qxEf@0?Cd_;$4SJ2^!tj9s}C?X@os(i zMdD>H#voMO`sFnIBz(`WSACDUg2Cgfb-W*9XBUrmwj(e5mdftIe2A6^W?v|>FnhzM!@=^gF&dPJw^ zA+Msq4rZhC0{(80NbIsRIN$a*)7n=T`VRkU;vkHj$wb75p;C3tN-%3-qvs8mn&9@> z#70FbG*~rvZLL(us|8%z?VV0s8jgz0oUNjiF-})X6#J~$JSbJD+|>RX-2+DdLG(V> zYm`QNaf*zIXTXwaV#r8FwlKZBP$bIIK#$5zT@WR*lN>p%zUnevBwX5vlb5l+3N6I0 zk=n?tvTN#!W|uPV7OFaBBNzXH^$?{F7?J6%I;}fLjOC*Nh-c%W>U0;h7`|FeZGgU7 z^a|$9P*IwVOl@Rc!u^3)Uv2+b$8oF88%17GZ(Q=u#8DbQTz$2noO-vQ-G9$5R*8?% zDxQ38gHl1yr%}4zvmi=!5eKq|rfyQdNDRXaO2ocBOSP25ijvlRy_LH0 zEunH#53G2Z^Xb#HwbN3iGVSVFXR#+RXQJ;@)QP56&ds+FqU8}gGiR_OgzuY9D$x%0 zyLcr)YD@oGBq-gUHf;JZ4?Q+9_)Z?3I>+u2|CmG<^>H>GA- zs_l4{c($Wb?Yz1(N-I6hW$8son6bHZhl%z_%-R}*`IS7>Ylmtsiij}QyL1tsewy`m zv-8{<2RXn92-5M-z7|U$<&%^UL^f zP9)mrk(hMp?)mDqjq5c|D?cSvZradK^yQ{jIM2w~HXyS~jwoqs*0HD$WR#J;nr(Z+ zLxTMtSL^}gM6vz^qDiR85VbUHSIX7M@?zpdip{hU*2b>iTWmxOZlQeN4YAZD^;$_AyDhPA$tdUCu6@*n?*%)JtRnqBXZu)U zeXyye^3ApN?l`YryN>Su3~yIr^<78n;b%idshb_|;F7BOiMFa`9rCmEyABZ{)a%~N zL}}+-ZJlKOJOjOnec#MbeMN6ms={(@eFeRVzPvUzhTH0}pdH&VWCqdKf0Jq%jr!Ec z;ugom2G$ntWNh_Nz}_F+VkOSmaXe)`lw4gca1mE>2QU-sNT{Db(ecI*&tk#fcdA4g zcula=*3w0_wDl&OIc030G*PM$_HKjaqczAcX3x8YDlXQQybCs)*4(rmc}Vg>Xt<7i z!e-Ud3bQKx_OSgHv-aKgwzf96BYy@lDH5-GeEH}MELe4q*|7_ZSN|Q1Nguci!fY9z zy7Wmm$GbECZm#l`^!BpcRNxiOT(94&_QfhGwYZp4M{V5qL3Ja3iF#SyrPM`w`;pg1 zaWU{}$N4vOY#*aO5DUKAuh^$pje;#hRVvia*3wSa z2On7v)$gvBUW<7Xi3+xl?p|y}={Z|T?}W_~e|;_1(MCx>>}Aq=t@Unc>!CmFtS-jA zlotoqL+{j6o3lJWyA+?JdAtQ?+SupP=crW0R}b42f3UyGp8rk9QONfD(E`QhZcx70 zy(}7~il}|0{%dUKsDfSl$(RorQPTmcCBOAh9Xm4@k=Mk3rR~fVJg?a8wtAi5`2}@5 z_~eG=+CzHhaX-!}1}jUi;4WA4#y)SAxl|rIteigcV?~Kozrq63?;%>_IAs1ssgK>? z$|A1BsuIaM@_Ve!X`tjbbbdGGYh~wm>vuZx-@QzO{nAqVkvqkL)$LUCplL$6R63+{ zl>DJ;Iro9|;nFGWh%$qH>^Za;GPUR%gi(sk`yv`8Rc*h0Cu#=L)fY81j{94(*gaTv|I<#_LkV&gHw396$~QADiSOF>%CRqj&eHQHvJS^Ye&@B z+V_H;4;MZV|0Q{A2CtA;Q_Wj#rg`CZhyL1QR!_!B9p$|XluT9OxdtS}8}lr7 zTWQ4}9;&iCy<0?=l5u)BBdSPMztz^Lovm#T=qvm z_(dY|Jnk7}yw7-iI4{gmzYIZzCvjB@>sPYq1oS3UON_`+QF;)!=c45i%%Es~xr0)3 z@$6HutL$!H(%KhC78Ti}7nEA+#Y>d(ApS(Qzs)86vGxV)VB@cwUHf6|U=lB1&(Lw) zx>>PWXqDa$E!NhnAJBe3xB9N%rdWx2Lgk|`z14$rsI~9Bm1tmN=mz*%EU17;6l%g> zs;`l?^j?bd>Zx7?tEBZQMEtqkbe=R!7|2J=KnE%U5Z$R@k z_Y;+|NFUrC2@=6u9)@RvMN;uTh(YEd&J9mCeqtj`L-2vvqgXYo#tD)P9-{9`IrJJL zG#h(oZbp)^J{8H!$b}p{`B~2q_)B>Ta$k?839=1(3Ntd%W^W^?srFzj~=80gZHGLg%deI8z8DRT*h*mOE)JpZGwJdehW1`0i^riKT zoI|B5div5@MHv@qW#QsWR7}cBz*~lD8*`? zLEkga)7IuCbb*m#USDq!4p_#8^o5mL0l>_Ab!1tw@J&i_OoT7$sur%Je9SX>tMD`q ztfy-jscgNm9={}P^lbC`iUl@MS;vfG&?=G22yCaS%yR&1$Mls=?@>)gUd8&7-gnb2 zjJ(@gkjDcbPy@CnpY7`}dX$kS_o{_|QC}cLhp{`0=1Vk)^%VU^cp3-7&QmPaHe02_ zPMmqJ_mJikc7_8XT3ku=T%@QomXS`V^hI-SXA1$`8fb%l<~&855CXHnGEGA=Iml*?(2da3|!|NX5_7(Me~ znzzwS&Ur@mWT>9H&P7IEEg{Grs_R^0WN9JgspkYxkL9HWoyDGQbeogJNYUMDVGAeB z$U7d-9%|`C7^#E0Ts+p&Ndbbtf$*Rrt(-i}Ga08A!?TUDocxU3G)Mc&atbgq+MDHr zfh;GTk@r0x9t^Z`3Nq5+9g+GnaF25}BYnn;=4|Thlw#y_>@Q+Z52qX>b8+ipkTUdu zQ<;&!ZuStTuan8hD9`f?f_?0wLPh zS1in?@y;;j38LB&d&WB>82Qli{2qG7nZiiOi-a!&&pI<08F*UsEC^0zobD6ZPiw%fLG49g*_9dJxEFM*4Vj zVR*JMvc~h+xxiLu4kmYpF$z-H}mw!HT zoIq7Z&V|(*;Xr*x?y<3v8n~U2`FO*@%-7dWuD~6Pv|S@oA314(CP`R4^fc-k!?O^` zos1MgRV_#X5802ZRFJ}oSe~LDa%Zw=Ug%^P1mkLs`o~C>p)wv)4AqVxWdnC5nap3+ z^L#c{3Ea(6&v#Lts(~0IrTgnhs|8vx()yV2WK+#RD@N+svELEs%*Y3}uZDpxj0CJb zjRRd7Ic<5G2JU5~kL76==*CD9i?k2)W#l(+b{Ju2m$h`MdbHBh~Ms{vdWI*6) zMjp5*NEvz}5NG6O>#-*TLl}A3dTelDBqNKgH=YiRVx+#cXJ}vyBXQgNh`?AzE_$P= zLz4sJfZ!cx)X`?71)LWH6PV|@1v2&m&fLIMMow6-&JRpucb;=^elfGi)PmA2(Av-Nn2?(z^i)4Dpew>SqS8s5tCVkC3Q*7_mla4U* zvX#0i=_n(~mZw(IH{AQc9LO=|xnz-hl8!UaI;*E+(h25SZF#x?G3)(ai#(cil6lOR z+{VHQNdr9OaJC>TodHSTG0$wTKBS~^NvD&BV8xB_vglyEg@2aU;I0ZX(v?ZCC6&ag z!MW*-=t)gllT?n87Ptj6eNobzN!JC<%8l+OW8@HR#cd+}2=SUuPz zWagqus!CN4HfNstUj1CgsUEzGkw@Q=-pe?(g62*sFO~Lo;fqN(2Rky-$(~{B1hZN5 z9iHYgPMu(P=IQ^Oj_a1-1B`s*MbyQl+k*WVY2exH1RDkiF_PrXMH#1Ia9GHAzI>+W z$;RJ(9>YBEdn@I}V58tTM!xfqnn0dmWJDS5y-{#7Bi+ucSDOZBFjCv|&vE?4(^1YeCK??YS@;hhKQD3%3>Gta&giYyO~X5{dFs%Lp{0wYBqQe;K& zS$7EZ+_uF>rZP`gZ|swUD}vL35Vb8WJlV7&IGcG^S>BE%E>Dh&H}QL zk?U~-X=Zsmkj;X;(Y%|HdEY4VZg4Ln1HIGMtl+!B zPk|6E_0GcC^ltDV^KABF%kiEf+j4aK8TwQ)?9Lvj}&C&rGDDi!Qj=5T=TS# z6k_Do=X|6vBX51=BiAqze$m%lBy2Lk(%y<34whh^8OU`quCIfo7}AXwf2+th!AgvrpRH2g1S>Og)5D6K2v%ccg5^0G zypcWD5%2wo=99tdjEp(pBQ+RVl7pufBSUi_wOMo9SGBK`!CM$9jcP|V-x@Y6CF5~l zb3NuM)WPSe&pdbGS%^q|8*IQlQ9Bpk2Jc{`VK?PD6>Q9&@3%rVpANQQp2OJVM9=A9 zOGf(Np;D)Vtys#~^fRS<)eV)e{DT13W)iaQh8VgkOpTWW0*Nek_euv<(TsffyY_V{IEFp;qmAB6!LiIU7H3$o=TdMy_x=%{@hS2Q^X$kWHIenS+Tlx0 zVxFbBe5q#{>0(#YrQj5fjaoLZUJ6cSp0;1B9tu6ry}#Q>^-$`9oX7 z<{3wuc@85Pfpj1yYq`h?h9{c}h2CRtjKKObNI$o5XdfdbQ4I=GI&^}OUkZs-Kev47 zM@H)RRh}C{e=u?{Oc1FXLVq#x<8bAv8VW>AHCPjSf%IM@lpHZT<9)q_XOLSbRD^j} zdcBu%>W0chhQQ{DIF*Q0{Sf}H1Ek);4)X3j#;f&1_?dnnCrUc>9V2&ysZq9EDyLTCa@ZT?Y_*`a6P4SZ99_>pnV2~A?2 zGFSzI%nMCnoc}xc3y~AA@8AIV62ymr>+Pp0EAQ71_qY4*>~Qi^O3onT`7o3l2+<4Ho)1I$ zn5UcN*&9k{Bx#FE?F|)9HW7Z(+Vg3sBt|KH034(D&k>Z2CM@fsyXnM9*O- zHb^B#%(o4SR7o~@BMGNtgDiAD57p=1i=9%bqaM=aI^j9ud>d-YFBY`#h@s$LHvJOn zl$?a#F9j6&J=B?z+e#|(SEy@pQU>lo9#-T+s2lTq7gXf$&?5;vj@u^zaovFlQW1AB zBiW@?Pt<*ikq4S6lIq42^yGC%Gf(*{%9GC>$H;qkDRQ+tg%N*TMco;U_%@etXEBls zS=#)|rVRHbMmA&C1S#pxWn@YjMM}Bz8L5z}NNIN=BlxS}{4blXb(b(QE1x3e-DL@* zxWRpmdCn&(PbK&D1kIJ*)yVbl{bqMFBmO9AyIT|by4BsuJk#^5)NSsb1fB-&hs@*q`3`pC#G(-tMoA>_}H+ zkb5CP^I-Q<0upxv(aU3gnCnK3pZ$3s=|&THM!C6|$B(+vZW<&0Y8vC_XQa!GYR_0V zJweYn_v!@X8MkBtGS{undi?o%*{#h;t7}#BBKKBC{5V|f)?*}IPkENO^%*IbqR2|O zc|u>S+`E`(dLHFj?Y0y>HgBwPTQl+!=XSH2-gMiro(*=s*1GMOCtohrv(D|1(ARpm zQv$NV&1R|MHfwEidnEAea35x#jcru(F1IfuzJES;2QlLNXTSS2BiGkZsn6UY37QYO z!1kIJgpEA$-yvkEKe2|ekcA4-s_68@5TvZBg! zQ}`Q3Zm^lZX83r5RGskm3COMCpIB<2o%j0T-x7ElhA%SDA-g*?3R8+%%cZPTvv7nF zKTEU-r!lg*?h1M~hetB9(#GnR@MuOh+qJVbJeHBAHo~`s z$0v+ydw3%A%&~K^D?E)6KV$C>zrcv^)epkc8S%aPQFs<3zE}5!Ut(li1GV{+@LWb( zG*jfW@B&5_#S}RhewmS{TPyNKcu9iIhr>&m$G7=N_*F(evGMawcqJoaY+gMUew~qP ztUbrWs~PEOcaRg|HyLs4Tznf|%SaVF7pKB+F|x(Z;F<7xMvhsjAHo|LdBsZo6n=-1 z6CoYf&*4psoGhitFX7FM_<8mB@HR#!+Wqv;@D4`&xi}Zznc$!E;oZ#RN8QEnhm0Jx z_2H%PUPk;i_;>gKBYx%JL=GirPKq2(&>W4NU}R{9jv^&;k`Wy2_+K{VihRe2pC!^G zXA?9RjQpB14EfM}O>h3;h9U9?OZhezj{M1pU)L3h{Kbf0*A;;+h5kq9IHep)&bWyIf4%S2Kbd8fLLqFf{wBM0otEgwls zy*xixh+M@yerBs2Da1&c&FYzvYZ&okzDlGhBe&cAv|6Nig610|8O-Bn(HfC5j10L> zEvyx}o{=BzN~s;WL3r#+xg}C5L37a>@9jTX~IToqUJbr!HA#xWZz00bePLURjbi7HCE|FG@+z?cxYb1-2 zVs^!KkF;atUAs>2kF;l`z4dC(NJmCqE1-HFjC5wiuaSC1vKjHuXpcm?CXAv_q&xHY z)nNa~1B~Rib=_l;2O05m?~q78M*PSe8X3TdADN>fk2B(*Jx52LWW+xyjE@Xsq=v0v zCr3syf~!IPmrc_n6B+SW)7;4OjQG9Ji@eClh!QHbATpN`KW{9HEMdf7r^_Qt8Sziq zuSS+LlGoNhuSH%>@Yw3en+ZH?BkLLQ&)x4twlLz)#g@n}M*MnpTjT>qe0z39K26ZG zC-M~|V{Lvu5IM<+UmqTdd zette3`GXPP8)qWt81cP|TclhjYx$%2Et15D@6|sdAx6em)7kkm5(Yxl#oBx!k|)>Y z76y`mK(ik$d6J7V;-Ag)CzoYpyIo%elCNdt(fZm~dh&IQ^lPd}!Q|^1DP{NftCK4- zQnju~$&V!P+?D)j0uoE^ zm(W+s^7R`C#&7M(!=Gv-42$6h_+Go$=x1sR^2U zCqI{f^hth^rF?JnO`e&+(=T~;0x~dpK1&s~C)THuUty$1akXbu^6QNBu*kE?8xoLN z$=ec;SCT(S=xbH-X9+xOlD}Z&Vk7NqWAbrErrOirw&WjjnQG@eo`aZwcyllL59Ya$ z=_7w8AP15uw^^r;S(}d~M;P(5#L48m3COp}`55s>`dxDV+?U7vAIU`$kaNk!S<1KP zVshyOJ;CS=2|Ov$>Iq1`=&cEw3q>0x=(#4^G=Zl=v?cST+8Mkdn#G782{%PMG2&;x z8qv;-B-|6ceIr5|C%3YZ;kgV{A%v9V7loXGOOpShyg% zn|b`%SsdNVh(9|^qWco0mPS8e9^Yfjqn{-ptD|4@D4IQ?bN#We@M{0 zG5RCx@khEf`a2{3E$H^>AB_07pgW`I6ZE_vy~sR&+gmmKka?cV*UsnBXdZJ9;NS_J z`G+^Xqq*{!b?R4ohofl;QeQ`}VxBi_PB;=xXQY~~22VwcCrJGsEzdlAZq>2>5xqW- ziG*Hwvq*ZUlp7PID5VCZP`4}-sfA7;vDvRoN+(AA%Ib!c9tnL_Ou3(VHp;Nz z`OK7FdCZP~akY-LW=j7&=AQqYhhzlmc*xl|geN0#YszD+XQAEEZcllfkvX;+Y?AUM zBmFH;%ao@X*|Hm{4n=7`PNG&f}q^Y}IPyp#ou46rA% zB`Gg6;z!HUlqHP#D|dOyvV=%jk+On$n%VtgWy)LJdz&|<_dG z-OSU-o=P^S>`ma=o^p_Rj@UK$Udk5zUvKa*07k!5xizonE-kjj%*QDOUh<{5{BDHQ_v*KRJEg2~zP$u;@=6SJ%MnbvN=8W{W=alBDSqZ&& zN$r#uFOSmldLoq(cp&wDMlJ||XLgF5_Vfs1JQlMfH9Q9K_piRGk22y{7f+@>ke!75wRV);GHrAjY2o_F7VMJT+zjQ41(!uJln zf-gc|fY%&afSvsyypCVuz?*^xfu&JJ$kw^ZQ0pOUs0?c0>C2$KR^NM%;8#u|Tb=fI z(^;tS9=?)FGWtfmgCiS@B~g`qOGSp4xn1k0d;RUP`BCCWqo zZ%__(StpwRlk9a1@Rk$HewQk}WzY)GzJD+4P`zPdi$euYY1GY`DbbWp`CP_f8Hq02PbR{6amx+)_yo3g*zH z^`g%q^L@S1?9fZ7$PJYhuLuo7)%B>dl!{u@_^&KYUFA?CP+9Rb&nie*YPlEVS@GX2 zwbxRuJt~8my-0K}ztK0@i$wgE(v$d|t%_zox~~*lTq=v+#J+DwDfU8drOw2a$}>c% zq8{Z?jnRVP?MaVv>F5CU!DAMSc^-FZ2&^)_;rIEx`EcpiW~%v9OMP3-q4Grx-;G-@~eoW_b^1Zq~@*!Io&9QiDccsdBR3;5*kM|I$? z^MSumGZycMfiD(+9lgowF3>}4&WcC9wH1s1uOo8ko7Xgh%*K0hqB(W3P!8Q)!J!`L zH;vZza(EnB@q+JYzkegs$jrPsTy1^}vnA{DCF}8Drm4;Jocj5|6s5|x71^x#Zm%^f zejeFJv}hi8smj|9mB?fA-_F)}^A1*}(?R(3F{YlK=Fs+_vGhy4yElk^wGB3#5jk`# z*5wdjn1M#3*`dAHDAfe|Om7Z_4vX~;or0`jpCZ=@wfF(WQn024E7w@5v{L2D zDAmnU@7UIHmcq}qu=TO{!>~`*YT^14FR}PF-b%@&7m?e?VScmXr@hsf75}J{NMyy$ zUzRqq)oEx!hwi|BRGl(W@d&jDJFHOiY-?@Xy3T8Lsm_Pw<(HjLW3Prj?01jgD?*N| zRmJi4C8#v&44=+m>S|DLfXbw=2H-cJ@bv8}`Vs4G53s9fqNR3vR91ZDF5Q3kTk4oc zrBl9Q>a`!e6@_1jMFuvtR4l&9t9=~0eV~ljp&zgY&Bz@Z3G9AkGlzPE+6xODYUfcd zJ&9HEO&f!~+zaoOqRPMsUv=nn<|~w{^;&^@9r~8B`{xjyWhxKy#ve?b@p2;S9^}aj zj9su;5~?DDWl&$_ztAkxN2w~hLVrA>mhMBU&=(`1d#JDxL z9r=~wbh3@V)7ZOB?TFvFwNxjJ{MRZ5`^cNiSp1{j;_+C#l%>LL)I$qLA%~;iSbVfs zAGlPoh(qmx;T(Y7)SMArdLJX|%-Bz$x-r!Px#=uCj?)hK9$>73=VzC;J+J;NV6l}J zyYIC6^i5DAI}g;utYtJP>Ek!V)jrG&esTY}N*qDvH(rayKRYjT9*Z}eBfZ7qJziJr z=QX;Ho=25oW;GW7!pnNG_*&#xgE@4fk5U_YGgrX`!`rDfRB-> zMRp(7f>7`8)z-pxH`w~Mw(faMqw`gZX&!g!^{X`wb|Dj*Q*W|1j;~c{pl)2o2j3iXV%V7@1pOo_! zqB`5**$>ipo-ILY?Aa2eHps)V);_Vf&_YW4j(TKRT( zSQiR?IUG|XmP1k z3#B$LmOfmXF%G$xtzVeo(5p-(V-GMZ3V(_3ppNpF>JF_lt$a(e4OCXV6ZT}2pR?k- zEOom_<-ARK411o*)LHR+;Xk1&_QALq`w{i2p>k@jiPilcw=TL*sGO}w;9avDWX118 zZ$dS~?qaB%eEVJ@o|&xpjG{6}S@AX4%Vf630h6fv*~{(tYdN+mc;Cx<_^oYQm%LV1 zXRw;3hObxbs-x=hX}0xs%%zz(mp*u3sV6Y22CGiXFduu2&GaWM-N)3P{tguk8SJ@{ zs(CEx$szX&BC>#3f8INH<8FAS4C;OVfKg6l8r*AYTbp)1&aeCpdJ3 zHBT=nCk&TX!Mo}CrNw9QE6ObKdA7=xh<^hv9cng?N*B;Zk+}%U5p2#KATIK=#b!E0?gZ06D z>nn3lD0_T;8=dLB)PF}~4i#nD;y6usQIbo~6)C^zEX0woq#h!yP|d)3lqpjzJt z9+z>%QS%GcG_E(US*Yer)VZ|R=Cyg(s3!+l>J3Ycx73x+M~x>*R&l9iEu2(&{T2fz z{pPX0^1T-7Ni>Bk%d-zC_3u_5s>8vmZ!69-CfA`iZ~wr_6I#mg4CaTWm64I-dQjtp} z64QTEOY_>@rS}Lu=MA>h(fPXf)WGbEEoZzqb!aG7nN!bLdOhaS+|}cL46Qd}Y`FId zX{-&kabLQZ_NyxtmOg}gGL|S}^U&>U@Le)v+YnbBK;a$^TBI)Cg)_E{iN5?RHR{5+2a$8Uf65Ow({ljfc0oL} zdzVJ>0=uUB*a&;t&fq4*xVKhu2O!jHi#=zlhrC-qmtN?C3YNX`mEGyCYwpnFj4iPe z(=AmS*+Ojg`>mK?z2@IrRQ00HrA(W{uC?PeGiW@7d!MI>%wML=q|~`Yqd}D=Q>{;6 zYWjBk@-*TvjXFSLKX#lnDrl)>kHV9%ix}$7D13u#fv0JYBAYSwldW0zy(qHjG_j06u`|D-CC~1L4N~gv zRHZ(yrquLz@E5C-&CT}1wza@oZC(47ww}ZuFMNwJ=R)0|rc|)DQUyUxf|t_iCG6)y zm3&>Xe#r8sGD@epmg+i4u}ScisZ`Uc=2EFy)2Ym#ibXB;*~j?JD&$E#J4VGV61DDE zKJ)uOp0m@h9bEQtL(^hk%DSR~%IfhE7 z+mN4y+K0VNsB>q8FP%&-7OaM~>R5f{`wn+4(wfg3M>>reu2>&b57PP#d@R%&i&er+ zj9{G*O+wAFR6R=__r{h^ui{)LeC0PNRS)&mMy!-{YSK@s!`O8NyRHzP7^7xIoL<0x znOfIDu{h#tFVorLd&YKR+Bp(-NQgt{5gBvie-wYB`uip82LRsnm3@YUU~tz&W8 z5p0XaI$PP#kaMJU-9F{}*xGXZBgMMyA*y|?v2+O5s!#`pD)lk4g zYqivPP4i!gOIj&Bgw-e#LEAbK6^~#oyjnSprcZNtt+t9k*ju!;idWvKRb-bxR9_!Z z<{X6^$x(9C;ZieD@?_;xWMFfvfj3CTYu@#r1x_uc*yhLe`E)CLJClliMtqfy%q3J4 z>}5g~=&!A}4iNkBY^I_^U%}%JwVtUXnhQ$u{RGc14ox{K<8a8_ZJLqeZ;V>1qSbdO zNypJ9Tc{wNDlhK_;JM2Z)zSmhF`j9?Z*ocRo7@~v;r-jAP1cs#C-7biWV7Pe?$C(% z*Jt!DUFj)&wYEC)z<9N#_(i48p%#$4kusg7`ijNp-6s^*?o;AFcnmRVd=QJ{wP;Tw zd6-Zw~% zC`^q7RTfkl^+gm{VQhIr{1qWkNpz}{=*v0YS5WDj)fkI^g?wPBG%_PM{!1e>a`9v- z_(gmbN8AfF+Ve&%-WoYfu+M$I4+P7kQ#d=%V5uFQWJn2fK-Kf%pDv3UX zYKcCCa-dnL`Oqv>4`>$ZcwePVLkZXA zGR+gLZz#q#oT*!uiq|qI+EPxg8T6XhiuaLF0T_u)s);({8Bno!UN3XS;srL#yv5=V zb=Ot)r59Iev@-=YFeK9GF;so#$#+)#;bF3(9Qqh1D)S@>Z*dLB-yCDjbuCrtl166{ zcv7N03z)3XdR}j7bYTH1OP0Oxty<9DYVq}bXS40=N0o10s%oz0?UJ#09!u?7BCR?5 z*nSP(l07>-NmbwO%8Iem9EcKR0q1yIlAr?QpR=n%` z3eQBw!E2DkTwpDjy%B#e>rGv&qtR-jBrD$B&Qa}$)oV*V-^b#mx9Ge*V5z_u#jb{T zjh`Lr=e6Q){3-DU-pcXz(5(1k%(UUlinp-T32%?eioa#4k1f^bUX_?`sdkpi_A+o* ze7}dq;wQT4Y@M^z3ETRcM>(`*vf7-El`Pi3fIF=vJX`0z3IM;_W;1XW&TnQGGU+)~ zP^RK3OXiMI&dFg^$SYWO-b;FhJv3jl=r~Kgy&Hf1lliK&!(ZxUswMtwo|Zav*LJxB zaOk1;h~DDXOMUT{6jP^qlUHd4utV%(>`sqDe#WU+;=TZKj!-wYQLLFqxio&M=Hi}l zX~nI$rOKf)GVcyLRC|SHkeQ>jsv3l~^(Fdssc1omjxyB*)Jdie!GbePeE{lbQ0eq2 ztnUb~W8X&n$=kxan#z-4+weQ@;%ndw;kXVmf{n_fb-Y^|zP+MP<3c~q#Z_yW|Y zrc#K-=OgbLS^qg_CRG7uZnp7EuD(i~xJ{|vzl%gxye#%IBa62>PYZ@xz^if{YWS04 zmud?i-Vi;h*y|&eI^(T8)B?v8+l5gY&3J>=YB_7Q)UsL@SuKaGmNiz(I!}vBCA(;p z)bB6nL6>f_R7X&owIS!V5r{%-gjC-5!-j z`;pNLz?L+snS}RHKxI;2?7A}3&I?4v+0qlBN^)zH7bTh?yG~cxrk7Rob(SiMksAxr z=r`=4CN|RO1FSruPOp|xrcsT4662ZFxvRX@nNG{T)DboEqCJiBKZU>M!j{&>%v^41 z8ufy{GHhRKXt@p)-Yv7Xs8wlH9{Xoyv|dGZ?Oo7%RKv#OvADlJj@$LI+fx3T(e;r= z&v@3S@muXHt}&y$(wo&4u>wpVX>{o$9q*%CC3jxQ(pY>6a)w#IIW_z5XIJ={!8LsU z+L}qtWAZG)*OHcluMXC95Vu7+>r?Z07`mX3obP9+!%~A`??9$8MC`iK z+Wv@A<H_A%J-vG`pt*G@D zi)NSpSfte9mC85D%U3S-D60}vy^QWselOR#RCTiU(GsoF+hN@Q84Fx`Y@cGW=fysk zrgp+_!@@T%O?*thVtU$AS3ja>y8MV;c}lhubN&p^R=zhhu8uBOYCGcF^oIKvZzskZ zjj-hf?xVHWito3)eHCxuczj7@-kX~RzI1y0Fws1gxcLjU{%m*6j+>FCjCa%MGfSOq z?$9Dgq>+QnwTfkLM9wyR_`BKgsflNoIy|jDcsHc2s@bJ!ILV3En#OfRIyO9wETg_3 z5yL5n`_S>abZ{HdW?*=q$eS(f)1LKslIyJ$R6y2O#UIqlt>nW(xwH&6OI?=@uStzG z4ZE6o*8p{ADXrG^E)8!MzNd2(MTN41tOHKey^z3D zebj5_o+cKbJXA&*i*GNY)Q#T06^q~HjV%^``hJ-iyd#IYPU60`CxJ@ts77&Q4gM}X z`(+TafW(G+4KroqCG(=T*59MDMc&l0%>^b=yvy7DT>9(ZL{l35jfgPbh{bE7zLI!J z8j9ag=J6J=RAt1Pw6ZQrO~#Y@X$=-tJ779-vQ604z;8; zEB-@Iu`fs!P|3)RSMA>wJA*ymSRbS&7OQWmUu^50!<294eu=~&RmEyFZ=Bs80y95Q_x-GU0)Q0a7d zvp%W0r?EpVA(2kakBINn=@Dc?sT7{_w4~EhSvV!IX5Xs1!1^&(4%BF-);uBo#^Oa^ zmUW(HHRHy{YBv2&heS@kn#e;7fF;`ZcGoN0mvisF0a<qrFm>N`4t>H@TT68-uh@D^eR8d0wJqNqkE-hYUV`W#v{ZGT z=!n0w%hXL7`2BTIcwUFr4u`d-ezh(a@{7T zOwb;b zkPByBVEF3y7dgWU-|dV&X>(m?e-@Uo zeRsmX6--?S5v^ql#_xsyiWmu#MK?31l*~~oRzW(AOG2NZTzd~9tsk% z(u>Gad4P${`9YWL;j89J#;Q4YXy(dnu2d9xQg)`} zSb65{O5BiOg%;y+oc8vBoNv_`kC$Tm{zS!Sp50-8>!g(N__bH?!GG&XqggyDTH4k| zL@?G2*2}4Ad~LPB*iwaUc>xw&Dc@hIzA_Th$4yMFfro_e5A-3G)k)Z?AZ5nYnk@=g)^oOB6kXP`R;cm3(S{#4w<#phh_J|8-tj- zTvjk$s}lDjyARe&Z*`FW3?+UU0t#90DpX|1(YVt(g1H1Gts~JYwca?UOs)31_q;YZuJ9>%Pud$*}HGW>1kF>{YA-v#0zw zGq@I7q>l}t5+yE=d-2-l|B_E;)y&KemPmznjXsxV_r)C#FqaP7(@p@jsO zCQ2Q+Td8d&mHN80+WZ3~inGMM5m*H(ab~J9rtypu_>=ms+G3CLzkhRS!w9`=G2@l5 z<6cA-kos>hW=68;y~rSf9c?DhtsFWH|CzUY9lD4dYu=y4o`oE1&Lns$g;gsx`WUQQ z^Cdcd*#i}i`8F4~KP5B^G(ep#HlM@}Ci`zbc%w>Q!}kt)@N!D`Vh@)(T9wqd_BQj{9?J|eUV|#h;kZRyG^W@xNih4>165% z^W_HKUB#+x&X}nQ1#3|rnTxU5b=q1Cb%e>7c!wEvM0aj|Aw#i|m{p_2rTw_omG7gB z1#-?aIo7;kj}?I1vfj)WxkD(isz2*9m8v=6;{F-4AoZlFt_6!>J_HNF0>L`k`t=3G50r-z$u72^sGJ zQ0eq1X6s9)%qR_o`zEXuxpgu1foO^Sq;cwx!>3FxG2cz#H$L#bg;Y0ws~PVJ*6feX zjQ2ESdUGtk5-q+bjqFd%SNJ}hOR&mv^7*p<9gmUtjU|lre@P#>O_q4^E%o*JT1;#3 zW%W=psC44925T|DZzl2QkIj!nv!>1cpG*F&OC3C&GZ{%do}2X@#~yVRQ(Lh|6=&*b z0X<=KLoSiCM(12gT?!JJC*nCZf3-;7pp&z~O=wNr7iu%+?+dqq#RzrGM7lRL_H=r9W#i zXR9ZePh0)oa#B}nT{KJH9mKOr?Bc7~_hyddj?BctaMtW&Ch80(7K~vFa1l+5}4NhYhnq;gpIl^Gl+wY+8wBRbD^Gunsxr+?8DxXlo zm&VuyVChUfkDWv)b2nUqv0DSGoYk*?&^)cPK=pIlpWTmjOKf})nB3g?VSI(6srf-f6m@aANNB-=JFv>>15WCxu?dL zNY(ZH=Ib+=(6lDz2svr~=N!=oeMpWl--S5T1U@i31b(p+@i&OEU~^sPe!rDF;Ee~g z!s83&O<9+=;R(@L#(ci1Xf^d3-u2rnS`sb2()o8PYZ++!@bwM7U*5*WuN}Rr_n2F7 zuPpbhm!G$;r1?c2Q4x4eS{K=qbzUYC z%%lA1jPm{GK8%FS)^etvv)0$N*8hmrBR2%T*L+Ife8hVhOZ2J!f9`h`_tyD((JayV zCa`q6h%?yROqrAL4(9vM`t~v3Gteisygv)cb{zj%%V*HyQuz^hUWpYT`QVHH(gNW# z_hCm^qJig0(Q<+{n~GL$KmM~VMnY!hG*cJt>@U4t=l2rUkwo1mHm=@8eJ@xp+>*#R z{HJN%hs)dLIju60BlcOo9KZWvepllsSdbNO_zIqfGBxQN#fEMY%%vyn4r?-q*mb{V&k>thyytpZo(|cd2lPd zCb4lAUW#3DZtY9;?s00gq>Y5^Ats7&GSZ~%*<3n zA31$6)!wi~*XW+S8|MX?nHKew^7k#x#i;7-UglHZ_fU!NaepdW3N4WDD_knRG3O3@ z3)|8Rcf-PGqO(3@|4Uvo60&+4G3DpA@yG|}O%79L?#lOb;7DA22NzPCh$AePyi3&gcFO=?lzfp1+y9 zIng(Zu_Xb~=hEf9&Er;c%PE@8>X91h4(kE6@6mC zBJSf~H791IW#G&CZ0Fs1_{IqselOQjCZ5+YUkq8w)N6Q$6mulMl40g(J-2>^Il3Xq z$PPrMFIr4JX`TS)d>6w14M|h$ZH27Zyb~05(^5G3TkHU+ME`xsd^%hBjR5N*^_u8A z%6z^LOzTO;jKo={Onwo}JY6!_KlRWhmVNRD{Hiy5=(k((z2g$2Z!Ge-sg)BoUuiAm zVu`hOH|PpK`_C%#aqIi=a}lOqMHa|l%DfvOE2R(Cf@r>c<&|YVzZ$OE8E-HGbE%?7 zIdrKWzOQBMoJS#3U_`Z8b})9P22443=+0Cgw#Xj!zxP)Ad;C%+_txl)P`FRP$VK15 zn)uxm?kxlU6Dluy6AMfhxRYBmkp*OI|GNcwY;R_^MBft_o6#pR)E1PSKUQG|6Q8r2 z`;Ej|{crqyJNlKUMt;9fW0e1N9OmhRSpOI1=>JR%PUQFkYF<3>!oH zWB=Ux|GnQ)&D4Sb*3p%sxWF7Uzq)4do9Tt+cRyUZv=z}%>7UL1l`QpF*(P|XBS-cs zM50iy!&0G2!cy^CLBze-dcaO=qS%kR za{pJN?*ETkBn!-7Uzz=54yb?Pt1Hd9zbf8EmM_e)wgq!8RJl8qnus}<*qIb~xPexSI=KCLP9y*FV zWGY(x4Gwr*a%T)98pIX%RCrvlaqzg8S=(!CQ=APX?{+0^T~$J{ywwyti1CVS!zSAL zAkIAo!(Y!qy&%8Y`oHgB{u=y$llgzCpwTo5ktkWE75pL*)&esvl)vkKZvAp+JB@?w zh(r@5xHa7&b)wAWPM%9suSxbXwX$R%bDQ^1qw}-z@>U&wbU9{KnIjp;Cp-=lljaFvV*FjcSESK5IFT9*znt-d zcqol(A0~P#$wc;D9+hT)nATwPvw;_Gxg?K{j`KJX}fCGN?(blhq&H$~rq&mmK_NVWMnJo!(n zO+R)u^NXLqM;~%l`+wT4@O<@Q;$P-=>9)?er&(ZpU^2~F$cmOfSc^G>U0|F4_qFwZ zyGr|a`Y`)F@je{xV8r@7pwe;3(=}7_PIop?$~+Uv4~d*7uP?Xj zY3v5P1t+I5^SxSBG-*mm5^(bWh zE1WBi+x&71)}Z8)-w-)+t}u7avfljq&#b{)*n*e5yesxK0v3x8TqZdizi~cNs5DxJ z_d(2h%ef1^Zf=)4uKVMLd&T8#I4Yae2~1xuI{uH=Z~*dZ!o|G_(6SfOpWwK(c9 z*&F}&2>ZY1m+b#yY-YXnV7@Pr<^K`PZ)Dn{li^>6q zoGnaLN>fx+EL2oZ;t_KKMV!c?91|0BOsOpCM1^IhIaZ|P#UwL_;wI_;yZ74fd6Coa z{`>u(zt3}@-uq##wfA0o9?uK#742|PDtRtYDvL1+r&K)q%pI79D(x_?R7<0}(yzzW%$FYMip_LYwmh-C@JPml4FfVJ5uSmCExs+Me8e|AbX ztu-%&E^hgtM9>O2Z}n(T+>&H zu+?!9v;ikKPcm3vl_WeSam#{+d)dVF>oPw*g!d$YN?j!b14Z}R@B+6Ca z)Ta*-!y03@!XAQ0OqRD6?_T=^rM=vQDzmG$&P4jm|z89f=nntgC;vV0t&iR*Z{vMXUkNF>e ztbP|??&&99+UXpW83$bv#&(3ZSA4C-*Qer(?>-RYx_JwE{P=0AtjG8lZ>g;;{`F5O zTK^1A`G{~6?r~CH+kZaiA$Wsop81M%T7=uPH*tHe$4|lIj|ks4z>XMipDTOKJrU4w zl2c;a&UECyKIzo%Jby0yh8U5R*on^RiDCXP>tRRtMSo1)Tz$gNw!;T}WNxwvbFn{j z3;){d|KfGOy@<1$GcHR)I$jAD>A<=-#l;O{V>_J96+YPWAx2rkitB@;@EV2tPk;U2 zVYq&AedXHQiQKwPgzH*yPnU2TxhmQJ_qo<)hJ6Gv`Lo2E0?yh@5(-@7F?3AxYHhWB#2qn-%g@z z3g>^NTPeggJmu`l?CJ8)rK#%p`L02V82RF?mHfgTYm8%QU0{s-LT+IULbb=4DOJtE zs+Rxl$b8yy?5b|${+lGf{y7GRCONS>Air?7ZkbcEJIF7LL6$qLw)}E$QsV`AKYO-? zGv@!N74T;;&Ze>GKdm@q4xqnMZoMONhOaJc5np_7hrW1j?GcRclKI3JpHY1yzWAJp z7_Sxd#ZQ!-5`S%s5hz(X8bn_vyMTH#^#SfH_ihkB6~@oqpuL)l*)eoYwh67wui|Si z%H$>S^?$G7?oStAcD!-(45RA#CjJ^M#buQI!f!PE?Xc?=^o5bvQm4oE$uH~#&2ZY& zCh`k!o?-Mw{n2p$7jOR#ujVbtn<$e!G`wVwu^ydRc<^Z_ra3Xr*My$V*TFu{*HoE< z3hViTpP{9uJjaAh+Iu9-`Ra?cH2Ukk9T@u)KE*u%wBF={nLV7Z_c1S{SY=@bNniJ3 zU5euOIYOha&d6!f-GeYlZWY3yuSXFE$#q8<^!2}ef8he@n(UnX`X@iryn_691O6k+ zC((aU+HS{)k-m;}b-upDY>Zf+zRp)9{6{g3Ly9OJ>)}6QY49JhhB9qbQ&=uy?&qD&e@d-MGg2r?P^gj zG!XvdZPR`KAN}{gSec^K*P_#DESUm}5adZRVtG3l${_=Stv>vCyxc=#Uzji*giqr9Bjc(5wSy- zC@dH4M+;WJJ=gNutKV@*tRyS2W~69bCQFhfyK%wNY`fGd*hcAkh#h{4LZ4L&FBw7RA*M&W zp>xuTMF`?!_xwRxtyvKfyX%KIe~Hjrvx`!u1y)DS+{;N4*1>q%gElEl-HcOttPE`| zC+E*$=L4i2d#s}%qITa263Jo(@%b%3!BUAZ$MO>_sk5uq0$Ne*upn*>JFxsNT*kH2 zffW<++v&i{x(Yk~7(U6CbQfA|72aPnFgAIXZIWc|^Z1QVgw>Jl6~ryi9a(`O9(!(0 zta__lrmTvcj_huXLU@UC>~spS(}{%(nQS&H6sP$RRwtGw$z@oM0qMdDB;lo{4@eAC zP=lD_wZl*0?Lg#3S5}P^*=8E}>dNkuG9O;VdNj1Uv2aN~0~rF+okbF1?>EKmY>v*@ z49E;*C4ywz-b}_`4aR*07L2hbZ=<@P?#zMAi!2wTCr)hKEm{dOgcV?f$jOum*d+jo zXJyY583?UiATP7xSR%yl01a-!JK5U2(-D}t2a!AeICMlpae-ep-3E*qTaYEo3&b5=lnvMz06*4vR}9J5!qA#f<8_Fr-Ri-;dvUh0GS# ze=Nxy2Pp!{W8uiP%6<1%W{)SCuZ)F_H`d83FPuYd)W3J|0YVerKm7sfG4~$LBKZ4U0U6U-Y8T zud;MW?&?Y8Pu4V(WL{ZA>0mN|K227$=INXK}4;b|ncrry!b=BFT5yL75F=CU*jPR9Xg80~5rx6bRR$V!^ip%)eUbHAgt_YINB5G3`Rb83$7MICpv(Q@P z!Sbz22r4))QEic@yFqFw$!m$UKxruexlP%=kx0M8)RNqx)PIMQY*rn1zJg3`h3~9z zV)j+o36Q!S2@-HN@L%lPcJh}YlM84FXw ziLmf%AQ*RrDRGj_9|!-$VXUd}o{pz|Ok2#$(Ze=Y@&)lS14PNgcwQ-X?8sjDJ|zrw zf%oQLFTw3~$TU~_BM#ioMBWLrUsqxjixY}ZGRX5v0TKJYrAQq} ztn!m2J^!Gz$0`>j`3oaz?u}UGnk4&PcSz7~VcCxMlR8AiSZg=tYq3hWASllW%ZsoE zDq(wt7P~qfFIs}cDgBAq{ZYdC{A;k1B1sNrtUUC=%05XR@HnJ7+IOCVF@BOGh{x`C zgyuVg75f8{IsBHRl_bf5RELCMUcv1=?za<5M5JN~VmMe~`-F^t3^_z8A;Kn&rdi1l zCFElv!+w%s4N;;c>FSp$mL%3s^iQ}}HVa3|Y~359L8Xl#UiJ?9L0+PUD$PIVGH$*P zRT947#A`o~T;}8Op-P4%i;;?k_}fq=Uy^Y$2hj+ADYQf?c&jy3nIec=GUJtbk{m@G=$DZRfYnf(|M zt%KHZWr-xaFJNu~tr1G_K`!HAUv0*W{w|#DQo<$qFqJ}2P(BsJtzQYsDI(0%3Oi&& zaPLN`{tbooh9skvNJ(PRhQFJKL6kC2O0JX{20tH#j7KRZ88+j6jC*@vtgf^< z%I$dBYuJD0?bUQ;vLq9s_52eUy(@DBaeFkcQvDd$a!ZR>sVPV{dmp8)1a`biQ%QD$ zTmnf~VkKFJH7ni{zM-U6A~itfC@TcXWCx_3`O0odE};du8#0+n#Bm;aCi@ZVg-t;g zDQS{yEXC=dL5wX{-X-E+Sz4y#3*uvHE?(`2)-vU5LC9mgJTFs@36jlbq~VOkI8MqX zsZm1nl;uk32_AYji+WOFwN%D(l;M&jNwPx8m1Kz|tCR{!#yv$^Zz(Y+$xctCi`!YF zELC`o6y9beE{#QA(b#x^O9&T`^qKP|=VIgFDy zN%qAt_B6C|l~wQ*&%sb=^R&OKEICKS8Ku0dME=5wmrX`Z;&t#{WsM|5L3ruiqTG63 z$oT6{p3+DV58Lu2eyO?{Ml*hLUl$@oW&@&MLWzUlq5mUDx3_4on1;ECoJ0z%g1^G$Zn-blID`^ zQOX24tMtjmI$UF%@K)?!xt3ct@|F66oK?E5!Eds`PQDT$i5DehvLMaTe({po{7xF- zf2iyg#I2PdDu)H}u%EDk$LrunO8wusmWQRHo#$kq(nAn0TZ&z-8L<4Z(&i$UaqHlI zWs4vl_GmEX!I0Un@O2i%*?zPSwfqH&Pm($v9rBeVo3Kv8dxrw$J4tF{c0=R`Nlqp> zi3V$)7kCLNeDSsoBXP=I<244aEGfR@M{ocrtlToom3Tq2*(H!#AZL|O=tIljqm?R=0i;xrY}OlPqaL(Ml@ye0-flR(URgk|SEkGt zGTCAs=p(qbOxaM0@U^dt%Eyun!Wi->$Q9+dBpne}G030F6+t}qwb9sT8;I*Qr3|aOJkCx}bWO3*HdStouPI@IxZb#? z6xDWR_`bt6r9==PbM_r7lnr&bjEC(;OY$IMSfTLWE8}E6NL!HWijMlgNuU2P_5=u1 z;{|cUQq`*cvZ}IsxK=iM_9NO6Q`OjeL6mHE>|xA>5g%1uQi*heWlhbO>S_;3`p1#ht!la?&!Ii!c50~6_mS2(Kka>KrW0X1$c511S4{?&sHa$oE zX^6T(5FfjQIHy1+M6J_`%eX!D9cma6oA17*LFNuMN|NW(Xs&mM+Fz3EXQ&+Bp(YCA zu^;fuWJvO{UnWm#)kjLNA=o?A!;&oWYn4l_&8X#y#%01=ix}EHo^(R*Ey?44tz=2k z{4zO`T-xtw?UN)9dGUrw7k@#4_xKAQ#JNgA>b4;gu|{Dv`|!~3mE`){C@noWxnGiV ze$s{rtAqF~6Lw-H$wS&Xsja3-@?`j}5yMBTvL5RJ|x=j_snlTvy$V zSp;Ipyt^?=f}Of*$fGXV2y&M?9jzzN<<1yOYy-JhT_cE>6{CIq0Hl$c^Ehc;MH~Dz zNK-ZS2_o-9=0}ibYC;r|B9OBn&DGovMB+E&jbf0N>Tvj%$LAij(+Xy`52<-iapGg! zexi|ZYc({Q6Ax>)%pns6am!e1b!z}QM#Nrs3*~!j)qYxpWotw6J}<&*twsyt3+lBB zZ_){pBFW$IPhCN_ORYP%DD0g&Tr2+>vV$S8B>kTyvV9Hpm95n*K`N&rr8AfDv1p{7 zf5DC*UiJVi^O;?1HKdEM!;WHfaSuXoqlU*2iP%ax*jC*x$*pKR+oL?URm%l&_o>^e z30NiM9xFo)=3i~qi;{Fgyols?Bbm=o-zDkJ|Lc0Sts0Fn7Pr&=4xI2neA=qJ1#xBC ztA~h)+T9j1?bTvId@LvlYx6BQNkn_W)Bf#g^tT|9>Rw6uO~48#$Ybg$L0rpGYAF%> z^zG!;D3#{9Ui%UVFX2(@0>c~@qg!K|0V{s@^T|k~v+eqR8;p=QqtLc)AT1Dg; zwN#S&X_);$=23=h4dy0woW{xMP~wJ?B`1dwQqT)Cee&vy#&YG*Y?$aqD% zdLz!A)j34i(a8v1kXV$z$|a$j`jQ}SpW97M3XmzQL@+&N-P9NQ-)yJ5IzbR0+k$b_ zV-I4-SBuOpQv-Kdo)HQ;5*v5Ns&jqBnx>*pn9QIKUk&N(I0%F)lEhan4Bbn$K1*sat z7t|3rJ%AY6Ib%`kP)}b_Uz6lSIGt2^L0u+@kL~6sXC`u)s&-=4?Lx-&e5`sx+G&hg z|15+atCk9q&GdJ$?;uDISVZWo5aYx3Aj1MIk5nt-Zua3wwf5kuBs_rh2_T6?gn!;c zSR>U8N&cEf^MaA;21(v&OugqwRY$wS{c{a1z%_i1RFjCXWgnql2s>v5@v#jfsOFAR zLr||OwN|qCmdB`jh}d5uUI$=jj9Mf~MLwl{jCx#>ZnGS6 zQ4qJk7^8a8`|^}Nx}4HJM%^rl)7HVVBu;G_qt+ckT26@?tA-2W#&Db(6+k)(;;|1# zqsF1Ej#GO}JI)!Haq72{IA>SJt5wgyj8{v@vM34PBJJZb=lJB8ZB&qj|BCW|m z)Pp3c%_aHVFOwii&svVmDoLtiJl_yuC8-6H@cV;AN+p@-Cn2MS=Ys~k<7mYS;BU~>V8SqgZwDS0ZHIOv=zh+Yr2|5MAU9=JJ-r`2u7em zg5*l_S{H?d2vQ)3$9{1XW9u}o)#i1PcDrjUIw?0@?JdbI)u`qoEJ^M=K)u6swNR2? z^Kc_eST2@i7)WD5$|Tt|AF~aRG*zEYVSNbFN{||YxFvIj+FTN+WO~&M(qi+F3Zbu- zq>2BshY=Q$jx&hNfMp`NlC;Qh2)12BE)Rl#Nakrl++6mm{Yl3D7X24L2kTWoky;T$ zuuG0Od)324{G&my8a-3kt3MAKy3vD6Snx*!iPj(Jq_khSy zL1^6D3wCCyiIVig?liBtv(zF%+!^#NH9doCd)cQmaDxw8Z>ag1oVY#pY_(JnFT31~ z;yhc8SV*Dw?540dXw427ea%zTg^W8VninuupRa~25}}J4_X_OHR~t!k{Z70mj9zcP z8Y{^!wP;j1U(J$aH%jjqp;aWwaS&c}=c{e9$#RFG_|;I8lO>Wohjxtj-Sbs!+ljQd zdXaoMUrks-WU!xnh8C@It2JLeCJA48<1Ih5mXVB;%Ngp=%Y_|(>CI3t2;yM_YEf7j zYPlpi_d7(*sjAhGi15z@q$@)Wmt<2S6Fpjn8X?Ittl?jSfebZD5RbiJxYSiD3nP)jA*`He#=1aW8U z3)C!>Y+lCtK+A*B7pUQHapIP-EcMVDA>;R0mU`=2l5xD66;Q^q)HXuKZ4=E{Mmru(!#*u}ED)gheV; zQx>U>Hc%>@vHBu)wIt4%f04@1^l)!D@mZv%Z6xBXCuFNOMqOOSSx;E3jugagC6=jK zg1FvTrmm4%&iVOeYJntoBFwQ5V`Qm@Y!a63rGv1hhjitrtp#x{=cth+<3ER=qsB_Y z_k~wN>rHioB#z}3YW2-GTVAO)6C{(J*@V6lS}WBEK|Jhjq&N>`wc1}2aoa+Wf^FPR zCd(a<8IT}VWB8UDx}E%U{v`HEZpANntKpKo5YN~FXuYit-N9wtbgffg6U6n{I(3d9 zK6Ww!r`MphPAw9ofZg#nPCmf$di8u2I~&w1q-EE@=!utv4XVA9(!O5ydK=U*BJ2)~ zr=D!fWqM0;aUxcmhvH%03^f=c*T_Ong^`T@iNLywBs4W*>f)TBKa{3qid0SoDLu)yh>*3F5Jr z&B3@14JD!ON9O?WIj~$NJil@PlD`IQx9>iG`15m zygcuhYo0!3Yk%^_el_nfS?+!XHn4uUUkyG&#Hj_JtBJ=s@vz9*RNp`M+o>5x-uObz z6Ea@5;8u*R5c(Ht&MDH$UyRo!Kn|#lz9-TM=^6@hP;L4HksQd31UaOJ{KSb{E03u4 zPLs^%a>j8)Z7qn`u7}VkK(bIc1S3-YWWnf56Vk03py)|pT$KS$LfNzP|G zq~jS8y1f|dXWU~))iObR%qPpnQ8l=P%lOzYmuUucRBa=O*Jiilm&y^=F?FewaZ1ZE zHCGbHtH;#*Uqo2!J+uIySLa&Q&QnTnpbefU>@=68_Z#RdKu)Nq1o5%$@Zr+-*n?KD z{7PC2QK$I{lT&KW1tQrXZ$ayOweTV*nJgUbST4vs)?tI0&{FXURvd3B8- zZp(IFJtc_8=BF)qUYu9cu5vp*+i7jit4;q9mhFNV%0XBb#ADBx;%Mz78P>C{!rn*P z&#Uo&QVa_~_JNeCWrFyWzay|-2lA_$Q!c_{P7YpBL;fP-l=%y45fSBEXnh5(3u^xg zl5y(kMK%0yB2JCFr0O?_I3?jyKu>f@?X93uM!Vsx7G4S%Yh4aldAqD`z*aT1?AI~g zIF9&SRtp93*-qPgS#7Fu8JrD!liGyKYKS4U{G-9kY9m2>{9O>?wPN%F{Mx?6fhtsg{TeVXf# zSR$-O9!`9S_>@Xg4Wqa+kgIB~TW(IpAL`=)qz4hUcN?{|f2cbHWDW$7s($`MEfF%= zq95e36S1{6QieATe1$5=FLSg5$=u>6wI3!@O{?mk>Y7*Babs9rn;$^lCc+M( z2jQdB>e>gAoInr4$*tPaDq1zP3jrjw?#2uWHFqaNgTZMYyFc1OGuRvF3oTgcnBj*Yn;4_kpY@%<&gZPAKIrmX~hV;U_PJ-a@1FtEpAy(yiKM|sx62!;&J|mIR`-O}@J|SA<0~DX9 zFel*g3DFiwat>=&yk6W9kUO=tRYJy%b8Rh;h+S8rO4Pip-q>GWE5Lw%m@-&R<2nLw#+PAYS`H6TgIqRMgk@5%K%E zz7`%Kv{=iLi|R=MT&IU zQGU{!hzQ*)v`YDNBC-`-1aglS_7o=`*6$4}8(~_mkWzgq4HP8*3q5Naia^?$hEVDUrR^{aR{Q zlCj$3%}Hq8uhr;A7TCOD1nqqbc z%MWTLg19&ITWWT99u}2w?y;6yLM5^dBwRZth|hnEzqOXsgJM{HJ9)K@w)HtqT+3~= z0zt?!@88>K$-RV(-_FC@VM+MesPoW&L>u0lWRkH?!fR7oEvyfP<&>YcT8bo2enn{I z{Yj>sJhRkJ%Nsz%$**==z9bRvP`*E^jeVYEx)|iK_I^?kL?lv6lQQRni9F^fSI`S{ zKR>Q55i)MtpV0D&_*43Xmiqz^%O_5O@svhsPsVcMwk;h3>fpa41O9)q6EEzzwesJE zZV#k%c~;_N8cItC?TjF9x}MU?h}g^bQxEc#RuLfc@r&F}wmtiE%;8|?DXmx#U(m1| zN2|>sF5_WWCn&5~$Se`W$Kqd==YKRdlw@86`2{l1Xw~D1SSeWl0qLZ56U2>SC#^pb z`|}R8j@?OHBFTjcy4Ti83x0{)NwXUi&?vW)79oh&?sO36fAL4y5yTfXWjV#UlU68Y zE@5Bp8VYnLt?A3$j@Q0{R1m>&5kcxA&V0=ZmL)mf-y!`ac@l)Q(geYsVijXik*-e# z@dZ_A3LAuZWoNBil3ze75J(p-dN_q;KTPTBqGbu<^Pf`gqJ1ui$6h^{>~zr%OR@-r z+lkR4Um-i2{UlD1H2bsr(I)KTG8s}P2J;I`kP=CT-N5={2A4@5!R`2h?)Q@%K|J=B zXi8~}Rw2nm+~eVMkQi;wNTKCFBORkP8YPIbV>MPUMOg7;Iq|T9YiQ9y`f6>)kxYZ5 zI4=n@K+C8^+Jg+%s*fkFTUOvbJ&<@U?Nv@P*-@mT2goq3LJ;idUZtLKq^3_Kt%`E| zQe`MsYP8(RLAHjh#gd`TSzE7U$u_y_b}zWlSgHoDWab z($hHcvIbbw<1J*O7Vi}@ic<>`wfb{8@vuUa7JjR4td<~2-Ub@ijnfVgv12AVq)d=( zcIqvhjY3MtX({u#9o*}O=i@t#7Btx-URvqb@ zsFexgvwOoo{4VDtEh2+!xu@JGY59^kcd{mFS0tH?6*GQvZ<6*xCf9On?qn@T5Z7aq zwJU;TGjAE{GN!eYwYdv!)|#rlDTo{TR4rc;C-kXW=|YO3MMx6Cdnc#Qj!O!D?%n)ig~)-MI6poysMdm7n4^2FM<5 z$-6`zg=H?YS1a4bNhaIA1ZTfNKGb4%a57!AY&-||Ik{{*x%`QiC}hZE{FcopT45!k zK!3lc?-XI#W5+1$K3Lwbg-J3HwV;h4qb1>QradZ1njk*5ZU&W&{n{!?oVvVUi`qqT zPW0PJ79^WFKHRV6OY-9jbZ4YM3wd9}hh6oP&^<)z!}Cug^a3qTl4IC4>jmP|G9>v+ zlFzjGy`;4lalRFwg<6&%3)u~vPe`xBiJs487P8w0Ib^sb^UvX=H!K%w8IpKF_(Zu- zE2$*ITawSU^bg3+)UkLe3R+)iUkT#Y(=W9PmB>qw`BJ;(L$2ku-+30JCXgcSHbLAI zq(xekBqtDO-V+sR!vt|#n<6bq5~sEKN{jr6TgC|i*|vP64VT1eZ4PNmByn1sZ?)Z$ zIIYd$fY#|eS+CfR~l`=nT{ZEqC zhQVlidSD+!+b2o)J!l~i)_*kh6v_Nmhb*7dstc0I20ln_!Y^95Bz0{(4Faw6T6;;7 zF{j=G@~if;Bp=CkfiJD6!`1%9|5zi ze)mi8~LjU;E$ ziu?dO*R&W(u7H#X(qEE8BWcD_p(RVQ9WC1%2&6*WAW1tP+GmWlDzsyg+=lgy^RQE) zU6f?+CrE)HVLws~zq>^JSA`ZON&f+~-cq3@Nm31Y!D~u|mLyp(HE4z>fa^a4S=A_qHx1nDv7xQv^FLHa&PoR&67 zzaog2y$s9Ug;wYZq-B1Q&{mJ13_x)8G>Zn z13#qq27~nqNmgOMiH~4|^)_XcitY6kHUwJ1dg!l2KAVoWQb6v|OC{-ihr(V33Dx5- zkPIhNK+CkCdl3TMM;LCM{AXgl}SDLB56G$!wShtPuo~*@ch}BJkj8qJBx7Ki%iO1zRw6vk_v=xYNQ=wxls40k zRU$m}=6cd)l5s}wE%ZW3<{}mAA=6T?kYrpp8WlXG@4mvdGT9!Sm)QLP?ilJZSIN#t zw~#kl=@owxnK6+@m96!c%7vD{4S!hA5QOU2y9n!Hz3E?E2KPPTRbEyf(W4|;3&Ld{ z(bFaQ@+-U+1=3c}ljIl(FVAiD5<%Scx(MCA#w~kT7qqK7eUDBr^~7;xlMHsc)!BBz6sj{6bqsQ0g#9d>2R)0s3Om=x4PL9A% zM}3(`~UH`__A=s>+uJ)z|` z+s@b^eY+%ojKny!GhXG=!|Ris)x~Igpfy-8yPHVOiKzV`@p@z!CvIObOz$WNS#AiK zVS14yn^5EW_QPw}`uTggmXFQ(8TAh`BXzw2k$1jEIR#138wrxlo=QL|02!knYsh6X z*+%rjT|vg`b|WIqagwJO$T&TsF_Ehy@LCJVL_J@U%@KIt4`ixd)`ZKraeiIDDu_E4 zeO=e@<1!0bLJjoNm~FkT#|lDwK)kU`)6*nzPU@!Vs|9i2-A&WCOXA#bO4F;}W}2ZF z3K0XA0Kma$EzO{#KWFI+IfD>)b(au#=~~W98A~C zBr!08T?fmv0`hCNKCwC1a??IrPZz{%cd%%;Yqp*ziL?JTTQ8Pme-7rRusmD0`46t6 zjr#9r7{Lk>A&AfazVU25`$0;DbGK`bzD^JioBKSycsxhnEy-GpjT^$^96hTg*TRnK zES$-KIFa{2xXj!Dug=voT9M3}+Khb$t-1OUNwzkl@y}fSv?Q;$b4a-)e__na z$Fy_xMy<&Xrpq#{cu9D)_~>h{?vQ>Bh|JTIq|5{hcgR{}?M9y?h?|2MdcKsYhW7aY zVwf3_I}7wCZA9qyqg!b#xS26%O$UM^*va=1{>Xv^(nvKENXPY69rzdwQ#w|-^o zZ3J=Co*j_V#riBMl-9->ds<)uOv`j_fJDI5FsRf2f!Q(pAluw0;jAZ47=QV>vD z3iJbH*we9f~!Z`6y&5PKXT9bx%XeS2?;vr|(((_{K@;!3O*0$ zZ6v8(oBE~$dYm9`OM5^+MKWvzv>HPHfLB#xiI()$VG z#_(%BSr89<9#cqOm%r9y2ap}dKVJuwv4i?CA>*|lz*!@H`skou{dunC_5UWtLHz?F z{{63m0jReqb`I->f@HHGjLcsFIig37A*~(bsk9u`cS~{}W5}_PITn!ilL0;KNu5^AJoY~H zo>QQ8QhzX!TlU!1kUKn=PwMR@S&A_d$viHJQ!h^HF_Ju%!bC2g)YBY-R5XOellm!1 zoSyom9x|4P<(8I{`V~Pu?0)p`q~#k&GEQwesUMTXDH|vC^Mbf#}5wYWz(m3GX<)O1rUT}y$krTXgyM)VlPEYdkuk|*0)OXE=W7n)6;ssB$uSj8U4SK=-AieGG}ysl8BF; zn1S&uLNC$lOELu{Q;_YFw8ZH(9@fwLDM^mX^8i2VZ6=eQb0GXQ!q0k?Anr+nv-%Q2 zJpT94&gw;yOv8wpTRy8-kd{Ap&gyX~+_Kvbmg+^4IG!)ndru=7XWzV3KPZS>5=!;^ zQ@M;gawyfK1@YR;im)1u`Dv*>SdvX3OOWn7N%hxB>&4M{mrsNhCCN^#-17C_b9%BQ zBMQ;u37N3zLd#z^AR~zDv2*&qG$F%wBCGEx2wDC^uRn)d_OVa0 zaMExH*2MMy3gVWHa$TJ(LbvPnqZQY3Jya09-Iq_fT&@q7BnT^t{C04;K0y$l9XT2A zS;0WLK1JHe!%k>Jgj%krOPLIef7S_^wbIVz6^`XRNlr|1$hXqY_=%34vyxog?8sb@ z%hi8zMb7!qwA1{gXwnn)=Q<84)I5Au<3IDx&is6@%@H?hNE=y8@ zR)UC?Nnw3}@y72c8|8X15q~Wx*AoSC%SO4Lv4Cs&*yGEoZ2YCK7R1AjBkgE@*kAfF zDN|7m_ld$dsgT6!9j@uS7m}SAwBZ9#qOR%DSwuX=ST!1ov9F%Hh=|ihUDvY~bK+&K zzCpdg*L6K%DUsQ-{M^uUmT}@?Z#G0;AYC`~W0IUkN!X4#{0%*NIcZ&xcQBceEJ+KD zVt6W;u}_kh^~^IL=q+W9%F#N z;SFXKNzx6Y9qvQLsP-1ua$9xPcvuh*%SQjk?Wjfw{@3mN;w zSPI=RayJU%FRO;JLl8F=hVe1U*njx&Ybx8gov$RB^tofFL=fy#qh(tZFT#3Z{ox~F=ZK{xkQ|jU>RYXIq|S5SQBlAl_Sdt*+S&%+Z2{*c!0@kE#qe2qL&p`nm3o;V7 zQ+%A>D#+-ugGlHZ%J*uB^o`&}! zU&3CJ5w?f4wy#iF$6?reF!~GPVdpUuT@I}~jMBYa#tpr;aYYahJA*vE4Pn(bV)Mz) z!|kxI_cGp@H1Z`WLRjl>#h#Q=_yNf{q1Q7~KP2MBu)Y!V5hotTf7PKLEZ=Lqx{nh# z^ae(%AZ{6JV3ZMIQ4xyxZKeiB{g1g;CaZz?+zUGmjqpz>EGIrqj6zAA_%sa&>j5LU z;AX7{jN(s;I9kmE{PUo(>I*L8WgF0{H$&(T8Wobvsd|8xI?$k~p4^2uMXcWAe9L3%|>NmgF&5cFAK6 zi9G6;F&hzS?^R$ZG0xXX=_6Zp`PsbZYQp<_qc&xtlX zYOc{+62}`0jQUq8hE6%mGI|T*_GpWZ`hRj654-jh)$Sz$VJ$UM%Spy*>y{d&k~nSM zG9&E26qb`;%Z;OwICVM4xG0Ge!#9nRYoz6*Vx>|2ZwjmBMEw3B(!M6Zt80zsLdM7H zV7AUrudOu(2;%x@oe^I}W?g{HdLyff%=!SC4Mu^KsfIDYC+NF37^RY&M^D5@1@9P< z*Lj@rRvu)gBhH(QZ;1FugPV<0oG1lsK(fN-KxVUXwTjFZgWVu+IALuuhD+jvwKc%< zdqyzR5xS2#TJIUjk~mu11GIJ+VG6V=#b-xAe0CX;T&9xcUB-4v9Lw(;w#H>VZ1H^x zTYz-!G14Sa{=|MA$X)|So49}c-pDt06Jb%9ck?k)zELd62OBX*gVqNIjy8$Vov=PM z5+!j``cXi-J~lQB88@ttjonr3d~8IUH>c|pqd*Y1l_&^kB?^oX>t?M2BTf=0hQ5IK zd}fq$8O6g^O~5-9NY`gZluaZbWE05evK1{boU-wSk-%jtdA`Uvcnc9Htgj5S8Yga> z`L*$gAa2^fHevMv_cgz-jY3H#ze2OfgGRIJ+_G!upb;Yoe!n{p zJ20?w&^TCw%Ve{PpYetg$T!B4nncEy5;<%n1rzxeGDVO%Y8;m2OPnb^3Ub1TsKsSm z&!04+1#w@!J84vXAvRTq`tW;oJTV@1>3a_%ACvjpE zcFK&pl3bDGSL1#n{{6TMMwB3~oeM^>)Z%I9b}ksX_i)SE>|{%YJ&e$QGmc8q2d82l z1G#9F3$l>$bUh1l*=QPebGoh?BLs21`iGGw$qn?1J)l)?+ZETb>PJaCzAaldmSH%ycOX8unh!MPGTCe-Vz@|YH{;B0Rr7 zfXrQHmLQqT#2DKLa*r7tezR6XbHhVKc<6^A)5uJ3#fjUpH8FFEh!XWZWSW>4TMHRM zeg$b}+HE+Y68;BBi+~c<(rj8u<_2V12FSEBdsLF)c3K61Az&R*&vC#h5*wB=Q>8wfK#vZsvAL{zm=cx2t-X>?x9QLhofh5ly5!*6?|o z+1uFHQ!gFUfwBk(mEQK`)_Y@X@3^vXev1V9T5xPIW#+m8eI3dsf2U_FI^6o^Ol9_B4^dLLjKfD!9Hak9dvzZ`PV-h6qBT*M-cq06$MRf0i;%k2c-BSV@a}b-EeWOIQ}I zaZ}itZbnuiGtBrZWTrVsl7%?awCFa>Sk3JqHoP$t`SlR&ykQnf@+#8wD99YMSducV zt8+5f{FChXy*kef?oA%!CG$zh%rjT@;e>kOE+83ZcwblM1&}PWV?QF?&xs(*%nCus zKa)Um%#i+ECX;>9USSy^E6ll)I3;|gxk?ZUYcXV2ncW8nEq@Hxn6ZLTt=s^aHD)@= z_{VJP%wvL3=y{M?Z#I42jr02;8_hC7NTvWJHy{V!HG>CIoShiHYxb7p!8g!z-h=vM z4i|*tTm(CLW{D)+8@vu~Gs9nm9gJi+ISQE_0b%Vja|i`N~Xb=ds6iq;XcSP=4aS7?0~5a(lN%*#A1vfKwU$IKK#$j<{o zPMC#K#_{tHX7MntMV5y_<_B}nE5eSyWEPvnf{@Gv$P}CVMo_vIZ^nq}UYraumy9Ih zSUzKZB?&KMGof|HER|#+_G)(y!5kzY6=%(mgquS@YbFY^kU3$UHSJM1hjrEr6NF;; zCc-)!VELRGGWurA=gbr${`@*;u9CzF>lgE=Bu-oRi&-p*Q+Iv|2@5fe{0(r<99kF697%H9D6A0V zcQa)?*UDxoSk*rWa@jnbL?n71${@%eX5<7SZ_dXVB9L-(jU*q0<6a5KUuMLsBonli zNQGG>$@|!G{sS`C&6L+jX5~ZJWBnL)-bzd6#2p)3)*?ZCw*3j6*08J`LA?HVZY?Wc zlAjRPH3fT`R@g*t$7?shD@G0RWmz318R{n~l9c#Ko*=%UNbJ;*)+s5o7rV_k8M^)bsTCmB{S6te`hZns#)DZ&n$hdRi~t=9HwocP%IVR%ar z-Uzm0Qi(V(lh?BH1i{NE<7tJnmes?m*5;T+uwXPL5oojiSjg=fCiv)3BWv^=$ z3gTfUeyyT3u7#5rezJQ8kzf5J(aVXu-cr}fAYw0)p08`|mgH4G`CbsWwA8hJ3b0c_ zGHmh|+S#vbJvNhvRXNUyf_PZnIgU)sT#DhQM!1IuAJ(l{Y6YC)&{!}!v`U&Dw_(~xE{kSGpyd+M# z?z7}?#4FBk0^VmOOBtuWyE1cd%8S>F2mD%2Ubw`m-OcJ5xcKRC)it9p-U+3*){3hR|~6`Anxhw7S>QnoKqhytZAg> z_fHEeT@VlJh|xW74_jDEB#Fey8J^M>R=cG&>FFvhn3B`CNkC)hl4N&0eQ-bmZZ*OM4qwIC3z(s zZ`(koQ-I~J)$sMWJ&m1h1z+8*p6i7jzgBna1tRtVA5K3atnOBlAZLSSKT3Uf zcWZ$pOF_^GKqg0$def-y?qMB~qy-2+x7@?}MG*Il>vNX1f#P#u5dGfYb5@uj9u@^H zZn>v*%f_2y*vo1w2>nJO|CPXAR+J#w?3M}GZwbMgj1^yr@LLjntl)PzR-lU^U)ybLcNv5rVi{FIczcRh4Nhh)3kE+<5I5gnu!czDHQcf9ptpe z{@?E&Wa-;@SRS_WHQe16GNF~oHy}f-{(^Yfq>EVp!1=;>>zI_;`=Y{*L*`|x`*sm$ zyXN0mdq)X>#TqL~AEbgvmLTr?hp$*yNJhMfcp7#_SnGBQJN|Sf_{)z|<6Po+KEc{k zMQfCGkcho@4|#Qz)npgN@RdWf? z-w5LRXR7sm015q)Qo-l2O@&s~{%g9GQsl}!0-5Pn%mGfa*|#`(#OJx`)>KLM`^geX ze)5xCNlvF>HxPExE&D67vu8S95dnF_YEy|UsD{--tA8cZ4>I$tbV)Wri_2tK2L;Jw zzagwakXc~inwW^;&Kp?A1{X@~tdMnqyoy z5M-ZKP>Cdi6j`xH$j&MQ>&76*tehe^*Bmetp_S>3rMk5 zDoNev6}A`Tj1_T=WSU6wvz0DM*b0*Qk9Am*W|Eww|N9rkT1jt=>Q%Ryg5(SBs zq&`M64IzEE9WTlKAm;^{L_~P(HE7*qudYOfk*GR&>TKiLswd})^ zaF5*&5^L)vWSRT9HAtM@ToUeQPKMaM1@SS*tMPW6AO+0v>Pz+{K|JgyoZe~&tzkA2 zg?~O{3-c5c8R6Yj*NwoJ#qGQeK{~_+% z<8>;&|L3_lo|$oUM5rj03f(A0a!(hfbkT)WatTGGBiB#SajO(^iJS^4`XCBLxu#MG zm5Q!>x>1Bs+|)0O;2RnEb;Uj@wUhMV`xj_W-_)7A5b<}J z{;3r|J48u*`lqVyCPd=XKULcy-^V1X{ZqFv;-z{p;-v;TWJ2nk3ura9e`+=($E~GR z>;9=v2vOZ`geMwcVgDfV15?`_$Cu8)A~;L-pv~UGfvL@mh=l`Fe=#B!4ov0jMX3p@ z+}F^@L+%4pwf7UU|0@_n0`g$0*{_7OY#vi<02v(Q{!psiZ|S)|l&Z~$NjgP_vKx!>JmCM6KZA)a4GDph`gucY~gX zQ+*lP2{DABqbgJFqbic->hBG2wj7yDY zL_8fAcrh;ZyyJK;#-$b!qDFLpz8Ufwmug!;_M8d3P?GIoED`9Ll$z~0zK%^weZ+{^ zGby!=5wT}d5qkCqdaC?Eo_akGGvf8+J7kR7b&%@nq|}~2Q3{@K*v?4D@~_97l2Oof_CPEp@Zwc)zBlhA<-bOiO*mh}bhNwZ|d8?MzE06PVWoC1v`2 zs%MfAX*)B5+-IhCI*u=$nMH7#rJSDBF4%KX3;ddy8p+5h@a&zCO@yc)cf-BQaq>0g ze*2{~!hbQfq!b~)JqtZHa9&JpVx(6^`0f)Rvr>(-iSxvBuwKAp24U z4xziuOh68$>K~1IhN;2l(k!wdHL)xpv0>^#M*c``L;xMK);1T35n zdj3kaWaNkCFiHd@se3wPuzGYq)%7f$TOKu!QDtG*;s?Mfsi!yu=8QF{1dU#S2(+EM zp-evqj@3&lxV+rRs%Hhb$Lo$KAo7m7vm>a3U!^s?sO4<_1akitq)O|GjG%>k0m;#g z89@t6ybJd^-4PM+3z1_0IacR0BGIU%w=?n-)Nu5@vOf1@%Ijfx+p8)_ouC^d0(uZR z3y>4_Am%&;Px>wZq>3(c3QED(AUDuz*h#tyBmGvv>}NJSIMh=R0X=sQpuA4e?=sS# zk*azRBkj2?PSuU7qLgo^r|Gs18LKvJfw3Xvewx1IRG<{PH=V90I8L7W{A$?Y1)S6M zY(}oTp1%B6Es(0NFFh6W%2SWuLY(TlyF+~LH3F#`x*tp72TZSoylUvdjGT8etg!)d zhJKilYtJXnS$Yg31x<)^wjRgG?pE|hSWW#LBL{9Gq?Ue#k&jO#G0zGx~6D;*L_;ovYT1UUg zNbjbE)Qyn%m4sZVS1{+RELhV5se1aGjJz%i^14XxW+_}c$L}#-q)$7YY`zYL+}%M> zeO;T8-@%?-KpF&k8Ww@{WvOYEsKqtZzc_??63nBa&aQ^(w%GHp5T}vOVPw%vS`Tle zb#=$lb;iNFRFHckU51d@lmDVwr02xP!)|BL*hp7o&bN(YYOs^Kg^_!kz#BA<)4?IW zEE)w~G}1jBCr_0*24+9EqUHx2;=O1bc+o`Xb6(;_6WzTAc~N0(OyQTHngm{Wj(E{T z_a&*=l19+iffr5m8;pn-P4p^=-Q$5{r@>JL3sg#T2Y-Y|`f5Z8iIZghC^9OUTJb}Ju9OiYgKKd;5Jx>j( z1?xJm!}FcM=4QGwbFQsS?cF0QYZ7uv#Hk4F2H#P=G|+RIK8y9VJeD{fX%Bq@N?jgE zHP;PTDz_qWJaPg{T@i5_H6YHF`YI>o>vM}ha|_*?HCIW&h~QfI25G>#N_S*VdFT)E zKclY-I9Kal%()QyI{Z(!tMx+}xwj0YTI$DH>VX^>l|y}Qsh?rwxa!pZToXuLt6yYJ z6^J2zd*s@HbDdtooLO8t9=V81@cKZimHvRG)&mDMw+c8n=$*{@6*NBsHs26%Zq%*L zrW$oU)CA<*sAn>=5HurllP+N7>Xz^(93VIAE6*XRHE{Qw4M=OK8Nex;2oxRWD?z=^}j^mclmLx!aWuA-+NcjziLF+RgmyGPKy z;11o4k*A-4l@(a4yhFDl#EtZDmG2Hc#UT??gW@su9^}<2vhHMx;0H ztgoqy+`%edn|jF3y1PTR=|4xqeu8W!}=opo>KNdMef4Q zyXXfQ5evKM;STW@LS7l;gsyrzONoVD^{NKx_H+&G>8jTvk+v2U;c0WxDG@jI666$fSRuNA3kfU{H(qg6{fx*0T@RV1EM(?+J46p3y>)X&a8`0MNZlVu_0c_JxDK>PMKUj?FW!f*0>Zg~m z6wXry!ri=|Ud;&3Q>ueK{q;dc=3fJA^MDM{r!*$taaMxJKz%VII4h|G$iMWJjNt4B zN9GUc2N=Ow3HJOC>W3MD5W3t4>2VJ6HV+PL9;~OZRBKI|2kV)PR6UiDhx9x~j;cdQ zo_>>&AIj2X)MnKKIFgCmgfx-BF1AU=pp2sA&byD}#W`X8(tPwK&pTn^*I8$t8L zKx&d6$DFP(V#Jm*Dd0S%r!%KnC0JnqT~F!u7o(@XH=e8qImF-5^7S4@q&LpjeJ?>N ze@DyLV;On9G4)aT`Xz^K(|urOw+q@&e$Zokj`Z01dJ##*PJ?+|2k;_aA7(^)?EJv5 ze4V(I>fy66O2HmGUzc@=FTtk+si*acEOj$fm+p|))B1EqvS5~tdY%cSp4FEyM?sCc z52OG&6@pP{EoF*s!<^kPe#SBOlz=l;cV*7U%$chDI>g&NEs&a~hp^Q61gub<1>X}6 zIM3-(%;^qeTI4*Zr)6lK9!O2sFR|2NXz%zXtm%4bhSc+c)bpD5XXdGLFh;_=l}9E( z{0MoEH4g*L*h@UGH#x-Dx)*{mzzn^|ar`J{hJL#_mh!e}tzbq_qdZ4y)C|3mq++sG zFhiHU!s&@gjhdm4cZiStjKI?w`gF&E_6~L9_oJZw=-P}tsj0TijF1*kBe4Fws2e$s z_w?VotwVhKnx*p@k@hu9*KL6o`t~(T-{6pKdhiqU-PBou@17&R&(iHkDt0ogFbsw= zou%h8BEHWGJe{RqbDTUi0mcC6#Vq|TBa5Nmz%rd3NX^zaw?v!sRK3fK=j>-r>6XH| z{~DC?kuOTK#JN&6vS+q_$VvIA&I#(zOL~gq`1MmLiS*MUea3&A(-n+frWGR9@Zn}K389K16jBN`b-!Y zsJVfKo+B2{4a#D!ZszplDJ(B6!MS=iBiBKnfXF;u=0?mbPhnZ$H0^Mkw==rdUl))w@Af!@T3)Px24`kOE>UtSA>Xe`t{9mki~LfsrcJ6))}76#Gq z9Erw4-HN25@>-~$V?@epVc^9=J=<~e)L^dR3-yp&C_W`2V(8aGeR*3#TC=AM^;fqN zQV!}oMs=Y+$jEjWuOjlQ&b|#f-uKr6-xuj>j^lk_q#tRAQronwC@ubv0SfpoIHhdD;(v9oE7>T=DZ8-3+J#a0zE7BVdi`T zy%us->ausEUq1IY1F1LliH?(}9?OB}z2L>0`gBIBSBE`RfUMHzFw(m&-SOYj4H?;Y zB_VGIn%~h^G3U|x)Nj0_+dIUU&O1Trtk#1Z$Jgi8x>Q+SpS3}J*6D8@$H!-#zPV?5eAWf=@f?ZII^B+>qWG-S z&oLtLS*K??#K&h{;ORR3n&bG|yH3C95bwqNffwubR?bV>;Ch{PFL@zjlJ$WXo+DnY z*Eu8=-Q(8l>lqO**6Ujw;_X?l`!Yv*tqpn+BVx}6J+2qp<9n?QdagtKsA)rBq34K& zpqZp13peP)jEIFBf~aoLiTg13JS9&Ri{fO?w!j{ix`@X%8}vzxJji$IjX_=;bv@>s z4}A~z8yod?jMRq_5h5SxyBJvu;~zvm)DJnt*Nu+?%^&H`B`Bp>M+jLfY@ z{l+FemyzwT4uG?XkM%o@bcB2m`6ST%ss55VrQsPF{zv?$0cUd&$R3vZvjROG*sRO+ z!8m&_wgggJbY;iMQ!l|x^CR$LOZ0SUJPb`S8lUM?nR8K7;(V^pV&vN^2>C*v&&Yvm z2>CMNY=AX1)cjS{ul@*Yr|A3Fx&cca1kGOnXRE%Jk?twjiP;0kMy(yKna)5vk$d=(Z1~*YIz2ABSwyzrehp#~j$r6V&i;^n=Wi8vczQNl5Hzm=}Bl7Jj3D zU_@&8H$hat(YqZ7o+&`B!@FL{`BwkIoF$jT?rhNftQ5a)1&bZJXSLEyz7x;abXIzQHgKLXC5x-D~LZ_l3r=P$j0Iq_R*?(mm>%OSpR zQRb3Up|dHpKBmk@mTCzx#N3rRb0|hWPkjp!LnLNKFfs*vF9mfhZpJfm7I=!Bgn5pU zhamEZB+UXw+CZEUDPd#;awkL;M<7|I>@dn}9JB(|T+*Dx$RDsyi%81I)11XHZb3cT zoZ~p&FBAA>%tfrHN*VYP0O$!h)?Ch<6Dra8$C`Ey8J0TmBJG4PWd<^``#ySJS;|ag zQo;icz-i@520#1(ko;fc=T}4h# zz$s(?WX=uHCm^Rxz&YBKA3^0_y(Mvu4mf4a+02;&vkBBwHsF*qmog^?EA9BKznp2u z$iT}8ImYyNh_5Z>13l%VzB{ zXgOvb&9FNoXPOy5jCG;hB(BR`zb|8 zjb^DhjC5v0Uv`QSWDJxtB2@#aQ_VP*+I0@ub85gj&8%TgV`wS3_vy5NbGrGAIftPp zpkJp4oNDF}b2h*#7ILZuoa+Aw$$6Y&xCfqOVR?m8HO$1(#90FzjA4yHa}CpXEOA~v zyLira=Hx-E#Joa1X9SwhFcZg-=C3&SGfds_Y!BpxdP1o)&4>xaIT!N6_?#JNKFhqo zoT(7!lc43E6>!crOPEu&GWm738T}+_9tZs)M&oSLcOoLbMx9-R9vQ_ghNmz%iVHdC zm?2J2o;tb`*?dl*r=}Ul94W7wMol7nzTjxoGP#UA$#Fi{Y-i+C@Dw9aAeXUJKky4{LSu7>L;QTFu^H$PKi_F$mM|jo zohGL0GibA)(Kj)T9I{O}hIPNjU{4d1x#zZtxr{k7-)Ul65fa-1yN|APQqM6W^PMJv z7fsA;$H`ME=(X0uT2d3!^I5dVmqk%h105$%-3FtWTU=g4GNhUYc{Mc?SV~$`QJj~V za~V8!#izF+=VJ2?bH0cBAaX7?pJ(LWEXci?`GKWAOOaH_xy0;d&QNIYsQHpW&!r|g zh3eRL;Mm2m@6_~WBnRpsjh^ z7!Be`IOJSuzGu#P&~j1pmF8DQT0zT2ds;-uOVCRoa#fJm)u!@P@_ium8_2oZG&^Yl zsRM0rIB>2HIIYZZ=1he<2L&9&BbUH@Cm)cT1F6<#FLSVkv|JchmaE(xeG>CgfwF0 zbJ$ZrNIOREgmESzgBj_E*`8PzYgL#{gY)f^uquIzvn=1+FWHvLh zzdFphVJv#5`Hqnn>k`u0{KCjZFvmwu7ZaaOOv0?su6=j2sX5 zlSP2sZDjn@238Ak{L?M)qPywBQaG|&3R2xov*#(V81!n0^a!NxHG7!zJkLt*ErL_& z1=2I0Yi3cL5zM&|`fz05YtEcOQUf9P)sTCyK=Xa(QReh%N$ujkA~>^|Q=(Pz96OWp zY6E=>mV2lt*IdM$&!DeEPHvD_?;?=9S?VF^`Q469Gl-E@(34bu6?SZzjSlg3tWTh) zkNJY725Z_e)yK&Gx|8eBieleDs-M}!7Y|~9(zYYF3_kduGVd21YQg< zlN~2dRfW>|(n(!%DwtDf#cZHiz??7O{*Jqg2b#AS`2gp zF*vY!u(`}}^3|#w8g9BUay#^X#F@y*(=c)%^A$uDd(lTssb!eE_x;hp_mQTWu zN1Ev*75P5W{J@C#KGN)Vi0{Kk240LbhaD$RWx?J2C+KZPn#2mUCr^EKCA<+2$YaJj z#QXJl;MXWq&2hY6qs+B$ru#K2@XK?=uTiEgNkx8*GS4z1evL9S9OCU671%S{yv0(| zPDh(dSEbuCI zV@$=joXt^78Dp+`JKc*hfft@5UW_p}lT_rz7&Dm>@nTHi#TYZ)amWkoHz2QfFn8)n zu)U8l)fvHFf;g8mg1rPGpD=>G1R<%_qzC&S(o>TW?0<+ef|0qch4Z3Ae8k2C5qrYC z}QPn^F$VH!BZx8<=x?qf}JmKq9kBAjuAoN?wR<~+u04&%%yM&`np1pB)2 z=4D3WP^O4XFzXokk=Fs9G-rN57A}J_#V?>vG~Y1N1j-bpCIuEgW%e_tG4#D?;Zvsd zhp5Mw>ExhH^G&Yf_%h8mvp+&9KL*GT%G7hDO!LhGl8VYS-~7gilxcoobG}iV$Wysr zgq){MTjt39;^{!oGiC#Gf#;zE3f$9OCQPl)#HAW`pD8si$E_{UNwJOfjD^($dm+erkkFgt;e<@TZwy zm@^RO1&BOn{$iv?TSBHA^C`vo&*oHro{we|H$nZvcXM7a6_~RSRw}TL&4@UsKsSP% znUUstrAhOP5i&K0kbj%ntmjr}DOh`F1)k0}Etzv2)Ooadwi(DsWv=0K%yLGafj$a3 zFPZ&}bgDuY&NXjuCcpMIhNrTyLO##zWMoq-;=F8@Y$49KEcJ?+^BEy+nh~&QHi*$!5O5ZnADQzY^s6{ZSr~9$HGeVZUmVp}1I}xv+~;J^W6M&>aO~hFoa9%f;Fz3QH!~x_~$hOej>J8JAIcqqtHv-NQ^8j;jB#ifz zCFU7MWPkV)^C}}U%3WeMF(UV`CFZIx(0AWXmjvx}sp;Z4zK>dJKKTzy`95lC&`v!^ z+UZiWm87C}y40NVjnfnD9A0Y9aENcGO9S7RM$b5wKn=(83OUP69j7NxO^200e0H81RRY32|= zKV5A$F(RYN)u#TBDCOs;t4(W0UT;iefYs)HM!s(@$XJK?UFEBTy0O{_N9x9ElTT97 zKG@afYeu9GUmZkawfVtu^3=}|XY2u1n*xXU7`_`wy=!DI@o4DhvHpad_e|<1^gU0# z19$VRwXjdvRB?#cye81R#>m%f>O<+^*KF39Gc%;t22yK{d}Co*igw_5JS2 zrxWsVgggiLW#oJkAy;2a$fr^6*K?dVN67AKWX~3}FvE+_0xv!@E7_iR+2+s8W=60~ z(dN(1c8B<$_6w8TiFM4k!7oiSMx+gXX}au6Z-ZZ&Jcn%4t6(KC8*1j4LHqjBJjxtt zUtgMugv9QIH}A?isUH}T_Vs1p*Oz9u`1`q`orxXWw>kg#VSfz#+cv zd>u%AZJM&waaCbI4p{iLX_+ClHIUkBZeb~TYa`@rGr7!>nz_x4%+UOwK=Xg1IxlVc zKV~B9`3}Z@Sfjp)kolI7Z_SJh&EEx@zcce$kJJ{Avu+yI**(k<{c;H>)4OxTZi~M_LHf)n`)iZv7bz{J?VAqCv&?)d>#8KsAE5w z&diZI_LIpaB&uUSnN^HP9s9|wb%?j{C$pV7@)p2O(_(MBg*#2Ted!kNH0LlPccPu< zDu?*{&d$JQ&k>tb%gcVHfwP z$6@U_u*Y-6o?T`uNx?=4_*yuW=`M55Zxju&XP2qt5O2>e(~3C~!=KGKM#P?~3wH+=dX8AQ+iWDM$im&G?4Ri|+-;6`i0_eh2kmsXIo)yc)O@(_U_Z9o zT*%0fQwiB)u4JSx++}c2&R%n?L%i?5n7$72ZE&Ai#EAI5&s0%x>nJqV+GiR##QVN4 z@ZEF7_kHGal8SuaXC7rlN@t%L>kx0@J~NLwQabz19!A8%{iazw-NOCm4u^OP_Xiew zj##+gbR((A!u@70BVyrx^O{4vh5OAW=7@y{Ot}Qw<7XuYOqXQ3g$K+~hj112NV8b@n>oiJ-k#qAdk&fwEG4CU(A-=q-JXMiJ)R@>95n4n zDzfLGnahaSbI`oz5O2@Hz@9^96HAFbhfJqzvS$zM4XXqF;i14D&k=hLnVuvSdkmg? zHgHli7!i981?~Nind>-tYB@aV!%=R?`Q0pM&N|@WGlk#H28VdR4hMb}n4O%v_*Gy! z=A_5DAn?m`#IFL=jijPD7nnB~5x)w|Du?)?DWywj8sWy97N)A{MjLNh*q1%>KZLL@Z`^JH%TUv!%+p(uuwl8n-PN z5ewsX<}v9O#_ih<@fOAd3q40HjN6SQ644)GQy0}DMzEKJ(^Bo$ehv=1^OF-+Rw4)N_GX){;el6I`)9Ymva5l9~=MfX#TMrk|JA>Q|+>`cx}dWjsnoe}Xp$EMCm_dUm+>JZ;c*5%Dy~4seLKFvm`0j#ya6Ze~O*EMu3Pn{HtlyTu{i!ZLw{o+B2P zvEPzZWMLV5`gyKQqZRTpL7dCja~uc0SOQ}bT%{>v8#%<+-lGGlqwSR}^?M5HJlxHX zwsJQ=3T8KWH!o{%6%OCc%h?_d@$osvj&z8xz2)sXMkGGv?T8D~<5S)~?+_oK@pd3(P@yk8Z99&rxgP)JV(5!Xls&GG&-$lJ2N8nu%hkhkO^ut{MRA=vwTInni2f(^6z2B zaje~n2>e^Y%m?5f)8KA(ye)SjAzJ`x4M=6%7m-5!*a=qEb4c`W<|o)Q8R_yPd>I#{ zPOvo_WT_PV$3ge+;oFdaRI|MRfv4`S2f*CVvJX4N$N3yP-XZj#^iqBwn;pk`_p#2M-k zU&{6E6o>fQ+rVyRL`u1V9dt43@qKRt`?N#+T2q6d+&xFiy@8!cQqfvd1N$2zQtl1x zUk>pWHn5eNVea0-hPEvuVqrtu<&ty@8`_}`@$IW&V4>%Tg$?a!l8V|_L;DdUVqru3 zxkG&EGz?0oq0O8rG>rNdnJF}~KR7*prqDRh)1(Nb?4?wuH}WpQCiWtSczc=#Qcdk; zEVUb+Uo3_?*3{nU5Fh7@ZLULnoSWGNj7XfD*~>3ak8?BI$ss<@&4M_4j>Nf{?MYHm zoSWJCj7XfD**6^GEo^2tGe_=3m)MHUscwjcm)O}?q+582ea|7@!b<`RJx46O#BL&~ z$iho(g)1p9vG5XG#UW$Vq|51Fx-PM`9pc9cmsoW*N{v<6x|c)bFSP?5GDfZY8vY># zkjw0$mdNoXc$H0EgUAFm9i+Yl&Q
    (e>c2BmzhJ{ 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

    {dB>&57 zfqaXNhL0h4vNWtMKl{yA1Cb-rb;#$GaErv3SSu?#3N$9p1foPsTfjcQ?-XD7Ouubf6u< zwJ1IKKJ^>rMc6T@Z053^%QakX<}$+Ny(mk?!zdN;7?(%HjaXgJ3G!W^xUhB-;N{pk zo&#JbO2pCfnc_Ig`FI*gwG){VQAk1qQ)V({9>c8+uV8pR!)}#z=JEpWF~;Q~agpm0 zjOzzg-$OM0mir07l$~F%P6#{)m~!(s#g$dR5nbSa8~4L+I~+>df?xAjD{qRnF*B4( z?k zvR4e$-hr~R@J{6d==^o%6Rdw+ob7lLFj?kJ&a>Uhh5EBft#W$7ONv_wRJ@`bQD5=@ z7VuXb*c;UDn!hT~sT*{m)+(Q@^{H2*uP4FNs#mDT)%*Nm^-c9qb%Xjh_2=WKt8Q(# z^Gx*y*5`KC;dbu*)7-nFY^l6l4QMy|{#Ct?NBtmMpi;ZneUEyj@~xu#)kH7Ka^aieUmNRr)~A#1ek1oEBAh@LicuV<(}eCYqu)TYWHf_ zYkvRzfcNU()oPXF+7nu{y1C$9txtRcCjphp6|ilkGNa(fXw^988EuNHO?)1;4^$u3 zDwSuDH6Owle+Nn3HGkH=sC}vSg!V=B<clEGRHHJ`C0hS z5#@Qui~8-Bh8_6q<73LR{@3(ArW|9Pf6lO*?*)F&-tq!_%foy>@GD+%zqh=XJo!%y zyOjq2kfTz+tl|pC6#a*VS37F;Z+owI%+b4RZgDj0_qspjAdkA&(XRil;2}puzt8(a zhobB#e%`T5pXB?cXXLv+O6tWjpqS>yy~d2M!lu>*MLh3{~PeO;Gc{m z`XT50#&h~CpXR(?-BbIVc#rM>9?!)Q<=P^*^N8~ATB-9r=_uuSvJ3d!(yEEYUm(shOm5wm_tAHQzzwUG^m6+KQ?!83%fc|dvJXgD;qOuv~)avD~HIA9Z z>s>VpMcRo9#n=Y;%$-V~x^euKu0C}?JaDt)_=Ia+UsU!vuX6UO-=BDuGvc_l@O`6C zy$%{Su)noC7FFNms#MlH?{f`0j_VJ(X0n`Hu}?nbqR8`8P{=c{bWluIlxvD#a$WDZ z&-;oiF4rT|4>`Vqcyh?`bNvx@p7MHix%-ggtA%6Tw>oYvngDnPEO5xN9H&;b+M|K> z?skmsJojUcw`vmZnHa^_l~x`_pAstRci*e;^A0l4b?#P$V(G&=#|`LnkDIi5zY`45VnkaG~Hug41R65pXxA<3^O@1oRH zs-3`P3zwZ-UdrWNTz-ekSGW{fr}&Lu)2LMl@WjFi47YIE$z{eWsmDthzKcttcZz7? z7L@;il4=j?BKadnE{79MpGUAVm{LtHN6atoIkE)Q}kyd)>YWroXxTps4~ zD3`)VJX`!!X1ElE+=|OZTyEhq!{tFP4|5qRBF;rzZs9V+@0LW?0UrYoa-%@z_XYJ z_cZrc-QRQ{cY8eNdURx!I15MSNVy~BiY3SgDF>`TzE_3(4hgKdv}!f-;o|CZQI?Fq z5anNLsVuDQMEPtWj&iyyiLy1Y2j!(z11ReYhEOgFQZD^!&DAJZj{hXe#$w`mg_b`l_Oai{!Yjr+X2B}PLr-O#!hzC-tBUct zQF??Ir5DefRpgX~C<~Cas>p8fc}ZlAr6|vY1?V%im9WbklqyajssW#cQpHo0F(~Kb znT(2Gq^d=^5UZ5#+b00N05=e-xDd~BRB940B40zl}41hG6|)joQBe+oQ~3? z)MLbcWgN;Pr50rg9{A&q0G#j#aN;gOnT4_joK+$OPTV7avkE)JnJ6cN6Hl+eStaU} zIVc;zIR>9D9fxu@ILC;&%2_Dqfpd&l0M0RDkuo3UVsMVb_ih*C$p61+?C##127s!lVAnJ{2u zCw$X~b?So^ed2t4yCWtxC_6<&>Bi?7kBg6MGn5{EmXguWRBqP0#m)M0&~H{QH~y^b zbgffgA-(1;=Y{#cn*2T>< z^Ktbk>l-A{|Ynm&6iX(IjyEN@ZgEsyzut?DlDss@hk?QfXZ0EjY8IV^1>DgVyUN&Ra0M zqXR#$7>TE-s=K2DvLf+#9~vamGp3JrKbQwp{1RqQYQd}yg2|M)jI`r)K@PcPx~=VW z(sp+=nTB%H#o5um4Uu?nbaf;~=x|j?XigPiXt^!6y)BtElc@z{rx~Nn4(be0W26+W zsdOa0HoD8gM(PHJbv@C}SR`((w{>7=$unr&8={@yunjdstT#b{89{6@yL&LV(m~rU zPA4Oz&y1OJurtM4Gd+_`g1I%jdgIXrg4WggND>#G9UL1o(k#~FcQSjE(dn&XLo}I+ zHZ`{kd<=}pC`b1rR-37G+r>R*D%u)JN5ry7vfE7bt%z+E-KkD983%x+vL35^RTAzH z?OKk{kdcScm9#*NAP`JTW4ojFnj+Fg7RTyjtUHqIgFag^h)%H-ezGIhDe$YOd|lU< zN=Lh!u)^ao2z)Trv@{BD0}EM@IML7QND@xD0zX{V72Ou;jbo9gz`&~=fTarYtc)Zg z+oN6UcO;{cuJ$hU8Sm(bC1PpJOqNLet*93*kpw9%(&XjqO@?F8#{$ny#Hkj;YwiMb zZ<2b5bL@zAiF3?!Y+GMmgaa)~4z((=Bod1g*4>ltYu~mchQW1-wu?KXJv2npyE#q@ z_E}Y=(7K)omRT1MrZpMamImCOvY{Aa6AvPG3DFa~Bk@?5SR3o!h!iPk6?>$*d_Lb4}4q&Y?l)1g5J+aMfi6pzk zVza9c=7;OUBf7-8&SY$BRP2s)_rx$s%c7AuMfc7q&&FaCn+KLgPYU+k7EPq!6?rU} zyiv4H*_tK^D~tq@F_s}TZQDjJixDI(B8SCpOo2sP9ZBzKOLSojQ5mOJ$0MCILZHbA z0z=9|us@Ngcr+~umJpM&=!lPI>=v0 zJ&N1B)}m>)Og`C~#8LEf6Or9;Ms7-#a%*9IQ-L_L$GgI7fEmV(n zN7wiDM3-TJs6{)%mL$z?i()&7G)i+~JGj*%1JMs~Yr2ci*tn_`6whj2A4z+O;kHW6i#94^tID_7MT z-P*f-JIz&&)|^U3ySK*s*2mKMWU_EbnIWW!p%IA-7!L46iephl@xB0-H7)la)l4&lACrf6du-tv;-5^M&pr- z8A|1pvNgbx>gw%GkFFpAkwjmv!t!vYr(;`Vad>C0mfV+94LNb7xkRaAStKP9tO*J1 zrmTd+!MYu0Z@g=5wAJLJ0-XpTMNnR#5g2H`YMDii6v85KdeO(IIqp zWTw1GMEK&~Se&C3A;a~OfjYHn8&%0D&n>K7W_@Hkp`6zcV2?pu+#S#7TbeX`dx#)4 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 literal 0 HcmV?d00001 diff --git a/Source/1.4/LightsaberPatch/refs/1.4/SWSaber.dll b/Source/1.4/LightsaberPatch/refs/1.4/SWSaber.dll new file mode 100644 index 0000000000000000000000000000000000000000..25e32a1fe03b73ef9f0fa6a1b6d67c20de6d9043 GIT binary patch literal 16384 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 + + + net472 + + + + + + + diff --git a/Source/1.4/ModRequestAPI/ModRequestAPI.csproj b/Source/1.4/ModRequestAPI/ModRequestAPI.csproj new file mode 100644 index 00000000..bc2ce84c --- /dev/null +++ b/Source/1.4/ModRequestAPI/ModRequestAPI.csproj @@ -0,0 +1,22 @@ + + + + net472 + Library + disable + disable + false + 11 + none + + + + + + + + + + + + diff --git a/Source/ModRequestAPI/ModRequestClient.cs b/Source/1.4/ModRequestAPI/ModRequestClient.cs similarity index 100% rename from Source/ModRequestAPI/ModRequestClient.cs rename to Source/1.4/ModRequestAPI/ModRequestClient.cs diff --git a/Source/PerformanceOptimizerPatch/PatchCore.cs b/Source/1.4/PerformanceOptimizerPatch/PatchCore.cs similarity index 100% rename from Source/PerformanceOptimizerPatch/PatchCore.cs rename to Source/1.4/PerformanceOptimizerPatch/PatchCore.cs diff --git a/Source/PerformanceOptimizerPatch/Patch_Optimization_PawnUtility_IsInvisible_DoPatches.cs b/Source/1.4/PerformanceOptimizerPatch/Patch_Optimization_PawnUtility_IsInvisible_DoPatches.cs similarity index 100% rename from Source/PerformanceOptimizerPatch/Patch_Optimization_PawnUtility_IsInvisible_DoPatches.cs rename to Source/1.4/PerformanceOptimizerPatch/Patch_Optimization_PawnUtility_IsInvisible_DoPatches.cs diff --git a/Source/PerformanceOptimizerPatch/Patch_Optimization_RefreshRate_DrawSettings.cs b/Source/1.4/PerformanceOptimizerPatch/Patch_Optimization_RefreshRate_DrawSettings.cs similarity index 100% rename from Source/PerformanceOptimizerPatch/Patch_Optimization_RefreshRate_DrawSettings.cs rename to Source/1.4/PerformanceOptimizerPatch/Patch_Optimization_RefreshRate_DrawSettings.cs diff --git a/Source/1.4/PerformanceOptimizerPatch/PerformanceOptimizerPatch.csproj b/Source/1.4/PerformanceOptimizerPatch/PerformanceOptimizerPatch.csproj new file mode 100644 index 00000000..6046eff2 --- /dev/null +++ b/Source/1.4/PerformanceOptimizerPatch/PerformanceOptimizerPatch.csproj @@ -0,0 +1,56 @@ + + + + net472 + Library + preview + false + true + false + false + Release + AM.PerformanceOptimizerPatch + zz.AM.PerformanceOptimizerPatch + disable + true + none + + + + + runtime + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + False + False + all + + + + + + + 1.4.3901 + + + refs/1.4.PerformanceOptimizer.dll + False + False + runtime + + + + + + + none + ..\..\..\Patch_PerformanceOptimizer\1.4\Assemblies\ + true + TRACE;V14 + + + diff --git a/Source/PerformanceOptimizerPatch/refs/PerformanceOptimizer.dll b/Source/1.4/PerformanceOptimizerPatch/refs/1.4/PerformanceOptimizer.dll similarity index 100% rename from Source/PerformanceOptimizerPatch/refs/PerformanceOptimizer.dll rename to Source/1.4/PerformanceOptimizerPatch/refs/1.4/PerformanceOptimizer.dll diff --git a/Source/TacticowlPatch/PatchCore.cs b/Source/1.4/TacticowlPatch/PatchCore.cs similarity index 100% rename from Source/TacticowlPatch/PatchCore.cs rename to Source/1.4/TacticowlPatch/PatchCore.cs diff --git a/Source/TacticowlPatch/refs/Tacticowl.dll b/Source/1.4/TacticowlPatch/Tacticowl.dll similarity index 100% rename from Source/TacticowlPatch/refs/Tacticowl.dll rename to Source/1.4/TacticowlPatch/Tacticowl.dll diff --git a/Source/1.4/TacticowlPatch/TacticowlPatch.csproj b/Source/1.4/TacticowlPatch/TacticowlPatch.csproj new file mode 100644 index 00000000..6fdb9724 --- /dev/null +++ b/Source/1.4/TacticowlPatch/TacticowlPatch.csproj @@ -0,0 +1,48 @@ + + + + net472 + Library + preview + false + true + false + false + Release + AM.TacticowlPatch + AM.TacticowlPatch + disable + true + none + + + + + False + False + all + + + + + + + 1.4.3901 + + + Tacticowl.dll + False + False + runtime + + + + + + none + ..\..\..\Patch_Tacticowl\1.4\Assemblies\ + true + TRACE;V14 + + + diff --git a/Source/1.4/ThingGenerator/0ColourPicker.dll b/Source/1.4/ThingGenerator/0ColourPicker.dll new file mode 100644 index 0000000000000000000000000000000000000000..2e294d3542d1a7934dd21bf950da5ef8472cd20d GIT binary patch literal 19968 zcmeHvdw5*ck!RgU-+rpCmTbu{Y#ESg>xC>ou!#XnmSii~mTgIX$ReU8UCSM{`pUOk zwuO+96GI>i1PBv`R|X7|F_R1*Fpvp>3=k3~VIhH?3A-T)AxxN%OqhXL=3^mQvcIZx zyVde5=9_Q#kNLJm*Qu&gr%s(Zb*t?08W+|hJJGF{Q!-cd2^4A^x=MWJ&& z)mvJKHfjdl-G0*}x!zuHx znnn4)snR2vh0iCTx1EtmqGoo)@t=E$BH(QtAnH86?sRkoQJ|nc0D40KU6-{FW)edn4~Ez_3B<&=P!Y(r_^-~jQw{{#R=NjY*0mAeg3nr_rUFt> z2jk}ttJKLyJJ%4scOH=@+>Z~sU9=q0<8Y-Fj}nFAGXSbC)Qt&fHTC!$R8%d{$7?`U zT>&;D`uKdn+JHWO7Rnk+kI!W>bYEI;$S|NarjOU6HdI1!OlYWf`Jot!A>AoKF(I;s&Mf9+$^g%XqP6jIU{z>5o6FLAAMIiv;iJ!)fO=(HXd=Yu*>~K&>yjyufjOax zFxOPnKz0IdHuZ%wCW@pCO<<&;yC*PMl%WY2h;rrxEQB&d<=P2YDd;{~uYa zfoB$?O}qkNVi61KaSYCKVKhrzI9&o(vIItEx#uW}PfV8pmnAS(%ROI7AX*B0IakaX zM`t1TA|-*MPy(ZX-AV$X&vslqT>>`eCAKPwOQuU;KzTcMD~Yw!B`TE!X3BDtN}`b^ zFvd_E!w5|*W{HKt8(@!CStd?9T3IfxIa)be9B{O9jtui?H7#!_p_$gN@^3=wa!T>%jv17RDIEyw4*N%2(($RaCj70RjOwUw{H)@3UH8T593 z9(a+fg{&599Q}nbF=}CQVCT)&uk^_T%Vv!6pdEBt`naq@*`sA8I_M>&kITwaTy~Mauel*9jjWPEA8PQAH#8;46xoIcpNLpANw0_#6M zA60TruFv^NIZ7Q4JZW$$d(LTL-;86j&B|J1adlW9=kvpcZZ_nYRC}y~arhm*Gn=Imv4zr1>f<;Ny*8dSvspSgU7AUKT+Vobo;0(o z>WnS%dN|53x2iSkr|U2u@DlPC-tr@=C{mk3Ddq$=S*5-}FtZfxO0BX|e|1w?X`s3x z<{yfg-Jw`uDCX-9$E=t?7Ep`L@~dSYUx~I(1KPy`hN%A%dH3$qa`R~AY4SpIBeST-pC(C$cCQT0NrEEot5bqh~`>^0JD zuzY7x(BJU0d_NoxUN@!n0dmf;kCo^{MW^gU9*Q}`f`&><_MG5QpgXf1yuz-Z%XiI@ zl^bDcy`Nq|--xo9>B|ib+bSlGVfPJyTDYv#te)wQfr%Z)K@(-5cBEdoCm5VJ~Z*gd;xA!R#aAMRc{KG`gsnQT9`KEvr|3C{If5sF#^?^ z-&w))rY6f1kty^wJkM^8AzZoH&QjbCcjiFO-eAc8qyON0#vQk_wmyW2rRe(W0|4Fk?Dp| zAf5G=%8*(yLvdD7qG4-CB8xiC^LOSYd25+2sh4PHC~1`FCza$42s))uy&EEz@3c@r zMp$B=pb9xPjO8bhT}svLZs=rMsq~$+1v`DM66;1g9;??JjhPaG-QZ1WvPyh~!vLk6 z=vjG+R{lTUKl)k=WB3uOdl!gF5Uhc=qlgOpPoF2tB>lV|z;|0&fp%k)_12=3AjwALqar+MVP* zYJDLiZ27x&Ndg_%XT>+5GGfHrP~eC^7_=@cHG|gfQk-jXs0cb3j#X-v$l=IJyOD$_ z^}InyH(nt@2#c-wC!sCok6((SCWw>G^M&7wny3z$sfdx>A<%Fnz7g_rZkY6!7!Qt` zm?275e;H(1d=u;Q>$By0CcYVz(+)6yS+{o$p?F)slQ~sq91bn4e%yzQbLbo=vJ-)a z(?vamt4Hi9sjX0?kK_5noV{$JYPc<@+uK}s@xv9eX6p>>Eox(7}wg{_69eC}sYTJ86m zdvh?T%e`l;JiZ+|4Ll21%A&wj-?Mgid<=zba@ou21?bJGB z9k|?qE>X2J-UCAC9M!a(%cSC@0_gMf0_XfOfphZ$eARi1kra;M_K!IRY+t805u5($ z1uFiSKxJM)IeyCA8R~pP!TYi2T~NGd$~2&iUi*B$)PmuCQ~qI^(*B7~@0)7zB!&pp_r8h7=)d2q7%b?nswN$GYL< z9?OX@bbNA`V{u}-7aZ?Syw!aG4$|dXJ)UHH&ejdd(gnfVvjo8@s}SA`g%ism=u2_1 zgB&LV6RfJH%%`Du@_d-e!EaSH9AeyXhPb;rA)FNB%652_&|NHp{lE%Y#ssF;6e;T? z3#;DB3`5vS11uJHnKjNLjss40nXsmmmhW;#z@K6)oLT=q>WjLP`BD(m*9wbKmlwU7~IrAgyT8L+^0|5Sc#{Ubzq3Z!EYs(iOx&g>X){R{8 z1?Ek1O?l=fz^YfVLJncuE|k0lWaf*^o8%fOy_GqvbY@xRPf*}_&X61fbB_BM9xK~k z&Uaw!2j@!wwf^{RD5`x^$ACW0j*I^(fT1Mg*lt6iDG5BRvx4{?05zL+OS$zFJ=D}9 zD-j2)UhhOBHACY(4VAU};wt57=PuCVJDtwPdSh@{v*Y zkycga$wOA{C6KRGY9u!1czV#JqR|+NBgx|9yF318K!&W{`AAxcvGM|q-@~ozGWVjG z!X#euM`nqNH%a*PNf!moBU77Fqr!~XMI;&Gs?R_@AQFgO7SKxA06v- z$5}^%L2L~4p|*^W)uB0Eh_4^twfN%jC+s5xBjtC}a+K&+e*b2C5xz6=<#ran2ENcM zUsxDqKG*zsR3!)PNycwBE7;7M~sUS=KchR3M zV!SKF@b9JVzeZWxC4n92aiQ@h@H?cJU-%FELbN&Zrmu_^7_9$!A9G#;XD-c^R#|EF z&pwuU7rmF!Eh4iRmWQzYvHcI5+-hHdIhO-kbPWB5s1bTBx-M|GVbOc$*+z(NHCg7# z5W}7@*FG9$$x%p#=)0)3=xuWc2QIA@H*@T0nDvryRd}i3%>L_0RX9m?)FgGEC8p|; z%NnRmVGa_siaJ0QLxS*I%|%QtDyGAj$|PM(U1--3diqPN9@UPz0R6K^b)ham zGtN~#bZZ$cNb^1Fa;;nsQm04Npk0UtJgNchLUfl$S*Q!s*E}kMx-k9HqppR{2)*Y~ zH$rEGYAU5ax)wW35#8@mZ@{ZXbkAZ{_p(qu=PBxc3iUmYI)WXdh~~wW)kpM&W)WTB zQC&iHcvOW@jz_&J)NLO1q)<Cb)VLUN}^-3GtU zpm#jV7OE2`713d85b7n5`YWv#$G{`iqLZH2SK{}w?|9Th!As1UR9vI#z7j0gXHl(3 z-2tkMHVX9}dK>#+ISxsde2)5sn(a|Pk1Wy4>CvTJcbHx+TB6UUBMpjrDYQhNLu-~P z>bIcg(t94YIJ`ukM;n)`x;rB+=6rhEqx_&2((((q?zzDI{#7`yj|lZ88r9lyBYK~z zqrb%*EvARPy1jumeK9>N)L~ji<@$N_f=6XR#py>L^&L=4=rxae15_3L%A?)|RZZ`B z6d`(Q=mU?M0jietRm$oGpz0{>QMK43&!?F}-8}oj@VB*ksub#)z~32S+zUEQ=QunM-*I=bu)Icxfsam6f&f~)w z>-JOr&9s`%_o%)8?|~W+>PyHI#&Cu|>`~W6Z^fSemXf5p=n{P`-SY|7ax*393cZnD z@~FenEA%FM%cDMH-e#<$B3xjgKe45SW(oCKJWYJcY@u_6Ql4m~^9v+fX_Y4#rbR|8 zb$Zld+F@`uq0yv&3f>$pF4pPEKyfkNTf#v(y|z&DMEuW?yXYi8P|>fTQ>VuQoP~V7 zi1jE=S&;F+z*#pPt{0it!_4;!zFgpDfz^OI?E*Atjc^tSCnlVfaON8<(*$VHEiwuufrxKI(vwuw53}5-^ z%YYVL1dg9t@{-DLQ}W!`bPdemyX50N%>Mr$V&_-Io;PK7?u-WMSQzIJpha^4L$n02 zn3f7$EwE8wo4~CCcL{u0;NyT6eP8fjQ=2x6-o=COJmiwDe<^)HHzFfQ5bpqo=>eSQ zAJA<@D}d9CivW*>*8<)cY=!){iZ;_ede_$hcr3gVd^gmKwyZxv7vTI)(4FQ0ve9GV zVVs-13iiR*7ty)GsUcno%Yi>YLGAj`qp00)Tm+axPO*=!68tLdX|(0_R3mU7wHiO5 zUsFZkRa!%@nBSw@=||CD1HKr27x~e#u&E{K-9QNN@1hp;91G6{-WOS>#k7Zg7i&T7 zGr^63$>>JyUa3t`qG+3zkbU-E8VY8>pAfh^%J=}_9PK&Z0d0x)GjmegM_-M0&>ZcC z@aMp}FM5NvR2vU{36g(-)B9d}q$s1UMlZ+E>fz9XkO`QNYK>Y~_(^b%g}x2>UdXp; zZx%fdc$e=bz_hUn^YP!1MYd^vWC(}pTfv{8ZAJ7w*!GIg)OTs`7ZvOG(!+sr;OX#u zeII=jmMqbp51b8tyI9*5E!XGEzH%>RajMh^-ljcnp0Cf*<_1^j%jw7d)q0yYS+o@X z=e=>CcCC3#TTYvU>mbt@Y||66(~oICFx&Kv@REf$7`b+%$ajJ>49k7>7s+rasa-=cf9z2R&1 zhqbQ24S=n9@_1bPee{d^Gun3pU)EoietRUR>yezUM{>Fz$>4eCagm$je!-q*8YXAdIr3jIpKk6^9Ej3biM9l@2vBIA1D&j+jppYyvTIN^2}w|Z@P z7p{@oD@F4@`ntihzsJ|6FVP%x(0G@A5ltI+N$vd-lP_yO^?lX|YReE~LG6b{pEvd) zO1}Wj?8zSDz5Hd3y-~uMt5HI;00Ve)`76MGB%B`${28E5zo4g3`%95|iyi|0TY3!e z9r`9!_5z2sn=(0X&DE0Ia5Ll$#QAN(PKs|3C#@LhqgYh3%3KutKu{M^g7Aiv5}6g><$=D!-bIa{S+Z#U%Y18(98 zpWi0-1Nw1yq2srzF!(`09ltvi0S^P}6hUsN0h<9liuu%l#ef%MHh8x#1u1b4cJV`j4+Sq zL)%8cDjK8=T}wCOcHj+qTidL6>yPQr>Tl`4*9{|NEH-+KtZ}7bPV$LU_%U&2!4>(> z-Nr$jJ1k|=8x`kVsw(~zxxn$C8168R|L|)M$A3O3RPR-85IOd;1;6_}3j*Fd>`{~- z&>i~k=pnwqSab2}-rl7Rz4f%FHRU9-^-C}A%Q2*C8CPwv4+>j|y8f)=GPzr#nK<^pCm4h*nFJ#9~4{93wvq>inWMeXuMKMiZ1GSE(`!8>x?KYd)Fuiu! zbaMH0a>aBKPpE~KUND_p#jc|@o1B5slzlOEIvcXXDRoP=ZGBTC4cgh>M#>26O{7Nl zCYsi-b5f4mNE4b8O9wc&wArAs>KfOBm($LY;X zBU$H`WdBfsz{oUG1YCQ6(ms$^F*2Q&QE-P!QPcWDBl0|Dah~Kx8%FIst?Vx3^zJRF zW^wk+sC!(CwJ_f@+Mf^Q&PDpJQ- z2JPzF+C}3wsoAESFL($3?FXh3^WU*u*xQA@o%SbEqjqmEwHzFAGInz!n~>@OI|Xbw z)9<*cWFIe|To)K_3PFq5&eW~9)3%%Jr{QEeIgBNg$%5EsCk6;BOY~qtPLz$diq5Zf!j7U?+nmw#0BvzH$!v1Jjpalg z{cf_)rv4P%)}CIM;+P$1AI)YE>x7}M!@m;}7Yup$M#mXKLz_0i2Z=$O+S2=-A)A^; zvsot%BAH2IQ=tyrAfsqa0(7O5*|C=NU@~pjwQa>A#v`zs_;lAgu3cY#zimJB@`0 zeJ81JOOK3ZH`;@V{xPq%!_IC-qjgR?>pH2;iD8@8Im3PEyHGKu9WYw<+v#lQ*oYcp zmXVGFi4pD;y8vyr56C3(+HiABp1mC2m4R}09d){6TM{mi?KZ9MJbZKLUIa@ZDrHrbauDsVEZ20l*sPgLw$pYddvYj*ytn%5Vu$($!rey_Bd}ab)L6bDi=djhZ{~h zb;?n1HizYOcO>@bRD0+~XApbcpo%4olMrWYlDI)lUaOPBQrg1IOh0cOJCXyyy~9iq z61BqS1NDFs=uf0leTjY~*;xOyG0|tIL@h7v%oeCj9t5X%bQ+1JsQBCLVP`)M(-hSg zo-=g=;NYNvp;=z2?R#3Cek_~;Z}DP&uto33jLTXksm&2GQ#dWW9i2FZA?(cUBX(L$ zJGd#CmRJyk#mAV_JB;;%(iuS}#k&=L5SL9@r8WslAm2>})|CHKqshHEhW+?+M@6w|`WA%tqy>{5&C0`l&_$um$%L;*Rc zmFZwFDU+mG0ogz5dKJAH!aua#pUC7w17jOZJDf{oD4R>W+XgZ+Ksk={qPe{wcRqC3 z?*3%I4N*B2)X4`D>zTK4UcP9{>4S^~YaGX8A_bne;9!edGGNI8&o0j8J4%XE)m%6! zn^fFn@X|zvlxs4`f_TSMLj+fCfH@M|1%fq01Ia;b0@Up6NTvsz1H3@dD1&4SsTAvw z#h=CTm&Q|t3KJ;Kk~`QZju2vRX8#m1fYVuVM^y>m_S-38CDT%N9`?U1LfLB&#Z*otTdiU@%&;~m>xHs!j*)iPJMT!6 zsZOUYos}s?cNn#Ff~asAm-IqHrWHP+_1NMBVYTa!ie+&yAcna>7UQK*oLe9oMJH0V z1C;2?IBuVaG-6q%2b7zor-N#PQ~0LDK|#hC8TJU|ej>vq1|ZLejHhkRVhA1s#2^oH zkV>aWO+^j<@%R`ux(wOiLDwFm#Aw!O92rTCAv80{uf}*AZP_;p#aY4I(squL*zC&6 zF--pDe z&@HqRFCnahH7R`Ax-Gbs9td;vpV01~? zHVB$W$Tp_op$cGAnlhmGNV{Rdl4xu58y0g;)gL8KRg)V{p(PpEvHuM1$ignRX37Sh zqnzEjUa{R`>L)+=ePiXny|wP4q6crk<*NIBNM?nm1&j*Pd_ZC`CZo8vipEysLM0lF z2K?HrSeq7Wv{V66UAF>e1;rY5E8?rrwMYbaTd~GiV+7n%zJ7_VwkizpBaA~#_suG4 z(L{LuY~aOOBua*qk*KO-7?rB1SB1`V%!{;W2!_onnLMnO@+}WkM@+vKTkR(!wi*Om zUy6G)6TIRG|G_3bS`15A2@C3a$)=J`7@JnIDdG=CB7s08QnDft;4uUOepnm`K+tc3 z83Aqb2qMM)V9AQJVyp3AKt7=g9|QvdF!1h4$qE#H89p2adBciro$oJ-Z9UZ=JQxX( zuEn;NOx|q4tk_nat%82Mt`XZBC|P0RMY}-6ulj>cv8~VzO2oEeC=lZb($JQF*fIQY zE>X$kpZhQ`lMk?K8qo(&3J`A!yVMkR&ES{ow?=hcmnrQs;XB>(8{pyQ9EMCj%q(aG z-USQMTU5ehtEhhrT{0agC5#2`gXaSZRnDNmk`PJ*o#lql8(4lu{Jd?1Ny`g0X0d&LeCsgd(cYQOrjTtJ>nTA!e0_AE88nINkzzS1E z6qOv4jmk%eZ*L(pEt7?aS?$AoqhBn6*lM+2)N03q#$v#<6ql@E1g{hEit#vJyT%~5 zlXwr{A6W8o(0Hda{%w7@bx->Hfc1!ZgWd#{wci1dycyZFW6mB*8nBanfXfZ#+Dy(W^${F zd`*Q&m*D1o+Jh0^i^I>ycx<*4xJD3SDc;+|AKvTJ$R~tCn_HT?*5eq&HFq074SAn6 zH2z)EHf>>Zv-sXKfNyKAmM0JI4C8wqzBAFqOz0^5@OyrRpKTq@9i@+b#XS4j_NG5+ z{_Cc%|J=Eebu?etg9mv2|IB21IDQJ8=It(1Qz_ zOpi())e}RH)A#8fZ+m^>ssr^GGlpODZ>DvCUQvAjp(QF)< z)4Ne`av}&$;IrHYe0QSeEfu580?x0;Y)6jM3)n*2fVJW6qjao zcvktN%1ac%2dfwQ9s@-)z8bV9kc+f>89*EIl|9G__;aqb>O?K)TNz|2ob7p8o=7}o zZh);CY{J8UmvNk^>0FVi#~X&~Z#ne=!_O)BrAou^NDi{C5$R(LBf@+d^Iz_>1oG^mtjMNeYpTHF zQ}#=sVP4Z-Wz3~;R*zvsr*6YO{!j3^ UT)hi@(~AEDWBLC>_}Cu!Kk`;8e*gdg literal 0 HcmV?d00001 diff --git a/Source/AnimationMod/AMSettings/Presets/Default.cs b/Source/1.4/ThingGenerator/AMSettings/Presets/Default.cs similarity index 100% rename from Source/AnimationMod/AMSettings/Presets/Default.cs rename to Source/1.4/ThingGenerator/AMSettings/Presets/Default.cs diff --git a/Source/AnimationMod/AMSettings/Presets/NoLassos.cs b/Source/1.4/ThingGenerator/AMSettings/Presets/NoLassos.cs similarity index 100% rename from Source/AnimationMod/AMSettings/Presets/NoLassos.cs rename to Source/1.4/ThingGenerator/AMSettings/Presets/NoLassos.cs diff --git a/Source/AnimationMod/AMSettings/Presets/VanillaPlus.cs b/Source/1.4/ThingGenerator/AMSettings/Presets/VanillaPlus.cs similarity index 100% rename from Source/AnimationMod/AMSettings/Presets/VanillaPlus.cs rename to Source/1.4/ThingGenerator/AMSettings/Presets/VanillaPlus.cs diff --git a/Source/1.4/ThingGenerator/AMSettings/Settings.cs b/Source/1.4/ThingGenerator/AMSettings/Settings.cs new file mode 100644 index 00000000..25345feb --- /dev/null +++ b/Source/1.4/ThingGenerator/AMSettings/Settings.cs @@ -0,0 +1,468 @@ +using Meta.Numerics.Statistics.Distributions; +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using Verse; + +namespace AM.AMSettings; + +public class Settings : SimpleSettingsBase +{ + [TweakValue("Melee Animation")] + [NonSerialized] + private static bool canModIdleAnims = false; + + #region General + [Header("General")] + [Label("Always Animate Weapons")] + [Description("If enabled, melee weapons are animated whenever they are held, such as when standing drafted or while moving in combat.\nIf disabled, animations are limited to duels, special skills and executions.\n\n" + + "Leaving this enabled can have a large performance impact on densely populated maps.\nPlease reload your save after changing this setting.")] + [WebContent("AlwaysAnimate", true)] + public bool AnimateAtIdle = true; + + [Label("Enable Unique Skills")] + [Description("Enables or disables the Unique Skill system.\n" + + "Unique Skills are powerful attacks or abilities that are unlocked under certain conditions.\n" + + "Only your colonists can use these skills and they must be activated manually. See the Steam workshop page for more info.")] + [WebContent("Skills", false)] + public bool EnableUniqueSkills = true; + + [Label("Animated Pawns Considered Invisible")] + [Description("When in an animation, such as an execution, pawns are considered invisible by all other pawns and turrets: " + + "they will not be actively targeted or shot at. This makes executions less risky.\n" + + "Note that pawns in animations can still take damage, such as from stray gunfire or explosions.")] + [WebContent("Invisible", true)] + public bool AllowInvisiblePawns = true; + + [Range(0.01f, 5f)] + [Percentage] + [Description("A modifier on the speed of all animations.\nHigher is faster.")] + public float GlobalAnimationSpeed = 1f; + + [Label("Individual Animation Settings")] + [DrawMethod(nameof(DrawAnimationList))] + [SettingOptions(drawValue: false, allowReset: false, drawHoverHighlight: false, ignoreEqualityForPresets: true)] + private Dictionary animSettings = new Dictionary(); + #endregion + + #region Lasso + [Header("Lasso")] + [Label("Auto Lasso")] + [Description("If true, your colonists will automatically use their lassos against enemies.\n\n" + + "This only changes the default setting. It can also be configured on a per-pawn basis.")] + public bool AutoGrapple = true; + + [Label("Automatic Lasso Average Interval (Friendly)")] + [Description("This is the average time, in seconds, at which friendly pawns will attempt to use their lasso to pull an enemy into melee range.\n" + + "If their execution is off cooldown and Auto Execute is enabled, they will immediately execute the lassoed target too.")] + [Range(1, 240)] + [Step(1f)] + public float GrappleAttemptMTBSeconds = 10; + + [Label("Lasso Commonality")] + [Description("This is the % chance for any melee fighter pawn to spawn with a lasso equipped.\nSet this to 0% to disable natural lasso generation on pawns.")] + [Percentage] + public float LassoSpawnChance = 0.2f; + + [Label("Enemies Can Lasso")] + [Description("Can enemies use lassos (if they have any) to pull your colonists into melee range?")] + public bool EnemiesCanGrapple = true; + + [Label("Automatic Lasso Average Interval (Enemy)")] + [Description("This is the average time, in seconds, at which enemy pawns will attempt to use their lasso to pull a target into melee range.\n" + + "If their execution is off cooldown and 'Enemies Can Perform Executions' is enabled, they will immediately execute the lassoed target too.")] + [VisibleIf(nameof(EnemiesCanGrapple))] + [Range(1, 240)] + [Step(1f)] + public float GrappleAttemptMTBSecondsEnemy = 40; + + [Label("Minimum Melee Skill")] + [Description("The minumum melee skill required to use a lasso.\nAffects all pawns.")] + [Range(0, 20)] + public int MinMeleeSkillToLasso = 4; + + [Label("Minimum Manipulation")] + [Description("The minimum Manipulation stat required to use a lasso.\nAffects all pawns.")] + [Percentage] + public float MinManipulationToLasso = 0.5f; + + [Label("Max Pawn Mass")] + [Description("The maximum mass that a pawn can have in order for it to be lassoed. The mass is measured in kilograms. You can check the mass of pawns in their Stat sheet.\nSet to zero to disable the mass limit.")] + [Min(0)] + public float MaxLassoMass = 0f; + + [Label("Max Pawn Size")] + [Description("The maximum 'body size' that a pawn can have in order for it to be lassoed.\nFor reference, here are some example body sizes:\n" + + "• Chicken: 0.3\n" + + "• Human: 1\n" + + "• Boomalope: 2\n" + + "• Warg: 3\n" + + "• Thrumbo: 4\n" + + "\n\nSet to zero to disable the body size limit.")] + [Min(0)] + public float MaxLassoBodySize = 3; + + [Label("Lasso Travel Speed")] + [Description("Adjusts the speed (not cooldown) of lassos, making it faster or slower to ensnare and pull in an enemy.\nHigher values make the lasso faster.\nAffects all pawns.")] + [Range(0.1f, 5f)] + [Percentage] + public float GrappleSpeed = 1f; + + [Label("Max Building Fill For Lasso Drag")] + [Description("The maximum 'fill' percentage of a building that a pawn can be dragged through by a lasso.\n" + + "Lower values mean that pawns can not be dragged through/over partial cover such as sand bags or embrasures. " + + "A value of 100% means that the lasso can pull pawns though/over anything except completely solid walls and buildings.")] + [Percentage] + public float MaxFillPctForLasso = 0.2f; + #endregion + + #region Executions & Duels + [Header("Executions & Duels", order = 0)] + + [Description("Entirely enables or disables the execution system. Disabling this means that no pawns will every be able to do executions, " + + "and the option is removed from the UI.")] + public bool EnableExecutions = true; + + [Description("If true, your pawns will automatically execute enemy pawns in combat, without your input.\n" + + "This may include opportunistically using their grappling hooks if the Auto Grapple setting is enabled.\n\n" + + "This only changes the default setting. It can also be configured on a per-pawn basis.")] + [VisibleIf(nameof(EnableExecutions))] + public bool AutoExecute = true; + + [Label("Enemies Can Perform Executions")] + [Description("Can enemies perform execution animations?")] + [VisibleIf(nameof(EnableExecutions))] + public bool EnemiesCanExecute = true; + + [Label("Execution Failure Chance (Low Skill)")] + [Description("The chance that an execution attempt will result in failure, stunning the attacking pawn and leaving them vulnerable for a short time.\n" + + "This is the chance when a pawn has 0 melee skill.\n" + + "Affects all pawns.")] + [Percentage] + [VisibleIf(nameof(EnableExecutions))] + public float ChanceToFailMinSkill = 0.15f; + + [Label("Execution Failure Chance (High Skill)")] + [Description("The chance that an execution attempt will result in failure, stunning the attacking pawn and leaving them vulnerable for a short time.\n" + + "This is the chance when a pawn has 20 melee skill.\n" + + "Affects all pawns.")] + [Percentage] + [VisibleIf(nameof(EnableExecutions))] + public float ChanceToFailMaxSkill = 0.03f; + + [Label("Automatic Execution Average Interval (Friendly)")] + [Description("This is the average time, in seconds, at which friendly pawns will attempt to start an execution animation on the enemy they are currently fighting.\n" + + "For example, if this is set to 5 and your pawn is fighting in melee, an execution animation will be triggered on average after 5 seconds.\n" + + "This does not affect execution cooldown, which is a pawn-specific stat.\n\nLower values can greatly impact performance on populated maps.")] + [Range(0.5f, 240)] + [Step(1f)] + [VisibleIf(nameof(EnableExecutions))] + public float ExecuteAttemptMTBSeconds = 10; + + [Label("Automatic Execution Average Interval (Enemy)")] + [Description("This is the average time, in seconds, at which enemy pawns will attempt to start an execution animation on the target they are currently fighting.\n" + + "For example, if this is set to 5 and an enemy is fighting in melee, an execution animation will be triggered on average after 5 seconds.\n" + + "This does not affect execution cooldown, which is a pawn-specific stat.\n\nLower values can greatly impact performance on populated maps.")] + [Range(0.5f, 240)] + [Step(1f)] + [VisibleIf(nameof(EnableExecutions))] + public float ExecuteAttemptMTBSecondsEnemy = 30; + + [Description("Allows animals to be executed.\nYou are a bad person if you enable this.")] + [VisibleIf(nameof(EnableExecutions))] + public bool AnimalsCanBeExecuted = false; + + [Range(0, 10)] + [Percentage] + [Description("A general modifier on the lethality of execution animations. Higher values make executions more lethal. Affects all pawns.")] + [VisibleIf(nameof(EnableExecutions))] + public float ExecutionLethalityModifier = 1f; + + [Label("Executions Are Non Lethal On Friendlies")] + [Description("If enabled, execution animations on friendly pawns are always non-lethal regardless of other settings.\nPrisoners and slaves are considered friendly.\n\nUseful when trying to stop a mental break or prisoner uprising without causing a bloodbath.")] + [VisibleIf(nameof(EnableExecutions))] + public bool ExecutionsOnFriendliesAreNotLethal = true; + + [Label("Execution Armor Strength")] + [Description("A multiplier on the effectiveness of armor when calculating execution animation outcome.\nLower values decrease the effect of armor on the outcome, higher values increase the strength of armor.\nSet to 0% to make armor be ignored.")] + [Percentage] + [Range(0, 5)] + [VisibleIf(nameof(EnableExecutions))] + public float ExecutionArmorCoefficient = 1f; + + [Description("If true, executions can destroy specific vital body parts, such as the heart or head.\n" + + "If false, the pawn is simply killed by 'magic' (no specific part takes damage)\n" + + "Note: if disabled, combat log generation does not work properly for the execution, and will give a default message: \"name was killed.\"")] + [VisibleIf(nameof(EnableExecutions))] + public bool ExecutionsCanDestroyBodyParts = true; + + [Label("Amount Skill Affects Execution Cooldown")] + [Description("The amount that melee skill affects execution cooldown time.\n" + + "Higher melee skill means lower cooldown, changing this value increases or decreases the effect of melee skill.\n" + + "Set to 0% to disable melee skill as a factor.\n\n" + + "Note: only affects friendly pawns.")] + [Range(0, 2)] + [Percentage] + [VisibleIf(nameof(EnableExecutions))] + public float MeleeSkillExecCooldownFactor = 1f; + + [Label("Execution Cooldown Factor (Friendly)")] + [Description("This adjust the execution cooldown time for friendly pawns. Lower values decrease the cooldown. You can see the final cooldown time in the pawn's stats.")] + [Percentage] + [Range(0.01f, 5f)] + [Step(0.01f)] + [VisibleIf(nameof(EnableExecutions))] + public float FriendlyExecCooldownFactor = 1f; + + [Label("Execution Cooldown Factor (Enemy)")] + [Description("This adjust the execution cooldown time for hostile pawns. Lower values decrease the cooldown. You can see the final cooldown time in the pawn's stats.")] + [Percentage] + [Range(0.01f, 5f)] + [Step(0.01f)] + [VisibleIf(nameof(EnableExecutions))] + public float EnemyExecCooldownFactor = 1f; + + // Duel visuals: + + [Description("The minimum number of attacks in a duel. Just affects the duration of the animation, has no impact on the outcome of the duel.")] + [Min(1)] + public int MinDuelDuration = 4; + + [Description("The maximum number of attacks in a duel. Just affects the duration of the animation, has no impact on the outcome of the duel.")] + [Min(1)] + public int MaxDuelDuration = 8; + + [Description("The cooldown time, in seconds, after a friendly duel where a friendly duel cannot be started again.")] + [Min(0)] + public float FriendlyDuelCooldown = 60 * 5; + #endregion + + #region Visuals + [Header("Visuals", order = 1)] + [Description("Should pawn hands be displayed holding melee weapons?")] + [WebContent("HandsEnabled", false)] + public bool ShowHands = true; + + [Label("Damage Effect")] + [Description("Enable or disable the damage affect in animations.\n" + + "The damage effect is normally a small, temporary puff of blood.")] + public bool Gore_DamageEffect = true; + + [Label("Blood (filth)")] + [Description("Enable or disable the spawning of blood in animations.\n" + + "The blood is filth that must be cleaned up. Includes modded blood and mechanoid blood (oil).")] + public bool Gore_FloorBlood = true; + + [Description("In order for the animation to transition seamlessly to regular gameplay, execution animations leave the corpse of the victim in non-vanilla positions and rotations.\n" + + "This offset can be confusing however, because the corpse no longer occupies the center of the tile.\n" + + "Note: The offset corpses are reset after a save-reload.")] + [WebContent("OffsetMode", false)] + public CorpseOffsetMode CorpseOffsetMode = CorpseOffsetMode.KeepOffset; + + // TODO finish body size scaling support: + //public bool BodyScaleUp = true; + //public bool BodyScaleDown = true; + + [Label("Move Animation Speed")] + [Description("Changes the speed of the movement animations.\nHigher values increase the speed. This is just a visual change, it obviously doesn't change the pawn's movement speed.")] + [Percentage] + [Range(0.1f, 3f)] + [Step(0.01f)] + public float MoveAnimSpeedCoef = 1f; + + [Label("Increase Animation Speed When Attacks Are Fast")] + [Description("If enabled, the speed of melee attack animations will be automatically increased to match the pawn's melee speed.\n" + + "If false, the attack animation speed will never change however the animation may be interrupted by the next attack animation starting before the last one ended.\n" + + "This is a purely visual change and does not affect combat.")] + public bool SpeedUpAttackAnims = true; + + [Label("Idle Animation Average Interval")] + [Description("Pawns standing with their weapon out (such as when drafted) will sometimes play an animation where they swing their weapon about, flourish it etc.\n" + + "This option controls the average time, in seconds, between the occurrence of this animation.\nSet to 0 to disable the animations entirely.")] + [Range(0, 60)] + [Step(0.5f)] + public float FlavourMTB = 10f; + + [Description("When doing a regular melee attack, the animation will very briefly pause at the point when the weapon intersects the target.\n" + + "This lets you know whether an attack connected, as well as giving the hit a bit more visual oomph.\n" + + "This setting changes the duration of that pause, or disables it entirely. This is a purely visual change and does not affect combat.")] + public AttackPauseIntensity AttackPauseDuration = AttackPauseIntensity.Medium; + + [Label("Weapon Trail Color")] + [Description("The base color of weapon trails. If you set the alpha to 0, trails will be disabled.")] + [WebContent("SweepColor", false)] + public Color TrailColor = Color.white; + + [Label("Weapon Trail Length")] + [Description("A multiplier on the length of weapon trails. If 0%, trails are disabled.")] + [Percentage] + [Range(0f, 2f)] + [WebContent("SweepLength", false)] + public float TrailLengthScale = 1f; + + [Description("If true, the name of pawns is drawn below them, just like in the base game.\nIf false, the name is not drawn, for a more cinematic animation.")] + [WebContent("ShowNames", false)] + public bool DrawNamesInAnimation = true; + + [Label("Show Execution Outcome Text")] + [Description("Enables or disables the text popup that shows the outcome of an execution (i.e. injure, down or kill) when an execution animation plays.")] + public bool ShowExecutionMotes = true; + #endregion + + #region Performance + [Header("Performance", order = 2)] + [Description("The maximum number of CPU threads to use when processing pawns for automatic executions & lasso usage.\n" + + "If set to 0, the thread count is automatically determined based on your CPU, and if set to 1 then multi-threaded processing is disabled.\n" + + "Set to 1 if you experience error spam caused by a mod conflict, although it will decrease performance considerably.")] + [Range(0, 64)] + public int MaxProcessingThreads = 0; + + [Description("When enabled, multiple CPU threads are used to calculate complex matrix transformation needed for animations.\n" + + "The number of threads is given by the Max Processing Threads setting.")] + public bool MultithreadedMatrixCalculations = true; + + [Description("When enabled, offscreen animations are not drawn to save time and increase FPS.\n" + + "This option is only here in case there are unexpected bugs related to this culling.")] + public bool OffscreenCulling = true; + + [Description("The number of ticks between scanning all pawns on the map for automatic execution/duel/lasso opportunities.\n" + + "Higher values can increase FPS at the cost of less responsiveness.")] + [Range(1, 60)] + public int ScanTickInterval = 5; + #endregion + + #region Other + + [Header("Other", order = 3)] + [Label("Friendly Pawn Lethality Bonus")] + [Description("Positive values act as a lethality bonus for friendly pawns (including slaves) in execution & duel outcomes, meaning that they will be lethal more often.")] + [Percentage] + [Range(-1, 1)] + public float FriendlyPawnLethalityBonus = 0f; + + [Label("Friendly Pawn Duel Ability Bonus")] + [Description("Positive values act as a duel ability bonus for friendly pawns (including slaves), meaning that they will win duels more often.")] + [Percentage] + public float FriendlyPawnDuelBonus = 0.1f; + + [Label("Duel Normal Distribution")] + [Description("Higher values make duel outcomes less dependent on duel ability and more on randomness, lower values make the outcome more dependent on duel ability and less on randomness.\n\nTechnical: This is the standard deviation used in the duel outcome normal distribution curve.")] + [Range(0.1f, 2f)] + [Percentage] + public float NormalDist = 0.5f; + + [Label("Show Warning Before Executing Friendly")] + [Description("Prevents you from accidentally executing a friendly pawn by requiring you to hold the [Shift] key when selecting a friendly pawn for execution.")] + public bool WarnOfFriendlyExecution = true; + + [Label("Send Anonymous Patch Statistics")] + [Description("When a mod is missing a patch (that allows the melee weapons to do animations), the ID of said mod is anonymously logged to " + + "let this mod's author know that a patch is needed. The only information logged is: mod ID, mod name, weapon count.\n" + + "You can opt out of this functionality by disabling this option.\nNote: logging does not occur the first time you run the game with this mod.")] + public bool SendStatistics = true; + + [NonSerialized] + public bool IsFirstTimeRunning = true; + #endregion + + private static NormalDistribution normal; + + public NormalDistribution GetNormalDistribution() + { + if (normal == null || Math.Abs(normal.StandardDeviation - NormalDist) > 0.001f) + normal = new NormalDistribution(0.0, NormalDist); + + return normal; + } + + public override void ExposeData() + { + base.ExposeData(); + SimpleSettings.AutoExpose(this); + Scribe_Values.Look(ref IsFirstTimeRunning, nameof(IsFirstTimeRunning), true); + } + + public void PostLoadDefs() + { + animSettings ??= new Dictionary(); + + foreach (var def in AnimDef.AllDefs) + { + if (def.SData != null) + Core.Error("EXPECTED NULL DATA!"); + + if (def.canEditProbability && animSettings.TryGetValue(def.defName, out var found)) + { + def.SData = found; + } + else + { + def.SetDefaultSData(); + animSettings[def.defName] = def.SData; + } + } + } + + public float DrawAnimationList(SimpleSettingsBase self, SimpleSettings.MemberWrapper member, Rect area) + { + float height = SimpleSettings.DrawFieldHeader(self, member, area); + area.y += height; + + float DrawAnim(AnimDef def) + { + var rect = area; + rect.height = 32; + + Widgets.Label(rect, def.LabelOrFallback); + + var checkbox = rect; + checkbox.x += 230; + checkbox.width = 100; + Widgets.CheckboxLabeled(checkbox, "Enabled: ", ref def.SData.Enabled, placeCheckboxNearText: true); + + if (def.SData.Enabled) + { + checkbox.x += 110; + checkbox.width = 200; +#if V13 + def.SData.Probability = Widgets.HorizontalSlider(checkbox, def.SData.Probability, 0f, 10f, label: $"Relative Probability: {def.SData.Probability * 100f:F0}%"); +#else + def.SData.Probability = Widgets.HorizontalSlider_NewTemp(checkbox, def.SData.Probability, 0f, 10f, label: $"Relative Probability: {def.SData.Probability * 100f:F0}%", roundTo: 0.05f); +#endif + } + + return rect.height; + } + + var animations = AnimDef.AllDefs.OrderBy(d => d.type).ThenBy(d => d.idleType).ThenBy(d => d.LabelOrFallback); + foreach (var anim in animations) + { + if (!anim.canEditProbability) + continue; + if (anim.type == AnimType.Idle && !canModIdleAnims) + continue; + + float h = DrawAnim(anim); + area.y += h; + height += h; + } + + return height; + } +} + +public enum CorpseOffsetMode +{ + None, + InterpolateToCorrect, + KeepOffset +} + +public enum AttackPauseIntensity +{ + Disabled = 0, + Short = 3, + Medium = 5, + Long = 12 +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/AMSettings/SimpleSettings.cs b/Source/1.4/ThingGenerator/AMSettings/SimpleSettings.cs new file mode 100644 index 00000000..92dc7cde --- /dev/null +++ b/Source/1.4/ThingGenerator/AMSettings/SimpleSettings.cs @@ -0,0 +1,1272 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.Remoting.Messaging; +using System.Security; +using System.Text; +using AM.UI; +using AM.Video; +using ColourPicker; +using RimWorld; +using UnityEngine; +using Verse; + +namespace AM.AMSettings; + +public abstract class SimpleSettingsBase : ModSettings +{ + public string GetName() + { + string translationKey = GetType().FullName; + if (translationKey.TryTranslate(out var result)) + return result; + return PresetName; + } + + public string GetDescription() + { + string translationKey = $"{GetType().FullName}.Desc"; + if (translationKey.TryTranslate(out var result)) + return result; + return PresetDescription; + } + + public virtual string PresetName => null; + public virtual string PresetDescription => null; +} + +public static class SimpleSettings +{ + [DebugOutput("AnimationMod", onlyWhenPlaying = false)] + public static void OutputTranslationKeys() + { + Log.Message(GenerateTranslationKeys(Core.Settings)); + } + + public delegate float DrawHandler(SimpleSettingsBase settings, MemberWrapper member, Rect area); + + public static readonly Dictionary DrawHandlers = new Dictionary + { + //{ typeof(string), DrawStringField }, + { typeof(byte), DrawNumeric }, + { typeof(sbyte), DrawNumeric }, + { typeof(short), DrawNumeric }, + { typeof(ushort), DrawNumeric }, + { typeof(int), DrawNumeric }, + { typeof(uint), DrawNumeric }, + { typeof(long), DrawNumeric }, + { typeof(ulong), DrawNumeric }, + { typeof(float), DrawNumeric }, + { typeof(double), DrawNumeric }, + { typeof(decimal), DrawNumeric }, + { typeof(bool), DrawToggle }, + { typeof(Color), DrawColor } + }; + public static Func SelectDrawHandler { get; set; } = DefaultDrawHandlerSelector; + + private static readonly Dictionary settingsFields = new Dictionary(); + private static readonly Stack saverStack = new Stack(); + private static readonly Stack loaderStack = new Stack(); + private static readonly Stack modeStack = new Stack(); + private static readonly HashSet allHeaders = new HashSet(); + private static readonly List presets = new List(); + private static MemberWrapper highlightedMember; + + internal static string TranslateOrSelf(this string str) => str.TryTranslate(out var found) ? found : str; + + private static string GenerateTranslationKeys(SimpleSettingsBase settings) + { + FieldHolder holder = GetHolder(settings); + + var str = new StringBuilder(1024); + string settingsType = settings.GetType().FullName; + + void Emit(string key, string contents) + { + str.Append(" <").Append(key).Append(">").Append(SecurityElement.Escape(contents)).Append(""); + } + + foreach (var member in holder.Members.Values) + { + var header = member.TryGetCustomAttribute(); + if (header != null) + { + Emit($"{settingsType}.Header.{EscapeXmlName(header.header)}", header.header); + } + + Emit($"{member.TranslationName}", member.DisplayName); + Emit($"{member.TranslationName}.Desc", SecurityElement.Escape(member.GetDescription())); + } + + return str.ToString(); + } + + private static string EscapeXmlName(string name) => ReplaceAll(name, stackalloc char[] { ' ', '&' }, '_'); + + private static string ReplaceAll(string input, ReadOnlySpan chars, char replacement) + { + for (int i = 0; i < chars.Length; i++) + { + input = input.Replace(chars[i], replacement); + } + return input; + } + + public static void Init(SimpleSettingsBase settings) + { + if (settings == null) + return; + + var type = settings.GetType(); + if (settingsFields.ContainsKey(type)) + { + Log.Error($"Already called Init() for settings class: {type.FullName}"); + return; + } + + var def = new FieldHolder(settings, type); + settingsFields.Add(type, def); + + presets.Clear(); + + foreach (var t in Assembly.GetExecutingAssembly().GetTypes()) + { + if (t.IsSubclassOf(type) && !t.IsAbstract) + presets.Add(Activator.CreateInstance(t) as SimpleSettingsBase); + } + } + + private static FieldHolder GetHolder(SimpleSettingsBase settings) + { + if (settingsFields.TryGetValue(settings.GetType(), out var found)) + return found; + + Init(settings); + return settingsFields[settings.GetType()]; + } + + public static void AutoExpose(SimpleSettingsBase settings) + { + var holder = GetHolder(settings); + + foreach (var member in holder.Members.Values) + { + if (member.ShouldExpose) + member.Expose(settings); + } + } + + public static object SmartClone(object obj) + { + if (obj == null) + return null; + + // Values types are just fine being passed back, since it will be a copy by the time it is assigned back. + if (obj.GetType().IsValueType) + return obj; + + // Defs are not cloned. They are just refs. + if (obj.GetType().IsSubclassOf(typeof(Def))) + return obj; + + // Lists... + var type = obj.GetType(); + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) + { + // Make new list of appropriate type. + var param = type.GenericTypeArguments[0]; + var generic = typeof(List<>).MakeGenericType(param); + var list = Activator.CreateInstance(generic) as IList; + + // Copy over each item from the original list. + var origList = obj as IList; + foreach (var item in origList) + list.Add(SmartClone(item)); + return list; + } + + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary<,>)) + { + // Make new dict of appropriate type. + var param = type.GenericTypeArguments[0]; + var param2 = type.GenericTypeArguments[1]; + var generic = typeof(Dictionary<,>).MakeGenericType(param, param2); + var dict = Activator.CreateInstance(generic) as IDictionary; + + // Copy over each item from the original list. + var origDict = obj as IDictionary; + foreach (var key in origDict.Keys) + { + var newKey = SmartClone(key); + var newValue = SmartClone(origDict[key]); + dict.Add(newKey, newValue); + } + return dict; + } + + if (obj is ICloneable cl) + { + return cl.Clone(); + } + + if (obj is not IExposable exp) + { + Log.Warning($"Cannot create clone of type '{type.FullName}' since it is neither IExposable nor ICloneable."); + return obj; + } + + // Try to make clone using IExposable. + if (Activator.CreateInstance(type) is not IExposable created) + { + Log.Error($"Failed to create new instance of '{type.FullName}' because it lacks a public zero argument constructor or is abstract."); + return null; + } + + // Write to temp file. It would be nice if this could be done to a memory stream - unfortunately the fields are not exposed and I don't want to + // make a hacky workaround using reflection, with it being such an important class. + PushNewScribeState(); + try + { + string tempFilePath = Path.GetTempFileName(); + Scribe.saver.InitSaving(tempFilePath, "ROOT"); + exp.ExposeData(); + Scribe.saver.FinalizeSaving(); + + // Load back from the temporary file. + Scribe.loader.InitLoading(tempFilePath); + created.ExposeData(); + Scribe.loader.FinalizeLoading(); + } + catch (Exception e) + { + Log.Error($"Exception when cloning using custom scribe: {e}"); + } + finally + { + PopScribeState(); + } + + + return created; + } + + public static string MakeDebugString(SimpleSettingsBase settings) + { + if (settings == null) + return null; + + var holder = GetHolder(settings); + var str = new StringBuilder(1024); + + foreach (var member in holder.Members.Values) + { + str.Append('[').Append(member.MemberType.Name).Append("] "); + str.Append(member.Name).Append(" : ").AppendLine(member.DefaultValue?.ToString() ?? ""); + } + + return str.ToString(); + } + + private static void ShowPresetsDropdown(SimpleSettingsBase settings, FieldHolder f) + { + var items = new List(presets.Count); + foreach (var pre in presets) + { + var p = pre; + items.Add(new FloatMenuOption(pre.GetName(), () => + { + SetToPreset(settings, p, f); + Core.Log($"Set settings to preset {pre.PresetName} ({pre.GetType()})"); + }) + { + tooltip = pre.GetDescription() + }); + } + Find.WindowStack.Add(new FloatMenu(items)); + } + + public static void DrawWindow(SimpleSettingsBase settings, Rect inRect) + { + if (settings == null) + return; + + SimpleSettingsBase currentPreset = null; + foreach (var p in presets) + { + if (AreEqual(settings, p, GetHolder(settings))) + { + currentPreset = p; + break; + } + } + + var holder = GetHolder(settings); + + if (Widgets.ButtonText(inRect with {height = 24, width = inRect.width * 0.2f}, $"{"SimpleSettings.Preset".Translate()} {currentPreset?.GetName() ?? "SimpleSettings.Preset.Custom".Translate()}")) + ShowPresetsDropdown(settings, holder); + if (currentPreset != null) + TooltipHandler.TipRegion(inRect with {height = 24, width = inRect.width * 0.2f}, currentPreset.GetDescription()); + + var tips = inRect with {height = 24, x = inRect.width * 0.2f + 20}; + Widgets.LabelFit(tips, "SimpleSettings.ClickToReset".Translate()); + Widgets.DrawLineHorizontal(inRect.x, inRect.y + 30, inRect.width); + inRect.yMin += 38; + + var baseArea = inRect; + Rect tabBar = inRect; + tabBar.height = 28; + + highlightedMember = null; + float totalWidth = inRect.width; + inRect.width *= 0.7f; + inRect.y += 28; + inRect.height -= 28; + + Widgets.BeginScrollView(inRect, ref holder.UI_Scroll, new Rect(0, 0, holder.UI_LastSize.x, holder.UI_LastSize.y)); + var size = new Vector2(inRect.width - 20, 0); + var pos = Vector2.zero; + string currentHeader = null; + string selectedHeader = holder.UI_SelectedTab; + allHeaders.Clear(); + + foreach (var member in holder.Members.Values) + { + bool isCurrentTab = currentHeader == selectedHeader; + + var header = member.TryGetCustomAttribute(); + bool didHeader = false; + if (header != null) + { + currentHeader = header.header; + allHeaders.Add(header.header); + isCurrentTab = currentHeader == selectedHeader; + + float headerHeight = 32; + + if(isCurrentTab) + { + var headerRect = new Rect(new Vector2(pos.x, pos.y + 12), new Vector2(inRect.width - 20, headerHeight)); + string headerText = $"{settings.GetType().FullName}.Header.{EscapeXmlName(header.header)}".TryTranslate(out var found) ? found : header.header; + Widgets.Label(headerRect, $"{headerText}"); + + pos.y += headerHeight + 12; + size.y += headerHeight + 12; + didHeader = true; + } + } + + if (!isCurrentTab) + continue; + + var handler = SelectDrawHandler(member); + if (handler == null) + continue; + + // Conditional visibility: + if (!member.ShouldDraw(settings, holder)) + continue; + + if (!didHeader) + { + pos.y += 6; + size.y += 6; + GUI.color = new Color(1, 1, 1, 0.25f); + Widgets.DrawLineHorizontal(pos.x + 20, pos.y, inRect.width); + GUI.color = Color.white; + pos.y += 6; + size.y += 6; + } + else + { + pos.y += 12; + size.y += 12; + } + + var area = new Rect(new Vector2(pos.x + 20, pos.y), new Vector2(inRect.width - 40, inRect.height - pos.y)); + float height = handler(settings, member, area); + + var finalArea = area; + finalArea.height = height; + + if (member.Options.DrawHoverHighlight) + Widgets.DrawHighlightIfMouseover(finalArea); + if (Mouse.IsOver(finalArea)) + highlightedMember = member; + + pos.y += height; + size.y += height; + } + + Widgets.EndScrollView(); + holder.UI_LastSize = size; + holder.UI_SelectedTab ??= allHeaders.First(); + + float tabWidth = (1f / allHeaders.Count) * tabBar.width; + int i = 0; + foreach(string tab in allHeaders) + { + var area = new Rect(tabBar.x + tabWidth * i, tabBar.y, tabWidth, tabBar.height); + bool active = holder.UI_SelectedTab == tab; + GUI.color = active ? Color.grey : Color.white; + string tabText = $"{settings.GetType().FullName}.Header.{tab.Replace(' ', '_')}".TryTranslate(out var found) ? found : tab; + if (Widgets.ButtonText(area.ExpandedBy(-2, 0), $"{tabText}")) + holder.UI_SelectedTab = tab; + if (active) + Widgets.DrawBox(area.ExpandedBy(-2, 0)); + GUI.color = Color.white; + i++; + } + + inRect.x = inRect.xMax; + inRect.width = totalWidth * 0.3f; + GUI.color = Color.white * 0.5f; + Widgets.DrawBox(inRect); + GUI.color = Color.white; + inRect = inRect.ExpandedBy(-5, -5); + + if (highlightedMember == null) + return; + + Text.Anchor = TextAnchor.UpperCenter; + Text.Font = GameFont.Medium; + Widgets.Label(inRect, $"{highlightedMember.DisplayName}"); + float titleHeight = Text.CalcHeight($"{highlightedMember.DisplayName}", inRect.width); + Text.Font = GameFont.Small; + Text.Anchor = TextAnchor.UpperLeft; + + if (highlightedMember.Options.DrawDescription) + { + string description = highlightedMember.GetDescription() ?? "No description"; + inRect.y += titleHeight + 14; + Widgets.Label(inRect, description); + + float h = Text.CalcHeight(description, inRect.width) + 16; + inRect.y += h; + } + + if (highlightedMember.Options.AllowReset) + { + string defaultValue = highlightedMember.ValueToString(highlightedMember.GetDefault()); + string desc = $"Default value: {defaultValue}\n\nRight-click to reset to default."; + Widgets.Label(inRect, desc); + float h = Text.CalcHeight(desc, inRect.width) + 16; + inRect.y += h; + + if (Input.GetMouseButtonUp(1)) + { + highlightedMember.Set(settings, highlightedMember.DefaultValue); + highlightedMember.TextBuffer = highlightedMember.DefaultValue.ToString(); + } + } + + if (highlightedMember.WebContent?.BundleName != null) + { + // Web content: + string url = highlightedMember.WebContent.BundleName; + inRect.height = baseArea.height - inRect.y + 72; + + var tex = highlightedMember.WebContent.IsVideo ? VideoPlayerUtil.GetVideoTexture(url, out _) : VideoPlayerUtil.GetStaticTexture(url, out _); + if (tex == null) + { + Widgets.DrawBoxSolid(inRect, new Color(1, 1, 1, 0.1f)); + + var oldFont = Text.Font; + var oldAnchor = Text.Anchor; + Text.Anchor = TextAnchor.MiddleCenter; + Text.Font = GameFont.Medium; + + Widgets.Label(inRect, "Loading..."); + + Text.Font = oldFont; + Text.Anchor = oldAnchor; + } + else + { + var fitted = tex.FitRect(inRect, UI.ScaleMode.Fit); + GUI.DrawTexture(fitted, tex); + } + } + } + + public static DrawHandler DefaultDrawHandlerSelector(MemberWrapper wrapper) + { + if (wrapper == null) + return null; + + if (wrapper.OverrideDrawHandler != null) + return wrapper.OverrideDrawHandler; + + var type = wrapper.MemberType; + + // Enum. + if (type.IsEnum) + return DrawEnum; + + // Everything else. + if (DrawHandlers.TryGetValue(type, out var found)) + return found; + + return null; + } + + private static float GetNumericMin(Type type) + { + return (float)Convert.ChangeType(type.GetField("MinValue", BindingFlags.Public | BindingFlags.Static).GetValue(null), typeof(float)); + } + + private static float GetNumericMax(Type type) + { + return (float)Convert.ChangeType(type.GetField("MaxValue", BindingFlags.Public | BindingFlags.Static).GetValue(null), typeof(float)); + } + + public static float DrawFieldHeader(SimpleSettingsBase settings, MemberWrapper member, Rect area) + { + float height = 26; + + Rect labelrect = area; + labelrect.height = height; + var value = member.Get(settings); + var old = Text.Anchor; + Text.Anchor = TextAnchor.MiddleLeft; + + string label = $"{member.DisplayName}"; + if (member.Options.DrawValue) + label += $": {member.ValueToString(value)}"; + if (member.Options.AllowReset) + label = HighlightIfNotDefault(settings, member, label); + + Widgets.Label(labelrect, label); + Text.Anchor = old; + + return height; + } + + private static string HighlightIfNotDefault(SimpleSettingsBase settings, MemberWrapper member, string str) + { + if (member.IsDefault(settings)) + return str; + + return $"{str}"; + } + + private static void TryGetBounds(MemberWrapper member, out float? min, out float? max) + { + var range = member.TryGetCustomAttribute(); + var minAtr = member.TryGetCustomAttribute(); + var percentage = member.TryGetCustomAttribute(); + + min = null; + max = null; + + if(range != null) + { + min = range.min; + max = range.max; + } + else if (minAtr != null) + { + min = minAtr.min; + } + else if (percentage != null) + { + min = 0; + max = 1; + } + + if (min != null) + min = Mathf.Max(min.Value, GetNumericMin(member.MemberType)); + if (max != null) + max = Mathf.Min(max.Value, GetNumericMax(member.MemberType)); + } + + private static float DrawNumeric(SimpleSettingsBase settings, MemberWrapper member, Rect area) + { + float height = DrawFieldHeader(settings, member, area); + float value = member.Get(settings); + + // Min and max. + TryGetBounds(member, out var min, out var max); + if (min == null || max == null) + { + return DrawNumericTextBased(settings, member, area, min, max); + } + + float sliderHeight = 18; + Rect sliderArea = new(area.x, area.y + height, area.width, sliderHeight); + height += sliderHeight; + + float step = member.TryGetCustomAttribute()?.Step ?? -1; + + // Simple slider for now. +#if V13 + float changed = Widgets.HorizontalSlider(sliderArea, value, min.Value, max.Value, roundTo: step); +#else + float changed = Widgets.HorizontalSlider_NewTemp(sliderArea, value, min.Value, max.Value, roundTo: step); +#endif + if (changed != value) + { + Type type = member.MemberType; + bool isFloatType = type == typeof(float) || type == typeof(double) || type == typeof(decimal); + object writeBack = changed; + if (!isFloatType) + writeBack = (long)Mathf.Round(changed); + member.Set(settings, writeBack); + } + + return height; + } + + private static float DrawNumericTextBased(SimpleSettingsBase settings, MemberWrapper member, Rect area, float? min, float? max) + { + float height = DrawFieldHeader(settings, member, area); + float value = member.Get(settings); + + const float TEXTBOX_HEIGHT = 28; + Rect field = area; + field.y += height; + field.height = TEXTBOX_HEIGHT; + + float minF = min ?? float.MinValue; + float maxF = max ?? float.MaxValue; + float newValue = value; + if (member.TextBuffer.Length == 0) + member.TextBuffer = member.DefaultValue.ToString(); + //Core.Log($"Drawing {member.Name}, {newValue}, {member.TextBuffer}, {minF}, {maxF}"); + Widgets.TextFieldNumeric(field, ref newValue, ref member.TextBuffer, minF, maxF); + if (newValue != value) + member.Set(settings, newValue); + + return TEXTBOX_HEIGHT + height; + } + + private static float DrawToggle(SimpleSettingsBase settings, MemberWrapper member, Rect area) + { + Rect toggleRect = area; + toggleRect.height = 28; + + bool enabled = member.Get(settings); + bool old = enabled; + string txt = HighlightIfNotDefault(settings, member, $"{member.DisplayName}: "); + toggleRect.width = Text.CalcSize(txt).x + 24f + 24f; + Widgets.CheckboxLabeled(toggleRect, txt, ref enabled, placeCheckboxNearText: false); + + if (old != enabled) + member.Set(settings, enabled); + + return toggleRect.height; + } + + private static float DrawColor(SimpleSettingsBase settings, MemberWrapper member, Rect area) + { + float h = 28; + + Color c = member.Get(settings); + float height = DrawFieldHeader(settings, member, area); + + area.yMin += height; + area.height = h; + area = area.ExpandedBy(-2, -2); + + void SelectedColor(Color newColor) + { + member.Set(settings, newColor); + } + + Widgets.DrawBoxSolidWithOutline(area, c, Color.black, 2); + if (Widgets.ClickedInsideRect(area)) + { + var picker = new Dialog_ColourPicker(c, SelectedColor) + { + autoApply = false, + }; + + Find.WindowStack.Add(picker); + } + + return h + height; + } + + private static float DrawEnum(SimpleSettingsBase settings, MemberWrapper member, Rect area) + { + float height = 28; + + Rect rect = area; + rect.height = height; + + string txt = HighlightIfNotDefault(settings, member, $"{member.DisplayName}: "); + float labelWidth = Text.CalcSize(txt).x; + Widgets.Label(rect, txt); + + var value = member.Get(settings); + + if (Widgets.ButtonText(new Rect(rect.x + labelWidth + 10, rect.y, 240, height), member.ValueToString(value))) + { + var values = Enum.GetValues(member.MemberType).OfType(); + FloatMenuUtility.MakeMenu(values, member.ValueToString, o => + () => + { + member.Set(settings, o); + }); + } + + return height; + } + + public static void PushNewScribeState() + { + saverStack.Push(Scribe.saver); + loaderStack.Push(Scribe.loader); + modeStack.Push(Scribe.mode); + + Scribe.saver = new ScribeSaver(); + Scribe.loader = new ScribeLoader(); + Scribe.mode = LoadSaveMode.Inactive; + } + + public static void PopScribeState() + { + Scribe.saver = saverStack.Pop(); + Scribe.loader = loaderStack.Pop(); + Scribe.mode = modeStack.Pop(); + } + + public static bool AreEqual(SimpleSettingsBase current, SimpleSettingsBase preset, FieldHolder f) + { + f ??= new FieldHolder(current, current.GetType()); + foreach (var pair in f.Members) + { + var va = pair.Value.Get(current); + var vb = pair.Value.Get(preset); + + if ((va == null) != (vb == null)) + return false; + if (va == null) + continue; + + if (pair.Value.Options?.IgnoreEqualityForPresets ?? false) + continue; + + // Special check: + if (va is ISettingsEqualityChecker checker && !checker.IsEqualForSettings(vb)) + return false; + + // Regular equality check: + if (!va.Equals(vb)) + return false; + } + + return true; + } + + public static void SetToPreset(SimpleSettingsBase current, SimpleSettingsBase preset, FieldHolder f) + { + f ??= new FieldHolder(current, current.GetType()); + foreach (var pair in f.Members) + { + var vb = pair.Value.Get(preset); + + pair.Value.Set(current, SmartClone(vb)); + } + } + + public class FieldHolder + { + public readonly SimpleSettingsBase ForSettingsObject; + public readonly Type ForType; + public readonly Dictionary Members = new Dictionary(); + public Vector2 UI_LastSize; + public Vector2 UI_Scroll; + public string UI_SelectedTab; + + public FieldHolder(SimpleSettingsBase settings, Type forType) + { + ForSettingsObject = settings; + ForType = forType; + + foreach (var member in ForType.GetMembers(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)) + { + if (member is not FieldInfo && member is not PropertyInfo) + continue; + + bool isInvalidProp = member is PropertyInfo pi && (!pi.CanWrite || !pi.CanRead); + if (isInvalidProp) + continue; + + if (member.TryGetAttribute() != null) + continue; + + var wrapper = MakeWrapperFor(settings, member); + SetOverrideDrawHandler(settings, wrapper); + + Members.Add(member, wrapper); + } + } + + private MemberWrapper MakeWrapperFor(object obj, MemberInfo member) + { + var type = member switch + { + FieldInfo fi => fi.FieldType, + PropertyInfo pi => pi.PropertyType, + _ => throw new ArgumentException(nameof(member), $"Unexpected type: {member.GetType().FullName}") + }; + + // Dictionaries. + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary<,>)) + { + return MakeGenericWrapper(typeof(MemberWrapperDict<,>), obj, member, type.GetGenericArguments()); + } + + // Lists. + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) + { + return MakeGenericWrapper(typeof(MemberWrapperList<>), type.GetGenericArguments()[0], obj, member); + } + + // Defs. + if (typeof(Def).IsAssignableFrom(type)) + { + return MakeGenericWrapper(typeof(MemberWrapperDef<>), type, obj, member); + } + + // IExposable or regular value type. + return MakeGenericWrapper(typeof(MemberWrapperGen<>), type, obj, member); + } + + private MemberWrapper MakeGenericWrapper(Type baseGenericType, Type genericParam, object obj, MemberInfo member) + { + var generic = baseGenericType.MakeGenericType(genericParam); + return Activator.CreateInstance(generic, obj, member) as MemberWrapper; + } + + private MemberWrapper MakeGenericWrapper(Type baseGenericType, object obj, MemberInfo member, params Type[] genericParams) + { + var generic = baseGenericType.MakeGenericType(genericParams); + return Activator.CreateInstance(generic, obj, member) as MemberWrapper; + } + + private void SetOverrideDrawHandler(SimpleSettingsBase settings, MemberWrapper member) + { + if (member == null) + return; + + var attr = member.TryGetCustomAttribute(); + if (attr == null) + return; + + member.ShouldExpose = attr.SerializeField; + + const BindingFlags FLAGS = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; + var methodInfo = settings.GetType().GetMethod(attr.MethodName, FLAGS); + if (methodInfo == null) + { + Core.Error($"Failed to find method '{attr.MethodName}' in class {settings.GetType()}!"); + return; + } + + DrawHandler handler; + if (methodInfo.IsStatic) + handler = Delegate.CreateDelegate(typeof(DrawHandler), methodInfo, false) as DrawHandler; + else + handler = Delegate.CreateDelegate(typeof(DrawHandler), settings, methodInfo, false) as DrawHandler; + + if (handler == null) + { + Core.Error($"Method '{attr.MethodName}' does not match the {nameof(DrawHandler)} signiture!"); + return; + } + + member.OverrideDrawHandler = handler; + } + + public MemberWrapper TryGetNamedMember(string name) + { + foreach (var mem in Members) + { + if (mem.Value.Name == name) + return mem.Value; + } + return null; + } + } + + private class MemberWrapperDict : MemberWrapper + { + public MemberWrapperDict(object obj, FieldInfo field) : base(obj, field) { } + public MemberWrapperDict(object obj, PropertyInfo prop) : base(obj, prop) { } + + private LookMode GetLookMode() + { + if (typeof(T).GetInterfaces().Contains(typeof(IExposable))) + return LookMode.Deep; + + if (typeof(Def).IsAssignableFrom(typeof(T))) + return LookMode.Def; + + return LookMode.Undefined; + } + + public override void Expose(object obj) + { + var current = Get>(obj); + Scribe_Collections.Look(ref current, NameInXML, GetLookMode(), GetLookMode()); + Set(obj, current); + } + } + + private class MemberWrapperList : MemberWrapper + { + public MemberWrapperList(object obj, FieldInfo field) : base(obj, field) { } + public MemberWrapperList(object obj, PropertyInfo prop) : base(obj, prop) { } + + public LookMode GetLookMode() + { + if (typeof(T).GetInterfaces().Contains(typeof(IExposable))) + return LookMode.Deep; + + if (typeof(Def).IsAssignableFrom(typeof(T))) + return LookMode.Def; + + return LookMode.Undefined; + } + + public override void Expose(object obj) + { + var current = Get>(obj); + Scribe_Collections.Look(ref current, NameInXML, GetLookMode()); + Set(obj, current); + } + } + + private class MemberWrapperDef : MemberWrapperGen where T : Def, new() + { + public MemberWrapperDef(object obj, FieldInfo field) : base(obj, field) { } + public MemberWrapperDef(object obj, PropertyInfo prop) : base(obj, prop) { } + + public override void Expose(object obj) + { + // Do not call base. + // Here we only have to handle defs using the Scribe_Defs. + T current = Get(obj); + Scribe_Defs.Look(ref current, NameInXML); + Set(obj, current); + } + } + + private class MemberWrapperGen : MemberWrapper + { + public MemberWrapperGen(object obj, FieldInfo field) : base(obj, field) { } + public MemberWrapperGen(object obj, PropertyInfo prop) : base(obj, prop) { } + + public override void Expose(object obj) + { + T current = Get(obj); + T defaultValue = (T)DefaultValue; + + // IExposable: use Scribe_Deep. + if (IsIExposable) + { + Scribe_Deep.Look(ref current, NameInXML); + Set(obj, current); + return; + } + + // Default: use Scribe_Values + Scribe_Values.Look(ref current, NameInXML, defaultValue); + Set(obj, current); + } + + public override K Get(object obj) + { + // When unboxing, we need to cast to the exact type. + // However, it is nice to be able to call Get where T is assignable from the real type, + // such as Get when the field is actually a double. + // The cast will fail unless we unbox to the T first before re-boxing, then unboxing into + object temp = base.Get(obj); + if (temp == null) + return default; + + if (typeof(T) != typeof(K) && temp is IConvertible) + { + return (K)Convert.ChangeType(temp, typeof(K)); + } + + return (K)temp; + } + + public override K GetDefault() + { + object temp = (T)DefaultValue; + if (temp == null) + return default; + + if (typeof(K) == typeof(object)) + return (K)temp; + + if (typeof(T) != typeof(K)) + return (K)Convert.ChangeType(temp, typeof(K)); + + return (K)temp; + } + } + + public abstract class MemberWrapper + { + public string DisplayName => _displayName ??= MakeDisplayName(); + public string Name => field?.Name ?? prop?.Name; + public readonly object DefaultValue; + public Type MemberType => field?.FieldType ?? prop.PropertyType; + public Type DeclaringType => field?.DeclaringType ?? prop.DeclaringType; + public string TranslationName => $"{DeclaringType.FullName}.{Name}"; + public bool IsIExposable => MemberType.GetInterfaces().Contains(typeof(IExposable)); + public bool IsValueType => MemberType.IsValueType; + public bool IsDefType => typeof(Def).IsAssignableFrom(MemberType); + public bool IsStatic => field?.IsStatic ?? prop.GetMethod.IsStatic; + public string NameInXML => Name; + public IEnumerable CustomAttributes => field?.GetCustomAttributes() ?? prop.GetCustomAttributes(); + public string TextBuffer = ""; + public DrawHandler OverrideDrawHandler { get; set; } + public bool ShouldExpose { get; set; } = true; + public SettingOptionsAttribute Options { get; protected set; } + public WebContentAttribute WebContent { get; protected set; } + public string VisibleIf{ get; set; } + + protected readonly FieldInfo field; + protected readonly PropertyInfo prop; + private string _displayName; + + protected MemberWrapper(object obj, MemberInfo member) + { + switch (member) + { + case FieldInfo fi: + field = fi; + break; + case PropertyInfo pi: + prop = pi; + break; + default: + throw new ArgumentException(nameof(member), $"Unexpected type: {member.GetType().FullName}"); + } + + Options = member.TryGetAttribute() ?? SettingOptionsAttribute.CreateDefault(); + WebContent = member.TryGetAttribute(); + VisibleIf = member.TryGetAttribute()?.FieldOrMethod; + DefaultValue = GetDefaultValue(obj); + } + + public bool IsDefault(SimpleSettingsBase settings) + { + var current = Get(settings); + bool bothNull = current == null && DefaultValue == null; + + return bothNull || (current != null && (current is ISettingsEqualityChecker c ? c.IsEqualForSettings(DefaultValue) : current.Equals(DefaultValue))); + } + + protected virtual string MakeDisplayName() + { + if (TranslationName.TryTranslate(out var found)) + return found; + + var label = TryGetCustomAttribute(); + if (label != null) + { + return label.Label.TranslateOrSelf(); + } + + var str = new StringBuilder(); + bool lastWasLower = true; + foreach (var c in Name) + { + if (char.IsUpper(c) && lastWasLower) + str.Append(' '); + + lastWasLower = char.IsLower(c); + + if (c == '_') + { + str.Append(' '); + continue; + } + + str.Append(c); + } + + return str.ToString().Trim().CapitalizeFirst(); + } + + public virtual string ValueToString(object value) + { + if (TryGetCustomAttribute() != null && value is float f) + return $"{f*100f:F0}%"; + + return value?.ToString() ?? ""; + } + + public virtual string GetDescription() + { + if ($"{TranslationName}.Desc".TryTranslate(out var found)) + return found; + + var attr = TryGetCustomAttribute(); + if (attr == null) + return string.Empty; + + return attr.Description.TranslateOrSelf(); + } + + public virtual T Get(object obj) + { + if (field != null) + return (T)field.GetValue(IsStatic ? null : obj); + + return (T)prop.GetValue(IsStatic ? null : obj); + } + + public virtual T GetDefault() => (T)DefaultValue; + + public virtual T TryGetCustomAttribute() where T : Attribute + { + return field != null ? field.TryGetAttribute() : prop.TryGetAttribute(); + } + + public void Set(object obj, object value) + { + Type expected = MemberType; + Type got = value?.GetType(); + + if (got != null && got != expected && value is IConvertible) + value = Convert.ChangeType(value, expected); + + if (field != null) + { + field.SetValue(IsStatic ? null : obj, value); + return; + } + + prop.SetValue(IsStatic ? null : obj, value); + } + + public abstract void Expose(object obj); + + private object GetDefaultValue(object obj) + { + object current = Get(obj); + if (current == null) + return null; + + return SmartClone(current); + } + + public virtual bool ShouldDraw(SimpleSettingsBase settings, FieldHolder holder) + { + // Look for field. + if (VisibleIf == null) + return true; + + var found = holder.TryGetNamedMember(VisibleIf); + if (found != null && found.MemberType == typeof(bool)) + return found.Get(settings); + + return true; + } + } +} + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class LabelAttribute : Attribute +{ + public readonly string Label; + public LabelAttribute(string label) + { + this.Label = label; + } +} + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class PercentageAttribute : Attribute { } + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class StepAttribute : Attribute +{ + public readonly float Step; + public StepAttribute(float step) { Step = step; } +} + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class DescriptionAttribute : Attribute +{ + public readonly string Description; + public DescriptionAttribute(string description) + { + this.Description = description; + } +} + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class DrawMethodAttribute : Attribute +{ + public readonly string MethodName; + public bool SerializeField = true; + + public DrawMethodAttribute(string methodName) + { + this.MethodName = methodName; + } +} + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class WebContentAttribute : Attribute +{ + public readonly string BundleName; + public readonly bool IsVideo; + + public WebContentAttribute(string bundleName, bool isVideo) + { + BundleName = bundleName?.ToLower(); + IsVideo = isVideo; + } +} + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class VisibleIfAttribute : Attribute +{ + public readonly string FieldOrMethod; + + public VisibleIfAttribute(string fieldOrMethod) + { + FieldOrMethod = fieldOrMethod; + } +} + +[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)] +public class SettingOptionsAttribute : Attribute +{ + public static SettingOptionsAttribute CreateDefault() => new SettingOptionsAttribute(); + + public readonly bool DrawDescription = true; + public readonly bool DrawValue = true; + public readonly bool AllowReset = true; + public readonly bool DrawHoverHighlight = true; + public readonly bool IgnoreEqualityForPresets = false; + + public SettingOptionsAttribute(bool drawDescription = true, bool drawValue = true, + bool allowReset = true, bool drawHoverHighlight = true, bool ignoreEqualityForPresets = false) + { + DrawDescription = drawDescription; + DrawValue = drawValue; + AllowReset = allowReset; + DrawHoverHighlight = drawHoverHighlight; + IgnoreEqualityForPresets = ignoreEqualityForPresets; + } + + private SettingOptionsAttribute() { } +} + +public interface ISettingsEqualityChecker +{ + bool IsEqualForSettings(object other); +} diff --git a/Source/1.4/ThingGenerator/AM_DefOf.cs b/Source/1.4/ThingGenerator/AM_DefOf.cs new file mode 100644 index 00000000..8cc13f3d --- /dev/null +++ b/Source/1.4/ThingGenerator/AM_DefOf.cs @@ -0,0 +1,50 @@ +using RimWorld; +using Verse; + +namespace AM +{ + [DefOf] + public static class AM_DefOf + { + static AM_DefOf() + { + DefOfHelper.EnsureInitializedInCtor(typeof(AM_DefOf)); + } + + public static JobDef AM_InAnimation; + public static JobDef AM_GrapplePawn; + public static JobDef AM_WalkToExecution; + public static JobDef AM_DoFriendlyDuel; + public static JobDef AM_SpectateFriendlyDuel; + public static JobDef AM_ChannelAnimation; + + public static RulePackDef AM_Execution_Generic; + + public static ThingDef AM_GrappleFlyer; + public static ThingDef AM_KnockbackFlyer; + + public static StatDef AM_GrappleSpeed; + public static StatDef AM_GrappleCooldown; + public static StatDef AM_ExecutionCooldown; + public static StatDef AM_GrappleRadius; + public static StatDef AM_Lethality; + public static StatDef AM_DuelAbility; + + public static AnimDef AM_Duel_WinFriendlyDuel; + public static AnimDef AM_Duel_WinFriendlyDuel_Reject; + public static AnimDef AM_Execution_Fail; + + public static SoundDef AM_MetalSwordClash; + public static SoundDef AM_StoneSwordClash; + public static SoundDef AM_WoodSwordClash; + + public static ToolCapacityDef Blunt; + public static ToolCapacityDef Cut; + public static ToolCapacityDef Stab; + + public static ThoughtDef AM_FriendlyDuel_Win; + public static ThoughtDef AM_FriendlyDuel_Lose; + + public static HediffDef AM_KnockedOut; + } +} diff --git a/Source/AnimationMod/AnimCellData.cs b/Source/1.4/ThingGenerator/AnimCellData.cs similarity index 100% rename from Source/AnimationMod/AnimCellData.cs rename to Source/1.4/ThingGenerator/AnimCellData.cs diff --git a/Source/1.4/ThingGenerator/AnimDef.cs b/Source/1.4/ThingGenerator/AnimDef.cs new file mode 100644 index 00000000..1cc00545 --- /dev/null +++ b/Source/1.4/ThingGenerator/AnimDef.cs @@ -0,0 +1,458 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Linq; +using System.Xml.Serialization; +using AM.AMSettings; +using AM.Idle; +using AM.RendererWorkers; +using AM.Reqs; +using AM.Sweep; +using JetBrains.Annotations; +using RimWorld; +using UnityEngine; +using Verse; + +namespace AM; + +[UsedImplicitly(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.WithMembers)] +[SuppressMessage("ReSharper", "InconsistentNaming")] +public class AnimDef : Def +{ + #region Static stuff + public static IReadOnlyList AllDefs => allDefs; + + private static List allDefs; + private static Dictionary> defsOfType; + private static readonly HandsVisibilityData defaultHandsVisibilityData = new HandsVisibilityData(); + + public static void Init() + { + allDefs = new List(DefDatabase.AllDefs); + defsOfType = new Dictionary>(); + + foreach(var def in allDefs) + { + var t = def.type; + if(!defsOfType.TryGetValue(t, out var list)) + { + list = new List(); + defsOfType.Add(t, list); + } + list.Add(def); + } + } + + public static IEnumerable GetDefsOfType(AnimType type) + { + if (defsOfType.TryGetValue(type, out var list)) + return list; + return Array.Empty(); + } + + public static IEnumerable GetExecutionAnimationsForPawnAndWeapon(Pawn pawn, ThingDef weaponDef, int? meleeLevel = null) + { + int meleeSkill = meleeLevel ?? pawn.skills?.GetSkill(SkillDefOf.Melee)?.Level ?? 0; + + // TODO maybe cached based on requirement? + return GetDefsOfType(AnimType.Execution).Where(d => + d.Allows(new ReqInput(weaponDef)) && + (d.minMeleeSkill ?? 0) <= meleeSkill && + d.Probability > 0); + } + + [DebugAction("Melee Animation", "Reload all animations", actionType = DebugActionType.Action)] + public static void ReloadAllAnimations() + { + foreach (var def in allDefs) + { + if (def.resolvedData == null) + continue; + + def.resolvedData = AnimData.Load(def.FullDataPath, false); + def.resolvedNonLethalData = File.Exists(def.FullNonLethalDataPath) ? AnimData.Load(def.FullNonLethalDataPath, false) : def.resolvedData; + } + } + + #endregion + + public class SettingsData : IExposable, ISettingsEqualityChecker + { + public bool Enabled = true; + public float Probability = 1; + + public void ExposeData() + { + Scribe_Values.Look(ref Enabled, "Enabled", true); + Scribe_Values.Look(ref Probability, "Probability", 1f); + } + + public bool IsEqualForSettings(object other) + { + return other is SettingsData osd && osd.Enabled == Enabled && Math.Abs(osd.Probability - Probability) < 0.0001f; + } + } + + public string LabelOrFallback => string.IsNullOrEmpty(label) ? defName : LabelCap; + public virtual string FullDataPath + { + get + { + var mod = modContentPack; + if (mod == null) + { + Core.Error($"This def '{defName}' has no modContentPack, so FullDataPath cannot be resolved! Returning relative path instead..."); + return data; + } + + string relative = data.Trim(); + if (string.IsNullOrWhiteSpace(new FileInfo(relative).Extension)) + relative += ".json"; + + return Path.Combine(mod.RootDir, "Animations", relative); + } + } + public virtual string FullNonLethalDataPath => FullDataPath.Replace(".json", "_NL.json"); + public AnimData Data + { + get + { + if (resolvedData == null) + ResolveData(); + + return resolvedData; + } + } + public AnimData DataNonLethal + { + get + { + if (resolvedData == null) + ResolveData(); + + return resolvedNonLethalData ?? resolvedData; + } + } + public string DataPath => data; + /// + /// A mask where a high bit means that the spot must be clear (standable) + /// in a 7x7 cell grid around the animation root cell. + /// + public ulong ClearMask, FlipClearMask; + public float Probability => relativeProbability * UserEditedProbability; + public float UserEditedProbability => (SData?.Enabled ?? true) ? (SData?.Probability ?? 1f) : 0f; + [XmlIgnore] public SettingsData SData; + + public AnimType type = AnimType.Execution; + public string jobString; + public Type rendererWorker; + public int pawnCount; + /// + /// The main and normally only weapon filter. + /// + public Req weaponFilter; + /// + /// The optional secondary weapon filter. + /// Currently only used in some duel animations. + /// Allows filtering out the 'second' pawn based on weapon. + /// For example, if a duel animation only works for knife vs spear, you would have to use both filters. + /// + public Req weaponFilterSecond; + public List cellData = new List(); + public ISweepProvider sweepProvider; + public bool drawDisabledPawns; + public bool shadowDrawFromData; + public int? minMeleeSkill; + public bool canEditProbability = true; + public IdleType idleType; + public bool pointAtTarget; + public int returnToIdleStart, returnToIdleEnd; + public int idleFrame; + public ExecutionOutcome? fixedOutcome; + public List handsVisibility = new List(); + public PromotionData promotionRules; + public List spawnDroppedHeadsForPawnIndices = new List(); + +#pragma warning disable CS0649 // Field 'AnimDef.data' is never assigned to, and will always have its default value null + private string data; +#pragma warning restore CS0649 // Field 'AnimDef.data' is never assigned to, and will always have its default value null + + private Dictionary additionalData = new Dictionary(); + private float relativeProbability = 1; + + private AnimData resolvedData, resolvedNonLethalData; + + public HandsVisibilityData GetHandsVisibility(int pawnIndex) + { + if (pawnIndex < 0) + return defaultHandsVisibilityData; + + foreach (var d in handsVisibility) + { + if (d.pawnIndex == pawnIndex) + return d; + } + + return defaultHandsVisibilityData; + } + + public void SetDefaultSData() + { + SData = new SettingsData() + { + Enabled = true, + Probability = 1f, + }; + } + + protected virtual void ResolveData() + { + if (File.Exists(FullDataPath)) + resolvedData = AnimData.Load(FullDataPath); + + if (File.Exists(FullNonLethalDataPath)) + resolvedNonLethalData = AnimData.Load(FullNonLethalDataPath); + } + + public T TryGetAdditionalData(string id, T defaultValue = default) + { + string value = additionalData.TryGetValue(id); + if (value == null) + return defaultValue; + + // Here, enjoy some hacky shit. + return defaultValue switch + { + string => (T)(object)value, + int => int.TryParse(value, out var i) ? (T)(object)i : defaultValue, + float => float.TryParse(value, out var f) ? (T)(object)f : defaultValue, + bool => bool.TryParse(value, out var b) ? (T)(object)b : defaultValue, + _ => throw new NotSupportedException($"Additional data of type '{typeof(T)}' is not supported.") + }; + } + + public virtual AnimationRendererWorker TryMakeRendererWorker() + { + if (rendererWorker == null) + return null; + + try + { + var instance = Activator.CreateInstance(rendererWorker); + return instance as AnimationRendererWorker; + } + catch (Exception e) + { + Core.Error($"Failed to create instance of SetupWorker class '{rendererWorker}'", e); + return null; + } + } + + public override IEnumerable ConfigErrors() + { + foreach (var item in base.ConfigErrors()) + yield return item; + + if (type == AnimType.Execution && pawnCount < 2) + yield return $"Animation type is Execution, but pawnCount is less than 2! ({pawnCount})"; + + if (string.IsNullOrWhiteSpace(data)) + yield return "Animation has no data path! Please specify the location of the data file using the data tag."; + else if (!File.Exists(FullDataPath)) + yield return $"Failed to find animation file at '{FullDataPath}'!"; + + if (type is AnimType.Execution or AnimType.Duel or AnimType.Idle && weaponFilter == null) + yield return "weaponFilter is not assigned."; + + var p1StartCell = TryGetCell(AnimCellData.Type.PawnStart, false, false, 1); + if (type == AnimType.Execution && (p1StartCell == null || p1StartCell != new IntVec2(1, 0))) + yield return $"This execution animation should have pawn 1 starting at offset (1, 0), but instead they are starting at {p1StartCell}. Change this in the tag."; + + for (int i = 0; i < cellData.Count; i++) + foreach (var error in cellData[i].ConfigErrors()) + yield return $"[CellData, index:{i}] {error}"; + + var indexes = new HashSet(); + foreach (var d in handsVisibility) + { + if (d.pawnIndex < 0) + { + yield return $"There is an item in that has of {d.pawnIndex} which is invalid. should be at least 0."; + } + else if (!indexes.Add(d.pawnIndex)) + { + yield return $"There is an item in that has duplicate of {d.pawnIndex}."; + } + } + } + + public override void PostLoad() + { + base.PostLoad(); + ClearMask = SpaceChecker.MakeClearMask(this, false); + FlipClearMask = SpaceChecker.MakeClearMask(this, true); + + if (promotionRules == null) + return; + + if (relativeProbability != 0) + Core.Warn($"{this} has relativeProbability of {relativeProbability:P1} but it also uses Promotion Rules. This might be a mistake."); + + promotionRules.Def = this; + promotionRules.PostLoad(); + } + + public IntVec2? TryGetCell(AnimCellData.Type type, bool flipX, bool flipY, int? pawnIndex = null) + { + foreach(var cell in cellData) + if (cell.type == type && cell.pawnIndex == pawnIndex) + return Flip(cell.GetCell(), flipX, flipY); + + return null; + } + + public IEnumerable GetCells(AnimCellData.Type type, bool flipX, bool flipY, int? pawnIndex = null) + { + foreach (var cData in cellData) + if (cData.type == type && cData.pawnIndex == pawnIndex) + foreach (var cell in cData.GetCells()) + yield return Flip(cell, flipX, flipY); + } + + public IEnumerable GetMustBeClearCells(bool flipX, bool flipY, IntVec3 offset) + { + foreach (var cells in cellData) + { + foreach (var cell in cells.GetCells()) + { + yield return Flip(cell, flipX, flipY).ToIntVec3 + offset; + } + } + } + + private IntVec2 Flip(in IntVec2 input, bool fx, bool fy) => new IntVec2(fx ? -input.x : input.x, fy ? -input.z : input.z); + + public bool Allows(in ReqInput input) + { + return weaponFilter != null && weaponFilter.Evaluate(input); + } + + public IEnumerable GetAllAllowedWeapons() + { + foreach (var thing in DefDatabase.AllDefsListForReading) + if (thing.IsMeleeWeapon() && Allows(new ReqInput(thing))) + yield return thing; + } + + /* + * Animation promotion is where a selected animation is swapped out for a different animation just before it starts. + * The reason this is done is that certain conditions need to be met for some animations, + * and the inputs for those conditions may not be known until after the animation selection calculations + * have already been done, hence the need to 'promote' an already selected animation to a different one. + */ + public AnimDef TryGetPromotionDef(PromotionInput input) + { + if (input.OriginalAnim != this) + Core.Error($"Original anim should be this one: {this}. Instead got {input.OriginalAnim}"); + + var allPossibles = from def in GetDefsOfType(AnimType.Execution) + where def.promotionRules != null + let chance = def.promotionRules.GetRelativePromotionChanceFor(input) + where chance > 0 + select (def, chance); + + int possibleCount = allPossibles.Count(); + + // Chance to promote at all: + // Needs to be thought out... A future task. + float promotionChanceForAny = Mathf.Min(possibleCount * 0.5f, 0.65f); + if (!Rand.Chance(promotionChanceForAny)) + return null; + + var selected = allPossibles.RandomElementByWeightWithFallback(pair => pair.chance); + + if (selected.def != null) + { + Core.Log($"Promoted animation: {input.OriginalAnim} -> {selected.def} ({promotionChanceForAny:P0} general promotion chance, {selected.chance:P0} relative chance)"); + } + + return selected.def; + } + + public class HandsVisibilityData + { + public int pawnIndex = -1; + public bool? showMainHand = null; + public bool? showAltHand = null; + } + + public class PromotionData + { + public AnimDef Def { get; set; } + + public ExecutionOutcome onlyWhenOutcomeIs = ExecutionOutcome.Nothing; + public float basePromotionRelativeChance = 1f; + public List promotionWorkers = new List(); + + private readonly List workers = new List(); + + public float GetRelativePromotionChanceFor(in PromotionInput input) + { + // Outcome must be in the allowed range. + if (!onlyWhenOutcomeIs.HasFlag(input.Outcome)) + return 0; + + // Must allow the used weapon. + if (!Def.Allows(input.ReqInput)) + return 0f; + + // Base chance from def and user settings. + float chance = basePromotionRelativeChance * Def.UserEditedProbability; + if (chance <= 0f) + return 0f; + + // Must have enough space. + if (!CheckMasks(input)) + return 0f; + + // Do all the specific workers. + foreach (var worker in workers) + { + chance *= worker.GetPromotionRelativeChanceFor(input); + } + + return chance; + } + + private bool CheckMasks(in PromotionInput input) + { + ulong mask = input.FlipX ? Def.FlipClearMask : Def.ClearMask; + return (mask & input.OccupiedMask) == 0; + } + + public void PostLoad() + { + foreach (var type in promotionWorkers) + { + workers.Add(Activator.CreateInstance(type) as IPromotionWorker); + } + } + } + + public interface IPromotionWorker + { + float GetPromotionRelativeChanceFor(in PromotionInput input); + } + + public struct PromotionInput + { + public required Pawn Attacker; + public required Pawn Victim; + public required ReqInput ReqInput; + public required AnimDef OriginalAnim; + public required ExecutionOutcome Outcome; + public required ulong OccupiedMask; + public required bool FlipX; + } +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/AnimRenderer.cs b/Source/1.4/ThingGenerator/AnimRenderer.cs new file mode 100644 index 00000000..cd3433b5 --- /dev/null +++ b/Source/1.4/ThingGenerator/AnimRenderer.cs @@ -0,0 +1,1470 @@ +using AM.Events; +using AM.Idle; +using AM.Patches; +using AM.Processing; +using AM.RendererWorkers; +using AM.Sweep; +using AM.Tweaks; +using AM.UI; +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using UnityEngine; +using Verse; +using Verse.AI; +using Color = UnityEngine.Color; +using Debug = UnityEngine.Debug; + +namespace AM; + +/// +/// An is the object that represents and also draws (renders) a currently running animation. +/// Be sure to check the property before interacting with an object of this type. +/// +public class AnimRenderer : IExposable +{ + #region Static stuff + + public static readonly char[] Alphabet = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' }; + public static readonly List PostLoadPendingAnimators = new List(); + public static event Action PrePawnSpecialRender; + public static event Action PostPawnSpecialRender; + public static Material DefaultCutout, DefaultTransparent; + public static IReadOnlyList ActiveRenderers => activeRenderers; + public static IReadOnlyCollection CapturedPawns => pawnToRenderer.Keys; + public static int TotalCapturedPawnCount => pawnToRenderer.Count; + + private static readonly MaterialPropertyBlock shadowMpb = new MaterialPropertyBlock(); + private static readonly List activeRenderers = new List(); + private static readonly Dictionary pawnToRenderer = new Dictionary(); + private static readonly Dictionary textureCache = new Dictionary(); + + /// + /// Tries to get the that a pawn currently belongs to. + /// Will return null if none is found. + /// + /// The renderer, or null. Null indicates that the pawn is not currently part of any animation. + public static AnimRenderer TryGetAnimator(Pawn pawn) + { + if (pawn == null) + return null; + + return pawnToRenderer.GetValueOrDefault(pawn); + } + + public static Texture2D ResolveTexture(in AnimPartSnapshot snapshot) + { + if (snapshot.Renderer == null) + return null; + + var ov = snapshot.Renderer.overrides[snapshot.Part.Index]; + + if (ov.Texture != null) + return ov.Texture; + + if (snapshot.TexturePath == null) + return null; + + return ResolveTexture(snapshot.TexturePath, snapshot); + } + + public static Texture2D ResolveTexture(string texturePath, in AnimPartSnapshot snapshot) + { + if (textureCache.TryGetValue(texturePath, out var found)) + return found; + + Texture2D loaded; + loaded = ContentFinder.Get(texturePath, false); + textureCache.Add(texturePath, loaded); + if (loaded == null) + Core.Error($"Failed to load texture '{texturePath}' for {snapshot.PartName} (frame: {snapshot.FrameIndex})"); + + return loaded; + } + + public static void ClearAll() + { + activeRenderers.Clear(); + pawnToRenderer.Clear(); + PostLoadPendingAnimators.Clear(); + } + + public static void TickAll() + { + AddFromPostLoad(); + + foreach (AnimRenderer renderer in activeRenderers) + { + if (!renderer.IsDestroyed) + renderer.Tick(); + } + } + + public static void DrawAll(float dt, Map map, Action onEvent, in CellRect viewBounds, Action labelDraw = null) + { + AddFromPostLoad(); + + bool shouldSeek = onEvent != null; + + for (int i = 0 ; i < activeRenderers.Count; i++) + { + var renderer = activeRenderers[i]; + if (renderer.Map != map || renderer.IsDestroyed) + continue; + + try + { + DrawSingle(renderer, shouldSeek ? dt : null, onEvent, viewBounds, labelDraw); + } + catch(Exception e) + { + Core.Error($"Exception rendering animator '{renderer}'", e); + } + } + } + + public static void DrawAllGUI(Map map) + { + AddFromPostLoad(); + + for (int i = 0; i < activeRenderers.Count; i++) + { + var renderer = activeRenderers[i]; + + if (renderer.Map != map || renderer.IsDestroyed) + continue; + + try + { + renderer.DrawGUI(); + } + catch (Exception e) + { + Core.Error($"Exception rendering animator '{renderer}'", e); + } + + } + } + + private static void AddFromPostLoad() + { + if (PostLoadPendingAnimators.Count == 0) + return; + + foreach (var item in PostLoadPendingAnimators) + { + if (item == null) + continue; + item.ApplyPostLoad(); + item.Register(); + } + + Core.Log($"Post-Load Init: Registered {PostLoadPendingAnimators.Count} pending animators."); + PostLoadPendingAnimators.Clear(); + } + + public static void RemoveDestroyed() + { + // Remove destroyed. + for (int i = 0; i < activeRenderers.Count; i++) + { + var r = activeRenderers[i]; + if (!r.IsDestroyed) + continue; + + DestroyNew(r); + i--; + } + } + + private static void DrawSingle(AnimRenderer renderer, float? dt, Action onEvent, CellRect viewBounds, Action labelDraw = null) + { + // Draw and handle events. + try + { + bool cull = Core.Settings.OffscreenCulling && !viewBounds.Contains(renderer.RootPosition.ToIntVec3()); + renderer.Draw(null, dt ?? 0, onEvent, cull, labelDraw); + } + catch (Exception e) + { + Core.Error($"Rendering exception when doing animation {renderer}", e); + } + } + + private static void DestroyNew(AnimRenderer renderer) + { + if (renderer.Pawns != null) + { + foreach (var pawn in renderer.Pawns) + { + if (pawn != null) + pawnToRenderer.Remove(pawn); + } + } + + activeRenderers.Remove(renderer); + try + { + renderer.OnEnd(); + } + catch (Exception e) + { + Core.Error("Exception in AnimRenderer.OnEnd:", e); + } + } + + private static void RegisterInt(AnimRenderer renderer) + { + if (activeRenderers.Contains(renderer)) + return; + + activeRenderers.Add(renderer); + foreach (var item in renderer.Pawns) + { + if (item != null) + pawnToRenderer.Add(item, renderer); + } + + renderer.OnStart(); + } + + public static float Remap(float value, float a, float b, float a2, float b2) + => Mathf.Lerp(a2, b2, Mathf.InverseLerp(a, b, value)); + + #endregion + + /// + /// The active animation data. Animation data is loaded from disk upon request. + /// Note that this is not the same as an animation def: see for the definition. + /// + public AnimData Data => ExecutionOutcome <= ExecutionOutcome.Damage ? Def.DataNonLethal : Def.Data; + /// + /// The duration, in seconds, of the current animation. + /// May not accurately represent how long the animation actually plays for, depending on the type of animation (i.e. Duels may last longer). + /// + public float Duration => Data?.Duration ?? 0; + /// + /// Same as the , but expressed in Rimworld ticks. + /// + public int DurationTicks => Mathf.RoundToInt(Duration * 60); + /// + /// Should the animator be saved with the map? + /// + public bool ShouldSave => !IsDestroyed && PawnCount > 0; + /// + /// The root world position of this animation. + /// Derived from . + /// + public Vector3 RootPosition => RootTransform.MultiplyPoint3x4(default); + /// + /// The active animation def. + /// + public AnimDef Def; + /// + /// A list of pawns included in this animation. + /// + public List Pawns = new List(); + /// + /// A list of pawns that are not part of this animation but are used + /// in things like log generation. + /// + public List NonAnimatedPawns = new List(); + /// + /// The base transform that the animation is centered on. + /// Useful functions to modify this are + /// and . + /// + public Matrix4x4 RootTransform = Matrix4x4.identity; + /// + /// The that this animation is running on. + /// + public Map Map; + /// + /// The Unity Camera that this animation renders to. If null, all cameras are targeted. + /// + public Camera Camera; + /// + /// If true, the animation loops rather than ending. + /// + public bool Loop; + /// + /// If true, the animation is mirrored on this axis. + /// + public bool MirrorHorizontal, MirrorVertical; + /// + /// Will only be valid after the animation has already ended (see ). + /// If true, the animator ended prematurely, such as by loosing a pawn or otherwise being ended unexpectedly. + /// If false, the animator ended because the animation reached it's natural end. + /// + public bool WasInterrupted { get; private set; } + /// + /// If true, this animator has finished playing and is no longer active. + /// You should not keep references to destroyed AnimRenderers. + /// + public bool IsDestroyed { get; private set; } + /// + /// The current time, in seconds, that the animation is playing. + /// + public float CurrentTime => time; + /// + /// Gets the number of non-null pawns in the array. + /// + public int PawnCount + { + get + { + int c = 0; + foreach (var p in Pawns) + if (p != null) + c++; + return c; + } + } + /// + /// The outcome of this animation if it is an execution animation. + /// + public ExecutionOutcome ExecutionOutcome = ExecutionOutcome.Nothing; + /// + /// The custom renderer worker, optional. + /// + public AnimationRendererWorker AnimationRendererWorker; + /// + /// Save data such as data used to track duel status. + /// + public SaveData CurrentSaveData = new SaveData(); + /// + /// An action that is invoked when is called. + /// This action is not serialized. + /// + public Action OnEndAction; + /// + /// A scale on the speed of this animation. + /// + public float TimeScale = 1f; + /// + /// If not null, pawns are allowed to have other jobs as long as they are of this def. + /// Upon animation start, the pawn's current job and verbs are not modified if this is specified. + /// + public JobDef CustomJobDef; + /// + /// Is this animation a friendly duel? + /// + public bool IsFriendlyDuel; + + public double DrawMS; + public double SeekMS; + public double SweepMS; + + private readonly Dictionary pawnToParts = new Dictionary(); + private HashSet pawnsValidEvenIfDespawned = new HashSet(); + private AnimPartSnapshot[] snapshots; + private AnimPartOverrideData[] overrides; + private PartWithSweep[] sweeps; + private MaterialPropertyBlock pb; + private float time = -1; + private Pawn[] pawnsForPostLoad; + private bool hasStarted; + private bool lastMirrorX, lastMirrorZ; + private bool hasDoneOnEnd; + private bool delayedDestroy; + + [UsedImplicitly] + public AnimRenderer() + { + + } + + public AnimRenderer(AnimDef def, Map map) + { + Map = map; + Def = def; + Init(); + } + + private void Init() + { + if (snapshots != null) + { + Core.Error("Init called multiple times!"); + return; + } + + snapshots = new AnimPartSnapshot[Data.Parts.Count]; + overrides = new AnimPartOverrideData[Data.Parts.Count]; + pb = new MaterialPropertyBlock(); + + for (int i = 0; i < overrides.Length; i++) + overrides[i] = new AnimPartOverrideData(); + + // Dummy array for sweep meshes. + // Reason: A Unity bug where creating a new mesh (new Mesh()) during loading + // crashes the game. + // Solution: delay creating meshes until the game has started rendering. + sweeps = Array.Empty(); + + Debug.Assert(AnimationRendererWorker == null); + AnimationRendererWorker = Def.TryMakeRendererWorker(); + } + + private void InitSweepMeshes() + { + if (Data.SweepDataCount == sweeps.Length) + return; + + int j = 0; + sweeps = new PartWithSweep[Data.SweepDataCount]; + foreach (var part in Data.PartsWithSweepData) + { + var paths = Data.GetSweepPaths(part); + foreach (var path in paths) + { + sweeps[j++] = new PartWithSweep(this, part, path, new SweepMesh(), BasicSweepProvider.DefaultInstance); + } + } + } + + public void ExposeData() + { + Scribe_Defs.Look(ref Def, "def"); + Scribe_Values.Look(ref time, "time"); + Scribe_Values.Look(ref MirrorHorizontal, "mirrorX"); + Scribe_Values.Look(ref MirrorVertical, "mirrorY"); + Scribe_Values.Look(ref Loop, "loop"); + Scribe_Values.Look(ref hasStarted, "hasStarted"); + Scribe_Collections.Look(ref Pawns, "pawns", LookMode.Reference); + Scribe_Collections.Look(ref NonAnimatedPawns, "pawnsNonAnimated", LookMode.Reference); + Scribe_Collections.Look(ref pawnsValidEvenIfDespawned, "pawnsValidEvenIfDespawned", LookMode.Reference); + Scribe_References.Look(ref Map, "map"); + Scribe_Values.Look(ref TimeScale, "timeScale", 1f); + Scribe_Values.Look(ref ExecutionOutcome, "execOutcome"); + Scribe_Values.Look(ref IsFriendlyDuel, "isFriendlyDuel"); + Scribe_Defs.Look(ref CustomJobDef, "customJobDef"); + Scribe_Deep.Look(ref CurrentSaveData, "saveData"); + CurrentSaveData ??= new SaveData(); + + if (Scribe.mode == LoadSaveMode.PostLoadInit) + { + Init(); + Pawns ??= new List(); + pawnsValidEvenIfDespawned ??= new HashSet(); + pawnsForPostLoad = Pawns.ToArray(); + Pawns.Clear(); + } + + try + { + switch (Scribe.mode) + { + case LoadSaveMode.Saving: + { + // Save the root transform matrix. + string s = ""; + for (int i = 0; i < 16; i++) + { + s += RootTransform[i]; + if (i != 15) + s += ','; + } + Scribe_Values.Look(ref s, "rootTransform"); + break; + } + case LoadSaveMode.LoadingVars: + { + string s = string.Empty; + Scribe_Values.Look(ref s, "rootTransform"); + string[] parts = s.Split(','); + for (int i = 0; i < 16; i++) + { + RootTransform[i] = float.Parse(parts[i]); + } + + break; + } + case LoadSaveMode.PostLoadInit: + //Core.Log($"Final matrix was {RootTransform}"); + break; + } + } + catch (Exception e) + { + Core.Error($"Exception exposing matrix during {Scribe.mode}:", e); + } + + + bool temp = IsDestroyed; + Scribe_Values.Look(ref temp, "isDestroyed"); + IsDestroyed = temp; + + temp = WasInterrupted; + Scribe_Values.Look(ref temp, "wasInterrupted"); + WasInterrupted = temp; + } + + public void FlagAsValidIfDespawned(Pawn pawn) + { + if (pawn == null) + throw new ArgumentNullException(nameof(pawn)); + + if (!Pawns.Contains(pawn)) + { + Core.Error("Should not mark a pawn as valid if despawned if that pawn is not part of this animation!"); + return; + } + + pawnsValidEvenIfDespawned.Add(pawn); + } + + /// + /// Gets the current state (snapshot) for a particular animation part. + /// + public AnimPartSnapshot GetSnapshot(AnimPartData part) => part == null ? default : snapshots[part.Index]; + + /// + /// Gets the override data based on the part index. + /// See . + /// + /// The part index, such as from . + /// The override object, or null if the index is out of bounds. + public AnimPartOverrideData GetOverride(int index) => index >= 0 && index < overrides.Length ? overrides[index] : null; + + /// + /// Gets the override data of a particular part. + /// + /// The override object, or null if the part is null. + public AnimPartOverrideData GetOverride(AnimPartData part) => GetOverride(part?.Index ?? -1); + + /// + /// Gets the override data for a particular snapshot. The + /// object is used to find the override object. + /// + /// The override object, or null if the part is null. + public AnimPartOverrideData GetOverride(in AnimPartSnapshot snapshot) => GetOverride(snapshot.Part); + + /// + /// Causes this animation renderer to be registered with the system, and finish setting up. + /// Note: this is not the preferred way of starting an animation. + /// Instead, consider using . + /// + public bool Register() + { + if (IsDestroyed) + { + Core.Error("Tried to register an already destroyed AnimRenderer"); + return false; + } + + if (activeRenderers.Contains(this)) + { + Core.Error("Tried to register AnimRenderer that is already in active list!"); + return false; + } + + Pawn invalid = GetFirstInvalidPawn(); + if (invalid != null) + { + Core.Error($"Tried to start animation with 1 or more invalid pawn: [{invalid.Faction?.Name ?? "No faction"}] {invalid.NameFullColored}"); + foreach (var pawn in Pawns) + { + if (!IsPawnValid(pawn)) + Core.Error($"Invalid Pawn '{pawn.NameShortColored}': Spawned: {pawn.Spawned}, Dead: {pawn.Dead}, Downed: {pawn.Downed}, HasHolderParent: {pawn.ParentHolder is not Verse.Map} ({pawn.ParentHolder}, {pawn.ParentHolder?.GetType().FullName})"); + } + IsDestroyed = true; + return false; + } + + foreach(var pawn in Pawns) + { + var anim = TryGetAnimator(pawn); + if(anim != null) + { + Core.Error($"Tried to start animation with '{pawn.LabelShortCap}' but that pawn is already in animation {anim.Data.Name}!"); + IsDestroyed = true; + return false; + } + } + + //if (PawnCount != Def.pawnCount) + // Core.Warn($"Started AnimRenderer with bad number of pawns! Expected {Def.pawnCount}, got {PawnCount}. (Def: {Def})"); + + RegisterInt(this); + + if (!hasStarted) + OnStart(); + + // This tempTime nonsense is necessary because time is written to directly by the ExposeData, + // and Seek will not run if time is already the target (seek) time. + float tempTime = time; + time = -1; + Seek(tempTime < 0 ? 0 : tempTime, 0, null); // This will set time back to the correct value. + + AnimationRendererWorker?.SetupRenderer(this); + return true; + } + + /// + /// Cancels and destroys this animator, releasing it's pawns and stopping it from playing. + /// This call may not immediately release pawns, it may be delayed until the end of the frame. + /// + public void Destroy() + { + if (IsDestroyed) + { + //Core.Warn("Tried to destroy renderer that is already destroyed..."); + return; + } + + IsDestroyed = true; + } + + /// + /// Gets the associated with a pawn's body. + /// This part data can then be used to get the current position of the body using . + /// + /// The part data, or null if the pawn is null or is not captured by this animation. + public AnimPartData GetPawnBody(Pawn pawn) + { + if (pawn == null) + return null; + + if (!pawnToParts.TryGetValue(pawn, out var data) || data.BodyIndex == -1) + return null; + + return Data.Parts[data.BodyIndex]; + } + + /// + /// Gets the associated with a pawn's body. + /// This part data can then be used to get the current position of the body using . + /// + /// The part data, or null if the pawn is null or is not captured by this animation. + public AnimPartData GetPawnHead(Pawn pawn) + { + if (pawn == null) + return null; + + if (!pawnToParts.TryGetValue(pawn, out var data) || data.HeadIndex == -1) + return null; + + return Data.Parts[data.HeadIndex]; + } + + /// + /// Should be called once per Rimworld tick. + /// If this animation is managed automatically (such as when using the utility) + /// then you do not need to call this manually, as it will be done for you. + /// + public void Tick() + { + if (IsDestroyed) + return; + + if(Map == null || (Find.TickManager.TicksAbs % 120 == 0 && Map.Index < 0)) + { + WasInterrupted = true; + Destroy(); + return; + } + + if (GetFirstInvalidPawn() != null) + { + WasInterrupted = true; + Destroy(); + return; + } + + foreach (var pawn in Pawns) + { + if (pawn.CurJobDef != (CustomJobDef ?? AM_DefOf.AM_InAnimation)) + { + if (pawnsValidEvenIfDespawned.Contains(pawn)) + continue; + + Core.Error($"{pawn} has bad job: {pawn.CurJobDef}. Cancelling animation."); + WasInterrupted = true; + Destroy(); + return; + } + } + } + + /// + /// Gets the first captured pawn that is in an invalid state. + /// See and . + /// + /// The first invalid pawn or null if all pawns are valid, or there are no pawns in this animation. + public Pawn GetFirstInvalidPawn(bool ignoreNotSpawned = false) + { + foreach(var pawn in Pawns) + { + if (pawn != null && !IsPawnValid(pawn, ignoreNotSpawned)) + return pawn; + } + return null; + } + + /// + /// Is this pawn valid to be used in this animator? + /// Checks simple conditions such as not dead, destroyed, downed, or held by another Thing... + /// + public virtual bool IsPawnValid(Pawn p, bool ignoreNotSpawned = false) + { + // Summary: + // Not dead or downed. + bool basic = p is {Dead: false, Downed: false}; + if (!basic) + return false; + + // Check not spawned exceptions list. + if (!p.Spawned && pawnsValidEvenIfDespawned.Contains(p)) + return true; + + // Spawned (includes things like grappling, flying) + // Is part of the correct map (checks for drop pods, teleporting across maps) + return (p.Spawned || ignoreNotSpawned) && ((p.ParentHolder is Map m && m == Map) || (p.ParentHolder == null && ignoreNotSpawned)); + } + + public void Draw(float? atTime, float dt, Action eventOutput, bool cullDraw, Action labelDraw = null) + { + if (IsDestroyed) + return; + + InitSweepMeshes(); + foreach (var item in sweeps) + if (item != null) + item.MirrorHorizontal = MirrorHorizontal; + + if (eventOutput != null) + Seek(atTime, dt, e => eventOutput(this, e)); + else + SeekMS = 0; + + if (Find.CurrentMap != Map || cullDraw) + { + DrawMS = 0; + if (delayedDestroy) + Destroy(); + return; // Do not actually draw if not on the current map or culled. + } + + var timer = new RefTimer(); + var timer2 = new RefTimer(); + foreach (var path in sweeps) + path.Draw(time); + timer2.GetElapsedMilliseconds(out SweepMS); + + foreach (var snap in snapshots) + { + if (!ShouldDraw(snap)) + continue; + + var tex = ResolveTexture(snap); + if (tex == null) + continue; + + var mat = GetMaterialFor(snap, out bool forceMPB); + if (mat == null) + continue; + + var ov = GetOverride(snap); + var matrix = RootTransform * snap.WorldMatrix; + bool preFx = ov.FlipX ? !snap.FlipX : snap.FlipX; + bool preFy = ov.FlipY ? !snap.FlipY : snap.FlipY; + bool fx = MirrorHorizontal ? !preFx : preFx; + bool fy = MirrorVertical ? !preFy : preFy; + var mesh = AnimData.GetMesh(fx, fy); + + if (ov.CustomRenderer != null) + { + ov.CustomRenderer.TRS = matrix; + ov.CustomRenderer.OverrideData = ov; + ov.CustomRenderer.Part = snap.Part; + ov.CustomRenderer.Snapshot = snap; + ov.CustomRenderer.Renderer = this; + ov.CustomRenderer.TweakData = ov.TweakData; + ov.CustomRenderer.Mesh = mesh; + ov.CustomRenderer.Material = mat; + + bool stop = ov.CustomRenderer.Draw(); + if (stop) + continue; + } + + bool useMPB = forceMPB || ov.UseMPB; + var color = snap.FinalColor; + + int passes = 1; + for (int i = 0; i < passes; i++) + { + if (useMPB) + { + //Core.Log($"Use mpb mat is {mat} for {ov.TweakData?.ItemDefName} on {snap.PartName} with mode {snap.SplitDrawMode}"); + pb.Clear(); + + // Basic texture and color, always used. Color might be replaced, see below. + pb.SetColor("_Color", color); + + if (ov.Material != null) + { + // Check for a mask... + bool doesUseMask = ov.Material.HasProperty(ShaderPropertyIDs.MaskTex); + Texture mask; + if (doesUseMask && (mask = ov.Material.GetTexture(ShaderPropertyIDs.MaskTex)) != null) + { + // Tint is applied to the mask. + pb.SetColor("_Color", color); // Color comes from animation. + pb.SetColor("_ColorTwo", ov.Weapon.DrawColor); // Mask tint + pb.SetTexture(ShaderPropertyIDs.MaskTex, mask); + + } + else + { + // Tint is applied straight to main color. + pb.SetColor("_Color", color * ov.Weapon.DrawColor); + } + } + + if (snap.SplitDrawMode != AnimData.SplitDrawMode.None && snap.SplitDrawPivot != null) + { + ConfigureSplitDraw(snap, ref matrix, pb, ov, i, ref passes, ref tex); + } + + pb.SetTexture("_MainTex", tex); + } + + var finalMpb = useMPB ? pb : null; + + AnimationRendererWorker?.PreRenderPart(snap, ov, ref mesh, ref matrix, ref mat, ref finalMpb); + Graphics.DrawMesh(mesh, matrix, mat, 0, Camera, 0, finalMpb); + } + } + + DrawPawns(labelDraw); + + timer.GetElapsedMilliseconds(out DrawMS); + if (delayedDestroy) + Destroy(); + } + + private void ConfigureSplitDraw(in AnimPartSnapshot part, ref Matrix4x4 matrix, MaterialPropertyBlock pb, AnimPartOverrideData ov, int currentPass, ref int passCount, ref Texture2D texture) + { + bool preFx = ov.FlipX ? !part.FlipX : part.FlipX; + bool preFy = ov.FlipY ? !part.FlipY : part.FlipY; + bool fx = MirrorHorizontal ? !preFx : preFx; + bool fy = MirrorVertical ? !preFy : preFy; + + float textureRot = ov.LocalRotation * Mathf.Deg2Rad; + pb.SetFloat("CutoffAngle", textureRot * (fy ? -1f : 1f)); + var mode = part.SplitDrawMode; + if (mode == AnimData.SplitDrawMode.BeforeAndAfter) + { + mode = currentPass == 0 ? AnimData.SplitDrawMode.Before : AnimData.SplitDrawMode.After; + if (currentPass == 0) + passCount++; + else + matrix *= Matrix4x4.Translate(new Vector3(0, -0.9f, 0)); // This is the actual offset depth here. + } + pb.SetFloat("Polarity", mode == AnimData.SplitDrawMode.Before ? 1f : -1f); + + // The total length of the weapon sprite, in world units (1 unit = 1 cell). + float length = matrix.lossyScale.x * Remap(Mathf.Abs(Mathf.Sin(textureRot * 2f)), 0, 1f, 1f, 1.41421356237f); // sqrt(2) + float distanceScale = Remap(Mathf.Abs(Mathf.Sin(textureRot * 2f)), 0, 1f, 0.5f, 0.70710678118f); // sqrt(0.5) + + Matrix4x4 noOverrideMat = part.Renderer.RootTransform * part.WorldMatrixNoOverride * Matrix4x4.Scale(ov.LocalScaleFactor.ToWorld()); + + Vector2 renderedPos = matrix.MultiplyPoint3x4(Vector3.zero).ToFlat(); + Vector2 startPos = renderedPos - length * 0.5f * noOverrideMat.MultiplyVector(Vector3.right).normalized.ToFlat(); + Vector2 endPos = renderedPos + length * 0.5f * noOverrideMat.MultiplyVector(Vector3.right).normalized.ToFlat(); + Vector2 basePos = GetSnapshot(part.SplitDrawPivot).GetWorldPosition().ToFlat(); + + var ap = basePos - startPos; + var ab = endPos - startPos; + float lerp = Vector2.Dot(ap, ab) / Vector2.Dot(ab, ab); + if (!fx) + lerp = 1 - lerp; + + pb.SetFloat("Distance", distanceScale * (-1f + lerp * 2f)); + + // Experimental, aims to fix issue where split drawing does not use the weapon ideology style. + if (ov.Material?.mainTexture is Texture2D tex) + texture = tex; + } + + public void DrawGUI() + { + AnimationRendererWorker?.DrawGUI(this); + } + + protected void DrawPawns(Action labelDraw = null) + { + foreach (var pawn in Pawns) + { + if (pawn == null || pawn.Destroyed) + continue; + + var bodySS = GetSnapshot(GetPawnBody(pawn)); + + if (!bodySS.Active) + { + if (Def.drawDisabledPawns) + { + // Regular pawn render. + Patch_PawnRenderer_RenderPawnAt.AllowNext = true; + Patch_PawnRenderer_RenderPawnInternal.AllowNext = true; + Patch_PawnRenderer_RenderPawnInternal.DoNotModify = true; // Don't use animation position/rotation. + Patch_PawnRenderer_RenderPawnInternal.NextDrawMode = Patch_PawnRenderer_RenderPawnInternal.DrawMode.Full; + Patch_PawnUtility_IsInvisible.IsRendering = true; + PrePawnSpecialRender?.Invoke(pawn, this); + + pawn.DrawAt(pawn.DrawPosHeld ?? pawn.DrawPos); + + PostPawnSpecialRender?.Invoke(pawn, this); + Patch_PawnRenderer_RenderPawnInternal.DoNotModify = false; + Patch_PawnUtility_IsInvisible.IsRendering = false; + + // Draw label. + Vector3 drawPos2 = pawn.DrawPos; + drawPos2.z -= 0.6f; + Vector2 vector2 = Find.Camera.WorldToScreenPoint(drawPos2) / Prefs.UIScale; + vector2.y = Verse.UI.screenHeight - vector2.y; + labelDraw?.Invoke(pawn, vector2); + + } + continue; + } + + var headSS = GetSnapshot(GetPawnHead(pawn)); + + // ---- Animated pawn draw: ---- + + // Position and direction. + var pos = bodySS.GetWorldPosition(); + var headPos = headSS.GetWorldPosition(); + var bodyPos = pos; // Used for label rendering, pos is modified in second pass. + var dir = bodySS.GetWorldDirection(); + + // Worker pre-draw + AnimationRendererWorker?.PreRenderPawn(bodySS, ref pos, ref dir, pawn); + + // Render. Two passes are required if the pawn is beheaded. + bool isBeheaded = IsPawnBeheaded(pawn, bodySS, headSS); + int passCount = isBeheaded ? 2 : 1; + + for (int i = 0; i < passCount; i++) + { + bool suppressShadow = i > 0 || (Def.shadowDrawFromData && bodySS.DataC > 0.2f); + + // If on second pass (head-only pass). + if (i == 1) + { + // Head uses a different position from the body. + pos = headPos; + + // Head rotation needs to be sent manually because the head + // does not have a direction curve to sample. + Patch_PawnRenderer_RenderPawnInternal.HeadRotation = dir; // Copy body facing direction. + } + + // Render pawn in custom position using patches. + Patch_PawnRenderer_RenderPawnAt.AllowNext = true; + Patch_PawnRenderer_RenderPawnInternal.AllowNext = true; + + Patch_PawnRenderer_RenderPawnInternal.NextDrawMode = !isBeheaded + ? Patch_PawnRenderer_RenderPawnInternal.DrawMode.Full + : i == 0 ? Patch_PawnRenderer_RenderPawnInternal.DrawMode.BodyOnly : Patch_PawnRenderer_RenderPawnInternal.DrawMode.HeadOnly; + + Patch_PawnUtility_IsInvisible.IsRendering = true; + Patch_PawnRenderer_DrawInvisibleShadow.Suppress = suppressShadow; // In 1.4 shadow rendering is baked into RenderPawnAt and may need to be prevented. + + pawn.Drawer.renderer.RenderPawnAt(pos, dir, true); // This direction here is not the final one. + + Patch_PawnRenderer_DrawInvisibleShadow.Suppress = false; + Patch_PawnUtility_IsInvisible.IsRendering = false; + } + + // Render shadow. + if (Def.shadowDrawFromData) + { + // DataC now drives the shadow rendering. + // Value of 0 means regular shadow rendering, + // value of 1 means shadow is a ground-based entity shadow (a-la-minecraft). + Vector3 groundPos = pos with { z = RootPosition.z }; + Vector3 scale = new Vector3(1, 1, 0.5f); + Color color = new Color(0, 0, 0, bodySS.DataC * 0.6f); + + if (bodySS.DataC > 0f) + DrawSimpleShadow(groundPos, scale, color); + } + + // Figure out where to draw the pawn label. + Vector3 drawPos = bodyPos; + drawPos.z -= 0.6f; + Vector2 vector = Find.Camera.WorldToScreenPoint(drawPos) / Prefs.UIScale; + vector.y = Verse.UI.screenHeight - vector.y; + labelDraw?.Invoke(pawn, vector); + } + } + + [Pure] + private bool IsPawnBeheaded(Pawn pawn, in AnimPartSnapshot bodySS, in AnimPartSnapshot headSS) + { + // Not sure if this is okay: are there any pawns that are not humanoid + // but can have their heads removed by rendering separately? + if (pawn.RaceProps?.Humanlike != true) + return false; + + // Render as beheaded if the head and body are not rendering at the same position. + var bodyToHeadDelta = bodySS.GetWorldPosition() - headSS.GetWorldPosition(); + return bodyToHeadDelta.sqrMagnitude > 0.01f * 0.01f; + } + + private void DrawSimpleShadow(Vector3 pos, Vector3 size, Color color) + { + var trs = Matrix4x4.TRS(pos, Quaternion.identity, size); + shadowMpb.SetColor("_Color", color); + shadowMpb.SetTexture("_MainTex", Content.Shadow); + Graphics.DrawMesh(MeshPool.plane10, trs, DefaultTransparent, 0, Camera, 0, shadowMpb); + } + + private void ApplyPostLoad() + { + if (pawnsForPostLoad == null) + return; + + foreach (var pawn in pawnsForPostLoad) + AddPawn(pawn); + + pawnsForPostLoad = null; + } + + /// + /// Changes the current time of this animation. + /// Depending on the parameters specified, this may act as a 'jump' () or a continuous movement (). + /// + public void Seek(float? atTime, float dt, Action eventsOutput, bool delayedDestroy = false) + { + if (IsDestroyed || this.delayedDestroy) + return; + + float t = atTime ?? (time + dt * TimeScale * Core.Settings.GlobalAnimationSpeed); + + bool mirrorsAreSame = lastMirrorX == MirrorHorizontal && lastMirrorZ == MirrorVertical; + + if (Math.Abs(this.time - t) < 0.0001f && mirrorsAreSame) + return; + + var timer = new RefTimer(); + + lastMirrorX = MirrorHorizontal; + lastMirrorZ = MirrorVertical; + SeekInt(t, eventsOutput, MirrorHorizontal, MirrorVertical); + + timer.GetElapsedMilliseconds(out SeekMS); + + // Check if the end of the animation has been reached. + if (t < Data.Duration) + return; + + if (Loop) + { + time = 0; + } + else + { + if (delayedDestroy) + this.delayedDestroy = true; + else + Destroy(); + } + } + + private void SeekInt(float time, Action eventsOutput, bool mirrorX = false, bool mirrorY = false) + { + time = Mathf.Clamp(time, 0f, Duration); + + // Pass 1: Evaluate curves, make local matrices. + for (int i = 0; i < Data.Parts.Count; i++) + { + snapshots[i] = new AnimPartSnapshot(Data.Parts[i], this, time); + } + + // Pass 2: Resolve world matrices using inheritance tree. + for (int i = 0; i < Data.Parts.Count; i++) + snapshots[i].UpdateWorldMatrix(mirrorX, mirrorY); + + float start = Mathf.Min(this.time, time); + float end = Mathf.Max(this.time, time); + this.time = time; + + if (eventsOutput == null) + return; + + // Output relevant events to be handled. + foreach (var e in GetEventsInPeriod(new Vector2(start, end))) + eventsOutput(e); + } + + public void OnStart() + { + if (hasStarted) + { + Core.Error("Started twice!"); + return; + } + + hasStarted = true; + + // Give pawns their jobs. + foreach (var pawn in Pawns) + { + if (pawn.verbTracker?.AllVerbs != null) + foreach (var verb in pawn.verbTracker.AllVerbs) + verb.Reset(); + + if (pawn.equipment?.AllEquipmentVerbs != null) + foreach (var verb in pawn.equipment.AllEquipmentVerbs) + verb.Reset(); + + // Raise skills event. + var skills = pawn.GetComp()?.GetSkills(); + if (skills != null) + { + foreach (var skill in skills) + { + if (skill == null) + continue; + + try + { + skill.OnAnimationStarted(this); + } + catch (Exception e) + { + Core.Error($"Exception when raising the Skill.OnAnimationStarted event for {pawn} on skill {skill}", e); + } + } + } + + // Do not give animation job if a custom job def is specified: + if (CustomJobDef != null) + continue; + + var newJob = JobMaker.MakeJob(AM_DefOf.AM_InAnimation); + pawn.jobs.StartJob(newJob, JobCondition.InterruptForced); + + if (pawn.CurJobDef != AM_DefOf.AM_InAnimation) + { + Core.Error($"CRITICAL ERROR: Failed to force interrupt {pawn}'s job with animation job. Likely a mod conflict."); + } + } + + // Teleport pawns to their starting positions. They should already be there, but check just in case. + IntVec3 basePos = RootTransform.MultiplyPoint3x4(Vector3.zero).ToIntVec3(); + basePos.y = 0; + + for (int i = 0; i < Pawns.Count; i++) + { + var pawn = Pawns[i]; + if (pawn == null) + continue; + + var offset = Def.TryGetCell(AnimCellData.Type.PawnStart, MirrorHorizontal, MirrorVertical, i) ?? IntVec2.Zero; + TeleportPawn(pawn, basePos + offset.ToIntVec3); + } + + // Custom sweep paths: + ISweepProvider sweepProvider = BasicSweepProvider.DefaultInstance; + var weapon = Pawns.Count == 0 ? null : Pawns[0].GetFirstMeleeWeapon(); + var tweak = weapon == null ? null : TweakDataManager.TryGetTweak(weapon.def); + if (tweak?.GetSweepProvider() != null) + sweepProvider = tweak.GetSweepProvider(); + else if (Def.sweepProvider != null) + sweepProvider = Def.sweepProvider; + + InitSweepMeshes(); + foreach (var sweep in sweeps) + { + if (sweep == null) + continue; + sweep.ColorProvider = sweepProvider; + } + } + + public void OnEnd() + { + if (hasDoneOnEnd) + return; + hasDoneOnEnd = true; + + try + { + // Do not teleport to end if animation was interrupted. + if (WasInterrupted) + return; + + // Spawn heads. + if (!Dialog_AnimationDebugger.IsInRehearsalMode) + SpawnDroppedHeads(); + + TeleportPawnsToEnd(); + } + catch (Exception e) + { + Core.Error("Exception in AnimRenderer.OnEnd", e); + } + finally + { + foreach (var sweep in sweeps) + { + sweep?.Mesh?.Dispose(); + } + + OnEndAction?.Invoke(this); + } + } + + private void SpawnDroppedHeads() + { + if (ExecutionOutcome == ExecutionOutcome.Kill) + { + var comp = Map.GetAnimManager(); + + foreach (var index in Def.spawnDroppedHeadsForPawnIndices) + { + if (index < 0 || index >= Pawns.Count) + continue; + + comp.AddDroppedHeadFor(Pawns[index], this); + } + } + } + + public void TeleportPawnsToEnd() + { + // TODO certain animations should have different end positions if the pawn was + // not killed. + IntVec3 basePos = RootTransform.MultiplyPoint3x4(Vector3.zero).ToIntVec3(); + basePos.y = 0; + + for (int i = 0; i < Pawns.Count; i++) { + var pawn = Pawns[i]; + if (pawn == null) + continue; + + var posData = Def.TryGetCell(AnimCellData.Type.PawnEnd, MirrorHorizontal, MirrorVertical, i); + if (posData == null) + continue; + + // Teleport to end position. + var endPos = basePos + posData.Value.ToIntVec3; + TeleportPawn(pawn, endPos); + + // End animation job. + if (pawn.CurJobDef == AM_DefOf.AM_InAnimation) + pawn.jobs?.EndCurrentJob(JobCondition.InterruptForced); + } + } + + protected virtual void TeleportPawn(Pawn pawn, IntVec3 pos) + { + if (pawn == null) + return; + + pawn.Position = pos; + pawn.pather?.StopDead(); + pawn.pather?.Notify_Teleported_Int(); + pawn.Drawer?.tweener?.ResetTweenedPosToRoot(); + } + + public IEnumerable GetEventsInPeriod(Vector2 timePeriod) + { + return Data.GetEventsInPeriod(timePeriod); + } + + public AnimPartData GetPart(string name) => Data.GetPart(name); + + protected virtual bool ShouldDraw(in AnimPartSnapshot snapshot) + { + return snapshot.Active && !GetOverride(snapshot).PreventDraw && snapshot.FinalColor.a > 0; + } + + protected virtual Material GetMaterialFor(in AnimPartSnapshot snapshot, out bool forceMPB) + { + forceMPB = false; + + // If drawing in split mode, must use the split shader. + if (snapshot.SplitDrawMode != AnimData.SplitDrawMode.None && snapshot.SplitDrawPivot != null) + { + // This shader is designed to work with the mpb. + forceMPB = true; + return Content.CustomCutoffMaterial; + } + + // Otherwise check for an override material. + var ov = GetOverride(snapshot); + var ovMat = ov.Material; + if (ovMat != null) + return ovMat; + + // Finally fall back to transparent or cutout. + if (ov.UseDefaultTransparentMaterial || snapshot.Part.TransparentByDefault || snapshot.FinalColor.a < 1f) + return DefaultTransparent; + + return DefaultCutout; + } + + public bool AddPawn(Pawn pawn) => AddPawn(pawn, Pawns.Count, true); + + public bool AddPawn(Pawn pawn, int index, bool register) + { + if (pawn == null) + return false; + + char tagChar = Alphabet[index]; + + if (register) + { + Pawns.Add(pawn); + + pawnToParts[pawn] = new PawnLinkedParts + { + BodyIndex = Data.GetPartIndex($"Body{tagChar}"), + HeadIndex = Data.GetPartIndex($"Head{tagChar}") + }; + } + + // Hands. + ConfigureHandsForPawn(pawn, index); + + // Held item. + string itemName = $"Item{tagChar}"; + var weapon = pawn.GetFirstMeleeWeapon(); + var tweak = weapon == null ? null : TweakDataManager.TryGetTweak(weapon.def); + + // Apply weapon. + var itemPart = GetPart(itemName); + + if (weapon == null || itemPart == null || tweak == null) + return true; + + tweak.Apply(this, itemPart); + var ov = GetOverride(itemPart); + ov.Weapon = weapon; + ov.Material = weapon.Graphic?.MatSingleFor(weapon); + ov.UseMPB = false; // Do not use the material property block, because it will override the material second color and mask. + + // FIX: Certain vanilla textures are set to Clamp instead of Wrap. This breaks flipping. + // Which ones seems random. (Beer is Clamp, Breach Axe is Repeat). + // For now, force them to be Repeat. Not sure if this will have any negative impact elsewhere in the game. Hopefully not. + if (ov.Material != null) + { + var main = ov.Material.mainTexture; + if(main != null) + main.wrapMode = TextureWrapMode.Repeat; + + var mask = ov.Material.HasProperty(ShaderPropertyIDs.MaskTex) ? ov.Material.GetTexture(ShaderPropertyIDs.MaskTex) : null; + if (mask != null) + mask.wrapMode = TextureWrapMode.Repeat; + } + + if (ov.CustomRenderer != null) + ov.CustomRenderer.Item = weapon; + + InitSweepMeshes(); + foreach (var path in sweeps) + { + if (path.Part == itemPart) + { + path.DownDst = tweak.BladeStart; + path.UpDst = tweak.BladeEnd; + } + } + + return true; + } + + private void ConfigureHandsForPawn(Pawn pawn, int index) + { + var weapon = pawn.GetFirstMeleeWeapon(); + var tweak = weapon?.TryGetTweakData(); + var handsMode = tweak?.HandsMode ?? HandsMode.Default; + + // Hands and skin color... + string mainHandName = $"HandA{(index > 0 ? index + 1 : "")}"; + string altHandName = $"HandB{(index > 0 ? index + 1 : "")}"; + + Color skinColor = pawn.story?.SkinColor ?? Color.white; + + // Hand visibility uses the animation data first and foremost, and if the animation does + // not care about hand visibility, then it is dictated by the weapon. + var vis = Def.GetHandsVisibility(index); + + /* + * Order of descending priority for deciding what hand(s) to show: + * - Mod settings. + * - Has hands (humanoids only). + * - Animation requirement. + * - Weapon requirement. + */ + + // Settings: + bool settingsShowHands = Core.Settings.ShowHands; + + // Humanoid? + bool isHumanoid = pawn.RaceProps.Humanlike; + + // Animation requirement. + bool? animMainHand = vis.showMainHand; + bool? animAltHand = vis.showAltHand; + + // Weapon requirement: + bool? weaponMainHand = weapon == null ? null : handsMode != HandsMode.No_Hands; + bool? weaponAltHand = weapon == null ? null : handsMode == HandsMode.Default; + + // Final calculation: + bool showMain = settingsShowHands && isHumanoid && (animMainHand ?? weaponMainHand ?? false); + bool showAlt = settingsShowHands && isHumanoid && (animAltHand ?? weaponAltHand ?? false); + + // Apply main hand. + var mainHandPart = GetPart(mainHandName); + if (mainHandPart != null) + { + var ov = GetOverride(mainHandPart); + ov.PreventDraw = !showMain; + ov.Texture = AnimationManager.HandTexture; + ov.ColorOverride = skinColor; + } + + // Apply alt hand. + var altHandPart = GetPart(altHandName); + if (mainHandPart != null) + { + var ov = GetOverride(altHandPart); + ov.PreventDraw = !showAlt; + ov.Texture = AnimationManager.HandTexture; + ov.ColorOverride = skinColor; + } + } + + public override string ToString() => Def.label == null ? Def.defName : Def.LabelCap; + + public class SaveData : IExposable + { + public HashSet DuelSegmentsDone = new HashSet(); + public int DuelSegmentsDoneCount; + public int TargetDuelSegmentCount; + + public void ExposeData() + { + Scribe_Values.Look(ref DuelSegmentsDoneCount, "duelSegmentsDoneCount"); + Scribe_Values.Look(ref TargetDuelSegmentCount, "targetDuelSegmentCount"); + Scribe_Collections.Look(ref DuelSegmentsDone, "duelSegmentsDone", LookMode.Value); + DuelSegmentsDone ??= new HashSet(); + } + } + + private readonly struct PawnLinkedParts + { + public required int BodyIndex { get; init; } + public required int HeadIndex { get; init; } + } +} \ No newline at end of file diff --git a/Source/AnimationMod/AnimType.cs b/Source/1.4/ThingGenerator/AnimType.cs similarity index 100% rename from Source/AnimationMod/AnimType.cs rename to Source/1.4/ThingGenerator/AnimType.cs diff --git a/Source/1.4/ThingGenerator/AnimationManager.cs b/Source/1.4/ThingGenerator/AnimationManager.cs new file mode 100644 index 00000000..7739a25a --- /dev/null +++ b/Source/1.4/ThingGenerator/AnimationManager.cs @@ -0,0 +1,265 @@ +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; +using AM.Events; +using AM.Heads; +using AM.Processing; +using UnityEngine; +using Verse; + +namespace AM +{ + public class AnimationManager : MapComponent + { + public static ConditionalWeakTable PawnToHeadInstance { get; } = new ConditionalWeakTable(); + + [TweakValue("Melee Animation Mod", 0, 10)] + public static int CullingPadding = 5; + public static bool IsDoingMultithreadedSeek { get; private set; } + public static double MultithreadedSeekTimeMS; + public static Texture2D HandTexture; + + private static ulong frameLastSeeked; + + public static void Init() + { + HandTexture = ContentFinder.Get("AM/Hand"); + } + + public readonly MapPawnProcessor PawnProcessor; + + private readonly List toDraw = new List(); + private readonly List<(Pawn pawn, Vector2 position)> labels = new List<(Pawn pawn, Vector2 position)>(); + private readonly List heads = new List(128); + private HashSet ioRenderers = new HashSet(); + + public AnimationManager(Map map) : base(map) + { + PawnProcessor = new MapPawnProcessor(map); + } + + public override void MapRemoved() + { + base.MapRemoved(); + PawnProcessor.Dispose(); + foreach (var head in heads) + { + PawnToHeadInstance.Remove(head.Pawn); + } + heads.Clear(); + } + + public void AddPostDraw(Action draw) + { + if (draw != null) + toDraw.Add(draw); + } + + public override void MapComponentUpdate() + { + base.MapComponentUpdate(); + + float dt = Time.deltaTime * Find.TickManager.TickRateMultiplier; + if (Find.TickManager.Paused) + dt = 0f; + + RenderHeads(); + Draw(dt); + + + foreach (var action in toDraw) + action?.Invoke(); + toDraw.Clear(); + } + + public override void MapComponentTick() + { + base.MapComponentTick(); + + PawnProcessor.Tick(); + } + + public override void MapComponentOnGUI() + { + base.MapComponentOnGUI(); + + AnimRenderer.DrawAllGUI(map); + + foreach (var pair in labels) + { + GenMapUI.DrawPawnLabel(pair.pawn, pair.position); + } + } + + public void Draw(float deltaTime) + { + labels.Clear(); + IsDoingMultithreadedSeek = Core.Settings.MultithreadedMatrixCalculations && AnimRenderer.ActiveRenderers.Count >= 10 && Core.Settings.MaxProcessingThreads != 1; + if (IsDoingMultithreadedSeek) + SeekMultithreaded(deltaTime); + + var viewBounds = Find.CameraDriver.CurrentViewRect.ExpandedBy(CullingPadding); + + Action onEvent = null; + if (!IsDoingMultithreadedSeek) + onEvent = DoEvent; + + AnimRenderer.DrawAll(deltaTime, map, onEvent, viewBounds, Core.Settings.DrawNamesInAnimation ? DrawLabel : null); + AnimRenderer.RemoveDestroyed(); + } + + public void AddDroppedHeadFor(Pawn pawn, AnimRenderer animRenderer) + { + var head = animRenderer.GetPawnHead(pawn); + var body = animRenderer.GetPawnBody(pawn); + if (head == null || body == null) + { + Core.Warn("Failed to find head and/or body part to spawn dropped head."); + return; + } + + var headSS = animRenderer.GetSnapshot(head); + var bodySS = animRenderer.GetSnapshot(body); + + var instance = new HeadInstance + { + Pawn = pawn, + Direction = bodySS.GetWorldDirection(), + Position = headSS.GetWorldPosition(), + Rotation = headSS.GetWorldRotation(), + TimeToLive = 120, + Map = pawn.Map ?? pawn.Corpse?.Map + }; + + heads.Add(instance); + + PawnToHeadInstance.Add(pawn, instance); + } + + private void RenderHeads() + { + for (int i = 0; i < heads.Count; i++) + { + var head = heads[i]; + bool stayAlive; + try + { + stayAlive = head.Render(); + } + catch (Exception e) + { + Core.Error($"Exception rendering dropped head of {head.Pawn}. Head will be deleted.", e); + stayAlive = false; + } + + if (!stayAlive) + { + PawnToHeadInstance.Remove(head.Pawn); + // Remove at swap back, for speed reasons: + heads[i] = heads[^1]; + heads.RemoveAt(heads.Count - 1); + i--; + } + } + } + + private static readonly List<(AnimRenderer, EventBase)> eventsToDo = new List<(AnimRenderer, EventBase)>(128); + + private static void SeekMultithreaded(float dt) + { + if (frameLastSeeked == GameComp.FrameCounter) + return; + + frameLastSeeked = GameComp.FrameCounter; + + var timer = new RefTimer(); + + if (dt <= 0) + { + timer.GetElapsedMilliseconds(out MultithreadedSeekTimeMS); + return; + } + + // Processing: + eventsToDo.Clear(); + Parallel.For(0, AnimRenderer.ActiveRenderers.Count, i => + { + var animator = AnimRenderer.ActiveRenderers[i]; + + if (animator.IsDestroyed) + return; + + animator.Seek(null, dt, e => eventsToDo.Add((animator, e)), true); + }); + + // Events: + foreach (var pair in eventsToDo) + DoEvent(pair.Item1, pair.Item2); + + timer.GetElapsedMilliseconds(out MultithreadedSeekTimeMS); + } + + private static void DoEvent(AnimRenderer r, EventBase ev) + { + try + { + EventHelper.Handle(ev, r); + } + catch (Exception e) + { + Core.Error($"Exception handling event (mt) for {r} ({ev})", e); + } + } + + private void DrawLabel(Pawn pawn, Vector2 position) + { + labels.Add((pawn, position)); + } + + public override void ExposeData() + { + base.ExposeData(); + + ioRenderers ??= new HashSet(); + + switch (Scribe.mode) + { + case LoadSaveMode.Saving: + ioRenderers.Clear(); + + // Collect the active renderers that are on this map. + foreach (var renderer in AnimRenderer.ActiveRenderers) + { + if (renderer.ShouldSave && renderer.Map == this.map) + { + if (!ioRenderers.Add(renderer)) + Core.Error("There was a duplicate renderer in the list!"); + } + } + + // Save. + Scribe_Collections.Look(ref ioRenderers, "animationRenderers", LookMode.Deep); + break; + + case LoadSaveMode.LoadingVars: + AnimRenderer.ClearAll(); // Remove all previous renderers from the system. + ioRenderers.Clear(); + Scribe_Collections.Look(ref ioRenderers, "animationRenderers", LookMode.Deep); + break; + case LoadSaveMode.ResolvingCrossRefs: + Scribe_Collections.Look(ref ioRenderers, "animationRenderers", LookMode.Deep); + break; + case LoadSaveMode.PostLoadInit: + Scribe_Collections.Look(ref ioRenderers, "animationRenderers", LookMode.Deep); + + // Write back to general system. + AnimRenderer.PostLoadPendingAnimators.AddRange(ioRenderers); + + Core.Log($"Loaded {ioRenderers.Count} animation renderers on map {map}"); + ioRenderers.Clear(); + break; + } + } + } +} diff --git a/Source/1.4/ThingGenerator/AnimationMod.csproj b/Source/1.4/ThingGenerator/AnimationMod.csproj new file mode 100644 index 00000000..5beb413b --- /dev/null +++ b/Source/1.4/ThingGenerator/AnimationMod.csproj @@ -0,0 +1,62 @@ + + + + + net472 + Library + 11 + false + true + false + false + Release + zAnimationMod + AM + disable + true + none + true + + + + + <_Parameter1>$([System.DateTime]::UtcNow.ToString("yyyyMMddHHmmss")) + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + runtime + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + 0ColourPicker.dll + + + + + + + + + + + + + + + + + + + ..\..\..\1.4\Assemblies\ + true + TRACE;V14 + + + diff --git a/Source/AnimationMod/AnimationStartParameters.cs b/Source/1.4/ThingGenerator/AnimationStartParameters.cs similarity index 100% rename from Source/AnimationMod/AnimationStartParameters.cs rename to Source/1.4/ThingGenerator/AnimationStartParameters.cs diff --git a/Source/AnimationMod/AudioCredits.txt b/Source/1.4/ThingGenerator/AudioCredits.txt similarity index 100% rename from Source/AnimationMod/AudioCredits.txt rename to Source/1.4/ThingGenerator/AudioCredits.txt diff --git a/Source/AnimationMod/AudioUtility.cs b/Source/1.4/ThingGenerator/AudioUtility.cs similarity index 100% rename from Source/AnimationMod/AudioUtility.cs rename to Source/1.4/ThingGenerator/AudioUtility.cs diff --git a/Source/1.4/ThingGenerator/AutoDuel/AutoFriendlyDuelMapComp.cs b/Source/1.4/ThingGenerator/AutoDuel/AutoFriendlyDuelMapComp.cs new file mode 100644 index 00000000..8c853f48 --- /dev/null +++ b/Source/1.4/ThingGenerator/AutoDuel/AutoFriendlyDuelMapComp.cs @@ -0,0 +1,169 @@ +using AM.Buildings; +using AM.Tweaks; +using JetBrains.Annotations; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Verse; + +namespace AM.AutoDuel; + +[UsedImplicitly(ImplicitUseKindFlags.InstantiatedWithFixedConstructorSignature)] +public class AutoFriendlyDuelMapComp : MapComponent +{ + [UsedImplicitly(ImplicitUseKindFlags.Access)] + [DebugAction("Melee Animation", allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void LogAutoDuelInfo() + { + var map = Find.CurrentMap; + if (map == null) + return; + + var comp = map.GetComponent(); + Core.Log($"There are {comp.DuelSpots.Count} duel spots on the map."); + Core.Log($"Spots with active duels: {comp.GetActiveDuelSpots()}"); + + Core.Log("All possible pawns (not filtered):"); + foreach (var p in comp.EnumeratePossiblePawns()) + { + Core.Log(p.ToString()); + } + + Core.Log("All possible pawns (filtered and cached):"); + foreach (var p in comp.pawnsThatCanDuel) + { + Core.Log(p.ToString()); + } + } + + public readonly HashSet DuelSpots = new HashSet(); + + private readonly HashSet pawnsThatCanDuel = new HashSet(); + + public AutoFriendlyDuelMapComp(Map map) : base(map) { } + + public bool CanPawnMaybeDuel(Pawn pawn) => pawnsThatCanDuel.Contains(pawn); + + public Pawn TryGetRandomDuelPartner(Pawn except) + { + if (pawnsThatCanDuel.Count <= 1) + return null; + + return pawnsThatCanDuel.Except(except).Where(CanPawnDuel).RandomElementWithFallback(); + } + + public Building_DuelSpot TryGetBestDuelSpotFor(Pawn a, Pawn b) + { + var spots = from s in DuelSpots + where !s.IsForbidden && !s.IsForbidden(a) && !s.IsForbidden(b) && !s.IsInUse(out _, out _) + let dst = s.Position.DistanceToSquared(a.Position) + s.Position.DistanceToSquared(b.Position) + orderby dst + select s; + + return spots.FirstOrDefault(); + } + + public IEnumerable GetActiveDuelSpots() + { + foreach (var spot in DuelSpots) + { + if (spot.IsInUse(out var a, out var b)) + { + yield return new ActiveDuelSpot + { + Spot = spot, + PawnA = a, + PawnB = b + }; + } + } + } + + public override void MapComponentTick() + { + base.MapComponentTick(); + + if (Find.TickManager.TicksAbs % (60 * 1) != 0) + return; + + try + { + UpdatePawnsThatCanDuel(); + } + catch (Exception e) + { + Core.Error("Exception updating friendly duel pawn cached list.", e); + } + } + + private void UpdatePawnsThatCanDuel() + { + pawnsThatCanDuel.Clear(); + + if (Core.Settings.MaxProcessingThreads != 1) + { + // Threaded find. + Parallel.ForEach(EnumeratePossiblePawns(), p => + { + if (!CanPawnDuel(p)) + return; + + lock (pawnsThatCanDuel) + { + pawnsThatCanDuel.Add(p); + } + }); + } + else + { + pawnsThatCanDuel.AddRange(EnumeratePossiblePawns().Where(CanPawnDuel)); + } + } + + private IEnumerable EnumeratePossiblePawns() + { + foreach (var p in map.mapPawns.FreeColonistsSpawned) + yield return p; + foreach (var p in map.mapPawns.SlavesOfColonySpawned) + yield return p; + } + + public static bool CanPawnDuel(Pawn pawn) + { + // Not dead, downed or drafted. + if (pawn == null || pawn.Dead || pawn.Downed || pawn.Drafted) + return false; + + // Pawn must have weapon. + var weapon = pawn.GetFirstMeleeWeapon(out var td); + if (weapon == null) + return false; + + const MeleeWeaponType TYPE_MASK = MeleeWeaponType.Long_Stab | + MeleeWeaponType.Long_Sharp | + MeleeWeaponType.Long_Blunt; + + // And that weapon must be long (for now). + if ((td.MeleeWeaponType & TYPE_MASK) == 0) + return false; + + // Duel must not be on cooldown: + if (!pawn.GetMeleeData().IsFriendlyDuelOffCooldown()) + return false; + + // Check pawn is in recreation and not doing anything majorly important. + if (pawn.timetable.CurrentAssignment != TimeAssignmentDefOf.Joy || !(pawn.CurJobDef?.playerInterruptible ?? true)) + return false; + + return true; + } +} + +public readonly struct ActiveDuelSpot +{ + public Building_DuelSpot Spot { get; init; } + public Pawn PawnA { get; init; } + public Pawn PawnB { get; init; } +} diff --git a/Source/1.4/ThingGenerator/AutoDuel/JoyGiver_FriendlyDuel.cs b/Source/1.4/ThingGenerator/AutoDuel/JoyGiver_FriendlyDuel.cs new file mode 100644 index 00000000..4c257ba2 --- /dev/null +++ b/Source/1.4/ThingGenerator/AutoDuel/JoyGiver_FriendlyDuel.cs @@ -0,0 +1,53 @@ +using JetBrains.Annotations; +using RimWorld; +using Verse; +using Verse.AI; + +namespace AM.AutoDuel; + +[UsedImplicitly] +public class JoyGiver_FriendlyDuel : JoyGiver +{ + public override Job TryGiveJob(Pawn pawn) + { + // Duel on cooldown check: + if (!pawn.GetMeleeData().IsFriendlyDuelOffCooldown()) + return null; + + // Get map comp to see if this pawn is eligible: + var comp = pawn.Map?.GetComponent(); + if (comp == null) + return null; + + // The comp will cache any pawns that have valid melee weapons: + if (!comp.CanPawnMaybeDuel(pawn)) + return null; + + // Check still valid (cache could be out of date): + if (!AutoFriendlyDuelMapComp.CanPawnDuel(pawn)) + return null; + + // Try get a duel partner. + var partner = comp.TryGetRandomDuelPartner(pawn); + if (partner == null) + return null; + + // Try get a duel spot for us two: + var spot = comp.TryGetBestDuelSpotFor(pawn, partner); + if (spot == null) + return null; + + // Try give job to opponent: + Core.Log($"Interrupting {partner}'s {partner.CurJob} to start a friendly duel with {pawn}, auto mode."); + + var opJob = spot.MakeDuelJob(pawn, false); + partner.jobs.StartJob(opJob, JobCondition.InterruptForced); + if (partner.CurJobDef != AM_DefOf.AM_DoFriendlyDuel) + { + Core.Error($"Failed to give {partner} the friendly duel job (automatic), probably mod incompatibility."); + return null; + } + + return spot.MakeDuelJob(partner, true); + } +} \ No newline at end of file diff --git a/Source/AnimationMod/AutoDuel/JoyGiver_SpectateFriendlyDuel.cs b/Source/1.4/ThingGenerator/AutoDuel/JoyGiver_SpectateFriendlyDuel.cs similarity index 100% rename from Source/AnimationMod/AutoDuel/JoyGiver_SpectateFriendlyDuel.cs rename to Source/1.4/ThingGenerator/AutoDuel/JoyGiver_SpectateFriendlyDuel.cs diff --git a/Source/AnimationMod/Bezier.cs b/Source/1.4/ThingGenerator/Bezier.cs similarity index 100% rename from Source/AnimationMod/Bezier.cs rename to Source/1.4/ThingGenerator/Bezier.cs diff --git a/Source/AnimationMod/Buildings/Building_DuelSpot.cs b/Source/1.4/ThingGenerator/Buildings/Building_DuelSpot.cs similarity index 100% rename from Source/AnimationMod/Buildings/Building_DuelSpot.cs rename to Source/1.4/ThingGenerator/Buildings/Building_DuelSpot.cs diff --git a/Source/AnimationMod/ColumnWorkers/PawnColumnWorker_Base.cs b/Source/1.4/ThingGenerator/ColumnWorkers/PawnColumnWorker_Base.cs similarity index 100% rename from Source/AnimationMod/ColumnWorkers/PawnColumnWorker_Base.cs rename to Source/1.4/ThingGenerator/ColumnWorkers/PawnColumnWorker_Base.cs diff --git a/Source/AnimationMod/ColumnWorkers/PawnColumnWorker_Execute.cs b/Source/1.4/ThingGenerator/ColumnWorkers/PawnColumnWorker_Execute.cs similarity index 100% rename from Source/AnimationMod/ColumnWorkers/PawnColumnWorker_Execute.cs rename to Source/1.4/ThingGenerator/ColumnWorkers/PawnColumnWorker_Execute.cs diff --git a/Source/AnimationMod/ColumnWorkers/PawnColumnWorker_Lasso.cs b/Source/1.4/ThingGenerator/ColumnWorkers/PawnColumnWorker_Lasso.cs similarity index 100% rename from Source/AnimationMod/ColumnWorkers/PawnColumnWorker_Lasso.cs rename to Source/1.4/ThingGenerator/ColumnWorkers/PawnColumnWorker_Lasso.cs diff --git a/Source/AnimationMod/Content.cs b/Source/1.4/ThingGenerator/Content.cs similarity index 100% rename from Source/AnimationMod/Content.cs rename to Source/1.4/ThingGenerator/Content.cs diff --git a/Source/AnimationMod/Controller/ActionController.cs b/Source/1.4/ThingGenerator/Controller/ActionController.cs similarity index 100% rename from Source/AnimationMod/Controller/ActionController.cs rename to Source/1.4/ThingGenerator/Controller/ActionController.cs diff --git a/Source/AnimationMod/Controller/Reports/DuelAttemptReport.cs b/Source/1.4/ThingGenerator/Controller/Reports/DuelAttemptReport.cs similarity index 100% rename from Source/AnimationMod/Controller/Reports/DuelAttemptReport.cs rename to Source/1.4/ThingGenerator/Controller/Reports/DuelAttemptReport.cs diff --git a/Source/AnimationMod/Controller/Reports/ExecutionAttemptReport.cs b/Source/1.4/ThingGenerator/Controller/Reports/ExecutionAttemptReport.cs similarity index 100% rename from Source/AnimationMod/Controller/Reports/ExecutionAttemptReport.cs rename to Source/1.4/ThingGenerator/Controller/Reports/ExecutionAttemptReport.cs diff --git a/Source/AnimationMod/Controller/Reports/GrappleAttemptReport.cs b/Source/1.4/ThingGenerator/Controller/Reports/GrappleAttemptReport.cs similarity index 100% rename from Source/AnimationMod/Controller/Reports/GrappleAttemptReport.cs rename to Source/1.4/ThingGenerator/Controller/Reports/GrappleAttemptReport.cs diff --git a/Source/AnimationMod/Controller/Requests/DuelAttemptRequest.cs b/Source/1.4/ThingGenerator/Controller/Requests/DuelAttemptRequest.cs similarity index 100% rename from Source/AnimationMod/Controller/Requests/DuelAttemptRequest.cs rename to Source/1.4/ThingGenerator/Controller/Requests/DuelAttemptRequest.cs diff --git a/Source/AnimationMod/Controller/Requests/ExecutionAttemptRequest.cs b/Source/1.4/ThingGenerator/Controller/Requests/ExecutionAttemptRequest.cs similarity index 100% rename from Source/AnimationMod/Controller/Requests/ExecutionAttemptRequest.cs rename to Source/1.4/ThingGenerator/Controller/Requests/ExecutionAttemptRequest.cs diff --git a/Source/AnimationMod/Controller/Requests/GrappleAttemptsRequest.cs b/Source/1.4/ThingGenerator/Controller/Requests/GrappleAttemptsRequest.cs similarity index 100% rename from Source/AnimationMod/Controller/Requests/GrappleAttemptsRequest.cs rename to Source/1.4/ThingGenerator/Controller/Requests/GrappleAttemptsRequest.cs diff --git a/Source/AnimationMod/Core.cs b/Source/1.4/ThingGenerator/Core.cs similarity index 100% rename from Source/AnimationMod/Core.cs rename to Source/1.4/ThingGenerator/Core.cs diff --git a/Source/1.4/ThingGenerator/Data/AnimData.cs b/Source/1.4/ThingGenerator/Data/AnimData.cs new file mode 100644 index 00000000..99febd17 --- /dev/null +++ b/Source/1.4/ThingGenerator/Data/AnimData.cs @@ -0,0 +1,698 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEngine; +using AM; +using AM.Tweaks; +using Newtonsoft.Json; +using AM.Data.Model; +using AM.Events; +#if !UNITY_EDITOR +using Verse; +#endif + +public class AnimData +{ + #region Static Stuff + + private static Mesh m, mfx, mfy, mfxy; + private static readonly Dictionary cache = new Dictionary(); + + public static Mesh GetMesh(bool flipX, bool flipY) + { + if (m == null) + { + m = MakeMesh(Vector2.one, false, false); + mfx = MakeMesh(Vector2.one, true, false); + mfy = MakeMesh(Vector2.one, false, true); + mfxy = MakeMesh(Vector2.one, true, true); + } + return (flipX && flipY) ? mfxy : flipX ? mfx : flipY ? mfy : m; + } + + private static Mesh MakeMesh(Vector2 size, bool flipX, bool flipY) + { + var normal = new Vector2[] + { + new Vector2(0, 0),// Bottom-left + new Vector2(0, 1),// Top-left + new Vector2(1, 1),// Top-right + new Vector2(1, 0) // Bottom-right + }; + var fx = new Vector2[] + { + new Vector2(1, 0),// Bottom-left + new Vector2(1, 1),// Top-left + new Vector2(0, 1),// Top-right + new Vector2(0, 0) // Bottom-right + }; + var fy = new Vector2[] + { + new Vector2(0, 0), // Bottom-left + new Vector2(0, -1),// Top-left + new Vector2(1, -1),// Top-right + new Vector2(1, 0) // Bottom-right + }; + var fxy = new Vector2[] + { + new Vector2(1, 0), // Bottom-left + new Vector2(1, -1),// Top-left + new Vector2(0, -1),// Top-right + new Vector2(0, 0) // Bottom-right + }; + + Vector3[] verts = new Vector3[4]; + int[] tris = new int[6]; + verts[0] = new Vector3(-0.5f * size.x, 0f, -0.5f * size.y); // Bottom-left + verts[1] = new Vector3(-0.5f * size.x, 0f, 0.5f * size.y); // Top-left + verts[2] = new Vector3(0.5f * size.x, 0f, 0.5f * size.y); // Top-right + verts[3] = new Vector3(0.5f * size.x, 0f, -0.5f * size.y); // Bottom-right + tris[0] = 0; + tris[1] = 1; + tris[2] = 2; + tris[3] = 0; + tris[4] = 2; + tris[5] = 3; + Mesh mesh = new(); + mesh.name = $"AM Mesh: {flipX}, {flipY}"; + mesh.vertices = verts; + mesh.uv = (flipX && flipY) ? fxy : flipX ? fx : flipY ? fy : normal; + mesh.SetTriangles(tris, 0); + mesh.RecalculateNormals(); + mesh.RecalculateBounds(); + return mesh; + } + + public static AnimData Load(string filePath, bool allowFromCache = true, bool saveToCache = true) + { + if (filePath == null) + return null; + + if (allowFromCache) + { + if (cache.TryGetValue(filePath, out var found)) + return found; + } + + var loaded = Load(File.ReadAllText(filePath)); + + if (saveToCache) + cache[filePath] = loaded; + + return loaded; + } + + private static AnimData Load(string json) + { + var settings = new JsonSerializerSettings(); + settings.Converters.Add(new RectConverter()); + var model = JsonConvert.DeserializeObject(json, settings); + + var data = new AnimData() + { + Name = model.Name, + Duration = model.Length, + Bounds = model.Bounds, + ExportTimeUTC = model.ExportTimeUTC + }; + + // Make parts... + var parts = new List(); + var idToPart = new Dictionary(); + int i = 0; + foreach (var part in model.Parts) + { + var dp = new AnimPartData(part) + { + Path = part.Path, + CustomName = part.CustomName, + TexturePath = part.TexturePath, + ID = part.ID, + Index = i++, + TransparentByDefault = part.TransparentByDefault + }; + + parts.Add(dp); + idToPart.Add(dp.ID, dp); + } + + // Part children, parent and split draw pivot. + foreach (var part in model.Parts) + { + var dp = idToPart[part.ID]; + + // Parent & children. + if (part.ParentID != 0) + { + dp.Parent = idToPart[part.ParentID]; + dp.Parent.Children.Add(dp); + } + + // Split draw pivot. + if (part.SplitDrawPivotPartID != 0) + { + dp.SplitDrawPivot = idToPart[part.SplitDrawPivotPartID]; + } + } + + // Make events. + var events = new List(); + foreach (var e in model.Events) + { + var created = EventBase.CreateFromSaveData(e.Data); + if (created == null) + { + Core.Error($"Failed to create EventBase from data '{e.Data}'"); + continue; + } + + created.Time = e.Time; + events.Add(created); + } + + // Make sweep data. + var sweeps = new Dictionary>(); + foreach (var part in model.Parts) + { + var dp = idToPart[part.ID]; + foreach (var sweep in part.SweepPaths) + { + if (!sweeps.TryGetValue(dp, out var list)) + { + list = new List(); + sweeps.Add(dp, list); + } + + list.Add(new SweepPointCollection(sweep)); + } + } + + data.parts = parts.ToArray(); + data.events = events.ToArray(); + data.sweeps = sweeps; + + return data; + } + + public enum SplitDrawMode + { + None, + Before, + After, + BeforeAndAfter, + } + + #endregion + + public string Name { get; private set; } + public float Duration { get; private set; } + public Rect Bounds { get; private set; } + public DateTime ExportTimeUTC { get; private set; } + public IReadOnlyList Parts => parts; + public IReadOnlyList Events => events; + public int SweepDataCount => sweeps.Count; + public IEnumerable PartsWithSweepData => sweeps.Keys; + + private AnimPartData[] parts; + private EventBase[] events; + private Dictionary> sweeps; + + public AnimPartData GetPart(string name) + { + if (name == null) + return null; + + foreach (var part in parts) + { + if (part.Name == name) + return part; + } + + return null; + } + + public int GetPartIndex(string partName) + { + return parts.FirstIndexOf(p => p.Name == partName); + } + + public IReadOnlyList GetSweepPaths(AnimPartData forPart) + { + if (forPart != null && sweeps.TryGetValue(forPart, out var found)) + return found; + return Array.Empty(); + } + + public IEnumerable GetEventsInPeriod(Vector2 range) + { + foreach (var e in events) + { + if (e.IsInTimeWindow(range)) + yield return e; + } + } +} + +public class AnimPartData +{ + private static AnimationCurve MakeConstantCurve(float value) + { + return new AnimationCurve(new Keyframe(0f, value)) { postWrapMode = WrapMode.ClampForever, preWrapMode = WrapMode.ClampForever }; + } + + public string Name => CustomName ?? Path; + + public string Path; + public string CustomName; + public string TexturePath; + public int ID; + public int Index; + public bool TransparentByDefault; + public List Children = new List(); + public AnimPartData Parent; + public AnimPartData SplitDrawPivot; + + public readonly AnimationCurve PosX, PosY, PosZ; + public readonly AnimationCurve RotX, RotY, RotZ; + public readonly AnimationCurve ScaleX, ScaleY, ScaleZ; + public readonly AnimationCurve DataA, DataB, DataC; + public readonly AnimationCurve ColorR, ColorG, ColorB, ColorA; + public readonly AnimationCurve FlipX, FlipY; + public readonly AnimationCurve Active; + public readonly AnimationCurve Direction; + public readonly AnimationCurve SplitDrawModeCurve; + public readonly AnimationCurve FrameIndex; + + public AnimPartData(AnimPartModel model) + { + AnimationCurve GetCurve(string prop) + { + // Try get active curve. + if (model.Curves.TryGetValue(prop, out var found)) + return found.ToAnimationCurve(); + + // Try get a default value curve. + if (model.DefaultValues.TryGetValue(prop, out float def)) + return MakeConstantCurve(def); + + // Not found... + return null; + } + + // Is Active. + Active = GetCurve("GameObject.m_IsActive"); + + // Facing direction. + Direction = GetCurve("PawnBody.Direction"); + + // Position. + PosX = GetCurve("Transform.m_LocalPosition.x"); + PosY = GetCurve("Transform.m_LocalPosition.y"); + PosZ = GetCurve("Transform.m_LocalPosition.z"); + + // Rotation. + RotX = GetCurve("Transform.localEulerAnglesRaw.x"); + RotY = GetCurve("Transform.localEulerAnglesRaw.y"); + RotZ = GetCurve("Transform.localEulerAnglesRaw.z"); + + // Scale. + ScaleX = GetCurve("Transform.m_LocalScale.x"); + ScaleY = GetCurve("Transform.m_LocalScale.y"); + ScaleZ = GetCurve("Transform.m_LocalScale.z"); + + // Data. + DataA = GetCurve("AnimatedPart.DataA"); + DataB = GetCurve("AnimatedPart.DataB"); + DataC = GetCurve("AnimatedPart.DataC"); + + // Tint. + ColorR = GetCurve("AnimatedPart.Tint.r"); + ColorG = GetCurve("AnimatedPart.Tint.g"); + ColorB = GetCurve("AnimatedPart.Tint.b"); + ColorA = GetCurve("AnimatedPart.Tint.a"); + + // Flip. + FlipX = GetCurve("AnimatedPart.FlipX"); + FlipY = GetCurve("AnimatedPart.FlipY"); + + // Misc. + SplitDrawModeCurve = GetCurve("AnimatedPart.SplitDrawMode"); + FrameIndex = GetCurve("AnimatedPart.FrameIndex"); + } + + public AnimPartSnapshot GetSnapshot(AnimRenderer renderer) + { + if (renderer == null) + return default; + return renderer.GetSnapshot(this); + } +} + +public struct AnimPartSnapshot +{ + public bool Valid => Part != null; + public string TexturePath => Part?.TexturePath == null ? null : (Part.TexturePath + (FrameIndex > 0 ? FrameIndex.ToString() : null)); + public string PartName => Part?.Name; + public float Depth => WorldMatrix.MultiplyPoint3x4(Vector3.zero).y; + public AnimPartData SplitDrawPivot => Part?.SplitDrawPivot; + public Color FinalColor + { + get + { + if (Renderer == null) + return default; + + var ov = Renderer.GetOverride(this); + if (ov.ColorOverride != default) + return ov.ColorOverride; + + return Color * ov.ColorTint; + } + } + + public readonly AnimRenderer Renderer; + public readonly AnimPartData Part; + public float Time; + + public Vector3 LocalPosition; + public Vector3 LocalScale; + public Vector3 LocalRotation; + public Color Color; + public float DataA, DataB, DataC; + public bool FlipX, FlipY; + public bool Active; + public Rot4 Direction; + public int FrameIndex; + public AnimData.SplitDrawMode SplitDrawMode; + + public Matrix4x4 LocalMatrix; + public Matrix4x4 WorldMatrix; + public Matrix4x4 WorldMatrixNoOverride; + public Matrix4x4 WorldMatrixPreserveFlip; + + public AnimPartSnapshot(AnimPartData part, AnimRenderer renderer, float time) + { + Part = part ?? throw new ArgumentNullException(nameof(part)); + Renderer = renderer ?? throw new ArgumentNullException(nameof(renderer)); + Time = time; + + LocalPosition = new Vector3(Eval(part.PosX, time), Eval(part.PosY, time), Eval(part.PosZ, time)); + LocalRotation = new Vector3(Eval(part.RotX, time), Eval(part.RotY, time), Eval(part.RotZ, time)); + LocalScale = new Vector3(Eval(part.ScaleX, time), Eval(part.ScaleY, time), Eval(part.ScaleZ, time)); + + DataA = Eval(part.DataA, time); + DataB = Eval(part.DataB, time); + DataC = Eval(part.DataC, time); + + Color = new Color(Eval(part.ColorR, time), Eval(part.ColorG, time), Eval(part.ColorB, time), Eval(part.ColorA, time)); + + FlipX = Eval(part.FlipX, time) >= 0.5f; + FlipY = Eval(part.FlipY, time) >= 0.5f; + + Active = Eval(part.Active, time) >= 0.5f; + SplitDrawMode = (AnimData.SplitDrawMode)(int)Eval(part.SplitDrawModeCurve, time); + FrameIndex = (int)Eval(part.FrameIndex, time); + + Direction = new Rot4((byte)Eval(part.Direction, time)); + + LocalMatrix = default; + WorldMatrix = default; + WorldMatrixNoOverride = default; + UpdateLocalMatrix(); + } + + public readonly Vector3 GetWorldPosition(Vector3 localPos = default) + { + return (Renderer.RootTransform * WorldMatrix).MultiplyPoint3x4(localPos); + } + + public readonly Vector3 GetWorldPositionNoOverride(Vector3 localPos = default) + { + return (Renderer.RootTransform * WorldMatrixNoOverride).MultiplyPoint3x4(localPos); + } + + public readonly Rot4 GetWorldDirection() + { + // Should this respect flip? + // Override flip too? + bool mx = Renderer.MirrorHorizontal; + bool my = Renderer.MirrorVertical; + return Direction.AsInt switch + { + 0 => my ? Rot4.South : Rot4.North, // North + 1 => mx ? Rot4.West : Rot4.East, // East + 2 => my ? Rot4.North : Rot4.South, // South + 3 => mx ? Rot4.East : Rot4.West, // West + _ => throw new Exception("Invalid") + }; + } + + public readonly float GetWorldRotation() + { + return (Renderer.RootTransform * WorldMatrix).rotation.eulerAngles.y; + } + + public void UpdateLocalMatrix() + { + LocalMatrix = Matrix4x4.TRS(LocalPosition, Quaternion.Euler(LocalRotation), LocalScale); + } + + private readonly Matrix4x4 MakeWorldMatrix() + { + if (Part?.Parent == null) + return LocalMatrix; + + return Renderer.GetSnapshot(Part.Parent).MakeWorldMatrix() * LocalMatrix; + } + + private readonly bool MakeHierarchyActive() + { + if (Part?.Parent == null) + return Active; + return Active && Renderer.GetSnapshot(Part.Parent).MakeHierarchyActive(); + } + + public void UpdateWorldMatrix(bool mirrorX, bool mirrorY) + { + var preProc = Matrix4x4.Scale(new Vector3(mirrorX ? -1f : 1f, 1f, mirrorY ? -1f : 1f)); + var postProc = Matrix4x4.Scale(new Vector3(mirrorX ? -1f : 1f, 1f, mirrorY ? -1f : 1f)); + + var ov = Renderer.GetOverride(this); + bool fx = FlipX; + if (ov.FlipX) + fx = !fx; + bool fy = FlipY; + if (ov.FlipY) + fy = !fy; + + Vector2 off = new(fx ? -ov.LocalOffset.x : ov.LocalOffset.x, fy ? -ov.LocalOffset.y : ov.LocalOffset.y); + float offRot = fx ^ fy ? -ov.LocalRotation : ov.LocalRotation; + var adjust = Matrix4x4.TRS(new Vector3(off.x, 0f, off.y), Quaternion.Euler(0, offRot, 0f), new Vector3(ov.LocalScaleFactor.x, 1f, ov.LocalScaleFactor.y)); + + Active = MakeHierarchyActive(); + + var mat = MakeWorldMatrix(); + WorldMatrix = preProc * mat * adjust * postProc; + WorldMatrixNoOverride = preProc * mat * postProc; + WorldMatrixPreserveFlip = preProc * mat; + } + + private static float Eval(AnimationCurve curve, float time, float fallback = 0f) + { + return curve?.Evaluate(time) ?? fallback; + } + + public readonly override string ToString() + { + if (Part == null) + return ""; + + return $"[{Time:F2}s] {Part.Name}"; + } +} + +public class AnimPartOverrideData +{ + public Texture2D Texture; + public Material Material; + public bool PreventDraw; + public Vector2 LocalOffset; + public float LocalRotation; + public Vector2 LocalScaleFactor = Vector2.one; + public Color ColorTint = Color.white; + public Color ColorOverride; + public bool FlipX, FlipY; + public bool UseMPB = true; + public bool UseDefaultTransparentMaterial; + public PartRenderer CustomRenderer; + public object UserData; + public ItemTweakData TweakData; + public Thing Weapon; +} + +[Serializable] +public class SpaceRequirement +{ + #region Static functions + + public static IEnumerable GetAllMustBeClear(IEnumerable reqs) + { + foreach (var req in reqs) + { + if (req != null && req.Type == RequirementType.MustBeClear) + yield return req; + } + } + + public static (SpaceRequirement start, SpaceRequirement end) GetPawnPositions(IEnumerable reqs, int pawnIndex) + { + SpaceRequirement start = null; + SpaceRequirement end = null; + + foreach (var req in reqs) + { + if (req == null) + continue; + + if (req.Type == RequirementType.PawnStart && req.PawnIndex == pawnIndex) + start = req; + if (req.Type == RequirementType.PawnEnd && req.PawnIndex == pawnIndex) + end = req; + } + + start ??= end; + end ??= start; + + return (start, end); + } + + public static void Write(SpaceRequirement space, BinaryWriter writer) + { + writer.Write((byte)space.Type); + writer.Write(space.PawnIndex); + writer.Write((sbyte)space.Area.xMin); + writer.Write((sbyte)space.Area.yMin); + writer.Write((byte)space.Area.width); + writer.Write((byte)space.Area.height); + } + + public static SpaceRequirement Read(BinaryReader reader) + { + var type = (RequirementType)reader.ReadByte(); + var index = reader.ReadByte(); + int x = reader.ReadSByte(); + int y = reader.ReadSByte(); + int w = reader.ReadByte(); + int h = reader.ReadByte(); + + return new SpaceRequirement() + { + Type = type, + PawnIndex = index, + Area = new RectInt(x, y, w, h) + }; + } + + #endregion + + public enum RequirementType + { + MustBeClear, + PawnStart, + PawnEnd + } + + public int CellCount => Mathf.Abs(Area.width * Area.height); + public RectInt Area; + public RequirementType Type; + public byte PawnIndex; + + public void SetPoint(int x, int z) + { + Area = new RectInt(new Vector2Int(x, z), new Vector2Int(1, 1)); + } + + public (int x, int z) GetCell(bool fx, bool fy) + { + return GetCells(fx, fy).FirstOrDefault(); + } + + public IEnumerable<(int x, int z)> GetCells(bool fx, bool fy) + { + foreach (var cell in Area.allPositionsWithin) + { + var raw = Resolve(cell, fx, fy); + yield return (raw.x, raw.y); + } + } + + private Vector2Int Resolve(Vector2Int vector, bool fx, bool fy) + { + if (fx) + vector.x = -vector.x; + + if (fy) + vector.y = -vector.y; + + return vector; + } + + public void DrawGizmos() + { + if (CellCount == 0) + return; + + Color c = Type switch + { + RequirementType.MustBeClear => Color.cyan, + RequirementType.PawnStart => Color.green, + RequirementType.PawnEnd => Color.red, + _ => Color.white + }; + float shrink = Type switch + { + RequirementType.MustBeClear => 0f, + RequirementType.PawnStart => 0.1f, + RequirementType.PawnEnd => 0.2f, + _ => 1f + }; + + var center = new Vector3(Area.center.x - 0.5f, 0f, Area.center.y - 0.5f); + var size = new Vector3(Area.size.x - shrink, 0f, Area.size.y - shrink); + Gizmos.color = c; + Gizmos.DrawWireCube(center, size); + } +} + +public class SweepPointCollection +{ + public int Count => points?.Length ?? 0; + private readonly SweepPoint[] points; + + public SweepPointCollection(SweepPoint[] points) + { + this.points = points; + } + + public SweepPoint[] CloneWithVelocities(float downDst, float upDst) + { + SweepPoint[] clone = new SweepPoint[points.Length]; + Array.Copy(points, clone, points.Length); + + Vector3 prevDown = default; + Vector3 prevUp = default; + float prevTime = 0; + + for (int i = 0; i < clone.Length; i++) + { + if(i != 0) + clone[i].SetVelocity(downDst, upDst, prevDown, prevUp, prevTime); + + clone[i].GetEndPoints(downDst, upDst, out prevDown, out prevUp); + prevTime = clone[i].Time; + } + + return clone; + } +} diff --git a/Source/AnimationMod/Data/Model/AnimDataModel.cs b/Source/1.4/ThingGenerator/Data/Model/AnimDataModel.cs similarity index 100% rename from Source/AnimationMod/Data/Model/AnimDataModel.cs rename to Source/1.4/ThingGenerator/Data/Model/AnimDataModel.cs diff --git a/Source/AnimationMod/Data/Model/AnimPartModel.cs b/Source/1.4/ThingGenerator/Data/Model/AnimPartModel.cs similarity index 100% rename from Source/AnimationMod/Data/Model/AnimPartModel.cs rename to Source/1.4/ThingGenerator/Data/Model/AnimPartModel.cs diff --git a/Source/AnimationMod/Data/Model/CurveModel.cs b/Source/1.4/ThingGenerator/Data/Model/CurveModel.cs similarity index 100% rename from Source/AnimationMod/Data/Model/CurveModel.cs rename to Source/1.4/ThingGenerator/Data/Model/CurveModel.cs diff --git a/Source/AnimationMod/Data/Model/EventModel.cs b/Source/1.4/ThingGenerator/Data/Model/EventModel.cs similarity index 100% rename from Source/AnimationMod/Data/Model/EventModel.cs rename to Source/1.4/ThingGenerator/Data/Model/EventModel.cs diff --git a/Source/AnimationMod/Data/Model/SweepPoint.cs b/Source/1.4/ThingGenerator/Data/Model/SweepPoint.cs similarity index 100% rename from Source/AnimationMod/Data/Model/SweepPoint.cs rename to Source/1.4/ThingGenerator/Data/Model/SweepPoint.cs diff --git a/Source/AnimationMod/Events/AudioEvent.cs b/Source/1.4/ThingGenerator/Events/AudioEvent.cs similarity index 100% rename from Source/AnimationMod/Events/AudioEvent.cs rename to Source/1.4/ThingGenerator/Events/AudioEvent.cs diff --git a/Source/AnimationMod/Events/CamShakeEvent.cs b/Source/1.4/ThingGenerator/Events/CamShakeEvent.cs similarity index 100% rename from Source/AnimationMod/Events/CamShakeEvent.cs rename to Source/1.4/ThingGenerator/Events/CamShakeEvent.cs diff --git a/Source/AnimationMod/Events/ClashAudioEvent.cs b/Source/1.4/ThingGenerator/Events/ClashAudioEvent.cs similarity index 100% rename from Source/AnimationMod/Events/ClashAudioEvent.cs rename to Source/1.4/ThingGenerator/Events/ClashAudioEvent.cs diff --git a/Source/AnimationMod/Events/DamageEffectEvent.cs b/Source/1.4/ThingGenerator/Events/DamageEffectEvent.cs similarity index 100% rename from Source/AnimationMod/Events/DamageEffectEvent.cs rename to Source/1.4/ThingGenerator/Events/DamageEffectEvent.cs diff --git a/Source/AnimationMod/Events/DuelEvent.cs b/Source/1.4/ThingGenerator/Events/DuelEvent.cs similarity index 100% rename from Source/AnimationMod/Events/DuelEvent.cs rename to Source/1.4/ThingGenerator/Events/DuelEvent.cs diff --git a/Source/AnimationMod/Events/EventBase.cs b/Source/1.4/ThingGenerator/Events/EventBase.cs similarity index 100% rename from Source/AnimationMod/Events/EventBase.cs rename to Source/1.4/ThingGenerator/Events/EventBase.cs diff --git a/Source/AnimationMod/Events/EventHelper.cs b/Source/1.4/ThingGenerator/Events/EventHelper.cs similarity index 100% rename from Source/AnimationMod/Events/EventHelper.cs rename to Source/1.4/ThingGenerator/Events/EventHelper.cs diff --git a/Source/AnimationMod/Events/GoreSplashEvent.cs b/Source/1.4/ThingGenerator/Events/GoreSplashEvent.cs similarity index 100% rename from Source/AnimationMod/Events/GoreSplashEvent.cs rename to Source/1.4/ThingGenerator/Events/GoreSplashEvent.cs diff --git a/Source/AnimationMod/Events/KillPawnEvent.cs b/Source/1.4/ThingGenerator/Events/KillPawnEvent.cs similarity index 100% rename from Source/AnimationMod/Events/KillPawnEvent.cs rename to Source/1.4/ThingGenerator/Events/KillPawnEvent.cs diff --git a/Source/AnimationMod/Events/MoteEvent.cs b/Source/1.4/ThingGenerator/Events/MoteEvent.cs similarity index 100% rename from Source/AnimationMod/Events/MoteEvent.cs rename to Source/1.4/ThingGenerator/Events/MoteEvent.cs diff --git a/Source/AnimationMod/Events/PuntPawnEvent.cs b/Source/1.4/ThingGenerator/Events/PuntPawnEvent.cs similarity index 100% rename from Source/AnimationMod/Events/PuntPawnEvent.cs rename to Source/1.4/ThingGenerator/Events/PuntPawnEvent.cs diff --git a/Source/AnimationMod/Events/TextMoteEvent.cs b/Source/1.4/ThingGenerator/Events/TextMoteEvent.cs similarity index 100% rename from Source/AnimationMod/Events/TextMoteEvent.cs rename to Source/1.4/ThingGenerator/Events/TextMoteEvent.cs diff --git a/Source/AnimationMod/Events/Workers/AnimEventInput.cs b/Source/1.4/ThingGenerator/Events/Workers/AnimEventInput.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/AnimEventInput.cs rename to Source/1.4/ThingGenerator/Events/Workers/AnimEventInput.cs diff --git a/Source/AnimationMod/Events/Workers/AudioWorker.cs b/Source/1.4/ThingGenerator/Events/Workers/AudioWorker.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/AudioWorker.cs rename to Source/1.4/ThingGenerator/Events/Workers/AudioWorker.cs diff --git a/Source/AnimationMod/Events/Workers/ClashAudioWorker.cs b/Source/1.4/ThingGenerator/Events/Workers/ClashAudioWorker.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/ClashAudioWorker.cs rename to Source/1.4/ThingGenerator/Events/Workers/ClashAudioWorker.cs diff --git a/Source/AnimationMod/Events/Workers/DamageEffectWorker.cs b/Source/1.4/ThingGenerator/Events/Workers/DamageEffectWorker.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/DamageEffectWorker.cs rename to Source/1.4/ThingGenerator/Events/Workers/DamageEffectWorker.cs diff --git a/Source/AnimationMod/Events/Workers/DuelSectionWorker.cs b/Source/1.4/ThingGenerator/Events/Workers/DuelSectionWorker.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/DuelSectionWorker.cs rename to Source/1.4/ThingGenerator/Events/Workers/DuelSectionWorker.cs diff --git a/Source/AnimationMod/Events/Workers/EventWorkerBase.cs b/Source/1.4/ThingGenerator/Events/Workers/EventWorkerBase.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/EventWorkerBase.cs rename to Source/1.4/ThingGenerator/Events/Workers/EventWorkerBase.cs diff --git a/Source/AnimationMod/Events/Workers/GoreSplashWorker.cs b/Source/1.4/ThingGenerator/Events/Workers/GoreSplashWorker.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/GoreSplashWorker.cs rename to Source/1.4/ThingGenerator/Events/Workers/GoreSplashWorker.cs diff --git a/Source/AnimationMod/Events/Workers/KillPawnWorker.cs b/Source/1.4/ThingGenerator/Events/Workers/KillPawnWorker.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/KillPawnWorker.cs rename to Source/1.4/ThingGenerator/Events/Workers/KillPawnWorker.cs diff --git a/Source/AnimationMod/Events/Workers/MoteWorker.cs b/Source/1.4/ThingGenerator/Events/Workers/MoteWorker.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/MoteWorker.cs rename to Source/1.4/ThingGenerator/Events/Workers/MoteWorker.cs diff --git a/Source/AnimationMod/Events/Workers/PuntPawnWorker.cs b/Source/1.4/ThingGenerator/Events/Workers/PuntPawnWorker.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/PuntPawnWorker.cs rename to Source/1.4/ThingGenerator/Events/Workers/PuntPawnWorker.cs diff --git a/Source/AnimationMod/Events/Workers/TextMoteWorker.cs b/Source/1.4/ThingGenerator/Events/Workers/TextMoteWorker.cs similarity index 100% rename from Source/AnimationMod/Events/Workers/TextMoteWorker.cs rename to Source/1.4/ThingGenerator/Events/Workers/TextMoteWorker.cs diff --git a/Source/AnimationMod/ExecutionOutcome.cs b/Source/1.4/ThingGenerator/ExecutionOutcome.cs similarity index 100% rename from Source/AnimationMod/ExecutionOutcome.cs rename to Source/1.4/ThingGenerator/ExecutionOutcome.cs diff --git a/Source/1.4/ThingGenerator/Extensions.cs b/Source/1.4/ThingGenerator/Extensions.cs new file mode 100644 index 00000000..9206c740 --- /dev/null +++ b/Source/1.4/ThingGenerator/Extensions.cs @@ -0,0 +1,321 @@ +using AM.Events; +using AM.Events.Workers; +using AM.Idle; +using AM.PawnData; +using AM.Tweaks; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using UnityEngine; +using Verse; +using Verse.AI; + +namespace AM; + +public static class Extensions +{ + /// + /// Shorthand for .Translate(). + /// + public static TaggedString Trs(this string str) => str.Translate(); + + /// + /// Shorthand for .Translate(). + /// + public static TaggedString Trs(this string str, params NamedArgument[] args) => TranslatorFormattedStringExtensions.Translate(str, args); + + public static AnimationManager GetAnimManager(this Map map) + => map?.GetComponent(); + + public static AnimationManager GetAnimManager(this Pawn pawn) + => pawn?.Map?.GetComponent(); + + public static Matrix4x4 MakeAnimationMatrix(this Pawn pawn, float yOffset = 0) + => Matrix4x4.TRS(pawn.Position.ToVector3ShiftedWithAltitude(pawn.DrawPos.y + yOffset), Quaternion.identity, Vector3.one); + + public static Matrix4x4 MakeAnimationMatrix(this in LocalTargetInfo target) + => Matrix4x4.TRS(new Vector3(target.CenterVector3.x, AltitudeLayer.Pawn.AltitudeFor(), target.CenterVector3.z), Quaternion.identity, Vector3.one); + + public static bool IsInAnimation(this Pawn pawn) + => AnimRenderer.TryGetAnimator(pawn) != null; + + public static bool IsInAnimation(this Pawn pawn, out AnimRenderer animRenderer) + => (animRenderer = AnimRenderer.TryGetAnimator(pawn)) != null; + + public static bool IsInActiveMeleeCombat(this Pawn pawn) + => pawn.jobs?.curDriver is JobDriver_AttackMelee or JobDriver_AttackStatic; + + public static AnimRenderer TryGetAnimator(this Pawn pawn) => AnimRenderer.TryGetAnimator(pawn); + + public static T AsDefOfType(this string defName, T fallback = null) where T : Def + { + if (string.IsNullOrWhiteSpace(defName)) + return fallback; + + return (T)GenGeneric.InvokeStaticMethodOnGenericType(typeof(DefDatabase<>), typeof(T), "GetNamed", defName, true) ?? fallback; + } + + /// + /// Returns true if is true OR this weapon has been manually marked as a melee weapon + /// by this mod. + /// + public static bool IsMeleeWeapon(this ThingDef def) => def.IsMeleeWeapon || Core.ForceConsiderTheseMeleeWeapons.Contains(def); + + public static float ToAngleFlatNew(this in Vector3 vector) => Mathf.Atan2(vector.z, vector.x) * Mathf.Rad2Deg; + + public static bool Polarity(this float f) => f > 0; + + public static WeaponCat ToCategory(this MeleeWeaponType type) + { + WeaponCat cat = 0; + + if (type.HasFlag(MeleeWeaponType.Long_Sharp) || type.HasFlag(MeleeWeaponType.Short_Sharp)) + cat |= WeaponCat.Sharp; + + if (type.HasFlag(MeleeWeaponType.Long_Stab) || type.HasFlag(MeleeWeaponType.Short_Stab)) + cat |= WeaponCat.Stab; + + if (type.HasFlag(MeleeWeaponType.Long_Blunt) || type.HasFlag(MeleeWeaponType.Short_Blunt)) + cat |= WeaponCat.Blunt; + + return cat; + } + + public static BodyPartRecord TryGetPartFromDef(this Pawn pawn, BodyPartDef def) + { + if (def == null) + return null; + if (pawn?.health?.hediffSet == null) + return null; + + foreach (BodyPartRecord bodyPartRecord in pawn.health.hediffSet.GetNotMissingParts()) + { + if (bodyPartRecord.def == def) + return bodyPartRecord; + } + return null; + } + + public static bool IsAttack(this IdleType type) => type is IdleType.AttackHorizontal or IdleType.AttackSouth or IdleType.AttackNorth; + + public static bool IsMove(this IdleType type) => type is IdleType.MoveVertical or IdleType.MoveHorizontal; + + public static bool IsIdle(this IdleType type, bool includeFlavour = true) => type is IdleType.Idle || (includeFlavour && type is IdleType.Flavour); + + /// + /// Attempts to get the equipped melee weapon of this pawn. + /// That includes sidearms if SimpleSidearms is installed. + /// This will only return the melee weapon if said melee weapon is compatible with the animation mod (i.e. it has valid tweak data). + /// + public static ThingWithComps GetFirstMeleeWeapon(this Pawn pawn) => GetFirstMeleeWeapon(pawn, out _); + + /// + /// Attempts to get the equipped melee weapon of this pawn. + /// That includes sidearms if SimpleSidearms is installed. + /// This will only return the melee weapon if said melee weapon is compatible with the animation mod (i.e. it has valid tweak data). + /// + public static ThingWithComps GetFirstMeleeWeapon(this Pawn pawn, out ItemTweakData tweakData) + { + tweakData = null; + if (pawn?.equipment == null) + return null; + + if (pawn.equipment.Primary?.def.IsMeleeWeapon() ?? false) + { + tweakData = TweakDataManager.TryGetTweak(pawn.equipment.Primary.def); + if (tweakData != null) + return pawn.equipment.Primary; + } + + foreach(var item in pawn.equipment.AllEquipmentListForReading) + { + if (item.def.IsMeleeWeapon()) + { + tweakData = TweakDataManager.TryGetTweak(item.def); + if (tweakData != null) + return item; + } + } + + if (Core.IsSimpleSidearmsActive && pawn.inventory?.innerContainer != null) + { + foreach (var item in pawn.inventory.innerContainer) + { + if (item is ThingWithComps twc && item.def.IsMeleeWeapon()) + { + tweakData = TweakDataManager.TryGetTweak(item.def); + if (tweakData != null) + return twc; + } + } + } + + return null; + } + + public static ThingWithComps TryGetLasso(this Pawn pawn) + { + if (pawn?.apparel == null) + return null; + + foreach (var item in pawn.apparel.WornApparel) + { + if (item.def.IsApparel && Content.LassoDefs.Contains(item.def)) + { + return item; + } + } + + return null; + } + + public static PawnMeleeData GetMeleeData(this Pawn pawn) => GameComp.Current?.GetOrCreateData(pawn); + + public static Vector3 ToWorld(this in Vector2 flatVector, float altitude = 0) => new(flatVector.x, altitude, flatVector.y); + + public static Vector2 ToFlat(this in Vector3 worldVector) => new Vector3(worldVector.x, worldVector.z); + + public static T GetWorker(this EventBase e) where T : EventWorkerBase => EventWorkerBase.GetWorker(e.EventID) as T; + + public static float RandomInRange(this in Vector2 range) => Rand.Range(range.x, range.y); + + public static T RandomElementByWeightExcept(this IEnumerable items, Func weight, ICollection except) where T : class + { + if (items.Count() == except.Count) + return null; + + for (int i = 0; i < 1000; i++) + { + var selected = items.RandomElementByWeightWithFallback(weight); + if (selected == null) + return null; + + if (except.Contains(selected)) + continue; + + return selected; + } + + Core.Error("Ran out of iterations selecting random."); + return null; + } + + public static Vector3 AngleToWorldDir(this float angleDeg) => -new Vector3(Mathf.Cos(angleDeg * Mathf.Deg2Rad), 0f, Mathf.Sin(angleDeg * Mathf.Deg2Rad)); + + public static ItemTweakData TryGetTweakData(this Thing weapon) => TweakDataManager.TryGetTweak(weapon.def); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool GetOccupiedMaskBit(this uint mask, int x, int z) => (((uint)1 << (x + 1) + (z + 1) * 3) & mask) != 0; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool GetOccupiedMaskBitX(this uint mask, int x) => (((uint)1 << (x + 1) + 3) & mask) != 0; + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool GetOccupiedMaskBitZ(this uint mask, int z) => (((uint)1 << 1 + (z + 1) * 3) & mask) != 0; + + [DebugAction("Melee Animation", "Spawn all melee weapons (tiny)", actionType = DebugActionType.ToolMap, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void GimmeMeleeWeaponsTiny() => GimmeMeleeWeapons(WeaponSize.Tiny); + + [DebugAction("Melee Animation", "Spawn all melee weapons (medium)", actionType = DebugActionType.ToolMap, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void GimmeMeleeWeaponsMedium() => GimmeMeleeWeapons(WeaponSize.Medium); + + [DebugAction("Melee Animation", "Spawn all melee weapons (colossal)", actionType = DebugActionType.ToolMap, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void GimmeMeleeWeaponsColossal() => GimmeMeleeWeapons(WeaponSize.Colossal); + + [DebugAction("Melee Animation", "Spawn all melee weapons", actionType = DebugActionType.ToolMap, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void GimmeMeleeWeaponsAll() => GimmeMeleeWeapons(null); + + [DebugAction("Melee Animation", "Give all selected melee weapons", actionType = DebugActionType.Action, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static void GiveAllMeleeWeapons() + { + var pawns = Find.Selector.SelectedPawns.Where(p => p.equipment.Primary == null); + + IEnumerable GetWeaponDefs(WeaponSize? onlySize) + { + foreach (var def in DefDatabase.AllDefsListForReading) + { + var tweak = TweakDataManager.TryGetTweak(def); + if (!def.IsMeleeWeapon() || tweak == null) + continue; + + if (onlySize != null) + { + var cat = IdleClassifier.Classify(tweak); + if (cat.size != onlySize.Value) + continue; + } + + yield return def; + } + } + + foreach (var pawn in pawns) + { + var weapon = GetWeaponDefs(null).RandomElementWithFallback(); + if (weapon == null) + continue; + + var spawned = ThingMaker.MakeThing(weapon) as ThingWithComps; + if (spawned == null) + continue; + + pawn.equipment.Primary = spawned; + } + } + + private static void GimmeMeleeWeapons(WeaponSize? onlySize) + { + var pos = Verse.UI.MouseCell(); + foreach (var def in DefDatabase.AllDefsListForReading) + { + var tweak = TweakDataManager.TryGetTweak(def); + if (!def.IsMeleeWeapon() || tweak == null) + continue; + + if (onlySize != null) + { + var cat = IdleClassifier.Classify(tweak); + if (cat.size != onlySize.Value) + continue; + } + + try + { + DebugThingPlaceHelper.DebugSpawn(def, pos, 1, false); + } + catch (Exception e) + { + Core.Warn($"Failed to spawn {def}: [{e.GetType().Name}] {e.Message}"); + } + } + } + + [DebugAction("Melee Animation", "Spawn army", actionType = DebugActionType.ToolMap, allowedGameStates = AllowedGameStates.PlayingOnMap)] + private static List SpawnArmy() + { + List list = new List(); + foreach (PawnKindDef localKindDef2 in from kd in DefDatabase.AllDefs + orderby kd.defName + select kd) + { + PawnKindDef localKindDef = localKindDef2; + list.Add(new DebugActionNode(localKindDef.defName, DebugActionType.ToolMap, null, null) + { + category = DebugToolsSpawning.GetCategoryForPawnKind(localKindDef), + action = delegate () + { + Faction faction = FactionUtility.DefaultFactionFrom(localKindDef.defaultFactionType); + for (int i = 0; i < 50; i++) + { + Pawn pawn = PawnGenerator.GeneratePawn(localKindDef, faction); + GenSpawn.Spawn(pawn, Verse.UI.MouseCell(), Find.CurrentMap, WipeMode.Vanish); + DebugToolsSpawning.PostPawnSpawn(pawn); + } + } + }); + } + return list; + } +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/GameComp.cs b/Source/1.4/ThingGenerator/GameComp.cs new file mode 100644 index 00000000..eb1ed240 --- /dev/null +++ b/Source/1.4/ThingGenerator/GameComp.cs @@ -0,0 +1,185 @@ +using AM.Grappling; +using AM.Heads; +using AM.Idle; +using AM.Patches; +using AM.PawnData; +using AM.UI; +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.IO; +using UnityEngine; +using Verse; +using Object = UnityEngine.Object; + +namespace AM; + +[UsedImplicitly] +public class GameComp : GameComponent +{ + public static GameComp Current; + public static event Action LazyTick; + public static ulong FrameCounter; + [TweakValue("Melee Animation")] + [UsedImplicitly] +#pragma warning disable CS0649 // Field 'GameComp.drawTextureExtractor' is never assigned to, and will always have its default value false + private static bool drawTextureExtractor; +#pragma warning restore CS0649 // Field 'GameComp.drawTextureExtractor' is never assigned to, and will always have its default value false + + public readonly Game Game; + + private string texPath; + private readonly Dictionary pawnMeleeData = new Dictionary(); + private List allMeleeData = new List(); + + public GameComp(Game game) + { + this.Game = game; + Current = this; + } + + public override void ExposeData() + { + base.ExposeData(); + + if (Scribe.mode == LoadSaveMode.Saving) + { + allMeleeData.RemoveAll(d => !d.ShouldSave()); + } + + Scribe_Collections.Look(ref allMeleeData, "pawnMeleeData", LookMode.Deep); + + allMeleeData ??= new List(); + + if (Scribe.mode != LoadSaveMode.PostLoadInit) + return; + + pawnMeleeData.Clear(); + foreach (var data in allMeleeData) + { + if (!data.ShouldSave()) + continue; + + if (pawnMeleeData.ContainsKey(data.Pawn)) + { + // Adding this check because a user reported this exact error. + // No idea how they managed that. Save editing? + Core.Error("Duplicate pawn data (or data with same pawn!) found when loading!"); + continue; + } + + pawnMeleeData.Add(data.Pawn, data); + } + } + + public PawnMeleeData GetOrCreateData(Pawn pawn) + { + if (pawn == null || pawn.Destroyed) + return null; + + if (pawnMeleeData.TryGetValue(pawn, out var found)) + return found; + + var created = new PawnMeleeData + { + Pawn = pawn + }; + allMeleeData.Add(created); + pawnMeleeData.Add(pawn, created); + return created; + } + + public override void GameComponentTick() + { + if (Find.TickManager.TicksGame % 600 == 0 && LazyTick != null) + { + try + { + LazyTick(); + } + catch (Exception e) + { + Core.Error("Exception during lazy tick:", e); + } + } + + IdleControllerComp.TotalTickTimeMS = 0; + IdleControllerComp.TotalActive = 0; + + base.GameComponentTick(); + + AnimRenderer.TickAll(); + AnimRenderer.RemoveDestroyed(); + GrabUtility.Tick(); + + Patch_Corpse_DrawAt.Tick(); + Patch_PawnRenderer_LayingFacing.Tick(); + + const float DT = 1 / 60f; + + foreach (var data in allMeleeData) + { + data.TimeSinceExecuted += DT; + data.TimeSinceGrappled += DT; + data.TimeSinceFriendlyDueled += DT; + } + } + + public override void GameComponentUpdate() + { + base.GameComponentUpdate(); + FrameCounter++; + } + + public override void GameComponentOnGUI() + { + //GUILayout.Label($"Mem: {System.GC.GetTotalMemory(false)/(1024f*1024f):F1} MB"); + + if (Prefs.DevMode && Dialog_AnimationDebugger.IsInRehearsalMode) + { + GUILayout.Space(100); + GUILayout.Label("IN REHEARSAL MODE!"); + } + + if (!drawTextureExtractor) + return; + + GUILayout.Space(100); + + texPath ??= ""; + texPath = GUILayout.TextField(texPath); + var tex = ContentFinder.Get(texPath, false); + + if (tex == null) + return; + + GUILayout.Box(tex); + + if (!GUILayout.Button("Save")) + return; + + RenderTexture renderTex = RenderTexture.GetTemporary( + tex.width, + tex.height, + 0, + RenderTextureFormat.Default, + RenderTextureReadWrite.Linear); + + Graphics.Blit(tex, renderTex); + RenderTexture previous = RenderTexture.active; + RenderTexture.active = renderTex; + Texture2D readableText = new(tex.width, tex.height); + readableText.ReadPixels(new Rect(0, 0, renderTex.width, renderTex.height), 0, 0); + readableText.Apply(); + RenderTexture.active = previous; + RenderTexture.ReleaseTemporary(renderTex); + + var pngBytes = readableText.EncodeToPNG(); + + Log.Message($"Writing {pngBytes.Length} bytes of {texPath} to Desktop ..."); + File.WriteAllBytes(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), $"{tex.name ?? "grab"}.png"), pngBytes); + + Object.Destroy(readableText); + Object.Destroy(renderTex); + } +} \ No newline at end of file diff --git a/Source/AnimationMod/Grappling/GrabUtility.cs b/Source/1.4/ThingGenerator/Grappling/GrabUtility.cs similarity index 100% rename from Source/AnimationMod/Grappling/GrabUtility.cs rename to Source/1.4/ThingGenerator/Grappling/GrabUtility.cs diff --git a/Source/1.4/ThingGenerator/Grappling/GrappleFlyer.cs b/Source/1.4/ThingGenerator/Grappling/GrappleFlyer.cs new file mode 100644 index 00000000..ded93c4a --- /dev/null +++ b/Source/1.4/ThingGenerator/Grappling/GrappleFlyer.cs @@ -0,0 +1,209 @@ +using System; +using RimWorld; +using UnityEngine; +using Verse; + +namespace AM.Grappling; + +/// +/// Closely based on Royalty's PawnJumper. +/// Look, I know Tynan doesn't like people taking DLC code and putting it in mods, but... +/// This is by far the most compatible and straightforward way of doing things. +/// There's no sense in re-inventing the wheel. +/// +public class GrappleFlyer : PawnFlyer +{ + public static GrappleFlyer MakeGrappleFlyer(Pawn grappler, Pawn victim, in IntVec3 targetPos) + { + if (victim.Position == targetPos || !victim.Spawned) + return null; + + if (grappler.Map == null) + { + // I can't fathom how this is possible, but it happened once and it's not cool. + Core.Error($"Null grappler ({grappler.LabelShortCap}) map!"); + return null; + } + + GrappleFlyer flyer = MakeFlyer(AM_DefOf.AM_GrappleFlyer, victim, targetPos, null, null) as GrappleFlyer; + if (flyer?.FlyingPawn != null) + { + victim.Rotation = Rot4.South; + flyer.Grappler = grappler; + GenSpawn.Spawn(flyer, targetPos, grappler.Map); + return flyer; + } + + Core.Warn("Base MakeFlyer method returned null."); + return null; + } + + private static readonly Func flightSpeed; + private static readonly Func flightCurveHeight = GenMath.InverseParabola; + private static readonly MaterialPropertyBlock mpb = new MaterialPropertyBlock(); + + public int TotalDurationTicks => ticksFlightTime; + public Pawn Grappler; + + private Material cachedShadowMaterial; + private Effecter flightEffecter = null; + private int positionLastComputedTick = -1; + private Vector3 groundPos; + private Vector3 effectivePos; + private float effectiveHeight; + + private Material ShadowMaterial + { + get + { + if (this.cachedShadowMaterial == null && !this.def.pawnFlyer.shadow.NullOrEmpty()) + { + this.cachedShadowMaterial = + MaterialPool.MatFrom(this.def.pawnFlyer.shadow, ShaderDatabase.Transparent); + } + + return this.cachedShadowMaterial; + } + } + + static GrappleFlyer() + { + AnimationCurve animationCurve = new(); + animationCurve.AddKey(0f, 0f); + animationCurve.AddKey(0.1f, 0.15f); + animationCurve.AddKey(1f, 1f); + flightSpeed = animationCurve.Evaluate; + } + + public override Vector3 DrawPos + { + get + { + this.RecomputePosition(); + return this.effectivePos; + } + } + + public override void SpawnSetup(Map map, bool respawningAfterLoad) + { + base.SpawnSetup(map, respawningAfterLoad); + if (respawningAfterLoad) + return; + + if (Grappler == null) + { + Core.Error("Null grappler, cannot determine flight speed factor."); + return; + } + + // Adjust flight time based on grapple speed. + float speed = Grappler.GetStatValue(AM_DefOf.AM_GrappleSpeed); + ticksFlightTime = Mathf.Max(2, (int)(ticksFlightTime / (speed * Core.Settings.GrappleSpeed))); + } + + private void RecomputePosition() + { + if (this.positionLastComputedTick == this.ticksFlying) + { + return; + } + + this.positionLastComputedTick = this.ticksFlying; + float arg = (float)this.ticksFlying / (float)this.ticksFlightTime; + float num = flightSpeed(arg); + this.effectiveHeight = flightCurveHeight(num) * Mathf.Clamp(ticksFlightTime / 60f * 0.5f, 0.3f, 2f); + this.groundPos = Vector3.Lerp(this.startVec, base.DestinationPos, num); + Vector3 a = new(0f, 0f, 2f); + Vector3 b = Altitudes.AltIncVect * this.effectiveHeight; + Vector3 b2 = a * this.effectiveHeight; + this.effectivePos = this.groundPos + b + b2; + } + + public override void DrawAt(Vector3 drawLoc, bool flip = false) + { + RecomputePosition(); + DrawShadow(groundPos, effectiveHeight); + FlyingPawn.DrawAt(effectivePos, flip); // For Pawns, flip does nothing, it's just an inherited param. + + Color ropeColor = Grappler?.TryGetLasso()?.def.graphicData.color ?? Color.magenta; + DrawBoundTexture(FlyingPawn, effectivePos, ropeColor); + DrawGrappleLine(ropeColor); + } + + public void DrawGrappleLine(Color ropeColor) + { + Vector3 from = Grappler.DrawPos; + from += Grappler.Rotation.AsVector2.ToWorld() * 0.4f; + from.y = AltitudeLayer.PawnUnused.AltitudeFor(); + + Vector3 to = effectivePos; + to.y = from.y; + + float bumpMag = Mathf.Clamp(flightCurveHeight(ticksFlying / 15f) * 1.25f, 0f, 1.25f); + float bumpMag2 = Mathf.Clamp(flightCurveHeight(ticksFlying / 10f) * 0.25f, 0f, 0.25f); + Vector3 bump = (Grappler.DrawPos - from).normalized; + Vector3 bump2 = Vector2.Perpendicular(to.ToFlat() - Grappler.DrawPos.ToFlat()).normalized.ToWorld(); + bump.y = 0; + from += bump * bumpMag + bump2 * bumpMag2; + + GrabUtility.DrawRopeFromTo(from, to, ropeColor); + } + + public static void DrawBoundTexture(Pawn pawn, Vector3 drawLoc, Color ropeColor) + { + drawLoc.y += 0.05f; + var tex = GrabUtility.GetBoundPawnTexture(pawn); + if (tex == null) + { + if (pawn.RaceProps.Humanlike) + tex = Content.BoundMaleRope; + else + return; + } + + var mat = AnimRenderer.DefaultCutout; + var trs = Matrix4x4.TRS(drawLoc, Quaternion.identity, Vector3.one * 1.5f * Core.GetBodyDrawSizeFactor(pawn)); + + mpb.SetTexture("_MainTex", tex); // TODO cache id. + mpb.SetColor("_Color", ropeColor); + + Graphics.DrawMesh(MeshPool.plane10, trs, mat, 0, null, 0, mpb); + } + + private void DrawShadow(Vector3 drawLoc, float height) + { + Material shadowMaterial = this.ShadowMaterial; + if (shadowMaterial == null) + { + return; + } + float num = Mathf.Lerp(1f, 0.6f, height); + Vector3 s = new(num, 1f, num); + Matrix4x4 matrix = default(Matrix4x4); + matrix.SetTRS(drawLoc, Quaternion.identity, s); + Graphics.DrawMesh(MeshPool.plane10, matrix, shadowMaterial, 0); + } + + public override void RespawnPawn() + { + FleckMaker.ThrowDustPuff(base.DestinationPos + Gen.RandomHorizontalVector(0.5f), base.Map, 2f); + base.RespawnPawn(); + } + + public override void ExposeData() + { + base.ExposeData(); + Scribe_References.Look(ref Grappler, "AM_grappler", true); + } + + public override void Destroy(DestroyMode mode = DestroyMode.Vanish) + { + Effecter effecter = this.flightEffecter; + if (effecter != null) + { + effecter.Cleanup(); + } + + base.Destroy(mode); + } +} \ No newline at end of file diff --git a/Source/AnimationMod/Grappling/JobDriver_GrapplePawn.cs b/Source/1.4/ThingGenerator/Grappling/JobDriver_GrapplePawn.cs similarity index 100% rename from Source/AnimationMod/Grappling/JobDriver_GrapplePawn.cs rename to Source/1.4/ThingGenerator/Grappling/JobDriver_GrapplePawn.cs diff --git a/Source/1.4/ThingGenerator/Grappling/KnockbackFlyer.cs b/Source/1.4/ThingGenerator/Grappling/KnockbackFlyer.cs new file mode 100644 index 00000000..cf548b3f --- /dev/null +++ b/Source/1.4/ThingGenerator/Grappling/KnockbackFlyer.cs @@ -0,0 +1,212 @@ +using System.Collections.Generic; +using System.Linq; +using RimWorld; +using UnityEngine; +using Verse; +using Verse.Sound; + +namespace AM.Grappling; + +public class KnockbackFlyer : PawnFlyer +{ + [DebugAction("Melee Animation", actionType = DebugActionType.ToolMapForPawns)] + private static void TestKnockback(Pawn victim) + { + var end = GetEndCell(victim, IntVec3.East, 20); + MakeKnockbackFlyer(victim, end); + } + + public static IntVec3 GetEndCell(Pawn victim, in IntVec3 direction, int maxRange) + { + var map = victim.Map; + IntVec3 end = victim.Position + direction * maxRange; + IntVec3 ret = victim.Position; + foreach (var cell in GetCellsFromTo(victim.Position, end)) + { + ret = cell; + if (IsSolid(victim, cell, map)) + break; + } + + return ret; + } + + public static KnockbackFlyer MakeKnockbackFlyer(Pawn victim, IntVec3 targetPos) + { + if (!victim.Spawned) + return null; + + var map = victim.Map; + var start = victim.DrawPos; + var end = targetPos.ToVector3ShiftedWithAltitude(start.y); + + KnockbackFlyer flyer = MakeFlyer(AM_DefOf.AM_KnockbackFlyer, victim, targetPos, EffecterDefOf.ConstructDirt, SoundDefOf.Pawn_Melee_Punch_HitBuilding) as KnockbackFlyer; + + if (flyer?.FlyingPawn != null) + { + flyer.StartPos = start; + flyer.EndPos = end; + victim.Rotation = flyer.GetPawnRotation(); + + // Important: clear victim job queue, which is normally the animation job. + // Failing to do this means that the animation job is referenced when saving + // but will not be found when loading. + // This normally hard crashes the game! + flyer.jobQueue = null; + + var t = GenSpawn.Spawn(flyer, targetPos, map); + if (t == null) + flyer.RespawnPawn(); + + return t != null ? flyer : null; + } + + return null; + } + + private static bool IsSolid(Pawn pawn, in IntVec3 cell, Map map) + { + if (cell.x < 0 || cell.z < 0 || cell.x >= map.info.Size.x || cell.z >= map.info.Size.z) + return true; + + var things = map.thingGrid.ThingsListAtFast(cell); + return Enumerable.Any(things, thing => thing.BlocksPawn(pawn)); + } + + private static IEnumerable GetCellsFromTo(IntVec3 from, IntVec3 to) + { + bool hor = from.x != to.x; + if (hor) + { + int dir = Mathf.Clamp(to.x - from.x, -1, 1); + for (int x = from.x + dir; x <= to.x; x += dir) + { + yield return new IntVec3(x, from.y, from.z); + } + } + else + { + int dir = Mathf.Clamp(to.z - from.z, -1, 1); + for (int z = from.z + dir; z <= to.z; z += dir) + { + yield return new IntVec3(from.x, from.y, z); + } + } + } + + public override Vector3 DrawPos => Vector3.Lerp(StartPos, EndPos, (float)ticksFlying / ticksFlightTime); + + public Vector3 StartPos, EndPos; + public Effecter FlightEffecter; + + public Rot4 GetPawnRotation() + { + float dx = EndPos.x - StartPos.x; + float dz = EndPos.z - StartPos.z; + + // Ungodly switch statement. + // ReSharper suggested it and I kind of like how it looks. + + return dx switch + { + < 0 => Rot4.East, + > 0 => Rot4.West, + _ => dz switch + { + < 0 => Rot4.North, + > 0 => Rot4.South, + _ => Rot4.South + } + }; + } + + public override void SpawnSetup(Map map, bool respawningAfterLoad) + { + base.SpawnSetup(map, respawningAfterLoad); + + if (!respawningAfterLoad) + { + ticksFlightTime = (int)((StartPos.ToFlat() - EndPos.ToFlat()).magnitude * 3f); + } + } + + public override void DrawAt(Vector3 drawLoc, bool flip = false) + { + FlyingPawn.DrawAt(drawLoc, flip); + } + + public override void RespawnPawn() + { + var p = FlyingPawn; + base.RespawnPawn(); + this.LandingEffects(); + p.Rotation = GetPawnRotation(); + p.stances.stunner.StunFor(30, null, false, true); + } + + public override void ExposeData() + { + base.ExposeData(); + + Scribe_Values.Look(ref StartPos, "startPos"); + Scribe_Values.Look(ref EndPos, "endPos"); + } + + public override void Tick() + { + base.Tick(); + + //if (FlightEffecter == null) + //{ + // //FlightEffecter = def.pawnFlyer.flightEffecterDef.Spawn(); + // FlightEffecter = EffecterDefOf..Spawn(); + // FlightEffecter.Trigger(new TargetInfo(DrawPos.ToIntVec3(), Map), TargetInfo.Invalid); + //} + //else + //{ + // for (int i = 0; i < 1; i++) + // { + // FlightEffecter.EffectTick(new TargetInfo(DrawPos.ToIntVec3(), Map), TargetInfo.Invalid); + // } + //} + + //FleckMaker.ThrowDustPuff(DrawPos, Map, 2f); + + var loc = DrawPos; + loc.z -= 0.4f; + loc.y = AltitudeLayer.FloorCoverings.AltitudeFor(); + var map = Map; + float scale = 0.6f; + + if (!loc.ShouldSpawnMotesAt(map)) + { + return; + } + FleckCreationData dataStatic = FleckMaker.GetDataStatic(loc, map, FleckDefOf.DustPuff, 1.9f * scale); + dataStatic.rotationRate = (float)Rand.Range(-60, 60); + dataStatic.velocityAngle = (float)Rand.Range(0, 360); + dataStatic.velocitySpeed = Rand.Range(0.6f, 0.75f); + map.flecks.CreateFleck(dataStatic); + } + + private void LandingEffects() + { +#if V13 + def.pawnFlyer.soundLanding.PlayOneShot(new TargetInfo(EndPos.ToIntVec3(), Map)); +#else + soundLanding.PlayOneShot(new TargetInfo(EndPos.ToIntVec3(), Map)); +#endif + + for (int i = 0; i < 5; i++) + { + FleckMaker.ThrowDustPuffThick(EndPos + Gen.RandomHorizontalVector(0.5f), Map, 2f, Color.grey); + FleckMaker.ThrowDustPuff(EndPos + Gen.RandomHorizontalVector(0.5f), Map, 2f); + } + } + + public override void Destroy(DestroyMode mode = DestroyMode.Vanish) + { + FlightEffecter?.Cleanup(); + base.Destroy(mode); + } +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/Heads/HeadInstance.cs b/Source/1.4/ThingGenerator/Heads/HeadInstance.cs new file mode 100644 index 00000000..9bf2415b --- /dev/null +++ b/Source/1.4/ThingGenerator/Heads/HeadInstance.cs @@ -0,0 +1,53 @@ +using AM.Patches; +using UnityEngine; +using Verse; + +namespace AM.Heads; + +/// +/// A decapitated head instance. +/// For simplicity and performance reasons, these are not serialized. +/// +public sealed class HeadInstance +{ + public Pawn Pawn { get; set; } + public Map Map { get; set; } + public Vector3 Position { get; set; } + public float Rotation { get; set; } + public float TimeToLive { get; set; } + public Rot4 Direction { get; set; } + + public bool Render() + { + if (Pawn is not { Dead: true }) + { + return false; + } + + TimeToLive -= Time.unscaledDeltaTime; + if (TimeToLive <= 0f) + return false; + + // Do not actually render if the map is not currently visible. + if (Map != Find.CurrentMap) + return true; + + //Render pawn in custom position using patches. + Patch_PawnRenderer_RenderPawnInternal.NextDrawMode = Patch_PawnRenderer_RenderPawnInternal.DrawMode.HeadStandalone; + Patch_PawnRenderer_RenderPawnInternal.HeadRotation = Direction; + Patch_PawnRenderer_RenderPawnInternal.StandaloneHeadRotation = Rotation; + Patch_PawnRenderer_DrawInvisibleShadow.Suppress = true; // In 1.4 shadow rendering is baked into RenderPawnAt and may need to be prevented. + Patch_PawnRenderer_RenderPawnInternal.AllowNext = true; + + try + { + Pawn.Drawer.renderer.RenderPawnAt(Position, Direction, true); + } + finally + { + Patch_PawnRenderer_RenderPawnInternal.NextDrawMode = Patch_PawnRenderer_RenderPawnInternal.DrawMode.Full; + Patch_PawnRenderer_DrawInvisibleShadow.Suppress = false; + } + return true; + } +} \ No newline at end of file diff --git a/Source/AnimationMod/Health/HediffCompProperties_SingleTendRemove.cs b/Source/1.4/ThingGenerator/Health/HediffCompProperties_SingleTendRemove.cs similarity index 100% rename from Source/AnimationMod/Health/HediffCompProperties_SingleTendRemove.cs rename to Source/1.4/ThingGenerator/Health/HediffCompProperties_SingleTendRemove.cs diff --git a/Source/AnimationMod/Health/HediffComp_SingleTendRemove.cs b/Source/1.4/ThingGenerator/Health/HediffComp_SingleTendRemove.cs similarity index 100% rename from Source/AnimationMod/Health/HediffComp_SingleTendRemove.cs rename to Source/1.4/ThingGenerator/Health/HediffComp_SingleTendRemove.cs diff --git a/Source/1.4/ThingGenerator/Idle/IdleClassifier.cs b/Source/1.4/ThingGenerator/Idle/IdleClassifier.cs new file mode 100644 index 00000000..65cbc01a --- /dev/null +++ b/Source/1.4/ThingGenerator/Idle/IdleClassifier.cs @@ -0,0 +1,72 @@ +using System.Linq; +using AM.Tweaks; +using UnityEngine; +using Verse; + +namespace AM.Idle; + +public static class IdleClassifier +{ + [TweakValue("Melee Animation", 0f, 8f)] + public static float ColossalSizeThreshold = 1.37f; + + [TweakValue("Melee Animation", 0f, 5f)] + public static float TinySizeThreshold = 0.63f; + + public static (WeaponSize size, WeaponCat category) Classify(ItemTweakData tweakData) + { + if (tweakData == null) + return default; + + // Take override from def into consideration. + var def = tweakData.GetDef(); + var overrideData = def != null && MeleeAnimationAdjustmentDef.AllWeaponAdjustments.TryGetValue(def, out var found) ? found : null; + WeaponSize? forceSize = overrideData?.overrideSize; + + float length = GetLength(tweakData); + bool isTiny = length <= TinySizeThreshold; + var cat = tweakData.MeleeWeaponType.ToCategory(); + + if (isTiny) + return (forceSize ?? WeaponSize.Tiny, cat); + + bool isColossal = length >= ColossalSizeThreshold; + return isColossal ? (forceSize ?? WeaponSize.Colossal, cat) : (forceSize ?? WeaponSize.Medium, cat); + } + + private static float GetLength(ItemTweakData tweakData) => Mathf.Max(tweakData.BladeLength, tweakData.MaxDistanceFromHand); + + private struct TableRow + { + public ThingDef Def; + public ItemTweakData Tweak; + public WeaponSize Size; + public WeaponCat Category; + } + + [DebugOutput("Melee Animation")] + private static void LogTextureCategories() + { + var data = from def in DefDatabase.AllDefsListForReading + where def.IsMeleeWeapon() + let tweak = TweakDataManager.TryGetTweak(def) + where tweak != null + let cat = Classify(tweak) + select new TableRow + { + Def = def, + Tweak = tweak, + Category = cat.category, + Size = cat.size + }; + + TableDataGetter[] table = new TableDataGetter[5]; + table[0] = new TableDataGetter("Def Name", row => row.Def.defName); + table[1] = new TableDataGetter("Name", row => row.Def.LabelCap); + table[2] = new TableDataGetter("Size", row => row.Size); + table[3] = new TableDataGetter("Category", row => row.Category); + table[4] = new TableDataGetter("Length", row => GetLength(row.Tweak).ToString("F3")); + + DebugTables.MakeTablesDialog(data, table); + } +} diff --git a/Source/1.4/ThingGenerator/Idle/IdleControllerComp.cs b/Source/1.4/ThingGenerator/Idle/IdleControllerComp.cs new file mode 100644 index 00000000..970d818b --- /dev/null +++ b/Source/1.4/ThingGenerator/Idle/IdleControllerComp.cs @@ -0,0 +1,594 @@ +using System; +using System.Collections.Generic; +using AM.AMSettings; +using AM.Patches; +using AM.Processing; +using AM.Tweaks; +using AM.UniqueSkills; +using JetBrains.Annotations; +using RimWorld; +using UnityEngine; +using Verse; + +namespace AM.Idle; + +[UsedImplicitly] +public class IdleControllerComp : ThingComp +{ + public static readonly List> ShouldDrawAdditional = new List>(); + public static double TotalTickTimeMS; + public static int TotalActive; + + [UsedImplicitly] + [DebugAction("Melee Animation", "Log Skills", allowedGameStates = AllowedGameStates.PlayingOnMap, actionType = DebugActionType.ToolMapForPawns)] + private static void LogSkills(Pawn pawn) + { + var comp = pawn.GetComp(); + if (comp == null) + { + Log.Error("Missing IdleControllerComp, probably not humanlike..."); + return; + } + + var skills = comp.GetSkills(); + if (skills.Count == 0) + { + Log.Warning($"{pawn} has no skills available. Probably not colonist."); + return; + } + + foreach (var skill in skills) + { + Log.Message($" - {skill.GetType().FullName}:"); + Log.Message(skill.ToString()); + } + } + + public AnimRenderer CurrentAnimation; + + private float pauseAngle; + private int pauseTicks; + private bool isPausing; + private float lastSpeed; + private float lastDelta; + private AnimDef lastAttack; + private AnimDef lastFlavour; + private uint ticksMoving; + private int drawTick; + private UniqueSkillInstance[] skills; + + public void PreDraw() + { + if (parent is not Pawn pawn || CurrentAnimation == null) + return; + + try + { + // If the animation is about to draw but it was just destroyed (by the animation ending) + // the immediately tick to get a new animation running before the frame is drawn. + // This prevents an annoying flicker. + if (CurrentAnimation.IsDestroyed) + { + if (ShouldBeActive(out var weapon)) + TickActive(weapon); + } + + // Update animator position to match pawn. + CurrentAnimation.RootTransform = MakePawnMatrix(pawn, pawn.Rotation == Rot4.North); + drawTick = Find.TickManager.TicksAbs; + } + catch (Exception e) + { + Core.Error("PreDraw exception:", e); + } + } + + private bool ShouldBeActive(out Thing weapon) + { + weapon = null; + + // Basic checks: + if (!Core.Settings.AnimateAtIdle + || parent is not Pawn pawn + || (pawn.CurJob != null && pawn.CurJob.def.neverShowWeapon) + || pawn.Dead + || pawn.Downed + || !pawn.Spawned) + { + return false; + } + + // Vanilla checks. + bool vanillaShouldDraw = pawn.drawer.renderer.CarryWeaponOpenly(); + if (!vanillaShouldDraw) + { + // Sometimes the pawn will not be 'openly carrying' but will still be aiming their weapon, such as when casting psycasts. + if (pawn.stances.curStance is Stance_Busy { neverAimWeapon: false, focusTarg.IsValid: true }) + vanillaShouldDraw = true; + } + + // Dual wield check. + + // Additional draw check: + // Used for mod compatibility such as Fog of War etc. + foreach (var item in ShouldDrawAdditional) + { + if (!item(this)) + return false; + } + + // Has a valid melee weapon: + weapon = GetMeleeWeapon(); + if (vanillaShouldDraw && weapon == null) + vanillaShouldDraw = false; + + // Not in animation: + if (pawn.IsInAnimation()) + return false; + + return vanillaShouldDraw; + } + + public override void CompTick() + { + base.CompTick(); + + var timer = new RefTimer(); + try + { + TickSkills(); + + if (!ShouldBeActive(out var weapon)) + { + ClearAnimation(); + return; + } + + TotalActive++; + TickActive(weapon); + } + catch (Exception e) + { + Core.Error($"Exception processing idling animation or skills for '{parent}':", e); + } + TotalTickTimeMS += timer.GetElapsedMilliseconds(); + } + + private void TickSkills() + { + if (skills == null) + return; + + foreach (var s in skills) + { + s?.Tick(); + } + } + + private void TickActive(Thing weapon) + { + bool IsPlayingAnim() => CurrentAnimation is {IsDestroyed: false}; + + var pawn = (Pawn)parent; + + // Avoids single-frame buggy movement animations: + bool patherMoving = pawn.pather.MovingNow; + bool isBusyStance = pawn.stances?.curStance is Stance_Busy { neverAimWeapon: false, focusTarg.IsValid: true }; + if (patherMoving && !isBusyStance) + ticksMoving++; + else + ticksMoving = 0; + bool isMoving = ticksMoving >= 2; + + var tweak = weapon.TryGetTweakData(); + bool isAttacking = IsPlayingAnim() && CurrentAnimation.Def.idleType.IsAttack(); + + // If attacking, it takes priority over everything else. + if (isAttacking) + { + DoAttackPausing(); + return; + } + + // Reset pause ticks if not attacking. + isPausing = false; + pauseTicks = 0; + + if (isMoving) + { + // When moving and not attacking, play the movement animation. + EnsuringMoving(pawn, tweak); + } + else + { + // Play facing or idle animation. + EnsureFacingOrIdle(pawn, tweak); + } + + // Randomly interrupt idle with Flavour. + TickFlavour(tweak); + + // Mirror and loop: + if (CurrentAnimation == null) + return; + + bool shouldLoop = CurrentAnimation.Def.idleType.IsIdle(false) || CurrentAnimation.Def.idleType.IsMove(); + bool shouldBeMirrored = pawn.Rotation == Rot4.West || pawn.Rotation == Rot4.North; + CurrentAnimation.Loop = shouldLoop; + CurrentAnimation.MirrorHorizontal = shouldBeMirrored; + + // Normally animation root transform is set from the draw method. + // However when pawns are culled, the draw method is not called so the animation + // position can get out of sync. These lines ensure that the matrix is updated if the draw hasn't be called due to culling. + if (Find.TickManager.TicksAbs - drawTick >= 2) + CurrentAnimation.RootTransform = MakePawnMatrix(pawn, pawn.Rotation == Rot4.North); + } + + private void DoAttackPausing() + { + if (pauseTicks > 0) + { + if (isPausing) + { + pauseTicks--; + } + else + { + // Check weapon angle. + // Once the weapon swings by the target, do a brief pause to indicate a hit. + var ss = CurrentAnimation.GetPart("ItemA").GetSnapshot(CurrentAnimation); + var dir = (CurrentAnimation.RootTransform * ss.WorldMatrixPreserveFlip).MultiplyVector(Vector3.right).normalized; + float angle = dir.ToAngleFlatNew(); + float delta = Mathf.DeltaAngle(angle, pauseAngle); + bool shouldStartPausing = Mathf.Abs(delta) < 5f || (lastDelta != 0 && lastDelta.Polarity() != delta.Polarity() && Mathf.Abs(lastDelta) < 120); + //Core.Log($"{angle:F0} vs {pauseAngle:F0} is Delta: {delta} ({dir.ToString("F2")})"); + lastDelta = delta; + if (shouldStartPausing) + { + isPausing = true; + lastSpeed = CurrentAnimation.TimeScale; + CurrentAnimation.TimeScale = 0; + lastDelta = 0; + } + } + } + else if (isPausing) + { + isPausing = false; + CurrentAnimation.TimeScale = lastSpeed; + } + } + + private void EnsuringMoving(Pawn pawn, ItemTweakData tweak) + { + bool horizontal = pawn.Rotation.IsHorizontal; + + var anim = horizontal ? tweak.GetMoveHorizontalAnimation() : tweak.GetMoveVerticalAnimation(); + if (anim == null) + { + Core.Warn($"Missing movement animation for {tweak.ItemDefName}, horizontal: {horizontal}"); + return; + } + + // Start the movement animation if required. + bool needsNew = CurrentAnimation == null || CurrentAnimation.IsDestroyed || CurrentAnimation.Def != anim; + if (needsNew) + StartAnim(anim); + + if (CurrentAnimation == null) + return; + + var rot = pawn.Rotation; + CurrentAnimation.MirrorHorizontal = rot == Rot4.North || rot == Rot4.West; + CurrentAnimation.TimeScale = GetMoveAnimationSpeed(pawn); + } + + private void EnsureFacingOrIdle(Pawn pawn, ItemTweakData tweak) + { + var rot = pawn.Rotation; + bool facingSouth = rot == Rot4.South; + bool isBusyStance = pawn.stances.curStance is Stance_Busy { neverAimWeapon: false, focusTarg.IsValid: true }; + var anim = (isBusyStance || !facingSouth) ? rot.IsHorizontal ? tweak.GetMoveHorizontalAnimation() : tweak.GetMoveVerticalAnimation() : tweak.GetIdleAnimation(); + + // Start anim if required. + bool neededIsMovement = anim.idleType.IsMove(); + bool currentIsIdle = CurrentAnimation is {IsDestroyed: false} && CurrentAnimation.Def.idleType.IsIdle(); + bool needsNew = CurrentAnimation == null || CurrentAnimation.IsDestroyed || (CurrentAnimation.Def != anim && (!currentIsIdle || neededIsMovement)); + if (needsNew) + StartAnim(anim); + + // Sanity check. + if (CurrentAnimation == null) + return; + + // Set anim speed if not idle: + if (CurrentAnimation.Def.idleType.IsIdle()) + return; + + // Do freeze frame: + float idleTime = CurrentAnimation.Def.idleFrame / 60f; + CurrentAnimation.TimeScale = 0f; + CurrentAnimation.Seek(idleTime, 0f, null); + } + + private void TickFlavour(ItemTweakData tweak) + { + // Check if disabled from settings: + if (Core.Settings.FlavourMTB <= 0f) + return; + + // Only perform when idling: + if (CurrentAnimation == null || CurrentAnimation.Def.idleType != IdleType.Idle) + return; + + // Random chance to occur each frame, using MTB from settings. + if (!Rand.MTBEventOccurs(Core.Settings.FlavourMTB, 60f, 1f)) + return; + + // Pick random flavour. + var anim = Random(tweak.GetFlavourAnimations(), lastFlavour); + lastFlavour = anim; + + // Play said flavour. + if (anim != null) + StartAnim(anim); + } + + private void StartAnim(AnimDef def) + { + ClearAnimation(); + + var args = new AnimationStartParameters(def, (Pawn) parent) + { + DoNotRegisterPawns = true, + }; + + if (!args.TryTrigger(out CurrentAnimation)) + Core.Error($"Failed to start idle anim '{def}'!"); + } + + private static float GetMoveAnimationSpeed(Pawn pawn) + { + const float REF_SPEED = 4f; + const float MIN_COEF = 0.4f; + const float MAX_COEF = 2.5f; + const float EXP = 0.6f; + + bool isDiagonal = pawn.pather.nextCell.x != pawn.pather.lastCell.x && pawn.pather.nextCell.z != pawn.pather.lastCell.z; + float dst = isDiagonal ? 1.41421f : 1f; + float pctPerTick = pawn.pather.CostToPayThisTick() / pawn.pather.nextCellCostTotal; + float dstPerSecond = 60f * dst * pctPerTick; + return Mathf.Clamp(Mathf.Pow(dstPerSecond / REF_SPEED, EXP), MIN_COEF, MAX_COEF) * Core.Settings.MoveAnimSpeedCoef; + } + + private static AnimDef Random(IReadOnlyList anims, AnimDef preferNotThis) + { + if (anims.Count == 0) + return null; + + if (anims.Count == 1) + return anims[0]; + + for (int i = 0; i < 20; i++) + { + var picked = anims.RandomElementByWeight(d => d.Probability); + if (picked != preferNotThis) + return picked; + } + + // Fallback in case there are not alternatives. + return anims.RandomElementByWeight(d => d.Probability); + } + + private Thing GetMeleeWeapon() + { + var weapon = (parent as Pawn)?.equipment?.Primary; + if (weapon != null && weapon.def.IsMeleeWeapon() && weapon.TryGetTweakData() != null) + return weapon; + return null; + } + + public void NotifyPawnDidMeleeAttack(Thing target, Verb_MeleeAttack verbUsed) + { + // Check valid state. + var pawn = parent as Pawn; + var weapon = GetMeleeWeapon(); + var tweak = weapon?.TryGetTweakData(); + if (tweak == null) + return; + + // Attempt to get an attack animation for current weapon and stance. + var rot = pawn.Rotation; + bool didHit = target != null && Patch_Verb_MeleeAttack_ApplyMeleeDamageToTarget.lastTarget == target; + + // Get list of attack animations. + var anims = tweak.GetAttackAnimations(rot); + var anim = Random(anims, lastAttack); + + lastAttack = anim; + if (anim == null) + { + Core.Warn($"Failed to find any attack animation to play for {weapon} {tweak.GetCategory()}, rot: {rot.AsVector2} !"); + return; + } + + // Adjust animation speed if the attack cooldown is very low. + float speedFactor = 1f; + if (Core.Settings.SpeedUpAttackAnims) + { + float cooldown = verbUsed?.verbProps.AdjustedCooldownTicks(verbUsed, pawn).TicksToSeconds() ?? 100f; + if (cooldown < anim.Data.Duration && cooldown > 0) + { + speedFactor = anim.Data.Duration / cooldown; + } + } + + bool flipX = rot == Rot4.West; + + isPausing = false; + pauseTicks = -1; + if (target != null) + { + // Set target angle regardless of hit (it's used by some animations). + float angle = (target.DrawPos - pawn.DrawPos).ToAngleFlatNew(); + pauseAngle = angle; + + // Only if we actually hit: + if (didHit && Core.Settings.AttackPauseDuration != AttackPauseIntensity.Disabled) + pauseTicks = (int)Core.Settings.AttackPauseDuration; + } + + Patch_Verb_MeleeAttack_ApplyMeleeDamageToTarget.lastTarget = null; + + // Play animation. + var args = new AnimationStartParameters(anim, pawn) + { + FlipX = flipX, + DoNotRegisterPawns = true, + RootTransform = MakePawnMatrix(pawn, rot == Rot4.North) + }; + + ClearAnimation(); + if (!args.TryTrigger(out CurrentAnimation)) + { + Core.Error($"Failed to trigger attack animation for {pawn} ({args}). Dead: {pawn.Dead}, Downed: {pawn.Downed}, InAnim: {pawn.TryGetAnimator() != null}"); + } + else + { + CurrentAnimation.TimeScale = speedFactor; + } + } + + private Matrix4x4 MakePawnMatrix(Pawn pawn, bool north) + { + var mat = Matrix4x4.TRS(pawn.DrawPos + new Vector3(0, north ? -0.8f : 0.1f), Quaternion.identity, Vector3.one); + if (CurrentAnimation == null || !CurrentAnimation.Def.pointAtTarget) + return mat; + + float frame = CurrentAnimation.CurrentTime * 60f; + float lerp = Mathf.InverseLerp(CurrentAnimation.Def.returnToIdleStart, CurrentAnimation.Def.returnToIdleEnd, frame); + + float idle = 0; + float point = -pauseAngle; + if (CurrentAnimation.MirrorHorizontal) + { + point -= 180; + } + + if (CurrentAnimation.Def.idleType == IdleType.AttackNorth) + point += 90; + if (CurrentAnimation.Def.idleType == IdleType.AttackSouth) + point -= 90; + + float a = Mathf.LerpAngle(point, idle, lerp); + return mat * Matrix4x4.Rotate(Quaternion.Euler(0f, a, 0f)); + } + + public override void PostDeSpawn(Map map) + { + base.PostDeSpawn(map); + ClearAnimation(); + } + + public override void PostDestroy(DestroyMode mode, Map previousMap) + { + base.PostDestroy(mode, previousMap); + ClearAnimation(); + } + + public void ClearAnimation() + { + if (CurrentAnimation == null) + return; + + //Core.Log($"[{parent}] Cleared {CurrentAnimation?.ToString() ?? "null"}"); + + if (!CurrentAnimation.IsDestroyed) + CurrentAnimation.Destroy(); + + CurrentAnimation = null; + } + + public override void PostExposeData() + { + base.PostExposeData(); + + try + { + if (!ShouldHaveSkills()) + return; + + if (skills == null) + PopulateSkills(); + + for (int i = 0; i < skills.Length; i++) + { + if (skills[i] == null) + { + Core.Warn($"Missing (null) skill at index {i}"); + continue; + } + + try + { + Scribe_Deep.Look(ref skills[i], skills[i].GetType().FullName); + } + catch (Exception e) + { + Core.Error($"Exception exposing skill {skills[i]}:", e); + } + } + } + catch (Exception e2) + { + Core.Error("Big ouch:", e2); + } + } + + private bool ShouldHaveSkills() => Core.Settings.EnableUniqueSkills && parent is Pawn p && (p.IsColonist || p.IsSlaveOfColony); + + private void PopulateSkills() + { + try + { + var pawn = parent as Pawn; + var list = DefDatabase.AllDefsListForReading; + skills = new UniqueSkillInstance[list.Count]; + for (int i = 0; i < list.Count; i++) + { + var instance = Activator.CreateInstance(list[i].instanceClass) as UniqueSkillInstance; + if (instance == null) + { + Log.Error($"Failed to create instance of class '{list[i].instanceClass}'. This will surely cause issues down the line."); + continue; + } + + instance.Pawn = pawn; + instance.Def = list[i]; + + skills[i] = instance; + } + } + catch (Exception e) + { + Core.Error("Exception populating skills:", e); + } + } + + public IReadOnlyList GetSkills() + { + if (skills == null) + { + if (ShouldHaveSkills()) + { + // Populate skills list. + PopulateSkills(); + } + else + { + return Array.Empty(); + } + } + return skills; + } +} diff --git a/Source/AnimationMod/Idle/IdleType.cs b/Source/1.4/ThingGenerator/Idle/IdleType.cs similarity index 100% rename from Source/AnimationMod/Idle/IdleType.cs rename to Source/1.4/ThingGenerator/Idle/IdleType.cs diff --git a/Source/AnimationMod/Idle/WeaponCat.cs b/Source/1.4/ThingGenerator/Idle/WeaponCat.cs similarity index 100% rename from Source/AnimationMod/Idle/WeaponCat.cs rename to Source/1.4/ThingGenerator/Idle/WeaponCat.cs diff --git a/Source/AnimationMod/Idle/WeaponSize.cs b/Source/1.4/ThingGenerator/Idle/WeaponSize.cs similarity index 100% rename from Source/AnimationMod/Idle/WeaponSize.cs rename to Source/1.4/ThingGenerator/Idle/WeaponSize.cs diff --git a/Source/AnimationMod/Jobs/IDuelEndNotificationReceiver.cs b/Source/1.4/ThingGenerator/Jobs/IDuelEndNotificationReceiver.cs similarity index 100% rename from Source/AnimationMod/Jobs/IDuelEndNotificationReceiver.cs rename to Source/1.4/ThingGenerator/Jobs/IDuelEndNotificationReceiver.cs diff --git a/Source/AnimationMod/Jobs/JobDriver_ChannelAnimation.cs b/Source/1.4/ThingGenerator/Jobs/JobDriver_ChannelAnimation.cs similarity index 100% rename from Source/AnimationMod/Jobs/JobDriver_ChannelAnimation.cs rename to Source/1.4/ThingGenerator/Jobs/JobDriver_ChannelAnimation.cs diff --git a/Source/AnimationMod/Jobs/JobDriver_DoAnimation.cs b/Source/1.4/ThingGenerator/Jobs/JobDriver_DoAnimation.cs similarity index 100% rename from Source/AnimationMod/Jobs/JobDriver_DoAnimation.cs rename to Source/1.4/ThingGenerator/Jobs/JobDriver_DoAnimation.cs diff --git a/Source/AnimationMod/Jobs/JobDriver_DoFriendlyDuel.cs b/Source/1.4/ThingGenerator/Jobs/JobDriver_DoFriendlyDuel.cs similarity index 100% rename from Source/AnimationMod/Jobs/JobDriver_DoFriendlyDuel.cs rename to Source/1.4/ThingGenerator/Jobs/JobDriver_DoFriendlyDuel.cs diff --git a/Source/AnimationMod/Jobs/JobDriver_GoToAnimationSpot.cs b/Source/1.4/ThingGenerator/Jobs/JobDriver_GoToAnimationSpot.cs similarity index 100% rename from Source/AnimationMod/Jobs/JobDriver_GoToAnimationSpot.cs rename to Source/1.4/ThingGenerator/Jobs/JobDriver_GoToAnimationSpot.cs diff --git a/Source/AnimationMod/Jobs/JobDriver_GoToExecutionSpot.cs b/Source/1.4/ThingGenerator/Jobs/JobDriver_GoToExecutionSpot.cs similarity index 100% rename from Source/AnimationMod/Jobs/JobDriver_GoToExecutionSpot.cs rename to Source/1.4/ThingGenerator/Jobs/JobDriver_GoToExecutionSpot.cs diff --git a/Source/AnimationMod/Jobs/JobDriver_SpectateDuel.cs b/Source/1.4/ThingGenerator/Jobs/JobDriver_SpectateDuel.cs similarity index 100% rename from Source/AnimationMod/Jobs/JobDriver_SpectateDuel.cs rename to Source/1.4/ThingGenerator/Jobs/JobDriver_SpectateDuel.cs diff --git a/Source/AnimationMod/Jobs/ToilUtils.cs b/Source/1.4/ThingGenerator/Jobs/ToilUtils.cs similarity index 100% rename from Source/AnimationMod/Jobs/ToilUtils.cs rename to Source/1.4/ThingGenerator/Jobs/ToilUtils.cs diff --git a/Source/AnimationMod/MeleeAnimationAdjustmentDef.cs b/Source/1.4/ThingGenerator/MeleeAnimationAdjustmentDef.cs similarity index 100% rename from Source/AnimationMod/MeleeAnimationAdjustmentDef.cs rename to Source/1.4/ThingGenerator/MeleeAnimationAdjustmentDef.cs diff --git a/Source/AnimationMod/Outcome/IOutcomeWorker.cs b/Source/1.4/ThingGenerator/Outcome/IOutcomeWorker.cs similarity index 100% rename from Source/AnimationMod/Outcome/IOutcomeWorker.cs rename to Source/1.4/ThingGenerator/Outcome/IOutcomeWorker.cs diff --git a/Source/1.4/ThingGenerator/Outcome/OutcomeUtility.cs b/Source/1.4/ThingGenerator/Outcome/OutcomeUtility.cs new file mode 100644 index 00000000..74b32110 --- /dev/null +++ b/Source/1.4/ThingGenerator/Outcome/OutcomeUtility.cs @@ -0,0 +1,554 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using AM.Patches; +using JetBrains.Annotations; +using RimWorld; +using UnityEngine; +using Verse; + +namespace AM.Outcome; + +/// +/// Helper class to determine and then execute the outcome of duels and executions. +/// +public static class OutcomeUtility +{ + public static IOutcomeWorker OutcomeWorker = new VanillaOutcomeWorker(); + + public static readonly Func GreaterThan = (x, y) => x > y; + public static readonly Func LessThan = (x, y) => x < y; + + public static readonly Func Pen = a => a.ArmorPen; + public static readonly Func Dmg = a => a.Damage; + public static readonly Func PenXDmg = a => a.Damage * a.ArmorPen; + + [UsedImplicitly] + [TweakValue("Melee Animation")] +#pragma warning disable CS0649 // Field 'OutcomeUtility.debugLogExecutionOutcome' is never assigned to, and will always have its default value false + private static bool debugLogExecutionOutcome; +#pragma warning restore CS0649 // Field 'OutcomeUtility.debugLogExecutionOutcome' is never assigned to, and will always have its default value false + + public ref struct AdditionalArgs + { + public DamageDef DamageDef; + public BodyPartDef BodyPartDef; + public RulePackDef LogGenDef; + public ThingWithComps Weapon; + public float TargetDamageAmount; + } + + [DebugAction("Melee Animation", "Compare Lethality", allowedGameStates = AllowedGameStates.PlayingOnMap, actionType = DebugActionType.ToolMapForPawns)] + private static void CompareLethalityDebug(Pawn pawn) + { + Pawn selected = Find.Selector.SelectedPawns.FirstOrDefault(); + if (selected == null || selected == pawn) + { + Messages.Message("Select another pawn before using the debug tool.", MessageTypeDefOf.RejectInput, false); + return; + } + + Core.Log($"{selected}, {pawn}"); + + float a = selected.GetStatValue(AM_DefOf.AM_Lethality); + float a2 = selected.GetStatValue(AM_DefOf.AM_DuelAbility); + float b = pawn.GetStatValue(AM_DefOf.AM_Lethality); + float b2 = pawn.GetStatValue(AM_DefOf.AM_DuelAbility); + float chanceToBeat = ChanceToBeatInMelee(selected, pawn); + + Messages.Message($"{selected.LabelShortCap} lethality: {a:P1}", MessageTypeDefOf.NeutralEvent, false); + Messages.Message($"{selected.LabelShortCap} duel ability: {a2:P1}", MessageTypeDefOf.NeutralEvent, false); + Messages.Message($"{pawn.LabelShortCap} lethality: {b:P1}", MessageTypeDefOf.NeutralEvent, false); + Messages.Message($"{pawn.LabelShortCap} duel ability: {b2:P1}", MessageTypeDefOf.NeutralEvent, false); + Messages.Message($"{selected.LabelShortCap} vs {pawn.LabelShortCap}: {chanceToBeat:P1} to win.", MessageTypeDefOf.NeutralEvent, false); + + } + + /// + /// Performs the effects of on the target pawn. + /// + public static bool PerformOutcome(ExecutionOutcome outcome, Pawn attacker, Pawn target, in AdditionalArgs args) + { + if (target == null) + return false; + if (attacker == null) + return false; + if (target.Dead || !target.Spawned) + return false; + + switch (outcome) + { + case ExecutionOutcome.Nothing: + return true; + + case ExecutionOutcome.Failure: + return Failure(attacker, target, args); + + case ExecutionOutcome.Damage: + return Damage(attacker, target, args); + + case ExecutionOutcome.Down: + return Down(attacker, target, args); + + case ExecutionOutcome.Kill: + return Kill(attacker, target, args); + + default: + throw new ArgumentOutOfRangeException(nameof(outcome), outcome, null); + } + } + + /// + /// The percentage chance that has to beat in a duel or execution, based on the + /// Duel Ability stat. + /// + public static float ChanceToBeatInMelee(Pawn a, Pawn b) + { + var normal = Core.Settings.GetNormalDistribution(); + float aL = a.GetStatValue(AM_DefOf.AM_DuelAbility); + float bL = b.GetStatValue(AM_DefOf.AM_DuelAbility); + float diff = aL - bL; + + return Mathf.Clamp01((float)normal.LeftProbability(diff)); + } + + public static ExecutionOutcome GenerateRandomOutcome(Pawn attacker, Pawn victim, bool canFail, ProbabilityReport report = null) + { + // Get lethality, adjusted by settings. + float aL = attacker.GetStatValue(AM_DefOf.AM_Lethality); + int meleeSkill = attacker.skills?.GetSkill(SkillDefOf.Melee)?.Level ?? 0; + var weapon = attacker.GetFirstMeleeWeapon(); + var mainAttack = SelectMainAttack(OutcomeWorker.GetMeleeAttacksFor(weapon, attacker)); + var damageDef = mainAttack.DamageDef; + var corePart = GetCoreBodyPart(victim); + + return GenerateRandomOutcome(damageDef, victim, corePart, mainAttack.ArmorPen, meleeSkill, aL, canFail, report); + } + + /// + /// Generates a random execution outcome based on an lethality value. + /// + public static ExecutionOutcome GenerateRandomOutcome(DamageDef dmgDef, Pawn victim, BodyPartRecord bodyPart, float weaponPen, float attackerMeleeSkill, float lethality, bool canFail, ProbabilityReport report = null) + { + static void Log(string msg) + { + if (debugLogExecutionOutcome) + Core.Log(msg); + } + + var outcome = ExecutionOutcome.Nothing; + + // Before anything else: check for failure chance. + float chanceToFail = canFail ? Mathf.Clamp01(RemapClamped(0, 20, Core.Settings.ChanceToFailMinSkill, Core.Settings.ChanceToFailMaxSkill, attackerMeleeSkill)) : 0f; + Log($"Chance to fail: {chanceToFail:P1} based on melee skill {attackerMeleeSkill:F1}"); + bool willFail = Rand.Chance(chanceToFail); + if (willFail && report == null) + { + Log("Outcome: Failed."); + outcome = ExecutionOutcome.Failure; + return outcome; + } + if (report != null) + report.FailureChance = chanceToFail; + + // Armor calculations for down or kill. + var armorStat = dmgDef?.armorCategory?.armorRatingStat ?? StatDefOf.ArmorRating_Sharp; + Log($"Armor stat: {armorStat}, weapon pen: {weaponPen:F2}, lethality: {lethality:F2}"); + float armorMulti = Core.Settings.ExecutionArmorCoefficient; + float chanceToPen = OutcomeWorker.GetChanceToPenAprox(victim, bodyPart, armorStat, weaponPen); + Log($"Chance to pen (base): {chanceToPen:P1}"); + if (armorMulti > 0f) + chanceToPen /= armorMulti; + else + chanceToPen = 1f; + Log($"Chance to pen (post-settings): {chanceToPen:P1}"); + bool canPen = Rand.Chance(chanceToPen); + Log($"Random will pen outcome: {canPen}"); + + // Cap chance to pen to make percentage calculations work. + chanceToPen = Mathf.Clamp01(chanceToPen); + + // Calculate kill chance based on lethality and settings. + bool preventKill = Core.Settings.ExecutionsOnFriendliesAreNotLethal && (victim.IsColonist || victim.IsSlaveOfColony || victim.IsPrisonerOfColony || victim.Faction == Faction.OfPlayerSilentFail); + bool attemptKill = Rand.Chance(lethality); + Log($"Prevent kill: {preventKill}"); + Log($"Attempt kill: {attemptKill} (from random lethality chance)"); + + // Cap lethality to 100% because otherwise it messes up percentage calculations. + lethality = Mathf.Clamp01(lethality); + + float preventKillCoef = preventKill ? 0f : 1f; + if (report != null) + report.KillChance = preventKillCoef * chanceToPen * lethality * (1 - chanceToFail); // Absolute chance to kill. + + if (canPen && !preventKill && attemptKill) + { + Log("Killed!"); + outcome = ExecutionOutcome.Kill; + if (report == null) + return outcome; + } + + Log("Moving on to down or injure..."); + float downChance = RemapClamped(4, 20, 0.2f, 0.9f, attackerMeleeSkill); + Log(canPen ? $"Chance to down, based on melee skill of {attackerMeleeSkill:N1}: {downChance:P1}" : "Cannot down, pen chance failed. Will damage."); + if (report != null) + { + report.DownChance = (1 - report.KillChance - report.FailureChance) * chanceToPen * downChance; + report.InjureChance = (1 - report.KillChance - report.DownChance - report.FailureChance); + + float sum = report.KillChance + report.DownChance + report.InjureChance + report.FailureChance; + if (Math.Abs(sum - 1f) > 0.001f) + Core.Warn($"Bad percentage calculation ({sum})! Please tell the developer he is an idiot."); + } + + if (outcome == ExecutionOutcome.Nothing && canPen && Rand.Chance(downChance)) + { + Log("Downed"); + outcome = ExecutionOutcome.Down; + if (report == null) + return outcome; + } + + // Damage! + if (outcome == ExecutionOutcome.Nothing) + { + Log("Damaged"); + outcome = ExecutionOutcome.Damage; + if (report == null) + return outcome; + } + + report?.Normalize(); + return outcome; + } + + public static float RemapClamped(float baseA, float baseB, float newA, float newB, float value) + { + float t = Mathf.InverseLerp(baseA, baseB, value); + return Mathf.Lerp(newA, newB, t); + } + + private static BodyPartRecord GetCoreBodyPart(Pawn pawn) => pawn.def.race.body.corePart; + + [UsedImplicitly] + [DebugOutput("Melee Animation")] + private static void LogAllMeleeWeaponVerbs() + { + var meleeWeapons = DefDatabase.AllDefsListForReading.Where(d => d.IsMeleeWeapon()); + var created = new HashSet(); + foreach (var def in meleeWeapons) + { + created.Add(ThingMaker.MakeThing(def) as ThingWithComps); + } + + static string VerbToString(Verb verb, ThingWithComps weapon = null) + { + float dmg = OutcomeWorker.GetDamage(weapon, verb, null); + float ap = OutcomeWorker.GetPen(weapon, verb, null); + var armorSt = verb.GetDamageDef()?.armorCategory?.armorRatingStat ?? StatDefOf.ArmorRating_Sharp; + return $"{verb}: {verb.GetDamageDef()} (dmg: {dmg:F2}, ap: {ap:F2}, armor: {armorSt})"; + } + + static string AllVerbs(ThingWithComps t) + { + return string.Join("\n", GetEq(t).AllVerbs.Select(v => VerbToString(v))); + } + + static CompEquippable GetEq(ThingWithComps td) => td.GetComp(); + + TableDataGetter[] table = new TableDataGetter[4]; + table[0] = new TableDataGetter("Def Name", d => d.def.defName); + table[1] = new TableDataGetter("Name", d => d.LabelCap); + table[2] = new TableDataGetter("Main Attack", d => VerbToString(SelectMainAttack(OutcomeWorker.GetMeleeAttacksFor(d, null)).Verb)); + table[3] = new TableDataGetter("All Verbs", AllVerbs); + + DebugTables.MakeTablesDialog(created, table); + + foreach (var t in created) + t.Destroy(); + } + + public static PossibleMeleeAttack SelectMainAttack(IEnumerable attacks) => SelectMainAttack(attacks, Dmg, GreaterThan); + + public static PossibleMeleeAttack SelectMainAttack(IEnumerable attacks, Func valueSelector, Func compareFunc) + { + // Highest pen? + // highest damage? + // Pen x damage? + + PossibleMeleeAttack selected = default; + float? record = null; + + foreach (var a in attacks) + { + float value = valueSelector(a); + + if (record == null) + { + selected = a; + record = value; + continue; + } + + if (!compareFunc(value, record.Value)) + continue; + + selected = a; + record = value; + } + + return selected; + } + + private static bool Damage(Pawn attacker, Pawn pawn, in AdditionalArgs args) + { + // Damage but do not kill or down the target. + + float dmgToDo = args.TargetDamageAmount; + float totalDmgDone = 0; + + bool WouldBeInvalidResult(HediffDef hediff, float dmg, BodyPartRecord bp) + { + return pawn.health.WouldLosePartAfterAddingHediff(hediff, bp, dmg) || + pawn.health.WouldBeDownedAfterAddingHediff(hediff, bp, dmg) || + pawn.health.WouldDieAfterAddingHediff(hediff, bp, dmg); + } + + for (int i = 0; i < 50; i++) + { + // TODO check does this correctly get the right verbs even if the melee weapon is a sidearm? + Verb verb; + int limit = 1000; + do + { + verb = attacker.meleeVerbs.TryGetMeleeVerb(pawn); + if (limit-- == 0) + { + Core.Error($"Failed to find random verb for weapon '{args.Weapon}' on pawn {pawn}. May be a result of an optimization mod or bug.\n" + + $"The possible verbs are {string.Join(", ", attacker.meleeVerbs.GetUpdatedAvailableVerbsList(false).Where(v => v.IsMeleeAttack).Select(v => v.verb))}"); + return false; + } + + // Force verb refresh if required. + if (verb.EquipmentSource != args.Weapon) + { + attacker.meleeVerbs.ChooseMeleeVerb(pawn); + } + + } while (verb.EquipmentSource != args.Weapon); + + float dmg = OutcomeWorker.GetDamage(args.Weapon, verb, attacker); + if (dmg > dmgToDo) + dmg = dmgToDo; + dmgToDo -= dmg; + float armorPenetration = OutcomeWorker.GetPen(args.Weapon, verb, attacker); + + if (debugLogExecutionOutcome) + Core.Log($"Using verb {verb} to hit for {dmg:F1} dmg with {armorPenetration:F2} pen. Rem: {dmgToDo}"); + + DamageDef def = verb.GetDamageDef(); + var bodyPartGroupDef = verb.verbProps.AdjustedLinkedBodyPartsGroup(verb.tool); + + for (int j = 0; j < 5; j++) + { + var part = pawn.health.hediffSet.GetRandomNotMissingPart(def, BodyPartHeight.Middle, BodyPartDepth.Outside); + + if (dmg < 1f) + { + Core.Warn($"Very low damage of {dmg:F3} with verb {verb}. Changing to 1 blunt damage."); + dmg = 1f; + def = DamageDefOf.Blunt; + } + + if (WouldBeInvalidResult(def.hediff, dmg, part)) + { + if (j == 4) + Core.Warn($"Failed to find any hit for {dmg:F2} dmg that would not kill, down or amputate part on {pawn}. Will keep trying for the remaining {dmgToDo:F2} dmg."); + continue; + } + + OutcomeWorker.PreDamage(verb); + + ThingDef source = args.Weapon.def; + Vector3 direction = (pawn.Position - attacker.Position).ToVector3(); + DamageInfo damageInfo = new DamageInfo(def, dmg, armorPenetration, -1f, attacker, null, source); + damageInfo.SetWeaponBodyPartGroup(bodyPartGroupDef); + damageInfo.SetAngle(direction); + damageInfo.SetIgnoreInstantKillProtection(false); + damageInfo.SetAllowDamagePropagation(false); + + var info = pawn.TakeDamage(damageInfo); + if (debugLogExecutionOutcome) + Core.Log($"Hit {part.LabelCap} for {info.totalDamageDealt:F2}/{dmg:F2} dmg, mitigated"); + totalDmgDone += info.totalDamageDealt; + if (pawn.Dead || pawn.Downed) { + Core.Error($"Accidentally killed or downed {pawn} when attempting to just injure: tried to deal {dmg:F1} {def} dmg to {part.LabelCap}. Storyteller, difficulty, hediffs, or mods could have modified the damage to cause this."); + return false; + } + break; + } + + if (dmgToDo <= 0) + break; + } + + Core.Log($"Dealt {totalDmgDone:F2} pts of dmg as part of injury to {pawn} (aimed to deal {args.TargetDamageAmount:F2})."); + return true; + } + + private static bool Down(Pawn attacker, Pawn pawn, in AdditionalArgs _) + { + // Give the downed hediff. + var h = pawn.health.AddHediff(AM_DefOf.AM_KnockedOut); + + if (h == null) + Core.Error($"Failed to give {pawn} the knocked out hediff!"); + + return h != null; + } + + private static bool Failure(Pawn attacker, Pawn target, in AdditionalArgs _) + { + // Stun the attacker for a bit. + attacker.stances?.stunner?.StunFor(60 * 3, attacker, false); + return true; + } + + private static bool IsDeathless(Pawn pawn) + { + return pawn.genes?.HasGene(GeneDefOf.Deathless) ?? false; + } + + private static bool Kill(Pawn killer, Pawn pawn, in AdditionalArgs args) + { + bool isDeathless = IsDeathless(pawn); + + if (Core.Settings.ExecutionsCanDestroyBodyParts || isDeathless) + { + BodyPartDef partDef = args.BodyPartDef; + DamageDef dmgDef = args.DamageDef ?? DamageDefOf.Cut; + RulePackDef logDef = args.LogGenDef ?? AM_DefOf.AM_Execution_Generic; + Thing weapon = args.Weapon; + + // Don't allow destroying the head because this would really kill the + if (isDeathless && partDef == BodyPartDefOf.Head) + { + partDef = GetCoreBodyPart(pawn).def; + Core.Log($"Since {pawn} is deathless, the killing damage has been changed from targeting the Head to instead hit the {partDef}."); + } + + BodyPartRecord part = pawn.TryGetPartFromDef(partDef); + var dInfo = new DamageInfo(dmgDef, 99999, 99999, hitPart: part, instigator: killer, weapon: weapon?.def); + var log = CreateLog(logDef, weapon, killer, pawn); + dInfo.SetAllowDamagePropagation(false); + dInfo.SetIgnoreArmor(true); + dInfo.SetIgnoreInstantKillProtection(true); + + var oldEffecter = pawn.RaceProps?.FleshType?.damageEffecter; + if (oldEffecter != null) + pawn.RaceProps.FleshType.damageEffecter = null; + + // Smack em hard. + DamageWorker.DamageResult result; + try + { + result = pawn.TakeDamage(dInfo); + } + finally + { + if (oldEffecter != null) + pawn.RaceProps.FleshType.damageEffecter = oldEffecter; + } + + // If for some reason they did not die from 9999 damage (magic shield?), just double-kill them the hard way. + if (!pawn.Dead && !isDeathless) + { + Find.BattleLog.RemoveEntry(log); + pawn.Kill(dInfo, result?.hediffs?.FirstOrFallback()); + } + else + { + result?.AssociateWithLog(log); + } + } + else + { + // Magic kill... + BodyPartDef partDef = args.BodyPartDef; + DamageDef dmgDef = args.DamageDef ?? DamageDefOf.Cut; + BodyPartRecord part = pawn.TryGetPartFromDef(partDef); + Thing weapon = args.Weapon; + + // Does 0.01 damage, kills anyway. + var dInfo = new DamageInfo(dmgDef, 0.01f, 0f, hitPart: part, instigator: killer, weapon: weapon?.def); + pawn.Kill(dInfo); + } + + // Apply corpse offset if required. + var animator = pawn.TryGetAnimator(); + if (animator == null) + return true; + + var animPart = animator.GetPawnBody(pawn); + if (animPart == null) + return true; + + var ss = animator.GetSnapshot(animPart); + + if (pawn.Corpse != null) + { + // Do corpse interpolation - interpolates the corpse to the correct position, after the animated position. + Patch_Corpse_DrawAt.Interpolators[pawn.Corpse] = new CorpseInterpolate(pawn.Corpse, ss.GetWorldPosition()); + + Patch_PawnRenderer_LayingFacing.OverrideRotations[pawn] = ss.GetWorldDirection(); + } + else if (!isDeathless) + { + Core.Warn($"{pawn} did not spawn a corpse after death, or the corpse was destroyed..."); + } + + // Update the pawn wiggler so that the pawn corpse matches the final animation state. + var bodyRot = ss.GetWorldRotation(); + pawn.Drawer.renderer.wiggler.downedAngle = bodyRot; + + return true; + } + + private static LogEntry_DamageResult CreateLog(RulePackDef def, Thing weapon, Pawn inst, Pawn vict) + { + //var log = new BattleLogEntry_MeleeCombat(rulePackGetter(this.maneuver), alwaysShow, this.CasterPawn, this.currentTarget.Thing, base.ImplementOwnerType, this.tool.labelUsedInLogging ? this.tool.label : "", (base.EquipmentSource == null) ? null : base.EquipmentSource.def, (base.HediffCompSource == null) ? null : base.HediffCompSource.Def, this.maneuver.logEntryDef); + var log = new BattleLogEntry_MeleeCombat(def, true, inst, vict, ImplementOwnerTypeDefOf.Weapon, weapon?.Label, def: LogEntryDefOf.MeleeAttack); + Find.BattleLog.Add(log); + return log; + } + + public class ProbabilityReport + { + public float FailureChance { get; set; } + public float DownChance { get; set; } + public float InjureChance { get; set; } + public float KillChance { get; set; } + + public void Normalize() + { + float sum = DownChance + InjureChance + KillChance + FailureChance; + if (sum == 0f) + return; + + DownChance /= sum; + InjureChance /= sum; + KillChance /= sum; + FailureChance /= sum; + } + + private static string InColor(float pct) + { + Color c = Color.Lerp(Color.red, Color.green, pct); + string hex = ColorUtility.ToHtmlStringRGB(c); + return $"{pct*100:F0}%"; + } + + public override string ToString() => $"{"AM.ProbReport.Kill".Trs()}: {InColor(KillChance)}\n{"AM.ProbReport.Down".Trs()}: {InColor(DownChance)}\n{"AM.ProbReport.Injure".Trs()}: {InColor(InjureChance)}\n{"AM.ProbReport.Fail".Trs()}: {InColor(FailureChance)}"; + } +} diff --git a/Source/AnimationMod/Outcome/PossibleMeleeAttack.cs b/Source/1.4/ThingGenerator/Outcome/PossibleMeleeAttack.cs similarity index 100% rename from Source/AnimationMod/Outcome/PossibleMeleeAttack.cs rename to Source/1.4/ThingGenerator/Outcome/PossibleMeleeAttack.cs diff --git a/Source/AnimationMod/Outcome/VanillaOutcomeWorker.cs b/Source/1.4/ThingGenerator/Outcome/VanillaOutcomeWorker.cs similarity index 100% rename from Source/AnimationMod/Outcome/VanillaOutcomeWorker.cs rename to Source/1.4/ThingGenerator/Outcome/VanillaOutcomeWorker.cs diff --git a/Source/AnimationMod/PartRenderer.cs b/Source/1.4/ThingGenerator/PartRenderer.cs similarity index 100% rename from Source/AnimationMod/PartRenderer.cs rename to Source/1.4/ThingGenerator/PartRenderer.cs diff --git a/Source/1.4/ThingGenerator/Patches/PatchMaster.cs b/Source/1.4/ThingGenerator/Patches/PatchMaster.cs new file mode 100644 index 00000000..ba6d5f03 --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/PatchMaster.cs @@ -0,0 +1,19 @@ +using Verse; + +namespace AM.Patches; + +public static class PatchMaster +{ + private static Pawn lastPawn; + private static AnimRenderer lastRenderer; + + public static AnimRenderer GetAnimator(Pawn pawn) + { + if (pawn == lastPawn && lastRenderer is { IsDestroyed: false }) + return lastRenderer; + + lastPawn = pawn; + lastRenderer = AnimRenderer.TryGetAnimator(pawn); + return lastRenderer; + } +} diff --git a/Source/1.4/ThingGenerator/Patches/Patch_Corpse_DrawAt.cs b/Source/1.4/ThingGenerator/Patches/Patch_Corpse_DrawAt.cs new file mode 100644 index 00000000..32fe29e0 --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_Corpse_DrawAt.cs @@ -0,0 +1,68 @@ +using System.Collections.Generic; +using AM.AMSettings; +using HarmonyLib; +using UnityEngine; +using Verse; + +namespace AM.Patches +{ + [HarmonyPatch(typeof(Corpse), nameof(Corpse.DrawAt))] + public static class Patch_Corpse_DrawAt + { + public static readonly Dictionary Interpolators = new Dictionary(); + + public static void Tick() + { + if(GenTicks.TicksGame % (60 * 30) == 0) + Interpolators.RemoveAll(p => !p.Key.Spawned); + } + + [HarmonyPriority(Priority.First)] + static void Prefix(Corpse __instance, ref Vector3 drawLoc) + { + if (Core.Settings.CorpseOffsetMode == CorpseOffsetMode.None) + return; + + if (!Interpolators.TryGetValue(__instance, out var found)) + return; + + if (!found.Update(ref drawLoc)) + Interpolators.Remove(__instance); + } + } + + public class CorpseInterpolate + { + [TweakValue("AM", 0.01f, 100f)] + public static float CorpseLerpSpeed = 5; + + public Vector3 TargetPosition; + public Vector3 CurrentPosition; + public Vector3 InitialOffset; + + public CorpseInterpolate(Corpse corpse, Vector3 startPos) + { + TargetPosition = corpse.DrawPos; + InitialOffset = startPos - TargetPosition; + CurrentPosition = startPos; + } + + public bool Update(ref Vector3 drawLoc) + { + switch (Core.Settings.CorpseOffsetMode) + { + case CorpseOffsetMode.InterpolateToCorrect: + drawLoc += InitialOffset; + InitialOffset = Vector3.MoveTowards(InitialOffset, Vector3.zero, Time.deltaTime * CorpseLerpSpeed); + return InitialOffset.sqrMagnitude > 0.001f; + + case CorpseOffsetMode.KeepOffset: + drawLoc += InitialOffset; + return true; + + default: + return false; + } + } + } +} diff --git a/Source/AnimationMod/Patches/Patch_FloatMenuMakerMap_AddDraftedOrders.cs b/Source/1.4/ThingGenerator/Patches/Patch_FloatMenuMakerMap_AddDraftedOrders.cs similarity index 100% rename from Source/AnimationMod/Patches/Patch_FloatMenuMakerMap_AddDraftedOrders.cs rename to Source/1.4/ThingGenerator/Patches/Patch_FloatMenuMakerMap_AddDraftedOrders.cs diff --git a/Source/1.4/ThingGenerator/Patches/Patch_GlobalTextureAtlasManager_TryGetPawnFrameSet.cs b/Source/1.4/ThingGenerator/Patches/Patch_GlobalTextureAtlasManager_TryGetPawnFrameSet.cs new file mode 100644 index 00000000..8d0a2b97 --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_GlobalTextureAtlasManager_TryGetPawnFrameSet.cs @@ -0,0 +1,28 @@ +using HarmonyLib; +using Verse; + +namespace AM.Patches; + +/// +/// Disables the texture caching introduced in Rimworld 1.3. +/// Only applies when a pawn in being animated, or when they have been beheaded. +/// +[HarmonyPatch(typeof(GlobalTextureAtlasManager), nameof(GlobalTextureAtlasManager.TryGetPawnFrameSet))] +public static class Patch_GlobalTextureAtlasManager_TryGetPawnFrameSet +{ + [HarmonyPriority(Priority.First)] + public static bool Prefix(Pawn pawn, ref bool createdNew, ref bool __result) + { + var anim = PatchMaster.GetAnimator(pawn); + if (anim == null) + { + var isBeheaded = AnimationManager.PawnToHeadInstance.TryGetValue(pawn, out _); + if (!isBeheaded) + return true; + } + + createdNew = false; + __result = false; + return false; + } +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/Patches/Patch_PawnGenerator_GeneratePawn.cs b/Source/1.4/ThingGenerator/Patches/Patch_PawnGenerator_GeneratePawn.cs new file mode 100644 index 00000000..b838c4f7 --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_PawnGenerator_GeneratePawn.cs @@ -0,0 +1,77 @@ +using System; +using HarmonyLib; +using JetBrains.Annotations; +using RimWorld; +using UnityEngine; +using Verse; + +namespace AM.Patches; + +/// +/// Used to spawn lassos on melee pawns when they first generate. +/// +[HarmonyPatch(typeof(PawnGenerator), nameof(PawnGenerator.GenerateGearFor))] +[UsedImplicitly] +public static class Patch_PawnGenerator_GeneratePawn +{ + [HarmonyPriority(Priority.Last)] + public static void Postfix(Pawn pawn) + { + try + { + if (pawn == null) + return; + + // Spawn chance from settings: + if (!Rand.Chance(Core.Settings.LassoSpawnChance)) + return; + + // Basic pawn checks. + if (!pawn.def.race.Humanlike || !pawn.def.race.ToolUser || pawn.apparel == null) + return; + + // Only give to pawns with melee weapons. + var weapon = pawn.GetFirstMeleeWeapon(); + if (weapon == null) + return; + + // Don't bother giving to pawns that do not have the required melee skill. + if (Core.Settings.MinMeleeSkillToLasso > 0 && !HasSkillToUseLasso(pawn)) + return; + + GiveLasso(pawn, GetRandomLasso()); + } + catch (Exception e) + { + Core.Error("Exception in pawn generation postfix:", e); + } + } + + private static bool HasSkillToUseLasso(Pawn pawn) + { + int skill = pawn.skills?.GetSkill(SkillDefOf.Melee)?.Level ?? -1; + return skill >= Core.Settings.MinMeleeSkillToLasso; + } + + private static void GiveLasso(Pawn pawn, ThingDef lasso) + { + if (pawn == null || lasso == null) + return; + + var thing = ThingMaker.MakeThing(lasso) as Apparel; + if (thing == null) + { + Core.Warn($"Failed to spawn instance of lass '{lasso}'"); + return; + } + + thing.stackCount = 1; + pawn.apparel.Wear(thing, false); + } + + private static ThingDef GetRandomLasso() + { + // Random lasso with a heavy weight on cheaper ones. + return Content.LassoDefs.RandomElementByWeightWithFallback(l => 1f / Mathf.Pow(l.BaseMarketValue, 3)); + } +} diff --git a/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_DrawEquipmentAiming.cs b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_DrawEquipmentAiming.cs new file mode 100644 index 00000000..61f3fb47 --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_DrawEquipmentAiming.cs @@ -0,0 +1,35 @@ +using AM.Idle; +using AM.Tweaks; +using HarmonyLib; +using Verse; + +namespace AM.Patches; + +/// +/// Used to override drawing melee weapons. +/// +[HarmonyPatch(typeof(PawnRenderer), nameof(PawnRenderer.DrawEquipment))] +public static class Patch_PawnRenderer_DrawEquipment +{ + [HarmonyPriority(Priority.First)] + [HarmonyBefore("com.yayo.yayoAni")] + static bool Prefix(PawnRenderer __instance) + { + var pawn = __instance.pawn; + + if (!Core.Settings.AnimateAtIdle) + return true; + + var comp = pawn.GetComp(); + if (comp == null) + return true; // Why would this ever be the case? Better safe than sorry though. + + // Only for melee weapons... + var wep = pawn.equipment?.Primary?.def; + bool isMeleeWeapon = wep?.IsMeleeWeapon() ?? false; + if (isMeleeWeapon && TweakDataManager.TryGetTweak(wep) == null) + isMeleeWeapon = false; + comp.PreDraw(); + return !isMeleeWeapon; + } +} diff --git a/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_DrawInvisibleShadow.cs b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_DrawInvisibleShadow.cs new file mode 100644 index 00000000..c0350b33 --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_DrawInvisibleShadow.cs @@ -0,0 +1,17 @@ +using HarmonyLib; +using JetBrains.Annotations; +using Verse; + +namespace AM.Patches; + +/// +/// Suppresses shadow draw which was added in 1.4 in the . +/// +[HarmonyPatch(typeof(PawnRenderer), nameof(PawnRenderer.DrawInvisibleShadow))] +[UsedImplicitly] +public class Patch_PawnRenderer_DrawInvisibleShadow +{ + public static bool Suppress = false; + + public static bool Prefix() => !Suppress; +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_LayingFacing.cs b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_LayingFacing.cs new file mode 100644 index 00000000..a6be1a15 --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_LayingFacing.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using HarmonyLib; +using Verse; + +namespace AM.Patches; + +/// +/// Only used to override corpse direction. +/// +[HarmonyPatch(typeof(PawnRenderer), nameof(PawnRenderer.LayingFacing))] +public static class Patch_PawnRenderer_LayingFacing +{ + public static readonly Dictionary OverrideRotations = new Dictionary(); + + public static void Tick() + { + if (GenTicks.TicksGame % (60 * 30) == 0) + OverrideRotations.RemoveAll(p => !p.Key.SpawnedOrAnyParentSpawned); + } + + static void Postfix(Pawn ___pawn, ref Rot4 __result) + { + if (!___pawn.Dead) + return; + + if (!OverrideRotations.TryGetValue(___pawn, out var found)) + return; + + __result = found; + } +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_RenderPawnAt.cs b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_RenderPawnAt.cs new file mode 100644 index 00000000..12c8d7f7 --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_RenderPawnAt.cs @@ -0,0 +1,34 @@ +using AM.Grappling; +using HarmonyLib; +using Verse; + +namespace AM.Patches; + +/// +/// Simply prevents the regular RenderPawnAt method from running while a pawn in being animated. +/// This disables the regular rendering whenever a pawn in being animated. +/// +[HarmonyPatch(typeof(PawnRenderer), nameof(PawnRenderer.RenderPawnAt))] +public static class Patch_PawnRenderer_RenderPawnAt +{ + public static bool AllowNext; + + [HarmonyPriority(Priority.First)] + public static bool Prefix(Pawn ___pawn) + { + var anim = PatchMaster.GetAnimator(___pawn); + if (anim != null && !AllowNext) + { + return false; + } + + var job = ___pawn.CurJob; + if (job?.def == AM_DefOf.AM_GrapplePawn) + { + JobDriver_GrapplePawn.DrawEnsnaringRope(___pawn, job); + } + + AllowNext = false; + return true; + } +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_RenderPawnInternal.cs b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_RenderPawnInternal.cs new file mode 100644 index 00000000..4efbe61c --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_PawnRenderer_RenderPawnInternal.cs @@ -0,0 +1,88 @@ +using HarmonyLib; +using Verse; + +namespace AM.Patches; + +/// +/// Overrides various parameters of the pawn rendering, specifically direction (north, east etc.) +/// and body angle. Driven by the active animation. +/// Also used to render severed heads. +/// +[HarmonyPatch(typeof(PawnRenderer), nameof(PawnRenderer.RenderPawnInternal))] +static class Patch_PawnRenderer_RenderPawnInternal +{ + public static bool AllowNext; + public static bool DoNotModify = false; + public static DrawMode NextDrawMode = DrawMode.Full; + public static Rot4 HeadRotation; // Only used when NextDrawMode is HeadOnly or HeadStandalone. + + public static float StandaloneHeadRotation; + + public enum DrawMode + { + Full, + BodyOnly, + HeadOnly, + HeadStandalone + } + + [HarmonyPriority(Priority.Last)] // As late as possible. We want to be the last to modify results. + [HarmonyAfter("com.yayo.yayoAni")] // Go away. + [HarmonyBefore("rimworld.Nals.FacialAnimation")] // Must go before facial animation otherwise the face gets fucky. + public static bool Prefix(Pawn ___pawn, ref Rot4 bodyFacing, ref float angle, ref PawnRenderFlags flags, ref bool renderBody) + { + // Do not affect portrait rendering: + if (flags.HasFlag(PawnRenderFlags.Portrait)) + return true; + + // Standalone head (i.e. dropped head on ground after animation) gets a custom method that does things slightly differently. + if (NextDrawMode == DrawMode.HeadStandalone) + return RenderStandaloneHeadMode(ref bodyFacing, ref flags, ref angle, ref renderBody); + + // Get the animator for this pawn. + var anim = PatchMaster.GetAnimator(___pawn); + if (anim != null) + { + if (!DoNotModify) + { + var part = NextDrawMode == DrawMode.HeadOnly ? anim.GetPawnHead(___pawn) : anim.GetPawnBody(___pawn); + var snapshot = anim.GetSnapshot(part); + angle = snapshot.GetWorldRotation(); + + bodyFacing = NextDrawMode == DrawMode.HeadOnly ? HeadRotation : snapshot.GetWorldDirection(); + + switch (NextDrawMode) + { + case DrawMode.BodyOnly: + // Render head stump, do not render head gear. + flags |= PawnRenderFlags.HeadStump; + flags &= ~PawnRenderFlags.Headgear; + break; + + case DrawMode.HeadOnly: + // Do not render body. + renderBody = false; + break; + } + } + + if (!AllowNext) + return false; + } + + AllowNext = false; + return true; + } + + private static bool RenderStandaloneHeadMode(ref Rot4 bodyFacing, ref PawnRenderFlags flags, ref float angle, ref bool renderBody) + { + // Add headgear, remove head stump. + flags |= PawnRenderFlags.Headgear; + flags &= ~PawnRenderFlags.HeadStump; + + angle = StandaloneHeadRotation; + bodyFacing = HeadRotation; + renderBody = false; + return true; + } +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/Patches/Patch_PawnUtility_GetPosture.cs b/Source/1.4/ThingGenerator/Patches/Patch_PawnUtility_GetPosture.cs new file mode 100644 index 00000000..db570786 --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_PawnUtility_GetPosture.cs @@ -0,0 +1,23 @@ +using HarmonyLib; +using RimWorld; +using Verse; + +namespace AM.Patches; + +/// +/// Makes it so that pawns that are being animated stand up, ignoring regular posture calculation. +/// +[HarmonyPatch(typeof(PawnUtility), nameof(PawnUtility.GetPosture))] +public static class Patch_PawnUtility_GetPosture +{ + [HarmonyPriority(Priority.First)] + public static bool Prefix(Pawn p, ref PawnPosture __result) + { + var anim = PatchMaster.GetAnimator(p); + if (anim == null) + return true; + + __result = PawnPosture.Standing; + return false; + } +} \ No newline at end of file diff --git a/Source/1.4/ThingGenerator/Patches/Patch_PawnUtility_IsInvisible.cs b/Source/1.4/ThingGenerator/Patches/Patch_PawnUtility_IsInvisible.cs new file mode 100644 index 00000000..d7a3f1ba --- /dev/null +++ b/Source/1.4/ThingGenerator/Patches/Patch_PawnUtility_IsInvisible.cs @@ -0,0 +1,34 @@ +using HarmonyLib; +using RimWorld; +using Verse; + +namespace AM.Patches; + +/// +/// Make pawns be considered invisible during animations. +/// This should prevent them from being targeted by enemies. +/// This is a common feature in games where executions are possible - the player is invincible during the execution animation. +/// For example, see Doom 2016 or any of the FromSoftware souls-likes. +/// However, making pawns invincible during animations would be very overpowered and broken, so making them untargettable instead is a nice +/// compromise. +/// +[HarmonyPatch(typeof(PawnUtility), nameof(PawnUtility.IsInvisible))] +public static class Patch_PawnUtility_IsInvisible +{ + public static bool IsRendering; + + [HarmonyPriority(Priority.First)] + public static bool Prefix(Pawn pawn, ref bool __result) + { + if (!Core.Settings.AllowInvisiblePawns) + return true; + + var anim = PatchMaster.GetAnimator(pawn); + if (anim != null && !IsRendering) + { + __result = true; + return false; + } + return true; + } +} \ No newline at end of file diff --git a/Source/AnimationMod/Patches/Patch_Pawn_DrawGUIOverlay.cs b/Source/1.4/ThingGenerator/Patches/Patch_Pawn_DrawGUIOverlay.cs similarity index 100% rename from Source/AnimationMod/Patches/Patch_Pawn_DrawGUIOverlay.cs rename to Source/1.4/ThingGenerator/Patches/Patch_Pawn_DrawGUIOverlay.cs diff --git a/Source/AnimationMod/Patches/Patch_Pawn_DrawTracker_Notify_MeleeAttackOn.cs b/Source/1.4/ThingGenerator/Patches/Patch_Pawn_DrawTracker_Notify_MeleeAttackOn.cs similarity index 100% rename from Source/AnimationMod/Patches/Patch_Pawn_DrawTracker_Notify_MeleeAttackOn.cs rename to Source/1.4/ThingGenerator/Patches/Patch_Pawn_DrawTracker_Notify_MeleeAttackOn.cs diff --git a/Source/AnimationMod/Patches/Patch_VBE_Utils_DrawBG.cs b/Source/1.4/ThingGenerator/Patches/Patch_VBE_Utils_DrawBG.cs similarity index 100% rename from Source/AnimationMod/Patches/Patch_VBE_Utils_DrawBG.cs rename to Source/1.4/ThingGenerator/Patches/Patch_VBE_Utils_DrawBG.cs diff --git a/Source/AnimationMod/Patches/Patch_Verb_MeleeAttack_ApplyMeleeDamageToTarget.cs b/Source/1.4/ThingGenerator/Patches/Patch_Verb_MeleeAttack_ApplyMeleeDamageToTarget.cs similarity index 100% rename from Source/AnimationMod/Patches/Patch_Verb_MeleeAttack_ApplyMeleeDamageToTarget.cs rename to Source/1.4/ThingGenerator/Patches/Patch_Verb_MeleeAttack_ApplyMeleeDamageToTarget.cs diff --git a/Source/AnimationMod/Patches/Patch_Verb_MeleeAttack_TryCastShot.cs b/Source/1.4/ThingGenerator/Patches/Patch_Verb_MeleeAttack_TryCastShot.cs similarity index 100% rename from Source/AnimationMod/Patches/Patch_Verb_MeleeAttack_TryCastShot.cs rename to Source/1.4/ThingGenerator/Patches/Patch_Verb_MeleeAttack_TryCastShot.cs diff --git a/Source/AnimationMod/PawnData/AutoOption.cs b/Source/1.4/ThingGenerator/PawnData/AutoOption.cs similarity index 100% rename from Source/AnimationMod/PawnData/AutoOption.cs rename to Source/1.4/ThingGenerator/PawnData/AutoOption.cs diff --git a/Source/AnimationMod/PawnData/PawnMeleeData.cs b/Source/1.4/ThingGenerator/PawnData/PawnMeleeData.cs similarity index 100% rename from Source/AnimationMod/PawnData/PawnMeleeData.cs rename to Source/1.4/ThingGenerator/PawnData/PawnMeleeData.cs diff --git a/Source/AnimationMod/Preview/PreviewRenderer.cs b/Source/1.4/ThingGenerator/Preview/PreviewRenderer.cs similarity index 100% rename from Source/AnimationMod/Preview/PreviewRenderer.cs rename to Source/1.4/ThingGenerator/Preview/PreviewRenderer.cs diff --git a/Source/1.4/ThingGenerator/Processing/MapPawnProcessor.cs b/Source/1.4/ThingGenerator/Processing/MapPawnProcessor.cs new file mode 100644 index 00000000..ec7f8428 --- /dev/null +++ b/Source/1.4/ThingGenerator/Processing/MapPawnProcessor.cs @@ -0,0 +1,625 @@ +using AM.Controller; +using AM.Controller.Requests; +using AM.Grappling; +using AM.Outcome; +using AM.Reqs; +using JetBrains.Annotations; +using RimWorld; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Unity.Jobs.LowLevel.Unsafe; +using UnityEngine; +using Verse; +using Verse.AI; + +namespace AM.Processing; + +public class MapPawnProcessor : IDisposable +{ + [TweakValue("Melee Animation", 0f, 5f)] + [UsedImplicitly] + public static float PawnPerThreadThreshold = 0.2f; + [TweakValue("Melee Animation")] + [UsedImplicitly] + public static bool LogPerformanceToDesktop; + + private static readonly Dictionary taskArrayPool = new Dictionary(); + private static StreamWriter debugWriter; + + private static Task[] GetTaskArray(int count) + { + if (taskArrayPool.TryGetValue(count, out var found)) + { + return found; + } + + found = new Task[count]; + taskArrayPool.Add(count, found); + return found; + } + + public readonly DiagnosticInfo Diagnostics = new DiagnosticInfo(); + + private readonly List attackers = new List(128); + private readonly List slices = new List(32); + private readonly List targetsPool = new List(); + private readonly ConcurrentQueue<(AnimationStartParameters args, IntVec3? lassoToHere, ulong occupiedMask)> toStart = new ConcurrentQueue<(AnimationStartParameters, IntVec3?, ulong)>(); + private readonly ActionController generalController = new ActionController(); + private readonly Map map; + private int targetsIndex; + + public MapPawnProcessor(Map map) + { + this.map = map; + } + + private TaskData GetTaskData() + { + if (targetsIndex == targetsPool.Count) + { + var created = new TaskData(targetsIndex); + targetsIndex++; + targetsPool.Add(created); + return created; + } + + var found = targetsPool[targetsIndex]; + targetsIndex++; + return found; + } + + public void Tick() + { + if (GenTicks.TicksAbs % Core.Settings.ScanTickInterval != 0) + return; + + if (LogPerformanceToDesktop && debugWriter == null) + { + string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "AnimationModPerformanceReport.csv"); + debugWriter = new StreamWriter(path, true); + } + else + { + Dispose(); + } + + var timer = new RefTimer(); + + toStart.Clear(); + + // Get all pawns that need auto processing. + CompileListOfAttackers(); + + // Make slices. + slices.Clear(); + slices.AddRange(MakeProcessingSlices(attackers.Count)); + + // Make tasks. + var timer2 = new RefTimer(); + targetsIndex = 0; + if (slices.Count == 1) + { + // Run sync. + var taskData = GetTaskData(); + taskData.ScheduleTick = RefTimer.GetTickNow(); + ProcessSlice(attackers, new IntRange(0, attackers.Count - 1), map, taskData, toStart, Diagnostics); + } + else if (slices.Count > 1) + { + // Run async. + var arr = GetTaskArray(slices.Count); + + // Generate tasks. + for (int i = 0; i < slices.Count; i++) + { + int j = i; + var taskData = GetTaskData(); + taskData.ScheduleTick = RefTimer.GetTickNow(); + var task = Task.Run(() => ProcessSlice(attackers, slices[j], map, taskData, toStart, Diagnostics)); + arr[i] = task; + } + + // Wait for them to complete. + Task.WaitAll(arr); + + // Clean array. + for (int i = 0; i < arr.Length; i++) + arr[i] = null; + } + + // Debug output, optional. + debugWriter?.WriteLine($"{attackers.Count},{slices.Count},{timer2.GetElapsedMilliseconds().ToString(CultureInfo.InvariantCulture)},{PawnPerThreadThreshold}"); + + // Start all pending animations. + // Must be done here, in main thread, because otherwise + // sweep meshes created will crash unity. + while (toStart.TryDequeue(out var pair)) + { + var args = pair.args; + + // Generate outcome here to avoid threading errors: + var outcome = OutcomeUtility.GenerateRandomOutcome(args.MainPawn, args.SecondPawn, true); + + if (pair.lassoToHere == null) + { + // Instant execution: + + // Instant trigger. + var finalArgs = args with + { + ExecutionOutcome = outcome, + + // Do animation promotion: + Animation = args.Animation.TryGetPromotionDef(new AnimDef.PromotionInput + { + Attacker = args.MainPawn, + Victim = args.SecondPawn, + FlipX = args.FlipX, + OccupiedMask = pair.occupiedMask, + OriginalAnim = args.Animation, + Outcome = outcome, + ReqInput = new ReqInput(args.MainPawn.GetFirstMeleeWeapon()?.def) + }) ?? args.Animation + }; + + // Force failure animation for failure outcome. + if (finalArgs.ExecutionOutcome == ExecutionOutcome.Failure) + { + finalArgs.Animation = AM_DefOf.AM_Execution_Fail; + } + + bool worked = finalArgs.TryTrigger(); + + // Set execution cooldown. + if (worked) + args.MainPawn.GetMeleeData().TimeSinceExecuted = 0; + } + else if (pair.args.Animation != null) + { + // Lasso + execution: + var finalArgs = args with + { + ExecutionOutcome = outcome, + + // Do animation promotion: + Animation = args.Animation.TryGetPromotionDef(new AnimDef.PromotionInput + { + Attacker = args.MainPawn, + Victim = args.SecondPawn, + FlipX = args.FlipX, + OccupiedMask = pair.occupiedMask, + OriginalAnim = args.Animation, + Outcome = outcome, + ReqInput = new ReqInput(args.MainPawn.GetFirstMeleeWeapon()?.def) + }) ?? args.Animation + }; + + // Force failure animation for failure outcome. + if (finalArgs.ExecutionOutcome == ExecutionOutcome.Failure) + { + finalArgs.Animation = AM_DefOf.AM_Execution_Fail; + } + + // Lasso. + if (!JobDriver_GrapplePawn.GiveJob(args.MainPawn, args.SecondPawn, pair.lassoToHere.Value, false, finalArgs)) + { + Core.Error($"Failed to give grapple job to {args.MainPawn}."); + return; + } + + // Set lasso cooldown. Execution cooldown is set buy the job driver. + args.MainPawn.GetMeleeData().TimeSinceGrappled = 0; + } + else + { + // Just lasso: + // Lasso. + if (!JobDriver_GrapplePawn.GiveJob(args.MainPawn, args.SecondPawn, pair.lassoToHere.Value)) + { + Core.Error($"Failed to give grapple job to {args.MainPawn}."); + return; + } + + // Set lasso cooldown. Execution cooldown is set by the job driver. + args.MainPawn.GetMeleeData().TimeSinceGrappled = 0; + } + } + + Diagnostics.ThreadsUsed = slices.Count; + timer2.GetElapsedMilliseconds(out Diagnostics.ProcessTimeMS); + timer.GetElapsedMilliseconds(out Diagnostics.TotalTimeMS); + } + + public void Dispose() + { + if (debugWriter == null) + return; + + debugWriter.Dispose(); + debugWriter = null; + } + + private static void GetPotentialTargets(List output, Pawn attacker, AttackTargetsCache cache, Map map) + { + Thing thing = attacker; + output.Clear(); + Faction faction = thing.Faction; + if (faction != null) + { + foreach (IAttackTarget attackTarget in cache.TargetsHostileToFaction(faction)) + { + if (thing.HostileTo(attackTarget.Thing)) + { + output.Add(attackTarget); + } + } + } + foreach (Pawn pawn in cache.pawnsInAggroMentalState) + { + if (thing.HostileTo(pawn)) + { + output.Add(pawn); + } + } + foreach (Pawn pawn2 in cache.factionlessHumanlikes) + { + if (thing.HostileTo(pawn2)) + { + output.Add(pawn2); + } + } + if (PrisonBreakUtility.IsPrisonBreaking(attacker)) + { + Faction hostFaction = attacker.guest.HostFaction; + List list = map.mapPawns.SpawnedPawnsInFaction(hostFaction); + foreach (Pawn pawn in list) + { + if (thing.HostileTo(pawn)) + { + output.Add(pawn); + } + } + } + if (ModsConfig.IdeologyActive && SlaveRebellionUtility.IsRebelling(attacker)) + { + Faction faction2 = attacker.Faction; + List list2 = map.mapPawns.SpawnedPawnsInFaction(faction2); + for (int j = 0; j < list2.Count; j++) + { + if (thing.HostileTo(list2[j])) + { + output.Add(list2[j]); + } + } + } + } + + private static bool TargetFilter(IAttackTarget target) + { + if (target.Thing is not Pawn targetPawn) + return false; + + // Target cannot be dead or downed, or being targeted by a lasso. + if (targetPawn.Dead || targetPawn.Downed || targetPawn.IsInAnimation() || GrabUtility.IsBeingTargetedForGrapple(targetPawn)) + return false; + + return true; + } + + private static void ProcessSlice(List attackers, IntRange slice, Map map, TaskData taskData, ConcurrentQueue<(AnimationStartParameters, IntVec3?, ulong)> startArgs, DiagnosticInfo diag) + { + diag.StartupTimesMS[taskData.Index] = RefTimer.ToMilliseconds(taskData.ScheduleTick, RefTimer.GetTickNow()); + diag.TargetFindTimesMS[taskData.Index] = 0; + diag.ReportTimesMS[taskData.Index] = 0; + + try + { + for (int i = slice.min; i <= slice.max; i++) + { + var data = attackers[i]; + var pawn = data.Pawn; + + // Make a list of enemies. + var targetsTimer = new RefTimer(); + GetPotentialTargets(taskData.Targets, pawn, map.attackTargetsCache, map); + taskData.Targets.RemoveAll(t => !TargetFilter(t)); + diag.TargetFindTimesMS[taskData.Index] += targetsTimer.GetElapsedMilliseconds(); + + if (taskData.Targets.Count == 0) + continue; + + // Make space mask around attacker. + ulong occupiedMask = SpaceChecker.MakeOccupiedMask(map, pawn.Position, out uint smallMask); + bool westFree = !occupiedMask.GetBit(-1, 0); + bool eastFree = !occupiedMask.GetBit(1, 0); + + // Do instant executions: + PotentialAnimation toPerform = default; + var reportTimer = new RefTimer(); + if (data.CanExecute && (eastFree || westFree)) + { + var reports = taskData.Controller.GetExecutionReport(new ExecutionAttemptRequest + { + CanUseLasso = data.CanGrapple, + CanWalk = false, + EastCell = eastFree, + WestCell = westFree, + Executioner = pawn, + NoErrorMessages = true, + OccupiedMask = occupiedMask, + SmallOccupiedMask = smallMask, + TrustLassoUsability = true, + LassoRange = data.LassoRange, + Targets = taskData.Targets.Select(t => (Pawn)t), + AttackerMeleeLevel = data.PawnMeleeLevel + }); + + foreach (var report in reports) + { + if (!report.CanExecute) + continue; + + if (report.IsFinal) + throw new Exception("Should not be getting final report here!"); + + if (report.IsWalking) + throw new Exception("Walking was disallowed but still showed up!"); + + var selected = report.PossibleExecutions.RandomElementByWeightWithFallback(p => p.Animation.AnimDef.Probability); + if (!selected.IsValid) + { + Core.Warn("Failed to get any valid animation even through they were presented in the report."); + continue; + } + + // Populate the action to be performed: + toPerform = new PotentialAnimation + { + Anim = selected.Animation.AnimDef, + FlipX = selected.Animation.FlipX, + Target = report.Target, + LassoToHere = selected.LassoToHere, + OccupiedMask = occupiedMask + }; + break; + } + + foreach (var report in reports) + report.Dispose(); + } + diag.ReportTimesMS[taskData.Index] += reportTimer.GetElapsedMilliseconds(); + + // Lasso only without execute: + if (!toPerform.IsValid && data.CanGrapple) + { + foreach (var target in taskData.Targets.Select(t => (Pawn) t)) + { + var report = taskData.Controller.GetGrappleReport(new GrappleAttemptRequest + { + Grappler = pawn, + DoNotCheckCooldown = true, + DoNotCheckLasso = true, + GrappleSpotPickingBehaviour = GrappleSpotPickingBehaviour.PreferAdjacent, + LassoRange = data.LassoRange, + NoErrorMessages = true, + OccupiedMask = smallMask, + TrustLassoUsability = true, + Target = target + }); + + if (!report.CanGrapple) + continue; + + toPerform = new PotentialAnimation + { + Anim = null, + FlipX = false, + LassoToHere = report.DestinationCell, + Target = target, + OccupiedMask = occupiedMask + }; + break; + } + + } + + if (toPerform.IsValid) + { + // Start instant execution animation or lasso: + startArgs.Enqueue((new AnimationStartParameters(toPerform.Anim, pawn, toPerform.Target) + { + FlipX = toPerform.FlipX + }, toPerform.LassoToHere, toPerform.OccupiedMask)); + } + } + } + catch (Exception e) + { + Core.Error("Processing thread error:", e); + } + } + + private static void GetSecondsMTB(Pawn pawn, out float execute, out float lasso) + { + if (pawn.IsColonist || pawn.IsSlaveOfColony) + { + execute = Core.Settings.ExecuteAttemptMTBSeconds; + lasso = Core.Settings.GrappleAttemptMTBSeconds; + } + else + { + execute = Core.Settings.ExecuteAttemptMTBSecondsEnemy; + lasso = Core.Settings.GrappleAttemptMTBSecondsEnemy; + } + } + + /// + /// Puts together a list of pawns that have either a melee weapon or a lasso, or both, + /// and have auto-lasso and/or execute enabled. + /// + private void CompileListOfAttackers() + { + var timer = new RefTimer(); + + bool FormalGrappleCheck(Pawn pawn) + { + return generalController.GetGrappleReport(new GrappleAttemptRequest + { + Grappler = pawn, + DoNotCheckCooldown = true, + DoNotCheckLasso = true, + GrappleSpotPickingBehaviour = GrappleSpotPickingBehaviour.Closest, + NoErrorMessages = true + }).CanGrapple; + } + + attackers.Clear(); + foreach (var pawn in map.mapPawns.AllPawnsSpawned) + { + // Not dead or downed. + if (pawn.Dead || pawn.Downed) + continue; + + // Not animal, can ever use tools. + if (pawn.RaceProps.Animal || !pawn.def.race.ToolUser) + continue; + + // Not already in animation or being grappled. + if (pawn.IsInAnimation() || GrabUtility.IsBeingTargetedForGrapple(pawn)) + continue; + + // If fire at will is disabled, don't process them. They should not be attacking or lassoing. + if (pawn.drafter?.FireAtWill == false) + continue; + + // Should this pawn even be scanned? + GetSecondsMTB(pawn, out float execMTB, out float lassoMTB); + bool execRandom = Rand.MTBEventOccurs(execMTB, 60f, Core.Settings.ScanTickInterval); + bool lassoRandom = Rand.MTBEventOccurs(lassoMTB, 60f, Core.Settings.ScanTickInterval); + + if (!execRandom && !lassoRandom) + continue; + + var mData = pawn.GetMeleeData(); + var weapon = pawn.GetFirstMeleeWeapon(); + var lasso = pawn.TryGetLasso(); + + // Melee skill has to be extracted here, on the main thread, + // because concurrent access throws exceptions. + var data = new AttackerData + { + Pawn = pawn, + PawnMeleeLevel = pawn.skills?.GetSkill(SkillDefOf.Melee)?.Level ?? 0, + MeleeWeapon = weapon, + Lasso = lasso, + CanExecute = Core.Settings.EnableExecutions && weapon != null && mData.ResolvedAutoExecute && mData.IsExecutionOffCooldown(), + CanGrapple = lasso != null && mData.ResolvedAutoGrapple && mData.IsGrappleOffCooldown() && FormalGrappleCheck(pawn), + LassoRange = lasso != null ? pawn.GetStatValue(AM_DefOf.AM_GrappleRadius) : 0 + }; + + if (data is { CanGrapple: false, CanExecute: false }) + continue; + + attackers.Add(data); + } + + Diagnostics.PawnCount = attackers.Count; + timer.GetElapsedMilliseconds(out Diagnostics.CompileTimeMS); + } + + public static int GetWorkerThreadCount() => Mathf.Max(1, JobsUtility.JobWorkerCount + 1); + + public static IEnumerable MakeProcessingSlices(int todo) + { + if (todo <= 0) + yield break; + + // Max threads allowed, from settings: + int maxThreads = Core.Settings.MaxProcessingThreads <= 0 ? GetWorkerThreadCount() : Core.Settings.MaxProcessingThreads; + + // Number of threads scales up to maximum allowed. Do not allow more than 1 thread per pawn. + int threads = Mathf.Min(todo, maxThreads); + + // Thread per pawn threshold calculation: + float basicPer = (float)todo / maxThreads; + if (basicPer < PawnPerThreadThreshold) + threads = 1; + + if (threads == 1) + { + yield return new IntRange(0, todo - 1); + yield break; + } + + // Do slicing: + int per = todo / threads; + int extraCount = todo % threads; + int start = 0; + for (int i = 0; i < threads; i++) + { + int count = per; + if (i < extraCount) + count++; + + yield return new IntRange(start, start + count - 1); + start += count; + } + + if (start != todo) + throw new Exception("Failed to slice correctly."); + } + + #region Data structs + private readonly struct AttackerData + { + public required Pawn Pawn { get; init; } + public required int PawnMeleeLevel { get; init; } + public required Thing MeleeWeapon { get; init; } + public required Thing Lasso { get; init; } + public required bool CanGrapple { get; init; } + public required bool CanExecute { get; init; } + public required float LassoRange { get; init; } + } + + private readonly struct PotentialAnimation + { + public bool IsValid => Anim != null || LassoToHere != null; + + public required AnimDef Anim { get; init; } + public required bool FlipX { get; init; } + public required Pawn Target { get; init; } + public required ulong OccupiedMask { get; init; } + public IntVec3? LassoToHere { get; init; } + } + + private class TaskData + { + public readonly List Targets = new List(64); + public readonly ActionController Controller = new ActionController(); + public readonly int Index; + public long ScheduleTick; + + public TaskData(int index) + { + Index = index; + } + } + + public class DiagnosticInfo + { + public readonly double[] StartupTimesMS = new double[64]; + public readonly double[] TargetFindTimesMS = new double[64]; + public readonly double[] ReportTimesMS = new double[64]; + public int ThreadsUsed; + public double CompileTimeMS; + public double ProcessTimeMS; + public double TotalTimeMS; + public int PawnCount; + } + #endregion +} diff --git a/Source/AnimationMod/Processing/RefTimer.cs b/Source/1.4/ThingGenerator/Processing/RefTimer.cs similarity index 100% rename from Source/AnimationMod/Processing/RefTimer.cs rename to Source/1.4/ThingGenerator/Processing/RefTimer.cs diff --git a/Source/AnimationMod/PromotionWorkers/MustHaveHeadPromotionWorker.cs b/Source/1.4/ThingGenerator/PromotionWorkers/MustHaveHeadPromotionWorker.cs similarity index 100% rename from Source/AnimationMod/PromotionWorkers/MustHaveHeadPromotionWorker.cs rename to Source/1.4/ThingGenerator/PromotionWorkers/MustHaveHeadPromotionWorker.cs diff --git a/Source/AnimationMod/RendererWorkers/AnimationRendererWorker.cs b/Source/1.4/ThingGenerator/RendererWorkers/AnimationRendererWorker.cs similarity index 100% rename from Source/AnimationMod/RendererWorkers/AnimationRendererWorker.cs rename to Source/1.4/ThingGenerator/RendererWorkers/AnimationRendererWorker.cs diff --git a/Source/AnimationMod/RendererWorkers/GilgameshRendererWorker.cs b/Source/1.4/ThingGenerator/RendererWorkers/GilgameshRendererWorker.cs similarity index 100% rename from Source/AnimationMod/RendererWorkers/GilgameshRendererWorker.cs rename to Source/1.4/ThingGenerator/RendererWorkers/GilgameshRendererWorker.cs diff --git a/Source/AnimationMod/Reqs/AndReq.cs b/Source/1.4/ThingGenerator/Reqs/AndReq.cs similarity index 100% rename from Source/AnimationMod/Reqs/AndReq.cs rename to Source/1.4/ThingGenerator/Reqs/AndReq.cs diff --git a/Source/AnimationMod/Reqs/AnyCategory.cs b/Source/1.4/ThingGenerator/Reqs/AnyCategory.cs similarity index 100% rename from Source/AnimationMod/Reqs/AnyCategory.cs rename to Source/1.4/ThingGenerator/Reqs/AnyCategory.cs diff --git a/Source/AnimationMod/Reqs/AnySize.cs b/Source/1.4/ThingGenerator/Reqs/AnySize.cs similarity index 100% rename from Source/AnimationMod/Reqs/AnySize.cs rename to Source/1.4/ThingGenerator/Reqs/AnySize.cs diff --git a/Source/AnimationMod/Reqs/AnyType.cs b/Source/1.4/ThingGenerator/Reqs/AnyType.cs similarity index 100% rename from Source/AnimationMod/Reqs/AnyType.cs rename to Source/1.4/ThingGenerator/Reqs/AnyType.cs diff --git a/Source/AnimationMod/Reqs/False.cs b/Source/1.4/ThingGenerator/Reqs/False.cs similarity index 100% rename from Source/AnimationMod/Reqs/False.cs rename to Source/1.4/ThingGenerator/Reqs/False.cs diff --git a/Source/AnimationMod/Reqs/OnlyType.cs b/Source/1.4/ThingGenerator/Reqs/OnlyType.cs similarity index 100% rename from Source/AnimationMod/Reqs/OnlyType.cs rename to Source/1.4/ThingGenerator/Reqs/OnlyType.cs diff --git a/Source/AnimationMod/Reqs/OrReq.cs b/Source/1.4/ThingGenerator/Reqs/OrReq.cs similarity index 100% rename from Source/AnimationMod/Reqs/OrReq.cs rename to Source/1.4/ThingGenerator/Reqs/OrReq.cs diff --git a/Source/AnimationMod/Reqs/Req.cs b/Source/1.4/ThingGenerator/Reqs/Req.cs similarity index 100% rename from Source/AnimationMod/Reqs/Req.cs rename to Source/1.4/ThingGenerator/Reqs/Req.cs diff --git a/Source/AnimationMod/Reqs/ReqInput.cs b/Source/1.4/ThingGenerator/Reqs/ReqInput.cs similarity index 100% rename from Source/AnimationMod/Reqs/ReqInput.cs rename to Source/1.4/ThingGenerator/Reqs/ReqInput.cs diff --git a/Source/AnimationMod/Reqs/SpecificWeapon.cs b/Source/1.4/ThingGenerator/Reqs/SpecificWeapon.cs similarity index 100% rename from Source/AnimationMod/Reqs/SpecificWeapon.cs rename to Source/1.4/ThingGenerator/Reqs/SpecificWeapon.cs diff --git a/Source/AnimationMod/Reqs/True.cs b/Source/1.4/ThingGenerator/Reqs/True.cs similarity index 100% rename from Source/AnimationMod/Reqs/True.cs rename to Source/1.4/ThingGenerator/Reqs/True.cs diff --git a/Source/AnimationMod/SpaceChecker.cs b/Source/1.4/ThingGenerator/SpaceChecker.cs similarity index 100% rename from Source/AnimationMod/SpaceChecker.cs rename to Source/1.4/ThingGenerator/SpaceChecker.cs diff --git a/Source/AnimationMod/Stats/StatWorker_DuelAbility.cs b/Source/1.4/ThingGenerator/Stats/StatWorker_DuelAbility.cs similarity index 100% rename from Source/AnimationMod/Stats/StatWorker_DuelAbility.cs rename to Source/1.4/ThingGenerator/Stats/StatWorker_DuelAbility.cs diff --git a/Source/AnimationMod/Stats/StatWorker_ExecCooldown.cs b/Source/1.4/ThingGenerator/Stats/StatWorker_ExecCooldown.cs similarity index 100% rename from Source/AnimationMod/Stats/StatWorker_ExecCooldown.cs rename to Source/1.4/ThingGenerator/Stats/StatWorker_ExecCooldown.cs diff --git a/Source/AnimationMod/Stats/StatWorker_Lethality.cs b/Source/1.4/ThingGenerator/Stats/StatWorker_Lethality.cs similarity index 100% rename from Source/AnimationMod/Stats/StatWorker_Lethality.cs rename to Source/1.4/ThingGenerator/Stats/StatWorker_Lethality.cs diff --git a/Source/AnimationMod/Sweep/BasicSweepProvider.cs b/Source/1.4/ThingGenerator/Sweep/BasicSweepProvider.cs similarity index 100% rename from Source/AnimationMod/Sweep/BasicSweepProvider.cs rename to Source/1.4/ThingGenerator/Sweep/BasicSweepProvider.cs diff --git a/Source/AnimationMod/Sweep/ISweepProvider.cs b/Source/1.4/ThingGenerator/Sweep/ISweepProvider.cs similarity index 100% rename from Source/AnimationMod/Sweep/ISweepProvider.cs rename to Source/1.4/ThingGenerator/Sweep/ISweepProvider.cs diff --git a/Source/AnimationMod/Sweep/PartWithSweep.cs b/Source/1.4/ThingGenerator/Sweep/PartWithSweep.cs similarity index 100% rename from Source/AnimationMod/Sweep/PartWithSweep.cs rename to Source/1.4/ThingGenerator/Sweep/PartWithSweep.cs diff --git a/Source/AnimationMod/Sweep/SweepMesh.cs b/Source/1.4/ThingGenerator/Sweep/SweepMesh.cs similarity index 100% rename from Source/AnimationMod/Sweep/SweepMesh.cs rename to Source/1.4/ThingGenerator/Sweep/SweepMesh.cs diff --git a/Source/AnimationMod/Tweaks/ColorConverter.cs b/Source/1.4/ThingGenerator/Tweaks/ColorConverter.cs similarity index 100% rename from Source/AnimationMod/Tweaks/ColorConverter.cs rename to Source/1.4/ThingGenerator/Tweaks/ColorConverter.cs diff --git a/Source/AnimationMod/Tweaks/HandsMode.cs b/Source/1.4/ThingGenerator/Tweaks/HandsMode.cs similarity index 100% rename from Source/AnimationMod/Tweaks/HandsMode.cs rename to Source/1.4/ThingGenerator/Tweaks/HandsMode.cs diff --git a/Source/1.4/ThingGenerator/Tweaks/ItemTweakData.cs b/Source/1.4/ThingGenerator/Tweaks/ItemTweakData.cs new file mode 100644 index 00000000..20151d6c --- /dev/null +++ b/Source/1.4/ThingGenerator/Tweaks/ItemTweakData.cs @@ -0,0 +1,350 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using AM.Retexture; +using AM.Idle; +using AM.Reqs; +using AM.Sweep; +using Newtonsoft.Json; +using UnityEngine; +using Verse; + +namespace AM.Tweaks +{ + public class ItemTweakData + { + public static string MakeModID(ModContentPack mcp) + { + if (mcp == null) + return null; + + string s = mcp.PackageId; + + foreach (char c in Path.GetInvalidFileNameChars()) + s = s.Replace(c, '_'); + + s = s.Replace("_copy", ""); + s = s.Replace("_Copy", ""); + s = s.Replace("_localcopy", ""); + s = s.Replace("_LocalCopy", ""); + s = s.Replace("_local", ""); + s = s.Replace("_Local", ""); + s = s.Replace("_steam", ""); + s = s.Replace("_Steam", ""); + + return s; + } + + public static string MakeFileName(ThingDef weaponDef, ModContentPack weaponTextureMod) + => $"{weaponDef.defName}_{MakeModID(weaponTextureMod)}.json"; + + public static ItemTweakData LoadFrom(string filePath) + { + return JsonConvert.DeserializeObject(File.ReadAllText(filePath), new JsonSerializerSettings + { + Converters = new List() + { + new ColorConverter() + } + }); + } + + [JsonIgnore] + public string FileName => $"{ItemDefName}_{TextureModID}.json"; + [JsonIgnore] + public float BladeLength => Mathf.Abs(BladeStart - BladeEnd); + [JsonIgnore] + public float MaxDistanceFromHand => Mathf.Max(Mathf.Abs(BladeEnd), Mathf.Abs(BladeEnd)); + + public string TextureModID; + public string ItemDefName; + public string ItemType; + public string ItemTypeNamespace; + public float OffX, OffY; + public float Rotation; + [System.ComponentModel.DefaultValue(1f)] + public float ScaleX = 1; + [System.ComponentModel.DefaultValue(1f)] + public float ScaleY = 1; + public bool FlipX, FlipY; + public bool UseDefaultTransparentMaterial; + public HandsMode HandsMode = HandsMode.Default; + public float BladeStart; + [System.ComponentModel.DefaultValue(0.5f)] + public float BladeEnd = 0.5f; + public MeleeWeaponType MeleeWeaponType = MeleeWeaponType.Long_Stab | MeleeWeaponType.Long_Sharp; + [System.ComponentModel.DefaultValue("")] + public string CustomRendererClass; + public string SweepProviderClass; + public Color? TrailTint = null; + + private ThingDef cachedDef; + private Texture2D cachedTex; + private ModContentPack cachedMod; + private ISweepProvider cachedSweepProvider; + private AnimDef idleAnimCached; + private AnimDef moveHorAnimCached; + private AnimDef moveVertAnimCached; + private AnimDef[] flavourAnimsCached; + private AnimDef[][] attackAnimationsCached; + + public ItemTweakData() { } + + public ItemTweakData(ThingDef def, ModContentPack textureMod) + { + if (def == null) + return; + + cachedDef = def; + + ItemDefName = def.defName; + ItemType = def.GetType().Name; + ItemTypeNamespace = def.GetType().Namespace; + + var report = RetextureUtility.GetTextureReport(def); + if (report.HasError) + throw new Exception($"Retexture utility had error: {report.ErrorMessage}"); + var mod = textureMod ?? report.ActiveRetextureMod; + + TextureModID = MakeModID(mod); + + Rotation = 0f; + ScaleX = def.graphic.drawSize.x; + ScaleY = def.graphic.drawSize.y; + HandsMode = HandsMode.Default; + } + + public (WeaponSize size, WeaponCat category) GetCategory() => IdleClassifier.Classify(this); + + public AnimDef GetIdleAnimation() + { + if (idleAnimCached != null) + return idleAnimCached; + + var reqArgs = new ReqInput(this); + idleAnimCached = AnimDef.GetDefsOfType(AnimType.Idle).FirstOrDefault(d => d.idleType == IdleType.Idle && d.Allows(reqArgs)); + + return idleAnimCached; + } + + public IReadOnlyList GetFlavourAnimations() + { + if (flavourAnimsCached != null) + return flavourAnimsCached; + + var reqArgs = new ReqInput(this); + flavourAnimsCached = AnimDef.GetDefsOfType(AnimType.Idle).Where(d => d.idleType == IdleType.Flavour && d.Allows(reqArgs)).ToArray(); + + return flavourAnimsCached; + } + + public AnimDef GetMoveHorizontalAnimation() + { + if (moveHorAnimCached != null) + return moveHorAnimCached; + + var reqArgs = new ReqInput(this); + moveHorAnimCached = AnimDef.GetDefsOfType(AnimType.Idle).FirstOrDefault(d => d.idleType == IdleType.MoveHorizontal && d.Allows(reqArgs)); + + return moveHorAnimCached; + } + + public AnimDef GetMoveVerticalAnimation() + { + if (moveVertAnimCached != null) + return moveVertAnimCached; + + var reqArgs = new ReqInput(this); + moveVertAnimCached = AnimDef.GetDefsOfType(AnimType.Idle).FirstOrDefault(d => d.idleType == IdleType.MoveVertical && d.Allows(reqArgs)); + + return moveVertAnimCached; + } + + public IReadOnlyList GetAttackAnimations(Rot4 direction) + { + if (attackAnimationsCached != null) + return attackAnimationsCached[direction.AsInt]; + + var reqArgs = new ReqInput(this); + attackAnimationsCached = new AnimDef[4][]; + + // Horizontal. + var hor = AnimDef.GetDefsOfType(AnimType.Idle).Where(d => d.idleType == IdleType.AttackHorizontal && d.Allows(reqArgs)).ToArray(); + attackAnimationsCached[Rot4.EastInt] = hor; + attackAnimationsCached[Rot4.WestInt] = hor; + + // Vertical. + attackAnimationsCached[Rot4.NorthInt] = AnimDef.GetDefsOfType(AnimType.Idle).Where(d => d.idleType == IdleType.AttackNorth && d.Allows(reqArgs)).ToArray(); + attackAnimationsCached[Rot4.SouthInt] = AnimDef.GetDefsOfType(AnimType.Idle).Where(d => d.idleType == IdleType.AttackSouth && d.Allows(reqArgs)).ToArray(); + + return attackAnimationsCached[direction.AsInt]; + } + + public void CopyTransformFrom(ItemTweakData data) + { + if (data == null || data == this) + return; + + OffX = data.OffX; + OffY = data.OffY; + ScaleX = data.ScaleX; + ScaleY = data.ScaleY; + Rotation = data.Rotation; + HandsMode = data.HandsMode; + MeleeWeaponType = data.MeleeWeaponType; + FlipX = data.FlipX; + FlipY = data.FlipY; + BladeStart = data.BladeStart; + BladeEnd = data.BladeEnd; + CustomRendererClass = data.CustomRendererClass; + SweepProviderClass = data.SweepProviderClass; + TrailTint = data.TrailTint; + } + + public Texture2D GetTexture(bool allowFromCache = true, bool saveToCache = true) + { + if (!allowFromCache || cachedTex == null) + { + var report = RetextureUtility.GetTextureReport(GetDef()); + if (report.HasError) + throw new Exception($"Retexture utility had error: {report.ErrorMessage}"); + + var found = report.AllRetextures.FirstOrDefault(p => MakeModID(p.mod) == TextureModID).texture; + if (saveToCache) + cachedTex = found; + else + return found; + } + return cachedTex; + } + + public ThingDef GetDef(bool allowFromCache = true, bool saveToCache = true) + { + if (!allowFromCache || cachedDef == null) + { + var type = GenTypes.GetTypeInAnyAssembly(ItemType, ItemTypeNamespace); + if (type == null) + return null; + + var obj = GenGeneric.InvokeStaticMethodOnGenericType(typeof(DefDatabase<>), type, "GetNamedSilentFail", ItemDefName) as ThingDef; + if (obj == null) + Core.Warn($"Failed to find item def '{ItemDefName}' of type {type}. The item was probably removed from the target mod."); + + if (saveToCache) + cachedDef = obj; + else + return obj; + } + return cachedDef; + } + + public ModContentPack GetMod() + { + if (cachedMod != null) + return cachedMod; + + foreach (var mcp in LoadedModManager.RunningModsListForReading) + { + if (MakeModID(mcp) == TextureModID) + { + cachedMod = mcp; + break; + } + } + + return cachedMod; + } + + public ISweepProvider GetSweepProvider() + { + if (string.IsNullOrEmpty(SweepProviderClass)) + return null; + + if (cachedSweepProvider != null) + return cachedSweepProvider; + + Type klass = GenTypes.GetTypeInAnyAssembly(SweepProviderClass); + if (klass == null) + { + Core.Warn($"Failed to find any class called '{SweepProviderClass}' as a sweep provider."); + return null; + } + + if (!typeof(ISweepProvider).IsAssignableFrom(klass)) + { + Core.Error($"{klass.FullName} does not implement {nameof(ISweepProvider)}"); + return null; + } + + ISweepProvider instance; + try + { + instance = Activator.CreateInstance(klass, this) as ISweepProvider; + } + catch + { + try + { + instance = Activator.CreateInstance(klass) as ISweepProvider; + } + catch (Exception e) + { + Core.Error($"Failed to create instance of ISweepProvider '{klass.FullName}':", e); + return null; +; } + } + + cachedSweepProvider = instance; + return cachedSweepProvider; + } + + public virtual AnimPartOverrideData Apply(AnimRenderer renderer, AnimPartData part) + { + if (part == null) + return null; + + var ov = renderer.GetOverride(part); + ov.Texture = GetTexture(); + ov.LocalScaleFactor = new Vector2(ScaleX, ScaleY); + ov.LocalRotation = Rotation; + ov.LocalOffset = new Vector2(OffX, OffY); + ov.FlipX = FlipX; + ov.FlipY = FlipY; + ov.UseDefaultTransparentMaterial = UseDefaultTransparentMaterial; + ov.TweakData = this; + + if (!string.IsNullOrWhiteSpace(CustomRendererClass)) + { + // TODO cache. + // TODO handle errors. + Type rendererClass = GenTypes.GetTypeInAnyAssembly(CustomRendererClass); + var instance = Activator.CreateInstance(rendererClass) as PartRenderer; + instance.TweakData = this; + ov.CustomRenderer = instance; + } + + return ov; + } + + public void SaveTo(string filePath) + { + var settings = new JsonSerializerSettings() + { + Formatting = Formatting.Indented, + DefaultValueHandling = DefaultValueHandling.Ignore, + NullValueHandling = NullValueHandling.Ignore, + Error = (e, t) => + { + Core.Error($"Json saving error: {t.ErrorContext.Error.Message}"); + }, + Converters = new List() + { + new ColorConverter() + } + }; + string json = JsonConvert.SerializeObject(this, Formatting.Indented, settings); + File.WriteAllText(filePath, json); + } + } +} diff --git a/Source/AnimationMod/Tweaks/MeleeWeaponType.cs b/Source/1.4/ThingGenerator/Tweaks/MeleeWeaponType.cs similarity index 100% rename from Source/AnimationMod/Tweaks/MeleeWeaponType.cs rename to Source/1.4/ThingGenerator/Tweaks/MeleeWeaponType.cs diff --git a/Source/1.4/ThingGenerator/Tweaks/TweakDataManager.cs b/Source/1.4/ThingGenerator/Tweaks/TweakDataManager.cs new file mode 100644 index 00000000..c4cbe9d6 --- /dev/null +++ b/Source/1.4/ThingGenerator/Tweaks/TweakDataManager.cs @@ -0,0 +1,275 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using AM.Retexture; +using UnityEngine; +using Verse; + +namespace AM.Tweaks +{ + public static class TweakDataManager + { + public const string DATA_FOLDER_NAME = "WeaponTweakData"; + + public static int TweakDataLoadedCount => defWithModToTweak.Count; + + private static readonly Dictionary defToTweak = new Dictionary(); + private static readonly Dictionary<(ThingDef def, ModContentPack mod), ItemTweakData> defWithModToTweak = new Dictionary<(ThingDef def, ModContentPack mod), ItemTweakData>(); + private static Dictionary overrideTweakDataFile; + + /// + /// Gets the where the weapon tweak data is expected to exist + /// + public static FileInfo GetFileForTweak(ThingDef weaponDef, ModContentPack textureMod = null, FileInfo setOverride = null) + { + if (textureMod == null) + { + var report = RetextureUtility.GetTextureReport(weaponDef); + textureMod = report.ActiveRetextureMod; + } + + string fileName = ItemTweakData.MakeFileName(weaponDef, textureMod); + + // Allow other mods to provide tweak files. + overrideTweakDataFile ??= MakeOverrideTweakDataFileMap(); + if (setOverride != null) + overrideTweakDataFile[fileName] = setOverride; + + if (overrideTweakDataFile.TryGetValue(fileName, out var found)) + return found; + + string root = Core.ModContent.RootDir; + string fp = Path.Combine(root, DATA_FOLDER_NAME, fileName); + return new FileInfo(fp); + } + + private static Dictionary MakeOverrideTweakDataFileMap() + { + var ov = new Dictionary(); + var mods = LoadedModManager.RunningModsListForReading; + + foreach (var mod in mods) + { + // Main mod does not provide overrides - every other mod takes priority over the main one. + if (mod == Core.ModContent) + continue; + + var folder = Path.Combine(mod.RootDir, DATA_FOLDER_NAME); + if (!Directory.Exists(folder)) + continue; + + foreach (var file in Directory.EnumerateFiles(folder, "*.json", SearchOption.TopDirectoryOnly)) + { + var fi = new FileInfo(file); + ov[fi.Name] = fi; + } + } + + return ov; + } + + public static int GetTweakDataFileCount(string modID) + { + int c = 0; + string root = Core.ModContent.RootDir; + modID += ".json"; + foreach (var fn in Directory.EnumerateFiles(Path.Combine(root, DATA_FOLDER_NAME), "*.json")) + { + if (fn.EndsWith(modID)) + c++; + } + return c; + } + + public static ItemTweakData TryGetTweak(ThingDef def) => TryGetTweak(def, null); + + public static ItemTweakData TryGetTweak(ThingDef def, ModContentPack textureSupplier) + { + if (def == null) + return null; + + if (textureSupplier == null) + return defToTweak.TryGetValue(def, out var found) ? found : null; + + return defWithModToTweak.TryGetValue((def, textureSupplier), out var found2) ? found2 : null; + } + + public static ItemTweakData CreateNew(ThingDef def, ModContentPack textureSupplier) + { + var tweak = new ItemTweakData(def, textureSupplier); + return Register(tweak) ? tweak : null; + } + + public static ItemTweakData TryLoad(ThingDef weapon, ModContentPack textureMod) + { + var file = GetFileForTweak(weapon, textureMod); + if (!file.Exists) + { + return null; + } + + ItemTweakData loaded; + try + { + loaded = ItemTweakData.LoadFrom(file.FullName); + } + catch (Exception e) + { + Core.Error($"Exception loading tweak data json '{file.Name}':", e); + return null; + } + + var existing = TryGetTweak(weapon, textureMod); + if (existing != null) + { + defWithModToTweak.Remove((weapon, textureMod)); + } + + if (Register(loaded)) + return loaded; + + Core.Error("Unexpected failure to register."); + return null; + } + + private static bool Register(ItemTweakData td) + { + var def = td.GetDef(); + if (def == null) + { + Core.Error($"Failed to find item def for '{td.ItemDefName}' of type '{td.ItemTypeNamespace}.{td.ItemType}'. Tweak will not be registered."); + return false; + } + + var report = RetextureUtility.GetTextureReport(def); + if (report.HasError) + { + Core.Error($"Failed to generate retexture report for {def}. Tweak will not be registered. Reason: {report.ErrorMessage}"); + return false; + } + + var mod = report.AllRetextures.FirstOrDefault(p => ItemTweakData.MakeModID(p.mod) == td.TextureModID).mod; + if (mod == null) + { + Core.Error($"Failed to find mod '{td.TextureModID}' among active retextures of {td.ItemDefName}."); + return false; + } + + if (defWithModToTweak.ContainsKey((def, mod))) + { + Core.Error($"There is already a tweak registered for def '{def}' with texture mod '{mod.Name}'"); + return false; + } + + defToTweak[def] = td; + defWithModToTweak.Add((def, mod), td); + return true; + } + + [DebugOutput("Melee Animation")] + private static void LogAllRetextureCompletion() + { + var all = from td in DefDatabase.AllDefsListForReading + where td.IsMeleeWeapon() + let report = RetextureUtility.GetTextureReport(td) + where !report.HasError + from pair in report.AllRetextures + select ( pair.mod, report ); + + static TableDataGetter<(ModContentPack mod, ActiveTextureReport rep)> Row(string name, Func<(ModContentPack mod, ActiveTextureReport rep), string> toString) + => new TableDataGetter<(ModContentPack mod, ActiveTextureReport rep)>(name, toString); + + static TableDataGetter<(ModContentPack mod, ActiveTextureReport rep)> RowObj(string name, Func<(ModContentPack mod, ActiveTextureReport rep), object> toObj) + => new TableDataGetter<(ModContentPack mod, ActiveTextureReport rep)>(name, toObj); + + var table = new TableDataGetter<(ModContentPack mod, ActiveTextureReport rep)>[6]; + int i = 0; + table[i++] = Row("Def Name", p => p.rep.Weapon.defName); + table[i++] = Row("Label", p => p.rep.Weapon.LabelCap); + table[i++] = Row("Source", p => p.rep.SourceMod?.Name ?? "?"); + table[i++] = Row("Texture Provider", p => $"{ItemTweakData.MakeModID(p.mod)} '{p.mod.Name}'"); + table[i++] = Row("Texture Path", p => p.rep.TexturePath); + table[i++] = RowObj("Is Saved", p => GetFileForTweak(p.rep.Weapon, p.mod).Exists.ToStringCheckBlank()); + + DebugTables.MakeTablesDialog(all, table); + } + + public static IEnumerable<(string modPackageID, string modName, ThingDef weapon)> LoadAllForActiveMods(bool includeRedundant) + { + var data = from weapon in DefDatabase.AllDefsListForReading + where weapon.IsMeleeWeapon() + let report = RetextureUtility.GetTextureReport(weapon) + select (weapon, report); + + foreach (var pair in data) + { + if (pair.report.HasError) + { + Core.Error($"Failed to get texture report for {pair.weapon}: {pair.report.ErrorMessage}"); + continue; + } + + // Attempt to load the tweak for the actual active retexture. + var tweak = TryLoad(pair.weapon, pair.report.ActiveRetextureMod); + if (tweak == null) + yield return (ItemTweakData.MakeModID(pair.report.ActiveRetextureMod), pair.report.ActiveRetextureMod.Name, pair.weapon); + + // Fallback to other tweak data from non-active retextures. + if (includeRedundant || tweak == null) + { + foreach (var retex in pair.report.AllRetextures) + { + // Skip the active retexture, it has already been tried. + if (retex.mod == pair.report.ActiveRetextureMod) + continue; + + // Try to load a tweak for this retexture... + tweak = TryLoad(pair.weapon, retex.mod); + if (tweak == null) + yield return (ItemTweakData.MakeModID(retex.mod), retex.mod.Name, pair.weapon); + else if (!includeRedundant) + break; + } + } + } + } + + public static IEnumerable GetTweaksReportForActiveMods() + { + var reportsByMod = from mod in LoadedModManager.RunningModsListForReading + orderby mod.Name + let reports = RetextureUtility.GetModWeaponReports(mod) + where reports.Any() + select new { mod, reports }; + + foreach (var pair in reportsByMod) + { + yield return new ModTweakContainer + { + Mod = pair.mod, + Reports = pair.reports + }; + } + } + + public static Texture2D ToTexture2D(this RenderTexture rTex) + { + Texture2D tex = new(rTex.width, rTex.height, TextureFormat.RGBA32, false); + var oldRt = RenderTexture.active; + RenderTexture.active = rTex; + + tex.ReadPixels(new Rect(0, 0, rTex.width, rTex.height), 0, 0); + tex.Apply(); + + RenderTexture.active = oldRt; + return tex; + } + } + + public struct ModTweakContainer + { + public ModContentPack Mod; + public IEnumerable Reports; + } +} diff --git a/Source/1.4/ThingGenerator/UI/BGRenderer.cs b/Source/1.4/ThingGenerator/UI/BGRenderer.cs new file mode 100644 index 00000000..f48451ac --- /dev/null +++ b/Source/1.4/ThingGenerator/UI/BGRenderer.cs @@ -0,0 +1,152 @@ +using System; +using UnityEngine; +using Verse; + +namespace AM.UI; + +public static class BGRenderer +{ + private static readonly int errorCode = Guid.NewGuid().GetHashCode(); + + [TweakValue("Melee Animation", 0f, 12f)] + private static float BGFocusPoint = 4.5f; + [TweakValue("Melee Animation", 1, 2)] + private static float BGZoomLevel = 1.075f; + private static Texture2D[] layers; + + public static void DrawMainMenuBackground() + { + try + { + layers ??= InitLayers(); + var screenArea = new Rect(0, 0, Verse.UI.screenWidth, Verse.UI.screenHeight); + var mouseOffset = Verse.UI.MousePositionOnUIInverted - screenArea.center; + var mouseOffsetNormalized = mouseOffset / (screenArea.size * 0.5f); + + + var maxOffset = screenArea.size * (1f - BGZoomLevel) * 0.5f; + + for (int i = layers.Length - 1; i >= 0; i--) + { + var layer = layers[i]; + + float diff = (i - BGFocusPoint) / + Mathf.Abs(Mathf.Max(BGFocusPoint, (layers.Length - 1) - BGFocusPoint)); + var pos = layer.FitRect(screenArea, ScaleMode.Cover, BGZoomLevel); + pos.position += diff * mouseOffsetNormalized * maxOffset; + + GUI.color = Color.white; + Widgets.DrawTexturePart(pos, new Rect(0, 0, 1, 1), layer); + } + } + catch (Exception e) + { + Log.ErrorOnce($"Exception rendering melee animation background:\n{e}", errorCode); + } + } + + private static Texture2D[] InitLayers() + { + const int LAYER_COUNT = 13; + + var loaded = new Texture2D[LAYER_COUNT]; + for (int i = 0; i < LAYER_COUNT; i++) + loaded[i] = ContentFinder.Get($"AM/UI/BG/{i + 1}"); + + return loaded; + } + + public static Rect FitRect(this Texture tex, Rect area, ScaleMode mode, float scale = 1f) + { + var size = new Vector2(tex.width, tex.height); + return FitRect(size, area, mode, scale); + } + + public static Rect FitRect(this Vector2 texSize, Rect area, ScaleMode mode, float scale = 1f) + { + float w = texSize.x; + float h = texSize.y; + + void Shrink() + { + if (w > area.width) + { + float inc = area.width / w; + w = area.width; + h *= inc; + } + if (h > area.height) + { + float inc = area.height / h; + h = area.height; + w *= inc; + } + } + + void Expand() + { + if (w < area.width) + { + float inc = area.width / w; + w = area.width; + h *= inc; + } + if (h < area.height) + { + float inc = area.height / h; + h = area.height; + w *= inc; + } + } + + switch (mode) + { + case ScaleMode.Expand: + Expand(); + break; + + case ScaleMode.Shrink: + Shrink(); + break; + case ScaleMode.Cover: + Shrink(); + Expand(); + break; + case ScaleMode.Fit: + Expand(); + Shrink(); + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + + return new Rect(0, 0, w, h).CenteredOnXIn(area).CenteredOnYIn(area).ScaledBy(scale); + } +} + +public enum ScaleMode +{ + /// + /// The texture expands until it covers the entire rect. + /// If it is already larger than the rect nothing happens. + /// + Expand, + + /// + /// The texture is shrunk until it fits entirely within the rect. + /// If it is already smaller than the rect nothing happens. + /// + Shrink, + + /// + /// The same as but the texture is scaled such that it is as small as possible while still covering the entire rect. + /// The texture may still expand beyond the rect. + /// + Cover, + + /// + /// The texture is scaled such that it expands as large as possible within the rect + /// without spilling outside the rect. + /// + Fit +} diff --git a/Source/1.4/ThingGenerator/UI/Dialog_AnimationDebugger.cs b/Source/1.4/ThingGenerator/UI/Dialog_AnimationDebugger.cs new file mode 100644 index 00000000..615e9fb5 --- /dev/null +++ b/Source/1.4/ThingGenerator/UI/Dialog_AnimationDebugger.cs @@ -0,0 +1,840 @@ +using AM.Idle; +using EpicUtils; +using RimWorld; +using System; +using System.Collections.Generic; +using System.Linq; +using Unity.Jobs.LowLevel.Unsafe; +using UnityEngine; +using Verse; +using Verse.Sound; + +namespace AM.UI +{ + public class Dialog_AnimationDebugger : Window + { + public static bool IsInRehearsalMode => startRehearsal && IsStarterOpen; + + private static bool IsStarterOpen => Mathf.Abs(lastOpenStarterTime - Time.realtimeSinceStartup) < 0.25f; + private static MaterialPropertyBlock mpb; + private static Material mat; + private static AnimRenderer selectedRenderer; + private static AnimPartData selectedPart; + private static Pawn[] startPawns = new Pawn[8]; + private static AnimDef startDef; + private static bool startMX, startMY; + private static bool startRehearsal = true; + private static LocalTargetInfo startTarget = LocalTargetInfo.Invalid; + private static float lastOpenStarterTime; + private static ExecutionOutcome executionOutcome = ExecutionOutcome.Kill; + + [DebugAction("Melee Animation", "Open Debugger", actionType = DebugActionType.Action)] + private static void OpenInt() + { + Open(); + } + + public static Dialog_AnimationDebugger Open() + { + var instance = new Dialog_AnimationDebugger(); + Find.WindowStack?.Add(instance); + return instance; + } + + public readonly List<(string name, Action tab)> Tabs = new List<(string name, Action tab)>(); + public int SelectedIndex; + + private const bool AUTO_SELECT_RENDERER = true; + private readonly Vector2[] scrolls = new Vector2[32]; + private readonly Queue toDraw = new Queue(); + private readonly List allManagers = new List(); + private readonly List tempCells = new List(128); + + private int scrollIndex; + private AnimDef spaceCheckDef; + private bool spaceCheckMX; + + public Dialog_AnimationDebugger() + { + closeOnClickedOutside = false; + doCloseX = true; + doCloseButton = false; + preventCameraMotion = false; + resizeable = true; + draggable = true; + closeOnCancel = false; + closeOnAccept = false; + onlyOneOfTypeAllowed = false; + drawInScreenshotMode = false; + + Tabs.Add(("Active Animation Inspector", DrawAllAnimators)); + Tabs.Add(("Animation Starter", DrawAnimationStarter)); + Tabs.Add(("Hierarchy", DrawHierarchy)); + Tabs.Add(("Inspector", DrawInspector)); + Tabs.Add(("Performance Analyzer", DrawPerformanceAnalyzer)); + Tabs.Add(("Animation Space Checker", DrawSpaceChecker)); + Tabs.Add(("List All Active", DrawAllLists)); + + if (mpb == null) + { + mpb = new MaterialPropertyBlock(); + mat ??= MaterialPool.MatFrom(GenDraw.LineTexPath, ShaderDatabase.Transparent, Color.white); + mpb.SetTexture("_MainTex", mat.mainTexture); + } + } + + private ref Vector2 GetScroll() + { + return ref scrolls[scrollIndex++]; + } + + public override void DoWindowContents(Rect inRect) + { + if (selectedRenderer != null && selectedRenderer.IsDestroyed) + selectedRenderer = null; + if (AUTO_SELECT_RENDERER && selectedRenderer == null) + selectedRenderer = AnimRenderer.ActiveRenderers.FirstOrDefault(r => !r.IsDestroyed && r.Map == Find.CurrentMap); + + scrollIndex = 0; + + var ui = new Listing_Standard(); + ui.Begin(inRect); + + var rect = ui.GetRect(32); + if (Widgets.ButtonText(rect.LeftHalf(), $"View: {Tabs[SelectedIndex].name}")) + { + FloatMenuUtility.MakeMenu(Tabs, p => p.name, p => () => + { + SelectedIndex = Tabs.IndexOf(p); + }); + } + if (Widgets.ButtonText(rect.RightHalf(), "Open new debugger")) + Open(); + + ui.GapLine(); + + try + { + Tabs[SelectedIndex].tab(ui); + } + catch (Exception e) + { + ui.Label($"EXCEPTION DRAWING WINDOW:\n{e}"); + } + + ui.End(); + } + + public override void WindowUpdate() + { + base.WindowUpdate(); + + while (toDraw.TryDequeue(out var action)) + action(); + } + + private void DrawAllAnimators(Listing_Standard ui) + { + var area = ui.GetRect(300); + var oldUI = ui; + ui = new Listing_Standard(); + int toDraw = AnimRenderer.ActiveRenderers.Count; + int toDraw2 = AnimRenderer.TotalCapturedPawnCount; + Widgets.BeginScrollView(area, ref GetScroll(), new Rect(0, 0, area.width - 20, 110 * toDraw + 40 * toDraw2)); + ui.Begin(new Rect(0, 0, area.width - 20, area.height)); + + AnimRenderer toDestroy = null; + foreach(var renderer in AnimRenderer.ActiveRenderers) + { + var rect = ui.GetRect(130); + + if (renderer == selectedRenderer) + { + var c = Color.cyan; + c.a = 0.3f; + Widgets.DrawBoxSolid(rect, c); + } + else if (Widgets.ButtonInvisible(rect)) + { + selectedRenderer = renderer; + } + + Widgets.DrawBox(rect); + + string title = $"[{renderer.CurrentTime:F2} / {renderer.Data.Duration:F2}] {renderer.Data.Name}"; + if (renderer.IsDestroyed) + title += " [DESTROYED]"; + Widgets.Label(rect.ExpandedBy(-4, -4), title); + var bar = rect.ExpandedBy(-4); + bar.yMin += 22; + bar.height = 14; + float lerp = Mathf.Clamp01(renderer.CurrentTime / renderer.Data.Duration); + var fillBar = bar; + fillBar.width = bar.width * lerp; + Widgets.DrawBoxSolid(bar, Color.grey); + Widgets.DrawBoxSolid(fillBar, Color.green); + foreach (var e in renderer.GetEventsInPeriod(new Vector2(0, renderer.Duration + 1f))) + { + float p = e.Time / renderer.Duration; + Widgets.DrawBoxSolid(new Rect(bar.x + p * bar.width, bar.y, 3, bar.height), Color.red); + } + + bar.y += 18; + Widgets.DrawBoxSolid(bar, Color.white * 0.45f); + float newLerp = Widgets.HorizontalSlider_NewTemp(bar.ExpandedBy(0, -2), lerp, 0, 1); + if (Math.Abs(newLerp - lerp) > 0.005f) + renderer.Seek(newLerp * renderer.Data.Duration, 0, null); + + rect.y += 20; + + int i = 0; + foreach(var pawn in renderer.Pawns) + { + if (pawn == null) + continue; + + bool hasJob = pawn?.CurJobDef == AM_DefOf.AM_InAnimation; + + string label = pawn.LabelShort; + Color col = Color.white; + if (pawn.Dead) + { + label += " [DEAD]"; + col = Color.red; + } + else if (pawn.Destroyed) + { + label += " [DESTROYED]"; + col = Color.red; + } + else if (!pawn.Spawned) + { + label += " [NOT_SPAWNED]"; + col = Color.red; + } + else if (!hasJob) + { + label += $"[BADJOB:{pawn?.CurJobDef.defName ?? "null"}]"; + col = Color.red; + } + + Rect b = rect.ExpandedBy(-4, -4); + b.yMin += 40; + b.width = 100; + b.height = 28; + b.x += i * 110; + + Widgets.DrawBox(b); + GUI.color = col; + Widgets.LabelFit(b.ExpandedBy(-4, -2), label); + GUI.color = Color.white; + + i++; + } + + Rect stop = rect.ExpandedBy(-4); + stop.y += 72; + stop.size = new Vector2(100, 28); + if(Widgets.ButtonText(stop, "Stop")) + { + toDestroy = renderer; + } + + ui.GapLine(10); + } + foreach(var pawn in AnimRenderer.CapturedPawns) + { + Widgets.Label(ui.GetRect(30).ExpandedBy(-4, -4), pawn.NameFullColored); + } + + if (toDestroy != null) + toDestroy.Destroy(); + + ui.End(); + Widgets.EndScrollView(); + ui = oldUI; + ui.GapLine(); + } + + private void DrawSpaceChecker(Listing_Standard ui) + { + if (Event.current.type == EventType.Repaint && spaceCheckDef != null) + { + toDraw.Enqueue(() => + { + IntVec3 mp = Verse.UI.MouseCell(); + + ulong occupiedMask = SpaceChecker.MakeOccupiedMask(Find.CurrentMap, mp, out uint smallMask); + ulong clearMask = !spaceCheckMX ? spaceCheckDef.ClearMask : spaceCheckDef.FlipClearMask; + bool isClear = (occupiedMask & clearMask) == 0; + + tempCells.Clear(); + for (int x = mp.x - 3; x <= mp.x + 3; x++) + { + for (int z = mp.z - 3; z <= mp.z + 3; z++) + { + int offX = x - mp.x; + int offZ = z - mp.z; + bool isOccupied = occupiedMask.GetBit(offX, offZ); + + if (!isOccupied) + tempCells.Add(new IntVec3(x, 0, z)); + + } + } + + GenDraw.DrawFieldEdges(tempCells, isClear ? Color.green : Color.red); + + foreach (var cell in spaceCheckDef.GetMustBeClearCells(spaceCheckMX, false, mp)) + { + GenDraw.DrawTargetHighlight(new LocalTargetInfo(cell)); + } + }); + } + + if (ui.ButtonText(spaceCheckDef?.LabelCap.ToString() ?? "

    ZO)_8h& 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 literal 0 HcmV?d00001 diff --git a/Source/CombatExtendedPatch/PatchCore.cs b/Source/1.4/CombatExtendedPatch/PatchCore.cs similarity index 100% rename from Source/CombatExtendedPatch/PatchCore.cs rename to Source/1.4/CombatExtendedPatch/PatchCore.cs diff --git a/Source/CompatibilityReportGenerator/Assembly-CSharp.dll b/Source/1.4/CompatibilityReportGenerator/Assembly-CSharp.dll similarity index 100% rename from Source/CompatibilityReportGenerator/Assembly-CSharp.dll rename to Source/1.4/CompatibilityReportGenerator/Assembly-CSharp.dll diff --git a/Source/1.4/CompatibilityReportGenerator/CompatibilityReportGenerator.csproj b/Source/1.4/CompatibilityReportGenerator/CompatibilityReportGenerator.csproj new file mode 100644 index 00000000..6d74064f --- /dev/null +++ b/Source/1.4/CompatibilityReportGenerator/CompatibilityReportGenerator.csproj @@ -0,0 +1,48 @@ + + + + Exe + net472 + enable + disable + false + false + 11 + + + + + + + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + diff --git a/Source/1.4/CompatibilityReportGenerator/Program.cs b/Source/1.4/CompatibilityReportGenerator/Program.cs new file mode 100644 index 00000000..242c2726 --- /dev/null +++ b/Source/1.4/CompatibilityReportGenerator/Program.cs @@ -0,0 +1,110 @@ +using AM.Tweaks; +using CompatibilityReportGenerator.Properties; +using System.CommandLine; + +namespace CompatibilityReportGenerator; + +public static class Program +{ + public static void Main(string[] args) + { + var rootCmd = new RootCommand("Generates a compatibility report (in markdown format) for tweak data."); + + var dirOption = new Option("--directory") + { + Description = "The directory that the tweak .json files are located in.", + IsRequired = true, + AllowMultipleArgumentsPerToken = false, + Arity = ArgumentArity.ExactlyOne, + }; + + var outputOption = new Option("--output") + { + Description = "The file path to output the markdown file to.", + IsRequired = true, + AllowMultipleArgumentsPerToken = false, + Arity = ArgumentArity.ExactlyOne, + }; + + rootCmd.AddOption(dirOption); + rootCmd.AddOption(outputOption); + + rootCmd.SetHandler(Run, dirOption, outputOption); + + rootCmd.Invoke(args); + } + + private static void Run(DirectoryInfo input, FileInfo output) + { + if (!input.Exists) + throw new DirectoryNotFoundException(input.FullName); + + Dictionary table = new Dictionary(512); + int totalWeaponCount = 0; + + var idToName = (from raw in Directory.EnumerateFiles(input.FullName, "*.txt", SearchOption.AllDirectories) + let name = new FileInfo(raw).Name.Replace(".txt", "") + let contents = File.ReadAllText(raw) + select (name, contents)).ToDictionary(pair => pair.name, pair => pair.contents); + + var files = Directory.GetFiles(input.FullName, "*.json", SearchOption.AllDirectories); + foreach (var file in files) + { + ItemTweakData tweak; + try + { + tweak = ItemTweakData.LoadFrom(file); + } + catch (Exception e) + { + Console.WriteLine($"Exception reading/parsing file '{file}':"); + Console.WriteLine(e); + continue; + } + + string Escape(string i) + { + return i.Replace("|", "|"); + } + + string modID = tweak.TextureModID; + if (!table.TryGetValue(modID, out var row)) + { + if (!idToName.TryGetValue(modID, out string name)) + { + Console.WriteLine($"Failed to find ID -> name mapping for {modID}"); + name = "???"; + } + row = new OutputRow + { + WeaponCount = 0, + ModName = Escape(name), + ModID = Escape(modID) + }; + table.Add(modID, row); + } + + row.WeaponCount++; + totalWeaponCount++; + } + + string template = Resources.Template; + + string time = DateTime.UtcNow.ToString("d MMM yyyy, h:mm tt"); + int modCount = table.Count; + var lines = from row in table.Values + orderby row.ModName + select $"| **{row.ModName}** | {row.ModID} | {row.WeaponCount} | *Epicguru* |"; + + string finalTxt = string.Format(template, totalWeaponCount, modCount, string.Join("\n", lines), time); + + File.WriteAllText(output.FullName, finalTxt); + } + + private class OutputRow + { + public string ModName { get; set; } + public string ModID { get; set; } + public int WeaponCount { get; set; } + } +} \ No newline at end of file diff --git a/Source/CompatibilityReportGenerator/Properties/Resources.Designer.cs b/Source/1.4/CompatibilityReportGenerator/Properties/Resources.Designer.cs similarity index 100% rename from Source/CompatibilityReportGenerator/Properties/Resources.Designer.cs rename to Source/1.4/CompatibilityReportGenerator/Properties/Resources.Designer.cs diff --git a/Source/CompatibilityReportGenerator/Properties/Resources.resx b/Source/1.4/CompatibilityReportGenerator/Properties/Resources.resx similarity index 100% rename from Source/CompatibilityReportGenerator/Properties/Resources.resx rename to Source/1.4/CompatibilityReportGenerator/Properties/Resources.resx diff --git a/Source/CompatibilityReportGenerator/Properties/launchSettings.json b/Source/1.4/CompatibilityReportGenerator/Properties/launchSettings.json similarity index 100% rename from Source/CompatibilityReportGenerator/Properties/launchSettings.json rename to Source/1.4/CompatibilityReportGenerator/Properties/launchSettings.json diff --git a/Source/CompatibilityReportGenerator/Template.md b/Source/1.4/CompatibilityReportGenerator/Template.md similarity index 100% rename from Source/CompatibilityReportGenerator/Template.md rename to Source/1.4/CompatibilityReportGenerator/Template.md diff --git a/Source/CompatibilityReportGenerator/UnityEngine.CoreModule.dll b/Source/1.4/CompatibilityReportGenerator/UnityEngine.CoreModule.dll similarity index 100% rename from Source/CompatibilityReportGenerator/UnityEngine.CoreModule.dll rename to Source/1.4/CompatibilityReportGenerator/UnityEngine.CoreModule.dll diff --git a/Source/CompatibilityReportGenerator/UnityEngine.SharedInternalsModule.dll b/Source/1.4/CompatibilityReportGenerator/UnityEngine.SharedInternalsModule.dll similarity index 100% rename from Source/CompatibilityReportGenerator/UnityEngine.SharedInternalsModule.dll rename to Source/1.4/CompatibilityReportGenerator/UnityEngine.SharedInternalsModule.dll diff --git a/Source/LightsaberPatch/Extensions.cs b/Source/1.4/LightsaberPatch/Extensions.cs similarity index 100% rename from Source/LightsaberPatch/Extensions.cs rename to Source/1.4/LightsaberPatch/Extensions.cs diff --git a/Source/1.4/LightsaberPatch/LightsaberPatch.csproj b/Source/1.4/LightsaberPatch/LightsaberPatch.csproj new file mode 100644 index 00000000..8a87b8b6 --- /dev/null +++ b/Source/1.4/LightsaberPatch/LightsaberPatch.csproj @@ -0,0 +1,57 @@ + + + + net480 + Library + false + false + preview + false + false + Release + AM.LightsaberPatch + AM.LightsaberPatch + + + + + runtime + + + False + False + all + + + + + + + 1.4.3901 + + + refs/1.4/SWSaber.dll + False + False + + + refs/1.4/CompActivatableEffect.dll + False + False + + + refs/1.4/CompSlotLoadable.dll + False + False + + + + + + none + ..\..\..\Patch_Lightsabers\1.4\Assemblies\ + true + TRACE;V14 + + + diff --git a/Source/LightsaberPatch/LightsaberSweepProvider.cs b/Source/1.4/LightsaberPatch/LightsaberSweepProvider.cs similarity index 100% rename from Source/LightsaberPatch/LightsaberSweepProvider.cs rename to Source/1.4/LightsaberPatch/LightsaberSweepProvider.cs diff --git a/Source/LightsaberPatch/PatchCore.cs b/Source/1.4/LightsaberPatch/PatchCore.cs similarity index 100% rename from Source/LightsaberPatch/PatchCore.cs rename to Source/1.4/LightsaberPatch/PatchCore.cs diff --git a/Source/LightsaberPatch/SaberRenderer.cs b/Source/1.4/LightsaberPatch/SaberRenderer.cs similarity index 100% rename from Source/LightsaberPatch/SaberRenderer.cs rename to Source/1.4/LightsaberPatch/SaberRenderer.cs diff --git a/Source/1.4/LightsaberPatch/refs/1.4/CompActivatableEffect.dll b/Source/1.4/LightsaberPatch/refs/1.4/CompActivatableEffect.dll new file mode 100644 index 0000000000000000000000000000000000000000..21622c5ed6d9bce1b92b33f30bb7f1c9102af6c2 GIT binary patch literal 16896 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 literal 0 HcmV?d00001 diff --git a/Source/1.4/LightsaberPatch/refs/1.4/CompSlotLoadable.dll b/Source/1.4/LightsaberPatch/refs/1.4/CompSlotLoadable.dll new file mode 100644 index 0000000000000000000000000000000000000000..2fabd2363b9a8b5993c95f28f45b783dcd2739cf GIT binary patch literal 38400 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