From c766d4879b0ec318f74b5cd4b35511b3673ee7ce Mon Sep 17 00:00:00 2001 From: Nam Tae Gun Date: Mon, 24 Jun 2024 01:14:01 +0900 Subject: [PATCH] =?UTF-8?q?Hot=20Reload=20=ED=8C=A8=ED=82=A4=EC=A7=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/HotReload.meta | 8 + Assets/HotReload/Resources.meta | 8 + .../Resources/HotReloadSettingsObject.asset | 17 + .../HotReloadSettingsObject.asset.meta | 8 + .../Documentation.meta | 8 + .../Documentation/Documentation.pdf | Bin 0 -> 33649 bytes .../Documentation/Documentation.pdf.meta | 14 + .../Editor.meta | 8 + .../Editor/Attribution.meta | 3 + .../Editor/Attribution/Attribution.cs | 61 + .../Editor/Attribution/Attribution.cs.meta | 10 + .../Editor/Attribution/VSAttribution.cs | 68 + .../Editor/Attribution/VSAttribution.cs.meta | 10 + .../Editor/CLI.meta | 3 + .../Editor/CLI/CliUtils.cs | 128 + .../Editor/CLI/CliUtils.cs.meta | 10 + .../Editor/CLI/FallbackCliController.cs | 13 + .../Editor/CLI/FallbackCliController.cs.meta | 10 + .../Editor/CLI/HotReloadCli.cs | 239 + .../Editor/CLI/HotReloadCli.cs.meta | 10 + .../Editor/CLI/ICliController.cs | 13 + .../Editor/CLI/ICliController.cs.meta | 10 + .../Editor/CLI/LinuxCliController.cs | 73 + .../Editor/CLI/LinuxCliController.cs.meta | 10 + .../Editor/CLI/OsxCliController.cs | 189 + .../Editor/CLI/OsxCliController.cs.meta | 10 + .../Editor/CLI/StartArgs.cs | 12 + .../Editor/CLI/StartArgs.cs.meta | 18 + .../Editor/CLI/WindowsCliController.cs | 33 + .../Editor/CLI/WindowsCliController.cs.meta | 10 + .../Editor/CompileChecker.meta | 8 + .../CompileChecker/DefaultCompileChecker.cs | 71 + .../DefaultCompileChecker.cs.meta | 18 + .../Editor/CompileChecker/ICompileChecker.cs | 17 + .../CompileChecker/ICompileChecker.cs.meta | 18 + .../CompileChecker/LegacyCompileChecker.cs | 54 + .../LegacyCompileChecker.cs.meta | 18 + .../Editor/Constants.cs | 42 + .../Editor/Constants.cs.meta | 18 + .../Editor/Demo.meta | 8 + .../Editor/Demo/EditorDemo.cs | 26 + .../Editor/Demo/EditorDemo.cs.meta | 18 + .../Editor/EditorCodePatcher.cs | 912 ++ .../Editor/EditorCodePatcher.cs.meta | 18 + .../Editor/EditorIndicationState.cs | 177 + .../Editor/EditorIndicationState.cs.meta | 10 + .../Editor/GitUtil.cs | 87 + .../Editor/GitUtil.cs.meta | 18 + .../Editor/Helpers.meta | 8 + .../Editor/Helpers/AssemblyOmission.cs | 188 + .../Editor/Helpers/AssemblyOmission.cs.meta | 10 + .../Editor/Helpers/BuildInfoHelper.cs | 144 + .../Editor/Helpers/BuildInfoHelper.cs.meta | 10 + .../Editor/Helpers/EditorWindowHelper.cs | 101 + .../Editor/Helpers/EditorWindowHelper.cs.meta | 18 + .../Editor/Helpers/GUIHelper.cs | 162 + .../Editor/Helpers/GUIHelper.cs.meta | 10 + .../Helpers/HotReloadSuggestionsHelper.cs | 322 + .../HotReloadSuggestionsHelper.cs.meta | 10 + .../Editor/Helpers/HotReloadTimelineHelper.cs | 451 + .../Helpers/HotReloadTimelineHelper.cs.meta | 10 + .../Editor/Helpers/Spinner.cs | 80 + .../Editor/Helpers/Spinner.cs.meta | 10 + .../Editor/Helpers/UnitySettingsHelper.cs | 95 + .../Helpers/UnitySettingsHelper.cs.meta | 10 + .../Editor/HotReloadEventPopup.cs | 95 + .../Editor/HotReloadEventPopup.cs.meta | 10 + .../Editor/HotReloadOverlay.cs | 178 + .../Editor/HotReloadOverlay.cs.meta | 10 + .../Editor/HotReloadPrefs.cs | 429 + .../Editor/HotReloadPrefs.cs.meta | 18 + .../Editor/HotReloadSettingsEditor.cs | 70 + .../Editor/HotReloadSettingsEditor.cs.meta | 18 + .../Editor/HotReloadState.cs | 37 + .../Editor/HotReloadState.cs.meta | 10 + .../Editor/Icon_Player.png | Bin 0 -> 2621 bytes .../Editor/Icon_Player.png.meta | 154 + .../Editor/InspectorFreezeFix.cs | 117 + .../Editor/InspectorFreezeFix.cs.meta | 10 + .../Editor/Installation.meta | 3 + .../Editor/Installation/DownloadUtility.cs | 98 + .../Installation/DownloadUtility.cs.meta | 10 + .../Editor/Installation/ExponentialBackoff.cs | 18 + .../Installation/ExponentialBackoff.cs.meta | 10 + .../Editor/Installation/InstallUtility.cs | 58 + .../Installation/InstallUtility.cs.meta | 18 + .../Editor/Installation/ServerDownloader.cs | 190 + .../Installation/ServerDownloader.cs.meta | 10 + .../Editor/Installation/UpdateUtility.cs | 94 + .../Editor/Installation/UpdateUtility.cs.meta | 10 + .../Editor/PlayerBuild.meta | 3 + .../PlayerBuild/BuildGenerateBuildInfo.cs | 42 + .../BuildGenerateBuildInfo.cs.meta | 10 + .../PlayerBuild/HotReloadBuildHelper.cs | 106 + .../PlayerBuild/HotReloadBuildHelper.cs.meta | 10 + .../PostbuildModifyAndroidManifest.cs | 133 + .../PostbuildModifyAndroidManifest.cs.meta | 10 + .../PlayerBuild/PostbuildSendProjectState.cs | 26 + .../PostbuildSendProjectState.cs.meta | 18 + .../PlayerBuild/PrebuildIncludeResources.cs | 60 + .../PrebuildIncludeResources.cs.meta | 18 + .../Editor/ProjectGeneration.meta | 8 + .../ProjectGeneration/FileIOProvider.cs | 44 + .../ProjectGeneration/FileIOProvider.cs.meta | 18 + .../Editor/ProjectGeneration/GUIDProvider.cs | 9 + .../ProjectGeneration/GUIDProvider.cs.meta | 18 + .../Editor/ProjectGeneration/IFileIO.cs | 12 + .../Editor/ProjectGeneration/IFileIO.cs.meta | 10 + .../ProjectGeneration/IGUIDGenerator.cs | 7 + .../ProjectGeneration/IGUIDGenerator.cs.meta | 10 + ...HotReloadProjectGenerationPostProcessor.cs | 43 + ...loadProjectGenerationPostProcessor.cs.meta | 10 + .../ProjectGenenerationPostProcessor.cs | 14 + .../ProjectGenenerationPostProcessor.cs.meta | 10 + .../ProjectGeneration/ProjectGeneration.cs | 893 ++ .../ProjectGeneration.cs.meta | 18 + .../ProjectGenerationFlag.cs | 18 + .../ProjectGenerationFlag.cs.meta | 10 + .../Editor/ProjectGeneration/ProjectPart.cs | 85 + .../ProjectGeneration/ProjectPart.cs.meta | 10 + .../SolutionGuidGenerator.cs | 29 + .../SolutionGuidGenerator.cs.meta | 10 + .../Editor/ProjectGeneration/Util.meta | 8 + .../ProjectGeneration/Util/FileSystemUtil.cs | 37 + .../Util/FileSystemUtil.cs.meta | 18 + .../ProjectGeneration/Util/StringUtils.cs | 14 + .../Util/StringUtils.cs.meta | 10 + .../Editor/RequiredSettings.meta | 3 + .../RequiredSettingChecker.cs | 270 + .../RequiredSettingChecker.cs.meta | 10 + .../Editor/Resources.meta | 3 + .../Editor/Resources/Icn_Stop.png | Bin 0 -> 117 bytes .../Editor/Resources/Icn_Stop.png.meta | 123 + .../Editor/Resources/Icn_play.png | Bin 0 -> 270 bytes .../Editor/Resources/Icn_play.png.meta | 123 + .../Resources/Logo_HotReload_DarkMode.png | Bin 0 -> 3927 bytes .../Logo_HotReload_DarkMode.png.meta | 95 + .../Resources/Logo_HotReload_LightMode.png | Bin 0 -> 3879 bytes .../Logo_HotReload_LightMode.png.meta | 95 + .../Editor/Resources/alert_info.png | Bin 0 -> 862 bytes .../Editor/Resources/alert_info.png.meta | 134 + .../Editor/Resources/applied_patch.png | Bin 0 -> 5463 bytes .../Editor/Resources/applied_patch.png.meta | 134 + .../Editor/Resources/blue.png | Bin 0 -> 6101 bytes .../Editor/Resources/blue.png.meta | 99 + .../Editor/Resources/close.png | Bin 0 -> 252 bytes .../Editor/Resources/close.png.meta | 134 + .../Editor/Resources/error.png | Bin 0 -> 5489 bytes .../Editor/Resources/error.png.meta | 134 + .../Editor/Resources/events.png | Bin 0 -> 4309 bytes .../Editor/Resources/events.png.meta | 134 + .../Editor/Resources/foldout_closed.png | Bin 0 -> 4865 bytes .../Editor/Resources/foldout_closed.png.meta | 134 + .../Editor/Resources/foldout_open.png | Bin 0 -> 4861 bytes .../Editor/Resources/foldout_open.png.meta | 134 + .../Editor/Resources/green.png | Bin 0 -> 352 bytes .../Editor/Resources/green.png.meta | 131 + .../Editor/Resources/grey.png | Bin 0 -> 493 bytes .../Editor/Resources/grey.png.meta | 131 + .../Editor/Resources/icon_check_circle.png | Bin 0 -> 916 bytes .../Resources/icon_check_circle.png.meta | 95 + .../Editor/Resources/icon_circle_black.png | Bin 0 -> 648 bytes .../Resources/icon_circle_black.png.meta | 154 + .../Editor/Resources/icon_circle_gray.png | Bin 0 -> 743 bytes .../Resources/icon_circle_gray.png.meta | 154 + .../icon_loading_star_light_mode_96.png | Bin 0 -> 822 bytes .../icon_loading_star_light_mode_96.png.meta | 131 + .../Editor/Resources/icon_warning_circle.png | Bin 0 -> 941 bytes .../Resources/icon_warning_circle.png.meta | 95 + .../Editor/Resources/infos.png | Bin 0 -> 5947 bytes .../Editor/Resources/infos.png.meta | 134 + .../Editor/Resources/logo.png | Bin 0 -> 455 bytes .../Editor/Resources/logo.png.meta | 134 + .../Editor/Resources/red.png | Bin 0 -> 345 bytes .../Editor/Resources/red.png.meta | 131 + .../Editor/Resources/red_dot.png | Bin 0 -> 4838 bytes .../Editor/Resources/red_dot.png.meta | 134 + .../Editor/Resources/refresh.png | Bin 0 -> 287 bytes .../Editor/Resources/refresh.png.meta | 134 + .../Editor/Resources/report_bug.png | Bin 0 -> 763 bytes .../Editor/Resources/report_bug.png.meta | 134 + .../Editor/Resources/warning.png | Bin 0 -> 5523 bytes .../Editor/Resources/warning.png.meta | 134 + .../Editor/Resources/yellow.png | Bin 0 -> 348 bytes .../Editor/Resources/yellow.png.meta | 131 + .../Editor/ServerHealthCheck.cs | 25 + .../Editor/ServerHealthCheck.cs.meta | 10 + .../SingularityGroup.HotReload.Editor.asmdef | 28 + ...gularityGroup.HotReload.Editor.asmdef.meta | 14 + ...rityGroup.HotReload.EditorDependencies.dll | Bin 0 -> 60928 bytes ...roup.HotReload.EditorDependencies.dll.meta | 93 + .../Editor/Versioning.meta | 8 + .../Editor/Versioning/PackageUpdateChecker.cs | 288 + .../Versioning/PackageUpdateChecker.cs.meta | 18 + .../Editor/Versioning/SemVer.cs | 536 + .../Editor/Versioning/SemVer.cs.meta | 18 + .../Editor/Window.meta | 8 + .../Editor/Window/GUI.meta | 8 + .../Editor/Window/GUI/Buttons.meta | 8 + .../Window/GUI/Buttons/OpenDialogueButton.cs | 42 + .../GUI/Buttons/OpenDialogueButton.cs.meta | 10 + .../Window/GUI/Buttons/OpenURLButton.cs | 29 + .../Window/GUI/Buttons/OpenURLButton.cs.meta | 18 + .../Editor/Window/GUI/EditorTextures.cs | 116 + .../Editor/Window/GUI/EditorTextures.cs.meta | 10 + .../Editor/Window/GUI/IGUIComponent.cs | 5 + .../Editor/Window/GUI/IGUIComponent.cs.meta | 18 + .../Editor/Window/GUI/Options.meta | 8 + ...AllowAndroidAppToMakeHttpRequestsOption.cs | 48 + ...AndroidAppToMakeHttpRequestsOption.cs.meta | 18 + .../Editor/Window/GUI/Options/Base.meta | 8 + .../GUI/Options/Base/HotReloadOptionBase.cs | 57 + .../Options/Base/HotReloadOptionBase.cs.meta | 18 + .../GUI/Options/Base/OptionInterfaces.cs | 34 + .../GUI/Options/Base/OptionInterfaces.cs.meta | 10 + .../Window/GUI/Options/ExposeServerOption.cs | 70 + .../GUI/Options/ExposeServerOption.cs.meta | 18 + .../GUI/Options/IncludeInBuildOption.cs | 24 + .../GUI/Options/IncludeInBuildOption.cs.meta | 18 + .../Editor/Window/GUI/Tabs.meta | 8 + .../Editor/Window/GUI/Tabs/Base.meta | 8 + .../Window/GUI/Tabs/Base/HotReloadTabBase.cs | 33 + .../GUI/Tabs/Base/HotReloadTabBase.cs.meta | 18 + .../Editor/Window/GUI/Tabs/Helpers.meta | 3 + .../GUI/Tabs/Helpers/RedeemLicenseHelper.cs | 308 + .../Tabs/Helpers/RedeemLicenseHelper.cs.meta | 10 + .../Window/GUI/Tabs/HotReloadAboutTab.cs | 310 + .../Window/GUI/Tabs/HotReloadAboutTab.cs.meta | 18 + .../GUI/Tabs/HotReloadOptionsSection.cs | 49 + .../GUI/Tabs/HotReloadOptionsSection.cs.meta | 18 + .../Editor/Window/GUI/Tabs/HotReloadRunTab.cs | 1367 +++ .../Window/GUI/Tabs/HotReloadRunTab.cs.meta | 18 + .../Window/GUI/Tabs/HotReloadSettingsTab.cs | 697 ++ .../GUI/Tabs/HotReloadSettingsTab.cs.meta | 10 + .../Editor/Window/HotReloadWindow.cs | 372 + .../Editor/Window/HotReloadWindow.cs.meta | 18 + .../Editor/Window/ShowOnStartupEnum.cs | 7 + .../Editor/Window/ShowOnStartupEnum.cs.meta | 18 + .../Editor/Window/Styles.meta | 8 + .../Window/Styles/HotReloadWindowStyles.cs | 777 ++ .../Styles/HotReloadWindowStyles.cs.meta | 18 + .../com.singularitygroup.hotreload/LICENSE.md | 45 + .../LICENSE.md.meta | 14 + .../com.singularitygroup.hotreload/README.md | 9 + .../README.md.meta | 10 + .../Runtime.meta | 8 + .../Runtime/AppCallbackListener.cs | 55 + .../Runtime/AppCallbackListener.cs.meta | 10 + .../Runtime/BuildInfo.cs | 171 + .../Runtime/BuildInfo.cs.meta | 10 + .../Runtime/Burst.meta | 3 + .../Runtime/Burst/JobHotReloadUtility.cs | 24 + .../Runtime/Burst/JobHotReloadUtility.cs.meta | 10 + .../Runtime/BurstChecker.cs | 41 + .../Runtime/BurstChecker.cs.meta | 10 + .../Runtime/CodePatcher.cs | 423 + .../Runtime/CodePatcher.cs.meta | 18 + .../Runtime/Demo.meta | 3 + .../Runtime/Demo/Scenes.meta | 8 + .../Demo/Scenes/HotReloadBasicDemo.unity | 1121 ++ .../Demo/Scenes/HotReloadBasicDemo.unity.meta | 14 + .../Demo/Scenes/HotReloadBurstDemo.unity | 9607 +++++++++++++++++ .../Demo/Scenes/HotReloadBurstDemo.unity.meta | 14 + .../HotReloadBurstDemoSettings.lighting | 66 + .../HotReloadBurstDemoSettings.lighting.meta | 15 + .../Runtime/Demo/Scripts.meta | 8 + .../Demo/Scripts/HotReloadBasicDemo.cs | 179 + .../Demo/Scripts/HotReloadBasicDemo.cs.meta | 18 + .../Demo/Scripts/HotReloadBurstJobsDemo.cs | 63 + .../Scripts/HotReloadBurstJobsDemo.cs.meta | 18 + .../Runtime/Demo/Scripts/IDemo.cs | 29 + .../Runtime/Demo/Scripts/IDemo.cs.meta | 10 + .../Runtime/HotReloadPrompts.prefab | 2942 +++++ .../Runtime/HotReloadPrompts.prefab.meta | 14 + .../Runtime/HotReloadSettingsObject.cs | 140 + .../Runtime/HotReloadSettingsObject.cs.meta | 20 + .../Runtime/HttpClientUtils.cs | 19 + .../Runtime/HttpClientUtils.cs.meta | 10 + .../Runtime/IServerHealthCheck.cs | 11 + .../Runtime/IServerHealthCheck.cs.meta | 10 + .../Runtime/InstallQRDialog.cs | 27 + .../Runtime/InstallQRDialog.cs.meta | 10 + .../Runtime/IpHelper.cs | 64 + .../Runtime/IpHelper.cs.meta | 10 + .../Runtime/Libs.meta | 8 + .../Runtime/Libs/EditorOnly.meta | 8 + ...ityGroup.HotReload.RuntimeDependencies.dll | Bin 0 -> 2995712 bytes ...oup.HotReload.RuntimeDependencies.dll.meta | 99 + ...roup.HotReload.RuntimeDependencies2019.dll | Bin 0 -> 40448 bytes ...HotReload.RuntimeDependencies2019.dll.meta | 95 + ...roup.HotReload.RuntimeDependencies2020.dll | Bin 0 -> 38912 bytes ...HotReload.RuntimeDependencies2020.dll.meta | 95 + ...roup.HotReload.RuntimeDependencies2022.dll | Bin 0 -> 480256 bytes ...HotReload.RuntimeDependencies2022.dll.meta | 95 + .../Runtime/Libs/OnDevice.meta | 8 + ...ityGroup.HotReload.RuntimeDependencies.dll | Bin 0 -> 2995712 bytes ...oup.HotReload.RuntimeDependencies.dll.meta | 95 + ...roup.HotReload.RuntimeDependencies2019.dll | Bin 0 -> 40448 bytes ...HotReload.RuntimeDependencies2019.dll.meta | 96 + ...roup.HotReload.RuntimeDependencies2020.dll | Bin 0 -> 38912 bytes ...HotReload.RuntimeDependencies2020.dll.meta | 96 + ...roup.HotReload.RuntimeDependencies2022.dll | Bin 0 -> 480256 bytes ...HotReload.RuntimeDependencies2022.dll.meta | 96 + .../Runtime/MethodCompatiblity.cs | 110 + .../Runtime/MethodCompatiblity.cs.meta | 18 + .../Runtime/MethodPatchResponsesConverter.cs | 500 + .../MethodPatchResponsesConverter.cs.meta | 10 + .../Runtime/MethodUtils.cs | 22 + .../Runtime/MethodUtils.cs.meta | 18 + .../Runtime/MonoBehaviours.meta | 3 + .../MonoBehaviours/ConnectionDialog.cs | 80 + .../MonoBehaviours/ConnectionDialog.cs.meta | 10 + .../Runtime/MonoBehaviours/Prompts.cs | 134 + .../Runtime/MonoBehaviours/Prompts.cs.meta | 10 + .../Runtime/MonoBehaviours/QuestionDialog.cs | 64 + .../MonoBehaviours/QuestionDialog.cs.meta | 10 + .../Runtime/MonoBehaviours/RetryDialog.cs | 104 + .../MonoBehaviours/RetryDialog.cs.meta | 10 + .../Runtime/MonoMethod.cs | 196 + .../Runtime/MonoMethod.cs.meta | 18 + .../Runtime/OSX.meta | 8 + .../Runtime/OSX/HotReloadNativeHelper.dylib | Bin 0 -> 152352 bytes .../OSX/HotReloadNativeHelper.dylib.meta | 87 + .../Runtime/OnHotReloadDispatch.cs | 187 + .../Runtime/OnHotReloadDispatch.cs.meta | 10 + .../Runtime/PackageConst.cs | 20 + .../Runtime/PackageConst.cs.meta | 18 + .../Runtime/PatchServerInfo.cs | 41 + .../Runtime/PatchServerInfo.cs.meta | 18 + .../Runtime/PersistencePaths.cs | 15 + .../Runtime/PersistencePaths.cs.meta | 18 + .../Runtime/PlayerCodePatcher.cs | 118 + .../Runtime/PlayerCodePatcher.cs.meta | 10 + .../Runtime/PlayerEntrypoint.cs | 159 + .../Runtime/PlayerEntrypoint.cs.meta | 10 + .../Runtime/Public.meta | 8 + .../Runtime/Public/HotReloadLogging.cs | 17 + .../Runtime/Public/HotReloadLogging.cs.meta | 18 + .../Runtime/Public/InvokeOnHotReload.cs | 17 + .../Runtime/Public/InvokeOnHotReload.cs.meta | 18 + .../Runtime/Public/InvokeOnHotReloadLocal.cs | 22 + .../Public/InvokeOnHotReloadLocal.cs.meta | 10 + .../Runtime/Public/Log.cs | 108 + .../Runtime/Public/Log.cs.meta | 10 + .../Runtime/Public/LogLevel.cs | 25 + .../Runtime/Public/LogLevel.cs.meta | 18 + ...arityGroup.HotReload.Runtime.Public.asmdef | 3 + ...Group.HotReload.Runtime.Public.asmdef.meta | 14 + .../Runtime/RequestHelper.cs | 418 + .../Runtime/RequestHelper.cs.meta | 18 + .../Runtime/ServerHandshake.cs | 245 + .../Runtime/ServerHandshake.cs.meta | 10 + .../Runtime/ServerHealthCheck.cs | 58 + .../Runtime/ServerHealthCheck.cs.meta | 10 + .../SingularityGroup.HotReload.Runtime.asmdef | 27 + ...ularityGroup.HotReload.Runtime.asmdef.meta | 14 + .../Runtime/SymbolResolver.cs | 90 + .../Runtime/SymbolResolver.cs.meta | 18 + .../Runtime/SymbolResolvingFailedException.cs | 14 + .../SymbolResolvingFailedException.cs.meta | 18 + .../Runtime/TaskExtensions.cs | 48 + .../Runtime/TaskExtensions.cs.meta | 18 + .../Runtime/ThreadUtility.cs | 226 + .../Runtime/ThreadUtility.cs.meta | 10 + .../Runtime/UnityHelper.cs | 42 + .../Runtime/UnityHelper.cs.meta | 10 + .../Server.meta | 8 + .../Server/hot-reload-config.graphql | 99 + .../Server/hot-reload-config.graphql.meta | 14 + .../Server/linux-x64.meta | 8 + .../linux-x64/hotreload-start-script.sh | 86 + .../linux-x64/hotreload-start-script.sh.meta | 14 + .../Server/linux-x64/terminal-run.sh | 39 + .../Server/linux-x64/terminal-run.sh.meta | 14 + .../Third Party Notices.md | 327 + .../Third Party Notices.md.meta | 14 + .../package.json | 20 + .../package.json.meta | 14 + Packages/packages-lock.json | 9 + 379 files changed, 37511 insertions(+) create mode 100644 Assets/HotReload.meta create mode 100644 Assets/HotReload/Resources.meta create mode 100644 Assets/HotReload/Resources/HotReloadSettingsObject.asset create mode 100644 Assets/HotReload/Resources/HotReloadSettingsObject.asset.meta create mode 100644 Packages/com.singularitygroup.hotreload/Documentation.meta create mode 100644 Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf create mode 100644 Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Constants.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Constants.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Demo.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/RequiredSettings.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/alert_info.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/alert_info.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/close.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/close.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/error.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/error.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/events.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/events.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_open.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_open.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/green.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/green.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_check_circle.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_check_circle.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_black.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_black.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/infos.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/infos.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/red.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/red.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/red_dot.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/red_dot.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/warning.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/warning.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/yellow.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/yellow.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef create mode 100644 Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll create mode 100644 Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/Styles.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/LICENSE.md create mode 100644 Packages/com.singularitygroup.hotreload/LICENSE.md.meta create mode 100644 Packages/com.singularitygroup.hotreload/README.md create mode 100644 Packages/com.singularitygroup.hotreload/README.md.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Burst.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2019.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2019.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2020.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2020.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2022.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2022.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2019.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2019.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2020.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2020.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2022.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2022.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodCompatiblity.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodCompatiblity.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodPatchResponsesConverter.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodPatchResponsesConverter.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodUtils.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodUtils.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/ConnectionDialog.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/ConnectionDialog.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/Prompts.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/Prompts.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/QuestionDialog.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/QuestionDialog.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/RetryDialog.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/RetryDialog.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoMethod.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoMethod.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OSX.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OSX/HotReloadNativeHelper.dylib create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OSX/HotReloadNativeHelper.dylib.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OnHotReloadDispatch.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OnHotReloadDispatch.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PackageConst.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PackageConst.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PatchServerInfo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PatchServerInfo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PersistencePaths.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PersistencePaths.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PlayerCodePatcher.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PlayerCodePatcher.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PlayerEntrypoint.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PlayerEntrypoint.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/HotReloadLogging.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/HotReloadLogging.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/InvokeOnHotReload.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/InvokeOnHotReload.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/InvokeOnHotReloadLocal.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/InvokeOnHotReloadLocal.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/Log.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/Log.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/LogLevel.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/LogLevel.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/SingularityGroup.HotReload.Runtime.Public.asmdef create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/SingularityGroup.HotReload.Runtime.Public.asmdef.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/RequestHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/RequestHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ServerHandshake.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ServerHandshake.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ServerHealthCheck.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ServerHealthCheck.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SingularityGroup.HotReload.Runtime.asmdef create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SingularityGroup.HotReload.Runtime.asmdef.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SymbolResolver.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SymbolResolver.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SymbolResolvingFailedException.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SymbolResolvingFailedException.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/TaskExtensions.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/TaskExtensions.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ThreadUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ThreadUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/UnityHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/UnityHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server/hot-reload-config.graphql create mode 100644 Packages/com.singularitygroup.hotreload/Server/hot-reload-config.graphql.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64/hotreload-start-script.sh create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64/hotreload-start-script.sh.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64/terminal-run.sh create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64/terminal-run.sh.meta create mode 100644 Packages/com.singularitygroup.hotreload/Third Party Notices.md create mode 100644 Packages/com.singularitygroup.hotreload/Third Party Notices.md.meta create mode 100644 Packages/com.singularitygroup.hotreload/package.json create mode 100644 Packages/com.singularitygroup.hotreload/package.json.meta diff --git a/Assets/HotReload.meta b/Assets/HotReload.meta new file mode 100644 index 000000000..852c90e95 --- /dev/null +++ b/Assets/HotReload.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f19ed04311ab51409050a5842af58dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HotReload/Resources.meta b/Assets/HotReload/Resources.meta new file mode 100644 index 000000000..1e658fdbb --- /dev/null +++ b/Assets/HotReload/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22b47c8a69ed0f548a9e8b8054c45ab6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/HotReload/Resources/HotReloadSettingsObject.asset b/Assets/HotReload/Resources/HotReloadSettingsObject.asset new file mode 100644 index 000000000..04013d3d1 --- /dev/null +++ b/Assets/HotReload/Resources/HotReloadSettingsObject.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 324c6fd3c103e0f418eb4b98c46bf63c, type: 3} + m_Name: HotReloadSettingsObject + m_EditorClassIdentifier: + IncludeInBuild: 1 + AllowAndroidAppToMakeHttpRequests: 0 + PromptsPrefab: {fileID: 4967086677379066170, guid: 0dc8d7047b14c44b7970c5d35665dbe1, type: 3} diff --git a/Assets/HotReload/Resources/HotReloadSettingsObject.asset.meta b/Assets/HotReload/Resources/HotReloadSettingsObject.asset.meta new file mode 100644 index 000000000..e430da7a9 --- /dev/null +++ b/Assets/HotReload/Resources/HotReloadSettingsObject.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a93d65fd647c6974ba29612c7d79186b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Documentation.meta b/Packages/com.singularitygroup.hotreload/Documentation.meta new file mode 100644 index 000000000..326840800 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a025eec5cd1851429c24e953a58d48b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf b/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..27968728e01cb565a9f1ea4cb3899c9904aa46b7 GIT binary patch literal 33649 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 Yot%xHIRDz9A^cz@KQ=3?q>|MC01=Q({Qv*} literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf.meta b/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf.meta new file mode 100644 index 000000000..754489fbd --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 8999c2c2d9cadcb44a617a5df023bfa1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor.meta b/Packages/com.singularitygroup.hotreload/Editor.meta new file mode 100644 index 000000000..74ca4b032 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5dfa6492e8e7ce4f937aa75ef4e86fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution.meta b/Packages/com.singularitygroup.hotreload/Editor/Attribution.meta new file mode 100644 index 000000000..944cb6392 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7ae8b0adf00c450d9e80e11ffa1d2cf7 +timeCreated: 1678721517 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs new file mode 100644 index 000000000..980755a2f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs @@ -0,0 +1,61 @@ +using System; +using System.Globalization; +using SingularityGroup.HotReload.DTO; +using UnityEditor; +using UnityEditor.VSAttribution.HotReload; +using UnityEngine; +using UnityEngine.Analytics; + +namespace SingularityGroup.HotReload.Editor { + internal static class Attribution { + internal const string LastLoginKey = "HotReload.Attribution.LastAttributionEventAt"; + + //Resend attribution event every 12 hours to be safe + static readonly TimeSpan resendPeriod = TimeSpan.FromHours(12); + + //The last time the attribution event was sent. + //Returns unix epoch in case it has never been sent before. + static DateTime LastAttributionEventAt { + get { + if(EditorPrefs.HasKey(LastLoginKey)) { + return DateTime.ParseExact(EditorPrefs.GetString(LastLoginKey), "o", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); + } + return DateTimeOffset.FromUnixTimeSeconds(0).UtcDateTime; + } + set { + EditorPrefs.SetString(LastLoginKey, value.ToUniversalTime().ToString("o")); + } + } + + + const string actionName = "Login"; + const string partnerName = "The Naughty Cult Ltd."; + + public static void RegisterLogin(LoginStatusResponse response) { + //Licensing might not be initialized yet. + //The hwId should be set eventually. + if(response.hardwareId == null) { + return; + } + //Only forward attribution if this is an asset store build. + //We will still distribute this package outside of the asset store (i.e via our website). + if (!PackageConst.IsAssetStoreBuild) { + return; + } + + var now = DateTime.UtcNow; + //If we sent an attribution event in the last 12 hours we should already be good. + if (now - LastAttributionEventAt < resendPeriod) { + return; + } + + var result = VSAttribution.SendAttributionEvent(actionName, partnerName, response.hardwareId); + + //Retry on transient errors + if (result == AnalyticsResult.NotInitialized) { + return; + } + LastAttributionEventAt = now; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta new file mode 100644 index 000000000..ff59cda4b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 67658aafb8404f0eb9496812ba4bb8a4 +timeCreated: 1678721795 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs new file mode 100644 index 000000000..cc065529c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs @@ -0,0 +1,68 @@ +using System; +using UnityEngine.Analytics; + +namespace UnityEditor.VSAttribution.HotReload +{ + internal static class VSAttribution + { + const int k_VersionId = 4; + const int k_MaxEventsPerHour = 10; + const int k_MaxNumberOfElements = 1000; + + const string k_VendorKey = "unity.vsp-attribution"; + const string k_EventName = "vspAttribution"; + + static bool RegisterEvent() + { + AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(k_EventName, k_MaxEventsPerHour, + k_MaxNumberOfElements, k_VendorKey, k_VersionId); + + var isResultOk = result == AnalyticsResult.Ok; + return isResultOk; + } + + [Serializable] + struct VSAttributionData + { + public string actionName; + public string partnerName; + public string customerUid; + public string extra; + } + + /// + /// Registers and attempts to send a Verified Solutions Attribution event. + /// + /// Name of the action, identifying a place this event was called from. + /// Identifiable Verified Solutions Partner's name. + /// Unique identifier of the customer using Partner's Verified Solution. + public static AnalyticsResult SendAttributionEvent(string actionName, string partnerName, string customerUid) + { + try + { + // Are Editor Analytics enabled ? (Preferences) + if (!EditorAnalytics.enabled) + return AnalyticsResult.AnalyticsDisabled; + + if (!RegisterEvent()) + return AnalyticsResult.InvalidData; + + // Create an expected data object + var eventData = new VSAttributionData + { + actionName = actionName, + partnerName = partnerName, + customerUid = customerUid, + extra = "{}" + }; + + return EditorAnalytics.SendEventWithLimit(k_EventName, eventData, k_VersionId); + } + catch + { + // Fail silently + return AnalyticsResult.AnalyticsDisabled; + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta new file mode 100644 index 000000000..c92c71584 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d7493a30e78d4ec783ead20baea2c4d2 +timeCreated: 1678721534 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI.meta new file mode 100644 index 000000000..7ce99ac50 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a100625513d043c7bb875461043f4f86 +timeCreated: 1673820086 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs new file mode 100644 index 000000000..6c3833bcc --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs @@ -0,0 +1,128 @@ +using System.Diagnostics; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEngine; +using System; + +namespace SingularityGroup.HotReload.Editor.Cli { + internal static class CliUtils { + static readonly string projectIdentifier = GetProjectIdentifier(); + + class Config { + public bool singleInstance; + } + + public static string GetProjectIdentifier() { + if (File.Exists(PackageConst.ConfigFileName)) { + var config = JsonConvert.DeserializeObject(File.ReadAllText(PackageConst.ConfigFileName)); + if (config.singleInstance) { + return null; + } + } + var path = Path.GetDirectoryName(UnityHelper.DataPath); + var name = new DirectoryInfo(path).Name; + using (SHA256 sha256 = SHA256.Create()) { + byte[] inputBytes = Encoding.UTF8.GetBytes(path); + byte[] hashBytes = sha256.ComputeHash(inputBytes); + var hash = BitConverter.ToString(hashBytes).Replace("-", "").Substring(0, 6).ToUpper(); + return $"{name}-{hash}"; + } + } + + public static string GetTempDownloadFilePath(string osxFileName) { + if (UnityHelper.Platform == RuntimePlatform.OSXEditor) { + // project specific temp directory that is writeable on MacOS (Path.GetTempPath() wasn't when run through HotReload.app) + return Path.GetFullPath(PackageConst.LibraryCachePath + $"/HotReloadServerTemp/{osxFileName}"); + } else { + return Path.GetTempFileName(); + } + } + + public static string GetHotReloadTempDir() { + if (UnityHelper.Platform == RuntimePlatform.OSXEditor) { + // project specific temp directory that is writeable on MacOS (Path.GetTempPath() wasn't when run through HotReload.app) + return Path.GetFullPath(PackageConst.LibraryCachePath + "/HotReloadServerTemp"); + } else { + if (projectIdentifier != null) { + return Path.Combine(Path.GetTempPath(), "HotReloadTemp", projectIdentifier); + } else { + return Path.Combine(Path.GetTempPath(), "HotReloadTemp"); + } + } + } + + public static string GetAppDataPath() { +# if (UNITY_EDITOR_OSX) + var baseDir = "/Users/Shared"; +# elif (UNITY_EDITOR_LINUX) + var baseDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); +# else + var baseDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); +#endif + return Path.Combine(baseDir, "singularitygroup-hotreload"); + } + + public static string GetExecutableTargetDir() { + if (PackageConst.IsAssetStoreBuild) { + return Path.Combine(GetAppDataPath(), "asset-store", $"executables_{PackageConst.ServerVersion.Replace('.', '-')}"); + } + return Path.Combine(GetAppDataPath(), $"executables_{PackageConst.ServerVersion.Replace('.', '-')}"); + } + + public static string GetCliTempDir() { + return Path.Combine(GetHotReloadTempDir(), "MethodPatches"); + } + + public static void Chmod(string targetFile, string flags = "+x") { + // ReSharper disable once PossibleNullReferenceException + Process.Start(new ProcessStartInfo("chmod", $"{flags} \"{targetFile}\"") { + UseShellExecute = false, + }).WaitForExit(2000); + } + + public static bool TryFindServerDir(out string path) { + const string serverBasePath = "Packages/com.singularitygroup.hotreload/Server"; + if(Directory.Exists(serverBasePath)) { + path = Path.GetFullPath(serverBasePath); + return true; + } + + //Not found in packages. Try to find in assets folder. + //fast path - this is the expected folder + const string alternativeExecutablePath = "Assets/HotReload/Server"; + if(Directory.Exists(alternativeExecutablePath)) { + path = Path.GetFullPath(alternativeExecutablePath); + return true; + } + //slow path - try to find the server directory somewhere in the assets folder + var candidates = Directory.GetDirectories("Assets", "HotReload", SearchOption.AllDirectories); + foreach(var candidate in candidates) { + var serverDir = Path.Combine(candidate, "Server"); + if(Directory.Exists(serverDir)) { + path = Path.GetFullPath(serverDir); + return true; + } + } + path = null; + return false; + } + + public static string GetPidFilePath(string hotreloadTempDir) { + return Path.GetFullPath(Path.Combine(hotreloadTempDir, "server.pid")); + } + + public static void KillLastKnownHotReloadProcess() { + var pidPath = GetPidFilePath(GetHotReloadTempDir()); + try { + var pid = int.Parse(File.ReadAllText(pidPath)); + Process.GetProcessById(pid).Kill(); + } + catch { + //ignore + } + File.Delete(pidPath); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs.meta new file mode 100644 index 000000000..d52806cfc --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b0243b348dec4a308dc7b98e09842d2c +timeCreated: 1673820875 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs new file mode 100644 index 000000000..660149030 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs @@ -0,0 +1,13 @@ + +using System.Threading.Tasks; + +namespace SingularityGroup.HotReload.Editor.Cli { + class FallbackCliController : ICliController { + public string BinaryFileName => ""; + public string PlatformName => ""; + public bool CanOpenInBackground => false; + public Task Start(StartArgs args) => Task.CompletedTask; + + public Task Stop() => Task.CompletedTask; + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs.meta new file mode 100644 index 000000000..f6b068227 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 090ed5d45f294f0d8799879206139bd6 +timeCreated: 1673824275 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs new file mode 100644 index 000000000..8cac04032 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs @@ -0,0 +1,239 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor.Cli { + [InitializeOnLoad] + public static class HotReloadCli { + internal static readonly ICliController controller; + + //InitializeOnLoad ensures controller gets initialized on unity thread + static HotReloadCli() { + controller = + #if UNITY_EDITOR_OSX + new OsxCliController(); + #elif UNITY_EDITOR_LINUX + new LinuxCliController(); + #elif UNITY_EDITOR_WIN + new WindowsCliController(); + #else + new FallbackCliController(); + #endif + } + + public static bool CanOpenInBackground => controller.CanOpenInBackground; + + /// + /// Public API: Starts the Hot Reload server. Must be on the main thread + /// + public static Task StartAsync() { + return StartAsync( + exposeServerToNetwork: HotReloadPrefs.ExposeServerToLocalNetwork, + allAssetChanges: HotReloadPrefs.AllAssetChanges, + createNoWindow: HotReloadPrefs.DisableConsoleWindow + ); + } + + internal static async Task StartAsync(bool exposeServerToNetwork, bool allAssetChanges, bool createNoWindow, LoginData loginData = null) { + var port = await Prepare().ConfigureAwait(false); + await ThreadUtility.SwitchToThreadPool(); + StartArgs args; + if (TryGetStartArgs(UnityHelper.DataPath, exposeServerToNetwork, allAssetChanges, createNoWindow, loginData, port, out args)) { + await controller.Start(args); + } + } + + /// + /// Public API: Stops the Hot Reload server + /// + /// + /// This is a no-op in case the server is not running + /// + public static Task StopAsync() { + return controller.Stop(); + } + + class Config { +#pragma warning disable CS0649 + public bool useBuiltInProjectGeneration; +#pragma warning restore CS0649 + } + + static bool TryGetStartArgs(string dataPath, bool exposeServerToNetwork, bool allAssetChanges, bool createNoWindow, LoginData loginData, int port, out StartArgs args) { + string serverDir; + if(!CliUtils.TryFindServerDir(out serverDir)) { + Log.Warning($"Failed to start the Hot Reload Server. " + + $"Unable to locate the 'Server' directory. " + + $"Make sure the 'Server' directory is " + + $"somewhere in the Assets folder inside a 'HotReload' folder or in the HotReload package"); + args = null; + return false; + } + + Config config; + if (File.Exists(PackageConst.ConfigFileName)) { + config = JsonConvert.DeserializeObject(File.ReadAllText(PackageConst.ConfigFileName)); + } else { + config = new Config(); + } + var hotReloadTmpDir = CliUtils.GetHotReloadTempDir(); + var cliTempDir = CliUtils.GetCliTempDir(); + // Versioned path so that we only need to extract the binary once. User can have multiple projects + // on their machine using different HotReload versions. + var executableTargetDir = CliUtils.GetExecutableTargetDir(); + Directory.CreateDirectory(executableTargetDir); // ensure exists + var executableSourceDir = Path.Combine(serverDir, controller.PlatformName); + var unityProjDir = Path.GetDirectoryName(dataPath); + string slnPath; + if (config.useBuiltInProjectGeneration) { + var info = new DirectoryInfo(Path.GetFullPath(".")); + slnPath = Path.Combine(Path.GetFullPath("."), info.Name + ".sln"); + if (!File.Exists(slnPath)) { + Log.Warning($"Failed to start the Hot Reload Server. Cannot find solution file. Please disable \"useBuiltInProjectGeneration\" in settings to enable custom project generation."); + args = null; + return false; + } + Log.Info("Using default project generation. If you encounter any problem with Unity's default project generation consider disabling it to use custom project generation."); + try { + Directory.Delete(ProjectGeneration.ProjectGeneration.tempDir, true); + } catch(Exception ex) { + Log.Exception(ex); + } + } else { + slnPath = ProjectGeneration.ProjectGeneration.GetSolutionFilePath(dataPath); + } + + if (!File.Exists(slnPath)) { + Log.Warning($"No .sln file found. Open any c# file to generate it so Hot Reload can work properly"); + } + + var searchAssemblies = string.Join(";", CodePatcher.I.GetAssemblySearchPaths()); + var cliArguments = $@"-u ""{unityProjDir}"" -s ""{slnPath}"" -t ""{cliTempDir}"" -a ""{searchAssemblies}"" -ver ""{PackageConst.Version}"" -proc ""{Process.GetCurrentProcess().Id}"" -assets ""{allAssetChanges}"" -p ""{port}"""; + if (loginData != null) { + cliArguments += $@" -email ""{loginData.email}"" -pass ""{loginData.password}"""; + } + if (exposeServerToNetwork) { + // server will listen on local network interface (default is localhost only) + cliArguments += " -e true"; + } + args = new StartArgs { + hotreloadTempDir = hotReloadTmpDir, + cliTempDir = cliTempDir, + executableTargetDir = executableTargetDir, + executableSourceDir = executableSourceDir, + cliArguments = cliArguments, + unityProjDir = unityProjDir, + createNoWindow = createNoWindow, + }; + return true; + } + + private static int DiscoverFreePort() { + var maxAttempts = 10; + for (int attempt = 0; attempt < maxAttempts; attempt++) { + var port = RequestHelper.defaultPort + attempt; + if (IsPortInUse(port)) { + continue; + } + return port; + } + // we give up at this point + return RequestHelper.defaultPort + maxAttempts; + } + + public static bool IsPortInUse(int port) { + // Note that there is a racecondition that a port gets occupied after checking. + // However, it will very rare someone will run into this. +#if UNITY_EDITOR_WIN + IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); + IPEndPoint[] activeTcpListeners = ipGlobalProperties.GetActiveTcpListeners(); + + foreach (IPEndPoint endPoint in activeTcpListeners) { + if (endPoint.Port == port) { + return true; + } + } + + return false; +#else + try { + using (TcpClient tcpClient = new TcpClient()) { + tcpClient.Connect(IPAddress.Loopback, port); // Try to connect to the specified port + return true; + } + } catch (SocketException) { + return false; + } catch (Exception e) { + Log.Exception(e); + // act as if the port is allocated + return true; + } +#endif + } + + + static async Task Prepare() { + await ThreadUtility.SwitchToMainThread(); + + var dataPath = UnityHelper.DataPath; + await ProjectGeneration.ProjectGeneration.EnsureSlnAndCsprojFiles(dataPath); + await PrepareBuildInfoAsync(); + PrepareSystemPathsFile(); + + var port = DiscoverFreePort(); + HotReloadState.ServerPort = port; + RequestHelper.SetServerPort(port); + return port; + } + + static bool didLogWarning; + internal static async Task PrepareBuildInfoAsync() { + await ThreadUtility.SwitchToMainThread(); + var buildInfoInput = await BuildInfoHelper.GetGenerateBuildInfoInput(); + await Task.Run(() => { + try { + var buildInfo = BuildInfoHelper.GenerateBuildInfoThreaded(buildInfoInput); + PrepareBuildInfo(buildInfo); + } catch (Exception e) { + if (!didLogWarning) { + Log.Warning($"Preparing build info failed! On-device functionality might not work. Exception: {e}"); + didLogWarning = true; + } else { + Log.Debug($"Preparing build info failed! On-device functionality might not work. Exception: {e}"); + } + } + }); + } + + internal static void PrepareBuildInfo(BuildInfo buildInfo) { + // When starting server make sure it starts with correct player data state. + // (this fixes issue where Unity is in background and not sending files state). + // Always write player data because you can be on any build target and want to connect with a downloaded android build. + var json = buildInfo.ToJson(); + var cliTempDir = CliUtils.GetCliTempDir(); + Directory.CreateDirectory(cliTempDir); + File.WriteAllText(Path.Combine(cliTempDir, "playerdata.json"), json); + } + + static void PrepareSystemPathsFile() { +#pragma warning disable CS0618 // obsolete since 2023 + var lvl = PlayerSettings.GetApiCompatibilityLevel(EditorUserBuildSettings.selectedBuildTargetGroup); +#pragma warning restore CS0618 +#if UNITY_2020_3_OR_NEWER + var dirs = UnityEditor.Compilation.CompilationPipeline.GetSystemAssemblyDirectories(lvl); +#else + var t = typeof(UnityEditor.Editor).Assembly.GetType("UnityEditor.Scripting.ScriptCompilation.MonoLibraryHelpers"); + var m = t.GetMethod("GetSystemReferenceDirectories"); + var dirs = m.Invoke(null, new object[] { lvl }); +#endif + Directory.CreateDirectory(PackageConst.LibraryCachePath); + File.WriteAllText(PackageConst.LibraryCachePath + "/systemAssemblies.json", JsonConvert.SerializeObject(dirs)); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs.meta new file mode 100644 index 000000000..c7339ed72 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9f756ed6b78d428b8b9f83a6544317fe +timeCreated: 1673820326 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs new file mode 100644 index 000000000..93d88262c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; + +namespace SingularityGroup.HotReload.Editor.Cli { + interface ICliController { + string BinaryFileName {get;} + string PlatformName {get;} + bool CanOpenInBackground {get;} + + Task Start(StartArgs args); + + Task Stop(); + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs.meta new file mode 100644 index 000000000..52c7def49 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8cba48e21f76483da3ba615915e731fd +timeCreated: 1673820542 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs new file mode 100644 index 000000000..9bb68ee0c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs @@ -0,0 +1,73 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Threading.Tasks; +using Debug = UnityEngine.Debug; + +namespace SingularityGroup.HotReload.Editor.Cli { + + class LinuxCliController : ICliController { + Process process; + + public string BinaryFileName => "CodePatcherCLI"; + public string PlatformName => "linux-x64"; + public bool CanOpenInBackground => true; + + public Task Start(StartArgs args) { + var startScript = Path.Combine(args.executableSourceDir, "hotreload-start-script.sh"); + if (!File.Exists(startScript)) { + throw new FileNotFoundException(startScript); + } + File.WriteAllText(startScript, File.ReadAllText(startScript).Replace("\r\n", "\n")); + CliUtils.Chmod(startScript); + + var title = CodePatcher.TAG + "Server " + new DirectoryInfo(args.unityProjDir).Name; + title = title.Replace(" ", "-"); + title = title.Replace("'", ""); + + var cliargsfile = Path.GetTempFileName(); + File.WriteAllText(cliargsfile,args.cliArguments); + var codePatcherProc = Process.Start(new ProcessStartInfo { + FileName = startScript, + Arguments = + $"--title \"{title}\"" + + $" --executables-source-dir \"{args.executableSourceDir}\" " + + $" --executable-taget-dir \"{args.executableTargetDir}\"" + + $" --pidfile \"{CliUtils.GetPidFilePath(args.hotreloadTempDir)}\"" + + $" --cli-arguments-file \"{cliargsfile}\"" + + $" --method-patch-dir \"{args.cliTempDir}\"" + + $" --create-no-window \"{args.createNoWindow}\"", + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true + }); + if (codePatcherProc == null) { + if (File.Exists(cliargsfile)) { + File.Delete(cliargsfile); + } + throw new Exception("Could not start code patcher process."); + } + codePatcherProc.BeginErrorReadLine(); + codePatcherProc.BeginOutputReadLine(); + codePatcherProc.OutputDataReceived += (_, a) => { + }; + // error data can also mean we kill the proc beningly + codePatcherProc.ErrorDataReceived += (_, a) => { + }; + process = codePatcherProc; + return Task.CompletedTask; + } + + public async Task Stop() { + await RequestHelper.KillServer(); + try { + // process.CloseMainWindow throws if proc already exited. + // also we just rely on the pid file it is fine + CliUtils.KillLastKnownHotReloadProcess(); + } catch { + //ignored + } + process = null; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs.meta new file mode 100644 index 000000000..5ba60e5e9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c894a69d595d4ada8cfa4afe23c68ab9 +timeCreated: 1673820131 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs new file mode 100644 index 000000000..d7034e581 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs @@ -0,0 +1,189 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Editor.Semver; +using Debug = UnityEngine.Debug; + +namespace SingularityGroup.HotReload.Editor.Cli { + class OsxCliController : ICliController { + Process process; + + public string BinaryFileName => "HotReload.app.zip"; + public string PlatformName => "osx-x64"; + public bool CanOpenInBackground => false; + + /// In MacOS 13 Ventura, our app cannot launch a terminal window. + /// We use a custom app that launches HotReload server and shows it's output (just like a terminal would). + // Including MacOS 12 Monterey as well so I can dogfood it -Troy + private static bool UseCustomConsoleApp() => MacOSVersion.Value.Major >= 12; + + // dont use static because null comparison on SemVersion is broken + private static readonly Lazy MacOSVersion = new Lazy(() => { + //UnityHelper.OperatingSystem; // in Unity 2018 it returns 10.16 on monterey (no idea why) + //Environment.OSVersion returns unix version like 21.x + var startinfo = new ProcessStartInfo { + FileName = "/usr/bin/sw_vers", + Arguments = "-productVersion", + UseShellExecute = false, + RedirectStandardOutput = true, + CreateNoWindow = true, + }; + var process = Process.Start(startinfo); + + string osVersion = process.StandardOutput.ReadToEnd().Trim(); + + SemVersion macosVersion; + if (SemVersion.TryParse(osVersion, out macosVersion)) { + return macosVersion; + } + // should never happen + Log.Warning("Failed to detect MacOS version, if Hot Reload fails to start, please contact support."); + return SemVersion.None; + }); + + public async Task Start(StartArgs args) { + // Unzip the .app.zip to temp folder .app + var appExecutablePath = $"{args.executableTargetDir}/HotReload.app/Contents/MacOS/HotReload"; + var cliExecutablePath = $"{args.executableTargetDir}/HotReload.app/Contents/Resources/CodePatcherCLI"; + + // ensure running on threadpool + await ThreadUtility.SwitchToThreadPool(); + + // executableTargetDir is versioned, so only need to extract once. + if (!File.Exists(appExecutablePath)) { + try { + // delete only the extracted app folder (must not delete downloaded zip which is in same folder) + Directory.Delete(args.executableTargetDir + "/HotReload.app", true); + } catch (IOException) { + // ignore directory not found + } + Directory.CreateDirectory(args.executableTargetDir); + UnzipMacOsPackage($"{args.executableTargetDir}/{BinaryFileName}", args.executableTargetDir + "/"); + } + + try { + // Always stop first because rarely it has happened that the server process was still running after custom console closed. + // Note: this will also stop Hot Reload started by other Unity projects. + await Stop(); + } catch { + // ignored + } + + if (UseCustomConsoleApp()) { + await StartCustomConsole(args, appExecutablePath); + } else { + await StartTerminal(args, cliExecutablePath); + } + } + + public Task StartCustomConsole(StartArgs args, string executablePath) { + process = Process.Start(new ProcessStartInfo { + // Path to the HotReload.app + FileName = executablePath, + Arguments = args.cliArguments, + UseShellExecute = false, + }); + return Task.CompletedTask; + } + + public Task StartTerminal(StartArgs args, string executablePath) { + var pidFilePath = CliUtils.GetPidFilePath(args.hotreloadTempDir); + // To run in a Terminal window (so you can see compiler logs), we must put the arguments into a script file + // and run the script in Terminal. Terminal.app does not forward the arguments passed to it via `open --args`. + // *.command files are opened with the user's default terminal app. + var executableScriptPath = Path.Combine(Path.GetTempPath(), "Start_HotReloadServer.command"); + // You don't need to copy the cli executable on mac + // omit hashbang line, let shell use the default interpreter (easier than detecting your default shell beforehand) + File.WriteAllText(executableScriptPath, $"echo $$ > \"{pidFilePath}\"" + + $"\ncd \"{Environment.CurrentDirectory}\"" + // set cwd because 'open' launches script with $HOME as cwd. + $"\n\"{executablePath}\" {args.cliArguments} || read"); + + CliUtils.Chmod(executableScriptPath); // make it executable + CliUtils.Chmod(executablePath); // make it executable + + Directory.CreateDirectory(args.hotreloadTempDir); + Directory.CreateDirectory(args.executableTargetDir); + Directory.CreateDirectory(args.cliTempDir); + + process = Process.Start(new ProcessStartInfo { + FileName = "open", + Arguments = $"{(args.createNoWindow ? "-gj" : "")} '{executableScriptPath}'", + UseShellExecute = true, + }); + + if (process.WaitForExit(1000)) { + if (process.ExitCode != 0) { + Log.Warning("Failed to the run the start server command. ExitCode={0}\nFilepath: {1}", process.ExitCode, executableScriptPath); + } + } + else { + process.EnableRaisingEvents = true; + process.Exited += (_, __) => { + if (process.ExitCode != 0) { + Log.Warning("Failed to the run the start server command. ExitCode={0}\nFilepath: {1}", process.ExitCode, executableScriptPath); + } + }; + } + return Task.CompletedTask; + } + + public async Task Stop() { + // kill HotReload server process (on mac it has different pid to the window which started it) + await RequestHelper.KillServer(); + + // process.CloseMainWindow throws if proc already exited. + // We rely on the pid file for killing the trampoline script (in-case script is just starting and HotReload server not running yet) + process = null; + CliUtils.KillLastKnownHotReloadProcess(); + } + + static void UnzipMacOsPackage(string zipPath, string unzippedFolderPath) { + //Log.Info("UnzipMacOsPackage called with {0}\n workingDirectory = {1}", zipPath, unzippedFolderPath); + if (!zipPath.EndsWith(".zip")) { + throw new ArgumentException($"Expected to end with .zip, but it was: {zipPath}", nameof(zipPath)); + } + + if (!File.Exists(zipPath)) { + throw new ArgumentException($"zip file not found {zipPath}", nameof(zipPath)); + } + var processStartInfo = new ProcessStartInfo { + FileName = "unzip", + Arguments = $"-o \"{zipPath}\"", + WorkingDirectory = unzippedFolderPath, // unzip extracts to working directory by default + UseShellExecute = true, + CreateNoWindow = true + }; + + Process process = Process.Start(processStartInfo); + process.WaitForExit(); + if (process.ExitCode != 0) { + throw new Exception($"unzip failed with ExitCode {process.ExitCode}"); + } + //Log.Info($"did unzip to {unzippedFolderPath}"); + // Move the .app folder to unzippedFolderPath + + // find the .app directory which is now inside unzippedFolderPath directory + var foundDirs = Directory.GetDirectories(unzippedFolderPath, "*.app", SearchOption.AllDirectories); + var done = false; + var destDir = unzippedFolderPath + "HotReload.app"; + foreach (var dir in foundDirs) { + if (dir.EndsWith(".app")) { + done = true; + if (dir == destDir) { + // already in the right place + break; + } + Directory.Move(dir, destDir); + //Log.Info("Moved to " + destDir); + break; + } + } + + if (!done) { + throw new Exception("Failed to find .app directory and move it to " + destDir); + } + //Log.Info($"did unzip to {unzippedFolderPath}"); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs.meta new file mode 100644 index 000000000..66c9330f1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5ebeed1c29454bc78e5a9ee64f2c9def +timeCreated: 1673821666 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs new file mode 100644 index 000000000..7d6b2a5c4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs @@ -0,0 +1,12 @@ +namespace SingularityGroup.HotReload.Editor.Cli { + class StartArgs { + public string hotreloadTempDir; + // aka method patch temp dir + public string cliTempDir; + public string executableTargetDir; + public string executableSourceDir; + public string cliArguments; + public string unityProjDir; + public bool createNoWindow; + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs.meta new file mode 100644 index 000000000..33e4564d5 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 43d69eb7ae8aef4428da83562105bfaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs new file mode 100644 index 000000000..d623fda2a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs @@ -0,0 +1,33 @@ +using System.Diagnostics; +using System.IO; +using System.Threading.Tasks; + +namespace SingularityGroup.HotReload.Editor.Cli { + class WindowsCliController : ICliController { + Process process; + + public string BinaryFileName => "CodePatcherCLI.exe"; + public string PlatformName => "win-x64"; + public bool CanOpenInBackground => true; + + public Task Start(StartArgs args) { + process = Process.Start(new ProcessStartInfo { + FileName = Path.GetFullPath(Path.Combine(args.executableTargetDir, "CodePatcherCLI.exe")), + Arguments = args.cliArguments, + UseShellExecute = !args.createNoWindow, + CreateNoWindow = args.createNoWindow, + }); + return Task.CompletedTask; + } + + public async Task Stop() { + await RequestHelper.KillServer(); + try { + process?.CloseMainWindow(); + } catch { + //ignored + } + process = null; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs.meta new file mode 100644 index 000000000..e6b67d9ae --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e5644af69ec7404a8039ff2833610d48 +timeCreated: 1673822169 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker.meta b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker.meta new file mode 100644 index 000000000..855fa44b8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80c2056f805745542a2c295385b25479 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs new file mode 100644 index 000000000..1ef81dd40 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs @@ -0,0 +1,71 @@ +#if UNITY_2019_1_OR_NEWER +using System; +using System.IO; +using System.Threading.Tasks; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + class DefaultCompileChecker : ICompileChecker { + const string recompileFilePath = PackageConst.LibraryCachePath + "/recompile.txt"; + bool hasCompileErrors; + bool recompile; + public DefaultCompileChecker() { + CompilationPipeline.assemblyCompilationFinished += DetectCompileErrors; + CompilationPipeline.compilationFinished += OnCompilationFinished; + var currentSessionId = EditorAnalyticsSessionInfo.id; + Task.Run(() => { + try { + var compileSessionId = File.ReadAllText(recompileFilePath); + if(compileSessionId == currentSessionId.ToString()) { + ThreadUtility.RunOnMainThread(() => { + recompile = true; + _onCompilationFinished?.Invoke(); + }); + } + File.Delete(recompileFilePath); + } catch(DirectoryNotFoundException) { + //dir doesn't exist -> no recompile required + } catch(FileNotFoundException) { + //file doesn't exist -> no recompile required + } catch(Exception ex) { + Log.Warning("compile checker encountered issue: {0} {1}", ex.GetType().Name, ex.Message); + } + }); + } + + void DetectCompileErrors(string _, CompilerMessage[] messages) { + for (int i = 0; i < messages.Length; i++) { + if (messages[i].type == CompilerMessageType.Error) { + hasCompileErrors = true; + return; + } + } + } + + void OnCompilationFinished(object _) { + if(hasCompileErrors) { + //Don't recompile on compile errors. + hasCompileErrors = false; + } else { + Directory.CreateDirectory(Path.GetDirectoryName(recompileFilePath)); + File.WriteAllText(recompileFilePath, EditorAnalyticsSessionInfo.id.ToString()); + } + } + + Action _onCompilationFinished; + public event Action onCompilationFinished { + add { + if(recompile && value != null) { + value(); + } + _onCompilationFinished += value; + } + remove { + _onCompilationFinished -= value; + } + } + } +} +#endif \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs.meta new file mode 100644 index 000000000..4d400d7a9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ab09f7c657e6ecb44b65dd9f8cfc3d9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs new file mode 100644 index 000000000..967e741b9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs @@ -0,0 +1,17 @@ +using System; + +namespace SingularityGroup.HotReload.Editor { + interface ICompileChecker { + event Action onCompilationFinished; + } + + static class CompileChecker { + internal static ICompileChecker Create() { + #if UNITY_2019_1_OR_NEWER + return new DefaultCompileChecker(); + #else + return new LegacyCompileChecker(); + #endif + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs.meta new file mode 100644 index 000000000..7eb89f836 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 82bf36f2126bbd1498d4964272426e0f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs new file mode 100644 index 000000000..32569ab11 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs @@ -0,0 +1,54 @@ +#if !UNITY_2019_1_OR_NEWER +using System; +using System.Globalization; +using System.IO; +using System.Threading.Tasks; + +namespace SingularityGroup.HotReload.Editor { + class LegacyCompileChecker : ICompileChecker { + const string timestampFilePath = PackageConst.LibraryCachePath + "/lastCompileTimestamp.txt"; + const string assemblyPath = "Library/ScriptAssemblies"; + bool recompile; + public LegacyCompileChecker() { + Task.Run(() => { + var info = new DirectoryInfo(assemblyPath); + if(!info.Exists) { + return; + } + var currentCompileTimestamp = default(DateTime); + foreach (var file in info.GetFiles("*.dll")) { + var fileWriteDate = file.LastWriteTimeUtc; + if(fileWriteDate > currentCompileTimestamp) { + currentCompileTimestamp = fileWriteDate; + } + } + if(File.Exists(timestampFilePath)) { + var lastTimestampStr = File.ReadAllText(timestampFilePath); + var lastTimestamp = DateTime.ParseExact(lastTimestampStr, "o", CultureInfo.CurrentCulture).ToUniversalTime(); + if(currentCompileTimestamp > lastTimestamp) { + ThreadUtility.RunOnMainThread(() => { + recompile = true; + _onCompilationFinished?.Invoke(); + }); + } + } + Directory.CreateDirectory(Path.GetDirectoryName(timestampFilePath)); + File.WriteAllText(timestampFilePath, currentCompileTimestamp.ToString("o")); + }); + } + + Action _onCompilationFinished; + public event Action onCompilationFinished { + add { + if(recompile && value != null) { + value(); + } + _onCompilationFinished += value; + } + remove { + _onCompilationFinished -= value; + } + } + } +} +#endif \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs.meta new file mode 100644 index 000000000..5e1869ad4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: f56ec68ce4b1fcc4b9c8ba5962d890f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Constants.cs b/Packages/com.singularitygroup.hotreload/Editor/Constants.cs new file mode 100644 index 000000000..b95d20bf8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Constants.cs @@ -0,0 +1,42 @@ + +namespace SingularityGroup.HotReload.Editor { + internal static class Constants { + public const string WebsiteURL = "https://hotreload.net"; + + public const string ProductPurchaseURL = WebsiteURL + "/pricing"; + public const string ProductPurchaseBusinessURL = ProductPurchaseURL + "?tab=business"; + public const string DocumentationURL = WebsiteURL + "/documentation"; + public const string AdditionalContentURL = DocumentationURL + "/getting-started#downloading-additional-content"; + public const string DownloadUrl = WebsiteURL + "/download"; + public const string ContactURL = WebsiteURL + "/contact"; + public const string ForumURL = "https://forum.unity.com/threads/hot-reload-edit-code-without-compiling.1389969/"; + public const string ManageLicenseURL = "https://billing.stripe.com/p/login/28odTObUQ0CU0Za3cc"; + public const string ManageAccountURL = "https://users.licensespring.com/login"; + public const string ForgotPasswordURL = "https://users.licensespring.com/reset-password"; + public const string ReportIssueURL = "https://gitlab.com/singularitygroup/hot-reload-for-unity/-/issues/new"; + public const string TroubleshootingURL = "https://hotreload.net/documentation/troubleshooting"; + public const string RecompileTroubleshootingURL = TroubleshootingURL + "#unity-recompiles-every-time-i-enterexit-playmode"; + public const string FeaturesDocumentationURL = DocumentationURL + "/features"; + public const string MultipleEditorsURL = DocumentationURL + "/multiple-editors"; + public const string VoteForAwardURL = "https://awards.unity.com/#best-development-tool"; + public const string UnityStoreRateAppURL = "https://assetstore.unity.com/packages/slug/254358#reviews"; + public const string ChangelogURL = WebsiteURL + "/changelog"; + public const string DiscordInviteUrl = "https://discord.com/invite/kgxAS4Bqxr"; + + public const int DaysToRateApp = 5; + public const int RecompileButtonTextHideWidth = 460; + public const int IndicationTextHideWidth = 360; + public const int StartButtonTextHideWidth = 400; + public const int EventsListHideHeight = 360; + public const int EventsListHideWidth = 425; + public const int UpgradeLicenseNoteHideWidth = 325; + public const int UpgradeLicenseNoteHideHeight = 150; + public const int RateAppHideHeight = 325; + public const int RateAppHideWidth = 300; + public const int EventFiltersShownHideWidth = 275; + public const int ConsumptionsHideWidth = 300; + public const int ConsumptionsHideHeight = 360; + + public const string Only40EntriesShown = "Only last 40 entries are shown"; + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Constants.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Constants.cs.meta new file mode 100644 index 000000000..cfaedfd94 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Constants.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ce502822e7fa34844bcb385f44091eb9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Constants.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Demo.meta b/Packages/com.singularitygroup.hotreload/Editor/Demo.meta new file mode 100644 index 000000000..1c88280a9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Demo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c5c2596a7a469c42a1a6b35017d8a49 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs b/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs new file mode 100644 index 000000000..895c68506 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.IO; +using SingularityGroup.HotReload.Demo; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor.Demo { + class EditorDemo : IDemo { + public bool IsServerRunning() { + return ServerHealthCheck.I.IsServerHealthy; + } + + public void OpenHotReloadWindow() { + HotReloadWindow.Open(); + } + + public void OpenScriptFile(TextAsset textAsset, int line, int column) { + var path = Path.GetFullPath(AssetDatabase.GetAssetPath(textAsset)); +#if UNITY_2019_4_OR_NEWER + Unity.CodeEditor.CodeEditor.CurrentEditor.OpenProject(path, line, column); +#else + EditorUtility.OpenWithDefaultApp(path); +#endif + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs.meta new file mode 100644 index 000000000..cb96ab3a0 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: fde6b5b57a3aeba4888a7bdaa16b3074 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs b/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs new file mode 100644 index 000000000..584c826ea --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs @@ -0,0 +1,912 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using JetBrains.Annotations; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.Editor.Demo; +using SingularityGroup.HotReload.EditorDependencies; +using SingularityGroup.HotReload.RuntimeDependencies; +using UnityEditor; +using UnityEngine; +using Debug = UnityEngine.Debug; +using Task = System.Threading.Tasks.Task; +using System.Reflection; +using System.Runtime.CompilerServices; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor.Compilation; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.IntegrationTests")] + +namespace SingularityGroup.HotReload.Editor { + internal class Config { + public bool patchEditModeOnlyOnEditorFocus; + public string[] assetBlacklist; + public bool changePlaymodeTint; + public bool disableCompilingFromEditorScripts; + public bool enableInspectorFreezeFix; + } + + [InitializeOnLoad] + internal static class EditorCodePatcher { + const string sessionFilePath = PackageConst.LibraryCachePath + "/sessionId.txt"; + const string patchesFilePath = PackageConst.LibraryCachePath + "/patches.json"; + + internal static readonly ServerDownloader serverDownloader; + internal static bool _compileError; + internal static bool _applyingFailed; + internal static bool _appliedPartially; + + static Timer timer; + static bool init; + + internal static UnityLicenseType licenseType { get; private set; } + internal static bool LoginNotRequired => PackageConst.IsAssetStoreBuild && licenseType != UnityLicenseType.UnityPro; + internal static bool compileError => _compileError; + + internal static PatchStatus patchStatus = PatchStatus.None; + + internal static event Action OnPatchHandled; + + + internal static Config config; + + static bool quitting; + static EditorCodePatcher() { + if(init) { + //Avoid infinite recursion in case the static constructor gets accessed via `InitPatchesBlocked` below + return; + } + if (File.Exists(PackageConst.ConfigFileName)) { + config = JsonConvert.DeserializeObject(File.ReadAllText(PackageConst.ConfigFileName)); + } else { + config = new Config(); + } + init = true; + UnityHelper.Init(); + //Use synchonization context if possible because it's more reliable. + ThreadUtility.InitEditor(); + if (!EditorWindowHelper.IsHumanControllingUs()) { + return; + } + + serverDownloader = new ServerDownloader(); + timer = new Timer(OnIntervalThreaded, (Action) OnIntervalMainThread, 500, 500); + + UpdateHost(); + licenseType = UnityLicenseHelper.GetLicenseType(); + var compileChecker = CompileChecker.Create(); + compileChecker.onCompilationFinished += OnCompilationFinished; + EditorApplication.delayCall += InstallUtility.CheckForNewInstall; + AddEditorFocusChangedHandler(OnEditorFocusChanged); + // When domain reloads, this is a good time to ensure server has up-to-date project information + if (ServerHealthCheck.I.IsServerHealthy) { + EditorApplication.delayCall += TryPrepareBuildInfo; + } + HotReloadSuggestionsHelper.Init(); + // reset in case last session didn't shut down properly + CheckEditorSettings(); + EditorApplication.quitting += ResetSettingsOnQuit; + + AssemblyReloadEvents.beforeAssemblyReload += () => { + HotReloadTimelineHelper.PersistTimeline(); + }; + + CompilationPipeline.compilationFinished += obj => { + // reset in case package got removed + // if it got removed, it will not be enabled again + // if it wasn't removed, settings will get handled by OnIntervalMainThread + AutoRefreshSettingChecker.Reset(); + ScriptCompilationSettingChecker.Reset(); + PlaymodeTintSettingChecker.Reset(); + HotReloadRunTab.recompiling = false; + CompileMethodDetourer.Reset(); + }; + DetectEditorStart(); + DetectVersionUpdate(); + SingularityGroup.HotReload.Demo.Demo.I = new EditorDemo(); + RecordActiveDaysForRateApp(); + if (EditorApplication.isPlayingOrWillChangePlaymode) { + CodePatcher.I.InitPatchesBlocked(patchesFilePath); + HotReloadTimelineHelper.InitPersistedEvents(); + } + +#pragma warning disable CS0612 // Type or member is obsolete + if (HotReloadPrefs.RateAppShownLegacy) { + HotReloadPrefs.RateAppShown = true; + } + if (!File.Exists(HotReloadPrefs.showOnStartupPath)) { + var showOnStartupLegacy = HotReloadPrefs.GetShowOnStartupEnum(); + HotReloadPrefs.ShowOnStartup = showOnStartupLegacy; + } +#pragma warning restore CS0612 // Type or member is obsolete + + HotReloadState.ShowingRedDot = false; + + if (DateTime.Now < new DateTime(2023, 11, 1)) { + HotReloadSuggestionsHelper.SetSuggestionsShown(HotReloadSuggestionKind.UnityBestDevelopmentToolAward2023); + } else { + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.UnityBestDevelopmentToolAward2023); + } + + EditorApplication.playModeStateChanged += state => { + if (state == PlayModeStateChange.EnteredEditMode && HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode) { + if (TryRecompileUnsupportedChanges()) { + HotReloadState.RecompiledUnsupportedChangesOnExitPlaymode = true; + } + } + }; + } + + public static void ResetSettingsOnQuit() { + quitting = true; + AutoRefreshSettingChecker.Reset(); + ScriptCompilationSettingChecker.Reset(); + PlaymodeTintSettingChecker.Reset(); + HotReloadCli.StopAsync().Forget(); + CompileMethodDetourer.Reset(); + } + + public static bool autoRecompileUnsupportedChangesSupported; + static void AddEditorFocusChangedHandler(Action handler) { + var eventInfo = typeof(EditorApplication).GetEvent("focusChanged", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); + var addMethod = eventInfo?.GetAddMethod(true) ?? eventInfo?.GetAddMethod(false); + if (addMethod != null) { + addMethod.Invoke(null, new object[]{ handler }); + } + autoRecompileUnsupportedChangesSupported = addMethod != null; + } + + private static void OnEditorFocusChanged(bool hasFocus) { + if (hasFocus && !HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately) { + TryRecompileUnsupportedChanges(); + } + } + + public static bool TryRecompileUnsupportedChanges() { + if (!HotReloadPrefs.AutoRecompileUnsupportedChanges + || HotReloadTimelineHelper.UnsupportedChangesCount == 0 + && (!HotReloadPrefs.AutoRecompilePartiallyUnsupportedChanges || HotReloadTimelineHelper.PartiallySupportedChangesCount == 0) + || _compileError + || EditorApplication.isPlaying && !HotReloadPrefs.AutoRecompileUnsupportedChangesInPlayMode + ) { + return false; + } + + if (HotReloadPrefs.ShowCompilingUnsupportedNotifications) { + EditorWindowHelper.ShowNotification(EditorWindowHelper.NotificationStatus.NeedsRecompile); + } + HotReloadRunTab.Recompile(); + return true; + } + + private static DateTime lastPrepareBuildInfo = DateTime.UtcNow; + + /// Post state for player builds. + /// Only check build target because user can change build settings whenever. + internal static void TryPrepareBuildInfo() { + // Note: we post files state even when build target is wrong + // because you might connect with a build downloaded onto the device. + if ((DateTime.UtcNow - lastPrepareBuildInfo).TotalSeconds > 5) { + lastPrepareBuildInfo = DateTime.UtcNow; + HotReloadCli.PrepareBuildInfoAsync().Forget(); + } + } + + internal static void RecordActiveDaysForRateApp() { + var unixDay = (int)(DateTimeOffset.UtcNow.ToUnixTimeSeconds() / 86400); + var activeDays = GetActiveDaysForRateApp(); + if (activeDays.Count < Constants.DaysToRateApp && activeDays.Add(unixDay.ToString())) { + HotReloadPrefs.ActiveDays = string.Join(",", activeDays); + } + } + + internal static HashSet GetActiveDaysForRateApp() { + if (string.IsNullOrEmpty(HotReloadPrefs.ActiveDays)) { + return new HashSet(); + } + return new HashSet(HotReloadPrefs.ActiveDays.Split(',')); + } + + // CheckEditorStart distinguishes between domain reload and first editor open + // We have some separate logic on editor start (InstallUtility.HandleEditorStart) + private static void DetectEditorStart() { + var editorId = EditorAnalyticsSessionInfo.id; + var currVersion = PackageConst.Version; + Task.Run(() => { + try { + var lines = File.Exists(sessionFilePath) ? File.ReadAllLines(sessionFilePath) : Array.Empty(); + + long prevSessionId = -1; + string prevVersion = null; + if (lines.Length >= 2) { + long.TryParse(lines[1], out prevSessionId); + } + if (lines.Length >= 3) { + prevVersion = lines[2].Trim(); + } + var updatedFromVersion = (prevSessionId != -1 && currVersion != prevVersion) ? prevVersion : null; + + if (prevSessionId != editorId && prevSessionId != 0) { + // back to mainthread + ThreadUtility.RunOnMainThread(() => { + InstallUtility.HandleEditorStart(updatedFromVersion); + + var newEditorId = EditorAnalyticsSessionInfo.id; + if (newEditorId != 0) { + Task.Run(() => { + try { + // editorId isn't available on first domain reload, must do it here + File.WriteAllLines(sessionFilePath, new[] { + "1", // serialization version + newEditorId.ToString(), + currVersion, + }); + + } catch (IOException) { + // ignore + } + }); + } + }); + } + + } catch (IOException) { + // ignore + } catch (Exception e) { + ThreadUtility.LogException(e); + } + }); + } + + private static void DetectVersionUpdate() { + if (serverDownloader.CheckIfDownloaded(HotReloadCli.controller)) { + return; + } + ServerHealthCheck.instance.CheckHealth(); + if (!ServerHealthCheck.I.IsServerHealthy) { + return; + } + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When updating Hot Reload, the server must be restarted for the update to take effect." + + "\nDo you want to restart it now?", + "Restart server", "Don't restart"); + if (restartServer) { + RestartCodePatcher().Forget(); + } + } + + private static void UpdateHost() { + RequestHelper.SetServerInfo(new PatchServerInfo(RequestHelper.defaultServerHost, HotReloadState.ServerPort, null, Path.GetFullPath("."))); + } + + static void OnIntervalThreaded(object o) { + ServerHealthCheck.instance.CheckHealth(); + ThreadUtility.RunOnMainThread((Action)o); + if (serverDownloader.Progress >= 1f) { + serverDownloader.CheckIfDownloaded(HotReloadCli.controller); + } + } + + private static bool _requestingFlushErrors; + private static long _lastErrorFlush; + private static async Task RequestFlushErrors() { + _requestingFlushErrors = true; + try { + await RequestFlushErrorsCore(); + } finally { + _requestingFlushErrors = false; + } + } + + private static async Task RequestFlushErrorsCore() { + var pollFrequency = 500; + // Delay until we've hit the poll request frequency + var waitMs = (int)Mathf.Clamp(pollFrequency - ((DateTime.Now.Ticks / (float)TimeSpan.TicksPerMillisecond) - _lastErrorFlush), 0, pollFrequency); + await Task.Delay(waitMs); + await FlushErrors(); + _lastErrorFlush = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; + } + + static async Task FlushErrors() { + var response = await RequestHelper.RequestFlushErrors(); + if (response == null) { + return; + } + foreach (var responseWarning in response.warnings) { + if (responseWarning.Contains("Scripts have compile errors")) { + Log.Error(responseWarning); + } else { + Log.Warning(responseWarning); + } + + if (responseWarning.Contains("Multidimensional arrays are not supported")) { + await ThreadUtility.SwitchToMainThread(); + HotReloadSuggestionsHelper.SetSuggestionsShown(HotReloadSuggestionKind.MultidimensionalArrays); + } + } + foreach (var responseError in response.errors) { + Log.Error(responseError); + } + } + + internal static bool firstPatchAttempted; + static void OnIntervalMainThread() { + HotReloadSuggestionsHelper.Check(); + + // Moved from RequestServerInfo to avoid GC allocations when HR is not active + + // Repaint if the running Status has changed since the layout changes quite a bit + if (running != ServerHealthCheck.I.IsServerHealthy) { + if (HotReloadWindow.Current) { + HotReloadRunTab.RepaintInstant(); + } + running = ServerHealthCheck.I.IsServerHealthy; + } + if (!running) { + startupCompletedAt = null; + } + if (!running && !StartedServerRecently()) { + // Reset startup progress + startupProgress = null; + } + + if(ServerHealthCheck.I.IsServerHealthy) { + // NOTE: avoid calling this method when HR is not running to avoid allocations + RequestServerInfo(); + TryPrepareBuildInfo(); + if (!requestingCompile && (!config.patchEditModeOnlyOnEditorFocus || Application.isPlaying || UnityEditorInternal.InternalEditorUtility.isApplicationActive)) { + RequestHelper.PollMethodPatches(HotReloadState.LastPatchId, resp => HandleResponseReceived(resp)); + } + RequestHelper.PollPatchStatus(resp => { + patchStatus = resp.patchStatus; + if (patchStatus == PatchStatus.Compiling) { + startWaitingForCompile = null; + } + if (patchStatus == PatchStatus.Patching) { + firstPatchAttempted = true; + if (HotReloadPrefs.ShowPatchingNotifications) { + EditorWindowHelper.ShowNotification(EditorWindowHelper.NotificationStatus.Patching, maxDuration: 10); + } + } else if (HotReloadPrefs.ShowPatchingNotifications) { + EditorWindowHelper.RemoveNotification(); + } + }, patchStatus); + if (HotReloadPrefs.AllAssetChanges) { + RequestHelper.PollAssetChanges(HandleAssetChange); + } + } + if (!ServerHealthCheck.I.IsServerHealthy) { + stopping = false; + } + if (startupProgress?.Item1 == 1) { + starting = false; + } + if (!_requestingFlushErrors && Running) { + RequestFlushErrors().Forget(); + } + CheckEditorSettings(); + } + + static void CheckEditorSettings() { + if (quitting) { + return; + } + CheckAutoRefresh(); + CheckScriptCompilation(); + CheckPlaymodeTint(); + CheckAssetDatabaseRefresh(); + } + + static void CheckAutoRefresh() { + if (HotReloadPrefs.AllowDisableUnityAutoRefresh && ServerHealthCheck.I.IsServerHealthy) { + AutoRefreshSettingChecker.Apply(); + AutoRefreshSettingChecker.Check(); + } else { + AutoRefreshSettingChecker.Reset(); + } + } + + static void CheckScriptCompilation() { + if (HotReloadPrefs.AllowDisableUnityAutoRefresh && ServerHealthCheck.I.IsServerHealthy) { + ScriptCompilationSettingChecker.Apply(); + ScriptCompilationSettingChecker.Check(); + } else { + ScriptCompilationSettingChecker.Reset(); + } + } + + static string[] assetExtensionBlacklist = new[] { + ".cs", + // TODO add setting to allow scenes to get hot reloaded for users who collaborate (their scenes change externally) + ".unity", + // safer to ignore meta files completely until there's a use-case + ".meta", + // debug files + ".mdb", + ".pdb", + // ".shader", //use assetBlacklist instead + }; + + public static string[] compileFiles = new[] { + ".asmdef", + ".asmref", + ".rsp", + }; + + public static string[] plugins = new[] { + // native plugins + ".dll", + ".bundle", + ".dylib", + ".so", + // plugin scripts + ".cpp", + ".h", + ".aar", + ".jar", + ".a", + ".java" + }; + + static void HandleAssetChange(string assetPath) { + // ignore directories + if (Directory.Exists(assetPath)) { + return; + } + foreach (var compileFile in compileFiles) { + if (assetPath.EndsWith(compileFile, StringComparison.Ordinal)) { + HotReloadTimelineHelper.CreateErrorEventEntry($"errors: AssemblyFileEdit: Editing assembly files requires recompiling in Unity. in {assetPath}", entryType: EntryType.Foldout); + _applyingFailed = true; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately || UnityEditorInternal.InternalEditorUtility.isApplicationActive) { + TryRecompileUnsupportedChanges(); + } + return; + } + } + // Add plugin changes to unsupported changes list + foreach (var plugin in plugins) { + if (assetPath.EndsWith(plugin, StringComparison.Ordinal)) { + HotReloadTimelineHelper.CreateErrorEventEntry($"errors: NativePluginEdit: Editing native plugins requires recompiling in Unity. in {assetPath}", entryType: EntryType.Foldout); + _applyingFailed = true; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately || UnityEditorInternal.InternalEditorUtility.isApplicationActive) { + TryRecompileUnsupportedChanges(); + } + return; + } + } + + // ignore file extensions that trigger domain reload + if (!HotReloadPrefs.IncludeShaderChanges) { + if (assetPath.EndsWith(".shader", StringComparison.Ordinal)) { + return; + } + } + foreach (var blacklisted in assetExtensionBlacklist) { + if (assetPath.EndsWith(blacklisted, StringComparison.Ordinal)) { + return; + } + } + if (config?.assetBlacklist != null) { + foreach (var blacklisted in config.assetBlacklist) { + if (assetPath.EndsWith(blacklisted, StringComparison.Ordinal)) { + return; + } + } + } + var relativePath = GetRelativePath(assetPath, Path.GetFullPath("Assets")); + var relativePathPackages = GetRelativePath(assetPath, Path.GetFullPath("Packages")); + // ignore files outside assets and packages folders + if (relativePath.StartsWith("..", StringComparison.Ordinal) + && relativePathPackages.StartsWith("..", StringComparison.Ordinal) + ) { + return; + } + try { + if (!File.Exists(assetPath)) { + AssetDatabase.DeleteAsset(relativePath); + } else { + AssetDatabase.ImportAsset(relativePath, ImportAssetOptions.ForceUpdate); + } + } catch (Exception e){ + Log.Warning($"Refreshing asset at path: {assetPath} failed due to exception: {e}"); + } + } + + public static string GetRelativePath(string filespec, string folder) { + Uri pathUri = new Uri(filespec); + Uri folderUri = new Uri(folder); + return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); + } + + static void CheckPlaymodeTint() { + if (config.changePlaymodeTint && ServerHealthCheck.I.IsServerHealthy && Application.isPlaying) { + PlaymodeTintSettingChecker.Apply(); + PlaymodeTintSettingChecker.Check(); + } else { + PlaymodeTintSettingChecker.Reset(); + } + } + + static void CheckAssetDatabaseRefresh() { + if (config.disableCompilingFromEditorScripts && ServerHealthCheck.I.IsServerHealthy) { + CompileMethodDetourer.Apply(); + } else { + CompileMethodDetourer.Reset(); + } + } + + static void HandleResponseReceived(MethodPatchResponse response) { + HandleRemovedUnityMethods(response.removedMethod); + + RegisterPatchesResult patchResult = null; + if (response.patches?.Length > 0) { + LogBurstHint(response); + patchResult = CodePatcher.I.RegisterPatches(response, persist: true); + CodePatcher.I.SaveAppliedPatches(patchesFilePath).Forget(); + } + + var partiallySupportedChangesFiltered = new List(response.partiallySupportedChanges ?? Array.Empty()); + partiallySupportedChangesFiltered.RemoveAll(x => !HotReloadTimelineHelper.GetPartiallySupportedChangePref(x)); + var failuresDeduplicated = new HashSet(response.failures ?? Array.Empty()); + _compileError = response.failures?.Any(failure => failure.Contains("error CS")) ?? false; + _applyingFailed = response.failures?.Length > 0 || patchResult?.patchFailures.Count > 0; + _appliedPartially = !_applyingFailed && partiallySupportedChangesFiltered.Count > 0; + + if (_compileError) { + HotReloadTimelineHelper.EventsTimeline.RemoveAll(e => e.alertType == AlertType.CompileError); + foreach (var failure in failuresDeduplicated) { + if (failure.Contains("error CS")) { + HotReloadTimelineHelper.CreateErrorEventEntry(failure); + } + } + } else if (_applyingFailed) { + if (partiallySupportedChangesFiltered.Count > 0) { + foreach (var responsePartiallySupportedChange in partiallySupportedChangesFiltered) { + HotReloadTimelineHelper.CreatePartiallyAppliedEventEntry(responsePartiallySupportedChange, entryType: EntryType.Child); + } + } + foreach (var failure in failuresDeduplicated) { + HotReloadTimelineHelper.CreateErrorEventEntry(failure, entryType: EntryType.Child); + } + if (patchResult?.patchFailures.Count > 0) { + foreach (var failure in patchResult.patchFailures) { + SMethod method = failure.Item1; + string error = failure.Item2; + HotReloadTimelineHelper.CreatePatchFailureEventEntry(error, methodName: GetMethodName(method), methodSimpleName: method.simpleName, entryType: EntryType.Child); + } + } + HotReloadTimelineHelper.CreateReloadFinishedWithWarningsEventEntry(); + HotReloadSuggestionsHelper.SetSuggestionsShown(HotReloadSuggestionKind.UnsupportedChanges); + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately || UnityEditorInternal.InternalEditorUtility.isApplicationActive) { + TryRecompileUnsupportedChanges(); + } + } else if (_appliedPartially) { + foreach (var responsePartiallySupportedChange in partiallySupportedChangesFiltered) { + HotReloadTimelineHelper.CreatePartiallyAppliedEventEntry(responsePartiallySupportedChange, entryType: EntryType.Child, detailed: false); + } + HotReloadTimelineHelper.CreateReloadPartiallyAppliedEventEntry(); + + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately || UnityEditorInternal.InternalEditorUtility.isApplicationActive) { + TryRecompileUnsupportedChanges(); + } + } else { + HotReloadTimelineHelper.CreateReloadFinishedEventEntry(); + } + + // When patching different assembly, compile error will get removed, even though it's still there + // It's a shortcut we take for simplicity + if (!_compileError) { + HotReloadTimelineHelper.EventsTimeline.RemoveAll(x => x.alertType == AlertType.CompileError); + } + + if (HotReloadWindow.Current) { + HotReloadWindow.Current.Repaint(); + } + HotReloadState.LastPatchId = response.id; + OnPatchHandled?.Invoke(); + } + + static string GetMethodName(SMethod method) { + var spaceIndex = method.displayName.IndexOf(" ", StringComparison.Ordinal); + if (spaceIndex > 0) { + return method.displayName.Substring(spaceIndex); + } + return method.displayName; + } + + + static void HandleRemovedUnityMethods(SMethod[] removedMethods) { + if (removedMethods == null) { + return; + } + foreach(var sMethod in removedMethods) { + try { + var candidates = CodePatcher.I.SymbolResolver.Resolve(sMethod.assemblyName.Replace(".dll", "")); + var asm = candidates[0]; + var module = asm.GetLoadedModules()[0]; + var oldMethod = module.ResolveMethod(sMethod.metadataToken); + UnityEventHelper.RemoveUnityEventMethod(oldMethod); + } catch(Exception ex) { + Log.Warning("Encountered exception in RemoveUnityEventMethod: {0} {1}", ex.GetType().Name, ex.Message); + } + } + } + + [Conditional("UNITY_2022_2_OR_NEWER")] + static void LogBurstHint(MethodPatchResponse response) { + if(HotReloadPrefs.LoggedBurstHint) { + return; + } + foreach (var patch in response.patches) { + if(patch.unityJobs.Length > 0) { + Debug.LogWarning("A unity job was hot reloaded. " + + "This will cause a harmless warning that can be ignored. " + + $"More info about this can be found here: {Constants.TroubleshootingURL}"); + HotReloadPrefs.LoggedBurstHint = true; + break; + } + } + } + + private static DateTime? startWaitingForCompile; + static void OnCompilationFinished() { + ServerHealthCheck.instance.CheckHealth(); + if(ServerHealthCheck.I.IsServerHealthy) { + startWaitingForCompile = DateTime.UtcNow; + firstPatchAttempted = false; + RequestCompile().Forget(); + } + Task.Run(() => File.Delete(patchesFilePath)); + HotReloadTimelineHelper.ClearPersistance(); + } + + static bool requestingCompile; + static async Task RequestCompile() { + requestingCompile = true; + try { + await RequestHelper.RequestClearPatches(); + await ProjectGeneration.ProjectGeneration.GenerateSlnAndCsprojFiles(Application.dataPath); + await RequestHelper.RequestCompile(); + } finally { + requestingCompile = false; + } + } + + private static bool stopping; + private static bool starting; + private static DateTime? startupCompletedAt; + private static Tuple startupProgress; + + internal static bool Started => ServerHealthCheck.I.IsServerHealthy && DownloadProgress == 1 && StartupProgress?.Item1 == 1; + internal static bool Starting => (StartedServerRecently() || ServerHealthCheck.I.IsServerHealthy) && !Started && starting && patchStatus != PatchStatus.CompileError; + internal static bool Stopping => stopping && Running; + internal static bool Compiling => DateTime.UtcNow - startWaitingForCompile < TimeSpan.FromSeconds(5) || patchStatus == PatchStatus.Compiling || HotReloadRunTab.recompiling; + internal static Tuple StartupProgress => startupProgress; + + + /// + /// We have a button to stop the Hot Reload server.
+ /// Store task to ensure only one stop attempt at a time. + ///
+ private static DateTime? serverStartedAt; + private static DateTime? serverStoppedAt; + private static DateTime? serverRestartedAt; + private static bool StartedServerRecently() { + return DateTime.UtcNow - serverStartedAt < ServerHealthCheck.HeartBeatTimeout; + } + + internal static bool StoppedServerRecently() { + return DateTime.UtcNow - serverStoppedAt < ServerHealthCheck.HeartBeatTimeout || (!StartedServerRecently() && (startupProgress?.Item1 ?? 0) == 0); + } + + internal static bool RestartedServerRecently() { + return DateTime.UtcNow - serverRestartedAt < ServerHealthCheck.HeartBeatTimeout; + } + + private static bool requestingStart; + private static async Task StartCodePatcher(LoginData loginData = null) { + if (requestingStart || StartedServerRecently()) { + return; + } + stopping = false; + starting = true; + var exposeToNetwork = HotReloadPrefs.ExposeServerToLocalNetwork; + var allAssetChanges = HotReloadPrefs.AllAssetChanges; + var disableConsoleWindow = HotReloadPrefs.DisableConsoleWindow; + CodePatcher.I.ClearPatchedMethods(); + try { + requestingStart = true; + startupProgress = Tuple.Create(0f, "Starting Hot Reload"); + serverStartedAt = DateTime.UtcNow; + await HotReloadCli.StartAsync(exposeToNetwork, allAssetChanges, disableConsoleWindow, loginData).ConfigureAwait(false); + } + catch (Exception ex) { + ThreadUtility.LogException(ex); + } + finally { + requestingStart = false; + } + } + + private static bool requestingStop; + internal static async Task StopCodePatcher() { + stopping = true; + starting = false; + if (requestingStop) { + return; + } + CodePatcher.I.ClearPatchedMethods(); + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + try { + requestingStop = true; + await HotReloadCli.StopAsync().ConfigureAwait(false); + serverStoppedAt = DateTime.UtcNow; + await ThreadUtility.SwitchToMainThread(); + startupProgress = null; + } + catch (Exception ex) { + ThreadUtility.LogException(ex); + } + finally { + requestingStop = false; + } + } + + private static bool requestingRestart; + internal static async Task RestartCodePatcher() { + if (requestingRestart) { + return; + } + try { + requestingRestart = true; + await StopCodePatcher(); + await DownloadAndRun(); + serverRestartedAt = DateTime.UtcNow; + } + finally { + requestingRestart = false; + } + } + + + private static bool requestingDownloadAndRun; + internal static float DownloadProgress => serverDownloader.Progress; + internal static bool DownloadRequired => DownloadProgress < 1f; + internal static bool DownloadStarted => serverDownloader.Started; + internal static bool RequestingDownloadAndRun => requestingDownloadAndRun; + internal static async Task DownloadAndRun(LoginData loginData = null) { + if (requestingDownloadAndRun) { + return false; + } + stopping = false; + requestingDownloadAndRun = true; + try { + if (DownloadRequired) { + var ok = await serverDownloader.PromptForDownload(); + if (!ok) { + return false; + } + } + await StartCodePatcher(loginData); + return true; + } finally { + requestingDownloadAndRun = false; + } + } + + private const int SERVER_POLL_FREQUENCY_ON_STARTUP_MS = 500; + private const int SERVER_POLL_FREQUENCY_AFTER_STARTUP_MS = 2000; + private static int GetPollFrequency() { + return (startupProgress != null && startupProgress.Item1 < 1) || StartedServerRecently() + ? SERVER_POLL_FREQUENCY_ON_STARTUP_MS + : SERVER_POLL_FREQUENCY_AFTER_STARTUP_MS; + } + + internal static bool RequestingLoginInfo { get; set; } + + [CanBeNull] internal static LoginStatusResponse Status { get; private set; } + internal static void HandleStatus(LoginStatusResponse resp) { + Attribution.RegisterLogin(resp); + + bool consumptionsChanged = Status?.freeSessionRunning != resp.freeSessionRunning || Status?.freeSessionEndTime != resp.freeSessionEndTime; + bool expiresAtChanged = Status?.licenseExpiresAt != resp.licenseExpiresAt; + if (resp.consumptionsUnavailableReason == ConsumptionsUnavailableReason.UnrecoverableError + && Status?.consumptionsUnavailableReason != ConsumptionsUnavailableReason.UnrecoverableError + ) { + Log.Error("Free charges unavailabe. Please contact support if the issue persists."); + } + if (!RequestingLoginInfo && resp.requestError == null) { + Status = resp; + } + if (resp.lastLicenseError == null) { + // If we got success, we should always show an error next time it comes up + HotReloadPrefs.ErrorHidden = false; + } + + var oldStartupProgress = startupProgress; + var newStartupProgress = Tuple.Create( + resp.startupProgress, + string.IsNullOrEmpty(resp.startupStatus) ? "Starting Hot Reload" : resp.startupStatus); + + startupProgress = newStartupProgress; + // ReSharper disable once CompareOfFloatsByEqualityOperator + if (startupCompletedAt == null && newStartupProgress.Item1 == 1f) { + startupCompletedAt = DateTime.UtcNow; + } + + if (oldStartupProgress == null + || Math.Abs(oldStartupProgress.Item1 - newStartupProgress.Item1) > 0 + || oldStartupProgress.Item2 != newStartupProgress.Item2 + || consumptionsChanged + || expiresAtChanged + ) { + // Send project files state now that server can receive requests (only needed for player builds) + TryPrepareBuildInfo(); + } + } + + internal static async Task RequestLogin(string email, string password) { + RequestingLoginInfo = true; + try { + int i = 0; + while (!Running && i < 100) { + await Task.Delay(100); + i++; + } + + Status = await RequestHelper.RequestLogin(email, password, 10); + + // set to false so new error is shown + HotReloadPrefs.ErrorHidden = false; + if (Status?.isLicensed == true) { + HotReloadPrefs.LicenseEmail = email; + HotReloadPrefs.LicensePassword = Status.initialPassword ?? password; + } + } finally { + RequestingLoginInfo = false; + } + } + private static bool requestingServerInfo; + private static long lastServerPoll; + private static bool running; + internal static bool Running => ServerHealthCheck.I.IsServerHealthy; + + internal static void RequestServerInfo() { + if (requestingServerInfo) { + return; + } + RequestServerInfoAsync().Forget(); + } + + private static async Task RequestServerInfoAsync() { + requestingServerInfo = true; + try { + await RequestServerInfoCore(); + } finally { + requestingServerInfo = false; + } + } + + private static async Task RequestServerInfoCore() { + var pollFrequency = GetPollFrequency(); + // Delay until we've hit the poll request frequency + var waitMs = (int)Mathf.Clamp(pollFrequency - ((DateTime.Now.Ticks / (float)TimeSpan.TicksPerMillisecond) - lastServerPoll), 0, pollFrequency); + await Task.Delay(waitMs); + + if (!ServerHealthCheck.I.IsServerHealthy) { + return; + } + + + var resp = await RequestHelper.GetLoginStatus(30); + HandleStatus(resp); + + lastServerPoll = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs.meta new file mode 100644 index 000000000..69ca19a99 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ac7b192276a4a9d4f9098377d317cb2e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs b/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs new file mode 100644 index 000000000..7a2dd4684 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs @@ -0,0 +1,177 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using SingularityGroup.HotReload.DTO; + +namespace SingularityGroup.HotReload.Editor { + internal static class EditorIndicationState { + internal enum IndicationStatus { + Stopped, + Started, + Stopping, + Installing, + Starting, + Reloaded, + PartiallySupported, + Unsupported, + Patching, + Loading, + Compiling, + CompileErrors, + ActivationFailed, + FinishRegistration, + } + + internal static readonly string greyIconPath = "grey"; + internal static readonly string greenIconPath = "green"; + internal static readonly string redIconPath = "red"; + private static readonly Dictionary IndicationIcon = new Dictionary { + // grey icon: + { IndicationStatus.FinishRegistration, greyIconPath }, + { IndicationStatus.Stopped, greyIconPath }, + // green icon: + { IndicationStatus.Started, greenIconPath }, + // log icons: + { IndicationStatus.Reloaded, HotReloadTimelineHelper.alertIconString[AlertType.AppliedChange] }, + { IndicationStatus.Unsupported, HotReloadTimelineHelper.alertIconString[AlertType.UnsupportedChange] }, + { IndicationStatus.PartiallySupported, HotReloadTimelineHelper.alertIconString[AlertType.PartiallySupportedChange] }, + { IndicationStatus.CompileErrors, HotReloadTimelineHelper.alertIconString[AlertType.CompileError] }, + // spinner: + { IndicationStatus.Stopping, Spinner.SpinnerIconPath }, + { IndicationStatus.Starting, Spinner.SpinnerIconPath }, + { IndicationStatus.Patching, Spinner.SpinnerIconPath }, + { IndicationStatus.Loading, Spinner.SpinnerIconPath }, + { IndicationStatus.Compiling, Spinner.SpinnerIconPath }, + { IndicationStatus.Installing, Spinner.SpinnerIconPath }, + // red icon: + { IndicationStatus.ActivationFailed, redIconPath }, + }; + + private static readonly IndicationStatus[] SpinnerIndications = IndicationIcon + .Where(kvp => kvp.Value == Spinner.SpinnerIconPath) + .Select(kvp => kvp.Key) + .ToArray(); + + // NOTE: if you add longer text, make sure UI is wide enough for it + public static readonly Dictionary IndicationText = new Dictionary { + { IndicationStatus.FinishRegistration, "Finish Registration" }, + { IndicationStatus.Started, "Waiting for code changes" }, + { IndicationStatus.Stopping, "Stopping Hot Reload" }, + { IndicationStatus.Stopped, "Hot Reload inactive" }, + { IndicationStatus.Installing, "Installing" }, + { IndicationStatus.Starting, "Starting Hot Reload" }, + { IndicationStatus.Reloaded, "Reload finished" }, + { IndicationStatus.PartiallySupported, "Changes partially applied" }, + { IndicationStatus.Unsupported, "Finished with warnings" }, + { IndicationStatus.Patching, "Reloading" }, + { IndicationStatus.Compiling, "Compiling" }, + { IndicationStatus.CompileErrors, "Scripts have compile errors" }, + { IndicationStatus.ActivationFailed, "Activation failed" }, + { IndicationStatus.Loading, "Loading" }, + }; + + private const int MinSpinnerDuration = 200; + private static DateTime spinnerStartedAt; + private static IndicationStatus latestStatus; + private static bool SpinnerCompletedMinDuration => DateTime.UtcNow - spinnerStartedAt > TimeSpan.FromMilliseconds(MinSpinnerDuration); + private static IndicationStatus GetIndicationStatus() { + var status = GetIndicationStatusCore(); + + // Note: performance sensitive code, don't use Link + bool newStatusIsSpinner = false; + for (var i = 0; i < SpinnerIndications.Length; i++) { + if (SpinnerIndications[i] == status) { + newStatusIsSpinner = true; + } + } + bool latestStatusIsSpinner = false; + for (var i = 0; i < SpinnerIndications.Length; i++) { + if (SpinnerIndications[i] == latestStatus) { + newStatusIsSpinner = true; + } + } + + if (status == latestStatus) { + return status; + } else if (latestStatusIsSpinner) { + if (newStatusIsSpinner) { + return status; + } else if (SpinnerCompletedMinDuration) { + latestStatus = status; + return status; + } else { + return latestStatus; + } + } else if (newStatusIsSpinner) { + spinnerStartedAt = DateTime.UtcNow; + latestStatus = status; + return status; + } else { + spinnerStartedAt = DateTime.UtcNow; + latestStatus = IndicationStatus.Loading; + return status; + } + } + + private static IndicationStatus GetIndicationStatusCore() { + if (RedeemLicenseHelper.I.RegistrationRequired) + return IndicationStatus.FinishRegistration; + if (EditorCodePatcher.DownloadRequired && EditorCodePatcher.DownloadStarted || EditorCodePatcher.RequestingDownloadAndRun && !EditorCodePatcher.Starting && !EditorCodePatcher.Stopping) + return IndicationStatus.Installing; + if (EditorCodePatcher.Stopping) + return IndicationStatus.Stopping; + if (EditorCodePatcher.Compiling && !EditorCodePatcher.Stopping && !EditorCodePatcher.Starting && EditorCodePatcher.Running) + return IndicationStatus.Compiling; + if (EditorCodePatcher.Starting && !EditorCodePatcher.Stopping) + return IndicationStatus.Starting; + if (!EditorCodePatcher.Running) + return IndicationStatus.Stopped; + if (EditorCodePatcher.Status?.isLicensed != true && EditorCodePatcher.Status?.isFree != true && EditorCodePatcher.Status?.freeSessionFinished == true) + return IndicationStatus.ActivationFailed; + if (EditorCodePatcher.compileError) + return IndicationStatus.CompileErrors; + + // fallback on patch status + if (!EditorCodePatcher.Started && !EditorCodePatcher.Running) { + return IndicationStatus.Stopped; + } + switch (EditorCodePatcher.patchStatus) { + case PatchStatus.Idle: + if (!EditorCodePatcher.Compiling && !EditorCodePatcher.firstPatchAttempted && !EditorCodePatcher.compileError) { + return IndicationStatus.Started; + } + if (EditorCodePatcher._applyingFailed) { + return IndicationStatus.Unsupported; + } + if (EditorCodePatcher._appliedPartially) { + return IndicationStatus.PartiallySupported; + } + return IndicationStatus.Reloaded; + case PatchStatus.Patching: return IndicationStatus.Patching; + case PatchStatus.Unsupported: return IndicationStatus.Unsupported; + case PatchStatus.Compiling: return IndicationStatus.Compiling; + case PatchStatus.CompileError: return IndicationStatus.CompileErrors; + case PatchStatus.None: + default: return IndicationStatus.Reloaded; + } + } + + internal static IndicationStatus CurrentIndicationStatus => GetIndicationStatus(); + internal static bool SpinnerActive => SpinnerIndications.Contains(CurrentIndicationStatus); + internal static string IndicationIconPath => IndicationIcon[CurrentIndicationStatus]; + internal static string IndicationStatusText { + get { + var indicationStatus = CurrentIndicationStatus; + string txt; + if (indicationStatus == IndicationStatus.Starting && EditorCodePatcher.StartupProgress != null) { + txt = EditorCodePatcher.StartupProgress.Item2; + } else if (!IndicationText.TryGetValue(indicationStatus, out txt)) { + Log.Warning($"Indication text not found for status {indicationStatus}"); + } else { + txt = IndicationText[indicationStatus]; + } + return txt; + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs.meta new file mode 100644 index 000000000..692711511 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ee342ddb17e444c7a8927be3bd792ae2 +timeCreated: 1686087206 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs b/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs new file mode 100644 index 000000000..875381dd3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs @@ -0,0 +1,87 @@ + +using System; +using System.ComponentModel; +using System.Diagnostics; +using Debug = UnityEngine.Debug; + +namespace SingularityGroup.HotReload.Editor { + internal static class GitUtil { + /// + /// Fallback is PatchServerInfo.UnknownCommitHash + /// + public static string GetShortCommitHashOrFallback(int timeoutAfterMillis = 5000) { + var shortCommitHash = PatchServerInfo.UnknownCommitHash; + + var commitHash = GetShortCommitHashSafe(timeoutAfterMillis); + // On MacOS GetShortCommitHash() returns 7 characters, on Windows it returns 8 characters. + // When git command produced an unexpected result, use a fallback string + if (commitHash != null && commitHash.Length >= 6) { + shortCommitHash = commitHash.Length < 8 ? commitHash : commitHash.Substring(0, 8); + } + + return shortCommitHash; + } + + // only log exception once per domain reload, to prevent spamming the console + private static bool loggedExceptionInGetShortCommitHashSafe = false; + + /// + /// Get the git commit hash, returning null if it takes too long. + /// + /// + /// + /// + /// This method is 'better safe than sorry' because we must not break the user's build.
+ /// It is better to not know the commit hash than to fail the build. + ///
+ private static string GetShortCommitHashSafe(int timeoutAfterMillis) { + Process process = null; + // Note: don't use ReadToEndAsync because waiting on that task blocks forever. + try { + process = StartGitCommand("log", " -n 1 --pretty=format:%h"); + var stdout = process.StandardOutput; + if (process.WaitForExit(timeoutAfterMillis)) { + return stdout.ReadToEnd(); + } else { + // In a git repo with git lfs, git log can be blocked by waiting for switch branches / download lfs objects + // For that reason I disabled this warning log until a better solution is implemented (e.g. cache the commit and use cached if timeout). + // Log.Warning( + // $"[{CodePatcher.TAG}] Timed out trying to get the git commit hash, HotReload will not warn you about" + + // " a build connecting to a server running on a different commit (which is not supported)"); + return null; + } + } catch (Win32Exception ex) { + if (ex.NativeErrorCode == 2) { + // git not found, ignore because user doesn't use git for version control + return null; + } else if (!loggedExceptionInGetShortCommitHashSafe) { + loggedExceptionInGetShortCommitHashSafe = true; + Debug.LogException(ex); + } + } catch (Exception ex) { + if (!loggedExceptionInGetShortCommitHashSafe) { + loggedExceptionInGetShortCommitHashSafe = true; + Log.Exception(ex); + } + } finally { + if (process != null) { + process.Dispose(); + } + } + return null; + } + + static Process StartGitCommand(string command, string arguments, Action modifySettings = null) { + var startInfo = new ProcessStartInfo("git", command + " " + arguments) { + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false, + CreateNoWindow = true, + }; + if (modifySettings != null) { + modifySettings(startInfo); + } + return Process.Start(startInfo); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs.meta new file mode 100644 index 000000000..ff77c6400 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: f994bd5bb9f33f740ae37f8c79048a10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers.meta new file mode 100644 index 000000000..9a003a66d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 387b31d7da35b27428629a83bb4ac589 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs new file mode 100644 index 000000000..89cc54507 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using UnityEditor; +using System.Linq; +using System.Runtime.CompilerServices; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor.Compilation; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.EditorTests")] + +namespace SingularityGroup.HotReload.Editor { + internal static class AssemblyOmission { + // [MenuItem("Window/Hot Reload Dev/List omitted projects")] + private static void Check() { + Log.Info("To compile C# files same as a Player build, we must omit projects which aren't part of the selected Player build."); + var omitted = GetOmittedProjects(EditorUserBuildSettings.activeScriptCompilationDefines); + Log.Info("---------"); + + foreach (var name in omitted) { + Log.Info("omitted editor/other project named: {0}", name); + } + } + + [JsonObject(MemberSerialization.Fields)] + private class AssemblyDefinitionJson { + public string name; + public string[] defineConstraints; + } + + // scripts in Assets/ (with no asmdef) are always compiled into Assembly-CSharp + private static readonly string alwaysIncluded = "Assembly-CSharp"; + + private class Cache : AssetPostprocessor { + public static string[] ommitedProjects; + + private static void OnPostprocessAllAssets(string[] importedAssets, + string[] deletedAssets, + string[] movedAssets, + string[] movedFromAssetPaths) { + ommitedProjects = null; + } + } + + // main thread only + public static string[] GetOmittedProjects(string allDefineSymbols, bool verboseLogs = false) { + if (Cache.ommitedProjects != null) { + return Cache.ommitedProjects; + } + var arr = allDefineSymbols.Split(';'); + var omitted = GetOmittedProjects(arr, verboseLogs); + Cache.ommitedProjects = omitted; + return omitted; + } + + // must be deterministic (return projects in same order each time) + private static string[] GetOmittedProjects(string[] allDefineSymbols, bool verboseLogs = false) { + // HotReload uses names of assemblies. + var editorAssemblies = GetEditorAssemblies(); + + editorAssemblies.Remove(alwaysIncluded); + var omittedByConstraint = DefineConstraints.GetOmittedAssemblies(allDefineSymbols); + editorAssemblies.AddRange(omittedByConstraint); + + // Note: other platform player assemblies are also returned here, but I haven't seen it cause issues + // when using Hot Reload with IdleGame Android build. + var playerAssemblies = GetPlayerAssemblies().ToArray(); + + if (verboseLogs) { + foreach (var name in editorAssemblies) { + Log.Info("found project named {0}", name); + } + foreach (var playerAssemblyName in playerAssemblies) { + Log.Debug("player assembly named {0}", playerAssemblyName); + } + } + // leaves the editor assemblies that are not built into player assemblies (e.g. editor and test assemblies) + var toOmit = editorAssemblies.Except(playerAssemblies.Select(asm => asm.name)); + var unique = new HashSet(toOmit); + return unique.OrderBy(s => s).ToArray(); + } + + // main thread only + public static List GetEditorAssemblies() { + return CompilationPipeline + .GetAssemblies(AssembliesType.Editor) + .Select(asm => asm.name) + .ToList(); + } + + public static Assembly[] GetPlayerAssemblies() { + var playerAssemblyNames = CompilationPipeline + #if UNITY_2019_3_OR_NEWER + .GetAssemblies(AssembliesType.PlayerWithoutTestAssemblies) // since Unity 2019.3 + #else + .GetAssemblies(AssembliesType.Player) + #endif + .ToArray(); + + + return playerAssemblyNames; + } + + internal static class DefineConstraints { + /// + /// When define constraints evaluate to false, we need + /// + /// + /// + /// + /// Not aware of a Unity api to read defineConstraints, so we do it ourselves.
+ /// Find any asmdef files where the define constraints evaluate to false. + ///
+ public static string[] GetOmittedAssemblies(string[] defineSymbols) { + var guids = AssetDatabase.FindAssets("t:asmdef"); + var asmdefFiles = guids.Select(AssetDatabase.GUIDToAssetPath); + var shouldOmit = new List(); + foreach (var asmdefFile in asmdefFiles) { + var asmdef = ReadDefineConstraints(asmdefFile); + if (asmdef == null) continue; + if (asmdef.defineConstraints == null || asmdef.defineConstraints.Length == 0) { + // Hot Reload already handles assemblies correctly if they have no define symbols. + continue; + } + + var allPass = asmdef.defineConstraints.All(constraint => EvaluateDefineConstraint(constraint, defineSymbols)); + if (!allPass) { + shouldOmit.Add(asmdef.name); + } + } + + return shouldOmit.ToArray(); + } + + static AssemblyDefinitionJson ReadDefineConstraints(string path) { + try { + var json = File.ReadAllText(path); + var asmdef = JsonConvert.DeserializeObject(json); + return asmdef; + } catch (Exception) { + // ignore malformed asmdef + return null; + } + } + + // Unity Define Constraints syntax is described in the docs https://docs.unity3d.com/Manual/class-AssemblyDefinitionImporter.html + static readonly Dictionary syntaxMap = new Dictionary { + { "OR", "||" }, + { "AND", "&&" }, + { "NOT", "!" } + }; + + + /// + /// Evaluate a define constraint like 'UNITY_ANDROID || UNITY_IOS' + /// + /// + /// + /// + public static bool EvaluateDefineConstraint(string input, string[] defineSymbols) { + // map Unity defineConstraints syntax to DataTable syntax (unity supports both) + foreach (var item in syntaxMap) { + // surround with space because || may not have spaces around it + input = input.Replace(item.Value, $" {item.Key} "); + } + + // remove any extra spaces we just created + input = input.Replace(" ", " "); + + var tokens = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var token in tokens) { + if (!syntaxMap.ContainsKey(token) && token != "false" && token != "true") { + var index = input.IndexOf(token, StringComparison.Ordinal); + + // replace symbols with true or false depending if they are in the array or not. + input = input.Substring(0, index) + defineSymbols.Contains(token) + input.Substring(index + token.Length); + } + } + + var dt = new DataTable(); + return (bool)dt.Compute(input, ""); + } + } + } + +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs.meta new file mode 100644 index 000000000..163c22c0b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0b94f2314a044b109de488be1ccd5640 +timeCreated: 1674233674 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs new file mode 100644 index 000000000..d0f9130fb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + struct BuildInfoInput { + public readonly string allDefineSymbols; + public readonly BuildTarget activeBuildTarget; + public readonly string[] omittedProjects; + public readonly bool batchMode; + + public BuildInfoInput(string allDefineSymbols, BuildTarget activeBuildTarget, string[] omittedProjects, bool batchMode) { + this.allDefineSymbols = allDefineSymbols; + this.activeBuildTarget = activeBuildTarget; + this.omittedProjects = omittedProjects; + this.batchMode = batchMode; + } + } + + static class BuildInfoHelper { + public static async Task GetGenerateBuildInfoInput() { + var buildTarget = EditorUserBuildSettings.activeBuildTarget; + var activeDefineSymbols = EditorUserBuildSettings.activeScriptCompilationDefines; + var batchMode = Application.isBatchMode; + var allDefineSymbols = await Task.Run(() => { + return GetAllAndroidMonoBuildDefineSymbolsThreaded(activeDefineSymbols); + }); + // cached so unexpensive most of the time + var omittedProjects = AssemblyOmission.GetOmittedProjects(allDefineSymbols); + + return new BuildInfoInput( + allDefineSymbols: allDefineSymbols, + activeBuildTarget: buildTarget, + omittedProjects: omittedProjects, + batchMode: batchMode + ); + } + + public static BuildInfo GenerateBuildInfoMainThread() { + return GenerateBuildInfoMainThread(EditorUserBuildSettings.activeBuildTarget); + } + + public static BuildInfo GenerateBuildInfoMainThread(BuildTarget buildTarget) { + var allDefineSymbols = GetAllAndroidMonoBuildDefineSymbolsThreaded(EditorUserBuildSettings.activeScriptCompilationDefines); + return GenerateBuildInfoThreaded(new BuildInfoInput( + allDefineSymbols: allDefineSymbols, + activeBuildTarget: buildTarget, + omittedProjects: AssemblyOmission.GetOmittedProjects(allDefineSymbols), + batchMode: Application.isBatchMode + )); + } + + public static BuildInfo GenerateBuildInfoThreaded(BuildInfoInput input) { + var omittedProjectRegex = String.Join("|", input.omittedProjects.Select(name => Regex.Escape(name))); + var shortCommitHash = GitUtil.GetShortCommitHashOrFallback(); + var hostname = IsHumanControllingUs(input.batchMode) ? IpHelper.GetIpAddress() : null; + + // Note: add a string to uniquely identify the Unity project. Could use filepath to /MyProject/Assets/ (editor Application.dataPath) + // or application identifier (com.company.appname). + // Do this when supporting multiple projects: SG-28807 + // The matching code is in Runtime assembly which compares server response with built BuildInfo. + return new BuildInfo { + projectIdentifier = "SG-29580", + commitHash = shortCommitHash, + defineSymbols = input.allDefineSymbols, + projectOmissionRegex = omittedProjectRegex, + buildMachineHostName = hostname, + buildMachinePort = RequestHelper.port, + activeBuildTarget = input.activeBuildTarget.ToString(), + buildMachineRequestOrigin = RequestHelper.origin, + }; + } + + public static bool IsHumanControllingUs(bool batchMode) { + if (batchMode) { + return false; + } + + var isCI = !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("CI")); + return !isCI; + } + + private static readonly string[] editorSymbolsToRemove = { + "PLATFORM_ARCH_64", + "UNITY_64", + "UNITY_INCLUDE_TESTS", + "UNITY_EDITOR", + "UNITY_EDITOR_64", + "UNITY_EDITOR_WIN", + "ENABLE_UNITY_COLLECTIONS_CHECKS", + "ENABLE_BURST_AOT", + "RENDER_SOFTWARE_CURSOR", + "PLATFORM_STANDALONE_WIN", + "PLATFORM_STANDALONE", + "UNITY_STANDALONE_WIN", + "UNITY_STANDALONE", + "ENABLE_MOVIES", + "ENABLE_OUT_OF_PROCESS_CRASH_HANDLER", + "ENABLE_WEBSOCKET_HOST", + "ENABLE_CLUSTER_SYNC", + "ENABLE_CLUSTERINPUT", + }; + + private static readonly string[] androidSymbolsToAdd = { + "CSHARP_7_OR_LATER", + "CSHARP_7_3_OR_NEWER", + "PLATFORM_ANDROID", + "UNITY_ANDROID", + "UNITY_ANDROID_API", + "ENABLE_EGL", + "DEVELOPMENT_BUILD", + "ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING", + "PLATFORM_SUPPORTS_ADS_ID", + "UNITY_CAN_SHOW_SPLASH_SCREEN", + "UNITY_HAS_GOOGLEVR", + "UNITY_HAS_TANGO", + "ENABLE_SPATIALTRACKING", + "ENABLE_RUNTIME_PERMISSIONS", + "ENABLE_ENGINE_CODE_STRIPPING", + "UNITY_ASTC_ONLY_DECOMPRESS", + "ANDROID_USE_SWAPPY", + "ENABLE_ONSCREEN_KEYBOARD", + "ENABLE_UNITYADS_RUNTIME", + "UNITY_UNITYADS_API", + }; + + // Currently there is no better way. Alternatively we could hook into unity's call to csc.exe and parse the /define: arguments. + // Hardcoding the differences was less effort and is less error prone. + // I also looked into it and tried all the Build interfaces like this one https://docs.unity3d.com/ScriptReference/Build.IPostBuildPlayerScriptDLLs.html + // and logging EditorUserBuildSettings.activeScriptCompilationDefines in the callbacks - result: all same like editor, so I agree that hardcode is best. + public static string GetAllAndroidMonoBuildDefineSymbolsThreaded(string[] defineSymbols) { + var defines = new HashSet(defineSymbols); + defines.ExceptWith(editorSymbolsToRemove); + defines.UnionWith(androidSymbolsToAdd); + // sort for consistency, must be deterministic + var definesArray = defines.OrderBy(def => def).ToArray(); + return String.Join(";", definesArray); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs.meta new file mode 100644 index 000000000..16b85c188 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f41ad09ae4f04088bf6c9ad9a4fc0885 +timeCreated: 1674220023 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs new file mode 100644 index 000000000..92553a398 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs @@ -0,0 +1,101 @@ +using System; +using System.Text.RegularExpressions; +using UnityEngine; +using System.Threading.Tasks; +using UnityEditor; +using System.Collections.Generic; +using System.Linq; + +namespace SingularityGroup.HotReload.Editor { + internal static class EditorWindowHelper { + #if UNITY_2020_1_OR_NEWER + public static bool supportsNotifications = true; + #else + public static bool supportsNotifications = false; + #endif + + private static readonly Regex ValidEmailRegex = new Regex(@"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|" + + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(? notificationContent = new Dictionary { + { NotificationStatus.Patching, new GUIContent("[Hot Reload] Applying patches...")}, + { NotificationStatus.NeedsRecompile, new GUIContent("[Hot Reload] Unsupported Changes detected! Recompiling...")}, + }; + + static Type gameViewT; + private static EditorWindow[] gameViewWindows { + get { + gameViewT = gameViewT ?? typeof(EditorWindow).Assembly.GetType("UnityEditor.GameView"); + return Resources.FindObjectsOfTypeAll(gameViewT).Cast().ToArray(); + } + } + + private static EditorWindow[] sceneWindows { + get { + return Resources.FindObjectsOfTypeAll(typeof(SceneView)).Cast().ToArray(); + } + } + + private static EditorWindow[] notificationWindows { + get { + return gameViewWindows.Concat(sceneWindows).ToArray(); + } + } + + static NotificationStatus lastNotificationStatus; + private static DateTime? latestNotificationStartedAt; + private static bool notificationShownRecently => latestNotificationStartedAt != null && DateTime.UtcNow - latestNotificationStartedAt < TimeSpan.FromSeconds(1); + internal static void ShowNotification(NotificationStatus notificationType, float maxDuration = 3) { + // Patch status goes from Unsupported changes to patching rapidly when making unsupported change + // patching also shows right before unsupported changes sometimes + // so we don't override NeedsRecompile notification ever + bool willOverrideNeedsCompileNotification = notificationType != NotificationStatus.NeedsRecompile && notificationShownRecently || lastNotificationStatus == NotificationStatus.NeedsRecompile && notificationShownRecently; + if (!supportsNotifications || willOverrideNeedsCompileNotification) { + return; + } + + foreach (EditorWindow notificationWindow in notificationWindows) { + notificationWindow.ShowNotification(notificationContent[notificationType], maxDuration); + notificationWindow.Repaint(); + } + latestNotificationStartedAt = DateTime.UtcNow; + lastNotificationStatus = notificationType; + } + + internal static void RemoveNotification() { + if (!supportsNotifications) { + return; + } + // only patching notifications should be removed after showing less than 1 second + if (notificationShownRecently && lastNotificationStatus != NotificationStatus.Patching) { + return; + } + foreach (EditorWindow notificationWindow in notificationWindows) { + notificationWindow.RemoveNotification(); + notificationWindow.Repaint(); + } + latestNotificationStartedAt = null; + lastNotificationStatus = NotificationStatus.None; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs.meta new file mode 100644 index 000000000..be779f6c1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: fd463b1f0bfddf34caa662ebe375e5fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs new file mode 100644 index 000000000..fab85d7cf --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs @@ -0,0 +1,162 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace SingularityGroup.HotReload.Editor { + internal enum InvertibleIcon { + BugReport, + Events, + EventsNew, + Recompile, + Logo, + Close, + FoldoutOpen, + FoldoutClosed, + Spinner, + Stop, + Start, + } + + internal static class GUIHelper { + private static readonly Dictionary supportedInvertibleIcons = new Dictionary { + { InvertibleIcon.BugReport, "report_bug" }, + { InvertibleIcon.Events, "events" }, + { InvertibleIcon.Recompile, "refresh" }, + { InvertibleIcon.Logo, "logo" }, + { InvertibleIcon.Close, "close" }, + { InvertibleIcon.FoldoutOpen, "foldout_open" }, + { InvertibleIcon.FoldoutClosed, "foldout_closed" }, + { InvertibleIcon.Spinner, "icon_loading_star_light_mode_96" }, + { InvertibleIcon.Stop, "Icn_Stop" }, + { InvertibleIcon.Start, "Icn_play" }, + }; + + private static readonly Dictionary invertibleIconCache = new Dictionary(); + private static readonly Dictionary invertibleIconInvertedCache = new Dictionary(); + private static readonly Dictionary iconCache = new Dictionary(); + + internal static Texture2D InvertTextureColor(Texture2D originalTexture) { + if (!originalTexture) { + return originalTexture; + } + // Get the original pixels from the texture + Color[] originalPixels = originalTexture.GetPixels(); + + // Create a new array for the inverted colors + Color[] invertedPixels = new Color[originalPixels.Length]; + + // Iterate through the pixels and invert the colors while preserving the alpha channel + for (int i = 0; i < originalPixels.Length; i++) { + Color originalColor = originalPixels[i]; + Color invertedColor = new Color(1 - originalColor.r, 1 - originalColor.g, 1 - originalColor.b, originalColor.a); + invertedPixels[i] = invertedColor; + } + + // Create a new texture and set its pixels + Texture2D invertedTexture = new Texture2D(originalTexture.width, originalTexture.height); + invertedTexture.SetPixels(invertedPixels); + + // Apply the changes to the texture + invertedTexture.Apply(); + + return invertedTexture; + } + + internal static Texture2D GetInvertibleIcon(InvertibleIcon invertibleIcon) { + Texture2D iconTexture; + var cache = HotReloadWindowStyles.IsDarkMode ? invertibleIconInvertedCache : invertibleIconCache; + + if (!cache.TryGetValue(invertibleIcon, out iconTexture) || !iconTexture) { + var type = invertibleIcon == InvertibleIcon.EventsNew ? InvertibleIcon.Events : invertibleIcon; + iconTexture = Resources.Load(supportedInvertibleIcons[type]); + + // we assume icons are for light mode by default + // therefore if its dark mode we should invert them + if (HotReloadWindowStyles.IsDarkMode) { + iconTexture = InvertTextureColor(iconTexture); + } + + cache[type] = iconTexture; + + // we combine dot image with Events icon to create a new alert version + if (invertibleIcon == InvertibleIcon.EventsNew) { + var redDot = Resources.Load("red_dot"); + iconTexture = CombineImages(iconTexture, redDot); + cache[InvertibleIcon.EventsNew] = iconTexture; + } + } + return cache[invertibleIcon]; + } + + internal static Texture2D GetLocalIcon(string iconName) { + Texture2D iconTexture; + if (!iconCache.TryGetValue(iconName, out iconTexture) || !iconTexture) { + iconTexture = Resources.Load(iconName); + iconCache[iconName] = iconTexture; + } + return iconTexture; + } + + static Texture2D CombineImages(Texture2D image1, Texture2D image2) { + if (!image1 || !image2) { + return image1; + } + var combinedImage = new Texture2D(Mathf.Max(image1.width, image2.width), Mathf.Max(image1.height, image2.height)); + + for (int y = 0; y < combinedImage.height; y++) { + for (int x = 0; x < combinedImage.width; x++) { + Color color1 = x < image1.width && y < image1.height ? image1.GetPixel(x, y) : Color.clear; + Color color2 = x < image2.width && y < image2.height ? image2.GetPixel(x, y) : Color.clear; + combinedImage.SetPixel(x, y, Color.Lerp(color1, color2, color2.a)); + } + } + combinedImage.Apply(); + return combinedImage; + } + + private static readonly Dictionary textureColorCache = new Dictionary(); + internal static Texture2D ConvertTextureToColor(Color color) { + Texture2D texture; + if (!textureColorCache.TryGetValue(color, out texture) || !texture) { + texture = new Texture2D(1, 1); + texture.SetPixel(0, 0, color); + texture.Apply(); + textureColorCache[color] = texture; + } + return texture; + } + + private static readonly Dictionary grayTextureCache = new Dictionary(); + private static readonly Dictionary colorFactor = new Dictionary { + { "error", new Color(0.6f, 0.587f, 0.114f) }, + }; + + internal static Texture2D ConvertToGrayscale(string localIcon) { + Texture2D _texture; + if (!grayTextureCache.TryGetValue(localIcon, out _texture) || !_texture) { + var icon = GUIHelper.GetLocalIcon(localIcon); + // Create a copy of the texture + Texture2D copiedTexture = new Texture2D(icon.width, icon.height, TextureFormat.RGBA32, false); + + // Convert the copied texture to grayscale + Color[] pixels = icon.GetPixels(); + for (int i = 0; i < pixels.Length; i++) { + Color pixel = pixels[i]; + Color factor; + if (!colorFactor.TryGetValue(localIcon, out factor)) { + factor = new Color(0.299f, 0.587f, 0.114f); + } + float grayscale = factor.r * pixel.r + factor.g * pixel.g + factor.b * pixel.b; + pixels[i] = new Color(grayscale, grayscale, grayscale, pixel.a); // Preserve alpha channel + } + copiedTexture.SetPixels(pixels); + copiedTexture.Apply(); + + // Store the grayscale texture in the cache + grayTextureCache[localIcon] = copiedTexture; + + return copiedTexture; + } + return _texture; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs.meta new file mode 100644 index 000000000..5e11e7ba0 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b4be912211814333ab61898b6440dc8e +timeCreated: 1694518358 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs new file mode 100644 index 000000000..d4a1358a2 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs @@ -0,0 +1,322 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEditor.PackageManager; +using UnityEditor.PackageManager.Requests; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + + public enum HotReloadSuggestionKind { + UnsupportedChanges, + UnsupportedPackages, + [Obsolete] SymbolicLinks, + AutoRecompiledWhenPlaymodeStateChanges, + UnityBestDevelopmentToolAward2023, +#if UNITY_2022_1_OR_NEWER + AutoRecompiledWhenPlaymodeStateChanges2022, +#endif + MultidimensionalArrays, + EditorsWithoutHRRunning, + } + + internal static class HotReloadSuggestionsHelper { + internal static void SetSuggestionsShown(HotReloadSuggestionKind hotReloadSuggestionKind) { + if (EditorPrefs.GetBool($"HotReloadWindow.SuggestionsShown.{hotReloadSuggestionKind}")) { + return; + } + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsActive.{hotReloadSuggestionKind}", true); + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsShown.{hotReloadSuggestionKind}", true); + AlertEntry entry; + if (suggestionMap.TryGetValue(hotReloadSuggestionKind, out entry) && !HotReloadTimelineHelper.Suggestions.Contains(entry)) { + HotReloadTimelineHelper.Suggestions.Insert(0, entry); + HotReloadState.ShowingRedDot = true; + } + } + + internal static bool CheckSuggestionActive(HotReloadSuggestionKind hotReloadSuggestionKind) { + return EditorPrefs.GetBool($"HotReloadWindow.SuggestionsActive.{hotReloadSuggestionKind}"); + } + + // used for cases where suggestion might need to be shown more than once + internal static void SetSuggestionActive(HotReloadSuggestionKind hotReloadSuggestionKind) { + if (EditorPrefs.GetBool($"HotReloadWindow.SuggestionsShown.{hotReloadSuggestionKind}")) { + return; + } + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsActive.{hotReloadSuggestionKind}", true); + + AlertEntry entry; + if (suggestionMap.TryGetValue(hotReloadSuggestionKind, out entry) && !HotReloadTimelineHelper.Suggestions.Contains(entry)) { + HotReloadTimelineHelper.Suggestions.Insert(0, entry); + HotReloadState.ShowingRedDot = true; + } + } + + internal static void SetSuggestionInactive(HotReloadSuggestionKind hotReloadSuggestionKind) { + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsActive.{hotReloadSuggestionKind}", false); + AlertEntry entry; + if (suggestionMap.TryGetValue(hotReloadSuggestionKind, out entry)) { + HotReloadTimelineHelper.Suggestions.Remove(entry); + } + } + + internal static void InitSuggestions() { + foreach (HotReloadSuggestionKind value in Enum.GetValues(typeof(HotReloadSuggestionKind))) { + if (!CheckSuggestionActive(value)) { + continue; + } + AlertEntry entry; + if (suggestionMap.TryGetValue(value, out entry) && !HotReloadTimelineHelper.Suggestions.Contains(entry)) { + HotReloadTimelineHelper.Suggestions.Insert(0, entry); + } + } + } + + internal static HotReloadSuggestionKind? FindSuggestionKind(AlertEntry targetEntry) { + foreach (KeyValuePair pair in suggestionMap) { + if (pair.Value.Equals(targetEntry)) { + return pair.Key; + } + } + return null; + } + + internal static readonly OpenURLButton recompileTroubleshootingButton = new OpenURLButton("Documentation", Constants.RecompileTroubleshootingURL); + internal static readonly OpenURLButton featuresDocumentationButton = new OpenURLButton("Documentation", Constants.FeaturesDocumentationURL); + internal static readonly OpenURLButton multipleEditorsDocumentationButton = new OpenURLButton("Documentation", Constants.MultipleEditorsURL); + public static Dictionary suggestionMap = new Dictionary { + { HotReloadSuggestionKind.UnityBestDevelopmentToolAward2023, new AlertEntry( + AlertType.Suggestion, + "Vote for the \"Best Development Tool\" Award!", + "Hot Reload was nominated for the \"Best Development Tool\" Award. Please consider voting. Thank you!", + actionData: () => { + GUILayout.Space(6f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Vote ")) { + Application.OpenURL(Constants.VoteForAwardURL); + SetSuggestionInactive(HotReloadSuggestionKind.UnityBestDevelopmentToolAward2023); + } + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, + { HotReloadSuggestionKind.UnsupportedChanges, new AlertEntry( + AlertType.Suggestion, + "Which changes does Hot Reload support?", + "Hot Reload supports most code changes, but there are some limitations. Generally, changes to the method definition and body are allowed. Non-method changes (like adding/editing classes and fields) are not supported. See the documentation for the list of current features and our current roadmap", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + featuresDocumentationButton.OnGUI(); + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, + { HotReloadSuggestionKind.UnsupportedPackages, new AlertEntry( + AlertType.Suggestion, + "Unsupported package detected", + "The following packages are only partially supported: ECS, Mirror, Fishnet, and Photon. Hot Reload will work in the project, but changes specific to those packages might not work. Contact us if these packages are a big part of your project", + iconType: AlertType.UnsupportedChange, + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + HotReloadAboutTab.contactButton.OnGUI(); + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, + { HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges, new AlertEntry( + AlertType.Suggestion, + "Unity recompiles on enter/exit play mode?", + "If you have an issue with the Unity Editor recompiling when the Play Mode state changes, please consult the documentation, and don’t hesitate to reach out to us if you need assistance", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + recompileTroubleshootingButton.OnGUI(); + GUILayout.Space(5f); + HotReloadAboutTab.discordButton.OnGUI(); + GUILayout.Space(5f); + HotReloadAboutTab.contactButton.OnGUI(); + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, +#if UNITY_2022_1_OR_NEWER + { HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022, new AlertEntry( + AlertType.Suggestion, + "Unsupported setting detected", + "The 'Sprite Packer Mode' setting can cause unintended recompilations if set to 'Sprite Atlas V1 - Always Enabled'", + iconType: AlertType.UnsupportedChange, + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Use \"Sprite Atlas V2\" ")) { + EditorSettings.spritePackerMode = SpritePackerMode.SpriteAtlasV2; + } + if (GUILayout.Button(" Open Settings ")) { + SettingsService.OpenProjectSettings("Project/Editor"); + } + if (GUILayout.Button(" Ignore suggestion ")) { + SetSuggestionInactive(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022); + } + + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + hasExitButton: false + )}, +#endif + { HotReloadSuggestionKind.MultidimensionalArrays, new AlertEntry( + AlertType.Suggestion, + "Use jagged instead of multidimensional arrays", + "Hot Reload doesn't support multidimensional ([,]) arrays. Jagged arrays ([][]) are a better alternative, and Microsoft recommends using them instead", + iconType: AlertType.UnsupportedChange, + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Learn more ")) { + Application.OpenURL("https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1814"); + } + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, + { HotReloadSuggestionKind.EditorsWithoutHRRunning, new AlertEntry( + AlertType.Suggestion, + "Some Unity instances don't have Hot Reload running.", + "Make sure that either: \n1) Hot Reload is installed and running on all Editor instances, or \n2) Hot Reload is stopped in all Editor instances where it is installed.", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Stop Hot Reload ")) { + EditorCodePatcher.StopCodePatcher().Forget(); + } + GUILayout.Space(5f); + + multipleEditorsDocumentationButton.OnGUI(); + GUILayout.Space(5f); + + if (GUILayout.Button(" Don't show again ")) { + HotReloadSuggestionsHelper.SetSuggestionsShown(HotReloadSuggestionKind.EditorsWithoutHRRunning); + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + } + GUILayout.FlexibleSpace(); + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.UnsupportedChange + )}, + }; + + static ListRequest listRequest; + static string[] unsupportedPackages = new[] { + "com.unity.entities", + "com.firstgeargames.fishnet", + }; + static List unsupportedPackagesList; + static DateTime lastPlaymodeChange; + + public static void Init() { + listRequest = Client.List(offlineMode: false, includeIndirectDependencies: true); + + EditorApplication.playModeStateChanged += state => { + lastPlaymodeChange = DateTime.UtcNow; + }; + CompilationPipeline.compilationStarted += obj => { + if (DateTime.UtcNow - lastPlaymodeChange < TimeSpan.FromSeconds(1) && !HotReloadState.RecompiledUnsupportedChangesOnExitPlaymode) { + +#if UNITY_2022_1_OR_NEWER + SetSuggestionsShown(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022); +#else + SetSuggestionsShown(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges); +#endif + } + HotReloadState.RecompiledUnsupportedChangesOnExitPlaymode = false; + }; + InitSuggestions(); + } + + private static DateTime lastCheckedUnityInstances = DateTime.UtcNow; + public static void Check() { + if (listRequest.IsCompleted && + unsupportedPackagesList == null) + { + unsupportedPackagesList = new List(); + var packages = listRequest.Result; + foreach (var packageInfo in packages) { + if (unsupportedPackages.Contains(packageInfo.name)) { + unsupportedPackagesList.Add(packageInfo.name); + } + } + if (unsupportedPackagesList.Count > 0) { + SetSuggestionsShown(HotReloadSuggestionKind.UnsupportedPackages); + } + } + + CheckEditorsWithoutHR(); + +#if UNITY_2022_1_OR_NEWER + if (EditorSettings.spritePackerMode == SpritePackerMode.AlwaysOnAtlas) { + SetSuggestionsShown(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022); + } else if (CheckSuggestionActive(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022)) { + SetSuggestionInactive(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022); + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsShown.{HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022}", false); + } +#endif + } + + private static void CheckEditorsWithoutHR() { + if (!ServerHealthCheck.I.IsServerHealthy) { + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + return; + } + if (checkingEditorsWihtoutHR || + (DateTime.UtcNow - lastCheckedUnityInstances).TotalSeconds < 5) + { + return; + } + CheckEditorsWithoutHRAsync().Forget(); + } + + static bool checkingEditorsWihtoutHR; + private static async Task CheckEditorsWithoutHRAsync() { + try { + checkingEditorsWihtoutHR = true; + var showSuggestion = await Task.Run(() => { + var runningUnities = Process.GetProcessesByName("Unity").Length; + var runningPatchers = Process.GetProcessesByName("CodePatcherCLI").Length; + return runningUnities > runningPatchers; + }); + if (!showSuggestion) { + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + return; + } + if (!HotReloadState.ShowedEditorsWithoutHR && ServerHealthCheck.I.IsServerHealthy) { + HotReloadSuggestionsHelper.SetSuggestionActive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + HotReloadState.ShowedEditorsWithoutHR = true; + } + } finally { + checkingEditorsWihtoutHR = false; + lastCheckedUnityInstances = DateTime.UtcNow; + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs.meta new file mode 100644 index 000000000..92a2702b6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9cc471e812b143599ef5dde1d7ec022a +timeCreated: 1694632601 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs new file mode 100644 index 000000000..a353ffd6f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs @@ -0,0 +1,451 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using JetBrains.Annotations; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; +using UnityEngine; + + +namespace SingularityGroup.HotReload.Editor { + internal enum TimelineType { + Suggestions, + Timeline, + } + + internal enum AlertType { + Suggestion, + UnsupportedChange, + CompileError, + PartiallySupportedChange, + AppliedChange + } + + internal enum AlertEntryType { + Error, + Failure, + PatchApplied, + PartiallySupportedChange, + } + + internal enum EntryType { + Parent, + Child, + Standalone, + Foldout, + } + + internal class PersistedAlertData { + public readonly AlertData[] alertDatas; + + public PersistedAlertData(AlertData[] alertDatas) { + this.alertDatas = alertDatas; + } + } + + internal class AlertData { + public readonly AlertEntryType alertEntryType; + public readonly string errorString; + public readonly string methodName; + public readonly string methodSimpleName; + public readonly PartiallySupportedChange partiallySupportedChange; + public readonly EntryType entryType; + public readonly bool detiled; + public readonly DateTime createdAt; + + public AlertData(AlertEntryType alertEntryType, DateTime createdAt, bool detiled = false, EntryType entryType = EntryType.Standalone, string errorString = null, string methodName = null, string methodSimpleName = null, PartiallySupportedChange partiallySupportedChange = default(PartiallySupportedChange)) { + this.alertEntryType = alertEntryType; + this.createdAt = createdAt; + this.detiled = detiled; + this.entryType = entryType; + this.errorString = errorString; + this.methodName = methodName; + this.methodSimpleName = methodSimpleName; + this.partiallySupportedChange = partiallySupportedChange; + } + } + + internal class AlertEntry { + internal readonly AlertType alertType; + internal readonly string title; + internal readonly DateTime timestamp; + internal readonly string description; + [CanBeNull] internal readonly Action actionData; + internal readonly AlertType iconType; + internal readonly string shortDescription; + internal readonly EntryType entryType; + internal readonly AlertData alertData; + internal readonly bool hasExitButton; + + internal AlertEntry(AlertType alertType, string title, string description, DateTime timestamp, string shortDescription = null, Action actionData = null, AlertType? iconType = null, EntryType entryType = EntryType.Standalone, AlertData alertData = default(AlertData), bool hasExitButton = true) { + this.alertType = alertType; + this.title = title; + this.description = description; + this.shortDescription = shortDescription; + this.actionData = actionData; + this.iconType = iconType ?? alertType; + this.timestamp = timestamp; + this.entryType = entryType; + this.alertData = alertData; + this.hasExitButton = hasExitButton; + } + } + + internal static class HotReloadTimelineHelper { + internal const int maxVisibleEntries = 40; + + private static List eventsTimeline = new List(); + internal static List EventsTimeline => eventsTimeline; + + static readonly string filePath = Path.Combine(PackageConst.LibraryCachePath, "eventEntries.json"); + + public static void InitPersistedEvents() { + if (!File.Exists(filePath)) { + return; + } + var redDotShown = HotReloadState.ShowingRedDot; + try { + var persistedAlertData = JsonConvert.DeserializeObject(File.ReadAllText(filePath)); + eventsTimeline = new List(persistedAlertData.alertDatas.Length); + for (int i = persistedAlertData.alertDatas.Length - 1; i >= 0; i--) { + AlertData alertData = persistedAlertData.alertDatas[i]; + switch (alertData.alertEntryType) { + case AlertEntryType.Error: + CreateErrorEventEntry(errorString: alertData.errorString, entryType: alertData.entryType, createdAt: alertData.createdAt); + break; + case AlertEntryType.Failure: + if (alertData.entryType == EntryType.Parent) { + CreateReloadFinishedWithWarningsEventEntry(createdAt: alertData.createdAt); + } else { + CreatePatchFailureEventEntry(errorString: alertData.errorString, methodName: alertData.methodName, methodSimpleName: alertData.methodSimpleName, entryType: alertData.entryType, createdAt: alertData.createdAt); + } + break; + case AlertEntryType.PatchApplied: + CreateReloadFinishedEventEntry(createdAt: alertData.createdAt); + break; + case AlertEntryType.PartiallySupportedChange: + if (alertData.entryType == EntryType.Parent) { + CreateReloadPartiallyAppliedEventEntry(createdAt: alertData.createdAt); + } else { + CreatePartiallyAppliedEventEntry(alertData.partiallySupportedChange, entryType: alertData.entryType, detailed: alertData.detiled, createdAt: alertData.createdAt); + } + break; + } + } + } catch (Exception e) { + Log.Warning($"Failed initializing Hot Reload event entries on start: {e}"); + } finally { + // Ensure red dot is not triggered for existing entries + HotReloadState.ShowingRedDot = redDotShown; + } + } + + internal static void PersistTimeline() { + var alertDatas = new AlertData[eventsTimeline.Count]; + for (var i = 0; i < eventsTimeline.Count; i++) { + alertDatas[i] = eventsTimeline[i].alertData; + } + var persistedData = new PersistedAlertData(alertDatas); + try { + File.WriteAllText(path: filePath, contents: JsonConvert.SerializeObject(persistedData)); + } catch (Exception e) { + Log.Warning($"Failed persisting Hot Reload event entries: {e}"); + } + } + + internal static void ClearPersistance() { + try { + File.Delete(filePath); + } catch { + // ignore + } + eventsTimeline = new List(); + } + + internal static readonly Dictionary alertIconString = new Dictionary { + { AlertType.Suggestion, "alert_info" }, + { AlertType.UnsupportedChange, "warning" }, + { AlertType.CompileError, "error" }, + { AlertType.PartiallySupportedChange, "infos" }, + { AlertType.AppliedChange, "applied_patch" }, + }; + + public static Dictionary partiallySupportedChangeDescriptions = new Dictionary { + {PartiallySupportedChange.LambdaClosure, "A lambda closure was edited (captured variable was added or removed). Changes to it will only be visible to the next created lambda(s)."}, + {PartiallySupportedChange.EditAsyncMethod, "An async method was edited. Changes to it will only be visible the next time this method is called."}, + {PartiallySupportedChange.AddMonobehaviourMethod, "A new method was added. It will not show up in the Inspector until the next full recompilation."}, + {PartiallySupportedChange.EditMonobehaviourField, "A field in a MonoBehaviour was removed or reordered. The inspector will not notice this change until the next full recompilation."}, + {PartiallySupportedChange.EditCoroutine, "An IEnumerator/IEnumerable was edited. When used as a coroutine, changes to it will only be visible the next time the coroutine is created."}, + {PartiallySupportedChange.AddEnumMember, "An enum member was added. ToString and other reflection methods work only after the next full recompilation. Additionally, changes to the enum order may not apply until you patch usages in other places of the code."}, + {PartiallySupportedChange.EditFieldInitializer, "A field initializer was edited. Changes will only apply to new instances of that type, since the initializer for an object only runs when it is created."}, + {PartiallySupportedChange.AddMethodWithAttributes, "A method with attributes was added. Method attributes will not have any effect until the next full recompilation."}, + }; + + internal static List Suggestions = new List(); + internal static int UnsupportedChangesCount => EventsTimeline.Count(alert => alert.alertType == AlertType.UnsupportedChange && alert.entryType != EntryType.Child); + internal static int PartiallySupportedChangesCount => EventsTimeline.Count(alert => alert.alertType == AlertType.PartiallySupportedChange && alert.entryType != EntryType.Child); + internal static int CompileErrorsCount => EventsTimeline.Count(alert => alert.alertType == AlertType.CompileError); + internal static int AppliedChangesCount => EventsTimeline.Count(alert => alert.alertType == AlertType.AppliedChange); + + static Regex shortDescriptionRegex = new Regex(@"^(\w+)\s(\w+)(?=:)", RegexOptions.Compiled); + + internal static int GetRunTabTimelineEventCount() { + int total = 0; + if (HotReloadPrefs.RunTabUnsupportedChangesFilter) { + total += UnsupportedChangesCount; + } + if (HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter) { + total += PartiallySupportedChangesCount; + } + if (HotReloadPrefs.RunTabCompileErrorFilter) { + total += CompileErrorsCount; + } + if (HotReloadPrefs.RunTabAppliedPatchesFilter) { + total += AppliedChangesCount; + } + return total; + } + + internal static List expandedEntries = new List(); + + internal static void RenderCompileButton() { + if (GUILayout.Button("Recompile", GUILayout.Width(80))) { + HotReloadRunTab.RecompileWithChecks(); + } + } + + private static float maxScrollPos; + internal static void RenderErrorEventActions(string description, ErrorData errorData) { + int maxLen = 2400; + string text = errorData.stacktrace; + if (text.Length > maxLen) { + text = text.Substring(0, maxLen) + "..."; + } + + GUILayout.TextArea(text, HotReloadWindowStyles.StacktraceTextAreaStyle); + + if (errorData.file || !errorData.stacktrace.Contains("error CS")) { + GUILayout.Space(10f); + } + + using (new EditorGUILayout.HorizontalScope()) { + if (!errorData.stacktrace.Contains("error CS")) { + RenderCompileButton(); + } + + // Link + if (errorData.file) { + GUILayout.FlexibleSpace(); + if (GUILayout.Button(errorData.linkString, HotReloadWindowStyles.LinkStyle)) { + AssetDatabase.OpenAsset(errorData.file, Math.Max(errorData.lineNumber, 1)); + } + } + } + } + + private static Texture2D GetFilterIcon(int count, AlertType alertType) { + if (count == 0) { + return GUIHelper.ConvertToGrayscale(alertIconString[alertType]); + } + return GUIHelper.GetLocalIcon(alertIconString[alertType]); + } + + internal static void RenderAlertFilters() { + using (new EditorGUILayout.HorizontalScope()) { + var text = AppliedChangesCount > 999 ? "999+" : " " + AppliedChangesCount; + + HotReloadPrefs.RunTabAppliedPatchesFilter = GUILayout.Toggle( + HotReloadPrefs.RunTabAppliedPatchesFilter, + new GUIContent(text, GetFilterIcon(AppliedChangesCount, AlertType.AppliedChange)), + HotReloadWindowStyles.EventFiltersStyle); + + GUILayout.Space(-1f); + + text = PartiallySupportedChangesCount > 999 ? "999+" : " " + PartiallySupportedChangesCount; + HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter = GUILayout.Toggle( + HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter, + new GUIContent(text, GetFilterIcon(PartiallySupportedChangesCount, AlertType.PartiallySupportedChange)), + HotReloadWindowStyles.EventFiltersStyle); + + GUILayout.Space(-1f); + + text = UnsupportedChangesCount > 999 ? "999+" : " " + UnsupportedChangesCount; + HotReloadPrefs.RunTabUnsupportedChangesFilter = GUILayout.Toggle( + HotReloadPrefs.RunTabUnsupportedChangesFilter, + new GUIContent(text, GetFilterIcon(UnsupportedChangesCount, AlertType.UnsupportedChange)), + HotReloadWindowStyles.EventFiltersStyle); + + GUILayout.Space(-1f); + + text = CompileErrorsCount > 999 ? "999+" : " " + CompileErrorsCount; + HotReloadPrefs.RunTabCompileErrorFilter = GUILayout.Toggle( + HotReloadPrefs.RunTabCompileErrorFilter, + new GUIContent(text, GetFilterIcon(CompileErrorsCount, AlertType.CompileError)), + HotReloadWindowStyles.EventFiltersStyle); + } + } + + internal static void CreateErrorEventEntry(string errorString, EntryType entryType = EntryType.Standalone, DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + var alertType = errorString.Contains("error CS") + ? AlertType.CompileError + : AlertType.UnsupportedChange; + var title = errorString.Contains("error CS") + ? "Compile error" + : "Unsupported change"; + ErrorData errorData = ErrorData.GetErrorData(errorString); + var description = errorData.error; + string shortDescription = null; + if (alertType != AlertType.CompileError) { + shortDescription = shortDescriptionRegex.Match(description).Value; + } + Action actionData = () => RenderErrorEventActions(description, errorData); + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType: alertType, + title: title, + description: description, + shortDescription: shortDescription, + actionData: actionData, + entryType: entryType, + alertData: new AlertData(AlertEntryType.Error, createdAt: timestamp, errorString: errorString, entryType: entryType) + )); + } + + internal static void CreatePatchFailureEventEntry(string errorString, string methodName, string methodSimpleName = null, EntryType entryType = EntryType.Standalone, DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + ErrorData errorData = ErrorData.GetErrorData(errorString); + var title = $"Failed applying patch to method"; + Action actionData = () => RenderErrorEventActions(errorData.error, errorData); + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType : AlertType.UnsupportedChange, + title: title, + description: $"{title}: {methodName}, tap here to see more.", + shortDescription: methodSimpleName, + actionData: actionData, + entryType: entryType, + alertData: new AlertData(AlertEntryType.Failure, createdAt: timestamp, errorString: errorString, methodName: methodName, methodSimpleName: methodSimpleName, entryType: entryType) + )); + } + + internal static void CreateReloadFinishedEventEntry(DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType : AlertType.AppliedChange, + title: EditorIndicationState.IndicationText[EditorIndicationState.IndicationStatus.Reloaded], + description: "No issues found", + entryType: EntryType.Standalone, + alertData: new AlertData(AlertEntryType.PatchApplied, createdAt: timestamp, entryType: EntryType.Standalone) + )); + } + + internal static void CreateReloadFinishedWithWarningsEventEntry(DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType : AlertType.UnsupportedChange, + title: EditorIndicationState.IndicationText[EditorIndicationState.IndicationStatus.Unsupported], + description: "See detailed entries below", + entryType: EntryType.Parent, + alertData: new AlertData(AlertEntryType.Failure, createdAt: timestamp, entryType: EntryType.Parent) + )); + } + + internal static void CreateReloadPartiallyAppliedEventEntry(DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType : AlertType.PartiallySupportedChange, + title: EditorIndicationState.IndicationText[EditorIndicationState.IndicationStatus.PartiallySupported], + description: "See detailed entries below", + entryType: EntryType.Parent, + alertData: new AlertData(AlertEntryType.PartiallySupportedChange, createdAt: timestamp, entryType: EntryType.Parent) + )); + } + + internal static void CreatePartiallyAppliedEventEntry(PartiallySupportedChange partiallySupportedChange, EntryType entryType = EntryType.Standalone, bool detailed = true, DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + string description; + if (!partiallySupportedChangeDescriptions.TryGetValue(partiallySupportedChange, out description)) { + return; + } + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType : AlertType.PartiallySupportedChange, + title : detailed ? "Change partially applied" : ToString(partiallySupportedChange), + description : description, + shortDescription: detailed ? ToString(partiallySupportedChange) : null, + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + RenderCompileButton(); + GUILayout.FlexibleSpace(); + if (GetPartiallySupportedChangePref(partiallySupportedChange)) { + if (GUILayout.Button("Ignore this event type ", HotReloadWindowStyles.LinkStyle)) { + HidePartiallySupportedChange(partiallySupportedChange); + HotReloadRunTab.RepaintInstant(); + } + } + } + }, + entryType: entryType, + alertData: new AlertData(AlertEntryType.PartiallySupportedChange, createdAt: timestamp, partiallySupportedChange: partiallySupportedChange, entryType: entryType, detiled: detailed) + )); + } + + internal static void InsertEntry(AlertEntry entry) { + eventsTimeline.Insert(0, entry); + if (entry.alertType != AlertType.AppliedChange) { + HotReloadState.ShowingRedDot = true; + } + } + + internal static void ClearEntries() { + eventsTimeline.Clear(); + } + + internal static bool GetPartiallySupportedChangePref(PartiallySupportedChange key) { + return EditorPrefs.GetBool($"HotReloadWindow.ShowPartiallySupportedChangeType.{key}", true); + } + + internal static void HidePartiallySupportedChange(PartiallySupportedChange key) { + EditorPrefs.SetBool($"HotReloadWindow.ShowPartiallySupportedChangeType.{key}", false); + // loop over scroll entries to remove hidden entries + for (var i = EventsTimeline.Count - 1; i >= 0; i--) { + var eventEntry = EventsTimeline[i]; + if (eventEntry.alertData.partiallySupportedChange == key) { + EventsTimeline.Remove(eventEntry); + } + } + } + + // performance optimization (Enum.ToString uses reflection) + internal static string ToString(this PartiallySupportedChange change) { + switch (change) { + case PartiallySupportedChange.LambdaClosure: + return nameof(PartiallySupportedChange.LambdaClosure); + case PartiallySupportedChange.EditAsyncMethod: + return nameof(PartiallySupportedChange.EditAsyncMethod); + case PartiallySupportedChange.AddMonobehaviourMethod: + return nameof(PartiallySupportedChange.AddMonobehaviourMethod); + case PartiallySupportedChange.EditMonobehaviourField: + return nameof(PartiallySupportedChange.EditMonobehaviourField); + case PartiallySupportedChange.EditCoroutine: + return nameof(PartiallySupportedChange.EditCoroutine); + case PartiallySupportedChange.AddEnumMember: + return nameof(PartiallySupportedChange.AddEnumMember); + case PartiallySupportedChange.EditFieldInitializer: + return nameof(PartiallySupportedChange.EditFieldInitializer); + case PartiallySupportedChange.AddMethodWithAttributes: + return nameof(PartiallySupportedChange.AddMethodWithAttributes); + default: + throw new ArgumentOutOfRangeException(nameof(change), change, null); + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs.meta new file mode 100644 index 000000000..9b33c8a80 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ffb65be71b8b4d14800f8b28bf68d0ab +timeCreated: 1695210350 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs new file mode 100644 index 000000000..5755fdba0 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs @@ -0,0 +1,80 @@ +using System; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal class Spinner { + internal static string SpinnerIconPath => "icon_loading_star_light_mode_96"; + internal static Texture2D spinnerTexture => GUIHelper.GetInvertibleIcon(InvertibleIcon.Spinner); + private Texture2D _rotatedTextureLight; + private Texture2D _rotatedTextureDark; + private Texture2D rotatedTextureLight => _rotatedTextureLight ? _rotatedTextureLight : _rotatedTextureLight = GetCopy(spinnerTexture); + private Texture2D rotatedTextureDark => _rotatedTextureDark ? _rotatedTextureDark : _rotatedTextureDark = GetCopy(spinnerTexture); + internal Texture2D rotatedTexture => HotReloadWindowStyles.IsDarkMode ? rotatedTextureDark : rotatedTextureLight; + + private float _rotationAngle; + private DateTime _lastRotation; + private int _rotationPeriod; + + internal Spinner(int rotationPeriodInMilliseconds) { + _rotationPeriod = rotationPeriodInMilliseconds; + } + + internal Texture2D GetIcon() { + if (DateTime.UtcNow - _lastRotation > TimeSpan.FromMilliseconds(_rotationPeriod)) { + _lastRotation = DateTime.UtcNow; + _rotationAngle += 45; + if (_rotationAngle >= 360f) + _rotationAngle -= 360f; + return RotateImage(spinnerTexture, _rotationAngle); + } + return rotatedTexture; + } + + private Texture2D RotateImage(Texture2D originalTexture, float angle) { + int w = originalTexture.width; + int h = originalTexture.height; + + int x, y; + float centerX = w / 2f; + float centerY = h / 2f; + + for (x = 0; x < w; x++) { + for (y = 0; y < h; y++) { + float dx = x - centerX; + float dy = y - centerY; + float distance = Mathf.Sqrt(dx * dx + dy * dy); + float oldAngle = Mathf.Atan2(dy, dx) * Mathf.Rad2Deg; + float newAngle = oldAngle + angle; + + float newX = centerX + distance * Mathf.Cos(newAngle * Mathf.Deg2Rad); + float newY = centerY + distance * Mathf.Sin(newAngle * Mathf.Deg2Rad); + + if (newX >= 0 && newX < w && newY >= 0 && newY < h) { + rotatedTexture.SetPixel(x, y, originalTexture.GetPixel((int)newX, (int)newY)); + } else { + rotatedTexture.SetPixel(x, y, Color.clear); + } + } + } + + rotatedTexture.Apply(); + return rotatedTexture; + } + + public static Texture2D GetCopy(Texture2D tex, TextureFormat format = TextureFormat.RGBA32, bool mipChain = false) { + var tmp = RenderTexture.GetTemporary(tex.width, tex.height, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Linear); + Graphics.Blit(tex, tmp); + + RenderTexture.active = tmp; + try { + var copy = new Texture2D(tex.width, tex.height, format, mipChain: mipChain); + copy.ReadPixels(new Rect(0, 0, tmp.width, tmp.height), 0, 0); + copy.Apply(); + return copy; + } finally { + RenderTexture.active = null; + RenderTexture.ReleaseTemporary(tmp); + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs.meta new file mode 100644 index 000000000..c67a669cb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8bd77f0465824c5da3e1454f75c6e93c +timeCreated: 1685871830 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs new file mode 100644 index 000000000..b158a6777 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs @@ -0,0 +1,95 @@ +using UnityEngine; +using System.Reflection; +using System; +using System.Collections; +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.Demo")] + +namespace SingularityGroup.HotReload.Editor { + internal class UnitySettingsHelper { + public static UnitySettingsHelper I = new UnitySettingsHelper(); + + private bool initialized; + private object pref; + private PropertyInfo prefColorProp; + private MethodInfo setMethod; + private Type settingsType; + private Type prefColorType; + const string currentPlaymodeTintPrefKey = "Playmode tint"; + + internal bool playmodeTintSupported => EditorCodePatcher.config.changePlaymodeTint && EnsureInitialized(); + + private UnitySettingsHelper() { + EnsureInitialized(); + } + + + private bool EnsureInitialized() { + if (initialized) { + return true; + } + try { + // cache members for performance + settingsType = settingsType ?? (settingsType = typeof(UnityEditor.Editor).Assembly.GetType($"UnityEditor.PrefSettings")); + prefColorType = prefColorType ?? (prefColorType = typeof(UnityEditor.Editor).Assembly.GetType($"UnityEditor.PrefColor")); + prefColorProp = prefColorProp ?? (prefColorProp = prefColorType?.GetProperty("Color", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)); + pref = pref ?? (pref = GetPref(settingsType: settingsType, prefColorType: prefColorType)); + setMethod = setMethod ?? (setMethod = GetSetMethod(settingsType: settingsType, prefColorType: prefColorType)); + + if (prefColorProp == null + || pref == null + || setMethod == null + ) { + return false; + } + + // clear cache for performance + settingsType = null; + prefColorType = null; + + initialized = true; + return true; + } catch { + return false; + } + } + + private static MethodInfo GetSetMethod(Type settingsType, Type prefColorType) { + var setMethodBase = settingsType?.GetMethod("Set", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); + return setMethodBase?.MakeGenericMethod(prefColorType); + } + + private static object GetPref(Type settingsType, Type prefColorType) { + var prefsMethodBase = settingsType?.GetMethod("Prefs", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); + var prefsMethod = prefsMethodBase?.MakeGenericMethod(prefColorType); + var prefs = (IEnumerable)prefsMethod?.Invoke(null, Array.Empty()); + if (prefs != null) { + foreach (object kvp in prefs) { + var key = kvp.GetType().GetProperty("Key", BindingFlags.Instance | BindingFlags.Public)?.GetMethod.Invoke(kvp, Array.Empty()); + if (key?.ToString() == currentPlaymodeTintPrefKey) { + return kvp.GetType().GetProperty("Value", BindingFlags.Instance | BindingFlags.Public)?.GetMethod.Invoke(kvp, Array.Empty()); + } + + } + } + return null; + } + + public Color? GetCurrentPlaymodeColor() { + if (!playmodeTintSupported) { + return null; + } + return (Color)prefColorProp.GetValue(pref); + } + + public void SetPlaymodeTint(Color color) { + if (!playmodeTintSupported) { + return; + } + prefColorProp.SetValue(pref, color); + setMethod.Invoke(null, new object[] { currentPlaymodeTintPrefKey, pref }); + } + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs.meta new file mode 100644 index 000000000..8f137cfd4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 34fb1222dc00466ab4e3db7383bd00ee +timeCreated: 1694279476 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs new file mode 100644 index 000000000..5a85540f6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs @@ -0,0 +1,95 @@ +using UnityEngine; +using UnityEditor; + + +namespace SingularityGroup.HotReload.Editor { + public enum PopupSource { + Window, + Overlay, + } + public class HotReloadEventPopup : PopupWindowContent { + public static HotReloadEventPopup I = new HotReloadEventPopup(); + private Vector2 _PopupScrollPos; + public bool open { get; private set; } + private PopupSource source; + private HotReloadRunTabState currentState; + + public static void Open(PopupSource source, Vector2 pos) { + I.source = source; + PopupWindow.Show(new Rect(pos.x, pos.y, 0, 0), I); + } + + public override Vector2 GetWindowSize() { + if (HotReloadRunTab.ShouldRenderConsumption(currentState) + && (HotReloadWindowStyles.windowScreenWidth <= Constants.ConsumptionsHideWidth + || HotReloadWindowStyles.windowScreenHeight <= Constants.ConsumptionsHideHeight + || source == PopupSource.Overlay) + ) { + return new Vector2(600, 450); + } else { + return new Vector2(500, 375); + } + } + + public void Repaint() { + if (open) { + PopupWindow.GetWindow().Repaint(); + } + } + + public override void OnGUI(Rect rect) { + if (Event.current.type == EventType.Layout) { + currentState = HotReloadRunTabState.Current; + } + if (HotReloadWindowStyles.windowScreenWidth <= Constants.UpgradeLicenseNoteHideWidth + || HotReloadWindowStyles.windowScreenHeight <= Constants.UpgradeLicenseNoteHideHeight + || source == PopupSource.Overlay + ) { + HotReloadRunTab.RenderUpgradeLicenseNote(currentState, HotReloadWindowStyles.UpgradeLicenseButtonOverlayStyle); + } + using (new EditorGUILayout.HorizontalScope(EditorStyles.helpBox)) { + using (var scope = new EditorGUILayout.ScrollViewScope(_PopupScrollPos, GUIStyle.none, GUI.skin.verticalScrollbar, GUILayout.MaxHeight(495))) { + _PopupScrollPos.x = scope.scrollPosition.x; + _PopupScrollPos.y = scope.scrollPosition.y; + + if (HotReloadWindowStyles.windowScreenWidth <= Constants.ConsumptionsHideWidth + || HotReloadWindowStyles.windowScreenHeight <= Constants.ConsumptionsHideHeight + || source == PopupSource.Overlay + ) { + HotReloadRunTab.RenderLicenseInfo(currentState); + } + + HotReloadRunTab.RenderBars(currentState); + } + } + + bool rateAppShown = HotReloadWindow.ShouldShowRateApp(); + if ((HotReloadWindowStyles.windowScreenWidth <= Constants.RateAppHideWidth + || HotReloadWindowStyles.windowScreenHeight <= Constants.RateAppHideHeight + || source == PopupSource.Overlay) + && rateAppShown + ) { + HotReloadWindow.RenderRateApp(); + } + + if (HotReloadWindowStyles.windowScreenWidth <= Constants.EventFiltersShownHideWidth + || source == PopupSource.Overlay + ) { + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.Space(21); + HotReloadTimelineHelper.RenderAlertFilters(); + } + } + HotReloadState.ShowingRedDot = false; + } + + public override void OnOpen() { + open = true; + } + + public override void OnClose() { + _PopupScrollPos = Vector2.zero; + open = false; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs.meta new file mode 100644 index 000000000..baf11c017 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 00ec214cde074cf298acef73bb09a4fc +timeCreated: 1696574416 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs new file mode 100644 index 000000000..19202fe3d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs @@ -0,0 +1,178 @@ +#if UNITY_2021_2_OR_NEWER +using System; +using System.Collections.Generic; +using UnityEditor.Overlays; +using UnityEngine.UIElements; +using UnityEditor; +using UnityEngine; +using UnityEditor.Toolbars; + +namespace SingularityGroup.HotReload.Editor { + [Overlay(typeof(SceneView), "Hot Reload", true)] + [Icon("Assets/HotReload/Editor/Resources/Icon_DarkMode.png")] + internal class HotReloadOverlay : ToolbarOverlay { + HotReloadOverlay() : base(HotReloadToolbarIndicationButton.id, HotReloadToolbarEventsButton.id, HotReloadToolbarRecompileButton.id) { + EditorApplication.update += Update; + } + + EditorIndicationState.IndicationStatus lastIndicationStatus; + + [EditorToolbarElement(id, typeof(SceneView))] + class HotReloadToolbarIndicationButton : EditorToolbarButton, IAccessContainerWindow { + internal const string id = "HotReloadOverlay/LogoButton"; + public EditorWindow containerWindow { get; set; } + + EditorIndicationState.IndicationStatus lastIndicationStatus; + + internal HotReloadToolbarIndicationButton() { + icon = GetIndicationIcon(); + tooltip = EditorIndicationState.IndicationStatusText; + clicked += OnClick; + EditorApplication.update += Update; + } + + void OnClick() { + EditorWindow.GetWindow().Show(); + EditorWindow.GetWindow().SelectTab(typeof(HotReloadRunTab)); + } + + void Update() { + if (lastIndicationStatus != EditorIndicationState.CurrentIndicationStatus) { + icon = GetIndicationIcon(); + tooltip = EditorIndicationState.IndicationStatusText; + lastIndicationStatus = EditorIndicationState.CurrentIndicationStatus; + } + } + + ~HotReloadToolbarIndicationButton() { + clicked -= OnClick; + EditorApplication.update -= Update; + } + } + + [EditorToolbarElement(id, typeof(SceneView))] + class HotReloadToolbarEventsButton : EditorToolbarButton, IAccessContainerWindow { + internal const string id = "HotReloadOverlay/EventsButton"; + public EditorWindow containerWindow { get; set; } + + bool lastShowingRedDot; + + internal HotReloadToolbarEventsButton() { + icon = HotReloadState.ShowingRedDot ? GUIHelper.GetInvertibleIcon(InvertibleIcon.EventsNew) : GUIHelper.GetInvertibleIcon(InvertibleIcon.Events); + tooltip = "Events"; + clicked += OnClick; + EditorApplication.update += Update; + } + + void OnClick() { + HotReloadEventPopup.Open(PopupSource.Overlay, Event.current.mousePosition); + } + + void Update() { + if (lastShowingRedDot != HotReloadState.ShowingRedDot) { + icon = HotReloadState.ShowingRedDot ? GUIHelper.GetInvertibleIcon(InvertibleIcon.EventsNew) : GUIHelper.GetInvertibleIcon(InvertibleIcon.Events); + lastShowingRedDot = HotReloadState.ShowingRedDot; + } + } + + ~HotReloadToolbarEventsButton() { + clicked -= OnClick; + EditorApplication.update -= Update; + } + } + + + [EditorToolbarElement(id, typeof(SceneView))] + class HotReloadToolbarRecompileButton : EditorToolbarButton, IAccessContainerWindow { + internal const string id = "HotReloadOverlay/RecompileButton"; + + public EditorWindow containerWindow { get; set; } + + private Texture2D refreshIcon => GUIHelper.GetInvertibleIcon(InvertibleIcon.Recompile); + internal HotReloadToolbarRecompileButton() { + icon = refreshIcon; + tooltip = "Recompile"; + clicked += HotReloadRunTab.RecompileWithChecks; + } + } + + private static Texture2D latestIcon; + private static Dictionary iconTextures = new Dictionary(); + private static Spinner spinner = new Spinner(100); + private static Texture2D GetIndicationIcon() { + if (EditorIndicationState.IndicationIconPath == null || EditorIndicationState.SpinnerActive) { + latestIcon = spinner.GetIcon(); + } else { + latestIcon = GUIHelper.GetLocalIcon(EditorIndicationState.IndicationIconPath); + } + return latestIcon; + } + + private static Image indicationIcon; + private static Label indicationText; + + bool initialized; + /// + /// Create Hot Reload overlay panel. + /// + public override VisualElement CreatePanelContent() { + var root = new VisualElement() { name = "Hot Reload Indication" }; + root.style.flexDirection = FlexDirection.Row; + + indicationIcon = new Image() { image = GUIHelper.GetLocalIcon(EditorIndicationState.greyIconPath) }; + indicationIcon.style.height = 30; + indicationIcon.style.width = 30; + indicationIcon.style.marginLeft = 2; + indicationIcon.style.marginTop = 1; + indicationIcon.style.marginRight = 5; + + indicationText = new Label(){text = EditorIndicationState.IndicationStatusText}; + indicationText.style.paddingTop = 9; + indicationText.style.marginLeft = new StyleLength(StyleKeyword.Auto); + indicationText.style.marginRight = new StyleLength(StyleKeyword.Auto); + + root.Add(indicationIcon); + root.Add(indicationText); + root.style.width = 190; + root.style.height = 32; + initialized = true; + return root; + } + + static bool _repaint; + static bool _instantRepaint; + static DateTime _lastRepaint; + private void Update() { + if (!initialized) { + return; + } + if (lastIndicationStatus != EditorIndicationState.CurrentIndicationStatus) { + indicationIcon.image = GetIndicationIcon(); + indicationText.text = EditorIndicationState.IndicationStatusText; + lastIndicationStatus = EditorIndicationState.CurrentIndicationStatus; + } + try { + if (HotReloadEventPopup.I.open + && EditorWindow.mouseOverWindow + && EditorWindow.mouseOverWindow?.GetType() == typeof(UnityEditor.PopupWindow) + ) { + _repaint = true; + } + } catch (NullReferenceException) { + // Unity randomly throws nullrefs when EditorWindow.mouseOverWindow gets accessed + } + if (_repaint && DateTime.UtcNow - _lastRepaint > TimeSpan.FromMilliseconds(33)) { + _repaint = false; + _instantRepaint = true; + } + if (_instantRepaint) { + HotReloadEventPopup.I.Repaint(); + } + } + + ~HotReloadOverlay() { + EditorApplication.update -= Update; + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs.meta new file mode 100644 index 000000000..7c271ec65 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 91650b4b0d054bdf9c1e922305e6a61a +timeCreated: 1685130321 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs new file mode 100644 index 000000000..eece5ab8b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs @@ -0,0 +1,429 @@ +using System; +using System.Globalization; +using System.IO; +using JetBrains.Annotations; +using SingularityGroup.HotReload.Editor.Cli; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal static class HotReloadPrefs { + private const string RemoteServerKey = "HotReloadWindow.RemoteServer"; + private const string RemoteServerHostKey = "HotReloadWindow.RemoteServerHost"; + private const string LicenseEmailKey = "HotReloadWindow.LicenseEmail"; + private const string RenderAuthLoginKey = "HotReloadWindow.RenderAuthLogin"; + private const string FirstLoginCachedKey = "HotReloadWindow.FirstLoginCachedKey"; + [Obsolete] + private const string ShowOnStartupKey = "HotReloadWindow.ShowOnStartup"; + private const string PasswordCachedKey = "HotReloadWindow.PasswordCached"; + private const string ExposeServerToLocalNetworkKey = "HotReloadWindow.ExposeServerToLocalNetwork"; + private const string ErrorHiddenCachedKey = "HotReloadWindow.ErrorHiddenCachedKey"; + private const string RefreshManuallyTipCachedKey = "HotReloadWindow.RefreshManuallyTipCachedKey"; + private const string ShowLoginCachedKey = "HotReloadWindow.ShowLoginCachedKey"; + private const string ConfigurationKey = "HotReloadWindow.Configuration"; + private const string ShowPromoCodesCachedKey = "HotReloadWindow.ShowPromoCodesCached"; + private const string ShowOnDeviceKey = "HotReloadWindow.ShowOnDevice"; + private const string ShowChangelogKey = "HotReloadWindow.ShowChangelog"; + private const string UnsupportedChangesKey = "HotReloadWindow.ShowUnsupportedChanges"; + private const string LoggedBurstHintKey = "HotReloadWindow.LoggedBurstHint"; + private const string ShouldDoAutoRefreshFixupKey = "HotReloadWindow.ShouldDoAutoRefreshFixup"; + private const string ActiveDaysKey = "HotReloadWindow.ActiveDays"; + [Obsolete] + private const string RateAppShownKey = "HotReloadWindow.RateAppShown"; + private const string PatchesCollapseKey = "HotReloadWindow.PatchesCollapse"; + private const string PatchesGroupAllKey = "HotReloadWindow.PatchesGroupAll"; + private const string LaunchOnEditorStartKey = "HotReloadWindow.LaunchOnEditorStart"; + private const string AutoRecompileUnsupportedChangesKey = "HotReloadWindow.AutoRecompileUnsupportedChanges"; + private const string AutoRecompilePartiallyUnsupportedChangesKey = "HotReloadWindow.AutoRecompilePartiallyUnsupportedChanges"; + private const string ShowNotificationsKey = "HotReloadWindow.ShowNotifications"; + private const string ShowPatchingNotificationsKey = "HotReloadWindow.ShowPatchingNotifications"; + private const string ShowCompilingUnsupportedNotificationsKey = "HotReloadWindow.ShowCompilingUnsupportedNotifications"; + private const string AutoRecompileUnsupportedChangesImmediatelyKey = "HotReloadWindow.AutoRecompileUnsupportedChangesImmediately"; + private const string AutoRecompileUnsupportedChangesOnExitPlayModeKey = "HotReloadWindow.AutoRecompileUnsupportedChangesOnExitPlayMode"; + private const string AutoRecompileUnsupportedChangesInPlayModeKey = "HotReloadWindow.AutoRecompileUnsupportedChangesInPlayMode"; + private const string AllowDisableUnityAutoRefreshKey = "HotReloadWindow.AllowDisableUnityAutoRefresh"; + private const string DefaultAutoRefreshKey = "HotReloadWindow.DefaultAutoRefresh"; + private const string DefaultAutoRefreshModeKey = "HotReloadWindow.DefaultAutoRefreshMode"; + private const string DefaultScriptCompilationKeyKey = "HotReloadWindow.DefaultScriptCompilationKey"; + private const string DefaultEditorTintKey = "HotReloadWindow.DefaultEditorTint"; + private const string AppliedAutoRefreshKey = "HotReloadWindow.AppliedAutoRefresh"; + private const string AppliedScriptCompilationKey = "HotReloadWindow.AppliedScriptCompilation"; + private const string AppliedEditorTintKey = "HotReloadWindow.AppliedEditorTint"; + private const string AllAssetChangesKey = "HotReloadWindow.AllAssetChanges"; + private const string IncludeShaderChangesKey = "HotReloadWindow.IncludeShaderChanges"; + private const string DisableConsoleWindowKey = "HotReloadWindow.DisableConsoleWindow"; + private const string RedeemLicenseEmailKey = "HotReloadWindow.RedeemLicenseEmail"; + private const string RedeemLicenseInvoiceKey = "HotReloadWindow.RedeemLicenseInvoice"; + private const string RunTabEventsSuggestionsFoldoutKey = "HotReloadWindow.RunTabEventsSuggestionsFoldout"; + private const string RunTabEventsTimelineFoldoutKey = "HotReloadWindow.RunTabEventsTimelineFoldout"; + private const string RunTabUnsupportedChangesFilterKey = "HotReloadWindow.RunTabUnsupportedChangesFilter"; + private const string RunTabCompileErrorFilterKey = "HotReloadWindow.RunTabCompileErrorFilter"; + private const string RunTabPartiallyAppliedPatchesFilterKey = "HotReloadWindow.RunTabPartiallyAppliedPatchesFilter"; + private const string RunTabAppliedPatchesFilterKey = "HotReloadWindow.RunTabAppliedPatchesFilter"; + private const string RecompileDialogueShownKey = "HotReloadWindow.RecompileDialogueShown"; + private const string OpenedWindowAtLeastOnceKey = "HotReloadWindow.OpenedWindowAtLeastOnce"; + + public const string DontShowPromptForDownloadKey = "ServerDownloader.DontShowPromptForDownload"; + + [Obsolete] public const string AllowHttpSettingCacheKey = "HotReloadWindow.AllowHttpSettingCacheKey"; + [Obsolete] public const string AutoRefreshSettingCacheKey = "HotReloadWindow.AutoRefreshSettingCacheKey"; + [Obsolete] public const string ScriptCompilationSettingCacheKey = "HotReloadWindow.ScriptCompilationSettingCacheKey"; + [Obsolete] public const string ProjectGenerationSettingCacheKey = "HotReloadWindow.ProjectGenerationSettingCacheKey"; + + + [Obsolete] + public static bool RemoteServer { + get { return EditorPrefs.GetBool(RemoteServerKey, false); } + set { EditorPrefs.SetBool(RemoteServerKey, value); } + } + + public static bool DontShowPromptForDownload { + get { return EditorPrefs.GetBool(DontShowPromptForDownloadKey, false); } + set { EditorPrefs.SetBool(DontShowPromptForDownloadKey, value); } + } + + [Obsolete] + public static string RemoteServerHost { + get { return EditorPrefs.GetString(RemoteServerHostKey); } + set { EditorPrefs.SetString(RemoteServerHostKey, value); } + } + + public static string LicenseEmail { + get { return EditorPrefs.GetString(LicenseEmailKey); } + set { EditorPrefs.SetString(LicenseEmailKey, value); } + } + + public static string LicensePassword { + get { return EditorPrefs.GetString(PasswordCachedKey); } + set { EditorPrefs.SetString(PasswordCachedKey, value); } + } + + [Obsolete] + public static bool RenderAuthLogin { // false = render free trial + get { return EditorPrefs.GetBool(RenderAuthLoginKey); } + set { EditorPrefs.SetBool(RenderAuthLoginKey, value); } + } + + [Obsolete] + public static bool FirstLogin { + get { return EditorPrefs.GetBool(FirstLoginCachedKey, true); } + set { EditorPrefs.SetBool(FirstLoginCachedKey, value); } + } + + [Obsolete] + public static string ShowOnStartupLegacy { // WindowAutoOpen + get { return EditorPrefs.GetString(ShowOnStartupKey); } + set { EditorPrefs.SetString(ShowOnStartupKey, value); } + } + + public static string showOnStartupPath { get; }= Path.Combine(CliUtils.GetAppDataPath(), "showOnStartup.txt"); + static ShowOnStartupEnum? showOnStartup; + public static ShowOnStartupEnum ShowOnStartup { + get { + if (showOnStartup != null) { + return showOnStartup.Value; + } + if (!File.Exists(showOnStartupPath)) { + showOnStartup = ShowOnStartupEnum.Always; + return showOnStartup.Value; + } + var text = File.ReadAllText(showOnStartupPath); + ShowOnStartupEnum _showOnStartup; + if (Enum.TryParse(text, true, out _showOnStartup)) { + showOnStartup = _showOnStartup; + return showOnStartup.Value; + } + showOnStartup = ShowOnStartupEnum.Always; + return showOnStartup.Value; + } + set { + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(showOnStartupPath)); + File.WriteAllText(showOnStartupPath, value.ToString()); + showOnStartup = value; + } + } + + + public static bool ErrorHidden { + get { return EditorPrefs.GetBool(ErrorHiddenCachedKey); } + set { EditorPrefs.SetBool(ErrorHiddenCachedKey, value); } + } + + public static bool ShowLogin { + get { return EditorPrefs.GetBool(ShowLoginCachedKey, true); } + set { EditorPrefs.SetBool(ShowLoginCachedKey, value); } + } + + public static bool ShowConfiguration { + get { return EditorPrefs.GetBool(ConfigurationKey, true); } + set { EditorPrefs.SetBool(ConfigurationKey, value); } + } + + public static bool ShowPromoCodes { + get { return EditorPrefs.GetBool(ShowPromoCodesCachedKey, true); } + set { EditorPrefs.SetBool(ShowPromoCodesCachedKey, value); } + } + + public static bool ShowOnDevice { + get { return EditorPrefs.GetBool(ShowOnDeviceKey, true); } + set { EditorPrefs.SetBool(ShowOnDeviceKey, value); } + } + + public static bool ShowChangeLog { + get { return EditorPrefs.GetBool(ShowChangelogKey, true); } + set { EditorPrefs.SetBool(ShowChangelogKey, value); } + } + + public static bool ShowUnsupportedChanges { + get { return EditorPrefs.GetBool(UnsupportedChangesKey, true); } + set { EditorPrefs.SetBool(UnsupportedChangesKey, value); } + } + + [Obsolete] + public static bool RefreshManuallyTip { + get { return EditorPrefs.GetBool(RefreshManuallyTipCachedKey); } + set { EditorPrefs.SetBool(RefreshManuallyTipCachedKey, value); } + } + + public static bool LoggedBurstHint { + get { return EditorPrefs.GetBool(LoggedBurstHintKey); } + set { EditorPrefs.SetBool(LoggedBurstHintKey, value); } + } + + [Obsolete] + public static bool ShouldDoAutoRefreshFixup { + get { return EditorPrefs.GetBool(ShouldDoAutoRefreshFixupKey, true); } + set { EditorPrefs.SetBool(ShouldDoAutoRefreshFixupKey, value); } + } + + public static string ActiveDays { + get { return EditorPrefs.GetString(ActiveDaysKey, string.Empty); } + set { EditorPrefs.SetString(ActiveDaysKey, value); } + } + + [Obsolete] + public static bool RateAppShownLegacy { + get { return EditorPrefs.GetBool(RateAppShownKey, false); } + set { EditorPrefs.SetBool(RateAppShownKey, value); } + } + + static string rateAppPath = Path.Combine(CliUtils.GetAppDataPath(), "ratedApp.txt"); + static bool? rateAppShown; + public static bool RateAppShown { + get { + if (rateAppShown != null) { + return rateAppShown.Value; + } + rateAppShown = File.Exists(rateAppPath); + return rateAppShown.Value; + } + set { + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(rateAppPath)); + if (value && !File.Exists(rateAppPath)) { + using (File.Create(rateAppPath)) { } + } else if (!value && File.Exists(rateAppPath)) { + File.Delete(rateAppPath); + } + rateAppShown = value; + } + } + + [Obsolete] + public static bool PatchesGroupAll { + get { return EditorPrefs.GetBool(PatchesGroupAllKey, false); } + set { EditorPrefs.SetBool(PatchesGroupAllKey, value); } + } + + [Obsolete] + public static bool PatchesCollapse { + get { return EditorPrefs.GetBool(PatchesCollapseKey, true); } + set { EditorPrefs.SetBool(PatchesCollapseKey, value); } + } + + [Obsolete] + public static ShowOnStartupEnum GetShowOnStartupEnum() { + ShowOnStartupEnum showOnStartupEnum; + if (Enum.TryParse(HotReloadPrefs.ShowOnStartupLegacy, true, out showOnStartupEnum)) { + return showOnStartupEnum; + } + return ShowOnStartupEnum.Always; + } + + public static bool ExposeServerToLocalNetwork { + get { return EditorPrefs.GetBool(ExposeServerToLocalNetworkKey, false); } + set { EditorPrefs.SetBool(ExposeServerToLocalNetworkKey, value); } + } + + public static bool LaunchOnEditorStart { + get { return EditorPrefs.GetBool(LaunchOnEditorStartKey, false); } + set { EditorPrefs.SetBool(LaunchOnEditorStartKey, value); } + } + + public static bool AutoRecompileUnsupportedChanges { + get { return EditorPrefs.GetBool(AutoRecompileUnsupportedChangesKey, false); } + set { EditorPrefs.SetBool(AutoRecompileUnsupportedChangesKey, value); } + } + + public static bool AutoRecompilePartiallyUnsupportedChanges { + get { return EditorPrefs.GetBool(AutoRecompilePartiallyUnsupportedChangesKey, false); } + set { EditorPrefs.SetBool(AutoRecompilePartiallyUnsupportedChangesKey, value); } + } + + public static bool ShowNotifications { + get { return EditorPrefs.GetBool(ShowNotificationsKey, true); } + set { EditorPrefs.SetBool(ShowNotificationsKey, value); } + } + + public static bool ShowPatchingNotifications { + get { return EditorPrefs.GetBool(ShowPatchingNotificationsKey, true); } + set { EditorPrefs.SetBool(ShowPatchingNotificationsKey, value); } + } + + public static bool ShowCompilingUnsupportedNotifications { + get { return EditorPrefs.GetBool(ShowCompilingUnsupportedNotificationsKey, true); } + set { EditorPrefs.SetBool(ShowCompilingUnsupportedNotificationsKey, value); } + } + + public static bool AutoRecompileUnsupportedChangesImmediately { + get { return EditorPrefs.GetBool(AutoRecompileUnsupportedChangesImmediatelyKey, false); } + set { EditorPrefs.SetBool(AutoRecompileUnsupportedChangesImmediatelyKey, value); } + } + + public static bool AutoRecompileUnsupportedChangesOnExitPlayMode { + get { return EditorPrefs.GetBool(AutoRecompileUnsupportedChangesOnExitPlayModeKey, false); } + set { EditorPrefs.SetBool(AutoRecompileUnsupportedChangesOnExitPlayModeKey, value); } + } + + public static bool AutoRecompileUnsupportedChangesInPlayMode { + get { return EditorPrefs.GetBool(AutoRecompileUnsupportedChangesInPlayModeKey, false); } + set { EditorPrefs.SetBool(AutoRecompileUnsupportedChangesInPlayModeKey, value); } + } + + public static bool AllowDisableUnityAutoRefresh { + get { return EditorPrefs.GetBool(AllowDisableUnityAutoRefreshKey, false); } + set { EditorPrefs.SetBool(AllowDisableUnityAutoRefreshKey, value); } + } + + public static int DefaultAutoRefresh { + get { return EditorPrefs.GetInt(DefaultAutoRefreshKey, -1); } + set { EditorPrefs.SetInt(DefaultAutoRefreshKey, value); } + } + + [UsedImplicitly] + public static int DefaultAutoRefreshMode { + get { return EditorPrefs.GetInt(DefaultAutoRefreshModeKey, -1); } + set { EditorPrefs.SetInt(DefaultAutoRefreshModeKey, value); } + } + + public static int DefaultScriptCompilation { + get { return EditorPrefs.GetInt(DefaultScriptCompilationKeyKey, -1); } + set { EditorPrefs.SetInt(DefaultScriptCompilationKeyKey, value); } + } + + public static Color? DefaultEditorTint { + get { return ColorFromString(EditorPrefs.GetString(DefaultEditorTintKey, string.Empty)); } + set { EditorPrefs.SetString(DefaultEditorTintKey, ColorToString(value)); } + } + + public static bool AppliedAutoRefresh { + get { return EditorPrefs.GetBool(AppliedAutoRefreshKey); } + set { EditorPrefs.SetBool(AppliedAutoRefreshKey, value); } + } + + public static bool AppliedScriptCompilation { + get { return EditorPrefs.GetBool(AppliedScriptCompilationKey); } + set { EditorPrefs.SetBool(AppliedScriptCompilationKey, value); } + } + + public static Color? AppliedEditorTint { + get { return ColorFromString(EditorPrefs.GetString(AppliedEditorTintKey, string.Empty)); } + set { EditorPrefs.SetString(AppliedEditorTintKey, ColorToString(value)); } + } + + public static bool AllAssetChanges { + get { return EditorPrefs.GetBool(AllAssetChangesKey, false); } + set { EditorPrefs.SetBool(AllAssetChangesKey, value); } + } + + public static bool IncludeShaderChanges { + get { return EditorPrefs.GetBool(IncludeShaderChangesKey, false); } + set { EditorPrefs.SetBool(IncludeShaderChangesKey, value); } + } + + public static bool DisableConsoleWindow { + get { return EditorPrefs.GetBool(DisableConsoleWindowKey, false); } + set { EditorPrefs.SetBool(DisableConsoleWindowKey, value); } + } + + public static string RedeemLicenseEmail { + get { return EditorPrefs.GetString(RedeemLicenseEmailKey); } + set { EditorPrefs.SetString(RedeemLicenseEmailKey, value); } + } + + public static string RedeemLicenseInvoice { + get { return EditorPrefs.GetString(RedeemLicenseInvoiceKey); } + set { EditorPrefs.SetString(RedeemLicenseInvoiceKey, value); } + } + + public static bool RunTabEventsTimelineFoldout { + get { return EditorPrefs.GetBool(RunTabEventsTimelineFoldoutKey, true); } + set { EditorPrefs.SetBool(RunTabEventsTimelineFoldoutKey, value); } + } + + public static bool RunTabEventsSuggestionsFoldout { + get { return EditorPrefs.GetBool(RunTabEventsSuggestionsFoldoutKey, true); } + set { EditorPrefs.SetBool(RunTabEventsSuggestionsFoldoutKey, value); } + } + + public static bool RunTabUnsupportedChangesFilter { + get { return EditorPrefs.GetBool(RunTabUnsupportedChangesFilterKey, true); } + set { EditorPrefs.SetBool(RunTabUnsupportedChangesFilterKey, value); } + } + + public static bool RunTabCompileErrorFilter { + get { return EditorPrefs.GetBool(RunTabCompileErrorFilterKey, true); } + set { EditorPrefs.SetBool(RunTabCompileErrorFilterKey, value); } + } + + public static bool RunTabPartiallyAppliedPatchesFilter { + get { return EditorPrefs.GetBool(RunTabPartiallyAppliedPatchesFilterKey, true); } + set { EditorPrefs.SetBool(RunTabPartiallyAppliedPatchesFilterKey, value); } + } + + public static bool RunTabAppliedPatchesFilter { + get { return EditorPrefs.GetBool(RunTabAppliedPatchesFilterKey, true); } + set { EditorPrefs.SetBool(RunTabAppliedPatchesFilterKey, value); } + } + + public static bool RecompileDialogueShown { + get { return EditorPrefs.GetBool(RecompileDialogueShownKey); } + set { EditorPrefs.SetBool(RecompileDialogueShownKey, value); } + } + + public static bool OpenedWindowAtLeastOnce { + get { return EditorPrefs.GetBool(OpenedWindowAtLeastOnceKey); } + set { EditorPrefs.SetBool(OpenedWindowAtLeastOnceKey, value); } + } + + private const string rgbaDelimiter = ";"; + public static string ColorToString(Color? _color) { + if (_color == null) { + return null; + } + var color = _color.Value; + var cultInfo = CultureInfo.InvariantCulture; + string[] rgbaList = { color.r.ToString(cultInfo), color.g.ToString(cultInfo), color.b.ToString(cultInfo), color.a.ToString(cultInfo)}; + return String.Join(rgbaDelimiter, rgbaList); + } + + public static Color? ColorFromString(string ser) { + if (string.IsNullOrEmpty(ser)) { + return null; + } + string[] rgbaParts = ser.Split(rgbaDelimiter.ToCharArray()); + return new Color(float.Parse(rgbaParts[0]), float.Parse(rgbaParts[1]),float.Parse(rgbaParts[2]),float.Parse(rgbaParts[3])); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs.meta new file mode 100644 index 000000000..1346eed8e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 96451431b50143944b85d4fbdde5f104 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs new file mode 100644 index 000000000..fdb536d31 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs @@ -0,0 +1,70 @@ +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + static class HotReloadSettingsEditor { + /// Ensure settings asset file is created and saved + public static void EnsureSettingsCreated(HotReloadSettingsObject asset) { + if (!SettingsExists()) { + CreateNewSettingsFile(asset, HotReloadSettingsObject.editorAssetPath); + } + } + + /// Load existing settings asset or return the default settings + public static HotReloadSettingsObject LoadSettingsOrDefault() { + if (SettingsExists()) { + return AssetDatabase.LoadAssetAtPath(HotReloadSettingsObject.editorAssetPath); + } else { + // create an instance with default values + return ScriptableObject.CreateInstance(); + } + } + + /// + /// Create settings asset file + /// + /// Assume that settings asset doesn't exist yet + /// The settings asset + static void CreateNewSettingsFile(HotReloadSettingsObject asset, string editorAssetPath) { + // create new settings asset + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(editorAssetPath)); + if (asset == null) { + asset = ScriptableObject.CreateInstance(); + } + AssetDatabase.CreateAsset(asset, editorAssetPath); + // Saving the asset isn't needed right after you created it. Unity will save it at the appropriate time. + // Troy: I tested in Unity 2018 LTS, first Android build creates the asset file and asset is included in the build. + } + + #region include/exclude in build + + private static bool SettingsExists() { + return AssetExists(HotReloadSettingsObject.editorAssetPath); + } + + private static bool AssetExists(string assetPath) { + return AssetDatabase.GetMainAssetTypeAtPath(assetPath) != null; + } + + public static void AddOrRemoveFromBuild(bool includeSettingsInBuild) { + AssetDatabase.StartAssetEditing(); + var so = LoadSettingsOrDefault(); + try { + if (includeSettingsInBuild) { + // Note: don't need to force create settings because we know the defaults in player. + so.EnsurePrefabSetCorrectly(); + EnsureSettingsCreated(so); + } else { + // this block shouldn't create the asset file, but it's also fine if it does + so.EnsurePrefabNotInBuild(); + } + } finally { + AssetDatabase.StopAssetEditing(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs.meta new file mode 100644 index 000000000..f40133eb1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: a0f4231ca4f63e54da0ecf87ab62c381 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs new file mode 100644 index 000000000..a087f34a4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs @@ -0,0 +1,37 @@ +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor { + internal static class HotReloadState { + private const string ServerPortKey = "HotReloadWindow.ServerPort"; + private const string LastPatchIdKey = "HotReloadWindow.LastPatchId"; + private const string ShowingRedDotKey = "HotReloadWindow.ShowingRedDot"; + private const string ShowedEditorsWithoutHRKey = "HotReloadWindow.ShowedEditorWithoutHR"; + private const string RecompiledUnsupportedChangesOnExitPlaymodeKey = "HotReloadWindow.RecompiledUnsupportedChangesOnExitPlaymode"; + + public static int ServerPort { + get { return SessionState.GetInt(ServerPortKey, RequestHelper.defaultPort); } + set { SessionState.SetInt(ServerPortKey, value); } + } + + public static string LastPatchId { + get { return SessionState.GetString(LastPatchIdKey, string.Empty); } + set { SessionState.SetString(LastPatchIdKey, value); } + } + + public static bool ShowingRedDot { + get { return SessionState.GetBool(ShowingRedDotKey, false); } + set { SessionState.SetBool(ShowingRedDotKey, value); } + } + + public static bool ShowedEditorsWithoutHR { + get { return SessionState.GetBool(ShowedEditorsWithoutHRKey, false); } + set { SessionState.SetBool(ShowedEditorsWithoutHRKey, value); } + } + + public static bool RecompiledUnsupportedChangesOnExitPlaymode { + get { return SessionState.GetBool(RecompiledUnsupportedChangesOnExitPlaymodeKey, false); } + set { SessionState.SetBool(RecompiledUnsupportedChangesOnExitPlaymodeKey, value); } + } + } + +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs.meta new file mode 100644 index 000000000..1566fd5a5 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 803347281bcf46b6b37d48231b8882be +timeCreated: 1694458889 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png b/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png new file mode 100644 index 0000000000000000000000000000000000000000..09e5105fcdb44e6637ef47b9eb03dc52c9626431 GIT binary patch literal 2621 zcmZ`*2{=@J7r$d)N_Lt0m_dV)xiTSpvI`l5CWJ9F)npmQ$e<|nMkpF421zB^Lxs`X zBCjPSD4UHj;w0ioINKu*4giwl3jzEPNr0E*K{zJ>fdbrW91pOAZ2RRqL)6wV zJOFTx4DhXC+&Pwe*l-q?vub&-Le?u@<@tqHxyt*?SLM>Kq|JdGBOGLNC?{)zBkHlghHxSR~?%?3? z$G~)S|LA8O8ENV5Hn81+2fh2QTp+;2_r&jEL}e_&f5xVzrTwg}t<9OApZ5?H5NMN= zl`Z2@blY#IVuy@d-s1R-*f=^i{dIo+Pv!2x!NJ`{2RD6qQB4_$y6BT|uSU4Dv$NEv zE{Ygq`9(#XER{5Shmd8K|7CB9gs)V24^Pwv;MWv-VjUoetOK&ThQ*I^mE~PWHu&TONinBY6jg6adeOQ4h zq?N>*N>Xcj$t{*^w0XnNGK}0~L=)nihfZ^sGTjxw{R=E{F=MgX5RNhDgJ)mHydjhv zvrHR}euSS8l?A`{oh%(uoOr_s6>PeAkoL zNC@xN(nv+-$id$^89I)#+3cIn=@~>i6oj`FJ0@-V3au=*Nq<-Xs-VW(&8bc?eL{!T zkVy6*>m?8l9fsJTuaf@QjwMbpyuMSLoNNiYG^?m#0;KfS+=-23kg7T-0L!DBH1{tD4%Vc>(!^!MaUz-*tqE8ah zu!%JLtX@<{`eN=RLmV#ld7oq-Q8joDi)efOc5iy6!%hW#_&$HjlB!t|DcLN>yXBa| zCS_|0rIzNoIhuZrM6zgaa^<*CyHk7}t9qezFRy^nliG9JQrP25@{p@39;YJu#728w zzjpg6eRgP%)KLBT#J%;xVtviu;!m6z+xouhTI;p;a7e9XZ8hjzio@+kZ81sejlvh zo{p)hchpk0*fx}iW<$}mq(&cHJR$=~T<~qVv?JP+=6W#o$l`sI`sWR849&>X;B7W8 z*tjOiTNo?E;xoyKBYgWb3NOB>8L`8Rx}5q&E<&A<5}a>N=bODggAq&mnC7$im;xRc zINW{1nXQ9K`hHCXuBJUP0FkU7qNfB49-itvJaRdAyfZd>oTwkWB)n9$RnH*9WlY$* z-*PHU2c;~kpsu{Muyy2o((+|i(yQSEYSMO-V`C}%)82|f{w?8DyxBj`6phA4?R$|2 z?dZ8gxtnY$1E*X&7a#62M9nB<4~Dh-)tI?8=O^2dNJQddc23UQ;!{rqS;S8m7gC26 zVKM1xi7)9nlyLViAJt5Hflos#R+i82QMs8`ZR5{_{b1>79 z*>^w&+1uOOb^8=A)1hCdsz)LGdh!0cfGz`l-Iv~k){DpOtr+b*c6BoLUhbc=?B37P z%1`j*YTp~x3{FXu?<|HjF}xsR3hyS;dn{=787cSQ)p~xX^Dm;TMrWAHW!F?iM_$9) zg({T0-Ckk)PHvy@TYSHr1-7Yu)yh*#Ka#cQ~IOV{!Gf@k@HiiHU}3T5#JZ z3nXc<`mW2zLmHD9Eq&FxokoG7xH#I0A{}0yN=@vTtBb{h?&ad2qQ%>ykLAU9N^pOQ NY%Luv%J%uh{1;g*C*%MC literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png.meta new file mode 100644 index 000000000..de3c64f9d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png.meta @@ -0,0 +1,154 @@ +fileFormatVersion: 2 +guid: 90cf8e542151548c6aa3cba26467e144 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs b/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs new file mode 100644 index 000000000..330fbc194 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs @@ -0,0 +1,117 @@ +using System.Reflection; +using SingularityGroup.HotReload.Editor; +using UnityEditor; +using UnityEngine; + +[InitializeOnLoad] +public class InspectorFreezeFix +{ + // Inspector window getting stuck is fixed by calling UnityEditor.InspectorWindow.RefreshInspectors() + // Below code subscribes to selection changed callback and calls the method if the inspector is actually stuck + + static InspectorFreezeFix() + { + Selection.selectionChanged += OnSelectionChanged; + } + + private static int _lastInitialEditorId; + + private static void OnSelectionChanged() { + if (!EditorCodePatcher.config.enableInspectorFreezeFix) { + return; + } + try { + // Most of stuff is internal so we use reflection here + var inspectorType = typeof(Editor).Assembly.GetType("UnityEditor.InspectorWindow"); + + foreach (var inspector in Resources.FindObjectsOfTypeAll(inspectorType)) { + + object isLockedValue = inspectorType.GetProperty("isLocked")?.GetValue(inspector); + if (isLockedValue == null) { + continue; + } + + // If inspector window is locked deliberately by user (via the lock icon on top-right), we don't need to refresh + var isLocked = (bool)isLockedValue; + if (isLocked) { + continue; + } + + // Inspector getting stuck is due to ActiveEditorTracker of that window getting stuck internally. + // The tracker starts returning same values from m_Tracker.activeEditors property. + // (Root of cause of this is out of my reach as the tracker code is mainly native code) + + // We detect that by checking first element of activeEditors array + // We do the check because we don't want to RefreshInspectors every selection change, RefreshInspectors is expensive + var tracker = inspectorType.GetField("m_Tracker", BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(inspector); + if (tracker == null) { + continue; + } + var activeEditors = tracker.GetType().GetProperty("activeEditors"); + if (activeEditors == null) { + continue; + } + var editors = (Editor[])activeEditors.GetValue(tracker); + if (editors.Length == 0) { + continue; + } + + var first = editors[0].GetInstanceID(); + if (_lastInitialEditorId == first) { + // This forces the tracker to be rebuilt + var m = inspectorType.GetMethod("RefreshInspectors", BindingFlags.Static | BindingFlags.NonPublic); + if (m == null) { + // support for older versions + RefreshInspectors(inspectorType); + } else { + m.Invoke(null, null); + } + } + _lastInitialEditorId = first; + // Calling RefreshInspectors once refreshes all the editors + break; + } + } catch { + // ignore, we don't want to make user experience worse by displaying a warning in this case + } + } + + static void RefreshInspectors(System.Type inspectorType) { + var allInspectorsField = inspectorType.GetField("m_AllInspectors", BindingFlags.NonPublic | BindingFlags.Static); + + if (allInspectorsField == null) { + return; + } + var allInspectors = allInspectorsField.GetValue(null) as System.Collections.IEnumerable; + if (allInspectors == null) { + return; + } + + foreach (var inspector in allInspectors) { + var trackerField = FindFieldInHierarchy(inspector.GetType(), "tracker"); + + if (trackerField == null) { + continue; + } + var tracker = trackerField.GetValue(inspector); + var forceRebuildMethod = tracker.GetType().GetMethod("ForceRebuild", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + if (forceRebuildMethod == null) { + + continue; + } + forceRebuildMethod.Invoke(tracker, null); + } + } + + static PropertyInfo FindFieldInHierarchy(System.Type type, string fieldName) { + PropertyInfo field = null; + + while (type != null && field == null) { + field = type.GetProperty(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + type = type.BaseType; + } + + return field; + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs.meta new file mode 100644 index 000000000..f3dd7f04f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 235343744f6348acb629d549ccafff0b +timeCreated: 1708187279 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation.meta new file mode 100644 index 000000000..09a0fe38b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 12e88a0f97924d18859867b0cc957d03 +timeCreated: 1676802469 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs new file mode 100644 index 000000000..2575d7bd1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs @@ -0,0 +1,98 @@ +using System; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Editor.Cli; + +namespace SingularityGroup.HotReload.Editor { + static class DownloadUtility { + const string baseUrl = "https://cdn.hotreload.net"; + + public static async Task DownloadFile(string url, string targetFilePath, IProgress progress, CancellationToken cancellationToken) { + var tmpDir = Path.GetDirectoryName(targetFilePath); + Directory.CreateDirectory(tmpDir); + using(var client = HttpClientUtils.CreateHttpClient()) { + client.Timeout = TimeSpan.FromMinutes(10); + return await client.DownloadAsync(url, targetFilePath, progress, cancellationToken).ConfigureAwait(false); + } + } + + public static string GetPackagePrefix(string version) { + if (PackageConst.IsAssetStoreBuild) { + return $"releases/asset-store/{version.Replace('.', '-')}"; + } + return $"releases/{version.Replace('.', '-')}"; + } + + public static string GetDownloadUrl(string key) { + return $"{baseUrl}/{key}"; + } + + public static async Task DownloadAsync(this HttpClient client, string requestUri, string destinationFilePath, IProgress progress, CancellationToken cancellationToken = default(CancellationToken)) { + // Get the http headers first to examine the content length + using (var response = await client.GetAsync(requestUri, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false)) { + if (response.StatusCode != HttpStatusCode.OK) { + throw new DownloadException($"Download failed with status code {response.StatusCode} and reason {response.ReasonPhrase}"); + } + var contentLength = response.Content.Headers.ContentLength; + if (!contentLength.HasValue) { + throw new DownloadException("Download failed: Content length unknown"); + } + + using (var fs = new FileStream(destinationFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)) + using (var download = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) { + + // Ignore progress reporting when no progress reporter was + if (progress == null) { + await download.CopyToAsync(fs).ConfigureAwait(false); + } else { + // Convert absolute progress (bytes downloaded) into relative progress (0% - 99.9%) + var relativeProgress = new Progress(totalBytes => progress.Report(Math.Min(99.9f, (float)totalBytes / contentLength.Value))); + // Use extension method to report progress while downloading + await download.CopyToAsync(fs, 81920, relativeProgress, cancellationToken).ConfigureAwait(false); + } + await fs.FlushAsync().ConfigureAwait(false); + if (fs.Length != contentLength.Value) { + throw new DownloadException("Download failed: download file is corrupted"); + } + return new DownloadResult(HttpStatusCode.OK, null); + } + } + } + + static async Task CopyToAsync(this Stream source, Stream destination, int bufferSize, IProgress progress, CancellationToken cancellationToken) { + if (source == null) + throw new ArgumentNullException(nameof(source)); + if (!source.CanRead) + throw new ArgumentException("Has to be readable", nameof(source)); + if (destination == null) + throw new ArgumentNullException(nameof(destination)); + if (!destination.CanWrite) + throw new ArgumentException("Has to be writable", nameof(destination)); + if (bufferSize < 0) + throw new ArgumentOutOfRangeException(nameof(bufferSize)); + + var buffer = new byte[bufferSize]; + long totalBytesRead = 0; + int bytesRead; + while ((bytesRead = await source.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false)) != 0) { + await destination.WriteAsync(buffer, 0, bytesRead, cancellationToken).ConfigureAwait(false); + totalBytesRead += bytesRead; + progress?.Report(totalBytesRead); + } + } + + [Serializable] + public class DownloadException : ApplicationException { + public DownloadException(string message) + : base(message) { + } + + public DownloadException(string message, Exception innerException) + : base(message, innerException) { + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs.meta new file mode 100644 index 000000000..242f4640e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2a7a39befa1f455cb21fcad46513b6e5 +timeCreated: 1676973096 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs new file mode 100644 index 000000000..95919721a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs @@ -0,0 +1,18 @@ +using System; + +namespace SingularityGroup.HotReload.Editor { + static class ExponentialBackoff { + + public static TimeSpan GetTimeout(int attempt, int minBackoff = 250, int maxBackoff = 60000, int deltaBackoff = 400) { + attempt = Math.Min(25, attempt); // safety to avoid overflow below + + var delta = (uint)( + (Math.Pow(2.0, attempt) - 1.0) + * deltaBackoff + ); + + var interval = Math.Min(checked(minBackoff + delta), maxBackoff); + return TimeSpan.FromMilliseconds(interval); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs.meta new file mode 100644 index 000000000..0bae16ee6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5329de48151140eb871721ae80f925cd +timeCreated: 1676908147 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs new file mode 100644 index 000000000..8bb802554 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs @@ -0,0 +1,58 @@ +using System; +using System.IO; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.EditorDependencies; +using UnityEditor; +using UnityEngine; +#if UNITY_2019_4_OR_NEWER +using System.Reflection; +using Unity.CodeEditor; +#endif + +namespace SingularityGroup.HotReload.Editor { + static class InstallUtility { + const string installFlagPath = PackageConst.LibraryCachePath + "/installFlag.txt"; + + public static void DebugClearInstallState() { + File.Delete(installFlagPath); + } + + // HandleEditorStart is only called on editor start, not on domain reload + public static void HandleEditorStart(string updatedFromVersion) { + var showOnStartup = HotReloadPrefs.ShowOnStartup; + if (showOnStartup == ShowOnStartupEnum.Always || (showOnStartup == ShowOnStartupEnum.OnNewVersion && !String.IsNullOrEmpty(updatedFromVersion))) { + HotReloadWindow.Open(); + } + if (HotReloadPrefs.LaunchOnEditorStart) { + EditorCodePatcher.DownloadAndRun().Forget(); + } + + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Editor, StatEventType.Start)).Forget(); + } + + public static void CheckForNewInstall() { + if(File.Exists(installFlagPath)) { + return; + } + Directory.CreateDirectory(Path.GetDirectoryName(installFlagPath)); + using(File.Create(installFlagPath)) { } + //Avoid opening the window on domain reload + EditorApplication.delayCall += HandleNewInstall; + } + + static void HandleNewInstall() { + if (EditorCodePatcher.licenseType == UnityLicenseType.UnityPro) { + RedeemLicenseHelper.I.StartRegistration(); + } + HotReloadWindow.Open(); + HotReloadPrefs.AllowDisableUnityAutoRefresh = true; + HotReloadPrefs.AllAssetChanges = true; + HotReloadPrefs.AutoRecompileUnsupportedChanges = true; + HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode = true; + if (HotReloadCli.CanOpenInBackground) { + HotReloadPrefs.DisableConsoleWindow = true; + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs.meta new file mode 100644 index 000000000..0f1b4a1f2 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ee93b2c98bc7d8f4bb38bbbd5961d354 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs new file mode 100644 index 000000000..1bd631541 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs @@ -0,0 +1,190 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal class ServerDownloader : IProgress { + public float Progress {get; private set;} + public bool Started {get; private set;} + + class Config { + public Dictionary customServerExecutables; + } + + public string GetExecutablePath(ICliController cliController) { + var targetDir = CliUtils.GetExecutableTargetDir(); + var targetPath = Path.Combine(targetDir, cliController.BinaryFileName); + return targetPath; + } + + public bool IsDownloaded(ICliController cliController) { + return File.Exists(GetExecutablePath(cliController)); + } + + public bool CheckIfDownloaded(ICliController cliController) { + if(TryUseUserDefinedBinaryPath(cliController, GetExecutablePath(cliController))) { + Started = true; + Progress = 1f; + return true; + } else if(IsDownloaded(cliController)) { + Started = true; + Progress = 1f; + return true; + } else { + Started = false; + Progress = 0f; + return false; + } + } + + public async Task EnsureDownloaded(ICliController cliController, CancellationToken cancellationToken) { + var targetDir = CliUtils.GetExecutableTargetDir(); + var targetPath = Path.Combine(targetDir, cliController.BinaryFileName); + Started = true; + if(File.Exists(targetPath)) { + Progress = 1f; + return true; + } + Progress = 0f; + await ThreadUtility.SwitchToThreadPool(cancellationToken); + + Directory.CreateDirectory(targetDir); + if(TryUseUserDefinedBinaryPath(cliController, targetPath)) { + Progress = 1f; + return true; + } + + var tmpPath = CliUtils.GetTempDownloadFilePath("Server.tmp"); + var attempt = 0; + bool sucess = false; + HashSet errors = null; + while(!sucess) { + try { + if (File.Exists(targetPath)) { + Progress = 1f; + return true; + } + // Note: we are writing to temp file so if downloaded file is corrupted it will not cause issues until it's copied to target location + var result = await DownloadUtility.DownloadFile(GetDownloadUrl(cliController), tmpPath, this, cancellationToken).ConfigureAwait(false); + sucess = result.statusCode == HttpStatusCode.OK; + } catch (Exception e) { + var error = $"{e.GetType().Name}: {e.Message}"; + errors = (errors ?? new HashSet()); + if (errors.Add(error)) { + Log.Warning($"Download attempt failed. If the issue persists please reach out to customer support for assistance. Exception: {error}"); + } + } + if (!sucess) { + await Task.Delay(ExponentialBackoff.GetTimeout(attempt), cancellationToken).ConfigureAwait(false); + } + Progress = 0; + attempt++; + } + + if (errors?.Count > 0) { + var data = new EditorExtraData { + { StatKey.Errors, new List(errors) }, + }; + // sending telemetry requires server to be running so we only attempt after server is downloaded + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Editor, StatEventType.Download), data).Forget(); + Log.Info("Download succeeded!"); + } + + const int ERROR_ALREADY_EXISTS = 0xB7; + try { + File.Move(tmpPath, targetPath); + } catch(IOException ex) when((ex.HResult & 0x0000FFFF) == ERROR_ALREADY_EXISTS) { + //another downloader came first + try { + File.Delete(tmpPath); + } catch { + //ignored + } + } + Progress = 1f; + return true; + } + + static bool TryUseUserDefinedBinaryPath(ICliController cliController, string targetPath) { + if (!File.Exists(PackageConst.ConfigFileName)) { + return false; + } + + var config = JsonConvert.DeserializeObject(File.ReadAllText(PackageConst.ConfigFileName)); + var customExecutables = config?.customServerExecutables; + if (customExecutables == null) { + return false; + } + + string customBinaryPath; + if(!customExecutables.TryGetValue(cliController.PlatformName, out customBinaryPath)) { + return false; + } + + if (!File.Exists(customBinaryPath)) { + Log.Warning($"unable to find server binary for platform '{cliController.PlatformName}' at '{customBinaryPath}'. " + + $"Will proceed with downloading the binary (default behavior)"); + return false; + } + + try { + var targetFile = new FileInfo(targetPath); + bool copy = true; + if (targetFile.Exists) { + copy = File.GetLastWriteTimeUtc(customBinaryPath) > targetFile.LastWriteTimeUtc; + } + if (copy) { + Directory.CreateDirectory(Path.GetDirectoryName(targetPath)); + File.Copy(customBinaryPath, targetPath, true); + } + return true; + } catch(IOException ex) { + Log.Warning("encountered exception when copying server binary in the specified custom executable path '{0}':\n{1}", customBinaryPath, ex); + return false; + } + } + + static string GetDownloadUrl(ICliController cliController) { + const string version = PackageConst.ServerVersion; + var key = $"{DownloadUtility.GetPackagePrefix(version)}/server/{cliController.PlatformName}/{cliController.BinaryFileName}"; + return DownloadUtility.GetDownloadUrl(key); + } + + void IProgress.Report(float value) { + Progress = value; + } + + public Task PromptForDownload() { + if (EditorUtility.DisplayDialog( + title: "Install platform specific components", + message: InstallDescription, + ok: "Install", + cancel: "More Info") + ) { + return EnsureDownloaded(HotReloadCli.controller, CancellationToken.None); + } + Application.OpenURL(Constants.AdditionalContentURL); + return Task.FromResult(false); + } + + public const string InstallDescription = "For Hot Reload to work, additional components specific to your operating system have to be installed"; + } + + class DownloadResult { + public readonly HttpStatusCode statusCode; + public readonly string error; + public DownloadResult(HttpStatusCode statusCode, string error) { + this.statusCode = statusCode; + this.error = error; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs.meta new file mode 100644 index 000000000..a97f48181 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f076514e142a4915ab2676a9ca6d884a +timeCreated: 1676802482 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs new file mode 100644 index 000000000..fbf393dc7 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs @@ -0,0 +1,94 @@ +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.RuntimeDependencies; +using UnityEditor; +#if UNITY_EDITOR_WIN +using System.Diagnostics; +using Debug = UnityEngine.Debug; +#endif + +namespace SingularityGroup.HotReload.Editor { + static class UpdateUtility { + public static async Task Update(string version, IProgress progress, CancellationToken cancellationToken) { + await ThreadUtility.SwitchToThreadPool(); + + string serverDir; + if(!CliUtils.TryFindServerDir(out serverDir)) { + progress?.Report(1); + return "unable to locate hot reload package"; + } + var packageDir = Path.GetDirectoryName(Path.GetFullPath(serverDir)); + var cacheDir = Path.GetFullPath(PackageConst.LibraryCachePath); + if(Path.GetPathRoot(packageDir) != Path.GetPathRoot(cacheDir)) { + progress?.Report(1); + return "unable to update package because it is located on a different drive than the unity project"; + } + var updatedPackageCopy = BackupPackage(packageDir, version); + + var key = $"{DownloadUtility.GetPackagePrefix(version)}/HotReload.zip"; + var url = DownloadUtility.GetDownloadUrl(key); + var targetFileName = $"HotReload{version.Replace('.', '-')}.zip"; + var targetFilePath = CliUtils.GetTempDownloadFilePath(targetFileName); + var proxy = new Progress(f => progress?.Report(f * 0.7f)); + var result = await DownloadUtility.DownloadFile(url, targetFilePath, proxy, cancellationToken).ConfigureAwait(false); + if(result.error != null) { + progress?.Report(1); + return result.error; + } + + PackageUpdater.UpdatePackage(targetFilePath, updatedPackageCopy); + progress?.Report(0.8f); + + var packageRecycleBinDir = PackageConst.LibraryCachePath + $"/PackageArchived-{version}-{Guid.NewGuid():N}"; + try { + Directory.Move(packageDir, packageRecycleBinDir); + Directory.Move(updatedPackageCopy, packageDir); + } catch { + // fallback to replacing files individually if access to the folder is denied + PackageUpdater.UpdatePackage(targetFilePath, packageDir); + } + try { + Directory.Delete(packageRecycleBinDir, true); + } catch (IOException) { + //ignored + } + + progress?.Report(1); + return null; + } + + static string BackupPackage(string packageDir, string version) { + var backupPath = PackageConst.LibraryCachePath + $"/PackageBackup-{version}"; + if(Directory.Exists(backupPath)) { + Directory.Delete(backupPath, true); + } + DirectoryCopy(packageDir, backupPath); + return backupPath; + } + + static void DirectoryCopy(string sourceDirPath, string destDirPath) { + var rootSource = new DirectoryInfo(sourceDirPath); + + var sourceDirs = rootSource.GetDirectories(); + // ensure destination directory exists + Directory.CreateDirectory(destDirPath); + + // Get the files in the directory and copy them to the new destination + var files = rootSource.GetFiles(); + foreach (var file in files) { + string temppath = Path.Combine(destDirPath, file.Name); + var copy = file.CopyTo(temppath); + copy.LastWriteTimeUtc = file.LastWriteTimeUtc; + } + + // copying subdirectories, and their contents to destination + foreach (var subdir in sourceDirs) { + string subDirDestPath = Path.Combine(destDirPath, subdir.Name); + DirectoryCopy(subdir.FullName, subDirDestPath); + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs.meta new file mode 100644 index 000000000..13700b178 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d8485ce38122465e9e70d5992d9ae7ed +timeCreated: 1676966641 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild.meta new file mode 100644 index 000000000..d600ba4e5 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0fe483b6b7ad4be79b58901d03e35511 +timeCreated: 1674041345 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs new file mode 100644 index 000000000..573ef1bda --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs @@ -0,0 +1,42 @@ +using System; +using System.IO; +using UnityEditor; +using UnityEditor.Build; + +#pragma warning disable CS0618 +namespace SingularityGroup.HotReload.Editor { + public class BuildGenerateBuildInfo : IPreprocessBuild, IPostprocessBuild { + public int callbackOrder => 10; + + public void OnPreprocessBuild(BuildTarget target, string path) { + try { + if (!HotReloadBuildHelper.IncludeInThisBuild()) { + return; + } + // write BuildInfo json into the StreamingAssets directory + GenerateBuildInfo(BuildInfo.GetStoredPath(), target); + } catch (BuildFailedException) { + throw; + } catch (Exception e) { + throw new BuildFailedException(e); + } + } + + private static void GenerateBuildInfo(string buildFilePath, BuildTarget buildTarget) { + var buildInfo = BuildInfoHelper.GenerateBuildInfoMainThread(buildTarget); + // write to StreamingAssets + // create StreamingAssets folder if not exists (in-case project has no StreamingAssets files) + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(buildFilePath)); + File.WriteAllText(buildFilePath, buildInfo.ToJson()); + } + + public void OnPostprocessBuild(BuildTarget target, string path) { + try { + File.Delete(BuildInfo.GetStoredPath()); + } catch { + // ignore + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs.meta new file mode 100644 index 000000000..560e72b4b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 178df48ca88b4cddac448a49196b49bf +timeCreated: 1682338738 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs new file mode 100644 index 000000000..8c553f266 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs @@ -0,0 +1,106 @@ +using System; +using System.IO; +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor { + internal static class HotReloadBuildHelper { + /// + /// Should HotReload runtime be included in the current build? + /// + public static bool IncludeInThisBuild() { + return IsAllBuildSettingsSupported(); + } + + /// + /// Get scripting backend for the current platform. + /// + /// Scripting backend + public static ScriptingImplementation GetCurrentScriptingBackend() { +#pragma warning disable CS0618 + return PlayerSettings.GetScriptingBackend(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget)); +#pragma warning restore CS0618 + } + + public static ManagedStrippingLevel GetCurrentStrippingLevel() { +#pragma warning disable CS0618 + return PlayerSettings.GetManagedStrippingLevel(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget)); +#pragma warning restore CS0618 + } + + public static void SetCurrentScriptingBackend(ScriptingImplementation to) { +#pragma warning disable CS0618 + // only set it if default is not correct (avoid changing ProjectSettings when not needed) + if (GetCurrentScriptingBackend() != to) { + PlayerSettings.SetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup, to); + } +#pragma warning restore CS0618 + } + + public static void SetCurrentStrippingLevel(ManagedStrippingLevel to) { +#pragma warning disable CS0618 + // only set it if default is not correct (avoid changing ProjectSettings when not needed) + if (GetCurrentStrippingLevel() != to) { + PlayerSettings.SetManagedStrippingLevel(EditorUserBuildSettings.selectedBuildTargetGroup, to); + } +#pragma warning restore CS0618 + } + + /// Is the current build target supported? + /// main thread only + public static bool IsBuildTargetSupported() { + var buildTarget = EditorUserBuildSettings.selectedBuildTargetGroup; + return Array.IndexOf(unsupportedBuildTargets, buildTarget) == -1; + } + + /// Are all the settings supported? + /// main thread only + static bool IsAllBuildSettingsSupported() { + if (!IsBuildTargetSupported()) { + return false; + } + + // need way to give it settings object, dont want to give serializedobject + var options = HotReloadSettingsEditor.LoadSettingsOrDefault(); + var so = new SerializedObject(options); + + // check all projeect options + foreach (var option in HotReloadSettingsTab.allOptions) { + var projectOption = option as ProjectOptionBase; + if (projectOption != null) { + // if option is required, build can't use hot reload + if (projectOption.IsRequiredForBuild() && !projectOption.GetValue(so)) { + return false; + } + } + } + + return GetCurrentScriptingBackend() == ScriptingImplementation.Mono2x + && GetCurrentStrippingLevel() == ManagedStrippingLevel.Disabled + && EditorUserBuildSettings.development; + } + + /// + /// Some platforms are not supported because they don't have Mono scripting backend. + /// + /// + /// Only list the platforms that definately don't have Mono scripting. + /// + private static readonly BuildTargetGroup[] unsupportedBuildTargets = new [] { + BuildTargetGroup.iOS, // mono support was removed many years ago + BuildTargetGroup.WebGL, // has never had mono + }; + + public static bool IsMonoSupported(BuildTargetGroup buildTarget) { + // "When a platform can support both backends, Mono is the default. For more information, see Scripting restrictions." + // Unity docs https://docs.unity3d.com/Manual/Mono.html (2019.4/2020.3/2021.3) +#pragma warning disable CS0618 // obsolete since 2023 + var defaultScripting = PlayerSettings.GetDefaultScriptingBackend(buildTarget); +#pragma warning restore CS0618 + if (defaultScripting == ScriptingImplementation.Mono2x) { + return Array.IndexOf(unsupportedBuildTargets, buildTarget) == -1; + } + // default scripting was not Mono, so the platform doesn't support Mono at all. + return false; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs.meta new file mode 100644 index 000000000..8994fdabd --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b9aa611f02544b609c5b29f9d1409d6e +timeCreated: 1674041425 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs new file mode 100644 index 000000000..17e03c67f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs @@ -0,0 +1,133 @@ +using System; +using System.IO; +using System.Text.RegularExpressions; +using UnityEditor.Android; +using UnityEditor.Build; + +namespace SingularityGroup.HotReload.Editor { +#pragma warning disable CS0618 + /// + /// + /// This class sets option in the AndroidManifest that you choose in HotReload build settings. + /// + /// + /// - To connect to the HotReload server through the local network, we need to permit access to http://192...
+ /// - Starting with Android 9, insecure http requests are not allowed by default and must be whitelisted + ///
+ ///
+ internal class PostbuildModifyAndroidManifest : IPostGenerateGradleAndroidProject { +#pragma warning restore CS0618 + public int callbackOrder => 10; + + private const string manifestFileName = "AndroidManifest.xml"; + + public void OnPostGenerateGradleAndroidProject(string path) { + try { + if (!HotReloadBuildHelper.IncludeInThisBuild()) { + return; + } + // Note: in future we may support users with custom configuration for usesCleartextTraffic + #if UNITY_2022_1_OR_NEWER + // Unity 2022 or newer → do nothing, we rely on Unity option to control the flag + #else + // Unity 2021 or older → put manifest flag in if Unity is making a Development Build + var manifestFilePath = FindAndroidManifest(path); + if (manifestFilePath == null) { + throw new BuildFailedException($"[{CodePatcher.TAG}] Unable to find {manifestFileName}"); + } + SetUsesCleartextTraffic(manifestFilePath); + #endif + } catch (BuildFailedException) { + throw; + } catch (Exception e) { + throw new BuildFailedException(e); + } + } + + /// identifier that is used in the deeplink uri scheme + /// (initially tried Application.identifier, but that was giving unexpected results based on PlayerSettings) + // SG-29580 + // Something to uniqly identify the application, but it must be something which is highly likely + // to be the same at build time (studio might have logic to set e.g. product name to MyGameProd or MyGameTest) + public static string ApplicationIdentiferSlug => "app"; +/* + public static string ApplicationIdentiferSlug => Regex.Replace(ApplicationIdentifer, @"[^a-zA-Z0-9\.\-]", "") + .Replace("..", ".") // happens if your companyname in Unity ends with a dot + .ToLowerInvariant(); + + private static void AddDeeplinkForwarder(string manifestFilePath) { + // add the hotreload-${identifier} uri scheme to the AndroidManifest.xml file + // it should be added as part of an intent-filter for the activity "com.singularitygroup.deeplinkforwarder.DeepLinkForwarderActivity" + var contents = File.ReadAllText(manifestFilePath); + if (contents.Contains("android:name=\"com.singularitygroup.deeplinkforwarder.DeepLinkForwarderActivity\"")) { + // user has already set this themselves, don't replace it + return; + } + + //note: not using android:host or any other data attr because android still shows a chooser for all ur hotreload apps + // Therefore must use a unique uri scheme to ensure only one app can handle it. + var activityWithIntentFilter = @" + + + + + + + +"; + var newContents = Regex.Replace(contents, + @"", + activityWithIntentFilter + "\n " + ); + File.WriteAllText(manifestFilePath, newContents); + } +*/ + // Assume unityLibraryPath is to {gradleProject}/unityLibrary/ which is roughly the same across Unity versions 2018/2019/2020/2021/2022 + private static string FindAndroidManifest(string unityLibraryPath) { + // find the AndroidManifest.xml file which we can edit + var dir = new DirectoryInfo(unityLibraryPath); + var manifestFilePath = Path.Combine(dir.FullName, "src", "main", manifestFileName); + if (File.Exists(manifestFilePath)) { + return manifestFilePath; + } + + Log.Info("Did not find {0} at {1}, searching for manifest file inside {2}", manifestFileName, manifestFilePath, dir.FullName); + var manifestFiles = dir.GetFiles(manifestFileName, SearchOption.AllDirectories); + if (manifestFiles.Length == 0) { + return null; + } + + foreach (var file in manifestFiles) { + if (file.FullName.Contains("src")) { + // good choice + return file.FullName; + } + } + // fallback to the first file found + return manifestFiles[0].FullName; + } + + /// + /// Set option android:usesCleartextTraffic="true" + + /// + /// Absolute filepath to the unityLibrary AndroidManifest.xml file + private static void SetUsesCleartextTraffic(string manifestFilePath) { + // Ideally we would create or modify a "Network Security Configuration file" to permit access to local ip addresses + // https://developer.android.com/training/articles/security-config#manifest + // but that becomes difficult when the user has their own configuration file - would need to search for it and it may be inside an aar. + var contents = File.ReadAllText(manifestFilePath); + if (contents.Contains("android:usesCleartextTraffic=")) { + // user has already set this themselves, don't replace it + return; + } + var newContents = Regex.Replace(contents, + @""; + newContents += $"\n"; + File.WriteAllText(manifestFilePath, newContents); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs.meta new file mode 100644 index 000000000..2b1d28b64 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1949292efc07445ea4c040d544e2d369 +timeCreated: 1675441886 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs new file mode 100644 index 000000000..c28b406d7 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs @@ -0,0 +1,26 @@ +using System; +using SingularityGroup.HotReload.Editor.Cli; +using UnityEditor; +using UnityEditor.Build; + +namespace SingularityGroup.HotReload.Editor { +#pragma warning disable CS0618 + class PostbuildSendProjectState : IPostprocessBuild { +#pragma warning restore CS0618 + public int callbackOrder => 9999; + public void OnPostprocessBuild(BuildTarget target, string path) { + try { + if (!HotReloadBuildHelper.IncludeInThisBuild()) { + return; + } + // after build passes, need to send again because EditorApplication.delayCall isn't called. + var buildInfo = BuildInfoHelper.GenerateBuildInfoMainThread(); + HotReloadCli.PrepareBuildInfo(buildInfo); + } catch (BuildFailedException) { + throw; + } catch (Exception e) { + throw new BuildFailedException(e); + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs.meta new file mode 100644 index 000000000..d26597cd4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 3b27b9eab16f78f448477e546fd5eb97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs new file mode 100644 index 000000000..40081e835 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs @@ -0,0 +1,60 @@ +using System; +using UnityEditor; +using UnityEditor.Build; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + /// Includes HotReload Resources only in development builds + /// + /// This build script ensures that HotReload Resources are not included in release builds. + /// + /// When HotReload is enabled:
+ /// - include HotReloadSettingsObject in development Android builds.
+ /// - exclude HotReloadSettingsObject from the build.
+ /// When HotReload is disabled:
+ /// - excludes HotReloadSettingsObject from the build.
+ ///
+ ///
+#pragma warning disable CS0618 + internal class PrebuildIncludeResources : IPreprocessBuild, IPostprocessBuild { +#pragma warning restore CS0618 + public int callbackOrder => 10; + + // Preprocess warnings don't show up in console + bool warnSettingsNotSupported; + + public void OnPreprocessBuild(BuildTarget target, string path) { + try { + if (HotReloadBuildHelper.IncludeInThisBuild()) { + // move scriptable object into Resources/ folder + HotReloadSettingsEditor.AddOrRemoveFromBuild(true); + } else { + // make sure HotReload resources are not in the build + HotReloadSettingsEditor.AddOrRemoveFromBuild(false); + + var options = HotReloadSettingsEditor.LoadSettingsOrDefault(); + var so = new SerializedObject(options); + if (IncludeInBuildOption.I.GetValue(so)) { + warnSettingsNotSupported = true; + } + } + } catch (BuildFailedException) { + throw; + } catch (Exception ex) { + throw new BuildFailedException(ex); + } + } + + public void OnPostprocessBuild(BuildTarget target, string path) { + if (warnSettingsNotSupported) { + Debug.LogWarning("Hot Reload was not included in the build because one or more build settings were not supported."); + } + } + + // Do nothing in post build. settings asset will be dirty if build fails, so not worth fixing just for successful builds. + // [PostProcessBuild] + // private static void PostBuild(BuildTarget target, string pathToBuiltProject) { + // } + } + +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs.meta new file mode 100644 index 000000000..49b143c7f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 7a63dd2d10359e94a8a3c24bf59164fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration.meta new file mode 100644 index 000000000..f6f2a3a63 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ac3ce0c4b45643859281090bdc74719c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs new file mode 100644 index 000000000..2af8f5ab6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs @@ -0,0 +1,44 @@ +using System; +using System.IO; +using System.Security; +using System.Text; +using SingularityGroup.HotReload.Editor.Util; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + class FileIOProvider : IFileIO + { + public bool Exists(string fileName) + { + return File.Exists(fileName); + } + + public string ReadAllText(string fileName) + { + return File.ReadAllText(fileName); + } + + public void WriteAllText(string path, string content) + { + File.WriteAllText(path, content, Encoding.UTF8); + } + + public string EscapedRelativePathFor(string file, string projectDirectory) + { + var projectDir = Path.GetFullPath(projectDirectory); + + // We have to normalize the path, because the PackageManagerRemapper assumes + // dir seperators will be os specific. + var absolutePath = Path.GetFullPath(file.NormalizePath()); + var path = SkipPathPrefix(absolutePath, projectDir); + + return SecurityElement.Escape(path); + } + + private static string SkipPathPrefix(string path, string prefix) + { + return path.StartsWith($@"{prefix}{Path.DirectorySeparatorChar}", StringComparison.Ordinal) + ? path.Substring(prefix.Length + 1) + : path; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs.meta new file mode 100644 index 000000000..0ed786468 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 27e102e0bda3b0c4f95d4e5e9e3bf16a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs new file mode 100644 index 000000000..d55e241ea --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs @@ -0,0 +1,9 @@ +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + class GUIDProvider : IGUIDGenerator + { + public string ProjectGuid(string name) + { + return SolutionGuidGenerator.GuidForProject(name); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs.meta new file mode 100644 index 000000000..0743ef254 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ca39683512eedae448726b029ca101ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs new file mode 100644 index 000000000..0cda7f54a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs @@ -0,0 +1,12 @@ +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + internal interface IFileIO + { + bool Exists(string fileName); + + string ReadAllText(string fileName); + void WriteAllText(string path, string content); + + string EscapedRelativePathFor(string file, string projectDirectory); + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs.meta new file mode 100644 index 000000000..51bf2743c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6e856fe8c0b7d3c45a06140d120fdd87 +timeCreated: 1580717666 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs new file mode 100644 index 000000000..46bde64d9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs @@ -0,0 +1,7 @@ +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + internal interface IGUIDGenerator + { + string ProjectGuid(string name); + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs.meta new file mode 100644 index 000000000..33d8767ce --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 27fd74267707df04ab2cfac0e8abd782 +timeCreated: 1580717700 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs new file mode 100644 index 000000000..de473c01d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs @@ -0,0 +1,43 @@ +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + /// + /// Allows to post process Hot Reload's project generation. + /// This should only be needed if you tinker with Unity's project generation as well. + /// Types that inherit from this interface will get created automatically whenever Hot Reload generates project files. + /// Types that implement this interface need to have a public parameterless default constructor. + /// + public interface IHotReloadProjectGenerationPostProcessor { + + /// + /// Specifies the ordering of the post processor. + /// Post processors with lower callback order get executed first. + /// + int CallbackOrder { get; } + + /// + /// Use this method to set up state you need for the project generation. + /// Calls to unity API need to happen here and it's values need to be cached. + /// This is the only method that will get executed on the main thread. + /// + void InitializeOnMainThread(); + + /// + /// Gets called whenever Hot Reload generated a project file. + /// The destination file path for the .csproj file + /// The file contents of the .csproj file + /// + string OnGeneratedCSProjectThreaded(string path, string contents); + + /// + /// Gets called whenever Hot Reload generated a solution file. + /// The destination file path for the .sln file + /// The file contents of the .sln file + /// + string OnGeneratedSlnSolutionThreaded(string path, string contents); + + /// + /// Gets called after Hot Reload project generation is finished. + /// + void OnGeneratedCSProjectFilesThreaded(); + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs.meta new file mode 100644 index 000000000..e5d7b170a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ff65ad426f484ad5bbd34fb8f9204c4d +timeCreated: 1676637309 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs new file mode 100644 index 000000000..17856eb4f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs @@ -0,0 +1,14 @@ +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + class ProjectGenenerationPostProcessor : AssetPostprocessor { + // Called once before any generation of sln/csproj files happens, can return true to disable generation altogether + static bool OnPreGeneratingCSProjectFiles() { + ProjectGeneration.GenerateSlnAndCsprojFiles(Application.dataPath).Forget(); + return false; + } + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs.meta new file mode 100644 index 000000000..7479d607e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d58a4838109c4b31ac7f221547ad82e8 +timeCreated: 1676527868 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs new file mode 100644 index 000000000..cb2d3bfb3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs @@ -0,0 +1,893 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload; +using SingularityGroup.HotReload.Editor.Util; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEditor.PackageManager; +using UnityEditorInternal; +using Assembly = UnityEditor.Compilation.Assembly; +using PackageInfo = UnityEditor.PackageManager.PackageInfo; +#if UNITY_2019_1_OR_NEWER +using System.Reflection; +#endif + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + class ProjectGeneration { + private enum ScriptingLanguage { + None, + CSharp + } + + [Serializable] + class Config { + public string projectExclusionRegex; + public HashSet projectBlacklist; + public HashSet polyfillSourceFiles; + public bool excludeAllAnalyzers; + public bool useBuiltInProjectGeneration; + } + + public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003"; + + /// + /// Map source extensions to ScriptingLanguages + /// + private static readonly Dictionary k_BuiltinSupportedExtensions = + new Dictionary { + { "cs", ScriptingLanguage.CSharp }, + { "uxml", ScriptingLanguage.None }, + { "uss", ScriptingLanguage.None }, + { "shader", ScriptingLanguage.None }, + { "compute", ScriptingLanguage.None }, + { "cginc", ScriptingLanguage.None }, + { "hlsl", ScriptingLanguage.None }, + { "glslinc", ScriptingLanguage.None }, + { "template", ScriptingLanguage.None }, + { "raytrace", ScriptingLanguage.None }, + { "json", ScriptingLanguage.None }, + { "rsp", ScriptingLanguage.None }, + { "asmdef", ScriptingLanguage.None }, + { "asmref", ScriptingLanguage.None }, + { "xaml", ScriptingLanguage.None }, + { "tt", ScriptingLanguage.None }, + { "t4", ScriptingLanguage.None }, + { "ttinclude", ScriptingLanguage.None } + }; + + private string m_SolutionProjectEntryTemplate = string.Join(Environment.NewLine, + @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""", + @"EndProject").Replace(" ", "\t"); + + private string m_SolutionProjectConfigurationTemplate = string.Join(Environment.NewLine, + @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU", + @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU").Replace(" ", "\t"); + + private string[] m_ProjectSupportedExtensions = new string[0]; + + private readonly string m_ProjectName; + private readonly string m_ProjectDirectory; + private readonly string m_SolutionDirectory; + private readonly IFileIO m_FileIOProvider; + private readonly IGUIDGenerator m_GUIDGenerator; + private static readonly SemaphoreSlim gate = new SemaphoreSlim(1, 1); + + private const string k_ToolsVersion = "4.0"; + private const string k_ProductVersion = "10.0.20506"; + private const string k_BaseDirectory = "."; + +#if !UNITY_2020_2_OR_NEWER + private const string k_TargetLanguageVersion = "latest"; +#endif + + // ReSharper disable once CollectionNeverUpdated.Local + private readonly Dictionary m_PackageInfoCache = + new Dictionary(); + + private Assembly[] m_AllEditorAssemblies; + + private Assembly[] m_AllPlayerAssemblies; + + private string[] m_AllAssetPaths; + + private string m_EngineAssemblyPath; + + private string m_EditorAssemblyPath; + + private bool m_SuppressCommonWarnings; + + private string m_FallbackRootNamespace; + + private IHotReloadProjectGenerationPostProcessor[] m_PostProcessors; + + + public static bool IsSyncing => gate.CurrentCount == 0; + + internal const string tempDir = PackageConst.LibraryCachePath + "/Solution"; + public static string GetUnityProjectDirectory(string dataPath) => new DirectoryInfo(dataPath).Parent.FullName; + public static string GetSolutionFilePath(string dataPath) => Path.Combine(tempDir, Path.GetFileName(GetUnityProjectDirectory(dataPath)) + ".sln"); + + public static Task GenerateSlnAndCsprojFiles(string dataPath) { + if (!IsSyncing) { + return GenerateAsync(dataPath); + } + return Task.CompletedTask; + } + + public static Task EnsureSlnAndCsprojFiles(string dataPath) { + if (File.Exists(GetSolutionFilePath(dataPath))) { + return Task.CompletedTask; + } + + return GenerateAsync(dataPath); + } + + private static Task GenerateAsync(string dataPath) { + Directory.CreateDirectory(tempDir); + var gen = new ProjectGeneration(tempDir, GetUnityProjectDirectory(dataPath)); + return gen.Sync(); + } + + + public ProjectGeneration(string solutionDirectory, string unityProjectDirectory) { + m_ProjectDirectory = unityProjectDirectory; + m_SolutionDirectory = solutionDirectory; + m_ProjectName = Path.GetFileName(unityProjectDirectory); + m_FileIOProvider = new FileIOProvider(); + m_GUIDGenerator = new GUIDProvider(); + } + + public async Task Sync() { + await ThreadUtility.SwitchToThreadPool(); + var config = LoadConfig(); + if (config.useBuiltInProjectGeneration) { + return; + } + + await ThreadUtility.SwitchToMainThread(); + await gate.WaitAsync(); + try { + //Cache all data that is accessed via unity API on the unity main thread. + m_AllAssetPaths = AssetDatabase.GetAllAssetPaths(); + m_ProjectSupportedExtensions = EditorSettings.projectGenerationUserExtensions; + m_EngineAssemblyPath = InternalEditorUtility.GetEngineAssemblyPath(); + m_EditorAssemblyPath = InternalEditorUtility.GetEditorAssemblyPath(); + m_FallbackRootNamespace = EditorSettings.projectGenerationRootNamespace; + m_SuppressCommonWarnings = +#if UNITY_2020_1_OR_NEWER + PlayerSettings.suppressCommonWarnings; +#else + false; +#endif + + //Do the remaining work on a separate thread + await Task.WhenAll( + BuildPackageInfoCache(), + BuildEditorAssemblies(), + BuildPostProcessors() + ); + await GenerateAndWriteSolutionAndProjects(config); + } finally { + gate.Release(); + } + } + + private Config LoadConfig() { + var configPath = Path.Combine(m_ProjectDirectory, PackageConst.ConfigFileName); + Config config; + if(File.Exists(configPath)) { + config = JsonConvert.DeserializeObject(File.ReadAllText(configPath)); + } else { + config = new Config(); + } + return config; + } + + private bool ShouldFileBePartOfSolution(string file) { + // Exclude files coming from packages except if they are internalized. + if (IsInternalizedPackagePath(file)) { + return false; + } + + return HasValidExtension(file); + } + + public bool HasValidExtension(string file) { + var extension = Path.GetExtension(file); + + // Dll's are not scripts but still need to be included.. + if (file.Equals(".dll", StringComparison.OrdinalIgnoreCase)) + return true; + + return IsSupportedExtension(extension); + } + + private bool IsSupportedExtension(string extension) { + extension = extension.TrimStart('.'); + return k_BuiltinSupportedExtensions.ContainsKey(extension) || m_ProjectSupportedExtensions.Contains(extension); + } + + async Task GenerateAndWriteSolutionAndProjects(Config config) { + await ThreadUtility.SwitchToThreadPool(); + + var projectExclusionRegex = config.projectExclusionRegex != null ? new Regex(config.projectExclusionRegex, RegexOptions.Compiled | RegexOptions.Singleline) : null; + var projectBlacklist = config.projectBlacklist ?? new HashSet(); + var polyfillSourceFiles = config.polyfillSourceFiles ?? new HashSet(); + var filteredProjects = new HashSet(); + var runtimeDependenciesBuilder = new List(); + runtimeDependenciesBuilder.Add(typeof(HarmonyLib.DetourApi).Assembly.Location); +# if UNITY_2019_4_OR_NEWER + runtimeDependenciesBuilder.Add(typeof(Helper2019).Assembly.Location); +#endif +# if UNITY_2020_3_OR_NEWER + runtimeDependenciesBuilder.Add(typeof(Helper2020).Assembly.Location); +#endif +# if UNITY_2022_2_OR_NEWER + runtimeDependenciesBuilder.Add(typeof(Helper2022).Assembly.Location); +#endif + var runtimeDependencies = runtimeDependenciesBuilder.ToArray(); + + // Only synchronize islands that have associated source files and ones that we actually want in the project. + // This also filters out DLLs coming from .asmdef files in packages. + var assemblies = GetAssemblies(ShouldFileBePartOfSolution).ToArray(); + var projectParts = new List(); + foreach (var assembly in assemblies) { + if(projectExclusionRegex != null && projectExclusionRegex.IsMatch(assembly.name)) { + filteredProjects.Add(assembly.name); + continue; + } + var part = new ProjectPart(assembly.name, assembly, "", m_FallbackRootNamespace, polyfillSourceFiles); + string projectPath; +# if (UNITY_2021_3_OR_NEWER) + projectPath = Path.GetRelativePath(m_ProjectDirectory, ProjectFile(part)).Replace('\\', '/'); +# else + projectPath = ProjectFile(part).Replace('\\', '/').Replace(m_ProjectDirectory.Replace('\\', '/'), ""); +#endif + if(projectBlacklist.Contains(projectPath)) { + filteredProjects.Add(assembly.name); + continue; + } + projectParts.Add(part); + } + + SyncSolution(projectParts.ToArray()); + + await ThreadUtility.SwitchToMainThread(); + var responseFiles = new List[projectParts.Count]; + for (var i = 0; i < projectParts.Count; i++) { + responseFiles[i] = projectParts[i].ParseResponseFileData(m_ProjectDirectory).ToList(); + } + + await ThreadUtility.SwitchToThreadPool(); + for (var i = 0; i < projectParts.Count; i++) { + SyncProject(projectParts[i], responseFiles[i], filteredProjects, runtimeDependencies, config); + } + + foreach (var pp in m_PostProcessors) { + try { + pp.OnGeneratedCSProjectFilesThreaded(); + } catch (Exception ex) { + Log.Warning("Post processor '{0}' threw exception when calling OnGeneratedCSProjectFilesThreaded:\n{1}", pp, ex); + } + } + } + + private void SyncProject( + ProjectPart island, + List responseFileData, + HashSet filteredProjects, + string[] runtimeDependencies, + Config config) { + + SyncProjectFileIfNotChanged( + ProjectFile(island), + ProjectText(island, responseFileData, filteredProjects, runtimeDependencies, config)); + } + + private void SyncProjectFileIfNotChanged(string path, string newContents) { + foreach (var pp in m_PostProcessors) { + try { + newContents = pp.OnGeneratedCSProjectThreaded(path, newContents); + } catch (Exception ex) { + Log.Warning("Post processor '{0}' failed when processing project '{1}':\n{2}", pp, path, ex); + } + } + + SyncFileIfNotChanged(path, newContents); + } + + private void SyncSolutionFileIfNotChanged(string path, string newContents) { + foreach (var pp in m_PostProcessors) { + try { + newContents = pp.OnGeneratedSlnSolutionThreaded(path, newContents); + } catch (Exception ex) { + Log.Warning("Post processor '{0}' failed when processing solution '{1}':\n{2}", pp, path, ex); + } + } + + SyncFileIfNotChanged(path, newContents); + } + + + private void SyncFileIfNotChanged(string path, string newContents) { + try { + if (m_FileIOProvider.Exists(path) && newContents == m_FileIOProvider.ReadAllText(path)) { + return; + } + } catch (Exception exception) { + Log.Exception(exception); + } + + m_FileIOProvider.WriteAllText(path, newContents); + } + + private string ProjectText(ProjectPart assembly, List responseFilesData, HashSet filteredProjects, string[] runtimeDependencies, Config config) { + var projectBuilder = new StringBuilder(ProjectHeader(assembly, responseFilesData, config)); + + foreach (var file in assembly.SourceFiles) { + var fullFile = m_FileIOProvider.EscapedRelativePathFor(file, m_SolutionDirectory); + projectBuilder.Append(" ").Append(Environment.NewLine); + } + + projectBuilder.Append(assembly.AssetsProjectPart); + + var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r)); + var internalAssemblyReferences = assembly.AssemblyReferences + .Where(reference => filteredProjects.Contains(reference.name) || !reference.sourceFiles.Any(ShouldFileBePartOfSolution)).Select(i => i.outputPath); + var allReferences = + assembly.CompiledAssemblyReferences + .Union(responseRefs) + .Union(internalAssemblyReferences).ToArray(); + + foreach (var reference in allReferences) { + var fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(m_ProjectDirectory, reference); + AppendReference(fullReference, projectBuilder); + } + foreach (var path in runtimeDependencies) { + AppendReference(path, projectBuilder); + } + + if (assembly.AssemblyReferences.Length > 0) { + projectBuilder.Append(" ").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(Environment.NewLine); + foreach (var reference in assembly.AssemblyReferences.Where(i => !filteredProjects.Contains(i.name) && i.sourceFiles.Any(ShouldFileBePartOfSolution))) { + var name = GetProjectName(reference.name, reference.defines); + projectBuilder.Append(" ") + .Append(Environment.NewLine); + projectBuilder.Append(" {").Append(ProjectGuid(name)).Append("}").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(name).Append("").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(Environment.NewLine); + } + } + + projectBuilder.Append(ProjectFooter()); + return projectBuilder.ToString(); + } + + private static void AppendReference(string fullReference, StringBuilder projectBuilder) { + var escapedFullPath = SecurityElement.Escape(fullReference); + escapedFullPath = escapedFullPath.NormalizePath(); + projectBuilder.Append(" ").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(Environment.NewLine); + } + + private string ProjectFile(ProjectPart projectPart) { + return Path.Combine(m_SolutionDirectory, $"{GetProjectName(projectPart.Name, projectPart.Defines)}.csproj"); + } + + public string SolutionFile() { + return Path.Combine(m_SolutionDirectory, $"{m_ProjectName}.sln"); + } + + private string ProjectHeader( + ProjectPart assembly, + List responseFilesData, + Config config + ) { + var otherResponseFilesData = GetOtherArgumentsFromResponseFilesData(responseFilesData); + var arguments = new object[] { + k_ToolsVersion, + k_ProductVersion, + ProjectGuid(GetProjectName(assembly.Name, assembly.Defines)), + m_EngineAssemblyPath, + m_EditorAssemblyPath, + string.Join(";", assembly.Defines.Concat(responseFilesData.SelectMany(x => x.Defines)).Distinct().ToArray()), + MSBuildNamespaceUri, + assembly.Name, + assembly.OutputPath, + assembly.RootNamespace, + "", + GenerateLangVersion(otherResponseFilesData["langversion"], assembly), + k_BaseDirectory, + assembly.CompilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe), + GenerateNoWarn(otherResponseFilesData["nowarn"].Distinct().ToList()), + config.excludeAllAnalyzers ? "" : GenerateAnalyserItemGroup(RetrieveRoslynAnalyzers(assembly, otherResponseFilesData)), + config.excludeAllAnalyzers ? "" : GenerateAnalyserAdditionalFiles(otherResponseFilesData["additionalfile"].SelectMany(x=>x.Split(';')).Distinct().ToArray()), + config.excludeAllAnalyzers ? "" : GenerateRoslynAnalyzerRulesetPath(assembly, otherResponseFilesData), + GenerateWarningLevel(otherResponseFilesData["warn"].Concat(otherResponseFilesData["w"]).Distinct()), + GenerateWarningAsError(otherResponseFilesData["warnaserror"], otherResponseFilesData["warnaserror-"], + otherResponseFilesData["warnaserror+"]), + GenerateDocumentationFile(otherResponseFilesData["doc"].ToArray()), + GenerateNullable(otherResponseFilesData["nullable"]) + }; + + try { + return string.Format(GetProjectHeaderTemplate(), arguments); + } catch (Exception) { + throw new NotSupportedException( + "Failed creating c# project because the c# project header did not have the correct amount of arguments, which is " + + arguments.Length); + } + } + + string[] RetrieveRoslynAnalyzers(ProjectPart assembly, ILookup otherResponseFilesData) { + var otherAnalyzers = otherResponseFilesData["a"] ?? Array.Empty(); + #if UNITY_2020_2_OR_NEWER + return otherResponseFilesData["analyzer"].Concat(otherAnalyzers) + .SelectMany(x=>x.Split(';')) + // #if !ROSLYN_ANALYZER_FIX + // .Concat(GetRoslynAnalyzerPaths()) + // #else + .Concat(assembly.CompilerOptions.RoslynAnalyzerDllPaths) + // #endif + .Select(MakeAbsolutePath) + .Distinct() + .ToArray(); + #else + return otherResponseFilesData["analyzer"].Concat(otherAnalyzers) + .SelectMany(x=>x.Split(';')) + .Distinct() + .Select(MakeAbsolutePath) + .ToArray(); + #endif + } + + private static string GenerateAnalyserItemGroup(string[] paths) { + // + // + // + // + if (!paths.Any()) + return string.Empty; + + var analyserBuilder = new StringBuilder(); + analyserBuilder.AppendLine(" "); + foreach (var path in paths) { + analyserBuilder.AppendLine($" "); + } + + analyserBuilder.AppendLine(" "); + return analyserBuilder.ToString(); + } + + private string GenerateRoslynAnalyzerRulesetPath(ProjectPart assembly, ILookup otherResponseFilesData) { +#if UNITY_2020_2_OR_NEWER + return GenerateAnalyserRuleSet(otherResponseFilesData["ruleset"].Append(assembly.CompilerOptions.RoslynAnalyzerRulesetPath) + .Where(a => !string.IsNullOrEmpty(a)).Distinct().Select(x => MakeAbsolutePath(x).NormalizePath()).ToArray()); +#else + return GenerateAnalyserRuleSet(otherResponseFilesData["ruleset"].Distinct().Select(x => MakeAbsolutePath(x).NormalizePath()).ToArray()); +#endif + } + + private static string GenerateAnalyserRuleSet(string[] paths) { + //..\path\to\myrules.ruleset + if (!paths.Any()) + return string.Empty; + + return + $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}"; + } + + private static string MakeAbsolutePath(string path) { + return Path.IsPathRooted(path) ? path : Path.GetFullPath(path); + } + + private string GenerateNullable(IEnumerable enumerable) { + var val = enumerable.FirstOrDefault(); + if (string.IsNullOrWhiteSpace(val)) + return string.Empty; + + return $"{Environment.NewLine} {val}"; + } + + private static string GenerateDocumentationFile(string[] paths) { + if (!paths.Any()) + return String.Empty; + + return $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}"; + } + + private static string GenerateWarningAsError(IEnumerable args, IEnumerable argsMinus, IEnumerable argsPlus) { + var returnValue = String.Empty; + var allWarningsAsErrors = false; + var warningIds = new List(); + + foreach (var s in args) { + if (s == "+" || s == string.Empty) allWarningsAsErrors = true; + else if (s == "-") allWarningsAsErrors = false; + else { + warningIds.Add(s); + } + } + + warningIds.AddRange(argsPlus); + + returnValue += $@" {allWarningsAsErrors}"; + if (warningIds.Any()) { + returnValue += $"{Environment.NewLine} {string.Join(";", warningIds)}"; + } + + if (argsMinus.Any()) + returnValue += $"{Environment.NewLine} {string.Join(";", argsMinus)}"; + + return $"{Environment.NewLine}{returnValue}"; + } + + private static string GenerateWarningLevel(IEnumerable warningLevel) { + var level = warningLevel.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(level)) + return level; + + return 4.ToString(); + } + + private static string GetSolutionText() { + return string.Join(Environment.NewLine, + @"", + @"Microsoft Visual Studio Solution File, Format Version {0}", + @"# Visual Studio {1}", + @"{2}", + @"Global", + @" GlobalSection(SolutionConfigurationPlatforms) = preSolution", + @" Debug|Any CPU = Debug|Any CPU", + @" EndGlobalSection", + @" GlobalSection(ProjectConfigurationPlatforms) = postSolution", + @"{3}", + @" EndGlobalSection", + @" GlobalSection(SolutionProperties) = preSolution", + @" HideSolutionNode = FALSE", + @" EndGlobalSection", + @"EndGlobal", + @"").Replace(" ", "\t"); + } + + private static string GetProjectFooterTemplate() { + return string.Join(Environment.NewLine, + @" ", + @" ", + @" ", + @"", + @""); + } + + private static string GetProjectHeaderTemplate() { + var header = new[] { + @"", + @"", + @" ", + @" {11}", + @" <_TargetFrameworkDirectories>non_empty_path_generated_by_unity.rider.package", + @" <_FullFrameworkReferenceAssemblyPaths>non_empty_path_generated_by_unity.rider.package", + @" true{17}", + @" ", + @" ", + @" Debug", + @" AnyCPU", + @" {1}", + @" 2.0", + @" {9}", + @" {{{2}}}", + @" {{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1}};{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}", + @" Library", + @" Properties", + @" {7}", + @" v4.7.1", + @" 512", + @" {12}", + @" ", + @" ", + @" true", + @" full", + @" false", + @" {8}", + @" {5}", + @" prompt", + @" {18}", + @" {14}", + @" {13}{19}{20}{21}", + @" " + }; + + var forceExplicitReferences = new[] { + @" ", + @" true", + @" true", + @" false", + @" false", + @" false", + @" " + }; + + var footer = new[] { + @"{15}{16} ", + @"" + }; + + var pieces = header.Concat(forceExplicitReferences).Concat(footer).ToArray(); + return string.Join(Environment.NewLine, pieces); + } + + private void SyncSolution(ProjectPart[] islands) { + SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(islands)); + } + + private string SolutionText(ProjectPart[] islands) { + var fileversion = "11.00"; + var vsversion = "2010"; + + var projectEntries = GetProjectEntries(islands); + var projectConfigurations = string.Join(Environment.NewLine, + islands.Select(i => GetProjectActiveConfigurations(ProjectGuid(GetProjectName(i.Name, i.Defines)))).ToArray()); + return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations); + } + + private static ILookup GetOtherArgumentsFromResponseFilesData(List responseFilesData) { + var paths = responseFilesData.SelectMany(x => { + return x.OtherArguments + .Where(a => a.StartsWith("/", StringComparison.Ordinal) || a.StartsWith("-", StringComparison.Ordinal)) + .Select(b => { + var index = b.IndexOf(":", StringComparison.Ordinal); + if (index > 0 && b.Length > index) { + var key = b.Substring(1, index - 1); + return new KeyValuePair(key, b.Substring(index + 1)); + } + + const string warnaserror = "warnaserror"; + if (b.Substring(1).StartsWith(warnaserror, StringComparison.Ordinal)) { + return new KeyValuePair(warnaserror, b.Substring(warnaserror.Length + 1)); + } + + const string nullable = "nullable"; + if (b.Substring(1).StartsWith(nullable)) { + var res = b.Substring(nullable.Length + 1); + if (string.IsNullOrWhiteSpace(res) || res.Equals("+")) + res = "enable"; + else if (res.Equals("-")) + res = "disable"; + return new KeyValuePair(nullable, res); + } + + return default(KeyValuePair); + }); + }) + .Distinct() + .ToLookup(o => o.Key, pair => pair.Value); + return paths; + } + + private string GenerateLangVersion(IEnumerable langVersionList, ProjectPart assembly) { + var langVersion = langVersionList.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(langVersion)) + return langVersion; +#if UNITY_2020_2_OR_NEWER + return assembly.CompilerOptions.LanguageVersion; +#else + return k_TargetLanguageVersion; +#endif + } + + private static string GenerateAnalyserAdditionalFiles(string[] paths) { + if (!paths.Any()) + return string.Empty; + + var analyserBuilder = new StringBuilder(); + analyserBuilder.AppendLine(" "); + foreach (var path in paths) { + analyserBuilder.AppendLine($" "); + } + + analyserBuilder.AppendLine(" "); + return analyserBuilder.ToString(); + } + + public string GenerateNoWarn(List codes) { + if (m_SuppressCommonWarnings) + codes.AddRange(new[] { "0169", "0649" }); + + if (!codes.Any()) + return string.Empty; + + return string.Join(",", codes.Distinct()); + } + + private string GetProjectEntries(ProjectPart[] islands) { + var projectEntries = islands.Select(i => string.Format( + m_SolutionProjectEntryTemplate, + SolutionGuidGenerator.GuidForSolution(), + i.Name, + Path.GetFileName(ProjectFile(i)), + ProjectGuid(GetProjectName(i.Name, i.Defines)) + )); + + return string.Join(Environment.NewLine, projectEntries.ToArray()); + } + + /// + /// Generate the active configuration string for a given project guid + /// + private string GetProjectActiveConfigurations(string projectGuid) { + return string.Format( + m_SolutionProjectConfigurationTemplate, + projectGuid); + } + + private static string ProjectFooter() { + return GetProjectFooterTemplate(); + } + + + private string ProjectGuid(string name) { + return m_GUIDGenerator.ProjectGuid(m_ProjectName + name); + } + + public ProjectGenerationFlag ProjectGenerationFlag => ProjectGenerationFlag.Local | ProjectGenerationFlag.Embedded; + + public string GetAssemblyNameFromScriptPath(string path) { + return CompilationPipeline.GetAssemblyNameFromScriptPath(path); + } + + public IEnumerable GetAssemblies(Func shouldFileBePartOfSolution) { + return m_AllEditorAssemblies.Where(a => a.sourceFiles.Any(shouldFileBePartOfSolution)); + } + + private Task BuildEditorAssemblies() { + var assemblies = CompilationPipeline.GetAssemblies(AssembliesType.Editor); + return Task.Run(() => { + var result = new Assembly[assemblies.Length]; + for (var i = 0; i < assemblies.Length; i++) { + var assembly = assemblies[i]; + var outputPath = $@"Temp\Bin\Debug\{assembly.name}\"; + result[i] = new Assembly(assembly.name, outputPath, assembly.sourceFiles, + assembly.defines, + assembly.assemblyReferences, assembly.compiledAssemblyReferences, + assembly.flags, assembly.compilerOptions +#if UNITY_2020_2_OR_NEWER + , assembly.rootNamespace +#endif + ); + } + + m_AllEditorAssemblies = result; + }); + } + + public string GetProjectName(string name, string[] defines) { + if (!ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.PlayerAssemblies)) + return name; + return !defines.Contains("UNITY_EDITOR") ? name + ".Player" : name; + } + + private static string ResolvePotentialParentPackageAssetPath(string assetPath) { + const string packagesPrefix = "packages/"; + if (!assetPath.StartsWith(packagesPrefix, StringComparison.OrdinalIgnoreCase)) { + return null; + } + + var followupSeparator = assetPath.IndexOf('/', packagesPrefix.Length); + if (followupSeparator == -1) { + return assetPath.ToLowerInvariant(); + } + + return assetPath.Substring(0, followupSeparator).ToLowerInvariant(); + } + + public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath) { + var parentPackageAssetPath = ResolvePotentialParentPackageAssetPath(assetPath); + if (parentPackageAssetPath == null) { + return null; + } + + PackageInfo cachedPackageInfo; + if (m_PackageInfoCache.TryGetValue(parentPackageAssetPath, out cachedPackageInfo)) { + return cachedPackageInfo; + } + + return null; + } + + async Task BuildPackageInfoCache() { +#if UNITY_2019_4_OR_NEWER + m_PackageInfoCache.Clear(); + var parentAssetPaths = new HashSet(); + await Task.Run(() => { + for (var i = 0; i < m_AllAssetPaths.Length; i++) { + if (string.IsNullOrWhiteSpace(m_AllAssetPaths[i])) { + continue; + } + + var parentPackageAssetPath = ResolvePotentialParentPackageAssetPath(m_AllAssetPaths[i]); + if (parentPackageAssetPath == null) { + continue; + } + + parentAssetPaths.Add(parentPackageAssetPath); + } + }); + foreach (var parentAssetPath in parentAssetPaths) { + var result = UnityEditor.PackageManager.PackageInfo.FindForAssetPath(parentAssetPath); + m_PackageInfoCache.Add(parentAssetPath, result); + } +#else + //keep compiler happy + await Task.CompletedTask; +#endif + } + + async Task BuildPostProcessors() { +#if UNITY_2019_1_OR_NEWER + var types = TypeCache.GetTypesDerivedFrom(); + m_PostProcessors = await Task.Run(() => { + var postProcessors = new List(types.Count); + foreach (var type in types) { + try { + var instance = (IHotReloadProjectGenerationPostProcessor)Activator.CreateInstance(type); + postProcessors.Add(instance); + } catch (MissingMethodException) { + Log.Warning("The type '{0}' was expected to have a public default constructor but it didn't", type.FullName); + } catch (TargetInvocationException ex) { + Log.Warning("Exception occurred when invoking default constructor of '{0}':\n{1}", type.FullName, ex.InnerException); + } catch (Exception ex) { + Log.Warning("Unknown exception encountered when trying to create post processor '{0}':\n{1}", type.FullName, ex); + } + } + + postProcessors.Sort((x, y) => x.CallbackOrder.CompareTo(y.CallbackOrder)); + return postProcessors.ToArray(); + }); + foreach (var postProcessor in m_PostProcessors) { + postProcessor.InitializeOnMainThread(); + } +#else + m_PostProcessors = new IHotReloadProjectGenerationPostProcessor[0]; + //keep compiler happy + await Task.CompletedTask; +#endif + } + + public bool IsInternalizedPackagePath(string path) { + if (string.IsNullOrWhiteSpace(path)) { + return false; + } + + var packageInfo = FindForAssetPath(path); + if (packageInfo == null) { + return false; + } + + var packageSource = packageInfo.source; + switch (packageSource) { + case PackageSource.Embedded: + case PackageSource.Local: + return false; + default: + return true; + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs.meta new file mode 100644 index 000000000..3b0dfe4f3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c7b221ce3667aeb4ea915b8e2eca7213 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs new file mode 100644 index 000000000..ac6781f76 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs @@ -0,0 +1,18 @@ +using System; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + [Flags] + enum ProjectGenerationFlag + { + None = 0, + Embedded = 1, + Local = 2, + Registry = 4, + Git = 8, + BuiltIn = 16, + Unknown = 32, + PlayerAssemblies = 64, + LocalTarBall = 128, + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta new file mode 100644 index 000000000..bd530b2ac --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ea506e49c851dbd4fa394c3ed513970c +timeCreated: 1580820569 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs new file mode 100644 index 000000000..4f2fa3a80 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor.Compilation; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + internal class ProjectPart + { + public string Name { get; } + public string OutputPath { get; } + public Assembly Assembly { get; } + public string AssetsProjectPart { get; } + public string[] SourceFiles { get; } + public string RootNamespace { get; } + public Assembly[] AssemblyReferences { get; } + public string[] CompiledAssemblyReferences { get; } + public string[] Defines { get; } + public ScriptCompilerOptions CompilerOptions { get; } + + public ProjectPart(string name, Assembly assembly, string assetsProjectPart, string fallbackRootNamespace, HashSet additionalSourceFiles) + { + Name = name; + Assembly = assembly; + AssetsProjectPart = assetsProjectPart; + OutputPath = assembly != null ? assembly.outputPath : "Temp/Bin/Debug"; + SourceFiles = assembly != null ? assembly.sourceFiles.Union(additionalSourceFiles).ToArray() : new string[0]; +#if UNITY_2020_2_OR_NEWER + RootNamespace = assembly != null ? assembly.rootNamespace : string.Empty; +#else + RootNamespace = fallbackRootNamespace; +#endif + AssemblyReferences = assembly != null ? assembly.assemblyReferences : new Assembly[0]; + CompiledAssemblyReferences = assembly!=null? assembly.compiledAssemblyReferences:new string[0]; + Defines = assembly != null ? assembly.defines : new string[0]; + CompilerOptions = assembly != null ? assembly.compilerOptions : new ScriptCompilerOptions(); + } + + public IEnumerable ParseResponseFileData(string projectDirectory) + { +#if UNITY_2019_1_OR_NEWER + if (Assembly == null) + return new ResponseFileData[0]; + + var systemReferenceDirectories = + CompilationPipeline.GetSystemAssemblyDirectories(Assembly.compilerOptions.ApiCompatibilityLevel); + + var responseFilesData = Assembly.compilerOptions.ResponseFiles.ToDictionary( + x => x, x => CompilationPipeline.ParseResponseFile( + x, + projectDirectory, + systemReferenceDirectories + )); + + var responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any()) + .ToDictionary(x => x.Key, x => x.Value); + + if (responseFilesWithErrors.Any()) + { + foreach (var error in responseFilesWithErrors) + foreach (var valueError in error.Value.Errors) + { + Log.Error("{0} Parse Error : {1}", error.Key, valueError); + } + } + + return responseFilesData.Select(x => x.Value); +#else + return new ResponseFileData[0]; +#endif + } + } + +} +#if !UNITY_2019_1_OR_NEWER +namespace UnityEditor.Compilation { + internal class ResponseFileData { + public string[] Defines; + public string[] FullPathReferences; + public string[] Errors; + public string[] OtherArguments; + public bool Unsafe; + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs.meta new file mode 100644 index 000000000..9a107b7b0 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3067d709488a2374aba4a7b421588fe9 +timeCreated: 1604050230 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs new file mode 100644 index 000000000..14175313d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs @@ -0,0 +1,29 @@ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + internal static class SolutionGuidGenerator + { + public static string GuidForProject(string projectName) + { + return ComputeGuidHashFor(projectName + "salt"); + } + + public static string GuidForSolution() + { + // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs + return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC"; + } + + static string ComputeGuidHashFor(string input) + { + using (var md5 = MD5.Create()) + { + var hash = md5.ComputeHash(Encoding.Default.GetBytes(input)); + return new Guid(hash).ToString(); + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs.meta new file mode 100644 index 000000000..29e2e5f4a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6cced23b33c3f7541bb84997246eb6ca +timeCreated: 1580717740 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util.meta new file mode 100644 index 000000000..f4d773e69 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 15ba2343e4c758e45a3901e7f4ad146f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs new file mode 100644 index 000000000..c58df02d1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs @@ -0,0 +1,37 @@ +namespace SingularityGroup.HotReload.Editor.Util +{ + internal static class FileSystemUtil + { + + public static string FileNameWithoutExtension(string path) + { + if (string.IsNullOrEmpty(path)) + { + return ""; + } + + var indexOfDot = -1; + var indexOfSlash = 0; + for (var i = path.Length - 1; i >= 0; i--) + { + if (indexOfDot == -1 && path[i] == '.') + { + indexOfDot = i; + } + + if (path[i] == '/' || path[i] == '\\') + { + indexOfSlash = i + 1; + break; + } + } + + if (indexOfDot == -1) + { + indexOfDot = path.Length; + } + + return path.Substring(indexOfSlash, indexOfDot - indexOfSlash); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs.meta new file mode 100644 index 000000000..e645eaf22 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 20b02f00e1547df45ab6ce84acc5dd0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs new file mode 100644 index 000000000..486a32a31 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs @@ -0,0 +1,14 @@ +using System.IO; + +namespace SingularityGroup.HotReload.Editor.Util +{ + internal static class StringUtils + { + public static string NormalizePath(this string path) + { + return path.Replace(Path.DirectorySeparatorChar == '\\' + ? '/' + : '\\', Path.DirectorySeparatorChar); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs.meta new file mode 100644 index 000000000..9672eec45 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5418a9e29385f45488b32d5459ec2c7a +timeCreated: 1623056718 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings.meta b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings.meta new file mode 100644 index 000000000..2fd152d2e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bc190bdaae2340c6a6d8cb811dfefe03 +timeCreated: 1674242068 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs new file mode 100644 index 000000000..6177dcfc2 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs @@ -0,0 +1,270 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using SingularityGroup.HotReload.HarmonyLib; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + using IndicationStatus = EditorIndicationState.IndicationStatus; + + // Before Unity 2021.3, value is 0 or 1. Only value of 1 is a problem. + // From Unity 2021.3 onwards, the key is "kAutoRefreshMode". + // kAutoRefreshMode options are: + // 0: disabled + // 1: enabled + // 2: enabled outside playmode + // + // On newer Unity versions, Visual Studio is also checking the kAutoRefresh setting (but it should only check kAutoRefreshMode). + // This is making hot reload unusable and so this setting needs to also get disabled. + internal static class AutoRefreshSettingChecker { + const string autoRefreshKey = "kAutoRefresh"; + #if UNITY_2021_3_OR_NEWER + const string autoRefreshModeKey = "kAutoRefreshMode"; + #endif + + const int desiredValue = 0; + + public static void Apply() { + if (HotReloadPrefs.AppliedAutoRefresh) { + return; + } + + var defaultPref = EditorPrefs.GetInt(autoRefreshKey); + HotReloadPrefs.DefaultAutoRefresh = defaultPref; + EditorPrefs.SetInt(autoRefreshKey, desiredValue); + + #if UNITY_2021_3_OR_NEWER + var defaultModePref = EditorPrefs.GetInt(autoRefreshModeKey); + HotReloadPrefs.DefaultAutoRefreshMode = defaultModePref; + EditorPrefs.SetInt(autoRefreshModeKey, desiredValue); + #endif + + HotReloadPrefs.AppliedAutoRefresh = true; + } + + public static void Check() { + if (!HotReloadPrefs.AppliedAutoRefresh) { + return; + } + + if (EditorPrefs.GetInt(autoRefreshKey) != desiredValue) { + HotReloadPrefs.DefaultAutoRefresh = -1; + } + + #if UNITY_2021_3_OR_NEWER + if (EditorPrefs.GetInt(autoRefreshModeKey) != desiredValue) { + HotReloadPrefs.DefaultAutoRefreshMode = -1; + } + #endif + } + + public static void Reset() { + if (!HotReloadPrefs.AppliedAutoRefresh) { + return; + } + + if (EditorPrefs.GetInt(autoRefreshKey) == desiredValue + && HotReloadPrefs.DefaultAutoRefresh != -1 + ) { + EditorPrefs.SetInt(autoRefreshKey, HotReloadPrefs.DefaultAutoRefresh); + } + HotReloadPrefs.DefaultAutoRefresh = -1; + + #if UNITY_2021_3_OR_NEWER + if (EditorPrefs.GetInt(autoRefreshModeKey) == desiredValue + && HotReloadPrefs.DefaultAutoRefreshMode != -1 + ) { + EditorPrefs.SetInt(autoRefreshModeKey, HotReloadPrefs.DefaultAutoRefreshMode); + } + HotReloadPrefs.DefaultAutoRefreshMode = -1; + #endif + + HotReloadPrefs.AppliedAutoRefresh = false; + } + } + + internal static class ScriptCompilationSettingChecker { + const string scriptCompilationKey = "ScriptCompilationDuringPlay"; + + const int recompileAndContinuePlaying = 0; + static int? recompileAfterFinishedPlaying = (int?)typeof(EditorWindow).Assembly.GetType("UnityEditor.ScriptChangesDuringPlayOptions")? + .GetField("RecompileAfterFinishedPlaying", BindingFlags.Static | BindingFlags.Public)? + .GetValue(null); + + public static void Apply() { + if (HotReloadPrefs.AppliedScriptCompilation) { + return; + } + + var defaultPref = EditorPrefs.GetInt(scriptCompilationKey); + HotReloadPrefs.DefaultScriptCompilation = defaultPref; + EditorPrefs.SetInt(scriptCompilationKey, GetRecommendedAutoScriptCompilationKey()); + + HotReloadPrefs.AppliedScriptCompilation = true; + } + + public static void Check() { + if (!HotReloadPrefs.AppliedScriptCompilation) { + return; + } + if (EditorPrefs.GetInt(scriptCompilationKey) != GetRecommendedAutoScriptCompilationKey()) { + HotReloadPrefs.DefaultScriptCompilation = -1; + } + } + + public static void Reset() { + if (!HotReloadPrefs.AppliedScriptCompilation) { + return; + } + if (EditorPrefs.GetInt(scriptCompilationKey) == GetRecommendedAutoScriptCompilationKey() + && HotReloadPrefs.DefaultScriptCompilation != -1 + ) { + EditorPrefs.SetInt(scriptCompilationKey, HotReloadPrefs.DefaultScriptCompilation); + } + HotReloadPrefs.DefaultScriptCompilation = -1; + + HotReloadPrefs.AppliedScriptCompilation = false; + } + + static int GetRecommendedAutoScriptCompilationKey() { + // In some projects due to an unknown reason both "RecompileAndContinuePlaying" and "StopPlayingAndRecompile" cause issues + // We were unable to identify the cause and therefore we always try to default to "RecompileAfterFinishedPlaying" + // The exact issue users are experiencing is that domain reload happens shortly after entering play mode causing nullrefs + return recompileAfterFinishedPlaying ?? recompileAndContinuePlaying; + } + } + + internal static class PlaymodeTintSettingChecker { + private static readonly Color unsupportedPlaymodeColor = new Color(1f, 0.8f, 0f, 1f); + private static readonly Color compilePlaymodeErrorColor = new Color(1f, 0.7f, 0.7f, 1f); + + public static void Apply() { + if (HotReloadPrefs.AppliedEditorTint != null || !UnitySettingsHelper.I.playmodeTintSupported) { + return; + } + var defaultPref = HotReloadPrefs.DefaultEditorTint ?? UnitySettingsHelper.I.GetCurrentPlaymodeColor(); + if (defaultPref == null) { + return; + } + HotReloadPrefs.DefaultEditorTint = defaultPref.Value; + var currentPlaymodeTint = GetModifiedPlaymodeTint() ?? defaultPref.Value; + SetPlaymodeTint(currentPlaymodeTint); + } + + public static void Check() { + if (HotReloadPrefs.AppliedEditorTint == null || !UnitySettingsHelper.I.playmodeTintSupported) { + return; + } + // if user modifies the settings manually, prevent the setting to be changed + if (HotReloadPrefs.DefaultEditorTint == null || UnitySettingsHelper.I.GetCurrentPlaymodeColor() != HotReloadPrefs.AppliedEditorTint) { + HotReloadPrefs.DefaultEditorTint = null; + return; + } + var color = GetModifiedPlaymodeTint(); + if (color != null && color != HotReloadPrefs.AppliedEditorTint) { + SetPlaymodeTint(color.Value); + } + } + + + public static void Reset() { + if (HotReloadPrefs.AppliedEditorTint == null || !UnitySettingsHelper.I.playmodeTintSupported) { + return; + } + var color = HotReloadPrefs.DefaultEditorTint; + if (color != null && UnitySettingsHelper.I.GetCurrentPlaymodeColor() == HotReloadPrefs.AppliedEditorTint) { + SetPlaymodeTint(color.Value); + } + + HotReloadPrefs.DefaultEditorTint = null; + HotReloadPrefs.AppliedEditorTint = null; + } + + + private static void SetPlaymodeTint(Color color) { + UnitySettingsHelper.I.SetPlaymodeTint(color); + HotReloadPrefs.AppliedEditorTint = color; + } + + private static Color? GetModifiedPlaymodeTint() { + switch (EditorIndicationState.CurrentIndicationStatus) { + case IndicationStatus.CompileErrors: + return compilePlaymodeErrorColor; + case IndicationStatus.Unsupported: + return unsupportedPlaymodeColor; + default: + return HotReloadPrefs.DefaultEditorTint; + } + } + } + + internal static class CompileMethodDetourer { + static bool detouredMethod; + static List reverters = new List(); + + public static void Apply() { + if (detouredMethod) { + return; + } + detouredMethod = true; + + var originAssetRefresh = typeof(AssetDatabase).GetMethod(nameof(AssetDatabase.Refresh), Type.EmptyTypes); + var targetAssetRefresh = typeof(CompileMethodDetourer).GetMethod(nameof(DetouredAssetRefresh)); + + DetourMethod(originAssetRefresh, targetAssetRefresh); + + var originAssetRefreshWithParams = typeof(AssetDatabase).GetMethod(nameof(AssetDatabase.Refresh), new[] { typeof(ImportAssetOptions) }); + var targetAssetRefreshWithParams = typeof(CompileMethodDetourer).GetMethod(nameof(DetouredAssetRefresh)); + + DetourMethod(originAssetRefreshWithParams, targetAssetRefreshWithParams); + + var originCompilation = typeof(CompilationPipeline).GetMethod(nameof(CompilationPipeline.RequestScriptCompilation), Type.EmptyTypes); + var targetCompilation = typeof(CompileMethodDetourer).GetMethod(nameof(RequestScriptCompilation)); + + DetourMethod(originCompilation, targetCompilation); + } + + static void DetourMethod(MethodBase original, MethodBase replacement) { + DetourResult result; + DetourApi.DetourMethod(original, replacement, out result); + + if (!result.success) { + Debug.LogWarning($"Detouring {original.Name} method failed. {result.exception?.GetType()} {result.exception}"); + } else { + reverters.Add(result.patchRecord); + } + } + + public static void Reset() { + if (!detouredMethod) { + return; + } + + detouredMethod = false; + + // don't revert for now + // foreach (var reverter in reverters) { + // try { + // reverter.Dispose(); + // } catch (Exception exc) { + // Debug.LogWarning($"Reverting method detour failed. {exc.GetType()} {exc}"); + // } + // } + + reverters.Clear(); + + // hack to undo changes to Editor assemblies. + // Doing this when starting hotreload cancels the start + // Exit playmode right away to prevent delayed compiling + EditorApplication.isPlaying = false; + + EditorApplication.ExecuteMenuItem("Assets/Refresh"); + EditorUtility.RequestScriptReload(); //this will undo the modifications to the assemblies + } + + public static void DetouredAssetRefresh(ImportAssetOptions options) { } + public static void RequestScriptCompilation() { } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs.meta new file mode 100644 index 000000000..f23e2dc84 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 63765d77daad497ba3966a622a486391 +timeCreated: 1674243489 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources.meta new file mode 100644 index 000000000..f14fddd68 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 030ba7c6c9994974b321f9c38df270ad +timeCreated: 1673704008 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png new file mode 100644 index 0000000000000000000000000000000000000000..a27133ced07c649372d94826f46be15ed8562f88 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=-3?y@QpIZW?7>k44ofvPP)Tsw@I14-?iy0XB zj({-ZRBb+KpdfRAPl#)9aPX><#jk)|Zci7-kcv6U2?{{7R2UeyrQK%%3Nv`R`njxg HN@xNAa%dWD literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png.meta new file mode 100644 index 000000000..46d0a8221 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: bef6749cf91a43b4e8368429a0487ac9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png new file mode 100644 index 0000000000000000000000000000000000000000..429e1be8bce15d0fba8a5e746d8932ccf801aba2 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!3-pIl6mg|DaPU;cPGZ1Cw1z99L@rd$YKTt zZeb8+WSBKa0x0Md;1l9%4F*6Sgh2+$adpc!pnkEEAivG#E)SH1sax9WX5oX0&mKK{*jhYe=FcCj z0y1f7j*5vusYn+QYj#h`NsK4llq0*|$fUG0F$i2{X01_Y6$cu};OXk;vd$@?2>`#{ BOG*F$ literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png.meta new file mode 100644 index 000000000..e7182ec3a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 052ef782f5237784eab3e4952a88afde +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png new file mode 100644 index 0000000000000000000000000000000000000000..5f144aa01a4b74dd8d2b88f93a6a69866984e1ff GIT binary patch literal 3927 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 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png.meta new file mode 100644 index 000000000..7eff666f4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 0c501457e83420242a3ac14642818be3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png new file mode 100644 index 0000000000000000000000000000000000000000..bfaeb4a8ee1e467eb1c2a10b421fe7e34c97b648 GIT binary patch literal 3879 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 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png.meta new file mode 100644 index 000000000..9bc379bc9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 4a83d4a4d357e18408c025ef0737ab39 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/alert_info.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/alert_info.png new file mode 100644 index 0000000000000000000000000000000000000000..f17c65b1cc99a9417302748fc473472d6c506b97 GIT binary patch literal 862 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 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png.meta new file mode 100644 index 000000000..9d42c94fb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 3e8fc7297345815e0a9416a6b0d4cd68 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..a16c26e1872319cf43d75a5865b9587523ba10a5 GIT binary patch literal 6101 zcmeHKc{r5a`=7CAmx@HjAnTaTHj}Xvc}E&VQq1xUW0@HW_u%w zWNA|&g_4w{l&!qc8})rg`}O<&({=s6|21Ev;4hcYpMgNc_VPWvc_eZqjLl)u86g0Sx19~ZfG7qX0*QKf-)qZ} z=epAKqsyX2H06_qle}67{ZpFsDuU~`-P>C27rbtzB+6;Mo_53Z-6!`J;*;yNlyENk zdTMo)eeuiGaPLcAze=ggdtJzt{5;wII5ZZutTSQ3tNY?7mDyUEh@zL%nFot=75~{) z*vj3#z3-(3F3bMGwguo+{u{OGso#t)343jO_*5SwV!9S zM9$H*_WelRyLprXbF{NJttf|3uRh6$&Rx6u466y(&{2Y|>CEyUC z$QG7p4qxkopKlmi5fvV1FjJ(qJn~(e;!w8bzZ3U2SZ#W=BQEK1LeT-)jYSn=+BE&1 zJy~*HOe;O%menFj7eu3_d1-CuskgcY@I*Fe)_eWxUF5(V)TdFOpw_ltb4th|M=a~~^N&pp$qHvBL7UAjre~BQ4w)7v4D7yodn77x z)q)=9&WVrm7Xt>i6+A%5{2kwS$QC=MAipz9y-+LY#>A=c$u*XtpINJJ|J!XC&VJCP z5`%LTtuD^p65+{b{bxO>QUEiXp!^MTqQ-DidiXK{EBgP-`d-% zAx~FuoTbFKBx@j7jJSm(&h7zs&hWwBys6{)cbUh1BGF@JLlIoAl;6vQ9>q*O&vsW}E2x3qn5^^GUJw@Ge^@JRc#CIk#yO?j`^L(BOBH4*kZ)nhL+kbD*mABptzmgV^r;l ziG#)JwRi9p`R@ycNEJ-Se~1?ix%|CCBlrtpi5{r)u3H)A7J+hu})iDhIpx zT=yNb|K56V`M9oxf9rm~uKjZEYR==Aj%SjNe@M=(S7P$HpYZ#E;-GU@2nij%^=Pex z+w)0I+g_}@Msy61Zx!)V{ImwOySKhtF}$tRI#H}}u(?su%|WQ};?mR+omONylbSb^ zzJ0(&D;{N_*B@jyhKh$_Fc?W ztQ$ADGncVq#FiD3^t@8L;d(@KMI9S|3$sf*u;uABTC~jLnTRIO`C9%eB~7i)O4@6l zz2>SSb>*UNmjaGHLW%c}*3~syl05+0(7qm|HcC z>~-0?qyH18B|>NR2(~>3nZsQBasM%u3)hOou>5to&pU=+8y#rhxnrg(G{E_xecFt+ zh5z-!)3$au=uZ-vSJ)>~2b8S1=faLuCXJ|XniO3@utaBZ6R^X;2( z`&cdp3HDCCy^5AOo_e_ne@A(?l$$xetABJZE_Lh3bpGYJ&waW>$II$=L+kU^TVE#^ z-G@M+@eDgVH)lJ$Z|@`UEtIqKFu|$CTD8q@ONpnC$T+MpwE(|aetFnY{T0o&41=06 zf6glq(Hcma+Q(P%vtD3K<&6IHK{Wj+=hxPM*q(Ft?<}je8lkeXF_m!Oe8Z)+o&ArR0(=%0AfyYN>^;Mk^WeronE`GPyorC|sjN^V zGL1z6jG{u>;06K$v9O9_lc~V~4@Ln37)%0uvY`nMW6%h2FB2k)$hHFl8BTl-;LdmT zpz?#MI2zo_Qqm#{4-$j|JTfdQG=#~;M-kwQym;_l(2Rt`79qS~0^FPE2D4*v0GP3n zu@MU45XFeVz%33 z5eV*fCXXD2U~)AD6kj;(0WOupVDlI(CQQIdrm(_!1UMY*hkc7Lluaalr)P4%ssQSN zj3Tp1()X#0g`+T=)YQUJ-~eyk_2#B;T$U95CJfGnm<#}sNe0`;hd1g zbZAs05CVjPP%h{d{foAsQ%u2-(B=rT35td=#hB2{sb6&Bi0y)!|629#K-ib3FOwjIvDgKJ zEfy}GO#R}7OO60&i;h6MFJ06?GBW@GXZY8W`qs|)FT+JcQR!HKf=1Bj6fDA+ZbC*- zOiWD>Xd0FZ;3($CCK&9m>|7R|7fI#-HUVI!U^ZY0EoKAL{VJy3ulUG7K%f)~gGHcl z2n@~xgTkY6c$66&`88RjU`~I_)&lu|^srb2{Im#wc3;}S#RXieklz=puX+h2{2zY4 zj>G@Z14#YH$#3cVN3K6|{gwj11^!cAf8_ct1%3%3TFs=dS>{}->7pH3?HGE?}$B?skDg9YlB6CczS*b#N2wkP_(!D zvM`+9cGT9AfSIV>d7`^~`7T4E^^^J0!BOPC;#{9o%@&dEQ%~E)8yx}LOYZNwCO#b= z*)dnQDf8B=yTIZ4iSfDmA{EkvT*8@F?SnaPO^$Z;2t#MBS6#jP@nOCV{mBadvREKWFP7`yYcN BpM3xT literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png.meta new file mode 100644 index 000000000..bad308b51 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 8909f5f9b1bbe3a4e99335241d585b33 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/close.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/close.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5f16ccc838f840806f37e2f2018dafbb0907e0 GIT binary patch literal 252 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 M7S9SCn7U}?UuBxaS^xk5 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/events.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/events.png.meta new file mode 100644 index 000000000..27f2597d2 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/events.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: b2c1a1b6177ddd425ba5b4879dd5903a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/events.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png new file mode 100644 index 0000000000000000000000000000000000000000..ad482a11ed024745a288a56af2c9bcb16cdc44a0 GIT binary patch literal 4865 zcmeHKc~BEs8t;Tt5JVT1akFEa;3{g8?$AIIi3bTv!~g=0z@pIU?m#c(AO{JKiUS@v zcwm93$f9hGC`?Tl(egmWYY@w8ol$n2!Gi)kRvqzT)d6*1heNELsx7N_{-aYb?|bk4 z-tT?y_rCWfy)Gtdu9wF+4+w(1lo5(pP{T~|aRuMJ2UUkab%jb$YLv<;kUMAqB+D6M zF&I!-gKRd-3338`Yd{$VYzD)WaV!@{y&l+q?6XUNJ-H9V1~$rKLtdaR2So&IUr^V8 zLa*&zs{z=|xG0E=PnujeXNF|bI0B7#5+%tu6lQWTLQ7>tUfK|xYP0?@2o?>%Ce zw(l$Y9DClZEJiha> z?C~vD*zt?l*Hc~7>$O#*ve4qiqn&EqPj6Z>JT+NUicV50&772%Po8!O&hMA*>^8lq zmK3sPY!;s#e)Z3{;EJCPcwO%P4*#rVVVkLKSg|0Y=bWXnJ>;^>R+oxTg0EKRv?2Qv z(uv(062HGzuxA~wrYf$X=xM^8V~vSZ7bQNg=viG^-cWbZQpSr&9T`~!hs_>6u>|MM z`#S2&)xN(pO@Fm^@d<@sb@D{SIBgf(tL~xOyZqZXlU`RVg#o^9^(mZtgs=M}_J*?d zW#gwuwL3qV>9lC+g_LTi{X4(WND-+C*%`l!<_l``(kZN5T+7_`yx z3FZXVd?}&V3UE@drUW*vfjKZJbf(RK6B(2lR#R!TPR8v#dV&knq>Q^LNQI~jaw?sU zSZbu=mPW-BOEU-w$(=dFBh)4Z1X{|B!!~WE&Lp+TxDH+^u$gWl7j{6*88U7Hh$Fe) zNWqu@6CnI>8=WoU&hUUkjig2ztC-VA0a`L{y4h@y3WZjyRbUMi=#6PYR3ecG5s^?N z;sXTVl%q4_HonfpV<>t#6qJcD(griF*TD=YuGU-3GA2v5eXPDx143sdIGU+Wwf(p;3bY|XQ3X&L@Z?G6M9or!Z zA(csK0n`LmML$@Qxp4zC7zxs7t-&!1i2VW5Ol#hY^?`59h+{j09Rbq^ct1e*@7)0g zD3wa8&=VHMJ*7g%W!9IHdV(gU4im#f;t-Jr>=i>r0xD66I7lK!Lio4@C;6Bt1m%kfNf4jXkQ6FLF;py4JE%xPI!ABR;@~)G zEuKaR4Z1YP03*0`c8pTS6$yG*b@aq!;${t)Amh%bbr#!uXgsZ@;>t$c4gzWZ0(}@b~w8`p)9_ zTmpuN7WpWBhvXWP>!TF-DDY5p4axOU3ValJD7yY{a(TReouYK$Uyv2NEJdleG=di` zS9RoE1=I{Jf)@GL90G6D&@e+pq6vaL|G*R$R95Z>I^E1lRk+(d4`+`Mk6iZYA_!tv zC>68g({KH5eb6)M(!}R-x}O6>{UZ&_llNb-_~)b|J>~2 z?VVR#+#o`iurj(Y1`A#t3Y?<1*#~#)g@9rLZ z6gpC}o;T&vh`Mk6Po8EUJ~6^xo8R&5Og;zIPMXzBEUd^#owc!GGFz`dwLkF5>(}E) zuH;M}b863|pBDVJXvdD$n}6ESYKgp=w6?ln%e>YLp0*XluG;$6jOkIt#wRRf+d|E{`be^&al?jC2o?&KM{ zan{~nW1n)H3R+r>g1Gy+xxBT?!()PP-2U6E zH^)P_9c##IYBCCPmtoSaJElPkvmX4zT$hq!+*jCsAa@+mrTcDD?St(n7B{$PN)t8P dsjA86NAPy*j=%OIwu0b=l;Keddsu4Te*n^O&$0jj literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png.meta new file mode 100644 index 000000000..bd92761ab --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: ae8d6e8a046a7ba47937cf15819407e3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_open.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_open.png new file mode 100644 index 0000000000000000000000000000000000000000..928bbfaa96eb5daa34d2610bd4bc69200b2cdf88 GIT binary patch literal 4861 zcmeHKdsGuw8lQkXL}(FFL0O0aE03LICYgjJ5-AW$q68?R0*b<9GJ%o2$O958t3^?K zph8_A92Tux#7B!&yNZSn~S#phB9tnAZ2cXFq z2Qg?J&>5p-7lte33g%XU?gwOAhwjrDZq9K%kf#sIn}HlYsN(`;l;HyTfUypAE|C4f zxDRw{^}t@oflN0~=SK!48hL0;k}J}fTsDfZc^I%qxI8h6h!Kp5a>abUn9Bp&jGZGM z(MXYbXbnJFNhKtt$rBQoMw3B9X-NpO)sN4dsO=Pi}1Aw_@GlrdOKEnf(mM9mo6MvS$9miTJqk;jQM7 z-g}aJHyQDteu3?eaxZAn?e;4|-(57>^?>I;HZJzg%h7B>XUXN3pxnpz`yR5-92W0* zYJRX+w2m>STKKv5<=1X9>;Lt!&-tfq`25XpIn0jn@3LjjI;`zo(dXT^y442?F7LHF zkb_wTL_<~f#V;!x*M#odtvtS|FY9(|dv;W2_D}WCD&DI*e&`EpZKy17;=E1F__)b4 zH{+pm_ou9_@V|R%cK_-{C#39(oSBH}k2_s_4t?+Od`0Ki3x3`!=S28>wB!c$5dNM& zxK!14Ee)BS(lzdWtZQcJ+1$OZhj+Yxb-{ve&u=^3*-Z;;4|(L=gA!6#Y0oruH%4^- z^!KNMWy&c5t#0Loiw)<>>gGVyok+WDP>>7Zc4l$!{d@I~ZvG;<{6nut9%MdNEQqH7jDU`6X zKprI+Oe7OyV{8OYv{A)e)*LTpj7hB#r%T@$gaA(xR)NK06mvKwB_-?<9@}8b=b$2y zh=XuBTrLbWV6$Cs!ELbK97;nBU`RVT>l?25jyC4J+DEochzDV@=21;~Cu(?V%R$a=vydc}F1(T)J~VcZwA zhtBR)23iV*SZW}ww0m-?ghlT!RvQRPEq01LLL?9hc?8T?qbeBV@iefAk4D3UiWFc3 ziQ*y@8wDlTn=QDWAZaK7&ZYnkiV8&phO1#5{@xKG0=3~EYa|6khlfiu4$V`)kqUf7qrx-<4s!`L z24f^I8Ww7BAuJSfLF9xy6xR&IZy4Qd&{#@v6B(Becm!O5^mP70F~gmKig?kNk^+*B z0w4@V5g5US2;&bD#u+>?hprhzCywF#ijx?p!l)tx>;~pQ@dCAwGh7S@IRpOwo^3D| zzvmWA=GZ1L#qSthV|2X~123gKmR)0Xy%Ym4r975h|2Mk4MqZ~#J@^+?0$!H-zN`oD zV350NUXm303d)2s!}c8oZ`9Cuqb%DDK@%p?odMO>1%OEpi(HZD(c?AFD?0FL>xvWz za;cR|<1z|v-raV3?t|C;E0k;4Qh&F}Z5595vwUm*_Nsq}a^=dHb^4q&#IBvf8GG(t zTdSNM1*f3T9gimJ(|$==IKJE}2>E)`+&ee+`YDv@pgsA-FPmcwI#m?3s4@54Iq5U@ z0(tz>WvMk`@*3fzvd+h4&z>*ilh>Q~1YWrq7c`Ca=+Tueg^|TwB_(Zlb&l^M`X0X3 z!pQmX!?u6pjtTO86{mI zA#HyRb##UHedFG+$=co$dfQ&#W0y&8*mPCREoYQJ9&YzMwzQO`*ZNMKQkkD0?>R#n z)T4o>*3F6Oe)Z6a)TQ?7>Gm7F{o91I&sOc3Z(n|AYxTqO@U^?bFJYH4#pR`McPSbh zS6}N))f%=cy*fVF9_Y9ha4=(6)z!`iVdV1NfvfNU_w-lzB7R~{Zcjsvgc}yndNj#9 z!EvwYgJj;cPZ96W5bx^ovNy3LtoJ&Tk6Y7**

6u%Rw1lj%E!zQ4`sm&nhg)jmUy!qBFaovO? zM}C}Uz7$)DMP5ImyFR6Su50I{Cr|npk`3t@-R52f=cq%;3*<=I5fqS?>(X9%iA3HRK}+PQem z{NAl;FD2iu``XC;{BT=&6Mt&$6vI}Zt|Fatr%mTXJbl^McRWDg=STUFB|#oda=()G zVhY~e)}8ey^n>lGrdiIduBnYPW+ixtZCT41#(c=zzW&j($v-M*KUi=e@bGD->%8o2 ueRsreW%9ob;e9Js{k3!NuFk*jE13TqtGqo@a%v^e*$kepelF{r5}E*Ymy#O* literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/green.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/green.png.meta new file mode 100644 index 000000000..c9abe1df0 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/green.png.meta @@ -0,0 +1,131 @@ +fileFormatVersion: 2 +guid: 45ccf4d7106fc972cb676d15f014f50c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 109.07 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/green.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png new file mode 100644 index 0000000000000000000000000000000000000000..786e5306d16c8f65b2ec254c97ddf3b424ede71d GIT binary patch literal 493 zcmVkdg0005BNklP5cA=4`B9R;6Gr(Lm$jfN z+5lt!FsMlb$*d?Puw4P+^w#BeFVzt!L+oo4LomgyL^oy>`;Eo@zQtkmBvMM(_cQ=D zk46k3h#H$O!&9GPKKuv>rz54KyA7K;D#MUCjXgaV=&jXre!}|x)j=aXW=l2ii}m#5 zF-#mXh@bC9_B4i;myNtzYjo%B=4*^+DHMMyHhE5 zV}^?k2n^DVDP^ZB08ETxGcys;lH(JhnK6p9zxd4$te#JKE`)UQ?$p$n^~wF=>&46U jzgpV=o9b_EeH8#7{Ug0^-H&2$00000NkvXXu0mjfQ3~CZ literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png.meta new file mode 100644 index 000000000..c9146766d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png.meta @@ -0,0 +1,131 @@ +fileFormatVersion: 2 +guid: c381173cda2dd9304b52e11e1a7537bd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_check_circle.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_check_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..7f99562cff1cd7535a5055b2855b8e30a4cc8540 GIT binary patch literal 916 zcmV;F18e+=P)Px&PDw;TRA@u(nN3m}Q4q)fE$(AZ5VLd0B6L6Bh|Jb`!u zaS?DAxB<&7giiHLVVKX?^LR5Asxmu@_woOA_v_cwL)h|%wp>5{14KOdvweu#%P|;x zAld`tF!-M^0`nY%ITpJQ_|P4>^8Dr=cy676xdBE4gguoohQJI!G{8acPBkZEkUhZo zyaA$b0QNT#0ALDG2VU>iW}V^ylk*dRz5+P0*)V6$5a26#{b7-HivdiUZ2;ekY*2VC z@g)xWH`;l6fJsw?3qTc57oLBi*+>WQ+Fh(15|7IxL%_t@&T%d zd6S75Ur_h2vxa2@gxTiaw0<@J^J!Lg$^mGKc-N`YmUjrxKTVsQ4iH{aKWuj^Y2F1q zzZ+jW9bnS@<=}>O%`t`Nzc&L^Zhg7}_!7VyBQf(Q)cb?=aY+x1Th}1|Y+TIEfG{ki zirraA31NWXTX_A*Wts%2E_|Xft$~m#w(h^p_CUDEqZ{Mqu97^EvNtX6jV1ZAcC`LJ z5%oYd7ni+wu}SP=ivhGc086P{*0Y)TKowoV>vdKFHvxD8qYHw()My?D;>81WgL+T0 zR)`bXdE6X;aHdf6gx|Fj9Chc=g`FGmp|A&d{%eI`1MpY;iZma>rFa9tL~#Zrm2vGf z(OF1`a4p^tLK=WD6KEjZi#HzPB4tEA1QLapHqV<5U~U>MdXZ&8#6`FgFYD%BWHMmV zoC0`fGQ{iuCJ2|}ff+nM(uZTxa@r=0R`Ilg2(Cy) zVWy7LU|=GAk~i_|#boJ)U`3Knv^04)?U_dLQmmg15PCsgFpi5EskG6N@?m|K?5;%7 zlv;&YaDNYUl&j4;0 z6>b+oX-a~cXW0g^95`(iI|I`ISPtW@!lK5|A7ahQ0nE!jXeay}wfZb2Px%LP$kL5+w>psl}gwmX@sw{#29hd?3P2`#a*mmf3m7NleNnH>o0FHqHUBM;NodAP6GIRl?X?$R} z=p0G{p#va|w6RX7Bmg6(hbqZq7XPJa9H{u>07$8n#^bu$m|~FXB#rSkiZKqrmPs`* zwaSoQS(#J-q{H4BDk(R4TU5tZ0ayoS%WaXN{0(3(%%cJzbBYXOdHTer799XGRi5R^ z@*-RM!c%Ni1m=O&oB~(?){1S50+2=5)%Dk(?i>Z+3h308m@?fp(3KQ{w;VJtm0zT( z)g=M=0xDDXtggE6ux(K(-mO@)P?O{$7ct1{i zf1!~mWVww9rPoeQN0@a0cCe7%%&=@cB^vvp@;FKo9_6(G! i)gkvk0Ef=B67>VwUt%#q^N9ig0000?P)Px%p-DtRRA@u(nLCdYF%ZZ9UMU@~4#cB_J3$LA@C`PzMH))(D1Z(mXn2T60}>^d zf=5Y{B9r|FKzp_72B0AUy&41(Y;fXhVM#F*Dy>9A*WGqG)W4 zNe*Le`o_$BEEga>RlaGH=QCf7G3ORfvD+d*M7IDuXd?iC+syoM-ZvXSlSc;WJZ-Da zHh}j4PD(X5B>#b#Pvu46R||?))_hEu`9L1P9{@o^Gb%M>nE5~7Y)i;{0PmNO_nX-J zH0pOD^ZqE2!#97GeDsh;-w97Jso97?Hc%le?UsEQ&mQ_$=64o#=iI~6{5^tIOavQlN~ zO`N5`+ebbd(A+cY82~E)4g=Vm?z1fb-vK0rakDkgtR*u|CBqBtfl4e_q+}PMqKPc5 Z<}W1b1V9r#p4$Kb002ovPDHLkV1j>FMLYli literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png.meta new file mode 100644 index 000000000..4628b654c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png.meta @@ -0,0 +1,154 @@ +fileFormatVersion: 2 +guid: 809ef8ee76ad04e198cc8ba61c994f83 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png new file mode 100644 index 0000000000000000000000000000000000000000..317ba373be7912a0a93e86985d5b6b13d933d551 GIT binary patch literal 822 zcmV-61Ihe}P)z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA0?SE6K~z{r?Uy}k zB0(6(-Blx^U?C)U+}46ct`7=U=|fyeDK-{CB*g{t2^6o8AQk};%Md-%Um=EQ`s6F@ zk-{bjlHf~r@AZLIs@SO>+9>4q9{C- zD;UFu9CLGXbBMV}9R6m*wjk{A9LlLF!=XeXaXlZ^V|og}U@*A$`~6xZ$eRiq zdKWUf0_FIjopNAl0DuwjoJ5Hx-JAEW1iqED&@BNS8?~lOM6K7c1Yc|% z%Ve}5o6RDzRJ>mAUcFxb%erkTl}g{~>b|2qaB_NjYMa1pPeCr1JD`b>)dYIc+_CO= zfpV$@+I+2YxorEMurvV5$K!FEL_`Vc_(UC80eDUo?iY@t*S0glbO{i4cuu04&wV~$ z>f+);m(|YC&-W=ZzaUfA{aGj!bjKA+p`6CxB+{~Iwj72CWHK3%lxv=wDF@Hb&mnp} z?V>qlv= zR(m9+X%b~B=|-brxq}zCCU`3^gRs+5rK!mDT{@r7+doR7G!O^~&1Tc^fON{)*;$MJ zX9z3p0f0y_(UL{J0B>b0mOWo!YQQ?#umLXDKPmJ=|34R&L;wH)07*qoM6N<$f*gKq AKL7v# literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png.meta new file mode 100644 index 000000000..7755bf2a2 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png.meta @@ -0,0 +1,131 @@ +fileFormatVersion: 2 +guid: 725116e63c640c8408ca1c393191bc99 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 109.07 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4d478e633e3ec3907696c2f47865e9eab73a53 GIT binary patch literal 941 zcmV;e15*5nP)Px&XGugsRA@u(S=~|FKoI^`%n;dfCZ>YG6Cy8x3V;f5I)DlS6#x~)R1l~jrUFa_ z_$ij3fC}PF5Ehok!NV0xTx|0Xbpx3+I+i$=ijMNrr&-2snT5cjke=Y)8q}ZzC?Z?T+0+VaHhVUtk0p`Bdds$0lK=kwEkM2~xUm5@aY^?0me!8>l7GgkW z;VR`001)XpSlB`UT-!VYaQd1V0B~+Op0IQLEgb+Rx~O#r$MFERDlIS{yk-UnxUD+g z>@gK)VCexY!5v5sA&me4h`!|^5RRe%sSW^yx|B=&f6}1T#Ob&{X*yEVsLn!G7Le3J zCJuFNQ_%jgECUqvK3a|!3d7QxIg##0z_{S70B0(1fdJ_2W=_*n^7qg**QaBVU)%Ni zs^iHAHO#)T?_u{cI!d!Zok*OXEVja38~o$rI9mp5q|k;%YxgRVDnK>%}UGpZ+Z zHagBq8oN|!AVk+zchJb%F9l#6PMW3_Sq4qkGd(XILZOSjfFB%LF<&TzqS?vtM@>zw z!A$kE^(gfhQxM3c*omHBwefrOfy2Cp7Yd=c_!U5is6pa4t2~%TCTbC=9UT=)-jN`4 zc}0@6o1iQJo)xgDKV1rL&OgL1oFm0VvC}vU>jk5goEXI2rXB P00000NkvXXu0mjfQz@q> literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png.meta new file mode 100644 index 000000000..26ad77ad1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 0f8d84c5136cc4c119f14ee9797fb05f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/infos.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/infos.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8ed9b223762c380d713baa6e2fe63e9c14fb0c GIT binary patch literal 5947 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 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png.meta new file mode 100644 index 000000000..b2e184196 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 0779c2964d0997956acf3c29e4e38a5c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png new file mode 100644 index 0000000000000000000000000000000000000000..44c2c9bf7ccc4a185cdbfaed8cadb5cad95f11d8 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyegQrqu0Z;Ur~M;Or^jygK=i@g z=dqi^V|Rzw0iMr1T^_sJe+c$@?B)E#10?d;)$Wn2{kO=#Kk?!JlOn%G2K`Tt{+|@} zJ1+EZLd2i=uu_ZL#y}GVN`m}?8AP)Wz7SaW@4NTk-+6z29IE_1OAjcw%G1R$#NzbX zNjHU>6?j}lZ?Z(HFn#-9za{wAMy`@e+rRC5wn4@6@P~NGlP-Ig3rp@!J=Pk->~Ler zgEecqpjbspLC oFWp+V#kKnTg?qIZ{*~`!et1$j`zopr0N&}C&j0`b literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png.meta new file mode 100644 index 000000000..8c4979543 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png.meta @@ -0,0 +1,131 @@ +fileFormatVersion: 2 +guid: b0408809d04ad6d719d1e4d66c181cc2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/red.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/red_dot.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/red_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..5c43f676b505b913e2eae037ddbe72af53e3b654 GIT binary patch literal 4838 zcmeHLdvH|M8NVAI30uYYBFL26eu$ z&$kfCfe%pAHW{&*I%8d8GabZTsv>|O- zNG|LTz(&FG9k6eQO?@Km>nt3bpB(Fl%R(%Tp?;~)UyV{ul5o0cXircskq|_ZK}k*| zDUo5If7|ayA~KO|tqZQf@1Ln2PqokELE{N6tVRHWqz<&~e5m5BlDq$O?wMsR0dZgH zALn_RPFBubcYI}G+2hp@ocgT(2Q8($x6JSAdN_{pH|mayukwHYY+zwdYhHeEc0u{< zqQOnR!{ytuyKmn3;_R<@qIMjZpwpT47a-;6H$ zC*A$-tjL*Py!hbP`ljvkUal`HDM70Wx2Q9;{0otHr+(BD`cYBk!a-s1sBiZCjY`Lr z!Mi@%)q8jE$9<9Tp?w9jmaTp;`C<*rTvjhX*Z%3A3!fA}GFKztX>U5#vf}!i@zOP` z!eSqJ^o1uEJeiLk*=}!tVfvAk1zlxZuJ2y-?}z*GU6uC-r`UyA)ooMH|FiAp8&_k$ zzZ`h4(q8b>OS8NGH7C35bjkA{@*i|>e_OP*Ug+F=X|R8P=aqs_f4O~@JIisgv#V+8 z?yolY-c$ea`5nv8?`@@D3r$ZgKBDzZdh3&gC> zOYir;fAL(yyEktlhl7dNetUSqRs_jgqz3AYI{$J})}l^H(L%tPipI?aLy8xt;*z`; z7-$GIs4=(W>gjV1R8`!LAmbfuR?S`s=ykV^@D2~O8?8PY&0z`o!p{Zyj zri&@J!@?Ee*c9Uq)KW3lx*c_}jyzfdptO^A5?FakT~9d{+0o*J5*BN`OEM7f$?a$~ zjJSy7$z;-*bUC#|15OHpfD;r>Q5e*~^yZi$rLdTOp9zu1@B&>ZRCUITQkDItUM z^&n>4HyT2bhwbA{iHMbsBI6(eqEJR-P(GpP! zE~grm8UP-THCR4O!o|{RpW8t>i4jS4L^8tA!0lMB#+p(i69F{}Y7NO`lVk#iwNCAK%q_OC_7B-Sn0+cpD9wAq-JgplFEwmP@XsmX!5tyq03Bw2h{su@w zWN48gGlb!{K1Epyvoa+EjOPG>!K^rp4>K&rGXfoAsgS|~dTh}DPl_ZJpa_w6i45`G zrO2}3up}!XOkfBKZfF;Y@v_2UG7mTf5E4O!_-`>qW~l7hu_+eg=E*-)x5fB>Rd!lo z)KvjjKP`h-5WLaw;VUgu7Utz~3qP41bqhT}=m{s|;&+0s3A)C`z_^qrs%wI-aWOD1 z<%#P0*66a2ycB~N{985&UwPH{noh#k<*A{{rC#JONDv9mZ+`{;Uj&&JuUMrc$oFQL z&4%nhFb4{=4WGX}`>)gT@^0hr$@Sb0MQ428(g5H4`OZ>%8BmYH zpcF77m|-dZa~bp)zA&6&SiE{314G#Czu9YlK@}tle%Zok#W028*#Ga0<_skaXBhtf zw_MH0z`z1g@MR057?bphXABGs3=A7WcQNdPnacz*oWY982`bGHTFAH$VKEB>0|UeV zT*i4T9>au~SN*^J-;}|W(H5>M^nYkFE?+Pa@+L&VB}OZBi75Vh7Ptb&$^VlgWRazV zS^m7bmVy*ep+_0TnCxNx2xehA#>lry1MUk31|FX;TmC%_o5FDH{}%>x#MoMaMDWU)X002ovPDHLkV1oH{cAo$M literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png.meta new file mode 100644 index 000000000..0b2f1542b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 75c3ce1c05b6563dfbd2ac68fbb63c79 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png new file mode 100644 index 0000000000000000000000000000000000000000..9754cfbbe431bbe4c6dce336797ccffe7feda5d7 GIT binary patch literal 763 zcmVA#+anu}5EkTqaEb}-2?9ui_95oQYqH2AmKo6=cnxu!W;SDFI~IoYC_n^&jFKswk|hDD z-3UMqiGL1|28MC6q_UC?egLT)Cc6SR^i4$EpY%ua{!lms>ih7CBpZi2C3u`zWPou z34CXfv($Oz06n-?X=Ry05d|bNMkg6$af8D&c=G|!fn7P*nuQol%qh1t62ocgNbsAw zv8fMh4wD~bq>7r=PY=pLh}=X)ki3m^%gL9S1;4yDNbaCtl!*mBxsC{AJk>$+4$iAS z%6UMO6zhmU9HTxUbzRud!p>Ea$s||2*JG;yWVDFnCp+2UO>aAP^--i#LoNUrScOY} zUJ)Q9CuyS<3)vWWMx}Cso)$9{c%w?AKz!5v%K~I9Hf%)kgcodMoC;svb)T4IKV|@u z*(*lHS3MU75ZgIJ8dg$ir2bD1Tq-ZgW*-kBOi$52xaPv3hH{b$V0B< zd!HhGFNHDS0%i`fNDnXR;B9zylv~~<2^%qt)55DT07;~9lSVbMQhTduc?}PTxKFe4 tgw299lgF?cTkS6(4OrNUOO5m2tltmQ-w6mViemr(002ovPDHLkV1m%nPJ#dc literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png.meta new file mode 100644 index 000000000..177bd7814 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 77c9c0af0f612d0a0a94cf95e2235730 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/warning.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ad63e45b6910832c6af732bfaf1a24a2df5491 GIT binary patch literal 5523 zcmeHKdpMM78-K^KtRg9G!Zd2rVa(y3!OR+GHA92s)Y&^T?=Uelnu8e?Nlly5X=%U6 zek5#EwB;*SO0`Nbk!Dui^3B@ALeg-*ex;=YH<- zCi?lTm}W570D_=tET)G)=&|Z%tOx#DzsS7=y8CDdi_c;$fu?{5fW+uP7&Qho%p_Y2 zqYY_;u|1%f09%bwx49TyO`im8^Km-`*f!%BEnt%{TF^Amr-McYwkhcIK@)s8w$~M4 zt3OjTKTKe$nLqR^SZqHm*_K4Kg(+Y?kqpy`G&-4tB@^i|__YUUOy)*hR~Rix2(o#0_ym28@vJRp0&Uz>{!5Eq zgi1QiC<3Pc`gyvK5_Vbb57ajc+hDO?*R@ys*M}9XT2HS(H~ELpXuY<@xw&cE<1+2t zTT}D+D@^^U)yxVm=bO?c(Pdfs?sHtG%rt@Dmhi}!nm)Oa)utYtWA*UkjFY~%Qw@6) ze_fSpKD$q^?@n%xw0Y6=^I6%(88Z)=%UqwWD5$o*y2aLES?`_9BR+R$>L*sXnO6(% z?Aznz$etGzaG+n6RBh0Kzqh%hDs7;RVAxi46fLNq=Q?kHh?@zH7qH6h>)E)X&DqD8 zwQ+ZDIKO+`ORAIudFa5jpY?`@8p5_Y76X}Z0|j7%(yf+C!@<5wf5-FYwI!< zce~G)9IDsHvNtRg#qV+tJ>$~QW!dve)YJV0zB?KR-5ioscHL}i1xctB1cb;!*emH= zvCtObi8-jPQW&K^G04$b8HI2oP#Knkh6zLrTu9? zeFC^!Be*mk&e_SpQAq~`LR5xemBL7ol&)mpG`w_RtA`0VtOg>BVBkVPBDsqtD3)SN zu_fX?m4aw8&dC7lDB0*OYW5r||0nT!Vr zyfj86LzH-t)LKn3#^HfVxe`H?Odu9v)tm@NESE8GI53a>;GZyx&7PnaNyk+HdJvRI z6oF(*BnX9s$t$EX&uBn0?$BSZkOss=p#*FdP_;xUnPsEd96vk6Hd@kOB50mjcnBss^5tPWM*iEAF zl?XsqB9W85Qd98&6^v3*E{$S`C&CC7Pk|{2-hqp7@b-WM=Fw;{jEs51P;B;3%76V7NC4L<7i$r96uz-PEDGg>iDT}o>DXePfFJX}(CW*Bbp&{D>r~U z8oN=e(Jf<7V~>#n%~ir;HJ5^paK}QBBGD*M<0s%6o8pEeqA(OxkMVTbke-^aD6Ea< zpca4Xiy|CVp8^mJPo&|=qz{78#swpc2TV}cj1Lhz68=jQM-5<7kpb(*#z64`wU97T z497JC{{Eex@w50lx4>e*Z1P$9ev#{oT%V=DXMw+D*B7}yOM%YTZ6buC~$iD<$siCP+%r#O7`f8@SVW711Ibcv<#$tQw zcTAmSV!7zX>5`Waq)T9VxCVqbKU~x3Gjo;c2H0Yq*Q{mP3$s!@4(rwKHNaa0Bpsg8 zZ1VQ*3hv4gT%yx^-64Ia&02|OhNP_JyXxk+UON^#BR9$DbYtgA{hPDbcE&U?e)O+~nkeSD2mg`2~gRPDez<#&%Ntih~+X1o%Gf+u~C15Fw

vaxVbv*9S zHq}**q`huv;E{jSJKvC|AOAy8;99E5(-&vg>9jm&-&1sFZGW@Zsg=8+XJ< zyJUUNy`KVajmqV@Q=zi5c!5?Y<p7*6OK{k1;t6s-Ak>lb+S&nzssXR4hgPH>gwHTcF*7Hq-J%cBjr%$(6*6zM{8pNrp zbK34yH5w=3gvJ*bPk+QTPO7k}`Dc!!@;>ocquK1)W|)@l#u6G-$qx?3WL`*)6o|zF z40LrsW5%wtPJZkF8=}@%d)4`P}vS zBGpAhoqd?1_^GM{*8v>s#lGt=C9l$d+!+`aAJX<4E-k>a(qNk%16|Gf(Ud^>6fU9yr)y{&4hqJh>3=-=?}@m>XR9 zdumI!$>x|JoMY;$JM1r}GN#eHAjBiD)GHcm%;lyuH@Loi(Xse=TKM38v+j}0_SfCe z+gi0Y>l#Cns5=(886Q91x!hz~H8&yqN!O$H^p%g&f+Vnq4%&LnwQ46uoH1aKkkpbF z;OmQ67*BuQ>u-E}Yhu}kjTu**s!q&Li%0Fw6}8=l?5O!(4|7ILpL~D0@Mx3g=upMl zCwVP(bu}3fc0=oLoP^?Bor;Tg!#OX%F+8V0o^{pz=9RH&C}a)NIQ*=lQ~~w&w+|1f zp4@6RJoSsu9ty>DU`CD+5=my2!(ZRKx`V)hVm<%#UACh;t*Jl9Z0_a)wOhLt9p>K zn_sbUkaceV@~QEZuO)8-BB08Ujk$lmKQedw;P=eOCE91s*t}95w#gSP@E+_Ghn;g7 hT~9R}?TRcZw>t2={Zbm)L;$KO#PamvrxxO&7x1tTUB z!g>3eE&u=ks!2paR5;7clGzf2APhwnSrkNeu>JoJ?UXuHflm6?-q#$KBxe}@D*Xq37<0ZSi+(CGXRT4k{gNjfC zLC{lw%*Q64y}LzQXn`=J0w@zZF{%LA_5h0upj{7e8USt@c;b$sPfp*r2@VPzHM}fv u-LNpQa#`B#CGFOgHfyh*+N%%R|1J;ViX&?$IjO?{0000 instance; + public static TimeSpan HeartBeatTimeout => heartBeatTimeout; + + ServerHealthCheck() { } + + ///

+ /// Whether or not the server is running and responsive + /// + public bool IsServerHealthy { get; private set; } + + void IServerHealthCheckInternal.CheckHealth() { + var fi = new FileInfo(Path.Combine(CliUtils.GetCliTempDir(), "health")); + IsServerHealthy = fi.Exists && DateTime.UtcNow - fi.LastWriteTimeUtc < heartBeatTimeout; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs.meta new file mode 100644 index 000000000..0a8c2fcce --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 45b5951115b94f6ab79756f71777a915 +timeCreated: 1673812440 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef new file mode 100644 index 000000000..fa46fc617 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef @@ -0,0 +1,28 @@ +{ + "name": "SingularityGroup.HotReload.Editor", + "rootNamespace": "SingularityGroup.HotReload", + "references": [ + "SingularityGroup.HotReload.Runtime.Public", + "SingularityGroup.HotReload.Runtime", + "UnityEditor.UI", + "UnityEngine.UI", + "UnityEngine.TestRunner", + "UnityEditor.TestRunner" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "SingularityGroup.HotReload.RuntimeDependencies.dll", + "SingularityGroup.HotReload.RuntimeDependencies2019.dll", + "SingularityGroup.HotReload.RuntimeDependencies2020.dll", + "SingularityGroup.HotReload.RuntimeDependencies2022.dll", + "SingularityGroup.HotReload.EditorDependencies.dll" + ], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef.meta b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef.meta new file mode 100644 index 000000000..4e4a29220 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 43aab4a50a5839e44af6c24ac5006688 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll new file mode 100644 index 0000000000000000000000000000000000000000..1ab9b41e1408508d0ec774e7a681f67e96e21829 GIT binary patch literal 60928 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 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll.meta b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll.meta new file mode 100644 index 000000000..7aabdab2a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll.meta @@ -0,0 +1,93 @@ +fileFormatVersion: 2 +guid: 2286e58e1d144b84c925391e896974b2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 1 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: x86_64 + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Versioning.meta b/Packages/com.singularitygroup.hotreload/Editor/Versioning.meta new file mode 100644 index 000000000..0477de076 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Versioning.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5726f82867506c8408235866081bec1d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs b/Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs new file mode 100644 index 000000000..cc1281181 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs @@ -0,0 +1,288 @@ +using System; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Editor.Semver; +using SingularityGroup.HotReload.Newtonsoft.Json; +using SingularityGroup.HotReload.Newtonsoft.Json.Linq; +using UnityEditor; +using UnityEngine; +using UnityEngine.Networking; + +namespace SingularityGroup.HotReload.Editor { + internal class PackageUpdateChecker { + const string persistedFile = PackageConst.LibraryCachePath + "/updateChecker.json"; + readonly JsonSerializer jsonSerializer = JsonSerializer.CreateDefault(); + SemVersion newVersionDetected; + bool started; + + private static TimeSpan RetryInterval => TimeSpan.FromSeconds(30); + private static TimeSpan CheckInterval => TimeSpan.FromHours(1); + + private static readonly HttpClient client = HttpClientUtils.CreateHttpClient(); + + private static string _lastRemotePackageVersion; + + public static string lastRemotePackageVersion => _lastRemotePackageVersion; + + public async void StartCheckingForNewVersion() { + if(started) { + return; + } + started = true; + + for (;;) { + try { + await PerformVersionCheck(); + if(newVersionDetected != null) { + break; + } + } catch(Exception ex) { + Log.Warning("encountered exception when checking for new Hot Reload package version:\n{0}", ex); + } + await Task.Delay(RetryInterval); + } + } + + public bool TryGetNewVersion(out SemVersion version) { + var currentVersion = SemVersion.Parse(PackageConst.Version, strict: true); + return !ReferenceEquals(version = newVersionDetected, null) && newVersionDetected > currentVersion; + } + + async Task PerformVersionCheck() { + var state = await LoadPersistedState(); + var currentVersion = SemVersion.Parse(PackageConst.Version, strict: true); + if(state != null) { + _lastRemotePackageVersion = state.lastRemotePackageVersion; + var newVersion = SemVersion.Parse(state.lastRemotePackageVersion); + if(newVersion > currentVersion) { + newVersionDetected = newVersion; + return; + } + if(DateTime.UtcNow - state.lastVersionCheck < CheckInterval) { + return; + } + } + + var response = await GetLatestPackageVersion(); + if(response.err != null) { + if(response.statusCode == 0 || response.statusCode == 404) { + // probably no internet, fail silently and retry + } else { + Log.Warning("version check failed: {0}", response.err); + } + } else { + var newVersion = response.data; + if (response.data > currentVersion) { + newVersionDetected = newVersion; + } + await Task.Run(() => PersistState(response.data)); + } + } + + void PersistState(SemVersion newVersion) { + // ReSharper disable once AssignNullToNotNullAttribute + var fi = new FileInfo(persistedFile); + fi.Directory.Create(); + using (var streamWriter = new StreamWriter(fi.OpenWrite())) + using (var writer = new JsonTextWriter(streamWriter)) { + jsonSerializer.Serialize(writer, new State { + lastVersionCheck = DateTime.UtcNow, + lastRemotePackageVersion = newVersion.ToString() + }); + } + } + + Task LoadPersistedState() { + return Task.Run(() => { + var fi = new FileInfo(persistedFile); + if(!fi.Exists) { + return null; + } + + using(var streamReader = fi.OpenText()) + using(var reader = new JsonTextReader(streamReader)) { + return jsonSerializer.Deserialize(reader); + } + }); + } + + + + static async Task> GetLatestPackageVersion() { + string versionUrl; + + if (PackageConst.IsAssetStoreBuild) { + // version updates are synced with asset store + versionUrl = "https://d2tc55zjhw51ly.cloudfront.net/releases/latest/asset-store-version.json"; + } else { + versionUrl = "https://gitlab.hotreload.net/root/hot-reload-releases/-/raw/production/package.json"; + } + try { + using(var resp = await client.GetAsync(versionUrl).ConfigureAwait(false)) { + if(resp.StatusCode != HttpStatusCode.OK) { + return Response.FromError($"Request failed with statusCode: {resp.StatusCode} {resp.ReasonPhrase}"); + } + + var json = await resp.Content.ReadAsStringAsync().ConfigureAwait(false); + var o = await JObject.LoadAsync(new JsonTextReader(new StringReader(json))).ConfigureAwait(false); + SemVersion newVersion; + JToken value; + if (!o.TryGetValue("version", out value)) { + return Response.FromError("Invalid package.json"); + } else if(!SemVersion.TryParse(value.Value(), out newVersion, strict: true)) { + return Response.FromError($"Invalid version in package.json: '{value.Value()}'"); + } else { + return Response.FromResult(newVersion); + } + } + } catch(Exception ex) { + return Response.FromError($"{ex.GetType().Name} {ex.Message}"); + } + } + + public async Task UpdatePackageAsync(SemVersion newVersion) { + //Package can be updated by updating the git url via the package manager + if(EditorUtility.DisplayDialog($"Update To v{newVersion}", $"By pressing 'Update' the Hot Reload package will be updated to v{newVersion}", "Update", "Cancel")) { + var resp = await GetLatestPackageVersion(); + if(resp.err == null && resp.data > newVersion) { + newVersion = resp.data; + } + + if(await IsUsingGitRepo()) { + var err = UpdateGitUrlInManifest(newVersion); + if(err != null) { + Log.Warning("Encountered issue when updating Hot Reload: {0}", err); + } else { + //Delete state to force another version check after the package is installed + File.Delete(persistedFile); + #if UNITY_2020_3_OR_NEWER + UnityEditor.PackageManager.Client.Resolve(); + #else + CompileMethodDetourer.Reset(); + AssetDatabase.Refresh(); + #endif + } + } else { + var err = await UpdateUtility.Update(newVersion.ToString(), null, CancellationToken.None); + if(err != null) { + Log.Warning("Failed to update package: {0}", err); + } else { + CompileMethodDetourer.Reset(); + AssetDatabase.Refresh(); + } + } + + //open changelog + HotReloadPrefs.ShowChangeLog = true; + HotReloadWindow.Current.SelectTab(typeof(HotReloadAboutTab)); + } + } + + string UpdateGitUrlInManifest(SemVersion newVersion) { + const string repoUrl = "git+https://gitlab.hotreload.net/root/hot-reload-releases.git"; + const string manifestJsonPath = "Packages/manifest.json"; + var repoUrlToNewVersion = $"{repoUrl}#{newVersion}"; + if(!File.Exists(manifestJsonPath)) { + return "Unable to find manifest.json"; + } + + var root = JObject.Load(new JsonTextReader(new StringReader(File.ReadAllText(manifestJsonPath)))); + JObject deps; + var err = TryGetManfestDeps(root, out deps); + if(err != null) { + return err; + } + deps[PackageConst.PackageName] = repoUrlToNewVersion; + root["dependencies"] = deps; + File.WriteAllText(manifestJsonPath, root.ToString(Formatting.Indented)); + return null; + } + + static string TryGetManfestDeps(JObject root, out JObject deps) { + JToken value; + if(!root.TryGetValue("dependencies", out value)) { + deps = null; + return "no dependencies object found in manifest.json"; + } + deps = value.Value(); + if(deps == null) { + return "dependencies object null in manifest.json"; + } + return null; + } + + static async Task IsUsingGitRepo() { + var respose = await Task.Run(() => IsUsingGitRepoThreaded(PackageConst.PackageName)); + if(respose.err != null) { + Log.Warning("Unable to find package. message: {0}", respose.err); + return false; + } else { + return respose.data; + } + } + + static Response IsUsingGitRepoThreaded(string packageId) { + var fi = new FileInfo("Packages/manifest.json"); + if(!fi.Exists) { + return "Unable to find manifest.json"; + } + + using(var reader = fi.OpenText()) { + var root = JObject.Load(new JsonTextReader(reader)); + JObject deps; + var err = TryGetManfestDeps(root, out deps); + if(err != null) { + return "no dependencies specified in manifest.json"; + } + JToken value; + if(!deps.TryGetValue(packageId, out value)) { + //Likely a local package directly in the packages folder of the unity project + //or the package got moved into the Assets folder + return Response.FromResult(false); + } + var pathToPackage = value.Value(); + if(pathToPackage.StartsWith("git+", StringComparison.Ordinal)) { + return Response.FromResult(true); + } + if(pathToPackage.StartsWith("https://", StringComparison.Ordinal)) { + return Response.FromResult(true); + } + return Response.FromResult(false); + } + } + + class Response { + public readonly T data; + public readonly string err; + public readonly long statusCode; + public Response(T data, string err, long statusCode) { + this.data = data; + this.err = err; + this.statusCode = statusCode; + } + + public static implicit operator Response( string err) { + return Response.FromError(err); + } + } + + static class Response { + public static Response FromError(string error) { + return new Response(default(T), error, -1); + } + public static Response FromResult(T result) { + return new Response(result, null, 200); + } + } + + class State { + public DateTime lastVersionCheck; + public string lastRemotePackageVersion; + } + } + + +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs.meta new file mode 100644 index 000000000..f28198310 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 0cecc9e1c2704904691175cdd2f450e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs b/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs new file mode 100644 index 000000000..72d9854e3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs @@ -0,0 +1,536 @@ +using System; +#if !NETSTANDARD +using System.Globalization; +using System.Runtime.Serialization; +using System.Security.Permissions; +#endif +using System.Text.RegularExpressions; + +namespace SingularityGroup.HotReload.Editor.Semver +{ + /// + /// A semantic version implementation. + /// Conforms to v2.0.0 of http://semver.org/ + /// +#if NETSTANDARD + sealed class SemVersion : IComparable, IComparable +#else + [Serializable] + sealed class SemVersion : IComparable, IComparable, ISerializable +#endif + { + public static SemVersion None = new SemVersion(0, 0, 0); + public static string NoneString = new SemVersion(0, 0, 0).ToString(); + + static Regex parseEx = + new Regex(@"^(?\d+)" + + @"(\.(?\d+))?" + + @"(\.(?\d+))?" + + @"(\-(?
[0-9A-Za-z\-\.]+))?" +
+                @"(\+(?[0-9A-Za-z\-\.]+))?$",
+#if NETSTANDARD
+                RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture);
+#else
+                RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.ExplicitCapture);
+#endif
+
+#if !NETSTANDARD
+        /// 
+        /// Initializes a new instance of the  class.
+        /// 
+        /// 
+        /// 
+        /// 
+        private SemVersion(SerializationInfo info, StreamingContext context)
+        {
+            if (info == null) throw new ArgumentNullException("info");
+            var semVersion = Parse(info.GetString("SemVersion"));
+            Major = semVersion.Major;
+            Minor = semVersion.Minor;
+            Patch = semVersion.Patch;
+            Prerelease = semVersion.Prerelease;
+            Build = semVersion.Build;
+        }
+#endif
+
+        /// 
+        /// Initializes a new instance of the  class.
+        /// 
+        /// The major version.
+        /// The minor version.
+        /// The patch version.
+        /// The prerelease version (eg. "alpha").
+        /// The build eg ("nightly.232").
+        public SemVersion(int major, int minor = 0, int patch = 0, string prerelease = "", string build = "")
+        {
+            this.Major = major;
+            this.Minor = minor;
+            this.Patch = patch;
+
+            this.Prerelease = prerelease ?? "";
+            this.Build = build ?? "";
+        }
+
+        /// 
+        /// Initializes a new instance of the  class.
+        /// 
+        /// The  that is used to initialize 
+        /// the Major, Minor, Patch and Build properties.
+        public SemVersion(Version version)
+        {
+            if (version == null)
+                throw new ArgumentNullException("version");
+
+            this.Major = version.Major;
+            this.Minor = version.Minor;
+
+            if (version.Revision >= 0)
+            {
+                this.Patch = version.Revision;
+            }
+
+            this.Prerelease = String.Empty;
+
+            if (version.Build > 0)
+            {
+                this.Build = version.Build.ToString();
+            }
+            else
+            {
+                this.Build = String.Empty;
+            }
+        }
+
+        /// 
+        /// Parses the specified string to a semantic version.
+        /// 
+        /// The version string.
+        /// If set to true minor and patch version are required, else they default to 0.
+        /// The SemVersion object.
+        /// When a invalid version string is passed.
+        public static SemVersion Parse(string version, bool strict = false)
+        {
+            var match = parseEx.Match(version);
+            if (!match.Success)
+                throw new ArgumentException("Invalid version.", "version");
+
+#if NETSTANDARD
+            var major = int.Parse(match.Groups["major"].Value);
+#else
+            var major = int.Parse(match.Groups["major"].Value, CultureInfo.InvariantCulture);
+#endif
+
+            var minorMatch = match.Groups["minor"];
+            int minor = 0;
+            if (minorMatch.Success) 
+            {
+#if NETSTANDARD
+                minor = int.Parse(minorMatch.Value);
+#else
+                minor = int.Parse(minorMatch.Value, CultureInfo.InvariantCulture);
+#endif
+            }
+            else if (strict)
+            {
+                throw new InvalidOperationException("Invalid version (no minor version given in strict mode)");
+            }
+
+            var patchMatch = match.Groups["patch"];
+            int patch = 0;
+            if (patchMatch.Success)
+            {
+#if NETSTANDARD
+                patch = int.Parse(patchMatch.Value);
+#else
+                patch = int.Parse(patchMatch.Value, CultureInfo.InvariantCulture);
+#endif
+            }
+            else if (strict) 
+            {
+                throw new InvalidOperationException("Invalid version (no patch version given in strict mode)");
+            }
+
+            var prerelease = match.Groups["pre"].Value;
+            var build = match.Groups["build"].Value;
+
+            return new SemVersion(major, minor, patch, prerelease, build);
+        }
+
+        /// 
+        /// Parses the specified string to a semantic version.
+        /// 
+        /// The version string.
+        /// When the method returns, contains a SemVersion instance equivalent 
+        /// to the version string passed in, if the version string was valid, or null if the 
+        /// version string was not valid.
+        /// If set to true minor and patch version are required, else they default to 0.
+        /// False when a invalid version string is passed, otherwise true.
+        public static bool TryParse(string version, out SemVersion semver, bool strict = false)
+        {
+            try
+            {
+                semver = Parse(version, strict);
+                return true;
+            }
+            catch (Exception)
+            {
+                semver = null;
+                return false;
+            }
+        }
+
+        /// 
+        /// Tests the specified versions for equality.
+        /// 
+        /// The first version.
+        /// The second version.
+        /// If versionA is equal to versionB true, else false.
+        public static bool Equals(SemVersion versionA, SemVersion versionB)
+        {
+            if (ReferenceEquals(versionA, null))
+                return ReferenceEquals(versionB, null);
+            return versionA.Equals(versionB);
+        }
+
+        /// 
+        /// Compares the specified versions.
+        /// 
+        /// The version to compare to.
+        /// The version to compare against.
+        /// If versionA < versionB < 0, if versionA > versionB > 0,
+        /// if versionA is equal to versionB 0.
+        public static int Compare(SemVersion versionA, SemVersion versionB)
+        {
+            if (ReferenceEquals(versionA, null))
+                return ReferenceEquals(versionB, null) ? 0 : -1;
+            return versionA.CompareTo(versionB);
+        }
+
+        /// 
+        /// Make a copy of the current instance with optional altered fields. 
+        /// 
+        /// The major version.
+        /// The minor version.
+        /// The patch version.
+        /// The prerelease text.
+        /// The build text.
+        /// The new version object.
+        public SemVersion Change(int? major = null, int? minor = null, int? patch = null,
+            string prerelease = null, string build = null)
+        {
+            return new SemVersion(
+                major ?? this.Major,
+                minor ?? this.Minor,
+                patch ?? this.Patch,
+                prerelease ?? this.Prerelease,
+                build ?? this.Build);
+        }
+
+        /// 
+        /// Gets the major version.
+        /// 
+        /// 
+        /// The major version.
+        /// 
+        public int Major { get; private set; }
+
+        /// 
+        /// Gets the minor version.
+        /// 
+        /// 
+        /// The minor version.
+        /// 
+        public int Minor { get; private set; }
+
+        /// 
+        /// Gets the patch version.
+        /// 
+        /// 
+        /// The patch version.
+        /// 
+        public int Patch { get; private set; }
+
+        /// 
+        /// Gets the pre-release version.
+        /// 
+        /// 
+        /// The pre-release version.
+        /// 
+        public string Prerelease { get; private set; }
+
+        /// 
+        /// Gets the build version.
+        /// 
+        /// 
+        /// The build version.
+        /// 
+        public string Build { get; private set; }
+
+        /// 
+        /// Returns a  that represents this instance.
+        /// 
+        /// 
+        /// A  that represents this instance.
+        /// 
+        public override string ToString()
+        {
+            var version = "" + Major + "." + Minor + "." + Patch;
+            if (!String.IsNullOrEmpty(Prerelease))
+                version += "-" + Prerelease;
+            if (!String.IsNullOrEmpty(Build))
+                version += "+" + Build;
+            return version;
+        }
+
+        /// 
+        /// Compares the current instance with another object of the same type and returns an integer that indicates 
+        /// whether the current instance precedes, follows, or occurs in the same position in the sort order as the 
+        /// other object.
+        /// 
+        /// An object to compare with this instance.
+        /// 
+        /// A value that indicates the relative order of the objects being compared. 
+        /// The return value has these meanings: Value Meaning Less than zero 
+        ///  This instance precedes  in the sort order. 
+        ///  Zero This instance occurs in the same position in the sort order as . i
+        ///  Greater than zero This instance follows  in the sort order.
+        /// 
+        public int CompareTo(object obj)
+        {
+            return CompareTo((SemVersion)obj);
+        }
+
+        /// 
+        /// Compares the current instance with another object of the same type and returns an integer that indicates 
+        /// whether the current instance precedes, follows, or occurs in the same position in the sort order as the 
+        /// other object.
+        /// 
+        /// An object to compare with this instance.
+        /// 
+        /// A value that indicates the relative order of the objects being compared. 
+        /// The return value has these meanings: Value Meaning Less than zero 
+        ///  This instance precedes  in the sort order. 
+        ///  Zero This instance occurs in the same position in the sort order as . i
+        ///  Greater than zero This instance follows  in the sort order.
+        /// 
+        public int CompareTo(SemVersion other)
+        {
+            if (ReferenceEquals(other, null))
+                return 1;
+
+            var r = this.CompareByPrecedence(other);
+            if (r != 0)
+                return r;
+
+            r = CompareComponent(this.Build, other.Build);
+            return r;
+        }
+
+        /// 
+        /// Compares to semantic versions by precedence. This does the same as a Equals, but ignores the build information.
+        /// 
+        /// The semantic version.
+        /// true if the version precedence matches.
+        public bool PrecedenceMatches(SemVersion other)
+        {
+            return CompareByPrecedence(other) == 0;
+        }
+
+        /// 
+        /// Compares to semantic versions by precedence. This does the same as a Equals, but ignores the build information.
+        /// 
+        /// The semantic version.
+        /// 
+        /// A value that indicates the relative order of the objects being compared. 
+        /// The return value has these meanings: Value Meaning Less than zero 
+        ///  This instance precedes  in the version precedence.
+        ///  Zero This instance has the same precedence as . i
+        ///  Greater than zero This instance has creater precedence as .
+        /// 
+        public int CompareByPrecedence(SemVersion other)
+        {
+            if (ReferenceEquals(other, null))
+                return 1;
+
+            var r = this.Major.CompareTo(other.Major);
+            if (r != 0) return r;
+
+            r = this.Minor.CompareTo(other.Minor);
+            if (r != 0) return r;
+
+            r = this.Patch.CompareTo(other.Patch);
+            if (r != 0) return r;
+
+            r = CompareComponent(this.Prerelease, other.Prerelease, true);
+            return r;
+        }
+
+        static int CompareComponent(string a, string b, bool lower = false)
+        {
+            var aEmpty = String.IsNullOrEmpty(a);
+            var bEmpty = String.IsNullOrEmpty(b);
+            if (aEmpty && bEmpty)
+                return 0;
+
+            if (aEmpty)
+                return lower ? 1 : -1;
+            if (bEmpty)
+                return lower ? -1 : 1;
+
+            var aComps = a.Split('.');
+            var bComps = b.Split('.');
+
+            var minLen = Math.Min(aComps.Length, bComps.Length);
+            for (int i = 0; i < minLen; i++)
+            {
+                var ac = aComps[i];
+                var bc = bComps[i];
+                int anum, bnum;
+                var isanum = Int32.TryParse(ac, out anum);
+                var isbnum = Int32.TryParse(bc, out bnum);
+                int r;
+                if (isanum && isbnum)
+                {
+                    r = anum.CompareTo(bnum);
+                    if (r != 0) return anum.CompareTo(bnum);
+                }
+                else
+                {
+                    if (isanum)
+                        return -1;
+                    if (isbnum)
+                        return 1;
+                    r = String.CompareOrdinal(ac, bc);
+                    if (r != 0)
+                        return r;
+                }
+            }
+
+            return aComps.Length.CompareTo(bComps.Length);
+        }
+
+        /// 
+        /// Determines whether the specified  is equal to this instance.
+        /// 
+        /// The  to compare with this instance.
+        /// 
+        ///   true if the specified  is equal to this instance; otherwise, false.
+        /// 
+        public override bool Equals(object obj)
+        {
+            if (ReferenceEquals(obj, null))
+                return false;
+
+            if (ReferenceEquals(this, obj))
+                return true;
+
+            var other = (SemVersion)obj;
+
+            return this.Major == other.Major &&
+                this.Minor == other.Minor &&
+                this.Patch == other.Patch &&
+                string.Equals(this.Prerelease, other.Prerelease, StringComparison.Ordinal) &&
+                string.Equals(this.Build, other.Build, StringComparison.Ordinal);
+        }
+
+        /// 
+        /// Returns a hash code for this instance.
+        /// 
+        /// 
+        /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. 
+        /// 
+        public override int GetHashCode()
+        {
+            unchecked
+            {
+                int result = this.Major.GetHashCode();
+                result = result * 31 + this.Minor.GetHashCode();
+                result = result * 31 + this.Patch.GetHashCode();
+                result = result * 31 + this.Prerelease.GetHashCode();
+                result = result * 31 + this.Build.GetHashCode();
+                return result;
+            }
+        }
+
+#if !NETSTANDARD
+        [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
+        public void GetObjectData(SerializationInfo info, StreamingContext context)
+        {
+            if (info == null) throw new ArgumentNullException("info");
+            info.AddValue("SemVersion", ToString());
+        }
+#endif
+
+        /// 
+        /// The override of the equals operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is equal to right true, else false.
+        public static bool operator ==(SemVersion left, SemVersion right)
+        {
+            if(ReferenceEquals(right, null)) {
+                return ReferenceEquals(left, null);
+            }
+            if(ReferenceEquals(left, null)) {
+                return false;
+            }
+            return left.PrecedenceMatches(right);
+        }
+
+        /// 
+        /// The override of the un-equal operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is not equal to right true, else false.
+        public static bool operator !=(SemVersion left, SemVersion right)
+        {
+            return !(left == right);
+        }
+
+        /// 
+        /// The override of the greater operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is greater than right true, else false.
+        public static bool operator >(SemVersion left, SemVersion right)
+        {
+            return left.CompareByPrecedence(right) > 0;
+        }
+
+        /// 
+        /// The override of the greater than or equal operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is greater than or equal to right true, else false.
+        public static bool operator >=(SemVersion left, SemVersion right)
+        {
+            return left == right || left > right;
+        }
+
+        /// 
+        /// The override of the less operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is less than right true, else false.
+        public static bool operator <(SemVersion left, SemVersion right)
+        {
+            return left.CompareByPrecedence(right) < 0;
+        }
+
+        /// 
+        /// The override of the less than or equal operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is less than or equal to right true, else false.
+        public static bool operator <=(SemVersion left, SemVersion right)
+        {
+            return left == right || left < right;
+        }
+    }
+}
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs.meta
new file mode 100644
index 000000000..b4017da8a
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs.meta
@@ -0,0 +1,18 @@
+fileFormatVersion: 2
+guid: 0b49a1188451e7745af9f636d854efc8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.12.10
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs
+  uploadId: 668105
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window.meta b/Packages/com.singularitygroup.hotreload/Editor/Window.meta
new file mode 100644
index 000000000..710dd15a1
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e1826b88dea6aa446a9bc22bc0140c22
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI.meta
new file mode 100644
index 000000000..5cbd648a3
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dddc1cae3f951f84da98305ec6228f25
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons.meta
new file mode 100644
index 000000000..4d51a80f8
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 86f1446dfdbc2a94aac993437231aaa4
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs
new file mode 100644
index 000000000..3ecfc201e
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs
@@ -0,0 +1,42 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace SingularityGroup.HotReload.Editor {
+    internal class OpenDialogueButton : IGUIComponent {
+        public readonly string text;
+        public readonly string url;
+        public readonly string title;
+        public readonly string message;
+        public readonly string ok;
+        public readonly string cancel;
+        
+        public OpenDialogueButton(string text, string url, string title, string message, string ok, string cancel) {
+            this.text = text;
+            this.url = url;
+            this.title = title;
+            this.message = message;
+            this.ok = ok;
+            this.cancel = cancel;
+        }
+
+        public void OnGUI() {
+             Render(text, url, title, message, ok, cancel);
+        }
+
+        public static void Render(string text, string url, string title, string message, string ok, string cancel) {
+            if (GUILayout.Button(new GUIContent(text.StartsWith(" ") ? text : " " + text))) {
+                if (EditorUtility.DisplayDialog(title, message, ok, cancel)) {
+                    Application.OpenURL(url);
+                }
+            }
+        }
+        
+        public static void RenderRaw(Rect rect, string text, string url, string title, string message, string ok, string cancel, GUIStyle style = null) {
+            if (GUI.Button(rect, new GUIContent(text.StartsWith(" ") ? text : " " + text), style ?? GUI.skin.button)) {
+                if (EditorUtility.DisplayDialog(title, message, ok, cancel)) {
+                    Application.OpenURL(url);
+                }
+            }
+        }
+    }
+}
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs.meta
new file mode 100644
index 000000000..738e1c437
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 97ca8174f0514e8e9ee5d4be26ed8078
+timeCreated: 1674416481
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.12.10
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs
+  uploadId: 668105
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs
new file mode 100644
index 000000000..0f1edcc90
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs
@@ -0,0 +1,29 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace SingularityGroup.HotReload.Editor {
+    internal class OpenURLButton : IGUIComponent {
+        public readonly string text;
+        public readonly string url;
+        public OpenURLButton(string text, string url) {
+            this.text = text;
+            this.url = url;
+        }
+
+        public void OnGUI() {
+            Render(text, url);
+        }
+
+        public static void Render(string text, string url) {
+            if (GUILayout.Button(new GUIContent(text.StartsWith(" ") ? text : " " + text))) {
+                Application.OpenURL(url);
+            }
+        }
+        
+        public static void RenderRaw(Rect rect, string text, string url, GUIStyle style = null) {
+            if (GUI.Button(rect, new GUIContent(text.StartsWith(" ") ? text : " " + text), style ?? GUI.skin.button)) {
+                Application.OpenURL(url);
+            }
+        }
+    }
+}
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs.meta
new file mode 100644
index 000000000..608751c7f
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs.meta
@@ -0,0 +1,18 @@
+fileFormatVersion: 2
+guid: ef12252fc9d1f9f438cbd34cf8f7364b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.12.10
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs
+  uploadId: 668105
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs
new file mode 100644
index 000000000..d20fae9bf
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs
@@ -0,0 +1,116 @@
+using UnityEngine;
+
+namespace SingularityGroup.HotReload.Editor {
+    /// 
+    /// Create a new texture only once. Safe access to generated textures.
+    /// 
+    /// 
+    /// If 
+    internal static class EditorTextures {
+        private static Texture2D black;
+        private static Texture2D white;
+        private static Texture2D lightGray225;
+        private static Texture2D lightGray235;
+        private static Texture2D darkGray17;
+        private static Texture2D darkGray30;
+
+        // Texture2D.blackTexture doesn't render properly in Editor GUI.
+        public static Texture2D Black {
+            get {
+                if (!black) {
+                    black = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = black.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(0, 0, 0, byte.MaxValue);
+                    }
+                    black.SetPixels32(pixels);
+                    black.Apply();
+                }
+                return black;
+            }
+        }
+        
+        // Texture2D.whiteTexture might not render properly in Editor GUI.
+        public static Texture2D White {
+            get {
+                
+                if (!white) {
+                    white = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = white.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue);
+                    }
+                    white.SetPixels32(pixels);
+                    white.Apply();
+                }
+                return white;
+            }
+        }
+
+        public static Texture2D DarkGray17 {
+            get {
+                if (!darkGray17) {
+                    darkGray17 = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = darkGray17.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(17, 17, 17, byte.MaxValue);
+                    }
+                    darkGray17.SetPixels32(pixels);
+                    darkGray17.Apply();
+                }
+                return darkGray17;
+            }
+        }
+        
+        public static Texture2D DarkGray40 {
+            get {
+                if (!darkGray30) {
+                    darkGray30 = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = darkGray30.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(40, 40, 40, byte.MaxValue);
+                    }
+                    darkGray30.SetPixels32(pixels);
+                    darkGray30.Apply();
+                }
+                return darkGray30;
+            }
+        }
+
+        public static Texture2D LightGray238 {
+            get {
+                if (!lightGray235) {
+                    lightGray235 = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = lightGray235.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(238, 238, 238, byte.MaxValue);
+                    }
+                    lightGray235.SetPixels32(pixels);
+                    lightGray235.Apply();
+                }
+                return lightGray235;
+            }
+        }
+
+        public static Texture2D LightGray225 {
+            get {
+                if (!lightGray225) {
+                    lightGray225 = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+
+                    var pixels = lightGray225.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(225, 225, 225, byte.MaxValue);
+                    }
+                    lightGray225.SetPixels32(pixels);
+                    lightGray225.Apply();
+                }
+                return lightGray225;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs.meta
new file mode 100644
index 000000000..8f364a823
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 9116854180be4f2b8fcc0422bcf570a5
+timeCreated: 1674127121
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.12.10
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs
+  uploadId: 668105
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs
new file mode 100644
index 000000000..323ce59cb
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs
@@ -0,0 +1,5 @@
+namespace SingularityGroup.HotReload.Editor {
+    internal interface IGUIComponent {
+        void OnGUI();
+    }
+}
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs.meta
new file mode 100644
index 000000000..7cdb56e08
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs.meta
@@ -0,0 +1,18 @@
+fileFormatVersion: 2
+guid: 893cb208871dab94488cb988920f0ebd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.12.10
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs
+  uploadId: 668105
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options.meta
new file mode 100644
index 000000000..32dff3ddb
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2b3fa5ea1ed3545429de96b41801942f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs
new file mode 100644
index 000000000..bcdedf81d
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs
@@ -0,0 +1,48 @@
+using UnityEditor;
+
+namespace SingularityGroup.HotReload.Editor {
+    internal class AllowAndroidAppToMakeHttpRequestsOption : ProjectOptionBase {
+        public override string ShortSummary {
+            get {
+                return "Allow app to make HTTP requests";
+            }
+        }
+
+        public override string Summary => ShortSummary;
+
+        public override bool GetValue(SerializedObject so) {
+            #if UNITY_2022_1_OR_NEWER
+            // use PlayerSettings as the source of truth 
+            return PlayerSettings.insecureHttpOption != InsecureHttpOption.NotAllowed;
+            #else
+            return GetProperty(so).boolValue;
+            #endif
+        }
+
+        public override string ObjectPropertyName =>
+            nameof(HotReloadSettingsObject.AllowAndroidAppToMakeHttpRequests);
+
+        public override void SetValue(SerializedObject so, bool value) {
+            base.SetValue(so, value);
+
+            // Enabling on Unity 2022 or newer → set the Unity option to ‘Development Builds only’
+            #if UNITY_2022_1_OR_NEWER
+            var notAllowed = PlayerSettings.insecureHttpOption == InsecureHttpOption.NotAllowed;
+            if (value) {
+                // user chose to enable it
+                if (notAllowed) {
+                    PlayerSettings.insecureHttpOption = InsecureHttpOption.DevelopmentOnly;
+                }
+            } else {
+                // user chose to disable it
+                PlayerSettings.insecureHttpOption = InsecureHttpOption.NotAllowed;
+            }
+            #endif
+        }
+
+        public override void InnerOnGUI(SerializedObject so) {
+            var description = "For Hot Reload to work on-device, please allow HTTP requests";
+            EditorGUILayout.LabelField(description, HotReloadWindowStyles.WrapStyle);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs.meta
new file mode 100644
index 000000000..828ae0334
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs.meta
@@ -0,0 +1,18 @@
+fileFormatVersion: 2
+guid: 0a7442cee510ab4498ca2a846e0c4e92
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.12.10
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs
+  uploadId: 668105
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base.meta
new file mode 100644
index 000000000..a16bb7046
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bb8474c37f13d704d96b43e0f681680d
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs
new file mode 100644
index 000000000..8cfa45772
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs
@@ -0,0 +1,57 @@
+using UnityEditor;
+
+namespace SingularityGroup.HotReload.Editor {
+    /// 
+    /// An option stored inside the current Unity project.
+    /// 
+    internal abstract class ProjectOptionBase : IOption, ISerializedProjectOption {
+        public abstract string ShortSummary { get; }
+        public abstract string Summary { get; }
+
+        public virtual bool GetValue(SerializedObject so) {
+            return so.FindProperty(ObjectPropertyName).boolValue;
+        }
+
+        protected SerializedProperty GetProperty(SerializedObject so) {
+            return so.FindProperty(ObjectPropertyName);
+        }
+        
+        public virtual void SetValue(SerializedObject so, bool value) {
+            so.FindProperty(ObjectPropertyName).boolValue = value;
+        }
+
+        public virtual void InnerOnGUI(SerializedObject so) { }
+
+        public abstract string ObjectPropertyName { get; }
+
+        /// 
+        /// Override this if your option is not needed for on-device Hot Reload to work.
+ /// (by default, a project option must be true for Hot Reload to work) + ///
+ public virtual bool IsRequiredForBuild() { + return true; + } + } + + /// + /// An option that is stored on the user's computer (shared between Unity projects). + /// + internal abstract class ComputerOptionBase : IOption { + public abstract string ShortSummary { get; } + public abstract string Summary { get; } + + public abstract bool GetValue(); + + /// Uses for storing the value on the user's computer. + public virtual void SetValue(bool value) { } + + public bool GetValue(SerializedObject so) => GetValue(); + + public virtual void SetValue(SerializedObject so, bool value) => SetValue(value); + + void IOption.InnerOnGUI(SerializedObject so) { + InnerOnGUI(); + } + public virtual void InnerOnGUI() { } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs.meta new file mode 100644 index 000000000..2b0907f36 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: dab8ef53c2ee30a40ab6a7e4abd1260c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs new file mode 100644 index 000000000..e68f3a1b2 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs @@ -0,0 +1,34 @@ +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor { + public interface IOption { + string ShortSummary { get; } + string Summary { get; } + + /// The wrapped by SerializedObject + bool GetValue(SerializedObject so); + + /// + /// Handle the new value. + /// + /// + /// Note: caller must skip calling this if value same as GetValue! + /// + /// The wrapped by SerializedObject + /// + void SetValue(SerializedObject so, bool value); + + /// The wrapped by SerializedObject + void InnerOnGUI(SerializedObject so); + } + + /// + /// An option scoped to the current Unity project. + /// + /// + /// These options are intended to be shared with collaborators and used by Unity Player builds. + /// + public interface ISerializedProjectOption { + string ObjectPropertyName { get; } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs.meta new file mode 100644 index 000000000..a1e0d668e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0a626aa97160471f85de4646a634bdf1 +timeCreated: 1674574633 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs new file mode 100644 index 000000000..7d225e8b6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs @@ -0,0 +1,70 @@ +using System; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Editor.Cli; +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor { + internal sealed class ExposeServerOption : ComputerOptionBase { + + public override string ShortSummary => "Allow Devices to Connect"; + public override string Summary => "Allow Devices to Connect (WiFi)"; + + public override void InnerOnGUI() { + string description; + if (GetValue()) { + description = "The HotReload server is reachable from devices on the same Wifi network"; + } else { + description = "The HotReload server is available to your computer only. Other devices cannot connect to it."; + } + EditorGUILayout.LabelField(description, HotReloadWindowStyles.WrapStyle); + } + + public override bool GetValue() { + return HotReloadPrefs.ExposeServerToLocalNetwork; + } + + public override void SetValue(SerializedObject so, bool val) { + // AllowAndroidAppToMakeHttpRequestsOption + if (val == HotReloadPrefs.ExposeServerToLocalNetwork) { + return; + } + + HotReloadPrefs.ExposeServerToLocalNetwork = val; + if (val) { + // they allowed this one for mobile builds, so now we allow everything else needed for player build to work with HR + new AllowAndroidAppToMakeHttpRequestsOption().SetValue(so, true); + } + RunTask(() => { + RunOnMainThreadSync(() => { + var isRunningResult = ServerHealthCheck.I.IsServerHealthy; + if (isRunningResult) { + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When changing '{Summary}', the Hot Reload server must be restarted for this to take effect." + + "\nDo you want to restart it now?", + "Restart server", "Don't restart"); + if (restartServer) { + CodePatcher.I.ClearPatchedMethods(); + EditorCodePatcher.RestartCodePatcher().Forget(); + } + } + }); + }); + } + + void RunTask(Action action) { + var token = HotReloadWindow.Current.cancelToken; + Task.Run(() => { + if (token.IsCancellationRequested) return; + try { + action(); + } catch (Exception ex) { + ThreadUtility.LogException(ex, token); + } + }, token); + } + + void RunOnMainThreadSync(Action action) { + ThreadUtility.RunOnMainThread(action, HotReloadWindow.Current.cancelToken); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs.meta new file mode 100644 index 000000000..659944146 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 5ab0973d3ae1275469237480381842c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs new file mode 100644 index 000000000..3a6813436 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs @@ -0,0 +1,24 @@ +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor { + internal class IncludeInBuildOption : ProjectOptionBase, ISerializedProjectOption { + static IncludeInBuildOption _I; + public static IncludeInBuildOption I = _I ?? (_I = new IncludeInBuildOption()); + public override string ShortSummary => "Include Hot Reload in player builds"; + public override string Summary => ShortSummary; + + public override string ObjectPropertyName => + nameof(HotReloadSettingsObject.IncludeInBuild); + + public override void InnerOnGUI(SerializedObject so) { + string description; + if (GetValue(so)) { + description = "The Hot Reload runtime is included in development builds that use the Mono scripting backend."; + } else { + description = "The Hot Reload runtime will not be included in any build. Use this option to disable HotReload without removing it from your project."; + } + description += " This option does not affect Hot Reload usage in Playmode"; + EditorGUILayout.LabelField(description, HotReloadWindowStyles.WrapStyle); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs.meta new file mode 100644 index 000000000..40e66fc59 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 39ed4f822bcd81340bdf7189b3bc5016 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs.meta new file mode 100644 index 000000000..b77723157 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c0f7811020465d46bcd0305e2f83e8a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base.meta new file mode 100644 index 000000000..9cec40c97 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58d14712b7ef14540ba4817a5ef873a6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs new file mode 100644 index 000000000..7a648881a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs @@ -0,0 +1,33 @@ + +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal abstract class HotReloadTabBase : IGUIComponent { + protected readonly HotReloadWindow _window; + + public string Title { get; } + public Texture Icon { get; } + public string Tooltip { get; } + + public HotReloadTabBase(HotReloadWindow window, string title, Texture iconImage, string tooltip) { + _window = window; + + Title = title; + Icon = iconImage; + Tooltip = tooltip; + } + + public HotReloadTabBase(HotReloadWindow window, string title, string iconName, string tooltip) : + this(window, title, EditorGUIUtility.IconContent(iconName).image, tooltip) { + } + + protected void Repaint() { + _window.Repaint(); + } + + public virtual void Update() { } + + public abstract void OnGUI(); + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs.meta new file mode 100644 index 000000000..1f3d433e8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c2c79b82bd9636d499449f91f93fae2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers.meta new file mode 100644 index 000000000..0c5c6ba69 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a089a7225d904b00b2893a34b514ad28 +timeCreated: 1689791626 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs new file mode 100644 index 000000000..a0c841f53 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs @@ -0,0 +1,308 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal enum RedeemStage { + None, + Registration, + Redeem, + Login + } + + // IMPORTANT: don't rename + internal enum RegistrationOutcome { + None, + Indie, + Business, + } + + internal class RedeemLicenseHelper { + public static readonly RedeemLicenseHelper I = new RedeemLicenseHelper(); + + private string _pendingCompanySize; + private string _pendingInvoiceNumber; + private string _pendingRedeemEmail; + + private const string registerFlagPath = PackageConst.LibraryCachePath + "/registerFlag.txt"; + public const string registerOutcomePath = PackageConst.LibraryCachePath + "/registerOutcome.txt"; + + public RedeemStage RedeemStage { get; private set; } + public RegistrationOutcome RegistrationOutcome { get; private set; } + public bool RegistrationRequired => RedeemStage != RedeemStage.None; + + private string status; + private string error; + + const string statusSuccess = "success"; + const string statusAlreadyClaimed = "already redeemed by this user/device"; + const string unknownError = "We apologize, an error happened while redeeming your license. Please reach out to customer support for assistance."; + + private GUILayoutOption[] secondaryButtonLayoutOptions = new[] { GUILayout.MaxWidth(100) }; + + private bool requestingRedeem; + private HttpClient redeemClient; + const string redeemUrl = "https://vmhzj6jonn3qy7hk7tx7levpli0bstpj.lambda-url.us-east-1.on.aws/redeem"; + + public RedeemLicenseHelper() { + if (File.Exists(registerFlagPath)) { + RedeemStage = RedeemStage.Registration; + } + try { + if (File.Exists(registerOutcomePath)) { + RegistrationOutcome outcome; + if (Enum.TryParse(File.ReadAllText(registerOutcomePath), out outcome)) { + RegistrationOutcome = outcome; + } + } + } catch (Exception e) { + Log.Warning($"Failed determining registration outcome with {e.GetType().Name}: {e.Message}"); + } + } + + public void RenderStage(HotReloadRunTabState state) { + if (state.redeemStage == RedeemStage.Registration) { + RenderRegistration(); + } else if (state.redeemStage == RedeemStage.Redeem) { + RenderRedeem(); + } else if (state.redeemStage == RedeemStage.Login) { + RenderLogin(state); + } + } + + private void RenderRegistration() { + var message = PackageConst.IsAssetStoreBuild + ? "Unity Pro users are required to obtain an additional license. You are eligible to redeem one if your company has ten or fewer employees. Please enter your company details below." + : "The licensing model for Unity Pro users varies depending on the number of employees in your company. Please enter your company details below."; + if (error != null) { + EditorGUILayout.HelpBox(error, MessageType.Warning); + } else { + EditorGUILayout.HelpBox(message, MessageType.Info); + } + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Comany size (number of employees)"); + GUI.SetNextControlName("company_size"); + _pendingCompanySize = EditorGUILayout.TextField(_pendingCompanySize)?.Trim(); + EditorGUILayout.Space(); + + if (GUILayout.Button("Proceed")) { + int companySize; + if (!int.TryParse(_pendingCompanySize, out companySize)) { + error = "Please enter a number."; + } else { + error = null; + HandleRegistration(companySize); + } + } + } + + void HandleRegistration(int companySize) { + RequestHelper.RequestEditorEvent(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Licensing, StatEventType.Register), new EditorExtraData { { StatKey.CompanySize, companySize } }); + if (companySize > 10) { + FinishRegistration(RegistrationOutcome.Business); + EditorCodePatcher.DownloadAndRun().Forget(); + } else if (PackageConst.IsAssetStoreBuild) { + SwitchToStage(RedeemStage.Redeem); + } else { + FinishRegistration(RegistrationOutcome.Indie); + EditorCodePatcher.DownloadAndRun().Forget(); + } + } + + private void RenderRedeem() { + if (error != null) { + EditorGUILayout.HelpBox(error, MessageType.Warning); + } else { + EditorGUILayout.HelpBox("To enable us to verify your purchase, please enter your invoice number/order ID. Additionally, provide the email address that you intend to use for managing your credentials.", MessageType.Info); + } + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Invoice number/Order ID"); + GUI.SetNextControlName("invoice_number"); + _pendingInvoiceNumber = EditorGUILayout.TextField(_pendingInvoiceNumber ?? HotReloadPrefs.RedeemLicenseInvoice)?.Trim(); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Email"); + GUI.SetNextControlName("email_redeem"); + _pendingRedeemEmail = EditorGUILayout.TextField(_pendingRedeemEmail ?? HotReloadPrefs.RedeemLicenseEmail); + EditorGUILayout.Space(); + + using (new EditorGUI.DisabledScope(requestingRedeem)) { + if (GUILayout.Button("Redeem", HotReloadRunTab.bigButtonHeight)) { + RedeemLicense(email: _pendingRedeemEmail, invoiceNumber: _pendingInvoiceNumber).Forget(); + } + } + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Skip", secondaryButtonLayoutOptions)) { + SwitchToStage(RedeemStage.Login); + } + GUILayout.FlexibleSpace(); + } + } + + async Task RedeemLicense(string email, string invoiceNumber) { + string validationError; + if (string.IsNullOrEmpty(invoiceNumber)) { + validationError = "Please enter invoice number / order ID."; + } else { + validationError = HotReloadRunTab.ValidateEmail(email); + } + if (validationError != null) { + error = validationError; + return; + } + var resp = await RequestRedeem(email: email, invoiceNumber: invoiceNumber); + status = resp?.status; + if (status != null) { + if (status != statusSuccess && status != statusAlreadyClaimed) { + Log.Error("Redeeming license failed: unknown status received"); + error = unknownError; + } else { + HotReloadPrefs.RedeemLicenseEmail = email; + HotReloadPrefs.RedeemLicenseInvoice = invoiceNumber; + // prepare data for login screen + HotReloadPrefs.LicenseEmail = email; + HotReloadPrefs.LicensePassword = null; + + SwitchToStage(RedeemStage.Login); + } + } else if (resp?.error != null) { + Log.Warning($"Redeeming a license failed with error: {resp.error}"); + error = GetPrettyError(resp); + } else { + Log.Warning("Redeeming a license failed: uknown error encountered"); + error = unknownError; + } + } + + string GetPrettyError(RedeemResponse response) { + var err = response?.error; + if (err == null) { + return unknownError; + } + if (err.Contains("Invalid email")) { + return "Please enter a valid email address."; + } else if (err.Contains("License invoice already redeemed")) { + return "The invoice number/order ID you're trying to use has already been applied to redeem a license. Please enter a different invoice number/order ID. If you have already redeemed a license for another email, you may proceed to the next step."; + } else if (err.Contains("Different license already redeemed by given email")) { + return "The provided email has already been used to redeem a license. If you have previously redeemed a license, you can proceed to the next step and use your existing credentials. If not, please input a different email address."; + } else if (err.Contains("Invoice not found")) { + return "The invoice was not found. Please ensure that you've entered the correct invoice number/order ID."; + } else if (err.Contains("Invoice refunded")) { + return "The purchase has been refunded. Please enter a different invoice number/order ID."; + } else { + return unknownError; + } + } + + async Task RequestRedeem(string email, string invoiceNumber) { + requestingRedeem = true; + await ThreadUtility.SwitchToThreadPool(); + try { + redeemClient = redeemClient ?? (redeemClient = HttpClientUtils.CreateHttpClient()); + var input = new Dictionary { + { "email", email }, + { "invoice", invoiceNumber } + }; + var content = new StringContent(JsonConvert.SerializeObject(input), Encoding.UTF8, "application/json"); + using (var resp = await redeemClient.PostAsync(redeemUrl, content, HotReloadWindow.Current.cancelToken).ConfigureAwait(false)) { + if (resp.StatusCode != HttpStatusCode.OK) { + return new RedeemResponse(null, $"Redeem request failed. Status code: {(int)resp.StatusCode}, reason: {resp.ReasonPhrase}"); + } + var str = await resp.Content.ReadAsStringAsync().ConfigureAwait(false); + try { + return JsonConvert.DeserializeObject(str); + } catch (Exception ex) { + return new RedeemResponse(null, $"Failed deserializing redeem response with exception: {ex.GetType().Name}: {ex.Message}"); + } + } + } catch (WebException ex) { + return new RedeemResponse(null, $"Redeeming license failed: WebException encountered {ex.Message}"); + } finally { + requestingRedeem = false; + } + } + + private class RedeemResponse { + public string status; + public string error; + + public RedeemResponse(string status, string error) { + this.status = status; + this.error = error; + } + } + + private void RenderLogin(HotReloadRunTabState state) { + if (status == statusSuccess) { + EditorGUILayout.HelpBox("Success! You will receive an email containing your license password shortly. Once you receive it, please enter the received password in the designated field below to complete your registration.", MessageType.Info); + } else if (status == statusAlreadyClaimed) { + EditorGUILayout.HelpBox("Your license has already been redeemed. Please enter your existing password below.", MessageType.Info); + } + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + HotReloadRunTab.RenderLicenseInnerPanel(state, renderLogout: false); + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Go Back", secondaryButtonLayoutOptions)) { + SwitchToStage(RedeemStage.Redeem); + } + GUILayout.FlexibleSpace(); + } + } + + public void StartRegistration() { + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(registerFlagPath)); + using (File.Create(registerFlagPath)) { + } + RedeemStage = RedeemStage.Registration; + RegistrationOutcome = RegistrationOutcome.None; + } + + public void FinishRegistration(RegistrationOutcome outcome) { + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(registerFlagPath)); + File.WriteAllText(registerOutcomePath, outcome.ToString()); + File.Delete(registerFlagPath); + RegistrationOutcome = outcome; + SwitchToStage(RedeemStage.None); + Cleanup(); + } + + void SwitchToStage(RedeemStage stage) { + // remove focus so that the input field re-renders + GUI.FocusControl(null); + RedeemStage = stage; + } + + void Cleanup() { + redeemClient?.Dispose(); + redeemClient = null; + _pendingCompanySize = null; + _pendingInvoiceNumber = null; + _pendingRedeemEmail = null; + status = null; + error = null; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs.meta new file mode 100644 index 000000000..1f97908ba --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ad73f74d3c494c02aae937e2dfa305a2 +timeCreated: 1689791373 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs new file mode 100644 index 000000000..d2b6e95e8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs @@ -0,0 +1,310 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.Linq; +using UnityEditor; +using UnityEngine; +using System.Threading.Tasks; +using System.IO; +using SingularityGroup.HotReload.Newtonsoft.Json; +using SingularityGroup.HotReload.EditorDependencies; + +namespace SingularityGroup.HotReload.Editor { + internal struct HotReloadAboutTabState { + public readonly bool logsFodlerExists; + public readonly IReadOnlyList changelog; + public readonly bool loginRequired; + public readonly bool hasTrialLicense; + public readonly bool hasPayedLicense; + + public HotReloadAboutTabState( + bool logsFodlerExists, + IReadOnlyList changelog, + bool loginRequired, + bool hasTrialLicense, + bool hasPayedLicense + ) { + this.logsFodlerExists = logsFodlerExists; + this.changelog = changelog; + this.loginRequired = loginRequired; + this.hasTrialLicense = hasTrialLicense; + this.hasPayedLicense = hasPayedLicense; + } + } + + internal class HotReloadAboutTab : HotReloadTabBase { + internal static readonly OpenURLButton seeMore = new OpenURLButton("See More", Constants.ChangelogURL); + internal static readonly OpenDialogueButton manageLicenseButton = new OpenDialogueButton("Manage License", Constants.ManageLicenseURL, "Manage License", "Upgrade/downgrade/edit your subscription and edit payment info.", "Open in browser", "Cancel"); + internal static readonly OpenDialogueButton manageAccountButton = new OpenDialogueButton("Manage Account", Constants.ManageAccountURL, "Manage Account", "Login with company code 'naughtycult'. Use the email you signed up with. Your initial password was sent to you by email.", "Open in browser", "Cancel"); + internal static readonly OpenURLButton contactButton = new OpenURLButton("Contact", Constants.ContactURL); + internal static readonly OpenURLButton discordButton = new OpenURLButton("Join Discord", Constants.DiscordInviteUrl); + internal static readonly OpenDialogueButton reportIssueButton = new OpenDialogueButton("Report issue", Constants.ReportIssueURL, "Report issue", "Report issue in our public issue tracker. Requires gitlab.com account (if you don't have one and are not willing to make it, please contact us by other means such as our website).", "Open in browser", "Cancel"); + + private Vector2 _changelogScroll; + private IReadOnlyList _changelog = new List(); + private bool _requestedChangelog; + private int _changelogRequestAttempt; + private string _changelogDir = Path.Combine(PackageConst.LibraryCachePath, "changelog.json"); + public static string logsPath = Path.Combine(PackageConst.LibraryCachePath, "logs"); + + private static bool LatestChangelogLoaded(IReadOnlyList changelog) { + return changelog.Any() && changelog[0].versionNum == PackageUpdateChecker.lastRemotePackageVersion; + } + + private async Task FetchChangelog() { + if(!_changelog.Any()) { + var file = new FileInfo(_changelogDir); + if (file.Exists) { + await Task.Run(() => { + var bytes = File.ReadAllText(_changelogDir); + _changelog = JsonConvert.DeserializeObject>(bytes); + }); + } + } + if (_requestedChangelog || LatestChangelogLoaded(_changelog)) { + return; + } + _requestedChangelog = true; + try { + do { + var changelogRequestTimeout = ExponentialBackoff.GetTimeout(_changelogRequestAttempt); + _changelog = await RequestHelper.FetchChangelog() ?? _changelog; + if (LatestChangelogLoaded(_changelog)) { + await Task.Run(() => { + Directory.CreateDirectory(PackageConst.LibraryCachePath); + File.WriteAllText(_changelogDir, JsonConvert.SerializeObject(_changelog)); + }); + Repaint(); + return; + } + await Task.Delay(changelogRequestTimeout); + } while (_changelogRequestAttempt++ < 1000 && !LatestChangelogLoaded(_changelog)); + } catch { + // ignore + } finally { + _requestedChangelog = false; + } + } + + public HotReloadAboutTab(HotReloadWindow window) : base(window, "Help", "_Help", "Info and support for Hot Reload for Unity.") { } + + string GetRelativeDate(DateTime givenDate) { + const int second = 1; + const int minute = 60 * second; + const int hour = 60 * minute; + const int day = 24 * hour; + const int month = 30 * day; + + var ts = new TimeSpan(DateTime.UtcNow.Ticks - givenDate.Ticks); + var delta = Math.Abs(ts.TotalSeconds); + + if (delta < 24 * hour) + return "Today"; + + if (delta < 48 * hour) + return "Yesterday"; + + if (delta < 30 * day) + return ts.Days + " days ago"; + + if (delta < 12 * month) { + var months = Convert.ToInt32(Math.Floor((double)ts.Days / 30)); + return months <= 1 ? "one month ago" : months + " months ago"; + } + var years = Convert.ToInt32(Math.Floor((double)ts.Days / 365)); + return years <= 1 ? "one year ago" : years + " years ago"; + } + + void RenderVersion(ChangelogVersion version) { + var tempTextString = ""; + + //version number + EditorGUILayout.TextArea(version.versionNum, HotReloadWindowStyles.H1TitleStyle); + + //general info + if (version.generalInfo != null) { + EditorGUILayout.TextArea(version.generalInfo, HotReloadWindowStyles.H3TitleStyle); + } + + //features + if (version.features != null) { + EditorGUILayout.TextArea("Features:", HotReloadWindowStyles.H2TitleStyle); + tempTextString = ""; + foreach (var feature in version.features) { + tempTextString += "• " + feature + "\n"; + } + EditorGUILayout.TextArea(tempTextString, HotReloadWindowStyles.ChangelogPointerStyle); + } + + //improvements + if (version.improvements != null) { + EditorGUILayout.TextArea("Improvements:", HotReloadWindowStyles.H2TitleStyle); + tempTextString = ""; + foreach (var improvement in version.improvements) { + tempTextString += "• " + improvement + "\n"; + } + EditorGUILayout.TextArea(tempTextString, HotReloadWindowStyles.ChangelogPointerStyle); + } + + //fixes + if (version.fixes != null) { + EditorGUILayout.TextArea("Fixes:", HotReloadWindowStyles.H2TitleStyle); + tempTextString = ""; + foreach (var fix in version.fixes) { + tempTextString += "• " + fix + "\n"; + } + EditorGUILayout.TextArea(tempTextString, HotReloadWindowStyles.ChangelogPointerStyle); + } + + //date + DateTime date; + if (DateTime.TryParseExact(version.date, "dd/MM/yyyy", null, DateTimeStyles.None, out date)) { + var relativeDate = GetRelativeDate(date); + GUILayout.TextArea(relativeDate, HotReloadWindowStyles.H3TitleStyle); + } + } + + void RenderChangelog() { + FetchChangelog().Forget(); + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + HotReloadPrefs.ShowChangeLog = EditorGUILayout.Foldout(HotReloadPrefs.ShowChangeLog, "Changelog", true, HotReloadWindowStyles.FoldoutStyle); + if (!HotReloadPrefs.ShowChangeLog) { + return; + } + // changelog versions + var maxChangeLogs = 5; + var index = 0; + foreach (var version in currentState.changelog) { + index++; + if (index > maxChangeLogs) { + break; + } + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.ChangelogSectionInnerBox)) { + using (new EditorGUILayout.VerticalScope()) { + RenderVersion(version); + } + } + } + // see more button + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.ChangelogSectionInnerBox)) { + seeMore.OnGUI(); + } + } + } + } + + private Vector2 _aboutTabScrollPos; + + HotReloadAboutTabState currentState; + public override void OnGUI() { + // HotReloadAboutTabState ensures rendering is consistent between Layout and Repaint calls + // Without it errors like this happen: + // ArgumentException: Getting control 2's position in a group with only 2 controls when doing repaint + // See thread for more context: https://answers.unity.com/questions/17718/argumentexception-getting-control-2s-position-in-a.html + if (Event.current.type == EventType.Layout) { + currentState = new HotReloadAboutTabState( + logsFodlerExists: Directory.Exists(logsPath), + changelog: _changelog, + loginRequired: EditorCodePatcher.LoginNotRequired, + hasTrialLicense: _window.RunTab.TrialLicense, + hasPayedLicense: _window.RunTab.HasPayedLicense + ); + } + using (var scope = new EditorGUILayout.ScrollViewScope(_aboutTabScrollPos, GUI.skin.horizontalScrollbar, GUI.skin.verticalScrollbar, GUILayout.MaxHeight(Math.Max(HotReloadWindowStyles.windowScreenHeight, 800)), GUILayout.MaxWidth(Math.Max(HotReloadWindowStyles.windowScreenWidth, 800)))) { + _aboutTabScrollPos.x = scope.scrollPosition.x; + _aboutTabScrollPos.y = scope.scrollPosition.y; + + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.DynamicSectionHelpTab)) { + using (new EditorGUILayout.VerticalScope()) { + GUILayout.Space(10); + RenderLogButtons(); + + EditorGUILayout.Space(); + EditorGUILayout.HelpBox($" Hot Reload version {PackageConst.Version}. ", MessageType.Info); + EditorGUILayout.Space(); + + RenderHelpButtons(); + + GUILayout.Space(15); + + try { + RenderChangelog(); + } catch { + // ignore + } + } + } + } + } + + void RenderHelpButtons() { + var labelRect = GUILayoutUtility.GetLastRect(); + using (new EditorGUILayout.HorizontalScope()) { + using (new EditorGUILayout.VerticalScope()) { + var buttonHeight = 19; + + var bigButtonRect = new Rect(labelRect.x + 3, labelRect.y + 5, labelRect.width - 6, buttonHeight); + OpenURLButton.RenderRaw(bigButtonRect, "Documentation", Constants.DocumentationURL, HotReloadWindowStyles.HelpTabButton); + + var firstLayerX = bigButtonRect.x; + var firstLayerY = bigButtonRect.y + buttonHeight + 3; + var firstLayerWidth = (int)((bigButtonRect.width / 2) - 3); + + var secondLayerX = firstLayerX + firstLayerWidth + 5; + var secondLayerY = firstLayerY + buttonHeight + 3; + var secondLayerWidth = bigButtonRect.width - firstLayerWidth - 5; + + using (new EditorGUILayout.HorizontalScope()) { + OpenURLButton.RenderRaw(new Rect { x = firstLayerX, y = firstLayerY, width = firstLayerWidth, height = buttonHeight }, contactButton.text, contactButton.url, HotReloadWindowStyles.HelpTabButton); + OpenURLButton.RenderRaw(new Rect { x = secondLayerX, y = firstLayerY, width = secondLayerWidth, height = buttonHeight }, "Unity Forum", Constants.ForumURL, HotReloadWindowStyles.HelpTabButton); + } + using (new EditorGUILayout.HorizontalScope()) { + OpenDialogueButton.RenderRaw(rect: new Rect { x = firstLayerX, y = secondLayerY, width = firstLayerWidth, height = buttonHeight }, text: reportIssueButton.text, url: reportIssueButton.url, title: reportIssueButton.title, message: reportIssueButton.message, ok: reportIssueButton.ok, cancel: reportIssueButton.cancel, style: HotReloadWindowStyles.HelpTabButton); + OpenURLButton.RenderRaw(new Rect { x = secondLayerX, y = secondLayerY, width = secondLayerWidth, height = buttonHeight }, discordButton.text, discordButton.url, HotReloadWindowStyles.HelpTabButton); + } + } + } + GUILayout.Space(80); + } + + void RenderLogButtons() { + if (currentState.logsFodlerExists) { + EditorGUILayout.Space(); + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Open Log File")) { + var mostRecentFile = LogsHelper.FindRecentLog(logsPath); + if (mostRecentFile == null) { + Log.Info("No logs found"); + } else { + try { + Process.Start($"\"{Path.Combine(logsPath, mostRecentFile)}\""); + } catch (Win32Exception e) { + if (e.Message.Contains("Application not found")) { + try { + Process.Start("notepad.exe", $"\"{Path.Combine(logsPath, mostRecentFile)}\""); + } catch { + // Fallback to opening folder with all logs + Process.Start($"\"{logsPath}\""); + Log.Info("Failed opening log file."); + } + } + } catch { + // Fallback to opening folder with all logs + Process.Start($"\"{logsPath}\""); + Log.Info("Failed opening log file."); + } + } + } + if (GUILayout.Button("Browse all logs")) { + Process.Start($"\"{logsPath}\""); + } + EditorGUILayout.EndHorizontal(); + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs.meta new file mode 100644 index 000000000..5e7723f3b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 7cf8e9ef1ab770249a4318e88e882a85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs new file mode 100644 index 000000000..63b5c43c3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs @@ -0,0 +1,49 @@ +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal class HotReloadOptionsSection { + /// + /// Opening options tab does not automatically create the settings asset file. + /// - The Options UI shows defaults if the object asset doesn't exist. + /// - When a build starts, we also ensure the asset file exists. + /// + public void DrawGUI(SerializedObject so) { + so.Update(); // must update in-case asset was modified externally + + foreach (var option in HotReloadSettingsTab.allOptions) { + GUILayout.Space(4f); + DrawOption(option, so); + } + + // commit any changes to the underlying ScriptableObject + if (so.hasModifiedProperties) { + so.ApplyModifiedProperties(); + // Ensure asset file exists on disk, because we initially create it in memory (to provide the default values) + // This does not save the asset, user has to do that by saving assets in Unity (e.g. press hotkey Ctrl + S) + var target = so.targetObject as HotReloadSettingsObject; + if (target == null) { + Log.Warning("Unexpected problem unable to save HotReloadSettingsObject"); + } else { + // when one of the project options changed then we ensure the asset file exists. + HotReloadSettingsEditor.EnsureSettingsCreated(target); + } + } + } + + static void DrawOption(IOption option, SerializedObject so) { + EditorGUILayout.BeginVertical(HotReloadWindowStyles.BoxStyle); + + var before = option.GetValue(so); + var after = EditorGUILayout.BeginToggleGroup(new GUIContent(" " + option.Summary), before); + if (after != before) { + option.SetValue(so, after); + } + + option.InnerOnGUI(so); + + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.EndVertical(); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs.meta new file mode 100644 index 000000000..71040330a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 24379a407eff8494eac0f7841b70e574 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs new file mode 100644 index 000000000..6ce934132 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs @@ -0,0 +1,1367 @@ +using System; +using System.Collections.Generic; +using System.IO; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.EditorDependencies; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; +using Color = UnityEngine.Color; +using Task = System.Threading.Tasks.Task; +#if UNITY_2019_4_OR_NEWER +using Unity.CodeEditor; +#endif + +namespace SingularityGroup.HotReload.Editor { + internal class ErrorData { + public string fileName; + public string error; + public TextAsset file; + public int lineNumber; + public string stacktrace; + public string linkString; + private static string[] supportedPaths = new[] { Path.GetFullPath("Assets"), Path.GetFullPath("Plugins") }; + + public static ErrorData GetErrorData(string errorString) { + // Get the relevant file name + string stackTrace = errorString; + string fileName = null; + try { + int csIndex = 0; + int attempt = 0; + do { + csIndex = errorString.IndexOf(".cs", csIndex + 1, StringComparison.Ordinal); + if (csIndex == -1) { + break; + } + int fileNameStartIndex = csIndex - 1; + for (; fileNameStartIndex >= 0; fileNameStartIndex--) { + if (!char.IsLetter(errorString[fileNameStartIndex])) { + if (errorString.Contains("error CS")) { + fileName = errorString.Substring(fileNameStartIndex + 1, + csIndex - fileNameStartIndex + ".cs".Length - 1); + } else { + fileName = errorString.Substring(fileNameStartIndex, + csIndex - fileNameStartIndex + ".cs".Length); + } + break; + } + } + } while (attempt++ < 100 && fileName == null); + } catch { + // ignore + } + fileName = fileName ?? "Tap to show stacktrace"; + + // Get the error + string error = (errorString.Contains("error CS") + ? "Compile error, " + : "Unsupported change detected, ") + "tap here to see more."; + int endOfError = errorString.IndexOf(". in ", StringComparison.Ordinal); + string specialChars = "\"'/\\"; + char[] characters = specialChars.ToCharArray(); + int specialChar = errorString.IndexOfAny(characters); + try { + if (errorString.Contains("error CS") ) { + error = errorString.Substring(errorString.IndexOf("error CS", StringComparison.Ordinal), errorString.Length - errorString.IndexOf("error CS", StringComparison.Ordinal)).Trim(); + using (StringReader reader = new StringReader(error)) { + string line; + while ((line = reader.ReadLine()) != null) { + error = line; + break; + } + } + } else if (errorString.StartsWith("errors:", StringComparison.Ordinal) && endOfError > 0) { + error = errorString.Substring("errors: ".Length, endOfError - "errors: ".Length).Trim(); + } else if (errorString.StartsWith("errors:", StringComparison.Ordinal) && specialChar > 0) { + error = errorString.Substring("errors: ".Length, specialChar - "errors: ".Length).Trim(); + } + } catch { + // ignore + } + + // Get relative path + TextAsset file = null; + foreach (var path in supportedPaths) { + int lastprojectIndex = 0; + int attempt = 0; + while (attempt++ < 100 && !file) { + lastprojectIndex = errorString.IndexOf(path, lastprojectIndex + 1, StringComparison.Ordinal); + if (lastprojectIndex == -1) { + break; + } + var fullCsIndex = errorString.IndexOf(".cs", lastprojectIndex, StringComparison.Ordinal); + var candidateAbsolutePath = errorString.Substring(lastprojectIndex, fullCsIndex - lastprojectIndex + ".cs".Length); + var candidateRelativePath = EditorCodePatcher.GetRelativePath(filespec: candidateAbsolutePath, folder: path); + file = AssetDatabase.LoadAssetAtPath(candidateRelativePath); + } + } + + // Get the line number + int lineNumber = 0; + try { + int lastIndex = 0; + int attempt = 0; + do { + lastIndex = errorString.IndexOf(fileName, lastIndex + 1, StringComparison.Ordinal); + if (lastIndex == -1) { + break; + } + var part = errorString.Substring(lastIndex + fileName.Length); + if (!part.StartsWith(errorString.Contains("error CS") ? "(" : ":", StringComparison.Ordinal) + || part.Length == 1 + || !char.IsDigit(part[1]) + ) { + continue; + } + int y = 1; + for (; y < part.Length; y++) { + if (!char.IsDigit(part[y])) { + break; + } + } + if (int.TryParse(part.Substring(1, errorString.Contains("error CS") ? y - 1 : y), out lineNumber)) { + break; + } + } while (attempt++ < 100); + } catch { + //ignore + } + + return new ErrorData() { + fileName = fileName, + error = error, + file = file, + lineNumber = lineNumber, + stacktrace = stackTrace, + linkString = lineNumber > 0 ? fileName + ":" + lineNumber : fileName + }; + } + + } + + internal struct HotReloadRunTabState { + public readonly bool spinnerActive; + public readonly string indicationIconPath; + public readonly bool requestingDownloadAndRun; + public readonly bool starting; + public readonly bool stopping; + public readonly bool running; + public readonly Tuple startupProgress; + public readonly string indicationStatusText; + public readonly LoginStatusResponse loginStatus; + public readonly bool downloadRequired; + public readonly bool downloadStarted; + public readonly bool requestingLoginInfo; + public readonly RedeemStage redeemStage; + public readonly int suggestionCount; + + public HotReloadRunTabState( + bool spinnerActive, + string indicationIconPath, + bool requestingDownloadAndRun, + bool starting, + bool stopping, + bool running, + Tuple startupProgress, + string indicationStatusText, + LoginStatusResponse loginStatus, + bool downloadRequired, + bool downloadStarted, + bool requestingLoginInfo, + RedeemStage redeemStage, + int suggestionCount + ) { + this.spinnerActive = spinnerActive; + this.indicationIconPath = indicationIconPath; + this.requestingDownloadAndRun = requestingDownloadAndRun; + this.starting = starting; + this.stopping = stopping; + this.running = running; + this.startupProgress = startupProgress; + this.indicationStatusText = indicationStatusText; + this.loginStatus = loginStatus; + this.downloadRequired = downloadRequired; + this.downloadStarted = downloadStarted; + this.requestingLoginInfo = requestingLoginInfo; + this.redeemStage = redeemStage; + this.suggestionCount = suggestionCount; + } + + public static HotReloadRunTabState Current => new HotReloadRunTabState( + spinnerActive: EditorIndicationState.SpinnerActive, + indicationIconPath: EditorIndicationState.IndicationIconPath, + requestingDownloadAndRun: EditorCodePatcher.RequestingDownloadAndRun, + starting: EditorCodePatcher.Starting, + stopping: EditorCodePatcher.Stopping, + running: EditorCodePatcher.Running, + startupProgress: EditorCodePatcher.StartupProgress, + indicationStatusText: EditorIndicationState.IndicationStatusText, + loginStatus: EditorCodePatcher.Status, + downloadRequired: EditorCodePatcher.DownloadRequired, + downloadStarted: EditorCodePatcher.DownloadStarted, + requestingLoginInfo: EditorCodePatcher.RequestingLoginInfo, + redeemStage: RedeemLicenseHelper.I.RedeemStage, + suggestionCount: HotReloadTimelineHelper.Suggestions.Count + ); + } + + internal struct LicenseErrorData { + public readonly string description; + public bool showBuyButton; + public string buyButtonText; + public readonly bool showLoginButton; + public readonly string loginButtonText; + public readonly bool showSupportButton; + public readonly string supportButtonText; + public readonly bool showManageLicenseButton; + public readonly string manageLicenseButtonText; + + public LicenseErrorData(string description, bool showManageLicenseButton = false, string manageLicenseButtonText = "", string loginButtonText = "", bool showSupportButton = false, string supportButtonText = "", bool showBuyButton = false, string buyButtonText = "", bool showLoginButton = false) { + this.description = description; + this.showManageLicenseButton = showManageLicenseButton; + this.manageLicenseButtonText = manageLicenseButtonText; + this.loginButtonText = loginButtonText; + this.showSupportButton = showSupportButton; + this.supportButtonText = supportButtonText; + this.showBuyButton = showBuyButton; + this.buyButtonText = buyButtonText; + this.showLoginButton = showLoginButton; + } + } + + internal class HotReloadRunTab : HotReloadTabBase { + private static string _pendingEmail; + private static string _pendingPassword; + private string _pendingPromoCode; + private bool _requestingActivatePromoCode; + + private static Tuple _activateInfoMessage; + + private HotReloadRunTabState currentState => _window.RunTabState; + // Has Indie or Pro license (even if not currenctly active) + public bool HasPayedLicense => currentState.loginStatus != null && (currentState.loginStatus.isIndieLicense || currentState.loginStatus.isBusinessLicense); + public bool TrialLicense => currentState.loginStatus != null && (currentState.loginStatus?.isTrial == true); + + private Vector2 _patchedMethodsScrollPos; + private Vector2 _runTabScrollPos; + + private string promoCodeError; + private MessageType promoCodeErrorType; + private bool promoCodeActivatedThisSession; + + public HotReloadRunTab(HotReloadWindow window) : base(window, "Run", "forward", "Run and monitor the current Hot Reload session.") { } + + public override void OnGUI() { + using(new EditorGUILayout.VerticalScope()) { + OnGUICore(); + } + } + + internal static bool ShouldRenderConsumption(HotReloadRunTabState currentState) => (currentState.running && !currentState.starting && !currentState.stopping && currentState.loginStatus?.isLicensed != true && currentState.loginStatus?.isFree != true && !EditorCodePatcher.LoginNotRequired) && !(currentState.loginStatus == null || currentState.loginStatus.isFree); + + void OnGUICore() { + using (var scope = new EditorGUILayout.ScrollViewScope(_runTabScrollPos, GUI.skin.horizontalScrollbar, GUI.skin.verticalScrollbar, GUILayout.MaxHeight(Math.Max(HotReloadWindowStyles.windowScreenHeight, 800)), GUILayout.MaxWidth(Math.Max(HotReloadWindowStyles.windowScreenWidth, 800)))) { + _runTabScrollPos.x = scope.scrollPosition.x; + _runTabScrollPos.y = scope.scrollPosition.y; + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.DynamiSection)) { + if (HotReloadWindowStyles.windowScreenWidth > Constants.UpgradeLicenseNoteHideWidth + && HotReloadWindowStyles.windowScreenHeight > Constants.UpgradeLicenseNoteHideHeight + ) { + RenderUpgradeLicenseNote(currentState, HotReloadWindowStyles.UpgradeLicenseButtonStyle); + } + + RenderIndicationPanel(); + + if (CanRenderBars(currentState)) { + RenderBars(currentState); + // clear red dot next time button shows + HotReloadState.ShowingRedDot = false; + } + } + } + + // At the end to not fuck up rendering https://answers.unity.com/questions/400454/argumentexception-getting-control-0s-position-in-a-1.html + var renderStart = !EditorCodePatcher.Running && !EditorCodePatcher.Starting && !currentState.requestingDownloadAndRun && currentState.redeemStage == RedeemStage.None; + var e = Event.current; + if (renderStart && e.type == EventType.KeyUp + && (e.keyCode == KeyCode.Return + || e.keyCode == KeyCode.KeypadEnter) + ) { + EditorCodePatcher.DownloadAndRun().Forget(); + } + } + + internal static void RenderUpgradeLicenseNote(HotReloadRunTabState currentState, GUIStyle style) { + var isIndie = RedeemLicenseHelper.I.RegistrationOutcome == RegistrationOutcome.Indie + || EditorCodePatcher.licenseType == UnityLicenseType.UnityPersonalPlus; + + if (RedeemLicenseHelper.I.RegistrationOutcome == RegistrationOutcome.Business + && currentState.loginStatus?.isBusinessLicense != true + && EditorCodePatcher.Running + && (PackageConst.IsAssetStoreBuild || HotReloadPrefs.RateAppShown) + ) { + // Warn asset store users they need to buy a business license + // Website users get reminded after using Hot Reload for 5+ days + RenderBusinessLicenseInfo(style); + } else if (isIndie + && HotReloadPrefs.RateAppShown + && !PackageConst.IsAssetStoreBuild + && EditorCodePatcher.Running + && currentState.loginStatus?.isBusinessLicense != true + && currentState.loginStatus?.isIndieLicense != true + ) { + // Reminder users they need to buy an indie license + RenderIndieLicenseInfo(style); + } + } + + internal static bool CanRenderBars(HotReloadRunTabState currentState) { + return HotReloadWindowStyles.windowScreenHeight > Constants.EventsListHideHeight + && HotReloadWindowStyles.windowScreenWidth > Constants.EventsListHideWidth + && !currentState.starting + && !currentState.stopping + && !currentState.requestingDownloadAndRun + ; + } + + static Texture2D GetFoldoutIcon(AlertEntry alertEntry) { + InvertibleIcon alertIcon = InvertibleIcon.FoldoutClosed; + if (HotReloadTimelineHelper.expandedEntries.Contains(alertEntry)) { + alertIcon = InvertibleIcon.FoldoutOpen; + } + return GUIHelper.GetInvertibleIcon(alertIcon); + } + + static void ToggleEntry(AlertEntry alertEntry) { + if (HotReloadTimelineHelper.expandedEntries.Contains(alertEntry)) { + HotReloadTimelineHelper.expandedEntries.Remove(alertEntry); + } else { + HotReloadTimelineHelper.expandedEntries.Add(alertEntry); + } + } + + static void RenderEntries(TimelineType timelineType) { + List alertEntries; + + alertEntries = timelineType == TimelineType.Suggestions ? HotReloadTimelineHelper.Suggestions : HotReloadTimelineHelper.EventsTimeline; + + bool skipChildren = false; + for (int i = 0; i < alertEntries.Count; i++) { + var alertEntry = alertEntries[i]; + if (i > HotReloadTimelineHelper.maxVisibleEntries && alertEntry.entryType != EntryType.Child) { + break; + } + if (timelineType != TimelineType.Suggestions) { + if (alertEntry.entryType != EntryType.Child + && !enabledFilters.Contains(alertEntry.alertType) + ) { + skipChildren = true; + continue; + } else if (alertEntry.entryType == EntryType.Child && skipChildren) { + continue; + } else { + skipChildren = false; + } + } + + EntryType entryType = alertEntry.entryType; + + string title = $" {alertEntry.title}{(!string.IsNullOrEmpty(alertEntry.shortDescription) ? $": {alertEntry.shortDescription}": "")}"; + Texture2D icon = null; + GUIStyle style; + if (entryType != EntryType.Child) { + icon = GUIHelper.GetLocalIcon(HotReloadTimelineHelper.alertIconString[alertEntry.iconType]); + } + if (entryType == EntryType.Child) { + style = HotReloadWindowStyles.ChildBarStyle; + } else if (entryType == EntryType.Foldout) { + style = HotReloadWindowStyles.FoldoutBarStyle; + } else { + style = HotReloadWindowStyles.BarStyle; + } + + Rect startRect; + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.Space(0); + Rect spaceRect = GUILayoutUtility.GetLastRect(); + // entry header foldout arrow + if (entryType == EntryType.Foldout) { + GUI.Label(new Rect(spaceRect.x + 3, spaceRect.y, 20, 20), new GUIContent(GetFoldoutIcon(alertEntry))); + } else if (entryType == EntryType.Child) { + GUI.Label(new Rect(spaceRect.x + 26, spaceRect.y + 2, 20, 20), new GUIContent(GetFoldoutIcon(alertEntry))); + } + // a workaround to limit the width of the label + GUILayout.Label(new GUIContent(""), style); + startRect = GUILayoutUtility.GetLastRect(); + GUI.Label(startRect, new GUIContent(title, icon), style); + } + + bool clickableDescription = alertEntry.title == "Unsupported change" || alertEntry.title == "Compile error" || alertEntry.title == "Failed applying patch to method"; + + if (HotReloadTimelineHelper.expandedEntries.Contains(alertEntry) || alertEntry.alertType == AlertType.CompileError) { + using (new EditorGUILayout.VerticalScope()) { + using (new EditorGUILayout.HorizontalScope()) { + using (new EditorGUILayout.VerticalScope(entryType == EntryType.Child ? HotReloadWindowStyles.ChildEntryBoxStyle : HotReloadWindowStyles.EntryBoxStyle)) { + if (alertEntry.alertType == AlertType.Suggestion) { + GUILayout.Label(alertEntry.description, HotReloadWindowStyles.LabelStyle); + } else if (!clickableDescription) { + string text = alertEntry.description; + GUILayout.TextArea(text, HotReloadWindowStyles.StacktraceTextAreaStyle); + } + if (alertEntry.actionData != null) { + alertEntry.actionData.Invoke(); + } + GUILayout.Space(5f); + } + } + } + } + + // remove button + if (timelineType == TimelineType.Suggestions && alertEntry.hasExitButton) { + var isClick = GUI.Button(new Rect(startRect.x + startRect.width - 20, startRect.y + 2, 20, 20), new GUIContent(GUIHelper.GetInvertibleIcon(InvertibleIcon.Close)), HotReloadWindowStyles.RemoveIconStyle); + if (isClick) { + HotReloadTimelineHelper.EventsTimeline.Remove(alertEntry); + var kind = HotReloadSuggestionsHelper.FindSuggestionKind(alertEntry); + if (kind != null) { + HotReloadSuggestionsHelper.SetSuggestionInactive((HotReloadSuggestionKind)kind); + } + _instantRepaint = true; + } + } + + // Extend background to whole entry + var endRect = GUILayoutUtility.GetLastRect(); + if (GUI.Button(new Rect(startRect) { height = endRect.y - startRect.y + endRect.height}, new GUIContent(""), HotReloadWindowStyles.BarBackgroundStyle) && (entryType == EntryType.Child || entryType == EntryType.Foldout)) { + ToggleEntry(alertEntry); + } + + if (alertEntry.alertType != AlertType.Suggestion && HotReloadWindowStyles.windowScreenWidth > 400 && entryType != EntryType.Child) { + using (new EditorGUILayout.HorizontalScope()) { + GUI.Label(new Rect(startRect.x + startRect.width - 60, startRect.y, 80, 20), $"{alertEntry.timestamp.Hour:D2}:{alertEntry.timestamp.Minute:D2}:{alertEntry.timestamp.Second:D2}", HotReloadWindowStyles.TimestampStyle); + } + } + + GUILayout.Space(1f); + } + if (timelineType != TimelineType.Suggestions && HotReloadTimelineHelper.GetRunTabTimelineEventCount() > 40) { + GUILayout.Space(3f); + GUILayout.Label(Constants.Only40EntriesShown, HotReloadWindowStyles.EmptyListText); + } + } + + private static List _enabledFilters; + private static List enabledFilters { + get { + if (_enabledFilters == null) { + _enabledFilters = new List(); + } + + if (HotReloadPrefs.RunTabUnsupportedChangesFilter && !_enabledFilters.Contains(AlertType.UnsupportedChange)) + _enabledFilters.Add(AlertType.UnsupportedChange); + if (!HotReloadPrefs.RunTabUnsupportedChangesFilter && _enabledFilters.Contains(AlertType.UnsupportedChange)) + _enabledFilters.Remove(AlertType.UnsupportedChange); + + if (HotReloadPrefs.RunTabCompileErrorFilter && !_enabledFilters.Contains(AlertType.CompileError)) + _enabledFilters.Add(AlertType.CompileError); + if (!HotReloadPrefs.RunTabCompileErrorFilter && _enabledFilters.Contains(AlertType.CompileError)) + _enabledFilters.Remove(AlertType.CompileError); + + if (HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter && !_enabledFilters.Contains(AlertType.PartiallySupportedChange)) + _enabledFilters.Add(AlertType.PartiallySupportedChange); + if (!HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter && _enabledFilters.Contains(AlertType.PartiallySupportedChange)) + _enabledFilters.Remove(AlertType.PartiallySupportedChange); + + if (HotReloadPrefs.RunTabAppliedPatchesFilter && !_enabledFilters.Contains(AlertType.AppliedChange)) + _enabledFilters.Add(AlertType.AppliedChange); + if (!HotReloadPrefs.RunTabAppliedPatchesFilter && _enabledFilters.Contains(AlertType.AppliedChange)) + _enabledFilters.Remove(AlertType.AppliedChange); + + return _enabledFilters; + } + } + + private Vector2 suggestionsScroll; + static GUILayoutOption[] timelineButtonOptions = new[] { GUILayout.Height(27), GUILayout.Width(100) }; + + internal static void RenderBars(HotReloadRunTabState currentState) { + if (currentState.suggestionCount > 0) { + GUILayout.Space(5f); + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.Section)) { + using (new EditorGUILayout.VerticalScope()) { + HotReloadPrefs.RunTabEventsSuggestionsFoldout = EditorGUILayout.Foldout(HotReloadPrefs.RunTabEventsSuggestionsFoldout, "", true, HotReloadWindowStyles.CustomFoldoutStyle); + GUILayout.Space(-23); + if (GUILayout.Button($"Suggestions ({currentState.suggestionCount.ToString()})", HotReloadWindowStyles.ClickableLabelBoldStyle, GUILayout.Height(27))) { + HotReloadPrefs.RunTabEventsSuggestionsFoldout = !HotReloadPrefs.RunTabEventsSuggestionsFoldout; + } + if (HotReloadPrefs.RunTabEventsSuggestionsFoldout) { + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.Scroll)) { + RenderEntries(TimelineType.Suggestions); + } + } + } + } + } + GUILayout.Space(5f); + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.Section)) { + using (new EditorGUILayout.VerticalScope()) { + HotReloadPrefs.RunTabEventsTimelineFoldout = EditorGUILayout.Foldout(HotReloadPrefs.RunTabEventsTimelineFoldout, "", true, HotReloadWindowStyles.CustomFoldoutStyle); + GUILayout.Space(-23); + if (GUILayout.Button("Timeline", HotReloadWindowStyles.ClickableLabelBoldStyle, timelineButtonOptions)) { + HotReloadPrefs.RunTabEventsTimelineFoldout = !HotReloadPrefs.RunTabEventsTimelineFoldout; + } + if (HotReloadPrefs.RunTabEventsTimelineFoldout) { + GUILayout.Space(-10); + var noteShown = HotReloadTimelineHelper.GetRunTabTimelineEventCount() == 0 || !currentState.running; + using (new EditorGUILayout.HorizontalScope()) { + if (noteShown) { + GUILayout.Space(2f); + using (new EditorGUILayout.VerticalScope()) { + GUILayout.Space(2f); + string text; + if (currentState.redeemStage != RedeemStage.None) { + text = "Complete registration before using Hot Reload"; + } else if (!currentState.running) { + text = "Use the Start button to activate Hot Reload"; + } else if (enabledFilters.Count < 4 && HotReloadTimelineHelper.EventsTimeline.Count != 0) { + text = "Enable filters to see events"; + } else { + text = "Make code changes to see events"; + } + GUILayout.Label(text, HotReloadWindowStyles.EmptyListText); + } + GUILayout.FlexibleSpace(); + } else { + GUILayout.FlexibleSpace(); + if (HotReloadTimelineHelper.EventsTimeline.Count > 0 && GUILayout.Button("Clear")) { + HotReloadTimelineHelper.ClearEntries(); + if (HotReloadWindow.Current) { + HotReloadWindow.Current.Repaint(); + } + } + GUILayout.Space(3); + } + } + if (!noteShown) { + GUILayout.Space(2f); + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.Scroll)) { + RenderEntries(TimelineType.Timeline); + } + } + } + } + } + } + + internal static void RenderConsumption(LoginStatusResponse loginStatus) { + if (loginStatus == null) { + return; + } + EditorGUILayout.Space(); + + EditorGUILayout.LabelField($"Hot Reload Limited", HotReloadWindowStyles.H3CenteredTitleStyle); + EditorGUILayout.Space(); + if (loginStatus.consumptionsUnavailableReason == ConsumptionsUnavailableReason.NetworkUnreachable) { + EditorGUILayout.HelpBox("Something went wrong. Please check your internet connection.", MessageType.Warning); + } else if (loginStatus.consumptionsUnavailableReason == ConsumptionsUnavailableReason.UnrecoverableError) { + EditorGUILayout.HelpBox("Something went wrong. Please contact support if the issue persists.", MessageType.Error); + } else if (loginStatus.freeSessionFinished) { + var now = DateTime.UtcNow; + var sessionRefreshesAt = (now.AddDays(1).Date - now).Add(TimeSpan.FromMinutes(5)); + var sessionRefreshString = $"Next Session: {(sessionRefreshesAt.Hours > 0 ? $"{sessionRefreshesAt.Hours}h " : "")}{sessionRefreshesAt.Minutes}min"; + HotReloadGUIHelper.HelpBox(sessionRefreshString, MessageType.Warning, fontSize: 11); + } else if (loginStatus.freeSessionRunning && loginStatus.freeSessionEndTime != null) { + var sessionEndsAt = loginStatus.freeSessionEndTime.Value - DateTime.Now; + var sessionString = $"Daily Session: {(sessionEndsAt.Hours > 0 ? $"{sessionEndsAt.Hours}h " : "")}{sessionEndsAt.Minutes}min Left"; + HotReloadGUIHelper.HelpBox(sessionString, MessageType.Info, fontSize: 11); + } else if (loginStatus.freeSessionEndTime == null) { + HotReloadGUIHelper.HelpBox("Daily Session: Make code changes to start", MessageType.Info, fontSize: 11); + } + } + + static bool _repaint; + static bool _instantRepaint; + static DateTime _lastRepaint; + private EditorIndicationState.IndicationStatus _lastStatus; + public override void Update() { + if (EditorIndicationState.SpinnerActive) { + _repaint = true; + } + if (EditorCodePatcher.DownloadRequired) { + _repaint = true; + } + if (EditorIndicationState.IndicationIconPath == Spinner.SpinnerIconPath) { + _repaint = true; + } + try { + // workaround: hovering over non-buttons doesn't repain by default + if (EditorWindow.mouseOverWindow == HotReloadWindow.Current) { + _repaint = true; + } + if (EditorWindow.mouseOverWindow + && EditorWindow.mouseOverWindow?.GetType() == typeof(PopupWindow) + && HotReloadEventPopup.I.open + ) { + _repaint = true; + } + } catch (NullReferenceException) { + // Unity randomly throws nullrefs when EditorWindow.mouseOverWindow gets accessed + } + if (_repaint && DateTime.UtcNow - _lastRepaint > TimeSpan.FromMilliseconds(33)) { + _repaint = false; + _instantRepaint = true; + } + // repaint on status change + var status = EditorIndicationState.CurrentIndicationStatus; + if (_lastStatus != status) { + _lastStatus = status; + _instantRepaint = true; + } + if (_instantRepaint) { + Repaint(); + HotReloadEventPopup.I.Repaint(); + _instantRepaint = false; + _repaint = false; + _lastRepaint = DateTime.UtcNow; + } + } + + public static void RepaintInstant() { + _instantRepaint = true; + } + + private void RenderRecompileButton() { + string recompileText = HotReloadWindowStyles.windowScreenWidth > Constants.RecompileButtonTextHideWidth ? " Recompile" : ""; + var recompileButton = new GUIContent(recompileText, GUIHelper.GetInvertibleIcon(InvertibleIcon.Recompile)); + if (!GUILayout.Button(recompileButton, HotReloadWindowStyles.RecompileButton)) { + return; + } + RecompileWithChecks(); + } + + public static void RecompileWithChecks() { + var firstDialoguePass = HotReloadPrefs.RecompileDialogueShown + || EditorUtility.DisplayDialog( + title: "Hot Reload auto-applies changes", + message: "Using the Recompile button is only necessary when Hot Reload fails to apply your changes. \n\nDo you wish to proceed?", + ok: "Recompile", + cancel: "Not now"); + HotReloadPrefs.RecompileDialogueShown = true; + if (!firstDialoguePass) { + return; + } + var secondDialoguePass = !Application.isPlaying + || EditorUtility.DisplayDialog( + title: "Stop Play Mode and Recompile?", + message: "Using the Recompile button will stop Play Mode.\n\nDo you wish to proceed?", + ok: "Stop and Recompile", + cancel: "Cancel"); + if (!secondDialoguePass) { + return; + } + Recompile(); + } + + public static bool recompiling; + public static void Recompile() { + recompiling = true; + EditorApplication.isPlaying = false; + + CompileMethodDetourer.Reset(); + AssetDatabase.Refresh(); + // This forces the recompilation if no changes were made. + // This is better UX because otherwise the recompile button is unresponsive + // which can be extra annoying if there are compile error entries in the list + if (!EditorApplication.isCompiling) { + CompilationPipeline.RequestScriptCompilation(); + } + } + + private void RenderIndicationButtons() { + if (currentState.requestingDownloadAndRun || currentState.starting || currentState.stopping || currentState.redeemStage != RedeemStage.None) { + return; + } + + if (!currentState.running && (currentState.startupProgress?.Item1 ?? 0) == 0) { + string startText = HotReloadWindowStyles.windowScreenWidth > Constants.StartButtonTextHideWidth ? " Start" : ""; + if (GUILayout.Button(new GUIContent(startText, GUIHelper.GetInvertibleIcon(InvertibleIcon.Start)), HotReloadWindowStyles.StartButton)) { + EditorCodePatcher.DownloadAndRun().Forget(); + } + } else if (currentState.running && !currentState.starting) { + if (HotReloadWindowStyles.windowScreenWidth > 150 && HotReloadTimelineHelper.CompileErrorsCount == 0) { + RenderRecompileButton(); + } + string stopText = HotReloadWindowStyles.windowScreenWidth > Constants.StartButtonTextHideWidth ? " Stop" : ""; + if (GUILayout.Button(new GUIContent(stopText, GUIHelper.GetInvertibleIcon(InvertibleIcon.Stop)), HotReloadWindowStyles.StopButton)) { + if (!EditorCodePatcher.StoppedServerRecently()) { + EditorCodePatcher.StopCodePatcher().Forget(); + } + } + } + } + + void RenderIndicationPanel() { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBox)) { + RenderIndication(); + if (HotReloadWindowStyles.windowScreenWidth > Constants.IndicationTextHideWidth) { + GUILayout.FlexibleSpace(); + } + RenderIndicationButtons(); + if (HotReloadWindowStyles.windowScreenWidth <= Constants.IndicationTextHideWidth) { + GUILayout.FlexibleSpace(); + } + } + if (currentState.requestingDownloadAndRun || currentState.starting) { + RenderProgressBar(); + } + if (HotReloadWindowStyles.windowScreenWidth > Constants.ConsumptionsHideWidth + && HotReloadWindowStyles.windowScreenHeight > Constants.ConsumptionsHideHeight + ) { + RenderLicenseInfo(currentState); + } + } + + internal static void RenderLicenseInfo(HotReloadRunTabState currentState) { + var showRedeem = currentState.redeemStage != RedeemStage.None; + var showConsumptions = ShouldRenderConsumption(currentState); + if (!showConsumptions && !showRedeem) { + return; + } + using (new EditorGUILayout.VerticalScope()) { + // space needed only for consumptions because of Stop/Start button's margin + if (showConsumptions) { + GUILayout.Space(6); + } + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.Section)) { + if (showRedeem) { + RedeemLicenseHelper.I.RenderStage(currentState); + } else { + RenderConsumption(currentState.loginStatus); + GUILayout.Space(10); + RenderLicenseInfo(currentState, currentState.loginStatus); + RenderLicenseButtons(currentState); + GUILayout.Space(10); + } + } + GUILayout.Space(6); + } + } + + private Spinner _spinner = new Spinner(85); + private void RenderIndication() { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.IndicationBox)) { + // icon box + if (HotReloadWindowStyles.windowScreenWidth <= Constants.IndicationTextHideWidth) { + GUILayout.FlexibleSpace(); + } + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.IndicationHelpBox)) { + var text = HotReloadWindowStyles.windowScreenWidth > Constants.IndicationTextHideWidth ? $" {currentState.indicationStatusText}" : ""; + if (currentState.indicationIconPath == Spinner.SpinnerIconPath) { + GUILayout.Label(new GUIContent(text, _spinner.GetIcon()), style: HotReloadWindowStyles.IndicationIcon); + } else if (currentState.indicationIconPath != null) { + var style = HotReloadWindowStyles.IndicationIcon; + if (HotReloadTimelineHelper.alertIconString.ContainsValue(currentState.indicationIconPath)) { + style = HotReloadWindowStyles.IndicationAlertIcon; + } + GUILayout.Label(new GUIContent(text, GUIHelper.GetLocalIcon(currentState.indicationIconPath)), style); + } + } + } + } + + static GUIStyle _openSettingsStyle; + static GUIStyle openSettingsStyle => _openSettingsStyle ?? (_openSettingsStyle = new GUIStyle(GUI.skin.button) { + fontStyle = FontStyle.Normal, + fixedHeight = 25, + }); + + static GUILayoutOption[] _bigButtonHeight; + public static GUILayoutOption[] bigButtonHeight => _bigButtonHeight ?? (_bigButtonHeight = new [] {GUILayout.Height(25)}); + + private static GUIContent indieLicenseContent; + private static GUIContent businessLicenseContent; + + internal static void RenderLicenseStatusInfo(HotReloadRunTabState currentState, LoginStatusResponse loginStatus, bool allowHide = true, bool verbose = false) { + string message = null; + MessageType messageType = default(MessageType); + Action customGUI = null; + GUIContent content = null; + if (loginStatus == null) { + // no info + } else if (loginStatus.lastLicenseError != null) { + messageType = !loginStatus.freeSessionFinished ? MessageType.Warning : MessageType.Error; + message = GetMessageFromError(currentState, loginStatus.lastLicenseError); + } else if (loginStatus.isTrial && !PackageConst.IsAssetStoreBuild) { + message = $"Using Trial license, valid until {loginStatus.licenseExpiresAt.ToShortDateString()}"; + messageType = MessageType.Info; + } else if (loginStatus.isIndieLicense) { + if (verbose) { + message = " Indie license active"; + messageType = MessageType.Info; + customGUI = () => { + if (loginStatus.licenseExpiresAt.Date != DateTime.MaxValue.Date) { + EditorGUILayout.LabelField($"License will renew on {loginStatus.licenseExpiresAt.ToShortDateString()}."); + EditorGUILayout.Space(); + } + using (new GUILayout.HorizontalScope()) { + HotReloadAboutTab.manageLicenseButton.OnGUI(); + HotReloadAboutTab.manageAccountButton.OnGUI(); + } + EditorGUILayout.Space(); + }; + if (indieLicenseContent == null) { + indieLicenseContent = new GUIContent(message, EditorGUIUtility.FindTexture("TestPassed")); + } + content = indieLicenseContent; + } + } else if (loginStatus.isBusinessLicense) { + if (verbose) { + message = " Business license active"; + messageType = MessageType.Info; + if (businessLicenseContent == null) { + businessLicenseContent = new GUIContent(message, EditorGUIUtility.FindTexture("TestPassed")); + } + content = businessLicenseContent; + customGUI = () => { + using (new GUILayout.HorizontalScope()) { + HotReloadAboutTab.manageLicenseButton.OnGUI(); + HotReloadAboutTab.manageAccountButton.OnGUI(); + } + EditorGUILayout.Space(); + }; + } + } + + if (messageType != MessageType.Info && HotReloadPrefs.ErrorHidden && allowHide) { + return; + } + if (message != null) { + if (messageType != MessageType.Info) { + using(new EditorGUILayout.HorizontalScope()) { + EditorGUILayout.HelpBox(message, messageType); + var style = HotReloadWindowStyles.HideButtonStyle; + if (Event.current.type == EventType.Repaint) { + style.fixedHeight = GUILayoutUtility.GetLastRect().height; + } + if (allowHide) { + if (GUILayout.Button("Hide", style)) { + HotReloadPrefs.ErrorHidden = true; + } + } + } + } else if (content != null) { + EditorGUILayout.LabelField(content); + EditorGUILayout.Space(); + } else { + EditorGUILayout.LabelField(message); + EditorGUILayout.Space(); + } + customGUI?.Invoke(); + } + } + + const string assetStoreProInfo = "Unity Pro/Enterprise users from company with your number of employees require a Business license. Please upgrade your license on our website."; + internal static void RenderBusinessLicenseInfo(GUIStyle style) { + GUILayout.Space(8); + using (new EditorGUILayout.HorizontalScope()) { + EditorGUILayout.HelpBox(assetStoreProInfo, MessageType.Info); + if (Event.current.type == EventType.Repaint) { + style.fixedHeight = GUILayoutUtility.GetLastRect().height; + } + if (GUILayout.Button("Upgrade", style)) { + Application.OpenURL(Constants.ProductPurchaseBusinessURL); + } + } + } + + internal static void RenderIndieLicenseInfo(GUIStyle style) { + string message; + if (EditorCodePatcher.licenseType == UnityLicenseType.UnityPersonalPlus) { + message = "Unity Plus users require an Indie license. Please upgrade your license on our website."; + } else if (EditorCodePatcher.licenseType == UnityLicenseType.UnityPro) { + message = "Unity Pro/Enterprise users from company with your number of employees require an Indie license. Please upgrade your license on our website."; + } else { + return; + } + GUILayout.Space(8); + using (new EditorGUILayout.HorizontalScope()) { + EditorGUILayout.HelpBox(message, MessageType.Info); + if (Event.current.type == EventType.Repaint) { + style.fixedHeight = GUILayoutUtility.GetLastRect().height; + } + if (GUILayout.Button("Upgrade", style)) { + Application.OpenURL(Constants.ProductPurchaseURL); + } + } + } + + const string GetLicense = "Get License"; + const string ContactSupport = "Contact Support"; + const string UpgradeLicense = "Upgrade License"; + const string ManageLicense = "Manage License"; + internal static Dictionary _licenseErrorData; + internal static Dictionary LicenseErrorData => _licenseErrorData ?? (_licenseErrorData = new Dictionary { + { "DeviceNotLicensedException", new LicenseErrorData(description: "Another device is using your license. Please reach out to customer support for assistance.", showSupportButton: true, supportButtonText: ContactSupport) }, + { "DeviceBlacklistedException", new LicenseErrorData(description: "You device has been blacklisted.") }, + { "DateHeaderInvalidException", new LicenseErrorData(description: $"Your license is not working because your computer's clock is incorrect. Please set the clock to the correct time to restore your license.") }, + { "DateTimeCheatingException", new LicenseErrorData(description: $"Your license is not working because your computer's clock is incorrect. Please set the clock to the correct time to restore your license.") }, + { "LicenseActivationException", new LicenseErrorData(description: "An error has occured while activating your license. Please contact customer support for assistance.", showSupportButton: true, supportButtonText: ContactSupport) }, + { "LicenseDeletedException", new LicenseErrorData(description: $"Your license has been deleted. Please contact customer support for assistance.", showBuyButton: true, buyButtonText: GetLicense, showSupportButton: true, supportButtonText: ContactSupport) }, + { "LicenseDisabledException", new LicenseErrorData(description: $"Your license has been disabled. Please contact customer support for assistance.", showBuyButton: true, buyButtonText: GetLicense, showSupportButton: true, supportButtonText: ContactSupport) }, + { "LicenseExpiredException", new LicenseErrorData(description: $"Your license has expired. Please renew your license subscription using the 'Upgrade License' button below and login with your email/password to activate your license.", showBuyButton: true, buyButtonText: UpgradeLicense, showManageLicenseButton: true, manageLicenseButtonText: ManageLicense) }, + { "LicenseInactiveException", new LicenseErrorData(description: $"Your license is currenty inactive. Please login with your email/password to activate your license.") }, + { "LocalLicenseException", new LicenseErrorData(description: $"Your license file was damaged or corrupted. Please login with your email/password to refresh your license file.") }, + // Note: obsolete + { "MissingParametersException", new LicenseErrorData(description: "An account already exists for this device. Please login with your existing email/password.", showBuyButton: true, buyButtonText: GetLicense) }, + { "NetworkException", new LicenseErrorData(description: "There is an issue connecting to our servers. Please check your internet connection or contact customer support if the issue persists.", showSupportButton: true, supportButtonText: ContactSupport) }, + { "TrialLicenseExpiredException", new LicenseErrorData(description: $"Your trial has expired. Activate a license with unlimited usage or continue using the Free version. View available plans on our website.", showBuyButton: true, buyButtonText: UpgradeLicense) }, + { "InvalidCredentialException", new LicenseErrorData(description: "Incorrect email/password. You can find your initial password in the sign-up email.") }, + // Note: activating free trial with email is not supported anymore. This error shouldn't happen which is why we should rather user the fallback + // { "LicenseNotFoundException", new LicenseErrorData(description: "The account you're trying to access doesn't seem to exist yet. Please enter your email address to create a new account and receive a trial license.", showLoginButton: true, loginButtonText: CreateAccount) }, + { "LicenseIncompatibleException", new LicenseErrorData(description: "Please upgrade your license to continue using hotreload with Unity Pro.", showManageLicenseButton: true, manageLicenseButtonText: ManageLicense) }, + }); + internal static LicenseErrorData defaultLicenseErrorData = new LicenseErrorData(description: "We apologize, an error happened while verifying your license. Please reach out to customer support for assistance.", showSupportButton: true, supportButtonText: ContactSupport); + + internal static string GetMessageFromError(HotReloadRunTabState currentState, string error) { + if (PackageConst.IsAssetStoreBuild && error == "TrialLicenseExpiredException") { + return assetStoreProInfo; + } + return GetLicenseErrorDataOrDefault(currentState, error).description; + } + + internal static LicenseErrorData GetLicenseErrorDataOrDefault(HotReloadRunTabState currentState, string error) { + if (currentState.loginStatus?.isFree == true) { + return default(LicenseErrorData); + } + if (currentState.loginStatus == null || string.IsNullOrEmpty(error) && (!currentState.loginStatus.isLicensed || currentState.loginStatus.isTrial)) { + return new LicenseErrorData(null, showBuyButton: true, buyButtonText: GetLicense); + } + if (string.IsNullOrEmpty(error)) { + return default(LicenseErrorData); + } + if (!LicenseErrorData.ContainsKey(error)) { + return defaultLicenseErrorData; + } + return LicenseErrorData[error]; + } + + internal static void RenderBuyLicenseButton(string buyLicenseButton) { + OpenURLButton.Render(buyLicenseButton, Constants.ProductPurchaseURL); + } + + static void RenderLicenseActionButtons(HotReloadRunTabState currentState) { + var errInfo = GetLicenseErrorDataOrDefault(currentState, currentState.loginStatus?.lastLicenseError); + if (errInfo.showBuyButton || errInfo.showManageLicenseButton) { + using(new EditorGUILayout.HorizontalScope()) { + if (errInfo.showBuyButton) { + RenderBuyLicenseButton(errInfo.buyButtonText); + } + if (errInfo.showManageLicenseButton && !HotReloadPrefs.ErrorHidden) { + OpenURLButton.Render(errInfo.manageLicenseButtonText, Constants.ManageLicenseURL); + } + } + } + if (errInfo.showLoginButton && GUILayout.Button(errInfo.loginButtonText, openSettingsStyle)) { + // show license section + HotReloadWindow.Current.SelectTab(typeof(HotReloadSettingsTab)); + HotReloadWindow.Current.SettingsTab.FocusLicenseFoldout(); + } + if (errInfo.showSupportButton && !HotReloadPrefs.ErrorHidden) { + OpenURLButton.Render(errInfo.supportButtonText, Constants.ContactURL); + } + if (currentState.loginStatus?.lastLicenseError != null) { + HotReloadAboutTab.reportIssueButton.OnGUI(); + } + } + + internal static void RenderLicenseInfo(HotReloadRunTabState currentState, LoginStatusResponse loginStatus, bool verbose = false, bool allowHide = true, string overrideActionButton = null, bool showConsumptions = false) { + HotReloadPrefs.ShowLogin = EditorGUILayout.Foldout(HotReloadPrefs.ShowLogin, "Hot Reload License", true, HotReloadWindowStyles.FoldoutStyle); + if (HotReloadPrefs.ShowLogin) { + EditorGUILayout.Space(); + if ((loginStatus?.isLicensed != true && showConsumptions) && !(loginStatus == null || loginStatus.isFree)) { + RenderConsumption(loginStatus); + } + RenderLicenseStatusInfo(currentState, loginStatus: loginStatus, allowHide: allowHide, verbose: verbose); + + RenderLicenseInnerPanel(currentState, overrideActionButton: overrideActionButton); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + } + } + + internal void RenderPromoCodes() { + HotReloadPrefs.ShowPromoCodes = EditorGUILayout.Foldout(HotReloadPrefs.ShowPromoCodes, "Promo Codes", true, HotReloadWindowStyles.FoldoutStyle); + if (!HotReloadPrefs.ShowPromoCodes) { + return; + } + if (promoCodeActivatedThisSession) { + EditorGUILayout.HelpBox($"Your promo code has been successfully activated. Free trial has been extended by 3 months.", MessageType.Info); + } else { + if (promoCodeError != null && promoCodeErrorType != MessageType.None) { + EditorGUILayout.HelpBox(promoCodeError, promoCodeErrorType); + } + EditorGUILayout.LabelField("Promo code"); + _pendingPromoCode = EditorGUILayout.TextField(_pendingPromoCode); + EditorGUILayout.Space(); + + using (new EditorGUI.DisabledScope(_requestingActivatePromoCode)) { + if (GUILayout.Button("Activate promo code", HotReloadRunTab.bigButtonHeight)) { + RequestActivatePromoCode().Forget(); + } + } + } + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + } + + private async Task RequestActivatePromoCode() { + _requestingActivatePromoCode = true; + try { + var resp = await RequestHelper.RequestActivatePromoCode(_pendingPromoCode); + if (resp != null && resp.error == null) { + promoCodeActivatedThisSession = true; + } else { + var requestError = resp?.error ?? "Network error"; + var errorType = ToErrorType(requestError); + promoCodeError = ToPrettyErrorMessage(errorType); + promoCodeErrorType = ToMessageType(errorType); + } + } finally { + _requestingActivatePromoCode = false; + } + } + + PromoCodeErrorType ToErrorType(string error) { + switch (error) { + case "Input is missing": return PromoCodeErrorType.MISSING_INPUT; + case "only POST is supported": return PromoCodeErrorType.INVALID_HTTP_METHOD; + case "body is not a valid json": return PromoCodeErrorType.BODY_INVALID; + case "Promo code is not found": return PromoCodeErrorType.PROMO_CODE_NOT_FOUND; + case "Promo code already claimed": return PromoCodeErrorType.PROMO_CODE_CLAIMED; + case "Promo code expired": return PromoCodeErrorType.PROMO_CODE_EXPIRED; + case "License not found": return PromoCodeErrorType.LICENSE_NOT_FOUND; + case "License is not a trial": return PromoCodeErrorType.LICENSE_NOT_TRIAL; + case "License already extended": return PromoCodeErrorType.LICENSE_ALREADY_EXTENDED; + case "conditionalCheckFailed": return PromoCodeErrorType.CONDITIONAL_CHECK_FAILED; + } + if (error.Contains("Updating License Failed with error")) { + return PromoCodeErrorType.UPDATING_LICENSE_FAILED; + } else if (error.Contains("Unknown exception")) { + return PromoCodeErrorType.UNKNOWN_EXCEPTION; + } else if (error.Contains("Unsupported path")) { + return PromoCodeErrorType.UNSUPPORTED_PATH; + } + return PromoCodeErrorType.NONE; + } + + string ToPrettyErrorMessage(PromoCodeErrorType errorType) { + var defaultMsg = "We apologize, an error happened while activating your promo code. Please reach out to customer support for assistance."; + switch (errorType) { + case PromoCodeErrorType.MISSING_INPUT: + case PromoCodeErrorType.INVALID_HTTP_METHOD: + case PromoCodeErrorType.BODY_INVALID: + case PromoCodeErrorType.UNKNOWN_EXCEPTION: + case PromoCodeErrorType.UNSUPPORTED_PATH: + case PromoCodeErrorType.LICENSE_NOT_FOUND: + case PromoCodeErrorType.UPDATING_LICENSE_FAILED: + case PromoCodeErrorType.LICENSE_NOT_TRIAL: + return defaultMsg; + case PromoCodeErrorType.PROMO_CODE_NOT_FOUND: return "Your promo code is invalid. Please ensure that you have entered the correct promo code."; + case PromoCodeErrorType.PROMO_CODE_CLAIMED: return "Your promo code has already been used."; + case PromoCodeErrorType.PROMO_CODE_EXPIRED: return "Your promo code has expired."; + case PromoCodeErrorType.LICENSE_ALREADY_EXTENDED: return "Your license has already been activated with a promo code. Only one promo code activation per license is allowed."; + case PromoCodeErrorType.CONDITIONAL_CHECK_FAILED: return "We encountered an error while activating your promo code. Please try again. If the issue persists, please contact our customer support team for assistance."; + case PromoCodeErrorType.NONE: return "There is an issue connecting to our servers. Please check your internet connection or contact customer support if the issue persists."; + default: return defaultMsg; + } + } + + MessageType ToMessageType(PromoCodeErrorType errorType) { + switch (errorType) { + case PromoCodeErrorType.MISSING_INPUT: return MessageType.Error; + case PromoCodeErrorType.INVALID_HTTP_METHOD: return MessageType.Error; + case PromoCodeErrorType.BODY_INVALID: return MessageType.Error; + case PromoCodeErrorType.PROMO_CODE_NOT_FOUND: return MessageType.Warning; + case PromoCodeErrorType.PROMO_CODE_CLAIMED: return MessageType.Warning; + case PromoCodeErrorType.PROMO_CODE_EXPIRED: return MessageType.Warning; + case PromoCodeErrorType.LICENSE_NOT_FOUND: return MessageType.Error; + case PromoCodeErrorType.LICENSE_NOT_TRIAL: return MessageType.Error; + case PromoCodeErrorType.LICENSE_ALREADY_EXTENDED: return MessageType.Warning; + case PromoCodeErrorType.UPDATING_LICENSE_FAILED: return MessageType.Error; + case PromoCodeErrorType.CONDITIONAL_CHECK_FAILED: return MessageType.Error; + case PromoCodeErrorType.UNKNOWN_EXCEPTION: return MessageType.Error; + case PromoCodeErrorType.UNSUPPORTED_PATH: return MessageType.Error; + case PromoCodeErrorType.NONE: return MessageType.Error; + default: return MessageType.Error; + } + } + + public static void RenderLicenseButtons(HotReloadRunTabState currentState) { + RenderLicenseActionButtons(currentState); + } + + internal static void RenderLicenseInnerPanel(HotReloadRunTabState currentState, string overrideActionButton = null, bool renderLogout = true) { + EditorGUILayout.LabelField("Email"); + GUI.SetNextControlName("email"); + _pendingEmail = EditorGUILayout.TextField(string.IsNullOrEmpty(_pendingEmail) ? HotReloadPrefs.LicenseEmail : _pendingEmail); + _pendingEmail = _pendingEmail.Trim(); + + EditorGUILayout.LabelField("Password"); + GUI.SetNextControlName("password"); + _pendingPassword = EditorGUILayout.PasswordField(string.IsNullOrEmpty(_pendingPassword) ? HotReloadPrefs.LicensePassword : _pendingPassword); + + RenderSwitchAuthMode(); + + var e = Event.current; + using(new EditorGUI.DisabledScope(currentState.requestingLoginInfo)) { + var btnLabel = overrideActionButton; + if (String.IsNullOrEmpty(overrideActionButton)) { + btnLabel = "Login"; + } + using (new EditorGUILayout.HorizontalScope()) { + var focusedControl = GUI.GetNameOfFocusedControl(); + if (GUILayout.Button(btnLabel, bigButtonHeight) + || (focusedControl == "email" + || focusedControl == "password") + && e.type == EventType.KeyUp + && (e.keyCode == KeyCode.Return + || e.keyCode == KeyCode.KeypadEnter) + ) { + var error = ValidateEmail(_pendingEmail); + if (!string.IsNullOrEmpty(error)) { + _activateInfoMessage = new Tuple(error, MessageType.Warning); + } else if (string.IsNullOrEmpty(_pendingPassword)) { + _activateInfoMessage = new Tuple("Please enter your password.", MessageType.Warning); + } else { + HotReloadWindow.Current.SelectTab(typeof(HotReloadRunTab)); + + _activateInfoMessage = null; + if (RedeemLicenseHelper.I.RedeemStage == RedeemStage.Login) { + RedeemLicenseHelper.I.FinishRegistration(RegistrationOutcome.Indie); + } + if (!EditorCodePatcher.RequestingDownloadAndRun && !EditorCodePatcher.Running) { + LoginOnDownloadAndRun(new LoginData(email: _pendingEmail, password: _pendingPassword)).Forget(); + } else { + EditorCodePatcher.RequestLogin(_pendingEmail, _pendingPassword).Forget(); + } + } + } + if (renderLogout) { + RenderLogout(currentState); + } + } + } + if (_activateInfoMessage != null && (e.type == EventType.Layout || e.type == EventType.Repaint)) { + EditorGUILayout.HelpBox(_activateInfoMessage.Item1, _activateInfoMessage.Item2); + } + } + + public static string ValidateEmail(string email) { + if (string.IsNullOrEmpty(email)) { + return "Please enter your email address."; + } else if (!EditorWindowHelper.IsValidEmailAddress(email)) { + return "Please enter a valid email address."; + } else if (email.Contains("+")) { + return "Mail extensions (in a form of 'username+suffix@example.com') are not supported yet. Please provide your original email address (such as 'username@example.com' without '+suffix' part) as we're working on resolving this issue."; + } + return null; + } + + public static void RenderLogout(HotReloadRunTabState currentState) { + if (currentState.loginStatus?.isLicensed != true) { + return; + } + if (GUILayout.Button("Logout", bigButtonHeight)) { + HotReloadWindow.Current.SelectTab(typeof(HotReloadRunTab)); + if (!EditorCodePatcher.RequestingDownloadAndRun && !EditorCodePatcher.Running) { + LogoutOnDownloadAndRun().Forget(); + } else { + RequestLogout().Forget(); + } + } + } + + async static Task LoginOnDownloadAndRun(LoginData loginData = null) { + var ok = await EditorCodePatcher.DownloadAndRun(loginData); + if (ok && loginData != null) { + HotReloadPrefs.ErrorHidden = false; + HotReloadPrefs.LicenseEmail = loginData.email; + HotReloadPrefs.LicensePassword = loginData.password; + } + } + + async static Task LogoutOnDownloadAndRun() { + var ok = await EditorCodePatcher.DownloadAndRun(); + if (!ok) { + return; + } + await RequestLogout(); + } + + private async static Task RequestLogout() { + int i = 0; + while (!EditorCodePatcher.Running && i < 100) { + await Task.Delay(100); + i++; + } + var resp = await RequestHelper.RequestLogout(); + if (!EditorCodePatcher.RequestingLoginInfo && resp != null) { + EditorCodePatcher.HandleStatus(resp); + } + } + + private static void RenderSwitchAuthMode() { + var color = EditorGUIUtility.isProSkin ? new Color32(0x3F, 0x9F, 0xFF, 0xFF) : new Color32(0x0F, 0x52, 0xD7, 0xFF); + if (HotReloadGUIHelper.LinkLabel("Forgot password?", 12, FontStyle.Normal, TextAnchor.MiddleLeft, color)) { + if (EditorUtility.DisplayDialog("Recover password", "Use company code 'naughtycult' and the email you signed up with in order to recover your account.", "Open in browser", "Cancel")) { + Application.OpenURL(Constants.ForgotPasswordURL); + } + } + } + + Texture2D _greenTextureLight; + Texture2D _greenTextureDark; + Texture2D GreenTexture => EditorGUIUtility.isProSkin + ? _greenTextureDark ? _greenTextureDark : (_greenTextureDark = MakeTexture(0.5f)) + : _greenTextureLight ? _greenTextureLight : (_greenTextureLight = MakeTexture(0.85f)); + + private void RenderProgressBar() { + if (currentState.downloadRequired && !currentState.downloadStarted) { + return; + } + + using(var scope = new EditorGUILayout.VerticalScope(HotReloadWindowStyles.MiddleCenterStyle)) { + float progress; + var bg = HotReloadWindowStyles.ProgressBarBarStyle.normal.background; + try { + HotReloadWindowStyles.ProgressBarBarStyle.normal.background = GreenTexture; + var barRect = scope.rect; + + barRect.height = 25; + if (currentState.downloadRequired) { + barRect.width = barRect.width - 65; + using (new EditorGUILayout.HorizontalScope()) { + progress = EditorCodePatcher.DownloadProgress; + EditorGUI.ProgressBar(barRect, Mathf.Clamp(progress, 0f, 1f), ""); + if (GUI.Button(new Rect(barRect) { x = barRect.x + barRect.width + 5, height = barRect.height, width = 60 }, new GUIContent(" Info", GUIHelper.GetLocalIcon("alert_info")))) { + Application.OpenURL(Constants.AdditionalContentURL); + } + } + } else { + progress = EditorCodePatcher.Stopping ? 1 : Mathf.Clamp(EditorCodePatcher.StartupProgress?.Item1 ?? 0f, 0f, 1f); + EditorGUI.ProgressBar(barRect, progress, ""); + } + GUILayout.Space(barRect.height); + } finally { + HotReloadWindowStyles.ProgressBarBarStyle.normal.background = bg; + } + } + } + + private Texture2D MakeTexture(float maxHue) { + var width = 11; + var height = 11; + Color[] pix = new Color[width * height]; + for (int y = 0; y < height; y++) { + var middle = Math.Ceiling(height / (double)2); + var maxGreen = maxHue; + var yCoord = y + 1; + var green = maxGreen - Math.Abs(yCoord - middle) * 0.02; + for (int x = 0; x < width; x++) { + pix[y * width + x] = new Color(0.1f, (float)green, 0.1f, 1.0f); + } + } + var result = new Texture2D(width, height); + result.SetPixels(pix); + result.Apply(); + return result; + } + + + /* + [MenuItem("codepatcher/restart")] + public static void TestRestart() { + CodePatcherCLI.Restart(Application.dataPath, false); + } + */ + + } + + internal static class HotReloadGUIHelper { + public static bool LinkLabel(string labelText, int fontSize, FontStyle fontStyle, TextAnchor alignment, Color? color = null) { + var stl = EditorStyles.label; + + // copy + var origSize = stl.fontSize; + var origStyle = stl.fontStyle; + var origAnchor = stl.alignment; + var origColor = stl.normal.textColor; + + // temporarily modify the built-in style + stl.fontSize = fontSize; + stl.fontStyle = fontStyle; + stl.alignment = alignment; + stl.normal.textColor = color ?? origColor; + stl.active.textColor = color ?? origColor; + stl.focused.textColor = color ?? origColor; + stl.hover.textColor = color ?? origColor; + + try { + return GUILayout.Button(labelText, stl); + } finally{ + // set the editor style (stl) back to normal + stl.fontSize = origSize; + stl.fontStyle = origStyle; + stl.alignment = origAnchor; + stl.normal.textColor = origColor; + stl.active.textColor = origColor; + stl.focused.textColor = origColor; + stl.hover.textColor = origColor; + } + } + + public static void HelpBox(string message, MessageType type, int fontSize) { + var _fontSize = EditorStyles.helpBox.fontSize; + try { + EditorStyles.helpBox.fontSize = fontSize; + EditorGUILayout.HelpBox(message, type); + } finally { + EditorStyles.helpBox.fontSize = _fontSize; + } + } + } + + internal enum PromoCodeErrorType { + NONE, + MISSING_INPUT, + INVALID_HTTP_METHOD, + BODY_INVALID, + PROMO_CODE_NOT_FOUND, + PROMO_CODE_CLAIMED, + PROMO_CODE_EXPIRED, + LICENSE_NOT_FOUND, + LICENSE_NOT_TRIAL, + LICENSE_ALREADY_EXTENDED, + UPDATING_LICENSE_FAILED, + CONDITIONAL_CHECK_FAILED, + UNKNOWN_EXCEPTION, + UNSUPPORTED_PATH, + } + + internal class LoginData { + public readonly string email; + public readonly string password; + + public LoginData(string email, string password) { + this.email = email; + this.password = password; + } + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs.meta new file mode 100644 index 000000000..051b5e6b3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 38d0877009d34a9458f7d169d7f1b6a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs new file mode 100644 index 000000000..0675d9139 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs @@ -0,0 +1,697 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using UnityEditor; +using UnityEngine; +using EditorGUI = UnityEditor.EditorGUI; + +namespace SingularityGroup.HotReload.Editor { + internal struct HotReloadSettingsTabState { + public readonly bool running; + public readonly bool trialLicense; + public readonly LoginStatusResponse loginStatus; + public readonly bool isServerHealthy; + public readonly bool registrationRequired; + + public HotReloadSettingsTabState( + bool running, + bool trialLicense, + LoginStatusResponse loginStatus, + bool isServerHealthy, + bool registrationRequired + ) { + this.running = running; + this.trialLicense = trialLicense; + this.loginStatus = loginStatus; + this.isServerHealthy = isServerHealthy; + this.registrationRequired = registrationRequired; + } + } + + internal class HotReloadSettingsTab : HotReloadTabBase { + private readonly HotReloadOptionsSection optionsSection; + + // cached because changing built target triggers C# domain reload + // Also I suspect selectedBuildTargetGroup has chance to freeze Unity for several seconds (unconfirmed). + private readonly Lazy currentBuildTarget = new Lazy( + () => BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget)); + + private readonly Lazy isCurrentBuildTargetSupported = new Lazy(() => { + var target = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget); + return HotReloadBuildHelper.IsMonoSupported(target); + }); + + // Resources.Load uses cache, so it's safe to call it every frame. + // Retrying Load every time fixes an issue where you import the package and constructor runs, but resources aren't loadable yet. + private Texture iconCheck => Resources.Load("icon_check_circle"); + private Texture iconWarning => Resources.Load("icon_warning_circle"); + + [SuppressMessage("ReSharper", "Unity.UnknownResource")] // Rider doesn't check packages + public HotReloadSettingsTab(HotReloadWindow window) : base(window, + "Settings", + "_Popup", + "Make changes to a build running on-device.") { + optionsSection = new HotReloadOptionsSection(); + } + + private GUIStyle headlineStyle; + private GUIStyle paddedStyle; + + private Vector2 _settingsTabScrollPos; + + HotReloadSettingsTabState currentState; + public override void OnGUI() { + // HotReloadAboutTabState ensures rendering is consistent between Layout and Repaint calls + // Without it errors like this happen: + // ArgumentException: Getting control 2's position in a group with only 2 controls when doing repaint + // See thread for more context: https://answers.unity.com/questions/17718/argumentexception-getting-control-2s-position-in-a.html + if (Event.current.type == EventType.Layout) { + currentState = new HotReloadSettingsTabState( + running: EditorCodePatcher.Running, + trialLicense: EditorCodePatcher.Status != null && (EditorCodePatcher.Status?.isTrial == true), + loginStatus: EditorCodePatcher.Status, + isServerHealthy: ServerHealthCheck.I.IsServerHealthy, + registrationRequired: RedeemLicenseHelper.I.RegistrationRequired + ); + } + using (var scope = new EditorGUILayout.ScrollViewScope(_settingsTabScrollPos, GUI.skin.horizontalScrollbar, GUI.skin.verticalScrollbar, GUILayout.MaxHeight(Math.Max(HotReloadWindowStyles.windowScreenHeight, 800)), GUILayout.MaxWidth(Math.Max(HotReloadWindowStyles.windowScreenWidth, 800)))) { + _settingsTabScrollPos.x = scope.scrollPosition.x; + _settingsTabScrollPos.y = scope.scrollPosition.y; + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.DynamicSectionHelpTab)) { + GUILayout.Space(10); + if (!EditorCodePatcher.LoginNotRequired + && !currentState.registrationRequired + // Delay showing login in settings to not confuse users that they need to login to use Free trial + && (HotReloadPrefs.RateAppShown + || PackageConst.IsAssetStoreBuild) + ) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionOuterBoxCompact)) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + RenderLicenseInfoSection(); + } + } + } + } + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionOuterBoxCompact)) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + HotReloadPrefs.ShowConfiguration = EditorGUILayout.Foldout(HotReloadPrefs.ShowConfiguration, "Configuration", true, HotReloadWindowStyles.FoldoutStyle); + if (HotReloadPrefs.ShowConfiguration) { + EditorGUILayout.Space(); + RenderUnityAutoRefresh(); + RenderAssetRefresh(); + if (HotReloadPrefs.AllAssetChanges) { + using (new EditorGUILayout.VerticalScope(paddedStyle ?? (paddedStyle = new GUIStyle { padding = new RectOffset(20, 0, 0, 0) }))) { + RenderIncludeShaderChanges(); + } + + EditorGUILayout.Space(); + } + using (new EditorGUI.DisabledScope(!EditorCodePatcher.autoRecompileUnsupportedChangesSupported)) { + RenderAutoRecompileUnsupportedChanges(); + if (HotReloadPrefs.AutoRecompileUnsupportedChanges && EditorCodePatcher.autoRecompileUnsupportedChangesSupported) { + using (new EditorGUILayout.VerticalScope(paddedStyle ?? (paddedStyle = new GUIStyle { padding = new RectOffset(20, 0, 0, 0) }))) { + RenderAutoRecompileUnsupportedChangesImmediately(); + RenderAutoRecompileUnsupportedChangesOnExitPlayMode(); + RenderAutoRecompileUnsupportedChangesInPlayMode(); + RenderAutoRecompilePartiallyUnsupportedChanges(); + } + } + EditorGUILayout.Space(); + } + RenderConsoleWindow(); + RenderAutostart(); + + if (EditorWindowHelper.supportsNotifications) { + RenderShowNotifications(); + using (new EditorGUILayout.VerticalScope(paddedStyle ?? (paddedStyle = new GUIStyle { padding = new RectOffset(20, 0, 0, 0) }))) { + RenderShowPatchingNotifications(); + RenderShowCompilingUnsupportedNotifications(); + } + + EditorGUILayout.Space(); + } + EditorGUILayout.Space(); + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.FlexibleSpace(); + HotReloadWindow.RenderShowOnStartup(); + } + } + } + } + } + + if (!EditorCodePatcher.LoginNotRequired && currentState.trialLicense && currentState.running) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionOuterBoxCompact)) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + RenderPromoCodeSection(); + } + } + } + } + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionOuterBoxCompact)) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + RenderOnDevice(); + } + } + } + } + } + } + + void RenderUnityAutoRefresh() { + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Allow to manage Unity's Auto Compile settings (recommended)"), HotReloadPrefs.AllowDisableUnityAutoRefresh); + if (newSettings != HotReloadPrefs.AllowDisableUnityAutoRefresh) { + HotReloadPrefs.AllowDisableUnityAutoRefresh = newSettings; + } + string toggleDescription; + if (HotReloadPrefs.AllowDisableUnityAutoRefresh) { + toggleDescription = "Hot Reload will manage Unity's Auto Refresh and Script Compilation settings when it's running. Previous settings will be restored when Hot Reload is stopped."; + } else { + toggleDescription = "Enable to allow Hot Reload to manage Unity's Auto Refresh and Script Compilation settings when it's running. If enabled, previous settings will be restored when Hot Reload is stopped."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(3f); + } + + void RenderAssetRefresh() { + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Asset refresh (recommended)"), HotReloadPrefs.AllAssetChanges); + if (newSettings != HotReloadPrefs.AllAssetChanges) { + HotReloadPrefs.AllAssetChanges = newSettings; + // restart when setting changes + if (ServerHealthCheck.I.IsServerHealthy) { + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When changing 'Asset refresh', the Hot Reload server must be restarted for this to take effect." + + "\nDo you want to restart it now?", + "Restart server", "Don't restart"); + if (restartServer) { + EditorCodePatcher.RestartCodePatcher().Forget(); + } + } + } + string toggleDescription; + if (HotReloadPrefs.AllAssetChanges) { + toggleDescription = "Hot Reload will refresh changed assets in the project."; + } else { + toggleDescription = "Enable to allow Hot Reload to refresh changed assets in the project. All asset types are supported including sprites, prefabs, shaders etc."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(3f); + } + + void RenderIncludeShaderChanges() { + HotReloadPrefs.IncludeShaderChanges = EditorGUILayout.BeginToggleGroup(new GUIContent("Refresh shaders"), HotReloadPrefs.IncludeShaderChanges); + string toggleDescription; + if (HotReloadPrefs.IncludeShaderChanges) { + toggleDescription = "Hot Reload will auto refresh shaders. Note that enabling this setting might impact performance."; + } else { + toggleDescription = "Enable to auto-refresh shaders. Note that enabling this setting might impact performance"; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderConsoleWindow() { + if (!HotReloadCli.CanOpenInBackground) { + return; + } + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Hide console window on start"), HotReloadPrefs.DisableConsoleWindow); + if (newSettings != HotReloadPrefs.DisableConsoleWindow) { + HotReloadPrefs.DisableConsoleWindow = newSettings; + // restart when setting changes + if (ServerHealthCheck.I.IsServerHealthy) { + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When changing 'Hide console window on start', the Hot Reload server must be restarted for this to take effect." + + "\nDo you want to restart it now?", + "Restart server", "Don't restart"); + if (restartServer) { + EditorCodePatcher.RestartCodePatcher().Forget(); + } + } + } + string toggleDescription; + if (HotReloadPrefs.DisableConsoleWindow) { + toggleDescription = "Hot Reload will start without creating a console window. Logs can be accessed through \"Help\" tab."; + } else { + toggleDescription = "Enable to start Hot Reload without creating a console window."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(3f); + } + + void RenderAutostart() { + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Autostart on Unity open"), HotReloadPrefs.LaunchOnEditorStart); + if (newSettings != HotReloadPrefs.LaunchOnEditorStart) { + HotReloadPrefs.LaunchOnEditorStart = newSettings; + } + string toggleDescription; + if (HotReloadPrefs.LaunchOnEditorStart) { + toggleDescription = "Hot Reload will be launched when Unity project opens."; + } else { + toggleDescription = "Enable to launch Hot Reload when Unity project opens."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(); + } + + void RenderShowNotifications() { + GUILayout.Label("Indications", HotReloadWindowStyles.NotificationsTitleStyle); + + string toggleDescription; + if (!EditorWindowHelper.supportsNotifications && !UnitySettingsHelper.I.playmodeTintSupported) { + toggleDescription = "Indications are not supported in the Unity version you use."; + } else { + toggleDescription = "Chosen indications are enabled:"; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + } + + void RenderShowPatchingNotifications() { + HotReloadPrefs.ShowPatchingNotifications = EditorGUILayout.BeginToggleGroup(new GUIContent("Patching Indication"), HotReloadPrefs.ShowPatchingNotifications); + string toggleDescription; + if (!EditorWindowHelper.supportsNotifications) { + toggleDescription = "Patching Notification is not supported in the Unity version you use."; + } else if (!HotReloadPrefs.ShowPatchingNotifications) { + toggleDescription = "Enable to show GameView and SceneView indications when Patching."; + } else { + toggleDescription = "Indications will be shown in GameView and SceneView when Patching."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderShowCompilingUnsupportedNotifications() { + HotReloadPrefs.ShowCompilingUnsupportedNotifications = EditorGUILayout.BeginToggleGroup(new GUIContent("Compiling Unsupported Changes Indication"), HotReloadPrefs.ShowCompilingUnsupportedNotifications); + string toggleDescription; + if (!EditorWindowHelper.supportsNotifications) { + toggleDescription = "Compiling Unsupported Changes Notification is not supported in the Unity version you use."; + } else if (!HotReloadPrefs.ShowCompilingUnsupportedNotifications) { + toggleDescription = "Enable to show GameView and SceneView indications when compiling unsupported changes."; + } else { + toggleDescription = "Indications will be shown in GameView and SceneView when compiling unsupported changes."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompileUnsupportedChanges() { + HotReloadPrefs.AutoRecompileUnsupportedChanges = EditorGUILayout.BeginToggleGroup(new GUIContent("Auto recompile unsupported changes (recommended)"), HotReloadPrefs.AutoRecompileUnsupportedChanges && EditorCodePatcher.autoRecompileUnsupportedChangesSupported); + string toggleDescription; + if (!EditorCodePatcher.autoRecompileUnsupportedChangesSupported) { + toggleDescription = "Auto recompiling unsupported changes is not supported in the Unity version you use."; + } else if (HotReloadPrefs.AutoRecompileUnsupportedChanges) { + toggleDescription = "Hot Reload will recompile when unsupported changes are detected."; + } else { + toggleDescription = "Enable to recompile when unsupported changes are detected."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompilePartiallyUnsupportedChanges() { + HotReloadPrefs.AutoRecompilePartiallyUnsupportedChanges = EditorGUILayout.BeginToggleGroup(new GUIContent("Include partially unsupported changes"), HotReloadPrefs.AutoRecompilePartiallyUnsupportedChanges); + string toggleDescription; + if (HotReloadPrefs.AutoRecompilePartiallyUnsupportedChanges) { + toggleDescription = "Hot Reload will recompile partially unsupported changes."; + } else { + toggleDescription = "Enable to recompile partially unsupported changes."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompileUnsupportedChangesImmediately() { + HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately = EditorGUILayout.BeginToggleGroup(new GUIContent("Recompile immediately"), HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately); + string toggleDescription; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately) { + toggleDescription = "Unsupported changes will be recompiled immediately."; + } else { + toggleDescription = "Unsupported changes will be recompiled when editor is focused. Enable to recompile immediately."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompileUnsupportedChangesInPlayMode() { + HotReloadPrefs.AutoRecompileUnsupportedChangesInPlayMode = EditorGUILayout.BeginToggleGroup(new GUIContent("Recompile in Play Mode"), HotReloadPrefs.AutoRecompileUnsupportedChangesInPlayMode); + string toggleDescription; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesInPlayMode) { + toggleDescription = "Hot Reload will exit Play Mode to recompile unsupported changes."; + } else { + toggleDescription = "Enable to auto exit Play Mode to recompile unsupported changes."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompileUnsupportedChangesOnExitPlayMode() { + HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode = EditorGUILayout.BeginToggleGroup(new GUIContent("Recompile on exit Play Mode"), HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode); + string toggleDescription; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode) { + toggleDescription = "Hot Reload will recompile unsupported changes when exiting Play Mode."; + } else { + toggleDescription = "Enable to recompile unsupported changes when exiting Play Mode."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderOnDevice() { + HotReloadPrefs.ShowOnDevice = EditorGUILayout.Foldout(HotReloadPrefs.ShowOnDevice, "On-Device", true, HotReloadWindowStyles.FoldoutStyle); + if (!HotReloadPrefs.ShowOnDevice) { + return; + } + // header with explainer image + { + if (headlineStyle == null) { + // start with textArea for the background and border colors + headlineStyle = new GUIStyle(GUI.skin.label) { + fontStyle = FontStyle.Bold, + alignment = TextAnchor.MiddleLeft + }; + headlineStyle.normal.textColor = HotReloadWindowStyles.H2TitleStyle.normal.textColor; + + // bg color + if (HotReloadWindowStyles.IsDarkMode) { + headlineStyle.normal.background = EditorTextures.DarkGray40; + } else { + headlineStyle.normal.background = EditorTextures.LightGray225; + } + // layout + headlineStyle.padding = new RectOffset(8, 8, 0, 0); + headlineStyle.margin = new RectOffset(6, 6, 6, 6); + } + GUILayout.Space(9f); // space between logo and headline + + GUILayout.Label("Make changes to a build running on-device", + headlineStyle, GUILayout.MinHeight(EditorGUIUtility.singleLineHeight * 1.4f)); + // image showing how Hot Reload works with a phone + // var bannerBox = GUILayoutUtility.GetRect(flowchart.width * 0.6f, flowchart.height * 0.6f); + // GUI.DrawTexture(bannerBox, flowchart, ScaleMode.ScaleToFit); + } + + GUILayout.Space(16f); + + //ButtonToOpenBuildSettings(); + + { + GUILayout.Label("Manual connect", HotReloadWindowStyles.H3TitleStyle); + EditorGUILayout.Space(); + + GUILayout.BeginHorizontal(); + + // indent all controls (this works with non-labels) + GUILayout.Space(16f); + GUILayout.BeginVertical(); + + string text; + var ip = IpHelper.GetIpAddressCached(); + if (string.IsNullOrEmpty(ip)) { + text = $"If auto-pair fails, find your local IP in OS settings, and use this format to connect: '{{ip}}:{RequestHelper.port}'"; + } else { + text = $"If auto-pair fails, use this IP and port to connect: {ip}:{RequestHelper.port}" + + "\nMake sure you are on the same LAN/WiFi network"; + } + GUILayout.Label(text, HotReloadWindowStyles.H3TitleWrapStyle); + + if (!currentState.isServerHealthy) { + DrawHorizontalCheck(ServerHealthCheck.I.IsServerHealthy, + "Hot Reload is running", + "Hot Reload is not running", + hasFix: false); + } + + if (!HotReloadPrefs.ExposeServerToLocalNetwork) { + var summary = $"Enable '{new ExposeServerOption().ShortSummary}'"; + DrawHorizontalCheck(HotReloadPrefs.ExposeServerToLocalNetwork, + summary, + summary); + } + + // explainer image that shows phone needs same wifi to auto connect ? + + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + } + + GUILayout.Space(16f); + + // loading again is smooth, pretty sure AssetDatabase.LoadAssetAtPath is caching -Troy + var settingsObject = HotReloadSettingsEditor.LoadSettingsOrDefault(); + var so = new SerializedObject(settingsObject); + + // if you build for Android now, will Hot Reload work? + { + + EditorGUILayout.BeginHorizontal(); + GUILayout.Label("Build Settings Checklist", HotReloadWindowStyles.H3TitleStyle); + EditorGUI.BeginDisabledGroup(isSupported); + // One-click to change each setting to the supported value + if (GUILayout.Button("Fix All", GUILayout.MaxWidth(90f))) { + FixAllUnsupportedSettings(so); + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.EndHorizontal(); + + + // NOTE: After user changed some build settings, window may not immediately repaint + // (e.g. toggle Development Build in Build Settings window) + // We could show a refresh button (to encourage the user to click the window which makes it repaint). + DrawSectionCheckBuildSupport(so); + } + + + GUILayout.Space(16f); + + // Settings checkboxes (Hot Reload options) + { + GUILayout.Label("Options", HotReloadWindowStyles.H3TitleStyle); + if (settingsObject) { + optionsSection.DrawGUI(so); + } + } + GUILayout.FlexibleSpace(); // needed otherwise vertical scrollbar is appearing for no reason (Unity 2021 glitch perhaps) + } + + private void RenderLicenseInfoSection() { + HotReloadRunTab.RenderLicenseInfo( + _window.RunTabState, + currentState.loginStatus, + verbose: true, + allowHide: false, + overrideActionButton: "Activate License", + showConsumptions: true + ); + } + + private void RenderPromoCodeSection() { + _window.RunTab.RenderPromoCodes(); + } + + public void FocusLicenseFoldout() { + HotReloadPrefs.ShowLogin = true; + } + + // note: changing scripting backend does not force Unity to recreate the GUI, so need to check it when drawing. + private ScriptingImplementation ScriptingBackend => HotReloadBuildHelper.GetCurrentScriptingBackend(); + private ManagedStrippingLevel StrippingLevel => HotReloadBuildHelper.GetCurrentStrippingLevel(); + public bool isSupported = true; + + /// + /// These options are drawn in the On-device tab + /// + // new on-device options should be added here + public static readonly IOption[] allOptions = new IOption[] { + new ExposeServerOption(), + IncludeInBuildOption.I, + new AllowAndroidAppToMakeHttpRequestsOption(), + }; + + /// + /// Change each setting to the value supported by Hot Reload + /// + private void FixAllUnsupportedSettings(SerializedObject so) { + if (!isCurrentBuildTargetSupported.Value) { + // try switch to Android platform + // (we also support Standalone but HotReload on mobile is a better selling point) + if (!TrySwitchToStandalone()) { + // skip changing other options (user won't readthe gray text) - user has to click Fix All again + return; + } + } + + foreach (var buildOption in allOptions) { + if (!buildOption.GetValue(so)) { + buildOption.SetValue(so, true); + } + } + so.ApplyModifiedProperties(); + var settingsObject = so.targetObject as HotReloadSettingsObject; + if (settingsObject) { + // when you click fix all, make sure to save the settings, otherwise ui does not update + HotReloadSettingsEditor.EnsureSettingsCreated(settingsObject); + } + + if (!EditorUserBuildSettings.development) { + EditorUserBuildSettings.development = true; + } + + HotReloadBuildHelper.SetCurrentScriptingBackend(ScriptingImplementation.Mono2x); + HotReloadBuildHelper.SetCurrentStrippingLevel(ManagedStrippingLevel.Disabled); + } + + public static bool TrySwitchToStandalone() { + BuildTarget buildTarget; + if (Application.platform == RuntimePlatform.LinuxEditor) { + buildTarget = BuildTarget.StandaloneLinux64; + } else if (Application.platform == RuntimePlatform.WindowsEditor) { + buildTarget = BuildTarget.StandaloneWindows64; + } else if (Application.platform == RuntimePlatform.OSXEditor) { + buildTarget = BuildTarget.StandaloneOSX; + } else { + return false; + } + var current = EditorUserBuildSettings.activeBuildTarget; + if (current == buildTarget) { + return true; + } + var confirmed = EditorUtility.DisplayDialog("Switch Build Target", + "Switching the build target can take a while depending on project size.", + $"Switch to Standalone", "Cancel"); + if (confirmed) { + EditorUserBuildSettings.SwitchActiveBuildTargetAsync(BuildTargetGroup.Standalone, buildTarget); + Log.Info($"Build target is switching to {buildTarget}."); + return true; + } else { + return false; + } + } + + /// + /// Section that user can check before making a Unity Player build. + /// + /// + /// + /// This section is for confirming your build will work with Hot Reload.
+ /// Options that can be changed after the build is made should be drawn elsewhere. + ///
+ public void DrawSectionCheckBuildSupport(SerializedObject so) { + isSupported = true; + var selectedPlatform = currentBuildTarget.Value; + DrawHorizontalCheck(isCurrentBuildTargetSupported.Value, + $"The {selectedPlatform.ToString()} platform is selected", + $"The current platform is {selectedPlatform.ToString()} which is not supported"); + + using (new EditorGUI.DisabledScope(!isCurrentBuildTargetSupported.Value)) { + foreach (var option in allOptions) { + DrawHorizontalCheck(option.GetValue(so), + $"Enable \"{option.ShortSummary}\"", + $"Enable \"{option.ShortSummary}\""); + } + + DrawHorizontalCheck(EditorUserBuildSettings.development, + "Development Build is enabled", + "Enable \"Development Build\""); + + DrawHorizontalCheck(ScriptingBackend == ScriptingImplementation.Mono2x, + $"Scripting Backend is set to Mono", + $"Set Scripting Backend to Mono"); + + DrawHorizontalCheck(StrippingLevel == ManagedStrippingLevel.Disabled, + $"Stripping Level = {StrippingLevel}", + $"Stripping Level = {StrippingLevel}", + suggestedSolutionText: "Code stripping needs to be disabled to ensure that all methods are available for patching." + ); + } + } + + /// + /// Draw a box with a tick or warning icon on the left, with text describing the tick or warning + /// + /// The condition to check. True to show a tick icon, False to show a warning. + /// Shown when condition is true + /// Shown when condition is false + /// Shown when is false + void DrawHorizontalCheck(bool condition, string okText, string notOkText = null, string suggestedSolutionText = null, bool hasFix = true) { + if (okText == null) { + throw new ArgumentNullException(nameof(okText)); + } + if (notOkText == null) { + notOkText = okText; + } + + // include some horizontal space around the icon + var boxWidth = GUILayout.Width(EditorGUIUtility.singleLineHeight * 1.31f); + var height = GUILayout.Height(EditorGUIUtility.singleLineHeight * 1.01f); + GUILayout.BeginHorizontal(HotReloadWindowStyles.BoxStyle, height, GUILayout.ExpandWidth(true)); + var style = HotReloadWindowStyles.NoPaddingMiddleLeftStyle; + var iconRect = GUILayoutUtility.GetRect( + Mathf.Round(EditorGUIUtility.singleLineHeight * 1.31f), + Mathf.Round(EditorGUIUtility.singleLineHeight * 1.01f), + style, boxWidth, height, GUILayout.ExpandWidth(false)); + // rounded so we can have pixel perfect black circle bg + iconRect.Set(Mathf.Round(iconRect.x), Mathf.Round(iconRect.y), Mathf.CeilToInt(iconRect.width), + Mathf.CeilToInt(iconRect.height)); + var text = condition ? okText : notOkText; + var icon = condition ? iconCheck : iconWarning; + if (GUI.enabled) { + DrawBlackCircle(iconRect); + // resource can be null when building player (Editor Resources not available) + if (icon) { + GUI.DrawTexture(iconRect, icon, ScaleMode.ScaleToFit); + } + } else { + // show something (instead of hiding) so that layout stays same size + DrawDisabledCircle(iconRect); + } + GUILayout.Space(4f); + GUILayout.Label(text, style, height); + + if (!condition && hasFix) { + isSupported = false; + } + + GUILayout.EndHorizontal(); + if (!condition && !String.IsNullOrEmpty(suggestedSolutionText)) { + // suggest to the user how they can resolve the issue + EditorGUI.indentLevel++; + GUILayout.Label(suggestedSolutionText, HotReloadWindowStyles.WrapStyle); + EditorGUI.indentLevel--; + } + } + + void DrawDisabledCircle(Rect rect) => DrawCircleIcon(rect, + Resources.Load("icon_circle_gray"), + Color.clear); // smaller circle draws less attention + + void DrawBlackCircle(Rect rect) => DrawCircleIcon(rect, + Resources.Load("icon_circle_black"), + new Color(0.14f, 0.14f, 0.14f)); // black is too dark in unity light theme + + void DrawCircleIcon(Rect rect, Texture circleIcon, Color borderColor) { + // Note: drawing texture from resources is pixelated on the edges, so it has some transperancy around the edges. + // While building for Android, Resources.Load returns null for our editor Resources. + if (circleIcon != null) { + GUI.DrawTexture(rect, circleIcon, ScaleMode.ScaleToFit); + } + + // Draw smooth circle border + const float borderWidth = 2f; + GUI.DrawTexture(rect, EditorTextures.White, ScaleMode.ScaleToFit, true, + 0f, + borderColor, + new Vector4(borderWidth, borderWidth, borderWidth, borderWidth), + Mathf.Min(rect.height, rect.width) / 2f); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs.meta new file mode 100644 index 000000000..c5f3cf430 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fff71bd159424bf2978e2e99eacba9b4 +timeCreated: 1674057842 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs new file mode 100644 index 000000000..4f16b2b3c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs @@ -0,0 +1,372 @@ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text.RegularExpressions; +using System.Threading; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.Editor.Semver; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.EditorSamples")] + +namespace SingularityGroup.HotReload.Editor { + class HotReloadWindow : EditorWindow { + public static HotReloadWindow Current { get; private set; } + + List tabs; + List Tabs => tabs ?? (tabs = new List { + RunTab, + SettingsTab, + AboutTab, + }); + int selectedTab; + + internal static Vector2 scrollPos; + + + HotReloadRunTab runTab; + internal HotReloadRunTab RunTab => runTab ?? (runTab = new HotReloadRunTab(this)); + HotReloadSettingsTab settingsTab; + internal HotReloadSettingsTab SettingsTab => settingsTab ?? (settingsTab = new HotReloadSettingsTab(this)); + HotReloadAboutTab aboutTab; + internal HotReloadAboutTab AboutTab => aboutTab ?? (aboutTab = new HotReloadAboutTab(this)); + + static ShowOnStartupEnum _showOnStartupOption; + + /// + /// This token is cancelled when the EditorWindow is disabled. + /// + /// + /// Use it for all tasks. + /// When token is cancelled, scripts are about to be recompiled and this will cause tasks to fail for weird reasons. + /// + public CancellationToken cancelToken; + CancellationTokenSource cancelTokenSource; + + static readonly PackageUpdateChecker packageUpdateChecker = new PackageUpdateChecker(); + + [MenuItem("Window/Hot Reload &#H")] + internal static void Open() { + // opening the window on CI systems was keeping Unity open indefinitely + if (EditorWindowHelper.IsHumanControllingUs()) { + if (Current) { + Current.Show(); + Current.Focus(); + } else { + Current = GetWindow(); + } + } + } + + void OnEnable() { + Current = this; + if (cancelTokenSource != null) { + cancelTokenSource.Cancel(); + } + // Set min size initially so that full UI is visible + if (!HotReloadPrefs.OpenedWindowAtLeastOnce) { + this.minSize = new Vector2(Constants.RecompileButtonTextHideWidth + 1, Constants.EventsListHideHeight + 70); + HotReloadPrefs.OpenedWindowAtLeastOnce = true; + } + cancelTokenSource = new CancellationTokenSource(); + cancelToken = cancelTokenSource.Token; + + this.titleContent = new GUIContent(" Hot Reload", GUIHelper.GetInvertibleIcon(InvertibleIcon.Logo)); + _showOnStartupOption = HotReloadPrefs.ShowOnStartup; + + packageUpdateChecker.StartCheckingForNewVersion(); + } + + void Update() { + foreach (var tab in Tabs) { + tab.Update(); + } + } + + void OnDisable() { + if (cancelTokenSource != null) { + cancelTokenSource.Cancel(); + cancelTokenSource = null; + } + + if (Current == this) { + Current = null; + } + } + + internal void SelectTab(Type tabType) { + selectedTab = Tabs.FindIndex(x => x.GetType() == tabType); + } + + public HotReloadRunTabState RunTabState { get; private set; } + void OnGUI() { + // TabState ensures rendering is consistent between Layout and Repaint calls + // Without it errors like this happen: + // ArgumentException: Getting control 2's position in a group with only 2 controls when doing repaint + // See thread for more context: https://answers.unity.com/questions/17718/argumentexception-getting-control-2s-position-in-a.html + if (Event.current.type == EventType.Layout) { + RunTabState = HotReloadRunTabState.Current; + } + using(var scope = new EditorGUILayout.ScrollViewScope(scrollPos, false, false)) { + scrollPos = scope.scrollPosition; + // RenderDebug(); + RenderTabs(); + } + GUILayout.FlexibleSpace(); // GUI below will be rendered on the bottom + if (HotReloadWindowStyles.windowScreenHeight > 90) + RenderBottomBar(); + } + + void RenderDebug() { + if (GUILayout.Button("RESET WINDOW")) { + OnDisable(); + + RequestHelper.RequestLogin("test", "test", 1).Forget(); + + HotReloadPrefs.LicenseEmail = null; + HotReloadPrefs.ExposeServerToLocalNetwork = true; + HotReloadPrefs.LicensePassword = null; + HotReloadPrefs.LoggedBurstHint = false; + HotReloadPrefs.DontShowPromptForDownload = false; + HotReloadPrefs.RateAppShown = false; + HotReloadPrefs.ActiveDays = string.Empty; + HotReloadPrefs.LaunchOnEditorStart = false; + HotReloadPrefs.ShowUnsupportedChanges = true; + HotReloadPrefs.RedeemLicenseEmail = null; + HotReloadPrefs.RedeemLicenseInvoice = null; + OnEnable(); + File.Delete(EditorCodePatcher.serverDownloader.GetExecutablePath(HotReloadCli.controller)); + InstallUtility.DebugClearInstallState(); + InstallUtility.CheckForNewInstall(); + EditorPrefs.DeleteKey(Attribution.LastLoginKey); + File.Delete(RedeemLicenseHelper.registerOutcomePath); + + CompileMethodDetourer.Reset(); + AssetDatabase.Refresh(); + } + } + + internal static void RenderLogo(int width = 243) { + var isDarkMode = HotReloadWindowStyles.IsDarkMode; + var tex = Resources.Load(isDarkMode ? "Logo_HotReload_DarkMode" : "Logo_HotReload_LightMode"); + //Can happen during player builds where Editor Resources are unavailable + if(tex == null) { + return; + } + var targetWidth = width; + var targetHeight = 44; + GUILayout.Space(4f); + // background padding top and bottom + float padding = 5f; + // reserve layout space for the texture + var backgroundRect = GUILayoutUtility.GetRect(targetWidth + padding, targetHeight + padding, HotReloadWindowStyles.LogoStyle); + // draw the texture into that reserved space. First the bg then the logo. + if (isDarkMode) { + GUI.DrawTexture(backgroundRect, EditorTextures.DarkGray17, ScaleMode.StretchToFill); + } else { + GUI.DrawTexture(backgroundRect, EditorTextures.LightGray238, ScaleMode.StretchToFill); + } + + var foregroundRect = backgroundRect; + foregroundRect.yMin += padding; + foregroundRect.yMax -= padding; + // during player build (EditorWindow still visible), Resources.Load returns null + if (tex) { + GUI.DrawTexture(foregroundRect, tex, ScaleMode.ScaleToFit); + } + } + + int? collapsedTab; + void RenderTabs() { + using(new EditorGUILayout.VerticalScope(HotReloadWindowStyles.BoxStyle)) { + if (HotReloadWindowStyles.windowScreenHeight > 210 && HotReloadWindowStyles.windowScreenWidth > 375) { + selectedTab = GUILayout.Toolbar( + selectedTab, + Tabs.Select(t => + new GUIContent(t.Title.StartsWith(" ", StringComparison.Ordinal) ? t.Title : " " + t.Title, + t.Icon, t.Tooltip)).ToArray(), + GUILayout.Height(22f) // required, otherwise largest icon height determines toolbar height + ); + if (collapsedTab != null) { + selectedTab = collapsedTab.Value; + collapsedTab = null; + } + } else { + if (collapsedTab == null) { + collapsedTab = selectedTab; + } + // When window is super small, we pretty much can only show run tab + SelectTab(typeof(HotReloadRunTab)); + } + + if (HotReloadWindowStyles.windowScreenHeight > 250 && HotReloadWindowStyles.windowScreenWidth > 275) { + RenderLogo(); + } + + Tabs[selectedTab].OnGUI(); + } + } + + void RenderBottomBar() { + SemVersion newVersion; + var updateAvailable = packageUpdateChecker.TryGetNewVersion(out newVersion); + + if (HotReloadWindowStyles.windowScreenWidth > Constants.RateAppHideWidth + && HotReloadWindowStyles.windowScreenHeight > Constants.RateAppHideHeight + ) { + RenderRateApp(); + } + + if (updateAvailable) { + RenderUpdateButton(newVersion); + } + + using(new EditorGUILayout.HorizontalScope("ProjectBrowserBottomBarBg", GUILayout.ExpandWidth(true), GUILayout.Height(25f))) { + RenderBottomBarCore(); + } + } + + static GUIStyle _renderAppBoxStyle; + static GUIStyle renderAppBoxStyle => _renderAppBoxStyle ?? (_renderAppBoxStyle = new GUIStyle(GUI.skin.box) { + padding = new RectOffset(10, 10, 0, 0) + }); + + static GUILayoutOption[] _nonExpandable; + public static GUILayoutOption[] NonExpandableLayout => _nonExpandable ?? (_nonExpandable = new [] {GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true)}); + + internal static void RenderRateApp() { + if (!ShouldShowRateApp()) { + return; + } + using (new EditorGUILayout.VerticalScope(renderAppBoxStyle)) { + using (new EditorGUILayout.HorizontalScope()) { + HotReloadGUIHelper.HelpBox("Are you enjoying using Hot Reload?", MessageType.Info, 11); + if (GUILayout.Button("Hide", NonExpandableLayout)) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.RateApp), new EditorExtraData { { "dismissed", true } }).Forget(); + HotReloadPrefs.RateAppShown = true; + } + } + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button("Yes")) { + var openedUrl = PackageConst.IsAssetStoreBuild && EditorUtility.DisplayDialog("Rate Hot Reload", "Thank you for using Hot Reload!\n\nPlease consider leaving a review on the Asset Store to support us.", "Open in browser", "Cancel"); + if (openedUrl) { + Application.OpenURL(Constants.UnityStoreRateAppURL); + } + HotReloadPrefs.RateAppShown = true; + var data = new EditorExtraData(); + if (PackageConst.IsAssetStoreBuild) { + data.Add("opened_url", openedUrl); + } + data.Add("enjoy_app", true); + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.RateApp), data).Forget(); + } + if (GUILayout.Button("No")) { + HotReloadPrefs.RateAppShown = true; + var data = new EditorExtraData(); + data.Add("enjoy_app", false); + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.RateApp), data).Forget(); + } + } + } + } + + internal static bool ShouldShowRateApp() { + if (HotReloadPrefs.RateAppShown) { + return false; + } + var activeDays = EditorCodePatcher.GetActiveDaysForRateApp(); + if (activeDays.Count < Constants.DaysToRateApp) { + return false; + } + return true; + } + + void RenderUpdateButton(SemVersion newVersion) { + if (GUILayout.Button($"Update To v{newVersion}", HotReloadWindowStyles.UpgradeButtonStyle)) { + packageUpdateChecker.UpdatePackageAsync(newVersion).Forget(CancellationToken.None); + } + } + + internal static void RenderShowOnStartup() { + var prevLabelWidth = EditorGUIUtility.labelWidth; + try { + EditorGUIUtility.labelWidth = 105f; + using (new GUILayout.VerticalScope()) { + using (new GUILayout.HorizontalScope()) { + GUILayout.Label("Show On Startup"); + Rect buttonRect = GUILayoutUtility.GetLastRect(); + if (EditorGUILayout.DropdownButton(new GUIContent(Regex.Replace(_showOnStartupOption.ToString(), "([a-z])([A-Z])", "$1 $2")), FocusType.Passive, GUILayout.Width(110f))) { + GenericMenu menu = new GenericMenu(); + foreach (ShowOnStartupEnum option in Enum.GetValues(typeof(ShowOnStartupEnum))) { + menu.AddItem(new GUIContent(Regex.Replace(option.ToString(), "([a-z])([A-Z])", "$1 $2")), false, () => { + if (_showOnStartupOption != option) { + _showOnStartupOption = option; + HotReloadPrefs.ShowOnStartup = _showOnStartupOption; + } + }); + } + menu.DropDown(new Rect(buttonRect.x, buttonRect.y, 100, 0)); + } + } + } + } finally { + EditorGUIUtility.labelWidth = prevLabelWidth; + } + } + + internal static readonly OpenURLButton autoRefreshTroubleshootingBtn = new OpenURLButton("Troubleshooting", Constants.TroubleshootingURL); + void RenderBottomBarCore() { + bool troubleshootingShown = EditorCodePatcher.Started && HotReloadWindowStyles.windowScreenWidth >= 400; + bool alertsShown = EditorCodePatcher.Started && HotReloadWindowStyles.windowScreenWidth > Constants.EventFiltersShownHideWidth; + using (new EditorGUILayout.VerticalScope()) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.FooterStyle)) { + if (!troubleshootingShown) { + GUILayout.FlexibleSpace(); + if (alertsShown) { + GUILayout.Space(-20); + } + } else { + GUILayout.Space(21); + } + GUILayout.Space(0); + var lastRect = GUILayoutUtility.GetLastRect(); + // show events button when scrolls are hidden + if (!HotReloadRunTab.CanRenderBars(RunTabState) && !RunTabState.starting) { + using (new EditorGUILayout.VerticalScope()) { + GUILayout.FlexibleSpace(); + var icon = HotReloadState.ShowingRedDot ? InvertibleIcon.EventsNew : InvertibleIcon.Events; + if (GUILayout.Button(new GUIContent("", GUIHelper.GetInvertibleIcon(icon)))) { + PopupWindow.Show(new Rect(lastRect.x, lastRect.y, 0, 0), HotReloadEventPopup.I); + } + GUILayout.FlexibleSpace(); + } + GUILayout.Space(3f); + } + if (alertsShown) { + using (new EditorGUILayout.VerticalScope()) { + GUILayout.FlexibleSpace(); + HotReloadTimelineHelper.RenderAlertFilters(); + GUILayout.FlexibleSpace(); + } + } + + GUILayout.FlexibleSpace(); + if (troubleshootingShown) { + using (new EditorGUILayout.VerticalScope()) { + GUILayout.FlexibleSpace(); + autoRefreshTroubleshootingBtn.OnGUI(); + GUILayout.FlexibleSpace(); + } + GUILayout.Space(21); + } + } + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs.meta new file mode 100644 index 000000000..8bd703d2e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: f62a84c0b148b0a4582bdd9f1a69e6d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs new file mode 100644 index 000000000..17f2f503e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs @@ -0,0 +1,7 @@ +namespace SingularityGroup.HotReload.Editor { + enum ShowOnStartupEnum { + Always, + OnNewVersion, + Never, + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs.meta new file mode 100644 index 000000000..e9f95215b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 809f47245f717ad41996974be2443feb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/Styles.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles.meta new file mode 100644 index 000000000..48002b63e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 83e25ceea0bb7cd4ebf04b724bb0584c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs new file mode 100644 index 000000000..4f4ede9c1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs @@ -0,0 +1,777 @@ +using UnityEditor; +using UnityEngine; +using System.Reflection; + +namespace SingularityGroup.HotReload.Editor { + internal static class HotReloadWindowStyles { + private static GUIStyle h1TitleStyle; + private static GUIStyle h1TitleCenteredStyle; + private static GUIStyle h2TitleStyle; + private static GUIStyle h3TitleStyle; + private static GUIStyle h3TitleWrapStyle; + private static GUIStyle h4TitleStyle; + private static GUIStyle h5TitleStyle; + private static GUIStyle boxStyle; + private static GUIStyle wrapStyle; + private static GUIStyle noPaddingMiddleLeftStyle; + private static GUIStyle middleLeftStyle; + private static GUIStyle middleCenterStyle; + private static GUIStyle mediumMiddleCenterStyle; + private static GUIStyle textFieldWrapStyle; + private static GUIStyle foldoutStyle; + private static GUIStyle h3CenterTitleStyle; + private static GUIStyle logoStyle; + private static GUIStyle changelogPointersStyle; + private static GUIStyle recompileButtonStyle; + private static GUIStyle indicationIconStyle; + private static GUIStyle indicationAlertIconStyle; + private static GUIStyle startButtonStyle; + private static GUIStyle stopButtonStyle; + private static GUIStyle eventFilters; + private static GUIStyle sectionOuterBoxCompactStyle; + private static GUIStyle sectionInnerBoxStyle; + private static GUIStyle sectionInnerBoxWideStyle; + private static GUIStyle changelogSectionInnerBoxStyle; + private static GUIStyle indicationBoxStyle; + private static GUIStyle linkStyle; + private static GUIStyle labelStyle; + private static GUIStyle progressBarBarStyle; + private static GUIStyle section; + private static GUIStyle scroll; + private static GUIStyle barStyle; + private static GUIStyle barBgStyle; + private static GUIStyle barChildStyle; + private static GUIStyle barFoldoutStyle; + private static GUIStyle timestampStyle; + private static GUIStyle clickableLabelBoldStyle; + private static GUIStyle _footerStyle; + private static GUIStyle _emptyListText; + private static GUIStyle _stacktraceTextAreaStyle; + private static GUIStyle _customFoldoutStyle; + private static GUIStyle _entryBoxStyle; + private static GUIStyle _childEntryBoxStyle; + private static GUIStyle _removeIconStyle; + private static GUIStyle upgradeLicenseButtonStyle; + private static GUIStyle upgradeLicenseButtonOverlayStyle; + private static GUIStyle upgradeButtonStyle; + private static GUIStyle hideButtonStyle; + private static GUIStyle dynamicSection; + private static GUIStyle dynamicSectionHelpTab; + private static GUIStyle helpTabButton; + private static GUIStyle indicationHelpBox; + private static GUIStyle notificationsTitleStyle; + + private static Color32? darkModeLinkColor; + private static Color32? lightModeModeLinkColor; + + public static bool IsDarkMode => EditorGUIUtility.isProSkin; + public static int windowScreenWidth => HotReloadWindow.Current ? (int)HotReloadWindow.Current.position.width : Screen.width; + public static int windowScreenHeight => HotReloadWindow.Current ? (int)HotReloadWindow.Current.position.height : Screen.height; + public static GUIStyle H1TitleStyle { + get { + if (h1TitleStyle == null) { + h1TitleStyle = new GUIStyle(EditorStyles.label); + h1TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h1TitleStyle.fontStyle = FontStyle.Bold; + h1TitleStyle.fontSize = 16; + h1TitleStyle.padding.top = 5; + h1TitleStyle.padding.bottom = 5; + } + return h1TitleStyle; + } + } + + public static GUIStyle FooterStyle { + get { + if (_footerStyle == null) { + _footerStyle = new GUIStyle(); + _footerStyle.fixedHeight = 28; + } + return _footerStyle; + } + } + + public static GUIStyle H1TitleCenteredStyle { + get { + if (h1TitleCenteredStyle == null) { + h1TitleCenteredStyle = new GUIStyle(H1TitleStyle); + h1TitleCenteredStyle.alignment = TextAnchor.MiddleCenter; + } + return h1TitleCenteredStyle; + } + } + + public static GUIStyle H2TitleStyle { + get { + if (h2TitleStyle == null) { + h2TitleStyle = new GUIStyle(EditorStyles.label); + h2TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h2TitleStyle.fontStyle = FontStyle.Bold; + h2TitleStyle.fontSize = 14; + h2TitleStyle.padding.top = 5; + h2TitleStyle.padding.bottom = 5; + } + return h2TitleStyle; + } + } + + public static GUIStyle H3TitleStyle { + get { + if (h3TitleStyle == null) { + h3TitleStyle = new GUIStyle(EditorStyles.label); + h3TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h3TitleStyle.fontStyle = FontStyle.Bold; + h3TitleStyle.fontSize = 12; + h3TitleStyle.padding.top = 5; + h3TitleStyle.padding.bottom = 5; + } + return h3TitleStyle; + } + } + + public static GUIStyle NotificationsTitleStyle { + get { + if (notificationsTitleStyle == null) { + notificationsTitleStyle = new GUIStyle(HotReloadWindowStyles.H3TitleStyle); + notificationsTitleStyle.padding.bottom = 0; + notificationsTitleStyle.padding.top = 0; + } + return notificationsTitleStyle; + } + } + + public static GUIStyle H3TitleWrapStyle { + get { + if (h3TitleWrapStyle == null) { + h3TitleWrapStyle = new GUIStyle(H3TitleStyle); + h3TitleWrapStyle.wordWrap = true; + } + return h3TitleWrapStyle; + } + } + + public static GUIStyle H3CenteredTitleStyle { + get { + if (h3CenterTitleStyle == null) { + h3CenterTitleStyle = new GUIStyle(EditorStyles.label); + h3CenterTitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h3CenterTitleStyle.fontStyle = FontStyle.Bold; + h3CenterTitleStyle.alignment = TextAnchor.MiddleCenter; + h3CenterTitleStyle.fontSize = 12; + } + return h3CenterTitleStyle; + } + } + + public static GUIStyle H4TitleStyle { + get { + if (h4TitleStyle == null) { + h4TitleStyle = new GUIStyle(EditorStyles.label); + h4TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h4TitleStyle.fontStyle = FontStyle.Bold; + h4TitleStyle.fontSize = 11; + } + return h4TitleStyle; + } + } + + public static GUIStyle H5TitleStyle { + get { + if (h5TitleStyle == null) { + h5TitleStyle = new GUIStyle(EditorStyles.label); + h5TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h5TitleStyle.fontStyle = FontStyle.Bold; + h5TitleStyle.fontSize = 10; + } + return h5TitleStyle; + } + } + + public static GUIStyle LabelStyle { + get { + if (labelStyle == null) { + labelStyle = new GUIStyle(EditorStyles.label); + labelStyle.fontSize = 12; + labelStyle.clipping = TextClipping.Clip; + labelStyle.wordWrap = true; + } + return labelStyle; + } + } + + public static GUIStyle BoxStyle { + get { + if (boxStyle == null) { + boxStyle = new GUIStyle(EditorStyles.helpBox); + boxStyle.normal.textColor = GUI.skin.label.normal.textColor; + boxStyle.fontStyle = FontStyle.Bold; + boxStyle.alignment = TextAnchor.UpperLeft; + } + if (!IsDarkMode) { + boxStyle.normal.background = Texture2D.blackTexture; + } + return boxStyle; + } + } + + public static GUIStyle WrapStyle { + get { + if (wrapStyle == null) { + wrapStyle = new GUIStyle(EditorStyles.label); + wrapStyle.fontStyle = FontStyle.Normal; + wrapStyle.wordWrap = true; + } + return wrapStyle; + } + } + + public static GUIStyle NoPaddingMiddleLeftStyle { + get { + if (noPaddingMiddleLeftStyle == null) { + noPaddingMiddleLeftStyle = new GUIStyle(EditorStyles.label); + noPaddingMiddleLeftStyle.normal.textColor = GUI.skin.label.normal.textColor; + noPaddingMiddleLeftStyle.padding = new RectOffset(); + noPaddingMiddleLeftStyle.margin = new RectOffset(); + noPaddingMiddleLeftStyle.alignment = TextAnchor.MiddleLeft; + } + return noPaddingMiddleLeftStyle; + } + } + + public static GUIStyle MiddleLeftStyle { + get { + if (middleLeftStyle == null) { + middleLeftStyle = new GUIStyle(EditorStyles.label); + middleLeftStyle.fontStyle = FontStyle.Normal; + middleLeftStyle.alignment = TextAnchor.MiddleLeft; + } + + return middleLeftStyle; + } + } + + public static GUIStyle MiddleCenterStyle { + get { + if (middleCenterStyle == null) { + middleCenterStyle = new GUIStyle(EditorStyles.label); + middleCenterStyle.fontStyle = FontStyle.Normal; + middleCenterStyle.alignment = TextAnchor.MiddleCenter; + } + return middleCenterStyle; + } + } + + public static GUIStyle MediumMiddleCenterStyle { + get { + if (mediumMiddleCenterStyle == null) { + mediumMiddleCenterStyle = new GUIStyle(EditorStyles.label); + mediumMiddleCenterStyle.fontStyle = FontStyle.Normal; + mediumMiddleCenterStyle.fontSize = 12; + mediumMiddleCenterStyle.alignment = TextAnchor.MiddleCenter; + } + return mediumMiddleCenterStyle; + } + } + + public static GUIStyle TextFieldWrapStyle { + get { + if (textFieldWrapStyle == null) { + textFieldWrapStyle = new GUIStyle(EditorStyles.textField); + textFieldWrapStyle.wordWrap = true; + } + return textFieldWrapStyle; + } + } + + public static GUIStyle FoldoutStyle { + get { + if (foldoutStyle == null) { + foldoutStyle = new GUIStyle(EditorStyles.foldout); + foldoutStyle.normal.textColor = GUI.skin.label.normal.textColor; + foldoutStyle.alignment = TextAnchor.MiddleLeft; + foldoutStyle.fontStyle = FontStyle.Bold; + foldoutStyle.fontSize = 12; + } + return foldoutStyle; + } + } + + public static GUIStyle LogoStyle { + get { + if (logoStyle == null) { + logoStyle = new GUIStyle(); + logoStyle.margin = new RectOffset(6, 6, 0, 0); + logoStyle.padding = new RectOffset(16, 16, 0, 0); + } + return logoStyle; + } + } + + public static GUIStyle ChangelogPointerStyle { + get { + if (changelogPointersStyle == null) { + changelogPointersStyle = new GUIStyle(EditorStyles.label); + changelogPointersStyle.wordWrap = true; + changelogPointersStyle.fontSize = 12; + changelogPointersStyle.padding.left = 20; + } + return changelogPointersStyle; + } + } + + public static GUIStyle IndicationIcon { + get { + if (indicationIconStyle == null) { + indicationIconStyle = new GUIStyle(H2TitleStyle); + indicationIconStyle.fixedHeight = 20; + } + indicationIconStyle.padding = new RectOffset(left: windowScreenWidth > Constants.IndicationTextHideWidth ? 7 : 5, right: windowScreenWidth > Constants.IndicationTextHideWidth ? 0 : -10, top: 1, bottom: 1); + return indicationIconStyle; + } + } + + public static GUIStyle IndicationAlertIcon { + get { + if (indicationAlertIconStyle == null) { + indicationAlertIconStyle = new GUIStyle(H2TitleStyle); + indicationAlertIconStyle.padding = new RectOffset(left: 5, right: -7, top: 1, bottom: 1); + indicationAlertIconStyle.fixedHeight = 20; + } + return indicationAlertIconStyle; + } + } + + public static GUIStyle RecompileButton { + get { + if (recompileButtonStyle == null) { + recompileButtonStyle = new GUIStyle(EditorStyles.miniButton); + recompileButtonStyle.margin.top = 17; + recompileButtonStyle.fixedHeight = 25; + recompileButtonStyle.margin.right = 5; + } + recompileButtonStyle.fixedWidth = windowScreenWidth > Constants.RecompileButtonTextHideWidth ? 95 : 30; + return recompileButtonStyle; + } + } + + public static GUIStyle StartButton { + get { + if (startButtonStyle == null) { + startButtonStyle = new GUIStyle(EditorStyles.miniButton); + startButtonStyle.fixedHeight = 25; + startButtonStyle.padding.top = 6; + startButtonStyle.padding.bottom = 6; + startButtonStyle.margin.top = 17; + } + startButtonStyle.fixedWidth = windowScreenWidth > Constants.StartButtonTextHideWidth ? 70 : 30; + return startButtonStyle; + } + } + + public static GUIStyle StopButton { + get { + if (stopButtonStyle == null) { + stopButtonStyle = new GUIStyle(EditorStyles.miniButton); + stopButtonStyle.fixedHeight = 25; + stopButtonStyle.margin.top = 17; + } + stopButtonStyle.fixedWidth = HotReloadWindowStyles.windowScreenWidth > Constants.StartButtonTextHideWidth ? 70 : 30; + return stopButtonStyle; + } + } + + internal static GUIStyle EventFiltersStyle { + get { + if (eventFilters == null) { + eventFilters = new GUIStyle(EditorStyles.toolbarButton); + eventFilters.fontSize = 13; + // gets overwritten to content size + eventFilters.fixedHeight = 26; + eventFilters.fixedWidth = 50; + eventFilters.margin = new RectOffset(0, 0, 0, 0); + eventFilters.padding = new RectOffset(0, 0, 6, 6); + } + return eventFilters; + } + } + + private static Texture2D _clearBackground; + private static Texture2D clearBackground { + get { + if (_clearBackground == null) { + _clearBackground = new Texture2D(1, 1); + _clearBackground.SetPixel(0, 0, Color.clear); + _clearBackground.Apply(); + } + return _clearBackground; + + } + } + + public static GUIStyle SectionOuterBoxCompact { + get { + if (sectionOuterBoxCompactStyle == null) { + sectionOuterBoxCompactStyle = new GUIStyle(); + sectionOuterBoxCompactStyle.padding.top = 10; + sectionOuterBoxCompactStyle.padding.bottom = 10; + } + // Looks better without a background + sectionOuterBoxCompactStyle.normal.background = clearBackground; + return sectionOuterBoxCompactStyle; + } + } + + public static GUIStyle SectionInnerBox { + get { + if (sectionInnerBoxStyle == null) { + sectionInnerBoxStyle = new GUIStyle(); + } + sectionInnerBoxStyle.padding = new RectOffset(left: 0, right: 0, top: 15, bottom: 0); + return sectionInnerBoxStyle; + } + } + + public static GUIStyle SectionInnerBoxWide { + get { + if (sectionInnerBoxWideStyle == null) { + sectionInnerBoxWideStyle = new GUIStyle(EditorStyles.helpBox); + sectionInnerBoxWideStyle.padding.top = 15; + sectionInnerBoxWideStyle.padding.bottom = 15; + sectionInnerBoxWideStyle.padding.left = 10; + sectionInnerBoxWideStyle.padding.right = 10; + } + return sectionInnerBoxWideStyle; + } + } + + public static GUIStyle DynamiSection { + get { + if (dynamicSection == null) { + dynamicSection = new GUIStyle(); + } + var defaultPadding = 13; + if (windowScreenWidth > 600) { + var dynamicPadding = (windowScreenWidth - 600) / 2; + dynamicSection.padding.left = defaultPadding + dynamicPadding; + dynamicSection.padding.right = defaultPadding + dynamicPadding; + } else if (windowScreenWidth < Constants.IndicationTextHideWidth) { + dynamicSection.padding.left = 0; + dynamicSection.padding.right = 0; + } else { + dynamicSection.padding.left = 13; + dynamicSection.padding.right = 13; + } + return dynamicSection; + } + } + + public static GUIStyle DynamicSectionHelpTab { + get { + if (dynamicSectionHelpTab == null) { + dynamicSectionHelpTab = new GUIStyle(DynamiSection); + } + dynamicSectionHelpTab.padding.left = DynamiSection.padding.left - 3; + dynamicSectionHelpTab.padding.right = DynamiSection.padding.right - 3; + return dynamicSectionHelpTab; + } + } + + public static GUIStyle ChangelogSectionInnerBox { + get { + if (changelogSectionInnerBoxStyle == null) { + changelogSectionInnerBoxStyle = new GUIStyle(EditorStyles.helpBox); + changelogSectionInnerBoxStyle.margin.bottom = 10; + changelogSectionInnerBoxStyle.margin.top = 10; + } + return changelogSectionInnerBoxStyle; + } + } + + public static GUIStyle IndicationBox { + get { + if (indicationBoxStyle == null) { + indicationBoxStyle = new GUIStyle(); + } + indicationBoxStyle.margin.bottom = windowScreenWidth < 141 ? 0 : 10; + return indicationBoxStyle; + } + } + + + public static GUIStyle LinkStyle { + get { + if (linkStyle == null) { + linkStyle = new GUIStyle(EditorStyles.label); + linkStyle.fontStyle = FontStyle.Bold; + } + var color = IsDarkMode ? DarkModeLinkColor : LightModeModeLinkColor; + linkStyle.normal.textColor = color; + return linkStyle; + } + } + + private static Color32 DarkModeLinkColor { + get { + if (darkModeLinkColor == null) { + darkModeLinkColor = new Color32(0x3F, 0x9F, 0xFF, 0xFF); + } + return darkModeLinkColor.Value; + } + } + + + private static Color32 LightModeModeLinkColor { + get { + if (lightModeModeLinkColor == null) { + lightModeModeLinkColor = new Color32(0x0F, 0x52, 0xD7, 0xFF); + } + return lightModeModeLinkColor.Value; + } + } + public static GUIStyle ProgressBarBarStyle { + get { + if (progressBarBarStyle != null) { + return progressBarBarStyle; + } + var styles = (EditorStyles)typeof(EditorStyles) + .GetField("s_Current", BindingFlags.Static | BindingFlags.NonPublic) + ?.GetValue(null); + var style = styles?.GetType() + .GetField("m_ProgressBarBar", BindingFlags.NonPublic | BindingFlags.Instance) + ?.GetValue(styles); + progressBarBarStyle = style != null ? (GUIStyle)style : GUIStyle.none; + return progressBarBarStyle; + } + } + + internal static GUIStyle Section { + get { + if (section == null) { + section = new GUIStyle(EditorStyles.helpBox); + section.padding = new RectOffset(left: 10, right: 10, top: 10, bottom: 10); + section.margin = new RectOffset(left: 0, right: 0, top: 0, bottom: 0); + } + return section; + } + } + internal static GUIStyle Scroll { + get { + if (scroll == null) { + scroll = new GUIStyle(EditorStyles.helpBox); + } + if (IsDarkMode) { + scroll.normal.background = GUIHelper.ConvertTextureToColor(new Color(0,0,0,0.05f)); + } else { + scroll.normal.background = GUIHelper.ConvertTextureToColor(new Color(0,0,0,0.03f)); + } + return scroll; + } + } + + internal static GUIStyle BarStyle { + get { + if (barStyle == null) { + barStyle = new GUIStyle(GUI.skin.label); + barStyle.fontSize = 12; + barStyle.alignment = TextAnchor.MiddleLeft; + barStyle.fixedHeight = 20; + barStyle.padding = new RectOffset(10, 5, 2, 2); + } + return barStyle; + } + } + + internal static GUIStyle BarBackgroundStyle { + get { + if (barBgStyle == null) { + barBgStyle = new GUIStyle(); + } + barBgStyle.normal.background = GUIHelper.ConvertTextureToColor(Color.clear); + barBgStyle.hover.background = GUIHelper.ConvertTextureToColor(new Color(0, 0, 0, 0.1f)); + barBgStyle.focused.background = GUIHelper.ConvertTextureToColor(Color.clear); + barBgStyle.active.background = null; + return barBgStyle; + } + } + + internal static GUIStyle ChildBarStyle { + get { + if (barChildStyle == null) { + barChildStyle = new GUIStyle(BarStyle); + barChildStyle.padding = new RectOffset(43, barChildStyle.padding.right, barChildStyle.padding.top, barChildStyle.padding.bottom); + } + return barChildStyle; + } + } + + internal static GUIStyle FoldoutBarStyle { + get { + if (barFoldoutStyle == null) { + barFoldoutStyle = new GUIStyle(BarStyle); + barFoldoutStyle.padding = new RectOffset(23, barFoldoutStyle.padding.right, barFoldoutStyle.padding.top, barFoldoutStyle.padding.bottom); + } + return barFoldoutStyle; + } + } + + public static GUIStyle TimestampStyle { + get { + if (timestampStyle == null) { + timestampStyle = new GUIStyle(GUI.skin.label); + } + if (IsDarkMode) { + timestampStyle.normal.textColor = new Color(0.5f, 0.5f, 0.5f); + } else { + timestampStyle.normal.textColor = new Color(0.5f, 0.5f, 0.5f); + } + timestampStyle.hover = timestampStyle.normal; + return timestampStyle; + } + } + + internal static GUIStyle ClickableLabelBoldStyle { + get { + if (clickableLabelBoldStyle == null) { + clickableLabelBoldStyle = new GUIStyle(LabelStyle); + clickableLabelBoldStyle.fontStyle = FontStyle.Bold; + clickableLabelBoldStyle.fontSize = 14; + clickableLabelBoldStyle.margin.left = 17; + clickableLabelBoldStyle.active.textColor = clickableLabelBoldStyle.normal.textColor; + } + return clickableLabelBoldStyle; + } + } + + internal static GUIStyle EmptyListText { + get { + if (_emptyListText == null) { + _emptyListText = new GUIStyle(); + _emptyListText.fontSize = 11; + _emptyListText.padding.left = 15; + _emptyListText.padding.top = 10; + _emptyListText.alignment = TextAnchor.MiddleCenter; + _emptyListText.normal.textColor = Color.gray; + } + + return _emptyListText; + } + } + + internal static GUIStyle StacktraceTextAreaStyle { + get { + if (_stacktraceTextAreaStyle == null) { + _stacktraceTextAreaStyle = new GUIStyle(EditorStyles.textArea); + _stacktraceTextAreaStyle.border = new RectOffset(0, 0, 0, 0); + } + return _stacktraceTextAreaStyle; + } + } + + internal static GUIStyle EntryBoxStyle { + get { + if (_entryBoxStyle == null) { + _entryBoxStyle = new GUIStyle(); + _entryBoxStyle.margin.left = 30; + } + return _entryBoxStyle; + } + } + + internal static GUIStyle ChildEntryBoxStyle { + get { + if (_childEntryBoxStyle == null) { + _childEntryBoxStyle = new GUIStyle(); + _childEntryBoxStyle.margin.left = 45; + } + return _childEntryBoxStyle; + } + } + + internal static GUIStyle CustomFoldoutStyle { + get { + if (_customFoldoutStyle == null) { + _customFoldoutStyle = new GUIStyle(EditorStyles.foldout); + _customFoldoutStyle.margin.top = 4; + _customFoldoutStyle.margin.left = 0; + _customFoldoutStyle.padding.left = 0; + _customFoldoutStyle.fixedWidth = 100; + } + return _customFoldoutStyle; + } + } + + internal static GUIStyle RemoveIconStyle { + get { + if (_removeIconStyle == null) { + _removeIconStyle = new GUIStyle(); + _removeIconStyle.margin.top = 5; + _removeIconStyle.fixedWidth = 17; + _removeIconStyle.fixedHeight = 17; + } + return _removeIconStyle; + } + } + + internal static GUIStyle UpgradeLicenseButtonStyle { + get { + if (upgradeLicenseButtonStyle == null) { + upgradeLicenseButtonStyle = new GUIStyle(GUI.skin.button); + upgradeLicenseButtonStyle.padding = new RectOffset(5, 5, 0, 0); + } + return upgradeLicenseButtonStyle; + } + } + + internal static GUIStyle UpgradeLicenseButtonOverlayStyle { + get { + if (upgradeLicenseButtonOverlayStyle == null) { + upgradeLicenseButtonOverlayStyle = new GUIStyle(UpgradeLicenseButtonStyle); + } + return upgradeLicenseButtonOverlayStyle; + } + } + + internal static GUIStyle UpgradeButtonStyle { + get { + if (upgradeButtonStyle == null) { + upgradeButtonStyle = new GUIStyle(EditorStyles.miniButton); + upgradeButtonStyle.fontStyle = FontStyle.Bold; + upgradeButtonStyle.fontSize = 14; + upgradeButtonStyle.fixedHeight = 24; + } + return upgradeButtonStyle; + } + } + + internal static GUIStyle HideButtonStyle { + get { + if (hideButtonStyle == null) { + hideButtonStyle = new GUIStyle(GUI.skin.button); + } + return hideButtonStyle; + } + } + + internal static GUIStyle HelpTabButton { + get { + if (helpTabButton == null) { + helpTabButton = new GUIStyle(GUI.skin.button); + helpTabButton.alignment = TextAnchor.MiddleLeft; + helpTabButton.padding.left = 10; + } + return helpTabButton; + } + } + + internal static GUIStyle IndicationHelpBox { + get { + if (indicationHelpBox == null) { + indicationHelpBox = new GUIStyle(EditorStyles.helpBox); + indicationHelpBox.margin.right = 0; + indicationHelpBox.margin.left = 0; + } + return indicationHelpBox; + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs.meta new file mode 100644 index 000000000..5911603f9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c06a986e9e8c3874f9578f0002ff3a2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/LICENSE.md b/Packages/com.singularitygroup.hotreload/LICENSE.md new file mode 100644 index 000000000..b9eb62e5e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/LICENSE.md @@ -0,0 +1,45 @@ +End User License Agreement (“EULA”) for Hot Reload for Unity (“Software”) +Please read this End-User License Agreement ("Agreement") carefully before purchasing, downloading, or using Hot Reload for Unity ("Software"). + +By purchasing, downloading or using the Software, you, the individual or entity (“End-User”), agree to be bound by this EULA as well as by our Terms and Conditions. + +If End-User does not agree to the terms of this Agreement, do not purchase, download or use the Software. + +The subject matter of this EULA is the licensing of the Software to End-User. The Software is licensed, not sold. + +License + +The Naughty Cult Ltd. (“Licensor”) grants End-User a revocable, non-exclusive, worldwide, non-transferable, limited license to download, install and use the Software for personal and commercial purposes in accordance with the terms of this Agreement and the terms set out in the Terms and Conditions. + +The Software is owned and copyrighted by The Naughty Cult Ltd.. Your license confers no title or ownership in the Software and should not be construed as a sale of any right in the Software. + +The Software is protected by copyright law and international treaty provisions. You acknowledge that no ownership of the intellectual property in the Software is transferred to you. You further acknowledge that The Naughty Cult Ltd. retains full ownership rights to the Software, and you will not acquire any rights to the Software except as outlined in this license. You agree that any copies of the Software will include the same proprietary notices found on and within the original Software. + +End-User's Rights and Obligations + +End-User may use the licensed Software only for its intended purpose. End-User may not modify, reproduce, distribute, sublicense, rent, lease or lend the Software. +Each active license allows End-User to install and use the Software on a maximum of two devices associated with one specific Unity seat. End-User may not share the Software or the license key with any third party. + +You may not modify the Software or disable any licensing or control features of the Software without express permission from the Licensor. You agree that you will not attempt to reverse compile, modify, translate, or disassemble the Software in whole or in part. + +Once End-User's active license is terminated, End-User will not receive any new updates to the Software, and may not download, install, integrate or otherwise use versions of the Software released at any time hereafter, unless a license is activated. + +Termination +This EULA will terminate automatically if End-User fails to comply with any of the terms and conditions of this Agreement. In such event, End-User must immediately stop using the Software and destroy all copies of the Software in End-User's possession. + +Governing Law +This EULA shall be governed by the laws of the country in which the Licensor is headquartered without regard to its conflict of law provisions. We reserve the right to terminate or suspend your account, without notice or liability, for any reason, including breach of the Terms and Conditions and/or EULA. + +Limitation of Liability +The Naughty Cult Ltd. and its affiliates shall not be held liable for any indirect, incidental, special, consequential or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from your use of or inability to use the Service, any conduct or content of any third party on the Service, any content obtained from the Service, or unauthorized access or alteration of your transmissions or content. This limitation applies regardless of whether the damages are based on warranty, contract, tort (including negligence), or any other legal theory, and even if we have been advised of the possibility of such damages. + + +Disclaimer of Warranties + +The Service is provided on an "as is" and "as available" basis without any warranties of any kind, either express or implied. We do not warrant that the Service will be uninterrupted or error-free, or that any defects will be corrected. We also do not guarantee that the Service will meet your requirements. + +Waiver and Severability +Our failure to enforce any right or provision of this EULA will not be deemed a waiver of such right or provision. In the event that any provision of these EULA is held to be invalid or unenforceable, the remaining provisions will remain in full force and effect. + +Entire Agreement +This EULA constitutes the entire agreement between End-User and Licensor regarding the use of the Software and supersedes all prior agreements and understandings, whether written or oral. diff --git a/Packages/com.singularitygroup.hotreload/LICENSE.md.meta b/Packages/com.singularitygroup.hotreload/LICENSE.md.meta new file mode 100644 index 000000000..741a47def --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/LICENSE.md.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 0f0ed454ae8a66041bea966cdcee0f2e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/LICENSE.md + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/README.md b/Packages/com.singularitygroup.hotreload/README.md new file mode 100644 index 000000000..1c3096748 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/README.md @@ -0,0 +1,9 @@ +![HotReloadLogo](https://hotreload.net/logo.png?w=256&q=75) + +# Hot Reload for Unity + +Edit **any C# function** and get immediate updates in your game. Hot Reload works with your existing project, no code changes required. + +Install instructions on https://hotreload.net/ + +![Modify2dJumpingGameDemo](https://hot-reload-assets.s3.amazonaws.com/assets/hotreload_jump_demo.gif) diff --git a/Packages/com.singularitygroup.hotreload/README.md.meta b/Packages/com.singularitygroup.hotreload/README.md.meta new file mode 100644 index 000000000..a5858a865 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/README.md.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bdb53603710c4ae3b491b7885e5ff702 +timeCreated: 1674514875 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/README.md + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime.meta b/Packages/com.singularitygroup.hotreload/Runtime.meta new file mode 100644 index 000000000..2b0c28248 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8026562867072c3409c904654ec3c17f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs b/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs new file mode 100644 index 000000000..bad45db38 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs @@ -0,0 +1,55 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Collections; +using UnityEngine; + +namespace SingularityGroup.HotReload { + class AppCallbackListener : MonoBehaviour { + /// + /// Reliable on Android and in the editor. + /// + /// + /// On iOS, OnApplicationPause is not called at expected moments + /// if the app has some background modes enabled in PlayerSettings -Troy. + /// + public static event Action onApplicationPause; + + /// + /// Reliable on Android, iOS and in the editor. + /// + public static event Action onApplicationFocus; + + static AppCallbackListener instance; + public static AppCallbackListener I => instance; + + // Must be called early from Unity main thread (before any usages of the singleton I). + public static AppCallbackListener Init() { + if(instance) return instance; + var go = new GameObject("AppCallbackListener"); + go.hideFlags |= HideFlags.HideInHierarchy; + DontDestroyOnLoad(go); + return instance = go.AddComponent(); + } + + public bool Paused { get; private set; } = false; + + public void DelayedQuit(float seconds) { + StartCoroutine(delayedQuitRoutine(seconds)); + } + + IEnumerator delayedQuitRoutine(float seconds) { + yield return new WaitForSeconds(seconds); + Application.Quit(); + } + + void OnApplicationPause(bool paused) { + Paused = paused; + onApplicationPause?.Invoke(paused); + } + + void OnApplicationFocus(bool playing) { + onApplicationFocus?.Invoke(playing); + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs.meta new file mode 100644 index 000000000..815fab523 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a989a17330b04c6fb8f91aa41ac14471 +timeCreated: 1674216227 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs b/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs new file mode 100644 index 000000000..c8a2d874b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs @@ -0,0 +1,171 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Collections.Generic; +using System.IO; +using JetBrains.Annotations; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEngine; +using UnityEngine.Serialization; + +namespace SingularityGroup.HotReload { + /// + /// Information about the Unity Player build. + /// + /// + /// + /// This info is used by the HotReload Server to compile your project in the same way that the Unity Player build was compiled.
+ /// For example, when building for Android, Unity sets a bunch of define symbols like UNITY_ANDROID. + ///
+ /// + /// Information that changes between builds is generated at build-time and put in StreamingAssets/.
+ /// This approach means that builds do not need to modify a project file (making file dirty in git). For example, + /// whenever user makes a mono build, the CommitHash changes and we need to regenerate the BuildInfo. + ///
+ ///
+ [Serializable] + class BuildInfo { + /// + /// Uniquely identifies the Unity project. + /// + /// + /// Used on-device to check if Hot Reload server is compatible with the Unity project (same project).
+ /// When your computer has multiple Unity projects open, each project should provide a different value.
+ /// This identifier must also be the same between two different computers that are collaborating on the same project. + /// + /// + /// Edge-case: when a user copy pastes an entire Unity project and has both open at once, + /// then it's fine for this identifier to be the same. + /// + ///
+ public string projectIdentifier; + + /// + /// Git commit hash + /// + /// + /// Used to detect that your code is different to when the build was made. + /// + public string commitHash; + + /// + /// List of define symbols that were active when this build was made. + /// + /// + /// Separate the symbols with a semi-colon character ';' + /// + public string defineSymbols; + + /// + /// A regex of C# project names (*.csproj) to be omitted from compilation. + /// + /// + /// "MyTests|MyEditorAssembly" + /// + [FormerlySerializedAs("projectExclusionRegex")] + public string projectOmissionRegex; + + /// + /// The computer that made the Android (or Standalone etc) build.
+ /// The hostname (ip address) where Hot Reload server would be listening. + ///
+ public string buildMachineHostName; + + /// + /// The computer that made the Android (or Standalone etc) build.
+ /// The port where Hot Reload server would be listening. + ///
+ public int buildMachinePort; + + /// + /// Selected build target in Unity Editor. + /// + public string activeBuildTarget; + + /// + /// Used to pass in the origin onto the phone which is used to identify the correct server. + /// + public string buildMachineRequestOrigin; + + [JsonIgnore] + public HashSet DefineSymbolsAsHashSet { + get { + var symbols = defineSymbols.Trim().Split(';'); + // split on an empty string produces 1 empty string + if (symbols.Length == 1 && symbols[0] == string.Empty) { + return new HashSet(); + } + return new HashSet(symbols); + } + } + + [JsonIgnore] + public PatchServerInfo BuildMachineServer { + get { + if (buildMachineHostName == null || buildMachinePort == 0) { + return null; + } + return new PatchServerInfo(buildMachineHostName, buildMachinePort, commitHash, null, customRequestOrigin: buildMachineRequestOrigin); + } + } + + public string ToJson() { + return JsonConvert.SerializeObject(this); + } + + [CanBeNull] + public static BuildInfo FromJson(string json) { + if (string.IsNullOrEmpty(json)) { + return null; + } + return JsonConvert.DeserializeObject(json); + } + + /// + /// Path to read/write the json file to. + /// + /// A filepath that is inside the player build + public static string GetStoredPath() { + return Path.Combine(Application.streamingAssetsPath, GetStoredName()); + } + + public static string GetStoredName() { + return "HotReload_BuildInfo.json"; + } + + /// True if the commit hashes are definately different, otherwise False + public bool IsDifferentCommit(string remoteCommit) { + if (commitHash == PatchServerInfo.UnknownCommitHash) { + return false; + } + + return !SameCommit(commitHash, remoteCommit); + } + + /// + /// Checks whether the commits are equivalent. + /// + /// + /// + /// False if the commit hashes are definately different, otherwise True + public static bool SameCommit(string commitA, string commitB) { + if (commitA == null) { + // unknown commit hash, so approve anything + return true; + } + + if (commitA.Length == commitB.Length) { + return commitA == commitB; + } else if (commitA.Length >= 6 && commitB.Length >= 6) { + // depending on OS, the git log pretty output has different length (7 or 8 chars) + // if the longer hash starts with the shorter hash, return true + // Assumption: commits have different length. + var longer = commitA.Length > commitB.Length ? commitA : commitB; + var shorter = commitA.Length > commitB.Length ? commitB : commitA; + + return longer.StartsWith(shorter); + } + return false; + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs.meta new file mode 100644 index 000000000..15c30e2c4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 39bb7d4cd9324f31b1882354b1cde762 +timeCreated: 1673776105 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Burst.meta b/Packages/com.singularitygroup.hotreload/Runtime/Burst.meta new file mode 100644 index 000000000..f58389b1d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Burst.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d10d24dc13744197a80f50ac50f5d1a1 +timeCreated: 1675449699 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs b/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs new file mode 100644 index 000000000..344095d8c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs @@ -0,0 +1,24 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System.Reflection; +using SingularityGroup.HotReload.DTO; + +namespace SingularityGroup.HotReload.Burst { + public static class JobHotReloadUtility { + public static void HotReloadBurstCompiledJobs(CodePatch patch, Module module) { + JobPatchUtility.PatchBurstCompiledJobs(patch, module, unityMajorVersion: + #if UNITY_2022_2_OR_NEWER + 2022 + #elif UNITY_2021_3_OR_NEWER + 2021 + #elif UNITY_2020_3_OR_NEWER + 2020 + #elif UNITY_2019_4_OR_NEWER + 2019 + #else + 2018 + #endif + ); + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs.meta new file mode 100644 index 000000000..766dc0c13 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b9980b40e3ff447b94e71de238a37fb7 +timeCreated: 1676825622 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs b/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs new file mode 100644 index 000000000..af648737e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs @@ -0,0 +1,41 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace SingularityGroup.HotReload { + static class BurstChecker { + //Use names instead of the types directly for compat with older unity versions + const string whitelistAttrName = "BurstCompileAttribute"; + const string blacklistAttrName = "BurstDiscardAttribute"; + + public static bool IsBurstCompiled(MethodBase method) { + //blacklist has precedence over whitelist + if(HasAttr(method.GetCustomAttributes(), blacklistAttrName)) { + return false; + } + if(HasAttr(method.GetCustomAttributes(), whitelistAttrName)) { + return true; + } + //Static methods inside a [BurstCompile] type are not burst compiled by default + if(method.DeclaringType == null || method.IsStatic) { + return false; + } + if(HasAttr(method.DeclaringType.GetCustomAttributes(), whitelistAttrName)) { + return true; + } + //No matching attributes + return false; + } + + static bool HasAttr(IEnumerable attributes, string name) { + foreach (var attr in attributes) { + if(attr.GetType().Name == name) { + return true; + } + } + return false; + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs.meta new file mode 100644 index 000000000..81f2cd52e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 20dfd902e9fc4485aeef90b9add39c0a +timeCreated: 1675404225 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs b/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs new file mode 100644 index 000000000..e97a499f6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs @@ -0,0 +1,423 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload.DTO; +using JetBrains.Annotations; +using SingularityGroup.HotReload.Burst; +using SingularityGroup.HotReload.HarmonyLib; +using SingularityGroup.HotReload.JsonConverters; +using SingularityGroup.HotReload.Newtonsoft.Json; +using SingularityGroup.HotReload.RuntimeDependencies; +using UnityEngine; +using UnityEngine.SceneManagement; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.Editor")] + +namespace SingularityGroup.HotReload { + class RegisterPatchesResult { + public readonly List patchedMethods = new List(); + public readonly List addedMethods = new List(); + public readonly List> patchFailures = new List>(); + } + + class CodePatcher { + public static readonly CodePatcher I = new CodePatcher(); + /// Tag for use in Debug.Log. + public const string TAG = "HotReload"; + + internal int PatchesApplied { get; private set; } + string PersistencePath {get;} + + List pendingPatches; + readonly List patchHistory; + readonly HashSet seenResponses = new HashSet(); + string[] assemblySearchPaths; + SymbolResolver symbolResolver; + readonly string tmpDir; + + CodePatcher() { + pendingPatches = new List(); + patchHistory = new List(); + if(UnityHelper.IsEditor) { + tmpDir = PackageConst.LibraryCachePath; + } else { + tmpDir = UnityHelper.TemporaryCachePath; + } + if(!UnityHelper.IsEditor) { + PersistencePath = Path.Combine(UnityHelper.PersistentDataPath, "HotReload", "patches.json"); + try { + LoadPatches(PersistencePath); + } catch(Exception ex) { + Log.Error("Encountered exception when loading patches from disk:\n{0}", ex); + } + } + } + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + static void InitializeUnityEvents() { + UnityEventHelper.Initialize(); + } + + + void LoadPatches(string filePath) { + PlayerLog("Loading patches from file {0}", filePath); + var file = new FileInfo(filePath); + if(file.Exists) { + var bytes = File.ReadAllText(filePath); + var patches = JsonConvert.DeserializeObject>(bytes); + PlayerLog("Loaded {0} patches from disk", patches.Count.ToString()); + foreach (var patch in patches) { + RegisterPatches(patch, persist: false); + } + } + } + + + internal IReadOnlyList PendingPatches => pendingPatches; + internal SymbolResolver SymbolResolver => symbolResolver; + + + internal string[] GetAssemblySearchPaths() { + EnsureSymbolResolver(); + return assemblySearchPaths; + } + + internal RegisterPatchesResult RegisterPatches(MethodPatchResponse patches, bool persist) { + PlayerLog("Register patches.\nWarnings: {0} \nMethods:\n{1}", string.Join("\n", patches.failures), string.Join("\n", patches.patches.SelectMany(p => p.modifiedMethods).Select(m => m.displayName))); + pendingPatches.Add(patches); + return ApplyPatches(persist); + } + + RegisterPatchesResult ApplyPatches(bool persist) { + PlayerLog("ApplyPatches. {0} patches pending.", pendingPatches.Count); + EnsureSymbolResolver(); + + var result = new RegisterPatchesResult(); + + try { + int count = 0; + foreach(var response in pendingPatches) { + if (seenResponses.Contains(response.id)) { + continue; + } + HandleMethodPatchResponse(response, result); + patchHistory.Add(response); + + seenResponses.Add(response.id); + count += response.patches.Length; + } + if (count > 0) { + Dispatch.OnHotReload().Forget(); + } + } catch(Exception ex) { + Log.Warning("Exception occured when handling method patch. Exception:\n{0}", ex); + } finally { + pendingPatches.Clear(); + } + + if(PersistencePath != null && persist) { + SaveAppliedPatches(PersistencePath).Forget(); + } + + PatchesApplied++; + return result; + } + + internal void ClearPatchedMethods() { + PatchesApplied = 0; + } + + static bool didLog; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] + static void WarnOnSceneLoad() { + SceneManager.sceneLoaded += (_, __) => { + if (didLog || !UnityEventHelper.UnityMethodsAdded()) { + return; + } + Log.Warning("A new Scene was loaded while new unity event methods were added at runtime. MonoBehaviours in the Scene will not trigger these new events."); + didLog = true; + }; + } + + void HandleMethodPatchResponse(MethodPatchResponse response, RegisterPatchesResult result) { + EnsureSymbolResolver(); + + foreach(var patch in response.patches) { + try { + var asm = Assembly.Load(patch.patchAssembly, patch.patchPdb); + + var module = asm.GetLoadedModules()[0]; + foreach(var sMethod in patch.newMethods) { + var newMethod = module.ResolveMethod(sMethod.metadataToken); + try { + UnityEventHelper.EnsureUnityEventMethod(newMethod); + } catch(Exception ex) { + Log.Warning("Encountered exception in EnsureUnityEventMethod: {0} {1}", ex.GetType().Name, ex.Message); + } + MethodUtils.DisableVisibilityChecks(newMethod); + if (!patch.patchMethods.Any(m => m.metadataToken == sMethod.metadataToken)) { + result.addedMethods.Add(sMethod); + } + } + + symbolResolver.AddAssembly(asm); + for (int i = 0; i < patch.modifiedMethods.Length; i++) { + var sOriginalMethod = patch.modifiedMethods[i]; + var sPatchMethod = patch.patchMethods[i]; + var err = PatchMethod(module: module, sOriginalMethod: sOriginalMethod, sPatchMethod: sPatchMethod, containsBurstJobs: patch.unityJobs.Length > 0, patchesResult: result); + if (!string.IsNullOrEmpty(err)) { + result.patchFailures.Add(Tuple.Create(sOriginalMethod, err)); + } + } + JobHotReloadUtility.HotReloadBurstCompiledJobs(patch, module); + } catch(Exception ex) { + Log.Warning("Failed to apply patch with id: {0}\n{1}", patch.patchId, ex); + } + } + } + + string PatchMethod(Module module, SMethod sOriginalMethod, SMethod sPatchMethod, bool containsBurstJobs, RegisterPatchesResult patchesResult) { + try { + var patchMethod = module.ResolveMethod(sPatchMethod.metadataToken); + var start = DateTime.UtcNow; + var state = TryResolveMethod(sOriginalMethod, patchMethod); + + if (DateTime.UtcNow - start > TimeSpan.FromMilliseconds(500)) { + Log.Info("Hot Reload apply took {0}", (DateTime.UtcNow - start).TotalMilliseconds); + } + + if(state.match == null) { + var error = + "Method mismatch: {0}, patch: {1}. This can have multiple reasons:\n" + + "1. You are running the Editor multiple times for the same project using symlinks, and are making changes from the symlink project\n" + + "2. A bug in Hot Reload. Please send us a reproduce (code before/after), and we'll get it fixed for you\n" + ; + Log.Warning(error, sOriginalMethod.simpleName, patchMethod.Name); + + return string.Format(error, sOriginalMethod.simpleName, patchMethod.Name); + } + + PlayerLog("Detour method {0:X8} {1}, offset: {2}", sOriginalMethod.metadataToken, patchMethod.Name, state.offset); + DetourResult result; + DetourApi.DetourMethod(state.match, patchMethod, out result); + if (result.success) { + patchesResult.patchedMethods.Add(sOriginalMethod); + try { + Dispatch.OnHotReloadLocal(state.match, patchMethod); + } catch { + // best effort + } + return null; + } else { + if(result.exception is InvalidProgramException && containsBurstJobs) { + //ignore. The method is likely burst compiled and can't be patched + return null; + } else { + return HandleMethodPatchFailure(sOriginalMethod, result.exception); + } + } + } catch(Exception ex) { + return HandleMethodPatchFailure(sOriginalMethod, ex); + } + } + + struct ResolveMethodState { + public readonly SMethod originalMethod; + public readonly int offset; + public readonly bool tryLowerTokens; + public readonly bool tryHigherTokens; + public readonly MethodBase match; + public ResolveMethodState(SMethod originalMethod, int offset, bool tryLowerTokens, bool tryHigherTokens, MethodBase match) { + this.originalMethod = originalMethod; + this.offset = offset; + this.tryLowerTokens = tryLowerTokens; + this.tryHigherTokens = tryHigherTokens; + this.match = match; + } + + public ResolveMethodState With(bool? tryLowerTokens = null, bool? tryHigherTokens = null, MethodBase match = null, int? offset = null) { + return new ResolveMethodState( + originalMethod, + offset ?? this.offset, + tryLowerTokens ?? this.tryLowerTokens, + tryHigherTokens ?? this.tryHigherTokens, + match ?? this.match); + } + } + + struct ResolveMethodResult { + public readonly MethodBase resolvedMethod; + public readonly bool tokenOutOfRange; + public ResolveMethodResult(MethodBase resolvedMethod, bool tokenOutOfRange) { + this.resolvedMethod = resolvedMethod; + this.tokenOutOfRange = tokenOutOfRange; + } + } + + ResolveMethodState TryResolveMethod(SMethod originalMethod, MethodBase patchMethod) { + var state = new ResolveMethodState(originalMethod, offset: 0, tryLowerTokens: true, tryHigherTokens: true, match: null); + var result = TryResolveMethodCore(state.originalMethod, patchMethod, 0); + if(result.resolvedMethod != null) { + return state.With(match: result.resolvedMethod); + } + state = state.With(offset: 1); + const int tries = 100000; + while(state.offset <= tries && (state.tryHigherTokens || state.tryLowerTokens)) { + if(state.tryHigherTokens) { + result = TryResolveMethodCore(originalMethod, patchMethod, state.offset); + if(result.resolvedMethod != null) { + return state.With(match: result.resolvedMethod); + } else if(result.tokenOutOfRange) { + state = state.With(tryHigherTokens: false); + } + } + if(state.tryLowerTokens) { + result = TryResolveMethodCore(originalMethod, patchMethod, -state.offset); + if(result.resolvedMethod != null) { + return state.With(match: result.resolvedMethod); + } else if(result.tokenOutOfRange) { + state = state.With(tryLowerTokens: false); + } + } + state = state.With(offset: state.offset + 1); + } + return state; + } + + + ResolveMethodResult TryResolveMethodCore(SMethod methodToResolve, MethodBase patchMethod, int offset) { + bool tokenOutOfRange = false; + MethodBase resolvedMethod = null; + try { + resolvedMethod = TryGetMethodBaseWithRelativeToken(methodToResolve, offset); + if(!MethodCompatiblity.AreMethodsCompatible(resolvedMethod, patchMethod)) { + resolvedMethod = null; + } + } catch (SymbolResolvingFailedException ex) when(ex.InnerException is ArgumentOutOfRangeException) { + tokenOutOfRange = true; + } catch (ArgumentOutOfRangeException) { + tokenOutOfRange = true; + } + return new ResolveMethodResult(resolvedMethod, tokenOutOfRange); + } + + MethodBase TryGetMethodBaseWithRelativeToken(SMethod sOriginalMethod, int offset) { + return symbolResolver.Resolve(new SMethod(sOriginalMethod.assemblyName, + sOriginalMethod.displayName, + sOriginalMethod.metadataToken + offset, + sOriginalMethod.genericTypeArguments, + sOriginalMethod.genericTypeArguments, + sOriginalMethod.simpleName)); + } + + string HandleMethodPatchFailure(SMethod method, Exception exception) { + var err = $"Failed to apply patch for method {method.displayName} in assembly {method.assemblyName}\n{exception}"; + Log.Warning(err); + return err; + } + + void EnsureSymbolResolver() { + if (symbolResolver == null) { + var searchPaths = new HashSet(); + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + var assembliesByName = new Dictionary>(); + for (var i = 0; i < assemblies.Length; i++) { + var name = assemblies[i].GetNameSafe(); + List list; + if (!assembliesByName.TryGetValue(name, out list)) { + assembliesByName.Add(name, list = new List()); + } + list.Add(assemblies[i]); + + if(assemblies[i].IsDynamic) continue; + + var location = assemblies[i].Location; + if(File.Exists(location)) { + searchPaths.Add(Path.GetDirectoryName(Path.GetFullPath(location))); + } + } + symbolResolver = new SymbolResolver(assembliesByName); + assemblySearchPaths = searchPaths.ToArray(); + } + } + + + //Allow one save operation at a time. + readonly SemaphoreSlim gate = new SemaphoreSlim(1); + public async Task SaveAppliedPatches(string filePath) { + await gate.WaitAsync(); + try { + await SaveAppliedPatchesNoLock(filePath); + } finally { + gate.Release(); + } + } + + async Task SaveAppliedPatchesNoLock(string filePath) { + if (filePath == null) { + throw new ArgumentNullException(nameof(filePath)); + } + filePath = Path.GetFullPath(filePath); + var dir = Path.GetDirectoryName(filePath); + if(string.IsNullOrEmpty(dir)) { + throw new ArgumentException("Invalid path: " + filePath, nameof(filePath)); + } + Directory.CreateDirectory(dir); + var history = patchHistory.ToList(); + + PlayerLog("Saving {0} applied patches to {1}", history.Count, filePath); + + await Task.Run(() => { + using (FileStream fs = File.Create(filePath)) + using (StreamWriter sw = new StreamWriter(fs)) + using (JsonWriter writer = new JsonTextWriter(sw)) { + JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings { + Converters = new List { new MethodPatchResponsesConverter() } + }); + serializer.Serialize(writer, history); + } + }); + } + + public void InitPatchesBlocked(string filePath) { + seenResponses.Clear(); + var file = new FileInfo(filePath); + if (file.Exists) { + using(var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.SequentialScan)) + using (StreamReader sr = new StreamReader(fs)) + using (JsonReader reader = new JsonTextReader(sr)) { + JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings { + Converters = new List { new MethodPatchResponsesConverter() } + }); + pendingPatches = serializer.Deserialize>(reader); + } + ApplyPatches(persist: false); + } + } + + + [StringFormatMethod("format")] + static void PlayerLog(string format, params object[] args) { +#if !UNITY_EDITOR + HotReload.Log.Info(format, args); +#endif //!UNITY_EDITOR + } + + class SimpleMethodComparer : IEqualityComparer { + public static readonly SimpleMethodComparer I = new SimpleMethodComparer(); + SimpleMethodComparer() { } + public bool Equals(SMethod x, SMethod y) => x.metadataToken == y.metadataToken; + public int GetHashCode(SMethod x) { + return x.metadataToken; + } + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs.meta new file mode 100644 index 000000000..17d975b6b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: b6c8477b90c3f384f8124d62a5dc6e74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo.meta new file mode 100644 index 000000000..d67b17944 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 55206f9d10104e838249bf8ac177e332 +timeCreated: 1677091847 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes.meta new file mode 100644 index 000000000..a16c17b2f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c895e9065d763824f9211fa8054f7c2e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity new file mode 100644 index 000000000..a967bee59 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity @@ -0,0 +1,1121 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 463b4a464af955e4d8d6b0a2923d94d0, type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &19295889 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 19295893} + - component: {fileID: 19295892} + - component: {fileID: 19295891} + - component: {fileID: 19295890} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &19295890 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &19295891 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &19295892 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &19295893 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &249270788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 249270791} + - component: {fileID: 249270790} + - component: {fileID: 249270789} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &249270789 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_Enabled: 1 +--- !u!20 &249270790 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &249270791 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &460271676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 460271677} + - component: {fileID: 460271679} + - component: {fileID: 460271678} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &460271677 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 511172213} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -28.681885, y: -20.492146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &460271678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 24 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Open Script +--- !u!222 &460271679 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_CullTransparentMesh: 0 +--- !u!1 &511172212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 511172213} + - component: {fileID: 511172216} + - component: {fileID: 511172215} + - component: {fileID: 511172214} + m_Layer: 5 + m_Name: Button open script + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &511172213 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 460271677} + m_Father: {fileID: 649153321} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -256.6, y: 118} + m_SizeDelta: {x: 392.12805, y: 72.27574} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &511172214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 511172215} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &511172215 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &511172216 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_CullTransparentMesh: 0 +--- !u!1 &649153317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 649153321} + - component: {fileID: 649153320} + - component: {fileID: 649153319} + - component: {fileID: 649153318} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &649153318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &649153319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1280, y: 720} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &649153320 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 249270790} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &649153321 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1537524790} + - {fileID: 1847025553} + - {fileID: 511172213} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &700195177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 700195180} + - component: {fileID: 700195179} + - component: {fileID: 700195178} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &700195178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &700195179 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &700195180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &965437870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 965437872} + - component: {fileID: 965437871} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &965437871 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965437870} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &965437872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965437870} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1101930858 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1101930859} + - component: {fileID: 1101930861} + - component: {fileID: 1101930860} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1101930859 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1847025553} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -28.681885, y: -20.492146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1101930860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 24 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Open Editor tab +--- !u!222 &1101930861 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_CullTransparentMesh: 0 +--- !u!1 &1537524789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1537524790} + - component: {fileID: 1537524792} + - component: {fileID: 1537524791} + m_Layer: 5 + m_Name: InformationText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1537524790 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 649153321} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.00000095367, y: 215.4} + m_SizeDelta: {x: 861.9848, y: 122.55513} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1537524791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hot Reload is not running yet +--- !u!222 &1537524792 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_CullTransparentMesh: 0 +--- !u!1 &1847025552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1847025553} + - component: {fileID: 1847025556} + - component: {fileID: 1847025555} + - component: {fileID: 1847025554} + m_Layer: 5 + m_Name: Button open editor tab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1847025553 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1101930859} + m_Father: {fileID: 649153321} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 218.9, y: 118} + m_SizeDelta: {x: 392.12805, y: 72.27574} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1847025554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1847025555} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1847025555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1847025556 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_CullTransparentMesh: 0 +--- !u!1 &2132145875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2132145876} + - component: {fileID: 2132145877} + m_Layer: 0 + m_Name: HotReloadDemo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2132145876 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2132145875} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 18.716805, y: 53.419094, z: 92.546875} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2132145877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2132145875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5a2e4d3f095a9441688c70278068eee0, type: 3} + m_Name: + m_EditorClassIdentifier: + cube: {fileID: 19295889} + informationText: {fileID: 1537524791} + openWindowButton: {fileID: 1847025554} + openScriptButton: {fileID: 511172214} + thisScript: {fileID: 11500000, guid: 5a2e4d3f095a9441688c70278068eee0, type: 3} diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity.meta new file mode 100644 index 000000000..505e36218 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: ae744488364b34fcf8c80218eadc721c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity new file mode 100644 index 000000000..9ad180f2c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity @@ -0,0 +1,9607 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 961e97ae3d4011b47a1198a930f5c30d, type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &19295889 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 19295893} + - component: {fileID: 19295892} + - component: {fileID: 19295891} + - component: {fileID: 19295890} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &19295890 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &19295891 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &19295892 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &19295893 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &40618803 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 40618804} + - component: {fileID: 40618807} + - component: {fileID: 40618806} + - component: {fileID: 40618805} + m_Layer: 0 + m_Name: Cube (48) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &40618804 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40618803} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 2.4375737, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &40618805 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40618803} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &40618806 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40618803} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &40618807 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40618803} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &53988356 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 53988357} + - component: {fileID: 53988360} + - component: {fileID: 53988359} + - component: {fileID: 53988358} + m_Layer: 0 + m_Name: Cube (75) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &53988357 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53988356} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 2.427574, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &53988358 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53988356} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &53988359 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53988356} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &53988360 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53988356} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &69029314 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 69029315} + - component: {fileID: 69029318} + - component: {fileID: 69029317} + - component: {fileID: 69029316} + m_Layer: 0 + m_Name: Cube (16) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &69029315 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69029314} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: -1.6699998, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &69029316 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69029314} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &69029317 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69029314} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &69029318 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69029314} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &121342030 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 121342031} + - component: {fileID: 121342034} + - component: {fileID: 121342033} + - component: {fileID: 121342032} + m_Layer: 0 + m_Name: Cube (43) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &121342031 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121342030} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &121342032 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121342030} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &121342033 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121342030} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &121342034 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121342030} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &127719937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 127719938} + - component: {fileID: 127719941} + - component: {fileID: 127719940} + - component: {fileID: 127719939} + m_Layer: 0 + m_Name: Cube (67) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &127719938 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127719937} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 2.4375737, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &127719939 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127719937} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &127719940 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127719937} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &127719941 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127719937} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &128004585 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 128004586} + - component: {fileID: 128004589} + - component: {fileID: 128004588} + - component: {fileID: 128004587} + m_Layer: 0 + m_Name: Cube (56) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &128004586 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128004585} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 2.427574, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &128004587 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128004585} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &128004588 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128004585} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &128004589 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128004585} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &132063619 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 132063620} + - component: {fileID: 132063623} + - component: {fileID: 132063622} + - component: {fileID: 132063621} + m_Layer: 0 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &132063620 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132063619} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &132063621 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132063619} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &132063622 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132063619} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &132063623 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132063619} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &133838188 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 133838189} + - component: {fileID: 133838192} + - component: {fileID: 133838191} + - component: {fileID: 133838190} + m_Layer: 0 + m_Name: Cube (62) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &133838189 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133838188} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &133838190 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133838188} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &133838191 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133838188} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &133838192 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133838188} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &181686442 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 181686443} + - component: {fileID: 181686446} + - component: {fileID: 181686445} + - component: {fileID: 181686444} + m_Layer: 0 + m_Name: Cube (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &181686443 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181686442} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &181686444 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181686442} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &181686445 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181686442} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &181686446 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181686442} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &218081520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 218081521} + - component: {fileID: 218081524} + - component: {fileID: 218081523} + - component: {fileID: 218081522} + m_Layer: 0 + m_Name: Cube (66) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &218081521 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218081520} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 2.4375737, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &218081522 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218081520} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &218081523 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218081520} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &218081524 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218081520} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &249270788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 249270791} + - component: {fileID: 249270790} + - component: {fileID: 249270789} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &249270789 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_Enabled: 1 +--- !u!20 &249270790 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &249270791 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &249919994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 249919995} + - component: {fileID: 249919998} + - component: {fileID: 249919997} + - component: {fileID: 249919996} + m_Layer: 0 + m_Name: Cube (50) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &249919995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249919994} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &249919996 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249919994} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &249919997 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249919994} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &249919998 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249919994} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &262969854 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 262969855} + - component: {fileID: 262969858} + - component: {fileID: 262969857} + - component: {fileID: 262969856} + m_Layer: 0 + m_Name: Cube (30) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &262969855 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262969854} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &262969856 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262969854} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &262969857 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262969854} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &262969858 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262969854} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &266848583 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 266848584} + - component: {fileID: 266848587} + - component: {fileID: 266848586} + - component: {fileID: 266848585} + m_Layer: 0 + m_Name: Cube (21) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &266848584 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266848583} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &266848585 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266848583} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &266848586 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266848583} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &266848587 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266848583} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &280025523 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 280025524} + - component: {fileID: 280025527} + - component: {fileID: 280025526} + - component: {fileID: 280025525} + m_Layer: 0 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &280025524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 280025523} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: -1.6600001, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &280025525 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 280025523} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &280025526 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 280025523} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &280025527 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 280025523} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &282541332 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 282541333} + - component: {fileID: 282541336} + - component: {fileID: 282541335} + - component: {fileID: 282541334} + m_Layer: 0 + m_Name: Cube (52) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &282541333 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282541332} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &282541334 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282541332} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &282541335 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282541332} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &282541336 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282541332} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &297017159 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 297017160} + - component: {fileID: 297017163} + - component: {fileID: 297017162} + - component: {fileID: 297017161} + m_Layer: 0 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &297017160 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297017159} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: -1.66, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &297017161 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297017159} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &297017162 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297017159} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &297017163 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297017159} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &297623418 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 297623419} + - component: {fileID: 297623422} + - component: {fileID: 297623421} + - component: {fileID: 297623420} + m_Layer: 0 + m_Name: Cube (76) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &297623419 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297623418} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 2.427574, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &297623420 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297623418} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &297623421 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297623418} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &297623422 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297623418} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &315895885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 315895886} + - component: {fileID: 315895889} + - component: {fileID: 315895888} + - component: {fileID: 315895887} + m_Layer: 0 + m_Name: Cube (72) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &315895886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315895885} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &315895887 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315895885} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &315895888 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315895885} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &315895889 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315895885} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &321495839 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 321495840} + m_Layer: 0 + m_Name: Cubes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &321495840 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 321495839} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.908883, y: -0.8224261, z: -0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 19295893} + - {fileID: 323745810} + - {fileID: 582255912} + - {fileID: 1893598706} + - {fileID: 132063620} + - {fileID: 297017160} + - {fileID: 768601852} + - {fileID: 1931512540} + - {fileID: 280025524} + - {fileID: 1281233703} + - {fileID: 1927368435} + - {fileID: 2042268981} + - {fileID: 1682534256} + - {fileID: 181686443} + - {fileID: 351532142} + - {fileID: 1500025043} + - {fileID: 69029315} + - {fileID: 667369431} + - {fileID: 375087532} + - {fileID: 1124320615} + - {fileID: 927111012} + - {fileID: 266848584} + - {fileID: 2063974669} + - {fileID: 1010368909} + - {fileID: 1343033883} + - {fileID: 781926843} + - {fileID: 341472300} + - {fileID: 2136109399} + - {fileID: 677037662} + - {fileID: 1973025879} + - {fileID: 262969855} + - {fileID: 1399883246} + - {fileID: 743324179} + - {fileID: 1586797431} + - {fileID: 1123278460} + - {fileID: 928584462} + - {fileID: 1069134373} + - {fileID: 2014093030} + - {fileID: 792419466} + - {fileID: 1855770257} + - {fileID: 893274498} + - {fileID: 500782909} + - {fileID: 443249060} + - {fileID: 121342031} + - {fileID: 1130193477} + - {fileID: 523436227} + - {fileID: 1600668863} + - {fileID: 2053621922} + - {fileID: 40618804} + - {fileID: 738032838} + - {fileID: 249919995} + - {fileID: 835270569} + - {fileID: 282541333} + - {fileID: 519530843} + - {fileID: 1774902065} + - {fileID: 1019461522} + - {fileID: 128004586} + - {fileID: 1231537575} + - {fileID: 1965297415} + - {fileID: 589500252} + - {fileID: 1218495767} + - {fileID: 778191808} + - {fileID: 133838189} + - {fileID: 1983101811} + - {fileID: 387856195} + - {fileID: 2102038396} + - {fileID: 218081521} + - {fileID: 127719938} + - {fileID: 1555484938} + - {fileID: 1876148967} + - {fileID: 1228425737} + - {fileID: 801020416} + - {fileID: 315895886} + - {fileID: 1768551574} + - {fileID: 1850807847} + - {fileID: 53988357} + - {fileID: 297623419} + - {fileID: 1946060858} + - {fileID: 1380444550} + - {fileID: 643205569} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &323745809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 323745810} + - component: {fileID: 323745813} + - component: {fileID: 323745812} + - component: {fileID: 323745811} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &323745810 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323745809} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &323745811 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323745809} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &323745812 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323745809} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &323745813 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323745809} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &341472299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 341472300} + - component: {fileID: 341472303} + - component: {fileID: 341472302} + - component: {fileID: 341472301} + m_Layer: 0 + m_Name: Cube (26) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &341472300 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341472299} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: -1.6600001, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &341472301 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341472299} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &341472302 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341472299} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &341472303 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341472299} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &351532141 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 351532142} + - component: {fileID: 351532145} + - component: {fileID: 351532144} + - component: {fileID: 351532143} + m_Layer: 0 + m_Name: Cube (14) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &351532142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351532141} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &351532143 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351532141} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &351532144 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351532141} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &351532145 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351532141} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &375087531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 375087532} + - component: {fileID: 375087535} + - component: {fileID: 375087534} + - component: {fileID: 375087533} + m_Layer: 0 + m_Name: Cube (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &375087532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375087531} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: -1.67, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &375087533 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375087531} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &375087534 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375087531} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &375087535 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375087531} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &387856194 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 387856195} + - component: {fileID: 387856198} + - component: {fileID: 387856197} + - component: {fileID: 387856196} + m_Layer: 0 + m_Name: Cube (64) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &387856195 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387856194} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &387856196 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387856194} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &387856197 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387856194} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &387856198 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387856194} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &443249059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 443249060} + - component: {fileID: 443249063} + - component: {fileID: 443249062} + - component: {fileID: 443249061} + m_Layer: 0 + m_Name: Cube (42) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &443249060 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443249059} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &443249061 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443249059} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &443249062 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443249059} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &443249063 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443249059} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &460271676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 460271677} + - component: {fileID: 460271679} + - component: {fileID: 460271678} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &460271677 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 511172213} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -28.681885, y: -20.492146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &460271678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 24 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Open Script +--- !u!222 &460271679 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_CullTransparentMesh: 0 +--- !u!1 &500782908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 500782909} + - component: {fileID: 500782912} + - component: {fileID: 500782911} + - component: {fileID: 500782910} + m_Layer: 0 + m_Name: Cube (41) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &500782909 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500782908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &500782910 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500782908} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &500782911 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500782908} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &500782912 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500782908} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &511172212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 511172213} + - component: {fileID: 511172216} + - component: {fileID: 511172215} + - component: {fileID: 511172214} + m_Layer: 5 + m_Name: Button open script + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &511172213 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.6553401, y: 0.6553401, z: 0.6553401} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 460271677} + m_Father: {fileID: 649153321} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 159, y: 36} + m_SizeDelta: {x: 392.12805, y: 72.27574} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &511172214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 511172215} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &511172215 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &511172216 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_CullTransparentMesh: 0 +--- !u!1 &519530842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519530843} + - component: {fileID: 519530846} + - component: {fileID: 519530845} + - component: {fileID: 519530844} + m_Layer: 0 + m_Name: Cube (53) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &519530843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519530842} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &519530844 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519530842} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &519530845 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519530842} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &519530846 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519530842} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &523436226 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 523436227} + - component: {fileID: 523436230} + - component: {fileID: 523436229} + - component: {fileID: 523436228} + m_Layer: 0 + m_Name: Cube (45) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &523436227 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523436226} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 2.437574, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &523436228 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523436226} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &523436229 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523436226} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &523436230 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523436226} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &582255911 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 582255912} + - component: {fileID: 582255915} + - component: {fileID: 582255914} + - component: {fileID: 582255913} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &582255912 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582255911} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &582255913 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582255911} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &582255914 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582255911} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &582255915 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582255911} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &589500251 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 589500252} + - component: {fileID: 589500255} + - component: {fileID: 589500254} + - component: {fileID: 589500253} + m_Layer: 0 + m_Name: Cube (59) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &589500252 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589500251} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 2.427574, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &589500253 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589500251} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &589500254 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589500251} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &589500255 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589500251} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &643205568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 643205569} + - component: {fileID: 643205572} + - component: {fileID: 643205571} + - component: {fileID: 643205570} + m_Layer: 0 + m_Name: Cube (79) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &643205569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 643205568} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 2.427574, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &643205570 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 643205568} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &643205571 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 643205568} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &643205572 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 643205568} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &649153317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 649153321} + - component: {fileID: 649153320} + - component: {fileID: 649153319} + - component: {fileID: 649153318} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &649153318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &649153319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1000, y: 557} + m_ScreenMatchMode: 1 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &649153320 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &649153321 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1537524790} + - {fileID: 511172213} + - {fileID: 1847025553} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &667369430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 667369431} + - component: {fileID: 667369434} + - component: {fileID: 667369433} + - component: {fileID: 667369432} + m_Layer: 0 + m_Name: Cube (17) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &667369431 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667369430} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: -1.6699998, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &667369432 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667369430} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &667369433 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667369430} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &667369434 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667369430} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &677037661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 677037662} + - component: {fileID: 677037665} + - component: {fileID: 677037664} + - component: {fileID: 677037663} + m_Layer: 0 + m_Name: Cube (28) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &677037662 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677037661} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: -1.6600001, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &677037663 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677037661} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &677037664 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677037661} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &677037665 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677037661} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &700195177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 700195180} + - component: {fileID: 700195179} + - component: {fileID: 700195178} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &700195178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &700195179 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &700195180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &738032837 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 738032838} + - component: {fileID: 738032841} + - component: {fileID: 738032840} + - component: {fileID: 738032839} + m_Layer: 0 + m_Name: Cube (49) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &738032838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738032837} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 2.4375737, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &738032839 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738032837} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &738032840 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738032837} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &738032841 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738032837} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &743324178 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 743324179} + - component: {fileID: 743324182} + - component: {fileID: 743324181} + - component: {fileID: 743324180} + m_Layer: 0 + m_Name: Cube (32) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &743324179 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 743324178} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &743324180 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 743324178} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &743324181 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 743324178} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &743324182 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 743324178} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &768601851 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 768601852} + - component: {fileID: 768601855} + - component: {fileID: 768601854} + - component: {fileID: 768601853} + m_Layer: 0 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &768601852 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768601851} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: -1.6600001, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &768601853 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768601851} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &768601854 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768601851} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &768601855 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768601851} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &778191807 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 778191808} + - component: {fileID: 778191811} + - component: {fileID: 778191810} + - component: {fileID: 778191809} + m_Layer: 0 + m_Name: Cube (61) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &778191808 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778191807} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &778191809 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778191807} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &778191810 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778191807} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &778191811 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778191807} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &781926842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 781926843} + - component: {fileID: 781926846} + - component: {fileID: 781926845} + - component: {fileID: 781926844} + m_Layer: 0 + m_Name: Cube (25) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &781926843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781926842} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: -1.66, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &781926844 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781926842} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &781926845 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781926842} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &781926846 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781926842} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &792419465 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 792419466} + - component: {fileID: 792419469} + - component: {fileID: 792419468} + - component: {fileID: 792419467} + m_Layer: 0 + m_Name: Cube (38) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &792419466 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792419465} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: -1.67, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &792419467 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792419465} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &792419468 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792419465} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &792419469 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792419465} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &801020415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 801020416} + - component: {fileID: 801020419} + - component: {fileID: 801020418} + - component: {fileID: 801020417} + m_Layer: 0 + m_Name: Cube (71) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &801020416 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801020415} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &801020417 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801020415} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &801020418 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801020415} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &801020419 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801020415} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &835270568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 835270569} + - component: {fileID: 835270572} + - component: {fileID: 835270571} + - component: {fileID: 835270570} + m_Layer: 0 + m_Name: Cube (51) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &835270569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835270568} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &835270570 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835270568} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &835270571 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835270568} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &835270572 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835270568} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &893274497 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 893274498} + - component: {fileID: 893274501} + - component: {fileID: 893274500} + - component: {fileID: 893274499} + m_Layer: 0 + m_Name: Cube (40) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &893274498 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893274497} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &893274499 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893274497} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &893274500 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893274497} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &893274501 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893274497} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &927111011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 927111012} + - component: {fileID: 927111015} + - component: {fileID: 927111014} + - component: {fileID: 927111013} + m_Layer: 0 + m_Name: Cube (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &927111012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 927111011} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &927111013 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 927111011} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &927111014 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 927111011} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &927111015 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 927111011} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &928584461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 928584462} + - component: {fileID: 928584465} + - component: {fileID: 928584464} + - component: {fileID: 928584463} + m_Layer: 0 + m_Name: Cube (35) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &928584462 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928584461} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: -1.6699998, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &928584463 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928584461} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &928584464 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928584461} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &928584465 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928584461} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &965437870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 965437872} + - component: {fileID: 965437871} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &965437871 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965437870} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &965437872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965437870} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1010368908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1010368909} + - component: {fileID: 1010368912} + - component: {fileID: 1010368911} + - component: {fileID: 1010368910} + m_Layer: 0 + m_Name: Cube (23) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1010368909 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010368908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1010368910 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010368908} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1010368911 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010368908} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1010368912 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010368908} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1019461521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1019461522} + - component: {fileID: 1019461525} + - component: {fileID: 1019461524} + - component: {fileID: 1019461523} + m_Layer: 0 + m_Name: Cube (55) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1019461522 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019461521} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 2.427574, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1019461523 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019461521} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1019461524 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019461521} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1019461525 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019461521} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1069134372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1069134373} + - component: {fileID: 1069134376} + - component: {fileID: 1069134375} + - component: {fileID: 1069134374} + m_Layer: 0 + m_Name: Cube (36) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1069134373 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1069134372} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: -1.6699998, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1069134374 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1069134372} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1069134375 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1069134372} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1069134376 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1069134372} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1101930858 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1101930859} + - component: {fileID: 1101930861} + - component: {fileID: 1101930860} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1101930859 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1847025553} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -28.681885, y: -20.492146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1101930860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 24 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Open Editor tab +--- !u!222 &1101930861 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_CullTransparentMesh: 0 +--- !u!1 &1123278459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1123278460} + - component: {fileID: 1123278463} + - component: {fileID: 1123278462} + - component: {fileID: 1123278461} + m_Layer: 0 + m_Name: Cube (34) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1123278460 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1123278459} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1123278461 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1123278459} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1123278462 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1123278459} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1123278463 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1123278459} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1124320614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1124320615} + - component: {fileID: 1124320618} + - component: {fileID: 1124320617} + - component: {fileID: 1124320616} + m_Layer: 0 + m_Name: Cube (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1124320615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124320614} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: -1.6699998, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1124320616 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124320614} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1124320617 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124320614} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1124320618 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124320614} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1130193476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1130193477} + - component: {fileID: 1130193480} + - component: {fileID: 1130193479} + - component: {fileID: 1130193478} + m_Layer: 0 + m_Name: Cube (44) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1130193477 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1130193476} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1130193478 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1130193476} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1130193479 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1130193476} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1130193480 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1130193476} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1218495766 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1218495767} + - component: {fileID: 1218495770} + - component: {fileID: 1218495769} + - component: {fileID: 1218495768} + m_Layer: 0 + m_Name: Cube (60) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1218495767 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218495766} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1218495768 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218495766} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1218495769 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218495766} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1218495770 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218495766} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1228425736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1228425737} + - component: {fileID: 1228425740} + - component: {fileID: 1228425739} + - component: {fileID: 1228425738} + m_Layer: 0 + m_Name: Cube (70) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1228425737 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228425736} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1228425738 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228425736} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1228425739 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228425736} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1228425740 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228425736} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1231537574 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1231537575} + - component: {fileID: 1231537578} + - component: {fileID: 1231537577} + - component: {fileID: 1231537576} + m_Layer: 0 + m_Name: Cube (57) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1231537575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1231537574} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 2.427574, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1231537576 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1231537574} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1231537577 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1231537574} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1231537578 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1231537574} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1281233702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1281233703} + - component: {fileID: 1281233706} + - component: {fileID: 1281233705} + - component: {fileID: 1281233704} + m_Layer: 0 + m_Name: Cube (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1281233703 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281233702} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: -1.6600001, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1281233704 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281233702} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1281233705 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281233702} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1281233706 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281233702} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1343033882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1343033883} + - component: {fileID: 1343033886} + - component: {fileID: 1343033885} + - component: {fileID: 1343033884} + m_Layer: 0 + m_Name: Cube (24) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1343033883 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343033882} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1343033884 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343033882} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1343033885 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343033882} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1343033886 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343033882} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1380444549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1380444550} + - component: {fileID: 1380444553} + - component: {fileID: 1380444552} + - component: {fileID: 1380444551} + m_Layer: 0 + m_Name: Cube (78) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1380444550 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380444549} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 2.4275737, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1380444551 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380444549} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1380444552 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380444549} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1380444553 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380444549} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1399883245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1399883246} + - component: {fileID: 1399883249} + - component: {fileID: 1399883248} + - component: {fileID: 1399883247} + m_Layer: 0 + m_Name: Cube (31) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1399883246 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399883245} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1399883247 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399883245} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1399883248 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399883245} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1399883249 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399883245} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1500025042 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1500025043} + - component: {fileID: 1500025046} + - component: {fileID: 1500025045} + - component: {fileID: 1500025044} + m_Layer: 0 + m_Name: Cube (15) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1500025043 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500025042} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: -1.6699998, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1500025044 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500025042} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1500025045 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500025042} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1500025046 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500025042} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1537524789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1537524790} + - component: {fileID: 1537524792} + - component: {fileID: 1537524791} + m_Layer: 5 + m_Name: InformationText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1537524790 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 649153321} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.00000095367, y: 253} + m_SizeDelta: {x: 861.9848, y: 122.55513} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1537524791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 56 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hot Reload is not running yet +--- !u!222 &1537524792 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_CullTransparentMesh: 0 +--- !u!1 &1555484937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1555484938} + - component: {fileID: 1555484941} + - component: {fileID: 1555484940} + - component: {fileID: 1555484939} + m_Layer: 0 + m_Name: Cube (68) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1555484938 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555484937} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 2.4375737, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1555484939 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555484937} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1555484940 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555484937} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1555484941 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555484937} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1586797430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1586797431} + - component: {fileID: 1586797434} + - component: {fileID: 1586797433} + - component: {fileID: 1586797432} + m_Layer: 0 + m_Name: Cube (33) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1586797431 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586797430} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1586797432 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586797430} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1586797433 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586797430} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1586797434 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586797430} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1600668862 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1600668863} + - component: {fileID: 1600668866} + - component: {fileID: 1600668865} + - component: {fileID: 1600668864} + m_Layer: 0 + m_Name: Cube (46) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1600668863 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600668862} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 2.4375737, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1600668864 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600668862} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1600668865 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600668862} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1600668866 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600668862} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1682534255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1682534256} + - component: {fileID: 1682534259} + - component: {fileID: 1682534258} + - component: {fileID: 1682534257} + m_Layer: 0 + m_Name: Cube (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1682534256 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682534255} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1682534257 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682534255} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1682534258 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682534255} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1682534259 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682534255} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1768551573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1768551574} + - component: {fileID: 1768551577} + - component: {fileID: 1768551576} + - component: {fileID: 1768551575} + m_Layer: 0 + m_Name: Cube (73) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1768551574 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768551573} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1768551575 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768551573} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1768551576 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768551573} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1768551577 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768551573} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1774902064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1774902065} + - component: {fileID: 1774902068} + - component: {fileID: 1774902067} + - component: {fileID: 1774902066} + m_Layer: 0 + m_Name: Cube (54) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1774902065 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774902064} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1774902066 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774902064} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1774902067 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774902064} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1774902068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774902064} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1847025552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1847025553} + - component: {fileID: 1847025556} + - component: {fileID: 1847025555} + - component: {fileID: 1847025554} + m_Layer: 5 + m_Name: Button open editor tab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1847025553 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.65534, y: 0.65534, z: 0.65534} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1101930859} + m_Father: {fileID: 649153321} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -153, y: 36} + m_SizeDelta: {x: 393.12805, y: 73.27576} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1847025554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1847025555} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1847025555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1847025556 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_CullTransparentMesh: 0 +--- !u!1 &1850807846 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1850807847} + - component: {fileID: 1850807850} + - component: {fileID: 1850807849} + - component: {fileID: 1850807848} + m_Layer: 0 + m_Name: Cube (74) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1850807847 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850807846} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1850807848 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850807846} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1850807849 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850807846} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1850807850 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850807846} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1855770256 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1855770257} + - component: {fileID: 1855770260} + - component: {fileID: 1855770259} + - component: {fileID: 1855770258} + m_Layer: 0 + m_Name: Cube (39) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1855770257 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1855770256} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: -1.6699998, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1855770258 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1855770256} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1855770259 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1855770256} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1855770260 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1855770256} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1876148966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1876148967} + - component: {fileID: 1876148970} + - component: {fileID: 1876148969} + - component: {fileID: 1876148968} + m_Layer: 0 + m_Name: Cube (69) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1876148967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876148966} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 2.4375737, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1876148968 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876148966} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1876148969 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876148966} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1876148970 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876148966} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1893598705 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1893598706} + - component: {fileID: 1893598709} + - component: {fileID: 1893598708} + - component: {fileID: 1893598707} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1893598706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1893598705} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1893598707 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1893598705} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1893598708 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1893598705} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1893598709 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1893598705} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1927368434 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1927368435} + - component: {fileID: 1927368438} + - component: {fileID: 1927368437} + - component: {fileID: 1927368436} + m_Layer: 0 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1927368435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927368434} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1927368436 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927368434} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1927368437 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927368434} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1927368438 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927368434} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1931512539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1931512540} + - component: {fileID: 1931512543} + - component: {fileID: 1931512542} + - component: {fileID: 1931512541} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1931512540 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931512539} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: -1.6600001, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1931512541 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931512539} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1931512542 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931512539} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1931512543 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931512539} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1946060857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1946060858} + - component: {fileID: 1946060861} + - component: {fileID: 1946060860} + - component: {fileID: 1946060859} + m_Layer: 0 + m_Name: Cube (77) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1946060858 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946060857} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 2.427574, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1946060859 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946060857} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1946060860 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946060857} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1946060861 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946060857} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1965297414 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1965297415} + - component: {fileID: 1965297418} + - component: {fileID: 1965297417} + - component: {fileID: 1965297416} + m_Layer: 0 + m_Name: Cube (58) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1965297415 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1965297414} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 2.4275737, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1965297416 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1965297414} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1965297417 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1965297414} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1965297418 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1965297414} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1973025878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1973025879} + - component: {fileID: 1973025882} + - component: {fileID: 1973025881} + - component: {fileID: 1973025880} + m_Layer: 0 + m_Name: Cube (29) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1973025879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973025878} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: -1.6600001, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1973025880 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973025878} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1973025881 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973025878} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1973025882 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973025878} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1983101810 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1983101811} + - component: {fileID: 1983101814} + - component: {fileID: 1983101813} + - component: {fileID: 1983101812} + m_Layer: 0 + m_Name: Cube (63) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1983101811 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983101810} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1983101812 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983101810} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1983101813 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983101810} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1983101814 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983101810} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2014093029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2014093030} + - component: {fileID: 2014093033} + - component: {fileID: 2014093032} + - component: {fileID: 2014093031} + m_Layer: 0 + m_Name: Cube (37) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2014093030 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2014093029} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: -1.6699998, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2014093031 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2014093029} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2014093032 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2014093029} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2014093033 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2014093029} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2042268980 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2042268981} + - component: {fileID: 2042268984} + - component: {fileID: 2042268983} + - component: {fileID: 2042268982} + m_Layer: 0 + m_Name: Cube (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2042268981 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042268980} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2042268982 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042268980} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2042268983 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042268980} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2042268984 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042268980} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2053621921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2053621922} + - component: {fileID: 2053621925} + - component: {fileID: 2053621924} + - component: {fileID: 2053621923} + m_Layer: 0 + m_Name: Cube (47) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2053621922 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053621921} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 2.4375737, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2053621923 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053621921} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2053621924 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053621921} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2053621925 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053621921} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2063974668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2063974669} + - component: {fileID: 2063974672} + - component: {fileID: 2063974671} + - component: {fileID: 2063974670} + m_Layer: 0 + m_Name: Cube (22) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2063974669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063974668} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2063974670 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063974668} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2063974671 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063974668} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2063974672 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063974668} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2102038395 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2102038396} + - component: {fileID: 2102038399} + - component: {fileID: 2102038398} + - component: {fileID: 2102038397} + m_Layer: 0 + m_Name: Cube (65) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2102038396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102038395} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 2.437574, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2102038397 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102038395} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2102038398 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102038395} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2102038399 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102038395} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2132145875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2132145876} + - component: {fileID: 2132145877} + m_Layer: 0 + m_Name: HotReloadDemo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2132145876 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2132145875} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 18.716805, y: 53.419094, z: 172.31} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2132145877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2132145875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e09948cf1f317d04fbaf410dbfe91656, type: 3} + m_Name: + m_EditorClassIdentifier: + cubes: + - {fileID: 19295893} + - {fileID: 323745810} + - {fileID: 582255912} + - {fileID: 1893598706} + - {fileID: 132063620} + - {fileID: 297017160} + - {fileID: 768601852} + - {fileID: 1931512540} + - {fileID: 280025524} + - {fileID: 1281233703} + - {fileID: 1927368435} + - {fileID: 2042268981} + - {fileID: 1682534256} + - {fileID: 181686443} + - {fileID: 351532142} + - {fileID: 1500025043} + - {fileID: 69029315} + - {fileID: 667369431} + - {fileID: 375087532} + - {fileID: 1124320615} + - {fileID: 927111012} + - {fileID: 266848584} + - {fileID: 2063974669} + - {fileID: 1010368909} + - {fileID: 1343033883} + - {fileID: 781926843} + - {fileID: 341472300} + - {fileID: 2136109399} + - {fileID: 677037662} + - {fileID: 1973025879} + - {fileID: 262969855} + - {fileID: 1399883246} + - {fileID: 743324179} + - {fileID: 1586797431} + - {fileID: 1123278460} + - {fileID: 928584462} + - {fileID: 1069134373} + - {fileID: 2014093030} + - {fileID: 792419466} + - {fileID: 1855770257} + - {fileID: 893274498} + - {fileID: 500782909} + - {fileID: 443249060} + - {fileID: 121342031} + - {fileID: 1130193477} + - {fileID: 523436227} + - {fileID: 1600668863} + - {fileID: 2053621922} + - {fileID: 40618804} + - {fileID: 738032838} + - {fileID: 249919995} + - {fileID: 835270569} + - {fileID: 282541333} + - {fileID: 519530843} + - {fileID: 1774902065} + - {fileID: 1019461522} + - {fileID: 128004586} + - {fileID: 1231537575} + - {fileID: 1965297415} + - {fileID: 589500252} + - {fileID: 1218495767} + - {fileID: 778191808} + - {fileID: 133838189} + - {fileID: 1983101811} + - {fileID: 387856195} + - {fileID: 2102038396} + - {fileID: 218081521} + - {fileID: 127719938} + - {fileID: 1555484938} + - {fileID: 1876148967} + - {fileID: 1228425737} + - {fileID: 801020416} + - {fileID: 315895886} + - {fileID: 1768551574} + - {fileID: 1850807847} + - {fileID: 53988357} + - {fileID: 297623419} + - {fileID: 1946060858} + - {fileID: 1380444550} + - {fileID: 643205569} + informationText: {fileID: 1537524791} + openWindowButton: {fileID: 1847025554} + openScriptButton: {fileID: 511172214} + thisScript: {fileID: 11500000, guid: e09948cf1f317d04fbaf410dbfe91656, type: 3} +--- !u!1 &2136109398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2136109399} + - component: {fileID: 2136109402} + - component: {fileID: 2136109401} + - component: {fileID: 2136109400} + m_Layer: 0 + m_Name: Cube (27) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2136109399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2136109398} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: -1.6600001, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2136109400 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2136109398} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2136109401 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2136109398} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2136109402 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2136109398} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity.meta new file mode 100644 index 000000000..eefb3ca6b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: fad9aa54ab3335844b5a35b9eb6ae286 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting new file mode 100644 index 000000000..3c301a177 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting @@ -0,0 +1,66 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: HotReloadBurstDemoSettings + serializedVersion: 6 + m_GIWorkflowMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_PVRTiledBaking: 0 + m_NumRaysToShootPerTexel: -1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting.meta new file mode 100644 index 000000000..5a510378a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 961e97ae3d4011b47a1198a930f5c30d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts.meta new file mode 100644 index 000000000..f542db884 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30c72b28fb747184ba79468d3571dea4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs new file mode 100644 index 000000000..724abdd5a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs @@ -0,0 +1,179 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.UI; + +namespace SingularityGroup.HotReload.Demo { + class HotReloadBasicDemo : MonoBehaviour { + + public GameObject cube; + public Text informationText; + public Button openWindowButton; + public Button openScriptButton; + public TextAsset thisScript; + + void Start() { + if(Application.isEditor) { + openWindowButton.onClick.AddListener(Demo.I.OpenHotReloadWindow); + openScriptButton.onClick.AddListener(() => Demo.I.OpenScriptFile(thisScript, 31, 13)); + } else { + openWindowButton.gameObject.SetActive(false); + openScriptButton.gameObject.SetActive(false); + informationText.gameObject.SetActive(false); + } + } + + // Update is called once per frame + void Update() { + if (Demo.I.IsServerRunning()) { + informationText.text = "Hot Reload is running"; + } else { + informationText.text = "Hot Reload is not running"; + } + + // // 1. Editing functions in monobehaviours, normal classes or static classes + // // Edit the vector to rotate the cube in the scene differently or change the speed + // var speed = 100; + // cube.transform.Rotate(new Vector3(0, 1, 0) * Time.deltaTime * speed); + + // // 1. Editing functions in monobehaviours, normal classes or static classes + // // Uncomment this code to scale the cube + // cube.transform.localScale = Mathf.Sin(Time.time) * Vector3.one; + + // // 1. Editing functions in monobehaviours, normal classes or static classes + // // Uncomment this code to make the cube move from left to right and back + // var newPos = cube.transform.position += (cube.transform.localScale.x < 0.5 ? Vector3.left : Vector3.right) * Time.deltaTime; + // if(Mathf.Abs(newPos.x) > 10) { + // cube.transform.position = Vector3.zero; + // } + } + + // 2. Editing lambda methods + static Func addFunction = x => { + var result = x + 10; + Debug.Log("Add: " + result); + // // uncomment to change the operator to multiply and log the result + // result = x * 10; + // Debug.Log("Multiply: " + result); + return result; + }; + + // 3. Editing async/await methods + async Task AsyncMethod() { + // await Task.Delay(500); + // Debug.Log("AsyncMethod"); + + // // silicense warning + await Task.CompletedTask; + } + + // 4. Editing properties (get/set) + public static string SomeString { + // edit the get method + get { + var someStringHere = "This is some string"; + return someStringHere; + } + } + + // 5. Editing indexers (square bracket access such as dictionaries) + class CustomDictionary : Dictionary { + public new int this[string key] { + get { + // // uncomment to change the indexer and log a different entry based on case + // return base[key.ToLower()]; + return base[key.ToUpper()]; + } + set { + base[key.ToUpper()] = value; + } + } + } + CustomDictionary randomDict = new CustomDictionary { + { "a", 4 }, + { "A", 5 }, + { "b", 9 }, + { "B", 10 }, + { "c", 14 }, + { "C", 15 }, + { "d", 19 }, + { "D", 20 } + }; + + // 6. Editing operators methods (explicit and implicit operators) + public class Email { + public string Value { get; } + + public Email(string value) { + Value = value; + } + + // Define implicit operator + public static implicit operator string(Email value) + // Uncomment to change the implicit operator + // => value.Value + " FOO"; + => value.Value; + + // // Uncomment to change add an implicit operator + // public static implicit operator byte[](Email value) + // => Encoding.UTF8.GetBytes(value.Value); + + // Define explicit operator + public static explicit operator Email(string value) + => new Email(value); + } + + void LateUpdate() { + // // 2. Editing lambda methods + // addFunction(10); + + + // // 3. Editing async/await methods + // AsyncMethod().Forget(); + + + // // 4. Editing properties (get/set) + // Debug.Log(SomeString); + + + // // 5. Editing indexers (square bracket access such as dictionaries) + // Debug.Log(randomDict["A"]); + + + // // 6. Editing operators methods (explicit and implicit operators) + Email email = new Email("example@example.com"); + // string stringEmail = email; + // Debug.Log(stringEmail); + + // // Uncomment new operator in Email class + Uncomment this to add byte implicit operator + // byte[] byteEmail = email; + // var hexRepresentation = BitConverter.ToString(byteEmail); + // Debug.Log(hexRepresentation); + // Debug.Log(Encoding.UTF8.GetString(byteEmail)); + + // // 7. Editing lambda methods with closures + // // Uncomment to log sorted array + // // Switch a and b to reverse the sorting + // int[] numbers = { 5, 3, 8, 1, 9 }; + // Array.Sort(numbers, (b, a) => a.CompareTo(b)); + // Debug.Log(string.Join(", ", numbers)); + + } + + // This function gets invoked every time it's patched + [InvokeOnHotReloadLocal] + static void OnHotReloadMe() { + // change the string to see the method getting invoked + Debug.Log("Hello there"); + } + + // // 8. Adding event functions + // void OnDisable() { + // Debug.Log("OnDisable"); + // } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs.meta new file mode 100644 index 000000000..493a54afc --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 5a2e4d3f095a9441688c70278068eee0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs new file mode 100644 index 000000000..b7a1fe34f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs @@ -0,0 +1,63 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Jobs; +using UnityEngine.UI; + +namespace SingularityGroup.HotReload.Demo { + public class HotReloadBurstJobsDemo : MonoBehaviour { + public Transform[] cubes; + public Text informationText; + public Button openWindowButton; + public Button openScriptButton; + public TextAsset thisScript; + + TransformAccessArray cubeTransforms; + CubeJob job; + void Awake() { + cubeTransforms = new TransformAccessArray(cubes); + if(Application.isEditor) { + openWindowButton.onClick.AddListener(Demo.I.OpenHotReloadWindow); + openScriptButton.onClick.AddListener(() => Demo.I.OpenScriptFile(thisScript, 49, 17)); + } else { + openWindowButton.gameObject.SetActive(false); + openScriptButton.gameObject.SetActive(false); + } + informationText.gameObject.SetActive(true); + } + + void Update() { + job.deltaTime = Time.deltaTime; + job.time = Time.time; + var handle = job.Schedule(cubeTransforms); + handle.Complete(); + + if (Demo.I.IsServerRunning()) { + informationText.text = "Hot Reload is running"; + } else { + informationText.text = "Hot Reload is not running"; + } + } + + struct CubeJob : IJobParallelForTransform { + public float deltaTime; + public float time; + public void Execute(int index, TransformAccess transform) { + transform.localRotation *= Quaternion.Euler(50 * deltaTime, 0, 0); + + // Uncomment this code to scale the cubes + // var scale = Mathf.Abs(Mathf.Sin(time)); + // transform.localScale = new Vector3(scale, scale, scale); + + // Uncomment this code to make the cube move from left to right and back + // transform.position += (transform.localScale.x < 0.5 ? Vector3.left : Vector3.right) * deltaTime; + } + } + + void OnDestroy() { + cubeTransforms.Dispose(); + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs.meta new file mode 100644 index 000000000..a698fa370 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: e09948cf1f317d04fbaf410dbfe91656 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs new file mode 100644 index 000000000..ca2034aea --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs @@ -0,0 +1,29 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using UnityEngine; + +namespace SingularityGroup.HotReload.Demo { + public interface IDemo { + bool IsServerRunning(); + void OpenHotReloadWindow(); + void OpenScriptFile(TextAsset textAsset, int line, int column); + } + + public static class Demo { + public static IDemo I = new PlayerDemo(); + } + + public class PlayerDemo : IDemo { + public bool IsServerRunning() { + return ServerHealthCheck.I.IsServerHealthy; + } + + public void OpenHotReloadWindow() { + //no-op + } + + public void OpenScriptFile(TextAsset textAsset, int line, int column) { + //no-op + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs.meta new file mode 100644 index 000000000..c5c4cf584 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 04dccdcced0245f1830021fdcad1d28a +timeCreated: 1677321944 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab new file mode 100644 index 000000000..85d676188 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab @@ -0,0 +1,2942 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1013787301382345451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3597930498506735329} + - component: {fileID: 5263297665501092759} + - component: {fileID: 8191138318542799492} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3597930498506735329 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013787301382345451} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8361365728969909008} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5263297665501092759 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013787301382345451} + m_CullTransparentMesh: 0 +--- !u!114 &8191138318542799492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013787301382345451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 22 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Cancel +--- !u!1 &1057795414473985365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8361365728969909008} + - component: {fileID: 9109116132926969505} + - component: {fileID: 6961214002816918688} + - component: {fileID: 5585168207715079851} + m_Layer: 5 + m_Name: ButtonMoreEffort + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8361365728969909008 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057795414473985365} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3597930498506735329} + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -423.1, y: -64.9} + m_SizeDelta: {x: 141.6914, y: 45.0679} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9109116132926969505 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057795414473985365} + m_CullTransparentMesh: 0 +--- !u!114 &6961214002816918688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057795414473985365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5585168207715079851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057795414473985365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.9622642, g: 0.9622642, b: 0.9622642, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6961214002816918688} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1335534115928082901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5505278863775282652} + - component: {fileID: 882497356905571160} + - component: {fileID: 6369210938302316831} + m_Layer: 5 + m_Name: TextSummary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5505278863775282652 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335534115928082901} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 30, y: -39.233} + m_SizeDelta: {x: -105.96521, y: 54.542114} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &882497356905571160 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335534115928082901} + m_CullTransparentMesh: 0 +--- !u!114 &6369210938302316831 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335534115928082901} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Editor and current build are on different commits +--- !u!1 &1390084864838268853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1221019002237951643} + - component: {fileID: 8358362994993817161} + - component: {fileID: 1980611848569999305} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1221019002237951643 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390084864838268853} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7107734678944665722} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -35.811356, y: -12.790634} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8358362994993817161 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390084864838268853} + m_CullTransparentMesh: 0 +--- !u!114 &1980611848569999305 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390084864838268853} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.103773594, g: 0.103773594, b: 0.103773594, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 21 + m_MaxSize: 28 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Continue +--- !u!1 &2338911661825597671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4216036513099635638} + - component: {fileID: 594918778888372109} + - component: {fileID: 2127224386387722146} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4216036513099635638 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2338911661825597671} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4911193491485015256} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &594918778888372109 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2338911661825597671} + m_CullTransparentMesh: 0 +--- !u!114 &2127224386387722146 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2338911661825597671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.103773594, g: 0.103773594, b: 0.103773594, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: More Info +--- !u!1 &2557231470263189725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6280529082113425347} + m_Layer: 5 + m_Name: Information + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6280529082113425347 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2557231470263189725} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3344052376368028088} + - {fileID: 7593666350427564864} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 30, y: -13.59} + m_SizeDelta: {x: -106.39874, y: -142.43198} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2582527480827036942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6528462525361087078} + - component: {fileID: 5585154964765544786} + - component: {fileID: 5675038352245823804} + m_Layer: 5 + m_Name: TextSuggestion + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6528462525361087078 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2582527480827036942} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 30.217, y: 6.0687} + m_SizeDelta: {x: -106.3987, y: -145.1455} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5585154964765544786 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2582527480827036942} + m_CullTransparentMesh: 0 +--- !u!114 &5675038352245823804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2582527480827036942} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 22 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 21 + m_MaxSize: 28 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1.17 + m_Text: 'This can cause errors when the build was made on an old commit. + +' +--- !u!1 &2945586050721362106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7593666350427564864} + - component: {fileID: 4488835628498483499} + - component: {fileID: 6495855994796430067} + m_Layer: 5 + m_Name: TextForDebugging + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &7593666350427564864 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2945586050721362106} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6280529082113425347} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4488835628498483499 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2945586050721362106} + m_CullTransparentMesh: 0 +--- !u!114 &6495855994796430067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2945586050721362106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 29 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Make sure you're on the same LAN/WiFi network +--- !u!1 &3342967049223911331 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3344052376368028088} + - component: {fileID: 4147603110869920048} + - component: {fileID: 116564040413298098} + m_Layer: 5 + m_Name: TextSuggestion + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3344052376368028088 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3342967049223911331} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6280529082113425347} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 5.6499987} + m_SizeDelta: {x: 0, y: 11.300002} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4147603110869920048 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3342967049223911331} + m_CullTransparentMesh: 0 +--- !u!114 &116564040413298098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3342967049223911331} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 23 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 275 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Make sure you're on the same WiFi network and Hot Reload is running +--- !u!1 &3751191164850618597 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3751191164850618611} + - component: {fileID: 3751191164850618616} + - component: {fileID: 3751191164850618560} + m_Layer: 5 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3751191164850618611 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618597} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677765351015} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 46.1, y: -43.161} + m_SizeDelta: {x: 54.687653, y: 54.687653} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3751191164850618616 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618597} + m_CullTransparentMesh: 0 +--- !u!114 &3751191164850618560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618597} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 90cf8e542151548c6aa3cba26467e144, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &3751191164850618600 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3751191164850618614} + - component: {fileID: 3751191164850618595} + - component: {fileID: 3751191164850618571} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3751191164850618614 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618600} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086678661718217} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3751191164850618595 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618600} + m_CullTransparentMesh: 0 +--- !u!114 &3751191164850618571 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 22 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hide +--- !u!1 &3751191164850618601 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3751191164850618615} + - component: {fileID: 3751191164850618620} + - component: {fileID: 3751191164850618564} + m_Layer: 5 + m_Name: Prompts + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3751191164850618615 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618601} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4967086677765351015} + - {fileID: 4967086678334773008} + - {fileID: 6484505723585156786} + m_Father: {fileID: 4967086677379066171} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -0.00024414062, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3751191164850618620 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618601} + m_CullTransparentMesh: 0 +--- !u!114 &3751191164850618564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618601} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d92cdbfacafd433ca77184c22a384a6d, type: 3} + m_Name: + m_EditorClassIdentifier: + retryPrompt: {fileID: 4967086678334773011} + connectedPrompt: {fileID: 4967086677765351014} + questionPrompt: {fileID: 6563246299181214611} + fallbackEventSystem: {fileID: 8054601594198067103} +--- !u!1 &3751191164850618602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3751191164850618608} + - component: {fileID: 3751191164850618621} + - component: {fileID: 3751191164850618565} + m_Layer: 5 + m_Name: Summary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3751191164850618608 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618602} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677765351015} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 42.160004, y: -43.00023} + m_SizeDelta: {x: -109.740295, y: 54.366207} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3751191164850618621 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618602} + m_CullTransparentMesh: 0 +--- !u!114 &3751191164850618565 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 32 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connecting... +--- !u!1 &4116732687138738479 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8252921096633957241} + - component: {fileID: 4733576179552229060} + - component: {fileID: 2012827545077904779} + - component: {fileID: 3158748587153539730} + m_Layer: 5 + m_Name: ButtonMoreInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8252921096633957241 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4116732687138738479} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5758986847798381115} + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -99.72, y: -64.9} + m_SizeDelta: {x: 141.6914, y: 45.0679} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4733576179552229060 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4116732687138738479} + m_CullTransparentMesh: 0 +--- !u!114 &2012827545077904779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4116732687138738479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3158748587153539730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4116732687138738479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.9622642, g: 0.9622642, b: 0.9622642, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2012827545077904779} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &4279783835045373039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8141605075363586685} + - component: {fileID: 1129507980982577600} + - component: {fileID: 3409363427364332004} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8141605075363586685 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4279783835045373039} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8150310283045374484} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1129507980982577600 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4279783835045373039} + m_CullTransparentMesh: 1 +--- !u!114 &3409363427364332004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4279783835045373039} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!1 &4471505415598507920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6235104375140882572} + - component: {fileID: 4057252686040207820} + - component: {fileID: 3554294960250654513} + m_Layer: 5 + m_Name: TextIP + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6235104375140882572 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4471505415598507920} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -248.5, y: -66.756} + m_SizeDelta: {x: 65, y: 61.4766} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4057252686040207820 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4471505415598507920} + m_CullTransparentMesh: 0 +--- !u!114 &3554294960250654513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4471505415598507920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'IP:' +--- !u!1 &4803576491919660416 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8857299115396528434} + - component: {fileID: 2155891017074897053} + - component: {fileID: 462332990179851889} + m_Layer: 5 + m_Name: Suggestion + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8857299115396528434 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4803576491919660416} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677765351015} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 42.185, y: -30.900002} + m_SizeDelta: {x: -109.78961, y: -97.906265} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2155891017074897053 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4803576491919660416} + m_CullTransparentMesh: 0 +--- !u!114 &462332990179851889 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4803576491919660416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Edit code to see changes on device... +--- !u!1 &4967086676766916185 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086676766916190} + - component: {fileID: 4967086676766916188} + - component: {fileID: 4967086676766916191} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086676766916190 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676766916185} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677112779038} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086676766916188 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676766916185} + m_CullTransparentMesh: 0 +--- !u!114 &4967086676766916191 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676766916185} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.103773594, g: 0.103773594, b: 0.103773594, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Reconnect + +' +--- !u!1 &4967086676871555599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086676871555596} + - component: {fileID: 4967086676871555698} + - component: {fileID: 4967086676871555597} + m_Layer: 5 + m_Name: ImageLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086676871555596 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676871555599} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 42.06, y: -39.16} + m_SizeDelta: {x: 54.687653, y: 54.687653} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086676871555698 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676871555599} + m_CullTransparentMesh: 0 +--- !u!114 &4967086676871555597 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676871555599} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 90cf8e542151548c6aa3cba26467e144, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4967086677112779033 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086677112779038} + - component: {fileID: 4967086677112779037} + - component: {fileID: 4967086677112779036} + - component: {fileID: 4967086677112779039} + m_Layer: 5 + m_Name: ButtonRetry + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086677112779038 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677112779033} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4967086676766916190} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 45.1, y: 34.638} + m_SizeDelta: {x: -465.6686, y: 45.06787} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086677112779037 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677112779033} + m_CullTransparentMesh: 0 +--- !u!114 &4967086677112779036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677112779033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4967086677112779039 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677112779033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4967086677112779036} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &4967086677379066170 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086677379066171} + - component: {fileID: 3499838185132214990} + - component: {fileID: 3499838185132214991} + - component: {fileID: 3499838185132214988} + m_Layer: 5 + m_Name: HotReloadPrompts + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086677379066171 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677379066170} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 3751191164850618615} + - {fileID: 8564535462043123833} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &3499838185132214990 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677379066170} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &3499838185132214991 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677379066170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1280, y: 720} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &3499838185132214988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677379066170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &4967086677533727706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086677533727707} + - component: {fileID: 4967086677533727705} + - component: {fileID: 4967086677533727704} + m_Layer: 5 + m_Name: TextSummary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086677533727707 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677533727706} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 30, y: -42.7} + m_SizeDelta: {x: -105.96521, y: 61.476562} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086677533727705 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677533727706} + m_CullTransparentMesh: 0 +--- !u!114 &4967086677533727704 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677533727706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Auto-pair ran into an issue +--- !u!1 &4967086677765351014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086677765351015} + - component: {fileID: 4967086677765351013} + - component: {fileID: 4967086677765351012} + - component: {fileID: 235867154863528169} + - component: {fileID: 7034300310699233304} + m_Layer: 5 + m_Name: ConnectionDialog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4967086677765351015 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3751191164850618611} + - {fileID: 3751191164850618608} + - {fileID: 8857299115396528434} + m_Father: {fileID: 3751191164850618615} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 8, y: 160.00003} + m_SizeDelta: {x: 603.4334, y: 152.50421} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086677765351013 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_CullTransparentMesh: 0 +--- !u!114 &4967086677765351012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.039215688, g: 0.039215688, b: 0.039215688, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &235867154863528169 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4967086677765351012} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &7034300310699233304 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bb1cc47c374f478e861f2c3dade07e1a, type: 3} + m_Name: + m_EditorClassIdentifier: + buttonHide: {fileID: 235867154863528169} + textSummary: {fileID: 3751191164850618565} + textSuggestion: {fileID: 462332990179851889} + pendingPatches: 0 + patchesApplied: 0 +--- !u!1 &4967086678334773011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086678334773008} + - component: {fileID: 4967086678334773014} + - component: {fileID: 4967086678334773009} + - component: {fileID: 3727107046497244783} + m_Layer: 5 + m_Name: RetryDialog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4967086678334773008 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678334773011} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4967086676871555596} + - {fileID: 4967086677533727707} + - {fileID: 6280529082113425347} + - {fileID: 4967086678661718217} + - {fileID: 4967086677112779038} + - {fileID: 4911193491485015256} + - {fileID: 6235104375140882572} + - {fileID: 8150310283045374484} + m_Father: {fileID: 3751191164850618615} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 8, y: 160} + m_SizeDelta: {x: 603.4334, y: 203.0878} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086678334773014 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678334773011} + m_CullTransparentMesh: 0 +--- !u!114 &4967086678334773009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678334773011} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.039215688, g: 0.039215688, b: 0.039215688, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3727107046497244783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678334773011} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a69f8e8e50a405a84ec22ac7c2f4bdc, type: 3} + m_Name: + m_EditorClassIdentifier: + buttonHide: {fileID: 4967086678661718222} + buttonRetryAutoPair: {fileID: 4967086677112779039} + buttonTroubleshoot: {fileID: 6672458751395352801} + textSummary: {fileID: 4967086677533727704} + textSuggestion: {fileID: 116564040413298098} + ipInput: {fileID: 7429817927027686359} + textForDebugging: {fileID: 6495855994796430067} + enableDebugging: 0 +--- !u!1 &4967086678661718216 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086678661718217} + - component: {fileID: 4967086678661718220} + - component: {fileID: 4967086678661718223} + - component: {fileID: 4967086678661718222} + m_Layer: 5 + m_Name: ButtonHide + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086678661718217 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678661718216} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.8, y: 0.8, z: 0.5} + m_Children: + - {fileID: 3751191164850618614} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -45.7, y: -26} + m_SizeDelta: {x: 95.76041, y: 46.033897} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086678661718220 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678661718216} + m_CullTransparentMesh: 0 +--- !u!114 &4967086678661718223 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678661718216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.745283, g: 0.745283, b: 0.745283, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4967086678661718222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678661718216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4967086678661718223} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &5487644203504871490 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4911193491485015256} + - component: {fileID: 3977274743991914834} + - component: {fileID: 2696062604266108078} + - component: {fileID: 6672458751395352801} + m_Layer: 5 + m_Name: ButtonTroubleshoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4911193491485015256 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5487644203504871490} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4216036513099635638} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 200.54193, y: 34.638} + m_SizeDelta: {x: -447.021, y: 45.0679} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3977274743991914834 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5487644203504871490} + m_CullTransparentMesh: 0 +--- !u!114 &2696062604266108078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5487644203504871490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &6672458751395352801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5487644203504871490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2696062604266108078} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &6563246299181214611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6484505723585156786} + - component: {fileID: 1661502203157216626} + - component: {fileID: 5891534192019788270} + - component: {fileID: 2310985356733911194} + m_Layer: 5 + m_Name: ReusedQuestionDialog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &6484505723585156786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6563246299181214611} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4288889589057652595} + - {fileID: 5505278863775282652} + - {fileID: 6528462525361087078} + - {fileID: 8361365728969909008} + - {fileID: 7107734678944665722} + - {fileID: 8252921096633957241} + m_Father: {fileID: 3751191164850618615} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 8, y: 160} + m_SizeDelta: {x: 603.4334, y: 203.0878} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1661502203157216626 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6563246299181214611} + m_CullTransparentMesh: 0 +--- !u!114 &5891534192019788270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6563246299181214611} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.039215688, g: 0.039215688, b: 0.039215688, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2310985356733911194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6563246299181214611} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef31038a0ed84685b779466bf22d53a9, type: 3} + m_Name: + m_EditorClassIdentifier: + textSummary: {fileID: 6369210938302316831} + textSuggestion: {fileID: 5675038352245823804} + buttonContinue: {fileID: 5265040605375167127} + buttonCancel: {fileID: 5585168207715079851} + buttonMoreInfo: {fileID: 3158748587153539730} +--- !u!1 &6697092821899816264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5758986847798381115} + - component: {fileID: 5463465806778337131} + - component: {fileID: 8072588694671228428} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5758986847798381115 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697092821899816264} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8252921096633957241} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5463465806778337131 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697092821899816264} + m_CullTransparentMesh: 0 +--- !u!114 &8072588694671228428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697092821899816264} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: More Info +--- !u!1 &7506156204490477245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7107734678944665722} + - component: {fileID: 677914236431176414} + - component: {fileID: 9047087872360317623} + - component: {fileID: 5265040605375167127} + m_Layer: 5 + m_Name: ButtonContinue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7107734678944665722 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7506156204490477245} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1221019002237951643} + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -261.41, y: -64.89999} + m_SizeDelta: {x: 141.6914, y: 45.0679} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &677914236431176414 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7506156204490477245} + m_CullTransparentMesh: 0 +--- !u!114 &9047087872360317623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7506156204490477245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5265040605375167127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7506156204490477245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 9047087872360317623} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &7769261099572506218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8150310283045374484} + - component: {fileID: 5348576082586449480} + - component: {fileID: 6647422777320841469} + - component: {fileID: 7429817927027686359} + m_Layer: 5 + m_Name: IpInput + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8150310283045374484 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769261099572506218} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8207283617714762719} + - {fileID: 8141605075363586685} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -125.62808, y: -66.75602} + m_SizeDelta: {x: 180.7402, y: 41.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5348576082586449480 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769261099572506218} + m_CullTransparentMesh: 1 +--- !u!114 &6647422777320841469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769261099572506218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7429817927027686359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769261099572506218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6647422777320841469} + m_TextComponent: {fileID: 3409363427364332004} + m_Placeholder: {fileID: 8746367729340876900} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 21 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!1 &8054601594198067103 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8564535462043123833} + - component: {fileID: 7768483217031697610} + - component: {fileID: 1047141224289122821} + m_Layer: 5 + m_Name: FallbackInputProvider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &8564535462043123833 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8054601594198067103} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677379066171} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7768483217031697610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8054601594198067103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!114 &1047141224289122821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8054601594198067103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!1 &8201367103125407330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8207283617714762719} + - component: {fileID: 2716239957931866459} + - component: {fileID: 8746367729340876900} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8207283617714762719 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8201367103125407330} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8150310283045374484} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2716239957931866459 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8201367103125407330} + m_CullTransparentMesh: 1 +--- !u!114 &8746367729340876900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8201367103125407330} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!1 &9029651609518542122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4288889589057652595} + - component: {fileID: 1714143093284739457} + - component: {fileID: 3128017247211677084} + m_Layer: 5 + m_Name: ImageLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4288889589057652595 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9029651609518542122} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 42.06, y: -39.16} + m_SizeDelta: {x: 54.687653, y: 54.687653} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1714143093284739457 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9029651609518542122} + m_CullTransparentMesh: 0 +--- !u!114 &3128017247211677084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9029651609518542122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 90cf8e542151548c6aa3cba26467e144, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab.meta b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab.meta new file mode 100644 index 000000000..40b417e7b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 0dc8d7047b14c44b7970c5d35665dbe1 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs new file mode 100644 index 000000000..4a6ac9ffb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs @@ -0,0 +1,140 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Linq; +using JetBrains.Annotations; +using System.IO; +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace SingularityGroup.HotReload { + /// + /// HotReload runtime settings. These can be changed while the app is running. + /// + /// + /// ScriptableObject that may be included in Resources/ folder. + /// See also Editor/PrebuildIncludeResources.cs + /// + [Serializable] + class HotReloadSettingsObject : ScriptableObject { + #region singleton + private static HotReloadSettingsObject _I; + public static HotReloadSettingsObject I { + get { + if (_I == null) { + _I = LoadSettingsOrDefault(); + } + return _I; + } + } + + /// Create settings inside Assets/ because user cannot edit files that are included inside a Unity package + /// + /// You can change this in a build script if you want it created somewhere else. + /// + public static string editorAssetPath = "Assets/HotReload/Resources/HotReloadSettingsObject.asset"; + + private static string resourceName => Path.GetFileNameWithoutExtension(editorAssetPath); + + public static bool TryLoadSettings(out HotReloadSettingsObject settings) { + try { + settings = LoadSettings(); + return settings != null; + } catch(FileNotFoundException) { + settings = null; + return false; + } + } + + [NotNull] + private static HotReloadSettingsObject LoadSettingsOrDefault() { + var settings = LoadSettings(); + if (settings == null) { + // load defaults + settings = CreateInstance(); + } + return settings; + } + + [CanBeNull] + private static HotReloadSettingsObject LoadSettings() { + HotReloadSettingsObject settings; + if (Application.isEditor) { + #if UNITY_EDITOR + settings = AssetDatabase.LoadAssetAtPath(editorAssetPath); + #else + settings = null; + #endif + } else { + // load from Resources (assumes that build includes the resource) + settings = Resources.Load(resourceName); + } + return settings; + } + #endregion + + #region settings + + /// Set default values. + /// + /// This is called by the Unity editor when the ScriptableObject is first created. + /// This function is only called in editor mode. + /// + private void Reset() { + EnsurePrefabSetCorrectly(); + } + + /// + /// Path to the prefab asset file. + /// + const string prefabAssetPath = "Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab"; + + // Call this during build, just to be sure the field is correct. (I had some issues with it while editing the prefab) + public void EnsurePrefabSetCorrectly() { +#if UNITY_EDITOR + var prefab = AssetDatabase.LoadAssetAtPath(prefabAssetPath); + if (prefab == null) { + // when you use HotReload as a unitypackage, prefab is somewhere inside your assets folder + var guids = AssetDatabase.FindAssets("HotReloadPrompts t:prefab", new string[]{"Assets"}); + var paths = guids.Select(guid => AssetDatabase.GUIDToAssetPath(guid)); + var promptsPrefabPath = paths.FirstOrDefault(assetpath => Path.GetFileName(assetpath) == "HotReloadPrompts.prefab"); + if (promptsPrefabPath != null) { + prefab = AssetDatabase.LoadAssetAtPath(promptsPrefabPath); + } + } + if (prefab == null) { + throw new Exception("Failed to find PromptsPrefab (are you using Hot Reload as a package?"); + } + PromptsPrefab = prefab; +#endif + } + + public void EnsurePrefabNotInBuild() { +#if UNITY_EDITOR + PromptsPrefab = null; +#endif + } + + + // put the stored settings here + + [Header("Build Settings")] + [Tooltip("Should the Hot Reload runtime be included in development builds? HotReload is never included in release builds.")] + public bool IncludeInBuild = true; + + [Header("Player Settings")] + public bool AllowAndroidAppToMakeHttpRequests = false; + + #region hidden + + /// Reference to the Prefab, for loading it at runtime + [HideInInspector] + public GameObject PromptsPrefab; + #endregion + + #endregion settings + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs.meta new file mode 100644 index 000000000..c624eebb2 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs.meta @@ -0,0 +1,20 @@ +fileFormatVersion: 2 +guid: 324c6fd3c103e0f418eb4b98c46bf63c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - PromptsPrefab: {fileID: 4967086677379066170, guid: 0dc8d7047b14c44b7970c5d35665dbe1, + type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs b/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs new file mode 100644 index 000000000..04cf7539d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs @@ -0,0 +1,19 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System.Net.Http; + +namespace SingularityGroup.HotReload { + + public class HttpClientUtils { + public static HttpClient CreateHttpClient() { + var handler = new HttpClientHandler { + // Without this flag HttpClients don't work for PCs with double-byte characters in the name + UseCookies = false + }; + + return new HttpClient(handler); + } + } + +} + +#endif \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs.meta new file mode 100644 index 000000000..33da24ccb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b40f5d8cac104565b0aaa1d1e294ff8f +timeCreated: 1700069330 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs b/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs new file mode 100644 index 000000000..082f41229 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs @@ -0,0 +1,11 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +namespace SingularityGroup.HotReload { + public interface IServerHealthCheck { + bool IsServerHealthy { get; } + } + + internal interface IServerHealthCheckInternal : IServerHealthCheck { + void CheckHealth(); + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs.meta new file mode 100644 index 000000000..57add06bb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bcb0ff221290427182643b815685ea97 +timeCreated: 1675232020 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs b/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs new file mode 100644 index 000000000..50eda6b65 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs @@ -0,0 +1,27 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using UnityEngine; +using UnityEngine.UI; + +namespace SingularityGroup.HotReload { + class InstallQRDialog : MonoBehaviour { + public Button buttonGo; + public Button buttonHide; + + private void Start() { + buttonHide.onClick.AddListener(Hide); + + // launch camera app that can scan QR-Code https://singularitygroup.atlassian.net/browse/SG-29495 + buttonGo.onClick.AddListener(() => { + Hide(); + var recommendedQrCodeApp = "com.scanteam.qrcodereader"; + Application.OpenURL($"https://play.google.com/store/apps/details?id={recommendedQrCodeApp}"); + }); + } + + /// hide this dialog + void Hide() { + gameObject.SetActive(false); // this should disable the Update loop? + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs.meta new file mode 100644 index 000000000..fd7e1c02d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 03d3be3b485a4450b112f9ea3af4fb66 +timeCreated: 1674988075 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs b/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs new file mode 100644 index 000000000..2802b46d0 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs @@ -0,0 +1,64 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +#if UNITY_ANDROID && !UNITY_EDITOR +#define MOBILE_ANDROID +#endif +#if UNITY_IOS && !UNITY_EDITOR +#define MOBILE_IOS +#endif +#if MOBILE_ANDROID || MOBILE_IOS +#define MOBILE +#endif + +using System; +using System.Net.NetworkInformation; +using System.Net.Sockets; + +namespace SingularityGroup.HotReload { + static class IpHelper { + // get my local ip address + + static DateTime cachedAt; + static string ipCached; + public static string GetIpAddressCached() { + if (string.IsNullOrEmpty(ipCached) || DateTime.UtcNow - cachedAt > TimeSpan.FromSeconds(5)) { + ipCached = GetIpAddress(); + cachedAt = DateTime.UtcNow; + } + return ipCached; + } + + public static string GetIpAddress() { + var ip = GetLocalIPv4(NetworkInterfaceType.Wireless80211); + + if (string.IsNullOrEmpty(ip)) { + return GetLocalIPv4(NetworkInterfaceType.Ethernet); + } + return ip; + } + + private static string GetLocalIPv4(NetworkInterfaceType _type) { + string output = ""; + foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()) { + if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up) { + foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) { + if (ip.Address.AddressFamily == AddressFamily.InterNetwork && IsLocalIp(ip.Address.MapToIPv4().GetAddressBytes())) { + output = ip.Address.ToString(); + } + } + } + } + return output; + } + + // https://datatracker.ietf.org/doc/html/rfc1918#section-3 + static bool IsLocalIp(byte[] ipAddress) { + return ipAddress[0] == 10 + || ipAddress[0] == 172 + && ipAddress[1] >= 16 + && ipAddress[1] <= 31 + || ipAddress[0] == 192 + && ipAddress[1] == 168; + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs.meta new file mode 100644 index 000000000..ebe4cc626 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4d3a24a25ced4eae8b7e0b9b5a0d5c9d +timeCreated: 1674145172 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.12.10 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs + uploadId: 668105 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Libs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Libs.meta new file mode 100644 index 000000000..192e76259 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Libs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 053fc5684eb47f54e8c877cb1ade54d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly.meta b/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly.meta new file mode 100644 index 000000000..d961c6024 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 520640393141aab41bd6d6b1f43e7037 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies.dll b/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies.dll new file mode 100644 index 0000000000000000000000000000000000000000..fdea2d1234ac8f9841373b42505c1d0f71e9708a GIT binary patch literal 2995712 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

0TJcp=!3H?o3r!NHC{q2vxhK)$Q_9JwA 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�L=c@DP3RR*<_ ze&QoeumyhRn9uF{LVQR#TVKj6mRdJ-v|AM)*hytG;z6lw3WCO$@wiepJRVfb2E>ET zvT}l=TQnS9sx|ywW!>UQT3Ls9Ftw~bLEjpWXIcZ=QwFPuK#*C+2!!TBj?ht!#- zgMl&_J8Z_M@pyBqu3*{5cv2BpL7bB2W%m*^>|ui9mR4P*W%Fy2%4QP?Es}YWRwdK8 z-?}6koEGoCxDfq6Q7x*U<`q9pEPfJJKj|<(lvskTL$SRMX=+|)Ps2cR8QgX_Qq`pQ z)4^4`yU+=a`h~79&xND)53P)hen6A0eIVVZWn0w?(%i-^ zNUbH9+5*C|fm$rxam=_Xg zpr-h!RoQ5c+c<_E$*Cc`2Gc$yXKT5FI3KYko66)6r=LPzZ7rfrXg^ZH|9E={6P5b^ z#Qy@n*WVm{;q#Z`neA_hXO6!Wp1Jw~^_;d|`3@@3K<`TX;m@S!JB-FFP zl~S4$tl@u*jot%xIB!=>f$9YX?qf zPh|~8j>E*F2={WU@pD`gcEbpj$6?J6kUEi~{S>ttp8}a+?ng>LrEezevJ3I*fH+*9 z4xO$<@{l$C<(kkd2n9+anV@?5VG84%oUOKuZZyg5}+(Z0uPLrrc#EEy@ghsEKQ|E z9)S_9qg4v`s5vY|k@~F*{Fc;jdSg&lgin+a25zATyYu)-TlEuQlBlb0hA^QDBfEu< zY}%~|U-UcRfq|a;fyhCSr17q4kByGQ{0MPrD#74f6;|^guFz2|5VA_*qg@m?vBuRv zKJ6dS=kzf(3wJS{)78TGT9Czy$Gzqustp(8sZDgMiR*9|f{T(~j09nFLsH)}l87H< zZE3^#0sRZBTQwFR69SP>IQi8(Nm}klxDbb*t?AHHO*q8HH6$Y0!K+V(RnkjsVOZ3S)KGJ3ZDZZ9T0ZEA* z24yiK0d`4T%BK(whFXsEI}b|fks7QJAsTP<~MQ!+;p^Dp;JR+MtD7I9J{s<5pNOIpi0wgq! zaQ%mh>MxOQnj|s{iZco&X)3{6xft^t#ZMLr^39`Xp!m%~L75f`3R)I;25WOng{O&1s3lM9R4ssHfm9iRr-0&jSi1vy^wW zq|ZW{j^9cmuFCrCnpml%$}*4&yHP5|gAp#XQ4pnq|OiR?%&W%nXH?M0jMO+{Sq zf;d?$zy+m*o?9qlRyoY=iRBhkCNyqKN-l|93U4||QXpS3@e^j07sU&yLY#R(%cg4( zirxdqNjRafLU==n=jQTrg1~S|$9KC`iGhcfe8*A`4tXtKEJX?KDODIIH;f_ zlRoA{8i8W9^iY@7sg%w~F!t!n*{Boy9)-!%G3_}?!)jVk)sK;{x}m_S1tz9IEt%iW za)?70XF!~}G_a)=i8B|PD`@Xi#&J^Dlm6o(U`-Z6K!oB~t7SPpbEws>+AzLWjiR|G zrey7Gpm~X)Bv0Zr6JNQeNYGwgTnkXAjt({Hl72N9>UQvcDK2s>EYiKnL7c1d&tE20 z4*?`82djSmE)p&D4h1o}jYvQ<3TTS5>o#RvZT?hhyqLo>>41+qhVz5>`C#zseBu?f z623rV=_tv>q(gTbVAQwNQG|w~hBsHQ#1gK+>o2<7gtpe)-eiMzMGoh36B<-YaTX`5 zE;9sR19OMXRa2mYD1eVC;U)fTyb*%K1q-)F@h&%^0pFBKB8JtO;Un zC7yS_u?*8*59ek9vmi|_yvlH&wpVnBxV=A?pnQ9dj^F z_k^-j5_Fh1MwM~pnOF{Lny(tBSyjl9-q7B$G=h!NQ;ES!gBLw<4V$9o!)O(BwLT5L zI6LkDQs6wYxejT#&ygZPb7D)WWTYcf>E~y9YTKh=ei57YM*X=iY1JcO?0f z&5vpNyb)yzIG83!$D&Y?M->731ZglfA4zg_9AzXUg90)17t+R4T0Nvu0MjPUyko0* zjv3FPfNC0)a~}m|9p)dkz{H`1ipX^G%&B+^Vtg&#YIF_&&392m#eHy@f33F@Z~HeO z7i~|K&F>H@QX_M4#}x;{J@Jj}c_<{CUn9LZO_gx33M@8nM1C*@eZ@1(nTX=0&}<1; zyS@jcc@uyRxeA49JC!R%Z>Fjp8j#n64yTwD*@UBPb0*EV7>4O!9zLO!R$+5tZJb2w znG2DEJrw%pXR6(a_ksKbEt!qs;hY~ojx@pi6~a}Uhg1D{BCa)MTLpZ=pCbE8R2j!d zxM~-f3El*x2!23Gwah1w44)3mnHssld_PN~a~7{NkJqu>1vf?U4dS^~c_^|um( z+5nTB9jv5|wMk`G()qPXT__3HC(W*uHXF6c<^>j5w>TK&c0SLc z1rQ{P1T?2aR*SJNS9un^TZnv4ALb7DU@N_c37J&+9T)v(0PrQcY-0JTm3|?{!2-b2 zA1$_cB@?ik!E__*b9j_)&2S3o(u_sn)s&Vlo8#fnuR^C;ZJtEwRCEC^Ix!wy$fHx@ z(ZxJ^eLRZ$Opqtu0C?2WcsmL~R~Ie^*8rH-upYcdYGUcDaX4!cd%|iC@0-pj)0LM= zqYEQR0okmF02OY8vVQ;;mxp%Z(hw+h>hq{_XCk&g3EO-8J`B}=0mroq@HO@Sbw>TL zL2`ET`Y{jD`|yz6o}ii6-;0RH7d0U&h=Y(U5b`$)nU^7l^Ui7sZ2?L@^2?Kl(9DZ=xHTo(`RMl3v2fTw`tiQl0bh1y>L0N8*}4nuC8CQj=G9ZvHiN=kQ{ zec;#jt<&s>xVHsh@dIRW*eeJYNkigEbvgMWQLz-ANn`o}(9wg_ajob}V;)jK%4s46 z1xfmx=8dF=sACrKXnl&Jh6eCCqnu_}D=9ag1Yi<=t8S-x3o=q%=EEG$Wj+#zbD0~h zq)qW8e7ce3&Eh_mvRWtl%ASxv$#w}S#JERa(rs4i|8^jFt>E2eK1`kFmiRDrn%k_T z?eQdwCJX;M;>U9qKfnvxZv!`ehJxd60o+L-0sWF0mkYEULE?Zvo>Uj7gaV~6TR2++ zXD^O(vV}7rIAwwJtGJBRMS#7ER(b%hD@JdDS|ODpl#z(*F#FSfT;^YvhF&I}(!x?H zxRk`TLkdhTq#YCv?J)VccS;ULzYV1mbq)w6To-}P-keTL7J_Z!f`GPDCpB_T{T9Q8 zALJHgIiu}~wiKu0G-qJOiBUA6(@J+@`=#hHk^*S*Swu5*diL3M`d!FQ(CLk=k`@o4 zJNO@72%^avPctU?fj$#IwRgM|0s)5b+&*N&2-6 zkK||iL!gar14b@KKtp$uG?>^2sF?J(z(dkK@XRWa^b{rG1!J#OQV!sP;{lYBC4Du) zt%GtxcnyV1C`@&V--_zXX(vIB{)9&nl!3o7$Af8ylGOzm9#TPajIy0>*z!m7EfwvD z7>I5ROFqAw!I$?EzMVi63IefJQOq!+MflYtY*UEdAU-C5;8+3zFwyS8_cwWaCL-cM z{%U?YFkY=Hy)E8Huu;+n_h46EPbE2NoZ<+qC9u**Xz78cN7=7txiJne2bkIP$3`*TL0Crd<}=y{T3Be4!gngP7bG(HPHw!Ts^er#ZEE0Qi$Yq?!KwpuxMK%CsTsm@Vq~jCNShsI?(`ThN z*7hbLiojk{^ImQ<(BULHET%%?(am5irX+{H83oBuqxtB1GoKkCFfESq_iq&2L6p6W zm(>N;Y6RO#4gDfM;LN)QokBeX&T`5#?D!y-{vZ%%sP$BFqbLo#XT>E&KEqUsP4y(C z(~Teo^o?6G%8U#|fdUC11$YaAi8NZw{)EF3?3Dmr*s`l+A?37ZIC)|G(t}#yani$Fb(*e?n`D=hT}?u|`N0PQy!Z!piPL;FNkPhC&1@TdiO^<(T!c zO{%q)?Si7AY3rX){t_lPcL0Q|v|%7LFgmWK$o3KslevS>U1S&;ME$65Ly|S_e?hex zOcqx3526AJU#oBnsdhvTVQoU^j(*j(oMh1)Noy$_bz^IZFF2TxeT^#_GJG5qP0lm_ z2HnM}B9_Brc!yQric;3^IEnYdF0UOMoDwV&Vg6cPVA67%FIi1mse?| zdEN3fw)E$yb@~VViGiR(gVQunqlB^HAtg-p@xhkma4j!RcDN+8Lf;9(%k`OPo%rIoMkdNKH9}s9^Pf}5^)5aU zWgey-3Pz)9W`LD+3?kr3cMLukyhEmwPA!1NB$bL};Q>Qju)c(C02V`<{t8->;wo}D zT)d089uvUSODKey`7=~q^Luc^QQsA{{3KD}x~gd%_C+AMT8uIU5;X$J)nb1lf%a=q zDfPkd2T*yk<)=t4r~W(=#G13kVa%_h{sf_eH6LrMp!q2%63HO%2qM(iGXI70Aw(N7 zEC&^0Q0BtZaBh+ZpC%MqM?Hcz3?;a1YwXe+D}01#LNU38hf9#pkz6|&3g9S&ZbZgt z%?$G`Df1X?jy2(v2n(8=<_AQdGX{1e8_NVzar(=6m{$Uy6U*jY{RKp08#n?vyS|7% zhNu`dMJZ0~A$C!b?No&C4`{Ef)bO4f`8g`$@7q{ib(AW`n=vS7wRJhlRH6)hLgzWO zLb7wVyB+-QrdSiwA_@mESb(L-F1`Z8CuM50>^zI7<2zTuGO+}P5*Gm%UtogqkfF5IyzT2-$!4QGb2qwMtn7tlrUyRlQ0z>Kwb5unpH(o%a(}Ino}-e7;`jC zvGBnGFAZ^8^kFB)8%L%wp6CwJ;H1?Dme~%j1w619uK{ALu=jA!TnA4~378D@1;9_A zh2lJzgm#TayKozk);4(Kile2=j1(98CbuM?>z&3ei~g|&PjP8bpl7b-DAihQ#;-+I zxEfXcFlJ3ogTj9o7bi53Inm#=e-omisa!Z{MV;<&;>VzzyysVoH7+{y z7)=Iodj;=He_m||Nn+Kb?*@C!5CmOQYX@_&hp*)F68Z(#YVdx3e_HMn&MffeDo)ov zAP}8Knhw{kNmZa;yKN@?G3S6O#+>&7#y`z@=V9bU_9Nnk9f6cFroOfgn)?cn6D`Dp zcQ*q*S3I=|6(UU^c@HH`9Z_pmBy^=aERxKxKoDOOD*T%{RYZ@_AAg}Hu0LFL^+!{b zk5MMZ6TK2Arav(|q)1MOD-r;N{w~^Gv%KCPm}XU&fE?3cK23vP*6_r^zbk(=Xpo~c zr(h#Z%9WTA1Wrn9r}JMgUz5N?Mi|~h?Y9d zgJ_;p{|SKLCd^VLs6mVrF|Lq#2XNOYyWc?R8OknKD7%H2_+pfe7q4Y5nFZ#DC|V!i zcTs_L3KvvPH|9#)I8OIRs5oIBvQ~!CQ$T}zP-ZifqXn7F-;UJ}0vhiy$(UE^8WW#L zIH=hifQ2&pSN{+&<^Z(W5%^FjV=VTuPDxzs_oc;t3lu4sPB|uIGhwkW^v6EXI36^5 zK@;6AN_J*fbSFd7|KaUD;3O-mJ^r41dv1rB+1&{{v$=;b!=-y>U}sraP+2kvNEUWc zf}mvg;`A;Gy}hmp1qq5^!0-@7QITiFj6NfZPX)8WB1jSt_33-&<^TPis@r`hzzhHX z=RcoM&#gLjDxIo2b?Q{rseoVPzo}dPvj0i&)K7kWYyA5BSMLAGZzlc{;^|l062}#aJ{o^9zaXa})};&mjR#Jb<;Z zZqB9SNo2I~w0!z_l1RyXtYDjuD}Em4?Nl3E{hiv1%_pnCb8C;udyU6Dhx9wGjknF+ z#{VSAb{k{Pz_q7=U3<3V;TdHWij{T2oMlz;|E{b%Qq~KttPfCDR}k^T-!eFCJz%3z zH`3KN3bqIEvZup`9qa)yTI^so9xq>o$&;k$*#@KEbIhR9pJfYsaPTbapUo!jr*<0oJO`JSVA}QP6hXA&ijiqPXW-!|pw9Qb~Kf7%nnyYOFiKVtt zVEtKS6jQBs+elW~G^=e);oSur*DQ}rC}ujc;9_p&4!Yo7rv2{;8f_LLPd& z)s~Hj#4=L=!|pkh%5nV-uru0ZUjW_36{~kZQZj22G_W0}X5pQCBktmgiGej;c#4$; z6Kjf<;fZDLMg`U`MeRq)E^IdGWNRJ=T~;k_vJQQ+7dE*O2a?~CU}p8@6f~^wHIfzRy#GelFfKG8n^u@QByt-43qtV)b>qd zD0@lDjc1b;F*;og`8?3a=yua>su8tWat4u;14x?1nh0CH)QiNfto~SHkZ9{IjCZ1+ zPQ%~;f;+ev*oI%I=Y4dbKx?c$spZRQU-s5^;_m!`q>d$$?SnMT(qvR)E&c>#8DrFV z!(s=4GWnzQ@`rc|GJEb7>LZS)sNlv^rm2nw>jx8&c}c;>>vwCd6PNjUDOl#Uo;E?r zd@oUwL;2TQDBh`sVzLVrjeiGq&G%p0UTpc)0i92C=KhrJaLN{%Dop#RW3BzZ?fs2O z3Nt>aWy>R^)?B5s4Q=ml3hp#62`j?# z?N)oO@a?t2w-?8nW+nL@$$`$+NrQCU_+bqp@xbfmx(j0q@^)sRFtpyz3)H&ub}k{| zN^vwYO#2i)ffv(*v7P@D_DQ1ThW1*c#?b(5pVhTQqN7Ps;~1b6{8&Eq0;4=F!>cJn zQ)O^GMoAlwSvGyHJC1np7zG!*hI(qxYw?&Bj29oH%Jb+(iq(W*uA zO6wu3%Dsj9@hasB{Bx4>%73Lm;wzGIwir#elbkD+#H@l5`VN1$M;k9KR}S3Vs+ zGL8)KwPc*%lSmj@3iU?`kZzhaXYqZ~REC8ZaoMv96#9>}J@9Mr*@9qnS2IKETg&}qgj?E|Q z2-ha=(5l|vPC_?J$~DtB z{xj_xrh!TOMyEaAM*n7f&4Ewf;EH)$Z}VsM2d2QU@ZI=cvETnjgEKZ;gYzfi>Ll;n z8k|2(02zqDw13R$PLbh5~6pAJ8&pQ=`hWQ?#}KaGE>(np&=rU5%0 zU~GEmZ>W)9gx9ON6sNuU^EXc<@dDQ5vSgFes3WD(;^{Oxg9Mrighu=NHPvXa+$n7{ zn%5}RzWA^n3_ux6D#Z+;bR+2YnFLhI5O5cD#=nYy9OyyVW+&(~I*iiteO5l>VJj*3 zr7CwtDpxyRa5DqdIJm83%Jth2t@M6|O|BfY{S|x!NLKSaf>P`t=;MO3s8>#&XXqY?ypV`#eGJQSy5O`T4?X8=eiS z2C`~?j0LH_VWPGJsAEXzsx>xxys(^Vzw@h?yG2&V#L>{~m;?<}cRxr7G=yRZ)x#osrV&dJWBOkK5MTno%Kh-<)H z$S-l9xm1;+lT1oBq@^zma>La5GSN7*?;Iw-pnY3=AoGcDxC|M$Ut(jGgIp$piAYg< zOW03UmV}Klm&fI^^0+6PNAJ_+(UHlcwb`8Jp(HGid`@yW%Rc&AEvplEy}v!+5N2)= z*(A^Plc&imwTwWhI!Xr8IkYR3URG~ekzs06T#i^DE9ay7$Hg!6oTfjC?&QcrD?HyCqhbJ~n z#z?zhkan()3EvlkiGf-*?QjcyFI%;Up;wFtDNIkT&)mFKgWK1#G)xJ~8S0d5euV|N zy`<3Z+9VamAKNKjR_0}(A(G+7on&su3!YCL*1{=0S=d}?QkupQPigGJr2;v5o@u-NOefW|!2%24Xxwo=_5<;4K zolMvr_h`UBo-9+dYdLCfD9{ z40tLVlbnOYdk+0G5~t9b$2fzRyT)jT6)Zn48Y)_7ngB$hv&oh#wBOX-L@yDv!;^Ce z9c63eT)t6*Lw4nO1qoFz4=eK~x_OUgqBE>4TUCbB<>QJ%v_cw|gZ$kaPH$2E2-1BW zOnUF7Y{m4-ZgJ?ep;fHT*LUmUSDAq!Bh-2+BX8=qFgaBzrSfRtDQ*KdsB|Nb9zl3U z9ugxzdcS~@N_uDTI_bR-?@S&} zq(FFoG-Z|lL0;J<>8e8VQsVa1di%n71Frr&Qf+(#y%j(LVEo~2^ZLT=gPd|%+A^VN zcUl5Q|B6@JPKLFs#`bk8Z>4+Ix?m3kkq>I#h!)0HR3; zh8)SY;N+WGMK6Y%p+EXgh|Vce(9$}eLcZ@%zD_n~ zk>kdA&-5|=GN{HFSFq{5;$X2G+8mIuq21Z%Pn(z766fUP6cPN!%#XOp9q&q>nLONR zOzL1c-hBw=$Qv!^#H1&01lRaLWJ6_kVw*r1OKgptys zJ%+|wrPX@)k8_M6^_Sx)^YvEdIq)Mh$eWI#izwTSF|-?b%pOC3QWx=k;waL8r_!&? zo7LyX(?#$S-}QYrFZlCI^^;IMBrhl1>7D%!OFPV+PulMy?XYpObbyF((wTG>Y|1Ry zJo)Cz#6*d=abgsSmZn$M1=0=zF=zl8Lf>q(%{(Eq7#fsvU7lM6s* zEbUL;^)E0i>R9E9be#|OYK6&1t^D)3Uz7iPjHbJ|9|0Fc@$E17mX*gYMYHzMd?RDB&|6Mk zNh+>C?YlNT(;Ddfpe!OXz9sXdmet%bl$|DcS()(BiRHCg_8^L%b(0^{8M|tO{xnJ$ zucqv>MPuTrKlVyz)mV_MaD&lxG?k26(xe@s@>-g-#ic3J0r+K{PCS;9v(a?3lxKDk zcZ@?v#ykqiR>CHK=?+47GhMz)wX{AQnWaax2Py9=`@vq>eH!n&@&MUk>TW97ipFYn?Wjiqs!*~9I#3GG`v zP7ywak>S<}(v@7`5`8p(-Ket0=#l9@E5qa_sN2It*j}_22J5e;eq0;a-EN}@2{ z3W?%1#P9aobH!u|ALMAwU+-(tBTW8I25y0=gM){H*?gR`dHiw?T;07*>DT4y7ynVS zS!FUyMcw)=H-*8%|9tj1q?qpxDyz-G4W`OuWtC~Ok^1D>!+D^sou7lY_T@N~79lVx zeHu!zXqOnIs4Uc9OD=J&)&D=m2Q}qNIK0}?@C?d(lhF{nr=+-6|1BYL>3?&lH@SAk9N-rgsg68!jug5w0b@5->C4f)J zqAzW>D@AfoK)eBra%}@^q04YF1?Nd)tk0ztTFPVjq3&&Ghskz2hT69WjKVbEq@}^C#)7kd(3@*qk;+T?+|C_l1+}+c zCZ!Q>qY=N}hr4+%B=CT+aRuOY4!%wBVX8dIy(?kckyv$R?#!}YVp;2AtoP|$O?T7~LNR$WxYp*G z1opa<3%l*ak0bGxxBeC-{(uti;V6m^QR1a_@xCOkrRrEu)DQ|>^jgr3tz^>J>kfAw z@n|Z3v)a0{Dzgr@T?xNA;k3+Mh5F8-Xq4=rkLb0^FJ48eZf(Q0MjDNya~tS^bkBvf z_sFJwqlTGZ!HC@;?r9Oq9IS&sm3ga9cCy^q5z`j3_Mq&|Lk0zqLEif>uAWI9j$mll1X9L}9K1P`fQ{UHYdoTauf9Rsm8mHjuX9fE!;%EQ& zb`EbPinjfGJ1eg|?e6+@5b}x(>3H3>vwTXwZKc%D6&q5}1@ZC~Tr&b`e_y3#6Qj;G zw!%aDCI-BV?P~8@xGF!;%_Vu~wG|PZzdn}IdyfpgdpNY;rZ+2B@!ESR?T1Bg$7H%a zUxQhFP-J%C=t|`5ps7Gu+9@e38?8T^eBAuFy5MG5HEgz_&|?&ny+I@I18K43ZR%J~ z?tVCvDZ5w28{H1<%70M?%AR*y^PIExoKusJ(qAFHL@C;0t}-eVw1~N`H@m{J6#3qc>mNVYCgpW{w!VJ@s$0RcArGU>(*I&PV1BIDun`Jmpl6Y zAg`Zs{l|{IxsEmY3)km|Nk6aj1&jn>3^>}xBf2NOz&pFJStv&E)!wn-N3dig#41?%408P z=63=Ag4g7@o;pJecMU0j-3(K1mPcHAhVLG|l*(2H)E#IN_{iQlPx8?q_`*hh^n*Q$EKD}j+V{>tW zTw3n!nhoNzg*$jRFQjndwOX&3WcMqIo~{bH1wvtu~v+?T( zr>IE!Xmo6yvsaoc+%qGTq)X?ufBL5`@Ew&Z(QQ_=InZpiTtr3xRsGB9*qLKBy>Ylp zljoB4-G%XaNQ#;=2kR_Y%2f;p9_S&^mHv7q|2uk0=IPH54%I&dn(G*{i^J=k@NV^v z-N3%5G~|+TYot^*J2uz#LVJQHcPa;1b)6VJmJKMkl|PD|GpEB!HCQZ{Y+k_Rpa~(P z#FLII1y9tEV!Uh}q88QT7%X2WO)mO;gaReEs2;L)X^umJ#uBjFdSjl;boMLl=6mLH ze!eM0PKRo#$b=`>+Z3JrZJ?$^jOw1O2aPHBP#n`eZh*!J74Q?wNSg3+o~`hb_W7SL zt`m+$n2_nJ^+m}-7*cm_KG!bH;TMxpG9X4(;3V~lM4ucAn{wtQo#%tZ1upd`>oaqvmj12e%^=)9;0RSgwu6%+hCNr$!yM#DlvOonXg}h*G zMd8Ii0MZB&Kek5R_%QIo&%c;~6R4f3Y;f)WaW_(9^nhxfGCsmqmw7bT+_Tenh*!TzYWsjskI z&#W!&E4nYt?W%Kk>+0i%aCEJ1IhT7QGT3dhx6ofg&2U|Rxv%8ykoI-?I9z}M_%R`u z*A1<&D_TFhnaT>YSH(IDipVU3_M%V{2i2zLYi&rl{ea(?Pj3z1gS>lR;Or#Z zeXy_MeiJ{=`{lyQ{?EF>z6Vbnxn^H5vSl8LJ5;MIsOnp|M+bZAAD}-;d8R!g@Lc0R zTS4B<(xc^8rvScA#Kn&Lo3(1&TO|>miL`+z7xB^J()(%tZerd*iUdDaCxx@Gzl}ckm zx;EN{F`+I|jyO6z))NjTyE34n%6+HZ4QM|Hsu}3ZfVkT;jwjso4Vr>`1d9vF`|!K% zKSVrrwu0@p@tVMCW6NFTxeuU4xIJ=(209(QF0eaHCP~7PIe8D{lv3Q~U`s?6Nnx@6 z1Da~2KWZL_^wG-(B}WBzBN}6|P#Y@wM*1#D$;UNJ-~clDCKcxcrp-Uw)!Xe8OV-OL ztopd2s?4JLCy3N!KSZM44p=S2#lc29-ewOd#;1$up9ITzOEme*>P4Ydn}Y%2Mnvx* zezCG(Dtn2(#&=dg;|1i!dAx-|Y?43+TT`9!8KAgRP8cY4GN{JOr`zoj#OH!T*SL^R zcT_okq7YS15SI?)GXeF~=I6a5-K)hajTN)4V@>&|#^G&B`+A6A;aLcDb_ueaCrIrtq!$8!b3K$uSYE}9D3UMbYq79Re zh6NWxeQiJT*Wa8J3q!Z0UWPuK_uEN{>wd2KmhKfwx1H8n(qaD@-MALwY@tJ(d8=Ya zsA}kz&QG-#yqK6dk0jMD=i4`mtt-$zLGD2-73Ja@59>8sNsaRz;I{+6z4;x?kA<=w zEk~ral@%qjGgWKYq@&?AfQGhrTv2CoU>wSO_7xl3o+~7z5TI?ME6#TAZE~|pYr&C) zz3j_x*CiALV{X?u(uKVYx4nTkliWSV1Qr&e3wW(R`Pv zzQ3oq`cr*-_-f_Y%WpZqUHPr%w?9Ai#r6DN!cTm=$?r0L*YUF#bUYI}l?*9^F{INn z?$a~w7iHXMWZY+F+%L|!Uy^a3m2sb)ai5cMpPO-CAorYg4|6Y~?CLiyes|1jdd~8R zN>n*!V!XD0R5?~d?D-Q*YOAO7SPevz8K|o3OIG7{PqQtNDie({*E2GLkL#6#@t-v_ zXq*SR9Vy2d>c8=JqZmpfL31yZ7lb_4j2+fzEG`SMY>!gcIg%|c&T(B zBCJ@gzeQ|44TG~=`j2GN0%qlS7+9%Ve=GR93T}z@q|#gSQ9`-+TYn?Lt{M6}*&%TE zrVCp>!SEHvVyKOB$6xcgDd;IaAJ_(+ z+s%2isRCCm@Zz~Y*CKldsu1&ze`D2QN9$bNtIl2N;cnHINiZ@+p-(Py$7HOJgf>pu z7n`1cd3w%fTvyun-HVvIi^htaSo$1wA9V%77DYe$e@)<}L<%BjR96c*N80f_n8D#D zuFjqI!p0Y@Z>c_`;dsA`?UGBh5wf5|oAra;L!6y6b*QWBc|l7Zy7UFMr^3puzjKWw z5*Hf@wsUahvfgMMW9%x@v_#h+wjlRL>-;#-M2}fa6UJ+_waUY?zA(O~w>Z8B7sSK* zA8i}x$=_|yCBJDqe=Fx;^0@o_j!*J=b&HcqV+&j|sc6PD=h9!-|l>uC^&NN)5kU-{qw9DH1U+$Zu{Ok3$m2Tei1r{sOIwVCdlgc z87^$?GoPk zRg0bVQZpYqf<;m`XQIFitp;uTs)1S28{YyQuOgvEG>~^jS2WkWhX3wIs zH}OTXi!yu&gILpf_}c+=^X5AUJ*9E3k<7=1#n!i@a_GV2 zjeN_au_c^^zKzy(_P|E0W-CrlVuJI@A|Z7JHnPq5SHSV>`r{A`?tq@?!(@hNosVBG zkR88Iev4BZiWl+qDWG#oUce?b;4t2iqpbY}SBt^(k}p$C3=|y-)EA1qf7P%Tdw`#z zVA}?IvGCaIUmV4Tw=%t_+OdqDomFo+)Vn9e(PmT+Uv{h+nCUv2pxwWRmi7Gi0-2V?oa}hS!I_DBpM*UAAvsO+XO{dBZMt&d|?IGuU^}4gMkE z!L-;J^dA9Vk|eG=8TgNZFEh9=_)h?=Jrmxgvi}rMTK1D#Wv@M#g8z)5=<0?F{&SqZ zIkMni2g-m2V?JIGD#^1fDHcD<79kUz){Idy3Rv7<$&3>e9y zRf-Jw{<*;q2q?K0b zGT`6L4Sq~umCn=Xar}-(PvCMiI-o_P+8&hlw**92v*1{2qhV3n))}}4h3gwW*(a6k z*F^f?S+Yj^b?tNyC*2uiVrkm9GVo^_5}Ag!A@NbuP0YyS_g41TsO*2hnf9d&_&)#- zrCDd-e-wHqk3Zp`{3y0ZWl^zgmLSWzvsYFn|4U!1s7UakTA{1t@lRQ~IZkLAxj7oYz#(>Z0hGsx^% zWpp{%NC6@;CTXj_Ll*35o9`tSO9=FrtI9`_A%92uE@(vXF?E8;6uN+ihjd5)3(ZhcL2O1Eq(^RqtJaDX23fE zu1p(yoOLf_I~Tetsl5HywN|6+sJ<$f^jRj$hISsOxg+v0GTj_}^?xzmNmKfq>-p*r z(Q+5^YsCEXsW`x{0(fcEFsd^FwV8minSgNtob2Zkoe)61In9;>%PGYi21RoK^{|zA z5Y$AAM<}anqcuOYV#`DU%|tzxHdZN;D{B_K$J}5}oX&;K8Opi9dkO62*G!fu3euWn zv*ZwATAwUEbnDh*SBZX>3H&quD(%qV*9PtCo^F7zvlw8%U$N0h?nLv z`0UEL%KCn`4!^4to2af%&n!>0c=Zf{BHNq1+(!FoygsumP^tcp1$i$E=sbWM|FzR; zcQ(YK(fdWC7pQWMr)0rw7W=jGG;B6i=fXZU#r70B4gciZ)as|>@_p}_+r6^;)6{7e zk-p~BV<#`=Y1*QoS}!8A=xWXfFKwKGvo%L&;AaA_tWLAa1iV-QtL6xJi30YRBY;h- z)`-a@bao2%v|xLny!JFd6wk#&@vV(#@TKzzimv9s>(a*gO2RYb4ETb%!7mk9W6@`b zn%wgx6zrZa?bo7JZ4yFd`e8;(k_AhgokjU?{13)&o4A=w=1eVZ$7k*rtwx-Y+%)~f zG=4Bcp3BHbroZV)M|dW{7OSQinzpu`a~XF_+J3JHa=F{3;~HwNLA2nrxBKklKF@NW zXS>gH+-G0+S*wqGOe}2fBu@}Oi9W75DtErQi$0yrSf6?M=FWyuzn4aCPRLzv%DJ04 z8*=V$&ezMi(wwi6bJCpG$+^m$Z<2ElIk5tIwmhrl;Z`UbyIONU^DK(l4y`r!H_wuo zy{KCA0P`%1IZ;(>9%!Bw@$T{*WF9Wxtd#Fy=PSpY2B|dbe0}j=@*UxP1MwR9j�-@!s-1&-sSpedIgJ`Ig3P&DWYo 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

H1v-2FYRX;>P=UF+VzoR$8 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 z%0A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

gs(Ws%oR$VW)7Pw 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 l*X*t{tS!P1?HZgc}R=kLD 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੷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%0DGP}f2 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Ξhk6d{LJfe@6vEf2F;J83R@rQ?Mjarto}C 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

dFvUi9#3+Qe-*(J`p(ZRHQqy4 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

Q16Z&(A{T4jqO_|-j@=I1RAB$Kr&Yf`p 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%0A0tcK<6SFHi7Q-+hH5%+SWCxV-^p`;3)9=Wk`fG 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%0DE#bkSmqhNv=pgsAL2DK2b?uI-=fLWHR3bBSJv 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%0Df;TU%m)Diq)k7o`ApDq_T|G(iV7AP>qMjuQ z%#oQ_)T=^LvK?5AYX{VvL%kzpXSTl}pHJuVAC(%C)5~fjlT-DMklV&jka|M$k@U-j zQjlEg>m=hK&4g4ZNrkkATH^=Xva*(n9#+eVbynq1lgqj=4D13YTx$8b$e zCYdoGONvsu+H17T+>dbtMevuBncr*U=TluBA~GqSa_^wGP?Q=zhL;Mn%OSkEeLl}T z5|ZNCKx@@d=X}RADV~Q#<$Es;^~zXTYU6%Kij0#}?~eNppQ9c_ohl^7^W8WP8x9Go zT@z)g9=JO&U&uuvDV~;J;=9riQ(Ze=X13+=vKvC8CvZve?5m7#$1K1-Up0E7%(O?Q zk&vxIQasZZqn{RHsj-t}W)h~gL`Za!tmgvGW2YdtdRR!9eUZ=0GA-oNb+RlKi`F1- z5#>?iN&0^0Wl_lFQOA*FM>||*qNngu3GC`TInp4H+E&OAHlr23btp=G#`N*VIQshOqY7b9p9O{ptr^ zPduxu%2Ls450YCgyzC8>idKIS61i_xNZlkP^4_pQ>MXi(T}>4dX5DE0ysmnG zl=B=1c^fsquI3>ros91fLW-#RRGIP3mB*H1Y7vs`Y0^jtzVp}`@9@W#Sxg-wMdH*`Qf)Xh zeWs+^n#9Sxq1Kp{KJ$k9iI4=p)5}*%Z9?Mo@|99sk~l|+Qfdb&Y3vlMjh*tv5W97L3NoB*~b0>QbAqsk~xry>S32Ghg4Bt?k%jYMq%6H z?I>rts;ef6vs~5H{3OnDRnM?o)iW$t^$g4PUWVm*Uo9eQ7VC#E*9U4XA#%C4Kq}ISLX{!$u|Cum#trn@xAIT zLYzzm4fon0U#4Z6LS7S6mP&b4FUED@ic76Xk{?o9$mb+Z+qk*<6^YX}Zm#wxaju(M zs9_T4x~YXaoy2LYw^ZkmIBoTo>JAd8t=>xAN8+^ATdDt$IPLJ(>Matd9o|}fNt|6kPbq=C#g~pUtNKGt^Q2%5hPB?N|J&2Eyh7QsM|;;LXw0W zCUIJ59n}XUP7AH0nrWU~8%_%?RxL*2w9sPJ7!s$2)=7Pz#A%^*QX7!`fvKOs)H|!q zN$x;S3+YT^prv;M(nal0QVMcU$OsarrPo#cfg}~J6n=#4sxBmP+FIYJ8%UhC);DT0 ziPIYFrtT+kT7%tGWxibYq1cCbtEs#CD#;88Z!LFMO9}}yAFk1PriWTdNaXHY4|Tl| z`Bk<5uoOMiWS6jCxSS{X4Q(!->8U<-3D5LY^DN-=lgOH&55GC2mm0O0O9JEXf$0G0 zqrU2rZjgRz2_ZXt-O(S;Wq`VwGDUFTd=}(eb+=0vK;qOBE?EHytG8UT5i&%5DrAT6 zAZq54ppIU`=O>>1vL3$|WVkwGsgx=k&}Ktd@>uobWpbWRdc3S5BuV|!B~2ky)URFA z4)UYg*CpK`)6^kC;@K2TD-JS4oiAjEZzJZ1*E3U{j)-t9P55jN0Kea@eL4Cw)fpt) zAq#~pAaRc2%hc5*&M|zMnoQ!HQsntlFBkgLn7KwADU9EmX;+#*{ zs7*+m^XVG36^YXZSgZCSaoPZD)ukl=Y{6cDwYpASLy~!`m+ca=mBcx}uUB`IIOq5E z>QNG>EwMp;Wwl&CPFrGw`YMUjme{BkCUM#l8`aVz$I+7c15@9m#*mz)w#{a>28nZ) z*`jtPan3SZ)Bz;Uk#?&(hQvA2ZdHFGagL(f)U_neQFNR7oWwa>ZC77eBbUoLTWwcE zB+l7thx$5+bGF){mLqY_R>^7;66b7{thOg{&Q?3s??{}p)lPLPiE}1OQ5TRnXQC8! z4T*C`+odLxIA^q7>Te{@*=o1?H;Hq$+O6Ioan3}0)aNA5nP`uib*)?*&RJ%!s*yNn znZ0U3A(7tHeQE`nNxM?mr^;UI$a!a z`~~Xay;vvI!z7tAdDuc^PO8zk#^afp=!^5L!e}2g)+Is6DRnJLGxVVifSgu+XdCfT z|Dc|okTYsIl9MFo)Nv%KndQ_ks;5XkMUNSu)+M#{CRtBy)XaMe|4|2!)JI<&TZ4Bo zsV7MmVktg_TvtnMmZchET3l|ZaU?ow&b$_*P}GYgxls?V`JVb8$rYN`eKl%}tmhGB z{#Bz%#-nCl>Vevoq#@SxQq=rVO(yAso=Gl`RdcJX=W~)LYAnfptkrevFj7U`Lb4L| z@S0z!haEvF{_8L;&o)`lt2A|w)}G{hWOymBwvyyLYUZVU8rv>QU7@AOq}3rAP1DM( zO(B_tb;##AiLM?@|g)@Ur~Kyrb0-lER!`(2824 z<1)jrq`dE|qBeyjJI2NFnk#DNA2L&ZIo`MhsiaL5lER!G&dS;>5~uI9vbK!G>6NXl zZKZnJ){?!Km9-*&%9`_0|6yfqGD+4Yay(mQZ8ymqdz@1DNyhAz_W~+wk50>ahC%o{ zTB~SX&q!$jsf&58rp+Pwy&K-`1F4~f{+5|`5Pp~8eXRt^29)A!<9)3U$t=iMDD}S9 z@2o8KFZyzM<^yda$;|t>zk|#NTBY+c6Vp##wbj&$T#)kNbw@g1l=2al^wZBVnnfEz za)S1PTH1Y*Pte!Rr(R2Ieo2<S(c;D&NBI<5!NywCZScND4vDK|a!=@5sz3T)A9>)YD=he(Ybd80G#P z@`+ZHG7TonYuJX`le@B1DM*fO=nd11ds22`TODblUrQ_P5*3-o+6ndaJBm+(vrt>^<;&!GdjkA!+!X;odqGp)6iLQ=$6A^6nWYH}RN zWsft4v#l0*$m_YB&FKYgtCb^hdO_Q2HH1WZt=npGk9es_uXS5(9EsDD+)m5!G<~L> zmWRa2wAZRWPoHV8)gy5-Uu(l(q|bb+s ziPcWNl!?`@yp-vrZB)|N(@EP;;?&bwJFBM8bk=T@IGHY5j$rys7cCEolj*8ewbN(1 zYV}B*%r{#8yy-LFXr)PxHGQVLR*uBU^w2iuPoL?b?I&?E zJ+)H>(r0>VsU%LOmsa!j^qF2-BN8XmTdP_)eWtfokHpFJ(PE0E&-Br1k~o>ZTIr(c zGkvwHBu=KER<&6AOh2t2iIeHC^(dJ>(_b4x;$#MBE8j?;8K5PTIGKT3rqby%12v7r z$$YE%-%OwRRx?SQ%ph%9ne>@K+Ex-L6Q`Xjmp&7xrII+Ac&&Mr^qF|AD~XdCtX29T zeP*y$hs4Q*wf%L|XTsVk5+^f6tMpm=%n+>(iIW+s#WhNw8LEvVaWV;7)5hsD30f?P zlNqMPG)bQsrqv{IGQ&0Pi}ab{S~Q818KK>NDKkQ2O=T%3Gg8}6;@qJdshxT$GfJD^ zEd8`bX{&{#upj99VzhQhNSI9_8KYemlFTaNDq!CnydzS3L7569W3}90@|u(J!dtx0 zb2r`#s+ABDX0MQp*M1a|!v2HsdM0WsDf5VAlJKfK1h*n)7<%8JAedbgiS1WR{nvHA@>JB+P7*+1f-Q zDa?m!w2de=M_Wo656REkX3Av4l@y=D`PvD}WF=XkT@ez`=Ht341@$b{Vp_=gIfQF8 zE=#mnmz;(y(+&#>GoC5A7td{J_gwNeWVOax%6ckbxvD|dYUPBaunkxWKF=GpdP2f% z9mytb8I|I~*Txp@l~%kSS&G-QT`M9)mg2Hg3sa^#U9s-grc$OV$sX;fOCF)rUafFz zS@R3JX56n;6%uC8NDgRyT*6Bo)b>%Sh1kaUQXJNn2 z$UW@~SBA@ZZGbEDKIEb{#U&p@E^8}XrMO(tj=3^zAlI~~lrj0$IwV#5xLsrpd2i26 zt%DFbhg@!J{au;OD0Np$a%H&O*Vec)MM_S?bk!cl0Ywtg;x)3=nE>E>q zuFN}-=USXA!-eU;yE0=TUj3#k!zGiR`|HTGWt%$?`0RfaK0ondALK`^8u}<9DR>J4-U)vQSEKrT zA##4W)Y6~0GIJmw>PBZ?kIZoSNPk<1tY!SfgTY?5_!#O|zb zB6*5w@tV8nCxwLBeX#|z=VS9d*DNSM_`|3>j6xa+DPml=PBU0zlO(no(N z1W#B~A6g&%1&Py#)<-wG@tPC-XZp%ff_?RTBsU?i<4Uuy{uYTduCkwAg~S!q2=mV3PZ%OjKkoV}n)mI8h zW}QElqt^!M`FqG|t(qrC7su%}TrwaleieO{kR4tlAbSSF`X(XqY*#5ct+0MlNHV^b z;z*^Q@;5DuK1MzwI;?LLlFSO6l1mZR_mP~!b6b3#!}_08Y60#h*TMP;>sN%Nuz2+C z@Hg!b)eHBM^E`oiGZOSFB#WsxBSHU^WW#3pm5K!YYZ6}1VO*vU(?<)5XTPCelrQOU zeTyr@w~dkdA(zBKM(Jl=@(-S47_HxSNrM)6T1WTvmUGCb^*!V}J=!G=v0P*IW-gh7 z%s4&HC0`NWdDN)1P5s=ix@EHw%8lU}J` zBr_ExuL}Ezyg7E5*6mTB660I9Fu9=qCrI&-|iaA#pNG_2~HYnWcI;5+}1v?>abrW|9xEZ6IhIGJDdal_JQe${7?IGGjt$>HfUEA%TQPG+T^e`Na1O1(6RlUb#= zADuq4O7BDBWLE3T#-z`z*0+*4nKgQkap^N_^dTfpX01MCLi)^FeIkjIS*H(3N}pM$ zk0x<4>-D2k(r4D|7fGDV2EEb`=`$PjIwVeJqds+N`piasF^QAeq+j_deP)yXh{VZk z)~n7)pV_R}BXKfY^dU3TXSV1Qg(Uc2IgA6s?~HBL_mjL%vQ78Q;-ymj&N%$-dM*-Y z)ctndCUM4{Zr6*DIOo&t`gg5R4cqB=&Zpb;@|1DL{O{1KlQ<*%cjzArk)!UTFo!$z z)+Bt?eGrnYkC)O)DKdr5osDJ0IFtiAdo66dbjUVSr( zb7yU@euTuiZ?#vyNa8%XuvgD9U#`Q47*WrUt9$jTi>2gi>17`r<1+3SDL?ncS4FT~ z`}8_XrG#+rj>~>M=Q1h%aqi}FK!2SiFP=f*a!{{Ik`>Pva5K5>PV zT{u4T`8lGuUnxcDA*Xdje{(gLME31YFMIPiMn~xHlC+-VWk+#lJgPSog7Iu<|L|!Y z(@&D*K%=E0N*&i5u8}pj$5J$foYY&B)WDrAE`R7fNb2HE2(2K0>MMnu^HiBG@7bNw zPfE$Q0e6mgi|Ca8l%&Q;NAj-~^PKk1nNxZRAqoEX7Ro2WPU+=HzJT!a;3>T_$=OA+ zt#w*|pX45dpTAD)bxEFJDfnI2Gx}#FF;#u6;0Z2Yk`(Y>OY$zHtdK4wKH9(j z)_apIG4PfHWd7C%k?_5{hLGV>M7#Hdkech{T1`f&VkdFd)Yk}!jJG+jzdX9;yuL$Z zaIfD$+gU}=i5?Y;9~swZLyMukhC5;x^c2d>s*by1_$@B#2T3O2-+#okF6pO8=AqPl z$YuSKkjT{k$uRYQ^gC3_mtEHUPujG8FD&IsT4qr-DOdHURB8xXuWh!Xmqz!l=gS^u z6^r2QGMM^xJr_v;^L!tYs+%NLaFxV+N^j`-H^?={g;2fDS9Pd&xs^l(1ZV@RAn*vEP!Az`+j z`h@?}ca!{!ezul>;3+?Sm+=0>vc?}S;k||BjfXDbeS>cs zdU9kAc~4*kqpVAKzh6b8zDsy7UuC0gBk3T|B>2l>%p*Tn4l<^Zya(Y|;)9HNBqxr_-kvyPDakDe z&%_yPg$(u2L3@>-@#Bpvlu_`E;eJd#-e`J=Pb=(CEGC~?jW?zUN$@)@>UiThi8Gov z-pF!T&Y?4!H{K{n;*91UY!oALM)M9f{zu}B<_#NlNu1HVVWR_yGs1R=(T&6zVLQZ- z?fD%(r$=b0F_ALP_}-z$R1#-=?@(hci8Ho2!PrXTjBQRZ_K-MZcZV5&k~m{`hZz@y zM4rzbZsa;5)?wOnn!}BfLLyJ>4mV;+oF{fi7-vYFCw51mO~L3JJrWd4m$J;k#Y?Oxs%9bx1mar)v$7$!+EY;`hIfW+yY8(|bD*-N93MjGWv zoZh*SMrD`qKC4m2|44YB9Zcw?oI9X?*q3zV8*G(W~O@vJu9#FFh4dX0>6BxmsywgUOV*h-S~O({Pbw@J#J zKnoW0Gu6m*T-L+q`Lo&R5i+`wyzzm&zL;hVC8?C`Vfj(>G$Wa0C-yI1YPwPSgskT^ z%+H(1%rK^qRK(Nwd~M96Z8h2B^m#_a>8qTTmT`I}BjWT-&N4Ec4f)d%}*!1A98_Vx$5ElkPFiZ?{!>cyynXAqt@bd_3%E%CFz9sG5(Tno_QbR(sUW# z$G9w=@IJ=n>88&67=JZNx~9(i7+0hd-ha3<-L!ab;i`1Pdka?^Z@cQ@ZxvW$eCCoE zY#VEho-U~lS!YaiNgc>~V}(n2KkWwNH<$2U*^R~>mwbj&n~bPGBfnsC$Y!IIOFBTd z7GB%KGroQFV#xau4 z=zr$*oH5P{iDx}tK|3AwoH1&g=kpWKvf#>&%Xwoy$+2pGF_0F1|Oq6f)?6U zqmhtEzwvcr^hKVDj9R>IOeJyp^iqvJm(piajo~Ct=7v$}O8U$VqYjCaxoMlz=)DU#Y4Vf{#Cy#MkgO=6jF z)_W!-hmc5n)faptgS^~x;tRebGPpv_DaW+?g4O>&O4X%OOLIG=+W&u)>OrOE1e{Wd zLME_nxMH1jmM{BEAxZ4a3!KRznSv`_G9QvTxQk?wj^|t;S%bG-!ZZG0^aHtm>Y>f= zJ%{V}U}cvWkQ~9!Tv8H}JJ^kcKa*7(q6NPrIeHS`^M!|k>t2`n#3 zzTkbz94qQ$Bd`<&f;At>Qm0eBY&;}7I8jJK+8yV@!9OT-p`MS;Yl)tLU@B$0pyy;B zN)-#%do1gDlnG-GAa4X)3rR>D6Idp=RY>GGRyL?T<)tFWv9iH}LLyJhl?#@0$!F&= zdL&rWCG8<^1^Y;0uj7gD@6qmkCs^PauQ`FG;#s=vevB0fmUg58o^L{_D#3S!B(bws zeQYbFYOo$joqis61yU`zn55_)4|@W6FPP~$uQ`b|dyW?D1&kgEmUBrv$Opk~BpU|e zD|nC(gNIx)8uC%_3duV3QL|%sE+E+Og{*lOO6^0YL2wR9ybo`jfP5BwO47KxkLA0F zrvQR6EVG!O`>j2!6yyuMq+iO}W9VOnGz+d2lE{YF@Uc#iFN04>#^NcNk&x!W(H>qZ zksZbSOoOxv?iZ58enMtHq)jlVSJvDGPdQY@Jhu;OLLz%X`yeX8UrNqg@pv~BS_SQc z(IO*%)ADDzeBqKxkgtP1g`{|n<@B%+eyl%#8#HW7F(-glK&wLYnpJd@TvZuXUur0}n zUww>!FR6QQij-_kpUA#~p22mL>F`L7YUmj}Oqo%i$Zsn33f>{f)4(h0=^cD6vz+=T zSQ`P%bKjus{XUm1Tu|2BKUhX)vQ@x40Qj%dKiE)6A{)5D!v^N!5+>P&E7r=WXFzb3 zkjvSe-*jMbmk^v!SI9SR4GbP4`Me{>%A(Z3;0Y<>%-C4SZ6Qf)GBOJxgM$7nnX$&C z9D&3I2a~kNHyF&jWGbFf7NFvLB*~?-sV;o4ZNLF6+ z1lA6Bg*rkKf~Eajl2{|i_mE-1JlUjpR^sV<$cW%#A&Kny3Ljeq86CVr(z}|M75WF) z!oe9iWU2G3WT}b4R3VA1{3s7=jLekaS2<;7KK8-Zkg37;Bt0;7zE-CN_md1jrZ+Ov zgNt*?QX?T_AhUzRb4!^5xd)jS%&SSMR0!9wS8$CMEJ1Q1(Z?*vlHe2}k-c(x@Z~en z@?a>$>j|?4d2!Dw4%c77azY}dehpd{&m=JZJ&wMp`PX10A^4K}agY2uTQHl=Gx2OJ zTEhH$ZL5R%Nvs6OCgat+!CB2B#Dh3>|>9S*%Dkrvb8JD_*Zcy6+A0s0t?{%V=81@Fy>WWb0WJ2 zDFoRO96+)Q^UNhVxS3?<+dlRNWM}ZKOWuW~1Z(E!^-N%wkm0gB_?b(1slCCkTv7|N zFW5&&BFhqkx6nWi1cy^*Am-;Y$id(Yl1aE1*$Z+gSgxR))&j^h$ZtXIHMtaTqSS84 z(co|)6Ig!85y-J%qi9)*%RR`S!5W36tPSJp<{GX#f;nD~NI}Sj;3FZ4tR?znN%+K}UBNG0;ZC>-uV7VeP^CdET4(|m=lZ-@$*ZgmABgs_!Ub7&NgLR6^ zsc*y+sT(0rgEL(655!~6FD5hjFhBn5Xz7__ipyz@KZq|`K(d>Qg-l?Fuv|7ImuZ%e zrF!70!#5y`*+)ns^Of+i+K`}$pAUa2IR~Rf&5wt+S-&JNCC^rE&T{GKl2}L{bEr#( zqMp3wbRl7XF4Qv~lFytcM$!yt2R`*erdC>%67%yH zN)Sqaj7j0dLBwJ7?J9=5i9}3|rhhB}FU+ucx>f zTSiWupJ7)(N|?ulM9#1!&C?_^aE3h{hkHq8p0d2uxok_YT>KbS%Ir>31jJ?3`iCn_o#uJHx(h_9Ai4uy31Fgj~+%Y-4Ymn}x`2>^IEw+vabS8E_Hp zI!KIpmZZTExn;(fPf48dHZi98mRPIVn$C7IUr7<~<>U7zV$4{Qs@UURK~pov>?^TNfB`wpV zrH4&{R5N9pB*k+x*~jKW-cOUimU`JTNX@iTH}D+%I!NubnkOy8o8KUH(=zSiajb*X zPm{T*=M3c2w3>sveC#@;ahhyLJr5zx(rON4DLgmP63(zTTA6F*+7K<7lE}0&e-{$Z z=6ofev~6qNmdnn1qUJWpv@`3y&3~N~HVd*H(%#%pvI=vU^A=jUW{DV?nTj=59n#Sp zO)?0XE|6HWL)_cyn)=TfGV{zgDKm&N^D<=S zo9|O*GcD=-44DPySClzInFSd#3(Y~4nNOL8=J!G(N61APN-Z+yQ>nMGm7KvAzR3Jb zNRrs<=3q-$Y~Ggju%AbxeTZdVVm7bNmmTlcK)Yq}LoR1YKCdh@znE*@@j=Ql%*0-^8mMFm}#t_)@7e8Mc-)W^*caO+kAWQ$J(26C!`XcTmsY=0GWoACdkCIcH83 zBEMUD0&?Cw{gGHw|E(7Iz9-~@c~J;P>Ynhii$YR`#QO_Ec&Q8Kzm#d#0q>xITr{6i z=4;4($R#sNU0!p7zf(b<$Xqsa35oX)g7C~gW{@&%*2#LVn6FZ1Fob8Wnnfs6YrV`| zGfPvZ6@+K5n-wVYD*Dj){G^)IC{qQ(GdIlIl=0#FaW5b@%}*#(2$JmymoF%DeU{AJ zGFwq5(`=c!WyVsbLl)epMm@L99+Vjj;q}}$2U6yfEOOcJm_sSk3Bu>+t~pLf5-Wwi z6b+^BnHPm5vSH=$6cXgVX?`rXy3V*yT@CWk>>(t9Sqsr`1NqOKMRI1Ym&HP!m?udF z{_AC{AkWM?_0n&d&ogXM&&@_66K3Ubgq)7OJ7b20dQfHr&KG=(Vxb)`)$9qqyoGy0 zhp5z@qUhOuitROYQOE?AwYQHAMh~wybhbX9!wIY}WGN&|=;9~o=lPY;=MA~YE&MPt zuY`I?@qhf29IcuwG=QWv1gszax#QNc)W+t}K}v?E z2uWhSyf|h;N{1d%#*hEHi2qdxHUC1E;^N16$7-P~LXz0;{N4?ucBn>EnTbK>8l-Nh z4@pNz&a8MNTj-IHBsK}(*4YVZ7RvLbEY%g)xxYc0hb9V%+%ISq>e`%VBKHegh2lt@ zdw;D%%UYz*v<_`0aWZW}E8C^dv!`g-pl6=})O1sb>Btcv5*d-#Uv>>){TM0hH`x^Gv>EGwg%EE z^tMZWhja-wCn*_+x6wkr35{?`0N(}d9{N>?+~fGUyJu*^hw4+NE$X?3dg3!=!l5=VWx}BW zLhy~bQfT30Jr4~H>d2QOiJji=W1nutF)lQb8?}8lE~|nj_Bb`OcQ>cG8v^NqzS)HnG2bmp`P#4GQ4%c*Yl5Q z!t3E*nv4jqXAR`1ki1`+#J@4sV$N9f$sjX3RELCr z$FSK9j8F;%JUFSMVe%pROUu+$4e7fD8=&BkR>=qbtaSX}*mjuv&OYG*#J z32Z_gAA5p&mWE~sNnm{6c_lmUMuc*7;h6-+_Y@2At5{O(gPEOuaAle}`|0X5arVkJ zY2xgaYtsqeE7zxqvsZ3RCw#BmOxsvwMB>)aCvpz`Teiu&CtE{JNDe~y7s0lMT9NFz zBHJz7LLEttLU_And#DFV{i|M91xvakG=QWjq$VUe!xp|XG?X%}?&Gc*GCMqJJerL!W4_TDyRRisG zWR8c*3W*#KPll=rNn+jJ!#c!4^JHio$%f%x_95ht&{2}H&(Nm@`72~}mrL;)mb4+{ zR4AHcBw8|GKu(A12}xw*(2{8nIU5>BlDm@J=Ff-xJ!Cz9<6JNRnG2y3B>zH&KrV%1 zTrwMSIn`G_~Nh^#V;rGa{hLTCTL3Url@h)_nr1eHA*F(2SW+!-A`B`X( zhx|R|{2U><8OraHotXOV(0-CNl(`qW=n|g!H&nhCuLt)yaMz5>qfmPxNo+8l`r-5Q zBy^voL4NGr$UFZR0w`wo-*8vH|Fe^X5YB zR*i3EW;fQ@=a78X4w7lOD(Mc%Z>0)JWScYl*i=YCtKJ}4>hq9~{RJsxJtj%cf^XhI z3S0g-o=Idz(8o&TMr+V&6fa99qCc}Pq=Yq*Wa~W-dke?0Qr6DFqEy=T@|)JnXX-bt zBO()K*RxxDq5GP|+A|Bg)g z44JpAK$y>AnB_(b|4(GzvWk*iLMbk9XDAh8HKoi%93^-rCPSuzwT3cn(c0l{{tDJZ zAqoDyBjo7)cdQpACm?)W?mL!$2%nz>zlv=Y4R2P_Ql-d#NKC7uRZxgL(l&30CswR- zGQ;wGg720hQ^o4xlBbZW);33QZY}dHS}@RvRaW$spk`!+Ez!B(dbv_PcGE9x|0M- z$hA@1>MunsDIYad+ZrzY;AK%ZAdfgv`apPw6vZJNo2g9j*zb{ZJ3<; zA-scvPb=2?f~3qDFYAd+C#x&Th;DfIHKen(mE?2$f;eL@mh zfg4`751Ag;UzGWPGCi$JB*jU3S+}Xw+mM@}k@T~& zk?^&88q?};|`Mza>~>gw>#2lx?{Mq3 z6!9H-ewTBEm1(qGQoSkW7o|p8IY@p(JL)^gC`%)`_8D4?I5Up6@{oLu-;~Q3E1IPD zDkMJ?*306ar zo>&z;Gtp{FV)c=kNmgr;SI5dsk`+tR8l!Z0smWFklBW-(OtA)#j7A^GBFxYC)zj?B;2 z7MIwN`PN~V@RRu>>!grmb_b)c`SZDptg|m=7F(IVlUqy2o<24N^(?mL2-)F15XKb} zWQny%NMwGNSlfh55Le=hL}s@TeA~2-e8PH(b%-PpJtxaW<^;)7$QmJMNp_+o%#YZ= zSXW4{L--RAzgTxjbgV<3S!z8dDG%Y9rIvRrUy20(lJhdN%*sx30KzlNER|#wO>4Pj zlgy`SEw`dcihLsH=U1x)Ni7Jk=U1yd$=Rbmwj0+DE3C>S_aFy_{7;HF8uQ;`r4=V6 z#pA5!mDW@tiL4iDK904q%DN&X*%N>iQgLNsr6%&_if8AS;hTUs%dD|VkLQx?8QIH+ z@8NjZTC2-MF8HGNT`#_4gSXpTqlLt?`pF)A6UM_fSXU@h;x!+;0NH4nlV#0W(eBNO zePgqAnB)xaOMz^)>P?ZEi4dOIVf7G_?3v!k$C^NPT30AD?K-YyAiFH{dpU>A{_?VI zkbTy&AEbPLNq%wWfVEagJiCiN*aOHMvUZd7$98xHa@d;xqn!FqKgROuxa(|bQ>Apl zat(s~Ze^OrC6QH+lShC*tglH-^c(X%_s=xBQBY?7vZjhmJR5;}@Lmme%DN~d*;5Ps ztCt|Btx7ZGJfFjQehxWf<(Mg@GUhO+;bDJUMMz2^lLvCvszI_J?>(pqIcKdTnFVPE zId8?xlJ$ItdSW3LtcE1{X&=03^_k5x6PO>@4tyytSyMl}b_uSN%Nmk5yt0 zFO|r4l*P3SYQAFqIak&*ekP7jkQ-Li&vNRS(H6Z8xoJHTvcu=>@3$>BPiC@h!ae#R zu0bq6Nn`xV0mvO|tB`osx{wcJ4>8)widw`=#j~NSF&+u>*cw6-#GT?zkSA8f#j)C}CKL0IpWXRnqFPnktDhiZn5W_y>*r5KKSc>71okkM_6GGkE>&*-*%yG7*eY1l8H zVS{#QQ7WD-dJ{(g3-=W4SRt1^7h21H8`B<5QmL&6*C-xl*+)sU@tYXUCH~ zhVZj+IeVm#1V8`AQ%964Z;vNQ>?cQOmA8K&DUbdHKH9LnJ&VM7n!CKckYoss@qAk4 z?O#d8LHM-F+Z#wy`^%c&vUiXy+Jw90nEG4xJ}F`;1`ELtfxnc@ykBA*BnGYch)ji4 zNE4@3P%%xM?WaP`K`{-2Np|1FXRc3l!5S{J-GwW0kb$xLMU z)IYV`l5B$Tnm@I>2nqX(pbw2_KC{QkjQCA?FY#w~%my)stkY3kMdBCy+>Y8PB`)k` ze?c1ABZR~={uK^hs*#-{Gyc^$zh6hDv3-za7lgNV8r%L&a@kK(rimRT1Yat@=w)|M zs)=oqBtaeuDL}%%8qdEO{e@kWgnu=jKM(tbU512zq5e5aHMQR%;a{lFmWRuGB>W5Y zI;5HXAqoFNeSRSgg~+j3e7U|9TY`I(*H5wM8o{^AFY2wt=Ekixs(=z-n3_la~OcP$ukEo|lnmF|g%uvs_X&GJ* zKU>A639n~9>KU9Syq*=1q4ow^hjY-s%J++5_70L#s~y=-@-Bq0)nRu2&3sEp@Nc2t zbhurF$y8&gkz2#$n zV4g?Wok@zm?Z^m{acP-3BoESL3rTa7x+v=TlVmCO!COMklWd1Pf{eDWlT<=KKi}iV z*!M^pLHJ%d#(pX!vekWOPuwE+xP55P^KERbeVb%)0rVs4Z7yW}CHq-u-q!6SHWR`t_ByqRgT4vkVNycn&iv8K{DMYru@|tWW8NvH?K!Z z1IQ-(OOi%kdPO^Pi`|Z7dMfT@A+y!)O7cH^cd0pKo86aW!eS5W2-$8ACfQcm%lbfe z*rP~>j`OfEB-x%wauNO9qai!(pGZo)gI*J~h*IpINqS*)-y~#q*-J^vVSc7TcH3)7 zUY&qD$&fwvHWGfvc`;O>I_^ardU5bQ%o%Xbl7?O%O#$SaTwX2fUf!r5Ti{xQ$9J2Cz*fG04NgxW(P6}y4;%vRg z?Up3H&~w7K=i_#m#A&x2w?~mUd)x_oqL8rP*-uZ}Q%Q!S-NM^8f7o-WR6A_pK}`Km zdkM)PNM0eUN&d#Y>}bee_GXfYkYYl1k?dVBk1eO{LnN0V{M>ZP{*UC(YjPhvZF~31 z{qzxp?}KOT974kWhC$iV``dmbGikrq-*#x9+`qo=D_hiO?V3{j&hw0C?Rq4wJECt4 zb9mNnDn#yse16W^^MypNQ_kBf_luhSGw67D-rh*EijIfp?VUmr{8`YS!0*&tun&*~ zA%`)Z?Sg%aB)n0sjf?g}l1UIg^@}z;AeX)LZZG?09(rkPKgl}~{^pZQc7SBVbUCfd zc8KI4giq_TU6AC!M)bGf{Pd4qjO1@fRv~3cYD02CuGkexnnN@pHArghk@I}ju0zrU z!sq#_-GRhuIb5^5kvJ`fYj%H<|ET3~-42uFLJuBqU0k~~2rVJS=@ACa_D<<#%m zO-P&;+FiRPiPJ*6Yj<=?(NW@_-JOJg!rS!<}Lh(_EwVh z9xtnfQjhH2BnKg%KpxviNX}E{Kl=}oN0fPDpC{>$HOA|CYF{Jy4#MksX5S;33E^XD zp4Y2qL{GC@~O0kRlLKk)oie zC?Kdb6(j~kM35pXDxnz>0V#?k$Tu@P`|cq5OMlGn-QL@~+uhsSD`MFMf^%tZ-5vQY z{yN?hO!!0xiPt9*L5)TAiA1mli|P}F1@C83eWI{nV;0rl2@kerQT?6pU}qN9Z;A*e zv8aAiL~t-kw!k&P21B_bgLjVLMFnTdRH3V1RB$s%p4bR))nR)yI=Dl|h_B(vbrDER z@ah4onPL%)xQ4@6b|6^!AWD|NHxusyi3>I)$q|*#!w5M@d~gq0MaG>l*_#mH+o?x7J}Aw~T7Lzo!zfq=Sr-x0Y#*7z`b zCS?cPu5pHex&WRe_F3q}ThgnZm!(ovae5j^2N15z_Mg5~O?aGXi{e=lP`glB(o z4$Q;|iepk1!#56ekb8qOe?VCvUhe|4bU^9{kC9}Hfs5gL6Ce$P^?sD8uEF)NFUW(z zO)Pz2^a=B68ch2|#`I4O7dt=_gQHGJnG9{(Gay}pBTh;wyA)<>xNvR+&C^o8fs%Fu z84#Sw^64k=gau@9aKu?o1%1YBkYT|!EV!D@QjpYOLZOUFx(3gPKr({$ewR`mW<#9> z85s=zAq7W`BC5kX=fO=Zr(y0&Jjj&bc9yP?j|K8fu*rFu>VeG>q9I6DFyl`t+o1K{ z7G!!b>4KD4=zk@FJRjW5asz5N$_qjBqKp{?sj@&`4EDb)r8kTkeGBqZaMe{QxpTwC z36PhAS6TMJ(ZHD3f@}YlF%Qp$5l0xrUlE*n9VJ^#hx4lw$g1E868J_2^eZQWyc29+ zBvZZGFG4h}3H^fLvG8a*zXFg?50DRob0VZ{fOl%11^Fa+DGDV=Oql|2%z;auLU_A>|R=?YLgDFa*&^bZ?jZ}KJ3pRzXZP~k>?k-E(%JVgC~POQcSjJTnF9} zhg2tnf0B6Zs8c0Uo#Lxjw)h@qvfx$AlP}v!IUQ6hLf?cLuQl$0nK41NBJ^^Y&tDhh zx8T3NJ;Ws^LNRZ!;oqW>~p-9Q9%lh)BXi9Wwae63q=R$C57J$*IuodV_F8``~ta4 zYgkdHItZf~l|d?LOISXHV~kQ&D`t5T>R5k}pjKE}rh554xMG9Y+N7#dj&6vclHQ|5 zR+G{Np2IGOn7Ud$mep{Vc?YDvwv?qQlynnFL+#EhK%?8_Gl*$&o9qE;rUmbo+qwd6 zw(me%Xu+VAU*SBx3DQ=ZsYw|HXZKyT;U2GD_em>|o?5&iV{om`!63<6AxkElm2*G_ zYE3K|a|F)i9Uw!sNJq*GP%eCS^FJ+_B^i1yw;(26TjI)?k#M!Srw+UYpv|lyCH7tT z3Khs0?PyIYcs30NnV^YUQoe(lnFcaRo5ZpWS}7<`Yk!jD2VVLsTx?wn@7`)fEMKua ztHs`f`Q!(lfL>BQ#7xsFv1EhnBXL=V{|qaIf@Ep+S)K+dCTY!b^9a1v@;=N6(z>&h zKMJiul7TE62f-a5BwI^o!FJ|-t5C+VU_0{xlIK|F!&pi`NHtxX$Fdq^2+8X#*n>U` zed-z7yDZp)K2NflB^6p1#UMG_mn_)s4TlzWj&_Iz+pFzh>(6T^Sg^g?h2#PYwtLS& z&t;}o#DeYKKS*Nll}9z~F6hI;9?sG#v6vwBNL&_d_ZC5_7qt2;*zOHmj?$VXv0}Jr z52sYEiKrD+A|cZ0mBJ;yQ_#37l_vJ#G1W01Mp z>nvM9T9UlSvVK>%I1a!2JZ&?}HjtAf`79ms!o}|(^R+`PLqIN)6tKLx9eUZ2^8)Px z%Q}$9Ns3w2YQ`^Vv9;w%sC= z8K`5>J6@~}WSI{#gd~GStzDd}jb~A77w2l(EaxFr8l-wzo6iyfb?kAHWh`ptd2!yW0f2gS*lfLSpkB5*ri%^l5D!`je~2;>skvEc{hKGWSCE~K$dAUNp^+rhZgL1 zXg@F4K42LOf-UNm+98(hAb5v;Q~TGK4~`7HrN!QddzdRWoRD*^-_|OyjDrsT;`^Z0 zq%C5(RtW7QkoUAamUh3v^FfgJwHEiwe5%68+j)?6+BlZqVLZXTKTK@UK4i%m22YYf zHfnoW&VV!m`A9p-l71vYv;p}<3)aP)7l>8Ypj8R7MayJ~_(;wY+@?)pX?sS>r`lB( zoL{#HQhlyv)RXz3d21irJjTl)48un`r#dtFx_G`6Cyr=))Y7fYKLQns{ z)mr#+E(LwY16rC)6?*!AK&#b|wl4m6ms~00kXDbx>*F8N4#=25nbGo0Iiww9sRe>( z$|0?Q<@LK|%wg?!mTe#yb6C5~a)o1#Xg65O1ZB(-E#g7kpZqXv1B`$pc2uj%vMN{3 zM>?j}VOhxYk$!;R1po4))GVeSwL}>cnsfV;_A-l_bNiFFhGe=x83Wro&cC4drqa)p zv;T>z68R()-wphgW8}ISlOdlIA;Bk)GeAyh31gt?@0%-fM*EkxE`N6%4LhUV)dqvivg(^jyk`2gp&T8+IrhIgwAT4R#4VQMzQ zMXe)?nvL*RiMo1K>+8!0>+0Vn>gvB*I>mT(^Qj*x*@WtbP+w~*(kip4??4r4_p+$(Kow~%S=4u+inJsa^&O}pEtN%m z^{Ggkz@onTRHV%!$r15say`Z(ZMlpIsIPq$X=_>3Y?dNz3yb>NSCN)a;(hI_NIT3i z>T6%cS^8Mz{z@onYRjd_B5$Zdb#af^#9v|CW>>YGZ%+Bgzf zqj1EmSi83w)fQ2kf1R6JV-oq5NnDxyrqcd&oS1PLOvslzuDyr*mv#76BRM+>gsIOGi(9g1{uT<2~ zW7^8Cqu^I6YU=m0sIO++qjzReU(L8j{~wF`GQvIjOcwR^gnRXOSkyJ4w!WK1eY2ys zeu5-dbb;~CU2q4ftygG=`y-_Q%rKlerFr$L46O!WYa9V zvJmrNiI~Rv!8>9a>!(TJO@UZ>FKDWtXW0aTHL9t8jm26lW18tVS!#n|Ofx;YJ(eOT zfKQHa=2dgO3=2Lv!s}0Sy)sMXA0jBGg>JC8AQ;m^ufZN2@s5FrFUg%wpf0-rnTOir7H;Tb8CGN3$7xI-#SdxQ(3Npbc17epUh&(eQDIK_0(H?yRHU`z*nC(An=(^3D5vdV~9wTQhcGsJ**sv}9GG-4wk);s` zei^fe-i2ix2z2E{PrVn*iy(OS?5PiA3FnxH^kFRJIp!gKI1A2d7zulrq>p9k4e}Jp z6qY@e<^J^2r?V7*;QsW|Uu4-^Mds66U(9j>1oP>wFJrkM1oyd*{uWDj5ZvcJ`Z|`s ztq6LKpR9kv5@E})5-00BSYqHEG5oIL!}=bU1d!)pTMz38Sx)VQX92K>ef1w$E`i{A z(N{movhKwQu@I!6evV}u$SWjQSdPQ{!uXr^*Na#RLGU;2uSa&2b)!DC&~fg;06m_i z1qhyB1N4d{*@3O_yJO5iU1Qk|f-wX28Z1NOm#W)7`3Yju^v)z+fAD|$WEn%xPn*_qhyA%dqBLOan-%SLiM!1?qeUkP-UnK2mPMuZ%U}2|XiO%2cRhC?j?8u$1yp zdr_X$>#+=h^9yB^K9r>@yi2|mavrUlePycJaNWR|G5RHz_w(S%3B-)mFZIKig`&Yu zcrNh(yxFR|{XJ<5GQPx}ae_XWVzOZ-BAopYGeI9k;*Bs&)c+vK3H-1@zGXa7zrr%? z1tmo+st+lX4VZj;|*9e|z>gQ!X zqSlY_B!{HPCsjda=+OglpW&%A#8d})Ua#nrx*)Uk_9R*2!Nu^L1Z0jrjwJ`~)F?0N zn^+pd+1(ptt{xbKIcJIKFoO3!$b5a*qf)AW4l@lw7V39CyIHIs;Fwi#7W@G*FY70U z%2b8$KH4>qSM*CH3k5#&H5tw_II-@~H5 z(Y#zg;7ip9@>yP@92r(K{r^iMT9XQ>NQ!gMT9XQ>h)Mu%W9+EghjQiHtKCyR10L2-i1ZA zKsM>USyapFBYhx?YFT}xr?RM))yMj97S*!)SRcotS}C9CQ&?0h6-u(dH>;&1WS4^klEMDvhbFrGh z+rfHgmc4M-n*j2uzBEI|EQjA~E6C^ibrzhnbOL0jZf44u|G~VAh^812vLy{$Gw}%xTK)%-d52t)WrP!xWkP_;(?bDxO!7pFG4ypF(IV@Pm z){x9)!5Sqcmj&zUCW=|cf;H-MlDAl}Mtw=Ljs7=m;GQxSa{j)=9v;)TQVgue2(63h5OYl5&+;4WA<7T>Nng&`_WMzf z97#t^)PJK_oeWJ#*lR zGsK+JQ(07t=$t-^<=64DWqwYFpBUb6lE1}S_-`e0oF7Ls&U1_$=WhWyUkHhMQ|Yok zm2%D%{T_iUB*a|NH?e#e6;5(h|AXbLG#PVEw8~WQm=?+q)ulLDNkpJ{8EQ78=TNOkYJAE<>B+U4YWTC)qy#o?q z{Kqk0J|;^MZIqfQ_ZcO+CCrdC+LA03__hT~tdZ=K43JVr+9a83*ld{X0y)PUBYg4# z#FRD`lXx|ujB)2!QyF6=#bk>Y9Hf|n*oc+z zL~IC*5*v5EHDA&Afn(HL^A(LkDPhsqVGX5LFk{MSJO#Jzz1LsaXieh%rd3Lmy^7I| zVzR|`KF(E)AtYYes~VFyXSEtYHDf)CDtk3!#MIl%Ud@8_7O# zTEkpf<86|>K-D(zr5G3$scB@tOgU3~zCFo0it+9jHH|NPk^%YDG>-b@3z$Vv%lOqN zIP!mwQB1NcybL_|91p4PHGnshPju0P!)Hedt-_g z1;6KV5TuC_lZE-5jm4NBK$;l|EEsbFq`6UzWLNmxAcY_;je0Ckfm{S>Wu(beVYmht z#v~d~uspUA+EE~FjL9s!;CVNmgYAszEV!0Mcp`jf&REWZUvR^bf%e847WI9Z4#s*G z{Jsnx`3}Yw7W}?UX~?IeA?IhFjXnF59B1on?BW>wUK^(BZ0sZ16<#o0t|-;TI80JN z-#x*0W*6f`HXa{ut>7-kB^EqWFs7@KoO63jS0jzYtG(Tf&q-wM{R;N5r?Jl`7eSH? z<9W=-tG#`Unk3$l?_;!JQAa-67)6p3crsVsh5H(lSSEqs_*h>fizGjE7W6Zw%a~AG zw4d>^PZHa}NTBhFPqt2iH@=OXKA8Z|Tm~8keS+H>Y*d(urSQ&+Ax0+_bzVGTB$0S^ z^$}yKlu%tAY80}lx;o5gI7{ZNey=p+Arg6hb%K3PGy3}^3FI;37>W0rrW;ph-~M~0 z8C%l;M!*}(hf4(c!4G2b17qtH#yZqu#(m!h#6~aXL*ce9A7i@N~>$#c;g7g z$dM(ind6NUKA8*oj5oT^$34sz|G-RCjG17JCfOBHGfR#nPcSBtdNf1h)MuflM*}WWlzdl)p)`MLxt>6jS;o zS@sF5LhaG}dt(#_ypqO0|zreL_5yWH}4HsfQyCQzz>)3Q7 zut>^Mh{0>i4C8*5{UCT<%`sZA90kGa;qylO#WIx%qoDX(%rXwMjD(mYu&r6fe=IvW z=h;R=u1qxoMw`o>!8c&HlPnbb;n(>UQq48aaZKbena_N~dKpv6FJt2U>m{QxNw)Y7 zuCzG2c%jjqWz2(eba#<4j0BD|{9c%9u`!Bc9)|I{e_&g=#(9#3;x9O=|AD+>lv;w@ z$`RFJZNsSckh^ggOBq6R=(->x>3g`c;8uO zG$Dbt1p7ihu&ouw8kUDy-Y_=3iu(hrn?jF15n@&u^E#Kn`!cw_ze86|ug4p(ahh4{a z*n-$2AXpRD^IfkXtU2HHKIG$55cc$Y^7w4zyIw)qr_i>+I<}GTdIe!IeAnB=cfEqx zr}(b-G2itH!i?+kuJ^IAiprHG9)-Cg*edwM*vBPR-z41<+WMEg^{vJ!j!|DJ-D+HB zQC}(DW`r%pqgoKAzDc@0v_I;bq@RW48{WgujJr6M`bz0%p<}4NcKUhf7^?4?F}RG zAbUc4xLK2__J;N+@TJ_Jy`fa~As;+7V`Pp7?KMA0N=cO8{V>ciA3%5 z{ruF`OVzNH9C7vJKTF9mD*Hn5>zfhc80C|seIH zw?>`Sx5s>IG$ZkPB?pXTj#0gmgT{Im%m_^c5 z!e^QXLq|-lTIR*5e#${(s7w|18T7xfE&83Yjz#rT4jG@2$bEhi#z_tvUz5ny*zlXb zM~t&~q&i|;kTKN8#@@{lqv{$ggc7>~Z$^~QST9gH%2;PD`1*N!T%qM{{5Gd(& zkiU!qmgP_`l*`6N60c`>g|7f!i~5T355?pN9BaA-sje82@6*u`Kf^f~*9j%TCwGHf zGbXaEfVK^`cCH(1Nb*B1;eUiF~|92CP={COyafYrzu8W zH{v?Oh=+NFBrj|=)I;n^8D{*4xUIaf%}@_fOtU&kL0E05V*}x8Y?<|ZG7R#u%q1*; z)rb&FKx~um1z{84ls!aG`m9p2oKt;u2EGe?TdLPrM~GFoiOu&EFQ3F)a800?w>Y16 znXpP2h->;~2S|1EeU4fA9lSM0vXvxH=#ybA_cDyzn0rXF#3mS-JP9$i%m+8((a5LO zY|^^G{5rEU3$A7}3Z$Mnjs?HiI0xhba|MZaMQUiSA@Q!F4b3~pMH`x%C?;D>g)y`> zkWWK%JBinee9)}-v8)N|uJ@qXip0ygQHh)znO!L+Tf7bHUKT^njm+L8-hHsKnZ`M* z`(P7uDT}%fHZl8uf?N0QgH6nFB(PTJa`T2#H@kTScnqRZvEN;A;cQuc(1VM0&sH<6N8*W`5L%d>lGaHe>+e2_Y#Qs-z zvonk8fAuimU{SrcheD!yc1h+J9HZ_#z04yl>b}$4thgPwzAIey(H=HU7Iok08_HSr z_4=F19HYh$`d4t3oqfRx$ zKf`VD7pvjdNi|Ecs1dw0vjU46!Amm@7BzzRnAw0ujn}1{ouq`?^BH{Y^+x$J%w$fb z#vwDzVJvDKGSeK%qQ)VIn@@4hY7}&YIh#d|f<95=Tz=AgonpK*_eoRr9n_gS%3Mn^ z^16X7*imM&lu+w*REhJ{i&5w4C^PbNJgVOHXSA8PLyEfoj5d>4RI7W8nfJx*F=Nc{ zNaQ|a{TXW>Cs`og7zSe-aJL%AM>StWUy&mNr>2! zNn|Oo2QWPVGr@Qc;39qG3pvM(;W0A?oST22C*IWf;mG9t(Ssro7v_{j=}H0V~glT za}x`G+Z|gwFPghK)zvh3-V1y9qIsMp^J^G4g;LBl_vPcZy!+QY^B764FyN{_4Pxe* z&TiTt8aMs|WPw@7Cs-3+GMkXdxfw?wW}&%)#A`ns7V z2U3G%o|MoC`4V#($NUG|>IpGR%(qx7Rty)(Bww(+18?jO0(r&U%aR9@LUNYnANXov z2FR=C1(xzK7kwm2++HesV0m@f6MxMt&$0;wXG6VK;)=ACTe3?4_`ana;oM->+DBU#M_E2J(^zm;1CCK|G@oF>Sq)Mqkib(0h`~|o zjpmCS^Bc!(GGAx;AtdjUqWS7~I1;+uJ zg5;UwNOA)eVZ07|{kzRVpQJ&|9&^;Un2(H^3i6d1f54MjAbZUzK6wM=YqP>ZFJ>3W zKJ$Q2PJw)5W_;(xgeAdhkfu1~Nga@H%_Tl*0&>6%9QI;*f*dp_`D6&lcV?ka(m)QG z{f~I5#(*3)_xNNc$Pu&2Q7>jW$WilvPqu-4Z)SY&#e5HP%oN8wxdQToxx^=Bd%;X6 zv)&J0Om&c-%oRRq1#;YM@}n0s4CH6?fKNt({9-2l0~ zdBP{(fSfdwe)eLpZk#d;eR39JPMiII@nZf2Ib-heiRcZh{g_jJ^z0Zi{IIQf#LC@@WZj z(;VlME+GGzQ+(1Jd!+O5OO^|5oN1wb45@Vh8$p(;s<^KgYgTz|rd@-Mc#95bpk`GeKy5W=kAn{iCY42D5 z9;CDt=aUm4Wvt3Rxd2kuGJNt6NP<;|#Ov9Wvl_Cf5%O{tR9*Pn6{DWWm$M#{F|ozH zD&R)3Nl(Rd5IaRBoe%UeT97K*es@O&^CM)|DGB)I~|81Wfm1?x+nU`$18Kj*U% zV#c z80;b5YmJiS78u_H{!|=9= zmBdmAF|$EhTKjy0>%g?M24BE@vc(OE!Ds8OtVJYVe<#s;<|1v2+Wh$IBwC9|ynaes z>+}_j@%kxkt;;0dI6yn=&T)YDR{T|&N{!&Pw_cPI8V6`^-8o+8#i((B_SO>4N1cNm ztlwDFQ>u>EMG|j+I+fU;&Q|=j+xMrlHAhNle>#`gA1_AjPiJcp=cD$gi}gK=+Mll0 zuO#07bStqx-K}CyrH)T`>xI8*4@3LYy~O@_F=~IhTZ?3>&{Mn~*7q!Ge|lQKl6d>` zP>KCXvWhvC+Mgur-+$!(e6s?+6$LY2lS=GQk`;Dc#;E;CvJ#|(?f(a!%);}*UREC# zwLiVBK_uS(^eM4F$<`!JrS>P;%KBGstLP2+R64oD{&+EJf0C^^GF4bS%(!dR58e{B zeqvGk)7LshBA-rnhM0cVc@}&YiK7PttUJfd2U`D9Oith|T#;~`cAyn@1NTst3wu%n zt-F1KV={xRIwanTB}1%LBw6C(?{Y595UX?%<^wCzLkkYCkdIg{r zEb3~UYAq#!aawrK4&PBtwaVSXoOgvUh=6<7k0=k4c*iHhYROW0s61jBR`7&E-N+YeErLvID#hf7)-cJmX0WK05HhVLBw3=~YqBSvY3*TY2ZA|2ZdDa9 zSPUb0YORLHtvW1fWroMCHY9msBplUB@T`A0Ja(6Sp0uuWDqOJyM~y~XRl{UHYW0sX*1arhg^)2;a~8E$!x*azR%vRt@7xcbKw>t3Jqgj7?lM4#YlEzekw`veA;#Ix2kpUj0+)2v*d;CeDy)>@z7 z`Yq2{2YrI8wPag`KIsj=_jK!qPjID?8CJOnZ=Z2Zl^m;2_By%)(1YpK!R22;!e(Ghxxb^612omEJ( zP~gbz%OG!B72l3tK#bZ3qZA}=Ik`VoK+b}!w+51U zPqH>x!$@)hYIUX!)(94Su7}5GgSA7Z3e9Q%&{|tTmO}M7Hd!Y~7Km2O;ahbBAf;8l zBF4!3R}GMlEtABXUGs^R$f9P~Y_|Hb;8+u0!#7)FNOEXA3g154Y)vCM8-_9ER=|6R z)*PQKfttD1+Dqa+%ieAsBPj@rgOM&=Km1dxX(hRb8c0Xj!_TZqBn4sF!(ogBW_5mU zy~WZVzNpd%Vm`M%U~%6M7Xv|dSRb>P=izP!veWvEWj06#$QM>V%Yk%QlNn@}wO_@6 zOaRHVjvST0Gv_z&JD z_yS@MSc_P8LJdC#a>#n1D&{QDIJ~2MZ#9<^IQNBI)#Q7t9m`da>2G69canTz6u^qC zkk2ve@jLSQ$r|Gmyo3B?%^~sL9y)FnvZxl?acj=qxIf-A`s3Cb7ByGxxb-E8H&^X= ziB{atp%~SQ``J1mQ-xZ&KU=kf@~Em-+|SknB=TrHI}pa%thOXxNq@11`eLwL1=bYK zM?JwjX&q)!tu;?c`>S7C#`xiRj6F2tl2E8T&Jyt zBsl?nz5GqjSg*0v0>R((jJ1m83XD(VYBp!BwJb#-7<1P8h-K^Ba)xpT(B<7e5e(NNA-dgZ^TfYS4Z`t)t*Hi)r;178)LlM za?uJnlq%E%x>({EUJAviV|d9*kf}n)@RBv0MIFOS)>sl*H}H;j$$E~&E9qa>3SSJC z;;OZs^HHU^W>s-zxl}2xS%uYaFU2)0vW65@H?CP0iB~tSl_=NWp%_)JzpXklRj6G5 zSkJSla$UFPk;ro0fM4fdYZ-}Gt{c{N60g^PvqWF!rnQG+vPB1&|ASZlo7RuMobhP< zXI&-nt^l{J?lo^e8n>)^_uPIoAcjR9jaybaiFY(^l{gw+j5->(tWh#m=x7N0YZi4h z!t6sNIe~Hm;ho&UFrI1uB!y}w{_f#+;9j|h7yl>cyhYfjS>o=66*(YPggxj!j9DP= zgDd1VkZ5}pNtWmX>)7uC3E1aZhJr*5fw4-vd3~Al>7nu&P$_#7%lZ=$l&X|Hw1JG7 zITD`LLaNgCX_o2>;mIsW89VrZjJfY|IkHs79>+2pQuU^o$OmQ2aA;#cNs`=1N~OEy z-Mp;5wy~5#=tAQCy{x^eiIn;^!s+RMS-Y5JYf-qE3i%}1`FFGCsWKKu^nc5 zUw~AaZMMKvi^Qr+FcuDC+Ops6t*z?VqbWw#`LghI&9SFR5f`h63+%tUp>3g5f|wfi zY#9?+-7!Mk2Xc?SkmVzgCL~Mm$oXD-JxM<0jQP~IN43N~lv_^+x!;~ik|o+Nh!D?! z)VK3Uyi^VC6|LkkEDht3m``JSdTTm9;#p|LeGAgeK25Sv6laE0yRM~Orwzs|ghha* zw6^Dw$gN+3RBh~KB;NVn*52id!85mmeS*Y0b358i+G5V$ES-*aVmlP?YTVHt%%aZR zj`m~{@67FJ-#LQk#i%p4qdi@w3Z1!~>_1r4ncLaELgJOHiyht`_s1(&SGy*OjKOmC zu-lV(nfd^^m=hMU^Yb zmMtr}b_BN2dfD43#w%AZdpC)9rX<^kNMuRzs+DY?yd%}a_P@RuJR1G&3Z1Z|-q9Ff zC$XrbF~BbDeEZQDU`KYLRH1wBfD&aN7>ZG4A85zRRH3pDvInuKvJbXXNn|PT-ZaD> zL*kYF5qp*|21}7*ui|{vJ$IO0%%Vy$%%0!v_EHS9*RrVJbeO%H#QRN$l_-}NqsleR zJ|I(t%9Uyx-Q`hLrcnFq`GvN+BMzlSs0}>3tDm8(jS}?0k|1qUF;OVkbzZ z9oYl($rsN-s%wzyaXZjcmf|HybsS=zv~x)E#V%;`N4x=Z=j?)M@bmjx_@nJSj!|15 zZ5OeqoX6RXAClWr`AjO2&t$s`$EbWJ+x=NoK2t(h(dZvw)>R73mb1U5{qgqjIa~GL z|NcdeRc7^yi%fEuiA4cW`X$Vop7-S z`mnFshgmv39xi6XwqCQ3_m$gH`@GbS?|=I~FSi2&Z{MF)CH7~vJ&$6%tHf&iQxbW8 z#ixde)%GEuSRiln-BZTk^=GXu2I01{#ZFkK3%?h&wnWVPb^^zI$T9ERE{Rv?Kd|cz z#(Wlt6qp;o67tz#Pa*MY_(r?_5E-M+g3b0I60iPjDN)j`wtSZ4ZELHY$*EM${L~&t zk|kQg$jKY>PBhZvY+k1=1`?~-_1&o5DXcbC|o-S&1$l@mz1 zJ3^d*lJ2(iSW-dGl6=GR8LtMp$Nq)oAg>0w$G*&>zCiJn9q}mcVNO7Of#NGWp2REr zUi&zUD*HF~#1u+JZCd zNtLNoUH!>E!J@YQi+w#!#;Ei3REZ;Y+HUn2#&~u0wB4V?+r!hge~r7ZVe7xyizp^b z^nfemPawbBb^eF>WYLxO50F3XH6&iSF4*Te23xuKD_^mb(`BmMDe$F+$6!W>t!Lc6 z&wty^K?0ET*gf(}`%j5dT(^5rs+>US?eaaB>-M881_+LnUbh#roH!gI_P|ruf9=;; zu7K<(S;aD{j?CwVy_V&95X|R>{gIT=Z(3yM`2=H%>;j*>3*{=d|MLkx^Zn1Ro{1%u zzjAB1gWR&a`{YAN73NGK@qUX)=Mszhm17)t`0Yn5-f6+2>PBg24~t5b;M`fqDmvee zz|Z$B#6L~ZKaBPI5(bFv;ba~hGze9|FR zGp8fRJULwU8JjzOSX#s?8OqWH1Y4)goslfl*2}l6S~yR$%mcxg7S1dZxvjCVt(ML! z9HZ9pXyv@cl8`L7)ymn(QtGClK5Q#z2g|K2x$bT&=Nppzz{nMH>#dx_BywA`U|X%6 zQ=F;=93Pym(c1ZgW%XuQgA-y}JJ)4Cu_~X|PGA%r!`MsZBg6)Z*-VlbdkX}g%(iy+ zkSr8OAm=YArpjoUYK0?HB|1AuvI2|Y4K+-a=oE9zFOcdoq)K!ekCCbH=>YcD6P@-f z_;dh|VWN{PC9DIC>4jxL@6VaVF*6&;Bi7b|r0|y?rOpCR)LGCj6r;|9_90PcL5Gm2 zv!G*0)LGCeB-zIn#^ixt=odp9!qUx$As;+vX z>Z&KIt_}+2qw1~NsG1p)D0NnPqRz@8p`6uO`AA4q&GbaoOixtJ z^hDJURl&WKohW1C*v7sSRXVXw8m+E15U>RH?Ye3B$>MSFX=U^R@ z4@mL@s$40~hg^HrFPP$d&Z2(76lWic`UO**A6e8dIL!HtMg4-qoNFX<>#bnxsZP{b zd48$iG|ef`qJGmf$6!&vX_`}qMg68}C9XDUPE(4>3QS)D>qx`4(wvSYa_ikll1TCc z>i2rgSxJ%?P*;-2oNXlD{p&Gj4~sf;|K}WGQD<&?C`O&R86i<;Zl-gRQ>ioeapx}< zb>@zA!pG6^2~%h8SSNu+ow?&3+b4MDPH>vBs55tx)59lt=04^8PfF-Dtdm3SIB3b<1DK7KI@!gQFVTrQ))bxOXj== z@|kv9&L5Cep_u$o&RI@%7L{|B^8ky=`8g+hn1T3j{Z<^sWB*_n`eV*a;Cy{rn znweo@hI32Cgno-0r`kl!M;`g+5c9lq56RhBb-vGZ>XYQhs&jd!Bj35s58XXyI_)_| z?V%^?8s()@d+3QeJ~N$eoR2y_Aqm|FXN9(|u2C;Iy(v{zK%9VYmO?3Bxa}BrCV5om z9Qxg7J0n=swq`p|v8Z2gjx&cvZEKFRj761Vj`KN5R-h%c*|OpHnseJVVGwM6jflu(QDC8yL=R5t<#-;}MCmz=v;E`eYxKuoCjG95R6&mv|@SnVHva7>B#ai2*xaSl1RMXM6R=*Buo6) zHC((0Pf%WQF0ovUhjBKLSDnJAKUKMn z6`qmu4Yd7IKvp`%&q~<_@+8P=XUsHDaAw21&RUkS(9*+H>zqx~F$Uh>c?G^Z4YJXx zG6Tiy)oyZ5ntlE)di5B zoTT|O)hBTEEA<4t!{Q_@kg_%(dPpEAo%SzD!9A=Ga>iN8k_AU&0LbsoxJ5E%6x8rc zkUyO~mP2lY7zJ|C>AV)9motmyYseYpa*00U73Vd|$Loz= zao#4$3ABXo4m=HWmaaJKSo(rA7zuBPIGd$V-@GZvRcF7H(2T@u&QC1r3rg3VLKd7Y zmI$e?ImIMd;!2{Fzn$Z+$g(>y`{+%G`Nv6k6(vW6)rt^X;6HCTIV4%4-%U8b9)mR$ zoY^ev;Cb8@NOjX$;)}Tma?3ft6!Y;)D%^ibajS4ZP-P5aNKEr>B5O0B$af7R+d{j;LIOZ%bw{xD(qZ0C zWq6+JPJdg*^oH?gtQ!gL9+sD&b#^v3Oq6roH8Q4ovfStL?h`C+=EK`y@Q>x)ESAkM z_o)JmD3*5@vowO4PLtudly~1@!BU)oeJ<~Q%ChwZ`F?kK_dAxkP}7kD%(xbVO5C*O6&oGZGI$ryUCw%sU{Cs^>kT0EO7x)WFq+>k5URdSzU zIR#P!N>RzZ^VxA__jws3j+71)qao+Yu79Oa+G2#CFef41U+_FA&$g%7WiD`-kKv%g}D{^&gPxZq$2J>jEP{Fs8a&MhflEO8Cbb zZaot3sMc~Daw_aIVm`Ip7A&~ZEap?o?ZATVRjjM`xII{~^@TOz9G=+FLw!vca7@ht|v(l*E+;-OrFdq@b_xjbLr(ClR`OTP3WcWL{a$Fr)88g><#?o zMb%{K<6fmy1z}+<54#B)uw1$Ht*9-Ks-N4LWTD7d87bC-3~{>m zLA~yu2A^9qoF$P=oh1Kh!%;U0QdtwHW6k_2)2pGYwto~aCSr?Xt| z94($9S;A6hVw9LpvX-Ubf01G?$qtq=561|*Cw$M&JGb2uX4&@o-c4s-WB~E-rF+*8`XJf=+ zl5s4PwOH{J$sCr5aj_z6Hs-T}<*$X&;^dJ@9hU!+BgH!{u@s3cpR|h=V<;w>rS;`l zF@+?9W!Bhe@dC*dmWWFMv4CVg%hW?r;uVrrEJsQO#2X}=Skz@@^yYT@LB-zgL+lx`cB{{(I z^0a8tlIqWCmMS*X%%!;X>nzz?DRCdAO4ub!I-zW=SV!lV%Tjt&jJTM9shY6djEm%$ z?kvL=M~h~Z&rp`sKO(vIj$_$zP^Fs5@@cPF&Uq=zn(#Q$2Ck5U-1RI;FRPe5mh+8c z#8uj#V=P-{!M=~hROeaVY8Wlr(Ef-#S*{ZkV?|ez3M_}#2KXGT#gdy7CrmnGi7dx< zM2Z2Fsz1xo*W<(!B%@e*ZI2VpX@91Z_^-4}NV1{j5iKTDs!bqJlSN9IND(uht_gcc zsthg;7p>{YpV)_zE8aUEB_5oBG07*f6uIJ1wSX8%GU7DKLNTChq}U2F)UEP|lw~vG z#9oplmf!VgahPNZ%MW`39CMtdV0VCHnw*#UeAKR#I7_KU{E7RsQ1tB@DgGuYz9?fF z^@tI-NCsb$(m5C>VkW{EnR^-pQ@sFh0As2YH{r63S^HU(s6;V!SdK1=6edY~CBx!G zBa(*KF;#+i_=3EjrnsG1=HG;UhAVA~JD5dJilM7$iaU;F+ASDgg6n*WJCmhRE=e-W;O^1X+DUOUSbENjqgGRjJB6jvtbk}t zsphi`yctXPloWRrOTC(<=qd{3V)<%Fv`C~>`&c@{NK6-!6D+}Lv0@O(b(Sg@<3uJ& zLXj+K?F@NONpW44^iffC2Z7&<wN6)Dz|oM)+ePpsHT zB8p|X#vh4eslc*%b2LjWmZBeH#CA%R$nt4)wD^`JndP110hSDwd4;hoQ&`@B(Gi(y zKFjJUF`|I-SzaYh}#c~s7qqL)#7A$>>BE`cbNi01(1w=YY2Fu;WvYiR%AWP>9kzx$R z%x5Wpw(Vq+RV-g+Mv7@9n^|^NDkWx->|^QsW{h}=?LW>GUJf|wRTe6{w#mL62~%v<+D!%ViVj;Qrzh* z@1#VFI;BvSvh>no#39Og6U(5rapEM&9+sN-LmeYI&eEe^wD^zY5=$4j9>zR{^(PYU zf_VRWqEZxJv8%B3o*Bzhhh;FdH{^9bk>!y$Vni9rCz<6XSS4599Wq$T)qoxu-7luF z=%ZsrB}z4)#OqV1xNAtfR!WMyog`a~{XJ6LN2v~QKI6JXiw8+gmq>M;Q#Htr6BA@i z7?w0!H0>QLo+T0Cvh4G>%T{-aTY;tbfEY28VrsGM9~dc?kR-Cy?WV4o$t=TvfgUu) zj9@tj*Yfow(?I+^-xT+FG;ZB1X{vh(1X^FAwpOZ}7$f(vW5+1*DjdU9H<@MhOR`mv z>SnO~Qy3|pOT?HdEVVz0q~nw7&Sz;0bqsqhsqQM4PW$5M{*~%(X4#MtptgFdyN{*x zJbA}Ybx*MTb~=h`LaKX}JDX@1a~xS?WDTnSRSh!MZLCEcP7hGxC`H)R4Z6|c8w7cPh+Z0 zEET_sp;iHu3&j6hq`KQ zVma9&T08~$q`NIx(lba!5k>zE%a3luX zTIp^TmU|Wl#4OsMIxMYvL{cj^-A!bPZ6o_2>280P1y9PBUb;JiW&CbcifJroUJQr= zI3Lp8MJ!ip#)t*9tu-v+9U{fcB->doeF^O!lEW;|J`qKCnRK_1<P7Rw$ap9Pj{19wrgR3|2qr61s&D3EbqhC@ytzkcd#s+7fWYux_g)F!XLq`RTl z26vEjcO1*sI&pLkrn@s)qM+Z6qekiOQkE@$$^K5dyNTt#e^8H!aPf2&r zv#i+?OIL|>S5%axD4iG(4^XNKBnyQ0ZY1?aVSg&&Sqby`p^c4CvS6Q$JI_J$R?lxq3Z-A1{Bw2yK9*q;nXj_9hW>F5j7YU<<>Fy|&#}~u9rzF!s0=yE7 z-1=1#c~zJB)NyF*Gy?o9<(wo%%)SyXaz|6nEC*rzsHf=2F9D%<2hw6h_*6V%?W?2Y zh@^P=<}X}r?xCD%On4R5pB5k(gJa9}DAkfW7;`o(?TAd3;TD5nj0SUQ@Ga~NH~Bu4 zg`)Y$Xwe%|Wx7`zVycCr)~hjMILYBgC<$Ukec40IbPHMLL7xcwR+(-w%h#|Mbx9H$ z%TyO&-*F^4({))s?iVGdP|i(Q#tn!SGf29#{CXyeT6&r8P?k0IVrWb_(;dgM4Myj1 zoGsIx$?|Z8QsPC*XDLfPxbx#!cc#0ZWhjj0Vw)t>&12d5IMiOagJinLSh{2f=&a0i z&$B%KO{B=BoJA8^uA6S0c$cIC%MvRfHj~t1Y4nmD0nT(=u>7+NvTp)>TDoa`st}UZS;T~3Dc}Iu)1;x~1xm7WadJ36tBFm@K z1EPpxl3AjlL5t&%nQjKl>qnr+N-27A( zc{o~>c?MJMW3j%C5;n;R7PlxMYLi@LncN_X`g)me0CL0{-sl#LKT}MQ#TXbRnv>LH zSqyzx8PlF6SRCM({w$xZh@)OxraOXV$cz|HHI1eE$Vg7Lh$Z5<%6SdT(Vtb!c9s?} z-X^zxfF&<8hVwbivb9SSKag>2ivS;_Jm{1!LhcY?E$<&_h0Vko5&Eo8a6|0VC#nQjG^c8BGt zTBciv<>8D-dX@xrm1SG)06j~}bdy;|On@E`jNn0CWl4Zzh|iKT-6!(!+uOs2bt z<$JtZPz_(ha-kRWLEyPern{YG_qYH(8Od}Hu>5A0q9-G8U1jOoSGLUIy2>(SP_#&= zk|wm2B~95HN6#kUy2_ILmFy{Gx=mOfpB^bjQL64FLi_{IzwmAazaYoF^=c%wN#MH5 zqNPUj)o&(CUbyT{z%R(sJ2j44=5SqQsXG8lDt|$ipX-$p&yXBr8970=gy9!t+5NU` zk7c@|l`Pkp(lGu^SK|sSpS%P6GYR*(7R$Q}<;XT%S6Pnsm(Kz+-6WPJk#S-MZ9R?U z&8nru9Fj>aRS!gog(P!WvKv5~jbsH&>639{CCMh1C!dTGYe@F6{8T$qY#=$#QmT54 z$S1kV(yn?bag-#`T9!1>DVm-$X1YO^*E_-$l42UN^ht~ranE8s?9NhpZKSA4lE!lA z*BH^5WD?8%#gU>F$sCeg(c*tFABkiYOBav{AdkB{NEX2B#ZlDC9pR2k#68RvU%*_o znGiF=ozF732xi5CJmH>(y9>skyah7S9o0@sUmkSEL}yuwORyp@K6#wzR$yt{FOJ$a6Wv-YY2D=W z+=*@rmN(1E=eZNzB$mCoF`_!Lh^40kP%f6^U&PWFK9q|kEK80IOmqd@Z}8VycqUSGqQ z+a8OfIzQ1(WZC>(q!>ss{aNyVjil%1@OzQK7sKG0QaZ&-IghaNwr;_Ax zJ_SbtbnTt!9%E_oNi1D^p%f&!qTfI8&OSU@o9K4$Dr+W6KIAjWo#c~mK_%GlEvfMezQYvqPFX_NNCEJaESW3av2pT_}?#=|kv5Ok3!^I>>HN$P+PfA^u9QSyC znd)2$tl<5~|H-=lxICx-58$Wm{#~|v6GBM4&(Rcy(1?Xt2%!-|V`#G}(`bZkg=Vp3 z*^=5?npMkWnq^|4{Xm#W+CF2AHq9DC)Ck|#d7t;S``&l^M~|m-o$ET+b=~JW*E#QV zF03=@6So;Dxz0$TuQ}bwxkK2w*{he)-rMqR%h^)W|=e(hKOsiRk^S25p&Gr5dS<6QsFCk%%ln3hA$*Smiih4 zq#RP|YY&hWkSbpa5mq+SQs=9L=&f`bR{_43 z;%lGdPot&5C-7dO%XQQ~tPuox%h$|Oi+r@K@%6D>bsFNDAZvY_(UR6%J&810-tmd2 zjU+A~DjtQr>uY9t1!=Ur=j(&$<9TL<5Ver?zCN_fEZGEU_4T0V#gbi+4Ze(pCg<=< zL=EGv`_xy&^4T&YZN4Um9w`pq>lO#G)n~rsmyASQini#}S|XO2d>(5+jZTui+%E?q zU-+VGjSO}o7W)~@9q^^GWNaTIB&6NfTyKu>sj)-E*^mxj;VQpOf^72@t}*%OG*3fz z_!hkFmk!8IU-CM?^h3V)mA~tkqn<^~v9B{gMnQUf1I;FlE=3|_pD*ow|5h_0y}r&C zf0{zbFTU`P{Apf=9PkaY=zLZ~e)n~@no{gIi2elpe)@cao6J_p>+xL+r1`^_z1gIh z^ZgJJTZpJKU)RT4{7=SyU*@NJE3f!swT$cUWFJ2yxH~p#;|l?jb|N&((g-TxkuUQ3DWONV<|t?#GLf|rm}qXi<`!7`hBxl zE=H7vjxg!>m9XSK?h!waKx@}m!*cC0!BmU(`vlK0Li(9Fr z11wFSdFUOa-xuYG2d_TDWR@v6*hL2AoWb&D zhJ$)e`h7W8K4)PJ5pA1(Um?q|_e^WK-&fAE6LC%NBc`$6*T6FERtNQp^!r*_^8aVz zfBJo$EN^x==-s^E*UR$ID~Pkgv#H-FJ~!nOVNQCZ@ArkWq<&ypmHoabmNPI)rTbF) zeeo>cdR$^Ml`Dm%Y9*qoNG7qoH_Rnwk>s*$!k1O_ub|&o#8N-f^sD##Dp|^_?Nsyk z`x;q>pKT%y`hA;OJ{|AjXpT>l4bPs)|u~O(a$<_E&5oZE;8eK_*HH(C7nIpCf=s& z70xm#+(sicxK~+j#Jhuzl9y|nrL!bmV5c|4eqT0A&NXiFCY7RqXXyy`Q2c7YuZ8954IciTwzFJ+hD~gyt$J8GPco5v{k}n#&r?l% zzTfBl(v;K_XWH}qJ|9c{o2DPT-xtU7-!4Qk(G^T)c>r(X9kj0u7H2cw@kw%6Hsam< zXOcpey6bJ!7l&UZ%XF8A`r`1bWchUij%%(ytF0`Fl`i2X>0}wV9d8pP2Uxr(ns*S~ zt6NREs&ifZD+pt$kFllovg|?6z$vt^OqT6a9AXSf9*aZ` zse6QQud>{Rw`?8Xizf(6&qh0qtf5|I8TqG^`gTySvV5`2A>t|LZk7|G9O5#P0hTkX zT;eK{kgrThKSm^%kqDMgPc%JCxK~-0ziGy@aj&v0c?EHClurgr`nX{607(wZ)1zD> zhoq3@&wRH?Mf@SIAj`fes|ILbDSya8{VlkHET`L?;%UmKlO+-H8+!Bv^(sp$Mumzg zjc7OJI`wv!SV|JgGUExmc%3AQrQmv(c$XxeW#UaP@c~H+%NW#MkLB|aD@`0rG)BpFTngF%EcYeZ#DBC^2Fv6=YpWcV z{Vt5U(pH5mVON;wS=_5E-z~K9F*mSG%XbR*b9!H`ET@D7i;*OqEQ^*n#PKA(ET^t^ z@vmEaW6E{m5Y&Em>GK@Ma@}wzjmz}=Vpwjz$|+W(H>2N|z%p#HM--#K4z&%7?;P}5 z(Y`WSwqIovH^%BTc`PaWO$<3|8uFoWV5_;mqXl6Qou5Jo|D^br7Y*1=cah|eqTMyRXr|F)53BM+DJO4 zz2Dc)a#^}f+)Fw4ur%D@5D$|KveeetxHahAW=cALY_OP3X?!dVV{D?3B#xyc)g#tY zt1_A8;|~!*N@+4!ycJGSN|M8}9rLP}krc8NO>$E-IPO)J(-Uko=7J|9%eXa8>a)VV z$}+mwC00^Coh7|VLZly0IlF)S^=Va5tc z0?V!8PVpT{Dv1!=?s17Tqx7Ab$!Wfwfwx+W(BWRS@`*saF+DF9u-t|?;r%4lERQU8 z(zqVptyr#}V;4QNuQryDnRqVKR$VOL)O$oQ?W>Pv8-AVtQ5x6(Oi4ff${~KCe8O3d z?sSR)k})iEFR_au^Yq=4$nwWLs~$^Z`R-$naOCN7WwR_zb&C+%s(@txwYr`Ig;pF( z;zu@d0;Q>E`DVUdj3Q}a+4F&!C4qaDrRsRMIGfV+u#CPUSX@XVc9?R7pKBB2NkUof zd(|ycNTOICyvWKqp5;=+KkNAy{k{~IN8|C#C7HzX)1`KC8|9PBQuQjLi%E)D?mWsV zrjb;#{DmjTBP5M1pPY^{U-M*SdA!Fao}x56SpGTN&d<{WEM2!_&Jm@teQQb@gKu-0 zXKonFjcCD|G%+j>WY|S9ZI!?>Kglg#AxUF7+2as3BvV-;UvN_dGMqqh4kC)9Inv7HEgFoOu<--_OzaMmx)OHbJ-&K#{c7KPuSp6P~GoV8V$n?@(miergw zaM4&K-i}%R3CAcWZPmn*__&*Tzwyq<@??&KdcXU9T`ZTL;-nd2{k}ey<2T!A1QYL! zU8baeraF16aF)@dY!qdIo*b5mLmV`MfOa^`MPE5-)B{gOma9gYQDD?IEWL;^6GghD z1uVOta*2^7r7ZWOeQ4fl>sfvo5zKAu7MA)3JB^;;US)9~ZKqL&eqRsEhh8U*GN6A0 z5fAzbPPrMqMzpU`lE7ZI7!rScCfYV6`Qiz@uO!n}c`SE5WET@iN=UroZ$v-pcnSQz zSl-8z+Vp)jTXM6VdsnuwJh{ZlyS`G?JJq(>=q9nPXinx++~--(;zrMa$r-0z;2R$lxwi*@quwCd7&HarV|vD%Uv7uA zBIkpL(nLYpA^(tI-2?ml@9@1K$iKdpfFn!_!wR~-RJ3<>oSq(8`}7hmZ6wbKEj!U) zCuIG8-Shv9cSnT(iacZ}$VQF~8%=~rBW|q@} zgXsz4mRnfDdd!o^ExTDlddySCEeBXGcABwTw+#7DAE8%loNGx0%lnJb>c&&gEn``h zv+;xHg{S3%4WG?j)}=}%L0~#N1M@hw=88z$9HQ@&h;$E*sQHuSXSXZ z&ZKE)89C9~R}afCvDQ|DEV+=;?Yvmo$#$zZD+pRddT^ zmKT%l;%G{f!Lk-nog;CNxn+)(ro%>abKJ6!<)=p+;zZi2l4btc9x0@-u zHkPFq1k-cbExTA!J*Mx=E&EvhK_sDmOL9wBkSW*i`^>x&w+v@#zsS5dx#bv^!COqv zwp%8$-1VK4`orBajpb3SMWNrDaIdmdW2U6;dBeTRa^eZ5?-chc%df>Y>S@Ql$`Ulk zMsH-eS6MEZW*y-c7RM(hUKIB#%UNr!eGRb8jSi+aGTf^}Oi9asL_{LqM%^-k<*o`d zf`EIKr3AkM-L`SdB$gX7(?pL%xMe!a37B1_qri!|CQo(1vQ6bbK^DJ(%>*{N6GEhn)|e%{4bIhW-pWyb#8vWR6` zhZ+5M%Sx8Z_u47K%`F>QN*^_?0=L}Ea;@DhGU#}Au)Ndi6!($zv3wM6qLgv3+Du88 zZE{i%Iqp@Kht5SileQYeGWueVc#0&E<+)N9y`$j@vXrGb#j}(qhh;zJ@61Wi*S(PC z=QqtP0Jkh>`Kc1Khw$EwE6DQP>E;a@SCHk`b~}x*xMe3x(TAozhAYVO$J=&#%XUi} z&VsH*lS^uFwtF)ZRf^G@xS2`m#&bkdu+Tc)y1+3XQZDW6Q1-DvUY z**b2S$8z)oc(X(6!YvoDB}FG`(R)mx5&*%jcMR zr=xv>Wf#jMSZ@HI7KZe(JolPQj3#kmJqTUW>OGi|N)paehF+1gNye}o|CUQ6kR-C~ ztHl$RB#mY2#kj}l{7hvT(Qj5}2$r*0er_>uCAfktH(_imh4QIknS%(WNhB>K#p29s zT;dIqTrb^Y;)0MM@d1f%gkRbrAu?m6k#QTaMi9=%QL_1HBQHILb@`BHnCuLY{gC0Z zFF^i;c%?Vgztw+`5i%w~TnmE4NSPEMBOpi1bcl}ashfyc^kS@hC+kP~^SP9yh2_^T z5X%NRR;G?NXoJ-pR0;p zG=Di#MzNewZlX*hWjxDm_F#&{h?FTT>wj>Fizw$wEOlpMlpOB`kusO%i5DFrfzm8s zS&0~Fz1ByhtY*0!`CLtDnpon|Lf?)fi6`8121?V#G7P^0J!39X_OWdG(kX7G zG_J9xTp1Ud-*Ti3XPNPnlkTWUIfmus2oqBgDHBD6N*Wev+n^g?7&&dn^Zdoi|ktS-eCmJL`#;1NpG z&2lu_qI&(7NIAgLir53aHdLexxzLpK)E68y-V`Y#SblmHV?d~FB4sSgTtso}vD!$P z#1eED+GDh@be8>VP5gYM%w~zh`Vu-8JyI61JckGzJpvvnOIfb_*Ga9WNLkM^VwPE9 zCQ`Pre1Fg;9>~=tZD*M{8BtYqJUuMGu0@YDr5R*#54c4c9ijIkQ_^R#me;E!J{CKA zoAsOs{4Q9Qe_;AjB4skmr4GEUqb7-z87u`qnK8sjnZt4p*0a*>XZ%uF?)=M)Dn`n3 z78~9NO_~Ol`j^cZYou&t8FnK^BB)%QEL-kC?*Uqjk+PTNhdP&7O{Ea=rd*r$S~-WZ zj1y)g6u(NADAe=1{|CQHmVe(zR1D>l!ZLT7iy}-SmO9T2>bu2`rY-HKpU=wY$ugxsqS7R)RWCu(8{TNFk>0{aZg+ug`gj{S& z8h@r!gy4CKdzEE2W<}|B)o`z}9CH?~DQ%U+G7&Q=^c>7cna=Vc+J|~%ANMNDR;+2@ zTBy?$u>4+QMtpFuvUH+{;8;r2!16B6vmTYk6=b>XRvV2tN6Jo?kejg<0c~}FC446O zqeyI*m~#DgnVI(&DZ^N{Gc zIfjw4hvnwc9mF(#P@-dVBOpC~6y){3T`_AGHn3 z2WOjp64W*c;`_NT+jy%OmN_pYj)?L}U^&YZEH;y*l6b{Ymz#DteuFGiuogjDg1+u~ zEKB-Klvku&KoWS&)g<}i9z;-lK{>lF*R8L7QHW9duSt?1`UnS7Tr9I#{=!UuQ?7EB zu?t<|Pui-TC1!?)OL2hZ+7s*|q(t9QQHdt!SH5s@xe{5{_uIuWlqQ3v3G+cr+4ERR zuf>=Pr70!xii^HRG%r12>sfL?H}PzEzOz(3Y39G<7sqmatApZ^@YG`||Jfr(QO>q2 z%zfB_n)XbRFqX^m?cxHG7?$lAl};o{APGFrsU-R0^3$zydqOg3+Jc*Y&ERV8n= z8gHXFQ_kW_b3B<@9&sm0C`&P(L^^U0XO$%c_p>=0@euS#QxAC=Z8eF~7^#Mgl1%|= z-hlXI+<3iJi5NG1sAz>qS&dO`-41_YF76gclx$)-_kKIYyhX`2me(IQZ@y8o3lg~Z zDCxq}#S*>u(Q-_H=)IpV(?}MH-+#rrg_y}7Eelz0j|^sMg6QM9^-&v*pGM0zmdB#Z zvng73vCKkW<;f50dkwnsSot9#8@=I9Vi)737Mk+3` zBo-?V>OTBZ)Gg)+3rM_T>``Vlq-a^nvTwENdykg&EN9l4S~Oa=ux!W59&>14oh)ky z>@>m~Eqhs>{}S`@sT2b1a*JhEt+!!qnzloTyb++!@4J%@c_3@BQb zv;2#`WjzuaEgM+og_>V(v}|SZoNk^M(Xx|e&Kst84p)%G{{)Gawp3j%e=QL$!$|VQ zLuVo?=2U%znIvAZ{X9Fxm_^GxmWY`q>MU9=fCToBVJq|wTRGpmNFQ@A$!xLoZ@ZXE z5^{@9Gh2*(+$Qo!GFZOYiWMG6@>rJMjaVa$FGtI2meF`~Ig_M~<>uvXaREsm$wpW5 z9J3~Tv~;DJeT_TGjL1jJv~(>S#UGbr4iwt+(Q-3OaN-d03`z1GCQVU1zLJdj4l#04 zfXv6c-WhVoT_$J8LHxR>32~N8&M;ezD;g^1;w|YcnG+xfQLZu4JJFxUg*)>c*%}~0 zi?PPI%te`9I6|FI8S*(_&br6H)m>$0g0Cb0dhR#5*abcpU>-$ zVqJKd93ZD6&1Et-K%yauvN}LM##UF#EddgbG)Xf2UVqLjAy><|`~31YBw0=hkQT^w zvYO->D(NSX6xj{YtD49n#FSz(vdc^ z>WlQTZ2HPA^xWjhGLGdIti_~f2TzvCEI${xsV8T$%wW0eXE!}}Cd(Wa=Ww1iFAG`T zbp@MQ^Rk>}!%;4ZoS7^eSU$sduJkIzlVvN5qts*8`jDM0QxKy_>w(B#ma=#8c7t(; z$x=LM%5@v!$Bcxs%nmmZ6q98X%kv2)?qafxXIV9rSLBc>ET4qB&1xHR63fAjW~TOJ znai?9no+9BvWR6I=9-<1`+2ggBoV@Pk4=0#3o9YWCQcLGYd5RM$TpVsjW)AZjO=1r zg#JugiADCYOwMtd^#Pee(VxYlC-mo>U4{FB)u#xIas-! z#FlMJ@!WqNv4SL=rR8mmX_CaUT>Pt3Y#>Qy`31c-?Ie>}j$MSeW4$ho%w@^i!K>@Y zB9__1a7}5eYL*)c9pZPAW|oVVnXxVWzF4+}Auji2opTS%?in_U!o^+pkSRq8YIogx zIa!9XbmqFn2-+%&W%JPv8hONBMaj@JK??MI}En68i6Y;^(UoMA*<9FAUVl9(JyBRq(Gx)(A< zPMu+77gluE_1F|yO5$(HOpy&H4ZUBOG_550Vk*`$eUkFo!4ltU6Hk*IAn}U1W9(FG zO_4Y}{M&ex)p9r_c3scwTHP;Jt^R!!$r3@rXJdt z)oyw4kXY@F!$r3@vJOk5TLljtCc3@x@L{6c8#4|Q-QIZgFww1onTLsP13Z41=r+I; zhly?jJaw4pHo)w|M7Kcl4-?(qc=|BWt)^!W6W#uqdzk3f&b-4!w|1UCBvxBu{vom2 z5-%Pmx-GHzkm$CAZaKVinCR9;`C+2l5*3HUdM+7lKxCv~N? zJz{E7wf!+bHMN_z86Nh3S)g$~+#6ifb(W(|`n8P5{>DSBloO$y6v zdPXwd{;K38mQnld6iZVjb6FBUMZeZOou-H-9nS(i|DsA(viycoavhUXB^y~Le1O?H zcw4WMZ7eq|FtZM;WEacIQ!s}P@4{8Gk7dQFh*Y6`Txgl;t9;Bj6U~Av$TISB(+5%| zV_9y)cL(%af0ayTc@(S6=^4aTGJ|FKuwYufs!Hat-2SEcvPP9GWO?~55A_w`?qwN& zrinAh-OF;dFj3{Wds(JsVD@yG-q#M6TmLj8eO2-R%d0JBHU27Td)kz1*y(P1I#kIp z7LN<@Hk8j8mgA*~VW^UcED1x+YP3}{jb-dIydzUdr?Tug)2vHeC1Nxvrr%6&Sd%S9T&Bhac5d-u->v>IS0SWXH2;!p|4wy zFXLCq5`1AWjTBeOD3)<(KkJcV+?gz|bfbNUnxsmmu)K(8xJfgKCHe{zO@}*^p z%O~Rzg@Qh`gRO@9m%iQ^9#r1mGOya*c>g5)ad~q^H6>I2h9N?`&W6i3G_0l$<&Z_I&*Mr2z zlqRZ}u7ztH;Pz_)RShvX$i+ z)CXEt%WjsJcVgujNTZBh6%MUMICZ8%bXQ1x-&cE4wmmc=xN6>cgO=QS73~_ zhQzki9P?k%4vM|(kYOxhpXs;hkTERteNL*QI%EP%Vxd|6qeG^#JkV{YCrF2!%JO`_ z>B;GkvslJtnVy^uS;F#ngM*$;9kPaH$!Ulx$GzAgn^|VPZ)W{;$So}E6CC1ADn$>= zhI|+G?R3aNmdl2D=o!}`Ln}>5KfB&d>nL`}D3Ah2j&iY7Ps0~ODCabmVZXR& zCAtoo%`$%-`bj8F0n2a0-Bh=9$Z`@Penh;(J$Rntda?WzjCWxw*JhS~F`}whF6}tf zo_A~u65mkHxSjBCqy0wYu^Y1OP@1oCA8OftNc68;6$tUaL!y7(TE0Cb`q!;x=OOvi ziQhZ&*>y-x!M>iJEyVYSME`PsMVcQD$tU<-3_!XM$tFlp1&;EN=wGE?#rnrXqJNcI zdJf5y*+WGLw%RLq(Ag*!PtU?S43K?t$1;7r_5@jHW1lRqGGd*LpJhD+>kkK6XX6)X ztI_g|u;I(a*CL+-vZ>B&Wu2ejWhjeve*ThCB>r0c zZ<#~luM_^3r6gW)XOffFEBIU1v%LSD>81Hwwy>Q0gjsXuZ`scB`G4r~Kq>x~JuF2B zJmNu;L6%oB_w8X4@9X-Qy<*d)81=wkf75vmoP}hGnT7NOZH0uGskAXj&qB(F{KH#q z4AQfZ=0k#%4>?<7qpw4Ts6N`)Y;pOEcJVGr{i?&y^AOd_Vx4E3+QDL-XNMYKv97X9 zg}!0(v95Bk8pC2;plRRA2bDD#Q>C$o3!&M7QBqA1cui9|c&Jv1s{&i&aaMjB)>Pme5hxR2J zbSeDz#&8uu;=iAVt9TZxq$5=ti&fI2RRN22#zIvki&gexRWplK_TyA1i*?V3sU8;V zTAXm`{PgB|#J4!+@Ix}Z3u`-*4A54l6#Gb0-qhuqEuLs~iQh@atUmm@hpQwOYhNd; z3>K>t5h{089@_G@zkVt99keIUTdw#S^gW!oTyw@Qf8{3aoTS#V$_YjNa zU82(zH6DI8MyqNT>uf};W)|ygoS`~dtg~^J>SM9a#yQHn#^h|BjdN8Di*+_)RT7JJ zHqPU+FNzrE7$T0x5uShOY|Oyyk5Q1gLvnSqIU9Zn{-0aKP?|}UvsXO1%zR69tjc5A zd#s(_iN>l0B>potR@L+ISoh&rWqaF{!a5rlsdN_WY+S4wS*)`$PHkba&c*S+GbUrGco{POP?}dU>#%|(f%5T+bgUbu z?~U;)m84h{wmC#CrJ2f-eXmWtMH10uj>js+cva0}mEvmE2nl?CU85@3nXRldmaH0B ztTT3cOYJuy_A z4Y^sBbDFJ4b0y?fmA+nY)f$wAl`yY|+^MozPEW)Chh(UN0J#Tpw<=}%6(6wHY3@}u zBzuCa7Sa7Gw?*f?C&+5;WUA5+jaaRn$*LXirTQvct)?let<|KlT1^kA>J281)gqdv zdOp!Nuth9k^UF)Y>PZt*Wk0?R7A)!Hg` znpBpSPzU{Tvs5O_)cp=x*(^)tvCP=u5+StJ0+t`L&D%|us%E+9a}3b7 z7nh~lSnhn@%qYxKT`Vq)gz6cNS*nkv3@sY{rK&9DYBS|}{2q+M(%!>a9-CmJKA9{v zhDBnYoqiL~Qi&{=7GNwAJ(F1~jpc&h%}ksuHI=0hG0Afh^j5Q2zI)pA&Sj|*mYpw{ z{^u-J!*VB9ozgQdvs5!nExt;ld(pGh7M4>!a8ci2mg;6nei$pUATmEo4Y2%#RcQ3O z)>+E?nJMWQyN!DAvXqbI#98JoDNDt%TvTh`lCo4X%M07h3h-GfgQXdLjJi)ROXafs zidh@_E7Do2h$SV{Nvmz(3bK@9=8JyY!WAU(*AlpbB>q|gmbRl{kllIE!9 zt@;T4Tg^~yELN@cs7mNC_2ISmy2RZ$&ofoeH;12%nQ9Occs6FLnr)`+_hPhE&!L;C zT3B*sn6l4Q?JSQzXxhfendNom7TL6~L6&NV`TE98<=t*_F2#4rb$stkC`b*4&Yxi8VoDW0h^NHCajoJX88MCX&kX}(4jrS1cnsR~(gUo`8$%v9yP zRds}^4`-@IPIC*^)6-vZovGSb{=3lh*w0j5EV1#X|8S=2V>$mXe6JS2?wQKg|5<6B66(Qi_Z4$g?UOCDr|7$4&8w4Uj@LNM&Cn zwhqI$O-a&s=(Dj%M1(rUuOy8u7sk59@MU@{*LNn(!sQ+j1(~aISUy_o5OE}(5Z!*> zb(~!!kwok?Qnkm;k^|9Cz1^|qKAfuxNrVWw+a_+HttvT9HNG%4iKLO`xZP$p!CbYO z^4^AmsP^SLbgTLnEw4l7E7vY_w>)?`V&fqTRLYO~j4c$NNW}M|T*Yb<%hzWI)0ZrY zRUXSdI~`Q^VpT#?EE3TI(chviRy{1oWZ|ozB=J2a=MR?K#8&L9SoQs6uFlu9&3Ig~ za_uv65dEvyJco9nieR|~?@zkME>^KD6Q40p{9={FvL?;cKgBAY<)%3E>@HT>EPwuG z#^Z`r0n3O1v+6>zDrGr8!_0jvR`o15zhqXODpoBl`?4_Ri`GuD>SWm%X?k3XRWHj8 zn4_xugo~BvHRU?~NhjT7#VVBL@$aqk9K}+Ew^99-?P8U{(pza0+v$v@u?)T1P2U+o zxmfy74yG@36stm#Vj(?laetN0CuP6hd$HIvG+2B|lK8WheDPv1=4rmF(=7PKNaVAK zAA>AZtp|+!hmq?WAulQ4Z(96My~Qez#NU=!teQx?;-Qn>bcZiiZ7j=QGCeShRTs;Y z)uw&8SoM(v=IlZXPaom+c;jrs-WRJlmfa^fS+ZG1VeOG`D9r*A^v;bmJ-3Th4M||m z&AgRB6u~~)s+VQn0ym4V&+NV98@upS>%AwEc*P@CSV4s(og^^lY~Jd=5m<8%&mHWY z<;~xmEL%9Ad9PuVobu^4X(+DgMwA&P{lo0tw;QWcOw=-o<)mP@SaO<{9+t&Fqwd8$ zwphjdX}0>W%`HOl{a|1i&Y`XY453!=uvm~)BJ&#~6 zIh8$$B%jJ&Oj2z`JcW972}ujdLJ_tEze*DEm#(!Iif89I!~@HNM5&tkpOMV_Y+?mT zVvq;Nvrs(owo9}?URF5}{j|DsrCGb?W!27U{>j6a;9k>d8i$yzo*ZWvsgN>NI#f%( z_~Tc*c!^|zO-r#@8i}VTNfBl~Kn|^#RHh0r=U<SsK2w(a2GmYGk>t+SHXoS^mgg{^T0c`z3X;HlvPtsA(#iO8AATuiY5;eD&gYrC z&6@)54Xi`0<+TLU3xRusBru;ih@PEy;yrFLmCnWhZ}okMSp~gJh2XpdJ`2iJ1WCTQ z_%)j-qhpSP=zLlq_OSG^oOQn?Ef~+!X_mKJTNUcF0GWClo(_~x3ciJG?MtCXDpR>6 zyMk``+C;gRsV)d&LV}jRJCxoy%G3eOoYB2c5BxinVoJ+Y7`{m<#4h*WRYS$35S>qq zk)TsCi$wQXm8k?ybMdQInp92`g72~Jp|g>8EaelF0{NEmnM#6p;Rzn36gr)0e2dzF-rfML1=E7Nsy!w+$+Dd5xuSF+`sUbZz`kKb$ol4&=^}F#TB1vKS z=WRSwNOD=8{>Vkof-dwJC>*`M z7P}E2uIIUwsX~^LNRK#|_7!r1Ii4@JnAqJ{R4GL7Yc|#*n1VE~sO*zWn#Kb*ns-yK zdLcUJIj7mgETkz{naEMg>c6mBIHW?wk1|``v;=G6V(%5IhUMzHh~i$XB@|C7eKwwd z3M<2qq_7+}-z{`(YK3ZM`Jvn;bo^?CN|I))b20Z;N03&i0+va*Iy%aMwF2$$|ZDM zF3QES>J^93v9cAao8_?-kI+%L6>1V@XzP-W$I4VX#lV-xJ z_+m9})dQnf}ZQ zHPw=lW*wmlHH)SHToZj%p-Nbm9%G}~!4;~W#Q*%NP^~2XI-x>!Li9DgI}I}h9?_*p zL`NE?*s6>2|og|LsQLIyuL6Sxics8bzc*Px?(PM^hA>pjDG^L<5NJm)0vK%Xl>*zlG zzF78lcqpP?PP2t2I@I)r;Wx@kv082a~Huc)_70MfH?w`ld zTG8KTs!%?bTEs2ub(lfvK1s*>gHbhFMtg=%DZ32&M@y0}7ZW?3)M(xa=qgXOX7(VIF~r#Zkf>oXIv zP@!z+nQ~Q(bWv|JY5^jxAs(Eq4^7yExl{5)-y4$<{$)gV^wAjxK#_O+dU?@Lr6%jGrZOI}M6qdp|O%Bs+DA+$U(f!F3P#)V!bas-&0+pm!x2vk?9iO-8Os2%ru?m z!(^KnTBpmk<5D9V7uiHGNz-Mz6br@3XYuw&(m7tI@rt3%Hdxa_v{< zi&slj9?NC7n^iZLs0Azy$2w>op(U!CW!y&V95%5e4YAR<=MvS%^6Hu9S+GQPk(j$K zp2}{!N|$Sq*l-(0iAlm)X4MQ46Clgf7%NSRTigwKRaLV*j(UDNN!-;YpLT&S8jxgM zW6tybCiLk+s?`CA-q#EGUXsqaS`{W6S@X0@l#?V~s|BO>17<{Hxk_jG@JhQ_fi%li zHcKf+J#-)1a#hH(q1Yu>QJQj=%il0})N<7T!S9RS#Me=p)a&%V^2L&m-8BF7HI>cs z(npAX#QVi-s)*(F7LVABtzJ_N5Pkm?hoFCcC1QzH)D7mCD{jY^l<|02q2gIGUcwB= zCv}<>5`PV_LS>TpYk(Chj|B79@$HXiDCY$%U5L+INKy^ad;jq}huA^ly^%^m;+R=to-|*_UZFy7HfipgjIX!QR_!FSg&PrW!Kf2fsO~hK zX0{kP8ta>q6y8qz5>;1Y%{1C7e4m!dBP_hGH-VtEB)zE4w{K9Gws}|*SsMRD)HJ0@V@X4u5J@tX<<)QPoMskF zS)Ef{L1{`@?zs=|Xmo@%EU)h~b3JNRGs`*SY~l&DTWZx7mdo$OnksaayIHnZn>Dy< z)d0&kSotIZqbIe>n`=rsdxc$e(pFI{6JId#B(*A@<%G*@)b^`YDJ=C<@y!l8=1DBC z{cgU2jw{I0@EO*`Fy&&IfxbQcee+sX&oca7Cw#|V^ehu5l3mZR2q=$*P& z^|Gu-9HV}7!JRqNlp^LY7qtd)XR;(?&a7?&;Lc?E^lj7r!JWzS{0lak+m1VvWhc(O zZVlqjWI1q^gXYzuTrB0IgGCEnodqmE)_G{WpjOpDteRFw&(wuaR!t(w7ok7mK3t{qDS+rUk{#D;7)cGw8jRZKoUPMrrmei^lV zFJ?}e>)uBaxG&e^`Uvxdn1?l5QS;-NA$nhLz3mkD(!SadE1=WdyWUCf__eBs<$lb& z(Qov)7EhTpC!CKJ8c8BZu-eZ=C*P~FEHf6Gev(?1#B$yS6LVXu(pi?TGZ8PfDx2l( zNb}B!v%%7fUTbqFltZjDKjaO4JQ;ILDdzuT7t2U;=jkJyExN8jEIOo4m5>yR(8mxN zOH%)WNmGWXGd;Rpr&1T_d}a&BO-^xPgWjsULZ>MfAK;yF0!ii)vz2=TMz=|7Sc)&U z3;iYFIu*Cnq*;r3;zpVvID3csmh04{N}a|lMqYrLAN6yc%4OMzct8C-ty4uT$GFVO zlXa?+W$`F;4(n7S%l=nPykDK#%o4P~^bOXj9W3>yVZBq_^L6R~%l)UD$eB82TV{^u zRIGWWdnW5t7|YbF&HY@bVpv9DWf&cAQ>PMGQm-{Vw>XC^cbA*5i`J=3mcMe$$XcDs zV|n&nYhMdkW*lR_-C3uqS$>Z)t47zUCYE`KgVn$HI@QLqa(o@1M-G~|wmLP7<-NUTRvmto zEVmA|N>Rgd%W5;qP^X$n0*`qMNxs-{rx{(UQv*3=nv%ECl%&EcIAPL-8I!V5`aw=x$QAwM4tMM4E(%+fIeaKQ7VMea&R2R!E%mdT0 zD|M=mBrs=JjXBTTTCjdEYGa%qJY9615c`~&&xrHGa@O~z4N#|QSPtN8XnIw4oFA5t z@h$B2*uG9}VL4`(RrYR{G@GeK>(n62lXE@dd8!kYqfGQzl!-lg9G=38v=9-NJJBTP7k1XM<%zx*6-o z*CR(;q^5?G2Y5Pi(U!-M%ecjA3XpXc#!yQwWvhnWIK4%~|07oAnn zVB{#bRf$3hqDYFx^%!GMdsAPF0+yclZDJxxHA{7ZQ%oTVdsF9JEQXA-iyV?z zmTCK(qJSi2wMnyPy+3hq_@{Kl8MRK4~%R=!vo@U1&e)a(#U&M%&F+EGsTI zb0_PR>urOZUI zk0S}(S29Vy*o=9#Cg-WV)#??8>K~GY;!J$m`5)SQZj;V=q1cW{1J`Q3_ac@BQ#_m| z^Bt3BTPI3GY4TVK@l6|(PtH1%=HmNZoTiZF!qP+gde@{G(_pvu#q!qG9^s{&D_Qin zR!$&khUjh!(vsulVDPV2S`lUB`0Y?`FM0 z)O9THBP#e)+A5vJb)1u1AlWSYvC3Rpg1$EjSazRcJ&DR$?r(5XzeJsCAVJheCt9#? z>9d;rfj*vm5iQaPk)KV-at+$DXNVaVH z|9kHy3EaDDvrgj`|3;&hpmP|`^7x&0F%!M|_{FjGL(H!-k>#yT4*nISvE01ce4`n4 zCd)*u_@~?axH>HDXd~;lTC_JS2Zx&}zR-XS_?>8(;JO}-fNDc;}d9A>iI^cvP|JVhV# zEZ%BblS@1ornjo3G+wMDW4=_5b}!3uJ58@X+Py5d@3C5FJ6QUbnr}~|)kG3_x7a?> z$Bd^#I#!9Na>bB%MbyRSyUA$fvYc9Ewc=7)`d+l2@0l#oUt8xekHqxFjaZ}0mGP}&MHpl$=yOwx6j4U4SrsG+uGFdLU%EhvP#4ElZZ(@>Hs%n-6TTtG4 z0y#Ia%$#m|MOLadmROELS*f~6_5>AQG*p~N$Fl|XvYzX4$V(+U| z4olNTm=j7;c*IuaoTeYWb9t1ejpdrJu!0K7;1OGSx100)bDK>pq%<)sw<7k^Y?aJ1 z7EzQYO(sd;G3Rlbo%?L!P0FX7WTANI2aFSuG(mLjR~~Pt$f8xM@PB&m3&mZZ+r%zP zQ^RuEy@=~xtIHmSK0&?J>N7kdi6nie-YW1M=8)joB+ZI0$eCsFH|E}0rOH{B2AP^| zm1<-C2vHUi}tiQ2Jb+LSaHnhd9@&ewn@1Wxe=`z=S^gPq9!*yr5 zCB{Z=bzFCrKTg6Iei5;`N+q%MK4@ZhSE+QCLd=fRbuX?v%bioO@-6MFkR-6|l_Y`J zqLCzD#J=MYRkYP+mZI0}VkOBAmOsA77Zykkka$J&6w`OQO4)Ylas}obMv^ZcTkoLO z`zn>fa>@z#ZWo=O91^d%G8!vyqeX;k!BYDj=AWWHhHJrcGGc-CyUZ%pz_R{v>(|r@ z(e?cHL8thPjK_?Qh7g^eckUh{Sqiww?4vRF;qFlKRb0PiuRZ^v5(lr@l86P^q>C! zIm{+GZ0{skOBr?VoCKZE088af<_U|sWuMLmYfU58T2amsB!T5hI6_hbM8}VjB%3t-$C~ezG^%70bG?SWqtj#uh<*yMQ3U~_ zHs+nTdh%j|4-glp?&_6>U`F!sYl4HBc$XAsX0QLkB}`#NcRykaD;^XK}YC% z^Et#G;M}cM5hSx+jSW~o6W4vMisdv9UTUXy!djKYY5s?pbbU6~s&r1X<|h*uw^n6y zn!n~D%9QdcFllI9&q#TIn0y)oWEoA`v;WR@wgapH)5jkFy#ex@WsdZ80K_ zLvMzT2WV1*ELo#%A_dp0Nrm-OKBD2EOWaBl3(*k*zdKBXK$Ge`sMC1G-ic=Pq)GL% zymg=Hdv8*Bm%`+uWu59AG$p-$yjg{Kor*)7 z4|R(u`+bP`0Q*{}l3CV6K7qWeGFUdX4G~)*%_^5g=kp!peO1mfSq%~0koBsQWRbWA zauCw04se<@Y^9H9lj{A??7co}h=^N<6@d^{7fi>a<#NcU%15$DB!>>Ao{G;@E{m^n zh?t2qpQ|F?s?#}C%z=EN8aT~I5FMfPg=%GKUN%HLPiZ+Nu&*mNwaFErP8omF4;^cn7&hh^;D<h%h?syvqFX4Aj1RV`ro`3y5(W~-`Z`3K(>(lhV2;=y8$=LXDz)NwLfRU6CW=(RS| z#que}MypZMt*Vb@=~EbeBXJEe`GlPwOe@xIRS_)J7ul)*XRC^3aj!u>7#-NEl31$T z=+%EtO9snctU0XbZEaOKENKsU#A@1CA1UYT&KTjut|{TeYhlEcuB>zE&=LO-=88O^T5Y70WXD4kO>F3=;qGbgCRq z(}V=?%M)~}UoVTfD zyOxFGk`Yc3`L33Fj3(+DVE$}G@{shf)K0@JKawPTLqews#amk_9Zxz-Sf7ohg~TiN zAMX_Dv{gIHdoQ{uzGa*0VL8=@ukulvL6+*MU@@7*i!}}PFYcpX-QpnaAbpY~ zj-@geV^So^ET3S#(^8TQmZ9gG`gxnmCGp=s+tdOQ|Fzhrs!8(2dB0&KbfrE&O)THy z`D3JwB?8eAI(B87>N+ByK@yBb-j4Vw^z-9-x%HVh`_i&qCF5&7mbBuSx2q_ub76^Y z*L|lpLv&7?bK)W zG0dUU{ZU=2m1V_~mUOb5)?|7DyHqbrHRicE^7K|VtOud$>r%5w{MV~Xm6G_cSC^`X=#pNA z`(5`Mb*VPaXEx@0{)J=RrMmv#R=ZRmNxqnUq7bJyW5q2s$*ard&-r`IQ_zwx!lDH| zt-e=-|1ZrC$~(gBeFO5*zses}14N%6y>^JM`MXssOX_sf2ivVWSuXgWiF4>y2PhxJ z(^lKX#Wm`kd&~DX!VFXk^z=uQ5!drcrkZZmuvQ~riScRK9Amb$i7ZE5g6JA5X&OuMR2TJdcB`o@m4CZ9%`B3@oJ%;(kLS7Q{^?eI zN2GCu=_AY+i;uN&nq-n^Tu6Coyr@E7i&mC(|JuX>O4G@bda_L%BYv<+(oqmQv$iQ~<_ zHeoEgkt7tN>nO1d-;t;5RY|f?Ogq^jhQFux)r=kr{9c0|{4Pj*TcoA_L@l$$PnhF; z9@6Yq3oxD+_&eRLHj{Y8*(GL$*xhOeOH(UW5kV_ux9Vfr`MFttW4Cghr1SBL$kWU> zKzFNfmdB6vP|V4070a?B6JNeY`*62PVi|T5R-c}yC7tCT2flwwlFgD5gl{jB6tLWx zi*^18xykc_v|A-Z^!2*&Kdf|(?RTpIN|P_H zxfJ&g<&%e5D2HE*1tgelT4`od>{it*>k+-CYxUi#i6yj~?6U#Dp} zl|<}ud+19sdsIXukiu4blxvhpv*iy&8zRk*sv3fv#i~0{ zk0H&ED%PiEwis%+iwPvTI*uP{Hcs-02OvGFo@M#P9`P7Sh%#x;n`#q9B=Ic!@5lH% zNjXbrG9sNw+F0DzBi4~*kmYU<=6jN)pJsCI+>91JNfFDHnEmlPNiWMg=+hm#ULRq2 zl-X+M`7UuZNis{r2E^Bq)U$X$L?jQ%4r{BO4siuZ3gYT?*^f`h8k;1uSOyU%Gnu4| z<#MbS_ZUe6-cR&aS7V0$e3BND+4yFuT`V$Nahfmj^wVF4>QRF%5f3^=Ev50|4NB)T z1*=%UOOng-;&RlzBsPqj>MOWutV>+fqVwrJTW>X6oVp+LSV<;f7J-)Q5W8z6R?otP z?779p;=0=3c8#6Kx9onN@7wEm4 zXVd$XCOkm&-P@xQ0z`jPX|GBT5PdE7s#zrd-|1de8jvO!XJfCbC&?Fe*SN$E>}#)T zIU-Fvr*R^d#-urLL>gP1K4y$KJAye)1d0C%yH~|>n#<0$@<}-&%_L3}gq7RPzGfYf zri9Zx>2`9Oh9lCna+>aCHcr!ZM4CQMlZ+@PvoG&h|Cu-E$48PcY-mxNGzmwfN#!(u zAiBY%$vz@Y0jDWOB%w)Dc|@82duPS7D_%8Exq`j(~W%KJU@d#?Iy{ds_FCrx0ctJ}m%jjn@AC1mNC(Eb* zV&)xf)yvX`71FLkt-e=@@upl4dfi;EFqRo}%vu58(VXw+#`2_18m^2GmmYrc2|2(CSr`p=;4-?h7S2eMu9&pgig}thc z<(K2|ZuNxTs*B~^5<5kn?^S&)L$_ld2c`Kxw(bQ^r{ezu`0VZ3XBYe1WoZdX>zQ+& z2a(Ms(z>sR#U^r15+Xt_wPNjBmzHeUkXw;UxfO|`q;;prHP;onWrcP_l>c|;`8OLaU?7rV-ZiG5mDkf`J5+2`pO)81EQ-U6vdUo#!zd?2k> zhKaLUu0pOfr|$=KD)B7mv-(b$UQOb%Cl+#4(i(|6l?D0jaaspP*S!Jc*301{c&pla zGKuPoUZAz1%4uoZO643__fA@(#Zxq&jgQO$kkK@MM?Evry$Mo2l%HWQduBiq9;e?i z?4j>Xkca!zIt+A&rMhbg+*U$sy><88FZlV3O8A@>F+0R9YU>i7BvE~dX4m<9d^)1q zaLf-$k%-A9Q8C`RF8yRjFm&#asGdwZty96F=a?hZ?^R<>bku2y7R8=0buZ8octjQNpi?=cj&#&%Nf$L!dCmacPa*5(MCh^8 z%bq02u2#4UTAZWV>1y1D&ZZ)%_9E3YkDKyb zMXG$kZ>8xfk@8?IVztn>6|_zcmnT6B{fgpc9($)+6iL+;sg@k2KDMq!DkPT1b!2hmgi z;zZRx?vA>q?v?c9%X_&g2^~>-4=&NiVW$^#j2Lp)rB{ik_UWu-yJ*&(zCqCKJXVW; zj?iV#Lc}Z_!|M@U@odnNCPvn#YZT>t#dAzcw5TwMe_Q8@=PIOAxkx<| z4LRP-t?va_JgJaRe&iVfS3J`ochvlOx_@2qEQSniz*h;X7v#eG{8hpg&t6Ewsp3$aM=i>oB&Xle3;N;Rw-A1%>uyTwo~<$EZhXW071M2?oRJyohSaj|EZ z2+LKeI`w90*qVMFTTAOcoT`0sTB}OS&i)+J_ybxENz06ZEOqGpY58qBpTR5_I);lx zEq#Y_KC7G3Z#R%!^{gAF#NT51p5kw+RMSO=hO`DU#pHWdkf@_>+a>Nb<$Jb3-lEy* z>bWW3a|m*{4bN}M_gsRMrEfIU2zkEe9^@d+5mM_F{ zGZ9j|l-U<^AshG7*!4(Ni#3o&lle=5d`~W<&th7)kVee%JtwsU9tj0n{O3--$30Tj zD_wken&&#^dlDf1X|!jpE^`v(vC1?iOy^g=rz@m+Yg#{C#|(xf(#$K4$$*5P4byLm z^F6aj)Oq?7eR;4+r@9U~v!9L@dOtzO&nRx^uW0N-&9kE82U4{r&qJejhO8RTYl~4k zLk{%jU!2MJ^n?_rd1z{`8nrXzm7_efk=hyZ(?wc=N5{;CWP17QGiql@v#0r6Giqlo zneLYKJG_^4Ef&6|%FL~LLyPsclE9Wv)Dqb8DO%FSyQ^i5ZiBSzh%Z^`LhZN8^!2Fn{8XnhhL(-iV_50{?9kna)W)wXg( z`R8aB6UAKfG$m2_{6+8lcWTLkgnk<#ej)k8a|kk)*8lmPZQZcFPd z(Y3C?a}rYbJg=lt;JFToZ%wU1=X-%Cbb=~RvVlQ5ww!kw0l2|uP|B6t7XRMaMddXj}&i!{0j#oZsw3PxLfnp}6}+U#=jjV?rYhig=^~BscVtN=U2le;i8t74J2v=W)01!T|?U{ z^n^~~5JW314V2-)x}e}z=&Nr5!I$+al-^o1NK z%h%^ZPpTIGz9{reBT>i33$!w;x?dD}VyAL>Hq)#z)fX-FSdd!ubgcR$g`NhGziA$; z8rv!KBtv3rh3jLUwhl?9_h{-ViMFmKM|@4auO`$Qg`Q<3>YA{WeouU@mKE=*t>=hI z>%zoQE&H`Zi&XmJK#eUIdd_PJti^3D>7rqo2vKvFib;BdJ3O)O$t5j*?qhOldrBhiml$?#|POJH;S$R}<7H2g-sykxLYJP>D-iUeaPO#{u z%abru=i{vASLjL75-nzpjnJ$46?(ctCdcwxF@>JNka6_Iw_1mx(31iAZlFt#R1|t< znHZXl(37513Oy^d1lBz?hqrE4GA#5AAo*|IN6zND7o)R@>%L!0VBOEN1l0XDV*GV4 zK8LsEulpg0S;?@_b4g3I=<;3|>V6N>t}TB{Rp^QSP~{UXqGq}E%-BLtJfs@U_8FI` z_Gw+nkxY8ytlOtG*a7DL9;m)b13 zB&w!OZ@GnQx5_zg8Oxota4okyH9ljhaU)dJqL@3LgcU6R(oxrrDa`4m8k4dA(acReFN=X%wrHB2Vz zn1zr}M$?*U>AE~$a6V-|pxSW>*Rrg>AFAaa&%JdlGwChfw-j^Vlf0hg)WhN80Ev+2 zA?=F0#c3@gzv7ri=V*07EyXvmT%8^vu1wIWApg4%DkAnMsq{6+{6ue7d9&mJOR(YG%1aUoCOpaouOrNX0}>1=&X>T%x7?7EaabGJWl?C4)pA zy${oMkXb+n9VOzX*Lsrv&<>%4H0 ztYt=kyr^YjF2_8)l70n7%iwLCvrYT!EiG9r?q6wwwEDV1$b}?oTU}^;b%KuRx}D{~ z_w>yOJzE9I-aA+Z*QN7aOXyC{dG)JdqC$xvib;TE&7%49luwZCNuqN8X$ie6AqkZm ze&keTkMODsE?MIz7S}N&Nstn67?}n6Te%wour z+7XakNLnA4KAtHbNHzL~#kDVpa_;-HDzm>A=aTzL)Yb1N8Y_s_G3O!a^rik;`Zt%n z4cW7Y$E;kk_(4wfExkijcWRfc1ZngZ_a$610g_Lvx~XfOOC~|u#PV2^OLm3apmlQ8 zI|Y{<3>kVZOjOe4$$$*l9;SbHz$NEGKKO-KrEtkLkViK1sI^P(gskjLU*|1WIp;xo zcZtxyo#&DTkkA4AHIqxa4{^QzZNpE9E?FM(>!)G*dn>9JWZ%e8z2><~CPPXd=XrxJ z*&9+SDMHT@bjei6|6(IW$t+c#X^>gpMCh3qF1Z+Ta9xD(>AG)#ETsOS8c%S^y^uUN zf5$=fg2Z&=?=-1ikmetR>v!2yuftrg$Xns!37vC!$dKS-dPW%?tB?sNcx=!mn?lNb zM(e=nRGlDc^c1PSt98i%kWUJ^H|UaMAst@kE3He;fb?q5v^6HFd^SP; zS`#4}>unu^OxYDGCeY{{9nX+p`ucvnPIV9RWw=Ycq*Fy7;hL7EC*Q~D9hpnULp+1| zj_;CnA(h8R>R;$^$<~nH+Vkq%F4+^3HZ5EX)Hx4>{8g3vhb}o0vW(VZ; zS&)}$Jc_Tq3n3NTnd|d9$b}g+#z?dK=-L7~{kTbW64Ij?k2TRAgdD!WE8Ej*YQJ#3 z{-GmEtw>LM5MsaR)+^GxWL3!EIut{5WnD56GP_uWe%^7(P7qHr_eJR(gjD>7`|7j@ zA-lifH@vh5A=&gjA|Fx9AWIj~*96N|c{V{ZC)4i*(5y4MJ3#hL<8d~ZJP(;Vf!~_Z z9)wg`9xCoXq4(f%uIVnCPn-6xl1h+U(X{r6zF*Ldaw4&~&-VG6rv>b!f zs!G3qq2(&1b-hT@R!iau)vD>@Z$s1p7%o=0V)r28cAi;TEX z{T?JrmWR}g=6xC^Yd}r~^BN0LvMJ=|t2`GpN_K)gO(W9ZQ8}XI07#~r*CL3LVCRHtvnD(Y?R)DpO@ zlgMZIQ!eqc-d5;oZs#0VxW0c;J8KC{RYMDnhtChw-!DhWWTbkX`p;@aC`$H*^eD^s zlqfl}NIqG}r$k|>C`#JXwkzLD&E$TQY2MhqA~8D= zvu#u;TI_t0nA?cy6+;0rJy;7%OS%}gnciRMm@P$O4k4yJt>?gHu6maDX|L)0 zUM5N=LjF9({oW{>7g#K=RC#tZoiz8HB4 za(|O)je8IueTlBFhcPnx53XsA-}sBd7->P4e#UdQV`Kx!Kzc{7j;I)!4B1I5{@u_e z>`zuC{gmjFeuW_|xY4P9nV&q~i{^OALpq6xD%LqM(iuNFhI>HlYN9c9% zV&pxXk9y{6b+{NA52;o$OwVVFk#!*rlKK4w)j~^PdHQMzEKjPI zbkVvEeQ%{}F{?<-3dD@2(Wf#x=DZeKDS~>H++w#OSAL7s=OC5&1|QF^5-#zNPBr%? z%cpLa2-~k}agRiuDV^$viZWVK{$vS$CQLl4Wd-C&STRvui*<`*>QcKYDJcseU7n$y z14${l^ESsst%?v$Nn&Nn9hMoNglQ=)^B_Nd;1X>pri>i?H<$3OId0LNTUIj`;$&zzm#17Ie@hi7;~=imZV@wE zPgcq~}w zTtOy4UM@?&l0&H~$|OkJs^OxMmadSDhr&gQmcbjFf5HC9pP1*F=e^NBC6%ES2_ z)-qR1rs!TkGmv$vs!=M2<$ozE=L{0{M*in#Lq&6XZAL90AZI9_M`YLkam>&kBg93L zN-`sw^LdWOH|WbXlBzL!>tZv_OSz_FR*+rT z%koogT7^bST@sbgV`E&Rs+OjuIY!BoB#+9Tkay})Ka-@g98027O``c)Dph5YRI*Rr%zIh4j`wO-ml+`(NB*wwA8tIHtoi8e`-bNLVV(E7LOgVU8K` zxeKW_Y1u9+Kgr*t#mn%;uS3@iGpwz9Ijn zQoO7RS@tIV>Nh>($IC=WIeJD@Z+PQn3S|B~mma~3mwh3JX(e9u?QOhFg?!nbS2L!1 zL8>nc*CWYPFUV^@@x6)a1&J8Pqq|fuE&h8Y?Jq6r zE%fV1@9^AaI#!Fs^h8YmdpwVt%3LI7F=Ecoh|qJb?1|Wqa|H* z&NKOREfO;rF|W=w`7G8#{f$3_=%H)6AwXUwsUr6V$S@Kq^8#cvi7jsjNES&o8C^-0 zFo$NIhlsf(HKaun_|~JAoTz2GNTs*8DyEjK`lyPTE-LH{7vE@EQCX)F;q)HlcP+8; zEal76Z>?(CTZQF=jiC@rvW%kHh8)w>X1R2eu6{aIDr6mPk!2m^&jh+=>X_>!)Uy(G zs=9?dq)NEg%lXXv!Yxv?#8y)=(c;6$`Fu~17Ua`UBlO&!1la&`Ycu`&Dy2%0$&kBC zX-2D-zL3(rU3#WUf=q?Ha3);;a!rDq2B}YHt{PWQkc%OIoT6`drz+V1xlJ=D)K_&0 zaz7;Q1Ny}fy4obj^AOpY-zF!>+mI*SwBnyGPx0zpucp;_&Pjr-1lj*Rk0T|>1ju=s zC!?O55@Zsj`_uduCP8+Ev}r}ZEJkZJB*njm*Vy5#ZftOR+IL>)hS)`shTRDw)j)m-}?|0N0mmn8H zhDU}Ab;c#gEfCk6L3)faLEeLuB#Ay8B%YLgYpU{OiyAaPT&?y~TaJbNus2e~QA}+) zOG~tf+#N1T(GgW!u7LbHoxXUYr`pt#;I-H zgXGSN5QE-V`9wd#?c;LMY5;oc@mg|3B9%E!OX!na<_57eLy-E|b!7v{#IRtIM=|x} z!rC0ui`HVgMN(hhg~WPkeNn1uL-|l0731IU&&b38v5wGsowBPIUeB|pmMvPgi+^YF zuZt$ixVkEz?P6&&{stjYCTfWm?{?)GQ;9MK^7n0Cy)#jdhf}Jss^`OXFU2o0>*yEm zXj^`H`8S%Ot);Kd=R(jYQ(Q=up(R~>P2*arI%XMS`qCXl<uG&QnU&SSHoyGXFunTvg`Aa)1_pnH$S2 zE&eh$mW#DenSbPKZ)3Ru(v13bs?3e$UdY8NVY8s zMKUf?h^8_g5)&1quVc+*T}VPOKWR3T84$HXnmiUHn#s8&>M9!9G*omZX)c#NqjH`u zBC=hgkCrWvp)s_69Z3tB(uiZ;p*NxGn%P3$gXCVL?-V{&F?E}9%nF))bXli51{roG zL|?I6$V-qWjrrG_TF9i9e9s-w+Q=~yRnxV9(wBF?sGP4t%Fs9)-5f~zw&HDt&=|-N z9TV4{C1GEf7)z2Q6Cg`x(i+HGk|F)pgo>G3`a+t#O`}i8RjP?8oX*M4Xs#ut8_VJ0G$Tk$RrOd%ty-!heUo)k<(xzk*hfl|p|7ZzXmNqo zxBia)FG5p%ODj}axwX^_up#8u6>OOlHr_W$_X$t1Y}((yIE<0r|zkOKN9Yh0q*dLG2H zh~K{_$pT1^t^8{jNz&biYg&TdwyQgSlB@*DqZQ88I1=qINZC@fA_un^WXKl!{oGS3 zRaeOPQZ)XfWiX^slv|Y6l3`MP9wFkj%!2eQ7q0IzNpc0G7=8Pu-U=njEs*oU{B=x{ zJO;^rhTpX%$*Yjpm-D?KNs3pwUM;-z8{c|cv07-a_NK3gbWN*j;p>KndMQbAmKOi~ z)g-x$BybKVNk5hI*@!nk3en>LNpcg5Gh;JJ?njK7v6&>#BPR8Bu&A%glht46K}c-9iwVuQ5=w%AyR`Tg!B*>eE5 znEAEtBsq*Fpv5L4#@}LdwM2_jt6ZY3Zm~6x-S?>Ox;$I8`1_eja<>-$y&y^cjF`rB z~m0^y*A4W%&nUo|W;4DMt5FwSv>Lvf2YNt>lx4d14Cx;(06ibdi{5h?zqbf0^2_ zm2CS!%yaSu#Mtj~nV*wAip0E%m|{-Mpdv9N5OXlb%_cQB<2Iev@B`z zSx_WqDPn@>3(=qI^_*PuKujCC0WsUp28%Z+rj7jmfta>(7h*ifr>*??ftX}@95Kn% z&MKc|dG3LjcJg-??j55%O%>WEo+ijR#HS-VI~L&U6zGcnDJ#I!+-TDeM{J1Mebk(lm? zY1GE#)2B$x>xijW-sCg9NX$Ek5ze+Ui^NPtOtoB^?V`(*QzT|SVouUZQDdlmQsmMH zVxE_)5i_S&u$cXl5YNjE55#noTM+ZzhrBO3%AG}G_9Lc#xQRJdBqk3r8|gSyW$q|1 z6^Xfyn5Hm${ z7MawB9c8@-VqTDq5Hl@~_vs6=Ws#V6h{>e2f>qsLke!Rfyo8w9WlTQ(ip0EunA9Ik zKBJ1nq#@=;l8KpABqkd%gPnY47m4`@F@MttD3^J8k(kdBGnt;3r%?O6AisGarnCG3 zF{j?<^P;odQzYgfVj5NEZFQC>io~2lOaiW%o#pREV*W(TO(*7Vk(iLdeEgKAYt#o+ z=FYOX7XR_{qKrk%Q94%VQ_PF9!UHi~WEI5JMLu0*^#@|Q%G!wONyoFwr>lJCftYTx z1!8(3pKdbwftc>H6Jqw!HB;r&UB2`{Ob^))G27_*Ozp28@{J-fqY$$j`=WYU9 zT^xFfpHq6sJT2Mcqh2m?S*Kbylw(3^g*5dn(?iC+sl@-B+e6mSLgS+4=-s$Z)f7^C zaH#Hw_mG_+D>LaW42_TVkOPY3lcB|bZ1j+`w4{qVHE12+(<;?6$VD3YSF1Eqy|iTL zdOfeVK6p5ndEQT9y39T0AuZYBi5(GQA*Jdm*NxJR6-*Y*|PaHkvG)SrA5xS;5`ZX`Rv!?uW3(tUJLz>*bSFBqf1x- ziK4H@g3qWDM!&5~sB7AVYT8rI(lTAN@kZ)e^pe-LWQ+EXxem;9$ls<5%D%-QaB^d|j^P8B_X)=Z}n&U=GH^e99x zSxLuC7fBBX>y^NJ$)1q>q4c}SBZcTKCj?0Q1R?s!H36bl;OQ$*2Z$QSeoe-t={9ul zrq_-`=$UActOzMw9|ZA1mVOulsSBxc-NZD5j2&fS+C#p*W@36kI+Qaq08;i*v-MFB z-z!EkA(JZ`nGV@d%*aB>UYcpZwO9#RzSWfHYse92>pLLjE16V>AQf+z5}t(|I$-j- z2KhGM#N35^TG5Dm9JgxBc_XDEr)Y&0E@5R8Q`O}BI3(LCPXowcM_NLzJJJ!d-;tLg z+v#gC-qv8qkcW(nh9pQMlOcoenb!CKa?z>#V#w+xrp%v1F0D24E#&*1CZ9c!YBh`; zgLI?sWx0gEL4F%y^0^85`ld;BA9C%oi7B4W?fmTs6H^v)IK$-Zfh^h~u&r8<*`rN9 ziI4?5jXVdLvC8E9BINKT6Z0yh<0EEU!yxx_jif=kILF3RNUcF8pAR8}ZkQ4-gEV*K zOUPJyQs)-iYVx7pJIhaycI`~eNk~6wYH=Bo=G62r$b=6}s*ntBRY_MH&N&*=c)XDc zklD`p<%RsY($uRC*m$$bs)o36Db3 zoYpuGsqbv-2IOH!{)H@g%WSJyCb#pP?xq%TkTFgzszCnfXSV(Xq-VNG^$cW~bKPhS zdESxEkcN+&RDB?Y&Xs>Cr0%mOW-KJwktvYjPO3SO=W3cWWhvxFb0g~@Pqs7iJtU8Q zBZK$pkB|k_!)G}G8Qa3dT!M^n@+pK&zHL$kPvBM+hfIt85AwHjzbFqm>D(`DNWIrh z-D^XJ{b_P;0_i-{XJiCqjw2b6;f`cO<~gl8AF|$w`3&;1 zQ|1kjGLCG6d|GI>{xhWWFQyh}Apd@1s(*F*pX@h30s^4!Pp=3jTpCjWhL% zoW$*%+1PCTA;_B7P0sO5!dJeBZzWvyw z8Uk7FT<6C?jyk>WEJzDypU#G4JJ*dRka5oWz7}$7zS-6m$aZI2`yg54P0Vq~BhGPn z5wgKKS_&YC9SNGut$NHk!lNK_=-G=~<6+1UdP-ukApc|pPrDC1C0!Xyy^6R-h!-lwmtz;@Qz6}1M;nNWPSu0?8K~s zyyzU^-#}V9XXQ?ac+~9W!;sz1Uj7ww&5=JKHJvN=J;?U5ri2k$+|Ez7Fj5AR<>d32 ziE(OL1M;wQ^gaz~?8vi_Y^SC#K>9jocW=l_C*}>v)d;h9-ho6$8hIDe){$8dpCg|@ zGMv8X7m!=dwf8&7F6X+s7xH3(Il_N|MEz;x0wmI@#h;M+&NWj^;a2_PHB;sikk!s! zE(eKm`j8T`)_L+xfYfwi8bRFSOwMf}#l{-x0{Ncar|=b^FQlLIr1>V~QRj#n2ie=# z90~71zMErmo(uWF$!9s_8K<4sLk?XxE%pQCT^i5i^6ZBU9c<(jq`PyqxdN%`+&ynW zvYl%}=u~d!bUry^v!Ga}@JEIn*$S{HKADPc26RT_`tGPj4UqA%20dO$vQ z&h7z_mz`e0C`i@gt#Ldeg~d9f1G-jS~%jhrKD2V|Oa4jzIeICrbF zkmsH^<+%p=W1`v1cOm~cyo0wscXLcA#gRFha$W)Wh3RABSAq7s% zGRV)4dknO!qdBWf4 zc7A`PkyyyGAx0jBlzYeIQyrpK^yd=Rhtzgrk|4L8nCBrAoS0sa6OIgmeB($eq}&*@ ztx1qd&bgBV>ENVV1Zn+-Nwo$NQ{2dANLi=lcSC-SG%-gZUxk|1I1f4hnUNci+4N46 zTjO6yrEg6>#inyRH*`kz;~>veG%-~mbDh!VCm?S)^?C-fIoYIY4cYCC5p{AlIFdilvaRoV({bNcp}dpYI_*#Toe#a>qHI zPeA^4dLWk|^PH<_A!O4-CZFIL+^VO`8>_!+XnX~Q#+CQi;*Asw7D-+>%=?pCgu+|JK9tx*cn=9t-fCCG56HL5}S zJ7YUfL7weqO4tIj){zv*0cY>L1c`ID^*W@rv#qxw%bZjbA%)w_wq`=gY&Y^T$Q*9x17}RDJ_I@B z)FK`ttD3FXgiI-Kq#@)*=j}-=$kI_J=T49wBaOTQ$s2BD2xQg>BV!=xPCi+X(@xB6 z$a+VXKpu5uEu_1X&lbo|NA^KJcFJ=c^1E{#y9oKmi79}*<4Dj4+^V5Y&QXwUPRzrQ zkDb=AAa$KoPeKx%S~P|XaHK6H+R3>qq?#lBAY+_u4TpT{9Ea(U^;1mCPlH6#3aNap zn+JK7z9nM$6cXm-{1v2vb4|#FBtB)H^$tL~J8v*gL;me*a{e9CF3cQbw;`)vHxf3B z+qv^gCRIsDKc~m|2xR<*ATeWh5WVZKs)gq;l*m&umPP#Vuh4V(-jG>Z{J(%aMBdbr z=HBsSu>LB1h`h%lGIsH7u_3a-Y*n5#@ypd9ozD=N3;D?An4vOm4#ym$UiWO8H#k&g zXh|0%sh`k{$}>zRf56G)E zay~@RJ0P{KH|0{uuhiF4F~j9*$ZZl8GhA+fe6>78{}T5Ixdrk)i6=;i5poyg^FEx< zNO=IVkwoP)QXYrYrMF#bTchN!kVFy{GfMsrIeVAZ<|27Z{;4J1eS<{Bye02xxezq> z?_kj>kJd7SoOR~Czb%W;)h*`UPrb^4I_7*f?TUbzv2ROT$MAkvwRl@jrL|ww@57q) zmQ!U@9phhXI#o`br*b|UabiJ;xKBBg^rpm=>d|q$cT(jv#F&}qsd6DpP={Mw=2UqO zVpdm9mA`A@-%?LJt8y+rUu`R094W$XgyPzNMIPvg$(JVxrpt&L>?aLE4e1mQR=aAtOoF zQFw;j@R80rt}D%#P+#kem$_QFRm=YxL~@YD-4n-iraS=|K%!zY<#{bRqG4``ut_Fh zU*w9`bo|sHnJBLY;(9oi#-Au_~c|*3cxG3^B8Y-jyQ)M9mtS zA{PdTnl<#E{4qe(tfBX1&?23)dyb2*KRGfAVy-PYvYZxw33G~+Fh|zqRL;Dn961tV zN;pd{2oP1mIdW%!s1nYVe+7st;R0zd<`VwinM=4x)`nc~WTXkCe;Xsokjaj8gM5VX z%tf+4Wd928$t;p1AjOhQJ{gc5)r@3A4q~Kqk(>{yj%ScX@-xVn&zV#kAV(e92AN!r zuk(xK&ydY{-dQBiKvtYEF;^j1ZkU|!Kn5loaecxqmfy+Ls}$t>JR_AL7cj21NLGUk zz}V>``4nX3UuNqqAa7$7bdgMf%wKJCehKo{VklzLxc^mR)X_IOqq!q?(7Ri~A zd7qh7A49fd+;5Rw4Y_vS zVfOMXkonHGhCu3|-@8bTfmHg~lqU;P*@>AAS>f!#C6M+`-Pb~TIs0@AA5TrNVzrxN1 zi6t_2nW|TgQ1TSXQrSsMwix?Zh=o@4y)uj9g{BlRpf6*R>{A#XsIl7~*m(>E~5asigtQR1sNH)r50dkRKlN`X} zZbkd+Pm(Qi24n|aH~!T!mqm1-b2;w3irE+-kC1#XcWTMizfP;Z5&J>LtxzTO|6Xmb zw6tW37#dAg`Q*xhTGHK3H&P#fWSe{wa*~dgZ0hB2lcOO+>j#T-v_j)HIUdq6B3Lxj zsitU2a}OYSR!c66Xh&sECfP3QtyJZqU#6p+dywpugSDiI-{?A~WEXl4>7wt?9J5<~ zhEySR7O0p#avfwW<*a0{JPi4x9M7NMC$A&tFB)>cZl7$nN^Lz&9H;Jw>VfQ&T_H=d zLWJ5o`{aN%9P|3GoNB+k4f(~9)7(C1Wn<5#s5ThM&@ZrcekeNvpSd0$V*z% z+&1-FR87ywo?okNrMZWZtfBIpk@p~1I|qp`wS<1dF~M{_{6>q#A~Kc)iKnFyd2%FV z2FVVJIV%rnpXT*z$_56LAdw&)Uyzv=9*Msis;fYhP;vTC0zat-7t&D&wA^gX9~ zh_;nPsjkR&TUq9e;qv6m0gy#h=2y1RM}smcmt*QunN_{6$>eP;k?ZMfqN~I;xpzCu z*85!3KV*X)EQ@jO{2_Zl%-QsZ90qB>K194l<@rPAK%(hbRol8QH)zQgqiLS7TK(g? zya$=Ei{*xVVyD{Hba8POJvUH3H)S&|{_hC>d_j2bkyCFtB}uMbo8>U*ODg8wdIyP!ZG4H z<)a=tZ<%e0YLw5~o8--!9B}g0R+T$rb7s z#?{^tR>E!-<8O^1>%lu(kd>%o(#6wdg}6cO6J!m8sN2|Ol5p!o$VpmdRq7(`d#mRj zRc88~5l@itkVIK)Ae;ZCZ;na+XSw%s%%FN9;uVr;tCN;Y_eP3QTQ6z74C(QAkQhNR zC9T&W!$`(zc?)uz%B*5aS>qtZ5L3#^hHTCV(J`^sY{)?pl~1g-4AO`CnHOS(C~d9L zk|tXJ!^d-JD`6j(`7(_f&8AePt({u3MMxTd4st-AQ~_@q?U7#q=YoW(|f+4GR(P zlGL=WLyFamO zZ&J)NR)>I?(95(siq%7l|2%DO4S|^Rw7E4NV$Rd%)&ht*Pg_{)A?7@7VeNyM^R$I^ zUW@-cZDED}qRN~mcGG#Pu1GDcvXH5C4zg5-RHieRrHPj9&e`3<>H#rl_p{bp5Oa37 zw&p<0+5Mcg9%9b!WNW_`|Jj{vRXVOp$XB+~)MD+d6fOQ1OR@SvOpB#h??6n8rC8G- zrp2DOq6bjMbgeTj<`>gq&s$4%Du0VTU!=vJw{~*QPHQ}Gw(eZ(I$14Gs9J0nrZrx) zxW_6N8D=ep6ki!6ULkqY z3O&Oy#rMr@xm1Lx~PD{3^KnMIdih0Y5&r_-VcbU;v11*_iI9)g9P|Rp+ zla@4blE$AuAsJibPBhLsp<~kB*Jvh>x?ha5&Oz>ww5M&1v#vtSh;+JD05K!d>DE7x zESiN9OJ{C|6?RsYFx~wj30-VSqF6+P%`)Dq3fWAfMk}d=nbtFqo5zF1S}hOWJttV5 zIYzIJJDzf$VD$?SbxoLLEk-_Hf6dRHldN3GHWGC=pJc`Vs!J$3d=nyWj|vi5*2wcL zZ`;A*4sCskby`cBX!kJPfsfG0r1b}69`%vbwx(J4AYl#piZspQk!}BT+%zlZHvQQVLE?QYB|sh_nQ3JOr0PdK;Sa3i0b)_i9P76Lxki2CxmM@}uEl%5 z1dEy!v%u;N8A8&KWRbNIa^Os`NFrHcZPSwJu8yb3rPe+z{@&M8>l(zIgG-B?rz98E z*8SH*znCk4U(6L?sa2j+IX$aoRy<@*Fr7P8!eu6B=UiUyh&h)(vzj86>FKSo^0cIh z5ijt5Uu{*rq)M13iqSq*d+-aZK8gDJ_1F|1SO3CFLQI#zCgugijLkMNFC(Uz6EhSs zpF1&Qbj)_qhc+~tYVn0N3-ScXd-G__!CD9zd0&Wu6tlq^dznk9eo5vs$tLR$E!%~; zMtyHpy}~iQ>F8Cp$hC$+7QDp$)m&>oqq_=nrxEiI-Gx;x4p_G!`PA#4w=hT?vF;;Ph|19hqvkY4n}I+7&MY7g1)Ww01W@~ibC z#6HJz&g!itO`M`_seH~`O>d|YvZz!St$UC!C()Zwl1o;}n;awO28$0#E?bo#-Kl@5 zQeCl&aggMOHC@Ye zab{JB$bX-nI;=HXa>QYJaydpZH?5PL${8^$us$eI`S@GD!1{#6J(X&quJZ-fI*4ic z0_#r}F`mAOP%U3z-P4jL7CDk!sB?DbcQ^TTXAxt(e4Z9q8IWvTX>VB#|Kb+Q`-4VS zDCb*N6695S^t(f~xMQt=T&YQK3`zdB?rBLE$EgjY^Mk}aYwvB&CynG0l7Dc;P7{M; zxy(T}U&GVHr;UTf0vgT;vZ*QP&-Sp%^dzqCm7$KTplYgnieKu|v7utZotW3@8Q-F9 z`Q`4fEN&;piF%pVz{7y{VMye|E~hoX?%FgGCNWjNM;LnlS5l zl(gSLjJbE0w5LMa(cDY*)L+_O!s32}t|Y2`O51A@WBLH4?Jbb?zwkIfX}iIFu2)m) z#i@Ma?AxLQ)hkU5qbI4)s626Y)nJy2bXF=UYmW?NSwPnWm8u+$mP|bkppN-+_F%V) z@%PZm+1IsXy1(hgB`jy(h8&k||ET93uA9{wi-<#Wa#s& zhZN_0N}uNQBHn(mKNfF4p<~kBFHoQDAhl1t{S@RSl3%nmfv7%!s%aIw6-4y`)V8YF zDG)VAq+&dFS4eph72~mAfn?HA*XJeriBx+aB%7o(?F(6?gqA&=V?_O3+^4ndOr)w$ z@4MBuY(AJUSkdk$(_b?oy0<9+%w^%GS8xvm`=%`&WGun4<(iFUmq9Ao;K ziT0~HpY6_5B&Fh>p4;>x6YW79Y$vif{oZ!= za}d+-ZD)6Zl&3qjI>y@DeYN;|aqXSfFypHoj5xhzznI?g^G=NEEqAm>>YV*EC_3xC z6Sy)=XM2W@@z3$-Y#)M{85CXYy8)tRP;|57OQ{x{E>w(~LD9o*A0TQ5MK60ii+eha zNUJy3eeCxk<_%^ad%hNb3HuZ&VIO-FayDz%^s(dhS-W7-}Dad_-p?%UOuJUb0++9HHlKmb;Ms z_$pzj?Jlj$>>l^Li75@~k69K&?aGkNKl6M1q4wjDG7%(Lr7nh9;hMf3>-~JD^M?-d1H2F-1?5S+z14xU`CZENSFqe_fA&2r!&fh|A{BC3q zWD8a!8EPMctUYM*`3*9{k(-bzPW#-4RG<-QZu#P6xSdBiQWlcphzIg=kZILgkT+>= z80V8{QaSP*2Hruq}Uyyg4d_o@LRvkXY)FK)Z6J|Bhx>5Gm0iv#Tsdhe#`yf46s#YCq{|&k0NO)P^ zr`3m2hxRT#?~S#SwfLV#)9j1@ zQSa>1?C5f;JRI{rr5a}sW)a!-Y1S)Ay1hrsb}e%#I>SB>X-LmI>TW*Xj(b?;0 zF+^`G$KC-+fXuQFLI%^_N|k4heG)PTGS~hMvL9uhZ(oC4fGo6cK}OI_X4O6)+xH>E zP>V&jyOJ)m`z_Ss6FUa7p6)WL7EA4N5bsQGjpeq4l!AO}CuqsmGj&y}&usCi$~jw1 z8^-ypw68)oBInh1<;Qf4^L+Zb{gf8}5%sy9!s6cBK3J5w9wa`uQz6|t1dE4BzOX-k zAk{kiQh=!AaGjkRueQZGCsV2~?UMnb=5MUG*HrPxw5RB=>;WDn{5u-2Q>qR24lVv; zb)%gJF~{oHcC1vX{Kx9o_Bbu{8wb>597FkhZBN#6A*ce4HD!`~V=oGj)$|a&$<9Tp zfxSb-6pGnw?}w;keh$gEc5zE>D@Ukfei6xcc7n~Kj(H{D+er|0%q#i9PJyUnUdcAQ zCqy0dD(4;cV2C>ASCZ_sv%H+MI_8z^wwL)>)G@DQukEhN@@0RPAMJIJql;Mf+tJlH z=DGY}v6WK&Y^Oqwe92osWd91;P@LXGP|RVwe05IsDamP)qxNk`0kx`%Ibkn+oMZOV zF@KZfl>K%ME&3b`qHq85?DPO}lbp4)Af@R%okFR8wT}fzEXADr&zY-Q?EHVuTqPIm z*qXd8b>=F$WLJQwGgrwK+XGQ&u9Bl-kKOkP zRZ~8@mE5<5u2bS}p{sQ7lW#2FS4) zGzLIY*?Uime>|#+w^Y6V)~ky5+n1<-0pq<@ypQM@`i=N462Hq=> z0hkB-wD%??l|;on?Y*ld!`OxqotwukpNMx+R)om%XWPvw4qdu zyjDY%YI~4s!!aa{y?M_l$q-{w=p8Fb6K~x_md{DPBWdbw1G!4Fourw!w-(+zS4f(B zXF*iXw@9A#?$P2u#@cvqX-N|=(M+eXLi&ovkzeSDQj+WyjnvltsoEDg4%>T+>zH)0 zD}qMUC{=rJEMzvl7k!eXgSV0v|5^Ehw^k8pUPL;xxI>Q8I~U651@B9cXp+`i257ku zq~5+QC+Xx}86c}kI(tuWDrfBLMejL|iKsawMC_rM7rnnj8ju{&QUFoM^J$VUUc0es z4L+XFYk2}Pd`GbOousSxDabgI8(JPbbGvz)=ooGd71Pa|!l{BP3=I;uNxFMyYT>g| zjRf}at_%=0dij#~n3nCrMelB^(YQ=+Z`mfQgxlS-c7^D79DTg;EaJ#PI=(2Tk9Rd> zcTWK^V|q7m%=htbKupc$!J?y1Wn#+HQ=2+>`g@IpInt@A-ny8%Hbm##-%Ev|Ke=I- z>3Z0c^6BsGsbj|LeKCk+pm#K@jh20JnD&^f4% zy20M@I-gAURxgj!zTtfzQfDHM1is;2z@oQ4m-2bTyGaYb^;kqQ#QVzw`3&`5cp#sl z-alD{DdA9WXfsv!Ot&fFo8HGErp4a$Hf0g2RX?R|z3Cl^7}N5jyjh4*`)eJ=jPh=R zsQtxqRg1q@Im-LL=6dV8Ug~HW<*miyw8q=s`Vi9^Z+n|+@%Lcg_Kt;^9&D<2CZtP+ zVEuh%s`o3-$2pr)z260h>OZG?cLvA-s>NvUfdEl=*ms;gXzq+-jg&C=f^uFqMHsH>>DQ&0JisO##q|A@MV&u~QL ztnQUF9Z~tHdu5Ihr=}k`Vrn|e5mVFIj+mOxam3X0Lq|+a9dT+p*TgtAUFe7^p{mzM z{}ENMPaIKK+GDg&m;6WaNR}EYVXmvo95L5bznJUlawkTWSzTBCVy>&7Ix*(D>PVQm zW`1U3!c+;bPFkBTh}f^qvSfo77cwz4x{j|GnTVZ-W;9y%%isegrXBq>bKHEc%M1 zuJaqc+Yn=}NSnPsBgS0SH+zpm%spkZ_bSBPQ#O15)#AT@Z8r4^Gk2@+jFd2UtM9$B zNxIAt<{JLJx4f3zh`n@GSMP4V_f|oSxsGl1RzplR@V0@NdhKvhnY-Q&?~8~r?X$z%mqnOs<_>Skma1MCf?Clv!AHl~ z4sYcENg&zjeL_p7c!S<5s+is0)-3MH{X)b5l0DvqtvH|NEc=1r0OFb@h*k*w2Z8RRBdeJOGsKWKwS7wc#ciDQau z;l5uYwdxV?8(Mhox9ZoO_Ab-nKbOyX0xQ}$vI~y__eWZ)t#ahxtMH+=reTj?Svh7u>Tw!`~m(7_Q zW{&5p{}FXO=R0DK)jzzC>3sZ80e^UX0it>ie|QrDMD-l57kM_n;cdb(?!z>nR6c)tQxH>|<}9h%J_X*ch-pHi#`FrjuOQ~#*FwZN+82f1fryz)GD*vD z#0bJ?FYA~CBq6>U0g^}J z_Dy6FVYew)k|^H_NC?Ut?JJ+6^ARi28Zo}XTKqlFlD-F@Zc6&*aVov_KJ+fFq;C(W ziip2T=fX=u#QF|Gj$Siz5;?1P0czww)))J{+WK~3`l6+MsStBrE$z$Gk|PE^M{f{l zTcv%&I;vDT;sVW}_=u#8Z-$m^8u_L#-ALkm6d*z{mU4mq|6$1XAoZI;>Y2KNBV9-~ zQ>u!NSS0GJo=1H@>zw`fxXQkhTKEW8=W@L7Qh*$wRMJ-vAokyMt@nk$pvvq&zaIC+ zX~`CShSKl3P|Op)u39q0N~%{wk|%wgI;m7?Vm`H~I-cwJ?m=p%u+;VS?#wYQA@zKF zAw6qz%u~L)FLKO^IxO{liy`F@)4*4w3&#XOp7w2mw1719HSNkVTWFuE@;u|40a-$C zIh7>(&O<`_vNZBl>ZVfVh*jljt{T;=vF}+(IK2m%K+?jO3X%Il#D^p;eG5&hS7}}x z$+Ny1-8r9AN%RZaB&~fZ0dj?;jc+8RM5SP{Z~>LTw+Yg9CC|O=;5!NVo%;LtDOC#g zGVfD$J$%9Uw~k>cb(cmMe8qdHt!Ij>bo6>iy87PI;@_v;e3LoGedl?a6G$;VeeXlu z9ciRT%ZHGMNL0*AzC{oZVqWsCU~!(mdif4%xezq&hhWi}QuXrX1;}`kSM%bz7~f$nY3{Qm>i8MsJB=9AKOF13fEd$19P9f7F{Xc*=DUR$ z(?3k}iC(%q&b}Dub3@F&80U+Dn0=A%D+@9EBHdS+#n~4bzGt=YzSv9k%J6jxkbIH} zzQeu$yY+W{ryyqQ@A@u4%+|Af*C1x=S-xA4X^Z(w7L(H+U-1k1j92?7hAF?<#{nWQAK-Ag&sqd!%QCnYu68i6YD}Cp5Ou86F zGl$i9?@C`>KUIr#5!IGwg01vbg}m$v7VlF{SNeMP=a`G%gouSCYkkuo$7xNcy7V>a zdf#a+(?vU4eQ_nleC@jpc_N2Kgh;;eCBLTfnJ&iOp|go(lW#HP7Tx2NZ1zPB;8tCi z5iGWmeCw+T*-5fTOAkoySZ?|6eB&U8NmSjx^R0o@*(&t7-xl9tNOKZ39=^qQ71Cz_ zU3)3#?|oGV^45ouT+%X%#cBDizBDZvqWAV-5&BP%*y@|4#s8GF)i)zRRIl;}-_)0> z>hvUKdX?LJi(gmUqAx^f=I1k%&o-YJ%uY&OLl@mHrV?`yE6e8)Q z1En@mDHKVR$~lDJ=en=!TF;s_yN&PO-{0@|{r~>;;_iO0>%Q*u`S7f(%wy4Q&87-@ z3WVC{ZOvv|QewKj88NkS;%8g4EtZ7y!R^h)+)jGZ$--^`X**fln@zAXh31OGjB%l7 zd$Xs6EW!+t$c|>yg`9I1lby}x2$^&dlP{Ys5V8|9L~^ye*_%S1!VHnfo@VQX6yMBb zU$c*dyoebh$$ZmnpCu)RW;a)ZeAg^C#Kyu*E5*1GWPh{mLP~}F(ro-tmgxubBxHVT zR__ib7tF{uofhE^Lae!vOChrkGP$v8!&v4l(Nih5Q^*fE^|}QzRbpL-TbWc@ts3iR zNm!n%#_ncf!@Lu&s>UXyk;w1ZEsdE1(ocl znz5@aDT%?XY`2lrjF!a=mZMCG>Y!OmF)?)-f+)Q=INg$W znbpQj2jbq<3iEgRQdpAvD2bh>5^aV7}Z4!&!L$0_@*n{vijg?wb z6#WT%^px*T>@gudF2@eyd_aCjO7rS;0xe8Omi}kgn*mOHL zV(P$^7aKj5WWx0EVlyq_k!Q@xEVHC2S_^m0D9p*&Y9V)^J!JBm5@`>Uv8vNZbCEd| zGG{_hGFHMD>1dek>_uq3Fqvos#CN74+oC+A=XcG4AaQ(meKrkWVqz zx*Ft^*w!>x!$3}twU|!fDKwKW#>fKXoY>rFZQRYn7?Z5AWVa;+rbais(gSi{tnmzz zDKKqL%{Kc$TE)gc$7BcI=a1tAZQI!7nMAm?q5kWl*bA1tQR%{4aQY9VUF=mMR|E(z zT(yfWwPbl#wV@Gnx+SaANE=J?W|8JMvUWe2ZSDYR9~(ZKNU@o6Nwyga(jnIPc_yzn z#K|>~OJmK2Y)1K+1#)@pDNEkS`WR!4*Fmn1EwH4(%z7(gR)bs_tn8qA$RATHm-e zwvc5~`F?9`C6iR1-WsbnkNhe$l&6P7&!E^XmW1g%G&U@aG=t0?u^EA=PL}k2iTo-~m4t%W3`-ucC80ZH3S-S*CYkZ(ZnWVq#*j` zbgu6sW7{nmVcOuW^25g9G-fO^pHu9|R>qQ|Se_*XW+3!Xe|lGJ+$$s#ma)5Iofj}U z>ntvH_r~fkWIa^s2Eq5@SS*dK0C^xb;&pcQ$unF}C&U^rVsb3vPP@_*V&4fVz>3fr zk!+B4OGt)O^&#ZWgxFR~c4YN>3v+kKJQT}YT2|(fm}^NWGch(MO{OPYJrRE6uVdmoqak2eocvW6Y?W!$~};o8tcWxT#Q(Zvt(cz zc@X5;*cc(lU~EHob7sa?S`xO#vtn1hK_M(QZN7+@d2lr=HrSFt|qR7>ku@UP?rr0=`#~llq-Lc6`Qsc}$u@#n-n!7w>b8t^=qmT>EW3o5a z`%>hV!H)_)__o5%c18#vI{H6;cvg65=Qkl|ypwH7EvNA& z(u0$hD47N;2(_K=LS7V7&v`;fHu^7;IojDG)D49KKXU5Gg*iW-zo0L zIgK}4nN+?vb_%x=3FjA$o%@+Y=^e#}@T;-&u#j~iO)QxtTcpZE93=!a+ z5^iCG_)f=9IXv?~CR&oYl9O~YS8|e0=1NZBWUk}{PUb32zSGnCRccyahPwmsE8poW z=1IxcgD`7T047$6oJsls0{y(?sT0XNbtm5t&<^k(QL&y^@;{uiKoNY2;3j zq0YPP%BJdQkUN|TdngS{%&uWs<}r{$r@1BAXY3O(i$O*@)%MzSHfK0|B50J8zmG_v zStO}3%4umyQM3Z$MX|WsX=_PA^l%W0#obOPkvUmX>>lSzkvUsZ>>j6w$Sf}4GB(=j zBQmQ&NY7~JR*|WW+tcLN7-yKs)B_=zG0rHFnU2*SlDXFzC*)-ilDXG;h)Jrf-sh|m z8J*qS?`#yZ0j{Wpyx-Zu#4HD)H#+Wjeiu^QlUKh>oVs6A`h=r`66Z8a!rrRHX;qG_ zw1n4$kHKy25-0jC=_xj|U>k;c?gLJ9OG?boxL4a5wA5+)J7md((`m=VJS-uc?L2Bpf$4fNUe$)oY-g^J z`#?y~^G?lQNppd@d9jk1kiAR!9rEX$eL~(?!e#z>XZ&yM>bVqY{5z+rkCmlX@auV} zqa_7~{JIfjuG7|_p+qi6u+w)7$V<*`mW1VJzH>_!$rMF34d**UEh$K);e4k^WN7!~ zY3O;yxlhP!kmoFUkcmwnO8HlvwM@)cI0;W}?*iu|Ax|!6@|yFN5E^~WgR6y($+qD! zo6(~Yd0q4rn(SrlYLU}JWTwH@GRQ1;ZnGqe*HWi;gyZ!F+Fq((OPvNn)`8FnWU14X zi4F57(6h`r)sg};9BD|s!*ZuL%a}t!sAMj8mgR5=n_;#^z03+HmP@3-oFFnQoJJK` zW|5Tel}_)9Eb}r}n|mIDnYdFgN+b;Pn@(Fx!n*vXbHI{P(+=$qjbPt&8doA$#pdST zc-a+t-f|`i`B7w6J1d3MK+j07);Luvv#YKm^R~0hl2SVsT?IXBopDuIhFa_|K;Cy& z3;7(iDOx4lY;-18Wtlsc;1(@3Z*o=&p_tZz%m+^FP?nj4Rx1gz#aSez{`82s5abgl z?=Y5GJ1$~IfNXbS)tKyw;hYS}XU-NOyD%qO4f3Tk^>CJH4$T`tb~y`#JlzYcA|PKm zTdK3neJC3_RWW~e#{G>+EsQFU0{O}LTMZ_+R^r+5?@m1-w?R)+$e8$GA@Ad>sWhXn z5FaPx1mxi9kf{{kDTH>QT7y)HH>$~+eZ;f_$YJp=LT*KPx`G@Ye@w`EXy<8eUOoP7 z8lhDETYQ-%csUt27y83hjdcK#q&AtHWdfPH<67o%q6T zD28dXY&YJsu9ZoJ(2c)s3GcqqO1m3>-xA&xqSbge{;|mPyCGuEhF@O%bCDSWa-k*r zSjN`V%R&5jv>y4zE8DcD7sPL2V%PnKLFUAGk&sK#(o$VMIbJH{M35rLoE)DbY-|9)!x1Sa-Y<};8vE#5*1txV1UIX!+p6C0j6AT8oug^Ze> zZ9aS*_m|@1g(T5JE`&_W_!>)i?Se+R=fuBZ676>y_ZO|>KMNU~BH8sRghkP#u{%J$ zOzU`MA-z(hx+R=qlp3w$_0kBnhppqim_#=r?q4H3ZQ=tgDK_t8%=V)t6NOYmE%*)O zg7^X7MAjpqpoFqWWoiR$(MyoHeGu~JI$x*^`ylCWL9 zF+Rf*yc#r(TYwwmtAtF(?1t9IddD{k83aQ0v`@TBBMM=O*@E?rU3f|D=6J1RiG-T_ z#rKyZJC9>myReQl0Ws|tAK%!zGP^O4n+|eI{D6?xn?%eDAOqu-o3IR#r69M(8wtr? zfK@(_LGdxoSY{wzQQHeLEIuU0B!X|=RjY<|^Y|GKlli0Z^$qk^qvGv^tbG?dT_AVI zdkU%X6_b17!-d?`0Q+N*866)hr0*b>854g@$W;gr$=n-XB;-1@vKARa<^f4pOYWjbMOb1Fz_{A)|X6}$=Y9G7H@Y;W~<$V`Zj@`x0e-gvX< zNsx*0Ej|--Uc|fv@_4*?l1cD4j2u9oi2r0sQS`#e=!HNg#j^q{6TK86snx&m>A`d#MGO z6CZ3zSTg6t$63Ou`YS>>Cw|xo*7s=h>v$wHH-4m$6$4n$+;~GFHzIv#95pxYGBFcN zcsw>Y-bzU4eoW@YHwvM+*F7BTmGQz8Ii?hMA}_@k2%%UIc{x6Usy$L;6?z6r`T6m6 zLP*Ak%=~z863bjH>HJE3q9x%tYC*jD$s`k&p9S&mmMk~tp`{%SJqzLsP9>QFAWO9%90Y(@hsF+xLOjQD>AjA zneud5e0B?R73Reo@w_vMEVp|}-@(-z@fXh~5{7wse32!gtL5>!Ev-zn=>vS8ZF#(f zkW)dZty>@T`s3 zvm^}9+IX#wB*U?wHLJDpjcJ79wLaeQQub@n3%GFzzut?_u%y7ufbUO$Y$zA^58`)s zCRe4=rUm?_(+BZ!mW1i^LHwaKLUI2fJ}HgRcUU&Z*IN?C>%;iuD>yt)A$Q(^?_1+N zyD*{rqS4nU@y1s&IpaCB{E+!H-do53?BdNr$Uci7aJ{nq5$+%Ni671el4x6cVP}oEVHE8EJn}R z0WyarvTm{=OvUT)L>)`QcpaW-l}0FDM#A!*gWf-J8pXr%qyn zC81w+5;=WIh6(v~bUDBB5-t0YOrcq_2J3KtGbS(bvL$$D8*T5?h*yKedLenpWg7c6 zOymwN8|H?IMwWyns$rt{9VAn1({MfX9G7S`j7WhgoE@=ctZAaJkWI62&Ji-r5-(d) zY!+RG{S*)eP*YuC$z-Xg<>VmC|!^;@l!4p}aZy{7G2Z5ZEm~Bb1(OP+4Vz-b- zdSsiQuf@nb(Q!2C3ESQ_iK&)^ac`5@m_{h>7nO^9yTpVsW%aa6Oum;0$DQtJwo8l} zMu;<`kMCCe*~xSo6AUI_@`58n`>xc5p-urj4)KZ+Q&t2ZQg z#>zLIs21Fq$bNt{hx>XrCaPGn+}?GieZAg^`;h+7oI11JCt*s-)v~O!aKe^k`XrV; z$RRugZSPuyxo={98rcTYKhb#t%Pf2k{Upe(iOE8APCY0U3mv5lEf?nDiFOZ>p0Feg zPh4+FSQ3UO#-|ZVjgjR_LQ$g2BW3jzC7M4!)dD;S+?@zpKNm%1b65A{Z%SK6JZyKSp@n9nH7=jupe6N@at=t5fl#}i{8w=p&E*29@w$UK#J!IDtVq{MnlLOqib?Vcc4 zp`ND`u_sy2@mFxIoR%0NBwWn(cjvBZ)v zPiH2!Si<3%56v?Z^(U2e^?c$~OF~!ACpwlRzfUGtVVQqE5t~A!#C(r7ibjLaCnj4G z*7rGymziWyIi!*>FR}g^a62(lnyrm+mQ{4tP)i5h9-OpqmstwN|TxCms0)QhEuY2UqC$Q!wu%c~P7 zPbbaGquM5{l`OS4eWIQv#ipf< z9NtUxw65i@!kXKqV0o<$)XZ$84?YtKODlSFqRc|x`)o)A)ievnRV z?nu;}T{e9_Pn=>&QB?QiK2Mx&3Es~7if3e>C)$dPU&?*K&O}F%ITwW1>vkrtWSP`# z{fk6@OTszhuEY!>dVYRaVy6(j!@E22BkM_pXLsUvOTzH%PDG!lSQJHnL7Ar%`zle* zl7eWo9quupG<=n)Ei!s{drzW)$mreeJ&C3)W5c`%X}CAh(~|JTo9`0ig=h%BPfTQ2 z(Iis!J-GTlG1-!W=s6&pEqP94^j!B3iFqQU-(C74vCtA;E&K$oeoU-mS7rv*cBuFK zIq?+}8$u>k=1|-xD1zDKpYS{`@9MBSCESC`j?noikNN%sq9XEnMp5@??9@! z?dCH%3gx+K9elULo%#xquvS)g54=jG)ZB#IpA8{X-EI7ul`+>~j!$cYHQnKsl$b*? zk2?o4N4nz|l1yQ=+Kas3RLh-cNkOze2#q0Yxl=@DF6Nb&!c}eeIgwcma-}6Nip-ZH zQ^#E>GW$iQj=Mr+G?(kTYehzLxvsmBWo+(rhvs_jua*==vm}IhZuE5ub65-V+}ng` zEy#1%T2gG*x5kKaw=oUets^#(JFSe4gF4Akd|&2O9~9txDFuaxV7FS znL=An3qe}BkFI7{pI{%h7^JN`+mZr9wUXB2E^;@oA(^nJZs$hdwysjMws!74|FD{E z38x$Q?c6Drj4+4ZiZKgFd-pk(F~=>(c*GK@#h>N5g9q@5vi9!FR;JWsLuRp++5b*i z%^lpVcZn=B7uQdJiqOLA;&#{DS3dQ1b zx1A-+jfU`waxz!ATQX$2xNFvzO`k6ACzi10&!M@Cd%%)V^VRNc?~yCqZot|y#p`Of z-uq=^+Rg1OM8kZo+s%@&&Ft>pYDpN2?(T3)Lcgwaw`91wu3WsXb9ZOB>fv6rp=`W* zxR+WI`qjhjYRL#QAM-(q#r5uZAzv=W*M>oQx%*g;>4q`ePawVB(>IpY+^1Z4`navE z%m}jpxlDR)c9C58vn*Fj!rxOw(`P`r5Z>ZGVfBQmG0;rl>$wIv)cYR3k;@28Op z*a^PX-Oa>QL+L#ff*wG1BdB9U%iiXpD5b z+fc}GA%onckQTVjO|8UW_jDn7*j-}MTF5iKlynr*6f)%dVE0NPt)PcV4oEJnJWg*=xc*9%#fA|ovcV>;5kk7c6IOP-E&OD!pgE|we|=|0Xf zHdQH?i`>~6dhT+!@1$6in0%~D&^+ZXx80YvUYJ#jjky?QY?M1!$VMTf-MYJM+*57u zeQpaTrcZUu6yR#CJJpf`b2v%@wd%!gbT_#wFyH@*5(k<4-6Bg0O*4$6XeX=0onT3c zCBq@}fV)~`ZaN-sIe<)X+kM4)uEp&|ss#_b>x7(t0(Rak`EC!(R7jDWeN399NR6+V zl%gC`2p@JQ3Mm440eT*Bqu;Vj5~Y`9Cc52) znUE8OJmFUVo?LMs_X_kp={B$=T#tInjinJO*Bjn;8|Rdb#oKPRibVL7Y5P2UJ;J>yYGur#yCddukag}DAwOfTx2qD~ zpm5g-xqnB*bc4)#_e&v5uVV6^n^TGPeA^7`!H{|1JxWLg+~gv%!EG+24Q_I6Mfuq1 z29?=W{o8S>8Zw*Q5rNDwwGhJE7V294j ztWCAOdPkEC&hyX4>u8Xv?Oi6M!t;20-jWA|?7{iyBuE|a6(K)^oMg!^AzKX2I)c>o zs^zifoggGr*J~-{q`&hEGxfXzAs2zr3p4e+%w7AVJbndqN2P{+dE{`Ex5&EU)VKti zkMi0c!!d2t9k)9{>X(aYp7+9w7|`I|Z`G6MO|-5;J$c^7hOFnD4{+B3dK#3|)6kO_ zvr~E+dQ}>ctL1j@hQia(t9C4r0<#EfG9y76d6!#KVm`t?ehElpZ-6CONuG+=1wop6 zy^kYT%d+VF*fSt8Z{qPBo(B)XNgj}Rx$wB&0V@-hAJ>yzA@kI;Jo<9IhK+3q%~JIE zG)Hs2z!G*fx4;Jx;(_;&B?V>$ z+B!Osc!D=q$Q%%oImufsuAaGy_hC=*S~lerYgU?N&%B-D%@tC;5#Mn>!)x4(Wj^xx zzQbAGA|a39-a3uz&h|RTSY|U?KO!x?eL`AX#pE3CoOxwS!nxiUhg^jv;asm?oJg^u z+@btB&ugAwLbvw~;aa~^Ex?6d z3rje^)Lv6<6Z@e!RKY(K|)-Y@Wttqm$Q4WS+T${p#ek7qa~{ zzO`|Qce%Lg-HF!*FY#`$q#)X62J5-RyF+B|gbbC#OT2qU&sk5Zo=4IM#p@F99U&Ks z%%$FD(eo%qAf)F~?^7XDK*-gl-fkgup1)#4j9I2do_eK0HHZ-XD`o^aCC8*cOXf6O3k~_dJ6oy%)2h%=DVqb zdP?Uiukdb5BNs#FN^j8#EaOQV)y@0Pl2SwGDrZ6CwVpYVH4~W&SKYlTClM(zw_?q6 z14u7#?y0QjL!58<2&A_cJ&j2PGuquq8#Wg5pvE)EOV>0{3WL14NPwH)?1lU zqvtAb_v)U`@p>OE?H7o}V6V9)rDnizjD$gkcr7g9x^nu57FV05 zq2~k{?Y)vlYJ-gNmZgy*;FO2<|v=?$uO6D3NRi~?~ewHlH(!Ss!Z@3Wc z3m)=DiL33>J3Q=-W0}<3*N=ET&$MMD)gnFO6+Va{W1msmu}8dmElFmX(f;cZZ}2%b zUa2wmqh7&X70S4J)Ei-Cc<+x|zehcDZdpB#dEv?^pKd$Wa9f^7``o9Yc|!!qxn zC!*Q<46ph5Ova)oA~MtaPRLsHL_}tLbK9~^fS!oR9Ix*MOlsbMc_%c_^=`h<5}RW5 zs@ptolqLMC+jhvj<;M(xQ}u_-LYjt|Hy zUiS`6DuOfxS?KM&m`RlfnJn^#bYfCVWR`d>FJZEx30_Qst7YB@A@7RJ3U9X%2c#2Z zR(TsQWmjjT)uNrF)n2r-C8-kiwl~<4a3u4#SHi^3L2iVex4p?}gk~jcz229R9-f2H z>u2k{b(U~RmYOom&6HzctpGY`IR^hQ}yYWkwSFSlf!CE+g22i|T=_|2=gA@hM(?dr1W z^MO~-5{}nqD|1R3`4nV}cNLRpAM|Jxo{zmALMCA4Z4YEV_WGo`qBGkcdm}_fcS5&$ zV}$4nSKGYtmT>OStbdy~n~A+;LvKTU;;pkWXrtzU?DRTb$D}>( z>%9T;l{dwbV*A=N-TmL=%@soX=I=vhpSM#8y&ts$j%>O1b${^Au_QV^{TLU)RP@$M0sFCSr<1K#~2^EC*`9Pl0ynSE_I4S)3}iHtd) zM-IPwGg!vf)4K5eH*b|CVV-9B6?#&5cr_ydnJhnZ{uS|STA8BMdG&~Yl#qU?UzCFp zzljif|A$uIBK}!I=#~xbh~@a#FiEwv75t%Tgho3R{AVoT*Wu_4UPXTq6Z0n497v{; z{~Nn9d!FI-@XCI@UKERBGw4FTA##Y{!jd9$H0Clio2cS15ONlFvWQgmPrSkAg=ujT zzdwJd-%`ksq5M_!YW^}I^!gC3z*P7538@a5R#)KFasRd(SqX`<%u1*{AK^FZ&93TUHI?>~YWZD-G%!qR`*VfRy^@oVJ9Yd6LUv;Xn8H)v z5BhN2+pmt;J8Sj*mX?HP503UH2+`frJb%3qec?RMZ+tU{XAoxD-O>8x`R7;?jt2Am zt5_!Wt)D!%^@ zxHt6c^`#Ip=?-$d-^!9w^D`^JF)C4K_%&{2@>q(D zu_Vm*GyH0|kxcmVWDEahA)4^N$Gmt|V`52TUz5W=(kCoCy2M`FdA$T@z+ z+u3(5Ev-#?UGal1i#Np1Y-9YoM#V~pLXF?O!~=4m7VxzHbMNvT=) z9dZVwonI>C@+o*B9;CfL)smv9e&3;kKiiUm=-EyAweSx9e38-bDO~I?78(7X!o~iZ zBJ&>JWTqKeNB

(Qip~^f!yl$GGFu0ls(gKNXpMAYClkEi&}>5$UuTQACyK0f^_vu)5u*QJ^ZO@0uXBXZ}Hz1a(aJG`GNiqLM{ZcJH>vJ z0?rG44f|HVtq^?;`&NIDkmI^xU9<^q6#9<}IT@siC2t9-gxe^T%eVXcgfs*pzi#() z?_|GD6PZDNQz2K0%pkw3kdN-+6_3Gwp^%?INY7yZMIklYv0p>{%|a3&Bs0W6ypa9+ z<~Z5&^-mCDj^`UsL;c=DYK&&T?(oM7iGh%wJNzX=`sZ_7H_ZP`ND&B~${Xe%IfDKA z0pnF_4~P4w3OVc?mKp93V3Hbd6!>#3DKM{B9@0_z*Ib(d*PA(jh5`ldJp$F9;%4_Wq-JkYu}BS0+i>w{QH)Mv6hE@htd8fA=IOh?_>NuqKCqB zA6(t%XBSbtc4XC)k<3`XrjX0d!tH6ujP)A|>GvpRkRaoHpGhShb>HuwA!Ns9&cXZr zw&IFnL3-}@y9$~3GvGm2!z_PS$;iBO6`~ZTC{i2{jk+zZ+u5%*xO2;FNE%QGwI00-rYXb%G_;9i5ZRC%Cv6NFnOQI=uPcolM{sK zP3_~7&kE6-+Q%o~7NR$`8z+CVB%Jv+O=dkpAuNg>f(3CJoie2is?#6jGod7KH|)TUJRl0Ah?!yBZnK$6L}PmoL)(;#{LlSDWN zuYgRDY|g~4h7AYFPoDY|Yo@#Z&w`wooH&U{0iH07;Dueh?2)W8nF-zfUjuSV@;ysJ z&8H=+OktU-zaUPKIXyYUk|KNmg4PPoNVa^MWbkV1C772xIQ5#mO$dFZ>qwBZk`vR& z(IDq07YR87Cv53XM4RMJOW1ds>z$w6&%~}HQJ>N_8BFEy{IV?@Zy#cQk!&=L$=8GM zooA3v$>!5JJoM$78$d2kjz}Z@L9R%ywuH+D`E_-2XBrs>nXbu}&yt>^l<(b>6Q5(h z7GU*q9%Q;FtIT9F9%=YGNY7+!7L(`EioOHVJ2}Xb5>pqavpxXnn=BG?01fXaApMi~ zTN1W@1CtXiS#D?9KSE|;vg>TpTx>pGiTed{oOKjeoMP0n4NlIrGNG%%$#KuKs|k9rxr6_$jqh9=jgk>j9wXmWoVX$~?XxqA-jDT)kVmvw|EvgKG|K!-59g6U%f5C?f}m1u%1S9 zDehrjAjK>xHhYm8eUYjUB=hHS?hJhpr=_an_40DL^Ki1Al?nAcTu$bZdi+gkITnw7}~ui5YzB45MR zo5{8dITpIUx;mM8%Vu@*2P;z)9kPJaa82?zA@!c&6kC(5@VX68^c9>jqjX-AJXFX) z>LnigrRf-%ZWJHR@g?x}ACkT0dl!oVYAy>Ykn$H#T3ideIuM36v=ueqk zBILxB%vC}vN@-b>>>;EwN@m2x8+Vc#%cJ*78?`3c$I67GrZveCmV~*yCb?w^r+l~X zvv8vYdu_>9OPPH26_a)4%FjE=$ySETVLP~bC;5{lMNzHq?vvsh#{B65Y$!672C$xu$(YDY+{$UVDH({&(;!qYHYHCJ znaic_e2_dxWUd1tnGcc|ip(gH*_^yYWF8io&B?AzQZ4_MWUDu9yi8wlwI!LioXLz7 z*>6dh&Rfc*;fKk_D{VTb>fndTlPw8r_lL<2mJ~$`R&nY5D0#Uh1<`vzC>9?jyIT_a z^>I1BwkGGXOr>2fWZ_N#&fz6r6FuL76k4)eWVHNjOTKLhk6TD)Tk=DeNu3b*B)LHlp0?q_lQh$X#sX6e-N2=BC{)L-sBL{9tVxSc9%=BuabxY#UfW_ zzDf?Tu1d`pVgJ+PbNE9U`dHt2br#r$qBYtGTt=*JC7=( z!Roi!)w{E^%s|Lg3V2U59Me_~4zNtBJXa3(ttD4s$*dey`v>dkj@tweLC+xpkB!6e z>Y+hDE5qcN=m5ELQp?>*@ zpo%3$(KBT1cVtjQWLio8eq?Zz$Y|ePD>znUwC}DJ#6?E??%Kf#BGUqekji20;0%%Z zP(oNII8S7Df{;v|pq(XQ`qV9#8ufy888Y?C$s85*Tu(9O6kC^rZ>R(>Fo_=aJoj;V z!K;=OMC*W%?|H#8kvVNCr(uI&waByrA(;ljdm^JF>SKZrMWz|X*d%jIu+x$-77fdV zuu*W`dtnHvE;kAanWVl0eq1oxlJGm=#|7g>=7-z4XFNWbC^8Yu2ggDE2OtE6+| z;5m`Wl~^@5HMpYDa?@a~$h;3i>vc_ojVxowHWZ6yL96#E zUd6_T%q;xN35E!{52FjJx$$5IlT^LHRbWfP6mx@m8%R%ysR}(b*7C}wp&tyiGGTA- z2NNs__4wsnC4&PQGRa`>Ch`kAyr}PY_*h{GW^dtGe0VRBXNkQ}|5Gsf5g94Fx4POzWQCx@M zZjpHpgk(Ad_lwLcL%CL796T&C8$d|r;$V`SvZH|by;AxQ>qq3-vuGRE(@wy!fn)D$kWS%o|c5;)oX)VpOwwQ zYlAJ8;5;_gk*KtE4;t^_{Ce%{EZbLJ7ZeJqf?a!hr?f{fSIDn3_}iV=2kV4vN4%(q z?HLUCob|klSj<9LdzH)g8v^r%l}VMc8-hGb!j|@iAeKfZB3?HIt05M|DWhUSxa_yQ>&nE;3*25%d?C+8`uzM=(TW zdSA}r85WEXnL!{VGc34QWCmQqGQ)!hL}nxi$qWykuq3Rx1?BSM&S3B^O2hCb&Yi)i zG(tCV3WLm>I3s10!udsOXd{E^yE!lP3qd1;IhJ6z3v1n!J|lxyMP>rd^3jTPQLt2G zo&lkHQ538ena&t}k<4AedXc#ngkH9?VW#`9&%|ht=M0D@w zv7p9YmZ4aX%;Q0OAruRec|6FxoAX3)ugGW`J`p@%NtlLD1doZ#i;{*<22YF33Q5B! zgIOZeN7C@A;3bh6ENS>uu!v=B8Xk+7P71a&vFqWNgG>!h*hjG_HH|S|y%uCz(87{p z^ZPeA7Y{N$82dHJ6q}_*Sx7&un+Gon`5b4+9|4&WEU=`&{Nvh)c?D!<(Dqw$Rbbu# z*$6T#$oZc2)W0#yYz3JexI!+(H-C46ybyG^q{KXd^J9BK<^>OlOyO5(Awga&mtQXj zGgv0o+Poa}_=Wu9(o5^uF9)|Uv8&cK@^QX57@kJrmc$NlnAdd1n=>G<1h@UlVQxMM zr*A-B4Ymtu@jcQ9Bpg9aCIuk{J`{y-K5=VUYKc_Y%tlCDB% z@9zze#lcn~O=e=<4`g{TAi}PO-j5z1WK~cjhsiJd@FopTpRWn_3HjoYh&cjeZ7?pE zWQt8c?2+Yzyc>7DV;idKUkke=uGLxAgdy~qP>Z;;A&Hlmqwoa32&kXEi5T8 z^={-|@55jm%cN5N!(gfu2D8~!v?&PH?hk|cBC}x+%X}0p7MTx0Namy9 zO_njAPvvjod>nji3D0xsT-?XOeoMkVplw0RD8&L_szQrIW6^CvTOl_{8?`OyBt&04 z{v^0k$h(Lo`Tj}JLx{Ffp9Xz|XdCruaI28}DseluJs2irA_(c(9*hz)VO7L_G4``y zoDlk68x<2OZY33-669p zn4Cr)2H72Ktjf9k7-BjZWN$FyP$DJf!h!gHF32~*7E6lFH6RN>z7N(N#;&#^UK>Du z3c6Hda(HFj#sxVLED-X>0%N`h`8|jo&YBHcfQr~HHu+kY|1NboJO5296SnF(`P<8p zIWdbzU!*@iFMI!zQbJ|jrJe>929ALl%`S0H#dzM*+ zUA1((@)?$+Jzhb-V=u+Z=a>Z||9U%ie*#K1xqmc^?LT6biu^h5cNpO3V%40?O&2l0 zSKO7gqh{a+2FkP<1GgmKqc-b3{yMgwi;_s3!-03lws5>(vHs)S1Xi`^_s-ahA^&Hi zFHM(c9{B^FV{R|wF7!|NDhVIQA8+lWFCl-ZzaW1#yjM%SnPa!U4*!12HxwVd+`pde zIcCUdWY0C9)gpTZ^G!bre?_yYE16M~--paf<`^qq*&IKBCEp^A&=zgPxSqmy68t1{Gj7~dI7fPH=kkNuR1LC6OtoXk%rU($ zC3m@|vgNqrZNs7E4quaie$uz;G}d?VO4ipF{*(SlKI^-6KI@x=b2KE+cARGreQeLN zXM^bX&f>n))1)V23OBI({y)Kr@O)X3>=n$*Q8Fu<6VVn^I?axdi7#GTcX)dh``Oj1 zMa-%mW%)XsAtt@WT`4>{=Ira~_gs;yV46Hczh}ws_|6DcoXH+Xze(SNxC-Mzve&m-JxlyPEvVF^g8P{M9x;aB{$!IJbi}4s!SZx?R(utcl+BNKT*pr`TMHv(=Qo zU%t=fM$n_I}C;5A@-{+5`@Z_fC z9%#zpIt4dYC_gjprDt<^UqbIezn^LS!|553|L6Ada>q(JJ4@;nn_)T9^gGz^M}N-# zU(kZhFD~YAWtys2x$09p$0OUUw*3Ic#1bA&-@BzBVtK6C$?t#FzSp*YS?0NH4yVR1 z)70?(bB^N;JYQHgKh)0Yf;|uMPyPR^;m(w&uRc@0mo>w3$Q&bA$&YhyV)-*B zWuvrX{565|OXb>^kR7iGmvX&Oo@u`bH#5r1X*jU{x+FbZxPz0SkJIJ9>JMJSJ-%$X z*&a!?dm8Rur%*U>b38-7EYB(DE>r$LtG|3YY5K5qu!wb)1%Io{w2E#e+@Esj*T{_G59fhs>c}*xY(q zdU!&AIsBNjKgV*KUdnT({Oj`eN9FYj=|5FpSrg-zuH-M)+eA*|qjD4;s!uV=FAbl{ zDSz@+4(Go%ahg!l>o7@QH8s68eR*7t`Y^g|{B^v};ls^B8P}@)Tda{#x^I&79*Wr+ z{avy?g8yT@_zwTRdJ&muk0spyr|qM+hMSj_U%O{yNAADhi{Pi_i-upvdsoYN zyR1EuDxb==KT!AoDO1~ngXzokf66VKZ%^P94dsibPpaHW`BOPfAC}8Z*U+x=s+aAm zA72=geqkT>`^ew2e>?M3u!`>*4UUF$e~$)x&D<3p7Am zpYt;duZyrd9e*lUQ~TA-^trb-*Xyi2cE4jdncN;xyQ}3$^{e}n?f4Jt+>mD_4_$596chrv8>Sv66HZhg&zfr@yOR&7*C);{DiOW#gy6H<90U9iwbH4BLN}5A9=d)`ZeQ(`mwi=o3@|R@MAnL^}MW!GY3=4ric2k z@p{P4&ov&Qsp?S++aH;k@z0dkeC2wE)#0>yPWjaMO)j78FXpAT+=p@+ z9!`%ev(L(7HM@)+&Hs?AyqcQ+OQl`qbk0iYnX`+-q4EbaRnOv9obDQqqT9GUX?mz# z!>^|1kEWB_YaY$zR_pi4vR@e!9f2w}p0{ zpKE)s`ItM4{ZYH>3$k zb}N!v7iBx{R@Y|zIpoN8!R(p-WR|ZEQ>pyq7%pew`0-v_?(qKARxV#UPU@7$_S8@%!Au=@ z&$shxoc6ceKOywv+8Ua{bodbzH;i9N{=Y{a1G?f2Z_=ye<~TQ~gy_ z$2n!qFdaMMJKEH5uz4^Z_A4*e;c!pKeKK;#;lOL%!qu+ns^M4vH61h_Y=-N(+7E00 znHdl5&whA{%W+vV+i3rpX=*yDdo6Fn?08$}O}Gmz<2e0&Y%h+d+WX7=T^;^@u zY&wVKMAzlHf5sPer95TI>-aD1%$$GUD-)*dlW<4h8@$Luc4%r0hq zDqq&b%e*D&`HSy@EM)oHKP_u!rq_V+6y9*0r1MxdGdb=b*Cc)6ct+P(I6R^Jf7RY* z73+Uq_IrEealA6a{b%i2i#b2ET&X*apO!o2T>mg1`knnPYw~&m)gLYw;W#(buIYFc zzB5Mh8V~hX*V}a+Gn4DOS|;aphn&>>Q{^=Lf7Q&?uludskA(44y(+JA%Ku+AdEGpm zZ}PY*C)I!aPfr)kZ!NF=UgG-1{c>17GVK~~b+7Kq+9Rg>YphS@|Ej6|6Pq}vAoD}j zqwTZS|IFW2?%y?ae4+7EJMUZQen+?;sNvG_rp}Ku?I}HW9S3KwKIir%bD#9zwP(iv z(3RXT=scV4I3M)^w~K6s`>_A6|8wm8KFf>|Q}a{D$7<(&F1*2H&(q*lkC!Q&_=4Y3 zE=S5Q5dPA5POnUUmyKVjN9Av^?#lBe_H}sl!`=VA@|u~>e`M$OBrCPAq2*Zncdd77 z*K|_*zw4gIp*pVBb(U~Hj{Vc|V93>fH8mWW;V)~)*A-+RO6!OIu3Y1%_DnhTPu;1# zY&gU4>hERs=>IQBpKFf~d4Tg*&4Yzs^Qo*Ej=QxSXO=^qH?w*0`NGuQ>G>Y61L=H&%aitJ z;rRy5XO+|SRJC)t(0Ub~BjEj#(4ILj)$*izGJpS1+j-q6?AJ6s$)tL(>%D5ffUXu| ze6Q>3YO1?~*)@OkcTFF)YksLeBklfSmieY3*H5*pKPt!jj9DftkLA>!DW~oarcb%< zSE>GVJH`9Y%F#H6{_1{7`ncw=a2g-cUk!h*><1I2d|8ubV{Qq-Gr?4IWPp60WBRYT4^#IQQ zaQ^b|+W&00H9Q)Qvi5L3l(}BtF3Ih3CQrB1`Rvd8a(b%#pAFX^$#MGp^?W**yEB$> z`=sqsrvHERd#3!qYae*?e{VVbcfe%| zklkmSVHxKl%dUfHJBTkQ+5O9KoS@}F_47D2JU^?vtf}MYaQvX-TWw$24CM~S)qgfa z`GfI)9ghF~;nDfHnmX^UQiaQJrk&@@dOjMjYKxqd?SD0#D*yj=vuyty-WU1jJjc|M zeB%5L)BFE+duBd^PgbRc7TI!>e|c%Pg0FWY5gkvUY7J!+pko{d=x?`c-as)8~tn zzdBD$Uq?%yNB&i=`ew^M37hyjn(XUb{2G^!lf`5^?$e1~#}hh!SG)Fq2ip%)`AmPW zX~X{U{!ixqRoE|O=7;7hmlrKh_+lE$WqSGGbxAER5jp>Y`j*4}nwA?qSEKqe_56`t z(=~IP`DgWMdF*TNL!ulEA+mXF%I&4wu%ugPHhN&@gVF(*2?G{IBih-IXn0VZ2qp{;uVV%}|eWU9WxP zFiuZ3x7vI5xYs9K+Xr6%M7`L>^)l1W@hE>UPtTcX_|*L{DVP1M88OF5J9RnEpH!=s zoAO8Jjb+nG*DE#sLi-78IGwfpO_|N*UwNio=Z`v{<8!0od`|hx_I@5->6p&(XLooH z0B^8{^F+MVw3XX$me=_s-cV{sauGTAoRhkjuKPmlPnKyd=Ob0G)^q)x@0(|(?iY^i z!Tx8;sr}EIs#nin>A76x>W|*1*WcBy=AZTN&&sL)s$c!hbg%cfGy4mb=X*WjeQ!Ol znrVI_=N9!Ikh;qm$?2^1q3rKja&M^ox`mdXeNt{TeQV`%do-mZm6t5TChi$qo|P&e z8gIS_kYzL+e6A{t&&H=IeA#AVob*Oa?TQ>;jh~JWGsBZ<=XMbxviH)lA7Ib-=h$@+ zs+Zr$`7o8^-|=+|TfVj5$rg7Z=XBHX;^knxibM5=^AYWalw*z`#=nvdYS;8$Cii4B zd3}6&nDnV!W;${DgyS z?<;!sF)@70`;ULmHU04Y%|9JKD$QFHDcWL7eRN0OOkGTT$_SN|&4^wV@zQ`1v_&$O$YuIuXfM(@|FT}`^z zN8#>S#HNlPRF9gyVH zaC~rCHr2x%qv7TD<&S?ScN7l2-=gmHJp5m?N92BSju~a+hjFviKaE%Ge{j80d#1_1 zhxcYr?9cU2(_c-kUwR%+=S3rIe}(pD4*7#G35lKEsXbx_*m&m{AMZbg`J4HBmbk}T zZuZ`>y3_KIEqcn^pWjD%!{7U5ad_BYe5a}tr-QzGqwfYOFKcF-AyQttWt11aFQWHI z^!|jFN9_li%KoXEnd6=Rl)c&ooSy$xeWi9^6ysJYCz}6khWmADUnuuy)UM@8?K(eE zyN2t3mtF6xtA9Li#Jgv`jAOEN3+riRN2+uM6-bI$#GLriNwI6KU zqva@beIe7X<80k0R{PwGxE(HQj~JCJ`<_Ua(f5jUelkY-Z=Nq_%lme^K7@Cho?`u( zrr!5bf7L(Lr(DCQ<1qDK^GoH_z1r2C+I60IxE*Kc`goQpYY)da2MeF-Q~f%R)p3!! zJ7o}+E4$q0?tv}nIYP+ra*nOx!Gdyb7c|PBV4d02; z-~Y(e^BpSpfvo41wU2R#WBG%uKILyUMAl@qby)lhmHV?Z6>+9XZT@=Am8P zYrW8X(D^`SKIyrMzgnO6+|KPKm-Fyk(82iA=a+3?4pvV!{qnQzG=NY znEpTd{jB*MFHOfEWZz%!3v>L!cZ}7p_er&VQTJ-sdcg09hV@SCU#)vNe|a2^c|&`$ z=a}gylbLJ2K8nl=X3R-sRx}mtdUe$BdH+gg_c0u9eUCXy&OLKFMa(C5{Vyl=Zkhhh z^7=czgCpl^v>jp-?;9t`UtLcQ?|B3^99f16YPj{@r=Fk6 zlXbwjHN)^_a=n+!`#lk}r5BYq?AH`=xHEr07%%HC*W86~j!?Wa-K$)-efKKYyk-5X zApTWMxjS9fX^xb28m-r#;5z{{kLG?L#~dr+)ZewAiwfs_(f3ca9gLVgc(pq{eCkfa ztM0U20a|u`N90n^hfn;xV4_JUEjyZHuW2Fx^enx zc?eB)ul}oD%bD6AE1~)lk^VKuoP0&ubmaCUVptCEa@%s9o08M;s;PR_U#%HGqh-TU$-eu8uSm)7OAhjT$FnJ2a?IKaw62Qw1?w5qAL}|n+3@K3 z6kdl-FF)K4Mdbaj9BGGgr5&mu?NCK&hoaIBRg!k7a;hDA;$p6Mndzf;UB}b%!R09; z`I}=je>2ln?W(7Rv_D#JSRd|l{L}XDkGYn6b)VTjYPr?&&+Q1-ZS1=M5#!FHa+M?P zPxrh(-ZO!c1JJ`Tn==}4a4 zqraE@%gi60$6WRiyZhw|&PP4hzrpI)a*p$pl{p;o%UC|M{^|JaX6t{r-}p!4%_g>e z2Gzu>P+1d37H7+YOYzVL7<^ zX0qp)zJ18dH6u?Wvx4ab6JL9gb}`FnJhWaO%&ze%`@7~3))jV;{%~Dk*DuJgJd6u& z;C$8m+lKEenY@Uhe9X$jnKi64(+u@%>=$OCd{Mo|Znmx0*?GBU*C}MjxVBqalgbzM zqx$>5E@#{hkbhLZ$)s{dCe?>5gp=w6`CrS1C&$(c^6}264E~>O7UJD~+8=!lW+X4i z&cn$)r9b_C7QR4}g?Ldt%);+9p2$M@sUBwKRj~CiE3cxVdPweUIN*-j8}hfyHRK!D z_blWWwNqKhFKVZ(b#w%2Q{&5|<``5qcno~AVI^ugK@*dRJ_Pxezv)+ayVg}oJ zN{(suGt?q}No!Uxxns#*(QK3OskHeH5isvS+$bMeKfeEldO-30#h!nR zn78E|B=hk1wS!3x=ag>5Y3$_8bV--{m}rrt4#S*&o%LDfc4E z|Nmm|I{@t}sLeda-*wV=;>&}T6qE1j^vpIW|M{ukqOtamX#800rR#xnsgdyyS}x<$E| zS*Jcb+--P`l=kvdZ{M;9%yanre^Flrd$WA1h5W3$=HYv~i+%gw%MI{u?}px#UmwRi zrnDcEFL(32o@#+#J;>A1kmo)>zk!!@eLAv0mj}99gKib@q}`ajt?24OzK$SYEGMV? zd+6|5U#L$^t~|t73-Q$(@tGZ_?$CX#T#lzZ4EposymfiEd+BO!lTbfdJ=GEFksfZ0 zuTOfqNxt0la@*fU{;_+NVyjEDUBoiVO~aaRiYN8D_9 zrR!1F`@kPRwn@4W&VPrzUjAWupsSVBU!WW4@3XGxr|?~TjIK4G(?Yvg(sL6&M%S6o zKe&$;>3XtReu0l~SMdF9pKqPzRes;_F!X|SU+UY(&hc11m$@~zHoC`rI}qtg^$_B- zb~(0(AM|&x2c*~RC38#o@}0Xg_oN-v+y&mPyN|<8SPy>2m&YD%UGMgExo=N;xo5l` z;>Fp}ZvEM}lbQSXO)OWr%i-d^L)Xu{^}r`_vNKC(=Ki&Gb34=bH4ZL+XZsZGJ#*In zqrZ)Q0OLE>yLGn{>Sy-1zlZh~YhW^5)K3`&eta7dT>b_9#ObzwXez;e)7+(Dg(ObEL9R~X6Lx0Em7nxK4 zg5mh@B%kk@Q~Ui4+Ht1yRo|Y6{2hjV?h4dH<|K#Wdn{{?|D$hDBYm-5^!nJ5`4H_# z<;?d3P##xWnS5h8J1*GC2=t2>{%Q0VxWDTvZ^y{DO23x*N=lWBR(8yCLAzqPpk1+C z(5{$|c)Qb=ixlqx-hzGv-okaa`hEo7rKs><()SBlbhIO_Vtb;J6F z^3lIxAF_j&AwTu{jnA|E8nSGuV+Jk^%GeClh2xXx7ZEC&;O}E zi1TCnFke9t+P7-I*!m}$cfhz9@A&Ya)|2Jeyn>D6bxz@bXS_x`{%E|$eEn#=rh4w9 z@fz!qkH%~N5#u$~PyZ3)HQ2*Kjn`1`cR5}Izoz3gg!@k(ud)5}<2A_Nbi4+9x5jIz zZ;dYYlhhyAxUO5{HSl>~#%tiy<#-M0>T?_G}9@ZFEs5Kp(pYoP0Lyas+zu9jQ#W5H#d{N1TD_+4w%%&vM7FCM4{9A&{*%MLbcMHlN|B$fD{KF7)`&;zu6FJb z^T~d`M&naEPsZ_|_$qx*hIK9BB@g`^AM5)|hte)^KFgnb!MwIVUx#zS-!Oa8{tvw~ zqjl%vc1x#?RVkGCiCV(mHs%_5FqYJ~`ZTApY7%E`OO{ z)TijQ&s_Q+=I4tN_flVuL*o8A z?MvZ0F~_U6kEIs&qtwHGl#a0PqDN!jh1yx$XJ+fnyZuXFI)Pp5GA;QTi=P5gUxDc4PFn7zwo`4>NaU&YV& zbdE>+n3fCogJ^%6-0i`I<=?*R+@6X@qPlMoMf z7QAcrWqL~87sL5zzAH_6UQDgL47wq^q zd+x>_VRFp5!}RcWZySG0e%Y_~_b6U{pMRwBeR8DbPt{L4rsSCiY<`dX z$Cw_T+u(fh_P$=LH}>_3{!^Y#`%t6awyjxwll(hjnY*%P=@$N2zuzhgdd53+eqEyG zF82H4>fs*B4!5;mN9^I2KQZKkw-43ph}ZMU-Tpshe6^5&^}w$q@aqxy^(^sW%C=gD z>CVD=puCa)x;NAGr* zccypa{$kZv(#OyRW(U`Qg>F1&u6~B`kM)D@TXJmHLY1&&qk~-tzkjI`7-9?l+X)bq|EjUF!Wn^&d3v{zfRT^4qGypkVc#59 zM8bOt)}M%eyU#3fIwz!ahC0`(dh)~aTRy~d&bA*l`gP7s@|4dFhxmk`fK>HcQ5%hF#vSNl2jer@%>T-lq>`I-Eg)4Ag^9_KNG zeO6taqu04H`Kxr&o4N7+ThZye>`ZvMyoZ$kcJ}>v+>aREan}8$x~J>fm#v=auD_oz z|9ICb@U!^Ra4)Lv0c@Rq$)|k(WGTO^;Zk=%*oUZaWf$%2U1o2Rqw3dtHsx^GCmhyM zclo4|u?EGNXxIahzqqk7^v0mRMoIigR`#b6Xt>1^9xq&zFd+zEZtR67C6Ft_W z!+YqP_<1tCfBulwC$i69Zf1VfOTssI88`o`=MxRv8DFLA?6-K^g-@OJ&#)h`UooBH zr|^DBc>_K`z0^=}#H@ZB~)hcw7ueL(6iu%U;kKUiT1Doc9;zRwoLOI;)dl&6a-!o_UYX0M1z;#KlzsT3>p{(V1i?{W6 zg*Uo9@afF|NAoDZ{`9@-ZzpH#aKn#lo<763mcOdUc6zGPEBzKu^67q?s$X&>?y4ir z&dpW+2`@kTul}9as-7a>{$Zbu%8U6kH}a)&IV$6G_h`5;=RZXbo3GJ3yP3PcVlV2S zuQQwJ%G^z1pSjT`&hUCyyvnB)KI*k={_W{5^YYY!+>$4T8*q>1hq?|vQ{?}D{)RSw#fAAMK(dC`ymFb+P0@z)yfUaLM3-?AU$f85W= z{AzCBdE>jnD_-4$P%YQ`{$a@_JNUoms-2c=?T7juaei0#j49un`&E(^uIf)4?UL~k zT@_#UbKG~;BQ{TZTVMLHFAn`f&aVyWPq*$qkMhj@l*z}e+(=G_W4pj`em|Y>S6VpE z?=T$qaVy-O&(I&s@u`0(`m=`oWx9wj(<^<6E8|6vsQjPWi|Dt0Rn)`3!#wtXrhP`a zKMeVrwG&?o`?A^YupV0NAgf2^m%HLv+C%EwG1AF@++ed4(aHU*U)SqQukRMGwTt9; zt*)8u7Hki_f(On4QTlSMh)6*0Ox2=O|YzzqLb|yZbeU&l~cHe=FDGi~JYX z-->V7_-IGv_?qK8+kw$Vd<<8NH-4}7XWpA%u|&SYM7vOZS1lh$-(dE-#}3whmh(Gt zRsX4B{ooWo51zS0Zeuu%UrwQmb=n(@kJ(? zemuZ=ZuL(#m}%wgRo^Zky}sPZjdDMGy5)=V%jAshg7D4tf%kuxV0r5-Upsuee%(jk zO|R5LEN`)#70WsGuXP*Yi~ef(s-NK%?vn4*PB9O-5A7n>>*8nj5bmc0t@Ut) zQ@n;RhhzHwd=tYr$4kG>(l5S@r`>nvUsrN=C;XjX=KCH|KlCeq$e;QtewV(ahxhXR z{pR;U%lqHJ-{#Syy*101W_o|G;Xcg#Zzgv!{&x9O4PW&yZ1{Hc#qTQ5R&Kh^pJKRX z`Pc6Ie`>nAl8fsy#qYLGWA%~hud2&>sjGH{-=%kJZ=&99zXIN03irlYzQlf5E5D70 z<30k-Ygzp-yw&@vH<@3e6JL|38XwO0hW(YI`)_l#zGm%5=k!^-EWFxx`Q=ve(f^;? zFKm@h+GnhJzQ6qq%_{72?F+2mT^%p!`{Dk4G|pcI`h|5b---RE)Sdi#xqn~ggL}d- z|4n(y_{2T#<4xTdfA5R(rL&vdY4KF$)xH|JnqQV*uJBcNMp&mkwc@^TVC*+i?qdH) z^#k$hud01$Sw<4YNNc%3*6~nV1`b)eqi;DX-{knJD|89I19l!5RHqX>O{;}R|9xi^D zK4m{QJZ}BQRlJ+HvLE;49%KENpLsWNZ-;&7{|fu<>1Vl;pDz7Im$;ixwtD#NO)MVy zt^XMFee|7-Cv_M9jIRFh{$UA^ca=lGTl?Q-M`b_uPlohpf4b~Oc+uOrsYq|~Vf^d+ zZHW_ItMGcS-RN{4D|Itw*t&-C$9;9bq#ye>`zw!G+KQ?`cUVK;g_jRW3 zGk$+t;`;dYOVlS}J-;hF_XmhivvBcyw6kV(`bv3?U+Ufo_i8GB%Fp!ObgrdC@v0ma z_nF0b(SHf$`@MeWxRCL747c*7c_H!RJ^sb`^6!=D>^-ZvAKb#(I{-{?Ge6_IJme$4 zSN$x%53FkO{N3NPi~UZao{;|Tz0vYtdXoE-8HP7Eo-=ChPn__#hVy}sZ)o~oc_VYB zkJtQuk<1PHYQ$4+`47SUz)Y`=vvDt^-zSo}_541P+}j)XnTUR2>5LEdCBkl*A5}iB zzEgh6xdGC{{tC~rFue5HRr;6@?b0Fsl1Kbn$#b~h=a2K6sAnV(^;T_vZ6AH^#(4eV z-n+2QTD5n}_jpd!(uI3F{kh4`w_5)iUNuxa=V5%S`0980qbvTZ|Fz#} z=p-wb`2j^Yb(hU%xyjr;E1F(Z{~4Wqr{0?38II>-sn1s5xApfl;sm;nSMgQ-cn=43 zt@tcT{N0l;wlifp_iH+#}KBGYdY^ej60t8RQ>%EGnxGv8Q# ztMN$h;$!}po-#i1`A9xG=WK3gd2hOi_M?2X{O7#bjUzd)R&(2(WcJmHZrC~0PkTD@ zqdcwn===5l96>yXcF2Vm&Rpy_^n7p*wQ}A-_A0&UT~LKrx%r@7<=?CRe7gFbab86G z<89oE^An*z_R2k$&Z^v1ywxMvUljDBa}k@Y!+b!0XAQdXeD%IV&3>((!zcfzepBLp z@B8(#3%rx`n6-x*S69DZ{A(-M_C4~`dlt$E3)eXwhNpa%j@&Kb_x*@2bx(PDaX#3) zxqHX&&#t*k*PwptZa2RV1NTw*?@?}}!+lwvuGXN_xmV54tK4t%E7P~i$Hu=gJyq-J z_s6gFRo$pRizjiCL;ZFuFL+08ZOW%V&1WIMeff?3_N(u+@_d!QuQ$@mu9RN6TCZ5l z_n&Q?$NF%`+sqE0m~VR0_v^jAWbSitS-%@y&57>V|FQU&`ZnFny)n(|52df_sy}My zV)fn$_R)ua>OcK^gV;&@uJMuI#`7_K!rM9bc;3U#tHtwg>L-5E>ofL~44;K_Zg~G= zPwE@*RCv02IQQ1!ES?^2@B2+JmY#S%&cfx5b8_YQ;`urCce)$zgXdEoi+8|)o{ja2 zR(wqET9522JYhVR|QSLx7i^W#sbLQJ;{Nz; zv-efPIpp5q9mID2eb-@}(C}yICZXMq?R&LeD*N${hi~t3KgHy7{ik-O+FvmGv?cu+ zc(0l3Q<`6$=I@11-Le;$eCy+#AIdw}&uer(x3*(I&fAw9g9`$qUx7D$$h`<%Id8se>?xGZB`Ug=lq{o{Gyu}_Bj{*MLOH(kUG*ueAJtT!#nkO_m&jw z7m&{S1uGpDK165w!Fy0oQs1$k(m&iMXZD>s^GA7S%qrWL`BOLi zo5rV=|Arq^Z&{#={FI+^ZC)^S7C-J!@$;9G1O2W#r?T*p3@ds zdM=u8`K55O3;D}#>ZbboIB}wrTV7X*@ko!x2j^HZPfR`P9;7n=#0^}J=}X-*TU$Ey z&g%xhG&`_*JI+(7zpnBn`~Gm;)Q$DyjLdx<_jz$#a#fh`w)o56i}ljHADZ4xKdIaD zO8WJu`U~$hV_u*7Sj~?+tA4!ag8S3RSL0@-TY6tuSK-yZ>fQk9SAO-^G>@QgI-hLe zV|pxH)t|aImZtpr)4c$A58U6I)A{>BgH0cnUcG;f`x)_m2lcdirC%d?IbNimOg_13 zV_k~!v%UJm3f8XuY9OotumPq<_aH3G-;04~l;Ku6QF}GFw{rFR zPv|C%ev#Q->?g_YyQ?4ZFVjbTbvNCu(y4yC#S`;g{rWOKewSQwZT?B?{)v-c-`lyO zuZ|aGpR%j6zdHWJeD1lX|E~Gqexs02Repv?`xNR4ksLxh-d#yc-!BI`Eh>_N!GXz(!N*YkMBs?ciUgbdPDp^T(>G;)SvXx zwLI1ERe!5=b*8JvSM_%-N2_=~Y6#0 zy3_8oeuwVCI_4;A&ou9#_D%hkYI~^fvi}ah?>P_m+SEe(S#O*tuin3_@r&YDc~U#1 zc2lmtTfZ@LPfWLZUwHLj&9D8&x)%id^L#nYLpiNEOE1Syo#T(f+sg?qN^Vcs%v3q#NQa?Zv*ZPfRqpzjA@Pkg6w zy!ZEZQ|DQElDw85vAr<)<2;q(w{%20g(sfv(69f&^hEu2h3~3;Qax(zV;b}k%Z1r* zt)YMI=QMd*(-q}q{8leuKbYUoto~v9_^N!Y-pPYJv3}FOa;q1jTpDk6&8MtK%4_M) z!@RfBALBdF+f$U^$|v^Y_9zRcILPR+&#{GEcHW~F%2VC# z>c@W_?%~(Vps`S#M(%s+Zzw%x3q(N_)6F;M?HQJMZ|INm^#vku7ykh#R%47Ig zFIMF#)5mpo)eEYhSgu&_sNE}vQ+bQwEuFFc5`8OtD}7tK>y31aPb+$+m*r+>=#}-e z=_$(9DqJ<5az4fIs$Yyx6(93Y>kdX2>-VZ(>9P7m`il8gl}q&6KV))7d;6g2tvuEn z`|#Vz)3v?HZraP=-F#DiKU8P?82f8#H%y*bj@rrJN}pCAnf#ph!+Xb7Swebbm#?&zHkn{So;stY7lk`Wp0fXE{B> z+k7|fKikpty0GgavcFdIh5BA~tz6(9vM_(GcH8E^;<}5*d0MBc&eLgq&fNC(8>YvK#M9 z(K%tcT7T936h*&ZCs@MzQ$;-M_p(28V;;8hb?x1BV|`Hdw@c6e_3s)_sGgtuis@DP zWp3((xArr(x5CSnKE+q-Ps(rY5B&8pme2AptZVhR+7aAS8}{dEoNF%bGd$nY)9RjP z`ySVq>>lY_xJO$3%IFUF_o&2pO^&D^`Byr_%9H%2ADp8s;XCu$<|)&Q!mSbRcfG^A zqQ|?@!EgGG{al5!{%NF_zZJdsDZKLQXFa-CFDT#t)7(*SvaLznv16>BP`c!vdpOgV zHtx$&J)?F>?Uv2cW(~S|A)K8%>WmkE(aEp#2vt4lyW*E$uF|1#pynMk?<{^QZ=#c{ zey_@@_{!CHrPKB=#CwD^Pi=H@KSMQ~?ou9AvGgMFOyh+*LdR@`_K-FMQteCQoA>Bsbnb-4Ad zzaTxA^FM2Rmpzr~WM^9E!#yn6r^WWA&r~Z9qOaNu*D*-P^&^%CtMzMJ zIn5vC)c3L*?YtFU`NMppJoeso3|IE!{MBVlXYT&=ZKMCw=jiG$apsTZMe<4?(r4N2 zTuwz_)t}*GeC_N<@mJ}}@yGlWo#GXp=6}si-Q+1|Kk}{wfC=-!E!Cqx80N6<^tYVtt}~lAg^U?XtOjNBfd}zx$HelesZ}tv;*z({Qd) zc)4*OZn<5E->rY6{eIEzTGexl)?O(dxsto=FYbF$|4aE%me;~@p3T0;bSWR?%6`l3 zRHU!+wRh6v_nu*2V-Q}oG z%aQWc%3&-&>Tg*&(fl9AiJ@Os?GH#VdKa&i-77x1&F!g`+^SEjuIyIt??!u5{>oK) zWC!yvEw?k~$2kR$mmB#DuX;e~FgJC7f6VMs^=kRM_mz3+E`74(BNJ zU9Rj^uJzlZeH8V|{*%HPUUXGg*cs_(LD{jND4_w&vx*C)mD+SPcxN@xD~exCZXHjkQyc~q4@ z+<)cw@mKw+yMHB%djYEV z1k62_<*!V~{Tk}uSJQLjm25|2`)&T#?R540rSzonukK@8?@p^%bPiU2)f1wZt9ASj z$Bp$u?>pH}V4q=-w>bXkYFt#k$4q+t`i-Vf(_?(Ex?F#u9t`)Db&p>1%8mJ>c;&X@ zr+)DRv#sAW=W5HJs$8lcTJb5W+&rF=sVdpMmzDh3p zo`v(G@f~-CtJ;I{(YP^d%#$DK=kc&_=TXY7{c(wV`Cpa}@zeRwvOmhDbTtnb>Fhh+ zOTm4SjBmr!O|MnH>i1Of>M!i!&!4640PjZrc3*4iHuLwiM7+rdygx6Ye29MKyW*?r zue)~hUc+s!| zM||Wqm#6#ubic@=@=^Nje$l9R=}+-UZk1EHiyFW9UiKra=Pp{o%IjAC-VZys$8!90 ze{Trxsrw=6YT>+mT%S~bv$;IcUTj{n`+Amqa+~w-F25?BLNzGeSPpY$)cs(<;{nPqm$ zdlosb^_>ysw|%6z?=kEr{l34qpz6o{kAYt4c(3^(ITw}BqK20ouUu?;*f8vu(KxH> zH+;;mPk+(M|DSu(g?{{g?D*Z{Rrk zll{uy%57c`L^(`OqyhIivOIOqAKM+HN7?e>bN7p@tz0Nx!)F1Ha~X@X9M;_SVf@vK z&iHnwYZag2!P@_+{cYXushu!;jq+Q6qUPT8`}iUs(HTAu_rlZ~daLpioz+{StGiLS z*O2F!|N3#d?fI{C8TDBY@pQO{e0%8=SqR^mkEJ6I=}`QMGy6)N%Bjg+Pz+`y))e$0rMV6>Ph`U^lgTz z@rm2af0v6jw*_X;>L)3lR_@Qj`3}=d;>@4A-~P(tJ*Y`5s@^pJqjiYqeg7lggWerK z`?b0srby3n#y`#{nu~IZKi*?+F6tlrF}(dHt{9$n*vfyv&&^&Guk20xl+8_@=2?Y* zCzK=Oo8TT?@`-e<{0gt{^4q>N?N{sUZg!RNS9@Ib|I_OR_c{i5>qn@o)a|#VmCy1$ zvx)n{wU%zV`Yw0VD=og2YDQ;n>I|Q_Q~bUe+$$dV=$wCJKKlfVzq@{gw|UmAv3_9r zfp=NL{e(K7|BF3LK9v{AZEn2hRQ}I|{Xb=YJnyb}m>=99Fz^D?+xv}IJt4mDm!IjP z{gWT%C;tHha(5B#e`h&SdMy2kYe(PV`PCcYzVlbJ1G${fWPED(zUJ>~!ame-MrY>; zQ}_Eb>5u#FZJhw`y!0?Sv!B#`%HP|cHOjyAQ^k+G#_Xz!SH5-^zf!25s`Qe(IUe=M zTdZL^%WHU@pX~fy=PK1sD<7mU=|S~S+28tH!N8^qOPQP-9$9o#|4t9v9mD_k`3L!PM^XOoev&$j z{!2z#`BnOqU#{&F|gf5-a-6}mHgzcX`XI@nv7=lFhT z$JHJvpANs1d{g)MM3dM2cvn35tL}sQT0JT|5&i4_9gW19`{CvLn+KQmyr}sieJP(_ z{dk$b?qS#Ws{gIfztHz-6}$ML@>%&iI^?(VS>^JSTdn*t|7fRw-__Ek{k4~c^S1Zn z+z-E7|Euca9#>zEGk5S##z+0Md_4=Nc;yZ_f_Rkga1VMr|GU#E7j7I`i{aw@-}{AE zyV8}*{l7yS#)lMMbl9OzU0q_0zbeTnysZeuz{FMUJL zVZQbRUyrAb=~usn{G?C0#t-kFrk1bm{Gyu|?6sOs`n%FYQ7+0;_Q(E=qp^UY}|XTaW3s`VblFy;^)35`&)SXmcH7_DLUD)%AwA&mG}MO-uh5p?OhytPG{pHU*7%rw(Kv}7lnGOGdF+cU*BVT^j-2;Jdv(@e%d?#I>#%%)p%sba$DCk&FYJ4dZSWImoA z`h^;2d)LSJw6ZZQRnYk z?-;!@mTI{fNu_cmeZlfxo`DbH9prM3_!HQ~rH=g5Nt%tVzuK850!+tl+BbNP`pFGg=yE#60 zC-=1P)BSrUcwaKSYtna1!yh!P{9XNvDxJOei~hiKmcCYQb2;!X-JeZ=y}X;az2Bgn z;oO$Dx6DbNGCtCoJe}#3F3H`>eS1}toAhj7Zkf#d!MwwGldIl>ec{sYaxjoM`w-}D~r1rCqo@(FoA?8XR)!$_o?|FuK^i@N=(yPMRdu_N6KI|i( zc7vtE{CJNh^!M7)E1w@f!_s$tSbte_Px^EBOmDh1cVkYs?#>VICF`7?##Q!R`vc7gZMoQ zcAq=hz4lj>-PH9v$nImm9Q-Ip*L-U3{EN!*AF_dk+jj@k-wxizK7*1U{dQk|bN9<& zpZaci^k*t|`+nQsmcD<2_ep~N&0EXlZfC#m)!vo9O}!rQj*2hOdC)^Gl<&Ixd^k7s zLCNvM(0@_B>K(?jL%qWHika_nMR&wl!^>~$rqMpghvjZsX!mt4oe4A9^bnB>HLt|L91`l@Qx$)^B_K!JH7j;`shrL$9W(xPwMUr>3YQP7l`s!+c9gu zbgzA+vw4{4w{V@?JGC3qkNG>(F&_5!S?)N#s`8f{;-~#QvIjfYn1p(`bG@s3BdYau zD}3{EmAhO0{USB@{UXVi)Mi=`VmOt?vYjZw{YlT<4A-6eQl%w7E zg-v%WdgX`ijgVWl|38HOSQ(FVbfFx`Eq~9P!j->w4mV_9)BCO4TX_?`jr(GG6Ml~! ztlripSinRQ)5@^xTLcl)RXCMT(a9BF z^~u7v>mSy*@c*}Xq<`7FT+N^89IEi;bry^p{rp>;7i;H#uYBHXxOVbXzrWXb6i#lH zZ#%#4RnocfR{3)LvQ}SP{Sog?P(Ep%Q~9TTsFF)=J9*lDf4}&&il^h-R?l@O9`Pqi&#Ygq+`|Vf!9~9pYiofo~?0+5YF>^2aerDd-&)MDY zcHeL3@U6;&^-JP?=juni`vtatn16lM%13j2?soHZIM1;$$YC)reB9(;^>nkhg~eOE zu|Ko0a!5{-8}A|MtHuYSHQb)Uc1?8fNvj$5#w*ZY#Lvt4O@zRFMdtApJt9aXw^@mABL`d|Hcy$?_= zKdtP&s=rqLcKNORY!y#;!>b&~Z6!|?-(CLQrIY+iJ&|9|@RCfrMj`(#+( zk3Ws^=HWh-S}2$Gz`rAu%N}k`>E>>gVeB0}rt8MptXp<5jvcpPCzcjn$`By5{`q4SL(}5%0fRDXiZ=BXfg3%W{r(_m`Br=IS?_{3G5mx+R`BzxG{BeZ%nfeqfwGlpSjxQ1isI?`HVC zaW9niTd3b^^$ObG`>cPr|JfE_HJ=_#i0|C)8Xo)bTeQoPORm+^v7XX>tj+Ox;~Z$$ z^;hD${vPW$)eCB;@9JUoZ1earpZ0*I+sbzq?maHZ<@>kl=Vb1UPn!Oe-ga(t{_W%a zp!ljDHMz1-U*#d)wMKsE9z5k=HQZ~jz+7N=XZ@9KOwVVQF+2NX_BVtERJRmx_NMA1-xozsmSBw^QIh&--g`{oNRE-Ti5+a=rRve@{r}PDbpM^X0(j zR4-TOc66WD$UkxY|7P@6w<>Sd->SV5{`QepzUk+<`|n|Yeb@Hgef!t^x9Kqp?RV~8 zzR}9T+1}n0CwFzfE|P}#WHR?f-<~CI^6QrVzx1;5@%!Fp_m6ltb#|W%+KVwpXYUDV z-WKR2F^|S{7c*}Vc)KW%lx@j+PV1? zciI(}U)6b(LqmUIZ0Ijk{hBvZIr#FY&0bo?WBCyE@^W~e?Df!p8G4JQS^uRfO7R^geRv=F{I zUA*7n2R=TmTZj5~l~CW_8|v--y}$kU*L^;v?oA&qb5n!9w_9NPX_c?d@p+?szqfpk z`LBGH{*_PF{8c`mGtun0;V(mw6#e*0GVOMSW2 z{Y~iSO|g8aw%b*HWq&+}x3GBCGuD66dq=oWB(y`;Uywg*)Wh~Yb=vQ6br`oDvA^Yu z;ZtXLoQv`JJhXGz#~Spg{)pnS`^+SV>eCp%)pvR5XD04nK3;u~{&M@2xG|yrR{gxw zYF2+39{cBfy_mb}uA*Jk+zlHtAL?$JccUB@4)36Pet8Io{dj@@U4dTdS9}|ev-l*J zea{>1h0-s5S~%S26!t~xyZCkO&sv6iU>&AQ{R;InJGQqk6Eyj+!>!*Bfm|5Sf>yDF4>{c;XToS zuhNNsmF~7Bt=+P6kh+`0JD^p*(!2P|UoAh1zt0a$e_MGs%JqKX6_4bRU-GnbO%Ji( z(2l8nOzbaN|EcC4I@RoE=?Bg2E`80@r><`Zx5Jk$ zUE{w*H*-(=ei`=v1peKX+xng8=Z5~!Z%!h=IRCT4OtWhnuc>~*xdhywM*A0jzk5uM zH~tB96TH@~`i1%8f6XTy+QqQ%N#E6O7+=-nxikK?#y$SkcoklFjl0_E!R9;h?nBV) z<_BAP=Y?^@*L*)KbGLrZ(!2c^tX_ZXPD`)Fhx-cs_tYI6=&JFG|2Q8maYMYmFy9ya z&E2#SulN}sygMH9Tl2MYO`g=ruX?JTD?7Z&^F_NB`uPJ+V>+?l+}l;%4e;|<9d3Q^ zChoqVk3V=9{g$9V%{NxRE1tJ}JB9l|{5){(Uh@2Ffq%Wh|EO~qKkgT}pKjvJkNbXo z{|xsN^|pN2+pibq?h|X8yt}SZrWYT}Kk-SO`LU17=Y!;k{qj?Nx^SPgPnW*e+^ybU z58*n3+&vm{E1lg7kNvZuzu7L_d8K$0_wc`Hm)I-o^CN4-FFP^mfKu5BCIixJi4P9?XsR@}C~|>#3Z{wSErXm@ z`}QDrU-53@B$wS!h4neVA4KQyF+bz)`Ksb^Z?~VfkK=CJkDj^OJBSYD?{r_@bZ;2= zd3v>{wFceu{`_7V+S$y#;?Ei8ZnZ;Mf7Tl9`*l4n9Y6MNYdTA3>MY%OXCkE6(w(@2 zCR@F&bZ>pV)z`-lGS~VWNstHkJNx*O#=aw)*O9!~#~S1}zOfzpnIAtSjq!!(G)`&d z-+2e7Q}cnj+uGlYP;*CzaiHcEt90M?-)n(B%2lN^eu;ZvRntRvUCC?ws{Ethx_j-T+uNqG)zwlKz?w`~>Yg->^a#%c(Ui&(#?l*5}E|>MEw0|Ye zC+OZ)?Q79FE{!+!9-GdUSU)=UQx(qKG}LpbKTolJc$#l$6@Sh@nkN4d|ea-rw|8!sB$^DJb!pg1r=+A*4>oe)GYkAts zq5h}2sr!XLzn8gFe0!vL;yR|a1KMxVS-({|b$^HLKhHvYmb*NxD>eTfXh?yUw4~Z4%bUv#>s{beUXu zKgs7q>edbUUdG4oEHBiH`WLi6+TCz}FF@3%)_2?GqwK$({IYY&DLI5U7xyl%X?9!n zSIfr+VcfQ``qz9#D|y>}?>fHj>#xxWNFI*#>w;(Ys)pR@K${UP~PKGiQQyQ$mjLaQ&U>&j)i*q_;YN0uL)zxMOi zxwG}RTCfAXdn@{?tN3ugOIWY0+KKGviLf4WQn;6Sh<9;*y@g--VDHmqL7rI7_1)Sn z)LY@c9pTRn^2l#;>AgFQM|`?bU-@uoCzmmOPxR*nQ}{p9j8EJvzqWqJ&VGJ1bzA!R3#_Asbc$Z_ORk@W@pp57Ebl*sy|e$R{OIs}m9L%g z*L~gSW$y|nJxssY>|A)+!9^aQJJWj{*Bd@-;FaHFao-x{s=Ax`^Ny)oEA%7fimu&v z(V3gNsS}tU%&UcQg2MkH=tX|TBe%>a$|?G4c=Km&wKFYURXXu2<1@E0Y?OKsUh&IS zxV@GzJ5jpi*Emi0VLjsGkNa%pzjHZ@r|ic#`>)1V_&@vlJ9GD*VRj%px9^GDBIMgG z?=W2I?)CG6SttC=3SQ~Bx<)y0&$1u4;QXb-n;HT9_D#8p0n?WBh0(E zl51h{I@hD|p3b$2kJ=0Q&BgoXBTc{h{#>XpZx8ilm0onhpB>hTHSc8WE{Uso`%0bR zli;R}d)LZ%eQ)I!<^%k_7TQN3SL>cwKMDH>)W5d*IP~XxGhb_ApGD{X`^CSve5cEE z=NJ3?T~ha|zvmzC0{MGoa<`RtvHs@km%6*`=T^RqF4nh?+(~|!+tJtex!cdXHFx(l z)OX!oaRa}1g#JMfchI$#52|->4fgnbZ;#j?6vk`%uJl>B+$dMh^LLmZ-In<;Kjz6p{anUJ`!YQC<@x$GZ_vv=%HKQJi`DwHxnA0*Q{im>H*qW9 zZ2GHvJz|~;X<~k89o6)qb>xF68u7Mu-It@fTX&4fwQ%$uZZp5W-ot$X_fj)m+PA88 z4&}G}FNFU1Ri7@>r@=08UvLY2RsW(>Ig)Ghwz1sF{+i=sc~v_lSLHqp>TqlY;gkvH12^7q&-YW!XOe$^|qAFQW(7w=E| z_r}|W!#evxrk~M%e?sbBJKgeG?Th+vYKOJYTl=TKpL^%}QSD%v4(qtvT0T|BzqZdd zo^Mci-OnyNkzcODUA~v)x5cOX;v>I-z8{QxBg4Ku?K>{};tw^?lqwTKz72mL08l9Mhk=bNqTo=FSf5 z9$Ig=^QLh<-uyAWRk{FPnuraolmWvXRZ2mFNn#9{S!gHvLELc{CU14q(gKO zul~96L;0iqTCM!Q8fy6=yVCnm^1olM?h&was;ZZ8J}&Hk>H0h7zx_O8-EIGZ$t!wG zFZPr9`Qkj(cQ}7m;oCJG&e?eW9S#2PSGpILkCg}P^BP&s7xA(BDb6RTzACzGY0C78 ztA=}VXR}|qnqQss3yW8H)q_^gVSOx|o4CQ(do{O>_t)LbP!I0t{XN`|y}zg1&HH<~ zJH5ZR8|VFf+@apz*L8S*KX;_}_jmohe}FsQ`xkRddH>?>Wba?XE$97lJXn>>&Y^U! zcU4bnKacct;TEO`xx#nX)x8nbaxMJRe%>Wu!TXsgI7v{&mwk_UZWkdFCz%^UmV8uI~rn-qz3`c-r4* zTXR?V{&l^3An){d^=hoc_?{>JC{r%%T+*{u5>FVF3o_e`n z-tF!BdAE;S+`E0o=Z$D4mhhzOX`QQ8gomTsHB){%W);_1wQhy z&m=zDPqd8R=ass>SG9VIXd#_^s{TEZozP zJ6l((xr2PYT6cf;{5!(^9X;IF{kguL?x?VTV$LD7Q`~Fe{h7OCSNd~zmv?J!LO9=| zcvVk~K^WEp)}O+8qi_#Mcj?;cL-nt{_YmXJyPeg1`bwBTlDym8Z{_B+S#)t;z^5k( z?}X!Bf(l;aFNL#uDhqUZBfRL;uR3;FiznIH;`zidy1DByif+xF=lyl}(hBr%04)k|CpPDm1^}wei@af@hn?t?#baVc|^3^Nw?H%~`argQCj(y$Z z4>F#9Zc~2_rN6tt&wmYY=lb^_wQo0ZcZB)oQ~mf2x^=hlt8_cuZcC89hr8ec`g^+9efj9+9`bJDp4I)LUf$IG z`?pqa7(eWb_WV1y|E=2dcc(KR^sD{69PUld7=PyO^lt7Rm`p$RVfuHOW4e^Dw}tr; zvyaqG_V4jz?ry)&6X$RJd4ihj{~O9#cXJ-6+u<(qZVxxlyFJ7DS}!+oHoy0Fzq)|& z_Hm=e)8E%^q)<3URY+LKT(ncg$Eq~B+m zyE~q-cw6bS6<+b)zmMr#bi&K8cZf7DGQ7^!L;sc5s zcJz`j@#i6;oqo^P4=5+zUNZO0jh24fCziUy{XG>~uyf3(2RpBZvvLr>TYB4YLVl6i)XWebVo9YE562%k+=;&wagy_iI9a2>%VgZ!qdh-xaUis{XBg zz`X4pMSD)&XMMjkal1cAy!>&#t{oqpD@?v<`6O5AvUULPHGF~J3-=9F>fPq?v~JI| zzen*bs{1S7e^1>!f36t!!<;~U*en9^ccw@B`DU z^l$v)e7e@zFPLp~Dwl&o{{GUpAJG4BmOHFp`T5VpHOJ@fjL@!h{k`T!zesuOZY}S2 zxYPC`{~qqb-RO4TE?enW>8yr<3& zn?Jsrp!&OvM>`2yVm@2?(#Clk<=4Tln>}v7tI@f|>86c$h4u>PAa!14z@N(W>Mv{F z+2*_RFb`e}_i!Yxd@fk;`*z0LJ6E||XCH_Gxy#`amweOYv-^oM_rzWF3tTT>W?yA<~9oZ>#OvJ z&l~GW77pj7f__c!@xFVdPx35%Ak!c3!#I6)%8@tj$Je=DMO-IjjMy@20rccPn?o(TLD*C##QorT{d{4P$< z!tZSO&xZeO4<82iwDdgCp9lZ>?il>&PD!T%o(gy>;0r*10pN?_UJQ2{e*c5tcksIm zzbo*&65p=HT}T{Equl3kt*t6vV>70Igg>7f4};{6_IuR)k=5!bbVuLI5X_FX_^~pM(26elOtnB7QI7_cDI3;5QGySMmERey`#8 zH~jvN-|P6z$L}Bby@B69@p}`$xA1!#zklJk0Ka$e`!{~?;^(qc@&vyWzYM<|zZ!mZ z{5tUKfnQJjdg0d_zkc}j$8P|Bi{ZC8eoNpt5WhkAEs5V!_$`g!VEl&Qw+wzm@mm(Z zkKwl*e#7uvAzQll%Gs^is(@F+Z*}}Wj^7CU*1&H~{MN#6ZTvos-!|Fc+BVr}{I;xZ zo4wJoZT2>PgjemmExv7wZ@Xs8;zxJO+HTox9lK>idhC{c3_tpJ>AM@g?}qQYXD8q{ zFaH|&o`~N`_+6fTr{^`>ly_FBK&vibdfn7!F=PWHR{ z-0YxUe+2xO?1g^MWefT}k8dv`J-zem@Y}N1JHG+$yu5dQYt|RIzQFYbt}k$Xf$NvQ z-O&%Y{`tMV`{yfk^v~bu)gS%=IrNI(68H_oZxFr@!uLV=J_z3j<;wzI9>39m2jjO= z$C9913csa6vovUy&fkVR5B^)T!TIC82P3Y*zz@!!=shI=6MoO(_Y!_v)`sMJb_~h4 z$M16;%Yw&p`K!H_L)hgIb{PCCApR8){|ex}0_ax+?-lWVMSLHQ?4<1+&aLm1Kc{mtqa_`z^x11 zy1=aq+b^MZ|l7taO(j#GC!!#NZ>~1hrpeej|6W0{7Zc{K)f60NA=k_KQ`Yu zAKbBVejMPQwavhHGth4azMFx5GtiF)ZZvSCfg26nXyCR0ZVTYH0B#H5wg7HR;I;&A zOW?KyZcE^{0&XkdwgPS|;I;y8N8ok@Zb#sD1a3#*#sW7MxUs;E1#T>Gy8^c>aJvGx zD{#94w>xmV1GhVHy92j7a1--;7MqyQUF?hb!}!fz>`VE5_|0AH%lRDq<}P*^euv|C z1b#>2HwnL^Kywt_qd{{t++)Dw7`P|k_cieO8r;+JCHtO+xK7Vk=zBWcEA!J9pOMdY zKg?&Ox98WSzs|Q>;MBt&H?Tm;LZW=9N^9Y?q{`2 z7yEh5Ep-=ucjI?o?cT-i1I>N42jI?zJ1Duows`;h0pAaJsro0DSgQVxTN>`t-rW@L zZ1@Ky%h!{1IN(k2`&9jxy+-3Vp?={K6Y772d+8Df*IyWXX#I*MCe~jY{H6N*!C$Vw zIry;pg29K^|Fpyr^?b;b`miCV)VCXQUVVds7u7#8@Z$QW1HTR2G~jNkA2sl1{O*AN zj{1H>e*)Yq_|1d=HMmQ53>&gk$9_YXf;$-Q(2k=9E(>@C{8sGPZpcazSU(v0|obBDrJ*dqXwX0Z`?3kz;f{J!)Xth)tx?*Ma}_uNln z-Wl$m_+5whIj;!tPS~@+X}9tC9fRilMz{y#_v@!I4uyL-e$SqZyDkE}?Y)V+7w~HM z9ld|z9)!zyH^f_`PryA1zkZlM_#@oY@nagF3-|-DZp0-F(ywwk_P4=37r!rGXfS11 z_4&-b4R>q&w#0s^fr)dJpM0PScRAoQG0x#s5@{~M+;|7NvDX%8ZZ5z-4=|6|4+MPX z-?8rs@FN8pUOy@RTv{MJxx=}kp!pou+Ajgz6ZpM5GWTr2zW_eHdN?;6G{5ePJ5&NJ zJ`5}Pq`;HYzas+v#0G~G#XA1&M+14-MPXTYz|L$vv8z1m<03Qx` z7vK+m5dC(*KMFE1EsTq{`Xk_xo$lY4;_N?ggwMqoMDRBsb`AK)1^B#&BK}(i{4E7| z05X<*6z|Uv*R|kZ{~hK71HAa2cv}?3q_u?uI=pExfCZdZ3&qWvM$J^vrj{r-rZx+!E8i(Wy8; zALuWCGxA9=M^5<}b|_%hZ-i;9GvQv2AItT%fv3t8(@XfqfM;0gp$JnR(vW`7&8@DZ z%m+d?>X3NC(%X`6CGMnvCpCreVcN#{f^1WP zSGi!`(awAHgT6t-dV9?PABcS&v`OOce=Tjm!~Paw#=B9VKOgJTq@MOsPP~6G8bbov=gq>S} zpDMu57T{L^izi|6WFGCkEbbnLJHJ3fSTqX&vt6bgjt4w4w0-0wJ?D_S2rDkqKl38? z0t~Qr@QvSFdEXlNC1HT9X9#bFgcCj;zt?`2xdDqAO#Lhw;Bzo9yDZ>yL9*pW8F?k%1_dqQ5jfkrBHR}PAExV(0PhF- zw*cRP`Qw8D6aO;$4@U)F!6-NljTJ`hXOB{G~!QK_`wC4R|Cv;`R=7)M*+ScFt@e)mU)p&70DY2P zfQe^Ya0cK>iP1CdlL0F&gq4;l1w3Kl&nn;v3s3!s5A`N^Y5`AJ^wSD>!op84;0X)Q zx`JsujP(Q3DI1_|?|&8AM0_WF-3`z=>~jXfihd^G5$ihN?#v2!<~8vHu>a%DAqLOb z$+-o9Nh2E|jgM;?)R_UM-sS+7Y$FQva|`&V0{yR`bHO))4{4+y@*#i9^K1cr1+e%Lk+5VQTHr}oaZL_k zeg7YL@h6S=!>m0_od~8*cpQ{8)a~#BAL>MUAT0Su73k4TaSxyaved^+hmwCxAuhp; zYr8_&>4ms<33%qkxI$RL3_GC^c3L6qMBpXoB*4-MVd;M==$S_5BVpwu!zx`Q*pio)YlX?OA|XZ!>?V0+!5#CBrnplAo~TC#*6u1M)ZI z1YWX{#-|bSlBe=wN+G?|0}bVwQ3y*sWm^pWG2$f~VeuiX^qy7VITLv4Y8GHG1HKFP zWz5GLs)VWmJUfT9TJuf_e7faJ|gjR4y-4oH^S^Q zKZg44DbTauOFa<&-W@h>B8_Bz7I=jvEO`hY@R;?Z2un7?l5Hr`sIY{^^A*qtPgwZ* z1w3Kl7X&=*Suk}-Sb8QbdfJTgh_LX}3VO&3b$g!xZ?Y2VBEaG~6tKb)FP_9phun@K z9TJuf$#WH~A^#aX2~RxGx#t5s_%QTE0<63vjq+{;VCjdjWFU>o#mE8;VbPov@Efii z`<(1YjVjQL2{hE_c7jokh*v%mmi_M%XsC12OJ)q+{TO8VRSYlr#|3)wCoI{>NAQFK z4PoJFx9pp30-mH-UNByzePRg9GIDx=4+cH^mK-yxKY2U)lLH|G`<7>8zwmcJ!!d~B z8i#Kh&+Y=4I%k_gI6d3S1;+)VpA_Pv9taCByJdPO1F!z@?*cu?q|_Dr_Uo)>FykVg z{YH+1b^@OEDW2+kkY);gTo2}W_AJ2aqY{>!O#8^Stj|0Zc=BhxHw`fNW~>O=2=m?* z&RG%W`~zhsOnSo80rPAqKrgcTR*#fPx?JPTNSUI8pVgvE!j z_z;%Nge5a!$xNP#i?HIF4_I+60IawOD=xx{i}d0{SbXw4@*yl5!lD^ipcx8SaS>Kr zgcTR*#itKo&ReduI_f>Z;yJv4CoKGk0-mt&qW~+tV*pDA!jgfoWFWm{7ztQ15Ejo} z0E_21z~V_*JPC^@>BVz9z~V_*JSPAaPr{-nESiZ0nn{2aFJZ+?Sn-lxd|IRmhG&IBx;gvFDvcoJ4w zU|8{=4p{sNi~lUZs+aBoEdGSWpRo877JtGjYlKzSJbaXMkBvaP0Q~5$I`^9ZA9adz zPXcDVl3@;DrExA`$v{{#5S9#tB?Do}Kv*((ILJU)G7y#wj92<0EP0*+EP0*S7`^x{KUd|m-8KJx*K4`J~kEIx#lF2YI|`G`MZ@m~N~{PSAmPgwj3i$7uUXISwh zES`NpBc1~ROJ>62Nmx7yizma1Ct>j%3Rpac0~Sxh;z?LM35zGgiYH<5906E7M*{ zSqbSa&`?)e!y>G?Wpw!**9R|N2mMs=p`1)hAHd>2Bk-g=c|rbhAzi&8&n^Z0Q-PlN zxdj>6#~^>o#(stP&kTGR?~DSUSo99J%;yhc2O1I+bk!JONl9Ax9zjj-k) z2&=3SRvBC#d^mr5{f3w)2TXdxq+y^BS>__!FEIr)T5~)Lu*UxD zfM#{9zjJM9HKaxJ0OYg!42G!-p-+uso+D{k1Go>X*7;z{t7-E{7KI-?DRm-Hf082*&AWa zGZ5CC65$I!4!ivX>RZ6l`7FTF`8|LY*I7YM+5lnM z0p1BbwYI3XkMx`y6d%FF-yHBvJNawA=oRpk{DfsE^Fv$=OPFPiX(6n=<<6E_v{l0WV3(jdcTXGZ$n zAdlqV=w6F=0n#q}@#QG&Wg>jV1nhZV%*xly%W$3wJTC`c`XSBTyWpJ~;O9dg>6v(y zyVC(L@k7%ab*OrP@bdeaY^wo2Zx!Uxr>uTBagW5U2AFA)K5quhbnO8=;fwAxo}~H1 z9+}%8_#Xj&^e)4bhHLtw-w!&U9(XP6$(e-#4f`xBjEJpKmnEtcx@` z@GB3uc`d@r0j_OsG_uLbpqEV&mQBirS>Fm~ecK0oD8o5p&~FJaWguSi5U>6xVf8;r zqr4jmSaW5=3viAyqcqMzIz>-dbp>J7^UoIWNM3`Uu;>Yk9@*cJld$*`7R`(Td{2Rf zuy_&{J!KXj!lD_0bTKW@L9ZhV@TdYjrT}kOfOiRcV1M8(*arC!9v5f?s~#X;bp>JB zHeuBpJ3)?3C)!?-T?%~IHsup-&36Luns1yKXr9A&mKVt|seqpWnS`HQz_YI|{FDOz ztO7i>05e|g!J8KFw5#a_ni+s)GcybLSq1z(1^k=>er^Fj9%`6Y;)_OuTPL z^bG(%($n%~u^x;O7vI{W0a;&;ovV0Ul9+bI>b|gq6mT1)5O>cuWD_t^n^+fX5Z!2?cm^!L9@| zy(0?viGiN|4dF>6JnJsvRR>N2y>v@hbs*_gmI6=UMR2bL`wTZ? zU&Q9SV}B0dhxSR_j(|r8-O@Hl&;3ZWAJVIA(iWwE=A-1C0=(oTEIHXH5zScz8p5Kv z2Yl2&oC-YoGq0xwnD$0kbvR+Ak$M*Y>A*_{!s0&zFnLnvGXqSX#FHocrLzK_<(f3A zqew&kUm1t~5@7KsEdEmqGR!H^5EjjNr01+q9?4%a&n?hX2HO7-pEG%Oe#F*#W+ANl zle3UV3j0(cEMdh(o`NZxY=gQIJPkCgpSgdD^{4QJ#sAp?f5PIqaj5fYCu)DGPxiNI zliXuD7<||-)qWn1ZU3~d)kSNd-*wA=u)R>9%mKVL;AOG5hdc?d_7L7erL7j~9M)q` zY?J!ES9=Eh-w<|rg!v`*6tRDGIcOd|DD`_s4=;q}*o`(Y7T>w=9mYp^&0QjVVu7AzS@b&>=ozo@+@n4k{^icceHWl1e9AeAJ2k)@ z7oT5%zXNzo63fK`}&M_y~-xjaycq{#&tSi?*G4k0_y5OLp))XQ^M*45LQ_p z8t7Rz35%Yv=n0E{cmYqCwz|)Os51epY>ou1vO`#9ifLz?cmn7-|L|FyIsGJLW?0!a zc`}V>fQB&V!7c#II&j%(uus5a0u5y*ESU*Q&g}rJ-65=YXO{w=a1pQh&v6AB!lEHu zq|torgaSQb(GwOu;Uc}}ZzmSQ5>{Bk3QJgF2^Yg^?spRKN-tsYAuK+G#fPx?5H9i= z9M&C(*SZ5?tvgHw%sirv5tjZ5OaIJk((DJDo)+-zOVGC8c^UUagMjdp=i#l*0FOo) zWIacE^-lc**{_J)tL#H@sj@p*oo>u&WWimorQ0*Pr|Y{@>f5Ze2TE_e-7|U zFJZO&gq8NWfrjlSVai5%$X|Q)7eji<$M^k!*M4}?C@#Wk3ka)!PFQUa%Yy25$}HJ( z6Yh6^PHR1UM zc@`94;$<7e3npGVBwp}P$Rimjo8XZJm~)lFPXsLcCoKD?%%aILm=WA3z)Tlm%`Xv_ zY=k8b!wNqTui`yb9+HIA3>jEy|67bT`6N%;hQ$5$p9_3s+vF)dlc(^6g`Wag@e(fLMNj?c9Mf3^dcvY7 zEPCoeFl}ro#zf4=@sN2u?EkCB6?lNze51JRM=Bg)q}XKC6MA^6RayksU`F!73)c)^z=4IHaZI~8mC1^QhIF!7=%th9^+EE}ExSn?B={OZFn zeVtC&eR|*;oXkK`QiYNon&!oZs8MWVO==XGd!1#<4^yOtuqhrv#9#_ zlZ7@R>5^tG25lv>Mx_!JUZR3V1dZBikfKqk1}(2qK%)W%X(b|ki3%8`g@`Q%1qo0j zBGo8cQP7AKgMx(Bh*XLKMmDSdKKIOgnz_7wfApF=r)SP{=FC3N@(n(~rz$W0c!(KB?h>0Ooom5geoax_B_5C&w`b%l(s~AVY+?He+fVq7&&PdPN75%& z?7!S!IwiM#*md2N=~Jg?>3b2szeu{7{5;9=;U^dCTv>efFXXev1K9fxc%$B(zePIh zlK!8?ocY^_p3Dby#!f6Po|6u8`*W@2w@A*0aVE>#o8@J1^4E8k6bDO(`>Hc~2b1{= z9os>tVTXPzK{{Jx6P+W_*ZjqKR~Ib#^E#9KxVTSwy)Ww*yS=TD&gH+-x6h=rO^lrS zy)WbKi95cf`#u^khIBT?`&^Y`zk6FFCNFVA?sp_%zk3TaZagbHOOrm=+Are)`R3>I zVQezi4Q6uK@}W!)TYju;az=X0x7DY_w{0say2V`A&m^26_W9(gNj@l@7gS!KA*@aE z^^%{LF>^UO$Tx|(?uYC3eTGbaZN^(NzB%JNGTtU`dR*UvkWKi(Uu)bF+c(}Pt(4sF z6r*Dwko(@8b$HkEkyIA^yf4##B;)NF`&u;{nOou>`PGR}YmR%U64eLgrQA#Pk3IF~ zOVl=!oHkICnEIvu(1({MW?WjKyvT2o{bgdl-!f;DII}aXIz8vY(qhr2>N4UliCe_z zAE58XmnCK||61`#Y6DzrRd!u-nB$WCbJDl`i{eq`b=!mS4d2HyIc)iOCWkFwoB2;& zd_iN*|9&Tyo%dEw61(i5PjdH{rOJ!W7c>1Yi?_M5034M^Jn@dKKotf4f2O?0sUKcrZW4m%R8OPVas=9a@g{lWs~=> zuN~3(iTJ1=lodZpe9)n##ckqklB0jU+SMK651gxKJTB8XCp+XFPVBtM$vZ0f&P)fk z4s0F#$>V0+}THpIxu-7^0d|UTK-Yq-G?L&3ar%l?2Q>BAG_h{CLw;6ABo34m9Z+=5*u@p`=JH)h&4cZ62SA4Q~=E{=d3~_U2 z=cuHANz$Q=_lR3E9r6;Ze@Ko^`tOTreB)ju?XaYB_F22N^4YO!m7Qnx659{Hukwi- zru0mLxLv%@p7D97o25V1TvFVV@k@Grn~y4jum@B$Lm#0p(?>d_gZ=W&S{r2bPPtq!u;WP_EQc*8CYHmN zQ!dM4%PAN9n0%nT)`6`vk(hqeD&D01ICVEE_P7muOolxsPh~o=bztjEXF9NTVC(G2 zbYSbi)|tt4VC%rv*_r9U)`6{4uClpYuytVTRA)M{bztk%Wje5RVCytzIpY@< z-mCHXsv9*QscrCmyz9m5#Qtv8$zs0O_eaT3RU7j&Hsn3xs?y@FQg)LeN>Vr;VZLw;I+X>mu=XRf&?F>~3J znE8uuq|Au%*=OJ_DzC?Xz7OT`zfJ7%ANH8f`T_mXo7JCW2mR~B8^qR!(Wl+gCOuZe z9;;!G)v(9v_ROD-%%9H8AK3nMW%}Kjeov+kTc7rCe_;Cq+aK8eY*BeDmc;WP=2m}; zhCX6DumRGSyQs7ztcM3A_q+gm z>>bSHu;tB)gY{v{TQWIpd0i%lEw9exu;oM9bz#egGdXPeNG69Zr;oEvX1_U_>A=<* z%jB@-cQMBL`7X;D zKVkM+-oG;j9wD2olf6fP2et3}g5<1?Er&}+;~E=2R?n|~T{@K4bMDibKG#}aQc~=D zx7xmRd`}1VeH_^9CD`|Frp4Gi@wYnH%5*GeY@CstedVBZc8a~PEZ6%mK2s&{u04z7 z)~^#=zgg_(ptdP)e|tq~Slb|9^kjU_@IJ}CS8b8pYrnOs7yM-1i~n#~Z%D^&zE$k_ zz^>D_Bxen?UG_Qq`pRVF`WwoM?}@RA&-aPjrEj0n|B~j@9Z8?(LW_H1-Wlb6iMT`h zF8d1khYyEHPFv!v>@YDlU9L_sXV;&Qyi1HezIA8ZlQBL#*I!m#CVj^Ct3R$iow!#z zj&q;bKGSE3Cu=a;=lJinZv0*3Q_IQ%Z<8I?nU#`nNj{IPiu^UbpEX}{=5*%wJyPEH zJgx7TB{^;N^V;{LSfQ#TxNIrZbo^ z`WHV`R$MBbp(LjbAScd`Nj{wEk7PV5b{m7;4w*M!p?Q;ca47FL)bF0TPyI5rG4@cS z88a5SjWKSR2Qp^-v3w-siHwIb9?p0y`OJ04#qP7P+ZgO~1KLA4U%g*@!`*d0cC&sH zcB&{Ai`g#_pB0J^{&4m+p}eKK-i;4Mo;g!z9*JKnIr`*9pEfxu{b%(LeHi^eB)(=r z)Sr_4sG6t)qw}P6;1S8O$ymoX9_KzB`Nr?Zd$QBg;acdx_GhVl@H3n{G9B1H%w+PN z8JEj1Y`#|4GPjGXlbmb8_OmXNHzz(``sQA7OOl@{K0L(-JFGLg*7cINN@u!W^Fd6HAMuj==0AJv$Xad*o5KFQ6i#g0jTl0WcXy~iQ$N&36w8Uy!9I`^Lv zzd4DWpC#@UdyeSO7&+~EgW3gh^MKfGeo*Z3ZAk3#4ITG|Wy=4~AC?pqe~jnD9UoE| z#iy!{cz3KrJe=7a5qnNKK{~us#yR#XG3QYql>Vr69IG)g{p)(k$Hnw1?zL^r?ChsH zLZ@ju%I!ZoejZ~&>~_9Z*Rsx}RRyr`j!#T z05b+MCR~@~^qrfbu0UGb0_hjdjw2 zUoSajIbH8{@~$rIvcSGB{0rSTe?!vG{r9(;x$dne$7lawf1erlx3aO5`$=8%4QJ$e z+5Nq1FWi&*&rkKLav zJZEU;T?6xbv%K$-%`0>*?B7)ubvQpiRTo1aUX$@x#Ee%@-%wI~O-$J-*8_>K`-0|o z@pk3KCiczPe<8{LDjmwp{i$cgcgTl-{7LOxe69GD;duWD{(^Y!pQHTvbYBViYH_{f z_lZC7kCI}En0RvC4YJ)VKIn`3Mw!L|V(2kpi}X3)?vcLFKqeEDmv7A>|AF3BzvHIJ zeP_+`Njj^)Kj~9P=If`*cIof0`|p2BIwy~m7Jp6r`A_RzDlswXKc%cFc|5iyuFJeY zyP_}Pe@iNhLK4b?PP_D5Q&~PCK1zC{I+N#{=Z~md$G4Xje~}#iy7nVaB^`g00sU~T z?P;!0`xoRpGycU)Npbw$QHL_VHtFB_RFu=6Z4<^O--0&N_D)Xnp_CV$&51YZ8xcQF zeCvs2#m$L{$sfh!g%|xL+9ZbSlRxV<$GuZ>bU42{L5%;z?bAulwZ4$@uG3ue^~C?! zXO^kcZzlOX-M3=zRw+A-2@gtst=Rit>~qHJIJ~(eK4XmhfhXd7j_}>`jq(3!@fo@< zyslF7oYwPCo*(7gNsC+~daJzsfy#g?Pb+WvCM(TA^2I$ram<1w7P9y5_M$K5L*VD?0|1OGJHfq#+g zqffuXj+wlSz2SKY$-M_@lRqB+(ea#x+{~Opc^{X3#E|}l9gqKAV$VCs&Di&Rhun-E?@eIr^DNU+*=3FKZux+|W7tjJ z#p<7u!!u`Uj7$8Koj#Z+lHy@u{SLz@GX)@p!UH z+_+ZNxn;#!l5fqf1#_(%lHAuq&b#41m7Hr`s%zaM#?Di^)}2ZJP3c<5Uw6HpW0ZVC z?6SkyulQS(+dejbcui?BFUjjNJL~0VgXEK$9T+=rNb=my@O5Ryo0I%=FNc0p$eA@#hTrb7Io@S97#Oxn8Sh3Hl|U7E`XTi^s*xo5UGA#~v`NKS%z5 zQ#w16K5YQThpkC&ACTuh9HMpa9Z6^POQOx0%npp5$E5??4xHP0jeL7D>3lWW*_qja zu~Yq&<~OnJz+3k!-Bs@w=z+nSq_aN7q+Iiv>len(tEB_m4)HuzdE1iwjFh)J%L|kD z-O_=b7kec1LX?=QFN9#+!1JlScH4)2KHE;&4-@$H_(uWQotQsP$0xfcC&o$OpP zSXPuh9oyvZ^}8f{h><^WUEJ%zC3>!PNs=G=4gDrj;;Zg2EqcXmHM9P=i#?A}Ui4ol z9en1xXN%7h^W75mlFOI_nA0zfI(HqVc~d%Em%Qu6=&&aLc9M4;Sz3HI@fxikew_Fo zJ(oTq=DPn#b{G%;bVf<>pyc@GIi*9)oXGF>aIJGbrk}ukM)R`d-iIP*EPaXO`0x1( z_Bks2`Sg4j*V^mLdL~5raJBfA;!*k2uxDBEIgS6vO78E*!0-KSJWo4HOnmxPR`^Vf zfge=f6U3XvCx{Ob|6Jn+@}=U-H5S3xIal&i62C$H5#CSoPW5qkh1l}N;w#i&u*vU2 z^@_1`xOj@TDqba?^NX_LZ1FPjAJpEEwzRJL!;%m>v zeK-5-3&f{tu4Ekhc9OF<|E`$wIwr7VLOa=CXZ{aLr$*Om)tSr_Vq#)_*!r+zc(eF< z#n$clGVPWAsl3QPrMUw+{Cmwi)}bwxJRh%hg}yzwFtN+qsj_>|$eyc1<^8;LC@;^W zo*`Z;Kc7&!Sf?!$e{AovVx8n&DQ@&T)=|%>ELTX*xdi)YeuD{pmy2ud+LKED=EjoZ zdg*UnFdP3>y6zv+bDQ1LzjKl96G#W9??0dTFOrwMptVir1NJEwYp`Ci_h|UTGwnx6 zf2r7IhuPQnO8$tL=dT9EJSRrK;Jl8Qu=l)H@~bA09opC(FUI)utnXdo6_WcmhG74$kjIdv|BU;3k3X&I zn_QQAVZZ;}`}ACybOy8QlJ}ecE-k*3XWa@7Fl|4vp3DhcDJQ7F5?$nLcd&>5OUTCu;xx&fWBTfs%VI zJtOv7cc<88mhtQ>W!D1%^loFL*Ma1$G>HU z{7;9+^1>g{*&Q)N$G?L%lKj_Y3%K*Nl5qbW_LyKD&Rs|UtGvr~-{;I~orz2C@n>A@ z@rRh4b9GtqOXA~(@1&UaLtQg>^Ib&8(BCA)CgU(R(P2Gs?7Wij zE(v^m#wTXnpYc~Rz98d`8DE|87V(DcT4vTEJCe_|?U~$v{mmS@Z2oLJKPvGhbIOX3 ziXCU3f7tn7d5>9KR@^R~a-BC36LetL7wmBx_8J>@Jywey&pNT=-z;`s*m-G_%xfJB zV%_oV!6jna(&KtRi?*~$?T}|wc*c)0!N0W!^A7l`g&LF7b!lVp+46rl$uHCy?001c z`P*I++xvK0gHi9upW8pmPnFH--_Ab!cecKv$}@pni*oTj6Lgk7so%4cefY~-OZd6L z3li5Pef(+7{Am+2E^(%Z+`e^)y)K2lZsZ)y-~K|*_<3+mNzp0Z2j9e9VtnIT$WNNk zc#`CIs2!asK16N!L9L6zIHTC!cymc{w&cYBvG=8WQsSfaULG+=?r(v@{{AQY(3aUg z!Z&QEH3uR8#QWno0Ds}bvo?ElNNbyObrx-Y$=7G){x&IjpMN&WyHytV_a3qPd$0Il z-H3TY{`ZN!?(G-5?IDL*iw=l=j|q0H%)Jjs9gp*anVq4`4(w~uk9>AYTfOJsaqeJ_ zun&wC%sU^cE!nk4U`;+OJMI@F*|ivF_Q}?J+}oW}-cji|4r5}+f&01MYrwD7{_!V@ z^|;pa-rL?mT^}FgIiBp?`5o;+GCRy!ZUYmNJ3g@eoXq5~<=DCGC$Ubk@4T>e;A!0_ zqJ2`oti#(HV%w|Ko}%p1DED`0i7n;D&ne|~d0}5`TI@Izx0RYB?v%}KDz9S#e`0Yg zJAB~n@t!jL!r!C3GObrR%iWRL#81Z3>$GQErvKyK4fWWfaf5T zlZh2&X_kD4=0ScJJMepTU;9ywakAxmG068`TNdmerM#}YmULal#@592Bjz2CQLx9T z!*#vdO?qErkCFl=R-458DGvPp_?3y9>$R^;I^OS~&$q8{kbIf+U3cRuqo4V~2lu<9 zQfz5U$BJ8z)_C}ml46yZICD>Yh4>$Rv3}uqU8e6vO9%Z8`X0i+9*R1C*6{?%U3Ti- z-zBE~yB)U62e(7m?U24;osLWgwoaFr=jTgbs`oQ9?h$ic;@q2BhvA>3Ok0d$I@-m=QkkkU#f8|>F_KK*ZSid%Zf*m++!&^Uc;l~`#!M8 z6LhZBdVqU#<6`?TCiWTw_L^j?*w42#i}7={d|0J8JoMRkMlm5db1ToiY>=Eem+uuI zhxx7TVb!&5PD*ZOZQ$=G@J@~6$$K=rI9-=^J0;%r%xY!_`L5?z#eQbBP3+j7Am8AZ zYtVt;_N0EhR@a|SI<%!788bG1>}`4%Y*O};oM-KJiXG1(vCD$o?YUgfaJdbT*K-O? zxoT9mm{pz1};e9CuLhqJsR8INXp#}YHABe(r=vD*)QmUSTe%@?Hitv%vzd^67Q-Hg6v z@tox0&ANY-nBQo=PR#u7Zwq77?HTr-Ypd9Od_wHFO^V&lVYhR9cK<@(@kH*icS>wK z(_-6!ZD)s=>(ZxYGJWj$`HG!l+bnOGZHL5!vl`AlswKC5*!Js^K6M9EU&OgNF>MBR z%v;2c5A66aRlok93*vVGS|xX1XiJR!cCpLSA$Hk2Go3E6$Di*1Vy?>`ut#$I#J66t zZT5+6vtR6(z^;n{vC9IxEU<0Du6KO19oTjT#ax$hcu3538Hb0(?h7Mg#~gOd%M~lz zA+Os8*Tp7l_))RT0$YdpV1MEe^}EExmb|{M<-HHj$~l)9OFGOcv<=q(PsAd0yc@X5qqmHcz!Y00^6n197Q zbB_Lwq|+zg=0BwaKcBAKEXF2wVB2X;a^l~XnEHYpllDvwBd6>g znH)w=c{?*XjGQv|h`m=TQ6K)3)}DNi1-ZY~11~))K5q|uKL!7F#jKof^$-W-x1>10 z?75zPLrKvqc3mT9pT%#o_leyekoO*06fa62_Wr9|oac4i&~e;g$G=OQ+nl3s{=D~% z`VO_^@vbG7wodY_8GRHu>FMX&k(FV3*VrC{T?pt_i%^Q zem&;E9*fZNJBhI00fhYyAnbPlhsC}Y>}$ck7HpfaZNjz*+vc(IhxN<_Z`M7e#NQXM zN_?ZZBlCGsd0m!1G4Y|DBlkP_CrcmsnQzg#U*dDb=y>jcJ>FX9TIp~tKZ9raoszRw z^mkDXk5@L}99}t~^+3}9rOsQnrTA&Oyg*0CpR|zS{tD^L@#OyUO$& zg_!>Go+GvI$mDk<`THezoBW7)Q_?v{yj@H@zmatI+(*y+B>v8K;{KYvXN*K<|K+kH z=Xv!@lKve!s~JiBuGAjT>HSY>@qNi(NY}bH>700i_Uswol=#$2%D-xV z+7y|(*qP+CL+Z|B3+%B4_Sgb@Y^jzVw*lB~0CpQF(Ol{>BDa0m_F>zHZT~!#k-Xd9 zp>@9Oc&`WF^@;dgG;IJK)=qWG>or)j*ykANEIBOpHFVsTV6V4fuL)snay~=e2lb3G zza;^?&A>jlfrq8TI)S{o&hJuQEidoGV>ZhUv5MZ85iybtoGB%l7c;-2{1;-fR2Ph@;*(rMHFcTHk` z!{YrbW^H~&j6athqTjYpyw^(klz8qQrNzTZ-`{Iuk4e2V4z#I^)Yq4^Cg~6(r;l_d zrXMX;J)X8Xo<%T!-B_yUb=77$JAJESa*_I1chaYAz?_XAaiGp6#IB1T@w4mVH;#J6 z{>DY0*x#&xJM_&8&YJo&{eet>Fw=*vKa}YYXZj$i*DmSDFf z*llU6*y}gg>o?djfvY<-$LoFpe9Uq^gQ&Q{{^lf1T@X+B&gbGjdQ$B5=Y)9IypZ(S zS5Aw4b_e_Hj(X?*)T=kfca(SrWAVz8UGGrye$6_y^Ha-a-@!p=iFCFpFT9WV+Qgp} zb4Jmw^WIOxx;8p@>b~t!NoVc0*hi3GAm;o8K1KTFi{m-%S&4bZjB~rElg_!4(|35^ zg!i@K)B0zb_l7Lzog;W>R(9BBhlwZg;mpM6Le=sCIqiIz+BClLK46XJEc*C+kJUL8 z^OySa`xDb2S0(0|y48v4*C$#o{#;_d8*_SM`sqO8&#hEFC8p1wpO`+rAu->L*_fE` z$$T#{?{RMyFIBw!+%M0F*6F#>e?F%)m5aVSq5exdVQ=0nx!VuyadlAZ3hT6FIKgn^8Ty4BwW`zZJ9pphcl~>=)T&i;v=`md+zvPeeBzxcCmei z?GHBX4{ZI8OdqyBe){*h{C$R>>wN7H#b?ozI!n+V8^-2))ODXu>lVhzF4Y@? z_`te?`wQ?=%~`aclf~#CDE(#nzf*6I`rV3&eSpyk=UQT)GxsGO)?ob^_a+Ya>&4Ey zHu=eQ2POA9=VV=%_w1hgXi1oJ&(L!Pl|7M}e;dV&ImlZQBY%x}NOp(=&y5d@?c0bL z|M3kuj6bxEo@wG2^?du&iH{!Adz2rK_TdGIZ~CM5aT)KO_)+P+N_>av=p!d<387qE}JR?P1jKdacn?Ul29l$bt+e2vx>*7>>^IX1lp-XfhZ=-EAV;GgJR z$owDO4~5a^S@Cm|KcCtdb&&sOQS=9XN_?qw9+4fdImc3+?ydHQoH2yHjNEOKyc_q@ zHm5t&>!) z7nIjAgdIcJF@zmM*fA{8Gt!PB>=?q1A?z5gkZ+f$&FsBe&)uo)d3@Y=ko#<;Qh8~& z_+OLp;*9Yp=#-ZfTnql7>@Q8cN&R3yG4G-tFZr@0?-e7bpMFMsNRod+jGq;Hm;B7c zSIg&CF+Mo9uw#3a^cP+n_3_y{uyyd~^{Fkv?a##c!*3N+Mz<5jrNbrPr?#xvuIr8~ zCbR+WacmWPo8zBBB5AL!)%lwB9kxM+vIF5`2~M?ayx{3kTd%RlzW z#Am1M_`2mfYxZ@k#l9BhdM1?-x&0vyFVWb}7)##VpMxc5tU%|&6hrKAk8>;Sj}JF^6BL{l%%u z3;Xx@;IHkg^U{5^FU;-19o-ZHm%An`93%niST zhW?+ApIiJf$&a~p&Mx`bA-fe%NX~C&@eG@pXIx)*u+AWr*X7a_7Rt--*Yrv5aUOPm zPzJ^5U`Cyu(+_%1_qw-qwGM=6857E8|ec+tp4O1Nn_qbUcQmV;;`*M-o%s z(M%5e{1bNGu}lZ{d;wbreanf}XST-p3`$NP=bUp~OdWAubbhA3Ot~~1gmb?GKBv7y zrf>OylH@liDzCC|TN%7v#YaJ{7 zZECBhiC+-ENzaq4%lM*wEao>pcn<2`HQE=*{sH%E zk1sjbHFMp6yrs1GyyS3IM`>}ExJG_nvR>aaQC{R9zg+JSC7sFF$MpvC$HdOtq4$W1 z74lC>UU6!)d1WR)Bk>0L#yQx5(m7VwqVE1jyjXnipGt~%rM$%C!(#uI8RIQwx!_x+ z#l@1JCp+9j;r%IMa_f28XGwm7?EL+2rN#D)pBLlXV7tB#aGGpN=d4X}44+gTxxd5i z@7VWq=GcFq&RT!26d%xePDW)s<_Xcu5niW z|8_#(%1{b_au1bJ@^#`r{Vc`=zE?i8k3(nX<$Blti>hn!YhJDI%p`vC%kf(@$lrEg ze9jy`K9e7m@uRPr)j8bPl5e!bcgiOHg*ga5S@GwY`D3_Nl3$eK>^&WG)~A1?c~f&Y z{OacTTl4S}dM{v$^1`oFn|U;C;qTDOR~ zZsnPgJ=ddSef-%qzf0~m+#_~bdNaO4exCSfY5484VU25ESM*88_F};+*s&aTos!pb#yZ|>IQDFf$*Md2d@(Wl z53GrE1i$aIcwKD&et(L*eEaSe&8N&w-Pgyl=w!uo;63_ApY#uxoNF-$T`R7;Pw${f z&iL>(%{#}7mr8$s_3^%BpZDy(keGM4m^;w-yFZNEyw7;IbadMw*k_N1ecq|BR0VO} zeYceqFBMOv@>18+S=o1FJd^RxjLY>7w_}BlV~8Es7wo#grsc5Z?>!h1k3inq*(<8%4fBeR}iu1C)Mzaxif&Qx7fF3v9C@h3{c z{t+(!iRMS`B_9!UPkEW_z)$~J-|!SyY9ITrtK$BhvHDBe>#dZ$I`b2@|E$~jKIF%A zPYC86gww=z(!qzvRF>W>4$YaoCF9nN+cIv?xFh4vjJq=K&Y0`Ee(~9?Eokw|UzNr= zSIj#>tIm&c=6$!*#X1HHbDw|Dy5yTB#W#}9RkzOe1?p=w$@wPgkHs~L;r_qXS}5Zk zV&ci%%AO9LGqkp3eF)cY&{?WlZ3A6TdTdKNe2&sFFhC9Scn^D>pcH;Z9k#{C%&WIUMhkmg_SO|awkgTCe1 z^wsZwhsE1W5@dx{Iq@8_D99e3p+15&Wq3Pr`Ytoga4Lq z*IME$Khp0RDORx8Mfhxe;>kC+KX{?eBqetr8P9mD7~fczPKfQ>pxE#1zI_lqAS9{NUd$x|c=8@TT)E)Q6y)bdG|0k;o?tet-3HhGBJaP!Mz`-E@kEGzzSQAshG`35_lu-nO0(qTNA z7B6}-u7B`{cE0IiJ^w7Z*GOB`zWq+bQpJJyjz`v^|}uBy3RTu zmJYumd#Khw$0z>#p{2#A5*O|ImX~;i>=Wm2iW!qxKQmSzo8*h2fS;xt-jDYD}Pgx(+1d^tk|SFk{#mH zBVL~#;$eEVB=)^u&ptj=wp%~*c8 zua#)cZvMf$XZhoAp5-rQ{qd)#&&oHRILlw&ZyX!SbS&>m^2bz%-5K{}+?$xb)0c67#smMw zj92W5kb8a^Ogda^DC6NQ??@(Rtmd~WPSqv_KIxp2Fm9vo@o+TDJC@}g&zQX1zo+j; zUKaPEes-EY>1R$aDV8KT&w=m`Bl=(0{Y2JLFyEtSmCn}xvdQ~d%-s``yN>Y3Ox`(~ zYix(_lN`gfk{#j+J67vbe__3`Bk4S*Sj}Wi*&AC*i?!d?vr-zfn5WopR*OCMGWXF3 z@0Sj8#sT)Kbz;x0F!LJwQ|!2H(C_9wINP=teLv1e=-5wmu6STpr~R|Dnf`Aw{cAG$scUELZ_niCXZkPA?0-t%WOE-c&*Tqe`p;x`He~W2 zX7W8IXRmu>CVw=WyK6K1UrMoBr8?uc9Z%PIP8;)iEN#R64!PGqtuLKjW1!4ZB6r;(cl~0=`YlO^{cN+?>zP#=^Zg!8hvcqz*!4^MIjB?5zg@0(bCM42ush?P z#O(di=XvAx(x>casebuh6U^_nj7YvtZD!qV@qDZ|<)!_@JOg~x6)^XIcZhFReVx3Q)@g}1X?>!tRoI)mJ+M!|S#9+p>A=s5-=wo; zctp%Mf8a6kUW)m2=I4%#%ft!=yG{0py+&mWtf+|N1LfuWc#QMt+c$LX zpBr_^OFN-I(%xLZJ0*Ah!meN9Z=Ld&&Fa9`;aZ+sxz_Ht%#M2tGrp~VcC7y62WI(0 zIw$rxxqtU8A9wgHFFJjeFVA$ox%aI6oWo}M{%k$gaC{v9tL3xX0PK3N6T5vPf35Bh zd|7n_yX=RkFZ;I_n=^f4&NmHc&y>CVsaYRdGd?J-X;;V&&;Gsm(Rhx%XQs0(Ti>=M zd5f;)IK!?ZV(xa*n)yQ;tJ0>2dj#nC-eOy(gU@_JjK0&J$vZMehi{6qu3&s)t-|+$ zu~?#z>=Sd=18%SQDAmVadL{;*IaBvY65o0B?!}?vKFMA0=3n#y#h6XP3<4?REBGi+kV6Mfs+A+`^&{Y2kqHQ2HKj2M52 z)y|C3_c(xkuKQVyFXc;S?ZdW@j_-++*ZXMX_{sAU_w6?OtbVofVv{qRy8p7{y!16} z?sL7q?I|6iB=5PI&RvPQu6=_Y z+eg$#d6!{t&C`?x9olfG;&1NG^1^OEtX1rPkL30Nc3IGOn}NNC*^tI+wT|S8*LA{uQia#2QwZLJLZ*zzW;D{JcoZeTQ|Zl-#Kj(Nk6xnZKX~3|=uL49=eqe?~f-DG`&-q|aDdo$0`~NqIeA*GZ23;xx6dOb5n3 z=LVF^W9D?S&wYWGq(eJ_ZGSw|#~zd8^1{wb%&m`~=0nu>h&k()8o3K!eUrZ3 zq`a<+Zs|MDFm>wZ7WT^4u2rYcj*V|h>%(^0ao!HG>+bM$UD`H$Z%JwK2klSbpWIqn zJdt=`z5lpVe3az-DBa_h$oNLyF4=Uw!yezd#rD4^W5%Dlmy{LnQoV2{>^9IV9oIYT zxb=yx)1T?U*6CGDTrTuoUfA*hv3-W$eeZ6?eAZ@JYzHN8|LktXeUhWodf?pRL*gN^ zeHa$oPxQT>L~eh`d)`A8#R%&+alRh2oe{}x2XfOSAAGV*c zuRAGr*^&R{PrHZp(%KaB1-joqCHby3q3ZYGcg6D@|VT7Yq=e%T-4D_;&sy5B%Az3$xT`l)Bc}$M(tnB zJ#N1Fzdgy}-G8eXDKD{QJi#W+*hRmCt5lyi%Lm?{{e$%H5dTZ}N@{iH&Up3uYJIye zF@3XFyiGb6H0WGi?_@tBzWX9Qv(cq~Dt^l~de=`nuoc(LB!NqqDL8e7CQNj{wz`3~`7$>A5p-AiWY z#Ol3f$4}UES)JJPU2~=bTW6W#yzzLg^Y78RLhO(Z>gkG|vFCT8zU z``;kn;ER;Pey6@&I$mSIUNax1_Sv8_w~fEkcqRF%Lvi1M4*t+)V6OvVUzfc6cGa(x z7k*`3N%7mnJa_t_xKsKUmhM*kUEC$M53qeeXa74ZiW}uG{MP#_f=&3(uh=cvgkQC) zvUun3Ri|S6i5>e1+fUejk~im%OqCaZ$^67-k95v^^W0)U+$*-9u>C~mq6>Bpe!@pR zzkBc#KKt>x!B6-_y?pkB?DUE4CwA;7Y(HW9M&6tk-@1Eos_YP3;)%_E>G<2517d7a z@5t}mq37K0)jTVvJ=6Av#9lKDi@mpk?GMaabeZ}eY#-QT@=bu>%H~mOlLuTG_qHR_ zaeQE}V`1ORfU(c`GbVP-$Hgw!)=WN;@nptR8Bb@tBjcHjcZzMlyk+*f)fv}`C;w+| zafF^o>cFyd9amGvls|yEE<)J8y3$@5{J9k4Ww>slG@viu1+>+_E zX7V<%%hjIAJ2LLfxJ&Hvc4zXQOx~MuU#8Qa@j#|Cn8}AS9?p0qpOk0xp_FVKb+}r&3Go`&P=~QllN!x&P?7e z_O<#loqrCo^u%bh@&P){ilebCk@^)wP=8SiU?OS!Aw4$+3(kw?>TEA zW9A^s&(r+1SobUcGZojFyhmU0KwOtzr*$d3LOOrao^FAdHR>O)(lhpA=E3?`mKCoQ zpR6^Ce^+IL^lhKI2w2a`VW zfi3UJTq@E^8(AhQo!-jV6UmJerg*z&1#UF^e_*JX0p z^0CYgZ23&44_n@v$zjX4COgCvwtO<_BZn>T%&rStKAzc!EpN~CVar=HIc#}zW(T&s zKhuXT@5}UI%cqk*{==3JW_Do9Co(x~`OeHfY9hn@qye-+G zKf;!GXZo<^quF&~%j+^ZYa2=z9?~NAz6|y`13G{E zS6OkJ?2y;@^jpO%7wel8lEa*{9Vz?p>klk1R*3PFay_Owio7l(=PH~>aSnsN1c%KJ$3uSK?Q+Cb)I>g?`!H2)Fd+~DZNzs4JFDi?TDR1o`Dnm?= z-|+W2AtvxG->VEhz<>TtW$`KLcZ&Z{&nj|Vm~u@fzWwPr#Y19zaJkU2|6Stersf3y z;hMX5FCLdZd~z`-_}?uK^OVlJdc@uv!Z+@}Td_s{qyL_zbBgwdA`hQh5&TE~>5D6Z z|L|)c*gg0U&#$W}N~PZ`#(%C0Mn-e!KV}@h0g!@I$?q z@jK0B^2cWdTe9^`yY5He5B1(J9keAs6igGuKxUFTZaQ;=+i>s%;7A_hb8~=TD>o$^9LAz=!18VSLYJ++Ene;g6JTu)2?PQ8y-{%FjL&sAb{+&4>f&)|*v{qFrF zhq)F$)QJ79)XMVM-oCX_=V+2&qB92GYliu@>VK4Xv6%0dl6O@0k?;FQog<5pb3YgT zXV;Y#@0NU7%KJX?A>uzbt4)bZbS>M5_jn+lCBpUxe%1LU#TTVNF8hw*R5}47rRexM8FB)oh9> z<#ilj#|?H&h})NM(VU@FRTXspDm&9j|FKNI=VRJCBp;CP$aFYQb{vk94>0$tko((B zFmdC)RgLPD`v}v?Cga<7@l3KwyMkR`uw%GW>=?q1A?5P3Qt0RP_53j!2UkU(Jr7bw z_zjv%i5oui`_b^F>DvqNae986c*1YiM#}ua6Y&{x)i=Z}L%<0k%Gj{)v*~&+?Lz;+^7Z*`Y7 z{e6MXYMaIGr(Db5WJd0BfHGDn4poXFI(+N6Re525>v)57s7LGY-Q$C#gWPW2mOJe^9#C_>njAM@^ro7t|4?e9kgiOA;A;tv#r5U%Yj_4!Yw}pw@ zWAbaiq(fisO!70H(fTLx6^Z||x}^9-;@idl5O*b;oYi+{HhaV#lVLx50J|@*&~?AB zwsG^{^**MUwLz=q8sz98@0UJ4V}BsC3EL*@`vrqykFl`t)eeanb2iRs?iPE@=@WYl zIaSy7__J2*d7(Gc8A<$r?BJVYh}=Aym^y+N{=T&6{DrDpjUL%?+@{6I z(cdBVSPeU#Gh)YZr`Rzp-#6Of+qv+qC&zvS`<>QmvF+C-rtKm3eBCVO-JhA~G!}{7 ze(Zn!^HFY}u|wUlJ~>b2;`gA5gZo9^M<_3Hzx#8auFaf#jcmdfzFzMYDs7QX``IdX zdE3M;Z@bvf)xgZZJQsJZeBfJx-&mz*Lc|}@{qa-Oju{_TD*j&-FI9XUf7cOn>m$T%SWD%`siT)bm?#{|E{<5w(pE`+SU8SE-&?qKEM6V9)$Scmg4`k_`64Id`@}2 z9~n?g+{R$HE7)Tc>~UsLjBl*@VXwzv+5qj)*J3Y&KU2Sr<3G%v_eHg_7vvAmV7&NI z?f=BCFY=zF=X|bEKZ5W6SZUy)bY1$(aAM{iZ0`E)KkfO}X)OJ;?!}|yHd7<{cPdMZ zGyX0A#O&R^Cp#n3aT_Cso{wP4exvkZ;`|FS*V=GrS@GU0?jh!Cz}nF8!@ZpEwf->^ynCp68L=F^3)V z39;Mxq}c78Yq^Y5V*3gEy0H5c?C}bA4B^}k*LpW;DHjjz>OT6rl8Z2-1!uzlMpwr{X~ z^E!m*F&takDs|16&@rd9I9%77KCh(sy!dJ9;lmoS$1cXz^8IGxQ!RG<>%_k9c`EN` zG$!!AQnTcae@oIQhOL=CIxY)x`;6Sr$Kns)i@SbqY0)mZ_l&UnX@}U?>J;0zF0p;< z7B5QUHu^r-Lhi90x&49d1K0An0ejr&5&OEtmi|j!Q;+`r%@v9H#(Qtlr=7!Y+c3T{ zo*bL?uT^5NW0B(z->IYhyk|-Jwwu`NN#u-m@AyCM&obX&mkV|~hutsm*>+ko9oS`r zZO7NTRnLadR)6))_-qDpezW823t~IR&vLbMx94%mX_I~~=;W-tw8=}CmlbE|0dL#q z{e^9kGp_z>q1M=9zYjQ&e4}5$_6>F!VV9Bey1xvH-8NviJ+8~U7+X7M`{o<|G`qfH z?cE~(ZPR1>_)W2le6#nh+IS4frsFm&wr{X~8xgy$j*9KinAmw?=Y^dYcKfssJmWW> z<=rZ_{Ry${Pm0~<;YF!mus-BkoTV_wc|Y#4;$ux3$E0uHVEY3*CevbHcZb;5oe{e% z=(`WnN8I*yN^YC5ZNgmlD|?g{`$^yJ2f6K(??21PeJ$j+3A45dW184yL7rcWXTP}? z@|<&coyubEe;t$y+nI%T7CQliWVTuCI3St}#kXS=d80 z%Qu%Db{RX84s&s**gCMwh`!6!CArH5yIkF3{9&zvK6BsgT66SB?lSgfd56`m>_6;l z^(8yh3!KaC8*;b#flME^K5Tv1`h%H1Y<<}Ju=PD2@_lv21it6MeC=`Ryi?*FN*g#z zV_c8QPPwR~b}{zpN6ZWV)V^a`nsZsd{YLu7O3!T`o5!4`Z*eRwEjpBUR~?D%+i>!q zxdZmxLErq&WARJ_J7*?8x$c<8A+JkWCqMdOtpk%C{Dd6`*y|S9K8z-P>IJ4wd-m2h zg~hao)5POqk0e@V z`DQ(*@iFP|lpVJLIWX^P4J4cP8M$LsF8i)Wc-MF+_IU_$ z?-^mYEBLYd;K&zFDqF8 z({7n_57l0{D;pD-XPviFI$Z0U`erWscYgot+k8J)jGTV4L4NYSGOL)zn0Fm(mB4pwD^7EmtLiBaweO!Vb)_?R7ReAXJ1cV`s|a^*`&O@gIW1% zeOFgZxfY0T7L)f`>EaK*d9S+k$+$N}&TqB%O20!fab0(2vFZ{#{@r4ay**<0HS)SG zA?LcBOCWbU=@q+$k&-K?>(f2w5gD-S6xzNP$do9c((l_0O%A?!BXpUDTruCGC{ z>x;DtaenM_J(rd8GA|E{U3akSYeek&g7KL#XEc+;mV4iE^y@SxXFB6ahkmhDY~Lot z_H8oLpZYKM7=jLY57Bqhr?b51JD$ir&ZGZ=?(KF;A06_t@7p2Huj_FJx%1A5U3T~m zeftYLuzlDmwjJ1cX;<{|Ia+`3r+M1#YFT2&-b2j)Q(7FAn7+9p<6|>kmGKD~pPccj z8Lv&ux%#?HeqLhE{WfIsO&MR2>0F!1w`6>C#&;y*2n2bUZi z(j!y8&XjL?%GZ_htxWm4Q@-O;zMhi9m48vOA>?0F+?>*F$zD+!{Vp%X?~0eA@X!qVtZU1{{EsT6FUyLA?+=FG^8h$J{Quy(u&>CJEgQXr2VCP zhjdNp@gW^39SiB%rTWB*^ae}s3hB9}dgMia50(BUr0Yxn8Peg>J?0?aSbAtkM@rup z(#uOf8`9Czi$c1&^vaNqmEIoG8%iGv>3HdjA-$=zR_$+ov9)yXkltRpBBT?gof;$N z7k8DeQmS@R_EF7yYA0o@mCi4gl${jPma?@W-M8$LkhYfnN~zjI*`pzCEBkXu+sk5o z9aa|WtD`K|*O6thzBZy0LV8l!Xh{3gbx$d~HvHXRcD>Td;@)um%3><`Q&~J*R;w|+vY0Mw3hCozdxmsJ z*~>#Zlk}c1YYl(zEL#>*Jsus>^72DNT2X#jNUO`yn_E1*+xK<0JGYqL?W&MIzT4)I zw$0gaDDs2n#Q$%fGaUXtY|ghs+A-(SkRCbbvXFMpxjdxH=Uf@mt~pnSbmg3DL)txO zETqTH`B6xF=EUo*p7Z1Icki5d-IM10H2mE+=cbUJGUryMmBr{B>ZP*SJcoKw)z6LB zFP|IztC$=8tDYPETR8WkH=tKHH~QB!_gmrb=DGM)QMAmB^}O%gSkDKhzuVH^2hWZ5 z-kIdfgS@innM*xa7OT_Wy+Lno(NPiOb!0{Kr?VpZv%Dhu(^V1uU0D(R>8^Hn8h#`3nLbl;@kS{ciGU}Y>{TV?d`;L2G3_R3iP!z!cy z9hIs4DSv;u-kNm1fn@*eq(7MKpBwDyE&a+^&zD!m`QnPoSpOAOF|DqO|G%&*)_Yx5 z?C;I#|CglyZ%O~(TJ^Zzht>E|^<+rfs_2&$#lcn2gumOXo(t(=RXam^WXj)}@-MH7 z<49Lk94}T@m8=NkM%A2<_Ec4cbamCjkoH#5|0{}#O28HCz?Psg3EnBUN#ny1XimQ=?UJoZ4I!$EmTZmj(MbRJDY3Jo$H1 z)qdgctyQlI>Frf<{FVHGJv+Bf<7S(+rEw4T`q!ra)3~6=snIT{iqI=0W&>e$W>td8xntva>G>e!Fkt1k?8dQ<+Bs$;+HOLk95 z_WF~(HR=Bcs$)AoyLxNLKUf{x@wwHp-wsv(BFNWQ$NoE9{mbz8#_C^(bR_w6d3Ed; zqt$l>`R3%`Sn}`ogX zTj$0295^qIS8elRxeuNf$Gi4Z&=8<%~JgY#|->5=np32EoN+d{g0-t8gnn)j=a zuAFzL(u(5T!6~)B7*uN%|-FuV0sbufrWbg6x|2vZWsbqgWCwn`Sz4G~KJei;3 zn*Od!e>csK<4W`VSgs}W@wc+rcYd5tT7!ONabVD|EZTy8WpQxOuPoY={$cYeUuDrT zpYl}}N2dIp^DlcZe=kpVy5{3&WwCO8Tu*e*r`(mraq0hi(%-A+e?R2wogdd1C(UQP zsVw^DGtN{Nr_8@5{D1%axZYSZe=PhxknEg2e@pm#a6aQ#WpVEOpM}4N=HD99_498J z>G1qtE7dq0@>LXrM?Am zUOHt#oR|6+d@ty)S#U*22Nqlz(z6#_71F^4*M#)k1=ogjXu)+MUBBRmAst@uqmXV~ zuqC7;3z+9LFE02=_C}RILi+H6-z%*sRxgb0sdr&)HzzHO?WS*GZ0Dye zjP1OCVQlAX7RGiyurRjIvlqs3eQ;qM*Uw!T$MvCwaa>=&Fs?s`7shq(#)Ywej4XWF z2e|&_3tK`ux-gFCn-|7;U~FL=*Kb%D$Mx}rjO&%fVKw-xc3Jbh&S}*yYyK6|&YIHW z_mzFREKnBO-)FDKIWnYY*Ss^NgEj97>A5w>gmkE;JEZGtR)uu9=3^n~;^`Qb&eo~IYZ zdVYLStmhqzVm&{#DAx1LqFB$*FN*cNb5R^ei`rPe}c>Z*BDBq}u35UoC#@R`l1#_2!z|*slj_W4}JT zHumem+Ssqpt&RP9s5bWN^|i5I57)+iy|Fg->yg^nuP?8S{d%-E_Up~Hv0snX#(sT6 zZS2?MwXt8{R2%#C*4o&wZ?BF0dZIS=>$_@Wzn-j({rcY8*srH*W50g5Humf3+Ssoj zubulb%D1C7_V1@^WB;D1js5%i+RE_%J8P>#TGYk^Mbs(Zb3*F*42dc z^12wW(YhF~&2=$eV|6iJH`K*=jn~C^-BcIjwY4tB>-M@BuZg-Cue<7Eye8{nyzZ@w z@tUfO@p`x}#%sDR#_RFA7_S|5FR%typ87*V zy1M?*koMNUA*3hOzbT}B^@oS_l=`SI5;ygv4$(fZhr zHrK~~G*%z`(GB&nAC1??esoiP>_=PcV?VmRKK7%D`q-cEs*nA7vOf0bd+TF=o~n=I z_rvvZ{GP6lf`u5Qy-K#c;<~-HA+FmGY>4}ZwuX~} z{=p4#9pB#Y+3@#a4RK%5(Gb`5M>fQDeP=^l*Dr54E$DSMoDtHM4Fe(VZde!6;~Kse z(w>HIgmiVo`jGZEd@H0UHC!6fzJ~9G^pu9tkoGrR8`3om@my%2;rj6R*$qDl>0rZ6 zAw9R@wvY}r{4%8L8{&R#xZyY9?~M(UAsuPBFQk_@JQ&i^hChaMbHn2y9cy?pq&GA? z6Vma9=R$f@!_JUyZ75kyz1-d~C!`Y%RUy5rVPQxo8|p)PZv*?Biejo^kMQ@y4KEAn zbVEx>A8*(%q&pg371E~~4hrc^!@(hazTpia-P!QwkQR+^3u$>{XGkj=SA?{>@qHm( z*!Y2v)-@g%(x%4aL)zTB`2c*`h?QOgxq$f4r8PdMS--h&*#(P8B-}pdC*EBvF(t*Z5hxF{m9U&cTd^)7(Ha;8D zp~ioPbbTZ1Xzg1XixWsUHtrVEk;dIadU@l5kd8Lig>-Y{;*gFtzBHsaH0~AB@y2~a zdQ;;oL%Ox`H6gvd@%15{XlxJZU5$r_bh7b?klx$)j*w0@E)VI$jYo%cy7B!XeZ29* zA>Gl~6Vj&|PYCHuZY%RbYatANb8!; z3u#l+H$&Roba68jfJ$WX-h~CZu(hB+na6;>0wQ` zhqR;V*C9Q!>F$trHvK-N%bTV`+ST+(NLMyJ7SisfCqjB$(^DbsY5GSn)VFo*-bAG>0r}7Aw9RLHKapL z%R;)o>2)C;ZaOri8=DRb=}6OCLwb4B+e13q^zM*uZt4o@Skti~y`kwtAsuh}Xh?5r zS{>4@O`iDwWFs%a#oGfh{7^!cW%L%Or+x{wx&ZwP7Y;uyCB7svVS;PiKU`uqQJbp~)!UDf@6 zli8R>NhBMrgrLl1hTT~L%SIL@3D%j;BrIl=ZVV)gA-ivORs#*IOITn7iIW}`RDdY8Ca*1InKyjwqCtDpDi=NoR8_0YXp*296DWj)+@v#f`kZY6WkbrOPb$h&F_ll=iDOsHQXZkHQplm z&AvtQn{$igH}@9FZ{96(|FYl~xqk`VBKI%hTjc&Fa*N!*EV)JQU)pbx`A& zT6l=wpEo)$nd57n(77Z3+4X2vQX~N>kH-nd}^WGpHDC3 z`*ZsKDj?%?Za~K8yny7jARyy25Rma14#@b71Y~?3*K#McTv5wSXt`)m?uQaVj{jPx zGdQ%1`(ay<`-9f2pwu@Wl=|v=Jf+9eL8<>@kn6wJnRBZ=m(0CYo=fK4%I$8XUn!OM zIQwtq>*QMc#YB1TIH-PyjNi3R{#NOq@mr;T4&N&Ma76u%-uk-ta`|IwkKg*-ZjRp& zl5sveB>Bz>NxpMKoEPnS3UOZa{aJ|HN#CD^RzAaV=7lBS1!2iI5SIGGVX1$mv5n5r zu=M}2u*5$emiQ;a((lEv^!rKmJFWVeu$+gX5v}>G|db~=H zqZ&7%aXU3`xB9JBzaI75pne1T`9`&y)o)1cu=SqZ?8oR1l=Cf$?WpkWp{;jc{&GNj~)qKr|xF5QkuQPUS zv)n)TG|x828=7x4)@_#i>4D}yFvlC4Z!varv&`2+&GOtg+#E3aNb@3NN1GQLn{Hla zY_3`E$M-gOnB#rTcNn|BS?viWgiPdCf@a;AC698WfHGxl7wJhz^2 z-f502%}*IyZQzs&Ja%l{ZV+#>7ENXr#-Jlf*>FpsZvi#(6#T3%z0_qM#w*!?YX zKXaf(=J$gwa({5BMX&c3xt_*byJ>T+2##UNZ8(VMbGIpxv0b{3I9y0b~ z%Ol2KYH^Ld-0~h{ueAJ$u}~O^S2%qPX$hF3f zMqX=dI`VpBbCJ2m?v31R?7qmGjolv!8G9fSG4^0&sj-J5Z!tC>d7H80kyXYXj>L>T z61m6Nqmg@!Jr?OU_IPBSu_q$$Hnte)Gj<{(-R=&?@at2%F{$!|C?l*>8<$hzNRi0BuTjjb=x5{;$YnA7deOhjR ztK8QdXqEe#gIeDqt#4fY4y)f0^*gG5$JFn*=5@m4)#wy8p9#(9w8lB3aV9m+IgN8( z<5V%mae6f6gbz-r6A6#54-{(#&)_L`| zw~{~g^KCLOPuzBwIX-!tv^Tv}`XRS;t3!xKwo9zMBL=Hb&z z*PDFKEbTRRa%sxgb4xcGdw%Jlv6ZDy7+YVu!`P{%qsC4z%@})e=?9IywDeDny}We4 zu~(M9V64;j31b`DK4WZS+qki_+g>(yPTS{=o!j<`vGdxF8@r(G?~Dz!{e!XLw*O~r zr0uk^OWM9`YC*wfZ%?1r}Mjdk0aj2&ouqp=&?78tv^EokgeTeGplZMPXa($;S5Xxj>7(`|Pe zn`?WAv3uJR#_nrdW9o@jr+hfKaY1?e<(Y7td z9&6if?D4i;#-3moVLe{5Os=c;WinrOER*?imFiK|6RLNq-mUst zqhIT6SSHWE?lO5#F|bUYe>X0Z=kLwSOhqF;g2e2!~ACp6FEGMTR?mdW~Za+%Ddr|K?~9z}oM`8D zZI)APm-%m^UFNxy?K01uZkKuPOgqnWvz*Cx+5d8`UG~46ZE0A^A;r$oRV0A>->(2cMr=&g>P^&N(Y2@3|`^?peTHj%<@5l-nCsU@rMrYd8*XUd{^))(|Onr3!W$L5v%~ndgPOp@9P3rMEJ+A0+ zU5}?$O1m$reo6Jqs$W?t<27)H#0}peaU*v~xg~eV=NY5A?WEdscS)Y-?~?p0s@K&{ zshu{K{`JgVJRWXvF5fl#3p`G*+{M=c{foj?-}oXQ?_G7u*nO+MZS1+I@uSi| z^{CW46_x&(j!OSrj7tApic0@nj!OSriAw)8#H2qK#3gPZE^)(gi5rPa+$C{|+a8y= z9dU`fGA?mf#U*YuE^!la>G#gK^m|ua>gkTl{qfqkJpcB@<@t9*T<){n_`*lH-E$I> z&)kIMGcO_eEJ#Q`frR7}PDnnHgygd%A^Ef?B%h9i61sJ>D4 zA=QUfAJyZu9`DuTeR{lK%Nq(V0}gbLv;o@^#gx_4uM5UsAuz8t=;8(ti#2NWV1RBmFY_9_g1k_ej2T?-9Rw z_eei4xJUZA=N|dKe#1SopWuYXDQcVvjdN1toYpvJG|r^PId_kouk-iF`KsI_=c|5? zjGw7{Wc*CuBje}dJu-eS-6P}Y@;x$suG}Nz$5}1or(w0cuWMW_@6~3nmiH=iR?GJ* zb63mzm3gb>`;`T&U!rw|oj$y`=M7 z##XXmlD)yX)Oqy3%zV|^^D5gbo%dg2>#W)EE4B@5hUp)7 z`kj?)BA5Ai)tcLkJ-BA*fBE>(nrDp7ugM#Gd`nGOy$k^hVmA~cVi8U`6dveV$ zj6J>P?*C)`%$mHhlWTru?721f|Bm(ZYhE(8vW9;BijM1R9yWGr%@>WGUUQ?5^^0qU zjlHzyJH}pFvyy&8kn(@$XN+xlr{m}2#&^EQ*xB#=C$f!B^qoBJZ*UUtY`vC0-*E3+ z=-;8=;JEiX^dJ3IxqEs4x8K=#FYgbhe?5FJ?-!@<-S3t2IC8I?$I*KO6o=ju-pl8) z$*G#po1CAj{khs-sr7Yn`6lODwX@V-ul7c@HyhjN6xB|2Nqr}~q`uQ#GH%Xv$@M(h zCD-%0F1eo1cgb~F>5}Vk_oqrGLzEY25trBg;9C(>-8pL-&)$Hg@NXo!vcV?40gn#?I~j zXJhAeI~`nZLHCWu2D$^rhP#&;8|m&gc1iaZW81s;kZp2q@0NNyx}P`t%I+79UDf?1 z^ZDEL^Jw=;qbIt*YiwutzZ%=s{d41YpZaxoH>}`1)^^`Ww#iwidQW%2=o`A18~st$ z-R^f9eW3ecqrXS>jollKzPWpc(Fau@>K--vaQE}Zj&y(8eEy{Qyve!y0XaXNYP%kg z^VI!-obR;{$a(I0K+fle2XuXXK<24|2lzgN_F+FD`+L$FC#P}tYMcYAA5=ZB$K!f@ z*!WTZzKio|avo5-UhNBN3u=F<_QnUrKdAP0wRfw1K<#_fZd3cT+85M*O6}*={+-%y zsr|9qpR4_?+UwU!{clpcRPEctsCitmAdI$yu*{8`jBs>#pPVw#iAVKCn*K-Hq#H-QB!S*4?3XyzVwRThwoOos6%M zb-eyIIUh25lkOVDM$Y@ z#QoUlR34K4sy`(CHT96pf71_1KV5uC=D$l1N&j4aNc!i>L()Ia!*U@t$`W{VPVNepP$QSlVyW!}q&Q&Uf{AvPa(Uoa^ED zJ5A0HR6pM%`yDDh{Jw|QRn_Y~vM*(-hu`lsITwuH!qJds!y!ver|A1u9tp3rTXdh+|NzUxAgeTdfo@r;7qRPeLzjl_f$W(p5MbYIOo^% zzL^H6vYz+rH#qh6ykEb;nOe{L^&6b&^}Jud!MV7e_v<$}m)7%s{RZdqdVYV`;9ObH z`}OIc^uL?;>o+(J?{3&azkBU8zFYRu)E|+4pL#^D|LI5cx_?Bj?@N#H`z?Bp@`yYy zTzN$9%bg9fKe=Ip>{D&rF!5o&|C_zxl(B&gy#MD0XY+=E13Z35HhkaM#z#N@aXy~? z=y#2s^XPvWJNMDIeZoikbJCCUIKI}&Ju2gO@1yd5a^IseZudXR{Ym?j9+kYuACOZai7uElg`d?Q6E9&p` zO8mxNsdsj-kjnF zbKSvSd9FLuE8{2ME6;V~z4BalxL2O*j`YfN-O*mz_kXNc_Wd94m3{vwdS%~#u~+u} zPxQ*Z|C7D4FX42r>_a%yEBg*6du5-&xn9}#f4*1t{a1Qr-+#SV_We)w%D(^UUU^Qx z*em<~FZIg4|I59y@BfNgr%(3(H}uK=|HeMq|3AA=?ic6u$$pNxeY$_6Pxfmp=#%~b zfxepA*B|ba{r{0Z+5f+!Pxk+}_sR9u(I@-=SN6&N|5bhRJ|WsC`~MStvj4xcPxk+J z^~wH^?mpS?v9?e4cl7khevS=&vj5-hll}h#eX{?5W1sB*-`pqr|A+cy|Nn5G?EfF> zll}jreX{>Q-S^N&zOHh8vj2Z?pX~qN*C+d*_V>yDrvrVm|Nmg0?EgR1C;R{NeX{?5 zyifN3AMVSVct`qVKhx1Z*}rtGPxk*G@00!iC;DXnf3Z*Y|4;PE{{NGGvj6{dpX{GH z((j$|8rg0|3A-_{r?MG+5aDKW&eNJmHqz_SN8ue zaYJT5db=z0YKJTP|5v)Q|9_P$`~Rb^?Eg==vj4x+mHq!+uI&Hsc4hznT37b}_qekE ze}gOg|6N!1{|~sb|9_(^`~Nq)-6=k=L$2)qA9iK`|A;I5|3_Wf|DSec|9{Sv{r`Ji z+5f-KmHq$wUD^MCz?J>~2VL3!f5?^n|9MyT|Bt(}|NpQn`~Q!)vj6|6TQ>c0%$5EB z$6eX~f5Mgh|3z2!|4+EG|No>b`~Oe7vj6{#EBpT^UD^MC&XxWD=Uv(VUvXvMf8CXR z|5L8)`=54Y-~UBd_WfUSW#9j0SN8p1ab@4Xlazh`4N2Me-&L33tRK;&tRIP_tRJ08 zSwFgxvVL?YW&K#2l=Y)0DeK3Eq^uuqQr3@wq^utsld^tnPRjZ*l$7;jI4SGLNK)31 z(WI;&>7=Y5xumQgdy}$$>`Th}u|Fy6$AP4*9|x1NejG~5`jJn{`Z1oA_2Y0-){i4e zSwD^@W&Jpol=b6yQr3?XNm)ONNm)N8lCplBOv?IkIw|YN8Ex-mQr3@iNm)P6CuRMp zBxU`mCuRMZO3L~%os{+CVp7(ROG#NjE+=LExRR9h!|9jxqoH5ckH&skKW6vK`Z1?p z){nXUoHzYGRlnR9%qmRPtREfyvVN@Wm-S;+ zzpNk8epx>f{jz>^_RIRw)i3KucfYJ3Yx`yW=;@dBV?)2JA8x;_9|Qfeer)WQ^<#6t ztRF-DvVIKr%la|WFYCu>zpNkWepx?q{jz@S?U(gqU%#v$`}<}6IM6Ta$H9JCKMwWF z`jPLK^<%tW){n#evVI)tm-XXlzpNj}`epq%-Y@INiGEo>iv6;FO!Uk8ak5|5kJJ6K zew^u-^<%PM){k@jvVNTJm-VC4FY8CWU)GPQepx@J`(^#O*e~nHrG8mIF89m&aiw3@ z4<{w-M?*^1kH(a&AG1@ke#}Y9`Y|^p>&Lv5tRD+fvVH_ovVMe9vVKHTvVJT{$@_DpD*o~>jjNP2tZ0t~Ki?PEg*{3>^+HQ_VQ@hB{a`vWpo|@(COYuBK-+QNc zexmQaQ#=pR_ueUO3C-uM^pU0^|j84l-&Op zQ*!@5k>dM*`d&IE*U_}8m%isU_0sR|4E#rd`(y2ZeBLu4^XG;E&WoOJjedjE`JS_f z*{|z8JbrF)=Dc@={_emH&fNEY$k=)B{k*XY-upFU1MmH|vEldr)Y!;-|ATCklX#~zdVjz1>z^@+!1zAio{^YuyfJFR|a)NfM#&gvQ8$0juCSw;o{zhX1k1sGb{CLpV%4UgE-z<4e zZI-;IH%nd@H%nfZHfy^!%X)TYv#e*%psZ&NgR-7A4$68qdr;Q1IfJsE%^j5WY~G-( zXA1^pJqrxVdKMm(^(-)Db)S3{qdlzXB!7)J=;7e>)FtttY^c6vYw3$%6c|B zDC=2zP}Z~Dpga%l9hCKK-=M5#`v+w`J1{8g*}*|s&khaBdX^uQ^=y1l*0aNdvYs6o zl=bZBpsZ)d24y`vJ}B$ii9uPY z>T6Z+QGLUZjK9ssUgr!A@%2FS+RzU)iI)4py)A8$^{LnhGvz(JdPZ)c8XovAT zGbH0~a!AJSxgj10v~Oo9Z~T^Q`L^+E-@@aM_E&D<{ZI$b|eXG>hv6c5V(eJBm{g-LZbJbR|StA=GBiw?^?mKfIeIm6QKu3?$Kx`*|B&al4E8P@kX z!}>mFSl{Oi>-(HxnZFJUOMf2Jybo#KCx&Gl6o;K(@O8Ol+dGWy*mlI&RoiZ+zXkVN zC%Wx@WNAEX+hMG`P3N_3(%y~Rczt-Svw7Rfi|jYFEoSWSHp%~>+C$rCYqEB)?;7k8hLyJ)!=^ZPI@e8t0_ee|nqTC!g6S_e+!8WeJjF<84GF}dEm+^9ByNs8k+hx2Q+b;9Zgw}gf>piXYp3!2^6d*wq+j;$kbXI^L;B^Y#y_UpV9b}8vmTeKdt@h~FwFBy@%*N#ZLMn@i}zb{4a zn@6O*r&T{QBK{(q{yJWr@*(K*;beGIS>0R=? zncF45)39It4``f&yQCe5^fzLMaT+5x%yo%~Sxl69Iy0&LZ%S~&!i(0N> z^xHRZzc-GaB|F=hGkVV0xuZWecHZc}n$J5&rC+*6rC+*7rN7pWO271sO22Fvm40zY z<$Mf`%6Q#4D(&AqD&uuX;|*)P5sf#hdRq0I>U*`GeWN_?=zDSX+dnGf@4%>xzk{PZ zj_7x`_47lcG9L4zG9JfAWjr1pD*W+MPA;fxCCh`-io=<^4m?Zh8N( zK|go(^8x*QqsH5;c?@Y@!={|y8QI;_bdBS8Mt47AY1Qs$oQE10g1QZ1F{aS)X!I`-u(d?Cu={z={FiXm7Z_xbox!kUQF}vRnuP+ zO$W^J<@9H0-yA(Rr9*T~>rdvbWa)a&NPA{yq&;&o0m{G8nU~@BhV(o5=JO_Jk@^j* z9Z~;L^-pJ{A9ES$$GsWp$9)+&Z~HTHeILk3e;&-p^6B_TN#yhR?&S<JG zLQ2%{%-h3XIQyLid-#h|zZ2NQFTDLucn`n0@jH<{{9?oJEZOrX#DTjnq+iFga(p-|en+x$UtQGWiLCVZ$*lDM>8z~hXR>@>Pvaqbk0mpmiyN7|o} zavje|-YcIGzl7?Y&q%zkXCz+tGZJsD@w>+P)t~bFLfY@~QI6B(JgIiKv5ijVqx{@` zjq}pS*pL1~jM~3bd&*ea*YdoSzt-4moLSF{|Mk!Fb2eR9`uUsm^Pqmd$b3$J)lL2G zP`_snNW2fJ{ixc4+LzS6Y%JyXg4C1zb18TCLALaJCZAxv(YgB*a=b>5@6+Q4^mv^f zuQ$iE@5LO`zt2^>P3;TDHag$c;~%T7s`Y(R>c3X)EVb9Gy;<#>)V3Pi=xq8V_cPU} z`WCg@)IMqKHO>p4ly-hx^-rlSsC`-OSB!0RN}v4gH~9VQ*Y)^Y=9uzVzwfF2f!ZId zt*ZU0+6!ubZY=$!P|f34di-lW{;m4WI>h~OgLC~M-oM=B+^ENI(BqrUag%e0>Tf?J z`?zC=zWN=`_ip`sjoSOvKA?7;vDY|{9+LjZsQ$Ft52^i@)nDX%u5+G!k>8V1UgMls z3;iGeYscYhgqi;2vC|d1#_+wWw~_wI&pS?y{x%Tv81c07XNf=cDWB0_A#S3-EyF&4 zOWdklCVs2(H;LoQXNj%4@`bqc}Cv?^pj&tK)1_{u$}l()`0duM&So_1_Tx zJMeFTZ@Noz^HaN)DZh?*wen5GpQXQt#W8Oo{+e=#*w%F$@jt50yy6eVpZU}85MB=c zcM&&If6}ITCq#W4rWXV6B!2NJ$N2>1{~YjZ>GMyJ{yS>>V&F02-*9=-ng5CYXD)-z zZ1o!G%&7b6xQ)vC>3^#;+xX1v(?gc)V17#3`m=8R_s`^gsJgkmZ~?4%cn#-AX(Y z2ly4>v%ocCo5QQ1-!#jMvm7{1Z2cbueJk+uz^?$G1%4H{;kD9-yQsfzBDVQ22TrID zU*ivgz7;q}%zeVw!tJ=9~oHI!AnXUC0u@Lhp`$a0i`7(8q}F*gLB_pKJe(-gOZtwmunR zoAVg>)WC=T-n8|P({r)CzCwTC@m9)Zrayr>N2?c!?KNHjcIJ7ypV-C^fbIgPh;2S; z(6hw0Y##Jih-Y#D{VeDe&|d}JxfyaJw()NwwlM?XvmEp&=nsPKg1!~>H0aNRo(KIE z(2Jm-1-%0LtDrmcy|&y$Jd;1@QQ$bS?PnMC6zFNtpC`64^Ps;1dJ*)qpx20P-@XdE zbBmX=pV<1`L~QF?4*Vc+3jDW%o+h^A@OjYlpuYlo5%ja5S3rLibZ3DV-%mV~GqKG% z06xn>e^8mP@f5KwyA|~3fyapLIeJBPzTVFQzY6|0y-9N5_{)JG1l|gqC7zjQKz{|e zOl)&F3wnjv_VcT%b8gO?J^d!)nLYtML~Pq01^q$w=losJQ{cZvQv|&N z>;$|#1HdkD8aNMJ1TGWXwp2h*2fg@t;39AZ*tym7Plddgp%(9+Fn*io6I#EI=W z%C>oWsNLhS+dZHBTRc6m+~X{pDU!7 zL1$)t+0%4?t9sO1j^s>-?+tQ*L)cyMSxRcX>YX zyFJbV*MR-^fX`}=%fQh!UY>Dc+qW+0X<*;Ij&m2yn|!Yx1on4%WkdIQoTawen4v%R zxYX^{TPC*86j^%rXvgX)V(y>9yXjtNt#^Jy#MUPcTn4TI``1BP;5cxK*v8BPkAY7a zxCZQh$SWHnw&O5P{M=L0SInuU!YR<1t)2y)8TH4hEI*HrfzE8>GqVprkC&D2{S=K` z<@XT#9~Pgdh(pRR5XY52%l^cFMLF~H7cW=MTvOfTOykV@ z`-yGL5HXj1p8Vs$S>?BlQB3e>wsC5zbK99w=a{K+>Z?aQoq49Ol)3-o#CANSfV043 zz-8bX@l3tMwq5=WUb{lXR%f>U@vGSSq|~3=#cchv#5T_{_2IF^Y<!t>Xi)v z$AMG8S>Q3?GH?yp-wW}9G#=|W!>fzQXlUB6!ZM|c}HclD12JC;oS1+?I z8v>3K+c+uUEbtikGuzzCpflSx)`)FP|B%Na;1sdVhuN0Rg3lOm8Mp@Q-vaT0s5l)3CF;2QWa+xA`nAODkH z-_9cDd%QOvrST4WoY>~W%yGD`HL5eGz=zq^wF!K(pflT;FB5aULsV}~eK;nw_3`ig zeYWvKpflUt;>0|j@B23zhpKZQrof-s#>s*{b`@KnvikGbt`N`6rQlyvAI{&u%j??^ zaGcn-i`m9cfzE98v8&jYEt77quNrV@)Qit-*?XyOTd6nGbWr=Nj$AHV=e@fYmCD8pJ@XCgWZTvWJ z3V4&U|BLi2Pi*TggU=~tzFume`)So&;vGpG#w$Cig zHhvkn2LArE=Mw^s18*X>^^OtSbINSb3$yM2msRJnT_(1#R#(>MfHDG_v^A8c*n9MVEUBx#4 z6qL;Zj{%p7ZA@kxvqo%lX0|bzt-t^2-)CDkMEXn{iLE{c{>(OJS#_SnPpQ9IYlv+e z{|7yuMa(hTCj@${>U_<{K~Di^fydOJ>t(j>DqqDmfB!S$!}T&-J#-b@IC0W#A8t|~ z&TWj?&Kou2nKthAV)}_~oDi|~S))GY+5|nT{;V_G+{VDCtUjCrv-PQgkN;V(t`PA| z4#d_!eigHisTcGtlpVW@ZJaXrGuygqpfg+D|D2cGEMo54w*RFuKx}=OZTwd7i4)KC zA?PV$Tb9|D-2^^a^)YP(pJ%~mjM&C6gAcQfUjrZipL%sMTc26P+^zv`7cs9X|Lyvm zIQTPL|I}4%^Us3LZ1pne%vL`|%=Nau*5}kfzW};_pXWb|nEm;gG(>FM9tTbl&*VvL z>&k-8Z1pkFnXO(1o!RO&(3!37|BzQNv(-bOGh00lI*v4eG=c@)f zv(+!CZu0qvSJqE#eP*f7KKysiShsBJii6H<^%UsLR_DK0#>{cD>ceekwmxI3vk$Y? z%b+t`y{0Vw;=)&pe(*Y;y|{TmLw43OEZK`g0oV*GYR* z#5R7G*v5I5nEUztL3)M)y$oCf_8;`hhJee!Yd-F^H$`mg+64Nuz%MKFyjlkT8nMmU z{|PTnh}i0zh`G;s{5%W%GH{JJ{-pf7hR`RyKFI=?foC0(KH+DvII-=+O{$ys44?Ay z8T+)yW#Afc{4<_U3OEb=EU|6N80as9UIx7e9M604v%ocAf5Gz!5kF7Qeta#Af$o11 ze1KEHS>Q3?GH?ypKL#<0?YWDCo&v4`hsM3Kao{p=4cPyZ=N|%&6We-Ipl5;0e<5?i zrQ@`|1N;9{^f!FP=Y*8sOdJPJ0cU~7l$Vl!8Mp@QKP>UtCj=Y^P620u$CTenWm7ME zZO;Oa0hfXOf93hdfm6U);4$DbvF*m1RMuW0cU~7fXl!&;0wgIjsDL=UBGeR6mS-}2F(A?$@cjy zVjI5|I7MvxXA?269X!UfppOBUfos5in)_^=IB*uY4DA1c=N|&j0*?{f{L7%%fcd?Z ztv5t${j;Et0hfVmz!!*Z|M*{ln80!16!0cuTQ&>&v!IWGUIsn|J~hxUfbKu$+}v;M)W_mnc<&(w$?|Aeg3{<2qZoY?AX zh&czYcN6dh;P`}B_7t(rxkha7Z7zU5>+7CRoY;<&HK5P>hV=i>-cRcqu^pfOlb(MF z_+?_=BYN*sw8s6T=aV|^{ady%VE?yh4?W%An0s~NM~L|yRGj!Xj^4Kbm(k}tp8ptd z`HWZAKk0Gy`;fyAJa%eco&n(6zk5FZDUZj1v;RS5$0g6=&&X2S=iWz&PkS5%c7cn) z72xR4y|ONF5x4>z{RQ{~r+(?Rz49up4U`-AvvbK~7dQ=^2QC6vfOD^>XNiRpvz7ja zkv(^7fKLHm0G_qf^KS*-M1M<&?^AbONB{Qre&P0I*ElZyLr6P5)5!Eb$m)6EF#U}V zn_FcUy_;yzwvT!o0FDB?z-iz-a1r^#6jS@Q0v!E_r@O#u;5={0{W{${E|q@peZ%AGKYHx@rpH0x7;y3`w$Hp7&|{~4Gta_FVp}isjQ_WO zpRG@Ubju~+i-W57x9VYWUQ;MiGDPXcGYC-w5YR058D-_tX| zCEzM>@Si>Z7;px-09*wQo`bT$8Q=o3ZC44ndKKGs!S@5tKL{Knwm!@@W`X`ewAHJ? zz8`sd61aNa(}O>Tb3|-oX6QFVIVP`bC1798)0wS*5I6>$1kL~#fJ?-7oG{y%RbtM8 z&u^jb^aj3*b{Bw(Cob{(-!W=@Q#@AqjdK^bF`F z;0pLSuX=HO#5R5a^dRU_&|{#xpl3j@0{bp`@sq$A;3{zNSDt?cxCHF`Z_g)6Z2L0? zx(j+5I1gL^|03uW;41hy|Krsa01gt{K8%9y0%yRd1nj#EWr^*1PlBEYy$DOV2%m+TeMPmEiQwj7cuyf5dGdTx z3c3rN2F?)MJoBIzfh)lL<25sVMQqCkKo5eRB)0h!Kre!S3G@o+z6P&sjM&zd1TKJ2 z6?7l{UaIvE5ZnHY65IS^#5Ok<^bD~rTL7+tfABS)PYgIiY-8q$Z)=l#k|J<`o{Ov= zrQf@>oFwLY`F($1TGTSsICy-gQ?EEPLtWjaY1Lc zdXm`oPa1rftxx_cw(%>VJFoNn1He&Y>(6Xs#)xgbF6c?n)1YTS&x2mPifvsL(4E;{ z4gq4DLy*|!5Cg7&zjHm51r8F=lm$)#7s0;*?A+kR^by-QLEtK|@AaNf0k{NQA-2~- za*pSpCgwij`}qRsLHbQrTW^%umgV1SwYm#>8aNMJ1%HQr57pKcB(`x1z)AW|Q>&+m zt$#(Cub1Fl@FBLj<$;U972qndjqkj{E9)b+dI0nw=uyyJ;1c*`=(kgCoC0tOIQd4; zCrvz)KX3tjg7mwqHf9Vs37jXkeN_am5U1K{zX!eZVzxfc&A-p=Gl#y92!QSqv;H@v zr$NsH7lA9l&U`O^^eX0h2J6*&4PuU#&18o2Ui&!F?o_`X!1Y9Au zbvex*`-p8_0b(1U+4{%8rvzLDj<$IIE^wOI#>@kkh;6-9;Aq72cY)KudEgT9OdQ}s ztEa~nd$}>QKlfpAnYSKQfCKHG9tC!ZZCjY_T9yW#+3I=Fi@+7&!0lelAhB&r3^)m# z0nQWKd5T!0ewUNy+nedT(17wr;vloWe~zmDMbcxSr&SLeqqZv#5Eqq?5j(3SK7Y>{P~J-% zBR2i^Q|f2ce?od%c@ceAnO7bpE-L>GaYgxh`mWM>yTtD&_7QW;hv_??fa))k9#y`H zzRye$+wU5Rsy{+{MfvZE>%{gNbm+H7xqoKScb);|Bym*v>%?j0>*;&Wyz;}uMdic9 z73KdWcHSW|<9|yrm7gPyDxW2Gl^33%n94hdCy4EMtEgTkogM;Bp4ZcNr%~lC#A)Tz z#6{($^gZeXv5iv)c489eY4QmZTc4=v=Sfe1o>qP7*C;-*z22Ga_^DjQ*2noH&p!Yh zCbsp)i0!#ZfSy$5{ec&m~QIXu=WahMapN#FtC3~&K> z9JpbP7c&f;0L}rA6aP$~;-e(qwZ5(FnUjm)k>J?&JwhBJX*2mZ7#bma6fY_D| zf)BIx2@~77A_jT_beGu1NrF!XI0ycD@GlT^d->luFxz@3z`p|if&09=g2Y^w*QPM> zOrEO$gf>vP;Ga~Tuknof^SRC`^ZiL4{0rbSuFU7L0zM7*d-Vp0Z9llcIq=DYK0$29 zVFmQM`g1;kKlWmViESHQ&~wB#P9F4e_2)Ph&;#9GOcyvuY~$xaFA&@FG7df^&?i8z z5ZivJf{*V3iO+rBpv?UlAh!NN@QDGt;FAP>K-pYhpy$DVT=k>e51`jU54_9EAwkUj z!2T}i8Pz%eJm>|`OTZJ#X3T(p6@2R86L`?eAxO+Qa9v?#juQjj1^*oQ8fj$Z|xndd|P_XWP5-)CDks5(DeFAqMfE>S{#9Z-o_*^*4iIz9hHp|npof)BAA+6)P7`z4cTw34 z=mp@S`V`2g1bP+N_io6Cm}CBm^8r1q%=x4r5uef1w002Nxgxkh`usoV_?##)$C)Od z7_n`8LYd-}3)iNW!S2g*Z1n9nAs#nKJ5I6>$1Wq$k zp5bp(AA(*0E?vdk7Blup=bZUjAlN6&zvqxtUVF38$q?JN=Tzr?+6B-{z!Tt8A-+w& z1FC|L<9fP}*v1b6$AFW-8Dh@aj9bvhRp;DF;8P*y{%NB9l~vXGTJR;kI00hzd5nC5 z#5SLp`mlcz^fa+;R|fPv=mpSA#5U&&_*7NrK6m=Pm@#7Ze`vnXNfO)fkY=VlZ#hHf z8uUD|&8Gl*5%dzVJ@3pmX7wtzKE9Oa6JVx#pQCz%pvQ=fz!lxJY+yG02jfh1iEjN*FQnv*i~$E zNRp0h&(Q$r8Dg6!v-Qan+dK=Pmx%3osRBEH;`#fCZ5(Ef&+k1Nh;2SW@Ckz+13d|x zCbs7#2ma&4Hvbav1aKAD_qdl^fY`>20>_AL%p`Dz*tV+xT)K*FdwrWF&X3+ia|N+& zdz#qZ2WHfVuLb6r_`pT*FM(bKb_TteK4KducolOFd@mXW{}}irfz#lV0iD^lu?Rj@ z)wwOs`yd};+n-U;lf*X9H0U{E+gIbjMeuRn@5PS-r-3uXHhuxP2tFmyCx~smRnVOw zuPz_4joCnK{ez%K!9NCi5_o{vo{Kd2XTT>1J_XQ=;9mlL0{p9>J6j-s;+g!3Z4Lp@ zgTPVX7;q9e16&}s=bG8pRRW#a>eZ{*maUU+bMrkRG0nXC18D*}k3hdkNwLP;#;%r{(bMnNtKMSh!z45p*U&}@CDG}Q~oB*E+_*B)0b9P3& z_&#FJ|M3^;Ss3&nF~?;8DCjZJUC`6O1>h2J71;NrmqTW!#|7XLa243M%kvKcN15p! zDM0_$CkA>FI0IY&E&*48eWOqpa11yJoB=KXmw>ClzTFTXI0l>q&H(3`slCrqdkdhK zfUCg14?tbOVPZReVxT91Gr$Gl3Nz&p{vnNR(4D75e~fe=vp%B*RR0p`6KNTH{0tJ# zcsv2zu*cJ*#P93{5*Z!yqa(37BNfD6DS z;3}|hFVqWM04@PnfqlPCO61WQNJmjoSud z>k|f!f=>eUB=7)m1~>;?03HV}0Z#x|i0!pj1-%aJ`>>aD18@*H3>+o4F=L=7fRn%j zz!~5i@HlWunb+9~(CfgykI1$EIIVXL#J0}^#5T7e_=LeH2AlwPiEY^==mWqRV!O`f zKretk4tfcA0=NoX2X^**IW!R4b_JEWPr{%lfL-F5{E2Oz1K^VZJqLOL^l{K9fa|~w zAN6tz5Zk#T2znSe3O)(YUC@)D4*;jZCqr!8<@=bILl8I#oB=KXSCzRx-REgOp|!8| z$I80KB}upapJpG`4U_-VRgeD*ty2)EL~PsQ9PpkaqQEg?n?n*f z4L&*5xh)0oDS}T4^a=28jy`_P%x{+Zh;3Z~(3x#p zg2c9L6nvPiPYirq@JR#bfeXa8f0*q#DuPc5e3-3I1$?Tio9Bp6K)Z-%+68(H^dxWr zxCC4Uc0MWXHP2bZHhv5^L(F|;-fx3mQk~~{=a5{d$EtL$iD%*fr-^6Y|A1a1w&x=D zDX&iwz-eOpo3sVhP5*q_(|yFY-T>%9(4(NoKzBh;180bBZh6p)z!l&svCYBv8INPY zN#G1{k(kFGUoTZ+u9x2*2J;XHI0IZjE_maxM9lg8j$;D*Ui9=Ja11yw=EaEu`^LR| z0>t)u34$I2&HxvPZGV=4tH8dOz=zoOXB9a57hb&yV%x@~GLMZ6ue%@yxga zy+myDY&h)2PXH&CO-=JA#xwz=iNrvQ5JuRWg_a241`!EBr$u|0P&;3RMc{0pF$fUCrIUiE#! z;{Y-DiJ7}VPZD#zRLm(6+kC3Pu`hah>=n;HLu~yEz$NwJx~jmwV_qAB#I|fq`Rk9+ z_m$vN01kc${DG6iw%;kYu60xm!0`w|y9oY9bo__B)0K`fA7VK0lUO@EG3C;{0#UMKra&8aa97n0(uqnx-y?% z=WAYBAF=KK0O(O*7dT1Gx&4mfq(RRE7lA9lPSLA302~E&fz!Zw;39AZ*eQAOeZ;m8 z1E2>%&nf?o+EN0p5c9cUy$*WtAH255fGfoI{QAnC53@Z-LEtoS4*c_=7lA9lRrTlb z=}dU>eZ+ho`TcwV^dRUl&|PAia|V2hpqD_efFAg|S2n6_t`}n4-YT&jCv{-w8(!b~ zh^>DRI0l?&rsvksYkW>o`6c2KG5=OuX3*zUmCq78|4;lEUFUPs#P+_r2wY+xea@`{ zJ10H==s$XGbb<50%}boleczMfCFc}JWIs(cR$?kd3xoay|VdpqVs)A5x7Kb%T_>le&G2>fz!Zw;0kcy zhhEvD@=?Bie@0TZ zbztXTyc`;cZOkxm0(bz}`H5FH02~D#Ahu&KP0aao&UxSo@CjGIpV;1eWQgs#&Vyb6 zeVo|Nt3~js06SGLW&k(}>;k8O^T6Z8wp~TgE5OdbLS4X7U>7(IoChuvbHDM}s{p5K zp6=GY>n;tP2QC6vfSsRuWdp!bU>7(IoChufSBULcWw!ID^KYKcZ1n+RJN9x@Uf}Et)2&coY>aI{8b&dMewNrJD0pT%(m?TVE0$x^WWeD90hiP)4+M)!2fu0qQGfl z+n;&hB5(!Rz3jzF1LuK@z!hNU*IwBGa1_`jp2-I|@V}q~*NJWa2Y%!Eq={|c=7_CN z1$5_%=hHxJeFC5}+w&g1ifw!sbY`okuVNb~N4l*m`diQ61x^F!funQ*+4wGS8aNMJ z1g-$riER$_S43uFrh)Uo6=Hi{9G}Ml;3)A-Zop~a@oW4u^$s+6oF}$ri@+6PTW_7% z&NIBITD^hT>H%UKC#*W}OOJx?0uQJU&s}NIbE3UHlxraxcf;ZP^O=)QP!WoP%?nS2h3~1 zfpf&RY!UPdaC8=w1x^F!fyaqwVuD@)c3$hnY#_G&0nnqsE^rR~i=bD48(!zdj1teZ z9XJh~2QC6vfSuW1oB(iw*yitC4?e(AU>7(IoChufSAd-xAU<#u*ac1l=YfmB6=3J} z5Fa=S>;k8W?HJ1u|4jd_ZXSG!z!hL;4%7u41$Kecz&T>RrtYTSgw7M&9L81eCOvVZ z_%Kf>vwyTn{AucR62vynII%sC6Tr?*o`0B_efXX>3VIs22t1+wTvrA3I_M2^y?O)0 z+!po^gB}Gv0lEwN0O)DZbD-xz9|wH`xB@z;)n;H$fcW1n>ZG4tN~6 zNNm>>=gp8aaG02{Bi_fG0In-@TLKHcvQc0cI1QW!9w+8L=j*Nr`h@Cyz0`?02j2JC z5b!uhY{vkzJ$K{k^9dR!%+@Cy{C&3m3DP+}`!ier@msx^;gFYSUD;gAVNV|i4lnY` zR+_#33AA_|Rpz#*TfK9UUMxO5&YjzY*(X43*Sjci1-MRZ+r`XnF>#i7Wdp!b-~_St zXSQ)%@EK5@W2QmRfj$nLSn7=*m)OpMcl^^=eNVFYl7IeF}%X#ao~oxdVL!pwrxp(o&zp|Ps7{1vI*cEaGu!4oB%zr z($mAl+;;xA7zyA3;2iL{GGC_?z;$BV-sl}(d>1%JY<-Hv_C20q`Yzx(`kNaS&<(3z zC*7Ve=T5JzVf6`sZdmm&>9*bkv5hl8Y|ncRe2T>O8m|D?!NH>}eyTEDSJa7@X0_^-D#0QQ7 zCx~skn7^vmrVBo4;5={yucwBvWJ}H7;0d}I0 z18|VozTb|59s}J4Jqdam^gM78xB^@!wrzA`kPmPa*ac1l=YfmB6=3I&AU<%I*ya!g z-31;1pET%s;39B|*!E!sbSDlu0EdZf4ld{e#5`B<@8qOG&jS~M>vwx`(yP6?^1wx4 zU#FL61F_8^2zm@S37jUj^Hm1)Jm}-^^zJJf?)BnFiEUXIcmRBIz!mVRgYI;BaTf%CxspSnK*kD}Nc zw(**oo=GOMBPfVEKoB?F6?Y~O#SH}nK?NKzA}F|kxUk4X0t$)gww1>SbbDct&^` zuG`uDn+$ElwuHxpCxj=3$8NQGflkIKZl}A!y#`nDUQfien{5^0y8ldIE}9Z) zN<=&@;-w;9CfvExmJ`Eu`R=`y@Qm0lto)Yo2 z@QiTP#pX@mew{@;C0yNQ)5nD8;-(GbBAyVQ6rRTQ_dKhw=9nftZ`zD|2V9qgqv8Qog6lfyyrm+2 zraVn3FQA-zymIulCWf2sCWI%2mzAg2&l#NVwhp<%ONA%zwRKJl&)~YA8S0>Vcz$Mc z>WrKHDl2#Q-m|BTmkKWv9=p%hKQ25UH^;O0j~GUo%f1(MtH2ZO&=Ftf}6Z$!jli!^kukdH|If{K38~txx2^iA=}^baZ`SY zh!;F;+pS1=y06`C?jv5B0gO5M!jrh^t3~DU38X0zo)&3JMLZ+os-G>VK5oX7JmLAc zKEApRT}8Y=#FMzGPoYSY67gaYFTr)0El=S)J&|U)NRtuq-6F0YwcEy1=L;_o zUL?FkcpCTHM?1&mF!d=dPotj^l?hKJy*h;1#|&=zn^S0ybsX3GuG1uNlcoS)Qa(Ot zH+?24(iDk!M#R-qwj2jHd1E4;FX9OiFA(t*uJ`fb8yNS7c>XmW$IaiU&&PH7?!AeK z7l?QUH^)~MS&s`(2u}(x!cF;Q!ec{49dMH-Hq7fMXWbZ31-OalK5bn+BiaWyX<{Ot z5S|pC5}pwr8*aX0$y<+D$!U z!ZX6v7@Nky&HlzjJXgfyBAyUlBGRNqyi~+9BAz?eZYz%KYkkL?1N;Wr^O1P6+?U~{ zB7Fuo`&B05>O~um3D3vPekID|`rI!N@uWy!B;w9Eo3}uCk?;)e*GI%-FWGo5Zt4&h z@q7_ahG-V>L z#@q6>o4j!mPY5r<&302Fy>?U25|Jh?;@VC5u~%&RIBwzz;YpFE2shhJi@3gNGuw4= zlO`tO`68|++HJ*zm*D2wrzVLs!V7UTuPDOxw)D7BEaGai$SXV-H|gUdo)Df9uBO;> za&fa?`N9i?7nQrNPyST9tqgA3Czi5af}8r33Xc`rG-{gleB7@CzQkP1rhDi9aqT(x z%l&4&3^(ZmCAQrh+{EjPc&>=&iFg7xV{%s!Pl|X-cnNOG&xm*#ZtASvq*1Th@*Uj7 zVUB}3@VM}V@TBmR z@QiTvhAq><&A!J(JXgfyBAyVQ6rK`Zf}1i+g=a*XG7(oZY<*(FcCTD~v-?Z^k+>DtS5igVRw`?6^Z`<}M#(BKrKHE&= zW?Rcee7EqxJexjGcoH{lUMS+l!qXy+ns3u5g{Os=;kwP;_FrHe7l|~&%W$);*kU`U zjSElUe*eMseDCku`7Ic3#^ki{_!1k>!_D!{$4xyGB28D3CMn{DBAycQVi8Y^_;L~7 zEnF@2>OA}o{x&;q>J!6F{o}&Z!ZX6laNSn=8x`$)%fFvg@7Z!3+@y(#cwBe_H}?(& zxang_5l;zE3(p8w@7r=>xH(4J^)dQ~{Vl*vn9AK7V+gGo)PigBCgW5 zK5<;v+3CdJ)x=HRx(Y88p2GG1hPh8E7V$K0+CL+Fw@4FMZp%;LCVf(PN_bj$Mz~sG z`$pEkQCcKE$ZKqYX$Zo<_n8;=Q(3r`473Qyy@ zoo~I1z9HgjwJkF#JS99WJR@AKv3XOtE`KTIYxnnEq{#@6ueEs-!jr;N!qdXlI&WLG z69E;&Oxs9SM;>DLjqq-@;#b55I-q zVapHfv|e9$p7289#ln{hPkwIemJ*)$!p7_GvfIiNp7_$HNtU~wU#YLWxb|G!T(jaL zo)BJuo9k?;aFwy;IJmh^<(9iXMg_RZTO#5a+_ZU_NTYV!crI@87T~7*v`AC*wXJ_i zx$A2|sqix4`Fm{of^ygCi-f0eT{qo6B_f^{@!T>yCyC=GeF`^yrUW-_>wII=m*9T< zTkCP$v`Hau#)@L$CAgUjmExwH-0!R>aZ^r8c$r9(_+F$bcfG%9;kiF}W$N~c<7OZ8 zMLZ$mCAg_uM#R;RHg7I&>RcjR?X~sE#r<;12J? z&lm9m;Yr-oIVC(Tyc9RbHzVTtf7MLclK=B+P0Pk0hH^(?{7 zd6)Rh#*@NR!b@ESxj~y=`;zkWu0X_-_*v!e2#RrYOw%G>hMTCE<7PT zDLf@SExZ&r?dcqEy$Cn;&#h&>sJ8Vo;m!$OT#w1QxH-S_g%^~&`x_$M-|mUlb8)lX z-MH!VfjZXf3*TMW#seo=uP;1Lcvs15ib<+*f}UzCGXbF0kcv6<#R3Som_`yM+fXwB^(no+rFm_;TU9g$FJY zX3i=zxtB$xk@Q<>3;evZ2F>d*JF!wrH$v8yB0`p+%On5GC>Ju07gz%*B zB9T5N;%VU-;p#fEUEy)z3E@fMMYyS3O2pH`OUu*f^E4ykWg@Pww{>uEU8YVS6Y;q4 zgz%*BBHXW!h^K{@mZx#+BjRNu?%ZJOP*Cpf*djdlMlX#%7xK$pmsudZNVs#8ty_M% zyXl1&2``oDTiLuN!t-yj@gm`6!i!qlG^N6G+t_%C@G{}~ZAF?}t(OVUZztmItry&8 zy;OKX2OBRD?sT;AeBlMR+jxm^=MEb$5MCnOxzna85?(4ix06j%BD}P-jpuf;UXrk0 zCOp5Zjh6~{y4iSv@KWK<-6D$)49jXtG%?`b$>4CZp$nc zp5Md93xpR5FA-iUysX^ywhDUM?dINR%PbY1d%umB^s-(myiB;$+os7Co?q_nJ_;{- zK%{@rdXez5J|h08^)lhk6E>cU>v@9yCg15V;=&6C*feDWZJN?S|LRN1uczrkdry%O zuAZ{-nDE3fJ7y+@r-Y}4XN0S#ZQi)>gz%*Bl<>6hjPTeqww`g}3E@fMDdDjXMSX-P zgeQe3KDOzT!c)T2!ZX6vN}D$(JT5#TJSjXSJS{vUT&=R@Cxj=3r-VBj9X0(_@3~y* zR_kTLoozOrE4)N_sqlhbHhqzBCu8HKd#slU&o8s_l6}^T4p`4UXgzhdRLH zD)E=2hSc-+B`G{3T>Wj+#DvF%CxoXehy8o=wD62@RmG->Nv~z&sWZa%{zZ63xH{9O zi3?8%FFGsiAFtdd)=ST^p1RDIlWAe=pz^K9gvW&^geQe(uC;kpOY5=gt;dCD+Sxj& z_SR#~FnjXjl!I?)9boVb+r) zY+miU?{!+mH!32YE|2deuHD?X#-F8}^8T3+o)(@FuAZ~$W5VOY)ku*>cv5&ucv^Ty zxO(1}lOApBoDr_Z*m!K5ZL8R98;=W52u})62~P{p2v>7#nQET(7=F@oN{t!9{9MH2 z!V@BmcGLbz;VI#1;Thp-zRepG9v7Yvo)n%Eo)(@Ft`^wxlkZqh2~P{p2v_gg^l{*(+@l9U8jqRY{Znkmlx<9}F1;2y)%=U+b@Rabh@QiS^-R6x6PwcSqr0}%x zjBvHnrca*{@yFqeaCN4Q$Arg)Cxj=3r-Y}4XN0S>MESzw!V|*NxNgIN8Ga*ncEms5 zW5N@{lfqNN)50^tljqp_q=YB0im1I4%m2F%Z6bc3Pqek^lfqNN)50^t)vY#fx?@Cb zp3HYsKhkGz_q^X;_VEszM!Ol`;=+@{GhJ*w)m_$O30qEFc&fn0)50^t)jc*%On6*) zLU>ZR8W!=Nna703g(rk3g{Oq4g=d5(p0VX8r4P69l|g+UAXov3cXd6T*|i6Ju@Oq;NIWmJ<^m7oHHF6rK{E7M>BVQlfm} zap4K!N#QBs>FE(Qy;!N8N9n__+kJ@%PvE9KlfqNN)56soq8#ZnY&?PcWeQITPYcfo zS2JzinDDspgz%(rHB00b9v7Yvo)n%Eo)(@F9-Cv!j|)!-PYO>jvgtFz6N_y;DLlTy zJ6=PAK^0$T(6hjBvGClrKCkJRv+OJS99WJR@9f5#6hjBxe2C|`JdmyIWcCxxekr-f&Pt1oRiG2tpB;=<#?6T*|bZTgh(^mjI%5w5Q#*=+DgDQ4hmVaKSaWg(=gsVz69uuAxo)NApi}b?d!V|(X z!c`TKS9n}_vYJhk5}p>G5w5D+^fBRa;R)f%8a91Ocv^TyxT$Al+Oweghj^u;!w z5guz{<8k2$;Yr~s;c4OVR<@jk@TBmR@U-xZaCNgSCnh{DJRv+KJS{vUT-_qd6do6z z5S|pC5}p>GXl=_(3Qq}73s>!I`k3&z@K^_%CN4Z7JSjXaJR>~b(Uy}Cp1jY-Q^M22 zGs4yVHhoNZTzEowQg}*u@*!JJN_bj$M!0&|rjH4a3r`473Qq}73(rXJW6M{4ttW&h zg{L2}X)?l9KO2t;Pd;wrDdB118R6;)n?5EyE<7PTDLf@S(chMn6rK{E7M>BV28g`E zQ^M22Gs4wCn>QvrE<7PTDLf@Sp0wp8geQfkgr|jPgsVbZPE2@QctUtmcuII$ct*H- zN|Y}=E<7PTUS!iJgeQfkgr|jPgsY*poS5*q@PzQB@Rabh@QiRZOq4HNJuTwGYmN_bj$M!0&xmJ<^m7oHH_ zxXvv+HEmL-Gyk4j=fjRlHLddr|K8|&EBD`9>Z~Tx#`Vr_%Ddb&ce{R%`|rK(zdhZ5 z?|1+0?WP~>{##gQEhS8M%UN4jm-dtU@6o#5hVqT{Ne}UF)=ApWKS^)BsT;{V>0KhX zy8qte{@dG)_jCUp??&5kMlWS|ebFQVfFRl&+=uK zC$b#RlGg?56_&XyC$K!7ivD0 zrQYB1EcO1p!jeC~r6#b{`#q86B`hbgyp-i+mT{I-SYF3+D$CX^Q!EoKi&;LzavICW zSx#rE_pgLylI5!`i&(zK@)?$|vwVT&8!TUBIfLaSmNQwt!EzSM*(_(XOtYNBGQ)B% z%Ofn`WT_keEtb_-zRfbpa-NRUH|Fal?YTfNv-vX=EUVCf@3JhaqSQi`&z+^zqO69L z)&g|xeub)JI1A1P{z#v?6`q9&un4xn4{YJjEPlOzoKjChF}x0Y!Qt>^!+4kso!Qzk zs98;^i=jD;h8ge$WL0Nda22$JZSXrZDW9>00N*)zAt$ z!2?hPBVY=A0vDe|o!~C$4gFy>d;~k-1iI$=a04V^7Q7A1;ZxWRN8xx*rAE*R#=!>o z4l2{78$eUI3Lb~iPy%1UA8;F|UoUtA>c*71657GjumD!T=kO=oRbQz=FdjaHV^FC9 zPov;+XbJ708}x-FyaKb~W2i=5oW=Aa0F`Sa(#fCp*Kv2Iq)&;g2NDM z#IFhARoDu(PgANfw1ff}0K;Juv}w#2KkzjKPFLz8xB=dPPvIx1afVW-z;)0O2E#O1 z$FH4goyRYup$+tei7*$o!q4yr1kP8g3gp7Y&<+N}P*@7v;3o)Qz{m(^!X6vJDv7Ra;Z``!Cmku41}j)D_nRv z=Lj5zepgb@tCZRd^{-Z{HRLo?Dh7?=GI$TZ11HY^hT)Kb{qQ@~%Hw>2VmPk3QddB4 zcn0RdHh3VPa~f7c@LEPy=y4r?aTBJ&RyceU<+NfyU<*{fnYzL)Fd05=&Hh1?w)6oA zwqtu8IIo~FTm<*Pqc9T2z+12ez6I5hx2{eYQ;SuN$^WlB?7}mj$ z@DJ23ppU|ID22W7EBpcBdpM_H6&!<_-Pyl;Dd#@MCfE#rLGJzZBj^V&!E|^BO5tb7 z>cxJ*70@2~!*KWrHp6%DGX#257l=bgcmqCzZ{as+`w-U-81gVNMrhS#V9y&uW=mXPXJNyX0fO>>BfSxb{UV)DuW!#0mQ0X!H9;D$ARDGO%fzu!k z9iaOY^l!MJzfupvNSFq1!^f}{_QF399iY^ya1mTTkamME&u^c;S3LRlEya}t|Yq;S>#w1t(r;KAe z(BvhK8+3;vm;rO)9asVP_N2h8=LiWZDOQg1@2C6vl?B>@Rdkar|H;EQIrlDHjUhlxg&d=^O(n zhFK+y)30(IV9aZrE3gmxzs^_zOQ96D!5?ta8+I0V-(WLt0)Zdt_ffxn>rV$J~wETN5H68sEJmohhml~D6N zu8Xh`0`JqlFb`^ez;S|7sJo0~1)Je__zSYq9A{_@S3q;P4<3SkFc6-B$a2~fdcz7h z2B)u}Z$Z-!xl@9{um+AVrJhg#FT%T!{Sn6=dcbq=CTxNeKW03FAEDPu&VTq4YOSJg zLw{HZe?Y6%oXfBgZdyY-z&^NkEyoUifQQy`9fxZ_q3loDHbmA_KTsQJFIWR7Y~+~3 zgRl^`!q1vb?AKr?3Mm?^5as*bGg-WWE5);ULuhit8!Ngg}OI1Samrzou`)ItcFJ zyn$l)0KS2%${2g0KfDC5L)JHJ7tV+Ia13t$ma!M6!wR_QJN5~Nz$j18M^tgdks|FNHqG1=L8G1DjzV{0X5-+~va+ z5UR|!papD)!%(S;zUvLBxo`xo<|g-c$l=!cEEods!3Jnlo&1o3<#0odfZ7EY)(oi2 zU(MqRQ#L#VBj7FmOAFiKqEiE^Ih-F0s8vv}K|tLJ z&%?X04)%g-$aWwOt)K^_U>5{)1L_VK0drs-)NaIf;Z7I>`=IJ+0d+ZafT!Wk#>bA9&G{NK)3S)sz3Yz)h^&^7CZ(+VHUgxhoSO? z^xumE>iSD)3-}oRfpeSEpWrKKd1*jB1smW1oOoG4-FG?r4@+Pbbi9iFf+|;&9v+1` zP^DQwJqY9BcQ_*+P;Frd?1ann=npUyK7v!42h?CFfyMAC`~ZibPYc=tmckEEE1!M~ z55ssk3};_M--98r0z%jFL<|PQcz7EYLK>>K#zcjLgkK}hwvI?;1D#qo&E`};8VEc4%!aB zg`?2!&VafXHo-pV+KIjb6QCH@LZ!}Z8!mv3&<}>dH24PcyU^F*1y}-KK(o8pCQOC5 zAei77!aeXXyaTIX1N;PIyVBn95gdX);Gu3jt%Q%^I~aF2=NP;NrSKE{1=kc%CJciW z@C_V+?0Yz`;6rHBo&AEF?xpSFJy;97U=OtI!8HOthe|y;U!e!Q2xIPJUtu2n0!N|h z{lwu-SOGskv=?I%^nsUQ9sCV-dea`z@&WoIw0w}h2OXg+41hObI~?~g^@YD-<|B-i z{dh7A%^zj_fG?riV*zz0JkXzO2GknB*ao)_45+){2dFZL@gJH(0tODIKf)Av6Vk8+ z_Q0Yf^@8p2Jya@WyKpvK1BEaGO5pUTs5d+an;||VpxVPcSPlE3MiJYEPEZI7;8XYs z)KJQVLZ~r}{LmL(gl{17G}jKe09wIlSPH*Fm*+SpFao-bWPE@pU=+-SRj?BlJ8;(7+V;2XI3 zWzK8Z0w;{;I{ymSBFLY>ST>O-_K=2caOot@Gk5}u;H1g4C0q^HLOXa37C`nCp02}O zSPFZf)>O_1D1!O$F>HXm6#WU>z@6|e1d1sKE}h0X0Y{FfyUl;-lU^VQ4>(Yz?Fc=QQCCjNlya~(TxD^3aAM)WwXbZPP0v>~RAoL;Q zBs>XIpk68a1EV1F5q$#MLEguVW6%X2fl;t{CD)r(><_eEO@DyC&>vFpA$$Ud;7_Qv zhGPb!U>YodBT#)UZ3WGs1H1rlLA`af0rY@EcnuD~5g7j|V*u=cyVrAVheDVDZ^Ccz z;0DTq#qbx@+DJX1!6xSL&>Ff!e;5O^U>+=n*EdrK_!y4CWm_2Yw{jlC%kU#yx{Wac zF8Pc;1rKazzhD-84ZlFm9kdx#*-2Z%MY|YN;0T=YCFdl(4Gq4ceW6x{x0`SdTn_ib z5oo!au@~-vaWE4$!mh757ogG}_6a6~Q%2cvE<6ZhVG1mO$=}fDVLf~aWl-x|=3CGl zT0)PDLc?1mrV5LEkxy1~8B4_<`DunwvoVElz# zI0vqTo8bYd`78bYAo~Qb!EQM75M{w|c38rbjD|m;)<4`!KtC7)t6?_;`F~a6Vz>pKhsCfR_P{a74+Pci@HA|LGB}Q})|7G|3kCTP#{|{Kkn051g>Vx*1jAr01j0d88_tDh&;|O!JMby&foLSi7XU%E z91g+>SwY@x2h|6#6MlgcvV&?SRE`GK@o*Mg1l{0K7!QkJIh>jkH5*V_*?Pss>d9xDq-;9~b~7unzXXpHR12P}PUi;d&SZZ^AN&RHw}#7cPVQ zU<$kgYv3#R1FF{uszy)%<6$H;LVKICGKS5UQpgI{E!I{t;Zi4Qx1NK3U6N2hy=nc=n6nGmxh0kCQ zL{4O%;Zo=V4?;1#2}@uN1nUGVHvE4y^!0G?ZT_@ zAvDZon{Yck3NON9_ytaB#JL66!y_;WmO|jPpn3uRg656cC+G!*Py!2K1$+uQr*o`f z4V-vJP<;)dGZ`CTFpP(#unoS2nrG3@@CX#a4!HR2plS=<;AvP6ze2c4P&I})6u@wp z4L^W7hw~BcgdXrX3L01B21cs#7fY+FYqDzafc>p?%w(AOc0Nds2ydb`1XXr5`@het!E7Uo zC)&$GstLAYnP z>VCGOtyPHYS!KSYs;VyM`>-oiZFMEzW5xOQDo>rMnya(;n(A_OBWrF_SE*L&YBfkT zQ%{m2Ns2;svwDi}tcIwze4li?dRi6m%I_Zata?~Ir}}b@e37rH=BY929W_>c$p2cS z#;J{Jy!wH!seV$E)qXWa9Z*x%K~>CmQ`7kU#dP(TdQ}AjuPG<+x(Wwot4e{lROP@t zzN4D2ss|RRT7h>|oxr=QZeXFR7g(%L4!oyMufp>$)2NnfS2rLf90!xAo150^K`+l%d;Dcb}z_Q>OfpqZF!1CZ_ffd0k10M#P z2TFtaf%U;_0^5Su20jb6415v1CGcJF*1)g94uONgI|GM;T>^gw?+X0IBcXqST?5&n zy91R%1%axedjd5=-2=5lJpy$?Jp-qN?hDip^$Ii$^$s)&JrHOddN6Qy=%K(lp@#$K zh57_84D}6M9C{>hd1!Fp%1|o6swP+d>lp zcZ4Pe?hH){bPi1obO{v)?hZ{0+!LA^=n7eiX&0{Q zv=7&C?g-a%x`a=3`iAQ`{layfN5iK&gTnQl!QlqZkZ?n1Sok#OnQ&w0x$v3JsPI|N znDE)oxNsBarSN%9N%(x{weSVb8{rF`nc<6^+2Ko^x#3HldEv{P1>vimh2dt-qHvzG zB;4G2FWkae7QV(=9=^``Fnqo9QMi@!ak#a!GThc#9d7Te4R>%p3E$zY4;MHa!uL2E z!#$lX;a<*X;oi>n@B_|{@Pp15;fI{v;fI~Q;Xcm3a9?MC_z~w|xSw+<{HSv*{FoDn zJnlpyPdGV|{!Zn{0H<1Hpi?t4$T=bMq;qOyu#+1}I%h_na?Xhian6ktIp;;5b}o!O z<6IIM?lg^za4wBJ>s%HY>0A+c-nl9=%DFo7f|C~+&NY!G&h?R%&W(|E z&P|bx&drg3oYs+R!fhirgxg2%2;UazAHFkE8157q8txn!748ywA)JVe4tI;p4&NPF z6)uRZ4tI~#iu8!oj+~c$Lgf7H6C;;p*Nt3}eRAZ=>{BDnvg=2l%Fc}p%Wf2TF8j2| z%h_i~CS^B?OwGP9Qj&d9WJdPIk-6DdMCNBVi@clNJn~+4eq>qpwUHIsEh8UhUl;i( z`-aHJ**8X3Ww(l~%f2PDKD%{fV|M4rj_kW4Uu1WU)QfhDYC6IW5{V(l~m5 zM9z)&ja(3YByvf#U*z)WW07Xj{*k=sz)17xph$~oVdUEAQ<3YV zLn1dtiz02KLnF6FpN_PPj)-)OJ{P$wIwsOJ`cmZX=*yAr(eaTU(N`k9q7xzyMyEvj zMyE&mMN1-&MPH3P5q&)}Ao@mRV01<#8J!s!5}gwn8l4+?I{Id0cywOmx#;}JsOW;o z=;)%zxai`@gy?&b;^+sF+0k_5?dbBz;%I3k9sMZsarEQJs_2@?>gXqtwbAvFbTR`BoqB3 z@^$pj$T!h{BHu+-*1l*UYk#z6)`4hl*00exhCuKoR(S5a<0qD%eg+QdCm=4*X7)pb$!lFSvTa|l67NF>#SRHZqI6) z(BL&*`2uBBw{zb2+`Tp3iwOYi!QLSuf@E$r_*YSk}ax zC$e768JIOE=gF+Mat3G3%NdgOPEJwQ!kpn*@8yihO6M?%s>#z6CR2P9aVz&v+1j3+ z8&W@2GO+`$)#ksq;l--%)BX8wxA6&Z8t~X874>j1}0tgH$&=}yY{i^ zAyvDw-bRzDCiV#b4UKkg>_2bg4(1qjYU#WUeH&WeY~z*ukScQ5cDan1xVyD`k8%Iy z*12G*Nw;+-&#c^ZRi+uccXg;dcHmR9mpa|d+Inj?-H-(HK{pmZDWu+Y?eI9B<$E#q ze5Gq`PcxGPW4ZA*vo+gK?VdO75K;rL)-B$TH+Nn;+jP3^y<=Xhld+1&mMbz z*cpJ$Yxnp6&iQczGdyoBwlj)bUNl#1d$szDS=!D#-3I!tq-PyIHY40S0n-!1pBmF& zmwo5v(C>o1dEI)<>tV+inwT!{*MBS7mS@ejfo(r~_Skk=&uHuIQAO8Zd)#b4Rc{AX z`{sJz?78srzM#6Ug^tN9UZOC4+9D5MHq+jUw! z*QbTCoNQy8xp(o7$5G$zy3dTA_KI!K1$#{?^{?3W{IJ*G<}1zBWdv^wy=~m*&#AXn zGqE|o)pbm*7G)Vb*3#Hw|E@^CJ@LxxHo#atKeqA*6Km$%In08*97{VH``WjUc+2js zwP*J;f17l+PyX-EX?tC;SE0iz%qUe+kEm$2ZqKNSu048O%er3odz*L8=e#F$WA@C` z=SNL9X3v?5`n{bWR5WHEzS6WyMWblRo#x79w_)#2Dr!G_Phv+4JGNJJKVwIR3usAi zywanTXEtVQVB62$uiE?C0>5umRPujYO1y$n?t750VcZtqpD|~d9l5Umk@r~c+DDf0 zhQ_sZ*eKUtzlFCKu3hp$P)%^{ldDWA`W>y;WA}V%`tI=S&DyEA@>QCf<6X|T-(0)y z4RUzKJ+X6x?l1psU2I-ks~Xhw47ZeHeyyI_WNL7fZ`Hl|a~3lm@9J{@e%=GQIX>jt z{HNyr;fNHy;b%qFboXsV3GBtLDbyGtASJimoo5{3l8U z@0hlKbxNrGKGZ&2vi;t+Mnz+Z9erNCmv30yyQhlAjf(cDq7md}e^jpH-&LO4(DawF z2aJ8dLvM_*`(a0cFHSHe>)!NN8{N9PCB43;N2E|&9qTm4 zq-$}^T;F!{mecFcEBctVhe}K=!W%H-CsM_*?pVq-#zJl8|3bX9g8bEGMyO5y=NXneXHn6M@8dvMMvMx9_&oP9yfc{ zwbxp^A6@+CP4=1Af8O8mJT3ED+@{le{;mF8N4D-LL-lGg^Ds_VcOcytH#Yd!E~~){a;946yGP?6V9z8@97A zJDam3x_x?7QA^snV@0iDYj0b_*4fS&?UDKHD8GkwpPpaDtk1Kl14HH4o)p(I?<&-z z3*UXY>7JZx>=M5J^kNHq`}SUb3+kpT_N~L^CiXhdfxNXv93Rgb`PO8tDeuJ>jE&%% z5ii}7zFiPAHE4dfNvCIDqwdnjd@pmAiLSMKjo*&Cc6b?Ad)Mr9F8k)f#tQuFpnaBM z-+I{Ce`_|ce*bneEyAxwhnZ`9rB-HksGs}1{(xS)AlE$U(C=sFxUt{-Sd;#I8Slnk z@?$N2;XHC4cV0++;il`_n(xH#X^Wb1!Mn5BuDw@B;p_Mju^M{r5pU)9;16 ztI&$xe8cOmZOW7A?XFGWjop{7J0eEF`#Ynj zxzg44W7$1S?EbsVc>4ADkoxu!UDH{$%wEpLYWCBy2lwzLm1~zCHuo;qb9`63u>y{- zXSI3evEGf9o?=S*9^2~1{1^VP~&) z?SyCe-P@zO&UPHHXr^!T+T*6@5f{37Z}Z#5uKnU8(>v{(J$qfS@BQq1$zOwJhOF=3 z+PNja-PP>x0xapqKA31)t)iOhcU0fG&lq(nFS$AFQLwRhczWp_g(Z=Y+Tf;}aI&%f z*=E*ab5wK$_0bAErrXb^tM;mS!}~|V)c#-BdiMb~X3xBRJiqsj;C^hqTe7}t>~u~4 z8qqsLTXUCH9-C_3AK7cv#k^1UMrC{4?*EoMxyN-)wQY9I9<6kN>EqALG2>tFna0-7 zFqZLSt9-k`H~SoT!!Uk(F+gu^3-_z-U3;w{q&m5#=Y)5=_WV-5wRWumW5mk?b&fM= z(UJ7I<|{5%B%BOu0q~^9AyT2vAcFHdA)7e9OvC>-mcqw_MCd={Mgi%JKQIA z$%D=fsp^BZ*|rMtRQzK%HuSQPnwr#W$MTiuYpzYXJfvoOG3qkkwJy|Pv1@No)Bm}h z@8+84jWo8!?UDI~caZ<{k(rbUswU4W{%`bJvv2m=Xs>zp%Be>N?+UA9o^7PnHjL4w z=<{v2Ys+}P;aSzq=133RY{o=={(3!DUnRZoORgVkO0HdGtdnmQZFk*d&ZvL;=0uO^ zOJC7-vHOvIgum$E#_UyN-akRL(v6Mt@7eQyHOF!n&-A@E?LNZT`_0UG6h6+>{?c*A zhL1B>_P@A~&z`Dla9PKYs^Z$3RVFs}b`#s%jo-GoYfts>2XlPeP(7&XxNFx{;yWJK zCSMRzUlr?;Z=wd?IsJ$Kd@WFFwsDoe-P(uDGk~9eHP&DN_e1~g!OQzP)}cg~T#1ss+E-;iI=ivI{r#}}+k2I1-M9ViF7m(Qsi+NX z3*~*m?|NqHt-ZX&9GO}r#=e>zRJXcocUGoWuC1&>U0l<@>$uys`lp!VHu!wL;dWzs z?%2mQd!3oc8!YdrK1VvQZ!F@gc&``h?|2?}b5zuGY`Xuv_8p$M)_6oP+8ew0O@(VKxA9fIYqm{4?Hf|}xv^o#^Ub?!*Vg10F0R?*VUKx5$ITwC?Hs|4 zZeIO+k4Qbxr@SVZUqh*zRwx{pYr?Mos^8)7`?63B0ZM z+#V0xruN9J@Q-grdt_^0(Z1>0A91%~+r_q@-OGwv(zb@(b9)r*af_yz$IjFHVUJct z$5MZ#ztl}<+t2Q~-QWMVO>Ilso^9LIwxn&p>>_6H%XLkUXXe}3wTgP@RV(?0$i{z7 z_v;hp46tWeL+%m1^R3!cGd9_?r=oMl=C$XWJU}bGfmHBc_xdlg$huYof7lCmGXqiA4j{Wz%xg&Uw7`^-5Wd-I}ALqcpvSx{qe4KY!fPvy|dEvb~|6wHCV;F1OAQ^KPT~e z@%-~b{Ay3f_LJ9(UDm}Mqm5r1o9(Y{MXkJa!?$ur>drfJyi5`yn;L&1*{@%6aMa*u|fiTG^*> z_iizJ*(hkN^pI)Ytlx|+C+6+Z*?Gne_2c_a=JWi$I^QOg@y)Co(=(5&UDNZDmagf! zSzFhFJUQ`d)#6=adY;KZNH|*Ui4#s_*TH$mTtP=sC`@4 zI{js4b7$=1SD|ifoIl4Lz0}m;s>jS8*>?GFTSI?|dfchHeiw4J_qK73-+uo(iyXig zul&U`dc!c+^n7x(YqpgB%u2oT>`}0F8N#_R$<6WS_x#4rwI6tw;I-+oA59H9o?wo- z9j_Mqduiv6`U$R=SI;rMdEF+iOx}F0*89x=>gzhc@*Znl)9-P-9QJ6P^^G}hTi7?R zznsqV4bQfWG&cM@V}V2Fd6=Ei-doeGwLL=5P`nn>v*tJ48t6HV*RS+UX1*KKGZe3f zZQ{=L12=Zew=tCL#TH@SSW;1swf)rg-7)9$chd%1rjk`nTqr4rZ&VJbR z(`6?at5MI`e>)$tS2{a0s%XYj(H*Jof8OZxC-Vc(dh=AxvogLB_RQY7>bbz)^Yp$o zooMcC&OOJRJzagvUmH?~-E_sb2g_}bZ^JRK@~kEHk6X&Aear~_ z66w4d-e}A_%WC_k$C8}$b^Y3(XwsEoUaU3d<;db1@15u4d0XYp^$soP*`~X-JD%qX z>y{G9GBx;#yC*Nl-iOVe7jR|vV)ygT!LuzKb8j0f{kdpGvu1l$YsmTAs;RECJ!foQ zJNvS8TYcQTZRoXsxOxBoI|^PY`Y3o-(NTD|Rfs>?sOzVXhd1Na?HqMux^+F%Endrw z>0{)XJ#Mz`D>`ofdKA1pvOQMMy>laAUd#*Se-_;8`Q`dVT1$ zaUAI@bSbv&zkR|Sw+TEc>U_0cYri0=D5jrAJ@2MFInUfB=%e7>2k5o6Gk?w5MV-GDdee&9OjXm7PY$JcCNoVKx75zfX&cZ92Q|FB^rJS|Q*wQ1W zuRX^c!s{hYQBZx8ulMq?eVj9{{qm6ML;vI$TU+0l!;@q0jIyo!ziG+%^?GZ6Kgc}C zwTavtw03Ry4pY-VCx%qx8~*hOik9^6`1FYB)y1~GZ5MmA>=CS}_LuP0xHlKDIqdvk z3wKK1y`L_{tG&KI@@lW|kG$IN;`v6CR=Um|xSn6=T1%crUFKSyTKp{w*H-Z~YJh9C z$Md%uTwB!0w64Aqk87_>(Qhdxy7o9UB-% zb>10J(RHSxw)$^lJt}xwyPuxp-3Qp7Q@w!tx#M$1HL&|()9L5lUJly^_UPMdsD2vn zU3>o9I_vi{UJm_+&9g19n=9gfTS`UgYTd!xmd^U9Zoigy7~FmFm$oZ7kN!_$_Svwt zdru0fW(9g{d;6Gco_)^H@I7O4t^XGRK@wb(F=&jkcwQKT@#f^n9Z@kj)487PZ zrXTaNT4!e#2oY(e^Lp(?FdSdKHbFFPS(Dc|P z?TzWbUv>Ba-5R=N?n(Y;zT=$u_=qOV;-Wf4lb9O`&qLdG#6Zt<@!ab+I+Q?lsc}`u+4ZgLR$XyxrKc z;k=WpO-R{qne-FBzWn-G@%QIL>Iv6cGj4d-Uuz?%-;7suI{hv7+DY1;@%m+MiV(v-8vZm{UH|T&@rM`uFz}O&kn2b$Jz$A&Q`stEk~ zQl8DCmw0x@FD6#>go&;A*~B{3HFh#{Juk<(_ZWMg_dQ4`_-bZ=r>E*q& zv9U*vnOg1j>oWf}vyFZ8jeW#(Brosz=Nap|%9Qd0&!D`uAN*?8{`!N7t$57Db`+T$ zuk-sOFURCTCf)Q^#>VqL#ap|BUkrP82T$WX3-Kk4XLtE+)s*?O7wgNtsb@F%R`k5d z(X`a8ZQsVkdN(#(8|v5K*_X}QvraN=uN`V^vVVMkpJTQ=!|xk=x|wv>Twu1ghdVT{ zR{!|c%iqS`+sxKFPcY@pXEyBRSkb`5vYDBCu}bUA+V#AP@nZXYi*ZNg#fmuzSyoBo-pUr|dF8{nsVo;yvi&JOQ!Jp0=}-!lIB zcGUx>E{`8HIXaIsIkKvmSgkt7IxR3Z#kc;x75lYc;>Ygww^7%(xm>NhT6N~0)3cyo zt6N_;u{Ztm@&WGiymWW?BT~rE+r*EZGsKiU@o8g6YZ+U7z1iQ{{*if<>xozLdOxE*r5ufeJQQMlH(aefVY`MuY}m`lHVaQ_b4@eH-N;-);VJyUn+2{FZ#tKjxSEXKkDI zro4mCnAQmRYlrx~{c*pypX*zeZ#9RTyxaV%WV=-+R>z;Ot$e}6R`7Je+sn6Fn?1kG zze2P=!K|%O+t?YtIlE0MY-Mju(_eFmO zm0D)jR{qlDZNd{=FGq`&#uoNBR(ZDB?h!w>&9~uxJ0InK-z(*QzZdWN*2G%+dl?#O z$~)~vW0n2(>*(9+v1aWN-(K@`T=l$J`>P+@Gs?u)`D;Jp{iRo{u8Yjt=X^Wjw{An8 zJbCG^@vkoL`{`z%Xi9l+r?E9W9rSX%^tiFvym9hkr#xxWeLl$8<$mm#AA8o1edXIS z-%c59^5*)-vV*_2HBY0wt<|bz>|}qBzRfYQrH-l9_p^*mUT^j{_XCrzxqtW6;uI50 z`F9=t{OvApZPtG3&k0wSnAm&$jIHfuw()0gv)#V_=zYkaK`r%1fmjcdZu5!8{_>AU z@PHY)iv8Z6KEb5>lV_@4Yi#jn0NMVv``KKRuKHW1ekc3)V2Ax2XZkrV@Y5ai_qT{U zZEqVVk2luax8eSLvh6~%_KF-+tM~jmxAb##@VD`$f7Z6}Yt?qUDW$((s|Wm<$IYEh z$qRkk>hEPeKW}S4?`(hV(T_~tx*r>R!oQzxcCTrxb^bhT&lD5e>zDV9zl~*nY_T8P z`jx5uc7JPU@!ZF2ztQ!Kb@A^4XFXwZ-2J$*vPX?gdd%3%-@ke7*Ui844|X;=+J{Y>&VRsI=dNaLZ-1oLzXbN4X|283d@p66s5{&R zuF2?UJjWQ#JhN}QHg)%7+-Z7if8*OV&$ciUe(L6ZauRQNck5E@8j~k|ZH* zLXxyeauwUQHc65sNs_cAY1^bt+9YX{BuPlxByUL@k|as^J!a>9W^TXF&+l{l{`K8I z?ziXdb;3ZYn`VwEBn%H>&CME$aW>`lFhDP0TXxPt4rb{iSZDA~82x z!MkqpSNU)ob!p=`HJx*+OZz8A@v3Td>F0@A&>ugk>&5Ou65rluN7b^l@oJeV@yfd; zuByFJp)T!~s3pOF)G}d~x|Icq=i*(V*2F_qYI^2vb#JUlJT{u>1=_Aqx7RLF_EzGR z4^BLnyAu20_rxevpZLGmCH7xl;&r^1nA`4fssAI=UwtkgCB~lMt?JV66WjA9>QL;S zhVi`?`&?8!T}sU1lC`t+JN3$T!}sbn^D{hx%R&78wSa5uM`Cq6_8q%3TxaA?sf^Q? zn$op(+y~%jtgIQ&FaA3xQ={tlUGC?cq*>F_n|PJ;e~ztpFFod>rj(YgUY$;U5BK{w zxW{4B(%2_65#87uul$e4#y%SwUoZJh5O0xstv>l~ z-*dFuiN|8kFZL~_cuIbAZPO+01k|*&hI%0X5?ilZA~mNr#mkmaU*f;dntb;Er_bR3 z#v_v7T}t+U$D$$^S2XG;#GjtTU3$2>%{w}Y)Q0!y%$-`=!1 zt1g{!Ons&~iDz{o@ya`e)%BJop6QW9a??-7pVcFY^`_5L|C>{Qa^SdGOD(ie|*@KCc+}=3ao9_2mOOAbtChLEsM&99$eTR_WARuLO z{hIr7TrX%+&c;&gJ1eP8>3LdryuY83p{DzOqmOM`TCksck2Iy&rxGtWrPx;Vv@eaO z6|KV3loouhekb^BVk@oKyYVfX6G=aoPh~efq7#pZy(h~3>+{t<;`PVX)_tY2 zPX4zmJtFyflj(nd9sm2%Tx@Ej?bz#mBoIeEIwin8>Q~?0DVb( zK3>OtxZ}w>m~WV0h;1b=kxoU`|8b>Pd8J2Oscao*{_*ELJux!HzE>VEyHY*)=~3=n z^l$9BG|o`hyY6H4n+Ffx%QttMmhR=eCq6>#wW!b3b*EaEoae0WrEc#$bCviA7F)XO za_oO3AMv9{t;Nl2)p~jl$0&>E&3DcDAMyY8EYBdG(mSi^ks@{JBZ+5~oE7|%C|f?6 zJI6J(h2e$VdxyT4JDBro;zuF*h~#?L@C>dIV(b0(y82umc}&nuX)0TvNZHhqcv)}8 zy6deAx&jv zlhhHrtDmbnPJbGIMDqLbud`3%^*;9P`S_NTZ6S}dz<61#Zp4#rubR4^R8#*q z)%9Zg`E$lSjV89A<0*C&;;DYNnqK0&YX5y5w6b`L(8}WJ-9&OGmiA6O;;Tyazr{Yo z5`TpG9rd{++h7B=Gv3?AzF|I(_aZdheVbokZAvY62$~m~Qu0+MUq|xwCfAF#o`$AJ z?Bx~3w;XE~@p^isl+PkIkNuC>*z-wKn%qTwrVA6P&3LtJTq2#`PA##;9y{R`TCF{n z4%BeJ@un0zH;BK=;?Zi&-odeqmyPEU@#oTQk=phIBf$3DkDu;gieEbFOPjCwP|e zG>~gD@!m1#esxb?Db*&9QOQ;6af==Ec)xL_M+|yX{ibc~vr+Ny+;*l%ia)FS2dVqu zhD6(XjI#LBi~ZCTt81xkV$c4TDrO!{X$SM?_bO3^%^Le`l(x-*UANOOEWx5j#2V|4B<((?0eLV*PWx z*ZXdOT611ZSC9F`b?P(7Ypwo|$-k&c-l<;KOU_1SeWvd5n*fA7t1&JZ+%JH@tAnn+L5YU9W9&zsbxQY$raQ?vg*Vs@fz)feg` zws93F{@5Qm((x^qXQ`?4B6aC|w6*wp5uLhp=MHs#HIEh$e{6>z)Uw#8(9@*YGmU); z-Pe@vr>S&C%@hGE43+p-C}DZy)r`mA1ODek1!;j)mg1t_VGjN zda+*vi$D8^>($S3&q&OMA6TuHeaN-u_PS+ulMG}D_=ZN-D}q;_T-iJ-(MfATb7tx#P`+piT|6dFUdZq<8<|vAHTwS z-%%E?5m}$BTRy;V1I4%8P_F)u#}jGoICXm?+p7EEyVuqJY8*@BqsxA-|HZeG+^0R; zs*l~sr}^Sb5AhC1JjK3e7=JFE8`UjmB+|oN(TuM*XRw-*v)AtuGx(a@)P6EHdyS8# zv9fqdK4M4W5fzC?#LlhaeS7TODxU63%#f44Me=`qV^;rLY)&1YbH!%i@y9m(wi0I< z8qJ7mb-kMsbKuzbY)-P&q?s>p2VBk5sMB=Q2$Vz|A|+Ae{-zqehR>X%Ni!$aK=~8M z{Yo`PO3t}Wl>Cj{NmyfM&4F#Src@K=;71Toc3^Zwa`mB^+jeKi}yKM5=U|(}e zu0fsV5$?HZ(rohCDftljHE)fBlFhyrlzfEzh6eZKQ zr(|JaD@vY4?jg+F&ZL}q;ZW@m%5O#P zd#fEvz76>`B5euzcGPKxYlo3XpiVPVJDhw6@;!C!Nb;S?9a^=c$af+4BG!&3-;I19 zNjrvo59&0f+Ogz&QKz|2TZ-eg<8Xp@Jmn7{?*wQkkS8JELDNnoPeGo)ZZekXrs6}o zX*feyhBI~L_?S?Ej|-K!LYT>;Rw8%H6=soFA-`uP%qFi!zSSVvQd-xd~Qt+0ghcaU>dVJX%L%kX_+Ies8i;U-}vZWdPI zN5X2{BCNrWg=(x9YVZ?bEp8Ro;ip0^+uVkHCq-C~+l3AIxlo5YgpK%xunBhxoAFCw z3+@u?@hf2~?iRM;Az?fIEbL%w$55yFMc7GhM1CVu*hM~${Bo(Vn|u%yg>G%PU90VlGBlIt%{e)nMj)zwOZON(q=`0+!|@KqMqCq`3*ABNN$I; zU(rl%kF;OWLe4|lub4vafV5xHM(%|CV!!Ah%Sc-mQ^^HLTNa(?`Kt z^?apY%_E2`pn z@^i@j-Ngy`yf_h;h?6OQ0d<u+8E9ar^xrE#P#IQ zkbX?ufS-$XxI^5CUx=Gnx)bTg#Lc)%+=5?;^|)KyieHP{SZ5FFG<(JEQAFne+JX^XVIlUhi?6O zw(LRf(yqTi_MuLbuD^&G`pcALBE6GdtJ7*)A-$7cAh$+(C%qoq>W!3SBeM&=nVf^n zF7y_1F6uOS`V?|LGP}^*$Q_Z{h2DXZJ{4uXlX3-hngYEGyXZYQLGQx{^cgIjh&s(A zy&tFQvnY8Gb(-n=Hsms7MAm1M%TcF!Sf4|#Kw6MKmt2XA)cSn#qo~u&(sv|3hRome z68UlDUM_lt`~>PWPwE5YdB`kYA0$7Gv^ag3{0! z?}cmhz43K@AFS5*#SQv?_@2H$exM(KqG2G9)uT>hFbpCa zkvX+t2-%E$>cTLTY(Z*^p@f`*)Dy!nv>S$_!!QzC7)D{LVKlZhj6tViEbFHs^~6w0 zb|a&hVH|o5<0WN_{ITxuXhFRo%q@EaNlRF~y#4v{}A@#&Cm#iT5#4wK>KxU+d`Q#unBQ-1_hmjen zVIjE)nUNY6k)z0r)UcS`1^Fcw!xC~=)M>gImXf=pPSeA%jNB7-nyU@V$-PjgxyDdM z?v32R%&?N&2f3NIy5wvfl5PII@Ro;()$MPS2Law+OG_Zqg5$00Lh!*=p`)M@TF?7#_zo%oPp7v<$h zTQlq?S0HW8u!mfUoM9RE;Y`DReAI9NXBissF~dQeZ8(IF8xG?f!x0|!1Tvx-j*_25 z?)YXnhEEw9alYX=zGyg!%M7Pj=OyHhZHCkMGPh}=-68GHaF)Ch8K(^A$g7aKx8Xdl zHeA5h3>PV1gS0!tWpXt#av8LOR#StFTn2&6okGZO8R+;l>-b3=t>$fH{4$tvy}?4s zyGWZgq>$f3#xH}7{66wamIep;17tRCNF{%WjAaHV`6Fa3Gq~_$g9qykKK#Uxf!hpz z{LGMr+YN14|8r#gGGyZyh8)~!$i*)W`7GUqj9-S1xZ5D%9)m*pUgUT63<3Pc5XAk4 zFn((&V(9^7hp zhwm8oQ@$RVRT>YFHy|Uau>tFh2l0L5A>3#@%+e2#R%tv!{t#)E#-rqqkXC6tM*bLS zmBvQ$C&&!bc%1wx(n5_V$)6!D)Od>gInvgQr^(+SZOwQFzcrqvL;Z zw?$f+sTa8&(#lM|$?cI=X6l1^roO0{`cYnhv>;P|44VdEXVX9|G7VyB1Zgj(A=t$< zl#;8EmSQR)cSBl=X&Ck}4X30h(o#$#$-R&^Vj6|lnnq(E(-_LHL(Zd3WAS=ZDfTms z!y8QF@kY}G9AKJ=H<>20{y=1QVVa7AOw(|%sSHP$%2_%RnJ1Vk@J>@DC8LoUf@vms z3^GG7%_5IQ&Vo&|@m|v$O2#2`1Jhjccw}y1nuili^YH=G0-R`Ch?7iT!3t9~&M?(rrD-ibVp_-lor%mVOts`$ z$h^X|o;(|wSC}@C=OAawraJOmWIk`&NS=qxD@>cn^HHaH+O(Ox0Ck#YOk2nck-5F8 zp1cTkn&(Vg$%~QmXwx?G66EfVrtRdV$o#~#gS-qmk2dWjFGuDlrd{MJWPW1WO&E7t*fHHuRVslz5SLZBE5>vlBDSF3dE0&~Nr(D{}^Bnf=(>oP}-7ZLqC58?((h z*v_1bIp%!4*4z>Mm?gG<9n!wc3i*1ZeVGH~8&Id|Zw}&(<}eO07vW9jDBf!Bf+gmz zc$>L94m0<}+s(ajxVbluF!#Zc=Dv7`xgU-)_s2WU18}r?Al_w;eeY$Ac?jNZ9*Sel zC3uf{7?zrcZdpinAV=S_h@6TXeam996FK^pC1e+J^es!t9;8>d zEF=4n<8E0_&P0y8rHb4NIqsH~x2z(!MUJ~=HMt#f+%0R!?U7#HQccc7W=)nF z9Aa5Z$t}pc5|(x3Tan{ysU_cr9AC?N^6kj+wQL}dK>9aJ9Zt1uq~t-Qf3s}D>6Xou zlp+0_Wed3+>EA5%SYg?UGc4P%(y|>NvFyN^mYw*#Wfv~7?8X-?dvK{`AHHbWkIO6v z@FhzFF1H-Smo0~|%5oT2SdQRZmZSK&6aU9o}+^d=j}@ zWjReggET!_r5tx<9anHyNUV3D;eMy%Z_k0NseYfrq&+6%i{ zdt*0iAM9c6%Q`)gS%I}5USsV~NpGarvc^8=*vC2$ud@!qzSh{M9B;G^Wt{;??_@0@ z4@Aa&>o6Q*9geqJM^avb^jFqVC4PUgDv2+Z2Z_d z2kWhK@e}Jj+-jYVpIR5-HtRzC%(@6aw=TvntV{4K>r&ifU4|E|%kiSM3N#sX<4|T6CtY<9Vhb*S=C}(U-CwTc>QmHYs&1ZHvtGQa0j{ludX` z%4QszvITEVsmI$=w&JvuZ8$w;J3f@M1Itr(;=?Jsa7D^)T$!>5SEcO3S5x+5WAg*3 zvo)aJc98#QKx(Y*5N6vBW1j5@=G%^92ir01Xlukyw&N(-PNHl(g^KMohHYnXl4aBvE&2D`K-N^+!0KAwCCb($aT6Uc{Ar}>Y4BKZjF zG(XuVlaC_r7u%=eG5a+9#a@Pu_Hz8yUV+E$m8^LJX_bzd*w!%%vmLWha?C;5F&7ob zJS=w1XZsUta zi=2fymXrG-XJL*ia(|>BcB~{1K>A_FD)K<&T+FeWJP7HN9c#!#kedE&bXLF9NZ-fnzs$2{MOq>>)2jMhC|}@-k#}aO@{9N9Hh&1LP{Cw{$d+S0XLQage+U zX+e%duLXf*fba8<7^|I7{Ayv>?Yh@@Aw3InI-}AT7vofn1M_XpW2It;mSx zxJ=%LjA#z6iTOD)t~mtq4rFw5=*c^gtGf;(c^5L?In3nU$n2PI%^>F^*W^?E_+)Ap&P#2B zPo-wFbUt$KoSK6RQgiXy)O=i&+7XweO04q&GHXp$@cq;PZcGj0rqnP?KSZv%r52Gt zLS_P~QT#Zy3)ZK0rTi0QCXm`4KTYk4+fsXBPRrgbZI8_4TlOL6A>(7qzSyBK z5okFQFSQ(ndgo{~ILDyPITjtxQr2vNjB(C!=yZ-pw{rq|oD9TSM6L)zKqPZ z($TpKdMoKD?*OIo0JQH~>X`9KjkoT3+w&3Gw_4sw#R?7Dv@7cqnZr z{+PB452x+MEY}`v?b?TJT>E)!TV#B39U!+uYMrZr+#acQu7l(}q}I6(kvkx@&UKjF z38{6iBV-xrfn7(j)O8G>aWzuD5a}UZ$H_~O9@2FZm%2{ji>}kS%ykA|a-C(J0(Ci0fRJ@okruZz|Nf1boM(H`AvfeVWUN8(d~e-b1ecxGd!NkyhzS z!H-;Ar_pRd+MvsU^{!M(K0(@`%SrweX@f2o`7`9Yx64ER92xyxK0N5kpyUT+KfCj%B{$8clRN; zLyon(FF6l6*6x1f4#=@~_a}EkjTerMSnCdn27GX(hxC5#`Q-7))n@ks@&x2+vwIHaUbT1)KL(a?GOUY$O zKj~gZei-Q|-OI@{klxZ=MScY7E!`{0k0PU5KH>YisESwQNZrYisk*@*Oto(*I(QX4&WWD9b}>e)z6K}LMfCbA6~ z@jaW#4&;2wvxS_Bj5VHmvJ*L<@@yr$ka5SejqE|j9nW^M59xtDJIEPG5A4}V_9H#8 zXBRmO=@mV@$!(DNgJ%yp8<{_N_K|at`GaRaITx8fcn*;Bk+Im*K<_t0ZbbSwkCS{H>EApq z@=4?>oX0~xgg_^KMe3@zE7^(ERd08)3#qH#o@5VFSG~Q^=j}~NI&x*t+lQQq z)HH8jEcW)pF5dolm3IJM?Ty{>s~6HwdIynvBmJaz2;S-)iY49>9PS;)(h*3F@(w58 zfz&APNb;RXujL&@z66Au>B#KPJB|Dh(sy~w$PXiZm$#fe1L?cG z734>dzRO!leiZrajdv#bF=US9oke~e`Rt8%Hu(vp)p+NSpG0Qw-nsaKcOEYF&c_$M z3viitA-?2Y#G1>I*@$;BxeA$$c$biCkaHsMQrzrah97yC;|XsS{^nhYe|uNqKi<`N z(YpqbJ1LYl%QP@|9A>T$y!pQrlzD?NQ zw;2ccw%|>^dMxv8Wu1qRedXJRb9~$J3EvK!=iABBr;uL4w+k2ecH=X?J-EoX51;ex z$Hl$__=2wim-!CjOTI(6+;% zYb?Gq^q0Yedp1ZegPfn7txb`8NKOR3+*CZ;EtH-$SftDk6m&vMI#oa zo3Tr}g{4;^pT|f~!CvV$9FXq7o6=KpV7e1;PIuuQ=^nf@-G`&oGjKw>pDjFq)Y$Ya z@+73jrnezaK}Oj0Z1OZ@giX&Omm$|b({st?$oWWmKDh#^f$1Ib@pOrjImrG`S8!f> z0G~<^;?wD2mM%c{e|iylA<|=~M{!wt7fN12_I7$#tV-{W|D^XsYep|j$>@za8GSG} zqc2Js{ZPs1kKv2~Sd=jkyJif+?ioX{cg9fclTm{GGlpSF#&EnXV6y#1Dzge#X0BvAuOQc`GgpycMP6OzYVvDHyUtug z{s=i|&#WeYjGQlI){s9zUR~x|JeIi*8#8P1*Ua@SJ&yDSnH$I_kx!~**5U7&8}W4J zCj29FGoH!Zf@d@9@vqFScrJ4r{++oU&u8wy3z<9d-^^WjF>^Ow%G|@2FC)E*e;+pY z??;>e0NVWxEOj7#i~k@w6&Z>AhtTOijA{NO=<**$um2eO{Ee9IKaLsxlbGp0g?|5O zY~?@0cCwH&NB>!D>pzFt{_~jQzku!i7ctj=nKko}9?Z`>W10@gvGWTk`SmFKji~s| zSm3u{z@LIazYRlv2ln)*VlTfFd;48%=USxR`aO7^--p-xGbrze9DTnZ`}?zSfIoKM zy_@{mEFFlneSZ!P_UGade?H#g?})egB^>5g@OFOyhx>y#!XL(w{vy1?A7wkEkRHR| z1@H2A#k>98DIbf>>is>j)ZYv5_4mec{yuoWzb{Vo_hZdTNU!4Wk5l{u@In7ToaP_I z(&8bL z(hvK`;9mb&O7wRKGF$Ukkk2AD*9a-}z zABFVNS@Usp)&gwab|K|9q=vU$M0OxGFnck+ki7)!vzMaOZW&8uq>i;)PA)*6b50eW z&RL26yj7I9LavJBttPid>UQ25a$BVT%&R7MMy?Fx)sR0$t_u*P{C3f15n>+2mFFWnTuR86*Dbj8%m-gVp(mt$^_Tvoc09Hy3_=t26XG(|gQRy(w zl8)eG(ovi(9mB_^Mw}xZ$0wwdI9ED_PfDk8o^%GElFs6M=^Q>SoyP^z1$;)jhzq65 z_^hN&VHP0?_?*O-A~cI7BR(&gafxKX7o-$iD%tQw$$`tHRD4Nt;&RD_FH0V*l6<&A z%D|P9A77EOaFx^sUzM_PwUmReNx8U2%E#BGj#w>8_=coljTFE)r68`A!uXa{gzKaz zzAbgZTB$3(BX!61QcrwW>V+Gm-uRx>2kWH1_`cK+H%k5S18D$mk_O_3(jeR{4Z)A3 zp}0jV!H=b3ST7C7Po$B!RT_n#N~3X`GzLGD#^QFV6hD{7;SOm$ej!c3ozg`7Qksmr zq^bCoG!1u4W%#vJj(emE+$&Y$K4~U?BhAA7(ro-znu7v=c8# zyYOFWH(r$X;3a7vUY7QwMm~UAxdC2zd#Pl$YWi@-iGHFULFODjY4Z#Jl8G zI7VKLcgt&VtXz%v$Te6huf==ibvRD0#rx#-I9}d>_sexSLEeZD$eVDYycs9STX3>m zk5lBWI91+;56atdn!E$2%R8}5-h~gzyRlr}gAdF5utMICGvotUDL3FF@Fe8GK4Ui}U4k__TZ;7swaz8TleE zlrQ76vX)<&S|khjoXi*DG>c^;J};YbiEP0a*OfDEqB3MxhuXScgOW|PkdMIg&XAF_@3Mc>*T)pzT6Kt%Kh;Jc>r#b2jYkFAlxj+ zerM|=c_?m?OYmcP7}m?f@e_F@Zk0#jr}AjrCXd0-JqRxr{9pEx)MdR0K>@^ypHI=vK_= zQ7q_HQqZT^FkNwAhLVbziWB{c3tK53%u;;VTFJmRiXYo5S(vS~!FEbE<|sMXUdhE= zB_H#Yj+n1V*g;XSqY}VQN)RO_jIvUMiW0>Fr3(g>u2`sa$Dq;^LrO0UE4{I^(g%x_ zz8F#ZVN~gl#mWHeq71~VltI{48G_xEq1at1!5+#m?5PaL-pWY4K^bM|JsPAZS4NWu zAU(MK}b)ol#+)aJ-ITDJQV54mGR^fr1w@P;3#Dxj#eh)BxNc~CnG(l zG7V=aWmu_{<0DE1&QU7y31ueERc7In%50pc%)zIWxj0{$hfgc>ae=Y`pHUX#LS+#? zt1QMv$`X7|S&EC5W%#_Z9G56n_=2($mny69MP)TEQ`X>1N;NK5YVc)cEmkS(aD`Hf zE0y*5in0M$DRua&vJqD+oA5PdGp2Y5Z6@gZ0W;{6sm2Tb1+psd53gDHriG#ZTr!16f;;Mb;sG zLO~l83$oEvkb~xeTx?d5kCuXttZ7ABS%HM@3lvInkycg^!2E(Bb|?sAQ9%(#3ZfV- z=z`q~x?+!l?mVg|GXE*)N$!Qre+qh$dn5Cog5FqC&ez3d-?# zK?R;DsKiqRGf@+mh1$Su)CK0CJunwNfqCc+%*X7&0=C%>+2?_U?QY{Bt?db~fd6(YJ{&lV6@eo-BXATe z1IO@@KqJl!9LGlkCvjHb6h0O>jk5!1@bSP|oD(>QPXx~6+`t8VGH?;+1uo-L0c{KV zx`2RB2lTigV8mwvW?UGs;In}gTokb3a{&h~4y5Aq0VggAxbTI52bTtX_+lUfmj(Rz zQXmVL2ioAvfo!Y_Joj`Y7ALxni272L!KyU6?_+Fq7xgpS({5>)v7xp8&k&(BsKejI%fcb?3Der)c zn1zF|uy6<^L1Z*697+x&qhVnQUSBwjl72|dDI89|2{{uf97(54xs<0Ht6pq8Oh2ycba01?2I1$GePR9ESr{V*J({N&88BQ)N$LWO?SXNkx zj~CA5zsy07PT?%_bI6`AoK1cS+4F^S$S)&%zHlyi1+qU2=aH+Cv7>N4xds_K3Kx*q zB73-SA-+?%2;VJSj2{#(!A*rrS?5D!6ewIq{ssa$VGRG^dC0{`L^TPGyi^v?Wa0B@=(w_wD$XcX732r0{ zNPiyOMAjocOmH(gf?F^etf#yfnXv@7lCMI}G=tm7*CS_|!R_Q5ke(s9gM1@$e1kj5 zHzCJ2xQl!@^Iu>2M>_%Mvi!}fqV~g+=B!bJ5zRv|xTg|e_ss13FaWn*?ICzbvm z>HkByct^r28$0BFnp#ZrQX+fbN`F^A~4u#1NAnhnr zM4p7SrcjhT1?i1LUC0k2y>X~3c{zn^T`5I8^a68DahGMcp%0M5b*{r6oj2muoi}0M&YSV}&RclwaAXAOTu&Z}w1UoC$zzaK(0LnqEYb=(Zzq=` zt)TM`^8H9F=)9Bs05V(Xyo)>wnJskQO`eU6CY|??=OD9%&ilx7k(%FmKR(;}040l% zIY8$I@?vBT(D@*F2{P7qK7_AzK8*i%K0^6LWV|anO1=|0M=Lr;z6OLI9PNN?=L!qlZsB`jG{AGS#%a3DLRMqiq7M+MHg^s(M5c*=rS%Z(zaxFQ6%8X zB0auRWW?8s%q@8r25Cn{7OXBx!8eL*SX1P{H;YnPXDw1ci=5a{ZHIjwRBW=(Y$wp5khb?%KGyO;|IUVT(Bl+Y^q~D8l#I_L$vm*-S?T}eVB!Jx_ zLF^t0V~52D5da<+=*?W=R?MOM+ zMJgzNAL$z-mE;eQ^W4Zx@@8Z_jm#p~Bj>h}+2pOr2pgG0-iDmpM&^>YBj>h}dE_0) z)x5}j@=jzf6j^}ZL>A(~$RhkbvKUWCmf+u!rFcHF3@=8OK&o4a(8As6^LcL9`YF(e+pu-GISp9fqPCF&y25ouiwvD7pnB(R%C|-HKO7 zx8XI>?btiI1Fwzl#6HnocwKZi_Kohr>!bUyUvxhXj2^(7qYb>$K}c^IJxCsc%$K5v z$U~9&QuHvn1eq^IkC2BUeO>e@-WNTF^GMx`I>|30bua3|SEC+ERwF%6)JI-})SPGrc`H(L zqJHu=q~=7k$lH;c6KzA@fz+I6HhCv9TZ`t9_ad{kXfF91##4HYz1!OK=TtwC*^Sa_F*@#>%DegixBO_OF zSF#1^35&avQ;`0!xF^|$%)^U&ksZkO(&FCaROCu&aUX15+?SFzNPk$|kDQHM;VkY? z&Oy%6iU*K$k!vr-1IhVFD<~dB?ufL4;vr-SX$8eY$qG`#i%ZBwNDVI@Mvfv^FN=qh zyC7Eyibs;KL27&PDDt&PJueb;Y4~z+8CDgSc4(C-EBXX}nf@ z7O&Hu!yB|0@J8)LO;B^Q)~pR_?%+R$Ge1q+R=7i>D z`=iDanicjZj2dn07J1Dy+O{n^V7nIWnoZLF<{r+k760zuqMxMw(|y1+N&A;O$2dv* zx7)0pr2WUepOSyw7c|dnb>3S%RoXwigFP#B?ft_wD|C7OE&3I@PJV}Fg--V87+2^D z{ATS6U7`OXOGEw(ns0TjT31-U(-pL?w0@^6Y(3lBpbL>3be+lH>muaub;aa^x~s?s zb=}B6=z5TU&|OXbS@&MsN_@ZVZ0j-I2jpYA56QpiJ|h33`%JtP(0xTdq5GPAQn#0UQuht{H{G}7-*n%RPwBoVpVIw6{$2MY`FGua z$ftEbkx%P>CjX)Ph5U!^SMnL%3Gx};Z{$C9zmxye{Xssf`;&ZD_ZRsu-QVQDbpMdg z>Ha03(_JF}&D5k4b=kA6=XE0ayv{)WM`t4cqiaUKptF)M=$e!N)!E7a>ROO5>ROU7 z>e9%UbZ+t`otJ!BmrlN{%Oq=rR%DIPnyeMtlC?rRvQB7E)(LrJLFhmhgid5pkjbJ@ zK-LR|WW5j~8-&hegAgGbg<`T%xQc8Nx{*yn53*Ufnrs%XAvY7QB{vhUBU^;)$rj-T za&zI+c9r;9yV+Ko@HyEgd_lGgUy|*@S7e9qHQ6ETCASd1A-52|C8rACkyC~5$t{H+ z$Ss8*$xh)vWT)^GIZgPPoF@E2b_u_dUBU^nTlkIa7Jestgg?k0;ZL$x_>1fn{wDi` zf5<-JUvj!|iJUHIa%NjI1YJ%gisVeeK+Y6QWWUgi%!lsCt%T;}R)U?}T6iF*d8^jK zq#Qd=$!XE5osgbeVQDX1m0M|TFLcYDZOs*WkaLBr$$7#xfa!S$F*ENFw#wUvt@D;*+q@&#E^iaI&pU>Bc_(dyg`e2kVBzPy zYWrZ}m%J_bYu-*gk=KB~<*miv^Yo6v!XJ4X$baS4@>dl>%!NacC~z6*xSkD zcwP9W)9#jgg?37bbFa`|8SZQp+69`oY82WB?3fp5(aIuz8LY5a#IJ(mn_I+hgEp5% z{4VHmSj6vxyIWesAA&AQehlukrHH?>W{P-%HB-djSu;iagEdpcKUp(H{EIbH#J^e7 zF7^mfSH-JC)K&2svO~OH2xkw zgMWn2;-BI3`2X;ACU8+z?;pMccfbWvP!T0m?zn`xFf$A=?!(NWBDk=)C$fx+A}HX3 znfsRImS(Okrln?PWo3J|YNf4~S(#?pzG|js`G3y2%teNNe?LCod3n!!&OQ6wnR~fh zO#U0al>ASNST!t#wXcS!u-?_^lz9!?sI5}U!rQ2=Q+hswA)aArm)D^_HQ|}basyx=$sxc(YZZh(D^-L(S<$Qpo@FNp-X#M(B(baqbqt`4)3FG?J=)m zAN8IdW!O7!4;P-jJ&rbZsRxL3sZSBkoSLr)i; z)<@`B(h&rFhA?iXRhp3B*9HK5Ia)`Q|$SidYky+}UL}sZQiOfVGYJ)e`^z_7mZ>odR)6gO5v(c>d zR5T~ugN{h=kB&-DN5`ZWpkvbqq2tnrpatn!Xi<6*IzBxEotQozos>QiElD4XmZs;R zQ`5(x<>|xF%JdQFjPz0Htn@MH-1JH4{PYrZVR|XLIK3QQnm!d>o?eNrNS}k=k=`9$ zlb(d$nVy2KPw$CtNbil_lRg8zFTF3iJ$)9sBYp0`CWPXIU&ioi{n|T7&GLNC{GT%cxWPX6&n0XTIl=*qa zNwp`bC)M7ho>cpidQwd#*Gbhw%tMY{FP-heWg*u1$FVwljf1%DN{*1bY z_%rIA#Gg^u6MshCK>QhXBk^a{&BUKkw-SFwy@&X->RwXMs{2SitL`WDtok@5oK+7{ z!ddkxN;st@WEb-r{r!!BXUuAxcew}#^J(qbJ{Vww>^oPvvGJa6|4tgu|2Q_uj zsmveMVS~mD`biyy=O=Xxo}bjQgHB{#Q%?-eQ?98e2OlzDQ%?=Pwaqp4^x%%6*VL~D z*Ed~LzaBgf&$+?;IWO}sgL6%0^IJo5P3_FXvj1+|&O9Q!h0@MED*LmL_U4job6k6K zX?AE_nt4o4u4$;bRc@|nl=&X1+jCR{o^D=0EKjL2Ul|smEijK5-hwCBj~f1W z+Xdz^!#@jIZGLJ*9#5h_IO33bwfXrGw`;4-FOKLKy4w8mi2A10=2u4ChUc{rfAgIB z4~Sf2{)osm<`YD&F`p!IjrnsT*O*TcxyF2&$VbelM(3JdGCx0NwdE!Ai(}TJFOOMg zIb?ok%o}44nco|882w<(TVq}^pT_fw`D;9{n9t#P)qDZZtL961UNv9AbJ#rN<~-%F zdDhK`%!kdhZ~oqL*gWUvj-iLmb8oJ1I&7YQ^S5{w-u$<6#JrKnBj(LS9x-pd`PMc^ z%=Zv^#C#u-Ekd3x_?u_YzfzEgzE*I^93ApT!Mz=#Lk<^o42=$XtDwFqI^>;#O?ZwG z85eS2;n@yxA=?YTL3b2>i#}NReTTjw+kLA$_6^zLTi4MQ@*uV=WEZwKbkg)MJ3ZN- ztKtk^vk$p`!%Z+R@%j?Jd-+RNuW+ekQmDd{XBFja14RjLsPKG4euj3i7}|#^JQt3O zt0hgO8O84f9avc7G?a_*I1};PMmWpySOox@QuNCcqU%?WiC>~e@ z55hZe7XEJL8H0gu21$Y@O*Y=$S`d1%pwHo?>IGMt5iw$u~;faYD3Ul{(yggtN;whvL1hoM6ja}c7l6{RbL=g>dU52nI4cnSW3Zn=tbei#p17*4xJ zFcu@J6FfDFJ{YYiX=4;+FpPj=m_Rq6O=rT3A^)|8wHB;J}fBY7vg=4Aq<6y zFdd$QKcM}1jtf0t0E~pmun5+`HVB`<-@=~6I-1N_!W=jSEvGQ|AgWYRewxNSfHmc; zfl5V5hv_ppK5T-2AY>Ld5L78jALtLa!@F<-&cHBdlcn!_yZbjXO6)aa31PEKw0oQoPc&a=rvt;3#s_K7 zE=4Ja#=GeUcn2QdLm$C0cyKT4`4Q?4yWn|v9ge}*P=6ou7UG~2*r6wQVGs<5Ums)5 z9AGUxN&647$3D-Re}O#+TE57>32#B$ml*FutZmo?^Ize(unI1N@+yDi0J^=&SVJEe z`wnXwE*_;F$LJ^c60X6M@3P;*&oJ{n@_xvggxRnNHo(2G8xF#o@IJ(Rq$sz-Sx7j} zdj!mcd2ly;3%@}6C)5=-!!h_B8l7NHLgik6I|aiN4}%IF#JdIz&-Fj^!&<`fVeeg1T3p0MFzu^*0zC@ehTL`&Kf56|+;R)|T&xvD57FayNX=gUDnz5FWl;Yqz|FbTv{qQ%n%#go(uK|En>3+#h8;4AnY>hm;} z4$u{Pffq6%7sPWY*24YJiQjWx2UGby%_`Un&%wv=C42`-ji?Kpg{W|@YQqQ6pfUFc zfCbibpZebr%-yG95CfyZ2Oq-c@F)BOVcfel6<&n5poF_6mcrklitDLdK`H`y6^hsA zqPSxR?ry=oD$zWR5W2SHsy-}(j;+M=Ke&1Y&+(Vf8^!Wl-mnn<0IfCmFG2|{giY`& z{0PNu>1%i%-i*Ts^);R|4v)g!7W%b4_3pr580pA;56}@3;AglD5jS#G4_vUa3)e^C zEojh{et^mFF?4ff=w8Ho(2`6ubn7;Sxj-=NU`T2gbpEcm~uFT=@k1NPdPtMsZ)t z80roKZsvE@A$u%+IF5eHXT23LzhMtN1;4`!g^WMs714LF5u$xOw_yT*^J60O4Hg!2 z=|{M+jI}+LJCL9XR>FO-8+J`&?ZKFG<^q(!bCs-% z>C7!S4qw0}P-mEwCXfY>z`@z9*IU?oV9y-(9(W#JhhyMdK-5vBxz%%d)1V6z32m_!1Dqt~efp_2<2IiT0Y2FK?cl%JK$A#7ruct53x_dVR#olfh*8+7i$+r!c1tioB0G!LGZ&S zr7g^Xi(uZ%{sw6<2R?#7VBjO{50Jf&{(>csa@PoKg!=n=ZYIQo6$ZjLko*{T9>9{v zS$}X5{)Lz)C?9TvH{m^Kc7VMa#y~Nggg@b52z`<{1z9i}N?|7453hsr6m@{sa0tGG zf57oH^8|i{CI_j~;DP zj>3jF*q>lGG=GzN!dvhm+;f=nj1n`>Y2re?YzuNr&9yj2ldb7vW84^)Wxg3lRDV>ko=y zGwgt{6O0!Oh1+2ryanSwWu3uR*a?rpv+yds1s}pmI14|)pKuj=on(H%XefdyFas9C z?XVuU!GrKPJO{7AQTQ0Xf*;`mD4#K(pgFXLj$nlz;DJFf0`g%J%z%Y(JFJKMU^g6u zL+}=S2w%c?Z~>IhIR->RYv>3G;Dl5d2sv;w6hk@O0?S|>Y=xb01zz}qbqXy{v4)^8 z6u~^$2yekfX#OR8A54OQr`hWv`3z$RbK!pY8`_>F4jO;W8iMh#0w#RJdjmMnF*m-Y zo^bdF%KnkRgZdN4hep3Kr=T0O{Db!ymsca^-L z{mYobCYY&kpAzf=@z=3$FmdY$Sc3RnFc`vL_u9u_$$1Kn@jQO|L{LTnG1uwye@ENpi!##&k1y8{4w)~c_ zMjbm)N0nNTn4XFVN>ryuD2esL zP)EH6b0UTC4&sIYkv z${kTRqAR0P&{a_-=<2BD=$fee(6v$f(L19)Lf1uIMb}3K&5uy-it2=Ji0Y2s9W@Bu z7*&97idungj(Qy35_JyU8Wp~P$QTX1JEj!f7_$)F6tfTA9P=!i6#MKF>L2^;ZPY*Z z*_9DIf$b#PJ@zlON9@Q|5lYY4k#|NYy<(4}yvRp?J~Ytf(McA~$;J%j!lcNG0C?hEwyxZFo0 zlt1F8py%V3pcmpEL;s9>AH5j&J^EK%{rwTjrMQ;pmv#hA)y|-9ZHhTk@o0~rUhOEFrhS9<)BZ&JYd$W~4A2&! z>DpcBKrJ>jQpwP|pqbiEbddG}I#_!j9ish?4%O<{i&V0-I5b;xp*h+}G*_!ahiPlk z;o2kU2<-)Qq~@p}sf^MFprf^;Eh3dM+V|+qTK(uqWvtc`&C{&tI4u*+*KS4&v|G_a zZ4+9gJ&F3XDs4VGTf2nbqNy>F${g(m^j57W zI#Fm}DN=b*n~OfAZ9sQvI}#(6-P%EPk9G-tSW_L5%3iGr`iOP|x=%|)AJvAS z`?WFXV_GHpxV9X9LfeQQ(DtKGYKPIMwC~WTwQ)(2%0X>0`i!;%eO7xOeNLN`9H~67 zZA4$t4x%q=2`Q1vOIm;QWo-_6NV@}lMca$Ms=bE3rhSCIuKk3*p@lgkl{dAv=wWRm zdPLigzNNi}zO8+ZzN7ty9@V0|M=Hm(1oU0agTAMYLEqQrpdV=K(GRt~=ttU)9+Ap% z?G^N6?KJv{b^$%1DLo^VPqnt_Ni6~WOzV$+u8l*#(59lNwE5_l+HdG-Ev#3haz?uW z{Yu-2p4DDPzt&Em-)I-mb6R-sNab6t6Z)N&j()GrMSsx#?Gvf|sD<~9RDRMl^k=O% z`inLS{Z%VRf74c=ziWHYKeRW{^V-Mg1?>m)Pwijyq890jRQ}SsqL;Mp=w&S(y`mMM ze`|BmtJ;I;KiV7Uzgq9qNadQ=A5|>lP?Kdo8f1A74YvG-s{FCiNX2ZKkA_$_qM?@k zXg$k&Xnl+7iBuX`Za^DadZJ;L9JG<81P!-TqKz%f(I%E1XoTf8G}7`p+SGChZDtAc zMk>uMZP6%8f3$^V92#wzg|@W(hPJXaNsClsEbY)6EWOcK%Ts7;%Q3W#4_#;#-PcT5;VoK71+84by=>Usg|g$NX2bQLOqr&)N3h4 z(=1ETewKgH{+8C+?EjWhG~F^69cT&4VgI+ZLNhHkbdV(-9c(E;hgeRcLoI)xS(aA0 z?EjWK(HzTmG}rPXI?VDhI^6OLI>ORm82i6PLq}Os(b1M;3)ufH-=Q~ivm*PyV&G-z!KRy!}|3u6wuDx@{eSuH%&DnCjl~sD%DrPu&GD`~oHQTjn>PQy>+=ck^<@UuCH@b8F0NA5 zn6eG)X4jMyn3lAsCQVV=%AB6N_{NIz+Vhj{nf)72F{$Ob<>|nfkEZb%dIO)Eja*r0 z13fQ92YOD-5A;0TBG9v=PR!2}0%M*S!nYZJ6zCaJr_PI>4vabP z4GuWg>x^jaqqqGlFjvz$p0+CkW3KW`5w*)XSI48B49qolVW7u%Ca|2zd}C9)^pg;xZ6a_i($Uk*IhiCY45{mIO% zUGm>`YIv}24ePXh!smfKcD5w2P;m->KJ&TzMwPQxV z7kKoptnS(|uhhx4y-u!A4+iF1R;Lxey&V`+S*JH<^9@+-qhF{~pWExqpR^|fTYAHq zz;Y(k@tmvU*;=QiGwQVT!b5?5xRG77cAa0UQ|DCnvDz^~>>IT`UiOXJo|)`*wLQa5C)I;--TI;;E1I;~h%CnjT6V10hC)6e(R@tE!k%=O3W zK+ljm@9(!y4QyBJfk01IMc_Pi*I5NIE4U8QHu$=8fEU>zYkL-*3J&me8CxfY>k74V z<;4f)iXIy1xp!cor!Tu!?Q*vF3Ov??HGwf7whQ#UIe~kwYPG9z_dw6c5rLjJJ_@YQ zt~$MOi9Mlq$)%EhKCBIW=_AaV3dpFmKDXJ5*hU=5H z*K(&it8z@8)&2H^fir4+abP*7(!iL{>a2@Trv&EeR2JxIF@UGR;@Kf<$2^b`tSqc|eXnl& zo-3oZJexf{8=#gaY-nK2Q_Qj2G4ZDZW5hMf+A;mg19LU(7U+4HtD3cQeb+EBrfFJW z4L83Z=$Tumr8iXsmYm7#^&gAr!N0SA>aVH1w3X(Iby`u%{_M}C$IN0MtL=%k1$tW5 zY3cADf#rjQH=yCBfhh#6ixmsS;cbgwlq##*QCSUiSocy8mpsdlaw&j)%Ivy;@0Nvf_-&3l21dnQCo zji-K{m`-(KJa_8Hs>#*(h2Vg4vMqt0i|k{c9KU`IKHY@7i|}xLvU<14`Hm;+)QZ{s zZJ=jQotPi$#6+=w*DfcK^Re2V2_JLsdaYx{t_t*A$qmePXPu*eROjd!+|?mU7VXmi zIXMp(|2PS&{uk3#|K3k{+DhM&_w{4d^hO)L!Sa`*$3zVaj2X!H3AJOgiUM14rd^=t zYH^_F){%jpKkb2@e{R%!wWfx{N9irCnF+({96hT}Oy1vtqf^-@@K{~yjMr&*U@q~T z^4cTVvCas7Rc9ug<6NtDuB19+I=9Z4)~oLMnwGYxlPkYYuIY7Ro~aXatWFJ&)v4h( zbw)70PTQ49fqgi%PRxQjqwKB|bGgpAJL<$t<5OGhKFqJPntqAl8FJrUzur6WSw?tj z-j_oYd3G1=uj$pIXzqfm<(X8+lUc_zYi(ezVQIn2N$&RPVyv%r*Ln2s%F73e?~;8i zM6o&_Ya&+UQGRPe{FE0Ve)^c-lMp{GlxgQ0iMx3C?H~D5`^NfD5wet=rut8?rR-B4QC?MEQ9e-K=P6L{E8i$zE59f|E0>i^%D>7# zirJ)^LQG~;D6fr8;iec9yIMV?J?~(Jq(YV9y1*9^5FnF*Jb)h=iul44Oj}w18-639TRoZh%;54Q-$;Sc0|Sc4&KE zI|g?Mz7gV~6Wj!yp$l|{Zjb2F!%2;90@5;TD(! z^MdCF&xZxDICxR;5?Bh$U^(0dE8x!HwZZFPJ!}ZREBJ2M2%BIt+#7sP@O`j5cvtWq z^kH82!XvN`9)H9DF?Z6F32%!l~ddg1>~Hf`1JD8GZ}? zHTXjC`QSg{a`2_#tHFNI7Bt8p->O%Lj!0CVbBPgsEySKXsSl4%^*r`uC{<^ zh*4XqH=wb+wg#RJqqYT2jZ-aXJ6_vEyn3VBRqdj7g9NaG4eXEz-BqXBNA0b;)V``) zO;x?BNA0Jksr_MyI#|t8hpM@1jyhZ&rsk<*)p3vy1+YY2tS*K1>N@o<*Z_CKM%VO1N&^gZ=m^<(w8`U!lho=`tmKT}VsU#MTgY4}P#qkgTPRnMv4sNceO z@I72m&#QmJMfeM@sF&5h;VS$C|H3s0GMmh*IoKR(4l&n*M&>YcV{^E<2}D3sbELT$ zG>0f?0nyOP+|nEate~)4&=gc^Dy%W7zv}zqs(Jqtodeh9*l#0D1bsJ0w0Wr2`~|gVG>M+ z5|{#|PzFB3tIR8T?!!u+=&;g!r+KY;9ju4DU<2F@8(|Y{hApraw!uAcFWd+B!**AJ-|(lDe!NTZOjkR~CGLn0s&nnH9) zi;z|!Ekoi$+Jz!Nuk|CouNITS7^`B-rx=Ogf0l3AG#=XVdx#9 zw}-BTRj?Y?z*@Ky*1>wX3pT*run{)FX4nE-VH?~7_riT}KWv8wU#KDl)8zhBe8sN~*1BWutP9>tXz+v$EN+wpLrJ@@{pU%6X0d7*kDt>sG^>XIKji zYf-hODo+}|u|cCd>SuOigKl=oDl6j*-#FnlJj9OXXC=k<99&B zzx_tsek1SWM#%>Z>nX!JXjso0*7Jt-qG7#kSg#n?YliiPVI4NCw+!nY!#ZYI?-|wy z)mF6fwc-28Xva@RJAN^IzZkv-q5e?_GpumKYGPQChSkilqNOGJEjo15D$$QT=fX(s z8|t42siFS$mKy3`Z=O*9NP9y4Bb{#K%?cGGBTCK+^^Z)B;ma|6Zx}hk>iOFdZdgqW zE7Gu{q$Ns@s@L~hQDbUv_@WJ8E5p~S+Q;uQ8>QH)EmawB_zqNCO_a3yd(C2g@%R7g zi&}}#e<$mAJSC3BZ-rF*gr)mT$|>m+>D?RX^N^=J7*=n?YS&Pt3fl2~n*OhY^a(rN zurds5gkdc%J4-QzG%Z2Eq$Wx(P3h*68~Bm zsjZCERz~W_Vg7OZD(v{P`cW<#KBbZ0*U7L}g!^aCig5qT`7`|DPClwp(&ahrEtWb-dqlq#--k*1-VO7QZ+glayZ|_}3>L$bb#IQa!tTTpn z*08>b_t*Jb!}q;m{b*P}8`iIeb-CJ#R$jl!U(+_7{q<|p*rcb_%djpR*58Kpk6}&j;;+jT!zweZGhO_>(J{dvH`C^~RvXq@ z!@AqBZg=?ORvOl7!&+-tn;ia~W{Y8MGpu`MoS3oq8ov7t-~EQ~0i(Q~M(R!@^&!Le zkm1{H_;wq*C1pA7h?jEikMH28o)Be>;K{m ztB%-F%4j3*X2U8otXH{$ zp#M86E%DRQQU02~Yov}G?T;I6ST`G1o?+!1)-8s0tF%P^TSxm#-ejacY*>#P)^mn+ zsM?BFx{MiHUyO&a#2JtHJk!nabu)Zc!)G;ocEe{kd=A6sFnp`I!%aWN>M?pvqvi8F zbl+OTx6X)LXZY?ie0LeXyA9vn)jmbpQmCKJHBs^=`BzGzVfhSef?-XO*1O8OFh!Yf z657(_x=LW!lw3*iT6P0ew&LMe~fn@O@}lvu-ie zC-@_&vtxO#T=4T~STm)yu#2R=jeaEUkAj8$Rq(rQxC&tE87K07AvKd5$LE@!Mi-i1 z?;z^)0hfMHnLp?%^n}z?Qook^gVf)oUX*%OYEU;3Ur%bd)Mip!No^~&gVfGaZBk36 zR!W^Mb-vW4Qtyy@r__z;2hBwPpE949p373ZBnZzysfAK+lX?h^HSe~H)JLU0DfL^a z*QB=Q9->p`c2b8+Es?rd>PzTcQ*(zHg{PB+UFsBeB|6tMPufe+OW}{A7s6kae$m4% zP499+^g_58g^S@QdWiV!p29y8y%_!mdMW&K>G?+LgB}qt@?HvmE=@$fCiN5aQurU} z#qj3+gq?u4H1$U3nsTH)O4?)k3x5GR*Cblq(xiJHOc(YEsb8bVa=k+; zT+G9{rth-E5r081g?Gpn{_g0-@VFeIebGzd!_bzdJZUeM_MOsxOzMZyb4J^UZ3UkpDoN|f;MXrX(@igmQAkX2t# z%(oAkiFxutGqDQhnodj>+Nwn8!%`nZTbg=I6P}@HOVe+K8DJ(&m@D6`nny?^m5S@odUAM>g{mwT6G8t=qKS!qZ9{iupFPfzapMipT>} z*T-+!!L#SWUXt2iC(lfaAB@I?30)sAcBGgvp>4t*l%7j6Rp|Qos0T%=(Dm_&($+Og zdP<~6==yjuE-_(3+lSqYr+wHT=%skkma4GRdxTy=Zws?N%(F4WZkD5mUMn|Q#e4f-s z)6h0yFQCoCLV2#?O^qg_)<$oj$&EU`$W!qe%|qRdK1K&L>iCjqd(I)D_ep(5>X%Y~ zL>Dz`_KHZ&lR8;yrPRC7s<1Osf0i2ls_?XuYC*R&8jP+DtB|@|>XTAmM61HiOT8ww z;cLQUmD)?{XmoAZ9I4BtXOGk`rT!@O0{T#+wyz8AEHwqK3iF`US=#fZJ|I1BNc$J5 zSEL5NA>tdO4>j^i9V&H{)bUcwrQU)*+UStfqv&m6t=<&cL25s=Dl7+msnH7b%|@@H z?>4%Me$vQ#nCC$@8jpV4Xf4`2>;!u-rbu;3O_!Q2b&S+W zQfEnBDs{EgZBieWdO+$6=$5c6=)CazKjQmQsmr9^7T)|gPuP_9*YUz$8!pz`vT(68 z%nM(MXIuEo=%MhcPZZ_VaIuPygdfH}D(!jUrV}D27HuBZ>QkYWQX8L?Js|Z_bV2y8 z&xEJx7eePr{ZwkNQ=$hRm3mO>DXHH|ZSbW?bx3tdO_!Q2b&S**XiQ^q7Pm28>~9<6 z#hxD%rtfd}pAjWA{fhGIGTy z$flS14(=yu{~~p5xM?dXG=7ozk&ai#eOyp|STxeT#gY@id_I(sj-3k|_ZLm#lAynkuV4EiGnP`UuF>^X3 zh370Etfh^>T;=K7IjEiEA7ovACM|)*dgIDX+JAfjQh6m(2n#{^Jw&R z7g2{x@nT$#gqv>^{V7)857INkrgjx0@|@H|=qj7&t2I)$g*WcTGozx$Sj9MsmAfGP z1?+)Qo$bP}CW$_AqszjDJ;U}8dQPtK({lEH87cBE2p767{0ArHL^bWsvznR;&ucfG z!k!l{^icS^9zy>>_d5PY?{hTkDb$1BBXyT!0rn1uhMENq$;d?U!FA9qEzZ^w0YQVXulTUqg7$$E?U&$eyNY3&BNZ7+AdWbMI5~< zEYd5qwbXG^i_!ZWkD^EAT7IU5J&orAhTSf82YRHjXvMa0Yd=xu=lzAfWB~U!MIV=X z2IZYAU8Igc8%G~TtHM?e#1s9z)Whh|=-C-Otu6WzniqX6lPBB7XAKhV6?H3&7UMO! znVs)HY~APN@O-~$G1d<>7J7Gdw_!Y`D|(pJc~W;teIMNxF2-VQxR`sFWMBPWJ<6h2 zA8IN}7#Q_3&uN<3RA`7L&c|~+>xp#~rii&$PinZ-5UGn|&Q$WuzL>wzV{X%QaqpIh zTom&?_L7)C&_yvf%n){abWzM>OL#V)N1XjGi4nRe<_+l)XTOVLK9jaMEAH(PXQzu| zev=+?PCLYNW*N_d^xU+Z8a5Dlt70qH@WeH#GaCqdW`hT%K8Y@hc~jaarTwF{MLieA zgsv4DgU)Qw6@4{UoX5Ty8@+*XjO~n?TI;pFsrVnqofMvHb;#p>~*oWu-um+*_8TohA?y(C7A zOKwBaKktl6*)5JMYBe`Q=#rR!_VB#WHccNEb+e)8TVIoQ)?S`D+D1Q$uA&FdNYA2} z>_>R&Z5vVYh|!|QMvN9m4{a-A8cRLjTG;j52t6*9`LJJV}GxedjL6vv64Io~?*IiccM zxeY}PUl}FZ@?>1U7sV0V9TFaqx@WX_*Errrly<(g(9pI*a~lfn*l^V=VxHfJhRR+o zjuYiZnEsFW%b)JPdQrK;!jux9}A@;6yn!XCeSTBl6e@p08sSD87BSj2r zgdSrR=*oII-&)Tl<~cJTKPuPJ!nZ}LzOL`X_KXzkvA0yu$RF_ZAKCaFp2sRn&XD$b z&GoM6H<9a=QTp5y#~m?R=uH-(x5Nq^BRxxEguQ39m`kh1i1OD+y;JIXsT-uaEn<)L zO3k#a_=x8r_7(AY7Ey*rMfeLY!{6`^ zD5e8Vnwm0$qD%=*TR^mFKu}9az-NVQQ~j`PQ>MaSo(;?4HJ8_1UWf5IjMw3&Mq$Hw z9l`4eUPtmelGjnZj^cH+DI#n%uVZ)}!|ToDyP4OqypH8HkJmh2$MHIj*L?Ej^IE`b z0k4I;7V=ueYZ0$L%JK0!p4aib$}hXQGgldPt1YwQrnp{?e!VS)lV_GXyL2q+9A9v& zrcBAMYF}>6>(HfWrX#1<(D6gOb7$T%B!8?$ndBNYW5R%&hLxw@k~1~Ad`j>1iD@_W z&+XJs>D90Mt(E;ccc0lS-aB#n?EVw&-Dl>H${*fNDVuOhcBlT%0kfS`+iUG7&WX#I zo1d8NNo=pUaz|>nXk)s}PIpaAwH9Zz8)CmHGqc>;L7C!eSLqs5Tv;~R;=D1#m6tpyv!l{6b!_J3q{5j~r`>4nIlwWh zea74jSG&Hs9hK7ftb*d3dfQVAQisjz+ue3+QhQ6>xP0f0if?dHCwF$c3QuO-Sog4* z*3!7{g%fTZHYi@1Rp?7D=w0CMnK5~+HZ&=Ha)%PvsEqV1Qid02x9?)_H|m!7q(a*i z_q3w+aaHB+F`bn5Qxm&6(ld)Xw@*kKRF?0^>M?El*e-KtbW&2L-_$O*d}emP@+{Zz zZVq?;;F*InI!`a`qGT7BPMBVjUtU~U)vvs4`qZxd%PO;cC1v?VU6p}d`pwB3JGgIV zW)J(sk^Ot-4NJ=JQaN*EH>ISwU`knOS;YijX%}191jSccSXSioy4|*f1jRdIh?5t$ z)8=qEy@^(9nk&ufNlbQmJV|c1E7_i$=y9bbBqb#zIXwg>coJM5hr{7c^0*RGJ&CrY zl(ZB_vfbmhCfL&w9gegln=8pmpfe@Wlak^}aofmebGW>Tc8|-OY;$|PNofi86sJ4M zokCz6wgK37FmX<_do>Oo?%GtHWqnv{~5oRFHBn(T7fQ{5i7 zD=FELl8{X6Qk`~N0{@j1XR=+@M_OW9T4IXVk(laoCnhD>oL+C5Gr{9Y6Guw% z+EOW?XJ&q7;Y8Vv;l-5`bIS9JOPG(@zNz`;`Si5WI1xLbw9;2znqMND&-j*CUZ4EG zD{3dN%#%|#*;i`h!TrDUBr;m5&g5iwlEcnKO}5&(P;F01NVTOg=TcL>326zQRGZyR zV1_Hl-9Im9aGv;~xMC0!Z-!6UZYET6a$;gya*E64NU^#r#jSy6uT9O`Fw~U`cpR>TM3*bU zW)-!xdXj7`EQcdGLGh%fIbF%gHmfb!YqeUPj6Hr=T8h<{nv{^7l4wtHdz}P&nSg0& zsR?O`ZU#TamXhZ1SiM$e7deuhR(FacF)3A)nBq-vq$5(~?pg_LM}g*Ckdy6F-@9l#1dBXn7gy-)Bup zP#kF<=6Y(fH_4S~x3W#x)0|eC=yas9S0%Y@iOkYu0{{19ATcM;ZX1&2b!A99Dba7c zhcQ-p)d}nuMo5jzJvehnhIfR&5ciM_-KG%3t~N4!`QsVw5@Lnvo-(y$7Is>qGbP!c zXiKEeoL-mHX?HrTE*DGH!H#N6^CZ$K3C{no3G8qQiq&Oz)6dqVv?On`gN-kV&hfHN zy{XCU5H`Cb(UFuwAcJm8^`==9Jc(?mE@w)b+nQ+i+P&;4o>Z$NG0mBlDgqPS$sT)R zvNf4?Zf7&K+g)ByiZh9g$CaE)?Ythh-9_MFZ)RR*c3#@xteh;@ARJC-Lb5$AC6T5v z{Ziakmy?4qMVtvY)o<9L<{KW{&X= zVz(wFrCO7$^n=@FOL8YUohkOz#6`y$kd5JjE4LOY*DSCHWNz1YYWF17P9uU}w6q!vF;LlH+#hbo7xZme4E3K$3pDy0RYy7U#LSIEK zPhjCPdv%5Nw~q;Vd9IoH#g#+!9xC=#%rPp!#wa>o?CIWFQ_IRLeMLq^s?$V0^(Y$Z z@r}=)UQ&5o-Q-xwLd4deUC1c7N{cee3iC^3we_r7zKXIE-e^Rd@=GggG6hy&53lv^ z=`H0QMVvPTG^A>d9xN(olQp1%!;4GpHgUA+<@A&|j-Dif?EWA*ToqKarb|Smo*q~u z-CHxb?&%D`6jxrh;C66_r&574p2OUy+RCh#UW&%7-4w^C<~V^Z)wH!a-Wzp;&{?!%uza6 zzTNv1Y8If3qmT3x-@w_#j2uKK$e_Tw>rPQ2o0zzi(LcZ9KZiu7*U7GX$#475^lC5Z zi86gi*;IKFT+{2iKd@ZgTQfC z3DR48CP-ICS=r?2Q^ibRlPDH@VOgmW@0~@5h;>lHX|dt0nGmuBTEu}SmKEviwt9R$ zRi*h;iVOAac~Jh8>QyaLJ-&)UUuh8=N=*)ZLS__K$TcF$6>~|JFXu6zfczU?X=QoU zkg{U`b|e#IjI`wXWhuyElOF2#pEFI*7%*J=aYS)8nO?mEX5?3uP1mdTpV{F?vD8$&Jw+~q#zDmzA{ZD33_ zQ(Pz}U4FUTS7kzAO>`#}u_pSbfxe;Xt5Z4y^XQ?X`L_Q|ul9=8$#kYkYDpPihxi?G zOU|B>Us6K1`Im(rE62&7%R8&mS6V>}JS;VRzNeLy`}fww|2%lLmxDWGx){LPn~88| z6cy$T(DM^1joL#jT~s`+B!5Ch%_)>{i{+zd4VdA&lk%(%(U-E7@;eMs71N!He^EFIW&3mDqPj;*f2<&*9?iC#?t?DHtJ61YGV*_UYe-@Nz6y%Ur%`Cfa zDd%f{(m5s)m?^(k7r5Isf2IAx4Dj6U%K-f(5Ah?7QI zdD#?qKJUgQz9Mlf>Fnn#_3@VC;|R0lOxN=SjE;2HG*o6PE*!#}(G(whus+`tlEldA zZ4*{?4`&T?=`9mJ-kn^fRr1ul`ea9DVzQ9(-^I!R(M0jyEKg(e*=6-Z>PHNythJ^d zHh<}278#u*tD`50+8RLvWVh%)%Ja{FRaTQFS(ZD1`jq=JiVMoCcM07s%9QDW9j@0a zptib`EY^f%(LMRPjKzgALruJ0##ax{AU;f7cgC-$iBc2&$2QJ$15VQP08vcMde(g+yF+FVT+jdQ zP10k@<-ERX{eLY2#EJO5e~vU2g& zX6;=`zk8*ucP%OQA-&kdS>uc;}lshAz+Y9v0_Gww(Bb=yKo}APW8_N#EC?)+@MM2OlCsy3^C8R zzK|`>bHq2#X~m`ffK*I-jmXc7q9^1h(fp}0x4ty-a=h9O*<63~DA~V^iPev5OmE&Rc+)Vx zWvewn|NTW*_3^IzW~cUP9_jM%1FDZJzYddoI4Sf(tuuVlffG27^QY_c+CRaDPxO`M z??A~&lCPMy?xamm}yyMdA|NtktDX)@! zJ7CI`>6PNEPX337aM%C2|y zE*1Nqc%S1Xqo|~;kk{-={k0;mu)Huw^r}qEFQ35c)cm3Z1(WNj(<>$>C^Pa)$SJO( zloga=^0iZfGAlu;q9(beQ~h6y^9AStkGvi`hl>(i(6YIb`TpIOmclpqZl^n$E7DvH zNJ&d_r6kxL-V`onT9vdEuifFWbI~L@HQABsT>sfBD9H(%RmCGdVq=Xa#lag)8 zT<`Owa;Y>S#qH*DFxN?(F0PGpdDfl8bx=o2iq)!cJ;Hyz*&1-2nV;o*F4vhcSsi>W zQQ^+#%Pqdc$nx=tu;!{D5&0rYURRah1YCEKlr$Sha&slt=H^m&a;n|Ig}(%w+iJHZ zx@}3xPDg@0iEDIROSdX1Xw|Y{YP8+ubIJ~Z8E)Ofo$q7kTt^g(_CvY`1IoZi|b~o2l zoh~l;bKo?$&6~l~vIz1k{!{y=<5QTHG<^L$V6Ye&WBv0`1S@zA&bnmosaUV1F zdNu$ANMw=(lOT1}+xO6vNM^E%B2^@nnVQ+1&%Qr%kH8@@)w5Y8!rjB;^6DE%=~LfQ8c>|ZMO$E|jI z*zbo;dfe*v`ct-^F|!nVXEmKTZ|J>LY>e;q6!j&5lufsd<8@c2$F9KZ(c`U_Et zHjM#caL#c@&`g+BrybVAJ`zefZns%HN0SNT_C!VfZi*T)=naNCVpw4f>WTJd=Np?X z*b!%wZrLslkIU)mP-4#DJ{~aLw%c8{>`@rOJ%`cMD_aJIF6ZedDrzpH4Gm^GnJ~K| zU-VhVr~Rn`IW}n6YDcAtGnQG57;Flb*{YgMMuYx%V5sy44C01yZ$3f#FxGnAvF|^w zx-BMnjF)L#zFo4^Ye?r0+Zt>zo0YnVu{;>FRWjsiBF1+YxP6+Rq#p>|!~Ip_s?;U( z+sCKp-2!MvI#e@eia!1T(n)VH(*l!nGMo8gb3=RBLhixg!9wU)vv#p!F<(_@uOsc# zbZ0&GPd3i^WHN8JCq6v3#b7q>MxR0(V!=0D2lHWnj$MREVN#ly8Ac{(vv=DxrgH|# zq@&`v%@(YQS^qm>MxKP7x*C?l-k611Q?^Q^fO)&PSeShc)vL9{>bXwDVhQ=XiNd2R zqQ%F2xJjksacsU$w%4eYK*8g7abj?+Ru{+B`e4;g1P|sQDp2H}4D@X-Q41C)=WQed zoPauoZg8v}Kf8Tmk}l3(Q;1U4S+>y{mCo-?I1zy_{VJ=U|Y+YDS87xE~Z1msT9F1}aS zNaax#=%dKh{}dCd&lsyWUCyet=})p+P0Q0J6X$QWcPIET-_h4q*r?^wS$>YeB(o#1 z=7M~5U*%QrCEap!t?wymn@TS$X%53szQU|i17)a^q`9xPIl`TS)zn6-^ zP)+eB(QZmQkvM(4MvJ&=6!K_=R30zYjSA)cebDa+uurLpM!n|zO=6%VP#iyRt}p+- z!6)R8ZtwqoeHGT`6X>&o26RgrpZqFwYGOf>Ti#!vJ^bDrJNbNfS07l!*Jqo_)fV+< zt8+i@XP1vxC>mFLg~5?}c-ox)kI$6Re75d$bNdTJ+*P0ni3n65(KJ`LA1qHEEKr9P zqHZJ~?r|3wzMp^oeEm5}urxmW-EUmL&mye?rzoB>SVIBqYCf5aMnskA!`)rBb;{+L ze#;8jJGh8GzP!KtvR9g$;}(b&SDRcu21Pk)UO&ctf({f?|FE6 ze|49N6P~)0{rKtm%VsHKno5$NO8U%R*p9{?}gF8;_57p?r$H4gao$A{loq;EgMqZPy>e_XQ-`dD{zr`P}Se{_yM z{`%_ISBuB;`0YPGU!5I%D*v}m5oAA)Nsy1jD5Spr{oUd`wD-QPh^ z+U-tpfZy(C*qyXnZ8X-|G`f(OM^tp8d-+{Dsib)$ec{*#)uz!0cY%0`fEcU^0)(?ez1|6XER{e>FYt4qB6=24! zJ?|qhw>z45-0pONW<4G)^FG*R)&;ddG}^)I4wi8T^;gC241&XdrjP6H6VUV_W{CL? zPiNz4FZjmefr?q~L>f)2uYybezSHJiZ!zHuKnEZ6=+*Gb{>W?1I0IDh3Qi+kpAACS zDZoyBbm(peG}`V=TNw27R;T2VgV78{0mZcDoJ_uRzqm@{2y^uLqwb81adt4_m+-=Y z$-!A1SgjAjweRPaDP88ptK{<4`t%}>yV&X3a+)tzr+^N#YT5!DuK$dh2o^Q@b3bD&cYYJ0_8_SJ22;SzmX%d^SHlcs5Tr*=-R{(%D$hhKh-d@N1SPdOb=RAzaimWX3U z|05rKCZMcu)AdsFb53vkY22sZYR`t?PLxDobr#M;;H z!sYRAiH?o4T|Sr}DrB9f-6MZK*P2T@1s5E!`4EUX1@bbCjK>3BPooNI33mo`w@Q|o z@6DkO0<$f^)(sAoU{>%s6Ve2d%ipQZY0JV~%{i46mZy?;jR~A#U{(&soO5_jf!ty8 zOdw^Sb5MKGDSCtMq|ekc;`s(!?uCB}V^P^2O!(NaRm~>7_CQ6*dw1gM?Qt*Gekbst z>T#4DR+Ea1F=}@~vno~-mXvY3*8;OoD~_F0m^2w=Fy^<@o_D$2Of8k2!tG`=E=fH; zNMQKEwBMa`4=dYjWWZyOVo{2Uyk&-*fZC(JcOP;oEtx=g&rHH#6s~OSMVb$g&!{w* zlpS`u3h2*1Fz)e{`p&x49)9mA^HDKsxl~)jvsO(zQw(s1|GilMS4W0pUY4w@x(+MjIL5>b#LuOR)v#NR$TU2zCeeF) znt=J0t4#JH+4gj(Vn{g*AuKn{Xe5Fek!&K@4~b_usfcKVv8dP^ zGR5^7zS!4TF=z9#J7%^T@|f#zpHs>XF|`>1i#3ecrz5Kv zetqMxdQ3F6Ml7oit1QzOE6|u17=gQF*69@U*4WdGTjTbq%O{gXEEOBd=F*zMdJQ(|Na7nN1n!rc8sae%QR*{aIPgr&Wtt-CfyGIsYA`ba+KBjwCzg z-1xrpskv-eO||jZ6l`RShYUUJ&0WUFxmKQaMr@iS&(WNqIU194e3kG6Wdk+xSirdD z#f^^36aRll`l)j{nZ&Z?X?3!Gd+Nx=LX%{pk800UxwVp51GCX5j%HI&9BxwSc+`8n zUY%CcMR}AOmV={Tbc2*QNoD8nPP1|AEU(uux%mFHszoxkn@D8~P+b-#p1Lq6-L$p< zMe%M~T{HdE7NDJXx!AmmRC)uye{^Rb{}}v-&;Q3i{mVc7m*@X^|4;w<@#l-He_mVn z5-i_}R9e-OeqGyj;^^1tWjktGez)$~-qP!w(Tz3rzC}gB!S~D+jvtALu@Um*L-xCVOcG!?Q$E2QcMpGq7vx)P z;l%`->zbeAaY94zlZ^*4+l29;Q|uTI;$RpLT;}WE%=7f$UMLPHizrVZTn6IXO}%!v zNu@+B_b0Hv*Bt5hr4mMOuKA2GCtIsUmp9id<0DEIDQJjqB)v69$<)AgrvP0ACvXE^ z1C|o*+JMJi_pAIChTqy88vr?7FTK*~Zi921~^Y#cg!L$Y{2%RmUC(O|{&D26mf5md^GaNMK1 zc9DAUcDe=fOelZC7Le}Suq=X6e4t)rDiip|5o}7|qr}Q~0ODCv5oo*qnNJ%rFiUXk#j*XW_qnvgLj$~=Pnh$E>hq-H;PxDQ+G?omWP>R=bg4lGVf@!tr^ zPaj}HXwy#pEk^?_faFPW8qQice^Y3BJ7R8Nw$TP?Ibw@Y8qn%=i&1NgV@it}j|Ay~ zH0U){V*Ey+&K#sb0R-IQ78)y~0X2`R)u&bmJfJhQDK&t2VK^vReYX{OYCs8z03fbN zMZ{)Qu|b0NyHp&om~9uHSV0w{)=fHCXcT)wUi?01GL4lxtw zv({+P5~_s7fcB?T4xuJ67tFjF3MDwi#LX*{(@ky!w6h~TdG1CxzdUel}19yTjT^X|G4Hyu+ z35y6&O~r|C?(2=CqsGJl0Gra;@nM7WJm|NkBSx30_B6U8m=G0H$SMQB*AslGf-4Et zG^SlLnDtw;W|}nEjKZ;3uOc*=p3xbNtI(M%U$|<|DnX1YWXkT2a_w=b?^ud0%-0T} zr5qwsgVy?jEp=HF24FIux9S#xCG|%^!Zb;n!wrm%aqo-FyRPc{F!%r`yVeH~Ri*BFJA3rz8?~+*29BEF% zM%qzWT>S+#MrqPp{QeD1Ag}TD1(NFEK=2f@!XdM-F(_!J!8-n$lF$bBNJYv*z}JIA zz>jte!Cogx0)BT_z>k9=;CHjk-E9QuZW3j?U)kl8oj(;eGNg-MXBpBm@`6nG;uSVx zU-uia&s83O@p&Kax*?mzo79q&Bjl%UEkAX492XO{!+WfH634E6f;p7H`43 z%p72=_5`@poz8K*@$%b9)|S2sWxv%c#G#8QM?*Lo42i1&%yJ0z1$M!X;c$}<+)+g< zNhzimjLbYUv`9_ca3itXtk+;e>qXzH?mlH7HQ31=vW1{i+&SiifZk?qul38#l4Ut* zq$HKL1A@W1SDdX@@w2nyH6w6)eseff-@Vf4CsDW~5UIOoe2#8p4J8={Q*HO`KesLr zWqJimbl5l0t*x6@LYQQ~>_xCGFW)Os;`?1vLazX)gFENeS|$L2zf=(Dtv>;&nGLlJ zX|aV+{XNM1yGQZ#i&nQJa0x1BEt`zsb=}sO=Z58`VqvhPSq)~R?_b8FzGN?U(zoS| zlgeXJ4#7NYy8N9D>WM-5)nnYUZ_dLK5GxT5$U-6Wk&Nh&yCh_-YK~s zRUmQ|`vjqqGfHLUn~^OnsW9?6h?}RvXeitnfmtlIg4Ahg;Z=bTPaqH}EYS-@2_qqq zZ21CAh=kvJ;CL>py!ee!T!aroiN$lmg=a3b;|z+A{Xs%zsw$YQjAas-RXu{Wd0wH; zNYUMab)P^#HcX@9pSMrCN=5t@6&OQMXBVP1z6YHL=R<5&>}pt1aTaz_~*~%U`-QP z5Voa{f+&#ELxUH;nYs0p#YmfikrbKUJxZZ>;pq zd10JS={ixK9m~2*ZH1TFTH#Yg9t2@Vart(U*X~7iG=n?G#lr9}RolTA zm(riE{h^mf+)}Ca)h3xt>xvqax+D$TU#4n*C%4b>^Gj{0mW*jHjLMQ}xvkSLn|~trmA!n)?RCnqB&(M!#JAgI7>gBejK$I@<|&BKah<G0X;;`-h96q7dDd;{ zF`d3KNy<0ljE8Kcq<8jXlLK8tOjH$F+o<~U77aipYqL;@V=KC;B;bH>kF@@)*dDWe zS&C@U!-zmRVhxVKjiPy0EI@3|0}3HQnRRKT*R zBwPz!nwwTRW8tjg9R^&iICq+jE04k(jXG#)txP{YIhqyqeoQVA&e1AOC@BPc6fsv| zRr537OZu$HtJEuYN?|G)xq&#Xp^EJHoEK?bS}IfyZ44El!1;oLoldlWs~Z*RTmxbi zi?5lGb7 zRxlUpIk3@2dJJl=mpq{SBy*bUX1ki%Wn)*1O4*tghnrM79vA2pC;2jG@e`Mk$d^ea z>4a3&q|&KM(xk}(R!_Bcs`jL+3&UoXr{C;J6~(({^-1ZcwxjJl`^DzjrP6Kv?umx7 zwKlbPptEicbfs!_O6S~aOpbrpQlc8oNa=4813kuD{kj=nnHK=9OY;{pAy1Y z*WcG!RM@j($R|cls1WAk3( z=saJ+&e6Viy-+=@LA@O%Bg#U_uuNeJ$Irv3#L>;kn!4MR5P?7+;1oj^9V9%SO)C(l zA=l&?MPC482u8o)YDhwjk{P^-cY1@_R)DX_<$_yS18teGE+lR2*$H z8(b5Wx6wlS_4oP;yHf#sf{w$-Qp{bmQScnhIN+k$5DCWYSi(<%f(7qpoS!PlAb1f$ z=mmndEI#~#!^Lz4JQPB=UreoV5Jf(duw)Ypx`BB*;;)YqI-6$}x^`gJ#GkCi-r_s6Kpzrn;^5hsSz&Dr1Lqx#-UL z!kV?o|7aO~Xfk|7MIKJ!+^~mQMscI&>(STew>$pcy?z~LI*qvN$0^kRT z{)&41f>MP&OFk(`Dk8XBfrG_HTjwA?6*63$gBDnk+c6C?-b#N5&h}>7Q z5|TBB765bB;zi!m&ZC*}RS4_Mq#$N<%i;)R>+=N<^mRPrBiyo}>HI-vD%vE4A!Hr4 zNU>mN2;X@)G}O*z@vkPRP}Nu`?4zhCK=}5A-Ja;>UJLbE(0yoP$Kn_mh0aGlL*4Rb zQ`9&76|c!40FR`)%u$VpMjI}D&)CvsOF1bt}KG5lhJoO(s0R0vZdhLUD{gB{FKAZ;;M9+W>@|IBuW96{+Eq zIyH_ZV1a7#5S-F|ltGPHeq*?T68pQ$uMro^Z$B-+{o?qlpPht0N?1huv53a$HGZd% z#%x)LDHLsTAkG3b!NfX^kQ+J)X?ntnIDng!Vl@!HnQg+~9^@8*$74-so8omqdIog6 zFbE0K9f~(HX>`^SND)g2k=INne)+)4pklo!4!)y$Lju2d*g*jcdUgO|`S9@r9jv;< zacos<62_w72C>hGiiCc81lf9ul!rBDZPG_^Wm$|&F&Mw}I5>V59YeKFY3lMOy-AQG zNrlbvCfWGu$0eK=qNFOJ-q)V`abT~sIWzy}DVcs95cT!lm+#n71-X66lsecfn28>< z=~5n}(Y+-b-CJ^_drQBpD2MJ{pPo~-?%kZ63$wQUrx(eU8Vy^ulnf19`dj4g0HhWN zY&-#<5yV4S3rmVg*LnjJ>Y9HUh^@qscK2fsn?sf~d>8A*h)ztj+M~A$B=fxP@8u%fS zZkTBxv8~6}-D^^=1VtJYKcC?xglB!ir=le7u5(x}VMFA{>4huBF%Vry0rOO~!q0DzT}hOv(Ak3(945z-Y|9 ziopJ!MN)(u^bk4%c?Xt^RV-SIJ0paDL;PzVUeX!PKE zJPW>!CEiW~KWV4nv4}v1RuW%DH)f8p=NFc``LYt}3w&jT9wC0Xq8bs7iG^Xt$l={F z;+d>`Z0LT9SVR(6anPp4cC?Nc3B#2!!w~3Ox4^1oNFIFAW(E|q0RoDRV_=ykX(7!j zBi|rnKcpxI|DexN#I`f|CgDcFiczxC#3h$EW4=e6c)PAIIdJopfE{Q!=>!h8KFBXuyhok8R4rjuygi z%z@zSi)2 z+t>Z|EyBYOr@X4#Lp$xxZ4@$uYh6CS`PG9xeG=Y(v#vXW5oCPRw)IHDFWaO7j;|C3 zHmnJ79kfmbBkK;0Z{h;H1rE;U#)hdUb5rSZr{Xbcs>3-cTuHB<#6DB#du9?O8M;Y} zI)t0WuZNq4(>zpy;j*-m5xw7d%q5X#t`Jy!!AOZhag5zG}W^c0Ch;L^gLse zkVS4VqX(7Ec8kCj>@Y%7z=(GFGT~W;pj@%>Abq zEd6sPA9#t17Fv<}j8j{1Aw&kMN}nZE=px(G~1Q$FV-TDw|OU%@(@jv6$M4cy1khI}BT97dEpVW4Pdu5ez|; zN((-0&Qmig#pZtD45iDCVIRC1BOaj(kmoEv9P4!j9UsM#8La2NPK9;YG1KN_z1gr{ zSDfH$YjDyKBYy;aq(<|&vkdv-feSJ084g2H@p#keMAq-V5SziSEUhQuJBZU4bEuAI zm4QWTadx{fn$w8wdB(2k0!PE*T+i5DE@bQFV(&m_t#-yllwTrw|9bs+c>Bw*D^YG9 zA^>kp`3@y}h2PLpV*cNZC!If*gW>LSV19eJ8^-*vBcC1r<}VZw2NN9#%!B3EC2;8s z43E%Kvv64XjPMZyWx!=Hc1y0-B7Pc>;5CsKjnRm@SKp>?95Rjlipm#?9MI|zx4c8b1$t(<^B1HhjJyF3Augl3Y zbPta}BEhKbM9f&7qYRd+4gAO_qk0wi3bj@K9d)ZyKWMN92-q2eXfj)lK^&?{2D#Qw zm6|_LSE)BE%(ZF;LC$D`U=HL=lS&F&6vYQVx_%$Y1TWO-h8hs%8>4z;{`{RBB%&FY zW@=nhlWoUXwq0I)U1A->q=9ZSS8;dUJc+>1!k>S;ZjK6cCW{F3E146oMU-DmOM(?7 zlBftkvPmGr&8V=xOm&C|>)SKKld3ITTyC*P4RkR(Xh2LYBb$R7hJBre*af`>2-6V& z%%%m(O0dXvzDmW^_4CTUKi4|;okpN|edn;Csoy{T-J@FKJJ)tFJ#!kWjg=q@0ScRK z$ii}K{Ye;zBT6>C?sd&L;zx# zjuAxPGqLFfDq<8{Q^(ugU z0Rl5)D#NIO@*_$jQw#$)YSbuc%_i>9Xu=*7nw1U_F3U!7SUk8>GdZzYS;;Kf!MzBL zljKgOK|RzdzSFYk2g2I|=q=f{@f3cU^DdGd{lbz;6hZu_v-8Fto6+VWtcCVqu?J(I zt(gm1=FJpg@~0s&wy5~$oyftLmw5-oYe5p^(2wcQQ@~EZ1F|1Tl&3z|iWm-92c;2V zr&#;fT3|`uEN={Y1_9~|og=)+Y5CL+6$uDbFL*G}rJOMw3|K=A1u~_F_rIVhh|r5P zX89*45v=Kx7!=+Y_7G$e=GL}jiPSz4>eiyFY2XV&iD$HN@d2m5!@dN5oJmU+k>8m_*HU z*jykLWu8NQ10@a5p`Pyn$#q%a%ynT-ZgJ=+-Yu(Zrk~A&U)1;TyC(+7CNZG9&QEOL ztI@7-^-~-5b8^?HuY{a13OOOy ze%#j1$=%vYVr>dUJEu}2z-G^pma6m|T>AD5zwOqTBTk?h=60g5^}?ti0<*%B33VS5 zUuY%tbuHmfveE(Z7)AgU5mtkg$L3aXXkvpVyD|fdYhIW$i0itXu@)GWa0pmGF$2&& zd%X401O#Uue`jPnxU+NiMyOIO^!Joua2^q&Jz_-1Fd0WE2U5KOZ6jN1Rp)ybcd(f@ z8W*KtqipUH$I}PQtJ-e4xC^Ygh^p`ugafoHP`8N70aJ$S1eX&F1VL4Z0SFutDK!;E zm=MKnr8^d|*>t3xW3q`Ia1oOU!%!+VMx-NPy|D7wQw1o5!HM=fW8!4|58ggpm=}-!EYh%6Fh0Hco}SGWJ6p(iWyZ!@Cv3d@+R(u&yKPO4N@_zu~tC- zTxepH5fCN4#asq8f^%61^*9qHG!8FL?5TmKqexJ~ur-3rF|~fd-vYaXjE+r)COGIB z0fy3N2}7F|NnF?p>m==)dMz-Bie5NIh&b?kGVS%X`Ji#Eyy3UkY%s1s?+M#+xE~4y z!%Zb5al|sdF(VQ6bzC7~NJID|079f@7zI>}nizaujgET)u|P-j;4}QmZ_ug%{d`F~SODFcov~J!BZrNuq!yYd-d2+9LG@{!5b*7bPl&RwRB1O%3s1 zlpFe!DCgcAtQJwxjk>^!x1V}{CUU@K2NqhO6Iu=pL~nsA3UOxX5(<8A6oDuzoJ zZz0GR7ek*4Hja<quSQrP#niz#fim=FL82J+^5Aj-sgPvZs=Fce6ym*IOi2rMFOtH_011N3W4Jn)2p$c?C#M6`g_ z?S?H%JZb|oE71xp;sW0hMPdOdAhjZk80waC-crc_9R>@6HwkB^A6UKH^jGf|k_m@U zFeeu_9#8}xA#c2=p!Y)L=_6Q|DhAA@Md2|ZR`MQ;1c_=S5)Ew&X41xb;0OVa_mwoJ zP)4-BkYk`uB8kAPMc5-txC){GT$TZbhsNrdH>burrUXimeG3k-rKzzeu$;>eS6dyz5jPFa%~@jDqA}cmD&}I&7K&AnJTjcrzipcb1F@)Sk z#b8Q#Ou&uQY<+E@g+(UZSGh|UH! zLXIt(zP5EMY^7xpsuj?f&y?3e=!!RCNkY29AcAi4HZ$~9gb3ijhgUXpk=44R2VhFU z?@Z!herBCDr+G${J?fhEk78*8L`h;#|nKV)k1YM4|97ZI5LRM;!Qzi5JCtBySIvT^BL@&M`>~f<_w@~5Iron z;;U&wBM)9y767XO+!oMkF>fI%nxLT^(T4gbdjPQkYusC>RmWvHBUytw5#I_&&5F(x zs9Uk4(56+S$YIi3A1JU!GwOpmP#;FN6IIN3slr4$a7AXVkP(C0mJDLL1{*}IFV>lG zZV!5CRJ6i}11;>B`WD1hk`e4Sh5I$bg+un@fS}vD0IUZzV6N3S ziQMd?W_czxJYFbJz}M5*?8dWW!;ziU$GbFg+f0R^MrvVn&%idAPQ?N!Fgq~jpu0Mp zCo(&rK@oM0O+F)G;2YCLRU|#Y->ve-zbCfD!)BQxjUdppb&i72KwqFaU;uhBbW8j-os=9>M3`E_vk~aDaLG23bbjz^NTR4;v@?bg zvJBYO9f$&6G`QEv%vxF;Q~1k^(`ohm;ID^7;4s?Es+wCju@1oA%`gGi2X+u`8gm9l zopH$aq8V@%MUI`C!OeCd-}tOl#TbTx;+QKqLq;4!_&c?SVxppnDKJm4FvtQG9Y|{K ziOrfi%p*Y{7O{fdz{I1#iwtxS^RT^~0#GjTREZEoMiL9bMMY~+SfZ!23K0@P9`rsu zI8Vmvh?Bv=Hl`xqTrZ+=P^CE9xG>3{rU+SMoAc3wH*e;Tip25oiYI78j1Vp&02~oV z^9D>5a~k87ipeTm7ORU%G7^_Zr-yRYF^97wmSZ7C;LOJs4IXF5^D`lGPhQI&{nek@ zO8KLB?AK?J+NmL%jk)XU?fF@`KCaGjsm?V?GE;w5IIAWX2kX^Z$hl)KH>&aH6BVvb z9yQ78WSNTGX*xezr*s7MtyYH%0ey?}H_JK|Y`U}8Wx^BEwil5pudX)fs36|^CeMJl zmlp|VbL`XSyNLV~mq;i?zHr)HHod|Fh$*{Uqb|rlH^hGWc zrffyhTbG3%>~AVce+;F?$*elVS2%ADtj^1`$h^ON42RjWczFM}lw*c21ysk@a|tth zz;Y&9aZ1H03^K=*O-f{B!gjb_1$$>w#5@gh6Nd(s8Cf}Ol;L59Y8qarifH;)k3v@! zJDRhmb%r_3xapGT*{DGMK+rJW2}IeRgkg@_V->OFnsdX!4cEbqV`_%lQ*|RC%A`OT z661qFV)ECUXU607q>v=)?RfMOUOt^RHj&R~{WD;{uA_*bqEl+L0@ z?&}%5sIN@Q)Kge71A;*u{sx4y;8gRy3-=BnrO-5(8a=~+>)ON^;?2SD0Q;CmN3MyA zRs>_pB9X#D#^fC8VA~{)Xo97of0M$y1~fI z>N^XkYEJ_c4>dRBoq=X!jUZ?NRROV3ab&N=e4FDZ@l<2^$4f*}DnebQii8F&WMt30 zZB`}lS;(Qktk4!p^Hj7(c#~_!7Sx5R3rUH!!mC-#h!cb}26z=sH8B%~>}Bqc$1kIS z1G%N5rFgaa&q!k*0g`XZJ(Ijn};47^L0D=DQ zfqRx$_9sl}=zc&B<^?P_J+W<)w04uXux`kT)}H{UqN1r20SK7MNu0;zms{QIKJL0I(1`IjKmHn&1GEFoH=9o)qBeJyyh2U> zefH4ecv75P9Iq$k*=ik`+o$-ORs>z>}DOQ_ciDN%jYuS9}or@ao!fGD&;K?U&r_9ZyrX2k5X<5zkPU!jx(EM;bbw zsa6#fioaH{@5HMz0q{H_7U+1|D?DRaMztL>AV4IDlmtXhHVk0!BjP@yPDINEKT!e& z*9ae0&=eCGLl}7-Gz-+`OA=f(QxlzwD-VGcO@uz;OC(xXXNvyfn$`jL5E0u932tI4 zf_@R05#cZiNmkt{c^EU0i&NMcJuS%-c@K$EAO~{~c_=~=i5fuUG4hB&9pt8PeGQLg zgb}?3xy#@TYPtD*TJQ%FXc~`$xZMUx^Yy_1HphDxr_&2KIFS5Bu!bp9)htv&3o%Ou zMK%2Rj5=Zw2@9{hz6`jO6w3xpwT-=Z&2f09 zY%LyybuW0u0tR~-eoVeHnHM~$15M0Trn%_D^N5xQk07&8BfPgS?;XLuJY#s;nR6}e zz9<$6|8`1FNXkWQSW7GR;=JYUZ0WTEn?R+b6^6$>k`-5iDf;$+$PkmPXkFHEv;f=Z z;*$C*AuK?zP3&VsA>6DWIOa#DiZORaamRd5O)wZbyoW znCo;g@C7$C8f!$=F&afYu=6XC222@#87|-pX;sWtdZpNAeBnH~M|5X8BsIYcdQ*L1 zWWQR=3@1`-3}qVJN=CQj*odBOV4|q0SRF0QKhuKzgF36XVaMxm)LaG>pTRD@NQp?c zdWYBY2ob70h~Uf!#55}|3`hgwt_PPMt=!1xr1tO6_gTUC0h*d(8UIk3E9k%^Jzppo zp++sm3h2wr31b?Tmx%iwL?mp$5PJ(b2-(NSFfWiEB0?CI%t!EmEI-~W^p*6M)!Rsj zD3KE<%k(SK$T=Oyp&S38MlqQIq)cPsEy}3KJVdt+*JiXX69~^Z*FhhIl+mH%GvV=v zyJ*lI%mC0OgF+A`=N1Rk6uo3tyv0%9SQQjDH&0@kE++zQG4xyr-#+r#;I!W zlrLT^@2p=e?!H{y+bfPXKRflDC(Bj*MD}M-7&@O%9_xDkv%8en2lA3VZIahiopOnE}r zN6KP&vx?4a$M<6>jT0LD-(?vc?rvi%yCyAWa;mjCKzXf;&L3}o5w&w$u&wjQ?Q=S- zsgm>QPWxA5wf(YNv(EEEHo;I|HKg?@$rG$fVOBPhAb&gunFeRDSlE8x1TR;ssU-qY)#O`N1M!s|wRRJl7TnmPo-g7=f7wK((IOHEswC2!3@$bEhsZ{y?L9=Y2}6w z@m_AyrJa2v;Jt1qZ3E;7qJnV&CGYS25aQ&^1`+rlQ<{H7y1Gzrs)BE>LZ zhZR<{B@%7S`)(F=@`+EueyasqG&YPsS`SeL1Y!YV&e!&Vk)#U1Y2F`(T#x}meWp|C zK9*@Fg@Ej_L?Vo>Q3}wexmumW9V8r}eC}CWGOb)_<0M5)YV!ao6A_M$q?6fFcb0At@&Cx%jm z9nT#4dOceR6k~ME)+cEs%&W8N1jPam6~idvl<<#b-skmFXx2QnbfLV%iioAo=m)trJ)bL1htQFFrdQ}o_{5-9n>WJpQGy%;QiX8 zP{iZMhx;#5y6t3fp1iG@Di0Ps{89j;+UBx64X?lQD0^NTH;0QO;^FbBab%(>R_A9I z)AI`hZC#$)V<)D9_pQ<>A{g}-)J5P_#!riWRcR4hD) zIa8j07i4Y&D*F0uUD!W2u5k7#nCXpF;_&P6@6bWkv^o2Yfz?DQQ5LL4)w z35gdb9+p;^EwveDPz8k{3^Z&wJmm?RP#^3ek{0t(gaGv*NPoSGQ<_B-r2+LbjGm|? zWL}uCwux9;VfrL1^(*0W$WE4CPl)7zA;7X^ox{n2?uVuYEfgcE68exp9<)B(GuRSW zN4yS5ruOy~!t0h4i-Ceri#v`Y0inR}4@Wp`72f^H0DyNxxbnP%s=(Y5$rftDv=Bb? zfJa6NT07ZT_(V@H?iFE}3z8^5tU@MjyolH>E#Pd+H23a^_>SblJISOkz#!8BsEN|y z9RYb`ERPCKh1C{;;v?iAdz$N^1OQXQJ%E6TH4==sN*MaN=mhXumiXBJ&0Y&IEo2*2 z*l&GmBn=oYY9-$Sp7W#|9R&T9>4CV~aRX*^iVs3=KvxBzL9c{v>Sq)L`%Z|Yn=$~QfB3FXe2(4f<017}^NDHpd&v^7X;`b$PZ3(IXWY-;39a*@Y=@uRJzJoxBS%=RDQ@X5w3~ zs-G`HJd2oJ#6SL+;V{8jpL-~k)Au&AsV%6|L0g&Wj+#B)HHBm?xC5FyL!c_^&5xUG z9UP;{lGmDKxtcB(O{SVHj4~inzDNRg>NL@)I!%{8HCcyYBW0oqA`!D)ng%xqOo?a9 zH~VEOe_cj42>W@uSRJ~<+<#P(YEt34I}W?OnO{MGMg;-uPmUx^Db2I%^X2*_$Mc9L z7Z5Ks1<#XJ8Olrlf?_cBhHhy*;o?;$87Ok>lmMx7N^GA931)xd4hr}Nn{q$~$MDib zj56Y>2w^2OXHus5!O%V^TQmo(kMPbnjHw1JRk#j-S}-m>Jyrb9a%sELnPq9^a+o79 zP2(cm3Ba|8`eI(;WhBfrhC;x6a}Q2KI}Nn5oQsrZ^0nuy(6RJnS2QY^PN*}plt}=>$ugmXuIie{1oYVA zrf7DxJ&Gihx7(326_kD;m?5M@K~hYnOFBZzH(U}!eL?X_WogbZZJ*}sE^HdcTvtgF zeVuNGR-HXvt`;eXLOJ{KVs(C8MMKr9i6=dqEl!}Zb>(^^^mNVDyW`37s6KE(&N^!< zE#GX?XQgYenp=gjxlY$ZD!V9}Ik%j6kdM(fA>AJ6U0s2S3anIMh+{PCix8zo?M z{!TT5WRjaDSL@~E$C!QVIA1TyjwHyVYMp8|f?JxKG;J=e&KIr_U;J$fE=xx|+7wMs zFE;5~=WB{^ceGiYn|i>TGjl(p5dkxGkVfZRoE$}o2GTK3mnoB5;DpRs&>+ugcTwZd zr8?0PAAXo}n7I4lv?@-jH*uA9mBP7(*lBC$!_twU6Op4+$f8_Qoi3E?a%XiS{lv>| z5}ox$RGG(yOumK5{NgyJef{+76VSVK(x?y*n`_3C*JbZcQ;{b*ajWK}&^}`YS#Ju? z7RNf`>upKeJA89IeJT3+^rsagcsgq{7A__$9VQ}yr1IQ?DJVDXWrQBO@4M9JhGgR z)=UQiDM+2wB5t`e>@;Z1#fwnyccw4%iq2Cc&0>AD_^FDUr6*~At7P|x!o`Uub3wC) zTpCk#kJC|Ssn>mrVb;abw{jAKbG&r^F4`F{X8vr)idUyQJL%p|8oy{;X_V5mw^-cI z;}VCZMogvk?2(tz{It!YTBH%ZB;FidPspd=DHP1-(k zdiQE^aCn~6N2Mz1V9rMu&8f}8v-+uelZ#^IN>>PiAR%?D$X1Ptni4eAP!EX;wxdY) zV<;mdI9+ef087J&IBiK$ZOt)GXsGlu(nqlDX%s9g7(R@_T_Mrn_GB9*RQ|u1O|1Cv zEY39Cj*Z7qD1)2ADiVH8KyekrlnjN(?#6?TAV(9778(n$s=!#?h$|8yjd_e&f}uWw ziLzC2w-iMLO;6}2xHmID=LRgmxh;eVcflbEO9WPT&~RzV*jatlq8{fn%yh~UY6|@` z@LpVlZb*d~O%yHqF+CI^5us|tus$ysoXKFZ9WG7Kxmxhs=z<5sIcTd*YIKXHFLo@bDimBEUU?lRnR0LH)#`A)g0ll-of>#ph|u z<3&3HA+Q37?eGau2^|vcBOD&c$#{V7%^|SVDUc|GXM@6^rwTj0XNo>S*g{J_*5FHZ<3 zA&%C0CIHex9MkMOVEDYi=%5}OOguLP)i9<#D|=aV8vNf0#0bZUcOp#$J7^H`oO}Zg z6u}9eYfwyL4gf*+s<vx|&+%eK-HO}Cm)hoFf>C<% zu&NG=8(tdeH~G5P1%8hH`{7}+{`_=(l?>Lm_eaWNwm7Gpdl#tH`pse{*>u7h(8z_n zTP}`I>Ke7umyhg7Z)x(Z4XEKc=!i|cYTX=+-`l6j<&(|1@9w^cLvVW)WpRy-1v3ilZ~b)n%XM??{Q54Eas4_e z$V_wa;QFCCSSMX>n_3@p+veU@-{#=q;g`GX>) z+lSAab6-60QVULmjPnHMnCWU!9Q#+d`WiB}Nxwb!(e4i}a*I@de0p4;yjv89<;hu#-GgOjo-{`a5%`G5YO z?Js|06Mb`c`R3y2zde2YkN-IOF@2twjNG%QOMy{Xn_cZ`&AR>Z^7(@(|EE7T_xiEE z*N?@2`|@-3U!JD_`CpFz)6L)hEc-OG#}ZZT&wE9R8myQ+Pfzb zMX?hT*p&sW1QN4XG!oWMo`^-H+BsI|&ed+#f$Homc{QE|h#Ht!0#6Fj%gco)I4NJJ z-;j~5M4QaPCKIg_qH;QPGktwNb>5AEaa4rm{U~+1#gjyg`jpTJ8Pc4BkW;rPK0XT4 zpo`Crj#Bqn9aeP;&gnVc&M*9U^ON|EE4@9=HGf=ALRO8gQJm(xz5RF>o%qS5y81cS zGA%-vfL2l&oiR@>D#x2~yg6kSvQzQXg2WMt5HYIb=F3=1F_5Cb z1DdO&m-zd5{ULrLd|>>3_$~fM&&)7Of(BDQgT<>u*Nt{QTBIvy_ynFy=5r(*Pp$J` z{HOQn>r0P(Cb5{sUx0ePIAF-ai0l-l@t6U^7J+n?I=Cpi`P|}736o}% zj1%+0x6_NgQWHbCyjQnJZu*y^JQ918cSPoadwm%G(Fyu^#09}XzFdb+USptY@q9<>{t8AlJ9(Mtg;u>wIezG;>p(quYkn!H8+zYI z(%jK$%R0(MJseNVHz(P)br7ce8NRh)RGsHUXmB~TI=sj!Q_Pm_cyaR6Nt{u$0>b)l z;N`NNU~sldDHc!hS0kk^G+)e@`a}pVOrDlv+0DXbWt&aRBFgH)r45somCE8Z%Gqn1 zmgqvMB4zVRiD>4dMaA%jNKl`1Duzt;=e7VYjGuwy7(W%~?xooH8p+d9u?mC(HTi zvUs}Be^0J|k3`(<aS z5nmMOavDp)>ZiqNYQ2=m-7$S~^T@<3l!`4m>mN@|PK>DEHTQ-^HoC29u5IA@PBHOB zu1QwM1l+~p^3+we)CR_=U$S_Cd6ra^R(rUSXkPZy`r^Wa)~ zymYk6I(2@TXv{QSpBA&9L*(^0d+!dAj~N9xQl__9>z+ z13J<}1@9$jK}}}XWU@82$t8XajAc`;PG>2u&g4@flhB{|ep1k%I)$AJS7{2HWd8My zS2O}@Y_70Ph10|KtR~s~I{IdNG$&ol7FJDh{`J99wS25TBmE=?s(7zm;X4{MHFPZ? zY>jv6$ZqXa5IqkUBDz@gjXJehtuD|7QqQaVS*yR!7P2Nk*w5F)c%QOror$SnXEiOB z=ZE#Jzyg@BXZ7{;X%q#ykVq5DBELpL%R&e`58=~(uPs_0&g-QgGN+WKd=G~tezv|!gyRUlJ!``b)zTU6+{C6*}!jk3RI?w{C{1;^=yK)9+uZIDCKosyA-EfA#+TaOe*U)Ai_m@1{LY z72o%7dV}|)@hf``x?*c|DLP%J^{U_gFuWOwc6W30AypLjV%WVIc2sN$W7qHByt)+O z<`s|k57&b$)rMD5(OeyWee^Vtqr+!s0jXvLWK|~TF*R_pR*NYpIF1K%W0Q}IDUSJ{ zXrAWWjRYGAn3?h-cZzxeX}mSpbywMEM%1Oa4QDaaU7Xt1Idv&6mZ&}Cv{N0(%C?Jy zq%MdKU9RfKD<>;cPW+ADm>`DS|Jk6+SuV{2a46$xde7Z6A6k`M9}w|ZM$=n>o+-HI z6{do%EZUUTtIE>wubGoOr)&>yF9UVvUXYOyO*gcoZExs?{~+W>=B?hXA+E& z6p@{LTuSwIUEfk{w%aL4<(uQ4Lzme({2DnxrF+{qla(q`o~4x;5K6nQ0S+ejgA@WQBb}h*{QtNzgDV*a=C}t zolQII>ZdrACfuMN9c`|ZyL93sDb%atm<1_o$Ws|Dhc-y|w@#&HvG5h?OqG-z3Q$kkFW8e{YLQ79aQh%fTVQ6LRf_pQJwuf6qR|C}z7D2c- zio&W9sq<^q>qp2r;ip0Ti>qMT+>9Ay_KG@L~ z@U~PTY0cj$?e5f#3#5sEr!1ZSbzwX>8511f5h4>)Y&?xeir*^U%FpT$E)$B=28PVw z+fn&03S;&?EwP94JRG{aIWsNlsXH%TPo{`NDZP{27UrXgpk{rFDK|e(STD&3(dbQ4 z65lr^CPPw0$aHbsQmHBcRr))c%hplm2mXgVf>=qzI+Uf0x*^Q1*y9;gKsBYM)sN(B ze0zjBj%006x%Z*YwmN4=psvyCzUA*Jy1@> zm})p##YxPGX-YGO8?)Z(8N)>T zez}&L+@-&dHr*-6^(rODURVvT5JNh5z$ZI^7!d8$ufR!q7!z9AF) zyt$QgJ3yN>+N|1F>_ufAL6YydF3*fY(?s^m(_aEKDhd z8JngsrOm?IoAvQvNE|rtio`!G{jLn>?rH{1cabek6q#D75k!G(r&Dcp*T%6D^>!+v};MBpIa?cr< zfRzXA(K$>%-SmS*v5IW+Ys|e*2MsG=?tx7v-t=_c(W^bAKnz{9lW=O$i};Oho%k}=4eG!Ujv69zY>+oGmk{zW6C++~FeB)6A|$Jsd; z6Tta4A1%4BuzBY!hD*eh6)Hw>es^aBOcU?2F+0TsQ5R*ww8@1a8*9)Jpd!O8;bfa~ zENelKh+8E7d{c#~r%9&Ys(KqIC*dl_ARSf*?jk>VzJrjv@ySx=Xg70ufdZM!lf>3! zlE~I%#1#l(zR4c#XMrdTvCY8=_;8bnS)P<#-#}N$s@1`^AQ*JJ_g@G-RX?T|al_sf%3gS|)V`Hg0c@aJ=uVY>V3XxIcZ=QXpWXC2=ObsGflU=<@ znQt`V+QPrc^)84%7Tm@1buqoX`@pCD`TFSd$J_hM`w!ReF5bP){JX3-ot1BLcE|Y0 zXz~VTPb-=93>EHC##e0nve>z7G% z^Ji8aC9kVooB|bWDoqUBgl;xxo&Pma&zdY|f*EbED5Qkk^Y)5k*4wYh&uYIQ;Usb8 z?X2D0$8%8o&|d3@hc<8;26S%<%*B}qw<$^FZT+SMmM>bIGVaDLNPX3r|Ptu?C~ThgPUw})oac?{&~HZk8iVcEJ;C4K90q* zvQx#16=tB#DW<{M#Wq`W3+kpzR*X&6B-1sQ))UHiNqgQL|0u(*%w4(906W$v z{%lK5YB;s20To&px1m38&I)4hCIhZvUCt`zrmz+Q1*O?mdfaz=~(8mEQXd3%Q?@xDHR1+C7N<>QB6IljCt z&VT*<@x5QCCtGtQwo_%AyR5rMRc^N|T3I&U?s`6c3%}J-Vg8IT_w(Cy%G=CPD(t2A zeEGI`pG&Lzt9&3O@HXETzujK{{{G>Qm9Qvpi>uqGPj{DJo>JyhJNTM!i%*^Uw_E@A z^6yPL8k6Gj?R~y%N?hIA=qBRUIkkQM5En>)yXkK){yzJcnS&lJ;>Ns1cfG>hbD1Cz zrqrj%KBNFz4nIAYcelUX#~wQQT~hR`eA^}&r{;slmw(hx6bbDfm{9pHQq9^F>0FqR zgRCO#6-5`yRbq+AALyt$D5vj|V9fnhDvS0^4G~uA9btHr1n`GAmMZJExM5%%zizy{ z3jY88#HR%X#(ZcvHHNm^o zW#8p4`>uHZZntkL-uBIRI#%>Szo~EfO?}gE>YMM1=$rYfx@5j^N^JUOT;lv8E|C7} zn{jgdefBT+P0tX0^IhFHU8e4vsy-;zH&@rs4)65Mx>9}b%RlOSN8-aH>Tex+=&y+{ zzuu8@ir+5pAVX1fc)0%fadS+;I{d^%bbNR``{n&*4L&6%z7UgesN(4IPaC4V_ zp6cJgrl37`#=N^L?>_w+nf!|?mJ=Z$T|d^D%T(v`Dk3_)zkYmud+8foMi)Om|LyYL zRW82=Ln2!|Kioe(+&usAdWG( zzJ2-pc>DhIvyG6ys<>05uF}YUP0e`W`lRIYMEG02|J(J4=S^XgN@8SY+1JO`HR-;| zK0Z7&mDf+X4fCd`mxcZlZUe8Qv+xbjy1!%KKVBC0wD6a+<EvNk^z&K75Sv|p@b__3+Em;W ze0ZNO@Tva!kaF=HXLespnRu2>=JfHJiRXIq`Nn4xOKfvMXK7BYl3&Con_h&AfhbsLk5We%?|Kc!PX<)62_Y(D3tn~5KX7j1$;zRL~=x$a(Wl^SPt z{b+JbhtD4}W^V63hf-0~VrJ&gAMe-Y=VxJ2K0Ky<{-&4r_Xe>zap5qPsvlfG=NVz| zx0pPFv6PTB7mn08`z#Mn;N;X`KWz$B}HQ`c`Uhm z*7`zFBqec~A~~dFw;KD$pXYreGOLPJRQLKIG2@b#%4=j~WaPePHr^j%LMO`*e_TCO zHdWXGO4W9NI{E!!F+0HRx(QJOHPP+-dU9Wy*r*KcF&qW&$*NYCE?<9wtVsa513m{X5dt#zelQ&z@V7th&OX?t+jFEeH)6=F5azf zA~^uSATEN~b6@pSxQ2YQydLdsZ98GCeMTmj%vgF>pw$_ei4=624&CEp(}C%O#EjAM z{yKJ%qw&uhD(54k;YlHV4>S37`1y3G>DMQYOnVx?on2opZzI@*wx0`9@q87R9M{1o z6iZGUBxlX<2iVI6k_$yb4#0z>tui8`t$+A1|4LRroo<)!AFsLe_K(Gru~(ZuPPIZF zoAs^k@D)ytl0LSk8Z}#(3%bA*j5F11Ro17)Qv|j&3)T6U_2>QL%XQ~t0>mDbo&^y*5QB{-ULnPA$ zNlx}+knHTh4IVfjxOzHc%fP>9)`l=X@U-QAdH&mMVPV0GKQ~B8cX_j%MPEHi{SuQZ z1MThf7Vdlhzm@v{#!W67Z#E*W{9hj!Jt`_~|Bj6qL)x7zzqEr=1g82abMonqSMoNy zcbj#K{TOXsxuQ;6QJ6C#yP#0b9by9)ar_C7x_p82Uz{a`m=SASL4;hbU6_0)up`#k zE0AyNRw#FOg~-uIfTvNwnJrJkJf0{WKyOL7D zhE!OvWr5e1`TlM;AEWRARCLh%zIeFP?c_utmMwPo%k^?E@`?_7 zKl8n}w_1kK2QZyDR9A_(%436jXPmP=oN8jMj|y z=`6&bQD*h)-4bO+gFc@=9HO$Ip6Mfx*n>oPvY+16Bvn5r`?C$bKXIKxYAc3T;YqW2 zr?f+aOp8%|h3YWaU6fa{nkmswSM2Qq@OQJ<+ z3u(qHOp01x<2B)uuBsea!&{{D{cO5Lv*NYA_0?@e>FaG=bhL;pk?(SbmGDEG<81S4 zh4dI{mL!I)r?ln zNLx@{NE?)t8H}WcuYA_a&1SWju3I1A*jdm}(40ICqw6#*QTbF_`{{bGzrlG(Y4=(rc zb5Cp71;M53VKY0%-VTAej?{=!D^lv!=9Bcr37(?{+$~xNx9=gG-TAOb>MQCeW`fW4 z;Pk377{yyds%rK0OlG*`7>1#4o|oEoaGLUUcjG7+e3!h0RA1f~qesCM*>m6By(7Hx3x)^2OOFa{Hf z~is zEN*QaIbO3|v$u&fTMW$0)~yXNd|dzgaU&Ttm%morE{fBxvkkJ2hKB-k{%lhkLbCkd z&v5C#pRidZ^mcJ?O+Uhiyq$otnW+UF5}w(8%;@ab$(whV>@XQ_lj(du+0qjNH=U!t zpDl#ZZvAvO!#4owD6n5&+)uZf<}NFAwNY43_+O!J+w9&i0Hfmfgm(Iu3Irb4lu$&u z&QV%k+rMU0QTlF82TD zFO$FgIESy(8;ksN7~$#veEs#G;*Xv$?yvtu>SQO@Z~g@92ZT|&%=%Ulz9oV;1@n+- z1B%_jcs|;C+dx1(saCqW+c8cOSGJa+ajK*req2o^>X&R7Dzct(WZYNF)qOUo{>X$b9bn~blQPA6DmBR1iKOadzAqT9yN5yvjIKws5 z>lw`x_s$3QoG-==@`q>G(CJvldp}+73SS69|NHRlk#miIzxdgL*^fWIV88fhvwtq3 zW9f|FuS$uc5!IMIqmb< zs&OF=Bw?Yp>Xd(S`zUc91V%8_q{)v{{0NTPe}#0;pe z!aqEwf1T@!!aP3Rf_Mj^1>uRfKpMRz{9*au>-luCDlnq3Od59urtBR!dR(Du@)++6 zbh4z514 zwy1?<#Av3?&u^8!OHkQ0?-a%?bsNRR-(r}oT0kkvPfPTxSgbvjWRz?XRtqkZK13I} z>=1vkKEz}t_0W4y&>W)Y#~$=;ZD=%`G2oFaP$Dnp7!a*EyI-@#XrkdpP0r%HP!`>r zXTTdBo-<7#i&Xp)r;DMqLtuEQ;hTbt4k{HKi?B8A&e-X_Mr7HiLfa!vhy5LtVw3D4 z*8vJMm(Yrnh+=4}vl+z2diA8iT|O7np8Z1wCKA~ygz`D}8L>+xt($ke^d@O;rXTiT zlDkju76!+BxP*fMw2ZGJTn;UmViZjUqWp^~6`jK~fj3JmqxOsQwa(EBqXn4@T7zB0 zRs?ztFVP0e-f2C{!Yb8C?QN+Py)30SI`SU!HP9}a3^AL*xTJzbS zW3qZmm=D?QHoF39N5ybQp_^3|leTmrY!fhKnzOm0L82ZHh#x%Z_2@P6#^uzp}hkl$(3gLZ&*7lF=L=I5<2FFE$$z$bM?wc@$j+!R1 zkLV9PMhIid6^eNGb5{+5HmbS_LMYZHJ2f(MdYenOV&Z&Yjc<|o;yvY?XL_N0ZeV{x z1K#{PWxZeN48U1mZdXg`>DdpLq4ZvxV}@`1kkiE%!3gL4XP+(Q?a1#iQe$j1xnnT& zZr-ckB+ALSX#XOmX@&tZA5mUhFeR+4Z$h$ISgpXSK5wDp=(~kL5g~P@GspkzYW{NZ zY87zP?2*ys!^V6XSgJ9b=xP75*fsDe>QkoH(PaO4fBEl6hdJ2`@elkGud-WBzKC9X z|0=mMBYR4!K*@;pS4KEGaHzD;vXZNi$2yL$D#CrajhLY5YsltD)Q)vv#1ge@AQ3xW z5zbHPB;_E_C*cTxtV=aMs+>&83E%RKcw@XbTknT%>Iu%TZTo^PaiOJjjEiY@z zp3c2h91K$SzAa>I<(W5ach{#g&0r@vE9PAn9I>}jn4l%>W}qGuoh1pLy~lbi**Tz( z*w=9Ah&3DwwX_<*Z#L>H}6(2ER;cz6@_eOAiw@)a)gwV@_HbC5RSvgAwatzQxL^ zmK&FjCi}W(kbGD?D$kE=|Dp^gri5R45FoOZ+B8f zmip)D$|tDCTp}2C5M@SgSfqQ%H+`gL9xvmd!n)h-*1^eXEc2g(XD%ifm$d*CBp99{>xN! z^`|ym6&3i6UDLD(W{cH}@yq2}T}YBQ<-D{lbEAAX&KqS;{-u49*@BEzl6r`}ywBTgJ8PDnR^_4GhPq{RnLf`7(Zvt|7rvrgKyjAmk39jt@mOT$?pOKNKE8AUM&Jey(8p%m}_NrGD_=)r6ieS&sMon(o5IV{Q zlVB+Q&M;L`n3dkYQHazj#kj9(D<)#Anqo{1psB0MGDh6n6@H}}t3-U*#61h-a&ZmDlyWCgWj#7A`!xrxv3j48fT&A`bA z3+r;;JU%`FxM3rrUrWCVtoQmKxxJZ*Lf07Y9TYQ|-I9L?F7(GYZfjPg_+94j>xGOh zGQ~JAeY05KKHO!goYN_@d|NwTXmsX``OAg?>WZCywOyEeR%o`Hz25P=XW>~b97LJ1 znoopG`#S~MkWW{W&-n_3sZK;RZB6cty50IGm}lDOaEM@(Eyf)}!m$NTM4)Oe_sYKn zcC(dX{Zk#jeoU$Znsprz=?!YQM?}oZ(m{A8>0lH`6JF)7fHy=&Yh}hj)nSB0|0*7~ z@^>fYM5!jw$6jq}l#=%^3yiXNHO>Hx$L2@(3HM4;IbW-~7cxj7~*yYbnNpC%KXN>Vk+gxYS- zeV!rGJ8c?u-9a`4$C!9-q@QTKk7g=6K~=T5-Ep)(5KB|nG1_}HgNtwIs@xyw=XXBc9wWVH(bWdDA1Rb!MIzSb$^Dt> zbkS!<+sCYmQVG%hmW{dup&`DaI;(ZwPpWmOK0u`NJj-y(?zbOJg3mDJJt79S6ho10 zVIfInh^Sq5Kc6?K&X*6ID-V#^8V*xVuoW4m&`(h0vk!7@>i%gz-Qam6Bhu+A1m$5y z1O|3l97*@nC?Z;)!rE8O$GySpvuMgy@90xBmJdS_q%-a(qseZV5_*1{YYsE` z%3~Nj3^O2x(r0J3$r|R6?rgVulA>a;bj+YwexN{Q0LqA9n5(rH{J@>^G@u&heMOmu zDeczi*Hap*JZIftdsErN$u%2% zts=ubVem0bQ>@&1M6Ve5plTz8R%tjD8mBec4fDk2VVKsw{D6K{n)iM=G_D8GiW^$U zew6-ILh+W&a`?w(<(w>^|d|DrjPuS ztm#Q4hQ;v|Ep2i@gTmSN{{05RmiMlY{dGAXLdTljXHN^YV`O$q%lpUsqvYvt&ymkh z-=Lvd^>g*dHc~%5L+sbewta-J^|x%?kb_AKFY!7QJ?W#)T12hp?EgI z;k3J-;#+PK^|3!;{ka&xzgo|}mSiZ|8LtCKI$TleN9V)(Na@k3+dko!FxKu9-k^=t z$wHrk7JyR}`2$f$4;AVWR#p_u2zT?d1+IjKQ;X&K2rzH(HcVFCN8(;>`X%|V#clw5`LNjbd36Vg-NgL>$%m%@i9JX^)|qaxha)39tiY{*h+$ z7!yjoKaTvTm?SBdF4!+*d*^wat8BTCb2J-IwqVEEN^g3@5%EBKSd!@%(%ow_z|V%L zZcC*0Kgu|+LkX?NQLe6jw_lEfxr18S=Oy|+?=MRh`JpnOp6>hHF9)%>5FFqQJ^BDa zcF<)nGC)4u()c`OfY1GNK0uJ{#1YLglEkWkSlPq4lGy)j^jj$jJ>LIm3}El38xF5l)7#^$nuyr;4lyvt;XY{gX@K_5jt!4d?FVll zmSyJthq3M>dmJG)o#z-sw~HO&$}P_^YV2x`P@{ZS%pBp+$%N%@rcZg!TjpVUzeDH)YO)Lijn!DrGR`c$q-fs z@~Zg^(B4d+20!B6^)ZUBfes|3+kX9qr8b8Nnr1E+w=&Khi1yQR5N+Rz1MJc9k5O}W z?noK~iG<~N{}a*))-keW)7e8m-qO~xbdo*^QHM71VML#pYtS1eLH8y5PXcvzUgT$-FZv#sKEU2xSo+Dmx@3*pq8`T0RoLqFd87r=<;gzfpO1^(0Qykz!&qW}-;W+T z#UaWGjsYJ^?QcDg7jo520=@vH0GEOIwS+8aDxW#kN=`*ryvAT(XR3q4vdzC?iCz^ikgT-zWt zLaJ}>Ls0Vp-^dy~g78P+&Gh#tpGfGA+5T=r1}|~3i=rfDyawNLYwZ}{%E+K0Khy-~ z_t?Aghb65`gVjo0G2u6TP6&liY>Mx?DHIla3cX!mwHYWJ+DdCDK)3Jo>wTc@-~CT0 zbYV6DSGZ_StdS97a{YLt-}&{eezv>K!)CTwDSU+!W&OsR0Xm8hgh!H?3I(WdUTqY* zwT&x2u@~HsjZgB4PX+B3jJvPUkM$wB9j_CX|va zhDs&T3?dQSZ(kyb;~i#?v5GFn$k>32#33+u_X{F{@tQjzOD;{Cqyo_a93G!tm!Qxs z_x<5xyAUtd=W;O8MIOfR#ibI%`~~24k_x2=7rLaS8f=9CuFn-BMw+E?jes(jCq_ z#lJ%j&jp9s-3gwptd}0`h@AyVE_@b#_i zNzmnnhbxoz%iHx-rmUKAV112y`E#8CyRIEjMOREQT&$E1g4i9HJ*7PwoBO{v*Zz&! zF71_#!Ben`FgKty?C9E1`&fGPakn%wP6{2Y4rf2$)Mv9cF5G&bEv_GLWjv#MnuYX1 zR&cDRTQg3vUMdMP*=RyD7$v-tYvG5W`#S%V!#AoN>- zLFiWs-|99u)~}q~1-Fc}v)>0u^)S5%5pdkF>7YuC!wB9Y4a92UOVk!h88XuGBF)CZ z8Mla;`%${8;QZqBjN3Jlu@KT=+r%tx5_M=Y8c&-kn>8H9<4Gysyf6Et8rhwQ%be8y zFMM<2ws+{cA%rnRy18?q8fY$QttyO zxo0xeXCzl%j4N?)YmtRZOpHKg>vb2eB*yzLPSTZck7isg1{oAP13Mv2WDS(}#geAU zFN2wSu{W(r;n;3DJHW4nj;2pgBCTtseTMh{ zIK9ME)c%uuwHLxx{?&%tgT8?l#kM=WUuBftefZ^0P-CgRt4TC!VkGti9^}Hl^p0Qe zuuA;6r{c9PBhaikbh+AGaUnO^)pD<<5+XF0uxaB;P76e2;^d&g=<{D&<`BE;u7L7SBQ)Xxr>M^n3i)au-5O8SF0X6rnThxDPECC2;q45lwmd? zzm@R*_e4(RAXN`~=u@Yxlo?!lo+(hSl1cl-kfY-lqP{07s;dmn!sB28m-nQ<B zVV}l5T1kAcHp2Qv2W;V_LaQy08VDY1q0R7_PfZeVgQ7l9a4V@d!?K;cxKZOLLdDYt zB5!grzITWLPCu^2X`VT}q?ru6;FD0lxz|anWu@2gtYV?Kui_P_Q3OL%xy?mvS zG5cyOu2^*|dhYX%3c^*xR9_9xN){@Ax%v>RXx@XsD=H@*Trw;0wgev7d@e?Gi*SBP zP0aC#BBu)8r0QOT7wEnfZbMg7K1Wxv#`vaT58?F8--2uI4a>4JNB?GWl&f#XIf=5=O_c8p!1nN_Y=TtA4{b&?6koL4@nG|Ru5 zptu`I-_SrzL=74m38gxsy@Ce#1sPi&G zCL*s;81~J$Hq+uH-Y|igVfG2VdJYcWLnFi!Jp9KI3YLfj;_f-8c!pd-nxgPa!XHwc zJQja(yfBNiNZ_M)%)@w|P!p$)7Ft$~Uu zM}rB~Mgxana*~Q~Dy0=0r#yBF)^O|N^@RzAiF3{-eF9_=!w?^y9`(^ zbrDh0F7BaImdLs(TbSNC^9Gq)j0T}4fr+$1XyRLA9$A_d;kSzjEjtVKa;K{sxMMD? zs-HM;Z*Y=QePZ9Bf=zh~tj&b4tR~}gT96_(h|4x0YD2P^+JG^iG_bxNue%K*KI#xtdThg|Quncx zs*jAWq!SI_!i;wo>B3*aGuCHJl1#RKJsbp+9b!qpo+0=_e#ff>)s-81e8` zhUkwOQhCnlRPuqEC{^MCN}7qJBExKU-+uGvkttWJOQPqkTi=ThuU{V0XA}p==zW6j zsZMwQ`SF*-7%JHz4yjyA!Tb;}LHiJ=_%RzCQaWWlBt}6Gv8#j6T`%*y5d-o-VMMzp z5 z&Vh3XoT+r!bg0tCWCuP#GvDf}Sxt+CmN%HySH!O5%n{rri(%}J9paSFzp8e<|As@@ zlbH+!FV@8jFz2FSn&NeId01v}rIPqGxr_)$Y-S^%xfnRkK}NWJA>Tty} zf6=&iMv&6kV!_R_gsqFk1gRnhoHeDa_hNi#rCxmGr+tlzS<|^IIZRd-KApQ2b#^0T zaD1Wcas6tjUWCkNdX3ZvTyQqex2WDSs20hfSN9B~&(w68(AAfXC(i^ok%}C=9Pw)! zFAe_F`|s!cp9Y_86<#Fw7E>`763vO+syIBI&wsVCPW_U4FW(>2KzitPYY5`Mn=Da15+WWOY@vx6o&foss z=DtirHOXO0Ck}7SOmWY1Jn9g`!|sV^JEP-sqOBv)lC94}3!sUreoAX|P0)8pO^fm2 zV0>ImyYUedJ7IgH6E;*kC)n?DVeg#Ih(d6@ZgJ|PDn4q>DQHhAjZQ2525yoxS!t-E z>3Wg-0laI`#M^OO*3z!>2uV$&$Cp!Go9DyjiT1BPUOm8{*Gph+LNC#e>rZRk10V7b z+kQ;_HM!BX>s2E{Wz$v#t1DJTPD|x1yz*2NvVwM$BVoi}tYAZNEPg7!G;^P*!_9c? zvWXCLt?tz<*-^TLGhef*U^pxdO6VdTE=eu^^-dXcw=UC8gf^&AO4Icr`P5d0^vFEMY%F#RK44+v z0HVA;+0xy`*5OV3xPBioW{TJ9W0G&d+g3Qo{N!F~rFs^r#~`*H+g%MkL=dIK?!m~( zT5<9wwZ~8O(Bdo`h+Y?-TY`%*A(t${Q~)`;G*+cAUR%skfob}38Lx8! zROj*Iq848<@pTmvZM>JA7-xQX2bK+r6d@)2OI%ax|aVv&IediP_zfm3r7SmKi@_`)(I?ryMRZ!0Sq_GhAvw+eL!|24VThR7+s;(yM9=W( z;?EG-t%_NjZZdQ1%;dzgBG@+`?K`2R)*PAwR0+oF-YnHIoDFyBD9vH4yoP1vJ{>pud8}W)HdBmAam9* zNlrL`9_V!M@^R8ao6H|&yF-r)n;_ldS_?a zKNr&U?xt@l6u^%H1?FBi80?FB`bgkzgQi#Sa{8h5@hP@{Wa_J=ZA>VigF3M)(u|U^ z>Vz3oHe534S2B@+CNNZE6>A1X49kLG^?s9+HOJ%NW`nzXUwI94XR+^tsE3G|5z)1o zS7*YRe8^FOra@;h76V?>^>~m~rOFp-SQwTuLQZ*Tks#v`t+0cyG?Qd_7ARg3`6Oiq z_Azq5?}P6QmILnuZ}R-RFzV6Q3^O5Qh)x~JtQMo+Ea;A&;-`#R#!E*pA`^OfP9nnI z|Kr&BmlOB)(N+8?b`w&EHKde~<7H3su&CG(%dxG=BStRHn4AZ!O4rVyn;v3CS&>Lo z59u|St4+BZ_|9V_V!EK+L~P$2Ws(I!5WPHij8B_LtxZly4_#88tZ*2{=8DHrbW#!= zhsPO#-E+2kxGil`R0VnAqq=y{L6>i??lQg7JTZ&t^kTdoAl5n>W>D%~ikr3^+ecA6 z56I;xw#|C*EU?n<&^rT28A)PzgM1w`ZE(aftF9Y24Ely#@BG+FaH{|Jv9`(y1{cvH zRy*kyf@R+(+3GmKl4>M>#DNSI3}WRY0*KG#1h%17pq_#UjVXddvXu^S13~BEPK(rS zs6GRw&y?Jgp70u^+V`OSTE046*wrQz!L~?e8xh$(`7OqwcRZ6FEn|U}N=_K|uy$)u zZRw#~hO&fAWO9$fwo7e>RhRCgv>2<0S4|>;sOVvuip825jFwC)RNB5G7QZE*b372# zNA$8o6crT-=S-qoTj+ig8B@Zkj`xBqx+W6{LpD()8Z@52_9Ef1l#S|v{BI9LGUZEdCYkJ+%`fVrpYXi z8h8=NhdrAwkwEF!0hL;4ch-~jQxM~nC=X}r%ickgAYG*9sE1)b7 zbTQ?9HFO%4ZEVf9qhD>PsQtp>bTy}!by#bSO8ccUwP|};u3c3eGXR^s9$IDjzz1?O zU|xC4eT0f2LC--I5vdK~UavOSX;!CcRbSJYchU8$AYEKqP}byM>q!@M_ez2A`TFyc zH*B;quISH&F7sDb8b*QHpRZg!Emhfkgn9Cr2RV(3QxticXmGxW-hjd4jv5P~x4sR1 zS`+)oEcNX-+JZT4fq(t31AhJ23XW@Nhf9S#_b5^IxJjj-Z62wU3QFVN0vTc6m^O5M zVuk3j=r{3jmxX${+3=jB6=yD__WGFWHVEYRUFE*oaFU?87w0_{Io{V`$vozTie8u8 zxFza$VR?=b8wMR4I@9sK22m4ZzInrL1LrB2;PkyM- zk(7?q$Tfuuyk!?sf#;`_%0}m4zZ{S1V0W^PWUCUFLZFHaWJ`hDMsv8Z(Y5+!s zcTh^bbGBaJg3{pKzoj?7T*xh*;_Kb?83J~J6`5DP4ybJ75+k~#2Z{9gr=L@^Q`S`DBIa#btVbw=sXq}IC37GrH@J9OKAqn0-a#Q z^wKawut@BXwG(RbVAHyMvQI!W-DDnwF?Z(E8N*v#83WwM&+F5lm`i|pA38&-my>cx zna5PVqqTCr-jhi9X|>NRQ?BDv%6@jYu@ z8>^y+2%T)1PY3t9XwzF6t2=k2v@k>vq}^=tlt%C+Rs<~$HeNXV>vYMk#}zunS?%zfaM zpSJ7%UH$UF)Iz?RRAjM9X%Jos zE9lm&&^_IM$;^q$RTJoFA3s-|EyhIccV67W5uy$vfFT7evV7g5Vv}pJ52$NKl9i>m z8Qr|S9KVSg^^BiERYC@1-;t|d;?#&4+%-Wv$4PXwYXWZ549nl?D^80s*Vx>jT`vp2 zgxd_O$LLZ~g0;!HX_<|$dv>SQEK1*T55Ejo6edFB3gGhL2~>&#cnnG9OrU3bQ^(Rj zjeN1rm0(a+;J~StP=|8EXCuJk3)lp5>?7-$NsX@$`*m^cD0kC+HEl3L#8SF{%Jnj$ zvhVEa!R}##qWH1eE`Kph8X(!Hb4|GHYHR-O6HFtoAD62rgz_>u-7}b6-|ma)-?$Kj zYmy51SjQL?VEs#Nrm)FE5_B*QQ5;mRR}!ZTsYx2h6^6Qk5xt7NU-|Huy!xC+Rk1ZM zsXvt7b17*Csl}Y#XT^e8IWT)^4Qd*lIgH!_;b!XSjM*+UI4a z>zCA>t)g=du5kTse^5oA(`z4|@bwwWd9_NVsVyo%bB1`)#*{*}j+ zm0cx3hVj{DMY6~0BB-iLY^uEs=RPUNaV11;FtRJArlKBHvBB3tRYni*%Eu{L&IhxK`X;eU1mSKYCGvRj952XQToOOD-L-~^-RjJl^FF2F4V(?|ILaXN~!(<7N zRQ3|ZPM^W*5vQhhYM{x#^%$`URo!LCk6bv!7Kvu`jeJWsURv1~n7EL!LIFxa^CS2i zGNV{GSg+aITOv}I2^;kruH!Nb>FbZMH>X$5Q(tg^ika<_OE+0ApB}Ve+|D>IPG|h< zYv~TXW|h?$g#oE8z1`hQM^jNDnjGS!?`v>gZXH8kXdQdTmr&Bc%)+MCmP_e}t+9s$T1_=?P&)UXFhSoPCGx+J1(lnaoTp*=hft<`j+do^h@Tknu zrB;N+bPb1!sq$S1%je>0p@WJ_mUQQv9W{ZRtt(7aH&{i4pi|22v#m;Nrfz>!U0w~{ zlsKxecszgQpwgT*wWq@1Z8y3(SrDY`&+xj$xA2GY36=fAQD|1{6+W+1HIGqljBgI#v%(ZH& zJ@o4Y?O@R%-v%A$L)l*qk`)t+UYDHi+*KARb^v*>P=y3d-d0LEJH_c}bJ5A^ z9Pnb-Y&QRiPd2TpKDA97xGL8Wku6`-@(ygdQb9n7`ka=b=;vAZAS;`G3nOnGP642 z2SO`q7vGejPs`>SAhe!e>Es>?yAF!Z+ktbs?cg|0!bFzg*ui>$g}ShV*BDAQVh68t zZfVmGka?{3QeI;4bNUc-12a|!)@mcS>>VVR=UP$rzk3Lu?6}Xxd^}56zqV%^NuLuT zb_9sT5k|6EC7qceL;sH7;;_m>$XY4hhbGElrRP8q_YFKSz9*8Q49%`>Ryxw52{j+e zdl{OJysHi(^&bIMrxk8#qe|K0LX~B$3!HGAp#5L_?();g!-?!8Mweff2aIU9vq-l^4Vsu z>^bZ!5fIyS0R1xtDwmdauJ9g+&2wc?YjYl0_z6r|N-I1s1bvZiu!fAS3Q_0lVoDWx zi{W~py4G9*-_acnmvnU;>7wG+-32t229ocFXqDV^IGYl7JrzJDsyh&~HBivH+Q4Kv zKwep{D``@K98U$a_mS0P7ds%gB|XDw>Gu*J@=@NsLmZ&Ua!;;d{HyA9KqaD|IINm0 z;qU++X#BUY@Sa0-dG~Qm8zQkQx!g1`nIZDXse5Eg|K8bH&_!xN6~9K0U)k~X=rGsj zGDK^aATsB*(xuHF@Gg&SwcHp^Z#jhJvS66GjK)62B%|ugc0>{#c;6-(C`K})1%7o_ zN;eOyrr{4PaIoU4&Sd%j#g`C<3SuVpT?Z_YOGyHoFY=OX=j zvZ~u}g_nfjG@lv;vj-U_jMvK702>=n?rS^sOWooeJ(Pg)Mt#ob2mblETs#QDxy5|AfGH_BH8Ob9_lO+|H=0K&J zRIs5;z`u`zvb*nF3u%r<31uV81ixG3N~SOQeu>!;9suLCK6WFhA11b`uqXh z20vr=ORVj7>@B@p@RS`}IDCoJwAYW~I}}GI!9HgHZfpAh8OB`%BdAF?LM-<+P|lG8 z5u1Q6j^P?aAGP^BC}6V6?LwU9wv&jkIwSR8hf83akE`i$Iz<-_m3T67oWF>mXM+g7 zf8=<`C&&@pK453SX);4sz8qA7_nU17=GVwj+(P3KXH%lC>$5C@B&P$+Bo&)M zcU@@n93USNyUZH94Kk^;jP&--^%;NWYE1V&^olPHsI#9sbm{-kM82hyn@7Ff0X`)c z6#06HE?WqVuM1-oS<7z+&_gavz;bPz<}p2%G)`iGawY2+HDyhU!^e2EWjjV|$Bzsv zr#{j5$tp%)QpR8TST?i+_l`!fG4C+bd3+1Fxt(O&rfa7pGq~2_hP>=DX4DVcSQVgp zly|(vZ!`av{hh{v5xWw2KYh|wEhFhs{`H51^Do0{R;+JmkcR$o&7@l~;^<o?@N_rCb` zH=#Y-27FC|ATx=gjR1Y+G|HczNTTA{{KkpaGS*Oix~4 zjBU)*U6FE^XuLkB0{JNwW?V9xSMa(-vbdc$C!LB#OoyVEIEeOoam&Cr(DK4+Sf#Am zO=DD&F6KZ7YA)Ppe(rKji`{um*K0vYRJwF z_8)SW)qwg|OxmWa$EMEPFzGhLUzn?Io*Gz@o72$-kEwo1Pb^_vS}U>z&ai%ZU`uP7 zW}X&kxugYex1U?kc&`P&yL z?5vOaw0Np%wdbOecQmkiZ?URDq45}b|7;aaEk*-P{9K9&Gb_8KGBhZuDKv-%xgoH^ zHx)V{o%}J&BwJHZvrSS4XgK+&Dess-Xfcv!CKLF4Y8_4ItJh_KpZ1GnD#~^-6t{v%aZ#DX~sQR$UJLZ z>@+c$*#-Ioo@iXN^Y)^DQ;eqC!u9I=uvYT=9_?S261^HGF19)xQ^g9QjvUhv5mY#4(5?We}vX0bWIOFZa2ox zejO^kExa%`pXni}19@|)99_)7F1a$$RPs}`>;80aHj#T=RPUVeIZRz@193{8n#V|7upV@-K0K)_}O3)lc1x!*7 zhINaBNkX=9X*cFZ5wU)VI^m0k)l ztuQX+zlvdrq1bP9P;!vkK?KhsmKD3h#kI2VXy$ZP2I~llm8r3e1da&tU$fbD@Zx4? z9dn`jn_cbBdXJMVq-dTOhZ-;HPAv=Tg`;b z$+lSjJ`9EtMFpeO#SF6M>Mml-NTcGLWhiNoo5K;9=mxk^u@jAUG(u{1N!A9gO5lq@ zW$MwjjAt`cZL7s^rfEs3=BA^m&O>UPW)H;iud&EJmHMvp{)^G7zyY)la1msYt?5*^ zO$uokqmiYUEl~1E3%p(y3s~+cHKlT%^Nty-S7NR5I=QZ8>LBVVb^Q{^zXdaG-T)la zJ*aGc7{H;&qQ(otB6aZrS)&v|WzW(XK-KmXn)*kCi_Rh-?e!y6_t%AuZD$1Q9wtCs zF3#>EC>b+CAxcHK2nGS=dLBSs(*ks#^POvb^CINSAh~n5xWa_jHL}gB4r=LW+RIpX zsUc`S2D*Q#)9~kHhz-EX0cBU{+a~ltBT|?Lr1{{N?-GX|{eSn_Kg;=V{zW>QuAdy# zVWce9=~@0SR|oFq>ia^|cC^qXR}%pEKi}c#L8lHY?ivR6YO&LE8@d9`TFm8eIDh5! zI8LDMb+Q%uF+9pCs1BULlwbAA$w(`R&q57(W^X`dCDGrCQB~*3FLjowg?zcVDamLn zh&h4Ig!YL>!$&_);5t~xw`;}7LYyt9z<9Er?O)_k8WX8~{uVoMY3W+|GwkNC@Opu& zz>f{)!d_7M%-{hwR9&MtTuYu$C5$MxX2@5lp%uQ#Uw^OFr!w`ernJ&=gdoyGU(o}) zNTtzTX~H|4~lPi+!*dmg1mw%P^IG4tTBrpsiQ zmf%ftWM7s?W>KBjt)upeva!Li6{dO{hfB#w3PWg>#PwKH94h$$#{kOvj)jHArZ`S+ zKn!j;D47>IW|(fGDqCHE8vYn6WjSi_Ay_o9q95$z8lp1Ax4`DUsxKQ__TUBqa|p?_ zR)Z~7XW_bwF8+N&%jB(i!=RSvJJoFHnSHaNY)EoLqpO`vICGRz4M8PDM8)@&vTme3^HK}6@kbxPq-6q3~TL-JsYa%IuKgPOMKikYXZA2IM=Im19k zSeX|*XVJV>64y>nIN42hX~MO;DKJu)Y@rLN)O7TLAuO+obh6;Vxdw$u9$BXO0IP(w zeKK8EEhrhaUCT!wSH?zpIax;oqnNlH^e3<;7E2#o83$!ckMC&NQ~W? zCv>&>$KrZ=EmK{*YhLO#Y|_D}RlsWmT8G^lUJNUEvEwEXqo<2S zbMVSxxg&{C)lQGbb6V6|onVnrcdatmOMC>;N>VgG7PHu~EHb8-aCo1I(@KIa<83zS(f)3&{*)crsHw zaY%|C<_@Wr3f}9awY?Q*m!bC2%^7j>nM14jV}pCM!Sd?>cY>qg*jw)f}nQ^1KqQgIwyy%P=q1KJK=n6(wTh#OXx@ z4OF@7Au0qW1@`_dAUr?A!X`1GkQH0TsJ>PClHEAg5F(0}! zWx!il3BH=@L9akFiI~ictp|~qF$^yA_hRk$u@UX1Qkp)JP*-E89=bCA!$MT43fb_n zlnAl`to_*R=p4Sa){^e>WL6`OE~F#ZUrt$O4684`B%zQejk@lFt}hc@^)*(!yFj^; zrdJpWq*M`Xm*G{~49MPXP#knxJ>SF^M-pAo3tUcM zz=o^!(c-tu*>1Dn+}M1Tw_`bQrK+1*HgYRRilgRzR?J3~{Z ze=Q#BjPtLejX?W`iQasX3~%_3HZOZLp7>($m1mmjC*;b+`P4h+X6QE?JTUzdL#363 zDrA5+IT%wR+~EO3XW02duv|JBj1gTyDTFHE%SJQCSjFH5E#qP7c5=&;Bu*rItM$>@rb4wx(ASMy+MQ5L9HO!69o>`+9B z(JTyS&)JOOa&loqNF5Qf=LC{Mn+f5?M_jP%UrfelZ_i>z<1<4AF0N2#D2 z`){57=yBb`eIGb|ZiF=BMySk;-iI>BBa4L7q2pvFWAj?RGf&3W7z2whH$kn~oPSr@y2C)Wpvc%vet zMK4O$>`Mu;h6NK-`g;}(Nu7aE?)kBSh~d*g6`gM|*iB^wHQ*VV4Imk_BHYZZ${#GY zgf!lOKm7PL?_;{M&UK=yT2qW-1crWE;zw#i;*`JOxYrcKh)^JP$}tyg8rqRLQ^Pv5 z6UUJ`^METWW@yeFjUIDGL@3S zdH5!I^%86k7t86x>PgI%HGPdzw3u`d@TT+07YP@7`E-T5OojaaV#`=9U(9mC%~So; zrycYPCcMSmjtx*aisxTdEfMU+s%oSiR_FAtVdTTs5?!VZ3aeSW;$~B5^Y(_4Pirw| zm$L?o@X`Q3{Kt2Hzxn&@`s=S|U*CNH)puXdzW(ZO-~IL5udctHe?Ptc%lCg@{OvD4 zp0lOYd$>)!*XkBC{A)ERmAV{TH`ucUGL|H)7N>eHJCa>?xHjoxT|7s&vDn!Rp>fvQ zT$FC5FR!>w30!5~CNwxEE%tOa(QlB5LL5=de5Lq+#2K56E_haGi0T}|A5)XsN6GVS z5VhoKJJwJbq9|Ee4J*p8gjEOu=#hfppDAoHd0ir&_-Qz7_;ahI8{7}`|M>nd-+uoe zfBWj&@1~2dzWd9~U%&d>_uoywy1D+_U%tKhp3~lMrau;Yr6wMgo3dIry@O@DiJ-n6 zd+5?A-H4vnE&mMDQ2=S>PZdHpE?pyCeKz@(4(wCA-Oh87cBgmcNN0w6Nc5V8#^EAN#sC)7$COwLMQad{lyZW`j7<-PA6M`e^7O#x^h$5?>S7 z2g*#S#*`6O!tQuUj-yvG_ z)&M$3?jg742CW#V3OF6CYxk^=s&_pOPDq+anHCEM71N+Qc0UaoXX$!3uR&z=Y9~<( z!`8Qk`LYIRn#UUKlhv|K)d>ir`{7A$G+VLkWUEOemT`9qd4&1Rp%#0~_>lHeU1@b~ z;%AHX3HqL}^=X((iBnV55J;r~q?n6MUuzfFW+=&=ZnjT5cKfZkr*AGTQcHW^q{!;% z8Nb2&@a^@@H{X8G5u+X%ySZM>zPg$I?eAZG z_qXYHe8u0t|7!M^ufO^GH{Z{{o&DvzA9YhGZu&RnX{wN;^mXe4(tNn#RJM(|MuX3L z)2eOy49aP)61S-2SQeQEn+Jb+rq;sSn8hzo`U$&+;yUXmbaqV-v1y^bP4QHumI-jS z8EK-c@O|t)3()x9_vYp!S1|7ut5tYkm#0?DY9s@oW3q6Ma|i`>12}_f?n~Jv*hnBk z^`O`I_y7ls(uUroNkT5cUvT(gni8t%IH2u{1C*Ba*TIss0jKN`bN}qlAzTQ=@1Xx> zlWugK*CAH0&kj6Lcav*8HHz3NK>`Pfqjf14Pgr%Dgs~Gkt*mFd)GaCnn)wW z)Fy$(n|W%{FP3d0dWpo>BJ^Se1^J?hnB~z90XZx2`H*$6V|=V42cSIx&#|=nLEv4# z2hxZ7bx^}TBf{nEBA~JqJO1&cf`W*0kVW9tR-w5m2J~^J7F4wwIv%Vnxf0XL;s6)d zmCCLl85^NC5wG(G$`~yJPcHH}Uo8TUtFaa%{00U~l{TnSV02N*(bmFxOWvWObUV-Y z-y^NN>As6tbjWzO3cj}*O%a@3v*2cU+X}0$vhcyE?%hG~4f?d8vS8vSIl}#FmVDgM zG$QQTP+!GMAH`l$OAuAz*I0r(yN{JbR~zK&Ko4~y$xlJ0>ff=FU81L{2&WLxgS<~f zkQpulDzQpMeh4R&fstGeE*cJX9i-a&cxKUxBT#mka(w*}o!s&`rR9BTB;9P2T8ZFci#&3l)VD@d3wtoXp0@>6}ZSZ!c;;8D1QW8chr4FbAnpKTt&028VI#e z2QgucR((>3LgqPZ&O3OrZQlTs78Qjl(*_zg4sJTUTZVWSvF(85(Sa#m2Uh7g1+@aH zLr@{)$fbkS8$L2DiBFw}pvX5=lsbtU4pB9jjOlJZ&%=f@D{#Z%^g2%o0+qVY06wmn z^yYayvD##+59lm|PXFR0qMW(J>FbB-mmsbe8Q`^u!0=fb63kv`9@6VxrPv2wK)f!C z?F)y70b*YqfrpJ&2Yk~8NOgAB{YIz^Ixe7VDl z9Ye@V3>?rW-}?7v>mQ7_L8>dHgfvPGbWV5$JK3;hkp+tmVGHuVmfI3k3hD?tr7gJ0 zR8~-#{5!;Lf*L#-R1_&gE4~7vU@(K>ijC)AE_^IoQYvf9y9NIHxdo}?)uh$%x**p< zt805*`Tfm40Sf8BqHyWh4Ogs7nyBdS4SHLI3Ves4f>-ud82Ao{q@IA_FSO%$fz8#wU&KAZAAfv-O!Ge|!Eq6dVzaI* zKi#tBT?|gK4pxqYU=L(~{F9Yny$zQ_F$N7x;tGU_3fRS$WPS&u$>JWSiwS`IAZ zQ~h0CRHI$Ez%>W)jaHqb@WIle zBDPO2vCx^_H8|82)wHj{X4Fc_8@UaGY92|eL8z1+gg81=--qRYOT6ryGtAD?Rz@HlXAxkmahd9C@3| zCj695QDqyXaw_~^Z8tu+N_W@Q@%t3E-;eXZW%ExDe5Ul(q$3k)LmCd>L+x@L`o6JW~OV{q0WvlcE}v= zYy+CtD~2Y{x$hnp~YA|puomPvpjTJ9acN^uN&_#_yPoz(k>O>+0 zdIIajMpAs-i=sNfT!qj!rnLa5d)ac$J|%52x$`gx5Vf%eTnC3Emi<1+OwtjMFEpo( zJgqG5F=Cu(xk^Y6l{t7LH@gn8555bk|C5w|$G$OsafA8N<>R&U0vM14yv1M6URWad z;aP##9b`C_lqb}KV0govQJ87?o6&woL1MLKl#H~~!--5!C1%1jx8ZCTbKTmP^4>5-C%KX%KCI z3iyy{6bo?Pj~wKcUz~-~6H@ zRvww|lYX*F&c&~(H`8&}D_BVW=Vt_64vUt#j zhY)`!_fc!6l?F!EwkXC}P)3vM_@!LT0oRj@&lGGv_b)cl{#6@YO>c$Qk3hb%USyF4 zfbi;TLwNC*&3-xH&^a*AOMW?hj|X{m8zW+a=b&0pn=FeitdT|{X8Jd@bmgW7Ut(l%u{1y3lVyE?-K=7<-fZ)H9{@`Uq&0D9Z_(HGv1X4l*! z8ExbL=PTr~y-X_S!ruFT`1lo!eAQgAbiGMaA%io?kWph@4E1M)xNJ_u0UVkY;0TK;LiyFd>#k}`-#GWl5M;fL)fN=#Mj zN(slQud(#mzW7O|MVh5w{MWyrJ;#u9ZTrG7)q}J}tT+)2YeFGZ?xCeLCF#+J%M(5i zt8K)Y#Y%|HQwiT`ls2f*6 zub2BB`qT z5rs_!>p^Kay;B>ghdj&R8*!zz;^ea&IWcQsa=5>>k@~AerYKK4;y<^$oS(;6Dm8m@ z4KWi`rs_5!TmX;bA?#A1zDxNJ*6lLu`a9@LeZpiugmt|f%-m5Ihe&Z^V`-;m z?RnnZgMs0#^D^nAfFa5{b7)hnGVtr_;vh!kW~3T}ta?y99q}7o{9uY02uMmE{1s6xluMQ>d*^$E2E9;6X}Ll9p)fMoS3mU!Aykw<#`tfNvr*_&zsiwcP+( z-0!efAy-8fR|{;tI)$aJIiA@W=I$n040l$hhL{V$47ba7F!Kr3C88lg5cd0 zUAQVBbZ-}Q!KUCsHPAzcHBb+IDP=Dkj&=%Zsuo9HC0U!CVFqiD^#w`(7aT3^*i{!) zWPgZ_+z+v2eux@d8C?=%;D?o6LAdEKVaxfn!>l9y=0T4VBg*q(K{0t<88uS8%TUNs zu%l#3c$5|?A4{^2C#^nmJYSch$i4wHmjdcj_5Fb@Tk!_d=F_$)tE8I<4U}5kSRJI1 zD-omoN6Aq$N6CE6QQB)cWWr8}4YU2UmK-10drY|M!2kQ~;oJ=muj9|@ORP}Ar~)0b zr0UVl>&tf=AIVv%A=LWu9yJyY3vXDth0wtTJ^R~lLOvf!9TW$fiNFQ9&p8uRbr0!T zCgT$>_&dq1?6RtDRKY4EX;PBOry?!b2PjEX_%y?pyzNxN$~(~?*XU>1eyE)jWzk(x zTd8=)LzNZSvoros!pLgp1HNLvEB4-%PrQoy!sT0_?yG0O=46(QYY%< zsDhmeS;Rh7`;PWhylN=w+xbZ;!a zCP29}&sGi$wN{N9aV1vD0&<8!Ci>452~Ba!g&Pe+yO7$gE72i_;H{dNLGP1sDfxQ^*hPQ zvj05;EL6PwwU3Bi#WKusP=>-mnARUz5_8Z*NNMVNae2x8^p1fhby}|2JqBhen(2^( zUTHNp3hb!bW6_;HC+)}R7Mfag%&?gfvY*MzXc<&#VYoE>=Y}=&4wj;jc+988Sx6dza0sa3B({{NwJZ2TT{gYxPexILRZVtA zE0<8*STSihIR-Cg9@@(q%o(JGnZ#5PRH{wRM))$rrMH#Z)m+T%Q8e0d!A*tc=!@%% zrDB#9Vlv<+$VGM7APy4A+y4GsyhLIrhp^GcmUxZTL&WUDn!7)~!F8&SdmT`T&&%Nr zmxVVK`|j~x1YUynyD4bjXY6S>DCY%LerLJ~$W1i%PcyE`amuNK?VSTmDZCWw_dbPJ zw$!77dPYdD$X)9fqRprLr!h#_m2e#DA`1-~E-#;0nJ<0!>WMnk6=&LNw>a&apZqj-un_hjIJXDcRn^ zA-6>!u~CbFyO{1=>(>3dO&~SQd=a~iWaHW8daWH6x2B%%uQxn)A5q8q_@x{XILGDm z3b!C3sLj|9skVzBr-0;)FG5&TMc@?c9-l?o&L={-Hw@s06W|E_6psJ}&~1UIiST5 zYuI);g*y-^=Wz8MuO|ft-J%XwF-c!O1ZKBz z+{fI-%6=2050XFK=|3Z%OTR9(x9=}umngoI*-=b*+zhi{)Df~ICUe)pv72ng!D`@N zM&#Y-XU5lES|VLJoZ*C{hKj+e{^%M4)C=Sw-ZxFF0@8P19L8o*jfC!S| zFaBcnT79;xx%36!#5_Uw+La*GNx?QjVf750He6^5RISPMS~p5VQQcr9lRP})oAB{E zkxD>=k$oKZO%jRvXgBpOhD5}zypqmlQyAYZXLz5JI$^YKg0`~_ba|j4nUouYTQ?aJ zllK}DqRp{G?l@$tcK8=KH4I^M!d;3qmxn(ihh?s&Jz8qEnRMSAG+{_#FB z8eUxtgQZ1xjOlMJjAL{#j93};wDM3_sw)MniE1RtTQ1$;-g}oI)m3_0n9e8u4f1aq z&L>9Jl8X{e#qx#NNw0-2QH;Qmzt$o^2O0iX100MX+V>GhFIh?q_p(`Wn6?Z zBZ;J%A$1BmzmA>~gM2(={K@nBK~kyV)+LMuBI0kuWbHH-yQ{k?a^ew|xIIZ(8;<)P zFA`0-xWFz7d-a3NtU#Dlal%urHt%Jj?o!Z#Wqj==(sBFfi<}o00HeVYqy{$3e~jpJ z+=DydStEk6XEfH`iUonq2)@b37+ori#W(+5|2!vnH;U~9KK}^Eo+83^%vrkjVNQ;L zpwol3oE>FmkuFqJr&2`(t4lTgEr9Ij0ch=y)^qy>vS`_8i$LVwxWb$PBxUYz*#6&N z{@17f=bQQe_kTV9_TT^S=db@UpS@iCufHv|$mJ2<`D`i0iiBVVQLc_=^W`Y^j_>c5 zBgqlVQD~>QDtoe@Eti}M>XL4#pXEs9AJg@J6LAG2S7Bu@x*UDEUux%vC~~r0x{`VQ zF)c~Caxn#|PwpWxktSCgMcY7HVOvReum_|7Ri9Fe*!|(h-O{coI|$9Hl`8h)=0@D? z?MgWr#B}X3>dMEyEcAiG!SfZx`_M;9llGx-$ydndO{%q25N>LH1xjq&F_)J-$a-J zh9nqar7xN1iv4?FIE9quK1!(ADF$|b0BeUQF<1+d{hcC$f8vD(j&8Z=6$_J1t#K8e zHSm_#2?$b^q#x&*T+#pQcNPeQ{`qnL(83`67b11CU*O<=yqKZ0hzQn%F1XVipjoWf z2w2NrGG4bhQri(2R)h~M1pzEJvkZmjp|;IJaM)3jDvaf_anTwyxye03qV*ejl!Zg9 z`Hu6T&uF*RZt5QHsj)f@aj@ZB?C&#ZACAiMDF#NSbsBEk{9JKi=a4MK|=uaWPT{yRP>G-1)4-MTYebXDit}l`fl^?7O+PHg*MRU|HRUafeV+0)a zl}vF1rm2dP@jx(4d1%bd7`$4KS5JYVGrMw6852nAXXSoeP~#Hs#BmoWE;lzJ4v*e* ze=;04sCP<{9*`T(po<}IIgrvG8*z$re6en?SD!rP>z8$q3;Lf%TO6}{9zxR@V^H#x z0lLViQJ9LbLnKNl7nmbHaWL;6-}rlAroZ>KR}{qT9wBq}Cjz<{7ok|*5oAUjIIOtV zv&ZxRyNsLn54)c>2WWI1Sj`!YqS=$lWEh=q}+c5Q@V86J)Z>CRNHjR|%PVjs-&?7sb&O=lr7+9Nf-+dcE3Q1H5A6Tf*agB2_~5 zkM_PSwSn>a5JMY5@>h9YN1I4@0oLm#doN}c^@f8Yk(AyWy}B+Nt_UFiYK@$3bycV0 zWd0Hw-*}~+EAqOS7Wc5IZil|cB9#y~_zEThadhUsl&_UJWBOkQC&~2?_d0L&mv{(} zoj7f~iNZtvd!7A)yBBmXVG##DFP|#vgmXZ>QE(+`goB*;UFNUE$Hc^L zglPc_5z^)bpb^#&H5m7yu#IXvV=PofI>9M!L=zN>Jo+i$?CU^S7wCG_${FZ1#M_&2 zsuV#rm0VMZNi|i%%fyL}ossDwJ8?rbKrV1b0A-r#lWW?Tbc&USFOC`0^c7wEl8@%m z4Khu6$*3ZW-&*Jzga|&>sk7U5yf3ekXJIR-<0B@63cq7nQZ|3M0eFA*>btN11O9&^n9mpgg9zSyy!f9-L(4JypXH=6&kT#wuqhsM_3BCU-h1>~Jen%c zyk9r9gWOKP=aJFX^15P?BpB!woLkbUAe%xzCs7eLonv%VL~J#fs~#Ji7w0aj9O5=i z&5><`D`q$~^|mG;d&PLo^Qu_Pr4gSeC-efFb&aHc&#Zxb#x|5#Y$@h0X3CrHDrK{A z;oAZ=uB`12P}EQk;>y+BNIuKgc09+ue|zydw7=t?X znK@DlM7B$*zmT6stdsZK)}aV92fF6{;wNr={*L?rOV0W&Of!~S$mPBT+%?e;mM%N+ zsM7+nUOrkE_+mEcGs-x=mI3$IZ1te@i%B)D}?n8%&E?{9dtvMj8K^^nDMO2hwj*nhP#l zbB1{!bUnbE^@?Fj97oZ?5NktdJvJxc?%9=9OT>#)1e4W^)8!v>(tq+bGBICqf;PI*KP+dK>vQfg(3Jjv90ccC zwSug7`Z?n-7PeQH>|VB#Z8U8Ef70Hyxvd-7_vQyWrJ5vj=9#J5HC4J4NUIP{*(X)CG;G<%jQ&W@Psnu5SJifG=@pEMup5L?1lCvhs7QfA{PX zOm9NEIF5HcLQ-}a7b&(U)Glc*bao>9<9_T=NS$0ion3!LP$`E+rbg@#ms8WVNG;0s zPZorO;Od1khnX>(YXkh7ThRCuN3Q1BlQ-s<*DJ%Tx0*^9O;1GIezm>Y8138)d;++z z3oZfRaIe1=9U94=km2n4_5`R(I9Ni(G4q$R_PdY zx(%jbe1&K+QUh7kVqrh>S!2w(@^@L0;k|Qg3~m}kK5gGbn5fH0RQ{)puS@!U;*SH@ zU_C_Uggnmuz=fu!fzk^?}4uXLH4KfRc4IXz#ELL3hT z2`b?*iUt~Z%G*bBAT%Mm2%FhSzGb*Yc-@5cNH&Aw z5m&^xA0qUmVaCwEA|J*?wyE)HMZRnBDSs=Ku|5Ez_L?Ma|~hU54Y_Zm08DaXc&? z8?-#d8?b?E-q{s;_BdF~SY^e>u`cU6}^6QP~>_2`c`M_<$OIdBq;5AsL6 z<-L}TH|tf3rfILy{Rb7Y4d|twH2=M?QZyARbdrWC$2ebD*vxG$M|bgaJ@L=H?|(eVlzU=tO1X6 z&TZ4PHriQ;&i8nkD!H<+>>>6tpVyXGC*)Wz{IzLoP zHhNOmjskZh)r%bOBj0fa{9x$cw?X(IImuj7*+%n-%haYbrv54}ao5#niC%kHYl)Gcx;^jjT2%l|yzd%GKMS)aSjB)at z0~Uc2wmA(GI+)q@ZFtdBX+4GEOQVH0%bWnySk{hoA>Xs|F~q=qB||QenrnN=&|oEv zMiSP7GF8xgLC4hzi?U#dhc)dI`F<1n~#&)PajUt zkKfyOQ5;z#hImg*W@BeP*@z45`Su*A|jm=Q$&s2)_1)eAwoIz*5< z98H0d%ZaH1A@t86RlxYlVmP1h-4)?hvI?0NUID8&M<7cl*D)4YE^)c9GqxbK-x)+p z!CO^Ao?@F~2517#Is89Mm?z-VOqVaLJ|iCVvG{LmPRR1r7S9@a2rKQcT7E{82N1$43kY7>%c+VSu^j&G`qgP*$K@cV9T z7aabz8`}kkfA7Y2!C{H~SVF4LCqXAHR{G%%k$#r;1IuMK219Ezh=d}8G*0BB`;F(J zgX!S(&VEiF9P*#D#TUgf9KA0uVMBZ=QDC#>GGxSrKZPQpOc>c&2IVUu!_KkkNt)Iy zA!D^@9B&iq>gNW4shESmKqtAwn3;ooRKzaK6>D=WkeK7LN*&=aJzhIXXtBLn+Prwf zwcF+F&2;Hz4H*5s=Z`6AcXkw9&h4s>g6*2v81X9#Mfem=(Q2H>2{fSHS9t1clQABTUkysJOCX8!E8NVhe`Df=99NBe*GKN~Z6r zGeALVqw653d4)Ma;BOelk1ffQu!{9CT9Q0Ynrjc;F;;C6iSwRg*KfK1h94$}aBKMa zDZ-++tr20l$7-~9G5#6MK8#EM>I%pBhYwUcC13?O-0tuO(2~2nNqrG$%sJU;okXA3 zvL0oCdN?Lrblfjw03RPB&!vv=OJ}fcoWC5SW(5oHi2URoq9)c6GxsxgmgL>ce-Yz9@O|IS^k0Q^ zeH75j>Y&2neQA}@+(X6~VJG=8mjU|#l{wN_3tC85f+g}WiKd}dh*o0LZXx3@$lMCI z(0|nX;r4y~dX?RD=WBCsU+z>C!a2Q(N%T$mWCLr@$(+QA(N%&?0xI^+a{8T2({vej zh~o-Rs4sFjMrq9MJV|*TUS_WeZZ!rpg@v_k^SygKg2^19%ThCs#c>We?epKI3$O$e z6EoB|l#=Iu_jDhe%OV&Ter+Ukq9nKZ_W3zR1uC*Tq;(P=u*U?J6B z-Vi{dH%7gwkdQF}0z)IDR~U%%Hm$f+X&w-<#zWkRm2tRRI)*`$8!Y$+I@w^m;LKJ8 zkpfY=p_LIQ09nBY=FuZKivDyx8pA5{X&?Eg8$mKH;J@2rd_lNKZI{Z+>v6F5;lybl1UZSY* zteaI})x)+3)@F6!$?V@;AIa&~Qp#r2UU1X&skyZz49XIP_%Dd~a58aF9~nUcQab6{ zhO@`W3Ke8g9Jrl;Zd|bdu`-;>+<*;sU@FL|-Kx=LGB6nO&TOtqH;;EB$Ld>o$X7eN z(`ih&htvtft%o(pGK>ud4UqR0s{VjsuT>~RN`)^GM+>-|{CkBxTVOacaFVI9G{_lP zD#;^#6~wkmz8@+Ae(0`3wHaPZ08=3Kh?Y*qY%V=X$adxSWQh=MEPshosXdga zhCFgI@8LJTaAwNs{R-`FLbfO;piA2srYUCl!X51t^I5b1wMhz9p+ab#u;R%$Yh89G zUnB8PSjJ<9%s@yC>wE=*QOP*_SP4XDB{;QyPEq3^8d+c#da6^vM-^Eim02Krj+={@ zcI>r5{EBsX9+Iz)a?RGLejY!CMLsfV)fOhCCXO`S1?De){EBR;utvTsF-(? z$D7%tK`5#7GSv@HFIwH^D+`4zu%_q8^fF2R5$l&J#TnZ>!JX_dh-OWYN6}JgwMRPW z7H7kwR4gBfZ4%kluLkDh@X`r=FnMUO&L7A)twB;gXAmrh8(eJ54TcO^T@g^$ilRrg z<)A?!-rGDkuruu~0!tdiE&tN{(G7Y$uh|X}oZ|b&SI3(M;0W75zVtSTO%vw5p9UhK zw_K;M#jUngjgAyKbg>u7u6NN`%`n;yWuwz~oa}1eZj-l<=MKysEhX+Fy}W&VOlQ|1 zbgP&X^iW((LmOMa^WclGLhMMX)oyHV3#@c9J_Zt-BZF!+0#)n z8emhnQ}>VqyaR;qpKV&3U?j z1zOMLA;5OoM#;^#P)gj3u=U68GjhiutkX-XCeqjJS4r4j=N!B^e0RvWY5)t0Inb@$ zx6}&ZH+VWInKKQS^2vm1!%hZm0;_(DxbV5%qKvI+5%!HGH*Jv`*(OYFk!2y3lC=1>6)EhGa->!h%ec<&&Qb({E~L$R)C+lxWx z`9cg`{6dWHJ}*S(hPGFdue^I`x(_Ri<dd`5WYMj`8F_I};hJT^XEMgwvGor#i87i!J?3euwi}D6l zo5PUk7Ito-hm^!-Zg*T^vRi6R1ZWRMS(+E(F6O%zVlYIM3-VquJmk}DlZ3&TdFn>B zcK$r)los~l5m~oA#`kWdfWA0BFDH)+^IZ@_Nz2-Jb`Y&zMeY{gz(2SR`HB=tXRi(+ zP^Dnb&1{RSsB~x2L&N&^FiPulc0X|+PwGBuRqC#4B0pg>th-(dbM>!Ab_}!UI_O6t z6Aoay#%5KJIsT`yZaZ*?2n68w~3JC7A1EhOVG zdQ{BfJOxwd1q-&mIb%1Wy2AAnUA(5$A^ZhbrtBK$p-9}r=(c`0CzbGiCBYUCAlLrx zp+u$Y;0!+%9l=;2Tx1qF;~V9LGYmzYo1Ar1#A*^qo<@z3F)piwa?(Yl>L3nyQtQ!x zCP3F*DFiq88)-o5-9XG;)>wHmYmmDxIIVeMZ{VfE0;1eD$-Fvac!vBQyR3-yb?Q{j zpz_vTEGZqB4aiOLBVLPD(jxxUI82Z$KX4lb^vp9dS3fJnGI``+*o|#5xSpKe!yecT z(j?Pa9Y!v$b}}P$^u|m&>ZTt5X?`z}mwQmSU1<2!{(mv@%S)-6EZIxKll*}!_ah_A z{RlPw%>*|mUN7sI29`w<*7Ms2m3`5mE>J&4272E*!%3O2)^#+6{;D*BIB}912WnQB zlf??qL~6#o7^#%#Em+c4U$^^do&AxO%;E;IAguh8>~*qSHxg+Orr_f&V;4Wn>Dlu*QKcriY?5I2le~7`UAhOtDxOtR}M@<_9C~ZDsWC z4gE!)lFEoQX7V`h9d;;}+@fu(iL}8^-VKpjjwHUpFy9&|`!%jUA)?@k;wIh)*7aOc zHAIF@jJhHl*Py3$HnL^XSN0S|ES$|*!_VYw$&V;78?w^teo;qD?jMk9>G_fWD1qAD zO{8(t#gwDmfFlu3Mi#oyuC*#}v=0tmxVJ5$cOl+*sXp#*&IjZi-pBXu&6C!*9)<=N zCJ+@(*_rs%dcA}00qvVrMKvZxUK^L@%*?6LEUk^~4tW7?OQ_!ew)}6!5a-qxOFyEO zvJ&8hL-#;BC?7U0(Jzb@8Pl?EwP<~Z!!e%4;W!rT!x8I)h2(o6ZNbr*v6>AQO?%+{ zV317eC>zWOO-o31u8S7p=~ysY+)EBy21qR)?C^3R6{Yre_1tRvXlma_o%va@zxmtu zFIC)&C8MbQUKF+2!^P*{!^io+rUp;x&}VumRmNpar%=`&&gQ^kTDG2se1BURm;|+9 zVCWthZ*Dp5JUnZiY?A9Mm3DV`Ax)WRbuU8s^-y#}4-*Di9abu5VN(GL(N)t1V+?Bp zM{hP5Ra#57UA{`O%W4un*0>9MkS+n$jR* zvnvGo0U8o!r!jX8N=-{~y)B0Yz%ZbMbs_ir|NFO7SU(vV6ui!G9Yp^$J=A`bXZs@s zO4`>+Rj&^DLz{Lxp0O`z$hDz+GZl}xOG!%_5!xfU;(sBtmU%Md7$lv=_NmN2K762>n*%R6F~ zg2}g63WDz0)M%ARhu7F1ylmpi9bOxYQg<3x3wwojgq=;tseP=kA^Uhqp7*ktzJ!rS zfGkJ40yp>>_zi>r7#5gF2f$8X4`u~8{P5*(rYxH>6avTD?uYNW*Mf&^ReyL@!|Ij_ z>D#(2rQ({W3o25{v>uG~>sl&-mEi2AhS~Ki&`AFl(~3T3*xWzjN4df2I+41dQq_~4 zmcD)*U+ME3+}v=pytEb5d*ngn)W^n2tsi5~Hb-VxXqLWBRxZ}!UdkGCjs{QuW%KOe zL!sGX5A@u7^G|M5>)&@EI(YZulBdzu?#Hlyc74jEYQyi#H=pXiJ-5gm@ zL-jJ@%tqH=V|<5KjlEbH`+a0I&gV?6jy#bR=|)A{%I=(bMP?S0<>D5$Q=68a5v>H? zRe3_GSKBIuWV+uDMI7iBPAfEnlf4e05S6Zu zj7tgmSe}|VoSmS;d6x2~Vp$VR{Z%o?k2j0Er_~eIon+DA)3Xi5R;-P5tlO6>K77Y5 zM#o3U!34(c6h9d+&|}znb?Xa3%_P=BDWP>_SS@Q*W06pieeFh#v6VKQO_|KQMkU)~ zT-cLV>>8(J71}mo+4kvDs7%T#Ma~fuyH~W2AM`!aV>?q;BUOg_R0ch{Wt=QH9ob_a z6{qntw6Vt2W}_A!mk|DI3R5ETLbgrhN3)$IF#KK|DTyY zs{XQ^#A(E9Dg6fTC@AN^5ixO8{+)anv0-MxO;$iXBFOr+1JG0gz|zT%quk* zIR>z*!7^rJK}izM%5uY$Ao4^VdLz9eFP^xB-6F8i+3Y%4Sx;A*-ReEg&sJY~N=@(J zS#52N`e9BI^@EgTmoT9g}Bx0uH!0~K%(#k~cRvA(Y-%u(1$2D#2VpQoahT*lv5(lQe zi#NyOOQazglv^Y_fI<%pvEuwY*-*s?pvi6*hq?_hvO%Z|6@l|2!9S{jS71gtU41PNp;i zP8s%VXJ`xEF6IwrkBN2w$%4GML5GMYgZDKk8I9c1`61N^kx(EzwxAdwn9;ASj|SUE zZV_7S!;qCCB&@KznwWAGv(NUu4+IM)&y$GJGHf2z2&dyE%10qmXQ$MNPsfjHj%`J( z^xVlTRc+%D9k-y8(*u2!lw#4HJYo5MRcupf3tf|9@KS;|OGjEmaed0g;s$lZpnJYN zJF!R9g~8^zjCeCJ!w4B1DOU#ni>6;TUf=lu#_PUxmB)3ywTk*766~rZH(J>w3rwNEs7@aHF}s9wEXQB zM~l_6w}({rE-0{;J*{W31Py{CHOsJFdH1H*pazw%ViqGSMGI(jXe^S-VCw3tzClw| zzINZupvTGc4L*UL0nph!a?sNvjZy936XNt@WMVXMZ`!0fo2y0m$=QNo*=FH#nDf-B z$v3EBN(~mfX{HOSjlmnfuQvfJC`Q|Tw#Y%_1{#xHp8rVe-GQA}Em7>Mw*4A{QQ}Yc z7!=>R!MKVVkCB<&xK#sadon%V~LQvz_-HCtvNXA#eF8Sqay{4`Kb-a=g{q(dpFC7S?2H;YmYl zR;#YaV_SnQf5BQ(!n?t0i9>#V1(@>a8@vGm3!x_8{FT)=E8NL%E>^a?aI3)HV#aL< zE?Ahdy#4^`XW6yKvLe>uBMb~yoy!W1y>45vaesC zXA0RgQ^4MJfH!a_EEsMUq>MTRcs2+NXMf zVk&QSJ)=f%=C=m8g)c8lIXGKQ@hh?1IU)UGfw=I_c|+NU5nMoSl^uXB+A`9EQ~u?< z@2|Pp$EnN>M8wIR%>&{)m{LDL`$#1+d)^S5S)(0vS`93KKF9pC81N1kVS3Kbu5NQC z@-Qxe2EXz50AB0~qx#234>P0`)O=&XjgV%bLn=;jFn7eM%nC6!E3hj>s)7#X_}gdY zvwPtgzL&WB0ansB`X3Qva7$1_m*m4_0JPY5UjV$7M$I~2M_Pp`pHhPOze$w@``)r-BJ|ApqkY$bu@so){^y_0x zyUT#po&R)(7JI!eU<(f~Ww1o?kF|V$yj~A3Px*IhZ$J#(6lm}`gP9tv?f)11|G1;Q zPdW9@f~R)Nh?tM8#kjd)rU%wl=>hQUp}g9tHdgoc$xt43*sO@#F5!CkoqwZ+Y&Oqy z?5~59`LBah{cYrQlQ(z<_?yzt(}OVt3dTu{70r%Q3B%zM_wt@|==d}^+3-NvU^0_0 z2@L>qXU~`B3IvEtzJ^wH`J5KtEKuW$tM>{*Z%#ifpmW57T!7f{tk7e@>jmi#^NrEG za+++;Yk8QgYch=n+#Zf{`v)BuiENS^olYOHlc1s3Y&N2V!yFA;U>S`JA0u7?GU) zu5j0mR4s6t(-xGJ=Nnd^@*!^s+wU!eYdBUgoDr?0*E5tY92WX2OAQODBL8}VT`@>& zRE5UBmI#d>qc9P*g|snA-fuuuqx{s1kWTJH%2vJ=S7IwCaRx{t>@5C}wD+?emD2CN^;zk*+)8!}1P)cQvgG#ar znb56J4fzl}GOVU6_XdRTEm15#`g9-t$sFyCC4*CU8)a~8iWa_IY~X^GFUJARa|^TX z%yC?#(l`R~qnfg`py1fbt-)fWr@kDmVeH2WQ){^LvQQwu)jGyzU`_i-mzl#jP2hNn5XH)dalH(K zpoqATZb#SKklJ|~9l#>UM}ku|rZ3_`R?|Vk`*vWZa^-yH7^yl)QgvX{!{T(-3sQq3 zIGx@{Xk9{Zvl@?qul6c|K#HQLMrfPrGUu%_>y1E==Trm(=!1-vHT{etJ;YWhJsx?2y^a)QQUf=C+5r|{2eOZ<-ec3IeFoL!a`4VAK ze89!_UI<%XSUC)RM+(?hG&P)LW^DB=cxN73XpOWeCko4F4u1tw7HuHL&P?c$j z$J#vG=0rHv?I^};D`e*{zhr^&qn4})P?=oa_Me)S10lwij;q%U3-OC6Cgf^o`?=<+ zJNU98FF4o>7pylpRoY~n*Q*sZ>L<~=>zzET$E}C;YIYQ+59i(9LFzj+2qjGmq4N2< z2Yo@bLkukrfJmmldG`;O}iis@P5A)2d?K6;*|29zT`i3n1(pjXj)BnbTe5zYp0Zy76Bw{08@{XWvWZ!^Wsk8(p! z*Cz1-+zxZ{5M@{rmNTAX35-7|{GJD4i>Rxm<(gorUb#yc7+Mq|JbQolgZi04g^!#P z)(rbcMtmHNzWZwsxx_30QGNIQ-vc7A3@YM>e*_)};>QsjUY`j^7oE$Y_E9rTX zUcX7w(J(`L?%5N$SMtCg-yn*>N{EUEMq?p@c4I2SXE)+%0>}xI;Or(s=S;>KPA#+| zNP@x~iJ0*2UtoKXIN~VWC3SK!VjXJBYlKaS6ybk;RR08k@Ndz8Lr!AT8k_u$8qQ^l zZlpUB^Rm=nwasKao^@(zduZEud$_S%@WT0st?or0Oc10jWy58k9?k&v3?9t%ozYG| z<91L(-WS3DG~PQ}!eX`4Nf>~ddF;;}1twpQY6wE|!K&it_6g6k+6U1}{$k{=kTK0z zb|Q`JKWuGBj9ifZ1#JvBWQFlTE{_}+KUfhtbQMKFYC{KckvfbZfDO}e!X|rWZ+gHc zgI+Tt=0F1@h7*9h?h9C^GZFMJBSvJd#s+qTUY%#`t=|}*6NX+uoJ`;^6F?AX+K_@7 zYNhu{TC>{2HS<4n;-Jz=HompxA);Y>g(o>R#)jM+UI=w7zT2<&`RD2gxOX%WbDX?=vH^!$$Ei;#B8~qjSO|orV3MXwMbX|?- z;(OomNsVljjsaTXvmk4#+!HBpcaWL*8r$WhQxOX)s z#}{og=3!H4545dEQQFqSN85VX+O}RqZCfv*)3#n5ZR=sU1LiZ*51W`IW!qHpi;*h* z#Yk9+^Z{@%*H@yI?<>)&6VdK%Ap`-n#*z4i*r6|grF}lO3pfn!RIT!>B{d3(8AmoQ zH)Y>!+m%W(bf36^{whfxLij{K=A!4Snl@@vdTP8Msg>862h(k_&}Ek=teewzGddA& z^Z^;#m&DoV6(`Wa9?MOYUaRV&on6SJ63b^;@~sT_*1bfx7rA|-&luyu6L^q~KmxUq z6g@9!lhMnIWzse8elOKPx!z7xf_pfp71PAPd?^1Nra1B+=UM! z`GuI%@Ac@_bbi0GBtw+Oz8!b*p3*j`4*e+avHC~(C?|@20&}XiA9JWOoup1+y_%Kn z#N!4e-UaBOJz447193UjJ5k3saO)k+6*~f4wq$0gkTE-iJutx5D-UWqa$Qj*ylWL9 zTrUYBGD*Y;iY$V@dFlGK-K6w*7a1l662cL)E5KMY1M0e;3M4-;dC>sZFuPA8fSyGg7 z8M<-A@$&hYx7>6F+n~~e)15pZUmPL@c3d7d^RSorG=X=~RATY7bjQ7EPdbHd#7lNS zo?yi58cT`r0?P-EQY*$PkzivrpQsHI4ljY!89W~T<-4z3*17Lse)#?`-&%?vzU{-` zbt(SweGmSj1J9ypmG{GUfB7NdSCo@}bwEoaoEu#Fk-00Szfb@Amkgr1&mfJmr;z{l z*TmRs$Q9ImW^P(%?D6PyI7~o^GptFHVI1MvlgJ7C*LX{Ry_!Nw+YpfgJ1We%HRZtzxM9;K+}SDRdZA_OI`L>pG|>O-3q zW+pE2Fd9F({-`7f?ceHEG+)IkbPKN`OH?A1(@=-6fYnbeJYE$tDU0GxkTE%yw!OwP z_G{a|dfE+cUp+mj`UZhmBVE1>(0D!>?F8&Es|4T=WOrhWJ}?LrwcdIWSbA}(RIg1VgpY>G?aK&IfLaT5!NfIP6|&_ZtE9#PhQJ3U>mT9ovBU5pEo3$AKZycx3I ziVQw-;B{){axkJnA{Il6xQ?`lNLw)NkRrC29tGSrI|`&}CL?@-(AB>u>wd;F86(I} zp21sgqDmziF~cR| zp9X5I3zJljljVdv_%<`lcqXTfI9Lq|Me;=#Gd78YwX}WrmwJ~H%YNM%fVsF!60J-P z$cL_Rdfd-5Uc@h)kaR|v8eF4_R*`m&&Wbr>gF+8aB=Q(w-efpdRD?4?yb*!QM%Q!D z>~Ap4)2qv{FM8C$jg`TgQt1F*{bdfXY-#Y2a42?l;V#|^r1n|U$faIFqP(?kqqw#f?FNYJU{Eo52zdhP|Y^!FHJKQ;(`*qEv&an`LG4 z{ly%5Lcs5vp`((-X{ALi=U-d!uAx4+_pxOTNlN#z;Q+RU=6}VZtEK-^wdzuD za6MgX;EBO^``iNk$ic*ICeW|;Y(3Y|#E_3m9DM)Kn6TfYK6Ii~ zo3yxMC5KH%^I(H7Bif|$;`C~Bbb(cL%ummddvKI}x|#m){oDBi6L(OBRS0?lSCl&e zzfI#*mpBHN%w6IGd7#W1o{ogsvg^6F@kCrcY8_ye%>@Dlc7$w1=Z6j)cQWBa1F&Lz z+Em4PI=`0`C*HCk*?Q|MKjT!TK6nGq{AgbBsQH7bAWHX5RgY zvKHInP?kXKqX>2q|4VsskS|b>xEc>LX?>VPt5`R}@m)IczZ4OFV)7OyA`%7)kD1wH zb#qr;5v@Z3zh+4o=ZAz@iNvA^$FF9RWL5lEa17jmMie%Lmwlt zA}f8N$POup+D8SY16TqW85%2PB1?v75!x0!JweA5P@*iY*9Fm+xtECH`L9o`)H|kr z6rnG(ht!xjfMm|k_R#vwrG|U4e#vqVT~9%KQQf?@d+}yKxQErQ&~Ms!-p5R{)iSZ! z{P4ZY-IyjeElj!wU^60t4_rEX(Ed|sM_*9EN)QI=j&qptDoDlN!CEn7G3dvbKf)xm z+baRix}dr)2~Ajm!6xsvYB3D-r;q3Zw4(()9G$%HAbuKl;ZGmmU0-!5Mwg@Ot4sas zp|3ym5F@BMC^q8_{5J14e?I=yiTR0J&Wy{ZW+#i^^u~Dy_cOd}2XQ?|^V}qA3OK`F zKx%13(X!rWnc%QxLDiC-Li-ZbR+Cq6IK=*wEx&{v{m}amf#M` zmq$LFi(}$Lt$i%$?Fi0RE+#;1XGLw?lPc!cef zX$eVnuNR(X`Wb_jij|wNyNOvdI~ilV#%jP*Rp;t)yiSHKXyzyt(fIJyZGunB8(re> zuQCH~<{p~vl3(;ayy{TAN7llG4$dU~ch*Qs-^<7KWP9j4u~3cgUcaPN+RUe~+432% zjXa&K&1|#ceYdZ$(^WWTaC9TqcDB8(HkHEnyJSgvzC0?K8hw4w%Lt`@p0JCf^_3vn zR}W_c9tqtx;76n;Y!lbqF*{{H-yYv;v~ZAy0rT+0Fm(1U?y4}1kxJ|M>jasVM9jMk zR*?=OcRc{DY_>Iw>M5{hwq@k7T$K5b9|CYGW)p*XRzNb(Y9fC4M*uRj9^ud1tJcfp}q=a(L)bj)ISe;dgsCRDRkEZv$V?Wb!v4H4;FNR z92$EcfPH4M`vGgKY2(lE9I-?pw3u#NG#1KSXl*g$U6YGj{X~{#W(xlyvsI?QF>?OJ z!bmIYrPm%Kj0ECIjGfW>z$*-K2ipOh3klRn%L1FCc}))-YeW~}S=%`vNbD08OC8CC zWS*3HGJ0RRy2`Z~KirMnaz$?>>XGqC-LVO<>#dz=#&-v%0Ua2=uoyc{G2Kj2TYl;ZBYf6CG8+J{BY3!N;LsP0j2h#NtR)-ojH$J-HW=R^qr49flH@%Hq;ByJ z4@BBQ1-Nyafv-M7fn2g4%odH+l4J_(5pU^X@MH+%#H`^Q;sYnORu84ms`{Cfl)i(P zG`S2_i&dQj!BxtN9Ey6O1 zNJN^qUYBsGbgo&0CfSU>%#&XrLXhh5E+OG~wOw$ClNB_H*!5<9PPd)Ok?V-0W&X(m zo_e%oo2INJ{e{$e;xp`KQ}GwX6V=LHU4yzNe496E4xr3EPLjyyu4myQ@Ps_WgtjKI z7%$m<5v(}9?mW66l=6*Pi(8L_xx{e^Om+T+LR+L?Zg-h*Y?*<=)*m4ui%`I{)(oyI z7$M`Ij%TnBIqGcDN%+!a+Uwx$&b#u5TRvd4B&v|sb(rdG<@H$20g<@JldscI{PQYnT zW>h1M-n6vr;X(|%hd*F6H@Lj4^0tzxKKKDNWgWmqX$N8+(*P>%&d`CR)n2hhV{y5Y zAlFQ6Km7OU=sP|+$_WoFJgv+% z(i@UP`1PYMCMuI0_-;1UWT#VWDW(A2Pp{eXO-rvwJt08`K8||`2BYU3isiyl93$JH4LTRmXtI1e<*v@jc6^t6Phuj`Q zYF;8I^T$*q14v0*AFI^+v~==5k`FG!vHb}7={QhWr)#D7DD6<8FUP8td2HWHb}&L4 zWG8br=K}Y|6D2}d%58Zs7?r$-RAu*&r!?n*g;_@Xrjk@ewSjaqj4s>5n-WJmOQ+~F zfAfa*oT*!4RQ}#NyPbeV(;cZgGg%Smq0}#mdkAC%GQdQy@HL8pG zV3bH{wwOwoGlPKvm8G`~d7Ya*79$8eSAp2^Hf9IG&`%~Q8A!-%dY1Fw;NP096)bj> zP-6Dwuh&#jqYg`)tbBS@)73d_=dpa+G@DYIBF1 zdJ(Kj=i&;fadt`1!{Fa?_b%%Vi65i-QZn=-{(Ms{h zt1=-S)c2tD%IS2xs198rD} z2Ti`Ifh=$cm4t(ceIEonXa+UT7q*dPWmi{3_zQok@jLjEC%W?|lpCN_-5!b)e-D!a zfFAmxo7MFy@=W}gvzW?Y$RTl^UKM< zqZJUQkW_T?>rbEd2lM-P-KhWAn%+@3)O55RJImqvNaf+ zUeeLY@&e>9mdMh$0ov4`|wIw>ThL6bYls~yV4)>0Q$dE91ebI<{|_qkd+gsq8H!;*_ZnQt7S_RD!^E{1G$c3q^#vdNB9 zhH`DI0G&!hV0D}*)}5LnoZoEqaU5$?^Jy)Q5e>HSh&S5J9u_xZE^8vzEi?$3g*F(O zf#I*j^W3z++*-HT`uld8TM>G+2k&rZ^##YTiI~QmWLQ^U<)+MR0MxvST$dro|&o{gf%Du>=W5cNgsdMCdCVj8FH zn$I*W->;UvNOJ38ve;77%IjshW6P57^lOVNzKL+erWcpjd|rJ~lL?uWLl)rI zvdTi5R^u_2xv!88Fqv{<{cn*j}^?F zgj+N-R0Q>iwitNjk_yXwGjUPHdGe_RG)?>>QiD#;%LIG6?%Bq@;@2z47(ai~v6!#? zM=t%re>Gq8KQH?FPp13yC(~Vf|NY6-(PV9Qe=-Lw2YGW~ySm*SiHq*I0RMA6sO{nC zbUs}?9G&uKx6%4nfB$4Qga(e0p#0aw;}5MvhW%o7UJnyWf?&r5WXa;-wGcQ0Ba& z$17yw^+yi{#O!vkK!Q8?p(l-8h zON$yDGb+DW4o7;NWI%tczUl(v8^j90M^pRJo`r)V&e-4th--rd6sIvlfn<1~CpM3O z^l>y+5%dJ+cQ0bqnBj(8x&G_K7 z-{J7xPk46EiIHJ-Ylg$6o|XYPcX}=(zC=Q+qx14ohpm-a_}B2|zF=K}Rqdr+N7}$Y za$+!1VuSlec5@2nsfrag+uZM%vnJRfAgmpCX{-8y5VG$F42!l{YDr8hl#OKt-YoTB zhD!R?SO3J(F2fNty{&Lr7ln`CkA^46PX^ca|J?_L-+j3DpP%(}B8{2?UvAd?-?4gd zoY|G|QvmN~TcQ{Gnu9U29J4t=yFSn~41J$=mT3 zW9@-na1Ya$3Dq%4qj=bBZYhhqH%3 z%{<0r7e9QzZ7dAU2;$>U$6M>|lhf0!9keW<{!fH{?R#*`Q_JY_a63SAU&6XZ3-4?f zp%iDdAK!W4r^UpxwSc0I9}?vuCY!tuvZC2Nwic-&>ae=oL$0xtb~{t(1mSVFLoD2t zyAyfX^Uq^%iz_({m)+=zW%5Nism9J7cvylF-kRVF8P71eD6E4Kec1f?j7rk+EUe!X z(NHF8yp4RZRvoxu|MHH`IYML?2oKs_f|DmXOl56he9nyGNe=iebi>`o?cioQ-Ez_G z=}{dy!UyAau&F^?=N;=yq=)6JaXW~m3+9BQIB;_(*te{$sf$K*0|O8O@d?heR9qD? z_hVG4KJLQwx-dO817*tkUJ)$W6(B(cMlG-{)v{hrgIEN(s;X_nJ)9f56*JhNJaebN za4htKC!Re#*saeN$5s|Qxzj}FH8y*LTV@O+2+#CBj%@O62jeNW37?l-MM2-RnI!h% z{s5NdwnQvXC4n(%vM%51rGdx=`qO*-a_|x&j2LE07Ow%LYi8+jNUPT3#>|*3zJ9Yv zU_Gd(1toP~-#;gJcDAjC!P~rH9ck9QA71V-q>6JdG;S%_&z*g?g}5|AA#2R zDA6Qg0{Nxan4eo6gL;^_U0Nu3KVm7D#5#j0@7Y59Z^d8|+`}XdORwL9sl@vJ5+lb| z&t9h1Ry+}eCmnAUGm4cb%dcZnYY&fC$e!pxY|^h~ag+dANx`fGS$*fqm&GK}$FS`y z5t~Qf&Jq>@1Fu69xFn%ZGsp$N3~pG!;uQeaUTahV?VfOf=%e$~pK)7Y9q`@`g;%%d zr)H;{Xig7YzcR=cu?n&KPtBOyW9=}8{hq#>G1QriTGu?{Fv;D3Iq%C^wx)0NARF=) znVLjs!=m}crb5{#HBPK=jn^lmXS+yp>>}Xanly6`XH9AOVLs>uqr~egSIBQ-RQRiG zQ!A)SShG5)9>zXHCAgLM`BI#_+rX`S#Yl@#L09(-;n8dWG!YXn_+_o9C1h+hDmL%8 zvy zP{Y=lq+(zbn@+ew4HFyRefqfiarg32#(dE|d`%*jwJDSj-owNa-_R)2pLkD`JBG@wI$sLZl8 zWWZ2Al8WuY)YnI&k4Kv%92`hAyh8L{97z8zxz=_iko@oWvd-DaY^avmM|w$|BlVX# z*GPV+Zg6+z#`CDv%pd8+H}-)0$KTJuZCv7|K9-Gef!j;?b+P>6`{L8ZziTQfeNtA4 zk5Yj;z$z|2R7I>py9r;6B9wuV?boc+_OTtX3x<;*c=&?CVrVD3Ek|f<@M#4&Z3j&b z{TSaj;Z~jS3Tu6p75S)0*&cUMD$;T86NUm=NJwRZFEbBe#WzfT)OiPMj~yk6y26f3 zo+5gt!PtB64a`Z91C~>dmsX6nfpcxgmt5Fd>~!8RAp++t&Kh$dghLTp!(JITj^0uH zukl+P3OU#{pz(4g5|aux!}FO^y1upNHWICZ;_9akgcIioMYo@KS{6Mgi za>F9z`QfQ6a4dX+Z-L+}7 z)S^OItCGc`H(;EwUH;YJt=3^m-$OSbOIrh}7t-BQgTB!Bv*!d_Vm`qh4oa6GAk1ts z2z`tTztsllYzYXtN=y2ZY^9-5H5t}fr>hO}NtrDppf+dK60xfk9M}9lQJv&X2@AhN z-e6QFoy8Z?&Ce!6pW|Qz$b)#&!YgbK##t#+#vF{bqF#(Gv#_fv(T+2d-KEsMs3aeo zx=X6ifLF`2g`U-Ucs^b(U}|Y<6RWzh_ONocSR0Ld*hjm%(@V@JYcK@W4Grdn2K1J@gaM%fYJD4($BWT-OgsGY>oB^uOyf%SQ+rqaVELYIt68+nr#a z3M0n3jdxBP>OA83e65hCWrdV)UX1Tz&Elb=tg<~E-?N8NcCrd9Z*Ke6-$OCBdKjgn z3u`p6jM z05gurZ-m)5ri{xqDK?T+B;xg zfK5)F<^Rq5)@YSENy6GMrh!-X5!8suWgt-25Nz=00oMf}g(xT8-=x~3q7xz zQ)W9bsje3)*Qg${#mP)=m@X_ekE;0}GJrSE^0-hLeLJzzo<$xUTjd;D>q20=V zr5E&&%Y8iT3$ur-2UCYv;nb5QkQvOdbo9Cls&x#|$O5Oo5fq*;%K{mQNej?&Pk~W8 ztH3fKJDhrijpUt;&Up;Ov4cxrcpT8OVv>z9ANy$@Bq}`EQ{SHoa7*VuQ7J#oY$jU+ zwAGv^!2ENpmh5sDlZC1YZ*fFFoA8v~e7s%UaY4J}Nz00A(97;(Zjdf$ZtB0P$z0hW zOkc6SJ=?3EbT|FM$*?6rd*N=T`?1l*&_@53RMWYAKfCF`pget;AS-6^+BU$GfHB8t zi(+-^Y^Uk{fCU{sb%k3)c6E-M=EO_6a2Id>&FsHGZx>7w4!l7{4~f`$z|>s*d_P~x z4^K`g?*ilsuD|vEYCyW~5^^4!tR&QO4`+v-hQ@VQErMHJw~QM$9g_<-Q6IdD4JP@p z2Bk0c)BIi@d>gEW%|7T%_I)#vvC|0?p|?!P18>pJ8L%KJ9M*F1L(YZ}=*#Oy{Q#o3f3)^UGYb zC$Y**JF(L+WGXN#==s#6CG&^TXB)%Js70BpQW96ZcuuF_da^43=7I2BJW{7*DKZ^W zW!~WDtU||M*u``(jJ)U{l$Gbm%$~)YJC+&Hf-KhJw>{1}B@)}apdS8sJN^Fe|M>eE z6-Ewf{pHpA@5%Dt3rEl%Q}j9nr&7=!ut8z^c8A5ByZ*h#n{c_R_C2Df?{_3#@~s*$ z9oso4e1}GAuWmf+Ea#}PuCrE99eup@s0%#NG;R4icat4Q85((T&A7?%6{`QA#jDr;SQQ#d?$;qGm*MaG`5e2%$ROSaD6lvN z@siN_+81YV0Lvnwc@Q|hKhrlM6)gk(vIYf}@S5c)_&Gq2vBrjtbLZ>|e5NM5|18CF{eM)gCEQn>P#Nb^U+G^7j!0H+hZBw-poQf1n zS}hD$$MxttP2KYKXvW z;1U5n2fQI>0us4en?Q9N2?7bt{2RZF!&@BZ62O_EhsIkr5ZrJh@X=al;yFFj;Q*}g z^fTuKMd-`SFx)1qz=$IehX)748KZ=Rc1{pgJP}PeQ+R|@SjbYC;5Sm#u--#jlkOr-XW?wCx10Pmv8xk>XX>(2Jb2AgQ&|4I-mF~VkDx^a1 z88zD2oKlRjhg{X8Gwk^mxkg~mR$Q2v+Z*-$C~10LhGd24Bl|+h4cK*wv~|YyC4LZxQIdg>Q>!;Zn{ps_l-#Zu@REH6 zW?z}SlShxCN#6g8H@Te+?~+V2&w(=hC|@Aob7h@U_8mw0-318b2_2h%_zd=!LA){& z5a^ti!hj~uY6o5pG-^#vvfu?)WZkn5#mIk+RlO$2gG_9+HKNlbhE$Eo>UWS9Ek+ts zh)T*n);=&|Emaj=VZ}kip9C>H%iDvo!ZkU^UkZWAtEiG1EETB{6Ma3tcdi#)r@5F+ zQ4!u7x`ZcTyXEVQ$KOq++_V$rbTj?S&x=_Ezl$ITng}63kO7@`#=tP|P#FZk-nPNO z%F=)JAB}e7b)B$uurZ$^w2BZh zGPR2MuYdk^Jl-kK`^nY=2ox>ep;wFof<1JhDvO6i% zIak%O(JUonXv-UaM-AE&oFNVj*SJj_Ne)MJOJPJEET)6+m(z*t6x50FWPYH7o0WOG zHKm8SO=*DHY5V8BMoVO-mL3QxPv3W^Xn5#j$%%Bcojf@0Qy1iHORRDE5`JH=Y9>zK zO}-!h@8U4j>33GO*S>DOAODffkt#YD=3APhY%iAFyli!j&#q|gmn;w8u5B`yB+JR2 z@#|xQ`&jr*_nb=3viL=*(SJkw3Vs0WJ`GTq3;C>ra>hc0bKSf9l z(f|)o&22z^MV$L`*g|%ti$0f#JMIO&CL=iSy#SJug7BSjWbs=)Zuc~g@Y#I6j$l03 zaLw*`wF%riDQjAUpUNUu>=ch}s#Gdw0K7xM6JAZou-s$^+FYqd7=~%H`WC=!^JO+A zAGrNFKW2HzNLP4D4VDUMP1NzudIB%?Vz-*76fgajki($S6zWAkaA;q zPF2%o{QCJ@*UiMC`1LH){OH<;qc;BYv?1Ev#Elu-&81>LX0^2}N&HWv; zD#SJxPDb&oy0GvNY0HX*tm%$aw2QJTQ41?xY^Ph+Rhm8yxQ~Kk?wZoo5{=vI)2n_5 zBdiXRh3Wj?RH2I+GtgQRrDCWp9-kg-nhwG!Cf|A#EyCXJ^VHFr+6M0>d;(0K9l5Z+ zePvNNAe+kF{v~_*S9!=oH{_4<Y3P#WO#iG`O@f>&BEn=xi@l-J5-wx7 zxLoZpq-D4Omb!x`-D^0lyv6!>`BKK2%1P=&m?C|q%T-4hDxb$x$NeQ(U6L7 z+Q+iOWL|2HlB)FgT-H7+t%k=~Cy6(u`*_Jrt!{y%=Mq+L^idKO8M2 z$I{0#nL$%@R4|Mvvgm289g<2odi+V0_FBij#jgD~jkQih?Ud+!zK=aPaTTm}>^%ynzwQOh22AUxU;(+JG*161&|Xdp=#cKjKe-Hzb|*HF&SxdzmQW^4DY& zO{_mrp$(o(Cgu83--m1yQyzP4aLFPzC}$VWrB-dQ=2I&^x$&;@IX&OlV;nH7df>gp z1~+dyJK6oXKFfz$3v1T2aGqS|-*!jLSETPWtR|1>veSIfs5DiXZxMDD*U3X$JnNFK z_EZot5_(~2d=M}=g-vLiE2w@*gHiKpJw!n#)4H_5hEqW&hrZpWsk|WQBBqs~^llH) z_ZcS+oQuY$(ch1QUwA1>rzQ8d`Vxf-g~59*I(w)&d3%KpMo^oB_*#{N(NT|saTjJj z@>0}6{5EYJX7#!g=cS2+xF|odWw0)fgN^o;z)1Cc+`wbobRv?y2al9#9DQsnH(Ic- z8PZpxI-a*#OcqG(gH`%>#tJrBc$hGUGOi`jc>W!db(7=%p%>0J>Y~!vV(j#34G+yr z2S+z|U<=mtWUUUiRlrXdo9Sl2tjSidpu0W<$Ird|Wq0~O6mEypW ztcrTLPFDQY|G@<6A6rU|pZ5j7h3OZR!iT(t`qR;o4Ao|Ybh?woPa-zlv(4gLKgKt+X1&X*_^vd9N82UJdI8H$vpr0t zjZR*eN!TU&jJ_|pK1!teRRdL9SXgqha@XK0`doA$uzJ9d&_6%{r2Ua6r!!Ew=SP{3wVJOW@CxLXbFp)7UQ%X)H(~Z z%CDl{{L1KqVv!7R#ZmzY##r?ge6s&HlZ^n=%__iMWmzj2j={pY8Fhpp6FDfLGOmS) z-@1B-kWF7Q?%AN1S9t0MXAW>F3u~T>#cz+q;M^v%RzTlMPY2-41yMf-IVmP?p96%A zHjyI3-aG^U?_5MX{@yIU@m}->VW7sbj%B*hHHDSGTmY`VJgoS+h`W450kL44WY8hv zoEs^TebBD!6k-!q7Ra|qPKIuETkx?^l{`DJinL5&3OgxU*abo@rXv6;=}dA_%4r~L znEI`dI@5vmvfov+eyI!&-BPnDY)`?Goz1R7(?G-t&C%ewM0XK)3>mv=%{L#A{c+)y(bZe4 zC+|Cdl=7vV=(fFl8-!ig8ZT`YIV8FPsJNXKrQ zPd-^C5t9+BK_^IKx986YT{ecg>A}J3znwp@jCy+NamftV@?hs+$8tKswoq(j7jL|k zxpichZ{jrBUW%KG*E^7gcS$C;WJS4WJRp}>mFUn8bbi`I*(9oz0$blFxpsbRodw!r z7Ur@|R{CuFSPqi=$jXQ8$HfQTkGQb&<38T%98%N$SW@jH(L}(4?Bku?+sCVEO-pH0 z1372VAVOnReL%-VZb;lIfh#NhQW7(molkc7Et$mHEsU{R{aC7%xYxL$7NxX^=$bF= z^BqFrCDpfsO)t*Y`WNEt@YAFB_fDExSfSpW2AhveG$`)`>fi^;=5h5hof>N7Kblny zhELl-Dz-dEkvnW@7g+xU?p--&~K1vlm-CW0CUhS;8@G z(=rVDGLL6=B-g)PY-AbC8lAatkZ4{OHp|}*tnR@r@7=OFCS`g=ln3!~3Q97YU;fbV z)|UU$rST-NjFh$VT`p!U-NA{df_Qno*1@9U4kRpcpEUR#( zK8WQ@7K#pYEcrmx<&~|tud^xB(8qlPYREL8gi#F72Ge=GRcAxD2GX|+Nz!5aa3r(v z*7l9ZC~y z9|ZwE=-E6I-AcTjrAdwEg?We*sExsZ;I_?4fSGJK&RCU*W|%Bc?RS&v3QZRiH&9iQ z4-$B_@7Gqcjd5P90+Y6!5+qw!T+L=5<e4m5;&IQsr1mQj7dG1t|q!D`Xv}4KHX9d8Ok#}j8inDbKjb^@i1KS5sDv~h%Q_e z`a(m!tk4D@%eSDVnZkzZD9ubPAv`SE)wEc{F);Q!Y4V{HoQmJ=R>y^)|g&-Fn%@w7@Ydh+l#elPgeAyabWhQT{J9@Fv@ z-IZpLu{PTUo$$5@AG8scba5Uz#@B?oEzBqtV^&CsSZqx!$Fid9FpF6y5)+srl|FgS zBsV2Ai2_Z)^(4dnJF9?7(ZS9DUo!((a<57jlse2=?5(D1Oo>y3Qa(&`kMm_QR+?C2 z66d`cRw%8w#j{ZNr+Ua;^x)<6Y@ve_nk?wXoA@vUms|4Y>m=a@Mj)|(Vw!NJ% z?(Rv6^A5>hzx$h%c(&YIKs{>#y{)jBSkTrSwcVgu2H^jAHI&5Loz9LPjwLK0XIYF0 zmEvY1Ux0F3Y8drKz3Hip#V@;=U&C~Id1(~jBYixDF(3^E=hRZ7-jkY5hWEW1@$sRE;VV5#oJzZ8DYl)ek zR*Z_4%Csb#mXOzKetV0hJ#$yJY5)d-$+o3A@nOTQ`}w(FGm=32+dJC}9{Okv@D5IF zZ;?co3=AtPn}R{(Al{mfw)@NpCLvW*_iIP;OIQ31QMD zw@A>A7X_-_nJ)vvAH`!B{y9?8>QEe?D-vdY>knxyrWG6gzejyh4(u(hT@9`Xo8$2i zPU%6r(^zTLk3DIBkHT_!og@xl(gxI=twF}ePIxuPrObTzY8KzGnarn{K)m#}(yb*E zOTV7Lhv0!k2U>M7^FwVrNcdW{bAJ4%HGe5x9%Uz`4>}h=;ppHK zO!9FUspeh>eZ;q1D|UXuL-oUoOY?fh9PrQM=vvbQkyP&hmS(m&s33J1vP5 zj#tvnmL#y0e`)ISQDqCb)}2 z_(dE(d}Y#l1_q6!C$lr@!%7px{$I>@|Kf&4aazboj8WCTR6!>$*2HKvzc$}dPKOE_ zS)NI@9wf^5<8iDC-wdIVVynnJjJu8>HVj2<+AP`z{B}?$pKX;$Cb-|xqO~0)){b%s zTrFklBgGP|;2SncyLjgT-ZnQ;F}O!5llfJ3#F9kn8x z^)r@mg3QtmvB%OuSTsYcdwk(E^EktiLp9emOtsZb0{=2;sB74novJ#hGHH_$GeV{h z_c(OSH_&Fgg*JBUMI!_?i(y#v?N^PuTp)q5miVu5?Ze}wV><~F%bt$eIKq0W=ERFA zmQ(y*$Y{YGT8_gy3>HDIcFfu3z>XxwqbEjX)25Abp^o;;swmw$4#s}t=w{25J#c9u zM0+R5xqcSG0-o87t2kOdd=;i_U1_ggtp02k86N)tqwrAP7_v>Ny^--6&&I@)2Zx@1WjtXcGIDqoDgbE$?c zIu%kEH4zcimf!|Bfnbeess}(h*2e)V3rs>Jo(qhfN;(*pK}?0Hl&sm$?7do@H<#UX z%83=hZjLos^-wSga=+cf79YHkaJXHGBA{|Txxqzgepg+W6u90uQqMlFNKHv}bz>k15|O_8%Zd5j1G*RY%7HZZD!mQJnhDe#LZ_2COqh!2s$ zJUj>GtqJyx{k6Q)MZW_ka#Kf0Up#pKi+F7UTI^*twlhKOr>m(4^s7o46=BsP!@@5( zJ(E6SI#5PTgMj7vYBPGefvXXD23!Rg_Xaf}ELw;9KF%qJFRWM1cZ} z_vl(O9AEFD7A-;S-Ebx)YZYGruOKEizZR6@I|#So>BI}*SYgKn@5t#M#hTu#a_X*82vyht z^q~?Dkf~Vq9W%o#S*q+kB>Pa8N{T-37iA)j#qU+gR2v}}ml@_fLRu+!Sv5f$P8AHX zq&pzHUYUf5DH`i)#8&*69Yu1^ilMP^N!xiY!ROyJ#S`0wlE$Ub9(OzaZn!*0NK7j4 z=pTJl42IiZBBVw}(BD`Mpg8j0O#%~KPej0OJR@RQOfeA+3i{T({ph$}u`HPOpago1 z$Vhu?mSVc+gkZ_IEblKY1_4sC<+G2Ejyq(E|hmc5a!_lS=VD5@^Q7=1xgFSRTs7D zf-Y>)fv3r(^#2G`8S%JH9F`3M`9P^KvWke&STxrN0q^L@@yZr{KgT|KSk;4LkP1@_ zgZ(mj?N_bQ%<= zc=LK4UL!igwQkrxz1#?|%+vFY#_C{uN%xzjbhieJf~wog;K zuT=dYnJtm!pwiF8B`k;kXZ^h2vRkKMkDyIyr+&Ge$*R7TrAf}=%;fJp%v zhcW%Icglv6>10MR7}~-&aq3hYS-+p-!rg<|u&wWL$l`SuVePI9Tjd7Y5SiPKu zvwB5PBPoKqQJ4gq4ABjrb_vie>Wrk9h9ZIW)Woh4)mkxNmYzgxg+TxlhuaYw?}72F zcO8tR&FR{{jWA*Ap@`#rFvQrXHi-Zgqz%n5Hm8lMP zLoe*ps+(3S8EZp*RezdOQ6iX-$be$@;{Q9#U!wZ>SStP^9|C-80M zxj)A*`Dlgt1Rt}LZz_&?J6@Wd$#~LRu-f6D-avgC#L)@j@tEr*6~3uKtKDi{Qe8*b zk|e-LD5VUyg*Ji<$1Jw&!^ht}s5<5aeeeb?2L^u3(G6kp1gW7!#FPI=p7!mSDEJN04lNPuH9d+^h!S&@18i z`W_>hC3in7&Jzc`ng1FgB&ggou4Ln%%?2&(lC*%b|M1RtpiQq6;S;ufIZF%hq6>cP zf?pQPw2TdUxRwardy!xLXS|USTnYqcKYR}>!6UkI*~>!%4(bt>8ZtXM?55;he^AWY z^u5(rqE!SSeXW6vq}$=<>pJd!BBL*f^pgUJZzzZ@>{-8GISIbu_sS)Ak}Yf`VSwq{ zyamt7e2d5P&HVW51n`DGRFAS7lH*W?Q4e^S?erYR$VR5B+OU*{FZ@B*`hi&@YiFJP zcpMqGRDYD1E^r@MmcYae-c%2zdx{qd#?vT}#7)me4zjcEs)D6y+?lsZ02DO;UIGa~Q zWe*3p>c5NlE!n-1)ttxCfCe&iI*(YZ3*XMaIW)5j@5$6I<>#TUN+XWWIqMIG5`pQ{ z8?-jHg9VYB+3#FbcB{lj$#8ozN5#NHjCg94ki(XUeJtu54H!18k`BKuc;Pld!AMy(JldEK*$u{#rH|$IE^$+1!i?4|3w22%j0`y#FP5CZ zpyG`@{&)2E|9UdaB}#WRY8JM6rVS)uSns>LIc^GwJ$Yd6@uv~ixkL8>6^&jrIkTrl z{9%*v8|*OQ%eJElN#00><+IS$S=Or|g5}jJ`NubsIKu_Rq1{B8?^hYGODAxZ`6#Ux z5(Icp4JM2Vk9U>m9b0CFY;aXjtzje00<@nr;4EsQa^;za^P=4kKYF`Db%v5@cI5X? zPkD5CDF;3>fst6jewBFyhsWYVGoB^WMU|TtJ!wcjeH_}F5k@nE;ppUj2l3Oe3y&^G zo%o-zGU*_Ur|)1GhZ{B@9+=Z5JT{@M-u$5hU(8n>_;m6BFM+p)Hc@Nn-iK zwWNW~?>+D_IM+3thOPaN7!f&2fl-8(NU;r+nQe?1)RDNDYb&R(xX zLv{5-Vey0Q5cf*#gbQBNw}Vivq+gIS>5H6T6{0SVI}|7mHar&>MAxf#tFJ90b4mg) z>U5Pb9Mq4C-3119u|%q)vp5QKfEyqstg~$aY)=Rx79)<^C8|74STJ;OXk$Is+Y-Z@ zA0@2(?NC@SY6GiVfn&8R@HDH5=zS-rhv%oKh^w%9MBW{_6tt$Sg`gx(4}4PG{I%U_OQgRUjkKE&ny_UYCFi z1F_L`6Zzq!;{140;YF$4?FiEiZ;~yxVV{E^75k*V5}p3_FL6;IZa3#GmaMYa#Tbz{WWbTP-<>0;4E*{f<@6mpl}3KiW}jdCSIZrj4~0l&hW z5*(>6hLwhmNsKQ(Eyg=R3uUG8)G~sxe&RHgLCNMaY!8YjV7qPtJ{1yT!8KK-kNe2; znAdICijxLQ_YTZ7$f#S2#K~{mmu985J+#4`FTX4>J+`V|a72>ohBpDwp25`5*(s-U zZkPD;kAvR4v!PjIjeECM)TH7y!dZkvF_ic-PO|@d31hD^57F#O@x`m8GqrJB#JSo8 zEQfi{UWrpEAuGz2L80PJ=o9{25G8hlrz~9;yzvJF37hjzK@464WM7)E-S6uxSic3TsdrAHz zU$)_U&o_6Uc?Fes8Med*eE%z-d;H4Z{5JK*@!s-ViEpv|=K15d^La#f>cDld`Sr+O zou5zdzCG)y#roj5P5%0d_)OD=de_P>%W@8L@y6NbL)KS@^O+Fel;-Q&dSB;{sGk{` zS9_hdqz&$^K^DUwa31Dz2eE~Ds7caIV~OssL9a1bvi%|>e{IXyNzx^HmKO-2STAQ- zhF|u1?^Ew;b^eq2&Wa#!Y*B1oUM7;KXnEcrT(4@MZ)dyt>`}h+;Viq1Ff8W;mXDjR zFZc6$wRa?E7yq8#;aM;KeHYC2Pjj!4&&aR1zUTMXzQMX5A^wlGu$-CdB?SNMYqS4D zMJw}v{C^bv{O`8;#ot}=dEfi`yX%~cdFILOqc5MmmuuSI%SC_NPiy|2i+lEovJdY+ z@C?&?Z*P9z?cZ(ijP&y1=kI2^Jc_?{%Q=59^zU4QMdbh2KdjtO{BN;wxkCT^-haIC zul#}i1H%5u{(&lgX#YUf_Q&=Q)GlkB+wwo8{hNQV|A3#fzpvl;qx}bn|K-*bS5bZc z>HXX9483-KfUr@e$2shl+RCYUE7IoqG-Y(xve{k!^VA&eshdufb=|ym@v#Z$5PDljTFgr>94k z@2&NTd~e!M@3^wZN5*rh^0FW$dHO^Dy_ZksV9Kus`Prk#_wpIz{G@IES&!&)k|M7# zoYQrlHt%8OMAm$acVNzWonAw_M>?C%P3AYIBVyXq)%DkF`%?3rB!2}Ju3Qy)_ER65 z%f2o=^L5$XQ*R^W$F1H0n7J8Tdq6orx)IKz7^!PPJfm95_;!k z<@S^O3Rk`k>e)448ae-VnJ+$R?Hezid~=z})llv^&Od;iGt-v|m%6$j!M*18d227; z`r|iesoSU7`GKsrKY#6OrJe6}XHkc4n?9?t^;`=p+5cTulc9GQQ!p1 z;Vm#O8ztA1GpBJLPV>IvmYFw0d*f0Bg@A8S_lDZ@8*QJ~#eOWeh0RU=dQKbq7=quBUcO*DzUGRhVwSfklI7q=PO`bfTFv(@^!b=qQt9B06sOMa zw7f_ zzGdbE`P)|)T>D@?U6&ty>g7isG<%icR&ew7DwH=9=K_)3iF@lI7yHj87$;MqS*~7a za(SlLw}P75&gP%WmJ`)Y)8GY8v~ zm0VBg&Hjm8shwX7Nb<>Y*ydf@i_E-DJDJA;dP?w5?g~ZI#YA)4n&|n1KY!;d_%r?Z z*7v!7qXX}}HTdEFqqcHb;J_$BA zt`#z0QrCgw`$x~5zv~ZMTywT{;k@nJbz{-hH{UkOX>zO40buXn7I>a$^hdm#`11PG z^{=A|@4|oMJuYk6@l6k37m41>cmeU`PF`H}@D#gFxo60yyWgD7A}`ky7oWAhNCe@S zyAwG9&c}UjI8PG`nC0pTlP2!xy`qMetijo%P!s>&f9A2FVT8Tu(m`x(gPVCn+r#ol z>kYaXZ)N9u({DbV#s6|VFN2T%=gm+5`0>p@eD=rBZsrU1@~J0xhs&&|PD}KT7rx8$ z<@e^JWWW7&3H>7 z%ha>w(=ylQi|~TzC5y}SVOsVhppD+IO;rWjN{?l@L7ZnD)*W~r)r+(t!QiOD$cLgnR~Y$npsD0aINWQe|fZqHT=cHZ|6b`pL(6{`+)am zHg}t@IlS?2x?c{k52tzayN@9WytvDI-;?;ma}Tk;t!N$I`hFRO{SVv7n`uk_bahtW zyqeNSkMD%xf4uSG@Av&eb@D!!Fk+v(uf6ubTaEAgh{4?%^-XdI`T2vpH@v)XKIDgc zGjliK{EhUYk?(tvdS_q&1Zbk{|Ue;MUajPyc++OP+7M7s9~YJzbkm%-wMI z>DybA&F7pZNE^lFuf1Vz=krecOk`AlGxYcR$Gjp6x2Hu*)DIm`vgu`VjrM-{%q1!_3UXz^Jp>A@7E8A z&gk3u$d%tOL4P=&zqTJv60(zgTJ_-*|o@;vvGvm)4v-}&^%gZw--J6R8&sB2m?V5_d zT`zFSy~@o=#`OfTHi28y{QI#FueAeHBdz z`euqCcgJ(Ao?m->=Q}?a=;@~4@ci!DH{V@*zCN?blM963U3>iayL__PsoKwC(qElG)Z-PAU$-izC`KM1cL_L@A^aCe?{?hMx>{mRV ze>io?c&v9}rPo)GeSljAeJELH{!&B^^xV(n z>1o^ZpcdTy_uNx_{>Wz^t~uW@gmVKJ&yDh|Dt~SreR9uFj=E+4k9>Y1KO}HIGdBiT z?Wh0C32S-7Q_hRz7oY#`|E#}@^l9+zmv<`qH{4VB8!R?|(M!ndC(rLM1BbAHyc6BX z{M_{2+WQB+rSnAMJhlFn=DqL!Nff&Nfm{@BZ}K!dZ!z~>ohIhp=JP~YIyKK=v#cB8 zy3S4H*CayU(ZenBg#YoWChl_xihBO|?mRVgc6rX0^oeWd)-xvOIj;cDhaQQaFHC>K zVd!a%#jL-EMro@@x?>BU_XXcboe$?}M8R$kcfM)(mA~7$^>vu%Kxe}{p2oWPc1nGm zb(8u$Z@+frPS)orvl5}Y@!vmPf0(bo(3p?5f9AtED=#Yp7ePOrDf+!+@rlb7E4W=cn;ze?7b2l<7khJSwa7q{WYIq=>b?;t;hoOc-S z&ea4A_J=WiE=d8BFV4*S;k4R5>a@>r3Boxi}lOY9}w zv*n5Fc_x2s^VaQo@|ne6#!ns1(=W*_$;Hnynim4|m0j1oy2}@Ec`L*BSI;?9KjwWc zUtrexyg!qS%hQ(|Yo8Zy7oYepjx6+pWj3cRms_gKot#eWOTRwuJzajgY?--r`qAb= zx_IEu*Xt!tb3<8xZ=7sevhMu*3pq|=Km5w?ELN`<#xDa$d5M+}3@xL_#pV`qW6pZc z-=S;Tp7^zsB{Lt$`11bzc=)q)^4R;1`4?&4)XDvy*T)i}`NMqg!SWF6!EUmB>a|Su zM6sXvEpje9SmF>Y&&8I^op}a%nY-OD-CYoQuXPDwu|9t65%!!gS6ZxedG&FcTOwa* zn;LI*EQvg=pD#C9%X$L)B$Xe3S;5{hU0^qm{N|^H^H=w6+xAw@w~xKX%WeJJ$6qCw z?jQB($p`-J^R5rPp?Ej$WNx3u`LJek^GVGFUp%~R?|tg$p1AaU<{zB9|KR%}?l*+w z3Bvcw^QnAeNXPThX8F(Nhu#!$?)!o^f78oo{+yTiR-w5R zAitcQvh4=i^PzL6{_vh}_io2d-G6=8;Px80Up35gw-4q--L>EMpR7+KFa2^xpo8D_ zV=3-N`h3lUYb@t}r5`QbMy>_$hMCJZI(g&PmrIo2HCmXT+{zCGcQ8-?&~-GQH`ew# z_EmaYoCnn0I*RmyG4FTye6^oZVZ*Iun+tN1p68vVKXI@A>HD5quN)Gm!R;-bHJBfT zbK0z8`I>>AeC{~w*67)zK7x0I&?(KvJuy4?7EP>YV&`6GyJR810+UtTPRPD{`a_>_ z&ijMEzvVjvoVa{9s?Og%_pO)9_urCDCm-GawjOd)eR;RDiQG3g`utJpVH(TzumANw=UR|e@Xbt?V4k?2KlRt>+WjZ_S(`m)9~w{>gkd zuTyX{>Ki(@{&EHe_{;;;}S?1X{Ly^Ccx$@6NN9o9Y-F44Zb82?R zbCfPJSvAi`XZChVK6jzytmXRepPt`#PCTRBR8J#SU!O)Ff0!QuyziQh2M@fxcbZrP zPKmInJtZ`G8hD|&3ZFf_UsGq#qt;X&M0*{?c6Dq{Fl9PN4zKD_jt+e;2p7t$MvZpYhGiEZLv?z_A4>2VA4{aj;w zWBHzg_s;*4uKmVy>-p%+yQ^YheYrmOX4_!i?6|jli~5%B143Wk&tdS1Rd*1cYA&z& zhvco~JT=@P5nUm_vm_6`U#^nLNrMZ5w`W`Xc0Tu^F7JAaE%@KfQx{j&ZNIKDBJW6l z=^}$C-n%(N_Q}uY{S(LBQ+PMM^VG-xJ{N$VC4FuCov$}Y-?4IQ=qvK;54V}O*Wxo@ zeY7lao9Y6$wX@0dl{ibEFT`2et8*uZA2V>e!j}SW#n+vlU55QT-iA@TdH3Fz zHy`D1GnOV;4(2Dn`_m)oIoa|2>BNtd@LfFf>euCh*X9Lpf_xX@NAo>ha~YSa-d32%J83!f;majvn3ErCd|IxVn#*%<=nPwacDg58=8Tyq zUUOf3Lvx9}0WtqBtG1kheQ$j}GM{98&yzi;=RAx&eb1@(l;z+qVXrw^2A;evQO-jw z;qBI({cPM=I6X1E*3+3EuNM;MUi@s<(fhS2x4>VU$}wMVdS_fthRhXdXQ}JUucVx% zdR^XGVm%RbmRgtS>>2O0^@TI_Pab^lslplf^G9ccn|Y~z|K8cp(k*YMyMH)`xlzo6 z)>*DMl+W+wVphlDY{o_G>oaSQj?1a)F_h;u>o^amr_m>QCVLwG#&gLJ?tkSpN3KI% zneHfbMc|wf_cvkGCsv<&zA-Mn(c?|#JY=u8x&QwBUT$%YOCxW8JiXV@X}jfy`L6`# z5|>;<=ui5que}EFA&Y6{`om=~_dM(1h7VIYy;j&mua)v;b^QUHC3*j$cS<&vKW{(C zk~a|Zy*j^hE+`tGis#Sd*C8L>_RMC!hI1{-4Q;!0e%d>Y@^{i(^YU4do_c*p>R<0Y z$#2%V-LFVT=dHx)b@lcwc&CEiI8Ng~JawLMWxJm5=bo?SIOXOf&Ko)B9d0r3L!a3VA$zLt_xPKD!+a7O$vWlJ)e)i>C zGjr1X?R4JcdI!26-gw8v)10+`N8X!Ra~b4mEoRC3y#AEDyREW!(7d;s6D0rQ?_j;z z&fWI)hij_eY2abUyF^dijeO_3=bpaTk980KllQLoecZf{^j?-GkDCu4%|qUA6y+h# zv=blC{*J0Msoa$RF}YLaayfR-IOPUhLbv9RedOk@H!%O?LjGJl;DcYCbDQ&EKOd{J zYWMGK74OKxb~=jr`}N4(M9%^?-d=NccyTF6Q>U&wzWmT>b07HxP#%~&a>2{{{W`af zZ~Ac5MWTNvo%F2;c`4{opyQmqorm%c=P-Nq;1$pPr(ch~PMo^RhgF(eA8Gov0&{Ed zcGmLy6NQ}qy8B_JX0zr4Kf7Tx;YPYaVlD4^H*tDM>G<++t~d0~rnHvLI$v71ceIUT$z=dSzsq~PZg#7s>v!*Ukb-Rx z^!As$WdnITdu#p4mkoD+;3LO-E%5JC*hvA8z#y17;Hxa%*WU)2ui5zQNzqQ8osHIoSzbKd`#fjqb7nH{ zvEExs0=nKeNjBGW-Z2lU{*Kbc+1NXw-VuBFY%RIJl=k^>uNTVmvN1nzU^ToqiS0up z*Lp=ppI-C_8Q05*`~1h#D_8q?$N74`2KzC?eMzwm+$6VnZtY(@{I};k2;aPWE&Ue9Vv9E*K;!hls2ale5 zsW*=YTRu0BZIHW-ZQzyGJZ^aEnos+#%j3=So^swY4z)k$`K0KU^DIf6C*50$gDu`p zOkG~~{8zq&W-HH)W;ti;dp1^Qze4IhGS_G1^}u`i9N^!B&&~Ft=IIYx`Qugh_j879 zIaO`?-@m`M{F3NJZtm?oh!?Sr`T>Wf%JQ#|v9scsx@v;Y`i&?bc&z*8pFWz4BwKa% zhON7$dr#h&T;9EX*HljU%^SV>9f4mddwXW9@@)G1cUQe*=94e3UwD4s<7VCkz5d@W z)6ehT_sOb!EI9}HVs5Sj&b#X$<`2xDZQm%n1iAD3?$*<}V&+}b{S}Fg$)A^dnRfyI z21up0_eb8vg5T3f&xGfiQV*^94By@7u5-WWY=!j}>_u#TEcF8MkG_KbIHE8B%fM5L;69NZ_dYl z!S7+7H=jYAMREc7o4F6}<-M!?#KpU3yg~VnxtwXc?|0*Q`O__5!f+uoZ`bCjaK3`7 ze*klVQCIjZo0rgUC4CBGx!vXCPiN@Q9?s8gSmv)TvhyuO^EY>qb{_3R4}q7t#}_%eJ(!nS7yP{|y%<{W0ZuEnbUXJ67fdJb zxhJ`pT3Ozjn9lOSfD5<>g?zj{=RkVnyqNvyexAVPjknwjpk7;B3N~TrW}17l?l+MZF>7b5HIi{r&ijqYK2DiTq;A#oYGW zEf?9->bh6Gm{}M1GC!v)E^r$|?qM%x7KXR-%gNm{tPe=#A?ni~zW1L?G8{R--{YCy z4?bAp9^i*-cb@)m?a5bmpZ;+3haaxJesOqx_4DhiA78()|M~Tcmx-6mPp_|DO>F<_ z^^5Nw&Fjc%p@vy!Lb82quMrELISlS|X6fzCU zrD~G3l064h&CbeYUn^sR6`5$Cgx6Fi#Lye{K*LDGqT!MeTL2pNjw^HW(@hJLfl;La zsy1TdEPD)w+Hj-|t`OOP%wf@-N*fdPF@^%zk64MYv_&OidfQEmEe_ZPz^n=bfZ^n2 z*1zn->Yz(%e@qSIi}t8yxg8rcs_s$W5X|RkMLX@d)qZpv+1BVwJw0x zhd`yRQ*A;mM*CThFj&Q5kE#X?m58l@xNdgAPu~Q(V(iz~XhWw_M8mtRAr{*9rce)W z+{oB4!naC*VZ`F;n5hIO;g>0kHliuBFG4qoO+g=KC6QKOh!!s06sep`?E3+$s=4OD zY!})PWvsR#sJ>rDGEfDxykIGAPaNp=$LZz}_wiv$6% zTvLRx%oZYfv$W+8Q#Q!NGt5*SV1%bi$p(hmCNs72nF8y!Xfuccu9AY{njFii-^XI= z?c0syk291ZW&!H5!=CHJp;G|t5HBz{$M?he&70FhzC_WC0_|>>+Qr-cwZwXa- z%!PG|gPPcnR_<7IAVtY`Oj|Z$lBu-EXb&^9r^PoU4{WwU``*p6VKc-guwY0mD%i^r zCZ9DQcP|te!vX1%l1k{dg+iH({MMP0X|7ddvLs3bHf%l8Y7MDiRxWQ#)3OlLaVEM% zjvROGRe`t;#xja5=3ta(VZKsoMB3+>HYOdBTe} zYL1!()kGJ7Djd@KeYw;`pc;^`rgj7rF18fz<0giNjf17?LYO{B15Ln(Whi3%pwz@*YR*mvk0?^(w%qY8H>PWx-`gN&+i4Jl7`HIR%SrGLF;O426RIT4RVs zeKRl^`Kv8Rvr}?fPQF=zG^L6~n;>gGJsDIcMD^HZI1aT8-pU+bTlPxUM|hD8CJnTQ z36dAUxAnuNc3iw%=)^!Tu(L8{8LHF@3dpW7BEu#DT4HtzYdw-SNsGkvc5{J|+_!Ij z+YkpxZ3Lz!l4hap30RVru{aq1LONBM>g+Hi`SVoKZc73@R0_)-ssU~5hMgTs0@MPa zu^fzHE$-(i!0cu{7;;=*t%rGhbe)pi^f2SZ)5Z*=jm2hRb-)+B`kK8=IYC6zFeFsKjN!frTI%h8z( z;oxm!ap7qd&fLyBU>0Z?H5$^onfmYw%u=-sqivWZZHu8~@-ZPku8Y({RBjmnO3t;d zg9$7cGp&2UY@su?o3*lEhp}>)so0-xJ|zBMMf{Cyj&PBQ@nU68%z z_9x5yrBZ)v)hI9w2H@j(ZMk-*<8az`8D3~Jg=JYcbFAU5!LCGaXlp*&sL7LoCpnCS z7dK|>ua0{}Bn9?Ns9pZR29dI|aHn#&EL2QDlaU;D8Zu!a31(K_uo$q4RpTs~eAzbb zrD?qmdmI1}zzb?IC1a>%T?f3TQ4j#C1tZA^fo7&jynql4@e7TPu1LjXWvETYA8g&BA^dgUZX$UfRD z;}tGA2wN#sww?wbwMdKud4-3C-7pOxg`A+XX{p+#+BDUZHiK9c>}qH92=ow;;c3be z@C0c?YJZH0APtcM&z7K==^;~wRXLn%TOvx>r=heW#)VXK^jfKS7L!;6fOo3{q&70Z zs@e<FfuXT!~1fE0FngYWf0K=mbBrafk9Ha?c4#$ zmQ*{%7HvR*DpsZ^>p2ux%*o@0R3jD;5FmmqoqY=rlTmB^WTqAg=4=Jy$!!f0Ye2-{ zOykuPF-b$Q6~i^h73OM4gORkE?ZOT?$X&K@{+NA)G1H@Up{-GKctI5a$=CytCu6S$ z~3#hW5e7Xx&_BD`*WO@}O$0a}AA&*sA1VOkl?)7BE+^w(!nk zBspudSjS1?IJE!*;H5a@oIGK{>#8QP{Su;%g3EN~1BQCb)8g9(rLFt*G(lwBc& zTq4}GU+iWY`j=#vVhBT|k$60Kd z<>}|uC`^U3L-rVM&{+DGv$i=`Trv zTEbf`({E~XH}dJG*6fdoqt_`lBo!mwPv3`etX7qH_9>@V0ef!tGc4FF!m7yUU>mHh zT)mn(E3A@sU8A6CU(yQ57=~gPs!?kGcEgEntf!OBlUWRlHep-sqcdkS)St@gjk(C1 zYTu^1SyDHyIwL75ri9&omtj_Gk`Y3=HL(++S*;iZZ9N19H$cw@FgI`InSZ`bM{BYJs}!j5UJOb8p=1SQP-{_=6(&jtAaCUar~u@F zHGoqLzZ*SEQk6}+4aE*G3e?-Miz}l>H(X+b=e(F^YK18fQ?uL{J46GxZl7$u}5tpyZ_8Xtd*?AUH7!W(lj&DE1Ozw@&g~ zm8rEbBn)8yqtwRqtro@<@ZPM)G1F4~PEGdWPTO;4_BgXxW~s4+$PmCrM(cRg%HtJC z+A9QObnwaS&b2|cr9T^L-M}4|l}XZYw8JhhBS1}crot$X^e{5=h5&rq*a9$Ha&iFn zOW$g+6k%d+7pa*pL$pqn1vvQjip9d%OY%faqxLxMO(DT)3Xh@vNn2U7<=PM`O(FVu zT$}xAOi1bpm(`L1vo&K$Y;#kHo>}=GX$}l`lR0TK2wf$WCTci%plW z(6-f+Bo+q@jJ7?xW&~Pk(|89HB?pM7nTi-g@ZFaa524)1L6waA5LC+LBqro@{tFg z8%kEI76p*U89E}f@}|Q7rZyH6BbMUh2*8QSn-bWDQT^gcPxT=KjKs>zh%s<8{Va~R zjs^QJ_-ZO1p_Q4dK|~dsbqf(6GEK5_SlI!H*_YRnU}H#zArfU(81A=oV5wvFm^rCV!am3Q}v2DEbEUa>pG@S+F1w1tNl!9 z-EhN=kCbtP5nxKtWy8ppsTqc?wU(`g7Qm(fg>Fw`fnoagk9q~i#X)^w45_Jc7Rlq3 zX|#HLAd<8fQ-axz4;pIqYL8Z)CzxS7X)iWuGd}e|FZ8h$Oc~Np6edPWW_YQlr1Ik| zR5MJ83|jsqxskE$+qXFr#Fzpa#4@ZBs994AY{%KRKl^UhrW(yFQLAKDC{u<%CUc?P zLH2k}+d#$DgH}dQ9;Qi*;>m>9GKkCDKa*GE=`ah!!5o4va0+dEc*lD;Q7PaQbO8pG zmC%!T0E;#&=(@FN@$m4KYa&1G7AMdmB)b6*_h3dQ#Nt-a}?vVrDnN~^ZjDoe;BqJG* zvl!wU5=>P(5FE!DjowgNvYT3fTE{jwn&2hFIrnQqhDxB^ ztlIq)_E>D%;o_x?#o6P9rcoKQLloG4yiyvCm>663i$%g<0QQ(iDLnv4u9>;5sjQfG zNt#n!?;To9EW4$}F3&f80!cAdfg2-U zhGZCGPJqR#05pl0*cgQj2_#w>cNNNq2l&Mv=lp?%$ZFuFZLi+6Jp>1%nuW2=Fjg>9 zHN@N6(Fhe)<&ySl?Rio=!x~++5t$=1{YAS&nceu+lPNNXff*`6M64Uf`eQ}Dy{auC zZH2|x>nzflwmF-*vXfNMO&;|$u{e+!e;FQ^){}w9U=!m3`E{H6& zA*HU^Sx}a&+kU9AXtDBQg)N_b^0in)no$U24_uPovBc&vrmoPLv(;)g09~Hg zEsNH7vnfI9c-wD2W+l>za{Ka}wABndL?ov^bjLv(Hh49S8UkBM!VQ=Z=uD=!EJHoO zQ`!&MP2|-A3%^Z1eZxVoH^{`ORhmAmhXAi3L(2Gr!ON3?YBdZ6W(#Y1ZZ#v&M;>d5`$#cTtSI&i&fploT;e( zGX1~^bST*>66qVRzDx_Sv>QWHqnhNbScW4Liv5^wi6rax09Hk8c{LydId)BToswC! zk*YUsf1FD0bY>+u-AyrcEgND7lYzGwFf|2c#gf4C6CBO~& z(xIr5p`h}Rw&^lKlK_Il>#Ltvq=4#BNhWXG&zg74X6!>8W>xEkp;^69i>EAjNq9p( zH9b1p-vy zfc17DzcHEu;G=fcmf9jKfizSozgrJbInT9&Q;$n$D#;sGvdLr2y|5oQq5EmTlZ=2o zfe~A3#Wt}0P}PdU!))+sbG)s_bQ5_XT(sfl7-#A*NyC}VkTXLY7Q+cr*j3?vdI%wT zdhN&T;Im(}8C2XB)r?rs;+lB*`h|^~;}AjGRzpFy#U}Z~28atU`gyTGG~_dC}Fw6E3X_Q z@HWH%Y*^%Os`!?%orEo5{mNQ^Qb^9QM}0Zch-lmJ&KfApPzSmnl4Q7Hg+&>&h877x zjMIM84nj)3{lrU`eAKljZ0Z^3$q}(arjQblRE18`o~`5B06;TV4s18WlQ7aDTI7Mo zSN6l30H(`6$+Sp#Y{f*Ab&2;l8vE(bRM&6zS3j-In9aSZ;x?q_%w4P)+EY@q$%AQ2 ziOjUF*Uo0yAmKUC{b2xI7#*v6HH2oX{X({z6uMe#6N+sZL1%4xs3Hc?e5u=j463!c zIFPa5YDkg*Seg_N z5X+BD8c?#zMACY+V|gu!w>1y1F<$mp#>78{f+w?~Kx(M0Mhl<^W;+bt8i3Whk~ULJ z^-%G;X|t(gVyUN8JsuSsA{y#S27^n<7_F_8LxQ2U7poN?GtAUvQb<+iq>a61WwD6u zSuwOnQRDRlyqTM&4mCrwkJv6=OPJw!&8)3LW;g9XiA~BLA_W|@QiisSM%6&to2sX6 zI3&p{1TcG;0Gnht7!Fz@pZhgqIMbur`Uo_?3(=Jpf6hKgZjNJDa{d;g*F2G*t;{eiwq_Xc7zMl3E?RcX z!bR`LIEX<3NtihH@ZgYHi?X=@f7 z=@LWApffe>c$K7MY+}fYwM1TWHu*RJ&i$IG<1xOFs>Fht4|$t_Eg2h@AwA|$<}@nBzW#ue!O6=2w3RxTC5Zq@F`4Ssu_PV>&8ww~N1hhsNm~}Q zYcg}zN(T`eNe(j0jba-{Tqx>8i7DHZB;X0gP@oq7Y$-P!d=&dQ2A2gXj*Pe(w0V@* z98xi)WY=w~a7D@NY;8^^4RlFV9fy#fZNO*RxInR#U8OQ6)X48=Z^|YQ{3_r$w&!vf z;}`(Gi(D{(0CF6M^FrI)$fOL^9?SHqEHbFc(~!5+_PA_(aM>xrZjyq=W?xQK$x*dr z?Pu1!j3j~7Qxe!aV5T^0i%nug0bH2aGOR1H7(zm|?bZs|VSG=YX-|2MH{+U<9i>c+ zK$7&-{5;UE!7rn&WT>++L$@qAybL@y^t3qU;(iLVmpo~=xf&dIF~xg%`49|OWR%Tz zVThPU@hZe)!A6*M2Q;(-OZX{V;%35e|t;lw~2kzjhtdhFI^KMbseU1wg8*%qT3 zDMTT7*A)-wTw3|_8rQL??7 z<6^e#rf68?LD~m^SCtrs6{`G6&OQL;mf?KOWz!HAs?~s)K>h^*@yjV2jZov&io&WQ zm8sY)OsF~}j1BpI@Ji0LIgQ_A_F3)0#lCEVEXTk+dW> znSn(~iJ?FSFPL&}CeLoF#5S{HLe@;Mmz?Jgu{IR(u@Ws!?A8vZJ}dNY1cMK+SwnhCbV(aq9dNdr zjM?^GJE_4A1W~_QtN?j=YsjKT$=G1VVw3>7)WdMqLbLGLqBMIY`;pkRI}s2@*|tbS z>{y`YfM1L-Gzh@VQUNf*kYr%|2?$gba$pPKcmmA*8b)YbT_|N#4Q(S|nW%CGJl?xV z*^e!=VOLTIFs6Vx9xFLIk}|8gS@ZoM#@%+ifCy+9YYRoVfOXk!&>d#TB3|a~DM@n4 zlK|enX7rq_C^=nk_IZN(HWNHtwyZE=80eyn5)3`U`H05XOo#pK2K zFSHe#E4p-WO|~=gwJbRTk<=okdQt_jY9t^7(0~<^Lz2RC?ZqG*^lnrM?8XpJW86M& ztOpr^`fj-J7CbjMJpe4T`ZZiA~$cZ z)|7niThtqj)6}4NIeJX+G(_1`qJeIdQZHEtG6M^Mzc#8|TyyqS1-Q^2jVq-3E+ZeW zW}&znbSlL^4zCPz_I0VyEEAQSWU6Ea8JL!=pYrCZU`yX7q}KgpU&jjQY*`q#rZ_=c z8R~L%B^EKA6i?u=xD3qDHtw$k`_W$PZ0qCjD7NXwR;TvttLXx8U}&9jNzxFr`_t-d z0BJymX&VNc4qH;~)EJvkkGe!+83H4z*l_X7mZrO;-K*kY{_4UmISr%-Q}(;zC&Uvs zz>D@VzT#kf1ubZS{BC$_MG|REs2>^la)pFZ>|m=EQ_1U1q3#X09`g4+szK=3Hm#(d zo?*3NC}DgV_F@v-q{p@6jC z4$ASg?D2%Qc>6j7Ag_v68t8Myk!c?!=?REZCRWa1FjB!^)U(5^yLO2ojs*M!)L_4Mr@ zsTrrnoDI5eW-75M_1JgQt3YRZwL%4x5#VWOoY@ADy{a0$(1tM4{ZyuDM0IL!s_e&+ zkr_ZF;W@D1jkEoLY3LP45llT1zaspm=D)*YHx z(}OA+;yQyFw&h5}UuYY^wZDnX*vu)tv3jP{L9%3*u_)rOw3I`fov%{ zt-uf(yI^isf~#L9=~g2+3=zEY0bH?VXj8%y?KvV@c03o_3Lp>xA+iZn?k020RF+GU zmHjFvMkLv->!DVmjlWe7Aj}vDDM1K;=i;_zor@sGvQ7QAH#M=cP>f7S#R~1Y!3(w< z`Qwz&Y%=l%<2-3&G-r#KDQ>}dmrn;W#S~_*9y>9!I%8M)XvdJ+A4ku=k^)s61D|UL zcSwCG7_>Mt5QOawC)xFklB7juw4TOXhNBwx5*jLmF|;bpUuaipH}d=wW9>8Y^Y;J05rX3N@fmWhzzmN zW6mBaFzs%pfSDsOU?jmK*SA`G8MV2U6;v-kC`wuxXxq$&QKJk^Cb5n0!?2SCqhXdI z8~4*jeA63wBhoB*En{1wpnD!@DczRADL2XII3|r!b_vIYnC?Hxwf(t zLnF0Sbrvvf30SdE92nw-M<_Q61VyUl#&B}tgb#Un-| z>onyF3=y8Rb)(CwDpL#!Hw*jXxKbZqQ;h@2(zQ{0!n37~-M|b-pu*woR`;9sVw{E! zkP4=LF@#QDa+E?*mykn|CT9JEhZI{v$!@^bya2OEtlSjN-?vtzN_`w?7j~8_I5qZQ zGNuGFNHOZqCT4{#MlH{)$$;%9?o{=x=(%?4k=jp-30}S?kZsBqn{9Nw2WeYX+>rd3W&x)IOvE-_@Q>}ii)x}TC@cGG|<4B`^XueL_p^c0k9F$k() zEQjb2OjxGf7spu%Ri=h|5o1>m*lk_vT0EY0q5-`@=7B^#7NpR!aLw3PUXnJAb|8K= zi!86u!U{A%Z%VRL$R8(&1tL13i9oM>MoU4O@B%dP2b@$R9=kSH3SSv z3dVArsg#7*2MYPdl851;C(l`}pu%8yoXxDvrj5EzvtPxcU38O*53v&0HnT6MA-u02u` z4usl%YAg=YE3*RVS`-5lv+XmRDaqr+G|c`u;4W`h6u^{a=M3IvnERGlsEk>|cpUkf zkZCLOh2f=FLzOX7=cKA|HzyyS&B9c(vB%vP}Az+R9ag-wKI7gi*cFS z&y<+ztVEKAU`V?DlQ}u#iA0%qalG8Oq;gm?&Av^>LTO9B8B=2=8pG1H&7P-0)_V4k z3TfS8Y{<pfT8n&uxum zDFQ7UTucD%$H9+@YvKyg;kA8+m7HOyZH@&1f3xfnUcClyI8;kv9={z|tzc(DvHir6 zx0#(5v#%R2c{0^iQEPb#Qyrc~!z?BKwA7#y3MCJ7ywk_1=Fp-b4=Rahf@lDkRWRn3 zV{Dco`34o9P8J_-2a?T`obu%mEZX#JSO`FfcS{oqv}mtaQv%c&A?3&AmBm;AS)0OS zEJHWeCE&OFOMD3ATiV*%{9 zq$wGm?0Hf?RkfSFRk4@c&vvLb0a@tDrub!sTqm#qcx}@JG3$}3EY7Bu4?OXQ6HIN|bDt`u(!jL9G(9W@mD&)C8dESzG&Ha< z);)%?9%R8iG^&7^?mCH2+6ok7r;1l|^ah<+fOIU&pO#L^`4HwXg|7zR<=F*KGAlIx z!bWJ*z9LzHQHn4$%WX)F{!B^M5JvTqGfW;=8A(pn0?<8jdr5#6%E0rQHRl&mn;44V zWR64RK#1A5hitotVWf@MUM;%mmGu-d1Oxvng-PP1x`E9`o1LvW_1of@*1g$ro#mn= z9`-09oqd*+25Kctw5m!EnHu5Lw@h2WkmLoD>?-NrYD>b{4l8Cu zA|HuWTd}!{ZS{P}^KOqz2S|0PCmT;F-u6}TXVk_%O+4m zn-GvZj3J&7N!A1y?~?2uqfIFeNFq^g4=J;n4u*rV4jc@&kk9d6grWJG)r%7Lky+^I zl^qut3PjD2$7O?O&NdDb1GB{?Hk`VW+_V>)d|_k|bc%x(SUPT$9fpMrB5grRmc_7Q zY5@iu9{!Z$AqhZ21LxYCQa}(k2sMfwCs1OFIgmHo3@f`~H#IWJtKta{)!kW%Op{x! z^4`viOW&xu#$}IMMvYeVhfBO)59D!;>yoW50|uLB94N*j!vT#p zrvm`1Eoqx_bOFOKp>Tr6DW64+6%2%J(Kem|mKS^&j^7mTPHV+@^dJG`(HX)xz_qAp z&2d~?G;CFcL2eeal95}EcVvboyt+|ixLa;Ai7|FeJ|3^HRm@&u;K zXtx7m7GDVssu*^&=^lfYl*_{lAeFCEXWGLOVRpo*5%EY5+G?X9fCVX-qaZKI_Y4)L zWQNJ(VR{ZzJmE35k|zj2-{wTS5gY1wtjyF?z500;V~ocHc6i$aW}|1Qs_Vqcko5MI z@^&K62RU1`)nHd_0}^wvA2EoR6HNDUNrnJe`~E3$hLEa8;0nxU*nN{EAsK?SMYt|Z ztG7X0oK2u;`F2bXzDB!;=Tff>;RTR64D9&&iZc$(s?wOL-S98kct!MpKnIkX%FqT- zWRnp+SC%>Pln=hBNvUGWkJSiTZvOX@Cw+f3`1ijQ^4pn zJ(&zq*^hAagMccrJ4)v&}Q5!VIk;E$qpj-n}B_ASSi>yU?NiZ1!PWaty zR9khJ68rQ$mKV^hOuQ3QiJ}=4RmEtjhdp~p)G%TJ0dCY5KU0z^!DdSSc&067PG$EA zfb2`Hp>Yt4Dyu#084@Efk{MbXGRnc&QfMQ_+(<0zFLRi_LBp=VzH2b5v_p3sy6G&L zfrVE*`xJsrA;uc*KAvDAGmBAqnN2&>HBNiPLc!1!B%|0ev~NngxJ(~lv;K{nPwQ%d zl`FKhP!AO;zK*a26=uglxeha|3AID77=w1mckTM)p8@Uo2o-w){1q{ob z+RIG5K&^5&TzqgUsYYxosTvxFDIVm0reu)77-Fb(0ZjJ-Q#Qe|swwa7b;q z5LHG1V{If6X{AR5OyR_-HLSb<%$h+e6ezTvt17s{Ys0HQ_2O1)8gxIKpz*9hhzy54 z`yyq?m^#jWn8Sb#Ip)JyF)L%W!%~VlB*_BRtOLeJiv^PF@aomXSjKUBrKC`aHL#!C zM4DDY!X7hlor$B3x;5y;rj;Qw+|62vr#L=_F)$kqYw&6$8&Fa{@=;Q5Jq*oa*e`67 zna!=tD#@Dbf(TeKN6C~}#wM1r?Pq9@qDmxfTBpG%jG+?2ZiZYM@?jR?Nm~{XYIBfIEx|;3$E%3A3}F;p(ays?-_Swg#`3Wb#eg zi#3W$+<>i<@VTP_T`8Eh1Zq;LC$aqSW&xNO>K9Cy#cOz6U@t0QIGx1w%%*AhleY12 zrD+IO=*bA^6$)(wkYVL8hUNyJ3=M@!XjrPrFI|>_75)I!9?!LRki#Z;s~rwWU4GYDQTXe!`c8n%rN$vHZ*J4 zs@%w>dc&ba#)M4QM_`k*#|XgO3`5lJH=`3=aVdB;Jep~_)e;7=U#pimN~+AU6J&{FC#&iZFBxsjSe3Rzf>D=z*xFkAf8ZrTf8Au3bwn|4yz$5fAB zBrTT=9MT?(>K#W$@yte2UJ^-@0-JJEJe2`JV6y=7CvD?bGnU#-TgNHW7PK`GRKu(_ z>*YQRtuKaAn5-@4{f z#IW02?E%3hAgl}k7XWH>GW(^iBuyFG7dbc8s5StY@+@boWb(&t8oRk^E;1-)8T6gi zlgH9E7&obJ@;FnwSxFcqGWHzf5f4>(ER`x#RJW!VoO-y?P!_0STg%i4N+h0cGOU&3 zAg8BvR=f6Mv^FKPeh~)Vw9}b6S*Zan2(CG>!mp;eGRlCp-Tews#Tj;Pb~D>9#b~FK zD_z-SUY={CW*@pBL+t_~5?FiznHJkCZW4Zcr@vo@r2g8&kE;pgL|iK0XBdpx>d6;?6WE&DciGRilSNt^ zPm&4SekAeOYPxnSk>kA^oW7yUA{G#v{z5@-RxhL+441-~E7F2tgc&6zVLMJ0_g%;q z!k@I^%#BiN4l`6KLzRz0RVu6M9GWg;tQ&G^Re>wnF0s{_S`H*F$%VE8dZz6=Eu$ye zaJ(zP%Ym&hVm%g0V7fe=Diw>s7^dk{8=7IR&1B87kEB#42)AID0CiZfBf^Wc07!s2 z7E2Xv_}RmxKLEp;Fcgp0nKmU8zf2{xp%{*yfF4!(!7L7}iYbn1&#Gitms1#aGFHnF z;aE)Y>W#kfS_;{@MRW}eLv3#g5n(-TUDgMHfR9m4_w>3*rZ^sk*wRKDz=m@$^P~mi zD5bLA^|~L+idDAYm$5%$xJYIX*4rr(L3x$bB``yV$B`GmsjUE!X>)Cn1IgBmWQ-ev z5x@v$dpU<6vKHl8(Vr>cS?c%`)Pa5b1dw-ILrN+82{vdnuvbGsev?tj$29li80swb zF!W}THk9axo0{f8IcI7yS341wuJ#1Vu7G4ZRF9<;Ba`I?knB2}vY7O2ZF)D$BR{m^ z>DrtN#|widW^0#Ae3*K|vqUkcGcaDMR=e`34Q=h!5bYSs9%k}c8{5`&Ks+KHt_%hA z_DRO|x-HA#=;&2{C@`v>AQ>ffpoGO5I=p^i8{*+a?%QpU}a{ zKM!&@g?!9vMXRvfp%!Oi4idV!E<&&myMpBRLru@7-Yj7n8tU@uk{%iRLoiWdcgh1R zEq_bXsBy_+M}br^8GD7#Db}}Z}J7DjomCg8Zuyl z3e-mp5$?iB@-h55-dO>~vJfqx(Lm-fNxbc*eN1x!GhN@a^5i3IR#L`LVHas_DTJGL zdfJaX6B@D%3c8s(&MX%3F8dQ*smas?fYqutnk!%TyDp8%4i(Va+!SGeK5u2%V z?Rc3c(js>%Q9}b+z0rAcvtx~N_8Y+>3 zkkaI0ko`om0W9g)+0$cHIi0u zyAjO-#KaT^W|5g2eD*dNh4Pvvp%Y1gZPO0OK&mUIryfzfVg>t|!m>-8Wc{&-(H>xA z5)V}Z88HC7Lj3lU0{Pt5u(auo0+DH3dm1{hrDnB-B?7xp=RmF+=kbe|V~eC&_^t%1 zMSBhj`P`)Kp;U%H#2BV9rgvlgI4UP?(^4pGl+=)) zB{htm&CvcZ!sh~#YMY<+tHlUQayHE@UR%iVrXA{8x3F}PvCNkISk7LJS#&kTA9i%6 z#QO}RA*o6pTc_Fy6+x%u!E(HDAyu~Ny_zz`FK0180Td6f`mB5xc?vT%zO!fI4Plrv zgP~Ghs@~Ru-WGg{V;l~MJf*|*4O5pxMxv{zqO+WjRm z>NBkgIOr-FqL5$REdKN)Zx*aK8YDc)tUj)`nsyjfGFvmZD1X>RFYf|2a{*TMhG zb{!^Hj^w-o-Fo}CbZ;%BtJ-_2mAnH$lI{6kL`Dvi1Obq`<(V068iCne%Xe*A<={3V zP;q&Z9Q$!ALCTX+!iCpBOtdSK@Ce(L{Mqlg0EV!8ocXPx)8n>~qivN;{;bRfBCm5p zz*lCfxgA}6%#C~g`V)>zCP;$)&^Cv~qP}@UA;XFi4d`F@D3#3iaD8LECLXoB{~|6u z?Z}rg585AdBdP|;c$^rV;Pv-IfDT5FP8MZuPstBSKuO-VWR}M^EAo;x@ueO6GxB|D zpk~#kLB5zc69ac2OQzicbB2Fc`(1e-vDzu|EeZBDw}{ivbcPP7pDK6%y$0I0V06M@ zoE|QiX7X!*)ZRN_CLT6b!)!4Co_=eDafQO^&T)m#4WvrI6HCWM5eJ$J%aQ@O*?P{d zU8AZN?E+82Pg3xjcK)McD4;#p1|jcA;(fH|=BS?C@KNFGo)uo5ce@Zex|rrb9U_gIdqoBokD3^9`Ku?LQz`Lu5n^^pqXY1+|>#eio84kZxe4 zGI{|>wk2${+l{8m!~=d+J7X!!YBSTCUk!MAN8qw0re`MXnr%fRMlJT_-VCbps+ieQ z(%4%j7}ZC+(VfM9whW}1@TT!ZiiJNE4kX78E)Kv1swNf`5P7lQ-a~$AKiPO>XA@)G zm-EzLfn)@mkFclsT^ZV~UP(R}1^z6iaYh0r!AEZ2yUih$8U+&*L+w-}Rrd9u*og10 zRMm(wy;D6BhY*jz-K|83i67b~(59em$EUKlSNloo-yF0x@BV$;l7a6X$E-NIWN?-z zaY^op=b(Sr(uwgX1s~rBHJoaVXBu1tewW?TF_z?}Csw@xbn(Q**5mnVRYq|AVSzT5 z6w=bgon=V+S{p^YW^}~(JL+RZlxCs}Ks6qB#?|P+Th;IpZWMO44wU&eS%=#||Ge6) zQ-68GNRKlCJiywQ-wxbd>QXhyt14gG-^Rk5y{SRJubJ{hTJ~t1B?4ek$$9t47ZVb( zs$obnDoY0E&Ek~vkY)9k5#bHiJVDlifNydBQ{v1d0IJQ&RQ z1(!Blxk3t|UmFVEkxtJVd(sTRioBrmnZ^P5tO+I5ZtaqkAQ3uS>Z7d`J?>Pjs*gdk@7J~aT_;Ql3<1|;YXJd`S&-%@7fpFOaT!y z8Bz{B`~C7n$^7PruMJ=xVVONgIVlUWvZR~ zeaDna70Cq{0QBZ>%Z6ZFL#GKB+z~@?i381T*6TS*x1rtt^)>+Os5{>nVnwp!0egPa zZXwyT)VRdI>f@e3CP@x95FcmvPeT9VB9|@8{4PRmTE7MhlVb*^YL*7%%gz#+V#MYUB!Fh)hTPF6#f|MjZIXG{Z z=HAdVgyd`$>}ZP{e$)TZmgP}{TD9GqhUE2ay48<;)Vqq;aG6i0$zJd=8Ly{Nia`j7!tcT zgZY4Uv9)T!GGBA2wnd>k+iaRyLBx$JQY90>%neeeOPWzURe`(qArni^kO2Mxy!O3Y z3r@fF4pbj8$l0dk7pBy?nIo(hU6&D00+}N7(?g{SNp*QH%h2`oe<+6KSKFZVta;1W zaA%##Xx{1|ZGv8d<%=snu{TMN>t0TOl~9&hFJjklfZH)}vE zaA#H;ZsrWihk!i5JP9y51*8`>CC}r=`w)`Yib*@bB%*DZpMCEOeWw8R{4b+8+HzPH z?`#3Z1V*4^1?+g5hf;q%G3R{O<}2Ffqs`-%Cf3RREKgEAmhuANU1N|)*Mg)}Q$-jP zz$7$o$4T~oq^>_^`O=1QaeLBymReO{|CC^`jHq$6Khqn47DpgCsxdbX=F&E|!k^-* zn&)gTiSag$=tHv2u_)MiXQosQHxf5y;OQZp3e1-_-lB6mn$Jrtfo8M9*oV8FNty}Q zt4F@2_;_~=AFd{n2RjPWC1B#w#+cP9AOf9_qe=bSstKs}PP0+UPGC!lKS@VBs^QB< zFB0N+g+~~z{rffqN1Mz|5|<3LV|p5zwHbm58U!%Piv^w|d3P)rNIs0H5gRcX$RFC1 zqy(fBod$Y3;Yu0-{o>}YWx!)3*&8yjn;|@u*6uE6_Ax_RGPeR=wT_kkx{GV}?cg2u z`Mumw)#V26CL#|b$qKxAR>FM5M8K-FD=I3oFr{+RK;^z z2W;i3N8XesI4)R{THG58*I6HK0vxk4!n=18mx*bIW#_Cr2DN>5QM6H;3?ro@!e2Y2 z0qKUB2{(X2WeDqX#Pyv#@D^}stIej)BW;(#$pfh(YBd|W%3}?KT{xGG+)Y zn+E9ylEfkp+4l5q?zYDwPWSw2G=R*dJyH)@4MrRz^a8xYsFGRihHO`YHI_PSFbM&e zP7+%sPqOn|+SzA)d5hE5o={ZaLsjrjTRIm*792N6t9V)IdSm5w5JJnFKP2))=3`eZ z?`hz&G!vk9)03&c>vyCI+;g#zlpH%Bjxku|K*@7ev4d7`T4>kf21-NAX(I`wv#!%H z7RH@FwRKbjz*Z{;77~YP_q!$ATKm60wKEeOu6t2b1ASLM2LFC^2lNDi!6StcDACX^ zBLHA%Y)UY8u%~K~OLlGuYsZLspm$ZV7@|s(M4jO5KHP}7)CKd3k7$dlCld`x072v2 zNZj!GV@?S|596PS8Ba}SV$5~VG64|aplgrV;|9!`(j2%sKr&j$3VqX_l8F)Vq2cU- zgWf^W^<0?xyQa|sqaEHr1`rF-y2T@eQ9>g5+R*1^JPpvEZglQVNflbYfeF$-AHImE z>Yv`a9LfKxhk+Xt(>|K)7K5L5aO?~r-jUJZM*44)Yj}4K-xz+#&XF&&Ol7i$a$dBz z`>}m#|MRP^|BJ6=-JR^8v;ECnzd^$E`k6DFJ#DP{!($p<7--LNNyIV1L6KkDB(oER zYUfD<2wMNR#7uxW_n^tV)0GS#mLWs_xO&4dA4fUeN>vH$`lF`VDR0ISV5Dj|hl5`| znhh$0RKOo378&tc=0=rP#>ec)<NI>@0$3#71lUp~HV0yMCt1hQ(AYIl zast3#$vhhbleurdF`-67r+^PfYz|_ZMn+p5gj!zL1Eax54aLOR5Q2$oF})+%&Zjyq z^Th!iPfqu-pl0jFmmUQc2le|~@T$MFJgDB+V&cZ;a6a03o5_&^b!$V1qLwdDpI!S5 zZEqUU&7VeKnX?R@N(SI^dFvVH5A7}|-;DPzaOjWE%C{jg0G5sW?kHqlW#pR}(-`>X z5?&0fOJ)FgaTl4vvU9j!HK<>TQyB;pGep3X2{4DSm=9c@H)A&6eQ3-wdSa-UBxn7* zcJ@pUNR759wBzaaBqr8_+Kpv0`%G(m2MmzXk(PMECVmW2(e7wbGWQUB=hib)dWa?_ zS-J?z-|X<&CzwMR2oq+%6DbnnT-A1!=D#EjdP$Rx#=JBAKK$3ze8T9whEKn4p79e z5wVb;6%OD#ca~Sl*^Ok)W%`GW%kSEeAuvX`iH%4JJ2YEjon(laObjfL*K0m`u%oah zx7*|^A2;^28D7A?H?i6YshF7ZMjstsT+k>qySZV447~i=l4U4KmLY*WH-5#ys}_(+ zbmeagB4uKHi3Ofi9nEgSf;C`d6!NhPfKio?CB@c;1We=W8yloa9&J5veB~yrP`#Mg z6VZ&fCxBWJ%xJ!M?MCcfF&L+`v_m^9GC#D9a+HN6@2m(kh-tJl!6r7@3}G3vnaFg8 zkIAzozZe@Io*TfBo@ldkj&yd2tk;=91B`GXYH}Kei-XTLqGsJKX+wi;RWLmv;htpW zziD%)lWT>6usl1&#TIk#b^<^?s!Gnl4UJuGgTdGHiX#Ejl}^LU$1F;-N{N zdFITeHK4243Fld_S%3i`=VQ#O^5Xvy-j~S2)y(uxkeC1^PN%VzY(%`=xM9YK{atDf zU~Hvq3AT2s0QfzXUj5i%N5m<1he7?%S~Q$ZY9N53&lsWs#zALFdp+d_R$`q7y)~ku zMM(A1CJeXEcN@xenIM2mKQv*sM$LhwTRSdC-m~sA+`8a7*kJI-Pwfwk#N0an5AT=# zZW6{;A^>TQO|V|ntgobM9>N0;01U&&y7C8gAnukj->YpJa7p$K5u_v&7|#-!gKv6c zToR17lECrFOO?$(NGjJqZYz?7qlDU1gG}9||CUTpbJ;&6$7gmRpEGL0WD3YP0u!GF zo4c8iOgqrKA*vlQ#@}Dw!)3(Yi2mvJVz-q zae3+=g**X_ognsUaL{vgX_S23gKllKC7GatP~-KzJ=poIQzmN7GcukFrl93!Fb+cMw!yQqAqC|$yX-S8`KTFoki(#W7L4Bow+xww`1)x1CAoK-JzPal+jEsY-rn>v8A->B04@9;p&@ zBsBnVrfmaRgW&udIxRyo!L)W_*yJ4nuy)CZBwBWkLamlVL`k!y2_$_XyvyrEO~4aI zaKv|>G?eNffhVO`O8^4530dC&GW)G%6!ItviXPA?lsG`DnI1--P)p)cmEizD44@10 z-r1!}uj2(QKz?Z>64|O|J*Yj=3I0@RTiFvBH6>3Aud~q22Vogh*qe-%{_Z|7V{7}D zcKS<~kAYFVV>11cxH?w!mK<;8)53)O4m{txpAsupLc4ZjD)r{1$Pj7nxA1}~4{C{iGAiv@()^Hrm$#D(Qf zubrdwMGbw1DAe^B#(uU?D9MvKGH5&z&~^U?gHh$U;K&FbG4jORx&+5}?aHU7Fb%PD zRsiX=NlJDfvBHFyX%=Cu?X$MPuy=*Y3*`UQoSVd#wwjcF4$uvUdOvT}}@!wu{k0G zdepLHjYnX40S914&j(b0pc` zhzW|%4MSxu0&`nPc0xdwm?s>fTlgW3*q_VUc*EtupBd|8)lQjM36C!1ZdS%T;dmh_ z>lU}1HhvjufFf=*b2Ezn3ZMa|kubm*wBP|KCb9O)2c~+|Q-=1C(zf4JWj;pjepeFU ztURI)7l0Oe4veJ9ER4CWoq#cJyGauA{Gn|)&4f*$h8-yic>+|iFr<0N%5RP93dX5} zfFT)@!6u2VCPJ>{S;GFv%Nr2m#Hi|oHYks?3GGk?mH}3^aCjQ>@WaU9`L`Ljkt{<{ zH)&}y4EYC!3z3=hze=|eJt2s3qk(Ir+bRmrJ43(;2G4{sv>HxE7&I8wdk1<-BTiFtT~%|86>6} zGgbLLzqHSc5_zg{=w7{fdK@U>CFZDtQ39AbTu!S|lB9tXMiQ*Txi=(ml748S4IzLg z!?NbukD);~;!KDu5JOrBv^T;X_mTugLUO-zn6v!uOI!a0e6W2>PZZ1Jy=5})`q?M1 zKNJ<JNs*H3MFnN=3(=p2Y>w=Hf|Ii(8ouBr?}01h!#^R3+ztl9uc zDoJX8dg0%C{XvCLW6hp9-OoW;TTOhpM~zgEm?R>3UiFS$vLw0nS{vU610Zae=SP5i z+Ueh98ni(R)Wn7(z?`Gg6Oj@k)Vk>TQojqsxTN-W^C4vn%(qZIPgToghRMq(*htfs@Kg1sY_B29=~(A&DzPr!b*pZ1Mvjh+GI9|c#Sd` zr^lt37#}zzP%2b!rJBib0mutBjTj?=GK5F`Z`U9e%vQ%s75>o<)Wc1qJ+U%*VoXd!tP|#yAo7Cl zKdSGR7#g51k;vyBp?f5cwjHh^8W_oI0Gh!WGMPY+{w@Cws+L2tRls4an8@y-R#IFL7YMY_LMiFWy8mhn@F1?@4NHX0$4Un7A8&&_`Z)|dX zH0371DIz#Bb4K8n&q`E1v9veKz)&A1xu)+_tcRz7pTcnZ*~H~cRZr2eY>wH&3%oqn z7**kIrK+A;fTtvI7m%$O0|0qHR^+s2Xa$T%4=$?%QkKEqYBFLCgs1oTkcX^4Jkg$; z%BM?GRlbC=^=NAdqw}ucYCr^}p*}u1@WiqsmREJ&9Z?>Gq|$yauYv(4-^E-!U)sv# zA*8hVfqdVU62C*MqK2fWix>fV0OIEf!#XjrvjC0E$$0jz&tzN-yt;&y)g_xGP)Mc~ySDR471d4?SE zeh>}9=*VmsY`V;|G2mxWFm2WXwTdD_UBA(rc*VHSeiGRc0(Rhg2t0dA5vB@+`@IjKE_MFa!Wh*j;l;Vu&_`NOqesP)UuR5gkO1 zPSpI#my~4k@T}9eDzO`8ws1P@rKhTq-A6m55VCqk*XHyqHJ?C(Jee&}@NT2PIWCg9 zoCCCikz>B*7NF9bxhotc?@pE;lIR?&01Nau=e6zda??G1*qP_iiNpK%Ll+*lcr|)S zz`};)(#ER{gjCO1?q#NjAy(|_U8OS0=jd9a8`1!Hk=Q&LEqYPOZ}Tvak9OF%%$CDQ zY2J;ZN)pimNJ;+C9o>rH?4fkjO^t?@1~&M!`7Sk$k9H_LM!E%Pz)laTykG(b8keVh zcatAP&0S(ln@r>UVV)t(x+)*J%(j2ui15U3DH0uF4YeL3wlI;ci&<;RM z4A#;XmYx6C#_@k?LpPPO28?Q(*e11!@!F6Q@Gx4yBn57mRr)~^5EWJlpZ zCKzB`kaNkX-Ksj(4h9>5i~tN3Pa5sd5$r_!_0<`7aP3bI`Lc(%EV=c&A>D>6?}vRb zJq@Z37#{65Czz_>hqgy?0b%SM;%O^|9l*ivRx*%%Z0K)p@FqW7U<4< zO!GnBlZM;TtHr@Mnoc20ftUK4-94U;##E!OV)5uqR#bT%@uhUb>aDyGi zlr-(jBmA$nRA;^95q4;Y4$GsV%w6v^)NCloPs~7$3`WPGe5f9OISxkh-`c_~7!sh% z_>dv&L|d(-*KovSwtN~khLMTiH|dr%8AvXbd;%?!eBc%1nHUmol)&_sEtu?F8=NJ# z)6mISn(3Rrc0M;;zHU9jxG)OtWoVg3x~d&>PxXf|eV{o4QWLXDyFD_OvpqS(2zCU( zWd;@C*={x^5+y#kcdK^dEB4ILI!$?xC;-ZSI(n+zdBoDtpDtS%v7?g_a6^7FZZQ&g z2T$FH3Jm}9m-ale`EHHOlhM}BEX~}M=si_2E{*$5Xxz|88Q^EaO&IupwWZV?6k|7* zCmap-M@Mx->}i@!3A|B&9aU!*?NaIJNUf%2U{u%Kpo}YTy@Y*BPk{qxAhwYHY5pub zRe4oUw_emE>3rfSnGOFk*noc(|F!euGK(ccE9=~fJW1AX#GGn{12uhmWcFF|R*h;j2O#7%d@Mtw6msBP9r7cpJ zK{fr9nAn#)%OVE*lTOtfq>m?HyfSzlU^_T#U5mie!LVBZmbpQvOEsqq7nCiRc9xh2l^uPpX z14%90v(kN{hv9#;b*5S2><$F4IEe78)FvyyxbhiV9vIO|RZ7dzqcnf0_5)-{(wSX8 z?0l*j3*8teDV`qV+ksBn=y-J>HPQIm%I{j?Tg&{(fbqdr+vAnvOIw*WDe_wYNjM1d z@5+FBS}Dn@Ca(ojfS2A@f`pjew3Pf>5U%~ZcD|N3nHk)Zm{})7wSYXgKvgaQ_;xgk zWr|PChZd)sPmET~kQiYY_B$67=-GKeCcDb?^4G_u#$v^c= z#@W|p=+$LnF%yhEPuPD;+$_jz`=)@V3 zS4d<1Dmy9~7)(4dRi#>t5Tnh6JpaZlYDOv+f%ZpCMs*uw0%ONbMvMq@FrGZ?EQWxa z$xRH&(X;l+MO)4GbVA4?H5QLu>9!I{Rfiipz<6F_L3(ah0f4)J!q55xQ!=y`0S9MWSj_j9($F5R!>jDpuugY( zmFcI%&AjWiur4WGb0esa$m_*CA6jsZVcIGD`TK!|DJ+8?_cBoPF>L|Z?I4Y+?)gR{ z=H5+`j9(eBr`X|X!tQBb!wvMS2t79Zf)5xH4@1U4qBI$Xlq8q= z()KpxyrU~9W;M9ClB3iFHi|&rO`DkbvwCAUz`O0Jkh`^$*i+_*HeoV)n%zfD=6Pt4&0vjF^Ef^=MU}qqAF{vh>C~Q^XcaB04(vuLfj*wVxRvM{Fu$GH(8yAKKot<0jBMYq@tD0eP8s zlQRc~*L=gfYccz`Z5UnKhYZI6GUK_Z{B4oti%mB=ott}m;|vju-G~k6X>@eJVvV?7 zh0RN?f4UN`PhJ=Mue$}A~^7I@<^vGIOrgH96k)fjrzZer}qm~z6M zH3B3z_r_9%M?#gPv$ZcXLi{z+|Nh3vPG?FMR|P0##LbH0PDT^%$ z$#!jvN*V0Cb_(8{!VxC6hF6GW@&qXC<4=V?4`pE|IGvqL}uAMOEhSjIoOhQ z>c_HeiOJ~Y-pvYO2bH4*>=EYXcU2KiJO44IjYznNaBUPBr_|w9mG_jy?j|fiy}Xsk zOs4sa%lmN`?*+`*!#${-W!+NKnH|787TV{82-XHbgwiYT(+T*E>Cu zo&qp>;!VJur^AP>JXHWxgtcs=$dT-nCvk@6#TgE$K|06f*+m&K6X2a*<>POTft4u9 z>vh|WTl*QRNYHzA49{uDoic$@qf@I!8k7Lgxh3`N`^}}~cm?v}SHLmRec()s>Voxx zN#-BeER)d#L|b9;K7<&0XDs5{4UCwB8jo8>@Y(pk{*vxeKC1~OwLjYFEK8alK9)Ie zM(lblrqz#|J#^F7KKHw^!*6F*3eqxo`l0P{bVYy4?l~oN?=XJIi|Zq$XPNbfE*Szy zP&@q%UVGMy5OTiz)A=^H=B3`Hz*6=gbe1>NGhUX^v1Kd^&|4EhnygBh^6bv$8yF0D zNViPBH#Dd>^q}H4n|MQ~2ij!7mCQ$VJhiOxbp!MQ*Dk=$w4)+FwrGovd(Z2)33Nac z=s?ks@j2btmB6g3`OAkSuqqxF?YRusw}<~LK0@NyaVZJD>WKV^9?DUo1+Y3%-R8n<{!6C zKN%@RKFMUZ;ep<*nhz2SowDVO?nDC zar)(%b8k3RhiRCjwlJ8-4gBn^lf*=W{u|Tap=UK8iH0Y-^=}_!ID=_5!l=*N-16|m zAYZL+!;4$e{zE%!0V0V@pjn^+1qarsq~{)5>3RZy)lf2?1oX9n?O^ZPon9N0 z^gOQ5S8XY$*3v%#b99ufK~?`2V|646F5|D8yezOZ5r*D%rZQ6IoQVt zEH3qW(>}*Xsk+NxoH6e&c_!0lAgh~4 zNW#0#hFlzNQ9Bhd?xQ9N#0otownLd3QjI(%6mIgAwi03vDhvY2QDHU}A3wCEbXF!x zh}K5N6Phyu=mwLSl~>u7&TfT_n1(K%B>6+`$di=Byd%!Mnfn!iD3PIIIGKCgCFd+RH|9gP`Rrp$lF>`p!D%Iq3=>M2 zqg`JLdScM6A01xuR9|h-uR)Ajv#zm24)5L=`ve-d$TGyAqwBl&#U*6|=+&wkoX(?q z?sCNw2kyEFBR5BrR4beT1OR8dmUqj~x-s&-AvOW(K`p#=mzaj_Km$M-(*o8z!b-m? zU)AeZZ4(<*$pJPDFb4SS+_=2Uc4MJ-URVC&HR!7794--+E-rtix~`Nw$3_^lMi?2s z-QTt29Se3rx0r zGy}sl88E%OF(p$@jIFbcGVeND>C)y)r$>iFB*?Q&oJ+H~Pl!>u1 z&6XB1TJ8~gy7A}UFZ@*;gZzTpLDvFk|#H$BX3)fhTg#`3E&B-q|0Cehn%Om^8hl|M%31ZK$}dJ<)CX^zQU>Mh5xLE z*u;|*!!L$M*yROabUb0(_eO1Q*%F~nx&7fiYGQQVhfZ|4XKw5j2)m>h71O0+F;9-= z@kqX>-Bcc<^Hf8}HC4CLQ7dz!DySijBj9EcY#X8^aAd?v%b#H;|E2wpR1q3d1I7M$ z=a&)(2BN1^+)R+0W`K%?$`cp~@KFc9?)c$nE8qJa$?(>1Iz879f$iSkHztHn7~eT@=eB;V_aZE02Dv#tFq$INRm9H7RVpkdmvqT&@I+2 ziKRV}_XIdfA@;rfR%8GwlNg~!!P)uTo}(&HO4r;daCy72KPweGyvvX$BN*&#jL1Gn z+P~7qf(P#JKY0wZ>%%L-k7U}Hz=WY?39yN}L}_@XE%GzkapScz7aeUQ>eZ!pXU^m| ziR5?fP($cZI4;QyaSs%(0kqNf)Z#Y1TZ>+qB>}kSNwDRAw&aN)tr9%U{-OovNIlE^ z<|92y+S(I6FpTSZ)tRy6iNQEW;`n3NU0WY`#CBGmXh#@s6aSaFQ-eGlbLpi6uf7`v-_OKfQF{3^tvs|Q|&T{aU5O? z2fH=GX?nv5UbQ9up-mXk<`e7RKpH^l;aYrDTL!EwQF62_xn5v|Tso8>xAuFsumNP} zY7RXJM~uQu7G-;TK6EP~HPBi<(+(LD`6d%3rr6;0RlKWkk0=*ka zyl+nh7$Dk5BJY@z)w~_Z(00bljR08lke&i-5O5$*pj0CX4?s(SZFvJ++V;Z{rOjs= zN6k%15(QG8U7CvWqM-ADQ+)B4gU1{9e@9yo{ziVNKh8UNEZwbni+mqSP#sD&G z5&O4C^(?ZzgMDmVC76D!FpvMcc6I`)AC!ZRb@6&y6dx8&o5gtoo(U~71i1OHB-+I_ zy+uwn{PMai5?*7zx2RsOp~Y1S2-K+nO!_@}wT7n(jFhnaVoxpb&fJq=aV_7qKeR!& z;lpH$U!BsHRIAER1aL{x@H~SFV@V;??l+;Ng+EW2;swc6>uc^o!(t`|_l-gIJEpmJ z9%0pu-l{ls@4E|NV%V6VJz?`yHH3Uq(URYqNDZlgvtJAb=+_Tg>v@=n6xB=kZd5kwmKSDq_?|N8wgNstRT%@t*Fn<1ube#t>}on$VK2 z@7e(&btqx!1XpI%N-$>u^E4mwMv>n#fW@eN2&Xccfi3O!T5z7v-07UK23fpVST?Jp zLA8>B-QW;)zHl`kxU;xeCs zeSCh?PO}=ZS8Jer0Lci>Ylzqfcrf(dAPrYd8#&c{`{zp4FL=ZeWuX|my z2~AbrU5o3Fq>L_jBf4cgQSB3;^#$!lU;sW4vMve#mbw4CB#crz$+VmvPt6-{6rN58 z8a`D-ZA{CrD5dmFDf#|ElIpahWCD!(8Si}QMCy4q1Ntf{)p_!Cv^cX{Jdyy`F3>K9 zLB)Y!&JbR6OHEP=Vy>}tjp35PVx}e|1}USb~ zSA8jS>Zz=M&amU{1V1*!oDwT@pcjb@ZTHbU>v(1t!@zF@@DI!TQTyA3aMEEgbO8#Ut{%*cLg3rG(n^C(Z1L|60VxDBqlD>Kqn~&*n(CWv0 zc+NCV0XM(`Robm4(3`nu951w3R$w^VI>o&`lbJ1a;^zPum%yv-Zf**WdxNS{CBXrn zM>~1jARC|(DQ@nJ}+)>BMR zo@sXV%7`I7F=!OSOImOl`n`$iTv;1Z2KC@Yp_A*55}07T?rskk47%kr90o}M0Ulir z=DYMw8yyy)mUGi{lO)e$Enn38t(Es-k635AS~ed}0X+VZ_Zg#}?|$z*aCHu1QDSfz z2)wp*vy0)E+%mF8V?89rqfYXbJ1zIbSv%yT9T`(XOKG6(?$Aj>KS_bJW_MjifII;* zGFm91!ho53ff9fnxYsU!{cSOsHnsZ7KmyN){oxfT>BM{Hm@FS2LzSZ1Nj590z}&jf z($?aMA%9!=qM?6ujng0l#HNe}%>pBKfmwiw#quz26PJB%29D&`FovTeJ=&6G+COyCqpxrCmca4iHlJOmI-iz%alA`w(J* zqzq1hk^aWWWTHJP~_EXr8`lmoYtj z0U_!a3RJ0+iAlmFa0ruMT%~|9Py*{#gG4pEG6SF8E|oaj{}~g>l6ic9ifcSc+j}ye z@U(r7x(u?ry;K*&({@ujJNF26J=*E_P#A@nq{FN^>f@J{k>XGlA79}?mEWYDUCQqij8_4Y=Rfal1 zykZbfJB6+V%h=~2op7pd@g|r#0-BXLnAmZ%&mZ1lj3{Fw8W@V%6n#)UjX5CxMi1sA^u3tT`D8&!}2QuasxSis&k5_$E062KI9OT;n zM>}t3-8|wYhJx`8Cq`|i0p!I?64tUVc>+g!-}f?Ral@d+;F!S;bNxNn?~Rc=0aZ13 z*(2;|22cey7RFa&6Uz`LPrC~U(vj&fsTz8jnZO@ybh1r_#gvXD0ZS`yJ_n5Z^EM&R zkcG7+J_sNg@`$a(@Z=%+fFZdZU)l(b zH?BZs-4nBI&ys=~WsH$5H3t{n88_jDpNtIH4l#rnlmy2G4x29DI|G@9_v(e6iG3>a zV$B;xiA>qEp&mqG=;-MsBR_`c_hsAShgtBhcBmPIp0;MsSuwF5T;_0VU;^N3&NHi$ zhaAaZ@SZ%`aA`xrbXD$lzjMv94#o{ZU`eDi^e|49Gsvm3-rgv&q8EntOk)6s?A#y! zs|_lpNAvryau9XR@-?(PdC1yIjFbStx|Fzic!=%a0_!(P*nr)@+V{Pey$biB1d?Y0 z)J^Zz4BpOt4cD2nJlYQSv!?@a5XX82^2kScX^+=~Q>33+QIs^F&1hy~ZIVhdxU@JJ zUripx*pR9i%*~TV$r7g2<)<-!*9r;_uap}vLqOV8w*dFz4$5L!Iz-~O2cVage=|cY zPQEQE9ZAN)v+n-MhuM?WjmILkg{=>pI@FcV6^M{jwa+{-Wx9Ay7L za11_U$%1NwFrSi)w%6q*{v^AeNOrv+95{IApwHRG6DqgT7UqdF+9G1mbKu@no}qE+ zoSyr2S;_XQclmfnJM5CW>S^1KMN8fNeeR%T-ysbhcE_O0>yfNB#vE&3X8VV9&gPLc z&LqxeJ>nydVR$-f5%T&src9osTUkH!dITomV4hH@ioyIQV7T#|p<*In46quVSDA2X z;o!5Q(q3Ce(XY*|jk`7nEwctmux=uG)Emw%iLu)8y0~~$7wv){+B(T-USJ!(oJ`q6 zCt%qE$7lj90M51rbFYCpcsDm-)}G$!Sq6sh+HetoBVUSS$m^ejQe48Ev4~M=dU}y+ z*|-42#>p;lPwK92T@2$q}NHIuaAJwZ*NWT5B z!K#=0hxXXD{mKNFm?tHYG$cFgr3Al;u?SRw0q}~C>d9lPvzYtSyhRFz%v64B8sPM- zCeSlOgh3tbOB!NNwh)n5YD)lOM~M&YRBf&h;(X`C!+-Xu!!ZikIC!$;C;=1y?iUgxLgz?&I`2!H zn;b|i=#aK5dF|Q$ly)Fty8qxkd;b$Q+B#o3vRRY>nxw-44OI=2s?8+nDerbRWhV{^ zH(>pO|5y^(NZe=Txtw-LJEB3;QyIz3J!%=ezphOLuM<)FFS^K!9b$MK+K`2%9h<7m z8LxqD=TTCA=S(Is+$%OOM$el!MEY?d;z>Y*#cf!r&s4|283_z)`O@Z5VNPcd-3;o) z!Ur+J0(ADKDrQs{bIm7d)-ojiueP+y$j{d6`_Moo{QyN#jWBwW*-XTyEs%G#_&Pn; zh+NXBQrZRD;Y~G|F5|wxX|Ir5C&tZDbTUWtdX&m?P4HP3dIF=s8>>5~7ZSY!N@slI zANddMvB#asZ~TqR5)OI6T2a@4(LtmKBJN0fCSh=ydKZU&e1@h71bq7)vAk05Vf*R{&Z7xLF?grTuEZ zg_w9{Zt#+E&f7ubU}UC;dQU{C@sM{sX%sVC*&JJyzw$7d8+xOYCvc=K(5)H;*EE*g z&EiJ4GdCi7s>aYLqgRq}!6|J9R7#Sn**WyT zeNSUgTcxL&q>Kihz(x(p-)=CxN(3auGvVGBF)p4~Nygci_IZc;1Hju-_CHURVJ-uK=`xJ_ zD3Xl0$Ryt-e6&MhIoc>0lv6BjP#|*<khdtw^So=mC%v{3*bcFrEN)aM6Mlz?!QRLC~!9}q>Ck;cMr6{w`?-E zfyfASxnJd#)LRWEq6DMlb~sZ#AMKLH7w@2Mo!Zbf6ZG8Zd9@Qu>4Mbaz~I$VjQp3< z^tQ#B_|n$)z9;b2_smYpMQlF>%^0--SHRpXy7P38r0rX5sxyIsEzfbnZ|5JM-Q<=D zx=~2NE$$B|Fb(gT8%wPaU^lk*r2!x>_FD{|Gqx}&As1Z#C1z>1p=DFe_c!mC_(}qqSi&A%!Cw2?- z6m-PIbMsRobEmK@3e@^NhsJwc3kaio+ELqwl{gB%e?CN+PNNC zsrDEsZp0R_U?tzOYq;{fsxCQzn_Wp3Rkd$7TcHvFhQXqJ6xSP+SoGjFD4b(fbdrDi z1VDk>bIULj86;-lX1%I51Sun4*K6d2w;%n*rA(Vm8G3N?j(+R?E?ErTP>YGRH(j02 zGo@`*U=5?fnZc?ZJq68-gZex&v`wG~?no(InmblJ9Vtap1_pzq=hiSbNmZlQLE0U# zX(LUWgNP*8a9u`j2cW78t__3HAitZ%c|B@{Fe;q#wCNG!VDY0J7qU95B;Eoq-r}Na ztLU)E09RW+NzanFlYt~j%#FFe17K7;d9iB#f$=zAHQD}q2+joZtIn2Ahrs%QvA?S{ z>%GJ4fblVx@bwxiGkR&)_yt0@%`;oqS;qc#QsqYHfpiPy5!3XobwC^f7Vbl*RK`eyLJS;L64#_uDl)-@bSBg#kE<7?6xvlZ6#PQ zLg&Fqk~9fgE`2F8Tswy&pkM9Xz%2>4Q9j#nq(1;Y)-pO>V1z>#m)N5;>#FiiMndwt zb|lAQJ`|mdM=U`TdzFh`?dPc|I+qG%>k(8)Jkp#FEK;_rCSV{yrkQdxb}_2TG%3E5>Iyd z0|1sU;F~s$ezWKu!98Nh+#1Py+V%r$DHe~i?>SY%jcXnG~Ll4BZps^XSBHE!sXorEQZKLTdbB}X$*?m zKn^G(AR{Un$W}OzXXr^*{$nN8p6FqiW0MTyo^YRh^taZZU(ltXmo_-s&T)Ti!LN{J zPs=mZ=`Sm$lxNF^{?s=lwuiO@T;FBdp~I__BV5|5oj|ffP`v>9&&G2AFVpoTzus;o zc^QqY$nlus#B`|v8$^`GwHszFniE#i>+JKcLWu~3~@KvM;h`XQQG{}!@ zPhv2TV62<4@n39>$QDV2hfVITX8fj>+q)d1=lDw8L?b#nxmTRM#E>ifzL(VG*S0+8%&dHXX-8GI z@O)|GGM26K1*eU72!ZFkA9w$r@`m0~gmCD}2OFJbN)O8$Se!-Cqz3<}5N#N_#a9zYeH zs`HN5&6F5Sa-KHBZUfL$dc{*()=18|{+=t-HUy=`?w!rlHrkghCLBpOPY%!pN3Co!Bnvuys;`=JYyYl2gGs%+ z84j@Pw~2m;tZPbcq>?DWwDe@|A*+!pDn{|>ygOZbf-}k)_&P4ZgNnlXI|7d3#Z&1N2LE5Gyu(8ipVdlf#i7)nd^J`ZE!-M@O34gq6-rj0ilm@~MoU;|t z<6x?1xzH7VVKAcJp1I_yaR?1IHuwJs2UmfB2%Da-dj9|=$-%3(0F;*0)n%lG4;XXw zHZ*cz6<@tpewVMvOZ{K)0M8%|H&2WUFy-%ZF6skN}PWJcrTl*d_d^Ubi!W z%%yD<>+*0ErpKUX`!gR>GjSl;{*~y#bQJjyNDFGmd#4kYp(5hzcQhyj)SzEtQ z2CY))bdJlQpJ7}k$eDXglqzEIl&T$uZHu1Lb3fX_&HIQZIh>4ra$ukRIstQlv5qse zs^kEKjUmH5v9qOO0{gBVIux>-TkvXw9yqsY@EY0;v-561jDS3bl4N;WoCzP@GltI# zpV2pc{()^Fzw1G+Vm#;w*Wzr^R2sH)uzX{SFam7Z6-~QnEd3C$A0N ze3+*G%ojH>^8~+NM)4om)+J~u&uGtbI|EV^7dplyX~@5FK0X_4KE9g|M)jyIv0%va z2D73O^Rw_o+s15SY~~X499pvSo|%}WK$5@~;0d`g=xMae4xL6ZVO1@T!7?%_26L|s5(R2=xGR(1^A>=o+Icd7 zr)uvjzJ}ItRP5-lKo7buJOUjhtD7Md99ZKP`+z-l;bD$rR2n7C08jNU{nUQ_{m1EA z0%gUiK=ypg=m|TeN~M0c;0i4z#;b>5}Ijfcp)dtOuL($e;p*fduk0`j?jx z)IkEIG-z)n>oWJ*Br%PzPEyWm4PV-zWT4>+jWzrE?2VcRGypCoGR@Gt@-iLkvgip0 z1CN9%ewnRM=Ftup<5VFu2&Q*blT8fx#$gMAsdNgV!a%CIG8m8o?T0zcobO8c<&+M3;$Jw$*7oDl9`) zO@vbYgR$^r`?2y;Egz__y{*H|{f= znbS0*^K>Zb#5ihe*eHaTl%L}Y1X)a~%0=^@ESxz1p2G$;XYw_+K>a{?Ni?La_J z4AbGVWCz~iK+Ajpe5}wUIh_4hTdMu3Rr{QVlEtFy9ldTMGD^TQ-B$9}AcmYdgf+)# zz;1(0=yUGY^nNtvzZC39MynxsH)P~G?qUA z2k>o)#R_0Qk(?RpUVs<_p1}mp<|YuLrrbFMj55+~;uGxW8LzwfScD%7 zVF8)T_xVw`s#m*Ikvq4LIrC5F_QM@9$Bzq_L&?1lW(a7964l4YVl}eW#u%MN8hV+w zA-(guNwn9*_1|bM2gD{86cCii52u7nUbV20%1|ofEM_aE%7$JQR>kR-*TS@;5qbVr z@gU&tLc%^$x1sAJyAk}p+yGA%#;HIU$k4!pkhTnlZQ_W7FC$56IkhXcX`(T09(Oc= z9z8NTu}l7b2N*LMJxZ7Lw3DYnl{{4?F!{H(o=rSc$}!au;l!r#r26WYBV0rAB(uec zd3s!5q+KZ?C#=M)<7teyHqtp_kbGIfD^Ht@1_P1zbXLNPQK@>tpoVe8y0(nh-!FL< zxzVV4H1N##R*(IbhHsb?+;-V8fZ9Ml%Snwo+pwO3kH!1e9PkF7%9CC@VuVSYv=nA zZYnpAuKcCOi>Sjz1NB&{@ykq9#ROQMcL2%9xrTEZ&mmW00w;e)FCkcvs#K=^i$M?U zsFmGf9tE#zcshti`up#fDbpMxN$n{SD?WO7+}on~pE3Y|$$OsK{cI<%*fP;UfNIlE z$y1=p6G<9^%Sue6>oe`}$JMCxD5oy*f3?jtc|DIvjyD?QN!Ix3fCh|1elo8vNpBZ0 zhBP|g71M%Bi`(&Zl=8hz-~p;!n~Cct!Yi$9?BccPf0bQcqthqCv~yf@C%@!(*?wr_ zBG!dyh@+!EK!2BRRa~BB3_!58Beg1Gf}2FOnPBFLq}d!2;?11~?3+o@wtN_wKZOpU zjfTve-6P_9Wy<^}v>(L)_hXGV@(8&Rd}@bIO24vMY1`H2AS1*3cwxpun0HA4hbQqc z)yRD1%-6x@W<`m!0XDaq=0J;!FY<`o^_ZB_1gLV*YLWo!T}v}@e~YQsM_SC|{Lt2~ z41|{hWgf2+_WhIu%<42KdDGkEhIyJsDK=8qYBM-EU zlIIxNTJxx}3oH+vE>Gtue$RT!7r~4{@I%`iznf)Erzga5t$oulflEIPRSw);Z!$Bq zu4gfm!KRUzl6K58xAy6XfXSw<`RWACGE^P&Y2)bv%yB*t#`yrA%UVn?Jb(bd2|u;- zP=4jMy3i4T(@ac{SqaxfZb>bY?kgG6PL^H+{5g9Ql`#Tz6sN zrmCY$%v>?s*84dV-F%YM;E#sEkn3gohj3RxEDqdws}~=epjI;FvqU2mqnnZ&qgl0s z5!;O!29FYqs>~W;_Lq5ToGQQ(26`1eTf|rfs6a5POPT}w@TGo(2W5%RN!OK2#AIG239XPNURVLrU5@ z`aZ*hZR0{P^fA?GSC-+tyjM%RZ3k$+GV(r zc_fZAy&5OxS@M)%a{GBhD3e6J5k0wq@R4NPFc<-Lun04 zhYrGRrhc9<;woa9?4!o>6cilHzCCIJx(GZw%;zNBOdeiUOPTu%*NM@3$2du@s}TXs zMz3}{S=8c&!PUk9>N^<+6{KE)Mz%_lZGCEICY?aD!=nsPGX(OqC`4nI@udl))AC4g zw&RsFG%*aXIsgEh=>=|t`|B(?zZ7C*K*gE`1SX75@GPT1-ZZ)dgjqp1rHw%eyOOOG zoTnsC?Qd<7QQUBD0uCRhL<&m7K{_kI^0bv?3Qpij9)n(o`}zxP3)@x-h?UH3rs2kQ zlu=TH=E+yXGwfjOPxaYp>N|9joPlWJMO>O~^pf@-2Z*43`wM{Pzhi>SB%!*nJNkB7I0M7=g)_rW1AsNV{ z7%+sD5S%{Fxk-xV9nKMBL1*E(5Mh}=G1Xh1wzzm;CC{ydiS$x+lbYfJi za6p54E~)x#zcxhjGOxd1cBmH})#IEvRn!vzP%Ytmm;t7pn)y0nVhuVCgyPWy=lGU& z4Y`$M6Nq4*7ocLl*n(7Ih`CawOWspgll^;*YDr^RpfE1?a43|>dt!HL5loz45QdR< z=g|O=ai+%~5>-4%q?{dyEBarhF2I#0i``<;N4() z<>zMFc_5mD?{kQg+GKj%pT9d?tPsQK5Ni-5>hfrh5{yN{kHjzqf6Q$aGYh?Ve_${^ z+9_YxW1$gerDH2C*qKIxUA{pK%?CCN!_@IxJJ838ORNVXJL%cPnq|O_Xrvj25_Udx z$y3$KjXiCP^RZiU&bS;~zPC=Jc$-o{@){+Ko;RA_aqR#j85$TJB%T_@bAwQ(m~;v7 zf3oH8bA`?HzaYl)B_1g~$3Qg~F+q6|O(tM5Vb+0>=p~~|soRoFAh}PFz0%gu(PKhQ zCu*~fOJ+UjaS>=aYdh;Vu2o$dU)CH>@SU_4rTcGVV0Y~Eq?fK3ui>2i}UFbp!A>{YfK zFK{;4t&MAXn>C2<3iFF`Hm!FiwEa`kf6K)pFbtP?SM^&Hm=c4e8;mC{&3w!)WfY9c z`-#eQ;&74oL~%7ohTYzyi@$1Y;!qQN)g@X_zaDs0;tj)b{)`z&3iT+kpzaeo4YXf@ zWn!^|i%Uyp+EY8EK%>~%p!8l%>fHyDncTGBZO{5p)`@FGtn_@zH~Hns1Yu&5ZbX$- z$|RethB(V$sE}(}ugtW!ld!Bu;Bb1BQEW;A+B$AV(P`pMz-X;}bra`S$yD$3t(^(C z-nqH8u|x@l;G)hz`Y%K2^gRB4G11{-#ZQ_!jn0r59Qjfu-%MbbweL^CsjWuXBtN9faP(1YM*<1mgTsh0_@*4frxQLWt=CZA>u~BF3Gk;tdemoE+E>3 zJz;7h%-Ok4*_JczV*RLRh_EF4g36=>*(D|4=jqJ2w-Q@pn=N_BAKGLpulc=9LvKao zZBh@7Ql#JK1m48hJ)4ZVjY~#c?O4Gu{C~8wqAJ+~#Gc7eb<;z!5yzrmi}=wYJRwKQ zhX8m_7$uxzHjE55_jVpM7IbR^C25q(XC);H0QGj*#VX}Xy)JDo!`OC!fn~%apMxLT zg!NORL6}p43|{?pourKC7T|d;DW9fCH5ve5taH|3Vj9)><@bzB|D!}F^z-Tw(_0dP zhE8I|7$PyS?+WIghUEPtdKKJlVGeRDq`HIf){X$^NO5T{b$GRT&Ug*QigVPHIV87? zqhMlF5`giC_EC!h;6Kfu+Nd8z3@R(oUwNHD*HDJQ#pu7OrpwKQ{JdU`VW@U&(VGLv zQpq6cpKoPK7!@?&Wl%-{q>Z^5dQ^;_%wovRbQGzJS7MHsA*S)bLke`k}9UrvJ;XH+B_UQYOeP&{$aDp0QA4M_%sI~Ax$?=q|r(kGv>Bb|Fafq?feGU6kQDQy9|29UunZu@L`rfYg61^5MJh}Px~=+TE}!Vq}ZMh5QR z4kx*0O11}}ii@h>T1nC?&!uF=44rn&?LAv=?J$D6?}3h5K|$kk8Zod^|9YN7$K@k& zEUq1oc4Ct44Kuu00OQ`!G3Dr&>dzr%8N!+c^p3Zcz&7QpN%u0q+6im{x|C*-T_rck zEnwONjIxH9K(w~zWyr_D;~Ea#NEvceO+oqb)?mW0;`K*y54PK1$Ut z)_?UGjCQeJLVUcnMXjB_lpi$#{aqP7!`Q?au?yUM;1WAVWCEskO_HwT62sQ^b1QoD zzes8%_vXNYky%qhXnywGo;Kp1<13|hY=EA?@Hp{iO>>LZI6v;=;f_j!ZK0rNDn0}*FK1n-3+S0iUnMZrcD8XC9 ztjv?HTbq|GXSX&5H#9~!2Uxa4T%NNfv*fcawuPkCj82aU?QTgU;p}WOk$}mcZ+7&L z$Za@iT>2XaTHe!8@w#S?v&1lhwr5p(XOSv$dY=EcHag7)H5sQP!o@*NgiDnM7KVmo zkte+*yQf>=T!2|im0`NPZ6e8YZf)qW%(VcHM*-Ikc9<=kA(>g+93u)>86<%XAj3D8 z@XOrGhdi}KKoA8rn@q$esh=%Ryn4z$LwPzHJ9@@tG`#0AlEz;g*CIk-$zpu(%$#_J;JLvdkJeOL;*a)>$kqgwFCTRp5RQE5 za%{O>viUa@O(Tv19tc_gt^E_az<6~ z*4C!1U?y1}-2@!5l~gs0LCp~4tMaN;ftf=B=H_N>?M?ogAxMo=F>wA)ZF6o;dv8l& zaiH%K?NL`UVge&#r`Psa+-^0Jf7XyHLC5x)Wlhxup4r21gspnlkB&PKWt_-PhAR5m-o&g@{MPz zdrJ>48LHa$u}hH*QY;s5+LgZRkMQdnK$4p=NRDJfM*H<%U~2WA8->ogiI_Q5C9PLg z7gEpK3XBg=B@3IaO#JF9w)=HS#PzdK(LmF8Dd)iR!=2 zz`)Pe2!S)VIog~yAlj7)V|&82UvKp|NQ<~G(_$2cJeBy9IZmqd;yKDN9&R8{ZM8?5 zL#N!fxS7H6f>tA=5WwX|v0ny^_)!c%+2dwNw6n5jwJvSYs;0lzHqfYv#XBFgE1#e; zXNDMn3;}vpVvPA_an^kuT_gXYJ=`eBWBFgdoSAfL;4CZZ_j@Lp$tn}D62Kb8GEC?t z)&+RRH2L{3%zAzAfcpKG`a(3D=te~)9)NY^eV4dnLH~F zkj}~^nTFh%zyVm&8ciuf!x^k&u!1Cp%6XbV8_fPrrB|YG9Vg3|5z*llkk`L&!Oi6_ z8^$tTNF~#I7MvyVB)&@sB|o);82bu*U~!Cy$W08XPD+nb%Xms^!QPgs26l8?Fzl+< z#II*e1o_rRCwqZ1lTJ=&Xy26s=h?Q#k%4J4E|o}nx(NsnlB7iYXi$IupZ3aR^gP-> zr%07(gJH*lqQc_jaUHc~KHAUsVgu05u_SHOz>}0AuU(6b zKzmme2`%}%MXmh_^lKOh5x=-(xY3}>gxg{FcO{EI4Pk`ek_3LFRMCnZNc$hvwDTS> zr=2?<^~*O%j}oOV;~q&7UhIucVRCsk+IIDs>x?giExO`b z5pM`cPf3%3$=jBvdoA<;F#ABa_PJ6G&hhulWJQd3bV*{-%mns6BW7Z;MpZ|(uwb64 z26@8_^SDl6{zlujpWWLvciNO|XkxkN8U|xGe7XUFK1<>WuLYxEJToC?s8fZC=>k5qpJlJdP(S{Dbq$$&W+gcwuUYcD#s!e_M{h~- z0Iwp^asx&l`K>Lvp+g6xOs{u72^RhCF}jV;vXZ=8W}CpW06PF5Yj1eYX}B2&ivutufPvM*1<(yPj{Pj^&@3_dY&bcL5H1&7=x_<=+f?}qQY}mN5X*; zo@whzGpJjE7?y!N11i_itxfAOz@I!l{IulX+Snnc0p$GK=Xk|F zq$+cUo6Gw9QUcy-`h zJBxU+xml+)a&BahOc+(X_CHUfs$r(8hc0?71HBr10+4|;y*%VH1t5uo4L}lrJVU^f zl%aYH$Cpk@NY$zrYI&U_ozgQDVd+W&0Dc4$q&yk6Jau_GeI|+d`}&k`?Rr5pciFkP zMBx<}od!n!JOLJncW?<%qXI6~V);CG%!UNjt$ljbHbx$gPP2V_wm)2~bRV?!$B^Lr z{E6ffK*9^=Rcrw;2*u2?_+M??qlA~d8W5=1J?Kd18kfLlHjNv`E!iN#t!4ojJfC$u zer%uG5qs1c5ML-f*Hfqa3Q5w~4yFwQpv&mAvG)XN+}|m|#|j?;`4Xl@Z~oi#{#ij^ zaV-BS1yI}4d=x;wyderj0aQC>x1B__nEjKsmfZ*8OyI+c0EsHPw9w8;Pm( z*vHQ1OOHbpk{c{yn1a*JhnPPajpJz_PI9z7Avx#nl0!FPJ#9uBggM+6FhD1svsBxg zz`^*6YR=uFi_7mGF^t#^kiSz0Wxs=--XHBDPs|YRb^2!AVT?)w%({EeQV0AzTe6jY z%^#|4W&-`77(HL5)6cA=1$6BZnCe_x2K><^*t*;>o{!Q(dRFy|%4Xf2Uzx$#H}`~B z(9F%J#_eFdbAztbVc0h^Hy*;A^%LZY#{sUD(?PVM|I{`4@sbDX0#jvTc`Gp`F2Zj6 z6pWD)m?xwRWP<=8#m^4OjTry=rRz@Wq~im6u0M&4b>}U%lF@5E8eHC^YXnv$={AYQ zXc7O=_JAnb0-UrR^)4@VG>c86-?(wzn~8aP)P#0mG3$m=f)`XiT~uU{pK}+T9x1ia zwKHNsgj-587AC+1^1e#}UmTBD($R?UX2yw-s;*D%Jb*UGqn07|oji|_##x651wAs3 z1&|yD%vlB@*uKK_#x@7MLb~%O8xDmnA^oR56w1D5l%4@3`6|GZq!vroEBWYH!)y#O z$6AyyvyQg%Z|#@`!o|ecujXj8EGdvQ#K2hKvAgHkDB6q9h6Mak%6!$WrSZE#9zmZVkuZUlyW=Q%cX%!FVI{tOj1lIe-M?gQx7UB~{NI zJU9!sFmZej7X1F@Mj_?xU~fIED=K zw3Qi@6+Eso#ww-s&()wuKiF-5`@r4>gtsJ}{c5n8aIqHKZhK*#v=3cpr5W13Usd#mX4H-={#T*e9uR z(_@pgFpHVWTf4>?e0NqaBXY3(7DJVcyk;5NeA6?~HG1&cmFV&6utEZrF5tC?+>d+| zrAuw>YGqk}^l&*x^Muhsl4PiNG}im946(AMMWgE4Keaj1VD?GUlDfw{onTg~SaI|eX}C&!+zYwo1hEUO0BY0{6H0CVnV+xFBhs_b}bt7Bu~#l(q*Ko{{LzRYyBK;k@C>yZPq#&cp;LieV;S zQq(Cudgc!myhD$+k_-t(WdzRa(oX8nnM#eo8uWYKET58ytPawiHaY?3#PoDckH2R~ z!t*-EV=M9I4zvwvbJP?J;oAtvfWn9|dJ=$<5t~~8u&Ob5y$oSU3yWX?x@KqnBuGeIc7*wE3aFiLC%Gxvc##PoV%M?UiCsuU?Rf?xE(hzv6!VgA? zJRa@l^CStTDkFG)3TtD~?f9_(^?7FK$!`HA8UQ1Kuv5B!7BaxEDwzQum0q+|O%MM= zTTM^xrv}Y6YK#K?dKh|Mnd0{(GjJTpQ-ybHbTpDY+KWL9 zb3@AmNW$1Q0G9%G%bP}ew4Z@Rn*fX%09cp7^Xh$Sdm!psLL|5x#HpubSpus-SbPhy zyTKSTz30UAa_~1<0ET3kYk$NX$=b~mxTZs0Sj4p8 zWO3h!7381V%Hh?l=k7=MZ>YZr8@fd2GPeVCh+y27A&I1hqNgg;1%!4E+zyzNf4mj+ z|E}tm&n7*f_J@uw+A>P7T9LG5sw?3lgQ|eoHR7Jg=MP>Nl3P1mM{u*R29Yz~?}`za z5-@hjPrH!l@b0GoAck~mh<2>YbA#%wE$V0Zu}{#oLGv*sFf8L07ZV>w!P~V@J}}Aq zL%`hH4E@mFL%#;ptZAN}mpbxvMpdcGWLF#w7wZJ%PxP_-?-J5Y8eX3j9z0EFWBQ=8ey zKe{Wtv`Mwjw~t2OdWN z;N&m!{GVzpdz>EOl)h#~b61V%Yq7w@6ELN~=YSV*Kw|=)jwf=k1-EvxJxCKwuVaOs zw%zJieZ`_==uGw}L2j|67PjW~a+bj)-7sUQ#5s4iTFU_`!x6){Ux4ZaMtyajGEB(N z1XzudiP7DUZWO0RzHv?>8QEBIjTNy5LE;_h?%_MDYG6#5hYSD` zu_PhWlMtNR9?BkYb)Y8($5p@Q-e@45OS~|Dx)sThXcV|tg@@@$ml6~1TRZ(7?n+hl zvY9WUic6awbed;tc8^O8re7ptvpC|ORZq27zti+k{9AeK`jt?C z$#0G&O@_zKpV5u<(Vi}!L(5wjos@g)(yV-+HLDs9qdaP=oBP>KOw4c?ShO&z1mrco zI>S+~*j7@_4~-aJTzXJjh!_hchz3~loVhI!k^?b}V5EA9IjY3q=b*l0-T9$yT@D=W z2^W!-GLD@U`ElXp)j_AL8i4^{u#|YE%23ykrz)_dUL=Cdy_9|k@t(L)IIr@ekSG7o zsrSWbCs;mQkVuipvt^hGYf<9ENa9cJlSP{bAT>d4rnDUpo;i8Rk_v$HBr{bocKabB zv(b%F)l(P%cyosxt~-xvh4a->xJj~H_OI=YzrsAj;-1la^uaV1a7r49s*Ltqd#0lC z%sw-LU_YX%cCutRsHeDgjy&T)$^D&g96&MKN0cN->t5qqyGlXmsaV{3uE!80o0;px z&(KXQb}fG-z#Cds&`qRzj8{qC{pc6bsLPWH_ci_5 z3sb`ITdi2&U^sv0OmR1x3X~90vQi7zfOJnKFg}V8qdb=m*yLZ8IjSM^xzYbaTWX|S zBOP^zIH#w_wHxCw1PG(v5ZuE*FPMODB{1Zk0_`w_)?)67#r_O}s}m_gFD(a5(nH(hK91dj57^lGKf3{mo0`6#YE@|fZ3At zirw-!NuY(-ero%oYX%|!v0J|epjY(-+OWva$I+6RaKX4SxWT63_T16pSrf@jI}J1# zYzh&O=WOQ2wI_jRs{`QjY-4x@00MZw2`!XXb&Dr?TtR;46$^`+wy}I_0Q`IH2FvE2 zC#C&LbRpe7V9YbS;-l^GNI1|w6VX=2DPV#b$UwfDaImCSd5pvjG-+? zvP#LnE;d^7w|2O?pD%?{C*v!Sd{t>y(CwEod0sae-j!65KF?lpQ00l<=w{JE9jO{2Xdh5=@W zU4WG~u3jaL8L9uhrY)e|N37&oTqI4iD%WizmZTd-7yR~2SfB)U)YG#!PDcqIRY|UY zOFSOcv(K4*6|EDLB(ugcqQi|r0UUXxw4DlP02yqaZUCimazn@y=Q%eommZ~*9sR_d z>!}nj)Z;~MzC9;~dZawbS2Zq)0l3YLO)%L0e5c2V&=?!Xmjl{{n8SF(7QZdKCVkWkv!lE%eTI5RnfdM;j zZCUJ~4kf2QUCB^9lTVxY=>2H2cl;$OCMD@Eb+|?*?;2lGr?+S%#e-%_=Y`g;Y(Or=WN8PPrm!XhyY+1%{hh zzm<&i>^!VQDd2O$bwzuszl+cy;PF+uX9Ljj_FH5K2ND-mc)~JTWuXH}t&&-sRI-A^ZZSX)Hs_lbrO6l- zlr+6;$?)NPcVQ%}9Umi?C*+JLcmF5B$|qyL6HuUHCTNJU+mINGShLu{z9(S-l9Dpd zdfK-zhKw5_X1kfT=Io~|CdkBU1WKJAF^Yc3w8_uDlK3c>+gTn%H8LVXE%aES@?UNJ zyrWjAQnU*_>Hf6;)n@(dV=McEt=FS?{A~?$Rs?5ah`_bga1v3nPs?$zH#!VHwVC7Orz~SA& zu2fi(h?uKa?O6{Vd2Zwd!0z=bIZB_}=T4wEoH9B$6V|KKl;z602>fnx4l19yk82tN z^xUtD1eMII!tNWHzgRFnqC_Apa4kn(Ac=(o&#^pD`6L|}=A7Xdh*?+i;Sv6G@)#y; zN>08vE~#fth{X05y<0|gy-Xjw%YRpF%Yyf zXh%usKcyzqZx&veeit!waj-^{42(fQPrH&QJeYItoV)@D$KNky_vdeC&X%dh7drAo zx;ra@kdWyQV$}#kRyY|L)wi}Xn+o6EjJaiiWJW3LUFVi<1!sLrP?|dfCA}OqJ%<*q?nSYn3$l# zG55T*>n4P%PUZ%hmrfZj%^En6SLMkvuCb<(m6CDHbb-@*dCfXuoL7etpsK|W?Sig% zmFxfu$w8TrsX+S0B#q8HnAn*T%=F|m)r@G2@{!o?APkAc6*Ud(MjI+%QxJsXC8xk%8n7<{4+f^cevR ztdyCd#3Udc?egT$zt;*nQ;!Nj!`V4HRmsxjDPK3~KROmblR-L6OrFtb^zhfYQ3W<_ z{dshbd@!Cu>{u| zViBOD1nK##SMB6AlA)?a9_$F_WDxTwe{1Ve8}4*kH|uBXs{`fU(y-e+C0wd?7KZL1 zJlbnI!|^BIC-RVRd25Gg56jniiT$Ec`!We;AFsTF$l0C%#AJFWV9OyXgOjABgX9)o zKQHJIX->buh@i#gi5)-&ksDXtWTuXFlHxh)42DZ_={6RmfSwp0*jB2S08GnUd(G}~X*=et zMC8|l%g|VQPNflP)Y4^|GH#Gi6%WjWv+aIrE9a9a2q<-R^x{q@7J0(%qg`Qk|(oIgCyU(T<1Q;H5*3F>v^>k=~%4cs1*w|@hr}enFM4^0$jVf z=SgXUd5ZJB4cAAksr4lAq^-ow*5HZph@^}l&#AhN?#bwl(P&UJ$UIuY)8wVC%>=WI zw^kxqbU~$HMP|lJk%iYpW^F#Ux~;I`A=xE|q;a0tsNFd<=z5G|pi33*q>~4D^+^wY z@)MY20F5$~WSl-1f1!GwLSMhTt?b+;7508rTU@2+;c|%8dosMct&Y6LS4qE{RO+|* zMc9E^qh6~mZMtsl5FP!@g2`x5hBhLuCeLLu3PulLw`pi#m!aL*ldbIBVarn&Hwa~b z_ZLgb&j>_p27&NC`ozeJ&R1{XIfHj7O+$Rts0_OZ$L6Wm!6ONSVcO<%g40aQJ*Dyn zBq>t?cZ?!3N9WsEA(b>ADwtQ5j*C#hH$#FS+DIMWV1fJ6!xE3phi-r?Gws|+QL75- zAdYJ;K8_N~W9S{ub8ZdVWSL^Wh!8>SV|VUMZzizvh7m7G+FgK&)6%Xqb^%G^M++l^ z+-_i|9bA7GC*9^4j?#B0@O+e_{<0W(@>m2~e3bo~+Va&cl1!4eBnIGB-`ZVQYCIZc zR`gsat_dg!Gz)Cyb9$MM6)Q+IZf%~+xG!2%fo<+H@ip5?A2QdwbKD$GM^)(y=-ZG zYd3#CjC8z`f=7j)^;D7= z+76y4_=~ENqgU(-gz!)8;KVt*M z)HIF^7qRE%Lw+$jTsn>D-ekb4G84w`TvWlY%kK`SbF>#Af4;q;w{~{}nFQzp>Wy6z z1ug@%C6Y2NrDX$gLtsxa@GF>;=TrOqoUfuW`cdphK1oVUaL{~+FoF4IdhC{@STaRXd>bb*ZVq#?EnW*(&ueL}EP_3%{GL)n^bEDp#b)w@@ z2GO96f0ck6N!TcC8Q?(j=;D`Jv4eM2r-q6UCC6IoJY5gz*_bwnDOTtb4w~lU^E( z?#3)o)yRQwx2a^#-`d{vwt#^ehs7~g(9t^uBq_-t)xOiAlaXiTPdAE1Lx;%CBQ)cS@p?8sRe^1#)C`@aW+HDTrHyHgU`i!Me$yKaOGax?i0Sm6qw*4S>wGdBSh)WZ4-);B31i2C2~7Nv3CxoWe;mN*eKg4>u;(j=GT5hf z8a7bP#soAX&2W^=dbK6iFZmrhq*DS2k4D<#p$f3P+fxew{`t;tZCoo?PdP`Xk{OY4 zoifBckcfTxO_b#7Wsi$<92 zT$UYlQad`~G(b4j4s|hMnM`+(QM&WwuOMB(&a0dqH$r9m&^|hZEMaI$NV#TE&y>2% z%w)Hc9XeuK;5X&-tOirzSQN-F0P|GU6*+Sw61jO4DEo@EQJX{N_()zXk=!(6L^n@u z=Vt92AS9h6!5j{-_ezr^4&WRu_=@U>Mg=gTOtRq|CDitOB_;4v7#CNi9g; z+On@&lhSW)ZB&mkYD3}Hvy!LpLT{$ao|!5T4H<-}FwBSKcgMi+)&|1z(GbRElrA^F zOe5C68>xT>B(9^po>j`-(w3AigT>GSR+>+>nTQEq zH6fV$;;F`8Gw-1jbqTYX-9CCyI7-^|u(Gc(2e0NOooSd`NjnDvizSh`sh9`Dwi1&4 zM{4ylmVzOkL7Y8&Jj-}g#?tPp5-?tY-o}h32z5xp#tH_3#wF{cKl1uY4;E+zGPI%H zGVVu>+n(T(2@F`ZjrXic>McpM1s0==5cz-F6?6V@OOTz#MnV**y*UQlHxCpS%6O+>j(h&@u;8TVasN+{Z~Bc1I7()eAyKEU+G(`eodnc&TdlWKLYMlsthi z?KDc-4UGHGrHwbLudrkSTxE}*EfMgXp7`2C@GQb;`S&D^ORA`soV=FK5FUA)w{}=Y zI$jNqQThqta_U1SCd3AEgSq#VS9P%aUJesz@eHZtsl{x!_UZJyTt}PXJh711Iiitj zBaFhcB|((Y?twS#s* z4OA}A%<-KDdg&CC*Ctka6##~7x2lp;w&W3lU2anPp}h~*JE{iKSzgVFp&jE+gSMnq zx1=QiUGfag8A%7H8&c9|R()PBWzL;Lpg4*kz}>$Wi@3FU>J%HJ* z@3ja2&wsS7%S^Ixgwd_xy8%*w@_upPcy73<-m8KKvnu|;RB?*s_hiUZJC$>8I{`YH zQudscX6Qwj13^{e0Nw%KCO-xWuTrRM(HNc@F)%TnTRT~HsyYYBZ1f|G_1p=DA-s>S z=UJnwm2sbjz;y8{zh6v)Gij0^+E|z}F;#k|*|=o5R+2$&Vn{a(018PhlI~fQq2%VT zn@hXQdW|$6_s+xR;Xo7=6WD`j+mx_3d8$GZfTYCYtH|+8+x;v6Qm+z>O)wqi{STs7 zmuwqbb=UHRPLERW7&nKW$>62hmIT~Cn-MI(b~pFHPJ4f9+b1J5m>Sp6#2n3*hHfx% z?Vm}Ey5I*BKQW%K8rF7_TMc* z;~kMg`}Zx8rcDF(>P<<~WT{?v_B?Qh386+uqu96xdv!x^?J{l@bg{W+dBNs}?w+@p zz@Al-95n~_@uwPEhtfH9>VShGW#3}WVHB|K=vC)^60mh?=mtE z*yGlwxbQ=hXybKvt?G`|$c*%^U<%e*2L#oz=MD!ys9&Kr(Zqh6VyP z=u{CoW(5*7nJO{;0=7yWfwse-N)q7KGYS4zdGt0P6Q}mPRLM3NJew;MXOv((1&^zr z8(BKj{~EmSCWeJ*1mDdrh(>N;9%L=M>(niMu3UJLW=8EWRrm*)XCKtz z3!R(szNuqLxZrQ*Zuka;y=LY{l~BxE#FB)7lG zBZfkc;o$i7gt$~Qio6Dy^70zYk}`aJbcsWrcf9 zum$$07^57hHlIdSN`ES^giRwcB`qbS62Kha+NZ`*ie+g#IyWWi$=70L>JYg%H-JXw zCPt4^dm|je}b|swl|R0guT%E`)gf z0(5QwRi{dkl=S56*6YIZv?NuF5%1i>nS*K}D=k!sGPo zWD)|CCk)W)DSvCn?4R}^k|kgcZIVVA7r)QHUnCKM)eZS*C@nvvqzt9a>IrX>wJSMP zRP!VEfBI1)#z(0kPNninp7}ANmf-+3fR-}2e{u8ZZ=&uq28=`A@znd)7CG!d%oLA& zc;X^fJs3oI^St7$ftZ5Wvi7?ATh$pDVF%qL zJNHWIEhgkR#DskYh)}^fm z)FBjzoiW_FO!mLBfT_|hOOTXSBG!DSr?+#QU0=QhW=XJL=2;o&aEk7`nBy2a;+?l__~ncp2!i3+O@e=Z0)Pc$;_r zG$Yx@kbr5SUCz_N>zw*qXF9O?4A{m7%hw- zJ16O_c_71mp8^I-=~)vrj0Iz{z?)-smBLk3u_Oi#WSA>>s>wL7OFM7n4wT!*9&Oe? zM)u{!d=Q2guqb~?#-IFzB|AW@%g9^F0`cn-#u9{^ymGk&K`dEM;ZkaU@VIUjC^R1#<}Ppoqw;|9YZ&%vfj za(}7ashJofE{rIkQB2;g?eX{5ky4VI1E!>&k#|}GPKIx=dHvLeJKOl8L=PGiNbFp~ zsd8CBhy=sWg!UuDMODmV^FeNm{-jjXbYM>GVM$fFJUrxO-6N?CIJXU<5?u|vsC-cc#ig#C%x;^B6DlcV3e>ltNiB0&Y5No z#JjmhL9C=FgD#St_52F(tYf~k<3RHDIX6|H4wpgk+7g!8tZ)pGyiDvFaQB%V0%*}Y zcANsfmGH17DCdXvB-LI)1aySOos57@M1C(Q^gqIwV0SZ~X@pcAfCaD0!yan=WGVv~^)_SMF%vrUb_AeKHdEqq`Yj zr_!6{5t)dwf*Ml03?8@Mf12rDgQ<0nPwjN-f$lwuXm5?G_J##uO1uk9vw^VVDkcoo z4)wE~3t*I-&n=#F%PQAb)?z=K7^D1@kOIh~qq-rkWF$G*!~pH$_?)NT1yv5Md+sQC zg29rWWYpvYz{S%6NzDRGU+ zz2RW49VDn~x+r-f>?CM&SocJ7PZE{=k1_0;i--@BYHSL+C>hlVz;uqp&mMSzu{yvn zR5X^My2iDLIp7|N`1~_gQ}L_t%pLm!xhJ`4>OJy*{*pQIA?jjQg;cG%a7rR^1fHXv z_Pw7;W&-;+#L@fFrEU2j$6yj{KZHH1eSQf7wRX?V1Uj>3Y4%Zzp}-}^?srh5;n{iw z0Q()R1guo5v?S>-wO2?%<5x|?ta$Qaf;L1(zhuQy()h|KiI)d3?ms={%=Gm^HF~Jv z-`d`B(G=V?_OX@NKdOOI8$FqR={#GCKV9;IwP43kWN!T0-2n1}49zdSWuGPWNt89C zqvY;Plrlj(qbe^psH7*%%t`9v2^-9q$$Kj8KDAq;{iXTQn<_?hgFgBkb+?idE>)*3 zb`yqfJH28?opvRoQOwHGu2Y*womdncTnhb(hD#5bHK5SXICI#Ye+qt9Rj)iSLI;Vn z#_#wDGZh&3tsTbVQWLxarJ8s$Iwe)tti*?8!NVl(3>r^Dv^AGuIA&4HNM!Q8A04-< zX;c2LM*@aW^+f84tL#}%@yi5L#z*Pxe%oSVjgav39qm!~ttSO09L@dSzs#+Np#|`c7#+;4P}OUI zWmIM6yTXGdsrS~-yLu_pU|c7nb&h(T24h0f%~@S0?s~HfNKbRqz)R&3 zV3h1YO!A*jLl3q1k*y@)3=*b|iRG&rPSv(&?!0YpZ8||^XxLJ3fapE0HhbEvWsE0u zw_OZfHcy^6cC6#W+-R(&VqeNR3kJ9j-0$x|W z=RU>ALp(D9B?8$DD;j28-st5@;0eFd1hh!*JSv0j$W$2&#!=<$t?kjT8^m$RGYD4` z@igODXL_E%4mXepiE-fR z@KKk+50>9~qj0H>j>k1WPD7_=!zsM6R@Ov zbL#@Y3DXUIXqPcFZ2|!qlFw3bKwC39@qQE2+dyIr@Y?B>=MjHLvL9hcx0dHGEoi>t~5i=BCWd}!0iSHJ^{LuDD*=^R*iJ5T!uNedVTOR;on8Ey}FxvBrpFLXPhD09M5*ia1VxhCOkWOWPs)WE#P@tJhd|cUI=ASI0$r1$g9fZlAoTj zWIX2;Mzt_qe5V%=D`5S6C#{xos_NSBJUwvF)5O<5wSv)sBY9Eh>0q&#*}7K>JkwJ} zf=~uhT#H|vjbYkx2MxrOnUZaQTC-}=>G1@U=LQQ#V|n^PY#Dl6^|6B2`zpDcMJE2E zowqH)aWF0*@`x&s*y$$2I01Sx-26W_>@ZnwWXBco)_s1LBroK4+k5g#-UmRcI_`N9 z8QDw{1VE~6-x*?O;_!&w+Lh?lYnWwp%>lT1{qyPEy^Gn z&y6%U;~2?Ep~E8M`6|2E(LXN10OylO+LcDh0iGK%%xER4YQ&F0Qk>s8=(19?wt;9* z4+Vhp>e0+=B{O2DOtn1u(raf(pv4y7%wSJ7+RD*@(02ae!wDlv-aW}^aIPW|$v6U; z+Kn5(WE<8pNr5LqcTZIOB)@ClEc;Q6(GBO;BfqXyhDII(??a^#NNO8at@h1 z@CIYrc$r)3c*eD&jaxmVL<}{w7)+iC-gUV#D#;8#XIBjYIPy)}WiX7wJGZu7iKc-r z*(zbAI&@jy0wHzQI9p;|1hsQv%aV zNyd`+@N^dta;81Oa{KcwQqzfAO}zfyDE2$*Gd-OzMl~LFtaLtecf=pB$fpqoQW6Hg z_Wx>cpDSZozuUw^mnFs_-FTfYlj*=Z*_%2_Y>jpdZ~S-dSgWHnmts*+zibn250VhWnyC(Z2WOx=XeX6>r7LPd3UcZ7VDj@I2a4NudFd92;gO! z%r*fJP=5GOY5YrD4@7MShXpSRpr7~04wp_`jyaTOv6(!zh*6unb}{IR59G(wEB>y1 zBj8vAeSg}yK{^UzWe;^R*%N_1H#*+2SMQdwn3>~Xz7gup&PnP-;a$3W2QqJpGDZ^1 z)fV4n8&Yy?sJ-`M>~FJflE+_qfj`>b$Dbds9z8wLaE23Ci1n^q87zH2b4CL0^_sg)MK>`mRIdct z3fPrR+;;bbv>x$WJCPo^X^Sf}L>P%_;J}ogZicoVF)$x%X>ZuzUu~4v^6TEjZObzb z`Ufm@W8q*XJoQYHD)btT$KtC&C~^W;5|eah#h@}ZnyTkj-=li}g_;`s{SgJR9caV; zv$y!4XygacJM+EuM)z2UjH+ALSv_8BF+2NclNlXqfkV$(te+<`-A8xT$$VfeM+L-S zcy!6|id}UxD4k_!o`Y}N?>1=7YWp35wm&z<85h5r=ZqU*?QX;EHUN^VdKjknyDiKC zcIN0z3G4vTb#L;^b3|^jo@O$1 zg>U3}t1^@YI5f5oRLIL2i`p&Yt<9ry3T6`PcN4>|twgb`&8$c%$;)UNV7bS#>p_D9Y)^MWCG8hJ@AqMEpZR|ZEkw(pg13N$4y3HICGo$iSzwNjZPAmV6Y;? zZbUMhUJ2FQcb+^kn49p8+c$ITM5nA@eDpc(R__)7F!OC&V+59`$3eei7IRibAkW`h zJGH&BbSFFt(tx_oqVcMdk|n7QLkV5ICb|6~bk>fu$Y2Cp%tw0yv#9~74Y)$**3gy2 z$6N}!&w$U6X1$UHXYOhzzm_ooQ<*=Q?7XREGcGF-H5dv$Oa>}A>PAe%ebvGAX!JyE z3mDHv)Z1jNf7i}(CT2LDuV~~L$nmWFwBzimzga=uiDxA|r3(0G2FMsw^#m5bf|2js zEr0!fWHfLiri@q{nSID^ zJAgJL4bjo>ic37l8U+*M1H)Mo!C=?z@}B!n1<5La6Ma{ zp1gqARA&W0-w2)j*1Dq6ebLjPO%0btbyv5NP83RviouMi#a8Mv8EpS6`*sG*?!0b1 zw35mDI~7y|F872tt;RAxOaOSKkE^%E!oGzmHj&y^=|<`+enz$4uGx+z$js}HYAQQ{;R#oco}6|q!f%*kyM?e80=^BVDfe8?(f`Yq=1INYg|vwW3d>S>d9mX zrCB-eZ8I^zkE2~$1Y|JqH!I}~mEK#MFOiR7CIMdKG9*t%a{ag%myzc~ycS4Lo{(xB z@0B2psseX~?_bX_`QEafHFvec?l8+f7Q9MSEv9t1#v2FBIWlf7#pKyIjWFkJH+fb* z+6L-Qe!Pm)3`#>VJq?Ucz+@dUwqRbpF{sjz0T#$W3g$pyoyAQ4+s;ua5D;8t$I_v* z4E>&hnJD1?Op~7;SO>aIcw*~K6>TOl^!vNqf5v`BFV^OiDxBo#JR78n!c2_rD~ct% zM$TfF4`6{U+K{RMK=OR@$hnNRsC4(9nNWa({#ir8{h_zrgmC~!u{@X6h>Wqiq4a_| z0?1*|!o0Nu^)OKVCY}{$^}Le5^$^K)!U?1T3#$|#PEcoggMJe%>H%RLET6W2sY$jcxRlhBwS`RFv0 z6r)&K28b;Ul1i_X(p(eadKFOKl(rAsa>Q4<0&W~DNIW40`Pk#4gj!0Q7@8zfP#Rl| z9#wi+VAlAoA&kUIt%aUAFfH&1|05hy%@Dh5GbZSXC#LNz#$vF0j#O2~Mv6RH^O-a&edmLv5zcM4Lb?yX=`%W98jG3l- z@?jV6Xym4ulvr_I)j)#EIdkr+Bo+5Z+n`v`VPTCbBG0zP3W_~-D#2(Wv(oWw0)|T^ z_h6j8N75yhc|C;ppDrxz3|%`zAx5!gPBpvb_lx5U(M$_A8~{)5qZ+98nE@m*XyE3P1)aE}7+FBvlOuuz6}LV?5jarmd3()e_wwiN~!7 zR{?P?mW13&s+v#u`)>cN)I5f!tqcC_;Y@}V89{bF9ADea9B{4SRlOO_qt$`O zEVg;~v_}zD4m2R;L-}ZIrHE!+$=r?E$|!u3EOmn}}j8HOvzN-=RnG*+YGBWhKk6@1I zNlqZ~ko&p-sI^Gq70A~s?HqRB&L%9YXQm<`u7fCfqOhpmVN_aP?8u`-stcG=8Ujhx zw~`Hcs&+|XOV!ZYOeWh}=nTE#WDs3t*WaY7i6zsumNH~LO4=nuefNgV^xZ+?wcOf3 zjJGFrNa@+0a%BYRRB|MbVg$97#*P&MvBp{CxF$lbU9zePz^0vtTJ@4b%1002B;PXPHd&&bK7%Riv9qb4t9tgS^Soa9jfTwq9_XNdH6 zJ~CN@qXmgzCXOdlSX%gaYcoYMZw)p^*wHD^>D=ht1mp`K29~>@BR8b#oRJhyL!NKu z+~tXuWPWRmh{h-|8AeL9_bmjtC~c;J*UuuxPM=0c4B33ltweaez~(_X?YLlPpjQo= z-g0CdRaT0LgR*DJ?WT9EhpPh9Gfy{>8K_EDBFOLBsX4?Ta6!{xV(gO_qr+WDgV;uj;b~d%G;+kaHAQojHh*B??4ei+EUi$saM89{bs{CygWmmMet4&yQ=ZTnI|RABw+|FSRMn%VtQ*7oPTS_ksk8UWfUNd7^tnNYEzO2 z-tlimbB2IOp%iY_qC>|AE~HdDR$!9WpsG=6 z`Lps$t9r`o;zOog)h0Z;$5)8pn$JE^zv5j_`oRz}R5y95B6ZI?49D&X3)=f%;Y?{1 zHw2kApG|6LTZY4h+Vj=L*dei*(5~vpEWb&_*!VvFe0Au=e+`WnLjROTWFYc-K!-Ll zC95M(gAcJ@q`;8Xh&jn|!aI;Si%$TrswE$ru!rX2P;c}vI2!UY&KL!0D=Bkzb1xSA zRca>Mt1IL%o~l2e)oP!1lz=?U4Yx09RupZxRo?)~;Y}c@tu*e7YNVtDZ}UhP5=hFx z<9};sG6ip0J>r>tr85*qPch*-BNG-d$$cpTlb>Txglv5Wu(jEg&}Qe#vbdNK(5r*s zR+@vY=eWH`n+g5|#2#c{J1L931V8n z0S30(cvI=sb=H|G>uzjX1fRJzd%$THxW%t0SZUth-(|b;TooxXJ}MSZ@@TDL7*(b> z$w#}S*$Q7J^-ZBgM&3DV*Dd4LSXG}R@je+(dI31w_vUe8Kq>fs z+UkJ!EYpq7DKezE^vfurHsZcQjgBNRY-WS}x3u&9)(*>LP(UbidOmIap?$3rg*NPv zR3+WOXC5w-`0Uq;X2v6LEXa5WJXPddx282ik0)+(-n1+V!jh+nTwxw$&H&3j; z&B8q{A%pR$ONO<7udX*fEGci#u-3`$wx8T z=#au`lNAHu9fg?$Fan)!)$sx=apuriUI}>f0ed?8rn@WuXxC$G)=pS}d}EBuH2!gP z6w82gS1%L`=3@gqN-1@K*ge}g=F&bppXHy=V)uk_#9cK#{fYGtfUdriHzl2wy2h1R*6CbNmDs<{kR)a-r#swN%g*ph+DAEK$N~0rZ!vG} z(2;Dz4I*}iH$(HZ1!z9|v;bfwPsjdABE2fG7@>32ggmisdt>CuT;@i-Htd3t;z~Jp zGCH3ij3$tz>ZalOt1+W|>)lfe8A%y8{toa>8y5;?)9fSRvMBwvm4^0bZ_G)K`s`w6 zi_up+#Ro~qvV~SG>DK7B(f8apZt_Nf12WCe;O?IZ?Hw=&z^y7t`%QhdB;RGEmo`q5 zz?VGk-`d$NFF=B~wGJIyh~$yhN?=&@Pp?}wXv7@&mV!CTiBKc(_{;Or{!-RVOj*o_ zPSc15Ix&u#QpE`5z@IlDRy-v&8cVzudC%jXA(#Q8=F?V2s`W#xOwYKlc6N=CVR7en@f!C>|y1tooQ&V zd~|7Qh9=+;o)SP!DDjk7h9`O~GSLA7mKO^kuTs?(p~!#N4s=|TgeXfuWr@w7Z9}wV z86ywb-9{3o__XiqP?F!xA07a91yt_8&zI7}V82kBjk2fP8fK_mnLrh$L*PnP42fzB zf0d0PrK>xT(e)9Yoi6Ye({B{)S8pXw^`AXMsvafn&_9~I@pXWT-6%QxCk|7un;4UMX)?B z{x}AZZ#%kZ%sqxC=P$lxfME*wXh*WvXoL%n2IB%5Xu&MgLnJ9+i>I?yUE7wbGjkRT zhDUE{-8nT;H~R+^LeHz#;Hnhwoa(RZn_|@L%D*ZjgKlobog`LtVW?6@M+@)Ja)-3&4?l2oUJN{hVA^<7v2k=pN)x($SjyQ@Rb77U~+EBZGy7&>R$ z(jrgKO=)ujJCY1JN(hl;;rpUZg__)@#ij#IGNwu=I2!EPU!rQ3Ps2S)a|3X&yypb;j_{~a$&r7w6_CzUCkTrk6l54u z>h@4auNq07bwGd*bggE9>uDED)>d}o>97mz&fnx}5Ve*-fhui5C%b=E#8}j zt3-`6fZj61BF8cYaEm82=3AS9Pu|IbkY&8M^mO{zry=PeEhfUAhGs}02}Za|8rPl{ zn3}kgFw+h~R66~^ooz#{L-+Ov}V{Ie0t;U_5p0x#8c{kM>oizJqqC8luzaiTp53DA8k= znzJX92t1dI>epCDB16lfJJAsZh&qy z2TRS-D32;D0`Rv&cg{IBHZcv^~ zUvO>%q1FP4XBMwgsX|sVo*>;N?B6YX>BP8xJ!{Z2TQV#gs50TgPU+nOcGQ*|l64Dr zJ7ARP0e3?H-?ViC5pa;IO~!C`Ku?C=oFPKD_`L=Iv7}(_@Os6-I9m$al1P&AcWQ;< z0=;fi0qO62k>}%gp275s0%Se#R69_Xw657zdKMG#Sq2$AZ|ywP>gd*+12_2xO*JMc zNs_6p1kOL93jhf=M!|lS^C^Y@cX|VOYu|K0od8$b2tYVzWte+@uIXojHjHUBiXC0> zN*D*|^4CM>`)QoKTOM+MMo@|IxS6Q@|It>ShEGDNCgM?2eCGb*gSINLd)vk+ ziF(>f@Jhc6d)*T+8Q;V2Mv{*`UUpF{$k&m{C zuhQvUkLP;YmX&PD@;doox5#)E*tQL^az0-afURckNx(W-+Ihl!e{a-dCn<1upz$sf zB5l}}5W#HpIa{XfD?#4vl-39z$#2?mfo}3{8v8}S>9JlJvA|QmW;>J_*HxIA!1^t2 z@b7A?{z@smd|S`=o!?oEY6>Qp%=YPaC@F0>=!#6T!rUa5^eimHA(<+|S7!D6ueNOT z_*y?DAjzN2V>DkKp!kB6_cY3uB%^VgYa<^y@;j0Y$q2X+BiC~O&d)vC!-Ufj$F3(z zI;qk~TX{|6sk-HR5}Wn2cvU>A+I87P9e=dV6jRG8<27HQ)5rt_e9og5RWY&;dG+im z7D(!a1i)-6jwNMgU2;5`8&n$*Qm#FZDs^v>G{hE#0-#e4mR@$zDVegtTB20pAh!lj z=Kj*2S%u2~c-8OmC&9lt(DXhZ50_HAQmU=3!7~mvF*ka}@Y}0r+02$?=058skID$z zAKs~UrhC5j|DgTKZZea(-Bgd>dgTYZ>bSyLOlSKNKx&D$NVdY_I5m@I+jb+hJz_Lu zJXHlUH5XEGtz+*kXG0A)%&)m^=G_)r%t_K}4P$kK(Arxz|BrpQx2^(GhRbhJas@yB-g+Zb^HpqMD z%2!QM5@>)v)Apf;(QI6^ZUS@;E-k8*v=8>5z!S2)e``ybfQ*H(gZg(jfu+=WR?Jg8 zndnI(eFeOhkjOAmHYJ!izDiZ(U)pdp8yp`ciV1m7@|u7qSE6dPx*SnkTX~}pV$FLBE!m#E`;*a&JxVQ zxH9OhJwM1ent)%V|Am^8AxyRa5`I1~2xN?_YZ$_)WJoI66Fea?yg1sN z@~Fo_0oq;N3xJ-FmGC}04^m@T+O?Q7PnbzwPZiJn$xJx=0V;bOh?%XP?f&+qGZ zt40z0+bS6_7|-!;1lA%+ zV?1l=+O?z+2D$uO8-=X?+-q(e(5nsqmfB5>06cbj%L7jyqgV-vwXsM{%ls`?Li^F? z2obchPSCc65&MRKmaq3DH=-eQ6-F|7N~j1FnRv8y90r*4n|9ti1|r`%BB_(4jGnTD z2=4^s1(nRsHZj1uz|PJfc-?M3oM`3!$nP!b+0YFbN}ikL$>93c^B9dY)e1+TnE2CZ zZZH`Zl_l4nS);Z@9@ zxU4ZOO2FM}7SOeYO@>Rb>(M5h$I+wh%=2~wst0<>tp|83<%3IAU7H*Gs{#U; zCNam29|7bJ2Eje|xXzXd>sfgjRZ#N!#dQ<9_mU{Vt7^0!x4E}%u>rX3K9YQs=SPli zqZ2qf!K=KIp4G@$4vkXChoYoOdTu5C7Cgm@8`#Y>9!9l5Qc-nh?x%J`q3IdU?WoE) z8gy=G_ncwJf_nQPAfTafvlf;v7J0RmzqI#IxJo_VSM{*yA&-l2*BBNDK>n&Q$t{yb zZl=x9WAWn#>@RJksNtBx;-Ho>0i3`DO3r(TZGzpFvK3ZXZ;SR=!NZ5rOrQcDIme#a zxwfB0S2Dtk4_b=ESnB2$6LXAcNO8EHwbA2)QOSOSIY_2Lsww5Srr%81sY>aTnL(uF zd+xU5(dbz5?Gzk_iMh|p*G)F(X=vJFcngEs++Va6m`$oyfCzIf&kYvTV%6hwG-im= zai9wW9x+bUb;%!e43HL*`3m|sqz*Pywu+X@Y)C4n8DHo&yGd~A^i15QSZJwf8k_kNU8L(wVG-AmI3 z;FiZS(h@~-UhS4G?GAP%#uc#cfDt2E6ZtW{wUcc*!Yk;cB&I~>f6o&V2F25#7Nfh* znwIxuR2Pzpv7R%#V3Kcb**uhG8GizFaUeNHc_siPdFA8!1bHHHfVI5c&xgiIa_N9= z=QM(LMNPAlzVgxIC*JE=or+hIkuA%Hs62Z@p`TCk9a382V^y0PWd` zD2yA>4DqN<(p_!$z0$K2u<|P4l|XN*Fm1oV9LUgef3#`fm16vTqd3|uvso*gCE;as z?Dhe$RVg`yQP)#8v7t>Oc>9}=``;1M|ID1glIqD>*!HN?NoF?zzcqAqrTIZwA-gvGP-BGl5WSpr=J66H2+e zgTOG8WKN@}W2%ofu{|Ih-hY<@PG07$nzO9rHw4}`#Qt{94ZMK>=(%CYaJHd6>o|tMU_5tgbO`0om=scefjV3oWL{Za z7`utwjIWb`Cv!A_tNpdWUFtof2kGA2YyYkt3Szhl9apR!J(MtN2B>QEy1+D!?yLhb zuNtu#MoSxmMXfG>}GHaK|ke!cI8yw!w z6zF)D*GAy=unTnk?v3SbtK)`*Au=@9(7s+Mu*FhqzBhHN?7!C0XL(k zJlOf?i|Y2&_QWgIZd~>gfc>R?lge`HjN(;Qq_vz*{lu*Fc=}-gXeiYgKrmufs&~gS znDwff(@idO>(?`Fu_gcP6Lt3=H2cp!BZGyc79}ls?FmMb*SC8C(_lvdZZYIrJJ4xk zQPV$n9Ppue6y|W00OUK$kkclU&&16U$?T7(EetKZUiSi-%-#LO5wZ5W!!C1_>(%>8 zHF@kY zfNwsks}h)!sz9}vn^09I+Ee-!&@I2|<;}1B+h zgz#7KA8qz!y$z~g+bFK~c)r@Um5u`4h$MBjJq&hc^a;3G_nh$f=SjPB?;K*raRCt^ zY(Bwp2jEuf-iADFxFE%Itf}BW<4HwMGDL>NToHUrT#Y1&IoV zo)*i)_Pg4Us!p^uk4|TyNXLsJfqbB8hz2f6Ub*pXZ`^OOFiNcg%t1^Lel@=#r=9G? zu$MZF+A18PquQJ1d?+YwG3(_vEfP-X1 z>lF;Z1OVoqk2XZ;2+Y14DGCibb=66ee*&M=swUM~Xqx4Ptc-X6*P8wbE`ft4n za5+5~)NXhsyzcn}I1)z&;F&5dy^fQM+i?cOMLQ=4~ zZ=2KT4nw_XcaWjYio&>L9MuOOqV7Mc26eWTtEx}Fqww6 z!HBQ!e-5y>I>|WDSc^aG97anQ5WB$D%AI__xBlC&l+z*7++C$dMyy{OAFslG=GLeh z-||Pt5OkO?R1?FX}?*Z{PzYvbYcRK5RBpC9-VjP$$Zu6+M=N}jQlWM%6OJ2Uww3EO(^MNg(1Ra z4nvbc4s79}kabJ_eA;ww?bkhVN?VK!JQ)Ctgw53N5-ZNLhUGOvh96k)mo~1g>udpN zWdS|Z8jOpvV)U{`MAb+PiNw)(#95MJ_>z3tyufoCYU%mI4XQw+!_8p&mpnTtQcrEe zU=d*au7qJ;s}X-kY0p38;giAe*4FG1rCB2|o2aiI>`G!2*G&M^AlCfNIKXTnq^HU> zDmNh|RB!ED>1^4p2ZeG!d7c`yu{<~QDj6SOV{9hz#FTWYY7yuy3Fg1F^V#OHdg(tO zJq<|L{KmlZP6JF;3~;oCY0sl)*4=HCCw$`xrLq5qK^m$77c00XUltA7P0)cQE-X)g zpCR2?$%y&rwnKY8)&(;y`PNRSe&|=Nu{i+_I&mmqBn7?ik8Ph=$V(Q0CrIZgxTA-; z3<8ZoezetSkL9X^8jJv5c}a$P__LDSTPZR7K*x8tmEmYqY+Y$r0w6R`Z*8^MX(0wR zVhy0W_qAr7h(Hm?rWWKjg`%mZIh!c2|ZrlR+8*k|T zR}<5-365bT#eHTOss><7EHEC4seUyI9i_*31a3rokOFXE4tY-iGTnIw(zupa=R4Z9 z-H=g*5xlaJ2u(ZI*zwrte4!?@jG&n%Z{u3# zbxl=Sz=Y2*sAB0r-wojt7u?M$p)m-g)Z zAqtC5WfVJ|AOg;)VernJMzEt#d9f0tJf40FgN1POKn@Ipf%aA!gr2h>6$`GEo9S*t zCnHY)OoG#l{d8Kc&WlDhz*VgF>iPEI7g)D|zU}-6xHhlR-g-s;3q( zCX9j2CzF9;z186H!-L^;0P;ImM)c5yXl-NEQ<=cJ%*-KUEK00k>_?GLtV_}@DS$lh zIJCN8-r57Xzp%?5f3U!LM#CJ?lDOor2I$5jsbpeev^RjeXTqVyvl(C@KiZ4T#3m(A zodt!9FiA(VHY^TFrGE;pyi(Rc=69+y@r6@6q|Crb@PD*RmzqFU0}4-V8+tM|7b5+e zvJ=Ga8VQK2M66%*&yTZ&lVHn++#hWk#@f4j_pIbQ=zK%~Y@P@}9)EsZ87p)GVCSl7 zC0m41b#J3!+W*pqYft*I8_S45+>Bb4Ur9vr4j+=9n^OF`V=xRizS?nFa4<;z(pHmN zmhf;tD{Nz1@_Um2Vi*AjTXMycWJ`6UV^}*_XQ2H<^39MxV-}*v4dmu)18rUUD{xC{ zb|AZn1Q^96Hx?=j8;^{@RGVkCe`!}Z-@7ak_FLmXThFcZX3=a_n-3}Z=^4(GSAo+Y zo-ps}$B6bXZOzI+Y6MIvDe;7fFw<(<=5k;aTqx00MTPeyCDYSxedeEkfcCH;1-uBCA3{$9I&D)xc@RojkHsyY(&p) zEJ*`x8l=_x!lmV=xXndiu%FG4gnuVJwIH{Hw{{RmPDUJKhu+u9x&}C(Pi`5_z=!3^ zOz|fvP-PbnRqh?MhL&{0{H3iyik_^V?kc3yP{s0oPR|e~V7D!Lvtc9?+W=asbk9@y zIQXs|`?HDB5NohKxYzAEG98gv1l%i4a${+c@3`=>uIg~FcdPv!o=~x#-&%>{y&yhr zsJ4OJwgL_59{YPM*OM0@;nFZP!074aslCg%KiVn0Dh$*G5x@Hc^3imyrj+ zK8vPDRT+d4V8v;y6fhE9!{>Lt-IgVcN4TPGN)yO$4yCe(rNW*&lga(6_Elt!-VWxH zaKG0_`~I2GaFpHqB&e6%%|WdM;F#~KKT3`k$=VGG>txC!NM4dTEl56di?mse^Nlx8 z^Wn7#$Lg>cU9*|c{aZbGupwV1k-^hdBTN@6U_xN4N@nN7VeBUvA_8#GROwCZYD|?z zSxg`5=H2NsYi*?wvyz~yLFziHn7IGLA=D6CvQGVK+Gt>}aBfKxysaRb4@vF2C3W=^ zn2MWpdHM>Rabx*z$!IeL-R2-1`$??`ffBtMN=YY|6ZYKU%s_hS&E;sX`omz=@{-o` z){Zp=8gNJjGC&YKDS67%XrMD-8C9Mv#`H300Ey*$&sJg>rB$_Hj*9P%QCq3MYWzm) zahN!t!-qDv{L!i*>Lb4rByQ99jyagCH#bOV{|@0tJ7_7^HV_j8^t)>-6q0RA5^OB0 zNT=F-*heC1zEWv?Pn>Zpbk7|lQix2$tQb)z%Ss5ls~4m^y$uJZTJ0rs+r-)lZw#2L zFwRi@rEMD|tEx@;UYZ`IjuKMwKM_`)*WLF@lt{W+aRl^O?9h3N0p5f%`JHc{ZZdBu zE1v(BsCt1R#W?R`MhyW2Ac>d7sk*1MuX{9)5Pq3k8w*pi`g=H#$tLIl`Ev3!&|Qs* zak(RZ*4C`+MaajJ^|$3kRm*?1^sVR5kKkZqT_L&lvK(J0j|MT#w;w zyC>fd#e_E^EBsX~hET(B3AQdzR7V@HR*Sg@(DKpNvwdz#1)W&1i_aS3$qf?t z=`mm)tymI|Q5kYFw-LSH)30DAfqp{}Lrp*i5xlru5yt3r^GRxP11O1=j-FTZYoA24 zwV6i4zJ#YX6D$d*%?<(hQyPpXM8HM?00RK?l-JIpDiWomy<$kVWSsoY(P@MBnaww+ zsGY88L~n{TV^K0z>7v(6dL;?y<)G_LwM&g;g}-S}PXh<;YGVnJ9;9a`;61k_my;K4 zGT;W0nSjQXj=M2>-0XXa1G95G#D!E1i?V{Jz)HBO{XEmqQfHE1iA-Sq7LlyQ_&9RH zTyrsPwY2brs^2>k6HpM~J=>;PKukZV=~2Ki)EHM9;n^w!8Cl~BdKf7cG9lml^wB^lHNSl+~L6l9Dg028Al z!{YDWo*F#`e2B@DDzvOfX$NK5|serd^-}zqzv+T+FJ8 zWyK6_9|4v0O8@j^zED?#v$%nQ1kmLZU{~!~Dfp59rL7GVotrzip93N+ql2!kSO%^b zt~h2<7qy8vnQqv-IauDNSMjXh_i4;v?){4pv=k{`}b1->cFrCpeI^y?H}xG zKngc)==Gds$HHHSOWUhYdb);ugkwU+69&U*J+-^B$xm)`&s}c3^`8D($*rw(B&l=e z5FI`6Fiplf24ETjfSK^zGL){rwJjlNSwzZu9PX%=!W~}Pp6DJ-GJYc3^-9)9HlbbS zSMH4abj4!bd?~^24|i~z`@LAC%G#P?Et-L`O7Nbh_ zG+T?~TM33s@&xJza}K=czR`E>@EXWjZBQPuke5_q=-c+Rz`Fgk@vFkdY!$IBLdA(Ooo>Zn)p8N0f%)}9crHE7IHss6o#Maqy zff1QoizMovpie4ii{pB1b}6@bUREFuz+PONs>h{l9I-FYbU~cKGfKe zcF-Ssa8)=%c;a=mND=@RR5eyuSKSPz)XO4R8%c!fyS75KcXOcO@fdW+y))PWkj}1| z1i%Eyt8Ov0b*ah|^JGXyfNIF!KbU^ z<|}9+G5!h<@cbF0G(omDb%zgdhbkwoWqjyl`Z%}1*leXtGfL(HO`r*ms$urirj10@2INMQyW zsgiyN>?*(}>V9^^sS0+KAIvaDLM6b-_x-)Qr7yg);zIej4Yryd?0WWm?};irC5sgR zyn4u&P;$&+GuwZ)pHA9AT-89trcTN28JDCCnQ4!m-WAf6v=Z8dTN~W0jMs@Y*UGfb6qs`R4rKvu?h}~8;$B14r z`rTPbWh~Qqb^2~Q!hDQP9_Fh1zqCDO8JZrySA#O%`#`t;ZBh(oTzO!P1|aW0b4$s{D8DfUvYJN}zBY@LSyI+`*`> zS=Enj69dn*s)?^yzulK7dsPDN0zPv?=K*vTVOE_?IG|!}0xP&)@WKiZ6MGj1RS)Z}N@^A!P-xpk`2G%jA1 zAxe&<*byj!(dO)}9SvNvZ&Sp??N6IQwY@qeBGs<+$9a<`ke@$Ys3$Yus_fF9(C_cs z+I~J_dW`O#O?hX=^&7FqW2lRbOyh_-Vn*FFdOTH}+Ph0F>B5=c8X1vJbX^qfc$73s zR~kTtLy8)}L8nDtm%u?Hd4xSjJTS2~25=-!KH4T*D(}ZN#?BNIXIa1i#w&Qc(JRJy z)r3;rM664S3CT07jga7@t*y;WMNe(GPLL4=Jk1~QNF@#W?~RW@PaM$b&n05c+w>Om zT{}If-E#o3kIJ1kLlZzTE3^fC0GrRP*Ac+?dAH~STcexfRj(pd^KS_X0}Vs*hgm-caOBrlF_9_Qtvc46R&H8 zzYF-T{p0Fp+&Z@?#!K{Nw=(i$cRNbB>M~RE_jFA=!?EJ#48A7PGX6F`bIXD%oN0g# z#c>DZwdIu29Xj6m(?!^Gypk0Q7{gVg*PjefLK&r*zO_e`Z-bX96iBB5Jr-3aHXnU2p&e$Bn=ZDX71Y&l7q4?)@7Yk7{E->QqK2ZR6^f9HUq;j44r!5m>%+|KR?7 z8u4_=;Sp2C;GTA-8B4c{mk<5Pi$Q-S&P@D4%9kz!2_%(hyLn;-FCPSeZAEE$fDQB3 zjsPWkb$~rAykpV%DqXdsp^aYg5!NEvtwxUz%j4DUFi~W>sDR-lwu@gHqmUut^VmI8JrsJbWi&*Pes7%6I!i(%F!gN=-j#hj;G zNpMwSrDZaA`!z&qP_d*2!G`k`cslzXFgm0%sDOH7GG_d>8rw!Oz1+T z#glu^&UzB4>gqEjS@_#^N6D-ZKZ# z6YsvY{bvLD!05^z2l|iFz5ZmMN&sCz%yk*zDrrdI<9-(Z#b5JbfI;Yvwn(b0rg1;j=#>tmAYwA|Pq3ll+Dt>zSdHU}KW?^IYga-_*bU>;QtAw8TnQn^lB{T4?_2waIocK( z*{#JiM$sU-0E?$8vB}6gcwtx}f0Y5ON-=cZhOz)pgW;hf&d$$1kV=tsYe2dMY?JcX zwaKrUgMlj?-}1EOhZ%m7Bv||%@-Ijdw>EZb=`us1$BjZ+0|$DLVsvA1CR}8y zZSNQ?W6(OSq1yShUCEM}$r-6RkOK3{gvM7$^8CK4g2Ths*!a+kCm&nCx1+2XLctm7 zVx_mIX}pCgZIc-00K@U;>vuJfV6arrHG-XQZ7dHIV%{?xv=TaF@gzneZ%O?+HyHKi zzHXjONm2`1RZ6-#wB8?oX_qJy!>uN0+t)vF5Ir|5M_FK;pJ4&Wugq<93^Lupo!6*T zA7K!8C7-#2UJ9LlHc>Ft`GyW}edI~_td*I7#|{jji*Er{NL>Y|Yb^~T0e1i4z8+Q9 z6!f4&fl)J007s3#N(bOT5);4}zg^2JVGCxxp8rm}*06+B1HUqp?=nNNYR4iORg$W-tC5&C zWF0J@=VqM`EmUpsqm7Z0veb4ks5XI{$1X4d4H$Wu$#V?D+*zdLoJoo?1CZd-v&<1f zwSPcwI?X25qwwmvp8cCfb6G+s4}%EZ&T;$m%p{z-X_yiW+ioy;dF|2mA1NRWbr)^J zO$nF4F)?T61IG2L#d*T(U@Ru)0I(SYp%ztk&E`2zw{}+)gl1?xH4%d(X>^pdO&e?g zrE&$2k^8l{Q9Ifnqlsxl%42YU{!aDQb44tNQ{{cytMb~m14uFe=!zs9TQYSSJpj(S zfQX^pAx{N^WVCexsp-+b8$!R8ARVKInSjx`DaVCDraMa>6^vjRB`(YVHM?TTX)}^6 zrQeU_=;Up66zI-w+jE~yrd;XL%kIoI2s;vhkpLe(e+gIS25I~G$E-+YvJXm9B7l*Pqk&Dx z*Qfx=P8^`sHQ{|+643?%E%n#0KMvKgYrr0leDsHts>z7ijToMu5?i5bNm6WQdtz%T z_t>t1Y3r=D$#2B4gH|sMl*Xma1Z6jIgyr3H18KwxYYCNu+))zqA^2zygb|nWRNb$l z7gR5*<8tfrMaVd-n$qF2nRv2M8DN=x9m9Bjw9k}pQcC|sHKUA6n~VmQe|1CHd56>m z28@>s45SjmjuBYhypeGU^Idxr-_!*3;ML~#JE%Y!dTu2cEHD)o(@qOdGLNU^A4B|w z(2d9Kw-y{b?tKhU{jcCM1f1QfN&@_@Gn4(i_YtGdi7oA_x-bwB>ymsjU%whFO*@u7 zP#9W`s+(9>6n3!*B*73(SaPfGpsCVR)lN@oVDTJxLNVHBZh9IZ-uuCYNYcb^F|ito zk66A{^Q6~tL%J@iW6-sX8%*QTKt3e<2b2KeeK7YriH*fmtnIvI5-hWo^fqPYLxtLi zMk48l$x|l|+f014mEi~gHO>w=n41YhdosHcJPo5D#R#mIp(~zZwEGCB0Ov9fgUmg5 z3VL+DZoN^YUy{?K%@w0TOg_%a8zL*2JWql;i@BBpbC7GC)>}IQ8kA9JAZ8S2@yx1X zR05XoGl7`~JD$bZL^E+fiOj3Bx%HBl`AZwc?;Aul=(TMcJs1gZdt}4}th8KuqvXu7 zlDuv4jX}(-dlUYpjRIGjLq}Ef=o`$Lm4`ZwAP-jn>eXWZ=R0_-K3M>K$sJqX@i59bB2??nKQfaD%YW==aX_ z^EABno~Yu%?8&I!k2V%5ZI7>@2ZH;zR?z)y8y5H?1G{R)+^X_SXt5-jmOfot?BGAz zch7`bdsPn+mVL0Tfhr&RA*-4>wo=YEvEg7mk${=c0qZedtSk?fe@i^nJm@KJr2=9~ zV<)do@+zr3yb=?yr(LFAzZ!&7Nmn@Yz^R2Bd>_7_2=o~?l3Fy^O7|CGluNOXttvcSs zsIo8uGkSzvGA0P?D@ z8X9avU?_k_f=cF7Y9s~^08iV!mdtHeNWJk^ECN9CRL8gm3q;W!1YfVQKCoaj)nWt$ ztJbC7NPO4+ar9@Rt)%;YW2`#~2s@&po%t zwkp^+tDy*V6X{&TKWmHjkDsL*pkki|DAD6sqX5{s>dZRd+R6cuQI_>Q8`MW)Rn+pM zvta{O>`P3$T#|yssw79)>Wx>zHlBO#a)JJMJ*1lHf$De5GYg>Y5r~rh*S9Xb3~AB6 z<$1z5OzSP-f3?G_0n{yCK(fLSm=YEg-}V{Ot0uIl!ZR(vGZKS2IM*dOYbBWd|2*bs z0=C4vTT%v^_Hj@7B|}e%392*%c&C98SXFx++yEFn@`QQ9Fzqk<^f*J5BOWOCi+LSm7f@B$^=SfMh10WdJeo$RZ=(N9X2W+MB zNLNZ6yJc!U68Pa!iSuU+rZM9eugd%;ArTF6IVN1Q5FA_d`e<&+7i4crA^j2C0)gTBtF{o#`1bbsnZxLQ3AgM z6ksMJhIbiHN2THsp>2?sLTo$&1TP5QrjmyZKETS z#Gug)>C=*t)Y5&>3x4MKn8dWhLd*lvt2J%?U~`bXDl14KXS`x@=1CH1waJH#wsVzD zP(AVif7ebAv}X6voosrklAOR?x*xF{Z!7>^EaEZ1G`0gVTCqS?FL}u9+jnXs@V*LOSJ;ohp}ilSC0j#YJ98CoT?JNwZnY0c_H9ln_%+^ zYG~s|K-;UG*h!Xx-aI9k!14g_qt%78s$nbO+rMKvclfZq`JkuytfZwW>E9;Fi;)6| zEd!}8l3>{3heQHkbhKaqZ*91!qL4zTUjQU&s~S8tqhJCUb$!Hy*i99+UcBO0gT_JP zagPdYLhk#|7&Kl2PNDa%%1$-x1>6*5AhC}~3qa^Pu6&Kgx8&Q3YJa&ICgA;@%2)R@ zgW<*H$RkqXdKp`J-Omh-eZq4&Y8YK-mxQ6PY*$iD^`ni{gWeXh8w;CCs09E5O6S9c zLiP2~8I)u{-%N)MfS!YGE|GlKW+&{lnW`R-_x2{%=5DECh-8R4kmMKR@kH%N(xwC{ z$+5+BjK8&)dON7KAVz_una~*v(Y8kq0QFIABkt1}K)f-|R$uMflBR-0ukVd63-Qp5 ztBaB$@5yXR_PMG6Mw0g2hz0UA^cu19p|YWM4Zx*k(0XfUtm#Q1f*__7mp~FPmYPd5 zFk#4^Xb@ndOaK5Ao|rBrPc4G{&LL29P?n%aY9C0&ddL?>JF$K(0Fqe9=n^y; z{MF2a&pIH#E&in~i^6SCbOJ08jrWYk=G`BSKtf9@4(ZB*TR{6pLdth zX_&q{h?wdTl4RgN+G|$OV27359GMB4m5Sv#Rd#{TnA0*_N;%xKaVvV6cVI-2TI^)EE~dV&B~R1fG>l zo+Krbz=mK8yK1cmUmp?Jl3xWNzqCW5i;5HN#|NVn>NclLj3HJ8#3{mF2>m$Mi#1qV;jxoqn{kM9wk<-IA+Bvwjqr^CNfj05; zLa$8{`Y7EkDLJC;?A2aLR$x3iyBq{Ll2i4lqkhY{LtU=idO!h8BktD?5p!(0v8%cX ze>Vf~v^Rs&2Eb_(8%dS$sm;l9hF2lTjnsLEU5kd0?C86>axz#akqIO{S}HHlkNwdT&b^QiaqYi`YC z(CO!(j4P#TfhJJG=(!KU3fNkd9^DEzGMAfkF-$P$BBzyMT#m%;sNzSRJjxRP7m$K0%S2p(ml)FI--0!H0$8NlQG@UiI3EB1o320QT7 zrNu~{B%I{+Ix=`NH&87{h65l@;pzZms*W|tY#`LL>&7m>1LoktE`y|jC-P8DUUJ&$ z6v;9%`E@ebrJ)O#8$c40_K+A`3U3z>4OK}`JLofk-u^OTPW99t&TU1zjWXyqR=7_k@#7^VY3Mog6kyb^g` zl@HIq?UGdWu^>r&YM&JBL%_|!{Awn!`2Mtn!G8A!fCpe=D|LH1EFzRICRTKj|Dml0 z#I-=rJ(K1^vA-@BNY6(yp5NzM|gTQwtkylRjmXx1PQ$xn}`qcJ6U+PaD%A0OlegrALT zC?-tb{KhzK-P-Z1bF14llO(_drQhvW+KB(u7DgrVo@_Z(&C0!`NlKL}9*3<}HNLf} zVv$mF#61}cBOIbCMO$D8N^W`80!|;M+|DF7@klsWX1>KF@-NyNsA`jXl-H~f1Z2eS zSC7my$k=KufQ+XJ$j_M;oLy=d+JYw|-P-5QL9w`%zuON1*NJ0j&62#z&oLxVlH13T zmXRdGQ}HLJ^Zd{bNdJbrr)L8Dd=Rejc!93L3_z*(vcJ?1TG+Pug3r4%j{rj$X1)D7U*Fbv^+NHF7iB7JoY z0Pu4xcJQcjaAWL1e%h2$b`OoQ-)U{JRbG1GnjSohMwt({b^`&2v|_sODBXj8P8Hbx z{{XJ%X){U#8T4A|yypfp#O44%-QlvE?jV51zxIvAWH|O@1%oxe=T`HWQn?_8b7vp! zN$UI^z0k?5MFs zr3Nv_4Vb$vsZy!G_uMBPA`Q&CagkX(v^G{a!zJ$qK>cclo-R+A9mq*Sijk~EVETLK z`oD~2)>^}oK*rHvEYImt8Vdm#6u+;2^ilHEVy zWO@=?KzrGJGrmq|(I&~O_Kvjpjoklsh!~ckF^*S*MY%mKgEP}W3by}FY{dA6kp#e_ zg#&Ss31r-SH2E>N&g1XbcN^9Z(ICdT#y;=NfvLia1+P;tk~No`u*SN{lcX+BF`lh0 z%>Fynf1ucUkEq6%gWA33jmUlh*$2Ak1=e1R0gp%UEHegOkXp+2LpuT(`Eu7(mPU-W zTNU-St`I@ua?gs1VJLA^-wCul>K@F&^IZV&O#HXG>4`v@rH4qo3^xSK<`0Y* z0Y`wsU3ZDGfbOZ&N@Q3OsAA_yevOiZ`}yMF#$eDwuiyyX+6sA0!^eYDHiTx$KYzde zt$>*z#gtGhRcSC*kfcgL@6N>_ncg;r@YW7)ra&KQPEBlM(CFNrdN`Y{&FWdbNRC7! zh7CGr{Yg$Zv^bd%sAlH{B_%*d$&GGvJcDK^M~s&Vm{;S=Wh`pvdnLUBw`Avu>bCvJ z45xNn;PuvzU0^IMm7$U3#zj|wBpt}z@W9;90X$WXhj&A|VE}$;>rq3B;#nmKW6{%Z z2Z$yE94I#6F025 zx#t-5JV_QD<~#F4`_Hu^>|!7kk4`K@V}?+VLY2`=BLKr~H}c|=NTL#K06gc;&A0DV`*Bx_ zpn0lTekuE9pnG&C8RoDEoQkDIAgM(A`B6eUqk?G%w_gWgTOwc}he1RF{mUz@s?=HI zn1Fj@b@X)2oG$J41Q0i#?pr&!F-oCO8wF3=5DAX!{@o2hZYIc@2mnu?!TjEMF-U4}H3DTwqvT3HR=ZB^Jb*?AVbDjNZq|K*0#F1D=~*k{ zjcd5mjnZ*>mE@i?Nz=Raerm@8G!}OQEMNO78s?gDh8)H>0n*!?-bXz7B4MYoB?~r~ zMpX3yM*f^TcF=K0SS)Z@uBY6H@V-hUU<+Vks(6vg?OQiru#?A9ACe@$CaGmgZI6KGD}eKWO;xW(PlTV^1R{*RLkA6Ng6#tuqc)6fi-6~= zhd)p51qSW7kwFOaPiP@i!Y}h|3BNf1u4(8d(?fFFlIX^TV)k{CWN}7OFx2E1i{qiX zNwAkBEpryVev4ZhZ*0O@rYs+n=v6XFlR2E38|;ctYJg3t(TD&9#GN%UZ8sIPyWiS_ zx`#t;ve{n=(a~o1zpJfUSdcQ0R(ZWi1O%En-Pov1eI#IF|Jxx%1fFH-M@^@JYV&ix z_}eDo*HxL*!BGYlmBf@bD~k@!I{478m#m0QP+V{X2pgzN4z<7&uh@;9S9Aqr#9^>0 zNnZHqZHw}lN$5hJxnDKqQQoKmT@=v(;LO2}NQNprj3s%_ibhFK3xhO+ryI<9#7#{6 z(6*e}#LJhqm8%h`21(6`sJi)Bk}U#a$=~O!DQ&*XK``yj0H4|^P<1;5UfpB`q9J)? znm0_6Er-TrSZAWoAO*GxaQ}2Lpr!I1o>bB1zsEos><3#GbwC)|7hgl9ie=4+Dx6P# z6f?VSyf7H*BNj^-ZJdveG3_m!fZEA2Qcq@Wg5G8|$Bd$w9$_rQ*tuCD9RNp03uapZ zbBljy>ugUZ5IAsdxVGhalxuku z3aodt;;HrB0O`V@9R{8c_pQBEr(a5^g8~ShwvL;s>FXmU@)ef+wM{&_c>sFOwS&a< zm%WNL-X9`!s}Vq<%qHr}%j7^Kq78srFgO4G{q?M#s+Kv!+h_3mH2;+r7`Yh34{c~T zM228(Tmnx?^D(5e^98BI6PArG14-=p_lt&`6}OguYI-ojFs6cW@D z9w7bl3&2o_`GXM)JPl3hd5MV~Ra8UrisWwBl7;hVAWBX*mYH;x6mLkkc0|ChXb47{ zstkYV044xH=IBVTBEdM@3=@tXB|VhTp)id@%#E~pLGrj}VzAnhPnXz@y1jzXaxjZj zp65zp@ze%F=RDGuW|>-&*r0%Fk_i=hE( zD5L|A{c#SLPstD@6ZSMWtT1m;B&YB7pO{Vs`%_VW~o@YqrF@uyY zlBpTpp{?ZB%!<6H$rhAofK-oGB^zW03>$s?BlH!tgXJHV4jrYLApdXs<$(}6N|lV! z?l2fL0T1JeVf%kHHuS#22$lNn(yryyMuE{oGqmSG+uk}glq>8yVc<8Jm@V48zRG~@ zD1d1`z*Ot?*R#*J_I8MxHmLsgoDNjU=p4)R9<|6;9R#meJW_d|pk4t^9!Z{%W4N{R zVGQcb1QrvF&P;G~z5H(49WF3cc(;{Qat@-35S}U$NEy#h?F^*3g)E1C&t-7wfiCs0 zXRG2#c9dxB6Uakqf1dkD$@5iDsvK~<3FY%UmvTl#%uL+9D!_pfb2=rDo@Xf}Ayp-5 zYX?A0&+UnQw#peEFg!oBfuM=unlI&^;GEizj0wt^pwD<>V&e+fniW+)Pu1hRQ$h|? zL)mWr#-JxphWEQcz`h1V&pI%{K3?)Wk7#)cg0gUmGh~td5NQ0CHf#+7ITxhhJ^+ftAK>R3|ysmp08VRTlj|zSR zV7A>Y@2yQhfz9=ZXX2;;mf8xSdF(mUD>x;vF^X3OP^De+1o&T3dCwgLzdBidRA6nU zT$0}{s(|!k-(*_}*akvn5?_!EFeEBLCCnXunYqm0w;GC_nbMJ=c&GHv%=p0>O zkKS6$FiBQAWyD}Sc@_M>Hk-0@fCz{+of?d*WbVn-_=%LC6_UDa0v-%cx00Rlq(wUk zCC>hT=#Ao5o6>%FSlEDv3c*KzR!VvP2EE&CcS`F2?^>EXUR~~uIEy^tHD!?@(Kr*2N{E?wYb)cj3SI=`qJ)SE?BiV?n55z4 z1s6DpvC^x}0#*>ot11aNo08ABMUD+jR{>PcsW6=XMeTGi>R?S*^s;Mxnpf6Yw@JLc6fI4-(cozAy8*ahI?K6*UxoNR0T?#7|gb`%j;znyXU@3CG(@B z)Rt&T-rA|zr)F)k0!|5NkSSNzbz3BWy?X8--5B7fI?3%I^OZ+QBNFGW{c1mG=^}h( z@P@Ix8nnfk3_YHR$1eO3;%Z~Pa?>OQ`o94MA-?sEPSfE$!&J**e1g|>D!Y1R^62eul z_=ondS39vV>r^Q#I%-xAAI-;KJw<7Gyfoxr!G~Alvn^u6m#0`9v;1KB#~d1wV-8&Z zbf8D4kwL1>DQN^smw{y9_d9^s$f84AqYp8v=igstOP))@PDE*|0eK6QQ8U0s3VkIk?-m}T-W$tnb0@iB){#5TtfU~;&lddKhKtoD9@iHT6W>_Fd>tjZ<@NEwK!lO!Wr6#6GNnVi~`jo&&ktB zV_RgB6mx(_Yz+6O_7_#kT7WP&7`0!K}a4ES) zq@FY!E#mvYz;8S-&-1^>tc8Gg_3%bp^Y8jl<)*7k^LU>X=AarHvs+z{s?I238MgWi z+cIx$yz2+jiF&K!fE#GTDPftC-73L&K5MJ%iOj1=8iJ0Pq$9%_@{TSz=gvSL98kjR zHhm>iBA|1sRf-Qo%j}?*uj$AbgDMiIV!=bga9q=o3&6kUqH)ddxX5oZCOCN2K3)`H zFfyoRdJBTztWB1^c*#}q@KL!-+r(BeNxrso85EOo+lNjV&GP2JxGp9f830HC_u@4w z@%P=NaertNBPnYpHyLP~pft&Cg_8aX3lfvjyIJcjb|sO>%ZPE}k>_KapW2i%tFp~# zYiD|1os17-X{#P^xM1*V^wiZLfPt}N(*pMFxB$G0QE3z?<$JFnm3IrJ$lQ+6O)R6t zji67w>_(3ajAs`RE4s)V^y-Qjm^>B76I-L-x`{a9tn9E6RWyC z&HbeZXrJ8nHj2e6kF>Lf4rWC1EQ+}t>7&$-w8w6HF~^X5VEI=$-`Y|hN974?hR{qB z*M`=AeQeaHExh~2+PUGQCsdxDkH3K3o~pDaCzZ6YnF0ENGiVvpA^@O`bd8kCdA9VE1%^{2%(HGXx9DifKs6Cn{m&+=n$Nt_R_flt zSn51!cc%0@%g?u)MCEf+42JfjAJ_xpQ9bUyPn+i`Ft3hv6b4KTi>Hzpom-xyZK2`= zj~k$OlE(X?t!JhTs@Z&gaC|LGI#QcV@nHQyJz^CbAL^q9s(L`_31k{4DBZ8$ z-4I(GC`oF0wvo(i!2mGi2nut9btM0w^4Q-+Mt_`prk7YoFaQ&{=0isRHbIiu{h2+* zwHRh3B%Qj96+E|g=rlZn5M#^`Zb|IgP?Rw}pi2498{BjSSzs+}VMy<)*sM`a8GGhwhlIe{%XTQbqMvGq_TgB=bRvtm#_ z5D5&8R|#H~B*4*<4A_=GF&WP~3my!Z1Ri6^L|e+it{KAJ=ea!@dSvue>}y~?@J@!0 zEo@^DfT>Zz*LSO>O)s9ewk#LxS3{>6!cEweb_MhNt1~8$id843?C)M9wl7z`r91j&B&Q2%#j5oaErBIFz$b~2!@L9Qn8gT$aCjajR3T) zQBZhl*w@u;dd)iVI;t=L7O+*zIFFuor9?)CUCtZ~GS0LiBG7CE6h=A?4XixV94=xo z0IHsn8YOWRIkpTsDoKQ@7>dtxnanK<_bd@8I=3X!qen^eHP&eq(WAc!&LBMvho_ss zki~3gU`iNZByrx_$!hkN?TM;2@(yY~R%AFJ1MGf$ET zX$~^-@cZQBrOHHCbyCTfZR<%~{xZnlRB@rO zYU6Goo>bwL;Ge}K0dte!NxVk)IX4ZRbH@P?Qs_2B5|_LNrJm@?hvMRuf7Bds9l!@x zXSwGdeh#KRzag#Uf{^mdzP1j;`!ZRzQZ*89+*!o?s_F0ahRRgHg>4>yn(psBweC4e zh&1dgXf}b2fEDZ}BU$Zq$!pYQ#5n`DA;KiJ0E|=K)9A?G+S`nj8al3hLQkrmdO!(~ z)TuN)u#8iD06nV92g%JEk?ae)M+lakS0Ft!%A2vs06m*Qp}Nlj+$UQBc-jP`kjCA_ z8%|Z1D!iLT)pb=U+En8aiz5r<*%9Mf2KCVi2$V}TF2B1K88Ia-#zLZts@UyG8;RI4 zfXw+c_dvc1Mp*)_Wn(hT>XF>KC>`zhRF$U$(`Dp&oP^PElvsqp`EUJ6ieqK}N6>qV z!fObd88r}rN5`T{prr(4bX7a-H13kF=hZ^5$Y20U{?@Rw$QHS{H;BUP@^%Augf6P3w=)M$$?`I0&XUn%vOGfA;GNhQSInq zhOD_v5^W%zG3 zRO_1Mql*Pqewq-<~n9mUr0+L$ECA2%7nFA9YQ}5Qe)Y`wWa-y;}xa zvBNHA<6_%tBdl42tQ*u*S*Hyf7o#5ceP9N5_tPq+iw}VeKqbR4J@+G1MeF#~=He1a z0psLf<sb=T-k8I;K$U8k58$)3TpNcAqF(Q&t-T5$-F*c~p zbBW3r@(>VxA)XO{Ys$#dX{dy70WaN+Wa*LyP$J~ z@w*dyvQlc9B*i|&weSel<;UDoxCkgbE6?w?s#$W3JPoO2Pf8nFvX04Qn&P916Pt{D z9pqMZ-aChQ1sX=vpyt{%8%Q%E>^cP;!1T^!Sh~yz?4zL8(yrh!10$3d5>;pcg=rW26qM8ik1`)wyI857_YT^LI{3e>LK+24w_UIDwkOa%QL!Xg)VdC1L_c zdv_3-XT1I*i~)ZK_?TOvq@mzI8(bY|I~lb(uj*B7`8d!uF}!W(Z$X3&(5*xj^9W@& zcbaJ{puXGG8q-J##dc^2rz-)D%h__{!GL#Q4744y5r)+0IizZK?mv_%Vb|<7jT>|} zf48ABp@v5Rvz^~#5zw`*z|>PR+PPU5f1ldtemY7PjufI+u#=hIsfvP8Nu_!+Pz2n} zA=z#Vqj$ps2DlvvGIzbCA06J#8lo9=ODdU9@;HAlAr-44r4gIpo++km*xQ4KQ5pZ5*K%!TR#^ryP%2u=>SCvP2YO@24OHBb91+FVV z6fO;=$nB{a#*Gd`J%y(kJTMW1+SmfW@$JJbx5b2+H<07ps4VyKjGW;>B{lZT_?f=DccdleG7T zcGd#n{O%2>XS|!+l1mgfwR}z{*21V>0I>m%X3Q#fYcW9gpAuU6lJvJGRcNRYZ7og8 zkoo$r6nX?U%&UMBXJXSR(Z;wX3sfiRO9894C4_>v_AC9TDtWPm&ncXPNPdhwi6ybf zIGrPmY^_o9kx~HgM*|i$0=VVf`?nd+Mi~_5RX6S}uvRjeUhyR1NosK*Eo@YCrqmDdq3w-= z64jeg%!*Ey#bW_ug8iEvprunDcszQ+Jd2M5R_4G|@?q%z4-H89d6m)CjUfVZw|Wl8 zU-NM$2C!Jm{0=NnJQjeVD@pHBlBuea1IxduL(uE@IHAy<+O{QPdZuJ`co*xEH>D(P zlGw)MCUAV1Q0)vK+E%goURA>4$y)uM_OZy25fJ{MAZ9Vq)5WnT9+=;ko0^C-K46f* z;K|N)8p3=Pi+2V6W-p@1ohFS~r2gUy^aN zu{dt8QrH~Z!c*|CXJL|WZPcKnV-}GH6l1Abafn`JDP4%#0)P4-0K>$Q-gCVpM>5Gf zpmKlg5Fu5AcE1|P=y_CiB|`}0pT$#p76Zma7(0n2Lvql4oZkhY&OYX@@w6dDfmf`v zZD|(w#8%JOcO~ai*Q18$jf5=#Yg01P0?g*Ywl2v0aeF{_!|5>x76CLLV)jeQ!5Bjd zFaHQ*o&bXpkP&OAU8lcX;0iZ zs`iSx!e2(h36QF}HAs2i2*G&kS2aY;9oHsi-{=B)0@f~=1MK^>+R^HgfiVEQ%!H$= z$MGIwlZlIC`3u@}c~3|z{28$(LV}uJ&v;H-7BGvtfIqdfE)gPZ4e3;{0h8!8+!qXo@ zVX?v-9_`J??l{d>!v1lOqLY0o0BPXSG;voJL^O`FvnUDBATV7@0Ap8mYA6l_s=$`& z$q-~P=9VI_Jl7_`)uF>KHsZyb`3N}t!K(_kdAI!U_97Hhb<-Pufaj++-mQhaGDq9C zyn|Y%8;)xj6PM95V5OUVjb)E5Y?~DlhAlTkXf@^^RR1w;2&8ABvn~&f?v;!U(F@V& z*Q^t@yr;X!_ieHAjy#!~-sl=LlI2Sdqun~inZeFy&D&PVs2!{ImTBAiLji^k zj8}ooBbfA7ID{BH?Fr0H>57xrGVOSD@(A6YL64$4NL-eT(m^*6#dAO+9#4{wN{UZmMy7$T<@7sLJt-MNiH4`P z21&Ln1J%u1bfvNG<3^wBHM1sz`fJMk%B-0f72-ebl2= zn+-r0=C?L>2<7oI2qEb_o9v*84KWQjc6pgD|NQyDpnCk}CM67HF!QR#5qQ3}_v`TH zOW{%DMnMGKnbPU`suJU+%e`6q)dQ~ksKPv|R9d}Z28MYH194jUjiqdqbb>MtunZFe zFJm{{5JLy%_N>u7yOP|tqEt_DfcdRWL(1#xlcymhudAvSmHHT(H z2#nimSRiXfK2Jwbm+~oj!VqgR_ednU?6-JpL!%C;yuV(T4|+%Fa>T5F!EA2$Ci4V) z_C{@PnQC*EKnA$JqqW8iec>|PE3V^%!0ljMl9a@JP%;WGw*x$kmPZ-fsskv&pgqc< z9ZydGC*rKdodTP1=$?g6a_o<)mQ?lR!m`ZTD{$_Hq^hnfNZxsCmzVuab6I0K2=W+} zUSUa$NW2e>QOVgS)PjL01H5vF#F0TI30Cl1J6S!0_6~xEyiR)iVD)=jIT@J)-mL3d zOHHSQ@VkrYIt}n+?sH=|PPqf6=XDwj{=#h6lSv#s6 z-`ix?aydmJ6B8_IQ6f;18ytyON4>RARcM9XSo9mtSd$ga)Bii75If3lj0R%A2G5(1b_OY6!r2gAco=yC)8$BB_t&=NiGN>e!g*8TjwI4o zj|{UAsxz)6kdZeK;Rf+RrYG(2%(W$xJ#lBR8Je9r!bM&|gJv^9%b@FI=Sl$h zb5ByQQS=JrnbzK9^pHTBd%|u>8E#H(4`wx}8A!pcO(5Skw!ZAsVu44bM4q`x0&4-2 zY-4=C+AhDr&=zoM!vQ^7CVzBjG8!mp9)J?q9MI;VjA1GAgmpuS|9mudswBDm)Q<2b zC}LdMr)C<@+QRM$Fe}}Yu5isXylQ#EUYYE+gN73ToAW~(=|GzIF)-rQ<_W4n^QKf1 zz;o=@!W>>l2GSE|Vsq~o;Hflxf1%0v-q7LFFpxP$bTnCZa|9!HWA~f`7#aS29ohwl zXD~NFpJ}hH3?n|Zu{ix5El4Mu+R(8A-GW@sAd zsuT@$V9&G4M5;^xPqp{fhG#N_GgUv_oqYcnD3Dr63!clIx8Bw>rA^bW`1XW% z>=v7@0h&qjpIFbWn%|lN(CaeZhLq)zS{K}rO(Y2>COktG3qZ+jKF8V?$Q;c8n+-EU znSrCt2s9;Gfg4mAFAA}{Vwns;d^V^0izk_RLaij`n9?Kow9gy~N&IK~=9Z-dq0Qlu z#_z^=siQJpf#(&c0Opy-^ulPD&%fs)1~)4N3Z2^UmO7bddU8Wv z_&fnTb!iV>p6T_hQUcmAI8~1h<{7ZLOC3iwd)~^|7YfUKJklH@EleP75N$~%NJ&#x zZ`It-uE$14>pr#XU31!`kp9>HN5|68=|ks;ag7dzDwyC|c{kzy$%IhQlkcJtSfdR5 zdv2+t2a#g}=w~xZa7f1}9?~a3=j{8j<-ll!*$N>|(iZs~Y&_lCXUd1s22GMdWe&=f z28O1gL=S9uy!{n8y_Iev?40rB z@W*J~#9SKM3H}U>mI`hWvdKYe8pvXsA8=2|(9|agqf~=4XgYUa!Ww z)D=<=9C=?y`;g5i zu1m(Ogk>C=XOamRl3_)Q-b%&|HpzSLH@aeRDyU=vL~dw#COkJ2NkPZ@k{1(x^+=jT zl6>>Ic^dPhB!95of8RA8N7eZC=t?03^HE;?IULCIG&i0zVM?+2I&?76r~_S+U`)fD z+W(Y=)A@35QAMyH4f3U1f96o#!8HL-y~9fm^Ei#hvC<|fbLXZFH>c06D+fr@q3TB< zk9YC*X@?ro3EafK8-Oi?aAM>k_r#3k)()@Kk;ANl8zN(^O;xizE-?%@<`_%{osy#@ zxeO~{uM?J-Jf3~B;P>y^NO>1LD(og^h@&R@!->WuAx8wZfFxe+g3gc_*pWA$F_Z)y zFV$!haE6f5nL>pndt&0zSfKPVL?+{MjK8}BRp!i1*o}dz*dif&KD52Z?mo(1u9#5L z?-rAPg*V;_;IfG_j@>g}-D6WK+wx5O6y_QWv}rI_I|xZ)?F>6ucN>5q94%m!p6zNr zPq57jFysK;)=%xDUKF%#0xZ=Ij{F>eabwEeT;lELj6W^Uu0%l6r=494H5XjY_bkd{bGNXuK&mUsnt)$1JK9RFLp6fsra(8W}r13j); zmALF0;|~U%+cMmbS^=PR4+AX!?ER`mpX06lJB4$U&XHLeI=aaDk|wH+)^wMrS0AuZ-$y1Z$hDlqNuZks$3s_o6~ zsA^Aq|Ccw4DxFrep{v=D3hE%LGj#N4VH8Lu8VxcfUQhBGrwxW5fO}ML?VDGvZ5lRW zg7PL%Jt_d-qJa8m3p$hUnP^;$=t% zY*PZOPD65~X8yTU*iE1Ua>=Q!rZruv={1g*&m#5EE-dN_Q|@sx=ono>-v) zcHahIf)zpY06(=+NDW8W*}~nA9$X77)0AX@#TvPBx(t|T6Z@~$1uz4!=y`O1G60_0 zIbIKR>nv&H=U0gv&^Zvxiz^vV2e<`fG( zP`>Ihw@;3ayq@tw-Wjp{qtlDaj#M&ds;UmV$oZ4x;H`aBgMg#9zw9a{(_dWL1fD2( z8snZaJ!iEgan|sRiRcmYG!>pt?UdJ0J23^pKC#7Z`(;;Hy2i+02lFJ1t}gS`_}L57 zuC&Vok2YF%{wzhe6dy;?^f1CX8XT}kcU0y9RDX~!nXCHc-1axNo0ZR=HV zP=6rOOc*;xbSMzXAhNwtc%DS18xNRd!9hx5SO&=t?do9+$QNpDG5H*$xM$y#g6-B= zHd(qf@&rawW>f(3bss`TOLE!u_w9`WPMi7kZ<^zzh~-C13kdV4i;s4N-BUaH2_W%w z)-pnigg2yQ4sD&HmJ=K$^@QtuzYuwTjI!qdY^94Ecn-A8-0(`~85=98#wnlQ8nKnl z!MM98)_7dzzp|s#FJ98Ecf7!@!e<9!_n7aD#^=d@&W+AY(QrzX5jO$GN6_JNjA%Yj z_IJRzf$^j?0F93E^?ePhSJeT#2g}aa?|xqE($i<$l+Kf+qd9oT>KJt>iM5CU?v?f_ zpGjaI(LP(ia`yL)aWYj6nq(VBcMe_cu+uIkLrmU4M-QF>l*BciskCTsDV#a9J6YZv zZfHr`cs=`LjG@WMAR@-G(f~fHm>5aH2E}>&{q;JJe6%4WJZ+@UuBEu}3b0U8@^o;$ z`jim^2>7cx;Lstd4BuPlL9ac+O-x zedNtbZ|z6D{?MlJtWCJ1PI;6BMWGF;m@R{fxwLRdN_e@HcLQv=vfbMXo@qSpPvQ8g z9r7s?D+SUt;DWAvR7uk4wof|olEC8O#UtTQ;NB1A5w@Y=sdM3$;g-RYsgY1Rx%ziK)&=O-5d-m;2HvM_EibkM*$fQ3o!z~tHOJ3 zXY=06Zs-Z$ zbC{AvRRUx8gydKN=4g3z43l7EPN|Y<=@0D-#tLt3?{gZHq2O!0sLKVKQ<%Fp| zYuPuF^gGY2zK}=fjw#+jc_&~+Vsitab}WW1C8x;%#B8CO_LkHY#w&~1sJK71DNzj( zs6wHX1d)^{Ps6hr_=u6`@{v*kU3l@xFQC_FBms^d$u%O(-?veqrO5DcOO9f92a0wN zQgmU&g~eU#ap24=stq$S32k-52hrv@xz`@lL61@PcK5BGenEcRu zV8(wJ2YQ_`MxJ*7=vQP6muF9&0;-Z!2XNEV~05V)8uVhL!& z?N=Ri=#yVN6NdhwU7J#IpfJCcJSU)}t*UV#27W~{wl2~bnzK#f2}54cOzt}V;+{(W zz&4Nq;eWa`q;@W5pVIO7Lf5#?@}{3QuqV8y0NXUWk7NLNf|LQ{=B=$pqeOwSCO+B& z3iphUoVk2f15%e5co{C)bt{!kOG;GrN{a2gCIZOZ{VLI@-}HlS4(Lf9Y1Vd*We%{% z<#I+}H76#&c{VE~)2if460K7kS{b@+^Jv5<$voNs`l@ls{gHIOVB{x;w;E|-nwTon z@D2u!jZ{OYc3eP{cSCf<7!*sQJGwVt3zGLGmw$E|boCUl>P8euy0;{5FeCZY4mAoO zJFJh~_2|w~LRt*iIYd<TbMiD#)I z+W#(zHOB%upofCH$!kWjCxQK9!6c7!2Z@0hLIST!Ow2c`vITSV8)Mp8y-3Y%n%$mQ zDj7W!55s-|0gKn=rsoNd%`se6_wBTYL|BL9wW5 za65=(m;gmlXL*`{n^!T9%i@&`QfXqUo)=qYkRkNeRxWgmxvLs6Q@Wp5!}3S+VN_*K zl66lrxZzRz5aL;s!9O=LpW4Yv{nO#lc^)Og2zNP%2`lM6Wl>sQjydE!Li8NZONI3H34n^u)7^)AWqKij-7(Yp+d@1x#4nhVi=7yf#X86N=Xv z$D)`I?Q;WGWH|M9J!u5^)K<>Mi1FBye%_y#q(F~OFaRaTlbbeXXe}@_0I0Gu8Bf7{ z=8mdfqd2 z$|SMDdyau!z4Q919r;nT7PJfj=-sRU$S)u-coi^G?zL1bU4IJLNNpTGZa(Kem#On; ze^o=Y01KNNot|SL&rLH!GV-^xZWu$9+zwb9V~+28?q9E#dBmtT_BLb!nGNxZ<&0iW zqljHfdL;?q1(xx97HD@Kt!k9n!alX>DWqm0vnfXBU`NVQ{0Vwa)&B8_!vhbq z5%~anW!7}Lm2T}d2U^m}WPy$hx*ZgTaMtO`=<9@~tMh#k(DkUE47=0QC~qX^)(%cX zS9kWnLC9kln8PudW^J{Sp#diIZ#DQ>37Z(6A;NmWBw4}cytQSIt_ZFyF-z66UoLH) z#4v6df-O^0Nmm)qn55_LCR_R%VR>dK_xZn>M!^n`5O~-BiY=K?!>~AvIl74m$a87p z%4bA@(?v#AyI2O&==hPG+WPmNhUU$;$;dydDxl#Q)Qt#Td)FQfJgVAR*%&evK1)<( zZtYmZzCn-LROUdB5*BxTpbK)#l&Q-&U<(Wby-A8uxnX$Hh|{g>hxY8dear7Iryq47 z9=B?eIk+713}Hvt5hMRP=RW0Ssv3*PeY>{g`JNksL3WgZI&N@OmAHX!HS8O184fyV zS{y!R1^Cgf%ET*|PP@h&p8VE84eG|VHo~u-N7pzC&63P{?*9FOq5A9&ctye`m=^PR zDsjW;M%oPd--=SSW#Lc|&<5SHGKyvD?m$nB)+cF|jVhkEc%+RC3 zv(28vzpe=|a??+ql01w?<6>hDmEJX?Lc8SoZ;O6QhS1=^G0Qs&{hDPM@^k}hc8kH3 z0DAIldy)vjF2eM_$^-eKB(y zaDeN1ZK4}aM$mD?2;a}~UK_mp@4`wR0On?X%pEWNikiPbADzR^4ZoCZ-g?{2V)UAc zCouQ3F8}Se_JfzC1m+2^3v&m_Uz9=K1n?r zow+_$V+Cf_?k18Nx87%C_*aDotEU+Hp^e&PrH)L$Ydqp=|H*5V?%Yi2r+ovuiCAGv zOLu-+Hx*Tly1@QVJCm(>Aa^HDPiHz=^b^D7Cagtcjh^PVCk|?HVsH@J>C8G)>knb3AL$X8b`l)@-1nQ6^ z{OCbJ!*Kdh<24XGZAlucN1v$qgHh6JLmfTao|}QokQVuTZ#aeNjY#v%LSUbmj2IGo zn<;7J<5b02-0{EeA zMc-YQ8mML&fo5Y7Ycig|#9X5odod}oB?Bzzi0MVhv>U*x^m1AG#QEOd5Xy*#m_c*! z2U{nY-E;1c@nd}htv#J8@GANvFTM|jz)3|oeRlA9Fk+8oX z+CaF>O}Os#1Yr%EOk7NEB}kdgH@a(|XA%aXUP$u4yD)fN*5K&M(;qk2Bq!#Erg8Ku zKyWZIfhtmGCRC}4%aE3}L&}I{#)g69oqykV9!4JI^xN5Dz2aaHRq)-N8+N#5G2akqEx#5(`{{q?xCvBStH zVej0C5VQ-3K?|t&&^fAhD^ILe=Iopv_3s$X z&(`4vl?>te*f8DAdu|Bw=V4Y`slOVBZnoyhCa_@aN$&?~S}Mt32pN)L8q6&NEbeym zHx@3S?OC8!`P>?0+8heJlBTJ~X@WUEl!hcQ09p=o)%vNT3V&;#UeHaxl3&x<0`zM@ zw9(1*MDN)>ujEP3VPadUaFnpYcsk;@_R+OS{da*h1GzUJqV)@4Bo}nsx0bq zUO8J&sN^}Dp~CVhv-6864cgXEV-wtlj+P{OMTBv;4NE#qd>12w#9;`mA2Fo?Am4MZ z4Ur8SMeyuq{;A9+o)Tx9@90Mb0H%Z#iDL|zM|h%C2bm2m21g^nTbmM`l!AVpo_Hy3 z2ezkK>1dus@hhrffz*h1F&?GK$d^3dcx+k#Zte41mX7KQY!bkGR){&%(*iu=eLmG&I}`@htfo-C&7qXBY+`o}We5v^EI7T`k82a!oypWedMg|@ zD!Sg<>uj?gg_KR>T*i~fXlSMR0GqRBV#TVF3gl^j7eBinA1g-R+ITf=IKCd0C#=D9 zW+gi->af33N}$&P22+BUXAYQvK&G>$Bwz*p)(*?{6@z}3r8tafrU7#`CsrlqUQ*Yq zCQ2G4fl`Id0zAjV-=}tP9XdS*n*CSZvB?$|7%>yi21W9e7T;o@gUklfyKMnz7n6tK zm5|JPZYiX2$}~{8C5Pxtx2op!OE#a|IXV_wtW+-yIN8O6mfoYMYj|sC6f$F(cWu8< zmUCACc>fJ7ykdA5G1B2V5G?1O$g!!oEDOY_%oS0OFa@e)obgdMOp7bPK1SLGpSGq1I(a0M~Hz*a8EF zbR#8cy%ToB*aVBJ^6;o6l?069AO6-(xqcziCdNxx!^X9=-zl-RAV>!VOqGJ9v9+&v z+5jCORkZE8=E)yx<;_h%tdk7JGf!f9vb;7)EEdxnT}s#uAOq|?D&xuAMx=T)CQ&PC zkGB7F)V?g^)k_ajC8XLGvqg0!arIKtIE;X{0eAv)Fwkq#4J`R>ZUsaNW-Udac=vS; zU34;!CRH&y#fPZumy#qTZ9%PE)tM;xtsR6jjia5@7K0jVf#y2P({5~NuxAaKm1G5S z8^+D+g1X5{5Z2Rc=l_)*g#!)2M{$|#)aIZ%iq7#K1&bn9h{->b&ke@q4{c?PG(hR$E#1ZFdH1N6DDve^fUCUe)mY3&cN_QGHyaq0 zEmB4)f4<8e%gov~5I1X+>7ZF1G4{1d8rm)Cpc9{M^fX!JHHJjj8N#%KVQ_Fxn_k4! zDx79+Dw!As^!%C96A_K}M|gUJAz?!7h#wVxUh}XR2iV@)xMo~xV^Mn6Cd*1Fc6;)R zeO8#Ri7D|BQa6AbgP?AHnTi|jZuz%%Q&at5O}W2<0a3lfJIf*{po&KJ~uph(uPL@>C|X4b4mU^ zHxM);DYyBsxWx=P^_wTjBBMmZk(@;(Fh_u$#hQr4uHj?WvCV`#f4+|jj0gf6Mct)M zW^K^&4qgJf2#evxU4SWL%TXfZ9==uiG)lhbwi6VfXHB`$dAdQ-QQax#LwrKGENM18No(R(u z0F)urlE5`I_nG+4U}M_z)*eNmdKBgkiwt%RvtNzu038ajM;&mZYr|~}jY{LOjNxZ% zfFIgL$F=DdMtyWwLvKC+&n}Ryurnu#okfAe3O#w8x_IrlH^wCIxkCX>&tyZ73y2kB z0O!k=`Ory18dtuOiOtFuRqbV1=91UgmLJ;LmTNUF#2$<7P6V zLz}b72++EprG4=SvzGkhEusq1AiTzsF;m&cwZ#O6MM(hp=e1aY=OY$_uP4s{(Ap?T zEuJ-$UFI)TDdTETR`YoV70WxCN4G(XWG+XB04u!07a0?FuwRDdMW&K&U~>CCUD`U& zaD`= zlJnHYO@Hm6`3y~aVn^K%`PzJ!(SO7O>Z-4$y}V~cYa9#7s&ccB5&>NNRWHAi1&{hR zgLzbS-NH(e81fu!T^(Am7|QH;)Km;dY+McT%6@c}$ZRq>-#0AL0H z(ED9G4Tk29DQH&o8@Hs1P-+W{1iE@;ot}g?n_$3C{{f!H3Co5(ej#N;<|g`!3~jUt*ApF_?RwpLK?uXIqr) zMtkg<+y7D6dPn*i_t$4lXgK~+&C@=patS#WU`D4ZK*bZ&0I!x<8UM@5OMA_R(_i%a zW{Z6qRDD_jYVx(uL`XLZbFIc@W-4-q#B(D!uQgoS=~r_TCSWXqqZ69_W^#i`y2oPr z>FKTHrRvFRG0T7ri6qQ8w{xR_re-Y~oDyAzlr*Rcw5b}MgC^Yx`XO{(zrJb*Ou(U} z%TzK*mYH^%Wid_w5o(#Uou99bsXl9h#kzz^3(2YyNSBhuP(t#`+@4a>HQ@}$6am^& zIy*|($NOj%%oDX^f$VaoB&of7N>Z#55B%}E3yT%Ww{W9~RdT{1<%0lYm=EB8jc3gwG9OQs9%=rI?Y%tld~H7SjO{Nb|nnh9<}Ah z@V~;K+ThgIaP|Y!bHKHrb$Xu3!!sI;ULR{uQ??~tkhFo<$lPcFwykJusG|tr60=s8^pinE z#^H=bEaJj~B;Y(MUx84MP_kZco*{o|hr0Gt(?1QW@>^QXWzKtPQ8~3T)7e(Ox3;?81Xx1kgXw>1WEnQ0 zxfC2k6+ouRbSYVeB;+F&!?VR;6KFaA{rZgJOWPaBIohdTAX(l)lR=Gp1F;18@P(6=4B`-H?MnphTb=v53odxUl#EYsys2p9A&jyhE zNq*O!$H;G!rAQADD|$@xI}}$ix>>(_D&w>7K2C2Tf1wF9R)H1?0Au4nKKRY?Ma4) zrvUE}%q74RhR=?^F*?tc!OxJ)TN{OAZU_jPNq9SyujFMH^+?VRt=B$oe;PS3z^$D} zdC7}!XxQa7Afn-ZHbZQ5O4utFNj%Rohyj32wP0R1)pzZXa;Jd+It>^rd}WlFkU_14 z6eHN#E+t(^y1Y1sAv2QRAJzNiw=$Ah*oY|ZM zk9NshTPkf8OB*q+m2Js+(}_DwKXyJOkn*!XW(%m<^p_}Y0IFj_Auv5y7jykllmXk9+Nxx> zC!CFcYC}(~MEQP>2_(&GzNylaFHx+Bw}#nj%K?P46k6={*(l!U74YiytQM5o#70J%M%)xB(x+eI;$E7FzgNtBUo%bqpD20@Bo{8 zR%rQlIJ190@*zfHnF^rQMjDX#QOj5aSeQ7==%(tPQNr47MWa|ryXu7hww>H)qm2%i zGH8QK-Vi(zmKS5>Nw8ZU>5_a`DPSh1B;#2?Ow?SgeAkXrQz<_xuSdWp+}1G6wvC8! z4ji$Y7%(gF?8+Qf?GDh!gacOQ5A77qeMMbPhErbi86xOps+y|I+)xEjmBa-@{&D@9 z;E~8Dsl*CrKB&y2_-SVkpvslZps#fWtr`20Vi}}bjOd9`tg$3@>U>WgzITI7cxf$>XJo^Pxy0yosEF0>s_ZmpUhF*gn01gNX+>?C1cEgiA z*kmBJj}}ti{arhofncp|85aeFr%{wP5P*DnLqShwZst$YZZz7*(JBXj(-qiuE+go( zzjN>MMhttMCf4t)`6~^HN4I8}&zI?=j4)>{ng_;#VQ2&J1i!pY{)}Oig?PT!@@!AX zO43sU)dIqf+H>Zxj1)|u%aKIb^+peJ%iHF#O*@Q#>Ig!!9xO8ZmD0fVO)Oq@!XT=T z+%gj=dty{n9fa5(f_Q5Z;9dnw8k%lHbVLBcN>@dSrrp9!287@ z*X5a6TSArCKi;4-UV$L6fb!&6fMzVUI0uoT@w{a6LjjO%CJtnb;l|@2fyZD0eB9cX z$49M=aXlKeb=(UhuOD(NB?d!JAU}B->>Y9K0q`OD6^Wc%J5bGJcC;Nq#OY)n)zG84 z$WdfClEAn|rz#2G-U~om##aDFV(kO(FEtb)eO40G6V4pPrJLo-fm_}hn8O9E zSB7-CkIo?TEV3q|3cufhn>pb8&Xqw?a3FwF@SL6vGr?@NCDZ29 z7+T&FjAWB(KikX7@bWT`Vg#N{ytPRZ0OfQ{!#Q+E51Rq}Fu!ZhY*M%oDQjz|=Via_0raa!UV!dQ zkWWs)e038lBz$aEy$l%-lDs55WPWI5aH(l_rYfVM)SyXHI@VJ$j9S*)O(vdiy|dNE zIOC(j`=CFxBcrB=9eN!%_Gf(KqMLC~`CF;fkk^!`crxGc&jvE`L%Oe_n@uOEz4b)i zb8UJAjH3f9Z*CO4%D8`5xO+}gyR#*6*?D563@>4%3MS|f#!67Xp}5_|_H$;Yjt4LfCvjXz*CI?$~lW^d0vFq&cmhc zXn|$Vk&XhL(%Qrhu^o9w{34B&vkWyva;gbrp0TxIF701-tNCng>)Nc6JZaFT>J<4Q zNr1m+gv-(;fk~EuMqsRTfPkwS1{nu<-}`QeK)nYfHWmkBMCJPUDvNymeOMCGaY63) z0jU@J@!G+bQD;B2FOMknbVLFdqah}S%VDB!(lSf|8B615yDX!U(O|_S^_1}@AwRE~ zTbBKO64VY53XE=&t4fM#;KE+~$KO7md0s8ETTC*7nwa&#YT~tXWyeg#1zJX~gWDGs ztCCa_OVU=I_U}4YmETMPux3K?UrWGtb7M01qeR9MU{UU!5sx0KN=O|$m~ljBNoCfB zLF|6M2+!_GvY#^J>HVSIw}wok6Jrg+T|3YzM$zd_oZplTXJ?ecXbp3$eLNg!T$g$D zZs;G{?8xfZ{0Pe>S@z^n@TBLSz$V&~yui&3c2)$|Gq8NEz~oD<>jmhaF$I!pvSc8{ z+G-`#+`wSuhLu%ilxV0D0OkyUyeHU!0Mn~_ zmRVlab3?zij|!+cpvr`&{cI!O}w?^g``1Ix8dqxWj@AYxYrj6pytZb(P8MBkJz@V zogti^JF_v}uW)H!GFuDW(dh;4oc6~Y^!}h>t6L8`F)>NJo-ppZj1TiH0}mjcP}=wZ z(wpAd(PddPlf%K5vHg#WjA_IKFR<6!GZ>AkcqyhPWZ0i6zm&SyV= zryQwFB)3vQ<&E;|5eM!|TV6Yt4iY!9?c)}{Qj9C0;BLp$#59`!7zGxec}8XEIo0?e zHVhJn`!-%~lpN*|-r9P$ir7^1Jkoq~C6KH@NR>>0TC(Osx&xysu0>So{qEqqFfmZ& zARNtQ43~IG03Su>`)Vh%>n1~YM$P{5y;QatH>bn`4K zwM%dEo^z(_txb}(O;CeTdUg#O1WahA-8(aNvJ9d3aXBNFeE`cl0Xak1qLt zw5{b4k4%g`KIVq;uH=$ozp9ssn-rK`U8+bNhNyPKNh%qdisW{%j~!lUgEFDuN%Ee% z=s43n0TWx*#?mN%UXtl0qkUUda>NdDUaOMlrS1Q4v^U0DQBK>@h8jvn^F}Fta|EUZ z$y^FpnWTxCrh4-$fqlKSGc*tx!DI+%e$?-(*kMrk1Tq9<#;e8C@f^&3HfaYPU~Dk+ z@lBfsv7S&1HVUzA2`^Po=d8wSNqb(ZJRKJx!@-zuUHq*VppLJdd&DLgM?YaV=shA9 zPd&5MDSO(3~nkOa% z<>5PqFr(t~#gpJA*T2-f;ef`1ku^^&Jb5BwMUQ)`@VX|civ8?i<<@?56AY=^%3b=Q z{cO3=3<2s`I8}ij4os;eAgRQeF51n9S^$hhX>J%@`+N_{v;dDFf0?s9Mlx{8Ho&fA z2Q$>R=<$U8=rS}udKeNDrl(7_oCyHt3}G>EZF(0SUNvacR_Dn|JHseIDv&%crC{*N zP}Pf_#WB1bt47RS@Z4W>Cp8Ui;(liGX+Y=TeMBRMP=HAi=vPQwH!ztGW>XdulJX}B zU$!KX?7xFNewo!Y3nm_>A5Uk!KGR{jF6jjI!IzV&z+j z0GVa>QO?qBTgyCSG=p~5YsnhTMp!RePb#yRKVt;&x-Eo#XQ1uP+|X{kn{`~bOOo=s zFu)-3q+xm{b`zGtBlAOhW$c>OfZR3lAw$VMr2#f84PQHX%eWh-U0h`3wF8rspDi=o+G$fp^t$5|qK49}2NwbU1jmb!#U|sD zFuV*l?UWD-0G#Fr2=kF-zc*7m&&m+69|&|)tw!ja^pq5Ak^{S+DFra=deK%p{A*-g z_0|>{?rLBbPWgOIpvnZ&4b(WQFb=)O#=S^*a)9wXauRs1oe=!39U@b@LEZOQ^qhSQ zGT284jB(HQE{?{i$`c2M#$W;R@JAWMw|0nt>Nmm++6+l(k{UW+Fj$tEEi7lM@T!5y z%XG^4c($ssoEN4h67SD<#5!)MH7gt?>h}2H?|rMvKz2R?mnWGGK&d=vmB4bpW{bb~ z+(zuUv59xuUB--SmPd4N@0x=Eyk2x&NyO#}6;Jf!CH3AGe`xDx#45Oh;9A)&(-G|_ z#+OkdhOV#$%)z9WlGFAq2F9(|cn!k&L)&{YC?MK{Zd_RdI@G&8!DwT2p2e#=NIeDR ziDU6uPHbp>DgFdT4c^~tM}6sB79;2m<0N+%V5Tuf38ua?s4ng6@?^sCl=Rdk*e96E zrH$J6U~_k}?G$jTjex4#Q}W0(Q60MsVJ)a71)h*-mytApRY6*b>OFT-ytq44hS;Ez zj1%yj1B^ZC$Jna&RKKb!8)5uwkm-B#Dd4!WX6DBS2x#x$0#{- zSE8_JCIhNx>|4GzqlnuTI>Nh2F80*YSwnUH`|v@_8RW)5p1C_;lmw2NPla7z2VcEC zTb*z`Rd3a6ZVVd9XcV8N(pW=5>XQGV&59xWU%kA2232ZTLg1Ss&1$h{00z?LUN zl9-7Fzw608X2HGlU;Q@O(i#k8dq}IqQ-r(c$WVpUqKZZJze);Vij3qiN~j(k7ap@% z>8-72$Ml*f{7fdTBSKL5nN@9i_ z^51@s;leUH=KlWs_;Y1u;`&l&RUsLjoA27`r@^@9nz#abWe=~q2D)hz}ikDPVdo{-}F$oHtPrh>>p)alddHv&eUiMc^4mV}h43}jZNvC9v`OfXcc zl-|M~Q^lge(`1kKuqLBgzaiQXkT$$ur9l3S1FGRw)gme5rd{UIUYKiWI7$}6Z`-mi zNhgRh%7}S78*o6TV)?F)MoDLlb$qS;2!F`6FgkzJPTTX9?OHuO384^dV_#fKJ3cEiWds+iJp5&2gu6B@wu`JIb>J7BuxWI9vMUoY! zHOk-zc<$+kMnD!GpjQt%`e`qH)0H#TlIXo(LzIJGuv*Gm*Qsl{2Nu z^ypOESb8?GA z036i`8xgy_Tl-Y`7|#Y%y@%e0uLd~BWYBKQ&|fk4C39X|AsKLyznaYQWG2jOe{osi z98;C#>8&jVRKJLRnSkDrX(D{qL01yqo=jgDOiXJBW?~11Z@rIHlSHls6@KTfEelue z7#9$BKg$bR>dmwv!fS%T$h^jlGmWYYJ$mR#A`vJ_y5HK?g2ttolQHb1Udyna6&u4A+wn<~%!4T_;1#s&C&&nM2|Tl)4WS zM{lKRm7)KNJZi8WvsfVahHj8%BQn9+@fu5#h9o4$VgeYCt#Bq!_1?dXr?H^zcWHhq%`@8nMAOaG9wg1el84HDs zhOJtlpPryHs^40ui;G7NoHp}u^*7L;l2|h$jP;rpj_W?-ib>Y-?I3{`^N{$i zojvG}k@^MFDL#9kS#du*mf#WU*m7VVEe))s5z;O1mS5wHqWYnY$XkuO{dU@)QEmYx zTsx2ex>$73O+W@giS%ggx(7b+60gM0(TaNuBEhh0W zvx`%Jia7y(o&cImEXdz2maHFR3*)+$#;Fn$REYtA!3&O8awa-Jz}-Qt3GH#?pnv*<|q8l;qp^o}P&@3o`euGzvXyv;TGS z)P3fz6)q$1XmK9#J<>dx(9$3!VkBPAYX_IMX_OsG5G=2gw&lo>blc&+q8oCU=2Lyv z7LC{R2_R?deDz9Fy?35YgThIbT?Td9niND{Ouh?^7!B?A|6v&C}e#p!3A# z=8P&Z$vZ!G_;Jb$Ajf=brw1JtWh}luQdS7-InyAY?^?k1IS|QcRC2U?YGf3w@nvNU ze1OqXJ^y|D2h*J=i%Yq`FBEDaLcxlS@d2QxnM-~jLKh;EO1>y+?fbNq2`wtUIJGqS z(w-gtl?ikXWE?%6CixvE?8C&WZs0w|7*MYftmfjWrR1&i<)d>;tp|m`4PAt3tmN9k znK;j>0+0b?>(G;1$wNFz0_~?k~JPiyzqjJBEZ16U}E$f7(9IcehELm zYwLMYd}#KBuA$2Wnf`V{p>riSn4cKZuh#%G)Ny0t{?T!8^ay@v11Y>DKaeVWo-g(q zil<>n0#MyI`mfry!a>F6DPT{%V2&6wZSC)!w;`QdksXSkxj#VJYF?Z?rBQHP#&DH4 zgR(20%kjWy!Nab7=!N;A4MA)k)gWXB#i$uw`(ua$NVi#?nP9ObG&1NJy-0GVR7`|r zRNvY&Xt=3DXmB{K8|-0OLp83Z>ampTHxYGD_E19m$};+puTJ%d$B8|cJl1zO-{ z5pSOt@7TG)&>aN%tSX+Z1jY^!&JBk5&`rgc6dY=EpaUYNs#M{vR3^{C9vyMhXwj~# zrR=F|M};<~vE5Zc{$g2!hy8FWAl9Yrqegy2sshfqgsJdF4b%Cehe65o+aDxmjl03# zbE~0KI~(X>oHmMqlxAh$b?my<2zE5q4u+aAhJ6BhGM3cw;(kd zaL@qQVfNe_WaQ_AT_t%W+YRthA2Wd&_)(0^J$KNQv}txGyynS}XSr3dogp(E-j(a0c+>FLG4c{=2*Pb>jn9>%bR6uMUZTHO1 zEr)jZ#*~Bo;=(d#H1wEbTsryFRpBr~n#Rtwhqq5%VqK7PDUXNsU})=6lUm!plbTgy zgwy5_ldN_+*FwAF2BWm37@O0^n}n?!5Qh92vsl@Ak)me@k^=pccXI|K;B_nlTM0`^ znb1|2f%y<)wv5rfh6zu)`j2<)V3|z_&u0dTFai0qM}`0;bo#;0#xJEX^6lwVNj#%U zIjCUX+Fff@B)QW*5+ZAdU?PxI! zfPZW-w|2%Qu)?x%csVVjAbM*S10(GYwwp@^PyM9}PcMwh6!I7KM>s(Nwd>xjv(v5)FC0 zr9gxwrDtu`UuJ*=o2T>NFW>RTcsi{HAjn^+dddrzlqVA#bfvmR6s4;EG8xh#O(vG% z?+7Nh7D+AeIP2!aJwk!x^**tdNz%`$E7^G(zfh7$`m6&_Ny;C}>;Z{Oo zRg&6oZSSx@Dh$NO=S3Z{4!t`A8GYU{t_vRB&UQe1h5%;w?04KP`PSA(Y{s{3&qp10XjoxHnJn1@n#=e$OEh9c^T5mV;){bi+{bi5den*?T zoe|K<5Q_pB8)Bb{Z<$a@;z20C9qiezw8*>sg*tIQ#mra0b$7Nk706zO{^6rXV&Z-n1ZnXG1 zG7a9^QLXFT=%CleBi9c3x(-q^A21t{_Et(vpgMv6e#5g5jP?;j;dhtk^*wi6;04$*Y?6w_BHCguPEWMAcCwH3htV9RfQZIMSw9L$FosGo zd>W?#>?k3jJxs}CbZ$IIv4;t8UT`> zROw-_Op*czvvyVOsGM6ndJ5jM%0vHGLv4;T7yxvLz<75s%D-BYnfCFLWUGU^X@~iT zus6#PX4Ncy>16@(Zj2owL`&k@=a50SLsB~)lZYJyOi~hgdpq0ya|Cb8ndVG$o}q>m^jrseAz;P!oK^GL~kIjXOi?HuVJ-BB1Hz%7MTNyc!` zG6>GXV93{HOw5X|eJpl$X0G5Qk;->Z7ls3Fiiy}vAp9Tg@Ulj%L8!%#+CMLuP^;?HFWAtM&u0D> zuThnZ=X|(w3vp`Y_qqgtUc%o($;8~JK81m~8n5RLQVfg;4 zkMG(+C_ka-6 zBOevc{*`3L2B0)URF$|F;JN2k-ay$8v>t)mnU5)P;1GbZZMPwIGht6JK-$I6x)*5I zH4_MbXm_}K?$jXgZW`>*9GTQO zlc%!#Q6F7KlvJ^tVYw&((2<;gC+nLBULJ`XgJE=W0B~z_sy_`_AodirA$s#c6?LC+ z$-!jwYE%Mq*J#*Ac+(Qr@?ATo5H;nFYZQdB5aWG}&1B)rpRJFzR{rzK|N870-?d|K-U&Zm zWs-#9Bsp_0AalHDiZdAPz;^5D+<_K(w-z^-jWdkEZ|xe|TN~qU4$LtMuHmrH!OWE+ zcvZux3Lb?K(0epvDzr{Nx%GVf4gQ-p3Q(Qyf>NfWv+_KKora--A!Ps@GN|Rx+@WSd zMoCgTm;DfNk5;cIfPCgY8YwvRoRRuGn%f^D+Ne898~}4reDubPdKqJ=>bixg=)%Cn zTU%$v;zb!+r=%xFJ%1W+6aefiakFVA>~0WA!n!C;%+ncI@2wp>-e=HjOGC@opi~{5 zZHqsK*2RaCTlJBA8kOe5^ZBaMUdxO8^;_dq3J$x5d1M@;2Bb31>&FsLj@>vl?T#K~ ztpwlY=jH|vwxhFYlp&Pwt=UK2qTFz0NgG_{1AP>Rngb=79@N43ag0ISXH3`b?Q)x& zkGFQp&JhZosAIF*QNl&WQ~s>8>ZM;2UatXYKli>NnGkcP1TbxdjHMF`kXS(jC5$|k0{XJ33MT2mxHl+Ly=#$~ z3HO8%3VsNCJafV;z}wYDm>V%bXVp2GST+F-suO!RFRJw#UW!)($(U zdnT}V8krxHDZE?q+13)XkHJu$O1_?myFK`YZmi%mh zV$|?3ZbZ+vpXJf+>F%eEORw#>ZyaUfNI;q@y-q8l7^Pi;wjKo zD`DH`Se{Wq4TbQY``4p0>6BHr&uJ4r{-w%z1;Xg5I+n(SW0WMAJd8%kP14Z=kR