@sapui5/sap.fe.core 1.134.0 → 1.136.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.js +6 -62
- package/src/sap/fe/core/ActionRuntime.ts +14 -65
- package/src/sap/fe/core/AppComponent.js +10 -2
- package/src/sap/fe/core/AppComponent.ts +6 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -7
- package/src/sap/fe/core/AppStateHandler.ts +7 -5
- package/src/sap/fe/core/BaseController.js +1 -1
- package/src/sap/fe/core/CommonUtils.js +8 -4
- package/src/sap/fe/core/CommonUtils.ts +19 -4
- package/src/sap/fe/core/ExtensionAPI.js +7 -5
- package/src/sap/fe/core/ExtensionAPI.ts +5 -3
- package/src/sap/fe/core/IRowBindingInterface.js +1 -1
- package/src/sap/fe/core/InsightsFormattersExtension.js +1 -1
- package/src/sap/fe/core/PageController.js +36 -6
- package/src/sap/fe/core/PageController.ts +30 -0
- package/src/sap/fe/core/ResourceModel.js +1 -1
- package/src/sap/fe/core/ReuseComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateModel.js +1 -1
- package/src/sap/fe/core/UIProvider.js +2 -2
- package/src/sap/fe/core/UIProvider.ts +3 -32
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +34 -16
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +39 -18
- package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +1 -1
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockFormatter.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +1 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +7 -7
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +9 -9
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +5 -3
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +3 -1
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +15 -15
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +19 -19
- package/src/sap/fe/core/controllerextensions/ContextSharing.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -93
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +89 -108
- package/src/sap/fe/core/controllerextensions/Feedback.js +1 -1
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +355 -0
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +387 -0
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +36 -11
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +36 -10
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +36 -6
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +41 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +5 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +3 -0
- package/src/sap/fe/core/controllerextensions/Paginator.js +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +1 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +1 -1
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -9
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -4
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.js +13 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +13 -6
- package/src/sap/fe/core/controllerextensions/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +14 -11
- package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +20 -14
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +4 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +2 -10
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +12 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +12 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +111 -89
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +140 -105
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +137 -79
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +133 -120
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +26 -17
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +32 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +103 -23
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +144 -53
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +29 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +39 -15
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +24 -22
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +28 -26
- package/src/sap/fe/core/controllerextensions/editFlow/operations/actionHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +6 -572
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +25 -873
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +98 -56
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +102 -80
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +5 -3
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +7 -4
- package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +1 -1
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +1 -1
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
- package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +1 -1
- package/src/sap/fe/core/controls/Any.js +1 -1
- package/src/sap/fe/core/controls/AnyElement.js +1 -1
- package/src/sap/fe/core/controls/CommandExecution.js +1 -1
- package/src/sap/fe/core/controls/ComponentLoader.js +1 -1
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +8 -1
- package/src/sap/fe/core/controls/DataWatcher.js +4 -3
- package/src/sap/fe/core/controls/DataWatcher.tsx +4 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +10 -4
- package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +13 -2
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +1 -1
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +68 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +52 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.tsx +128 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.js +53 -0
- package/src/sap/fe/core/controls/inlineEditFlow/DraftExistsDialog.tsx +39 -0
- package/src/sap/fe/core/converters/ConverterContext.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +3 -2
- package/src/sap/fe/core/converters/ManifestSettings.ts +42 -20
- package/src/sap/fe/core/converters/ManifestWrapper.js +8 -2
- package/src/sap/fe/core/converters/ManifestWrapper.ts +8 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/annotations/DataField.js +2 -2
- package/src/sap/fe/core/converters/annotations/DataField.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +55 -6
- package/src/sap/fe/core/converters/controls/Common/Action.ts +59 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.js +45 -6
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +60 -9
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Form.js +21 -5
- package/src/sap/fe/core/converters/controls/Common/Form.ts +25 -5
- package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -1686
- package/src/sap/fe/core/converters/controls/Common/Table.ts +254 -2513
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +1701 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +2377 -0
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +64 -15
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +76 -14
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -36
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +8 -46
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.js +106 -0
- package/src/sap/fe/core/converters/controls/ListReport/FilterField.ts +129 -0
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +10 -5
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +8 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +5 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +11 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +7 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +1 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +30 -8
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +40 -16
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +5 -1
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +184 -0
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +240 -0
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
- package/src/sap/fe/core/designtime/messagebundle.properties +11 -0
- package/src/sap/fe/core/designtime/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_bg.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_cy.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ja.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_CN.properties +7 -0
- package/src/sap/fe/core/designtime/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/StandardFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +27 -12
- package/src/sap/fe/core/formatters/ValueFormatter.ts +25 -11
- package/src/sap/fe/core/fpm/Component.js +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AdaptiveCardExpressionCompiler.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +25 -4
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +28 -2
- package/src/sap/fe/core/helpers/BindingHelper.js +4 -3
- package/src/sap/fe/core/helpers/BindingHelper.ts +2 -1
- package/src/sap/fe/core/helpers/BindingToolkitEvaluator.js +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +6 -12
- package/src/sap/fe/core/helpers/DeleteHelper.ts +4 -9
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -1
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +9 -3
- package/src/sap/fe/core/helpers/FPMHelper.ts +13 -1
- package/src/sap/fe/core/helpers/HTTP503Handler.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +1 -1
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/LoaderUtils.js +1 -1
- package/src/sap/fe/core/helpers/ManifestHelper.js +1 -1
- package/src/sap/fe/core/helpers/MessageStrip.js +1 -1
- package/src/sap/fe/core/helpers/MetaModelFunction.js +1 -1
- package/src/sap/fe/core/helpers/MetaPath.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +15 -5
- package/src/sap/fe/core/helpers/ModelHelper.ts +15 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +39 -40
- package/src/sap/fe/core/helpers/PasteHelper.ts +49 -51
- package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
- package/src/sap/fe/core/helpers/RecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/ResourceModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
- package/src/sap/fe/core/helpers/SizeHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +1 -1
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +1 -1
- package/src/sap/fe/core/helpers/TypeGuards.js +1 -1
- package/src/sap/fe/core/helpers/WebSocket.js +11 -2
- package/src/sap/fe/core/helpers/WebSocket.ts +8 -0
- package/src/sap/fe/core/library.js +16 -4
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +1 -0
- package/src/sap/fe/core/manifestMerger/AddNewPage.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +41 -2
- package/src/sap/fe/core/messagebundle_ar.properties +25 -4
- package/src/sap/fe/core/messagebundle_bg.properties +25 -4
- package/src/sap/fe/core/messagebundle_ca.properties +24 -3
- package/src/sap/fe/core/messagebundle_cnr.properties +25 -4
- package/src/sap/fe/core/messagebundle_cs.properties +23 -2
- package/src/sap/fe/core/messagebundle_cy.properties +24 -3
- package/src/sap/fe/core/messagebundle_da.properties +25 -4
- package/src/sap/fe/core/messagebundle_de.properties +28 -7
- package/src/sap/fe/core/messagebundle_el.properties +23 -2
- package/src/sap/fe/core/messagebundle_en.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_GB.properties +25 -4
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -5
- package/src/sap/fe/core/messagebundle_es.properties +23 -2
- package/src/sap/fe/core/messagebundle_es_MX.properties +23 -2
- package/src/sap/fe/core/messagebundle_et.properties +23 -2
- package/src/sap/fe/core/messagebundle_fi.properties +23 -2
- package/src/sap/fe/core/messagebundle_fr.properties +26 -5
- package/src/sap/fe/core/messagebundle_fr_CA.properties +23 -2
- package/src/sap/fe/core/messagebundle_hi.properties +24 -3
- package/src/sap/fe/core/messagebundle_hr.properties +27 -6
- package/src/sap/fe/core/messagebundle_hu.properties +23 -2
- package/src/sap/fe/core/messagebundle_id.properties +23 -2
- package/src/sap/fe/core/messagebundle_it.properties +25 -4
- package/src/sap/fe/core/messagebundle_iw.properties +24 -3
- package/src/sap/fe/core/messagebundle_ja.properties +24 -3
- package/src/sap/fe/core/messagebundle_kk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ko.properties +25 -4
- package/src/sap/fe/core/messagebundle_lt.properties +23 -2
- package/src/sap/fe/core/messagebundle_lv.properties +25 -4
- package/src/sap/fe/core/messagebundle_mk.properties +23 -2
- package/src/sap/fe/core/messagebundle_ms.properties +24 -3
- package/src/sap/fe/core/messagebundle_nl.properties +23 -2
- package/src/sap/fe/core/messagebundle_no.properties +23 -2
- package/src/sap/fe/core/messagebundle_pl.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt.properties +25 -4
- package/src/sap/fe/core/messagebundle_pt_PT.properties +24 -3
- package/src/sap/fe/core/messagebundle_ro.properties +25 -4
- package/src/sap/fe/core/messagebundle_ru.properties +24 -3
- package/src/sap/fe/core/messagebundle_sh.properties +25 -4
- package/src/sap/fe/core/messagebundle_sk.properties +24 -3
- package/src/sap/fe/core/messagebundle_sl.properties +28 -7
- package/src/sap/fe/core/messagebundle_sr.properties +25 -4
- package/src/sap/fe/core/messagebundle_sv.properties +23 -2
- package/src/sap/fe/core/messagebundle_th.properties +25 -4
- package/src/sap/fe/core/messagebundle_tr.properties +23 -2
- package/src/sap/fe/core/messagebundle_uk.properties +25 -4
- package/src/sap/fe/core/messagebundle_vi.properties +25 -4
- package/src/sap/fe/core/messagebundle_zh_CN.properties +26 -5
- package/src/sap/fe/core/messagebundle_zh_TW.properties +24 -3
- package/src/sap/fe/core/rootView/Fcl.controller.js +11 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +16 -7
- package/src/sap/fe/core/rootView/NavContainer.controller.js +3 -3
- package/src/sap/fe/core/rootView/NavContainer.controller.ts +1 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +87 -35
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +113 -57
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +29 -13
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +27 -13
- package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ContextSharingServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +8 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +6 -0
- package/src/sap/fe/core/services/InlineEditServiceFactory.js +11 -5
- package/src/sap/fe/core/services/InlineEditServiceFactory.ts +9 -3
- package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
- package/src/sap/fe/core/services/RoutingServiceFactory.js +14 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +11 -5
- package/src/sap/fe/core/services/ShellServicesFactory.js +5 -4
- package/src/sap/fe/core/services/ShellServicesFactory.ts +5 -3
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +28 -4
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +32 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/ActionHelper.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +1 -1
- package/src/sap/fe/core/templating/CriticalityFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataFieldFormatters.js +1 -1
- package/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +199 -59
- package/src/sap/fe/core/templating/EntitySetHelper.ts +221 -61
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/PropertyFormatters.js +1 -1
- package/src/sap/fe/core/templating/PropertyHelper.js +1 -1
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +8 -10
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +11 -10
- package/src/sap/fe/core/templating/UIFormatters.js +5 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +3 -0
- package/src/sap/fe/core/type/Date.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +1 -1
- package/src/sap/fe/core/type/InputMask.js +1 -1
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +0 -288
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.tsx +0 -208
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +0 -404
- package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +0 -502
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.js +0 -100
- package/src/sap/fe/core/designtime/TextArrangementChangeAction.ts +0 -134
- package/src/sap/fe/core/operationsHelper.js +0 -192
- package/src/sap/fe/core/operationsHelper.ts +0 -277
package/package.json
CHANGED
package/src/sap/fe/core/.library
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
-
* (c) Copyright 2009-
|
|
3
|
+
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/
|
|
5
|
+
sap.ui.define(["sap/base/util/merge", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/ui/core/Messaging", "sap/ui/core/message/Message", "sap/ui/core/message/MessageType", "./controls/AnyElement", "./converters/ConverterContext", "./converters/objectPage/HeaderAndFooterAction"], function (merge, BindingToolkit, CommonUtils, ModelHelper, TypeGuards, Messaging, Message, MessageType, AnyElement, ConverterContext, HeaderAndFooterAction) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var getHiddenExpression = HeaderAndFooterAction.getHiddenExpression;
|
|
9
9
|
var getEditButtonEnabled = HeaderAndFooterAction.getEditButtonEnabled;
|
|
10
|
-
var convertTypes = MetaModelConverter.convertTypes;
|
|
11
|
-
var getIsActionCriticalExpression = ActionHelper.getIsActionCriticalExpression;
|
|
12
10
|
var isEntitySet = TypeGuards.isEntitySet;
|
|
13
11
|
var transformRecursively = BindingToolkit.transformRecursively;
|
|
14
|
-
var isConstant = BindingToolkit.isConstant;
|
|
15
12
|
var equal = BindingToolkit.equal;
|
|
16
13
|
var constant = BindingToolkit.constant;
|
|
17
14
|
var compileExpression = BindingToolkit.compileExpression;
|
|
18
|
-
var compileConstant = BindingToolkit.compileConstant;
|
|
19
15
|
const ActionRuntime = {
|
|
20
16
|
/**
|
|
21
17
|
* Adds error messages for an action parameter field to the message manager.
|
|
@@ -43,7 +39,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
|
|
|
43
39
|
*/
|
|
44
40
|
validateProperties: async function (actionParameterInfos, resourceModel) {
|
|
45
41
|
await Promise.allSettled(actionParameterInfos.map(actionParameterInfo => actionParameterInfo.validationPromise));
|
|
46
|
-
const requiredParameterInfos = actionParameterInfos.filter(parameterInfo => parameterInfo.field.getRequired());
|
|
42
|
+
const requiredParameterInfos = actionParameterInfos.filter(parameterInfo => parameterInfo.field.getRequired && parameterInfo.field.getRequired());
|
|
47
43
|
const allMessages = Messaging.getMessageModel().getData();
|
|
48
44
|
const emptyRequiredFields = requiredParameterInfos.filter(requiredParameterInfo => {
|
|
49
45
|
const fieldId = requiredParameterInfo.field.getId();
|
|
@@ -147,7 +143,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
|
|
|
147
143
|
if (oTable && oTable.isA("sap.ui.mdc.Table")) {
|
|
148
144
|
const oRowBinding = oTable.getRowBinding();
|
|
149
145
|
if (oRowBinding == oListBinding) {
|
|
150
|
-
|
|
146
|
+
const tableAPI = oTable.getParent();
|
|
147
|
+
ActionRuntime.setActionEnablement(oTable.getBindingContext("internal"), JSON.parse(tableAPI.tableDefinition.operationAvailableMap), oTable.getSelectedContexts(), "table");
|
|
151
148
|
}
|
|
152
149
|
}
|
|
153
150
|
}
|
|
@@ -261,61 +258,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
|
|
|
261
258
|
}
|
|
262
259
|
}
|
|
263
260
|
return aRequestPromises;
|
|
264
|
-
},
|
|
265
|
-
/**
|
|
266
|
-
* Check if action is critical.
|
|
267
|
-
* @param metaModel MetaModel
|
|
268
|
-
* @param path Path to the action
|
|
269
|
-
* @param contexts Contexts in case of bound actions.
|
|
270
|
-
* @returns Boolean indicating action is critical
|
|
271
|
-
*/
|
|
272
|
-
getIsActionCritical: async function (metaModel, path) {
|
|
273
|
-
let contexts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
274
|
-
// default is true.
|
|
275
|
-
let isActionCriticalValue = true;
|
|
276
|
-
const convertedTypes = convertTypes(metaModel);
|
|
277
|
-
const actionTargetResolution = convertedTypes.resolvePath(path);
|
|
278
|
-
const actionTarget = actionTargetResolution.target;
|
|
279
|
-
if (!actionTarget) {
|
|
280
|
-
return isActionCriticalValue;
|
|
281
|
-
}
|
|
282
|
-
const isActionCriticalBindingExp = getIsActionCriticalExpression(actionTarget, convertedTypes);
|
|
283
|
-
if (isConstant(isActionCriticalBindingExp)) {
|
|
284
|
-
// Constant expression resolves to "true" or "false". But, we need boolean.
|
|
285
|
-
isActionCriticalValue = compileConstant(isActionCriticalBindingExp, false, undefined, true);
|
|
286
|
-
} else if (contexts.length > 0) {
|
|
287
|
-
// We evaluate the value of the expression via a UI5 managed object instance.
|
|
288
|
-
isActionCriticalValue = new Promise(resolve => {
|
|
289
|
-
try {
|
|
290
|
-
// Creating Binding to resolve
|
|
291
|
-
const anyObject = new Any({
|
|
292
|
-
anyBoolean: compileExpression(isActionCriticalBindingExp)
|
|
293
|
-
});
|
|
294
|
-
anyObject.setModel(contexts[0].getModel());
|
|
295
|
-
|
|
296
|
-
// Attaching change events
|
|
297
|
-
const booleanBinding = anyObject.getBinding("anyBoolean");
|
|
298
|
-
const fnChange = function () {
|
|
299
|
-
const valueExt = booleanBinding.getExternalValue();
|
|
300
|
-
anyObject.destroy();
|
|
301
|
-
resolve(valueExt);
|
|
302
|
-
};
|
|
303
|
-
booleanBinding.attachEventOnce("change", fnChange);
|
|
304
|
-
|
|
305
|
-
// setting binding context to trigger the binding resolution
|
|
306
|
-
anyObject.setBindingContext(contexts[0]);
|
|
307
|
-
} catch (err) {
|
|
308
|
-
// error while creating or resolving the binding
|
|
309
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
310
|
-
Log.error(`FE : Actions : Error while resolving IsActionCritical for ${path} : ${message}`);
|
|
311
|
-
// On the safe side, we shall return action is critical if value couldn't be determined.
|
|
312
|
-
resolve(true);
|
|
313
|
-
}
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
return isActionCriticalValue;
|
|
317
261
|
}
|
|
318
262
|
};
|
|
319
263
|
return ActionRuntime;
|
|
320
264
|
}, false);
|
|
321
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInByb2Nlc3NvciIsImdldE1vZGVsIiwidW5kZWZpbmVkIiwicGVyc2lzdGVudCIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZmlsdGVyIiwicGFyYW1ldGVySW5mbyIsImdldFJlcXVpcmVkIiwiYWxsTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkSWQiLCJnZXRJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwibGVuZ3RoIiwidmFsdWUiLCJmaWVsZFZhbHVlIiwiZ2V0VmFsdWUiLCJpc0ZpZWxkQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRUZXh0IiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJzdEludmFsaWRQYXJhbWV0ZXIiLCJmaW5kIiwiZ2V0VmlzaWJsZSIsImhhc0Vycm9yIiwiZ2V0VmFsdWVTdGF0ZSIsInNldFZpc2libGUiLCJmb2N1cyIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJzQ29udHJvbCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiYVByb21pc2VzIiwic0FjdGlvbiIsImFSZXF1ZXN0UHJvbWlzZXMiLCJzZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsImVsZW1lbnQiLCJvU2VsZWN0ZWRDb250ZXh0Iiwib0NvbnRleHREYXRhIiwiZ2V0T2JqZWN0IiwiX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZSIsImJFbmFibGVkIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInB1c2giLCJDb21tb25VdGlscyIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsImFsbCIsInNldEFjdGlvbkVuYWJsZW1lbnRBZnRlclBhdGNoIiwib1ZpZXciLCJvTGlzdEJpbmRpbmciLCJvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhIiwib0NvbnRyb2xzIiwiY29udHJvbHMiLCJzS2V5Iiwib1RhYmxlIiwiYnlJZCIsImlzQSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsImdldEJpbmRpbmdDb250ZXh0IiwiSlNPTiIsInBhcnNlIiwiZGF0YSIsImN1c3RvbURhdGEiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50IiwiaVZpZXdMZXZlbCIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwiaXNFZGl0YWJsZSIsImdldElzRWRpdGFibGUiLCJvQ29udGV4dCIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJzTWV0YVBhdGgiLCJNb2RlbEhlbHBlciIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsInNFbnRpdHlTZXQiLCJnZXRSb290RW50aXR5U2V0UGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YU1vZGVsIiwiZ2V0Q29udGV4dCIsImdldFBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsImdldERpYWdub3N0aWNzIiwibWVyZ2UiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsInVwZGF0ZUhpZGRlbiIsImJVcGRhdGVIaWRkZW4iLCJpc0VudGl0eVNldCIsImFubm90YXRpb25zIiwiVUkiLCJVcGRhdGVIaWRkZW4iLCJ2YWx1ZU9mIiwiaXNVcGRhdGVIaWRkZW4iLCJzRWRpdEVuYWJsZUJpbmRpbmciLCJnZXRFZGl0QnV0dG9uRW5hYmxlZCIsImRyYWZ0Um9vdFBhdGgiLCJnZXREcmFmdFJvb3RQYXRoIiwic1N0aWNreVJvb3RQYXRoIiwiZ2V0U3RpY2t5Um9vdFBhdGgiLCJzUGF0aCIsIm9Sb290Q29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwic0hpZGRlbkV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbiIsInVwZGF0ZUVkaXRNb2RlbENvbnRleHQiLCJzQmluZGluZ0V4cHJlc3Npb24iLCJvSGlkZGVuRWxlbWVudCIsIkFueUVsZW1lbnQiLCJhbnlUZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJhZGREZXBlbmRlbnQiLCIkJGdyb3VwSWQiLCJhdHRhY2hDaGFuZ2UiLCJvRXZlbnQiLCJvTmV3VmFsdWUiLCJnZXRTb3VyY2UiLCJnZXRFeHRlcm5hbFZhbHVlIiwic0VuYWJsZW1lbnRGaWVsZE5hbWUiLCJnZXRQcm9wZXJ0eSIsImJBY3Rpb25FbmFibGVkIiwiYkVuYWJsZWRGb3JDb250ZXh0TWVudSIsImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51Iiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJzZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJyZXF1ZXN0UHJvcGVydHkiLCJnZXRJc0FjdGlvbkNyaXRpY2FsIiwibWV0YU1vZGVsIiwiY29udGV4dHMiLCJpc0FjdGlvbkNyaXRpY2FsVmFsdWUiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImFjdGlvblRhcmdldFJlc29sdXRpb24iLCJyZXNvbHZlUGF0aCIsImFjdGlvblRhcmdldCIsImlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwIiwiZ2V0SXNBY3Rpb25Dcml0aWNhbEV4cHJlc3Npb24iLCJpc0NvbnN0YW50IiwiY29tcGlsZUNvbnN0YW50IiwicmVzb2x2ZSIsImFueU9iamVjdCIsIkFueSIsImFueUJvb2xlYW4iLCJzZXRNb2RlbCIsImJvb2xlYW5CaW5kaW5nIiwiZm5DaGFuZ2UiLCJ2YWx1ZUV4dCIsImRlc3Ryb3kiLCJhdHRhY2hFdmVudE9uY2UiLCJlcnIiLCJTdHJpbmciLCJMb2ciLCJlcnJvciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uUnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiBhcyBFZG1BY3Rpb24sIEFjdGlvblBhcmFtZXRlciBhcyBFZG1BY3Rpb25QYXJhbWV0ZXIsIFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgdHlwZSB7IFBhdGhJbk1vZGVsRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgY29tcGlsZUNvbnN0YW50LCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCBpc0NvbnN0YW50LCB0cmFuc2Zvcm1SZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgX1JlcXVlc3RlZFByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQW55IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9BbnlcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0VudGl0eVNldCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGdldElzQWN0aW9uQ3JpdGljYWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IE1lc3NhZ2luZyBmcm9tIFwic2FwL3VpL2NvcmUvTWVzc2FnaW5nXCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgTXVsdGlWYWx1ZUZpZWxkIGZyb20gXCJzYXAvdWkvbWRjL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZEl0ZW0gZnJvbSBcInNhcC91aS9tZGMvZmllbGQvTXVsdGlWYWx1ZUZpZWxkSXRlbVwiO1xuaW1wb3J0IHR5cGUgUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvUHJvcGVydHlCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBBbnlFbGVtZW50IGZyb20gXCIuL2NvbnRyb2xzL0FueUVsZW1lbnRcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcIi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldEVkaXRCdXR0b25FbmFibGVkLCBnZXRIaWRkZW5FeHByZXNzaW9uIH0gZnJvbSBcIi4vY29udmVydGVycy9vYmplY3RQYWdlL0hlYWRlckFuZEZvb3RlckFjdGlvblwiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25QYXJhbWV0ZXJJbmZvID0ge1xuXHRwYXJhbWV0ZXI/OiBFZG1BY3Rpb25QYXJhbWV0ZXI7XG5cdGZpZWxkOiBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZDtcblx0aXNNdWx0aVZhbHVlOiBib29sZWFuO1xuXHR2YWx1ZT86IHN0cmluZyB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXTtcblx0dmFsaWRhdGlvblByb21pc2U/OiBQcm9taXNlPHN0cmluZyB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT47XG5cdGhhc0Vycm9yOiBib29sZWFuO1xuXHRwcm9wZXJ0eVBhdGg/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBBY3Rpb25SdW50aW1lID0ge1xuXHQvKipcblx0ICogQWRkcyBlcnJvciBtZXNzYWdlcyBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBmaWVsZCB0byB0aGUgbWVzc2FnZSBtYW5hZ2VyLlxuXHQgKiBAcGFyYW0gbWVzc2FnZVBhcmFtZXRlcnMgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlciBhbmQgbWVzc2FnZXMgcmVmZXJyaW5nIHRvIHRoaXMgcGFyYW1ldGVyXG5cdCAqL1xuXHRfYWRkTWVzc2FnZUZvckFjdGlvblBhcmFtZXRlcjogZnVuY3Rpb24gKG1lc3NhZ2VQYXJhbWV0ZXJzOiB7IGFjdGlvblBhcmFtZXRlckluZm86IEFjdGlvblBhcmFtZXRlckluZm87IG1lc3NhZ2U6IHN0cmluZyB9W10pOiB2b2lkIHtcblx0XHRNZXNzYWdpbmcuYWRkTWVzc2FnZXMoXG5cdFx0XHRtZXNzYWdlUGFyYW1ldGVycy5tYXAoKG1lc3NhZ2VQYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgYmluZGluZyA9IG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRCaW5kaW5nKFxuXHRcdFx0XHRcdG1lc3NhZ2VQYXJhbWV0ZXIuYWN0aW9uUGFyYW1ldGVySW5mby5pc011bHRpVmFsdWUgPyBcIml0ZW1zXCIgOiBcInZhbHVlXCJcblx0XHRcdFx0KTtcblx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlUGFyYW1ldGVyLm1lc3NhZ2UsXG5cdFx0XHRcdFx0dHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0XHRcdFx0cHJvY2Vzc29yOiBiaW5kaW5nPy5nZXRNb2RlbCgpID8/IHVuZGVmaW5lZCwgLy8gZ2V0TW9kZWwoKTogbnVsbCB8IE1vZGVsIH5+PiBwcm9jZXNzb3I/OiBNZXNzYWdlUHJvY2Vzc29yXG5cdFx0XHRcdFx0cGVyc2lzdGVudDogdHJ1ZSxcblx0XHRcdFx0XHR0YXJnZXQ6IGJpbmRpbmc/LmdldFJlc29sdmVkUGF0aCgpXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGFjdGlvbiBwYXJhbWV0ZXJzIGNvbnRhaW4gZGF0YSBhbmQgY2hlY2tzIGZvciBhbGwgYWN0aW9uIHBhcmFtZXRlcnMgaWYgdGhlXG5cdCAqIGNvbnRhaW5lZCBkYXRhIGlzIHZhbGlkLlxuXHQgKiBAcGFyYW0gYWN0aW9uUGFyYW1ldGVySW5mb3MgSW5mb3JtYXRpb24gaWRlbnRpZnlpbmcgYW4gYWN0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gcmVzb3VyY2VNb2RlbCBUaGUgbW9kZWwgdG8gbG9hZCB0ZXh0IHJlc291cmNlc1xuXHQgKiBAcmV0dXJucyBUaGUgdmFsaWRhdGlvbiByZXN1bHQgY2FuIGJlIHRydWUgb3IgZmFsc2Vcblx0ICovXG5cdHZhbGlkYXRlUHJvcGVydGllczogYXN5bmMgZnVuY3Rpb24gKGFjdGlvblBhcmFtZXRlckluZm9zOiBBY3Rpb25QYXJhbWV0ZXJJbmZvW10sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG5cdFx0XHRhY3Rpb25QYXJhbWV0ZXJJbmZvcy5tYXAoXG5cdFx0XHRcdChhY3Rpb25QYXJhbWV0ZXJJbmZvKTogUHJvbWlzZTxzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10+IHwgdW5kZWZpbmVkID0+IGFjdGlvblBhcmFtZXRlckluZm8udmFsaWRhdGlvblByb21pc2Vcblx0XHRcdClcblx0XHQpO1xuXG5cdFx0Y29uc3QgcmVxdWlyZWRQYXJhbWV0ZXJJbmZvcyA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbHRlcigocGFyYW1ldGVySW5mbykgPT4gcGFyYW1ldGVySW5mby5maWVsZC5nZXRSZXF1aXJlZCgpKTtcblx0XHRjb25zdCBhbGxNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgZW1wdHlSZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MuZmlsdGVyKChyZXF1aXJlZFBhcmFtZXRlckluZm8pID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkSWQgPSByZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQuZ2V0SWQoKTtcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChjb250cm9sSWQ6IHN0cmluZykgPT4gY29udHJvbElkLmluY2x1ZGVzKGZpZWxkSWQpKVxuXHRcdFx0KTtcblx0XHRcdGlmIChyZWxldmFudE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChyZXF1aXJlZFBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiByZXF1aXJlZFBhcmFtZXRlckluZm8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCAhcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLnZhbHVlLmxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkVmFsdWUgPSAocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRjb25zdCBpc0ZpZWxkQXJyYXkgPSBBcnJheS5pc0FycmF5KChyZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCkpO1xuXHRcdFx0XHRpZiAoaXNGaWVsZEFycmF5KSB7XG5cdFx0XHRcdFx0Ly8gb25seSBmaXJzdCB2YWx1ZSBjaGVjayBpcyBlbm91Z2ggYXMgdGhlIGZpZWxkIHZhbHVlIGNvbWVzIG9uIFswXSByZXN0IG9mIHRoZSBhcnJheSBpbmNsdWRlcyBjdXJyZW5jeSBhbmQgY3VycmVuY3kgY29kZVxuXHRcdFx0XHRcdC8vIGJvdGggb2Ygd2hpY2ggY2FuIG9yIGNhbm5vdCBiZSBudWxsLCBzbyB3ZSBzaGFsbCBjaGVjayBvbmx5IHRoZSBmaWVsZCB2YWx1ZVxuXHRcdFx0XHRcdHJldHVybiBmaWVsZFZhbHVlWzBdID09PSBudWxsIHx8IGZpZWxkVmFsdWVbMF0gPT09IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZFZhbHVlID09PSBudWxsIHx8IGZpZWxkVmFsdWUgPT09IFwiXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogTWVzc2FnZSBmb3IgbWlzc2luZyBtYW5kYXRvcnkgdmFsdWUgb2YgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgKi9cblx0XHRpZiAoZW1wdHlSZXF1aXJlZEZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoXG5cdFx0XHRcdGVtcHR5UmVxdWlyZWRGaWVsZHMubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiAoe1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX01JU1NJTkdfTUFOREFUT1JZX01TR1wiLCBbXG5cdFx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRQYXJlbnQoKT8uZ2V0QWdncmVnYXRpb24oXCJsYWJlbFwiKSBhcyBMYWJlbCkuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0fSkpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvKiBDaGVjayB2YWx1ZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVycyAqL1xuXHRcdGNvbnN0IGZpcnN0SW52YWxpZFBhcmFtZXRlciA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoXG5cdFx0XHQocGFyYW1ldGVySW5mbykgPT5cblx0XHRcdFx0cGFyYW1ldGVySW5mby5maWVsZC5nZXRWaXNpYmxlKCkgJiZcblx0XHRcdFx0KHBhcmFtZXRlckluZm8uaGFzRXJyb3IgfHwgcGFyYW1ldGVySW5mby5maWVsZC5nZXRWYWx1ZVN0YXRlKCkgPT09IFwiRXJyb3JcIiB8fCBlbXB0eVJlcXVpcmVkRmllbGRzLmluY2x1ZGVzKHBhcmFtZXRlckluZm8pKVxuXHRcdCk7XG5cdFx0aWYgKGZpcnN0SW52YWxpZFBhcmFtZXRlcikge1xuXHRcdFx0Zmlyc3RJbnZhbGlkUGFyYW1ldGVyLmZpZWxkLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRmaXJzdEludmFsaWRQYXJhbWV0ZXIuZmllbGQuZm9jdXMoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBhY3Rpb24gZW5hYmxlbWVudC5cblx0ICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCBtb2RlbFxuXHQgKiBAcGFyYW0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCBNYXAgY29udGFpbmluZyB0aGUgb3BlcmF0aW9uIGF2YWlsYWJpbGl0eSBvZiBhY3Rpb25zXG5cdCAqIEBwYXJhbSBhU2VsZWN0ZWRDb250ZXh0cyBBcnJheSBjb250YWluaW5nIHNlbGVjdGVkIGNvbnRleHRzIG9mIHRoZSBjaGFydFxuXHQgKiBAcGFyYW0gc0NvbnRyb2wgQ29udHJvbCBuYW1lXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBlbmFibGVtZW50IHByb21pc2VzXG5cdCAqL1xuXHRzZXRBY3Rpb25FbmFibGVtZW50OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRcdGFTZWxlY3RlZENvbnRleHRzOiBDb250ZXh0W10sXG5cdFx0c0NvbnRyb2w6IHN0cmluZyxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZFtdPiB7XG5cdFx0Y29uc3QgYVByb21pc2VzID0gW107XG5cdFx0Zm9yIChjb25zdCBzQWN0aW9uIGluIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHRcdGxldCBhUmVxdWVzdFByb21pc2VzOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXSA9IFtdO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNBY3Rpb24sIGZhbHNlKTtcblx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJ0YWJsZVwiKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hQXBwbGljYWJsZWAsIFtdKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCwgW10pO1xuXHRcdFx0XHRpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRGb3JDb250ZXh0TWVudWAsIGZhbHNlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl07XG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYVNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGVsZW1lbnQ7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRpZiAoc0NvbnRyb2wgPT09IFwiY2hhcnRcIikge1xuXHRcdFx0XHRcdFx0aWYgKChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbYCMke3NBY3Rpb259YF0pIHx8IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHNQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0Ly9sb29rIGZvciBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBpZiBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgbm90IG51bGxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNBY3Rpb24sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMgPSB0aGlzLl9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGUoXG5cdFx0XHRcdFx0XHRcdG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0c0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJ0YWJsZVwiKSB7XG5cdFx0XHRcdGlmICghYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259YCwge1xuXHRcdFx0XHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0YUFwcGxpY2FibGU6IFtdLFxuXHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IFtdXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YVByb21pc2VzLnB1c2goQ29tbW9uVXRpbHMuc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgW10sIGZvckNvbnRleHRNZW51KSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICYmIHR5cGVvZiBzUHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvLyBXaGVuIGFsbCBwcm9wZXJ0eSB2YWx1ZXMgaGF2ZSBiZWVuIHJldHJpZXZlZCwgc2V0XG5cdFx0XHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyBUaGUgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24gaW4gaW50ZXJuYWwgbW9kZWwgY29udGV4dC5cblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFSZXF1ZXN0UHJvbWlzZXMsIGZvckNvbnRleHRNZW51KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG5cdH0sXG5cdHNldEFjdGlvbkVuYWJsZW1lbnRBZnRlclBhdGNoOiBmdW5jdGlvbiAoXG5cdFx0b1ZpZXc6IFZpZXcsXG5cdFx0b0xpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHRcblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0Y29uc3Qgb0NvbnRyb2xzID0gKG9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGE/LmNvbnRyb2xzIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB7IGNvbnRyb2xJZD86IHN0cmluZyB9Pjtcblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb0NvbnRyb2xzKSB7XG5cdFx0XHRpZiAob0NvbnRyb2xzW3NLZXldICYmIG9Db250cm9sc1tzS2V5XS5jb250cm9sSWQpIHtcblx0XHRcdFx0Y29uc3Qgb1RhYmxlID0gb1ZpZXcuYnlJZChzS2V5KTtcblx0XHRcdFx0aWYgKG9UYWJsZSAmJiBvVGFibGUuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRjb25zdCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0aWYgKG9Sb3dCaW5kaW5nID09IG9MaXN0QmluZGluZykge1xuXHRcdFx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KFxuXHRcdFx0XHRcdFx0XHRvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0SlNPTi5wYXJzZShvVGFibGUuZGF0YShcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKS5jdXN0b21EYXRhKSxcblx0XHRcdFx0XHRcdFx0b1RhYmxlLmdldFNlbGVjdGVkQ29udGV4dHMoKSBhcyBDb250ZXh0W10sXG5cdFx0XHRcdFx0XHRcdFwidGFibGVcIlxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KG9WaWV3OiBGRVZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCBpVmlld0xldmVsID0gKG9WaWV3LmdldFZpZXdEYXRhKCkgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MpPy52aWV3TGV2ZWwsXG5cdFx0XHRpc0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldyk7XG5cdFx0aWYgKChpVmlld0xldmVsIGFzIG51bWJlcikgPiAxICYmIGlzRWRpdGFibGUgIT09IHRydWUpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0Y29uc3Qgc01ldGFQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWV0YVBhdGhGb3JDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNFbnRpdHlTZXQgPSBNb2RlbEhlbHBlci5nZXRSb290RW50aXR5U2V0UGF0aChzTWV0YVBhdGgpO1xuXHRcdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBvQ29udGV4dFxuXHRcdFx0XHQ/LmdldE1vZGVsKClcblx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdD8uZ2V0Q29udGV4dChvQ29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBDb252ZXJ0ZXJDb250ZXh0Py5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRcdHNFbnRpdHlTZXQsXG5cdFx0XHRcdG1ldGFDb250ZXh0LFxuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCksXG5cdFx0XHRcdG1lcmdlXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGxldCB1cGRhdGVIaWRkZW47XG5cdFx0XHQvL0ZpbmQgdGhlIFVwZGF0ZSBIaWRkZW4gb2YgdGhlIHJvb3QgZW50aXR5IHNldCBhbmQgYmluZCB0aGUgcHJvcGVydHkgdG8gQW55RWxlbWVudCwgYW55IGNoYW5nZXMgaW4gdGhlIHBhdGggb2YgdGhlIHJvb3QgVXBkYXRlSGlkZGVuIHdpbGwgYmUgdXBkYXRlZCB2aWEgdGhlIHByb3BlcnR5LCBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGlzIHVwZGF0ZWQgYmFzZWQgb24gdGhlIHByb3BlcnR5XG5cdFx0XHRjb25zdCBiVXBkYXRlSGlkZGVuID0gaXNFbnRpdHlTZXQoZW50aXR5U2V0KSAmJiBlbnRpdHlTZXQuYW5ub3RhdGlvbnMuVUk/LlVwZGF0ZUhpZGRlbj8udmFsdWVPZigpO1xuXHRcdFx0aWYgKGJVcGRhdGVIaWRkZW4gIT09IHRydWUpIHtcblx0XHRcdFx0dXBkYXRlSGlkZGVuID0gTW9kZWxIZWxwZXIuaXNVcGRhdGVIaWRkZW4oZW50aXR5U2V0LCBlbnRpdHlUeXBlKTtcblx0XHRcdH1cblx0XHRcdC8vRmluZCB0aGUgb3BlcmF0aW9uIGF2YWlsYWJsZSBwcm9wZXJ0eSBvZiB0aGUgcm9vdCBlZGl0IGNvbmZpZ3VyYXRpb24gYW5kIGZldGNoIHRoZSBwcm9wZXJ0eSB1c2luZyBBbnlFbGVtZW50XG5cdFx0XHRjb25zdCBzRWRpdEVuYWJsZUJpbmRpbmcgPSBnZXRFZGl0QnV0dG9uRW5hYmxlZChjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGNvbnN0IGRyYWZ0Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNTdGlja3lSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldFN0aWNreVJvb3RQYXRoKG9Db250ZXh0KTtcblx0XHRcdGNvbnN0IHNQYXRoID0gZHJhZnRSb290UGF0aCB8fCBzU3RpY2t5Um9vdFBhdGg7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKHNQYXRoKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb290Q29udGV4dCA9IG9WaWV3LmdldE1vZGVsKCkuYmluZENvbnRleHQoc1BhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0XHRpZiAodXBkYXRlSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRjb25zdCBzSGlkZGVuRXhwcmVzc2lvbiA9IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKGdldEhpZGRlbkV4cHJlc3Npb24oY29udmVydGVyQ29udGV4dCwgdXBkYXRlSGlkZGVuKSwgZmFsc2UpKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUVkaXRNb2RlbENvbnRleHQoc0hpZGRlbkV4cHJlc3Npb24sIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRWaXNpYmxlXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNFZGl0RW5hYmxlQmluZGluZykge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRWRpdE1vZGVsQ29udGV4dChzRWRpdEVuYWJsZUJpbmRpbmcsIG9WaWV3LCBvUm9vdENvbnRleHQsIFwicm9vdEVkaXRFbmFibGVkXCIsIG9JbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0dXBkYXRlRWRpdE1vZGVsQ29udGV4dDogZnVuY3Rpb24gKFxuXHRcdHNCaW5kaW5nRXhwcmVzc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdG9WaWV3OiBWaWV3LFxuXHRcdG9Sb290Q29udGV4dDogQ29udGV4dCxcblx0XHRzUHJvcGVydHk6IHN0cmluZyxcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ6IEludGVybmFsTW9kZWxDb250ZXh0XG5cdCk6IHZvaWQge1xuXHRcdGlmIChzQmluZGluZ0V4cHJlc3Npb24pIHtcblx0XHRcdGNvbnN0IG9IaWRkZW5FbGVtZW50ID0gbmV3IEFueUVsZW1lbnQoeyBhbnlUZXh0OiBzQmluZGluZ0V4cHJlc3Npb24gfSk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdG9WaWV3LmFkZERlcGVuZGVudChvSGlkZGVuRWxlbWVudCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKTtcblx0XHRcdGNvbnN0IG9Db250ZXh0ID0gb0hpZGRlbkVsZW1lbnRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0Py5iaW5kQ29udGV4dChvUm9vdENvbnRleHQuZ2V0UGF0aCgpLCBvUm9vdENvbnRleHQsIHsgJCRncm91cElkOiBcIiRhdXRvLkhlcm9lc1wiIH0pXG5cdFx0XHRcdD8uZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudC5zZXRCaW5kaW5nQ29udGV4dChvQ29udGV4dCk7XG5cdFx0XHRvSGlkZGVuRWxlbWVudD8uZ2V0QmluZGluZyhcImFueVRleHRcIik/LmF0dGFjaENoYW5nZSgob0V2ZW50OiBFdmVudDx7fSwgUHJvcGVydHlCaW5kaW5nPikgPT4ge1xuXHRcdFx0XHRjb25zdCBvTmV3VmFsdWUgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoc1Byb3BlcnR5LCBvTmV3VmFsdWUpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9LFxuXG5cdF9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGU6IGZ1bmN0aW9uIChcblx0XHRvU2VsZWN0ZWRDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0c0FjdGlvbjogc3RyaW5nLFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdGFSZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8X1JlcXVlc3RlZFByb3BlcnR5PltdLFxuXHRcdGZvckNvbnRleHRNZW51ID0gZmFsc2Vcblx0KTogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10ge1xuXHRcdC8vIFJldHJpZXZlIHByZXZpb3VzbHkgY2hlY2tlZCBjb250ZXh0cyBpbiBjYXNlIG9mICFmb3JDb250ZXh0TWVudVxuXHRcdGNvbnN0IHNFbmFibGVtZW50RmllbGROYW1lID0gZm9yQ29udGV4dE1lbnUgPyBcImJFbmFibGVkRm9yQ29udGV4dE1lbnVcIiA6IFwiYkVuYWJsZWRcIixcblx0XHRcdGFBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYUFwcGxpY2FibGVgKSB8fCBbXSxcblx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbQ29udGV4dCB8IHVuZGVmaW5lZF0gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgKSB8fCBbXTtcblx0XHRsZXQgYkFjdGlvbkVuYWJsZWQ6IGJvb2xlYW4gPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vJHtzRW5hYmxlbWVudEZpZWxkTmFtZX1gKSB8fCBmYWxzZTtcblxuXHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZTogW10sXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBbXVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufWAsIHtcblx0XHRcdFx0Ly8gRG8gbm90IGNoYW5nZSBlbmFibGVkLCBhQXBwbGljYWJsZSBhbmQgYU5vdEFwcGxpY2FibGUgcHJvcGVydHkgaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUgY2FsY3VsYXRpb25cblx0XHRcdFx0Ly8gaW4gY2FzZSBvZiBjb250ZXh0IG1lbnUsIG9ubHkgdGhlIGNsaWNrZWQgY29udGV4dCBnb2VzIGludG8gdGhlIHByb2Nlc3NpbmcgLSBvdGhlciBzZWxlY3RlZCBjb250ZXh0cyBtdXN0IGJlIGtlcHQgaW4gdGhlIG1vZGVsXG5cdFx0XHRcdGJFbmFibGVkOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgKSxcblx0XHRcdFx0YUFwcGxpY2FibGU6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hQXBwbGljYWJsZWApLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZTogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCksXG5cdFx0XHRcdGJFbmFibGVkRm9yQ29udGV4dE1lbnU6IGZhbHNlLFxuXHRcdFx0XHRhQXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGVGb3JDb250ZXh0TWVudTogW11cblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBOb3RlIHRoYXQgbm9uIGR5bmFtaWMgYWN0aW9ucyBhcmUgbm90IHByb2Nlc3NlZCBoZXJlLiBUaGV5IGFyZSBlbmFibGVkIGJlY2F1c2Vcblx0XHQvLyBvbmUgb3IgbW9yZSBhcmUgc2VsZWN0ZWQgYW5kIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgY29uZGl0aW9uIGluIHRoZSB0ZW1wbGF0aW5nXG5cdFx0Ly8gaXMgdGhlbiB1bmRlZmluZWQgYW5kIHRodXMgdGhlIGJ1dHRvbiB0YWtlcyB0aGUgZGVmYXVsdCBlbmFibGluZywgd2hpY2ggaXMgdHJ1ZSFcblx0XHRjb25zdCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoID0gYCR7b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKX0vZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS8ke3NFbmFibGVtZW50RmllbGROYW1lfWA7XG5cblx0XHRpZiAodHlwZW9mIHNQcm9wZXJ0eSA9PT0gXCJvYmplY3RcIiAmJiBzUHJvcGVydHkgIT09IG51bGwgJiYgc1Byb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9Db250ZXh0RGF0YSA9IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRcdGNvbnN0IG9UcmFuc2Zvcm1lZEJpbmRpbmcgPSB0cmFuc2Zvcm1SZWN1cnNpdmVseShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0XCJQYXRoSW5Nb2RlbFwiLFxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcblx0XHRcdFx0XHRmdW5jdGlvbiAob0JpbmRpbmdFeHByZXNzaW9uOiBQYXRoSW5Nb2RlbEV4cHJlc3Npb248UHJpbWl0aXZlVHlwZT4pIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQ29udGV4dERhdGEgPyBjb25zdGFudChvQ29udGV4dERhdGFbb0JpbmRpbmdFeHByZXNzaW9uLnBhdGhdKSA6IGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHRydWVcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3Qgc1Jlc3VsdCA9IGNvbXBpbGVFeHByZXNzaW9uKG9UcmFuc2Zvcm1lZEJpbmRpbmcpO1xuXHRcdFx0XHRiQWN0aW9uRW5hYmxlZCA9IGJBY3Rpb25FbmFibGVkIHx8IHNSZXN1bHQgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKS5zZXRQcm9wZXJ0eShzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoLCBiQWN0aW9uRW5hYmxlZCk7XG5cdFx0XHRcdChzUmVzdWx0ID09PSBcInRydWVcIiA/IGFBcHBsaWNhYmxlIDogYU5vdEFwcGxpY2FibGUpLnB1c2gob1NlbGVjdGVkQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRDb21tb25VdGlscy5zZXREeW5hbWljQWN0aW9uQ29udGV4dHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBzQWN0aW9uLCBhQXBwbGljYWJsZSwgYU5vdEFwcGxpY2FibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgUHJpbWl0aXZlVHlwZT47XG5cdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBudWxsICYmICEhb0NvbnRleHREYXRhW2AjJHtzQWN0aW9ufWBdKSB7XG5cdFx0XHRcdC8vbG9vayBmb3IgYWN0aW9uIGFkdmVydGlzZW1lbnQgaWYgcHJlc2VudCBhbmQgaXRzIHZhbHVlIGlzIG5vdCBudWxsXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIHRydWUpO1xuXHRcdFx0fSBlbHNlIGlmIChvU2VsZWN0ZWRDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Ly8gQ29sbGVjdCBwcm9taXNlcyB0byByZXRyaWV2ZSBzaW5nbGV0b24gb3Igbm9ybWFsIHByb3BlcnR5IHZhbHVlIGFzeW5jaHJvbm91c2x5XG5cdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMucHVzaChDb21tb25VdGlscy5yZXF1ZXN0UHJvcGVydHkob1NlbGVjdGVkQ29udGV4dCwgc0FjdGlvbiwgc1Byb3BlcnR5LCBzRHluYW1pY0FjdGlvbkVuYWJsZWRQYXRoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBhUmVxdWVzdFByb21pc2VzO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhY3Rpb24gaXMgY3JpdGljYWwuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgTWV0YU1vZGVsXG5cdCAqIEBwYXJhbSBwYXRoIFBhdGggdG8gdGhlIGFjdGlvblxuXHQgKiBAcGFyYW0gY29udGV4dHMgQ29udGV4dHMgaW4gY2FzZSBvZiBib3VuZCBhY3Rpb25zLlxuXHQgKiBAcmV0dXJucyBCb29sZWFuIGluZGljYXRpbmcgYWN0aW9uIGlzIGNyaXRpY2FsXG5cdCAqL1xuXHRnZXRJc0FjdGlvbkNyaXRpY2FsOiBhc3luYyBmdW5jdGlvbiAobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgcGF0aDogc3RyaW5nLCBjb250ZXh0czogQ29udGV4dFtdID0gW10pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHQvLyBkZWZhdWx0IGlzIHRydWUuXG5cdFx0bGV0IGlzQWN0aW9uQ3JpdGljYWxWYWx1ZTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gPSB0cnVlO1xuXHRcdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdFx0Y29uc3QgYWN0aW9uVGFyZ2V0UmVzb2x1dGlvbiA9IGNvbnZlcnRlZFR5cGVzLnJlc29sdmVQYXRoPEVkbUFjdGlvbj4ocGF0aCk7XG5cdFx0Y29uc3QgYWN0aW9uVGFyZ2V0ID0gYWN0aW9uVGFyZ2V0UmVzb2x1dGlvbi50YXJnZXQ7XG5cdFx0aWYgKCFhY3Rpb25UYXJnZXQpIHtcblx0XHRcdHJldHVybiBpc0FjdGlvbkNyaXRpY2FsVmFsdWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaXNBY3Rpb25Dcml0aWNhbEJpbmRpbmdFeHAgPSBnZXRJc0FjdGlvbkNyaXRpY2FsRXhwcmVzc2lvbihhY3Rpb25UYXJnZXQsIGNvbnZlcnRlZFR5cGVzKTtcblxuXHRcdGlmIChpc0NvbnN0YW50KGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwKSkge1xuXHRcdFx0Ly8gQ29uc3RhbnQgZXhwcmVzc2lvbiByZXNvbHZlcyB0byBcInRydWVcIiBvciBcImZhbHNlXCIuIEJ1dCwgd2UgbmVlZCBib29sZWFuLlxuXHRcdFx0aXNBY3Rpb25Dcml0aWNhbFZhbHVlID0gY29tcGlsZUNvbnN0YW50KGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwLCBmYWxzZSwgdW5kZWZpbmVkLCB0cnVlKSBhcyBib29sZWFuO1xuXHRcdH0gZWxzZSBpZiAoY29udGV4dHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gV2UgZXZhbHVhdGUgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIHZpYSBhIFVJNSBtYW5hZ2VkIG9iamVjdCBpbnN0YW5jZS5cblx0XHRcdGlzQWN0aW9uQ3JpdGljYWxWYWx1ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRpbmcgQmluZGluZyB0byByZXNvbHZlXG5cdFx0XHRcdFx0Y29uc3QgYW55T2JqZWN0ID0gbmV3IEFueSh7IGFueUJvb2xlYW46IGNvbXBpbGVFeHByZXNzaW9uKGlzQWN0aW9uQ3JpdGljYWxCaW5kaW5nRXhwKSB9KTtcblx0XHRcdFx0XHRhbnlPYmplY3Quc2V0TW9kZWwoY29udGV4dHNbMF0uZ2V0TW9kZWwoKSk7XG5cblx0XHRcdFx0XHQvLyBBdHRhY2hpbmcgY2hhbmdlIGV2ZW50c1xuXHRcdFx0XHRcdGNvbnN0IGJvb2xlYW5CaW5kaW5nID0gYW55T2JqZWN0LmdldEJpbmRpbmcoXCJhbnlCb29sZWFuXCIpIGFzIFByb3BlcnR5QmluZGluZztcblx0XHRcdFx0XHRjb25zdCBmbkNoYW5nZSA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGNvbnN0IHZhbHVlRXh0ID0gYm9vbGVhbkJpbmRpbmcuZ2V0RXh0ZXJuYWxWYWx1ZSgpO1xuXHRcdFx0XHRcdFx0YW55T2JqZWN0LmRlc3Ryb3koKTtcblx0XHRcdFx0XHRcdHJlc29sdmUodmFsdWVFeHQpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0Ym9vbGVhbkJpbmRpbmcuYXR0YWNoRXZlbnRPbmNlKFwiY2hhbmdlXCIsIGZuQ2hhbmdlKTtcblxuXHRcdFx0XHRcdC8vIHNldHRpbmcgYmluZGluZyBjb250ZXh0IHRvIHRyaWdnZXIgdGhlIGJpbmRpbmcgcmVzb2x1dGlvblxuXHRcdFx0XHRcdGFueU9iamVjdC5zZXRCaW5kaW5nQ29udGV4dChjb250ZXh0c1swXSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0XHRcdC8vIGVycm9yIHdoaWxlIGNyZWF0aW5nIG9yIHJlc29sdmluZyB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBGRSA6IEFjdGlvbnMgOiBFcnJvciB3aGlsZSByZXNvbHZpbmcgSXNBY3Rpb25Dcml0aWNhbCBmb3IgJHtwYXRofSA6ICR7bWVzc2FnZX1gKTtcblx0XHRcdFx0XHQvLyBPbiB0aGUgc2FmZSBzaWRlLCB3ZSBzaGFsbCByZXR1cm4gYWN0aW9uIGlzIGNyaXRpY2FsIGlmIHZhbHVlIGNvdWxkbid0IGJlIGRldGVybWluZWQuXG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlzQWN0aW9uQ3JpdGljYWxWYWx1ZTtcblx0fVxufTtcbmV4cG9ydCBkZWZhdWx0IEFjdGlvblJ1bnRpbWU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQTRDQSxNQUFNQSxhQUFhLEdBQUc7SUFDckI7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsNkJBQTZCLEVBQUUsU0FBQUEsQ0FBVUMsaUJBQWtGLEVBQVE7TUFDbElDLFNBQVMsQ0FBQ0MsV0FBVyxDQUNwQkYsaUJBQWlCLENBQUNHLEdBQUcsQ0FBRUMsZ0JBQWdCLElBQUs7UUFDM0Ms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
|
|
265
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBY3Rpb25SdW50aW1lIiwiX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIiLCJtZXNzYWdlUGFyYW1ldGVycyIsIk1lc3NhZ2luZyIsImFkZE1lc3NhZ2VzIiwibWFwIiwibWVzc2FnZVBhcmFtZXRlciIsImJpbmRpbmciLCJhY3Rpb25QYXJhbWV0ZXJJbmZvIiwiZmllbGQiLCJnZXRCaW5kaW5nIiwiaXNNdWx0aVZhbHVlIiwiTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJFcnJvciIsInByb2Nlc3NvciIsImdldE1vZGVsIiwidW5kZWZpbmVkIiwicGVyc2lzdGVudCIsInRhcmdldCIsImdldFJlc29sdmVkUGF0aCIsInZhbGlkYXRlUHJvcGVydGllcyIsImFjdGlvblBhcmFtZXRlckluZm9zIiwicmVzb3VyY2VNb2RlbCIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwidmFsaWRhdGlvblByb21pc2UiLCJyZXF1aXJlZFBhcmFtZXRlckluZm9zIiwiZmlsdGVyIiwicGFyYW1ldGVySW5mbyIsImdldFJlcXVpcmVkIiwiYWxsTWVzc2FnZXMiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwiZW1wdHlSZXF1aXJlZEZpZWxkcyIsInJlcXVpcmVkUGFyYW1ldGVySW5mbyIsImZpZWxkSWQiLCJnZXRJZCIsInJlbGV2YW50TWVzc2FnZXMiLCJtc2ciLCJnZXRDb250cm9sSWRzIiwic29tZSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwibGVuZ3RoIiwidmFsdWUiLCJmaWVsZFZhbHVlIiwiZ2V0VmFsdWUiLCJpc0ZpZWxkQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJnZXRUZXh0IiwiZ2V0UGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJmaXJzdEludmFsaWRQYXJhbWV0ZXIiLCJmaW5kIiwiZ2V0VmlzaWJsZSIsImhhc0Vycm9yIiwiZ2V0VmFsdWVTdGF0ZSIsInNldFZpc2libGUiLCJmb2N1cyIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJzQ29udHJvbCIsImZvckNvbnRleHRNZW51IiwiYXJndW1lbnRzIiwiYVByb21pc2VzIiwic0FjdGlvbiIsImFSZXF1ZXN0UHJvbWlzZXMiLCJzZXRQcm9wZXJ0eSIsInNQcm9wZXJ0eSIsImVsZW1lbnQiLCJvU2VsZWN0ZWRDb250ZXh0Iiwib0NvbnRleHREYXRhIiwiZ2V0T2JqZWN0IiwiX3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZSIsImJFbmFibGVkIiwiYUFwcGxpY2FibGUiLCJhTm90QXBwbGljYWJsZSIsInB1c2giLCJDb21tb25VdGlscyIsInNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZSIsImFsbCIsInNldEFjdGlvbkVuYWJsZW1lbnRBZnRlclBhdGNoIiwib1ZpZXciLCJvTGlzdEJpbmRpbmciLCJvSW50ZXJuYWxNb2RlbENvbnRleHREYXRhIiwib0NvbnRyb2xzIiwiY29udHJvbHMiLCJzS2V5Iiwib1RhYmxlIiwiYnlJZCIsImlzQSIsIm9Sb3dCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsInRhYmxlQVBJIiwiZ2V0QmluZGluZ0NvbnRleHQiLCJKU09OIiwicGFyc2UiLCJ0YWJsZURlZmluaXRpb24iLCJvcGVyYXRpb25BdmFpbGFibGVNYXAiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50IiwiaVZpZXdMZXZlbCIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwiaXNFZGl0YWJsZSIsImdldElzRWRpdGFibGUiLCJvQ29udGV4dCIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJzTWV0YVBhdGgiLCJNb2RlbEhlbHBlciIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsInNFbnRpdHlTZXQiLCJnZXRSb290RW50aXR5U2V0UGF0aCIsIm1ldGFDb250ZXh0IiwiZ2V0TWV0YU1vZGVsIiwiZ2V0Q29udGV4dCIsImdldFBhdGgiLCJjb252ZXJ0ZXJDb250ZXh0IiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsImdldERpYWdub3N0aWNzIiwibWVyZ2UiLCJlbnRpdHlTZXQiLCJnZXRFbnRpdHlTZXQiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZSIsInVwZGF0ZUhpZGRlbiIsImJVcGRhdGVIaWRkZW4iLCJpc0VudGl0eVNldCIsImFubm90YXRpb25zIiwiVUkiLCJVcGRhdGVIaWRkZW4iLCJ2YWx1ZU9mIiwiaXNVcGRhdGVIaWRkZW4iLCJzRWRpdEVuYWJsZUJpbmRpbmciLCJnZXRFZGl0QnV0dG9uRW5hYmxlZCIsImRyYWZ0Um9vdFBhdGgiLCJnZXREcmFmdFJvb3RQYXRoIiwic1N0aWNreVJvb3RQYXRoIiwiZ2V0U3RpY2t5Um9vdFBhdGgiLCJzUGF0aCIsIm9Sb290Q29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwic0hpZGRlbkV4cHJlc3Npb24iLCJjb21waWxlRXhwcmVzc2lvbiIsImVxdWFsIiwiZ2V0SGlkZGVuRXhwcmVzc2lvbiIsInVwZGF0ZUVkaXRNb2RlbENvbnRleHQiLCJzQmluZGluZ0V4cHJlc3Npb24iLCJvSGlkZGVuRWxlbWVudCIsIkFueUVsZW1lbnQiLCJhbnlUZXh0Iiwic2V0QmluZGluZ0NvbnRleHQiLCJhZGREZXBlbmRlbnQiLCIkJGdyb3VwSWQiLCJhdHRhY2hDaGFuZ2UiLCJvRXZlbnQiLCJvTmV3VmFsdWUiLCJnZXRTb3VyY2UiLCJnZXRFeHRlcm5hbFZhbHVlIiwic0VuYWJsZW1lbnRGaWVsZE5hbWUiLCJnZXRQcm9wZXJ0eSIsImJBY3Rpb25FbmFibGVkIiwiYkVuYWJsZWRGb3JDb250ZXh0TWVudSIsImFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnUiLCJhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51Iiwic0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCIsIm9UcmFuc2Zvcm1lZEJpbmRpbmciLCJ0cmFuc2Zvcm1SZWN1cnNpdmVseSIsIm9CaW5kaW5nRXhwcmVzc2lvbiIsImNvbnN0YW50IiwicGF0aCIsInNSZXN1bHQiLCJzZXREeW5hbWljQWN0aW9uQ29udGV4dHMiLCJyZXF1ZXN0UHJvcGVydHkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkFjdGlvblJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25QYXJhbWV0ZXIgYXMgRWRtQWN0aW9uUGFyYW1ldGVyLCBQcmltaXRpdmVUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIHsgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGVxdWFsLCB0cmFuc2Zvcm1SZWN1cnNpdmVseSB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgX1JlcXVlc3RlZFByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNFbnRpdHlTZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgRmllbGQgZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCB0eXBlIE11bHRpVmFsdWVGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9NdWx0aVZhbHVlRmllbGRcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBNdWx0aVZhbHVlRmllbGRJdGVtIGZyb20gXCJzYXAvdWkvbWRjL2ZpZWxkL011bHRpVmFsdWVGaWVsZEl0ZW1cIjtcbmltcG9ydCB0eXBlIFByb3BlcnR5QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL1Byb3BlcnR5QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBGaWxlVXBsb2FkZXIgZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IEFueUVsZW1lbnQgZnJvbSBcIi4vY29udHJvbHMvQW55RWxlbWVudFwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4vY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcIi4vY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRFZGl0QnV0dG9uRW5hYmxlZCwgZ2V0SGlkZGVuRXhwcmVzc2lvbiB9IGZyb20gXCIuL2NvbnZlcnRlcnMvb2JqZWN0UGFnZS9IZWFkZXJBbmRGb290ZXJBY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uUGFyYW1ldGVySW5mbyA9IHtcblx0cGFyYW1ldGVyPzogRWRtQWN0aW9uUGFyYW1ldGVyO1xuXHRmaWVsZDogRmllbGQgfCBNdWx0aVZhbHVlRmllbGQgfCBGaWxlVXBsb2FkZXI7XG5cdGlzTXVsdGlWYWx1ZTogYm9vbGVhbjtcblx0dmFsdWU/OiBzdHJpbmcgfCBNdWx0aVZhbHVlRmllbGRJdGVtW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHR2YWxpZGF0aW9uUHJvbWlzZT86IFByb21pc2U8c3RyaW5nIHwgTXVsdGlWYWx1ZUZpZWxkSXRlbVtdPjtcblx0aGFzRXJyb3I6IGJvb2xlYW47XG5cdHByb3BlcnR5UGF0aD86IHN0cmluZztcbn07XG5cbmNvbnN0IEFjdGlvblJ1bnRpbWUgPSB7XG5cdC8qKlxuXHQgKiBBZGRzIGVycm9yIG1lc3NhZ2VzIGZvciBhbiBhY3Rpb24gcGFyYW1ldGVyIGZpZWxkIHRvIHRoZSBtZXNzYWdlIG1hbmFnZXIuXG5cdCAqIEBwYXJhbSBtZXNzYWdlUGFyYW1ldGVycyBJbmZvcm1hdGlvbiBpZGVudGlmeWluZyBhbiBhY3Rpb24gcGFyYW1ldGVyIGFuZCBtZXNzYWdlcyByZWZlcnJpbmcgdG8gdGhpcyBwYXJhbWV0ZXJcblx0ICovXG5cdF9hZGRNZXNzYWdlRm9yQWN0aW9uUGFyYW1ldGVyOiBmdW5jdGlvbiAobWVzc2FnZVBhcmFtZXRlcnM6IHsgYWN0aW9uUGFyYW1ldGVySW5mbzogQWN0aW9uUGFyYW1ldGVySW5mbzsgbWVzc2FnZTogc3RyaW5nIH1bXSk6IHZvaWQge1xuXHRcdE1lc3NhZ2luZy5hZGRNZXNzYWdlcyhcblx0XHRcdG1lc3NhZ2VQYXJhbWV0ZXJzLm1hcCgobWVzc2FnZVBhcmFtZXRlcikgPT4ge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nID0gbWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmZpZWxkLmdldEJpbmRpbmcoXG5cdFx0XHRcdFx0bWVzc2FnZVBhcmFtZXRlci5hY3Rpb25QYXJhbWV0ZXJJbmZvLmlzTXVsdGlWYWx1ZSA/IFwiaXRlbXNcIiA6IFwidmFsdWVcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdG1lc3NhZ2U6IG1lc3NhZ2VQYXJhbWV0ZXIubWVzc2FnZSxcblx0XHRcdFx0XHR0eXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHRcdFx0XHRwcm9jZXNzb3I6IGJpbmRpbmc/LmdldE1vZGVsKCkgPz8gdW5kZWZpbmVkLCAvLyBnZXRNb2RlbCgpOiBudWxsIHwgTW9kZWwgfn4+IHByb2Nlc3Nvcj86IE1lc3NhZ2VQcm9jZXNzb3Jcblx0XHRcdFx0XHRwZXJzaXN0ZW50OiB0cnVlLFxuXHRcdFx0XHRcdHRhcmdldDogYmluZGluZz8uZ2V0UmVzb2x2ZWRQYXRoKClcblx0XHRcdFx0fSk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhbGwgcmVxdWlyZWQgYWN0aW9uIHBhcmFtZXRlcnMgY29udGFpbiBkYXRhIGFuZCBjaGVja3MgZm9yIGFsbCBhY3Rpb24gcGFyYW1ldGVycyBpZiB0aGVcblx0ICogY29udGFpbmVkIGRhdGEgaXMgdmFsaWQuXG5cdCAqIEBwYXJhbSBhY3Rpb25QYXJhbWV0ZXJJbmZvcyBJbmZvcm1hdGlvbiBpZGVudGlmeWluZyBhbiBhY3Rpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSByZXNvdXJjZU1vZGVsIFRoZSBtb2RlbCB0byBsb2FkIHRleHQgcmVzb3VyY2VzXG5cdCAqIEByZXR1cm5zIFRoZSB2YWxpZGF0aW9uIHJlc3VsdCBjYW4gYmUgdHJ1ZSBvciBmYWxzZVxuXHQgKi9cblx0dmFsaWRhdGVQcm9wZXJ0aWVzOiBhc3luYyBmdW5jdGlvbiAoYWN0aW9uUGFyYW1ldGVySW5mb3M6IEFjdGlvblBhcmFtZXRlckluZm9bXSwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRcdGFjdGlvblBhcmFtZXRlckluZm9zLm1hcChcblx0XHRcdFx0KGFjdGlvblBhcmFtZXRlckluZm8pOiBQcm9taXNlPHN0cmluZyB8IE11bHRpVmFsdWVGaWVsZEl0ZW1bXT4gfCB1bmRlZmluZWQgPT4gYWN0aW9uUGFyYW1ldGVySW5mby52YWxpZGF0aW9uUHJvbWlzZVxuXHRcdFx0KVxuXHRcdCk7XG5cblx0XHRjb25zdCByZXF1aXJlZFBhcmFtZXRlckluZm9zID0gYWN0aW9uUGFyYW1ldGVySW5mb3MuZmlsdGVyKFxuXHRcdFx0KHBhcmFtZXRlckluZm8pID0+XG5cdFx0XHRcdChwYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkIHwgTXVsdGlWYWx1ZUZpZWxkKS5nZXRSZXF1aXJlZCAmJlxuXHRcdFx0XHQocGFyYW1ldGVySW5mby5maWVsZCBhcyBGaWVsZCB8IE11bHRpVmFsdWVGaWVsZCkuZ2V0UmVxdWlyZWQoKVxuXHRcdCk7XG5cblx0XHRjb25zdCBhbGxNZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgZW1wdHlSZXF1aXJlZEZpZWxkcyA9IHJlcXVpcmVkUGFyYW1ldGVySW5mb3MuZmlsdGVyKChyZXF1aXJlZFBhcmFtZXRlckluZm8pID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkSWQgPSByZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQuZ2V0SWQoKTtcblx0XHRcdGNvbnN0IHJlbGV2YW50TWVzc2FnZXMgPSBhbGxNZXNzYWdlcy5maWx0ZXIoKG1zZzogTWVzc2FnZSkgPT5cblx0XHRcdFx0bXNnLmdldENvbnRyb2xJZHMoKS5zb21lKChjb250cm9sSWQ6IHN0cmluZykgPT4gY29udHJvbElkLmluY2x1ZGVzKGZpZWxkSWQpKVxuXHRcdFx0KTtcblx0XHRcdGlmIChyZWxldmFudE1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChyZXF1aXJlZFBhcmFtZXRlckluZm8uaXNNdWx0aVZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiByZXF1aXJlZFBhcmFtZXRlckluZm8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCAhcmVxdWlyZWRQYXJhbWV0ZXJJbmZvLnZhbHVlLmxlbmd0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkVmFsdWUgPSAocmVxdWlyZWRQYXJhbWV0ZXJJbmZvLmZpZWxkIGFzIEZpZWxkKS5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRjb25zdCBpc0ZpZWxkQXJyYXkgPSBBcnJheS5pc0FycmF5KChyZXF1aXJlZFBhcmFtZXRlckluZm8uZmllbGQgYXMgRmllbGQpLmdldFZhbHVlKCkpO1xuXHRcdFx0XHRpZiAoaXNGaWVsZEFycmF5KSB7XG5cdFx0XHRcdFx0Ly8gb25seSBmaXJzdCB2YWx1ZSBjaGVjayBpcyBlbm91Z2ggYXMgdGhlIGZpZWxkIHZhbHVlIGNvbWVzIG9uIFswXSByZXN0IG9mIHRoZSBhcnJheSBpbmNsdWRlcyBjdXJyZW5jeSBhbmQgY3VycmVuY3kgY29kZVxuXHRcdFx0XHRcdC8vIGJvdGggb2Ygd2hpY2ggY2FuIG9yIGNhbm5vdCBiZSBudWxsLCBzbyB3ZSBzaGFsbCBjaGVjayBvbmx5IHRoZSBmaWVsZCB2YWx1ZVxuXHRcdFx0XHRcdHJldHVybiBmaWVsZFZhbHVlWzBdID09PSBudWxsIHx8IGZpZWxkVmFsdWVbMF0gPT09IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZFZhbHVlID09PSBudWxsIHx8IGZpZWxkVmFsdWUgPT09IFwiXCI7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0LyogTWVzc2FnZSBmb3IgbWlzc2luZyBtYW5kYXRvcnkgdmFsdWUgb2YgdGhlIGFjdGlvbiBwYXJhbWV0ZXIgKi9cblx0XHRpZiAoZW1wdHlSZXF1aXJlZEZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuX2FkZE1lc3NhZ2VGb3JBY3Rpb25QYXJhbWV0ZXIoXG5cdFx0XHRcdGVtcHR5UmVxdWlyZWRGaWVsZHMubWFwKChhY3Rpb25QYXJhbWV0ZXJJbmZvKSA9PiAoe1xuXHRcdFx0XHRcdGFjdGlvblBhcmFtZXRlckluZm86IGFjdGlvblBhcmFtZXRlckluZm8sXG5cdFx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19PUEVSQVRJT05TX0FDVElPTl9QQVJBTUVURVJfRElBTE9HX01JU1NJTkdfTUFOREFUT1JZX01TR1wiLCBbXG5cdFx0XHRcdFx0XHQoYWN0aW9uUGFyYW1ldGVySW5mby5maWVsZC5nZXRQYXJlbnQoKT8uZ2V0QWdncmVnYXRpb24oXCJsYWJlbFwiKSBhcyBMYWJlbCkuZ2V0VGV4dCgpXG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0fSkpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvKiBDaGVjayB2YWx1ZSBzdGF0ZSBvZiBhbGwgcGFyYW1ldGVycyAqL1xuXHRcdGNvbnN0IGZpcnN0SW52YWxpZFBhcmFtZXRlciA9IGFjdGlvblBhcmFtZXRlckluZm9zLmZpbmQoXG5cdFx0XHQocGFyYW1ldGVySW5mbykgPT5cblx0XHRcdFx0cGFyYW1ldGVySW5mby5maWVsZC5nZXRWaXNpYmxlKCkgJiZcblx0XHRcdFx0KHBhcmFtZXRlckluZm8uaGFzRXJyb3IgfHwgcGFyYW1ldGVySW5mby5maWVsZC5nZXRWYWx1ZVN0YXRlKCkgPT09IFwiRXJyb3JcIiB8fCBlbXB0eVJlcXVpcmVkRmllbGRzLmluY2x1ZGVzKHBhcmFtZXRlckluZm8pKVxuXHRcdCk7XG5cdFx0aWYgKGZpcnN0SW52YWxpZFBhcmFtZXRlcikge1xuXHRcdFx0Zmlyc3RJbnZhbGlkUGFyYW1ldGVyLmZpZWxkLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHRmaXJzdEludmFsaWRQYXJhbWV0ZXIuZmllbGQuZm9jdXMoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBhY3Rpb24gZW5hYmxlbWVudC5cblx0ICogQHBhcmFtIG9JbnRlcm5hbE1vZGVsQ29udGV4dCBPYmplY3QgY29udGFpbmluZyB0aGUgY29udGV4dCBtb2RlbFxuXHQgKiBAcGFyYW0gb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCBNYXAgY29udGFpbmluZyB0aGUgb3BlcmF0aW9uIGF2YWlsYWJpbGl0eSBvZiBhY3Rpb25zXG5cdCAqIEBwYXJhbSBhU2VsZWN0ZWRDb250ZXh0cyBBcnJheSBjb250YWluaW5nIHNlbGVjdGVkIGNvbnRleHRzIG9mIHRoZSBjaGFydFxuXHQgKiBAcGFyYW0gc0NvbnRyb2wgQ29udHJvbCBuYW1lXG5cdCAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcblx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBlbmFibGVtZW50IHByb21pc2VzXG5cdCAqL1xuXHRzZXRBY3Rpb25FbmFibGVtZW50OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRcdGFTZWxlY3RlZENvbnRleHRzOiBDb250ZXh0W10sXG5cdFx0c0NvbnRyb2w6IHN0cmluZyxcblx0XHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZFtdPiB7XG5cdFx0Y29uc3QgYVByb21pc2VzID0gW107XG5cdFx0Zm9yIChjb25zdCBzQWN0aW9uIGluIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXApIHtcblx0XHRcdGxldCBhUmVxdWVzdFByb21pc2VzOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXSA9IFtdO1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNBY3Rpb24sIGZhbHNlKTtcblx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJ0YWJsZVwiKSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hQXBwbGljYWJsZWAsIFtdKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FOb3RBcHBsaWNhYmxlYCwgW10pO1xuXHRcdFx0XHRpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRGb3JDb250ZXh0TWVudWAsIGZhbHNlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYkVuYWJsZWRgLCBmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHNQcm9wZXJ0eSA9IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXBbc0FjdGlvbl07XG5cdFx0XHRmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYVNlbGVjdGVkQ29udGV4dHMpIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkQ29udGV4dCA9IGVsZW1lbnQ7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHRcdFx0XHRpZiAoc0NvbnRyb2wgPT09IFwiY2hhcnRcIikge1xuXHRcdFx0XHRcdFx0aWYgKChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbYCMke3NBY3Rpb259YF0pIHx8IG9TZWxlY3RlZENvbnRleHQuZ2V0T2JqZWN0KHNQcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0Ly9sb29rIGZvciBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBpZiBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgbm90IG51bGxcblx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KHNBY3Rpb24sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNDb250cm9sID09PSBcInRhYmxlXCIpIHtcblx0XHRcdFx0XHRcdGFSZXF1ZXN0UHJvbWlzZXMgPSB0aGlzLl9zZXRBY3Rpb25FbmFibGVtZW50Rm9yVGFibGUoXG5cdFx0XHRcdFx0XHRcdG9TZWxlY3RlZENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0c0FjdGlvbixcblx0XHRcdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0XHRhUmVxdWVzdFByb21pc2VzLFxuXHRcdFx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChzQ29udHJvbCA9PT0gXCJ0YWJsZVwiKSB7XG5cdFx0XHRcdGlmICghYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259YCwge1xuXHRcdFx0XHRcdFx0YkVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHRcdFx0YUFwcGxpY2FibGU6IFtdLFxuXHRcdFx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IFtdXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0YVByb21pc2VzLnB1c2goQ29tbW9uVXRpbHMuc2V0Q29udGV4dHNCYXNlZE9uT3BlcmF0aW9uQXZhaWxhYmxlKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgW10sIGZvckNvbnRleHRNZW51KSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVNlbGVjdGVkQ29udGV4dHMubGVuZ3RoICYmIHR5cGVvZiBzUHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHQvLyBXaGVuIGFsbCBwcm9wZXJ0eSB2YWx1ZXMgaGF2ZSBiZWVuIHJldHJpZXZlZCwgc2V0XG5cdFx0XHRcdFx0Ly8gVGhlIGFwcGxpY2FibGUgYW5kIG5vdC1hcHBsaWNhYmxlIHNlbGVjdGVkIGNvbnRleHRzIGZvciBlYWNoIGFjdGlvbiBhbmRcblx0XHRcdFx0XHQvLyBUaGUgZW5hYmxlZCBwcm9wZXJ0eSBvZiB0aGUgZHluYW1pYyBhY3Rpb24gaW4gaW50ZXJuYWwgbW9kZWwgY29udGV4dC5cblx0XHRcdFx0XHRhUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdENvbW1vblV0aWxzLnNldENvbnRleHRzQmFzZWRPbk9wZXJhdGlvbkF2YWlsYWJsZShvSW50ZXJuYWxNb2RlbENvbnRleHQsIGFSZXF1ZXN0UHJvbWlzZXMsIGZvckNvbnRleHRNZW51KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG5cdH0sXG5cdHNldEFjdGlvbkVuYWJsZW1lbnRBZnRlclBhdGNoOiBmdW5jdGlvbiAoXG5cdFx0b1ZpZXc6IFZpZXcsXG5cdFx0b0xpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHRcblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0RGF0YSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0T2JqZWN0KCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cdFx0Y29uc3Qgb0NvbnRyb2xzID0gKG9JbnRlcm5hbE1vZGVsQ29udGV4dERhdGE/LmNvbnRyb2xzIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB7IGNvbnRyb2xJZD86IHN0cmluZyB9Pjtcblx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb0NvbnRyb2xzKSB7XG5cdFx0XHRpZiAob0NvbnRyb2xzW3NLZXldICYmIG9Db250cm9sc1tzS2V5XS5jb250cm9sSWQpIHtcblx0XHRcdFx0Y29uc3Qgb1RhYmxlID0gb1ZpZXcuYnlJZChzS2V5KTtcblx0XHRcdFx0aWYgKG9UYWJsZSAmJiBvVGFibGUuaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdFx0XHRjb25zdCBvUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdFx0aWYgKG9Sb3dCaW5kaW5nID09IG9MaXN0QmluZGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGFibGVBUEkgPSBvVGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0XHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQoXG5cdFx0XHRcdFx0XHRcdG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRKU09OLnBhcnNlKHRhYmxlQVBJLnRhYmxlRGVmaW5pdGlvbi5vcGVyYXRpb25BdmFpbGFibGVNYXApLFxuXHRcdFx0XHRcdFx0XHRvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpIGFzIENvbnRleHRbXSxcblx0XHRcdFx0XHRcdFx0XCJ0YWJsZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQob1ZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSAob1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyk/LnZpZXdMZXZlbCxcblx0XHRcdGlzRWRpdGFibGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKG9WaWV3KTtcblx0XHRpZiAoKGlWaWV3TGV2ZWwgYXMgbnVtYmVyKSA+IDEgJiYgaXNFZGl0YWJsZSAhPT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRjb25zdCBzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldCA9IE1vZGVsSGVscGVyLmdldFJvb3RFbnRpdHlTZXRQYXRoKHNNZXRhUGF0aCk7XG5cdFx0XHRjb25zdCBtZXRhQ29udGV4dCA9IG9Db250ZXh0XG5cdFx0XHRcdD8uZ2V0TW9kZWwoKVxuXHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0Py5nZXRDb250ZXh0KG9Db250ZXh0Py5nZXRQYXRoKCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVyQ29udGV4dCA9IENvbnZlcnRlckNvbnRleHQ/LmNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyhcblx0XHRcdFx0c0VudGl0eVNldCxcblx0XHRcdFx0bWV0YUNvbnRleHQsXG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0RGlhZ25vc3RpY3MoKSxcblx0XHRcdFx0bWVyZ2Vcblx0XHRcdCk7XG5cdFx0XHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0bGV0IHVwZGF0ZUhpZGRlbjtcblx0XHRcdC8vRmluZCB0aGUgVXBkYXRlIEhpZGRlbiBvZiB0aGUgcm9vdCBlbnRpdHkgc2V0IGFuZCBiaW5kIHRoZSBwcm9wZXJ0eSB0byBBbnlFbGVtZW50LCBhbnkgY2hhbmdlcyBpbiB0aGUgcGF0aCBvZiB0aGUgcm9vdCBVcGRhdGVIaWRkZW4gd2lsbCBiZSB1cGRhdGVkIHZpYSB0aGUgcHJvcGVydHksIGludGVybmFsIG1vZGVsIGNvbnRleHQgaXMgdXBkYXRlZCBiYXNlZCBvbiB0aGUgcHJvcGVydHlcblx0XHRcdGNvbnN0IGJVcGRhdGVIaWRkZW4gPSBpc0VudGl0eVNldChlbnRpdHlTZXQpICYmIGVudGl0eVNldC5hbm5vdGF0aW9ucy5VST8uVXBkYXRlSGlkZGVuPy52YWx1ZU9mKCk7XG5cdFx0XHRpZiAoYlVwZGF0ZUhpZGRlbiAhPT0gdHJ1ZSkge1xuXHRcdFx0XHR1cGRhdGVIaWRkZW4gPSBNb2RlbEhlbHBlci5pc1VwZGF0ZUhpZGRlbihlbnRpdHlTZXQsIGVudGl0eVR5cGUpO1xuXHRcdFx0fVxuXHRcdFx0Ly9GaW5kIHRoZSBvcGVyYXRpb24gYXZhaWxhYmxlIHByb3BlcnR5IG9mIHRoZSByb290IGVkaXQgY29uZmlndXJhdGlvbiBhbmQgZmV0Y2ggdGhlIHByb3BlcnR5IHVzaW5nIEFueUVsZW1lbnRcblx0XHRcdGNvbnN0IHNFZGl0RW5hYmxlQmluZGluZyA9IGdldEVkaXRCdXR0b25FbmFibGVkKGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0Y29uc3QgZHJhZnRSb290UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgob0NvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc1N0aWNreVJvb3RQYXRoID0gTW9kZWxIZWxwZXIuZ2V0U3RpY2t5Um9vdFBhdGgob0NvbnRleHQpO1xuXHRcdFx0Y29uc3Qgc1BhdGggPSBkcmFmdFJvb3RQYXRoIHx8IHNTdGlja3lSb290UGF0aDtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoc1BhdGgpIHtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RDb250ZXh0ID0gb1ZpZXcuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChzUGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRcdGlmICh1cGRhdGVIaWRkZW4gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnN0IHNIaWRkZW5FeHByZXNzaW9uID0gY29tcGlsZUV4cHJlc3Npb24oZXF1YWwoZ2V0SGlkZGVuRXhwcmVzc2lvbihjb252ZXJ0ZXJDb250ZXh0LCB1cGRhdGVIaWRkZW4pLCBmYWxzZSkpO1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRWRpdE1vZGVsQ29udGV4dChzSGlkZGVuRXhwcmVzc2lvbiwgb1ZpZXcsIG9Sb290Q29udGV4dCwgXCJyb290RWRpdFZpc2libGVcIiwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoc0VkaXRFbmFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVFZGl0TW9kZWxDb250ZXh0KHNFZGl0RW5hYmxlQmluZGluZywgb1ZpZXcsIG9Sb290Q29udGV4dCwgXCJyb290RWRpdEVuYWJsZWRcIiwgb0ludGVybmFsTW9kZWxDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHR1cGRhdGVFZGl0TW9kZWxDb250ZXh0OiBmdW5jdGlvbiAoXG5cdFx0c0JpbmRpbmdFeHByZXNzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0b1ZpZXc6IFZpZXcsXG5cdFx0b1Jvb3RDb250ZXh0OiBDb250ZXh0LFxuXHRcdHNQcm9wZXJ0eTogc3RyaW5nLFxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dDogSW50ZXJuYWxNb2RlbENvbnRleHRcblx0KTogdm9pZCB7XG5cdFx0aWYgKHNCaW5kaW5nRXhwcmVzc2lvbikge1xuXHRcdFx0Y29uc3Qgb0hpZGRlbkVsZW1lbnQgPSBuZXcgQW55RWxlbWVudCh7IGFueVRleHQ6IHNCaW5kaW5nRXhwcmVzc2lvbiB9KTtcblx0XHRcdG9IaWRkZW5FbGVtZW50LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0b1ZpZXcuYWRkRGVwZW5kZW50KG9IaWRkZW5FbGVtZW50KTtcblx0XHRcdG9IaWRkZW5FbGVtZW50LmdldEJpbmRpbmcoXCJhbnlUZXh0XCIpO1xuXHRcdFx0Y29uc3Qgb0NvbnRleHQgPSBvSGlkZGVuRWxlbWVudFxuXHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHQ/LmJpbmRDb250ZXh0KG9Sb290Q29udGV4dC5nZXRQYXRoKCksIG9Sb290Q29udGV4dCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uSGVyb2VzXCIgfSlcblx0XHRcdFx0Py5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdG9IaWRkZW5FbGVtZW50LnNldEJpbmRpbmdDb250ZXh0KG9Db250ZXh0KTtcblx0XHRcdG9IaWRkZW5FbGVtZW50Py5nZXRCaW5kaW5nKFwiYW55VGV4dFwiKT8uYXR0YWNoQ2hhbmdlKChvRXZlbnQ6IEV2ZW50PHt9LCBQcm9wZXJ0eUJpbmRpbmc+KSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9OZXdWYWx1ZSA9IG9FdmVudC5nZXRTb3VyY2UoKS5nZXRFeHRlcm5hbFZhbHVlKCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShzUHJvcGVydHksIG9OZXdWYWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0sXG5cblx0X3NldEFjdGlvbkVuYWJsZW1lbnRGb3JUYWJsZTogZnVuY3Rpb24gKFxuXHRcdG9TZWxlY3RlZENvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQsXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0OiBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRzQWN0aW9uOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5OiBzdHJpbmcsXG5cdFx0YVJlcXVlc3RQcm9taXNlczogUHJvbWlzZTxfUmVxdWVzdGVkUHJvcGVydHk+W10sXG5cdFx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZVxuXHQpOiBQcm9taXNlPF9SZXF1ZXN0ZWRQcm9wZXJ0eT5bXSB7XG5cdFx0Ly8gUmV0cmlldmUgcHJldmlvdXNseSBjaGVja2VkIGNvbnRleHRzIGluIGNhc2Ugb2YgIWZvckNvbnRleHRNZW51XG5cdFx0Y29uc3Qgc0VuYWJsZW1lbnRGaWVsZE5hbWUgPSBmb3JDb250ZXh0TWVudSA/IFwiYkVuYWJsZWRGb3JDb250ZXh0TWVudVwiIDogXCJiRW5hYmxlZFwiLFxuXHRcdFx0YUFwcGxpY2FibGU6IFtDb250ZXh0IHwgdW5kZWZpbmVkXSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hQXBwbGljYWJsZWApIHx8IFtdLFxuXHRcdFx0YU5vdEFwcGxpY2FibGU6IFtDb250ZXh0IHwgdW5kZWZpbmVkXSA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9hTm90QXBwbGljYWJsZWApIHx8IFtdO1xuXHRcdGxldCBiQWN0aW9uRW5hYmxlZDogYm9vbGVhbiA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS8ke3NFbmFibGVtZW50RmllbGROYW1lfWApIHx8IGZhbHNlO1xuXG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259YCwge1xuXHRcdFx0XHRiRW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdGFBcHBsaWNhYmxlOiBbXSxcblx0XHRcdFx0YU5vdEFwcGxpY2FibGU6IFtdXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259YCwge1xuXHRcdFx0XHQvLyBEbyBub3QgY2hhbmdlIGVuYWJsZWQsIGFBcHBsaWNhYmxlIGFuZCBhTm90QXBwbGljYWJsZSBwcm9wZXJ0eSBpbiBjYXNlIG9mIGNvbnRleHQgbWVudSBjYWxjdWxhdGlvblxuXHRcdFx0XHQvLyBpbiBjYXNlIG9mIGNvbnRleHQgbWVudSwgb25seSB0aGUgY2xpY2tlZCBjb250ZXh0IGdvZXMgaW50byB0aGUgcHJvY2Vzc2luZyAtIG90aGVyIHNlbGVjdGVkIGNvbnRleHRzIG11c3QgYmUga2VwdCBpbiB0aGUgbW9kZWxcblx0XHRcdFx0YkVuYWJsZWQ6IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShgZHluYW1pY0FjdGlvbnMvJHtzQWN0aW9ufS9iRW5hYmxlZGApLFxuXHRcdFx0XHRhQXBwbGljYWJsZTogb0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KGBkeW5hbWljQWN0aW9ucy8ke3NBY3Rpb259L2FBcHBsaWNhYmxlYCksXG5cdFx0XHRcdGFOb3RBcHBsaWNhYmxlOiBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoYGR5bmFtaWNBY3Rpb25zLyR7c0FjdGlvbn0vYU5vdEFwcGxpY2FibGVgKSxcblx0XHRcdFx0YkVuYWJsZWRGb3JDb250ZXh0TWVudTogZmFsc2UsXG5cdFx0XHRcdGFBcHBsaWNhYmxlRm9yQ29udGV4dE1lbnU6IFtdLFxuXHRcdFx0XHRhTm90QXBwbGljYWJsZUZvckNvbnRleHRNZW51OiBbXVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIE5vdGUgdGhhdCBub24gZHluYW1pYyBhY3Rpb25zIGFyZSBub3QgcHJvY2Vzc2VkIGhlcmUuIFRoZXkgYXJlIGVuYWJsZWQgYmVjYXVzZVxuXHRcdC8vIG9uZSBvciBtb3JlIGFyZSBzZWxlY3RlZCBhbmQgdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBjb25kaXRpb24gaW4gdGhlIHRlbXBsYXRpbmdcblx0XHQvLyBpcyB0aGVuIHVuZGVmaW5lZCBhbmQgdGh1cyB0aGUgYnV0dG9uIHRha2VzIHRoZSBkZWZhdWx0IGVuYWJsaW5nLCB3aGljaCBpcyB0cnVlIVxuXHRcdGNvbnN0IHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGggPSBgJHtvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpfS9keW5hbWljQWN0aW9ucy8ke3NBY3Rpb259LyR7c0VuYWJsZW1lbnRGaWVsZE5hbWV9YDtcblxuXHRcdGlmICh0eXBlb2Ygc1Byb3BlcnR5ID09PSBcIm9iamVjdFwiICYmIHNQcm9wZXJ0eSAhPT0gbnVsbCAmJiBzUHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKG9TZWxlY3RlZENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb1NlbGVjdGVkQ29udGV4dC5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0XHRcdFx0Y29uc3Qgb1RyYW5zZm9ybWVkQmluZGluZyA9IHRyYW5zZm9ybVJlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRcIlBhdGhJbk1vZGVsXCIsXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuXHRcdFx0XHRcdGZ1bmN0aW9uIChvQmluZGluZ0V4cHJlc3Npb246IFBhdGhJbk1vZGVsRXhwcmVzc2lvbjxQcmltaXRpdmVUeXBlPikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db250ZXh0RGF0YSA/IGNvbnN0YW50KG9Db250ZXh0RGF0YVtvQmluZGluZ0V4cHJlc3Npb24ucGF0aF0pIDogY29uc3RhbnQoZmFsc2UpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBzUmVzdWx0ID0gY29tcGlsZUV4cHJlc3Npb24ob1RyYW5zZm9ybWVkQmluZGluZyk7XG5cdFx0XHRcdGJBY3Rpb25FbmFibGVkID0gYkFjdGlvbkVuYWJsZWQgfHwgc1Jlc3VsdCA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRNb2RlbCgpLnNldFByb3BlcnR5KHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgsIGJBY3Rpb25FbmFibGVkKTtcblx0XHRcdFx0KHNSZXN1bHQgPT09IFwidHJ1ZVwiID8gYUFwcGxpY2FibGUgOiBhTm90QXBwbGljYWJsZSkucHVzaChvU2VsZWN0ZWRDb250ZXh0KTtcblx0XHRcdH1cblx0XHRcdENvbW1vblV0aWxzLnNldER5bmFtaWNBY3Rpb25Db250ZXh0cyhvSW50ZXJuYWxNb2RlbENvbnRleHQsIHNBY3Rpb24sIGFBcHBsaWNhYmxlLCBhTm90QXBwbGljYWJsZSwgZm9yQ29udGV4dE1lbnUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvU2VsZWN0ZWRDb250ZXh0Py5nZXRPYmplY3QoKSBhcyBSZWNvcmQ8c3RyaW5nLCBQcmltaXRpdmVUeXBlPjtcblx0XHRcdGlmIChzUHJvcGVydHkgPT09IG51bGwgJiYgISFvQ29udGV4dERhdGFbYCMke3NBY3Rpb259YF0pIHtcblx0XHRcdFx0Ly9sb29rIGZvciBhY3Rpb24gYWR2ZXJ0aXNlbWVudCBpZiBwcmVzZW50IGFuZCBpdHMgdmFsdWUgaXMgbm90IG51bGxcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldE1vZGVsKCkuc2V0UHJvcGVydHkoc0R5bmFtaWNBY3Rpb25FbmFibGVkUGF0aCwgdHJ1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKG9TZWxlY3RlZENvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHQvLyBDb2xsZWN0IHByb21pc2VzIHRvIHJldHJpZXZlIHNpbmdsZXRvbiBvciBub3JtYWwgcHJvcGVydHkgdmFsdWUgYXN5bmNocm9ub3VzbHlcblx0XHRcdFx0YVJlcXVlc3RQcm9taXNlcy5wdXNoKENvbW1vblV0aWxzLnJlcXVlc3RQcm9wZXJ0eShvU2VsZWN0ZWRDb250ZXh0LCBzQWN0aW9uLCBzUHJvcGVydHksIHNEeW5hbWljQWN0aW9uRW5hYmxlZFBhdGgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFSZXF1ZXN0UHJvbWlzZXM7XG5cdH1cbn07XG5leHBvcnQgZGVmYXVsdCBBY3Rpb25SdW50aW1lO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztFQXlDQSxNQUFNQSxhQUFhLEdBQUc7SUFDckI7QUFDRDtBQUNBO0FBQ0E7SUFDQ0MsNkJBQTZCLEVBQUUsU0FBQUEsQ0FBVUMsaUJBQWtGLEVBQVE7TUFDbElDLFNBQVMsQ0FBQ0MsV0FBVyxDQUNwQkYsaUJBQWlCLENBQUNHLEdBQUcsQ0FBRUMsZ0JBQWdCLElBQUs7UUFDM0MsTUFBTUMsT0FBTyxHQUFHRCxnQkFBZ0IsQ0FBQ0UsbUJBQW1CLENBQUNDLEtBQUssQ0FBQ0MsVUFBVSxDQUNwRUosZ0JBQWdCLENBQUNFLG1CQUFtQixDQUFDRyxZQUFZLEdBQUcsT0FBTyxHQUFHLE9BQy9ELENBQUM7UUFD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
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import Log from "sap/base/Log";
|
|
1
|
+
import type { ActionParameter as EdmActionParameter, PrimitiveType } from "@sap-ux/vocabularies-types";
|
|
3
2
|
import merge from "sap/base/util/merge";
|
|
4
3
|
import type { PathInModelExpression } from "sap/fe/base/BindingToolkit";
|
|
5
|
-
import {
|
|
4
|
+
import { compileExpression, constant, equal, transformRecursively } from "sap/fe/base/BindingToolkit";
|
|
6
5
|
import type { FEView } from "sap/fe/core/BaseController";
|
|
7
6
|
import type { _RequestedProperty } from "sap/fe/core/CommonUtils";
|
|
8
7
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
9
8
|
import type ResourceModel from "sap/fe/core/ResourceModel";
|
|
10
|
-
import Any from "sap/fe/core/controls/Any";
|
|
11
9
|
import type { InternalModelContext } from "sap/fe/core/helpers/ModelHelper";
|
|
12
10
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
13
11
|
import { isEntitySet } from "sap/fe/core/helpers/TypeGuards";
|
|
14
|
-
import
|
|
12
|
+
import type TableAPI from "sap/fe/macros/table/TableAPI";
|
|
15
13
|
import type Label from "sap/m/Label";
|
|
16
14
|
import type Event from "sap/ui/base/Event";
|
|
17
15
|
import Messaging from "sap/ui/core/Messaging";
|
|
@@ -25,18 +23,17 @@ import type MultiValueFieldItem from "sap/ui/mdc/field/MultiValueFieldItem";
|
|
|
25
23
|
import type PropertyBinding from "sap/ui/model/PropertyBinding";
|
|
26
24
|
import type Context from "sap/ui/model/odata/v4/Context";
|
|
27
25
|
import type ODataListBinding from "sap/ui/model/odata/v4/ODataListBinding";
|
|
28
|
-
import type
|
|
26
|
+
import type FileUploader from "sap/ui/unified/FileUploader";
|
|
29
27
|
import AnyElement from "./controls/AnyElement";
|
|
30
28
|
import ConverterContext from "./converters/ConverterContext";
|
|
31
29
|
import type { BaseManifestSettings } from "./converters/ManifestSettings";
|
|
32
|
-
import { convertTypes } from "./converters/MetaModelConverter";
|
|
33
30
|
import { getEditButtonEnabled, getHiddenExpression } from "./converters/objectPage/HeaderAndFooterAction";
|
|
34
31
|
|
|
35
32
|
export type ActionParameterInfo = {
|
|
36
33
|
parameter?: EdmActionParameter;
|
|
37
|
-
field: Field | MultiValueField;
|
|
34
|
+
field: Field | MultiValueField | FileUploader;
|
|
38
35
|
isMultiValue: boolean;
|
|
39
|
-
value?: string | MultiValueFieldItem[]
|
|
36
|
+
value?: string | MultiValueFieldItem[] | Record<string, string>;
|
|
40
37
|
validationPromise?: Promise<string | MultiValueFieldItem[]>;
|
|
41
38
|
hasError: boolean;
|
|
42
39
|
propertyPath?: string;
|
|
@@ -78,7 +75,12 @@ const ActionRuntime = {
|
|
|
78
75
|
)
|
|
79
76
|
);
|
|
80
77
|
|
|
81
|
-
const requiredParameterInfos = actionParameterInfos.filter(
|
|
78
|
+
const requiredParameterInfos = actionParameterInfos.filter(
|
|
79
|
+
(parameterInfo) =>
|
|
80
|
+
(parameterInfo.field as Field | MultiValueField).getRequired &&
|
|
81
|
+
(parameterInfo.field as Field | MultiValueField).getRequired()
|
|
82
|
+
);
|
|
83
|
+
|
|
82
84
|
const allMessages = Messaging.getMessageModel().getData();
|
|
83
85
|
const emptyRequiredFields = requiredParameterInfos.filter((requiredParameterInfo) => {
|
|
84
86
|
const fieldId = requiredParameterInfo.field.getId();
|
|
@@ -211,9 +213,10 @@ const ActionRuntime = {
|
|
|
211
213
|
if (oTable && oTable.isA<Table>("sap.ui.mdc.Table")) {
|
|
212
214
|
const oRowBinding = oTable.getRowBinding();
|
|
213
215
|
if (oRowBinding == oListBinding) {
|
|
216
|
+
const tableAPI = oTable.getParent() as TableAPI;
|
|
214
217
|
ActionRuntime.setActionEnablement(
|
|
215
218
|
oTable.getBindingContext("internal") as InternalModelContext,
|
|
216
|
-
JSON.parse(
|
|
219
|
+
JSON.parse(tableAPI.tableDefinition.operationAvailableMap),
|
|
217
220
|
oTable.getSelectedContexts() as Context[],
|
|
218
221
|
"table"
|
|
219
222
|
);
|
|
@@ -358,60 +361,6 @@ const ActionRuntime = {
|
|
|
358
361
|
}
|
|
359
362
|
}
|
|
360
363
|
return aRequestPromises;
|
|
361
|
-
},
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* Check if action is critical.
|
|
365
|
-
* @param metaModel MetaModel
|
|
366
|
-
* @param path Path to the action
|
|
367
|
-
* @param contexts Contexts in case of bound actions.
|
|
368
|
-
* @returns Boolean indicating action is critical
|
|
369
|
-
*/
|
|
370
|
-
getIsActionCritical: async function (metaModel: ODataMetaModel, path: string, contexts: Context[] = []): Promise<boolean> {
|
|
371
|
-
// default is true.
|
|
372
|
-
let isActionCriticalValue: boolean | Promise<boolean> = true;
|
|
373
|
-
const convertedTypes = convertTypes(metaModel);
|
|
374
|
-
const actionTargetResolution = convertedTypes.resolvePath<EdmAction>(path);
|
|
375
|
-
const actionTarget = actionTargetResolution.target;
|
|
376
|
-
if (!actionTarget) {
|
|
377
|
-
return isActionCriticalValue;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
const isActionCriticalBindingExp = getIsActionCriticalExpression(actionTarget, convertedTypes);
|
|
381
|
-
|
|
382
|
-
if (isConstant(isActionCriticalBindingExp)) {
|
|
383
|
-
// Constant expression resolves to "true" or "false". But, we need boolean.
|
|
384
|
-
isActionCriticalValue = compileConstant(isActionCriticalBindingExp, false, undefined, true) as boolean;
|
|
385
|
-
} else if (contexts.length > 0) {
|
|
386
|
-
// We evaluate the value of the expression via a UI5 managed object instance.
|
|
387
|
-
isActionCriticalValue = new Promise((resolve) => {
|
|
388
|
-
try {
|
|
389
|
-
// Creating Binding to resolve
|
|
390
|
-
const anyObject = new Any({ anyBoolean: compileExpression(isActionCriticalBindingExp) });
|
|
391
|
-
anyObject.setModel(contexts[0].getModel());
|
|
392
|
-
|
|
393
|
-
// Attaching change events
|
|
394
|
-
const booleanBinding = anyObject.getBinding("anyBoolean") as PropertyBinding;
|
|
395
|
-
const fnChange = function (): void {
|
|
396
|
-
const valueExt = booleanBinding.getExternalValue();
|
|
397
|
-
anyObject.destroy();
|
|
398
|
-
resolve(valueExt);
|
|
399
|
-
};
|
|
400
|
-
booleanBinding.attachEventOnce("change", fnChange);
|
|
401
|
-
|
|
402
|
-
// setting binding context to trigger the binding resolution
|
|
403
|
-
anyObject.setBindingContext(contexts[0]);
|
|
404
|
-
} catch (err: unknown) {
|
|
405
|
-
// error while creating or resolving the binding
|
|
406
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
407
|
-
Log.error(`FE : Actions : Error while resolving IsActionCritical for ${path} : ${message}`);
|
|
408
|
-
// On the safe side, we shall return action is critical if value couldn't be determined.
|
|
409
|
-
resolve(true);
|
|
410
|
-
}
|
|
411
|
-
});
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
return isActionCriticalValue;
|
|
415
364
|
}
|
|
416
365
|
};
|
|
417
366
|
export default ActionRuntime;
|