@kontur.candy/tools 2.185.0 → 2.185.2
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/candy.js +0 -0
- package/distr/Common/AsyncUtils.js +1 -1
- package/distr/Common/AsyncUtils.js.map +1 -0
- package/distr/Common/AutoValidationUtils.js +2 -3
- package/distr/Common/AutoValidationUtils.js.map +1 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +2 -3
- package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/CandyApiClientContext.js +4 -5
- package/distr/Common/CandyApiClient/CandyApiClientContext.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/ClientDraftInfoResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/FnsFormInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/GetClientDraftInfoUrl.js.map +1 -0
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js +1 -1
- package/distr/Common/CandyApiClient/ClientDraftInfo/PrintInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js +2 -3
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/Data/TaxRebate1152026.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js +2 -3
- package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakePicklists.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js +4 -5
- package/distr/Common/CandyApiClient/DigestApiClient/React/DigestApiClientContext.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js +3 -5
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestQueryFilter.js.map +1 -0
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js +1 -1
- package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +1 -1
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
- package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -0
- package/distr/Common/CandyApiClient/IsBuffer.js +1 -1
- package/distr/Common/CandyApiClient/IsBuffer.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js +1 -1
- package/distr/Common/CandyApiClient/Types/Attachments/Attacments.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Attachments/GetAttachmentsResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
- package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/CreateDraft/CreateDraftResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/DiagResourcesResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js +3 -5
- package/distr/Common/CandyApiClient/Types/DraftActions/CombineFufResult.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/ConvertDraftRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/DraftFullId.js +1 -1
- package/distr/Common/CandyApiClient/Types/DraftFullId.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js +2 -3
- package/distr/Common/CandyApiClient/Types/ErrorLog/CandyPopdProtocol.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js +3 -5
- package/distr/Common/CandyApiClient/Types/ErrorLog/ServerErrorLog.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js +2 -3
- package/distr/Common/CandyApiClient/Types/ExplanatoryNote/CreateExplanatoryNoteResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/FeatureFlags/FeatureFlagsResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Focus/FocusServerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js +2 -3
- package/distr/Common/CandyApiClient/Types/Focus/FocusTypes.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/GetInner/ServerInnerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRequisitesResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Guid.js +1 -1
- package/distr/Common/CandyApiClient/Types/Guid.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js +1 -1
- package/distr/Common/CandyApiClient/Types/InstancesDeleting/InstancesDeletingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +1 -1
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js +1 -1
- package/distr/Common/CandyApiClient/Types/MassActions/ValueForInstancesSettingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js +2 -3
- package/distr/Common/CandyApiClient/Types/Presentations/DraftPresentationType.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js +1 -1
- package/distr/Common/CandyApiClient/Types/Presentations/PresentationContent.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +2 -3
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/AndExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CompareExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/CountCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/DecimalConstantExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/InstanceIdCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/NotExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/OrExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringConstantExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/StringMatchExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/SumCallExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/TernaryExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/Expressions/ValueReferenceExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryExpression.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/InnerQueryResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SelectClause.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js +1 -1
- package/distr/Common/CandyApiClient/Types/QueryCollecton/SortingRule.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/EmployeeInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesRequest.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js +1 -1
- package/distr/Common/CandyApiClient/Types/Staff/StaffInfo.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js +1 -1
- package/distr/Common/CandyApiClient/Types/Tasks/GetTasksServerResponse.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js +2 -3
- package/distr/Common/CandyApiClient/Types/Tasks/Tasks.js.map +1 -0
- package/distr/Common/CandyApiClient/Types/TestClassification.js +1 -1
- package/distr/Common/CandyApiClient/Types/TestClassification.js.map +1 -0
- package/distr/Common/CollectionUtils.js +1 -1
- package/distr/Common/CollectionUtils.js.map +1 -0
- package/distr/Common/CommonConstants/SectionNames.js +1 -1
- package/distr/Common/CommonConstants/SectionNames.js.map +1 -0
- package/distr/Common/Comparers.js +1 -1
- package/distr/Common/Comparers.js.map +1 -0
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js +3 -3
- package/distr/Common/EmotionStorybookWorkaroundViaAliases.js.map +1 -0
- package/distr/Common/EndPoints.js +6 -11
- package/distr/Common/EndPoints.js.map +1 -0
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js +2 -3
- package/distr/Common/Enums/ButtonSettingsTypeEnum.js.map +1 -0
- package/distr/Common/Errors.js +1 -1
- package/distr/Common/Errors.js.map +1 -0
- package/distr/Common/ExtractGFVPath/ExtractGFVPath.js +1 -1
- package/distr/Common/ExtractGFVPath/ExtractGFVPath.js.map +1 -0
- package/distr/Common/FSPrinterClient/FSPrinterClient.js +2 -2
- package/distr/Common/FSPrinterClient/FSPrinterClient.js.map +1 -0
- package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js +1 -1
- package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js.map +1 -0
- package/distr/Common/FSPrinterClient/IFSPrinterClient.js +6 -11
- package/distr/Common/FSPrinterClient/IFSPrinterClient.js.map +1 -0
- package/distr/Common/FormActionHandlers/ContextualActionNames.js +1 -1
- package/distr/Common/FormActionHandlers/ContextualActionNames.js.map +1 -0
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js +1 -1
- package/distr/Common/FormActionHandlers/ControlNamedContextualAction.js.map +1 -0
- package/distr/Common/FormPathUtils.js +2 -2
- package/distr/Common/FormPathUtils.js.map +1 -0
- package/distr/Common/Funcs.js +1 -1
- package/distr/Common/Funcs.js.map +1 -0
- package/distr/Common/GFV.js +1 -1
- package/distr/Common/GFV.js.map +1 -0
- package/distr/Common/Hooks/UseLocalStorage.js +3 -3
- package/distr/Common/Hooks/UseLocalStorage.js.map +1 -0
- package/distr/Common/HttpClient/AuthenticationMode.js +1 -1
- package/distr/Common/HttpClient/AuthenticationMode.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js +2 -3
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithOptionalPolyfill.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js +2 -3
- package/distr/Common/HttpClient/FetchImplementation/BrowserFetchWithPolyfill.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js +1 -1
- package/distr/Common/HttpClient/FetchImplementation/Fetch.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js +2 -3
- package/distr/Common/HttpClient/FetchImplementation/NativeBrowserFetch.js.map +1 -0
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js +1 -1
- package/distr/Common/HttpClient/FetchImplementation/NodeFetch.js.map +1 -0
- package/distr/Common/HttpClient/HttpClient.js +2 -2
- package/distr/Common/HttpClient/HttpClient.js.map +1 -0
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js +1 -1
- package/distr/Common/HttpClient/HttpClientAuthenticationProvider.js.map +1 -0
- package/distr/Common/HttpClient/IHttpClient.js +1 -1
- package/distr/Common/HttpClient/IHttpClient.js.map +1 -0
- package/distr/Common/IndentString.js +1 -1
- package/distr/Common/IndentString.js.map +1 -0
- package/distr/Common/IntRangeUtils.js +1 -1
- package/distr/Common/IntRangeUtils.js.map +1 -0
- package/distr/Common/IterableUtils.js +1 -1
- package/distr/Common/IterableUtils.js.map +1 -0
- package/distr/Common/KCLangRuntimeUtils.js +1 -1
- package/distr/Common/KCLangRuntimeUtils.js.map +1 -0
- package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +4 -2
- package/distr/Common/ModelPath/AbsoluteModelFieldPath.js.map +1 -0
- package/distr/Common/ModelPath/BuildIterationSequence.js +1 -1
- package/distr/Common/ModelPath/BuildIterationSequence.js.map +1 -0
- package/distr/Common/ModelPath/EachCurrentCollision.js +2 -3
- package/distr/Common/ModelPath/EachCurrentCollision.js.map +1 -0
- package/distr/Common/ModelPath/IEquatable.js +1 -1
- package/distr/Common/ModelPath/IEquatable.js.map +1 -0
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js +1 -1
- package/distr/Common/ModelPath/Map/AbsoluteModelPathMap.js.map +1 -0
- package/distr/Common/ModelPath/Map/Map2.js +1 -1
- package/distr/Common/ModelPath/Map/Map2.js.map +1 -0
- package/distr/Common/ModelPath/Map/ModelPathMap.js +1 -1
- package/distr/Common/ModelPath/Map/ModelPathMap.js.map +1 -0
- package/distr/Common/ModelPath/ModelPath.js +1 -1
- package/distr/Common/ModelPath/ModelPath.js.map +1 -0
- package/distr/Common/ModelPath/ModelPathBuilder.js +1 -1
- package/distr/Common/ModelPath/ModelPathBuilder.js.map +1 -0
- package/distr/Common/ModelPath/ModelPathHelper.js +1 -1
- package/distr/Common/ModelPath/ModelPathHelper.js.map +1 -0
- package/distr/Common/ModelPath/PathMatcher.js +2 -3
- package/distr/Common/ModelPath/PathMatcher.js.map +1 -0
- package/distr/Common/ModelPath/PathSplitHelper.js +1 -1
- package/distr/Common/ModelPath/PathSplitHelper.js.map +1 -0
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js +1 -1
- package/distr/Common/ModelPath/Set/AbsoluteModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js +1 -1
- package/distr/Common/ModelPath/Set/AbsoluteResolvedModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/ModelPathSet.js +1 -1
- package/distr/Common/ModelPath/Set/ModelPathSet.js.map +1 -0
- package/distr/Common/ModelPath/Set/Set2.js +1 -1
- package/distr/Common/ModelPath/Set/Set2.js.map +1 -0
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js +1 -1
- package/distr/Common/NidusClient/ContextualNidusClient/ContextualNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js +1 -1
- package/distr/Common/NidusClient/ContextualNidusClient/IContextualNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js +1 -1
- package/distr/Common/NidusClient/Fakes/CreateUniqueNidusEntryId.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js +1 -1
- package/distr/Common/NidusClient/Fakes/FakeNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js +1 -1
- package/distr/Common/NidusClient/Fakes/LocalStorageBasedNidusClient.js.map +1 -0
- package/distr/Common/NidusClient/INidusClient.js +1 -1
- package/distr/Common/NidusClient/INidusClient.js.map +1 -0
- package/distr/Common/NidusClient/NidusClientContext.js +3 -3
- package/distr/Common/NidusClient/NidusClientContext.js.map +1 -0
- package/distr/Common/NidusClient/NidusClientImpl.js +3 -3
- package/distr/Common/NidusClient/NidusClientImpl.js.map +1 -0
- package/distr/Common/PathConstants.js +4 -7
- package/distr/Common/PathConstants.js.map +1 -0
- package/distr/Common/PicklistApiClient/IPicklistApiClient.js +1 -1
- package/distr/Common/PicklistApiClient/IPicklistApiClient.js.map +1 -0
- package/distr/Common/PicklistApiClient/PicklistApiClient.js +1 -1
- package/distr/Common/PicklistApiClient/PicklistApiClient.js.map +1 -0
- package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js +1 -1
- package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js.map +1 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js +1 -1
- package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js.map +1 -0
- package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js +1 -1
- package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js.map +1 -0
- package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js +1 -1
- package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js.map +1 -0
- package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js +1 -1
- package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js.map +1 -0
- package/distr/Common/RngSchemeTypes/types.js +1 -1
- package/distr/Common/RngSchemeTypes/types.js.map +1 -0
- package/distr/Common/StringArrayKey.js +1 -1
- package/distr/Common/StringArrayKey.js.map +1 -0
- package/distr/Common/TextExtractor/TextExtractorTypes.js +1 -1
- package/distr/Common/TextExtractor/TextExtractorTypes.js.map +1 -0
- package/distr/Common/TypingUtils.js +1 -1
- package/distr/Common/TypingUtils.js.map +1 -0
- package/distr/Common/UUID.js +1 -1
- package/distr/Common/UUID.js.map +1 -0
- package/distr/Common/UseAsyncEffect.js +3 -3
- package/distr/Common/UseAsyncEffect.js.map +1 -0
- package/distr/Common/UseShowOnce.js +1 -1
- package/distr/Common/UseShowOnce.js.map +1 -0
- package/distr/Common/UseTypedSelector.js +2 -3
- package/distr/Common/UseTypedSelector.js.map +1 -0
- package/distr/Common/WellKnownDirectories.js +1 -1
- package/distr/Common/WellKnownDirectories.js.map +1 -0
- package/distr/Common/getRngSchemaFilename.js +1 -1
- package/distr/Common/getRngSchemaFilename.js.map +1 -0
- package/distr/Common/hashUtils.js +1 -1
- package/distr/Common/hashUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js +9 -4
- package/distr/Tools/src/BuildTasks/ClientJS/BuildClientJsTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js +6 -12
- package/distr/Tools/src/BuildTasks/ClientJS/IsWebpack5.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js +1 -1
- package/distr/Tools/src/BuildTasks/Engine/AcquireFormEngine.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +3 -3
- package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js +4 -3
- package/distr/Tools/src/BuildTasks/Engine/BuildLocalEngineTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js +1 -1
- package/distr/Tools/src/BuildTasks/Engine/EngineSource.js.map +1 -0
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js +1 -1
- package/distr/Tools/src/BuildTasks/EngineStructureUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js +1 -1
- package/distr/Tools/src/BuildTasks/EngineVersionUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/FSTask.js +1 -1
- package/distr/Tools/src/BuildTasks/FSTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +3 -3
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +3 -3
- package/distr/Tools/src/BuildTasks/Form/GenerateForm.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js +1 -1
- package/distr/Tools/src/BuildTasks/Form/NullFormGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js +1 -1
- package/distr/Tools/src/BuildTasks/Form/WriteAttachmentPathFiles.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js +3 -3
- package/distr/Tools/src/BuildTasks/Form/WriteFLangNormalizationFiles.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/AcquireFormGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js +3 -3
- package/distr/Tools/src/BuildTasks/Generator/AcquirePublishedGeneratorTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js +4 -3
- package/distr/Tools/src/BuildTasks/Generator/BuildGeneratorFromSourcesTask.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/CreateAsyncGenerator.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +4 -4
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ProcessSugarWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/RequireUncached.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js +1 -1
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/TypedProcessWorker.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +1 -1
- package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +5 -5
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js.map +1 -0
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +3 -3
- package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ReadFormSource.js +1 -1
- package/distr/Tools/src/BuildTasks/ReadFormSource.js.map +1 -0
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +2 -3
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js.map +1 -0
- package/distr/Tools/src/BuildTasks/Version.js +3 -3
- package/distr/Tools/src/BuildTasks/Version.js.map +1 -0
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js +1 -1
- package/distr/Tools/src/BuildTasks/WriteFormMeta.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js +2 -3
- package/distr/Tools/src/CLICommands/BuildForms/BuildCacheMode.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +2 -3
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +1 -1
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js +3 -3
- package/distr/Tools/src/CLICommands/BuildServer/BuildLogsWebsocketController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js +3 -5
- package/distr/Tools/src/CLICommands/BuildServer/BuildServerServerOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +5 -6
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBuildFormsController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js +2 -3
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js +2 -3
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerLocalSourcesEngineController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPrebuiltResourcesController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js +4 -5
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerPublishedEngineController.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +4 -4
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ClientJsDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/EngineDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/ReportGeneratorErrorToPageBody.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorker.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackDevServerWorker/WebpackDevServerWorkerFactory.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IInputFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/IWatchFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js +3 -3
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/WebpackInMemoryUtils/WebpackHybridFileSystem.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/GlobToRegexp.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/IGeneratedServerSideSourcesProvider.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/RunBuildServer.js.map +1 -0
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/StdStreamsIntercepter.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js +2 -3
- package/distr/Tools/src/CLICommands/CommonOptions/BuildDebugOnlyOption.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js +3 -5
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptionDefintions.js.map +1 -0
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js +1 -1
- package/distr/Tools/src/CLICommands/CommonOptions/CommonOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js +2 -3
- package/distr/Tools/src/CLICommands/DevBuild/DevBuildOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +1 -1
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js +2 -3
- package/distr/Tools/src/CLICommands/FormStats/FormStatsOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +2 -2
- package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js.map +1 -0
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js +4 -5
- package/distr/Tools/src/CLICommands/FormsHelper/FormsHelperController.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js +1 -1
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/fetchfunctions/{gfv}.fetchfunctions.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js +2 -3
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/browser/Smoke.test.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js +2 -3
- package/distr/Tools/src/CLICommands/InitForm/EmptyFormTemplate/test/ui/DemoTest.test.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js +2 -3
- package/distr/Tools/src/CLICommands/InitForm/InitFormOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +3 -3
- package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js.map +1 -0
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js +2 -3
- package/distr/Tools/src/CLICommands/Localization/LocalizationOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +1 -1
- package/distr/Tools/src/CLICommands/Localization/RunLocalization.js.map +1 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js +2 -3
- package/distr/Tools/src/CLICommands/RenameFiles/RenameFilesOptions.js.map +1 -0
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js +3 -3
- package/distr/Tools/src/CLICommands/RenameFiles/RunRenameFiles.js.map +1 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js +2 -3
- package/distr/Tools/src/CLICommands/SugarExtractor/ExtractTextsFromSugarController.js.map +1 -0
- package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js +1 -1
- package/distr/Tools/src/CLICommands/SugarExtractor/Utils.js.map +1 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +3 -3
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js.map +1 -0
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js +2 -3
- package/distr/Tools/src/CLICommands/UpgradeForm/UpgradeFormOptions.js.map +1 -0
- package/distr/Tools/src/CandyCLI.js +1 -1
- package/distr/Tools/src/CandyCLI.js.map +1 -0
- package/distr/Tools/src/CheckNodeJsVersion.js +2 -3
- package/distr/Tools/src/CheckNodeJsVersion.js.map +1 -0
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +1 -1
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js.map +1 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js +3 -3
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplication.js.map +1 -0
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js +1 -1
- package/distr/Tools/src/Commons/ConsoleApplication/ConsoleApplicationContext.js.map +1 -0
- package/distr/Tools/src/Commons/ErrorUntyped.js +1 -1
- package/distr/Tools/src/Commons/ErrorUntyped.js.map +1 -0
- package/distr/Tools/src/Commons/EventObject.js +1 -1
- package/distr/Tools/src/Commons/EventObject.js.map +1 -0
- package/distr/Tools/src/Commons/ExecUtils.js +1 -1
- package/distr/Tools/src/Commons/ExecUtils.js.map +1 -0
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js +1 -1
- package/distr/Tools/src/Commons/ExtractGfvsFromFileName.js.map +1 -0
- package/distr/Tools/src/Commons/FormGlobsUtils.js +1 -1
- package/distr/Tools/src/Commons/FormGlobsUtils.js.map +1 -0
- package/distr/Tools/src/Commons/FormLocationInfo.js +1 -1
- package/distr/Tools/src/Commons/FormLocationInfo.js.map +1 -0
- package/distr/Tools/src/Commons/FsUtils.js +5 -7
- package/distr/Tools/src/Commons/FsUtils.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Actions.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Methods.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/NotFoundWebError.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/CookieParamParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/IParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/JsonBodyParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/StringBodyParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/ParamBinders/UrlQueryParamBinder.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js +2 -3
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Params.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomActionResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/CustomContentResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/EmptyResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/HtmlResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/IResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/JsonResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/PlainTextResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js +3 -3
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results/StreamResultHandler.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js +2 -3
- package/distr/Tools/src/Commons/HttpServer/AttributeRouting/Results.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js +6 -6
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/ExpressServerWrapper.js.map +1 -0
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js +1 -1
- package/distr/Tools/src/Commons/HttpServer/ExpressWrapper/SingletonController.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/Lock.js +1 -1
- package/distr/Tools/src/Commons/Locks/Lock.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/LockHandle.js +1 -1
- package/distr/Tools/src/Commons/Locks/LockHandle.js.map +1 -0
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js +1 -1
- package/distr/Tools/src/Commons/Locks/ReadWriteLockCollection.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/ELKLogger.js +2 -3
- package/distr/Tools/src/Commons/Logging/ELKLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/ILogger.js +1 -1
- package/distr/Tools/src/Commons/Logging/ILogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js +1 -1
- package/distr/Tools/src/Commons/Logging/InMemoryLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/Logger.js +1 -1
- package/distr/Tools/src/Commons/Logging/Logger.js.map +1 -0
- package/distr/Tools/src/Commons/Logging/StaticLogger.js +1 -1
- package/distr/Tools/src/Commons/Logging/StaticLogger.js.map +1 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js +1 -1
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.d.js.map +1 -0
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +3 -3
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js.map +1 -0
- package/distr/Tools/src/Commons/PathPattern.js +1 -1
- package/distr/Tools/src/Commons/PathPattern.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/AggregatedError.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/BuildTask.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js +5 -5
- package/distr/Tools/src/Commons/TasksCore/ChainableValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +3 -3
- package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/EmptyProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/FileSystemEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/FileValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/FixedDirectoryEntriesProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/Observe.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/Observe.js.map +1 -0
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js +1 -1
- package/distr/Tools/src/Commons/TasksCore/SingleValueProducer.js.map +1 -0
- package/distr/Tools/src/Commons/TimingUtils.js +1 -1
- package/distr/Tools/src/Commons/TimingUtils.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +3 -3
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js.map +1 -0
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +2 -2
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js.map +1 -0
- package/distr/Tools/src/GenerateReadMe.js +1 -1
- package/distr/Tools/src/GenerateReadMe.js.map +1 -0
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js.LICENSE.txt +5 -3
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.LICENSE.txt +5 -3
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/Options/CandyToolOptions.js +2 -3
- package/distr/Tools/src/Options/CandyToolOptions.js.map +1 -0
- package/distr/Tools/src/ReadFarmConfig.js +1 -1
- package/distr/Tools/src/ReadFarmConfig.js.map +1 -0
- package/distr/Tools/src/SelfUpdate.js +3 -3
- package/distr/Tools/src/SelfUpdate.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +681 -686
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +581 -866
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.LICENSE.txt +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/jquery-1.11.3.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/polyfill.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/testing.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js +1 -1
- package/distr/Tools/src/StaticFilesForResourcesDir/jquery-1.11.3.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js +1 -1
- package/distr/Tools/src/StaticFilesForResourcesDir/polyfill.min.js.map +1 -0
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js +1 -1
- package/distr/Tools/src/StaticFilesForResourcesDir/testing.min.js.map +1 -0
- package/package.json +24 -24
- package/CHANGELOG.md +0 -1659
|
@@ -11,8 +11,8 @@ var _pLimit = _interopRequireDefault(require("p-limit"));
|
|
|
11
11
|
var _IterableUtils = require("../../../../Common/IterableUtils");
|
|
12
12
|
var _TypingUtils = require("../../../../Common/TypingUtils");
|
|
13
13
|
var _AggregatedError = require("./AggregatedError");
|
|
14
|
-
function _getRequireWildcardCache(
|
|
15
|
-
function _interopRequireWildcard(
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
16
|
async function noop() {
|
|
17
17
|
// empty function
|
|
18
18
|
}
|
|
@@ -371,7 +371,7 @@ class SplitToChainsValueProducer extends ChainableValueProducer {
|
|
|
371
371
|
}
|
|
372
372
|
for (const removedKey of removedKeys) {
|
|
373
373
|
const removedChain = this.chains[removedKey];
|
|
374
|
-
removedChain === null || removedChain === void 0
|
|
374
|
+
removedChain === null || removedChain === void 0 || removedChain.detachListener();
|
|
375
375
|
if (this.isInObserveState) {
|
|
376
376
|
await (removedChain === null || removedChain === void 0 ? void 0 : removedChain.valueProducer.endObserve());
|
|
377
377
|
}
|
|
@@ -512,7 +512,7 @@ class ParallelSplitToChainsValueProducer extends ChainableValueProducer {
|
|
|
512
512
|
}
|
|
513
513
|
for (const removedKey of removedKeys) {
|
|
514
514
|
const removedChain = this.chains[removedKey];
|
|
515
|
-
removedChain === null || removedChain === void 0
|
|
515
|
+
removedChain === null || removedChain === void 0 || removedChain.detachListener();
|
|
516
516
|
if (this.isInObserveState) {
|
|
517
517
|
await (removedChain === null || removedChain === void 0 ? void 0 : removedChain.valueProducer.endObserve());
|
|
518
518
|
}
|
|
@@ -664,4 +664,4 @@ function delay(timeout) {
|
|
|
664
664
|
function isNotNullOrUndefined(input) {
|
|
665
665
|
return input != undefined;
|
|
666
666
|
}
|
|
667
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3BMaW1pdCIsIl9JdGVyYWJsZVV0aWxzIiwiX1R5cGluZ1V0aWxzIiwiX0FnZ3JlZ2F0ZWRFcnJvciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJub29wIiwiQ2hhaW5hYmxlVmFsdWVQcm9kdWNlciIsImNvbnN0cnVjdG9yIiwiZXJyb3JMaXN0ZW5lcnMiLCJvbk5leHQiLCJfbGlzdGVuZXIiLCJFcnJvciIsIm9uRXJyb3IiLCJsaXN0ZW5lciIsInB1c2giLCJpbmRleCIsImluZGV4T2YiLCJzcGxpY2UiLCJjdXJyZW50VmFsdWUiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1GdW5jdGlvbiIsIlRyYW5zZm9ybVZhbHVlUHJvZHVjZXIiLCJkbyIsImFjdGlvbiIsIkV4ZWN1dGVPblZhbHVlUHJvZHVjZXIiLCJjaGFpbldpdGgiLCJuZXh0SXRlbUZhY3RvcnkiLCJhdHRhY2giLCJhdHRhY2hGYWN0b3J5Iiwiam9pblZhbHVlcyIsImV2YWx1YXRlQXR0YWNoS2V5IiwiQXR0YWNoVmFsdWVQcm9kdWNlciIsInNraXBVcGRhdGVzVW50aWxOZXh0Q29tcGxldGVkIiwiU2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWRQcm9kdWNlciIsInNwbGl0VG9DaGFpbnMiLCJzcGxpdEZ1bmN0aW9uIiwiZ2V0S2V5IiwiZmFjdG9yeSIsIlNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyIiwic3BsaXRUb1BhcmFsbGVsQ2hhaW5zIiwiUGFyYWxsZWxTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlciIsIm9ic2VydmUiLCJiZWdpbk9ic2VydmUiLCJkZXRhY2hMaXN0ZW5lciIsImVuZE9ic2VydmUiLCJlbWl0RXJyb3IiLCJlcnJvciIsImVycm9yT2JqZWN0IiwiZXJyb3JMaXN0ZW5lciIsImV4cG9ydHMiLCJPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2UiLCJhcmdzIiwibGlzdGVuZXJzIiwiZ2V0Q3VycmVudFZhbHVlIiwiYmVnaW5MaXN0ZW5pbmciLCJzdG9wTGlzdGVuaW5nIiwiZW1pdFVwZGF0ZSIsInZhbHVlIiwibm90aWZ5QWxsTGlzdGVuZXJzQW5kV2FpdEZvckNvbXBsZXRlIiwibmV4dFZhbHVlIiwicGFyZW50IiwibGFzdEF0dGFjaEtleSIsImF0dGFjaGVkUHJvZHVjZXIiLCJkZXRhY2hQYXJlbnRMaXN0ZW5lciIsImRldGFjaEF0dGFjaGVkTGlzdGVuZXIiLCJsYXN0QXR0YWNoZWRWYWx1ZSIsImxhc3RQYXJlbnRWYWx1ZSIsImF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUiLCJpc0luT2JzZXJ2ZVN0YXRlIiwiaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSIsImF0dGFjaGVkVmFsdWUiLCJ1bmRlZmluZWQiLCJlbWl0TmV4dFZhbHVlIiwiaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUiLCJwYXJlbnRWYWx1ZSIsImF0dGFjaEtleSIsImRlbGF5IiwieCIsImxlbmd0aCIsImUiLCJjb25zb2xlIiwibG9nIiwiY2hhaW5zIiwiaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4iLCJjaGFpblZhbHVlIiwibGFzdFZhbHVlIiwiZW1pdFZhbHVlIiwidmFsdWVzIiwibWFwIiwiZmlsdGVyIiwiaXNOb3ROdWxsT3JVbmRlZmluZWQiLCJoYW5kbGVDaGFuZ2VQYXJlbnQiLCJpbnB1dCIsIm5leHRWYWx1ZXNNYXAiLCJ0b01hcCIsIm5ld0tleXMiLCJfIiwiZGlmZmVyZW5jZSIsImtleXMiLCJyZW1vdmVkS2V5cyIsIm5ld0tleSIsIl9uZXh0VmFsdWVzTWFwJG5ld0tleSIsIm5ld0NoYWluIiwicmVqZWN0IiwibmV3Q2hhaW5WYWx1ZSIsInZhbHVlUHJvZHVjZXIiLCJyZW1vdmVkS2V5IiwicmVtb3ZlZENoYWluIiwicmVzdWx0IiwiZXJyb3JzIiwiY2hpbGRWYWx1ZVByb2R1Y2VyIiwiY2hpbGRWYWx1ZSIsIkFnZ3JlZ2F0ZWRFcnJvciIsIml0ZXJhdGVWYWx1ZXMiLCJfbmV4dFZhbHVlc01hcCRuZXdLZXkyIiwiY29uY3VycmVuY3lMaW1pdCIsInBMaW1pdCIsImNwdXMiLCJQcm9taXNlIiwiYWxsIiwiX3RoaXMkY2hhaW5zJGtleSIsImRldGFjaEZyb21QYXJlbnQiLCJuZXh0RW1pdFRvUHJvY2VzcyIsImN1cnJlbnRseVByb2Nlc3NpbmdFbWl0Iiwib25jZSIsInRpbWVvdXQiLCJyZXNvbHZlIiwic2V0VGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gXCJvc1wiO1xuXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgcExpbWl0IGZyb20gXCJwLWxpbWl0XCI7XG5cbmltcG9ydCB7IFJlYXNvbk9yRXJyb3IgfSBmcm9tIFwiLi4vRXJyb3JVbnR5cGVkXCI7XG5pbXBvcnQgeyBpdGVyYXRlVmFsdWVzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzXCI7XG5pbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9uL1R5cGluZ1V0aWxzXCI7XG5cbmltcG9ydCB7IEFnZ3JlZ2F0ZWRFcnJvciB9IGZyb20gXCIuL0FnZ3JlZ2F0ZWRFcnJvclwiO1xuaW1wb3J0IHsgRGV0YWNoTGlzdGVuZXIsIElWYWx1ZVByb2R1Y2VyLCBWYWx1ZUxpc3RlbmVyIH0gZnJvbSBcIi4vQnVpbGRUYXNrXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIG5vb3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gZW1wdHkgZnVuY3Rpb25cbn1cblxuZXhwb3J0IGNsYXNzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VD4gaW1wbGVtZW50cyBJVmFsdWVQcm9kdWNlcjxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlcnJvckxpc3RlbmVyczogQXJyYXk8VmFsdWVMaXN0ZW5lcjxFcnJvcj4+ID0gW107XG5cbiAgICBwdWJsaWMgb25OZXh0KF9saXN0ZW5lcjogKG5leHRWYWx1ZTogVCkgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25FcnJvcihsaXN0ZW5lcjogKGVycm9yOiBFcnJvcikgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5lcnJvckxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lcnJvckxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvckxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdEVycm9yXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm08VE8+KHRyYW5zZm9ybUZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFByb21pc2U8VE8+KTogVHJhbnNmb3JtVmFsdWVQcm9kdWNlcjxULCBUTz4ge1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zZm9ybVZhbHVlUHJvZHVjZXIodGhpcywgdHJhbnNmb3JtRnVuY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBkbyhhY3Rpb246IChpbnB1dDogVCkgPT4gUHJvbWlzZTx2b2lkPik6IEV4ZWN1dGVPblZhbHVlUHJvZHVjZXI8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IEV4ZWN1dGVPblZhbHVlUHJvZHVjZXIodGhpcywgYWN0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhaW5XaXRoPFRPLCBUVlAgZXh0ZW5kcyBJVmFsdWVQcm9kdWNlcjxUTz4+KG5leHRJdGVtRmFjdG9yeTogKHByZXZJdGVtOiBJVmFsdWVQcm9kdWNlcjxUPikgPT4gVFZQKTogVFZQIHtcbiAgICAgICAgcmV0dXJuIG5leHRJdGVtRmFjdG9yeSh0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXR0YWNoPFRBLCBUTyA9IFQ+KFxuICAgICAgICBhdHRhY2hGYWN0b3J5OiAodmFsdWU6IFQpID0+IFByb21pc2U8SVZhbHVlUHJvZHVjZXI8VEE+PixcbiAgICAgICAgam9pblZhbHVlcz86IChvcmlnaW5hbDogVCwgYXR0YWNoZWQ6IFRBKSA9PiBQcm9taXNlPFRPPixcbiAgICAgICAgZXZhbHVhdGVBdHRhY2hLZXk/OiAodmFsdWU6IFQpID0+IFByb21pc2U8c3RyaW5nPlxuICAgICk6IEF0dGFjaFZhbHVlUHJvZHVjZXI8VCwgVEEsIFRPPiB7XG4gICAgICAgIHJldHVybiBuZXcgQXR0YWNoVmFsdWVQcm9kdWNlcih0aGlzLCBhdHRhY2hGYWN0b3J5LCBqb2luVmFsdWVzLCBldmFsdWF0ZUF0dGFjaEtleSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNraXBVcGRhdGVzVW50aWxOZXh0Q29tcGxldGVkKCk6IFNraXBVcGRhdGVzVW50aWxOZXh0Q29tcGxldGVkUHJvZHVjZXI8VD4ge1xuICAgICAgICByZXR1cm4gbmV3IFNraXBVcGRhdGVzVW50aWxOZXh0Q29tcGxldGVkUHJvZHVjZXIodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNwbGl0VG9DaGFpbnM8VEksIFRPPihcbiAgICAgICAgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdLFxuICAgICAgICBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZyxcbiAgICAgICAgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+XG4gICAgKTogU3BsaXRUb0NoYWluc1ZhbHVlUHJvZHVjZXI8VCwgVEksIFRPPiB7XG4gICAgICAgIHJldHVybiBuZXcgU3BsaXRUb0NoYWluc1ZhbHVlUHJvZHVjZXIodGhpcywgc3BsaXRGdW5jdGlvbiwgZ2V0S2V5LCBmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3BsaXRUb1BhcmFsbGVsQ2hhaW5zPFRJLCBUTz4oXG4gICAgICAgIHNwbGl0RnVuY3Rpb246IChpbnB1dDogVCkgPT4gVElbXSxcbiAgICAgICAgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmcsXG4gICAgICAgIGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPiB8IFByb21pc2U8SVZhbHVlUHJvZHVjZXI8VE8+PlxuICAgICk6IFBhcmFsbGVsU3BsaXRUb0NoYWluc1ZhbHVlUHJvZHVjZXI8VCwgVEksIFRPPiB7XG4gICAgICAgIHJldHVybiBuZXcgUGFyYWxsZWxTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcih0aGlzLCBzcGxpdEZ1bmN0aW9uLCBnZXRLZXksIGZhY3RvcnkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvYnNlcnZlKGxpc3RlbmVyOiBWYWx1ZUxpc3RlbmVyPFQ+ID0gbm9vcCk6IFByb21pc2U8KCkgPT4gUHJvbWlzZTx2b2lkPj4ge1xuICAgICAgICBhd2FpdCB0aGlzLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICBhd2FpdCBsaXN0ZW5lcihhd2FpdCB0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGRldGFjaExpc3RlbmVyID0gdGhpcy5vbk5leHQobGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0RXJyb3JcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVuZE9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0RXJyb3JcIik7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcm90ZWN0ZWQgYXN5bmMgZW1pdEVycm9yKGVycm9yOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgZXJyb3JPYmplY3QgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoYCR7ZXJyb3J9YCk7XG4gICAgICAgIGZvciAoY29uc3QgZXJyb3JMaXN0ZW5lciBvZiB0aGlzLmVycm9yTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBlcnJvckxpc3RlbmVyKGVycm9yT2JqZWN0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZTxUPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VD4ge1xuICAgIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyczogQXJyYXk8VmFsdWVMaXN0ZW5lcjxUPj4gPSBbXTtcblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRDdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0RXJyb3JcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZ2luT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5iZWdpbkxpc3RlbmluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnN0b3BMaXN0ZW5pbmcoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgYmVnaW5MaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0RXJyb3JcIik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHN0b3BMaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0RXJyb3JcIik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGVtaXRVcGRhdGUodmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnlBbGxMaXN0ZW5lcnNBbmRXYWl0Rm9yQ29tcGxldGUodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQobGlzdGVuZXI6IChuZXh0VmFsdWU6IFQpID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIG5vdGlmeUFsbExpc3RlbmVyc0FuZFdhaXRGb3JDb21wbGV0ZShuZXh0VmFsdWU6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIobmV4dFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF0dGFjaFZhbHVlUHJvZHVjZXI8VEksIFRBLCBUTz4gZXh0ZW5kcyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPFRPPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFRJPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF0dGFjaEZhY3Rvcnk6ICh2YWx1ZTogVEkpID0+IFByb21pc2U8SVZhbHVlUHJvZHVjZXI8VEE+PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGpvaW5WYWx1ZXM6IChvcmlnaW5hbDogVEksIGF0dGFjaGVkOiBUQSkgPT4gUHJvbWlzZTxUTz47XG4gICAgcHJpdmF0ZSBsYXN0QXR0YWNoS2V5Pzogc3RyaW5nO1xuICAgIHByaXZhdGUgYXR0YWNoZWRQcm9kdWNlcj86IElWYWx1ZVByb2R1Y2VyPFRBPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2YWx1YXRlQXR0YWNoS2V5OiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPHN0cmluZz47XG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IEFycmF5PFZhbHVlTGlzdGVuZXI8VE8+PiA9IFtdO1xuICAgIHByaXZhdGUgZGV0YWNoUGFyZW50TGlzdGVuZXI/OiBEZXRhY2hMaXN0ZW5lcjtcbiAgICBwcml2YXRlIGRldGFjaEF0dGFjaGVkTGlzdGVuZXI/OiBEZXRhY2hMaXN0ZW5lcjtcbiAgICBwcml2YXRlIGxhc3RBdHRhY2hlZFZhbHVlPzogVEE7XG4gICAgcHJpdmF0ZSBsYXN0UGFyZW50VmFsdWU/OiBUSTtcbiAgICBwcml2YXRlIGF3YWl0aW5nTGFzdEF0dGFjaGVkVmFsdWUgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUST4sXG4gICAgICAgIGF0dGFjaEZhY3Rvcnk6ICh2YWx1ZTogVEkpID0+IFByb21pc2U8SVZhbHVlUHJvZHVjZXI8VEE+PixcbiAgICAgICAgam9pblZhbHVlcz86IChvcmlnaW5hbDogVEksIGF0dGFjaGVkOiBUQSkgPT4gUHJvbWlzZTxUTz4sXG4gICAgICAgIGV2YWx1YXRlQXR0YWNoS2V5PzogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxzdHJpbmc+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmF0dGFjaEZhY3RvcnkgPSBhdHRhY2hGYWN0b3J5O1xuICAgICAgICAvLyDQryDQvdC1INC80L7Qs9GDINC/0L7QsdC10LTQuNGC0Ywg0YLQuNC/0LjQt9Cw0YbQuNGOINCyINGN0YLQvtC8INC80LXRgdGC0LUsINGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0YMg0LzQtdC90Y8g0LrQvtC00LAg0L/QvtC70YPRh9Cw0LXRgtGB0Y9cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLmpvaW5WYWx1ZXMgPSBqb2luVmFsdWVzIHx8IChhc3luYyB4ID0+IHgpO1xuICAgICAgICB0aGlzLmV2YWx1YXRlQXR0YWNoS2V5ID0gZXZhbHVhdGVBdHRhY2hLZXkgfHwgKGFzeW5jICgpID0+IFwiU1RBVElDLUFUVEFDSC1LRVlcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZ2luT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuYmVnaW5PYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVuZE9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmVuZE9ic2VydmUoKTtcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUTz4ge1xuICAgICAgICBjb25zdCBnZXRDdXJyZW50VmFsdWUgPSBhc3luYyAoKTogUHJvbWlzZTxUTz4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50VmFsdWUgPSBhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9IHBhcmVudFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYXR0YWNoS2V5ID0gYXdhaXQgdGhpcy5ldmFsdWF0ZUF0dGFjaEtleShwYXJlbnRWYWx1ZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyID0gdGhpcy5hdHRhY2hlZFByb2R1Y2VyLm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZUF0dGFjaGVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubGFzdEF0dGFjaEtleSA9PSB1bmRlZmluZWQgfHwgdGhpcy5sYXN0QXR0YWNoS2V5ICE9PSBhdHRhY2hLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RBdHRhY2hLZXkgPSBhdHRhY2hLZXk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgIT0gdW5kZWZpbmVkICYmIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaGVkUHJvZHVjZXIgPSBhd2FpdCB0aGlzLmF0dGFjaEZhY3RvcnkocGFyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hdHRhY2hlZFByb2R1Y2VyLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgPSB0aGlzLmF0dGFjaGVkUHJvZHVjZXIub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlQXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRQcm9ncmFtU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhdHRhY2hlZFZhbHVlID0gYXdhaXQgdGhpcy5hdHRhY2hlZFByb2R1Y2VyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMubGFzdEF0dGFjaGVkVmFsdWUgPSBhdHRhY2hlZFZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuam9pblZhbHVlcyhwYXJlbnRWYWx1ZSwgYXR0YWNoZWRWYWx1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW1pdE5leHRWYWx1ZSh2YWx1ZTogVE8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVE8pID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICBpZiAodGhpcy5saXN0ZW5lcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZXRhY2hQYXJlbnRMaXN0ZW5lciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyID0gdGhpcy5wYXJlbnQub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciAhPSB1bmRlZmluZWQgJiYgdGhpcy5kZXRhY2hQYXJlbnRMaXN0ZW5lciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyID0gdGhpcy5hdHRhY2hlZFByb2R1Y2VyLm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZUF0dGFjaGVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaFBhcmVudExpc3RlbmVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUNoYW5nZUF0dGFjaGVkVmFsdWUgPSBhc3luYyAoYXR0YWNoZWRWYWx1ZTogVEEpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgdGhpcy5sYXN0QXR0YWNoZWRWYWx1ZSA9IGF0dGFjaGVkVmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5hd2FpdGluZ0xhc3RBdHRhY2hlZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0UGFyZW50VmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZFByb2dyYW1TdGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdE5leHRWYWx1ZShhd2FpdCB0aGlzLmpvaW5WYWx1ZXModGhpcy5sYXN0UGFyZW50VmFsdWUsIGF0dGFjaGVkVmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUNoYW5nZVBhcmVudFZhbHVlID0gYXN5bmMgKHBhcmVudFZhbHVlOiBUSSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICB0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9IHBhcmVudFZhbHVlO1xuICAgICAgICBjb25zdCBhdHRhY2hLZXkgPSBhd2FpdCB0aGlzLmV2YWx1YXRlQXR0YWNoS2V5KHBhcmVudFZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciAhPSB1bmRlZmluZWQgJiYgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyID0gdGhpcy5hdHRhY2hlZFByb2R1Y2VyLm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZUF0dGFjaGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxhc3RBdHRhY2hLZXkgPT0gdW5kZWZpbmVkIHx8IHRoaXMubGFzdEF0dGFjaEtleSAhPT0gYXR0YWNoS2V5KSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RBdHRhY2hLZXkgPSBhdHRhY2hLZXk7XG4gICAgICAgICAgICBpZiAodGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciAhPSB1bmRlZmluZWQgJiYgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hdHRhY2hlZFByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXR0YWNoZWRQcm9kdWNlciA9IGF3YWl0IHRoaXMuYXR0YWNoRmFjdG9yeShwYXJlbnRWYWx1ZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hdHRhY2hlZFByb2R1Y2VyLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyID0gdGhpcy5hdHRhY2hlZFByb2R1Y2VyLm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZUF0dGFjaGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICB9XG4gICAgICAgIC8vINCf0YDQvtGB0YLQviDQvdC10LzQvdC+0LPQviDQvtCx0L7QttC00LXQvCwg0LLQtNGA0YPQsyDQv9GA0LjQtNGR0YIg0LTRgNGD0LPQvtC1IGF0dGFjaGVkVmFsdWVcbiAgICAgICAgdGhpcy5hd2FpdGluZ0xhc3RBdHRhY2hlZFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgZGVsYXkoNzAwKTtcbiAgICAgICAgdGhpcy5hd2FpdGluZ0xhc3RBdHRhY2hlZFZhbHVlID0gZmFsc2U7XG4gICAgICAgIGxldCBhdHRhY2hlZFZhbHVlID0gdGhpcy5sYXN0QXR0YWNoZWRWYWx1ZTtcbiAgICAgICAgaWYgKGF0dGFjaGVkVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhdHRhY2hlZFZhbHVlID0gYXdhaXQgdGhpcy5hdHRhY2hlZFByb2R1Y2VyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXROZXh0VmFsdWUoYXdhaXQgdGhpcy5qb2luVmFsdWVzKHBhcmVudFZhbHVlLCBhdHRhY2hlZFZhbHVlKSk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEV4ZWN1dGVPblZhbHVlUHJvZHVjZXI8VD4gZXh0ZW5kcyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBhY3Rpb246ICh2YWx1ZTogVCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+LCBhY3Rpb246ICh2YWx1ZTogVCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZ2luT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuYmVnaW5PYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVuZE9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmVuZE9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3QgZ2V0Q3VycmVudFZhbHVlID0gYXN5bmMgKCk6IFByb21pc2U8VD4gPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFjdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQub25OZXh0KGFzeW5jIHBhcmVudFZhbHVlID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFjdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIodmFsdWUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0RXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybVZhbHVlUHJvZHVjZXI8VEksIFRPPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VE8+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VEk+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNmb3JtRnVuY3Rpb246ICh2YWx1ZTogVEkpID0+IFByb21pc2U8VE8+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VEk+LCB0cmFuc2Zvcm1GdW5jdGlvbjogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxUTz4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtRnVuY3Rpb24gPSB0cmFuc2Zvcm1GdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFByb21pc2U8VE8+IHtcbiAgICAgICAgY29uc3QgZ2V0Q3VycmVudFZhbHVlID0gYXN5bmMgKCk6IFByb21pc2U8VE8+ID0+IHRoaXMudHJhbnNmb3JtRnVuY3Rpb24oYXdhaXQgdGhpcy5wYXJlbnQuY3VycmVudFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQobGlzdGVuZXI6IChuZXh0VmFsdWU6IFRPKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQub25OZXh0KGFzeW5jIHBhcmVudFZhbHVlID0+IHtcbiAgICAgICAgICAgIGF3YWl0IGxpc3RlbmVyKGF3YWl0IHRoaXMudHJhbnNmb3JtRnVuY3Rpb24ocGFyZW50VmFsdWUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3BsaXRUb0NoYWluc1ZhbHVlUHJvZHVjZXI8VCwgVEksIFRPPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VE9bXT4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNwbGl0RnVuY3Rpb246IChpbnB1dDogVCkgPT4gVElbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldEtleTogKGlucHV0OiBUSSkgPT4gc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdGVuZXJzOiBBcnJheTxWYWx1ZUxpc3RlbmVyPFRPW10+PiA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhaW5zOiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IElWYWx1ZVByb2R1Y2VyPFRPPjtcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogdW5kZWZpbmVkIHwgVE87XG4gICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogRGV0YWNoTGlzdGVuZXI7XG4gICAgICAgIH07XG4gICAgfSA9IHt9O1xuICAgIHByaXZhdGUgaXNJbk9ic2VydmVTdGF0ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+LFxuICAgICAgICBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW10sXG4gICAgICAgIGdldEtleTogKGlucHV0OiBUSSkgPT4gc3RyaW5nLFxuICAgICAgICBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuc3BsaXRGdW5jdGlvbiA9IHNwbGl0RnVuY3Rpb247XG4gICAgICAgIHRoaXMuZ2V0S2V5ID0gZ2V0S2V5O1xuICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5O1xuICAgICAgICB0aGlzLnBhcmVudC5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFByb21pc2U8VE9bXT4ge1xuICAgICAgICBjb25zdCBnZXRDdXJyZW50VmFsdWUgPSBhc3luYyAoKTogUHJvbWlzZTxUT1tdPiA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNwbGl0RnVuY3Rpb24oYXdhaXQgdGhpcy5wYXJlbnQuY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogVE9bXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzOiBSZWFzb25PckVycm9yW10gPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRWYWx1ZVByb2R1Y2VyID0gdGhpcy5mYWN0b3J5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNoaWxkVmFsdWVQcm9kdWNlci5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRWYWx1ZSA9IGF3YWl0IGNoaWxkVmFsdWVQcm9kdWNlci5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGNoaWxkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBjaGlsZFZhbHVlUHJvZHVjZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogY2hpbGRWYWx1ZVByb2R1Y2VyLm9uTmV4dCh4ID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4oeCwga2V5KSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IGNoaWxkVmFsdWVQcm9kdWNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBjaGlsZFZhbHVlUHJvZHVjZXIub25OZXh0KHggPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbih4LCBrZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yc1swXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVkRXJyb3IoXCJUaGVyZSBhcmUgZXJyb3JzXCIsIC4uLmVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVudFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZ2luT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuYmVnaW5PYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVuZE9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmVuZE9ic2VydmUoKTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYXRlVmFsdWVzKHRoaXMuY2hhaW5zKSkge1xuICAgICAgICAgICAgYXdhaXQgdmFsdWUudmFsdWVQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVE9bXSkgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZW1pdFZhbHVlKHZhbHVlOiBUT1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGF3YWl0IGxpc3RlbmVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdG9NYXAodmFsdWVzOiBUSVtdKTogeyBba2V5OiBzdHJpbmddOiBUSSB9IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IFRJIH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJlc3VsdFt0aGlzLmdldEtleSh2YWx1ZSldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUNoYW5nZVBhcmVudENoYWluID0gYXN5bmMgKG5leHRWYWx1ZTogVE8sIGtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGNvbnN0IGNoYWluVmFsdWUgPSB0aGlzLmNoYWluc1trZXldO1xuICAgICAgICBpZiAoY2hhaW5WYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNoYWluVmFsdWUubGFzdFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFZhbHVlKFxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNoYWlucylcbiAgICAgICAgICAgICAgICAubWFwKHggPT4geC5sYXN0VmFsdWUpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVDaGFuZ2VQYXJlbnQgPSBhc3luYyAoaW5wdXQ6IFQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5zcGxpdEZ1bmN0aW9uKGlucHV0KTtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlc01hcCA9IHRoaXMudG9NYXAodmFsdWVzKTtcblxuICAgICAgICBjb25zdCBuZXdLZXlzID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKG5leHRWYWx1ZXNNYXApLCBPYmplY3Qua2V5cyh0aGlzLmNoYWlucykpO1xuICAgICAgICBjb25zdCByZW1vdmVkS2V5cyA9IF8uZGlmZmVyZW5jZShPYmplY3Qua2V5cyh0aGlzLmNoYWlucyksIE9iamVjdC5rZXlzKG5leHRWYWx1ZXNNYXApKTtcbiAgICAgICAgZm9yIChjb25zdCBuZXdLZXkgb2YgbmV3S2V5cykge1xuICAgICAgICAgICAgY29uc3QgbmV3Q2hhaW4gPSB0aGlzLmZhY3RvcnkobmV4dFZhbHVlc01hcFtuZXdLZXldID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXdDaGFpbi5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2hhaW5WYWx1ZSA9IGF3YWl0IG5ld0NoYWluLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1tuZXdLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IG5ld0NoYWluVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IG5ld0NoYWluLFxuICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogbmV3Q2hhaW4ub25OZXh0KG5leHRWYWx1ZSA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKG5leHRWYWx1ZSwgbmV3S2V5KSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW25ld0tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBuZXdDaGFpbixcbiAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IG5ld0NoYWluLm9uTmV4dChuZXh0VmFsdWUgPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbihuZXh0VmFsdWUsIG5ld0tleSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZW1vdmVkS2V5IG9mIHJlbW92ZWRLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkQ2hhaW4gPSB0aGlzLmNoYWluc1tyZW1vdmVkS2V5XTtcbiAgICAgICAgICAgIHJlbW92ZWRDaGFpbj8uZGV0YWNoTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZW1vdmVkQ2hhaW4/LnZhbHVlUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g0K8g0L3QtSDQt9C90LDRjiwg0LrQsNC6INGC0YPRgiDQv9GA0LDQstC40LvRjNC90L5cbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1keW5hbWljLWRlbGV0ZVxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2hhaW5zW3JlbW92ZWRLZXldO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdFZhbHVlKFxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmNoYWlucylcbiAgICAgICAgICAgICAgICAubWFwKHggPT4geC5sYXN0VmFsdWUpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpc05vdE51bGxPclVuZGVmaW5lZClcbiAgICAgICAgKTtcbiAgICB9O1xufVxuXG5leHBvcnQgY2xhc3MgUGFyYWxsZWxTcGxpdFRvQ2hhaW5zVmFsdWVQcm9kdWNlcjxULCBUSSwgVE8+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUT1tdPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz4gfCBQcm9taXNlPElWYWx1ZVByb2R1Y2VyPFRPPj47XG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IEFycmF5PFZhbHVlTGlzdGVuZXI8VE9bXT4+ID0gW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFpbnM6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogSVZhbHVlUHJvZHVjZXI8VE8+O1xuICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQgfCBUTztcbiAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBEZXRhY2hMaXN0ZW5lcjtcbiAgICAgICAgfTtcbiAgICB9ID0ge307XG4gICAgcHJpdmF0ZSBpc0luT2JzZXJ2ZVN0YXRlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD4sXG4gICAgICAgIHNwbGl0RnVuY3Rpb246IChpbnB1dDogVCkgPT4gVElbXSxcbiAgICAgICAgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmcsXG4gICAgICAgIGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPiB8IFByb21pc2U8SVZhbHVlUHJvZHVjZXI8VE8+PlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5zcGxpdEZ1bmN0aW9uID0gc3BsaXRGdW5jdGlvbjtcbiAgICAgICAgdGhpcy5nZXRLZXkgPSBnZXRLZXk7XG4gICAgICAgIHRoaXMuZmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgICAgIHRoaXMucGFyZW50Lm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZVBhcmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUT1tdPiB7XG4gICAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9IGFzeW5jICgpOiBQcm9taXNlPFRPW10+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc3BsaXRGdW5jdGlvbihhd2FpdCB0aGlzLnBhcmVudC5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBUT1tdID0gW107XG4gICAgICAgICAgICBjb25zdCBlcnJvcnM6IFJlYXNvbk9yRXJyb3JbXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgY29uY3VycmVuY3lMaW1pdCA9IHBMaW1pdChvcy5jcHVzKCkubGVuZ3RoKTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICAgICAgY29uY3VycmVuY3lMaW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFZhbHVlUHJvZHVjZXIgPSBhd2FpdCB0aGlzLmZhY3RvcnkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNoaWxkVmFsdWVQcm9kdWNlci5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRWYWx1ZSA9IGF3YWl0IGNoaWxkVmFsdWVQcm9kdWNlci5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZGV4XSA9IGNoaWxkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogY2hpbGRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogY2hpbGRWYWx1ZVByb2R1Y2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogY2hpbGRWYWx1ZVByb2R1Y2VyLm9uTmV4dCh4ID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4oeCwga2V5KSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IGNoaWxkVmFsdWVQcm9kdWNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IGNoaWxkVmFsdWVQcm9kdWNlci5vbk5leHQoeCA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKHgsIGtleSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JzWzBdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZWRFcnJvcihcIlRoZXJlIGFyZSBlcnJvcnNcIiwgLi4uZXJyb3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLmNoYWlucykpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hhaW5zW2tleV0/LnZhbHVlUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQobGlzdGVuZXI6IChuZXh0VmFsdWU6IFRPW10pID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGVtaXRWYWx1ZSh2YWx1ZTogVE9bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvTWFwKHZhbHVlczogVElbXSk6IHsgW2tleTogc3RyaW5nXTogVEkgfSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBUSSB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICByZXN1bHRbdGhpcy5nZXRLZXkodmFsdWUpXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbiA9IGFzeW5jIChuZXh0VmFsdWU6IFRPLCBrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCBjaGFpblZhbHVlID0gdGhpcy5jaGFpbnNba2V5XTtcbiAgICAgICAgaWYgKGNoYWluVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjaGFpblZhbHVlLmxhc3RWYWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRWYWx1ZShcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGFpbnMpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHgubGFzdFZhbHVlKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50ID0gYXN5bmMgKGlucHV0OiBUKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc3BsaXRGdW5jdGlvbihpbnB1dCk7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZXNNYXAgPSB0aGlzLnRvTWFwKHZhbHVlcyk7XG5cbiAgICAgICAgY29uc3QgbmV3S2V5cyA9IF8uZGlmZmVyZW5jZShPYmplY3Qua2V5cyhuZXh0VmFsdWVzTWFwKSwgT2JqZWN0LmtleXModGhpcy5jaGFpbnMpKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEtleXMgPSBfLmRpZmZlcmVuY2UoT2JqZWN0LmtleXModGhpcy5jaGFpbnMpLCBPYmplY3Qua2V5cyhuZXh0VmFsdWVzTWFwKSk7XG4gICAgICAgIGZvciAoY29uc3QgbmV3S2V5IG9mIG5ld0tleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NoYWluID0gYXdhaXQgdGhpcy5mYWN0b3J5KG5leHRWYWx1ZXNNYXBbbmV3S2V5XSA/PyByZWplY3QoKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3Q2hhaW4uYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NoYWluVmFsdWUgPSBhd2FpdCBuZXdDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNbbmV3S2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBuZXdDaGFpblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBuZXdDaGFpbixcbiAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IG5ld0NoYWluLm9uTmV4dChuZXh0VmFsdWUgPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbihuZXh0VmFsdWUsIG5ld0tleSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1tuZXdLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogbmV3Q2hhaW4sXG4gICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBuZXdDaGFpbi5vbk5leHQobmV4dFZhbHVlID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4obmV4dFZhbHVlLCBuZXdLZXkpKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZEtleSBvZiByZW1vdmVkS2V5cykge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZENoYWluID0gdGhpcy5jaGFpbnNbcmVtb3ZlZEtleV07XG4gICAgICAgICAgICByZW1vdmVkQ2hhaW4/LmRldGFjaExpc3RlbmVyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVtb3ZlZENoYWluPy52YWx1ZVByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vINCvINC90LUg0LfQvdCw0Y4sINC60LDQuiDRgtGD0YIg0L/RgNCw0LLQuNC70YzQvdC+XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZHluYW1pYy1kZWxldGVcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNoYWluc1tyZW1vdmVkS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRWYWx1ZShcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGFpbnMpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHgubGFzdFZhbHVlKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gICAgICAgICk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFNraXBVcGRhdGVzVW50aWxOZXh0Q29tcGxldGVkUHJvZHVjZXI8VD4gZXh0ZW5kcyBPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2U8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPjtcbiAgICBwcml2YXRlIGRldGFjaEZyb21QYXJlbnQ/OiBEZXRhY2hMaXN0ZW5lcjtcbiAgICBwcml2YXRlIGxhc3RQYXJlbnRWYWx1ZT86IFQ7XG5cbiAgICBwcml2YXRlIG5leHRFbWl0VG9Qcm9jZXNzPzogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgICBwcml2YXRlIGN1cnJlbnRseVByb2Nlc3NpbmdFbWl0PzogUHJvbWlzZTx2b2lkPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRDdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGlmICh0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gYXdhaXQgdGhpcy5wYXJlbnQuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGFzdFBhcmVudFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZFByb2dyYW1TdGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sYXN0UGFyZW50VmFsdWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJlZ2luTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgaWYgKHRoaXMuZGV0YWNoRnJvbVBhcmVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoRnJvbVBhcmVudCA9IHRoaXMucGFyZW50Lm9uTmV4dChuZXh0VmFsdWUgPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZShuZXh0VmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBzdG9wTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5kZXRhY2hGcm9tUGFyZW50ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hGcm9tUGFyZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuZW5kT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUobmV4dFZhbHVlOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMubGFzdFBhcmVudFZhbHVlID0gbmV4dFZhbHVlO1xuICAgICAgICB0aGlzLm5leHRFbWl0VG9Qcm9jZXNzID0gXy5vbmNlKCgpID0+IHRoaXMuZW1pdFVwZGF0ZShuZXh0VmFsdWUpKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnRseVByb2Nlc3NpbmdFbWl0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQgPSB0aGlzLm5leHRFbWl0VG9Qcm9jZXNzKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQ7XG4gICAgICAgIHRoaXMuY3VycmVudGx5UHJvY2Vzc2luZ0VtaXQgPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZWxheSh0aW1lb3V0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LCB0aW1lb3V0KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNOb3ROdWxsT3JVbmRlZmluZWQ8VD4oaW5wdXQ6IFQgfCB1bmRlZmluZWQgfCBudWxsKTogaW5wdXQgaXMgVCB7XG4gICAgcmV0dXJuIGlucHV0ICE9IHVuZGVmaW5lZDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEVBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFJLGNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQUVBLElBQUFNLGdCQUFBLEdBQUFOLE9BQUE7QUFBb0QsU0FBQU8seUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFG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
|
|
667
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3BMaW1pdCIsIl9JdGVyYWJsZVV0aWxzIiwiX1R5cGluZ1V0aWxzIiwiX0FnZ3JlZ2F0ZWRFcnJvciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm5vb3AiLCJDaGFpbmFibGVWYWx1ZVByb2R1Y2VyIiwiY29uc3RydWN0b3IiLCJlcnJvckxpc3RlbmVycyIsIm9uTmV4dCIsIl9saXN0ZW5lciIsIkVycm9yIiwib25FcnJvciIsImxpc3RlbmVyIiwicHVzaCIsImluZGV4IiwiaW5kZXhPZiIsInNwbGljZSIsImN1cnJlbnRWYWx1ZSIsInRyYW5zZm9ybSIsInRyYW5zZm9ybUZ1bmN0aW9uIiwiVHJhbnNmb3JtVmFsdWVQcm9kdWNlciIsImRvIiwiYWN0aW9uIiwiRXhlY3V0ZU9uVmFsdWVQcm9kdWNlciIsImNoYWluV2l0aCIsIm5leHRJdGVtRmFjdG9yeSIsImF0dGFjaCIsImF0dGFjaEZhY3RvcnkiLCJqb2luVmFsdWVzIiwiZXZhbHVhdGVBdHRhY2hLZXkiLCJBdHRhY2hWYWx1ZVByb2R1Y2VyIiwic2tpcFVwZGF0ZXNVbnRpbE5leHRDb21wbGV0ZWQiLCJTa2lwVXBkYXRlc1VudGlsTmV4dENvbXBsZXRlZFByb2R1Y2VyIiwic3BsaXRUb0NoYWlucyIsInNwbGl0RnVuY3Rpb24iLCJnZXRLZXkiLCJmYWN0b3J5IiwiU3BsaXRUb0NoYWluc1ZhbHVlUHJvZHVjZXIiLCJzcGxpdFRvUGFyYWxsZWxDaGFpbnMiLCJQYXJhbGxlbFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyIiwib2JzZXJ2ZSIsImJlZ2luT2JzZXJ2ZSIsImRldGFjaExpc3RlbmVyIiwiZW5kT2JzZXJ2ZSIsImVtaXRFcnJvciIsImVycm9yIiwiZXJyb3JPYmplY3QiLCJlcnJvckxpc3RlbmVyIiwiZXhwb3J0cyIsIk9ic2VydmFibGVWYWx1ZVByb2R1Y2VyQmFzZSIsImFyZ3MiLCJsaXN0ZW5lcnMiLCJnZXRDdXJyZW50VmFsdWUiLCJiZWdpbkxpc3RlbmluZyIsInN0b3BMaXN0ZW5pbmciLCJlbWl0VXBkYXRlIiwidmFsdWUiLCJub3RpZnlBbGxMaXN0ZW5lcnNBbmRXYWl0Rm9yQ29tcGxldGUiLCJuZXh0VmFsdWUiLCJwYXJlbnQiLCJsYXN0QXR0YWNoS2V5IiwiYXR0YWNoZWRQcm9kdWNlciIsImRldGFjaFBhcmVudExpc3RlbmVyIiwiZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciIsImxhc3RBdHRhY2hlZFZhbHVlIiwibGFzdFBhcmVudFZhbHVlIiwiYXdhaXRpbmdMYXN0QXR0YWNoZWRWYWx1ZSIsImlzSW5PYnNlcnZlU3RhdGUiLCJoYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlIiwiYXR0YWNoZWRWYWx1ZSIsInVuZGVmaW5lZCIsImVtaXROZXh0VmFsdWUiLCJoYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZSIsInBhcmVudFZhbHVlIiwiYXR0YWNoS2V5IiwiZGVsYXkiLCJ4IiwibGVuZ3RoIiwiY29uc29sZSIsImxvZyIsImNoYWlucyIsImhhbmRsZUNoYW5nZVBhcmVudENoYWluIiwia2V5IiwiY2hhaW5WYWx1ZSIsImxhc3RWYWx1ZSIsImVtaXRWYWx1ZSIsInZhbHVlcyIsIm1hcCIsImZpbHRlciIsImlzTm90TnVsbE9yVW5kZWZpbmVkIiwiaGFuZGxlQ2hhbmdlUGFyZW50IiwiaW5wdXQiLCJuZXh0VmFsdWVzTWFwIiwidG9NYXAiLCJuZXdLZXlzIiwiXyIsImRpZmZlcmVuY2UiLCJrZXlzIiwicmVtb3ZlZEtleXMiLCJuZXdLZXkiLCJfbmV4dFZhbHVlc01hcCRuZXdLZXkiLCJuZXdDaGFpbiIsInJlamVjdCIsIm5ld0NoYWluVmFsdWUiLCJ2YWx1ZVByb2R1Y2VyIiwicmVtb3ZlZEtleSIsInJlbW92ZWRDaGFpbiIsInJlc3VsdCIsImVycm9ycyIsImNoaWxkVmFsdWVQcm9kdWNlciIsImNoaWxkVmFsdWUiLCJBZ2dyZWdhdGVkRXJyb3IiLCJpdGVyYXRlVmFsdWVzIiwiX25leHRWYWx1ZXNNYXAkbmV3S2V5MiIsImNvbmN1cnJlbmN5TGltaXQiLCJwTGltaXQiLCJjcHVzIiwiUHJvbWlzZSIsImFsbCIsIl90aGlzJGNoYWlucyRrZXkiLCJkZXRhY2hGcm9tUGFyZW50IiwibmV4dEVtaXRUb1Byb2Nlc3MiLCJjdXJyZW50bHlQcm9jZXNzaW5nRW1pdCIsIm9uY2UiLCJ0aW1lb3V0IiwicmVzb2x2ZSIsInNldFRpbWVvdXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvQ29tbW9ucy9UYXNrc0NvcmUvQ2hhaW5hYmxlVmFsdWVQcm9kdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcblxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHBMaW1pdCBmcm9tIFwicC1saW1pdFwiO1xuXG5pbXBvcnQgeyBSZWFzb25PckVycm9yIH0gZnJvbSBcIi4uL0Vycm9yVW50eXBlZFwiO1xuaW1wb3J0IHsgaXRlcmF0ZVZhbHVlcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vSXRlcmFibGVVdGlsc1wiO1xuaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuXG5pbXBvcnQgeyBBZ2dyZWdhdGVkRXJyb3IgfSBmcm9tIFwiLi9BZ2dyZWdhdGVkRXJyb3JcIjtcbmltcG9ydCB7IERldGFjaExpc3RlbmVyLCBJVmFsdWVQcm9kdWNlciwgVmFsdWVMaXN0ZW5lciB9IGZyb20gXCIuL0J1aWxkVGFza1wiO1xuXG5hc3luYyBmdW5jdGlvbiBub29wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGVtcHR5IGZ1bmN0aW9uXG59XG5cbmV4cG9ydCBjbGFzcyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPFQ+IGltcGxlbWVudHMgSVZhbHVlUHJvZHVjZXI8VD4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JMaXN0ZW5lcnM6IEFycmF5PFZhbHVlTGlzdGVuZXI8RXJyb3I+PiA9IFtdO1xuXG4gICAgcHVibGljIG9uTmV4dChfbGlzdGVuZXI6IChuZXh0VmFsdWU6IFQpID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0RXJyb3JcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXJyb3IobGlzdGVuZXI6IChlcnJvcjogRXJyb3IpID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHRoaXMuZXJyb3JMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZXJyb3JMaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3RFcnJvclwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhbnNmb3JtPFRPPih0cmFuc2Zvcm1GdW5jdGlvbjogKGlucHV0OiBUKSA9PiBQcm9taXNlPFRPPik6IFRyYW5zZm9ybVZhbHVlUHJvZHVjZXI8VCwgVE8+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2Zvcm1WYWx1ZVByb2R1Y2VyKHRoaXMsIHRyYW5zZm9ybUZ1bmN0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZG8oYWN0aW9uOiAoaW5wdXQ6IFQpID0+IFByb21pc2U8dm9pZD4pOiBFeGVjdXRlT25WYWx1ZVByb2R1Y2VyPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBFeGVjdXRlT25WYWx1ZVByb2R1Y2VyKHRoaXMsIGFjdGlvbik7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYWluV2l0aDxUTywgVFZQIGV4dGVuZHMgSVZhbHVlUHJvZHVjZXI8VE8+PihuZXh0SXRlbUZhY3Rvcnk6IChwcmV2SXRlbTogSVZhbHVlUHJvZHVjZXI8VD4pID0+IFRWUCk6IFRWUCB7XG4gICAgICAgIHJldHVybiBuZXh0SXRlbUZhY3RvcnkodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGF0dGFjaDxUQSwgVE8gPSBUPihcbiAgICAgICAgYXR0YWNoRmFjdG9yeTogKHZhbHVlOiBUKSA9PiBQcm9taXNlPElWYWx1ZVByb2R1Y2VyPFRBPj4sXG4gICAgICAgIGpvaW5WYWx1ZXM/OiAob3JpZ2luYWw6IFQsIGF0dGFjaGVkOiBUQSkgPT4gUHJvbWlzZTxUTz4sXG4gICAgICAgIGV2YWx1YXRlQXR0YWNoS2V5PzogKHZhbHVlOiBUKSA9PiBQcm9taXNlPHN0cmluZz5cbiAgICApOiBBdHRhY2hWYWx1ZVByb2R1Y2VyPFQsIFRBLCBUTz4ge1xuICAgICAgICByZXR1cm4gbmV3IEF0dGFjaFZhbHVlUHJvZHVjZXIodGhpcywgYXR0YWNoRmFjdG9yeSwgam9pblZhbHVlcywgZXZhbHVhdGVBdHRhY2hLZXkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBza2lwVXBkYXRlc1VudGlsTmV4dENvbXBsZXRlZCgpOiBTa2lwVXBkYXRlc1VudGlsTmV4dENvbXBsZXRlZFByb2R1Y2VyPFQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBTa2lwVXBkYXRlc1VudGlsTmV4dENvbXBsZXRlZFByb2R1Y2VyKHRoaXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzcGxpdFRvQ2hhaW5zPFRJLCBUTz4oXG4gICAgICAgIHNwbGl0RnVuY3Rpb246IChpbnB1dDogVCkgPT4gVElbXSxcbiAgICAgICAgZ2V0S2V5OiAoaW5wdXQ6IFRJKSA9PiBzdHJpbmcsXG4gICAgICAgIGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPlxuICAgICk6IFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyPFQsIFRJLCBUTz4ge1xuICAgICAgICByZXR1cm4gbmV3IFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyKHRoaXMsIHNwbGl0RnVuY3Rpb24sIGdldEtleSwgZmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNwbGl0VG9QYXJhbGxlbENoYWluczxUSSwgVE8+KFxuICAgICAgICBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW10sXG4gICAgICAgIGdldEtleTogKGlucHV0OiBUSSkgPT4gc3RyaW5nLFxuICAgICAgICBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz4gfCBQcm9taXNlPElWYWx1ZVByb2R1Y2VyPFRPPj5cbiAgICApOiBQYXJhbGxlbFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyPFQsIFRJLCBUTz4ge1xuICAgICAgICByZXR1cm4gbmV3IFBhcmFsbGVsU3BsaXRUb0NoYWluc1ZhbHVlUHJvZHVjZXIodGhpcywgc3BsaXRGdW5jdGlvbiwgZ2V0S2V5LCBmYWN0b3J5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb2JzZXJ2ZShsaXN0ZW5lcjogVmFsdWVMaXN0ZW5lcjxUPiA9IG5vb3ApOiBQcm9taXNlPCgpID0+IFByb21pc2U8dm9pZD4+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgYXdhaXQgbGlzdGVuZXIoYXdhaXQgdGhpcy5jdXJyZW50VmFsdWUpO1xuICAgICAgICBjb25zdCBkZXRhY2hMaXN0ZW5lciA9IHRoaXMub25OZXh0KGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGRldGFjaExpc3RlbmVyKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVuZE9ic2VydmUoKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYmVnaW5PYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdEVycm9yXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdEVycm9yXCIpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJvdGVjdGVkIGFzeW5jIGVtaXRFcnJvcihlcnJvcjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGVycm9yT2JqZWN0ID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKGAke2Vycm9yfWApO1xuICAgICAgICBmb3IgKGNvbnN0IGVycm9yTGlzdGVuZXIgb2YgdGhpcy5lcnJvckxpc3RlbmVycykge1xuICAgICAgICAgICAgYXdhaXQgZXJyb3JMaXN0ZW5lcihlcnJvck9iamVjdCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2U8VD4gZXh0ZW5kcyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPFQ+IHtcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnM6IEFycmF5PFZhbHVlTGlzdGVuZXI8VD4+ID0gW107XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0Q3VycmVudFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdEVycm9yXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVnaW5MaXN0ZW5pbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5kT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9wTGlzdGVuaW5nKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJlZ2luTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdEVycm9yXCIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBzdG9wTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdEVycm9yXCIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBlbWl0VXBkYXRlKHZhbHVlOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMubm90aWZ5QWxsTGlzdGVuZXJzQW5kV2FpdEZvckNvbXBsZXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBub3RpZnlBbGxMaXN0ZW5lcnNBbmRXYWl0Rm9yQ29tcGxldGUobmV4dFZhbHVlOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGF3YWl0IGxpc3RlbmVyKG5leHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdHRhY2hWYWx1ZVByb2R1Y2VyPFRJLCBUQSwgVE8+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUTz4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUST47XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdHRhY2hGYWN0b3J5OiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPElWYWx1ZVByb2R1Y2VyPFRBPj47XG4gICAgcHJpdmF0ZSByZWFkb25seSBqb2luVmFsdWVzOiAob3JpZ2luYWw6IFRJLCBhdHRhY2hlZDogVEEpID0+IFByb21pc2U8VE8+O1xuICAgIHByaXZhdGUgbGFzdEF0dGFjaEtleT86IHN0cmluZztcbiAgICBwcml2YXRlIGF0dGFjaGVkUHJvZHVjZXI/OiBJVmFsdWVQcm9kdWNlcjxUQT47XG4gICAgcHJpdmF0ZSByZWFkb25seSBldmFsdWF0ZUF0dGFjaEtleTogKHZhbHVlOiBUSSkgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdGVuZXJzOiBBcnJheTxWYWx1ZUxpc3RlbmVyPFRPPj4gPSBbXTtcbiAgICBwcml2YXRlIGRldGFjaFBhcmVudExpc3RlbmVyPzogRGV0YWNoTGlzdGVuZXI7XG4gICAgcHJpdmF0ZSBkZXRhY2hBdHRhY2hlZExpc3RlbmVyPzogRGV0YWNoTGlzdGVuZXI7XG4gICAgcHJpdmF0ZSBsYXN0QXR0YWNoZWRWYWx1ZT86IFRBO1xuICAgIHByaXZhdGUgbGFzdFBhcmVudFZhbHVlPzogVEk7XG4gICAgcHJpdmF0ZSBhd2FpdGluZ0xhc3RBdHRhY2hlZFZhbHVlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0luT2JzZXJ2ZVN0YXRlID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VEk+LFxuICAgICAgICBhdHRhY2hGYWN0b3J5OiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPElWYWx1ZVByb2R1Y2VyPFRBPj4sXG4gICAgICAgIGpvaW5WYWx1ZXM/OiAob3JpZ2luYWw6IFRJLCBhdHRhY2hlZDogVEEpID0+IFByb21pc2U8VE8+LFxuICAgICAgICBldmFsdWF0ZUF0dGFjaEtleT86ICh2YWx1ZTogVEkpID0+IFByb21pc2U8c3RyaW5nPlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgdGhpcy5hdHRhY2hGYWN0b3J5ID0gYXR0YWNoRmFjdG9yeTtcbiAgICAgICAgLy8g0K8g0L3QtSDQvNC+0LPRgyDQv9C+0LHQtdC00LjRgtGMINGC0LjQv9C40LfQsNGG0LjRjiDQsiDRjdGC0L7QvCDQvNC10YHRgtC1LCDRgdC70LjRiNC60L7QvCDQvNC90L7Qs9C+INGDINC80LXQvdGPINC60L7QtNCwINC/0L7Qu9GD0YfQsNC10YLRgdGPXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgdGhpcy5qb2luVmFsdWVzID0gam9pblZhbHVlcyB8fCAoYXN5bmMgeCA9PiB4KTtcbiAgICAgICAgdGhpcy5ldmFsdWF0ZUF0dGFjaEtleSA9IGV2YWx1YXRlQXR0YWNoS2V5IHx8IChhc3luYyAoKSA9PiBcIlNUQVRJQy1BVFRBQ0gtS0VZXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmF0dGFjaGVkUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFByb21pc2U8VE8+IHtcbiAgICAgICAgY29uc3QgZ2V0Q3VycmVudFZhbHVlID0gYXN5bmMgKCk6IFByb21pc2U8VE8+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFZhbHVlID0gYXdhaXQgdGhpcy5wYXJlbnQuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5sYXN0UGFyZW50VmFsdWUgPSBwYXJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaEtleSA9IGF3YWl0IHRoaXMuZXZhbHVhdGVBdHRhY2hLZXkocGFyZW50VmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciAhPSB1bmRlZmluZWQgJiYgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RBdHRhY2hLZXkgPT0gdW5kZWZpbmVkIHx8IHRoaXMubGFzdEF0dGFjaEtleSAhPT0gYXR0YWNoS2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0QXR0YWNoS2V5ID0gYXR0YWNoS2V5O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyICE9IHVuZGVmaW5lZCAmJiB0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hdHRhY2hlZFByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRhY2hlZFByb2R1Y2VyID0gYXdhaXQgdGhpcy5hdHRhY2hGYWN0b3J5KHBhcmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyID0gdGhpcy5hdHRhY2hlZFByb2R1Y2VyLm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZUF0dGFjaGVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuYXR0YWNoZWRQcm9kdWNlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkUHJvZ3JhbVN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXR0YWNoZWRWYWx1ZSA9IGF3YWl0IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmxhc3RBdHRhY2hlZFZhbHVlID0gYXR0YWNoZWRWYWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmpvaW5WYWx1ZXMocGFyZW50VmFsdWUsIGF0dGFjaGVkVmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVudFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVtaXROZXh0VmFsdWUodmFsdWU6IFRPKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIGF3YWl0IGxpc3RlbmVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQobGlzdGVuZXI6IChuZXh0VmFsdWU6IFRPKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hQYXJlbnRMaXN0ZW5lciA9IHRoaXMucGFyZW50Lm9uTmV4dCh0aGlzLmhhbmRsZUNoYW5nZVBhcmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgIT0gdW5kZWZpbmVkICYmIHRoaXMuZGV0YWNoUGFyZW50TGlzdGVuZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hQYXJlbnRMaXN0ZW5lciA9IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlbmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXRhY2hQYXJlbnRMaXN0ZW5lciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hQYXJlbnRMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXRhY2hBdHRhY2hlZExpc3RlbmVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlID0gYXN5bmMgKGF0dGFjaGVkVmFsdWU6IFRBKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRoaXMubGFzdEF0dGFjaGVkVmFsdWUgPSBhdHRhY2hlZFZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMuYXdhaXRpbmdMYXN0QXR0YWNoZWRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubGFzdFBhcmVudFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRQcm9ncmFtU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXROZXh0VmFsdWUoYXdhaXQgdGhpcy5qb2luVmFsdWVzKHRoaXMubGFzdFBhcmVudFZhbHVlLCBhdHRhY2hlZFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVDaGFuZ2VQYXJlbnRWYWx1ZSA9IGFzeW5jIChwYXJlbnRWYWx1ZTogVEkpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgdGhpcy5sYXN0UGFyZW50VmFsdWUgPSBwYXJlbnRWYWx1ZTtcbiAgICAgICAgY29uc3QgYXR0YWNoS2V5ID0gYXdhaXQgdGhpcy5ldmFsdWF0ZUF0dGFjaEtleShwYXJlbnRWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgIT0gdW5kZWZpbmVkICYmIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sYXN0QXR0YWNoS2V5ID09IHVuZGVmaW5lZCB8fCB0aGlzLmxhc3RBdHRhY2hLZXkgIT09IGF0dGFjaEtleSkge1xuICAgICAgICAgICAgdGhpcy5sYXN0QXR0YWNoS2V5ID0gYXR0YWNoS2V5O1xuICAgICAgICAgICAgaWYgKHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFjaEF0dGFjaGVkTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmF0dGFjaGVkUHJvZHVjZXIgIT0gdW5kZWZpbmVkICYmIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmF0dGFjaGVkUHJvZHVjZXIgPSBhd2FpdCB0aGlzLmF0dGFjaEZhY3RvcnkocGFyZW50VmFsdWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5iZWdpbk9ic2VydmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGV0YWNoQXR0YWNoZWRMaXN0ZW5lciA9IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VBdHRhY2hlZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hdHRhY2hlZFByb2R1Y2VyID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZFByb2dyYW1TdGF0ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDQn9GA0L7RgdGC0L4g0L3QtdC80L3QvtCz0L4g0L7QsdC+0LbQtNC10LwsINCy0LTRgNGD0LMg0L/RgNC40LTRkdGCINC00YDRg9Cz0L7QtSBhdHRhY2hlZFZhbHVlXG4gICAgICAgIHRoaXMuYXdhaXRpbmdMYXN0QXR0YWNoZWRWYWx1ZSA9IHRydWU7XG4gICAgICAgIGF3YWl0IGRlbGF5KDcwMCk7XG4gICAgICAgIHRoaXMuYXdhaXRpbmdMYXN0QXR0YWNoZWRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBsZXQgYXR0YWNoZWRWYWx1ZSA9IHRoaXMubGFzdEF0dGFjaGVkVmFsdWU7XG4gICAgICAgIGlmIChhdHRhY2hlZFZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXR0YWNoZWRWYWx1ZSA9IGF3YWl0IHRoaXMuYXR0YWNoZWRQcm9kdWNlci5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0TmV4dFZhbHVlKGF3YWl0IHRoaXMuam9pblZhbHVlcyhwYXJlbnRWYWx1ZSwgYXR0YWNoZWRWYWx1ZSkpO1xuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRlT25WYWx1ZVByb2R1Y2VyPFQ+IGV4dGVuZHMgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxUPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uOiAodmFsdWU6IFQpID0+IFByb21pc2U8dm9pZD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPiwgYWN0aW9uOiAodmFsdWU6IFQpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjdXJyZW50VmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9IGFzeW5jICgpOiBQcm9taXNlPFQ+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgdGhpcy5wYXJlbnQuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb24odmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVudFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChsaXN0ZW5lcjogKG5leHRWYWx1ZTogVCkgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Lm9uTmV4dChhc3luYyBwYXJlbnRWYWx1ZSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb24odmFsdWUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGxpc3RlbmVyKHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2Zvcm1WYWx1ZVByb2R1Y2VyPFRJLCBUTz4gZXh0ZW5kcyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPFRPPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFRJPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zZm9ybUZ1bmN0aW9uOiAodmFsdWU6IFRJKSA9PiBQcm9taXNlPFRPPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFRJPiwgdHJhbnNmb3JtRnVuY3Rpb246ICh2YWx1ZTogVEkpID0+IFByb21pc2U8VE8+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnRyYW5zZm9ybUZ1bmN0aW9uID0gdHJhbnNmb3JtRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZ2luT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuYmVnaW5PYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVuZE9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmVuZE9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFRPPiB7XG4gICAgICAgIGNvbnN0IGdldEN1cnJlbnRWYWx1ZSA9IGFzeW5jICgpOiBQcm9taXNlPFRPPiA9PiB0aGlzLnRyYW5zZm9ybUZ1bmN0aW9uKGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIHJldHVybiBnZXRDdXJyZW50VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUTykgPT4gUHJvbWlzZTx2b2lkPik6IERldGFjaExpc3RlbmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Lm9uTmV4dChhc3luYyBwYXJlbnRWYWx1ZSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcihhd2FpdCB0aGlzLnRyYW5zZm9ybUZ1bmN0aW9uKHBhcmVudFZhbHVlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNwbGl0VG9DaGFpbnNWYWx1ZVByb2R1Y2VyPFQsIFRJLCBUTz4gZXh0ZW5kcyBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPFRPW10+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhY3Rvcnk6IChpbnB1dDogVEkpID0+IElWYWx1ZVByb2R1Y2VyPFRPPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyczogQXJyYXk8VmFsdWVMaXN0ZW5lcjxUT1tdPj4gPSBbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYWluczoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBJVmFsdWVQcm9kdWNlcjxUTz47XG4gICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCB8IFRPO1xuICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IERldGFjaExpc3RlbmVyO1xuICAgICAgICB9O1xuICAgIH0gPSB7fTtcbiAgICBwcml2YXRlIGlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPixcbiAgICAgICAgc3BsaXRGdW5jdGlvbjogKGlucHV0OiBUKSA9PiBUSVtdLFxuICAgICAgICBnZXRLZXk6IChpbnB1dDogVEkpID0+IHN0cmluZyxcbiAgICAgICAgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLnNwbGl0RnVuY3Rpb24gPSBzcGxpdEZ1bmN0aW9uO1xuICAgICAgICB0aGlzLmdldEtleSA9IGdldEtleTtcbiAgICAgICAgdGhpcy5mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICAgICAgdGhpcy5wYXJlbnQub25OZXh0KHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRWYWx1ZSgpOiBQcm9taXNlPFRPW10+IHtcbiAgICAgICAgY29uc3QgZ2V0Q3VycmVudFZhbHVlID0gYXN5bmMgKCk6IFByb21pc2U8VE9bXT4gPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5zcGxpdEZ1bmN0aW9uKGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IFRPW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yczogUmVhc29uT3JFcnJvcltdID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVmFsdWVQcm9kdWNlciA9IHRoaXMuZmFjdG9yeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjaGlsZFZhbHVlUHJvZHVjZXIuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVmFsdWUgPSBhd2FpdCBjaGlsZFZhbHVlUHJvZHVjZXIuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjaGlsZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBjaGlsZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogY2hpbGRWYWx1ZVByb2R1Y2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IGNoaWxkVmFsdWVQcm9kdWNlci5vbk5leHQoeCA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKHgsIGtleSkpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBjaGlsZFZhbHVlUHJvZHVjZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogY2hpbGRWYWx1ZVByb2R1Y2VyLm9uTmV4dCh4ID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4oeCwga2V5KSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcnNbMF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9ycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtYXJndW1lbnRcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQWdncmVnYXRlZEVycm9yKFwiVGhlcmUgYXJlIGVycm9yc1wiLCAuLi5lcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRWYWx1ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWdpbk9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmJlZ2luT2JzZXJ2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbmRPYnNlcnZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBhcmVudC5lbmRPYnNlcnZlKCk7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmF0ZVZhbHVlcyh0aGlzLmNoYWlucykpIHtcbiAgICAgICAgICAgIGF3YWl0IHZhbHVlLnZhbHVlUHJvZHVjZXIuZW5kT2JzZXJ2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNJbk9ic2VydmVTdGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQobGlzdGVuZXI6IChuZXh0VmFsdWU6IFRPW10pID0+IFByb21pc2U8dm9pZD4pOiBEZXRhY2hMaXN0ZW5lciB7XG4gICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGVtaXRWYWx1ZSh2YWx1ZTogVE9bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBhd2FpdCBsaXN0ZW5lcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRvTWFwKHZhbHVlczogVElbXSk6IHsgW2tleTogc3RyaW5nXTogVEkgfSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBUSSB9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICByZXN1bHRbdGhpcy5nZXRLZXkodmFsdWUpXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbiA9IGFzeW5jIChuZXh0VmFsdWU6IFRPLCBrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCBjaGFpblZhbHVlID0gdGhpcy5jaGFpbnNba2V5XTtcbiAgICAgICAgaWYgKGNoYWluVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjaGFpblZhbHVlLmxhc3RWYWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRWYWx1ZShcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGFpbnMpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHgubGFzdFZhbHVlKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50ID0gYXN5bmMgKGlucHV0OiBUKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuc3BsaXRGdW5jdGlvbihpbnB1dCk7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZXNNYXAgPSB0aGlzLnRvTWFwKHZhbHVlcyk7XG5cbiAgICAgICAgY29uc3QgbmV3S2V5cyA9IF8uZGlmZmVyZW5jZShPYmplY3Qua2V5cyhuZXh0VmFsdWVzTWFwKSwgT2JqZWN0LmtleXModGhpcy5jaGFpbnMpKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZEtleXMgPSBfLmRpZmZlcmVuY2UoT2JqZWN0LmtleXModGhpcy5jaGFpbnMpLCBPYmplY3Qua2V5cyhuZXh0VmFsdWVzTWFwKSk7XG4gICAgICAgIGZvciAoY29uc3QgbmV3S2V5IG9mIG5ld0tleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NoYWluID0gdGhpcy5mYWN0b3J5KG5leHRWYWx1ZXNNYXBbbmV3S2V5XSA/PyByZWplY3QoKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3Q2hhaW4uYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NoYWluVmFsdWUgPSBhd2FpdCBuZXdDaGFpbi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNbbmV3S2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiBuZXdDaGFpblZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBuZXdDaGFpbixcbiAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IG5ld0NoYWluLm9uTmV4dChuZXh0VmFsdWUgPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbihuZXh0VmFsdWUsIG5ld0tleSkpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1tuZXdLZXldID0ge1xuICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogbmV3Q2hhaW4sXG4gICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBuZXdDaGFpbi5vbk5leHQobmV4dFZhbHVlID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4obmV4dFZhbHVlLCBuZXdLZXkpKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcmVtb3ZlZEtleSBvZiByZW1vdmVkS2V5cykge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZENoYWluID0gdGhpcy5jaGFpbnNbcmVtb3ZlZEtleV07XG4gICAgICAgICAgICByZW1vdmVkQ2hhaW4/LmRldGFjaExpc3RlbmVyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0luT2JzZXJ2ZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVtb3ZlZENoYWluPy52YWx1ZVByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vINCvINC90LUg0LfQvdCw0Y4sINC60LDQuiDRgtGD0YIg0L/RgNCw0LLQuNC70YzQvdC+XG4gICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZHluYW1pYy1kZWxldGVcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNoYWluc1tyZW1vdmVkS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRWYWx1ZShcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5jaGFpbnMpXG4gICAgICAgICAgICAgICAgLm1hcCh4ID0+IHgubGFzdFZhbHVlKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoaXNOb3ROdWxsT3JVbmRlZmluZWQpXG4gICAgICAgICk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFBhcmFsbGVsU3BsaXRUb0NoYWluc1ZhbHVlUHJvZHVjZXI8VCwgVEksIFRPPiBleHRlbmRzIENoYWluYWJsZVZhbHVlUHJvZHVjZXI8VE9bXT4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNwbGl0RnVuY3Rpb246IChpbnB1dDogVCkgPT4gVElbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldEtleTogKGlucHV0OiBUSSkgPT4gc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFjdG9yeTogKGlucHV0OiBUSSkgPT4gSVZhbHVlUHJvZHVjZXI8VE8+IHwgUHJvbWlzZTxJVmFsdWVQcm9kdWNlcjxUTz4+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbGlzdGVuZXJzOiBBcnJheTxWYWx1ZUxpc3RlbmVyPFRPW10+PiA9IFtdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhaW5zOiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IElWYWx1ZVByb2R1Y2VyPFRPPjtcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogdW5kZWZpbmVkIHwgVE87XG4gICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogRGV0YWNoTGlzdGVuZXI7XG4gICAgICAgIH07XG4gICAgfSA9IHt9O1xuICAgIHByaXZhdGUgaXNJbk9ic2VydmVTdGF0ZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwYXJlbnQ6IElWYWx1ZVByb2R1Y2VyPFQ+LFxuICAgICAgICBzcGxpdEZ1bmN0aW9uOiAoaW5wdXQ6IFQpID0+IFRJW10sXG4gICAgICAgIGdldEtleTogKGlucHV0OiBUSSkgPT4gc3RyaW5nLFxuICAgICAgICBmYWN0b3J5OiAoaW5wdXQ6IFRJKSA9PiBJVmFsdWVQcm9kdWNlcjxUTz4gfCBQcm9taXNlPElWYWx1ZVByb2R1Y2VyPFRPPj5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMuc3BsaXRGdW5jdGlvbiA9IHNwbGl0RnVuY3Rpb247XG4gICAgICAgIHRoaXMuZ2V0S2V5ID0gZ2V0S2V5O1xuICAgICAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5O1xuICAgICAgICB0aGlzLnBhcmVudC5vbk5leHQodGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudFZhbHVlKCk6IFByb21pc2U8VE9bXT4ge1xuICAgICAgICBjb25zdCBnZXRDdXJyZW50VmFsdWUgPSBhc3luYyAoKTogUHJvbWlzZTxUT1tdPiA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNwbGl0RnVuY3Rpb24oYXdhaXQgdGhpcy5wYXJlbnQuY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogVE9bXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzOiBSZWFzb25PckVycm9yW10gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmN1cnJlbmN5TGltaXQgPSBwTGltaXQob3MuY3B1cygpLmxlbmd0aCk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICB2YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgICAgIGNvbmN1cnJlbmN5TGltaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRWYWx1ZVByb2R1Y2VyID0gYXdhaXQgdGhpcy5mYWN0b3J5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5PYnNlcnZlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjaGlsZFZhbHVlUHJvZHVjZXIuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkVmFsdWUgPSBhd2FpdCBjaGlsZFZhbHVlUHJvZHVjZXIuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpbmRleF0gPSBjaGlsZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYWluc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGNoaWxkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IGNoaWxkVmFsdWVQcm9kdWNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWNoTGlzdGVuZXI6IGNoaWxkVmFsdWVQcm9kdWNlci5vbk5leHQoeCA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKHgsIGtleSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVByb2R1Y2VyOiBjaGlsZFZhbHVlUHJvZHVjZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBjaGlsZFZhbHVlUHJvZHVjZXIub25OZXh0KHggPT4gdGhpcy5oYW5kbGVDaGFuZ2VQYXJlbnRDaGFpbih4LCBrZXkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yc1swXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3JzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVkRXJyb3IoXCJUaGVyZSBhcmUgZXJyb3JzXCIsIC4uLmVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZ2V0Q3VycmVudFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZ2luT2JzZXJ2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5pc0luT2JzZXJ2ZVN0YXRlID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuYmVnaW5PYnNlcnZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVuZE9ic2VydmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmVuZE9ic2VydmUoKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5jaGFpbnMpKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoYWluc1trZXldPy52YWx1ZVByb2R1Y2VyLmVuZE9ic2VydmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzSW5PYnNlcnZlU3RhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25OZXh0KGxpc3RlbmVyOiAobmV4dFZhbHVlOiBUT1tdKSA9PiBQcm9taXNlPHZvaWQ+KTogRGV0YWNoTGlzdGVuZXIge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBlbWl0VmFsdWUodmFsdWU6IFRPW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgICAgICAgYXdhaXQgbGlzdGVuZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b01hcCh2YWx1ZXM6IFRJW10pOiB7IFtrZXk6IHN0cmluZ106IFRJIH0ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHsgW2tleTogc3RyaW5nXTogVEkgfSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgcmVzdWx0W3RoaXMuZ2V0S2V5KHZhbHVlKV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4gPSBhc3luYyAobmV4dFZhbHVlOiBUTywga2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgY29uc3QgY2hhaW5WYWx1ZSA9IHRoaXMuY2hhaW5zW2tleV07XG4gICAgICAgIGlmIChjaGFpblZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY2hhaW5WYWx1ZS5sYXN0VmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VmFsdWUoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY2hhaW5zKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiB4Lmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhbmRsZUNoYW5nZVBhcmVudCA9IGFzeW5jIChpbnB1dDogVCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnNwbGl0RnVuY3Rpb24oaW5wdXQpO1xuICAgICAgICBjb25zdCBuZXh0VmFsdWVzTWFwID0gdGhpcy50b01hcCh2YWx1ZXMpO1xuXG4gICAgICAgIGNvbnN0IG5ld0tleXMgPSBfLmRpZmZlcmVuY2UoT2JqZWN0LmtleXMobmV4dFZhbHVlc01hcCksIE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRLZXlzID0gXy5kaWZmZXJlbmNlKE9iamVjdC5rZXlzKHRoaXMuY2hhaW5zKSwgT2JqZWN0LmtleXMobmV4dFZhbHVlc01hcCkpO1xuICAgICAgICBmb3IgKGNvbnN0IG5ld0tleSBvZiBuZXdLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDaGFpbiA9IGF3YWl0IHRoaXMuZmFjdG9yeShuZXh0VmFsdWVzTWFwW25ld0tleV0gPz8gcmVqZWN0KCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG5ld0NoYWluLmJlZ2luT2JzZXJ2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDaGFpblZhbHVlID0gYXdhaXQgbmV3Q2hhaW4uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhaW5zW25ld0tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZTogbmV3Q2hhaW5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVQcm9kdWNlcjogbmV3Q2hhaW4sXG4gICAgICAgICAgICAgICAgICAgIGRldGFjaExpc3RlbmVyOiBuZXdDaGFpbi5vbk5leHQobmV4dFZhbHVlID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50Q2hhaW4obmV4dFZhbHVlLCBuZXdLZXkpKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFpbnNbbmV3S2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlUHJvZHVjZXI6IG5ld0NoYWluLFxuICAgICAgICAgICAgICAgICAgICBkZXRhY2hMaXN0ZW5lcjogbmV3Q2hhaW4ub25OZXh0KG5leHRWYWx1ZSA9PiB0aGlzLmhhbmRsZUNoYW5nZVBhcmVudENoYWluKG5leHRWYWx1ZSwgbmV3S2V5KSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IHJlbW92ZWRLZXkgb2YgcmVtb3ZlZEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWRDaGFpbiA9IHRoaXMuY2hhaW5zW3JlbW92ZWRLZXldO1xuICAgICAgICAgICAgcmVtb3ZlZENoYWluPy5kZXRhY2hMaXN0ZW5lcigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbk9ic2VydmVTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlbW92ZWRDaGFpbj8udmFsdWVQcm9kdWNlci5lbmRPYnNlcnZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyDQryDQvdC1INC30L3QsNGOLCDQutCw0Log0YLRg9GCINC/0YDQsNCy0LjQu9GM0L3QvlxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5jaGFpbnNbcmVtb3ZlZEtleV07XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0VmFsdWUoXG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuY2hhaW5zKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiB4Lmxhc3RWYWx1ZSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGlzTm90TnVsbE9yVW5kZWZpbmVkKVxuICAgICAgICApO1xuICAgIH07XG59XG5cbmV4cG9ydCBjbGFzcyBTa2lwVXBkYXRlc1VudGlsTmV4dENvbXBsZXRlZFByb2R1Y2VyPFQ+IGV4dGVuZHMgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudDogSVZhbHVlUHJvZHVjZXI8VD47XG4gICAgcHJpdmF0ZSBkZXRhY2hGcm9tUGFyZW50PzogRGV0YWNoTGlzdGVuZXI7XG4gICAgcHJpdmF0ZSBsYXN0UGFyZW50VmFsdWU/OiBUO1xuXG4gICAgcHJpdmF0ZSBuZXh0RW1pdFRvUHJvY2Vzcz86ICgpID0+IFByb21pc2U8dm9pZD47XG4gICAgcHJpdmF0ZSBjdXJyZW50bHlQcm9jZXNzaW5nRW1pdD86IFByb21pc2U8dm9pZD47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGFyZW50OiBJVmFsdWVQcm9kdWNlcjxUPikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgZ2V0Q3VycmVudFZhbHVlKCk6IFByb21pc2U8VD4ge1xuICAgICAgICBpZiAodGhpcy5sYXN0UGFyZW50VmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRseVByb2Nlc3NpbmdFbWl0ID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9IGF3YWl0IHRoaXMucGFyZW50LmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnRseVByb2Nlc3NpbmdFbWl0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWRQcm9ncmFtU3RhdGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFBhcmVudFZhbHVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBiZWdpbkxpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wYXJlbnQuYmVnaW5PYnNlcnZlKCk7XG4gICAgICAgIGlmICh0aGlzLmRldGFjaEZyb21QYXJlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaEZyb21QYXJlbnQgPSB0aGlzLnBhcmVudC5vbk5leHQobmV4dFZhbHVlID0+IHRoaXMuaGFuZGxlQ2hhbmdlUGFyZW50VmFsdWUobmV4dFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXN5bmMgc3RvcExpc3RlbmluZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuZGV0YWNoRnJvbVBhcmVudCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWNoRnJvbVBhcmVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMucGFyZW50LmVuZE9ic2VydmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUNoYW5nZVBhcmVudFZhbHVlKG5leHRWYWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmxhc3RQYXJlbnRWYWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgICAgdGhpcy5uZXh0RW1pdFRvUHJvY2VzcyA9IF8ub25jZSgoKSA9PiB0aGlzLmVtaXRVcGRhdGUobmV4dFZhbHVlKSk7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRseVByb2Nlc3NpbmdFbWl0ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jdXJyZW50bHlQcm9jZXNzaW5nRW1pdDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRseVByb2Nlc3NpbmdFbWl0ID0gdGhpcy5uZXh0RW1pdFRvUHJvY2VzcygpO1xuICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnRseVByb2Nlc3NpbmdFbWl0O1xuICAgICAgICB0aGlzLmN1cnJlbnRseVByb2Nlc3NpbmdFbWl0ID0gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZGVsYXkodGltZW91dDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgdGltZW91dCk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzTm90TnVsbE9yVW5kZWZpbmVkPFQ+KGlucHV0OiBUIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGlucHV0IGlzIFQge1xuICAgIHJldHVybiBpbnB1dCAhPSB1bmRlZmluZWQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxFQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxPQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxPQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFHQSxJQUFBSSxjQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxnQkFBQSxHQUFBTixPQUFBO0FBQW9ELFNBQUFPLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLENBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFULHdCQUFB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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChainableValueProducer.js","names":["os","_interopRequireWildcard","require","_lodash","_interopRequireDefault","_pLimit","_IterableUtils","_TypingUtils","_AggregatedError","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","noop","ChainableValueProducer","constructor","errorListeners","onNext","_listener","Error","onError","listener","push","index","indexOf","splice","currentValue","transform","transformFunction","TransformValueProducer","do","action","ExecuteOnValueProducer","chainWith","nextItemFactory","attach","attachFactory","joinValues","evaluateAttachKey","AttachValueProducer","skipUpdatesUntilNextCompleted","SkipUpdatesUntilNextCompletedProducer","splitToChains","splitFunction","getKey","factory","SplitToChainsValueProducer","splitToParallelChains","ParallelSplitToChainsValueProducer","observe","beginObserve","detachListener","endObserve","emitError","error","errorObject","errorListener","exports","ObservableValueProducerBase","args","listeners","getCurrentValue","beginListening","stopListening","emitUpdate","value","notifyAllListenersAndWaitForComplete","nextValue","parent","lastAttachKey","attachedProducer","detachParentListener","detachAttachedListener","lastAttachedValue","lastParentValue","awaitingLastAttachedValue","isInObserveState","handleChangeAttachedValue","attachedValue","undefined","emitNextValue","handleChangeParentValue","parentValue","attachKey","delay","x","length","console","log","chains","handleChangeParentChain","key","chainValue","lastValue","emitValue","values","map","filter","isNotNullOrUndefined","handleChangeParent","input","nextValuesMap","toMap","newKeys","_","difference","keys","removedKeys","newKey","_nextValuesMap$newKey","newChain","reject","newChainValue","valueProducer","removedKey","removedChain","result","errors","childValueProducer","childValue","AggregatedError","iterateValues","_nextValuesMap$newKey2","concurrencyLimit","pLimit","cpus","Promise","all","_this$chains$key","detachFromParent","nextEmitToProcess","currentlyProcessingEmit","once","timeout","resolve","setTimeout"],"sources":["../../../../../src/Commons/TasksCore/ChainableValueProducer.ts"],"sourcesContent":["import * as os from \"os\";\n\nimport _ from \"lodash\";\nimport pLimit from \"p-limit\";\n\nimport { ReasonOrError } from \"../ErrorUntyped\";\nimport { iterateValues } from \"../../../../Common/IterableUtils\";\nimport { reject } from \"../../../../Common/TypingUtils\";\n\nimport { AggregatedError } from \"./AggregatedError\";\nimport { DetachListener, IValueProducer, ValueListener } from \"./BuildTask\";\n\nasync function noop(): Promise<void> {\n // empty function\n}\n\nexport class ChainableValueProducer<T> implements IValueProducer<T> {\n private readonly errorListeners: Array<ValueListener<Error>> = [];\n\n public onNext(_listener: (nextValue: T) => Promise<void>): DetachListener {\n throw new Error(\"AbstractError\");\n }\n\n public onError(listener: (error: Error) => Promise<void>): DetachListener {\n this.errorListeners.push(listener);\n return () => {\n const index = this.errorListeners.indexOf(listener);\n if (index >= 0) {\n this.errorListeners.splice(index, 1);\n }\n };\n }\n\n public get currentValue(): Promise<T> {\n throw new Error(\"AbstractError\");\n }\n\n public transform<TO>(transformFunction: (input: T) => Promise<TO>): TransformValueProducer<T, TO> {\n return new TransformValueProducer(this, transformFunction);\n }\n\n public do(action: (input: T) => Promise<void>): ExecuteOnValueProducer<T> {\n return new ExecuteOnValueProducer(this, action);\n }\n\n public chainWith<TO, TVP extends IValueProducer<TO>>(nextItemFactory: (prevItem: IValueProducer<T>) => TVP): TVP {\n return nextItemFactory(this);\n }\n\n public attach<TA, TO = T>(\n attachFactory: (value: T) => Promise<IValueProducer<TA>>,\n joinValues?: (original: T, attached: TA) => Promise<TO>,\n evaluateAttachKey?: (value: T) => Promise<string>\n ): AttachValueProducer<T, TA, TO> {\n return new AttachValueProducer(this, attachFactory, joinValues, evaluateAttachKey);\n }\n\n public skipUpdatesUntilNextCompleted(): SkipUpdatesUntilNextCompletedProducer<T> {\n return new SkipUpdatesUntilNextCompletedProducer(this);\n }\n\n public splitToChains<TI, TO>(\n splitFunction: (input: T) => TI[],\n getKey: (input: TI) => string,\n factory: (input: TI) => IValueProducer<TO>\n ): SplitToChainsValueProducer<T, TI, TO> {\n return new SplitToChainsValueProducer(this, splitFunction, getKey, factory);\n }\n\n public splitToParallelChains<TI, TO>(\n splitFunction: (input: T) => TI[],\n getKey: (input: TI) => string,\n factory: (input: TI) => IValueProducer<TO> | Promise<IValueProducer<TO>>\n ): ParallelSplitToChainsValueProducer<T, TI, TO> {\n return new ParallelSplitToChainsValueProducer(this, splitFunction, getKey, factory);\n }\n\n public async observe(listener: ValueListener<T> = noop): Promise<() => Promise<void>> {\n await this.beginObserve();\n await listener(await this.currentValue);\n const detachListener = this.onNext(listener);\n return async () => {\n detachListener();\n await this.endObserve();\n };\n }\n\n public async beginObserve(): Promise<void> {\n throw new Error(\"AbstractError\");\n }\n\n public async endObserve(): Promise<void> {\n throw new Error(\"AbstractError\");\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n protected async emitError(error: any): Promise<void> {\n const errorObject = error instanceof Error ? error : new Error(`${error}`);\n for (const errorListener of this.errorListeners) {\n await errorListener(errorObject);\n }\n }\n}\n\nexport class ObservableValueProducerBase<T> extends ChainableValueProducer<T> {\n public get currentValue(): Promise<T> {\n return this.getCurrentValue();\n }\n\n private readonly listeners: Array<ValueListener<T>> = [];\n\n protected async getCurrentValue(): Promise<T> {\n throw new Error(\"AbstractError\");\n }\n\n public async beginObserve(): Promise<void> {\n await this.beginListening();\n }\n\n public async endObserve(): Promise<void> {\n await this.stopListening();\n }\n\n protected async beginListening(): Promise<void> {\n throw new Error(\"AbstractError\");\n }\n\n protected async stopListening(): Promise<void> {\n throw new Error(\"AbstractError\");\n }\n\n protected async emitUpdate(value: T): Promise<void> {\n await this.notifyAllListenersAndWaitForComplete(value);\n }\n\n public onNext(listener: (nextValue: T) => Promise<void>): DetachListener {\n this.listeners.push(listener);\n return () => {\n const index = this.listeners.indexOf(listener);\n if (index >= 0) {\n this.listeners.splice(index, 1);\n }\n };\n }\n\n private async notifyAllListenersAndWaitForComplete(nextValue: T): Promise<void> {\n for (const listener of this.listeners) {\n await listener(nextValue);\n }\n }\n}\n\nexport class AttachValueProducer<TI, TA, TO> extends ChainableValueProducer<TO> {\n private readonly parent: IValueProducer<TI>;\n private readonly attachFactory: (value: TI) => Promise<IValueProducer<TA>>;\n private readonly joinValues: (original: TI, attached: TA) => Promise<TO>;\n private lastAttachKey?: string;\n private attachedProducer?: IValueProducer<TA>;\n private readonly evaluateAttachKey: (value: TI) => Promise<string>;\n private readonly listeners: Array<ValueListener<TO>> = [];\n private detachParentListener?: DetachListener;\n private detachAttachedListener?: DetachListener;\n private lastAttachedValue?: TA;\n private lastParentValue?: TI;\n private awaitingLastAttachedValue = false;\n private isInObserveState = false;\n\n public constructor(\n parent: IValueProducer<TI>,\n attachFactory: (value: TI) => Promise<IValueProducer<TA>>,\n joinValues?: (original: TI, attached: TA) => Promise<TO>,\n evaluateAttachKey?: (value: TI) => Promise<string>\n ) {\n super();\n this.parent = parent;\n this.attachFactory = attachFactory;\n // Я не могу победить типизацию в этом месте, слишком много у меня кода получается\n // @ts-ignore\n this.joinValues = joinValues || (async x => x);\n this.evaluateAttachKey = evaluateAttachKey || (async () => \"STATIC-ATTACH-KEY\");\n }\n\n public async beginObserve(): Promise<void> {\n this.isInObserveState = true;\n await this.parent.beginObserve();\n }\n\n public async endObserve(): Promise<void> {\n await this.parent.endObserve();\n if (this.attachedProducer != undefined) {\n await this.attachedProducer.endObserve();\n }\n this.isInObserveState = false;\n }\n\n public get currentValue(): Promise<TO> {\n const getCurrentValue = async (): Promise<TO> => {\n const parentValue = await this.parent.currentValue;\n this.lastParentValue = parentValue;\n const attachKey = await this.evaluateAttachKey(parentValue);\n if (this.attachedProducer != undefined && this.detachAttachedListener == undefined) {\n this.detachAttachedListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);\n }\n if (this.lastAttachKey == undefined || this.lastAttachKey !== attachKey) {\n this.lastAttachKey = attachKey;\n if (this.detachAttachedListener != undefined) {\n this.detachAttachedListener();\n }\n if (this.attachedProducer != undefined && this.isInObserveState) {\n await this.attachedProducer.endObserve();\n }\n this.attachedProducer = await this.attachFactory(parentValue);\n if (this.isInObserveState) {\n await this.attachedProducer.beginObserve();\n }\n this.detachAttachedListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);\n }\n if (this.attachedProducer == undefined) {\n throw new Error(\"InvalidProgramState\");\n }\n const attachedValue = await this.attachedProducer.currentValue;\n this.lastAttachedValue = attachedValue;\n return this.joinValues(parentValue, attachedValue);\n };\n return getCurrentValue();\n }\n\n public async emitNextValue(value: TO): Promise<void> {\n for (const listener of this.listeners) {\n await listener(value);\n }\n }\n\n public onNext(listener: (nextValue: TO) => Promise<void>): DetachListener {\n this.listeners.push(listener);\n if (this.listeners.length === 1) {\n if (this.detachParentListener == undefined) {\n this.detachParentListener = this.parent.onNext(this.handleChangeParentValue);\n }\n if (this.attachedProducer != undefined && this.detachParentListener == undefined) {\n this.detachParentListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);\n }\n }\n return () => {\n const index = this.listeners.indexOf(listener);\n if (index >= 0) {\n this.listeners.splice(index, 1);\n }\n if (this.listeners.length === 0) {\n if (this.detachParentListener != undefined) {\n this.detachParentListener();\n }\n if (this.detachAttachedListener != undefined) {\n this.detachAttachedListener();\n }\n }\n };\n }\n\n private readonly handleChangeAttachedValue = async (attachedValue: TA): Promise<void> => {\n this.lastAttachedValue = attachedValue;\n if (!this.awaitingLastAttachedValue) {\n if (this.lastParentValue == undefined) {\n throw new Error(\"InvalidProgramState\");\n }\n await this.emitNextValue(await this.joinValues(this.lastParentValue, attachedValue));\n }\n };\n\n private readonly handleChangeParentValue = async (parentValue: TI): Promise<void> => {\n this.lastParentValue = parentValue;\n const attachKey = await this.evaluateAttachKey(parentValue);\n if (this.attachedProducer != undefined && this.detachAttachedListener == undefined) {\n this.detachAttachedListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);\n }\n if (this.lastAttachKey == undefined || this.lastAttachKey !== attachKey) {\n this.lastAttachKey = attachKey;\n if (this.detachAttachedListener != undefined) {\n this.detachAttachedListener();\n }\n if (this.attachedProducer != undefined && this.isInObserveState) {\n await this.attachedProducer.endObserve();\n }\n this.attachedProducer = await this.attachFactory(parentValue);\n if (this.isInObserveState) {\n await this.attachedProducer.beginObserve();\n }\n this.detachAttachedListener = this.attachedProducer.onNext(this.handleChangeAttachedValue);\n }\n if (this.attachedProducer == undefined) {\n throw new Error(\"InvalidProgramState\");\n }\n // Просто немного обождем, вдруг придёт другое attachedValue\n this.awaitingLastAttachedValue = true;\n await delay(700);\n this.awaitingLastAttachedValue = false;\n let attachedValue = this.lastAttachedValue;\n if (attachedValue == undefined) {\n attachedValue = await this.attachedProducer.currentValue;\n }\n await this.emitNextValue(await this.joinValues(parentValue, attachedValue));\n };\n}\n\nexport class ExecuteOnValueProducer<T> extends ChainableValueProducer<T> {\n private readonly parent: IValueProducer<T>;\n private readonly action: (value: T) => Promise<void>;\n\n public constructor(parent: IValueProducer<T>, action: (value: T) => Promise<void>) {\n super();\n this.parent = parent;\n this.action = action;\n }\n\n public async beginObserve(): Promise<void> {\n await this.parent.beginObserve();\n }\n\n public async endObserve(): Promise<void> {\n await this.parent.endObserve();\n }\n\n public get currentValue(): Promise<T> {\n const getCurrentValue = async (): Promise<T> => {\n const value = await this.parent.currentValue;\n await this.action(value);\n return value;\n };\n return getCurrentValue();\n }\n\n public onNext(listener: (nextValue: T) => Promise<void>): DetachListener {\n return this.parent.onNext(async parentValue => {\n try {\n const value = parentValue;\n await this.action(value);\n await listener(value);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(e);\n await this.emitError(e);\n }\n });\n }\n}\n\nexport class TransformValueProducer<TI, TO> extends ChainableValueProducer<TO> {\n private readonly parent: IValueProducer<TI>;\n private readonly transformFunction: (value: TI) => Promise<TO>;\n\n public constructor(parent: IValueProducer<TI>, transformFunction: (value: TI) => Promise<TO>) {\n super();\n this.parent = parent;\n this.transformFunction = transformFunction;\n }\n\n public async beginObserve(): Promise<void> {\n await this.parent.beginObserve();\n }\n\n public async endObserve(): Promise<void> {\n await this.parent.endObserve();\n }\n\n public get currentValue(): Promise<TO> {\n const getCurrentValue = async (): Promise<TO> => this.transformFunction(await this.parent.currentValue);\n return getCurrentValue();\n }\n\n public onNext(listener: (nextValue: TO) => Promise<void>): DetachListener {\n return this.parent.onNext(async parentValue => {\n await listener(await this.transformFunction(parentValue));\n });\n }\n}\n\nexport class SplitToChainsValueProducer<T, TI, TO> extends ChainableValueProducer<TO[]> {\n private readonly parent: IValueProducer<T>;\n private readonly splitFunction: (input: T) => TI[];\n private readonly getKey: (input: TI) => string;\n private readonly factory: (input: TI) => IValueProducer<TO>;\n private readonly listeners: Array<ValueListener<TO[]>> = [];\n private readonly chains: {\n [key: string]: {\n valueProducer: IValueProducer<TO>;\n lastValue: undefined | TO;\n detachListener: DetachListener;\n };\n } = {};\n private isInObserveState = false;\n\n public constructor(\n parent: IValueProducer<T>,\n splitFunction: (input: T) => TI[],\n getKey: (input: TI) => string,\n factory: (input: TI) => IValueProducer<TO>\n ) {\n super();\n this.parent = parent;\n this.splitFunction = splitFunction;\n this.getKey = getKey;\n this.factory = factory;\n this.parent.onNext(this.handleChangeParent);\n }\n\n public get currentValue(): Promise<TO[]> {\n const getCurrentValue = async (): Promise<TO[]> => {\n const values = this.splitFunction(await this.parent.currentValue);\n const result: TO[] = [];\n const errors: ReasonOrError[] = [];\n for (const value of values) {\n const childValueProducer = this.factory(value);\n if (this.isInObserveState) {\n await childValueProducer.beginObserve();\n }\n try {\n const childValue = await childValueProducer.currentValue;\n result.push(childValue);\n const key = this.getKey(value);\n this.chains[key] = {\n lastValue: childValue,\n valueProducer: childValueProducer,\n detachListener: childValueProducer.onNext(x => this.handleChangeParentChain(x, key)),\n };\n } catch (e) {\n if (this.isInObserveState) {\n // eslint-disable-next-line no-console\n console.log(e);\n } else {\n errors.push(e);\n }\n const key = this.getKey(value);\n this.chains[key] = {\n lastValue: undefined,\n valueProducer: childValueProducer,\n detachListener: childValueProducer.onNext(x => this.handleChangeParentChain(x, key)),\n };\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n } else if (errors.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n throw new AggregatedError(\"There are errors\", ...errors);\n }\n return result;\n };\n return getCurrentValue();\n }\n\n public async beginObserve(): Promise<void> {\n this.isInObserveState = true;\n await this.parent.beginObserve();\n }\n\n public async endObserve(): Promise<void> {\n await this.parent.endObserve();\n for (const value of iterateValues(this.chains)) {\n await value.valueProducer.endObserve();\n }\n this.isInObserveState = false;\n }\n\n public onNext(listener: (nextValue: TO[]) => Promise<void>): DetachListener {\n this.listeners.push(listener);\n return () => {\n const index = this.listeners.indexOf(listener);\n if (index >= 0) {\n this.listeners.splice(index, 1);\n }\n };\n }\n\n private async emitValue(value: TO[]): Promise<void> {\n for (const listener of this.listeners) {\n await listener(value);\n }\n }\n\n private toMap(values: TI[]): { [key: string]: TI } {\n const result: { [key: string]: TI } = {};\n for (const value of values) {\n result[this.getKey(value)] = value;\n }\n return result;\n }\n\n private readonly handleChangeParentChain = async (nextValue: TO, key: string): Promise<void> => {\n const chainValue = this.chains[key];\n if (chainValue != undefined) {\n chainValue.lastValue = nextValue;\n }\n await this.emitValue(\n Object.values(this.chains)\n .map(x => x.lastValue)\n .filter(isNotNullOrUndefined)\n );\n };\n\n private readonly handleChangeParent = async (input: T): Promise<void> => {\n const values = this.splitFunction(input);\n const nextValuesMap = this.toMap(values);\n\n const newKeys = _.difference(Object.keys(nextValuesMap), Object.keys(this.chains));\n const removedKeys = _.difference(Object.keys(this.chains), Object.keys(nextValuesMap));\n for (const newKey of newKeys) {\n const newChain = this.factory(nextValuesMap[newKey] ?? reject());\n if (this.isInObserveState) {\n await newChain.beginObserve();\n }\n try {\n const newChainValue = await newChain.currentValue;\n this.chains[newKey] = {\n lastValue: newChainValue,\n valueProducer: newChain,\n detachListener: newChain.onNext(nextValue => this.handleChangeParentChain(nextValue, newKey)),\n };\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(e);\n this.chains[newKey] = {\n lastValue: undefined,\n valueProducer: newChain,\n detachListener: newChain.onNext(nextValue => this.handleChangeParentChain(nextValue, newKey)),\n };\n }\n }\n for (const removedKey of removedKeys) {\n const removedChain = this.chains[removedKey];\n removedChain?.detachListener();\n if (this.isInObserveState) {\n await removedChain?.valueProducer.endObserve();\n }\n // Я не знаю, как тут правильно\n // tslint:disable-next-line:no-dynamic-delete\n delete this.chains[removedKey];\n }\n await this.emitValue(\n Object.values(this.chains)\n .map(x => x.lastValue)\n .filter(isNotNullOrUndefined)\n );\n };\n}\n\nexport class ParallelSplitToChainsValueProducer<T, TI, TO> extends ChainableValueProducer<TO[]> {\n private readonly parent: IValueProducer<T>;\n private readonly splitFunction: (input: T) => TI[];\n private readonly getKey: (input: TI) => string;\n private readonly factory: (input: TI) => IValueProducer<TO> | Promise<IValueProducer<TO>>;\n private readonly listeners: Array<ValueListener<TO[]>> = [];\n private readonly chains: {\n [key: string]: {\n valueProducer: IValueProducer<TO>;\n lastValue: undefined | TO;\n detachListener: DetachListener;\n };\n } = {};\n private isInObserveState = false;\n\n public constructor(\n parent: IValueProducer<T>,\n splitFunction: (input: T) => TI[],\n getKey: (input: TI) => string,\n factory: (input: TI) => IValueProducer<TO> | Promise<IValueProducer<TO>>\n ) {\n super();\n this.parent = parent;\n this.splitFunction = splitFunction;\n this.getKey = getKey;\n this.factory = factory;\n this.parent.onNext(this.handleChangeParent);\n }\n\n public get currentValue(): Promise<TO[]> {\n const getCurrentValue = async (): Promise<TO[]> => {\n const values = this.splitFunction(await this.parent.currentValue);\n const result: TO[] = [];\n const errors: ReasonOrError[] = [];\n const concurrencyLimit = pLimit(os.cpus().length);\n await Promise.all(\n values.map((value, index) =>\n concurrencyLimit(async () => {\n const childValueProducer = await this.factory(value);\n if (this.isInObserveState) {\n await childValueProducer.beginObserve();\n }\n try {\n const childValue = await childValueProducer.currentValue;\n result[index] = childValue;\n const key = this.getKey(value);\n this.chains[key] = {\n lastValue: childValue,\n valueProducer: childValueProducer,\n detachListener: childValueProducer.onNext(x => this.handleChangeParentChain(x, key)),\n };\n } catch (e) {\n if (this.isInObserveState) {\n // eslint-disable-next-line no-console\n console.log(e);\n } else {\n errors.push(e);\n }\n const key = this.getKey(value);\n this.chains[key] = {\n lastValue: undefined,\n valueProducer: childValueProducer,\n detachListener: childValueProducer.onNext(x => this.handleChangeParentChain(x, key)),\n };\n }\n })\n )\n );\n if (errors.length === 1) {\n throw errors[0];\n } else if (errors.length > 1) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n throw new AggregatedError(\"There are errors\", ...errors);\n }\n return result;\n };\n return getCurrentValue();\n }\n\n public async beginObserve(): Promise<void> {\n this.isInObserveState = true;\n await this.parent.beginObserve();\n }\n\n public async endObserve(): Promise<void> {\n await this.parent.endObserve();\n for (const key of Object.keys(this.chains)) {\n await this.chains[key]?.valueProducer.endObserve();\n }\n this.isInObserveState = false;\n }\n\n public onNext(listener: (nextValue: TO[]) => Promise<void>): DetachListener {\n this.listeners.push(listener);\n return () => {\n const index = this.listeners.indexOf(listener);\n if (index >= 0) {\n this.listeners.splice(index, 1);\n }\n };\n }\n\n private async emitValue(value: TO[]): Promise<void> {\n for (const listener of this.listeners) {\n await listener(value);\n }\n }\n\n private toMap(values: TI[]): { [key: string]: TI } {\n const result: { [key: string]: TI } = {};\n for (const value of values) {\n result[this.getKey(value)] = value;\n }\n return result;\n }\n\n private readonly handleChangeParentChain = async (nextValue: TO, key: string): Promise<void> => {\n const chainValue = this.chains[key];\n if (chainValue != undefined) {\n chainValue.lastValue = nextValue;\n }\n await this.emitValue(\n Object.values(this.chains)\n .map(x => x.lastValue)\n .filter(isNotNullOrUndefined)\n );\n };\n\n private readonly handleChangeParent = async (input: T): Promise<void> => {\n const values = this.splitFunction(input);\n const nextValuesMap = this.toMap(values);\n\n const newKeys = _.difference(Object.keys(nextValuesMap), Object.keys(this.chains));\n const removedKeys = _.difference(Object.keys(this.chains), Object.keys(nextValuesMap));\n for (const newKey of newKeys) {\n const newChain = await this.factory(nextValuesMap[newKey] ?? reject());\n if (this.isInObserveState) {\n await newChain.beginObserve();\n }\n try {\n const newChainValue = await newChain.currentValue;\n this.chains[newKey] = {\n lastValue: newChainValue,\n valueProducer: newChain,\n detachListener: newChain.onNext(nextValue => this.handleChangeParentChain(nextValue, newKey)),\n };\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(e);\n this.chains[newKey] = {\n lastValue: undefined,\n valueProducer: newChain,\n detachListener: newChain.onNext(nextValue => this.handleChangeParentChain(nextValue, newKey)),\n };\n }\n }\n for (const removedKey of removedKeys) {\n const removedChain = this.chains[removedKey];\n removedChain?.detachListener();\n if (this.isInObserveState) {\n await removedChain?.valueProducer.endObserve();\n }\n // Я не знаю, как тут правильно\n // tslint:disable-next-line:no-dynamic-delete\n delete this.chains[removedKey];\n }\n await this.emitValue(\n Object.values(this.chains)\n .map(x => x.lastValue)\n .filter(isNotNullOrUndefined)\n );\n };\n}\n\nexport class SkipUpdatesUntilNextCompletedProducer<T> extends ObservableValueProducerBase<T> {\n private readonly parent: IValueProducer<T>;\n private detachFromParent?: DetachListener;\n private lastParentValue?: T;\n\n private nextEmitToProcess?: () => Promise<void>;\n private currentlyProcessingEmit?: Promise<void>;\n\n public constructor(parent: IValueProducer<T>) {\n super();\n this.parent = parent;\n }\n\n protected async getCurrentValue(): Promise<T> {\n if (this.lastParentValue == undefined) {\n this.currentlyProcessingEmit = (async () => {\n this.lastParentValue = await this.parent.currentValue;\n })();\n await this.currentlyProcessingEmit;\n }\n if (this.lastParentValue == undefined) {\n throw new Error(\"InvalidProgramState\");\n }\n return this.lastParentValue;\n }\n\n protected async beginListening(): Promise<void> {\n await this.parent.beginObserve();\n if (this.detachFromParent == undefined) {\n this.detachFromParent = this.parent.onNext(nextValue => this.handleChangeParentValue(nextValue));\n }\n }\n\n protected async stopListening(): Promise<void> {\n if (this.detachFromParent != undefined) {\n this.detachFromParent();\n }\n await this.parent.endObserve();\n }\n\n private async handleChangeParentValue(nextValue: T): Promise<void> {\n this.lastParentValue = nextValue;\n this.nextEmitToProcess = _.once(() => this.emitUpdate(nextValue));\n if (this.currentlyProcessingEmit != undefined) {\n await this.currentlyProcessingEmit;\n }\n this.currentlyProcessingEmit = this.nextEmitToProcess();\n await this.currentlyProcessingEmit;\n this.currentlyProcessingEmit = undefined;\n }\n}\n\nfunction delay(timeout: number): Promise<void> {\n return new Promise<void>(resolve => {\n setTimeout(() => {\n resolve();\n }, timeout);\n });\n}\n\nfunction isNotNullOrUndefined<T>(input: T | undefined | null): input is T {\n return input != undefined;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,8 +12,8 @@ var _fsExtra = require("fs-extra");
|
|
|
12
12
|
var _FsUtils = require("../FsUtils");
|
|
13
13
|
var _WellKnownDirectories = require("../../../../Common/WellKnownDirectories");
|
|
14
14
|
var _ChainableValueProducer = require("./ChainableValueProducer");
|
|
15
|
-
function _getRequireWildcardCache(
|
|
16
|
-
function _interopRequireWildcard(
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
17
|
class DirectoryEntriesProducer extends _ChainableValueProducer.ObservableValueProducerBase {
|
|
18
18
|
constructor(pathToDir, masks) {
|
|
19
19
|
super();
|
|
@@ -74,4 +74,4 @@ class DirectoryEntriesProducer extends _ChainableValueProducer.ObservableValuePr
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
exports.DirectoryEntriesProducer = DirectoryEntriesProducer;
|
|
77
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
77
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX2Nob2tpZGFyIiwiX2xvZGFzaCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZnNFeHRyYSIsIl9Gc1V0aWxzIiwiX1dlbGxLbm93bkRpcmVjdG9yaWVzIiwiX0NoYWluYWJsZVZhbHVlUHJvZHVjZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJEaXJlY3RvcnlFbnRyaWVzUHJvZHVjZXIiLCJPYnNlcnZhYmxlVmFsdWVQcm9kdWNlckJhc2UiLCJjb25zdHJ1Y3RvciIsInBhdGhUb0RpciIsIm1hc2tzIiwibGFzdFZhbHVlIiwid2F0Y2hlciIsImJlZ2luTGlzdGVuaW5nIiwidW5kZWZpbmVkIiwid2F0Y2giLCJpZ25vcmVJbml0aWFsIiwiY3dkIiwiaWdub3JlUGVybWlzc2lvbkVycm9ycyIsInVzZVBvbGxpbmciLCJkZXB0aCIsImhhbmRsZUFueUZzRXZlbnREZWJvdW5jZWQiLCJfIiwiZGVib3VuY2UiLCJoYW5kbGVBbnlGc0V2ZW50Iiwib24iLCJzdG9wTGlzdGVuaW5nIiwiY2xvc2UiLCJnZXRDdXJyZW50VmFsdWUiLCJyZXNvbHZlRGlyZWN0b3J5Q29udGVudCIsInJlc3VsdCIsIm1hc2siLCJwYXRocyIsImdsb2JBc3luYyIsIm1hdGNoZWRQYXRoIiwiaXNEaXJlY3RvcnlFeGlzdHMiLCJqb2luIiwicGF0aEV4aXN0cyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiRm9ybUpzb25GaWxlTmFtZSIsInB1c2giLCJ1bmlxIiwibmV4dFZhbHVlIiwiaXNFcXVhbCIsImVtaXRVcGRhdGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL0NvbW1vbnMvVGFza3NDb3JlL0RpcmVjdG9yeUVudHJpZXNQcm9kdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IEZTV2F0Y2hlciwgd2F0Y2ggfSBmcm9tIFwiY2hva2lkYXJcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IHBhdGhFeGlzdHMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcblxuaW1wb3J0IHsgZ2xvYkFzeW5jLCBpc0RpcmVjdG9yeUV4aXN0cyB9IGZyb20gXCIuLi9Gc1V0aWxzXCI7XG5pbXBvcnQgeyBXZWxsS25vd25EaXJlY3RvcmllcyB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb24vV2VsbEtub3duRGlyZWN0b3JpZXNcIjtcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlIH0gZnJvbSBcIi4vQ2hhaW5hYmxlVmFsdWVQcm9kdWNlclwiO1xuXG5leHBvcnQgY2xhc3MgRGlyZWN0b3J5RW50cmllc1Byb2R1Y2VyIGV4dGVuZHMgT2JzZXJ2YWJsZVZhbHVlUHJvZHVjZXJCYXNlPHN0cmluZ1tdPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXRoVG9EaXI6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hc2tzOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIGxhc3RWYWx1ZT86IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgd2F0Y2hlcj86IEZTV2F0Y2hlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXRoVG9EaXI6IHN0cmluZywgbWFza3M6IHN0cmluZ1tdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucGF0aFRvRGlyID0gcGF0aFRvRGlyO1xuICAgICAgICB0aGlzLm1hc2tzID0gbWFza3M7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGJlZ2luTGlzdGVuaW5nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy53YXRjaGVyICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud2F0Y2hlciA9IHdhdGNoKHRoaXMubWFza3MsIHtcbiAgICAgICAgICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gICAgICAgICAgICBjd2Q6IHRoaXMucGF0aFRvRGlyLFxuICAgICAgICAgICAgaWdub3JlUGVybWlzc2lvbkVycm9yczogZmFsc2UsXG4gICAgICAgICAgICB1c2VQb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgZGVwdGg6IDEsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkID0gXy5kZWJvdW5jZSgoKSA9PiB0aGlzLmhhbmRsZUFueUZzRXZlbnQoKSwgMTAwMCk7XG4gICAgICAgIHRoaXMud2F0Y2hlci5vbihcImFsbFwiLCBoYW5kbGVBbnlGc0V2ZW50RGVib3VuY2VkKTtcbiAgICAgICAgdGhpcy53YXRjaGVyLm9uKFwiZXJyb3JcIiwgaGFuZGxlQW55RnNFdmVudERlYm91bmNlZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIHN0b3BMaXN0ZW5pbmcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICh0aGlzLndhdGNoZXIgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgICAgICB0aGlzLndhdGNoZXIuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBnZXRDdXJyZW50VmFsdWUoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IGF3YWl0IHRoaXMucmVzb2x2ZURpcmVjdG9yeUNvbnRlbnQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzb2x2ZURpcmVjdG9yeUNvbnRlbnQoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbWFzayBvZiB0aGlzLm1hc2tzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRocyA9IGF3YWl0IGdsb2JBc3luYyhtYXNrLCB7IGN3ZDogdGhpcy5wYXRoVG9EaXIgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1hdGNoZWRQYXRoIG9mIHBhdGhzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF3YWl0IGlzRGlyZWN0b3J5RXhpc3RzKHBhdGguam9pbih0aGlzLnBhdGhUb0RpciwgbWF0Y2hlZFBhdGgpKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwYXRoRXhpc3RzKHBhdGguam9pbih0aGlzLnBhdGhUb0RpciwgbWF0Y2hlZFBhdGgsIFdlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWUpKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG1hdGNoZWRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXy51bmlxKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBbnlGc0V2ZW50KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSBhd2FpdCB0aGlzLnJlc29sdmVEaXJlY3RvcnlDb250ZW50KCk7XG4gICAgICAgIGlmICghXy5pc0VxdWFsKHRoaXMubGFzdFZhbHVlLCBuZXh0VmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdFVwZGF0ZSh0aGlzLmxhc3RWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxJQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxxQkFBQSxHQUFBTixPQUFBO0FBRUEsSUFBQU8sdUJBQUEsR0FBQVAsT0FBQTtBQUF1RSxTQUFBUSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSxDQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBVix3QkFBQVUsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFdBQUFLLE9BQUEsRUFBQUwsQ0FBQSxRQUFBRyxDQUFBLEdBQUFKLHdCQUFBLENBQUFHLENBQUEsT0FBQUMsQ0FBQSxJQUFBQSxDQUFBLENBQUFHLEdBQUEsQ0FBQU4sQ0FBQSxVQUFBRyxDQUFBLENBQUFJLEdBQUEsQ0FBQVAsQ0FBQSxPQUFBUSxDQUFBLEtBQUFDLFNBQUEsVUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLGNBQUEsSUFBQUQsTUFBQSxDQUFBRSx3QkFBQSxXQUFBQyxDQUFBLElBQUFkLENBQUEsb0JBQUFjLENBQUEsT0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFoQixDQUFBLEVBQUFjLENBQUEsU0FBQUcsQ0FBQSxHQUFBUCxDQUFBLEdBQUFDLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWIsQ0FBQSxFQUFBYyxDQUFBLFVBQUFHLENBQUEsS0FBQUEsQ0FBQSxDQUFBVixHQUFBLElBQUFVLENBQUEsQ0FBQUMsR0FBQSxJQUFBUCxNQUFBLENBQUFDLGNBQUEsQ0FBQUosQ0FBQSxFQUFBTSxDQUFBLEVBQUFHLENBQUEsSUFBQVQsQ0FBQSxDQUFBTSxDQUFBLElBQUFkLENBQUEsQ0FBQWMsQ0FBQSxZQUFBTixDQUFBLENBQUFILE9BQUEsR0FBQUwsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFFaEUsTUFBTVcsd0JBQXdCLFNBQVNDLG1EQUEyQixDQUFXO0VBTXpFQyxXQUFXQSxDQUFDQyxTQUFpQixFQUFFQyxLQUFlLEVBQUU7SUFDbkQsS0FBSyxDQUFDLENBQUM7SUFBQyxLQU5LRCxTQUFTO0lBQUEsS0FDVEMsS0FBSztJQUFBLEtBQ2RDLFNBQVM7SUFBQSxLQUNUQyxPQUFPO0lBSVgsSUFBSSxDQUFDSCxTQUFTLEdBQUdBLFNBQVM7SUFDMUIsSUFBSSxDQUFDQyxLQUFLLEdBQUdBLEtBQUs7RUFDdEI7RUFFQSxNQUFnQkcsY0FBY0EsQ0FBQSxFQUFrQjtJQUM1QyxJQUFJLElBQUksQ0FBQ0QsT0FBTyxJQUFJRSxTQUFTLEVBQUU7TUFDM0I7SUFDSjtJQUNBLElBQUksQ0FBQ0YsT0FBTyxHQUFHLElBQUFHLGVBQUssRUFBQyxJQUFJLENBQUNMLEtBQUssRUFBRTtNQUM3Qk0sYUFBYSxFQUFFLElBQUk7TUFDbkJDLEdBQUcsRUFBRSxJQUFJLENBQUNSLFNBQVM7TUFDbkJTLHNCQUFzQixFQUFFLEtBQUs7TUFDN0JDLFVBQVUsRUFBRSxJQUFJO01BQ2hCQyxLQUFLLEVBQUU7SUFDWCxDQUFDLENBQUM7SUFDRixNQUFNQyx5QkFBeUIsR0FBR0MsZUFBQyxDQUFDQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUNDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7SUFDakYsSUFBSSxDQUFDWixPQUFPLENBQUNhLEVBQUUsQ0FBQyxLQUFLLEVBQUVKLHlCQUF5QixDQUFDO0lBQ2pELElBQUksQ0FBQ1QsT0FBTyxDQUFDYSxFQUFFLENBQUMsT0FBTyxFQUFFSix5QkFBeUIsQ0FBQztFQUN2RDtFQUVBLE1BQWdCSyxhQUFhQSxDQUFBLEVBQWtCO0lBQzNDLElBQUksSUFBSSxDQUFDZCxPQUFPLElBQUlFLFNBQVMsRUFBRTtNQUMzQjtNQUNBLElBQUksQ0FBQ0YsT0FBTyxDQUFDZSxLQUFLLENBQUMsQ0FBQztJQUN4QjtFQUNKO0VBRUEsTUFBZ0JDLGVBQWVBLENBQUEsRUFBc0I7SUFDakQsSUFBSSxDQUFDakIsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDa0IsdUJBQXVCLENBQUMsQ0FBQztJQUNyRCxPQUFPLElBQUksQ0FBQ2xCLFNBQVM7RUFDekI7RUFFQSxNQUFja0IsdUJBQXVCQSxDQUFBLEVBQXNCO0lBQ3ZELE1BQU1DLE1BQWdCLEdBQUcsRUFBRTtJQUMzQixLQUFLLE1BQU1DLElBQUksSUFBSSxJQUFJLENBQUNyQixLQUFLLEVBQUU7TUFDM0IsTUFBTXNCLEtBQUssR0FBRyxNQUFNLElBQUFDLGtCQUFTLEVBQUNGLElBQUksRUFBRTtRQUFFZCxHQUFHLEVBQUUsSUFBSSxDQUFDUjtNQUFVLENBQUMsQ0FBQztNQUM1RCxLQUFLLE1BQU15QixXQUFXLElBQUlGLEtBQUssRUFBRTtRQUM3QixJQUFJLE1BQU0sSUFBQUcsMEJBQWlCLEVBQUMzRCxJQUFJLENBQUM0RCxJQUFJLENBQUMsSUFBSSxDQUFDM0IsU0FBUyxFQUFFeUIsV0FBVyxDQUFDLENBQUMsRUFBRTtVQUNqRSxJQUNJLE1BQU0sSUFBQUcsbUJBQVUsRUFBQzdELElBQUksQ0FBQzRELElBQUksQ0FBQyxJQUFJLENBQUMzQixTQUFTLEVBQUV5QixXQUFXLEVBQUVJLDBDQUFvQixDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQ2pHO1lBQ0VULE1BQU0sQ0FBQ1UsSUFBSSxDQUFDTixXQUFXLENBQUM7VUFDNUI7UUFDSjtNQUNKO0lBQ0o7SUFDQSxPQUFPWixlQUFDLENBQUNtQixJQUFJLENBQUNYLE1BQU0sQ0FBQztFQUN6QjtFQUVBLE1BQWNOLGdCQUFnQkEsQ0FBQSxFQUFrQjtJQUM1QyxNQUFNa0IsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDYix1QkFBdUIsQ0FBQyxDQUFDO0lBQ3RELElBQUksQ0FBQ1AsZUFBQyxDQUFDcUIsT0FBTyxDQUFDLElBQUksQ0FBQ2hDLFNBQVMsRUFBRStCLFNBQVMsQ0FBQyxFQUFFO01BQ3ZDLElBQUksQ0FBQy9CLFNBQVMsR0FBRytCLFNBQVM7TUFDMUIsTUFBTSxJQUFJLENBQUNFLFVBQVUsQ0FBQyxJQUFJLENBQUNqQyxTQUFTLENBQUM7SUFDekM7RUFDSjtBQUNKO0FBQUNrQyxPQUFBLENBQUF2Qyx3QkFBQSxHQUFBQSx3QkFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|