@sapui5/sap.fe.core 1.136.1 → 1.138.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 +76 -28
- package/src/sap/fe/core/ActionRuntime.ts +106 -30
- package/src/sap/fe/core/AppComponent.js +11 -1
- package/src/sap/fe/core/AppComponent.ts +10 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -2
- package/src/sap/fe/core/AppStateHandler.ts +8 -2
- package/src/sap/fe/core/CommonUtils.js +15 -3
- package/src/sap/fe/core/CommonUtils.ts +13 -2
- package/src/sap/fe/core/PageController.controller.js +10 -0
- package/src/sap/fe/core/PageController.controller.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -4
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +3 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +2 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -12
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -16
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -1
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1 -0
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
- package/src/sap/fe/core/controllerextensions/Paginator.js +20 -5
- package/src/sap/fe/core/controllerextensions/Paginator.ts +19 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +4 -2
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +178 -125
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +222 -174
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +5 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -3
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +39 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +51 -11
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +17 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +88 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +106 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +16 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +15 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +25 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +24 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +11 -8
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +13 -10
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -4
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +7 -3
- package/src/sap/fe/core/controls/DataWatcher.js +2 -2
- package/src/sap/fe/core/controls/DataWatcher.tsx +1 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +11 -6
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +13 -9
- package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +3 -2
- package/src/sap/fe/core/converters/MetaModelConverter.ts +12 -4
- package/src/sap/fe/core/converters/controls/Common/Action.js +42 -5
- package/src/sap/fe/core/converters/controls/Common/Action.ts +42 -5
- package/src/sap/fe/core/converters/controls/Common/Chart.js +4 -1
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +46 -13
- package/src/sap/fe/core/converters/controls/Common/Table.ts +50 -11
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +11 -10
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +13 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +2 -2
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +2 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +9 -9
- package/src/sap/fe/core/helpers/DeleteHelper.ts +8 -9
- package/src/sap/fe/core/helpers/FPMHelper.js +2 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +8 -4
- package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
- package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
- package/src/sap/fe/core/library.js +33 -4
- package/src/sap/fe/core/library.ts +33 -2
- package/src/sap/fe/core/messagebundle.properties +18 -2
- package/src/sap/fe/core/messagebundle_ar.properties +3 -2
- package/src/sap/fe/core/messagebundle_bg.properties +2 -1
- package/src/sap/fe/core/messagebundle_ca.properties +2 -1
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
- package/src/sap/fe/core/messagebundle_cs.properties +4 -3
- package/src/sap/fe/core/messagebundle_cy.properties +2 -1
- package/src/sap/fe/core/messagebundle_da.properties +2 -1
- package/src/sap/fe/core/messagebundle_de.properties +8 -7
- package/src/sap/fe/core/messagebundle_el.properties +2 -1
- package/src/sap/fe/core/messagebundle_en.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -1
- package/src/sap/fe/core/messagebundle_es.properties +5 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
- package/src/sap/fe/core/messagebundle_et.properties +2 -1
- package/src/sap/fe/core/messagebundle_fi.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -1
- package/src/sap/fe/core/messagebundle_hr.properties +2 -1
- package/src/sap/fe/core/messagebundle_hu.properties +2 -1
- package/src/sap/fe/core/messagebundle_id.properties +2 -1
- package/src/sap/fe/core/messagebundle_it.properties +2 -1
- package/src/sap/fe/core/messagebundle_iw.properties +2 -1
- package/src/sap/fe/core/messagebundle_ja.properties +3 -2
- package/src/sap/fe/core/messagebundle_kk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ko.properties +2 -1
- package/src/sap/fe/core/messagebundle_lt.properties +2 -1
- package/src/sap/fe/core/messagebundle_lv.properties +2 -1
- package/src/sap/fe/core/messagebundle_mk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ms.properties +2 -1
- package/src/sap/fe/core/messagebundle_nl.properties +2 -1
- package/src/sap/fe/core/messagebundle_no.properties +3 -2
- package/src/sap/fe/core/messagebundle_pl.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
- package/src/sap/fe/core/messagebundle_ro.properties +2 -1
- package/src/sap/fe/core/messagebundle_ru.properties +2 -1
- package/src/sap/fe/core/messagebundle_sh.properties +2 -1
- package/src/sap/fe/core/messagebundle_sk.properties +2 -1
- package/src/sap/fe/core/messagebundle_sl.properties +2 -1
- package/src/sap/fe/core/messagebundle_sr.properties +2 -1
- package/src/sap/fe/core/messagebundle_sv.properties +2 -1
- package/src/sap/fe/core/messagebundle_th.properties +2 -1
- package/src/sap/fe/core/messagebundle_tr.properties +2 -1
- package/src/sap/fe/core/messagebundle_uk.properties +2 -1
- package/src/sap/fe/core/messagebundle_vi.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
- package/src/sap/fe/core/rootView/RootViewBaseController.js +6 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +5 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -3
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -1
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -0
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
- package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
- package/src/sap/fe/core/templating/UIFormatters.js +3 -3
- package/src/sap/fe/core/templating/UIFormatters.ts +1 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +0 -81
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +0 -126
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +0 -10
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +0 -2
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
|
@@ -328,11 +328,15 @@ class EditFlow extends BaseControllerExtension {
|
|
|
328
328
|
BusyLocker.lock(lockObject);
|
|
329
329
|
|
|
330
330
|
try {
|
|
331
|
+
const deleted = await this.deleteDocumentTransaction(contextsToDelete, parameters);
|
|
332
|
+
if (!deleted) {
|
|
333
|
+
// The delete was cancelled
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
|
|
331
337
|
if (this.getProgrammingModel(parameters?.selectedContexts?.[0] ?? contextsToDelete[0]) === ProgrammingModel.Sticky) {
|
|
332
338
|
this.setDocumentModified(true);
|
|
333
339
|
}
|
|
334
|
-
await this.deleteDocumentTransaction(contextsToDelete, parameters);
|
|
335
|
-
|
|
336
340
|
let result;
|
|
337
341
|
|
|
338
342
|
// Multiple object deletion is triggered from a list
|
|
@@ -525,7 +529,6 @@ class EditFlow extends BaseControllerExtension {
|
|
|
525
529
|
): Promise<void> {
|
|
526
530
|
let oDataListBinding!: ODataListBinding;
|
|
527
531
|
let parentContext: ODataV4Context | undefined;
|
|
528
|
-
|
|
529
532
|
const dataModel = this.getView().getModel();
|
|
530
533
|
let selectedProperties: string | undefined;
|
|
531
534
|
if (dataModel && ModelHelper.isCollaborationDraftSupported(dataModel.getMetaModel())) {
|
|
@@ -1610,7 +1613,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1610
1613
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1611
1614
|
* @param _mParameters Object containing the parameters passed to onAfterSave
|
|
1612
1615
|
* @param _mParameters.context The context we obtained after saving
|
|
1613
|
-
* @returns A promise to be returned by the overridden method.
|
|
1616
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1614
1617
|
* @public
|
|
1615
1618
|
* @since 1.116.0
|
|
1616
1619
|
*/
|
|
@@ -1629,7 +1632,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1629
1632
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1630
1633
|
* @param _mParameters Object containing the parameters passed to onAfterCreate
|
|
1631
1634
|
* @param _mParameters.context The newly created context
|
|
1632
|
-
* @returns A promise to be returned by the overridden method.
|
|
1635
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1633
1636
|
* @public
|
|
1634
1637
|
* @since 1.116.0
|
|
1635
1638
|
*/
|
|
@@ -1648,7 +1651,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1648
1651
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1649
1652
|
* @param _mParameters Object containing the parameters passed to onAfterEdit
|
|
1650
1653
|
* @param _mParameters.context Page context that is going to be edited.
|
|
1651
|
-
* @returns A promise to be returned by the overridden method.
|
|
1654
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1652
1655
|
* @public
|
|
1653
1656
|
* @since 1.116.0
|
|
1654
1657
|
*/
|
|
@@ -1667,7 +1670,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1667
1670
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1668
1671
|
* @param _mParameters Object containing the parameters passed to onAfterDiscard
|
|
1669
1672
|
* @param _mParameters.context The context obtained after discarding the object, or undefined if we discarded a new object
|
|
1670
|
-
* @returns A promise to be returned by the overridden method.
|
|
1673
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1671
1674
|
* @public
|
|
1672
1675
|
* @since 1.116.0
|
|
1673
1676
|
*/
|
|
@@ -1686,7 +1689,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1686
1689
|
* The override execution is: {@link sap.ui.core.mvc.OverrideExecution.After}.
|
|
1687
1690
|
* @param _mParameters Object containing the parameters passed to onAfterDelete
|
|
1688
1691
|
* @param _mParameters.contexts An array of contexts that are going to be deleted
|
|
1689
|
-
* @returns A promise to be returned by the overridden method.
|
|
1692
|
+
* @returns A promise to be returned by the overridden method. If rejected, any further processing by the framework is stopped.
|
|
1690
1693
|
* @public
|
|
1691
1694
|
* @since 1.116.0
|
|
1692
1695
|
*/
|
|
@@ -1922,6 +1925,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
1922
1925
|
|
|
1923
1926
|
let siblingInfo: SiblingInformation | undefined;
|
|
1924
1927
|
let isNewDocument = false;
|
|
1928
|
+
mParameters.skipDiscardPopover = this._hiddenDraft?.enabled ? true : mParameters.skipDiscardPopover;
|
|
1925
1929
|
const cancelParameters: CancelParameters = {
|
|
1926
1930
|
skipDiscardPopover: mParameters.skipDiscardPopover === true,
|
|
1927
1931
|
cancelButton: (mParameters.control || mParameters.cancelButton)!,
|
|
@@ -2044,7 +2048,9 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2044
2048
|
|
|
2045
2049
|
async isRootContextNew(context: Context): Promise<boolean> {
|
|
2046
2050
|
const rootContext = await this.getRootContext(context, { $select: "HasActiveEntity,IsActiveEntity" });
|
|
2047
|
-
|
|
2051
|
+
// When we refresh the root context, it may not have the properties HasActiveEntity and IsActiveEntity yet, so we request them
|
|
2052
|
+
const draftProperties = await rootContext.requestProperty(["HasActiveEntity", "IsActiveEntity"]);
|
|
2053
|
+
return !draftProperties[0] && !draftProperties[1];
|
|
2048
2054
|
}
|
|
2049
2055
|
|
|
2050
2056
|
/**
|
|
@@ -2141,12 +2147,16 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2141
2147
|
};
|
|
2142
2148
|
}
|
|
2143
2149
|
|
|
2150
|
+
const deleted = await this.deleteDocumentTransaction(oContext, mParameters);
|
|
2151
|
+
if (!deleted) {
|
|
2152
|
+
// The delete was canceled by the user
|
|
2153
|
+
return;
|
|
2154
|
+
}
|
|
2155
|
+
|
|
2144
2156
|
if (this.getProgrammingModel(oContext) === ProgrammingModel.Sticky) {
|
|
2145
2157
|
this.setDocumentModified(true);
|
|
2146
2158
|
}
|
|
2147
2159
|
|
|
2148
|
-
await this.deleteDocumentTransaction(oContext, mParameters);
|
|
2149
|
-
|
|
2150
2160
|
// Single objet deletion is triggered from an OP header button (not from a list)
|
|
2151
2161
|
// --> Mark UI dirty and navigate back to dismiss the OP
|
|
2152
2162
|
if (!this._isFclEnabled()) {
|
|
@@ -2725,15 +2735,15 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2725
2735
|
let forceDisplayMode = false;
|
|
2726
2736
|
const isActiveEntity = await context.requestObject("IsActiveEntity");
|
|
2727
2737
|
|
|
2728
|
-
if (isCollaborationDraftSupported
|
|
2738
|
+
if (isCollaborationDraftSupported) {
|
|
2729
2739
|
forceDisplayMode = !(await this.base.collaborativeDraft.activateCollaboration(context, isActiveEntity));
|
|
2730
2740
|
} else {
|
|
2731
2741
|
globalModel.setProperty("/hasCollaborationAuthorization", undefined);
|
|
2732
2742
|
}
|
|
2733
2743
|
this.fetchCollaborativeDraftUsersPromise = undefined;
|
|
2734
|
-
|
|
2735
2744
|
if (isActiveEntity === false && !forceDisplayMode) {
|
|
2736
|
-
// in case the document is draft set it in edit mode
|
|
2745
|
+
// in case the document is draft, set it in edit mode
|
|
2746
|
+
// unless we don't have the authorization for a collaborative user
|
|
2737
2747
|
this.setEditMode(EditMode.Editable);
|
|
2738
2748
|
const hasActiveEntity = await context.requestObject("HasActiveEntity");
|
|
2739
2749
|
this.setEditMode(undefined, !hasActiveEntity);
|
|
@@ -2782,6 +2792,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2782
2792
|
* @param parameters.lockedContexts
|
|
2783
2793
|
* @param parameters.draftsWithDeletableActive
|
|
2784
2794
|
* @param parameters.draftsWithNonDeletableActive
|
|
2795
|
+
* @returns Promise resolves once the deletion is completed
|
|
2785
2796
|
*/
|
|
2786
2797
|
private async deleteDocumentTransaction(
|
|
2787
2798
|
contexts: Context | Context[],
|
|
@@ -2802,7 +2813,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2802
2813
|
draftsWithDeletableActive?: DraftSiblingPair[];
|
|
2803
2814
|
draftsWithNonDeletableActive?: Context[];
|
|
2804
2815
|
}
|
|
2805
|
-
): Promise<
|
|
2816
|
+
): Promise<boolean> {
|
|
2806
2817
|
if (parameters.selectedContexts) {
|
|
2807
2818
|
// as selected contexts may include inactive context we need to compute this parameter again to ensure delete helper works properly
|
|
2808
2819
|
parameters.numberOfSelectedContexts = parameters.selectedContexts.length;
|
|
@@ -2822,7 +2833,7 @@ class EditFlow extends BaseControllerExtension {
|
|
|
2822
2833
|
}
|
|
2823
2834
|
|
|
2824
2835
|
await this.syncTask();
|
|
2825
|
-
|
|
2836
|
+
return transactionHelper.deleteDocument(contexts, parameters, this.getAppComponent(), resourceModel, this.getMessageHandler());
|
|
2826
2837
|
}
|
|
2827
2838
|
|
|
2828
2839
|
_getResourceModel(): ResourceModel {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BaseControllerExtension", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/controls/inlineEditFlow/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BaseControllerExtension", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/TypeGuards", "sap/m/MessageToast", "sap/ui/core/Lib", "sap/ui/core/Messaging", "../controls/inlineEditFlow/DraftExistsDialog"], function (Log, ClassSupport, HookSupport, CommonUtils, BaseControllerExtension, messageHandling, InlineEditExitDialog, MetaModelConverter, TypeGuards, MessageToast, Lib, Messaging, DraftExistsDialog) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2;
|
|
@@ -244,6 +244,24 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
244
244
|
* @returns Promise that retruns true if we need to cancel navigation and stay in inline edit
|
|
245
245
|
*/;
|
|
246
246
|
_proto.onBeforeNavigation = async function onBeforeNavigation() {
|
|
247
|
+
try {
|
|
248
|
+
await this.onBeforeAnyEditFlowAction();
|
|
249
|
+
return false;
|
|
250
|
+
} catch (e) {
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Method to open the dialog before navigation.
|
|
257
|
+
* @returns Promise that returns the dialog choice once the user has clicked on ok or cancel
|
|
258
|
+
*/;
|
|
259
|
+
_proto.openInlineEditExitDialogAndWaitForResult = async function openInlineEditExitDialogAndWaitForResult() {
|
|
260
|
+
return new Promise(resolve => {
|
|
261
|
+
new InlineEditExitDialog(this.base.getView(), resolve).open();
|
|
262
|
+
});
|
|
263
|
+
};
|
|
264
|
+
_proto.onBeforeAnyEditFlowAction = async function onBeforeAnyEditFlowAction() {
|
|
247
265
|
if (this.inlineEditControls.length > 0) {
|
|
248
266
|
// there are controls in inline edit we need to prevent the navigation and show the dialog
|
|
249
267
|
this.preventFieldGroupChangeHandler = true;
|
|
@@ -254,13 +272,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
254
272
|
if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
|
|
255
273
|
// fields are in inline edit and there are no pending changes. We need to show the dialog
|
|
256
274
|
this.inlineEditEnd();
|
|
257
|
-
return
|
|
275
|
+
return;
|
|
258
276
|
}
|
|
259
277
|
try {
|
|
260
278
|
if (this.patchPromise) {
|
|
261
279
|
await this.patchPromise;
|
|
262
280
|
} else {
|
|
263
|
-
const dialogResult = await this.
|
|
281
|
+
const dialogResult = await this.openInlineEditExitDialogAndWaitForResult();
|
|
264
282
|
if (dialogResult === "Save") {
|
|
265
283
|
// we save and wait for the patchPromise
|
|
266
284
|
await this.inlineEditSave();
|
|
@@ -268,58 +286,26 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
268
286
|
// if after saves there are still changes this means save has failed. we need to cancel navigation
|
|
269
287
|
this.focusHandling(this.inlineEditControls[0]);
|
|
270
288
|
this.reactivateFieldGroupChangeHandler();
|
|
271
|
-
|
|
289
|
+
throw new Error("unsave change prevent execution");
|
|
272
290
|
}
|
|
273
291
|
} else if (dialogResult === "Cancel") {
|
|
274
292
|
this.focusHandling(this.inlineEditControls[0]);
|
|
275
293
|
this.reactivateFieldGroupChangeHandler();
|
|
276
|
-
|
|
294
|
+
throw new Error("cancel was chosen");
|
|
277
295
|
} else {
|
|
278
296
|
// we discard the changes
|
|
279
297
|
this.inlineEditDiscard();
|
|
280
298
|
}
|
|
281
299
|
this.reactivateFieldGroupChangeHandler();
|
|
282
|
-
return
|
|
300
|
+
return;
|
|
283
301
|
}
|
|
284
302
|
} catch (e) {
|
|
285
303
|
this.focusHandling(this.inlineEditControls[0]);
|
|
286
304
|
this.reactivateFieldGroupChangeHandler();
|
|
287
|
-
return
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
return false;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
/**
|
|
294
|
-
* Method to open the dialog before navigation.
|
|
295
|
-
* @returns Promise that returns the dialog choice once the user has clicked on ok or cancel
|
|
296
|
-
*/;
|
|
297
|
-
_proto.openInlineEditBeforeNavigationDialogAndWaitForResult = async function openInlineEditBeforeNavigationDialogAndWaitForResult() {
|
|
298
|
-
return new Promise(resolve => {
|
|
299
|
-
new BeforeNavigationDialog(this.base.getView(), resolve).open();
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
* Method to ensure we leave inline edit before any standard edit flowaction.
|
|
305
|
-
* @returns Promise that reject and triggers save or discard if we are in inline edit
|
|
306
|
-
*/;
|
|
307
|
-
_proto.onBeforeAnyEditFlowAction = async function onBeforeAnyEditFlowAction() {
|
|
308
|
-
if (this.inlineEditControls.length > 0) {
|
|
309
|
-
if (this.abortTimerBeforeSave) {
|
|
310
|
-
this.abortTimerBeforeSave();
|
|
311
|
-
this.abortTimerBeforeSave = undefined;
|
|
305
|
+
return Promise.reject();
|
|
312
306
|
}
|
|
313
|
-
if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
|
|
314
|
-
// fields are in inline edit and there are no pending changes. We don't need to show the dialog
|
|
315
|
-
this.inlineEditEnd();
|
|
316
|
-
return Promise.resolve();
|
|
317
|
-
}
|
|
318
|
-
new BeforeActionDialog(this.base.getView()).open();
|
|
319
|
-
// there are controls in inline edit we need to prevent the action and show the dialog
|
|
320
|
-
return Promise.reject();
|
|
321
307
|
}
|
|
322
|
-
return
|
|
308
|
+
return;
|
|
323
309
|
}
|
|
324
310
|
|
|
325
311
|
/**
|
|
@@ -386,4 +372,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupp
|
|
|
386
372
|
_exports = InlineEditFlow;
|
|
387
373
|
return _exports;
|
|
388
374
|
}, false);
|
|
389
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbmxpbmVFZGl0RmxvdyIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiaG9va2FibGUiLCJfZGVjMyIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQmFzZUNvbnRyb2xsZXJFeHRlbnMiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsImlubGluZUVkaXRDb250cm9scyIsInByZXZlbnRGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpc0lubGluZUVkaXRQb3NzaWJsZSIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRJbmxpbmVFZGl0U2VydmljZSIsImRvZXNQYWdlSGF2ZUlubGluZUVkaXQiLCJnZXRSb3V0aW5nVGFyZ2V0TmFtZSIsImlubGluZUVkaXRTYXZlIiwibW9kZWwiLCJnZXRWaWV3IiwiZ2V0TW9kZWwiLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJoYXNUZWNobmljYWxNZXNzYWdlcyIsInNvbWUiLCJtZXNzYWdlIiwibWVzc2FnZUhhbmRsaW5nIiwiaXNOb25UZWNobmljYWxNZXNzYWdlIiwic2V0U2hvd0Zvb3RlciIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiQ29tbW9uVXRpbHMiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCJpbmxpbmVFZGl0RW5kIiwicmVtb3ZlQWxsTWVzc2FnZXMiLCJzdWJtaXRCYXRjaCIsImVycm9yIiwiTG9nIiwid2FybmluZyIsImlubGluZUVkaXREaXNjYXJkIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaERlc2NyaXB0aW9uIiwiY29udHJvbCIsInNldFByb3BlcnR5Iiwic3RhcnRJbmxpbmVFZGl0IiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJiaW5kaW5nQ29udGV4dFBhdGgiLCJjb250cm9sVHJpZ2dlciIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJEcmFmdEV4aXN0c0RpYWxvZyIsIm9wZW4iLCJyZXNldEluZGljYXRvclBvcHVwIiwiaW5saW5lRWRpdFNlcnZpY2UiLCJkZXBlbmRlbnRQcm9wZXJ0aWVzIiwiZ2V0SW5saW5lQ29ubmVjdGVkUHJvcGVydGllcyIsImlubGluZUVkaXRTdGFydCIsImZvY3VzSGFuZGxpbmciLCJpbmxpbmVFZGl0Q29udHJvbCIsImNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUiLCJmb2N1cyIsInByb3BlcnRpZXMiLCJhYm9ydFRpbWVyQmVmb3JlU2F2ZSIsInVuZGVmaW5lZCIsImFscmVhZHlSZWdpc3RlcmVkQ29udHJvbHMiLCJtYXAiLCJnZXRJZCIsImluY2x1ZGVzIiwicHVzaCIsImlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgiLCJpc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQiLCJoYW5kbGVJbmxpbmVFZGl0UGF0Y2hTZW50IiwiZXZlbnQiLCJwYXRjaFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImdldFNvdXJjZSIsImF0dGFjaEV2ZW50T25jZSIsInBhdGNoQ29tcGxldGVkRXZlbnQiLCJiU3VjY2VzcyIsImdldFBhcmFtZXRlciIsInJlc291cmNlQnVuZGxlIiwiTGliIiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0VGV4dCIsImhhbmRsZUlubGluZUVkaXRTYXZlRmFpbGVkIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicHJvcGFnYXRlSW5saW5lRmllbGRHcm91cElkVG9NZXNzYWdlQnV0dG9uIiwidGFyZ2V0IiwiZ2V0VGFyZ2V0cyIsInRhcmdldE1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRNZXRhUGF0aCIsIm1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJpc1Byb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RnVsbHlRdWFsaWZpZWROYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZGVsYXllZENhbGxUb1NhdmUiLCJ0aW1lckJlZm9yZVNhdmUiLCJzZXRUaW1lb3V0IiwiZSIsInJlYWN0aXZhdGVGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciIsIm9uQmVmb3JlTmF2aWdhdGlvbiIsImRpYWxvZ1Jlc3VsdCIsIm9wZW5JbmxpbmVFZGl0QmVmb3JlTmF2aWdhdGlvbkRpYWxvZ0FuZFdhaXRGb3JSZXN1bHQiLCJCZWZvcmVOYXZpZ2F0aW9uRGlhbG9nIiwib25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbiIsIkJlZm9yZUFjdGlvbkRpYWxvZyIsIm9uQmVmb3JlQmluZGluZyIsIm9uQmVmb3JlRWRpdCIsIm9uQmVmb3JlQ3JlYXRlIiwib25CZWZvcmVEZWxldGUiLCJvbkJlZm9yZUV4ZWN1dGVBY3Rpb24iLCJmb290ZXJDb250cm9scyIsImdldEZvb3RlciIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJpc0EiLCJjaGlsZEZpZWxkR3JvdXBJZHMiLCJTZXQiLCJnZXRGaWVsZEdyb3VwSWRzIiwiYWRkIiwic2V0RmllbGRHcm91cElkcyIsImZyb20iLCJCYXNlQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIklubGluZUVkaXRGbG93LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIG1ldGhvZE92ZXJyaWRlLCB0eXBlIEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgaG9va2FibGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgQmVmb3JlQWN0aW9uRGlhbG9nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9pbmxpbmVFZGl0Rmxvdy9CZWZvcmVBY3Rpb25EaWFsb2dcIjtcbmltcG9ydCBCZWZvcmVOYXZpZ2F0aW9uRGlhbG9nLCB7IHR5cGUgRElBTE9HUkVTVUxUIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL2lubGluZUVkaXRGbG93L0JlZm9yZU5hdmlnYXRpb25EaWFsb2dcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgSW5saW5lRWRpdCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbmxpbmVFZGl0L0lubGluZUVkaXRcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IE9EYXRhQ29udGV4dEJpbmRpbmckUGF0Y2hTZW50RXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBEcmFmdEV4aXN0c0RpYWxvZyBmcm9tIFwiLi4vY29udHJvbHMvaW5saW5lRWRpdEZsb3cvRHJhZnRFeGlzdHNEaWFsb2dcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW5saW5lRWRpdEZsb3dcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElubGluZUVkaXRGbG93IGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgaW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10gPSBbXTtcblxuXHRwcml2YXRlIGlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBhYm9ydFRpbWVyQmVmb3JlU2F2ZT86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgcGF0Y2hQcm9taXNlPzogUHJvbWlzZTxVSTVFdmVudD47XG5cblx0cHJpdmF0ZSBwcmV2ZW50RmllbGRHcm91cENoYW5nZUhhbmRsZXIgPSBmYWxzZTtcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgdGhlcmUgY2FuIGJlIGlubGluZSBlZGl0IG9uIHRoZSBwYWdlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGlubGluZSBlZGl0IGlzIHBvc3NpYmxlXG5cdCAqL1xuXHRpc0lubGluZUVkaXRQb3NzaWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldElubGluZUVkaXRTZXJ2aWNlKCkuZG9lc1BhZ2VIYXZlSW5saW5lRWRpdCh0aGlzLmJhc2UuZ2V0Um91dGluZ1RhcmdldE5hbWUoKSk7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZSB0aGUgaW5saW5lIGVkaXQgY2hhbmdlcy5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZWQgb25jZSB0aGUgYmF0Y2ggaGFzIHJldHVybmVkLlxuXHQgKi9cblx0YXN5bmMgaW5saW5lRWRpdFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCk7XG5cblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgaGFzVGVjaG5pY2FsTWVzc2FnZXMgPSBtZXNzYWdlcy5zb21lKChtZXNzYWdlOiBNZXNzYWdlKSA9PiAhbWVzc2FnZUhhbmRsaW5nLmlzTm9uVGVjaG5pY2FsTWVzc2FnZShtZXNzYWdlKSk7XG5cdFx0aWYgKGhhc1RlY2huaWNhbE1lc3NhZ2VzKSB7XG5cdFx0XHR0aGlzLmJhc2Uuc2V0U2hvd0Zvb3Rlcih0cnVlKTtcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBpbnZhbGlkIHR5cGVzIHdlIHNob3VsZCBub3QgdHJ5IHRvIHNhdmVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFtb2RlbC5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVBbGxNZXNzYWdlcygpO1xuXHRcdFx0YXdhaXQgbW9kZWwuc3VibWl0QmF0Y2goQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBzYXZpbmcgaW5saW5lIGVkaXQgY2hhbmdlc1wiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzY2FyZCB0aGUgaW5saW5lIGVkaXQgY2hhbmdlcy5cblx0ICovXG5cdGlubGluZUVkaXREaXNjYXJkKCk6IHZvaWQge1xuXHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMoQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR0aGlzLmlubGluZUVkaXRFbmQodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRW5kIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIHJlZnJlc2hEZXNjcmlwdGlvblxuXHQgKi9cblx0aW5saW5lRWRpdEVuZChyZWZyZXNoRGVzY3JpcHRpb24/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZUFsbE1lc3NhZ2VzKCk7XG5cdFx0dGhpcy5iYXNlLnNldFNob3dGb290ZXIoZmFsc2UpO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmlubGluZUVkaXRDb250cm9scykge1xuXHRcdFx0KGNvbnRyb2wgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCkuaW5saW5lRWRpdEVuZChyZWZyZXNoRGVzY3JpcHRpb24pO1xuXHRcdH1cblx0XHR0aGlzLmlubGluZUVkaXRDb250cm9scyA9IFtdO1xuXHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRBY3RpdmVcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHRoZSBpbmxpbmUgZWRpdCBvbiB0aGUgYmluZGluZ0NvbnRleHRQYXRoIGZvciB0aGUgcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoXG5cdCAqIEBwYXJhbSBjb250cm9sVHJpZ2dlclxuXHQgKi9cblx0c3RhcnRJbmxpbmVFZGl0KFxuXHRcdHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcsXG5cdFx0YmluZGluZ0NvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0Y29udHJvbFRyaWdnZXI/OiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0XG5cdCk6IHZvaWQge1xuXHRcdGlmIChjb250cm9sVHJpZ2dlcj8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSkge1xuXHRcdFx0Ly8gdGhlcmUgaXMgYWxyZWFkeSBhIGRyYWZ0IG9uIHRoZSBlbnRpdHkuIFdlIHNob3VsZCBub3Qgc3RhcnQgaW5saW5lIGVkaXRcblx0XHRcdG5ldyBEcmFmdEV4aXN0c0RpYWxvZyh0aGlzLmJhc2UuZ2V0VmlldygpKS5vcGVuKCk7XG5cdFx0XHRjb250cm9sVHJpZ2dlcj8ucmVzZXRJbmRpY2F0b3JQb3B1cCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBpbmxpbmVFZGl0U2VydmljZSA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRJbmxpbmVFZGl0U2VydmljZSgpO1xuXHRcdGNvbnN0IGRlcGVuZGVudFByb3BlcnRpZXMgPSBpbmxpbmVFZGl0U2VydmljZS5nZXRJbmxpbmVDb25uZWN0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0dGhpcy5iYXNlLmdldFJvdXRpbmdUYXJnZXROYW1lKCksXG5cdFx0XHRwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdCk7XG5cblx0XHR0aGlzLmlubGluZUVkaXRTdGFydChbXSwgZGVwZW5kZW50UHJvcGVydGllcz8ubGVuZ3RoID8gZGVwZW5kZW50UHJvcGVydGllcyA6IFtwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZV0sIGJpbmRpbmdDb250ZXh0UGF0aCk7XG5cdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEFjdGl2ZVwiLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGluZyBmb3IgaW5saW5lIGVkaXQuIFdoZW4gb25lIGZpZWxkIGdldHMgZm9jdXMsIGFsbCBvdGhlciBpbmxpbmUgZWRpdCBwb3B1cHMsIHRoYXQgYXJlIGN1cnJlbnRseSBvcGVuZWQsIHNob3VsZCBiZSBjbG9zZWQuXG5cdCAqIEBwYXJhbSBpbmxpbmVFZGl0Q29udHJvbCBDb250cm9scyB3aGljaCBhcmUgY3VycmVudGx5IGluIGlubGluZSBlZGl0IG1vZGUuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nKGlubGluZUVkaXRDb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5saW5lRWRpdENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoY29udHJvbCAhPT0gaW5saW5lRWRpdENvbnRyb2wpIHtcblx0XHRcdFx0KGNvbnRyb2wgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCkuY2xvc2VJbmxpbmVFZGl0UG9wdXBFZGl0TW9kZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sID09PSBpbmxpbmVFZGl0Q29udHJvbCkge1xuXHRcdFx0XHRjb250cm9sLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpcm0gdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgZWRpdCBvbiB0aGUgYmluZGluZ0NvbnRleHRQYXRoIGZvciB0aGUgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGlubGluZUVkaXRDb250cm9scyBUaGUgZmllbGRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBpbmxpbmUgZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllc1xuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoXG5cdCAqL1xuXHRAaG9va2FibGUoXCJCZWZvcmVcIilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhc3luYyBpbmxpbmVFZGl0U3RhcnQoaW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10sIHByb3BlcnRpZXM6IHN0cmluZ1tdLCBiaW5kaW5nQ29udGV4dFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyAgYSB0aW1lciB0byBzYXZlXG5cdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKCk7XG5cdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlID0gdW5kZWZpbmVkO1xuXHRcdFx0YXdhaXQgdGhpcy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCBhbHJlYWR5UmVnaXN0ZXJlZENvbnRyb2xzID0gdGhpcy5pbmxpbmVFZGl0Q29udHJvbHMubWFwKChjb250cm9sOiBDb250cm9sKSA9PiBjb250cm9sLmdldElkKCkpO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBpbmxpbmVFZGl0Q29udHJvbHMpIHtcblx0XHRcdGlmICghYWxyZWFkeVJlZ2lzdGVyZWRDb250cm9scy5pbmNsdWRlcyhjb250cm9sLmdldElkKCkpKSB7XG5cdFx0XHRcdHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLnB1c2goY29udHJvbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaW5saW5lRWRpdEJpbmRpbmdDb250ZXh0UGF0aCA9IGJpbmRpbmdDb250ZXh0UGF0aDtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lXG5cdCAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgcHJvcGVydHkgaXMgY29uc2lkZXJlZCBmb3IgSW5saW5lIGVkaXQuXG5cdCAqL1xuXHRpc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJhc2Vcblx0XHRcdC5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0LmdldElubGluZUVkaXRTZXJ2aWNlKClcblx0XHRcdC5pc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQodGhpcy5iYXNlLmdldFJvdXRpbmdUYXJnZXROYW1lKCksIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBwYXRjaFNlbnQgZXZlbnQ6IGhhbmRsZSBpbmxpbmUgZWRpdCBzYXZlIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBzZW50IGJ5IHRoZSBiaW5kaW5nXG5cdCAqL1xuXHRhc3luYyBoYW5kbGVJbmxpbmVFZGl0UGF0Y2hTZW50KGV2ZW50OiBPRGF0YUNvbnRleHRCaW5kaW5nJFBhdGNoU2VudEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gaWYgdGhlcmUgYXJlIG5vIGlubGluZSBlZGl0IGNvbnRyb2xzLCB0aGlzIG1heSBoYXZlIGJlZW4gdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBlbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5wYXRjaFByb21pc2UgPSBuZXcgUHJvbWlzZTxVSTVFdmVudD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0ZXZlbnQuZ2V0U291cmNlKCkuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgKHBhdGNoQ29tcGxldGVkRXZlbnQ6IFVJNUV2ZW50PHsgc3VjY2VzczogYm9vbGVhbiB9PikgPT4ge1xuXHRcdFx0XHRjb25zdCBiU3VjY2VzcyA9IHBhdGNoQ29tcGxldGVkRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3VjY2Vzc1wiKTtcblx0XHRcdFx0aWYgKGJTdWNjZXNzKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShwYXRjaENvbXBsZXRlZEV2ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZWplY3QocGF0Y2hDb21wbGV0ZWRFdmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLnBhdGNoUHJvbWlzZTtcblx0XHRcdHRoaXMucGF0Y2hQcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKTtcblx0XHRcdGlmIChyZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19JTkxJTkVfRURJVF9TQVZFRFwiKSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHR9IGNhdGNoIChwYXRjaENvbXBsZXRlZEV2ZW50KSB7XG5cdFx0XHR0aGlzLnBhdGNoUHJvbWlzZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuaGFuZGxlSW5saW5lRWRpdFNhdmVGYWlsZWQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIGVycm9ycyB3aGVuIHRoZSBpbmxpbmUgZWRpdCBzYXZlIGZhaWxzLlxuXHQgKi9cblx0aGFuZGxlSW5saW5lRWRpdFNhdmVGYWlsZWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuYmFzZS5zZXRTaG93Rm9vdGVyKHRydWUpO1xuXHRcdFx0dGhpcy5wcm9wYWdhdGVJbmxpbmVGaWVsZEdyb3VwSWRUb01lc3NhZ2VCdXR0b24oKTtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRhcmdldCBvZiBtZXNzYWdlLmdldFRhcmdldHMoKSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRNZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGFyZ2V0KSk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgPSB0YXJnZXRNZXRhQ29udGV4dFxuXHRcdFx0XHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czx1bmtub3duPih0YXJnZXRNZXRhQ29udGV4dClcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRcdGlmIChpc1Byb3BlcnR5KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdCkpIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRGdWxseVF1YWxpZmllZE5hbWUgPVxuXHRcdFx0XHRcdFx0KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik/LnRhcmdldE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lID8/IFwiXCI7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3RhcnRJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSwgdGhpcy5pbmxpbmVFZGl0QmluZGluZ0NvbnRleHRQYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUGVyZm9ybXMgYSBkZWxheWVkQ2FsbCB3aGVuIHlvdSBmb2N1cyBvdXQgb2YgYSBmaWVsZC5cblx0ICovXG5cdGFzeW5jIGRlbGF5ZWRDYWxsVG9TYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlIHx8IHRoaXMucGF0Y2hQcm9taXNlIHx8IHRoaXMucHJldmVudEZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgdGltZXIgcnVubmluZyBvciBhIHNhdmUgaW4gcHJvY2VzcyBkbyBub3RoaW5nXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHRpbWVyQmVmb3JlU2F2ZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUgPSByZWplY3Q7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgNTAwKTtcblx0XHR9KTtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGltZXJCZWZvcmVTYXZlO1xuXHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuaW5saW5lRWRpdFNhdmUoKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBOb3RoaW5nIHRvIHNlZSBpdCBpcyBqdXN0IHNvbWVvbmUgdGhhdCBjYW5jZWxsZWQgdGhlIHRpbWVyXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZWFjdGl2YXRlIHRoZSBmaWVsZCBncm91cCBjaGFuZ2UgaGFuZGxlciBhZnRlciBhIGRlbGF5LlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZpZWxkIGdyb3VwIGNoYW5nZSBoYW5kbGVyIGlzIG5vdCB0cmlnZ2VyZWQgd2hpbGUgZm9jdXMgaXMgc2hpZnRpbmcgd2hlbiB3ZSBvcGVuIGEgZGlhbG9nLlxuXHQgKi9cblx0cmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5wcmV2ZW50RmllbGRHcm91cENoYW5nZUhhbmRsZXIgPSBmYWxzZTtcblx0XHR9LCA1MDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBlbnN1cmUgd2UgbGVhdmUgaW5saW5lIGVkaXQgYmVmb3JlIGFueSBuYXZpZ2F0aW9uLi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJldHJ1bnMgdHJ1ZSBpZiB3ZSBuZWVkIHRvIGNhbmNlbCBuYXZpZ2F0aW9uIGFuZCBzdGF5IGluIGlubGluZSBlZGl0XG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJyb3V0aW5nXCIpXG5cdGFzeW5jIG9uQmVmb3JlTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAodGhpcy5pbmxpbmVFZGl0Q29udHJvbHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gdGhlcmUgYXJlIGNvbnRyb2xzIGluIGlubGluZSBlZGl0IHdlIG5lZWQgdG8gcHJldmVudCB0aGUgbmF2aWdhdGlvbiBhbmQgc2hvdyB0aGUgZGlhbG9nXG5cdFx0XHR0aGlzLnByZXZlbnRGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciA9IHRydWU7XG5cdFx0XHRpZiAodGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSkge1xuXHRcdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKCk7XG5cdFx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHRcdC8vIGZpZWxkcyBhcmUgaW4gaW5saW5lIGVkaXQgYW5kIHRoZXJlIGFyZSBubyBwZW5kaW5nIGNoYW5nZXMuIFdlIG5lZWQgdG8gc2hvdyB0aGUgZGlhbG9nXG5cdFx0XHRcdHRoaXMuaW5saW5lRWRpdEVuZCgpO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAodGhpcy5wYXRjaFByb21pc2UpIHtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBhdGNoUHJvbWlzZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBkaWFsb2dSZXN1bHQgPSBhd2FpdCB0aGlzLm9wZW5JbmxpbmVFZGl0QmVmb3JlTmF2aWdhdGlvbkRpYWxvZ0FuZFdhaXRGb3JSZXN1bHQoKTtcblx0XHRcdFx0XHRpZiAoZGlhbG9nUmVzdWx0ID09PSBcIlNhdmVcIikge1xuXHRcdFx0XHRcdFx0Ly8gd2Ugc2F2ZSBhbmQgd2FpdCBmb3IgdGhlIHBhdGNoUHJvbWlzZVxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGlmIGFmdGVyIHNhdmVzIHRoZXJlIGFyZSBzdGlsbCBjaGFuZ2VzIHRoaXMgbWVhbnMgc2F2ZSBoYXMgZmFpbGVkLiB3ZSBuZWVkIHRvIGNhbmNlbCBuYXZpZ2F0aW9uXG5cdFx0XHRcdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZyh0aGlzLmlubGluZUVkaXRDb250cm9sc1swXSk7XG5cdFx0XHRcdFx0XHRcdHRoaXMucmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nUmVzdWx0ID09PSBcIkNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmZvY3VzSGFuZGxpbmcodGhpcy5pbmxpbmVFZGl0Q29udHJvbHNbMF0pO1xuXHRcdFx0XHRcdFx0dGhpcy5yZWFjdGl2YXRlRmllbGRHcm91cENoYW5nZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyB3ZSBkaXNjYXJkIHRoZSBjaGFuZ2VzXG5cdFx0XHRcdFx0XHR0aGlzLmlubGluZUVkaXREaXNjYXJkKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMucmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRoaXMuZm9jdXNIYW5kbGluZyh0aGlzLmlubGluZUVkaXRDb250cm9sc1swXSk7XG5cdFx0XHRcdHRoaXMucmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG9wZW4gdGhlIGRpYWxvZyBiZWZvcmUgbmF2aWdhdGlvbi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJldHVybnMgdGhlIGRpYWxvZyBjaG9pY2Ugb25jZSB0aGUgdXNlciBoYXMgY2xpY2tlZCBvbiBvayBvciBjYW5jZWxcblx0ICovXG5cdGFzeW5jIG9wZW5JbmxpbmVFZGl0QmVmb3JlTmF2aWdhdGlvbkRpYWxvZ0FuZFdhaXRGb3JSZXN1bHQoKTogUHJvbWlzZTxESUFMT0dSRVNVTFQ+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2U8RElBTE9HUkVTVUxUPigocmVzb2x2ZSkgPT4ge1xuXHRcdFx0bmV3IEJlZm9yZU5hdmlnYXRpb25EaWFsb2codGhpcy5iYXNlLmdldFZpZXcoKSwgcmVzb2x2ZSkub3BlbigpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBlbnN1cmUgd2UgbGVhdmUgaW5saW5lIGVkaXQgYmVmb3JlIGFueSBzdGFuZGFyZCBlZGl0IGZsb3dhY3Rpb24uXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgYW5kIHRyaWdnZXJzIHNhdmUgb3IgZGlzY2FyZCBpZiB3ZSBhcmUgaW4gaW5saW5lIGVkaXRcblx0ICovXG5cdGFzeW5jIG9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKSB7XG5cdFx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUoKTtcblx0XHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdFx0Ly8gZmllbGRzIGFyZSBpbiBpbmxpbmUgZWRpdCBhbmQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgY2hhbmdlcy4gV2UgZG9uJ3QgbmVlZCB0byBzaG93IHRoZSBkaWFsb2dcblx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0RW5kKCk7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH1cblx0XHRcdG5ldyBCZWZvcmVBY3Rpb25EaWFsb2codGhpcy5iYXNlLmdldFZpZXcoKSkub3BlbigpO1xuXHRcdFx0Ly8gdGhlcmUgYXJlIGNvbnRyb2xzIGluIGlubGluZSBlZGl0IHdlIG5lZWQgdG8gcHJldmVudCB0aGUgYWN0aW9uIGFuZCBzaG93IHRoZSBkaWFsb2dcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGVuc3VyZSB3ZSBzdGFydCB0aGUgcGFnZSB3aXRob3V0IGFueSB1bnNhdmVkIGlubGluZSBlZGl0IGNoYW5nZXMuXG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJfcm91dGluZ1wiKVxuXHRvbkJlZm9yZUJpbmRpbmcoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vIGlmIGZvciBzb21lb25lIHJlYXNvbiBpbmxpbmUgZWRpdCB3YXNuJ3QgZW5kZWQgcHJvcGVybHkgd2UgZW5zdXJlIHdlIHN0YXJ0IGZyZXNoIG9uIHRoZSBwYWdlXG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHQvLyBpZiBmb3Igc29tZW9uZSByZWFzb24gaW5saW5lIGVkaXQgd2Fzbid0IGVuZGVkIHByb3Blcmx5IHdlIGVuc3VyZSB0aGF0IHRoZSBtb2RlbCBpcyBjb25zaXN0ZW50XG5cdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCkucmVzZXRDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSBiZWZvcmUgZWRpdC5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlamVjdCBpZiBlZGl0IG5lZWRzIHRvIGJlIGNhbmNlbGxlZFxuXHQgKi9cblx0QG1ldGhvZE92ZXJyaWRlKFwiZWRpdEZsb3dcIilcblx0YXN5bmMgb25CZWZvcmVFZGl0KCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLm9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYmVmb3JlIGNyZWF0ZS5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlamVjdCBpZiBjcmV0YWUgbmVlZHMgdG8gYmUgY2FuY2VsbGVkXG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJlZGl0Rmxvd1wiKVxuXHRhc3luYyBvbkJlZm9yZUNyZWF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5vbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlIGJlZm9yZSBkZWxldGUuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgaWYgZGVsZXRlIG5lZWRzIHRvIGJlIGNhbmNlbGxlZFxuXHQgKi9cblx0QG1ldGhvZE92ZXJyaWRlKFwiZWRpdEZsb3dcIilcblx0YXN5bmMgb25CZWZvcmVEZWxldGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSBiZWZvcmUgYWN0aW9uLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVqZWN0IGlmIGRlbGV0ZSBuZWVkcyB0byBiZSBjYW5jZWxsZWRcblx0ICovXG5cdEBtZXRob2RPdmVycmlkZShcImVkaXRGbG93XCIpXG5cdGFzeW5jIG9uQmVmb3JlRXhlY3V0ZUFjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5vbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogUHJvcGFnYXRlIHRoZSBmaWVsZCBncm91cCBpZCB0byB0aGUgbWVzc2FnZSBidXR0b24uXG5cdCAqL1xuXHRwcml2YXRlIHByb3BhZ2F0ZUlubGluZUZpZWxkR3JvdXBJZFRvTWVzc2FnZUJ1dHRvbigpOiB2b2lkIHtcblx0XHQvLyB3ZSBwcm9wYWdhdGUgdGhlIGZpZWxkZ3JvdXBJZCB0byB0aGUgZm9vdGVyIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzIHRvIGVuc3VyZSB0aGF0XG5cdFx0Ly8gY2xpY2tpbmcgb24gdGhlIGZvb3RlciBkb2VzIG5vdCB0cmlnZ2VyIGEgZm9jdXNvdXQgYW5kIGEgc2F2ZSBmb3IgdGhlIGlubGluZSBlZGl0XG5cdFx0Y29uc3QgZm9vdGVyQ29udHJvbHMgPVxuXHRcdFx0KHRoaXMuYmFzZVxuXHRcdFx0XHQuZ2V0Rm9vdGVyKClcblx0XHRcdFx0Py5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSwgKG1hbmFnZWRPYmplY3Q6IE1hbmFnZWRPYmplY3QpID0+IG1hbmFnZWRPYmplY3QuaXNBPENvbnRyb2w+KFwic2FwLnVpLmNvcmUuQ29udHJvbFwiKSkgYXNcblx0XHRcdFx0fCBDb250cm9sW11cblx0XHRcdFx0fCB1bmRlZmluZWQpID8/IFtdO1xuXG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGZvb3RlckNvbnRyb2xzKSB7XG5cdFx0XHRjb25zdCBjaGlsZEZpZWxkR3JvdXBJZHMgPSBuZXcgU2V0KGNvbnRyb2wuZ2V0RmllbGRHcm91cElkcygpKTtcblx0XHRcdGNoaWxkRmllbGRHcm91cElkcy5hZGQoXCJJbmxpbmVFZGl0XCIpO1xuXHRcdFx0Y29udHJvbC5zZXRGaWVsZEdyb3VwSWRzKEFycmF5LmZyb20oY2hpbGRGaWVsZEdyb3VwSWRzKSk7XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7TUEwQnFCQSxjQUFjLElBQUFDLElBQUEsR0FEbENDLGNBQWMsQ0FBQyxpREFBaUQsQ0FBQyxFQUFBQyxLQUFBLEdBcUhoRUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFBQyxLQUFBLEdBbUlsQkMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFBQyxLQUFBLEdBbUZ6QkQsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFBRSxLQUFBLEdBZ0IxQkYsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFBRyxLQUFBLEdBUzFCSCxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUFJLEtBQUEsR0FTMUJKLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUssS0FBQSxHQVMxQkwsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFBTCxJQUFBLENBQUFXLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMscUJBQUE7SUFBQSxTQUFBZCxlQUFBO01BQUEsSUFBQWUsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FB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LENBQUM7UUFDOURGLGtCQUFrQixDQUFDRyxHQUFHLENBQUMsWUFBWSxDQUFDO1FBQ3BDdEYsT0FBTyxDQUFDdUYsZ0JBQWdCLENBQUNoSSxLQUFLLENBQUNpSSxJQUFJLENBQUNMLGtCQUFrQixDQUFDLENBQUM7TUFDekQ7SUFDRCxDQUFDO0lBQUEsT0FBQWhKLGNBQUE7RUFBQSxFQTVZMENzSix1QkFBdUIsR0FBQUMseUJBQUEsQ0FBQTFJLE9BQUEsQ0FBQWUsU0FBQSxzQkFBQXpCLEtBQUEsR0FBQXFKLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQTVJLE9BQUEsQ0FBQWUsU0FBQSxzQkFBQWYsT0FBQSxDQUFBZSxTQUFBLEdBQUEySCx5QkFBQSxDQUFBMUksT0FBQSxDQUFBZSxTQUFBLHlCQUFBdkIsS0FBQSxHQUFBbUosTUFBQSxDQUFBQyx3QkFBQSxDQUFBNUksT0FBQSxDQUFBZSxTQUFBLHlCQUFBZixPQUFBLENBQUFlLFNBQUEsR0FBQTJILHlCQUFBLENBQUExSSxPQUFBLENBQUFlLFNBQUEsc0JBQUFyQixLQUFBLEdBQUFpSixNQUFBLENBQUFDLHdCQUFBLENBQUE1SSxPQUFBLENBQUFlLFNBQUEsc0JBQUFmLE9BQUEsQ0FBQWUsU0FBQSxHQUFBMkgseUJBQUEsQ0FBQTFJLE9BQUEsQ0FBQWUsU0FBQSxtQkFBQXBCLEtBQUEsR0FBQWdKLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQTVJLE9BQUEsQ0FBQWUsU0FBQSxtQkFBQWYsT0FBQSxDQUFBZSxTQUFBLEdBQUEySCx5QkFBQSxDQUFBMUksT0FBQSxDQUFBZSxTQUFBLHFCQUFBbkIsS0FBQSxHQUFBK0ksTUFBQSxDQUFBQyx3QkFBQSxDQUFBNUksT0FBQSxDQUFBZSxTQUFBLHFCQUFBZixPQUFBLENBQUFlLFNBQUEsR0FBQTJILHlCQUFBLENBQUExSSxPQUFBLENBQUFlLFNBQUEscUJBQUFsQixLQUFBLEdBQUE4SSxNQUFBLENBQUFDLHdCQUFBLENBQUE1SSxPQUFBLENBQUFlLFNBQUEscUJBQUFmLE9BQUEsQ0FBQWUsU0FBQSxHQUFBMkgseUJBQUEsQ0FBQTFJLE9BQUEsQ0FBQWUsU0FBQSw0QkFBQWpCLEtBQUEsR0FBQTZJLE1BQUEsQ0FBQUMsd0JBQUEsQ0FBQTVJLE9BQUEsQ0FBQWUsU0FBQSw0QkFBQWYsT0FBQSxDQUFBZSxTQUFBLEdBQUFmLE9BQUEsTUFBQUQsTUFBQTtFQUFBYSxRQUFBLEdBQUF6QixjQUFBO0VBQUEsT0FBQXlCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
375
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbmxpbmVFZGl0RmxvdyIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwiaG9va2FibGUiLCJfZGVjMyIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzQiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQmFzZUNvbnRyb2xsZXJFeHRlbnMiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsImlubGluZUVkaXRDb250cm9scyIsInByZXZlbnRGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpc0lubGluZUVkaXRQb3NzaWJsZSIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRJbmxpbmVFZGl0U2VydmljZSIsImRvZXNQYWdlSGF2ZUlubGluZUVkaXQiLCJnZXRSb3V0aW5nVGFyZ2V0TmFtZSIsImlubGluZUVkaXRTYXZlIiwibW9kZWwiLCJnZXRWaWV3IiwiZ2V0TW9kZWwiLCJtZXNzYWdlcyIsIk1lc3NhZ2luZyIsImdldE1lc3NhZ2VNb2RlbCIsImdldERhdGEiLCJoYXNUZWNobmljYWxNZXNzYWdlcyIsInNvbWUiLCJtZXNzYWdlIiwibWVzc2FnZUhhbmRsaW5nIiwiaXNOb25UZWNobmljYWxNZXNzYWdlIiwic2V0U2hvd0Zvb3RlciIsImhhc1BlbmRpbmdDaGFuZ2VzIiwiQ29tbW9uVXRpbHMiLCJJTkxJTkVFRElUX1VQREFURUdST1VQSUQiLCJpbmxpbmVFZGl0RW5kIiwicmVtb3ZlQWxsTWVzc2FnZXMiLCJzdWJtaXRCYXRjaCIsImVycm9yIiwiTG9nIiwid2FybmluZyIsImlubGluZUVkaXREaXNjYXJkIiwicmVzZXRDaGFuZ2VzIiwicmVmcmVzaERlc2NyaXB0aW9uIiwiY29udHJvbCIsInNldFByb3BlcnR5Iiwic3RhcnRJbmxpbmVFZGl0IiwicHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUiLCJiaW5kaW5nQ29udGV4dFBhdGgiLCJjb250cm9sVHJpZ2dlciIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UHJvcGVydHkiLCJEcmFmdEV4aXN0c0RpYWxvZyIsIm9wZW4iLCJyZXNldEluZGljYXRvclBvcHVwIiwiaW5saW5lRWRpdFNlcnZpY2UiLCJkZXBlbmRlbnRQcm9wZXJ0aWVzIiwiZ2V0SW5saW5lQ29ubmVjdGVkUHJvcGVydGllcyIsImlubGluZUVkaXRTdGFydCIsImZvY3VzSGFuZGxpbmciLCJpbmxpbmVFZGl0Q29udHJvbCIsImNsb3NlSW5saW5lRWRpdFBvcHVwRWRpdE1vZGUiLCJmb2N1cyIsInByb3BlcnRpZXMiLCJhYm9ydFRpbWVyQmVmb3JlU2F2ZSIsInVuZGVmaW5lZCIsImFscmVhZHlSZWdpc3RlcmVkQ29udHJvbHMiLCJtYXAiLCJnZXRJZCIsImluY2x1ZGVzIiwicHVzaCIsImlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgiLCJpc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQiLCJoYW5kbGVJbmxpbmVFZGl0UGF0Y2hTZW50IiwiZXZlbnQiLCJwYXRjaFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImdldFNvdXJjZSIsImF0dGFjaEV2ZW50T25jZSIsInBhdGNoQ29tcGxldGVkRXZlbnQiLCJiU3VjY2VzcyIsImdldFBhcmFtZXRlciIsInJlc291cmNlQnVuZGxlIiwiTGliIiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiZ2V0VGV4dCIsImhhbmRsZUlubGluZUVkaXRTYXZlRmFpbGVkIiwibWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwicHJvcGFnYXRlSW5saW5lRmllbGRHcm91cElkVG9NZXNzYWdlQnV0dG9uIiwidGFyZ2V0IiwiZ2V0VGFyZ2V0cyIsInRhcmdldE1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRNZXRhUGF0aCIsIm1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJpc1Byb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RnVsbHlRdWFsaWZpZWROYW1lIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiZGVsYXllZENhbGxUb1NhdmUiLCJ0aW1lckJlZm9yZVNhdmUiLCJzZXRUaW1lb3V0IiwiZSIsInJlYWN0aXZhdGVGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlciIsIm9uQmVmb3JlTmF2aWdhdGlvbiIsIm9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24iLCJvcGVuSW5saW5lRWRpdEV4aXREaWFsb2dBbmRXYWl0Rm9yUmVzdWx0IiwiSW5saW5lRWRpdEV4aXREaWFsb2ciLCJkaWFsb2dSZXN1bHQiLCJFcnJvciIsIm9uQmVmb3JlQmluZGluZyIsIm9uQmVmb3JlRWRpdCIsIm9uQmVmb3JlQ3JlYXRlIiwib25CZWZvcmVEZWxldGUiLCJvbkJlZm9yZUV4ZWN1dGVBY3Rpb24iLCJmb290ZXJDb250cm9scyIsImdldEZvb3RlciIsImZpbmRBZ2dyZWdhdGVkT2JqZWN0cyIsIm1hbmFnZWRPYmplY3QiLCJpc0EiLCJjaGlsZEZpZWxkR3JvdXBJZHMiLCJTZXQiLCJnZXRGaWVsZEdyb3VwSWRzIiwiYWRkIiwic2V0RmllbGRHcm91cElkcyIsImZyb20iLCJCYXNlQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIklubGluZUVkaXRGbG93LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIG1ldGhvZE92ZXJyaWRlLCB0eXBlIEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgaG9va2FibGUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvSG9va1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CYXNlQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgSW5saW5lRWRpdEV4aXREaWFsb2csIHsgdHlwZSBESUFMT0dSRVNVTFQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvaW5saW5lRWRpdEZsb3cvSW5saW5lRWRpdEV4aXREaWFsb2dcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IHR5cGUgSW5saW5lRWRpdCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbmxpbmVFZGl0L0lubGluZUVkaXRcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCBNZXNzYWdpbmcgZnJvbSBcInNhcC91aS9jb3JlL01lc3NhZ2luZ1wiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IE9EYXRhQ29udGV4dEJpbmRpbmckUGF0Y2hTZW50RXZlbnQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBEcmFmdEV4aXN0c0RpYWxvZyBmcm9tIFwiLi4vY29udHJvbHMvaW5saW5lRWRpdEZsb3cvRHJhZnRFeGlzdHNEaWFsb2dcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW5saW5lRWRpdEZsb3dcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElubGluZUVkaXRGbG93IGV4dGVuZHMgQmFzZUNvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgaW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10gPSBbXTtcblxuXHRwcml2YXRlIGlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBhYm9ydFRpbWVyQmVmb3JlU2F2ZT86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgcGF0Y2hQcm9taXNlPzogUHJvbWlzZTxVSTVFdmVudD47XG5cblx0cHJpdmF0ZSBwcmV2ZW50RmllbGRHcm91cENoYW5nZUhhbmRsZXIgPSBmYWxzZTtcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGtub3cgaWYgdGhlcmUgY2FuIGJlIGlubGluZSBlZGl0IG9uIHRoZSBwYWdlLlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGlubGluZSBlZGl0IGlzIHBvc3NpYmxlXG5cdCAqL1xuXHRpc0lubGluZUVkaXRQb3NzaWJsZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpLmdldElubGluZUVkaXRTZXJ2aWNlKCkuZG9lc1BhZ2VIYXZlSW5saW5lRWRpdCh0aGlzLmJhc2UuZ2V0Um91dGluZ1RhcmdldE5hbWUoKSk7XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZSB0aGUgaW5saW5lIGVkaXQgY2hhbmdlcy5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZWQgb25jZSB0aGUgYmF0Y2ggaGFzIHJldHVybmVkLlxuXHQgKi9cblx0YXN5bmMgaW5saW5lRWRpdFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCk7XG5cblx0XHRjb25zdCBtZXNzYWdlcyA9IE1lc3NhZ2luZy5nZXRNZXNzYWdlTW9kZWwoKS5nZXREYXRhKCk7XG5cdFx0Y29uc3QgaGFzVGVjaG5pY2FsTWVzc2FnZXMgPSBtZXNzYWdlcy5zb21lKChtZXNzYWdlOiBNZXNzYWdlKSA9PiAhbWVzc2FnZUhhbmRsaW5nLmlzTm9uVGVjaG5pY2FsTWVzc2FnZShtZXNzYWdlKSk7XG5cdFx0aWYgKGhhc1RlY2huaWNhbE1lc3NhZ2VzKSB7XG5cdFx0XHR0aGlzLmJhc2Uuc2V0U2hvd0Zvb3Rlcih0cnVlKTtcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBpbnZhbGlkIHR5cGVzIHdlIHNob3VsZCBub3QgdHJ5IHRvIHNhdmVcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKCFtb2RlbC5oYXNQZW5kaW5nQ2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpKSB7XG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdE1lc3NhZ2luZy5yZW1vdmVBbGxNZXNzYWdlcygpO1xuXHRcdFx0YXdhaXQgbW9kZWwuc3VibWl0QmF0Y2goQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJFcnJvciB3aGlsZSBzYXZpbmcgaW5saW5lIGVkaXQgY2hhbmdlc1wiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzY2FyZCB0aGUgaW5saW5lIGVkaXQgY2hhbmdlcy5cblx0ICovXG5cdGlubGluZUVkaXREaXNjYXJkKCk6IHZvaWQge1xuXHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5yZXNldENoYW5nZXMoQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKTtcblx0XHR0aGlzLmlubGluZUVkaXRFbmQodHJ1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRW5kIHRoZSBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIHJlZnJlc2hEZXNjcmlwdGlvblxuXHQgKi9cblx0aW5saW5lRWRpdEVuZChyZWZyZXNoRGVzY3JpcHRpb24/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0TWVzc2FnaW5nLnJlbW92ZUFsbE1lc3NhZ2VzKCk7XG5cdFx0dGhpcy5iYXNlLnNldFNob3dGb290ZXIoZmFsc2UpO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmlubGluZUVkaXRDb250cm9scykge1xuXHRcdFx0KGNvbnRyb2wgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCkuaW5saW5lRWRpdEVuZChyZWZyZXNoRGVzY3JpcHRpb24pO1xuXHRcdH1cblx0XHR0aGlzLmlubGluZUVkaXRDb250cm9scyA9IFtdO1xuXHRcdHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5zZXRQcm9wZXJ0eShcIi9pc0lubGluZUVkaXRBY3RpdmVcIiwgZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFN0YXJ0IHRoZSBpbmxpbmUgZWRpdCBvbiB0aGUgYmluZGluZ0NvbnRleHRQYXRoIGZvciB0aGUgcHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWUuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZVxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoXG5cdCAqIEBwYXJhbSBjb250cm9sVHJpZ2dlclxuXHQgKi9cblx0c3RhcnRJbmxpbmVFZGl0KFxuXHRcdHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcsXG5cdFx0YmluZGluZ0NvbnRleHRQYXRoOiBzdHJpbmcsXG5cdFx0Y29udHJvbFRyaWdnZXI/OiBFbmhhbmNlV2l0aFVJNTxGaWVsZD4gJiBJbmxpbmVFZGl0XG5cdCk6IHZvaWQge1xuXHRcdGlmIChjb250cm9sVHJpZ2dlcj8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UHJvcGVydHkoXCJIYXNEcmFmdEVudGl0eVwiKSkge1xuXHRcdFx0Ly8gdGhlcmUgaXMgYWxyZWFkeSBhIGRyYWZ0IG9uIHRoZSBlbnRpdHkuIFdlIHNob3VsZCBub3Qgc3RhcnQgaW5saW5lIGVkaXRcblx0XHRcdG5ldyBEcmFmdEV4aXN0c0RpYWxvZyh0aGlzLmJhc2UuZ2V0VmlldygpKS5vcGVuKCk7XG5cdFx0XHRjb250cm9sVHJpZ2dlcj8ucmVzZXRJbmRpY2F0b3JQb3B1cCgpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBpbmxpbmVFZGl0U2VydmljZSA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRJbmxpbmVFZGl0U2VydmljZSgpO1xuXHRcdGNvbnN0IGRlcGVuZGVudFByb3BlcnRpZXMgPSBpbmxpbmVFZGl0U2VydmljZS5nZXRJbmxpbmVDb25uZWN0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0dGhpcy5iYXNlLmdldFJvdXRpbmdUYXJnZXROYW1lKCksXG5cdFx0XHRwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdCk7XG5cblx0XHR0aGlzLmlubGluZUVkaXRTdGFydChbXSwgZGVwZW5kZW50UHJvcGVydGllcz8ubGVuZ3RoID8gZGVwZW5kZW50UHJvcGVydGllcyA6IFtwcm9wZXJ0eUZ1bGx5UXVhbGlmaWVkTmFtZV0sIGJpbmRpbmdDb250ZXh0UGF0aCk7XG5cdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLnNldFByb3BlcnR5KFwiL2lzSW5saW5lRWRpdEFjdGl2ZVwiLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGb2N1cyBoYW5kbGluZyBmb3IgaW5saW5lIGVkaXQuIFdoZW4gb25lIGZpZWxkIGdldHMgZm9jdXMsIGFsbCBvdGhlciBpbmxpbmUgZWRpdCBwb3B1cHMsIHRoYXQgYXJlIGN1cnJlbnRseSBvcGVuZWQsIHNob3VsZCBiZSBjbG9zZWQuXG5cdCAqIEBwYXJhbSBpbmxpbmVFZGl0Q29udHJvbCBDb250cm9scyB3aGljaCBhcmUgY3VycmVudGx5IGluIGlubGluZSBlZGl0IG1vZGUuXG5cdCAqL1xuXHRmb2N1c0hhbmRsaW5nKGlubGluZUVkaXRDb250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuaW5saW5lRWRpdENvbnRyb2xzKSB7XG5cdFx0XHRpZiAoY29udHJvbCAhPT0gaW5saW5lRWRpdENvbnRyb2wpIHtcblx0XHRcdFx0KGNvbnRyb2wgYXMgRW5oYW5jZVdpdGhVSTU8RmllbGQ+ICYgSW5saW5lRWRpdCkuY2xvc2VJbmxpbmVFZGl0UG9wdXBFZGl0TW9kZSgpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sID09PSBpbmxpbmVFZGl0Q29udHJvbCkge1xuXHRcdFx0XHRjb250cm9sLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENvbmZpcm0gdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgZWRpdCBvbiB0aGUgYmluZGluZ0NvbnRleHRQYXRoIGZvciB0aGUgcHJvcGVydGllcy5cblx0ICogQHBhcmFtIGlubGluZUVkaXRDb250cm9scyBUaGUgZmllbGRzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBpbmxpbmUgZWRpdCBtb2RlLlxuXHQgKiBAcGFyYW0gcHJvcGVydGllc1xuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHRQYXRoXG5cdCAqL1xuXHRAaG9va2FibGUoXCJCZWZvcmVcIilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhc3luYyBpbmxpbmVFZGl0U3RhcnQoaW5saW5lRWRpdENvbnRyb2xzOiBDb250cm9sW10sIHByb3BlcnRpZXM6IHN0cmluZ1tdLCBiaW5kaW5nQ29udGV4dFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyAgYSB0aW1lciB0byBzYXZlXG5cdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKCk7XG5cdFx0XHR0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlID0gdW5kZWZpbmVkO1xuXHRcdFx0YXdhaXQgdGhpcy5pbmxpbmVFZGl0U2F2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCBhbHJlYWR5UmVnaXN0ZXJlZENvbnRyb2xzID0gdGhpcy5pbmxpbmVFZGl0Q29udHJvbHMubWFwKChjb250cm9sOiBDb250cm9sKSA9PiBjb250cm9sLmdldElkKCkpO1xuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBpbmxpbmVFZGl0Q29udHJvbHMpIHtcblx0XHRcdGlmICghYWxyZWFkeVJlZ2lzdGVyZWRDb250cm9scy5pbmNsdWRlcyhjb250cm9sLmdldElkKCkpKSB7XG5cdFx0XHRcdHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLnB1c2goY29udHJvbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuaW5saW5lRWRpdEJpbmRpbmdDb250ZXh0UGF0aCA9IGJpbmRpbmdDb250ZXh0UGF0aDtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVuaWVuY2UgbWV0aG9kIHRvIGRldGVybWluZSBpZiBhIHByb3BlcnR5IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciBpbmxpbmUgZWRpdC5cblx0ICogQHBhcmFtIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lXG5cdCAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgcHJvcGVydHkgaXMgY29uc2lkZXJlZCBmb3IgSW5saW5lIGVkaXQuXG5cdCAqL1xuXHRpc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQocHJvcGVydHlGdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmJhc2Vcblx0XHRcdC5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0LmdldElubGluZUVkaXRTZXJ2aWNlKClcblx0XHRcdC5pc1Byb3BlcnR5Q29uc2lkZXJlZEZvcklubGluZUVkaXQodGhpcy5iYXNlLmdldFJvdXRpbmdUYXJnZXROYW1lKCksIHByb3BlcnR5RnVsbHlRdWFsaWZpZWROYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVzIHRoZSBwYXRjaFNlbnQgZXZlbnQ6IGhhbmRsZSBpbmxpbmUgZWRpdCBzYXZlIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBzZW50IGJ5IHRoZSBiaW5kaW5nXG5cdCAqL1xuXHRhc3luYyBoYW5kbGVJbmxpbmVFZGl0UGF0Y2hTZW50KGV2ZW50OiBPRGF0YUNvbnRleHRCaW5kaW5nJFBhdGNoU2VudEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gaWYgdGhlcmUgYXJlIG5vIGlubGluZSBlZGl0IGNvbnRyb2xzLCB0aGlzIG1heSBoYXZlIGJlZW4gdHJpZ2dlcmVkIGJ5IHNvbWV0aGluZyBlbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5wYXRjaFByb21pc2UgPSBuZXcgUHJvbWlzZTxVSTVFdmVudD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0ZXZlbnQuZ2V0U291cmNlKCkuYXR0YWNoRXZlbnRPbmNlKFwicGF0Y2hDb21wbGV0ZWRcIiwgKHBhdGNoQ29tcGxldGVkRXZlbnQ6IFVJNUV2ZW50PHsgc3VjY2VzczogYm9vbGVhbiB9PikgPT4ge1xuXHRcdFx0XHRjb25zdCBiU3VjY2VzcyA9IHBhdGNoQ29tcGxldGVkRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3VjY2Vzc1wiKTtcblx0XHRcdFx0aWYgKGJTdWNjZXNzKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZShwYXRjaENvbXBsZXRlZEV2ZW50KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZWplY3QocGF0Y2hDb21wbGV0ZWRFdmVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCB0aGlzLnBhdGNoUHJvbWlzZTtcblx0XHRcdHRoaXMucGF0Y2hQcm9taXNlID0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKTtcblx0XHRcdGlmIChyZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19JTkxJTkVfRURJVF9TQVZFRFwiKSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmlubGluZUVkaXRFbmQoKTtcblx0XHR9IGNhdGNoIChwYXRjaENvbXBsZXRlZEV2ZW50KSB7XG5cdFx0XHR0aGlzLnBhdGNoUHJvbWlzZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuaGFuZGxlSW5saW5lRWRpdFNhdmVGYWlsZWQoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIGVycm9ycyB3aGVuIHRoZSBpbmxpbmUgZWRpdCBzYXZlIGZhaWxzLlxuXHQgKi9cblx0aGFuZGxlSW5saW5lRWRpdFNhdmVGYWlsZWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXMgPSBNZXNzYWdpbmcuZ2V0TWVzc2FnZU1vZGVsKCkuZ2V0RGF0YSgpO1xuXHRcdGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdHRoaXMuYmFzZS5zZXRTaG93Rm9vdGVyKHRydWUpO1xuXHRcdFx0dGhpcy5wcm9wYWdhdGVJbmxpbmVGaWVsZEdyb3VwSWRUb01lc3NhZ2VCdXR0b24oKTtcblx0XHR9XG5cdFx0aWYgKCF0aGlzLmlubGluZUVkaXRCaW5kaW5nQ29udGV4dFBhdGgpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Zm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRhcmdldCBvZiBtZXNzYWdlLmdldFRhcmdldHMoKSkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRNZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGFyZ2V0KSk7XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgPSB0YXJnZXRNZXRhQ29udGV4dFxuXHRcdFx0XHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czx1bmtub3duPih0YXJnZXRNZXRhQ29udGV4dClcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRcdGlmIChpc1Byb3BlcnR5KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdCkpIHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRGdWxseVF1YWxpZmllZE5hbWUgPVxuXHRcdFx0XHRcdFx0KG1lc3NhZ2VUYXJnZXREYXRhTW9kZWxPYmplY3QgYXMgdW5rbm93biBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5Pik/LnRhcmdldE9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lID8/IFwiXCI7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNQcm9wZXJ0eUNvbnNpZGVyZWRGb3JJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuc3RhcnRJbmxpbmVFZGl0KHRhcmdldEZ1bGx5UXVhbGlmaWVkTmFtZSwgdGhpcy5pbmxpbmVFZGl0QmluZGluZ0NvbnRleHRQYXRoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUGVyZm9ybXMgYSBkZWxheWVkQ2FsbCB3aGVuIHlvdSBmb2N1cyBvdXQgb2YgYSBmaWVsZC5cblx0ICovXG5cdGFzeW5jIGRlbGF5ZWRDYWxsVG9TYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlIHx8IHRoaXMucGF0Y2hQcm9taXNlIHx8IHRoaXMucHJldmVudEZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgdGltZXIgcnVubmluZyBvciBhIHNhdmUgaW4gcHJvY2VzcyBkbyBub3RoaW5nXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHRpbWVyQmVmb3JlU2F2ZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUgPSByZWplY3Q7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgNTAwKTtcblx0XHR9KTtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGltZXJCZWZvcmVTYXZlO1xuXHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuaW5saW5lRWRpdFNhdmUoKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBOb3RoaW5nIHRvIHNlZSBpdCBpcyBqdXN0IHNvbWVvbmUgdGhhdCBjYW5jZWxsZWQgdGhlIHRpbWVyXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZWFjdGl2YXRlIHRoZSBmaWVsZCBncm91cCBjaGFuZ2UgaGFuZGxlciBhZnRlciBhIGRlbGF5LlxuXHQgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZpZWxkIGdyb3VwIGNoYW5nZSBoYW5kbGVyIGlzIG5vdCB0cmlnZ2VyZWQgd2hpbGUgZm9jdXMgaXMgc2hpZnRpbmcgd2hlbiB3ZSBvcGVuIGEgZGlhbG9nLlxuXHQgKi9cblx0cmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk6IHZvaWQge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpcy5wcmV2ZW50RmllbGRHcm91cENoYW5nZUhhbmRsZXIgPSBmYWxzZTtcblx0XHR9LCA1MDApO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBlbnN1cmUgd2UgbGVhdmUgaW5saW5lIGVkaXQgYmVmb3JlIGFueSBuYXZpZ2F0aW9uLi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJldHJ1bnMgdHJ1ZSBpZiB3ZSBuZWVkIHRvIGNhbmNlbCBuYXZpZ2F0aW9uIGFuZCBzdGF5IGluIGlubGluZSBlZGl0XG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJyb3V0aW5nXCIpXG5cdGFzeW5jIG9uQmVmb3JlTmF2aWdhdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5vbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBvcGVuIHRoZSBkaWFsb2cgYmVmb3JlIG5hdmlnYXRpb24uXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXR1cm5zIHRoZSBkaWFsb2cgY2hvaWNlIG9uY2UgdGhlIHVzZXIgaGFzIGNsaWNrZWQgb24gb2sgb3IgY2FuY2VsXG5cdCAqL1xuXHRhc3luYyBvcGVuSW5saW5lRWRpdEV4aXREaWFsb2dBbmRXYWl0Rm9yUmVzdWx0KCk6IFByb21pc2U8RElBTE9HUkVTVUxUPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPERJQUxPR1JFU1VMVD4oKHJlc29sdmUpID0+IHtcblx0XHRcdG5ldyBJbmxpbmVFZGl0RXhpdERpYWxvZyh0aGlzLmJhc2UuZ2V0VmlldygpLCByZXNvbHZlKS5vcGVuKCk7XG5cdFx0fSk7XG5cdH1cblxuXHRhc3luYyBvbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICh0aGlzLmlubGluZUVkaXRDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyB0aGVyZSBhcmUgY29udHJvbHMgaW4gaW5saW5lIGVkaXQgd2UgbmVlZCB0byBwcmV2ZW50IHRoZSBuYXZpZ2F0aW9uIGFuZCBzaG93IHRoZSBkaWFsb2dcblx0XHRcdHRoaXMucHJldmVudEZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyID0gdHJ1ZTtcblx0XHRcdGlmICh0aGlzLmFib3J0VGltZXJCZWZvcmVTYXZlKSB7XG5cdFx0XHRcdHRoaXMuYWJvcnRUaW1lckJlZm9yZVNhdmUoKTtcblx0XHRcdFx0dGhpcy5hYm9ydFRpbWVyQmVmb3JlU2F2ZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdFx0Ly8gZmllbGRzIGFyZSBpbiBpbmxpbmUgZWRpdCBhbmQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgY2hhbmdlcy4gV2UgbmVlZCB0byBzaG93IHRoZSBkaWFsb2dcblx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0RW5kKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICh0aGlzLnBhdGNoUHJvbWlzZSkge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMucGF0Y2hQcm9taXNlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGRpYWxvZ1Jlc3VsdCA9IGF3YWl0IHRoaXMub3BlbklubGluZUVkaXRFeGl0RGlhbG9nQW5kV2FpdEZvclJlc3VsdCgpO1xuXHRcdFx0XHRcdGlmIChkaWFsb2dSZXN1bHQgPT09IFwiU2F2ZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyB3ZSBzYXZlIGFuZCB3YWl0IGZvciB0aGUgcGF0Y2hQcm9taXNlXG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLmlubGluZUVkaXRTYXZlKCk7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzKENvbW1vblV0aWxzLklOTElORUVESVRfVVBEQVRFR1JPVVBJRCkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gaWYgYWZ0ZXIgc2F2ZXMgdGhlcmUgYXJlIHN0aWxsIGNoYW5nZXMgdGhpcyBtZWFucyBzYXZlIGhhcyBmYWlsZWQuIHdlIG5lZWQgdG8gY2FuY2VsIG5hdmlnYXRpb25cblx0XHRcdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzWzBdKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5yZWFjdGl2YXRlRmllbGRHcm91cENoYW5nZUhhbmRsZXIoKTtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zYXZlIGNoYW5nZSBwcmV2ZW50IGV4ZWN1dGlvblwiKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGRpYWxvZ1Jlc3VsdCA9PT0gXCJDYW5jZWxcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5mb2N1c0hhbmRsaW5nKHRoaXMuaW5saW5lRWRpdENvbnRyb2xzWzBdKTtcblx0XHRcdFx0XHRcdHRoaXMucmVhY3RpdmF0ZUZpZWxkR3JvdXBDaGFuZ2VIYW5kbGVyKCk7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJjYW5jZWwgd2FzIGNob3NlblwiKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gd2UgZGlzY2FyZCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0dGhpcy5pbmxpbmVFZGl0RGlzY2FyZCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLnJlYWN0aXZhdGVGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlcigpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzSGFuZGxpbmcodGhpcy5pbmxpbmVFZGl0Q29udHJvbHNbMF0pO1xuXHRcdFx0XHR0aGlzLnJlYWN0aXZhdGVGaWVsZEdyb3VwQ2hhbmdlSGFuZGxlcigpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBlbnN1cmUgd2Ugc3RhcnQgdGhlIHBhZ2Ugd2l0aG91dCBhbnkgdW5zYXZlZCBpbmxpbmUgZWRpdCBjaGFuZ2VzLlxuXHQgKi9cblx0QG1ldGhvZE92ZXJyaWRlKFwiX3JvdXRpbmdcIilcblx0b25CZWZvcmVCaW5kaW5nKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlubGluZUVkaXRDb250cm9scy5sZW5ndGggPiAwKSB7XG5cdFx0XHQvLyBpZiBmb3Igc29tZW9uZSByZWFzb24gaW5saW5lIGVkaXQgd2Fzbid0IGVuZGVkIHByb3Blcmx5IHdlIGVuc3VyZSB3ZSBzdGFydCBmcmVzaCBvbiB0aGUgcGFnZVxuXHRcdFx0dGhpcy5pbmxpbmVFZGl0RW5kKCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmJhc2UuZ2V0VmlldygpLmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMoQ29tbW9uVXRpbHMuSU5MSU5FRURJVF9VUERBVEVHUk9VUElEKSkge1xuXHRcdFx0Ly8gaWYgZm9yIHNvbWVvbmUgcmVhc29uIGlubGluZSBlZGl0IHdhc24ndCBlbmRlZCBwcm9wZXJseSB3ZSBlbnN1cmUgdGhhdCB0aGUgbW9kZWwgaXMgY29uc2lzdGVudFxuXHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRNb2RlbCgpLnJlc2V0Q2hhbmdlcyhDb21tb25VdGlscy5JTkxJTkVFRElUX1VQREFURUdST1VQSUQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYmVmb3JlIGVkaXQuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgaWYgZWRpdCBuZWVkcyB0byBiZSBjYW5jZWxsZWRcblx0ICovXG5cdEBtZXRob2RPdmVycmlkZShcImVkaXRGbG93XCIpXG5cdGFzeW5jIG9uQmVmb3JlRWRpdCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5vbkJlZm9yZUFueUVkaXRGbG93QWN0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlIGJlZm9yZSBjcmVhdGUuXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZWplY3QgaWYgY3JldGFlIG5lZWRzIHRvIGJlIGNhbmNlbGxlZFxuXHQgKi9cblx0QG1ldGhvZE92ZXJyaWRlKFwiZWRpdEZsb3dcIilcblx0YXN5bmMgb25CZWZvcmVDcmVhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZSBiZWZvcmUgZGVsZXRlLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVqZWN0IGlmIGRlbGV0ZSBuZWVkcyB0byBiZSBjYW5jZWxsZWRcblx0ICovXG5cdEBtZXRob2RPdmVycmlkZShcImVkaXRGbG93XCIpXG5cdGFzeW5jIG9uQmVmb3JlRGVsZXRlKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLm9uQmVmb3JlQW55RWRpdEZsb3dBY3Rpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGUgYmVmb3JlIGFjdGlvbi5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlamVjdCBpZiBkZWxldGUgbmVlZHMgdG8gYmUgY2FuY2VsbGVkXG5cdCAqL1xuXHRAbWV0aG9kT3ZlcnJpZGUoXCJlZGl0Rmxvd1wiKVxuXHRhc3luYyBvbkJlZm9yZUV4ZWN1dGVBY3Rpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMub25CZWZvcmVBbnlFZGl0Rmxvd0FjdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3BhZ2F0ZSB0aGUgZmllbGQgZ3JvdXAgaWQgdG8gdGhlIG1lc3NhZ2UgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBwcm9wYWdhdGVJbmxpbmVGaWVsZEdyb3VwSWRUb01lc3NhZ2VCdXR0b24oKTogdm9pZCB7XG5cdFx0Ly8gd2UgcHJvcGFnYXRlIHRoZSBmaWVsZGdyb3VwSWQgdG8gdGhlIGZvb3RlciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cyB0byBlbnN1cmUgdGhhdFxuXHRcdC8vIGNsaWNraW5nIG9uIHRoZSBmb290ZXIgZG9lcyBub3QgdHJpZ2dlciBhIGZvY3Vzb3V0IGFuZCBhIHNhdmUgZm9yIHRoZSBpbmxpbmUgZWRpdFxuXHRcdGNvbnN0IGZvb3RlckNvbnRyb2xzID1cblx0XHRcdCh0aGlzLmJhc2Vcblx0XHRcdFx0LmdldEZvb3RlcigpXG5cdFx0XHRcdD8uZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChtYW5hZ2VkT2JqZWN0OiBNYW5hZ2VkT2JqZWN0KSA9PiBtYW5hZ2VkT2JqZWN0LmlzQTxDb250cm9sPihcInNhcC51aS5jb3JlLkNvbnRyb2xcIikpIGFzXG5cdFx0XHRcdHwgQ29udHJvbFtdXG5cdFx0XHRcdHwgdW5kZWZpbmVkKSA/PyBbXTtcblxuXHRcdGZvciAoY29uc3QgY29udHJvbCBvZiBmb290ZXJDb250cm9scykge1xuXHRcdFx0Y29uc3QgY2hpbGRGaWVsZEdyb3VwSWRzID0gbmV3IFNldChjb250cm9sLmdldEZpZWxkR3JvdXBJZHMoKSk7XG5cdFx0XHRjaGlsZEZpZWxkR3JvdXBJZHMuYWRkKFwiSW5saW5lRWRpdFwiKTtcblx0XHRcdGNvbnRyb2wuc2V0RmllbGRHcm91cElkcyhBcnJheS5mcm9tKGNoaWxkRmllbGRHcm91cElkcykpO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O01BeUJxQkEsY0FBYyxJQUFBQyxJQUFBLEdBRGxDQyxjQUFjLENBQUMsaURBQWlELENBQUMsRUFBQUMsS0FBQSxHQXFIaEVDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBQUMsS0FBQSxHQW1JbEJDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBQUMsS0FBQSxHQXNFekJELGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUUsS0FBQSxHQWdCMUJGLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUcsS0FBQSxHQVMxQkgsY0FBYyxDQUFDLFVBQVUsQ0FBQyxFQUFBSSxLQUFBLEdBUzFCSixjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUFLLEtBQUEsR0FTMUJMLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBQUwsSUFBQSxDQUFBVyxNQUFBLElBQUFDLE9B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
|
|
@@ -6,8 +6,7 @@ import CommonUtils from "sap/fe/core/CommonUtils";
|
|
|
6
6
|
import type PageController from "sap/fe/core/PageController";
|
|
7
7
|
import BaseControllerExtension from "sap/fe/core/controllerextensions/BaseControllerExtension";
|
|
8
8
|
import messageHandling from "sap/fe/core/controllerextensions/messageHandler/messageHandling";
|
|
9
|
-
import
|
|
10
|
-
import BeforeNavigationDialog, { type DIALOGRESULT } from "sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog";
|
|
9
|
+
import InlineEditExitDialog, { type DIALOGRESULT } from "sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog";
|
|
11
10
|
import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
|
|
12
11
|
import { isProperty } from "sap/fe/core/helpers/TypeGuards";
|
|
13
12
|
import { type DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
@@ -273,6 +272,25 @@ export default class InlineEditFlow extends BaseControllerExtension {
|
|
|
273
272
|
*/
|
|
274
273
|
@methodOverride("routing")
|
|
275
274
|
async onBeforeNavigation(): Promise<boolean> {
|
|
275
|
+
try {
|
|
276
|
+
await this.onBeforeAnyEditFlowAction();
|
|
277
|
+
return false;
|
|
278
|
+
} catch (e) {
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Method to open the dialog before navigation.
|
|
285
|
+
* @returns Promise that returns the dialog choice once the user has clicked on ok or cancel
|
|
286
|
+
*/
|
|
287
|
+
async openInlineEditExitDialogAndWaitForResult(): Promise<DIALOGRESULT> {
|
|
288
|
+
return new Promise<DIALOGRESULT>((resolve) => {
|
|
289
|
+
new InlineEditExitDialog(this.base.getView(), resolve).open();
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
async onBeforeAnyEditFlowAction(): Promise<void> {
|
|
276
294
|
if (this.inlineEditControls.length > 0) {
|
|
277
295
|
// there are controls in inline edit we need to prevent the navigation and show the dialog
|
|
278
296
|
this.preventFieldGroupChangeHandler = true;
|
|
@@ -283,13 +301,13 @@ export default class InlineEditFlow extends BaseControllerExtension {
|
|
|
283
301
|
if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
|
|
284
302
|
// fields are in inline edit and there are no pending changes. We need to show the dialog
|
|
285
303
|
this.inlineEditEnd();
|
|
286
|
-
return
|
|
304
|
+
return;
|
|
287
305
|
}
|
|
288
306
|
try {
|
|
289
307
|
if (this.patchPromise) {
|
|
290
308
|
await this.patchPromise;
|
|
291
309
|
} else {
|
|
292
|
-
const dialogResult = await this.
|
|
310
|
+
const dialogResult = await this.openInlineEditExitDialogAndWaitForResult();
|
|
293
311
|
if (dialogResult === "Save") {
|
|
294
312
|
// we save and wait for the patchPromise
|
|
295
313
|
await this.inlineEditSave();
|
|
@@ -297,58 +315,26 @@ export default class InlineEditFlow extends BaseControllerExtension {
|
|
|
297
315
|
// if after saves there are still changes this means save has failed. we need to cancel navigation
|
|
298
316
|
this.focusHandling(this.inlineEditControls[0]);
|
|
299
317
|
this.reactivateFieldGroupChangeHandler();
|
|
300
|
-
|
|
318
|
+
throw new Error("unsave change prevent execution");
|
|
301
319
|
}
|
|
302
320
|
} else if (dialogResult === "Cancel") {
|
|
303
321
|
this.focusHandling(this.inlineEditControls[0]);
|
|
304
322
|
this.reactivateFieldGroupChangeHandler();
|
|
305
|
-
|
|
323
|
+
throw new Error("cancel was chosen");
|
|
306
324
|
} else {
|
|
307
325
|
// we discard the changes
|
|
308
326
|
this.inlineEditDiscard();
|
|
309
327
|
}
|
|
310
328
|
this.reactivateFieldGroupChangeHandler();
|
|
311
|
-
return
|
|
329
|
+
return;
|
|
312
330
|
}
|
|
313
331
|
} catch (e) {
|
|
314
332
|
this.focusHandling(this.inlineEditControls[0]);
|
|
315
333
|
this.reactivateFieldGroupChangeHandler();
|
|
316
|
-
return
|
|
334
|
+
return Promise.reject();
|
|
317
335
|
}
|
|
318
336
|
}
|
|
319
|
-
return
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* Method to open the dialog before navigation.
|
|
324
|
-
* @returns Promise that returns the dialog choice once the user has clicked on ok or cancel
|
|
325
|
-
*/
|
|
326
|
-
async openInlineEditBeforeNavigationDialogAndWaitForResult(): Promise<DIALOGRESULT> {
|
|
327
|
-
return new Promise<DIALOGRESULT>((resolve) => {
|
|
328
|
-
new BeforeNavigationDialog(this.base.getView(), resolve).open();
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
/**
|
|
333
|
-
* Method to ensure we leave inline edit before any standard edit flowaction.
|
|
334
|
-
* @returns Promise that reject and triggers save or discard if we are in inline edit
|
|
335
|
-
*/
|
|
336
|
-
async onBeforeAnyEditFlowAction(): Promise<void> {
|
|
337
|
-
if (this.inlineEditControls.length > 0) {
|
|
338
|
-
if (this.abortTimerBeforeSave) {
|
|
339
|
-
this.abortTimerBeforeSave();
|
|
340
|
-
this.abortTimerBeforeSave = undefined;
|
|
341
|
-
}
|
|
342
|
-
if (!this.base.getView().getModel().hasPendingChanges(CommonUtils.INLINEEDIT_UPDATEGROUPID)) {
|
|
343
|
-
// fields are in inline edit and there are no pending changes. We don't need to show the dialog
|
|
344
|
-
this.inlineEditEnd();
|
|
345
|
-
return Promise.resolve();
|
|
346
|
-
}
|
|
347
|
-
new BeforeActionDialog(this.base.getView()).open();
|
|
348
|
-
// there are controls in inline edit we need to prevent the action and show the dialog
|
|
349
|
-
return Promise.reject();
|
|
350
|
-
}
|
|
351
|
-
return Promise.resolve();
|
|
337
|
+
return;
|
|
352
338
|
}
|
|
353
339
|
|
|
354
340
|
/**
|