@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
|
@@ -170,6 +170,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
170
170
|
async function executeDraftValidation(context, appComponent, ignoreETag) {
|
|
171
171
|
if (draft.getMessagesPath(context) && draft.hasPrepareAction(context)) {
|
|
172
172
|
try {
|
|
173
|
+
if (!ignoreETag) {
|
|
174
|
+
// We need to wait for the entity related to the context to post the action with the If-Match header
|
|
175
|
+
// Some triggers (enter on table) can generate a promise in the cache so if we don't wait for the entity
|
|
176
|
+
// the POST will be sent without If-Match and will generate an error on backend side.
|
|
177
|
+
await context.getBinding().requestObject("");
|
|
178
|
+
}
|
|
173
179
|
const operation = await draft.executeDraftPreparationAction(context, context.getUpdateGroupId(), true, ignoreETag);
|
|
174
180
|
// if there is no returned operation by executeDraftPreparationAction -> the action has failed
|
|
175
181
|
if (operation && !getReturnType(context, draftOperations.PREPARE)) {
|
|
@@ -354,14 +360,20 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
354
360
|
*
|
|
355
361
|
* @param rootCurrentContext The context for the root of the draft
|
|
356
362
|
* @param rightmostCurrentContext The context of the subobject page
|
|
363
|
+
* @param rootContextInfo The context info of root of the draft
|
|
357
364
|
* @returns The siblingInformation object
|
|
358
365
|
*/
|
|
359
|
-
async function computeSiblingInformation(rootCurrentContext, rightmostCurrentContext) {
|
|
366
|
+
async function computeSiblingInformation(rootCurrentContext, rightmostCurrentContext, rootContextInfo) {
|
|
360
367
|
if (!rightmostCurrentContext.getPath().startsWith(rootCurrentContext.getPath())) {
|
|
361
368
|
// Wrong usage !!
|
|
362
369
|
Log.error("Cannot compute rightmost sibling context");
|
|
363
370
|
throw new Error("Cannot compute rightmost sibling context");
|
|
364
371
|
}
|
|
372
|
+
if (rightmostCurrentContext.getProperty("IsActiveEntity") === false && rightmostCurrentContext.getProperty("HasActiveEntity") === false) {
|
|
373
|
+
// We already know the sibling for rightmostCurrentContext doesn't exist
|
|
374
|
+
// --> No need to check canonical paths etc...
|
|
375
|
+
return undefined;
|
|
376
|
+
}
|
|
365
377
|
const model = rootCurrentContext.getModel();
|
|
366
378
|
try {
|
|
367
379
|
// //////////////////////////////////////////////////////////////////
|
|
@@ -382,7 +394,16 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
382
394
|
const oldPaths = [];
|
|
383
395
|
const newPaths = [];
|
|
384
396
|
let currentPath = "";
|
|
385
|
-
|
|
397
|
+
|
|
398
|
+
// Computing sibling entity of root of the draft context is not required if the context is already in the sub-OP
|
|
399
|
+
// Example: Edit in Sub-OP where new context is already available
|
|
400
|
+
const paths = [...segments];
|
|
401
|
+
if ((rootContextInfo === null || rootContextInfo === void 0 ? void 0 : rootContextInfo.rootContextNotRequired) === true) {
|
|
402
|
+
var _rootCurrentContext$g;
|
|
403
|
+
paths.shift();
|
|
404
|
+
currentPath = "/" + (rootCurrentContext === null || rootCurrentContext === void 0 ? void 0 : (_rootCurrentContext$g = rootCurrentContext.getPath()) === null || _rootCurrentContext$g === void 0 ? void 0 : _rootCurrentContext$g.substring(1));
|
|
405
|
+
}
|
|
406
|
+
const canonicalPathPromises = paths.map(segment => {
|
|
386
407
|
currentPath += `/${segment}`;
|
|
387
408
|
oldPaths.unshift(currentPath);
|
|
388
409
|
if (currentPath.endsWith(")")) {
|
|
@@ -398,6 +419,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
398
419
|
// Example: for canonical paths "/Param(aa)/Entity(bb-sibling)", "/Entity2(cc-sibling)", "/Entity3(dd-sibling)"
|
|
399
420
|
// --> ["Param(aa)/Entity(bb-sibling)", "Param(aa)/Entity(bb-sibling)/_Nav(cc-sibling)", "Param(aa)/Entity(bb-sibling)/_Nav(cc-sibling)/_SubNav(dd-sibling)"]
|
|
400
421
|
const canonicalPaths = await Promise.all(canonicalPathPromises);
|
|
422
|
+
if ((rootContextInfo === null || rootContextInfo === void 0 ? void 0 : rootContextInfo.rootContextNotRequired) === true) {
|
|
423
|
+
canonicalPaths.unshift(rootContextInfo === null || rootContextInfo === void 0 ? void 0 : rootContextInfo.rootSiblingPath);
|
|
424
|
+
oldPaths.push(rootCurrentContext.getPath());
|
|
425
|
+
}
|
|
401
426
|
let siblingPath = "";
|
|
402
427
|
canonicalPaths.forEach((canonicalPath, index) => {
|
|
403
428
|
if (index !== 0) {
|
|
@@ -415,7 +440,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
415
440
|
newPaths.unshift(siblingPath);
|
|
416
441
|
});
|
|
417
442
|
return {
|
|
418
|
-
targetContext: model.bindContext(siblingPath
|
|
443
|
+
targetContext: model.bindContext(siblingPath, undefined, {
|
|
444
|
+
$$groupId: "$auto.Heroes"
|
|
445
|
+
}).getBoundContext(),
|
|
419
446
|
// Create the rightmost sibling context from its path
|
|
420
447
|
pathMapping: oldPaths.map((oldPath, index) => {
|
|
421
448
|
return {
|
|
@@ -681,4 +708,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
681
708
|
};
|
|
682
709
|
return draft;
|
|
683
710
|
}, false);
|
|
684
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkcmFmdE9wZXJhdGlvbnMiLCJFRElUIiwiQUNUSVZBVElPTiIsIkRJU0NBUkQiLCJQUkVQQVJFIiwiZ2V0QWN0aW9uTmFtZSIsIm9Db250ZXh0Iiwic09wZXJhdGlvbiIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZ2V0T2JqZWN0IiwiY3JlYXRlT3BlcmF0aW9uIiwib09wdGlvbnMiLCJzT3BlcmF0aW9uTmFtZSIsImJpbmRDb250ZXh0IiwiZ2V0UmV0dXJuVHlwZSIsImhhc1ByZXBhcmVBY3Rpb24iLCJleGVjdXRlRHJhZnRFZGl0QWN0aW9uIiwiYlByZXNlcnZlQ2hhbmdlcyIsIm9WaWV3IiwiZ2V0UHJvcGVydHkiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJvT3BlcmF0aW9uIiwic2V0UGFyYW1ldGVyIiwic0dyb3VwSWQiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInNBY3Rpb25OYW1lIiwiZ2V0VGV4dCIsIm9FZGl0UHJvbWlzZSIsImV4ZWN1dGUiLCJ1bmRlZmluZWQiLCJvcGVyYXRpb25zSGVscGVyIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwiYmluZCIsImRyYWZ0IiwibGFiZWwiLCJtb2RlbCIsImdldEJpbmRpbmciLCJpc0EiLCJzdWJtaXRCYXRjaCIsIkVycm9yIiwiZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbiIsImNvbnRleHQiLCJhcHBDb21wb25lbnQiLCJpZ25vcmVFVGFnIiwiZ2V0TWVzc2FnZXNQYXRoIiwib3BlcmF0aW9uIiwiZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24iLCJnZXRVcGRhdGVHcm91cElkIiwicmVxdWVzdE1lc3NhZ2VzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZXJyb3IiLCJMb2ciLCJleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uIiwib0FwcENvbXBvbmVudCIsImJIYXNQcmVwYXJlQWN0aW9uIiwiYklnbm9yZUV0YWciLCJlIiwiYWN0aW9uTmFtZSIsIm9TaWRlRWZmZWN0c1NlcnZpY2UiLCJvQmluZGluZ1BhcmFtZXRlcnMiLCJnZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzIiwiYVRhcmdldFBhdGhzIiwicGF0aEV4cHJlc3Npb25zIiwibGVuZ3RoIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwib0Vycm9yIiwiZ2V0TWVzc2FnZVBhdGhGb3JQcmVwYXJlIiwic0NvbnRleHRQYXRoIiwib1JldHVyblR5cGUiLCJncm91cElkIiwiYk1lc3NhZ2VzIiwic01lc3NhZ2VzUGF0aCIsIiRzZWxlY3QiLCJnZXRHcm91cElkIiwidGhlbiIsImNhdGNoIiwiUHJvbWlzZSIsInJlc29sdmUiLCJleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uIiwiYkVuYWJsZVN0cmljdEhhbmRsaW5nIiwib0Rpc2NhcmRPcGVyYXRpb24iLCJvRGlzY2FyZFByb21pc2UiLCJjb21wdXRlU2libGluZ0luZm9ybWF0aW9uIiwicm9vdEN1cnJlbnRDb250ZXh0IiwicmlnaHRtb3N0Q3VycmVudENvbnRleHQiLCJzdGFydHNXaXRoIiwiYWRkaXRpb25hbFBhdGgiLCJyZXBsYWNlIiwic2VnbWVudHMiLCJzdWJzdHJpbmciLCJzcGxpdCIsInVuc2hpZnQiLCJvbGRQYXRocyIsIm5ld1BhdGhzIiwiY3VycmVudFBhdGgiLCJjYW5vbmljYWxQYXRoUHJvbWlzZXMiLCJtYXAiLCJzZWdtZW50IiwiZW5kc1dpdGgiLCJzaWJsaW5nQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInJlcXVlc3RDYW5vbmljYWxQYXRoIiwiY2Fub25pY2FsUGF0aHMiLCJhbGwiLCJzaWJsaW5nUGF0aCIsImZvckVhY2giLCJjYW5vbmljYWxQYXRoIiwiaW5kZXgiLCJuYXZpZ2F0aW9uIiwia2V5cyIsInRhcmdldENvbnRleHQiLCJwYXRoTWFwcGluZyIsIm9sZFBhdGgiLCJuZXdQYXRoIiwiY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQiLCJtUGFyYW1ldGVycyIsIm1QYXJhbSIsImJSdW5QcmVzZXJ2ZUNoYW5nZXNGbG93Iiwib3ZlcndyaXRlQ2hhbmdlIiwiZHJhZnREYXRhQ29udGV4dCIsImRyYWZ0QWRtaW5EYXRhIiwicmVxdWVzdE9iamVjdCIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzSW5mbyIsIkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIiwiSW5Qcm9jZXNzQnlVc2VyIiwic0VudGl0eVNldCIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwic0xvY2tlZEJ5VXNlck1zZyIsIk1lc3NhZ2VCb3giLCJDcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24iLCJDcmVhdGVkQnlVc2VyIiwic1Vuc2F2ZWRDaGFuZ2VzTXNnIiwic2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94Iiwib0RyYWZ0Q29udGV4dCIsIm9SZXNwb25zZSIsInN0YXR1cyIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwic2libGluZ0luZm8iLCJDb21tb25VdGlscyIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiY2FuY2VsZWQiLCJzRWRpdEFjdGlvbk5hbWUiLCJvU2lkZUVmZmVjdHMiLCJ0cmlnZ2VyQWN0aW9ucyIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uIiwiYWN0aXZhdGVEb2N1bWVudCIsIm1lc3NhZ2VIYW5kbGVyIiwiYkV4ZWN1dGUiLCJmbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQiLCJvQWN0aXZlRG9jdW1lbnRDb250ZXh0Iiwic0JhdGNoR3JvdXAiLCJvUHJlcGFyZVByb21pc2UiLCJvQWN0aXZhdGVQcm9taXNlIiwidmFsdWVzIiwiZXJyIiwiZGF0YSIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50IiwibG9jYWxJMThuUmVmIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsInJlamVjdCIsIm9EaWFsb2ciLCJEaWFsb2ciLCJ0aXRsZSIsInN0YXRlIiwiY29udGVudCIsIlRleHQiLCJ0ZXh0IiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0eXBlIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJkZWxldGVEcmFmdCIsInNEaXNjYXJkQWN0aW9uIiwiYklzQWN0aXZlRW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsImRlbGV0ZSIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiZHJhZnREYXRhTG9zc1BvcHVwIiwic2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIiwiTmF2aWdhdGlvblR5cGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImRyYWZ0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgb3BlcmF0aW9uc0hlbHBlciBmcm9tIFwiLi4vLi4vb3BlcmF0aW9uc0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4uL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgZHJhZnREYXRhTG9zc1BvcHVwIGZyb20gXCIuL2RyYWZ0RGF0YUxvc3NQb3B1cFwiO1xuXG5leHBvcnQgdHlwZSBTaWJsaW5nSW5mb3JtYXRpb24gPSB7XG5cdHRhcmdldENvbnRleHQ6IENvbnRleHQ7XG5cdHBhdGhNYXBwaW5nOiB7IG9sZFBhdGg6IHN0cmluZzsgbmV3UGF0aDogc3RyaW5nIH1bXTtcbn07XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBjYWxsYmFja3MgdXNlZCBpbiB0aGUgZnVuY3Rpb25zXG4gKlxuICpcbiAqIEBhdXRob3IgU0FQIFNFXG4gKiBAc2luY2UgMS41NC4wXG4gKiBAaW50ZXJmYWNlXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFja1xuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIHRvIGFwcHJvdmUgb3IgcmVqZWN0IHRoZSBjcmVhdGlvbiBvZiBhIGRyYWZ0XG4gKlxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2suYmVmb3JlQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcbiAqIEBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQGFic3RyYWN0XG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEByZXR1cm5zIHsoYm9vbGVhbnxQcm9taXNlKX0gQXBwcm92YWwgb2YgZHJhZnQgY3JlYXRpb24gW3RydWV8ZmFsc2VdIG9yIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBib29sZWFuIHZhbHVlXG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQ2FsbGJhY2sgYWZ0ZXIgYSBkcmFmdCB3YXMgc3VjY2Vzc3VsbHkgY3JlYXRlZFxuICpcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmFmdGVyQ3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcbiAqIEBmdW5jdGlvblxuICogQHN0YXRpY1xuICogQGFic3RyYWN0XG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBuZXcgZHJhZnRcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9BY3RpdmVEb2N1bWVudENvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcmV0dXJucyB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9BY3RpdmVEb2N1bWVudENvbnRleHRcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBDYWxsYmFjayB0byBhcHByb3ZlIG9yIHJlamVjdCBvdmVyd3JpdGluZyBhbiB1bnNhdmVkIGRyYWZ0IG9mIGFub3RoZXIgdXNlclxuICpcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLndoZW5EZWNpc2lvblRvT3ZlcndyaXRlRG9jdW1lbnRJc1JlcXVpcmVkXG4gKiBAZnVuY3Rpb25cbiAqIEBwdWJsaWNcbiAqIEBzdGF0aWNcbiAqIEBhYnN0cmFjdFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcmV0dXJucyB7KGJvb2xlYW58UHJvbWlzZSl9IEFwcHJvdmFsIHRvIG92ZXJ3cml0ZSB1bnNhdmVkIGRyYWZ0IFt0cnVlfGZhbHNlXSBvciBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYm9vbGVhbiB2YWx1ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbi8qIENvbnN0YW50cyBmb3IgZHJhZnQgb3BlcmF0aW9ucyAqL1xuY29uc3QgZHJhZnRPcGVyYXRpb25zID0ge1xuXHRFRElUOiBcIkVkaXRBY3Rpb25cIixcblx0QUNUSVZBVElPTjogXCJBY3RpdmF0aW9uQWN0aW9uXCIsXG5cdERJU0NBUkQ6IFwiRGlzY2FyZEFjdGlvblwiLFxuXHRQUkVQQVJFOiBcIlByZXBhcmF0aW9uQWN0aW9uXCJcbn07XG5cbi8qKlxuICogU3RhdGljIGZ1bmN0aW9ucyBmb3IgdGhlIGRyYWZ0IHByb2dyYW1taW5nIG1vZGVsXG4gKlxuICogQG5hbWVzcGFjZVxuICogQGFsaWFzIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBwcml2YXRlXG4gKiBAZXhwZXJpbWVudGFsIFRoaXMgbW9kdWxlIGlzIG9ubHkgZm9yIGV4cGVyaW1lbnRhbCB1c2UhIDxici8+PGI+VGhpcyBpcyBvbmx5IGEgUE9DIGFuZCBtYXliZSBkZWxldGVkPC9iPlxuICogQHNpbmNlIDEuNTQuMFxuICovXG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgYWN0aW9uIG5hbWUgZm9yIGEgZHJhZnQgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIG5hbWVcbiAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBkcmFmdCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uTmFtZShvQ29udGV4dDogQ29udGV4dCwgc09wZXJhdGlvbjogc3RyaW5nKSB7XG5cdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRW50aXR5U2V0UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvJHtzT3BlcmF0aW9ufWApO1xufVxuLyoqXG4gKiBDcmVhdGVzIGFuIG9wZXJhdGlvbiBjb250ZXh0IGJpbmRpbmcgZm9yIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBzT3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gKGFjdGlvbiBvciBmdW5jdGlvbiBpbXBvcnQpXG4gKiBAcGFyYW0gb09wdGlvbnMgT3B0aW9ucyB0byBjcmVhdGUgdGhlIG9wZXJhdGlvbiBjb250ZXh0XG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCBiaW5kaW5nIG9mIHRoZSBib3VuZCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0OiBDb250ZXh0LCBzT3BlcmF0aW9uOiBzdHJpbmcsIG9PcHRpb25zPzogYW55KSB7XG5cdGNvbnN0IHNPcGVyYXRpb25OYW1lID0gZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgc09wZXJhdGlvbik7XG5cblx0cmV0dXJuIG9Db250ZXh0LmdldE1vZGVsKCkuYmluZENvbnRleHQoYCR7c09wZXJhdGlvbk5hbWV9KC4uLilgLCBvQ29udGV4dCwgb09wdGlvbnMpO1xufVxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSByZXR1cm4gdHlwZSBmb3IgYSBkcmFmdCBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBvcGVyYXRpb25cbiAqIEBwYXJhbSBzT3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gbmFtZVxuICogQHJldHVybnMgVGhlIHJldHVybiB0eXBlIG9mIHRoZSBkcmFmdCBvcGVyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0UmV0dXJuVHlwZShvQ29udGV4dDogQ29udGV4dCwgc09wZXJhdGlvbjogc3RyaW5nKSB7XG5cdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRW50aXR5U2V0UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblxuXHRyZXR1cm4gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3QvJHtzT3BlcmF0aW9ufS8kUmV0dXJuVHlwZWApO1xufVxuLyoqXG4gKiBDaGVjayBpZiBvcHRpb25hbCBkcmFmdCBwcmVwYXJlIGFjdGlvbiBleGlzdHMuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgc2hvdWxkIGJlIGJvdW5kIHRvIHRoZSBvcGVyYXRpb25cbiAqIEByZXR1cm5zIFRydWUgaWYgYSBhIHByZXBhcmUgYWN0aW9uIGV4aXN0c1xuICovXG5mdW5jdGlvbiBoYXNQcmVwYXJlQWN0aW9uKG9Db250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdHJldHVybiAhIWdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBkcmFmdCBmcm9tIGFuIGFjdGl2ZSBkb2N1bWVudC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSBiUHJlc2VydmVDaGFuZ2VzIElmIHRydWUgLSBleGlzdGluZyBjaGFuZ2VzIGZyb20gYW5vdGhlciB1c2VyIHRoYXQgYXJlIG5vdCBsb2NrZWQgYXJlIHByZXNlcnZlZCBhbmQgYW4gZXJyb3IgaXMgc2VudCBmcm9tIHRoZSBiYWNrZW5kLCBvdGhlcndpc2UgZmFsc2UgLSBleGlzdGluZyBjaGFuZ2VzIGZyb20gYW5vdGhlciB1c2VyIHRoYXQgYXJlIG5vdCBsb2NrZWQgYXJlIG92ZXJ3cml0dGVuPC9saT5cbiAqIEBwYXJhbSBvVmlldyBJZiB0cnVlIC0gZXhpc3RpbmcgY2hhbmdlcyBmcm9tIGFub3RoZXJcbiAqIEByZXR1cm5zIFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24ob0NvbnRleHQ6IENvbnRleHQsIGJQcmVzZXJ2ZUNoYW5nZXM6IGJvb2xlYW4sIG9WaWV3OiBhbnkpOiBQcm9taXNlPENvbnRleHQ+IHtcblx0aWYgKG9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvT3B0aW9ucyA9IHsgJCRpbmhlcml0RXhwYW5kU2VsZWN0OiB0cnVlIH07XG5cdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkVESVQsIG9PcHRpb25zKTtcblx0XHRvT3BlcmF0aW9uLnNldFBhcmFtZXRlcihcIlByZXNlcnZlQ2hhbmdlc1wiLCBiUHJlc2VydmVDaGFuZ2VzKTtcblx0XHRjb25zdCBzR3JvdXBJZCA9IFwiZGlyZWN0XCI7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob1ZpZXcpO1xuXHRcdGNvbnN0IHNBY3Rpb25OYW1lID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfRURJVFwiKTtcblx0XHQvL0lmIHRoZSBjb250ZXh0IGlzIGNvbWluZyBmcm9tIGEgbGlzdCBiaW5kaW5nIHdlIHBhc3MgdGhlIGZsYWcgdHJ1ZSB0byByZXBsYWNlIHRoZSBjb250ZXh0IGJ5IHRoZSBhY3RpdmUgb25lXG5cdFx0Y29uc3Qgb0VkaXRQcm9taXNlID0gb09wZXJhdGlvbi5leGVjdXRlKFxuXHRcdFx0c0dyb3VwSWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHQob3BlcmF0aW9uc0hlbHBlciBhcyBhbnkpLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRkcmFmdCxcblx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdHsgbGFiZWw6IHNBY3Rpb25OYW1lLCBtb2RlbDogb0NvbnRleHQuZ2V0TW9kZWwoKSB9LFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHRudWxsLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdHVuZGVmaW5lZFxuXHRcdFx0KSxcblx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKVxuXHRcdCk7XG5cdFx0b09wZXJhdGlvbi5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRyZXR1cm4gYXdhaXQgb0VkaXRQcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIllvdSBjYW5ub3QgZWRpdCB0aGlzIGRyYWZ0IGRvY3VtZW50XCIpO1xuXHR9XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGRyYWZ0LiBUaGUgUHJlcGFyZUFjdGlvbiBpcyB0cmlnZ2VyZWQgaWYgdGhlIG1lc3NhZ2VzIGFyZSBhbm5vdGF0ZWQgYW5kIGVudGl0eVNldCBnZXRzIGEgUHJlcGFyYXRpb25BY3Rpb24gYW5ub3RhdGVkLlxuICogSWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcyBhbmQgb3BlcmF0aW9uIGRvZXNuJ3QgZ2V0IGEgcmV0dXJuIHR5cGUgKFJBUCBzeXN0ZW0pIHRoZSBtZXNzYWdlcyBhcmUgcmVxdWVzdGVkLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIFByZXBhcmVBY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gaWdub3JlRVRhZyBJZiBzZXQgdG8gdHJ1ZSwgRVRhZ3MgYXJlIGlnbm9yZWQgd2hlbiBleGVjdXRpbmcgdGhlIGFjdGlvblxuICogQHJldHVybnMgUmVzb2x2ZSBmdW5jdGlvbiByZXR1cm5zXG4gKiAgLSB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uIGlmIHRoZSBhY3Rpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVkXG4gKiAgLSB2b2lkIGlmIHRoZSBhY3Rpb24gaGFzIGZhaWxlZFxuICogIC0gdW5kZWZpbmVkIGlmIHRoZSBhY3Rpb24gaGFzIG5vdCBiZWVuIHRyaWdnZXJlZCBzaW5jZSB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgbm90IG1ldFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRHJhZnRWYWxpZGF0aW9uKFxuXHRjb250ZXh0OiBDb250ZXh0LFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0aWdub3JlRVRhZzogYm9vbGVhblxuKTogUHJvbWlzZTxPRGF0YUNvbnRleHRCaW5kaW5nIHwgdm9pZCB8IHVuZGVmaW5lZD4ge1xuXHRpZiAoZHJhZnQuZ2V0TWVzc2FnZXNQYXRoKGNvbnRleHQpICYmIGRyYWZ0Lmhhc1ByZXBhcmVBY3Rpb24oY29udGV4dCkpIHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb3BlcmF0aW9uID0gYXdhaXQgZHJhZnQuZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24oY29udGV4dCwgY29udGV4dC5nZXRVcGRhdGVHcm91cElkKCksIHRydWUsIGlnbm9yZUVUYWcpO1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gcmV0dXJuZWQgb3BlcmF0aW9uIGJ5IGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uIC0+IHRoZSBhY3Rpb24gaGFzIGZhaWxlZFxuXHRcdFx0aWYgKG9wZXJhdGlvbiAmJiAhZ2V0UmV0dXJuVHlwZShjb250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSkpIHtcblx0XHRcdFx0cmVxdWVzdE1lc3NhZ2VzKGNvbnRleHQsIGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3BlcmF0aW9uO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3RpbmcgbWVzc2FnZXNcIiwgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQWN0aXZhdGVzIGEgZHJhZnQgZG9jdW1lbnQuIFRoZSBkcmFmdCB3aWxsIHJlcGxhY2UgdGhlIHNpYmxpbmcgZW50aXR5IGFuZCB3aWxsIGJlIGRlbGV0ZWQgYnkgdGhlIGJhY2sgZW5kLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIFtzR3JvdXBJZF0gVGhlIG9wdGlvbmFsIGJhdGNoIGdyb3VwIGluIHdoaWNoIHRoZSBvcGVyYXRpb24gaXMgdG8gYmUgZXhlY3V0ZWRcbiAqIEByZXR1cm5zIFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb24ob0NvbnRleHQ6IENvbnRleHQsIG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgc0dyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPENvbnRleHQ+IHtcblx0Y29uc3QgYkhhc1ByZXBhcmVBY3Rpb24gPSBoYXNQcmVwYXJlQWN0aW9uKG9Db250ZXh0KTtcblxuXHQvLyBBY2NvcmRpbmcgdG8gdGhlIGRyYWZ0IHNwZWMgaWYgdGhlIHNlcnZpY2UgY29udGFpbnMgYSBwcmVwYXJlIGFjdGlvbiBhbmQgd2UgdHJpZ2dlciBib3RoIHByZXBhcmUgYW5kXG5cdC8vIGFjdGl2YXRlIGluIG9uZSAkYmF0Y2ggdGhlIGFjdGl2YXRlIGFjdGlvbiBpcyBjYWxsZWQgd2l0aCBpRi1NYXRjaD0qXG5cdGNvbnN0IGJJZ25vcmVFdGFnID0gYkhhc1ByZXBhcmVBY3Rpb247XG5cblx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkFDVElWQVRJT04sIHsgJCRpbmhlcml0RXhwYW5kU2VsZWN0OiB0cnVlIH0pO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9BcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IHNBY3Rpb25OYW1lID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUF9PQkpFQ1RfUEFHRV9TQVZFXCIpO1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgb09wZXJhdGlvbi5leGVjdXRlKFxuXHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0Yklnbm9yZUV0YWcsXG5cdFx0XHRcdHNHcm91cElkXG5cdFx0XHRcdFx0PyAob3BlcmF0aW9uc0hlbHBlciBhcyBhbnkpLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0XHRkcmFmdCxcblx0XHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHRcdHsgbGFiZWw6IHNBY3Rpb25OYW1lLCBtb2RlbDogb0NvbnRleHQuZ2V0TW9kZWwoKSB9LFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZFxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIilcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0aWYgKGJIYXNQcmVwYXJlQWN0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGFjdGlvbk5hbWUgPSBnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSksXG5cdFx0XHRcdFx0b1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCksXG5cdFx0XHRcdFx0b0JpbmRpbmdQYXJhbWV0ZXJzID0gb1NpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIG9Db250ZXh0KSxcblx0XHRcdFx0XHRhVGFyZ2V0UGF0aHMgPSBvQmluZGluZ1BhcmFtZXRlcnMgJiYgb0JpbmRpbmdQYXJhbWV0ZXJzLnBhdGhFeHByZXNzaW9ucztcblx0XHRcdFx0aWYgKGFUYXJnZXRQYXRocyAmJiBhVGFyZ2V0UGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhhVGFyZ2V0UGF0aHMsIG9Db250ZXh0KTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IHJlcXVlc3RNZXNzYWdlcyhvQ29udGV4dCwgb1NpZGVFZmZlY3RzU2VydmljZSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlcXVlc3RpbmcgbWVzc2FnZXNcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IGU7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBhY3RpdmF0aW9uIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgc3VwcG9ydGVkIG1lc3NhZ2UgcHJvcGVydHkgcGF0aCBvbiB0aGUgUHJlcGFyZUFjdGlvbiBmb3IgYSBjb250ZXh0LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgdG8gYmUgY2hlY2tlZFxuICogQHJldHVybnMgUGF0aCB0byB0aGUgbWVzc2FnZVxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlUGF0aEZvclByZXBhcmUob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCBudWxsIHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0Y29uc3Qgb1JldHVyblR5cGUgPSBnZXRSZXR1cm5UeXBlKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSk7XG5cdC8vIElmIHRoZXJlIGlzIG5vIHJldHVybiBwYXJhbWV0ZXIsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZXF1ZXN0IE1lc3NhZ2VzLlxuXHQvLyBSQVAgZHJhZnQgcHJlcGFyZSBoYXMgbm8gcmV0dXJuIHBhcmFtZXRlclxuXHRyZXR1cm4gb1JldHVyblR5cGUgPyBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L0Ake0NvbW1vbkFubm90YXRpb25UZXJtcy5NZXNzYWdlc30vJFBhdGhgKSA6IG51bGw7XG59XG5cbi8qKlxuICogRXhlY3V0ZSBhIHByZXBhcmF0aW9uIGFjdGlvbi5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSBncm91cElkIFRoZSBvcHRpb25hbCBiYXRjaCBncm91cCBpbiB3aGljaCB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIGJNZXNzYWdlcyBJZiBzZXQgdG8gdHJ1ZSwgdGhlIFBSRVBBUkUgYWN0aW9uIHJldHJpZXZlcyBTQVBfTWVzc2FnZXNcbiAqIEBwYXJhbSBpZ25vcmVFVGFnIElmIHNldCB0byB0cnVlLCBFVGFnIGluZm9ybWF0aW9uIGlzIGlnbm9yZWQgd2hlbiB0aGUgYWN0aW9uIGlzIGV4ZWN1dGVkXG4gKiBAcmV0dXJucyBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBleGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbihvQ29udGV4dDogQ29udGV4dCwgZ3JvdXBJZD86IHN0cmluZywgYk1lc3NhZ2VzPzogYm9vbGVhbiwgaWdub3JlRVRhZz86IGJvb2xlYW4pIHtcblx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IGJNZXNzYWdlcyA/IGdldE1lc3NhZ2VQYXRoRm9yUHJlcGFyZShvQ29udGV4dCkgOiBudWxsO1xuXHRcdGNvbnN0IG9PcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFLCBzTWVzc2FnZXNQYXRoID8geyAkc2VsZWN0OiBzTWVzc2FnZXNQYXRoIH0gOiBudWxsKTtcblxuXHRcdC8vIFRPRE86IHNpZGUgZWZmZWN0cyBxdWFsaWZpZXIgc2hhbGwgYmUgZXZlbiBkZXByZWNhdGVkIHRvIGJlIGNoZWNrZWRcblx0XHRvT3BlcmF0aW9uLnNldFBhcmFtZXRlcihcIlNpZGVFZmZlY3RzUXVhbGlmaWVyXCIsIFwiXCIpO1xuXG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBncm91cElkIHx8IG9PcGVyYXRpb24uZ2V0R3JvdXBJZCgpO1xuXHRcdHJldHVybiBvT3BlcmF0aW9uXG5cdFx0XHQuZXhlY3V0ZShzR3JvdXBJZCwgaWdub3JlRVRhZylcblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIG9PcGVyYXRpb247XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBleGVjdXRpbmcgdGhlIG9wZXJhdGlvblwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIHByZXBhcmF0aW9uIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG4vKipcbiAqIERldGVybWluZXMgdGhlIG1lc3NhZ2UgcGF0aCBmb3IgYSBjb250ZXh0LlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBwYXRoIHNoYWxsIGJlIGRldGVybWluZWRcbiAqIEByZXR1cm5zIE1lc3NhZ2UgcGF0aCwgZW1wdHkgaWYgbm90IGFubm90YXRlZFxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBnZXRNZXNzYWdlc1BhdGgob0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0VudGl0eVNldFBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdHJldHVybiBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzRW50aXR5U2V0UGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5NZXNzYWdlcy8kUGF0aGApO1xufVxuLyoqXG4gKiBSZXF1ZXN0cyB0aGUgbWVzc2FnZXMgaWYgYW5ub3RhdGVkIGZvciBhIGdpdmVuIGNvbnRleHQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIG1lc3NhZ2VzIHNoYWxsIGJlIHJlcXVlc3RlZFxuICogQHBhcmFtIG9TaWRlRWZmZWN0c1NlcnZpY2UgU2VydmljZSBmb3IgdGhlIFNpZGVFZmZlY3RzIG9uIFNBUCBGaW9yaSBlbGVtZW50c1xuICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIG1lc3NhZ2VzIHdlcmUgcmVxdWVzdGVkXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RNZXNzYWdlcyhvQ29udGV4dDogQ29udGV4dCwgb1NpZGVFZmZlY3RzU2VydmljZTogU2lkZUVmZmVjdHNTZXJ2aWNlKSB7XG5cdGNvbnN0IHNNZXNzYWdlc1BhdGggPSBkcmFmdC5nZXRNZXNzYWdlc1BhdGgob0NvbnRleHQpO1xuXHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdHJldHVybiBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhbc01lc3NhZ2VzUGF0aF0sIG9Db250ZXh0KTtcblx0fVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG4vKipcbiAqIEV4ZWN1dGVzIGRpc2NhcmQgb2YgYSBkcmFmdCBmdW5jdGlvbiB1c2luZyBIVFRQIFBvc3QuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBBcHAgQ29tcG9uZW50XG4gKiBAcGFyYW0gYkVuYWJsZVN0cmljdEhhbmRsaW5nXG4gKiBAcmV0dXJucyBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uKG9Db250ZXh0OiBDb250ZXh0LCBvQXBwQ29tcG9uZW50PzogYW55LCBiRW5hYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdGlmICghb0NvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSkge1xuXHRcdGNvbnN0IG9EaXNjYXJkT3BlcmF0aW9uID0gZHJhZnQuY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuRElTQ0FSRCk7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IG9BcHBDb21wb25lbnQgJiYgZ2V0UmVzb3VyY2VNb2RlbChvQXBwQ29tcG9uZW50KTtcblx0XHRjb25zdCBzR3JvdXBJZCA9IFwiZGlyZWN0XCI7XG5cdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSByZXNvdXJjZU1vZGVsPy5nZXRUZXh0KFwiQ19UUkFOU0FDVElPTl9IRUxQRVJfRFJBRlRfRElTQ0FSRF9CVVRUT05cIikgfHwgXCJcIjtcblx0XHQvLyBhcyB0aGUgZGlzY2FyZCBhY3Rpb24gZG9lc250JyBzZW5kIHRoZSBhY3RpdmUgdmVyc2lvbiBpbiB0aGUgcmVzcG9uc2Ugd2UgZG8gbm90IHVzZSB0aGUgcmVwbGFjZSBpbiBjYWNoZVxuXHRcdGNvbnN0IG9EaXNjYXJkUHJvbWlzZSA9ICFiRW5hYmxlU3RyaWN0SGFuZGxpbmdcblx0XHRcdD8gb0Rpc2NhcmRPcGVyYXRpb24uZXhlY3V0ZShzR3JvdXBJZClcblx0XHRcdDogb0Rpc2NhcmRPcGVyYXRpb24uZXhlY3V0ZShcblx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0KG9wZXJhdGlvbnNIZWxwZXIgYXMgYW55KS5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0XHRcdGRyYWZ0LFxuXHRcdFx0XHRcdFx0c0dyb3VwSWQsXG5cdFx0XHRcdFx0XHR7IGxhYmVsOiBzQWN0aW9uTmFtZSwgbW9kZWw6IG9Db250ZXh0LmdldE1vZGVsKCkgfSxcblx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHR1bmRlZmluZWRcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGZhbHNlXG5cdFx0XHQgICk7XG5cdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0cmV0dXJuIG9EaXNjYXJkUHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZGlzY2FyZCBhY3Rpb24gY2Fubm90IGJlIGV4ZWN1dGVkIG9uIGFuIGFjdGl2ZSBkb2N1bWVudFwiKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgYSBzaWJsaW5nIGNvbnRleHQgZm9yIGEgc3Vib2JqZWN0IHBhZ2UgYW5kIGNhbGN1bGF0ZXMgYSBzaWJsaW5nIHBhdGggZm9yIGFsbCBpbnRlcm1lZGlhdGUgcGF0aHNcbiAqIGJldHdlZW4gdGhlIG9iamVjdCBwYWdlIGFuZCB0aGUgc3Vib2JqZWN0IHBhZ2UuXG4gKlxuICogQHBhcmFtIHJvb3RDdXJyZW50Q29udGV4dCBUaGUgY29udGV4dCBmb3IgdGhlIHJvb3Qgb2YgdGhlIGRyYWZ0XG4gKiBAcGFyYW0gcmlnaHRtb3N0Q3VycmVudENvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIHN1Ym9iamVjdCBwYWdlXG4gKiBAcmV0dXJucyBUaGUgc2libGluZ0luZm9ybWF0aW9uIG9iamVjdFxuICovXG5hc3luYyBmdW5jdGlvbiBjb21wdXRlU2libGluZ0luZm9ybWF0aW9uKFxuXHRyb290Q3VycmVudENvbnRleHQ6IENvbnRleHQsXG5cdHJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0OiBDb250ZXh0XG4pOiBQcm9taXNlPFNpYmxpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZD4ge1xuXHRpZiAoIXJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKS5zdGFydHNXaXRoKHJvb3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0Ly8gV3JvbmcgdXNhZ2UgISFcblx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgY29tcHV0ZSByaWdodG1vc3Qgc2libGluZyBjb250ZXh0XCIpO1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb21wdXRlIHJpZ2h0bW9zdCBzaWJsaW5nIGNvbnRleHRcIik7XG5cdH1cblxuXHRjb25zdCBtb2RlbCA9IHJvb3RDdXJyZW50Q29udGV4dC5nZXRNb2RlbCgpO1xuXHR0cnkge1xuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIDEuIEZpbmQgYWxsIHNlZ21lbnRzIGJldHdlZW4gdGhlIHJvb3Qgb2JqZWN0IGFuZCB0aGUgc3ViLW9iamVjdFxuXHRcdC8vIEV4YW1wbGU6IGZvciByb290ID0gL1BhcmFtKGFhKS9FbnRpdHkoYmIpIGFuZCByaWdodE1vc3QgPSAvUGFyYW0oYWEpL0VudGl0eShiYikvX05hdihjYykvX1N1Yk5hdihkZClcblx0XHQvLyAtLS0+IFtcIlBhcmFtKGFhKS9FbnRpdHkoYmIpXCIsIFwiX05hdihjYylcIiwgXCJfU3ViTmF2KGRkKVwiXVxuXG5cdFx0Ly8gRmluZCBhbGwgc2VnbWVudHMgaW4gdGhlIHJpZ2h0bW9zdCBwYXRoXG5cdFx0Y29uc3QgYWRkaXRpb25hbFBhdGggPSByaWdodG1vc3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkucmVwbGFjZShyb290Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpLCBcIlwiKTtcblx0XHRjb25zdCBzZWdtZW50cyA9IGFkZGl0aW9uYWxQYXRoID8gYWRkaXRpb25hbFBhdGguc3Vic3RyaW5nKDEpLnNwbGl0KFwiL1wiKSA6IFtdO1xuXHRcdC8vIEZpcnN0IHNlZ21lbnQgaXMgYWx3YXlzIHRoZSBmdWxsIHBhdGggb2YgdGhlIHJvb3Qgb2JqZWN0LCB3aGljaCBjYW4gY29udGFpbiAnLycgaW4gY2FzZSBvZiBhIHBhcmFtZXRyaXplZCBlbnRpdHlcblx0XHRzZWdtZW50cy51bnNoaWZ0KHJvb3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkuc3Vic3RyaW5nKDEpKTtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIDIuIFJlcXVlc3QgY2Fub25pY2FsIHBhdGhzIG9mIHRoZSBzaWJsaW5nIGVudGl0eSBmb3IgZWFjaCBzZWdtZW50XG5cdFx0Ly8gRXhhbXBsZTogZm9yIFtcIlBhcmFtKGFhKS9FbnRpdHkoYmIpXCIsIFwiX05hdihjYylcIiwgXCJfU3ViTmF2KGRkKVwiXVxuXHRcdC8vIC0tPiByZXF1ZXN0IGNhbm9uaWNhbCBwYXRocyBmb3IgXCJQYXJhbShhYSkvRW50aXR5KGJiKS9TaWJsaW5nRW50aXR5XCIsIFwiUGFyYW0oYWEpL0VudGl0eShiYikvX05hdihjYykvU2libGluZ0VudGl0eVwiLCBcIlBhcmFtKGFhKS9FbnRpdHkoYmIpL19OYXYoY2MpL19TdWJOYXYoZGQpL1NpYmxpbmdFbnRpdHlcIlxuXHRcdGNvbnN0IG9sZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IG5ld1BhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGxldCBjdXJyZW50UGF0aCA9IFwiXCI7XG5cdFx0Y29uc3QgY2Fub25pY2FsUGF0aFByb21pc2VzID0gc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiB7XG5cdFx0XHRjdXJyZW50UGF0aCArPSBgLyR7c2VnbWVudH1gO1xuXHRcdFx0b2xkUGF0aHMudW5zaGlmdChjdXJyZW50UGF0aCk7XG5cdFx0XHRpZiAoY3VycmVudFBhdGguZW5kc1dpdGgoXCIpXCIpKSB7XG5cdFx0XHRcdGNvbnN0IHNpYmxpbmdDb250ZXh0ID0gbW9kZWwuYmluZENvbnRleHQoYCR7Y3VycmVudFBhdGh9L1NpYmxpbmdFbnRpdHlgKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0cmV0dXJuIHNpYmxpbmdDb250ZXh0LnJlcXVlc3RDYW5vbmljYWxQYXRoKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7IC8vIDEtMSByZWxhdGlvblxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gMy4gUmVjb25zdHJ1Y3QgdGhlIGZ1bGwgcGF0aHMgZnJvbSBjYW5vbmljYWwgcGF0aHMgKGZvciBwYXRoIG1hcHBpbmcpXG5cdFx0Ly8gRXhhbXBsZTogZm9yIGNhbm9uaWNhbCBwYXRocyBcIi9QYXJhbShhYSkvRW50aXR5KGJiLXNpYmxpbmcpXCIsIFwiL0VudGl0eTIoY2Mtc2libGluZylcIiwgXCIvRW50aXR5MyhkZC1zaWJsaW5nKVwiXG5cdFx0Ly8gLS0+IFtcIlBhcmFtKGFhKS9FbnRpdHkoYmItc2libGluZylcIiwgXCJQYXJhbShhYSkvRW50aXR5KGJiLXNpYmxpbmcpL19OYXYoY2Mtc2libGluZylcIiwgXCJQYXJhbShhYSkvRW50aXR5KGJiLXNpYmxpbmcpL19OYXYoY2Mtc2libGluZykvX1N1Yk5hdihkZC1zaWJsaW5nKVwiXVxuXHRcdGNvbnN0IGNhbm9uaWNhbFBhdGhzID0gKGF3YWl0IFByb21pc2UuYWxsKGNhbm9uaWNhbFBhdGhQcm9taXNlcykpIGFzIHN0cmluZ1tdO1xuXHRcdGxldCBzaWJsaW5nUGF0aCA9IFwiXCI7XG5cdFx0Y2Fub25pY2FsUGF0aHMuZm9yRWFjaCgoY2Fub25pY2FsUGF0aCwgaW5kZXgpID0+IHtcblx0XHRcdGlmIChpbmRleCAhPT0gMCkge1xuXHRcdFx0XHRpZiAoc2VnbWVudHNbaW5kZXhdLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb24gPSBzZWdtZW50c1tpbmRleF0ucmVwbGFjZSgvXFwoLiokLywgXCJcIik7IC8vIEtlZXAgb25seSBuYXZpZ2F0aW9uIG5hbWUgZnJvbSB0aGUgc2VnbWVudCwgaS5lLiBhYWEoeHh4KSAtLT4gYWFhXG5cdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGNhbm9uaWNhbFBhdGgucmVwbGFjZSgvLipcXCgvLCBcIihcIik7IC8vIEtlZXAgb25seSB0aGUga2V5cyBmcm9tIHRoZSBjYW5vbmljYWwgcGF0aCwgaS5lLiBhYWEoeHh4KSAtLT4gKHh4eClcblx0XHRcdFx0XHRzaWJsaW5nUGF0aCArPSBgLyR7bmF2aWdhdGlvbn0ke2tleXN9YDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzaWJsaW5nUGF0aCArPSBgLyR7c2VnbWVudHNbaW5kZXhdfWA7IC8vIDEtMSByZWxhdGlvblxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzaWJsaW5nUGF0aCA9IGNhbm9uaWNhbFBhdGg7IC8vIFRvIG1hbmFnZSBwYXJhbWV0cml6ZWQgZW50aXRpZXNcblx0XHRcdH1cblx0XHRcdG5ld1BhdGhzLnVuc2hpZnQoc2libGluZ1BhdGgpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhcmdldENvbnRleHQ6IG1vZGVsLmJpbmRDb250ZXh0KHNpYmxpbmdQYXRoKS5nZXRCb3VuZENvbnRleHQoKSwgLy8gQ3JlYXRlIHRoZSByaWdodG1vc3Qgc2libGluZyBjb250ZXh0IGZyb20gaXRzIHBhdGhcblx0XHRcdHBhdGhNYXBwaW5nOiBvbGRQYXRocy5tYXAoKG9sZFBhdGgsIGluZGV4KSA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0b2xkUGF0aCxcblx0XHRcdFx0XHRuZXdQYXRoOiBuZXdQYXRoc1tpbmRleF1cblx0XHRcdFx0fTtcblx0XHRcdH0pXG5cdFx0fTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBBIGNhbm9uaWNhbCBwYXRoIGNvdWxkbid0IGJlIHJlc29sdmVkIChiZWNhdXNlIGEgc2libGluZyBkb2Vzbid0IGV4aXN0KVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZHJhZnQgZG9jdW1lbnQgZnJvbSBhbiBleGlzdGluZyBkb2N1bWVudC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgc2V2ZXJhbCBob29rcyBhcyB0aGVyZSBpcyBhIGNlcnRhaW4gY29yZW9ncmFwaHkgZGVmaW5lZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQjY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMub1ZpZXddIFRoZSB2aWV3XG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmJQcmVzZXJ2ZUNoYW5nZXNdIFByZXNlcnZlIGNoYW5nZXMgb2YgYW4gZXhpc3RpbmcgZHJhZnQgb2YgYW5vdGhlciB1c2VyXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggdGhlIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dCBjb250ZXh0fSBvZiB0aGUgbmV3IGRyYWZ0IGRvY3VtZW50XG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50KFxuXHRvQ29udGV4dDogYW55LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiB7XG5cdFx0b1ZpZXc6IFZpZXc7XG5cdFx0YlByZXNlcnZlQ2hhbmdlcz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdH1cbik6IFByb21pc2U8Q29udGV4dCB8IHVuZGVmaW5lZD4ge1xuXHRjb25zdCBtUGFyYW0gPSBtUGFyYW1ldGVycyB8fCB7fSxcblx0XHRiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyA9XG5cdFx0XHR0eXBlb2YgbVBhcmFtLmJQcmVzZXJ2ZUNoYW5nZXMgPT09IFwidW5kZWZpbmVkXCIgfHwgKHR5cGVvZiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyA9PT0gXCJib29sZWFuXCIgJiYgbVBhcmFtLmJQcmVzZXJ2ZUNoYW5nZXMpOyAvL2RlZmF1bHQgdHJ1ZVxuXG5cdC8qKlxuXHQgKiBPdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGNoYW5nZS5cblx0ICpcblx0ICogQHJldHVybnMgUmVzb2x2ZXMgd2l0aCByZXN1bHQgb2Yge0BsaW5rIHNhcC5mZS5jb3JlLmFjdGlvbnMjZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbn1cblx0ICovXG5cdGFzeW5jIGZ1bmN0aW9uIG92ZXJ3cml0ZUNoYW5nZSgpIHtcblx0XHQvL092ZXJ3cml0ZSBleGlzdGluZyBjaGFuZ2VzXG5cdFx0Y29uc3Qgb01vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBkcmFmdERhdGFDb250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KGAke29Db250ZXh0LmdldFBhdGgoKX0vRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGFgKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbChtUGFyYW1ldGVycy5vVmlldyk7XG5cdFx0Y29uc3QgZHJhZnRBZG1pbkRhdGEgPSBhd2FpdCBkcmFmdERhdGFDb250ZXh0LnJlcXVlc3RPYmplY3QoKTtcblx0XHRpZiAoZHJhZnRBZG1pbkRhdGEpIHtcblx0XHRcdC8vIHJlbW92ZSBhbGwgdW5ib3VuZCB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFzIHdlIHNob3cgYSBzcGVjaWFsIGRpYWxvZ1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdGxldCBzSW5mbyA9IGRyYWZ0QWRtaW5EYXRhLkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIHx8IGRyYWZ0QWRtaW5EYXRhLkluUHJvY2Vzc0J5VXNlcjtcblx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSAobVBhcmFtZXRlcnMub1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldDtcblx0XHRcdGlmIChzSW5mbykge1xuXHRcdFx0XHRjb25zdCBzTG9ja2VkQnlVc2VyTXNnID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9EUkFGVF9MT0NLRURfQllfVVNFUlwiLCBzSW5mbywgc0VudGl0eVNldCk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc0xvY2tlZEJ5VXNlck1zZyk7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihzTG9ja2VkQnlVc2VyTXNnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNJbmZvID0gZHJhZnRBZG1pbkRhdGEuQ3JlYXRlZEJ5VXNlckRlc2NyaXB0aW9uIHx8IGRyYWZ0QWRtaW5EYXRhLkNyZWF0ZWRCeVVzZXI7XG5cdFx0XHRcdGNvbnN0IHNVbnNhdmVkQ2hhbmdlc01zZyA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfRFJBRlRfT0JKRUNUX1BBR0VfRFJBRlRfVU5TQVZFRF9DSEFOR0VTXCIsIHNJbmZvLCBzRW50aXR5U2V0KTtcblx0XHRcdFx0YXdhaXQgZHJhZnQuc2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94KHNVbnNhdmVkQ2hhbmdlc01zZywgb0NvbnRleHQpO1xuXHRcdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbihvQ29udGV4dCwgZmFsc2UsIG1QYXJhbWV0ZXJzLm9WaWV3KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBEcmFmdCBjcmVhdGlvbiBhYm9ydGVkIGZvciBkb2N1bWVudDogJHtvQ29udGV4dC5nZXRQYXRoKCl9YCk7XG5cdH1cblxuXHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQmluZGluZyBjb250ZXh0IHRvIGFjdGl2ZSBkb2N1bWVudCBpcyByZXF1aXJlZFwiKTtcblx0fVxuXHRsZXQgb0RyYWZ0Q29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0dHJ5IHtcblx0XHRvRHJhZnRDb250ZXh0ID0gYXdhaXQgZHJhZnQuZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbihvQ29udGV4dCwgYlJ1blByZXNlcnZlQ2hhbmdlc0Zsb3csIG1QYXJhbWV0ZXJzLm9WaWV3KTtcblx0fSBjYXRjaCAob1Jlc3BvbnNlOiBhbnkpIHtcblx0XHRpZiAob1Jlc3BvbnNlLnN0YXR1cyA9PT0gNDA5IHx8IG9SZXNwb25zZS5zdGF0dXMgPT09IDQxMiB8fCBvUmVzcG9uc2Uuc3RhdHVzID09PSA0MjMpIHtcblx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVCb3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdGNvbnN0IHNpYmxpbmdJbmZvID0gYXdhaXQgZHJhZnQuY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihvQ29udGV4dCwgb0NvbnRleHQpO1xuXHRcdFx0aWYgKHNpYmxpbmdJbmZvPy50YXJnZXRDb250ZXh0KSB7XG5cdFx0XHRcdC8vdGhlcmUgaXMgYSBjb250ZXh0IGF1dGhvcml6ZWQgdG8gYmUgZWRpdGVkIGJ5IHRoZSBjdXJyZW50IHVzZXJcblx0XHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMud2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQoc2libGluZ0luZm8udGFyZ2V0Q29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly90aGVyZSBpcyBubyBkcmFmdCBvd25lZCBieSB0aGUgY3VycmVudCB1c2VyXG5cdFx0XHRcdG9EcmFmdENvbnRleHQgPSBhd2FpdCBvdmVyd3JpdGVDaGFuZ2UoKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKCEob1Jlc3BvbnNlICYmIG9SZXNwb25zZS5jYW5jZWxlZCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihvUmVzcG9uc2UpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChvRHJhZnRDb250ZXh0KSB7XG5cdFx0Y29uc3Qgc0VkaXRBY3Rpb25OYW1lID0gZHJhZnQuZ2V0QWN0aW9uTmFtZShvRHJhZnRDb250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuRURJVCk7XG5cdFx0Y29uc3Qgb1NpZGVFZmZlY3RzID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHNFZGl0QWN0aW9uTmFtZSwgb0RyYWZ0Q29udGV4dCk7XG5cdFx0aWYgKG9TaWRlRWZmZWN0cz8udHJpZ2dlckFjdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKS5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JPRGF0YUFjdGlvbihvU2lkZUVmZmVjdHMsIG9EcmFmdENvbnRleHQpO1xuXHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBvRHJhZnRDb250ZXh0O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG4vKipcbiAqIENyZWF0ZXMgYW4gYWN0aXZlIGRvY3VtZW50IGZyb20gYSBkcmFmdCBkb2N1bWVudC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgc2V2ZXJhbCBob29rcyBhcyB0aGVyZSBpcyBhIGNlcnRhaW4gY2hvcmVvZ3JhcGh5IGRlZmluZWQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0I2FjdGl2YXRlRG9jdW1lbnRcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gbVBhcmFtZXRlcnMgVGhlIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50XSBDYWxsYmFjayB0aGF0IGFsbG93cyBhIHZldG8gYmVmb3JlIHRoZSAnQ3JlYXRlJyByZXF1ZXN0IGlzIGV4ZWN1dGVkXG4gKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50XSBDYWxsYmFjayBmb3IgcG9zdHByb2Nlc3NpbmcgYWZ0ZXIgZG9jdW1lbnQgd2FzIGFjdGl2YXRlZC5cbiAqIEBwYXJhbSBtZXNzYWdlSGFuZGxlciBUaGUgbWVzc2FnZSBoYW5kbGVyXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmVzIHdpdGggdGhlIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dCBjb250ZXh0fSBvZiB0aGUgbmV3IGRyYWZ0IGRvY3VtZW50XG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlRG9jdW1lbnQoXG5cdG9Db250ZXh0OiBDb250ZXh0LFxuXHRvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdG1QYXJhbWV0ZXJzOiB7IGZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudD86IGFueTsgZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQ/OiBhbnkgfSxcblx0bWVzc2FnZUhhbmRsZXI/OiBNZXNzYWdlSGFuZGxlclxuKSB7XG5cdGNvbnN0IG1QYXJhbSA9IG1QYXJhbWV0ZXJzIHx8IHt9O1xuXHRpZiAoIW9Db250ZXh0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQmluZGluZyBjb250ZXh0IHRvIGRyYWZ0IGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpO1xuXHR9XG5cblx0Y29uc3QgYkV4ZWN1dGUgPSBtUGFyYW0uZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50ID8gYXdhaXQgbVBhcmFtLmZuQmVmb3JlQWN0aXZhdGVEb2N1bWVudChvQ29udGV4dCkgOiB0cnVlO1xuXHRpZiAoIWJFeGVjdXRlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBBY3RpdmF0aW9uIG9mIHRoZSBkb2N1bWVudCB3YXMgYWJvcnRlZCBieSBleHRlbnNpb24gZm9yIGRvY3VtZW50OiAke29Db250ZXh0LmdldFBhdGgoKX1gKTtcblx0fVxuXG5cdGxldCBvQWN0aXZlRG9jdW1lbnRDb250ZXh0OiBhbnk7XG5cdGlmICghaGFzUHJlcGFyZUFjdGlvbihvQ29udGV4dCkpIHtcblx0XHRvQWN0aXZlRG9jdW1lbnRDb250ZXh0ID0gYXdhaXQgZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbihvQ29udGV4dCwgb0FwcENvbXBvbmVudCk7XG5cdH0gZWxzZSB7XG5cdFx0LyogYWN0aXZhdGlvbiByZXF1aXJlcyBwcmVwYXJhdGlvbiAqL1xuXHRcdGNvbnN0IHNCYXRjaEdyb3VwID0gXCJkcmFmdFwiO1xuXHRcdC8vIHdlIHVzZSB0aGUgc2FtZSBiYXRjaEdyb3VwIHRvIGZvcmNlIHByZXBhcmUgYW5kIGFjdGl2YXRlIGluIGEgc2FtZSBiYXRjaCBidXQgd2l0aCBkaWZmZXJlbnQgY2hhbmdlc2V0XG5cdFx0bGV0IG9QcmVwYXJlUHJvbWlzZSA9IGRyYWZ0LmV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uKG9Db250ZXh0LCBzQmF0Y2hHcm91cCwgZmFsc2UpO1xuXHRcdG9Db250ZXh0LmdldE1vZGVsKCkuc3VibWl0QmF0Y2goc0JhdGNoR3JvdXApO1xuXHRcdGNvbnN0IG9BY3RpdmF0ZVByb21pc2UgPSBkcmFmdC5leGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uKG9Db250ZXh0LCBvQXBwQ29tcG9uZW50LCBzQmF0Y2hHcm91cCk7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKFtvUHJlcGFyZVByb21pc2UsIG9BY3RpdmF0ZVByb21pc2VdKTtcblx0XHRcdG9BY3RpdmVEb2N1bWVudENvbnRleHQgPSB2YWx1ZXNbMV07XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHQvLyBCQ1AgMjI3MDA4NDA3NVxuXHRcdFx0Ly8gaWYgdGhlIEFjdGl2YXRpb24gZmFpbHMsIHRoZW4gdGhlIG1lc3NhZ2VzIGFyZSByZXRyaWV2ZWQgZnJvbSBQUkVQQVJBVElPTiBhY3Rpb25cblx0XHRcdGNvbnN0IHNNZXNzYWdlc1BhdGggPSBnZXRNZXNzYWdlUGF0aEZvclByZXBhcmUob0NvbnRleHQpO1xuXHRcdFx0aWYgKHNNZXNzYWdlc1BhdGgpIHtcblx0XHRcdFx0b1ByZXBhcmVQcm9taXNlID0gZHJhZnQuZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24ob0NvbnRleHQsIHNCYXRjaEdyb3VwLCB0cnVlKTtcblx0XHRcdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzQmF0Y2hHcm91cCk7XG5cdFx0XHRcdGF3YWl0IG9QcmVwYXJlUHJvbWlzZTtcblx0XHRcdFx0Y29uc3QgZGF0YSA9IGF3YWl0IG9Db250ZXh0LnJlcXVlc3RPYmplY3QoKTtcblx0XHRcdFx0aWYgKGRhdGFbc01lc3NhZ2VzUGF0aF0ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdC8vaWYgbWVzc2FnZXMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBQUkVQQVJBVElPTiBhY3Rpb24sIHRoZW4gcHJldmlvdXMgdHJhbnNpdGlvbiBtZXNzYWdlcyBhcmUgcmVtb3ZlZFxuXHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGVyPy5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoZmFsc2UsIGZhbHNlLCBvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnI7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtUGFyYW0uZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQgPyBtUGFyYW0uZm5BZnRlckFjdGl2YXRlRG9jdW1lbnQob0NvbnRleHQsIG9BY3RpdmVEb2N1bWVudENvbnRleHQpIDogb0FjdGl2ZURvY3VtZW50Q29udGV4dDtcbn1cblxuLyoqXG4gKiBEaXNwbGF5IHRoZSBjb25maXJtYXRpb24gZGlhbG9nIGJveCBhZnRlciBwcmVzc2luZyB0aGUgZWRpdCBidXR0b24gb2YgYW4gb2JqZWN0IHBhZ2Ugd2l0aCB1bnNhdmVkIGNoYW5nZXMuXG4gKlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdCNzaG93RWRpdENvbmZpcm1hdGlvbk1lc3NhZ2VCb3hcbiAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAc3RhdGljXG4gKiBAcGFyYW0gc1Vuc2F2ZWRDaGFuZ2VzTXNnIERpYWxvZyBib3ggbWVzc2FnZSBpbmZvcm1pbmcgdGhlIHVzZXIgdGhhdCBpZiBoZSBzdGFydHMgZWRpdGluZywgdGhlIHByZXZpb3VzIHVuc2F2ZWQgY2hhbmdlcyB3aWxsIGJlIGxvc3RcbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXNcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gc2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94KHNVbnNhdmVkQ2hhbmdlc01zZzogc3RyaW5nLCBvQ29udGV4dDogQ29udGV4dCkge1xuXHRjb25zdCBsb2NhbEkxOG5SZWYgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmU6ICh2YWx1ZTogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpIHtcblx0XHRjb25zdCBvRGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHR0aXRsZTogbG9jYWxJMThuUmVmLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRVNfUEFHRV9USVRMRV9XQVJOSU5HXCIpLFxuXHRcdFx0c3RhdGU6IFwiV2FybmluZ1wiLFxuXHRcdFx0Y29udGVudDogbmV3IFRleHQoe1xuXHRcdFx0XHR0ZXh0OiBzVW5zYXZlZENoYW5nZXNNc2dcblx0XHRcdH0pLFxuXHRcdFx0YmVnaW5CdXR0b246IG5ldyBCdXR0b24oe1xuXHRcdFx0XHR0ZXh0OiBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIkNfQ09NTU9OX09CSkVDVF9QQUdFX0VESVRcIiksXG5cdFx0XHRcdHR5cGU6IFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdGVuZEJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdHRleHQ6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfQ0FOQ0VMXCIpLFxuXHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdG9EaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRyZWplY3QoYERyYWZ0IGNyZWF0aW9uIGFib3J0ZWQgZm9yIGRvY3VtZW50OiAke29Db250ZXh0LmdldFBhdGgoKX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSksXG5cdFx0XHRhZnRlckNsb3NlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9EaWFsb2cuZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9EaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpQ29udGVudFBhZGRpbmdcIik7XG5cdFx0b0RpYWxvZy5vcGVuKCk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEhUVFAgUE9TVCBjYWxsIHdoZW4gRHJhZnRBY3Rpb24gaXMgcHJlc2VudCBmb3IgRHJhZnQgRGVsZXRlOyBIVFRQIERFTEVURSBjYWxsIHdoZW4gdGhlcmUgaXMgbm8gRHJhZnRBY3Rpb25cbiAqIGFuZCBBY3RpdmUgSW5zdGFuY2UgYWx3YXlzIHVzZXMgREVMRVRFLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdCNkZWxldGVEcmFmdFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBkb2N1bWVudCB0byBiZSBkaXNjYXJkZWRcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IENvbnRleHQgb2YgdGhlIGRvY3VtZW50IHRvIGJlIGRpc2NhcmRlZFxuICogQHBhcmFtIGJFbmFibGVTdHJpY3RIYW5kbGluZ1xuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBjb250ZXh0IGlzIGRlbGV0ZWRcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBkZWxldGVEcmFmdChvQ29udGV4dDogQ29udGV4dCwgb0FwcENvbXBvbmVudD86IEFwcENvbXBvbmVudCwgYkVuYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRjb25zdCBzRGlzY2FyZEFjdGlvbiA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5ESVNDQVJEKSxcblx0XHRiSXNBY3RpdmVFbnRpdHkgPSBvQ29udGV4dC5nZXRPYmplY3QoKS5Jc0FjdGl2ZUVudGl0eTtcblxuXHRpZiAoYklzQWN0aXZlRW50aXR5IHx8ICghYklzQWN0aXZlRW50aXR5ICYmICFzRGlzY2FyZEFjdGlvbikpIHtcblx0XHQvL1VzZSBEZWxldGUgaW4gY2FzZSBvZiBhY3RpdmUgZW50aXR5IGFuZCBubyBkaXNjYXJkIGFjdGlvbiBhdmFpbGFibGUgZm9yIGRyYWZ0XG5cdFx0aWYgKG9Db250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdHJldHVybiBvQ29udGV4dFxuXHRcdFx0XHQuZ2V0QmluZGluZygpXG5cdFx0XHRcdC5yZXNldENoYW5nZXMoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0LmRlbGV0ZSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0LmRlbGV0ZSgpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvL1VzZSBEaXNjYXJkIFBvc3QgQWN0aW9uIGlmIGl0IGlzIGEgZHJhZnQgZW50aXR5IGFuZCBkaXNjYXJkIGFjdGlvbiBleGlzdHNcblx0XHRyZXR1cm4gZXhlY3V0ZURyYWZ0RGlzY2FyZEFjdGlvbihvQ29udGV4dCwgb0FwcENvbXBvbmVudCwgYkVuYWJsZVN0cmljdEhhbmRsaW5nKTtcblx0fVxufVxuXG5jb25zdCBkcmFmdCA9IHtcblx0Y3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQ6IGNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50LFxuXHRhY3RpdmF0ZURvY3VtZW50OiBhY3RpdmF0ZURvY3VtZW50LFxuXHRkZWxldGVEcmFmdDogZGVsZXRlRHJhZnQsXG5cdGV4ZWN1dGVEcmFmdEVkaXRBY3Rpb246IGV4ZWN1dGVEcmFmdEVkaXRBY3Rpb24sXG5cdGV4ZWN1dGVEcmFmdFZhbGlkYXRpb246IGV4ZWN1dGVEcmFmdFZhbGlkYXRpb24sXG5cdGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uOiBleGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbixcblx0ZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbjogZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbixcblx0aGFzUHJlcGFyZUFjdGlvbjogaGFzUHJlcGFyZUFjdGlvbixcblx0Z2V0TWVzc2FnZXNQYXRoOiBnZXRNZXNzYWdlc1BhdGgsXG5cdGNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb246IGNvbXB1dGVTaWJsaW5nSW5mb3JtYXRpb24sXG5cdHByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uOiBkcmFmdERhdGFMb3NzUG9wdXAucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24sXG5cdHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbjogZHJhZnREYXRhTG9zc1BvcHVwLnNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbixcblx0Y3JlYXRlT3BlcmF0aW9uOiBjcmVhdGVPcGVyYXRpb24sXG5cdGV4ZWN1dGVEcmFmdERpc2NhcmRBY3Rpb246IGV4ZWN1dGVEcmFmdERpc2NhcmRBY3Rpb24sXG5cdE5hdmlnYXRpb25UeXBlOiBkcmFmdERhdGFMb3NzUG9wdXAuTmF2aWdhdGlvblR5cGUsXG5cdGdldEFjdGlvbk5hbWU6IGdldEFjdGlvbk5hbWUsXG5cdHNob3dFZGl0Q29uZmlybWF0aW9uTWVzc2FnZUJveDogc2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94XG59O1xuXG5leHBvcnQgZGVmYXVsdCBkcmFmdDtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUF3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0E7RUFDQSxNQUFNQSxlQUFlLEdBQUc7SUFDdkJDLElBQUksRUFBRSxZQUFZO0lBQ2xCQyxVQUFVLEVBQUUsa0JBQWtCO0lBQzlCQyxPQUFPLEVBQUUsZUFBZTtJQUN4QkMsT0FBTyxFQUFFO0VBQ1YsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxhQUFhLENBQUNDLFFBQWlCLEVBQUVDLFVBQWtCLEVBQUU7SUFDN0QsTUFBTUMsTUFBTSxHQUFHRixRQUFRLENBQUNHLFFBQVEsRUFBRTtNQUNqQ0MsVUFBVSxHQUFHRixNQUFNLENBQUNHLFlBQVksRUFBRTtNQUNsQ0MsY0FBYyxHQUFHRixVQUFVLENBQUNHLFdBQVcsQ0FBQ1AsUUFBUSxDQUFDUSxPQUFPLEVBQUUsQ0FBQztJQUU1RCxPQUFPSixVQUFVLENBQUNLLFNBQVMsQ0FBRSxHQUFFSCxjQUFlLDZDQUE0Q0wsVUFBVyxFQUFDLENBQUM7RUFDeEc7RUFDQTtBQUNBO0FBQ0E7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
|
|
711
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkcmFmdE9wZXJhdGlvbnMiLCJFRElUIiwiQUNUSVZBVElPTiIsIkRJU0NBUkQiLCJQUkVQQVJFIiwiZ2V0QWN0aW9uTmFtZSIsIm9Db250ZXh0Iiwic09wZXJhdGlvbiIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNFbnRpdHlTZXRQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZ2V0T2JqZWN0IiwiY3JlYXRlT3BlcmF0aW9uIiwib09wdGlvbnMiLCJzT3BlcmF0aW9uTmFtZSIsImJpbmRDb250ZXh0IiwiZ2V0UmV0dXJuVHlwZSIsImhhc1ByZXBhcmVBY3Rpb24iLCJleGVjdXRlRHJhZnRFZGl0QWN0aW9uIiwiYlByZXNlcnZlQ2hhbmdlcyIsIm9WaWV3IiwiZ2V0UHJvcGVydHkiLCIkJGluaGVyaXRFeHBhbmRTZWxlY3QiLCJvT3BlcmF0aW9uIiwic2V0UGFyYW1ldGVyIiwic0dyb3VwSWQiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsInNBY3Rpb25OYW1lIiwiZ2V0VGV4dCIsIm9FZGl0UHJvbWlzZSIsImV4ZWN1dGUiLCJ1bmRlZmluZWQiLCJvcGVyYXRpb25zSGVscGVyIiwiZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkIiwiYmluZCIsImRyYWZ0IiwibGFiZWwiLCJtb2RlbCIsImdldEJpbmRpbmciLCJpc0EiLCJzdWJtaXRCYXRjaCIsIkVycm9yIiwiZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbiIsImNvbnRleHQiLCJhcHBDb21wb25lbnQiLCJpZ25vcmVFVGFnIiwiZ2V0TWVzc2FnZXNQYXRoIiwicmVxdWVzdE9iamVjdCIsIm9wZXJhdGlvbiIsImV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uIiwiZ2V0VXBkYXRlR3JvdXBJZCIsInJlcXVlc3RNZXNzYWdlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImVycm9yIiwiTG9nIiwiZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbiIsIm9BcHBDb21wb25lbnQiLCJiSGFzUHJlcGFyZUFjdGlvbiIsImJJZ25vcmVFdGFnIiwiZSIsImFjdGlvbk5hbWUiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwib0JpbmRpbmdQYXJhbWV0ZXJzIiwiZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyIsImFUYXJnZXRQYXRocyIsInBhdGhFeHByZXNzaW9ucyIsImxlbmd0aCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIm9FcnJvciIsImdldE1lc3NhZ2VQYXRoRm9yUHJlcGFyZSIsInNDb250ZXh0UGF0aCIsIm9SZXR1cm5UeXBlIiwiZ3JvdXBJZCIsImJNZXNzYWdlcyIsInNNZXNzYWdlc1BhdGgiLCIkc2VsZWN0IiwiZ2V0R3JvdXBJZCIsInRoZW4iLCJjYXRjaCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZXhlY3V0ZURyYWZ0RGlzY2FyZEFjdGlvbiIsImJFbmFibGVTdHJpY3RIYW5kbGluZyIsIm9EaXNjYXJkT3BlcmF0aW9uIiwib0Rpc2NhcmRQcm9taXNlIiwiY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbiIsInJvb3RDdXJyZW50Q29udGV4dCIsInJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0Iiwicm9vdENvbnRleHRJbmZvIiwic3RhcnRzV2l0aCIsImFkZGl0aW9uYWxQYXRoIiwicmVwbGFjZSIsInNlZ21lbnRzIiwic3Vic3RyaW5nIiwic3BsaXQiLCJ1bnNoaWZ0Iiwib2xkUGF0aHMiLCJuZXdQYXRocyIsImN1cnJlbnRQYXRoIiwicGF0aHMiLCJyb290Q29udGV4dE5vdFJlcXVpcmVkIiwic2hpZnQiLCJjYW5vbmljYWxQYXRoUHJvbWlzZXMiLCJtYXAiLCJzZWdtZW50IiwiZW5kc1dpdGgiLCJzaWJsaW5nQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInJlcXVlc3RDYW5vbmljYWxQYXRoIiwiY2Fub25pY2FsUGF0aHMiLCJhbGwiLCJyb290U2libGluZ1BhdGgiLCJwdXNoIiwic2libGluZ1BhdGgiLCJmb3JFYWNoIiwiY2Fub25pY2FsUGF0aCIsImluZGV4IiwibmF2aWdhdGlvbiIsImtleXMiLCJ0YXJnZXRDb250ZXh0IiwiJCRncm91cElkIiwicGF0aE1hcHBpbmciLCJvbGRQYXRoIiwibmV3UGF0aCIsImNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50IiwibVBhcmFtZXRlcnMiLCJtUGFyYW0iLCJiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdyIsIm92ZXJ3cml0ZUNoYW5nZSIsImRyYWZ0RGF0YUNvbnRleHQiLCJkcmFmdEFkbWluRGF0YSIsIm1lc3NhZ2VIYW5kbGluZyIsInJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMiLCJzSW5mbyIsIkluUHJvY2Vzc0J5VXNlckRlc2NyaXB0aW9uIiwiSW5Qcm9jZXNzQnlVc2VyIiwic0VudGl0eVNldCIsImdldFZpZXdEYXRhIiwiZW50aXR5U2V0Iiwic0xvY2tlZEJ5VXNlck1zZyIsIk1lc3NhZ2VCb3giLCJDcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24iLCJDcmVhdGVkQnlVc2VyIiwic1Vuc2F2ZWRDaGFuZ2VzTXNnIiwic2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94Iiwib0RyYWZ0Q29udGV4dCIsIm9SZXNwb25zZSIsInN0YXR1cyIsInJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwic2libGluZ0luZm8iLCJDb21tb25VdGlscyIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiY2FuY2VsZWQiLCJzRWRpdEFjdGlvbk5hbWUiLCJvU2lkZUVmZmVjdHMiLCJ0cmlnZ2VyQWN0aW9ucyIsInJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uIiwiYWN0aXZhdGVEb2N1bWVudCIsIm1lc3NhZ2VIYW5kbGVyIiwiYkV4ZWN1dGUiLCJmbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQiLCJvQWN0aXZlRG9jdW1lbnRDb250ZXh0Iiwic0JhdGNoR3JvdXAiLCJvUHJlcGFyZVByb21pc2UiLCJvQWN0aXZhdGVQcm9taXNlIiwidmFsdWVzIiwiZXJyIiwiZGF0YSIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImZuQWZ0ZXJBY3RpdmF0ZURvY3VtZW50IiwibG9jYWxJMThuUmVmIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsInJlamVjdCIsIm9EaWFsb2ciLCJEaWFsb2ciLCJ0aXRsZSIsInN0YXRlIiwiY29udGVudCIsIlRleHQiLCJ0ZXh0IiwiYmVnaW5CdXR0b24iLCJCdXR0b24iLCJ0eXBlIiwicHJlc3MiLCJjbG9zZSIsImVuZEJ1dHRvbiIsImFmdGVyQ2xvc2UiLCJkZXN0cm95IiwiYWRkU3R5bGVDbGFzcyIsIm9wZW4iLCJkZWxldGVEcmFmdCIsInNEaXNjYXJkQWN0aW9uIiwiYklzQWN0aXZlRW50aXR5IiwiSXNBY3RpdmVFbnRpdHkiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInJlc2V0Q2hhbmdlcyIsImRlbGV0ZSIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiZHJhZnREYXRhTG9zc1BvcHVwIiwic2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIiwiTmF2aWdhdGlvblR5cGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbImRyYWZ0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgb3BlcmF0aW9uc0hlbHBlciBmcm9tIFwiLi4vLi4vb3BlcmF0aW9uc0hlbHBlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4uL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgZHJhZnREYXRhTG9zc1BvcHVwIGZyb20gXCIuL2RyYWZ0RGF0YUxvc3NQb3B1cFwiO1xuXG5leHBvcnQgdHlwZSBTaWJsaW5nSW5mb3JtYXRpb24gPSB7XG5cdHRhcmdldENvbnRleHQ6IENvbnRleHQ7XG5cdHBhdGhNYXBwaW5nOiB7IG9sZFBhdGg6IHN0cmluZzsgbmV3UGF0aDogc3RyaW5nIH1bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFJvb3RDb250ZXh0SW5mbyA9IHtcblx0cm9vdENvbnRleHROb3RSZXF1aXJlZDogYm9vbGVhbjtcblx0cm9vdFNpYmxpbmdQYXRoOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgY2FsbGJhY2tzIHVzZWQgaW4gdGhlIGZ1bmN0aW9uc1xuICpcbiAqXG4gKiBAYXV0aG9yIFNBUCBTRVxuICogQHNpbmNlIDEuNTQuMFxuICogQGludGVyZmFjZVxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdC5JQ2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cblxuLyoqXG4gKiBDYWxsYmFjayB0byBhcHByb3ZlIG9yIHJlamVjdCB0aGUgY3JlYXRpb24gb2YgYSBkcmFmdFxuICpcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQuSUNhbGxiYWNrLmJlZm9yZUNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50XG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBhYnN0cmFjdFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgYWN0aXZlIGRvY3VtZW50IGZvciB0aGUgbmV3IGRyYWZ0XG4gKiBAcmV0dXJucyB7KGJvb2xlYW58UHJvbWlzZSl9IEFwcHJvdmFsIG9mIGRyYWZ0IGNyZWF0aW9uIFt0cnVlfGZhbHNlXSBvciBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYm9vbGVhbiB2YWx1ZVxuICogQHByaXZhdGVcbiAqL1xuXG4vKipcbiAqIENhbGxiYWNrIGFmdGVyIGEgZHJhZnQgd2FzIHN1Y2Nlc3N1bGx5IGNyZWF0ZWRcbiAqXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay5hZnRlckNyZWF0ZURyYWZ0RnJvbUFjdGl2ZURvY3VtZW50XG4gKiBAZnVuY3Rpb25cbiAqIEBzdGF0aWNcbiAqIEBhYnN0cmFjdFxuICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgQ29udGV4dCBvZiB0aGUgbmV3IGRyYWZ0XG4gKiBAcGFyYW0ge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQWN0aXZlRG9jdW1lbnRDb250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHJldHVybnMge3NhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fSBvQWN0aXZlRG9jdW1lbnRDb250ZXh0XG4gKiBAcHJpdmF0ZVxuICovXG5cbi8qKlxuICogQ2FsbGJhY2sgdG8gYXBwcm92ZSBvciByZWplY3Qgb3ZlcndyaXRpbmcgYW4gdW5zYXZlZCBkcmFmdCBvZiBhbm90aGVyIHVzZXJcbiAqXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0LklDYWxsYmFjay53aGVuRGVjaXNpb25Ub092ZXJ3cml0ZURvY3VtZW50SXNSZXF1aXJlZFxuICogQGZ1bmN0aW9uXG4gKiBAcHVibGljXG4gKiBAc3RhdGljXG4gKiBAYWJzdHJhY3RcbiAqIEBwYXJhbSB7c2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9IG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHJldHVybnMgeyhib29sZWFufFByb21pc2UpfSBBcHByb3ZhbCB0byBvdmVyd3JpdGUgdW5zYXZlZCBkcmFmdCBbdHJ1ZXxmYWxzZV0gb3IgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGJvb2xlYW4gdmFsdWVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG4vKiBDb25zdGFudHMgZm9yIGRyYWZ0IG9wZXJhdGlvbnMgKi9cbmNvbnN0IGRyYWZ0T3BlcmF0aW9ucyA9IHtcblx0RURJVDogXCJFZGl0QWN0aW9uXCIsXG5cdEFDVElWQVRJT046IFwiQWN0aXZhdGlvbkFjdGlvblwiLFxuXHRESVNDQVJEOiBcIkRpc2NhcmRBY3Rpb25cIixcblx0UFJFUEFSRTogXCJQcmVwYXJhdGlvbkFjdGlvblwiXG59O1xuXG4vKipcbiAqIFN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBkcmFmdCBwcm9ncmFtbWluZyBtb2RlbFxuICpcbiAqIEBuYW1lc3BhY2VcbiAqIEBhbGlhcyBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0XG4gKiBAcHJpdmF0ZVxuICogQGV4cGVyaW1lbnRhbCBUaGlzIG1vZHVsZSBpcyBvbmx5IGZvciBleHBlcmltZW50YWwgdXNlISA8YnIvPjxiPlRoaXMgaXMgb25seSBhIFBPQyBhbmQgbWF5YmUgZGVsZXRlZDwvYj5cbiAqIEBzaW5jZSAxLjU0LjBcbiAqL1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGFjdGlvbiBuYW1lIGZvciBhIGRyYWZ0IG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBzaG91bGQgYmUgYm91bmQgdG8gdGhlIG9wZXJhdGlvblxuICogQHBhcmFtIHNPcGVyYXRpb24gVGhlIG9wZXJhdGlvbiBuYW1lXG4gKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgZHJhZnQgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldEFjdGlvbk5hbWUob0NvbnRleHQ6IENvbnRleHQsIHNPcGVyYXRpb246IHN0cmluZykge1xuXHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0VudGl0eVNldFBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290LyR7c09wZXJhdGlvbn1gKTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nIGZvciB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIChhY3Rpb24gb3IgZnVuY3Rpb24gaW1wb3J0KVxuICogQHBhcmFtIG9PcHRpb25zIE9wdGlvbnMgdG8gY3JlYXRlIHRoZSBvcGVyYXRpb24gY29udGV4dFxuICogQHJldHVybnMgVGhlIGNvbnRleHQgYmluZGluZyBvZiB0aGUgYm91bmQgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dDogQ29udGV4dCwgc09wZXJhdGlvbjogc3RyaW5nLCBvT3B0aW9ucz86IGFueSkge1xuXHRjb25zdCBzT3BlcmF0aW9uTmFtZSA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIHNPcGVyYXRpb24pO1xuXG5cdHJldHVybiBvQ29udGV4dC5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KGAke3NPcGVyYXRpb25OYW1lfSguLi4pYCwgb0NvbnRleHQsIG9PcHRpb25zKTtcbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgcmV0dXJuIHR5cGUgZm9yIGEgZHJhZnQgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gc09wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIG5hbWVcbiAqIEByZXR1cm5zIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZHJhZnQgb3BlcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldFJldHVyblR5cGUob0NvbnRleHQ6IENvbnRleHQsIHNPcGVyYXRpb246IHN0cmluZykge1xuXHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0c0VudGl0eVNldFBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9Db250ZXh0LmdldFBhdGgoKSk7XG5cblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofUBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuRHJhZnRSb290LyR7c09wZXJhdGlvbn0vJFJldHVyblR5cGVgKTtcbn1cbi8qKlxuICogQ2hlY2sgaWYgb3B0aW9uYWwgZHJhZnQgcHJlcGFyZSBhY3Rpb24gZXhpc3RzLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IHNob3VsZCBiZSBib3VuZCB0byB0aGUgb3BlcmF0aW9uXG4gKiBAcmV0dXJucyBUcnVlIGlmIGEgYSBwcmVwYXJlIGFjdGlvbiBleGlzdHNcbiAqL1xuZnVuY3Rpb24gaGFzUHJlcGFyZUFjdGlvbihvQ29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFnZXRBY3Rpb25OYW1lKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuUFJFUEFSRSk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZHJhZnQgZnJvbSBhbiBhY3RpdmUgZG9jdW1lbnQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gYlByZXNlcnZlQ2hhbmdlcyBJZiB0cnVlIC0gZXhpc3RpbmcgY2hhbmdlcyBmcm9tIGFub3RoZXIgdXNlciB0aGF0IGFyZSBub3QgbG9ja2VkIGFyZSBwcmVzZXJ2ZWQgYW5kIGFuIGVycm9yIGlzIHNlbnQgZnJvbSB0aGUgYmFja2VuZCwgb3RoZXJ3aXNlIGZhbHNlIC0gZXhpc3RpbmcgY2hhbmdlcyBmcm9tIGFub3RoZXIgdXNlciB0aGF0IGFyZSBub3QgbG9ja2VkIGFyZSBvdmVyd3JpdHRlbjwvbGk+XG4gKiBAcGFyYW0gb1ZpZXcgSWYgdHJ1ZSAtIGV4aXN0aW5nIGNoYW5nZXMgZnJvbSBhbm90aGVyXG4gKiBAcmV0dXJucyBSZXNvbHZlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvblxuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0OiBDb250ZXh0LCBiUHJlc2VydmVDaGFuZ2VzOiBib29sZWFuLCBvVmlldzogYW55KTogUHJvbWlzZTxDb250ZXh0PiB7XG5cdGlmIChvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb09wdGlvbnMgPSB7ICQkaW5oZXJpdEV4cGFuZFNlbGVjdDogdHJ1ZSB9O1xuXHRcdGNvbnN0IG9PcGVyYXRpb24gPSBjcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5FRElULCBvT3B0aW9ucyk7XG5cdFx0b09wZXJhdGlvbi5zZXRQYXJhbWV0ZXIoXCJQcmVzZXJ2ZUNoYW5nZXNcIiwgYlByZXNlcnZlQ2hhbmdlcyk7XG5cdFx0Y29uc3Qgc0dyb3VwSWQgPSBcImRpcmVjdFwiO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG9WaWV3KTtcblx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfQ09NTU9OX09CSkVDVF9QQUdFX0VESVRcIik7XG5cdFx0Ly9JZiB0aGUgY29udGV4dCBpcyBjb21pbmcgZnJvbSBhIGxpc3QgYmluZGluZyB3ZSBwYXNzIHRoZSBmbGFnIHRydWUgdG8gcmVwbGFjZSB0aGUgY29udGV4dCBieSB0aGUgYWN0aXZlIG9uZVxuXHRcdGNvbnN0IG9FZGl0UHJvbWlzZSA9IG9PcGVyYXRpb24uZXhlY3V0ZShcblx0XHRcdHNHcm91cElkLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0KG9wZXJhdGlvbnNIZWxwZXIgYXMgYW55KS5mbk9uU3RyaWN0SGFuZGxpbmdGYWlsZWQuYmluZChcblx0XHRcdFx0ZHJhZnQsXG5cdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHR7IGxhYmVsOiBzQWN0aW9uTmFtZSwgbW9kZWw6IG9Db250ZXh0LmdldE1vZGVsKCkgfSxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHR1bmRlZmluZWRcblx0XHRcdCksXG5cdFx0XHRvQ29udGV4dC5nZXRCaW5kaW5nKCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIilcblx0XHQpO1xuXHRcdG9PcGVyYXRpb24uZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzR3JvdXBJZCk7XG5cdFx0cmV0dXJuIGF3YWl0IG9FZGl0UHJvbWlzZTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2Fubm90IGVkaXQgdGhpcyBkcmFmdCBkb2N1bWVudFwiKTtcblx0fVxufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBkcmFmdC4gVGhlIFByZXBhcmVBY3Rpb24gaXMgdHJpZ2dlcmVkIGlmIHRoZSBtZXNzYWdlcyBhcmUgYW5ub3RhdGVkIGFuZCBlbnRpdHlTZXQgZ2V0cyBhIFByZXBhcmF0aW9uQWN0aW9uIGFubm90YXRlZC5cbiAqIElmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMgYW5kIG9wZXJhdGlvbiBkb2Vzbid0IGdldCBhIHJldHVybiB0eXBlIChSQVAgc3lzdGVtKSB0aGUgbWVzc2FnZXMgYXJlIHJlcXVlc3RlZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBQcmVwYXJlQWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSBhcHBDb21wb25lbnQgVGhlIEFwcENvbXBvbmVudFxuICogQHBhcmFtIGlnbm9yZUVUYWcgSWYgc2V0IHRvIHRydWUsIEVUYWdzIGFyZSBpZ25vcmVkIHdoZW4gZXhlY3V0aW5nIHRoZSBhY3Rpb25cbiAqIEByZXR1cm5zIFJlc29sdmUgZnVuY3Rpb24gcmV0dXJuc1xuICogIC0gdGhlIGNvbnRleHQgb2YgdGhlIG9wZXJhdGlvbiBpZiB0aGUgYWN0aW9uIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZFxuICogIC0gdm9pZCBpZiB0aGUgYWN0aW9uIGhhcyBmYWlsZWRcbiAqICAtIHVuZGVmaW5lZCBpZiB0aGUgYWN0aW9uIGhhcyBub3QgYmVlbiB0cmlnZ2VyZWQgc2luY2UgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIG5vdCBtZXRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihcblx0Y29udGV4dDogQ29udGV4dCxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdGlnbm9yZUVUYWc6IGJvb2xlYW5cbik6IFByb21pc2U8T0RhdGFDb250ZXh0QmluZGluZyB8IHZvaWQgfCB1bmRlZmluZWQ+IHtcblx0aWYgKGRyYWZ0LmdldE1lc3NhZ2VzUGF0aChjb250ZXh0KSAmJiBkcmFmdC5oYXNQcmVwYXJlQWN0aW9uKGNvbnRleHQpKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghaWdub3JlRVRhZykge1xuXHRcdFx0XHQvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBlbnRpdHkgcmVsYXRlZCB0byB0aGUgY29udGV4dCB0byBwb3N0IHRoZSBhY3Rpb24gd2l0aCB0aGUgSWYtTWF0Y2ggaGVhZGVyXG5cdFx0XHRcdC8vIFNvbWUgdHJpZ2dlcnMgKGVudGVyIG9uIHRhYmxlKSBjYW4gZ2VuZXJhdGUgYSBwcm9taXNlIGluIHRoZSBjYWNoZSBzbyBpZiB3ZSBkb24ndCB3YWl0IGZvciB0aGUgZW50aXR5XG5cdFx0XHRcdC8vIHRoZSBQT1NUIHdpbGwgYmUgc2VudCB3aXRob3V0IElmLU1hdGNoIGFuZCB3aWxsIGdlbmVyYXRlIGFuIGVycm9yIG9uIGJhY2tlbmQgc2lkZS5cblx0XHRcdFx0YXdhaXQgKGNvbnRleHQuZ2V0QmluZGluZygpIGFzIE9EYXRhQ29udGV4dEJpbmRpbmcpLnJlcXVlc3RPYmplY3QoXCJcIik7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBvcGVyYXRpb24gPSBhd2FpdCBkcmFmdC5leGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbihjb250ZXh0LCBjb250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKSwgdHJ1ZSwgaWdub3JlRVRhZyk7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyByZXR1cm5lZCBvcGVyYXRpb24gYnkgZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24gLT4gdGhlIGFjdGlvbiBoYXMgZmFpbGVkXG5cdFx0XHRpZiAob3BlcmF0aW9uICYmICFnZXRSZXR1cm5UeXBlKGNvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKSkge1xuXHRcdFx0XHRyZXF1ZXN0TWVzc2FnZXMoY29udGV4dCwgYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvcGVyYXRpb247XG5cdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBtZXNzYWdlc1wiLCBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBBY3RpdmF0ZXMgYSBkcmFmdCBkb2N1bWVudC4gVGhlIGRyYWZ0IHdpbGwgcmVwbGFjZSB0aGUgc2libGluZyBlbnRpdHkgYW5kIHdpbGwgYmUgZGVsZXRlZCBieSB0aGUgYmFjayBlbmQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBzaG91bGQgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gb0FwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gW3NHcm91cElkXSBUaGUgb3B0aW9uYWwgYmF0Y2ggZ3JvdXAgaW4gd2hpY2ggdGhlIG9wZXJhdGlvbiBpcyB0byBiZSBleGVjdXRlZFxuICogQHJldHVybnMgUmVzb2x2ZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBjb250ZXh0IG9mIHRoZSBvcGVyYXRpb25cbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZURyYWZ0QWN0aXZhdGlvbkFjdGlvbihvQ29udGV4dDogQ29udGV4dCwgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBzR3JvdXBJZD86IHN0cmluZyk6IFByb21pc2U8Q29udGV4dD4ge1xuXHRjb25zdCBiSGFzUHJlcGFyZUFjdGlvbiA9IGhhc1ByZXBhcmVBY3Rpb24ob0NvbnRleHQpO1xuXG5cdC8vIEFjY29yZGluZyB0byB0aGUgZHJhZnQgc3BlYyBpZiB0aGUgc2VydmljZSBjb250YWlucyBhIHByZXBhcmUgYWN0aW9uIGFuZCB3ZSB0cmlnZ2VyIGJvdGggcHJlcGFyZSBhbmRcblx0Ly8gYWN0aXZhdGUgaW4gb25lICRiYXRjaCB0aGUgYWN0aXZhdGUgYWN0aW9uIGlzIGNhbGxlZCB3aXRoIGlGLU1hdGNoPSpcblx0Y29uc3QgYklnbm9yZUV0YWcgPSBiSGFzUHJlcGFyZUFjdGlvbjtcblxuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBvT3BlcmF0aW9uID0gY3JlYXRlT3BlcmF0aW9uKG9Db250ZXh0LCBkcmFmdE9wZXJhdGlvbnMuQUNUSVZBVElPTiwgeyAkJGluaGVyaXRFeHBhbmRTZWxlY3Q6IHRydWUgfSk7XG5cdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IGdldFJlc291cmNlTW9kZWwob0FwcENvbXBvbmVudCk7XG5cdFx0Y29uc3Qgc0FjdGlvbk5hbWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX09QX09CSkVDVF9QQUdFX1NBVkVcIik7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBhd2FpdCBvT3BlcmF0aW9uLmV4ZWN1dGUoXG5cdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRiSWdub3JlRXRhZyxcblx0XHRcdFx0c0dyb3VwSWRcblx0XHRcdFx0XHQ/IChvcGVyYXRpb25zSGVscGVyIGFzIGFueSkuZm5PblN0cmljdEhhbmRsaW5nRmFpbGVkLmJpbmQoXG5cdFx0XHRcdFx0XHRcdGRyYWZ0LFxuXHRcdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdFx0eyBsYWJlbDogc0FjdGlvbk5hbWUsIG1vZGVsOiBvQ29udGV4dC5nZXRNb2RlbCgpIH0sXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkXG5cdFx0XHRcdFx0ICApXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdG9Db250ZXh0LmdldEJpbmRpbmcoKS5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKVxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoYkhhc1ByZXBhcmVBY3Rpb24pIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uTmFtZSA9IGdldEFjdGlvbk5hbWUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKSxcblx0XHRcdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKSxcblx0XHRcdFx0XHRvQmluZGluZ1BhcmFtZXRlcnMgPSBvU2lkZUVmZmVjdHNTZXJ2aWNlLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoYWN0aW9uTmFtZSwgb0NvbnRleHQpLFxuXHRcdFx0XHRcdGFUYXJnZXRQYXRocyA9IG9CaW5kaW5nUGFyYW1ldGVycyAmJiBvQmluZGluZ1BhcmFtZXRlcnMucGF0aEV4cHJlc3Npb25zO1xuXHRcdFx0XHRpZiAoYVRhcmdldFBhdGhzICYmIGFUYXJnZXRQYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGF3YWl0IG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKGFUYXJnZXRQYXRocywgb0NvbnRleHQpO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXF1ZXN0aW5nIHNpZGUgZWZmZWN0c1wiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgcmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0LCBvU2lkZUVmZmVjdHNTZXJ2aWNlKTtcblx0XHRcdFx0XHR9IGNhdGNoIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBtZXNzYWdlc1wiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIGFjdGl2YXRpb24gYWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZCBvbiBhbiBhY3RpdmUgZG9jdW1lbnRcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzdXBwb3J0ZWQgbWVzc2FnZSBwcm9wZXJ0eSBwYXRoIG9uIHRoZSBQcmVwYXJlQWN0aW9uIGZvciBhIGNvbnRleHQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCB0byBiZSBjaGVja2VkXG4gKiBAcmV0dXJucyBQYXRoIHRvIHRoZSBtZXNzYWdlXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VQYXRoRm9yUHJlcGFyZShvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IG51bGwge1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChvQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRjb25zdCBvUmV0dXJuVHlwZSA9IGdldFJldHVyblR5cGUob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5QUkVQQVJFKTtcblx0Ly8gSWYgdGhlcmUgaXMgbm8gcmV0dXJuIHBhcmFtZXRlciwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlcXVlc3QgTWVzc2FnZXMuXG5cdC8vIFJBUCBkcmFmdCBwcmVwYXJlIGhhcyBubyByZXR1cm4gcGFyYW1ldGVyXG5cdHJldHVybiBvUmV0dXJuVHlwZSA/IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH0vQCR7Q29tbW9uQW5ub3RhdGlvblRlcm1zLk1lc3NhZ2VzfS8kUGF0aGApIDogbnVsbDtcbn1cblxuLyoqXG4gKiBFeGVjdXRlIGEgcHJlcGFyYXRpb24gYWN0aW9uLlxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHBlcmZvcm1lZFxuICogQHBhcmFtIGdyb3VwSWQgVGhlIG9wdGlvbmFsIGJhdGNoIGdyb3VwIGluIHdoaWNoIHdlIHdhbnQgdG8gZXhlY3V0ZSB0aGUgb3BlcmF0aW9uXG4gKiBAcGFyYW0gYk1lc3NhZ2VzIElmIHNldCB0byB0cnVlLCB0aGUgUFJFUEFSRSBhY3Rpb24gcmV0cmlldmVzIFNBUF9NZXNzYWdlc1xuICogQHBhcmFtIGlnbm9yZUVUYWcgSWYgc2V0IHRvIHRydWUsIEVUYWcgaW5mb3JtYXRpb24gaXMgaWdub3JlZCB3aGVuIHRoZSBhY3Rpb24gaXMgZXhlY3V0ZWRcbiAqIEByZXR1cm5zIFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uKG9Db250ZXh0OiBDb250ZXh0LCBncm91cElkPzogc3RyaW5nLCBiTWVzc2FnZXM/OiBib29sZWFuLCBpZ25vcmVFVGFnPzogYm9vbGVhbikge1xuXHRpZiAoIW9Db250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikpIHtcblx0XHRjb25zdCBzTWVzc2FnZXNQYXRoID0gYk1lc3NhZ2VzID8gZ2V0TWVzc2FnZVBhdGhGb3JQcmVwYXJlKG9Db250ZXh0KSA6IG51bGw7XG5cdFx0Y29uc3Qgb09wZXJhdGlvbiA9IGNyZWF0ZU9wZXJhdGlvbihvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLlBSRVBBUkUsIHNNZXNzYWdlc1BhdGggPyB7ICRzZWxlY3Q6IHNNZXNzYWdlc1BhdGggfSA6IG51bGwpO1xuXG5cdFx0Ly8gVE9ETzogc2lkZSBlZmZlY3RzIHF1YWxpZmllciBzaGFsbCBiZSBldmVuIGRlcHJlY2F0ZWQgdG8gYmUgY2hlY2tlZFxuXHRcdG9PcGVyYXRpb24uc2V0UGFyYW1ldGVyKFwiU2lkZUVmZmVjdHNRdWFsaWZpZXJcIiwgXCJcIik7XG5cblx0XHRjb25zdCBzR3JvdXBJZCA9IGdyb3VwSWQgfHwgb09wZXJhdGlvbi5nZXRHcm91cElkKCk7XG5cdFx0cmV0dXJuIG9PcGVyYXRpb25cblx0XHRcdC5leGVjdXRlKHNHcm91cElkLCBpZ25vcmVFVGFnKVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gb09wZXJhdGlvbjtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyB0aGUgb3BlcmF0aW9uXCIsIG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGUgcHJlcGFyYXRpb24gYWN0aW9uIGNhbm5vdCBiZSBleGVjdXRlZCBvbiBhbiBhY3RpdmUgZG9jdW1lbnRcIik7XG5cdH1cbn1cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbWVzc2FnZSBwYXRoIGZvciBhIGNvbnRleHQuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIHBhdGggc2hhbGwgYmUgZGV0ZXJtaW5lZFxuICogQHJldHVybnMgTWVzc2FnZSBwYXRoLCBlbXB0eSBpZiBub3QgYW5ub3RhdGVkXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGdldE1lc3NhZ2VzUGF0aChvQ29udGV4dDogQ29udGV4dCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG9Nb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCksXG5cdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRzRW50aXR5U2V0UGF0aCA9IG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgob0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0cmV0dXJuIG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLk1lc3NhZ2VzLyRQYXRoYCk7XG59XG4vKipcbiAqIFJlcXVlc3RzIHRoZSBtZXNzYWdlcyBpZiBhbm5vdGF0ZWQgZm9yIGEgZ2l2ZW4gY29udGV4dC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgbWVzc2FnZXMgc2hhbGwgYmUgcmVxdWVzdGVkXG4gKiBAcGFyYW0gb1NpZGVFZmZlY3RzU2VydmljZSBTZXJ2aWNlIGZvciB0aGUgU2lkZUVmZmVjdHMgb24gU0FQIEZpb3JpIGVsZW1lbnRzXG4gKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgbWVzc2FnZXMgd2VyZSByZXF1ZXN0ZWRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuZnVuY3Rpb24gcmVxdWVzdE1lc3NhZ2VzKG9Db250ZXh0OiBDb250ZXh0LCBvU2lkZUVmZmVjdHNTZXJ2aWNlOiBTaWRlRWZmZWN0c1NlcnZpY2UpIHtcblx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IGRyYWZ0LmdldE1lc3NhZ2VzUGF0aChvQ29udGV4dCk7XG5cdGlmIChzTWVzc2FnZXNQYXRoKSB7XG5cdFx0cmV0dXJuIG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFtzTWVzc2FnZXNQYXRoXSwgb0NvbnRleHQpO1xuXHR9XG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn1cbi8qKlxuICogRXhlY3V0ZXMgZGlzY2FyZCBvZiBhIGRyYWZ0IGZ1bmN0aW9uIHVzaW5nIEhUVFAgUG9zdC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIHNob3VsZCBiZSBwZXJmb3JtZWRcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IEFwcCBDb21wb25lbnRcbiAqIEBwYXJhbSBiRW5hYmxlU3RyaWN0SGFuZGxpbmdcbiAqIEByZXR1cm5zIFJlc29sdmUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29udGV4dCBvZiB0aGUgb3BlcmF0aW9uXG4gKiBAcHJpdmF0ZVxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVEcmFmdERpc2NhcmRBY3Rpb24ob0NvbnRleHQ6IENvbnRleHQsIG9BcHBDb21wb25lbnQ/OiBhbnksIGJFbmFibGVTdHJpY3RIYW5kbGluZz86IGJvb2xlYW4pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0aWYgKCFvQ29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpKSB7XG5cdFx0Y29uc3Qgb0Rpc2NhcmRPcGVyYXRpb24gPSBkcmFmdC5jcmVhdGVPcGVyYXRpb24ob0NvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5ESVNDQVJEKTtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBnZXRSZXNvdXJjZU1vZGVsKG9BcHBDb21wb25lbnQpO1xuXHRcdGNvbnN0IHNHcm91cElkID0gXCJkaXJlY3RcIjtcblx0XHRjb25zdCBzQWN0aW9uTmFtZSA9IHJlc291cmNlTW9kZWw/LmdldFRleHQoXCJDX1RSQU5TQUNUSU9OX0hFTFBFUl9EUkFGVF9ESVNDQVJEX0JVVFRPTlwiKSB8fCBcIlwiO1xuXHRcdC8vIGFzIHRoZSBkaXNjYXJkIGFjdGlvbiBkb2VzbnQnIHNlbmQgdGhlIGFjdGl2ZSB2ZXJzaW9uIGluIHRoZSByZXNwb25zZSB3ZSBkbyBub3QgdXNlIHRoZSByZXBsYWNlIGluIGNhY2hlXG5cdFx0Y29uc3Qgb0Rpc2NhcmRQcm9taXNlID0gIWJFbmFibGVTdHJpY3RIYW5kbGluZ1xuXHRcdFx0PyBvRGlzY2FyZE9wZXJhdGlvbi5leGVjdXRlKHNHcm91cElkKVxuXHRcdFx0OiBvRGlzY2FyZE9wZXJhdGlvbi5leGVjdXRlKFxuXHRcdFx0XHRcdHNHcm91cElkLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHQob3BlcmF0aW9uc0hlbHBlciBhcyBhbnkpLmZuT25TdHJpY3RIYW5kbGluZ0ZhaWxlZC5iaW5kKFxuXHRcdFx0XHRcdFx0ZHJhZnQsXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCxcblx0XHRcdFx0XHRcdHsgbGFiZWw6IHNBY3Rpb25OYW1lLCBtb2RlbDogb0NvbnRleHQuZ2V0TW9kZWwoKSB9LFxuXHRcdFx0XHRcdFx0cmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdHVuZGVmaW5lZFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdCAgKTtcblx0XHRvQ29udGV4dC5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNHcm91cElkKTtcblx0XHRyZXR1cm4gb0Rpc2NhcmRQcm9taXNlO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkaXNjYXJkIGFjdGlvbiBjYW5ub3QgYmUgZXhlY3V0ZWQgb24gYW4gYWN0aXZlIGRvY3VtZW50XCIpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY3JlYXRlcyBhIHNpYmxpbmcgY29udGV4dCBmb3IgYSBzdWJvYmplY3QgcGFnZSBhbmQgY2FsY3VsYXRlcyBhIHNpYmxpbmcgcGF0aCBmb3IgYWxsIGludGVybWVkaWF0ZSBwYXRoc1xuICogYmV0d2VlbiB0aGUgb2JqZWN0IHBhZ2UgYW5kIHRoZSBzdWJvYmplY3QgcGFnZS5cbiAqXG4gKiBAcGFyYW0gcm9vdEN1cnJlbnRDb250ZXh0IFRoZSBjb250ZXh0IGZvciB0aGUgcm9vdCBvZiB0aGUgZHJhZnRcbiAqIEBwYXJhbSByaWdodG1vc3RDdXJyZW50Q29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgc3Vib2JqZWN0IHBhZ2VcbiAqIEBwYXJhbSByb290Q29udGV4dEluZm8gVGhlIGNvbnRleHQgaW5mbyBvZiByb290IG9mIHRoZSBkcmFmdFxuICogQHJldHVybnMgVGhlIHNpYmxpbmdJbmZvcm1hdGlvbiBvYmplY3RcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbihcblx0cm9vdEN1cnJlbnRDb250ZXh0OiBDb250ZXh0LFxuXHRyaWdodG1vc3RDdXJyZW50Q29udGV4dDogQ29udGV4dCxcblx0cm9vdENvbnRleHRJbmZvPzogUm9vdENvbnRleHRJbmZvXG4pOiBQcm9taXNlPFNpYmxpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZD4ge1xuXHRpZiAoIXJpZ2h0bW9zdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKS5zdGFydHNXaXRoKHJvb3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0Ly8gV3JvbmcgdXNhZ2UgISFcblx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgY29tcHV0ZSByaWdodG1vc3Qgc2libGluZyBjb250ZXh0XCIpO1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb21wdXRlIHJpZ2h0bW9zdCBzaWJsaW5nIGNvbnRleHRcIik7XG5cdH1cblxuXHRpZiAoXG5cdFx0cmlnaHRtb3N0Q3VycmVudENvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UgJiZcblx0XHRyaWdodG1vc3RDdXJyZW50Q29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2Vcblx0KSB7XG5cdFx0Ly8gV2UgYWxyZWFkeSBrbm93IHRoZSBzaWJsaW5nIGZvciByaWdodG1vc3RDdXJyZW50Q29udGV4dCBkb2Vzbid0IGV4aXN0XG5cdFx0Ly8gLS0+IE5vIG5lZWQgdG8gY2hlY2sgY2Fub25pY2FsIHBhdGhzIGV0Yy4uLlxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCBtb2RlbCA9IHJvb3RDdXJyZW50Q29udGV4dC5nZXRNb2RlbCgpO1xuXHR0cnkge1xuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIDEuIEZpbmQgYWxsIHNlZ21lbnRzIGJldHdlZW4gdGhlIHJvb3Qgb2JqZWN0IGFuZCB0aGUgc3ViLW9iamVjdFxuXHRcdC8vIEV4YW1wbGU6IGZvciByb290ID0gL1BhcmFtKGFhKS9FbnRpdHkoYmIpIGFuZCByaWdodE1vc3QgPSAvUGFyYW0oYWEpL0VudGl0eShiYikvX05hdihjYykvX1N1Yk5hdihkZClcblx0XHQvLyAtLS0+IFtcIlBhcmFtKGFhKS9FbnRpdHkoYmIpXCIsIFwiX05hdihjYylcIiwgXCJfU3ViTmF2KGRkKVwiXVxuXG5cdFx0Ly8gRmluZCBhbGwgc2VnbWVudHMgaW4gdGhlIHJpZ2h0bW9zdCBwYXRoXG5cdFx0Y29uc3QgYWRkaXRpb25hbFBhdGggPSByaWdodG1vc3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkucmVwbGFjZShyb290Q3VycmVudENvbnRleHQuZ2V0UGF0aCgpLCBcIlwiKTtcblx0XHRjb25zdCBzZWdtZW50cyA9IGFkZGl0aW9uYWxQYXRoID8gYWRkaXRpb25hbFBhdGguc3Vic3RyaW5nKDEpLnNwbGl0KFwiL1wiKSA6IFtdO1xuXHRcdC8vIEZpcnN0IHNlZ21lbnQgaXMgYWx3YXlzIHRoZSBmdWxsIHBhdGggb2YgdGhlIHJvb3Qgb2JqZWN0LCB3aGljaCBjYW4gY29udGFpbiAnLycgaW4gY2FzZSBvZiBhIHBhcmFtZXRyaXplZCBlbnRpdHlcblx0XHRzZWdtZW50cy51bnNoaWZ0KHJvb3RDdXJyZW50Q29udGV4dC5nZXRQYXRoKCkuc3Vic3RyaW5nKDEpKTtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIDIuIFJlcXVlc3QgY2Fub25pY2FsIHBhdGhzIG9mIHRoZSBzaWJsaW5nIGVudGl0eSBmb3IgZWFjaCBzZWdtZW50XG5cdFx0Ly8gRXhhbXBsZTogZm9yIFtcIlBhcmFtKGFhKS9FbnRpdHkoYmIpXCIsIFwiX05hdihjYylcIiwgXCJfU3ViTmF2KGRkKVwiXVxuXHRcdC8vIC0tPiByZXF1ZXN0IGNhbm9uaWNhbCBwYXRocyBmb3IgXCJQYXJhbShhYSkvRW50aXR5KGJiKS9TaWJsaW5nRW50aXR5XCIsIFwiUGFyYW0oYWEpL0VudGl0eShiYikvX05hdihjYykvU2libGluZ0VudGl0eVwiLCBcIlBhcmFtKGFhKS9FbnRpdHkoYmIpL19OYXYoY2MpL19TdWJOYXYoZGQpL1NpYmxpbmdFbnRpdHlcIlxuXHRcdGNvbnN0IG9sZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGNvbnN0IG5ld1BhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGxldCBjdXJyZW50UGF0aCA9IFwiXCI7XG5cblx0XHQvLyBDb21wdXRpbmcgc2libGluZyBlbnRpdHkgb2Ygcm9vdCBvZiB0aGUgZHJhZnQgY29udGV4dCBpcyBub3QgcmVxdWlyZWQgaWYgdGhlIGNvbnRleHQgaXMgYWxyZWFkeSBpbiB0aGUgc3ViLU9QXG5cdFx0Ly8gRXhhbXBsZTogRWRpdCBpbiBTdWItT1Agd2hlcmUgbmV3IGNvbnRleHQgaXMgYWxyZWFkeSBhdmFpbGFibGVcblx0XHRjb25zdCBwYXRocyA9IFsuLi5zZWdtZW50c107XG5cdFx0aWYgKHJvb3RDb250ZXh0SW5mbz8ucm9vdENvbnRleHROb3RSZXF1aXJlZCA9PT0gdHJ1ZSkge1xuXHRcdFx0cGF0aHMuc2hpZnQoKTtcblx0XHRcdGN1cnJlbnRQYXRoID0gXCIvXCIgKyByb290Q3VycmVudENvbnRleHQ/LmdldFBhdGgoKT8uc3Vic3RyaW5nKDEpO1xuXHRcdH1cblx0XHRjb25zdCBjYW5vbmljYWxQYXRoUHJvbWlzZXMgPSBwYXRocy5tYXAoKHNlZ21lbnQpID0+IHtcblx0XHRcdGN1cnJlbnRQYXRoICs9IGAvJHtzZWdtZW50fWA7XG5cdFx0XHRvbGRQYXRocy51bnNoaWZ0KGN1cnJlbnRQYXRoKTtcblx0XHRcdGlmIChjdXJyZW50UGF0aC5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdFx0Y29uc3Qgc2libGluZ0NvbnRleHQgPSBtb2RlbC5iaW5kQ29udGV4dChgJHtjdXJyZW50UGF0aH0vU2libGluZ0VudGl0eWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRyZXR1cm4gc2libGluZ0NvbnRleHQucmVxdWVzdENhbm9uaWNhbFBhdGgoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTsgLy8gMS0xIHJlbGF0aW9uXG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0XHQvLyAzLiBSZWNvbnN0cnVjdCB0aGUgZnVsbCBwYXRocyBmcm9tIGNhbm9uaWNhbCBwYXRocyAoZm9yIHBhdGggbWFwcGluZylcblx0XHQvLyBFeGFtcGxlOiBmb3IgY2Fub25pY2FsIHBhdGhzIFwiL1BhcmFtKGFhKS9FbnRpdHkoYmItc2libGluZylcIiwgXCIvRW50aXR5MihjYy1zaWJsaW5nKVwiLCBcIi9FbnRpdHkzKGRkLXNpYmxpbmcpXCJcblx0XHQvLyAtLT4gW1wiUGFyYW0oYWEpL0VudGl0eShiYi1zaWJsaW5nKVwiLCBcIlBhcmFtKGFhKS9FbnRpdHkoYmItc2libGluZykvX05hdihjYy1zaWJsaW5nKVwiLCBcIlBhcmFtKGFhKS9FbnRpdHkoYmItc2libGluZykvX05hdihjYy1zaWJsaW5nKS9fU3ViTmF2KGRkLXNpYmxpbmcpXCJdXG5cdFx0Y29uc3QgY2Fub25pY2FsUGF0aHMgPSAoYXdhaXQgUHJvbWlzZS5hbGwoY2Fub25pY2FsUGF0aFByb21pc2VzKSkgYXMgc3RyaW5nW107XG5cblx0XHRpZiAocm9vdENvbnRleHRJbmZvPy5yb290Q29udGV4dE5vdFJlcXVpcmVkID09PSB0cnVlKSB7XG5cdFx0XHRjYW5vbmljYWxQYXRocy51bnNoaWZ0KHJvb3RDb250ZXh0SW5mbz8ucm9vdFNpYmxpbmdQYXRoKTtcblx0XHRcdG9sZFBhdGhzLnB1c2gocm9vdEN1cnJlbnRDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0fVxuXHRcdGxldCBzaWJsaW5nUGF0aCA9IFwiXCI7XG5cdFx0Y2Fub25pY2FsUGF0aHMuZm9yRWFjaCgoY2Fub25pY2FsUGF0aCwgaW5kZXgpID0+IHtcblx0XHRcdGlmIChpbmRleCAhPT0gMCkge1xuXHRcdFx0XHRpZiAoc2VnbWVudHNbaW5kZXhdLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb24gPSBzZWdtZW50c1tpbmRleF0ucmVwbGFjZSgvXFwoLiokLywgXCJcIik7IC8vIEtlZXAgb25seSBuYXZpZ2F0aW9uIG5hbWUgZnJvbSB0aGUgc2VnbWVudCwgaS5lLiBhYWEoeHh4KSAtLT4gYWFhXG5cdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGNhbm9uaWNhbFBhdGgucmVwbGFjZSgvLipcXCgvLCBcIihcIik7IC8vIEtlZXAgb25seSB0aGUga2V5cyBmcm9tIHRoZSBjYW5vbmljYWwgcGF0aCwgaS5lLiBhYWEoeHh4KSAtLT4gKHh4eClcblx0XHRcdFx0XHRzaWJsaW5nUGF0aCArPSBgLyR7bmF2aWdhdGlvbn0ke2tleXN9YDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzaWJsaW5nUGF0aCArPSBgLyR7c2VnbWVudHNbaW5kZXhdfWA7IC8vIDEtMSByZWxhdGlvblxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzaWJsaW5nUGF0aCA9IGNhbm9uaWNhbFBhdGg7IC8vIFRvIG1hbmFnZSBwYXJhbWV0cml6ZWQgZW50aXRpZXNcblx0XHRcdH1cblx0XHRcdG5ld1BhdGhzLnVuc2hpZnQoc2libGluZ1BhdGgpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRhcmdldENvbnRleHQ6IG1vZGVsLmJpbmRDb250ZXh0KHNpYmxpbmdQYXRoLCB1bmRlZmluZWQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pLmdldEJvdW5kQ29udGV4dCgpLCAvLyBDcmVhdGUgdGhlIHJpZ2h0bW9zdCBzaWJsaW5nIGNvbnRleHQgZnJvbSBpdHMgcGF0aFxuXHRcdFx0cGF0aE1hcHBpbmc6IG9sZFBhdGhzLm1hcCgob2xkUGF0aCwgaW5kZXgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRvbGRQYXRoLFxuXHRcdFx0XHRcdG5ld1BhdGg6IG5ld1BhdGhzW2luZGV4XVxuXHRcdFx0XHR9O1xuXHRcdFx0fSlcblx0XHR9O1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIEEgY2Fub25pY2FsIHBhdGggY291bGRuJ3QgYmUgcmVzb2x2ZWQgKGJlY2F1c2UgYSBzaWJsaW5nIGRvZXNuJ3QgZXhpc3QpXG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkcmFmdCBkb2N1bWVudCBmcm9tIGFuIGV4aXN0aW5nIGRvY3VtZW50LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBzZXZlcmFsIGhvb2tzIGFzIHRoZXJlIGlzIGEgY2VydGFpbiBjb3Jlb2dyYXBoeSBkZWZpbmVkLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdCNjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBtUGFyYW1ldGVycyBUaGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5vVmlld10gVGhlIHZpZXdcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuYlByZXNlcnZlQ2hhbmdlc10gUHJlc2VydmUgY2hhbmdlcyBvZiBhbiBleGlzdGluZyBkcmFmdCBvZiBhbm90aGVyIHVzZXJcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCB0aGUge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0IGNvbnRleHR9IG9mIHRoZSBuZXcgZHJhZnQgZG9jdW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQoXG5cdG9Db250ZXh0OiBhbnksXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IHtcblx0XHRvVmlldzogVmlldztcblx0XHRiUHJlc2VydmVDaGFuZ2VzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0fVxuKTogUHJvbWlzZTxDb250ZXh0IHwgdW5kZWZpbmVkPiB7XG5cdGNvbnN0IG1QYXJhbSA9IG1QYXJhbWV0ZXJzIHx8IHt9LFxuXHRcdGJSdW5QcmVzZXJ2ZUNoYW5nZXNGbG93ID1cblx0XHRcdHR5cGVvZiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCAodHlwZW9mIG1QYXJhbS5iUHJlc2VydmVDaGFuZ2VzID09PSBcImJvb2xlYW5cIiAmJiBtUGFyYW0uYlByZXNlcnZlQ2hhbmdlcyk7IC8vZGVmYXVsdCB0cnVlXG5cblx0LyoqXG5cdCAqIE92ZXJ3cml0ZSB0aGUgZXhpc3RpbmcgY2hhbmdlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBSZXNvbHZlcyB3aXRoIHJlc3VsdCBvZiB7QGxpbmsgc2FwLmZlLmNvcmUuYWN0aW9ucyNleGVjdXRlRHJhZnRFZGl0QWN0aW9ufVxuXHQgKi9cblx0YXN5bmMgZnVuY3Rpb24gb3ZlcndyaXRlQ2hhbmdlKCkge1xuXHRcdC8vT3ZlcndyaXRlIGV4aXN0aW5nIGNoYW5nZXNcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IGRyYWZ0RGF0YUNvbnRleHQgPSBvTW9kZWwuYmluZENvbnRleHQoYCR7b0NvbnRleHQuZ2V0UGF0aCgpfS9EcmFmdEFkbWluaXN0cmF0aXZlRGF0YWApLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKG1QYXJhbWV0ZXJzLm9WaWV3KTtcblx0XHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IGF3YWl0IGRyYWZ0RGF0YUNvbnRleHQucmVxdWVzdE9iamVjdCgpO1xuXHRcdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdFx0Ly8gcmVtb3ZlIGFsbCB1bmJvdW5kIHRyYW5zaXRpb24gbWVzc2FnZXMgYXMgd2Ugc2hvdyBhIHNwZWNpYWwgZGlhbG9nXG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0bGV0IHNJbmZvID0gZHJhZnRBZG1pbkRhdGEuSW5Qcm9jZXNzQnlVc2VyRGVzY3JpcHRpb24gfHwgZHJhZnRBZG1pbkRhdGEuSW5Qcm9jZXNzQnlVc2VyO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IChtUGFyYW1ldGVycy5vVmlldy5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZW50aXR5U2V0O1xuXHRcdFx0aWYgKHNJbmZvKSB7XG5cdFx0XHRcdGNvbnN0IHNMb2NrZWRCeVVzZXJNc2cgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX0RSQUZUX09CSkVDVF9QQUdFX0RSQUZUX0xPQ0tFRF9CWV9VU0VSXCIsIHNJbmZvLCBzRW50aXR5U2V0KTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzTG9ja2VkQnlVc2VyTXNnKTtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKHNMb2NrZWRCeVVzZXJNc2cpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0luZm8gPSBkcmFmdEFkbWluRGF0YS5DcmVhdGVkQnlVc2VyRGVzY3JpcHRpb24gfHwgZHJhZnRBZG1pbkRhdGEuQ3JlYXRlZEJ5VXNlcjtcblx0XHRcdFx0Y29uc3Qgc1Vuc2F2ZWRDaGFuZ2VzTXNnID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19EUkFGVF9PQkpFQ1RfUEFHRV9EUkFGVF9VTlNBVkVEX0NIQU5HRVNcIiwgc0luZm8sIHNFbnRpdHlTZXQpO1xuXHRcdFx0XHRhd2FpdCBkcmFmdC5zaG93RWRpdENvbmZpcm1hdGlvbk1lc3NhZ2VCb3goc1Vuc2F2ZWRDaGFuZ2VzTXNnLCBvQ29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBkcmFmdC5leGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0LCBmYWxzZSwgbVBhcmFtZXRlcnMub1ZpZXcpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aHJvdyBuZXcgRXJyb3IoYERyYWZ0IGNyZWF0aW9uIGFib3J0ZWQgZm9yIGRvY3VtZW50OiAke29Db250ZXh0LmdldFBhdGgoKX1gKTtcblx0fVxuXG5cdGlmICghb0NvbnRleHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gYWN0aXZlIGRvY3VtZW50IGlzIHJlcXVpcmVkXCIpO1xuXHR9XG5cdGxldCBvRHJhZnRDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHR0cnkge1xuXHRcdG9EcmFmdENvbnRleHQgPSBhd2FpdCBkcmFmdC5leGVjdXRlRHJhZnRFZGl0QWN0aW9uKG9Db250ZXh0LCBiUnVuUHJlc2VydmVDaGFuZ2VzRmxvdywgbVBhcmFtZXRlcnMub1ZpZXcpO1xuXHR9IGNhdGNoIChvUmVzcG9uc2U6IGFueSkge1xuXHRcdGlmIChvUmVzcG9uc2Uuc3RhdHVzID09PSA0MDkgfHwgb1Jlc3BvbnNlLnN0YXR1cyA9PT0gNDEyIHx8IG9SZXNwb25zZS5zdGF0dXMgPT09IDQyMykge1xuXHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZUJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0Y29uc3Qgc2libGluZ0luZm8gPSBhd2FpdCBkcmFmdC5jb21wdXRlU2libGluZ0luZm9ybWF0aW9uKG9Db250ZXh0LCBvQ29udGV4dCk7XG5cdFx0XHRpZiAoc2libGluZ0luZm8/LnRhcmdldENvbnRleHQpIHtcblx0XHRcdFx0Ly90aGVyZSBpcyBhIGNvbnRleHQgYXV0aG9yaXplZCB0byBiZSBlZGl0ZWQgYnkgdGhlIGN1cnJlbnQgdXNlclxuXHRcdFx0XHRhd2FpdCBDb21tb25VdGlscy53YWl0Rm9yQ29udGV4dFJlcXVlc3RlZChzaWJsaW5nSW5mby50YXJnZXRDb250ZXh0KTtcblx0XHRcdFx0cmV0dXJuIHNpYmxpbmdJbmZvLnRhcmdldENvbnRleHQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL3RoZXJlIGlzIG5vIGRyYWZ0IG93bmVkIGJ5IHRoZSBjdXJyZW50IHVzZXJcblx0XHRcdFx0b0RyYWZ0Q29udGV4dCA9IGF3YWl0IG92ZXJ3cml0ZUNoYW5nZSgpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIShvUmVzcG9uc2UgJiYgb1Jlc3BvbnNlLmNhbmNlbGVkKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKG9SZXNwb25zZSk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9EcmFmdENvbnRleHQpIHtcblx0XHRjb25zdCBzRWRpdEFjdGlvbk5hbWUgPSBkcmFmdC5nZXRBY3Rpb25OYW1lKG9EcmFmdENvbnRleHQsIGRyYWZ0T3BlcmF0aW9ucy5FRElUKTtcblx0XHRjb25zdCBvU2lkZUVmZmVjdHMgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLmdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMoc0VkaXRBY3Rpb25OYW1lLCBvRHJhZnRDb250ZXh0KTtcblx0XHRpZiAob1NpZGVFZmZlY3RzPy50cmlnZ2VyQWN0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck9EYXRhQWN0aW9uKG9TaWRlRWZmZWN0cywgb0RyYWZ0Q29udGV4dCk7XG5cdFx0XHRyZXR1cm4gb0RyYWZ0Q29udGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG9EcmFmdENvbnRleHQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBhY3RpdmUgZG9jdW1lbnQgZnJvbSBhIGRyYWZ0IGRvY3VtZW50LlxuICpcbiAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBzZXZlcmFsIGhvb2tzIGFzIHRoZXJlIGlzIGEgY2VydGFpbiBjaG9yZW9ncmFwaHkgZGVmaW5lZC5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnQjYWN0aXZhdGVEb2N1bWVudFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IG9mIHRoZSBhY3RpdmUgZG9jdW1lbnQgZm9yIHRoZSBuZXcgZHJhZnRcbiAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnRcbiAqIEBwYXJhbSBtUGFyYW1ldGVycyBUaGUgcGFyYW1ldGVyc1xuICogQHBhcmFtIFttUGFyYW1ldGVycy5mbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnRdIENhbGxiYWNrIHRoYXQgYWxsb3dzIGEgdmV0byBiZWZvcmUgdGhlICdDcmVhdGUnIHJlcXVlc3QgaXMgZXhlY3V0ZWRcbiAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuZm5BZnRlckFjdGl2YXRlRG9jdW1lbnRdIENhbGxiYWNrIGZvciBwb3N0cHJvY2Vzc2luZyBhZnRlciBkb2N1bWVudCB3YXMgYWN0aXZhdGVkLlxuICogQHBhcmFtIG1lc3NhZ2VIYW5kbGVyIFRoZSBtZXNzYWdlIGhhbmRsZXJcbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZXMgd2l0aCB0aGUge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0IGNvbnRleHR9IG9mIHRoZSBuZXcgZHJhZnQgZG9jdW1lbnRcbiAqIEBwcml2YXRlXG4gKiBAdWk1LXJlc3RyaWN0ZWRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gYWN0aXZhdGVEb2N1bWVudChcblx0b0NvbnRleHQ6IENvbnRleHQsXG5cdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0bVBhcmFtZXRlcnM6IHsgZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50PzogYW55OyBmbkFmdGVyQWN0aXZhdGVEb2N1bWVudD86IGFueSB9LFxuXHRtZXNzYWdlSGFuZGxlcj86IE1lc3NhZ2VIYW5kbGVyXG4pIHtcblx0Y29uc3QgbVBhcmFtID0gbVBhcmFtZXRlcnMgfHwge307XG5cdGlmICghb0NvbnRleHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJCaW5kaW5nIGNvbnRleHQgdG8gZHJhZnQgZG9jdW1lbnQgaXMgcmVxdWlyZWRcIik7XG5cdH1cblxuXHRjb25zdCBiRXhlY3V0ZSA9IG1QYXJhbS5mbkJlZm9yZUFjdGl2YXRlRG9jdW1lbnQgPyBhd2FpdCBtUGFyYW0uZm5CZWZvcmVBY3RpdmF0ZURvY3VtZW50KG9Db250ZXh0KSA6IHRydWU7XG5cdGlmICghYkV4ZWN1dGUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEFjdGl2YXRpb24gb2YgdGhlIGRvY3VtZW50IHdhcyBhYm9ydGVkIGJ5IGV4dGVuc2lvbiBmb3IgZG9jdW1lbnQ6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHR9XG5cblx0bGV0IG9BY3RpdmVEb2N1bWVudENvbnRleHQ6IGFueTtcblx0aWYgKCFoYXNQcmVwYXJlQWN0aW9uKG9Db250ZXh0KSkge1xuXHRcdG9BY3RpdmVEb2N1bWVudENvbnRleHQgPSBhd2FpdCBleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uKG9Db250ZXh0LCBvQXBwQ29tcG9uZW50KTtcblx0fSBlbHNlIHtcblx0XHQvKiBhY3RpdmF0aW9uIHJlcXVpcmVzIHByZXBhcmF0aW9uICovXG5cdFx0Y29uc3Qgc0JhdGNoR3JvdXAgPSBcImRyYWZ0XCI7XG5cdFx0Ly8gd2UgdXNlIHRoZSBzYW1lIGJhdGNoR3JvdXAgdG8gZm9yY2UgcHJlcGFyZSBhbmQgYWN0aXZhdGUgaW4gYSBzYW1lIGJhdGNoIGJ1dCB3aXRoIGRpZmZlcmVudCBjaGFuZ2VzZXRcblx0XHRsZXQgb1ByZXBhcmVQcm9taXNlID0gZHJhZnQuZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb24ob0NvbnRleHQsIHNCYXRjaEdyb3VwLCBmYWxzZSk7XG5cdFx0b0NvbnRleHQuZ2V0TW9kZWwoKS5zdWJtaXRCYXRjaChzQmF0Y2hHcm91cCk7XG5cdFx0Y29uc3Qgb0FjdGl2YXRlUHJvbWlzZSA9IGRyYWZ0LmV4ZWN1dGVEcmFmdEFjdGl2YXRpb25BY3Rpb24ob0NvbnRleHQsIG9BcHBDb21wb25lbnQsIHNCYXRjaEdyb3VwKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoW29QcmVwYXJlUHJvbWlzZSwgb0FjdGl2YXRlUHJvbWlzZV0pO1xuXHRcdFx0b0FjdGl2ZURvY3VtZW50Q29udGV4dCA9IHZhbHVlc1sxXTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdC8vIEJDUCAyMjcwMDg0MDc1XG5cdFx0XHQvLyBpZiB0aGUgQWN0aXZhdGlvbiBmYWlscywgdGhlbiB0aGUgbWVzc2FnZXMgYXJlIHJldHJpZXZlZCBmcm9tIFBSRVBBUkFUSU9OIGFjdGlvblxuXHRcdFx0Y29uc3Qgc01lc3NhZ2VzUGF0aCA9IGdldE1lc3NhZ2VQYXRoRm9yUHJlcGFyZShvQ29udGV4dCk7XG5cdFx0XHRpZiAoc01lc3NhZ2VzUGF0aCkge1xuXHRcdFx0XHRvUHJlcGFyZVByb21pc2UgPSBkcmFmdC5leGVjdXRlRHJhZnRQcmVwYXJhdGlvbkFjdGlvbihvQ29udGV4dCwgc0JhdGNoR3JvdXAsIHRydWUpO1xuXHRcdFx0XHRvQ29udGV4dC5nZXRNb2RlbCgpLnN1Ym1pdEJhdGNoKHNCYXRjaEdyb3VwKTtcblx0XHRcdFx0YXdhaXQgb1ByZXBhcmVQcm9taXNlO1xuXHRcdFx0XHRjb25zdCBkYXRhID0gYXdhaXQgb0NvbnRleHQucmVxdWVzdE9iamVjdCgpO1xuXHRcdFx0XHRpZiAoZGF0YVtzTWVzc2FnZXNQYXRoXS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0Ly9pZiBtZXNzYWdlcyBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFBSRVBBUkFUSU9OIGFjdGlvbiwgdGhlbiBwcmV2aW91cyB0cmFuc2l0aW9uIG1lc3NhZ2VzIGFyZSByZW1vdmVkXG5cdFx0XHRcdFx0bWVzc2FnZUhhbmRsZXI/LnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyhmYWxzZSwgZmFsc2UsIG9Db250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHRocm93IGVycjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1QYXJhbS5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudCA/IG1QYXJhbS5mbkFmdGVyQWN0aXZhdGVEb2N1bWVudChvQ29udGV4dCwgb0FjdGl2ZURvY3VtZW50Q29udGV4dCkgOiBvQWN0aXZlRG9jdW1lbnRDb250ZXh0O1xufVxuXG4vKipcbiAqIERpc3BsYXkgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgYm94IGFmdGVyIHByZXNzaW5nIHRoZSBlZGl0IGJ1dHRvbiBvZiBhbiBvYmplY3QgcGFnZSB3aXRoIHVuc2F2ZWQgY2hhbmdlcy5cbiAqXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0I3Nob3dFZGl0Q29uZmlybWF0aW9uTWVzc2FnZUJveFxuICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmFjdGlvbnMuZHJhZnRcbiAqIEBzdGF0aWNcbiAqIEBwYXJhbSBzVW5zYXZlZENoYW5nZXNNc2cgRGlhbG9nIGJveCBtZXNzYWdlIGluZm9ybWluZyB0aGUgdXNlciB0aGF0IGlmIGhlIHN0YXJ0cyBlZGl0aW5nLCB0aGUgcHJldmlvdXMgdW5zYXZlZCBjaGFuZ2VzIHdpbGwgYmUgbG9zdFxuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGFjdGl2ZSBkb2N1bWVudCBmb3IgdGhlIG5ldyBkcmFmdFxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlc1xuICogQHByaXZhdGVcbiAqIEB1aTUtcmVzdHJpY3RlZFxuICovXG5mdW5jdGlvbiBzaG93RWRpdENvbmZpcm1hdGlvbk1lc3NhZ2VCb3goc1Vuc2F2ZWRDaGFuZ2VzTXNnOiBzdHJpbmcsIG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdGNvbnN0IGxvY2FsSTE4blJlZiA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZCkge1xuXHRcdGNvbnN0IG9EaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHRpdGxlOiBsb2NhbEkxOG5SZWYuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFU19QQUdFX1RJVExFX1dBUk5JTkdcIiksXG5cdFx0XHRzdGF0ZTogXCJXYXJuaW5nXCIsXG5cdFx0XHRjb250ZW50OiBuZXcgVGV4dCh7XG5cdFx0XHRcdHRleHQ6IHNVbnNhdmVkQ2hhbmdlc01zZ1xuXHRcdFx0fSksXG5cdFx0XHRiZWdpbkJ1dHRvbjogbmV3IEJ1dHRvbih7XG5cdFx0XHRcdHRleHQ6IGxvY2FsSTE4blJlZi5nZXRUZXh0KFwiQ19DT01NT05fT0JKRUNUX1BBR0VfRURJVFwiKSxcblx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdFx0ZW5kQnV0dG9uOiBuZXcgQnV0dG9uKHtcblx0XHRcdFx0dGV4dDogbG9jYWxJMThuUmVmLmdldFRleHQoXCJDX0NPTU1PTl9PQkpFQ1RfUEFHRV9DQU5DRUxcIiksXG5cdFx0XHRcdHByZXNzOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdHJlamVjdChgRHJhZnQgY3JlYXRpb24gYWJvcnRlZCBmb3IgZG9jdW1lbnQ6ICR7b0NvbnRleHQuZ2V0UGF0aCgpfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9KSxcblx0XHRcdGFmdGVyQ2xvc2U6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0b0RpYWxvZy5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0b0RpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRvRGlhbG9nLm9wZW4oKTtcblx0fSk7XG59XG5cbi8qKlxuICogSFRUUCBQT1NUIGNhbGwgd2hlbiBEcmFmdEFjdGlvbiBpcyBwcmVzZW50IGZvciBEcmFmdCBEZWxldGU7IEhUVFAgREVMRVRFIGNhbGwgd2hlbiB0aGVyZSBpcyBubyBEcmFmdEFjdGlvblxuICogYW5kIEFjdGl2ZSBJbnN0YW5jZSBhbHdheXMgdXNlcyBERUxFVEUuXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5hY3Rpb25zLmRyYWZ0I2RlbGV0ZURyYWZ0XG4gKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuYWN0aW9ucy5kcmFmdFxuICogQHN0YXRpY1xuICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgb2YgdGhlIGRvY3VtZW50IHRvIGJlIGRpc2NhcmRlZFxuICogQHBhcmFtIG9BcHBDb21wb25lbnQgQ29udGV4dCBvZiB0aGUgZG9jdW1lbnQgdG8gYmUgZGlzY2FyZGVkXG4gKiBAcGFyYW0gYkVuYWJsZVN0cmljdEhhbmRsaW5nXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmVkIHdoZW4gdGhlIGNvbnRleHQgaXMgZGVsZXRlZFxuICogQHVpNS1yZXN0cmljdGVkXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZURyYWZ0KG9Db250ZXh0OiBDb250ZXh0LCBvQXBwQ29tcG9uZW50PzogQXBwQ29tcG9uZW50LCBiRW5hYmxlU3RyaWN0SGFuZGxpbmc/OiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdGNvbnN0IHNEaXNjYXJkQWN0aW9uID0gZ2V0QWN0aW9uTmFtZShvQ29udGV4dCwgZHJhZnRPcGVyYXRpb25zLkRJU0NBUkQpLFxuXHRcdGJJc0FjdGl2ZUVudGl0eSA9IG9Db250ZXh0LmdldE9iamVjdCgpLklzQWN0aXZlRW50aXR5O1xuXG5cdGlmIChiSXNBY3RpdmVFbnRpdHkgfHwgKCFiSXNBY3RpdmVFbnRpdHkgJiYgIXNEaXNjYXJkQWN0aW9uKSkge1xuXHRcdC8vVXNlIERlbGV0ZSBpbiBjYXNlIG9mIGFjdGl2ZSBlbnRpdHkgYW5kIG5vIGRpc2NhcmQgYWN0aW9uIGF2YWlsYWJsZSBmb3IgZHJhZnRcblx0XHRpZiAob0NvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0cmV0dXJuIG9Db250ZXh0XG5cdFx0XHRcdC5nZXRCaW5kaW5nKClcblx0XHRcdFx0LnJlc2V0Q2hhbmdlcygpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXR1cm4gb0NvbnRleHQuZGVsZXRlKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRleHQuZGVsZXRlKCk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vVXNlIERpc2NhcmQgUG9zdCBBY3Rpb24gaWYgaXQgaXMgYSBkcmFmdCBlbnRpdHkgYW5kIGRpc2NhcmQgYWN0aW9uIGV4aXN0c1xuXHRcdHJldHVybiBleGVjdXRlRHJhZnREaXNjYXJkQWN0aW9uKG9Db250ZXh0LCBvQXBwQ29tcG9uZW50LCBiRW5hYmxlU3RyaWN0SGFuZGxpbmcpO1xuXHR9XG59XG5cbmNvbnN0IGRyYWZ0ID0ge1xuXHRjcmVhdGVEcmFmdEZyb21BY3RpdmVEb2N1bWVudDogY3JlYXRlRHJhZnRGcm9tQWN0aXZlRG9jdW1lbnQsXG5cdGFjdGl2YXRlRG9jdW1lbnQ6IGFjdGl2YXRlRG9jdW1lbnQsXG5cdGRlbGV0ZURyYWZ0OiBkZWxldGVEcmFmdCxcblx0ZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbjogZXhlY3V0ZURyYWZ0RWRpdEFjdGlvbixcblx0ZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbjogZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbixcblx0ZXhlY3V0ZURyYWZ0UHJlcGFyYXRpb25BY3Rpb246IGV4ZWN1dGVEcmFmdFByZXBhcmF0aW9uQWN0aW9uLFxuXHRleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uOiBleGVjdXRlRHJhZnRBY3RpdmF0aW9uQWN0aW9uLFxuXHRoYXNQcmVwYXJlQWN0aW9uOiBoYXNQcmVwYXJlQWN0aW9uLFxuXHRnZXRNZXNzYWdlc1BhdGg6IGdldE1lc3NhZ2VzUGF0aCxcblx0Y29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbjogY29tcHV0ZVNpYmxpbmdJbmZvcm1hdGlvbixcblx0cHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb246IGRyYWZ0RGF0YUxvc3NQb3B1cC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbixcblx0c2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uOiBkcmFmdERhdGFMb3NzUG9wdXAuc2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uLFxuXHRjcmVhdGVPcGVyYXRpb246IGNyZWF0ZU9wZXJhdGlvbixcblx0ZXhlY3V0ZURyYWZ0RGlzY2FyZEFjdGlvbjogZXhlY3V0ZURyYWZ0RGlzY2FyZEFjdGlvbixcblx0TmF2aWdhdGlvblR5cGU6IGRyYWZ0RGF0YUxvc3NQb3B1cC5OYXZpZ2F0aW9uVHlwZSxcblx0Z2V0QWN0aW9uTmFtZTogZ2V0QWN0aW9uTmFtZSxcblx0c2hvd0VkaXRDb25maXJtYXRpb25NZXNzYWdlQm94OiBzaG93RWRpdENvbmZpcm1hdGlvbk1lc3NhZ2VCb3hcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRyYWZ0O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7OztFQTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQTtFQUNBLE1BQU1BLGVBQWUsR0FBRztJQUN2QkMsSUFBSSxFQUFFLFlBQVk7SUFDbEJDLFVBQVUsRUFBRSxrQkFBa0I7SUFDOUJDLE9BQU8sRUFBRSxlQUFlO0lBQ3hCQyxPQUFPLEVBQUU7RUFDVixDQUFDOztFQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLGFBQWEsQ0FBQ0MsUUFBaUIsRUFBRUMsVUFBa0IsRUFBRTtJQUM3RCxNQUFNQyxNQUFNLEdBQUdGLFFBQVEsQ0FBQ0csUUFBUSxFQUFFO01BQ2pDQyxVQUFVLEdBQUdGLE1BQU0sQ0FBQ0csWUFBWSxFQUFFO01BQ2xDQyxjQUFjLEdBQUdGLFVBQVUsQ0FBQ0csV0FBVyxDQUFDUCxRQUFRLENBQUNRLE9BQU8sRUFBRSxDQUFDO0lBRTVELE9BQU9KLFVBQVUsQ0FBQ0ssU0FBUyxDQUFFLEdBQUVILGNBQWUsNkNBQTRDTCxVQUFXLEVBQUMsQ0FBQztFQUN4RztFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTUyxlQUFlLENBQUNWLFFBQWlCLEVBQUVDLFVBQWtCLEVBQUVVLFFBQWMsRUFBRTtJQUMvRSxNQUFNQyxjQUFjLEdBQUdiLGFBQWEsQ0FBQ0MsUUFBUSxFQUFFQyxVQUFVLENBQUM7SUFFMUQsT0FBT0QsUUFBUSxDQUFDRyxRQUFRLEVBQUUsQ0FBQ1UsV0FBVyxDQUFFLEdBQUVELGNBQWUsT0FBTSxFQUFFWixRQUFRLEVBQUVXLFFBQVEsQ0FBQztFQUNyRjtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0csYUFBYSxDQUFDZCxRQUFpQixFQUFFQyxVQUFrQixFQUFFO0lBQzdELE1BQU1DLE1BQU0sR0FBR0YsUUFBUSxDQUFDRyxRQUFRLEVBQUU7TUFDakNDLFVBQVUsR0FBR0YsTUFBTSxDQUFDRyxZQUFZLEVBQUU7TUFDbENDLGNBQWMsR0FBR0YsVUFBVSxDQUFDRyxXQUFXLENBQUNQLFFBQVEsQ0FBQ1EsT0FBTyxFQUFFLENBQUM7SUFFNUQsT0FBT0osVUFBVSxDQUFDSyxTQUFTLENBQUUsR0FBRUgsY0FBZSw2Q0FBNENMLFVBQVcsY0FBYSxDQUFDO0VBQ3BIO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU2MsZ0JBQWdCLENBQUNmLFFBQWlCLEVBQVc7SUFDckQsT0FBTyxDQUFDLENBQUNELGFBQWEsQ0FBQ0MsUUFBUSxFQUFFTixlQUFlLENBQUNJLE9BQU8sQ0FBQztFQUMxRDtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxlQUFla0Isc0JBQXNCLENBQUNoQixRQUFpQixFQUFFaUIsZ0JBQXlCLEVBQUVDLEtBQVUsRUFBb0I7SUFDakgsSUFBSWxCLFFBQVEsQ0FBQ21CLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO01BQzNDLE1BQU1SLFFBQVEsR0FBRztRQUFFUyxxQkFBcUIsRUFBRTtNQUFLLENBQUM7TUFDaEQsTUFBTUMsVUFBVSxHQUFHWCxlQUFlLENBQUNWLFFBQVEsRUFBRU4sZUFBZSxDQUFDQyxJQUFJLEVBQUVnQixRQUFRLENBQUM7TUFDNUVVLFVBQVUsQ0FBQ0MsWUFBWSxDQUFDLGlCQUFpQixFQUFFTCxnQkFBZ0IsQ0FBQztNQUM1RCxNQUFNTSxRQUFRLEdBQUcsUUFBUTtNQUN6QixNQUFNQyxhQUFhLEdBQUdDLGdCQUFnQixDQUFDUCxLQUFLLENBQUM7TUFDN0MsTUFBTVEsV0FBVyxHQUFHRixhQUFhLENBQUNHLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQztNQUN0RTtNQUNBLE1BQU1DLFlBQVksR0FBR1AsVUFBVSxDQUFDUSxPQUFPLENBQ3RDTixRQUFRLEVBQ1JPLFNBQVMsRUFDUkMsZ0JBQWdCLENBQVNDLHdCQUF3QixDQUFDQyxJQUFJLENBQ3REQyxLQUFLLEVBQ0xYLFFBQVEsRUFDUjtRQUFFWSxLQUFLLEVBQUVULFdBQVc7UUFBRVUsS0FBSyxFQUFFcEMsUUFBUSxDQUFDRyxRQUFRO01BQUcsQ0FBQyxFQUNsRHFCLGFBQWEsRUFDYixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSk0sU0FBUyxFQUNUQSxTQUFTLENBQ1QsRUFDRDlCLFFBQVEsQ0FBQ3FDLFVBQVUsRUFBRSxDQUFDQyxHQUFHLENBQUMsd0NBQXdDLENBQUMsQ0FDbkU7TUFDRGpCLFVBQVUsQ0FBQ2xCLFFBQVEsRUFBRSxDQUFDb0MsV0FBVyxDQUFDaEIsUUFBUSxDQUFDO01BQzNDLE9BQU8sTUFBTUssWUFBWTtJQUMxQixDQUFDLE1BQU07TUFDTixNQUFNLElBQUlZLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQztJQUN2RDtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWVDLHNCQUFzQixDQUNwQ0MsT0FBZ0IsRUFDaEJDLFlBQTBCLEVBQzFCQyxVQUFtQixFQUMrQjtJQUNsRCxJQUFJVixLQUFLLENBQUNXLGVBQWUsQ0FBQ0gsT0FBTyxDQUFDLElBQUlSLEtBQUssQ0FBQ25CLGdCQUFnQixDQUFDMkIsT0FBTyxDQUFDLEVBQUU7TUFDdEUsSUFBSTtRQUNILElBQUksQ0FBQ0UsVUFBVSxFQUFFO1VBQ2hCO1VBQ0E7VUFDQTtVQUNBLE1BQU9GLE9BQU8sQ0FBQ0wsVUFBVSxFQUFFLENBQXlCUyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQ3RFO1FBQ0EsTUFBTUMsU0FBUyxHQUFHLE1BQU1iLEtBQUssQ0FBQ2MsNkJBQTZCLENBQUNOLE9BQU8sRUFBRUEsT0FBTyxDQUFDTyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRUwsVUFBVSxDQUFDO1FBQ2xIO1FBQ0EsSUFBSUcsU0FBUyxJQUFJLENBQUNqQyxhQUFhLENBQUM0QixPQUFPLEVBQUVoRCxlQUFlLENBQUNJLE9BQU8sQ0FBQyxFQUFFO1VBQ2xFb0QsZUFBZSxDQUFDUixPQUFPLEVBQUVDLFlBQVksQ0FBQ1EscUJBQXFCLEVBQUUsQ0FBQztRQUMvRDtRQUNBLE9BQU9KLFNBQVM7TUFDakIsQ0FBQyxDQUFDLE9BQU9LLEtBQVUsRUFBRTtRQUNwQkMsR0FBRyxDQUFDRCxLQUFLLENBQUMsaUNBQWlDLEVBQUVBLEtBQUssQ0FBQztNQUNwRDtJQUNEO0lBRUEsT0FBT3RCLFNBQVM7RUFDakI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWV3Qiw0QkFBNEIsQ0FBQ3RELFFBQWlCLEVBQUV1RCxhQUEyQixFQUFFaEMsUUFBaUIsRUFBb0I7SUFDaEksTUFBTWlDLGlCQUFpQixHQUFHekMsZ0JBQWdCLENBQUNmLFFBQVEsQ0FBQzs7SUFFcEQ7SUFDQTtJQUNBLE1BQU15RCxXQUFXLEdBQUdELGlCQUFpQjtJQUVyQyxJQUFJLENBQUN4RCxRQUFRLENBQUNtQixXQUFXLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtNQUM1QyxNQUFNRSxVQUFVLEdBQUdYLGVBQWUsQ0FBQ1YsUUFBUSxFQUFFTixlQUFlLENBQUNFLFVBQVUsRUFBRTtRQUFFd0IscUJBQXFCLEVBQUU7TUFBSyxDQUFDLENBQUM7TUFDekcsTUFBTUksYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQzhCLGFBQWEsQ0FBQztNQUNyRCxNQUFNN0IsV0FBVyxHQUFHRixhQUFhLENBQUNHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztNQUNsRSxJQUFJO1FBQ0gsT0FBTyxNQUFNTixVQUFVLENBQUNRLE9BQU8sQ0FDOUJOLFFBQVEsRUFDUmtDLFdBQVcsRUFDWGxDLFFBQVEsR0FDSlEsZ0JBQWdCLENBQVNDLHdCQUF3QixDQUFDQyxJQUFJLENBQ3ZEQyxLQUFLLEVBQ0xYLFFBQVEsRUFDUjtVQUFFWSxLQUFLLEVBQUVULFdBQVc7VUFBRVUsS0FBSyxFQUFFcEMsUUFBUSxDQUFDRyxRQUFRO1FBQUcsQ0FBQyxFQUNsRHFCLGFBQWEsRUFDYixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksRUFDSk0sU0FBUyxFQUNUQSxTQUFTLENBQ1IsR0FDREEsU0FBUyxFQUNaOUIsUUFBUSxDQUFDcUMsVUFBVSxFQUFFLENBQUNDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUNuRTtNQUNGLENBQUMsQ0FBQyxPQUFPb0IsQ0FBQyxFQUFFO1FBQ1gsSUFBSUYsaUJBQWlCLEVBQUU7VUFDdEIsTUFBTUcsVUFBVSxHQUFHNUQsYUFBYSxDQUFDQyxRQUFRLEVBQUVOLGVBQWUsQ0FBQ0ksT0FBTyxDQUFDO1lBQ2xFOEQsbUJBQW1CLEdBQUdMLGFBQWEsQ0FBQ0oscUJBQXFCLEVBQUU7WUFDM0RVLGtCQUFrQixHQUFHRCxtQkFBbUIsQ0FBQ0UseUJBQXlCLENBQUNILFVBQVUsRUFBRTNELFFBQVEsQ0FBQztZQUN4RitELFlBQVksR0FBR0Ysa0JBQWtCLElBQUlBLGtCQUFrQixDQUFDRyxlQUFlO1VBQ3hFLElBQUlELFlBQVksSUFBSUEsWUFBWSxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLElBQUk7Y0FDSCxNQUFNTCxtQkFBbUIsQ0FBQ00sa0JBQWtCLENBQUNILFlBQVksRUFBRS9ELFFBQVEsQ0FBQztZQUNyRSxDQUFDLENBQUMsT0FBT21FLE1BQVcsRUFBRTtjQUNyQmQsR0FBRyxDQUFDRCxLQUFLLENBQUMscUNBQXFDLEVBQUVlLE1BQU0sQ0FBQztZQUN6RDtVQUNELENBQUMsTUFBTTtZQUNOLElBQUk7Y0FDSCxNQUFNakIsZUFBZSxDQUFDbEQsUUFBUSxFQUFFNEQsbUJBQW1CLENBQUM7WUFDckQsQ0FBQyxDQUFDLE9BQU9PLE1BQVcsRUFBRTtjQUNyQmQsR0FBRyxDQUFDRCxLQUFLLENBQUMsaUNBQWlDLEVBQUVlLE1BQU0sQ0FBQztZQUNyRDtVQUNEO1FBQ0Q7UUFDQSxNQUFNVCxDQUFDO01BQ1I7SUFDRCxDQUFDLE1BQU07TUFDTixNQUFNLElBQUlsQixLQUFLLENBQUMsZ0VBQWdFLENBQUM7SUFDbEY7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTNEIsd0JBQXdCLENBQUNwRSxRQUFpQixFQUFpQjtJQUNuRSxNQUFNSSxVQUFVLEdBQUdKLFFBQVEsQ0FBQ0csUUFBUSxFQUFFLENBQUNFLFlBQVksRUFBRTtJQUNyRCxNQUFNZ0UsWUFBWSxHQUFHakUsVUFBVSxDQUFDRyxXQUFXLENBQUNQLFFBQVEsQ0FBQ1EsT0FBTyxFQUFFLENBQUM7SUFDL0QsTUFBTThELFdBQVcsR0FBR3hELGFBQWEsQ0FBQ2QsUUFBUSxFQUFFTixlQUFlLENBQUNJLE9BQU8sQ0FBQztJQUNwRTtJQUNBO0lBQ0EsT0FBT3dFLFdBQVcsR0FBR2xFLFVBQVUsQ0FBQ0ssU0FBUyxDQUFFLEdBQUU0RCxZQUFhLEtBQUUseUNBQWlDLFFBQU8sQ0FBQyxHQUFHLElBQUk7RUFDN0c7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU3JCLDZCQUE2QixDQUFDaEQsUUFBaUIsRUFBRXVFLE9BQWdCLEVBQUVDLFNBQW1CLEVBQUU1QixVQUFvQixFQUFFO0lBQ3RILElBQUksQ0FBQzVDLFFBQVEsQ0FBQ21CLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO01BQzVDLE1BQU1zRCxhQUFhLEdBQUdELFNBQVMsR0FBR0osd0JBQXdCLENBQUNwRSxRQUFRLENBQUMsR0FBRyxJQUFJO01BQzNFLE1BQU1xQixVQUFVLEdBQUdYLGVBQWUsQ0FBQ1YsUUFBUSxFQUFFTixlQUFlLENBQUNJLE9BQU8sRUFBRTJFLGFBQWEsR0FBRztRQUFFQyxPQUFPLEVBQUVEO01BQWMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7TUFFeEg7TUFDQXBELFVBQVUsQ0FBQ0MsWUFBWSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQztNQUVuRCxNQUFNQyxRQUFRLEdBQUdnRCxPQUFPLElBQUlsRCxVQUFVLENBQUNzRCxVQUFVLEVBQUU7TUFDbkQsT0FBT3RELFVBQVUsQ0FDZlEsT0FBTyxDQUFDTixRQUFRLEVBQUVxQixVQUFVLENBQUMsQ0FDN0JnQyxJQUFJLENBQUMsWUFBWTtRQUNqQixPQUFPdkQsVUFBVTtNQUNsQixDQUFDLENBQUMsQ0FDRHdELEtBQUssQ0FBQyxVQUFVVixNQUFXLEVBQUU7UUFDN0JkLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLHFDQUFxQyxFQUFFZSxNQUFNLENBQUM7TUFDekQsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxNQUFNO01BQ04sTUFBTSxJQUFJM0IsS0FBSyxDQUFDLGlFQUFpRSxDQUFDO0lBQ25GO0VBQ0Q7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTSyxlQUFlLENBQUM3QyxRQUFpQixFQUFzQjtJQUMvRCxNQUFNRSxNQUFNLEdBQUdGLFFBQVEsQ0FBQ0csUUFBUSxFQUFFO01BQ2pDQyxVQUFVLEdBQUdGLE1BQU0sQ0FBQ0csWUFBWSxFQUFFO01BQ2xDQyxjQUFjLEdBQUdGLFVBQVUsQ0FBQ0csV0FBVyxDQUFDUCxRQUFRLENBQUNRLE9BQU8sRUFBRSxDQUFDO0lBQzVELE9BQU9KLFVBQVUsQ0FBQ0ssU0FBUyxDQUFFLEdBQUVILGNBQWUsaURBQWdELENBQUM7RUFDaEc7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVM0QyxlQUFlLENBQUNsRCxRQUFpQixFQUFFNEQsbUJBQXVDLEVBQUU7SUFDcEYsTUFBTWEsYUFBYSxHQUFHdkMsS0FBSyxDQUFDVyxlQUFlLENBQUM3QyxRQUFRLENBQUM7SUFDckQsSUFBSXlFLGFBQWEsRUFBRTtNQUNsQixPQUFPYixtQkFBbUIsQ0FBQ00sa0JBQWtCLENBQUMsQ0FBQ08sYUFBYSxDQUFDLEVBQUV6RSxRQUFRLENBQUM7SUFDekU7SUFDQSxPQUFPOEUsT0FBTyxDQUFDQyxPQUFPLEVBQUU7RUFDekI7RUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsZUFBZUMseUJBQXlCLENBQUNoRixRQUFpQixFQUFFdUQsYUFBbUIsRUFBRTBCLHFCQUErQixFQUFvQjtJQUNuSSxJQUFJLENBQUNqRixRQUFRLENBQUNtQixXQUFXLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtNQUM1QyxNQUFNK0QsaUJBQWlCLEdBQUdoRCxLQUFLLENBQUN4QixlQUFlLENBQUNWLFFBQVEsRUFBRU4sZUFBZSxDQUFDRyxPQUFPLENBQUM7TUFDbEYsTUFBTTJCLGFBQWEsR0FBRytCLGFBQWEsSUFBSTlCLGdCQUFnQixDQUFDOEIsYUFBYSxDQUFDO01BQ3RFLE1BQU1oQyxRQUFRLEdBQUcsUUFBUTtNQUN6QixNQUFNRyxXQUFXLEdBQUcsQ0FBQUYsYUFBYSxhQUFiQSxhQUFhLHVCQUFiQSxhQUFhLENBQUVHLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQyxLQUFJLEVBQUU7TUFDN0Y7TUFDQSxNQUFNd0QsZUFBZSxHQUFHLENBQUNGLHFCQUFxQixHQUMzQ0MsaUJBQWlCLENBQUNyRCxPQUFPLENBQUNOLFFBQVEsQ0FBQyxHQUNuQzJELGlCQUFpQixDQUFDckQsT0FBTyxDQUN6Qk4sUUFBUSxFQUNSTyxTQUFTLEVBQ1JDLGdCQUFnQixDQUFTQyx3QkFBd0IsQ0FBQ0MsSUFBSSxDQUN0REMsS0FBSyxFQUNMWCxRQUFRLEVBQ1I7UUFBRVksS0FBSyxFQUFFVCxXQUFXO1FBQUVVLEtBQUssRUFBRXBDLFFBQVEsQ0FBQ0csUUFBUTtNQUFHLENBQUMsRUFDbERxQixhQUFhLEVBQ2IsSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0pNLFNBQVMsRUFDVEEsU0FBUyxDQUNULEVBQ0QsS0FBSyxDQUNKO01BQ0o5QixRQUFRLENBQUNHLFFBQVEsRUFBRSxDQUFDb0MsV0FBVyxDQUFDaEIsUUFBUSxDQUFDO01BQ3pDLE9BQU80RCxlQUFlO0lBQ3ZCLENBQUMsTUFBTTtNQUNOLE1BQU0sSUFBSTNDLEtBQUssQ0FBQyw2REFBNkQsQ0FBQztJQUMvRTtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLGVBQWU0Qyx5QkFBeUIsQ0FDdkNDLGtCQUEyQixFQUMzQkMsdUJBQWdDLEVBQ2hDQyxlQUFpQyxFQUNTO0lBQzFDLElBQUksQ0FBQ0QsdUJBQXVCLENBQUM5RSxPQUFPLEVBQUUsQ0FBQ2dGLFVBQVUsQ0FBQ0gsa0JBQWtCLENBQUM3RSxPQUFPLEVBQUUsQ0FBQyxFQUFFO01BQ2hGO01BQ0E2QyxHQUFHLENBQUNELEtBQUssQ0FBQywwQ0FBMEMsQ0FBQztNQUNyRCxNQUFNLElBQUlaLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQztJQUM1RDtJQUVBLElBQ0M4Qyx1QkFBdUIsQ0FBQ25FLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssSUFDL0RtRSx1QkFBdUIsQ0FBQ25FLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssRUFDL0Q7TUFDRDtNQUNBO01BQ0EsT0FBT1csU0FBUztJQUNqQjtJQUVBLE1BQU1NLEtBQUssR0FBR2lELGtCQUFrQixDQUFDbEYsUUFBUSxFQUFFO0lBQzNDLElBQUk7TUFDSDtNQUNBO01BQ0E7TUFDQTs7TUFFQTtNQUNBLE1BQU1zRixjQUFjLEdBQUdILHVCQUF1QixDQUFDOUUsT0FBTyxFQUFFLENBQUNrRixPQUFPLENBQUNMLGtCQUFrQixDQUFDN0UsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO01BQ2xHLE1BQU1tRixRQUFRLEdBQUdGLGNBQWMsR0FBR0EsY0FBYyxDQUFDRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO01BQzdFO01BQ0FGLFFBQVEsQ0FBQ0csT0FBTyxDQUFDVCxrQkFBa0IsQ0FBQzdFLE9BQU8sRUFBRSxDQUFDb0YsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDOztNQUUzRDtNQUNBO01BQ0E7TUFDQTtNQUNBLE1BQU1HLFFBQWtCLEdBQUcsRUFBRTtNQUM3QixNQUFNQyxRQUFrQixHQUFHLEVBQUU7TUFDN0IsSUFBSUMsV0FBVyxHQUFHLEVBQUU7O01BRXBCO01BQ0E7TUFDQSxNQUFNQyxLQUFLLEdBQUcsQ0FBQyxHQUFHUCxRQUFRLENBQUM7TUFDM0IsSUFBSSxDQUFBSixlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRVksc0JBQXNCLE1BQUssSUFBSSxFQUFFO1FBQUE7UUFDckRELEtBQUssQ0FBQ0UsS0FBSyxFQUFFO1FBQ2JILFdBQVcsR0FBRyxHQUFHLElBQUdaLGtCQUFrQixhQUFsQkEsa0JBQWtCLGdEQUFsQkEsa0JBQWtCLENBQUU3RSxPQUFPLEVBQUUsMERBQTdCLHNCQUErQm9GLFNBQVMsQ0FBQyxDQUFDLENBQUM7TUFDaEU7TUFDQSxNQUFNUyxxQkFBcUIsR0FBR0gsS0FBSyxDQUFDSSxHQUFHLENBQUVDLE9BQU8sSUFBSztRQUNwRE4sV0FBVyxJQUFLLElBQUdNLE9BQVEsRUFBQztRQUM1QlIsUUFBUSxDQUFDRCxPQUFPLENBQUNHLFdBQVcsQ0FBQztRQUM3QixJQUFJQSxXQUFXLENBQUNPLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUM5QixNQUFNQyxjQUFjLEdBQUdyRSxLQUFLLENBQUN2QixXQUFXLENBQUUsR0FBRW9GLFdBQVksZ0JBQWUsQ0FBQyxDQUFDUyxlQUFlLEVBQUU7VUFDMUYsT0FBT0QsY0FBYyxDQUFDRSxvQkFBb0IsRUFBRTtRQUM3QyxDQUFDLE1BQU07VUFDTixPQUFPN0IsT0FBTyxDQUFDQyxPQUFPLENBQUNqRCxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3BDO01BQ0QsQ0FBQyxDQUFDOztNQUVGO01BQ0E7TUFDQTtNQUNBO01BQ0EsTUFBTThFLGNBQWMsR0FBSSxNQUFNOUIsT0FBTyxDQUFDK0IsR0FBRyxDQUFDUixxQkFBcUIsQ0FBYztNQUU3RSxJQUFJLENBQUFkLGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFWSxzQkFBc0IsTUFBSyxJQUFJLEVBQUU7UUFDckRTLGNBQWMsQ0FBQ2QsT0FBTyxDQUFDUCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRXVCLGVBQWUsQ0FBQztRQUN4RGYsUUFBUSxDQUFDZ0IsSUFBSSxDQUFDMUIsa0JBQWtCLENBQUM3RSxPQUFPLEVBQUUsQ0FBQztNQUM1QztNQUNBLElBQUl3RyxXQUFXLEdBQUcsRUFBRTtNQUNwQkosY0FBYyxDQUFDSyxPQUFPLENBQUMsQ0FBQ0MsYUFBYSxFQUFFQyxLQUFLLEtBQUs7UUFDaEQsSUFBSUEsS0FBSyxLQUFLLENBQUMsRUFBRTtVQUNoQixJQUFJeEIsUUFBUSxDQUFDd0IsS0FBSyxDQUFDLENBQUNYLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNsQyxNQUFNWSxVQUFVLEdBQUd6QixRQUFRLENBQUN3QixLQUFLLENBQUMsQ0FBQ3pCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6RCxNQUFNMkIsSUFBSSxHQUFHSCxhQUFhLENBQUN4QixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakRzQixXQUFXLElBQUssSUFBR0ksVUFBVyxHQUFFQyxJQUFLLEVBQUM7VUFDdkMsQ0FBQyxNQUFNO1lBQ05MLFdBQVcsSUFBSyxJQUFHckIsUUFBUSxDQUFDd0IsS0FBSyxDQUFFLEVBQUMsQ0FBQyxDQUFDO1VBQ3ZDO1FBQ0QsQ0FBQyxNQUFNO1VBQ05ILFdBQVcsR0FBR0UsYUFBYSxDQUFDLENBQUM7UUFDOUI7O1FBQ0FsQixRQUFRLENBQUNGLE9BQU8sQ0FBQ2tCLFdBQVcsQ0FBQztNQUM5QixDQUFDLENBQUM7TUFFRixPQUFPO1FBQ05NLGFBQWEsRUFBRWxGLEtBQUssQ0FBQ3ZCLFdBQVcsQ0FBQ21HLFdBQVcsRUFBRWxGLFNBQVMsRUFBRTtVQUFFeUYsU0FBUyxFQUFFO1FBQWUsQ0FBQyxDQUFDLENBQUNiLGVBQWUsRUFBRTtRQUFFO1FBQzNHYyxXQUFXLEVBQUV6QixRQUFRLENBQUNPLEdBQUcsQ0FBQyxDQUFDbUIsT0FBTyxFQUFFTixLQUFLLEtBQUs7VUFDN0MsT0FBTztZQUNOTSxPQUFPO1lBQ1BDLE9BQU8sRUFBRTFCLFFBQVEsQ0FBQ21CLEtBQUs7VUFDeEIsQ0FBQztRQUNGLENBQUM7TUFDRixDQUFDO0lBQ0YsQ0FBQyxDQUFDLE9BQU8vRCxLQUFLLEVBQUU7TUFDZjtNQUNBLE9BQU90QixTQUFTO0lBQ2pCO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsZUFBZTZGLDZCQUE2QixDQUMzQzNILFFBQWEsRUFDYnVELGFBQTJCLEVBQzNCcUUsV0FHQyxFQUM4QjtJQUMvQixNQUFNQyxNQUFNLEdBQUdELFdBQVcsSUFBSSxDQUFDLENBQUM7TUFDL0JFLHVCQUF1QixHQUN0QixPQUFPRCxNQUFNLENBQUM1RyxnQkFBZ0IsS0FBSyxXQUFXLElBQUssT0FBTzRHLE1BQU0sQ0FBQzVHLGdCQUFnQixLQUFLLFNBQVMsSUFBSTRHLE1BQU0sQ0FBQzVHLGdCQUFpQixDQUFDLENBQUM7O0lBRS9IO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7SUFDQyxlQUFlOEcsZUFBZSxHQUFHO01BQ2hDO01BQ0EsTUFBTTdILE1BQU0sR0FBR0YsUUFBUSxDQUFDRyxRQUFRLEVBQUU7TUFDbEMsTUFBTTZILGdCQUFnQixHQUFHOUgsTUFBTSxDQUFDVyxXQUFXLENBQUUsR0FBRWIsUUFBUSxDQUFDUSxPQUFPLEVBQUcsMEJBQXlCLENBQUMsQ0FBQ2tHLGVBQWUsRUFBRTtNQUM5RyxNQUFNbEYsYUFBYSxHQUFHQyxnQkFBZ0IsQ0FBQ21HLFdBQVcsQ0FBQzFHLEtBQUssQ0FBQztNQUN6RCxNQUFNK0csY0FBYyxHQUFHLE1BQU1ELGdCQUFnQixDQUFDbEYsYUFBYSxFQUFFO01BQzdELElBQUltRixjQUFjLEVBQUU7UUFDbkI7UUFDQUMsZUFBZSxDQUFDQywrQkFBK0IsRUFBRTtRQUNqRCxJQUFJQyxLQUFLLEdBQUdILGNBQWMsQ0FBQ0ksMEJBQTBCLElBQUlKLGNBQWMsQ0FBQ0ssZUFBZTtRQUN2RixNQUFNQyxVQUFVLEdBQUlYLFdBQVcsQ0FBQzFHLEtBQUssQ0FBQ3NILFdBQVcsRUFBRSxDQUFTQyxTQUFTO1FBQ3JFLElBQUlMLEtBQUssRUFBRTtVQUNWLE1BQU1NLGdCQUFnQixHQUFHbEgsYUFBYSxDQUFDRyxPQUFPLENBQUMsMENBQTBDLEVBQUV5RyxLQUFLLEVBQUVHLFVBQVUsQ0FBQztVQUM3R0ksVUFBVSxDQUFDdkYsS0FBSyxDQUFDc0YsZ0JBQWdCLENBQUM7VUFDbEMsTUFBTSxJQUFJbEcsS0FBSyxDQUFDa0csZ0JBQWdCLENBQUM7UUFDbEMsQ0FBQyxNQUFNO1VBQ05OLEtBQUssR0FBR0gsY0FBYyxDQUFDVyx3QkFBd0IsSUFBSVgsY0FBYyxDQUFDWSxhQUFhO1VBQy9FLE1BQU1DLGtCQUFrQixHQUFHdEgsYUFBYSxDQUFDRyxPQUFPLENBQUMsMkNBQTJDLEVBQUV5RyxLQUFLLEVBQUVHLFVBQVUsQ0FBQztVQUNoSCxNQUFNckcsS0FBSyxDQUFDNkcsOEJBQThCLENBQUNELGtCQUFrQixFQUFFOUksUUFBUSxDQUFDO1VBQ3hFLE9BQU9rQyxLQUFLLENBQUNsQixzQkFBc0IsQ0FBQ2hCLFFBQVEsRUFBRSxLQUFLLEVBQUU0SCxXQUFXLENBQUMxRyxLQUFLLENBQUM7UUFDeEU7TUFDRDtNQUNBLE1BQU0sSUFBSXNCLEtBQUssQ0FBRSx3Q0FBdUN4QyxRQUFRLENBQUNRLE9BQU8sRUFBRyxFQUFDLENBQUM7SUFDOUU7SUFFQSxJQUFJLENBQUNSLFFBQVEsRUFBRTtNQUNkLE1BQU0sSUFBSXdDLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQztJQUNsRTtJQUNBLElBQUl3RyxhQUFrQztJQUN0QyxJQUFJO01BQ0hBLGFBQWEsR0FBRyxNQUFNOUcsS0FBSyxDQUFDbEIsc0JBQXNCLENBQUNoQixRQUFRLEVBQUU4SCx1QkFBdUIsRUFBRUYsV0FBVyxDQUFDMUcsS0FBSyxDQUFDO0lBQ3pHLENBQUMsQ0FBQyxPQUFPK0gsU0FBYyxFQUFFO01BQ3hCLElBQUlBLFNBQVMsQ0FBQ0MsTUFBTSxLQUFLLEdBQUcsSUFBSUQsU0FBUyxDQUFDQyxNQUFNLEtBQUssR0FBRyxJQUFJRCxTQUFTLENBQUNDLE1BQU0sS0FBSyxHQUFHLEVBQUU7UUFDckZoQixlQUFlLENBQUNpQiw2QkFBNkIsRUFBRTtRQUMvQ2pCLGVBQWUsQ0FBQ0MsK0JBQStCLEVBQUU7UUFDakQsTUFBTWlCLFdBQVcsR0FBRyxNQUFNbEgsS0FBSyxDQUFDa0QseUJBQXlCLENBQUNwRixRQUFRLEVBQUVBLFFBQVEsQ0FBQztRQUM3RSxJQUFJb0osV0FBVyxhQUFYQSxXQUFXLGVBQVhBLFdBQVcsQ0FBRTlCLGFBQWEsRUFBRTtVQUMvQjtVQUNBLE1BQU0rQixXQUFXLENBQUNDLHVCQUF1QixDQUFDRixXQUFXLENBQUM5QixhQUFhLENBQUM7VUFDcEUsT0FBTzhCLFdBQVcsQ0FBQzlCLGFBQWE7UUFDakMsQ0FBQyxNQUFNO1VBQ047VUFDQTBCLGFBQWEsR0FBRyxNQUFNakIsZUFBZSxFQUFFO1FBQ3hDO01BQ0QsQ0FBQyxNQUFNLElBQUksRUFBRWtCLFNBQVMsSUFBSUEsU0FBUyxDQUFDTSxRQUFRLENBQUMsRUFBRTtRQUM5QyxNQUFNLElBQUkvRyxLQUFLLENBQUN5RyxTQUFTLENBQUM7TUFDM0I7SUFDRDtJQUVBLElBQUlELGFBQWEsRUFBRTtNQUFBO01BQ2xCLE1BQU1RLGVBQWUsR0FBR3RILEtBQUssQ0FBQ25DLGFBQWEsQ0FBQ2lKLGFBQWEsRUFBRXRKLGVBQWUsQ0FBQ0MsSUFBSSxDQUFDO01BQ2hGLE1BQU04SixZQUFZLEdBQUdsRyxhQUFhLENBQUNKLHFCQUFxQixFQUFFLENBQUNXLHlCQUF5QixDQUFDMEYsZUFBZSxFQUFFUixhQUFhLENBQUM7TUFDcEgsSUFBSVMsWUFBWSxhQUFaQSxZQUFZLHdDQUFaQSxZQUFZLENBQUVDLGNBQWMsa0RBQTVCLHNCQUE4QnpGLE1BQU0sRUFBRTtRQUN6QyxNQUFNVixhQUFhLENBQUNKLHFCQUFxQixFQUFFLENBQUN3RyxnQ0FBZ0MsQ0FBQ0YsWUFBWSxFQUFFVCxhQUFhLENBQUM7UUFDekcsT0FBT0EsYUFBYTtNQUNyQixDQUFDLE1BQU07UUFDTixPQUFPQSxhQUFhO01BQ3JCO0lBQ0QsQ0FBQyxNQUFNO01BQ04sT0FBT2xILFNBQVM7SUFDakI7RUFDRDtFQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsZUFBZThILGdCQUFnQixDQUM5QjVKLFFBQWlCLEVBQ2pCdUQsYUFBMkIsRUFDM0JxRSxXQUE4RSxFQUM5RWlDLGNBQStCLEVBQzlCO0lBQ0QsTUFBTWhDLE1BQU0sR0FBR0QsV0FBVyxJQUFJLENBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUM1SCxRQUFRLEVBQUU7TUFDZCxNQUFNLElBQUl3QyxLQUFLLENBQUMsK0NBQStDLENBQUM7SUFDakU7SUFFQSxNQUFNc0gsUUFBUSxHQUFHakMsTUFBTSxDQUFDa0Msd0JBQXdCLEdBQUcsTUFBTWxDLE1BQU0sQ0FBQ2tDLHdCQUF3QixDQUFDL0osUUFBUSxDQUFDLEdBQUcsSUFBSTtJQUN6RyxJQUFJLENBQUM4SixRQUFRLEVBQUU7TUFDZCxNQUFNLElBQUl0SCxLQUFLLENBQUUscUVBQW9FeEMsUUFBUSxDQUFDUSxPQUFPLEVBQUcsRUFBQyxDQUFDO0lBQzNHO0lBRUEsSUFBSXdKLHNCQUEyQjtJQUMvQixJQUFJLENBQUNqSixnQkFBZ0IsQ0FBQ2YsUUFBUSxDQUFDLEVBQUU7TUFDaENnSyxzQkFBc0IsR0FBRyxNQUFNMUcsNEJBQTRCLENBQUN0RCxRQUFRLEVBQUV1RCxhQUFhLENBQUM7SUFDckYsQ0FBQyxNQUFNO01BQ047TUFDQSxNQUFNMEcsV0FBVyxHQUFHLE9BQU87TUFDM0I7TUFDQSxJQUFJQyxlQUFlLEdBQUdoSSxLQUFLLENBQUNjLDZCQUE2QixDQUFDaEQsUUFBUSxFQUFFaUssV0FBVyxFQUFFLEtBQUssQ0FBQztNQUN2RmpLLFFBQVEsQ0FBQ0csUUFBUSxFQUFFLENBQUNvQyxXQUFXLENBQUMwSCxXQUFXLENBQUM7TUFDNUMsTUFBTUUsZ0JBQWdCLEdBQUdqSSxLQUFLLENBQUNvQiw0QkFBNEIsQ0FBQ3RELFFBQVEsRUFBRXVELGFBQWEsRUFBRTBHLFdBQVcsQ0FBQztNQUNqRyxJQUFJO1FBQ0gsTUFBTUcsTUFBTSxHQUFHLE1BQU10RixPQUFPLENBQUMrQixHQUFHLENBQUMsQ0FBQ3FELGVBQWUsRUFBRUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRUgsc0JBQXNCLEdBQUdJLE1BQU0sQ0FBQyxDQUFDLENBQUM7TUFDbkMsQ0FBQyxDQUFDLE9BQU9DLEdBQUcsRUFBRTtRQUNiO1FBQ0E7UUFDQSxNQUFNNUYsYUFBYSxHQUFHTCx3QkFBd0IsQ0FBQ3BFLFFBQVEsQ0FBQztRQUN4RCxJQUFJeUUsYUFBYSxFQUFFO1VBQ2xCeUYsZUFBZSxHQUFHaEksS0FBSyxDQUFDYyw2QkFBNkIsQ0FBQ2hELFFBQVEsRUFBRWlLLFdBQVcsRUFBRSxJQUFJLENBQUM7VUFDbEZqSyxRQUFRLENBQUNHLFFBQVEsRUFBRSxDQUFDb0MsV0FBVyxDQUFDMEgsV0FBVyxDQUFDO1VBQzVDLE1BQU1DLGVBQWU7VUFDckIsTUFBTUksSUFBSSxHQUFHLE1BQU10SyxRQUFRLENBQUM4QyxhQUFhLEVBQUU7VUFDM0MsSUFBSXdILElBQUksQ0FBQzdGLGFBQWEsQ0FBQyxDQUFDUixNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25DO1lBQ0E0RixjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRVUsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRXZLLFFBQVEsQ0FBQ1EsT0FBTyxFQUFFLENBQUM7VUFDM0U7UUFDRDtRQUNBLE1BQU02SixHQUFHO01BQ1Y7SUFDRDtJQUNBLE9BQU94QyxNQUFNLENBQUMyQyx1QkFBdUIsR0FBRzNDLE1BQU0sQ0FBQzJDLHVCQUF1QixDQUFDeEssUUFBUSxFQUFFZ0ssc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO0VBQ2xJOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTakIsOEJBQThCLENBQUNELGtCQUEwQixFQUFFOUksUUFBaUIsRUFBRTtJQUN0RixNQUFNeUssWUFBWSxHQUFHQyxJQUFJLENBQUNDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQztJQUNqRSxPQUFPLElBQUk3RixPQUFPLENBQUMsVUFBVUMsT0FBNkIsRUFBRTZGLE1BQThCLEVBQUU7TUFDM0YsTUFBTUMsT0FBTyxHQUFHLElBQUlDLE1BQU0sQ0FBQztRQUMxQkMsS0FBSyxFQUFFTixZQUFZLENBQUM5SSxPQUFPLENBQUMsNERBQTRELENBQUM7UUFDekZxSixLQUFLLEVBQUUsU0FBUztRQUNoQkMsT0FBTyxFQUFFLElBQUlDLElBQUksQ0FBQztVQUNqQkMsSUFBSSxFQUFFckM7UUFDUCxDQUFDLENBQUM7UUFDRnNDLFdBQVcsRUFBRSxJQUFJQyxNQUFNLENBQUM7VUFDdkJGLElBQUksRUFBRVYsWUFBWSxDQUFDOUksT0FBTyxDQUFDLDJCQUEyQixDQUFDO1VBQ3ZEMkosSUFBSSxFQUFFLFlBQVk7VUFDbEJDLEtBQUssRUFBRSxZQUFZO1lBQ2xCVixPQUFPLENBQUNXLEtBQUssRUFBRTtZQUNmekcsT0FBTyxDQUFDLElBQUksQ0FBQztVQUNkO1FBQ0QsQ0FBQyxDQUFDO1FBQ0YwRyxTQUFTLEVBQUUsSUFBSUosTUFBTSxDQUFDO1VBQ3JCRixJQUFJLEVBQUVWLFlBQVksQ0FBQzlJLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQztVQUN6RDRKLEtBQUssRUFBRSxZQUFZO1lBQ2xCVixPQUFPLENBQUNXLEtBQUssRUFBRTtZQUNmWixNQUFNLENBQUUsd0NBQXVDNUssUUFBUSxDQUFDUSxPQUFPLEVBQUcsRUFBQyxDQUFDO1VBQ3JFO1FBQ0QsQ0FBQyxDQUFDO1FBQ0ZrTCxVQUFVLEVBQUUsWUFBWTtVQUN2QmIsT0FBTyxDQUFDYyxPQUFPLEVBQUU7UUFDbEI7TUFDRCxDQUFDLENBQUM7TUFDRmQsT0FBTyxDQUFDZSxhQUFhLENBQUMscUJBQXFCLENBQUM7TUFDNUNmLE9BQU8sQ0FBQ2dCLElBQUksRUFBRTtJQUNmLENBQUMsQ0FBQztFQUNIOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNDLFdBQVcsQ0FBQzlMLFFBQWlCLEVBQUV1RCxhQUE0QixFQUFFMEIscUJBQStCLEVBQW9CO0lBQ3hILE1BQU04RyxjQUFjLEdBQUdoTSxhQUFhLENBQUNDLFFBQVEsRUFBRU4sZUFBZSxDQUFDRyxPQUFPLENBQUM7TUFDdEVtTSxlQUFlLEdBQUdoTSxRQUFRLENBQUNTLFNBQVMsRUFBRSxDQUFDd0wsY0FBYztJQUV0RCxJQUFJRCxlQUFlLElBQUssQ0FBQ0EsZUFBZSxJQUFJLENBQUNELGNBQWUsRUFBRTtNQUM3RDtNQUNBLElBQUkvTCxRQUFRLENBQUNrTSxpQkFBaUIsRUFBRSxFQUFFO1FBQ2pDLE9BQU9sTSxRQUFRLENBQ2JxQyxVQUFVLEVBQUUsQ0FDWjhKLFlBQVksRUFBRSxDQUNkdkgsSUFBSSxDQUFDLFlBQVk7VUFDakIsT0FBTzVFLFFBQVEsQ0FBQ29NLE1BQU0sRUFBRTtRQUN6QixDQUFDLENBQUMsQ0FDRHZILEtBQUssQ0FBQyxVQUFVekIsS0FBVSxFQUFFO1VBQzVCLE9BQU8wQixPQUFPLENBQUM4RixNQUFNLENBQUN4SCxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFDO01BQ0osQ0FBQyxNQUFNO1FBQ04sT0FBT3BELFFBQVEsQ0FBQ29NLE1BQU0sRUFBRTtNQUN6QjtJQUNELENBQUMsTUFBTTtNQUNOO01BQ0EsT0FBT3BILHlCQUF5QixDQUFDaEYsUUFBUSxFQUFFdUQsYUFBYSxFQUFFMEIscUJBQXFCLENBQUM7SUFDakY7RUFDRDtFQUVBLE1BQU0vQyxLQUFLLEdBQUc7SUFDYnlGLDZCQUE2QixFQUFFQSw2QkFBNkI7SUFDNURpQyxnQkFBZ0IsRUFBRUEsZ0JBQWdCO0lBQ2xDa0MsV0FBVyxFQUFFQSxXQUFXO0lBQ3hCOUssc0JBQXNCLEVBQUVBLHNCQUFzQjtJQUM5Q3lCLHNCQUFzQixFQUFFQSxzQkFBc0I7SUFDOUNPLDZCQUE2QixFQUFFQSw2QkFBNkI7SUFDNURNLDRCQUE0QixFQUFFQSw0QkFBNEI7SUFDMUR2QyxnQkFBZ0IsRUFBRUEsZ0JBQWdCO0lBQ2xDOEIsZUFBZSxFQUFFQSxlQUFlO0lBQ2hDdUMseUJBQXlCLEVBQUVBLHlCQUF5QjtJQUNwRGlILHlDQUF5QyxFQUFFQyxrQkFBa0IsQ0FBQ0QseUNBQXlDO0lBQ3ZHRSxvQ0FBb0MsRUFBRUQsa0JBQWtCLENBQUNDLG9DQUFvQztJQUM3RjdMLGVBQWUsRUFBRUEsZUFBZTtJQUNoQ3NFLHlCQUF5QixFQUFFQSx5QkFBeUI7SUFDcER3SCxjQUFjLEVBQUVGLGtCQUFrQixDQUFDRSxjQUFjO0lBQ2pEek0sYUFBYSxFQUFFQSxhQUFhO0lBQzVCZ0osOEJBQThCLEVBQUVBO0VBQ2pDLENBQUM7RUFBQyxPQUVhN0csS0FBSztBQUFBIn0=
|
|
@@ -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/CommonUtils","sap/fe/core/controllerextensions/messageHandler/messageHandling","sap/fe/core/helpers/ResourceModelHelper","sap/m/Button","sap/m/Dialog","sap/m/MessageBox","sap/m/Text","sap/ui/core/Core","../../operationsHelper","./draftDataLossPopup"],function(e,t,n,o,r,
|
|
5
|
+
sap.ui.define(["sap/base/Log","sap/fe/core/CommonUtils","sap/fe/core/controllerextensions/messageHandler/messageHandling","sap/fe/core/helpers/ResourceModelHelper","sap/m/Button","sap/m/Dialog","sap/m/MessageBox","sap/m/Text","sap/ui/core/Core","../../operationsHelper","./draftDataLossPopup"],function(e,t,n,o,i,r,a,s,c,u,d){"use strict";var l=o.getResourceModel;const f={EDIT:"EditAction",ACTIVATION:"ActivationAction",DISCARD:"DiscardAction",PREPARE:"PreparationAction"};function g(e,t){const n=e.getModel(),o=n.getMetaModel(),i=o.getMetaPath(e.getPath());return o.getObject(`${i}@com.sap.vocabularies.Common.v1.DraftRoot/${t}`)}function h(e,t,n){const o=g(e,t);return e.getModel().bindContext(`${o}(...)`,e,n)}function E(e,t){const n=e.getModel(),o=n.getMetaModel(),i=o.getMetaPath(e.getPath());return o.getObject(`${i}@com.sap.vocabularies.Common.v1.DraftRoot/${t}/$ReturnType`)}function P(e){return!!g(e,f.PREPARE)}async function p(e,t,n){if(e.getProperty("IsActiveEntity")){const o={$$inheritExpandSelect:true};const i=h(e,f.EDIT,o);i.setParameter("PreserveChanges",t);const r="direct";const a=l(n);const s=a.getText("C_COMMON_OBJECT_PAGE_EDIT");const c=i.execute(r,undefined,u.fnOnStrictHandlingFailed.bind(O,r,{label:s,model:e.getModel()},a,null,null,null,undefined,undefined),e.getBinding().isA("sap.ui.model.odata.v4.ODataListBinding"));i.getModel().submitBatch(r);return await c}else{throw new Error("You cannot edit this draft document")}}async function A(t,n,o){if(O.getMessagesPath(t)&&O.hasPrepareAction(t)){try{if(!o){await t.getBinding().requestObject("")}const e=await O.executeDraftPreparationAction(t,t.getUpdateGroupId(),true,o);if(e&&!E(t,f.PREPARE)){w(t,n.getSideEffectsService())}return e}catch(t){e.error("Error while requesting messages",t)}}return undefined}async function m(t,n,o){const i=P(t);const r=i;if(!t.getProperty("IsActiveEntity")){const a=h(t,f.ACTIVATION,{$$inheritExpandSelect:true});const s=l(n);const c=s.getText("C_OP_OBJECT_PAGE_SAVE");try{return await a.execute(o,r,o?u.fnOnStrictHandlingFailed.bind(O,o,{label:c,model:t.getModel()},s,null,null,null,undefined,undefined):undefined,t.getBinding().isA("sap.ui.model.odata.v4.ODataListBinding"))}catch(o){if(i){const o=g(t,f.PREPARE),i=n.getSideEffectsService(),r=i.getODataActionSideEffects(o,t),a=r&&r.pathExpressions;if(a&&a.length>0){try{await i.requestSideEffects(a,t)}catch(t){e.error("Error while requesting side effects",t)}}else{try{await w(t,i)}catch(t){e.error("Error while requesting messages",t)}}}throw o}}else{throw new Error("The activation action cannot be executed on an active document")}}function v(e){const t=e.getModel().getMetaModel();const n=t.getMetaPath(e.getPath());const o=E(e,f.PREPARE);return o?t.getObject(`${n}/@${"com.sap.vocabularies.Common.v1.Messages"}/$Path`):null}function C(t,n,o,i){if(!t.getProperty("IsActiveEntity")){const r=o?v(t):null;const a=h(t,f.PREPARE,r?{$select:r}:null);a.setParameter("SideEffectsQualifier","");const s=n||a.getGroupId();return a.execute(s,i).then(function(){return a}).catch(function(t){e.error("Error while executing the operation",t)})}else{throw new Error("The preparation action cannot be executed on an active document")}}function D(e){const t=e.getModel(),n=t.getMetaModel(),o=n.getMetaPath(e.getPath());return n.getObject(`${o}/@com.sap.vocabularies.Common.v1.Messages/$Path`)}function w(e,t){const n=O.getMessagesPath(e);if(n){return t.requestSideEffects([n],e)}return Promise.resolve()}async function x(e,t,n){if(!e.getProperty("IsActiveEntity")){const o=O.createOperation(e,f.DISCARD);const i=t&&l(t);const r="direct";const a=(i===null||i===void 0?void 0:i.getText("C_TRANSACTION_HELPER_DRAFT_DISCARD_BUTTON"))||"";const s=!n?o.execute(r):o.execute(r,undefined,u.fnOnStrictHandlingFailed.bind(O,r,{label:a,model:e.getModel()},i,null,null,null,undefined,undefined),false);e.getModel().submitBatch(r);return s}else{throw new Error("The discard action cannot be executed on an active document")}}async function b(t,n,o){if(!n.getPath().startsWith(t.getPath())){e.error("Cannot compute rightmost sibling context");throw new Error("Cannot compute rightmost sibling context")}if(n.getProperty("IsActiveEntity")===false&&n.getProperty("HasActiveEntity")===false){return undefined}const i=t.getModel();try{const e=n.getPath().replace(t.getPath(),"");const a=e?e.substring(1).split("/"):[];a.unshift(t.getPath().substring(1));const s=[];const c=[];let u="";const d=[...a];if((o===null||o===void 0?void 0:o.rootContextNotRequired)===true){var r;d.shift();u="/"+(t===null||t===void 0?void 0:(r=t.getPath())===null||r===void 0?void 0:r.substring(1))}const l=d.map(e=>{u+=`/${e}`;s.unshift(u);if(u.endsWith(")")){const e=i.bindContext(`${u}/SiblingEntity`).getBoundContext();return e.requestCanonicalPath()}else{return Promise.resolve(undefined)}});const f=await Promise.all(l);if((o===null||o===void 0?void 0:o.rootContextNotRequired)===true){f.unshift(o===null||o===void 0?void 0:o.rootSiblingPath);s.push(t.getPath())}let g="";f.forEach((e,t)=>{if(t!==0){if(a[t].endsWith(")")){const n=a[t].replace(/\(.*$/,"");const o=e.replace(/.*\(/,"(");g+=`/${n}${o}`}else{g+=`/${a[t]}`}}else{g=e}c.unshift(g)});return{targetContext:i.bindContext(g,undefined,{$$groupId:"$auto.Heroes"}).getBoundContext(),pathMapping:s.map((e,t)=>({oldPath:e,newPath:c[t]}))}}catch(e){return undefined}}async function M(e,o,i){const r=i||{},s=typeof r.bPreserveChanges==="undefined"||typeof r.bPreserveChanges==="boolean"&&r.bPreserveChanges;async function c(){const t=e.getModel();const o=t.bindContext(`${e.getPath()}/DraftAdministrativeData`).getBoundContext();const r=l(i.oView);const s=await o.requestObject();if(s){n.removeUnboundTransitionMessages();let t=s.InProcessByUserDescription||s.InProcessByUser;const o=i.oView.getViewData().entitySet;if(t){const e=r.getText("C_DRAFT_OBJECT_PAGE_DRAFT_LOCKED_BY_USER",t,o);a.error(e);throw new Error(e)}else{t=s.CreatedByUserDescription||s.CreatedByUser;const n=r.getText("C_DRAFT_OBJECT_PAGE_DRAFT_UNSAVED_CHANGES",t,o);await O.showEditConfirmationMessageBox(n,e);return O.executeDraftEditAction(e,false,i.oView)}}throw new Error(`Draft creation aborted for document: ${e.getPath()}`)}if(!e){throw new Error("Binding context to active document is required")}let u;try{u=await O.executeDraftEditAction(e,s,i.oView)}catch(o){if(o.status===409||o.status===412||o.status===423){n.removeBoundTransitionMessages();n.removeUnboundTransitionMessages();const o=await O.computeSiblingInformation(e,e);if(o!==null&&o!==void 0&&o.targetContext){await t.waitForContextRequested(o.targetContext);return o.targetContext}else{u=await c()}}else if(!(o&&o.canceled)){throw new Error(o)}}if(u){var d;const e=O.getActionName(u,f.EDIT);const t=o.getSideEffectsService().getODataActionSideEffects(e,u);if(t!==null&&t!==void 0&&(d=t.triggerActions)!==null&&d!==void 0&&d.length){await o.getSideEffectsService().requestSideEffectsForODataAction(t,u);return u}else{return u}}else{return undefined}}async function y(e,t,n,o){const i=n||{};if(!e){throw new Error("Binding context to draft document is required")}const r=i.fnBeforeActivateDocument?await i.fnBeforeActivateDocument(e):true;if(!r){throw new Error(`Activation of the document was aborted by extension for document: ${e.getPath()}`)}let a;if(!P(e)){a=await m(e,t)}else{const n="draft";let i=O.executeDraftPreparationAction(e,n,false);e.getModel().submitBatch(n);const r=O.executeDraftActivationAction(e,t,n);try{const e=await Promise.all([i,r]);a=e[1]}catch(t){const r=v(e);if(r){i=O.executeDraftPreparationAction(e,n,true);e.getModel().submitBatch(n);await i;const t=await e.requestObject();if(t[r].length>0){o===null||o===void 0?void 0:o.removeTransitionMessages(false,false,e.getPath())}}throw t}}return i.fnAfterActivateDocument?i.fnAfterActivateDocument(e,a):a}function T(e,t){const n=c.getLibraryResourceBundle("sap.fe.core");return new Promise(function(o,a){const c=new r({title:n.getText("C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_WARNING"),state:"Warning",content:new s({text:e}),beginButton:new i({text:n.getText("C_COMMON_OBJECT_PAGE_EDIT"),type:"Emphasized",press:function(){c.close();o(true)}}),endButton:new i({text:n.getText("C_COMMON_OBJECT_PAGE_CANCEL"),press:function(){c.close();a(`Draft creation aborted for document: ${t.getPath()}`)}}),afterClose:function(){c.destroy()}});c.addStyleClass("sapUiContentPadding");c.open()})}function _(e,t,n){const o=g(e,f.DISCARD),i=e.getObject().IsActiveEntity;if(i||!i&&!o){if(e.hasPendingChanges()){return e.getBinding().resetChanges().then(function(){return e.delete()}).catch(function(e){return Promise.reject(e)})}else{return e.delete()}}else{return x(e,t,n)}}const O={createDraftFromActiveDocument:M,activateDocument:y,deleteDraft:_,executeDraftEditAction:p,executeDraftValidation:A,executeDraftPreparationAction:C,executeDraftActivationAction:m,hasPrepareAction:P,getMessagesPath:D,computeSiblingInformation:b,processDataLossOrDraftDiscardConfirmation:d.processDataLossOrDraftDiscardConfirmation,silentlyKeepDraftOnForwardNavigation:d.silentlyKeepDraftOnForwardNavigation,createOperation:h,executeDraftDiscardAction:x,NavigationType:d.NavigationType,getActionName:g,showEditConfirmationMessageBox:T};return O},false);
|
|
6
6
|
//# sourceMappingURL=draft.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft.js","names":["sap","ui","define","Log","CommonUtils","messageHandling","ResourceModelHelper","Button","Dialog","MessageBox","Text","Core","operationsHelper","draftDataLossPopup","getResourceModel","draftOperations","EDIT","ACTIVATION","DISCARD","PREPARE","getActionName","oContext","sOperation","oModel","getModel","oMetaModel","getMetaModel","sEntitySetPath","getMetaPath","getPath","getObject","createOperation","oOptions","sOperationName","bindContext","getReturnType","hasPrepareAction","async","executeDraftEditAction","bPreserveChanges","oView","getProperty","$$inheritExpandSelect","oOperation","setParameter","sGroupId","resourceModel","sActionName","getText","oEditPromise","execute","undefined","fnOnStrictHandlingFailed","bind","draft","label","model","getBinding","isA","submitBatch","Error","executeDraftValidation","context","appComponent","ignoreETag","getMessagesPath","operation","executeDraftPreparationAction","getUpdateGroupId","requestMessages","getSideEffectsService","error","executeDraftActivationAction","oAppComponent","bHasPrepareAction","bIgnoreEtag","e","actionName","oSideEffectsService","oBindingParameters","getODataActionSideEffects","aTargetPaths","pathExpressions","length","requestSideEffects","oError","getMessagePathForPrepare","sContextPath","oReturnType","groupId","bMessages","sMessagesPath","$select","getGroupId","then","catch","Promise","resolve","executeDraftDiscardAction","bEnableStrictHandling","oDiscardOperation","oDiscardPromise","computeSiblingInformation","rootCurrentContext","rightmostCurrentContext","startsWith","additionalPath","replace","segments","substring","split","unshift","oldPaths","newPaths","currentPath","canonicalPathPromises","map","segment","endsWith","siblingContext","getBoundContext","requestCanonicalPath","canonicalPaths","all","siblingPath","forEach","canonicalPath","index","navigation","keys","targetContext","pathMapping","oldPath","newPath","createDraftFromActiveDocument","mParameters","mParam","bRunPreserveChangesFlow","overwriteChange","draftDataContext","draftAdminData","requestObject","removeUnboundTransitionMessages","sInfo","InProcessByUserDescription","InProcessByUser","sEntitySet","getViewData","entitySet","sLockedByUserMsg","CreatedByUserDescription","CreatedByUser","sUnsavedChangesMsg","showEditConfirmationMessageBox","oDraftContext","oResponse","status","removeBoundTransitionMessages","siblingInfo","waitForContextRequested","canceled","_oSideEffects$trigger","sEditActionName","oSideEffects","triggerActions","requestSideEffectsForODataAction","activateDocument","messageHandler","bExecute","fnBeforeActivateDocument","oActiveDocumentContext","sBatchGroup","oPreparePromise","oActivatePromise","values","err","data","removeTransitionMessages","fnAfterActivateDocument","localI18nRef","getLibraryResourceBundle","reject","oDialog","title","state","content","text","beginButton","type","press","close","endButton","afterClose","destroy","addStyleClass","open","deleteDraft","sDiscardAction","bIsActiveEntity","IsActiveEntity","hasPendingChanges","resetChanges","delete","processDataLossOrDraftDiscardConfirmation","silentlyKeepDraftOnForwardNavigation","NavigationType"],"sources":["draft-dbg.js"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"draft.js","names":["sap","ui","define","Log","CommonUtils","messageHandling","ResourceModelHelper","Button","Dialog","MessageBox","Text","Core","operationsHelper","draftDataLossPopup","getResourceModel","draftOperations","EDIT","ACTIVATION","DISCARD","PREPARE","getActionName","oContext","sOperation","oModel","getModel","oMetaModel","getMetaModel","sEntitySetPath","getMetaPath","getPath","getObject","createOperation","oOptions","sOperationName","bindContext","getReturnType","hasPrepareAction","async","executeDraftEditAction","bPreserveChanges","oView","getProperty","$$inheritExpandSelect","oOperation","setParameter","sGroupId","resourceModel","sActionName","getText","oEditPromise","execute","undefined","fnOnStrictHandlingFailed","bind","draft","label","model","getBinding","isA","submitBatch","Error","executeDraftValidation","context","appComponent","ignoreETag","getMessagesPath","requestObject","operation","executeDraftPreparationAction","getUpdateGroupId","requestMessages","getSideEffectsService","error","executeDraftActivationAction","oAppComponent","bHasPrepareAction","bIgnoreEtag","e","actionName","oSideEffectsService","oBindingParameters","getODataActionSideEffects","aTargetPaths","pathExpressions","length","requestSideEffects","oError","getMessagePathForPrepare","sContextPath","oReturnType","groupId","bMessages","sMessagesPath","$select","getGroupId","then","catch","Promise","resolve","executeDraftDiscardAction","bEnableStrictHandling","oDiscardOperation","oDiscardPromise","computeSiblingInformation","rootCurrentContext","rightmostCurrentContext","rootContextInfo","startsWith","additionalPath","replace","segments","substring","split","unshift","oldPaths","newPaths","currentPath","paths","rootContextNotRequired","_rootCurrentContext$g","shift","canonicalPathPromises","map","segment","endsWith","siblingContext","getBoundContext","requestCanonicalPath","canonicalPaths","all","rootSiblingPath","push","siblingPath","forEach","canonicalPath","index","navigation","keys","targetContext","$$groupId","pathMapping","oldPath","newPath","createDraftFromActiveDocument","mParameters","mParam","bRunPreserveChangesFlow","overwriteChange","draftDataContext","draftAdminData","removeUnboundTransitionMessages","sInfo","InProcessByUserDescription","InProcessByUser","sEntitySet","getViewData","entitySet","sLockedByUserMsg","CreatedByUserDescription","CreatedByUser","sUnsavedChangesMsg","showEditConfirmationMessageBox","oDraftContext","oResponse","status","removeBoundTransitionMessages","siblingInfo","waitForContextRequested","canceled","_oSideEffects$trigger","sEditActionName","oSideEffects","triggerActions","requestSideEffectsForODataAction","activateDocument","messageHandler","bExecute","fnBeforeActivateDocument","oActiveDocumentContext","sBatchGroup","oPreparePromise","oActivatePromise","values","err","data","removeTransitionMessages","fnAfterActivateDocument","localI18nRef","getLibraryResourceBundle","reject","oDialog","title","state","content","text","beginButton","type","press","close","endButton","afterClose","destroy","addStyleClass","open","deleteDraft","sDiscardAction","bIsActiveEntity","IsActiveEntity","hasPendingChanges","resetChanges","delete","processDataLossOrDraftDiscardConfirmation","silentlyKeepDraftOnForwardNavigation","NavigationType"],"sources":["draft-dbg.js"],"mappings":"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"}
|