@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
|
@@ -25,7 +25,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
|
|
|
25
25
|
function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
|
|
26
26
|
/**
|
|
27
27
|
* Delivery for beta release for the easy filter feature.
|
|
28
|
-
* @experimental
|
|
29
28
|
*/
|
|
30
29
|
let EasyFilterBar = (_dec = defineUI5Class("sap.fe.macros.EasyFilterBar"), _dec2 = implementInterface("sap.fe.core.controllerextensions.viewState.IViewStateContributor"), _dec3 = association({
|
|
31
30
|
type: "sap.fe.macros.filterBar.FilterBarAPI"
|
|
@@ -65,29 +64,29 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
|
|
|
65
64
|
const selectOptionsNames = oNavParameters.selectionVariant.getSelectOptionsPropertyNames();
|
|
66
65
|
this.filterBarMetadata.forEach(field => {
|
|
67
66
|
if (selectOptionsNames.includes(field.name)) {
|
|
68
|
-
field.defaultValue = oNavParameters.selectionVariant.getSelectOption(field.name)?.
|
|
67
|
+
field.defaultValue = oNavParameters.selectionVariant.getSelectOption(field.name)?.reduce((acc, option) => {
|
|
69
68
|
if (option.Sign === "I") {
|
|
70
|
-
if (option.Option ===
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
};
|
|
69
|
+
if (option.Option === FilterOperator.BT || option.Option === FilterOperator.NB) {
|
|
70
|
+
if (option.High !== null && option.High !== undefined) {
|
|
71
|
+
acc.push({
|
|
72
|
+
operator: option.Option,
|
|
73
|
+
selectedValues: [option.Low, option.High]
|
|
74
|
+
});
|
|
75
|
+
}
|
|
78
76
|
} else {
|
|
79
|
-
|
|
77
|
+
acc.push({
|
|
80
78
|
operator: option.Option,
|
|
81
79
|
selectedValues: [option.Low]
|
|
82
|
-
};
|
|
80
|
+
});
|
|
83
81
|
}
|
|
84
82
|
} else {
|
|
85
|
-
|
|
83
|
+
acc.push({
|
|
86
84
|
operator: FilterOperator.NE,
|
|
87
85
|
selectedValues: [option.Low]
|
|
88
|
-
};
|
|
86
|
+
});
|
|
89
87
|
}
|
|
90
|
-
|
|
88
|
+
return acc;
|
|
89
|
+
}, []);
|
|
91
90
|
}
|
|
92
91
|
});
|
|
93
92
|
this.content?.resetState(false);
|
|
@@ -104,106 +103,103 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
|
|
|
104
103
|
return this.getAppComponent()?.getManifestEntry("sap.app").id ?? "<unknownID>";
|
|
105
104
|
};
|
|
106
105
|
_proto.onMetadataAvailable = function onMetadataAvailable() {
|
|
107
|
-
this._fetchedCodeList ??= {};
|
|
108
106
|
this.filterBarMetadata = this.prepareFilterBarMetadata();
|
|
109
107
|
this.recommendedQueries = this.getAppComponent()?.getManifestEntry("sap.fe")?.macros?.easyFilter?.recommendedQueries ?? [];
|
|
110
108
|
this.content = this.createContent();
|
|
111
109
|
this.content.filterBarMetadata = this.filterBarMetadata;
|
|
112
110
|
};
|
|
111
|
+
_proto.getUnitForFilterField = function getUnitForFilterField(field, allFilterFields) {
|
|
112
|
+
const propertyObject = field.getTarget();
|
|
113
|
+
const unitAnnotation = propertyObject.annotations.Measures?.ISOCurrency ?? propertyObject.annotations.Measures?.Unit;
|
|
114
|
+
const unitProperty = isPathAnnotationExpression(unitAnnotation) ? unitAnnotation.$target : undefined;
|
|
115
|
+
return allFilterFields.find(f => f.getTarget() === unitProperty)?.annotationPath;
|
|
116
|
+
};
|
|
117
|
+
_proto.getDefaultValueForFilterField = function getDefaultValueForFilterField(field, startupParameters) {
|
|
118
|
+
let defaultValue;
|
|
119
|
+
if (startupParameters.hasOwnProperty(field.name)) {
|
|
120
|
+
defaultValue = [{
|
|
121
|
+
operator: FilterOperator.EQ,
|
|
122
|
+
selectedValues: startupParameters[field.name]
|
|
123
|
+
}];
|
|
124
|
+
} else if (field.isParameter && startupParameters.hasOwnProperty(field.name.substring(2))) {
|
|
125
|
+
defaultValue = [{
|
|
126
|
+
operator: FilterOperator.EQ,
|
|
127
|
+
selectedValues: startupParameters[field.name.substring(2)]
|
|
128
|
+
}];
|
|
129
|
+
}
|
|
130
|
+
return defaultValue;
|
|
131
|
+
};
|
|
132
|
+
_proto.getEditStateFilterMetadata = function getEditStateFilterMetadata(metaModel) {
|
|
133
|
+
// Assemble the code list for the editing status filter values:
|
|
134
|
+
const props = new JSONModel({
|
|
135
|
+
isDraftCollaborative: ModelHelper.isCollaborationDraftSupported(metaModel)
|
|
136
|
+
}).createBindingContext("/");
|
|
137
|
+
const editingStatusCodeList = DraftEditState.getEditStatesContext(props).getObject("/").map(state => ({
|
|
138
|
+
value: state.id,
|
|
139
|
+
description: state.display
|
|
140
|
+
}));
|
|
141
|
+
return {
|
|
142
|
+
name: "$editState",
|
|
143
|
+
label: this.getTranslatedText("FILTERBAR_EDITING_STATUS"),
|
|
144
|
+
dataType: "Edm.String",
|
|
145
|
+
filterable: true,
|
|
146
|
+
codeList: editingStatusCodeList,
|
|
147
|
+
type: "MenuWithSingleSelect"
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
_proto.getTokenType = function getTokenType(prop) {
|
|
151
|
+
if (hasValueHelpWithFixedValues(prop)) {
|
|
152
|
+
return "MenuWithCheckBox";
|
|
153
|
+
}
|
|
154
|
+
switch (prop.type) {
|
|
155
|
+
case "Edm.Date":
|
|
156
|
+
return "Calendar";
|
|
157
|
+
case "Edm.TimeOfDay":
|
|
158
|
+
return "Time";
|
|
159
|
+
default:
|
|
160
|
+
return "ValueHelp";
|
|
161
|
+
}
|
|
162
|
+
};
|
|
113
163
|
_proto.prepareFilterBarMetadata = function prepareFilterBarMetadata() {
|
|
114
164
|
const owner = this._getOwner();
|
|
115
165
|
const definitionForPage = owner.preprocessorContext?.getDefinitionForPage();
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
166
|
+
if (!definitionForPage) {
|
|
167
|
+
return [];
|
|
168
|
+
}
|
|
169
|
+
const filterBarDef = definitionForPage.getFilterBarDefinition({});
|
|
170
|
+
const metaModel = owner.preprocessorContext?.models.metaModel;
|
|
171
|
+
const startupParameters = owner.getAppComponent().getComponentData()?.startupParameters ?? {};
|
|
172
|
+
const filterFields = filterBarDef.getFilterFields();
|
|
173
|
+
const nonHiddenFilterFields = filterFields.filter(field => {
|
|
174
|
+
return !field.getTarget()?.annotations?.UI?.HiddenFilter?.valueOf();
|
|
175
|
+
});
|
|
176
|
+
const result = nonHiddenFilterFields.map(field => {
|
|
177
|
+
const propertyObject = field.getTarget();
|
|
178
|
+
let codeList;
|
|
179
|
+
if (hasValueHelpWithFixedValues(propertyObject)) {
|
|
180
|
+
codeList = async () => this.getCodeListForProperty(field.annotationPath);
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
name: field.annotationPath,
|
|
184
|
+
label: field.label,
|
|
185
|
+
dataType: propertyObject.type,
|
|
186
|
+
required: field.required ?? false,
|
|
187
|
+
defaultValue: this.getDefaultValueForFilterField(field, startupParameters),
|
|
188
|
+
filterable: true,
|
|
189
|
+
codeList: codeList,
|
|
190
|
+
type: this.getTokenType(propertyObject),
|
|
191
|
+
unit: this.getUnitForFilterField(field, filterFields),
|
|
192
|
+
maxLength: propertyObject.maxLength
|
|
132
193
|
};
|
|
133
|
-
|
|
134
|
-
const filterFields = filterBarDef.getFilterFields();
|
|
135
|
-
const result = filterFields.map(field => {
|
|
136
|
-
// Exclude hidden filter fields. It is not possible to set a value for hidden filters, and users would not understand anyway as they cannot see these values.
|
|
137
|
-
const propertyObject = field.getTarget();
|
|
138
|
-
let codeList;
|
|
139
|
-
const hasCodeList = hasValueHelpWithFixedValues(propertyObject);
|
|
140
|
-
if (hasCodeList) {
|
|
141
|
-
codeList = this._fetchedCodeList[field.name];
|
|
142
|
-
if (!codeList) {
|
|
143
|
-
codeList = async () => this.getCodeListForProperty(field.name, field.annotationPath);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Check if the filter field's target property has a currency or a unit. If so, look for the corresponding filter field (the
|
|
148
|
-
// annotation has to be a path for that) and set the 'unit' property.
|
|
149
|
-
const unitAnnotation = propertyObject.annotations.Measures?.ISOCurrency ?? propertyObject.annotations.Measures?.Unit;
|
|
150
|
-
const unitProperty = isPathAnnotationExpression(unitAnnotation) ? unitAnnotation.$target : undefined;
|
|
151
|
-
const unit = unitProperty ? filterFields.find(f => f.getTarget() === unitProperty)?.name : undefined;
|
|
152
|
-
let defaultValue;
|
|
153
|
-
if (startupParameters.hasOwnProperty(field.name)) {
|
|
154
|
-
defaultValue = [{
|
|
155
|
-
operator: FilterOperator.EQ,
|
|
156
|
-
selectedValues: startupParameters[field.name]
|
|
157
|
-
}];
|
|
158
|
-
} else if (field.isParameter && startupParameters.hasOwnProperty(field.name.substring(2))) {
|
|
159
|
-
defaultValue = [{
|
|
160
|
-
operator: FilterOperator.EQ,
|
|
161
|
-
selectedValues: startupParameters[field.name.substring(2)]
|
|
162
|
-
}];
|
|
163
|
-
}
|
|
164
|
-
return {
|
|
165
|
-
name: field.name,
|
|
166
|
-
path: field.annotationPath,
|
|
167
|
-
label: field.label,
|
|
168
|
-
dataType: propertyObject.type,
|
|
169
|
-
required: field.required ?? false,
|
|
170
|
-
defaultValue: defaultValue,
|
|
171
|
-
filterable: true,
|
|
172
|
-
sortable: !field.isParameter,
|
|
173
|
-
codeList: codeList,
|
|
174
|
-
type: getType(propertyObject.type, codeList),
|
|
175
|
-
unit: unit
|
|
176
|
-
};
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
// [Editing Status]
|
|
194
|
+
});
|
|
180
195
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
isDraftCollaborative: ModelHelper.isCollaborationDraftSupported(metaModel)
|
|
185
|
-
}).createBindingContext("/");
|
|
186
|
-
const editingStatusCodeList = DraftEditState.getEditStatesContext(props).getObject("/").map(state => ({
|
|
187
|
-
value: state.id,
|
|
188
|
-
description: state.display
|
|
189
|
-
}));
|
|
190
|
-
result.push({
|
|
191
|
-
name: "$editState",
|
|
192
|
-
path: "$editState",
|
|
193
|
-
label: this.getTranslatedText("FILTERBAR_EDITING_STATUS"),
|
|
194
|
-
dataType: "Edm.String",
|
|
195
|
-
required: false,
|
|
196
|
-
filterable: true,
|
|
197
|
-
sortable: false,
|
|
198
|
-
codeList: editingStatusCodeList,
|
|
199
|
-
type: "MenuWithCheckBox"
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
return result;
|
|
196
|
+
// [Editing Status]
|
|
197
|
+
if (ModelHelper.isMetaPathDraftSupported(definitionForPage.getMetaPath())) {
|
|
198
|
+
result.push(this.getEditStateFilterMetadata(metaModel));
|
|
203
199
|
}
|
|
204
|
-
return
|
|
200
|
+
return result;
|
|
205
201
|
};
|
|
206
|
-
_proto.getCodeListForProperty = async function getCodeListForProperty(
|
|
202
|
+
_proto.getCodeListForProperty = async function getCodeListForProperty(propertyPath) {
|
|
207
203
|
const defaultValueList = await this.getValueList(propertyPath);
|
|
208
204
|
if (!defaultValueList) {
|
|
209
205
|
return [];
|
|
@@ -214,30 +210,43 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
|
|
|
214
210
|
});
|
|
215
211
|
const data = await listBinding.requestContexts();
|
|
216
212
|
const filterGroupValues = data.map(mapValueListToCodeList(defaultValueList));
|
|
217
|
-
this.
|
|
218
|
-
const codeListProperty = this.filterBarMetadata.find(field => field.name === key);
|
|
213
|
+
const codeListProperty = this.filterBarMetadata.find(field => field.name === propertyPath);
|
|
219
214
|
if (codeListProperty) {
|
|
220
215
|
codeListProperty.codeList = filterGroupValues;
|
|
221
216
|
}
|
|
222
217
|
return filterGroupValues;
|
|
223
218
|
};
|
|
224
219
|
_proto.resolveTokenValuesForField = async function resolveTokenValuesForField(fieldName, values) {
|
|
220
|
+
let filteredValues = values;
|
|
225
221
|
const field = this.filterBarMetadata.find(_ref => {
|
|
226
222
|
let {
|
|
227
223
|
name
|
|
228
224
|
} = _ref;
|
|
229
225
|
return name === fieldName;
|
|
230
226
|
});
|
|
231
|
-
if (field
|
|
232
|
-
const
|
|
233
|
-
if (
|
|
234
|
-
|
|
227
|
+
if (field) {
|
|
228
|
+
const maxLength = field.maxLength;
|
|
229
|
+
if (maxLength !== undefined) {
|
|
230
|
+
filteredValues = values.map(token => {
|
|
231
|
+
const filtered = token.selectedValues.filter(val => typeof val !== "string" || val.length <= maxLength);
|
|
232
|
+
return filtered.length > 0 ? {
|
|
233
|
+
...token,
|
|
234
|
+
selectedValues: filtered
|
|
235
|
+
} : undefined;
|
|
236
|
+
}).filter(Boolean);
|
|
237
|
+
if (filteredValues.length === 0) {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
const valueList = await this.getValueList(field.name);
|
|
242
|
+
if (valueList && ValueListHelper.isValueListSearchable(field.name, valueList)) {
|
|
243
|
+
const resolvedTokenValues = await Promise.all(filteredValues.map(async value => resolveTokenValue(valueList, value)));
|
|
235
244
|
return resolvedTokenValues.flat();
|
|
236
245
|
}
|
|
237
246
|
}
|
|
238
247
|
|
|
239
248
|
// return original values converted to the expected format
|
|
240
|
-
return unresolvedResult(
|
|
249
|
+
return unresolvedResult(filteredValues);
|
|
241
250
|
};
|
|
242
251
|
_proto.getValueList = async function getValueList(propertyPath) {
|
|
243
252
|
const metaModel = this.getMetaModel();
|
|
@@ -266,7 +275,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
|
|
|
266
275
|
operator,
|
|
267
276
|
selectedValues
|
|
268
277
|
} = tokenKeySpecification;
|
|
269
|
-
await FilterUtils.addFilterValues(filterBarAPI.content, field.
|
|
278
|
+
await FilterUtils.addFilterValues(filterBarAPI.content, field.name, operator, selectedValues);
|
|
270
279
|
}
|
|
271
280
|
}
|
|
272
281
|
}
|
|
@@ -308,8 +317,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
|
|
|
308
317
|
const field = this.filterBarMetadata.find(f => f.name === key);
|
|
309
318
|
const filterBar = UI5Element.getElementById(this.filterBar);
|
|
310
319
|
const filterBarAPI = filterBar.getParent();
|
|
311
|
-
await filterBarAPI.showFilterField(field.
|
|
312
|
-
return filterBarAPI.openValueHelpForFilterField(field.
|
|
320
|
+
await filterBarAPI.showFilterField(field.name);
|
|
321
|
+
return filterBarAPI.openValueHelpForFilterField(field.name);
|
|
313
322
|
};
|
|
314
323
|
_proto.onBeforeQueryProcessing = function onBeforeQueryProcessing() {
|
|
315
324
|
const uiModel = this.getModel("ui");
|
|
@@ -425,4 +434,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
|
|
|
425
434
|
_exports = EasyFilterBar;
|
|
426
435
|
return _exports;
|
|
427
436
|
}, false);
|
|
428
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiX2RlYzciLCJhZ2dyZWdhdGlvbiIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJwcmVwYXJlRmVhdHVyZSIsInRoZW4iLCJlYXN5RmlsdGVyUGF0aCIsImNvbnRlbnQiLCJzZXRFYXN5RmlsdGVyTGliIiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsImRlYnVnIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImFwcGx5TGVnYWN5U3RhdGUiLCJnZXRDb250cmlsU3RhdGUiLCJvTmF2UGFyYW1ldGVycyIsIl9zaG91bGRBcHBseURpZmZTdGF0ZSIsIl9za2lwTWVyZ2UiLCJzZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0T3B0aW9uc05hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsImZvckVhY2giLCJmaWVsZCIsImluY2x1ZGVzIiwibmFtZSIsImRlZmF1bHRWYWx1ZSIsImdldFNlbGVjdE9wdGlvbiIsIm1hcCIsIm9wdGlvbiIsIlNpZ24iLCJPcHRpb24iLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiQlQiLCJzZWxlY3RlZFZhbHVlcyIsInZhbHVlMSIsIkxvdyIsInZhbHVlMiIsIkhpZ2giLCJORSIsInJlc2V0U3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFwcGx5U3RhdGUiLCJfc3RhdGUiLCJfb05hdlBhcmFtZXRlcnMiLCJyZXRyaWV2ZVN0YXRlIiwiZ2V0QXBwbGljYXRpb25JZCIsImdldE1hbmlmZXN0RW50cnkiLCJpZCIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfZmV0Y2hlZENvZGVMaXN0IiwicHJlcGFyZUZpbHRlckJhck1ldGFkYXRhIiwicmVjb21tZW5kZWRRdWVyaWVzIiwibWFjcm9zIiwiZWFzeUZpbHRlciIsImNyZWF0ZUNvbnRlbnQiLCJvd25lciIsIl9nZXRPd25lciIsImRlZmluaXRpb25Gb3JQYWdlIiwicHJlcHJvY2Vzc29yQ29udGV4dCIsImdldERlZmluaXRpb25Gb3JQYWdlIiwiZmlsdGVyQmFyRGVmIiwiZ2V0RmlsdGVyQmFyRGVmaW5pdGlvbiIsIm1ldGFNb2RlbCIsIm1vZGVscyIsImdldFR5cGUiLCJlZG1UeXBlIiwiY29kZUxpc3QiLCJzdGFydHVwUGFyYW1ldGVycyIsImdldENvbXBvbmVudERhdGEiLCJmaWx0ZXJGaWVsZHMiLCJnZXRGaWx0ZXJGaWVsZHMiLCJyZXN1bHQiLCJwcm9wZXJ0eU9iamVjdCIsImdldFRhcmdldCIsImhhc0NvZGVMaXN0IiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eSIsImFubm90YXRpb25QYXRoIiwidW5pdEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwidW5pdFByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwidW5pdCIsImZpbmQiLCJmIiwiaGFzT3duUHJvcGVydHkiLCJFUSIsImlzUGFyYW1ldGVyIiwic3Vic3RyaW5nIiwicGF0aCIsImxhYmVsIiwiZGF0YVR5cGUiLCJyZXF1aXJlZCIsImZpbHRlcmFibGUiLCJzb3J0YWJsZSIsIk1vZGVsSGVscGVyIiwiaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0TWV0YVBhdGgiLCJwcm9wcyIsIkpTT05Nb2RlbCIsImlzRHJhZnRDb2xsYWJvcmF0aXZlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImVkaXRpbmdTdGF0dXNDb2RlTGlzdCIsIkRyYWZ0RWRpdFN0YXRlIiwiZ2V0RWRpdFN0YXRlc0NvbnRleHQiLCJnZXRPYmplY3QiLCJzdGF0ZSIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJkaXNwbGF5IiwicHVzaCIsImdldFRyYW5zbGF0ZWRUZXh0Iiwia2V5IiwicHJvcGVydHlQYXRoIiwiZGVmYXVsdFZhbHVlTGlzdCIsImdldFZhbHVlTGlzdCIsInZhbHVlTGlzdEluZm8iLCJsaXN0QmluZGluZyIsIiRtb2RlbCIsImJpbmRMaXN0IiwiQ29sbGVjdGlvblBhdGgiLCIkc2VsZWN0IiwiZ2VuZXJhdGVTZWxlY3RQYXJhbWV0ZXIiLCJkYXRhIiwicmVxdWVzdENvbnRleHRzIiwiZmlsdGVyR3JvdXBWYWx1ZXMiLCJtYXBWYWx1ZUxpc3RUb0NvZGVMaXN0IiwiY29kZUxpc3RQcm9wZXJ0eSIsInJlc29sdmVUb2tlblZhbHVlc0ZvckZpZWxkIiwiZmllbGROYW1lIiwidmFsdWVzIiwiX3JlZiIsInZhbHVlTGlzdCIsIlZhbHVlTGlzdEhlbHBlciIsImlzVmFsdWVMaXN0U2VhcmNoYWJsZSIsInJlc29sdmVkVG9rZW5WYWx1ZXMiLCJhbGwiLCJyZXNvbHZlVG9rZW5WYWx1ZSIsImZsYXQiLCJ1bnJlc29sdmVkUmVzdWx0IiwiZ2V0TWV0YU1vZGVsIiwidmFsdWVMaXN0cyIsImdldFZhbHVlTGlzdEluZm8iLCJvblRva2Vuc0NoYW5nZWQiLCJlIiwiZmlsdGVyQmFyIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidG9rZW5zIiwiZ2V0UGFyYW1ldGVyIiwiY2xlYXJFZGl0RmlsdGVyIiwic29tZSIsInRva2VuRGVmaW5pdGlvbiIsIl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zIiwiZm9ybWF0ZURhdGFUeXBlcyIsInRva2VuIiwidG9rZW5LZXlTcGVjaWZpY2F0aW9uIiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsIkZpbHRlclV0aWxzIiwiYWRkRmlsdGVyVmFsdWVzIiwidHJpZ2dlclNlYXJjaCIsImRhdGVUeXBlIiwiRGF0ZTEiLCJkYXRlVGltZU9mZnNldFR5cGUiLCJEYXRlVGltZU9mZnNldCIsIlY0IiwidGltZU9mRGF5VHlwZSIsIlRpbWVPZkRheSIsImtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZSIsInJlcXVpcmVkQ29udmVydGVyIiwiaWR4IiwicGFyc2VWYWx1ZSIsInNob3dWYWx1ZUhlbHBGb3JLZXkiLCJzaG93RmlsdGVyRmllbGQiLCJvcGVuVmFsdWVIZWxwRm9yRmlsdGVyRmllbGQiLCJvbkJlZm9yZVF1ZXJ5UHJvY2Vzc2luZyIsInVpTW9kZWwiLCJnZXRNb2RlbCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwib25BZnRlclF1ZXJ5UHJvY2Vzc2luZyIsInVubG9jayIsIm9uQ2xlYXJGaWx0ZXJzIiwib25RdWVyeUNoYW5nZWQiLCJmaXJlRmlsdGVyc0NoYW5nZWQiLCJjb25kaXRpb25zQmFzZWQiLCJoYW5kbGVTaG93VmFsdWVIZWxwIiwiZXZlbnQiLCJyZWplY3QiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uIiwidmFsaWRhdGVkIiwiY29uZGl0aW9uVG9SZXNvbHZlIiwiTkIiLCJ3YXJuaW5nIiwicmVzb2x2ZWRWYWx1ZXMiLCJFcnJvciIsIlN0cmluZyIsIl9qc3giLCJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiY29udGV4dFBhdGgiLCJnZXRPd25lckNvbnRleHRQYXRoIiwiYXBwSWQiLCJlYXN5RmlsdGVyTGliIiwic2hvd1ZhbHVlSGVscCIsImJpbmQiLCJkYXRhRmV0Y2hlciIsInJlY29tbWVuZGVkVmFsdWVzIiwicXVlcnlDaGFuZ2VkIiwidG9rZW5zQ2hhbmdlZCIsImJlZm9yZVF1ZXJ5UHJvY2Vzc2luZyIsImFmdGVyUXVlcnlQcm9jZXNzaW5nIiwiY2xlYXJGaWx0ZXJzIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWFzeUZpbHRlckJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlLCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50LFxuXHRFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSxcblx0VG9rZW5EZWZpbml0aW9uLFxuXHRUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbixcblx0VG9rZW5UeXBlLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL0Vhc3lGaWx0ZXJCYXJDb250YWluZXJcIjtcbmltcG9ydCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZpZWxkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2RlZmluaXRpb24vRkVEZWZpbml0aW9uXCI7XG5pbXBvcnQgdHlwZSBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcixcblx0bWFwVmFsdWVMaXN0VG9Db2RlTGlzdCxcblx0cmVzb2x2ZVRva2VuVmFsdWUsXG5cdHVucmVzb2x2ZWRSZXN1bHRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbHRlckRhdGFGZXRjaGVyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRHJhZnRFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciwgeyB0eXBlIFZhbHVlTGlzdEluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgRGF0ZTEgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL0RhdGVcIjtcbmltcG9ydCBEYXRlVGltZU9mZnNldCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvRGF0ZVRpbWVPZmZzZXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvT0RhdGFUeXBlXCI7XG5pbXBvcnQgVGltZU9mRGF5IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9UaW1lT2ZEYXlcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29kZUxpc3RFbnRyeSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblxudHlwZSBFYXN5RmlsdGVyQmFyU3RhdGUgPSB7fTtcbnR5cGUgRmllbGRNZXRhZGF0YSA9IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhICYgeyBwYXRoOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBEZWxpdmVyeSBmb3IgYmV0YSByZWxlYXNlIGZvciB0aGUgZWFzeSBmaWx0ZXIgZmVhdHVyZS5cbiAqIEBleHBlcmltZW50YWxcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5FYXN5RmlsdGVyQmFyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFYXN5RmlsdGVyQmFyIGV4dGVuZHMgQnVpbGRpbmdCbG9jayBpbXBsZW1lbnRzIElWaWV3U3RhdGVDb250cmlidXRvcjxFYXN5RmlsdGVyQmFyU3RhdGU+IHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLnZpZXdTdGF0ZS5JVmlld1N0YXRlQ29udHJpYnV0b3JcIilcblx0X19pbXBsZW1lbnRzX19zYXBfZmVfY29yZV9jb250cm9sbGVyZXh0ZW5zaW9uc192aWV3U3RhdGVfSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yITogYm9vbGVhbjtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiIH0pXG5cdGZpbHRlckJhciE6IHN0cmluZztcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuY29udGVudFN3aXRjaGVyLkNvbnRlbnRTd2l0Y2hlclwiIH0pXG5cdGNvbnRlbnRTd2l0Y2hlciE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGNvbnRlbnRTd2l0Y2hlcktleT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLmNvbnRyb2xzLmVhc3lGaWx0ZXIuRWFzeUZpbHRlckJhckNvbnRhaW5lclwiIH0pXG5cdGNvbnRlbnQ/OiBFbmhhbmNlV2l0aFVJNTxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPjtcblxuXHRfZmV0Y2hlZENvZGVMaXN0ITogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJNZXRhZGF0YSE6IEZpZWxkTWV0YWRhdGFbXTtcblxuXHRwcml2YXRlIGVhc3lGaWx0ZXJQYXRoPzogc3RyaW5nO1xuXG5cdHByaXZhdGUgcmVjb21tZW5kZWRRdWVyaWVzPzogc3RyaW5nW107XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BlcnRpZXMsIG90aGVycyk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0Py5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpXG5cdFx0XHQucHJlcGFyZUZlYXR1cmUoXCJNYWdpY0ZpbHRlcmluZ1wiKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJQYXRoID0gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblx0XHRcdFx0dGhpcy5jb250ZW50Py5zZXRFYXN5RmlsdGVyTGliKHRoaXMuZWFzeUZpbHRlclBhdGgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBsb2FkaW5nIEVhc3lGaWx0ZXJcIiwgZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRhc3luYyBhcHBseUxlZ2FjeVN0YXRlKFxuXHRcdGdldENvbnRyaWxTdGF0ZT86IChjb250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiBDb250cm9sU3RhdGUsXG5cdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdF9zaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW4sXG5cdFx0X3NraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9OYXZQYXJhbWV0ZXJzPy5zZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRjb25zdCBzZWxlY3RPcHRpb25zTmFtZXMgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZvckVhY2goKGZpZWxkKSA9PiB7XG5cdFx0XHRcdGlmIChzZWxlY3RPcHRpb25zTmFtZXMuaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcblx0XHRcdFx0XHRmaWVsZC5kZWZhdWx0VmFsdWUgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50IS5nZXRTZWxlY3RPcHRpb24oZmllbGQubmFtZSk/Lm1hcCgob3B0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAob3B0aW9uLlNpZ24gPT09IFwiSVwiKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvcHRpb24uT3B0aW9uID09PSBcIkJUXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkJULFxuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IFt7IHZhbHVlMTogb3B0aW9uLkxvdywgdmFsdWUyOiBvcHRpb24uSGlnaCB9XVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBvcHRpb24uT3B0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IFtvcHRpb24uTG93XVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLk5FLFxuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd11cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuY29udGVudD8ucmVzZXRTdGF0ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGFwcGx5U3RhdGUoX3N0YXRlOiBFYXN5RmlsdGVyQmFyU3RhdGUsIF9vTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHJpZXZlU3RhdGUoKTogRWFzeUZpbHRlckJhclN0YXRlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Z2V0QXBwbGljYXRpb25JZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS5pZCA/PyBcIjx1bmtub3duSUQ+XCI7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdHRoaXMuX2ZldGNoZWRDb2RlTGlzdCA/Pz0ge307XG5cdFx0dGhpcy5maWx0ZXJCYXJNZXRhZGF0YSA9IHRoaXMucHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk7XG5cdFx0dGhpcy5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpPy5tYWNyb3M/LmVhc3lGaWx0ZXI/LnJlY29tbWVuZGVkUXVlcmllcyA/PyBbXTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPjtcblx0XHR0aGlzLmNvbnRlbnQuZmlsdGVyQmFyTWV0YWRhdGEgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhO1xuXHR9XG5cblx0cHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk6IEZpZWxkTWV0YWRhdGFbXSB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpITtcblx0XHRjb25zdCBkZWZpbml0aW9uRm9yUGFnZSA9IG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/LmdldERlZmluaXRpb25Gb3JQYWdlKCk7XG5cdFx0bGV0IGZpbHRlckJhckRlZjtcblx0XHRpZiAoZGVmaW5pdGlvbkZvclBhZ2UpIHtcblx0XHRcdGZpbHRlckJhckRlZiA9IGRlZmluaXRpb25Gb3JQYWdlLmdldEZpbHRlckJhckRlZmluaXRpb24oe30pO1xuXG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBvd25lci5wcmVwcm9jZXNzb3JDb250ZXh0Py5tb2RlbHMubWV0YU1vZGVsIGFzIE9EYXRhTWV0YU1vZGVsO1xuXG5cdFx0XHRjb25zdCBnZXRUeXBlID0gKGVkbVR5cGU6IHN0cmluZywgY29kZUxpc3Q6IHVua25vd24pOiBUb2tlblR5cGUgPT4ge1xuXHRcdFx0XHRpZiAoY29kZUxpc3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gXCJNZW51V2l0aENoZWNrQm94XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3dpdGNoIChlZG1UeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJDYWxlbmRhclwiO1xuXHRcdFx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJUaW1lXCI7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiBcIlZhbHVlSGVscFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RhcnR1cFBhcmFtZXRlcnMgPSBvd25lci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb21wb25lbnREYXRhKCk/LnN0YXJ0dXBQYXJhbWV0ZXJzID8/IHt9O1xuXG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZHMgPSBmaWx0ZXJCYXJEZWYuZ2V0RmlsdGVyRmllbGRzKCk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBmaWx0ZXJGaWVsZHMubWFwKChmaWVsZDogRmlsdGVyRmllbGQpOiBGaWVsZE1ldGFkYXRhID0+IHtcblx0XHRcdFx0Ly8gRXhjbHVkZSBoaWRkZW4gZmlsdGVyIGZpZWxkcy4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHNldCBhIHZhbHVlIGZvciBoaWRkZW4gZmlsdGVycywgYW5kIHVzZXJzIHdvdWxkIG5vdCB1bmRlcnN0YW5kIGFueXdheSBhcyB0aGV5IGNhbm5vdCBzZWUgdGhlc2UgdmFsdWVzLlxuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU9iamVjdCA9IGZpZWxkLmdldFRhcmdldCgpO1xuXHRcdFx0XHRsZXQgY29kZUxpc3Q7XG5cdFx0XHRcdGNvbnN0IGhhc0NvZGVMaXN0ID0gaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKHByb3BlcnR5T2JqZWN0KTtcblx0XHRcdFx0aWYgKGhhc0NvZGVMaXN0KSB7XG5cdFx0XHRcdFx0Y29kZUxpc3QgPSB0aGlzLl9mZXRjaGVkQ29kZUxpc3RbZmllbGQubmFtZV07XG5cdFx0XHRcdFx0aWYgKCFjb2RlTGlzdCkge1xuXHRcdFx0XHRcdFx0Y29kZUxpc3QgPSBhc3luYyAoKTogUHJvbWlzZTxDb2RlTGlzdEVudHJ5W10+ID0+IHRoaXMuZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShmaWVsZC5uYW1lLCBmaWVsZC5hbm5vdGF0aW9uUGF0aCEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBmaWx0ZXIgZmllbGQncyB0YXJnZXQgcHJvcGVydHkgaGFzIGEgY3VycmVuY3kgb3IgYSB1bml0LiBJZiBzbywgbG9vayBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIGZpZWxkICh0aGVcblx0XHRcdFx0Ly8gYW5ub3RhdGlvbiBoYXMgdG8gYmUgYSBwYXRoIGZvciB0aGF0KSBhbmQgc2V0IHRoZSAndW5pdCcgcHJvcGVydHkuXG5cdFx0XHRcdGNvbnN0IHVuaXRBbm5vdGF0aW9uID0gcHJvcGVydHlPYmplY3QuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LklTT0N1cnJlbmN5ID8/IHByb3BlcnR5T2JqZWN0LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0O1xuXHRcdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0QW5ub3RhdGlvbikgPyB1bml0QW5ub3RhdGlvbi4kdGFyZ2V0IDogdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCB1bml0ID0gdW5pdFByb3BlcnR5ID8gZmlsdGVyRmllbGRzLmZpbmQoKGYpID0+IGYuZ2V0VGFyZ2V0KCkgPT09IHVuaXRQcm9wZXJ0eSk/Lm5hbWUgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGxldCBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdGlmIChzdGFydHVwUGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5uYW1lKSkge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogc3RhcnR1cFBhcmFtZXRlcnNbZmllbGQubmFtZV1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGZpZWxkLmlzUGFyYW1ldGVyICYmIHN0YXJ0dXBQYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KGZpZWxkLm5hbWUuc3Vic3RyaW5nKDIpKSkge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogc3RhcnR1cFBhcmFtZXRlcnNbZmllbGQubmFtZS5zdWJzdHJpbmcoMildXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdG5hbWU6IGZpZWxkLm5hbWUsXG5cdFx0XHRcdFx0cGF0aDogZmllbGQuYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0bGFiZWw6IGZpZWxkLmxhYmVsLFxuXHRcdFx0XHRcdGRhdGFUeXBlOiBwcm9wZXJ0eU9iamVjdC50eXBlLFxuXHRcdFx0XHRcdHJlcXVpcmVkOiBmaWVsZC5yZXF1aXJlZCA/PyBmYWxzZSxcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcblx0XHRcdFx0XHRmaWx0ZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNvcnRhYmxlOiAhZmllbGQuaXNQYXJhbWV0ZXIsXG5cdFx0XHRcdFx0Y29kZUxpc3Q6IGNvZGVMaXN0LFxuXHRcdFx0XHRcdHR5cGU6IGdldFR5cGUocHJvcGVydHlPYmplY3QudHlwZSwgY29kZUxpc3QpLFxuXHRcdFx0XHRcdHVuaXQ6IHVuaXRcblx0XHRcdFx0fSBhcyBGaWVsZE1ldGFkYXRhO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIFtFZGl0aW5nIFN0YXR1c11cblxuXHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzTWV0YVBhdGhEcmFmdFN1cHBvcnRlZChkZWZpbml0aW9uRm9yUGFnZS5nZXRNZXRhUGF0aCgpIGFzIHVua25vd24gYXMgTWV0YVBhdGg8dW5rbm93bj4pKSB7XG5cdFx0XHRcdC8vIEFzc2VtYmxlIHRoZSBjb2RlIGxpc3QgZm9yIHRoZSBlZGl0aW5nIHN0YXR1cyBmaWx0ZXIgdmFsdWVzOlxuXHRcdFx0XHRjb25zdCBwcm9wcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRcdGlzRHJhZnRDb2xsYWJvcmF0aXZlOiBNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpXG5cdFx0XHRcdH0pLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblxuXHRcdFx0XHRjb25zdCBlZGl0aW5nU3RhdHVzQ29kZUxpc3QgPSBEcmFmdEVkaXRTdGF0ZS5nZXRFZGl0U3RhdGVzQ29udGV4dChwcm9wcylcblx0XHRcdFx0XHQuZ2V0T2JqZWN0KFwiL1wiKVxuXHRcdFx0XHRcdC5tYXAoKHN0YXRlOiB7IGlkOiBzdHJpbmc7IGRpc3BsYXk6IHN0cmluZyB9KSA9PiAoeyB2YWx1ZTogc3RhdGUuaWQsIGRlc2NyaXB0aW9uOiBzdGF0ZS5kaXNwbGF5IH0pKTtcblxuXHRcdFx0XHRyZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRcdFx0bGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJGSUxURVJCQVJfRURJVElOR19TVEFUVVNcIiksXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IFwiRWRtLlN0cmluZ1wiLFxuXHRcdFx0XHRcdHJlcXVpcmVkOiBmYWxzZSxcblx0XHRcdFx0XHRmaWx0ZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRjb2RlTGlzdDogZWRpdGluZ1N0YXR1c0NvZGVMaXN0LFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVudVdpdGhDaGVja0JveFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0YXN5bmMgZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShrZXk6IHN0cmluZywgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPENvZGVMaXN0RW50cnlbXT4ge1xuXHRcdGNvbnN0IGRlZmF1bHRWYWx1ZUxpc3QgPSBhd2FpdCB0aGlzLmdldFZhbHVlTGlzdChwcm9wZXJ0eVBhdGgpO1xuXG5cdFx0aWYgKCFkZWZhdWx0VmFsdWVMaXN0KSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWVMaXN0SW5mbyA9IGRlZmF1bHRWYWx1ZUxpc3QudmFsdWVMaXN0SW5mbztcblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdmFsdWVMaXN0SW5mby4kbW9kZWwuYmluZExpc3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9YCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuXHRcdFx0JHNlbGVjdDogZ2VuZXJhdGVTZWxlY3RQYXJhbWV0ZXIoZGVmYXVsdFZhbHVlTGlzdClcblx0XHR9KTtcblx0XHRjb25zdCBkYXRhID0gYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKCk7XG5cblx0XHRjb25zdCBmaWx0ZXJHcm91cFZhbHVlcyA9IGRhdGEubWFwKG1hcFZhbHVlTGlzdFRvQ29kZUxpc3QoZGVmYXVsdFZhbHVlTGlzdCkpO1xuXHRcdHRoaXMuX2ZldGNoZWRDb2RlTGlzdFtrZXldID0gZmlsdGVyR3JvdXBWYWx1ZXM7XG5cdFx0Y29uc3QgY29kZUxpc3RQcm9wZXJ0eSA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09IGtleSk7XG5cdFx0aWYgKGNvZGVMaXN0UHJvcGVydHkpIHtcblx0XHRcdGNvZGVMaXN0UHJvcGVydHkuY29kZUxpc3QgPSBmaWx0ZXJHcm91cFZhbHVlcztcblx0XHR9XG5cdFx0cmV0dXJuIGZpbHRlckdyb3VwVmFsdWVzO1xuXHR9XG5cblx0YXN5bmMgcmVzb2x2ZVRva2VuVmFsdWVzRm9yRmllbGQoXG5cdFx0ZmllbGROYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdXG5cdCk6IFByb21pc2U8VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10+IHtcblx0XHRjb25zdCBmaWVsZCA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGZpZWxkTmFtZSk7XG5cdFx0aWYgKGZpZWxkPy5wYXRoKSB7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSBhd2FpdCB0aGlzLmdldFZhbHVlTGlzdChmaWVsZC5wYXRoKTtcblxuXHRcdFx0aWYgKHZhbHVlTGlzdCAmJiBWYWx1ZUxpc3RIZWxwZXIuaXNWYWx1ZUxpc3RTZWFyY2hhYmxlKGZpZWxkLnBhdGgsIHZhbHVlTGlzdCkpIHtcblx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUb2tlblZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKHZhbHVlcy5tYXAoYXN5bmMgKHZhbHVlKSA9PiByZXNvbHZlVG9rZW5WYWx1ZSh2YWx1ZUxpc3QsIHZhbHVlKSkpO1xuXHRcdFx0XHRyZXR1cm4gcmVzb2x2ZWRUb2tlblZhbHVlcy5mbGF0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmV0dXJuIG9yaWdpbmFsIHZhbHVlcyBjb252ZXJ0ZWQgdG8gdGhlIGV4cGVjdGVkIGZvcm1hdFxuXHRcdHJldHVybiB1bnJlc29sdmVkUmVzdWx0KHZhbHVlcyk7XG5cdH1cblxuXHRhc3luYyBnZXRWYWx1ZUxpc3QocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFZhbHVlTGlzdEluZm8gfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpITtcblx0XHRjb25zdCB2YWx1ZUxpc3RzID0gYXdhaXQgVmFsdWVMaXN0SGVscGVyLmdldFZhbHVlTGlzdEluZm8odW5kZWZpbmVkLCBwcm9wZXJ0eVBhdGgsIHVuZGVmaW5lZCwgbWV0YU1vZGVsKTtcblx0XHRyZXR1cm4gdmFsdWVMaXN0c1swXTtcblx0fVxuXG5cdGFzeW5jIG9uVG9rZW5zQ2hhbmdlZChlOiBVSTVFdmVudDx7IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRjb25zdCB0b2tlbnMgPSBlLmdldFBhcmFtZXRlcihcInRva2Vuc1wiKTtcblx0XHRjb25zdCBjbGVhckVkaXRGaWx0ZXIgPSB0b2tlbnMuc29tZSgodG9rZW5EZWZpbml0aW9uKSA9PiB0b2tlbkRlZmluaXRpb24ua2V5ID09PSBcIiRlZGl0U3RhdGVcIik7XG5cdFx0YXdhaXQgZmlsdGVyQmFyQVBJLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgeyBjbGVhckVkaXRGaWx0ZXIgfSk7XG5cdFx0dGhpcy5mb3JtYXRlRGF0YVR5cGVzKHRva2Vucyk7XG5cblx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuXHRcdFx0aWYgKHRva2VuLmtleSA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0Ly8gY29udmVydCB0aGUgJGVkaXRTdGF0ZSBmaWx0ZXIgY29uZGl0aW9uXG5cdFx0XHRcdGZvciAoY29uc3QgdG9rZW5LZXlTcGVjaWZpY2F0aW9uIG9mIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdFx0XHRhd2FpdCBGaWx0ZXJVdGlscy5hZGRGaWx0ZXJWYWx1ZXMoXG5cdFx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkuY29udGVudCxcblx0XHRcdFx0XHRcdHRva2VuLmtleSxcblx0XHRcdFx0XHRcdFwiRFJBRlRfRURJVF9TVEFURVwiLFxuXHRcdFx0XHRcdFx0dG9rZW5LZXlTcGVjaWZpY2F0aW9uLnNlbGVjdGVkVmFsdWVzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmllbGQgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdG9rZW4ua2V5KSE7XG5cdFx0XHRcdGZvciAoY29uc3QgdG9rZW5LZXlTcGVjaWZpY2F0aW9uIG9mIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdFx0XHRjb25zdCB7IG9wZXJhdG9yLCBzZWxlY3RlZFZhbHVlcyB9ID0gdG9rZW5LZXlTcGVjaWZpY2F0aW9uO1xuXHRcdFx0XHRcdGF3YWl0IEZpbHRlclV0aWxzLmFkZEZpbHRlclZhbHVlcyhmaWx0ZXJCYXJBUEkuY29udGVudCwgZmllbGQucGF0aCwgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHR9XG5cblx0Ly9XZSBuZWVkIHRoZSBiZWxvdyBmdW5jdGlvbiBzbyB0aGF0IHRoZSBkYXRlIG9iamVjdHMgYW5kIGRhdGVUaW1lT2Zmc2V0cyB3b3VsZCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHR5cGUgYXMgdGhlIGRhdGUgb2JqZWN0IGlzIG5vdCBhIHZhbGlkIHR5cGUgaW4gVjQgd29ybGRcblx0Zm9ybWF0ZURhdGFUeXBlcyh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgZGF0ZVR5cGUgPSBuZXcgRGF0ZTEoKSxcblx0XHRcdGRhdGVUaW1lT2Zmc2V0VHlwZSA9IG5ldyBEYXRlVGltZU9mZnNldCh1bmRlZmluZWQsIHsgVjQ6IHRydWUgfSksXG5cdFx0XHR0aW1lT2ZEYXlUeXBlID0gbmV3IFRpbWVPZkRheSgpO1xuXHRcdHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0Y29uc3QgZWRtVHlwZSA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZGF0YSkgPT4gZGF0YS5uYW1lID09PSB0b2tlbi5rZXkpPy5kYXRhVHlwZTtcblx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoa2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlKSA9PiB7XG5cdFx0XHRcdGxldCByZXF1aXJlZENvbnZlcnRlcjogT0RhdGFUeXBlO1xuXHRcdFx0XHRzd2l0Y2ggKGVkbVR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0XHRcdHJlcXVpcmVkQ29udmVydGVyID0gZGF0ZVR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSB0aW1lT2ZEYXlUeXBlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSBkYXRlVGltZU9mZnNldFR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZS5zZWxlY3RlZFZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgaWR4KSA9PiB7XG5cdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlLnNlbGVjdGVkVmFsdWVzW2lkeF0gPSByZXF1aXJlZENvbnZlcnRlci5wYXJzZVZhbHVlKHZhbHVlLCBcIm9iamVjdFwiKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIHNob3dWYWx1ZUhlbHBGb3JLZXkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgZmllbGQgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGYpID0+IGYubmFtZSA9PT0ga2V5KSE7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpbHRlckJhcikgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0YXdhaXQgZmlsdGVyQmFyQVBJLnNob3dGaWx0ZXJGaWVsZChmaWVsZC5wYXRoKTtcblx0XHRyZXR1cm4gZmlsdGVyQmFyQVBJLm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChmaWVsZC5wYXRoKTtcblx0fVxuXG5cdG9uQmVmb3JlUXVlcnlQcm9jZXNzaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IHVpTW9kZWwgPSB0aGlzLmdldE1vZGVsKFwidWlcIikgYXMgSlNPTk1vZGVsO1xuXHRcdEJ1c3lMb2NrZXIubG9jayh1aU1vZGVsKTtcblx0fVxuXG5cdG9uQWZ0ZXJRdWVyeVByb2Nlc3NpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0QnVzeUxvY2tlci51bmxvY2sodWlNb2RlbCk7XG5cdH1cblxuXHRhc3luYyBvbkNsZWFyRmlsdGVycygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBFbXB0eSBpbnB1dDogY2xlYXIgdGhlIGZpbHRlcnMgYW5kIHJlZnJlc2ggdGhlIGxpc3Rcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyKTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHR9XG5cblx0b25RdWVyeUNoYW5nZWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpbHRlckJhcikgYXMgRmlsdGVyQmFyO1xuXHRcdGZpbHRlckJhci5maXJlRmlsdGVyc0NoYW5nZWQoeyBjb25kaXRpb25zQmFzZWQ6IHRydWUgfSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGhhbmRsZVNob3dWYWx1ZUhlbHAoZXZlbnQ6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdGNvbnN0IHJlc29sdmUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNvbHZlXCIpO1xuXHRcdGNvbnN0IHJlamVjdCA9IGV2ZW50LmdldFBhcmFtZXRlcihcInJlamVjdFwiKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25zID0gYXdhaXQgdGhpcy5zaG93VmFsdWVIZWxwRm9yS2V5KGtleSk7XG5cblx0XHRcdGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gY29uZGl0aW9ucy5tYXAoYXN5bmMgKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBvcGVyYXRvciA9IGNvbmRpdGlvbi5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcjtcblxuXHRcdFx0XHRpZiAoY29uZGl0aW9uLnZhbGlkYXRlZCA9PT0gXCJOb3RWYWxpZGF0ZWRcIikge1xuXHRcdFx0XHRcdC8vIG5vdCB2YWxpZGF0ZWQ6IHRoZSBjb25kaXRpb24gb25seSBoYXMgdmFsdWVzIHdpdGhvdXQgZGVzY3JpcHRpb24gLSB0cnkgdG8gZ2V0IHRoZSBkZXNjcmlwdGlvbiB1c2luZyB0aGUgZGF0YSBmZXRjaGVyIG1lY2hhbmlzbS5cblx0XHRcdFx0XHQvLyBgY29uZGl0aW9uLnZhbHVlc2AgaXMgYSBzaW5nbGUgdmFsdWUgYFt2YWx1ZV1gIChvciBgW2xvd2VyIGJvdW5kLCB1cHBlciBib3VuZF1gIGZvciBCVC9OQiBvcGVyYXRvcnMpLlxuXHRcdFx0XHRcdGNvbnN0IGNvbmRpdGlvblRvUmVzb2x2ZTogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHRcdFx0XHRcdFx0b3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5OQlxuXHRcdFx0XHRcdFx0XHQ/IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbY29uZGl0aW9uLnZhbHVlc1swXSwgY29uZGl0aW9uLnZhbHVlc1sxXV0gfVxuXHRcdFx0XHRcdFx0XHQ6IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbY29uZGl0aW9uLnZhbHVlc1swXV0gfTtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVUb2tlblZhbHVlc0ZvckZpZWxkKGtleSwgW2NvbmRpdGlvblRvUmVzb2x2ZV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBGaWx0ZXJPcGVyYXRvci5CVCAmJiBvcGVyYXRvciAhPT0gRmlsdGVyT3BlcmF0b3IuTkIpIHtcblx0XHRcdFx0XHQvLyB2YWxpZGF0ZWQ6IGJvdGggdmFsdWUgYW5kIGRlc2NyaXB0aW9uIGFyZSBhdmFpbGFibGUgLSBkaXJlY3RseSBtYXAgdGhlbSB0byB0aGUgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gYGNvbmRpdGlvbi52YWx1ZXNgIGlzIGEgdHVwbGUgb2YgYFt2YWx1ZSwgZGVzY3JpcHRpb24/XWBcblx0XHRcdFx0XHRjb25zdCBbdmFsdWUsIGRlc2NyaXB0aW9uXSA9IGNvbmRpdGlvbi52YWx1ZXMgYXMgW3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sIHN0cmluZyB8IHVuZGVmaW5lZF07XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbeyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFt7IHZhbHVlLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPz8gdmFsdWUgfV0gfV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHNob3VsZCBub3Qgb2NjdXI6IEJUL05CIGFyZSBleHBlY3RlZCB0byBiZSBcIk5vdFZhbGlkYXRlZFwiIGNvbmRpdGlvbnNcblx0XHRcdFx0XHRMb2cud2FybmluZyhgVW5leHBlY3RlZCBjb25kaXRpb24gZm9yIGZpZWxkICR7a2V5fTogb3BlcmF0b3IgJHtvcGVyYXRvcn0gd2l0aCB2YWx1ZXMgJHtjb25kaXRpb24udmFsdWVzfS5gKTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IHJlc29sdmVkVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc2VsZWN0ZWRWYWx1ZXMpO1xuXHRcdFx0cmVzb2x2ZShyZXNvbHZlZFZhbHVlcy5mbGF0KCkpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRyZWplY3QoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RWFzeUZpbHRlckJhckNvbnRhaW5lclxuXHRcdFx0XHRjb250ZXh0UGF0aD17dGhpcy5nZXRPd25lckNvbnRleHRQYXRoKCl9XG5cdFx0XHRcdGFwcElkPXt0aGlzLmdldEFwcGxpY2F0aW9uSWQoKX1cblx0XHRcdFx0ZmlsdGVyQmFyTWV0YWRhdGE9e3RoaXMuZmlsdGVyQmFyTWV0YWRhdGF9XG5cdFx0XHRcdGVhc3lGaWx0ZXJMaWI9e3RoaXMuZWFzeUZpbHRlclBhdGh9XG5cdFx0XHRcdHNob3dWYWx1ZUhlbHA9e3RoaXMuaGFuZGxlU2hvd1ZhbHVlSGVscC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRkYXRhRmV0Y2hlcj17dGhpcy5yZXNvbHZlVG9rZW5WYWx1ZXNGb3JGaWVsZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFF1ZXJpZXN9XG5cdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17dGhpcy5vblF1ZXJ5Q2hhbmdlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHR0b2tlbnNDaGFuZ2VkPXt0aGlzLm9uVG9rZW5zQ2hhbmdlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRiZWZvcmVRdWVyeVByb2Nlc3Npbmc9e3RoaXMub25CZWZvcmVRdWVyeVByb2Nlc3NpbmcuYmluZCh0aGlzKX1cblx0XHRcdFx0YWZ0ZXJRdWVyeVByb2Nlc3Npbmc9e3RoaXMub25BZnRlclF1ZXJ5UHJvY2Vzc2luZy5iaW5kKHRoaXMpfVxuXHRcdFx0XHRjbGVhckZpbHRlcnM9e3RoaXMub25DbGVhckZpbHRlcnMuYmluZCh0aGlzKX1cblx0XHRcdC8+XG5cdFx0KSBhcyBFYXN5RmlsdGVyQmFyQ29udGFpbmVyO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpREE7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUtxQkEs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
|
|
437
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiX2RlYzciLCJhZ2dyZWdhdGlvbiIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJwcmVwYXJlRmVhdHVyZSIsInRoZW4iLCJlYXN5RmlsdGVyUGF0aCIsImNvbnRlbnQiLCJzZXRFYXN5RmlsdGVyTGliIiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsImRlYnVnIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImFwcGx5TGVnYWN5U3RhdGUiLCJnZXRDb250cmlsU3RhdGUiLCJvTmF2UGFyYW1ldGVycyIsIl9zaG91bGRBcHBseURpZmZTdGF0ZSIsIl9za2lwTWVyZ2UiLCJzZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0T3B0aW9uc05hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsImZvckVhY2giLCJmaWVsZCIsImluY2x1ZGVzIiwibmFtZSIsImRlZmF1bHRWYWx1ZSIsImdldFNlbGVjdE9wdGlvbiIsInJlZHVjZSIsImFjYyIsIm9wdGlvbiIsIlNpZ24iLCJPcHRpb24iLCJGaWx0ZXJPcGVyYXRvciIsIkJUIiwiTkIiLCJIaWdoIiwicHVzaCIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJMb3ciLCJORSIsInJlc2V0U3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFwcGx5U3RhdGUiLCJfc3RhdGUiLCJfb05hdlBhcmFtZXRlcnMiLCJyZXRyaWV2ZVN0YXRlIiwiZ2V0QXBwbGljYXRpb25JZCIsImdldE1hbmlmZXN0RW50cnkiLCJpZCIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJwcmVwYXJlRmlsdGVyQmFyTWV0YWRhdGEiLCJyZWNvbW1lbmRlZFF1ZXJpZXMiLCJtYWNyb3MiLCJlYXN5RmlsdGVyIiwiY3JlYXRlQ29udGVudCIsImdldFVuaXRGb3JGaWx0ZXJGaWVsZCIsImFsbEZpbHRlckZpZWxkcyIsInByb3BlcnR5T2JqZWN0IiwiZ2V0VGFyZ2V0IiwidW5pdEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwidW5pdFByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwiZmluZCIsImYiLCJhbm5vdGF0aW9uUGF0aCIsImdldERlZmF1bHRWYWx1ZUZvckZpbHRlckZpZWxkIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJoYXNPd25Qcm9wZXJ0eSIsIkVRIiwiaXNQYXJhbWV0ZXIiLCJzdWJzdHJpbmciLCJnZXRFZGl0U3RhdGVGaWx0ZXJNZXRhZGF0YSIsIm1ldGFNb2RlbCIsInByb3BzIiwiSlNPTk1vZGVsIiwiaXNEcmFmdENvbGxhYm9yYXRpdmUiLCJNb2RlbEhlbHBlciIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJlZGl0aW5nU3RhdHVzQ29kZUxpc3QiLCJEcmFmdEVkaXRTdGF0ZSIsImdldEVkaXRTdGF0ZXNDb250ZXh0IiwiZ2V0T2JqZWN0IiwibWFwIiwic3RhdGUiLCJ2YWx1ZSIsImRlc2NyaXB0aW9uIiwiZGlzcGxheSIsImxhYmVsIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJkYXRhVHlwZSIsImZpbHRlcmFibGUiLCJjb2RlTGlzdCIsImdldFRva2VuVHlwZSIsInByb3AiLCJoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMiLCJvd25lciIsIl9nZXRPd25lciIsImRlZmluaXRpb25Gb3JQYWdlIiwicHJlcHJvY2Vzc29yQ29udGV4dCIsImdldERlZmluaXRpb25Gb3JQYWdlIiwiZmlsdGVyQmFyRGVmIiwiZ2V0RmlsdGVyQmFyRGVmaW5pdGlvbiIsIm1vZGVscyIsImdldENvbXBvbmVudERhdGEiLCJmaWx0ZXJGaWVsZHMiLCJnZXRGaWx0ZXJGaWVsZHMiLCJub25IaWRkZW5GaWx0ZXJGaWVsZHMiLCJmaWx0ZXIiLCJVSSIsIkhpZGRlbkZpbHRlciIsInZhbHVlT2YiLCJyZXN1bHQiLCJnZXRDb2RlTGlzdEZvclByb3BlcnR5IiwicmVxdWlyZWQiLCJ1bml0IiwibWF4TGVuZ3RoIiwiaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0TWV0YVBhdGgiLCJwcm9wZXJ0eVBhdGgiLCJkZWZhdWx0VmFsdWVMaXN0IiwiZ2V0VmFsdWVMaXN0IiwidmFsdWVMaXN0SW5mbyIsImxpc3RCaW5kaW5nIiwiJG1vZGVsIiwiYmluZExpc3QiLCJDb2xsZWN0aW9uUGF0aCIsIiRzZWxlY3QiLCJnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlciIsImRhdGEiLCJyZXF1ZXN0Q29udGV4dHMiLCJmaWx0ZXJHcm91cFZhbHVlcyIsIm1hcFZhbHVlTGlzdFRvQ29kZUxpc3QiLCJjb2RlTGlzdFByb3BlcnR5IiwicmVzb2x2ZVRva2VuVmFsdWVzRm9yRmllbGQiLCJmaWVsZE5hbWUiLCJ2YWx1ZXMiLCJmaWx0ZXJlZFZhbHVlcyIsIl9yZWYiLCJ0b2tlbiIsImZpbHRlcmVkIiwidmFsIiwibGVuZ3RoIiwiQm9vbGVhbiIsInZhbHVlTGlzdCIsIlZhbHVlTGlzdEhlbHBlciIsImlzVmFsdWVMaXN0U2VhcmNoYWJsZSIsInJlc29sdmVkVG9rZW5WYWx1ZXMiLCJhbGwiLCJyZXNvbHZlVG9rZW5WYWx1ZSIsImZsYXQiLCJ1bnJlc29sdmVkUmVzdWx0IiwiZ2V0TWV0YU1vZGVsIiwidmFsdWVMaXN0cyIsImdldFZhbHVlTGlzdEluZm8iLCJvblRva2Vuc0NoYW5nZWQiLCJlIiwiZmlsdGVyQmFyIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidG9rZW5zIiwiZ2V0UGFyYW1ldGVyIiwiY2xlYXJFZGl0RmlsdGVyIiwic29tZSIsInRva2VuRGVmaW5pdGlvbiIsImtleSIsIl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zIiwiZm9ybWF0ZURhdGFUeXBlcyIsInRva2VuS2V5U3BlY2lmaWNhdGlvbiIsImtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMiLCJGaWx0ZXJVdGlscyIsImFkZEZpbHRlclZhbHVlcyIsInRyaWdnZXJTZWFyY2giLCJkYXRlVHlwZSIsIkRhdGUxIiwiZGF0ZVRpbWVPZmZzZXRUeXBlIiwiRGF0ZVRpbWVPZmZzZXQiLCJWNCIsInRpbWVPZkRheVR5cGUiLCJUaW1lT2ZEYXkiLCJlZG1UeXBlIiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlIiwicmVxdWlyZWRDb252ZXJ0ZXIiLCJpZHgiLCJwYXJzZVZhbHVlIiwic2hvd1ZhbHVlSGVscEZvcktleSIsInNob3dGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsIm9uQmVmb3JlUXVlcnlQcm9jZXNzaW5nIiwidWlNb2RlbCIsImdldE1vZGVsIiwiQnVzeUxvY2tlciIsImxvY2siLCJvbkFmdGVyUXVlcnlQcm9jZXNzaW5nIiwidW5sb2NrIiwib25DbGVhckZpbHRlcnMiLCJvblF1ZXJ5Q2hhbmdlZCIsImZpcmVGaWx0ZXJzQ2hhbmdlZCIsImNvbmRpdGlvbnNCYXNlZCIsImhhbmRsZVNob3dWYWx1ZUhlbHAiLCJldmVudCIsInJlamVjdCIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJ2YWxpZGF0ZWQiLCJjb25kaXRpb25Ub1Jlc29sdmUiLCJ3YXJuaW5nIiwicmVzb2x2ZWRWYWx1ZXMiLCJFcnJvciIsIlN0cmluZyIsIl9qc3giLCJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiY29udGV4dFBhdGgiLCJnZXRPd25lckNvbnRleHRQYXRoIiwiYXBwSWQiLCJlYXN5RmlsdGVyTGliIiwic2hvd1ZhbHVlSGVscCIsImJpbmQiLCJkYXRhRmV0Y2hlciIsInJlY29tbWVuZGVkVmFsdWVzIiwicXVlcnlDaGFuZ2VkIiwidG9rZW5zQ2hhbmdlZCIsImJlZm9yZVF1ZXJ5UHJvY2Vzc2luZyIsImFmdGVyUXVlcnlQcm9jZXNzaW5nIiwiY2xlYXJGaWx0ZXJzIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWFzeUZpbHRlckJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlLCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50LFxuXHRFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSxcblx0VG9rZW5EZWZpbml0aW9uLFxuXHRUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbixcblx0VG9rZW5UeXBlLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL0Vhc3lGaWx0ZXJCYXJDb250YWluZXJcIjtcbmltcG9ydCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZpZWxkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2RlZmluaXRpb24vRkVEZWZpbml0aW9uXCI7XG5pbXBvcnQgdHlwZSBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcixcblx0bWFwVmFsdWVMaXN0VG9Db2RlTGlzdCxcblx0cmVzb2x2ZVRva2VuVmFsdWUsXG5cdHVucmVzb2x2ZWRSZXN1bHRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbHRlckRhdGFGZXRjaGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRHJhZnRFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciwgeyB0eXBlIFZhbHVlTGlzdEluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgRGF0ZTEgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL0RhdGVcIjtcbmltcG9ydCBEYXRlVGltZU9mZnNldCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvRGF0ZVRpbWVPZmZzZXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvT0RhdGFUeXBlXCI7XG5pbXBvcnQgVGltZU9mRGF5IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9UaW1lT2ZEYXlcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29kZUxpc3QgfSBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbHRlci9FYXN5RmlsdGVyXCI7XG5cbnR5cGUgRWFzeUZpbHRlckJhclN0YXRlID0ge307XG50eXBlIEZpZWxkTWV0YWRhdGEgPSBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSAmIHsgbWF4TGVuZ3RoPzogbnVtYmVyIH07XG5cbi8qKlxuICogRGVsaXZlcnkgZm9yIGJldGEgcmVsZWFzZSBmb3IgdGhlIGVhc3kgZmlsdGVyIGZlYXR1cmUuXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuRWFzeUZpbHRlckJhclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWFzeUZpbHRlckJhciBleHRlbmRzIEJ1aWxkaW5nQmxvY2sgaW1wbGVtZW50cyBJVmlld1N0YXRlQ29udHJpYnV0b3I8RWFzeUZpbHRlckJhclN0YXRlPiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy52aWV3U3RhdGUuSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCIpXG5cdF9faW1wbGVtZW50c19fc2FwX2ZlX2NvcmVfY29udHJvbGxlcmV4dGVuc2lvbnNfdmlld1N0YXRlX0lWaWV3U3RhdGVDb250cmlidXRvciE6IGJvb2xlYW47XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhci5GaWx0ZXJCYXJBUElcIiB9KVxuXHRmaWx0ZXJCYXIhOiBzdHJpbmc7XG5cblx0QGFzc29jaWF0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmNvbnRlbnRTd2l0Y2hlci5Db250ZW50U3dpdGNoZXJcIiB9KVxuXHRjb250ZW50U3dpdGNoZXIhOiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRjb250ZW50U3dpdGNoZXJLZXk/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRjb250ZXh0UGF0aD86IHN0cmluZztcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5mZS5jb250cm9scy5lYXN5RmlsdGVyLkVhc3lGaWx0ZXJCYXJDb250YWluZXJcIiB9KVxuXHRjb250ZW50PzogRW5oYW5jZVdpdGhVSTU8RWFzeUZpbHRlckJhckNvbnRhaW5lcj47XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJNZXRhZGF0YSE6IEZpZWxkTWV0YWRhdGFbXTtcblxuXHRwcml2YXRlIGVhc3lGaWx0ZXJQYXRoPzogc3RyaW5nO1xuXG5cdHByaXZhdGUgcmVjb21tZW5kZWRRdWVyaWVzPzogc3RyaW5nW107XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BlcnRpZXMsIG90aGVycyk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0Py5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpXG5cdFx0XHQucHJlcGFyZUZlYXR1cmUoXCJNYWdpY0ZpbHRlcmluZ1wiKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJQYXRoID0gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblx0XHRcdFx0dGhpcy5jb250ZW50Py5zZXRFYXN5RmlsdGVyTGliKHRoaXMuZWFzeUZpbHRlclBhdGgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBsb2FkaW5nIEVhc3lGaWx0ZXJcIiwgZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRhc3luYyBhcHBseUxlZ2FjeVN0YXRlKFxuXHRcdGdldENvbnRyaWxTdGF0ZT86IChjb250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiBDb250cm9sU3RhdGUsXG5cdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdF9zaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW4sXG5cdFx0X3NraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9OYXZQYXJhbWV0ZXJzPy5zZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRjb25zdCBzZWxlY3RPcHRpb25zTmFtZXMgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZvckVhY2goKGZpZWxkKSA9PiB7XG5cdFx0XHRcdGlmIChzZWxlY3RPcHRpb25zTmFtZXMuaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcblx0XHRcdFx0XHRmaWVsZC5kZWZhdWx0VmFsdWUgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50IS5nZXRTZWxlY3RPcHRpb24oZmllbGQubmFtZSk/LnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcblx0XHRcdFx0XHRcdGlmIChvcHRpb24uU2lnbiA9PT0gXCJJXCIpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbi5PcHRpb24gPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IG9wdGlvbi5PcHRpb24gPT09IEZpbHRlck9wZXJhdG9yLk5CKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbi5IaWdoICE9PSBudWxsICYmIG9wdGlvbi5IaWdoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFjYy5wdXNoKHsgb3BlcmF0b3I6IG9wdGlvbi5PcHRpb24sIHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvdywgb3B0aW9uLkhpZ2hdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhY2MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogb3B0aW9uLk9wdGlvbiBhcyBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPixcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd11cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YWNjLnB1c2goeyBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd10gfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWNjO1xuXHRcdFx0XHRcdH0sIFtdIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuY29udGVudD8ucmVzZXRTdGF0ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGFwcGx5U3RhdGUoX3N0YXRlOiBFYXN5RmlsdGVyQmFyU3RhdGUsIF9vTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHJpZXZlU3RhdGUoKTogRWFzeUZpbHRlckJhclN0YXRlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Z2V0QXBwbGljYXRpb25JZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS5pZCA/PyBcIjx1bmtub3duSUQ+XCI7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgPSB0aGlzLnByZXBhcmVGaWx0ZXJCYXJNZXRhZGF0YSgpO1xuXHRcdHRoaXMucmVjb21tZW5kZWRRdWVyaWVzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8ubWFjcm9zPy5lYXN5RmlsdGVyPy5yZWNvbW1lbmRlZFF1ZXJpZXMgPz8gW107XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCkgYXMgRW5oYW5jZVdpdGhVSTU8RWFzeUZpbHRlckJhckNvbnRhaW5lcj47XG5cdFx0dGhpcy5jb250ZW50LmZpbHRlckJhck1ldGFkYXRhID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0VW5pdEZvckZpbHRlckZpZWxkKGZpZWxkOiBGaWx0ZXJGaWVsZCwgYWxsRmlsdGVyRmllbGRzOiBGaWx0ZXJGaWVsZFtdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwcm9wZXJ0eU9iamVjdCA9IGZpZWxkLmdldFRhcmdldCgpO1xuXHRcdGNvbnN0IHVuaXRBbm5vdGF0aW9uID0gcHJvcGVydHlPYmplY3QuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LklTT0N1cnJlbmN5ID8/IHByb3BlcnR5T2JqZWN0LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0O1xuXHRcdGNvbnN0IHVuaXRQcm9wZXJ0eSA9IGlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uKHVuaXRBbm5vdGF0aW9uKSA/IHVuaXRBbm5vdGF0aW9uLiR0YXJnZXQgOiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIGFsbEZpbHRlckZpZWxkcy5maW5kKChmKSA9PiBmLmdldFRhcmdldCgpID09PSB1bml0UHJvcGVydHkpPy5hbm5vdGF0aW9uUGF0aDtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlRm9yRmlsdGVyRmllbGQoXG5cdFx0ZmllbGQ6IEZpbHRlckZpZWxkLFxuXHRcdHN0YXJ0dXBQYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuXHQpOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgZGVmYXVsdFZhbHVlOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChzdGFydHVwUGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5uYW1lKSkge1xuXHRcdFx0ZGVmYXVsdFZhbHVlID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBzdGFydHVwUGFyYW1ldGVyc1tmaWVsZC5uYW1lXSBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltcInNlbGVjdGVkVmFsdWVzXCJdXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0fSBlbHNlIGlmIChmaWVsZC5pc1BhcmFtZXRlciAmJiBzdGFydHVwUGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5uYW1lLnN1YnN0cmluZygyKSkpIHtcblx0XHRcdGRlZmF1bHRWYWx1ZSA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogc3RhcnR1cFBhcmFtZXRlcnNbZmllbGQubmFtZS5zdWJzdHJpbmcoMildIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW1wic2VsZWN0ZWRWYWx1ZXNcIl1cblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHR9XG5cdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0RWRpdFN0YXRlRmlsdGVyTWV0YWRhdGEobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IEZpZWxkTWV0YWRhdGEge1xuXHRcdC8vIEFzc2VtYmxlIHRoZSBjb2RlIGxpc3QgZm9yIHRoZSBlZGl0aW5nIHN0YXR1cyBmaWx0ZXIgdmFsdWVzOlxuXHRcdGNvbnN0IHByb3BzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRpc0RyYWZ0Q29sbGFib3JhdGl2ZTogTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsKVxuXHRcdH0pLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblxuXHRcdGNvbnN0IGVkaXRpbmdTdGF0dXNDb2RlTGlzdCA9IERyYWZ0RWRpdFN0YXRlLmdldEVkaXRTdGF0ZXNDb250ZXh0KHByb3BzKVxuXHRcdFx0LmdldE9iamVjdChcIi9cIilcblx0XHRcdC5tYXAoKHN0YXRlOiB7IGlkOiBzdHJpbmc7IGRpc3BsYXk6IHN0cmluZyB9KSA9PiAoeyB2YWx1ZTogc3RhdGUuaWQsIGRlc2NyaXB0aW9uOiBzdGF0ZS5kaXNwbGF5IH0pKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdGxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiRklMVEVSQkFSX0VESVRJTkdfU1RBVFVTXCIpLFxuXHRcdFx0ZGF0YVR5cGU6IFwiRWRtLlN0cmluZ1wiLFxuXHRcdFx0ZmlsdGVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvZGVMaXN0OiBlZGl0aW5nU3RhdHVzQ29kZUxpc3QsXG5cdFx0XHR0eXBlOiBcIk1lbnVXaXRoU2luZ2xlU2VsZWN0XCJcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRUb2tlblR5cGUocHJvcDogUHJvcGVydHkpOiBUb2tlblR5cGUge1xuXHRcdGlmIChoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMocHJvcCkpIHtcblx0XHRcdHJldHVybiBcIk1lbnVXaXRoQ2hlY2tCb3hcIjtcblx0XHR9XG5cdFx0c3dpdGNoIChwcm9wLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRyZXR1cm4gXCJDYWxlbmRhclwiO1xuXHRcdFx0Y2FzZSBcIkVkbS5UaW1lT2ZEYXlcIjpcblx0XHRcdFx0cmV0dXJuIFwiVGltZVwiO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFwiVmFsdWVIZWxwXCI7XG5cdFx0fVxuXHR9XG5cblx0cHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk6IEZpZWxkTWV0YWRhdGFbXSB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpITtcblx0XHRjb25zdCBkZWZpbml0aW9uRm9yUGFnZSA9IG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/LmdldERlZmluaXRpb25Gb3JQYWdlKCk7XG5cblx0XHRpZiAoIWRlZmluaXRpb25Gb3JQYWdlKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3QgZmlsdGVyQmFyRGVmID0gZGVmaW5pdGlvbkZvclBhZ2UuZ2V0RmlsdGVyQmFyRGVmaW5pdGlvbih7fSk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gb3duZXIucHJlcHJvY2Vzc29yQ29udGV4dD8ubW9kZWxzLm1ldGFNb2RlbCBhcyBPRGF0YU1ldGFNb2RlbDtcblxuXHRcdGNvbnN0IHN0YXJ0dXBQYXJhbWV0ZXJzID0gb3duZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29tcG9uZW50RGF0YSgpPy5zdGFydHVwUGFyYW1ldGVycyA/PyB7fTtcblxuXHRcdGNvbnN0IGZpbHRlckZpZWxkcyA9IGZpbHRlckJhckRlZi5nZXRGaWx0ZXJGaWVsZHMoKTtcblx0XHRjb25zdCBub25IaWRkZW5GaWx0ZXJGaWVsZHMgPSBmaWx0ZXJGaWVsZHMuZmlsdGVyKChmaWVsZDogRmlsdGVyRmllbGQpID0+IHtcblx0XHRcdHJldHVybiAhZmllbGQuZ2V0VGFyZ2V0KCk/LmFubm90YXRpb25zPy5VST8uSGlkZGVuRmlsdGVyPy52YWx1ZU9mKCk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCByZXN1bHQgPSBub25IaWRkZW5GaWx0ZXJGaWVsZHMubWFwKChmaWVsZDogRmlsdGVyRmllbGQpOiBGaWVsZE1ldGFkYXRhID0+IHtcblx0XHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0ID0gZmllbGQuZ2V0VGFyZ2V0KCk7XG5cdFx0XHRsZXQgY29kZUxpc3Q6IENvZGVMaXN0IHwgKCgpID0+IFByb21pc2U8Q29kZUxpc3Q+KSB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMocHJvcGVydHlPYmplY3QpKSB7XG5cdFx0XHRcdGNvZGVMaXN0ID0gYXN5bmMgKCk6IFByb21pc2U8Q29kZUxpc3Q+ID0+IHRoaXMuZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShmaWVsZC5hbm5vdGF0aW9uUGF0aCEpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRuYW1lOiBmaWVsZC5hbm5vdGF0aW9uUGF0aCEsXG5cdFx0XHRcdGxhYmVsOiBmaWVsZC5sYWJlbCxcblx0XHRcdFx0ZGF0YVR5cGU6IHByb3BlcnR5T2JqZWN0LnR5cGUsXG5cdFx0XHRcdHJlcXVpcmVkOiBmaWVsZC5yZXF1aXJlZCA/PyBmYWxzZSxcblx0XHRcdFx0ZGVmYXVsdFZhbHVlOiB0aGlzLmdldERlZmF1bHRWYWx1ZUZvckZpbHRlckZpZWxkKGZpZWxkLCBzdGFydHVwUGFyYW1ldGVycyksXG5cdFx0XHRcdGZpbHRlcmFibGU6IHRydWUsXG5cdFx0XHRcdGNvZGVMaXN0OiBjb2RlTGlzdCxcblx0XHRcdFx0dHlwZTogdGhpcy5nZXRUb2tlblR5cGUocHJvcGVydHlPYmplY3QpIGFzIEV4Y2x1ZGU8VG9rZW5UeXBlLCBcIlZhbHVlSGVscFwiPixcblx0XHRcdFx0dW5pdDogdGhpcy5nZXRVbml0Rm9yRmlsdGVyRmllbGQoZmllbGQsIGZpbHRlckZpZWxkcyksXG5cdFx0XHRcdG1heExlbmd0aDogcHJvcGVydHlPYmplY3QubWF4TGVuZ3RoXG5cdFx0XHR9O1xuXHRcdH0pO1xuXG5cdFx0Ly8gW0VkaXRpbmcgU3RhdHVzXVxuXHRcdGlmIChNb2RlbEhlbHBlci5pc01ldGFQYXRoRHJhZnRTdXBwb3J0ZWQoZGVmaW5pdGlvbkZvclBhZ2UuZ2V0TWV0YVBhdGgoKSBhcyB1bmtub3duIGFzIE1ldGFQYXRoPHVua25vd24+KSkge1xuXHRcdFx0cmVzdWx0LnB1c2godGhpcy5nZXRFZGl0U3RhdGVGaWx0ZXJNZXRhZGF0YShtZXRhTW9kZWwpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0YXN5bmMgZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IFByb21pc2U8Q29kZUxpc3Q+IHtcblx0XHRjb25zdCBkZWZhdWx0VmFsdWVMaXN0ID0gYXdhaXQgdGhpcy5nZXRWYWx1ZUxpc3QocHJvcGVydHlQYXRoKTtcblxuXHRcdGlmICghZGVmYXVsdFZhbHVlTGlzdCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZhbHVlTGlzdEluZm8gPSBkZWZhdWx0VmFsdWVMaXN0LnZhbHVlTGlzdEluZm87XG5cblx0XHRjb25zdCBsaXN0QmluZGluZyA9IHZhbHVlTGlzdEluZm8uJG1vZGVsLmJpbmRMaXN0KGAvJHt2YWx1ZUxpc3RJbmZvLkNvbGxlY3Rpb25QYXRofWAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHtcblx0XHRcdCRzZWxlY3Q6IGdlbmVyYXRlU2VsZWN0UGFyYW1ldGVyKGRlZmF1bHRWYWx1ZUxpc3QpXG5cdFx0fSk7XG5cdFx0Y29uc3QgZGF0YSA9IGF3YWl0IGxpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygpO1xuXG5cdFx0Y29uc3QgZmlsdGVyR3JvdXBWYWx1ZXMgPSBkYXRhLm1hcChtYXBWYWx1ZUxpc3RUb0NvZGVMaXN0KGRlZmF1bHRWYWx1ZUxpc3QpKTtcblx0XHRjb25zdCBjb2RlTGlzdFByb3BlcnR5ID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YS5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0gcHJvcGVydHlQYXRoKTtcblx0XHRpZiAoY29kZUxpc3RQcm9wZXJ0eSkge1xuXHRcdFx0Y29kZUxpc3RQcm9wZXJ0eS5jb2RlTGlzdCA9IGZpbHRlckdyb3VwVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVyR3JvdXBWYWx1ZXM7XG5cdH1cblxuXHRhc3luYyByZXNvbHZlVG9rZW5WYWx1ZXNGb3JGaWVsZChcblx0XHRmaWVsZE5hbWU6IHN0cmluZyxcblx0XHR2YWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW11cblx0KTogUHJvbWlzZTxWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXT4ge1xuXHRcdGxldCBmaWx0ZXJlZFZhbHVlcyA9IHZhbHVlcztcblx0XHRjb25zdCBmaWVsZCA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGZpZWxkTmFtZSk7XG5cdFx0aWYgKGZpZWxkKSB7XG5cdFx0XHRjb25zdCBtYXhMZW5ndGggPSBmaWVsZC5tYXhMZW5ndGg7XG5cblx0XHRcdGlmIChtYXhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRmaWx0ZXJlZFZhbHVlcyA9IHZhbHVlc1xuXHRcdFx0XHRcdC5tYXAoKHRva2VuKSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXJlZCA9IHRva2VuLnNlbGVjdGVkVmFsdWVzLmZpbHRlcigodmFsKSA9PiB0eXBlb2YgdmFsICE9PSBcInN0cmluZ1wiIHx8IHZhbC5sZW5ndGggPD0gbWF4TGVuZ3RoKTtcblx0XHRcdFx0XHRcdHJldHVybiBmaWx0ZXJlZC5sZW5ndGggPiAwID8geyAuLi50b2tlbiwgc2VsZWN0ZWRWYWx1ZXM6IGZpbHRlcmVkIH0gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0XHRcdGlmIChmaWx0ZXJlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IGF3YWl0IHRoaXMuZ2V0VmFsdWVMaXN0KGZpZWxkLm5hbWUpO1xuXG5cdFx0XHRpZiAodmFsdWVMaXN0ICYmIFZhbHVlTGlzdEhlbHBlci5pc1ZhbHVlTGlzdFNlYXJjaGFibGUoZmllbGQubmFtZSwgdmFsdWVMaXN0KSkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZFRva2VuVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoZmlsdGVyZWRWYWx1ZXMubWFwKGFzeW5jICh2YWx1ZSkgPT4gcmVzb2x2ZVRva2VuVmFsdWUodmFsdWVMaXN0LCB2YWx1ZSkpKTtcblx0XHRcdFx0cmV0dXJuIHJlc29sdmVkVG9rZW5WYWx1ZXMuZmxhdCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJldHVybiBvcmlnaW5hbCB2YWx1ZXMgY29udmVydGVkIHRvIHRoZSBleHBlY3RlZCBmb3JtYXRcblx0XHRyZXR1cm4gdW5yZXNvbHZlZFJlc3VsdChmaWx0ZXJlZFZhbHVlcyk7XG5cdH1cblxuXHRhc3luYyBnZXRWYWx1ZUxpc3QocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFZhbHVlTGlzdEluZm8gfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpITtcblx0XHRjb25zdCB2YWx1ZUxpc3RzID0gYXdhaXQgVmFsdWVMaXN0SGVscGVyLmdldFZhbHVlTGlzdEluZm8odW5kZWZpbmVkLCBwcm9wZXJ0eVBhdGgsIHVuZGVmaW5lZCwgbWV0YU1vZGVsKTtcblx0XHRyZXR1cm4gdmFsdWVMaXN0c1swXTtcblx0fVxuXG5cdGFzeW5jIG9uVG9rZW5zQ2hhbmdlZChlOiBVSTVFdmVudDx7IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRjb25zdCB0b2tlbnMgPSBlLmdldFBhcmFtZXRlcihcInRva2Vuc1wiKTtcblx0XHRjb25zdCBjbGVhckVkaXRGaWx0ZXIgPSB0b2tlbnMuc29tZSgodG9rZW5EZWZpbml0aW9uKSA9PiB0b2tlbkRlZmluaXRpb24ua2V5ID09PSBcIiRlZGl0U3RhdGVcIik7XG5cdFx0YXdhaXQgZmlsdGVyQmFyQVBJLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgeyBjbGVhckVkaXRGaWx0ZXIgfSk7XG5cdFx0dGhpcy5mb3JtYXRlRGF0YVR5cGVzKHRva2Vucyk7XG5cblx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuXHRcdFx0aWYgKHRva2VuLmtleSA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0Ly8gY29udmVydCB0aGUgJGVkaXRTdGF0ZSBmaWx0ZXIgY29uZGl0aW9uXG5cdFx0XHRcdGZvciAoY29uc3QgdG9rZW5LZXlTcGVjaWZpY2F0aW9uIG9mIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdFx0XHRhd2FpdCBGaWx0ZXJVdGlscy5hZGRGaWx0ZXJWYWx1ZXMoXG5cdFx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkuY29udGVudCxcblx0XHRcdFx0XHRcdHRva2VuLmtleSxcblx0XHRcdFx0XHRcdFwiRFJBRlRfRURJVF9TVEFURVwiLFxuXHRcdFx0XHRcdFx0dG9rZW5LZXlTcGVjaWZpY2F0aW9uLnNlbGVjdGVkVmFsdWVzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmllbGQgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdG9rZW4ua2V5KSE7XG5cdFx0XHRcdGZvciAoY29uc3QgdG9rZW5LZXlTcGVjaWZpY2F0aW9uIG9mIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdFx0XHRjb25zdCB7IG9wZXJhdG9yLCBzZWxlY3RlZFZhbHVlcyB9ID0gdG9rZW5LZXlTcGVjaWZpY2F0aW9uO1xuXHRcdFx0XHRcdGF3YWl0IEZpbHRlclV0aWxzLmFkZEZpbHRlclZhbHVlcyhmaWx0ZXJCYXJBUEkuY29udGVudCwgZmllbGQubmFtZSwgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHR9XG5cblx0Ly9XZSBuZWVkIHRoZSBiZWxvdyBmdW5jdGlvbiBzbyB0aGF0IHRoZSBkYXRlIG9iamVjdHMgYW5kIGRhdGVUaW1lT2Zmc2V0cyB3b3VsZCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHR5cGUgYXMgdGhlIGRhdGUgb2JqZWN0IGlzIG5vdCBhIHZhbGlkIHR5cGUgaW4gVjQgd29ybGRcblx0Zm9ybWF0ZURhdGFUeXBlcyh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgZGF0ZVR5cGUgPSBuZXcgRGF0ZTEoKSxcblx0XHRcdGRhdGVUaW1lT2Zmc2V0VHlwZSA9IG5ldyBEYXRlVGltZU9mZnNldCh1bmRlZmluZWQsIHsgVjQ6IHRydWUgfSksXG5cdFx0XHR0aW1lT2ZEYXlUeXBlID0gbmV3IFRpbWVPZkRheSgpO1xuXHRcdHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0Y29uc3QgZWRtVHlwZSA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZGF0YSkgPT4gZGF0YS5uYW1lID09PSB0b2tlbi5rZXkpPy5kYXRhVHlwZTtcblx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoa2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlKSA9PiB7XG5cdFx0XHRcdGxldCByZXF1aXJlZENvbnZlcnRlcjogT0RhdGFUeXBlO1xuXHRcdFx0XHRzd2l0Y2ggKGVkbVR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0XHRcdHJlcXVpcmVkQ29udmVydGVyID0gZGF0ZVR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSB0aW1lT2ZEYXlUeXBlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSBkYXRlVGltZU9mZnNldFR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZS5zZWxlY3RlZFZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgaWR4KSA9PiB7XG5cdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlLnNlbGVjdGVkVmFsdWVzW2lkeF0gPSByZXF1aXJlZENvbnZlcnRlci5wYXJzZVZhbHVlKHZhbHVlLCBcIm9iamVjdFwiKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIHNob3dWYWx1ZUhlbHBGb3JLZXkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgZmllbGQgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGYpID0+IGYubmFtZSA9PT0ga2V5KSE7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpbHRlckJhcikgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0YXdhaXQgZmlsdGVyQmFyQVBJLnNob3dGaWx0ZXJGaWVsZChmaWVsZC5uYW1lKTtcblx0XHRyZXR1cm4gZmlsdGVyQmFyQVBJLm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChmaWVsZC5uYW1lKTtcblx0fVxuXG5cdG9uQmVmb3JlUXVlcnlQcm9jZXNzaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IHVpTW9kZWwgPSB0aGlzLmdldE1vZGVsKFwidWlcIikgYXMgSlNPTk1vZGVsO1xuXHRcdEJ1c3lMb2NrZXIubG9jayh1aU1vZGVsKTtcblx0fVxuXG5cdG9uQWZ0ZXJRdWVyeVByb2Nlc3NpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0QnVzeUxvY2tlci51bmxvY2sodWlNb2RlbCk7XG5cdH1cblxuXHRhc3luYyBvbkNsZWFyRmlsdGVycygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBFbXB0eSBpbnB1dDogY2xlYXIgdGhlIGZpbHRlcnMgYW5kIHJlZnJlc2ggdGhlIGxpc3Rcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyKTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHR9XG5cblx0b25RdWVyeUNoYW5nZWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpbHRlckJhcikgYXMgRmlsdGVyQmFyO1xuXHRcdGZpbHRlckJhci5maXJlRmlsdGVyc0NoYW5nZWQoeyBjb25kaXRpb25zQmFzZWQ6IHRydWUgfSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGhhbmRsZVNob3dWYWx1ZUhlbHAoZXZlbnQ6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdGNvbnN0IHJlc29sdmUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNvbHZlXCIpO1xuXHRcdGNvbnN0IHJlamVjdCA9IGV2ZW50LmdldFBhcmFtZXRlcihcInJlamVjdFwiKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25zID0gYXdhaXQgdGhpcy5zaG93VmFsdWVIZWxwRm9yS2V5KGtleSk7XG5cblx0XHRcdGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gY29uZGl0aW9ucy5tYXAoYXN5bmMgKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBvcGVyYXRvciA9IGNvbmRpdGlvbi5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcjtcblxuXHRcdFx0XHRpZiAoY29uZGl0aW9uLnZhbGlkYXRlZCA9PT0gXCJOb3RWYWxpZGF0ZWRcIikge1xuXHRcdFx0XHRcdC8vIG5vdCB2YWxpZGF0ZWQ6IHRoZSBjb25kaXRpb24gb25seSBoYXMgdmFsdWVzIHdpdGhvdXQgZGVzY3JpcHRpb24gLSB0cnkgdG8gZ2V0IHRoZSBkZXNjcmlwdGlvbiB1c2luZyB0aGUgZGF0YSBmZXRjaGVyIG1lY2hhbmlzbS5cblx0XHRcdFx0XHQvLyBgY29uZGl0aW9uLnZhbHVlc2AgaXMgYSBzaW5nbGUgdmFsdWUgYFt2YWx1ZV1gIChvciBgW2xvd2VyIGJvdW5kLCB1cHBlciBib3VuZF1gIGZvciBCVC9OQiBvcGVyYXRvcnMpLlxuXHRcdFx0XHRcdGNvbnN0IGNvbmRpdGlvblRvUmVzb2x2ZTogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHRcdFx0XHRcdFx0b3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5OQlxuXHRcdFx0XHRcdFx0XHQ/IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbY29uZGl0aW9uLnZhbHVlc1swXSwgY29uZGl0aW9uLnZhbHVlc1sxXV0gfVxuXHRcdFx0XHRcdFx0XHQ6IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbY29uZGl0aW9uLnZhbHVlc1swXV0gfTtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVUb2tlblZhbHVlc0ZvckZpZWxkKGtleSwgW2NvbmRpdGlvblRvUmVzb2x2ZV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBGaWx0ZXJPcGVyYXRvci5CVCAmJiBvcGVyYXRvciAhPT0gRmlsdGVyT3BlcmF0b3IuTkIpIHtcblx0XHRcdFx0XHQvLyB2YWxpZGF0ZWQ6IGJvdGggdmFsdWUgYW5kIGRlc2NyaXB0aW9uIGFyZSBhdmFpbGFibGUgLSBkaXJlY3RseSBtYXAgdGhlbSB0byB0aGUgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gYGNvbmRpdGlvbi52YWx1ZXNgIGlzIGEgdHVwbGUgb2YgYFt2YWx1ZSwgZGVzY3JpcHRpb24/XWBcblx0XHRcdFx0XHRjb25zdCBbdmFsdWUsIGRlc2NyaXB0aW9uXSA9IGNvbmRpdGlvbi52YWx1ZXMgYXMgW3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sIHN0cmluZyB8IHVuZGVmaW5lZF07XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbeyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFt7IHZhbHVlLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPz8gdmFsdWUgfV0gfV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHNob3VsZCBub3Qgb2NjdXI6IEJUL05CIGFyZSBleHBlY3RlZCB0byBiZSBcIk5vdFZhbGlkYXRlZFwiIGNvbmRpdGlvbnNcblx0XHRcdFx0XHRMb2cud2FybmluZyhgVW5leHBlY3RlZCBjb25kaXRpb24gZm9yIGZpZWxkICR7a2V5fTogb3BlcmF0b3IgJHtvcGVyYXRvcn0gd2l0aCB2YWx1ZXMgJHtjb25kaXRpb24udmFsdWVzfS5gKTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IHJlc29sdmVkVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc2VsZWN0ZWRWYWx1ZXMpO1xuXHRcdFx0cmVzb2x2ZShyZXNvbHZlZFZhbHVlcy5mbGF0KCkpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRyZWplY3QoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RWFzeUZpbHRlckJhckNvbnRhaW5lclxuXHRcdFx0XHRjb250ZXh0UGF0aD17dGhpcy5nZXRPd25lckNvbnRleHRQYXRoKCl9XG5cdFx0XHRcdGFwcElkPXt0aGlzLmdldEFwcGxpY2F0aW9uSWQoKX1cblx0XHRcdFx0ZmlsdGVyQmFyTWV0YWRhdGE9e3RoaXMuZmlsdGVyQmFyTWV0YWRhdGF9XG5cdFx0XHRcdGVhc3lGaWx0ZXJMaWI9e3RoaXMuZWFzeUZpbHRlclBhdGh9XG5cdFx0XHRcdHNob3dWYWx1ZUhlbHA9e3RoaXMuaGFuZGxlU2hvd1ZhbHVlSGVscC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRkYXRhRmV0Y2hlcj17dGhpcy5yZXNvbHZlVG9rZW5WYWx1ZXNGb3JGaWVsZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFF1ZXJpZXN9XG5cdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17dGhpcy5vblF1ZXJ5Q2hhbmdlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHR0b2tlbnNDaGFuZ2VkPXt0aGlzLm9uVG9rZW5zQ2hhbmdlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRiZWZvcmVRdWVyeVByb2Nlc3Npbmc9e3RoaXMub25CZWZvcmVRdWVyeVByb2Nlc3NpbmcuYmluZCh0aGlzKX1cblx0XHRcdFx0YWZ0ZXJRdWVyeVByb2Nlc3Npbmc9e3RoaXMub25BZnRlclF1ZXJ5UHJvY2Vzc2luZy5iaW5kKHRoaXMpfVxuXHRcdFx0XHRjbGVhckZpbHRlcnM9e3RoaXMub25DbGVhckZpbHRlcnMuYmluZCh0aGlzKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBa0RBO0FBQ0E7QUFDQTtFQUZBLElBSXFCQSxhQUFhLElBQUFDLElBQUEsR0FEakNDLGNBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFBQyxLQUFB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
|