@sapui5/sap.fe.core 1.112.0 → 1.114.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 +70 -6
- 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 +118 -3
- package/src/sap/fe/core/AppComponent-dbg.js +16 -6
- 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 +21 -7
- package/src/sap/fe/core/AppStateHandler-dbg.js +11 -10
- 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 +14 -11
- package/src/sap/fe/core/CommonUtils-dbg.js +102 -175
- 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 +114 -211
- package/src/sap/fe/core/ExtensionAPI-dbg.js +3 -1
- package/src/sap/fe/core/ExtensionAPI.js.map +1 -1
- package/src/sap/fe/core/ExtensionAPI.ts +2 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase-dbg.js +2 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport-dbg.js +2 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockSupport.ts +13 -18
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor-dbg.js +32 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js +4 -4
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockTemplateProcessor.ts +41 -29
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock-dbg.js +2 -2
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlock.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment-dbg.js +2 -2
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.js.map +1 -1
- package/src/sap/fe/core/buildingBlocks/RuntimeBuildingBlockFragment.ts +3 -1
- package/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +124 -57
- 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 +146 -73
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +35 -74
- 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 +35 -78
- package/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +217 -127
- 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 +227 -129
- 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 +2 -4
- package/src/sap/fe/core/controllerextensions/Share-dbg.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
- package/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +19 -14
- 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 +22 -14
- package/src/sap/fe/core/controllerextensions/ViewState-dbg.js +41 -24
- 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 +64 -31
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync-dbg.js +8 -8
- 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 +7 -9
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon-dbg.js +7 -45
- 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 +5 -48
- 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 +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating-dbg.js +52 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.js +6 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.js.map +1 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialogTemplating.ts +46 -0
- 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 +106 -205
- 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 +121 -216
- package/src/sap/fe/core/controllerextensions/editFlow/draft-dbg.js +31 -4
- 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 +38 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup-dbg.js +13 -10
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +7 -20
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal-dbg.js +9 -4
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/_internal.ts +12 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade-dbg.js +10 -6
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js.map +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +20 -11
- package/src/sap/fe/core/controllerextensions/editFlow/sticky-dbg.js +1 -8
- 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 +0 -9
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling-dbg.js +19 -15
- 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 +19 -22
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy-dbg.js +67 -1
- 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 +68 -0
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -0
- package/src/sap/fe/core/controls/CommandExecution-dbg.js +4 -9
- 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 +0 -8
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block-dbg.js +335 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +6 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js.map +1 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +336 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
- package/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +3 -28
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js.map +1 -1
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +8 -29
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +30 -1
- 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 +38 -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 +2 -5
- package/src/sap/fe/core/converters/ManifestSettings-dbg.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +7 -6
- package/src/sap/fe/core/converters/ManifestWrapper-dbg.js +5 -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 +7 -1
- package/src/sap/fe/core/converters/MetaModelConverter-dbg.js +49 -28
- 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 +62 -30
- package/src/sap/fe/core/converters/TemplateConverter-dbg.js +2 -3
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js.map +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +1 -6
- package/src/sap/fe/core/converters/annotations/DataField-dbg.js +22 -7
- 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 +20 -7
- package/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +701 -681
- 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 +6 -12
- 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 +9 -14
- package/src/sap/fe/core/converters/controls/Common/Chart-dbg.js +32 -20
- 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 +30 -18
- package/src/sap/fe/core/converters/controls/Common/DataVisualization-dbg.js +4 -5
- 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 +6 -37
- 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 +5 -11
- package/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +5 -5
- 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 +3 -4
- package/src/sap/fe/core/converters/controls/Common/Table-dbg.js +135 -85
- 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 +189 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +56 -22
- 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 +67 -31
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +137 -49
- 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 +166 -43
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters-dbg.js +33 -14
- 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 +31 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection-dbg.js +27 -18
- 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 +36 -23
- package/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +37 -15
- 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 +36 -20
- 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/InsightsHelpers-dbg.js +39 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +6 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js.map +1 -0
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +45 -0
- package/src/sap/fe/core/converters/helpers/IssueManager-dbg.js +3 -2
- 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 +2 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +17 -16
- 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 +11 -11
- package/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +20 -17
- 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 +25 -56
- package/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +13 -13
- 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 +18 -13
- package/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +17 -33
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js.map +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +27 -22
- package/src/sap/fe/core/formatters/TableFormatter-dbg.js +2 -6
- 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 +1 -5
- package/src/sap/fe/core/formatters/ValueFormatter-dbg.js +13 -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 +19 -9
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/BindingToolkit-dbg.js +2 -1
- 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 +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper-dbg.js +58 -35
- 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 +76 -54
- package/src/sap/fe/core/helpers/MassEditHelper-dbg.js +8 -4
- 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 +7 -5
- package/src/sap/fe/core/helpers/MessageStrip-dbg.js +6 -5
- 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 +4 -4
- package/src/sap/fe/core/helpers/MetaModelFunction-dbg.js +167 -4
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js.map +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +205 -3
- 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 +41 -68
- package/src/sap/fe/core/helpers/RecommendationHelper-dbg.js +71 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.js +6 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.js.map +1 -0
- package/src/sap/fe/core/helpers/RecommendationHelper.ts +94 -0
- package/src/sap/fe/core/helpers/ResourceModelHelper-dbg.js +19 -3
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js.map +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.ts +21 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +40 -6
- 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 +39 -5
- 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 +52 -26
- 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 +49 -25
- package/src/sap/fe/core/helpers/TypeGuards-dbg.js +147 -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 +151 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control-dbg.js +25 -2
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.js.map +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +24 -0
- package/src/sap/fe/core/jsx-runtime/jsx-dbg.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -0
- package/src/sap/fe/core/library-dbg.js +1 -1
- package/src/sap/fe/core/library-preload.js +123 -95
- 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/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 +6 -6
- package/src/sap/fe/core/messagebundle_ar.properties +5 -6
- package/src/sap/fe/core/messagebundle_bg.properties +11 -12
- package/src/sap/fe/core/messagebundle_ca.properties +3 -4
- package/src/sap/fe/core/messagebundle_cs.properties +3 -4
- package/src/sap/fe/core/messagebundle_cy.properties +3 -4
- package/src/sap/fe/core/messagebundle_da.properties +3 -4
- package/src/sap/fe/core/messagebundle_de.properties +11 -12
- package/src/sap/fe/core/messagebundle_el.properties +5 -6
- package/src/sap/fe/core/messagebundle_en.properties +3 -4
- package/src/sap/fe/core/messagebundle_en_GB.properties +4 -5
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +3 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +3 -4
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +3 -2
- package/src/sap/fe/core/messagebundle_es.properties +3 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +3 -4
- package/src/sap/fe/core/messagebundle_et.properties +3 -4
- package/src/sap/fe/core/messagebundle_fi.properties +3 -4
- package/src/sap/fe/core/messagebundle_fr.properties +3 -4
- package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -12
- package/src/sap/fe/core/messagebundle_hi.properties +11 -12
- package/src/sap/fe/core/messagebundle_hr.properties +3 -4
- package/src/sap/fe/core/messagebundle_hu.properties +3 -4
- package/src/sap/fe/core/messagebundle_id.properties +11 -12
- package/src/sap/fe/core/messagebundle_it.properties +3 -4
- package/src/sap/fe/core/messagebundle_iw.properties +3 -4
- package/src/sap/fe/core/messagebundle_ja.properties +4 -5
- package/src/sap/fe/core/messagebundle_kk.properties +3 -4
- package/src/sap/fe/core/messagebundle_ko.properties +11 -12
- package/src/sap/fe/core/messagebundle_lt.properties +3 -4
- package/src/sap/fe/core/messagebundle_lv.properties +11 -12
- package/src/sap/fe/core/messagebundle_ms.properties +3 -4
- package/src/sap/fe/core/messagebundle_nl.properties +3 -4
- package/src/sap/fe/core/messagebundle_no.properties +3 -4
- package/src/sap/fe/core/messagebundle_pl.properties +11 -12
- package/src/sap/fe/core/messagebundle_pt.properties +3 -4
- package/src/sap/fe/core/messagebundle_pt_PT.properties +3 -4
- package/src/sap/fe/core/messagebundle_ro.properties +14 -15
- package/src/sap/fe/core/messagebundle_ru.properties +11 -12
- package/src/sap/fe/core/messagebundle_sh.properties +3 -4
- package/src/sap/fe/core/messagebundle_sk.properties +3 -4
- package/src/sap/fe/core/messagebundle_sl.properties +3 -4
- package/src/sap/fe/core/messagebundle_sv.properties +11 -12
- package/src/sap/fe/core/messagebundle_th.properties +3 -4
- package/src/sap/fe/core/messagebundle_tr.properties +3 -4
- package/src/sap/fe/core/messagebundle_uk.properties +3 -4
- package/src/sap/fe/core/messagebundle_vi.properties +3 -4
- package/src/sap/fe/core/messagebundle_zh_CN.properties +11 -12
- package/src/sap/fe/core/messagebundle_zh_TW.properties +11 -12
- package/src/sap/fe/core/rootView/RootViewBaseController-dbg.js +22 -8
- 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 +17 -7
- package/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +36 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +37 -1
- package/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +13 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.js.map +1 -1
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +13 -0
- package/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +7 -1
- 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 +20 -2
- 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 +10 -0
- package/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +10 -7
- 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 +12 -13
- package/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +9 -3
- 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 +11 -15
- 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/CriticalityFormatters-dbg.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +2 -2
- package/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +19 -18
- 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 +24 -18
- 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 -28
- 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 -24
- 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 +12 -1
- 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 +12 -0
- 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 +45 -34
- package/src/sap/fe/core/controls/ActionPartial.fragment.xml +0 -91
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +0 -59
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +0 -171
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +0 -6
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js.map +0 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +0 -184
|
@@ -225,6 +225,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
|
|
|
225
225
|
});
|
|
226
226
|
}
|
|
227
227
|
const oHistoryAction = this._pushNewState(oNewState, false, bPreserveHistory, bDisablePreservationCache);
|
|
228
|
+
this.storeFocusInfoForCurrentHash();
|
|
228
229
|
return this._rebuildBrowserHistory(oHistoryAction, false);
|
|
229
230
|
}
|
|
230
231
|
|
|
@@ -517,6 +518,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
|
|
|
517
518
|
const bHasSameHash = oLastRemovedItem && oNewState.hash === oLastRemovedItem.hash;
|
|
518
519
|
if (this._oManagedHistory.length === 0 || this._oManagedHistory[this._oManagedHistory.length - 1].hash !== oNewState.hash) {
|
|
519
520
|
this._oManagedHistory.push(oNewState);
|
|
521
|
+
if (oLastRemovedItem && removeAppStateInHash(oLastRemovedItem.hash) === removeAppStateInHash(oNewState.hash)) {
|
|
522
|
+
oNewState.focusControlId = oLastRemovedItem.focusControlId;
|
|
523
|
+
oNewState.focusInfo = oLastRemovedItem.focusInfo;
|
|
524
|
+
}
|
|
520
525
|
}
|
|
521
526
|
|
|
522
527
|
// 6. Determine which actions to do on the history
|
|
@@ -789,9 +794,70 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/
|
|
|
789
794
|
const oCurrentState = this._oManagedHistory[this._oManagedHistory.length - 1];
|
|
790
795
|
const oPreviousState = this._oManagedHistory[this._oManagedHistory.length - 2];
|
|
791
796
|
return oCurrentState.hash.split("?")[0] === oPreviousState.hash.split("?")[0];
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
/**
|
|
800
|
+
* Restores the focus for the current hash, if we can find it in the history.
|
|
801
|
+
*
|
|
802
|
+
* @returns True if focus was set, false otherwise.
|
|
803
|
+
*/;
|
|
804
|
+
_proto.restoreFocusForCurrentHash = function restoreFocusForCurrentHash() {
|
|
805
|
+
const currentHash = removeAppStateInHash(this.getHash());
|
|
806
|
+
const stateForHash = this._oManagedHistory.find(state => {
|
|
807
|
+
return removeAppStateInHash(state.hash) === currentHash;
|
|
808
|
+
});
|
|
809
|
+
let focusApplied = false;
|
|
810
|
+
if (stateForHash !== null && stateForHash !== void 0 && stateForHash.focusControlId) {
|
|
811
|
+
const focusControl = sap.ui.getCore().byId(stateForHash.focusControlId);
|
|
812
|
+
focusControl === null || focusControl === void 0 ? void 0 : focusControl.focus(stateForHash.focusInfo);
|
|
813
|
+
focusApplied = focusControl !== undefined;
|
|
814
|
+
}
|
|
815
|
+
return focusApplied;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
/**
|
|
819
|
+
* Stores the ID of the currently focused control in the history for the current hash.
|
|
820
|
+
*
|
|
821
|
+
*/;
|
|
822
|
+
_proto.storeFocusInfoForCurrentHash = function storeFocusInfoForCurrentHash() {
|
|
823
|
+
const currentHash = removeAppStateInHash(this.getHash());
|
|
824
|
+
const stateForHash = this._oManagedHistory.find(state => {
|
|
825
|
+
return removeAppStateInHash(state.hash) === currentHash;
|
|
826
|
+
});
|
|
827
|
+
if (stateForHash) {
|
|
828
|
+
const focusControlId = sap.ui.getCore().getCurrentFocusedControlId();
|
|
829
|
+
const focusControl = focusControlId ? sap.ui.getCore().byId(focusControlId) : undefined;
|
|
830
|
+
stateForHash.focusControlId = focusControlId;
|
|
831
|
+
stateForHash.focusInfo = focusControl === null || focusControl === void 0 ? void 0 : focusControl.getFocusInfo();
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
/**
|
|
836
|
+
* Finds a layout value for a hash in the history.
|
|
837
|
+
*
|
|
838
|
+
* @param hash The hash to look for in the history.
|
|
839
|
+
* @returns A layout value if it could be found, undefined otherwise.
|
|
840
|
+
*/;
|
|
841
|
+
_proto.findLayoutForHash = function findLayoutForHash(hash) {
|
|
842
|
+
var _targetState;
|
|
843
|
+
if (!this.fclEnabled) {
|
|
844
|
+
return undefined;
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
// Remove all query parameters from the hash
|
|
848
|
+
const hashNoParam = hash.split("?")[0];
|
|
849
|
+
|
|
850
|
+
// Look for the state backwards, so that we find the last state in the history (e.g. if we have 2 states with the same hash but 2 different layouts)
|
|
851
|
+
let targetState;
|
|
852
|
+
for (let index = this._oManagedHistory.length - 1; index >= 0 && targetState === undefined; index--) {
|
|
853
|
+
if (this._oManagedHistory[index].hash.split("?")[0] === hashNoParam) {
|
|
854
|
+
targetState = this._oManagedHistory[index];
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
return (_targetState = targetState) === null || _targetState === void 0 ? void 0 : _targetState.sLayout;
|
|
792
858
|
};
|
|
793
859
|
return RouterProxy;
|
|
794
860
|
}(BaseObject)) || _class);
|
|
795
861
|
return RouterProxy;
|
|
796
862
|
}, false);
|
|
797
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnVtU3RhdGUiLCJFUVVBTCIsIkNPTVBBVElCTEUiLCJBTkNFU1RPUiIsIkRJRkZFUkVOVCIsImVudW1VUkxQYXJhbXMiLCJMQVlPVVRQQVJBTSIsIklBUFBTVEFURVBBUkFNIiwiY3JlYXRlR3VhcmRGcm9tSGFzaCIsInNHdWFyZEhhc2giLCJfZ3VhcmRIYXNoIiwicmVwbGFjZSIsImNoZWNrIiwic0hhc2giLCJpbmRleE9mIiwiZmluZEFwcFN0YXRlSW5IYXNoIiwiYUFwcFN0YXRlIiwibWF0Y2giLCJSZWdFeHAiLCJsZW5ndGgiLCJyZW1vdmVBcHBTdGF0ZUluSGFzaCIsInNldEFwcFN0YXRlSW5IYXNoIiwic0FwcFN0YXRlS2V5Iiwic05ld0hhc2giLCJSb3V0ZXJQcm94eSIsImRlZmluZVVJNUNsYXNzIiwiYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsImJJc0d1YXJkQ3Jvc3NBbGxvd2VkIiwic0lBcHBTdGF0ZUtleSIsIl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybyIsIl9iQXBwbHlSZXN0b3JlIiwiX2JEZWxheWVkUmVidWlsZCIsIl9wYXRoTWFwcGluZ3MiLCJpbml0Iiwib0FwcENvbXBvbmVudCIsImlzZmNsRW5hYmxlZCIsImdldFNlcnZpY2UiLCJ0aGVuIiwiX29TaGVsbFNlcnZpY2VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImluaXRSYXciLCJnZXRSb3V0ZXIiLCJ3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24iLCJoaXN0b3J5IiwicmVwbGFjZVN0YXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiZmVMZXZlbCIsInN0YXRlIiwid2luZG93IiwibG9jYXRpb24iLCJmY2xFbmFibGVkIiwiX2ZuQmxvY2tpbmdOYXZGaWx0ZXIiLCJfYmxvY2tpbmdOYXZpZ2F0aW9uRmlsdGVyIiwiYmluZCIsInJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJfZm5IYXNoR3VhcmQiLCJoYXNoR3VhcmQiLCJhZGRFdmVudExpc3RlbmVyIiwiX2JEaXNhYmxlT25IYXNoQ2hhbmdlIiwiX2JJZ25vcmVSZXN0b3JlIiwiX2JGb3JjZUZvY3VzIiwiZGVzdHJveSIsInVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9Sb3V0ZXIiLCJfb1JvdXRlciIsIl9vTWFuYWdlZEhpc3RvcnkiLCJfb05hdmlnYXRpb25HdWFyZCIsInNDdXJyZW50QXBwSGFzaCIsImdldEhhc2giLCJwdXNoIiwiX2V4dHJhY3RTdGF0ZUZyb21IYXNoIiwiZ2V0SGFzaENoYW5nZXIiLCJpc0ZvY3VzRm9yY2VkIiwic2V0Rm9jdXNGb3JjZWQiLCJiRm9yY2VkIiwicmVtb3ZlSUFwcFN0YXRlS2V5IiwibmF2VG9IYXNoIiwiYlByZXNlcnZlSGlzdG9yeSIsImJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUiLCJiRm9yY2VGb2N1cyIsImJQcmVzZXJ2ZVNoZWxsQmFja05hdmlnYXRpb25IYW5kbGVyIiwic2V0QmFja05hdmlnYXRpb24iLCJfb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24iLCJ3YWl0Rm9yIiwidW5kZWZpbmVkIiwiX2ludGVybmFsTmF2VG9IYXNoIiwiY2hlY2tIYXNoV2l0aEd1YXJkIiwib1Jlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImNvbmZpcm0iLCJnZXRUZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJvTmV3U3RhdGUiLCJhQ3VycmVudEhhc2hLZXlzIiwiX2V4dHJhY3RFbnRpdHlTZXRzRnJvbUhhc2giLCJrZXlzIiwiZXZlcnkiLCJrZXkiLCJpbmRleCIsIm9IaXN0b3J5QWN0aW9uIiwiX3B1c2hOZXdTdGF0ZSIsIl9yZWJ1aWxkQnJvd3Nlckhpc3RvcnkiLCJyZXN0b3JlSGlzdG9yeSIsInNUYXJnZXRIYXNoIiwibmF2QmFjayIsInNDdXJyZW50SGFzaCIsInNQcmV2aW91c0hhc2giLCJpIiwiaGFzaCIsImJhY2siLCJuYXZUbyIsInNSb3V0ZU5hbWUiLCJvUGFyYW1ldGVycyIsImdldFVSTCIsIm5vUHJlc2VydmF0aW9uQ2FjaGUiLCJiSXNTdGlja3lNb2RlIiwiZXhpdEZyb21BcHAiLCJiYWNrVG9QcmV2aW91c0FwcCIsImlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeSIsInN1YnN0cmluZyIsIm9Mb2NhbEd1YXJkIiwiaXNOYXZpZ2F0aW9uRmluYWxpemVkIiwic2V0TmF2aWdhdGlvbkd1YXJkIiwiZGlzY2FyZE5hdmlnYXRpb25HdWFyZCIsImhhc05hdmlnYXRpb25HdWFyZCIsImlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXIiLCJhY3RpdmF0ZVJvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24iLCJyZXNvbHZlUm91dGVNYXRjaCIsIlN5bmNocm9uaXphdGlvbiIsInNIYXNoTm9QYXJhbXMiLCJzcGxpdCIsImFUb2tlbnMiLCJuYW1lcyIsImZvckVhY2giLCJzVG9rZW4iLCJvU3RhdGUiLCJhTGF5b3V0Iiwic0xheW91dCIsInNjcmVlbk1vZGUiLCJiUmVidWlsZE9ubHkiLCJiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24iLCJsYXN0SW5kZXgiLCJpUG9wQ291bnQiLCJwb3AiLCJwcmVzZXJ2ZWQiLCJvTGFzdFJlbW92ZWRJdGVtIiwib1RvcFN0YXRlIiwiX2NvbXBhcmVDYWNoZVN0YXRlcyIsInNQcmV2aW91c0lBcHBTdGF0ZUtleSIsIm9Db21wYXJpc29uU3RhdGVSZXN1bHQiLCJiSGFzU2FtZUhhc2giLCJ0eXBlIiwic3RlcHMiLCJfZGlzYWJsZUV2ZW50T25IYXNoQ2hhbmdlIiwic3RvcCIsIl9lbmFibGVFdmVudE9uSGFzaENoYW5nZSIsImJJZ25vcmVDdXJyZW50SGFzaCIsImluaXRpYWxpemUiLCJ0aGF0Iiwib1RhcmdldFN0YXRlIiwibmV3TGV2ZWwiLCJyZXBsYWNlQXN5bmMiLCJyZXBsYWNlSGFzaCIsInNldFRpbWVvdXQiLCJiYWNrUmVwbGFjZUFzeW5jIiwiYmFja0FzeW5jIiwic2V0SGFzaCIsImdvIiwiZ2V0TGFzdEhpc3RvcnlFbnRyeSIsInNldFBhdGhNYXBwaW5nIiwibWFwcGluZ3MiLCJmaWx0ZXIiLCJtYXBwaW5nIiwib2xkUGF0aCIsIm5ld1BhdGgiLCJmaW5kIiwibSIsImFIYXNoU3BsaXQiLCJzQXBwSGFzaCIsIm9TdGF0ZTEiLCJvU3RhdGUyIiwiZXF1YWwiLCJjaGVja0lmQmFja0lzT3V0T2ZHdWFyZCIsInNQcmVzZW50SGFzaCIsInNQcmV2SGFzaCIsIm9TcGxpdEhhc2giLCJzcGxpdEhhc2giLCJhcHBTcGVjaWZpY1JvdXRlIiwiVVJJIiwiZGVjb2RlIiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsIm9DdXJyZW50U3RhdGUiLCJvUHJldmlvdXNTdGF0ZSIsIkJhc2VPYmplY3QiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvdXRlclByb3h5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgU3luY2hyb25pemF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N5bmNocm9uaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBVUkkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L1VSSVwiO1xuXG5jb25zdCBlbnVtU3RhdGUgPSB7XG5cdEVRVUFMOiAwLFxuXHRDT01QQVRJQkxFOiAxLFxuXHRBTkNFU1RPUjogMixcblx0RElGRkVSRU5UOiAzXG59O1xuY29uc3QgZW51bVVSTFBhcmFtcyA9IHtcblx0TEFZT1VUUEFSQU06IFwibGF5b3V0XCIsXG5cdElBUFBTVEFURVBBUkFNOiBcInNhcC1pYXBwLXN0YXRlXCJcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIEhhc2hHdWFyZCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNHdWFyZEhhc2ggVGhlIGhhc2ggdXNlZCBmb3IgdGhlIGd1YXJkXG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBoYXNoIGd1YXJkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUd1YXJkRnJvbUhhc2goc0d1YXJkSGFzaDogc3RyaW5nKSB7XG5cdHJldHVybiB7XG5cdFx0X2d1YXJkSGFzaDogc0d1YXJkSGFzaC5yZXBsYWNlKC9cXD9bXj9dKiQvLCBcIlwiKSwgLy8gUmVtb3ZlIHF1ZXJ5IHBhcnRcblx0XHRjaGVjazogZnVuY3Rpb24gKHNIYXNoOiBhbnkpIHtcblx0XHRcdHJldHVybiBzSGFzaC5pbmRleE9mKHRoaXMuX2d1YXJkSGFzaCkgPT09IDA7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpQXBwU3RhdGUgcGFydCBmcm9tIGEgaGFzaCAob3IgbnVsbCBpZiBub3QgZm91bmQpLlxuICpcbiAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaFxuICogQHJldHVybnMgVGhlIGlBcHBTdGF0ZSBwYXJ0IG9mIHRoZSBoYXNoXG4gKi9cbmZ1bmN0aW9uIGZpbmRBcHBTdGF0ZUluSGFzaChzSGFzaDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cdGNvbnN0IGFBcHBTdGF0ZSA9IHNIYXNoLm1hdGNoKG5ldyBSZWdFeHAoYFxcXFw/Lioke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PShbXiZdKilgKSk7XG5cdHJldHVybiBhQXBwU3RhdGUgJiYgYUFwcFN0YXRlLmxlbmd0aCA+IDEgPyBhQXBwU3RhdGVbMV0gOiBudWxsO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgaGFzaCB3aXRob3V0IGl0cyBpQXBwU3RhdGUgcGFydC5cbiAqXG4gKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2hcbiAqIEByZXR1cm5zIFRoZSBoYXNoIHdpdGhvdXQgdGhlIGlBcHBTdGF0ZVxuICovXG5mdW5jdGlvbiByZW1vdmVBcHBTdGF0ZUluSGFzaChzSGFzaDogc3RyaW5nKSB7XG5cdHJldHVybiBzSGFzaC5yZXBsYWNlKG5ldyBSZWdFeHAoYFsmP10qJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT1bXiZdKmApLCBcIlwiKTtcbn1cbi8qKlxuICogQWRkcyBhbiBpQXBwU3RhdGUgaW5zaWRlIGEgaGFzaCAob3IgcmVwbGFjZXMgYW4gZXhpc3Rpbmcgb25lKS5cbiAqXG4gKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2hcbiAqIEBwYXJhbSBzQXBwU3RhdGVLZXkgVGhlIGlBcHBTdGF0ZSB0byBhZGRcbiAqIEByZXR1cm5zIFRoZSBoYXNoIHdpdGggdGhlIGFwcCBzdGF0ZVxuICovXG5mdW5jdGlvbiBzZXRBcHBTdGF0ZUluSGFzaChzSGFzaDogYW55LCBzQXBwU3RhdGVLZXk6IGFueSkge1xuXHRsZXQgc05ld0hhc2g7XG5cblx0aWYgKHNIYXNoLmluZGV4T2YoZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTSkgPj0gMCkge1xuXHRcdC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBhbiBpQXBwU3RhdGUgcGFyYW1ldGVyIGluIHRoZSBoYXNoLCByZXBsYWNlIGl0XG5cdFx0c05ld0hhc2ggPSBzSGFzaC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTX09W14mXSpgKSwgYCR7ZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTX09JHtzQXBwU3RhdGVLZXl9YCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQWRkIHRoZSBpQXBwU3RhdGUgcGFyYW1ldGVyIGluIHRoZSBoYXNoXG5cdFx0aWYgKHNIYXNoLmluZGV4T2YoXCI/XCIpIDwgMCkge1xuXHRcdFx0c05ld0hhc2ggPSBgJHtzSGFzaH0/YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c05ld0hhc2ggPSBgJHtzSGFzaH0mYDtcblx0XHR9XG5cdFx0c05ld0hhc2ggKz0gYCR7ZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTX09JHtzQXBwU3RhdGVLZXl9YDtcblx0fVxuXG5cdHJldHVybiBzTmV3SGFzaDtcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuUm91dGVyUHJveHlcIilcbmNsYXNzIFJvdXRlclByb3h5IGV4dGVuZHMgQmFzZU9iamVjdCB7XG5cdGJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXG5cdGJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblxuXHRiSXNHdWFyZENyb3NzQWxsb3dlZCA9IGZhbHNlO1xuXG5cdHNJQXBwU3RhdGVLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdF9vU2hlbGxTZXJ2aWNlcyE6IElTaGVsbFNlcnZpY2VzO1xuXG5cdGZjbEVuYWJsZWQhOiBib29sZWFuO1xuXG5cdF9mbkJsb2NraW5nTmF2RmlsdGVyITogRnVuY3Rpb247XG5cblx0X2ZuSGFzaEd1YXJkITogRnVuY3Rpb247XG5cblx0X2JEaXNhYmxlT25IYXNoQ2hhbmdlITogYm9vbGVhbjtcblxuXHRfYklnbm9yZVJlc3RvcmUhOiBib29sZWFuO1xuXG5cdF9iRm9yY2VGb2N1cyE6IGJvb2xlYW47XG5cblx0X29Sb3V0ZXIhOiBSb3V0ZXI7XG5cblx0X29NYW5hZ2VkSGlzdG9yeSE6IGFueVtdO1xuXG5cdF9vTmF2aWdhdGlvbkd1YXJkOiBhbnk7XG5cblx0b1Jlc291cmNlQnVuZGxlPzogUmVzb3VyY2VCdW5kbGU7XG5cblx0X29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uPzogU3luY2hyb25pemF0aW9uO1xuXG5cdF9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdF9iQXBwbHlSZXN0b3JlOiBib29sZWFuID0gZmFsc2U7XG5cblx0X2JEZWxheWVkUmVidWlsZDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdF9wYXRoTWFwcGluZ3M6IHsgb2xkUGF0aDogc3RyaW5nOyBuZXdQYXRoOiBzdHJpbmcgfVtdID0gW107XG5cblx0aW5pdChvQXBwQ29tcG9uZW50OiBhbnksIGlzZmNsRW5hYmxlZDogYm9vbGVhbikge1xuXHRcdC8vIFNhdmUgdGhlIG5hbWUgb2YgdGhlIGFwcCAoaW5jbHVkaW5nIHN0YXJ0dXAgcGFyYW1ldGVycykgZm9yIHJlYnVpbGRpbmcgZnVsbCBoYXNoZXMgbGF0ZXJcblx0XHRvQXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2VydmljZShcInNoZWxsU2VydmljZXNcIilcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5fb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblxuXHRcdFx0XHR0aGlzLmluaXRSYXcob0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKSk7XG5cdFx0XHRcdC8vIFdlIHdhbnQgdG8gd2FpdCB1bnRpbCB0aGUgaW5pdGlhbCByb3V0ZU1hdGNoZWQgaXMgZG9uZSBiZWZvcmUgZG9pbmcgYW55IG5hdmlnYXRpb25cblx0XHRcdFx0dGhpcy53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdFx0XHQvLyBTZXQgZmVMZXZlbD0wIGZvciB0aGUgZmlyc3QgQXBwbGljYXRpb24gcGFnZSBpbiB0aGUgaGlzdG9yeVxuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmZUxldmVsOiAwXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aGlzdG9yeS5zdGF0ZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24gYXMgYW55XG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRoaXMuZmNsRW5hYmxlZCA9IGlzZmNsRW5hYmxlZDtcblxuXHRcdFx0XHR0aGlzLl9mbkJsb2NraW5nTmF2RmlsdGVyID0gdGhpcy5fYmxvY2tpbmdOYXZpZ2F0aW9uRmlsdGVyLmJpbmQodGhpcyk7XG5cdFx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcih0aGlzLl9mbkJsb2NraW5nTmF2RmlsdGVyKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgc2hlbGwgc2VydmljZXNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHRcdHRoaXMuX2ZuSGFzaEd1YXJkID0gdGhpcy5oYXNoR3VhcmQuYmluZCh0aGlzKTtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHRoaXMuX2ZuSGFzaEd1YXJkIGFzIGFueSk7XG5cdFx0dGhpcy5fYkRpc2FibGVPbkhhc2hDaGFuZ2UgPSBmYWxzZTtcblx0XHR0aGlzLl9iSWdub3JlUmVzdG9yZSA9IGZhbHNlO1xuXHRcdHRoaXMuX2JGb3JjZUZvY3VzID0gdHJ1ZTsgLy8gVHJpZ2dlciB0aGUgZm9jdXMgbWVjaGFuaXNtIGZvciB0aGUgZmlyc3QgdmlldyBkaXNwbGF5ZWQgYnkgdGhlIGFwcFxuXHR9XG5cblx0ZGVzdHJveSgpIHtcblx0XHRpZiAodGhpcy5fb1NoZWxsU2VydmljZXMpIHtcblx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKHRoaXMuX2ZuQmxvY2tpbmdOYXZGaWx0ZXIpO1xuXHRcdH1cblx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHRoaXMuX2ZuSGFzaEd1YXJkIGFzIGFueSk7XG5cdH1cblxuXHQvKipcblx0ICogUmF3IGluaXRpYWxpemF0aW9uIChmb3IgdW5pdCB0ZXN0cykuXG5cdCAqXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgdXNlZCBieSB0aGlzIHByb3h5XG5cdCAqL1xuXHRpbml0UmF3KG9Sb3V0ZXI6IFJvdXRlcikge1xuXHRcdHRoaXMuX29Sb3V0ZXIgPSBvUm91dGVyO1xuXHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeSA9IFtdO1xuXHRcdHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQgPSBudWxsO1xuXG5cdFx0Y29uc3Qgc0N1cnJlbnRBcHBIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0dGhpcy5fb01hbmFnZWRIaXN0b3J5LnB1c2godGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc0N1cnJlbnRBcHBIYXNoKSk7XG5cblx0XHQvLyBTZXQgdGhlIGlBcHBTdGF0ZSBpZiB0aGUgaW5pdGlhbCBoYXNoIGNvbnRhaW5zIG9uZVxuXHRcdHRoaXMuc0lBcHBTdGF0ZUtleSA9IGZpbmRBcHBTdGF0ZUluSGFzaChzQ3VycmVudEFwcEhhc2gpO1xuXHR9XG5cblx0Z2V0SGFzaCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLmdldEhhc2goKTtcblx0fVxuXG5cdGlzRm9jdXNGb3JjZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2JGb3JjZUZvY3VzO1xuXHR9XG5cblx0c2V0Rm9jdXNGb3JjZWQoYkZvcmNlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuX2JGb3JjZUZvY3VzID0gYkZvcmNlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIGludGVybmFsIHZhcmlhYmxlIHNJQXBwU3RhdGVLZXkuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eSNyZW1vdmVJQXBwU3RhdGVLZXlcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRyZW1vdmVJQXBwU3RhdGVLZXkoKSB7XG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBoYXNoLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuUm91dGVyUHJveHkjbmF2VG9IYXNoXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSBzSGFzaCBIYXNoIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gYlByZXNlcnZlSGlzdG9yeSBJZiBzZXQgdG8gdHJ1ZSwgbm9uLWFuY2VzdG9yIGVudHJpZXMgaW4gaGlzdG9yeSB3aWxsIGJlIHJldGFpbmVkXG5cdCAqIEBwYXJhbSBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlIElmIHNldCB0byB0cnVlLCBjYWNoZSBwcmVzZXJ2YXRpb24gbWVjaGFuaXNtIGlzIGRpc2FibGVkIGZvciB0aGUgY3VycmVudCBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBiRm9yY2VGb2N1cyBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGxvZ2ljIHRvIHNldCB0aGUgZm9jdXMgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWQgd2lsbCBiZSB0cmlnZ2VyZWQgKG9uUGFnZVJlYWR5KVxuXHQgKiBAcGFyYW0gYlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXIgSWYgbm90IHNldCB0byBmYWxzZSwgdGhlIGJhY2sgbmF2aWdhdGlvbiBpcyBzZXQgdG8gdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgKHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkKSB0aGF0IHJldHVybnMgJ3RydWUnIGlmIGEgbmF2aWdhdGlvbiB0b29rIHBsYWNlLCAnZmFsc2UnIGlmIHRoZSBuYXZpZ2F0aW9uIGRpZG4ndCBoYXBwZW5cblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRuYXZUb0hhc2goXG5cdFx0c0hhc2g6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbixcblx0XHRiRm9yY2VGb2N1cz86IGJvb2xlYW4sXG5cdFx0YlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXI/OiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChiUHJlc2VydmVTaGVsbEJhY2tOYXZpZ2F0aW9uSGFuZGxlciAhPT0gZmFsc2UpIHtcblx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnNldEJhY2tOYXZpZ2F0aW9uKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uLndhaXRGb3IoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9pbnRlcm5hbE5hdlRvSGFzaChzSGFzaCwgYlByZXNlcnZlSGlzdG9yeSwgYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZSwgYkZvcmNlRm9jdXMpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybykge1xuXHRcdFx0XHR0aGlzLndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuX2ludGVybmFsTmF2VG9IYXNoKHNIYXNoLCBiUHJlc2VydmVIaXN0b3J5LCBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlLCBiRm9yY2VGb2N1cyk7XG5cdFx0fVxuXHR9XG5cblx0X2ludGVybmFsTmF2VG9IYXNoKHNIYXNoOiBhbnksIGJQcmVzZXJ2ZUhpc3Rvcnk6IGFueSwgYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZTogYW55LCBiRm9yY2VGb2N1cz86IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBBZGQgdGhlIGFwcCBzdGF0ZSBpbiB0aGUgaGFzaCBpZiBuZWVkZWRcblx0XHRpZiAodGhpcy5mY2xFbmFibGVkICYmIHRoaXMuc0lBcHBTdGF0ZUtleSAmJiAhZmluZEFwcFN0YXRlSW5IYXNoKHNIYXNoKSkge1xuXHRcdFx0c0hhc2ggPSBzZXRBcHBTdGF0ZUluSGFzaChzSGFzaCwgdGhpcy5zSUFwcFN0YXRlS2V5KTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuY2hlY2tIYXNoV2l0aEd1YXJkKHNIYXNoKSkge1xuXHRcdFx0aWYgKCF0aGlzLm9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlIGhhdmUgdG8gdXNlIGEgY29uZmlybSBoZXJlIGZvciBVSSBjb25zaXN0ZW5jeSByZWFzb25zLCBhcyB3aXRoIHNvbWUgc2NlbmFyaW9zXG5cdFx0XHQvLyBpbiB0aGUgRWRpdEZsb3cgd2UgcmVseSBvbiBhIFVJNSBtZWNoYW5pc20gdGhhdCBkaXNwbGF5cyBhIGNvbmZpcm0gZGlhbG9nLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFsZXJ0XG5cdFx0XHRpZiAoIWNvbmZpcm0odGhpcy5vUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfUk9VVEVSX1BST1hZX1NBUEZFX0VYSVRfTk9UU0FWRURfTUVTU0FHRVwiKSkpIHtcblx0XHRcdFx0Ly8gVGhlIHVzZXIgY2xpY2tlZCBvbiBDYW5jZWwgLS0+IGNhbmNlbCBuYXZpZ2F0aW9uXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5iSXNHdWFyZENyb3NzQWxsb3dlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gY2FzZSB0aGUgbmF2aWdhdGlvbiB3aWxsIGNhdXNlIGEgbmV3IHZpZXcgdG8gYmUgZGlzcGxheWVkLCB3ZSBmb3JjZSB0aGUgZm9jdXNcblx0XHQvLyBJLmUuIGlmIHRoZSBrZXlzIGZvciB0aGUgaGFzaCB3ZSdyZSBuYXZpZ2F0aW5nIHRvIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGN1cnJlbnQgaGFzaCBrZXlzLlxuXHRcdGNvbnN0IG9OZXdTdGF0ZSA9IHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNIYXNoKTtcblx0XHRpZiAoIXRoaXMuX2JGb3JjZUZvY3VzKSB7XG5cdFx0XHQvLyBJZiB0aGUgZm9jdXMgd2FzIGFscmVhZHkgZm9yY2VkLCBrZWVwIGl0XG5cdFx0XHRjb25zdCBhQ3VycmVudEhhc2hLZXlzID0gdGhpcy5fZXh0cmFjdEVudGl0eVNldHNGcm9tSGFzaCh0aGlzLmdldEhhc2goKSk7XG5cdFx0XHR0aGlzLl9iRm9yY2VGb2N1cyA9XG5cdFx0XHRcdGJGb3JjZUZvY3VzIHx8XG5cdFx0XHRcdChhQ3VycmVudEhhc2hLZXlzLmxlbmd0aCA8IG9OZXdTdGF0ZS5rZXlzLmxlbmd0aCAmJlxuXHRcdFx0XHRcdGFDdXJyZW50SGFzaEtleXMuZXZlcnkoZnVuY3Rpb24gKGtleTogYW55LCBpbmRleDogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5ID09PSBvTmV3U3RhdGUua2V5c1tpbmRleF07XG5cdFx0XHRcdFx0fSkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9IaXN0b3J5QWN0aW9uID0gdGhpcy5fcHVzaE5ld1N0YXRlKG9OZXdTdGF0ZSwgZmFsc2UsIGJQcmVzZXJ2ZUhpc3RvcnksIGJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3JlYnVpbGRCcm93c2VySGlzdG9yeShvSGlzdG9yeUFjdGlvbiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBicm93c2VyIGhpc3RvcnkgaWYgZW50cmllcyBoYXZlIGJlZW4gYWRkZWQgd2l0aG91dCB1c2luZyB0aGUgUm91dGVyUHJveHkuXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIGhpc3RvcnkgYWNjb3JkaW5nbHkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSBoaXN0b3J5IGlzIHJlYnVpbHRcblx0ICovXG5cdHJlc3RvcmVIaXN0b3J5KCkge1xuXHRcdGlmICh0aGlzLl9iQXBwbHlSZXN0b3JlKSB7XG5cdFx0XHR0aGlzLl9iQXBwbHlSZXN0b3JlID0gZmFsc2U7XG5cdFx0XHRsZXQgc1RhcmdldEhhc2ggPSB0aGlzLmdldEhhc2goKTtcblx0XHRcdHNUYXJnZXRIYXNoID0gc1RhcmdldEhhc2gucmVwbGFjZSgvKFxcP3wmKXJlc3RvcmVIaXN0b3J5PXRydWUvLCBcIlwiKTtcblx0XHRcdGNvbnN0IG9OZXdTdGF0ZSA9IHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNUYXJnZXRIYXNoKTtcblxuXHRcdFx0Y29uc3Qgb0hpc3RvcnlBY3Rpb24gPSB0aGlzLl9wdXNoTmV3U3RhdGUob05ld1N0YXRlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG5cblx0XHRcdHJldHVybiB0aGlzLl9yZWJ1aWxkQnJvd3Nlckhpc3Rvcnkob0hpc3RvcnlBY3Rpb24sIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyBiYWNrIGluIHRoZSBoaXN0b3J5LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICovXG5cdG5hdkJhY2soKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0bGV0IHNQcmV2aW91c0hhc2g7XG5cblx0XHQvLyBMb29rIGZvciB0aGUgY3VycmVudCBoYXNoIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRmb3IgKGxldCBpID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcblx0XHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaV0uaGFzaCA9PT0gc0N1cnJlbnRIYXNoKSB7XG5cdFx0XHRcdHNQcmV2aW91c0hhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaSAtIDFdLmhhc2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzUHJldmlvdXNIYXNoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXZUb0hhc2goc1ByZXZpb3VzSGFzaCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlIGNvdWxkbid0IGZpbmQgYSBwcmV2aW91cyBoYXNoIGluIGhpc3Rvcnlcblx0XHRcdC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIG5hdmlnYXRpbmcgZnJvbSBhIHRyYW5zaWVudCBoYXNoIGluIGEgY3JlYXRlIGFwcCwgYW5kXG5cdFx0XHQvLyBpbiB0aGF0IGNhc2UgaGlzdG9yeS5iYWNrIHdvdWxkIGdvIGJhY2sgdG8gdGhlIEZMUFxuXHRcdFx0d2luZG93Lmhpc3RvcnkuYmFjaygpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZSB3aXRoIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUm91dGVOYW1lIFRoZSByb3V0ZSBuYW1lIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMgUGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0bmF2VG8oc1JvdXRlTmFtZTogc3RyaW5nLCBvUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLl9vUm91dGVyLmdldFVSTChzUm91dGVOYW1lLCBvUGFyYW1ldGVycyk7XG5cdFx0cmV0dXJuIHRoaXMubmF2VG9IYXNoKHNIYXNoLCBmYWxzZSwgb1BhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZSwgZmFsc2UsICFvUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGl0cyB0aGUgY3VycmVudCBhcHAgYnkgbmF2aWdhdGluZyBiYWNrXG5cdCAqIHRvIHRoZSBwcmV2aW91cyBhcHAgKGlmIGFueSkgb3IgdGhlIEZMUC5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gd2UgZXhpdCB0aGUgYXBwXG5cdCAqL1xuXHRleGl0RnJvbUFwcCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1NoZWxsU2VydmljZXMuYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIGhhc2ggY2FuIGhhdmUgYW4gaW1wYWN0IG9uIHRoZSBjdXJyZW50IHN0YXRlXG5cdCAqIGkuZS4gaWYgdGhlIGhhc2ggaXMgZXF1YWwsIGNvbXBhdGlibGUgb3IgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgc3RhdGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaCBgdHJ1ZWAgaWYgdGhlcmUgaXMgYW4gaW1wYWN0XG5cdCAqIEByZXR1cm5zIElmIHRoZXJlIGlzIGFuIGltcGFjdFxuXHQgKi9cblx0aXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNIYXNoOiBhbnkpIHtcblx0XHRpZiAoc0hhc2hbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRzSGFzaCA9IHNIYXNoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0xvY2FsR3VhcmQgPSBjcmVhdGVHdWFyZEZyb21IYXNoKHNIYXNoKTtcblx0XHRyZXR1cm4gb0xvY2FsR3VhcmQuY2hlY2sodGhpcy5nZXRIYXNoKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIG5hdmlnYXRpb24gaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICpcblx0ICogQHJldHVybnMgYGZhbHNlYCBpZiBhIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIGluIHRoZSBSb3V0ZXJQcm94eSBhbmQgaXMgbm90IHlldCBmaW5hbGl6ZWRcblx0ICovXG5cdGlzTmF2aWdhdGlvbkZpbmFsaXplZCgpIHtcblx0XHRyZXR1cm4gIXRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nICYmICF0aGlzLl9iRGVsYXllZFJlYnVpbGQ7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGFzdCBzdGF0ZSBhcyBhIGd1YXJkLlxuXHQgKiBFYWNoIGZ1dHVyZSBuYXZpZ2F0aW9uIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgZ3VhcmQsIGFuZCBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2lsbFxuXHQgKiBiZSBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBuYXZpZ2F0aW9uIGNyb3NzZXMgdGhlIGd1YXJkIChpLmUuIGdvZXMgdG8gYW4gYW5jZXN0b3Igb2YgdGhlIGd1YXJkKS5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIGZvciB0aGUgZ3VhcmRcblx0ICovXG5cdHNldE5hdmlnYXRpb25HdWFyZChzSGFzaDogc3RyaW5nKSB7XG5cdFx0dGhpcy5fb05hdmlnYXRpb25HdWFyZCA9IGNyZWF0ZUd1YXJkRnJvbUhhc2goc0hhc2gpO1xuXHRcdHRoaXMuYklzR3VhcmRDcm9zc0FsbG93ZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlcyB0aGUgbmF2aWdhdGlvbiBndWFyZC5cblx0ICovXG5cdGRpc2NhcmROYXZpZ2F0aW9uR3VhcmQoKSB7XG5cdFx0dGhpcy5fb05hdmlnYXRpb25HdWFyZCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBuYXZpZ2F0aW9uIGd1YXJkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmF2aWdhdGluZyBndWFyZCBpcyBhdmFpbGFibGVcblx0ICovXG5cdGhhc05hdmlnYXRpb25HdWFyZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb05hdmlnYXRpb25HdWFyZCAhPT0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUZXN0cyBhIGhhc2ggYWdhaW5zdCB0aGUgbmF2aWdhdGlvbiBndWFyZC5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIHRvIGJlIHRlc3RlZFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmF2aWdhdGluZyB0byB0aGUgaGFzaCBkb2Vzbid0IGNyb3NzIHRoZSBndWFyZFxuXHQgKi9cblx0Y2hlY2tIYXNoV2l0aEd1YXJkKHNIYXNoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5fb05hdmlnYXRpb25HdWFyZCA9PT0gbnVsbCB8fCB0aGlzLl9vTmF2aWdhdGlvbkd1YXJkLmNoZWNrKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIHVzZXIgYWxsb3dlZCB0aGUgbmF2aWdhdGlvbiBndWFyZCB0byBiZSBjcm9zc2VkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgY3Jvc3NpbmcgdGhlIGd1YXJkIGhhcyBiZWVuIGFsbG93ZWQgYnkgdGhlIHVzZXJcblx0ICovXG5cdGlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYklzR3VhcmRDcm9zc0FsbG93ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGVzIHRoZSBzeW5jaHJvbml6YXRpb24gZm9yIHJvdXRlTWF0Y2hlZEV2ZW50LlxuXHQgKiBUaGUgbmV4dCBOYXZUb0hhc2ggY2FsbCB3aWxsIGNyZWF0ZSBhIFN5bmNocm9uaXphdGlvbiBvYmplY3QgdGhhdCB3aWxsIGJlIHJlc29sdmVkXG5cdCAqIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG9uUm91dGVNYXRjaGVkIGV2ZW50LCBwcmV2ZW50aW5nIGFub3RoZXIgTmF2VG9IYXNoIHRvIGhhcHBlbiBpbiBwYXJhbGxlbC5cblx0ICovXG5cdGFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbigpIHtcblx0XHR0aGlzLl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybyA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSB0aGUgcm91dGVNYXRjaCBzeW5jaHJvbml6YXRpb24gb2JqZWN0LCB1bmxvY2tpbmcgcG90ZW50aWFsIHBlbmRpbmcgTmF2VG9IYXNoIGNhbGxzLlxuXHQgKi9cblx0cmVzb2x2ZVJvdXRlTWF0Y2goKSB7XG5cdFx0aWYgKHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKSB7XG5cdFx0XHR0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbi5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2VzIHN1cmUgbm8gbmF2aWdhdGlvbiBjYW4gaGFwcGVuIGJlZm9yZSBhIHJvdXRlTWF0Y2ggaGFwcGVuZWQuXG5cdCAqL1xuXHR3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKSB7XG5cdFx0dGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24gPSBuZXcgU3luY2hyb25pemF0aW9uKCk7XG5cdFx0dGhpcy5fYkFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm8gPSBmYWxzZTtcblx0fVxuXG5cdF9leHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoKHNIYXNoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG5cdFx0aWYgKHNIYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHNIYXNoID0gXCJcIjtcblx0XHR9XG5cdFx0Y29uc3Qgc0hhc2hOb1BhcmFtcyA9IHNIYXNoLnNwbGl0KFwiP1wiKVswXTsgLy8gcmVtb3ZlIHBhcmFtc1xuXHRcdGNvbnN0IGFUb2tlbnMgPSBzSGFzaE5vUGFyYW1zLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBuYW1lczogc3RyaW5nW10gPSBbXTtcblxuXHRcdGFUb2tlbnMuZm9yRWFjaCgoc1Rva2VuKSA9PiB7XG5cdFx0XHRpZiAoc1Rva2VuLmxlbmd0aCkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKHNUb2tlbi5zcGxpdChcIihcIilbMF0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG5hbWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkcyBhIHN0YXRlIGZyb20gYSBoYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2ggdG8gYmUgdXNlZCBhcyBlbnRyeVxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRfZXh0cmFjdFN0YXRlRnJvbUhhc2goc0hhc2g6IHN0cmluZykge1xuXHRcdGlmIChzSGFzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzSGFzaCA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1N0YXRlOiBhbnkgPSB7XG5cdFx0XHRrZXlzOiB0aGlzLl9leHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoKHNIYXNoKVxuXHRcdH07XG5cblx0XHQvLyBSZXRyaWV2ZSBsYXlvdXQgKGlmIGFueSlcblx0XHRjb25zdCBhTGF5b3V0ID0gc0hhc2gubWF0Y2gobmV3IFJlZ0V4cChgXFxcXD8uKiR7ZW51bVVSTFBhcmFtcy5MQVlPVVRQQVJBTX09KFteJl0qKWApKTtcblx0XHRvU3RhdGUuc0xheW91dCA9IGFMYXlvdXQgJiYgYUxheW91dC5sZW5ndGggPiAxID8gYUxheW91dFsxXSA6IG51bGw7XG5cdFx0aWYgKG9TdGF0ZS5zTGF5b3V0ID09PSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIikge1xuXHRcdFx0b1N0YXRlLnNjcmVlbk1vZGUgPSAxO1xuXHRcdH0gZWxzZSBpZiAob1N0YXRlLnNMYXlvdXQgPT09IFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiKSB7XG5cdFx0XHRvU3RhdGUuc2NyZWVuTW9kZSA9IDI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9TdGF0ZS5zY3JlZW5Nb2RlID0gMDtcblx0XHR9XG5cblx0XHRvU3RhdGUuaGFzaCA9IHNIYXNoO1xuXHRcdHJldHVybiBvU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIG5ldyBzdGF0ZSBpbnRvIHRoZSBpbnRlcm5hbCBoaXN0b3J5IHN0cnVjdHVyZS5cblx0ICogTWFrZXMgc3VyZSB0aGlzIG5ldyBzdGF0ZSBpcyBhZGRlZCBhZnRlciBhbiBhbmNlc3Rvci5cblx0ICogQWxzbyBzZXRzIHRoZSBpQXBwU3RhdGUga2V5IGluIHRoZSB3aG9sZSBoaXN0b3J5LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuUm91dGVyUHJveHlcblx0ICogQHBhcmFtIG9OZXdTdGF0ZSBUaGUgbmV3IHN0YXRlIHRvIGJlIGFkZGVkXG5cdCAqIEBwYXJhbSBiUmVidWlsZE9ubHkgYHRydWVgIGlmIHdlJ3JlIHJlYnVpbGRpbmcgdGhlIGhpc3RvcnkgYWZ0ZXIgYSBzaGVsbCBtZW51IG5hdmlnYXRpb25cblx0ICogQHBhcmFtIGJQcmVzZXJ2ZUhpc3RvcnkgSWYgc2V0IHRvIHRydWUsIG5vbi1hbmNlc3RvciBlbnRyaWVzIGluIGhpc3Rvcnkgd2lsbCBiZSByZXRhaW5lZFxuXHQgKiBAcGFyYW0gYkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uIERpc2FibGUgdGhlIG1lY2hhbmlzbSB0byByZXRhaW5lZCBtYXJrZWQgZW50cmllcyBpbiBjYWNoZVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHN0YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9wdXNoTmV3U3RhdGUob05ld1N0YXRlOiBhbnksIGJSZWJ1aWxkT25seTogYm9vbGVhbiwgYlByZXNlcnZlSGlzdG9yeTogYm9vbGVhbiwgYkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uOiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0bGV0IGxhc3RJbmRleCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxO1xuXHRcdGxldCBpUG9wQ291bnQgPSBiUmVidWlsZE9ubHkgPyAxIDogMDtcblxuXHRcdC8vIDEuIERvIHNvbWUgY2xlYW51cCBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5IDogaW4gY2FzZSB0aGUgdXNlciBoYXMgbmF2aWdhdGVkIGJhY2sgaW4gdGhlIGJyb3dzZXIgaGlzdG9yeSwgd2UgbmVlZCB0byByZW1vdmVcblx0XHQvLyB0aGUgc3RhdGVzIGFoZWFkIGluIGhpc3RvcnkgYW5kIG1ha2Ugc3VyZSB0aGUgdG9wIHN0YXRlIGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHBhZ2Vcblx0XHQvLyBXZSBkb24ndCBkbyB0aGF0IHdoZW4gcmVzdG9yaW5nIHRoZSBoaXN0b3J5LCBhcyB0aGUgY3VycmVudCBzdGF0ZSBoYXMgYmVlbiBhZGRlZCBvbiB0b3Agb2YgdGhlIGJyb3dzZXIgaGlzdG9yeVxuXHRcdC8vIGFuZCBpcyBub3QgcmVmbGVjdGVkIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRpZiAoIWJSZWJ1aWxkT25seSkge1xuXHRcdFx0d2hpbGUgKGxhc3RJbmRleCA+PSAwICYmIHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtsYXN0SW5kZXhdLmhhc2ggIT09IHNDdXJyZW50SGFzaCkge1xuXHRcdFx0XHR0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGxhc3RJbmRleC0tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBXZSBjb3VsZG4ndCBmaW5kIHRoZSBjdXJyZW50IGxvY2F0aW9uIGluIHRoZSBoaXN0b3J5LiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBicm93c2VyIHJlbG9hZFxuXHRcdFx0XHQvLyBoYXBwZW5lZCwgY2F1c2luZyBhIHJlaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZWQgaGlzdG9yeS5cblx0XHRcdFx0Ly8gSW4gdGhhdCBjYXNlLCB3ZSB1c2UgdGhlIGN1cnJlbnQgbG9jYXRpb24gYXMgdGhlIG5ldyBzdGFydGluZyBwb2ludCBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5XG5cdFx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wdXNoKHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNDdXJyZW50SGFzaCkpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHsgZmVMZXZlbDogMCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gMi4gTWFyayB0aGUgdG9wIHN0YXRlIGFzIHByZXNlcnZlZCBpZiByZXF1aXJlZFxuXHRcdGlmIChiUHJlc2VydmVIaXN0b3J5ICYmICFiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24pIHtcblx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV0ucHJlc2VydmVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyAzLiBUaGVuIHBvcCBhbGwgc3RhdGVzIHVudGlsIHdlIGZpbmQgYW4gYW5jZXN0b3Igb2YgdGhlIG5ldyBzdGF0ZSwgb3Igd2UgZmluZCBhIHN0YXRlIHRoYXQgbmVlZCB0byBiZSBwcmVzZXJ2ZWRcblx0XHRsZXQgb0xhc3RSZW1vdmVkSXRlbTtcblx0XHR3aGlsZSAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9Ub3BTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24gfHwgIW9Ub3BTdGF0ZS5wcmVzZXJ2ZWQpICYmXG5cdFx0XHRcdHRoaXMuX2NvbXBhcmVDYWNoZVN0YXRlcyhvVG9wU3RhdGUsIG9OZXdTdGF0ZSkgIT09IGVudW1TdGF0ZS5BTkNFU1RPUlxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRoZSB0b3Agc3RhdGUgaXMgbm90IGFuIGFuY2VzdG9yIG9mIG9OZXdTdGF0ZSBhbmQgaXMgbm90IHByZXNlcnZlZCAtLT4gd2UgY2FuIHBvcCBpdFxuXHRcdFx0XHRvTGFzdFJlbW92ZWRJdGVtID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5LnBvcCgpO1xuXHRcdFx0XHRpUG9wQ291bnQrKztcblx0XHRcdH0gZWxzZSBpZiAob1RvcFN0YXRlLnByZXNlcnZlZCAmJiByZW1vdmVBcHBTdGF0ZUluSGFzaChvVG9wU3RhdGUuaGFzaCkgPT09IHJlbW92ZUFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoKSkge1xuXHRcdFx0XHQvLyBXZSB0cnkgdG8gYWRkIGEgc3RhdGUgdGhhdCBpcyBhbHJlYWR5IGluIGNhY2hlIChkdWUgdG8gcHJlc2VydmVkIGZsYWcpIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGlhcHAtc3RhdGVcblx0XHRcdFx0Ly8gLS0+IHdlIHNob3VsZCBkZWxldGUgdGhlIHByZXZpb3VzIGVudHJ5IChpdCB3aWxsIGJlIGxhdGVyIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lKSBhbmQgc3RvcCBwb3BwaW5nXG5cdFx0XHRcdG9MYXN0UmVtb3ZlZEl0ZW0gPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGlQb3BDb3VudCsrO1xuXHRcdFx0XHRvTmV3U3RhdGUucHJlc2VydmVkID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhazsgLy8gQW5jZXN0b3Igb3IgcHJlc2VydmVkIHN0YXRlIGZvdW5kIC0tPiB3ZSBzdG9wIHBvcHBpbmcgb3V0IHN0YXRlc1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIDQuIGlBcHBTdGF0ZSBtYW5hZ2VtZW50XG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gZmluZEFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoKTtcblx0XHRpZiAoIXRoaXMuZmNsRW5hYmxlZCAmJiBvTGFzdFJlbW92ZWRJdGVtKSB7XG5cdFx0XHRjb25zdCBzUHJldmlvdXNJQXBwU3RhdGVLZXkgPSBmaW5kQXBwU3RhdGVJbkhhc2gob0xhc3RSZW1vdmVkSXRlbS5oYXNoKTtcblx0XHRcdGNvbnN0IG9Db21wYXJpc29uU3RhdGVSZXN1bHQgPSB0aGlzLl9jb21wYXJlQ2FjaGVTdGF0ZXMob0xhc3RSZW1vdmVkSXRlbSwgb05ld1N0YXRlKTtcblx0XHRcdC8vIGlmIGN1cnJlbnQgc3RhdGUgZG9lc24ndCBjb250YWluIGEgaS1hcHBzdGF0ZSBhbmQgdGhpcyBzdGF0ZSBzaG91bGQgcmVwbGFjZSBhIHN0YXRlIGNvbnRhaW5pbmcgYSBpQXBwU3RhdGVcblx0XHRcdC8vIHRoZW4gdGhlIHByZXZpb3VzIGlBcHBTdGF0ZSBpcyBwcmVzZXJ2ZWRcblx0XHRcdGlmIChcblx0XHRcdFx0IXRoaXMuc0lBcHBTdGF0ZUtleSAmJlxuXHRcdFx0XHRzUHJldmlvdXNJQXBwU3RhdGVLZXkgJiZcblx0XHRcdFx0KG9Db21wYXJpc29uU3RhdGVSZXN1bHQgPT09IGVudW1TdGF0ZS5FUVVBTCB8fCBvQ29tcGFyaXNvblN0YXRlUmVzdWx0ID09PSBlbnVtU3RhdGUuQ09NUEFUSUJMRSlcblx0XHRcdCkge1xuXHRcdFx0XHRvTmV3U3RhdGUuaGFzaCA9IHNldEFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoLCBzUHJldmlvdXNJQXBwU3RhdGVLZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIDUuIE5vdyB3ZSBjYW4gcHVzaCB0aGUgc3RhdGUgYXQgdGhlIHRvcCBvZiB0aGUgaW50ZXJuYWwgaGlzdG9yeVxuXHRcdGNvbnN0IGJIYXNTYW1lSGFzaCA9IG9MYXN0UmVtb3ZlZEl0ZW0gJiYgb05ld1N0YXRlLmhhc2ggPT09IG9MYXN0UmVtb3ZlZEl0ZW0uaGFzaDtcblx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdLmhhc2ggIT09IG9OZXdTdGF0ZS5oYXNoKSB7XG5cdFx0XHR0aGlzLl9vTWFuYWdlZEhpc3RvcnkucHVzaChvTmV3U3RhdGUpO1xuXHRcdH1cblxuXHRcdC8vIDYuIERldGVybWluZSB3aGljaCBhY3Rpb25zIHRvIGRvIG9uIHRoZSBoaXN0b3J5XG5cdFx0aWYgKGlQb3BDb3VudCA9PT0gMCkge1xuXHRcdFx0Ly8gTm8gc3RhdGUgd2FzIHBvcHBlZCAtLT4gYXBwZW5kXG5cdFx0XHRyZXR1cm4geyB0eXBlOiBcImFwcGVuZFwiIH07XG5cdFx0fSBlbHNlIGlmIChpUG9wQ291bnQgPT09IDEpIHtcblx0XHRcdC8vIE9ubHkgMSBzdGF0ZSB3YXMgcG9wcGVkIC0tPiByZXBsYWNlIGN1cnJlbnQgaGFzaCB1bmxlc3MgaGFzaCBpcyB0aGUgc2FtZSAodGhlbiBub3RoaW5nIHRvIGRvKVxuXHRcdFx0cmV0dXJuIGJIYXNTYW1lSGFzaCA/IHsgdHlwZTogXCJub25lXCIgfSA6IHsgdHlwZTogXCJyZXBsYWNlXCIgfTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gTW9yZSB0aGFuIDEgc3RhdGUgd2FzIHBvcHBlZCAtLT4gZ28gYmFrYyBpbiBoaXN0b3J5IGFuZCByZXBsYWNlIGhhc2ggaWYgbmVjZXNzYXJ5XG5cdFx0XHRyZXR1cm4gYkhhc1NhbWVIYXNoID8geyB0eXBlOiBcImJhY2tcIiwgc3RlcHM6IGlQb3BDb3VudCAtIDEgfSA6IHsgdHlwZTogXCJiYWNrLXJlcGxhY2VcIiwgc3RlcHM6IGlQb3BDb3VudCAtIDEgfTtcblx0XHR9XG5cdH1cblxuXHRfYmxvY2tpbmdOYXZpZ2F0aW9uRmlsdGVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9iRGlzYWJsZU9uSGFzaENoYW5nZSA/IFwiQ3VzdG9tXCIgOiBcIkNvbnRpbnVlXCI7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZSB0aGUgcm91dGluZyBieSBjYWxsaW5nIHRoZSByb3V0ZXIgc3RvcCBtZXRob2QuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuUm91dGVyUHJveHlcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0X2Rpc2FibGVFdmVudE9uSGFzaENoYW5nZSgpIHtcblx0XHR0aGlzLl9iRGlzYWJsZU9uSGFzaENoYW5nZSA9IHRydWU7XG5cdFx0dGhpcy5fb1JvdXRlci5zdG9wKCk7XG5cdH1cblxuXHQvKipcblx0ICogRW5hYmxlIHRoZSByb3V0aW5nIGJ5IGNhbGxpbmcgdGhlIHJvdXRlciBpbml0aWFsaXplIG1ldGhvZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLlJvdXRlclByb3h5I19lbmFibGVFdmVudE9uSGFzaENoYW5nZVxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuUm91dGVyUHJveHlcblx0ICogQHBhcmFtIFtiSWdub3JlQ3VycmVudEhhc2hdIElnbm9yZSB0aGUgbGFzdCBoYXNoIGV2ZW50IHRyaWdnZXJlZCBiZWZvcmUgdGhlIHJvdXRlciBoYXMgaW5pdGlhbGl6ZWRcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0X2VuYWJsZUV2ZW50T25IYXNoQ2hhbmdlKGJJZ25vcmVDdXJyZW50SGFzaDogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX2JEaXNhYmxlT25IYXNoQ2hhbmdlID0gZmFsc2U7XG5cdFx0dGhpcy5fb1JvdXRlci5pbml0aWFsaXplKGJJZ25vcmVDdXJyZW50SGFzaCk7XG5cdH1cblxuXHQvKipcblx0ICogU3luY2hyb25pemVzIHRoZSBicm93c2VyIGhpc3Rvcnkgd2l0aCB0aGUgaW50ZXJuYWwgaGlzdG9yeSBvZiB0aGUgcm91dGVyUHJveHksIGFuZCB0cmlnZ2VycyBhIG5hdmlnYXRpb24gaWYgbmVlZGVkLlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuUm91dGVyUHJveHlcblx0ICogQHBhcmFtIG9IaXN0b3J5QWN0aW9uIFNwZWNpZmllcyB0aGUgbmF2aWdhdGlvbiBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkXG5cdCAqIEBwYXJhbSBiUmVidWlsZE9ubHkgYHRydWVgIGlmIGludGVybmFsIGhpc3RvcnkgaXMgY3VycmVudGx5IGJlaW5nIHJlYnVpbHRcblx0ICogQHJldHVybnMgUHJvbWlzZSAocmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWQpIHRoYXQgcmV0dXJucyAndHJ1ZScgaWYgYSBuYXZpZ2F0aW9uIHRvb2sgcGxhY2UsICdmYWxzZScgaWYgdGhlIG5hdmlnYXRpb24gZGlkbid0IGhhcHBlblxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRfcmVidWlsZEJyb3dzZXJIaXN0b3J5KG9IaXN0b3J5QWN0aW9uOiBhbnksIGJSZWJ1aWxkT25seTogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdFx0dGhpcy5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSB0cnVlO1xuXHRcdFx0Y29uc3Qgb1RhcmdldFN0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXSxcblx0XHRcdFx0bmV3TGV2ZWwgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMTtcblxuXHRcdFx0ZnVuY3Rpb24gcmVwbGFjZUFzeW5jKCkge1xuXHRcdFx0XHRpZiAoIWJSZWJ1aWxkT25seSkge1xuXHRcdFx0XHRcdHRoYXQuX2VuYWJsZUV2ZW50T25IYXNoQ2hhbmdlKHRydWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0KHRoYXQuX29Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBhbnkpKG9UYXJnZXRTdGF0ZS5oYXNoKTtcblx0XHRcdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbih7IGZlTGV2ZWw6IG5ld0xldmVsIH0sIGhpc3Rvcnkuc3RhdGUpLCBcIlwiKTtcblxuXHRcdFx0XHRpZiAoYlJlYnVpbGRPbmx5KSB7XG5cdFx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHQvLyBUaW1lb3V0IHRvIGxldCAnaGFzaGNoYW5nZScgZXZlbnQgYmUgcHJvY2Vzc2VkIGJlZm9yZSBieSB0aGUgSGFzaENoYW5nZXIsIHNvIHRoYXRcblx0XHRcdFx0XHRcdC8vIG9uUm91dGVNYXRjaGVkIG5vdGlmaWNhdGlvbiBpc24ndCByYWlzZWRcblx0XHRcdFx0XHRcdHRoYXQuX2VuYWJsZUV2ZW50T25IYXNoQ2hhbmdlKHRydWUpO1xuXHRcdFx0XHRcdH0sIDApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0cmVzb2x2ZSh0cnVlKTsgLy8gYSBuYXZpZ2F0aW9uIG9jY3VycmVkXG5cdFx0XHR9XG5cblx0XHRcdC8vIEFzeW5jIGNhbGxiYWNrcyB3aGVuIG5hdmlnYXRpbmcgYmFjaywgaW4gb3JkZXIgdG8gbGV0IGFsbCBub3RpZmljYXRpb25zIGFuZCBldmVudHMgZ2V0IHByb2Nlc3NlZFxuXHRcdFx0ZnVuY3Rpb24gYmFja1JlcGxhY2VBc3luYygpIHtcblx0XHRcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBiYWNrUmVwbGFjZUFzeW5jKTtcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0Ly8gVGltZW91dCB0byBsZXQgJ2hhc2hjaGFuZ2UnIGV2ZW50IGJlIHByb2Nlc3NlZCBiZWZvcmUgYnkgdGhlIEhhc2hDaGFuZ2VyXG5cdFx0XHRcdFx0cmVwbGFjZUFzeW5jKCk7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBiYWNrQXN5bmMoKSB7XG5cdFx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgYmFja0FzeW5jKTtcblx0XHRcdFx0dGhhdC5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0cmVzb2x2ZSh0cnVlKTsgLy8gYSBuYXZpZ2F0aW9uIG9jY3VycmVkXG5cdFx0XHR9XG5cblx0XHRcdHRoYXQuX2JJZ25vcmVSZXN0b3JlID0gdHJ1ZTtcblxuXHRcdFx0c3dpdGNoIChvSGlzdG9yeUFjdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJyZXBsYWNlXCI6XG5cdFx0XHRcdFx0KHRoYXQuX29Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBhbnkpKG9UYXJnZXRTdGF0ZS5oYXNoKTtcblx0XHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHsgZmVMZXZlbDogbmV3TGV2ZWwgfSwgaGlzdG9yeS5zdGF0ZSksIFwiXCIpO1xuXHRcdFx0XHRcdHRoYXQuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTsgLy8gYSBuYXZpZ2F0aW9uIG9jY3VycmVkXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcImFwcGVuZFwiOlxuXHRcdFx0XHRcdHRoYXQuX29Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5zZXRIYXNoKG9UYXJnZXRTdGF0ZS5oYXNoKTtcblx0XHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHsgZmVMZXZlbDogbmV3TGV2ZWwgfSwgaGlzdG9yeS5zdGF0ZSksIFwiXCIpO1xuXHRcdFx0XHRcdHRoYXQuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTsgLy8gYSBuYXZpZ2F0aW9uIG9jY3VycmVkXG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcImJhY2tcIjpcblx0XHRcdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIGJhY2tBc3luYyk7XG5cdFx0XHRcdFx0aGlzdG9yeS5nbygtb0hpc3RvcnlBY3Rpb24uc3RlcHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJiYWNrLXJlcGxhY2VcIjpcblx0XHRcdFx0XHR0aGlzLl9kaXNhYmxlRXZlbnRPbkhhc2hDaGFuZ2UoKTtcblx0XHRcdFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIGJhY2tSZXBsYWNlQXN5bmMpO1xuXHRcdFx0XHRcdGhpc3RvcnkuZ28oLW9IaXN0b3J5QWN0aW9uLnN0ZXBzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdC8vIE5vIG5hdmlnYXRpb25cblx0XHRcdFx0XHR0aGlzLmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHJlc29sdmUoZmFsc2UpOyAvLyBubyBuYXZpZ2F0aW9uIC0tPiByZXNvbHZlIHRvIGZhbHNlXG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRMYXN0SGlzdG9yeUVudHJ5KCkge1xuXHRcdHJldHVybiB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0c2V0UGF0aE1hcHBpbmcobWFwcGluZ3M6IHsgb2xkUGF0aDogc3RyaW5nOyBuZXdQYXRoOiBzdHJpbmcgfVtdKSB7XG5cdFx0dGhpcy5fcGF0aE1hcHBpbmdzID0gbWFwcGluZ3MuZmlsdGVyKChtYXBwaW5nKSA9PiB7XG5cdFx0XHRyZXR1cm4gbWFwcGluZy5vbGRQYXRoICE9PSBtYXBwaW5nLm5ld1BhdGg7XG5cdFx0fSk7XG5cdH1cblxuXHRoYXNoR3VhcmQoKSB7XG5cdFx0bGV0IHNIYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cblx0XHRpZiAoc0hhc2guaW5kZXhPZihcInJlc3RvcmVIaXN0b3J5PXRydWVcIikgIT09IC0xKSB7XG5cdFx0XHR0aGlzLl9iQXBwbHlSZXN0b3JlID0gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZykge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIGhhc2ggbmVlZHMgdG8gYmUgY2hhbmdlZCAodGhpcyBoYXBwZW5zIGluIEZDTCB3aGVuIHN3aXRjaGluZyBiL3cgZWRpdCBhbmQgcmVhZC1vbmx5IHdpdGggMyBjb2x1bW5zIG9wZW4pXG5cdFx0XHRjb25zdCBtYXBwaW5nID0gdGhpcy5fcGF0aE1hcHBpbmdzLmZpbmQoKG0pID0+IHtcblx0XHRcdFx0cmV0dXJuIHNIYXNoLmluZGV4T2YobS5vbGRQYXRoKSA+PSAwO1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAobWFwcGluZykge1xuXHRcdFx0XHQvLyBSZXBsYWNlIHRoZSBjdXJyZW50IGhhc2hcblx0XHRcdFx0c0hhc2ggPSBzSGFzaC5yZXBsYWNlKG1hcHBpbmcub2xkUGF0aCwgbWFwcGluZy5uZXdQYXRoKTtcblx0XHRcdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbih7fSwgaGlzdG9yeS5zdGF0ZSksIFwiXCIsIHNIYXNoKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYUhhc2hTcGxpdCA9IHNIYXNoLnNwbGl0KFwiJi9cIik7XG5cdFx0XHRjb25zdCBzQXBwSGFzaCA9IGFIYXNoU3BsaXRbMV0gPyBhSGFzaFNwbGl0WzFdIDogXCJcIjtcblx0XHRcdGlmICh0aGlzLmNoZWNrSGFzaFdpdGhHdWFyZChzQXBwSGFzaCkpIHtcblx0XHRcdFx0dGhpcy5fYkRlbGF5ZWRSZWJ1aWxkID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3Qgb05ld1N0YXRlID0gdGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc0FwcEhhc2gpO1xuXHRcdFx0XHR0aGlzLl9wdXNoTmV3U3RhdGUob05ld1N0YXRlLCBmYWxzZSwgZmFsc2UsIHRydWUpO1xuXG5cdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuX2JEZWxheWVkUmVidWlsZCA9IGZhbHNlO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ29tcGFyZXMgMiBzdGF0ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU3RhdGUxXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU3RhdGUyXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5FUVVBTCBpZiBvU3RhdGUxIGFuZCBvU3RhdGUyIGFyZSBlcXVhbFxuXHQgKiAgICAgICAgLSBlbnVtU3RhdGUuQ09NUEFUSUJMRSBpZiBvU3RhdGUxIGFuZCBvU3RhdGUyIGFyZSBjb21wYXRpYmxlXG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5BTkNFU1RPUiBpZiBvU3RhdGUxIGlzIGFuIGFuY2VzdG9yIG9mIG9TdGF0ZTJcblx0ICogICAgICAgIC0gZW51bVN0YXRlLkRJRkZFUkVOVCBpZiB0aGUgMiBzdGF0ZXMgYXJlIGRpZmZlcmVudFxuXHQgKi9cblxuXHRfY29tcGFyZUNhY2hlU3RhdGVzKG9TdGF0ZTE6IGFueSwgb1N0YXRlMjogYW55KSB7XG5cdFx0Ly8gRmlyc3QgY29tcGFyZSBvYmplY3Qga2V5c1xuXHRcdGlmIChvU3RhdGUxLmtleXMubGVuZ3RoID4gb1N0YXRlMi5rZXlzLmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIGVudW1TdGF0ZS5ESUZGRVJFTlQ7XG5cdFx0fVxuXHRcdGxldCBlcXVhbCA9IHRydWU7XG5cdFx0bGV0IGluZGV4O1xuXHRcdGZvciAoaW5kZXggPSAwOyBlcXVhbCAmJiBpbmRleCA8IG9TdGF0ZTEua2V5cy5sZW5ndGg7IGluZGV4KyspIHtcblx0XHRcdGlmIChvU3RhdGUxLmtleXNbaW5kZXhdICE9PSBvU3RhdGUyLmtleXNbaW5kZXhdKSB7XG5cdFx0XHRcdGVxdWFsID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghZXF1YWwpIHtcblx0XHRcdC8vIFNvbWUgb2JqZWN0cyBrZXlzIGFyZSBkaWZmZXJlbnRcblx0XHRcdHJldHVybiBlbnVtU3RhdGUuRElGRkVSRU5UO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBrZXlzIGZyb20gb1N0YXRlMSBhcmUgaW4gb1N0YXRlMiAtLT4gY2hlY2sgaWYgYW5jZXN0b3Jcblx0XHRpZiAob1N0YXRlMS5rZXlzLmxlbmd0aCA8IG9TdGF0ZTIua2V5cy5sZW5ndGggfHwgb1N0YXRlMS5zY3JlZW5Nb2RlIDwgb1N0YXRlMi5zY3JlZW5Nb2RlKSB7XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkFOQ0VTVE9SO1xuXHRcdH1cblx0XHRpZiAob1N0YXRlMS5zY3JlZW5Nb2RlID4gb1N0YXRlMi5zY3JlZW5Nb2RlKSB7XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkRJRkZFUkVOVDsgLy8gTm90IHN1cmUgdGhpcyBjYXNlIGNhbiBoYXBwZW4uLi5cblx0XHR9XG5cblx0XHQvLyBBdCB0aGlzIHN0YWdlLCB0aGUgMiBzdGF0ZXMgaGF2ZSB0aGUgc2FtZSBvYmplY3Qga2V5cyAoaW4gdGhlIHNhbWUgb3JkZXIpIGFuZCBzYW1lIHNjcmVlbm1vZGVcblx0XHQvLyBUaGV5IGNhbiBiZSBlaXRoZXIgY29tcGF0aWJsZSBvciBlcXVhbFxuXHRcdHJldHVybiBvU3RhdGUxLnNMYXlvdXQgPT09IG9TdGF0ZTIuc0xheW91dCA/IGVudW1TdGF0ZS5FUVVBTCA6IGVudW1TdGF0ZS5DT01QQVRJQkxFO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBiYWNrIGV4aXRzIHRoZSBwcmVzZW50IGd1YXJkIHNldC5cblx0ICpcblx0ICogQHBhcmFtIHNQcmVzZW50SGFzaCBUaGUgY3VycmVudCBoYXNoLiBPbmx5IHVzZWQgZm9yIHVuaXQgdGVzdHMuXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBiYWNrIGV4aXRzIHRoZXJlIGlzIGEgZ3VhcmQgZXhpdCBvbiBiYWNrXG5cdCAqL1xuXHRjaGVja0lmQmFja0lzT3V0T2ZHdWFyZChzUHJlc2VudEhhc2g/OiBzdHJpbmcpIHtcblx0XHRsZXQgc1ByZXZIYXNoO1xuXHRcdGxldCBzQ3VycmVudEhhc2g6IHN0cmluZztcblx0XHRpZiAoc1ByZXNlbnRIYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdC8vIFdlIHVzZSB3aW5kb3cubG9jYXRpb24uaGFzaCBpbnN0ZWFkIG9mIEhhc2hDaGFuZ2VyLmdldEluc3RhbmNlKCkuZ2V0SGFzaCgpIGJlY2F1c2UgdGhlIGxhdHRlclxuXHRcdFx0Ly8gcmVwbGFjZXMgY2hhcmFjdGVycyBpbiB0aGUgVVJMIChlLmcuICUyNCByZXBsYWNlZCBieSAkKSBhbmQgaXQgY2F1c2VzIGlzc3VlcyB3aGVuIGNvbXBhcmluZ1xuXHRcdFx0Ly8gd2l0aCB0aGUgVVJMcyBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5XG5cdFx0XHRjb25zdCBvU3BsaXRIYXNoID0gdGhpcy5fb1NoZWxsU2VydmljZXMuc3BsaXRIYXNoKHdpbmRvdy5sb2NhdGlvbi5oYXNoKSBhcyBhbnk7XG5cdFx0XHRpZiAob1NwbGl0SGFzaCAmJiBvU3BsaXRIYXNoLmFwcFNwZWNpZmljUm91dGUpIHtcblx0XHRcdFx0c0N1cnJlbnRIYXNoID0gb1NwbGl0SGFzaC5hcHBTcGVjaWZpY1JvdXRlO1xuXHRcdFx0XHRpZiAoc0N1cnJlbnRIYXNoLmluZGV4T2YoXCImL1wiKSA9PT0gMCkge1xuXHRcdFx0XHRcdHNDdXJyZW50SGFzaCA9IHNDdXJyZW50SGFzaC5zdWJzdHJpbmcoMik7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNDdXJyZW50SGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTsgLy8gVG8gcmVtb3ZlIHRoZSAnIydcblx0XHRcdFx0aWYgKHNDdXJyZW50SGFzaFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3Vic3RyaW5nKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNDdXJyZW50SGFzaCA9IHNQcmVzZW50SGFzaDtcblx0XHR9XG5cdFx0c1ByZXNlbnRIYXNoID0gVVJJLmRlY29kZShzQ3VycmVudEhhc2gpO1xuXHRcdGlmICh0aGlzLl9vTmF2aWdhdGlvbkd1YXJkKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcblx0XHRcdFx0aWYgKHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpXS5oYXNoID09PSBzUHJlc2VudEhhc2gpIHtcblx0XHRcdFx0XHRzUHJldkhhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaSAtIDFdLmhhc2g7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICFzUHJldkhhc2ggfHwgIXRoaXMuY2hlY2tIYXNoV2l0aEd1YXJkKHNQcmV2SGFzaCk7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGxhc3QgMiBlbnRyaWVzIGluIHRoZSBoaXN0b3J5IHNoYXJlIHRoZSBzYW1lIGNvbnRleHQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGV5IHNoYXJlIHRoZSBzYW1lIGNvbnRleHQuXG5cdCAqL1xuXHRjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkge1xuXHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIDwgMikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9DdXJyZW50U3RhdGUgPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdO1xuXHRcdGNvbnN0IG9QcmV2aW91c1N0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAyXTtcblxuXHRcdHJldHVybiBvQ3VycmVudFN0YXRlLmhhc2guc3BsaXQoXCI/XCIpWzBdID09PSBvUHJldmlvdXNTdGF0ZS5oYXNoLnNwbGl0KFwiP1wiKVswXTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXJQcm94eTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7RUFVQSxNQUFNQSxTQUFTLEdBQUc7SUFDakJDLEtBQUssRUFBRSxDQUFDO0lBQ1JDLFVBQVUsRUFBRSxDQUFDO0lBQ2JDLFFBQVEsRUFBRSxDQUFDO0lBQ1hDLFNBQVMsRUFBRTtFQUNaLENBQUM7RUFDRCxNQUFNQyxhQUFhLEdBQUc7SUFDckJDLFdBQVcsRUFBRSxRQUFRO0lBQ3JCQyxjQUFjLEVBQUU7RUFDakIsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxtQkFBbUIsQ0FBQ0MsVUFBa0IsRUFBRTtJQUNoRCxPQUFPO01BQ05DLFVBQVUsRUFBRUQsVUFBVSxDQUFDRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztNQUFFO01BQ2hEQyxLQUFLLEVBQUUsVUFBVUMsS0FBVSxFQUFFO1FBQzVCLE9BQU9BLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQ0os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
|
|
863
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnVtU3RhdGUiLCJFUVVBTCIsIkNPTVBBVElCTEUiLCJBTkNFU1RPUiIsIkRJRkZFUkVOVCIsImVudW1VUkxQYXJhbXMiLCJMQVlPVVRQQVJBTSIsIklBUFBTVEFURVBBUkFNIiwiY3JlYXRlR3VhcmRGcm9tSGFzaCIsInNHdWFyZEhhc2giLCJfZ3VhcmRIYXNoIiwicmVwbGFjZSIsImNoZWNrIiwic0hhc2giLCJpbmRleE9mIiwiZmluZEFwcFN0YXRlSW5IYXNoIiwiYUFwcFN0YXRlIiwibWF0Y2giLCJSZWdFeHAiLCJsZW5ndGgiLCJyZW1vdmVBcHBTdGF0ZUluSGFzaCIsInNldEFwcFN0YXRlSW5IYXNoIiwic0FwcFN0YXRlS2V5Iiwic05ld0hhc2giLCJSb3V0ZXJQcm94eSIsImRlZmluZVVJNUNsYXNzIiwiYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nIiwiYklzQ29tcHV0aW5nVGl0bGVIaWVyYWNoeSIsImJJc0d1YXJkQ3Jvc3NBbGxvd2VkIiwic0lBcHBTdGF0ZUtleSIsIl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybyIsIl9iQXBwbHlSZXN0b3JlIiwiX2JEZWxheWVkUmVidWlsZCIsIl9wYXRoTWFwcGluZ3MiLCJpbml0Iiwib0FwcENvbXBvbmVudCIsImlzZmNsRW5hYmxlZCIsImdldFNlcnZpY2UiLCJ0aGVuIiwiX29TaGVsbFNlcnZpY2VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImluaXRSYXciLCJnZXRSb3V0ZXIiLCJ3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24iLCJoaXN0b3J5IiwicmVwbGFjZVN0YXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiZmVMZXZlbCIsInN0YXRlIiwid2luZG93IiwibG9jYXRpb24iLCJmY2xFbmFibGVkIiwiX2ZuQmxvY2tpbmdOYXZGaWx0ZXIiLCJfYmxvY2tpbmdOYXZpZ2F0aW9uRmlsdGVyIiwiYmluZCIsInJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJfZm5IYXNoR3VhcmQiLCJoYXNoR3VhcmQiLCJhZGRFdmVudExpc3RlbmVyIiwiX2JEaXNhYmxlT25IYXNoQ2hhbmdlIiwiX2JJZ25vcmVSZXN0b3JlIiwiX2JGb3JjZUZvY3VzIiwiZGVzdHJveSIsInVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9Sb3V0ZXIiLCJfb1JvdXRlciIsIl9vTWFuYWdlZEhpc3RvcnkiLCJfb05hdmlnYXRpb25HdWFyZCIsInNDdXJyZW50QXBwSGFzaCIsImdldEhhc2giLCJwdXNoIiwiX2V4dHJhY3RTdGF0ZUZyb21IYXNoIiwiZ2V0SGFzaENoYW5nZXIiLCJpc0ZvY3VzRm9yY2VkIiwic2V0Rm9jdXNGb3JjZWQiLCJiRm9yY2VkIiwicmVtb3ZlSUFwcFN0YXRlS2V5IiwibmF2VG9IYXNoIiwiYlByZXNlcnZlSGlzdG9yeSIsImJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUiLCJiRm9yY2VGb2N1cyIsImJQcmVzZXJ2ZVNoZWxsQmFja05hdmlnYXRpb25IYW5kbGVyIiwic2V0QmFja05hdmlnYXRpb24iLCJfb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24iLCJ3YWl0Rm9yIiwidW5kZWZpbmVkIiwiX2ludGVybmFsTmF2VG9IYXNoIiwiY2hlY2tIYXNoV2l0aEd1YXJkIiwib1Jlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImNvbmZpcm0iLCJnZXRUZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJvTmV3U3RhdGUiLCJhQ3VycmVudEhhc2hLZXlzIiwiX2V4dHJhY3RFbnRpdHlTZXRzRnJvbUhhc2giLCJrZXlzIiwiZXZlcnkiLCJrZXkiLCJpbmRleCIsIm9IaXN0b3J5QWN0aW9uIiwiX3B1c2hOZXdTdGF0ZSIsInN0b3JlRm9jdXNJbmZvRm9yQ3VycmVudEhhc2giLCJfcmVidWlsZEJyb3dzZXJIaXN0b3J5IiwicmVzdG9yZUhpc3RvcnkiLCJzVGFyZ2V0SGFzaCIsIm5hdkJhY2siLCJzQ3VycmVudEhhc2giLCJzUHJldmlvdXNIYXNoIiwiaSIsImhhc2giLCJiYWNrIiwibmF2VG8iLCJzUm91dGVOYW1lIiwib1BhcmFtZXRlcnMiLCJnZXRVUkwiLCJub1ByZXNlcnZhdGlvbkNhY2hlIiwiYklzU3RpY2t5TW9kZSIsImV4aXRGcm9tQXBwIiwiYmFja1RvUHJldmlvdXNBcHAiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJzdWJzdHJpbmciLCJvTG9jYWxHdWFyZCIsImlzTmF2aWdhdGlvbkZpbmFsaXplZCIsInNldE5hdmlnYXRpb25HdWFyZCIsImRpc2NhcmROYXZpZ2F0aW9uR3VhcmQiLCJoYXNOYXZpZ2F0aW9uR3VhcmQiLCJpc0d1YXJkQ3Jvc3NBbGxvd2VkQnlVc2VyIiwiYWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uIiwicmVzb2x2ZVJvdXRlTWF0Y2giLCJTeW5jaHJvbml6YXRpb24iLCJzSGFzaE5vUGFyYW1zIiwic3BsaXQiLCJhVG9rZW5zIiwibmFtZXMiLCJmb3JFYWNoIiwic1Rva2VuIiwib1N0YXRlIiwiYUxheW91dCIsInNMYXlvdXQiLCJzY3JlZW5Nb2RlIiwiYlJlYnVpbGRPbmx5IiwiYkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uIiwibGFzdEluZGV4IiwiaVBvcENvdW50IiwicG9wIiwicHJlc2VydmVkIiwib0xhc3RSZW1vdmVkSXRlbSIsIm9Ub3BTdGF0ZSIsIl9jb21wYXJlQ2FjaGVTdGF0ZXMiLCJzUHJldmlvdXNJQXBwU3RhdGVLZXkiLCJvQ29tcGFyaXNvblN0YXRlUmVzdWx0IiwiYkhhc1NhbWVIYXNoIiwiZm9jdXNDb250cm9sSWQiLCJmb2N1c0luZm8iLCJ0eXBlIiwic3RlcHMiLCJfZGlzYWJsZUV2ZW50T25IYXNoQ2hhbmdlIiwic3RvcCIsIl9lbmFibGVFdmVudE9uSGFzaENoYW5nZSIsImJJZ25vcmVDdXJyZW50SGFzaCIsImluaXRpYWxpemUiLCJ0aGF0Iiwib1RhcmdldFN0YXRlIiwibmV3TGV2ZWwiLCJyZXBsYWNlQXN5bmMiLCJyZXBsYWNlSGFzaCIsInNldFRpbWVvdXQiLCJiYWNrUmVwbGFjZUFzeW5jIiwiYmFja0FzeW5jIiwic2V0SGFzaCIsImdvIiwiZ2V0TGFzdEhpc3RvcnlFbnRyeSIsInNldFBhdGhNYXBwaW5nIiwibWFwcGluZ3MiLCJmaWx0ZXIiLCJtYXBwaW5nIiwib2xkUGF0aCIsIm5ld1BhdGgiLCJmaW5kIiwibSIsImFIYXNoU3BsaXQiLCJzQXBwSGFzaCIsIm9TdGF0ZTEiLCJvU3RhdGUyIiwiZXF1YWwiLCJjaGVja0lmQmFja0lzT3V0T2ZHdWFyZCIsInNQcmVzZW50SGFzaCIsInNQcmV2SGFzaCIsIm9TcGxpdEhhc2giLCJzcGxpdEhhc2giLCJhcHBTcGVjaWZpY1JvdXRlIiwiVVJJIiwiZGVjb2RlIiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsIm9DdXJyZW50U3RhdGUiLCJvUHJldmlvdXNTdGF0ZSIsInJlc3RvcmVGb2N1c0ZvckN1cnJlbnRIYXNoIiwiY3VycmVudEhhc2giLCJzdGF0ZUZvckhhc2giLCJmb2N1c0FwcGxpZWQiLCJmb2N1c0NvbnRyb2wiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJieUlkIiwiZm9jdXMiLCJnZXRDdXJyZW50Rm9jdXNlZENvbnRyb2xJZCIsImdldEZvY3VzSW5mbyIsImZpbmRMYXlvdXRGb3JIYXNoIiwiaGFzaE5vUGFyYW0iLCJ0YXJnZXRTdGF0ZSIsIkJhc2VPYmplY3QiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvdXRlclByb3h5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgU3luY2hyb25pemF0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N5bmNocm9uaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IEJhc2VPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL09iamVjdFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBVUkkgZnJvbSBcInNhcC91aS90aGlyZHBhcnR5L1VSSVwiO1xuXG5jb25zdCBlbnVtU3RhdGUgPSB7XG5cdEVRVUFMOiAwLFxuXHRDT01QQVRJQkxFOiAxLFxuXHRBTkNFU1RPUjogMixcblx0RElGRkVSRU5UOiAzXG59O1xuY29uc3QgZW51bVVSTFBhcmFtcyA9IHtcblx0TEFZT1VUUEFSQU06IFwibGF5b3V0XCIsXG5cdElBUFBTVEFURVBBUkFNOiBcInNhcC1pYXBwLXN0YXRlXCJcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIEhhc2hHdWFyZCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHNHdWFyZEhhc2ggVGhlIGhhc2ggdXNlZCBmb3IgdGhlIGd1YXJkXG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBoYXNoIGd1YXJkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUd1YXJkRnJvbUhhc2goc0d1YXJkSGFzaDogc3RyaW5nKSB7XG5cdHJldHVybiB7XG5cdFx0X2d1YXJkSGFzaDogc0d1YXJkSGFzaC5yZXBsYWNlKC9cXD9bXj9dKiQvLCBcIlwiKSwgLy8gUmVtb3ZlIHF1ZXJ5IHBhcnRcblx0XHRjaGVjazogZnVuY3Rpb24gKHNIYXNoOiBhbnkpIHtcblx0XHRcdHJldHVybiBzSGFzaC5pbmRleE9mKHRoaXMuX2d1YXJkSGFzaCkgPT09IDA7XG5cdFx0fVxuXHR9O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpQXBwU3RhdGUgcGFydCBmcm9tIGEgaGFzaCAob3IgbnVsbCBpZiBub3QgZm91bmQpLlxuICpcbiAqIEBwYXJhbSBzSGFzaCBUaGUgaGFzaFxuICogQHJldHVybnMgVGhlIGlBcHBTdGF0ZSBwYXJ0IG9mIHRoZSBoYXNoXG4gKi9cbmZ1bmN0aW9uIGZpbmRBcHBTdGF0ZUluSGFzaChzSGFzaDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cdGNvbnN0IGFBcHBTdGF0ZSA9IHNIYXNoLm1hdGNoKG5ldyBSZWdFeHAoYFxcXFw/Lioke2VudW1VUkxQYXJhbXMuSUFQUFNUQVRFUEFSQU19PShbXiZdKilgKSk7XG5cdHJldHVybiBhQXBwU3RhdGUgJiYgYUFwcFN0YXRlLmxlbmd0aCA+IDEgPyBhQXBwU3RhdGVbMV0gOiBudWxsO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgaGFzaCB3aXRob3V0IGl0cyBpQXBwU3RhdGUgcGFydC5cbiAqXG4gKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2hcbiAqIEByZXR1cm5zIFRoZSBoYXNoIHdpdGhvdXQgdGhlIGlBcHBTdGF0ZVxuICovXG5mdW5jdGlvbiByZW1vdmVBcHBTdGF0ZUluSGFzaChzSGFzaDogc3RyaW5nKSB7XG5cdHJldHVybiBzSGFzaC5yZXBsYWNlKG5ldyBSZWdFeHAoYFsmP10qJHtlbnVtVVJMUGFyYW1zLklBUFBTVEFURVBBUkFNfT1bXiZdKmApLCBcIlwiKTtcbn1cbi8qKlxuICogQWRkcyBhbiBpQXBwU3RhdGUgaW5zaWRlIGEgaGFzaCAob3IgcmVwbGFjZXMgYW4gZXhpc3Rpbmcgb25lKS5cbiAqXG4gKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2hcbiAqIEBwYXJhbSBzQXBwU3RhdGVLZXkgVGhlIGlBcHBTdGF0ZSB0byBhZGRcbiAqIEByZXR1cm5zIFRoZSBoYXNoIHdpdGggdGhlIGFwcCBzdGF0ZVxuICovXG5mdW5jdGlvbiBzZXRBcHBTdGF0ZUluSGFzaChzSGFzaDogYW55LCBzQXBwU3RhdGVLZXk6IGFueSkge1xuXHRsZXQgc05ld0hhc2g7XG5cblx0aWYgKHNIYXNoLmluZGV4T2YoZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTSkgPj0gMCkge1xuXHRcdC8vIElmIHRoZXJlJ3MgYWxyZWFkeSBhbiBpQXBwU3RhdGUgcGFyYW1ldGVyIGluIHRoZSBoYXNoLCByZXBsYWNlIGl0XG5cdFx0c05ld0hhc2ggPSBzSGFzaC5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTX09W14mXSpgKSwgYCR7ZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTX09JHtzQXBwU3RhdGVLZXl9YCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gQWRkIHRoZSBpQXBwU3RhdGUgcGFyYW1ldGVyIGluIHRoZSBoYXNoXG5cdFx0aWYgKHNIYXNoLmluZGV4T2YoXCI/XCIpIDwgMCkge1xuXHRcdFx0c05ld0hhc2ggPSBgJHtzSGFzaH0/YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c05ld0hhc2ggPSBgJHtzSGFzaH0mYDtcblx0XHR9XG5cdFx0c05ld0hhc2ggKz0gYCR7ZW51bVVSTFBhcmFtcy5JQVBQU1RBVEVQQVJBTX09JHtzQXBwU3RhdGVLZXl9YDtcblx0fVxuXG5cdHJldHVybiBzTmV3SGFzaDtcbn1cblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuUm91dGVyUHJveHlcIilcbmNsYXNzIFJvdXRlclByb3h5IGV4dGVuZHMgQmFzZU9iamVjdCB7XG5cdGJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXG5cdGJJc0NvbXB1dGluZ1RpdGxlSGllcmFjaHkgPSBmYWxzZTtcblxuXHRiSXNHdWFyZENyb3NzQWxsb3dlZCA9IGZhbHNlO1xuXG5cdHNJQXBwU3RhdGVLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG5cdF9vU2hlbGxTZXJ2aWNlcyE6IElTaGVsbFNlcnZpY2VzO1xuXG5cdGZjbEVuYWJsZWQhOiBib29sZWFuO1xuXG5cdF9mbkJsb2NraW5nTmF2RmlsdGVyITogRnVuY3Rpb247XG5cblx0X2ZuSGFzaEd1YXJkITogRnVuY3Rpb247XG5cblx0X2JEaXNhYmxlT25IYXNoQ2hhbmdlITogYm9vbGVhbjtcblxuXHRfYklnbm9yZVJlc3RvcmUhOiBib29sZWFuO1xuXG5cdF9iRm9yY2VGb2N1cyE6IGJvb2xlYW47XG5cblx0X29Sb3V0ZXIhOiBSb3V0ZXI7XG5cblx0X29NYW5hZ2VkSGlzdG9yeSE6IGFueVtdO1xuXG5cdF9vTmF2aWdhdGlvbkd1YXJkOiBhbnk7XG5cblx0b1Jlc291cmNlQnVuZGxlPzogUmVzb3VyY2VCdW5kbGU7XG5cblx0X29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uPzogU3luY2hyb25pemF0aW9uO1xuXG5cdF9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdF9iQXBwbHlSZXN0b3JlOiBib29sZWFuID0gZmFsc2U7XG5cblx0X2JEZWxheWVkUmVidWlsZDogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdF9wYXRoTWFwcGluZ3M6IHsgb2xkUGF0aDogc3RyaW5nOyBuZXdQYXRoOiBzdHJpbmcgfVtdID0gW107XG5cblx0aW5pdChvQXBwQ29tcG9uZW50OiBhbnksIGlzZmNsRW5hYmxlZDogYm9vbGVhbikge1xuXHRcdC8vIFNhdmUgdGhlIG5hbWUgb2YgdGhlIGFwcCAoaW5jbHVkaW5nIHN0YXJ0dXAgcGFyYW1ldGVycykgZm9yIHJlYnVpbGRpbmcgZnVsbCBoYXNoZXMgbGF0ZXJcblx0XHRvQXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2VydmljZShcInNoZWxsU2VydmljZXNcIilcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5fb1NoZWxsU2VydmljZXMgPSBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblxuXHRcdFx0XHR0aGlzLmluaXRSYXcob0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKSk7XG5cdFx0XHRcdC8vIFdlIHdhbnQgdG8gd2FpdCB1bnRpbCB0aGUgaW5pdGlhbCByb3V0ZU1hdGNoZWQgaXMgZG9uZSBiZWZvcmUgZG9pbmcgYW55IG5hdmlnYXRpb25cblx0XHRcdFx0dGhpcy53YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKTtcblxuXHRcdFx0XHQvLyBTZXQgZmVMZXZlbD0wIGZvciB0aGUgZmlyc3QgQXBwbGljYXRpb24gcGFnZSBpbiB0aGUgaGlzdG9yeVxuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRmZUxldmVsOiAwXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0aGlzdG9yeS5zdGF0ZVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHR3aW5kb3cubG9jYXRpb24gYXMgYW55XG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRoaXMuZmNsRW5hYmxlZCA9IGlzZmNsRW5hYmxlZDtcblxuXHRcdFx0XHR0aGlzLl9mbkJsb2NraW5nTmF2RmlsdGVyID0gdGhpcy5fYmxvY2tpbmdOYXZpZ2F0aW9uRmlsdGVyLmJpbmQodGhpcyk7XG5cdFx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnJlZ2lzdGVyTmF2aWdhdGlvbkZpbHRlcih0aGlzLl9mbkJsb2NraW5nTmF2RmlsdGVyKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSB0aGUgc2hlbGwgc2VydmljZXNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHRcdHRoaXMuX2ZuSGFzaEd1YXJkID0gdGhpcy5oYXNoR3VhcmQuYmluZCh0aGlzKTtcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHRoaXMuX2ZuSGFzaEd1YXJkIGFzIGFueSk7XG5cdFx0dGhpcy5fYkRpc2FibGVPbkhhc2hDaGFuZ2UgPSBmYWxzZTtcblx0XHR0aGlzLl9iSWdub3JlUmVzdG9yZSA9IGZhbHNlO1xuXHRcdHRoaXMuX2JGb3JjZUZvY3VzID0gdHJ1ZTsgLy8gVHJpZ2dlciB0aGUgZm9jdXMgbWVjaGFuaXNtIGZvciB0aGUgZmlyc3QgdmlldyBkaXNwbGF5ZWQgYnkgdGhlIGFwcFxuXHR9XG5cblx0ZGVzdHJveSgpIHtcblx0XHRpZiAodGhpcy5fb1NoZWxsU2VydmljZXMpIHtcblx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnVucmVnaXN0ZXJOYXZpZ2F0aW9uRmlsdGVyKHRoaXMuX2ZuQmxvY2tpbmdOYXZGaWx0ZXIpO1xuXHRcdH1cblx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIHRoaXMuX2ZuSGFzaEd1YXJkIGFzIGFueSk7XG5cdH1cblxuXHQvKipcblx0ICogUmF3IGluaXRpYWxpemF0aW9uIChmb3IgdW5pdCB0ZXN0cykuXG5cdCAqXG5cdCAqIEBwYXJhbSBvUm91dGVyIFRoZSByb3V0ZXIgdXNlZCBieSB0aGlzIHByb3h5XG5cdCAqL1xuXHRpbml0UmF3KG9Sb3V0ZXI6IFJvdXRlcikge1xuXHRcdHRoaXMuX29Sb3V0ZXIgPSBvUm91dGVyO1xuXHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeSA9IFtdO1xuXHRcdHRoaXMuX29OYXZpZ2F0aW9uR3VhcmQgPSBudWxsO1xuXG5cdFx0Y29uc3Qgc0N1cnJlbnRBcHBIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0dGhpcy5fb01hbmFnZWRIaXN0b3J5LnB1c2godGhpcy5fZXh0cmFjdFN0YXRlRnJvbUhhc2goc0N1cnJlbnRBcHBIYXNoKSk7XG5cblx0XHQvLyBTZXQgdGhlIGlBcHBTdGF0ZSBpZiB0aGUgaW5pdGlhbCBoYXNoIGNvbnRhaW5zIG9uZVxuXHRcdHRoaXMuc0lBcHBTdGF0ZUtleSA9IGZpbmRBcHBTdGF0ZUluSGFzaChzQ3VycmVudEFwcEhhc2gpO1xuXHR9XG5cblx0Z2V0SGFzaCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLmdldEhhc2goKTtcblx0fVxuXG5cdGlzRm9jdXNGb3JjZWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2JGb3JjZUZvY3VzO1xuXHR9XG5cblx0c2V0Rm9jdXNGb3JjZWQoYkZvcmNlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuX2JGb3JjZUZvY3VzID0gYkZvcmNlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIGludGVybmFsIHZhcmlhYmxlIHNJQXBwU3RhdGVLZXkuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eSNyZW1vdmVJQXBwU3RhdGVLZXlcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRyZW1vdmVJQXBwU3RhdGVLZXkoKSB7XG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpYyBoYXNoLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuUm91dGVyUHJveHkjbmF2VG9IYXNoXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eVxuXHQgKiBAc3RhdGljXG5cdCAqIEBwYXJhbSBzSGFzaCBIYXNoIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gYlByZXNlcnZlSGlzdG9yeSBJZiBzZXQgdG8gdHJ1ZSwgbm9uLWFuY2VzdG9yIGVudHJpZXMgaW4gaGlzdG9yeSB3aWxsIGJlIHJldGFpbmVkXG5cdCAqIEBwYXJhbSBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlIElmIHNldCB0byB0cnVlLCBjYWNoZSBwcmVzZXJ2YXRpb24gbWVjaGFuaXNtIGlzIGRpc2FibGVkIGZvciB0aGUgY3VycmVudCBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBiRm9yY2VGb2N1cyBJZiBzZXQgdG8gdHJ1ZSwgdGhlIGxvZ2ljIHRvIHNldCB0aGUgZm9jdXMgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWQgd2lsbCBiZSB0cmlnZ2VyZWQgKG9uUGFnZVJlYWR5KVxuXHQgKiBAcGFyYW0gYlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXIgSWYgbm90IHNldCB0byBmYWxzZSwgdGhlIGJhY2sgbmF2aWdhdGlvbiBpcyBzZXQgdG8gdW5kZWZpbmVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgKHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkKSB0aGF0IHJldHVybnMgJ3RydWUnIGlmIGEgbmF2aWdhdGlvbiB0b29rIHBsYWNlLCAnZmFsc2UnIGlmIHRoZSBuYXZpZ2F0aW9uIGRpZG4ndCBoYXBwZW5cblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRuYXZUb0hhc2goXG5cdFx0c0hhc2g6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbixcblx0XHRiRm9yY2VGb2N1cz86IGJvb2xlYW4sXG5cdFx0YlByZXNlcnZlU2hlbGxCYWNrTmF2aWdhdGlvbkhhbmRsZXI/OiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmIChiUHJlc2VydmVTaGVsbEJhY2tOYXZpZ2F0aW9uSGFuZGxlciAhPT0gZmFsc2UpIHtcblx0XHRcdHRoaXMuX29TaGVsbFNlcnZpY2VzLnNldEJhY2tOYXZpZ2F0aW9uKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbikge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uLndhaXRGb3IoKS50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9pbnRlcm5hbE5hdlRvSGFzaChzSGFzaCwgYlByZXNlcnZlSGlzdG9yeSwgYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZSwgYkZvcmNlRm9jdXMpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybykge1xuXHRcdFx0XHR0aGlzLndhaXRGb3JSb3V0ZU1hdGNoQmVmb3JlTmF2aWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuX2ludGVybmFsTmF2VG9IYXNoKHNIYXNoLCBiUHJlc2VydmVIaXN0b3J5LCBiRGlzYWJsZVByZXNlcnZhdGlvbkNhY2hlLCBiRm9yY2VGb2N1cyk7XG5cdFx0fVxuXHR9XG5cblx0X2ludGVybmFsTmF2VG9IYXNoKHNIYXNoOiBhbnksIGJQcmVzZXJ2ZUhpc3Rvcnk6IGFueSwgYkRpc2FibGVQcmVzZXJ2YXRpb25DYWNoZTogYW55LCBiRm9yY2VGb2N1cz86IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBBZGQgdGhlIGFwcCBzdGF0ZSBpbiB0aGUgaGFzaCBpZiBuZWVkZWRcblx0XHRpZiAodGhpcy5mY2xFbmFibGVkICYmIHRoaXMuc0lBcHBTdGF0ZUtleSAmJiAhZmluZEFwcFN0YXRlSW5IYXNoKHNIYXNoKSkge1xuXHRcdFx0c0hhc2ggPSBzZXRBcHBTdGF0ZUluSGFzaChzSGFzaCwgdGhpcy5zSUFwcFN0YXRlS2V5KTtcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuY2hlY2tIYXNoV2l0aEd1YXJkKHNIYXNoKSkge1xuXHRcdFx0aWYgKCF0aGlzLm9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlIGhhdmUgdG8gdXNlIGEgY29uZmlybSBoZXJlIGZvciBVSSBjb25zaXN0ZW5jeSByZWFzb25zLCBhcyB3aXRoIHNvbWUgc2NlbmFyaW9zXG5cdFx0XHQvLyBpbiB0aGUgRWRpdEZsb3cgd2UgcmVseSBvbiBhIFVJNSBtZWNoYW5pc20gdGhhdCBkaXNwbGF5cyBhIGNvbmZpcm0gZGlhbG9nLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFsZXJ0XG5cdFx0XHRpZiAoIWNvbmZpcm0odGhpcy5vUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfUk9VVEVSX1BST1hZX1NBUEZFX0VYSVRfTk9UU0FWRURfTUVTU0FHRVwiKSkpIHtcblx0XHRcdFx0Ly8gVGhlIHVzZXIgY2xpY2tlZCBvbiBDYW5jZWwgLS0+IGNhbmNlbCBuYXZpZ2F0aW9uXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5iSXNHdWFyZENyb3NzQWxsb3dlZCA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gSW4gY2FzZSB0aGUgbmF2aWdhdGlvbiB3aWxsIGNhdXNlIGEgbmV3IHZpZXcgdG8gYmUgZGlzcGxheWVkLCB3ZSBmb3JjZSB0aGUgZm9jdXNcblx0XHQvLyBJLmUuIGlmIHRoZSBrZXlzIGZvciB0aGUgaGFzaCB3ZSdyZSBuYXZpZ2F0aW5nIHRvIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGN1cnJlbnQgaGFzaCBrZXlzLlxuXHRcdGNvbnN0IG9OZXdTdGF0ZSA9IHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNIYXNoKTtcblx0XHRpZiAoIXRoaXMuX2JGb3JjZUZvY3VzKSB7XG5cdFx0XHQvLyBJZiB0aGUgZm9jdXMgd2FzIGFscmVhZHkgZm9yY2VkLCBrZWVwIGl0XG5cdFx0XHRjb25zdCBhQ3VycmVudEhhc2hLZXlzID0gdGhpcy5fZXh0cmFjdEVudGl0eVNldHNGcm9tSGFzaCh0aGlzLmdldEhhc2goKSk7XG5cdFx0XHR0aGlzLl9iRm9yY2VGb2N1cyA9XG5cdFx0XHRcdGJGb3JjZUZvY3VzIHx8XG5cdFx0XHRcdChhQ3VycmVudEhhc2hLZXlzLmxlbmd0aCA8IG9OZXdTdGF0ZS5rZXlzLmxlbmd0aCAmJlxuXHRcdFx0XHRcdGFDdXJyZW50SGFzaEtleXMuZXZlcnkoZnVuY3Rpb24gKGtleTogYW55LCBpbmRleDogYW55KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ga2V5ID09PSBvTmV3U3RhdGUua2V5c1tpbmRleF07XG5cdFx0XHRcdFx0fSkpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9IaXN0b3J5QWN0aW9uID0gdGhpcy5fcHVzaE5ld1N0YXRlKG9OZXdTdGF0ZSwgZmFsc2UsIGJQcmVzZXJ2ZUhpc3RvcnksIGJEaXNhYmxlUHJlc2VydmF0aW9uQ2FjaGUpO1xuXHRcdHRoaXMuc3RvcmVGb2N1c0luZm9Gb3JDdXJyZW50SGFzaCgpO1xuXG5cdFx0cmV0dXJuIHRoaXMuX3JlYnVpbGRCcm93c2VySGlzdG9yeShvSGlzdG9yeUFjdGlvbiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFycyBicm93c2VyIGhpc3RvcnkgaWYgZW50cmllcyBoYXZlIGJlZW4gYWRkZWQgd2l0aG91dCB1c2luZyB0aGUgUm91dGVyUHJveHkuXG5cdCAqIFVwZGF0ZXMgdGhlIGludGVybmFsIGhpc3RvcnkgYWNjb3JkaW5nbHkuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSBoaXN0b3J5IGlzIHJlYnVpbHRcblx0ICovXG5cdHJlc3RvcmVIaXN0b3J5KCkge1xuXHRcdGlmICh0aGlzLl9iQXBwbHlSZXN0b3JlKSB7XG5cdFx0XHR0aGlzLl9iQXBwbHlSZXN0b3JlID0gZmFsc2U7XG5cdFx0XHRsZXQgc1RhcmdldEhhc2ggPSB0aGlzLmdldEhhc2goKTtcblx0XHRcdHNUYXJnZXRIYXNoID0gc1RhcmdldEhhc2gucmVwbGFjZSgvKFxcP3wmKXJlc3RvcmVIaXN0b3J5PXRydWUvLCBcIlwiKTtcblx0XHRcdGNvbnN0IG9OZXdTdGF0ZSA9IHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNUYXJnZXRIYXNoKTtcblxuXHRcdFx0Y29uc3Qgb0hpc3RvcnlBY3Rpb24gPSB0aGlzLl9wdXNoTmV3U3RhdGUob05ld1N0YXRlLCB0cnVlLCBmYWxzZSwgdHJ1ZSk7XG5cblx0XHRcdHJldHVybiB0aGlzLl9yZWJ1aWxkQnJvd3Nlckhpc3Rvcnkob0hpc3RvcnlBY3Rpb24sIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyBiYWNrIGluIHRoZSBoaXN0b3J5LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICovXG5cdG5hdkJhY2soKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0bGV0IHNQcmV2aW91c0hhc2g7XG5cblx0XHQvLyBMb29rIGZvciB0aGUgY3VycmVudCBoYXNoIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRmb3IgKGxldCBpID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcblx0XHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaV0uaGFzaCA9PT0gc0N1cnJlbnRIYXNoKSB7XG5cdFx0XHRcdHNQcmV2aW91c0hhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaSAtIDFdLmhhc2g7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzUHJldmlvdXNIYXNoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5uYXZUb0hhc2goc1ByZXZpb3VzSGFzaCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlIGNvdWxkbid0IGZpbmQgYSBwcmV2aW91cyBoYXNoIGluIGhpc3Rvcnlcblx0XHRcdC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIG5hdmlnYXRpbmcgZnJvbSBhIHRyYW5zaWVudCBoYXNoIGluIGEgY3JlYXRlIGFwcCwgYW5kXG5cdFx0XHQvLyBpbiB0aGF0IGNhc2UgaGlzdG9yeS5iYWNrIHdvdWxkIGdvIGJhY2sgdG8gdGhlIEZMUFxuXHRcdFx0d2luZG93Lmhpc3RvcnkuYmFjaygpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZSB3aXRoIHBhcmFtZXRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUm91dGVOYW1lIFRoZSByb3V0ZSBuYW1lIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gb1BhcmFtZXRlcnMgUGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb25cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKi9cblx0bmF2VG8oc1JvdXRlTmFtZTogc3RyaW5nLCBvUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLl9vUm91dGVyLmdldFVSTChzUm91dGVOYW1lLCBvUGFyYW1ldGVycyk7XG5cdFx0cmV0dXJuIHRoaXMubmF2VG9IYXNoKHNIYXNoLCBmYWxzZSwgb1BhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZSwgZmFsc2UsICFvUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGl0cyB0aGUgY3VycmVudCBhcHAgYnkgbmF2aWdhdGluZyBiYWNrXG5cdCAqIHRvIHRoZSBwcmV2aW91cyBhcHAgKGlmIGFueSkgb3IgdGhlIEZMUC5cblx0ICpcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gd2UgZXhpdCB0aGUgYXBwXG5cdCAqL1xuXHRleGl0RnJvbUFwcCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb1NoZWxsU2VydmljZXMuYmFja1RvUHJldmlvdXNBcHAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIGhhc2ggY2FuIGhhdmUgYW4gaW1wYWN0IG9uIHRoZSBjdXJyZW50IHN0YXRlXG5cdCAqIGkuZS4gaWYgdGhlIGhhc2ggaXMgZXF1YWwsIGNvbXBhdGlibGUgb3IgYW4gYW5jZXN0b3Igb2YgdGhlIGN1cnJlbnQgc3RhdGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBzSGFzaCBgdHJ1ZWAgaWYgdGhlcmUgaXMgYW4gaW1wYWN0XG5cdCAqIEByZXR1cm5zIElmIHRoZXJlIGlzIGFuIGltcGFjdFxuXHQgKi9cblx0aXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNIYXNoOiBhbnkpIHtcblx0XHRpZiAoc0hhc2hbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRzSGFzaCA9IHNIYXNoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0xvY2FsR3VhcmQgPSBjcmVhdGVHdWFyZEZyb21IYXNoKHNIYXNoKTtcblx0XHRyZXR1cm4gb0xvY2FsR3VhcmQuY2hlY2sodGhpcy5nZXRIYXNoKCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIG5hdmlnYXRpb24gaXMgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC5cblx0ICpcblx0ICogQHJldHVybnMgYGZhbHNlYCBpZiBhIG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIGluIHRoZSBSb3V0ZXJQcm94eSBhbmQgaXMgbm90IHlldCBmaW5hbGl6ZWRcblx0ICovXG5cdGlzTmF2aWdhdGlvbkZpbmFsaXplZCgpIHtcblx0XHRyZXR1cm4gIXRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nICYmICF0aGlzLl9iRGVsYXllZFJlYnVpbGQ7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbGFzdCBzdGF0ZSBhcyBhIGd1YXJkLlxuXHQgKiBFYWNoIGZ1dHVyZSBuYXZpZ2F0aW9uIHdpbGwgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgZ3VhcmQsIGFuZCBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2lsbFxuXHQgKiBiZSBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBuYXZpZ2F0aW9uIGNyb3NzZXMgdGhlIGd1YXJkIChpLmUuIGdvZXMgdG8gYW4gYW5jZXN0b3Igb2YgdGhlIGd1YXJkKS5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIGZvciB0aGUgZ3VhcmRcblx0ICovXG5cdHNldE5hdmlnYXRpb25HdWFyZChzSGFzaDogc3RyaW5nKSB7XG5cdFx0dGhpcy5fb05hdmlnYXRpb25HdWFyZCA9IGNyZWF0ZUd1YXJkRnJvbUhhc2goc0hhc2gpO1xuXHRcdHRoaXMuYklzR3VhcmRDcm9zc0FsbG93ZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNhYmxlcyB0aGUgbmF2aWdhdGlvbiBndWFyZC5cblx0ICovXG5cdGRpc2NhcmROYXZpZ2F0aW9uR3VhcmQoKSB7XG5cdFx0dGhpcy5fb05hdmlnYXRpb25HdWFyZCA9IG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBuYXZpZ2F0aW9uIGd1YXJkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmF2aWdhdGluZyBndWFyZCBpcyBhdmFpbGFibGVcblx0ICovXG5cdGhhc05hdmlnYXRpb25HdWFyZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb05hdmlnYXRpb25HdWFyZCAhPT0gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUZXN0cyBhIGhhc2ggYWdhaW5zdCB0aGUgbmF2aWdhdGlvbiBndWFyZC5cblx0ICpcblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIHRvIGJlIHRlc3RlZFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmF2aWdhdGluZyB0byB0aGUgaGFzaCBkb2Vzbid0IGNyb3NzIHRoZSBndWFyZFxuXHQgKi9cblx0Y2hlY2tIYXNoV2l0aEd1YXJkKHNIYXNoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5fb05hdmlnYXRpb25HdWFyZCA9PT0gbnVsbCB8fCB0aGlzLl9vTmF2aWdhdGlvbkd1YXJkLmNoZWNrKHNIYXNoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIHVzZXIgYWxsb3dlZCB0aGUgbmF2aWdhdGlvbiBndWFyZCB0byBiZSBjcm9zc2VkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgY3Jvc3NpbmcgdGhlIGd1YXJkIGhhcyBiZWVuIGFsbG93ZWQgYnkgdGhlIHVzZXJcblx0ICovXG5cdGlzR3VhcmRDcm9zc0FsbG93ZWRCeVVzZXIoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYklzR3VhcmRDcm9zc0FsbG93ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQWN0aXZhdGVzIHRoZSBzeW5jaHJvbml6YXRpb24gZm9yIHJvdXRlTWF0Y2hlZEV2ZW50LlxuXHQgKiBUaGUgbmV4dCBOYXZUb0hhc2ggY2FsbCB3aWxsIGNyZWF0ZSBhIFN5bmNocm9uaXphdGlvbiBvYmplY3QgdGhhdCB3aWxsIGJlIHJlc29sdmVkXG5cdCAqIGJ5IHRoZSBjb3JyZXNwb25kaW5nIG9uUm91dGVNYXRjaGVkIGV2ZW50LCBwcmV2ZW50aW5nIGFub3RoZXIgTmF2VG9IYXNoIHRvIGhhcHBlbiBpbiBwYXJhbGxlbC5cblx0ICovXG5cdGFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbigpIHtcblx0XHR0aGlzLl9iQWN0aXZhdGVSb3V0ZU1hdGNoU3luY2hybyA9IHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogUmVzb2x2ZSB0aGUgcm91dGVNYXRjaCBzeW5jaHJvbml6YXRpb24gb2JqZWN0LCB1bmxvY2tpbmcgcG90ZW50aWFsIHBlbmRpbmcgTmF2VG9IYXNoIGNhbGxzLlxuXHQgKi9cblx0cmVzb2x2ZVJvdXRlTWF0Y2goKSB7XG5cdFx0aWYgKHRoaXMuX29Sb3V0ZU1hdGNoU3luY2hyb25pemF0aW9uKSB7XG5cdFx0XHR0aGlzLl9vUm91dGVNYXRjaFN5bmNocm9uaXphdGlvbi5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ha2VzIHN1cmUgbm8gbmF2aWdhdGlvbiBjYW4gaGFwcGVuIGJlZm9yZSBhIHJvdXRlTWF0Y2ggaGFwcGVuZWQuXG5cdCAqL1xuXHR3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24oKSB7XG5cdFx0dGhpcy5fb1JvdXRlTWF0Y2hTeW5jaHJvbml6YXRpb24gPSBuZXcgU3luY2hyb25pemF0aW9uKCk7XG5cdFx0dGhpcy5fYkFjdGl2YXRlUm91dGVNYXRjaFN5bmNocm8gPSBmYWxzZTtcblx0fVxuXG5cdF9leHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoKHNIYXNoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XG5cdFx0aWYgKHNIYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHNIYXNoID0gXCJcIjtcblx0XHR9XG5cdFx0Y29uc3Qgc0hhc2hOb1BhcmFtcyA9IHNIYXNoLnNwbGl0KFwiP1wiKVswXTsgLy8gcmVtb3ZlIHBhcmFtc1xuXHRcdGNvbnN0IGFUb2tlbnMgPSBzSGFzaE5vUGFyYW1zLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBuYW1lczogc3RyaW5nW10gPSBbXTtcblxuXHRcdGFUb2tlbnMuZm9yRWFjaCgoc1Rva2VuKSA9PiB7XG5cdFx0XHRpZiAoc1Rva2VuLmxlbmd0aCkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKHNUb2tlbi5zcGxpdChcIihcIilbMF0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIG5hbWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkcyBhIHN0YXRlIGZyb20gYSBoYXNoLlxuXHQgKlxuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2ggdG8gYmUgdXNlZCBhcyBlbnRyeVxuXHQgKiBAcmV0dXJucyBUaGUgc3RhdGVcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqL1xuXHRfZXh0cmFjdFN0YXRlRnJvbUhhc2goc0hhc2g6IHN0cmluZykge1xuXHRcdGlmIChzSGFzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRzSGFzaCA9IFwiXCI7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1N0YXRlOiBhbnkgPSB7XG5cdFx0XHRrZXlzOiB0aGlzLl9leHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoKHNIYXNoKVxuXHRcdH07XG5cblx0XHQvLyBSZXRyaWV2ZSBsYXlvdXQgKGlmIGFueSlcblx0XHRjb25zdCBhTGF5b3V0ID0gc0hhc2gubWF0Y2gobmV3IFJlZ0V4cChgXFxcXD8uKiR7ZW51bVVSTFBhcmFtcy5MQVlPVVRQQVJBTX09KFteJl0qKWApKTtcblx0XHRvU3RhdGUuc0xheW91dCA9IGFMYXlvdXQgJiYgYUxheW91dC5sZW5ndGggPiAxID8gYUxheW91dFsxXSA6IG51bGw7XG5cdFx0aWYgKG9TdGF0ZS5zTGF5b3V0ID09PSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIikge1xuXHRcdFx0b1N0YXRlLnNjcmVlbk1vZGUgPSAxO1xuXHRcdH0gZWxzZSBpZiAob1N0YXRlLnNMYXlvdXQgPT09IFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiKSB7XG5cdFx0XHRvU3RhdGUuc2NyZWVuTW9kZSA9IDI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9TdGF0ZS5zY3JlZW5Nb2RlID0gMDtcblx0XHR9XG5cblx0XHRvU3RhdGUuaGFzaCA9IHNIYXNoO1xuXHRcdHJldHVybiBvU3RhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIG5ldyBzdGF0ZSBpbnRvIHRoZSBpbnRlcm5hbCBoaXN0b3J5IHN0cnVjdHVyZS5cblx0ICogTWFrZXMgc3VyZSB0aGlzIG5ldyBzdGF0ZSBpcyBhZGRlZCBhZnRlciBhbiBhbmNlc3Rvci5cblx0ICogQWxzbyBzZXRzIHRoZSBpQXBwU3RhdGUga2V5IGluIHRoZSB3aG9sZSBoaXN0b3J5LlxuXHQgKlxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuUm91dGVyUHJveHlcblx0ICogQHBhcmFtIG9OZXdTdGF0ZSBUaGUgbmV3IHN0YXRlIHRvIGJlIGFkZGVkXG5cdCAqIEBwYXJhbSBiUmVidWlsZE9ubHkgYHRydWVgIGlmIHdlJ3JlIHJlYnVpbGRpbmcgdGhlIGhpc3RvcnkgYWZ0ZXIgYSBzaGVsbCBtZW51IG5hdmlnYXRpb25cblx0ICogQHBhcmFtIGJQcmVzZXJ2ZUhpc3RvcnkgSWYgc2V0IHRvIHRydWUsIG5vbi1hbmNlc3RvciBlbnRyaWVzIGluIGhpc3Rvcnkgd2lsbCBiZSByZXRhaW5lZFxuXHQgKiBAcGFyYW0gYkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uIERpc2FibGUgdGhlIG1lY2hhbmlzbSB0byByZXRhaW5lZCBtYXJrZWQgZW50cmllcyBpbiBjYWNoZVxuXHQgKiBAcmV0dXJucyBUaGUgbmV3IHN0YXRlXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9wdXNoTmV3U3RhdGUob05ld1N0YXRlOiBhbnksIGJSZWJ1aWxkT25seTogYm9vbGVhbiwgYlByZXNlcnZlSGlzdG9yeTogYm9vbGVhbiwgYkRpc2FibGVIaXN0b3J5UHJlc2VydmF0aW9uOiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgc0N1cnJlbnRIYXNoID0gdGhpcy5nZXRIYXNoKCk7XG5cdFx0bGV0IGxhc3RJbmRleCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxO1xuXHRcdGxldCBpUG9wQ291bnQgPSBiUmVidWlsZE9ubHkgPyAxIDogMDtcblxuXHRcdC8vIDEuIERvIHNvbWUgY2xlYW51cCBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5IDogaW4gY2FzZSB0aGUgdXNlciBoYXMgbmF2aWdhdGVkIGJhY2sgaW4gdGhlIGJyb3dzZXIgaGlzdG9yeSwgd2UgbmVlZCB0byByZW1vdmVcblx0XHQvLyB0aGUgc3RhdGVzIGFoZWFkIGluIGhpc3RvcnkgYW5kIG1ha2Ugc3VyZSB0aGUgdG9wIHN0YXRlIGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHBhZ2Vcblx0XHQvLyBXZSBkb24ndCBkbyB0aGF0IHdoZW4gcmVzdG9yaW5nIHRoZSBoaXN0b3J5LCBhcyB0aGUgY3VycmVudCBzdGF0ZSBoYXMgYmVlbiBhZGRlZCBvbiB0b3Agb2YgdGhlIGJyb3dzZXIgaGlzdG9yeVxuXHRcdC8vIGFuZCBpcyBub3QgcmVmbGVjdGVkIGluIHRoZSBtYW5hZ2VkIGhpc3Rvcnlcblx0XHRpZiAoIWJSZWJ1aWxkT25seSkge1xuXHRcdFx0d2hpbGUgKGxhc3RJbmRleCA+PSAwICYmIHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtsYXN0SW5kZXhdLmhhc2ggIT09IHNDdXJyZW50SGFzaCkge1xuXHRcdFx0XHR0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGxhc3RJbmRleC0tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHQvLyBXZSBjb3VsZG4ndCBmaW5kIHRoZSBjdXJyZW50IGxvY2F0aW9uIGluIHRoZSBoaXN0b3J5LiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBicm93c2VyIHJlbG9hZFxuXHRcdFx0XHQvLyBoYXBwZW5lZCwgY2F1c2luZyBhIHJlaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZWQgaGlzdG9yeS5cblx0XHRcdFx0Ly8gSW4gdGhhdCBjYXNlLCB3ZSB1c2UgdGhlIGN1cnJlbnQgbG9jYXRpb24gYXMgdGhlIG5ldyBzdGFydGluZyBwb2ludCBpbiB0aGUgbWFuYWdlZCBoaXN0b3J5XG5cdFx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5wdXNoKHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNDdXJyZW50SGFzaCkpO1xuXHRcdFx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHsgZmVMZXZlbDogMCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gMi4gTWFyayB0aGUgdG9wIHN0YXRlIGFzIHByZXNlcnZlZCBpZiByZXF1aXJlZFxuXHRcdGlmIChiUHJlc2VydmVIaXN0b3J5ICYmICFiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24pIHtcblx0XHRcdHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV0ucHJlc2VydmVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyAzLiBUaGVuIHBvcCBhbGwgc3RhdGVzIHVudGlsIHdlIGZpbmQgYW4gYW5jZXN0b3Igb2YgdGhlIG5ldyBzdGF0ZSwgb3Igd2UgZmluZCBhIHN0YXRlIHRoYXQgbmVlZCB0byBiZSBwcmVzZXJ2ZWRcblx0XHRsZXQgb0xhc3RSZW1vdmVkSXRlbTtcblx0XHR3aGlsZSAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9Ub3BTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV07XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChiRGlzYWJsZUhpc3RvcnlQcmVzZXJ2YXRpb24gfHwgIW9Ub3BTdGF0ZS5wcmVzZXJ2ZWQpICYmXG5cdFx0XHRcdHRoaXMuX2NvbXBhcmVDYWNoZVN0YXRlcyhvVG9wU3RhdGUsIG9OZXdTdGF0ZSkgIT09IGVudW1TdGF0ZS5BTkNFU1RPUlxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIFRoZSB0b3Agc3RhdGUgaXMgbm90IGFuIGFuY2VzdG9yIG9mIG9OZXdTdGF0ZSBhbmQgaXMgbm90IHByZXNlcnZlZCAtLT4gd2UgY2FuIHBvcCBpdFxuXHRcdFx0XHRvTGFzdFJlbW92ZWRJdGVtID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5LnBvcCgpO1xuXHRcdFx0XHRpUG9wQ291bnQrKztcblx0XHRcdH0gZWxzZSBpZiAob1RvcFN0YXRlLnByZXNlcnZlZCAmJiByZW1vdmVBcHBTdGF0ZUluSGFzaChvVG9wU3RhdGUuaGFzaCkgPT09IHJlbW92ZUFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoKSkge1xuXHRcdFx0XHQvLyBXZSB0cnkgdG8gYWRkIGEgc3RhdGUgdGhhdCBpcyBhbHJlYWR5IGluIGNhY2hlIChkdWUgdG8gcHJlc2VydmVkIGZsYWcpIGJ1dCB3aXRoIGEgZGlmZmVyZW50IGlhcHAtc3RhdGVcblx0XHRcdFx0Ly8gLS0+IHdlIHNob3VsZCBkZWxldGUgdGhlIHByZXZpb3VzIGVudHJ5IChpdCB3aWxsIGJlIGxhdGVyIHJlcGxhY2VkIGJ5IHRoZSBuZXcgb25lKSBhbmQgc3RvcCBwb3BwaW5nXG5cdFx0XHRcdG9MYXN0UmVtb3ZlZEl0ZW0gPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkucG9wKCk7XG5cdFx0XHRcdGlQb3BDb3VudCsrO1xuXHRcdFx0XHRvTmV3U3RhdGUucHJlc2VydmVkID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhazsgLy8gQW5jZXN0b3Igb3IgcHJlc2VydmVkIHN0YXRlIGZvdW5kIC0tPiB3ZSBzdG9wIHBvcHBpbmcgb3V0IHN0YXRlc1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIDQuIGlBcHBTdGF0ZSBtYW5hZ2VtZW50XG5cdFx0dGhpcy5zSUFwcFN0YXRlS2V5ID0gZmluZEFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoKTtcblx0XHRpZiAoIXRoaXMuZmNsRW5hYmxlZCAmJiBvTGFzdFJlbW92ZWRJdGVtKSB7XG5cdFx0XHRjb25zdCBzUHJldmlvdXNJQXBwU3RhdGVLZXkgPSBmaW5kQXBwU3RhdGVJbkhhc2gob0xhc3RSZW1vdmVkSXRlbS5oYXNoKTtcblx0XHRcdGNvbnN0IG9Db21wYXJpc29uU3RhdGVSZXN1bHQgPSB0aGlzLl9jb21wYXJlQ2FjaGVTdGF0ZXMob0xhc3RSZW1vdmVkSXRlbSwgb05ld1N0YXRlKTtcblx0XHRcdC8vIGlmIGN1cnJlbnQgc3RhdGUgZG9lc24ndCBjb250YWluIGEgaS1hcHBzdGF0ZSBhbmQgdGhpcyBzdGF0ZSBzaG91bGQgcmVwbGFjZSBhIHN0YXRlIGNvbnRhaW5pbmcgYSBpQXBwU3RhdGVcblx0XHRcdC8vIHRoZW4gdGhlIHByZXZpb3VzIGlBcHBTdGF0ZSBpcyBwcmVzZXJ2ZWRcblx0XHRcdGlmIChcblx0XHRcdFx0IXRoaXMuc0lBcHBTdGF0ZUtleSAmJlxuXHRcdFx0XHRzUHJldmlvdXNJQXBwU3RhdGVLZXkgJiZcblx0XHRcdFx0KG9Db21wYXJpc29uU3RhdGVSZXN1bHQgPT09IGVudW1TdGF0ZS5FUVVBTCB8fCBvQ29tcGFyaXNvblN0YXRlUmVzdWx0ID09PSBlbnVtU3RhdGUuQ09NUEFUSUJMRSlcblx0XHRcdCkge1xuXHRcdFx0XHRvTmV3U3RhdGUuaGFzaCA9IHNldEFwcFN0YXRlSW5IYXNoKG9OZXdTdGF0ZS5oYXNoLCBzUHJldmlvdXNJQXBwU3RhdGVLZXkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIDUuIE5vdyB3ZSBjYW4gcHVzaCB0aGUgc3RhdGUgYXQgdGhlIHRvcCBvZiB0aGUgaW50ZXJuYWwgaGlzdG9yeVxuXHRcdGNvbnN0IGJIYXNTYW1lSGFzaCA9IG9MYXN0UmVtb3ZlZEl0ZW0gJiYgb05ld1N0YXRlLmhhc2ggPT09IG9MYXN0UmVtb3ZlZEl0ZW0uaGFzaDtcblx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9vTWFuYWdlZEhpc3RvcnlbdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDFdLmhhc2ggIT09IG9OZXdTdGF0ZS5oYXNoKSB7XG5cdFx0XHR0aGlzLl9vTWFuYWdlZEhpc3RvcnkucHVzaChvTmV3U3RhdGUpO1xuXHRcdFx0aWYgKG9MYXN0UmVtb3ZlZEl0ZW0gJiYgcmVtb3ZlQXBwU3RhdGVJbkhhc2gob0xhc3RSZW1vdmVkSXRlbS5oYXNoKSA9PT0gcmVtb3ZlQXBwU3RhdGVJbkhhc2gob05ld1N0YXRlLmhhc2gpKSB7XG5cdFx0XHRcdG9OZXdTdGF0ZS5mb2N1c0NvbnRyb2xJZCA9IG9MYXN0UmVtb3ZlZEl0ZW0uZm9jdXNDb250cm9sSWQ7XG5cdFx0XHRcdG9OZXdTdGF0ZS5mb2N1c0luZm8gPSBvTGFzdFJlbW92ZWRJdGVtLmZvY3VzSW5mbztcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyA2LiBEZXRlcm1pbmUgd2hpY2ggYWN0aW9ucyB0byBkbyBvbiB0aGUgaGlzdG9yeVxuXHRcdGlmIChpUG9wQ291bnQgPT09IDApIHtcblx0XHRcdC8vIE5vIHN0YXRlIHdhcyBwb3BwZWQgLS0+IGFwcGVuZFxuXHRcdFx0cmV0dXJuIHsgdHlwZTogXCJhcHBlbmRcIiB9O1xuXHRcdH0gZWxzZSBpZiAoaVBvcENvdW50ID09PSAxKSB7XG5cdFx0XHQvLyBPbmx5IDEgc3RhdGUgd2FzIHBvcHBlZCAtLT4gcmVwbGFjZSBjdXJyZW50IGhhc2ggdW5sZXNzIGhhc2ggaXMgdGhlIHNhbWUgKHRoZW4gbm90aGluZyB0byBkbylcblx0XHRcdHJldHVybiBiSGFzU2FtZUhhc2ggPyB7IHR5cGU6IFwibm9uZVwiIH0gOiB7IHR5cGU6IFwicmVwbGFjZVwiIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE1vcmUgdGhhbiAxIHN0YXRlIHdhcyBwb3BwZWQgLS0+IGdvIGJha2MgaW4gaGlzdG9yeSBhbmQgcmVwbGFjZSBoYXNoIGlmIG5lY2Vzc2FyeVxuXHRcdFx0cmV0dXJuIGJIYXNTYW1lSGFzaCA/IHsgdHlwZTogXCJiYWNrXCIsIHN0ZXBzOiBpUG9wQ291bnQgLSAxIH0gOiB7IHR5cGU6IFwiYmFjay1yZXBsYWNlXCIsIHN0ZXBzOiBpUG9wQ291bnQgLSAxIH07XG5cdFx0fVxuXHR9XG5cblx0X2Jsb2NraW5nTmF2aWdhdGlvbkZpbHRlcigpIHtcblx0XHRyZXR1cm4gdGhpcy5fYkRpc2FibGVPbkhhc2hDaGFuZ2UgPyBcIkN1c3RvbVwiIDogXCJDb250aW51ZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2FibGUgdGhlIHJvdXRpbmcgYnkgY2FsbGluZyB0aGUgcm91dGVyIHN0b3AgbWV0aG9kLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLlJvdXRlclByb3h5XG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9kaXNhYmxlRXZlbnRPbkhhc2hDaGFuZ2UoKSB7XG5cdFx0dGhpcy5fYkRpc2FibGVPbkhhc2hDaGFuZ2UgPSB0cnVlO1xuXHRcdHRoaXMuX29Sb3V0ZXIuc3RvcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEVuYWJsZSB0aGUgcm91dGluZyBieSBjYWxsaW5nIHRoZSByb3V0ZXIgaW5pdGlhbGl6ZSBtZXRob2QuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBzYXAuZmUuY29yZS5Sb3V0ZXJQcm94eSNfZW5hYmxlRXZlbnRPbkhhc2hDaGFuZ2Vcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLlJvdXRlclByb3h5XG5cdCAqIEBwYXJhbSBbYklnbm9yZUN1cnJlbnRIYXNoXSBJZ25vcmUgdGhlIGxhc3QgaGFzaCBldmVudCB0cmlnZ2VyZWQgYmVmb3JlIHRoZSByb3V0ZXIgaGFzIGluaXRpYWxpemVkXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdF9lbmFibGVFdmVudE9uSGFzaENoYW5nZShiSWdub3JlQ3VycmVudEhhc2g6IGJvb2xlYW4gfCB1bmRlZmluZWQpIHtcblx0XHR0aGlzLl9iRGlzYWJsZU9uSGFzaENoYW5nZSA9IGZhbHNlO1xuXHRcdHRoaXMuX29Sb3V0ZXIuaW5pdGlhbGl6ZShiSWdub3JlQ3VycmVudEhhc2gpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN5bmNocm9uaXplcyB0aGUgYnJvd3NlciBoaXN0b3J5IHdpdGggdGhlIGludGVybmFsIGhpc3Rvcnkgb2YgdGhlIHJvdXRlclByb3h5LCBhbmQgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIGlmIG5lZWRlZC5cblx0ICpcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLlJvdXRlclByb3h5XG5cdCAqIEBwYXJhbSBvSGlzdG9yeUFjdGlvbiBTcGVjaWZpZXMgdGhlIG5hdmlnYXRpb24gYWN0aW9uIHRvIGJlIHBlcmZvcm1lZFxuXHQgKiBAcGFyYW0gYlJlYnVpbGRPbmx5IGB0cnVlYCBpZiBpbnRlcm5hbCBoaXN0b3J5IGlzIGN1cnJlbnRseSBiZWluZyByZWJ1aWx0XG5cdCAqIEByZXR1cm5zIFByb21pc2UgKHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkKSB0aGF0IHJldHVybnMgJ3RydWUnIGlmIGEgbmF2aWdhdGlvbiB0b29rIHBsYWNlLCAnZmFsc2UnIGlmIHRoZSBuYXZpZ2F0aW9uIGRpZG4ndCBoYXBwZW5cblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0X3JlYnVpbGRCcm93c2VySGlzdG9yeShvSGlzdG9yeUFjdGlvbjogYW55LCBiUmVidWlsZE9ubHk6IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRoaXMuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9UYXJnZXRTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMV0sXG5cdFx0XHRcdG5ld0xldmVsID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCAtIDE7XG5cblx0XHRcdGZ1bmN0aW9uIHJlcGxhY2VBc3luYygpIHtcblx0XHRcdFx0aWYgKCFiUmVidWlsZE9ubHkpIHtcblx0XHRcdFx0XHR0aGF0Ll9lbmFibGVFdmVudE9uSGFzaENoYW5nZSh0cnVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdCh0aGF0Ll9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgYW55KShvVGFyZ2V0U3RhdGUuaGFzaCk7XG5cdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oeyBmZUxldmVsOiBuZXdMZXZlbCB9LCBoaXN0b3J5LnN0YXRlKSwgXCJcIik7XG5cblx0XHRcdFx0aWYgKGJSZWJ1aWxkT25seSkge1xuXHRcdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0Ly8gVGltZW91dCB0byBsZXQgJ2hhc2hjaGFuZ2UnIGV2ZW50IGJlIHByb2Nlc3NlZCBiZWZvcmUgYnkgdGhlIEhhc2hDaGFuZ2VyLCBzbyB0aGF0XG5cdFx0XHRcdFx0XHQvLyBvblJvdXRlTWF0Y2hlZCBub3RpZmljYXRpb24gaXNuJ3QgcmFpc2VkXG5cdFx0XHRcdFx0XHR0aGF0Ll9lbmFibGVFdmVudE9uSGFzaENoYW5nZSh0cnVlKTtcblx0XHRcdFx0XHR9LCAwKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoYXQuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gZmFsc2U7XG5cdFx0XHRcdHJlc29sdmUodHJ1ZSk7IC8vIGEgbmF2aWdhdGlvbiBvY2N1cnJlZFxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBc3luYyBjYWxsYmFja3Mgd2hlbiBuYXZpZ2F0aW5nIGJhY2ssIGluIG9yZGVyIHRvIGxldCBhbGwgbm90aWZpY2F0aW9ucyBhbmQgZXZlbnRzIGdldCBwcm9jZXNzZWRcblx0XHRcdGZ1bmN0aW9uIGJhY2tSZXBsYWNlQXN5bmMoKSB7XG5cdFx0XHRcdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIiwgYmFja1JlcGxhY2VBc3luYyk7XG5cdFx0XHRcdHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdC8vIFRpbWVvdXQgdG8gbGV0ICdoYXNoY2hhbmdlJyBldmVudCBiZSBwcm9jZXNzZWQgYmVmb3JlIGJ5IHRoZSBIYXNoQ2hhbmdlclxuXHRcdFx0XHRcdHJlcGxhY2VBc3luYygpO1xuXHRcdFx0XHR9LCAwKTtcblx0XHRcdH1cblxuXHRcdFx0ZnVuY3Rpb24gYmFja0FzeW5jKCkge1xuXHRcdFx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsIGJhY2tBc3luYyk7XG5cdFx0XHRcdHRoYXQuYklzUmVidWlsZEhpc3RvcnlSdW5uaW5nID0gZmFsc2U7XG5cdFx0XHRcdHJlc29sdmUodHJ1ZSk7IC8vIGEgbmF2aWdhdGlvbiBvY2N1cnJlZFxuXHRcdFx0fVxuXG5cdFx0XHR0aGF0Ll9iSWdub3JlUmVzdG9yZSA9IHRydWU7XG5cblx0XHRcdHN3aXRjaCAob0hpc3RvcnlBY3Rpb24udHlwZSkge1xuXHRcdFx0XHRjYXNlIFwicmVwbGFjZVwiOlxuXHRcdFx0XHRcdCh0aGF0Ll9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgYW55KShvVGFyZ2V0U3RhdGUuaGFzaCk7XG5cdFx0XHRcdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbih7IGZlTGV2ZWw6IG5ld0xldmVsIH0sIGhpc3Rvcnkuc3RhdGUpLCBcIlwiKTtcblx0XHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7IC8vIGEgbmF2aWdhdGlvbiBvY2N1cnJlZFxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJhcHBlbmRcIjpcblx0XHRcdFx0XHR0aGF0Ll9vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuc2V0SGFzaChvVGFyZ2V0U3RhdGUuaGFzaCk7XG5cdFx0XHRcdFx0aGlzdG9yeS5yZXBsYWNlU3RhdGUoT2JqZWN0LmFzc2lnbih7IGZlTGV2ZWw6IG5ld0xldmVsIH0sIGhpc3Rvcnkuc3RhdGUpLCBcIlwiKTtcblx0XHRcdFx0XHR0aGF0LmJJc1JlYnVpbGRIaXN0b3J5UnVubmluZyA9IGZhbHNlO1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7IC8vIGEgbmF2aWdhdGlvbiBvY2N1cnJlZFxuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJiYWNrXCI6XG5cdFx0XHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBiYWNrQXN5bmMpO1xuXHRcdFx0XHRcdGhpc3RvcnkuZ28oLW9IaXN0b3J5QWN0aW9uLnN0ZXBzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiYmFjay1yZXBsYWNlXCI6XG5cdFx0XHRcdFx0dGhpcy5fZGlzYWJsZUV2ZW50T25IYXNoQ2hhbmdlKCk7XG5cdFx0XHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBiYWNrUmVwbGFjZUFzeW5jKTtcblx0XHRcdFx0XHRoaXN0b3J5LmdvKC1vSGlzdG9yeUFjdGlvbi5zdGVwcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHQvLyBObyBuYXZpZ2F0aW9uXG5cdFx0XHRcdFx0dGhpcy5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTsgLy8gbm8gbmF2aWdhdGlvbiAtLT4gcmVzb2x2ZSB0byBmYWxzZVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0TGFzdEhpc3RvcnlFbnRyeSgpIHtcblx0XHRyZXR1cm4gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXTtcblx0fVxuXG5cdHNldFBhdGhNYXBwaW5nKG1hcHBpbmdzOiB7IG9sZFBhdGg6IHN0cmluZzsgbmV3UGF0aDogc3RyaW5nIH1bXSkge1xuXHRcdHRoaXMuX3BhdGhNYXBwaW5ncyA9IG1hcHBpbmdzLmZpbHRlcigobWFwcGluZykgPT4ge1xuXHRcdFx0cmV0dXJuIG1hcHBpbmcub2xkUGF0aCAhPT0gbWFwcGluZy5uZXdQYXRoO1xuXHRcdH0pO1xuXHR9XG5cblx0aGFzaEd1YXJkKCkge1xuXHRcdGxldCBzSGFzaCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXG5cdFx0aWYgKHNIYXNoLmluZGV4T2YoXCJyZXN0b3JlSGlzdG9yeT10cnVlXCIpICE9PSAtMSkge1xuXHRcdFx0dGhpcy5fYkFwcGx5UmVzdG9yZSA9IHRydWU7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5iSXNSZWJ1aWxkSGlzdG9yeVJ1bm5pbmcpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBoYXNoIG5lZWRzIHRvIGJlIGNoYW5nZWQgKHRoaXMgaGFwcGVucyBpbiBGQ0wgd2hlbiBzd2l0Y2hpbmcgYi93IGVkaXQgYW5kIHJlYWQtb25seSB3aXRoIDMgY29sdW1ucyBvcGVuKVxuXHRcdFx0Y29uc3QgbWFwcGluZyA9IHRoaXMuX3BhdGhNYXBwaW5ncy5maW5kKChtKSA9PiB7XG5cdFx0XHRcdHJldHVybiBzSGFzaC5pbmRleE9mKG0ub2xkUGF0aCkgPj0gMDtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG1hcHBpbmcpIHtcblx0XHRcdFx0Ly8gUmVwbGFjZSB0aGUgY3VycmVudCBoYXNoXG5cdFx0XHRcdHNIYXNoID0gc0hhc2gucmVwbGFjZShtYXBwaW5nLm9sZFBhdGgsIG1hcHBpbmcubmV3UGF0aCk7XG5cdFx0XHRcdGhpc3RvcnkucmVwbGFjZVN0YXRlKE9iamVjdC5hc3NpZ24oe30sIGhpc3Rvcnkuc3RhdGUpLCBcIlwiLCBzSGFzaCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGFIYXNoU3BsaXQgPSBzSGFzaC5zcGxpdChcIiYvXCIpO1xuXHRcdFx0Y29uc3Qgc0FwcEhhc2ggPSBhSGFzaFNwbGl0WzFdID8gYUhhc2hTcGxpdFsxXSA6IFwiXCI7XG5cdFx0XHRpZiAodGhpcy5jaGVja0hhc2hXaXRoR3VhcmQoc0FwcEhhc2gpKSB7XG5cdFx0XHRcdHRoaXMuX2JEZWxheWVkUmVidWlsZCA9IHRydWU7XG5cdFx0XHRcdGNvbnN0IG9OZXdTdGF0ZSA9IHRoaXMuX2V4dHJhY3RTdGF0ZUZyb21IYXNoKHNBcHBIYXNoKTtcblx0XHRcdFx0dGhpcy5fcHVzaE5ld1N0YXRlKG9OZXdTdGF0ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKTtcblxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl9iRGVsYXllZFJlYnVpbGQgPSBmYWxzZTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbXBhcmVzIDIgc3RhdGVzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1N0YXRlMVxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1N0YXRlMlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uOlxuXHQgKiAgICAgICAgLSBlbnVtU3RhdGUuRVFVQUwgaWYgb1N0YXRlMSBhbmQgb1N0YXRlMiBhcmUgZXF1YWxcblx0ICogICAgICAgIC0gZW51bVN0YXRlLkNPTVBBVElCTEUgaWYgb1N0YXRlMSBhbmQgb1N0YXRlMiBhcmUgY29tcGF0aWJsZVxuXHQgKiAgICAgICAgLSBlbnVtU3RhdGUuQU5DRVNUT1IgaWYgb1N0YXRlMSBpcyBhbiBhbmNlc3RvciBvZiBvU3RhdGUyXG5cdCAqICAgICAgICAtIGVudW1TdGF0ZS5ESUZGRVJFTlQgaWYgdGhlIDIgc3RhdGVzIGFyZSBkaWZmZXJlbnRcblx0ICovXG5cblx0X2NvbXBhcmVDYWNoZVN0YXRlcyhvU3RhdGUxOiBhbnksIG9TdGF0ZTI6IGFueSkge1xuXHRcdC8vIEZpcnN0IGNvbXBhcmUgb2JqZWN0IGtleXNcblx0XHRpZiAob1N0YXRlMS5rZXlzLmxlbmd0aCA+IG9TdGF0ZTIua2V5cy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBlbnVtU3RhdGUuRElGRkVSRU5UO1xuXHRcdH1cblx0XHRsZXQgZXF1YWwgPSB0cnVlO1xuXHRcdGxldCBpbmRleDtcblx0XHRmb3IgKGluZGV4ID0gMDsgZXF1YWwgJiYgaW5kZXggPCBvU3RhdGUxLmtleXMubGVuZ3RoOyBpbmRleCsrKSB7XG5cdFx0XHRpZiAob1N0YXRlMS5rZXlzW2luZGV4XSAhPT0gb1N0YXRlMi5rZXlzW2luZGV4XSkge1xuXHRcdFx0XHRlcXVhbCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWVxdWFsKSB7XG5cdFx0XHQvLyBTb21lIG9iamVjdHMga2V5cyBhcmUgZGlmZmVyZW50XG5cdFx0XHRyZXR1cm4gZW51bVN0YXRlLkRJRkZFUkVOVDtcblx0XHR9XG5cblx0XHQvLyBBbGwga2V5cyBmcm9tIG9TdGF0ZTEgYXJlIGluIG9TdGF0ZTIgLS0+IGNoZWNrIGlmIGFuY2VzdG9yXG5cdFx0aWYgKG9TdGF0ZTEua2V5cy5sZW5ndGggPCBvU3RhdGUyLmtleXMubGVuZ3RoIHx8IG9TdGF0ZTEuc2NyZWVuTW9kZSA8IG9TdGF0ZTIuc2NyZWVuTW9kZSkge1xuXHRcdFx0cmV0dXJuIGVudW1TdGF0ZS5BTkNFU1RPUjtcblx0XHR9XG5cdFx0aWYgKG9TdGF0ZTEuc2NyZWVuTW9kZSA+IG9TdGF0ZTIuc2NyZWVuTW9kZSkge1xuXHRcdFx0cmV0dXJuIGVudW1TdGF0ZS5ESUZGRVJFTlQ7IC8vIE5vdCBzdXJlIHRoaXMgY2FzZSBjYW4gaGFwcGVuLi4uXG5cdFx0fVxuXG5cdFx0Ly8gQXQgdGhpcyBzdGFnZSwgdGhlIDIgc3RhdGVzIGhhdmUgdGhlIHNhbWUgb2JqZWN0IGtleXMgKGluIHRoZSBzYW1lIG9yZGVyKSBhbmQgc2FtZSBzY3JlZW5tb2RlXG5cdFx0Ly8gVGhleSBjYW4gYmUgZWl0aGVyIGNvbXBhdGlibGUgb3IgZXF1YWxcblx0XHRyZXR1cm4gb1N0YXRlMS5zTGF5b3V0ID09PSBvU3RhdGUyLnNMYXlvdXQgPyBlbnVtU3RhdGUuRVFVQUwgOiBlbnVtU3RhdGUuQ09NUEFUSUJMRTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYmFjayBleGl0cyB0aGUgcHJlc2VudCBndWFyZCBzZXQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzUHJlc2VudEhhc2ggVGhlIGN1cnJlbnQgaGFzaC4gT25seSB1c2VkIGZvciB1bml0IHRlc3RzLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYmFjayBleGl0cyB0aGVyZSBpcyBhIGd1YXJkIGV4aXQgb24gYmFja1xuXHQgKi9cblx0Y2hlY2tJZkJhY2tJc091dE9mR3VhcmQoc1ByZXNlbnRIYXNoPzogc3RyaW5nKSB7XG5cdFx0bGV0IHNQcmV2SGFzaDtcblx0XHRsZXQgc0N1cnJlbnRIYXNoOiBzdHJpbmc7XG5cdFx0aWYgKHNQcmVzZW50SGFzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvLyBXZSB1c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggaW5zdGVhZCBvZiBIYXNoQ2hhbmdlci5nZXRJbnN0YW5jZSgpLmdldEhhc2goKSBiZWNhdXNlIHRoZSBsYXR0ZXJcblx0XHRcdC8vIHJlcGxhY2VzIGNoYXJhY3RlcnMgaW4gdGhlIFVSTCAoZS5nLiAlMjQgcmVwbGFjZWQgYnkgJCkgYW5kIGl0IGNhdXNlcyBpc3N1ZXMgd2hlbiBjb21wYXJpbmdcblx0XHRcdC8vIHdpdGggdGhlIFVSTHMgaW4gdGhlIG1hbmFnZWQgaGlzdG9yeVxuXHRcdFx0Y29uc3Qgb1NwbGl0SGFzaCA9IHRoaXMuX29TaGVsbFNlcnZpY2VzLnNwbGl0SGFzaCh3aW5kb3cubG9jYXRpb24uaGFzaCkgYXMgYW55O1xuXHRcdFx0aWYgKG9TcGxpdEhhc2ggJiYgb1NwbGl0SGFzaC5hcHBTcGVjaWZpY1JvdXRlKSB7XG5cdFx0XHRcdHNDdXJyZW50SGFzaCA9IG9TcGxpdEhhc2guYXBwU3BlY2lmaWNSb3V0ZTtcblx0XHRcdFx0aWYgKHNDdXJyZW50SGFzaC5pbmRleE9mKFwiJi9cIikgPT09IDApIHtcblx0XHRcdFx0XHRzQ3VycmVudEhhc2ggPSBzQ3VycmVudEhhc2guc3Vic3RyaW5nKDIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzQ3VycmVudEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7IC8vIFRvIHJlbW92ZSB0aGUgJyMnXG5cdFx0XHRcdGlmIChzQ3VycmVudEhhc2hbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRcdFx0c0N1cnJlbnRIYXNoID0gc0N1cnJlbnRIYXNoLnN1YnN0cmluZygxKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzQ3VycmVudEhhc2ggPSBzUHJlc2VudEhhc2g7XG5cdFx0fVxuXHRcdHNQcmVzZW50SGFzaCA9IFVSSS5kZWNvZGUoc0N1cnJlbnRIYXNoKTtcblx0XHRpZiAodGhpcy5fb05hdmlnYXRpb25HdWFyZCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaV0uaGFzaCA9PT0gc1ByZXNlbnRIYXNoKSB7XG5cdFx0XHRcdFx0c1ByZXZIYXNoID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W2kgLSAxXS5oYXNoO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAhc1ByZXZIYXNoIHx8ICF0aGlzLmNoZWNrSGFzaFdpdGhHdWFyZChzUHJldkhhc2gpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBsYXN0IDIgZW50cmllcyBpbiB0aGUgaGlzdG9yeSBzaGFyZSB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhleSBzaGFyZSB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKi9cblx0Y2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpIHtcblx0XHRpZiAodGhpcy5fb01hbmFnZWRIaXN0b3J5Lmxlbmd0aCA8IDIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCBvQ3VycmVudFN0YXRlID0gdGhpcy5fb01hbmFnZWRIaXN0b3J5W3RoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxXTtcblx0XHRjb25zdCBvUHJldmlvdXNTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVt0aGlzLl9vTWFuYWdlZEhpc3RvcnkubGVuZ3RoIC0gMl07XG5cblx0XHRyZXR1cm4gb0N1cnJlbnRTdGF0ZS5oYXNoLnNwbGl0KFwiP1wiKVswXSA9PT0gb1ByZXZpb3VzU3RhdGUuaGFzaC5zcGxpdChcIj9cIilbMF07XG5cdH1cblxuXHQvKipcblx0ICogUmVzdG9yZXMgdGhlIGZvY3VzIGZvciB0aGUgY3VycmVudCBoYXNoLCBpZiB3ZSBjYW4gZmluZCBpdCBpbiB0aGUgaGlzdG9yeS5cblx0ICpcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBmb2N1cyB3YXMgc2V0LCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRyZXN0b3JlRm9jdXNGb3JDdXJyZW50SGFzaCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBjdXJyZW50SGFzaCA9IHJlbW92ZUFwcFN0YXRlSW5IYXNoKHRoaXMuZ2V0SGFzaCgpKTtcblx0XHRjb25zdCBzdGF0ZUZvckhhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkuZmluZCgoc3RhdGUpID0+IHtcblx0XHRcdHJldHVybiByZW1vdmVBcHBTdGF0ZUluSGFzaChzdGF0ZS5oYXNoKSA9PT0gY3VycmVudEhhc2g7XG5cdFx0fSk7XG5cblx0XHRsZXQgZm9jdXNBcHBsaWVkID0gZmFsc2U7XG5cdFx0aWYgKHN0YXRlRm9ySGFzaD8uZm9jdXNDb250cm9sSWQpIHtcblx0XHRcdGNvbnN0IGZvY3VzQ29udHJvbCA9IHNhcC51aS5nZXRDb3JlKCkuYnlJZChzdGF0ZUZvckhhc2guZm9jdXNDb250cm9sSWQpO1xuXHRcdFx0Zm9jdXNDb250cm9sPy5mb2N1cyhzdGF0ZUZvckhhc2guZm9jdXNJbmZvKTtcblx0XHRcdGZvY3VzQXBwbGllZCA9IGZvY3VzQ29udHJvbCAhPT0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiBmb2N1c0FwcGxpZWQ7XG5cdH1cblxuXHQvKipcblx0ICogU3RvcmVzIHRoZSBJRCBvZiB0aGUgY3VycmVudGx5IGZvY3VzZWQgY29udHJvbCBpbiB0aGUgaGlzdG9yeSBmb3IgdGhlIGN1cnJlbnQgaGFzaC5cblx0ICpcblx0ICovXG5cdHByaXZhdGUgc3RvcmVGb2N1c0luZm9Gb3JDdXJyZW50SGFzaCgpIHtcblx0XHRjb25zdCBjdXJyZW50SGFzaCA9IHJlbW92ZUFwcFN0YXRlSW5IYXNoKHRoaXMuZ2V0SGFzaCgpKTtcblx0XHRjb25zdCBzdGF0ZUZvckhhc2ggPSB0aGlzLl9vTWFuYWdlZEhpc3RvcnkuZmluZCgoc3RhdGUpID0+IHtcblx0XHRcdHJldHVybiByZW1vdmVBcHBTdGF0ZUluSGFzaChzdGF0ZS5oYXNoKSA9PT0gY3VycmVudEhhc2g7XG5cdFx0fSk7XG5cdFx0aWYgKHN0YXRlRm9ySGFzaCkge1xuXHRcdFx0Y29uc3QgZm9jdXNDb250cm9sSWQgPSBzYXAudWkuZ2V0Q29yZSgpLmdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkKCk7XG5cdFx0XHRjb25zdCBmb2N1c0NvbnRyb2wgPSBmb2N1c0NvbnRyb2xJZCA/IHNhcC51aS5nZXRDb3JlKCkuYnlJZChmb2N1c0NvbnRyb2xJZCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRzdGF0ZUZvckhhc2guZm9jdXNDb250cm9sSWQgPSBmb2N1c0NvbnRyb2xJZDtcblx0XHRcdHN0YXRlRm9ySGFzaC5mb2N1c0luZm8gPSBmb2N1c0NvbnRyb2w/LmdldEZvY3VzSW5mbygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyBhIGxheW91dCB2YWx1ZSBmb3IgYSBoYXNoIGluIHRoZSBoaXN0b3J5LlxuXHQgKlxuXHQgKiBAcGFyYW0gaGFzaCBUaGUgaGFzaCB0byBsb29rIGZvciBpbiB0aGUgaGlzdG9yeS5cblx0ICogQHJldHVybnMgQSBsYXlvdXQgdmFsdWUgaWYgaXQgY291bGQgYmUgZm91bmQsIHVuZGVmaW5lZCBvdGhlcndpc2UuXG5cdCAqL1xuXHRmaW5kTGF5b3V0Rm9ySGFzaChoYXNoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5mY2xFbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBhbGwgcXVlcnkgcGFyYW1ldGVycyBmcm9tIHRoZSBoYXNoXG5cdFx0Y29uc3QgaGFzaE5vUGFyYW0gPSBoYXNoLnNwbGl0KFwiP1wiKVswXTtcblxuXHRcdC8vIExvb2sgZm9yIHRoZSBzdGF0ZSBiYWNrd2FyZHMsIHNvIHRoYXQgd2UgZmluZCB0aGUgbGFzdCBzdGF0ZSBpbiB0aGUgaGlzdG9yeSAoZS5nLiBpZiB3ZSBoYXZlIDIgc3RhdGVzIHdpdGggdGhlIHNhbWUgaGFzaCBidXQgMiBkaWZmZXJlbnQgbGF5b3V0cylcblx0XHRsZXQgdGFyZ2V0U3RhdGU6IGFueTtcblx0XHRmb3IgKGxldCBpbmRleCA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeS5sZW5ndGggLSAxOyBpbmRleCA+PSAwICYmIHRhcmdldFN0YXRlID09PSB1bmRlZmluZWQ7IGluZGV4LS0pIHtcblx0XHRcdGlmICh0aGlzLl9vTWFuYWdlZEhpc3RvcnlbaW5kZXhdLmhhc2guc3BsaXQoXCI/XCIpWzBdID09PSBoYXNoTm9QYXJhbSkge1xuXHRcdFx0XHR0YXJnZXRTdGF0ZSA9IHRoaXMuX29NYW5hZ2VkSGlzdG9yeVtpbmRleF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRhcmdldFN0YXRlPy5zTGF5b3V0O1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlclByb3h5O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7OztFQVVBLE1BQU1BLFNBQVMsR0FBRztJQUNqQkMsS0FBSyxFQUFFLENBQUM7SUFDUkMsVUFBVSxFQUFFLENBQUM7SUFDYkMsUUFBUSxFQUFFLENBQUM7SUFDWEMsU0FBUyxFQUFFO0VBQ1osQ0FBQztFQUNELE1BQU1DLGFBQWEsR0FBRztJQUNyQkMsV0FBVyxFQUFFLFFBQVE7SUFDckJDLGNBQWMsRUFBRTtFQUNqQixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLG1CQUFtQixDQUFDQyxVQUFr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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/base/Log","sap/fe/core/helpers/ClassSupport","sap/fe/core/helpers/Synchronization","sap/ui/base/Object","sap/ui/core/Core","sap/ui/thirdparty/URI"],function(t,e,s,i,n,a){"use strict";var o,r;var h=e.defineUI5Class;function u(t,e){t.prototype=Object.create(e.prototype);t.prototype.constructor=t;c(t,e)}function c(t,e){c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function t(e,s){e.__proto__=s;return e};return c(t,e)}const l={EQUAL:0,COMPATIBLE:1,ANCESTOR:2,DIFFERENT:3};const f={LAYOUTPARAM:"layout",IAPPSTATEPARAM:"sap-iapp-state"};function d(t){return{_guardHash:t.replace(/\?[^?]*$/,""),check:function(t){return t.indexOf(this._guardHash)===0}}}function g(t){const e=t.match(new RegExp(`\\?.*${f.IAPPSTATEPARAM}=([^&]*)`));return e&&e.length>1?e[1]:null}function p(t){return t.replace(new RegExp(`[&?]*${f.IAPPSTATEPARAM}=[^&]*`),"")}function y(t,e){let s;if(t.indexOf(f.IAPPSTATEPARAM)>=0){s=t.replace(new RegExp(`${f.IAPPSTATEPARAM}=[^&]*`),`${f.IAPPSTATEPARAM}=${e}`)}else{if(t.indexOf("?")<0){s=`${t}?`}else{s=`${t}&`}s+=`${f.IAPPSTATEPARAM}=${e}`}return s}let _=(o=h("sap.fe.core.RouterProxy"),o(r=function(e){u(i,e);function i(){var t;for(var s=arguments.length,i=new Array(s),n=0;n<s;n++){i[n]=arguments[n]}t=e.call(this,...i)||this;t.bIsRebuildHistoryRunning=false;t.bIsComputingTitleHierachy=false;t.bIsGuardCrossAllowed=false;t.sIAppStateKey=null;t._bActivateRouteMatchSynchro=false;t._bApplyRestore=false;t._bDelayedRebuild=false;t._pathMappings=[];return t}var o=i.prototype;o.init=function e(s,i){s.getService("shellServices").then(()=>{this._oShellServices=s.getShellServices();this.initRaw(s.getRouter());this.waitForRouteMatchBeforeNavigation();history.replaceState(Object.assign({feLevel:0},history.state),"",window.location);this.fclEnabled=i;this._fnBlockingNavFilter=this._blockingNavigationFilter.bind(this);this._oShellServices.registerNavigationFilter(this._fnBlockingNavFilter)}).catch(function(e){t.error("Cannot retrieve the shell services",e)});this._fnHashGuard=this.hashGuard.bind(this);window.addEventListener("popstate",this._fnHashGuard);this._bDisableOnHashChange=false;this._bIgnoreRestore=false;this._bForceFocus=true};o.destroy=function t(){if(this._oShellServices){this._oShellServices.unregisterNavigationFilter(this._fnBlockingNavFilter)}window.removeEventListener("popstate",this._fnHashGuard)};o.initRaw=function t(e){this._oRouter=e;this._oManagedHistory=[];this._oNavigationGuard=null;const s=this.getHash();this._oManagedHistory.push(this._extractStateFromHash(s));this.sIAppStateKey=g(s)};o.getHash=function t(){return this._oRouter.getHashChanger().getHash()};o.isFocusForced=function t(){return this._bForceFocus};o.setFocusForced=function t(e){this._bForceFocus=e};o.removeIAppStateKey=function t(){this.sIAppStateKey=null};o.navToHash=function t(e,s,i,n,a){if(a!==false){this._oShellServices.setBackNavigation()}if(this._oRouteMatchSynchronization){return this._oRouteMatchSynchronization.waitFor().then(()=>{this._oRouteMatchSynchronization=undefined;return this._internalNavToHash(e,s,i,n)})}else{if(this._bActivateRouteMatchSynchro){this.waitForRouteMatchBeforeNavigation()}return this._internalNavToHash(e,s,i,n)}};o._internalNavToHash=function t(e,s,i,a){if(this.fclEnabled&&this.sIAppStateKey&&!g(e)){e=y(e,this.sIAppStateKey)}if(!this.checkHashWithGuard(e)){if(!this.oResourceBundle){this.oResourceBundle=n.getLibraryResourceBundle("sap.fe.core")}if(!confirm(this.oResourceBundle.getText("C_ROUTER_PROXY_SAPFE_EXIT_NOTSAVED_MESSAGE"))){return Promise.resolve(false)}this.bIsGuardCrossAllowed=true}const o=this._extractStateFromHash(e);if(!this._bForceFocus){const t=this._extractEntitySetsFromHash(this.getHash());this._bForceFocus=a||t.length<o.keys.length&&t.every(function(t,e){return t===o.keys[e]})}const r=this._pushNewState(o,false,s,i);return this._rebuildBrowserHistory(r,false)};o.restoreHistory=function t(){if(this._bApplyRestore){this._bApplyRestore=false;let t=this.getHash();t=t.replace(/(\?|&)restoreHistory=true/,"");const e=this._extractStateFromHash(t);const s=this._pushNewState(e,true,false,true);return this._rebuildBrowserHistory(s,true)}else{return Promise.resolve()}};o.navBack=function t(){const e=this.getHash();let s;for(let t=this._oManagedHistory.length-1;t>0;t--){if(this._oManagedHistory[t].hash===e){s=this._oManagedHistory[t-1].hash;break}}if(s){return this.navToHash(s)}else{window.history.back();return Promise.resolve()}};o.navTo=function t(e,s){const i=this._oRouter.getURL(e,s);return this.navToHash(i,false,s.noPreservationCache,false,!s.bIsStickyMode)};o.exitFromApp=function t(){return this._oShellServices.backToPreviousApp()};o.isCurrentStateImpactedBy=function t(e){if(e[0]==="/"){e=e.substring(1)}const s=d(e);return s.check(this.getHash())};o.isNavigationFinalized=function t(){return!this.bIsRebuildHistoryRunning&&!this._bDelayedRebuild};o.setNavigationGuard=function t(e){this._oNavigationGuard=d(e);this.bIsGuardCrossAllowed=false};o.discardNavigationGuard=function t(){this._oNavigationGuard=null};o.hasNavigationGuard=function t(){return this._oNavigationGuard!==null};o.checkHashWithGuard=function t(e){return this._oNavigationGuard===null||this._oNavigationGuard.check(e)};o.isGuardCrossAllowedByUser=function t(){return this.bIsGuardCrossAllowed};o.activateRouteMatchSynchronization=function t(){this._bActivateRouteMatchSynchro=true};o.resolveRouteMatch=function t(){if(this._oRouteMatchSynchronization){this._oRouteMatchSynchronization.resolve()}};o.waitForRouteMatchBeforeNavigation=function t(){this._oRouteMatchSynchronization=new s;this._bActivateRouteMatchSynchro=false};o._extractEntitySetsFromHash=function t(e){if(e===undefined){e=""}const s=e.split("?")[0];const i=s.split("/");const n=[];i.forEach(t=>{if(t.length){n.push(t.split("(")[0])}});return n};o._extractStateFromHash=function t(e){if(e===undefined){e=""}const s={keys:this._extractEntitySetsFromHash(e)};const i=e.match(new RegExp(`\\?.*${f.LAYOUTPARAM}=([^&]*)`));s.sLayout=i&&i.length>1?i[1]:null;if(s.sLayout==="MidColumnFullScreen"){s.screenMode=1}else if(s.sLayout==="EndColumnFullScreen"){s.screenMode=2}else{s.screenMode=0}s.hash=e;return s};o._pushNewState=function t(e,s,i,n){const a=this.getHash();let o=this._oManagedHistory.length-1;let r=s?1:0;if(!s){while(o>=0&&this._oManagedHistory[o].hash!==a){this._oManagedHistory.pop();o--}if(this._oManagedHistory.length===0){this._oManagedHistory.push(this._extractStateFromHash(a));history.replaceState(Object.assign({feLevel:0},history.state),"")}}if(i&&!n){this._oManagedHistory[this._oManagedHistory.length-1].preserved=true}let h;while(this._oManagedHistory.length>0){const t=this._oManagedHistory[this._oManagedHistory.length-1];if((n||!t.preserved)&&this._compareCacheStates(t,e)!==l.ANCESTOR){h=this._oManagedHistory.pop();r++}else if(t.preserved&&p(t.hash)===p(e.hash)){h=this._oManagedHistory.pop();r++;e.preserved=true;break}else{break}}this.sIAppStateKey=g(e.hash);if(!this.fclEnabled&&h){const t=g(h.hash);const s=this._compareCacheStates(h,e);if(!this.sIAppStateKey&&t&&(s===l.EQUAL||s===l.COMPATIBLE)){e.hash=y(e.hash,t)}}const u=h&&e.hash===h.hash;if(this._oManagedHistory.length===0||this._oManagedHistory[this._oManagedHistory.length-1].hash!==e.hash){this._oManagedHistory.push(e)}if(r===0){return{type:"append"}}else if(r===1){return u?{type:"none"}:{type:"replace"}}else{return u?{type:"back",steps:r-1}:{type:"back-replace",steps:r-1}}};o._blockingNavigationFilter=function t(){return this._bDisableOnHashChange?"Custom":"Continue"};o._disableEventOnHashChange=function t(){this._bDisableOnHashChange=true;this._oRouter.stop()};o._enableEventOnHashChange=function t(e){this._bDisableOnHashChange=false;this._oRouter.initialize(e)};o._rebuildBrowserHistory=function t(e,s){const i=this;return new Promise(t=>{this.bIsRebuildHistoryRunning=true;const n=this._oManagedHistory[this._oManagedHistory.length-1],a=this._oManagedHistory.length-1;function o(){if(!s){i._enableEventOnHashChange(true)}i._oRouter.getHashChanger().replaceHash(n.hash);history.replaceState(Object.assign({feLevel:a},history.state),"");if(s){setTimeout(function(){i._enableEventOnHashChange(true)},0)}i.bIsRebuildHistoryRunning=false;t(true)}function r(){window.removeEventListener("popstate",r);setTimeout(function(){o()},0)}function h(){window.removeEventListener("popstate",h);i.bIsRebuildHistoryRunning=false;t(true)}i._bIgnoreRestore=true;switch(e.type){case"replace":i._oRouter.getHashChanger().replaceHash(n.hash);history.replaceState(Object.assign({feLevel:a},history.state),"");i.bIsRebuildHistoryRunning=false;t(true);break;case"append":i._oRouter.getHashChanger().setHash(n.hash);history.replaceState(Object.assign({feLevel:a},history.state),"");i.bIsRebuildHistoryRunning=false;t(true);break;case"back":window.addEventListener("popstate",h);history.go(-e.steps);break;case"back-replace":this._disableEventOnHashChange();window.addEventListener("popstate",r);history.go(-e.steps);break;default:this.bIsRebuildHistoryRunning=false;t(false)}})};o.getLastHistoryEntry=function t(){return this._oManagedHistory[this._oManagedHistory.length-1]};o.setPathMapping=function t(e){this._pathMappings=e.filter(t=>t.oldPath!==t.newPath)};o.hashGuard=function t(){let e=window.location.hash;if(e.indexOf("restoreHistory=true")!==-1){this._bApplyRestore=true}else if(!this.bIsRebuildHistoryRunning){const t=this._pathMappings.find(t=>e.indexOf(t.oldPath)>=0);if(t){e=e.replace(t.oldPath,t.newPath);history.replaceState(Object.assign({},history.state),"",e)}const s=e.split("&/");const i=s[1]?s[1]:"";if(this.checkHashWithGuard(i)){this._bDelayedRebuild=true;const t=this._extractStateFromHash(i);this._pushNewState(t,false,false,true);setTimeout(()=>{this._bDelayedRebuild=false},0)}}};o._compareCacheStates=function t(e,s){if(e.keys.length>s.keys.length){return l.DIFFERENT}let i=true;let n;for(n=0;i&&n<e.keys.length;n++){if(e.keys[n]!==s.keys[n]){i=false}}if(!i){return l.DIFFERENT}if(e.keys.length<s.keys.length||e.screenMode<s.screenMode){return l.ANCESTOR}if(e.screenMode>s.screenMode){return l.DIFFERENT}return e.sLayout===s.sLayout?l.EQUAL:l.COMPATIBLE};o.checkIfBackIsOutOfGuard=function t(e){let s;let i;if(e===undefined){const t=this._oShellServices.splitHash(window.location.hash);if(t&&t.appSpecificRoute){i=t.appSpecificRoute;if(i.indexOf("&/")===0){i=i.substring(2)}}else{i=window.location.hash.substring(1);if(i[0]==="/"){i=i.substring(1)}}}else{i=e}e=a.decode(i);if(this._oNavigationGuard){for(let t=this._oManagedHistory.length-1;t>0;t--){if(this._oManagedHistory[t].hash===e){s=this._oManagedHistory[t-1].hash;break}}return!s||!this.checkHashWithGuard(s)}return false};o.checkIfBackHasSameContext=function t(){if(this._oManagedHistory.length<2){return false}const e=this._oManagedHistory[this._oManagedHistory.length-1];const s=this._oManagedHistory[this._oManagedHistory.length-2];return e.hash.split("?")[0]===s.hash.split("?")[0]};return i}(i))||r);return _},false);
|
|
5
|
+
sap.ui.define(["sap/base/Log","sap/fe/core/helpers/ClassSupport","sap/fe/core/helpers/Synchronization","sap/ui/base/Object","sap/ui/core/Core","sap/ui/thirdparty/URI"],function(t,e,s,i,n,o){"use strict";var a,r;var h=e.defineUI5Class;function u(t,e){t.prototype=Object.create(e.prototype);t.prototype.constructor=t;c(t,e)}function c(t,e){c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function t(e,s){e.__proto__=s;return e};return c(t,e)}const l={EQUAL:0,COMPATIBLE:1,ANCESTOR:2,DIFFERENT:3};const f={LAYOUTPARAM:"layout",IAPPSTATEPARAM:"sap-iapp-state"};function d(t){return{_guardHash:t.replace(/\?[^?]*$/,""),check:function(t){return t.indexOf(this._guardHash)===0}}}function g(t){const e=t.match(new RegExp(`\\?.*${f.IAPPSTATEPARAM}=([^&]*)`));return e&&e.length>1?e[1]:null}function p(t){return t.replace(new RegExp(`[&?]*${f.IAPPSTATEPARAM}=[^&]*`),"")}function y(t,e){let s;if(t.indexOf(f.IAPPSTATEPARAM)>=0){s=t.replace(new RegExp(`${f.IAPPSTATEPARAM}=[^&]*`),`${f.IAPPSTATEPARAM}=${e}`)}else{if(t.indexOf("?")<0){s=`${t}?`}else{s=`${t}&`}s+=`${f.IAPPSTATEPARAM}=${e}`}return s}let _=(a=h("sap.fe.core.RouterProxy"),a(r=function(e){u(i,e);function i(){var t;for(var s=arguments.length,i=new Array(s),n=0;n<s;n++){i[n]=arguments[n]}t=e.call(this,...i)||this;t.bIsRebuildHistoryRunning=false;t.bIsComputingTitleHierachy=false;t.bIsGuardCrossAllowed=false;t.sIAppStateKey=null;t._bActivateRouteMatchSynchro=false;t._bApplyRestore=false;t._bDelayedRebuild=false;t._pathMappings=[];return t}var a=i.prototype;a.init=function e(s,i){s.getService("shellServices").then(()=>{this._oShellServices=s.getShellServices();this.initRaw(s.getRouter());this.waitForRouteMatchBeforeNavigation();history.replaceState(Object.assign({feLevel:0},history.state),"",window.location);this.fclEnabled=i;this._fnBlockingNavFilter=this._blockingNavigationFilter.bind(this);this._oShellServices.registerNavigationFilter(this._fnBlockingNavFilter)}).catch(function(e){t.error("Cannot retrieve the shell services",e)});this._fnHashGuard=this.hashGuard.bind(this);window.addEventListener("popstate",this._fnHashGuard);this._bDisableOnHashChange=false;this._bIgnoreRestore=false;this._bForceFocus=true};a.destroy=function t(){if(this._oShellServices){this._oShellServices.unregisterNavigationFilter(this._fnBlockingNavFilter)}window.removeEventListener("popstate",this._fnHashGuard)};a.initRaw=function t(e){this._oRouter=e;this._oManagedHistory=[];this._oNavigationGuard=null;const s=this.getHash();this._oManagedHistory.push(this._extractStateFromHash(s));this.sIAppStateKey=g(s)};a.getHash=function t(){return this._oRouter.getHashChanger().getHash()};a.isFocusForced=function t(){return this._bForceFocus};a.setFocusForced=function t(e){this._bForceFocus=e};a.removeIAppStateKey=function t(){this.sIAppStateKey=null};a.navToHash=function t(e,s,i,n,o){if(o!==false){this._oShellServices.setBackNavigation()}if(this._oRouteMatchSynchronization){return this._oRouteMatchSynchronization.waitFor().then(()=>{this._oRouteMatchSynchronization=undefined;return this._internalNavToHash(e,s,i,n)})}else{if(this._bActivateRouteMatchSynchro){this.waitForRouteMatchBeforeNavigation()}return this._internalNavToHash(e,s,i,n)}};a._internalNavToHash=function t(e,s,i,o){if(this.fclEnabled&&this.sIAppStateKey&&!g(e)){e=y(e,this.sIAppStateKey)}if(!this.checkHashWithGuard(e)){if(!this.oResourceBundle){this.oResourceBundle=n.getLibraryResourceBundle("sap.fe.core")}if(!confirm(this.oResourceBundle.getText("C_ROUTER_PROXY_SAPFE_EXIT_NOTSAVED_MESSAGE"))){return Promise.resolve(false)}this.bIsGuardCrossAllowed=true}const a=this._extractStateFromHash(e);if(!this._bForceFocus){const t=this._extractEntitySetsFromHash(this.getHash());this._bForceFocus=o||t.length<a.keys.length&&t.every(function(t,e){return t===a.keys[e]})}const r=this._pushNewState(a,false,s,i);this.storeFocusInfoForCurrentHash();return this._rebuildBrowserHistory(r,false)};a.restoreHistory=function t(){if(this._bApplyRestore){this._bApplyRestore=false;let t=this.getHash();t=t.replace(/(\?|&)restoreHistory=true/,"");const e=this._extractStateFromHash(t);const s=this._pushNewState(e,true,false,true);return this._rebuildBrowserHistory(s,true)}else{return Promise.resolve()}};a.navBack=function t(){const e=this.getHash();let s;for(let t=this._oManagedHistory.length-1;t>0;t--){if(this._oManagedHistory[t].hash===e){s=this._oManagedHistory[t-1].hash;break}}if(s){return this.navToHash(s)}else{window.history.back();return Promise.resolve()}};a.navTo=function t(e,s){const i=this._oRouter.getURL(e,s);return this.navToHash(i,false,s.noPreservationCache,false,!s.bIsStickyMode)};a.exitFromApp=function t(){return this._oShellServices.backToPreviousApp()};a.isCurrentStateImpactedBy=function t(e){if(e[0]==="/"){e=e.substring(1)}const s=d(e);return s.check(this.getHash())};a.isNavigationFinalized=function t(){return!this.bIsRebuildHistoryRunning&&!this._bDelayedRebuild};a.setNavigationGuard=function t(e){this._oNavigationGuard=d(e);this.bIsGuardCrossAllowed=false};a.discardNavigationGuard=function t(){this._oNavigationGuard=null};a.hasNavigationGuard=function t(){return this._oNavigationGuard!==null};a.checkHashWithGuard=function t(e){return this._oNavigationGuard===null||this._oNavigationGuard.check(e)};a.isGuardCrossAllowedByUser=function t(){return this.bIsGuardCrossAllowed};a.activateRouteMatchSynchronization=function t(){this._bActivateRouteMatchSynchro=true};a.resolveRouteMatch=function t(){if(this._oRouteMatchSynchronization){this._oRouteMatchSynchronization.resolve()}};a.waitForRouteMatchBeforeNavigation=function t(){this._oRouteMatchSynchronization=new s;this._bActivateRouteMatchSynchro=false};a._extractEntitySetsFromHash=function t(e){if(e===undefined){e=""}const s=e.split("?")[0];const i=s.split("/");const n=[];i.forEach(t=>{if(t.length){n.push(t.split("(")[0])}});return n};a._extractStateFromHash=function t(e){if(e===undefined){e=""}const s={keys:this._extractEntitySetsFromHash(e)};const i=e.match(new RegExp(`\\?.*${f.LAYOUTPARAM}=([^&]*)`));s.sLayout=i&&i.length>1?i[1]:null;if(s.sLayout==="MidColumnFullScreen"){s.screenMode=1}else if(s.sLayout==="EndColumnFullScreen"){s.screenMode=2}else{s.screenMode=0}s.hash=e;return s};a._pushNewState=function t(e,s,i,n){const o=this.getHash();let a=this._oManagedHistory.length-1;let r=s?1:0;if(!s){while(a>=0&&this._oManagedHistory[a].hash!==o){this._oManagedHistory.pop();a--}if(this._oManagedHistory.length===0){this._oManagedHistory.push(this._extractStateFromHash(o));history.replaceState(Object.assign({feLevel:0},history.state),"")}}if(i&&!n){this._oManagedHistory[this._oManagedHistory.length-1].preserved=true}let h;while(this._oManagedHistory.length>0){const t=this._oManagedHistory[this._oManagedHistory.length-1];if((n||!t.preserved)&&this._compareCacheStates(t,e)!==l.ANCESTOR){h=this._oManagedHistory.pop();r++}else if(t.preserved&&p(t.hash)===p(e.hash)){h=this._oManagedHistory.pop();r++;e.preserved=true;break}else{break}}this.sIAppStateKey=g(e.hash);if(!this.fclEnabled&&h){const t=g(h.hash);const s=this._compareCacheStates(h,e);if(!this.sIAppStateKey&&t&&(s===l.EQUAL||s===l.COMPATIBLE)){e.hash=y(e.hash,t)}}const u=h&&e.hash===h.hash;if(this._oManagedHistory.length===0||this._oManagedHistory[this._oManagedHistory.length-1].hash!==e.hash){this._oManagedHistory.push(e);if(h&&p(h.hash)===p(e.hash)){e.focusControlId=h.focusControlId;e.focusInfo=h.focusInfo}}if(r===0){return{type:"append"}}else if(r===1){return u?{type:"none"}:{type:"replace"}}else{return u?{type:"back",steps:r-1}:{type:"back-replace",steps:r-1}}};a._blockingNavigationFilter=function t(){return this._bDisableOnHashChange?"Custom":"Continue"};a._disableEventOnHashChange=function t(){this._bDisableOnHashChange=true;this._oRouter.stop()};a._enableEventOnHashChange=function t(e){this._bDisableOnHashChange=false;this._oRouter.initialize(e)};a._rebuildBrowserHistory=function t(e,s){const i=this;return new Promise(t=>{this.bIsRebuildHistoryRunning=true;const n=this._oManagedHistory[this._oManagedHistory.length-1],o=this._oManagedHistory.length-1;function a(){if(!s){i._enableEventOnHashChange(true)}i._oRouter.getHashChanger().replaceHash(n.hash);history.replaceState(Object.assign({feLevel:o},history.state),"");if(s){setTimeout(function(){i._enableEventOnHashChange(true)},0)}i.bIsRebuildHistoryRunning=false;t(true)}function r(){window.removeEventListener("popstate",r);setTimeout(function(){a()},0)}function h(){window.removeEventListener("popstate",h);i.bIsRebuildHistoryRunning=false;t(true)}i._bIgnoreRestore=true;switch(e.type){case"replace":i._oRouter.getHashChanger().replaceHash(n.hash);history.replaceState(Object.assign({feLevel:o},history.state),"");i.bIsRebuildHistoryRunning=false;t(true);break;case"append":i._oRouter.getHashChanger().setHash(n.hash);history.replaceState(Object.assign({feLevel:o},history.state),"");i.bIsRebuildHistoryRunning=false;t(true);break;case"back":window.addEventListener("popstate",h);history.go(-e.steps);break;case"back-replace":this._disableEventOnHashChange();window.addEventListener("popstate",r);history.go(-e.steps);break;default:this.bIsRebuildHistoryRunning=false;t(false)}})};a.getLastHistoryEntry=function t(){return this._oManagedHistory[this._oManagedHistory.length-1]};a.setPathMapping=function t(e){this._pathMappings=e.filter(t=>t.oldPath!==t.newPath)};a.hashGuard=function t(){let e=window.location.hash;if(e.indexOf("restoreHistory=true")!==-1){this._bApplyRestore=true}else if(!this.bIsRebuildHistoryRunning){const t=this._pathMappings.find(t=>e.indexOf(t.oldPath)>=0);if(t){e=e.replace(t.oldPath,t.newPath);history.replaceState(Object.assign({},history.state),"",e)}const s=e.split("&/");const i=s[1]?s[1]:"";if(this.checkHashWithGuard(i)){this._bDelayedRebuild=true;const t=this._extractStateFromHash(i);this._pushNewState(t,false,false,true);setTimeout(()=>{this._bDelayedRebuild=false},0)}}};a._compareCacheStates=function t(e,s){if(e.keys.length>s.keys.length){return l.DIFFERENT}let i=true;let n;for(n=0;i&&n<e.keys.length;n++){if(e.keys[n]!==s.keys[n]){i=false}}if(!i){return l.DIFFERENT}if(e.keys.length<s.keys.length||e.screenMode<s.screenMode){return l.ANCESTOR}if(e.screenMode>s.screenMode){return l.DIFFERENT}return e.sLayout===s.sLayout?l.EQUAL:l.COMPATIBLE};a.checkIfBackIsOutOfGuard=function t(e){let s;let i;if(e===undefined){const t=this._oShellServices.splitHash(window.location.hash);if(t&&t.appSpecificRoute){i=t.appSpecificRoute;if(i.indexOf("&/")===0){i=i.substring(2)}}else{i=window.location.hash.substring(1);if(i[0]==="/"){i=i.substring(1)}}}else{i=e}e=o.decode(i);if(this._oNavigationGuard){for(let t=this._oManagedHistory.length-1;t>0;t--){if(this._oManagedHistory[t].hash===e){s=this._oManagedHistory[t-1].hash;break}}return!s||!this.checkHashWithGuard(s)}return false};a.checkIfBackHasSameContext=function t(){if(this._oManagedHistory.length<2){return false}const e=this._oManagedHistory[this._oManagedHistory.length-1];const s=this._oManagedHistory[this._oManagedHistory.length-2];return e.hash.split("?")[0]===s.hash.split("?")[0]};a.restoreFocusForCurrentHash=function t(){const e=p(this.getHash());const s=this._oManagedHistory.find(t=>p(t.hash)===e);let i=false;if(s!==null&&s!==void 0&&s.focusControlId){const t=sap.ui.getCore().byId(s.focusControlId);t===null||t===void 0?void 0:t.focus(s.focusInfo);i=t!==undefined}return i};a.storeFocusInfoForCurrentHash=function t(){const e=p(this.getHash());const s=this._oManagedHistory.find(t=>p(t.hash)===e);if(s){const t=sap.ui.getCore().getCurrentFocusedControlId();const e=t?sap.ui.getCore().byId(t):undefined;s.focusControlId=t;s.focusInfo=e===null||e===void 0?void 0:e.getFocusInfo()}};a.findLayoutForHash=function t(e){var s;if(!this.fclEnabled){return undefined}const i=e.split("?")[0];let n;for(let t=this._oManagedHistory.length-1;t>=0&&n===undefined;t--){if(this._oManagedHistory[t].hash.split("?")[0]===i){n=this._oManagedHistory[t]}}return(s=n)===null||s===void 0?void 0:s.sLayout};return i}(i))||r);return _},false);
|
|
6
6
|
//# sourceMappingURL=RouterProxy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterProxy.js","names":["sap","ui","define","Log","ClassSupport","Synchronization","BaseObject","Core","URI","_dec","_class","defineUI5Class","_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","_setPrototypeOf","o","p","setPrototypeOf","bind","__proto__","enumState","EQUAL","COMPATIBLE","ANCESTOR","DIFFERENT","enumURLParams","LAYOUTPARAM","IAPPSTATEPARAM","createGuardFromHash","sGuardHash","_guardHash","replace","check","sHash","indexOf","this","findAppStateInHash","aAppState","match","RegExp","length","removeAppStateInHash","setAppStateInHash","sAppStateKey","sNewHash","RouterProxy","_BaseObject","_this","_len","arguments","args","Array","_key","call","bIsRebuildHistoryRunning","bIsComputingTitleHierachy","bIsGuardCrossAllowed","sIAppStateKey","_bActivateRouteMatchSynchro","_bApplyRestore","_bDelayedRebuild","_pathMappings","_proto","init","oAppComponent","isfclEnabled","getService","then","_oShellServices","getShellServices","initRaw","getRouter","waitForRouteMatchBeforeNavigation","history","replaceState","assign","feLevel","state","window","location","fclEnabled","_fnBlockingNavFilter","_blockingNavigationFilter","registerNavigationFilter","catch","oError","error","_fnHashGuard","hashGuard","addEventListener","_bDisableOnHashChange","_bIgnoreRestore","_bForceFocus","destroy","unregisterNavigationFilter","removeEventListener","oRouter","_oRouter","_oManagedHistory","_oNavigationGuard","sCurrentAppHash","getHash","push","_extractStateFromHash","getHashChanger","isFocusForced","setFocusForced","bForced","removeIAppStateKey","navToHash","bPreserveHistory","bDisablePreservationCache","bForceFocus","bPreserveShellBackNavigationHandler","setBackNavigation","_oRouteMatchSynchronization","waitFor","undefined","_internalNavToHash","checkHashWithGuard","oResourceBundle","getLibraryResourceBundle","confirm","getText","Promise","resolve","oNewState","aCurrentHashKeys","_extractEntitySetsFromHash","keys","every","key","index","oHistoryAction","_pushNewState","_rebuildBrowserHistory","restoreHistory","sTargetHash","navBack","sCurrentHash","sPreviousHash","i","hash","back","navTo","sRouteName","oParameters","getURL","noPreservationCache","bIsStickyMode","exitFromApp","backToPreviousApp","isCurrentStateImpactedBy","substring","oLocalGuard","isNavigationFinalized","setNavigationGuard","discardNavigationGuard","hasNavigationGuard","isGuardCrossAllowedByUser","activateRouteMatchSynchronization","resolveRouteMatch","sHashNoParams","split","aTokens","names","forEach","sToken","oState","aLayout","sLayout","screenMode","bRebuildOnly","bDisableHistoryPreservation","lastIndex","iPopCount","pop","preserved","oLastRemovedItem","oTopState","_compareCacheStates","sPreviousIAppStateKey","oComparisonStateResult","bHasSameHash","type","steps","_disableEventOnHashChange","stop","_enableEventOnHashChange","bIgnoreCurrentHash","initialize","that","oTargetState","newLevel","replaceAsync","replaceHash","setTimeout","backReplaceAsync","backAsync","setHash","go","getLastHistoryEntry","setPathMapping","mappings","filter","mapping","oldPath","newPath","find","m","aHashSplit","sAppHash","oState1","oState2","equal","checkIfBackIsOutOfGuard","sPresentHash","sPrevHash","oSplitHash","splitHash","appSpecificRoute","decode","checkIfBackHasSameContext","oCurrentState","oPreviousState"],"sources":["RouterProxy-dbg.js"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RouterProxy.js","names":["sap","ui","define","Log","ClassSupport","Synchronization","BaseObject","Core","URI","_dec","_class","defineUI5Class","_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","_setPrototypeOf","o","p","setPrototypeOf","bind","__proto__","enumState","EQUAL","COMPATIBLE","ANCESTOR","DIFFERENT","enumURLParams","LAYOUTPARAM","IAPPSTATEPARAM","createGuardFromHash","sGuardHash","_guardHash","replace","check","sHash","indexOf","this","findAppStateInHash","aAppState","match","RegExp","length","removeAppStateInHash","setAppStateInHash","sAppStateKey","sNewHash","RouterProxy","_BaseObject","_this","_len","arguments","args","Array","_key","call","bIsRebuildHistoryRunning","bIsComputingTitleHierachy","bIsGuardCrossAllowed","sIAppStateKey","_bActivateRouteMatchSynchro","_bApplyRestore","_bDelayedRebuild","_pathMappings","_proto","init","oAppComponent","isfclEnabled","getService","then","_oShellServices","getShellServices","initRaw","getRouter","waitForRouteMatchBeforeNavigation","history","replaceState","assign","feLevel","state","window","location","fclEnabled","_fnBlockingNavFilter","_blockingNavigationFilter","registerNavigationFilter","catch","oError","error","_fnHashGuard","hashGuard","addEventListener","_bDisableOnHashChange","_bIgnoreRestore","_bForceFocus","destroy","unregisterNavigationFilter","removeEventListener","oRouter","_oRouter","_oManagedHistory","_oNavigationGuard","sCurrentAppHash","getHash","push","_extractStateFromHash","getHashChanger","isFocusForced","setFocusForced","bForced","removeIAppStateKey","navToHash","bPreserveHistory","bDisablePreservationCache","bForceFocus","bPreserveShellBackNavigationHandler","setBackNavigation","_oRouteMatchSynchronization","waitFor","undefined","_internalNavToHash","checkHashWithGuard","oResourceBundle","getLibraryResourceBundle","confirm","getText","Promise","resolve","oNewState","aCurrentHashKeys","_extractEntitySetsFromHash","keys","every","key","index","oHistoryAction","_pushNewState","storeFocusInfoForCurrentHash","_rebuildBrowserHistory","restoreHistory","sTargetHash","navBack","sCurrentHash","sPreviousHash","i","hash","back","navTo","sRouteName","oParameters","getURL","noPreservationCache","bIsStickyMode","exitFromApp","backToPreviousApp","isCurrentStateImpactedBy","substring","oLocalGuard","isNavigationFinalized","setNavigationGuard","discardNavigationGuard","hasNavigationGuard","isGuardCrossAllowedByUser","activateRouteMatchSynchronization","resolveRouteMatch","sHashNoParams","split","aTokens","names","forEach","sToken","oState","aLayout","sLayout","screenMode","bRebuildOnly","bDisableHistoryPreservation","lastIndex","iPopCount","pop","preserved","oLastRemovedItem","oTopState","_compareCacheStates","sPreviousIAppStateKey","oComparisonStateResult","bHasSameHash","focusControlId","focusInfo","type","steps","_disableEventOnHashChange","stop","_enableEventOnHashChange","bIgnoreCurrentHash","initialize","that","oTargetState","newLevel","replaceAsync","replaceHash","setTimeout","backReplaceAsync","backAsync","setHash","go","getLastHistoryEntry","setPathMapping","mappings","filter","mapping","oldPath","newPath","find","m","aHashSplit","sAppHash","oState1","oState2","equal","checkIfBackIsOutOfGuard","sPresentHash","sPrevHash","oSplitHash","splitHash","appSpecificRoute","decode","checkIfBackHasSameContext","oCurrentState","oPreviousState","restoreFocusForCurrentHash","currentHash","stateForHash","focusApplied","focusControl","getCore","byId","focus","getCurrentFocusedControlId","getFocusInfo","findLayoutForHash","_targetState","hashNoParam","targetState"],"sources":["RouterProxy-dbg.js"],"mappings":"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"}
|