@sapui5/sap.fe.macros 1.141.2 → 1.143.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 +4 -10
- package/src/sap/fe/macros/Breadcrumbs.tsx +2 -8
- package/src/sap/fe/macros/Chart.js +34 -23
- package/src/sap/fe/macros/Chart.tsx +25 -11
- package/src/sap/fe/macros/CollaborativeDraftHandler.js +47 -36
- package/src/sap/fe/macros/CollaborativeDraftHandler.tsx +50 -31
- package/src/sap/fe/macros/CollectionBindingInfo.js +8 -2
- package/src/sap/fe/macros/CollectionBindingInfo.ts +11 -6
- package/src/sap/fe/macros/CommonHelper.js +14 -24
- package/src/sap/fe/macros/CommonHelper.ts +18 -25
- package/src/sap/fe/macros/ConditionalSwitch.js +1 -2
- package/src/sap/fe/macros/ConditionalSwitch.tsx +0 -1
- package/src/sap/fe/macros/ConditionalSwitchProperty.js +1 -3
- package/src/sap/fe/macros/ConditionalSwitchProperty.tsx +0 -2
- package/src/sap/fe/macros/Field.js +34 -17
- package/src/sap/fe/macros/Field.ts +64 -32
- package/src/sap/fe/macros/FooterContent.js +7 -3
- package/src/sap/fe/macros/FooterContent.tsx +8 -13
- package/src/sap/fe/macros/KPITag.js +6 -6
- package/src/sap/fe/macros/KPITag.tsx +8 -6
- package/src/sap/fe/macros/MacroAPI.js +4 -3
- package/src/sap/fe/macros/MacroAPI.ts +3 -3
- package/src/sap/fe/macros/MessageButton.js +4 -3
- package/src/sap/fe/macros/MessageButton.tsx +7 -3
- package/src/sap/fe/macros/MicroChart.js +12 -7
- package/src/sap/fe/macros/MicroChart.tsx +9 -3
- package/src/sap/fe/macros/MultiValueField.js +22 -36
- package/src/sap/fe/macros/MultiValueField.tsx +34 -66
- package/src/sap/fe/macros/RichTextEditor.js +3 -4
- package/src/sap/fe/macros/RichTextEditor.tsx +2 -3
- package/src/sap/fe/macros/Share.js +7 -7
- package/src/sap/fe/macros/Share.tsx +9 -6
- package/src/sap/fe/macros/Status.js +39 -11
- package/src/sap/fe/macros/Status.tsx +25 -5
- package/src/sap/fe/macros/ValueHelp.js +5 -2
- package/src/sap/fe/macros/ValueHelp.tsx +5 -0
- package/src/sap/fe/macros/ai/EasyFillDialog.js +2 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +1 -0
- package/src/sap/fe/macros/ai/EasyFilterBar.js +7 -34
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +6 -35
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +31 -7
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +33 -6
- package/src/sap/fe/macros/ai/SummarizationButton.js +6 -4
- package/src/sap/fe/macros/ai/SummarizationButton.tsx +5 -3
- package/src/sap/fe/macros/chart/Action.js +25 -2
- package/src/sap/fe/macros/chart/Action.ts +13 -0
- package/src/sap/fe/macros/chart/ActionGroup.js +25 -2
- package/src/sap/fe/macros/chart/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/chart/ChartDelegate.js +29 -8
- package/src/sap/fe/macros/chart/ChartDelegate.ts +46 -14
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +58 -12
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +75 -13
- package/src/sap/fe/macros/chart/OverflowGroup.js +62 -0
- package/src/sap/fe/macros/chart/OverflowGroup.ts +22 -0
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +7 -7
- package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +3 -2
- package/src/sap/fe/macros/controls/FileWrapper.js +11 -5
- package/src/sap/fe/macros/controls/FileWrapper.ts +10 -4
- package/src/sap/fe/macros/controls/FilterBar.js +39 -3
- package/src/sap/fe/macros/controls/FilterBar.ts +42 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +3 -1
- package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -0
- package/src/sap/fe/macros/controls/RadioButtons.js +18 -5
- package/src/sap/fe/macros/controls/RadioButtons.tsx +10 -1
- package/src/sap/fe/macros/coreUI/CreateDialog.js +3 -3
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +2 -2
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +40 -12
- package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -9
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +4 -2
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +3 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +4 -4
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +2 -2
- package/src/sap/fe/macros/field/FieldHelper.js +4 -3
- package/src/sap/fe/macros/field/FieldHelper.ts +7 -1
- package/src/sap/fe/macros/field/FieldRuntime.js +44 -9
- package/src/sap/fe/macros/field/FieldRuntime.ts +72 -8
- package/src/sap/fe/macros/field/FieldRuntimeHelper.js +3 -34
- package/src/sap/fe/macros/field/FieldRuntimeHelper.ts +28 -53
- package/src/sap/fe/macros/field/FieldTemplating.js +5 -4
- package/src/sap/fe/macros/field/FieldTemplating.ts +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +6 -4
- package/src/sap/fe/macros/filter/FilterFieldHelper.ts +7 -2
- package/src/sap/fe/macros/filter/FilterUtils.js +130 -40
- package/src/sap/fe/macros/filter/FilterUtils.ts +167 -45
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.js +2 -2
- package/src/sap/fe/macros/filterBar/ExtendedSemanticDateOperators.ts +1 -1
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +4 -3
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +19 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +15 -9
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +36 -17
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.js +21 -10
- package/src/sap/fe/macros/filterBar/FilterBarDelegate.ts +81 -63
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.js +376 -0
- package/src/sap/fe/macros/filterBar/UOMValidationDelegate.ts +463 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +4 -3
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +3 -2
- package/src/sap/fe/macros/form/Form.block.js +27 -2
- package/src/sap/fe/macros/form/Form.block.ts +31 -11
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -3
- package/src/sap/fe/macros/form/FormContainer.block.js +110 -63
- package/src/sap/fe/macros/form/FormContainer.block.ts +121 -64
- package/src/sap/fe/macros/formatters/TableFormatter.js +13 -10
- package/src/sap/fe/macros/formatters/TableFormatter.ts +11 -9
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.js +6 -4
- package/src/sap/fe/macros/formatters/VisualFilterFormatter.ts +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +5 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +4 -4
- package/src/sap/fe/macros/insights/InsightsService.js +3 -2
- package/src/sap/fe/macros/insights/InsightsService.ts +2 -1
- package/src/sap/fe/macros/internal/DataPoint.js +7 -8
- package/src/sap/fe/macros/internal/DataPoint.tsx +6 -9
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +8 -6
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +7 -8
- package/src/sap/fe/macros/internal/field/EditStyle.js +9 -20
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +17 -41
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.js +2 -2
- package/src/sap/fe/macros/internal/field/FieldBlockStructure.tsx +1 -1
- package/src/sap/fe/macros/internal/field/FieldStructure.js +1 -2
- package/src/sap/fe/macros/internal/field/FieldStructure.tsx +0 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +7 -7
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +17 -11
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +6 -2
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +5 -1
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.js +9 -6
- package/src/sap/fe/macros/internal/valuehelp/AdditionalValueFormatter.ts +7 -5
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +6 -6
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +5 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +2 -1
- package/src/sap/fe/macros/library.js +5 -6
- package/src/sap/fe/macros/{library.ts → library.tsx} +3 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +15 -5
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +21 -5
- package/src/sap/fe/macros/messagebundle.properties +13 -5
- package/src/sap/fe/macros/messagebundle_ar.properties +12 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cnr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +11 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +12 -3
- package/src/sap/fe/macros/messagebundle_da.properties +12 -3
- package/src/sap/fe/macros/messagebundle_de.properties +16 -7
- package/src/sap/fe/macros/messagebundle_el.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_GB.properties +13 -4
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_es.properties +12 -3
- package/src/sap/fe/macros/messagebundle_es_MX.properties +12 -3
- package/src/sap/fe/macros/messagebundle_et.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hi.properties +12 -3
- package/src/sap/fe/macros/messagebundle_hr.properties +13 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +12 -3
- package/src/sap/fe/macros/messagebundle_id.properties +18 -9
- package/src/sap/fe/macros/messagebundle_it.properties +12 -3
- package/src/sap/fe/macros/messagebundle_iw.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +12 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +11 -2
- package/src/sap/fe/macros/messagebundle_ko.properties +13 -4
- package/src/sap/fe/macros/messagebundle_lt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_lv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +12 -3
- package/src/sap/fe/macros/messagebundle_nl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_no.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pl.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt.properties +12 -3
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -3
- package/src/sap/fe/macros/messagebundle_ro.properties +13 -4
- package/src/sap/fe/macros/messagebundle_ru.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sh.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +13 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +12 -3
- package/src/sap/fe/macros/messagebundle_th.properties +11 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +12 -3
- package/src/sap/fe/macros/messagebundle_uk.properties +12 -3
- package/src/sap/fe/macros/messagebundle_vi.properties +13 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +12 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -3
- package/src/sap/fe/macros/messages/MessageButton.js +21 -12
- package/src/sap/fe/macros/messages/MessageButton.ts +21 -11
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.js +7 -3
- package/src/sap/fe/macros/multivaluefield/MultiValueFieldDelegate.ts +8 -2
- package/src/sap/fe/macros/quickView/QuickView.js +5 -4
- package/src/sap/fe/macros/quickView/QuickView.tsx +10 -3
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.js +2 -2
- package/src/sap/fe/macros/richtexteditor/ButtonGroup.ts +2 -2
- package/src/sap/fe/macros/table/Action.js +21 -5
- package/src/sap/fe/macros/table/Action.ts +14 -4
- package/src/sap/fe/macros/table/ActionGroup.js +15 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +8 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionOverride.js +14 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +7 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +16 -2
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +15 -0
- package/src/sap/fe/macros/table/Column.js +3 -2
- package/src/sap/fe/macros/table/Column.ts +1 -1
- package/src/sap/fe/macros/table/MdcTableTemplate.js +96 -18
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +136 -17
- package/src/sap/fe/macros/table/OverflowGroups.js +59 -0
- package/src/sap/fe/macros/table/OverflowGroups.ts +27 -0
- package/src/sap/fe/macros/table/Table.block.js +74 -30
- package/src/sap/fe/macros/table/Table.block.tsx +77 -14
- package/src/sap/fe/macros/table/TableAPI.js +175 -132
- package/src/sap/fe/macros/table/TableAPI.ts +67 -30
- package/src/sap/fe/macros/table/TableDefinition.js +20 -3
- package/src/sap/fe/macros/table/TableDefinition.ts +18 -2
- package/src/sap/fe/macros/table/TableEventHandlerProvider.js +6 -3
- package/src/sap/fe/macros/table/TableEventHandlerProvider.ts +12 -9
- package/src/sap/fe/macros/table/TableHelper.js +5 -2
- package/src/sap/fe/macros/table/TableHelper.ts +5 -2
- package/src/sap/fe/macros/table/TableRuntime.js +25 -13
- package/src/sap/fe/macros/table/TableRuntime.ts +31 -17
- package/src/sap/fe/macros/table/TableSizeHelper.js +4 -4
- package/src/sap/fe/macros/table/TableSizeHelper.ts +6 -11
- package/src/sap/fe/macros/table/Utils.js +9 -3
- package/src/sap/fe/macros/table/Utils.ts +14 -8
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +72 -29
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +114 -123
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +41 -15
- package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +41 -22
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +15 -6
- package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +14 -5
- package/src/sap/fe/macros/table/massEdit/MassEditField.js +1 -1
- package/src/sap/fe/macros/table/massEdit/MassEditField.tsx +3 -6
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -3
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +3 -2
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.js +42 -14
- package/src/sap/fe/macros/table/mixin/EmptyRowsHandler.ts +49 -19
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.js +7 -9
- package/src/sap/fe/macros/table/mixin/TableAPIStateHandler.ts +7 -8
- package/src/sap/fe/macros/table/mixin/TableExport.js +1 -1
- package/src/sap/fe/macros/table/mixin/TableExport.ts +3 -3
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +3 -4
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +2 -3
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.js +5 -4
- package/src/sap/fe/macros/table/uploadTable/UploadTableRuntime.ts +6 -3
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +17 -10
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +24 -9
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +4 -4
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.ts +3 -3
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +20 -2
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +28 -6
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +6 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +4 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.js +3 -3
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveCharts.tsx +10 -4
- package/src/sap/fe/macros/visualfilters/fragments/InteractiveDonutChart.fragment.xml +1 -1
|
@@ -148,6 +148,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/buildingBlocks/templat
|
|
|
148
148
|
* Defines the layout to be used within the form.
|
|
149
149
|
* It defaults to the ColumnLayout, but you can also use a ResponsiveGridLayout.
|
|
150
150
|
* All the properties of the ResponsiveGridLayout can be added to the configuration.
|
|
151
|
+
* @public
|
|
151
152
|
*/
|
|
152
153
|
_initializerDefineProperty(_this, "layout", _descriptor14, _this);
|
|
153
154
|
if (_this.metaPath && _this.contextPath && (_this.formContainers === undefined || _this.formContainers === null)) {
|
|
@@ -189,6 +190,26 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/buildingBlocks/templat
|
|
|
189
190
|
} else {
|
|
190
191
|
_this.facetType = _this.metaPath.getObject()?.$Type;
|
|
191
192
|
}
|
|
193
|
+
if (_this.metaPath && _this.contextPath) {
|
|
194
|
+
const oContextObjectPath = getInvolvedDataModelObjects(_this.metaPath, _this.contextPath);
|
|
195
|
+
const oConverterContext = _this.getConverterContext(oContextObjectPath, _this.contextPath.getPath(), mSettings, {});
|
|
196
|
+
if (oContextObjectPath.targetObject) {
|
|
197
|
+
const sections = oConverterContext.getManifestWrapper().getSections();
|
|
198
|
+
let targetLayout;
|
|
199
|
+
if (oContextObjectPath.targetObject.ID && sections[oContextObjectPath.targetObject.ID.toString()] !== undefined) {
|
|
200
|
+
targetLayout = sections[oContextObjectPath.targetObject.ID.toString()].layout;
|
|
201
|
+
}
|
|
202
|
+
if (!targetLayout) {
|
|
203
|
+
const manifestFormConfiguration = oConverterContext.getManifestControlConfiguration(oConverterContext.getRelativeAnnotationPath(oContextObjectPath.targetObject?.fullyQualifiedName ?? "", oContextObjectPath.targetEntityType));
|
|
204
|
+
if (manifestFormConfiguration?.layout) {
|
|
205
|
+
targetLayout = manifestFormConfiguration.layout;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (targetLayout) {
|
|
209
|
+
_this.layout = targetLayout;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
192
213
|
if (!_this.isPublic) {
|
|
193
214
|
_this._apiId = _this.createId("Form");
|
|
194
215
|
_this._contentId = _this.id;
|
|
@@ -231,7 +252,11 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/buildingBlocks/templat
|
|
|
231
252
|
}
|
|
232
253
|
const titleLevel = FormHelper.getFormContainerTitleLevel(this.title, this.titleLevel);
|
|
233
254
|
const title = this.useFormContainerLabels && facet.Label ? getExpressionFromAnnotation(facet.Label) : "";
|
|
234
|
-
|
|
255
|
+
|
|
256
|
+
// Enhance: generate a stable form container id whenever we have a derived idPart even if this.id is undefined.
|
|
257
|
+
// Previous logic only generated when (implicitly) guarding by one condition; now we allow fallback to idPart.
|
|
258
|
+
// We still protect getFormContainerID from being called with an undefined idPart.
|
|
259
|
+
const id = (this.id !== undefined || idPart) && idPart ? getFormContainerID(idPart) : undefined;
|
|
235
260
|
return xml`
|
|
236
261
|
<macro:FormContainer
|
|
237
262
|
xmlns:macro="sap.fe.macros"
|
|
@@ -490,4 +515,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/buildingBlocks/templat
|
|
|
490
515
|
_exports = FormBlock;
|
|
491
516
|
return _exports;
|
|
492
517
|
}, false);
|
|
493
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJyZXR1cm5UeXBlcyIsIl9kZWMyIiwiYmxvY2tBdHRyaWJ1dGUiLCJ0eXBlIiwiaXNQdWJsaWMiLCJyZXF1aXJlZCIsIl9kZWMzIiwiZXhwZWN0ZWRUeXBlcyIsIl9kZWM0IiwiZXhwZWN0ZWRBbm5vdGF0aW9uVHlwZXMiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiYmxvY2tFdmVudCIsIl9kZWMxNCIsImJsb2NrQWdncmVnYXRpb24iLCJzbG90IiwiaXNEZWZhdWx0IiwiX2RlYzE1IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrVGVtcGxhdCIsInByb3BzIiwiY29uZmlndXJhdGlvbiIsIm1TZXR0aW5ncyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJfZGVzY3JpcHRvcjEwIiwiX2Rlc2NyaXB0b3IxMSIsIl9kZXNjcmlwdG9yMTIiLCJfZGVzY3JpcHRvcjEzIiwiX2Rlc2NyaXB0b3IxNCIsIm1ldGFQYXRoIiwiY29udGV4dFBhdGgiLCJmb3JtQ29udGFpbmVycyIsInVuZGVmaW5lZCIsIm9Db250ZXh0T2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm1FeHRyYVNldHRpbmdzIiwib0ZhY2V0RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsImhhc0ZpZWxkR3JvdXAiLCIkVHlwZSIsIkxhYmVsIiwiVGFyZ2V0IiwiJHRhcmdldCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInBhdGgiLCJ0ZXJtIiwidmFsdWUiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiYW5ub3RhdGlvbnMiLCJmb3JtRWxlbWVudHMiLCJmaWVsZHMiLCJvQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvRm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImlzVmlzaWJsZSIsImFubm90YXRpb25QYXRoIiwiZ2V0UGF0aCIsInVzZUZvcm1Db250YWluZXJMYWJlbHMiLCJmYWNldFR5cGUiLCJnZXRPYmplY3QiLCJfYXBpSWQiLCJjcmVhdGVJZCIsIl9jb250ZW50SWQiLCJpZCIsImRpc3BsYXlNb2RlIiwiX2VkaXRhYmxlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJlcXVhbCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiVUkiLCJJc0VkaXRhYmxlIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldERhdGFGaWVsZENvbGxlY3Rpb24iLCJmb3JtQ29udGFpbmVyIiwiZmFjZXRDb250ZXh0IiwiZmFjZXQiLCJuYXZpZ2F0aW9uUGF0aCIsImlkUGFydCIsIkFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImNvbnRleHRQYXRoUGF0aCIsImZhY2V0UGF0aCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJjaGFyQXQiLCJzbGljZSIsInRpdGxlTGV2ZWwiLCJGb3JtSGVscGVyIiwiZ2V0Rm9ybUNvbnRhaW5lclRpdGxlTGV2ZWwiLCJ0aXRsZSIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldEZvcm1Db250YWluZXJJRCIsInhtbCIsImF0dHIiLCJlbnRpdHlTZXQiLCJvbkNoYW5nZSIsImFjdGlvbnMiLCJ1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyIsImFubm90YXRpb25IaWRkZW4iLCJnZXRGb3JtQ29udGFpbmVycyIsImluY2x1ZGVzIiwibWFwIiwiZm9ybUNvbnRhaW5lcklkeCIsImdldE1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc1JlZmVyZW5jZUZhY2V0UGFydE9mUHJldmlldyIsInBhcnRPZlByZXZpZXciLCIkQW5ub3RhdGlvblBhdGgiLCJjaGVja0lmVGV4dEFyZWFJc0Fsb25lIiwiZmllbGRHcm91cCIsImlkZW50aWZpY2F0aW9uIiwiaGFzRmllbGRHcm91cFRhcmdldCIsImhhc0lkZW50aWZpY2F0aW9uVGFyZ2V0IiwiRGF0YSIsIlZhbHVlIiwiTXVsdGlMaW5lVGV4dCIsInZhbHVlT2YiLCJnZXRMYXlvdXRJbmZvcm1hdGlvbiIsImlzVGV4dEFyZWFBbG9uZSIsImxheW91dCIsImFkanVzdExhYmVsU3BhbiIsImJyZWFrcG9pbnRMIiwiYnJlYWtwb2ludE0iLCJicmVha3BvaW50WEwiLCJjb2x1bW5zTCIsImNvbHVtbnNNIiwiY29sdW1uc1hMIiwiZW1wdHlTcGFuTCIsImVtcHR5U3Bhbk0iLCJlbXB0eVNwYW5TIiwiZW1wdHlTcGFuWEwiLCJsYWJlbFNwYW5MIiwibGFiZWxTcGFuTSIsImxhYmVsU3BhblMiLCJsYWJlbFNwYW5YTCIsInNpbmdsZUNvbnRhaW5lckZ1bGxTaXplIiwiYmFja2dyb3VuZERlc2lnbiIsImxhYmVsQ2VsbHNMYXJnZSIsImVtcHR5Q2VsbHNMYXJnZSIsImdldFRlbXBsYXRlIiwib25DaGFuZ2VTdHIiLCJyZXBsYWNlIiwibWV0YVBhdGhQYXRoIiwiYXJpYUxhYmVsbGVkQnkiLCJhZGRDb25kaXRpb25hbGx5IiwiQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiVGl0bGVMZXZlbCIsIkF1dG8iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZvcm0uYmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRmFjZXQsXG5cdERhdGFGaWVsZCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cFR5cGUsXG5cdElkZW50aWZpY2F0aW9uLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBpZkVsc2UsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7XG5cdGJsb2NrQWdncmVnYXRpb24sXG5cdGJsb2NrQXR0cmlidXRlLFxuXHRibG9ja0V2ZW50LFxuXHRkZWZpbmVCdWlsZGluZ0Jsb2NrXG59IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IHhtbCB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB7IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgaGFzRmllbGRHcm91cFRhcmdldCwgaGFzSWRlbnRpZmljYXRpb25UYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgRm9ybUNvbnRhaW5lciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBjcmVhdGVGb3JtRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBnZXRGb3JtQ29udGFpbmVySUQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgRm9ybUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1IZWxwZXJcIjtcbmltcG9ydCB7IFRpdGxlTGV2ZWwgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyAkQ29sdW1uTGF5b3V0U2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL2xheW91dC9mb3JtL0NvbHVtbkxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyAkUmVzcG9uc2l2ZUdyaWRMYXlvdXRTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvbGF5b3V0L2Zvcm0vUmVzcG9uc2l2ZUdyaWRMYXlvdXRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgQW5ub3RhdGlvbkhlbHBlciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0Fubm90YXRpb25IZWxwZXJcIjtcblxudHlwZSBDb2x1bW5MYXlvdXQgPSAkQ29sdW1uTGF5b3V0U2V0dGluZ3MgJiB7XG5cdHR5cGU6IFwiQ29sdW1uTGF5b3V0XCI7XG59O1xudHlwZSBSZXNwb25zaXZlR3JpZExheW91dCA9ICRSZXNwb25zaXZlR3JpZExheW91dFNldHRpbmdzICYge1xuXHR0eXBlOiBcIlJlc3BvbnNpdmVHcmlkTGF5b3V0XCI7XG59O1xudHlwZSBGb3JtTGF5b3V0SW5mb3JtYXRpb24gPSBDb2x1bW5MYXlvdXQgfCBSZXNwb25zaXZlR3JpZExheW91dDtcblxuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBGb3JtIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBwcm92aWRlZCBieSBPRGF0YSBWNC5cbiAqIDxicj5cbiAqIEl0IGlzIGRlc2lnbmVkIHRvIHdvcmsgYmFzZWQgb24gYSBGaWVsZEdyb3VwIGFubm90YXRpb24gYnV0IGNhbiBhbHNvIHdvcmsgaWYgeW91IHByb3ZpZGUgYSBSZWZlcmVuY2VGYWNldCBvciBhIENvbGxlY3Rpb25GYWNldFxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6Rm9ybSBpZD1cIk15Rm9ybVwiIG1ldGFQYXRoPVwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXAjR2VuZXJhbEluZm9ybWF0aW9uXCIgLyZndDtcbiAqIDwvcHJlPlxuICogQGFsaWFzIHNhcC5mZS5tYWNyb3MuRm9ybVxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lQnVpbGRpbmdCbG9jayh7XG5cdG5hbWU6IFwiRm9ybVwiLFxuXHRuYW1lc3BhY2U6IFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiLFxuXHRwdWJsaWNOYW1lc3BhY2U6IFwic2FwLmZlLm1hY3Jvc1wiLFxuXHRyZXR1cm5UeXBlczogW1wic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1BUElcIl1cbn0pXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3JtQmxvY2sgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2Uge1xuXHQvKipcblx0ICogVGhlIGlkZW50aWZpZXIgb2YgdGhlIGZvcm0gY29udHJvbC5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIsIGlzUHVibGljOiB0cnVlLCByZXF1aXJlZDogdHJ1ZSB9KVxuXHRpZCE6IHN0cmluZztcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGF0aCBvZiB0aGUgY29udGV4dCB1c2VkIGluIHRoZSBjdXJyZW50IHBhZ2Ugb3IgYmxvY2suXG5cdCAqIFRoaXMgc2V0dGluZyBpcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZXdvcmsuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLFxuXHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdGlzUHVibGljOiB0cnVlLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiLCBcIlNpbmdsZXRvblwiLCBcIkVudGl0eVR5cGVcIl1cblx0fSlcblx0Y29udGV4dFBhdGghOiBDb250ZXh0O1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSByZWxhdGl2ZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgbWV0YW1vZGVsLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0UGF0aC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHtcblx0XHR0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsXG5cdFx0aXNQdWJsaWM6IHRydWUsXG5cdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0ZXhwZWN0ZWRBbm5vdGF0aW9uVHlwZXM6IFtcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFR5cGVcIixcblx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ29sbGVjdGlvbkZhY2V0XCIsXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlJlZmVyZW5jZUZhY2V0XCJcblx0XHRdLFxuXHRcdGV4cGVjdGVkVHlwZXM6IFtcIkVudGl0eVNldFwiLCBcIkVudGl0eVR5cGVcIiwgXCJTaW5nbGV0b25cIiwgXCJOYXZpZ2F0aW9uUHJvcGVydHlcIl1cblx0fSlcblx0bWV0YVBhdGghOiBDb250ZXh0O1xuXG5cdC8qKlxuXHQgKiBUaGUgbWFuaWZlc3QgZGVmaW5lZCBmb3JtIGNvbnRhaW5lcnMgdG8gYmUgc2hvd24gaW4gdGhlIGFjdGlvbiBhcmVhIG9mIHRoZSB0YWJsZVxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdGZvcm1Db250YWluZXJzPzogRm9ybUNvbnRhaW5lcltdO1xuXG5cdC8qKlxuXHQgKiBDb250cm9sIHRoZSByZW5kZXJpbmcgb2YgdGhlIGZvcm0gY29udGFpbmVyIGxhYmVsc1xuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJib29sZWFuXCIgfSlcblx0dXNlRm9ybUNvbnRhaW5lckxhYmVscz86IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIFRvZ2dsZSBQcmV2aWV3OiBQYXJ0IG9mIFByZXZpZXcgLyBQcmV2aWV3IHZpYSAnU2hvdyBNb3JlJyBCdXR0b25cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHBhcnRPZlByZXZpZXcgPSB0cnVlO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGl0bGUgb2YgdGhlIGZvcm0gY29udHJvbC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiwgaXNQdWJsaWM6IHRydWUgfSlcblx0dGl0bGU/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIFwiYXJpYS1sZXZlbFwiIG9mIHRoZSBmb3JtIHRpdGxlLCB0aXRsZXMgb2YgaW50ZXJuYWxseSB1c2VkIGZvcm0gY29udGFpbmVycyBhcmUgbmVzdGVkIHN1YnNlcXVlbnRseVxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzYXAudWkuY29yZS5UaXRsZUxldmVsXCIsIGlzUHVibGljOiB0cnVlIH0pXG5cdHRpdGxlTGV2ZWw6IFRpdGxlTGV2ZWwgPSBUaXRsZUxldmVsLkF1dG87XG5cblx0LyoqXG5cdCAqIFByb3BlcnR5IGFkZGVkIHRvIGFzc29jaWF0ZSB0aGUgc3VwZXJvcmRpbmF0ZSB0aXRsZVxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgYXJpYUxhYmVsbGVkQnk/OiBzdHJpbmdbXTtcblxuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGRpc3BsYXlNb2RlPzogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cblx0LyoqXG5cdCAqIFx0SWYgc2V0IHRvIGZhbHNlLCB0aGUgRm9ybSBpcyBub3QgcmVuZGVyZWQuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlzVmlzaWJsZSA9IFwidHJ1ZVwiO1xuXHQvLyBJbmRlcGVuZGVudCBmcm9tIHRoZSBmb3JtIHRpdGxlLCBjYW4gYmUgYSBiaXQgY29uZnVzaW5nIGluIHN0YW5kYWxvbmUgdXNhZ2UgYXQgaXMgbm90IHNob3dpbmcgYW55dGhpbmcgYnkgZGVmYXVsdFxuXG5cdC8vIEp1c3QgcHJveGllZCBkb3duIHRvIHRoZSBGaWVsZCBtYXkgbmVlZCB0byBzZWUgaWYgbmVlZGVkIG9yIG5vdFxuXHRAYmxvY2tFdmVudCgpXG5cdG9uQ2hhbmdlPzogc3RyaW5nO1xuXG5cdEBibG9ja0FnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUubWFjcm9zLmZvcm0uRm9ybUVsZW1lbnRcIiwgaXNQdWJsaWM6IHRydWUsIHNsb3Q6IFwiZm9ybUVsZW1lbnRzXCIsIGlzRGVmYXVsdDogdHJ1ZSB9KVxuXHRmb3JtRWxlbWVudHM/OiBvYmplY3RbXTtcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgbGF5b3V0IHRvIGJlIHVzZWQgd2l0aGluIHRoZSBmb3JtLlxuXHQgKiBJdCBkZWZhdWx0cyB0byB0aGUgQ29sdW1uTGF5b3V0LCBidXQgeW91IGNhbiBhbHNvIHVzZSBhIFJlc3BvbnNpdmVHcmlkTGF5b3V0LlxuXHQgKiBBbGwgdGhlIHByb3BlcnRpZXMgb2YgdGhlIFJlc3BvbnNpdmVHcmlkTGF5b3V0IGNhbiBiZSBhZGRlZCB0byB0aGUgY29uZmlndXJhdGlvbi5cblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwib2JqZWN0XCIsIGlzUHVibGljOiB0cnVlIH0pXG5cdGxheW91dDogRm9ybUxheW91dEluZm9ybWF0aW9uID0geyB0eXBlOiBcIkNvbHVtbkxheW91dFwiLCBjb2x1bW5zTTogMywgY29sdW1uc1hMOiA2LCBjb2x1bW5zTDogNCwgbGFiZWxDZWxsc0xhcmdlOiAxMiB9O1xuXG5cdC8vIFVzZWZ1bCBmb3Igb3VyIGR5bmFtaWMgdGhpbmcgYnV0IGFsc28gZGVwZW5kcyBvbiB0aGUgbWV0YWRhdGEgLT4gbWFrZSBzdXJlIHRoaXMgaXMgdGFrZW4gaW50byBhY2NvdW50XG5cdF9lZGl0YWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cblx0X2FwaUlkOiBzdHJpbmc7XG5cblx0X2NvbnRlbnRJZDogc3RyaW5nO1xuXG5cdGZhY2V0VHlwZT86IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPEZvcm1CbG9jaz4sIGNvbmZpZ3VyYXRpb246IHVua25vd24sIG1TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzLCBjb25maWd1cmF0aW9uLCBtU2V0dGluZ3MpO1xuXHRcdGlmICh0aGlzLm1ldGFQYXRoICYmIHRoaXMuY29udGV4dFBhdGggJiYgKHRoaXMuZm9ybUNvbnRhaW5lcnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmZvcm1Db250YWluZXJzID09PSBudWxsKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHRPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEZpZWxkR3JvdXBUeXBlIHwgQ29sbGVjdGlvbkZhY2V0IHwgUmVmZXJlbmNlRmFjZXQ+KFxuXHRcdFx0XHR0aGlzLm1ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmNvbnRleHRQYXRoXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgbUV4dHJhU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRsZXQgb0ZhY2V0RGVmaW5pdGlvbiA9IG9Db250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRsZXQgaGFzRmllbGRHcm91cCA9IGZhbHNlO1xuXHRcdFx0aWYgKG9GYWNldERlZmluaXRpb24gJiYgb0ZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpIHtcblx0XHRcdFx0Ly8gV3JhcCB0aGUgZmFjZXQgaW4gYSBmYWtlIEZhY2V0IGFubm90YXRpb25cblx0XHRcdFx0aGFzRmllbGRHcm91cCA9IHRydWU7XG5cdFx0XHRcdG9GYWNldERlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0JFR5cGU6IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0LFxuXHRcdFx0XHRcdExhYmVsOiBvRmFjZXREZWZpbml0aW9uLkxhYmVsLFxuXHRcdFx0XHRcdFRhcmdldDoge1xuXHRcdFx0XHRcdFx0JHRhcmdldDogb0ZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdFx0dGVybTogXCJcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0XHRcdHZhbHVlOiBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Db250ZXh0T2JqZWN0UGF0aClcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFubm90YXRpb25zOiB7fSxcblx0XHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IG9GYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdH0gYXMgdW5rbm93biBhcyBSZWZlcmVuY2VGYWNldDtcblx0XHRcdFx0aWYgKHRoaXMuZm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0bUV4dHJhU2V0dGluZ3Nbb0ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWVdID0geyBmaWVsZHM6IHRoaXMuZm9ybUVsZW1lbnRzIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb0NvbnZlcnRlckNvbnRleHQgPSB0aGlzLmdldENvbnZlcnRlckNvbnRleHQoXG5cdFx0XHRcdG9Db250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdFx0Lyp0aGlzLmNvbnRleHRQYXRoKi8gdW5kZWZpbmVkLFxuXHRcdFx0XHRtU2V0dGluZ3MsXG5cdFx0XHRcdG1FeHRyYVNldHRpbmdzXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb0Zvcm1EZWZpbml0aW9uID0gY3JlYXRlRm9ybURlZmluaXRpb24ob0ZhY2V0RGVmaW5pdGlvbiwgdGhpcy5pc1Zpc2libGUsIG9Db252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmIChoYXNGaWVsZEdyb3VwKSB7XG5cdFx0XHRcdG9Gb3JtRGVmaW5pdGlvbi5mb3JtQ29udGFpbmVyc1swXS5hbm5vdGF0aW9uUGF0aCA9IHRoaXMubWV0YVBhdGguZ2V0UGF0aCgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5mb3JtQ29udGFpbmVycyA9IG9Gb3JtRGVmaW5pdGlvbi5mb3JtQ29udGFpbmVycztcblx0XHRcdHRoaXMudXNlRm9ybUNvbnRhaW5lckxhYmVscyA9IG9Gb3JtRGVmaW5pdGlvbi51c2VGb3JtQ29udGFpbmVyTGFiZWxzO1xuXHRcdFx0dGhpcy5mYWNldFR5cGUgPSBvRmFjZXREZWZpbml0aW9uICYmIChvRmFjZXREZWZpbml0aW9uLiRUeXBlIGFzIHN0cmluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZmFjZXRUeXBlID0gdGhpcy5tZXRhUGF0aC5nZXRPYmplY3QoKT8uJFR5cGU7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmlzUHVibGljKSB7XG5cdFx0XHR0aGlzLl9hcGlJZCA9IHRoaXMuY3JlYXRlSWQoXCJGb3JtXCIpITtcblx0XHRcdHRoaXMuX2NvbnRlbnRJZCA9IHRoaXMuaWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX2FwaUlkID0gdGhpcy5pZDtcblx0XHRcdHRoaXMuX2NvbnRlbnRJZCA9IGAke3RoaXMuaWR9LWNvbnRlbnRgO1xuXHRcdH1cblx0XHQvLyBpZiBkaXNwbGF5TW9kZSA9PT0gdHJ1ZSAtPiBfZWRpdGFibGUgPSBmYWxzZVxuXHRcdC8vIGlmIGRpc3BsYXlNb2RlID09PSBmYWxzZSAtPiBfZWRpdGFibGUgPSB0cnVlXG5cdFx0Ly8gID0+IGlmIGRpc3BsYXlNb2RlID09PSB7bXlCaW5kaW5nVmFsdWV9IC0+IF9lZGl0YWJsZSA9IHtteUJpbmRpbmdWYWx1ZX0gPT09IHRydWUgPyB0cnVlIDogZmFsc2Vcblx0XHQvLyBpZiBEaXNwbGF5TW9kZSA9PT0gdW5kZWZpbmVkIC0+IF9lZGl0YWJsZSA9IHt1aT4vaXNFZGl0YWJsZX1cblx0XHRpZiAodGhpcy5kaXNwbGF5TW9kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLl9lZGl0YWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShlcXVhbChyZXNvbHZlQmluZGluZ1N0cmluZyh0aGlzLmRpc3BsYXlNb2RlLCBcImJvb2xlYW5cIiksIGZhbHNlKSwgdHJ1ZSwgZmFsc2UpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fZWRpdGFibGUgPSBjb21waWxlRXhwcmVzc2lvbihVSS5Jc0VkaXRhYmxlKTtcblx0XHR9XG5cdH1cblxuXHRnZXREYXRhRmllbGRDb2xsZWN0aW9uKGZvcm1Db250YWluZXI6IEZvcm1Db250YWluZXIsIGZhY2V0Q29udGV4dDogQ29udGV4dCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZmFjZXQgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMoZmFjZXRDb250ZXh0KS50YXJnZXRPYmplY3QgYXMgRmFjZXRUeXBlcztcblx0XHRsZXQgbmF2aWdhdGlvblBhdGg7XG5cdFx0bGV0IGlkUGFydDtcblx0XHRpZiAoZmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0KSB7XG5cdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IEFubm90YXRpb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoZmFjZXQuVGFyZ2V0LnZhbHVlKTtcblx0XHRcdGlkUGFydCA9IGZhY2V0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aFBhdGggPSB0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKTtcblx0XHRcdGxldCBmYWNldFBhdGggPSBmYWNldENvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0aWYgKGZhY2V0UGF0aC5zdGFydHNXaXRoKGNvbnRleHRQYXRoUGF0aCkpIHtcblx0XHRcdFx0ZmFjZXRQYXRoID0gZmFjZXRQYXRoLnN1YnN0cmluZyhjb250ZXh0UGF0aFBhdGgubGVuZ3RoKTtcblx0XHRcdFx0aWYgKGZhY2V0UGF0aC5jaGFyQXQoMCkgPT09IFwiL1wiKSB7XG5cdFx0XHRcdFx0ZmFjZXRQYXRoID0gZmFjZXRQYXRoLnNsaWNlKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRuYXZpZ2F0aW9uUGF0aCA9IEFubm90YXRpb25IZWxwZXIuZ2V0TmF2aWdhdGlvblBhdGgoZmFjZXRQYXRoKTtcblx0XHRcdGlkUGFydCA9IGZhY2V0UGF0aDtcblx0XHR9XG5cdFx0Y29uc3QgdGl0bGVMZXZlbCA9IEZvcm1IZWxwZXIuZ2V0Rm9ybUNvbnRhaW5lclRpdGxlTGV2ZWwodGhpcy50aXRsZSwgdGhpcy50aXRsZUxldmVsKTtcblx0XHRjb25zdCB0aXRsZSA9IHRoaXMudXNlRm9ybUNvbnRhaW5lckxhYmVscyAmJiBmYWNldC5MYWJlbCA/IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmYWNldC5MYWJlbCkgOiBcIlwiO1xuXG5cdFx0Y29uc3QgaWQgPSB0aGlzLmlkID8gZ2V0Rm9ybUNvbnRhaW5lcklEKGlkUGFydCkgOiB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4geG1sYFxuXHRcdFx0XHRcdDxtYWNybzpGb3JtQ29udGFpbmVyXG5cdFx0XHRcdFx0eG1sbnM6bWFjcm89XCJzYXAuZmUubWFjcm9zXCJcblx0XHRcdFx0XHQke3RoaXMuYXR0cihcImlkXCIsIGlkKX1cblx0XHRcdFx0XHR0aXRsZT1cIiR7dGl0bGV9XCJcblx0XHRcdFx0XHR0aXRsZUxldmVsPVwiJHt0aXRsZUxldmVsfVwiXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke25hdmlnYXRpb25QYXRoID8gZm9ybUNvbnRhaW5lci5lbnRpdHlTZXQgOiB0aGlzLmNvbnRleHRQYXRofVwiXG5cdFx0XHRcdFx0bWV0YVBhdGg9XCIke2ZhY2V0Q29udGV4dH1cIlxuXHRcdFx0XHRcdGRhdGFGaWVsZENvbGxlY3Rpb249XCIke2Zvcm1Db250YWluZXIuZm9ybUVsZW1lbnRzfVwiXG5cdFx0XHRcdFx0bmF2aWdhdGlvblBhdGg9XCIke25hdmlnYXRpb25QYXRofVwiXG5cdFx0XHRcdFx0dmlzaWJsZT1cIiR7Zm9ybUNvbnRhaW5lci5pc1Zpc2libGV9XCJcblx0XHRcdFx0XHRkaXNwbGF5TW9kZT1cIiR7dGhpcy5kaXNwbGF5TW9kZX1cIlxuXHRcdFx0XHRcdG9uQ2hhbmdlPVwiJHt0aGlzLm9uQ2hhbmdlfVwiXG5cdFx0XHRcdFx0YWN0aW9ucz1cIiR7Zm9ybUNvbnRhaW5lci5hY3Rpb25zfVwiXG5cdFx0XHRcdFx0dXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXM9XCIke2Zvcm1Db250YWluZXIudXNlU2luZ2xlVGV4dEFyZWFGaWVsZEFzTm90ZXN9XCJcblx0XHRcdFx0XHRoYXNVaUhpZGRlbkFubm90YXRpb249XCIke2Zvcm1Db250YWluZXIuYW5ub3RhdGlvbkhpZGRlbn1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdDxtYWNybzpmb3JtRWxlbWVudHM+XG5cdFx0XHRcdFx0PHNsb3QgbmFtZT1cImZvcm1FbGVtZW50c1wiIC8+XG5cdFx0XHRcdDwvbWFjcm86Zm9ybUVsZW1lbnRzPlxuXHRcdFx0PC9tYWNybzpGb3JtQ29udGFpbmVyPmA7XG5cdH1cblxuXHRnZXRGb3JtQ29udGFpbmVycygpOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG5cdFx0aWYgKHRoaXMuZm9ybUNvbnRhaW5lcnMhLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmZhY2V0VHlwZT8uaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5Db2xsZWN0aW9uRmFjZXRcIikpIHtcblx0XHRcdHJldHVybiB0aGlzLmZvcm1Db250YWluZXJzIS5tYXAoKGZvcm1Db250YWluZXIsIGZvcm1Db250YWluZXJJZHgpID0+IHtcblx0XHRcdFx0aWYgKGZvcm1Db250YWluZXIuaXNWaXNpYmxlKSB7XG5cdFx0XHRcdFx0Y29uc3QgZmFjZXRDb250ZXh0ID0gdGhpcy5jb250ZXh0UGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZvcm1Db250YWluZXIuYW5ub3RhdGlvblBhdGgsIHRoaXMuY29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdGNvbnN0IGZhY2V0ID0gZmFjZXRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdGZhY2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCAmJlxuXHRcdFx0XHRcdFx0Rm9ybUhlbHBlci5pc1JlZmVyZW5jZUZhY2V0UGFydE9mUHJldmlldyhmYWNldCwgdGhpcy5wYXJ0T2ZQcmV2aWV3KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0aWYgKGZhY2V0LlRhcmdldC4kQW5ub3RhdGlvblBhdGguJFR5cGUgPT09IENvbW11bmljYXRpb25Bbm5vdGF0aW9uVHlwZXMuQWRkcmVzc1R5cGUpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHhtbGA8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZm9ybUNvbnRhaW5lcnM+JHtmb3JtQ29udGFpbmVySWR4fVwiIHZhcj1cImZvcm1Db250YWluZXJcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGVtcGxhdGU6d2l0aCBwYXRoPVwiZm9ybUNvbnRhaW5lcnM+JHtmb3JtQ29udGFpbmVySWR4fS9hbm5vdGF0aW9uUGF0aFwiIHZhcj1cImZhY2V0XCI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Y29yZTpGcmFnbWVudCBmcmFnbWVudE5hbWU9XCJzYXAuZmUubWFjcm9zLmZvcm0uQWRkcmVzc1NlY3Rpb25cIiB0eXBlPVwiWE1MXCIgLz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3RlbXBsYXRlOndpdGg+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGVtcGxhdGU6d2l0aD5gO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGF0YUZpZWxkQ29sbGVjdGlvbihmb3JtQ29udGFpbmVyLCBmYWNldENvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5mYWNldFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUmVmZXJlbmNlRmFjZXRcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuZm9ybUNvbnRhaW5lcnMhLm1hcCgoZm9ybUNvbnRhaW5lcikgPT4ge1xuXHRcdFx0XHRpZiAoZm9ybUNvbnRhaW5lci5pc1Zpc2libGUpIHtcblx0XHRcdFx0XHRjb25zdCBmYWNldENvbnRleHQgPSB0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZm9ybUNvbnRhaW5lci5hbm5vdGF0aW9uUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGF0YUZpZWxkQ29sbGVjdGlvbihmb3JtQ29udGFpbmVyLCBmYWNldENvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhIHRleHRhcmVhIGlzIGFsb25lIGluIGEgZm9ybVxuXHQgKi9cblx0Y2hlY2tJZlRleHRBcmVhSXNBbG9uZSgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5mb3JtQ29udGFpbmVycyEubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRpZiAodGhpcy5mb3JtQ29udGFpbmVycyFbMF0uZm9ybUVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRjb25zdCBmYWNldCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhcblx0XHRcdFx0XHR0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQodGhpcy5mb3JtQ29udGFpbmVycyFbMF0uYW5ub3RhdGlvblBhdGgsIHRoaXMuY29udGV4dFBhdGgpXG5cdFx0XHRcdCkudGFyZ2V0T2JqZWN0IGFzIEZpZWxkR3JvdXBUeXBlIHwgUmVmZXJlbmNlRmFjZXQ7XG5cdFx0XHRcdGxldCBmaWVsZEdyb3VwOiBGaWVsZEdyb3VwVHlwZSB8IHVuZGVmaW5lZDtcblx0XHRcdFx0bGV0IGlkZW50aWZpY2F0aW9uOiBJZGVudGlmaWNhdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Ly8gVGhpcyBpcyBvbmx5IGZvciBtYWNyb3M6Zm9ybSB3aXRoIGEgRmllbGRHcm91cCB0aGF0IGNvbnRhaW5zIG9ubHkgYSBUZXh0QXJlYVxuXHRcdFx0XHRpZiAoZmFjZXQuJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRmllbGRHcm91cFR5cGVcIikge1xuXHRcdFx0XHRcdGZpZWxkR3JvdXAgPSBmYWNldDtcblx0XHRcdFx0fSBlbHNlIGlmIChoYXNGaWVsZEdyb3VwVGFyZ2V0KGZhY2V0KSkge1xuXHRcdFx0XHRcdGZpZWxkR3JvdXAgPSBmYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIEZpZWxkR3JvdXBUeXBlO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGhhc0lkZW50aWZpY2F0aW9uVGFyZ2V0KGZhY2V0KSkge1xuXHRcdFx0XHRcdGlkZW50aWZpY2F0aW9uID0gZmFjZXQ/LlRhcmdldD8uJHRhcmdldCBhcyBJZGVudGlmaWNhdGlvbjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmaWVsZEdyb3VwPy5EYXRhLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRcdHJldHVybiAoZmllbGRHcm91cC5EYXRhWzBdIGFzIERhdGFGaWVsZCk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpZGVudGlmaWNhdGlvbj8ubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChpZGVudGlmaWNhdGlvblswXSBhcyBEYXRhRmllbGQpPy5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LlVJPy5NdWx0aUxpbmVUZXh0Py52YWx1ZU9mKCkgPT09IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgcHJvcGVyIGxheW91dCBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgYGxheW91dGAgcHJvcGVydHkgZGVmaW5lZCBleHRlcm5hbGx5LlxuXHQgKiBAcGFyYW0gaXNUZXh0QXJlYUFsb25lIFdoZXRoZXIgdGhlIHNlY3Rpb24gY29udGFpbnMgYSBsb25lbHkgVGV4dEFyZWEgaW5zaWRlXG5cdCAqIEByZXR1cm5zIFRoZSBsYXlvdXQgaW5mb3JtYXRpb24gZm9yIHRoZSB4bWwuXG5cdCAqL1xuXHRnZXRMYXlvdXRJbmZvcm1hdGlvbihpc1RleHRBcmVhQWxvbmU6IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdHN3aXRjaCAodGhpcy5sYXlvdXQudHlwZSkge1xuXHRcdFx0Y2FzZSBcIlJlc3BvbnNpdmVHcmlkTGF5b3V0XCI6XG5cdFx0XHRcdHJldHVybiB4bWxgPGY6UmVzcG9uc2l2ZUdyaWRMYXlvdXQgYWRqdXN0TGFiZWxTcGFuPVwiJHt0aGlzLmxheW91dC5hZGp1c3RMYWJlbFNwYW59XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtwb2ludEw9XCIke3RoaXMubGF5b3V0LmJyZWFrcG9pbnRMfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrcG9pbnRNPVwiJHt0aGlzLmxheW91dC5icmVha3BvaW50TX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha3BvaW50WEw9XCIke3RoaXMubGF5b3V0LmJyZWFrcG9pbnRYTH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zTD1cIiR7aXNUZXh0QXJlYUFsb25lID8gMSA6IHRoaXMubGF5b3V0LmNvbHVtbnNMfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbHVtbnNNPVwiJHtpc1RleHRBcmVhQWxvbmUgPyAxIDogdGhpcy5sYXlvdXQuY29sdW1uc019XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uc1hMPVwiJHtpc1RleHRBcmVhQWxvbmUgPyAxIDogdGhpcy5sYXlvdXQuY29sdW1uc1hMfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVtcHR5U3Bhbkw9XCIke3RoaXMubGF5b3V0LmVtcHR5U3Bhbkx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZW1wdHlTcGFuTT1cIiR7dGhpcy5sYXlvdXQuZW1wdHlTcGFuTX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbXB0eVNwYW5TPVwiJHt0aGlzLmxheW91dC5lbXB0eVNwYW5TfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVtcHR5U3BhblhMPVwiJHt0aGlzLmxheW91dC5lbXB0eVNwYW5YTH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbFNwYW5MPVwiJHt0aGlzLmxheW91dC5sYWJlbFNwYW5MfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsU3Bhbk09XCIke3RoaXMubGF5b3V0LmxhYmVsU3Bhbk19XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWxTcGFuUz1cIiR7dGhpcy5sYXlvdXQubGFiZWxTcGFuU31cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbFNwYW5YTD1cIiR7dGhpcy5sYXlvdXQubGFiZWxTcGFuWEx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2luZ2xlQ29udGFpbmVyRnVsbFNpemU9XCIke3RoaXMubGF5b3V0LnNpbmdsZUNvbnRhaW5lckZ1bGxTaXplfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmREZXNpZ249XCIke3RoaXMubGF5b3V0LmJhY2tncm91bmREZXNpZ259XCIgLz5gO1xuXHRcdFx0Y2FzZSBcIkNvbHVtbkxheW91dFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHhtbGA8ZjpDb2x1bW5MYXlvdXRcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zTT1cIiR7aXNUZXh0QXJlYUFsb25lID8gMSA6IHRoaXMubGF5b3V0LmNvbHVtbnNNfVwiXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uc0w9XCIke2lzVGV4dEFyZWFBbG9uZSA/IDEgOiB0aGlzLmxheW91dC5jb2x1bW5zTH1cIlxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbnNYTD1cIiR7aXNUZXh0QXJlYUFsb25lID8gMSA6IHRoaXMubGF5b3V0LmNvbHVtbnNYTH1cIlxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsQ2VsbHNMYXJnZT1cIiR7dGhpcy5sYXlvdXQubGFiZWxDZWxsc0xhcmdlfVwiXG5cdFx0XHRcdFx0XHRcdFx0ZW1wdHlDZWxsc0xhcmdlPVwiJHt0aGlzLmxheW91dC5lbXB0eUNlbGxzTGFyZ2V9XCJcblx0XHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kRGVzaWduPVwiJHt0aGlzLmxheW91dC5iYWNrZ3JvdW5kRGVzaWdufVwiIC8+YDtcblx0XHR9XG5cdH1cblxuXHRnZXRUZW1wbGF0ZSgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IG9uQ2hhbmdlU3RyID0gKHRoaXMub25DaGFuZ2UgJiYgdGhpcy5vbkNoYW5nZS5yZXBsYWNlKFwie1wiLCBcIlxcXFx7XCIpLnJlcGxhY2UoXCJ9XCIsIFwiXFxcXH1cIikpIHx8IFwiXCI7XG5cdFx0Y29uc3QgbWV0YVBhdGhQYXRoID0gdGhpcy5tZXRhUGF0aC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgY29udGV4dFBhdGhQYXRoID0gdGhpcy5jb250ZXh0UGF0aC5nZXRQYXRoKCk7XG5cdFx0Y29uc3QgaXNUZXh0QXJlYUFsb25lID0gdGhpcy5jaGVja0lmVGV4dEFyZWFJc0Fsb25lKCk7XG5cblx0XHRpZiAoIXRoaXMuaXNWaXNpYmxlKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHhtbGA8bWFjcm86Rm9ybUFQSSB4bWxuczptYWNybz1cInNhcC5mZS5tYWNyb3MuZm9ybVwiXG5cdFx0XHRcdFx0eG1sbnM6bWFjcm9kYXRhPVwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiXG5cdFx0XHRcdFx0eG1sbnM6Zj1cInNhcC51aS5sYXlvdXQuZm9ybVwiXG5cdFx0XHRcdFx0eG1sbnM6Zmw9XCJzYXAudWkuZmxcIlxuXHRcdFx0XHRcdHhtbG5zOmR0PVwic2FwLnVpLmR0XCJcblx0XHRcdFx0XHR4bWxuczpjb3JlQ29udHJvbHM9XCJzYXAuZmUuY29yZS5jb250cm9sc1wiXG5cdFx0XHRcdFx0aWQ9XCIke3RoaXMuX2FwaUlkfVwiXG5cdFx0XHRcdFx0bWV0YVBhdGg9XCIke21ldGFQYXRoUGF0aH1cIlxuXHRcdFx0XHRcdGNvbnRleHRQYXRoPVwiJHtjb250ZXh0UGF0aFBhdGh9XCI+XG5cdFx0XHRcdDxmOkZvcm1cblx0XHRcdFx0XHRmbDpkZWxlZ2F0ZT0ne1xuXHRcdFx0XHRcdFx0XCJuYW1lXCI6IFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1EZWxlZ2F0ZVwiLFxuXHRcdFx0XHRcdFx0XCJkZWxlZ2F0ZVR5cGVcIjogXCJjb21wbGV0ZVwiXG5cdFx0XHRcdFx0fSdcblx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm0uZGVzaWdudGltZVwiXG5cdFx0XHRcdFx0aWQ9XCIke3RoaXMuX2NvbnRlbnRJZH1cIlxuXHRcdFx0XHRcdGVkaXRhYmxlPVwiJHt0aGlzLl9lZGl0YWJsZX1cIlxuXHRcdFx0XHRcdHZpc2libGU9XCIke3RoaXMuaXNWaXNpYmxlfVwiXG5cdFx0XHRcdFx0bWFjcm9kYXRhOm5hdmlnYXRpb25QYXRoPVwiJHtjb250ZXh0UGF0aFBhdGh9XCJcblx0XHRcdFx0XHRtYWNyb2RhdGE6bWV0YVBhdGg9XCIke21ldGFQYXRoUGF0aH1cIlxuXHRcdFx0XHRcdG1hY3JvZGF0YTpvbkNoYW5nZT1cIiR7b25DaGFuZ2VTdHJ9XCJcblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT1cIiR7dGhpcy5hcmlhTGFiZWxsZWRCeX1cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0JHt0aGlzLmFkZENvbmRpdGlvbmFsbHkoXG5cdFx0XHRcdFx0XHR0aGlzLnRpdGxlICE9PSB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHR4bWxgPGY6dGl0bGU+XG5cdFx0XHRcdFx0XHRcdDxjb3JlOlRpdGxlIGxldmVsPVwiJHt0aGlzLnRpdGxlTGV2ZWx9XCIgdGV4dD1cIiR7dGhpcy50aXRsZX1cIiAvPlxuXHRcdFx0XHRcdFx0PC9mOnRpdGxlPmBcblx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdDxmOmxheW91dD5cblx0XHRcdFx0XHQke3RoaXMuZ2V0TGF5b3V0SW5mb3JtYXRpb24oaXNUZXh0QXJlYUFsb25lKX1cblxuXHRcdFx0XHRcdDwvZjpsYXlvdXQ+XG5cdFx0XHRcdFx0PGY6Zm9ybUNvbnRhaW5lcnM+XG5cdFx0XHRcdFx0XHQke3RoaXMuZ2V0Rm9ybUNvbnRhaW5lcnMoKX1cblx0XHRcdFx0XHQ8L2Y6Zm9ybUNvbnRhaW5lcnM+XG5cdFx0XHRcdFx0PGY6ZGVwZW5kZW50cz5cblx0XHRcdFx0XHRcdDxjb3JlQ29udHJvbHM6SGlkZUZvcm1Hcm91cEF1dG9tYXRpY2FsbHkgLz5cblx0XHRcdFx0XHQ8L2Y6ZGVwZW5kZW50cz5cblx0XHRcdFx0PC9mOkZvcm0+XG5cdFx0XHQ8L21hY3JvOkZv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
|
|
518
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGb3JtQmxvY2siLCJfZGVjIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm5hbWUiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJyZXR1cm5UeXBlcyIsIl9kZWMyIiwiYmxvY2tBdHRyaWJ1dGUiLCJ0eXBlIiwiaXNQdWJsaWMiLCJyZXF1aXJlZCIsIl9kZWMzIiwiZXhwZWN0ZWRUeXBlcyIsIl9kZWM0IiwiZXhwZWN0ZWRBbm5vdGF0aW9uVHlwZXMiLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiX2RlYzEwIiwiX2RlYzExIiwiX2RlYzEyIiwiX2RlYzEzIiwiYmxvY2tFdmVudCIsIl9kZWMxNCIsImJsb2NrQWdncmVnYXRpb24iLCJzbG90IiwiaXNEZWZhdWx0IiwiX2RlYzE1IiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9CdWlsZGluZ0Jsb2NrVGVtcGxhdCIsInByb3BzIiwiY29uZmlndXJhdGlvbiIsIm1TZXR0aW5ncyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJfZGVzY3JpcHRvcjciLCJfZGVzY3JpcHRvcjgiLCJfZGVzY3JpcHRvcjkiLCJfZGVzY3JpcHRvcjEwIiwiX2Rlc2NyaXB0b3IxMSIsIl9kZXNjcmlwdG9yMTIiLCJfZGVzY3JpcHRvcjEzIiwiX2Rlc2NyaXB0b3IxNCIsIm1ldGFQYXRoIiwiY29udGV4dFBhdGgiLCJmb3JtQ29udGFpbmVycyIsInVuZGVmaW5lZCIsIm9Db250ZXh0T2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsIm1FeHRyYVNldHRpbmdzIiwib0ZhY2V0RGVmaW5pdGlvbiIsInRhcmdldE9iamVjdCIsImhhc0ZpZWxkR3JvdXAiLCIkVHlwZSIsIkxhYmVsIiwiVGFyZ2V0IiwiJHRhcmdldCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInBhdGgiLCJ0ZXJtIiwidmFsdWUiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiYW5ub3RhdGlvbnMiLCJmb3JtRWxlbWVudHMiLCJmaWVsZHMiLCJvQ29udmVydGVyQ29udGV4dCIsImdldENvbnZlcnRlckNvbnRleHQiLCJvRm9ybURlZmluaXRpb24iLCJjcmVhdGVGb3JtRGVmaW5pdGlvbiIsImlzVmlzaWJsZSIsImFubm90YXRpb25QYXRoIiwiZ2V0UGF0aCIsInVzZUZvcm1Db250YWluZXJMYWJlbHMiLCJmYWNldFR5cGUiLCJnZXRPYmplY3QiLCJzZWN0aW9ucyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldFNlY3Rpb25zIiwidGFyZ2V0TGF5b3V0IiwiSUQiLCJ0b1N0cmluZyIsImxheW91dCIsIm1hbmlmZXN0Rm9ybUNvbmZpZ3VyYXRpb24iLCJnZXRNYW5pZmVzdENvbnRyb2xDb25maWd1cmF0aW9uIiwiZ2V0UmVsYXRpdmVBbm5vdGF0aW9uUGF0aCIsInRhcmdldEVudGl0eVR5cGUiLCJfYXBpSWQiLCJjcmVhdGVJZCIsIl9jb250ZW50SWQiLCJpZCIsImRpc3BsYXlNb2RlIiwiX2VkaXRhYmxlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJlcXVhbCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiVUkiLCJJc0VkaXRhYmxlIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldERhdGFGaWVsZENvbGxlY3Rpb24iLCJmb3JtQ29udGFpbmVyIiwiZmFjZXRDb250ZXh0IiwiZmFjZXQiLCJuYXZpZ2F0aW9uUGF0aCIsImlkUGFydCIsIkFubm90YXRpb25IZWxwZXIiLCJnZXROYXZpZ2F0aW9uUGF0aCIsImNvbnRleHRQYXRoUGF0aCIsImZhY2V0UGF0aCIsInN0YXJ0c1dpdGgiLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJjaGFyQXQiLCJzbGljZSIsInRpdGxlTGV2ZWwiLCJGb3JtSGVscGVyIiwiZ2V0Rm9ybUNvbnRhaW5lclRpdGxlTGV2ZWwiLCJ0aXRsZSIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsImdldEZvcm1Db250YWluZXJJRCIsInhtbCIsImF0dHIiLCJlbnRpdHlTZXQiLCJvbkNoYW5nZSIsImFjdGlvbnMiLCJ1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3RlcyIsImFubm90YXRpb25IaWRkZW4iLCJnZXRGb3JtQ29udGFpbmVycyIsImluY2x1ZGVzIiwibWFwIiwiZm9ybUNvbnRhaW5lcklkeCIsImdldE1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJpc1JlZmVyZW5jZUZhY2V0UGFydE9mUHJldmlldyIsInBhcnRPZlByZXZpZXciLCIkQW5ub3RhdGlvblBhdGgiLCJjaGVja0lmVGV4dEFyZWFJc0Fsb25lIiwiZmllbGRHcm91cCIsImlkZW50aWZpY2F0aW9uIiwiaGFzRmllbGRHcm91cFRhcmdldCIsImhhc0lkZW50aWZpY2F0aW9uVGFyZ2V0IiwiRGF0YSIsIlZhbHVlIiwiTXVsdGlMaW5lVGV4dCIsInZhbHVlT2YiLCJnZXRMYXlvdXRJbmZvcm1hdGlvbiIsImlzVGV4dEFyZWFBbG9uZSIsImFkanVzdExhYmVsU3BhbiIsImJyZWFrcG9pbnRMIiwiYnJlYWtwb2ludE0iLCJicmVha3BvaW50WEwiLCJjb2x1bW5zTCIsImNvbHVtbnNNIiwiY29sdW1uc1hMIiwiZW1wdHlTcGFuTCIsImVtcHR5U3Bhbk0iLCJlbXB0eVNwYW5TIiwiZW1wdHlTcGFuWEwiLCJsYWJlbFNwYW5MIiwibGFiZWxTcGFuTSIsImxhYmVsU3BhblMiLCJsYWJlbFNwYW5YTCIsInNpbmdsZUNvbnRhaW5lckZ1bGxTaXplIiwiYmFja2dyb3VuZERlc2lnbiIsImxhYmVsQ2VsbHNMYXJnZSIsImVtcHR5Q2VsbHNMYXJnZSIsImdldFRlbXBsYXRlIiwib25DaGFuZ2VTdHIiLCJyZXBsYWNlIiwibWV0YVBhdGhQYXRoIiwiYXJpYUxhYmVsbGVkQnkiLCJhZGRDb25kaXRpb25hbGx5IiwiQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiVGl0bGVMZXZlbCIsIkF1dG8iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkZvcm0uYmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbXVuaWNhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uRmFjZXQsXG5cdERhdGFGaWVsZCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cFR5cGUsXG5cdElkZW50aWZpY2F0aW9uLFxuXHRSZWZlcmVuY2VGYWNldFxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uLCBpZkVsc2UsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7XG5cdGJsb2NrQWdncmVnYXRpb24sXG5cdGJsb2NrQXR0cmlidXRlLFxuXHRibG9ja0V2ZW50LFxuXHRkZWZpbmVCdWlsZGluZ0Jsb2NrXG59IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlUHJvY2Vzc29yU2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3JcIjtcbmltcG9ydCB7IHhtbCB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2tUZW1wbGF0aW5nQmFzZSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9CdWlsZGluZ0Jsb2NrVGVtcGxhdGluZ0Jhc2VcIjtcbmltcG9ydCB0eXBlIHsgRm9ybUxheW91dEluZm9ybWF0aW9uLCBGb3JtTWFuaWZlc3RDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNGaWVsZEdyb3VwVGFyZ2V0LCBoYXNJZGVudGlmaWNhdGlvblRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtQ29udGFpbmVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IGNyZWF0ZUZvcm1EZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0Zvcm1cIjtcbmltcG9ydCB7IGdldEZvcm1Db250YWluZXJJRCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBGb3JtSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybUhlbHBlclwiO1xuaW1wb3J0IHsgVGl0bGVMZXZlbCB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgZm9yIGNyZWF0aW5nIGEgRm9ybSBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBJdCBpcyBkZXNpZ25lZCB0byB3b3JrIGJhc2VkIG9uIGEgRmllbGRHcm91cCBhbm5vdGF0aW9uIGJ1dCBjYW4gYWxzbyB3b3JrIGlmIHlvdSBwcm92aWRlIGEgUmVmZXJlbmNlRmFjZXQgb3IgYSBDb2xsZWN0aW9uRmFjZXRcbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOkZvcm0gaWQ9XCJNeUZvcm1cIiBtZXRhUGF0aD1cIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwI0dlbmVyYWxJbmZvcm1hdGlvblwiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkZvcm1cbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZUJ1aWxkaW5nQmxvY2soe1xuXHRuYW1lOiBcIkZvcm1cIixcblx0bmFtZXNwYWNlOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIixcblx0cHVibGljTmFtZXNwYWNlOiBcInNhcC5mZS5tYWNyb3NcIixcblx0cmV0dXJuVHlwZXM6IFtcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQVBJXCJdXG59KVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRm9ybUJsb2NrIGV4dGVuZHMgQnVpbGRpbmdCbG9ja1RlbXBsYXRpbmdCYXNlIHtcblx0LyoqXG5cdCAqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBmb3JtIGNvbnRyb2wuXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcInN0cmluZ1wiLCBpc1B1YmxpYzogdHJ1ZSwgcmVxdWlyZWQ6IHRydWUgfSlcblx0aWQhOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIHBhdGggb2YgdGhlIGNvbnRleHQgdXNlZCBpbiB0aGUgY3VycmVudCBwYWdlIG9yIGJsb2NrLlxuXHQgKiBUaGlzIHNldHRpbmcgaXMgZGVmaW5lZCBieSB0aGUgZnJhbWV3b3JrLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoe1xuXHRcdHR5cGU6IFwic2FwLnVpLm1vZGVsLkNvbnRleHRcIixcblx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRpc1B1YmxpYzogdHJ1ZSxcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiwgXCJTaW5nbGV0b25cIiwgXCJFbnRpdHlUeXBlXCJdXG5cdH0pXG5cdGNvbnRleHRQYXRoITogQ29udGV4dDtcblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcmVsYXRpdmUgcGF0aCBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG1ldGFtb2RlbCwgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dFBhdGguXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7XG5cdFx0dHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLFxuXHRcdGlzUHVibGljOiB0cnVlLFxuXHRcdHJlcXVpcmVkOiB0cnVlLFxuXHRcdGV4cGVjdGVkQW5ub3RhdGlvblR5cGVzOiBbXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkZpZWxkR3JvdXBUeXBlXCIsXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbGxlY3Rpb25GYWNldFwiLFxuXHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWZlcmVuY2VGYWNldFwiXG5cdFx0XSxcblx0XHRleHBlY3RlZFR5cGVzOiBbXCJFbnRpdHlTZXRcIiwgXCJFbnRpdHlUeXBlXCIsIFwiU2luZ2xldG9uXCIsIFwiTmF2aWdhdGlvblByb3BlcnR5XCJdXG5cdH0pXG5cdG1ldGFQYXRoITogQ29udGV4dDtcblxuXHQvKipcblx0ICogVGhlIG1hbmlmZXN0IGRlZmluZWQgZm9ybSBjb250YWluZXJzIHRvIGJlIHNob3duIGluIHRoZSBhY3Rpb24gYXJlYSBvZiB0aGUgdGFibGVcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRmb3JtQ29udGFpbmVycz86IEZvcm1Db250YWluZXJbXTtcblxuXHQvKipcblx0ICogQ29udHJvbCB0aGUgcmVuZGVyaW5nIG9mIHRoZSBmb3JtIGNvbnRhaW5lciBsYWJlbHNcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwiYm9vbGVhblwiIH0pXG5cdHVzZUZvcm1Db250YWluZXJMYWJlbHM/OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBUb2dnbGUgUHJldmlldzogUGFydCBvZiBQcmV2aWV3IC8gUHJldmlldyB2aWEgJ1Nob3cgTW9yZScgQnV0dG9uXG5cdCAqL1xuXHRAYmxvY2tBdHRyaWJ1dGUoeyB0eXBlOiBcImJvb2xlYW5cIiB9KVxuXHRwYXJ0T2ZQcmV2aWV3ID0gdHJ1ZTtcblxuXHQvKipcblx0ICogVGhlIHRpdGxlIG9mIHRoZSBmb3JtIGNvbnRyb2wuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIsIGlzUHVibGljOiB0cnVlIH0pXG5cdHRpdGxlPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHRoZSBcImFyaWEtbGV2ZWxcIiBvZiB0aGUgZm9ybSB0aXRsZSwgdGl0bGVzIG9mIGludGVybmFsbHkgdXNlZCBmb3JtIGNvbnRhaW5lcnMgYXJlIG5lc3RlZCBzdWJzZXF1ZW50bHlcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic2FwLnVpLmNvcmUuVGl0bGVMZXZlbFwiLCBpc1B1YmxpYzogdHJ1ZSB9KVxuXHR0aXRsZUxldmVsOiBUaXRsZUxldmVsID0gVGl0bGVMZXZlbC5BdXRvO1xuXG5cdC8qKlxuXHQgKiBQcm9wZXJ0eSBhZGRlZCB0byBhc3NvY2lhdGUgdGhlIHN1cGVyb3JkaW5hdGUgdGl0bGVcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0cHVibGljIGFyaWFMYWJlbGxlZEJ5Pzogc3RyaW5nW107XG5cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRkaXNwbGF5TW9kZT86IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uO1xuXG5cdC8qKlxuXHQgKiBcdElmIHNldCB0byBmYWxzZSwgdGhlIEZvcm0gaXMgbm90IHJlbmRlcmVkLlxuXHQgKi9cblx0QGJsb2NrQXR0cmlidXRlKHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRpc1Zpc2libGUgPSBcInRydWVcIjtcblx0Ly8gSW5kZXBlbmRlbnQgZnJvbSB0aGUgZm9ybSB0aXRsZSwgY2FuIGJlIGEgYml0IGNvbmZ1c2luZyBpbiBzdGFuZGFsb25lIHVzYWdlIGF0IGlzIG5vdCBzaG93aW5nIGFueXRoaW5nIGJ5IGRlZmF1bHRcblxuXHQvLyBKdXN0IHByb3hpZWQgZG93biB0byB0aGUgRmllbGQgbWF5IG5lZWQgdG8gc2VlIGlmIG5lZWRlZCBvciBub3Rcblx0QGJsb2NrRXZlbnQoKVxuXHRvbkNoYW5nZT86IHN0cmluZztcblxuXHRAYmxvY2tBZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5mb3JtLkZvcm1FbGVtZW50XCIsIGlzUHVibGljOiB0cnVlLCBzbG90OiBcImZvcm1FbGVtZW50c1wiLCBpc0RlZmF1bHQ6IHRydWUgfSlcblx0Zm9ybUVsZW1lbnRzPzogb2JqZWN0W107XG5cblx0LyoqXG5cdCAqIERlZmluZXMgdGhlIGxheW91dCB0byBiZSB1c2VkIHdpdGhpbiB0aGUgZm9ybS5cblx0ICogSXQgZGVmYXVsdHMgdG8gdGhlIENvbHVtbkxheW91dCwgYnV0IHlvdSBjYW4gYWxzbyB1c2UgYSBSZXNwb25zaXZlR3JpZExheW91dC5cblx0ICogQWxsIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBSZXNwb25zaXZlR3JpZExheW91dCBjYW4gYmUgYWRkZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBibG9ja0F0dHJpYnV0ZSh7IHR5cGU6IFwib2JqZWN0XCIsIGlzUHVibGljOiB0cnVlIH0pXG5cdGxheW91dDogRm9ybUxheW91dEluZm9ybWF0aW9uID0geyB0eXBlOiBcIkNvbHVtbkxheW91dFwiLCBjb2x1bW5zTTogMywgY29sdW1uc1hMOiA2LCBjb2x1bW5zTDogNCwgbGFiZWxDZWxsc0xhcmdlOiAxMiB9O1xuXG5cdC8vIFVzZWZ1bCBmb3Igb3VyIGR5bmFtaWMgdGhpbmcgYnV0IGFsc28gZGVwZW5kcyBvbiB0aGUgbWV0YWRhdGEgLT4gbWFrZSBzdXJlIHRoaXMgaXMgdGFrZW4gaW50byBhY2NvdW50XG5cdF9lZGl0YWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cblx0X2FwaUlkOiBzdHJpbmc7XG5cblx0X2NvbnRlbnRJZDogc3RyaW5nO1xuXG5cdGZhY2V0VHlwZT86IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPEZvcm1CbG9jaz4sIGNvbmZpZ3VyYXRpb246IHVua25vd24sIG1TZXR0aW5nczogVGVtcGxhdGVQcm9jZXNzb3JTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BzLCBjb25maWd1cmF0aW9uLCBtU2V0dGluZ3MpO1xuXHRcdGlmICh0aGlzLm1ldGFQYXRoICYmIHRoaXMuY29udGV4dFBhdGggJiYgKHRoaXMuZm9ybUNvbnRhaW5lcnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmZvcm1Db250YWluZXJzID09PSBudWxsKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRleHRPYmplY3RQYXRoID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEZpZWxkR3JvdXBUeXBlIHwgQ29sbGVjdGlvbkZhY2V0IHwgUmVmZXJlbmNlRmFjZXQ+KFxuXHRcdFx0XHR0aGlzLm1ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmNvbnRleHRQYXRoXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3QgbUV4dHJhU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRsZXQgb0ZhY2V0RGVmaW5pdGlvbiA9IG9Db250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3Q7XG5cdFx0XHRsZXQgaGFzRmllbGRHcm91cCA9IGZhbHNlO1xuXHRcdFx0aWYgKG9GYWNldERlZmluaXRpb24gJiYgb0ZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGUpIHtcblx0XHRcdFx0Ly8gV3JhcCB0aGUgZmFjZXQgaW4gYSBmYWtlIEZhY2V0IGFubm90YXRpb25cblx0XHRcdFx0aGFzRmllbGRHcm91cCA9IHRydWU7XG5cdFx0XHRcdG9GYWNldERlZmluaXRpb24gPSB7XG5cdFx0XHRcdFx0JFR5cGU6IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0LFxuXHRcdFx0XHRcdExhYmVsOiBvRmFjZXREZWZpbml0aW9uLkxhYmVsLFxuXHRcdFx0XHRcdFRhcmdldDoge1xuXHRcdFx0XHRcdFx0JHRhcmdldDogb0ZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdGZ1bGx5UXVhbGlmaWVkTmFtZTogb0ZhY2V0RGVmaW5pdGlvbi5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdFx0XHRwYXRoOiBcIlwiLFxuXHRcdFx0XHRcdFx0dGVybTogXCJcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiQW5ub3RhdGlvblBhdGhcIixcblx0XHRcdFx0XHRcdHZhbHVlOiBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKG9Db250ZXh0T2JqZWN0UGF0aClcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGFubm90YXRpb25zOiB7fSxcblx0XHRcdFx0XHRmdWxseVF1YWxpZmllZE5hbWU6IG9GYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lXG5cdFx0XHRcdH0gYXMgdW5rbm93biBhcyBSZWZlcmVuY2VGYWNldDtcblx0XHRcdFx0aWYgKHRoaXMuZm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0bUV4dHJhU2V0dGluZ3Nbb0ZhY2V0RGVmaW5pdGlvbi5UYXJnZXQudmFsdWVdID0geyBmaWVsZHM6IHRoaXMuZm9ybUVsZW1lbnRzIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb0NvbnZlcnRlckNvbnRleHQgPSB0aGlzLmdldENvbnZlcnRlckNvbnRleHQoXG5cdFx0XHRcdG9Db250ZXh0T2JqZWN0UGF0aCxcblx0XHRcdFx0Lyp0aGlzLmNvbnRleHRQYXRoKi8gdW5kZWZpbmVkLFxuXHRcdFx0XHRtU2V0dGluZ3MsXG5cdFx0XHRcdG1FeHRyYVNldHRpbmdzXG5cdFx0XHQpO1xuXHRcdFx0Y29uc3Qgb0Zvcm1EZWZpbml0aW9uID0gY3JlYXRlRm9ybURlZmluaXRpb24ob0ZhY2V0RGVmaW5pdGlvbiwgdGhpcy5pc1Zpc2libGUsIG9Db252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGlmIChoYXNGaWVsZEdyb3VwKSB7XG5cdFx0XHRcdG9Gb3JtRGVmaW5pdGlvbi5mb3JtQ29udGFpbmVyc1swXS5hbm5vdGF0aW9uUGF0aCA9IHRoaXMubWV0YVBhdGguZ2V0UGF0aCgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5mb3JtQ29udGFpbmVycyA9IG9Gb3JtRGVmaW5pdGlvbi5mb3JtQ29udGFpbmVycztcblx0XHRcdHRoaXMudXNlRm9ybUNvbnRhaW5lckxhYmVscyA9IG9Gb3JtRGVmaW5pdGlvbi51c2VGb3JtQ29udGFpbmVyTGFiZWxzO1xuXHRcdFx0dGhpcy5mYWNldFR5cGUgPSBvRmFjZXREZWZpbml0aW9uICYmIChvRmFjZXREZWZpbml0aW9uLiRUeXBlIGFzIHN0cmluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZmFjZXRUeXBlID0gdGhpcy5tZXRhUGF0aC5nZXRPYmplY3QoKT8uJFR5cGU7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm1ldGFQYXRoICYmIHRoaXMuY29udGV4dFBhdGgpIHtcblx0XHRcdGNvbnN0IG9Db250ZXh0T2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxDb2xsZWN0aW9uRmFjZXQgfCBSZWZlcmVuY2VGYWNldD4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0XHRjb25zdCBvQ29udmVydGVyQ29udGV4dCA9IHRoaXMuZ2V0Q29udmVydGVyQ29udGV4dChvQ29udGV4dE9iamVjdFBhdGgsIHRoaXMuY29udGV4dFBhdGguZ2V0UGF0aCgpLCBtU2V0dGluZ3MsIHt9KTtcblx0XHRcdGlmIChvQ29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0KSB7XG5cdFx0XHRcdGNvbnN0IHNlY3Rpb25zID0gb0NvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdFx0bGV0IHRhcmdldExheW91dDtcblx0XHRcdFx0aWYgKG9Db250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QuSUQgJiYgc2VjdGlvbnNbb0NvbnRleHRPYmplY3RQYXRoLnRhcmdldE9iamVjdC5JRC50b1N0cmluZygpXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGFyZ2V0TGF5b3V0ID0gKHNlY3Rpb25zW29Db250ZXh0T2JqZWN0UGF0aC50YXJnZXRPYmplY3QuSUQudG9TdHJpbmcoKV0gYXMgRm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbikubGF5b3V0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghdGFyZ2V0TGF5b3V0KSB7XG5cdFx0XHRcdFx0Y29uc3QgbWFuaWZlc3RGb3JtQ29uZmlndXJhdGlvbiA9IG9Db252ZXJ0ZXJDb250ZXh0LmdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248Rm9ybU1hbmlmZXN0Q29uZmlndXJhdGlvbj4oXG5cdFx0XHRcdFx0XHRvQ29udmVydGVyQ29udGV4dC5nZXRSZWxhdGl2ZUFubm90YXRpb25QYXRoKFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dE9iamVjdFBhdGgudGFyZ2V0T2JqZWN0Py5mdWxseVF1YWxpZmllZE5hbWUgPz8gXCJcIixcblx0XHRcdFx0XHRcdFx0b0NvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVR5cGVcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChtYW5pZmVzdEZvcm1Db25maWd1cmF0aW9uPy5sYXlvdXQpIHtcblx0XHRcdFx0XHRcdHRhcmdldExheW91dCA9IG1hbmlmZXN0Rm9ybUNvbmZpZ3VyYXRpb24ubGF5b3V0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGFyZ2V0TGF5b3V0KSB7XG5cdFx0XHRcdFx0dGhpcy5sYXlvdXQgPSB0YXJnZXRMYXlvdXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIXRoaXMuaXNQdWJsaWMpIHtcblx0XHRcdHRoaXMuX2FwaUlkID0gdGhpcy5jcmVhdGVJZChcIkZvcm1cIikhO1xuXHRcdFx0dGhpcy5fY29udGVudElkID0gdGhpcy5pZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5fYXBpSWQgPSB0aGlzLmlkO1xuXHRcdFx0dGhpcy5fY29udGVudElkID0gYCR7dGhpcy5pZH0tY29udGVudGA7XG5cdFx0fVxuXHRcdC8vIGlmIGRpc3BsYXlNb2RlID09PSB0cnVlIC0+IF9lZGl0YWJsZSA9IGZhbHNlXG5cdFx0Ly8gaWYgZGlzcGxheU1vZGUgPT09IGZhbHNlIC0+IF9lZGl0YWJsZSA9IHRydWVcblx0XHQvLyAgPT4gaWYgZGlzcGxheU1vZGUgPT09IHtteUJpbmRpbmdWYWx1ZX0gLT4gX2VkaXRhYmxlID0ge215QmluZGluZ1ZhbHVlfSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZVxuXHRcdC8vIGlmIERpc3BsYXlNb2RlID09PSB1bmRlZmluZWQgLT4gX2VkaXRhYmxlID0ge3VpPi9pc0VkaXRhYmxlfVxuXHRcdGlmICh0aGlzLmRpc3BsYXlNb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuX2VkaXRhYmxlID0gY29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKHJlc29sdmVCaW5kaW5nU3RyaW5nKHRoaXMuZGlzcGxheU1vZGUsIFwiYm9vbGVhblwiKSwgZmFsc2UpLCB0cnVlLCBmYWxzZSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9lZGl0YWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKFVJLklzRWRpdGFibGUpO1xuXHRcdH1cblx0fVxuXG5cdGdldERhdGFGaWVsZENvbGxlY3Rpb24oZm9ybUNvbnRhaW5lcjogRm9ybUNvbnRhaW5lciwgZmFjZXRDb250ZXh0OiBDb250ZXh0KTogc3RyaW5nIHtcblx0XHRjb25zdCBmYWNldCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhmYWNldENvbnRleHQpLnRhcmdldE9iamVjdCBhcyBGYWNldFR5cGVzO1xuXHRcdGxldCBuYXZpZ2F0aW9uUGF0aDtcblx0XHRsZXQgaWRQYXJ0O1xuXHRcdGlmIChmYWNldC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQpIHtcblx0XHRcdG5hdmlnYXRpb25QYXRoID0gQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChmYWNldC5UYXJnZXQudmFsdWUpO1xuXHRcdFx0aWRQYXJ0ID0gZmFjZXQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoUGF0aCA9IHRoaXMuY29udGV4dFBhdGguZ2V0UGF0aCgpO1xuXHRcdFx0bGV0IGZhY2V0UGF0aCA9IGZhY2V0Q29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRpZiAoZmFjZXRQYXRoLnN0YXJ0c1dpdGgoY29udGV4dFBhdGhQYXRoKSkge1xuXHRcdFx0XHRmYWNldFBhdGggPSBmYWNldFBhdGguc3Vic3RyaW5nKGNvbnRleHRQYXRoUGF0aC5sZW5ndGgpO1xuXHRcdFx0XHRpZiAoZmFjZXRQYXRoLmNoYXJBdCgwKSA9PT0gXCIvXCIpIHtcblx0XHRcdFx0XHRmYWNldFBhdGggPSBmYWNldFBhdGguc2xpY2UoMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG5hdmlnYXRpb25QYXRoID0gQW5ub3RhdGlvbkhlbHBlci5nZXROYXZpZ2F0aW9uUGF0aChmYWNldFBhdGgpO1xuXHRcdFx0aWRQYXJ0ID0gZmFjZXRQYXRoO1xuXHRcdH1cblx0XHRjb25zdCB0aXRsZUxldmVsID0gRm9ybUhlbHBlci5nZXRGb3JtQ29udGFpbmVyVGl0bGVMZXZlbCh0aGlzLnRpdGxlLCB0aGlzLnRpdGxlTGV2ZWwpO1xuXHRcdGNvbnN0IHRpdGxlID0gdGhpcy51c2VGb3JtQ29udGFpbmVyTGFiZWxzICYmIGZhY2V0LkxhYmVsID8gZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZhY2V0LkxhYmVsKSA6IFwiXCI7XG5cblx0XHQvLyBFbmhhbmNlOiBnZW5lcmF0ZSBhIHN0YWJsZSBmb3JtIGNvbnRhaW5lciBpZCB3aGVuZXZlciB3ZSBoYXZlIGEgZGVyaXZlZCBpZFBhcnQgZXZlbiBpZiB0aGlzLmlkIGlzIHVuZGVmaW5lZC5cblx0XHQvLyBQcmV2aW91cyBsb2dpYyBvbmx5IGdlbmVyYXRlZCB3aGVuIChpbXBsaWNpdGx5KSBndWFyZGluZyBieSBvbmUgY29uZGl0aW9uOyBub3cgd2UgYWxsb3cgZmFsbGJhY2sgdG8gaWRQYXJ0LlxuXHRcdC8vIFdlIHN0aWxsIHByb3RlY3QgZ2V0Rm9ybUNvbnRhaW5lcklEIGZyb20gYmVpbmcgY2FsbGVkIHdpdGggYW4gdW5kZWZpbmVkIGlkUGFydC5cblx0XHRjb25zdCBpZCA9ICh0aGlzLmlkICE9PSB1bmRlZmluZWQgfHwgaWRQYXJ0KSAmJiBpZFBhcnQgPyBnZXRGb3JtQ29udGFpbmVySUQoaWRQYXJ0KSA6IHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB4bWxgXG5cdFx0XHRcdFx0PG1hY3JvOkZvcm1Db250YWluZXJcblx0XHRcdFx0XHR4bWxuczptYWNybz1cInNhcC5mZS5tYWNyb3NcIlxuXHRcdFx0XHRcdCR7dGhpcy5hdHRyKFwiaWRcIiwgaWQpfVxuXHRcdFx0XHRcdHRpdGxlPVwiJHt0aXRsZX1cIlxuXHRcdFx0XHRcdHRpdGxlTGV2ZWw9XCIke3RpdGxlTGV2ZWx9XCJcblx0XHRcdFx0XHRjb250ZXh0UGF0aD1cIiR7bmF2aWdhdGlvblBhdGggPyBmb3JtQ29udGFpbmVyLmVudGl0eVNldCA6IHRoaXMuY29udGV4dFBhdGh9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7ZmFjZXRDb250ZXh0fVwiXG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbj1cIiR7Zm9ybUNvbnRhaW5lci5mb3JtRWxlbWVudHN9XCJcblx0XHRcdFx0XHRuYXZpZ2F0aW9uUGF0aD1cIiR7bmF2aWdhdGlvblBhdGh9XCJcblx0XHRcdFx0XHR2aXNpYmxlPVwiJHtmb3JtQ29udGFpbmVyLmlzVmlzaWJsZX1cIlxuXHRcdFx0XHRcdGRpc3BsYXlNb2RlPVwiJHt0aGlzLmRpc3BsYXlNb2RlfVwiXG5cdFx0XHRcdFx0b25DaGFuZ2U9XCIke3RoaXMub25DaGFuZ2V9XCJcblx0XHRcdFx0XHRhY3Rpb25zPVwiJHtmb3JtQ29udGFpbmVyLmFjdGlvbnN9XCJcblx0XHRcdFx0XHR1c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlcz1cIiR7Zm9ybUNvbnRhaW5lci51c2VTaW5nbGVUZXh0QXJlYUZpZWxkQXNOb3Rlc31cIlxuXHRcdFx0XHRcdGhhc1VpSGlkZGVuQW5ub3RhdGlvbj1cIiR7Zm9ybUNvbnRhaW5lci5hbm5vdGF0aW9uSGlkZGVufVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0PG1hY3JvOmZvcm1FbGVtZW50cz5cblx0XHRcdFx0XHQ8c2xvdCBuYW1lPVwiZm9ybUVsZW1lbnRzXCIgLz5cblx0XHRcdFx0PC9tYWNybzpmb3JtRWxlbWVudHM+XG5cdFx0XHQ8L21hY3JvOkZvcm1Db250YWluZXI+YDtcblx0fVxuXG5cdGdldEZvcm1Db250YWluZXJzKCk6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0XHRpZiAodGhpcy5mb3JtQ29udGFpbmVycyEubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZmFjZXRUeXBlPy5pbmNsdWRlcyhcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNvbGxlY3Rpb25GYWNldFwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZm9ybUNvbnRhaW5lcnMhLm1hcCgoZm9ybUNvbnRhaW5lciwgZm9ybUNvbnRhaW5lcklkeCkgPT4ge1xuXHRcdFx0XHRpZiAoZm9ybUNvbnRhaW5lci5pc1Zpc2libGUpIHtcblx0XHRcdFx0XHRjb25zdCBmYWNldENvbnRleHQgPSB0aGlzLmNvbnRleHRQYXRoLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoZm9ybUNvbnRhaW5lci5hbm5vdGF0aW9uUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y29uc3QgZmFjZXQgPSBmYWNldENvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0ZmFjZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmXG5cdFx0XHRcdFx0XHRGb3JtSGVscGVyLmlzUmVmZXJlbmNlRmFjZXRQYXJ0T2ZQcmV2aWV3KGZhY2V0LCB0aGlzLnBhcnRPZlByZXZpZXcpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRpZiAoZmFjZXQuVGFyZ2V0LiRBbm5vdGF0aW9uUGF0aC4kVHlwZSA9PT0gQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcy5BZGRyZXNzVHlwZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4geG1sYDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtQ29udGFpbmVycz4ke2Zvcm1Db250YWluZXJJZHh9XCIgdmFyPVwiZm9ybUNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDx0ZW1wbGF0ZTp3aXRoIHBhdGg9XCJmb3JtQ29udGFpbmVycz4ke2Zvcm1Db250YWluZXJJZHh9L2Fubm90YXRpb25QYXRoXCIgdmFyPVwiZmFjZXRcIj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cInNhcC5mZS5tYWNyb3MuZm9ybS5BZGRyZXNzU2VjdGlvblwiIHR5cGU9XCJYTUxcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvdGVtcGxhdGU6d2l0aD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC90ZW1wbGF0ZTp3aXRoPmA7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXREYXRhRmllbGRDb2xsZWN0aW9uKGZvcm1Db250YWluZXIsIGZhY2V0Q29udGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBcIlwiO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmZhY2V0VHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5SZWZlcmVuY2VGYWNldFwiKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5mb3JtQ29udGFpbmVycyEubWFwKChmb3JtQ29udGFpbmVyKSA9PiB7XG5cdFx0XHRcdGlmIChmb3JtQ29udGFpbmVyLmlzVmlzaWJsZSkge1xuXHRcdFx0XHRcdGNvbnN0IGZhY2V0Q29udGV4dCA9IHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChmb3JtQ29udGFpbmVyLmFubm90YXRpb25QYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXREYXRhRmllbGRDb2xsZWN0aW9uKGZvcm1Db250YWluZXIsIGZhY2V0Q29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIGEgdGV4dGFyZWEgaXMgYWxvbmUgaW4gYSBmb3JtXG5cdCAqL1xuXHRjaGVja0lmVGV4dEFyZWFJc0Fsb25lKCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmZvcm1Db250YWluZXJzIS5sZW5ndGggPT09IDEpIHtcblx0XHRcdGlmICh0aGlzLmZvcm1Db250YWluZXJzIVswXS5mb3JtRWxlbWVudHMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdGNvbnN0IGZhY2V0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKFxuXHRcdFx0XHRcdHRoaXMuY29udGV4dFBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dCh0aGlzLmZvcm1Db250YWluZXJzIVswXS5hbm5vdGF0aW9uUGF0aCwgdGhpcy5jb250ZXh0UGF0aClcblx0XHRcdFx0KS50YXJnZXRPYmplY3QgYXMgRmllbGRHcm91cFR5cGUgfCBSZWZlcmVuY2VGYWNldDtcblx0XHRcdFx0bGV0IGZpZWxkR3JvdXA6IEZpZWxkR3JvdXBUeXBlIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRsZXQgaWRlbnRpZmljYXRpb246IElkZW50aWZpY2F0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHQvLyBUaGlzIGlzIG9ubHkgZm9yIG1hY3Jvczpmb3JtIHdpdGggYSBGaWVsZEdyb3VwIHRoYXQgY29udGFpbnMgb25seSBhIFRleHRBcmVhXG5cdFx0XHRcdGlmIChmYWNldC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwVHlwZVwiKSB7XG5cdFx0XHRcdFx0ZmllbGRHcm91cCA9IGZhY2V0O1xuXHRcdFx0XHR9IGVsc2UgaWYgKGhhc0ZpZWxkR3JvdXBUYXJnZXQoZmFjZXQpKSB7XG5cdFx0XHRcdFx0ZmllbGRHcm91cCA9IGZhY2V0Py5UYXJnZXQ/LiR0YXJnZXQgYXMgRmllbGRHcm91cFR5cGU7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaGFzSWRlbnRpZmljYXRpb25UYXJnZXQoZmFjZXQpKSB7XG5cdFx0XHRcdFx0aWRlbnRpZmljYXRpb24gPSBmYWNldD8uVGFyZ2V0Py4kdGFyZ2V0IGFzIElkZW50aWZpY2F0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpZWxkR3JvdXA/LkRhdGEubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRcdFx0cmV0dXJuIChmaWVsZEdyb3VwLkRhdGFbMF0gYXMgRGF0YUZpZWxkKT8uVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGlkZW50aWZpY2F0aW9uPy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0XHRyZXR1cm4gKGlkZW50aWZpY2F0aW9uWzBdIGFzIERhdGFGaWVsZCk/LlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIHRoZSBwcm9wZXIgbGF5b3V0IGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBgbGF5b3V0YCBwcm9wZXJ0eSBkZWZpbmVkIGV4dGVybmFsbHkuXG5cdCAqIEBwYXJhbSBpc1RleHRBcmVhQWxvbmUgV2hldGhlciB0aGUgc2VjdGlvbiBjb250YWlucyBhIGxvbmVseSBUZXh0QXJlYSBpbnNpZGVcblx0ICogQHJldHVybnMgVGhlIGxheW91dCBpbmZvcm1hdGlvbiBmb3IgdGhlIHhtbC5cblx0ICovXG5cdGdldExheW91dEluZm9ybWF0aW9uKGlzVGV4dEFyZWFBbG9uZTogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0c3dpdGNoICh0aGlzLmxheW91dC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiUmVzcG9uc2l2ZUdyaWRMYXlvdXRcIjpcblx0XHRcdFx0cmV0dXJuIHhtbGA8ZjpSZXNwb25zaXZlR3JpZExheW91dCBhZGp1c3RMYWJlbFNwYW49XCIke3RoaXMubGF5b3V0LmFkanVzdExhYmVsU3Bhbn1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha3BvaW50TD1cIiR7dGhpcy5sYXlvdXQuYnJlYWtwb2ludEx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtwb2ludE09XCIke3RoaXMubGF5b3V0LmJyZWFrcG9pbnRNfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrcG9pbnRYTD1cIiR7dGhpcy5sYXlvdXQuYnJlYWtwb2ludFhMfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbHVtbnNMPVwiJHtpc1RleHRBcmVhQWxvbmUgPyAxIDogdGhpcy5sYXlvdXQuY29sdW1uc0x9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uc009XCIke2lzVGV4dEFyZWFBbG9uZSA/IDEgOiB0aGlzLmxheW91dC5jb2x1bW5zTX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zWEw9XCIke2lzVGV4dEFyZWFBbG9uZSA/IDEgOiB0aGlzLmxheW91dC5jb2x1bW5zWEx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZW1wdHlTcGFuTD1cIiR7dGhpcy5sYXlvdXQuZW1wdHlTcGFuTH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbXB0eVNwYW5NPVwiJHt0aGlzLmxheW91dC5lbXB0eVNwYW5NfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVtcHR5U3BhblM9XCIke3RoaXMubGF5b3V0LmVtcHR5U3BhblN9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZW1wdHlTcGFuWEw9XCIke3RoaXMubGF5b3V0LmVtcHR5U3BhblhMfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsU3Bhbkw9XCIke3RoaXMubGF5b3V0LmxhYmVsU3Bhbkx9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGFiZWxTcGFuTT1cIiR7dGhpcy5sYXlvdXQubGFiZWxTcGFuTX1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbFNwYW5TPVwiJHt0aGlzLmxheW91dC5sYWJlbFNwYW5TfVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsU3BhblhMPVwiJHt0aGlzLmxheW91dC5sYWJlbFNwYW5YTH1cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzaW5nbGVDb250YWluZXJGdWxsU2l6ZT1cIiR7dGhpcy5sYXlvdXQuc2luZ2xlQ29udGFpbmVyRnVsbFNpemV9XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZERlc2lnbj1cIiR7dGhpcy5sYXlvdXQuYmFja2dyb3VuZERlc2lnbn1cIiAvPmA7XG5cdFx0XHRjYXNlIFwiQ29sdW1uTGF5b3V0XCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4geG1sYDxmOkNvbHVtbkxheW91dFxuXHRcdFx0XHRcdFx0XHRcdGNvbHVtbnNNPVwiJHtpc1RleHRBcmVhQWxvbmUgPyAxIDogdGhpcy5sYXlvdXQuY29sdW1uc019XCJcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW5zTD1cIiR7aXNUZXh0QXJlYUFsb25lID8gMSA6IHRoaXMubGF5b3V0LmNvbHVtbnNMfVwiXG5cdFx0XHRcdFx0XHRcdFx0Y29sdW1uc1hMPVwiJHtpc1RleHRBcmVhQWxvbmUgPyAxIDogdGhpcy5sYXlvdXQuY29sdW1uc1hMfVwiXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWxDZWxsc0xhcmdlPVwiJHt0aGlzLmxheW91dC5sYWJlbENlbGxzTGFyZ2V9XCJcblx0XHRcdFx0XHRcdFx0XHRlbXB0eUNlbGxzTGFyZ2U9XCIke3RoaXMubGF5b3V0LmVtcHR5Q2VsbHNMYXJnZX1cIlxuXHRcdFx0XHRcdFx0XHRcdGJhY2tncm91bmREZXNpZ249XCIke3RoaXMubGF5b3V0LmJhY2tncm91bmREZXNpZ259XCIgLz5gO1xuXHRcdH1cblx0fVxuXG5cdGdldFRlbXBsYXRlKCk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgb25DaGFuZ2VTdHIgPSAodGhpcy5vbkNoYW5nZSAmJiB0aGlzLm9uQ2hhbmdlLnJlcGxhY2UoXCJ7XCIsIFwiXFxcXHtcIikucmVwbGFjZShcIn1cIiwgXCJcXFxcfVwiKSkgfHwgXCJcIjtcblx0XHRjb25zdCBtZXRhUGF0aFBhdGggPSB0aGlzLm1ldGFQYXRoLmdldFBhdGgoKTtcblx0XHRjb25zdCBjb250ZXh0UGF0aFBhdGggPSB0aGlzLmNvbnRleHRQYXRoLmdldFBhdGgoKTtcblx0XHRjb25zdCBpc1RleHRBcmVhQWxvbmUgPSB0aGlzLmNoZWNrSWZUZXh0QXJlYUlzQWxvbmUoKTtcblxuXHRcdGlmICghdGhpcy5pc1Zpc2libGUpIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4geG1sYDxtYWNybzpGb3JtQVBJIHhtbG5zOm1hY3JvPVwic2FwLmZlLm1hY3Jvcy5mb3JtXCJcblx0XHRcdFx0XHR4bWxuczptYWNyb2RhdGE9XCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCJcblx0XHRcdFx0XHR4bWxuczpmPVwic2FwLnVpLmxheW91dC5mb3JtXCJcblx0XHRcdFx0XHR4bWxuczpmbD1cInNhcC51aS5mbFwiXG5cdFx0XHRcdFx0eG1sbnM6ZHQ9XCJzYXAudWkuZHRcIlxuXHRcdFx0XHRcdHhtbG5zOmNvcmVDb250cm9scz1cInNhcC5mZS5jb3JlLmNvbnRyb2xzXCJcblx0XHRcdFx0XHRpZD1cIiR7dGhpcy5fYXBpSWR9XCJcblx0XHRcdFx0XHRtZXRhUGF0aD1cIiR7bWV0YVBhdGhQYXRofVwiXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9XCIke2NvbnRleHRQYXRoUGF0aH1cIj5cblx0XHRcdFx0PGY6Rm9ybVxuXHRcdFx0XHRcdGZsOmRlbGVnYXRlPSd7XG5cdFx0XHRcdFx0XHRcIm5hbWVcIjogXCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybURlbGVnYXRlXCIsXG5cdFx0XHRcdFx0XHRcImRlbGVnYXRlVHlwZVwiOiBcImNvbXBsZXRlXCJcblx0XHRcdFx0XHR9J1xuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJzYXAvZmUvbWFjcm9zL2Zvcm0vRm9ybS5kZXNpZ250aW1lXCJcblx0XHRcdFx0XHRpZD1cIiR7dGhpcy5fY29udGVudElkfVwiXG5cdFx0XHRcdFx0ZWRpdGFibGU9XCIke3RoaXMuX2VkaXRhYmxlfVwiXG5cdFx0XHRcdFx0dmlzaWJsZT1cIiR7dGhpcy5pc1Zpc2libGV9XCJcblx0XHRcdFx0XHRtYWNyb2RhdGE6bmF2aWdhdGlvblBhdGg9XCIke2NvbnRleHRQYXRoUGF0aH1cIlxuXHRcdFx0XHRcdG1hY3JvZGF0YTptZXRhUGF0aD1cIiR7bWV0YVBhdGhQYXRofVwiXG5cdFx0XHRcdFx0bWFjcm9kYXRhOm9uQ2hhbmdlPVwiJHtvbkNoYW5nZVN0cn1cIlxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PVwiJHt0aGlzLmFyaWFMYWJlbGxlZEJ5fVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHQke3RoaXMuYWRkQ29uZGl0aW9uYWxseShcblx0XHRcdFx0XHRcdHRoaXMudGl0bGUgIT09IHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdHhtbGA8Zjp0aXRsZT5cblx0XHRcdFx0XHRcdFx0PGNvcmU6VGl0bGUgbGV2ZWw9XCIke3RoaXMudGl0bGVMZXZlbH1cIiB0ZXh0PVwiJHt0aGlzLnRpdGxlfVwiIC8+XG5cdFx0XHRcdFx0XHQ8L2Y6dGl0bGU+YFxuXHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PGY6bGF5b3V0PlxuXHRcdFx0XHRcdCR7dGhpcy5nZXRMYXlvdXRJbmZvcm1hdGlvbihpc1RleHRBcmVhQWxvbmUpfVxuXG5cdFx0XHRcdFx0PC9mOmxheW91dD5cblx0XHRcdFx0XHQ8Zjpmb3JtQ29udGFpbmVycz5cblx0XHRcdFx0XHRcdCR7dGhpcy5nZXRGb3JtQ29udGFpbmVycygpfVxuXHRcdFx0XHRcdDwvZjpmb3JtQ29udGFpbmVycz5cblx0XHRcdFx0XHQ8ZjpkZXBlbmRlbnRzPlxuXHRcdFx0XHRcdFx0PGNvcmVDb250cm9sczpIaWRlRm9ybUdyb3VwQXV0b21hdGljYWxseSAvPlxuXHRcdFx0XHRcdDwvZjpkZXBlbmRlbnRzPlxuXHRcdFx0XHQ8L2Y6Rm9ybT5cblx0XHRcdDwvbWFjcm86Rm9ybUFQST5gO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1DQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVpBLElBbUJxQkEsU0FBUyxJQUFBQyxJQUFBLEdBTjdCQyxtQkFBbUIsQ0FBQztJQUNwQkMsSUFBSSxFQUFFLE1BQU07SUFDWkMsU0FBUyxFQUFFLHdCQUF3QjtJQUNuQ0MsZUFBZSxFQUFF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QUFBLEdBQUE2SSx5QkFBQSxDQUFBM0osT0FBQSxDQUFBZ0YsU0FBQSxZQUFBN0YsS0FBQTtJQUFBeUssWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFoSixZQUFBLEdBQUE0SSx5QkFBQSxDQUFBM0osT0FBQSxDQUFBZ0YsU0FBQSxpQkFBQTVGLEtBQUE7SUFBQXdLLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUEsV0FBQUEsQ0FBQTtNQUFBLE9BYUtDLFVBQVUsQ0FBQ0MsSUFBSTtJQUFBO0VBQUEsSUFBQWpKLFlBQUEsR0FBQTJJLHlCQUFBLENBQUEzSixPQUFBLENBQUFnRixTQUFBLHFCQUFBM0YsTUFBQTtJQUFBdUssWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE5SSxhQUFBLEdBQUEwSSx5QkFBQSxDQUFBM0osT0FBQSxDQUFBZ0YsU0FBQSxrQkFBQTFGLE1BQUE7SUFBQXNLLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBN0ksYUFBQSxHQUFBeUkseUJBQUEsQ0FBQTNKLE9BQUEsQ0FBQWdGLFNBQUEsZ0JBQUF6RixNQUFBO0lBQUFxSyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQWU1QixNQUFNO0lBQUE7RUFBQSxJQUFBNUksYUFBQSxHQUFBd0kseUJBQUEsQ0FBQTNKLE9BQUEsQ0FBQWdGLFNBQUEsZUFBQXhGLE1BQUE7SUFBQW9LLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBM0ksYUFBQSxHQUFBdUkseUJBQUEsQ0FBQTNKLE9BQUEsQ0FBQWdGLFNBQUEsbUJBQUF0RixNQUFBO0lBQUFrSyxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTFJLGFBQUEsR0FBQXNJLHlCQUFBLENBQUEzSixPQUFBLENBQUFnRixTQUFBLGFBQUFsRixNQUFBO0lBQUE4SixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQWlCYztRQUFFdEwsSUFBSSxFQUFFLGNBQWM7UUFBRTZKLFFBQVEsRUFBRSxDQUFDO1FBQUVDLFNBQVMsRUFBRSxDQUFDO1FBQUVGLFFBQVEsRUFBRSxDQUFDO1FBQUVhLGVBQWUsRUFBRTtNQUFHLENBQUM7SUFBQTtFQUFBLElBQUFsSixPQUFBLE1BQUFELE1BQUE7RUFBQThFLFFBQUEsR0FBQTdHLFNBQUE7RUFBQSxPQUFBNkcsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
import type { TemplateProcessorSettings } from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor";
|
|
21
21
|
import { xml } from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor";
|
|
22
22
|
import BuildingBlockTemplatingBase from "sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase";
|
|
23
|
+
import type { FormLayoutInformation, FormManifestConfiguration } from "sap/fe/core/converters/ManifestSettings";
|
|
23
24
|
import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
|
|
24
25
|
import { hasFieldGroupTarget, hasIdentificationTarget } from "sap/fe/core/converters/annotations/DataField";
|
|
25
26
|
import type { FormContainer } from "sap/fe/core/converters/controls/Common/Form";
|
|
@@ -29,19 +30,9 @@ import { UI } from "sap/fe/core/helpers/BindingHelper";
|
|
|
29
30
|
import { getContextRelativeTargetObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
30
31
|
import FormHelper from "sap/fe/macros/form/FormHelper";
|
|
31
32
|
import { TitleLevel } from "sap/ui/core/library";
|
|
32
|
-
import type { $ColumnLayoutSettings } from "sap/ui/layout/form/ColumnLayout";
|
|
33
|
-
import type { $ResponsiveGridLayoutSettings } from "sap/ui/layout/form/ResponsiveGridLayout";
|
|
34
33
|
import type Context from "sap/ui/model/Context";
|
|
35
34
|
import AnnotationHelper from "sap/ui/model/odata/v4/AnnotationHelper";
|
|
36
35
|
|
|
37
|
-
type ColumnLayout = $ColumnLayoutSettings & {
|
|
38
|
-
type: "ColumnLayout";
|
|
39
|
-
};
|
|
40
|
-
type ResponsiveGridLayout = $ResponsiveGridLayoutSettings & {
|
|
41
|
-
type: "ResponsiveGridLayout";
|
|
42
|
-
};
|
|
43
|
-
type FormLayoutInformation = ColumnLayout | ResponsiveGridLayout;
|
|
44
|
-
|
|
45
36
|
/**
|
|
46
37
|
* Building block for creating a Form based on the metadata provided by OData V4.
|
|
47
38
|
* <br>
|
|
@@ -156,6 +147,7 @@ export default class FormBlock extends BuildingBlockTemplatingBase {
|
|
|
156
147
|
* Defines the layout to be used within the form.
|
|
157
148
|
* It defaults to the ColumnLayout, but you can also use a ResponsiveGridLayout.
|
|
158
149
|
* All the properties of the ResponsiveGridLayout can be added to the configuration.
|
|
150
|
+
* @public
|
|
159
151
|
*/
|
|
160
152
|
@blockAttribute({ type: "object", isPublic: true })
|
|
161
153
|
layout: FormLayoutInformation = { type: "ColumnLayout", columnsM: 3, columnsXL: 6, columnsL: 4, labelCellsLarge: 12 };
|
|
@@ -217,6 +209,31 @@ export default class FormBlock extends BuildingBlockTemplatingBase {
|
|
|
217
209
|
} else {
|
|
218
210
|
this.facetType = this.metaPath.getObject()?.$Type;
|
|
219
211
|
}
|
|
212
|
+
if (this.metaPath && this.contextPath) {
|
|
213
|
+
const oContextObjectPath = getInvolvedDataModelObjects<CollectionFacet | ReferenceFacet>(this.metaPath, this.contextPath);
|
|
214
|
+
const oConverterContext = this.getConverterContext(oContextObjectPath, this.contextPath.getPath(), mSettings, {});
|
|
215
|
+
if (oContextObjectPath.targetObject) {
|
|
216
|
+
const sections = oConverterContext.getManifestWrapper().getSections();
|
|
217
|
+
let targetLayout;
|
|
218
|
+
if (oContextObjectPath.targetObject.ID && sections[oContextObjectPath.targetObject.ID.toString()] !== undefined) {
|
|
219
|
+
targetLayout = (sections[oContextObjectPath.targetObject.ID.toString()] as FormManifestConfiguration).layout;
|
|
220
|
+
}
|
|
221
|
+
if (!targetLayout) {
|
|
222
|
+
const manifestFormConfiguration = oConverterContext.getManifestControlConfiguration<FormManifestConfiguration>(
|
|
223
|
+
oConverterContext.getRelativeAnnotationPath(
|
|
224
|
+
oContextObjectPath.targetObject?.fullyQualifiedName ?? "",
|
|
225
|
+
oContextObjectPath.targetEntityType
|
|
226
|
+
)
|
|
227
|
+
);
|
|
228
|
+
if (manifestFormConfiguration?.layout) {
|
|
229
|
+
targetLayout = manifestFormConfiguration.layout;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (targetLayout) {
|
|
233
|
+
this.layout = targetLayout;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
220
237
|
|
|
221
238
|
if (!this.isPublic) {
|
|
222
239
|
this._apiId = this.createId("Form")!;
|
|
@@ -258,7 +275,10 @@ export default class FormBlock extends BuildingBlockTemplatingBase {
|
|
|
258
275
|
const titleLevel = FormHelper.getFormContainerTitleLevel(this.title, this.titleLevel);
|
|
259
276
|
const title = this.useFormContainerLabels && facet.Label ? getExpressionFromAnnotation(facet.Label) : "";
|
|
260
277
|
|
|
261
|
-
|
|
278
|
+
// Enhance: generate a stable form container id whenever we have a derived idPart even if this.id is undefined.
|
|
279
|
+
// Previous logic only generated when (implicitly) guarding by one condition; now we allow fallback to idPart.
|
|
280
|
+
// We still protect getFormContainerID from being called with an undefined idPart.
|
|
281
|
+
const id = (this.id !== undefined || idPart) && idPart ? getFormContainerID(idPart) : undefined;
|
|
262
282
|
|
|
263
283
|
return xml`
|
|
264
284
|
<macro:FormContainer
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
buttonMode="{= DEFAULTACTIONHANDLER.getButtonMode(${action>})}"
|
|
26
26
|
defaultAction="{= DEFAULTACTIONHANDLER.getDefaultActionHandler(undefined, undefined, ${action>}, undefined, undefined, 'Form')}"
|
|
27
27
|
type="Transparent"
|
|
28
|
+
ariaDescribedBy="{= ${action>isAIOperation} === true ? 'fe::AiAction::AriaText' : undefined}"
|
|
28
29
|
>
|
|
29
30
|
<menu>
|
|
30
31
|
<Menu>
|
|
@@ -57,7 +58,7 @@
|
|
|
57
58
|
</Menu>
|
|
58
59
|
</menu>
|
|
59
60
|
<layoutData>
|
|
60
|
-
<OverflowToolbarLayoutData priority="{action>priority}" group="{action>group}" />
|
|
61
|
+
<OverflowToolbarLayoutData priority="{action>priority}" group="{= ${action>overflowGroup} || ${action>group} }" />
|
|
61
62
|
</layoutData>
|
|
62
63
|
</MenuButton>
|
|
63
64
|
</template:then>
|
|
@@ -72,12 +73,20 @@
|
|
|
72
73
|
visible="{action>visible}"
|
|
73
74
|
enabled="{action>enabled}"
|
|
74
75
|
icon="{= ${action>isAIOperation} ? COMMON.getAIIcon() : undefined }"
|
|
76
|
+
ariaDescribedBy="{= ${action>isAIOperation} === true ? 'fe::AiAction::AriaText' : undefined}"
|
|
75
77
|
>
|
|
76
78
|
<layoutData>
|
|
77
|
-
<OverflowToolbarLayoutData priority="{action>priority}" group="{action>group}" />
|
|
79
|
+
<OverflowToolbarLayoutData priority="{action>priority}" group="{= ${action>overflowGroup} || ${action>group} }" />
|
|
78
80
|
</layoutData>
|
|
79
81
|
</Button>
|
|
80
82
|
</template:elseif>
|
|
83
|
+
<template:elseif test="{= ${action>type} === 'Separator'}">
|
|
84
|
+
<ToolbarSeparator>
|
|
85
|
+
<layoutData>
|
|
86
|
+
<OverflowToolbarLayoutData group="{= ${action>overflowGroup} || ${action>group} }" />
|
|
87
|
+
</layoutData>
|
|
88
|
+
</ToolbarSeparator>
|
|
89
|
+
</template:elseif>
|
|
81
90
|
<template:else>
|
|
82
91
|
<Button
|
|
83
92
|
id="{action>id}"
|
|
@@ -91,9 +100,10 @@
|
|
|
91
100
|
visible="{action>visible}"
|
|
92
101
|
enabled="{action>enabled}"
|
|
93
102
|
macrodata:IBNData="{action>customData}"
|
|
103
|
+
ariaDescribedBy="{= ${action>isAIOperation} === true ? 'fe::AiAction::AriaText' : undefined}"
|
|
94
104
|
>
|
|
95
105
|
<layoutData>
|
|
96
|
-
<OverflowToolbarLayoutData priority="{action>priority}" group="{action>group}" />
|
|
106
|
+
<OverflowToolbarLayoutData priority="{action>priority}" group="{= ${action>overflowGroup} || ${action>group} }" />
|
|
97
107
|
</layoutData>
|
|
98
108
|
</Button>
|
|
99
109
|
</template:else>
|