@sapui5/sap.fe.macros 1.138.0 → 1.140.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/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +269 -0
- package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
- package/src/sap/fe/macros/CommonHelper.js +2 -2
- package/src/sap/fe/macros/CommonHelper.ts +1 -1
- package/src/sap/fe/macros/Field.js +85 -58
- package/src/sap/fe/macros/Field.ts +104 -60
- package/src/sap/fe/macros/FooterContent.js +44 -11
- package/src/sap/fe/macros/FooterContent.tsx +48 -9
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MessageButton.js +1 -2
- package/src/sap/fe/macros/MessageButton.tsx +0 -1
- package/src/sap/fe/macros/MultiValueField.js +17 -6
- package/src/sap/fe/macros/MultiValueField.tsx +7 -4
- package/src/sap/fe/macros/RichTextEditor.js +30 -5
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
- package/src/sap/fe/macros/Share.js +85 -40
- package/src/sap/fe/macros/Share.tsx +42 -1
- package/src/sap/fe/macros/Status.js +226 -0
- package/src/sap/fe/macros/Status.tsx +192 -0
- package/src/sap/fe/macros/ValueHelp.js +4 -29
- package/src/sap/fe/macros/ValueHelp.tsx +2 -43
- package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
- package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
- package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
- package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
- package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
- package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
- package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
- package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
- package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
- package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
- package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
- package/src/sap/fe/macros/controls/FilterBar.js +49 -2
- package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
- package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
- package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
- package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
- package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
- package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
- package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
- package/src/sap/fe/macros/form/Form.js +1 -4
- package/src/sap/fe/macros/form/Form.tsx +0 -3
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
- package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
- package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
- package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
- package/src/sap/fe/macros/form/FormDelegate.js +20 -1
- package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
- package/src/sap/fe/macros/form/FormHelper.js +1 -2
- package/src/sap/fe/macros/form/FormHelper.ts +0 -1
- package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
- package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
- package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
- package/src/sap/fe/macros/internal/DataPoint.js +2 -1
- package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
- package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
- package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
- package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
- package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
- package/src/sap/fe/macros/messagebundle.properties +42 -32
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
- package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
- package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
- package/src/sap/fe/macros/messagebundle_da.properties +11 -3
- package/src/sap/fe/macros/messagebundle_de.properties +18 -10
- package/src/sap/fe/macros/messagebundle_el.properties +13 -5
- package/src/sap/fe/macros/messagebundle_en.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
- package/src/sap/fe/macros/messagebundle_es.properties +13 -5
- package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
- package/src/sap/fe/macros/messagebundle_et.properties +13 -5
- package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
- package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
- package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
- package/src/sap/fe/macros/messagebundle_id.properties +18 -10
- package/src/sap/fe/macros/messagebundle_it.properties +10 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
- package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
- package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
- package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
- package/src/sap/fe/macros/messagebundle_no.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
- package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -3
- package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
- package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
- package/src/sap/fe/macros/messages/MessageButton.js +55 -36
- package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
- package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
- package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
- package/src/sap/fe/macros/share/ShareAPI.js +4 -29
- package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
- package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
- package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
- package/src/sap/fe/macros/table/Action.js +24 -2
- package/src/sap/fe/macros/table/Action.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroup.js +24 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
- package/src/sap/fe/macros/table/Column.js +3 -3
- package/src/sap/fe/macros/table/Column.ts +2 -2
- package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
- package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
- package/src/sap/fe/macros/table/Table.block.js +137 -108
- package/src/sap/fe/macros/table/Table.block.tsx +29 -2
- package/src/sap/fe/macros/table/TableAPI.js +143 -133
- package/src/sap/fe/macros/table/TableAPI.ts +5 -1
- package/src/sap/fe/macros/table/TableDefinition.js +4 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
- package/src/sap/fe/macros/table/TableHelper.js +1 -2
- package/src/sap/fe/macros/table/TableHelper.ts +0 -1
- package/src/sap/fe/macros/table/TableRuntime.js +26 -7
- package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
- package/src/sap/fe/macros/table/Utils.js +6 -2
- package/src/sap/fe/macros/table/Utils.ts +5 -1
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
- package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
- package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
- package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
|
@@ -30,6 +30,7 @@ import actionHelper from "sap/fe/core/controllerextensions/editFlow/operations/a
|
|
|
30
30
|
import { convertTypes, getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
|
|
31
31
|
import { hasFieldGroupTarget } from "sap/fe/core/converters/annotations/DataField";
|
|
32
32
|
import FPMHelper from "sap/fe/core/helpers/FPMHelper";
|
|
33
|
+
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
33
34
|
import { getResourceModel } from "sap/fe/core/helpers/ResourceModelHelper";
|
|
34
35
|
import { generate } from "sap/fe/core/helpers/StableIdHelper";
|
|
35
36
|
import { isFulfilled, isPathAnnotationExpression } from "sap/fe/core/helpers/TypeGuards";
|
|
@@ -37,8 +38,10 @@ import FELibrary from "sap/fe/core/library";
|
|
|
37
38
|
import { getTargetNavigationPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
38
39
|
import { isActionParameterRequiredExpression, isDisabledExpression, isReadOnlyExpression } from "sap/fe/core/templating/FieldControlHelper";
|
|
39
40
|
import { hasValueHelp, isMultiLineText } from "sap/fe/core/templating/PropertyHelper";
|
|
41
|
+
import type { ComputedAnnotationInterface } from "sap/fe/core/templating/UIFormatters";
|
|
40
42
|
import FieldHelper from "sap/fe/macros/field/FieldHelper";
|
|
41
43
|
import { requiresValidation, useCaseSensitiveFilterRequests } from "sap/fe/macros/internal/valuehelp/ValueHelpTemplating";
|
|
44
|
+
import type { AnnotationValueListParameter } from "sap/fe/macros/internal/valuehelp/ValueListHelper";
|
|
42
45
|
import type ListReportExtensionAPI from "sap/fe/templates/ListReport/ExtensionAPI";
|
|
43
46
|
import type ObjectPageExtensionAPI from "sap/fe/templates/ObjectPage/ExtensionAPI";
|
|
44
47
|
import Button from "sap/m/Button";
|
|
@@ -312,8 +315,12 @@ export default class ActionParameterDialog {
|
|
|
312
315
|
*/
|
|
313
316
|
private async createField(parameter: ActionParameter, parameterContext: Context): Promise<Field> {
|
|
314
317
|
let display = "Value";
|
|
318
|
+
let additionalValue;
|
|
315
319
|
try {
|
|
316
320
|
display = await FieldHelper.getAPDialogDisplayFormat(parameterContext.getObject(), { context: parameterContext });
|
|
321
|
+
if (hasValueHelp(parameter)) {
|
|
322
|
+
additionalValue = await this.getAdditionalValue({ context: parameterContext });
|
|
323
|
+
}
|
|
317
324
|
} catch (err: unknown) {
|
|
318
325
|
Log.warning(`Parameter dialog field: display format couldn't be calculated for parameter '${parameter.name}': ${err}`);
|
|
319
326
|
}
|
|
@@ -341,6 +348,7 @@ export default class ActionParameterDialog {
|
|
|
341
348
|
)
|
|
342
349
|
)}
|
|
343
350
|
ariaLabelledBy={[generate(["APD_", parameter.name, "Label"])]}
|
|
351
|
+
additionalValue={additionalValue}
|
|
344
352
|
/>
|
|
345
353
|
);
|
|
346
354
|
}
|
|
@@ -382,7 +390,7 @@ export default class ActionParameterDialog {
|
|
|
382
390
|
(convertTypes(this.metaModel).entityContainer.annotations.Capabilities
|
|
383
391
|
?.FilterFunctions as unknown as string[]) ?? []
|
|
384
392
|
)
|
|
385
|
-
:
|
|
393
|
+
: ModelHelper.isFilteringCaseSensitive(this.metaModel)
|
|
386
394
|
}
|
|
387
395
|
useAsValueHelp={!!parameter.annotations.Common?.ValueListWithFixedValues}
|
|
388
396
|
/>
|
|
@@ -1193,4 +1201,43 @@ export default class ActionParameterDialog {
|
|
|
1193
1201
|
this.dialog?.destroy();
|
|
1194
1202
|
this.buttonLock = false; //needed here, not in the press events finally clause. In case the UI is sluggish, begin button could be pressed again.
|
|
1195
1203
|
}
|
|
1204
|
+
|
|
1205
|
+
/**
|
|
1206
|
+
* Gets the type of the property used for text annotation in the ValueHelp for the action parameter and provides the formatted binding.
|
|
1207
|
+
* @param oInterface The parameter
|
|
1208
|
+
* @returns The form element control.
|
|
1209
|
+
*/
|
|
1210
|
+
private async getAdditionalValue(oInterface: ComputedAnnotationInterface): Promise<string | undefined> {
|
|
1211
|
+
let textContext;
|
|
1212
|
+
|
|
1213
|
+
const contextPath = oInterface.context.getPath();
|
|
1214
|
+
const localDataProperty = oInterface.context.getObject()?.$Name;
|
|
1215
|
+
const valueListByQualifier = await this.metaModel.requestValueListInfo(contextPath, true);
|
|
1216
|
+
|
|
1217
|
+
// Look for LocalDataProperty in ValueListParameterOut or ValueListParameterInOut where this is the parameter name
|
|
1218
|
+
// We only consider TextAnnotations for this action parameter
|
|
1219
|
+
const valueListParameter = valueListByQualifier[""].Parameters.find(
|
|
1220
|
+
(parameter: AnnotationValueListParameter) =>
|
|
1221
|
+
parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterInOut" ||
|
|
1222
|
+
(parameter.$Type === "com.sap.vocabularies.Common.v1.ValueListParameterOut" &&
|
|
1223
|
+
parameter.LocalDataProperty?.$PropertyPath === localDataProperty)
|
|
1224
|
+
);
|
|
1225
|
+
|
|
1226
|
+
if (valueListParameter && valueListParameter.ValueListProperty) {
|
|
1227
|
+
const textProperty = valueListParameter.ValueListProperty;
|
|
1228
|
+
// Now we have the name of the property that is the annotated text
|
|
1229
|
+
const propertyPath = `/${valueListByQualifier[""].CollectionPath}/${textProperty}`;
|
|
1230
|
+
const propAnnotations = this.metaModel.getObject(`${propertyPath}@`);
|
|
1231
|
+
|
|
1232
|
+
if (propAnnotations["@com.sap.vocabularies.Common.v1.Text@com.sap.vocabularies.UI.v1.TextArrangement"]) {
|
|
1233
|
+
const textProp = propAnnotations["@com.sap.vocabularies.Common.v1.Text"];
|
|
1234
|
+
const textPath = `/${valueListByQualifier[""].CollectionPath}/${textProp.$Path}`;
|
|
1235
|
+
textContext = this.metaModel.createBindingContext(textPath);
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
if (textContext) {
|
|
1239
|
+
return AnnotationHelper.format(textContext.getObject(), { context: textContext });
|
|
1240
|
+
}
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1196
1243
|
}
|
|
@@ -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/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Button", "sap/m/CheckBox", "sap/m/Dialog", "sap/m/Input", "sap/m/InputListItem", "sap/m/List", "sap/m/MessageStrip", "sap/m/MultiInput", "sap/m/Select", "sap/m/Token", "sap/ui/core/Item", "sap/ui/model/json/JSONModel"], function (deepClone, CommonUtils, Button, CheckBox, Dialog, Input, InputListItem, List, MessageStrip, MultiInput, Select, Token, Item, JSONModel) {
|
|
5
|
+
sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Button", "sap/m/CheckBox", "sap/m/Dialog", "sap/m/Input", "sap/m/InputListItem", "sap/m/List", "sap/m/MessageStrip", "sap/m/MultiInput", "sap/m/Select", "sap/m/Token", "sap/ui/core/Component", "sap/ui/core/Item", "sap/ui/model/json/JSONModel"], function (deepClone, CommonUtils, Button, CheckBox, Dialog, Input, InputListItem, List, MessageStrip, MultiInput, Select, Token, Component, Item, JSONModel) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -91,6 +91,29 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Butt
|
|
|
91
91
|
setLocalTexts(settingsModel, resourceModel);
|
|
92
92
|
const list = new List();
|
|
93
93
|
list.setModel(settingsModel);
|
|
94
|
+
|
|
95
|
+
// Function to clear personalization dependent controls when "Own Settings" is selected
|
|
96
|
+
const updatePersonalizationDependentControls = selectedValue => {
|
|
97
|
+
const dependentControls = ["personalizationSort", "personalizationColumn", "personalizationFilter", "personalizationGroup"];
|
|
98
|
+
const isOwnSettings = selectedValue === "Own Settings";
|
|
99
|
+
if (isOwnSettings) {
|
|
100
|
+
dependentControls.forEach(controlId => {
|
|
101
|
+
const listItems = list.getItems();
|
|
102
|
+
for (const item of listItems) {
|
|
103
|
+
const content = item.getContent();
|
|
104
|
+
for (const control of content) {
|
|
105
|
+
if (control.data("id") === controlId) {
|
|
106
|
+
if (control.setSelected) {
|
|
107
|
+
control.setSelected(false);
|
|
108
|
+
propertyValues[controlId] = false;
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
};
|
|
94
117
|
const listItem = new InputListItem({
|
|
95
118
|
label: "{label}"
|
|
96
119
|
});
|
|
@@ -191,6 +214,10 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Butt
|
|
|
191
214
|
value = JSON.parse(value.toLowerCase());
|
|
192
215
|
}
|
|
193
216
|
propertyValues[this.data("id")] = value;
|
|
217
|
+
// Special handling for personalization setting
|
|
218
|
+
if (this.data("id") === "personalization") {
|
|
219
|
+
updatePersonalizationDependentControls(value);
|
|
220
|
+
}
|
|
194
221
|
}
|
|
195
222
|
}).data("id", id);
|
|
196
223
|
select.bindItems({
|
|
@@ -438,6 +465,16 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/CommonUtils", "sap/m/Butt
|
|
|
438
465
|
return props;
|
|
439
466
|
}
|
|
440
467
|
_exports.getPropertyNamesAndDescriptions = getPropertyNamesAndDescriptions;
|
|
468
|
+
function isManifestChangesEnabled(control) {
|
|
469
|
+
let owner = Component.getOwnerComponentFor(control);
|
|
470
|
+
if (owner === undefined && control.getParent()) {
|
|
471
|
+
// In case of MassEdit, control is a sap.m.Dialog for which there is now OwnerComponent, so we need to consider its parent control
|
|
472
|
+
owner = Component.getOwnerComponentFor(control.getParent());
|
|
473
|
+
}
|
|
474
|
+
const sapFeManifest = owner?.getAppComponent().getManifestEntry("sap.fe");
|
|
475
|
+
return sapFeManifest?.app?.disableManifestChanges !== true;
|
|
476
|
+
}
|
|
477
|
+
_exports.isManifestChangesEnabled = isManifestChangesEnabled;
|
|
441
478
|
return _exports;
|
|
442
479
|
}, false);
|
|
443
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMiLCJkZXNpZ250aW1lU2V0dGluZ3MiLCJ1bmNoYW5nZWREYXRhIiwicHJvcGVydHlWYWx1ZXMiLCJwcm9wZXJ0eUNoYW5nZXMiLCJmb3JFYWNoIiwic2V0dGluZyIsImlkIiwiSlNPTiIsInN0cmluZ2lmeSIsIndyaXRlT2JqZWN0Iiwid3JpdGVPYmplY3RGb3IiLCJjaGFuZ2VPYmplY3QiLCJsZW5ndGgiLCJzZXR0aW5nc1RvZ2V0aGVyIiwicGF0aCIsInNraXBDaGFuZ2UiLCJfZXhwb3J0cyIsImdldENoYW5nZVN0cnVjdHVyZSIsImFwcENvbXBvbmVudCIsInBhZ2UiLCJwcm9wZXJ0eVBhdGgiLCJzZWxlY3RvciIsImNoYW5nZVNwZWNpZmljRGF0YSIsImFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlIiwiY29udGVudCIsInBhcmFtZXRlcnMiLCJlbnRpdHlQcm9wZXJ0eUNoYW5nZSIsIm9wZXJhdGlvbiIsInByb3BlcnR5VmFsdWUiLCJzZXRMb2NhbFRleHQiLCJpdGVtIiwicmVzb3VyY2VNb2RlbCIsImtleSIsImdldFRleHQiLCJzZXRMb2NhbFRleHRzIiwibW9kZWwiLCJzZXR0aW5nc0RhdGEiLCJnZXREYXRhIiwiY29udHJvbCIsImNvbnRyb2xEYXRhIiwiZW51bSIsImVudW1EYXRhIiwiY3JlYXRlQWRhcHRpb25EaWFsb2dDb250ZW50IiwiY29uZmlnQ29udGV4dCIsImNvbmZpZ1BhdGgiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzZXR0aW5nc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImRlZXBDbG9uZSIsImdldFByb3BlcnR5IiwibGlzdCIsIkxpc3QiLCJzZXRNb2RlbCIsImxpc3RJdGVtIiwiSW5wdXRMaXN0SXRlbSIsImxhYmVsIiwiYmluZENvbnRlbnQiLCJmYWN0b3J5IiwiY29udGV4dCIsInR5cGUiLCJJdGVtIiwidGV4dCIsInNlbGVjdCIsIlNlbGVjdCIsInNlbGVjdGVkS2V5IiwiY2hhbmdlIiwiZXZlbnQiLCJkYXRhIiwiZ2V0UGFyYW1ldGVyIiwiZ2V0S2V5IiwiYmluZEl0ZW1zIiwidGVtcGxhdGUiLCJJbnB1dCIsInZhbHVlIiwib011bHRpSW5wdXQiLCJNdWx0aUlucHV0Iiwid2lkdGgiLCJzaG93VmFsdWVIZWxwIiwic2hvd0NsZWFySWNvbiIsInRva2VucyIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFwIiwibmF2aWdhdGlvblByb3BlcnR5IiwiVG9rZW4iLCJ0b2tlblVwZGF0ZSIsImFycmF5IiwicHVzaCIsInNwbGljZSIsImluZGV4T2YiLCJhZGRWYWxpZGF0b3IiLCJhcmdzIiwiQ2hlY2tCb3giLCJzZWxlY3RlZCIsInRvTG93ZXJDYXNlIiwicGFyc2UiLCJ0b1N0cmluZyIsIm9wZW5BZGFwdGlvbkRpYWxvZyIsInRpdGxlIiwiaW5mb1RleHQiLCJzaXplIiwiaW5mb3JtYXRpb25NZXNzYWdlIiwiTWVzc2FnZVN0cmlwIiwic2hvd0ljb24iLCJhZGRTdHlsZUNsYXNzIiwibGlzdEluZGV4IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJkaWFsb2ciLCJEaWFsb2ciLCJjb250ZW50V2lkdGgiLCJjb250ZW50SGVpZ2h0IiwiaGVpZ2h0IiwiYnV0dG9ucyIsIkJ1dHRvbiIsInByZXNzIiwidXBkYXRlQ29uZmlnTW9kZWwiLCJnZXRDb250ZW50IiwiZ2V0TW9kZWwiLCJjbG9zZSIsIm9wZW4iLCJwcm9jZXNzQ2hhbmdlcyIsInNpbmdsZUNoYW5nZSIsImNoYW5nZXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZ2V0Q2hhbmdlIiwicHJvY2Vzc0dsb2JhbENoYW5nZXMiLCJrZXlzIiwic2VwYXJhdGVDaGFuZ2VzIiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRQYWdlIiwiZ2V0UGFyZW50Iiwic2VwYXJhdGVHbG9iYWxDaGFuZ2VzIiwidmlld0lkIiwiZ2V0VGFyZ2V0VmlldyIsImdldElkIiwic3BsaXQiLCJleHRyYWN0Q2hhbmdlcyIsInByb3BlcnR5VmFsdWVzRW50ZXJlZCIsImdsb2JhbFNldHRpbmdzIiwiZ2xvYmFsQ2hhbmdlcyIsImdsb2JhbCIsImNvbmNhdCIsIm5vQ2hhbmdlcyIsImlzRmlvcmlUb29sc1J0YU1vZGUiLCJ1cmxQYXJhbXMiLCJzaGVsbFNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwicGFyc2VQYXJhbWV0ZXJzIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJpc1JUQU1vZGUiLCJnZXRTZXR0aW5nc0lmS2V5VXNlciIsIml0ZW1zIiwiZmlsdGVyIiwia2V5VXNlciIsImlzQ29uZmlnTW9kZWxQcmVwYXJlZCIsInByZXBhcmVDb25maWdNb2RlbCIsInNldFByb3BlcnR5IiwiZ2V0UGVyc29uYWxpemF0aW9uU2V0dGluZyIsInNldHRpbmdzIiwiZ2V0T2JqZWN0IiwicGVyc29uYWxpemF0aW9uU2V0dGluZyIsImZpbmQiLCJ1cGRhdGVkU2V0dGluZ3MiLCJnZXRQcm9wZXJ0eU5hbWVzQW5kRGVzY3JpcHRpb25zIiwicHJvcHMiLCJwcm9wIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiZW51bXMiLCJlbnVtbSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGVzaWdudGltZS5oZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBSZXVzZSBmdW5jdGlvbnMgZm9yIGRlc2lnbnRpbWUgYWRhcHRpb25cbiAqL1xuXG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ2hlY2tCb3ggZnJvbSBcInNhcC9tL0NoZWNrQm94XCI7XG5pbXBvcnQgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBJbnB1dExpc3RJdGVtIGZyb20gXCJzYXAvbS9JbnB1dExpc3RJdGVtXCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgdHlwZSB7IE11bHRpSW5wdXQkVG9rZW5VcGRhdGVFdmVudCB9IGZyb20gXCJzYXAvbS9NdWx0aUlucHV0XCI7XG5pbXBvcnQgTXVsdGlJbnB1dCBmcm9tIFwic2FwL20vTXVsdGlJbnB1dFwiO1xuaW1wb3J0IFNlbGVjdCBmcm9tIFwic2FwL20vU2VsZWN0XCI7XG5pbXBvcnQgVG9rZW4gZnJvbSBcInNhcC9tL1Rva2VuXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSXRlbSBmcm9tIFwic2FwL3VpL2NvcmUvSXRlbVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBhZGFwdGlvbkNoYW5nZSA9IHtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdHNlbGVjdG9yOiBBcHBDb21wb25lbnQ7XG5cdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdGFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlOiBcImFwcGRlc2NyX2ZlX2NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5cdFx0Y29udGVudDoge1xuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYWdlOiBzdHJpbmc7XG5cdFx0XHRcdGVudGl0eVByb3BlcnR5Q2hhbmdlOiB7XG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdFx0b3BlcmF0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgRGVzaWdudGltZVNldHRpbmdFbnVtcyA9IHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlc2lnbnRpbWVTZXR0aW5nID0ge1xuXHRpZDogc3RyaW5nO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cdHJlc3RyaWN0ZWRUbz86IFRlbXBsYXRlVHlwZVtdO1xuXHR2YWx1ZTogdW5rbm93bjtcblx0dHlwZT86IHN0cmluZztcblx0ZW51bXM/OiBEZXNpZ250aW1lU2V0dGluZ0VudW1zW107XG5cdHNraXBDaGFuZ2U/OiBib29sZWFuO1xuXHR3cml0ZU9iamVjdEZvcj86IHN0cmluZztcblx0d3JpdGVPYmplY3Q/OiB7IGlkOiBzdHJpbmc7IHBhdGg/OiBzdHJpbmcgfVtdO1xuXHRrZXlVc2VyPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VmFsdWUgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nc0RhdGEgPSB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHRvb2x0aXA6IHN0cmluZztcblx0Y29udHJvbDogQ29udHJvbERhdGFbXTtcblx0a2V5VXNlcj86IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRyb2xEYXRhID0ge1xuXHR0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVudW06IERlc2lnbnRpbWVTZXR0aW5nRW51bXNbXSB8IHVuZGVmaW5lZDtcblx0dmFsdWU6IHVua25vd247XG5cdGlkOiBzdHJpbmc7XG59O1xuXG50eXBlIHByb3BLZXlBbmRWYWx1ZSA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkIH07XG5cbi8qKlxuICogSWRlbnRpZnkgd2hpY2ggc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkLlxuICogQHBhcmFtIGRlc2lnbnRpbWVTZXR0aW5nc1xuICogQHBhcmFtIHVuY2hhbmdlZERhdGFcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlc1xuICogIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgd2hlcmUgdGhlIHZhbHVlcyBoYXZlIGJlZW4gY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgc3RhcnRpbmcgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMoXG5cdGRlc2lnbnRpbWVTZXR0aW5nczogRGVzaWdudGltZVNldHRpbmdbXSxcblx0dW5jaGFuZ2VkRGF0YTogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVcbik6IFByb3BlcnR5VmFsdWUge1xuXHRjb25zdCBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUgPSB7fTtcblxuXHRkZXNpZ250aW1lU2V0dGluZ3MuZm9yRWFjaChmdW5jdGlvbiAoc2V0dGluZykge1xuXHRcdGlmIChcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSAhPT0gXCJvYmplY3RcIiAmJiB1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdICE9PSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXSkgfHxcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeSh1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdKSAhPT0gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0pKVxuXHRcdCkge1xuXHRcdFx0aWYgKHNldHRpbmcud3JpdGVPYmplY3QgJiYgcHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0gPT09IHNldHRpbmcud3JpdGVPYmplY3RGb3IpIHtcblx0XHRcdFx0Ly8gV2Ugd3JpdGUgYW4gb2JqZWN0IGZvciB0aGlzIHNldHRpbmdcblx0XHRcdFx0Y29uc3QgY2hhbmdlT2JqZWN0OiBQcm9wZXJ0eVZhbHVlID0ge307XG5cdFx0XHRcdGlmIChzZXR0aW5nLndyaXRlT2JqZWN0ICYmIHNldHRpbmcud3JpdGVPYmplY3Q/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzZXR0aW5nLndyaXRlT2JqZWN0LmZvckVhY2goZnVuY3Rpb24gKHNldHRpbmdzVG9nZXRoZXIpIHtcblx0XHRcdFx0XHRcdGNoYW5nZU9iamVjdFtzZXR0aW5nc1RvZ2V0aGVyLnBhdGggPyBzZXR0aW5nc1RvZ2V0aGVyLnBhdGggOiBzZXR0aW5nc1RvZ2V0aGVyLmlkXSA9XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NldHRpbmdzVG9nZXRoZXIuaWRdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BlcnR5Q2hhbmdlc1tzZXR0aW5nLnBhdGggPyBzZXR0aW5nLnBhdGggOiBzZXR0aW5nLmlkXSA9IGNoYW5nZU9iamVjdDtcblx0XHRcdH0gZWxzZSBpZiAoIXNldHRpbmcuc2tpcENoYW5nZSkge1xuXHRcdFx0XHRwcm9wZXJ0eUNoYW5nZXNbc2V0dGluZy5wYXRoID8gc2V0dGluZy5wYXRoIDogc2V0dGluZy5pZF0gPSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcHJvcGVydHlDaGFuZ2VzO1xufVxuLyoqXG4gKiBDb252ZXJ0IHNhcC5mZSBjaGFuZ2UgaW50byBhIHN0cnVjdHVyZSByZXF1aXJlZCBieSB0aGUgZmxleGliaWxpdHkgdG9vbHMuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFnZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHJldHVybnMgVGhlIGNoYW5nZSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlU3RydWN0dXJlKFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cHJvcGVydHlDaGFuZ2VzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWRcbik6IGFkYXB0aW9uQ2hhbmdlIHtcblx0cmV0dXJuIHtcblx0XHRhcHBDb21wb25lbnQ6IGFwcENvbXBvbmVudCxcblx0XHRzZWxlY3RvcjogYXBwQ29tcG9uZW50LFxuXHRcdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdFx0YXBwRGVzY3JpcHRvckNoYW5nZVR5cGU6IFwiYXBwZGVzY3JfZmVfY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cIixcblx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdHBhZ2U6IHBhZ2UsXG5cdFx0XHRcdFx0ZW50aXR5UHJvcGVydHlDaGFuZ2U6IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uOiBcIlVQU0VSVFwiLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogcHJvcGVydHlDaGFuZ2VzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBzZXRMb2NhbFRleHQoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBrZXkgaW4gaXRlbSkge1xuXHRcdGlmIChrZXkgIT09IFwiaWRcIiAmJiB0eXBlb2YgaXRlbVtrZXldID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpdGVtW2tleV0gPSByZXNvdXJjZU1vZGVsLmdldFRleHQoaXRlbVtrZXldIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldExvY2FsVGV4dHMobW9kZWw6IEpTT05Nb2RlbCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IHZvaWQge1xuXHRjb25zdCBzZXR0aW5nc0RhdGEgPSBtb2RlbC5nZXREYXRhKCkgYXMgU2V0dGluZ3NEYXRhW107XG5cdHNldHRpbmdzRGF0YS5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XG5cdFx0c2V0TG9jYWxUZXh0KHNldHRpbmcsIHJlc291cmNlTW9kZWwpO1xuXHRcdHNldHRpbmcuY29udHJvbC5mb3JFYWNoKChjb250cm9sRGF0YSkgPT4ge1xuXHRcdFx0c2V0TG9jYWxUZXh0KGNvbnRyb2xEYXRhLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGNvbnRyb2xEYXRhLmVudW0/LmZvckVhY2goKGVudW1EYXRhKSA9PiB7XG5cdFx0XHRcdHNldExvY2FsVGV4dChlbnVtRGF0YSwgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGlvbkRpYWxvZ0NvbnRlbnQoXG5cdGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsXG5cdHByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRjb25maWdQYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIlxuKTogTGlzdCB7XG5cdGNvbnN0IHNldHRpbmdzTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdHNldHRpbmdzTW9kZWwuc2V0RGF0YShkZWVwQ2xvbmUoY29uZmlnQ29udGV4dC5nZXRQcm9wZXJ0eShjb25maWdQYXRoKSkpO1xuXHRzZXRMb2NhbFRleHRzKHNldHRpbmdzTW9kZWwsIHJlc291cmNlTW9kZWwpO1xuXHRjb25zdCBsaXN0ID0gbmV3IExpc3QoKTtcblx0bGlzdC5zZXRNb2RlbChzZXR0aW5nc01vZGVsKTtcblxuXHRjb25zdCBsaXN0SXRlbSA9IG5ldyBJbnB1dExpc3RJdGVtKHtcblx0XHRsYWJlbDogXCJ7bGFiZWx9XCJcblx0fSk7XG5cblx0bGlzdEl0ZW0uYmluZENvbnRlbnQoe1xuXHRcdHBhdGg6IFwiY29udHJvbFwiLFxuXHRcdGZhY3Rvcnk6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IHsgZ2V0UHJvcGVydHkobmFtZTogc3RyaW5nKTogc3RyaW5nIH0gLyogc2FwLnVpLm1vZGVsLkNvbnRleHQgKi8pIHtcblx0XHRcdGNvbnN0IHR5cGUgPSBjb250ZXh0LmdldFByb3BlcnR5KFwidHlwZVwiKTtcblx0XHRcdGNvbnN0IGlkID0gY29udGV4dC5nZXRQcm9wZXJ0eShcImlkXCIpO1xuXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiZW51bVwiKSkge1xuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgc2VsZWN0IGxpc3QgZm9yIG11bHRpcGxlIG9wdGlvbnMgdG8gc2VsZWN0XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gbmV3IEl0ZW0oe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiBcIntuYW1lfVwiLFxuXHRcdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ID0gbmV3IFNlbGVjdCh7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdFx0Y2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBTZWxlY3QpLmRhdGEoXCJpZFwiKSBhcyBrZXlvZiBQcm9wZXJ0eVZhbHVlXSA9IChcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50LmdldFBhcmFtZXRlcihcInNlbGVjdGVkSXRlbVwiKSBhcyBJdGVtXG5cdFx0XHRcdFx0XHRcdFx0KS5nZXRLZXkoKSBhcyBzdHJpbmcgJiBib29sZWFuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXG5cdFx0XHRcdFx0XHRzZWxlY3QuYmluZEl0ZW1zKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJlbnVtXCIsXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiBpdGVtXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Q7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgdGV4dCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIElucHV0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSBhcyBzdHJpbmcgJlxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9vbGVhbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdbXVwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBtdWx0aSBpbnB1dCBmaWVsZCBmb3IgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRcdGNvbnN0IG9NdWx0aUlucHV0ID0gbmV3IE11bHRpSW5wdXQoe1xuXHRcdFx0XHRcdFx0d2lkdGg6IFwiNzAlXCIsXG5cdFx0XHRcdFx0XHRzaG93VmFsdWVIZWxwOiBmYWxzZSxcblx0XHRcdFx0XHRcdHNob3dDbGVhckljb246IHRydWUsXG5cdFx0XHRcdFx0XHR0b2tlbnM6IChwcm9wZXJ0eVZhbHVlcz8ubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgc3RyaW5nW10pLm1hcCgobmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oeyB0ZXh0OiBuYXZpZ2F0aW9uUHJvcGVydHksIGtleTogbmF2aWdhdGlvblByb3BlcnR5IH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0b2tlblVwZGF0ZTogZnVuY3Rpb24gKGV2ZW50OiBNdWx0aUlucHV0JFRva2VuVXBkYXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXJyYXkgPSBwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBNdWx0aUlucHV0KS5kYXRhKFwiaWRcIildIGFzIHN0cmluZ1tdO1xuXHRcdFx0XHRcdFx0XHRpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXJyYXkucHVzaCgoZXZlbnQ/LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pWzBdPy5nZXRQcm9wZXJ0eShcImtleVwiKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSk/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRhcnJheS5zcGxpY2UoYXJyYXkuaW5kZXhPZigoZXZlbnQ/LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSlbMF0/LmdldFByb3BlcnR5KFwia2V5XCIpKSwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXHRcdFx0XHRcdG9NdWx0aUlucHV0LmFkZFZhbGlkYXRvcihmdW5jdGlvbiAoYXJnczogeyB0ZXh0OiBzdHJpbmcgfSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGV4dCA9IGFyZ3MudGV4dDtcblx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oe1xuXHRcdFx0XHRcdFx0XHRrZXk6IHRleHQsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IHRleHRcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBvTXVsdGlJbnB1dDtcblx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgbnVtYmVyIGNoYW5nZXNcblx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdHZhbHVlOiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiTnVtYmVyXCIsXG5cdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBJbnB1dCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikgYXMgc3RyaW5nICZcblx0XHRcdFx0XHRcdFx0XHRib29sZWFuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgY2hlY2tib3ggZm9yIHRydWUvZmFsc2UgdmFsdWVzXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBDaGVja0JveCh7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogXCJ7dmFsdWV9XCIsXG5cdFx0XHRcdFx0XHRzZWxlY3Q6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBDaGVja0JveCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFwic2VsZWN0ZWRcIlxuXHRcdFx0XHRcdFx0XHQpIGFzIHN0cmluZyAmIGJvb2xlYW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5PclN0cmluZ1wiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhIHNlbGVjdCBsaXN0IGZvciBib29sZWFuIGFuZCBzdHJpbmcgb3B0aW9ucyB0byBzZWxlY3Rcblx0XHRcdFx0XHQvLyBUaGlzIHR5cGUgaXMgYXQgdGhlIG1vbWVudCBvbmx5IHVzZWQgZm9yIHBlcnNvbmFsaXphdGlvbiBzZXR0aW5ncyB3aGljaCBjYW4gYmUgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSBvciBhbiBvYmplY3Rcblx0XHRcdFx0XHQvLyBUaGUgc2VsZWN0IGxpc3QgaXMgdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0cnVlLCBmYWxzZSBhbmQgXCJPd24gU2V0dGluZ3NcIlxuXHRcdFx0XHRcdC8vIElmIFwiT3duIFNldHRpbmdzXCIgaXMgc2VsZWN0ZWQsIHRoZSBwZXJzb25hbGl6YXRpb24gb2JqZWN0IGlzIHdyaXR0ZW4sIG90aGVyd2lzZSB0aGUgYm9vbGVhbiBpcyB3cml0dGVuICh1bmRlZmluZWQgY2Fubm90IGJlIHdyaXR0ZW4gaW4gYSBtYW5pZmVzdCBjaGFuZ2UpXG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IG5ldyBJdGVtKHtcblx0XHRcdFx0XHRcdHRleHQ6IFwie25hbWV9XCIsXG5cdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRjb25zdCBzZWxlY3QgPSBuZXcgU2VsZWN0KHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9IChldmVudC5nZXRQYXJhbWV0ZXIoXCJzZWxlY3RlZEl0ZW1cIikgYXMgSXRlbSkuZ2V0S2V5KCk7XG5cdFx0XHRcdFx0XHRcdC8vIENvbnZlcnQgc3RyaW5nIHRvIGJvb2xlYW4gaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbKHRoaXMgYXMgU2VsZWN0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXG5cdFx0XHRcdFx0c2VsZWN0LmJpbmRJdGVtcyh7XG5cdFx0XHRcdFx0XHRwYXRoOiBcImVudW1cIixcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiBpdGVtXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuIHNlbGVjdDtcblx0XHRcdFx0Y2FzZSBcImpzb25cIjpcblx0XHRcdFx0XHQvLyBDcmVhdGUgYW4gaW5wdXQgZm9yIGpzb24gb2JqZWN0IGRlc2NyaXB0aW9uc1xuXHRcdFx0XHRcdC8vIEEgdGV4dCBhcmVhIHdvdWxkIGhhdmUgYmVlbiBiZXR0ZXIgYnV0IHRoaXMgZG9lcyBub3Qgd29yayB3aXRoIHRoZSBJbnB1dExpc3RJdGVtXG5cdFx0XHRcdFx0Ly8gd2Ugd291bGQgaGF2ZSBuZWVkZWQgYSBDdXN0b21MaXN0SXRlbSBpbnN0ZWFkXG5cdFx0XHRcdFx0Ly8gd2hpY2ggd291bGQgaGF2ZSBiZWVuIHRvbyBtdWNoIGVmZm9ydCBhcyB3ZSB3b3VsZCBoYXZlIG5lZWRlZCB0byBjaGFuZ2UgdGhlIHdob2xlIHN0cnVjdHVyZVxuXHRcdFx0XHRcdHJldHVybiBuZXcgSW5wdXQoe1xuXHRcdFx0XHRcdFx0dmFsdWU6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0Y2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbKHRoaXMgYXMgSW5wdXQpLmRhdGEoXCJpZFwiKSBhcyBrZXlvZiBQcm9wZXJ0eVZhbHVlXSA9IEpTT04ucGFyc2UoXG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIik/LnRvU3RyaW5nKCkgYXMgc3RyaW5nXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdGxpc3QuYmluZEl0ZW1zKHtcblx0XHRwYXRoOiBcIi9cIixcblx0XHR0ZW1wbGF0ZTogbGlzdEl0ZW1cblx0fSk7XG5cblx0cmV0dXJuIGxpc3Q7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQWRhcHRpb25EaWFsb2coXG5cdGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsXG5cdHByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlLFxuXHR0aXRsZTogc3RyaW5nLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRjb25maWdQYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIixcblx0aW5mb1RleHQgPSBcIntzYXAuZmUuaTE4bj5SVEFfQ09ORklHVVJBVElPTl9JTkZPX01FU1NBR0V9XCIsXG5cdHNpemU/OiB7IHdpZHRoOiBzdHJpbmc7IGhlaWdodDogc3RyaW5nIH1cbik6IFByb21pc2U8UHJvcGVydHlWYWx1ZT4ge1xuXHRjb25zdCBsaXN0ID0gY3JlYXRlQWRhcHRpb25EaWFsb2dDb250ZW50KGNvbmZpZ0NvbnRleHQsIHByb3BlcnR5VmFsdWVzLCByZXNvdXJjZU1vZGVsLCBjb25maWdQYXRoKTtcblx0Y29uc3QgY29udGVudDogKExpc3QgfCBNZXNzYWdlU3RyaXApW10gPSBbXTtcblx0Y29uc3QgaW5mb3JtYXRpb25NZXNzYWdlID0gbmV3IE1lc3NhZ2VTdHJpcCh7XG5cdFx0c2hvd0ljb246IHRydWUsXG5cdFx0dHlwZTogXCJJbmZvcm1hdGlvblwiLFxuXHRcdHRleHQ6IGluZm9UZXh0XG5cdH0pO1xuXHRpbmZvcm1hdGlvbk1lc3NhZ2UuYWRkU3R5bGVDbGFzcyhcInNhcFVpU21hbGxNYXJnaW5Cb3R0b21cIik7XG5cdGNvbnRlbnQucHVzaChpbmZvcm1hdGlvbk1lc3NhZ2UpO1xuXHRjb250ZW50LnB1c2gobGlzdCk7XG5cdGNvbnN0IGxpc3RJbmRleCA9IGNvbnRlbnQuaW5kZXhPZihsaXN0KTtcblx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRjb25zdCBkaWFsb2cgPSBuZXcgRGlhbG9nKHtcblx0XHRcdHRpdGxlOiB0aXRsZSxcblx0XHRcdGNvbnRlbnRXaWR0aDogc2l6ZSA/IHNpemUud2lkdGggOiBcIjU1MHB4XCIsXG5cdFx0XHRjb250ZW50SGVpZ2h0OiBzaXplID8gc2l6ZS5oZWlnaHQgOiBcIjMwMHB4XCIsXG5cdFx0XHRjb250ZW50OiBjb250ZW50LFxuXHRcdFx0YnV0dG9uczogW1xuXHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHR0ZXh0OiBcIntzYXAuZmUuaTE4bj5SVEFfQ09ORklHVVJBVElPTl9BUFBMWX1cIixcblx0XHRcdFx0XHR0eXBlOiBcIkVtcGhhc2l6ZWRcIixcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0Ly8gcGVyc2lzdCBjaGFuZ2VzIGRvbmVcblx0XHRcdFx0XHRcdHVwZGF0ZUNvbmZpZ01vZGVsKGNvbmZpZ0NvbnRleHQsIGRpYWxvZy5nZXRDb250ZW50KClbbGlzdEluZGV4XS5nZXRNb2RlbCgpIGFzIEpTT05Nb2RlbCwgY29uZmlnUGF0aCk7XG5cdFx0XHRcdFx0XHRkaWFsb2cuY2xvc2UoKTtcblx0XHRcdFx0XHRcdHJlc29sdmUocHJvcGVydHlWYWx1ZXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSksXG5cdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdHRleHQ6IFwie3NhcC5mZS5pMThuPlJUQV9DT05GSUdVUkFUSU9OX0NBTkNFTH1cIixcblx0XHRcdFx0XHRwcmVzczogZnVuY3Rpb24gKCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRdXG5cdFx0fSk7XG5cdFx0ZGlhbG9nLnNldE1vZGVsKHJlc291cmNlTW9kZWwsIFwic2FwLmZlLmkxOG5cIik7XG5cdFx0ZGlhbG9nLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUNvbnRlbnRQYWRkaW5nXCIpO1xuXHRcdGRpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlSVEFCb3JkZXJcIik7XG5cdFx0ZGlhbG9nLm9wZW4oKTtcblx0XHRyZXR1cm47XG5cdH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NoYW5nZXMoXG5cdHByb3BlcnR5Q2hhbmdlczogcHJvcEtleUFuZFZhbHVlLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGxldCBzaW5nbGVDaGFuZ2U6IHByb3BLZXlBbmRWYWx1ZSA9IHt9O1xuXHRjb25zdCBjaGFuZ2VzID0gW107XG5cdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5Q2hhbmdlcykpIHtcblx0XHRzaW5nbGVDaGFuZ2UgPSB7fTtcblx0XHRzaW5nbGVDaGFuZ2Vba2V5XSA9IHZhbHVlO1xuXHRcdGNoYW5nZXMucHVzaChnZXRDaGFuZ2Uoc2luZ2xlQ2hhbmdlLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCkpO1xuXHR9XG5cdHJldHVybiBjaGFuZ2VzO1xufVxuXG4vKipcbiAqIEZvcm1hdCBlYWNoIGNoYW5nZSBtYWRlIHRvIGdsb2JhbCBzZXR0aW5ncyBcInNhcC5mZVwiXG4gKiBUaGUgc2V0IG9mIGNoYW5nZXMgYXJlIHB1dCBpbnRvIGluZGl2aWR1YWwgY2hhbmdlcyB0byBlbnN1cmVcbiAqIHRoYXQgZWFybGllciBjaGFuZ2VzIGFyZSBub3QgbG9zdCB3aGVuIHRoZXNlIGFyZSBsb2FkZWQgYXQgcnVudGltZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUNoYW5nZXNcbiAqIEBwYXJhbSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBwYWdlXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoXG4gKiBAcmV0dXJucyBUaGUgY2hhbmdlIHN0cnVjdHVyZSB1c2VkIGJ5IGZsZXhpYmlsaXR5IHRvb2xzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzR2xvYmFsQ2hhbmdlcyhcblx0cHJvcGVydHlDaGFuZ2VzOiBwcm9wS2V5QW5kVmFsdWUsXG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRwYWdlOiBzdHJpbmcsXG5cdHByb3BlcnR5UGF0aDogc3RyaW5nXG4pOiBhZGFwdGlvbkNoYW5nZVtdIHtcblx0bGV0IHNpbmdsZUNoYW5nZTogcHJvcEtleUFuZFZhbHVlID0ge307XG5cdGNvbnN0IGNoYW5nZXMgPSBbXTtcblx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcGVydHlDaGFuZ2VzKSkge1xuXHRcdHNpbmdsZUNoYW5nZSA9IHt9O1xuXHRcdHNpbmdsZUNoYW5nZVtrZXldID0gdmFsdWU7XG5cdFx0Y2hhbmdlcy5wdXNoKGdldENoYW5nZShzaW5nbGVDaGFuZ2UsIGFwcENvbXBvbmVudCwgcGFnZSwgcHJvcGVydHlQYXRoKSk7XG5cdH1cblx0cmV0dXJuIGNoYW5nZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2UoXG5cdHByb3BlcnR5Q2hhbmdlczogcHJvcEtleUFuZFZhbHVlLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogYWRhcHRpb25DaGFuZ2Uge1xuXHQvLyBDaGFuZ2VzIGZvciBjb250cm9scyBoYXZlIGEgcGF0aCBzdGFydGluZyB3aXRoIGNvbnRyb2xDb25maWd1cmF0aW9uLCBmb2xsb3dlZCBieSBhbiBhbm5vdGF0aW9uIHBhdGhcblx0Ly8gRm9yIHRoZSBsaXN0IHJlcG9ydCBjaGFuZ2VzLCB0aGVyZSBpcyBubyBwYXRoIGJlY2F1c2UgdGhlIHByb3BlcnRpZXMgYXJlIGRpcmVjdGx5IHVuZGVyIFNldHRpbmdzXG5cdC8vIGZvciB0aGUgXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnRcIiBpbiB0aGUgbWFuaWZlc3QuXG5cdGlmIChwcm9wZXJ0eVBhdGggPT09IFwiXCIpIHtcblx0XHRwcm9wZXJ0eVBhdGggPSBPYmplY3Qua2V5cyhwcm9wZXJ0eUNoYW5nZXMpWzBdO1xuXHR9IGVsc2Uge1xuXHRcdHByb3BlcnR5UGF0aCA9IHByb3BlcnR5UGF0aCArIFwiL1wiICsgT2JqZWN0LmtleXMocHJvcGVydHlDaGFuZ2VzKVswXTtcblx0fVxuXHRjb25zdCB2YWx1ZSA9IHByb3BlcnR5Q2hhbmdlc1tPYmplY3Qua2V5cyhwcm9wZXJ0eUNoYW5nZXMpWzBdXTtcblxuXHRyZXR1cm4gZ2V0Q2hhbmdlU3RydWN0dXJlKGFwcENvbXBvbmVudCwgcGFnZSwgcHJvcGVydHlQYXRoLCB2YWx1ZSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwYXJhbWV0ZXJzIG90aGVyIHRoYW4gdGhlIGNvbnRyb2wgc2V0dGluZ3MgdGhhdCBhcmUgbmVlZGVkXG4gKiBmb3IgdGhlIGNoYW5nZSBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFuZ2VzXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHJldHVybnMgVGhlIGNoYW5nZXMgaW4gYSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGVDaGFuZ2VzKHByb3BlcnR5Q2hhbmdlczogUHJvcGVydHlWYWx1ZSwgcHJvcGVydHlQYXRoOiBzdHJpbmcsIGNvbnRyb2w6IENvbnRyb2wpOiBhZGFwdGlvbkNoYW5nZVtdIHtcblx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KGNvbnRyb2wpO1xuXHRjb25zdCBwYWdlID0gZ2V0UGFnZShjb250cm9sLmdldFBhcmVudCgpIGFzIENvbnRyb2wpO1xuXHRyZXR1cm4gcHJvY2Vzc0NoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCk7XG59XG5cbi8qKlxuICogR2V0IHRoZSBwYXJhbWV0ZXJzIG90aGVyIHRoYW4gdGhlIGdsb2JhbCBzZXR0aW5ncyB0aGF0IGFyZSBuZWVkZWRcbiAqIGZvciB0aGUgY2hhbmdlIHN0cnVjdHVyZS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUNoYW5nZXNcbiAqIEBwYXJhbSBwcm9wZXJ0eVBhdGhcbiAqIEBwYXJhbSBjb250cm9sXG4gKiBAcmV0dXJucyBUaGUgY2hhbmdlcyBpbiBhIHN0cnVjdHVyZSB1c2VkIGJ5IGZsZXhpYmlsaXR5IHRvb2xzXG4gKi9cbmZ1bmN0aW9uIHNlcGFyYXRlR2xvYmFsQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb250cm9sOiBDb250cm9sKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sKTtcblx0Y29uc3QgcGFnZSA9IFwic2FwLmZlXCI7XG5cdHJldHVybiBwcm9jZXNzR2xvYmFsQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXMsIGFwcENvbXBvbmVudCwgcGFnZSwgcHJvcGVydHlQYXRoKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFnZShjb250cm9sOiBDb250cm9sKTogc3RyaW5nIHtcblx0Y29uc3Qgdmlld0lkID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0Vmlldyhjb250cm9sKS5nZXRJZCgpLnNwbGl0KFwiOjpcIik7XG5cdHJldHVybiB2aWV3SWRbdmlld0lkLmxlbmd0aCAtIDFdO1xufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdENoYW5nZXMgPSBmdW5jdGlvbiAoXG5cdGRlc2lnbnRpbWVTZXR0aW5nczogRGVzaWdudGltZVNldHRpbmdbXSxcblx0dW5jaGFuZ2VkRGF0YTogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlWYWx1ZXNFbnRlcmVkOiBQcm9wZXJ0eVZhbHVlLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0Y29udHJvbDogQ29udHJvbCxcblx0Z2xvYmFsU2V0dGluZ3M/OiBEZXNpZ250aW1lU2V0dGluZ1tdXG4pOiBhZGFwdGlvbkNoYW5nZVtdIHtcblx0Y29uc3QgcHJvcGVydHlDaGFuZ2VzID0gZ2V0Q2hhbmdlZFByb3BlcnR5VmFsdWVzKGRlc2lnbnRpbWVTZXR0aW5ncywgdW5jaGFuZ2VkRGF0YSwgcHJvcGVydHlWYWx1ZXNFbnRlcmVkKTtcblx0Ly8gUHV0IGVhY2ggcHJvcGVydHkgaW50byBpdHMgb3duIGNoYW5nZS4gVGhpcyBlbnN1cmVzIHRoYXQgd2UgZG9uJ3QgbG9zZSBwcmV2aW91cyBjaGFuZ2VzLlxuXHRsZXQgY2hhbmdlcyA9IHNlcGFyYXRlQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXMsIHByb3BlcnR5UGF0aCwgY29udHJvbCk7XG5cdGlmIChnbG9iYWxTZXR0aW5ncykge1xuXHRcdGNvbnN0IGdsb2JhbENoYW5nZXMgPSBnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMoZ2xvYmFsU2V0dGluZ3MsIHVuY2hhbmdlZERhdGEsIHByb3BlcnR5VmFsdWVzRW50ZXJlZCk7XG5cdFx0Y29uc3QgZ2xvYmFsID0gc2VwYXJhdGVHbG9iYWxDaGFuZ2VzKGdsb2JhbENoYW5nZXMsIHByb3BlcnR5UGF0aCwgY29udHJvbCk7XG5cdFx0Y2hhbmdlcyA9IGNoYW5nZXMuY29uY2F0KGdsb2JhbCk7XG5cdH1cblx0aWYgKGNoYW5nZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBjaGFuZ2VzO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBbXTtcblx0fVxufTtcblxuZXhwb3J0IGNvbnN0IG5vQ2hhbmdlcyA9IGZ1bmN0aW9uICgpOiBbXSB7XG5cdHJldHVybiBbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zpb3JpVG9vbHNSdGFNb2RlKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIHJ0YSBtb2RlIGhhcyBiZWVuIHNwZWNpZmllZCBvbiB1cmwgKGZvciBsb2NhbCB0ZXN0aW5nKVxuXHRsZXQgdXJsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0Y29uc3Qgc2hlbGxTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0dXJsUGFyYW1zID0gc2hlbGxTZXJ2aWNlPy5wYXJzZVBhcmFtZXRlcnM/Lih3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0cmV0dXJuICEhdXJsUGFyYW1zICYmIHVybFBhcmFtc1tcImZpb3JpLXRvb2xzLXJ0YS1tb2RlXCJdPy5bMF0gPT09IFwiZm9yQWRhcHRhdGlvblwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSVEFNb2RlKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogYm9vbGVhbiB7XG5cdC8vIENoZWNrIGlmIHJ0YSBtb2RlIGhhcyBiZWVuIHNwZWNpZmllZCBvbiB1cmwgKGZvciBsb2NhbCB0ZXN0aW5nKVxuXHRsZXQgdXJsUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0Y29uc3Qgc2hlbGxTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKTtcblx0dXJsUGFyYW1zID0gc2hlbGxTZXJ2aWNlPy5wYXJzZVBhcmFtZXRlcnM/Lih3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0cmV0dXJuICEhdXJsUGFyYW1zICYmIHVybFBhcmFtc1tcInNhcC1mZS1ydGEtbW9kZVwiXT8uWzBdID09PSBcInRydWVcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNldHRpbmdzSWZLZXlVc2VyKGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LCBpdGVtczogU2V0dGluZ3NEYXRhW10pOiBTZXR0aW5nc0RhdGFbXSB7XG5cdGlmICghaXNGaW9yaVRvb2xzUnRhTW9kZShhcHBDb21wb25lbnQpKSB7XG5cdFx0Ly8gbm90IHRvb2xzID0+IGtleSB1c2VyXG5cdFx0cmV0dXJuIGl0ZW1zLmZpbHRlcigoc2V0dGluZykgPT4ge1xuXHRcdFx0cmV0dXJuIHNldHRpbmcua2V5VXNlcjtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gaXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbmZpZ01vZGVsUHJlcGFyZWQoY29uZmlnQ29udGV4dDogQ29udGV4dCwgcGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIpOiBib29sZWFuIHtcblx0aWYgKGNvbmZpZ0NvbnRleHQuZ2V0UHJvcGVydHkocGF0aCkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnTW9kZWwoaXRlbXM6IFNldHRpbmdzRGF0YVtdLCBjb25maWdDb250ZXh0OiBDb250ZXh0LCBwYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIik6IHZvaWQge1xuXHRpZiAoIWNvbmZpZ0NvbnRleHQuZ2V0UHJvcGVydHkocGF0aCkpIHtcblx0XHRjb25maWdDb250ZXh0LnNldFByb3BlcnR5KHBhdGgsIGl0ZW1zKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGVyc29uYWxpemF0aW9uU2V0dGluZyhjb25maWdDb250ZXh0OiBDb250ZXh0LCBwYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIik6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRjb25zdCBzZXR0aW5ncyA9IGNvbmZpZ0NvbnRleHQuZ2V0T2JqZWN0KHBhdGgpO1xuXHRjb25zdCBwZXJzb25hbGl6YXRpb25TZXR0aW5nID0gc2V0dGluZ3MuZmluZCgoc2V0dGluZzogU2V0dGluZ3NEYXRhKSA9PiB7XG5cdFx0cmV0dXJuIHNldHRpbmc/LmNvbnRyb2xbMF0/LmlkID09PSBcInBlcnNvbmFsaXphdGlvblwiO1xuXHR9KTtcblx0aWYgKHBlcnNvbmFsaXphdGlvblNldHRpbmcpIHtcblx0XHRyZXR1cm4gcGVyc29uYWxpemF0aW9uU2V0dGluZy5jb250cm9sWzBdLnZhbHVlO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDb25maWdNb2RlbChjb25maWdDb250ZXh0OiBDb250ZXh0LCBzZXR0aW5nc01vZGVsOiBKU09OTW9kZWwsIHBhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiKTogdm9pZCB7XG5cdGNvbnN0IHVwZGF0ZWRTZXR0aW5ncyA9IGRlZXBDbG9uZShzZXR0aW5nc01vZGVsLmdldERhdGEoKSk7XG5cdGNvbmZpZ0NvbnRleHQuc2V0UHJvcGVydHkocGF0aCwgdXBkYXRlZFNldHRpbmdzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZXNBbmREZXNjcmlwdGlvbnMocHJvcHM6IERlc2lnbnRpbWVTZXR0aW5nW10sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiBEZXNpZ250aW1lU2V0dGluZ1tdIHtcblx0cHJvcHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuXHRcdHByb3AubmFtZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChwcm9wLm5hbWUpO1xuXHRcdHByb3AuZGVzY3JpcHRpb24gPSByZXNvdXJjZU1vZGVsLmdldFRleHQocHJvcC5kZXNjcmlwdGlvbik7XG5cdFx0aWYgKHByb3AuZW51bXMpIHtcblx0XHRcdHByb3AuZW51bXMuZm9yRWFjaChmdW5jdGlvbiAoZW51bW0pIHtcblx0XHRcdFx0ZW51bW0ubmFtZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChlbnVtbS5uYW1lKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHByb3BzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQUFBO0FBQ0E7QUFDQTtFQWdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLHdCQUF3QkEsQ0FDdkNDLGtCQUF1QyxFQUN2Q0MsYUFBNEIsRUFDNUJDLGNBQTZCLEVBQ2I7SUFDaEIsTUFBTUMsZUFBOEIsR0FBRyxDQUFDLENBQUM7SUFFekNILGtCQUFrQixDQUFDSSxPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO01BQzdDLElBQ0UsT0FBT0osYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLLFFBQVEsSUFBSUwsYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FB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
|
|
480
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMiLCJkZXNpZ250aW1lU2V0dGluZ3MiLCJ1bmNoYW5nZWREYXRhIiwicHJvcGVydHlWYWx1ZXMiLCJwcm9wZXJ0eUNoYW5nZXMiLCJmb3JFYWNoIiwic2V0dGluZyIsImlkIiwiSlNPTiIsInN0cmluZ2lmeSIsIndyaXRlT2JqZWN0Iiwid3JpdGVPYmplY3RGb3IiLCJjaGFuZ2VPYmplY3QiLCJsZW5ndGgiLCJzZXR0aW5nc1RvZ2V0aGVyIiwicGF0aCIsInNraXBDaGFuZ2UiLCJfZXhwb3J0cyIsImdldENoYW5nZVN0cnVjdHVyZSIsImFwcENvbXBvbmVudCIsInBhZ2UiLCJwcm9wZXJ0eVBhdGgiLCJzZWxlY3RvciIsImNoYW5nZVNwZWNpZmljRGF0YSIsImFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlIiwiY29udGVudCIsInBhcmFtZXRlcnMiLCJlbnRpdHlQcm9wZXJ0eUNoYW5nZSIsIm9wZXJhdGlvbiIsInByb3BlcnR5VmFsdWUiLCJzZXRMb2NhbFRleHQiLCJpdGVtIiwicmVzb3VyY2VNb2RlbCIsImtleSIsImdldFRleHQiLCJzZXRMb2NhbFRleHRzIiwibW9kZWwiLCJzZXR0aW5nc0RhdGEiLCJnZXREYXRhIiwiY29udHJvbCIsImNvbnRyb2xEYXRhIiwiZW51bSIsImVudW1EYXRhIiwiY3JlYXRlQWRhcHRpb25EaWFsb2dDb250ZW50IiwiY29uZmlnQ29udGV4dCIsImNvbmZpZ1BhdGgiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzZXR0aW5nc01vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImRlZXBDbG9uZSIsImdldFByb3BlcnR5IiwibGlzdCIsIkxpc3QiLCJzZXRNb2RlbCIsInVwZGF0ZVBlcnNvbmFsaXphdGlvbkRlcGVuZGVudENvbnRyb2xzIiwic2VsZWN0ZWRWYWx1ZSIsImRlcGVuZGVudENvbnRyb2xzIiwiaXNPd25TZXR0aW5ncyIsImNvbnRyb2xJZCIsImxpc3RJdGVtcyIsImdldEl0ZW1zIiwiZ2V0Q29udGVudCIsImRhdGEiLCJzZXRTZWxlY3RlZCIsImxpc3RJdGVtIiwiSW5wdXRMaXN0SXRlbSIsImxhYmVsIiwiYmluZENvbnRlbnQiLCJmYWN0b3J5IiwiY29udGV4dCIsInR5cGUiLCJJdGVtIiwidGV4dCIsInNlbGVjdCIsIlNlbGVjdCIsInNlbGVjdGVkS2V5IiwiY2hhbmdlIiwiZXZlbnQiLCJnZXRQYXJhbWV0ZXIiLCJnZXRLZXkiLCJiaW5kSXRlbXMiLCJ0ZW1wbGF0ZSIsIklucHV0IiwidmFsdWUiLCJvTXVsdGlJbnB1dCIsIk11bHRpSW5wdXQiLCJ3aWR0aCIsInNob3dWYWx1ZUhlbHAiLCJzaG93Q2xlYXJJY29uIiwidG9rZW5zIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJuYXZpZ2F0aW9uUHJvcGVydHkiLCJUb2tlbiIsInRva2VuVXBkYXRlIiwiYXJyYXkiLCJwdXNoIiwic3BsaWNlIiwiaW5kZXhPZiIsImFkZFZhbGlkYXRvciIsImFyZ3MiLCJDaGVja0JveCIsInNlbGVjdGVkIiwidG9Mb3dlckNhc2UiLCJwYXJzZSIsInRvU3RyaW5nIiwib3BlbkFkYXB0aW9uRGlhbG9nIiwidGl0bGUiLCJpbmZvVGV4dCIsInNpemUiLCJpbmZvcm1hdGlvbk1lc3NhZ2UiLCJNZXNzYWdlU3RyaXAiLCJzaG93SWNvbiIsImFkZFN0eWxlQ2xhc3MiLCJsaXN0SW5kZXgiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImRpYWxvZyIsIkRpYWxvZyIsImNvbnRlbnRXaWR0aCIsImNvbnRlbnRIZWlnaHQiLCJoZWlnaHQiLCJidXR0b25zIiwiQnV0dG9uIiwicHJlc3MiLCJ1cGRhdGVDb25maWdNb2RlbCIsImdldE1vZGVsIiwiY2xvc2UiLCJvcGVuIiwicHJvY2Vzc0NoYW5nZXMiLCJzaW5nbGVDaGFuZ2UiLCJjaGFuZ2VzIiwiT2JqZWN0IiwiZW50cmllcyIsImdldENoYW5nZSIsInByb2Nlc3NHbG9iYWxDaGFuZ2VzIiwia2V5cyIsInNlcGFyYXRlQ2hhbmdlcyIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0UGFnZSIsImdldFBhcmVudCIsInNlcGFyYXRlR2xvYmFsQ2hhbmdlcyIsInZpZXdJZCIsImdldFRhcmdldFZpZXciLCJnZXRJZCIsInNwbGl0IiwiZXh0cmFjdENoYW5nZXMiLCJwcm9wZXJ0eVZhbHVlc0VudGVyZWQiLCJnbG9iYWxTZXR0aW5ncyIsImdsb2JhbENoYW5nZXMiLCJnbG9iYWwiLCJjb25jYXQiLCJub0NoYW5nZXMiLCJpc0Zpb3JpVG9vbHNSdGFNb2RlIiwidXJsUGFyYW1zIiwic2hlbGxTZXJ2aWNlIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInBhcnNlUGFyYW1ldGVycyIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwiaXNSVEFNb2RlIiwiZ2V0U2V0dGluZ3NJZktleVVzZXIiLCJpdGVtcyIsImZpbHRlciIsImtleVVzZXIiLCJpc0NvbmZpZ01vZGVsUHJlcGFyZWQiLCJwcmVwYXJlQ29uZmlnTW9kZWwiLCJzZXRQcm9wZXJ0eSIsImdldFBlcnNvbmFsaXphdGlvblNldHRpbmciLCJzZXR0aW5ncyIsImdldE9iamVjdCIsInBlcnNvbmFsaXphdGlvblNldHRpbmciLCJmaW5kIiwidXBkYXRlZFNldHRpbmdzIiwiZ2V0UHJvcGVydHlOYW1lc0FuZERlc2NyaXB0aW9ucyIsInByb3BzIiwicHJvcCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsImVudW1zIiwiZW51bW0iLCJpc01hbmlmZXN0Q2hhbmdlc0VuYWJsZWQiLCJvd25lciIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwic2FwRmVNYW5pZmVzdCIsImdldE1hbmlmZXN0RW50cnkiLCJhcHAiLCJkaXNhYmxlTWFuaWZlc3RDaGFuZ2VzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJEZXNpZ250aW1lLmhlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFJldXNlIGZ1bmN0aW9ucyBmb3IgZGVzaWdudGltZSBhZGFwdGlvblxuICovXG5cbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcInNhcC9tL0lucHV0XCI7XG5pbXBvcnQgSW5wdXRMaXN0SXRlbSBmcm9tIFwic2FwL20vSW5wdXRMaXN0SXRlbVwiO1xuaW1wb3J0IExpc3QgZnJvbSBcInNhcC9tL0xpc3RcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHR5cGUgeyBNdWx0aUlucHV0JFRva2VuVXBkYXRlRXZlbnQgfSBmcm9tIFwic2FwL20vTXVsdGlJbnB1dFwiO1xuaW1wb3J0IE11bHRpSW5wdXQgZnJvbSBcInNhcC9tL011bHRpSW5wdXRcIjtcbmltcG9ydCBTZWxlY3QgZnJvbSBcInNhcC9tL1NlbGVjdFwiO1xuaW1wb3J0IFRva2VuIGZyb20gXCJzYXAvbS9Ub2tlblwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSXRlbSBmcm9tIFwic2FwL3VpL2NvcmUvSXRlbVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBhZGFwdGlvbkNoYW5nZSA9IHtcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdHNlbGVjdG9yOiBBcHBDb21wb25lbnQ7XG5cdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdGFwcERlc2NyaXB0b3JDaGFuZ2VUeXBlOiBcImFwcGRlc2NyX2ZlX2NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5cdFx0Y29udGVudDoge1xuXHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRwYWdlOiBzdHJpbmc7XG5cdFx0XHRcdGVudGl0eVByb3BlcnR5Q2hhbmdlOiB7XG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoOiBzdHJpbmc7XG5cdFx0XHRcdFx0b3BlcmF0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkO1xuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblx0XHR9O1xuXHR9O1xufTtcblxuZXhwb3J0IHR5cGUgRGVzaWdudGltZVNldHRpbmdFbnVtcyA9IHtcblx0aWQ6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHRkZXNjcmlwdGlvbj86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIERlc2lnbnRpbWVTZXR0aW5nID0ge1xuXHRpZDogc3RyaW5nO1xuXHRwYXRoPzogc3RyaW5nO1xuXHRuYW1lOiBzdHJpbmc7XG5cdGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cdHJlc3RyaWN0ZWRUbz86IFRlbXBsYXRlVHlwZVtdO1xuXHR2YWx1ZTogdW5rbm93bjtcblx0dHlwZT86IHN0cmluZztcblx0ZW51bXM/OiBEZXNpZ250aW1lU2V0dGluZ0VudW1zW107XG5cdHNraXBDaGFuZ2U/OiBib29sZWFuO1xuXHR3cml0ZU9iamVjdEZvcj86IHN0cmluZztcblx0d3JpdGVPYmplY3Q/OiB7IGlkOiBzdHJpbmc7IHBhdGg/OiBzdHJpbmcgfVtdO1xuXHRrZXlVc2VyPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5VmFsdWUgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWQ+O1xuXG5leHBvcnQgdHlwZSBTZXR0aW5nc0RhdGEgPSB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHRvb2x0aXA6IHN0cmluZztcblx0Y29udHJvbDogQ29udHJvbERhdGFbXTtcblx0a2V5VXNlcj86IGJvb2xlYW47XG59O1xuXG50eXBlIENvbnRyb2xEYXRhID0ge1xuXHR0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGVudW06IERlc2lnbnRpbWVTZXR0aW5nRW51bXNbXSB8IHVuZGVmaW5lZDtcblx0dmFsdWU6IHVua25vd247XG5cdGlkOiBzdHJpbmc7XG59O1xuXG50eXBlIHByb3BLZXlBbmRWYWx1ZSA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfCBib29sZWFuIHwgbnVtYmVyIHwgb2JqZWN0IHwgdW5kZWZpbmVkIH07XG5cbi8qKlxuICogSWRlbnRpZnkgd2hpY2ggc2V0dGluZ3MgaGF2ZSBjaGFuZ2VkLlxuICogQHBhcmFtIGRlc2lnbnRpbWVTZXR0aW5nc1xuICogQHBhcmFtIHVuY2hhbmdlZERhdGFcbiAqIEBwYXJhbSBwcm9wZXJ0eVZhbHVlc1xuICogIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgd2hlcmUgdGhlIHZhbHVlcyBoYXZlIGJlZW4gY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgc3RhcnRpbmcgdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2VkUHJvcGVydHlWYWx1ZXMoXG5cdGRlc2lnbnRpbWVTZXR0aW5nczogRGVzaWdudGltZVNldHRpbmdbXSxcblx0dW5jaGFuZ2VkRGF0YTogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlWYWx1ZXM6IFByb3BlcnR5VmFsdWVcbik6IFByb3BlcnR5VmFsdWUge1xuXHRjb25zdCBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUgPSB7fTtcblxuXHRkZXNpZ250aW1lU2V0dGluZ3MuZm9yRWFjaChmdW5jdGlvbiAoc2V0dGluZykge1xuXHRcdGlmIChcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSAhPT0gXCJvYmplY3RcIiAmJiB1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdICE9PSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXSkgfHxcblx0XHRcdCh0eXBlb2YgdW5jaGFuZ2VkRGF0YVtzZXR0aW5nLmlkXSA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHRKU09OLnN0cmluZ2lmeSh1bmNoYW5nZWREYXRhW3NldHRpbmcuaWRdKSAhPT0gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0pKVxuXHRcdCkge1xuXHRcdFx0aWYgKHNldHRpbmcud3JpdGVPYmplY3QgJiYgcHJvcGVydHlWYWx1ZXNbc2V0dGluZy5pZF0gPT09IHNldHRpbmcud3JpdGVPYmplY3RGb3IpIHtcblx0XHRcdFx0Ly8gV2Ugd3JpdGUgYW4gb2JqZWN0IGZvciB0aGlzIHNldHRpbmdcblx0XHRcdFx0Y29uc3QgY2hhbmdlT2JqZWN0OiBQcm9wZXJ0eVZhbHVlID0ge307XG5cdFx0XHRcdGlmIChzZXR0aW5nLndyaXRlT2JqZWN0ICYmIHNldHRpbmcud3JpdGVPYmplY3Q/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRzZXR0aW5nLndyaXRlT2JqZWN0LmZvckVhY2goZnVuY3Rpb24gKHNldHRpbmdzVG9nZXRoZXIpIHtcblx0XHRcdFx0XHRcdGNoYW5nZU9iamVjdFtzZXR0aW5nc1RvZ2V0aGVyLnBhdGggPyBzZXR0aW5nc1RvZ2V0aGVyLnBhdGggOiBzZXR0aW5nc1RvZ2V0aGVyLmlkXSA9XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW3NldHRpbmdzVG9nZXRoZXIuaWRdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BlcnR5Q2hhbmdlc1tzZXR0aW5nLnBhdGggPyBzZXR0aW5nLnBhdGggOiBzZXR0aW5nLmlkXSA9IGNoYW5nZU9iamVjdDtcblx0XHRcdH0gZWxzZSBpZiAoIXNldHRpbmcuc2tpcENoYW5nZSkge1xuXHRcdFx0XHRwcm9wZXJ0eUNoYW5nZXNbc2V0dGluZy5wYXRoID8gc2V0dGluZy5wYXRoIDogc2V0dGluZy5pZF0gPSBwcm9wZXJ0eVZhbHVlc1tzZXR0aW5nLmlkXTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcHJvcGVydHlDaGFuZ2VzO1xufVxuLyoqXG4gKiBDb252ZXJ0IHNhcC5mZSBjaGFuZ2UgaW50byBhIHN0cnVjdHVyZSByZXF1aXJlZCBieSB0aGUgZmxleGliaWxpdHkgdG9vbHMuXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFnZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHJldHVybnMgVGhlIGNoYW5nZSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlU3RydWN0dXJlKFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZyxcblx0cHJvcGVydHlDaGFuZ2VzOiBzdHJpbmcgfCBzdHJpbmdbXSB8IGJvb2xlYW4gfCBudW1iZXIgfCBvYmplY3QgfCB1bmRlZmluZWRcbik6IGFkYXB0aW9uQ2hhbmdlIHtcblx0cmV0dXJuIHtcblx0XHRhcHBDb21wb25lbnQ6IGFwcENvbXBvbmVudCxcblx0XHRzZWxlY3RvcjogYXBwQ29tcG9uZW50LFxuXHRcdGNoYW5nZVNwZWNpZmljRGF0YToge1xuXHRcdFx0YXBwRGVzY3JpcHRvckNoYW5nZVR5cGU6IFwiYXBwZGVzY3JfZmVfY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cIixcblx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0cGFyYW1ldGVyczoge1xuXHRcdFx0XHRcdHBhZ2U6IHBhZ2UsXG5cdFx0XHRcdFx0ZW50aXR5UHJvcGVydHlDaGFuZ2U6IHtcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogcHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0b3BlcmF0aW9uOiBcIlVQU0VSVFwiLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZTogcHJvcGVydHlDaGFuZ2VzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBzZXRMb2NhbFRleHQoaXRlbTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHJlc291cmNlTW9kZWw6IFJlc291cmNlTW9kZWwpOiB2b2lkIHtcblx0Zm9yIChjb25zdCBrZXkgaW4gaXRlbSkge1xuXHRcdGlmIChrZXkgIT09IFwiaWRcIiAmJiB0eXBlb2YgaXRlbVtrZXldID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRpdGVtW2tleV0gPSByZXNvdXJjZU1vZGVsLmdldFRleHQoaXRlbVtrZXldIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHNldExvY2FsVGV4dHMobW9kZWw6IEpTT05Nb2RlbCwgcmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCk6IHZvaWQge1xuXHRjb25zdCBzZXR0aW5nc0RhdGEgPSBtb2RlbC5nZXREYXRhKCkgYXMgU2V0dGluZ3NEYXRhW107XG5cdHNldHRpbmdzRGF0YS5mb3JFYWNoKChzZXR0aW5nKSA9PiB7XG5cdFx0c2V0TG9jYWxUZXh0KHNldHRpbmcsIHJlc291cmNlTW9kZWwpO1xuXHRcdHNldHRpbmcuY29udHJvbC5mb3JFYWNoKChjb250cm9sRGF0YSkgPT4ge1xuXHRcdFx0c2V0TG9jYWxUZXh0KGNvbnRyb2xEYXRhLCByZXNvdXJjZU1vZGVsKTtcblx0XHRcdGNvbnRyb2xEYXRhLmVudW0/LmZvckVhY2goKGVudW1EYXRhKSA9PiB7XG5cdFx0XHRcdHNldExvY2FsVGV4dChlbnVtRGF0YSwgcmVzb3VyY2VNb2RlbCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGlvbkRpYWxvZ0NvbnRlbnQoXG5cdGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsXG5cdHByb3BlcnR5VmFsdWVzOiBQcm9wZXJ0eVZhbHVlLFxuXHRyZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsLFxuXHRjb25maWdQYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIlxuKTogTGlzdCB7XG5cdGNvbnN0IHNldHRpbmdzTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdHNldHRpbmdzTW9kZWwuc2V0RGF0YShkZWVwQ2xvbmUoY29uZmlnQ29udGV4dC5nZXRQcm9wZXJ0eShjb25maWdQYXRoKSkpO1xuXHRzZXRMb2NhbFRleHRzKHNldHRpbmdzTW9kZWwsIHJlc291cmNlTW9kZWwpO1xuXHRjb25zdCBsaXN0ID0gbmV3IExpc3QoKTtcblx0bGlzdC5zZXRNb2RlbChzZXR0aW5nc01vZGVsKTtcblxuXHQvLyBGdW5jdGlvbiB0byBjbGVhciBwZXJzb25hbGl6YXRpb24gZGVwZW5kZW50IGNvbnRyb2xzIHdoZW4gXCJPd24gU2V0dGluZ3NcIiBpcyBzZWxlY3RlZFxuXHRjb25zdCB1cGRhdGVQZXJzb25hbGl6YXRpb25EZXBlbmRlbnRDb250cm9scyA9IChzZWxlY3RlZFZhbHVlOiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRjb25zdCBkZXBlbmRlbnRDb250cm9scyA9IFtcInBlcnNvbmFsaXphdGlvblNvcnRcIiwgXCJwZXJzb25hbGl6YXRpb25Db2x1bW5cIiwgXCJwZXJzb25hbGl6YXRpb25GaWx0ZXJcIiwgXCJwZXJzb25hbGl6YXRpb25Hcm91cFwiXTtcblx0XHRjb25zdCBpc093blNldHRpbmdzID0gc2VsZWN0ZWRWYWx1ZSA9PT0gXCJPd24gU2V0dGluZ3NcIjtcblx0XHRpZiAoaXNPd25TZXR0aW5ncykge1xuXHRcdFx0ZGVwZW5kZW50Q29udHJvbHMuZm9yRWFjaCgoY29udHJvbElkKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGxpc3RJdGVtcyA9IGxpc3QuZ2V0SXRlbXMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGxpc3RJdGVtcykge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRlbnQgPSAoaXRlbSBhcyBJbnB1dExpc3RJdGVtKS5nZXRDb250ZW50KCk7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjb250cm9sIG9mIGNvbnRlbnQpIHtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sLmRhdGEoXCJpZFwiKSA9PT0gY29udHJvbElkKSB7XG5cdFx0XHRcdFx0XHRcdGlmICgoY29udHJvbCBhcyBDaGVja0JveCkuc2V0U2VsZWN0ZWQpIHtcblx0XHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBDaGVja0JveCkuc2V0U2VsZWN0ZWQoZmFsc2UpO1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzW2NvbnRyb2xJZF0gPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcblxuXHRjb25zdCBsaXN0SXRlbSA9IG5ldyBJbnB1dExpc3RJdGVtKHtcblx0XHRsYWJlbDogXCJ7bGFiZWx9XCJcblx0fSk7XG5cblx0bGlzdEl0ZW0uYmluZENvbnRlbnQoe1xuXHRcdHBhdGg6IFwiY29udHJvbFwiLFxuXHRcdGZhY3Rvcnk6IGZ1bmN0aW9uIChwYXRoOiBzdHJpbmcsIGNvbnRleHQ6IHsgZ2V0UHJvcGVydHkobmFtZTogc3RyaW5nKTogc3RyaW5nIH0gLyogc2FwLnVpLm1vZGVsLkNvbnRleHQgKi8pIHtcblx0XHRcdGNvbnN0IHR5cGUgPSBjb250ZXh0LmdldFByb3BlcnR5KFwidHlwZVwiKTtcblx0XHRcdGNvbnN0IGlkID0gY29udGV4dC5nZXRQcm9wZXJ0eShcImlkXCIpO1xuXG5cdFx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiZW51bVwiKSkge1xuXHRcdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgc2VsZWN0IGxpc3QgZm9yIG11bHRpcGxlIG9wdGlvbnMgdG8gc2VsZWN0XG5cdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gbmV3IEl0ZW0oe1xuXHRcdFx0XHRcdFx0XHR0ZXh0OiBcIntuYW1lfVwiLFxuXHRcdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0ID0gbmV3IFNlbGVjdCh7XG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdFx0Y2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBTZWxlY3QpLmRhdGEoXCJpZFwiKSBhcyBrZXlvZiBQcm9wZXJ0eVZhbHVlXSA9IChcblx0XHRcdFx0XHRcdFx0XHRcdGV2ZW50LmdldFBhcmFtZXRlcihcInNlbGVjdGVkSXRlbVwiKSBhcyBJdGVtXG5cdFx0XHRcdFx0XHRcdFx0KS5nZXRLZXkoKSBhcyBzdHJpbmcgJiBib29sZWFuO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXG5cdFx0XHRcdFx0XHRzZWxlY3QuYmluZEl0ZW1zKHtcblx0XHRcdFx0XHRcdFx0cGF0aDogXCJlbnVtXCIsXG5cdFx0XHRcdFx0XHRcdHRlbXBsYXRlOiBpdGVtXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybiBzZWxlY3Q7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgdGV4dCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFwie3ZhbHVlfVwiLFxuXHRcdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIElucHV0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSBhcyBzdHJpbmcgJlxuXHRcdFx0XHRcdFx0XHRcdFx0Ym9vbGVhbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdbXVwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBtdWx0aSBpbnB1dCBmaWVsZCBmb3IgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdFx0XHRcdGNvbnN0IG9NdWx0aUlucHV0ID0gbmV3IE11bHRpSW5wdXQoe1xuXHRcdFx0XHRcdFx0d2lkdGg6IFwiNzAlXCIsXG5cdFx0XHRcdFx0XHRzaG93VmFsdWVIZWxwOiBmYWxzZSxcblx0XHRcdFx0XHRcdHNob3dDbGVhckljb246IHRydWUsXG5cdFx0XHRcdFx0XHR0b2tlbnM6IChwcm9wZXJ0eVZhbHVlcz8ubmF2aWdhdGlvblByb3BlcnRpZXMgYXMgc3RyaW5nW10pLm1hcCgobmF2aWdhdGlvblByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oeyB0ZXh0OiBuYXZpZ2F0aW9uUHJvcGVydHksIGtleTogbmF2aWdhdGlvblByb3BlcnR5IH0pO1xuXHRcdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0XHR0b2tlblVwZGF0ZTogZnVuY3Rpb24gKGV2ZW50OiBNdWx0aUlucHV0JFRva2VuVXBkYXRlRXZlbnQpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXJyYXkgPSBwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBNdWx0aUlucHV0KS5kYXRhKFwiaWRcIildIGFzIHN0cmluZ1tdO1xuXHRcdFx0XHRcdFx0XHRpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXJyYXkucHVzaCgoZXZlbnQ/LmdldFBhcmFtZXRlcihcImFkZGVkVG9rZW5zXCIpIGFzIFRva2VuW10pWzBdPy5nZXRQcm9wZXJ0eShcImtleVwiKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoKGV2ZW50LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSk/Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRhcnJheS5zcGxpY2UoYXJyYXkuaW5kZXhPZigoZXZlbnQ/LmdldFBhcmFtZXRlcihcInJlbW92ZWRUb2tlbnNcIikgYXMgVG9rZW5bXSlbMF0/LmdldFByb3BlcnR5KFwia2V5XCIpKSwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KS5kYXRhKFwiaWRcIiwgaWQpO1xuXHRcdFx0XHRcdG9NdWx0aUlucHV0LmFkZFZhbGlkYXRvcihmdW5jdGlvbiAoYXJnczogeyB0ZXh0OiBzdHJpbmcgfSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgdGV4dCA9IGFyZ3MudGV4dDtcblx0XHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4oe1xuXHRcdFx0XHRcdFx0XHRrZXk6IHRleHQsXG5cdFx0XHRcdFx0XHRcdHRleHQ6IHRleHRcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBvTXVsdGlJbnB1dDtcblx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhbiBJbnB1dCBmb3IgbnVtYmVyIGNoYW5nZXNcblx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdHZhbHVlOiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiTnVtYmVyXCIsXG5cdFx0XHRcdFx0XHRjaGFuZ2U6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBJbnB1dCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIikgYXMgc3RyaW5nICZcblx0XHRcdFx0XHRcdFx0XHRib29sZWFuO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cdFx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGEgY2hlY2tib3ggZm9yIHRydWUvZmFsc2UgdmFsdWVzXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBDaGVja0JveCh7XG5cdFx0XHRcdFx0XHRzZWxlY3RlZDogXCJ7dmFsdWV9XCIsXG5cdFx0XHRcdFx0XHRzZWxlY3Q6IGZ1bmN0aW9uIChldmVudCk6IHZvaWQge1xuXHRcdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlc1sodGhpcyBhcyBDaGVja0JveCkuZGF0YShcImlkXCIpIGFzIGtleW9mIFByb3BlcnR5VmFsdWVdID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFxuXHRcdFx0XHRcdFx0XHRcdFwic2VsZWN0ZWRcIlxuXHRcdFx0XHRcdFx0XHQpIGFzIHN0cmluZyAmIGJvb2xlYW47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5PclN0cmluZ1wiOlxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhIHNlbGVjdCBsaXN0IGZvciBib29sZWFuIGFuZCBzdHJpbmcgb3B0aW9ucyB0byBzZWxlY3Rcblx0XHRcdFx0XHQvLyBUaGlzIHR5cGUgaXMgYXQgdGhlIG1vbWVudCBvbmx5IHVzZWQgZm9yIHBlcnNvbmFsaXphdGlvbiBzZXR0aW5ncyB3aGljaCBjYW4gYmUgdW5kZWZpbmVkLCB0cnVlLCBmYWxzZSBvciBhbiBvYmplY3Rcblx0XHRcdFx0XHQvLyBUaGUgc2VsZWN0IGxpc3QgaXMgdXNlZCB0byBzZWxlY3QgYmV0d2VlbiB0cnVlLCBmYWxzZSBhbmQgXCJPd24gU2V0dGluZ3NcIlxuXHRcdFx0XHRcdC8vIElmIFwiT3duIFNldHRpbmdzXCIgaXMgc2VsZWN0ZWQsIHRoZSBwZXJzb25hbGl6YXRpb24gb2JqZWN0IGlzIHdyaXR0ZW4sIG90aGVyd2lzZSB0aGUgYm9vbGVhbiBpcyB3cml0dGVuICh1bmRlZmluZWQgY2Fubm90IGJlIHdyaXR0ZW4gaW4gYSBtYW5pZmVzdCBjaGFuZ2UpXG5cdFx0XHRcdFx0Y29uc3QgaXRlbSA9IG5ldyBJdGVtKHtcblx0XHRcdFx0XHRcdHRleHQ6IFwie25hbWV9XCIsXG5cdFx0XHRcdFx0XHRrZXk6IFwie2lkfVwiXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRjb25zdCBzZWxlY3QgPSBuZXcgU2VsZWN0KHtcblx0XHRcdFx0XHRcdHNlbGVjdGVkS2V5OiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdGxldCB2YWx1ZSA9IChldmVudC5nZXRQYXJhbWV0ZXIoXCJzZWxlY3RlZEl0ZW1cIikgYXMgSXRlbSkuZ2V0S2V5KCk7XG5cdFx0XHRcdFx0XHRcdC8vIENvbnZlcnQgc3RyaW5nIHRvIGJvb2xlYW4gaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRcdGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBcImZhbHNlXCIgfHwgdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZXNbKHRoaXMgYXMgU2VsZWN0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBoYW5kbGluZyBmb3IgcGVyc29uYWxpemF0aW9uIHNldHRpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCh0aGlzIGFzIFNlbGVjdCkuZGF0YShcImlkXCIpID09PSBcInBlcnNvbmFsaXphdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dXBkYXRlUGVyc29uYWxpemF0aW9uRGVwZW5kZW50Q29udHJvbHModmFsdWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkuZGF0YShcImlkXCIsIGlkKTtcblxuXHRcdFx0XHRcdHNlbGVjdC5iaW5kSXRlbXMoe1xuXHRcdFx0XHRcdFx0cGF0aDogXCJlbnVtXCIsXG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZTogaXRlbVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHJldHVybiBzZWxlY3Q7XG5cdFx0XHRcdGNhc2UgXCJqc29uXCI6XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIGFuIGlucHV0IGZvciBqc29uIG9iamVjdCBkZXNjcmlwdGlvbnNcblx0XHRcdFx0XHQvLyBBIHRleHQgYXJlYSB3b3VsZCBoYXZlIGJlZW4gYmV0dGVyIGJ1dCB0aGlzIGRvZXMgbm90IHdvcmsgd2l0aCB0aGUgSW5wdXRMaXN0SXRlbVxuXHRcdFx0XHRcdC8vIHdlIHdvdWxkIGhhdmUgbmVlZGVkIGEgQ3VzdG9tTGlzdEl0ZW0gaW5zdGVhZFxuXHRcdFx0XHRcdC8vIHdoaWNoIHdvdWxkIGhhdmUgYmVlbiB0b28gbXVjaCBlZmZvcnQgYXMgd2Ugd291bGQgaGF2ZSBuZWVkZWQgdG8gY2hhbmdlIHRoZSB3aG9sZSBzdHJ1Y3R1cmVcblx0XHRcdFx0XHRyZXR1cm4gbmV3IElucHV0KHtcblx0XHRcdFx0XHRcdHZhbHVlOiBcInt2YWx1ZX1cIixcblx0XHRcdFx0XHRcdGNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KTogdm9pZCB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWVzWyh0aGlzIGFzIElucHV0KS5kYXRhKFwiaWRcIikgYXMga2V5b2YgUHJvcGVydHlWYWx1ZV0gPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdFx0XHRcdGV2ZW50LmdldFBhcmFtZXRlcihcInZhbHVlXCIpPy50b1N0cmluZygpIGFzIHN0cmluZ1xuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pLmRhdGEoXCJpZFwiLCBpZCk7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRsaXN0LmJpbmRJdGVtcyh7XG5cdFx0cGF0aDogXCIvXCIsXG5cdFx0dGVtcGxhdGU6IGxpc3RJdGVtXG5cdH0pO1xuXG5cdHJldHVybiBsaXN0O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlbkFkYXB0aW9uRGlhbG9nKFxuXHRjb25maWdDb250ZXh0OiBDb250ZXh0LFxuXHRwcm9wZXJ0eVZhbHVlczogUHJvcGVydHlWYWx1ZSxcblx0dGl0bGU6IHN0cmluZyxcblx0cmVzb3VyY2VNb2RlbDogUmVzb3VyY2VNb2RlbCxcblx0Y29uZmlnUGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIsXG5cdGluZm9UZXh0ID0gXCJ7c2FwLmZlLmkxOG4+UlRBX0NPTkZJR1VSQVRJT05fSU5GT19NRVNTQUdFfVwiLFxuXHRzaXplPzogeyB3aWR0aDogc3RyaW5nOyBoZWlnaHQ6IHN0cmluZyB9XG4pOiBQcm9taXNlPFByb3BlcnR5VmFsdWU+IHtcblx0Y29uc3QgbGlzdCA9IGNyZWF0ZUFkYXB0aW9uRGlhbG9nQ29udGVudChjb25maWdDb250ZXh0LCBwcm9wZXJ0eVZhbHVlcywgcmVzb3VyY2VNb2RlbCwgY29uZmlnUGF0aCk7XG5cdGNvbnN0IGNvbnRlbnQ6IChMaXN0IHwgTWVzc2FnZVN0cmlwKVtdID0gW107XG5cdGNvbnN0IGluZm9ybWF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlU3RyaXAoe1xuXHRcdHNob3dJY29uOiB0cnVlLFxuXHRcdHR5cGU6IFwiSW5mb3JtYXRpb25cIixcblx0XHR0ZXh0OiBpbmZvVGV4dFxuXHR9KTtcblx0aW5mb3JtYXRpb25NZXNzYWdlLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaVNtYWxsTWFyZ2luQm90dG9tXCIpO1xuXHRjb250ZW50LnB1c2goaW5mb3JtYXRpb25NZXNzYWdlKTtcblx0Y29udGVudC5wdXNoKGxpc3QpO1xuXHRjb25zdCBsaXN0SW5kZXggPSBjb250ZW50LmluZGV4T2YobGlzdCk7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0Y29uc3QgZGlhbG9nID0gbmV3IERpYWxvZyh7XG5cdFx0XHR0aXRsZTogdGl0bGUsXG5cdFx0XHRjb250ZW50V2lkdGg6IHNpemUgPyBzaXplLndpZHRoIDogXCI1NTBweFwiLFxuXHRcdFx0Y29udGVudEhlaWdodDogc2l6ZSA/IHNpemUuaGVpZ2h0IDogXCIzMDBweFwiLFxuXHRcdFx0Y29udGVudDogY29udGVudCxcblx0XHRcdGJ1dHRvbnM6IFtcblx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0dGV4dDogXCJ7c2FwLmZlLmkxOG4+UlRBX0NPTkZJR1VSQVRJT05fQVBQTFl9XCIsXG5cdFx0XHRcdFx0dHlwZTogXCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdC8vIHBlcnNpc3QgY2hhbmdlcyBkb25lXG5cdFx0XHRcdFx0XHR1cGRhdGVDb25maWdNb2RlbChjb25maWdDb250ZXh0LCBkaWFsb2cuZ2V0Q29udGVudCgpW2xpc3RJbmRleF0uZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwsIGNvbmZpZ1BhdGgpO1xuXHRcdFx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHByb3BlcnR5VmFsdWVzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pLFxuXHRcdFx0XHRuZXcgQnV0dG9uKHtcblx0XHRcdFx0XHR0ZXh0OiBcIntzYXAuZmUuaTE4bj5SVEFfQ09ORklHVVJBVElPTl9DQU5DRUx9XCIsXG5cdFx0XHRcdFx0cHJlc3M6IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdGRpYWxvZy5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XVxuXHRcdH0pO1xuXHRcdGRpYWxvZy5zZXRNb2RlbChyZXNvdXJjZU1vZGVsLCBcInNhcC5mZS5pMThuXCIpO1xuXHRcdGRpYWxvZy5hZGRTdHlsZUNsYXNzKFwic2FwVWlDb250ZW50UGFkZGluZ1wiKTtcblx0XHRkaWFsb2cuYWRkU3R5bGVDbGFzcyhcInNhcFVpUlRBQm9yZGVyXCIpO1xuXHRcdGRpYWxvZy5vcGVuKCk7XG5cdFx0cmV0dXJuO1xuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDaGFuZ2VzKFxuXHRwcm9wZXJ0eUNoYW5nZXM6IHByb3BLZXlBbmRWYWx1ZSxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhZ2U6IHN0cmluZyxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRsZXQgc2luZ2xlQ2hhbmdlOiBwcm9wS2V5QW5kVmFsdWUgPSB7fTtcblx0Y29uc3QgY2hhbmdlcyA9IFtdO1xuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0eUNoYW5nZXMpKSB7XG5cdFx0c2luZ2xlQ2hhbmdlID0ge307XG5cdFx0c2luZ2xlQ2hhbmdlW2tleV0gPSB2YWx1ZTtcblx0XHRjaGFuZ2VzLnB1c2goZ2V0Q2hhbmdlKHNpbmdsZUNoYW5nZSwgYXBwQ29tcG9uZW50LCBwYWdlLCBwcm9wZXJ0eVBhdGgpKTtcblx0fVxuXHRyZXR1cm4gY2hhbmdlcztcbn1cblxuLyoqXG4gKiBGb3JtYXQgZWFjaCBjaGFuZ2UgbWFkZSB0byBnbG9iYWwgc2V0dGluZ3MgXCJzYXAuZmVcIlxuICogVGhlIHNldCBvZiBjaGFuZ2VzIGFyZSBwdXQgaW50byBpbmRpdmlkdWFsIGNoYW5nZXMgdG8gZW5zdXJlXG4gKiB0aGF0IGVhcmxpZXIgY2hhbmdlcyBhcmUgbm90IGxvc3Qgd2hlbiB0aGVzZSBhcmUgbG9hZGVkIGF0IHJ1bnRpbWUuXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFuZ2VzXG4gKiBAcGFyYW0gYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gcGFnZVxuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHJldHVybnMgVGhlIGNoYW5nZSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0dsb2JhbENoYW5nZXMoXG5cdHByb3BlcnR5Q2hhbmdlczogcHJvcEtleUFuZFZhbHVlLFxuXHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0cGFnZTogc3RyaW5nLFxuXHRwcm9wZXJ0eVBhdGg6IHN0cmluZ1xuKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGxldCBzaW5nbGVDaGFuZ2U6IHByb3BLZXlBbmRWYWx1ZSA9IHt9O1xuXHRjb25zdCBjaGFuZ2VzID0gW107XG5cdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnR5Q2hhbmdlcykpIHtcblx0XHRzaW5nbGVDaGFuZ2UgPSB7fTtcblx0XHRzaW5nbGVDaGFuZ2Vba2V5XSA9IHZhbHVlO1xuXHRcdGNoYW5nZXMucHVzaChnZXRDaGFuZ2Uoc2luZ2xlQ2hhbmdlLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCkpO1xuXHR9XG5cdHJldHVybiBjaGFuZ2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hhbmdlKFxuXHRwcm9wZXJ0eUNoYW5nZXM6IHByb3BLZXlBbmRWYWx1ZSxcblx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsXG5cdHBhZ2U6IHN0cmluZyxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmdcbik6IGFkYXB0aW9uQ2hhbmdlIHtcblx0Ly8gQ2hhbmdlcyBmb3IgY29udHJvbHMgaGF2ZSBhIHBhdGggc3RhcnRpbmcgd2l0aCBjb250cm9sQ29uZmlndXJhdGlvbiwgZm9sbG93ZWQgYnkgYW4gYW5ub3RhdGlvbiBwYXRoXG5cdC8vIEZvciB0aGUgbGlzdCByZXBvcnQgY2hhbmdlcywgdGhlcmUgaXMgbm8gcGF0aCBiZWNhdXNlIHRoZSBwcm9wZXJ0aWVzIGFyZSBkaXJlY3RseSB1bmRlciBTZXR0aW5nc1xuXHQvLyBmb3IgdGhlIFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIgaW4gdGhlIG1hbmlmZXN0LlxuXHRpZiAocHJvcGVydHlQYXRoID09PSBcIlwiKSB7XG5cdFx0cHJvcGVydHlQYXRoID0gT2JqZWN0LmtleXMocHJvcGVydHlDaGFuZ2VzKVswXTtcblx0fSBlbHNlIHtcblx0XHRwcm9wZXJ0eVBhdGggPSBwcm9wZXJ0eVBhdGggKyBcIi9cIiArIE9iamVjdC5rZXlzKHByb3BlcnR5Q2hhbmdlcylbMF07XG5cdH1cblx0Y29uc3QgdmFsdWUgPSBwcm9wZXJ0eUNoYW5nZXNbT2JqZWN0LmtleXMocHJvcGVydHlDaGFuZ2VzKVswXV07XG5cblx0cmV0dXJuIGdldENoYW5nZVN0cnVjdHVyZShhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCwgdmFsdWUpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcGFyYW1ldGVycyBvdGhlciB0aGFuIHRoZSBjb250cm9sIHNldHRpbmdzIHRoYXQgYXJlIG5lZWRlZFxuICogZm9yIHRoZSBjaGFuZ2Ugc3RydWN0dXJlLlxuICogQHBhcmFtIHByb3BlcnR5Q2hhbmdlc1xuICogQHBhcmFtIHByb3BlcnR5UGF0aFxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEByZXR1cm5zIFRoZSBjaGFuZ2VzIGluIGEgc3RydWN0dXJlIHVzZWQgYnkgZmxleGliaWxpdHkgdG9vbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlQ2hhbmdlcyhwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5VmFsdWUsIHByb3BlcnR5UGF0aDogc3RyaW5nLCBjb250cm9sOiBDb250cm9sKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChjb250cm9sKTtcblx0Y29uc3QgcGFnZSA9IGdldFBhZ2UoY29udHJvbC5nZXRQYXJlbnQoKSBhcyBDb250cm9sKTtcblx0cmV0dXJuIHByb2Nlc3NDaGFuZ2VzKHByb3BlcnR5Q2hhbmdlcywgYXBwQ29tcG9uZW50LCBwYWdlLCBwcm9wZXJ0eVBhdGgpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcGFyYW1ldGVycyBvdGhlciB0aGFuIHRoZSBnbG9iYWwgc2V0dGluZ3MgdGhhdCBhcmUgbmVlZGVkXG4gKiBmb3IgdGhlIGNoYW5nZSBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gcHJvcGVydHlDaGFuZ2VzXG4gKiBAcGFyYW0gcHJvcGVydHlQYXRoXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHJldHVybnMgVGhlIGNoYW5nZXMgaW4gYSBzdHJ1Y3R1cmUgdXNlZCBieSBmbGV4aWJpbGl0eSB0b29sc1xuICovXG5mdW5jdGlvbiBzZXBhcmF0ZUdsb2JhbENoYW5nZXMocHJvcGVydHlDaGFuZ2VzOiBQcm9wZXJ0eVZhbHVlLCBwcm9wZXJ0eVBhdGg6IHN0cmluZywgY29udHJvbDogQ29udHJvbCk6IGFkYXB0aW9uQ2hhbmdlW10ge1xuXHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoY29udHJvbCk7XG5cdGNvbnN0IHBhZ2UgPSBcInNhcC5mZVwiO1xuXHRyZXR1cm4gcHJvY2Vzc0dsb2JhbENoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBhcHBDb21wb25lbnQsIHBhZ2UsIHByb3BlcnR5UGF0aCk7XG59XG5cbmZ1bmN0aW9uIGdldFBhZ2UoY29udHJvbDogQ29udHJvbCk6IHN0cmluZyB7XG5cdGNvbnN0IHZpZXdJZCA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY29udHJvbCkuZ2V0SWQoKS5zcGxpdChcIjo6XCIpO1xuXHRyZXR1cm4gdmlld0lkW3ZpZXdJZC5sZW5ndGggLSAxXTtcbn1cblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RDaGFuZ2VzID0gZnVuY3Rpb24gKFxuXHRkZXNpZ250aW1lU2V0dGluZ3M6IERlc2lnbnRpbWVTZXR0aW5nW10sXG5cdHVuY2hhbmdlZERhdGE6IFByb3BlcnR5VmFsdWUsXG5cdHByb3BlcnR5VmFsdWVzRW50ZXJlZDogUHJvcGVydHlWYWx1ZSxcblx0cHJvcGVydHlQYXRoOiBzdHJpbmcsXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdGdsb2JhbFNldHRpbmdzPzogRGVzaWdudGltZVNldHRpbmdbXVxuKTogYWRhcHRpb25DaGFuZ2VbXSB7XG5cdGNvbnN0IHByb3BlcnR5Q2hhbmdlcyA9IGdldENoYW5nZWRQcm9wZXJ0eVZhbHVlcyhkZXNpZ250aW1lU2V0dGluZ3MsIHVuY2hhbmdlZERhdGEsIHByb3BlcnR5VmFsdWVzRW50ZXJlZCk7XG5cdC8vIFB1dCBlYWNoIHByb3BlcnR5IGludG8gaXRzIG93biBjaGFuZ2UuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGRvbid0IGxvc2UgcHJldmlvdXMgY2hhbmdlcy5cblx0bGV0IGNoYW5nZXMgPSBzZXBhcmF0ZUNoYW5nZXMocHJvcGVydHlDaGFuZ2VzLCBwcm9wZXJ0eVBhdGgsIGNvbnRyb2wpO1xuXHRpZiAoZ2xvYmFsU2V0dGluZ3MpIHtcblx0XHRjb25zdCBnbG9iYWxDaGFuZ2VzID0gZ2V0Q2hhbmdlZFByb3BlcnR5VmFsdWVzKGdsb2JhbFNldHRpbmdzLCB1bmNoYW5nZWREYXRhLCBwcm9wZXJ0eVZhbHVlc0VudGVyZWQpO1xuXHRcdGNvbnN0IGdsb2JhbCA9IHNlcGFyYXRlR2xvYmFsQ2hhbmdlcyhnbG9iYWxDaGFuZ2VzLCBwcm9wZXJ0eVBhdGgsIGNvbnRyb2wpO1xuXHRcdGNoYW5nZXMgPSBjaGFuZ2VzLmNvbmNhdChnbG9iYWwpO1xuXHR9XG5cdGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gY2hhbmdlcztcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gW107XG5cdH1cbn07XG5cbmV4cG9ydCBjb25zdCBub0NoYW5nZXMgPSBmdW5jdGlvbiAoKTogW10ge1xuXHRyZXR1cm4gW107XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNGaW9yaVRvb2xzUnRhTW9kZShhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBydGEgbW9kZSBoYXMgYmVlbiBzcGVjaWZpZWQgb24gdXJsIChmb3IgbG9jYWwgdGVzdGluZylcblx0bGV0IHVybFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGNvbnN0IHNoZWxsU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdHVybFBhcmFtcyA9IHNoZWxsU2VydmljZT8ucGFyc2VQYXJhbWV0ZXJzPy4od2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdHJldHVybiAhIXVybFBhcmFtcyAmJiB1cmxQYXJhbXNbXCJmaW9yaS10b29scy1ydGEtbW9kZVwiXT8uWzBdID09PSBcImZvckFkYXB0YXRpb25cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUlRBTW9kZShhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IGJvb2xlYW4ge1xuXHQvLyBDaGVjayBpZiBydGEgbW9kZSBoYXMgYmVlbiBzcGVjaWZpZWQgb24gdXJsIChmb3IgbG9jYWwgdGVzdGluZylcblx0bGV0IHVybFBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cdGNvbnN0IHNoZWxsU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdHVybFBhcmFtcyA9IHNoZWxsU2VydmljZT8ucGFyc2VQYXJhbWV0ZXJzPy4od2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdHJldHVybiAhIXVybFBhcmFtcyAmJiB1cmxQYXJhbXNbXCJzYXAtZmUtcnRhLW1vZGVcIl0/LlswXSA9PT0gXCJ0cnVlXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nc0lmS2V5VXNlcihhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCwgaXRlbXM6IFNldHRpbmdzRGF0YVtdKTogU2V0dGluZ3NEYXRhW10ge1xuXHRpZiAoIWlzRmlvcmlUb29sc1J0YU1vZGUoYXBwQ29tcG9uZW50KSkge1xuXHRcdC8vIG5vdCB0b29scyA9PiBrZXkgdXNlclxuXHRcdHJldHVybiBpdGVtcy5maWx0ZXIoKHNldHRpbmcpID0+IHtcblx0XHRcdHJldHVybiBzZXR0aW5nLmtleVVzZXI7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGl0ZW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25maWdNb2RlbFByZXBhcmVkKGNvbmZpZ0NvbnRleHQ6IENvbnRleHQsIHBhdGggPSBcInJ0YS9jb25maWdTZXR0aW5nc1wiKTogYm9vbGVhbiB7XG5cdGlmIChjb25maWdDb250ZXh0LmdldFByb3BlcnR5KHBhdGgpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZ01vZGVsKGl0ZW1zOiBTZXR0aW5nc0RhdGFbXSwgY29uZmlnQ29udGV4dDogQ29udGV4dCwgcGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIpOiB2b2lkIHtcblx0aWYgKCFjb25maWdDb250ZXh0LmdldFByb3BlcnR5KHBhdGgpKSB7XG5cdFx0Y29uZmlnQ29udGV4dC5zZXRQcm9wZXJ0eShwYXRoLCBpdGVtcyk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcnNvbmFsaXphdGlvblNldHRpbmcoY29uZmlnQ29udGV4dDogQ29udGV4dCwgcGF0aCA9IFwicnRhL2NvbmZpZ1NldHRpbmdzXCIpOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc2V0dGluZ3MgPSBjb25maWdDb250ZXh0LmdldE9iamVjdChwYXRoKTtcblx0Y29uc3QgcGVyc29uYWxpemF0aW9uU2V0dGluZyA9IHNldHRpbmdzLmZpbmQoKHNldHRpbmc6IFNldHRpbmdzRGF0YSkgPT4ge1xuXHRcdHJldHVybiBzZXR0aW5nPy5jb250cm9sWzBdPy5pZCA9PT0gXCJwZXJzb25hbGl6YXRpb25cIjtcblx0fSk7XG5cdGlmIChwZXJzb25hbGl6YXRpb25TZXR0aW5nKSB7XG5cdFx0cmV0dXJuIHBlcnNvbmFsaXphdGlvblNldHRpbmcuY29udHJvbFswXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQ29uZmlnTW9kZWwoY29uZmlnQ29udGV4dDogQ29udGV4dCwgc2V0dGluZ3NNb2RlbDogSlNPTk1vZGVsLCBwYXRoID0gXCJydGEvY29uZmlnU2V0dGluZ3NcIik6IHZvaWQge1xuXHRjb25zdCB1cGRhdGVkU2V0dGluZ3MgPSBkZWVwQ2xvbmUoc2V0dGluZ3NNb2RlbC5nZXREYXRhKCkpO1xuXHRjb25maWdDb250ZXh0LnNldFByb3BlcnR5KHBhdGgsIHVwZGF0ZWRTZXR0aW5ncyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wZXJ0eU5hbWVzQW5kRGVzY3JpcHRpb25zKHByb3BzOiBEZXNpZ250aW1lU2V0dGluZ1tdLCByZXNvdXJjZU1vZGVsOiBSZXNvdXJjZU1vZGVsKTogRGVzaWdudGltZVNldHRpbmdbXSB7XG5cdHByb3BzLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcblx0XHRwcm9wLm5hbWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQocHJvcC5uYW1lKTtcblx0XHRwcm9wLmRlc2NyaXB0aW9uID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KHByb3AuZGVzY3JpcHRpb24pO1xuXHRcdGlmIChwcm9wLmVudW1zKSB7XG5cdFx0XHRwcm9wLmVudW1zLmZvckVhY2goZnVuY3Rpb24gKGVudW1tKSB7XG5cdFx0XHRcdGVudW1tLm5hbWUgPSByZXNvdXJjZU1vZGVsLmdldFRleHQoZW51bW0ubmFtZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBwcm9wcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWFuaWZlc3RDaGFuZ2VzRW5hYmxlZChjb250cm9sOiBDb250cm9sKTogYm9vbGVhbiB7XG5cdGxldCBvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihjb250cm9sKSBhcyBUZW1wbGF0ZUNvbXBvbmVudDtcblx0aWYgKG93bmVyID09PSB1bmRlZmluZWQgJiYgY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdC8vIEluIGNhc2Ugb2YgTWFzc0VkaXQsIGNvbnRyb2wgaXMgYSBzYXAubS5EaWFsb2cgZm9yIHdoaWNoIHRoZXJlIGlzIG5vdyBPd25lckNvbXBvbmVudCwgc28gd2UgbmVlZCB0byBjb25zaWRlciBpdHMgcGFyZW50IGNvbnRyb2xcblx0XHRvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihjb250cm9sLmdldFBhcmVudCgpISkgYXMgVGVtcGxhdGVDb21wb25lbnQ7XG5cdH1cblx0Y29uc3Qgc2FwRmVNYW5pZmVzdCA9IG93bmVyPy5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRyZXR1cm4gc2FwRmVNYW5pZmVzdD8uYXBwPy5kaXNhYmxlTWFuaWZlc3RDaGFuZ2VzICE9PSB0cnVlO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQUFBO0FBQ0E7QUFDQTtFQWtGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLHdCQUF3QkEsQ0FDdkNDLGtCQUF1QyxFQUN2Q0MsYUFBNEIsRUFDNUJDLGNBQTZCLEVBQ2I7SUFDaEIsTUFBTUMsZUFBOEIsR0FBRyxDQUFDLENBQUM7SUFFekNILGtCQUFrQixDQUFDSSxPQUFPLENBQUMsVUFBVUMsT0FBTyxFQUFFO01BQzdDLElBQ0UsT0FBT0osYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLLFFBQVEsSUFBSUwsYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLSixjQUFjLENBQUNHLE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLElBQ3pHLE9BQU9MLGFBQWEsQ0FBQ0ksT0FBTyxDQUFDQyxFQUFFLENBQUMsS0FBSyxRQUFRLElBQzdDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1AsYUFBYSxDQUFDSSxPQUFPLENBQUNDLEVBQUUsQ0FBQyxDQUFDLEtBQUtDLElBQUksQ0FBQ0MsU0FBUyxDQUFDTixjQUFjLENBQUNHLE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLENBQUUsRUFDekY7UUFDRCxJQUFJRCxPQUFPLENBQUNJLFdBQVcsSUFBSVAsY0FBYyxDQUFDRyxPQUFPLENBQUNDLEVBQUUsQ0FBQyxLQUFLRCxPQUFPLENBQUNLLGNBQWMsRUFBRTtVQUNqRjtVQUNBLE1BQU1DLFlBQTJCLEdBQUcsQ0FBQyxDQUFDO1VBQ3RDLElBQUlOLE9BQU8sQ0FBQ0ksV0FBVyxJQUFJSixPQUFPLENBQUNJLFdBQVcsRUFBRUcsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzRFAsT0FBTyxDQUFDSSxXQUFXLENBQUNMLE9BQU8sQ0FBQyxVQUFVUyxnQkFBZ0IsRUFBRTtjQUN2REYsWUFBWSxDQUFDRSxnQkFBZ0IsQ0FBQ0MsSUFB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QUFDSCxhQUFhLENBQUNWLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMURNLGFBQWEsQ0FBQ2dJLFdBQVcsQ0FBQzdKLElBQUksRUFBRW1LLGVBQWUsQ0FBQztFQUNqRDtFQUFDakssUUFBQSxDQUFBK0csaUJBQUEsR0FBQUEsaUJBQUE7RUFFTSxTQUFTbUQsK0JBQStCQSxDQUFDQyxLQUEwQixFQUFFcEosYUFBNEIsRUFBdUI7SUFDOUhvSixLQUFLLENBQUMvSyxPQUFPLENBQUMsVUFBVWdMLElBQUksRUFBRTtNQUM3QkEsSUFBSSxDQUFDQyxJQUFJLEdBQUd0SixhQUFhLENBQUNFLE9BQU8sQ0FBQ21KLElBQUksQ0FBQ0MsSUFBSSxDQUFDO01BQzVDRCxJQUFJLENBQUNFLFdBQVcsR0FBR3ZKLGFBQWEsQ0FBQ0UsT0FBTyxDQUFDbUosSUFBSSxDQUFDRSxXQUFXLENBQUM7TUFDMUQsSUFBSUYsSUFBSSxDQUFDRyxLQUFLLEVBQUU7UUFDZkgsSUFBSSxDQUFDRyxLQUFLLENBQUNuTCxPQUFPLENBQUMsVUFBVW9MLEtBQUssRUFBRTtVQUNuQ0EsS0FBSyxDQUFDSCxJQUFJLEdBQUd0SixhQUFhLENBQUNFLE9BQU8sQ0FBQ3VKLEtBQUssQ0FBQ0gsSUFBSSxDQUFDO1FBQy9DLENBQUMsQ0FBQztNQUNIO0lBQ0QsQ0FBQyxDQUFDO0lBRUYsT0FBT0YsS0FBSztFQUNiO0VBQUNuSyxRQUFBLENBQUFrSywrQkFBQSxHQUFBQSwrQkFBQTtFQUVNLFNBQVNPLHdCQUF3QkEsQ0FBQ25KLE9BQWdCLEVBQVc7SUFDbkUsSUFBSW9KLEtBQUssR0FBR0MsU0FBUyxDQUFDQyxvQkFBb0IsQ0FBQ3RKLE9BQU8sQ0FBc0I7SUFDeEUsSUFBSW9KLEtBQUssS0FBSzVJLFNBQVMsSUFBSVIsT0FBTyxDQUFDeUcsU0FBUyxDQUFDLENBQUMsRUFBRTtNQUMvQztNQUNBMkMsS0FBSyxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDdEosT0FBTyxDQUFDeUcsU0FBUyxDQUFDLENBQUUsQ0FBc0I7SUFDbEY7SUFDQSxNQUFNOEMsYUFBYSxHQUFHSCxLQUFLLEVBQUU3QyxlQUFlLENBQUMsQ0FBQyxDQUFDaUQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO0lBQ3pFLE9BQU9ELGFBQWEsRUFBRUUsR0FBRyxFQUFFQyxzQkFBc0IsS0FBSyxJQUFJO0VBQzNEO0VBQUNoTCxRQUFBLENBQUF5Syx3QkFBQSxHQUFBQSx3QkFBQTtFQUFBLE9BQUF6SyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -6,6 +6,7 @@ import deepClone from "sap/base/util/deepClone";
|
|
|
6
6
|
import type AppComponent from "sap/fe/core/AppComponent";
|
|
7
7
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
8
8
|
import type ResourceModel from "sap/fe/core/ResourceModel";
|
|
9
|
+
import type TemplateComponent from "sap/fe/core/TemplateComponent";
|
|
9
10
|
import type { TemplateType } from "sap/fe/core/converters/ManifestSettings";
|
|
10
11
|
import Button from "sap/m/Button";
|
|
11
12
|
import CheckBox from "sap/m/CheckBox";
|
|
@@ -18,6 +19,7 @@ import type { MultiInput$TokenUpdateEvent } from "sap/m/MultiInput";
|
|
|
18
19
|
import MultiInput from "sap/m/MultiInput";
|
|
19
20
|
import Select from "sap/m/Select";
|
|
20
21
|
import Token from "sap/m/Token";
|
|
22
|
+
import Component from "sap/ui/core/Component";
|
|
21
23
|
import type Control from "sap/ui/core/Control";
|
|
22
24
|
import Item from "sap/ui/core/Item";
|
|
23
25
|
import type Context from "sap/ui/model/Context";
|
|
@@ -183,6 +185,29 @@ export function createAdaptionDialogContent(
|
|
|
183
185
|
const list = new List();
|
|
184
186
|
list.setModel(settingsModel);
|
|
185
187
|
|
|
188
|
+
// Function to clear personalization dependent controls when "Own Settings" is selected
|
|
189
|
+
const updatePersonalizationDependentControls = (selectedValue: string): void => {
|
|
190
|
+
const dependentControls = ["personalizationSort", "personalizationColumn", "personalizationFilter", "personalizationGroup"];
|
|
191
|
+
const isOwnSettings = selectedValue === "Own Settings";
|
|
192
|
+
if (isOwnSettings) {
|
|
193
|
+
dependentControls.forEach((controlId) => {
|
|
194
|
+
const listItems = list.getItems();
|
|
195
|
+
for (const item of listItems) {
|
|
196
|
+
const content = (item as InputListItem).getContent();
|
|
197
|
+
for (const control of content) {
|
|
198
|
+
if (control.data("id") === controlId) {
|
|
199
|
+
if ((control as CheckBox).setSelected) {
|
|
200
|
+
(control as CheckBox).setSelected(false);
|
|
201
|
+
propertyValues[controlId] = false;
|
|
202
|
+
}
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
|
|
186
211
|
const listItem = new InputListItem({
|
|
187
212
|
label: "{label}"
|
|
188
213
|
});
|
|
@@ -291,6 +316,10 @@ export function createAdaptionDialogContent(
|
|
|
291
316
|
value = JSON.parse(value.toLowerCase());
|
|
292
317
|
}
|
|
293
318
|
propertyValues[(this as Select).data("id") as keyof PropertyValue] = value;
|
|
319
|
+
// Special handling for personalization setting
|
|
320
|
+
if ((this as Select).data("id") === "personalization") {
|
|
321
|
+
updatePersonalizationDependentControls(value);
|
|
322
|
+
}
|
|
294
323
|
}
|
|
295
324
|
}).data("id", id);
|
|
296
325
|
|
|
@@ -569,3 +598,13 @@ export function getPropertyNamesAndDescriptions(props: DesigntimeSetting[], reso
|
|
|
569
598
|
|
|
570
599
|
return props;
|
|
571
600
|
}
|
|
601
|
+
|
|
602
|
+
export function isManifestChangesEnabled(control: Control): boolean {
|
|
603
|
+
let owner = Component.getOwnerComponentFor(control) as TemplateComponent;
|
|
604
|
+
if (owner === undefined && control.getParent()) {
|
|
605
|
+
// In case of MassEdit, control is a sap.m.Dialog for which there is now OwnerComponent, so we need to consider its parent control
|
|
606
|
+
owner = Component.getOwnerComponentFor(control.getParent()!) as TemplateComponent;
|
|
607
|
+
}
|
|
608
|
+
const sapFeManifest = owner?.getAppComponent().getManifestEntry("sap.fe");
|
|
609
|
+
return sapFeManifest?.app?.disableManifestChanges !== true;
|
|
610
|
+
}
|