@kontur.candy/tools 2.154.0 → 2.156.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/distr/Common/AsyncUtils.js +1 -3
- package/distr/Common/CandyApiClient/CandyApiClient.js +25 -138
- package/distr/Common/CandyApiClient/CandyApiClientContext.js +1 -8
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -2
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -16
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -12
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -12
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -13
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +1 -3
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +1 -8
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -7
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +9 -12
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +1 -1
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +4 -72
- package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
- package/distr/Common/CandyApiClient/IsBuffer.js +1 -2
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +12 -7
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +1 -3
- package/distr/Common/CandyApiClient/Types/DraftFullId.js +1 -1
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +5 -6
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +9 -12
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +5 -6
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +5 -6
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +1 -3
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Guid.js +1 -1
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +1 -1
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +1 -1
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +6 -0
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +5 -6
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +1 -1
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +5 -6
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +1 -1
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +5 -6
- package/distr/Common/CandyApiClient/Types/TestClassification.js +1 -1
- package/distr/Common/CollectionUtils.js +1 -3
- package/distr/Common/CommonConstants/SectionNames.js +1 -3
- package/distr/Common/Comparers.js +2 -16
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +1 -5
- package/distr/Common/EndPoints.js +1 -2
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js +5 -6
- package/distr/Common/Errors.js +1 -19
- package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -3
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +1 -1
- package/distr/Common/Funcs.js +1 -5
- package/distr/Common/GFV.js +1 -1
- package/distr/Common/Hooks/UseLocalStorage.js +3 -10
- package/distr/Common/HttpClient/AuthenticationMode.js +3 -7
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +1 -3
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +1 -3
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js +1 -1
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +1 -1
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +6 -11
- package/distr/Common/HttpClient/HttpClient.js +9 -80
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +1 -1
- package/distr/Common/HttpClient/IHttpClient.js +1 -1
- package/distr/Common/IndentString.js +1 -3
- package/distr/Common/IntRangeUtils.js +3 -10
- package/distr/Common/IterableUtils.js +3 -76
- package/distr/Common/KCLangRuntimeUtils.js +1 -87
- package/distr/Common/ModelPath/BuildIterationSequence.js +1 -5
- package/distr/Common/ModelPath/EachCurrentCollision.js +5 -6
- package/distr/Common/ModelPath/IEquatable.js +1 -1
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +1 -8
- package/distr/Common/ModelPath/Map/Map2.js +2 -24
- package/distr/Common/ModelPath/Map/ModelPathMap.js +1 -8
- package/distr/Common/ModelPath/ModelPath.js +16 -140
- package/distr/Common/ModelPath/ModelPathBuilder.js +1 -14
- package/distr/Common/ModelPath/ModelPathHelper.js +1 -2
- package/distr/Common/ModelPath/PathMatcher.js +5 -24
- package/distr/Common/ModelPath/PathSplitHelper.js +1 -6
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +1 -10
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +1 -10
- package/distr/Common/ModelPath/Set/ModelPathSet.js +1 -10
- package/distr/Common/ModelPath/Set/Set2.js +1 -16
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -9
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +1 -1
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -3
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -17
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -30
- package/distr/Common/NidusClient/INidusClient.js +1 -3
- package/distr/Common/NidusClient/NidusClientContext.js +1 -14
- package/distr/Common/NidusClient/NidusClientImpl.js +1 -18
- package/distr/Common/PathConstants.js +1 -3
- package/distr/Common/StringArrayKey.js +1 -8
- package/distr/Common/TypingUtils.js +7 -26
- package/distr/Common/UUID.js +1 -4
- package/distr/Common/UseAsyncEffect.js +3 -7
- package/distr/Common/UseShowOnce.js +1 -17
- package/distr/Common/UseTypedSelector.js +1 -3
- package/distr/Common/getRngSchemaFilename.js +21 -0
- package/distr/Common/hashUtils.js +1 -4
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +1 -23
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +3 -10
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -10
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +5 -23
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +1 -27
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -2
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +3 -10
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -9
- package/distr/Tools/src/BuildTasks/FSTask.js +1 -19
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +1 -19
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +1 -16
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -11
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +1 -10
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +1 -10
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -10
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +5 -26
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +1 -38
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +2 -42
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +4 -39
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +4 -7
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +4 -10
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +9 -17
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +3 -5
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +1 -13
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +1 -20
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +3 -48
- package/distr/Tools/src/BuildTasks/ReadFormSource.js +7 -32
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +5 -32
- package/distr/Tools/src/BuildTasks/Version.js +1 -10
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js +1 -10
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +5 -9
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +1 -5
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +34 -70
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +1 -12
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +1 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +1 -67
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +3 -28
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +3 -41
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +3 -23
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +3 -20
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +1 -23
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +1 -37
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +1 -13
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +1 -40
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +8 -49
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +1 -13
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +1 -17
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +1 -4
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +10 -19
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +12 -26
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +1 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +10 -44
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +1 -17
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -27
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +11 -16
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +1 -1
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +1 -1
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +1 -1
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +1 -4
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +23 -34
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +1 -4
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +1 -15
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +3 -19
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/autocalc/{gfv}.calc.js +1 -2
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/helpers/setKppValue.js +1 -2
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +1 -6
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +1 -11
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/validations/kppValue.js +3 -4
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +1 -4
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +1 -23
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +1 -4
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +7 -23
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +26 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +48 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +1 -37
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +1 -4
- package/distr/Tools/src/CandyCLI.js +7 -56
- package/distr/Tools/src/CheckNodeJsVersion.js +3 -10
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +1 -10
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +4 -29
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -6
- package/distr/Tools/src/Commons/ErrorUntyped.js +1 -1
- package/distr/Tools/src/Commons/EventObject.js +10 -20
- package/distr/Tools/src/Commons/ExecUtils.js +3 -9
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -7
- package/distr/Tools/src/Commons/FormGlobsUtils.js +1 -33
- package/distr/Tools/src/Commons/FsUtils.js +1 -12
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -8
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +4 -15
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +2 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +1 -14
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -5
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -4
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +1 -36
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +1 -9
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +5 -35
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +9 -11
- package/distr/Tools/src/Commons/Locks/Lock.js +1 -8
- package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -5
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +1 -9
- package/distr/Tools/src/Commons/Logging/ELKLogger.js +17 -22
- package/distr/Tools/src/Commons/Logging/ILogger.js +1 -5
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +3 -21
- package/distr/Tools/src/Commons/Logging/Logger.js +9 -29
- package/distr/Tools/src/Commons/Logging/StaticLogger.js +11 -15
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -1
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +3 -37
- package/distr/Tools/src/Commons/PathPattern.js +1 -13
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -4
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +13 -200
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +1 -20
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +7 -10
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +1 -15
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +1 -15
- package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -13
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +5 -11
- package/distr/Tools/src/Commons/TimingUtils.js +1 -2
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +13 -51
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +4 -14
- package/distr/Tools/src/GenerateReadMe.js +1 -13
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +10 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +10 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/Options/CandyToolOptions.js +3 -11
- package/distr/Tools/src/ReadFarmConfig.js +1 -5
- package/distr/Tools/src/SelfUpdate.js +4 -28
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +1506 -1257
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.LICENSE.txt +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +843 -623
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.LICENSE.txt +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +777 -1117
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1665 -2015
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +9 -55
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +777 -1117
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1665 -2015
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +9 -55
- package/package.json +10 -10
- /package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/schemas/{{gfv}.rng.xml → {gfv}.0.rng.xml} +0 -0
|
@@ -1,36 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.BuildGeneratorFromSourcesTask = void 0;
|
|
9
|
-
|
|
10
8
|
var _path = _interopRequireDefault(require("path"));
|
|
11
|
-
|
|
12
9
|
var _chokidar = require("chokidar");
|
|
13
|
-
|
|
14
10
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
15
|
-
|
|
16
11
|
var _pLimit = _interopRequireDefault(require("p-limit"));
|
|
17
|
-
|
|
18
12
|
var _ExecUtils = require("../../Commons/ExecUtils");
|
|
19
|
-
|
|
20
13
|
var _ILogger = require("../../Commons/Logging/ILogger");
|
|
21
|
-
|
|
22
14
|
var _StaticLogger = require("../../Commons/Logging/StaticLogger");
|
|
23
|
-
|
|
24
15
|
var _ChainableValueProducer = require("../../Commons/TasksCore/ChainableValueProducer");
|
|
25
|
-
|
|
26
16
|
var _EngineStructureUtils = require("../EngineStructureUtils");
|
|
27
|
-
|
|
28
17
|
var _ProcessUtils = require("../ProcessUtils/ProcessUtils");
|
|
29
|
-
|
|
30
18
|
var _CreateAsyncGenerator = require("./GeneratorWorker/CreateAsyncGenerator");
|
|
31
|
-
|
|
32
19
|
const generatorBuildLimit = (0, _pLimit.default)(1);
|
|
33
|
-
|
|
34
20
|
class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableValueProducerBase {
|
|
35
21
|
constructor(pathToEngineSources, logger = (0, _StaticLogger.getLogger)()) {
|
|
36
22
|
super();
|
|
@@ -40,22 +26,18 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
|
|
|
40
26
|
this.currentGenerator = void 0;
|
|
41
27
|
this.buildProcess = void 0;
|
|
42
28
|
this.buildResultWatcher = void 0;
|
|
43
|
-
|
|
44
29
|
this.handleUpdate = async () => {
|
|
45
30
|
this.logger.log("Generator sources updated");
|
|
46
31
|
await this.emitUpdate((0, _CreateAsyncGenerator.createAsyncGenerator)(_path.default.join(this.pathToEngineSources, "Generator"), this.useWatch, this.useWatch));
|
|
47
32
|
};
|
|
48
|
-
|
|
49
33
|
this.logger = logger.withPrefix("GENERATOR");
|
|
50
34
|
this.pathToEngineSources = pathToEngineSources;
|
|
51
35
|
}
|
|
52
|
-
|
|
53
36
|
async getCurrentValue() {
|
|
54
37
|
return generatorBuildLimit(async () => {
|
|
55
38
|
if (this.currentGenerator != undefined) {
|
|
56
39
|
return this.currentGenerator;
|
|
57
40
|
}
|
|
58
|
-
|
|
59
41
|
if (this.useWatch) {
|
|
60
42
|
if (this.buildProcess == undefined) {
|
|
61
43
|
this.buildProcess = await this.runWatchProcessStarted();
|
|
@@ -65,19 +47,15 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
|
|
|
65
47
|
} else {
|
|
66
48
|
this.currentGenerator = await this.acquireGeneratorFromSources();
|
|
67
49
|
}
|
|
68
|
-
|
|
69
50
|
if (this.currentGenerator == undefined) {
|
|
70
51
|
throw new Error("InvalidProgramState");
|
|
71
52
|
}
|
|
72
|
-
|
|
73
53
|
return this.currentGenerator;
|
|
74
54
|
});
|
|
75
55
|
}
|
|
76
|
-
|
|
77
56
|
async beginListening() {
|
|
78
57
|
this.useWatch = true;
|
|
79
58
|
}
|
|
80
|
-
|
|
81
59
|
async stopListening() {
|
|
82
60
|
if (this.buildProcess != undefined) {
|
|
83
61
|
try {
|
|
@@ -88,14 +66,11 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
|
|
|
88
66
|
this.logger.error(`Failed to stop process: ${error}`);
|
|
89
67
|
}
|
|
90
68
|
}
|
|
91
|
-
|
|
92
69
|
if (this.buildResultWatcher != undefined) {
|
|
93
70
|
this.buildResultWatcher.close();
|
|
94
71
|
}
|
|
95
|
-
|
|
96
72
|
this.useWatch = false;
|
|
97
73
|
}
|
|
98
|
-
|
|
99
74
|
async acquireGeneratorFromSources() {
|
|
100
75
|
const action = (0, _ILogger.buildActionBegin)(this.logger, "Build generator");
|
|
101
76
|
const buildDirectory = await this.getBuildDirectory();
|
|
@@ -106,17 +81,13 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
|
|
|
106
81
|
action.complete();
|
|
107
82
|
return result;
|
|
108
83
|
}
|
|
109
|
-
|
|
110
84
|
async getBuildDirectory() {
|
|
111
85
|
return (await (0, _EngineStructureUtils.isNewEngineStructure)(this.pathToEngineSources)) ? _path.default.join(this.pathToEngineSources, "Generator") : this.pathToEngineSources;
|
|
112
86
|
}
|
|
113
|
-
|
|
114
87
|
async runWatchProcessStarted() {
|
|
115
88
|
this.logger.log("Start watch");
|
|
116
89
|
const buildDirectory = await this.getBuildDirectory();
|
|
117
|
-
|
|
118
90
|
const result = _ProcessUtils.ProcessUtils.createShellProcess("npm", ["run", "generator:build", "--", "--watch"], buildDirectory);
|
|
119
|
-
|
|
120
91
|
result.onStdOut.subscribe(data => {
|
|
121
92
|
this.logger.verbose(data.toString());
|
|
122
93
|
});
|
|
@@ -128,35 +99,27 @@ class BuildGeneratorFromSourcesTask extends _ChainableValueProducer.ObservableVa
|
|
|
128
99
|
this.logger.log("Successfully complied");
|
|
129
100
|
return result;
|
|
130
101
|
}
|
|
131
|
-
|
|
132
102
|
async waitFirstCompilationCompleted(result) {
|
|
133
103
|
await result.waitOutputIncludesString("Successfully compiled");
|
|
134
104
|
}
|
|
135
|
-
|
|
136
105
|
async createBuildResultWatcher(pathToGeneratorOutputDir) {
|
|
137
106
|
let maskToObserveGeneratorChanges;
|
|
138
|
-
|
|
139
107
|
if (await (0, _EngineStructureUtils.isOldGeneratorSourcesStructure)(this.pathToEngineSources)) {
|
|
140
108
|
maskToObserveGeneratorChanges = ["**/*.js"];
|
|
141
109
|
} else {
|
|
142
110
|
maskToObserveGeneratorChanges = ["Generator/src/**/*.js", "index.js"];
|
|
143
111
|
}
|
|
144
|
-
|
|
145
112
|
const watcher = (0, _chokidar.watch)(maskToObserveGeneratorChanges, {
|
|
146
113
|
ignoreInitial: true,
|
|
147
114
|
cwd: pathToGeneratorOutputDir,
|
|
148
115
|
ignorePermissionErrors: false,
|
|
149
116
|
usePolling: true
|
|
150
117
|
});
|
|
151
|
-
|
|
152
118
|
const handleAnyFsEventDebounced = _lodash.default.debounce(() => this.handleUpdate(), 500);
|
|
153
|
-
|
|
154
119
|
watcher.on("all", handleAnyFsEventDebounced);
|
|
155
120
|
watcher.on("error", handleAnyFsEventDebounced);
|
|
156
121
|
return watcher;
|
|
157
122
|
}
|
|
158
|
-
|
|
159
123
|
}
|
|
160
|
-
|
|
161
124
|
exports.BuildGeneratorFromSourcesTask = BuildGeneratorFromSourcesTask;
|
|
162
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL0dlbmVyYXRvci9CdWlsZEdlbmVyYXRvckZyb21Tb3VyY2VzVGFzay50cyJdLCJuYW1lcyI6WyJnZW5lcmF0b3JCdWlsZExpbWl0IiwiQnVpbGRHZW5lcmF0b3JGcm9tU291cmNlc1Rhc2siLCJPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2UiLCJjb25zdHJ1Y3RvciIsInBhdGhUb0VuZ2luZVNvdXJjZXMiLCJsb2dnZXIiLCJ1c2VXYXRjaCIsImN1cnJlbnRHZW5lcmF0b3IiLCJidWlsZFByb2Nlc3MiLCJidWlsZFJlc3VsdFdhdGNoZXIiLCJoYW5kbGVVcGRhdGUiLCJsb2ciLCJlbWl0VXBkYXRlIiwicGF0aCIsImpvaW4iLCJ3aXRoUHJlZml4IiwiZ2V0Q3VycmVudFZhbHVlIiwidW5kZWZpbmVkIiwicnVuV2F0Y2hQcm9jZXNzU3RhcnRlZCIsImNyZWF0ZUJ1aWxkUmVzdWx0V2F0Y2hlciIsImFjcXVpcmVHZW5lcmF0b3JGcm9tU291cmNlcyIsIkVycm9yIiwiYmVnaW5MaXN0ZW5pbmciLCJzdG9wTGlzdGVuaW5nIiwia2lsbCIsImVycm9yIiwiY2xvc2UiLCJhY3Rpb24iLCJidWlsZERpcmVjdG9yeSIsImdldEJ1aWxkRGlyZWN0b3J5IiwiY3dkIiwicmVzdWx0IiwiY29tcGxldGUiLCJQcm9jZXNzVXRpbHMiLCJjcmVhdGVTaGVsbFByb2Nlc3MiLCJvblN0ZE91dCIsInN1YnNjcmliZSIsImRhdGEiLCJ2ZXJib3NlIiwidG9TdHJpbmciLCJvblN0ZEVyciIsInN0YXJ0Iiwid2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQiLCJ3YWl0T3V0cHV0SW5jbHVkZXNTdHJpbmciLCJwYXRoVG9HZW5lcmF0b3JPdXRwdXREaXIiLCJtYXNrVG9PYnNlcnZlR2VuZXJhdG9yQ2hhbmdlcyIsIndhdGNoZXIiLCJpZ25vcmVJbml0aWFsIiwiaWdub3JlUGVybWlzc2lvbkVycm9ycyIsInVzZVBvbGxpbmci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QSxPQUFPLENBQUNPLEVBQVIsQ0FBVyxPQUFYLEVBQW9CSCx5QkFBcEI7QUFDQSxXQUFPSixPQUFQO0FBQ0g7O0FBbEl5RiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZTV2F0Y2hlciB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tIFwiY2hva2lkYXJcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwTGltaXQgZnJvbSBcInAtbGltaXRcIjtcblxuaW1wb3J0IHsgZXhlY0NvbW1hbmRBc3luYyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0V4ZWNVdGlsc1wiO1xuaW1wb3J0IHsgYnVpbGRBY3Rpb25CZWdpbiwgSUxvZ2dlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcbmltcG9ydCB7IE9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBpc05ld0VuZ2luZVN0cnVjdHVyZSwgaXNPbGRHZW5lcmF0b3JTb3VyY2VzU3RydWN0dXJlIH0gZnJvbSBcIi4uL0VuZ2luZVN0cnVjdHVyZVV0aWxzXCI7XG5pbXBvcnQgeyBGb3JtR2VuZXJhdG9yIH0gZnJvbSBcIi4uL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBQcm9jZXNzVXRpbHMgfSBmcm9tIFwiLi4vUHJvY2Vzc1V0aWxzL1Byb2Nlc3NVdGlsc1wiO1xuaW1wb3J0IHsgU2hlbGxQcm9jZXNzSGFuZGxlIH0gZnJvbSBcIi4uL1Byb2Nlc3NVdGlscy9TaGVsbFByb2Nlc3NIYW5kbGVcIjtcblxuaW1wb3J0IHsgY3JlYXRlQXN5bmNHZW5lcmF0b3IgfSBmcm9tIFwiLi9HZW5lcmF0b3JXb3JrZXIvQ3JlYXRlQXN5bmNHZW5lcmF0b3JcIjtcblxuY29uc3QgZ2VuZXJhdG9yQnVpbGRMaW1pdCA9IHBMaW1pdCgxKTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkR2VuZXJhdG9yRnJvbVNvdXJjZXNUYXNrIGV4dGVuZHMgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPEZvcm1HZW5lcmF0b3I+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhdGhUb0VuZ2luZVNvdXJjZXM6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogSUxvZ2dlcjtcbiAgICBwcml2YXRlIHVzZVdhdGNoID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjdXJyZW50R2VuZXJhdG9yPzogRm9ybUdlbmVyYXRvcjtcbiAgICBwcml2YXRlIGJ1aWxkUHJvY2Vzcz86IFNoZWxsUHJvY2Vzc0hhbmRsZTtcbiAgICBwcml2YXRlIGJ1aWxkUmVzdWx0V2F0Y2hlcj86IEZTV2F0Y2hlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoVG9FbmdpbmVTb3VyY2VzOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciA9IGdldExvZ2dlcigpKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyLndpdGhQcmVmaXgoXCJHRU5FUkFUT1JcIik7XG4gICAgICAgIHRoaXMucGF0aFRvRW5naW5lU291cmNlcyA9IHBhdGhUb0VuZ2luZVNvdXJjZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPEZvcm1HZW5lcmF0b3I+IHtcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRvckJ1aWxkTGltaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdlbmVyYXRvciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50R2VuZXJhdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlV2F0Y2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5idWlsZFByb2Nlc3MgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRQcm9jZXNzID0gYXdhaXQgdGhpcy5ydW5XYXRjaFByb2Nlc3NTdGFydGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRSZXN1bHRXYXRjaGVyID0gYXdhaXQgdGhpcy5jcmVhdGVCdWlsZFJlc3VsdFdhdGNoZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzLCBcIkdlbmVyYXRvclwiLCBcImRpc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50R2VuZXJhdG9yID0gY3JlYXRlQXN5bmNHZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzLCBcIkdlbmVyYXRvclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlV2F0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZVdhdGNoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRHZW5lcmF0b3IgPSBhd2FpdCB0aGlzLmFjcXVpcmVHZW5lcmF0b3JGcm9tU291cmNlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdlbmVyYXRvciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEdlbmVyYXRvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJlZ2luTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnVzZVdhdGNoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuYnVpbGRQcm9jZXNzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZFByb2Nlc3MgPSB0aGlzLmJ1aWxkUHJvY2VzcztcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkUHJvY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhd2FpdCBidWlsZFByb2Nlc3Mua2lsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHN0b3AgcHJvY2VzczogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5idWlsZFJlc3VsdFdhdGNoZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkUmVzdWx0V2F0Y2hlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlV2F0Y2ggPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVVwZGF0ZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiR2VuZXJhdG9yIHNvdXJjZXMgdXBkYXRlZFwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VXBkYXRlKFxuICAgICAgICAgICAgY3JlYXRlQXN5bmNHZW5lcmF0b3IocGF0aC5qb2luKHRoaXMucGF0aFRvRW5naW5lU291cmNlcywgXCJHZW5lcmF0b3JcIiksIHRoaXMudXNlV2F0Y2gsIHRoaXMudXNlV2F0Y2gpXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgYXN5bmMgYWNxdWlyZUdlbmVyYXRvckZyb21Tb3VyY2VzKCk6IFByb21pc2U8Rm9ybUdlbmVyYXRvcj4ge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBidWlsZEFjdGlvbkJlZ2luKHRoaXMubG9nZ2VyLCBcIkJ1aWxkIGdlbmVyYXRvclwiKTtcbiAgICAgICAgY29uc3QgYnVpbGREaXJlY3RvcnkgPSBhd2FpdCB0aGlzLmdldEJ1aWxkRGlyZWN0b3J5KCk7XG4gICAgICAgIGF3YWl0IGV4ZWNDb21tYW5kQXN5bmModGhpcy5sb2dnZXIsIGB5YXJuIGdlbmVyYXRvcjpidWlsZGAsIHtcbiAgICAgICAgICAgIGN3ZDogYnVpbGREaXJlY3RvcnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVBc3luY0dlbmVyYXRvcihcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLnBhdGhUb0VuZ2luZVNvdXJjZXMsIFwiR2VuZXJhdG9yXCIpLFxuICAgICAgICAgICAgdGhpcy51c2VXYXRjaCxcbiAgICAgICAgICAgIHRoaXMudXNlV2F0Y2hcbiAgICAgICAgKTtcbiAgICAgICAgYWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRCdWlsZERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IGlzTmV3RW5naW5lU3RydWN0dXJlKHRoaXMucGF0aFRvRW5naW5lU291cmNlcykpXG4gICAgICAgICAgICA/IHBhdGguam9pbih0aGlzLnBhdGhUb0VuZ2luZVNvdXJjZXMsIFwiR2VuZXJhdG9yXCIpXG4gICAgICAgICAgICA6IHRoaXMucGF0aFRvRW5naW5lU291cmNlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bldhdGNoUHJvY2Vzc1N0YXJ0ZWQoKTogUHJvbWlzZTxTaGVsbFByb2Nlc3NIYW5kbGU+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiU3RhcnQgd2F0Y2hcIik7XG4gICAgICAgIGNvbnN0IGJ1aWxkRGlyZWN0b3J5ID0gYXdhaXQgdGhpcy5nZXRCdWlsZERpcmVjdG9yeSgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBQcm9jZXNzVXRpbHMuY3JlYXRlU2hlbGxQcm9jZXNzKFxuICAgICAgICAgICAgXCJucG1cIixcbiAgICAgICAgICAgIFtcInJ1blwiLCBcImdlbmVyYXRvcjpidWlsZFwiLCBcIi0tXCIsIFwiLS13YXRjaFwiXSxcbiAgICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5XG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdC5vblN0ZE91dC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQub25TdGRFcnIuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQocmVzdWx0KTtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiU3VjY2Vzc2Z1bGx5IGNvbXBsaWVkXCIpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQocmVzdWx0OiBTaGVsbFByb2Nlc3NIYW5kbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgcmVzdWx0LndhaXRPdXRwdXRJbmNsdWRlc1N0cmluZyhcIlN1Y2Nlc3NmdWxseSBjb21waWxlZFwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkUmVzdWx0V2F0Y2hlcihwYXRoVG9HZW5lcmF0b3JPdXRwdXREaXI6IHN0cmluZyk6IFByb21pc2U8RlNXYXRjaGVyPiB7XG4gICAgICAgIGxldCBtYXNrVG9PYnNlcnZlR2VuZXJhdG9yQ2hhbmdlczogc3RyaW5nW107XG4gICAgICAgIGlmIChhd2FpdCBpc09sZEdlbmVyYXRvclNvdXJjZXNTdHJ1Y3R1cmUodGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzKSkge1xuICAgICAgICAgICAgbWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMgPSBbXCIqKi8qLmpzXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMgPSBbXCJHZW5lcmF0b3Ivc3JjLyoqLyouanNcIiwgXCJpbmRleC5qc1wiXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3YXRjaGVyID0gd2F0Y2gobWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMsIHtcbiAgICAgICAgICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gICAgICAgICAgICBjd2Q6IHBhdGhUb0dlbmVyYXRvck91dHB1dERpcixcbiAgICAgICAgICAgIGlnbm9yZVBlcm1pc3Npb25FcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgdXNlUG9sbGluZzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZUFueUZzRXZlbnREZWJvdW5jZWQgPSBfLmRlYm91bmNlKCgpID0+IHRoaXMuaGFuZGxlVXBkYXRlKCksIDUwMCk7XG4gICAgICAgIHdhdGNoZXIub24oXCJhbGxcIiwgaGFuZGxlQW55RnNFdmVudERlYm91bmNlZCk7XG4gICAgICAgIHdhdGNoZXIub24oXCJlcnJvclwiLCBoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkKTtcbiAgICAgICAgcmV0dXJuIHdhdGNoZXI7XG4gICAgfVxufVxuIl19
|
|
125
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Nob2tpZGFyIiwiX2xvZGFzaCIsIl9wTGltaXQiLCJfRXhlY1V0aWxzIiwiX0lMb2dnZXIiLCJfU3RhdGljTG9nZ2VyIiwiX0NoYWluYWJsZVZhbHVlUHJvZHVjZXIiLCJfRW5naW5lU3RydWN0dXJlVXRpbHMiLCJfUHJvY2Vzc1V0aWxzIiwiX0NyZWF0ZUFzeW5jR2VuZXJhdG9yIiwiZ2VuZXJhdG9yQnVpbGRMaW1pdCIsInBMaW1pdCIsIkJ1aWxkR2VuZXJhdG9yRnJvbVNvdXJjZXNUYXNrIiwiT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlIiwiY29uc3RydWN0b3IiLCJwYXRoVG9FbmdpbmVTb3VyY2VzIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwidXNlV2F0Y2giLCJjdXJyZW50R2VuZXJhdG9yIiwiYnVpbGRQcm9jZXNzIiwiYnVpbGRSZXN1bHRXYXRjaGVyIiwiaGFuZGxlVXBkYXRlIiwibG9nIiwiZW1pdFVwZGF0ZSIsImNyZWF0ZUFzeW5jR2VuZXJhdG9yIiwicGF0aCIsImpvaW4iLCJ3aXRoUHJlZml4IiwiZ2V0Q3VycmVudFZhbHVlIiwidW5kZWZpbmVkIiwicnVuV2F0Y2hQcm9jZXNzU3RhcnRlZCIsImNyZWF0ZUJ1aWxkUmVzdWx0V2F0Y2hlciIsImFjcXVpcmVHZW5lcmF0b3JGcm9tU291cmNlcyIsIkVycm9yIiwiYmVnaW5MaXN0ZW5pbmciLCJzdG9wTGlzdGVuaW5nIiwia2lsbCIsImVycm9yIiwiY2xvc2UiLCJhY3Rpb24iLCJidWlsZEFjdGlvbkJlZ2luIiwiYnVpbGREaXJlY3RvcnkiLCJnZXRCdWlsZERpcmVjdG9yeSIsImV4ZWNDb21tYW5kQXN5bmMiLCJjd2QiLCJyZXN1bHQiLCJjb21wbGV0ZSIsImlzTmV3RW5naW5lU3RydWN0dXJlIiwiUHJvY2Vzc1V0aWxzIiwiY3JlYXRlU2hlbGxQcm9jZXNzIiwib25TdGRPdXQiLCJzdWJzY3JpYmUiLCJkYXRhIiwidmVyYm9zZSIsInRvU3RyaW5nIiwib25TdGRFcnIiLCJzdGFydCIsIndhaXRGaXJzdENvbXBpbGF0aW9uQ29tcGxldGVkIiwid2FpdE91dHB1dEluY2x1ZGVzU3RyaW5nIiwicGF0aFRvR2VuZXJhdG9yT3V0cHV0RGlyIiwibWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMiLCJpc09sZEdlbmVyYXRvclNvdXJjZXNTdHJ1Y3R1cmUiLCJ3YXRjaGVyIiwid2F0Y2giLCJpZ25vcmVJbml0aWFsIiwiaWdub3JlUGVybWlzc2lvbkVycm9ycyIsInVzZVBvbGxpbmciLCJoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkIiwiXyIsImRlYm91bmNlIiwib24iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL0J1aWxkVGFza3MvR2VuZXJhdG9yL0J1aWxkR2VuZXJhdG9yRnJvbVNvdXJjZXNUYXNrLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZTV2F0Y2hlciB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgd2F0Y2ggfSBmcm9tIFwiY2hva2lkYXJcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCBwTGltaXQgZnJvbSBcInAtbGltaXRcIjtcblxuaW1wb3J0IHsgZXhlY0NvbW1hbmRBc3luYyB9IGZyb20gXCIuLi8uLi9Db21tb25zL0V4ZWNVdGlsc1wiO1xuaW1wb3J0IHsgYnVpbGRBY3Rpb25CZWdpbiwgSUxvZ2dlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcbmltcG9ydCB7IE9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZSB9IGZyb20gXCIuLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBpc05ld0VuZ2luZVN0cnVjdHVyZSwgaXNPbGRHZW5lcmF0b3JTb3VyY2VzU3RydWN0dXJlIH0gZnJvbSBcIi4uL0VuZ2luZVN0cnVjdHVyZVV0aWxzXCI7XG5pbXBvcnQgeyBGb3JtR2VuZXJhdG9yIH0gZnJvbSBcIi4uL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBQcm9jZXNzVXRpbHMgfSBmcm9tIFwiLi4vUHJvY2Vzc1V0aWxzL1Byb2Nlc3NVdGlsc1wiO1xuaW1wb3J0IHsgU2hlbGxQcm9jZXNzSGFuZGxlIH0gZnJvbSBcIi4uL1Byb2Nlc3NVdGlscy9TaGVsbFByb2Nlc3NIYW5kbGVcIjtcblxuaW1wb3J0IHsgY3JlYXRlQXN5bmNHZW5lcmF0b3IgfSBmcm9tIFwiLi9HZW5lcmF0b3JXb3JrZXIvQ3JlYXRlQXN5bmNHZW5lcmF0b3JcIjtcblxuY29uc3QgZ2VuZXJhdG9yQnVpbGRMaW1pdCA9IHBMaW1pdCgxKTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkR2VuZXJhdG9yRnJvbVNvdXJjZXNUYXNrIGV4dGVuZHMgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPEZvcm1HZW5lcmF0b3I+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhdGhUb0VuZ2luZVNvdXJjZXM6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogSUxvZ2dlcjtcbiAgICBwcml2YXRlIHVzZVdhdGNoID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBjdXJyZW50R2VuZXJhdG9yPzogRm9ybUdlbmVyYXRvcjtcbiAgICBwcml2YXRlIGJ1aWxkUHJvY2Vzcz86IFNoZWxsUHJvY2Vzc0hhbmRsZTtcbiAgICBwcml2YXRlIGJ1aWxkUmVzdWx0V2F0Y2hlcj86IEZTV2F0Y2hlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoVG9FbmdpbmVTb3VyY2VzOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciA9IGdldExvZ2dlcigpKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyLndpdGhQcmVmaXgoXCJHRU5FUkFUT1JcIik7XG4gICAgICAgIHRoaXMucGF0aFRvRW5naW5lU291cmNlcyA9IHBhdGhUb0VuZ2luZVNvdXJjZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPEZvcm1HZW5lcmF0b3I+IHtcbiAgICAgICAgcmV0dXJuIGdlbmVyYXRvckJ1aWxkTGltaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdlbmVyYXRvciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50R2VuZXJhdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlV2F0Y2gpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5idWlsZFByb2Nlc3MgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRQcm9jZXNzID0gYXdhaXQgdGhpcy5ydW5XYXRjaFByb2Nlc3NTdGFydGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRSZXN1bHRXYXRjaGVyID0gYXdhaXQgdGhpcy5jcmVhdGVCdWlsZFJlc3VsdFdhdGNoZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzLCBcIkdlbmVyYXRvclwiLCBcImRpc3RcIilcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50R2VuZXJhdG9yID0gY3JlYXRlQXN5bmNHZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzLCBcIkdlbmVyYXRvclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlV2F0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZVdhdGNoXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRHZW5lcmF0b3IgPSBhd2FpdCB0aGlzLmFjcXVpcmVHZW5lcmF0b3JGcm9tU291cmNlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEdlbmVyYXRvciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEdlbmVyYXRvcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJlZ2luTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnVzZVdhdGNoID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuYnVpbGRQcm9jZXNzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZFByb2Nlc3MgPSB0aGlzLmJ1aWxkUHJvY2VzcztcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkUHJvY2VzcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBhd2FpdCBidWlsZFByb2Nlc3Mua2lsbCgpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHN0b3AgcHJvY2VzczogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5idWlsZFJlc3VsdFdhdGNoZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJ1aWxkUmVzdWx0V2F0Y2hlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlV2F0Y2ggPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZVVwZGF0ZSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiR2VuZXJhdG9yIHNvdXJjZXMgdXBkYXRlZFwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VXBkYXRlKFxuICAgICAgICAgICAgY3JlYXRlQXN5bmNHZW5lcmF0b3IocGF0aC5qb2luKHRoaXMucGF0aFRvRW5naW5lU291cmNlcywgXCJHZW5lcmF0b3JcIiksIHRoaXMudXNlV2F0Y2gsIHRoaXMudXNlV2F0Y2gpXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgYXN5bmMgYWNxdWlyZUdlbmVyYXRvckZyb21Tb3VyY2VzKCk6IFByb21pc2U8Rm9ybUdlbmVyYXRvcj4ge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBidWlsZEFjdGlvbkJlZ2luKHRoaXMubG9nZ2VyLCBcIkJ1aWxkIGdlbmVyYXRvclwiKTtcbiAgICAgICAgY29uc3QgYnVpbGREaXJlY3RvcnkgPSBhd2FpdCB0aGlzLmdldEJ1aWxkRGlyZWN0b3J5KCk7XG4gICAgICAgIGF3YWl0IGV4ZWNDb21tYW5kQXN5bmModGhpcy5sb2dnZXIsIGB5YXJuIGdlbmVyYXRvcjpidWlsZGAsIHtcbiAgICAgICAgICAgIGN3ZDogYnVpbGREaXJlY3RvcnksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVBc3luY0dlbmVyYXRvcihcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLnBhdGhUb0VuZ2luZVNvdXJjZXMsIFwiR2VuZXJhdG9yXCIpLFxuICAgICAgICAgICAgdGhpcy51c2VXYXRjaCxcbiAgICAgICAgICAgIHRoaXMudXNlV2F0Y2hcbiAgICAgICAgKTtcbiAgICAgICAgYWN0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRCdWlsZERpcmVjdG9yeSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gKGF3YWl0IGlzTmV3RW5naW5lU3RydWN0dXJlKHRoaXMucGF0aFRvRW5naW5lU291cmNlcykpXG4gICAgICAgICAgICA/IHBhdGguam9pbih0aGlzLnBhdGhUb0VuZ2luZVNvdXJjZXMsIFwiR2VuZXJhdG9yXCIpXG4gICAgICAgICAgICA6IHRoaXMucGF0aFRvRW5naW5lU291cmNlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJ1bldhdGNoUHJvY2Vzc1N0YXJ0ZWQoKTogUHJvbWlzZTxTaGVsbFByb2Nlc3NIYW5kbGU+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiU3RhcnQgd2F0Y2hcIik7XG4gICAgICAgIGNvbnN0IGJ1aWxkRGlyZWN0b3J5ID0gYXdhaXQgdGhpcy5nZXRCdWlsZERpcmVjdG9yeSgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBQcm9jZXNzVXRpbHMuY3JlYXRlU2hlbGxQcm9jZXNzKFxuICAgICAgICAgICAgXCJucG1cIixcbiAgICAgICAgICAgIFtcInJ1blwiLCBcImdlbmVyYXRvcjpidWlsZFwiLCBcIi0tXCIsIFwiLS13YXRjaFwiXSxcbiAgICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5XG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdC5vblN0ZE91dC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci52ZXJib3NlKGRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHQub25TdGRFcnIuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudmVyYm9zZShkYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0KCk7XG4gICAgICAgIGF3YWl0IHRoaXMud2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQocmVzdWx0KTtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiU3VjY2Vzc2Z1bGx5IGNvbXBsaWVkXCIpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgd2FpdEZpcnN0Q29tcGlsYXRpb25Db21wbGV0ZWQocmVzdWx0OiBTaGVsbFByb2Nlc3NIYW5kbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgcmVzdWx0LndhaXRPdXRwdXRJbmNsdWRlc1N0cmluZyhcIlN1Y2Nlc3NmdWxseSBjb21waWxlZFwiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZUJ1aWxkUmVzdWx0V2F0Y2hlcihwYXRoVG9HZW5lcmF0b3JPdXRwdXREaXI6IHN0cmluZyk6IFByb21pc2U8RlNXYXRjaGVyPiB7XG4gICAgICAgIGxldCBtYXNrVG9PYnNlcnZlR2VuZXJhdG9yQ2hhbmdlczogc3RyaW5nW107XG4gICAgICAgIGlmIChhd2FpdCBpc09sZEdlbmVyYXRvclNvdXJjZXNTdHJ1Y3R1cmUodGhpcy5wYXRoVG9FbmdpbmVTb3VyY2VzKSkge1xuICAgICAgICAgICAgbWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMgPSBbXCIqKi8qLmpzXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMgPSBbXCJHZW5lcmF0b3Ivc3JjLyoqLyouanNcIiwgXCJpbmRleC5qc1wiXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3YXRjaGVyID0gd2F0Y2gobWFza1RvT2JzZXJ2ZUdlbmVyYXRvckNoYW5nZXMsIHtcbiAgICAgICAgICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gICAgICAgICAgICBjd2Q6IHBhdGhUb0dlbmVyYXRvck91dHB1dERpcixcbiAgICAgICAgICAgIGlnbm9yZVBlcm1pc3Npb25FcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgdXNlUG9sbGluZzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGhhbmRsZUFueUZzRXZlbnREZWJvdW5jZWQgPSBfLmRlYm91bmNlKCgpID0+IHRoaXMuaGFuZGxlVXBkYXRlKCksIDUwMCk7XG4gICAgICAgIHdhdGNoZXIub24oXCJhbGxcIiwgaGFuZGxlQW55RnNFdmVudERlYm91bmNlZCk7XG4gICAgICAgIHdhdGNoZXIub24oXCJlcnJvclwiLCBoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkKTtcbiAgICAgICAgcmV0dXJuIHdhdGNoZXI7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0EsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sYUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sdUJBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLHFCQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxhQUFBLEdBQUFULE9BQUE7QUFHQSxJQUFBVSxxQkFBQSxHQUFBVixPQUFBO0FBRUEsTUFBTVcsbUJBQW1CLEdBQUcsSUFBQUMsZUFBTSxFQUFDLENBQUMsQ0FBQztBQUU5QixNQUFNQyw2QkFBNkIsU0FBU0MsbURBQTJCLENBQWdCO0VBUW5GQyxXQUFXQSxDQUFDQyxtQkFBMkIsRUFBRUMsTUFBZSxHQUFHLElBQUFDLHVCQUFTLEVBQUMsQ0FBQyxFQUFFO0lBQzNFLEtBQUssQ0FBQyxDQUFDO0lBQUMsS0FSS0YsbUJBQW1CO0lB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
|
|
@@ -4,16 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createAsyncGenerator = createAsyncGenerator;
|
|
7
|
-
|
|
8
7
|
var _child_process = require("child_process");
|
|
9
|
-
|
|
10
8
|
var _StaticLogger = require("../../../Commons/Logging/StaticLogger");
|
|
11
|
-
|
|
12
9
|
var _IterableUtils = require("../../../../../Common/IterableUtils");
|
|
13
|
-
|
|
14
10
|
var _GeneratorRequireUtils = require("./GeneratorRequireUtils");
|
|
15
|
-
|
|
16
11
|
/* eslint-disable no-console */
|
|
12
|
+
|
|
17
13
|
class GeneratorAsyncProxy {
|
|
18
14
|
constructor(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting, logger = (0, _StaticLogger.getLogger)()) {
|
|
19
15
|
this.pathToGeneratorRootDir = void 0;
|
|
@@ -28,60 +24,45 @@ class GeneratorAsyncProxy {
|
|
|
28
24
|
this.purgeCache = purgeCache;
|
|
29
25
|
this.generatorSourcesImporter = new _GeneratorRequireUtils.GeneratorSourcesImporter(purgeCache);
|
|
30
26
|
}
|
|
31
|
-
|
|
32
27
|
async getLocalizedSugar(sugarFiles, resources) {
|
|
33
28
|
const localizationEntryPoint = await this.generatorSourcesImporter.importLocalization(this.pathToGeneratorRootDir);
|
|
34
|
-
|
|
35
29
|
if (localizationEntryPoint == undefined) {
|
|
36
30
|
throw new Error("Данная версия генератора не поддерживает локализацию.");
|
|
37
31
|
}
|
|
38
|
-
|
|
39
32
|
return localizationEntryPoint.getLocalizedSugar(sugarFiles, resources);
|
|
40
33
|
}
|
|
41
|
-
|
|
42
34
|
async getDictionary(sugarFiles, resources) {
|
|
43
35
|
const localizationEntryPoint = await this.generatorSourcesImporter.importLocalization(this.pathToGeneratorRootDir);
|
|
44
|
-
|
|
45
36
|
if (localizationEntryPoint == undefined) {
|
|
46
37
|
throw new Error("Данная версия генератора не поддерживает локализацию.");
|
|
47
38
|
}
|
|
48
|
-
|
|
49
39
|
return localizationEntryPoint.getDictionary(sugarFiles, resources);
|
|
50
40
|
}
|
|
51
|
-
|
|
52
41
|
async readSources(formSourcesPath, farmDirectory, hlFarmDirectoryPath) {
|
|
53
42
|
const readSources = await this.generatorSourcesImporter.importReadSources(this.pathToGeneratorRootDir);
|
|
54
43
|
const formSource = await readSources(formSourcesPath, farmDirectory, hlFarmDirectoryPath);
|
|
55
44
|
return formSource;
|
|
56
45
|
}
|
|
57
|
-
|
|
58
46
|
async getAllDependencies(formSourcesPath, farmDirectory, hlFarmDirectoryPath) {
|
|
59
47
|
const getAllDependencies = await this.generatorSourcesImporter.importGetAllDependencies(this.pathToGeneratorRootDir);
|
|
60
|
-
|
|
61
48
|
if (getAllDependencies == undefined) {
|
|
62
49
|
throw new Error("This version of generator does not support dependencies extraction");
|
|
63
50
|
}
|
|
64
|
-
|
|
65
51
|
const formSource = await getAllDependencies(formSourcesPath, farmDirectory, hlFarmDirectoryPath);
|
|
66
52
|
return formSource;
|
|
67
53
|
}
|
|
68
|
-
|
|
69
54
|
async supportsDependenciesExtraction() {
|
|
70
55
|
const getAllDependenciesHash = await this.generatorSourcesImporter.importGetAllDependenciesHash(this.pathToGeneratorRootDir);
|
|
71
56
|
return getAllDependenciesHash != undefined;
|
|
72
57
|
}
|
|
73
|
-
|
|
74
58
|
async getAllDependenciesHash(formSourcesPath, farmDirectory, hlFarmDirectoryPath) {
|
|
75
59
|
const getAllDependenciesHash = await this.generatorSourcesImporter.importGetAllDependenciesHash(this.pathToGeneratorRootDir);
|
|
76
|
-
|
|
77
60
|
if (getAllDependenciesHash == undefined) {
|
|
78
61
|
throw new Error("This version of generator does not support dependencies extraction");
|
|
79
62
|
}
|
|
80
|
-
|
|
81
63
|
const formSource = await getAllDependenciesHash(formSourcesPath, farmDirectory, hlFarmDirectoryPath);
|
|
82
64
|
return formSource;
|
|
83
65
|
}
|
|
84
|
-
|
|
85
66
|
async readSourcesAndProcessSugar(formSourcesPath, farmDirectory, hlFarmDirectoryPath, generationOptions) {
|
|
86
67
|
this.maxRequestNumber++;
|
|
87
68
|
const currentRequestNumber = this.maxRequestNumber;
|
|
@@ -91,11 +72,9 @@ class GeneratorAsyncProxy {
|
|
|
91
72
|
reject: reject
|
|
92
73
|
});
|
|
93
74
|
});
|
|
94
|
-
|
|
95
75
|
if (!this.generatorProcess) {
|
|
96
76
|
this.generatorProcess = this.forkReadSourcesAndProcessSugarWorker();
|
|
97
77
|
}
|
|
98
|
-
|
|
99
78
|
if (this.useGeneratorRestarting) {
|
|
100
79
|
if (this.maxRequestNumber % 10 === 0) {
|
|
101
80
|
console.log("Restarting generator");
|
|
@@ -105,13 +84,11 @@ class GeneratorAsyncProxy {
|
|
|
105
84
|
console.log("Restarted generator");
|
|
106
85
|
}
|
|
107
86
|
}
|
|
108
|
-
|
|
109
87
|
this.generatorProcess.send([this.pathToGeneratorRootDir, formSourcesPath, farmDirectory, hlFarmDirectoryPath, generationOptions, this.purgeCache, currentRequestNumber]);
|
|
110
88
|
const result = await promise;
|
|
111
89
|
this.processSugarDeferredMap.delete(currentRequestNumber);
|
|
112
90
|
return result;
|
|
113
91
|
}
|
|
114
|
-
|
|
115
92
|
async processSugar(sugarFiles, resources, generationOptions) {
|
|
116
93
|
this.maxRequestNumber++;
|
|
117
94
|
const currentRequestNumber = this.maxRequestNumber;
|
|
@@ -121,38 +98,31 @@ class GeneratorAsyncProxy {
|
|
|
121
98
|
reject: reject
|
|
122
99
|
});
|
|
123
100
|
});
|
|
124
|
-
|
|
125
101
|
if (!this.generatorProcess) {
|
|
126
102
|
this.generatorProcess = this.forkProcessSugarWorker();
|
|
127
103
|
}
|
|
128
|
-
|
|
129
104
|
this.generatorProcess.send([this.pathToGeneratorRootDir, sugarFiles, resources, generationOptions, this.purgeCache, currentRequestNumber]);
|
|
130
105
|
const result = await promise;
|
|
131
106
|
this.processSugarDeferredMap.delete(currentRequestNumber);
|
|
132
107
|
return result;
|
|
133
108
|
}
|
|
134
|
-
|
|
135
109
|
forkProcessSugarWorker() {
|
|
136
110
|
const processSugarWorker = (0, _child_process.fork)("./ProcessSugarWorker", [], {
|
|
137
111
|
cwd: __dirname
|
|
138
112
|
});
|
|
139
113
|
processSugarWorker.on("message", response => {
|
|
140
114
|
const currentDeferred = this.processSugarDeferredMap.get(response.requestNumber);
|
|
141
|
-
|
|
142
115
|
if (currentDeferred == undefined) {
|
|
143
116
|
return;
|
|
144
117
|
}
|
|
145
|
-
|
|
146
118
|
if (response.type === "Error") {
|
|
147
119
|
currentDeferred.reject(new Error(response.errorText));
|
|
148
120
|
} else {
|
|
149
121
|
const formContent = response.generatedForm;
|
|
150
122
|
const result = {};
|
|
151
|
-
|
|
152
123
|
for (const [key, formContentItem] of (0, _IterableUtils.iterateEntries)(formContent)) {
|
|
153
124
|
result[key] = typeof formContentItem === "string" ? formContentItem : Buffer.from(formContentItem.payload, formContentItem.encoding);
|
|
154
125
|
}
|
|
155
|
-
|
|
156
126
|
currentDeferred.resolve(result);
|
|
157
127
|
}
|
|
158
128
|
});
|
|
@@ -161,28 +131,23 @@ class GeneratorAsyncProxy {
|
|
|
161
131
|
});
|
|
162
132
|
return processSugarWorker;
|
|
163
133
|
}
|
|
164
|
-
|
|
165
134
|
forkReadSourcesAndProcessSugarWorker() {
|
|
166
135
|
const processSugarWorker = (0, _child_process.fork)("./ReadSourcesAndProcessSugarWorker", [], {
|
|
167
136
|
cwd: __dirname
|
|
168
137
|
});
|
|
169
138
|
processSugarWorker.on("message", response => {
|
|
170
139
|
const currentDeferred = this.processSugarDeferredMap.get(response.requestNumber);
|
|
171
|
-
|
|
172
140
|
if (currentDeferred == undefined) {
|
|
173
141
|
return;
|
|
174
142
|
}
|
|
175
|
-
|
|
176
143
|
if (response.type === "Error") {
|
|
177
144
|
currentDeferred.reject(new Error(response.errorText));
|
|
178
145
|
} else {
|
|
179
146
|
const formContent = response.generatedForm;
|
|
180
147
|
const result = {};
|
|
181
|
-
|
|
182
148
|
for (const [key, formContentItem] of (0, _IterableUtils.iterateEntries)(formContent)) {
|
|
183
149
|
result[key] = typeof formContentItem === "string" ? formContentItem : Buffer.from(formContentItem.payload, formContentItem.encoding);
|
|
184
150
|
}
|
|
185
|
-
|
|
186
151
|
currentDeferred.resolve(result);
|
|
187
152
|
}
|
|
188
153
|
});
|
|
@@ -191,19 +156,14 @@ class GeneratorAsyncProxy {
|
|
|
191
156
|
});
|
|
192
157
|
return processSugarWorker;
|
|
193
158
|
}
|
|
194
|
-
|
|
195
159
|
}
|
|
196
|
-
|
|
197
160
|
const generatorsCache = new Map();
|
|
198
|
-
|
|
199
161
|
function createAsyncGenerator(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting) {
|
|
200
162
|
let result = generatorsCache.get(pathToGeneratorRootDir);
|
|
201
|
-
|
|
202
163
|
if (result == undefined) {
|
|
203
164
|
result = new GeneratorAsyncProxy(pathToGeneratorRootDir, purgeCache, useGeneratorRestarting);
|
|
204
165
|
generatorsCache.set(pathToGeneratorRootDir, result);
|
|
205
166
|
}
|
|
206
|
-
|
|
207
167
|
return result;
|
|
208
168
|
}
|
|
209
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL0dlbmVyYXRvci9HZW5lcmF0b3JXb3JrZXIvQ3JlYXRlQXN5bmNHZW5lcmF0b3IudHMiXSwibmFtZXMiOlsiR2VuZXJhdG9yQXN5bmNQcm94eSIsImNvbnN0cnVjdG9yIiwicGF0aFRvR2VuZXJhdG9yUm9vdERpciIsInB1cmdlQ2FjaGUiLCJ1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nIiwibG9nZ2VyIiwiZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyIiwiZ2VuZXJhdG9yUHJvY2VzcyIsIm1heFJlcXVlc3ROdW1iZXIiLCJwcm9jZXNzU3VnYXJEZWZlcnJlZE1hcCIsIk1hcCIsIkdlbmVyYXRvclNvdXJjZXNJbXBvcnRlciIsImdldExvY2FsaXplZFN1Z2FyIiwic3VnYXJGaWxlcyIsInJlc291cmNlcyIsImxvY2FsaXphdGlvbkVudHJ5UG9pbnQiLCJpbXBvcnRMb2NhbGl6YXRpb24iLCJ1bmRlZmluZWQiLCJFcnJvciIsImdldERpY3Rpb25hcnkiLCJyZWFkU291cmNlcyIsImZvcm1Tb3VyY2VzUGF0aCIsImZhcm1EaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwiaW1wb3J0UmVhZFNvdXJjZXMiLCJmb3JtU291cmNlIiwiZ2V0QWxsRGVwZW5kZW5jaWVzIiwiaW1wb3J0R2V0QWxsRGVwZW5kZW5jaWVzIiwic3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uIiwiZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCIsImltcG9ydEdldEFsbERlcGVuZGVuY2llc0hhc2giLCJyZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhciIsImdlbmVyYXRpb25PcHRpb25zIiwiY3VycmVudFJlcXVlc3ROdW1iZXIiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXQiLCJmb3JrUmVhZFNvdXJjZXNBbmRQcm9jZXNzU3VnYXJXb3JrZXIiLCJjb25zb2xlIiwibG9nIiwia2lsbCIsInNlbmQiLCJyZXN1bHQiLCJkZWxldGUiLCJwcm9jZXNzU3VnYXIiLCJmb3JrUHJvY2Vzc1N1Z2FyV29ya2VyIiwicHJvY2Vzc1N1Z2FyV29ya2VyIiwiY3dkIiwiX19kaXJuYW1lIiwib24iLCJyZXNwb25zZSIsImN1cnJlbnREZWZlcnJlZCIsImdldCIsInJlcXVlc3ROdW1iZXIiLCJ0eXBlIiwiZXJyb3JUZXh0IiwiZm9ybUNvbnRlbnQiLCJnZW5lcmF0ZWRGb3JtIiwia2V5IiwiZm9ybUNvbnRlbnRJdGVtIiwiQnVmZmVyIiwiZnJvbSIsInBheWxvYWQiLCJlbmNvZGluZyIsImVycm9yIiwiZ2VuZXJhdG9yc0NhY2hlIiwiY3JlYXRlQXN5bmNHZW5lcmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQTs7QUFHQTs7QUFRQTs7QUFFQTs7QUFkQTtBQXNCQSxNQUFNQSxtQkFBTixDQUFtRDtBQVN4Q0MsRUFBQUEsV0FBVyxDQUNkQyxzQkFEYyxFQUVkQyxVQUZjLEVBR2RDLHNCQUhjLEVBSWRDLE1BQWUsR0FBRyw4QkFKSixFQUtoQjtBQUFBLFNBYmVILHNCQWFmO0FBQUEsU0FaZUksd0JBWWY7QUFBQSxTQVhlSCxVQVdmO0FBQUEsU0FWZUMsc0JBVWY7QUFBQSxTQVRNRyxnQkFTTjtBQUFBLFNBUk1DLGdCQVFOLEdBUnlCLENBUXpCO0FBQUEsU0FQZUMsdUJBT2YsR0FQNEUsSUFBSUMsR0FBSixFQU81RTtBQUNFLFNBQUtOLHNCQUFMLEdBQThCQSxzQkFBOUI7QUFDQSxTQUFLRixzQkFBTCxHQUE4QkEsc0JBQTlCO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxTQUFLRyx3QkFBTCxHQUFnQyxJQUFJSywrQ0FBSixDQUE2QlIsVUFBN0IsQ0FBaEM7QUFDSDs7QUFFNkIsUUFBakJTLGlCQUFpQixDQUFDQyxVQUFELEVBQTJCQyxTQUEzQixFQUE0RTtBQUN0RyxVQUFNQyxzQkFBc0IsR0FBRyxNQUFNLEtBQUtULHdCQUFMLENBQThCVSxrQkFBOUIsQ0FDakMsS0FBS2Qsc0JBRDRCLENB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QUFHLEVBQTlCOztBQUVBLGFBQUssTUFBTSxDQUFDZ0IsR0FBRCxFQUFNQyxlQUFOLENBQVgsSUFBcUMsbUNBQWVILFdBQWYsQ0FBckMsRUFBa0U7QUFDOURkLFVBQUFBLE1BQU0sQ0FBQ2dCLEdBQUQsQ0FBTixHQUNJLE9BQU9DLGVBQVAsS0FBMkIsUUFBM0IsR0FDTUEsZUFETixHQUVNQyxNQUFNLENBQUNDLElBQVAsQ0FBWUYsZUFBZSxDQUFDRyxPQUE1QixFQUFxQ0gsZUFBZSxDQUFDSSxRQUFyRCxDQUhWO0FBSUg7O0FBRURaLFFBQUFBLGVBQWUsQ0FBQ2pCLE9BQWhCLENBQXdCUSxNQUF4QjtBQUNIO0FBQ0osS0FwQkQ7QUFzQkFJLElBQUFBLGtCQUFrQixDQUFDRyxFQUFuQixDQUFzQixPQUF0QixFQUErQmUsS0FBSyxJQUFJO0FBQ3BDLFlBQU1BLEtBQU47QUFDSCxLQUZEO0FBSUEsV0FBT2xCLGtCQUFQO0FBQ0g7O0FBM084Qzs7QUE4T25ELE1BQU1tQixlQUFpRCxHQUFHLElBQUl6RCxHQUFKLEVBQTFEOztBQUVPLFNBQVMwRCxvQkFBVCxDQUNIbEUsc0JBREcsRUFFSEMsVUFGRyxFQUdIQyxzQkFIRyxFQUlVO0FBQ2IsTUFBSXdDLE1BQU0sR0FBR3VCLGVBQWUsQ0FBQ2IsR0FBaEIsQ0FBb0JwRCxzQkFBcEIsQ0FBYjs7QUFDQSxNQUFJMEMsTUFBTSxJQUFJM0IsU0FBZCxFQUF5QjtBQUNyQjJCLElBQUFBLE1BQU0sR0FBRyxJQUFJNUMsbUJBQUosQ0FBd0JFLHNCQUF4QixFQUFnREMsVUFBaEQsRUFBNERDLHNCQUE1RCxDQUFUO0FBQ0ErRCxJQUFBQSxlQUFlLENBQUM3QixHQUFoQixDQUFvQnBDLHNCQUFwQixFQUE0QzBDLE1BQTVDO0FBQ0g7O0FBQ0QsU0FBT0EsTUFBUDtBQUNIIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCBmb3JrIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcblxuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0xvZ2dpbmcvSUxvZ2dlclwiO1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvTG9nZ2luZy9TdGF0aWNMb2dnZXJcIjtcbmltcG9ydCB7XG4gICAgRm9ybUdlbmVyYXRvcixcbiAgICBHZW5lcmF0ZWRGb3JtLFxuICAgIEdlbmVyYXRpb25PcHRpb25zLFxuICAgIExvY2FsaXphdGlvbkRpY3Rpb25hcnlDb250ZW50LFxufSBmcm9tIFwiLi4vLi4vRm9ybS9HZW5lcmF0ZUZvcm1cIjtcbmltcG9ydCB7IEZvcm1SZXNvdXJjZXMsIEZvcm1Tb3VyY2UsIFN1Z2FyQ29udGVudCB9IGZyb20gXCIuLi8uLi9SZWFkRm9ybVNvdXJjZVwiO1xuaW1wb3J0IHsgaXRlcmF0ZUVudHJpZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0l0ZXJhYmxlVXRpbHNcIjtcblxuaW1wb3J0IHsgR2VuZXJhdG9yU291cmNlc0ltcG9ydGVyIH0gZnJvbSBcIi4vR2VuZXJhdG9yUmVxdWlyZVV0aWxzXCI7XG5pbXBvcnQgeyBDYWxsUmVzcG9uc2UgfSBmcm9tIFwiLi9Qcm9jZXNzU3VnYXJXb3JrZXJcIjtcblxuaW50ZXJmYWNlIFByb2Nlc3NTdWdhckRlZmVycmVkIHtcbiAgICByZXNvbHZlOiAocmVzdWx0OiBHZW5lcmF0ZWRGb3JtKSA9PiB2b2lkO1xuICAgIHJlamVjdDogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkO1xufVxuXG5jbGFzcyBHZW5lcmF0b3JBc3luY1Byb3h5IGltcGxlbWVudHMgRm9ybUdlbmVyYXRvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXRoVG9HZW5lcmF0b3JSb290RGlyOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBnZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXI6IEdlbmVyYXRvclNvdXJjZXNJbXBvcnRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHB1cmdlQ2FjaGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgZ2VuZXJhdG9yUHJvY2Vzcz86IENoaWxkUHJvY2VzcztcbiAgICBwcml2YXRlIG1heFJlcXVlc3ROdW1iZXIgPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXA6IE1hcDxudW1iZXIsIFByb2Nlc3NTdWdhckRlZmVycmVkPiA9IG5ldyBNYXAoKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGF0aFRvR2VuZXJhdG9yUm9vdERpcjogc3RyaW5nLFxuICAgICAgICBwdXJnZUNhY2hlOiBib29sZWFuLFxuICAgICAgICB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nOiBib29sZWFuLFxuICAgICAgICBsb2dnZXI6IElMb2dnZXIgPSBnZXRMb2dnZXIoKVxuICAgICkge1xuICAgICAgICB0aGlzLnVzZUdlbmVyYXRvclJlc3RhcnRpbmcgPSB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nO1xuICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXIgPSBwYXRoVG9HZW5lcmF0b3JSb290RGlyO1xuICAgICAgICB0aGlzLnB1cmdlQ2FjaGUgPSBwdXJnZUNhY2hlO1xuICAgICAgICB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlciA9IG5ldyBHZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIocHVyZ2VDYWNoZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldExvY2FsaXplZFN1Z2FyKHN1Z2FyRmlsZXM6IFN1Z2FyQ29udGVudCwgcmVzb3VyY2VzOiBGb3JtUmVzb3VyY2VzKTogUHJvbWlzZTxTdWdhckNvbnRlbnQ+IHtcbiAgICAgICAgY29uc3QgbG9jYWxpemF0aW9uRW50cnlQb2ludCA9IGF3YWl0IHRoaXMuZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyLmltcG9ydExvY2FsaXphdGlvbihcbiAgICAgICAgICAgIHRoaXMucGF0aFRvR2VuZXJhdG9yUm9vdERpclxuICAgICAgICApO1xuICAgICAgICBpZiAobG9jYWxpemF0aW9uRW50cnlQb2ludCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcItCU0LDQvdC90LDRjyDQstC10YDRgdC40Y8g0LPQtdC90LXRgNCw0YLQvtGA0LAg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LvQvtC60LDQu9C40LfQsNGG0LjRji5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsaXphdGlvbkVudHJ5UG9pbnQuZ2V0TG9jYWxpemVkU3VnYXIoc3VnYXJGaWxlcywgcmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGljdGlvbmFyeShcbiAgICAgICAgc3VnYXJGaWxlczogU3VnYXJDb250ZW50LFxuICAgICAgICByZXNvdXJjZXM6IEZvcm1SZXNvdXJjZXNcbiAgICApOiBQcm9taXNlPExvY2FsaXphdGlvbkRpY3Rpb25hcnlDb250ZW50PiB7XG4gICAgICAgIGNvbnN0IGxvY2FsaXphdGlvbkVudHJ5UG9pbnQgPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRMb2NhbGl6YXRpb24oXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGxvY2FsaXphdGlvbkVudHJ5UG9pbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLQlNCw0L3QvdCw0Y8g0LLQtdGA0YHQuNGPINCz0LXQvdC10YDQsNGC0L7RgNCwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC70L7QutCw0LvQuNC30LDRhtC40Y4uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGl6YXRpb25FbnRyeVBvaW50LmdldERpY3Rpb25hcnkoc3VnYXJGaWxlcywgcmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVhZFNvdXJjZXMoXG4gICAgICAgIGZvcm1Tb3VyY2VzUGF0aDogc3RyaW5nLFxuICAgICAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuICAgICk6IFByb21pc2U8Rm9ybVNvdXJjZT4ge1xuICAgICAgICBjb25zdCByZWFkU291cmNlczogRm9ybUdlbmVyYXRvcltcInJlYWRTb3VyY2VzXCJdID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIuaW1wb3J0UmVhZFNvdXJjZXMoXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZm9ybVNvdXJjZSA9IGF3YWl0IHJlYWRTb3VyY2VzKGZvcm1Tb3VyY2VzUGF0aCwgZmFybURpcmVjdG9yeSwgaGxGYXJtRGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1Tb3VyY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbERlcGVuZGVuY2llcyhcbiAgICAgICAgZm9ybVNvdXJjZXNQYXRoOiBzdHJpbmcsXG4gICAgICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBnZXRBbGxEZXBlbmRlbmNpZXMgPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRHZXRBbGxEZXBlbmRlbmNpZXMoXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGdldEFsbERlcGVuZGVuY2llcyA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgdmVyc2lvbiBvZiBnZW5lcmF0b3IgZG9lcyBub3Qgc3VwcG9ydCBkZXBlbmRlbmNpZXMgZXh0cmFjdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtU291cmNlID0gYXdhaXQgZ2V0QWxsRGVwZW5kZW5jaWVzKGZvcm1Tb3VyY2VzUGF0aCwgZmFybURpcmVjdG9yeSwgaGxGYXJtRGlyZWN0b3J5UGF0aCk7XG4gICAgICAgIHJldHVybiBmb3JtU291cmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzdXBwb3J0c0RlcGVuZGVuY2llc0V4dHJhY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IGdldEFsbERlcGVuZGVuY2llc0hhc2ggPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRHZXRBbGxEZXBlbmRlbmNpZXNIYXNoKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBnZXRBbGxEZXBlbmRlbmNpZXNIYXNoICE9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaChcbiAgICAgICAgZm9ybVNvdXJjZXNQYXRoOiBzdHJpbmcsXG4gICAgICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCA9IGF3YWl0IHRoaXMuZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyLmltcG9ydEdldEFsbERlcGVuZGVuY2llc0hhc2goXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGdldEFsbERlcGVuZGVuY2llc0hhc2ggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHZlcnNpb24gb2YgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBvcnQgZGVwZW5kZW5jaWVzIGV4dHJhY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybVNvdXJjZSA9IGF3YWl0IGdldEFsbERlcGVuZGVuY2llc0hhc2goZm9ybVNvdXJjZXNQYXRoLCBmYXJtRGlyZWN0b3J5LCBobEZhcm1EaXJlY3RvcnlQYXRoKTtcbiAgICAgICAgcmV0dXJuIGZvcm1Tb3VyY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlYWRTb3VyY2VzQW5kUHJvY2Vzc1N1Z2FyKFxuICAgICAgICBmb3JtU291cmNlc1BhdGg6IHN0cmluZyxcbiAgICAgICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmcsXG4gICAgICAgIGdlbmVyYXRpb25PcHRpb25zPzogR2VuZXJhdGlvbk9wdGlvbnNcbiAgICApOiBQcm9taXNlPEdlbmVyYXRlZEZvcm0+IHtcbiAgICAgICAgdGhpcy5tYXhSZXF1ZXN0TnVtYmVyKys7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXF1ZXN0TnVtYmVyID0gdGhpcy5tYXhSZXF1ZXN0TnVtYmVyO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8R2VuZXJhdGVkRm9ybT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VnYXJEZWZlcnJlZE1hcC5zZXQoY3VycmVudFJlcXVlc3ROdW1iZXIsIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdDogcmVqZWN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0b3JQcm9jZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRvclByb2Nlc3MgPSB0aGlzLmZvcmtSZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhcldvcmtlcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzZUdlbmVyYXRvclJlc3RhcnRpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heFJlcXVlc3ROdW1iZXIgJSAxMCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUmVzdGFydGluZyBnZW5lcmF0b3JcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzLmtpbGwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRvclByb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzID0gdGhpcy5mb3JrUmVhZFNvdXJjZXNBbmRQcm9jZXNzU3VnYXJXb3JrZXIoKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlc3RhcnRlZCBnZW5lcmF0b3JcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdlbmVyYXRvclByb2Nlc3Muc2VuZChbXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXIsXG4gICAgICAgICAgICBmb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICBmYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aCxcbiAgICAgICAgICAgIGdlbmVyYXRpb25PcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5wdXJnZUNhY2hlLFxuICAgICAgICAgICAgY3VycmVudFJlcXVlc3ROdW1iZXIsXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuZGVsZXRlKGN1cnJlbnRSZXF1ZXN0TnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJvY2Vzc1N1Z2FyKFxuICAgICAgICBzdWdhckZpbGVzOiBTdWdhckNvbnRlbnQsXG4gICAgICAgIHJlc291cmNlczogRm9ybVJlc291cmNlcyxcbiAgICAgICAgZ2VuZXJhdGlvbk9wdGlvbnM/OiBHZW5lcmF0aW9uT3B0aW9uc1xuICAgICk6IFByb21pc2U8R2VuZXJhdGVkRm9ybT4ge1xuICAgICAgICB0aGlzLm1heFJlcXVlc3ROdW1iZXIrKztcbiAgICAgICAgY29uc3QgY3VycmVudFJlcXVlc3ROdW1iZXIgPSB0aGlzLm1heFJlcXVlc3ROdW1iZXI7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxHZW5lcmF0ZWRGb3JtPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWdhckRlZmVycmVkTWFwLnNldChjdXJyZW50UmVxdWVzdE51bWJlciwge1xuICAgICAgICAgICAgICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgcmVqZWN0OiByZWplY3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmdlbmVyYXRvclByb2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yUHJvY2VzcyA9IHRoaXMuZm9ya1Byb2Nlc3NTdWdhcldvcmtlcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzLnNlbmQoW1xuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyLFxuICAgICAgICAgICAgc3VnYXJGaWxlcyxcbiAgICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgICAgIGdlbmVyYXRpb25PcHRpb25zLFxuICAgICAgICAgICAgdGhpcy5wdXJnZUNhY2hlLFxuICAgICAgICAgICAgY3VycmVudFJlcXVlc3ROdW1iZXIsXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuZGVsZXRlKGN1cnJlbnRSZXF1ZXN0TnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcmtQcm9jZXNzU3VnYXJXb3JrZXIoKTogQ2hpbGRQcm9jZXNzIHtcbiAgICAgICAgY29uc3QgcHJvY2Vzc1N1Z2FyV29ya2VyID0gZm9yayhcIi4vUHJvY2Vzc1N1Z2FyV29ya2VyXCIsIFtdLCB7XG4gICAgICAgICAgICBjd2Q6IF9fZGlybmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvY2Vzc1N1Z2FyV29ya2VyLm9uKFwibWVzc2FnZVwiLCAocmVzcG9uc2U6IENhbGxSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERlZmVycmVkID0gdGhpcy5wcm9jZXNzU3VnYXJEZWZlcnJlZE1hcC5nZXQocmVzcG9uc2UucmVxdWVzdE51bWJlcik7XG4gICAgICAgICAgICBpZiAoY3VycmVudERlZmVycmVkID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSBcIkVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcihyZXNwb25zZS5lcnJvclRleHQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRlbnQgPSByZXNwb25zZS5nZW5lcmF0ZWRGb3JtO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogR2VuZXJhdGVkRm9ybSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBmb3JtQ29udGVudEl0ZW1dIG9mIGl0ZXJhdGVFbnRyaWVzKGZvcm1Db250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybUNvbnRlbnRJdGVtID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtQ29udGVudEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5mcm9tKGZvcm1Db250ZW50SXRlbS5wYXlsb2FkLCBmb3JtQ29udGVudEl0ZW0uZW5jb2RpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnREZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2Nlc3NTdWdhcldvcmtlci5vbihcImVycm9yXCIsIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJvY2Vzc1N1Z2FyV29ya2VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ya1JlYWRTb3VyY2VzQW5kUHJvY2Vzc1N1Z2FyV29ya2VyKCk6IENoaWxkUHJvY2VzcyB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NTdWdhcldvcmtlciA9IGZvcmsoXCIuL1JlYWRTb3VyY2VzQW5kUHJvY2Vzc1N1Z2FyV29ya2VyXCIsIFtdLCB7XG4gICAgICAgICAgICBjd2Q6IF9fZGlybmFtZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvY2Vzc1N1Z2FyV29ya2VyLm9uKFwibWVzc2FnZVwiLCAocmVzcG9uc2U6IENhbGxSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERlZmVycmVkID0gdGhpcy5wcm9jZXNzU3VnYXJEZWZlcnJlZE1hcC5nZXQocmVzcG9uc2UucmVxdWVzdE51bWJlcik7XG4gICAgICAgICAgICBpZiAoY3VycmVudERlZmVycmVkID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSBcIkVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGVmZXJyZWQucmVqZWN0KG5ldyBFcnJvcihyZXNwb25zZS5lcnJvclRleHQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUNvbnRlbnQgPSByZXNwb25zZS5nZW5lcmF0ZWRGb3JtO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogR2VuZXJhdGVkRm9ybSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBmb3JtQ29udGVudEl0ZW1dIG9mIGl0ZXJhdGVFbnRyaWVzKGZvcm1Db250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybUNvbnRlbnRJdGVtID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBmb3JtQ29udGVudEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEJ1ZmZlci5mcm9tKGZvcm1Db250ZW50SXRlbS5wYXlsb2FkLCBmb3JtQ29udGVudEl0ZW0uZW5jb2RpbmcpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnREZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2Nlc3NTdWdhcldvcmtlci5vbihcImVycm9yXCIsIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcHJvY2Vzc1N1Z2FyV29ya2VyO1xuICAgIH1cbn1cblxuY29uc3QgZ2VuZXJhdG9yc0NhY2hlOiBNYXA8c3RyaW5nLCBHZW5lcmF0b3JBc3luY1Byb3h5PiA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFzeW5jR2VuZXJhdG9yKFxuICAgIHBhdGhUb0dlbmVyYXRvclJvb3REaXI6IHN0cmluZyxcbiAgICBwdXJnZUNhY2hlOiBib29sZWFuLFxuICAgIHVzZUdlbmVyYXRvclJlc3RhcnRpbmc6IGJvb2xlYW5cbik6IEZvcm1HZW5lcmF0b3Ige1xuICAgIGxldCByZXN1bHQgPSBnZW5lcmF0b3JzQ2FjaGUuZ2V0KHBhdGhUb0dlbmVyYXRvclJvb3REaXIpO1xuICAgIGlmIChyZXN1bHQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IG5ldyBHZW5lcmF0b3JBc3luY1Byb3h5KHBhdGhUb0dlbmVyYXRvclJvb3REaXIsIHB1cmdlQ2FjaGUsIHVzZUdlbmVyYXRvclJlc3RhcnRpbmcpO1xuICAgICAgICBnZW5lcmF0b3JzQ2FjaGUuc2V0KHBhdGhUb0dlbmVyYXRvclJvb3REaXIsIHJlc3VsdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
|
|
169
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hpbGRfcHJvY2VzcyIsInJlcXVpcmUiLCJfU3RhdGljTG9nZ2VyIiwiX0l0ZXJhYmxlVXRpbHMiLCJfR2VuZXJhdG9yUmVxdWlyZVV0aWxzIiwiR2VuZXJhdG9yQXN5bmNQcm94eSIsImNvbnN0cnVjdG9yIiwicGF0aFRvR2VuZXJhdG9yUm9vdERpciIsInB1cmdlQ2FjaGUiLCJ1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nIiwibG9nZ2VyIiwiZ2V0TG9nZ2VyIiwiZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyIiwiZ2VuZXJhdG9yUHJvY2VzcyIsIm1heFJlcXVlc3ROdW1iZXIiLCJwcm9jZXNzU3VnYXJEZWZlcnJlZE1hcCIsIk1hcCIsIkdlbmVyYXRvclNvdXJjZXNJbXBvcnRlciIsImdldExvY2FsaXplZFN1Z2FyIiwic3VnYXJGaWxlcyIsInJlc291cmNlcyIsImxvY2FsaXphdGlvbkVudHJ5UG9pbnQiLCJpbXBvcnRMb2NhbGl6YXRpb24iLCJ1bmRlZmluZWQiLCJFcnJvciIsImdldERpY3Rpb25hcnkiLCJyZWFkU291cmNlcyIsImZvcm1Tb3VyY2VzUGF0aCIsImZhcm1EaXJlY3RvcnkiLCJobEZhcm1EaXJlY3RvcnlQYXRoIiwiaW1wb3J0UmVhZFNvdXJjZXMiLCJmb3JtU291cmNlIiwiZ2V0QWxsRGVwZW5kZW5jaWVzIiwiaW1wb3J0R2V0QWxsRGVwZW5kZW5jaWVzIiwic3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uIiwiZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCIsImltcG9ydEdldEFsbERlcGVuZGVuY2llc0hhc2giLCJyZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhciIsImdlbmVyYXRpb25PcHRpb25zIiwiY3VycmVudFJlcXVlc3ROdW1iZXIiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZXQiLCJmb3JrUmVhZFNvdXJjZXNBbmRQcm9jZXNzU3VnYXJXb3JrZXIiLCJjb25zb2xlIiwibG9nIiwia2lsbCIsInNlbmQiLCJyZXN1bHQiLCJkZWxldGUiLCJwcm9jZXNzU3VnYXIiLCJmb3JrUHJvY2Vzc1N1Z2FyV29ya2VyIiwicHJvY2Vzc1N1Z2FyV29ya2VyIiwiZm9yayIsImN3ZCIsIl9fZGlybmFtZSIsIm9uIiwicmVzcG9uc2UiLCJjdXJyZW50RGVmZXJyZWQiLCJnZXQiLCJyZXF1ZXN0TnVtYmVyIiwidHlwZSIsImVycm9yVGV4dCIsImZvcm1Db250ZW50IiwiZ2VuZXJhdGVkRm9ybSIsImtleSIsImZvcm1Db250ZW50SXRlbSIsIml0ZXJhdGVFbnRyaWVzIiwiQnVmZmVyIiwiZnJvbSIsInBheWxvYWQiLCJlbmNvZGluZyIsImVycm9yIiwiZ2VuZXJhdG9yc0NhY2hlIiwiY3JlYXRlQXN5bmNHZW5lcmF0b3IiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQnVpbGRUYXNrcy9HZW5lcmF0b3IvR2VuZXJhdG9yV29ya2VyL0NyZWF0ZUFzeW5jR2VuZXJhdG9yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7IENoaWxkUHJvY2VzcywgZm9yayB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5cbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL0lMb2dnZXJcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0xvZ2dpbmcvU3RhdGljTG9nZ2VyXCI7XG5pbXBvcnQge1xuICAgIEZvcm1HZW5lcmF0b3IsXG4gICAgR2VuZXJhdGVkRm9ybSxcbiAgICBHZW5lcmF0aW9uT3B0aW9ucyxcbiAgICBMb2NhbGl6YXRpb25EaWN0aW9uYXJ5Q29udGVudCxcbn0gZnJvbSBcIi4uLy4uL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBGb3JtUmVzb3VyY2VzLCBGb3JtU291cmNlLCBTdWdhckNvbnRlbnQgfSBmcm9tIFwiLi4vLi4vUmVhZEZvcm1Tb3VyY2VcIjtcbmltcG9ydCB7IGl0ZXJhdGVFbnRyaWVzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzXCI7XG5cbmltcG9ydCB7IEdlbmVyYXRvclNvdXJjZXNJbXBvcnRlciB9IGZyb20gXCIuL0dlbmVyYXRvclJlcXVpcmVVdGlsc1wiO1xuaW1wb3J0IHsgQ2FsbFJlc3BvbnNlIH0gZnJvbSBcIi4vUHJvY2Vzc1N1Z2FyV29ya2VyXCI7XG5cbmludGVyZmFjZSBQcm9jZXNzU3VnYXJEZWZlcnJlZCB7XG4gICAgcmVzb2x2ZTogKHJlc3VsdDogR2VuZXJhdGVkRm9ybSkgPT4gdm9pZDtcbiAgICByZWplY3Q6IChlcnJvcjogdW5rbm93bikgPT4gdm9pZDtcbn1cblxuY2xhc3MgR2VuZXJhdG9yQXN5bmNQcm94eSBpbXBsZW1lbnRzIEZvcm1HZW5lcmF0b3Ige1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGF0aFRvR2VuZXJhdG9yUm9vdERpcjogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyOiBHZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwdXJnZUNhY2hlOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlR2VuZXJhdG9yUmVzdGFydGluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIGdlbmVyYXRvclByb2Nlc3M/OiBDaGlsZFByb2Nlc3M7XG4gICAgcHJpdmF0ZSBtYXhSZXF1ZXN0TnVtYmVyID0gMDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NTdWdhckRlZmVycmVkTWFwOiBNYXA8bnVtYmVyLCBQcm9jZXNzU3VnYXJEZWZlcnJlZD4gPSBuZXcgTWFwKCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBhdGhUb0dlbmVyYXRvclJvb3REaXI6IHN0cmluZyxcbiAgICAgICAgcHVyZ2VDYWNoZTogYm9vbGVhbixcbiAgICAgICAgdXNlR2VuZXJhdG9yUmVzdGFydGluZzogYm9vbGVhbixcbiAgICAgICAgbG9nZ2VyOiBJTG9nZ2VyID0gZ2V0TG9nZ2VyKClcbiAgICApIHtcbiAgICAgICAgdGhpcy51c2VHZW5lcmF0b3JSZXN0YXJ0aW5nID0gdXNlR2VuZXJhdG9yUmVzdGFydGluZztcbiAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyID0gcGF0aFRvR2VuZXJhdG9yUm9vdERpcjtcbiAgICAgICAgdGhpcy5wdXJnZUNhY2hlID0gcHVyZ2VDYWNoZTtcbiAgICAgICAgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIgPSBuZXcgR2VuZXJhdG9yU291cmNlc0ltcG9ydGVyKHB1cmdlQ2FjaGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRMb2NhbGl6ZWRTdWdhcihzdWdhckZpbGVzOiBTdWdhckNvbnRlbnQsIHJlc291cmNlczogRm9ybVJlc291cmNlcyk6IFByb21pc2U8U3VnYXJDb250ZW50PiB7XG4gICAgICAgIGNvbnN0IGxvY2FsaXphdGlvbkVudHJ5UG9pbnQgPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRMb2NhbGl6YXRpb24oXG4gICAgICAgICAgICB0aGlzLnBhdGhUb0dlbmVyYXRvclJvb3REaXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGxvY2FsaXphdGlvbkVudHJ5UG9pbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLQlNCw0L3QvdCw0Y8g0LLQtdGA0YHQuNGPINCz0LXQvdC10YDQsNGC0L7RgNCwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC70L7QutCw0LvQuNC30LDRhtC40Y4uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGl6YXRpb25FbnRyeVBvaW50LmdldExvY2FsaXplZFN1Z2FyKHN1Z2FyRmlsZXMsIHJlc291cmNlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldERpY3Rpb25hcnkoXG4gICAgICAgIHN1Z2FyRmlsZXM6IFN1Z2FyQ29udGVudCxcbiAgICAgICAgcmVzb3VyY2VzOiBGb3JtUmVzb3VyY2VzXG4gICAgKTogUHJvbWlzZTxMb2NhbGl6YXRpb25EaWN0aW9uYXJ5Q29udGVudD4ge1xuICAgICAgICBjb25zdCBsb2NhbGl6YXRpb25FbnRyeVBvaW50ID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIuaW1wb3J0TG9jYWxpemF0aW9uKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsb2NhbGl6YXRpb25FbnRyeVBvaW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi0JTQsNC90L3QsNGPINCy0LXRgNGB0LjRjyDQs9C10L3QtdGA0LDRgtC+0YDQsCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQu9C+0LrQsNC70LjQt9Cw0YbQuNGOLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxpemF0aW9uRW50cnlQb2ludC5nZXREaWN0aW9uYXJ5KHN1Z2FyRmlsZXMsIHJlc291cmNlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlYWRTb3VyY2VzKFxuICAgICAgICBmb3JtU291cmNlc1BhdGg6IHN0cmluZyxcbiAgICAgICAgZmFybURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBobEZhcm1EaXJlY3RvcnlQYXRoOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPEZvcm1Tb3VyY2U+IHtcbiAgICAgICAgY29uc3QgcmVhZFNvdXJjZXM6IEZvcm1HZW5lcmF0b3JbXCJyZWFkU291cmNlc1wiXSA9IGF3YWl0IHRoaXMuZ2VuZXJhdG9yU291cmNlc0ltcG9ydGVyLmltcG9ydFJlYWRTb3VyY2VzKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZvcm1Tb3VyY2UgPSBhd2FpdCByZWFkU291cmNlcyhmb3JtU291cmNlc1BhdGgsIGZhcm1EaXJlY3RvcnksIGhsRmFybURpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIHJldHVybiBmb3JtU291cmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxEZXBlbmRlbmNpZXMoXG4gICAgICAgIGZvcm1Tb3VyY2VzUGF0aDogc3RyaW5nLFxuICAgICAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgZ2V0QWxsRGVwZW5kZW5jaWVzID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIuaW1wb3J0R2V0QWxsRGVwZW5kZW5jaWVzKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChnZXRBbGxEZXBlbmRlbmNpZXMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHZlcnNpb24gb2YgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBvcnQgZGVwZW5kZW5jaWVzIGV4dHJhY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9ybVNvdXJjZSA9IGF3YWl0IGdldEFsbERlcGVuZGVuY2llcyhmb3JtU291cmNlc1BhdGgsIGZhcm1EaXJlY3RvcnksIGhsRmFybURpcmVjdG9yeVBhdGgpO1xuICAgICAgICByZXR1cm4gZm9ybVNvdXJjZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc3VwcG9ydHNEZXBlbmRlbmNpZXNFeHRyYWN0aW9uKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCBnZXRBbGxEZXBlbmRlbmNpZXNIYXNoID0gYXdhaXQgdGhpcy5nZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIuaW1wb3J0R2V0QWxsRGVwZW5kZW5jaWVzSGFzaChcbiAgICAgICAgICAgIHRoaXMucGF0aFRvR2VuZXJhdG9yUm9vdERpclxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaCAhPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbERlcGVuZGVuY2llc0hhc2goXG4gICAgICAgIGZvcm1Tb3VyY2VzUGF0aDogc3RyaW5nLFxuICAgICAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGg6IHN0cmluZ1xuICAgICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGdldEFsbERlcGVuZGVuY2llc0hhc2ggPSBhd2FpdCB0aGlzLmdlbmVyYXRvclNvdXJjZXNJbXBvcnRlci5pbXBvcnRHZXRBbGxEZXBlbmRlbmNpZXNIYXNoKFxuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChnZXRBbGxEZXBlbmRlbmNpZXNIYXNoID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyB2ZXJzaW9uIG9mIGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IGRlcGVuZGVuY2llcyBleHRyYWN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm1Tb3VyY2UgPSBhd2FpdCBnZXRBbGxEZXBlbmRlbmNpZXNIYXNoKGZvcm1Tb3VyY2VzUGF0aCwgZmFybURpcmVjdG9yeSwgaGxGYXJtRGlyZWN0b3J5UGF0aCk7XG4gICAgICAgIHJldHVybiBmb3JtU291cmNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhcihcbiAgICAgICAgZm9ybVNvdXJjZXNQYXRoOiBzdHJpbmcsXG4gICAgICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgaGxGYXJtRGlyZWN0b3J5UGF0aDogc3RyaW5nLFxuICAgICAgICBnZW5lcmF0aW9uT3B0aW9ucz86IEdlbmVyYXRpb25PcHRpb25zXG4gICAgKTogUHJvbWlzZTxHZW5lcmF0ZWRGb3JtPiB7XG4gICAgICAgIHRoaXMubWF4UmVxdWVzdE51bWJlcisrO1xuICAgICAgICBjb25zdCBjdXJyZW50UmVxdWVzdE51bWJlciA9IHRoaXMubWF4UmVxdWVzdE51bWJlcjtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlPEdlbmVyYXRlZEZvcm0+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuc2V0KGN1cnJlbnRSZXF1ZXN0TnVtYmVyLCB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICByZWplY3Q6IHJlamVjdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuZ2VuZXJhdG9yUHJvY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzID0gdGhpcy5mb3JrUmVhZFNvdXJjZXNBbmRQcm9jZXNzU3VnYXJXb3JrZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51c2VHZW5lcmF0b3JSZXN0YXJ0aW5nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXhSZXF1ZXN0TnVtYmVyICUgMTAgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlc3RhcnRpbmcgZ2VuZXJhdG9yXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yUHJvY2Vzcy5raWxsKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdG9yUHJvY2VzcyA9IHRoaXMuZm9ya1JlYWRTb3VyY2VzQW5kUHJvY2Vzc1N1Z2FyV29ya2VyKCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZXN0YXJ0ZWQgZ2VuZXJhdG9yXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZW5lcmF0b3JQcm9jZXNzLnNlbmQoW1xuICAgICAgICAgICAgdGhpcy5wYXRoVG9HZW5lcmF0b3JSb290RGlyLFxuICAgICAgICAgICAgZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGgsXG4gICAgICAgICAgICBnZW5lcmF0aW9uT3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMucHVyZ2VDYWNoZSxcbiAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0TnVtYmVyLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgICAgICB0aGlzLnByb2Nlc3NTdWdhckRlZmVycmVkTWFwLmRlbGV0ZShjdXJyZW50UmVxdWVzdE51bWJlcik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByb2Nlc3NTdWdhcihcbiAgICAgICAgc3VnYXJGaWxlczogU3VnYXJDb250ZW50LFxuICAgICAgICByZXNvdXJjZXM6IEZvcm1SZXNvdXJjZXMsXG4gICAgICAgIGdlbmVyYXRpb25PcHRpb25zPzogR2VuZXJhdGlvbk9wdGlvbnNcbiAgICApOiBQcm9taXNlPEdlbmVyYXRlZEZvcm0+IHtcbiAgICAgICAgdGhpcy5tYXhSZXF1ZXN0TnVtYmVyKys7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXF1ZXN0TnVtYmVyID0gdGhpcy5tYXhSZXF1ZXN0TnVtYmVyO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8R2VuZXJhdGVkRm9ybT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VnYXJEZWZlcnJlZE1hcC5zZXQoY3VycmVudFJlcXVlc3ROdW1iZXIsIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgIHJlamVjdDogcmVqZWN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5nZW5lcmF0b3JQcm9jZXNzKSB7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRvclByb2Nlc3MgPSB0aGlzLmZvcmtQcm9jZXNzU3VnYXJXb3JrZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2VuZXJhdG9yUHJvY2Vzcy5zZW5kKFtcbiAgICAgICAgICAgIHRoaXMucGF0aFRvR2VuZXJhdG9yUm9vdERpcixcbiAgICAgICAgICAgIHN1Z2FyRmlsZXMsXG4gICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICBnZW5lcmF0aW9uT3B0aW9ucyxcbiAgICAgICAgICAgIHRoaXMucHVyZ2VDYWNoZSxcbiAgICAgICAgICAgIGN1cnJlbnRSZXF1ZXN0TnVtYmVyLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuICAgICAgICB0aGlzLnByb2Nlc3NTdWdhckRlZmVycmVkTWFwLmRlbGV0ZShjdXJyZW50UmVxdWVzdE51bWJlcik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JrUHJvY2Vzc1N1Z2FyV29ya2VyKCk6IENoaWxkUHJvY2VzcyB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NTdWdhcldvcmtlciA9IGZvcmsoXCIuL1Byb2Nlc3NTdWdhcldvcmtlclwiLCBbXSwge1xuICAgICAgICAgICAgY3dkOiBfX2Rpcm5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2Nlc3NTdWdhcldvcmtlci5vbihcIm1lc3NhZ2VcIiwgKHJlc3BvbnNlOiBDYWxsUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZWZlcnJlZCA9IHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuZ2V0KHJlc3BvbnNlLnJlcXVlc3ROdW1iZXIpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnREZWZlcnJlZCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERlZmVycmVkLnJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3JUZXh0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1Db250ZW50ID0gcmVzcG9uc2UuZ2VuZXJhdGVkRm9ybTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IEdlbmVyYXRlZEZvcm0gPSB7fTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZm9ybUNvbnRlbnRJdGVtXSBvZiBpdGVyYXRlRW50cmllcyhmb3JtQ29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGZvcm1Db250ZW50SXRlbSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUNvbnRlbnRJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBCdWZmZXIuZnJvbShmb3JtQ29udGVudEl0ZW0ucGF5bG9hZCwgZm9ybUNvbnRlbnRJdGVtLmVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50RGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwcm9jZXNzU3VnYXJXb3JrZXIub24oXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NTdWdhcldvcmtlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcmtSZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhcldvcmtlcigpOiBDaGlsZFByb2Nlc3Mge1xuICAgICAgICBjb25zdCBwcm9jZXNzU3VnYXJXb3JrZXIgPSBmb3JrKFwiLi9SZWFkU291cmNlc0FuZFByb2Nlc3NTdWdhcldvcmtlclwiLCBbXSwge1xuICAgICAgICAgICAgY3dkOiBfX2Rpcm5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb2Nlc3NTdWdhcldvcmtlci5vbihcIm1lc3NhZ2VcIiwgKHJlc3BvbnNlOiBDYWxsUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZWZlcnJlZCA9IHRoaXMucHJvY2Vzc1N1Z2FyRGVmZXJyZWRNYXAuZ2V0KHJlc3BvbnNlLnJlcXVlc3ROdW1iZXIpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnREZWZlcnJlZCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gXCJFcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERlZmVycmVkLnJlamVjdChuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3JUZXh0KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1Db250ZW50ID0gcmVzcG9uc2UuZ2VuZXJhdGVkRm9ybTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IEdlbmVyYXRlZEZvcm0gPSB7fTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgZm9ybUNvbnRlbnRJdGVtXSBvZiBpdGVyYXRlRW50cmllcyhmb3JtQ29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGZvcm1Db250ZW50SXRlbSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUNvbnRlbnRJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBCdWZmZXIuZnJvbShmb3JtQ29udGVudEl0ZW0ucGF5bG9hZCwgZm9ybUNvbnRlbnRJdGVtLmVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50RGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwcm9jZXNzU3VnYXJXb3JrZXIub24oXCJlcnJvclwiLCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NTdWdhcldvcmtlcjtcbiAgICB9XG59XG5cbmNvbnN0IGdlbmVyYXRvcnNDYWNoZTogTWFwPHN0cmluZywgR2VuZXJhdG9yQXN5bmNQcm94eT4gPSBuZXcgTWFwKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBc3luY0dlbmVyYXRvcihcbiAgICBwYXRoVG9HZW5lcmF0b3JSb290RGlyOiBzdHJpbmcsXG4gICAgcHVyZ2VDYWNoZTogYm9vbGVhbixcbiAgICB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nOiBib29sZWFuXG4pOiBGb3JtR2VuZXJhdG9yIHtcbiAgICBsZXQgcmVzdWx0ID0gZ2VuZXJhdG9yc0NhY2hlLmdldChwYXRoVG9HZW5lcmF0b3JSb290RGlyKTtcbiAgICBpZiAocmVzdWx0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSBuZXcgR2VuZXJhdG9yQXN5bmNQcm94eShwYXRoVG9HZW5lcmF0b3JSb290RGlyLCBwdXJnZUNhY2hlLCB1c2VHZW5lcmF0b3JSZXN0YXJ0aW5nKTtcbiAgICAgICAgZ2VuZXJhdG9yc0NhY2hlLnNldChwYXRoVG9HZW5lcmF0b3JSb290RGlyLCByZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxjQUFBLEdBQUFDLE9BQUE7QUFHQSxJQUFBQyxhQUFBLEdBQUFELE9BQUE7QUFRQSxJQUFBRSxjQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxzQkFBQSxHQUFBSCxPQUFBO0FBZEE7O0FBc0JBLE1BQU1JLG1CQUFtQixDQUEwQjtFQVN4Q0MsV0FBV0EsQ0FDZEMsc0JBQThCLEVBQzlCQyxVQUFtQixFQUNuQkMsc0JBQStCLEVBQy9CQyxNQUFlLEdBQUcsSUFBQUMsdUJBQVMsRUFBQyxDQUFDLEVBQy9CO0lBQUEsS0FiZUosc0JBQXNCO0lBQUEsS0FDdEJLLHdCQUF3QjtJQUFBLEtBQ3hCSixVQUFVO0lBQUEsS0FDVkMsc0JBQXNCO0lBQUEsS0FDL0JJLGdCQUFnQjtJQUFBLEtBQ2hCQyxnQkFBZ0IsR0FBRyxDQUFDO0lBQUEsS0FDWEMsdUJBQXVCLEdBQXNDLElBQUlDLEdBQUcsQ0FBQyxDQUFDO0lBUW5GLElBQUksQ0FBQ1Asc0JBQXNCLEdBQUdBLHNCQUFzQjtJQUNwRCxJQUFJLENBQUNGLHNCQUFzQixHQUFHQSxzQkFBc0I7SUFDcEQsSUFBSSxDQUFDQyxVQUFVLEdBQUdBLFVBQVU7SUFDNUIsSUFBSSxDQUFDSSx3QkFBd0IsR0FBRyxJQUFJSywrQ0FBd0IsQ0FBQ1QsVUFBVSxDQUFDO0VBQzVFO0VBRUEsTUFBYVUsaUJBQWlCQSxDQUFDQyxVQUF3QixFQUFFQyxTQUF3QixFQUF5QjtJQUN0RyxNQUFNQyxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQ1Qsd0JBQXdCLENBQUNVLGtCQUFrQixDQUNqRixJQUFJLENBQUNmLHNCQUNULENBQUM7SUFDRCxJQUFJYyxzQkFBc0IsSUFBSUUsU0FBUyxFQUFFO01BQ3JDLE1BQU0sSUFBSUMsS0FBSyxDQUFDLHVEQUF1RCxDQUFDO0lBQzVFO0lBQ0EsT0FBT0gsc0JBQXNCLENBQUNILGlCQUFpQixDQUFDQyxVQUFVLEVBQUVDLFNBQVMsQ0FBQztFQUMxRTtFQUVBLE1BQWFLLGFBQWFBLENBQ3RCTixVQUF3QixFQUN4QkMsU0FBd0IsRUFDYztJQUN0QyxNQUFNQyxzQkFBc0IsR0FBRyxNQUFNLElBQUksQ0FBQ1Qsd0JBQXdCLENBQUNVLGtCQUFrQixDQUNqRixJQUFJLENBQUNmLHNCQUNULENBQUM7SUFDRCxJQUFJYyxzQkFBc0IsSUFBSUUsU0FBUyxFQUFFO01BQ3JDLE1BQU0sSUFBSUMsS0FBSyxDQUFDLHVEQUF1RCxDQUFDO0lBQzVFO0lBQ0EsT0FBT0gsc0JBQXNCLENBQUNJLGFBQWEsQ0FBQ04sVUFBVSxFQUFFQyxTQUFTLENBQUM7RUFDdEU7RUFFQSxNQUFhTSxXQUFXQSxDQUNwQkMsZUFBdUIsRUFDdkJDLGFBQXFCLEVBQ3JCQyxtQkFBMkIsRUFDUjtJQUNuQixNQUFNSCxXQUF5QyxHQUFHLE1BQU0sSUFBSSxDQUFDZCx3QkFBd0IsQ0FBQ2tCLGlCQUFpQixDQUNuRyxJQUFJLENBQUN2QixzQkFDVCxDQUFDO0lBQ0QsTUFBTXdCLFVBQVUsR0FBRyxNQUFNTCxXQUFXLENBQUNDLGVBQWUsRUFBRUMsYUFBYSxFQUFFQyxtQkFBbUIsQ0FBQztJQUV6RixPQUFPRSxVQUFVO0VBQ3JCO0VBRUEsTUFBYUMsa0JBQWtCQSxDQUMzQkwsZUFBdUIsRUFDdkJDLGFBQXFCLEVBQ3JCQyxtQkFBMkIsRUFDVjtJQUNqQixNQUFNRyxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQ3BCLHdCQUF3QixDQUFDcUIsd0JBQXdCLENBQ25GLElBQUksQ0FBQzFCLHNCQUNULENBQUM7SUFDRCxJQUFJeUIsa0JBQWtCLElBQUlULFNBQVMsRUFBRTtNQUNqQyxNQUFNLElBQUlDLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQztJQUN6RjtJQUNBLE1BQU1PLFVBQVUsR0FBRyxNQUFNQyxrQkFBa0IsQ0FBQ0wsZUFBZSxFQUFFQyxhQUFhLEVBQUVDLG1CQUFtQixDQUFDO0lBQ2hHLE9BQU9FLFVBQVU7RUFDckI7RUFFQSxNQUFhRyw4QkFBOEJBLENBQUEsRUFBcUI7SUFDNUQsTUFBTUMsc0JBQXNCLEdBQUcsTUFBTSxJQUFJLENBQUN2Qix3QkFBd0IsQ0FBQ3dCLDRCQUE0QixDQUMzRixJQUFJLENBQUM3QixzQkFDVCxDQUFDO0lBQ0QsT0FBTzRCLHNCQUFzQixJQUFJWixTQUFTO0VBQzlDO0VBRUEsTUFBYVksc0JBQXNCQSxDQUMvQlIsZUFBdUIsRUFDdkJDLGFBQXFCLEVBQ3JCQyxtQkFBMkIsRUFDWjtJQUNmLE1BQU1NLHNCQUFzQixHQUFHLE1BQU0sSUFBSSxDQUFDdkIsd0JBQXdCLENBQUN3Qiw0QkFBNEIsQ0FDM0YsSUFBSSxDQUFDN0Isc0JBQ1QsQ0FBQztJQUNELElBQUk0QixzQkFBc0IsSUFBSVosU0FBUyxFQUFFO01BQ3JDLE1BQU0sSUFBSUMsS0FBSyxDQUFDLG9FQUFvRSxDQUFDO0lBQ3pGO0lBQ0EsTUFBTU8sVUFBVSxHQUFHLE1BQU1JLHNCQUFzQixDQUFDUixlQUFlLEVBQUVDLGFBQWEsRUFBRUMsbUJBQW1CLENBQUM7SUFDcEcsT0FBT0UsVUFBVTtFQUNyQjtFQUVBLE1BQWFNLDBCQUEwQkEsQ0FDbkNWLGVBQXVCLEVBQ3ZCQyxhQUFxQixFQUNyQkMsbUJBQTJCLEVBQzNCUyxpQkFBcUMsRUFDZjtJQUN0QixJQUFJLENBQUN4QixnQkFBZ0IsRUFBRTtJQUN2QixNQUFNeUIsb0JBQW9CLEdBQUcsSUFBSSxDQUFDekIsZ0JBQWdCO0lBQ2xELE1BQU0wQixPQUFPLEdBQUcsSUFBSUMsT0FBTyxDQUFnQixDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUM1RCxJQUFJLENBQUM1Qix1QkFBdUIsQ0FBQzZCLEdBQUcsQ0FBQ0wsb0JBQW9CLEVBQUU7UUFDbkRHLE9BQU8sRUFBRUEsT0FBTztRQUNoQkMsTUFBTSxFQUFFQTtNQUNaLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQyxJQUFJLENBQUM5QixnQkFBZ0IsRUFBRTtNQUN4QixJQUFJLENBQUNBLGdCQUFnQixHQUFHLElBQUksQ0FBQ2dDLG9DQUFvQyxDQUFDLENBQUM7SUFDdkU7SUFDQSxJQUFJLElBQUksQ0FBQ3BDLHNCQUFzQixFQUFFO01BQzdCLElBQUksSUFBSSxDQUFDSyxnQkFBZ0IsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFO1FBQ2xDZ0MsT0FBTyxDQUFDQyxHQUFHLENBQUMsc0JBQXNCLENBQUM7UUFDbkMsSUFBSSxDQUFDbEMsZ0JBQWdCLENBQUNtQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUNuQyxnQkFBZ0IsR0FBR1UsU0FBUztRQUNqQyxJQUFJLENBQUNWLGdCQUFnQixHQUFHLElBQUksQ0FBQ2dDLG9DQUFvQyxDQUFDLENBQUM7UUFDbkVDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHFCQUFxQixDQUFDO01BQ3RDO0lBQ0o7SUFFQSxJQUFJLENBQUNsQyxnQkFBZ0IsQ0FBQ29DLElBQUksQ0FBQyxDQUN2QixJQUFJLENBQUMxQyxzQkFBc0IsRUFDM0JvQixlQUFlLEVBQ2ZDLGFBQWEsRUFDYkMsbUJBQW1CLEVBQ25CUyxpQkFBaUIsRUFDakIsSUFBSSxDQUFDOUIsVUFBVSxFQUNmK0Isb0JBQW9CLENBQ3ZCLENBQUM7SUFFRixNQUFNVyxNQUFNLEdBQUcsTUFBTVYsT0FBTztJQUM1QixJQUFJLENBQUN6Qix1QkFBdUIsQ0FBQ29DLE1BQU0sQ0FBQ1osb0JBQW9CLENBQUM7SUFDekQsT0FBT1csTUFBTTtFQUNqQjtFQUVBLE1BQWFFLFlBQVlBLENBQ3JCakMsVUFBd0IsRUFDeEJDLFNBQXdCLEVBQ3hCa0IsaUJBQXFDLEVBQ2Y7SUFDdEIsSUFBSSxDQUFDeEIsZ0JBQWdCLEVBQUU7SUFDdkIsTUFBTXlCLG9CQUFvQixHQUFHLElBQUksQ0FBQ3pCLGdCQUFnQjtJQUNsRCxNQUFNMEIsT0FBTyxHQUFHLElBQUlDLE9BQU8sQ0FBZ0IsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEtBQUs7TUFDNUQsSUFBSSxDQUFDNUIsdUJBQXVCLENBQUM2QixHQUFHLENBQUNMLG9CQUFvQixFQUFFO1FBQ25ERyxPQUFPLEVBQUVBLE9BQU87UUFDaEJDLE1BQU0sRUFBRUE7TUFDWixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRixJQUFJLENBQUMsSUFBSSxDQUFDOUIsZ0JBQWdCLEVBQUU7TUFDeEIsSUFBSSxDQUFDQSxnQkFBZ0IsR0FBRyxJQUFJLENBQUN3QyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3pEO0lBRUEsSUFBSSxDQUFDeEMsZ0JBQWdCLENBQUNvQyxJQUFJLENBQUMsQ0FDdkIsSUFBSSxDQUFDMUMsc0JBQXNCLEVBQzNCWSxVQUFVLEVBQ1ZDLFNBQVMsRUFDVGtCLGlCQUFpQixFQUNqQixJQUFJLENBQUM5QixVQUFVLEVBQ2YrQixvQkFBb0IsQ0FDdkIsQ0FBQztJQUVGLE1BQU1XLE1BQU0sR0FBRyxNQUFNVixPQUFPO0lBQzVCLElBQUksQ0FBQ3pCLHVCQUF1QixDQUFDb0MsTUFBTSxDQUFDWixvQkFBb0IsQ0FBQztJQUN6RCxPQUFPVyxNQUFNO0VBQ2pCO0VBRVFHLHNCQUFzQkEsQ0FBQSxFQUFpQjtJQUMzQyxNQUFNQyxrQkFBa0IsR0FBRyxJQUFBQyxtQkFBSSxFQUFDLHNCQUFzQixFQUFFLEVBQUUsRUFBRTtNQUN4REMsR0FBRyxFQUFFQztJQUNULENBQUMsQ0FBQztJQUVGSCxrQkFBa0IsQ0FBQ0ksRUFBRSxDQUFDLFNBQVMsRUFBR0MsUUFBc0IsSUFBSztNQUN6RCxNQUFNQyxlQUFlLEdBQUcsSUFBSSxDQUFDN0MsdUJBQXVCLENBQUM4QyxHQUFHLENBQUNGLFFBQVEsQ0FBQ0csYUFBYSxDQUFDO01BQ2hGLElBQUlGLGVBQWUsSUFBSXJDLFNBQVMsRUFBRTtRQUM5QjtNQUNKO01BQ0EsSUFBSW9DLFFBQVEsQ0FBQ0ksSUFBSSxLQUFLLE9BQU8sRUFBRTtRQUMzQkgsZUFBZSxDQUFDakIsTUFBTSxDQUFDLElBQUluQixLQUFLLENBQUNtQyxRQUFRLENBQUNLLFNBQVMsQ0FBQyxDQUFDO01BQ3pELENBQUMsTUFBTTtRQUNILE1BQU1DLFdBQVcsR0FBR04sUUFBUSxDQUFDTyxhQUFhO1FBQzFDLE1BQU1oQixNQUFxQixHQUFHLENBQUMsQ0FBQztRQUVoQyxLQUFLLE1BQU0sQ0FBQ2lCLEdBQUcsRUFBRUMsZUFBZSxDQUFDLElBQUksSUFBQUMsNkJBQWMsRUFBQ0osV0FBVyxDQUFDLEVBQUU7VUFDOURmLE1BQU0sQ0FBQ2lCLEdBQUcsQ0FBQyxHQUNQLE9BQU9DLGVBQWUsS0FBSyxRQUFRLEdBQzdCQSxlQUFlLEdBQ2ZFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSCxlQUFlLENBQUNJLE9BQU8sRUFBRUosZUFBZSxDQUFDSyxRQUFRLENBQUM7UUFDNUU7UUFFQWIsZUFBZSxDQUFDbEIsT0FBTyxDQUFDUSxNQUFNLENBQUM7TUFDbkM7SUFDSixDQUFDLENBQUM7SUFFRkksa0JBQWtCLENBQUNJLEVBQUUsQ0FBQyxPQUFPLEVBQUVnQixLQUFLLElBQUk7TUFDcEMsTUFBTUEsS0FBSztJQUNmLENBQUMsQ0FBQztJQUVGLE9BQU9wQixrQkFBa0I7RUFDN0I7RUFFUVQsb0NBQW9DQSxDQUFBLEVBQWlCO0lBQ3pELE1BQU1TLGtCQUFrQixHQUFHLElBQUFDLG1CQUFJLEVBQUMsb0NBQW9DLEVBQUUsRUFBRSxFQUFFO01BQ3RFQyxHQUFHLEVBQUVDO0lBQ1QsQ0FBQyxDQUFDO0lBRUZILGtCQUFrQixDQUFDSSxFQUFFLENBQUMsU0FBUyxFQUFHQyxRQUFzQixJQUFLO01BQ3pELE1BQU1DLGVBQWUsR0FBRyxJQUFJLENBQUM3Qyx1QkFBdUIsQ0FBQzhDLEdBQUcsQ0FBQ0YsUUFBUSxDQUFDRyxhQUFhLENBQUM7TUFDaEYsSUFBSUYsZUFBZSxJQUFJckMsU0FBUyxFQUFFO1FBQzlCO01BQ0o7TUFDQSxJQUFJb0MsUUFBUSxDQUFDSSxJQUFJLEtBQUssT0FBTyxFQUFFO1FBQzNCSCxlQUFlLENBQUNqQixNQUFNLENBQUMsSUFBSW5CLEtBQUssQ0FBQ21DLFFBQVEsQ0FBQ0ssU0FBUyxDQUFDLENBQUM7TUFDekQsQ0FBQyxNQUFNO1FBQ0gsTUFBTUMsV0FBVyxHQUFHTixRQUFRLENBQUNPLGFBQWE7UUFDMUMsTUFBTWhCLE1BQXFCLEdBQUcsQ0FBQyxDQUFDO1FBRWhDLEtBQUssTUFBTSxDQUFDaUIsR0FBRyxFQUFFQyxlQUFlLENBQUMsSUFBSSxJQUFBQyw2QkFBYyxFQUFDSixXQUFXLENBQUMsRUFBRTtVQUM5RGYsTUFBTSxDQUFDaUIsR0FBRyxDQUFDLEdBQ1AsT0FBT0MsZUFBZSxLQUFLLFFBQVEsR0FDN0JBLGVBQWUsR0FDZkUsTUFBTSxDQUFDQyxJQUFJLENBQUNILGVBQWUsQ0FBQ0ksT0FBTyxFQUFFSixlQUFlLENBQUNLLFFBQVEsQ0FBQztRQUM1RTtRQUVBYixlQUFlLENBQUNsQixPQUFPLENBQUNRLE1BQU0sQ0FBQztNQUNuQztJQUNKLENBQUMsQ0FBQztJQUVGSSxrQkFBa0IsQ0FBQ0ksRUFBRSxDQUFDLE9BQU8sRUFBRWdCLEtBQUssSUFBSTtNQUNwQyxNQUFNQSxLQUFLO0lBQ2YsQ0FBQyxDQUFDO0lBRUYsT0FBT3BCLGtCQUFrQjtFQUM3QjtBQUNKO0FBRUEsTUFBTXFCLGVBQWlELEdBQUcsSUFBSTNELEdBQUcsQ0FBQyxDQUFDO0FBRTVELFNBQVM0RCxvQkFBb0JBLENBQ2hDckUsc0JBQThCLEVBQzlCQyxVQUFtQixFQUNuQkMsc0JBQStCLEVBQ2xCO0VBQ2IsSUFBSXlDLE1BQU0sR0FBR3lCLGVBQWUsQ0FBQ2QsR0FBRyxDQUFDdEQsc0JBQXNCLENBQUM7RUFDeEQsSUFBSTJDLE1BQU0sSUFBSTNCLFNBQVMsRUFBRTtJQUNyQjJCLE1BQU0sR0FBRyxJQUFJN0MsbUJBQW1CLENBQUNFLHNCQUFzQixFQUFFQyxVQUFVLEVBQUVDLHNCQUFzQixDQUFDO0lBQzVGa0UsZUFBZSxDQUFDL0IsR0FBRyxDQUFDckMsc0JBQXNCLEVBQUUyQyxNQUFNLENBQUM7RUFDdkQ7RUFDQSxPQUFPQSxNQUFNO0FBQ2pCIn0=
|