@sapui5/sap.fe.core 1.111.1 → 1.113.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime-dbg.js +6 -5
- package/src/sap/fe/core/ActionRuntime.js +1 -1
- package/src/sap/fe/core/ActionRuntime.js.map +1 -1
- package/src/sap/fe/core/ActionRuntime.ts +12 -11
- package/src/sap/fe/core/AppComponent-dbg.js +35 -9
- package/src/sap/fe/core/AppComponent.js +1 -1
- package/src/sap/fe/core/AppComponent.js.map +1 -1
- package/src/sap/fe/core/AppComponent.ts +66 -9
- package/src/sap/fe/core/AppStateHandler-dbg.js +5 -2
- package/src/sap/fe/core/AppStateHandler.js +1 -1
- package/src/sap/fe/core/AppStateHandler.js.map +1 -1
- package/src/sap/fe/core/AppStateHandler.ts +10 -1
- package/src/sap/fe/core/BaseController-dbg.js +1 -1
- package/src/sap/fe/core/BaseController.ts +2 -1
- package/src/sap/fe/core/CommonUtils-dbg.js +202 -533
- package/src/sap/fe/core/CommonUtils.js +1 -1
- package/src/sap/fe/core/CommonUtils.js.map +1 -1
- package/src/sap/fe/core/CommonUtils.ts +260 -681
- package/src/sap/fe/core/ExtensionAPI-dbg.js +4 -1
- package/src/sap/fe/core/ExtensionAPI.js +1 -1
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
- package/src/sap/fe/core/ExtensionAPI.ts +11 -1
- package/src/sap/fe/core/PageController-dbg.js +26 -31
- package/src/sap/fe/core/PageController.js +1 -1
- package/src/sap/fe/core/PageController.js.map +1 -1
- package/src/sap/fe/core/PageController.ts +17 -3
- package/src/sap/fe/core/ResourceModel-dbg.js +71 -0
- package/src/sap/fe/core/ResourceModel.js +6 -0
- package/src/sap/fe/core/ResourceModel.js.map +1 -0
- package/src/sap/fe/core/ResourceModel.ts +67 -0
- package/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +1 -0
- package/src/sap/fe/core/TemplateModel-dbg.js +1 -1
- package/src/sap/fe/core/TemplateModel.ts +6 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel-dbg.js +5 -7
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +6 -5
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +164 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +170 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +88 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +6 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +142 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +913 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +21 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/{BuildingBlockRuntime.ts → BuildingBlockTemplateProcessor.ts} +313 -373
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +79 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +15 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +68 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +162 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +6 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -0
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +183 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo-dbg.js +4 -2
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +936 -231
- package/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +1023 -255
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +48 -98
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +95 -129
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +14 -17
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +23 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -0
- package/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +3 -3
- package/src/sap/fe/core/controllerextensions/MassEdit.js +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +2 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +2 -0
- package/src/sap/fe/core/controllerextensions/PageReady-dbg.js +3 -5
- package/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.ts +26 -4
- package/src/sap/fe/core/controllerextensions/Paginator-dbg.js +2 -1
- package/src/sap/fe/core/controllerextensions/Paginator.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Paginator.ts +7 -0
- package/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +8 -0
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +8 -1
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +11 -0
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +14 -13
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +27 -27
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +17 -8
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +35 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase-dbg.js +6 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +7 -4
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +285 -82
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +326 -89
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +23 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +32 -3
- package/src/sap/fe/core/controllerextensions/collaboration/Manage-dbg.js +4 -4
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +4 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +17 -3
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block-dbg.js +65 -34
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +33 -18
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog-dbg.js +103 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +124 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper-dbg.js +78 -149
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +85 -160
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +49 -49
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +52 -63
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +82 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +123 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +1508 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +1993 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations-dbg.js +3 -1415
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +2 -1921
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +10 -18
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +9 -22
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +53 -47
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +55 -61
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher-dbg.js +12 -1
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.ts +19 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +78 -13
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +100 -13
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +4 -1
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +16 -5
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js.map +1 -1
- package/src/sap/fe/core/controls/CommandExecution.ts +15 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +4 -1
- package/src/sap/fe/core/controls/FilterBar-dbg.js +1 -1
- package/src/sap/fe/core/controls/FilterBar.ts +5 -0
- package/src/sap/fe/core/controls/FormElementWrapper-dbg.js +1 -1
- package/src/sap/fe/core/controls/FormElementWrapper.ts +3 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +7 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +4 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +10 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +4 -3
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +0 -1
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +2 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +6 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js.map +1 -1
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +5 -0
- package/src/sap/fe/core/converters/ConverterContext-dbg.js +3 -5
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ConverterContext.js.map +1 -1
- package/src/sap/fe/core/converters/ConverterContext.ts +4 -6
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -8
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js.map +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +15 -6
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +21 -3
- package/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.js.map +1 -1
- package/src/sap/fe/core/converters/ManifestWrapper.ts +23 -1
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +67 -62
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js.map +1 -1
- package/src/sap/fe/core/converters/MetaModelConverter.ts +75 -66
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -1
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +81 -20
- package/src/sap/fe/core/converters/annotations/DataField.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js.map +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.ts +76 -22
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +1027 -956
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
- package/src/sap/fe/core/converters/common/AnnotationConverter.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action-dbg.js +13 -19
- package/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.ts +37 -40
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +95 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +133 -49
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +99 -62
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +140 -75
- package/src/sap/fe/core/converters/controls/Common/Form-dbg.js +7 -6
- package/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.ts +8 -14
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +9 -9
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -18
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +143 -93
- package/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.ts +221 -177
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +23 -16
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js.map +1 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +27 -23
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +138 -75
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +223 -110
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +38 -28
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +67 -47
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar-dbg.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet-dbg.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +5 -8
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +54 -24
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js.map +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +84 -37
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +12 -14
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +16 -11
- package/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +8 -6
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +8 -6
- package/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +7 -6
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +19 -10
- package/src/sap/fe/core/converters/helpers/DataFieldHelper-dbg.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +7 -2
- package/src/sap/fe/core/converters/helpers/ID-dbg.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +2 -1
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +11 -9
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js.map +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +10 -8
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +22 -20
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js.map +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +19 -16
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +32 -35
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +42 -37
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +12 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js.map +1 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +8 -2
- package/src/sap/fe/core/formatters/FPMFormatter-dbg.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat-dbg.js +2 -2
- package/src/sap/fe/core/formatters/FiscalFormat.ts +6 -1
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +3 -7
- package/src/sap/fe/core/formatters/TableFormatter.js +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/TableFormatter.ts +2 -6
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +9 -5
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.ts +11 -4
- package/src/sap/fe/core/fpm/Component-dbg.js +1 -1
- package/src/sap/fe/core/fpm/Component.ts +1 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +7 -6
- package/src/sap/fe/core/helpers/BindingToolkit.js +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.js.map +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit.ts +9 -9
- package/src/sap/fe/core/helpers/ClassSupport-dbg.js +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.js.map +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.ts +1 -0
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +93 -62
- package/src/sap/fe/core/helpers/DeleteHelper.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.ts +140 -185
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +23 -20
- package/src/sap/fe/core/helpers/MassEditHelper.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.ts +26 -28
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +9 -9
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js.map +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.ts +8 -8
- package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +517 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +6 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +610 -0
- package/src/sap/fe/core/helpers/ModelHelper-dbg.js +37 -73
- package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +47 -74
- package/src/sap/fe/core/helpers/PasteHelper-dbg.js +5 -5
- package/src/sap/fe/core/helpers/PasteHelper.js +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/PasteHelper.ts +6 -10
- package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +39 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +6 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +35 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +132 -23
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.js.map +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +109 -22
- package/src/sap/fe/core/helpers/SemanticKeyHelper-dbg.js +2 -2
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
- package/src/sap/fe/core/helpers/SizeHelper-dbg.js +53 -0
- package/src/sap/fe/core/helpers/SizeHelper.js +6 -0
- package/src/sap/fe/core/helpers/SizeHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/SizeHelper.ts +51 -0
- package/src/sap/fe/core/helpers/StableIdHelper-dbg.js +29 -25
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +26 -24
- package/src/sap/fe/core/helpers/Synchronization-dbg.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.ts +2 -0
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +151 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js.map +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.ts +162 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader-dbg.js +2 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +6 -2
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +3 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents-dbg.js +3 -3
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +1 -1
- package/src/sap/fe/core/library-dbg.js +2 -2
- package/src/sap/fe/core/library-preload.js +156 -140
- package/src/sap/fe/core/library-preload.js.map +1 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/library.ts +7 -0
- package/src/sap/fe/core/manifest.json +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +67 -15
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js.map +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -14
- package/src/sap/fe/core/messagebundle.properties +35 -0
- package/src/sap/fe/core/messagebundle_ar.properties +15 -12
- package/src/sap/fe/core/messagebundle_bg.properties +20 -17
- package/src/sap/fe/core/messagebundle_ca.properties +12 -9
- package/src/sap/fe/core/messagebundle_cs.properties +12 -9
- package/src/sap/fe/core/messagebundle_cy.properties +12 -9
- package/src/sap/fe/core/messagebundle_da.properties +12 -9
- package/src/sap/fe/core/messagebundle_de.properties +13 -10
- package/src/sap/fe/core/messagebundle_el.properties +14 -11
- package/src/sap/fe/core/messagebundle_en.properties +4 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +4 -1
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +2 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +21 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +23 -3
- package/src/sap/fe/core/messagebundle_es.properties +12 -9
- package/src/sap/fe/core/messagebundle_es_MX.properties +12 -9
- package/src/sap/fe/core/messagebundle_et.properties +12 -9
- package/src/sap/fe/core/messagebundle_fi.properties +12 -9
- package/src/sap/fe/core/messagebundle_fr.properties +12 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +13 -10
- package/src/sap/fe/core/messagebundle_hi.properties +12 -9
- package/src/sap/fe/core/messagebundle_hr.properties +12 -9
- package/src/sap/fe/core/messagebundle_hu.properties +12 -9
- package/src/sap/fe/core/messagebundle_id.properties +13 -10
- package/src/sap/fe/core/messagebundle_it.properties +12 -9
- package/src/sap/fe/core/messagebundle_iw.properties +12 -9
- package/src/sap/fe/core/messagebundle_ja.properties +13 -10
- package/src/sap/fe/core/messagebundle_kk.properties +12 -9
- package/src/sap/fe/core/messagebundle_ko.properties +12 -9
- package/src/sap/fe/core/messagebundle_lt.properties +12 -9
- package/src/sap/fe/core/messagebundle_lv.properties +12 -9
- package/src/sap/fe/core/messagebundle_ms.properties +13 -10
- package/src/sap/fe/core/messagebundle_nl.properties +13 -10
- package/src/sap/fe/core/messagebundle_no.properties +12 -9
- package/src/sap/fe/core/messagebundle_pl.properties +12 -9
- package/src/sap/fe/core/messagebundle_pt.properties +12 -9
- package/src/sap/fe/core/messagebundle_pt_PT.properties +12 -9
- package/src/sap/fe/core/messagebundle_ro.properties +16 -13
- package/src/sap/fe/core/messagebundle_ru.properties +13 -10
- package/src/sap/fe/core/messagebundle_sh.properties +12 -9
- package/src/sap/fe/core/messagebundle_sk.properties +12 -9
- package/src/sap/fe/core/messagebundle_sl.properties +12 -9
- package/src/sap/fe/core/messagebundle_sv.properties +12 -9
- package/src/sap/fe/core/messagebundle_th.properties +12 -9
- package/src/sap/fe/core/messagebundle_tr.properties +12 -9
- package/src/sap/fe/core/messagebundle_uk.properties +12 -9
- package/src/sap/fe/core/messagebundle_vi.properties +13 -10
- package/src/sap/fe/core/messagebundle_zh_CN.properties +12 -9
- package/src/sap/fe/core/messagebundle_zh_TW.properties +12 -9
- package/src/sap/fe/core/operationsHelper-dbg.js +70 -44
- package/src/sap/fe/core/operationsHelper.js +1 -1
- package/src/sap/fe/core/operationsHelper.js.map +1 -1
- package/src/sap/fe/core/operationsHelper.ts +88 -63
- package/src/sap/fe/core/rootView/Fcl-dbg.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +10 -0
- package/src/sap/fe/core/rootView/NavContainer-dbg.controller.js +2 -2
- package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.js.map +1 -1
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +5 -3
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +10 -5
- package/src/sap/fe/core/rootView/RootViewBaseController.js +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js.map +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +22 -8
- package/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +15 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -1
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +9 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +19 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +10 -3
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +9 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +35 -3
- package/src/sap/fe/core/services/ShellServicesFactory-dbg.js +7 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.js.map +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +24 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +448 -279
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +497 -333
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +26 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +54 -13
- package/src/sap/fe/core/support/Diagnostics-dbg.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -0
- package/src/sap/fe/core/templating/CommonFormatters-dbg.js +4 -3
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +195 -95
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js.map +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +210 -96
- package/src/sap/fe/core/templating/DisplayModeFormatter-dbg.js +5 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js.map +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -2
- package/src/sap/fe/core/templating/EntitySetHelper-dbg.js +19 -29
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js.map +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -26
- package/src/sap/fe/core/templating/EntityTypeHelper-dbg.js +48 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.js +6 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.js.map +1 -0
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +37 -0
- package/src/sap/fe/core/templating/FilterHelper-dbg.js +3 -3
- package/src/sap/fe/core/templating/FilterHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterHelper.js.map +1 -1
- package/src/sap/fe/core/templating/FilterHelper.ts +5 -3
- package/src/sap/fe/core/templating/FilterTemplating-dbg.js +7 -8
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js.map +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +5 -8
- package/src/sap/fe/core/templating/PropertyFormatters-dbg.js +1 -6
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.ts +0 -5
- package/src/sap/fe/core/templating/PropertyHelper-dbg.js +13 -46
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js.map +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.ts +14 -43
- package/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
- package/src/sap/fe/core/templating/UIFormatters.js +1 -1
- package/src/sap/fe/core/templating/UIFormatters.js.map +1 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +47 -32
- package/src/sap/fe/core/type/DateTimeWithTimezone-dbg.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -0
- package/src/sap/fe/core/type/FiscalDate-dbg.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.js.map +1 -1
- package/src/sap/fe/core/type/FiscalDate.ts +2 -1
- package/src/sap/fe/core/type/TypeUtil-dbg.js +5 -10
- package/src/sap/fe/core/type/TypeUtil.js +1 -1
- package/src/sap/fe/core/type/TypeUtil.js.map +1 -1
- package/src/sap/fe/core/type/TypeUtil.ts +3 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlock-dbg.js +0 -410
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +0 -15
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js.map +0 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +0 -536
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment-dbg.js +0 -44
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js +0 -6
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.js.map +0 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFragment.ts +0 -14
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime-dbg.js +0 -948
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +0 -19
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +0 -711
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +0 -6
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js.map +0 -1
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +0 -863
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
- package/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +0 -151
- package/src/sap/fe/core/controls/ConditionalWrapper.js +0 -6
- package/src/sap/fe/core/controls/ConditionalWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +0 -88
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper-dbg.js +0 -330
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +0 -6
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +0 -292
- package/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +0 -126
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +0 -6
- package/src/sap/fe/core/controls/CustomQuickViewPage.js.map +0 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +0 -105
- package/src/sap/fe/core/controls/FieldWrapper-dbg.js +0 -194
- package/src/sap/fe/core/controls/FieldWrapper.js +0 -6
- package/src/sap/fe/core/controls/FieldWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/FieldWrapper.ts +0 -121
- package/src/sap/fe/core/controls/FileWrapper-dbg.js +0 -280
- package/src/sap/fe/core/controls/FileWrapper.js +0 -6
- package/src/sap/fe/core/controls/FileWrapper.js.map +0 -1
- package/src/sap/fe/core/controls/FileWrapper.ts +0 -202
- package/src/sap/fe/core/helpers/SideEffectsHelper-dbg.js +0 -141
- package/src/sap/fe/core/helpers/SideEffectsHelper.js +0 -6
- package/src/sap/fe/core/helpers/SideEffectsHelper.js.map +0 -1
- package/src/sap/fe/core/helpers/SideEffectsHelper.ts +0 -129
|
@@ -2,12 +2,10 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper"], function (BindingHelper, MetaModelConverter, valueFormatters, BindingToolkit, DataModelPathHelper, DisplayModeFormatter, FieldControlHelper, PropertyHelper) {
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/BindingToolkit", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/ui/mdc/enum/EditMode"], function (BindingHelper, MetaModelConverter, valueFormatters, BindingToolkit, TypeGuards, DataModelPathHelper, DisplayModeFormatter, FieldControlHelper, PropertyHelper, EditMode) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
9
|
-
var isProperty = PropertyHelper.isProperty;
|
|
10
|
-
var isPathExpression = PropertyHelper.isPathExpression;
|
|
11
9
|
var isKey = PropertyHelper.isKey;
|
|
12
10
|
var isImmutable = PropertyHelper.isImmutable;
|
|
13
11
|
var isComputed = PropertyHelper.isComputed;
|
|
@@ -22,6 +20,9 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
22
20
|
var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
|
|
23
21
|
var getRelativePaths = DataModelPathHelper.getRelativePaths;
|
|
24
22
|
var getContextRelativeTargetObjectPath = DataModelPathHelper.getContextRelativeTargetObjectPath;
|
|
23
|
+
var isProperty = TypeGuards.isProperty;
|
|
24
|
+
var isPathAnnotationExpression = TypeGuards.isPathAnnotationExpression;
|
|
25
|
+
var isMultipleNavigationProperty = TypeGuards.isMultipleNavigationProperty;
|
|
25
26
|
var pathInModel = BindingToolkit.pathInModel;
|
|
26
27
|
var or = BindingToolkit.or;
|
|
27
28
|
var notEqual = BindingToolkit.notEqual;
|
|
@@ -50,7 +51,8 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
50
51
|
let oDataFieldConverted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
51
52
|
let oDataModelObjectPath = arguments.length > 2 ? arguments[2] : undefined;
|
|
52
53
|
let isEditable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : UI.IsEditable;
|
|
53
|
-
|
|
54
|
+
let considerUpdateRestrictions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;
|
|
55
|
+
return getEditableExpression(oPropertyPath, oDataFieldConverted, oDataModelObjectPath, true, isEditable, considerUpdateRestrictions);
|
|
54
56
|
};
|
|
55
57
|
_exports.getEditableExpressionAsObject = getEditableExpressionAsObject;
|
|
56
58
|
/**
|
|
@@ -61,6 +63,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
61
63
|
* @param oDataModelObjectPath The path to this property object
|
|
62
64
|
* @param bAsObject Whether or not this should be returned as an object or a binding string
|
|
63
65
|
* @param isEditable Whether or not UI.IsEditable be considered.
|
|
66
|
+
* @param considerUpdateRestrictions Whether we want to take into account UpdateRestrictions to compute the editable
|
|
64
67
|
* @returns The binding expression used to determine if a property is editable or not
|
|
65
68
|
*/
|
|
66
69
|
const getEditableExpression = function (oPropertyPath) {
|
|
@@ -68,6 +71,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
68
71
|
let oDataModelObjectPath = arguments.length > 2 ? arguments[2] : undefined;
|
|
69
72
|
let bAsObject = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
70
73
|
let isEditable = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : UI.IsEditable;
|
|
74
|
+
let considerUpdateRestrictions = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;
|
|
71
75
|
if (!oPropertyPath || typeof oPropertyPath === "string") {
|
|
72
76
|
return compileExpression(false);
|
|
73
77
|
}
|
|
@@ -75,7 +79,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
75
79
|
if (oDataFieldConverted !== null) {
|
|
76
80
|
dataFieldEditableExpression = ifElse(isNonEditableExpression(oDataFieldConverted), false, isEditable);
|
|
77
81
|
}
|
|
78
|
-
const oProperty =
|
|
82
|
+
const oProperty = isPathAnnotationExpression(oPropertyPath) ? oPropertyPath.$target : oPropertyPath;
|
|
79
83
|
const relativePath = getRelativePaths(oDataModelObjectPath);
|
|
80
84
|
// Editability depends on the field control expression
|
|
81
85
|
// If the Field control is statically in ReadOnly or Inapplicable (disabled) -> not editable
|
|
@@ -91,7 +95,10 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
91
95
|
propertyPath: oPropertyPath,
|
|
92
96
|
pathVisitor: (path, navigationPaths) => singletonPathVisitor(path, oDataModelObjectPath.convertedTypes, navigationPaths)
|
|
93
97
|
});
|
|
94
|
-
|
|
98
|
+
if (compileExpression(isPathUpdatableExpression) === "false" && considerUpdateRestrictions) {
|
|
99
|
+
return bAsObject ? isPathUpdatableExpression : "false";
|
|
100
|
+
}
|
|
101
|
+
const editableExpression = ifElse(or(and(not(isPathUpdatableExpression), considerUpdateRestrictions), isComputed(oProperty), isKey(oProperty), isImmutable(oProperty), isNonEditableExpression(oProperty, relativePath)), ifElse(or(isComputed(oProperty), isNonEditableExpression(oProperty, relativePath)), false, UI.IsTransientBinding), isEditable);
|
|
95
102
|
if (bAsObject) {
|
|
96
103
|
return and(editableExpression, dataFieldEditableExpression);
|
|
97
104
|
}
|
|
@@ -138,7 +145,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
138
145
|
if (oDataFieldConverted !== null) {
|
|
139
146
|
dataFieldEnabledExpression = ifElse(isDisabledExpression(oDataFieldConverted), false, true);
|
|
140
147
|
}
|
|
141
|
-
const oProperty =
|
|
148
|
+
const oProperty = isPathAnnotationExpression(oPropertyPath) ? oPropertyPath.$target : oPropertyPath;
|
|
142
149
|
// Enablement depends on the field control expression
|
|
143
150
|
// If the Field control is statically in Inapplicable (disabled) -> not enabled
|
|
144
151
|
const enabledExpression = ifElse(isDisabledExpression(oProperty, relativePath), false, true);
|
|
@@ -166,30 +173,29 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
166
173
|
let dataFieldConverted = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
|
|
167
174
|
let isEditable = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : UI.IsEditable;
|
|
168
175
|
if (!propertyPath || typeof propertyPath === "string" || (dataFieldConverted === null || dataFieldConverted === void 0 ? void 0 : dataFieldConverted.$Type) === "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath") {
|
|
169
|
-
return
|
|
176
|
+
return EditMode.Display;
|
|
170
177
|
}
|
|
171
|
-
const property =
|
|
178
|
+
const property = isPathAnnotationExpression(propertyPath) ? propertyPath.$target : propertyPath;
|
|
172
179
|
const relativePath = getRelativePaths(dataModelObjectPath);
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
//
|
|
179
|
-
const editableExpression = getEditableExpressionAsObject(propertyPath, dataFieldConverted, dataModelObjectPath, isEditable);
|
|
180
|
+
const isPathUpdatableExpression = isPathUpdatable(dataModelObjectPath, {
|
|
181
|
+
propertyPath: property,
|
|
182
|
+
pathVisitor: (path, navigationPaths) => singletonPathVisitor(path, dataModelObjectPath.convertedTypes, navigationPaths)
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
// we get the editable Expression without considering update Restrictions because they are handled separately
|
|
186
|
+
const editableExpression = getEditableExpressionAsObject(propertyPath, dataFieldConverted, dataModelObjectPath, isEditable, false);
|
|
180
187
|
const enabledExpression = getEnabledExpressionAsObject(propertyPath, dataFieldConverted, dataModelObjectPath);
|
|
181
188
|
const associatedCurrencyProperty = getAssociatedCurrencyProperty(property);
|
|
182
189
|
const unitProperty = associatedCurrencyProperty || getAssociatedUnitProperty(property);
|
|
183
|
-
let resultExpression = constant(
|
|
190
|
+
let resultExpression = constant(EditMode.Editable);
|
|
184
191
|
if (unitProperty) {
|
|
185
192
|
const isUnitReadOnly = isReadOnlyExpression(unitProperty, relativePath);
|
|
186
|
-
resultExpression = ifElse(or(isUnitReadOnly, isComputed(unitProperty), and(isImmutable(unitProperty), not(UI.IsTransientBinding)), measureReadOnly), ifElse(!isConstant(isUnitReadOnly) && isUnitReadOnly,
|
|
193
|
+
resultExpression = ifElse(or(isUnitReadOnly, isComputed(unitProperty), and(isImmutable(unitProperty), not(UI.IsTransientBinding)), measureReadOnly), ifElse(!isConstant(isUnitReadOnly) && isUnitReadOnly, EditMode.EditableReadOnly, EditMode.EditableDisplay), EditMode.Editable);
|
|
187
194
|
}
|
|
188
195
|
const readOnlyExpression = or(isReadOnlyExpression(property, relativePath), isReadOnlyExpression(dataFieldConverted));
|
|
189
196
|
|
|
190
|
-
// if
|
|
191
|
-
|
|
192
|
-
const editModeExpression = ifElse(enabledExpression, ifElse(editableExpression, resultExpression, ifElse(and(!isConstant(readOnlyExpression) && readOnlyExpression, isEditable), "ReadOnly", "Display")), ifElse(isEditable, "Disabled", "Display"));
|
|
197
|
+
// if there are update Restrictions it is always display mode
|
|
198
|
+
const editModeExpression = ifElse(or(isPathUpdatableExpression, UI.IsTransientBinding), ifElse(enabledExpression, ifElse(editableExpression, resultExpression, ifElse(and(!isConstant(readOnlyExpression) && readOnlyExpression, isEditable), EditMode.ReadOnly, EditMode.Display)), ifElse(isEditable, EditMode.Disabled, EditMode.Display)), EditMode.Display);
|
|
193
199
|
if (asObject) {
|
|
194
200
|
return editModeExpression;
|
|
195
201
|
}
|
|
@@ -209,7 +215,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
209
215
|
};
|
|
210
216
|
_exports.hasValidAnalyticalCurrencyOrUnit = hasValidAnalyticalCurrencyOrUnit;
|
|
211
217
|
const ifUnitEditable = function (oPropertyPath, sEditableValue, sNonEditableValue) {
|
|
212
|
-
const oProperty =
|
|
218
|
+
const oProperty = isPathAnnotationExpression(oPropertyPath) && oPropertyPath.$target || oPropertyPath;
|
|
213
219
|
const unitProperty = getAssociatedCurrencyProperty(oProperty) || getAssociatedUnitProperty(oProperty);
|
|
214
220
|
if (!unitProperty) {
|
|
215
221
|
return compileExpression(sNonEditableValue);
|
|
@@ -220,7 +226,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
220
226
|
};
|
|
221
227
|
_exports.ifUnitEditable = ifUnitEditable;
|
|
222
228
|
const getFieldDisplay = function (oPropertyPath, sTargetDisplayMode, oComputedEditMode) {
|
|
223
|
-
const oProperty =
|
|
229
|
+
const oProperty = isPathAnnotationExpression(oPropertyPath) && oPropertyPath.$target || oPropertyPath;
|
|
224
230
|
return hasValueHelp(oProperty) ? compileExpression(sTargetDisplayMode) : compileExpression(ifElse(equal(oComputedEditMode, "Editable"), "Value", sTargetDisplayMode));
|
|
225
231
|
};
|
|
226
232
|
_exports.getFieldDisplay = getFieldDisplay;
|
|
@@ -384,7 +390,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
384
390
|
var _oDataModelPath$navig;
|
|
385
391
|
if ((_oDataModelPath$navig = oDataModelPath.navigationProperties) !== null && _oDataModelPath$navig !== void 0 && _oDataModelPath$navig.length) {
|
|
386
392
|
const hasOneToManyNavigation = (oDataModelPath === null || oDataModelPath === void 0 ? void 0 : oDataModelPath.navigationProperties.findIndex(oNav => {
|
|
387
|
-
if (oNav
|
|
393
|
+
if (isMultipleNavigationProperty(oNav)) {
|
|
388
394
|
var _oDataModelPath$conte, _oDataModelPath$conte2;
|
|
389
395
|
if ((_oDataModelPath$conte = oDataModelPath.contextLocation) !== null && _oDataModelPath$conte !== void 0 && (_oDataModelPath$conte2 = _oDataModelPath$conte.navigationProperties) !== null && _oDataModelPath$conte2 !== void 0 && _oDataModelPath$conte2.length) {
|
|
390
396
|
var _oDataModelPath$conte3;
|
|
@@ -430,7 +436,7 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
430
436
|
}
|
|
431
437
|
let requiredPropertyFromInsertRestrictionsExpression = constant(false);
|
|
432
438
|
let requiredPropertyFromUpdateRestrictionsExpression = constant(false);
|
|
433
|
-
const oProperty =
|
|
439
|
+
const oProperty = isPathAnnotationExpression(oPropertyPath) && oPropertyPath.$target || oPropertyPath;
|
|
434
440
|
// Enablement depends on the field control expression
|
|
435
441
|
// If the Field control is statically in Inapplicable (disabled) -> not enabled
|
|
436
442
|
const requiredExpression = isRequiredExpression(oProperty, relativePath);
|
|
@@ -495,4 +501,4 @@ sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper", "sap/fe/core/conv
|
|
|
495
501
|
_exports.getRequiredExpressionForConnectedDataField = getRequiredExpressionForConnectedDataField;
|
|
496
502
|
return _exports;
|
|
497
503
|
}, false);
|
|
498
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREaXNwbGF5TW9kZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwiRGlzcGxheU1vZGVGb3JtYXR0ZXIiLCJ0YXJnZXRPYmplY3QiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiaXNFZGl0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImdldEVkaXRhYmxlRXhwcmVzc2lvbiIsImJBc09iamVjdCIsImNvbXBpbGVFeHByZXNzaW9uIiwiZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJpZkVsc2UiLCJpc05vbkVkaXRhYmxlRXhwcmVzc2lvbiIsIm9Qcm9wZXJ0eSIsImlzUGF0aEV4cHJlc3Npb24iLCIkdGFyZ2V0IiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXRoVmlzaXRvciIsInBhdGgiLCJuYXZpZ2F0aW9uUGF0aHMiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImNvbnZlcnRlZFR5cGVzIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsImFuZCIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImZvcm1hdHRlciIsIm9iamVjdFBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiYWN0aXZpdHlFeHByZXNzaW9uIiwicGF0aEluTW9kZWwiLCJrZXlzIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXNFeHByZXNzaW9ucyIsImZvckVhY2giLCJrZXkiLCJrZXlFeHByZXNzaW9uIiwibmFtZSIsInB1c2giLCJmb3JtYXRSZXN1bHQiLCJnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiIsImlzRGlzYWJsZWRFeHByZXNzaW9uIiwiZW5hYmxlZEV4cHJlc3Npb24iLCJnZXRFZGl0TW9kZSIsIm1lYXN1cmVSZWFkT25seSIsImFzT2JqZWN0IiwiZGF0YUZpZWxkQ29udmVydGVkIiwiJFR5cGUiLCJwcm9wZXJ0eSIsImFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJ1bml0UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwicmVzdWx0RXhwcmVzc2lvbiIsImlzVW5pdFJlYWRPbmx5IiwiaXNSZWFkT25seUV4cHJlc3Npb24iLCJpc0NvbnN0YW50IiwicmVhZE9ubHlFeHByZXNzaW9uIiwiZWRpdE1vZGVFeHByZXNzaW9uIiwiaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQiLCJvUHJvcGVydHlEYXRhTW9kZWxPYmplY3RQYXRoIiwib1Byb3BlcnR5RGVmaW5pdGlvbiIsImN1cnJlbmN5IiwiYW5ub3RhdGlvbnMiLCJNZWFzdXJlcyIsIklTT0N1cnJlbmN5IiwibWVhc3VyZSIsIlVuaXQiLCJpc1RydXRoeSIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIklzVG90YWwiLCJpZlVuaXRFZGl0YWJsZSIsInNFZGl0YWJsZVZhbHVlIiwic05vbkVkaXRhYmxlVmFsdWUiLCJnZXRGaWVsZERpc3BsYXkiLCJzVGFyZ2V0RGlzcGxheU1vZGUiLCJvQ29tcHV0ZWRFZGl0TW9kZSIsImhhc1ZhbHVlSGVscCIsImVxdWFsIiwiZ2V0VHlwZUNvbmZpZyIsImRhdGFUeXBlIiwib1RhcmdldE1hcHBpbmciLCJFRE1fVFlQRV9NQVBQSU5HIiwidHlwZSIsInVuZGVmaW5lZCIsInByb3BlcnR5VHlwZUNvbmZpZyIsImNvbnN0cmFpbnRzIiwiZm9ybWF0T3B0aW9ucyIsImlzUHJvcGVydHkiLCJzY2FsZSIsIiRTY2FsZSIsInByZWNpc2lvbiIsIiRQcmVjaXNpb24iLCJtYXhMZW5ndGgiLCIkTWF4TGVuZ3RoIiwibnVsbGFibGUiLCIkTnVsbGFibGUiLCJtaW5pbXVtIiwiaXNOYU4iLCJWYWxpZGF0aW9uIiwiTWluaW11bSIsIm1heGltdW0iLCJNYXhpbXVtIiwiaXNEaWdpdFNlcXVlbmNlIiwiQ29tbW9uIiwiSXNEaWdpdFNlcXVlbmNlIiwiVjQiLCIkVjQiLCJwYXJzZUFzU3RyaW5nIiwiaW5kZXhPZiIsImVtcHR5U3RyaW5nIiwicGFyc2VLZWVwc0VtcHR5U3RyaW5nIiwiZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSIsIm9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgiLCJwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uIiwiaWdub3JlVW5pdENvbnN0cmFpbnQiLCJ1bml0IiwicmVsYXRpdmVMb2NhdGlvbiIsImZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24iLCJ0b1N0cmluZyIsInNob3dNZWFzdXJlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aFBlcmNlbnRhZ2UiLCJjb21wbGV4VHlwZSIsInVuaXRCaW5kaW5nRXhwcmVzc2lvbiIsImFkZFR5cGVJbmZvcm1hdGlvbiIsImdldEJpbmRpbmdGb3JVbml0T3JDdXJyZW5jeSIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJzaG93TnVtYmVyIiwiZ2V0QmluZGluZ1dpdGhUaW1lem9uZSIsImhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwiZGF0ZUZvcm1hdE9wdGlvbnMiLCJ0aW1lem9uZSIsIlRpbWV6b25lIiwic2hvd1RpbWV6b25lRm9yRW1wdHlWYWx1ZXMiLCJzaG93VGltZSIsInNob3dEYXRlIiwic2hvd1RpbWV6b25lIiwiZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiIsInNBbGlnbkRpc3BsYXkiLCJzQWxpZ25FZGl0IiwiZ2V0Q29udmVydGVyQ29udGV4dCIsIm9Db250ZXh0Iiwib0ludGVyZmFjZSIsImNvbnRleHQiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsInJlcXVpcmVzSUNvbnRleHQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJvRGF0YU1vZGVsUGF0aCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibGVuZ3RoIiwiaGFzT25lVG9NYW55TmF2aWdhdGlvbiIsImZpbmRJbmRleCIsIm9OYXYiLCJfdHlwZSIsImlzQ29sbGVjdGlvbiIsImNvbnRleHRMb2NhdGlvbiIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsIm5vdEVxdWFsIiwicmV0dXJuRXhwcmVzc2lvbiIsImdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCIsImRhdGFGaWVsZE9iamVjdFBhdGgiLCJkYXRhIiwiRGF0YSIsIk9iamVjdCIsImRhdGFGaWVsZHMiLCJpc1JlcXVpcmVkRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCJWYWx1ZSIsIlRhcmdldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUlGb3JtYXR0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBzaW5nbGV0b25QYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhZGRUeXBlSW5mb3JtYXRpb24sXG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0bm90RXF1YWwsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCxcblx0Z2V0UmVsYXRpdmVQYXRocyxcblx0Z2V0VGFyZ2V0T2JqZWN0UGF0aCxcblx0aXNQYXRoVXBkYXRhYmxlXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCAqIGFzIERpc3BsYXlNb2RlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQge1xuXHRpc0Rpc2FibGVkRXhwcmVzc2lvbixcblx0aXNOb25FZGl0YWJsZUV4cHJlc3Npb24sXG5cdGlzUmVhZE9ubHlFeHByZXNzaW9uLFxuXHRpc1JlcXVpcmVkRXhwcmVzc2lvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9GaWVsZENvbnRyb2xIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5LFxuXHRnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5LFxuXHRoYXNWYWx1ZUhlbHAsXG5cdGlzQ29tcHV0ZWQsXG5cdGlzSW1tdXRhYmxlLFxuXHRpc0tleSxcblx0aXNQYXRoRXhwcmVzc2lvbixcblx0aXNQcm9wZXJ0eVxufSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5T3JQYXRoPFA+ID0gc3RyaW5nIHwgUCB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPjtcbmV4cG9ydCB0eXBlIE1ldGFNb2RlbENvbnRleHQgPSB7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlID0ge1xuXHRjb250ZXh0OiBDb250ZXh0O1xuXHRhcmd1bWVudHM/OiBhbnlbXTtcblx0JCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xuXHRWND86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlZm9ybWF0T3B0aW9ucyA9IHtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50czogY29uZmlnVHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBjb25maWdUeXBlZm9ybWF0T3B0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBhbnkgPSBudWxsLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldEVkaXRhYmxlRXhwcmVzc2lvbihcblx0XHRvUHJvcGVydHlQYXRoLFxuXHRcdG9EYXRhRmllbGRDb252ZXJ0ZWQsXG5cdFx0b0RhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0dHJ1ZSxcblx0XHRpc0VkaXRhYmxlXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcblxuZXhwb3J0IHR5cGUgZGF0ZUZvcm1hdE9wdGlvbnMgPSB7XG5cdHNob3dEYXRlOiBzdHJpbmc7XG5cdHNob3dUaW1lOiBzdHJpbmc7XG5cdHNob3dUaW1lem9uZTogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgdGhlIGV4cHJlc3Npb24gdG8gZ2VuZXJhdGUgYW4gXCJlZGl0YWJsZVwiIEJvb2xlYW4gdmFsdWUuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgRGF0YUZpZWxkQ29udmVydGVkIG9iamVjdCB0byByZWFkIHRoZSBmaWVsZENvbnRyb2wgYW5ub3RhdGlvblxuICogQHBhcmFtIG9EYXRhTW9kZWxPYmplY3RQYXRoIFRoZSBwYXRoIHRvIHRoaXMgcHJvcGVydHkgb2JqZWN0XG4gKiBAcGFyYW0gYkFzT2JqZWN0IFdoZXRoZXIgb3Igbm90IHRoaXMgc2hvdWxkIGJlIHJldHVybmVkIGFzIGFuIG9iamVjdCBvciBhIGJpbmRpbmcgc3RyaW5nXG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBXaGV0aGVyIG9yIG5vdCBVSS5Jc0VkaXRhYmxlIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogYW55ID0gbnVsbCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmYWxzZSk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVkaXRhYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSBudWxsKSB7XG5cdFx0ZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uID0gaWZFbHNlKGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpLCBmYWxzZSwgaXNFZGl0YWJsZSk7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMob0RhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHQvLyBFZGl0YWJpbGl0eSBkZXBlbmRzIG9uIHRoZSBmaWVsZCBjb250cm9sIGV4cHJlc3Npb25cblx0Ly8gSWYgdGhlIEZpZWxkIGNvbnRyb2wgaXMgc3RhdGljYWxseSBpbiBSZWFkT25seSBvciBJbmFwcGxpY2FibGUgKGRpc2FibGVkKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGEga2V5IC0+IG5vdCBlZGl0YWJsZSBleGNlcHQgaW4gY3JlYXRpb24gaWYgbm90IGNvbXB1dGVkXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBjb21wdXRlZCAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCB1cGRhdGFibGUgLT4gbm90IGVkaXRhYmxlXG5cdC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBpbW11dGFibGUgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBhIHBhdGggcmVzb2x2aW5nIHRvIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpICg8PSAxKSAtPiBub3QgZWRpdGFibGVcblx0Ly8gRWxzZSwgdG8gYmUgZWRpdGFibGUgeW91IG5lZWRcblx0Ly8gaW1tdXRhYmxlIGFuZCBrZXkgd2hpbGUgaW4gdGhlIGNyZWF0aW9uIHJvd1xuXHQvLyB1aS9pc0VkaXRhYmxlXG5cdGNvbnN0IGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24gPSBpc1BhdGhVcGRhdGFibGUob0RhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRwcm9wZXJ0eVBhdGg6IG9Qcm9wZXJ0eVBhdGgsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBvRGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdG9yKFxuXHRcdFx0bm90KGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24pLFxuXHRcdFx0aXNDb21wdXRlZChvUHJvcGVydHkpLFxuXHRcdFx0aXNLZXkob1Byb3BlcnR5KSxcblx0XHRcdGlzSW1tdXRhYmxlKG9Qcm9wZXJ0eSksXG5cdFx0XHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aClcblx0XHQpLFxuXHRcdGlmRWxzZShvcihpc0NvbXB1dGVkKG9Qcm9wZXJ0eSksIGlzTm9uRWRpdGFibGVFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSksIGZhbHNlLCBVSS5Jc1RyYW5zaWVudEJpbmRpbmcpLFxuXHRcdGlzRWRpdGFibGVcblx0KTtcblx0aWYgKGJBc09iamVjdCkge1xuXHRcdHJldHVybiBhbmQoZWRpdGFibGVFeHByZXNzaW9uLCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoZWRpdGFibGVFeHByZXNzaW9uLCBkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb2xsYWJvcmF0aW9uRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0Zm9ybWF0dGVyOiBhbnlcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+IHtcblx0Y29uc3Qgb2JqZWN0UGF0aCA9IGdldFRhcmdldE9iamVjdFBhdGgoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdGNvbnN0IGFjdGl2aXR5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGAvY29sbGFib3JhdGlvbi9hY3Rpdml0aWVzJHtvYmplY3RQYXRofWAsIFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IGtleXMgPSBkYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlPy5rZXlzO1xuXHRjb25zdCBrZXlzRXhwcmVzc2lvbnM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxhbnk+W10gPSBbXTtcblx0a2V5cz8uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0Y29uc3Qga2V5RXhwcmVzc2lvbiA9IHBhdGhJbk1vZGVsKGtleS5uYW1lKTtcblx0XHRrZXlzRXhwcmVzc2lvbnMucHVzaChrZXlFeHByZXNzaW9uKTtcblx0fSk7XG5cdHJldHVybiBmb3JtYXRSZXN1bHQoW2FjdGl2aXR5RXhwcmVzc2lvbiwgLi4ua2V5c0V4cHJlc3Npb25zXSwgZm9ybWF0dGVyKTtcbn07XG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogYW55LFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRFbmFibGVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCB0cnVlLCBvRGF0YU1vZGVsT2JqZWN0UGF0aCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZW5hYmxlZFwiIEJvb2xlYW4gdmFsdWUuXG4gKlxuICogQHBhcmFtIG9Qcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gb0RhdGFGaWVsZENvbnZlcnRlZCBUaGUgRGF0YUZpZWxkQ29udmVydGVkIE9iamVjdCB0byByZWFkIHRoZSBmaWVsZENvbnRyb2wgYW5ub3RhdGlvblxuICogQHBhcmFtIGJBc09iamVjdCBXaGV0aGVyIG9yIG5vdCB0aGlzIHNob3VsZCBiZSByZXR1cm5lZCBhcyBhbiBvYmplY3Qgb3IgYSBiaW5kaW5nIHN0cmluZ1xuICogQHBhcmFtIG9EYXRhTW9kZWxPYmplY3RQYXRoXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IGlzIGVuYWJsZWQgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFbmFibGVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogYW55LFxuXHRiQXNPYmplY3QgPSBmYWxzZSxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGlmICghb1Byb3BlcnR5UGF0aCB8fCB0eXBlb2Ygb1Byb3BlcnR5UGF0aCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbih0cnVlKTtcblx0fVxuXHRsZXQgcmVsYXRpdmVQYXRoO1xuXHRpZiAob0RhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRyZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKG9EYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gbnVsbCkge1xuXHRcdGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uID0gaWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpLCBmYWxzZSwgdHJ1ZSk7XG5cdH1cblxuXHRjb25zdCBvUHJvcGVydHk6IFByb3BlcnR5ID0gKGlzUGF0aEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdC8vIEVuYWJsZW1lbnQgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVuYWJsZWRcblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBpZkVsc2UoaXNEaXNhYmxlZEV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpLCBmYWxzZSwgdHJ1ZSk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVuYWJsZWRFeHByZXNzaW9uLCBkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbik7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIHRoZSBleHByZXNzaW9uIHRvIGdlbmVyYXRlIGFuIFwiZWRpdE1vZGVcIiBlbnVtIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGlucHV0IHByb3BlcnR5XG4gKiBAcGFyYW0gZGF0YU1vZGVsT2JqZWN0UGF0aCBUaGUgbGlzdCBvZiBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gcmVhY2ggdGhhdCBwcm9wZXJ0eVxuICogQHBhcmFtIG1lYXN1cmVSZWFkT25seSBXaGV0aGVyIHdlIHNob3VsZCBzZXQgVW9NIC8gY3VycmVuY3kgZmllbGQgbW9kZSB0byByZWFkIG9ubHlcbiAqIEBwYXJhbSBhc09iamVjdCBXaGV0aGVyIHdlIHNob3VsZCByZXR1cm4gdGhpcyBhcyBhbiBleHByZXNzaW9uIG9yIGFzIGEgc3RyaW5nXG4gKiBAcGFyYW0gZGF0YUZpZWxkQ29udmVydGVkIFRoZSBkYXRhRmllbGQgb2JqZWN0XG4gKiBAcGFyYW0gaXNFZGl0YWJsZSBXaGV0aGVyIG9yIG5vdCBVSS5Jc0VkaXRhYmxlIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBwcm9wZXJ0eSBlZGl0IG1vZGUsIGNvbXBsaWFudCB3aXRoIHRoZSBNREMgRmllbGQgZGVmaW5pdGlvbiBvZiBlZGl0TW9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEVkaXRNb2RlID0gZnVuY3Rpb24gKFxuXHRwcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0bWVhc3VyZVJlYWRPbmx5OiBib29sZWFuID0gZmFsc2UsXG5cdGFzT2JqZWN0OiBib29sZWFuID0gZmFsc2UsXG5cdGRhdGFGaWVsZENvbnZlcnRlZDogYW55ID0gbnVsbCxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZVxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdGlmICghcHJvcGVydHlQYXRoIHx8IHR5cGVvZiBwcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIgfHwgZGF0YUZpZWxkQ29udmVydGVkPy4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoKSB7XG5cdFx0cmV0dXJuIFwiRGlzcGxheVwiO1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKHByb3BlcnR5UGF0aCkgJiYgcHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChwcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgbm90IGVuYWJsZWQgPT4gRGlzYWJsZWRcblx0Ly8gaWYgdGhlIHByb3BlcnR5IGlzIGVuYWJsZWQgJiYgbm90IGVkaXRhYmxlID0+IFJlYWRPbmx5XG5cdC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBlbmFibGVkICYmIGVkaXRhYmxlID0+IEVkaXRhYmxlXG5cdC8vIElmIHRoZXJlIGlzIGFuIGFzc29jaWF0ZWQgdW5pdCwgYW5kIGl0IGhhcyBhIGZpZWxkIGNvbnRyb2wgYWxzbyB1c2UgY29uc2lkZXIgdGhlIGZvbGxvd2luZ1xuXHQvLyBpZiB0aGUgdW5pdCBmaWVsZCBjb250cm9sIGlzIHJlYWRvbmx5IC0+IEVkaXRhYmxlUmVhZE9ubHlcblx0Ly8gb3RoZXJ3aXNlIC0+IEVkaXRhYmxlXG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VkaXRhYmxlKTtcblxuXHRjb25zdCBlbmFibGVkRXhwcmVzc2lvbiA9IGdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGRDb252ZXJ0ZWQsIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KTtcblx0Y29uc3QgdW5pdFByb3BlcnR5ID0gYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGxldCByZXN1bHRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiA9IGNvbnN0YW50KFwiRWRpdGFibGVcIik7XG5cdGlmICh1bml0UHJvcGVydHkpIHtcblx0XHRjb25zdCBpc1VuaXRSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0b3IoaXNVbml0UmVhZE9ubHksIGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSwgYW5kKGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSksIG5vdChVSS5Jc1RyYW5zaWVudEJpbmRpbmcpKSwgbWVhc3VyZVJlYWRPbmx5KSxcblx0XHRcdGlmRWxzZSghaXNDb25zdGFudChpc1VuaXRSZWFkT25seSkgJiYgaXNVbml0UmVhZE9ubHksIFwiRWRpdGFibGVSZWFkT25seVwiLCBcIkVkaXRhYmxlRGlzcGxheVwiKSxcblx0XHRcdFwiRWRpdGFibGVcIlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgcmVhZE9ubHlFeHByZXNzaW9uID0gb3IoaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGlzUmVhZE9ubHlFeHByZXNzaW9uKGRhdGFGaWVsZENvbnZlcnRlZCkpO1xuXG5cdC8vIGlmIHRoZSBwcm9wZXJ0eSBpcyBmcm9tIGEgbm9uLXVwZGF0YWJsZSBlbnRpdHkgPT4gUmVhZCBvbmx5IG1vZGUsIHByZXZpb3VzbHkgY2FsY3VsYXRlZCBlZGl0IE1vZGUgaXMgaWdub3JlZFxuXHQvLyBpZiB0aGUgcHJvcGVydHkgaXMgZnJvbSBhbiB1cGRhdGFibGUgZW50aXR5ID0+IHByZXZpb3VzbHkgY2FsY3VsYXRlZCBlZGl0IE1vZGUgZXhwcmVzc2lvblxuXHRjb25zdCBlZGl0TW9kZUV4cHJlc3Npb24gPSBpZkVsc2UoXG5cdFx0ZW5hYmxlZEV4cHJlc3Npb24sXG5cdFx0aWZFbHNlKFxuXHRcdFx0ZWRpdGFibGVFeHByZXNzaW9uLFxuXHRcdFx0cmVzdWx0RXhwcmVzc2lvbixcblx0XHRcdGlmRWxzZShhbmQoIWlzQ29uc3RhbnQocmVhZE9ubHlFeHByZXNzaW9uKSAmJiByZWFkT25seUV4cHJlc3Npb24sIGlzRWRpdGFibGUpLCBcIlJlYWRPbmx5XCIsIFwiRGlzcGxheVwiKVxuXHRcdCksXG5cdFx0aWZFbHNlKGlzRWRpdGFibGUsIFwiRGlzYWJsZWRcIiwgXCJEaXNwbGF5XCIpXG5cdCk7XG5cdGlmIChhc09iamVjdCkge1xuXHRcdHJldHVybiBlZGl0TW9kZUV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGVkaXRNb2RlRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCBjdXJyZW5jeSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0Y29uc3QgbWVhc3VyZSA9IGN1cnJlbmN5ID8gY3VycmVuY3kgOiBvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uVW5pdDtcblx0aWYgKG1lYXN1cmUpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob3IoaXNUcnV0aHkoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKG1lYXN1cmUpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+KSwgbm90KFVJLklzVG90YWwpKSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KHRydWUpKTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IGlmVW5pdEVkaXRhYmxlID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdHNFZGl0YWJsZVZhbHVlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHN0cmluZyxcblx0c05vbkVkaXRhYmxlVmFsdWU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0aWYgKCF1bml0UHJvcGVydHkpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oc05vbkVkaXRhYmxlVmFsdWUpO1xuXHR9XG5cdGNvbnN0IGlzVW5pdFJlYWRPbmx5ID0gaXNSZWFkT25seUV4cHJlc3Npb24odW5pdFByb3BlcnR5KTtcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gYW5kKFxuXHRcdG9yKCFpc0NvbnN0YW50KGlzVW5pdFJlYWRPbmx5KSwgbm90KGlzVW5pdFJlYWRPbmx5KSksXG5cdFx0bm90KGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSksXG5cdFx0bm90KGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSkpXG5cdCk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZWRpdGFibGVFeHByZXNzaW9uLCBzRWRpdGFibGVWYWx1ZSwgc05vbkVkaXRhYmxlVmFsdWUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZERpc3BsYXkgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0c1RhcmdldERpc3BsYXlNb2RlOiBzdHJpbmcsXG5cdG9Db21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHkgPSAoaXNQYXRoRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoKSAmJiBvUHJvcGVydHlQYXRoLiR0YXJnZXQpIHx8IChvUHJvcGVydHlQYXRoIGFzIFByb3BlcnR5KTtcblxuXHRyZXR1cm4gaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eSlcblx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKHNUYXJnZXREaXNwbGF5TW9kZSlcblx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJFZGl0YWJsZVwiKSwgXCJWYWx1ZVwiLCBzVGFyZ2V0RGlzcGxheU1vZGUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlQ29uZmlnID0gZnVuY3Rpb24gKG9Qcm9wZXJ0eTogUHJvcGVydHkgfCBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBkYXRhVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYW55IHtcblx0Y29uc3Qgb1RhcmdldE1hcHBpbmcgPSBFRE1fVFlQRV9NQVBQSU5HWyhvUHJvcGVydHkgYXMgUHJvcGVydHkpPy50eXBlXSB8fCAoZGF0YVR5cGUgPyBFRE1fVFlQRV9NQVBQSU5HW2RhdGFUeXBlXSA6IHVuZGVmaW5lZCk7XG5cdGNvbnN0IHByb3BlcnR5VHlwZUNvbmZpZzogY29uZmlnVHlwZSA9IHtcblx0XHR0eXBlOiBvVGFyZ2V0TWFwcGluZy50eXBlLFxuXHRcdGNvbnN0cmFpbnRzOiB7fSxcblx0XHRmb3JtYXRPcHRpb25zOiB7fVxuXHR9O1xuXHRpZiAoaXNQcm9wZXJ0eShvUHJvcGVydHkpKSB7XG5cdFx0cHJvcGVydHlUeXBlQ29uZmlnLmNvbnN0cmFpbnRzID0ge1xuXHRcdFx0c2NhbGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kU2NhbGUgPyBvUHJvcGVydHkuc2NhbGUgOiB1bmRlZmluZWQsXG5cdFx0XHRwcmVjaXNpb246IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kUHJlY2lzaW9uID8gb1Byb3BlcnR5LnByZWNpc2lvbiA6IHVuZGVmaW5lZCxcblx0XHRcdG1heExlbmd0aDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRNYXhMZW5ndGggPyBvUHJvcGVydHkubWF4TGVuZ3RoIDogdW5kZWZpbmVkLFxuXHRcdFx0bnVsbGFibGU6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTnVsbGFibGUgPyBvUHJvcGVydHkubnVsbGFibGUgOiB1bmRlZmluZWQsXG5cdFx0XHRtaW5pbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1pbmltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWluaW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRtYXhpbXVtOlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQE9yZy5PRGF0YS5WYWxpZGF0aW9uLlYxLk1heGltdW0vJERlY2ltYWxcIl0gJiZcblx0XHRcdFx0IWlzTmFOKG9Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bSlcblx0XHRcdFx0XHQ/IGAke29Qcm9wZXJ0eS5hbm5vdGF0aW9ucz8uVmFsaWRhdGlvbj8uTWF4aW11bX1gXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRpc0RpZ2l0U2VxdWVuY2U6XG5cdFx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiICYmXG5cdFx0XHRcdG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy5bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLklzRGlnaXRTZXF1ZW5jZVwiXSAmJlxuXHRcdFx0XHRvUHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uSXNEaWdpdFNlcXVlbmNlXG5cdFx0XHRcdFx0PyB0cnVlXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRWNDogb1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LiRWNCA/IHRydWUgOiB1bmRlZmluZWRcblx0XHR9O1xuXHR9XG5cdHByb3BlcnR5VHlwZUNvbmZpZy5mb3JtYXRPcHRpb25zID0ge1xuXHRcdHBhcnNlQXNTdHJpbmc6XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5JbnRcIikgPT09IDAgfHxcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkRvdWJsZVwiKSA9PT0gMFxuXHRcdFx0XHQ/IGZhbHNlXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdGVtcHR5U3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBcIlwiXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogcHJvcGVydHlUeXBlQ29uZmlnLnR5cGUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuU3RyaW5nXCIgPyB0cnVlIDogdW5kZWZpbmVkXG5cdH07XG5cdHJldHVybiBwcm9wZXJ0eVR5cGVDb25maWc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhVbml0T3JDdXJyZW5jeSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50PzogYm9vbGVhbixcblx0Zm9ybWF0T3B0aW9ucz86IGFueVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblx0aWYgKHVuaXQ/LnRvU3RyaW5nKCkgPT09IFwiJVwiKSB7XG5cdFx0aWYgKGZvcm1hdE9wdGlvbnM/LnNob3dNZWFzdXJlID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb247XG5cdFx0fVxuXHRcdHJldHVybiBmb3JtYXRSZXN1bHQoW3Byb3BlcnR5QmluZGluZ0V4cHJlc3Npb25dLCB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aFBlcmNlbnRhZ2UpO1xuXHR9XG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIGFueSk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9ICh1bml0IGFzIGFueSkuJHRhcmdldFxuXHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0KHVuaXQgYXMgYW55KS4kdGFyZ2V0LFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHRcdGlnbm9yZVVuaXRDb25zdHJhaW50XG5cdFx0ICApXG5cdFx0OiAoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+KTtcblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nIHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXG5cdGxldCB1bml0ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdGlmICh1bml0Py50b1N0cmluZygpID09PSBcIiVcIikge1xuXHRcdHJldHVybiBjb25zdGFudChcIiVcIik7XG5cdH1cblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cblx0Y29uc3QgY29tcGxleFR5cGUgPSB1bml0ID8gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Vbml0XCIgOiBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkN1cnJlbmN5XCI7XG5cdHVuaXQgPSB1bml0ID8gdW5pdCA6IChvUHJvcGVydHlEZWZpbml0aW9uLmFubm90YXRpb25zPy5NZWFzdXJlcz8uSVNPQ3VycmVuY3kgYXMgYW55KTtcblx0Y29uc3QgdW5pdEJpbmRpbmdFeHByZXNzaW9uID0gKHVuaXQgYXMgYW55KS4kdGFyZ2V0XG5cdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHQodW5pdCBhcyBhbnkpLiR0YXJnZXQsXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdCAgKVxuXHRcdDogKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik7XG5cblx0bGV0IHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChcblx0XHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpXG5cdCkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz47XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24sIHRydWUpO1xuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCB7XG5cdFx0cGFyc2VLZWVwc0VtcHR5U3RyaW5nOiB0cnVlLFxuXHRcdGVtcHR5U3RyaW5nOiBcIlwiLFxuXHRcdHNob3dOdW1iZXI6IGZhbHNlXG5cdH0pO1xufTtcbmV4cG9ydCBjb25zdCBnZXRCaW5kaW5nV2l0aFRpbWV6b25lID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoLFxuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPixcblx0aWdub3JlVW5pdENvbnN0cmFpbnQgPSBmYWxzZSxcblx0aGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMgPSBmYWxzZSxcblx0ZGF0ZUZvcm1hdE9wdGlvbnM/OiBkYXRlRm9ybWF0T3B0aW9uc1xuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsUGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IHRpbWV6b25lID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uQ29tbW9uPy5UaW1lem9uZTtcblx0Y29uc3QgcmVsYXRpdmVMb2NhdGlvbiA9IGdldFJlbGF0aXZlUGF0aHMob1Byb3BlcnR5RGF0YU1vZGVsUGF0aCk7XG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24gPSBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKG9Qcm9wZXJ0eURlZmluaXRpb24sIHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb24pO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gXCJzYXAuZmUuY29yZS50eXBlLkRhdGVUaW1lV2l0aFRpbWV6b25lXCI7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9ICh0aW1lem9uZSBhcyBhbnkpLiR0YXJnZXRcblx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdCh0aW1lem9uZSBhcyBhbnkpLiR0YXJnZXQsXG5cdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdFx0XHRcdGlnbm9yZVVuaXRDb25zdHJhaW50XG5cdFx0ICApXG5cdFx0OiAoZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHRpbWV6b25lLCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik7XG5cdGxldCBmb3JtYXRPcHRpb25zID0ge307XG5cdGlmIChoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcykge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRzaG93VGltZXpvbmVGb3JFbXB0eVZhbHVlczogZmFsc2Vcblx0XHR9O1xuXHR9XG5cblx0aWYgKGRhdGVGb3JtYXRPcHRpb25zPy5zaG93VGltZSkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWU6IGRhdGVGb3JtYXRPcHRpb25zLnNob3dUaW1lID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHRydWUgfSB9O1xuXHR9XG5cdGlmIChkYXRlRm9ybWF0T3B0aW9ucz8uc2hvd0RhdGUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dEYXRlOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93RGF0ZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB0cnVlIH0gfTtcblx0fVxuXHRpZiAoZGF0ZUZvcm1hdE9wdGlvbnM/LnNob3dUaW1lem9uZSkge1xuXHRcdGZvcm1hdE9wdGlvbnMgPSB7IC4uLmZvcm1hdE9wdGlvbnMsIC4uLnsgc2hvd1RpbWV6b25lOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93VGltZXpvbmUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdHJ1ZSB9IH07XG5cdH1cblxuXHRyZXR1cm4gYWRkVHlwZUluZm9ybWF0aW9uKFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB1bml0QmluZGluZ0V4cHJlc3Npb25dLCBjb21wbGV4VHlwZSwgdW5kZWZpbmVkLCBmb3JtYXRPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGlnbm1lbnRFeHByZXNzaW9uID0gZnVuY3Rpb24gKFxuXHRvQ29tcHV0ZWRFZGl0TW9kZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdHNBbGlnbkRpc3BsYXk6IHN0cmluZyA9IFwiQmVnaW5cIixcblx0c0FsaWduRWRpdDogc3RyaW5nID0gXCJCZWdpblwiXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChvQ29tcHV0ZWRFZGl0TW9kZSwgXCJEaXNwbGF5XCIpLCBzQWxpZ25EaXNwbGF5LCBzQWxpZ25FZGl0KSk7XG59O1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGNvbnZlcnRlckNvbnRleHQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBtZXRhbW9kZWwgY29udGV4dFxuICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGN1cnJlbnQgdGVtcGxhdGluZyBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgQ29udmVydGVyQ29udGV4dCByZXByZXNlbnRpbmcgdGhhdCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbiAob0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsIG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSk6IG9iamVjdCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gY29udmVydE1ldGFNb2RlbENvbnRleHQob0ludGVyZmFjZS5jb250ZXh0KTtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5nZXRDb252ZXJ0ZXJDb250ZXh0LnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG4vKipcbiAqIEZvcm1hdHRlciBoZWxwZXIgdG8gcmV0cmlldmUgdGhlIGRhdGEgbW9kZWwgb2JqZWN0cyB0aGF0IGFyZSBpbnZvbHZlZCBmcm9tIHRoZSBtZXRhbW9kZWwgY29udGV4dC5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIG9yaWdpbmFsIE9EYXRhTWV0YU1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZW50aXR5c2V0cyBhbmQgbmF2cHJvcGVydGllcyB0aGF0IGFyZSBpbnZvbHZlZCB0byBnZXQgdG8gYSBzcGVjaWZpYyBvYmplY3QgaW4gdGhlIG1ldGFtb2RlbFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCA9IGZ1bmN0aW9uIChcblx0b0NvbnRleHQ6IE1ldGFNb2RlbENvbnRleHQsXG5cdG9JbnRlcmZhY2U6IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZVxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB8IG51bGwge1xuXHRpZiAob0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQpIHtcblx0XHRyZXR1cm4gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHJlZmVyZW5jZWQgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb0RhdGFNb2RlbFBhdGggVGhlIGRhdGEgbW9kZWwgcGF0aCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiBhIDEuLm4gbmF2aWdhdGlvblxuICovXG5leHBvcnQgY29uc3QgaXNNdWx0aVZhbHVlRmllbGQgPSBmdW5jdGlvbiAob0RhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgpOiBib29sZWFuIHtcblx0aWYgKG9EYXRhTW9kZWxQYXRoLm5hdmlnYXRpb25Qcm9wZXJ0aWVzPy5sZW5ndGgpIHtcblx0XHRjb25zdCBoYXNPbmVUb01hbnlOYXZpZ2F0aW9uID1cblx0XHRcdG9EYXRhTW9kZWxQYXRoPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoKG9OYXYpID0+IHtcblx0XHRcdFx0aWYgKG9OYXYuX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIgJiYgb05hdi5pc0NvbGxlY3Rpb24pIHtcblx0XHRcdFx0XHRpZiAob0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvL3dlIGNoZWNrIHRoZSBvbmUgdG8gbWFueSBuYXYgaXMgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgY29udGV4dFxuXHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0b0RhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uPy5uYXZpZ2F0aW9uUHJvcGVydGllcy5maW5kSW5kZXgoXG5cdFx0XHRcdFx0XHRcdFx0KG9Db250ZXh0TmF2KSA9PiBvQ29udGV4dE5hdi5uYW1lID09PSBvTmF2Lm5hbWVcblx0XHRcdFx0XHRcdFx0KSA9PT0gLTFcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pID4gLTE7XG5cdFx0aWYgKGhhc09uZVRvTWFueU5hdmlnYXRpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkFzT2JqZWN0ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdG9EYXRhRmllbGRDb252ZXJ0ZWQ/OiBhbnksXG5cdGZvcmNlRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZVxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0cmV0dXJuIGdldFJlcXVpcmVkRXhwcmVzc2lvbihvUHJvcGVydHlQYXRoLCBvRGF0YUZpZWxkQ29udmVydGVkLCBmb3JjZUVkaXRNb2RlLCB0cnVlKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogYW55LFxuXHRmb3JjZUVkaXRNb2RlOiBib29sZWFuID0gZmFsc2UsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRvUmVxdWlyZWRQcm9wZXJ0aWVzOiBhbnkgPSB7fSxcblx0ZGF0YU1vZGVsT2JqZWN0UGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGhcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgYVJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnMgPSBvUmVxdWlyZWRQcm9wZXJ0aWVzLnJlcXVpcmVkUHJvcGVydGllc0Zyb21JbnNlcnRSZXN0cmljdGlvbnM7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zO1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQoZmFsc2UpKTtcblx0fVxuXHRsZXQgcmVsYXRpdmVQYXRoO1xuXHRpZiAoZGF0YU1vZGVsT2JqZWN0UGF0aCkge1xuXHRcdHJlbGF0aXZlUGF0aCA9IGdldFJlbGF0aXZlUGF0aHMoZGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQodHJ1ZSk7XG5cdGlmIChvRGF0YUZpZWxkQ29udmVydGVkICE9PSBudWxsKSB7XG5cdFx0ZGF0YUZpZWxkUmVxdWlyZWRFeHByZXNzaW9uID0gaXNSZXF1aXJlZEV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCk7XG5cdH1cblx0bGV0IHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRsZXQgcmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudChmYWxzZSk7XG5cblx0Y29uc3Qgb1Byb3BlcnR5OiBQcm9wZXJ0eSA9IChpc1BhdGhFeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IHJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0Y29uc3QgZWRpdE1vZGUgPSBmb3JjZUVkaXRNb2RlIHx8IFVJLklzRWRpdGFibGU7XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucz8uaW5jbHVkZXMoKG9Qcm9wZXJ0eVBhdGggYXMgYW55KS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IGFuZChjb25zdGFudCh0cnVlKSwgVUkuSXNDcmVhdGVNb2RlKTtcblx0fVxuXHRpZiAoYVJlcXVpcmVkUHJvcGVydGllc0Zyb21VcGRhdGVSZXN0cmljdGlvbnM/LmluY2x1ZGVzKChvUHJvcGVydHlQYXRoIGFzIGFueSkubmFtZSkpIHtcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbVVwZGF0ZVJlc3RyaWN0aW9uc0V4cHJlc3Npb24gPSBhbmQoY29uc3RhbnQodHJ1ZSksIG5vdEVxdWFsKFVJLklzQ3JlYXRlTW9kZSwgdHJ1ZSkpO1xuXHR9XG5cdGNvbnN0IHJldHVybkV4cHJlc3Npb24gPSBvcihcblx0XHRhbmQob3IocmVxdWlyZWRFeHByZXNzaW9uLCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb24pLCBlZGl0TW9kZSksXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uLFxuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvblxuXHQpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIHJldHVybkV4cHJlc3Npb247XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHJldHVybkV4cHJlc3Npb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCA9IGZ1bmN0aW9uIChcblx0ZGF0YUZpZWxkT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBkYXRhID0gZGF0YUZpZWxkT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0Py4kdGFyZ2V0Py5EYXRhO1xuXHRjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdGNvbnN0IGRhdGFGaWVsZHMgPSBbXTtcblx0bGV0IHByb3BlcnR5UGF0aDtcblx0Y29uc3QgaXNSZXF1aXJlZEV4cHJlc3Npb25zOiAoQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pW10gfCB1bmRlZmluZWQgPSBbXTtcblx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdGlmIChkYXRhW2tleV1bXCIkVHlwZVwiXSAmJiBkYXRhW2tleV1bXCIkVHlwZVwiXS5pbmRleE9mKFwiRGF0YUZpZWxkXCIpID4gLTEpIHtcblx0XHRcdGRhdGFGaWVsZHMucHVzaChkYXRhW2tleV0pO1xuXHRcdH1cblx0fVxuXHRmb3IgKGNvbnN0IGRhdGFGaWVsZCBvZiBkYXRhRmllbGRzKSB7XG5cdFx0c3dpdGNoIChkYXRhRmllbGQuJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkOlxuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGg6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0XHRcdGlmIChkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVGFyZ2V0ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHR9XG5cdFx0aXNSZXF1aXJlZEV4cHJlc3Npb25zLnB1c2goZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QocHJvcGVydHlQYXRoLCBkYXRhRmllbGQsIGZhbHNlKSk7XG5cdH1cblx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKC4uLihpc1JlcXVpcmVkRXhwcmVzc2lvbnMgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10pKSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXlGTyxNQUFNQSxjQUFjLEdBQUcsVUFBVUMsb0JBQXlDLEVBQWU7SUFDL0YsT0FBT0Msb0JBQW9CLENBQUNGLGNBQWMsQ0FBQ0Msb0JBQW9CLENBQUNFLFlBQVksRUFBRUYsb0JBQW9CLENBQUM7RUFDcEcsQ0FBQztFQUFDO0VBQ0ssTUFBTUcsNkJBQTZCLEdBQUcsVUFDNUNDLGFBQXVDLEVBSUg7SUFBQSxJQUhwQ0MsbUJBQXdCLHVFQUFHLElBQUk7SUFBQSxJQUMvQkwsb0JBQXlDO0lBQUEsSUFDekNNLFVBQTZDLHVFQUFHQyxFQUFFLENBQUNDLFVBQVU7SUFFN0QsT0FBT0MscUJBQXFCLENBQzNCTCxhQUFhLEVBQ2JDLG1CQUFtQixFQUNuQkwsb0JBQW9CLEVBQ3BCLElBQUksRUFDSk0sVUFBVSxDQUNWO0VBQ0YsQ0FBQztFQUFDO0VBUUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxNQUFNRyxxQkFBcUIsR0FBRyxVQUNwQ0wsYUFBdUMsRUFLZ0M7SUFBQSxJQUp2RUMsbUJBQXdCLHVFQUFHLElBQUk7SUFBQSxJQUMvQkwsb0JBQXlDO0lBQUEsSUFDekNVLFNBQWtCLHVFQUFHLEtBQUs7SUFBQSxJQUMxQkosVUFBNkMsdUVBQUdDLEVBQUUsQ0FBQ0MsVUFBVTtJQUU3RCxJQUFJLENBQUNKLGFBQWEsSUFBSSxPQUFPQSxhQUFhLEtBQUssUUFBUSxF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
|
|
504
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXREaXNwbGF5TW9kZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwiRGlzcGxheU1vZGVGb3JtYXR0ZXIiLCJ0YXJnZXRPYmplY3QiLCJnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCIsIm9Qcm9wZXJ0eVBhdGgiLCJvRGF0YUZpZWxkQ29udmVydGVkIiwiaXNFZGl0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zIiwiZ2V0RWRpdGFibGVFeHByZXNzaW9uIiwiYkFzT2JqZWN0IiwiY29tcGlsZUV4cHJlc3Npb24iLCJkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24iLCJjb25zdGFudCIsImlmRWxzZSIsImlzTm9uRWRpdGFibGVFeHByZXNzaW9uIiwib1Byb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwicmVsYXRpdmVQYXRoIiwiZ2V0UmVsYXRpdmVQYXRocyIsImlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24iLCJpc1BhdGhVcGRhdGFibGUiLCJwcm9wZXJ0eVBhdGgiLCJwYXRoVmlzaXRvciIsInBhdGgiLCJuYXZpZ2F0aW9uUGF0aHMiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImNvbnZlcnRlZFR5cGVzIiwiZWRpdGFibGVFeHByZXNzaW9uIiwib3IiLCJhbmQiLCJub3QiLCJpc0NvbXB1dGVkIiwiaXNLZXkiLCJpc0ltbXV0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsImdldENvbGxhYm9yYXRpb25FeHByZXNzaW9uIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImZvcm1hdHRlciIsIm9iamVjdFBhdGgiLCJnZXRUYXJnZXRPYmplY3RQYXRoIiwiYWN0aXZpdHlFeHByZXNzaW9uIiwicGF0aEluTW9kZWwiLCJrZXlzIiwidGFyZ2V0RW50aXR5VHlwZSIsImtleXNFeHByZXNzaW9ucyIsImZvckVhY2giLCJrZXkiLCJrZXlFeHByZXNzaW9uIiwibmFtZSIsInB1c2giLCJmb3JtYXRSZXN1bHQiLCJnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0IiwiZ2V0RW5hYmxlZEV4cHJlc3Npb24iLCJkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiIsImlzRGlzYWJsZWRFeHByZXNzaW9uIiwiZW5hYmxlZEV4cHJlc3Npb24iLCJnZXRFZGl0TW9kZSIsIm1lYXN1cmVSZWFkT25seSIsImFzT2JqZWN0IiwiZGF0YUZpZWxkQ29udmVydGVkIiwiJFR5cGUiLCJFZGl0TW9kZSIsIkRpc3BsYXkiLCJwcm9wZXJ0eSIsImFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJ1bml0UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwicmVzdWx0RXhwcmVzc2lvbiIsIkVkaXRhYmxlIiwiaXNVbml0UmVhZE9ubHkiLCJpc1JlYWRPbmx5RXhwcmVzc2lvbiIsImlzQ29uc3RhbnQiLCJFZGl0YWJsZVJlYWRPbmx5IiwiRWRpdGFibGVEaXNwbGF5IiwicmVhZE9ubHlFeHByZXNzaW9uIiwiZWRpdE1vZGVFeHByZXNzaW9uIiwiUmVhZE9ubHkiLCJEaXNhYmxlZCIsImhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0Iiwib1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aCIsIm9Qcm9wZXJ0eURlZmluaXRpb24iLCJjdXJyZW5jeSIsImFubm90YXRpb25zIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIm1lYXN1cmUiLCJVbml0IiwiaXNUcnV0aHkiLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJJc1RvdGFsIiwiaWZVbml0RWRpdGFibGUiLCJzRWRpdGFibGVWYWx1ZSIsInNOb25FZGl0YWJsZVZhbHVlIiwiZ2V0RmllbGREaXNwbGF5Iiwic1RhcmdldERpc3BsYXlNb2RlIiwib0NvbXB1dGVkRWRpdE1vZGUiLCJoYXNWYWx1ZUhlbHAiLCJlcXVhbCIsImdldFR5cGVDb25maWciLCJkYXRhVHlwZSIsIm9UYXJnZXRNYXBwaW5nIiwiRURNX1RZUEVfTUFQUElORyIsInR5cGUiLCJ1bmRlZmluZWQiLCJwcm9wZXJ0eVR5cGVDb25maWciLCJjb25zdHJhaW50cyIsImZvcm1hdE9wdGlvbnMiLCJpc1Byb3BlcnR5Iiwic2NhbGUiLCIkU2NhbGUiLCJwcmVjaXNpb24iLCIkUHJlY2lzaW9uIiwibWF4TGVuZ3RoIiwiJE1heExlbmd0aCIsIm51bGxhYmxlIiwiJE51bGxhYmxlIiwibWluaW11bSIsImlzTmFOIiwiVmFsaWRhdGlvbiIsIk1pbmltdW0iLCJtYXhpbXVtIiwiTWF4aW11bSIsImlzRGlnaXRTZXF1ZW5jZSIsIkNvbW1vbiIsIklzRGlnaXRTZXF1ZW5jZSIsIlY0IiwiJFY0IiwicGFyc2VBc1N0cmluZyIsImluZGV4T2YiLCJlbXB0eVN0cmluZyIsInBhcnNlS2VlcHNFbXB0eVN0cmluZyIsImdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kiLCJvUHJvcGVydHlEYXRhTW9kZWxQYXRoIiwicHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiIsImlnbm9yZVVuaXRDb25zdHJhaW50IiwidW5pdCIsInJlbGF0aXZlTG9jYXRpb24iLCJmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uIiwidG9TdHJpbmciLCJzaG93TWVhc3VyZSIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFdpdGhQZXJjZW50YWdlIiwiY29tcGxleFR5cGUiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJhZGRUeXBlSW5mb3JtYXRpb24iLCJnZXRCaW5kaW5nRm9yVW5pdE9yQ3VycmVuY3kiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwic2hvd051bWJlciIsImdldEJpbmRpbmdXaXRoVGltZXpvbmUiLCJoaWRlVGltZXpvbmVGb3JFbXB0eVZhbHVlcyIsImRhdGVGb3JtYXRPcHRpb25zIiwidGltZXpvbmUiLCJUaW1lem9uZSIsInNob3dUaW1lem9uZUZvckVtcHR5VmFsdWVzIiwic2hvd1RpbWUiLCJzaG93RGF0ZSIsInNob3dUaW1lem9uZSIsImdldEFsaWdubWVudEV4cHJlc3Npb24iLCJzQWxpZ25EaXNwbGF5Iiwic0FsaWduRWRpdCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvQ29udGV4dCIsIm9JbnRlcmZhY2UiLCJjb250ZXh0IiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJyZXF1aXJlc0lDb250ZXh0IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzTXVsdGlWYWx1ZUZpZWxkIiwib0RhdGFNb2RlbFBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsImxlbmd0aCIsImhhc09uZVRvTWFueU5hdmlnYXRpb24iLCJmaW5kSW5kZXgiLCJvTmF2IiwiaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSIsImNvbnRleHRMb2NhdGlvbiIsIm9Db250ZXh0TmF2IiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uQXNPYmplY3QiLCJmb3JjZUVkaXRNb2RlIiwiZ2V0UmVxdWlyZWRFeHByZXNzaW9uIiwib1JlcXVpcmVkUHJvcGVydGllcyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbUluc2VydFJlc3RyaWN0aW9ucyIsImFSZXF1aXJlZFByb3BlcnRpZXNGcm9tVXBkYXRlUmVzdHJpY3Rpb25zIiwicmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyIsImRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uIiwicmVxdWlyZWRFeHByZXNzaW9uIiwiZWRpdE1vZGUiLCJpbmNsdWRlcyIsIklzQ3JlYXRlTW9kZSIsIm5vdEVxdWFsIiwicmV0dXJuRXhwcmVzc2lvbiIsImdldFJlcXVpcmVkRXhwcmVzc2lvbkZvckNvbm5lY3RlZERhdGFGaWVsZCIsImRhdGFGaWVsZE9iamVjdFBhdGgiLCJkYXRhIiwiRGF0YSIsIk9iamVjdCIsImRhdGFGaWVsZHMiLCJpc1JlcXVpcmVkRXhwcmVzc2lvbnMiLCJkYXRhRmllbGQiLCJWYWx1ZSIsIlRhcmdldCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVUlGb3JtYXR0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBzaW5nbGV0b25QYXRoVmlzaXRvciwgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0LCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhZGRUeXBlSW5mb3JtYXRpb24sXG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRFRE1fVFlQRV9NQVBQSU5HLFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uLFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0bm90RXF1YWwsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgaXNNdWx0aXBsZU5hdmlnYXRpb25Qcm9wZXJ0eSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24sIGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoLFxuXHRnZXRSZWxhdGl2ZVBhdGhzLFxuXHRnZXRUYXJnZXRPYmplY3RQYXRoLFxuXHRpc1BhdGhVcGRhdGFibGVcbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0ICogYXMgRGlzcGxheU1vZGVGb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGlzcGxheU1vZGVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7XG5cdGlzRGlzYWJsZWRFeHByZXNzaW9uLFxuXHRpc05vbkVkaXRhYmxlRXhwcmVzc2lvbixcblx0aXNSZWFkT25seUV4cHJlc3Npb24sXG5cdGlzUmVxdWlyZWRFeHByZXNzaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHtcblx0Z2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksXG5cdGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksXG5cdGhhc1ZhbHVlSGVscCxcblx0aXNDb21wdXRlZCxcblx0aXNJbW11dGFibGUsXG5cdGlzS2V5XG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bS9FZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcblxuLy8gSW1wb3J0LWV4cG9ydCBtZXRob2QgdXNlZCBieSB0aGUgY29udmVydGVyIHRvIHVzZSB0aGVtIGluIHRoZSB0ZW1wbGF0aW5nIHRocm91Z2ggdGhlIFVJRm9ybWF0dGVycy5cbmV4cG9ydCB0eXBlIERpc3BsYXlNb2RlID0gRGlzcGxheU1vZGVGb3JtYXR0ZXIuRGlzcGxheU1vZGU7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5T3JQYXRoPFA+ID0gc3RyaW5nIHwgUCB8IFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxQPjtcbmV4cG9ydCB0eXBlIE1ldGFNb2RlbENvbnRleHQgPSB7XG5cdCRraW5kOiBzdHJpbmc7XG5cdCRUeXBlOiBzdHJpbmc7XG5cdCROdWxsYWJsZT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIHN0cnVjdHVyZSByZXR1cm5lZCBieSB0aGUgT0RhdGFNZXRhTW9kZWwgd2hlbiB1c2luZyB0aGUgQEAgb3BlcmF0b3IgaW4gWE1MIHRlbXBsYXRlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlID0ge1xuXHRjb250ZXh0OiBDb250ZXh0O1xuXHRhcmd1bWVudHM/OiBhbnlbXTtcblx0JCR2YWx1ZUFzUHJvbWlzZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlQ29uc3RyYWludHMgPSB7XG5cdHNjYWxlPzogbnVtYmVyO1xuXHRwcmVjaXNpb24/OiBudW1iZXI7XG5cdG1heExlbmd0aD86IG51bWJlcjtcblx0bnVsbGFibGU/OiBib29sZWFuO1xuXHRtaW5pbXVtPzogc3RyaW5nO1xuXHRtYXhpbXVtPzogc3RyaW5nO1xuXHRpc0RpZ2l0U2VxdWVuY2U/OiBib29sZWFuO1xuXHRWND86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBjb25maWdUeXBlZm9ybWF0T3B0aW9ucyA9IHtcblx0cGFyc2VBc1N0cmluZz86IGJvb2xlYW47XG5cdGVtcHR5U3RyaW5nPzogc3RyaW5nO1xuXHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgY29uZmlnVHlwZSA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRjb25zdHJhaW50czogY29uZmlnVHlwZUNvbnN0cmFpbnRzO1xuXHRmb3JtYXRPcHRpb25zOiBjb25maWdUeXBlZm9ybWF0T3B0aW9ucztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5TW9kZSA9IGZ1bmN0aW9uIChvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCk6IERpc3BsYXlNb2RlIHtcblx0cmV0dXJuIERpc3BsYXlNb2RlRm9ybWF0dGVyLmdldERpc3BsYXlNb2RlKG9EYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdCwgb0RhdGFNb2RlbE9iamVjdFBhdGgpO1xufTtcbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkOiBhbnkgPSBudWxsLFxuXHRvRGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0aXNFZGl0YWJsZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gVUkuSXNFZGl0YWJsZSxcblx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnM6IGJvb2xlYW4gPSB0cnVlXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0RWRpdGFibGVFeHByZXNzaW9uKFxuXHRcdG9Qcm9wZXJ0eVBhdGgsXG5cdFx0b0RhdGFGaWVsZENvbnZlcnRlZCxcblx0XHRvRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0XHR0cnVlLFxuXHRcdGlzRWRpdGFibGUsXG5cdFx0Y29uc2lkZXJVcGRhdGVSZXN0cmljdGlvbnNcblx0KSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG59O1xuXG5leHBvcnQgdHlwZSBkYXRlRm9ybWF0T3B0aW9ucyA9IHtcblx0c2hvd0RhdGU6IHN0cmluZztcblx0c2hvd1RpbWU6IHN0cmluZztcblx0c2hvd1RpbWV6b25lOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRhYmxlXCIgQm9vbGVhbiB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gb1Byb3BlcnR5UGF0aCBUaGUgaW5wdXQgcHJvcGVydHlcbiAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udmVydGVkIFRoZSBEYXRhRmllbGRDb252ZXJ0ZWQgb2JqZWN0IHRvIHJlYWQgdGhlIGZpZWxkQ29udHJvbCBhbm5vdGF0aW9uXG4gKiBAcGFyYW0gb0RhdGFNb2RlbE9iamVjdFBhdGggVGhlIHBhdGggdG8gdGhpcyBwcm9wZXJ0eSBvYmplY3RcbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBpc0VkaXRhYmxlIFdoZXRoZXIgb3Igbm90IFVJLklzRWRpdGFibGUgYmUgY29uc2lkZXJlZC5cbiAqIEBwYXJhbSBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucyBXaGV0aGVyIHdlIHdhbnQgdG8gdGFrZSBpbnRvIGFjY291bnQgVXBkYXRlUmVzdHJpY3Rpb25zIHRvIGNvbXB1dGUgdGhlIGVkaXRhYmxlXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgcHJvcGVydHkgaXMgZWRpdGFibGUgb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0YWJsZUV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZDogYW55ID0gbnVsbCxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGJBc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRpc0VkaXRhYmxlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBVSS5Jc0VkaXRhYmxlLFxuXHRjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9uczogYm9vbGVhbiA9IHRydWVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZhbHNlKTtcblx0fVxuXHRsZXQgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRFZGl0YWJsZUV4cHJlc3Npb24gPSBpZkVsc2UoaXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob0RhdGFGaWVsZENvbnZlcnRlZCksIGZhbHNlLCBpc0VkaXRhYmxlKTtcblx0fVxuXG5cdGNvbnN0IG9Qcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpID8gb1Byb3BlcnR5UGF0aC4kdGFyZ2V0IDogb1Byb3BlcnR5UGF0aDtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdC8vIEVkaXRhYmlsaXR5IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIFJlYWRPbmx5IG9yIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgYSBrZXkgLT4gbm90IGVkaXRhYmxlIGV4Y2VwdCBpbiBjcmVhdGlvbiBpZiBub3QgY29tcHV0ZWRcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGNvbXB1dGVkIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHVwZGF0YWJsZSAtPiBub3QgZWRpdGFibGVcblx0Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGltbXV0YWJsZSAtPiBub3QgZWRpdGFibGUgZXhjZXB0IGluIGNyZWF0aW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIGEgcGF0aCByZXNvbHZpbmcgdG8gUmVhZE9ubHkgb3IgSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgKDw9IDEpIC0+IG5vdCBlZGl0YWJsZVxuXHQvLyBFbHNlLCB0byBiZSBlZGl0YWJsZSB5b3UgbmVlZFxuXHQvLyBpbW11dGFibGUgYW5kIGtleSB3aGlsZSBpbiB0aGUgY3JlYXRpb24gcm93XG5cdC8vIHVpL2lzRWRpdGFibGVcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiA9IGlzUGF0aFVwZGF0YWJsZShvRGF0YU1vZGVsT2JqZWN0UGF0aCwge1xuXHRcdHByb3BlcnR5UGF0aDogb1Byb3BlcnR5UGF0aCxcblx0XHRwYXRoVmlzaXRvcjogKHBhdGg6IHN0cmluZywgbmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSkgPT5cblx0XHRcdHNpbmdsZXRvblBhdGhWaXNpdG9yKHBhdGgsIG9EYXRhTW9kZWxPYmplY3RQYXRoLmNvbnZlcnRlZFR5cGVzLCBuYXZpZ2F0aW9uUGF0aHMpXG5cdH0pO1xuXHRpZiAoY29tcGlsZUV4cHJlc3Npb24oaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbikgPT09IFwiZmFsc2VcIiAmJiBjb25zaWRlclVwZGF0ZVJlc3RyaWN0aW9ucykge1xuXHRcdHJldHVybiBiQXNPYmplY3QgPyBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uIDogXCJmYWxzZVwiO1xuXHR9XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGlmRWxzZShcblx0XHRvcihcblx0XHRcdGFuZChub3QoaXNQYXRoVXBkYXRhYmxlRXhwcmVzc2lvbiksIGNvbnNpZGVyVXBkYXRlUmVzdHJpY3Rpb25zKSxcblx0XHRcdGlzQ29tcHV0ZWQob1Byb3BlcnR5KSxcblx0XHRcdGlzS2V5KG9Qcm9wZXJ0eSksXG5cdFx0XHRpc0ltbXV0YWJsZShvUHJvcGVydHkpLFxuXHRcdFx0aXNOb25FZGl0YWJsZUV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpXG5cdFx0KSxcblx0XHRpZkVsc2Uob3IoaXNDb21wdXRlZChvUHJvcGVydHkpLCBpc05vbkVkaXRhYmxlRXhwcmVzc2lvbihvUHJvcGVydHksIHJlbGF0aXZlUGF0aCkpLCBmYWxzZSwgVUkuSXNUcmFuc2llbnRCaW5kaW5nKSxcblx0XHRpc0VkaXRhYmxlXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGVkaXRhYmxlRXhwcmVzc2lvbiwgZGF0YUZpZWxkRWRpdGFibGVFeHByZXNzaW9uKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGFib3JhdGlvbkV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdGZvcm1hdHRlcjogYW55XG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PiB7XG5cdGNvbnN0IG9iamVjdFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBhY3Rpdml0eUV4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChgL2NvbGxhYm9yYXRpb24vYWN0aXZpdGllcyR7b2JqZWN0UGF0aH1gLCBcImludGVybmFsXCIpO1xuXHRjb25zdCBrZXlzID0gZGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZT8ua2V5cztcblx0Y29uc3Qga2V5c0V4cHJlc3Npb25zOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248YW55PltdID0gW107XG5cdGtleXM/LmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGNvbnN0IGtleUV4cHJlc3Npb24gPSBwYXRoSW5Nb2RlbChrZXkubmFtZSk7XG5cdFx0a2V5c0V4cHJlc3Npb25zLnB1c2goa2V5RXhwcmVzc2lvbik7XG5cdH0pO1xuXHRyZXR1cm4gZm9ybWF0UmVzdWx0KFthY3Rpdml0eUV4cHJlc3Npb24sIC4uLmtleXNFeHByZXNzaW9uc10sIGZvcm1hdHRlcik7XG59O1xuZXhwb3J0IGNvbnN0IGdldEVuYWJsZWRFeHByZXNzaW9uQXNPYmplY3QgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0b0RhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRyZXR1cm4gZ2V0RW5hYmxlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgdHJ1ZSwgb0RhdGFNb2RlbE9iamVjdFBhdGgpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcbn07XG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVuYWJsZWRcIiBCb29sZWFuIHZhbHVlLlxuICpcbiAqIEBwYXJhbSBvUHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIG9EYXRhRmllbGRDb252ZXJ0ZWQgVGhlIERhdGFGaWVsZENvbnZlcnRlZCBPYmplY3QgdG8gcmVhZCB0aGUgZmllbGRDb250cm9sIGFubm90YXRpb25cbiAqIEBwYXJhbSBiQXNPYmplY3QgV2hldGhlciBvciBub3QgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IG9yIGEgYmluZGluZyBzdHJpbmdcbiAqIEBwYXJhbSBvRGF0YU1vZGVsT2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiB0byBkZXRlcm1pbmUgaWYgYSBwcm9wZXJ0eSBpcyBlbmFibGVkIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgZ2V0RW5hYmxlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0YkFzT2JqZWN0ID0gZmFsc2UsXG5cdG9EYXRhTW9kZWxPYmplY3RQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRpZiAoIW9Qcm9wZXJ0eVBhdGggfHwgdHlwZW9mIG9Qcm9wZXJ0eVBhdGggPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24odHJ1ZSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKG9EYXRhTW9kZWxPYmplY3RQYXRoKSB7XG5cdFx0cmVsYXRpdmVQYXRoID0gZ2V0UmVsYXRpdmVQYXRocyhvRGF0YU1vZGVsT2JqZWN0UGF0aCk7XG5cdH1cblx0bGV0IGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4gPSBjb25zdGFudCh0cnVlKTtcblx0aWYgKG9EYXRhRmllbGRDb252ZXJ0ZWQgIT09IG51bGwpIHtcblx0XHRkYXRhRmllbGRFbmFibGVkRXhwcmVzc2lvbiA9IGlmRWxzZShpc0Rpc2FibGVkRXhwcmVzc2lvbihvRGF0YUZpZWxkQ29udmVydGVkKSwgZmFsc2UsIHRydWUpO1xuXHR9XG5cblx0Y29uc3Qgb1Byb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgPyBvUHJvcGVydHlQYXRoLiR0YXJnZXQgOiBvUHJvcGVydHlQYXRoO1xuXHQvLyBFbmFibGVtZW50IGRlcGVuZHMgb24gdGhlIGZpZWxkIGNvbnRyb2wgZXhwcmVzc2lvblxuXHQvLyBJZiB0aGUgRmllbGQgY29udHJvbCBpcyBzdGF0aWNhbGx5IGluIEluYXBwbGljYWJsZSAoZGlzYWJsZWQpIC0+IG5vdCBlbmFibGVkXG5cdGNvbnN0IGVuYWJsZWRFeHByZXNzaW9uID0gaWZFbHNlKGlzRGlzYWJsZWRFeHByZXNzaW9uKG9Qcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKSwgZmFsc2UsIHRydWUpO1xuXHRpZiAoYkFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFuZChlbmFibGVkRXhwcmVzc2lvbiwgZGF0YUZpZWxkRW5hYmxlZEV4cHJlc3Npb24pO1xuXHR9XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihhbmQoZW5hYmxlZEV4cHJlc3Npb24sIGRhdGFGaWVsZEVuYWJsZWRFeHByZXNzaW9uKSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSBhbiBcImVkaXRNb2RlXCIgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoIFRoZSBpbnB1dCBwcm9wZXJ0eVxuICogQHBhcmFtIGRhdGFNb2RlbE9iamVjdFBhdGggVGhlIGxpc3Qgb2YgZGF0YSBtb2RlbCBvYmplY3RzIHRoYXQgYXJlIGludm9sdmVkIHRvIHJlYWNoIHRoYXQgcHJvcGVydHlcbiAqIEBwYXJhbSBtZWFzdXJlUmVhZE9ubHkgV2hldGhlciB3ZSBzaG91bGQgc2V0IFVvTSAvIGN1cnJlbmN5IGZpZWxkIG1vZGUgdG8gcmVhZCBvbmx5XG4gKiBAcGFyYW0gYXNPYmplY3QgV2hldGhlciB3ZSBzaG91bGQgcmV0dXJuIHRoaXMgYXMgYW4gZXhwcmVzc2lvbiBvciBhcyBhIHN0cmluZ1xuICogQHBhcmFtIGRhdGFGaWVsZENvbnZlcnRlZCBUaGUgZGF0YUZpZWxkIG9iamVjdFxuICogQHBhcmFtIGlzRWRpdGFibGUgV2hldGhlciBvciBub3QgVUkuSXNFZGl0YWJsZSBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgcHJvcGVydHkgZWRpdCBtb2RlLCBjb21wbGlhbnQgd2l0aCB0aGUgTURDIEZpZWxkIGRlZmluaXRpb24gb2YgZWRpdE1vZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRFZGl0TW9kZSA9IGZ1bmN0aW9uIChcblx0cHJvcGVydHlQYXRoOiBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdG1lYXN1cmVSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlLFxuXHRhc09iamVjdDogYm9vbGVhbiA9IGZhbHNlLFxuXHRkYXRhRmllbGRDb252ZXJ0ZWQ6IGFueSA9IG51bGwsXG5cdGlzRWRpdGFibGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IFVJLklzRWRpdGFibGVcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHwgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4ge1xuXHRpZiAoIXByb3BlcnR5UGF0aCB8fCB0eXBlb2YgcHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiIHx8IGRhdGFGaWVsZENvbnZlcnRlZD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCkge1xuXHRcdHJldHVybiBFZGl0TW9kZS5EaXNwbGF5O1xuXHR9XG5cdGNvbnN0IHByb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ocHJvcGVydHlQYXRoKSA/IHByb3BlcnR5UGF0aC4kdGFyZ2V0IDogcHJvcGVydHlQYXRoO1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRjb25zdCBpc1BhdGhVcGRhdGFibGVFeHByZXNzaW9uID0gaXNQYXRoVXBkYXRhYmxlKGRhdGFNb2RlbE9iamVjdFBhdGgsIHtcblx0XHRwcm9wZXJ0eVBhdGg6IHByb3BlcnR5LFxuXHRcdHBhdGhWaXNpdG9yOiAocGF0aDogc3RyaW5nLCBuYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKSA9PlxuXHRcdFx0c2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgZGF0YU1vZGVsT2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblxuXHQvLyB3ZSBnZXQgdGhlIGVkaXRhYmxlIEV4cHJlc3Npb24gd2l0aG91dCBjb25zaWRlcmluZyB1cGRhdGUgUmVzdHJpY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5XG5cdGNvbnN0IGVkaXRhYmxlRXhwcmVzc2lvbiA9IGdldEVkaXRhYmxlRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoLCBpc0VkaXRhYmxlLCBmYWxzZSk7XG5cblx0Y29uc3QgZW5hYmxlZEV4cHJlc3Npb24gPSBnZXRFbmFibGVkRXhwcmVzc2lvbkFzT2JqZWN0KHByb3BlcnR5UGF0aCwgZGF0YUZpZWxkQ29udmVydGVkLCBkYXRhTW9kZWxPYmplY3RQYXRoKTtcblx0Y29uc3QgYXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkocHJvcGVydHkpO1xuXHRsZXQgcmVzdWx0RXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSBjb25zdGFudChFZGl0TW9kZS5FZGl0YWJsZSk7XG5cdGlmICh1bml0UHJvcGVydHkpIHtcblx0XHRjb25zdCBpc1VuaXRSZWFkT25seSA9IGlzUmVhZE9ubHlFeHByZXNzaW9uKHVuaXRQcm9wZXJ0eSwgcmVsYXRpdmVQYXRoKTtcblx0XHRyZXN1bHRFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdFx0b3IoaXNVbml0UmVhZE9ubHksIGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSwgYW5kKGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSksIG5vdChVSS5Jc1RyYW5zaWVudEJpbmRpbmcpKSwgbWVhc3VyZVJlYWRPbmx5KSxcblx0XHRcdGlmRWxzZSghaXNDb25zdGFudChpc1VuaXRSZWFkT25seSkgJiYgaXNVbml0UmVhZE9ubHksIEVkaXRNb2RlLkVkaXRhYmxlUmVhZE9ubHksIEVkaXRNb2RlLkVkaXRhYmxlRGlzcGxheSksXG5cdFx0XHRFZGl0TW9kZS5FZGl0YWJsZVxuXHRcdCk7XG5cdH1cblx0Y29uc3QgcmVhZE9ubHlFeHByZXNzaW9uID0gb3IoaXNSZWFkT25seUV4cHJlc3Npb24ocHJvcGVydHksIHJlbGF0aXZlUGF0aCksIGlzUmVhZE9ubHlFeHByZXNzaW9uKGRhdGFGaWVsZENvbnZlcnRlZCkpO1xuXG5cdC8vIGlmIHRoZXJlIGFyZSB1cGRhdGUgUmVzdHJpY3Rpb25zIGl0IGlzIGFsd2F5cyBkaXNwbGF5IG1vZGVcblx0Y29uc3QgZWRpdE1vZGVFeHByZXNzaW9uID0gaWZFbHNlKFxuXHRcdG9yKGlzUGF0aFVwZGF0YWJsZUV4cHJlc3Npb24sIFVJLklzVHJhbnNpZW50QmluZGluZyksXG5cdFx0aWZFbHNlKFxuXHRcdFx0ZW5hYmxlZEV4cHJlc3Npb24sXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdGVkaXRhYmxlRXhwcmVzc2lvbixcblx0XHRcdFx0cmVzdWx0RXhwcmVzc2lvbixcblx0XHRcdFx0aWZFbHNlKGFuZCghaXNDb25zdGFudChyZWFkT25seUV4cHJlc3Npb24pICYmIHJlYWRPbmx5RXhwcmVzc2lvbiwgaXNFZGl0YWJsZSksIEVkaXRNb2RlLlJlYWRPbmx5LCBFZGl0TW9kZS5EaXNwbGF5KVxuXHRcdFx0KSxcblx0XHRcdGlmRWxzZShpc0VkaXRhYmxlLCBFZGl0TW9kZS5EaXNhYmxlZCwgRWRpdE1vZGUuRGlzcGxheSlcblx0XHQpLFxuXHRcdEVkaXRNb2RlLkRpc3BsYXlcblx0KTtcblx0aWYgKGFzT2JqZWN0KSB7XG5cdFx0cmV0dXJuIGVkaXRNb2RlRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oZWRpdE1vZGVFeHByZXNzaW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aFxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHlEZWZpbml0aW9uID0gb1Byb3BlcnR5RGF0YU1vZGVsT2JqZWN0UGF0aC50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdGNvbnN0IGN1cnJlbmN5ID0gb1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRjb25zdCBtZWFzdXJlID0gY3VycmVuY3kgPyBjdXJyZW5jeSA6IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAobWVhc3VyZSkge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihvcihpc1RydXRoeShnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24obWVhc3VyZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pLCBub3QoVUkuSXNUb3RhbCkpKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQodHJ1ZSkpO1xuXHR9XG59O1xuXG5leHBvcnQgY29uc3QgaWZVbml0RWRpdGFibGUgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0c0VkaXRhYmxlVmFsdWU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHwgc3RyaW5nLFxuXHRzTm9uRWRpdGFibGVWYWx1ZTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gfCBzdHJpbmdcbik6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0Y29uc3Qgb1Byb3BlcnR5ID0gKGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKG9Qcm9wZXJ0eVBhdGgpICYmIG9Qcm9wZXJ0eVBhdGguJHRhcmdldCkgfHwgKG9Qcm9wZXJ0eVBhdGggYXMgUHJvcGVydHkpO1xuXHRjb25zdCB1bml0UHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShvUHJvcGVydHkpIHx8IGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHkob1Byb3BlcnR5KTtcblx0aWYgKCF1bml0UHJvcGVydHkpIHtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oc05vbkVkaXRhYmxlVmFsdWUpO1xuXHR9XG5cdGNvbnN0IGlzVW5pdFJlYWRPbmx5ID0gaXNSZWFkT25seUV4cHJlc3Npb24odW5pdFByb3BlcnR5KTtcblx0Y29uc3QgZWRpdGFibGVFeHByZXNzaW9uID0gYW5kKFxuXHRcdG9yKCFpc0NvbnN0YW50KGlzVW5pdFJlYWRPbmx5KSwgbm90KGlzVW5pdFJlYWRPbmx5KSksXG5cdFx0bm90KGlzQ29tcHV0ZWQodW5pdFByb3BlcnR5KSksXG5cdFx0bm90KGlzSW1tdXRhYmxlKHVuaXRQcm9wZXJ0eSkpXG5cdCk7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZWRpdGFibGVFeHByZXNzaW9uLCBzRWRpdGFibGVWYWx1ZSwgc05vbkVkaXRhYmxlVmFsdWUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWVsZERpc3BsYXkgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0c1RhcmdldERpc3BsYXlNb2RlOiBzdHJpbmcsXG5cdG9Db21wdXRlZEVkaXRNb2RlOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRjb25zdCBvUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cblx0cmV0dXJuIGhhc1ZhbHVlSGVscChvUHJvcGVydHkpXG5cdFx0PyBjb21waWxlRXhwcmVzc2lvbihzVGFyZ2V0RGlzcGxheU1vZGUpXG5cdFx0OiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRWRpdGFibGVcIiksIFwiVmFsdWVcIiwgc1RhcmdldERpc3BsYXlNb2RlKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZUNvbmZpZyA9IGZ1bmN0aW9uIChvUHJvcGVydHk6IFByb3BlcnR5IHwgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcywgZGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGFueSB7XG5cdGNvbnN0IG9UYXJnZXRNYXBwaW5nID0gRURNX1RZUEVfTUFQUElOR1sob1Byb3BlcnR5IGFzIFByb3BlcnR5KT8udHlwZV0gfHwgKGRhdGFUeXBlID8gRURNX1RZUEVfTUFQUElOR1tkYXRhVHlwZV0gOiB1bmRlZmluZWQpO1xuXHRjb25zdCBwcm9wZXJ0eVR5cGVDb25maWc6IGNvbmZpZ1R5cGUgPSB7XG5cdFx0dHlwZTogb1RhcmdldE1hcHBpbmcudHlwZSxcblx0XHRjb25zdHJhaW50czoge30sXG5cdFx0Zm9ybWF0T3B0aW9uczoge31cblx0fTtcblx0aWYgKGlzUHJvcGVydHkob1Byb3BlcnR5KSkge1xuXHRcdHByb3BlcnR5VHlwZUNvbmZpZy5jb25zdHJhaW50cyA9IHtcblx0XHRcdHNjYWxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFNjYWxlID8gb1Byb3BlcnR5LnNjYWxlIDogdW5kZWZpbmVkLFxuXHRcdFx0cHJlY2lzaW9uOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJFByZWNpc2lvbiA/IG9Qcm9wZXJ0eS5wcmVjaXNpb24gOiB1bmRlZmluZWQsXG5cdFx0XHRtYXhMZW5ndGg6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kTWF4TGVuZ3RoID8gb1Byb3BlcnR5Lm1heExlbmd0aCA6IHVuZGVmaW5lZCxcblx0XHRcdG51bGxhYmxlOiBvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uJE51bGxhYmxlID8gb1Byb3BlcnR5Lm51bGxhYmxlIDogdW5kZWZpbmVkLFxuXHRcdFx0bWluaW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NaW5pbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1pbmltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0bWF4aW11bTpcblx0XHRcdFx0b1RhcmdldE1hcHBpbmcuY29uc3RyYWludHM/LltcIkBPcmcuT0RhdGEuVmFsaWRhdGlvbi5WMS5NYXhpbXVtLyREZWNpbWFsXCJdICYmXG5cdFx0XHRcdCFpc05hTihvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW0pXG5cdFx0XHRcdFx0PyBgJHtvUHJvcGVydHkuYW5ub3RhdGlvbnM/LlZhbGlkYXRpb24/Lk1heGltdW19YFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0aXNEaWdpdFNlcXVlbmNlOlxuXHRcdFx0XHRwcm9wZXJ0eVR5cGVDb25maWcudHlwZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5TdHJpbmdcIiAmJlxuXHRcdFx0XHRvVGFyZ2V0TWFwcGluZy5jb25zdHJhaW50cz8uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Jc0RpZ2l0U2VxdWVuY2VcIl0gJiZcblx0XHRcdFx0b1Byb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LklzRGlnaXRTZXF1ZW5jZVxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0VjQ6IG9UYXJnZXRNYXBwaW5nLmNvbnN0cmFpbnRzPy4kVjQgPyB0cnVlIDogdW5kZWZpbmVkXG5cdFx0fTtcblx0fVxuXHRwcm9wZXJ0eVR5cGVDb25maWcuZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRwYXJzZUFzU3RyaW5nOlxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuSW50XCIpID09PSAwIHx8XG5cdFx0XHRwcm9wZXJ0eVR5cGVDb25maWc/LnR5cGU/LmluZGV4T2YoXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5Eb3VibGVcIikgPT09IDBcblx0XHRcdFx0PyBmYWxzZVxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRlbXB0eVN0cmluZzpcblx0XHRcdHByb3BlcnR5VHlwZUNvbmZpZz8udHlwZT8uaW5kZXhPZihcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLkludFwiKSA9PT0gMCB8fFxuXHRcdFx0cHJvcGVydHlUeXBlQ29uZmlnPy50eXBlPy5pbmRleE9mKFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuRG91YmxlXCIpID09PSAwXG5cdFx0XHRcdD8gXCJcIlxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcblx0XHRwYXJzZUtlZXBzRW1wdHlTdHJpbmc6IHByb3BlcnR5VHlwZUNvbmZpZy50eXBlID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlN0cmluZ1wiID8gdHJ1ZSA6IHVuZGVmaW5lZFxuXHR9O1xuXHRyZXR1cm4gcHJvcGVydHlUeXBlQ29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJpbmRpbmdXaXRoVW5pdE9yQ3VycmVuY3kgPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGgsXG5cdHByb3BlcnR5QmluZGluZ0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRpZ25vcmVVbml0Q29uc3RyYWludD86IGJvb2xlYW4sXG5cdGZvcm1hdE9wdGlvbnM/OiBhbnlcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRjb25zdCByZWxhdGl2ZUxvY2F0aW9uID0gZ2V0UmVsYXRpdmVQYXRocyhvUHJvcGVydHlEYXRhTW9kZWxQYXRoKTtcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiA9IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24ob1Byb3BlcnR5RGVmaW5pdGlvbiwgcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbik7XG5cdGlmICh1bml0Py50b1N0cmluZygpID09PSBcIiVcIikge1xuXHRcdGlmIChmb3JtYXRPcHRpb25zPy5zaG93TWVhc3VyZSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gZm9ybWF0UmVzdWx0KFtwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uXSwgdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhQZXJjZW50YWdlKTtcblx0fVxuXHRjb25zdCBjb21wbGV4VHlwZSA9IHVuaXQgPyBcInNhcC51aS5tb2RlbC5vZGF0YS50eXBlLlVuaXRcIiA6IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuQ3VycmVuY3lcIjtcblx0dW5pdCA9IHVuaXQgPyB1bml0IDogKG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSBhcyBhbnkpO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPSAodW5pdCBhcyBhbnkpLiR0YXJnZXRcblx0XHQ/IGZvcm1hdFdpdGhUeXBlSW5mb3JtYXRpb24oXG5cdFx0XHRcdCh1bml0IGFzIGFueSkuJHRhcmdldCxcblx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKHVuaXQsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRcdFx0XHRpZ25vcmVVbml0Q29uc3RyYWludFxuXHRcdCAgKVxuXHRcdDogKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih1bml0LCByZWxhdGl2ZUxvY2F0aW9uKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPik7XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ0ZvclVuaXRPckN1cnJlbmN5ID0gZnVuY3Rpb24gKFxuXHRvUHJvcGVydHlEYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB8IHN0cmluZyB7XG5cdGNvbnN0IG9Qcm9wZXJ0eURlZmluaXRpb24gPSBvUHJvcGVydHlEYXRhTW9kZWxQYXRoLnRhcmdldE9iamVjdCBhcyBQcm9wZXJ0eTtcblxuXHRsZXQgdW5pdCA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRpZiAodW5pdD8udG9TdHJpbmcoKSA9PT0gXCIlXCIpIHtcblx0XHRyZXR1cm4gY29uc3RhbnQoXCIlXCIpO1xuXHR9XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXG5cdGNvbnN0IGNvbXBsZXhUeXBlID0gdW5pdCA/IFwic2FwLnVpLm1vZGVsLm9kYXRhLnR5cGUuVW5pdFwiIDogXCJzYXAudWkubW9kZWwub2RhdGEudHlwZS5DdXJyZW5jeVwiO1xuXHR1bml0ID0gdW5pdCA/IHVuaXQgOiAob1Byb3BlcnR5RGVmaW5pdGlvbi5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IGFzIGFueSk7XG5cdGNvbnN0IHVuaXRCaW5kaW5nRXhwcmVzc2lvbiA9ICh1bml0IGFzIGFueSkuJHRhcmdldFxuXHRcdD8gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihcblx0XHRcdFx0KHVuaXQgYXMgYW55KS4kdGFyZ2V0LFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5cblx0XHQgIClcblx0XHQ6IChnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odW5pdCwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pO1xuXG5cdGxldCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gcGF0aEluTW9kZWwoXG5cdFx0Z2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aChvUHJvcGVydHlEYXRhTW9kZWxQYXRoKVxuXHQpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+O1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uLCB0cnVlKTtcblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwge1xuXHRcdHBhcnNlS2VlcHNFbXB0eVN0cmluZzogdHJ1ZSxcblx0XHRlbXB0eVN0cmluZzogXCJcIixcblx0XHRzaG93TnVtYmVyOiBmYWxzZVxuXHR9KTtcbn07XG5leHBvcnQgY29uc3QgZ2V0QmluZGluZ1dpdGhUaW1lem9uZSA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5RGF0YU1vZGVsUGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCxcblx0cHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4sXG5cdGlnbm9yZVVuaXRDb25zdHJhaW50ID0gZmFsc2UsXG5cdGhpZGVUaW1lem9uZUZvckVtcHR5VmFsdWVzID0gZmFsc2UsXG5cdGRhdGVGb3JtYXRPcHRpb25zPzogZGF0ZUZvcm1hdE9wdGlvbnNcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+IHtcblx0Y29uc3Qgb1Byb3BlcnR5RGVmaW5pdGlvbiA9IG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgudGFyZ2V0T2JqZWN0IGFzIFByb3BlcnR5O1xuXHRjb25zdCB0aW1lem9uZSA9IG9Qcm9wZXJ0eURlZmluaXRpb24uYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGltZXpvbmU7XG5cdGNvbnN0IHJlbGF0aXZlTG9jYXRpb24gPSBnZXRSZWxhdGl2ZVBhdGhzKG9Qcm9wZXJ0eURhdGFNb2RlbFBhdGgpO1xuXHRwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uID0gZm9ybWF0V2l0aFR5cGVJbmZvcm1hdGlvbihvUHJvcGVydHlEZWZpbml0aW9uLCBwcm9wZXJ0eUJpbmRpbmdFeHByZXNzaW9uKTtcblxuXHRjb25zdCBjb21wbGV4VHlwZSA9IFwic2FwLmZlLmNvcmUudHlwZS5EYXRlVGltZVdpdGhUaW1lem9uZVwiO1xuXHRjb25zdCB1bml0QmluZGluZ0V4cHJlc3Npb24gPSAodGltZXpvbmUgYXMgYW55KS4kdGFyZ2V0XG5cdFx0PyBmb3JtYXRXaXRoVHlwZUluZm9ybWF0aW9uKFxuXHRcdFx0XHQodGltZXpvbmUgYXMgYW55KS4kdGFyZ2V0LFxuXHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24odGltZXpvbmUsIHJlbGF0aXZlTG9jYXRpb24pIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRcdFx0XHRpZ25vcmVVbml0Q29uc3RyYWludFxuXHRcdCAgKVxuXHRcdDogKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbih0aW1lem9uZSwgcmVsYXRpdmVMb2NhdGlvbikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4pO1xuXHRsZXQgZm9ybWF0T3B0aW9ucyA9IHt9O1xuXHRpZiAoaGlkZVRpbWV6b25lRm9yRW1wdHlWYWx1ZXMpIHtcblx0XHRmb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0c2hvd1RpbWV6b25lRm9yRW1wdHlWYWx1ZXM6IGZhbHNlXG5cdFx0fTtcblx0fVxuXG5cdGlmIChkYXRlRm9ybWF0T3B0aW9ucz8uc2hvd1RpbWUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lOiBkYXRlRm9ybWF0T3B0aW9ucy5zaG93VGltZSA9PT0gXCJmYWxzZVwiID8gZmFsc2UgOiB0cnVlIH0gfTtcblx0fVxuXHRpZiAoZGF0ZUZvcm1hdE9wdGlvbnM/LnNob3dEYXRlKSB7XG5cdFx0Zm9ybWF0T3B0aW9ucyA9IHsgLi4uZm9ybWF0T3B0aW9ucywgLi4ueyBzaG93RGF0ZTogZGF0ZUZvcm1hdE9wdGlvbnMuc2hvd0RhdGUgPT09IFwiZmFsc2VcIiA/IGZhbHNlIDogdHJ1ZSB9IH07XG5cdH1cblx0aWYgKGRhdGVGb3JtYXRPcHRpb25zPy5zaG93VGltZXpvbmUpIHtcblx0XHRmb3JtYXRPcHRpb25zID0geyAuLi5mb3JtYXRPcHRpb25zLCAuLi57IHNob3dUaW1lem9uZTogZGF0ZUZvcm1hdE9wdGlvbnMuc2hvd1RpbWV6b25lID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHRydWUgfSB9O1xuXHR9XG5cblx0cmV0dXJuIGFkZFR5cGVJbmZvcm1hdGlvbihbcHJvcGVydHlCaW5kaW5nRXhwcmVzc2lvbiwgdW5pdEJpbmRpbmdFeHByZXNzaW9uXSwgY29tcGxleFR5cGUsIHVuZGVmaW5lZCwgZm9ybWF0T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiA9IGZ1bmN0aW9uIChcblx0b0NvbXB1dGVkRWRpdE1vZGU6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+LFxuXHRzQWxpZ25EaXNwbGF5OiBzdHJpbmcgPSBcIkJlZ2luXCIsXG5cdHNBbGlnbkVkaXQ6IHN0cmluZyA9IFwiQmVnaW5cIlxuKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfCBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPiB7XG5cdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UoZXF1YWwob0NvbXB1dGVkRWRpdE1vZGUsIFwiRGlzcGxheVwiKSwgc0FsaWduRGlzcGxheSwgc0FsaWduRWRpdCkpO1xufTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBjb252ZXJ0ZXJDb250ZXh0IGZyb20gdGhlIG1ldGFtb2RlbCBjb250ZXh0LlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgb3JpZ2luYWwgbWV0YW1vZGVsIGNvbnRleHRcbiAqIEBwYXJhbSBvSW50ZXJmYWNlIFRoZSBjdXJyZW50IHRlbXBsYXRpbmcgY29udGV4dFxuICogQHJldHVybnMgVGhlIENvbnZlcnRlckNvbnRleHQgcmVwcmVzZW50aW5nIHRoYXQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0ID0gZnVuY3Rpb24gKG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBvYmplY3QgfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KG9JbnRlcmZhY2UuY29udGV4dCk7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuZ2V0Q29udmVydGVyQ29udGV4dC5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcblxuLyoqXG4gKiBGb3JtYXR0ZXIgaGVscGVyIHRvIHJldHJpZXZlIHRoZSBkYXRhIG1vZGVsIG9iamVjdHMgdGhhdCBhcmUgaW52b2x2ZWQgZnJvbSB0aGUgbWV0YW1vZGVsIGNvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBvcmlnaW5hbCBPRGF0YU1ldGFNb2RlbCBjb250ZXh0XG4gKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgY3VycmVudCB0ZW1wbGF0aW5nIGNvbnRleHRcbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVudGl0eXNldHMgYW5kIG5hdnByb3BlcnRpZXMgdGhhdCBhcmUgaW52b2x2ZWQgdG8gZ2V0IHRvIGEgc3BlY2lmaWMgb2JqZWN0IGluIHRoZSBtZXRhbW9kZWxcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGggPSBmdW5jdGlvbiAoXG5cdG9Db250ZXh0OiBNZXRhTW9kZWxDb250ZXh0LFxuXHRvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2Vcbik6IERhdGFNb2RlbE9iamVjdFBhdGggfCBudWxsIHtcblx0aWYgKG9JbnRlcmZhY2UgJiYgb0ludGVyZmFjZS5jb250ZXh0KSB7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvSW50ZXJmYWNlLmNvbnRleHQpO1xuXHR9XG5cdHJldHVybiBudWxsO1xufTtcbmdldERhdGFNb2RlbE9iamVjdFBhdGgucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSByZWZlcmVuY2VkIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb24uXG4gKlxuICogQHBhcmFtIG9EYXRhTW9kZWxQYXRoIFRoZSBkYXRhIG1vZGVsIHBhdGggdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHByb3BlcnR5IGlzIHBhcnQgb2YgYSAxLi5uIG5hdmlnYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGlzTXVsdGlWYWx1ZUZpZWxkID0gZnVuY3Rpb24gKG9EYXRhTW9kZWxQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoKTogYm9vbGVhbiB7XG5cdGlmIChvRGF0YU1vZGVsUGF0aC5uYXZpZ2F0aW9uUHJvcGVydGllcz8ubGVuZ3RoKSB7XG5cdFx0Y29uc3QgaGFzT25lVG9NYW55TmF2aWdhdGlvbiA9XG5cdFx0XHRvRGF0YU1vZGVsUGF0aD8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KChvTmF2KSA9PiB7XG5cdFx0XHRcdGlmIChpc011bHRpcGxlTmF2aWdhdGlvblByb3BlcnR5KG9OYXYpKSB7XG5cdFx0XHRcdFx0aWYgKG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Ly93ZSBjaGVjayB0aGUgb25lIHRvIG1hbnkgbmF2IGlzIG5vdCBhbHJlYWR5IHBhcnQgb2YgdGhlIGNvbnRleHRcblx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdG9EYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbj8ubmF2aWdhdGlvblByb3BlcnRpZXMuZmluZEluZGV4KFxuXHRcdFx0XHRcdFx0XHRcdChvQ29udGV4dE5hdikgPT4gb0NvbnRleHROYXYubmFtZSA9PT0gb05hdi5uYW1lXG5cdFx0XHRcdFx0XHRcdCkgPT09IC0xXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9KSA+IC0xO1xuXHRcdGlmIChoYXNPbmVUb01hbnlOYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdCA9IGZ1bmN0aW9uIChcblx0b1Byb3BlcnR5UGF0aDogUHJvcGVydHlPclBhdGg8UHJvcGVydHk+LFxuXHRvRGF0YUZpZWxkQ29udmVydGVkPzogYW55LFxuXHRmb3JjZUVkaXRNb2RlOiBib29sZWFuID0gZmFsc2Vcbik6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdHJldHVybiBnZXRSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCwgb0RhdGFGaWVsZENvbnZlcnRlZCwgZm9yY2VFZGl0TW9kZSwgdHJ1ZSkgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xufTtcbmV4cG9ydCBjb25zdCBnZXRSZXF1aXJlZEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoXG5cdG9Qcm9wZXJ0eVBhdGg6IFByb3BlcnR5T3JQYXRoPFByb3BlcnR5Pixcblx0b0RhdGFGaWVsZENvbnZlcnRlZD86IGFueSxcblx0Zm9yY2VFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlLFxuXHRiQXNPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZSxcblx0b1JlcXVpcmVkUHJvcGVydGllczogYW55ID0ge30sXG5cdGRhdGFNb2RlbE9iamVjdFBhdGg/OiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdGNvbnN0IGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zID0gb1JlcXVpcmVkUHJvcGVydGllcy5yZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zO1xuXHRjb25zdCBhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucyA9IG9SZXF1aXJlZFByb3BlcnRpZXMucmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucztcblx0aWYgKCFvUHJvcGVydHlQYXRoIHx8IHR5cGVvZiBvUHJvcGVydHlQYXRoID09PSBcInN0cmluZ1wiKSB7XG5cdFx0aWYgKGJBc09iamVjdCkge1xuXHRcdFx0cmV0dXJuIGNvbnN0YW50KGZhbHNlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGNvbnN0YW50KGZhbHNlKSk7XG5cdH1cblx0bGV0IHJlbGF0aXZlUGF0aDtcblx0aWYgKGRhdGFNb2RlbE9iamVjdFBhdGgpIHtcblx0XHRyZWxhdGl2ZVBhdGggPSBnZXRSZWxhdGl2ZVBhdGhzKGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHR9XG5cdGxldCBkYXRhRmllbGRSZXF1aXJlZEV4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KHRydWUpO1xuXHRpZiAob0RhdGFGaWVsZENvbnZlcnRlZCAhPT0gbnVsbCkge1xuXHRcdGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKG9EYXRhRmllbGRDb252ZXJ0ZWQpO1xuXHR9XG5cdGxldCByZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb246IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiA9IGNvbnN0YW50KGZhbHNlKTtcblx0bGV0IHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXG5cdGNvbnN0IG9Qcm9wZXJ0eTogUHJvcGVydHkgPSAoaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24ob1Byb3BlcnR5UGF0aCkgJiYgb1Byb3BlcnR5UGF0aC4kdGFyZ2V0KSB8fCAob1Byb3BlcnR5UGF0aCBhcyBQcm9wZXJ0eSk7XG5cdC8vIEVuYWJsZW1lbnQgZGVwZW5kcyBvbiB0aGUgZmllbGQgY29udHJvbCBleHByZXNzaW9uXG5cdC8vIElmIHRoZSBGaWVsZCBjb250cm9sIGlzIHN0YXRpY2FsbHkgaW4gSW5hcHBsaWNhYmxlIChkaXNhYmxlZCkgLT4gbm90IGVuYWJsZWRcblx0Y29uc3QgcmVxdWlyZWRFeHByZXNzaW9uID0gaXNSZXF1aXJlZEV4cHJlc3Npb24ob1Byb3BlcnR5LCByZWxhdGl2ZVBhdGgpO1xuXHRjb25zdCBlZGl0TW9kZSA9IGZvcmNlRWRpdE1vZGUgfHwgVUkuSXNFZGl0YWJsZTtcblx0aWYgKGFSZXF1aXJlZFByb3BlcnRpZXNGcm9tSW5zZXJ0UmVzdHJpY3Rpb25zPy5pbmNsdWRlcygob1Byb3BlcnR5UGF0aCBhcyBhbnkpLm5hbWUpKSB7XG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21JbnNlcnRSZXN0cmljdGlvbnNFeHByZXNzaW9uID0gYW5kKGNvbnN0YW50KHRydWUpLCBVSS5Jc0NyZWF0ZU1vZGUpO1xuXHR9XG5cdGlmIChhUmVxdWlyZWRQcm9wZXJ0aWVzRnJvbVVwZGF0ZVJlc3RyaWN0aW9ucz8uaW5jbHVkZXMoKG9Qcm9wZXJ0eVBhdGggYXMgYW55KS5uYW1lKSkge1xuXHRcdHJlcXVpcmVkUHJvcGVydHlGcm9tVXBkYXRlUmVzdHJpY3Rpb25zRXhwcmVzc2lvbiA9IGFuZChjb25zdGFudCh0cnVlKSwgbm90RXF1YWwoVUkuSXNDcmVhdGVNb2RlLCB0cnVlKSk7XG5cdH1cblx0Y29uc3QgcmV0dXJuRXhwcmVzc2lvbiA9IG9yKFxuXHRcdGFuZChvcihyZXF1aXJlZEV4cHJlc3Npb24sIGRhdGFGaWVsZFJlcXVpcmVkRXhwcmVzc2lvbiksIGVkaXRNb2RlKSxcblx0XHRyZXF1aXJlZFByb3BlcnR5RnJvbUluc2VydFJlc3RyaWN0aW9uc0V4cHJlc3Npb24sXG5cdFx0cmVxdWlyZWRQcm9wZXJ0eUZyb21VcGRhdGVSZXN0cmljdGlvbnNFeHByZXNzaW9uXG5cdCk7XG5cdGlmIChiQXNPYmplY3QpIHtcblx0XHRyZXR1cm4gcmV0dXJuRXhwcmVzc2lvbjtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ocmV0dXJuRXhwcmVzc2lvbik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVxdWlyZWRFeHByZXNzaW9uRm9yQ29ubmVjdGVkRGF0YUZpZWxkID0gZnVuY3Rpb24gKFxuXHRkYXRhRmllbGRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoXG4pOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdGNvbnN0IGRhdGEgPSBkYXRhRmllbGRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q/LiR0YXJnZXQ/LkRhdGE7XG5cdGNvbnN0IGtleXM6IEFycmF5PHN0cmluZz4gPSBPYmplY3Qua2V5cyhkYXRhKTtcblx0Y29uc3QgZGF0YUZpZWxkcyA9IFtdO1xuXHRsZXQgcHJvcGVydHlQYXRoO1xuXHRjb25zdCBpc1JlcXVpcmVkRXhwcmVzc2lvbnM6IChDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB8IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPilbXSB8IHVuZGVmaW5lZCA9IFtdO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0aWYgKGRhdGFba2V5XVtcIiRUeXBlXCJdICYmIGRhdGFba2V5XVtcIiRUeXBlXCJdLmluZGV4T2YoXCJEYXRhRmllbGRcIikgPiAtMSkge1xuXHRcdFx0ZGF0YUZpZWxkcy5wdXNoKGRhdGFba2V5XSk7XG5cdFx0fVxuXHR9XG5cdGZvciAoY29uc3QgZGF0YUZpZWxkIG9mIGRhdGFGaWVsZHMpIHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC4kVHlwZSkge1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQ6XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybDpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdFx0aWYgKHR5cGVvZiBkYXRhRmllbGQuVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGggPSBkYXRhRmllbGQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbjpcblx0XHRcdFx0aWYgKGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCkge1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkIHx8XG5cdFx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGVcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIGRhdGFGaWVsZC5UYXJnZXQgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlQYXRoID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Ly8gbm8gZGVmYXVsdFxuXHRcdH1cblx0XHRpc1JlcXVpcmVkRXhwcmVzc2lvbnMucHVzaChnZXRSZXF1aXJlZEV4cHJlc3Npb25Bc09iamVjdChwcm9wZXJ0eVBhdGgsIGRhdGFGaWVsZCwgZmFsc2UpKTtcblx0fVxuXHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24ob3IoLi4uKGlzUmVxdWlyZWRFeHByZXNzaW9ucyBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSkpKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTZGTyxNQUFNQSxjQUFjLEdBQUcsVUFBVUMsb0JBQXlDLEVBQWU7SUFDL0YsT0FBT0Msb0JBQW9CLENBQUNGLGNBQWMsQ0FBQ0Msb0JBQW9CLENBQUNFLFlBQVksRUFBRUYsb0JBQW9CLENBQUM7RUFDcEcsQ0FBQztFQUFDO0VBQ0ssTUFBTUcsNkJBQTZCLEdBQUcsVUFDNUNDLGFBQXVDLEVBS0g7SUFBQSxJQUpwQ0MsbUJBQXdCLHVFQUFHLElBQUk7SUFBQSxJQUMvQkwsb0JBQXlDO0lBQUEsSUFDekNNLFVBQTZDLHVFQUFHQyxFQUFFLENBQUNDLFVBQVU7SUFBQSxJQUM3REMsMEJBQW1DLHVFQUFHLElBQUk7SUFFMUMsT0FBT0MscUJBQXFCLENBQzNCTixhQUFhLEVBQ2JDLG1CQUFtQixFQUNuQkwsb0JBQW9CLEVBQ3BCLElBQUksRUFDSk0sVUFBVSxFQUNWRywwQkFBMEIsQ0FDMUI7RUFDRixDQUFDO0VBQUM7RUFRRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sTUFBTUMscUJBQXFCLEdBQUcsVUFDcENOLGFBQXVDLEVBTWdDO0lBQUEsSUFMdkVDLG1CQUF3Qix1RUFBRyxJQUFJO0lBQUEsSUFDL0JMLG9CQUF5QztJQUFBLElBQ3pDVyxTQUFrQix1RUFBRyxLQUFLO0lBQUEsSUFDMUJMLFVBQTZDLHVFQUFHQyxFQUFFLENBQUNDLFVBQVU7SUFBQSxJQUM3REMsMEJBQW1DLHVFQUFHLElBQUk7SUFFMUMsSUFBSSxDQUFDTCxhQUFhLElB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
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper","sap/fe/core/converters/MetaModelConverter","sap/fe/core/formatters/ValueFormatter","sap/fe/core/helpers/BindingToolkit","sap/fe/core/templating/DataModelPathHelper","sap/fe/core/templating/DisplayModeFormatter","sap/fe/core/templating/FieldControlHelper","sap/fe/core/templating/PropertyHelper"],function(e,t,n,i,o,a,r,l){"use strict";var s={};var d=l.isProperty;var u=l.isPathExpression;var c=l.isKey;var v=l.isImmutable;var f=l.isComputed;var p=l.hasValueHelp;var g=l.getAssociatedUnitProperty;var m=l.getAssociatedCurrencyProperty;var y=r.isRequiredExpression;var h=r.isReadOnlyExpression;var b=r.isNonEditableExpression;var x=r.isDisabledExpression;var E=o.isPathUpdatable;var D=o.getTargetObjectPath;var I=o.getRelativePaths;var T=o.getContextRelativeTargetObjectPath;var $=i.pathInModel;var O=i.or;var M=i.notEqual;var C=i.not;var P=i.isTruthy;var U=i.isConstant;var F=i.ifElse;var V=i.getExpressionFromAnnotation;var j=i.formatWithTypeInformation;var S=i.formatResult;var q=i.equal;var w=i.EDM_TYPE_MAPPING;var A=i.constant;var N=i.compileExpression;var R=i.and;var B=i.addTypeInformation;var W=t.getInvolvedDataModelObjects;var z=t.convertMetaModelContext;var k=e.UI;var H=e.singletonPathVisitor;const L=function(e){return a.getDisplayMode(e.targetObject,e)};s.getDisplayMode=L;const K=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;let n=arguments.length>2?arguments[2]:undefined;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:k.IsEditable;return _(e,t,n,true,i)};s.getEditableExpressionAsObject=K;const _=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;let n=arguments.length>2?arguments[2]:undefined;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:k.IsEditable;if(!e||typeof e==="string"){return N(false)}let a=A(true);if(t!==null){a=F(b(t),false,o)}const r=u(e)&&e.$target||e;const l=I(n);const s=E(n,{propertyPath:e,pathVisitor:(e,t)=>H(e,n.convertedTypes,t)});const d=F(O(C(s),f(r),c(r),v(r),b(r,l)),F(O(f(r),b(r,l)),false,k.IsTransientBinding),o);if(i){return R(d,a)}return N(R(d,a))};s.getEditableExpression=_;const G=function(e,t){var n;const i=D(e);const o=$(`/collaboration/activities${i}`,"internal");const a=e===null||e===void 0?void 0:(n=e.targetEntityType)===null||n===void 0?void 0:n.keys;const r=[];a===null||a===void 0?void 0:a.forEach(function(e){const t=$(e.name);r.push(t)});return S([o,...r],t)};s.getCollaborationExpression=G;const Y=function(e,t,n){return J(e,t,true,n)};s.getEnabledExpressionAsObject=Y;const J=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3?arguments[3]:undefined;if(!e||typeof e==="string"){return N(true)}let o;if(i){o=I(i)}let a=A(true);if(t!==null){a=F(x(t),false,true)}const r=u(e)&&e.$target||e;const l=F(x(r,o),false,true);if(n){return R(l,a)}return N(R(l,a))};s.getEnabledExpression=J;const Q=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;let a=arguments.length>5&&arguments[5]!==undefined?arguments[5]:k.IsEditable;if(!e||typeof e==="string"||(o===null||o===void 0?void 0:o.$Type)==="com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath"){return"Display"}const r=u(e)&&e.$target||e;const l=I(t);const s=K(e,o,t,a);const d=Y(e,o,t);const c=m(r);const p=c||g(r);let y=A("Editable");if(p){const e=h(p,l);y=F(O(e,f(p),R(v(p),C(k.IsTransientBinding)),n),F(!U(e)&&e,"EditableReadOnly","EditableDisplay"),"Editable")}const b=O(h(r,l),h(o));const x=F(d,F(s,y,F(R(!U(b)&&b,a),"ReadOnly","Display")),F(a,"Disabled","Display"));if(i){return x}return N(x)};s.getEditMode=Q;const X=function(e){var t,n,i,o;const a=e.targetObject;const r=(t=a.annotations)===null||t===void 0?void 0:(n=t.Measures)===null||n===void 0?void 0:n.ISOCurrency;const l=r?r:(i=a.annotations)===null||i===void 0?void 0:(o=i.Measures)===null||o===void 0?void 0:o.Unit;if(l){return N(O(P(V(l)),C(k.IsTotal)))}else{return N(A(true))}};s.hasValidAnalyticalCurrencyOrUnit=X;const Z=function(e,t,n){const i=u(e)&&e.$target||e;const o=m(i)||g(i);if(!o){return N(n)}const a=h(o);const r=R(O(!U(a),C(a)),C(f(o)),C(v(o)));return N(F(r,t,n))};s.ifUnitEditable=Z;const ee=function(e,t,n){const i=u(e)&&e.$target||e;return p(i)?N(t):N(F(q(n,"Editable"),"Value",t))};s.getFieldDisplay=ee;const te=function(e,t){var n,i,o,a;const r=w[e===null||e===void 0?void 0:e.type]||(t?w[t]:undefined);const l={type:r.type,constraints:{},formatOptions:{}};if(d(e)){var s,u,c,v,f,p,g,m,y,h,b,x,E,D,I,T,$,O;l.constraints={scale:(s=r.constraints)!==null&&s!==void 0&&s.$Scale?e.scale:undefined,precision:(u=r.constraints)!==null&&u!==void 0&&u.$Precision?e.precision:undefined,maxLength:(c=r.constraints)!==null&&c!==void 0&&c.$MaxLength?e.maxLength:undefined,nullable:(v=r.constraints)!==null&&v!==void 0&&v.$Nullable?e.nullable:undefined,minimum:(f=r.constraints)!==null&&f!==void 0&&f["@Org.OData.Validation.V1.Minimum/$Decimal"]&&!isNaN((p=e.annotations)===null||p===void 0?void 0:(g=p.Validation)===null||g===void 0?void 0:g.Minimum)?`${(m=e.annotations)===null||m===void 0?void 0:(y=m.Validation)===null||y===void 0?void 0:y.Minimum}`:undefined,maximum:(h=r.constraints)!==null&&h!==void 0&&h["@Org.OData.Validation.V1.Maximum/$Decimal"]&&!isNaN((b=e.annotations)===null||b===void 0?void 0:(x=b.Validation)===null||x===void 0?void 0:x.Maximum)?`${(E=e.annotations)===null||E===void 0?void 0:(D=E.Validation)===null||D===void 0?void 0:D.Maximum}`:undefined,isDigitSequence:l.type==="sap.ui.model.odata.type.String"&&(I=r.constraints)!==null&&I!==void 0&&I["@com.sap.vocabularies.Common.v1.IsDigitSequence"]&&(T=e.annotations)!==null&&T!==void 0&&($=T.Common)!==null&&$!==void 0&&$.IsDigitSequence?true:undefined,V4:(O=r.constraints)!==null&&O!==void 0&&O.$V4?true:undefined}}l.formatOptions={parseAsString:(l===null||l===void 0?void 0:(n=l.type)===null||n===void 0?void 0:n.indexOf("sap.ui.model.odata.type.Int"))===0||(l===null||l===void 0?void 0:(i=l.type)===null||i===void 0?void 0:i.indexOf("sap.ui.model.odata.type.Double"))===0?false:undefined,emptyString:(l===null||l===void 0?void 0:(o=l.type)===null||o===void 0?void 0:o.indexOf("sap.ui.model.odata.type.Int"))===0||(l===null||l===void 0?void 0:(a=l.type)===null||a===void 0?void 0:a.indexOf("sap.ui.model.odata.type.Double"))===0?"":undefined,parseKeepsEmptyString:l.type==="sap.ui.model.odata.type.String"?true:undefined};return l};s.getTypeConfig=te;const ne=function(e,t,i,o){var a,r,l,s,d;const u=e.targetObject;let c=(a=u.annotations)===null||a===void 0?void 0:(r=a.Measures)===null||r===void 0?void 0:r.Unit;const v=I(e);t=j(u,t);if(((l=c)===null||l===void 0?void 0:l.toString())==="%"){if((o===null||o===void 0?void 0:o.showMeasure)===false){return t}return S([t],n.formatWithPercentage)}const f=c?"sap.ui.model.odata.type.Unit":"sap.ui.model.odata.type.Currency";c=c?c:(s=u.annotations)===null||s===void 0?void 0:(d=s.Measures)===null||d===void 0?void 0:d.ISOCurrency;const p=c.$target?j(c.$target,V(c,v),i):V(c,v);return B([t,p],f,undefined,o)};s.getBindingWithUnitOrCurrency=ne;const ie=function(e){var t,n,i,o,a;const r=e.targetObject;let l=(t=r.annotations)===null||t===void 0?void 0:(n=t.Measures)===null||n===void 0?void 0:n.Unit;if(((i=l)===null||i===void 0?void 0:i.toString())==="%"){return A("%")}const s=I(e);const d=l?"sap.ui.model.odata.type.Unit":"sap.ui.model.odata.type.Currency";l=l?l:(o=r.annotations)===null||o===void 0?void 0:(a=o.Measures)===null||a===void 0?void 0:a.ISOCurrency;const u=l.$target?j(l.$target,V(l,s)):V(l,s);let c=$(T(e));c=j(r,c,true);return B([c,u],d,undefined,{parseKeepsEmptyString:true,emptyString:"",showNumber:false})};s.getBindingForUnitOrCurrency=ie;const oe=function(e,t){var n,i;let o=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let a=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let r=arguments.length>4?arguments[4]:undefined;const l=e.targetObject;const s=(n=l.annotations)===null||n===void 0?void 0:(i=n.Common)===null||i===void 0?void 0:i.Timezone;const d=I(e);t=j(l,t);const u="sap.fe.core.type.DateTimeWithTimezone";const c=s.$target?j(s.$target,V(s,d),o):V(s,d);let v={};if(a){v={showTimezoneForEmptyValues:false}}if(r!==null&&r!==void 0&&r.showTime){v={...v,...{showTime:r.showTime==="false"?false:true}}}if(r!==null&&r!==void 0&&r.showDate){v={...v,...{showDate:r.showDate==="false"?false:true}}}if(r!==null&&r!==void 0&&r.showTimezone){v={...v,...{showTimezone:r.showTimezone==="false"?false:true}}}return B([t,c],u,undefined,v)};s.getBindingWithTimezone=oe;const ae=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"Begin";let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"Begin";return N(F(q(e,"Display"),t,n))};s.getAlignmentExpression=ae;const re=function(e,t){if(t&&t.context){return z(t.context)}return null};re.requiresIContext=true;s.getConverterContext=re;const le=function(e,t){if(t&&t.context){return W(t.context)}return null};le.requiresIContext=true;s.getDataModelObjectPath=le;const se=function(e){var t;if((t=e.navigationProperties)!==null&&t!==void 0&&t.length){const t=(e===null||e===void 0?void 0:e.navigationProperties.findIndex(t=>{if(t._type==="NavigationProperty"&&t.isCollection){var n,i;if((n=e.contextLocation)!==null&&n!==void 0&&(i=n.navigationProperties)!==null&&i!==void 0&&i.length){var o;return((o=e.contextLocation)===null||o===void 0?void 0:o.navigationProperties.findIndex(e=>e.name===t.name))===-1}return true}return false}))>-1;if(t){return true}}return false};s.isMultiValueField=se;const de=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return ue(e,t,n,true)};s.getRequiredExpressionAsObject=de;const ue=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};let a=arguments.length>5?arguments[5]:undefined;const r=o.requiredPropertiesFromInsertRestrictions;const l=o.requiredPropertiesFromUpdateRestrictions;if(!e||typeof e==="string"){if(i){return A(false)}return N(A(false))}let s;if(a){s=I(a)}let d=A(true);if(t!==null){d=y(t)}let c=A(false);let v=A(false);const f=u(e)&&e.$target||e;const p=y(f,s);const g=n||k.IsEditable;if(r!==null&&r!==void 0&&r.includes(e.name)){c=R(A(true),k.IsCreateMode)}if(l!==null&&l!==void 0&&l.includes(e.name)){v=R(A(true),M(k.IsCreateMode,true))}const m=O(R(O(p,d),g),c,v);if(i){return m}return N(m)};s.getRequiredExpression=ue;const ce=function(e){var t,n;const i=e===null||e===void 0?void 0:(t=e.targetObject)===null||t===void 0?void 0:(n=t.$target)===null||n===void 0?void 0:n.Data;const o=Object.keys(i);const a=[];let r;const l=[];for(const e of o){if(i[e]["$Type"]&&i[e]["$Type"].indexOf("DataField")>-1){a.push(i[e])}}for(const e of a){switch(e.$Type){case"com.sap.vocabularies.UI.v1.DataField":case"com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath":case"com.sap.vocabularies.UI.v1.DataFieldWithUrl":case"com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation":case"com.sap.vocabularies.UI.v1.DataFieldWithAction":if(typeof e.Value==="object"){r=e.Value.$target}break;case"com.sap.vocabularies.UI.v1.DataFieldForAnnotation":if(e.Target.$target){if(e.Target.$target.$Type==="com.sap.vocabularies.UI.v1.DataField"||e.Target.$target.$Type==="com.sap.vocabularies.UI.v1.DataPointType"){if(typeof e.Target.$target.Value==="object"){r=e.Target.$target.Value.$target}}else{if(typeof e.Target==="object"){r=e.Target.$target}break}}break}l.push(de(r,e,false))}return N(O(...l))};s.getRequiredExpressionForConnectedDataField=ce;return s},false);
|
|
5
|
+
sap.ui.define(["sap/fe/core/converters/helpers/BindingHelper","sap/fe/core/converters/MetaModelConverter","sap/fe/core/formatters/ValueFormatter","sap/fe/core/helpers/BindingToolkit","sap/fe/core/helpers/TypeGuards","sap/fe/core/templating/DataModelPathHelper","sap/fe/core/templating/DisplayModeFormatter","sap/fe/core/templating/FieldControlHelper","sap/fe/core/templating/PropertyHelper","sap/ui/mdc/enum/EditMode"],function(e,t,n,i,o,a,r,l,s,d){"use strict";var u={};var c=s.isKey;var v=s.isImmutable;var f=s.isComputed;var p=s.hasValueHelp;var g=s.getAssociatedUnitProperty;var m=s.getAssociatedCurrencyProperty;var y=l.isRequiredExpression;var h=l.isReadOnlyExpression;var b=l.isNonEditableExpression;var E=l.isDisabledExpression;var x=a.isPathUpdatable;var D=a.getTargetObjectPath;var T=a.getRelativePaths;var I=a.getContextRelativeTargetObjectPath;var $=o.isProperty;var O=o.isPathAnnotationExpression;var M=o.isMultipleNavigationProperty;var P=i.pathInModel;var C=i.or;var U=i.notEqual;var V=i.not;var F=i.isTruthy;var j=i.isConstant;var S=i.ifElse;var q=i.getExpressionFromAnnotation;var w=i.formatWithTypeInformation;var A=i.formatResult;var N=i.equal;var R=i.EDM_TYPE_MAPPING;var B=i.constant;var W=i.compileExpression;var z=i.and;var k=i.addTypeInformation;var H=t.getInvolvedDataModelObjects;var L=t.convertMetaModelContext;var K=e.UI;var G=e.singletonPathVisitor;const _=function(e){return r.getDisplayMode(e.targetObject,e)};u.getDisplayMode=_;const Y=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;let n=arguments.length>2?arguments[2]:undefined;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:K.IsEditable;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:true;return J(e,t,n,true,i,o)};u.getEditableExpressionAsObject=Y;const J=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;let n=arguments.length>2?arguments[2]:undefined;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:K.IsEditable;let a=arguments.length>5&&arguments[5]!==undefined?arguments[5]:true;if(!e||typeof e==="string"){return W(false)}let r=B(true);if(t!==null){r=S(b(t),false,o)}const l=O(e)?e.$target:e;const s=T(n);const d=x(n,{propertyPath:e,pathVisitor:(e,t)=>G(e,n.convertedTypes,t)});if(W(d)==="false"&&a){return i?d:"false"}const u=S(C(z(V(d),a),f(l),c(l),v(l),b(l,s)),S(C(f(l),b(l,s)),false,K.IsTransientBinding),o);if(i){return z(u,r)}return W(z(u,r))};u.getEditableExpression=J;const Q=function(e,t){var n;const i=D(e);const o=P(`/collaboration/activities${i}`,"internal");const a=e===null||e===void 0?void 0:(n=e.targetEntityType)===null||n===void 0?void 0:n.keys;const r=[];a===null||a===void 0?void 0:a.forEach(function(e){const t=P(e.name);r.push(t)});return A([o,...r],t)};u.getCollaborationExpression=Q;const X=function(e,t,n){return Z(e,t,true,n)};u.getEnabledExpressionAsObject=X;const Z=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3?arguments[3]:undefined;if(!e||typeof e==="string"){return W(true)}let o;if(i){o=T(i)}let a=B(true);if(t!==null){a=S(E(t),false,true)}const r=O(e)?e.$target:e;const l=S(E(r,o),false,true);if(n){return z(l,a)}return W(z(l,a))};u.getEnabledExpression=Z;const ee=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:null;let a=arguments.length>5&&arguments[5]!==undefined?arguments[5]:K.IsEditable;if(!e||typeof e==="string"||(o===null||o===void 0?void 0:o.$Type)==="com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath"){return d.Display}const r=O(e)?e.$target:e;const l=T(t);const s=x(t,{propertyPath:r,pathVisitor:(e,n)=>G(e,t.convertedTypes,n)});const u=Y(e,o,t,a,false);const c=X(e,o,t);const p=m(r);const y=p||g(r);let b=B(d.Editable);if(y){const e=h(y,l);b=S(C(e,f(y),z(v(y),V(K.IsTransientBinding)),n),S(!j(e)&&e,d.EditableReadOnly,d.EditableDisplay),d.Editable)}const E=C(h(r,l),h(o));const D=S(C(s,K.IsTransientBinding),S(c,S(u,b,S(z(!j(E)&&E,a),d.ReadOnly,d.Display)),S(a,d.Disabled,d.Display)),d.Display);if(i){return D}return W(D)};u.getEditMode=ee;const te=function(e){var t,n,i,o;const a=e.targetObject;const r=(t=a.annotations)===null||t===void 0?void 0:(n=t.Measures)===null||n===void 0?void 0:n.ISOCurrency;const l=r?r:(i=a.annotations)===null||i===void 0?void 0:(o=i.Measures)===null||o===void 0?void 0:o.Unit;if(l){return W(C(F(q(l)),V(K.IsTotal)))}else{return W(B(true))}};u.hasValidAnalyticalCurrencyOrUnit=te;const ne=function(e,t,n){const i=O(e)&&e.$target||e;const o=m(i)||g(i);if(!o){return W(n)}const a=h(o);const r=z(C(!j(a),V(a)),V(f(o)),V(v(o)));return W(S(r,t,n))};u.ifUnitEditable=ne;const ie=function(e,t,n){const i=O(e)&&e.$target||e;return p(i)?W(t):W(S(N(n,"Editable"),"Value",t))};u.getFieldDisplay=ie;const oe=function(e,t){var n,i,o,a;const r=R[e===null||e===void 0?void 0:e.type]||(t?R[t]:undefined);const l={type:r.type,constraints:{},formatOptions:{}};if($(e)){var s,d,u,c,v,f,p,g,m,y,h,b,E,x,D,T,I,O;l.constraints={scale:(s=r.constraints)!==null&&s!==void 0&&s.$Scale?e.scale:undefined,precision:(d=r.constraints)!==null&&d!==void 0&&d.$Precision?e.precision:undefined,maxLength:(u=r.constraints)!==null&&u!==void 0&&u.$MaxLength?e.maxLength:undefined,nullable:(c=r.constraints)!==null&&c!==void 0&&c.$Nullable?e.nullable:undefined,minimum:(v=r.constraints)!==null&&v!==void 0&&v["@Org.OData.Validation.V1.Minimum/$Decimal"]&&!isNaN((f=e.annotations)===null||f===void 0?void 0:(p=f.Validation)===null||p===void 0?void 0:p.Minimum)?`${(g=e.annotations)===null||g===void 0?void 0:(m=g.Validation)===null||m===void 0?void 0:m.Minimum}`:undefined,maximum:(y=r.constraints)!==null&&y!==void 0&&y["@Org.OData.Validation.V1.Maximum/$Decimal"]&&!isNaN((h=e.annotations)===null||h===void 0?void 0:(b=h.Validation)===null||b===void 0?void 0:b.Maximum)?`${(E=e.annotations)===null||E===void 0?void 0:(x=E.Validation)===null||x===void 0?void 0:x.Maximum}`:undefined,isDigitSequence:l.type==="sap.ui.model.odata.type.String"&&(D=r.constraints)!==null&&D!==void 0&&D["@com.sap.vocabularies.Common.v1.IsDigitSequence"]&&(T=e.annotations)!==null&&T!==void 0&&(I=T.Common)!==null&&I!==void 0&&I.IsDigitSequence?true:undefined,V4:(O=r.constraints)!==null&&O!==void 0&&O.$V4?true:undefined}}l.formatOptions={parseAsString:(l===null||l===void 0?void 0:(n=l.type)===null||n===void 0?void 0:n.indexOf("sap.ui.model.odata.type.Int"))===0||(l===null||l===void 0?void 0:(i=l.type)===null||i===void 0?void 0:i.indexOf("sap.ui.model.odata.type.Double"))===0?false:undefined,emptyString:(l===null||l===void 0?void 0:(o=l.type)===null||o===void 0?void 0:o.indexOf("sap.ui.model.odata.type.Int"))===0||(l===null||l===void 0?void 0:(a=l.type)===null||a===void 0?void 0:a.indexOf("sap.ui.model.odata.type.Double"))===0?"":undefined,parseKeepsEmptyString:l.type==="sap.ui.model.odata.type.String"?true:undefined};return l};u.getTypeConfig=oe;const ae=function(e,t,i,o){var a,r,l,s,d;const u=e.targetObject;let c=(a=u.annotations)===null||a===void 0?void 0:(r=a.Measures)===null||r===void 0?void 0:r.Unit;const v=T(e);t=w(u,t);if(((l=c)===null||l===void 0?void 0:l.toString())==="%"){if((o===null||o===void 0?void 0:o.showMeasure)===false){return t}return A([t],n.formatWithPercentage)}const f=c?"sap.ui.model.odata.type.Unit":"sap.ui.model.odata.type.Currency";c=c?c:(s=u.annotations)===null||s===void 0?void 0:(d=s.Measures)===null||d===void 0?void 0:d.ISOCurrency;const p=c.$target?w(c.$target,q(c,v),i):q(c,v);return k([t,p],f,undefined,o)};u.getBindingWithUnitOrCurrency=ae;const re=function(e){var t,n,i,o,a;const r=e.targetObject;let l=(t=r.annotations)===null||t===void 0?void 0:(n=t.Measures)===null||n===void 0?void 0:n.Unit;if(((i=l)===null||i===void 0?void 0:i.toString())==="%"){return B("%")}const s=T(e);const d=l?"sap.ui.model.odata.type.Unit":"sap.ui.model.odata.type.Currency";l=l?l:(o=r.annotations)===null||o===void 0?void 0:(a=o.Measures)===null||a===void 0?void 0:a.ISOCurrency;const u=l.$target?w(l.$target,q(l,s)):q(l,s);let c=P(I(e));c=w(r,c,true);return k([c,u],d,undefined,{parseKeepsEmptyString:true,emptyString:"",showNumber:false})};u.getBindingForUnitOrCurrency=re;const le=function(e,t){var n,i;let o=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let a=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let r=arguments.length>4?arguments[4]:undefined;const l=e.targetObject;const s=(n=l.annotations)===null||n===void 0?void 0:(i=n.Common)===null||i===void 0?void 0:i.Timezone;const d=T(e);t=w(l,t);const u="sap.fe.core.type.DateTimeWithTimezone";const c=s.$target?w(s.$target,q(s,d),o):q(s,d);let v={};if(a){v={showTimezoneForEmptyValues:false}}if(r!==null&&r!==void 0&&r.showTime){v={...v,...{showTime:r.showTime==="false"?false:true}}}if(r!==null&&r!==void 0&&r.showDate){v={...v,...{showDate:r.showDate==="false"?false:true}}}if(r!==null&&r!==void 0&&r.showTimezone){v={...v,...{showTimezone:r.showTimezone==="false"?false:true}}}return k([t,c],u,undefined,v)};u.getBindingWithTimezone=le;const se=function(e){let t=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"Begin";let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:"Begin";return W(S(N(e,"Display"),t,n))};u.getAlignmentExpression=se;const de=function(e,t){if(t&&t.context){return L(t.context)}return null};de.requiresIContext=true;u.getConverterContext=de;const ue=function(e,t){if(t&&t.context){return H(t.context)}return null};ue.requiresIContext=true;u.getDataModelObjectPath=ue;const ce=function(e){var t;if((t=e.navigationProperties)!==null&&t!==void 0&&t.length){const t=(e===null||e===void 0?void 0:e.navigationProperties.findIndex(t=>{if(M(t)){var n,i;if((n=e.contextLocation)!==null&&n!==void 0&&(i=n.navigationProperties)!==null&&i!==void 0&&i.length){var o;return((o=e.contextLocation)===null||o===void 0?void 0:o.navigationProperties.findIndex(e=>e.name===t.name))===-1}return true}return false}))>-1;if(t){return true}}return false};u.isMultiValueField=ce;const ve=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;return fe(e,t,n,true)};u.getRequiredExpressionAsObject=ve;const fe=function(e,t){let n=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;let i=arguments.length>3&&arguments[3]!==undefined?arguments[3]:false;let o=arguments.length>4&&arguments[4]!==undefined?arguments[4]:{};let a=arguments.length>5?arguments[5]:undefined;const r=o.requiredPropertiesFromInsertRestrictions;const l=o.requiredPropertiesFromUpdateRestrictions;if(!e||typeof e==="string"){if(i){return B(false)}return W(B(false))}let s;if(a){s=T(a)}let d=B(true);if(t!==null){d=y(t)}let u=B(false);let c=B(false);const v=O(e)&&e.$target||e;const f=y(v,s);const p=n||K.IsEditable;if(r!==null&&r!==void 0&&r.includes(e.name)){u=z(B(true),K.IsCreateMode)}if(l!==null&&l!==void 0&&l.includes(e.name)){c=z(B(true),U(K.IsCreateMode,true))}const g=C(z(C(f,d),p),u,c);if(i){return g}return W(g)};u.getRequiredExpression=fe;const pe=function(e){var t,n;const i=e===null||e===void 0?void 0:(t=e.targetObject)===null||t===void 0?void 0:(n=t.$target)===null||n===void 0?void 0:n.Data;const o=Object.keys(i);const a=[];let r;const l=[];for(const e of o){if(i[e]["$Type"]&&i[e]["$Type"].indexOf("DataField")>-1){a.push(i[e])}}for(const e of a){switch(e.$Type){case"com.sap.vocabularies.UI.v1.DataField":case"com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath":case"com.sap.vocabularies.UI.v1.DataFieldWithUrl":case"com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation":case"com.sap.vocabularies.UI.v1.DataFieldWithAction":if(typeof e.Value==="object"){r=e.Value.$target}break;case"com.sap.vocabularies.UI.v1.DataFieldForAnnotation":if(e.Target.$target){if(e.Target.$target.$Type==="com.sap.vocabularies.UI.v1.DataField"||e.Target.$target.$Type==="com.sap.vocabularies.UI.v1.DataPointType"){if(typeof e.Target.$target.Value==="object"){r=e.Target.$target.Value.$target}}else{if(typeof e.Target==="object"){r=e.Target.$target}break}}break}l.push(ve(r,e,false))}return W(C(...l))};u.getRequiredExpressionForConnectedDataField=pe;return u},false);
|
|
6
6
|
//# sourceMappingURL=UIFormatters.js.map
|