@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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/CommonHelper", "sap/fe/macros/internal/valuehelp/ValueListHelper", "sap/ui/model/odata/v4/AnnotationHelper"], function (Log, BindingToolkit, CommonUtils, MetaModelConverter, Key, BindingHelper, ModelHelper, StableIdHelper, FieldControlHelper, PropertyHelper, UIFormatters, CommonHelper, ValueListHelper, AnnotationHelper) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/filter/FilterRestrictions", "sap/fe/core/converters/helpers/Key", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/FieldControlHelper", "sap/fe/core/templating/PropertyHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/CommonHelper", "sap/fe/macros/internal/valuehelp/ValueListHelper", "sap/ui/model/odata/v4/AnnotationHelper"], function (Log, BindingToolkit, CommonUtils, MetaModelConverter, FilterRestrictions, Key, BindingHelper, ModelHelper, StableIdHelper, FieldControlHelper, PropertyHelper, UIFormatters, CommonHelper, ValueListHelper, AnnotationHelper) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var getAlignmentExpression = UIFormatters.getAlignmentExpression;
|
|
@@ -172,7 +172,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
172
172
|
const oModel = propertyContext.getModel(),
|
|
173
173
|
sPropertyPath = propertyContext.getPath(),
|
|
174
174
|
sPropertyLocationPath = CommonHelper.getLocationForPropertyPath(oModel, sPropertyPath),
|
|
175
|
-
|
|
175
|
+
dataModel = MetaModelConverter.getInvolvedDataModelObjects(oModel.getContext(sPropertyLocationPath)),
|
|
176
|
+
oFilterRestrictions = FilterRestrictions.getFilterRestrictionsByDataModel(dataModel);
|
|
176
177
|
if ((sPropertyType === "Edm.DateTimeOffset" || sPropertyType === "Edm.Date" || sPropertyType === "Edm.TimeOfDay") && bSemanticDateRange && oFilterRestrictions && oFilterRestrictions.FilterAllowedExpressions && oFilterRestrictions.FilterAllowedExpressions[sProperty] && (oFilterRestrictions.FilterAllowedExpressions[sProperty].includes("SingleRange") || oFilterRestrictions.FilterAllowedExpressions[sProperty].includes("SingleValue")) || sPropertyType === "Edm.Boolean" && !bHasValueListWithFixedValues) {
|
|
177
178
|
return undefined;
|
|
178
179
|
}
|
|
@@ -830,4 +831,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
830
831
|
FieldHelper.getActionParameterVisibility.requiresIContext = true;
|
|
831
832
|
return FieldHelper;
|
|
832
833
|
}, false);
|
|
833
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJU09DdXJyZW5jeSIsIlVuaXQiLCJGaWVsZEhlbHBlciIsImdldEFjdGlvblBhcmFtZXRlclZpc2liaWxpdHkiLCJvUGFyYW0iLCJvQ29udGV4dCIsIm9QYXJhbUlmIiwiJElmIiwibGVuZ3RoIiwib05lZ1BhcmFtIiwiQW5ub3RhdGlvbkhlbHBlciIsInZhbHVlIiwiJFBhdGgiLCJ1bmRlZmluZWQiLCJwcm9wZXJ0eU5hbWUiLCJ2UHJvcGVydHkiLCJvSW50ZXJmYWNlIiwic1Byb3BlcnR5TmFtZSIsImNvbnRleHQiLCJnZXRQYXRoIiwiaW5jbHVkZXMiLCIkUHJvcGVydHlQYXRoIiwic1BhdGgiLCJzQ29udGV4dFBhdGgiLCJnZXRPYmplY3QiLCJWYWx1ZSIsImZpZWxkQ29udHJvbCIsInNQcm9wZXJ0eVBhdGgiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9GaWVsZENvbnRyb2xDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJvRmllbGRDb250cm9sIiwiZ2V0UHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIiRFbnVtTWVtYmVyIiwidmFsdWVIZWxwUHJvcGVydHkiLCJvUHJvcGVydHlDb250ZXh0IiwiYkluRmlsdGVyRmllbGQiLCJvQ29udGVudCIsInNBbm5vUGF0aCIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwic0Fubm90YXRpb24iLCJzVW5pdE9yQ3VycmVuY3lQYXRoIiwidmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsImdldElERm9yRmllbGRWYWx1ZUhlbHAiLCJzRmxleElkIiwic0lkUHJlZml4Iiwic09yaWdpbmFsUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5IiwiZ2VuZXJhdGUiLCJnZXRWYWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkIiwicHJvcGVydHlDb250ZXh0Iiwib1Byb3BlcnR5Iiwic1Byb3BlcnR5VHlwZSIsInNWaElkUHJlZml4Iiwic0VudGl0eVR5cGUiLCJzVmFsdWVIZWxwUHJvcGVydHlOYW1lIiwiYkhhc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsImJVc2VTZW1hbnRpY0RhdGVSYW5nZSIsImJTZW1hbnRpY0RhdGVSYW5nZSIsInNQcm9wZXJ0eUxvY2F0aW9uUGF0aCIsIkNvbW1vbkhlbHBlciIsImdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoIiwib0ZpbHRlclJlc3RyaWN0aW9ucyIsIkNvbW1vblV0aWxzIiwiZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlQYXRoIiwiRmlsdGVyQWxsb3dlZEV4cHJlc3Npb25zIiwiY29tcHV0ZUZpZWxkQmFzZURlbGVnYXRlIiwiZGVsZWdhdGVOYW1lIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIm5hbWUiLCJwYXlsb2FkIiwiX2dldFByaW1hcnlJbnRlbnRzIiwiYXBwQ29tcG9uZW50Iiwic2VtYW50aWNPYmplY3RzTGlzdCIsInByb21pc2VzIiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXRTaGVsbFNlcnZpY2VzIiwiZm9yRWFjaCIsInNlbU9iamVjdCIsInB1c2giLCJnZXRQcmltYXJ5SW50ZW50IiwiUHJvbWlzZSIsImFsbCIsInRoZW4iLCJzZW1hbnRpY09iamVjdFByaW1hcnlBY3Rpb25zIiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJlcnJvciIsImZpbmRQcmltYXJ5QWN0aW9uV2l0aGluSW50ZW50cyIsInByaW1hcnlJbnRlbnRzRnJvbU5hdmlnYXRpb25TZXJ2aWNlIiwiZmlyc3RQcmltYXJ5QWN0aW9uSW5kZXgiLCJmaW5kSW5kZXgiLCJhY3Rpb24iLCJwcmltYXJ5SW50ZW50Rm91bmQiLCJzZW1hbnRpY09iamVjdFdpdGhQcmltYXJ5QWN0aW9uIiwic2VtYW50aWNPYmplY3RzIiwiX2NoZWNrSWZTZW1hbnRpY09iamVjdHNIYXNQcmltYXJ5QWN0aW9uIiwiX2ZuSXNTZW1hbnRpY09iamVjdEFjdGlvblVuYXZhaWxhYmxlIiwicGF5bG9hZFJlc29sdmVkIiwicHJpbWFyeUludGVudCIsIl9pbmRleCIsInVuYXZhaWxhYmxlQWN0aW9uc0luZGV4Iiwic2VtYW50aWNPYmplY3RVbmF2YWlsYWJsZUFjdGlvbnMiLCJhY3Rpb25zIiwiaW50ZW50Iiwic3BsaXQiLCJpbmRleE9mIiwic2VtYW50aWNQcmltYXJ5QWN0aW9ucyIsImN1cnJlbnRIYXNoIiwiZ2V0SGFzaCIsImluZGV4Iiwic2VtYW50aWNPYmplY3QiLCJjaGVja1ByaW1hcnlBY3Rpb25zIiwiYkdldFRpdGxlTGluayIsImFTZW1hbnRpY09iamVjdHNQcmltYXJ5QWN0aW9ucyIsInRpdGxlTGluayIsImhhc1RpdGxlTGluayIsIl9nZXRUaXRsZUxpbmtXaXRoUGFyYW1ldGVycyIsInNlbWFudGljT2JqZWN0TW9kZWwiLCJfbGlua0ludGVudCIsImdldFByaW1hcnlBY3Rpb24iLCJmaW5kIiwicHJpbWFyeUFjdGlvbiIsIm9wZXJhdG9ycyIsInNTZXR0aW5ncyIsImNvbnRleHRQYXRoIiwicHJvcGVydHlUeXBlIiwiJFR5cGUiLCJnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHkiLCJzbGljZSIsImlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbiIsImxhc3RJbmRleE9mIiwiaXNOYXZpZ2F0aW9uUGF0aCIsIm5hdmlnYXRpb25QYXRoIiwic3Vic3RyaW5nIiwicHJvcGVydHlQYXRoIiwiZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJ0b1N0cmluZyIsImdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eSIsImdldERhdGFGaWVsZERlZmF1bHQiLCJvRGF0YUZpZWxkQ29udGV4dCIsIm9EYXRhRmllbGREZWZhdWx0IiwiaXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlIiwib0RhdGFGaWVsZCIsImJJc0JvdW5kIiwib0FjdGlvbkNvbnRleHQiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldFByZXNzRXZlbnRGb3JEYXRhRmllbGRBY3Rpb25CdXR0b24iLCJvVGhpcyIsInNJbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJiSXNOYXZpZ2FibGUiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiZW50aXRpZXMiLCJlbnRpdHlTZXROYW1lIiwib1BhcmFtcyIsImNvbnRleHRzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiYWRkU2luZ2xlUXVvdGVzIiwibW9kZWwiLCJsYWJlbCIsIkxhYmVsIiwiaXNOYXZpZ2FibGUiLCJnZW5lcmF0ZUZ1bmN0aW9uIiwiQWN0aW9uIiwib2JqZWN0VG9TdHJpbmciLCJpc051bWVyaWNEYXRhVHlwZSIsInNEYXRhRmllbGRUeXBlIiwiX3NEYXRhRmllbGRUeXBlIiwiYU51bWVyaWNEYXRhVHlwZXMiLCJpc0RhdGVPclRpbWVEYXRhVHlwZSIsImFEYXRlVGltZURhdGFUeXBlcyIsImlzRGF0ZVRpbWVEYXRhVHlwZSIsImFEYXRlRGF0YVR5cGVzIiwiaXNEYXRlRGF0YVR5cGUiLCJpc1RpbWVEYXRhVHlwZSIsImdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbiIsIm9Bbm5vdGF0aW9ucyIsInNUeXBlIiwic1RleHRBbm5vdGF0aW9uIiwic1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCJnZXRDb2x1bW5BbGlnbm1lbnQiLCJvVGFibGUiLCJzRW50aXR5UGF0aCIsImNvbGxlY3Rpb24iLCJJbmxpbmUiLCJJY29uVXJsIiwiYVNlbWFudGljS2V5cyIsImJJc1NlbWFudGljS2V5IiwiZXZlcnkiLCJvS2V5IiwiZ2V0RGF0YUZpZWxkQWxpZ25tZW50IiwiZ2V0UHJvcGVydHlBbGlnbm1lbnQiLCJvRm9ybWF0T3B0aW9ucyIsIm9Db21wdXRlZEVkaXRNb2RlIiwic0RlZmF1bHRBbGlnbm1lbnQiLCJzVGV4dEFsaWdubWVudCIsInRleHRBbGlnbk1vZGUiLCJnZXRBbGlnbm1lbnRFeHByZXNzaW9uIiwiZGF0YUZpZWxkIiwiZW50aXR5UGF0aCIsImZvcm1hdE9wdGlvbnMiLCJjb21wdXRlZEVkaXRNb2RlIiwiZGF0YUZpZWxkUGF0aCIsImRlZmF1bHRBbGlnbm1lbnQiLCJ0eXBlIiwiVGFyZ2V0IiwiJEFubm90YXRpb25QYXRoIiwiZmllbGRHcm91cCIsImkiLCJEYXRhIiwia2V5cyIsImlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uRW5hYmxlZCIsInNBY3Rpb25Db250ZXh0Rm9ybWF0IiwiY29tcHV0ZUxhYmVsVGV4dCIsImVuZHNXaXRoIiwic0RhdGFGaWVsZExhYmVsIiwic0RhdGFGaWVsZFRhcmdldFRpdGxlIiwic0RhdGFGaWVsZFRhcmdldExhYmVsIiwic0RhdGFGaWVsZFZhbHVlTGFiZWwiLCJzRGF0YUZpZWxkVGFyZ2V0VmFsdWVMYWJlbCIsImJ1aWxkRXhwcmVzc2lvbkZvckFsaWduSXRlbXMiLCJzVmlzdWFsaXphdGlvbiIsImZpZWxkVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJwcm9ncmVzc1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiIsInJhdGluZ1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiaWZFbHNlIiwib3IiLCJlcXVhbCIsIklzRWRpdGFibGUiLCJoYXNWYWx1ZUhlbHBBbm5vdGF0aW9uIiwiZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0Iiwib0Fubm90YXRpb24iLCIkTmFtZSIsIm9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9ucyIsIm9WYWx1ZUhlbHBBbm5vdGF0aW9uIiwiZ2V0VmFsdWVMaXN0UHJvcGVydHlOYW1lIiwib1ZhbHVlTGlzdCIsIm9WYWx1ZUxpc3RQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJzIiwib1BhcmFtZXRlciIsIkxvY2FsRGF0YVByb3BlcnR5IiwiVmFsdWVMaXN0UHJvcGVydHkiLCJzVmFsdWVMaXN0UHJvcGVydHlOYW1lIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwiQ29sbGVjdGlvblBhdGgiLCJyZXF1ZXN0VmFsdWVMaXN0SW5mbyIsIm9WYWx1ZUxpc3RJbmZvIiwicXVhbGlmZXIiLCJnZXRWYWx1ZUxpc3RRdWxpZmVyRm9yUGFyYW1ldGVyRGlzcGxheUZvcm1hdCIsIiRtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1ldGFNb2RlbCIsInZhbHVlTGlzdEluZm8iLCJ2YWx1ZUhlbHBRdWFsaWZpZXJzIiwiVmFsdWVMaXN0SGVscGVyIiwicHV0RGVmYXVsdFF1YWxpZmllckZpcnN0IiwiT2JqZWN0IiwicGFyYW1ldGVyQ29udGV4dCIsImNvbnZlcnRlZFByb3BlcnR5IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0T2JqZWN0IiwiaXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uIiwiaGFzVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkNvbW1vbiIsIlZhbHVlTGlzdEZvclZhbGlkYXRpb24iLCJlcnIiLCJ3YXJuaW5nIiwiZ2V0QWN0aW9uUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwIiwib0FjdGlvblBhcmFtZXRlciIsInNTYXBVSU5hbWUiLCJzUGFyYW1OYW1lIiwiZ2V0VmFsdWVIZWxwRGVsZWdhdGUiLCJpc0JvdW5kIiwiZW50aXR5VHlwZVBhdGgiLCJzYXBVSU5hbWUiLCJwYXJhbU5hbWUiLCJkZWxlZ2F0ZUNvbmZpZ3VyYXRpb24iLCJnZXRQcm9wZXJ0eVBhdGgiLCJVbmJvdW5kQWN0aW9uIiwiRW50aXR5VHlwZVBhdGgiLCJQcm9wZXJ0eSIsInF1YWxpZmllcnMiLCJ2YWx1ZUhlbHBRdWFsaWZpZXIiLCJpc0FjdGlvblBhcmFtZXRlckRpYWxvZyIsImdldFZhbHVlSGVscERlbGVnYXRlRm9yTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGQiLCJfZ2V0RW50aXR5U2V0RnJvbU11bHRpTGV2ZWwiLCJzU291cmNlRW50aXR5IiwiaVN0YXJ0IiwiaURpZmYiLCJhTmF2UGFydHMiLCJmaWx0ZXIiLCJCb29sZWFuIiwic1BhcnQiLCJnZXRQYXRoRm9ySWNvblNvdXJjZSIsImZvcm1hdFJlc3VsdCIsInBhdGhJbk1vZGVsIiwiZ2V0RmlsZW5hbWVFeHByIiwic0ZpbGVuYW1lIiwic05vRmlsZW5hbWVUZXh0IiwiY2FsY3VsYXRlTUJmcm9tQnl0ZSIsImlCeXRlIiwidG9GaXhlZCIsImdldERvd25sb2FkVXJsIiwiZ2V0TWFyZ2luQ2xhc3MiLCJjb21wYWN0U2VtYW50aWNLZXkiLCJnZXRSZXF1aXJlZCIsImltbXV0YWJsZUtleSIsInRhcmdldCIsInJlcXVpcmVkUHJvcGVydGllcyIsInRhcmdldFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwiaXNGaWVsZFBhcnRPZkZvcm0iLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwiZGF0YUZpZWxkT2JqZWN0UGF0aCIsImNvbm5lY3RlZERhdGFGaWVsZEtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzRmllbGRGb3VuZCIsImZpZWxkIiwia2V5IiwicmVxdWlyZXNJQ29udGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgT3BlcmF0aW9uQXZhaWxhYmxlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlXCI7XG5pbXBvcnQgdHlwZSB7IE9wZXJhdGlvbkdyb3VwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7XG5cdFVJQW5ub3RhdGlvblR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZCxcblx0dHlwZSBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEZvckFjdGlvbixcblx0dHlwZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHR0eXBlIERhdGFGaWVsZFR5cGVzLFxuXHR0eXBlIERhdGFQb2ludFR5cGUsXG5cdHR5cGUgRGF0YVBvaW50VHlwZVR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRvcixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLCB0eXBlIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgRm9ybUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1JlcXVpcmVkRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUhlbHBQYXlsb2FkLCBWYWx1ZUxpc3RJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IExpbmtEZWxlZ2F0ZVBheWxvYWQsIFJlZ2lzdGVyZWRQcmltYXJ5SW50ZW50LCBSZWdpc3RlcmVkUHJpbWFyeUludGVudHMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9xdWlja1ZpZXcvUXVpY2tWaWV3RGVsZWdhdGVcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBMaW5rIGFzIE5hdmlnYXRpb25MaW5rIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxFbnVtLCBNZXRhTW9kZWxQcm9wZXJ0eSwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuY29uc3QgSVNPQ3VycmVuY3kgPSBcIkBPcmcuT0RhdGEuTWVhc3VyZXMuVjEuSVNPQ3VycmVuY3lcIixcblx0VW5pdCA9IFwiQE9yZy5PRGF0YS5NZWFzdXJlcy5WMS5Vbml0XCI7XG5cbmNvbnN0IEZpZWxkSGVscGVyID0ge1xuXHRnZXRBY3Rpb25QYXJhbWV0ZXJWaXNpYmlsaXR5OiBmdW5jdGlvbiAob1BhcmFtOiB1bmtub3duLCBvQ29udGV4dDogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHQvLyBUbyB1c2UgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGZvciBjb250cm9sbGluZyB2aXNpYmlsaXR5IHRoZSB2YWx1ZSBuZWVkcyB0byBiZSBuZWdhdGVkXG5cdFx0aWYgKHR5cGVvZiBvUGFyYW0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGNvbnN0IG9QYXJhbUlmID0gb1BhcmFtIGFzIHsgJElmPzogdW5rbm93bltdIH07XG5cdFx0XHRpZiAob1BhcmFtSWYgJiYgb1BhcmFtSWYuJElmICYmIG9QYXJhbUlmLiRJZi5sZW5ndGggPT09IDMpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgVUkuSGlkZGVuIGNvbnRhaW5zIGEgZHluYW1pYyBleHByZXNzaW9uIHdlIGRvIHRoaXNcblx0XHRcdFx0Ly8gYnkganVzdCBzd2l0Y2hpbmcgdGhlIFwidGhlblwiIGFuZCBcImVsc2VcIiBwYXJ0IG9mIHRoZSBlcnByZXNzaW9uXG5cdFx0XHRcdC8vIG9QYXJhbS4kSWZbMF0gPD09IENvbmRpdGlvbiBwYXJ0XG5cdFx0XHRcdC8vIG9QYXJhbS4kSWZbMV0gPD09IFRoZW4gcGFydFxuXHRcdFx0XHQvLyBvUGFyYW0uJElmWzJdIDw9PSBFbHNlIHBhcnRcblx0XHRcdFx0Y29uc3Qgb05lZ1BhcmFtID0geyAkSWY6IFtdIH0gYXMgeyAkSWY6IHVua25vd25bXSB9O1xuXHRcdFx0XHRvTmVnUGFyYW0uJElmWzBdID0gb1BhcmFtSWYuJElmWzBdO1xuXHRcdFx0XHRvTmVnUGFyYW0uJElmWzFdID0gb1BhcmFtSWYuJElmWzJdO1xuXHRcdFx0XHRvTmVnUGFyYW0uJElmWzJdID0gb1BhcmFtSWYuJElmWzFdO1xuXHRcdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci52YWx1ZShvTmVnUGFyYW0sIG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBcIns9ICEle1wiICsgKG9QYXJhbSBhcyB7ICRQYXRoPzogc3RyaW5nIH0pLiRQYXRoICsgXCJ9IH1cIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBvUGFyYW0gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci52YWx1ZSghb1BhcmFtLCBvQ29udGV4dCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb21wdXRlZCBhbm5vdGF0aW9uIHRoYXQgcmV0dXJucyB2UHJvcGVydHkgZm9yIGEgc3RyaW5nIGFuZCBAc2FwdWkubmFtZSBmb3IgYW4gb2JqZWN0LlxuXHQgKiBAcGFyYW0gdlByb3BlcnR5IFRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgaW50ZXJmYWNlIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBuYW1lXG5cdCAqL1xuXHRwcm9wZXJ0eU5hbWU6IGZ1bmN0aW9uIChcblx0XHR2UHJvcGVydHk6IHN0cmluZyB8IHsgJFBhdGg/OiBzdHJpbmcgfSB8IHsgJFByb3BlcnR5UGF0aD86IHN0cmluZyB9IHwgeyBWYWx1ZTogeyAkUGF0aD86IHN0cmluZyB9IH0sXG5cdFx0b0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlXG5cdCk6IHN0cmluZyB7XG5cdFx0bGV0IHNQcm9wZXJ0eU5hbWU7XG5cdFx0aWYgKHR5cGVvZiB2UHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGlmIChvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpLmluY2x1ZGVzKFwiJFBhdGhcIikgfHwgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKS5pbmNsdWRlcyhcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0Ly8gV2UgY291bGQgZW5kIHVwIHdpdGggYSBwdXJlIHN0cmluZyBwcm9wZXJ0eSAobm8gJFBhdGgpLCBhbmQgdGhpcyBpcyBub3QgYSByZWFsIHByb3BlcnR5IGluIHRoYXQgY2FzZVxuXHRcdFx0XHRzUHJvcGVydHlOYW1lID0gdlByb3BlcnR5O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoKHZQcm9wZXJ0eSBhcyB7ICRQYXRoPzogc3RyaW5nIH0pLiRQYXRoIHx8ICh2UHJvcGVydHkgYXMgeyAkUHJvcGVydHlQYXRoPzogc3RyaW5nIH0pLiRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IHNQYXRoID0gKHZQcm9wZXJ0eSBhcyB7ICRQYXRoPzogc3RyaW5nIH0pLiRQYXRoID8gXCIvJFBhdGhcIiA6IFwiLyRQcm9wZXJ0eVBhdGhcIjtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGggKyBzUGF0aH0vJEBzYXB1aS5uYW1lYCk7XG5cdFx0fSBlbHNlIGlmICgodlByb3BlcnR5IGFzIHsgVmFsdWU6IHsgJFBhdGg/OiBzdHJpbmcgfSB9KS5WYWx1ZSAmJiAodlByb3BlcnR5IGFzIHsgVmFsdWU6IHsgJFBhdGg/OiBzdHJpbmcgfSB9KS5WYWx1ZS4kUGF0aCkge1xuXHRcdFx0c1Byb3BlcnR5TmFtZSA9ICh2UHJvcGVydHkgYXMgeyBWYWx1ZTogeyAkUGF0aD86IHN0cmluZyB9IH0pLlZhbHVlLiRQYXRoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzUHJvcGVydHlOYW1lO1xuXHR9LFxuXG5cdGZpZWxkQ29udHJvbDogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZywgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHQvLyBlZGl0YWJsZSBoZWFkZXIgZmFjZXRcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9GaWVsZENvbnRyb2xDb250ZXh0ID0gb01vZGVsICYmIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbGApO1xuXHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBvRmllbGRDb250cm9sQ29udGV4dCAmJiBvRmllbGRDb250cm9sQ29udGV4dC5nZXRQcm9wZXJ0eSgpO1xuXHRcdGlmIChvRmllbGRDb250cm9sKSB7XG5cdFx0XHRpZiAob0ZpZWxkQ29udHJvbC5oYXNPd25Qcm9wZXJ0eShcIiRFbnVtTWVtYmVyXCIpKSB7XG5cdFx0XHRcdHJldHVybiBvRmllbGRDb250cm9sLiRFbnVtTWVtYmVyO1xuXHRcdFx0fSBlbHNlIGlmIChvRmllbGRDb250cm9sLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cmV0dXJuIEFubm90YXRpb25IZWxwZXIudmFsdWUob0ZpZWxkQ29udHJvbCwgeyBjb250ZXh0OiBvRmllbGRDb250cm9sQ29udGV4dCB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHZhbHVlIGhlbHAgcHJvcGVydHkgZnJvbSBhIERhdGFGaWVsZCBvciBhIFByb3BlcnR5UGF0aCAoaW4gY2FzZSBhIFNlbGVjdGlvbkZpZWxkIGlzIHVzZWQpXG5cdCAqIFByaW9yaXR5IGZyb20gd2hlcmUgdG8gZ2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZmllbGQgKGV4YW1wbGVzIGFyZSBcIk5hbWVcIiBhbmQgXCJTdXBwbGllclwiKTpcblx0ICogMS4gSWYgb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSBoYXMga2V5ICckUGF0aCcsIHRoZW4gd2UgdGFrZSB0aGUgdmFsdWUgYXQgJyRQYXRoJy5cblx0ICogMi4gRWxzZSwgdmFsdWUgYXQgb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKS5cblx0ICogSWYgdGhlcmUgaXMgYW4gSVNPQ3VycmVuY3kgb3IgaWYgdGhlcmUgYXJlIFVuaXQgYW5ub3RhdGlvbnMgZm9yIHRoZSBmaWVsZCBwcm9wZXJ0eSxcblx0ICogdGhlbiB0aGUgUGF0aCBhdCB0aGUgSVNPQ3VycmVuY3kgb3IgVW5pdCBhbm5vdGF0aW9ucyBvZiB0aGUgZmllbGQgcHJvcGVydHkgaXMgY29uc2lkZXJlZC5cblx0ICogQHBhcmFtIG9Qcm9wZXJ0eUNvbnRleHQgVGhlIGNvbnRleHQgZnJvbSB3aGljaCB2YWx1ZSBoZWxwIHByb3BlcnR5IG5lZWQgdG8gYmUgZXh0cmFjdGVkLlxuXHQgKiBAcGFyYW0gYkluRmlsdGVyRmllbGQgV2hldGhlciBvciBub3Qgd2UncmUgaW4gdGhlIGZpbHRlciBmaWVsZCBhbmQgc2hvdWxkIGlnbm9yZVxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgaGVscCBwcm9wZXJ0eSBwYXRoXG5cdCAqL1xuXHR2YWx1ZUhlbHBQcm9wZXJ0eTogZnVuY3Rpb24gKG9Qcm9wZXJ0eUNvbnRleHQ6IEJhc2VDb250ZXh0LCBiSW5GaWx0ZXJGaWVsZD86IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdC8qIEZvciBjdXJyZW5jeSAoYW5kIGxhdGVyIFVuaXQpIHdlIG5lZWQgdG8gZm9yd2FyZCB0aGUgdmFsdWUgaGVscCB0byB0aGUgYW5ub3RhdGVkIGZpZWxkICovXG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb1Byb3BlcnR5Q29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSBvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdCgpIHx8IHt9O1xuXHRcdGxldCBzUGF0aCA9IG9Db250ZW50LiRQYXRoID8gYCR7c0NvbnRleHRQYXRofS8kUGF0aGAgOiBzQ29udGV4dFBhdGg7XG5cdFx0Y29uc3Qgc0Fubm9QYXRoID0gYCR7c1BhdGh9QGA7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdChzQW5ub1BhdGgpO1xuXHRcdGxldCBzQW5ub3RhdGlvbjtcblx0XHRpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnMpIHtcblx0XHRcdHNBbm5vdGF0aW9uID1cblx0XHRcdFx0KG9Qcm9wZXJ0eUFubm90YXRpb25zLmhhc093blByb3BlcnR5KElTT0N1cnJlbmN5KSAmJiBJU09DdXJyZW5jeSkgfHwgKG9Qcm9wZXJ0eUFubm90YXRpb25zLmhhc093blByb3BlcnR5KFVuaXQpICYmIFVuaXQpO1xuXHRcdFx0aWYgKHNBbm5vdGF0aW9uICYmICFiSW5GaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRjb25zdCBzVW5pdE9yQ3VycmVuY3lQYXRoID0gYCR7c1BhdGggKyBzQW5ub3RhdGlvbn0vJFBhdGhgO1xuXHRcdFx0XHQvLyB3ZSBjaGVjayB0aGF0IHRoZSBjdXJyZW5jeSBvciB1bml0IGlzIGEgUHJvcGVydHkgYW5kIG5vdCBhIGZpeGVkIHZhbHVlXG5cdFx0XHRcdGlmIChvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdChzVW5pdE9yQ3VycmVuY3lQYXRoKSkge1xuXHRcdFx0XHRcdHNQYXRoID0gc1VuaXRPckN1cnJlbmN5UGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc1BhdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERlZGljYXRlZCBtZXRob2QgdG8gYXZvaWQgbG9va2luZyBmb3IgdW5pdCBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5Q29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgaGVscCBwcm9wZXJ0eSBwYXRoXG5cdCAqL1xuXHR2YWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkOiBmdW5jdGlvbiAob1Byb3BlcnR5Q29udGV4dDogQmFzZUNvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eShvUHJvcGVydHlDb250ZXh0LCB0cnVlKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBJRCBmb3IgVmFsdWUgSGVscC5cblx0ICogQHBhcmFtIHNGbGV4SWQgRmxleCBJRCBvZiB0aGUgY3VycmVudCBvYmplY3Rcblx0ICogQHBhcmFtIHNJZFByZWZpeCBQcmVmaXggZm9yIHRoZSBWYWx1ZUhlbHAgSURcblx0ICogQHBhcmFtIHNPcmlnaW5hbFByb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBWYWx1ZUhlbHAgUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIElEIGdlbmVyYXRlZCBmb3IgdGhlIFZhbHVlSGVscFxuXHQgKi9cblx0Z2V0SURGb3JGaWVsZFZhbHVlSGVscDogZnVuY3Rpb24gKFxuXHRcdHNGbGV4SWQ6IHN0cmluZyB8IG51bGwsXG5cdFx0c0lkUHJlZml4OiBzdHJpbmcsXG5cdFx0c09yaWdpbmFsUHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5TmFtZTogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0aWYgKHNGbGV4SWQpIHtcblx0XHRcdHJldHVybiBzRmxleElkO1xuXHRcdH1cblx0XHRsZXQgc1Byb3BlcnR5ID0gc1Byb3BlcnR5TmFtZTtcblx0XHRpZiAoc09yaWdpbmFsUHJvcGVydHlOYW1lICE9PSBzUHJvcGVydHlOYW1lKSB7XG5cdFx0XHRzUHJvcGVydHkgPSBgJHtzT3JpZ2luYWxQcm9wZXJ0eU5hbWV9Ojoke3NQcm9wZXJ0eU5hbWV9YDtcblx0XHR9XG5cdFx0cmV0dXJuIGdlbmVyYXRlKFtzSWRQcmVmaXgsIHNQcm9wZXJ0eV0pO1xuXHR9LFxuXG5cdC8qXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHZhbHVlSGVscCBwcm9wZXJ0eSBvZiB0aGUgRmlsdGVyRmllbGQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXRWYWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkSGVscGVyLmpzXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUNvbnRleHQgUHJvcGVydHkgY29udGV4dCBmb3IgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIG9iamVjdCBvZiB0aGUgVmFsdWVIZWxwIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzUHJvcGVydHlUeXBlIFRoZSAkVHlwZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHNWaElkUHJlZml4IFRoZSBJRCBwcmVmaXggb2YgdGhlIHZhbHVlIGhlbHBcblx0ICogQHBhcmFtIHNQcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzVmFsdWVIZWxwUHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSB2YWx1ZSBoZWxwXG5cdCAqIEBwYXJhbSBiSGFzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIGB0cnVlYCBpZiB0aGVyZSBpcyBhIHZhbHVlIGxpc3Qgd2l0aCBhIGZpeGVkIHZhbHVlIGFubm90YXRpb25cblx0ICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBgdHJ1ZWAgaWYgdGhlIHNlbWFudGljIGRhdGUgcmFuZ2UgaXMgc2V0IHRvICd0cnVlJyBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHJldHVybnMgVGhlIGZpZWxkIGhlbHAgcHJvcGVydHkgb2YgdGhlIHZhbHVlIGhlbHBcblx0ICovXG5cdGdldFZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eUNvbnRleHQ6IEJhc2VDb250ZXh0LFxuXHRcdG9Qcm9wZXJ0eTogTWV0YU1vZGVsVHlwZTxQcm9wZXJ0eT4sXG5cdFx0c1Byb3BlcnR5VHlwZTogc3RyaW5nLFxuXHRcdHNWaElkUHJlZml4OiBzdHJpbmcsXG5cdFx0c0VudGl0eVR5cGU6IHN0cmluZyxcblx0XHRzUHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0c1ZhbHVlSGVscFByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRcdGJIYXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW4sXG5cdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlOiBib29sZWFuIHwgc3RyaW5nXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5ID0gRmllbGRIZWxwZXIucHJvcGVydHlOYW1lKFxuXHRcdFx0XHRvUHJvcGVydHkgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB7ICRQYXRoPzogc3RyaW5nIH0gfCB7ICRQcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSB8IHsgVmFsdWU6IHsgJFBhdGg/OiBzdHJpbmcgfSB9LFxuXHRcdFx0XHR7IGNvbnRleHQ6IHByb3BlcnR5Q29udGV4dCB9XG5cdFx0XHQpLFxuXHRcdFx0YlNlbWFudGljRGF0ZVJhbmdlID0gYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSBcInRydWVcIiB8fCBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IHRydWU7XG5cdFx0Y29uc3Qgb01vZGVsID0gcHJvcGVydHlDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLmdldEZpbHRlclJlc3RyaWN0aW9uc0J5UGF0aChzUHJvcGVydHlMb2NhdGlvblBhdGgsIG9Nb2RlbCk7XG5cdFx0aWYgKFxuXHRcdFx0KChzUHJvcGVydHlUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8IHNQcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fCBzUHJvcGVydHlUeXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIikgJiZcblx0XHRcdFx0YlNlbWFudGljRGF0ZVJhbmdlICYmXG5cdFx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgJiZcblx0XHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgJiZcblx0XHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSAmJlxuXHRcdFx0XHQob0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XS5pbmNsdWRlcyhcIlNpbmdsZVJhbmdlXCIpIHx8XG5cdFx0XHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XS5pbmNsdWRlcyhcIlNpbmdsZVZhbHVlXCIpKSkgfHxcblx0XHRcdChzUHJvcGVydHlUeXBlID09PSBcIkVkbS5Cb29sZWFuXCIgJiYgIWJIYXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gRmllbGRIZWxwZXIuZ2V0SURGb3JGaWVsZFZhbHVlSGVscChudWxsLCBzVmhJZFByZWZpeCB8fCBcIkZpbHRlckZpZWxkVmFsdWVIZWxwXCIsIHNQcm9wZXJ0eU5hbWUsIHNWYWx1ZUhlbHBQcm9wZXJ0eU5hbWUpO1xuXHR9LFxuXG5cdC8qXG5cdCAqIE1ldGhvZCB0byBjb21wdXRlIHRoZSBkZWxlZ2F0ZSB3aXRoIHBheWxvYWRcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBkZWxlZ2F0ZU5hbWUgLSBuYW1lIG9mIHRoZSBkZWxlZ2F0ZSBtZXRob2RlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAtIGFkZGVkIHRvIHRoZSBwYXlsb2FkIG9mIHRoZSBkZWxlZ2F0ZSBtZXRob2RlXG5cdCAqIEByZXR1cm4ge29iamVjdH0gLSByZXR1cm5zIHRoZSBkZWxlZ2F0ZSB3aXRoIHBheWxvYWRcblx0ICovXG5cdGNvbXB1dGVGaWVsZEJhc2VEZWxlZ2F0ZTogZnVuY3Rpb24gKGRlbGVnYXRlTmFtZTogc3RyaW5nLCByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiBib29sZWFuKTogb2JqZWN0IHtcblx0XHRpZiAocmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bmFtZTogZGVsZWdhdGVOYW1lLFxuXHRcdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdFx0cmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdDogcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4geyBuYW1lOiBkZWxlZ2F0ZU5hbWUgfTtcblx0fSxcblx0X2dldFByaW1hcnlJbnRlbnRzOiBhc3luYyBmdW5jdGlvbiAoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIHNlbWFudGljT2JqZWN0c0xpc3Q6IHN0cmluZ1tdKTogUHJvbWlzZTxOYXZpZ2F0aW9uTGlua1tdPiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IFByb21pc2U8TmF2aWdhdGlvbkxpbms+W10gPSBbXTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0c2VtYW50aWNPYmplY3RzTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChzZW1PYmplY3QpIHtcblx0XHRcdHByb21pc2VzLnB1c2gobmF2aWdhdGlvblNlcnZpY2UuZ2V0UHJpbWFyeUludGVudChzZW1PYmplY3QpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoc2VtYW50aWNPYmplY3RQcmltYXJ5QWN0aW9uczogTmF2aWdhdGlvbkxpbmtbXSkge1xuXHRcdFx0XHRyZXR1cm4gc2VtYW50aWNPYmplY3RQcmltYXJ5QWN0aW9ucztcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBwcmltYXJ5IGludGVudHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbmRzIHRoZSBwcmltYXJ5IGFjdGlvbiB3aXRoaW4gaW50ZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIHByaW1hcnlJbnRlbnRzRnJvbU5hdmlnYXRpb25TZXJ2aWNlIFRoZSByZWdpc3RlcmVkIHByaW1hcnkgaW50ZW50cyBmcm9tIHRoZSBuYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBwYXlsb2FkIFRoZSByZWdpc3RlcmVkIHBheWxvYWQuXG5cdCAqIEByZXR1cm5zXG5cdCAqXG5cdCAqXG5cdCAqICBBbiBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJpbWFyeSBhY3Rpb24gd2l0aGluIGludGVudHMuXG5cdCAqL1xuXHRmaW5kUHJpbWFyeUFjdGlvbldpdGhpbkludGVudHM6IGZ1bmN0aW9uIChcblx0XHRwcmltYXJ5SW50ZW50c0Zyb21OYXZpZ2F0aW9uU2VydmljZTogUmVnaXN0ZXJlZFByaW1hcnlJbnRlbnRzLFxuXHRcdHBheWxvYWQ6IExpbmtEZWxlZ2F0ZVBheWxvYWRcblx0KToge1xuXHRcdHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb246IHN0cmluZztcblx0XHRwcmltYXJ5SW50ZW50Rm91bmQ6IFJlZ2lzdGVyZWRQcmltYXJ5SW50ZW50IHwgdW5kZWZpbmVkO1xuXHR9IHtcblx0XHRjb25zdCBmaXJzdFByaW1hcnlBY3Rpb25JbmRleCA9IHByaW1hcnlJbnRlbnRzRnJvbU5hdmlnYXRpb25TZXJ2aWNlLmZpbmRJbmRleCgoYWN0aW9uOiBSZWdpc3RlcmVkUHJpbWFyeUludGVudCkgPT4gISFhY3Rpb24pO1xuXHRcdGNvbnN0IHByaW1hcnlJbnRlbnRGb3VuZCA9IHByaW1hcnlJbnRlbnRzRnJvbU5hdmlnYXRpb25TZXJ2aWNlW2ZpcnN0UHJpbWFyeUFjdGlvbkluZGV4XTtcblxuXHRcdGNvbnN0IHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb24gPSBwYXlsb2FkLnNlbWFudGljT2JqZWN0c1tmaXJzdFByaW1hcnlBY3Rpb25JbmRleF07XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb246IHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb24sXG5cdFx0XHRwcmltYXJ5SW50ZW50Rm91bmQ6IHByaW1hcnlJbnRlbnRGb3VuZFxuXHRcdH07XG5cdH0sXG5cblx0X2NoZWNrSWZTZW1hbnRpY09iamVjdHNIYXNQcmltYXJ5QWN0aW9uOiBmdW5jdGlvbiAoXG5cdFx0cGF5bG9hZDogTGlua0RlbGVnYXRlUGF5bG9hZCxcblx0XHRwcmltYXJ5SW50ZW50c0Zyb21OYXZpZ2F0aW9uU2VydmljZTogUmVnaXN0ZXJlZFByaW1hcnlJbnRlbnRzLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IF9mbklzU2VtYW50aWNPYmplY3RBY3Rpb25VbmF2YWlsYWJsZSA9IGZ1bmN0aW9uIChcblx0XHRcdHBheWxvYWRSZXNvbHZlZDogTGlua0RlbGVnYXRlUGF5bG9hZCxcblx0XHRcdHByaW1hcnlJbnRlbnQ6IFJlZ2lzdGVyZWRQcmltYXJ5SW50ZW50LFxuXHRcdFx0X2luZGV4OiBudW1iZXJcblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGZvciAoY29uc3QgdW5hdmFpbGFibGVBY3Rpb25zSW5kZXggaW4gcGF5bG9hZFJlc29sdmVkLnNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zW19pbmRleF0uYWN0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cHJpbWFyeUludGVudC5pbnRlbnRcblx0XHRcdFx0XHRcdC5zcGxpdChcIi1cIilbMV1cblx0XHRcdFx0XHRcdC5pbmRleE9mKHBheWxvYWRSZXNvbHZlZC5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tfaW5kZXhdLmFjdGlvbnNbdW5hdmFpbGFibGVBY3Rpb25zSW5kZXhdKSA9PT0gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdFx0cGF5bG9hZC5zZW1hbnRpY1ByaW1hcnlBY3Rpb25zID0gcHJpbWFyeUludGVudHNGcm9tTmF2aWdhdGlvblNlcnZpY2U7XG5cdFx0Y29uc3QgeyBzZW1hbnRpY09iamVjdFdpdGhQcmltYXJ5QWN0aW9uLCBwcmltYXJ5SW50ZW50Rm91bmQgfSA9IHRoaXMuZmluZFByaW1hcnlBY3Rpb25XaXRoaW5JbnRlbnRzKFxuXHRcdFx0cHJpbWFyeUludGVudHNGcm9tTmF2aWdhdGlvblNlcnZpY2UsXG5cdFx0XHRwYXlsb2FkXG5cdFx0KTtcblx0XHRjb25zdCBjdXJyZW50SGFzaCA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuZ2V0SGFzaCgpO1xuXHRcdC8vIFJlbW92ZSB0aGUgaW50ZW50IHBhcmFtZXRlcnMgYmVmb3JlIGNoZWNraW5nIHdpdGggdGhlIGN1cnJlbnQgaGFzaFxuXHRcdGlmICghIXByaW1hcnlJbnRlbnRGb3VuZCAmJiBwcmltYXJ5SW50ZW50Rm91bmQuaW50ZW50LnNwbGl0KFwiP1wiKVswXSAhPT0gY3VycmVudEhhc2gpIHtcblx0XHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXlsb2FkLnNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdFx0XHRpZiAocGF5bG9hZC5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tpbmRleF0uc2VtYW50aWNPYmplY3QgPT09IHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gX2ZuSXNTZW1hbnRpY09iamVjdEFjdGlvblVuYXZhaWxhYmxlKHBheWxvYWQsIHByaW1hcnlJbnRlbnRGb3VuZCwgaW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHRjaGVja1ByaW1hcnlBY3Rpb25zOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0cGF5bG9hZDogTGlua0RlbGVnYXRlUGF5bG9hZCxcblx0XHRiR2V0VGl0bGVMaW5rOiBib29sZWFuLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQgfCB7IHRpdGxlTGluazogTmF2aWdhdGlvbkxpbmtbXTsgaGFzVGl0bGVMaW5rOiBib29sZWFuOyBwYXlsb2FkOiBMaW5rRGVsZWdhdGVQYXlsb2FkIH0+IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UHJpbWFyeUludGVudHMoYXBwQ29tcG9uZW50LCBwYXlsb2FkICYmIHBheWxvYWQuc2VtYW50aWNPYmplY3RzKVxuXHRcdFx0LnRoZW4oKGFTZW1hbnRpY09iamVjdHNQcmltYXJ5QWN0aW9uczogTmF2aWdhdGlvbkxpbmtbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYkdldFRpdGxlTGlua1xuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHR0aXRsZUxpbms6IGFTZW1hbnRpY09iamVjdHNQcmltYXJ5QWN0aW9ucyxcblx0XHRcdFx0XHRcdFx0aGFzVGl0bGVMaW5rOiB0aGlzLl9jaGVja0lmU2VtYW50aWNPYmplY3RzSGFzUHJpbWFyeUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRwYXlsb2FkLFxuXHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdHNQcmltYXJ5QWN0aW9ucyxcblx0XHRcdFx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0cGF5bG9hZDogcGF5bG9hZFxuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdDogdGhpcy5fY2hlY2tJZlNlbWFudGljT2JqZWN0c0hhc1ByaW1hcnlBY3Rpb24ocGF5bG9hZCwgYVNlbWFudGljT2JqZWN0c1ByaW1hcnlBY3Rpb25zLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIGluIGNoZWNrUHJpbWFyeUFjdGlvbnNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9LFxuXHRfZ2V0VGl0bGVMaW5rV2l0aFBhcmFtZXRlcnM6IGZ1bmN0aW9uIChzZW1hbnRpY09iamVjdE1vZGVsOiBMaW5rRGVsZWdhdGVQYXlsb2FkLCBfbGlua0ludGVudDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoc2VtYW50aWNPYmplY3RNb2RlbCAmJiBzZW1hbnRpY09iamVjdE1vZGVsLnRpdGxlTGluaykge1xuXHRcdFx0cmV0dXJuIHNlbWFudGljT2JqZWN0TW9kZWwudGl0bGVMaW5rO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gX2xpbmtJbnRlbnQ7XG5cdFx0fVxuXHR9LFxuXG5cdGdldFByaW1hcnlBY3Rpb246IGZ1bmN0aW9uIChwYXlsb2FkOiBMaW5rRGVsZWdhdGVQYXlsb2FkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwcmltYXJ5SW50ZW50ID0gcGF5bG9hZC5zZW1hbnRpY1ByaW1hcnlBY3Rpb25zPy5maW5kKChwcmltYXJ5QWN0aW9uKSA9PiAhIXByaW1hcnlBY3Rpb24pO1xuXHRcdHJldHVybiBGaWVsZEhlbHBlci5fZ2V0VGl0bGVMaW5rV2l0aFBhcmFtZXRlcnMocGF5bG9hZCwgcHJpbWFyeUludGVudD8uaW50ZW50KTtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmZXRjaCB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucy4gRmlsdGVyIHJlc3RyaWN0aW9ucyBjYW4gYmUgYW5ub3RhdGVkIG9uIGFuIGVudGl0eSBzZXQgb3IgYSBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuXHQgKiBEZXBlbmRpbmcgb24gdGhlIHBhdGggdG8gd2hpY2ggdGhlIGNvbnRyb2wgaXMgYm91bmQsIHdlIGNoZWNrIGZvciBmaWx0ZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBjb250ZXh0IHBhdGggb2YgdGhlIGNvbnRyb2wsXG5cdCAqIG9yIG9uIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IChpZiB0aGVyZSBpcyBhIG5hdmlnYXRpb24pLlxuXHQgKiBFZy4gSWYgdGhlIHRhYmxlIGlzIGJvdW5kIHRvICcvRW50aXR5U2V0JywgZm9yIHByb3BlcnR5IHBhdGggJy9FbnRpdHlTZXQvX0Fzc29jaWF0aW9uL1Byb3BlcnR5TmFtZScsIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb25zXG5cdCAqIG9uICcvRW50aXR5U2V0JyB3aW4gb3ZlciBmaWx0ZXIgcmVzdHJpY3Rpb25zIG9uICcvRW50aXR5U2V0L19Bc3NvY2lhdGlvbicuXG5cdCAqIElmIHRoZSB0YWJsZSBpcyBib3VuZCB0byAnL0VudGl0eVNldC9fQXNzb2NpYXRpb24nLCB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucyBvbiAnL0VudGl0eVNldC9fQXNzb2NpYXRpb24nIHdpbiBvdmVyIGZpbHRlclxuXHQgKiByZXRyaWN0aW9ucyBvbiAnL0Fzc29jaWF0aW9uRW50aXR5U2V0Jy5cblx0ICogQHBhcmFtIG9Db250ZXh0IFByb3BlcnR5IENvbnRleHRcblx0ICogQHBhcmFtIG9Qcm9wZXJ0eSBQcm9wZXJ0eSBvYmplY3QgaW4gdGhlIG1ldGFkYXRhXG5cdCAqIEBwYXJhbSBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgQm9vbGVhbiBTdWdnZXN0cyBpZiBzZW1hbnRpYyBkYXRlIHJhbmdlIHNob3VsZCBiZSB1c2VkXG5cdCAqIEBwYXJhbSBzU2V0dGluZ3MgU3RyaW5naWZpZWQgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eSBzZXR0aW5nc1xuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggUGF0aCB0byB3aGljaCB0aGUgcGFyZW50IGNvbnRyb2wgKHRoZSB0YWJsZSBvciB0aGUgZmlsdGVyIGJhcikgaXMgYm91bmRcblx0ICogQHJldHVybnMgU3RyaW5nIGNvbnRhaW5pbmcgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygb3BlcmF0b3JzIGZvciBmaWx0ZXJpbmdcblx0ICovXG5cdG9wZXJhdG9yczogZnVuY3Rpb24gKFxuXHRcdG9Db250ZXh0OiBCYXNlQ29udGV4dCxcblx0XHRvUHJvcGVydHk6IE1ldGFNb2RlbFByb3BlcnR5LFxuXHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZTogYm9vbGVhbixcblx0XHRzU2V0dGluZ3M6IHN0cmluZyxcblx0XHRjb250ZXh0UGF0aDogc3RyaW5nXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gdGhpcyBpcyB1c2VkIGluIEZpbHRlckZpZWxkLmJsb2NrXG5cdFx0aWYgKCFvUHJvcGVydHkgfHwgIWNvbnRleHRQYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRsZXQgb3BlcmF0b3JzOiBzdHJpbmdbXTtcblx0XHRjb25zdCBzUHJvcGVydHkgPSBGaWVsZEhlbHBlci5wcm9wZXJ0eU5hbWUoXG5cdFx0XHRvUHJvcGVydHkgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB7ICRQYXRoPzogc3RyaW5nIH0gfCB7ICRQcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSB8IHsgVmFsdWU6IHsgJFBhdGg/OiBzdHJpbmcgfSB9LFxuXHRcdFx0eyBjb250ZXh0OiBvQ29udGV4dCB9XG5cdFx0KTtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0cHJvcGVydHlUeXBlID0gb1Byb3BlcnR5LiRUeXBlO1xuXG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uR3VpZFwiKSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5KCk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlICcvJ1xuXHRcdGNvbnRleHRQYXRoID0gY29udGV4dFBhdGguc2xpY2UoMCwgLTEpO1xuXHRcdGNvbnN0IGlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbjogYm9vbGVhbiA9IGNvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA+IDA7XG5cdFx0Y29uc3QgaXNOYXZpZ2F0aW9uUGF0aDogYm9vbGVhbiA9XG5cdFx0XHQoaXNUYWJsZUJvdW5kVG9OYXZpZ2F0aW9uICYmIGNvbnRleHRQYXRoICE9PSBzUHJvcGVydHlMb2NhdGlvblBhdGgpIHx8XG5cdFx0XHQoIWlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbiAmJiBzUHJvcGVydHlMb2NhdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gMCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGg6IHN0cmluZyA9XG5cdFx0XHQoaXNOYXZpZ2F0aW9uUGF0aCAmJiBzUHJvcGVydHlMb2NhdGlvblBhdGguc3Vic3RyaW5nKHNQcm9wZXJ0eUxvY2F0aW9uUGF0aC5pbmRleE9mKGNvbnRleHRQYXRoKSArIGNvbnRleHRQYXRoLmxlbmd0aCArIDEpKSB8fFxuXHRcdFx0XCJcIjtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IChpc05hdmlnYXRpb25QYXRoICYmIG5hdmlnYXRpb25QYXRoICsgXCIvXCIgKyBzUHJvcGVydHkpIHx8IHNQcm9wZXJ0eTtcblxuXHRcdGlmICghaXNUYWJsZUJvdW5kVG9OYXZpZ2F0aW9uKSB7XG5cdFx0XHRpZiAoIWlzTmF2aWdhdGlvblBhdGgpIHtcblx0XHRcdFx0Ly8gL1NhbGVzT3JkZXJNYW5hZ2UvSURcblx0XHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uSGVscGVyLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGgsXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyAvU2FsZXNPcmRlck1hbmFuZ2UvX0l0ZW0vTWF0ZXJpYWxcblx0XHRcdFx0Ly9sZXQgb3BlcmF0b3JzXG5cdFx0XHRcdG9wZXJhdG9ycyA9IENvbW1vbkhlbHBlci5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvcGVyYXRvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uSGVscGVyLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5TG9jYXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlLFxuXHRcdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIWlzTmF2aWdhdGlvblBhdGgpIHtcblx0XHRcdC8vIC9TYWxlc09yZGVyTWFuYWdlL19JdGVtL01hdGVyaWFsXG5cdFx0XHRvcGVyYXRvcnMgPSBDb21tb25IZWxwZXIuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0Y29udGV4dFBhdGgsXG5cdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0cHJvcGVydHlUeXBlLFxuXHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdHNTZXR0aW5nc1xuXHRcdFx0KTtcblx0XHRcdGlmIChvcGVyYXRvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdG9wZXJhdG9ycyA9IENvbW1vbkhlbHBlci5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0TW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChjb250ZXh0UGF0aCksXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3BlcmF0b3JzPy5sZW5ndGggPiAwID8gb3BlcmF0b3JzLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIC9TYWxlc09yZGVyTWFuYWdlL19JdGVtL19Bc3NvY2lhdGlvbi9Qcm9wZXJ0eU5hbWVcblx0XHRcdC8vIFRoaXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlc1xuXHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uSGVscGVyLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdGNvbnRleHRQYXRoLFxuXHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRzU2V0dGluZ3Ncblx0XHRcdCk7XG5cdFx0XHRpZiAob3BlcmF0b3JzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRvcGVyYXRvcnMgPSBDb21tb25IZWxwZXIuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoY29udGV4dFBhdGgpLFxuXHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRwcm9wZXJ0eVR5cGUsXG5cdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdHNTZXR0aW5nc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICgoIW9wZXJhdG9ycyB8fCBvcGVyYXRvcnMubGVuZ3RoID09PSAwKSAmJiAocHJvcGVydHlUeXBlID09PSBcIkVkbS5EYXRlXCIgfHwgcHJvcGVydHlUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSkge1xuXHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uSGVscGVyLmdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eShwcm9wZXJ0eVR5cGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvcGVyYXRvcnMubGVuZ3RoID4gMCA/IG9wZXJhdG9ycy50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBEYUZpZWxkRGVmYXVsdCAoaWYgYW55KS4gT3RoZXJ3aXNlLCB0aGUgRGF0YUZpZWxkIHBhdGggaXMgcmV0dXJuZWQuXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udGV4dCBDb250ZXh0IG9mIHRoZSBEYXRhRmllbGRcblx0ICogQHJldHVybnMgT2JqZWN0IHBhdGhcblx0ICovXG5cdGdldERhdGFGaWVsZERlZmF1bHQ6IGZ1bmN0aW9uIChvRGF0YUZpZWxkQ29udGV4dDogQmFzZUNvbnRleHQpOiBzdHJpbmcge1xuXHRcdC8vIHRoaXMgaXMgdXNlZCBpbiBjb2x1bW4uZnJhZ21lbnRcblx0XHRjb25zdCBvRGF0YUZpZWxkRGVmYXVsdCA9IChvRGF0YUZpZWxkQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKS5nZXRPYmplY3QoXG5cdFx0XHRgJHtvRGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgXG5cdFx0KTtcblx0XHRyZXR1cm4gb0RhdGFGaWVsZERlZmF1bHRcblx0XHRcdD8gYCR7b0RhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpfUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YFxuXHRcdFx0OiBvRGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCk7XG5cdH0sXG5cdC8qXG5cdCAqIE1ldGhvZCB0byBnZXQgdmlzaWJsZSBleHByZXNzaW9uIGZvciBEYXRhRmllbGRBY3Rpb25CdXR0b25cblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uVmlzaWJsZVxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1RoaXMgLSBDdXJyZW50IE9iamVjdFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0RhdGFGaWVsZCAtIERhdGFQb2ludCdzIFZhbHVlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYklzQm91bmQgLSBEYXRhUG9pbnQgYWN0aW9uIGJvdW5kXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQWN0aW9uQ29udGV4dCAtIEFjdGlvbkNvbnRleHQgVmFsdWVcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gLSByZXR1cm5zIGJvb2xlYW5cblx0ICovXG5cdGlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uVmlzaWJsZTogZnVuY3Rpb24gKFxuXHRcdG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdFx0YklzQm91bmQ6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0b0FjdGlvbkNvbnRleHQ/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBvRGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUgJiYgKGJJc0JvdW5kICE9PSB0cnVlIHx8IG9BY3Rpb25Db250ZXh0ICE9PSBmYWxzZSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHByZXNzIGV2ZW50IGZvciBEYXRhRmllbGRBY3Rpb25CdXR0b24uXG5cdCAqIEBwYXJhbSBvVGhpcyBDdXJyZW50IE9iamVjdFxuXHQgKiBAcGFyYW0gb0RhdGFGaWVsZCBEYXRhUG9pbnQncyBWYWx1ZVxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGF0YUZpZWxkQWN0aW9uQnV0dG9uIHByZXNzIGV2ZW50XG5cdCAqL1xuXHRnZXRQcmVzc0V2ZW50Rm9yRGF0YUZpZWxkQWN0aW9uQnV0dG9uOiBmdW5jdGlvbiAob1RoaXM6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBvRGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4pOiBzdHJpbmcge1xuXHRcdGlmICghb0RhdGFGaWVsZCkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHRcdGxldCBzSW52b2NhdGlvbkdyb3VwaW5nID0gXCJJc29sYXRlZFwiO1xuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHQob0RhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPE9wZXJhdGlvbkdyb3VwaW5nVHlwZT4pLiRFbnVtTWVtYmVyID09PVxuXHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdCkge1xuXHRcdFx0c0ludm9jYXRpb25Hcm91cGluZyA9IFwiQ2hhbmdlU2V0XCI7XG5cdFx0fVxuXHRcdGxldCBiSXNOYXZpZ2FibGUgPSBvVGhpcy5uYXZpZ2F0ZUFmdGVyQWN0aW9uIGFzIGJvb2xlYW4gfCBzdHJpbmc7XG5cdFx0YklzTmF2aWdhYmxlID0gYklzTmF2aWdhYmxlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHRydWU7XG5cblx0XHRjb25zdCBlbnRpdGllczogQXJyYXk8c3RyaW5nPiA9IG9UaGlzPy5jb250ZXh0UGF0aD8uZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBlbnRpdHlTZXROYW1lOiBzdHJpbmcgPSBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXTtcblxuXHRcdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0XHRjb250ZXh0czogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiLFxuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNJbnZvY2F0aW9uR3JvdXBpbmcpLFxuXHRcdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRcdGxhYmVsOiB0eXBlb2Ygb0RhdGFGaWVsZD8uTGFiZWwgPT09IFwic3RyaW5nXCIgPyBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwsIHRydWUpIDogXCJcIixcblx0XHRcdGlzTmF2aWdhYmxlOiBiSXNOYXZpZ2FibGUsXG5cdFx0XHRlbnRpdHlTZXROYW1lOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKGVudGl0eVNldE5hbWUpXG5cdFx0fTtcblxuXHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcdFwiLmVkaXRGbG93Lmludm9rZUFjdGlvblwiLFxuXHRcdFx0Q29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkFjdGlvbiEpLFxuXHRcdFx0Q29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKG9QYXJhbXMpXG5cdFx0KTtcblx0fSxcblxuXHRpc051bWVyaWNEYXRhVHlwZTogZnVuY3Rpb24gKHNEYXRhRmllbGRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBfc0RhdGFGaWVsZFR5cGUgPSBzRGF0YUZpZWxkVHlwZTtcblx0XHRpZiAoX3NEYXRhRmllbGRUeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGFOdW1lcmljRGF0YVR5cGVzID0gW1xuXHRcdFx0XHRcIkVkbS5JbnQxNlwiLFxuXHRcdFx0XHRcIkVkbS5JbnQzMlwiLFxuXHRcdFx0XHRcIkVkbS5JbnQ2NFwiLFxuXHRcdFx0XHRcIkVkbS5CeXRlXCIsXG5cdFx0XHRcdFwiRWRtLlNCeXRlXCIsXG5cdFx0XHRcdFwiRWRtLlNpbmdsZVwiLFxuXHRcdFx0XHRcIkVkbS5EZWNpbWFsXCIsXG5cdFx0XHRcdFwiRWRtLkRvdWJsZVwiXG5cdFx0XHRdO1xuXHRcdFx0cmV0dXJuICFhTnVtZXJpY0RhdGFUeXBlcy5pbmNsdWRlcyhfc0RhdGFGaWVsZFR5cGUpID8gZmFsc2UgOiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXG5cdGlzRGF0ZU9yVGltZURhdGFUeXBlOiBmdW5jdGlvbiAoc1Byb3BlcnR5VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKHNQcm9wZXJ0eVR5cGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgYURhdGVUaW1lRGF0YVR5cGVzID0gW1wiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsIFwiRWRtLkRhdGVUaW1lXCIsIFwiRWRtLkRhdGVcIiwgXCJFZG0uVGltZU9mRGF5XCIsIFwiRWRtLlRpbWVcIl07XG5cdFx0XHRyZXR1cm4gYURhdGVUaW1lRGF0YVR5cGVzLmluY2x1ZGVzKHNQcm9wZXJ0eVR5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXHRpc0RhdGVUaW1lRGF0YVR5cGU6IGZ1bmN0aW9uIChzUHJvcGVydHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRpZiAoc1Byb3BlcnR5VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBhRGF0ZURhdGFUeXBlcyA9IFtcIkVkbS5EYXRlVGltZU9mZnNldFwiLCBcIkVkbS5EYXRlVGltZVwiXTtcblx0XHRcdHJldHVybiBhRGF0ZURhdGFUeXBlcy5pbmNsdWRlcyhzUHJvcGVydHlUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0aXNEYXRlRGF0YVR5cGU6IGZ1bmN0aW9uIChzUHJvcGVydHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc1Byb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGF0ZVwiO1xuXHR9LFxuXHRpc1RpbWVEYXRhVHlwZTogZnVuY3Rpb24gKHNQcm9wZXJ0eVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGlmIChzUHJvcGVydHlUeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGFEYXRlRGF0YVR5cGVzID0gW1wiRWRtLlRpbWVPZkRheVwiLCBcIkVkbS5UaW1lXCJdO1xuXHRcdFx0cmV0dXJuIGFEYXRlRGF0YVR5cGVzLmluY2x1ZGVzKHNQcm9wZXJ0eVR5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUbyBkaXNwbGF5IGEgdGV4dCBhcnJhbmdlbWVudCBzaG93aW5nIHRleHQgYW5kIGlkLCB3ZSBuZWVkIGEgc3RyaW5nIGZpZWxkIG9uIHRoZSBVSS5cblx0ICogQHBhcmFtIG9Bbm5vdGF0aW9ucyBBbGwgdGhlIGFubm90YXRpb25zIG9mIGEgcHJvcGVydHlcblx0ICogQHBhcmFtIHNUeXBlIFRoZSBwcm9wZXJ0eSBkYXRhIHR5cGVcblx0ICogQHJldHVybnMgVGhlIHR5cGUgdG8gYmUgdXNlZCBvbiB0aGUgVUkgZm9yIHRoZSBhbGlnbm1lbnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbjogZnVuY3Rpb24gKG9Bbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucywgc1R5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1RleHRBbm5vdGF0aW9uID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIixcblx0XHRcdHNUZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCI7XG5cblx0XHQvKlxuXHRcdCAgSW4gY2FzZSBvZiBUZXh0U2VwYXJhdGUsIHRoZSByZXR1cm5lZCBpcyB1c2VkIGZvciB0aGUgZmlsZWQgaXRzZWxmIG9ubHkgc2hvd2luZ1xuXHRcdCAgIHRoZSB2YWx1ZSBvZiB0aGUgb3JpZ2luYWwgcHJvcGVydHksIHRodXMgYWxzbyB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgbmVlZHMgdG8gYmUgdXNlZC5cblx0XHQgIEluIGNhc2Ugb2YgVGV4dE9ubHksIHdlIGNvbnNpZGVyIGl0IHRvIGJlIEVkbS5TdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBkZWZpbml0aW9uXG5cdFx0ICAgaW4gdGhlIHZvY2FidWxhcnksIGV2ZW4gaWYgaXQncyBub3QuXG5cdFx0ICBJbiBvdGhlciBjYXNlcywgd2UgcmV0dXJuIEVkbS5TdHJpbmcsIGFzIHRoZSB2YWx1ZSBpcyBidWlsZCB1c2luZyBhIHRleHQgdGVtcGxhdGUuXG5cdFx0ICovXG5cdFx0cmV0dXJuIG9Bbm5vdGF0aW9ucz8uW3NUZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uXT8uJEVudW1NZW1iZXIgIT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0U2VwYXJhdGVcIiAmJlxuXHRcdFx0KG9Bbm5vdGF0aW9ucz8uW3NUZXh0QW5ub3RhdGlvbl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aFxuXHRcdFx0PyBcIkVkbS5TdHJpbmdcIlxuXHRcdFx0OiBzVHlwZTtcblx0fSxcblxuXHRnZXRDb2x1bW5BbGlnbm1lbnQ6IGZ1bmN0aW9uIChcblx0XHRvRGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRcdG9UYWJsZTogeyBjb2xsZWN0aW9uOiBCYXNlQ29udGV4dCB9XG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9UYWJsZS5jb2xsZWN0aW9uLmdldFBhdGgoKSxcblx0XHRcdG9Nb2RlbCA9IG9UYWJsZS5jb2xsZWN0aW9uLmdldE1vZGVsKCk7XG5cdFx0aWYgKFxuXHRcdFx0KG9EYXRhRmllbGRbXCIkVHlwZVwiXSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiB8fFxuXHRcdFx0XHRvRGF0YUZpZWxkW1wiJFR5cGVcIl0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpICYmXG5cdFx0XHQob0RhdGFGaWVsZCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4pLklubGluZSAmJlxuXHRcdFx0b0RhdGFGaWVsZC5JY29uVXJsXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gXCJDZW50ZXJcIjtcblx0XHR9XG5cdFx0Ly8gQ29sdW1ucyBjb250YWluaW5nIGEgU2VtYW50aWMgS2V5IG11c3QgYmUgQmVnaW4gYWxpZ25lZFxuXHRcdGNvbnN0IGFTZW1hbnRpY0tleXMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5YCk7XG5cdFx0aWYgKG9EYXRhRmllbGRbXCIkVHlwZVwiXSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IChvRGF0YUZpZWxkIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkPikuVmFsdWUuJFBhdGg7XG5cdFx0XHRjb25zdCBiSXNTZW1hbnRpY0tleSA9XG5cdFx0XHRcdGFTZW1hbnRpY0tleXMgJiZcblx0XHRcdFx0IWFTZW1hbnRpY0tleXMuZXZlcnkoZnVuY3Rpb24gKG9LZXk6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH0pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gb0tleS4kUHJvcGVydHlQYXRoICE9PSBzUHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KTtcblx0XHRcdGlmIChiSXNTZW1hbnRpY0tleSkge1xuXHRcdFx0XHRyZXR1cm4gXCJCZWdpblwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkQWxpZ25tZW50KG9EYXRhRmllbGQsIG9Nb2RlbCwgc0VudGl0eVBhdGgpO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5QWxpZ25tZW50OiBmdW5jdGlvbiAoXG5cdFx0c1R5cGU6IHN0cmluZyxcblx0XHRvRm9ybWF0T3B0aW9ucz86IHsgZGlzcGxheU1vZGU/OiBzdHJpbmc7IHRleHRBbGlnbk1vZGU/OiBzdHJpbmcgfSxcblx0XHRvQ29tcHV0ZWRFZGl0TW9kZT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRsZXQgc0RlZmF1bHRBbGlnbm1lbnQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gXCJCZWdpblwiO1xuXHRcdGNvbnN0IHNUZXh0QWxpZ25tZW50ID0gb0Zvcm1hdE9wdGlvbnMgPyBvRm9ybWF0T3B0aW9ucy50ZXh0QWxpZ25Nb2RlIDogXCJcIjtcblx0XHRpZiAoc1RleHRBbGlnbm1lbnQgPT09IFwiRm9ybVwiKSB7XG5cdFx0XHRpZiAodGhpcy5pc051bWVyaWNEYXRhVHlwZShzVHlwZSkpIHtcblx0XHRcdFx0c0RlZmF1bHRBbGlnbm1lbnQgPSBcIkJlZ2luXCI7XG5cdFx0XHRcdGlmIChvQ29tcHV0ZWRFZGl0TW9kZSkge1xuXHRcdFx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50RXhwcmVzc2lvbihvQ29tcHV0ZWRFZGl0TW9kZSwgXCJCZWdpblwiLCBcIkVuZFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGhpcy5pc051bWVyaWNEYXRhVHlwZShzVHlwZSkgfHwgdGhpcy5pc0RhdGVPclRpbWVEYXRhVHlwZShzVHlwZSkpIHtcblx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gXCJSaWdodFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc0RlZmF1bHRBbGlnbm1lbnQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBhbGlnbm1lbnQgYmFzZWQgb24gdGhlIGRhdGFGaWVsZC5cblx0ICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuXHQgKiBAcGFyYW0gbW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBlbnRpdHlQYXRoIFRoZSBwYXRoIHRvIHRoZSBlbnRpdHlcblx0ICogQHBhcmFtIFtmb3JtYXRPcHRpb25zXSBUaGUgT2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgZGF0YUZpZWxkJ3MgZm9ybWF0IG9wdGlvbnNcblx0ICogQHBhcmFtIGZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgRGlzcGxheSBmb3JtYXRcblx0ICogQHBhcmFtIGZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSBUZXh0IGFsaWdubWVudCBvZiB0aGUgZGF0YUZpZWxkXG5cdCAqIEBwYXJhbSBbY29tcHV0ZWRFZGl0TW9kZV0gVGhlIGNvbXB1dGVkIEVkaXQgbW9kZSBvZiB0aGUgZGF0YUZpZWxkXG5cdCAqIEByZXR1cm5zIFRoZSBkYXRhRmllbGQgYWxpZ25tZW50XG5cdCAqL1xuXHRnZXREYXRhRmllbGRBbGlnbm1lbnQ6IGZ1bmN0aW9uIChcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdFx0bW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGVudGl0eVBhdGg6IHN0cmluZyxcblx0XHRmb3JtYXRPcHRpb25zPzogeyBkaXNwbGF5TW9kZT86IHN0cmluZzsgdGV4dEFsaWduTW9kZT86IHN0cmluZyB9LFxuXHRcdGNvbXB1dGVkRWRpdE1vZGU/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0bGV0IGRhdGFGaWVsZFBhdGgsXG5cdFx0XHRkZWZhdWx0QWxpZ25tZW50OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IFwiQmVnaW5cIixcblx0XHRcdHR5cGUsXG5cdFx0XHRhbm5vdGF0aW9ucztcblxuXHRcdGlmIChkYXRhRmllbGQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0XHRkYXRhRmllbGRQYXRoID0gKGRhdGFGaWVsZCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFubm90YXRpb24+KS5UYXJnZXQ/LiRBbm5vdGF0aW9uUGF0aDtcblx0XHRcdGlmIChkYXRhRmllbGRQYXRoICYmIGRhdGFGaWVsZFBhdGguaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXAgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofWApO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRHcm91cC5EYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dHlwZSA9IG1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlQYXRofS8ke2RhdGFGaWVsZFBhdGh9L0RhdGEvJHtpLnRvU3RyaW5nKCl9L1ZhbHVlLyRQYXRoLyRUeXBlYCk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbnMgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS9EYXRhLyR7aS50b1N0cmluZygpfS9WYWx1ZS8kUGF0aEBgKTtcblx0XHRcdFx0XHR0eXBlID0gdGhpcy5nZXREYXRhVHlwZUZvclZpc3VhbGl6YXRpb24oYW5ub3RhdGlvbnMsIHR5cGUpO1xuXHRcdFx0XHRcdGRlZmF1bHRBbGlnbm1lbnQgPSB0aGlzLmdldFByb3BlcnR5QWxpZ25tZW50KHR5cGUsIGZvcm1hdE9wdGlvbnMsIGNvbXB1dGVkRWRpdE1vZGUpO1xuXG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBbGlnbm1lbnQgPT09IFwiQmVnaW5cIikge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBkZWZhdWx0QWxpZ25tZW50O1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZGF0YUZpZWxkUGF0aCAmJlxuXHRcdFx0XHRkYXRhRmllbGRQYXRoLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpICYmXG5cdFx0XHRcdChtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyYCkgPT09XG5cdFx0XHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIiB8fFxuXHRcdFx0XHRcdG1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlQYXRofS8ke2RhdGFGaWVsZFBhdGh9L1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJgKSA9PT1cblx0XHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUHJvZ3Jlc3NcIilcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gZGVmYXVsdEFsaWdubWVudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR5cGUgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS8kVHlwZWApO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSkge1xuXHRcdFx0XHRcdHR5cGUgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS9WYWx1ZS8kUGF0aC8kVHlwZWApO1xuXHRcdFx0XHRcdGFubm90YXRpb25zID0gbW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVBhdGh9LyR7ZGF0YUZpZWxkUGF0aH0vVmFsdWUvJFBhdGhAYCk7XG5cdFx0XHRcdFx0dHlwZSA9IHRoaXMuZ2V0RGF0YVR5cGVGb3JWaXN1YWxpemF0aW9uKGFubm90YXRpb25zLCB0eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0QWxpZ25tZW50ID0gdGhpcy5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlLCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YUZpZWxkUGF0aCA9IChkYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz4pLlZhbHVlPy4kUGF0aDtcblx0XHRcdHR5cGUgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS8kVHlwZWApO1xuXHRcdFx0YW5ub3RhdGlvbnMgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofUBgKTtcblx0XHRcdHR5cGUgPSB0aGlzLmdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbihhbm5vdGF0aW9ucywgdHlwZSk7XG5cdFx0XHRjb25zdCBrZXlzID0gbW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVBhdGh9L2ApW1wiJEtleVwiXTtcblx0XHRcdGlmIChrZXlzICYmIGtleXMuaW5kZXhPZihkYXRhRmllbGRQYXRoKSAhPT0gMCkge1xuXHRcdFx0XHRkZWZhdWx0QWxpZ25tZW50ID0gdGhpcy5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlLCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRlZmF1bHRBbGlnbm1lbnQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgZW5hYmxlZCBleHByZXNzaW9uIGZvciBEYXRhRmllbGRBY3Rpb25CdXR0b24uXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFQb2ludCdzIFZhbHVlXG5cdCAqIEBwYXJhbSBiSXNCb3VuZCBEYXRhUG9pbnQgYWN0aW9uIGJvdW5kXG5cdCAqIEBwYXJhbSBvQWN0aW9uQ29udGV4dCBBY3Rpb25Db250ZXh0IFZhbHVlXG5cdCAqIEBwYXJhbSBzQWN0aW9uQ29udGV4dEZvcm1hdCBGb3JtYXR0ZWQgdmFsdWUgb2YgQWN0aW9uQ29udGV4dFxuXHQgKiBAcmV0dXJucyBBIGJvb2xlYW4gb3Igc3RyaW5nIGV4cHJlc3Npb24gZm9yIGVuYWJsZWQgcHJvcGVydHlcblx0ICovXG5cdGlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uRW5hYmxlZDogZnVuY3Rpb24gKFxuXHRcdG9EYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0XHRiSXNCb3VuZDogYm9vbGVhbixcblx0XHRvQWN0aW9uQ29udGV4dDogc3RyaW5nIHwgT3BlcmF0aW9uQXZhaWxhYmxlIHwgdW5kZWZpbmVkIHwgbnVsbCxcblx0XHRzQWN0aW9uQ29udGV4dEZvcm1hdDogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0aWYgKGJJc0JvdW5kICE9PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdFx0fVxuXHRcdHJldHVybiAob0FjdGlvbkNvbnRleHQgPT09IG51bGwgPyBcIns9ICEkeyNcIiArIG9EYXRhRmllbGQuQWN0aW9uICsgXCJ9ID8gZmFsc2UgOiB0cnVlIH1cIiA6IG9BY3Rpb25Db250ZXh0KVxuXHRcdFx0PyBzQWN0aW9uQ29udGV4dEZvcm1hdFxuXHRcdFx0OiBcInRydWVcIjtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGNvbXB1dGUgdGhlIGxhYmVsIGZvciBhIERhdGFGaWVsZC5cblx0ICogSWYgdGhlIERhdGFGaWVsZCdzIGxhYmVsIGlzIGFuIGVtcHR5IHN0cmluZywgaXQncyBub3QgcmVuZGVyZWQgZXZlbiBpZiBhIGZhbGxiYWNrIGV4aXN0cy5cblx0ICogQHBhcmFtIHtvYmplY3R9IG9EYXRhRmllbGQgVGhlIERhdGFGaWVsZCBiZWluZyBwcm9jZXNzZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9JbnRlcmZhY2UgVGhlIGludGVyZmFjZSBmb3IgY29udGV4dCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tcHV0ZWQgdGV4dCBmb3IgdGhlIERhdGFGaWVsZCBsYWJlbC5cblx0ICovXG5cblx0Y29tcHV0ZUxhYmVsVGV4dDogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkVHlwZXM+LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGxldCBzQ29udGV4dFBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChzQ29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRzQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc2xpY2UoMCwgc0NvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNEYXRhRmllbGRMYWJlbCA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9MYWJlbGApO1xuXHRcdC8vV2UgZG8gbm90IHNob3cgYW4gYWRkaXRpb25hbCBsYWJlbCB0ZXh0IGZvciBhIGJ1dHRvbjpcblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoc0RhdGFGaWVsZExhYmVsKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZExhYmVsO1xuXHRcdH0gZWxzZSBpZiAoc0RhdGFGaWVsZExhYmVsID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0bGV0IHNEYXRhRmllbGRUYXJnZXRUaXRsZTtcblx0XHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCIpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KG9EYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPik/LlRhcmdldD8uJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKFxuXHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiXG5cdFx0XHRcdCkgfHxcblx0XHRcdFx0KG9EYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPik/LlRhcmdldD8uJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0c0RhdGFGaWVsZFRhcmdldFRpdGxlID0gb01vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGhAL1RpdGxlYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChvRGF0YUZpZWxkIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4pPy5UYXJnZXQ/LiRBbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhcblx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIlxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0c0RhdGFGaWVsZFRhcmdldFRpdGxlID0gb01vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRgJHtzQ29udGV4dFBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGhAL2ZuLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbGBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNEYXRhRmllbGRUYXJnZXRUaXRsZSkge1xuXHRcdFx0cmV0dXJuIHNEYXRhRmllbGRUYXJnZXRUaXRsZTtcblx0XHR9XG5cdFx0bGV0IHNEYXRhRmllbGRUYXJnZXRMYWJlbDtcblx0XHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCIpIHtcblx0XHRcdHNEYXRhRmllbGRUYXJnZXRMYWJlbCA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoQC9MYWJlbGApO1xuXHRcdH1cblx0XHRpZiAoc0RhdGFGaWVsZFRhcmdldExhYmVsKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZFRhcmdldExhYmVsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNEYXRhRmllbGRWYWx1ZUxhYmVsID0gb01vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L1ZhbHVlLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbGApO1xuXHRcdGlmIChzRGF0YUZpZWxkVmFsdWVMYWJlbCkge1xuXHRcdFx0cmV0dXJuIHNEYXRhRmllbGRWYWx1ZUxhYmVsO1xuXHRcdH1cblxuXHRcdGxldCBzRGF0YUZpZWxkVGFyZ2V0VmFsdWVMYWJlbDtcblx0XHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCIpIHtcblx0XHRcdHNEYXRhRmllbGRUYXJnZXRWYWx1ZUxhYmVsID0gb01vZGVsLmdldE9iamVjdChcblx0XHRcdFx0YCR7c0NvbnRleHRQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL1ZhbHVlLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbGBcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmIChzRGF0YUZpZWxkVGFyZ2V0VmFsdWVMYWJlbCkge1xuXHRcdFx0cmV0dXJuIHNEYXRhRmllbGRUYXJnZXRWYWx1ZUxhYmVsO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBhbGlnbiB0aGUgZGF0YSBmaWVsZHMgd2l0aCB0aGVpciBsYWJlbC5cblx0ICogQHBhcmFtIHNWaXN1YWxpemF0aW9uXG5cdCAqIEByZXR1cm5zIEV4cHJlc3Npb24gYmluZGluZyBmb3IgYWxpZ25JdGVtcyBwcm9wZXJ0eVxuXHQgKi9cblx0YnVpbGRFeHByZXNzaW9uRm9yQWxpZ25JdGVtczogZnVuY3Rpb24gKHNWaXN1YWxpemF0aW9uOiBzdHJpbmcpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgZmllbGRWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24gPSBjb25zdGFudChzVmlzdWFsaXphdGlvbik7XG5cdFx0Y29uc3QgcHJvZ3Jlc3NWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24gPSBjb25zdGFudChcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlZpc3VhbGl6YXRpb25UeXBlL1Byb2dyZXNzXCIpO1xuXHRcdGNvbnN0IHJhdGluZ1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiA9IGNvbnN0YW50KFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpO1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0ZXF1YWwoZmllbGRWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24sIHByb2dyZXNzVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRlcXVhbChmaWVsZFZpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiwgcmF0aW5nVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjb25zdGFudChcIkNlbnRlclwiKSxcblx0XHRcdFx0aWZFbHNlKFVJLklzRWRpdGFibGUsIGNvbnN0YW50KFwiQ2VudGVyXCIpLCBjb25zdGFudChcIlN0cmV0Y2hcIikpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGNoZWNrIFZhbHVlTGlzdFJlZmVyZW5jZXMsIFZhbHVlTGlzdE1hcHBpbmcgYW5kIFZhbHVlTGlzdCBpbnNpZGUgQWN0aW9uUGFyYW1ldGVycyBmb3IgVmFsdWVIZWxwLlxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5QW5ub3RhdGlvbnMgQWN0aW9uIHBhcmFtZXRlciBvYmplY3Rcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgVmFsdWVMaXN0KiBhbm5vdGF0aW9uIGRlZmluZWRcblx0ICovXG5cdGhhc1ZhbHVlSGVscEFubm90YXRpb246IGZ1bmN0aW9uIChvUHJvcGVydHlBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyk6IGJvb2xlYW4ge1xuXHRcdGlmIChvUHJvcGVydHlBbm5vdGF0aW9ucykge1xuXHRcdFx0cmV0dXJuICEhKFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVmZXJlbmNlc1wiXSB8fFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1wiXSB8fFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0XCJdXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IGRpc3BsYXkgcHJvcGVydHkgZm9yIEFjdGlvblBhcmFtZXRlciBkaWFsb2cuXG5cdCAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGludGVyZmFjZSBmb3IgdGhlIGNvbnRleHQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGRpc3BsYXkgZm9ybWF0ICBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBGaWVsZFxuXHQgKi9cblx0Z2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0OiBhc3luYyBmdW5jdGlvbiAob1Byb3BlcnR5OiBNZXRhTW9kZWxQcm9wZXJ0eSwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRsZXQgb0Fubm90YXRpb247XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBzUHJvcGVydHlOYW1lID0gb1Byb3BlcnR5LiROYW1lIHx8IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQcm9wZXJ0eShgJHtzQ29udGV4dFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRjb25zdCBvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AYCk7XG5cdFx0Y29uc3Qgb1ZhbHVlSGVscEFubm90YXRpb24gPVxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0gfHxcblx0XHRcdG9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1wiXSB8fFxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWZlcmVuY2VzXCJdO1xuXHRcdGNvbnN0IGdldFZhbHVlTGlzdFByb3BlcnR5TmFtZSA9IGZ1bmN0aW9uIChvVmFsdWVMaXN0OiB7XG5cdFx0XHRQYXJhbWV0ZXJzOiB7IExvY2FsRGF0YVByb3BlcnR5PzogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTsgVmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZyB9W107XG5cdFx0fSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRjb25zdCBvVmFsdWVMaXN0UGFyYW1ldGVyID0gb1ZhbHVlTGlzdC5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IHtcblx0XHRcdFx0TG9jYWxEYXRhUHJvcGVydHk/OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9O1xuXHRcdFx0fSkge1xuXHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eSAmJiBvUGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBvVmFsdWVMaXN0UGFyYW1ldGVyICYmIG9WYWx1ZUxpc3RQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0fTtcblx0XHRsZXQgc1ZhbHVlTGlzdFByb3BlcnR5TmFtZTtcblx0XHRpZiAoXG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRBcnJhbmdlbWVudFwiXSB8fFxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnMsIHVuZGVmaW5lZCk7XG5cdFx0fSBlbHNlIGlmIChvVmFsdWVIZWxwQW5ub3RhdGlvbikge1xuXHRcdFx0aWYgKG9WYWx1ZUhlbHBBbm5vdGF0aW9uLkNvbGxlY3Rpb25QYXRoKSB7XG5cdFx0XHRcdC8vIGdldCB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpbiB2YWx1ZSBsaXN0IGNvbGxlY3Rpb25cblx0XHRcdFx0c1ZhbHVlTGlzdFByb3BlcnR5TmFtZSA9IGdldFZhbHVlTGlzdFByb3BlcnR5TmFtZShvVmFsdWVIZWxwQW5ub3RhdGlvbik7XG5cdFx0XHRcdGlmICghc1ZhbHVlTGlzdFByb3BlcnR5TmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZ2V0IHRleHQgZm9yIHRoaXMgcHJvcGVydHlcblx0XHRcdFx0b0Fubm90YXRpb24gPSBvTW9kZWwuZ2V0T2JqZWN0KGAvJHtvVmFsdWVIZWxwQW5ub3RhdGlvbi5Db2xsZWN0aW9uUGF0aH0vJHtzVmFsdWVMaXN0UHJvcGVydHlOYW1lfUBgKTtcblx0XHRcdFx0cmV0dXJuIG9Bbm5vdGF0aW9uICYmIG9Bbm5vdGF0aW9uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0PyBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob0Fubm90YXRpb24sIHVuZGVmaW5lZClcblx0XHRcdFx0XHQ6IFwiVmFsdWVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBvTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8oc0NvbnRleHRQYXRoLCB0cnVlKS50aGVuKGZ1bmN0aW9uIChvVmFsdWVMaXN0SW5mbykge1xuXHRcdFx0XHRcdGNvbnN0IHF1YWxpZmVyID0gRmllbGRIZWxwZXIuZ2V0VmFsdWVMaXN0UXVsaWZlckZvclBhcmFtZXRlckRpc3BsYXlGb3JtYXQob01vZGVsLCBzQ29udGV4dFBhdGgsIG9WYWx1ZUxpc3RJbmZvKTtcblx0XHRcdFx0XHQvLyBnZXQgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaW4gdmFsdWUgbGlzdCBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0c1ZhbHVlTGlzdFByb3BlcnR5TmFtZSA9IGdldFZhbHVlTGlzdFByb3BlcnR5TmFtZShvVmFsdWVMaXN0SW5mb1txdWFsaWZlcl0pO1xuXHRcdFx0XHRcdGlmICghc1ZhbHVlTGlzdFByb3BlcnR5TmFtZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiVmFsdWVcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZ2V0IHRleHQgZm9yIHRoaXMgcHJvcGVydHlcblx0XHRcdFx0XHRvQW5ub3RhdGlvbiA9IG9WYWx1ZUxpc3RJbmZvW3F1YWxpZmVyXS4kbW9kZWxcblx0XHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdFx0LmdldE9iamVjdChgLyR7b1ZhbHVlTGlzdEluZm9bcXVhbGlmZXJdW1wiQ29sbGVjdGlvblBhdGhcIl19LyR7c1ZhbHVlTGlzdFByb3BlcnR5TmFtZX1AYCk7XG5cdFx0XHRcdFx0cmV0dXJuIG9Bbm5vdGF0aW9uICYmIG9Bbm5vdGF0aW9uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0XHQ/IENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShvQW5ub3RhdGlvbiwgdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0OiBcIlZhbHVlXCI7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgdmFsdWUgbGlzdCBxdWFsaWZpZXIgZm9yIGRldGVybWluaW5nIHRoZSBkaXNwbGF5IGZvcm1hdCBvZiBhbiBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbC5cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBQcm9wZXJ0eSBwYXRoIG9mIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9ybWF0aW9uLlxuXHQgKiBAcmV0dXJucyBWYWx1ZSBsaXN0IHF1YWxpZmllciBpbiBTdHJpbmcgZm9ybWF0LlxuXHQgKi9cblx0Z2V0VmFsdWVMaXN0UXVsaWZlckZvclBhcmFtZXRlckRpc3BsYXlGb3JtYXQ6IGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlTGlzdEluZm86IFJlY29yZDxzdHJpbmcsIFZhbHVlTGlzdEluZm8+XG5cdCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVIZWxwUXVhbGlmaWVycyA9IFZhbHVlTGlzdEhlbHBlci5wdXREZWZhdWx0UXVhbGlmaWVyRmlyc3QoT2JqZWN0LmtleXModmFsdWVMaXN0SW5mbykpO1xuXHRcdGxldCBxdWFsaWZlciA9IHZhbHVlSGVscFF1YWxpZmllcnNbMF07XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlckNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7cHJvcGVydHlQYXRofWApIGFzIENvbnRleHQ7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRQcm9wZXJ0eSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhwYXJhbWV0ZXJDb250ZXh0KS50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdFx0XHRjb25zdCBpc1ZhbHVlTGlzdEZvclZhbGlkYXRpb24gPSBoYXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uKGNvbnZlcnRlZFByb3BlcnR5KTtcblx0XHRcdHF1YWxpZmVyID0gaXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uXG5cdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZFByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdEZvclZhbGlkYXRpb24gYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdCAgKSA/PyBcIlwiXG5cdFx0XHRcdDogcXVhbGlmZXI7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ291bGRuJ3QgZmluZGluZyBxdWFsaWZlciBmb3IgdmFsdWUgbGlzdCBvZiBhY3Rpb24gcGFyYW1ldGVyICR7cHJvcGVydHlQYXRofWApO1xuXHRcdH1cblx0XHRyZXR1cm4gcXVhbGlmZXI7XG5cdH0sXG5cblx0Lypcblx0ICogTWV0aG9kIHRvIGdldCBkaXNwbGF5IHByb3BlcnR5IGZvciBBY3Rpb25QYXJhbWV0ZXIgZGlhbG9nIFZhbHVlSGVscC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldEFjdGlvblBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscFxuXHQgKiBAcGFyYW0gb0FjdGlvblBhcmFtZXRlciBBY3Rpb24gcGFyYW1ldGVyIG9iamVjdFxuXHQgKiBAcGFyYW0gc1NhcFVJTmFtZSBBY3Rpb24gc2FwdWkgbmFtZVxuXHQgKiBAcGFyYW0gc1BhcmFtTmFtZSBUaGUgcGFyYW1ldGVyIG5hbWVcblx0ICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBmaWVsZEhlbHAgdXNlZCBieSB0aGlzIGFjdGlvbiBwYXJhbWV0ZXJcblx0ICovXG5cdGdldEFjdGlvblBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscDogZnVuY3Rpb24gKFxuXHRcdG9BY3Rpb25QYXJhbWV0ZXI6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0c1NhcFVJTmFtZTogc3RyaW5nLFxuXHRcdHNQYXJhbU5hbWU6IHN0cmluZ1xuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmhhc1ZhbHVlSGVscEFubm90YXRpb24ob0FjdGlvblBhcmFtZXRlcikgPyBnZW5lcmF0ZShbc1NhcFVJTmFtZSwgc1BhcmFtTmFtZV0pIDogdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgZGVsZWdhdGUgY29uZmlndXJhdGlvbiBmb3IgQWN0aW9uUGFyYW1ldGVyIGRpYWxvZy5cblx0ICogQHBhcmFtIGlzQm91bmQgQWN0aW9uIGlzIGJvdW5kXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlUGF0aCBUaGUgRW50aXR5VHlwZSBQYXRoXG5cdCAqIEBwYXJhbSBzYXBVSU5hbWUgVGhlIG5hbWUgb2YgdGhlIEFjdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1OYW1lIFRoZSBuYW1lIG9mIHRoZSBBY3Rpb25QYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGRlbGVnYXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFzIGEgc3RyaW5nXG5cdCAqL1xuXHRnZXRWYWx1ZUhlbHBEZWxlZ2F0ZTogZnVuY3Rpb24gKGlzQm91bmQ6IGJvb2xlYW4sIGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsIHNhcFVJTmFtZTogc3RyaW5nLCBwYXJhbU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVsZWdhdGVDb25maWd1cmF0aW9uOiB7IG5hbWU6IHN0cmluZzsgcGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCB9ID0ge1xuXHRcdFx0bmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhcInNhcC9mZS9tYWNyb3MvdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCIpLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoXG5cdFx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLmdldFByb3BlcnR5UGF0aCh7XG5cdFx0XHRcdFx0XHRVbmJvdW5kQWN0aW9uOiAhaXNCb3VuZCxcblx0XHRcdFx0XHRcdEVudGl0eVR5cGVQYXRoOiBlbnRpdHlUeXBlUGF0aCxcblx0XHRcdFx0XHRcdEFjdGlvbjogc2FwVUlOYW1lLFxuXHRcdFx0XHRcdFx0UHJvcGVydHk6IHBhcmFtTmFtZVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCksXG5cdFx0XHRcdHF1YWxpZmllcnM6IHt9LFxuXHRcdFx0XHR2YWx1ZUhlbHBRdWFsaWZpZXI6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoXCJcIiksXG5cdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiB0cnVlXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKGRlbGVnYXRlQ29uZmlndXJhdGlvbik7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBkZWxlZ2F0ZSBjb25maWd1cmF0aW9uIGZvciBOb25Db21wdXRlZFZpc2libGVLZXlGaWVsZCBkaWFsb2cuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGN1cnJlbnQgcHJvcGVydHkgcGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgZGVsZWdhdGUgY29uZmlndXJhdGlvbiBvYmplY3QgYXMgYSBzdHJpbmdcblx0ICovXG5cdGdldFZhbHVlSGVscERlbGVnYXRlRm9yTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGQ6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVsZWdhdGVDb25maWd1cmF0aW9uOiB7IG5hbWU6IHN0cmluZzsgcGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCB9ID0ge1xuXHRcdFx0bmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhcInNhcC9mZS9tYWNyb3MvdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCIpLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMocHJvcGVydHlQYXRoKSxcblx0XHRcdFx0cXVhbGlmaWVyczoge30sXG5cdFx0XHRcdHZhbHVlSGVscFF1YWxpZmllcjogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhcIlwiKVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhkZWxlZ2F0ZUNvbmZpZ3VyYXRpb24pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZmV0Y2ggZW50aXR5IGZyb20gYSBwYXRoIGNvbnRhaW5pbmcgbXVsdGlwbGUgYXNzb2NpYXRpb25zLlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgd2hvc2UgcGF0aCBpcyB0byBiZSBjaGVja2VkXG5cdCAqIEBwYXJhbSBzUGF0aCBUaGUgcGF0aCBmcm9tIHdoaWNoIGVudGl0eSBoYXMgdG8gYmUgZmV0Y2hlZFxuXHQgKiBAcGFyYW0gc1NvdXJjZUVudGl0eSBUaGUgZW50aXR5IHBhdGggaW4gd2hpY2ggbmF2IGVudGl0eSBleGlzdHNcblx0ICogQHBhcmFtIGlTdGFydCBUaGUgc3RhcnQgaW5kZXggOiBiZWdpbm5pbmcgcGFydHMgb2YgdGhlIHBhdGggdG8gYmUgaWdub3JlZFxuXHQgKiBAcGFyYW0gaURpZmYgVGhlIGRpZmYgaW5kZXggOiBlbmQgcGFydHMgb2YgdGhlIHBhdGggdG8gYmUgaWdub3JlZFxuXHQgKiBAcmV0dXJucyBUaGUgcGF0aCBvZiB0aGUgZW50aXR5IHNldFxuXHQgKi9cblx0X2dldEVudGl0eVNldEZyb21NdWx0aUxldmVsOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQsIHNQYXRoOiBzdHJpbmcsIHNTb3VyY2VFbnRpdHk6IHN0cmluZywgaVN0YXJ0OiBudW1iZXIsIGlEaWZmOiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdGxldCBhTmF2UGFydHMgPSBzUGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pO1xuXHRcdGFOYXZQYXJ0cyA9IGFOYXZQYXJ0cy5maWx0ZXIoZnVuY3Rpb24gKHNQYXJ0OiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBzUGFydCAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRcdH0pO1xuXHRcdGlmIChhTmF2UGFydHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IGlTdGFydDsgaSA8IGFOYXZQYXJ0cy5sZW5ndGggLSBpRGlmZjsgaSsrKSB7XG5cdFx0XHRcdHNTb3VyY2VFbnRpdHkgPSBcIi9cIiArIG9Db250ZXh0LmdldE9iamVjdChgJHtzU291cmNlRW50aXR5fS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke2FOYXZQYXJ0c1tpXX1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNTb3VyY2VFbnRpdHk7XG5cdH0sXG5cblx0Z2V0UGF0aEZvckljb25Tb3VyY2U6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoPzogc3RyaW5nKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGZvcm1hdFJlc3VsdChbcGF0aEluTW9kZWwoYCR7c1Byb3BlcnR5UGF0aH1Ab2RhdGEubWVkaWFDb250ZW50VHlwZWApXSwgXCIuX2Zvcm1hdHRlcnMuVmFsdWVGb3JtYXR0ZXIjZ2V0SWNvbkZvck1pbWVUeXBlXCIpXG5cdFx0KTtcblx0fSxcblx0Z2V0RmlsZW5hbWVFeHByOiBmdW5jdGlvbiAoc0ZpbGVuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNOb0ZpbGVuYW1lVGV4dDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoc0ZpbGVuYW1lKSB7XG5cdFx0XHRpZiAoc0ZpbGVuYW1lLmluZGV4T2YoXCJ7XCIpID09PSAwKSB7XG5cdFx0XHRcdC8vIGZpbGVuYW1lIGlzIHJlZmVyZW5jZWQgdmlhIHBhdGgsIGkuZS4gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lIDogcGF0aFxuXHRcdFx0XHRyZXR1cm4gXCJ7PSAkXCIgKyBzRmlsZW5hbWUgKyBcIiA/ICRcIiArIHNGaWxlbmFtZSArIFwiIDogJFwiICsgc05vRmlsZW5hbWVUZXh0ICsgXCJ9XCI7XG5cdFx0XHR9XG5cdFx0XHQvLyBzdGF0aWMgZmlsZW5hbWUsIGkuZS4gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lIDogJ3NvbWVTdGF0aWNOYW1lJ1xuXHRcdFx0cmV0dXJuIHNGaWxlbmFtZTtcblx0XHR9XG5cdFx0Ly8gbm8gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lXG5cdFx0cmV0dXJuIHNOb0ZpbGVuYW1lVGV4dDtcblx0fSxcblxuXHRjYWxjdWxhdGVNQmZyb21CeXRlOiBmdW5jdGlvbiAoaUJ5dGU/OiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBpQnl0ZSA/IChpQnl0ZSAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoNikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldERvd25sb2FkVXJsOiBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBwcm9wZXJ0eVBhdGggKyBcIns9ICR7aW50ZXJuYWw+L3N0aWNreVNlc3Npb25Ub2tlbn0gPyAoJz9TQVAtQ29udGV4dElkPScgKyAke2ludGVybmFsPi9zdGlja3lTZXNzaW9uVG9rZW59KSA6ICcnIH1cIjtcblx0fSxcblx0Z2V0TWFyZ2luQ2xhc3M6IGZ1bmN0aW9uIChjb21wYWN0U2VtYW50aWNLZXk6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBjb21wYWN0U2VtYW50aWNLZXkgPT09IFwidHJ1ZVwiIHx8IGNvbXBhY3RTZW1hbnRpY0tleSA9PT0gdHJ1ZSA/IFwic2FwTVRhYmxlQ29udGVudE1hcmdpblwiIDogdW5kZWZpbmVkO1xuXHR9LFxuXHRnZXRSZXF1aXJlZDogZnVuY3Rpb24gKFxuXHRcdGltbXV0YWJsZUtleTogc3RyaW5nLFxuXHRcdHRhcmdldDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlIHwgdW5kZWZpbmVkPiB8IG51bGwsXG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0bGV0IHRhcmdldFJlcXVpcmVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdGlmICh0YXJnZXQgIT09IG51bGwpIHtcblx0XHRcdHRhcmdldFJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKHRhcmdldD8udGFyZ2V0T2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKHRhcmdldFJlcXVpcmVkRXhwcmVzc2lvbiwgcmVxdWlyZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGltbXV0YWJsZUtleSkpKTtcblx0fSxcblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCBjaGVja3MgaWYgdGhlIGZpZWxkIGlzIGFscmVhZHkgcGFydCBvZiBhIGZvcm0uXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRDb2xsZWN0aW9uIFRoZSBsaXN0IG9mIHRoZSBmaWVsZHMgb2YgdGhlIGZvcm1cblx0ICogQHBhcmFtIGRhdGFGaWVsZE9iamVjdFBhdGggVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGggb2YgdGhlIGZpZWxkIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQgaW4gdGhlIGZvcm1cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWVsZCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIGZvcm0sIGBmYWxzZWAgb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0ZpZWxkUGFydE9mRm9ybTogZnVuY3Rpb24gKFxuXHRcdGRhdGFGaWVsZENvbGxlY3Rpb246IEZvcm1FbGVtZW50W10sXG5cdFx0ZGF0YUZpZWxkT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPlxuXHQpOiBib29sZWFuIHtcblx0XHQvL2dlbmVyYXRpbmcga2V5IGZvciB0aGUgcmVjZWl2ZWQgZGF0YSBmaWVsZFxuXHRcdGNvbnN0IGNvbm5lY3RlZERhdGFGaWVsZEtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkT2JqZWN0UGF0aC50YXJnZXRPYmplY3QhKTtcblx0XHQvLyB0cnlpbmcgdG8gZmluZCB0aGUgZ2VuZXJhdGVkIGtleSBpbiBhbHJlYWR5IGV4aXN0aW5nIGZvcm0gZWxlbWVudHNcblx0XHRjb25zdCBpc0ZpZWxkRm91bmQgPSBkYXRhRmllbGRDb2xsZWN0aW9uLmZpbmQoKGZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gZmllbGQua2V5ID09PSBjb25uZWN0ZWREYXRhRmllbGRLZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGlzRmllbGRGb3VuZCA/IHRydWUgOiBmYWxzZTtcblx0fVxufTtcbihGaWVsZEhlbHBlci5maWVsZENvbnRyb2wgYXMgeyByZXF1aXJlc0lDb250ZXh0PzogYm9vbGVhbiB9KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbihGaWVsZEhlbHBlci5nZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQgYXMgeyByZXF1aXJlc0lDb250ZXh0PzogYm9vbGVhbiB9KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbihGaWVsZEhlbHBlci5jb21wdXRlTGFiZWxUZXh0IGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oRmllbGRIZWxwZXIuZ2V0QWN0aW9uUGFyYW1ldGVyVmlzaWJpbGl0eSBhcyB7IHJlcXVpcmVzSUNvbnRleHQ/OiBib29sZWFuIH0pLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBGaWVsZEhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWtEQSxNQUFNQSxXQUFXLEdBQUcsb0NBQW9DO0lBQ3ZEQyxJ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
|
|
834
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJU09DdXJyZW5jeSIsIlVuaXQiLCJGaWVsZEhlbHBlciIsImdldEFjdGlvblBhcmFtZXRlclZpc2liaWxpdHkiLCJvUGFyYW0iLCJvQ29udGV4dCIsIm9QYXJhbUlmIiwiJElmIiwibGVuZ3RoIiwib05lZ1BhcmFtIiwiQW5ub3RhdGlvbkhlbHBlciIsInZhbHVlIiwiJFBhdGgiLCJ1bmRlZmluZWQiLCJwcm9wZXJ0eU5hbWUiLCJ2UHJvcGVydHkiLCJvSW50ZXJmYWNlIiwic1Byb3BlcnR5TmFtZSIsImNvbnRleHQiLCJnZXRQYXRoIiwiaW5jbHVkZXMiLCIkUHJvcGVydHlQYXRoIiwic1BhdGgiLCJzQ29udGV4dFBhdGgiLCJnZXRPYmplY3QiLCJWYWx1ZSIsImZpZWxkQ29udHJvbCIsInNQcm9wZXJ0eVBhdGgiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9GaWVsZENvbnRyb2xDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJvRmllbGRDb250cm9sIiwiZ2V0UHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIiRFbnVtTWVtYmVyIiwidmFsdWVIZWxwUHJvcGVydHkiLCJvUHJvcGVydHlDb250ZXh0IiwiYkluRmlsdGVyRmllbGQiLCJvQ29udGVudCIsInNBbm5vUGF0aCIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwic0Fubm90YXRpb24iLCJzVW5pdE9yQ3VycmVuY3lQYXRoIiwidmFsdWVIZWxwUHJvcGVydHlGb3JGaWx0ZXJGaWVsZCIsImdldElERm9yRmllbGRWYWx1ZUhlbHAiLCJzRmxleElkIiwic0lkUHJlZml4Iiwic09yaWdpbmFsUHJvcGVydHlOYW1lIiwic1Byb3BlcnR5IiwiZ2VuZXJhdGUiLCJnZXRWYWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkIiwicHJvcGVydHlDb250ZXh0Iiwib1Byb3BlcnR5Iiwic1Byb3BlcnR5VHlwZSIsInNWaElkUHJlZml4Iiwic0VudGl0eVR5cGUiLCJzVmFsdWVIZWxwUHJvcGVydHlOYW1lIiwiYkhhc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsImJVc2VTZW1hbnRpY0RhdGVSYW5nZSIsImJTZW1hbnRpY0RhdGVSYW5nZSIsInNQcm9wZXJ0eUxvY2F0aW9uUGF0aCIsIkNvbW1vbkhlbHBlciIsImdldExvY2F0aW9uRm9yUHJvcGVydHlQYXRoIiwiZGF0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0Q29udGV4dCIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJGaWx0ZXJSZXN0cmljdGlvbnMiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeURhdGFNb2RlbCIsIkZpbHRlckFsbG93ZWRFeHByZXNzaW9ucyIsImNvbXB1dGVGaWVsZEJhc2VEZWxlZ2F0ZSIsImRlbGVnYXRlTmFtZSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJuYW1lIiwicGF5bG9hZCIsIl9nZXRQcmltYXJ5SW50ZW50cyIsImFwcENvbXBvbmVudCIsInNlbWFudGljT2JqZWN0c0xpc3QiLCJwcm9taXNlcyIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImZvckVhY2giLCJzZW1PYmplY3QiLCJwdXNoIiwiZ2V0UHJpbWFyeUludGVudCIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwic2VtYW50aWNPYmplY3RQcmltYXJ5QWN0aW9ucyIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJmaW5kUHJpbWFyeUFjdGlvbldpdGhpbkludGVudHMiLCJwcmltYXJ5SW50ZW50c0Zyb21OYXZpZ2F0aW9uU2VydmljZSIsImZpcnN0UHJpbWFyeUFjdGlvbkluZGV4IiwiZmluZEluZGV4IiwiYWN0aW9uIiwicHJpbWFyeUludGVudEZvdW5kIiwic2VtYW50aWNPYmplY3RXaXRoUHJpbWFyeUFjdGlvbiIsInNlbWFudGljT2JqZWN0cyIsIl9jaGVja0lmU2VtYW50aWNPYmplY3RzSGFzUHJpbWFyeUFjdGlvbiIsIl9mbklzU2VtYW50aWNPYmplY3RBY3Rpb25VbmF2YWlsYWJsZSIsInBheWxvYWRSZXNvbHZlZCIsInByaW1hcnlJbnRlbnQiLCJfaW5kZXgiLCJ1bmF2YWlsYWJsZUFjdGlvbnNJbmRleCIsInNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zIiwiYWN0aW9ucyIsImludGVudCIsInNwbGl0IiwiaW5kZXhPZiIsInNlbWFudGljUHJpbWFyeUFjdGlvbnMiLCJjdXJyZW50SGFzaCIsImdldEhhc2giLCJpbmRleCIsInNlbWFudGljT2JqZWN0IiwiY2hlY2tQcmltYXJ5QWN0aW9ucyIsImJHZXRUaXRsZUxpbmsiLCJhU2VtYW50aWNPYmplY3RzUHJpbWFyeUFjdGlvbnMiLCJ0aXRsZUxpbmsiLCJoYXNUaXRsZUxpbmsiLCJfZ2V0VGl0bGVMaW5rV2l0aFBhcmFtZXRlcnMiLCJzZW1hbnRpY09iamVjdE1vZGVsIiwiX2xpbmtJbnRlbnQiLCJnZXRQcmltYXJ5QWN0aW9uIiwiZmluZCIsInByaW1hcnlBY3Rpb24iLCJvcGVyYXRvcnMiLCJzU2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsInByb3BlcnR5VHlwZSIsIiRUeXBlIiwiQ29tbW9uVXRpbHMiLCJnZXRPcGVyYXRvcnNGb3JHdWlkUHJvcGVydHkiLCJzbGljZSIsImlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbiIsImxhc3RJbmRleE9mIiwiaXNOYXZpZ2F0aW9uUGF0aCIsIm5hdmlnYXRpb25QYXRoIiwic3Vic3RyaW5nIiwicHJvcGVydHlQYXRoIiwiZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJ0b1N0cmluZyIsImdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eSIsImdldERhdGFGaWVsZERlZmF1bHQiLCJvRGF0YUZpZWxkQ29udGV4dCIsIm9EYXRhRmllbGREZWZhdWx0IiwiaXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlIiwib0RhdGFGaWVsZCIsImJJc0JvdW5kIiwib0FjdGlvbkNvbnRleHQiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsImdldFByZXNzRXZlbnRGb3JEYXRhRmllbGRBY3Rpb25CdXR0b24iLCJvVGhpcyIsInNJbnZvY2F0aW9uR3JvdXBpbmciLCJJbnZvY2F0aW9uR3JvdXBpbmciLCJiSXNOYXZpZ2FibGUiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiZW50aXRpZXMiLCJlbnRpdHlTZXROYW1lIiwib1BhcmFtcyIsImNvbnRleHRzIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiYWRkU2luZ2xlUXVvdGVzIiwibW9kZWwiLCJsYWJlbCIsIkxhYmVsIiwiaXNOYXZpZ2FibGUiLCJnZW5lcmF0ZUZ1bmN0aW9uIiwiQWN0aW9uIiwib2JqZWN0VG9TdHJpbmciLCJpc051bWVyaWNEYXRhVHlwZSIsInNEYXRhRmllbGRUeXBlIiwiX3NEYXRhRmllbGRUeXBlIiwiYU51bWVyaWNEYXRhVHlwZXMiLCJpc0RhdGVPclRpbWVEYXRhVHlwZSIsImFEYXRlVGltZURhdGFUeXBlcyIsImlzRGF0ZVRpbWVEYXRhVHlwZSIsImFEYXRlRGF0YVR5cGVzIiwiaXNEYXRlRGF0YVR5cGUiLCJpc1RpbWVEYXRhVHlwZSIsImdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbiIsIm9Bbm5vdGF0aW9ucyIsInNUeXBlIiwic1RleHRBbm5vdGF0aW9uIiwic1RleHRBcnJhbmdlbWVudEFubm90YXRpb24iLCJnZXRDb2x1bW5BbGlnbm1lbnQiLCJvVGFibGUiLCJzRW50aXR5UGF0aCIsImNvbGxlY3Rpb24iLCJJbmxpbmUiLCJJY29uVXJsIiwiYVNlbWFudGljS2V5cyIsImJJc1NlbWFudGljS2V5IiwiZXZlcnkiLCJvS2V5IiwiZ2V0RGF0YUZpZWxkQWxpZ25tZW50IiwiZ2V0UHJvcGVydHlBbGlnbm1lbnQiLCJvRm9ybWF0T3B0aW9ucyIsIm9Db21wdXRlZEVkaXRNb2RlIiwic0RlZmF1bHRBbGlnbm1lbnQiLCJzVGV4dEFsaWdubWVudCIsInRleHRBbGlnbk1vZGUiLCJnZXRBbGlnbm1lbnRFeHByZXNzaW9uIiwiZGF0YUZpZWxkIiwiZW50aXR5UGF0aCIsImZvcm1hdE9wdGlvbnMiLCJjb21wdXRlZEVkaXRNb2RlIiwiZGF0YUZpZWxkUGF0aCIsImRlZmF1bHRBbGlnbm1lbnQiLCJ0eXBlIiwiVGFyZ2V0IiwiJEFubm90YXRpb25QYXRoIiwiZmllbGRHcm91cCIsImkiLCJEYXRhIiwia2V5cyIsImlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uRW5hYmxlZCIsInNBY3Rpb25Db250ZXh0Rm9ybWF0IiwiY29tcHV0ZUxhYmVsVGV4dCIsImVuZHNXaXRoIiwic0RhdGFGaWVsZExhYmVsIiwic0RhdGFGaWVsZFRhcmdldFRpdGxlIiwic0RhdGFGaWVsZFRhcmdldExhYmVsIiwic0RhdGFGaWVsZFZhbHVlTGFiZWwiLCJzRGF0YUZpZWxkVGFyZ2V0VmFsdWVMYWJlbCIsImJ1aWxkRXhwcmVzc2lvbkZvckFsaWduSXRlbXMiLCJzVmlzdWFsaXphdGlvbiIsImZpZWxkVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uIiwiY29uc3RhbnQiLCJwcm9ncmVzc1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiIsInJhdGluZ1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiIsImNvbXBpbGVFeHByZXNzaW9uIiwiaWZFbHNlIiwib3IiLCJlcXVhbCIsIklzRWRpdGFibGUiLCJoYXNWYWx1ZUhlbHBBbm5vdGF0aW9uIiwiZ2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0Iiwib0Fubm90YXRpb24iLCIkTmFtZSIsIm9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9ucyIsIm9WYWx1ZUhlbHBBbm5vdGF0aW9uIiwiZ2V0VmFsdWVMaXN0UHJvcGVydHlOYW1lIiwib1ZhbHVlTGlzdCIsIm9WYWx1ZUxpc3RQYXJhbWV0ZXIiLCJQYXJhbWV0ZXJzIiwib1BhcmFtZXRlciIsIkxvY2FsRGF0YVByb3BlcnR5IiwiVmFsdWVMaXN0UHJvcGVydHkiLCJzVmFsdWVMaXN0UHJvcGVydHlOYW1lIiwiY29tcHV0ZURpc3BsYXlNb2RlIiwiQ29sbGVjdGlvblBhdGgiLCJyZXF1ZXN0VmFsdWVMaXN0SW5mbyIsIm9WYWx1ZUxpc3RJbmZvIiwicXVhbGlmZXIiLCJnZXRWYWx1ZUxpc3RRdWxpZmVyRm9yUGFyYW1ldGVyRGlzcGxheUZvcm1hdCIsIiRtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1ldGFNb2RlbCIsInZhbHVlTGlzdEluZm8iLCJ2YWx1ZUhlbHBRdWFsaWZpZXJzIiwiVmFsdWVMaXN0SGVscGVyIiwicHV0RGVmYXVsdFF1YWxpZmllckZpcnN0IiwiT2JqZWN0IiwicGFyYW1ldGVyQ29udGV4dCIsImNvbnZlcnRlZFByb3BlcnR5IiwidGFyZ2V0T2JqZWN0IiwiaXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uIiwiaGFzVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsIkNvbW1vbiIsIlZhbHVlTGlzdEZvclZhbGlkYXRpb24iLCJlcnIiLCJ3YXJuaW5nIiwiZ2V0QWN0aW9uUGFyYW1ldGVyRGlhbG9nVmFsdWVIZWxwIiwib0FjdGlvblBhcmFtZXRlciIsInNTYXBVSU5hbWUiLCJzUGFyYW1OYW1lIiwiZ2V0VmFsdWVIZWxwRGVsZWdhdGUiLCJpc0JvdW5kIiwiZW50aXR5VHlwZVBhdGgiLCJzYXBVSU5hbWUiLCJwYXJhbU5hbWUiLCJkZWxlZ2F0ZUNvbmZpZ3VyYXRpb24iLCJnZXRQcm9wZXJ0eVBhdGgiLCJVbmJvdW5kQWN0aW9uIiwiRW50aXR5VHlwZVBhdGgiLCJQcm9wZXJ0eSIsInF1YWxpZmllcnMiLCJ2YWx1ZUhlbHBRdWFsaWZpZXIiLCJpc0FjdGlvblBhcmFtZXRlckRpYWxvZyIsImdldFZhbHVlSGVscERlbGVnYXRlRm9yTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGQiLCJfZ2V0RW50aXR5U2V0RnJvbU11bHRpTGV2ZWwiLCJzU291cmNlRW50aXR5IiwiaVN0YXJ0IiwiaURpZmYiLCJhTmF2UGFydHMiLCJmaWx0ZXIiLCJCb29sZWFuIiwic1BhcnQiLCJnZXRQYXRoRm9ySWNvblNvdXJjZSIsImZvcm1hdFJlc3VsdCIsInBhdGhJbk1vZGVsIiwiZ2V0RmlsZW5hbWVFeHByIiwic0ZpbGVuYW1lIiwic05vRmlsZW5hbWVUZXh0IiwiY2FsY3VsYXRlTUJmcm9tQnl0ZSIsImlCeXRlIiwidG9GaXhlZCIsImdldERvd25sb2FkVXJsIiwiZ2V0TWFyZ2luQ2xhc3MiLCJjb21wYWN0U2VtYW50aWNLZXkiLCJnZXRSZXF1aXJlZCIsImltbXV0YWJsZUtleSIsInRhcmdldCIsInJlcXVpcmVkUHJvcGVydGllcyIsInRhcmdldFJlcXVpcmVkRXhwcmVzc2lvbiIsImlzUmVxdWlyZWRFeHByZXNzaW9uIiwiaXNGaWVsZFBhcnRPZkZvcm0iLCJkYXRhRmllbGRDb2xsZWN0aW9uIiwiZGF0YUZpZWxkT2JqZWN0UGF0aCIsImNvbm5lY3RlZERhdGFGaWVsZEtleSIsIktleUhlbHBlciIsImdlbmVyYXRlS2V5RnJvbURhdGFGaWVsZCIsImlzRmllbGRGb3VuZCIsImZpZWxkIiwia2V5IiwicmVxdWlyZXNJQ29udGV4dCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmllbGRIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgT3BlcmF0aW9uQXZhaWxhYmxlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db3JlXCI7XG5pbXBvcnQgdHlwZSB7IE9wZXJhdGlvbkdyb3VwaW5nVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7XG5cdFVJQW5ub3RhdGlvblR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZCxcblx0dHlwZSBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEZvckFjdGlvbixcblx0dHlwZSBEYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHR0eXBlIERhdGFGaWVsZFR5cGVzLFxuXHR0eXBlIERhdGFQb2ludFR5cGUsXG5cdHR5cGUgRGF0YVBvaW50VHlwZVR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRvcixcblx0cGF0aEluTW9kZWxcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzLCB0eXBlIE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCB0eXBlIHsgRm9ybUVsZW1lbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRm9ybVwiO1xuaW1wb3J0IEZpbHRlclJlc3RyaWN0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vZmlsdGVyL0ZpbHRlclJlc3RyaWN0aW9uc1wiO1xuaW1wb3J0IHsgS2V5SGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9LZXlcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBpc1JlcXVpcmVkRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0ZpZWxkQ29udHJvbEhlbHBlclwiO1xuaW1wb3J0IHsgaGFzVmFsdWVMaXN0Rm9yVmFsaWRhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbXB1dGVkQW5ub3RhdGlvbkludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgZ2V0QWxpZ25tZW50RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUhlbHBQYXlsb2FkLCBWYWx1ZUxpc3RJbmZvIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IExpbmtEZWxlZ2F0ZVBheWxvYWQsIFJlZ2lzdGVyZWRQcmltYXJ5SW50ZW50LCBSZWdpc3RlcmVkUHJpbWFyeUludGVudHMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9xdWlja1ZpZXcvUXVpY2tWaWV3RGVsZWdhdGVcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEFubm90YXRpb25IZWxwZXIgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Bbm5vdGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBMaW5rIGFzIE5hdmlnYXRpb25MaW5rIH0gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBNZXRhTW9kZWxFbnVtLCBNZXRhTW9kZWxQcm9wZXJ0eSwgTWV0YU1vZGVsVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuY29uc3QgSVNPQ3VycmVuY3kgPSBcIkBPcmcuT0RhdGEuTWVhc3VyZXMuVjEuSVNPQ3VycmVuY3lcIixcblx0VW5pdCA9IFwiQE9yZy5PRGF0YS5NZWFzdXJlcy5WMS5Vbml0XCI7XG5cbmNvbnN0IEZpZWxkSGVscGVyID0ge1xuXHRnZXRBY3Rpb25QYXJhbWV0ZXJWaXNpYmlsaXR5OiBmdW5jdGlvbiAob1BhcmFtOiB1bmtub3duLCBvQ29udGV4dDogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHQvLyBUbyB1c2UgdGhlIFVJLkhpZGRlbiBhbm5vdGF0aW9uIGZvciBjb250cm9sbGluZyB2aXNpYmlsaXR5IHRoZSB2YWx1ZSBuZWVkcyB0byBiZSBuZWdhdGVkXG5cdFx0aWYgKHR5cGVvZiBvUGFyYW0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGNvbnN0IG9QYXJhbUlmID0gb1BhcmFtIGFzIHsgJElmPzogdW5rbm93bltdIH07XG5cdFx0XHRpZiAob1BhcmFtSWYgJiYgb1BhcmFtSWYuJElmICYmIG9QYXJhbUlmLiRJZi5sZW5ndGggPT09IDMpIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSB0aGUgVUkuSGlkZGVuIGNvbnRhaW5zIGEgZHluYW1pYyBleHByZXNzaW9uIHdlIGRvIHRoaXNcblx0XHRcdFx0Ly8gYnkganVzdCBzd2l0Y2hpbmcgdGhlIFwidGhlblwiIGFuZCBcImVsc2VcIiBwYXJ0IG9mIHRoZSBlcnByZXNzaW9uXG5cdFx0XHRcdC8vIG9QYXJhbS4kSWZbMF0gPD09IENvbmRpdGlvbiBwYXJ0XG5cdFx0XHRcdC8vIG9QYXJhbS4kSWZbMV0gPD09IFRoZW4gcGFydFxuXHRcdFx0XHQvLyBvUGFyYW0uJElmWzJdIDw9PSBFbHNlIHBhcnRcblx0XHRcdFx0Y29uc3Qgb05lZ1BhcmFtID0geyAkSWY6IFtdIH0gYXMgeyAkSWY6IHVua25vd25bXSB9O1xuXHRcdFx0XHRvTmVnUGFyYW0uJElmWzBdID0gb1BhcmFtSWYuJElmWzBdO1xuXHRcdFx0XHRvTmVnUGFyYW0uJElmWzFdID0gb1BhcmFtSWYuJElmWzJdO1xuXHRcdFx0XHRvTmVnUGFyYW0uJElmWzJdID0gb1BhcmFtSWYuJElmWzFdO1xuXHRcdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci52YWx1ZShvTmVnUGFyYW0sIG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBcIns9ICEle1wiICsgKG9QYXJhbSBhcyB7ICRQYXRoPzogc3RyaW5nIH0pLiRQYXRoICsgXCJ9IH1cIjtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBvUGFyYW0gPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRyZXR1cm4gQW5ub3RhdGlvbkhlbHBlci52YWx1ZSghb1BhcmFtLCBvQ29udGV4dCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb21wdXRlZCBhbm5vdGF0aW9uIHRoYXQgcmV0dXJucyB2UHJvcGVydHkgZm9yIGEgc3RyaW5nIGFuZCBAc2FwdWkubmFtZSBmb3IgYW4gb2JqZWN0LlxuXHQgKiBAcGFyYW0gdlByb3BlcnR5IFRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gb0ludGVyZmFjZSBUaGUgaW50ZXJmYWNlIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSBuYW1lXG5cdCAqL1xuXHRwcm9wZXJ0eU5hbWU6IGZ1bmN0aW9uIChcblx0XHR2UHJvcGVydHk6IHN0cmluZyB8IHsgJFBhdGg/OiBzdHJpbmcgfSB8IHsgJFByb3BlcnR5UGF0aD86IHN0cmluZyB9IHwgeyBWYWx1ZTogeyAkUGF0aD86IHN0cmluZyB9IH0sXG5cdFx0b0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlXG5cdCk6IHN0cmluZyB7XG5cdFx0bGV0IHNQcm9wZXJ0eU5hbWU7XG5cdFx0aWYgKHR5cGVvZiB2UHJvcGVydHkgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGlmIChvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpLmluY2x1ZGVzKFwiJFBhdGhcIikgfHwgb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKS5pbmNsdWRlcyhcIiRQcm9wZXJ0eVBhdGhcIikpIHtcblx0XHRcdFx0Ly8gV2UgY291bGQgZW5kIHVwIHdpdGggYSBwdXJlIHN0cmluZyBwcm9wZXJ0eSAobm8gJFBhdGgpLCBhbmQgdGhpcyBpcyBub3QgYSByZWFsIHByb3BlcnR5IGluIHRoYXQgY2FzZVxuXHRcdFx0XHRzUHJvcGVydHlOYW1lID0gdlByb3BlcnR5O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoKHZQcm9wZXJ0eSBhcyB7ICRQYXRoPzogc3RyaW5nIH0pLiRQYXRoIHx8ICh2UHJvcGVydHkgYXMgeyAkUHJvcGVydHlQYXRoPzogc3RyaW5nIH0pLiRQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdGNvbnN0IHNQYXRoID0gKHZQcm9wZXJ0eSBhcyB7ICRQYXRoPzogc3RyaW5nIH0pLiRQYXRoID8gXCIvJFBhdGhcIiA6IFwiLyRQcm9wZXJ0eVBhdGhcIjtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE9iamVjdChgJHtzQ29udGV4dFBhdGggKyBzUGF0aH0vJEBzYXB1aS5uYW1lYCk7XG5cdFx0fSBlbHNlIGlmICgodlByb3BlcnR5IGFzIHsgVmFsdWU6IHsgJFBhdGg/OiBzdHJpbmcgfSB9KS5WYWx1ZSAmJiAodlByb3BlcnR5IGFzIHsgVmFsdWU6IHsgJFBhdGg/OiBzdHJpbmcgfSB9KS5WYWx1ZS4kUGF0aCkge1xuXHRcdFx0c1Byb3BlcnR5TmFtZSA9ICh2UHJvcGVydHkgYXMgeyBWYWx1ZTogeyAkUGF0aD86IHN0cmluZyB9IH0pLlZhbHVlLiRQYXRoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzUHJvcGVydHlOYW1lID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBzUHJvcGVydHlOYW1lO1xuXHR9LFxuXG5cdGZpZWxkQ29udHJvbDogZnVuY3Rpb24gKHNQcm9wZXJ0eVBhdGg6IHN0cmluZywgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHQvLyBlZGl0YWJsZSBoZWFkZXIgZmFjZXRcblx0XHRjb25zdCBvTW9kZWwgPSBvSW50ZXJmYWNlICYmIG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IHNQYXRoID0gb0ludGVyZmFjZSAmJiBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9GaWVsZENvbnRyb2xDb250ZXh0ID0gb01vZGVsICYmIG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzUGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkZpZWxkQ29udHJvbGApO1xuXHRcdGNvbnN0IG9GaWVsZENvbnRyb2wgPSBvRmllbGRDb250cm9sQ29udGV4dCAmJiBvRmllbGRDb250cm9sQ29udGV4dC5nZXRQcm9wZXJ0eSgpO1xuXHRcdGlmIChvRmllbGRDb250cm9sKSB7XG5cdFx0XHRpZiAob0ZpZWxkQ29udHJvbC5oYXNPd25Qcm9wZXJ0eShcIiRFbnVtTWVtYmVyXCIpKSB7XG5cdFx0XHRcdHJldHVybiBvRmllbGRDb250cm9sLiRFbnVtTWVtYmVyO1xuXHRcdFx0fSBlbHNlIGlmIChvRmllbGRDb250cm9sLmhhc093blByb3BlcnR5KFwiJFBhdGhcIikpIHtcblx0XHRcdFx0cmV0dXJuIEFubm90YXRpb25IZWxwZXIudmFsdWUob0ZpZWxkQ29udHJvbCwgeyBjb250ZXh0OiBvRmllbGRDb250cm9sQ29udGV4dCB9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHZhbHVlIGhlbHAgcHJvcGVydHkgZnJvbSBhIERhdGFGaWVsZCBvciBhIFByb3BlcnR5UGF0aCAoaW4gY2FzZSBhIFNlbGVjdGlvbkZpZWxkIGlzIHVzZWQpXG5cdCAqIFByaW9yaXR5IGZyb20gd2hlcmUgdG8gZ2V0IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGUgZmllbGQgKGV4YW1wbGVzIGFyZSBcIk5hbWVcIiBhbmQgXCJTdXBwbGllclwiKTpcblx0ICogMS4gSWYgb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKSBoYXMga2V5ICckUGF0aCcsIHRoZW4gd2UgdGFrZSB0aGUgdmFsdWUgYXQgJyRQYXRoJy5cblx0ICogMi4gRWxzZSwgdmFsdWUgYXQgb1Byb3BlcnR5Q29udGV4dC5nZXRPYmplY3QoKS5cblx0ICogSWYgdGhlcmUgaXMgYW4gSVNPQ3VycmVuY3kgb3IgaWYgdGhlcmUgYXJlIFVuaXQgYW5ub3RhdGlvbnMgZm9yIHRoZSBmaWVsZCBwcm9wZXJ0eSxcblx0ICogdGhlbiB0aGUgUGF0aCBhdCB0aGUgSVNPQ3VycmVuY3kgb3IgVW5pdCBhbm5vdGF0aW9ucyBvZiB0aGUgZmllbGQgcHJvcGVydHkgaXMgY29uc2lkZXJlZC5cblx0ICogQHBhcmFtIG9Qcm9wZXJ0eUNvbnRleHQgVGhlIGNvbnRleHQgZnJvbSB3aGljaCB2YWx1ZSBoZWxwIHByb3BlcnR5IG5lZWQgdG8gYmUgZXh0cmFjdGVkLlxuXHQgKiBAcGFyYW0gYkluRmlsdGVyRmllbGQgV2hldGhlciBvciBub3Qgd2UncmUgaW4gdGhlIGZpbHRlciBmaWVsZCBhbmQgc2hvdWxkIGlnbm9yZVxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgaGVscCBwcm9wZXJ0eSBwYXRoXG5cdCAqL1xuXHR2YWx1ZUhlbHBQcm9wZXJ0eTogZnVuY3Rpb24gKG9Qcm9wZXJ0eUNvbnRleHQ6IEJhc2VDb250ZXh0LCBiSW5GaWx0ZXJGaWVsZD86IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdC8qIEZvciBjdXJyZW5jeSAoYW5kIGxhdGVyIFVuaXQpIHdlIG5lZWQgdG8gZm9yd2FyZCB0aGUgdmFsdWUgaGVscCB0byB0aGUgYW5ub3RhdGVkIGZpZWxkICovXG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb1Byb3BlcnR5Q29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb0NvbnRlbnQgPSBvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdCgpIHx8IHt9O1xuXHRcdGxldCBzUGF0aCA9IG9Db250ZW50LiRQYXRoID8gYCR7c0NvbnRleHRQYXRofS8kUGF0aGAgOiBzQ29udGV4dFBhdGg7XG5cdFx0Y29uc3Qgc0Fubm9QYXRoID0gYCR7c1BhdGh9QGA7XG5cdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdChzQW5ub1BhdGgpO1xuXHRcdGxldCBzQW5ub3RhdGlvbjtcblx0XHRpZiAob1Byb3BlcnR5QW5ub3RhdGlvbnMpIHtcblx0XHRcdHNBbm5vdGF0aW9uID1cblx0XHRcdFx0KG9Qcm9wZXJ0eUFubm90YXRpb25zLmhhc093blByb3BlcnR5KElTT0N1cnJlbmN5KSAmJiBJU09DdXJyZW5jeSkgfHwgKG9Qcm9wZXJ0eUFubm90YXRpb25zLmhhc093blByb3BlcnR5KFVuaXQpICYmIFVuaXQpO1xuXHRcdFx0aWYgKHNBbm5vdGF0aW9uICYmICFiSW5GaWx0ZXJGaWVsZCkge1xuXHRcdFx0XHRjb25zdCBzVW5pdE9yQ3VycmVuY3lQYXRoID0gYCR7c1BhdGggKyBzQW5ub3RhdGlvbn0vJFBhdGhgO1xuXHRcdFx0XHQvLyB3ZSBjaGVjayB0aGF0IHRoZSBjdXJyZW5jeSBvciB1bml0IGlzIGEgUHJvcGVydHkgYW5kIG5vdCBhIGZpeGVkIHZhbHVlXG5cdFx0XHRcdGlmIChvUHJvcGVydHlDb250ZXh0LmdldE9iamVjdChzVW5pdE9yQ3VycmVuY3lQYXRoKSkge1xuXHRcdFx0XHRcdHNQYXRoID0gc1VuaXRPckN1cnJlbmN5UGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc1BhdGg7XG5cdH0sXG5cblx0LyoqXG5cdCAqIERlZGljYXRlZCBtZXRob2QgdG8gYXZvaWQgbG9va2luZyBmb3IgdW5pdCBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5Q29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgdmFsdWUgaGVscCBwcm9wZXJ0eSBwYXRoXG5cdCAqL1xuXHR2YWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkOiBmdW5jdGlvbiAob1Byb3BlcnR5Q29udGV4dDogQmFzZUNvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBGaWVsZEhlbHBlci52YWx1ZUhlbHBQcm9wZXJ0eShvUHJvcGVydHlDb250ZXh0LCB0cnVlKTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBJRCBmb3IgVmFsdWUgSGVscC5cblx0ICogQHBhcmFtIHNGbGV4SWQgRmxleCBJRCBvZiB0aGUgY3VycmVudCBvYmplY3Rcblx0ICogQHBhcmFtIHNJZFByZWZpeCBQcmVmaXggZm9yIHRoZSBWYWx1ZUhlbHAgSURcblx0ICogQHBhcmFtIHNPcmlnaW5hbFByb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBwcm9wZXJ0eVxuXHQgKiBAcGFyYW0gc1Byb3BlcnR5TmFtZSBOYW1lIG9mIHRoZSBWYWx1ZUhlbHAgUHJvcGVydHlcblx0ICogQHJldHVybnMgVGhlIElEIGdlbmVyYXRlZCBmb3IgdGhlIFZhbHVlSGVscFxuXHQgKi9cblx0Z2V0SURGb3JGaWVsZFZhbHVlSGVscDogZnVuY3Rpb24gKFxuXHRcdHNGbGV4SWQ6IHN0cmluZyB8IG51bGwsXG5cdFx0c0lkUHJlZml4OiBzdHJpbmcsXG5cdFx0c09yaWdpbmFsUHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0c1Byb3BlcnR5TmFtZTogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0aWYgKHNGbGV4SWQpIHtcblx0XHRcdHJldHVybiBzRmxleElkO1xuXHRcdH1cblx0XHRsZXQgc1Byb3BlcnR5ID0gc1Byb3BlcnR5TmFtZTtcblx0XHRpZiAoc09yaWdpbmFsUHJvcGVydHlOYW1lICE9PSBzUHJvcGVydHlOYW1lKSB7XG5cdFx0XHRzUHJvcGVydHkgPSBgJHtzT3JpZ2luYWxQcm9wZXJ0eU5hbWV9Ojoke3NQcm9wZXJ0eU5hbWV9YDtcblx0XHR9XG5cdFx0cmV0dXJuIGdlbmVyYXRlKFtzSWRQcmVmaXgsIHNQcm9wZXJ0eV0pO1xuXHR9LFxuXG5cdC8qXG5cdCAqIE1ldGhvZCB0byBnZXQgdGhlIHZhbHVlSGVscCBwcm9wZXJ0eSBvZiB0aGUgRmlsdGVyRmllbGQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXRWYWx1ZUhlbHBQcm9wZXJ0eUZvckZpbHRlckZpZWxkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUubWFjcm9zLmZpZWxkLkZpZWxkSGVscGVyLmpzXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUNvbnRleHQgUHJvcGVydHkgY29udGV4dCBmb3IgZmlsdGVyIGZpZWxkXG5cdCAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIG9iamVjdCBvZiB0aGUgVmFsdWVIZWxwIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzUHJvcGVydHlUeXBlIFRoZSAkVHlwZSBvZiB0aGUgcHJvcGVydHlcblx0ICogQHBhcmFtIHNWaElkUHJlZml4IFRoZSBJRCBwcmVmaXggb2YgdGhlIHZhbHVlIGhlbHBcblx0ICogQHBhcmFtIHNQcm9wZXJ0eU5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5XG5cdCAqIEBwYXJhbSBzVmFsdWVIZWxwUHJvcGVydHlOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSB2YWx1ZSBoZWxwXG5cdCAqIEBwYXJhbSBiSGFzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIGB0cnVlYCBpZiB0aGVyZSBpcyBhIHZhbHVlIGxpc3Qgd2l0aCBhIGZpeGVkIHZhbHVlIGFubm90YXRpb25cblx0ICogQHBhcmFtIGJVc2VTZW1hbnRpY0RhdGVSYW5nZSBgdHJ1ZWAgaWYgdGhlIHNlbWFudGljIGRhdGUgcmFuZ2UgaXMgc2V0IHRvICd0cnVlJyBpbiB0aGUgbWFuaWZlc3Rcblx0ICogQHJldHVybnMgVGhlIGZpZWxkIGhlbHAgcHJvcGVydHkgb2YgdGhlIHZhbHVlIGhlbHBcblx0ICovXG5cdGdldFZhbHVlSGVscFByb3BlcnR5Rm9yRmlsdGVyRmllbGQ6IGZ1bmN0aW9uIChcblx0XHRwcm9wZXJ0eUNvbnRleHQ6IEJhc2VDb250ZXh0LFxuXHRcdG9Qcm9wZXJ0eTogTWV0YU1vZGVsVHlwZTxQcm9wZXJ0eT4sXG5cdFx0c1Byb3BlcnR5VHlwZTogc3RyaW5nLFxuXHRcdHNWaElkUHJlZml4OiBzdHJpbmcsXG5cdFx0c0VudGl0eVR5cGU6IHN0cmluZyxcblx0XHRzUHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdFx0c1ZhbHVlSGVscFByb3BlcnR5TmFtZTogc3RyaW5nLFxuXHRcdGJIYXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXM6IGJvb2xlYW4sXG5cdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlOiBib29sZWFuIHwgc3RyaW5nXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1Byb3BlcnR5ID0gRmllbGRIZWxwZXIucHJvcGVydHlOYW1lKFxuXHRcdFx0XHRvUHJvcGVydHkgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB7ICRQYXRoPzogc3RyaW5nIH0gfCB7ICRQcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSB8IHsgVmFsdWU6IHsgJFBhdGg/OiBzdHJpbmcgfSB9LFxuXHRcdFx0XHR7IGNvbnRleHQ6IHByb3BlcnR5Q29udGV4dCB9XG5cdFx0XHQpLFxuXHRcdFx0YlNlbWFudGljRGF0ZVJhbmdlID0gYlVzZVNlbWFudGljRGF0ZVJhbmdlID09PSBcInRydWVcIiB8fCBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgPT09IHRydWU7XG5cdFx0Y29uc3Qgb01vZGVsID0gcHJvcGVydHlDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRzUHJvcGVydHlQYXRoID0gcHJvcGVydHlDb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0ZGF0YU1vZGVsID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhvTW9kZWwuZ2V0Q29udGV4dChzUHJvcGVydHlMb2NhdGlvblBhdGgpKSxcblx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgPSBGaWx0ZXJSZXN0cmljdGlvbnMuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zQnlEYXRhTW9kZWwoXG5cdFx0XHRcdGRhdGFNb2RlbCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cblx0XHRcdCk7XG5cdFx0aWYgKFxuXHRcdFx0KChzUHJvcGVydHlUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiIHx8IHNQcm9wZXJ0eVR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fCBzUHJvcGVydHlUeXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIikgJiZcblx0XHRcdFx0YlNlbWFudGljRGF0ZVJhbmdlICYmXG5cdFx0XHRcdG9GaWx0ZXJSZXN0cmljdGlvbnMgJiZcblx0XHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnMgJiZcblx0XHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XSAmJlxuXHRcdFx0XHQob0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XS5pbmNsdWRlcyhcIlNpbmdsZVJhbmdlXCIpIHx8XG5cdFx0XHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9ucy5GaWx0ZXJBbGxvd2VkRXhwcmVzc2lvbnNbc1Byb3BlcnR5XS5pbmNsdWRlcyhcIlNpbmdsZVZhbHVlXCIpKSkgfHxcblx0XHRcdChzUHJvcGVydHlUeXBlID09PSBcIkVkbS5Cb29sZWFuXCIgJiYgIWJIYXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gRmllbGRIZWxwZXIuZ2V0SURGb3JGaWVsZFZhbHVlSGVscChudWxsLCBzVmhJZFByZWZpeCB8fCBcIkZpbHRlckZpZWxkVmFsdWVIZWxwXCIsIHNQcm9wZXJ0eU5hbWUsIHNWYWx1ZUhlbHBQcm9wZXJ0eU5hbWUpO1xuXHR9LFxuXG5cdC8qXG5cdCAqIE1ldGhvZCB0byBjb21wdXRlIHRoZSBkZWxlZ2F0ZSB3aXRoIHBheWxvYWRcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBkZWxlZ2F0ZU5hbWUgLSBuYW1lIG9mIHRoZSBkZWxlZ2F0ZSBtZXRob2RlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCAtIGFkZGVkIHRvIHRoZSBwYXlsb2FkIG9mIHRoZSBkZWxlZ2F0ZSBtZXRob2RlXG5cdCAqIEByZXR1cm4ge29iamVjdH0gLSByZXR1cm5zIHRoZSBkZWxlZ2F0ZSB3aXRoIHBheWxvYWRcblx0ICovXG5cdGNvbXB1dGVGaWVsZEJhc2VEZWxlZ2F0ZTogZnVuY3Rpb24gKGRlbGVnYXRlTmFtZTogc3RyaW5nLCByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0OiBib29sZWFuKTogb2JqZWN0IHtcblx0XHRpZiAocmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bmFtZTogZGVsZWdhdGVOYW1lLFxuXHRcdFx0XHRwYXlsb2FkOiB7XG5cdFx0XHRcdFx0cmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdDogcmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4geyBuYW1lOiBkZWxlZ2F0ZU5hbWUgfTtcblx0fSxcblx0X2dldFByaW1hcnlJbnRlbnRzOiBhc3luYyBmdW5jdGlvbiAoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQsIHNlbWFudGljT2JqZWN0c0xpc3Q6IHN0cmluZ1tdKTogUHJvbWlzZTxOYXZpZ2F0aW9uTGlua1tdPiB7XG5cdFx0Y29uc3QgcHJvbWlzZXM6IFByb21pc2U8TmF2aWdhdGlvbkxpbms+W10gPSBbXTtcblx0XHRjb25zdCBuYXZpZ2F0aW9uU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0c2VtYW50aWNPYmplY3RzTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChzZW1PYmplY3QpIHtcblx0XHRcdHByb21pc2VzLnB1c2gobmF2aWdhdGlvblNlcnZpY2UuZ2V0UHJpbWFyeUludGVudChzZW1PYmplY3QpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoc2VtYW50aWNPYmplY3RQcmltYXJ5QWN0aW9uczogTmF2aWdhdGlvbkxpbmtbXSkge1xuXHRcdFx0XHRyZXR1cm4gc2VtYW50aWNPYmplY3RQcmltYXJ5QWN0aW9ucztcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBwcmltYXJ5IGludGVudHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEZpbmRzIHRoZSBwcmltYXJ5IGFjdGlvbiB3aXRoaW4gaW50ZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycy5cblx0ICogQHBhcmFtIHByaW1hcnlJbnRlbnRzRnJvbU5hdmlnYXRpb25TZXJ2aWNlIFRoZSByZWdpc3RlcmVkIHByaW1hcnkgaW50ZW50cyBmcm9tIHRoZSBuYXZpZ2F0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBwYXlsb2FkIFRoZSByZWdpc3RlcmVkIHBheWxvYWQuXG5cdCAqIEByZXR1cm5zXG5cdCAqXG5cdCAqXG5cdCAqICBBbiBvYmplY3QgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJpbWFyeSBhY3Rpb24gd2l0aGluIGludGVudHMuXG5cdCAqL1xuXHRmaW5kUHJpbWFyeUFjdGlvbldpdGhpbkludGVudHM6IGZ1bmN0aW9uIChcblx0XHRwcmltYXJ5SW50ZW50c0Zyb21OYXZpZ2F0aW9uU2VydmljZTogUmVnaXN0ZXJlZFByaW1hcnlJbnRlbnRzLFxuXHRcdHBheWxvYWQ6IExpbmtEZWxlZ2F0ZVBheWxvYWRcblx0KToge1xuXHRcdHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb246IHN0cmluZztcblx0XHRwcmltYXJ5SW50ZW50Rm91bmQ6IFJlZ2lzdGVyZWRQcmltYXJ5SW50ZW50IHwgdW5kZWZpbmVkO1xuXHR9IHtcblx0XHRjb25zdCBmaXJzdFByaW1hcnlBY3Rpb25JbmRleCA9IHByaW1hcnlJbnRlbnRzRnJvbU5hdmlnYXRpb25TZXJ2aWNlLmZpbmRJbmRleCgoYWN0aW9uOiBSZWdpc3RlcmVkUHJpbWFyeUludGVudCkgPT4gISFhY3Rpb24pO1xuXHRcdGNvbnN0IHByaW1hcnlJbnRlbnRGb3VuZCA9IHByaW1hcnlJbnRlbnRzRnJvbU5hdmlnYXRpb25TZXJ2aWNlW2ZpcnN0UHJpbWFyeUFjdGlvbkluZGV4XTtcblxuXHRcdGNvbnN0IHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb24gPSBwYXlsb2FkLnNlbWFudGljT2JqZWN0c1tmaXJzdFByaW1hcnlBY3Rpb25JbmRleF07XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb246IHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb24sXG5cdFx0XHRwcmltYXJ5SW50ZW50Rm91bmQ6IHByaW1hcnlJbnRlbnRGb3VuZFxuXHRcdH07XG5cdH0sXG5cblx0X2NoZWNrSWZTZW1hbnRpY09iamVjdHNIYXNQcmltYXJ5QWN0aW9uOiBmdW5jdGlvbiAoXG5cdFx0cGF5bG9hZDogTGlua0RlbGVnYXRlUGF5bG9hZCxcblx0XHRwcmltYXJ5SW50ZW50c0Zyb21OYXZpZ2F0aW9uU2VydmljZTogUmVnaXN0ZXJlZFByaW1hcnlJbnRlbnRzLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IF9mbklzU2VtYW50aWNPYmplY3RBY3Rpb25VbmF2YWlsYWJsZSA9IGZ1bmN0aW9uIChcblx0XHRcdHBheWxvYWRSZXNvbHZlZDogTGlua0RlbGVnYXRlUGF5bG9hZCxcblx0XHRcdHByaW1hcnlJbnRlbnQ6IFJlZ2lzdGVyZWRQcmltYXJ5SW50ZW50LFxuXHRcdFx0X2luZGV4OiBudW1iZXJcblx0XHQpOiBib29sZWFuIHtcblx0XHRcdGZvciAoY29uc3QgdW5hdmFpbGFibGVBY3Rpb25zSW5kZXggaW4gcGF5bG9hZFJlc29sdmVkLnNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zW19pbmRleF0uYWN0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cHJpbWFyeUludGVudC5pbnRlbnRcblx0XHRcdFx0XHRcdC5zcGxpdChcIi1cIilbMV1cblx0XHRcdFx0XHRcdC5pbmRleE9mKHBheWxvYWRSZXNvbHZlZC5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tfaW5kZXhdLmFjdGlvbnNbdW5hdmFpbGFibGVBY3Rpb25zSW5kZXhdKSA9PT0gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH07XG5cdFx0cGF5bG9hZC5zZW1hbnRpY1ByaW1hcnlBY3Rpb25zID0gcHJpbWFyeUludGVudHNGcm9tTmF2aWdhdGlvblNlcnZpY2U7XG5cdFx0Y29uc3QgeyBzZW1hbnRpY09iamVjdFdpdGhQcmltYXJ5QWN0aW9uLCBwcmltYXJ5SW50ZW50Rm91bmQgfSA9IHRoaXMuZmluZFByaW1hcnlBY3Rpb25XaXRoaW5JbnRlbnRzKFxuXHRcdFx0cHJpbWFyeUludGVudHNGcm9tTmF2aWdhdGlvblNlcnZpY2UsXG5cdFx0XHRwYXlsb2FkXG5cdFx0KTtcblx0XHRjb25zdCBjdXJyZW50SGFzaCA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuZ2V0SGFzaCgpO1xuXHRcdC8vIFJlbW92ZSB0aGUgaW50ZW50IHBhcmFtZXRlcnMgYmVmb3JlIGNoZWNraW5nIHdpdGggdGhlIGN1cnJlbnQgaGFzaFxuXHRcdGlmICghIXByaW1hcnlJbnRlbnRGb3VuZCAmJiBwcmltYXJ5SW50ZW50Rm91bmQuaW50ZW50LnNwbGl0KFwiP1wiKVswXSAhPT0gY3VycmVudEhhc2gpIHtcblx0XHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXlsb2FkLnNlbWFudGljT2JqZWN0VW5hdmFpbGFibGVBY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuXHRcdFx0XHRpZiAocGF5bG9hZC5zZW1hbnRpY09iamVjdFVuYXZhaWxhYmxlQWN0aW9uc1tpbmRleF0uc2VtYW50aWNPYmplY3QgPT09IHNlbWFudGljT2JqZWN0V2l0aFByaW1hcnlBY3Rpb24pIHtcblx0XHRcdFx0XHRyZXR1cm4gX2ZuSXNTZW1hbnRpY09iamVjdEFjdGlvblVuYXZhaWxhYmxlKHBheWxvYWQsIHByaW1hcnlJbnRlbnRGb3VuZCwgaW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9LFxuXHRjaGVja1ByaW1hcnlBY3Rpb25zOiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0cGF5bG9hZDogTGlua0RlbGVnYXRlUGF5bG9hZCxcblx0XHRiR2V0VGl0bGVMaW5rOiBib29sZWFuLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50XG5cdCk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQgfCB7IHRpdGxlTGluazogTmF2aWdhdGlvbkxpbmtbXTsgaGFzVGl0bGVMaW5rOiBib29sZWFuOyBwYXlsb2FkOiBMaW5rRGVsZWdhdGVQYXlsb2FkIH0+IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0UHJpbWFyeUludGVudHMoYXBwQ29tcG9uZW50LCBwYXlsb2FkICYmIHBheWxvYWQuc2VtYW50aWNPYmplY3RzKVxuXHRcdFx0LnRoZW4oKGFTZW1hbnRpY09iamVjdHNQcmltYXJ5QWN0aW9uczogTmF2aWdhdGlvbkxpbmtbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYkdldFRpdGxlTGlua1xuXHRcdFx0XHRcdD8ge1xuXHRcdFx0XHRcdFx0XHR0aXRsZUxpbms6IGFTZW1hbnRpY09iamVjdHNQcmltYXJ5QWN0aW9ucyxcblx0XHRcdFx0XHRcdFx0aGFzVGl0bGVMaW5rOiB0aGlzLl9jaGVja0lmU2VtYW50aWNPYmplY3RzSGFzUHJpbWFyeUFjdGlvbihcblx0XHRcdFx0XHRcdFx0XHRwYXlsb2FkLFxuXHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY09iamVjdHNQcmltYXJ5QWN0aW9ucyxcblx0XHRcdFx0XHRcdFx0XHRhcHBDb21wb25lbnRcblx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0cGF5bG9hZDogcGF5bG9hZFxuXHRcdFx0XHRcdCAgfVxuXHRcdFx0XHRcdDogdGhpcy5fY2hlY2tJZlNlbWFudGljT2JqZWN0c0hhc1ByaW1hcnlBY3Rpb24ocGF5bG9hZCwgYVNlbWFudGljT2JqZWN0c1ByaW1hcnlBY3Rpb25zLCBhcHBDb21wb25lbnQpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIGluIGNoZWNrUHJpbWFyeUFjdGlvbnNcIiwgb0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9LFxuXHRfZ2V0VGl0bGVMaW5rV2l0aFBhcmFtZXRlcnM6IGZ1bmN0aW9uIChzZW1hbnRpY09iamVjdE1vZGVsOiBMaW5rRGVsZWdhdGVQYXlsb2FkLCBfbGlua0ludGVudDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoc2VtYW50aWNPYmplY3RNb2RlbCAmJiBzZW1hbnRpY09iamVjdE1vZGVsLnRpdGxlTGluaykge1xuXHRcdFx0cmV0dXJuIHNlbWFudGljT2JqZWN0TW9kZWwudGl0bGVMaW5rO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gX2xpbmtJbnRlbnQ7XG5cdFx0fVxuXHR9LFxuXG5cdGdldFByaW1hcnlBY3Rpb246IGZ1bmN0aW9uIChwYXlsb2FkOiBMaW5rRGVsZWdhdGVQYXlsb2FkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwcmltYXJ5SW50ZW50ID0gcGF5bG9hZC5zZW1hbnRpY1ByaW1hcnlBY3Rpb25zPy5maW5kKChwcmltYXJ5QWN0aW9uKSA9PiAhIXByaW1hcnlBY3Rpb24pO1xuXHRcdHJldHVybiBGaWVsZEhlbHBlci5fZ2V0VGl0bGVMaW5rV2l0aFBhcmFtZXRlcnMocGF5bG9hZCwgcHJpbWFyeUludGVudD8uaW50ZW50KTtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBmZXRjaCB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucy4gRmlsdGVyIHJlc3RyaWN0aW9ucyBjYW4gYmUgYW5ub3RhdGVkIG9uIGFuIGVudGl0eSBzZXQgb3IgYSBuYXZpZ2F0aW9uIHByb3BlcnR5LlxuXHQgKiBEZXBlbmRpbmcgb24gdGhlIHBhdGggdG8gd2hpY2ggdGhlIGNvbnRyb2wgaXMgYm91bmQsIHdlIGNoZWNrIGZvciBmaWx0ZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBjb250ZXh0IHBhdGggb2YgdGhlIGNvbnRyb2wsXG5cdCAqIG9yIG9uIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IChpZiB0aGVyZSBpcyBhIG5hdmlnYXRpb24pLlxuXHQgKiBFZy4gSWYgdGhlIHRhYmxlIGlzIGJvdW5kIHRvICcvRW50aXR5U2V0JywgZm9yIHByb3BlcnR5IHBhdGggJy9FbnRpdHlTZXQvX0Fzc29jaWF0aW9uL1Byb3BlcnR5TmFtZScsIHRoZSBmaWx0ZXIgcmVzdHJpY3Rpb25zXG5cdCAqIG9uICcvRW50aXR5U2V0JyB3aW4gb3ZlciBmaWx0ZXIgcmVzdHJpY3Rpb25zIG9uICcvRW50aXR5U2V0L19Bc3NvY2lhdGlvbicuXG5cdCAqIElmIHRoZSB0YWJsZSBpcyBib3VuZCB0byAnL0VudGl0eVNldC9fQXNzb2NpYXRpb24nLCB0aGUgZmlsdGVyIHJlc3RyaWN0aW9ucyBvbiAnL0VudGl0eVNldC9fQXNzb2NpYXRpb24nIHdpbiBvdmVyIGZpbHRlclxuXHQgKiByZXRyaWN0aW9ucyBvbiAnL0Fzc29jaWF0aW9uRW50aXR5U2V0Jy5cblx0ICogQHBhcmFtIG9Db250ZXh0IFByb3BlcnR5IENvbnRleHRcblx0ICogQHBhcmFtIG9Qcm9wZXJ0eSBQcm9wZXJ0eSBvYmplY3QgaW4gdGhlIG1ldGFkYXRhXG5cdCAqIEBwYXJhbSBiVXNlU2VtYW50aWNEYXRlUmFuZ2UgQm9vbGVhbiBTdWdnZXN0cyBpZiBzZW1hbnRpYyBkYXRlIHJhbmdlIHNob3VsZCBiZSB1c2VkXG5cdCAqIEBwYXJhbSBzU2V0dGluZ3MgU3RyaW5naWZpZWQgb2JqZWN0IG9mIHRoZSBwcm9wZXJ0eSBzZXR0aW5nc1xuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggUGF0aCB0byB3aGljaCB0aGUgcGFyZW50IGNvbnRyb2wgKHRoZSB0YWJsZSBvciB0aGUgZmlsdGVyIGJhcikgaXMgYm91bmRcblx0ICogQHJldHVybnMgU3RyaW5nIGNvbnRhaW5pbmcgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygb3BlcmF0b3JzIGZvciBmaWx0ZXJpbmdcblx0ICovXG5cdG9wZXJhdG9yczogZnVuY3Rpb24gKFxuXHRcdG9Db250ZXh0OiBCYXNlQ29udGV4dCxcblx0XHRvUHJvcGVydHk6IE1ldGFNb2RlbFByb3BlcnR5LFxuXHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZTogYm9vbGVhbixcblx0XHRzU2V0dGluZ3M6IHN0cmluZyxcblx0XHRjb250ZXh0UGF0aDogc3RyaW5nXG5cdCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gdGhpcyBpcyB1c2VkIGluIEZpbHRlckZpZWxkLmJsb2NrXG5cdFx0aWYgKCFvUHJvcGVydHkgfHwgIWNvbnRleHRQYXRoKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRsZXQgb3BlcmF0b3JzOiBzdHJpbmdbXTtcblx0XHRjb25zdCBzUHJvcGVydHkgPSBGaWVsZEhlbHBlci5wcm9wZXJ0eU5hbWUoXG5cdFx0XHRvUHJvcGVydHkgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB7ICRQYXRoPzogc3RyaW5nIH0gfCB7ICRQcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSB8IHsgVmFsdWU6IHsgJFBhdGg/OiBzdHJpbmcgfSB9LFxuXHRcdFx0eyBjb250ZXh0OiBvQ29udGV4dCB9XG5cdFx0KTtcblx0XHRjb25zdCBvTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c1Byb3BlcnR5UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdHNQcm9wZXJ0eUxvY2F0aW9uUGF0aCA9IENvbW1vbkhlbHBlci5nZXRMb2NhdGlvbkZvclByb3BlcnR5UGF0aChvTW9kZWwsIHNQcm9wZXJ0eVBhdGgpLFxuXHRcdFx0cHJvcGVydHlUeXBlID0gb1Byb3BlcnR5LiRUeXBlO1xuXG5cdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gXCJFZG0uR3VpZFwiKSB7XG5cdFx0XHRyZXR1cm4gQ29tbW9uVXRpbHMuZ2V0T3BlcmF0b3JzRm9yR3VpZFByb3BlcnR5KCk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlICcvJ1xuXHRcdGNvbnRleHRQYXRoID0gY29udGV4dFBhdGguc2xpY2UoMCwgLTEpO1xuXHRcdGNvbnN0IGlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbjogYm9vbGVhbiA9IGNvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSA+IDA7XG5cdFx0Y29uc3QgaXNOYXZpZ2F0aW9uUGF0aDogYm9vbGVhbiA9XG5cdFx0XHQoaXNUYWJsZUJvdW5kVG9OYXZpZ2F0aW9uICYmIGNvbnRleHRQYXRoICE9PSBzUHJvcGVydHlMb2NhdGlvblBhdGgpIHx8XG5cdFx0XHQoIWlzVGFibGVCb3VuZFRvTmF2aWdhdGlvbiAmJiBzUHJvcGVydHlMb2NhdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpID4gMCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGg6IHN0cmluZyA9XG5cdFx0XHQoaXNOYXZpZ2F0aW9uUGF0aCAmJiBzUHJvcGVydHlMb2NhdGlvblBhdGguc3Vic3RyaW5nKHNQcm9wZXJ0eUxvY2F0aW9uUGF0aC5pbmRleE9mKGNvbnRleHRQYXRoKSArIGNvbnRleHRQYXRoLmxlbmd0aCArIDEpKSB8fFxuXHRcdFx0XCJcIjtcblx0XHRjb25zdCBwcm9wZXJ0eVBhdGg6IHN0cmluZyA9IChpc05hdmlnYXRpb25QYXRoICYmIG5hdmlnYXRpb25QYXRoICsgXCIvXCIgKyBzUHJvcGVydHkpIHx8IHNQcm9wZXJ0eTtcblxuXHRcdGlmICghaXNUYWJsZUJvdW5kVG9OYXZpZ2F0aW9uKSB7XG5cdFx0XHRpZiAoIWlzTmF2aWdhdGlvblBhdGgpIHtcblx0XHRcdFx0Ly8gL1NhbGVzT3JkZXJNYW5hZ2UvSURcblx0XHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uSGVscGVyLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRcdHNQcm9wZXJ0eSxcblx0XHRcdFx0XHRzUHJvcGVydHlMb2NhdGlvblBhdGgsXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyAvU2FsZXNPcmRlck1hbmFuZ2UvX0l0ZW0vTWF0ZXJpYWxcblx0XHRcdFx0Ly9sZXQgb3BlcmF0b3JzXG5cdFx0XHRcdG9wZXJhdG9ycyA9IENvbW1vbkhlbHBlci5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0Y29udGV4dFBhdGgsXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChvcGVyYXRvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uSGVscGVyLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5LFxuXHRcdFx0XHRcdFx0c1Byb3BlcnR5TG9jYXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdFx0cHJvcGVydHlUeXBlLFxuXHRcdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoIWlzTmF2aWdhdGlvblBhdGgpIHtcblx0XHRcdC8vIC9TYWxlc09yZGVyTWFuYWdlL19JdGVtL01hdGVyaWFsXG5cdFx0XHRvcGVyYXRvcnMgPSBDb21tb25IZWxwZXIuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdFx0XHRcdHByb3BlcnR5UGF0aCxcblx0XHRcdFx0Y29udGV4dFBhdGgsXG5cdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0cHJvcGVydHlUeXBlLFxuXHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdHNTZXR0aW5nc1xuXHRcdFx0KTtcblx0XHRcdGlmIChvcGVyYXRvcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdG9wZXJhdG9ycyA9IENvbW1vbkhlbHBlci5nZXRPcGVyYXRvcnNGb3JQcm9wZXJ0eShcblx0XHRcdFx0XHRzUHJvcGVydHksXG5cdFx0XHRcdFx0TW9kZWxIZWxwZXIuZ2V0RW50aXR5U2V0UGF0aChjb250ZXh0UGF0aCksXG5cdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0XHRiVXNlU2VtYW50aWNEYXRlUmFuZ2UsXG5cdFx0XHRcdFx0c1NldHRpbmdzXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gb3BlcmF0b3JzPy5sZW5ndGggPiAwID8gb3BlcmF0b3JzLnRvU3RyaW5nKCkgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIC9TYWxlc09yZGVyTWFuYWdlL19JdGVtL19Bc3NvY2lhdGlvbi9Qcm9wZXJ0eU5hbWVcblx0XHRcdC8vIFRoaXMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIHRhYmxlc1xuXHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uSGVscGVyLmdldE9wZXJhdG9yc0ZvclByb3BlcnR5KFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdGNvbnRleHRQYXRoLFxuXHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdHByb3BlcnR5VHlwZSxcblx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRzU2V0dGluZ3Ncblx0XHRcdCk7XG5cdFx0XHRpZiAob3BlcmF0b3JzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRvcGVyYXRvcnMgPSBDb21tb25IZWxwZXIuZ2V0T3BlcmF0b3JzRm9yUHJvcGVydHkoXG5cdFx0XHRcdFx0cHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoY29udGV4dFBhdGgpLFxuXHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRwcm9wZXJ0eVR5cGUsXG5cdFx0XHRcdFx0YlVzZVNlbWFudGljRGF0ZVJhbmdlLFxuXHRcdFx0XHRcdHNTZXR0aW5nc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICgoIW9wZXJhdG9ycyB8fCBvcGVyYXRvcnMubGVuZ3RoID09PSAwKSAmJiAocHJvcGVydHlUeXBlID09PSBcIkVkbS5EYXRlXCIgfHwgcHJvcGVydHlUeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSkge1xuXHRcdFx0b3BlcmF0b3JzID0gQ29tbW9uSGVscGVyLmdldE9wZXJhdG9yc0ZvckRhdGVQcm9wZXJ0eShwcm9wZXJ0eVR5cGUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvcGVyYXRvcnMubGVuZ3RoID4gMCA/IG9wZXJhdG9ycy50b1N0cmluZygpIDogdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBEYUZpZWxkRGVmYXVsdCAoaWYgYW55KS4gT3RoZXJ3aXNlLCB0aGUgRGF0YUZpZWxkIHBhdGggaXMgcmV0dXJuZWQuXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkQ29udGV4dCBDb250ZXh0IG9mIHRoZSBEYXRhRmllbGRcblx0ICogQHJldHVybnMgT2JqZWN0IHBhdGhcblx0ICovXG5cdGdldERhdGFGaWVsZERlZmF1bHQ6IGZ1bmN0aW9uIChvRGF0YUZpZWxkQ29udGV4dDogQmFzZUNvbnRleHQpOiBzdHJpbmcge1xuXHRcdC8vIHRoaXMgaXMgdXNlZCBpbiBjb2x1bW4uZnJhZ21lbnRcblx0XHRjb25zdCBvRGF0YUZpZWxkRGVmYXVsdCA9IChvRGF0YUZpZWxkQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsKS5nZXRPYmplY3QoXG5cdFx0XHRgJHtvRGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZERlZmF1bHRgXG5cdFx0KTtcblx0XHRyZXR1cm4gb0RhdGFGaWVsZERlZmF1bHRcblx0XHRcdD8gYCR7b0RhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpfUBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGREZWZhdWx0YFxuXHRcdFx0OiBvRGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCk7XG5cdH0sXG5cdC8qXG5cdCAqIE1ldGhvZCB0byBnZXQgdmlzaWJsZSBleHByZXNzaW9uIGZvciBEYXRhRmllbGRBY3Rpb25CdXR0b25cblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uVmlzaWJsZVxuXHQgKiBAcGFyYW0ge29iamVjdH0gb1RoaXMgLSBDdXJyZW50IE9iamVjdFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0RhdGFGaWVsZCAtIERhdGFQb2ludCdzIFZhbHVlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYklzQm91bmQgLSBEYXRhUG9pbnQgYWN0aW9uIGJvdW5kXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQWN0aW9uQ29udGV4dCAtIEFjdGlvbkNvbnRleHQgVmFsdWVcblx0ICogQHJldHVybiB7Ym9vbGVhbn0gLSByZXR1cm5zIGJvb2xlYW5cblx0ICovXG5cdGlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uVmlzaWJsZTogZnVuY3Rpb24gKFxuXHRcdG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlVHlwZXMsXG5cdFx0YklzQm91bmQ6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0b0FjdGlvbkNvbnRleHQ/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBvRGF0YUZpZWxkLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUgJiYgKGJJc0JvdW5kICE9PSB0cnVlIHx8IG9BY3Rpb25Db250ZXh0ICE9PSBmYWxzZSk7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHByZXNzIGV2ZW50IGZvciBEYXRhRmllbGRBY3Rpb25CdXR0b24uXG5cdCAqIEBwYXJhbSBvVGhpcyBDdXJyZW50IE9iamVjdFxuXHQgKiBAcGFyYW0gb0RhdGFGaWVsZCBEYXRhUG9pbnQncyBWYWx1ZVxuXHQgKiBAcmV0dXJucyBUaGUgYmluZGluZyBleHByZXNzaW9uIGZvciB0aGUgRGF0YUZpZWxkQWN0aW9uQnV0dG9uIHByZXNzIGV2ZW50XG5cdCAqL1xuXHRnZXRQcmVzc0V2ZW50Rm9yRGF0YUZpZWxkQWN0aW9uQnV0dG9uOiBmdW5jdGlvbiAob1RoaXM6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCBvRGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4pOiBzdHJpbmcge1xuXHRcdGlmICghb0RhdGFGaWVsZCkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHRcdGxldCBzSW52b2NhdGlvbkdyb3VwaW5nID0gXCJJc29sYXRlZFwiO1xuXHRcdGlmIChcblx0XHRcdG9EYXRhRmllbGQuSW52b2NhdGlvbkdyb3VwaW5nICYmXG5cdFx0XHQob0RhdGFGaWVsZC5JbnZvY2F0aW9uR3JvdXBpbmcgYXMgdW5rbm93biBhcyBNZXRhTW9kZWxFbnVtPE9wZXJhdGlvbkdyb3VwaW5nVHlwZT4pLiRFbnVtTWVtYmVyID09PVxuXHRcdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLk9wZXJhdGlvbkdyb3VwaW5nVHlwZS9DaGFuZ2VTZXRcIlxuXHRcdCkge1xuXHRcdFx0c0ludm9jYXRpb25Hcm91cGluZyA9IFwiQ2hhbmdlU2V0XCI7XG5cdFx0fVxuXHRcdGxldCBiSXNOYXZpZ2FibGUgPSBvVGhpcy5uYXZpZ2F0ZUFmdGVyQWN0aW9uIGFzIGJvb2xlYW4gfCBzdHJpbmc7XG5cdFx0YklzTmF2aWdhYmxlID0gYklzTmF2aWdhYmxlID09PSBcImZhbHNlXCIgPyBmYWxzZSA6IHRydWU7XG5cblx0XHRjb25zdCBlbnRpdGllczogQXJyYXk8c3RyaW5nPiA9IG9UaGlzPy5jb250ZXh0UGF0aD8uZ2V0UGF0aCgpLnNwbGl0KFwiL1wiKTtcblx0XHRjb25zdCBlbnRpdHlTZXROYW1lOiBzdHJpbmcgPSBlbnRpdGllc1tlbnRpdGllcy5sZW5ndGggLSAxXTtcblxuXHRcdGNvbnN0IG9QYXJhbXMgPSB7XG5cdFx0XHRjb250ZXh0czogXCIkeyRzb3VyY2U+L30uZ2V0QmluZGluZ0NvbnRleHQoKVwiLFxuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKHNJbnZvY2F0aW9uR3JvdXBpbmcpLFxuXHRcdFx0bW9kZWw6IFwiJHskc291cmNlPi99LmdldE1vZGVsKClcIixcblx0XHRcdGxhYmVsOiB0eXBlb2Ygb0RhdGFGaWVsZD8uTGFiZWwgPT09IFwic3RyaW5nXCIgPyBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKG9EYXRhRmllbGQuTGFiZWwsIHRydWUpIDogXCJcIixcblx0XHRcdGlzTmF2aWdhYmxlOiBiSXNOYXZpZ2FibGUsXG5cdFx0XHRlbnRpdHlTZXROYW1lOiBDb21tb25IZWxwZXIuYWRkU2luZ2xlUXVvdGVzKGVudGl0eVNldE5hbWUpXG5cdFx0fTtcblxuXHRcdHJldHVybiBDb21tb25IZWxwZXIuZ2VuZXJhdGVGdW5jdGlvbihcblx0XHRcdFwiLmVkaXRGbG93Lmludm9rZUFjdGlvblwiLFxuXHRcdFx0Q29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhvRGF0YUZpZWxkLkFjdGlvbiEpLFxuXHRcdFx0Q29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKG9QYXJhbXMpXG5cdFx0KTtcblx0fSxcblxuXHRpc051bWVyaWNEYXRhVHlwZTogZnVuY3Rpb24gKHNEYXRhRmllbGRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBfc0RhdGFGaWVsZFR5cGUgPSBzRGF0YUZpZWxkVHlwZTtcblx0XHRpZiAoX3NEYXRhRmllbGRUeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGFOdW1lcmljRGF0YVR5cGVzID0gW1xuXHRcdFx0XHRcIkVkbS5JbnQxNlwiLFxuXHRcdFx0XHRcIkVkbS5JbnQzMlwiLFxuXHRcdFx0XHRcIkVkbS5JbnQ2NFwiLFxuXHRcdFx0XHRcIkVkbS5CeXRlXCIsXG5cdFx0XHRcdFwiRWRtLlNCeXRlXCIsXG5cdFx0XHRcdFwiRWRtLlNpbmdsZVwiLFxuXHRcdFx0XHRcIkVkbS5EZWNpbWFsXCIsXG5cdFx0XHRcdFwiRWRtLkRvdWJsZVwiXG5cdFx0XHRdO1xuXHRcdFx0cmV0dXJuICFhTnVtZXJpY0RhdGFUeXBlcy5pbmNsdWRlcyhfc0RhdGFGaWVsZFR5cGUpID8gZmFsc2UgOiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXG5cdGlzRGF0ZU9yVGltZURhdGFUeXBlOiBmdW5jdGlvbiAoc1Byb3BlcnR5VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKHNQcm9wZXJ0eVR5cGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgYURhdGVUaW1lRGF0YVR5cGVzID0gW1wiRWRtLkRhdGVUaW1lT2Zmc2V0XCIsIFwiRWRtLkRhdGVUaW1lXCIsIFwiRWRtLkRhdGVcIiwgXCJFZG0uVGltZU9mRGF5XCIsIFwiRWRtLlRpbWVcIl07XG5cdFx0XHRyZXR1cm4gYURhdGVUaW1lRGF0YVR5cGVzLmluY2x1ZGVzKHNQcm9wZXJ0eVR5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXHRpc0RhdGVUaW1lRGF0YVR5cGU6IGZ1bmN0aW9uIChzUHJvcGVydHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRpZiAoc1Byb3BlcnR5VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBhRGF0ZURhdGFUeXBlcyA9IFtcIkVkbS5EYXRlVGltZU9mZnNldFwiLCBcIkVkbS5EYXRlVGltZVwiXTtcblx0XHRcdHJldHVybiBhRGF0ZURhdGFUeXBlcy5pbmNsdWRlcyhzUHJvcGVydHlUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fSxcblx0aXNEYXRlRGF0YVR5cGU6IGZ1bmN0aW9uIChzUHJvcGVydHlUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc1Byb3BlcnR5VHlwZSA9PT0gXCJFZG0uRGF0ZVwiO1xuXHR9LFxuXHRpc1RpbWVEYXRhVHlwZTogZnVuY3Rpb24gKHNQcm9wZXJ0eVR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGlmIChzUHJvcGVydHlUeXBlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGFEYXRlRGF0YVR5cGVzID0gW1wiRWRtLlRpbWVPZkRheVwiLCBcIkVkbS5UaW1lXCJdO1xuXHRcdFx0cmV0dXJuIGFEYXRlRGF0YVR5cGVzLmluY2x1ZGVzKHNQcm9wZXJ0eVR5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUbyBkaXNwbGF5IGEgdGV4dCBhcnJhbmdlbWVudCBzaG93aW5nIHRleHQgYW5kIGlkLCB3ZSBuZWVkIGEgc3RyaW5nIGZpZWxkIG9uIHRoZSBVSS5cblx0ICogQHBhcmFtIG9Bbm5vdGF0aW9ucyBBbGwgdGhlIGFubm90YXRpb25zIG9mIGEgcHJvcGVydHlcblx0ICogQHBhcmFtIHNUeXBlIFRoZSBwcm9wZXJ0eSBkYXRhIHR5cGVcblx0ICogQHJldHVybnMgVGhlIHR5cGUgdG8gYmUgdXNlZCBvbiB0aGUgVUkgZm9yIHRoZSBhbGlnbm1lbnRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbjogZnVuY3Rpb24gKG9Bbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucywgc1R5cGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3Qgc1RleHRBbm5vdGF0aW9uID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIixcblx0XHRcdHNUZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uID0gXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCI7XG5cblx0XHQvKlxuXHRcdCAgSW4gY2FzZSBvZiBUZXh0U2VwYXJhdGUsIHRoZSByZXR1cm5lZCBpcyB1c2VkIGZvciB0aGUgZmlsZWQgaXRzZWxmIG9ubHkgc2hvd2luZ1xuXHRcdCAgIHRoZSB2YWx1ZSBvZiB0aGUgb3JpZ2luYWwgcHJvcGVydHksIHRodXMgYWxzbyB0aGUgdHlwZSBvZiB0aGUgcHJvcGVydHkgbmVlZHMgdG8gYmUgdXNlZC5cblx0XHQgIEluIGNhc2Ugb2YgVGV4dE9ubHksIHdlIGNvbnNpZGVyIGl0IHRvIGJlIEVkbS5TdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBkZWZpbml0aW9uXG5cdFx0ICAgaW4gdGhlIHZvY2FidWxhcnksIGV2ZW4gaWYgaXQncyBub3QuXG5cdFx0ICBJbiBvdGhlciBjYXNlcywgd2UgcmV0dXJuIEVkbS5TdHJpbmcsIGFzIHRoZSB2YWx1ZSBpcyBidWlsZCB1c2luZyBhIHRleHQgdGVtcGxhdGUuXG5cdFx0ICovXG5cdFx0cmV0dXJuIG9Bbm5vdGF0aW9ucz8uW3NUZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uXT8uJEVudW1NZW1iZXIgIT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0U2VwYXJhdGVcIiAmJlxuXHRcdFx0KG9Bbm5vdGF0aW9ucz8uW3NUZXh0QW5ub3RhdGlvbl0gYXMgeyAkUGF0aDogc3RyaW5nIH0pPy4kUGF0aFxuXHRcdFx0PyBcIkVkbS5TdHJpbmdcIlxuXHRcdFx0OiBzVHlwZTtcblx0fSxcblxuXHRnZXRDb2x1bW5BbGlnbm1lbnQ6IGZ1bmN0aW9uIChcblx0XHRvRGF0YUZpZWxkOiBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRcdG9UYWJsZTogeyBjb2xsZWN0aW9uOiBCYXNlQ29udGV4dCB9XG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBzRW50aXR5UGF0aCA9IG9UYWJsZS5jb2xsZWN0aW9uLmdldFBhdGgoKSxcblx0XHRcdG9Nb2RlbCA9IG9UYWJsZS5jb2xsZWN0aW9uLmdldE1vZGVsKCk7XG5cdFx0aWYgKFxuXHRcdFx0KG9EYXRhRmllbGRbXCIkVHlwZVwiXSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBY3Rpb25cIiB8fFxuXHRcdFx0XHRvRGF0YUZpZWxkW1wiJFR5cGVcIl0gPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXCIpICYmXG5cdFx0XHQob0RhdGFGaWVsZCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFjdGlvbj4pLklubGluZSAmJlxuXHRcdFx0b0RhdGFGaWVsZC5JY29uVXJsXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gXCJDZW50ZXJcIjtcblx0XHR9XG5cdFx0Ly8gQ29sdW1ucyBjb250YWluaW5nIGEgU2VtYW50aWMgS2V5IG11c3QgYmUgQmVnaW4gYWxpZ25lZFxuXHRcdGNvbnN0IGFTZW1hbnRpY0tleXMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NFbnRpdHlQYXRofS9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5YCk7XG5cdFx0aWYgKG9EYXRhRmllbGRbXCIkVHlwZVwiXSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRcIikge1xuXHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IChvRGF0YUZpZWxkIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkPikuVmFsdWUuJFBhdGg7XG5cdFx0XHRjb25zdCBiSXNTZW1hbnRpY0tleSA9XG5cdFx0XHRcdGFTZW1hbnRpY0tleXMgJiZcblx0XHRcdFx0IWFTZW1hbnRpY0tleXMuZXZlcnkoZnVuY3Rpb24gKG9LZXk6IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH0pOiBib29sZWFuIHtcblx0XHRcdFx0XHRyZXR1cm4gb0tleS4kUHJvcGVydHlQYXRoICE9PSBzUHJvcGVydHlQYXRoO1xuXHRcdFx0XHR9KTtcblx0XHRcdGlmIChiSXNTZW1hbnRpY0tleSkge1xuXHRcdFx0XHRyZXR1cm4gXCJCZWdpblwiO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkQWxpZ25tZW50KG9EYXRhRmllbGQsIG9Nb2RlbCwgc0VudGl0eVBhdGgpO1xuXHR9LFxuXG5cdGdldFByb3BlcnR5QWxpZ25tZW50OiBmdW5jdGlvbiAoXG5cdFx0c1R5cGU6IHN0cmluZyxcblx0XHRvRm9ybWF0T3B0aW9ucz86IHsgZGlzcGxheU1vZGU/OiBzdHJpbmc7IHRleHRBbGlnbk1vZGU/OiBzdHJpbmcgfSxcblx0XHRvQ29tcHV0ZWRFZGl0TW9kZT86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdCk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRsZXQgc0RlZmF1bHRBbGlnbm1lbnQ6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gXCJCZWdpblwiO1xuXHRcdGNvbnN0IHNUZXh0QWxpZ25tZW50ID0gb0Zvcm1hdE9wdGlvbnMgPyBvRm9ybWF0T3B0aW9ucy50ZXh0QWxpZ25Nb2RlIDogXCJcIjtcblx0XHRpZiAoc1RleHRBbGlnbm1lbnQgPT09IFwiRm9ybVwiKSB7XG5cdFx0XHRpZiAodGhpcy5pc051bWVyaWNEYXRhVHlwZShzVHlwZSkpIHtcblx0XHRcdFx0c0RlZmF1bHRBbGlnbm1lbnQgPSBcIkJlZ2luXCI7XG5cdFx0XHRcdGlmIChvQ29tcHV0ZWRFZGl0TW9kZSkge1xuXHRcdFx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50RXhwcmVzc2lvbihvQ29tcHV0ZWRFZGl0TW9kZSwgXCJCZWdpblwiLCBcIkVuZFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodGhpcy5pc051bWVyaWNEYXRhVHlwZShzVHlwZSkgfHwgdGhpcy5pc0RhdGVPclRpbWVEYXRhVHlwZShzVHlwZSkpIHtcblx0XHRcdHNEZWZhdWx0QWxpZ25tZW50ID0gXCJSaWdodFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gc0RlZmF1bHRBbGlnbm1lbnQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldCBhbGlnbm1lbnQgYmFzZWQgb24gdGhlIGRhdGFGaWVsZC5cblx0ICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YUZpZWxkIGJlaW5nIHByb2Nlc3NlZFxuXHQgKiBAcGFyYW0gbW9kZWwgVGhlIE9EYXRhIG1vZGVsXG5cdCAqIEBwYXJhbSBlbnRpdHlQYXRoIFRoZSBwYXRoIHRvIHRoZSBlbnRpdHlcblx0ICogQHBhcmFtIFtmb3JtYXRPcHRpb25zXSBUaGUgT2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgZGF0YUZpZWxkJ3MgZm9ybWF0IG9wdGlvbnNcblx0ICogQHBhcmFtIGZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgRGlzcGxheSBmb3JtYXRcblx0ICogQHBhcmFtIGZvcm1hdE9wdGlvbnMudGV4dEFsaWduTW9kZSBUZXh0IGFsaWdubWVudCBvZiB0aGUgZGF0YUZpZWxkXG5cdCAqIEBwYXJhbSBbY29tcHV0ZWRFZGl0TW9kZV0gVGhlIGNvbXB1dGVkIEVkaXQgbW9kZSBvZiB0aGUgZGF0YUZpZWxkXG5cdCAqIEByZXR1cm5zIFRoZSBkYXRhRmllbGQgYWxpZ25tZW50XG5cdCAqL1xuXHRnZXREYXRhRmllbGRBbGlnbm1lbnQ6IGZ1bmN0aW9uIChcblx0XHRkYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4sXG5cdFx0bW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGVudGl0eVBhdGg6IHN0cmluZyxcblx0XHRmb3JtYXRPcHRpb25zPzogeyBkaXNwbGF5TW9kZT86IHN0cmluZzsgdGV4dEFsaWduTW9kZT86IHN0cmluZyB9LFxuXHRcdGNvbXB1dGVkRWRpdE1vZGU/OiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0bGV0IGRhdGFGaWVsZFBhdGgsXG5cdFx0XHRkZWZhdWx0QWxpZ25tZW50OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IFwiQmVnaW5cIixcblx0XHRcdHR5cGUsXG5cdFx0XHRhbm5vdGF0aW9ucztcblxuXHRcdGlmIChkYXRhRmllbGQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSB7XG5cdFx0XHRkYXRhRmllbGRQYXRoID0gKGRhdGFGaWVsZCBhcyBNZXRhTW9kZWxUeXBlPERhdGFGaWVsZEZvckFubm90YXRpb24+KS5UYXJnZXQ/LiRBbm5vdGF0aW9uUGF0aDtcblx0XHRcdGlmIChkYXRhRmllbGRQYXRoICYmIGRhdGFGaWVsZFBhdGguaW5jbHVkZXMoXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCIpKSB7XG5cdFx0XHRcdGNvbnN0IGZpZWxkR3JvdXAgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofWApO1xuXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRHcm91cC5EYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dHlwZSA9IG1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlQYXRofS8ke2RhdGFGaWVsZFBhdGh9L0RhdGEvJHtpLnRvU3RyaW5nKCl9L1ZhbHVlLyRQYXRoLyRUeXBlYCk7XG5cdFx0XHRcdFx0YW5ub3RhdGlvbnMgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS9EYXRhLyR7aS50b1N0cmluZygpfS9WYWx1ZS8kUGF0aEBgKTtcblx0XHRcdFx0XHR0eXBlID0gdGhpcy5nZXREYXRhVHlwZUZvclZpc3VhbGl6YXRpb24oYW5ub3RhdGlvbnMsIHR5cGUpO1xuXHRcdFx0XHRcdGRlZmF1bHRBbGlnbm1lbnQgPSB0aGlzLmdldFByb3BlcnR5QWxpZ25tZW50KHR5cGUsIGZvcm1hdE9wdGlvbnMsIGNvbXB1dGVkRWRpdE1vZGUpO1xuXG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBbGlnbm1lbnQgPT09IFwiQmVnaW5cIikge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBkZWZhdWx0QWxpZ25tZW50O1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZGF0YUZpZWxkUGF0aCAmJlxuXHRcdFx0XHRkYXRhRmllbGRQYXRoLmluY2x1ZGVzKFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuRGF0YVBvaW50XCIpICYmXG5cdFx0XHRcdChtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyYCkgPT09XG5cdFx0XHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIiB8fFxuXHRcdFx0XHRcdG1vZGVsLmdldE9iamVjdChgJHtlbnRpdHlQYXRofS8ke2RhdGFGaWVsZFBhdGh9L1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJgKSA9PT1cblx0XHRcdFx0XHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUHJvZ3Jlc3NcIilcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gZGVmYXVsdEFsaWdubWVudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR5cGUgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS8kVHlwZWApO1xuXHRcdFx0XHRpZiAodHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSkge1xuXHRcdFx0XHRcdHR5cGUgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS9WYWx1ZS8kUGF0aC8kVHlwZWApO1xuXHRcdFx0XHRcdGFubm90YXRpb25zID0gbW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVBhdGh9LyR7ZGF0YUZpZWxkUGF0aH0vVmFsdWUvJFBhdGhAYCk7XG5cdFx0XHRcdFx0dHlwZSA9IHRoaXMuZ2V0RGF0YVR5cGVGb3JWaXN1YWxpemF0aW9uKGFubm90YXRpb25zLCB0eXBlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWZhdWx0QWxpZ25tZW50ID0gdGhpcy5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlLCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YUZpZWxkUGF0aCA9IChkYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRUeXBlcz4pLlZhbHVlPy4kUGF0aDtcblx0XHRcdHR5cGUgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofS8kVHlwZWApO1xuXHRcdFx0YW5ub3RhdGlvbnMgPSBtb2RlbC5nZXRPYmplY3QoYCR7ZW50aXR5UGF0aH0vJHtkYXRhRmllbGRQYXRofUBgKTtcblx0XHRcdHR5cGUgPSB0aGlzLmdldERhdGFUeXBlRm9yVmlzdWFsaXphdGlvbihhbm5vdGF0aW9ucywgdHlwZSk7XG5cdFx0XHRjb25zdCBrZXlzID0gbW9kZWwuZ2V0T2JqZWN0KGAke2VudGl0eVBhdGh9L2ApW1wiJEtleVwiXTtcblx0XHRcdGlmIChrZXlzICYmIGtleXMuaW5kZXhPZihkYXRhRmllbGRQYXRoKSAhPT0gMCkge1xuXHRcdFx0XHRkZWZhdWx0QWxpZ25tZW50ID0gdGhpcy5nZXRQcm9wZXJ0eUFsaWdubWVudCh0eXBlLCBmb3JtYXRPcHRpb25zLCBjb21wdXRlZEVkaXRNb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRlZmF1bHRBbGlnbm1lbnQ7XG5cdH0sXG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBnZXQgZW5hYmxlZCBleHByZXNzaW9uIGZvciBEYXRhRmllbGRBY3Rpb25CdXR0b24uXG5cdCAqIEBwYXJhbSBvRGF0YUZpZWxkIERhdGFQb2ludCdzIFZhbHVlXG5cdCAqIEBwYXJhbSBiSXNCb3VuZCBEYXRhUG9pbnQgYWN0aW9uIGJvdW5kXG5cdCAqIEBwYXJhbSBvQWN0aW9uQ29udGV4dCBBY3Rpb25Db250ZXh0IFZhbHVlXG5cdCAqIEBwYXJhbSBzQWN0aW9uQ29udGV4dEZvcm1hdCBGb3JtYXR0ZWQgdmFsdWUgb2YgQWN0aW9uQ29udGV4dFxuXHQgKiBAcmV0dXJucyBBIGJvb2xlYW4gb3Igc3RyaW5nIGV4cHJlc3Npb24gZm9yIGVuYWJsZWQgcHJvcGVydHlcblx0ICovXG5cdGlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uRW5hYmxlZDogZnVuY3Rpb24gKFxuXHRcdG9EYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0XHRiSXNCb3VuZDogYm9vbGVhbixcblx0XHRvQWN0aW9uQ29udGV4dDogc3RyaW5nIHwgT3BlcmF0aW9uQXZhaWxhYmxlIHwgdW5kZWZpbmVkIHwgbnVsbCxcblx0XHRzQWN0aW9uQ29udGV4dEZvcm1hdDogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0aWYgKGJJc0JvdW5kICE9PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdFx0fVxuXHRcdHJldHVybiAob0FjdGlvbkNvbnRleHQgPT09IG51bGwgPyBcIns9ICEkeyNcIiArIG9EYXRhRmllbGQuQWN0aW9uICsgXCJ9ID8gZmFsc2UgOiB0cnVlIH1cIiA6IG9BY3Rpb25Db250ZXh0KVxuXHRcdFx0PyBzQWN0aW9uQ29udGV4dEZvcm1hdFxuXHRcdFx0OiBcInRydWVcIjtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGNvbXB1dGUgdGhlIGxhYmVsIGZvciBhIERhdGFGaWVsZC5cblx0ICogSWYgdGhlIERhdGFGaWVsZCdzIGxhYmVsIGlzIGFuIGVtcHR5IHN0cmluZywgaXQncyBub3QgcmVuZGVyZWQgZXZlbiBpZiBhIGZhbGxiYWNrIGV4aXN0cy5cblx0ICogQHBhcmFtIHtvYmplY3R9IG9EYXRhRmllbGQgVGhlIERhdGFGaWVsZCBiZWluZyBwcm9jZXNzZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9JbnRlcmZhY2UgVGhlIGludGVyZmFjZSBmb3IgY29udGV4dCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tcHV0ZWQgdGV4dCBmb3IgdGhlIERhdGFGaWVsZCBsYWJlbC5cblx0ICovXG5cblx0Y29tcHV0ZUxhYmVsVGV4dDogZnVuY3Rpb24gKG9EYXRhRmllbGQ6IE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkVHlwZXM+LCBvSW50ZXJmYWNlOiBDb21wdXRlZEFubm90YXRpb25JbnRlcmZhY2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IG9JbnRlcmZhY2UuY29udGV4dC5nZXRNb2RlbCgpO1xuXHRcdGxldCBzQ29udGV4dFBhdGggPSBvSW50ZXJmYWNlLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGlmIChzQ29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG5cdFx0XHRzQ29udGV4dFBhdGggPSBzQ29udGV4dFBhdGguc2xpY2UoMCwgc0NvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IHNEYXRhRmllbGRMYWJlbCA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9MYWJlbGApO1xuXHRcdC8vV2UgZG8gbm90IHNob3cgYW4gYWRkaXRpb25hbCBsYWJlbCB0ZXh0IGZvciBhIGJ1dHRvbjpcblx0XHRpZiAoXG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckFjdGlvblwiIHx8XG5cdFx0XHRvRGF0YUZpZWxkLiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblwiXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoc0RhdGFGaWVsZExhYmVsKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZExhYmVsO1xuXHRcdH0gZWxzZSBpZiAoc0RhdGFGaWVsZExhYmVsID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdFx0bGV0IHNEYXRhRmllbGRUYXJnZXRUaXRsZTtcblx0XHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCIpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0KG9EYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPik/LlRhcmdldD8uJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKFxuXHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkRhdGFQb2ludFwiXG5cdFx0XHRcdCkgfHxcblx0XHRcdFx0KG9EYXRhRmllbGQgYXMgTWV0YU1vZGVsVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPik/LlRhcmdldD8uJEFubm90YXRpb25QYXRoLmluY2x1ZGVzKFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkNoYXJ0XCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0c0RhdGFGaWVsZFRhcmdldFRpdGxlID0gb01vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGhAL1RpdGxlYCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChvRGF0YUZpZWxkIGFzIE1ldGFNb2RlbFR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4pPy5UYXJnZXQ/LiRBbm5vdGF0aW9uUGF0aC5pbmNsdWRlcyhcblx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tdW5pY2F0aW9uLnYxLkNvbnRhY3RcIlxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0c0RhdGFGaWVsZFRhcmdldFRpdGxlID0gb01vZGVsLmdldE9iamVjdChcblx0XHRcdFx0XHRgJHtzQ29udGV4dFBhdGh9L1RhcmdldC8kQW5ub3RhdGlvblBhdGhAL2ZuLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbGBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNEYXRhRmllbGRUYXJnZXRUaXRsZSkge1xuXHRcdFx0cmV0dXJuIHNEYXRhRmllbGRUYXJnZXRUaXRsZTtcblx0XHR9XG5cdFx0bGV0IHNEYXRhRmllbGRUYXJnZXRMYWJlbDtcblx0XHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCIpIHtcblx0XHRcdHNEYXRhRmllbGRUYXJnZXRMYWJlbCA9IG9Nb2RlbC5nZXRPYmplY3QoYCR7c0NvbnRleHRQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoQC9MYWJlbGApO1xuXHRcdH1cblx0XHRpZiAoc0RhdGFGaWVsZFRhcmdldExhYmVsKSB7XG5cdFx0XHRyZXR1cm4gc0RhdGFGaWVsZFRhcmdldExhYmVsO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNEYXRhRmllbGRWYWx1ZUxhYmVsID0gb01vZGVsLmdldE9iamVjdChgJHtzQ29udGV4dFBhdGh9L1ZhbHVlLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbGApO1xuXHRcdGlmIChzRGF0YUZpZWxkVmFsdWVMYWJlbCkge1xuXHRcdFx0cmV0dXJuIHNEYXRhRmllbGRWYWx1ZUxhYmVsO1xuXHRcdH1cblxuXHRcdGxldCBzRGF0YUZpZWxkVGFyZ2V0VmFsdWVMYWJlbDtcblx0XHRpZiAob0RhdGFGaWVsZC4kVHlwZSA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXCIpIHtcblx0XHRcdHNEYXRhRmllbGRUYXJnZXRWYWx1ZUxhYmVsID0gb01vZGVsLmdldE9iamVjdChcblx0XHRcdFx0YCR7c0NvbnRleHRQYXRofS9UYXJnZXQvJEFubm90YXRpb25QYXRoL1ZhbHVlLyRQYXRoQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbGBcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmIChzRGF0YUZpZWxkVGFyZ2V0VmFsdWVMYWJlbCkge1xuXHRcdFx0cmV0dXJuIHNEYXRhRmllbGRUYXJnZXRWYWx1ZUxhYmVsO1xuXHRcdH1cblx0XHRyZXR1cm4gXCJcIjtcblx0fSxcblx0LyoqXG5cdCAqIE1ldGhvZCB0byBhbGlnbiB0aGUgZGF0YSBmaWVsZHMgd2l0aCB0aGVpciBsYWJlbC5cblx0ICogQHBhcmFtIHNWaXN1YWxpemF0aW9uXG5cdCAqIEByZXR1cm5zIEV4cHJlc3Npb24gYmluZGluZyBmb3IgYWxpZ25JdGVtcyBwcm9wZXJ0eVxuXHQgKi9cblx0YnVpbGRFeHByZXNzaW9uRm9yQWxpZ25JdGVtczogZnVuY3Rpb24gKHNWaXN1YWxpemF0aW9uOiBzdHJpbmcpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgZmllbGRWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24gPSBjb25zdGFudChzVmlzdWFsaXphdGlvbik7XG5cdFx0Y29uc3QgcHJvZ3Jlc3NWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24gPSBjb25zdGFudChcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlZpc3VhbGl6YXRpb25UeXBlL1Byb2dyZXNzXCIpO1xuXHRcdGNvbnN0IHJhdGluZ1Zpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiA9IGNvbnN0YW50KFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpO1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGlmRWxzZShcblx0XHRcdFx0b3IoXG5cdFx0XHRcdFx0ZXF1YWwoZmllbGRWaXN1YWxpemF0aW9uQmluZGluZ0V4cHJlc3Npb24sIHByb2dyZXNzVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRlcXVhbChmaWVsZFZpc3VhbGl6YXRpb25CaW5kaW5nRXhwcmVzc2lvbiwgcmF0aW5nVmlzdWFsaXphdGlvbkJpbmRpbmdFeHByZXNzaW9uKVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRjb25zdGFudChcIkNlbnRlclwiKSxcblx0XHRcdFx0aWZFbHNlKFVJLklzRWRpdGFibGUsIGNvbnN0YW50KFwiQ2VudGVyXCIpLCBjb25zdGFudChcIlN0cmV0Y2hcIikpXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGNoZWNrIFZhbHVlTGlzdFJlZmVyZW5jZXMsIFZhbHVlTGlzdE1hcHBpbmcgYW5kIFZhbHVlTGlzdCBpbnNpZGUgQWN0aW9uUGFyYW1ldGVycyBmb3IgVmFsdWVIZWxwLlxuXHQgKiBAcGFyYW0gb1Byb3BlcnR5QW5ub3RhdGlvbnMgQWN0aW9uIHBhcmFtZXRlciBvYmplY3Rcblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZXJlIGlzIGEgVmFsdWVMaXN0KiBhbm5vdGF0aW9uIGRlZmluZWRcblx0ICovXG5cdGhhc1ZhbHVlSGVscEFubm90YXRpb246IGZ1bmN0aW9uIChvUHJvcGVydHlBbm5vdGF0aW9uczogTWV0YU1vZGVsUHJvcGVydHlBbm5vdGF0aW9ucyk6IGJvb2xlYW4ge1xuXHRcdGlmIChvUHJvcGVydHlBbm5vdGF0aW9ucykge1xuXHRcdFx0cmV0dXJuICEhKFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0UmVmZXJlbmNlc1wiXSB8fFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1wiXSB8fFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0XCJdXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IGRpc3BsYXkgcHJvcGVydHkgZm9yIEFjdGlvblBhcmFtZXRlciBkaWFsb2cuXG5cdCAqIEBwYXJhbSBvUHJvcGVydHkgVGhlIGFjdGlvbiBwYXJhbWV0ZXIgaW5zdGFuY2Vcblx0ICogQHBhcmFtIG9JbnRlcmZhY2UgVGhlIGludGVyZmFjZSBmb3IgdGhlIGNvbnRleHQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGRpc3BsYXkgZm9ybWF0ICBmb3IgYW4gYWN0aW9uIHBhcmFtZXRlciBGaWVsZFxuXHQgKi9cblx0Z2V0QVBEaWFsb2dEaXNwbGF5Rm9ybWF0OiBhc3luYyBmdW5jdGlvbiAob1Byb3BlcnR5OiBNZXRhTW9kZWxQcm9wZXJ0eSwgb0ludGVyZmFjZTogQ29tcHV0ZWRBbm5vdGF0aW9uSW50ZXJmYWNlKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRsZXQgb0Fubm90YXRpb247XG5cdFx0Y29uc3Qgb01vZGVsID0gb0ludGVyZmFjZS5jb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0ludGVyZmFjZS5jb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBzUHJvcGVydHlOYW1lID0gb1Byb3BlcnR5LiROYW1lIHx8IG9JbnRlcmZhY2UuY29udGV4dC5nZXRQcm9wZXJ0eShgJHtzQ29udGV4dFBhdGh9QHNhcHVpLm5hbWVgKTtcblx0XHRjb25zdCBvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnMgPSBvTW9kZWwuZ2V0T2JqZWN0KGAke3NDb250ZXh0UGF0aH1AYCk7XG5cdFx0Y29uc3Qgb1ZhbHVlSGVscEFubm90YXRpb24gPVxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RcIl0gfHxcblx0XHRcdG9BY3Rpb25QYXJhbWV0ZXJBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVmFsdWVMaXN0TWFwcGluZ1wiXSB8fFxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5WYWx1ZUxpc3RSZWZlcmVuY2VzXCJdO1xuXHRcdGNvbnN0IGdldFZhbHVlTGlzdFByb3BlcnR5TmFtZSA9IGZ1bmN0aW9uIChvVmFsdWVMaXN0OiB7XG5cdFx0XHRQYXJhbWV0ZXJzOiB7IExvY2FsRGF0YVByb3BlcnR5PzogeyAkUHJvcGVydHlQYXRoOiBzdHJpbmcgfTsgVmFsdWVMaXN0UHJvcGVydHk6IHN0cmluZyB9W107XG5cdFx0fSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0XHRjb25zdCBvVmFsdWVMaXN0UGFyYW1ldGVyID0gb1ZhbHVlTGlzdC5QYXJhbWV0ZXJzLmZpbmQoZnVuY3Rpb24gKG9QYXJhbWV0ZXI6IHtcblx0XHRcdFx0TG9jYWxEYXRhUHJvcGVydHk/OiB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9O1xuXHRcdFx0fSkge1xuXHRcdFx0XHRyZXR1cm4gb1BhcmFtZXRlci5Mb2NhbERhdGFQcm9wZXJ0eSAmJiBvUGFyYW1ldGVyLkxvY2FsRGF0YVByb3BlcnR5LiRQcm9wZXJ0eVBhdGggPT09IHNQcm9wZXJ0eU5hbWU7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBvVmFsdWVMaXN0UGFyYW1ldGVyICYmIG9WYWx1ZUxpc3RQYXJhbWV0ZXIuVmFsdWVMaXN0UHJvcGVydHk7XG5cdFx0fTtcblx0XHRsZXQgc1ZhbHVlTGlzdFByb3BlcnR5TmFtZTtcblx0XHRpZiAoXG5cdFx0XHRvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRBcnJhbmdlbWVudFwiXSB8fFxuXHRcdFx0b0FjdGlvblBhcmFtZXRlckFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0QGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFwiXVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShvQWN0aW9uUGFyYW1ldGVyQW5ub3RhdGlvbnMsIHVuZGVmaW5lZCk7XG5cdFx0fSBlbHNlIGlmIChvVmFsdWVIZWxwQW5ub3RhdGlvbikge1xuXHRcdFx0aWYgKG9WYWx1ZUhlbHBBbm5vdGF0aW9uLkNvbGxlY3Rpb25QYXRoKSB7XG5cdFx0XHRcdC8vIGdldCB0aGUgbmFtZSBvZiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBpbiB2YWx1ZSBsaXN0IGNvbGxlY3Rpb25cblx0XHRcdFx0c1ZhbHVlTGlzdFByb3BlcnR5TmFtZSA9IGdldFZhbHVlTGlzdFByb3BlcnR5TmFtZShvVmFsdWVIZWxwQW5ub3RhdGlvbik7XG5cdFx0XHRcdGlmICghc1ZhbHVlTGlzdFByb3BlcnR5TmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBcIlZhbHVlXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gZ2V0IHRleHQgZm9yIHRoaXMgcHJvcGVydHlcblx0XHRcdFx0b0Fubm90YXRpb24gPSBvTW9kZWwuZ2V0T2JqZWN0KGAvJHtvVmFsdWVIZWxwQW5ub3RhdGlvbi5Db2xsZWN0aW9uUGF0aH0vJHtzVmFsdWVMaXN0UHJvcGVydHlOYW1lfUBgKTtcblx0XHRcdFx0cmV0dXJuIG9Bbm5vdGF0aW9uICYmIG9Bbm5vdGF0aW9uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0PyBDb21tb25VdGlscy5jb21wdXRlRGlzcGxheU1vZGUob0Fubm90YXRpb24sIHVuZGVmaW5lZClcblx0XHRcdFx0XHQ6IFwiVmFsdWVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBvTW9kZWwucmVxdWVzdFZhbHVlTGlzdEluZm8oc0NvbnRleHRQYXRoLCB0cnVlKS50aGVuKGZ1bmN0aW9uIChvVmFsdWVMaXN0SW5mbykge1xuXHRcdFx0XHRcdGNvbnN0IHF1YWxpZmVyID0gRmllbGRIZWxwZXIuZ2V0VmFsdWVMaXN0UXVsaWZlckZvclBhcmFtZXRlckRpc3BsYXlGb3JtYXQob01vZGVsLCBzQ29udGV4dFBhdGgsIG9WYWx1ZUxpc3RJbmZvKTtcblx0XHRcdFx0XHQvLyBnZXQgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgaW4gdmFsdWUgbGlzdCBjb2xsZWN0aW9uXG5cdFx0XHRcdFx0c1ZhbHVlTGlzdFByb3BlcnR5TmFtZSA9IGdldFZhbHVlTGlzdFByb3BlcnR5TmFtZShvVmFsdWVMaXN0SW5mb1txdWFsaWZlcl0pO1xuXHRcdFx0XHRcdGlmICghc1ZhbHVlTGlzdFByb3BlcnR5TmFtZSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFwiVmFsdWVcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZ2V0IHRleHQgZm9yIHRoaXMgcHJvcGVydHlcblx0XHRcdFx0XHRvQW5ub3RhdGlvbiA9IG9WYWx1ZUxpc3RJbmZvW3F1YWxpZmVyXS4kbW9kZWxcblx0XHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdFx0LmdldE9iamVjdChgLyR7b1ZhbHVlTGlzdEluZm9bcXVhbGlmZXJdW1wiQ29sbGVjdGlvblBhdGhcIl19LyR7c1ZhbHVlTGlzdFByb3BlcnR5TmFtZX1AYCk7XG5cdFx0XHRcdFx0cmV0dXJuIG9Bbm5vdGF0aW9uICYmIG9Bbm5vdGF0aW9uW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0XHQ/IENvbW1vblV0aWxzLmNvbXB1dGVEaXNwbGF5TW9kZShvQW5ub3RhdGlvbiwgdW5kZWZpbmVkKVxuXHRcdFx0XHRcdFx0OiBcIlZhbHVlXCI7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJWYWx1ZVwiO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgdmFsdWUgbGlzdCBxdWFsaWZpZXIgZm9yIGRldGVybWluaW5nIHRoZSBkaXNwbGF5IGZvcm1hdCBvZiBhbiBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbC5cblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aCBQcm9wZXJ0eSBwYXRoIG9mIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuXHQgKiBAcGFyYW0gdmFsdWVMaXN0SW5mbyBWYWx1ZSBsaXN0IGluZm9ybWF0aW9uLlxuXHQgKiBAcmV0dXJucyBWYWx1ZSBsaXN0IHF1YWxpZmllciBpbiBTdHJpbmcgZm9ybWF0LlxuXHQgKi9cblx0Z2V0VmFsdWVMaXN0UXVsaWZlckZvclBhcmFtZXRlckRpc3BsYXlGb3JtYXQ6IGZ1bmN0aW9uIChcblx0XHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRcdHByb3BlcnR5UGF0aDogc3RyaW5nLFxuXHRcdHZhbHVlTGlzdEluZm86IFJlY29yZDxzdHJpbmcsIFZhbHVlTGlzdEluZm8+XG5cdCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVIZWxwUXVhbGlmaWVycyA9IFZhbHVlTGlzdEhlbHBlci5wdXREZWZhdWx0UXVhbGlmaWVyRmlyc3QoT2JqZWN0LmtleXModmFsdWVMaXN0SW5mbykpO1xuXHRcdGxldCBxdWFsaWZlciA9IHZhbHVlSGVscFF1YWxpZmllcnNbMF07XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlckNvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7cHJvcGVydHlQYXRofWApIGFzIENvbnRleHQ7XG5cdFx0XHRjb25zdCBjb252ZXJ0ZWRQcm9wZXJ0eSA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhwYXJhbWV0ZXJDb250ZXh0KS50YXJnZXRPYmplY3QgYXMgUHJvcGVydHk7XG5cdFx0XHRjb25zdCBpc1ZhbHVlTGlzdEZvclZhbGlkYXRpb24gPSBoYXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uKGNvbnZlcnRlZFByb3BlcnR5KTtcblx0XHRcdHF1YWxpZmVyID0gaXNWYWx1ZUxpc3RGb3JWYWxpZGF0aW9uXG5cdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlZFByb3BlcnR5LmFubm90YXRpb25zPy5Db21tb24/LlZhbHVlTGlzdEZvclZhbGlkYXRpb24gYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxzdHJpbmc+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdCAgKSA/PyBcIlwiXG5cdFx0XHRcdDogcXVhbGlmZXI7XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRMb2cud2FybmluZyhgQ291bGRuJ3QgZmluZGluZyBxdWFsaWZlciBmb3IgdmFsdWUgbGlzdCBvZiBhY3Rpb24gcGFyYW1ldGVyICR7cHJvcGVydHlQYXRofWApO1xuXHRcdH1cblx0XHRyZXR1cm4gcXVhbGlmZXI7XG5cdH0sXG5cblx0Lypcblx0ICogTWV0aG9kIHRvIGdldCBkaXNwbGF5IHByb3BlcnR5IGZvciBBY3Rpb25QYXJhbWV0ZXIgZGlhbG9nIFZhbHVlSGVscC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGdldEFjdGlvblBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscFxuXHQgKiBAcGFyYW0gb0FjdGlvblBhcmFtZXRlciBBY3Rpb24gcGFyYW1ldGVyIG9iamVjdFxuXHQgKiBAcGFyYW0gc1NhcFVJTmFtZSBBY3Rpb24gc2FwdWkgbmFtZVxuXHQgKiBAcGFyYW0gc1BhcmFtTmFtZSBUaGUgcGFyYW1ldGVyIG5hbWVcblx0ICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBmaWVsZEhlbHAgdXNlZCBieSB0aGlzIGFjdGlvbiBwYXJhbWV0ZXJcblx0ICovXG5cdGdldEFjdGlvblBhcmFtZXRlckRpYWxvZ1ZhbHVlSGVscDogZnVuY3Rpb24gKFxuXHRcdG9BY3Rpb25QYXJhbWV0ZXI6IE1ldGFNb2RlbFByb3BlcnR5QW5ub3RhdGlvbnMsXG5cdFx0c1NhcFVJTmFtZTogc3RyaW5nLFxuXHRcdHNQYXJhbU5hbWU6IHN0cmluZ1xuXHQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmhhc1ZhbHVlSGVscEFubm90YXRpb24ob0FjdGlvblBhcmFtZXRlcikgPyBnZW5lcmF0ZShbc1NhcFVJTmFtZSwgc1BhcmFtTmFtZV0pIDogdW5kZWZpbmVkO1xuXHR9LFxuXHQvKipcblx0ICogTWV0aG9kIHRvIGdldCB0aGUgZGVsZWdhdGUgY29uZmlndXJhdGlvbiBmb3IgQWN0aW9uUGFyYW1ldGVyIGRpYWxvZy5cblx0ICogQHBhcmFtIGlzQm91bmQgQWN0aW9uIGlzIGJvdW5kXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlUGF0aCBUaGUgRW50aXR5VHlwZSBQYXRoXG5cdCAqIEBwYXJhbSBzYXBVSU5hbWUgVGhlIG5hbWUgb2YgdGhlIEFjdGlvblxuXHQgKiBAcGFyYW0gcGFyYW1OYW1lIFRoZSBuYW1lIG9mIHRoZSBBY3Rpb25QYXJhbWV0ZXJcblx0ICogQHJldHVybnMgVGhlIGRlbGVnYXRlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGFzIGEgc3RyaW5nXG5cdCAqL1xuXHRnZXRWYWx1ZUhlbHBEZWxlZ2F0ZTogZnVuY3Rpb24gKGlzQm91bmQ6IGJvb2xlYW4sIGVudGl0eVR5cGVQYXRoOiBzdHJpbmcsIHNhcFVJTmFtZTogc3RyaW5nLCBwYXJhbU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVsZWdhdGVDb25maWd1cmF0aW9uOiB7IG5hbWU6IHN0cmluZzsgcGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCB9ID0ge1xuXHRcdFx0bmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhcInNhcC9mZS9tYWNyb3MvdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCIpLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoXG5cdFx0XHRcdFx0VmFsdWVMaXN0SGVscGVyLmdldFByb3BlcnR5UGF0aCh7XG5cdFx0XHRcdFx0XHRVbmJvdW5kQWN0aW9uOiAhaXNCb3VuZCxcblx0XHRcdFx0XHRcdEVudGl0eVR5cGVQYXRoOiBlbnRpdHlUeXBlUGF0aCxcblx0XHRcdFx0XHRcdEFjdGlvbjogc2FwVUlOYW1lLFxuXHRcdFx0XHRcdFx0UHJvcGVydHk6IHBhcmFtTmFtZVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCksXG5cdFx0XHRcdHF1YWxpZmllcnM6IHt9LFxuXHRcdFx0XHR2YWx1ZUhlbHBRdWFsaWZpZXI6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMoXCJcIiksXG5cdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiB0cnVlXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZXR1cm4gQ29tbW9uSGVscGVyLm9iamVjdFRvU3RyaW5nKGRlbGVnYXRlQ29uZmlndXJhdGlvbik7XG5cdH0sXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBkZWxlZ2F0ZSBjb25maWd1cmF0aW9uIGZvciBOb25Db21wdXRlZFZpc2libGVLZXlGaWVsZCBkaWFsb2cuXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGggVGhlIGN1cnJlbnQgcHJvcGVydHkgcGF0aFxuXHQgKiBAcmV0dXJucyBUaGUgZGVsZWdhdGUgY29uZmlndXJhdGlvbiBvYmplY3QgYXMgYSBzdHJpbmdcblx0ICovXG5cdGdldFZhbHVlSGVscERlbGVnYXRlRm9yTm9uQ29tcHV0ZWRWaXNpYmxlS2V5RmllbGQ6IGZ1bmN0aW9uIChwcm9wZXJ0eVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZGVsZWdhdGVDb25maWd1cmF0aW9uOiB7IG5hbWU6IHN0cmluZzsgcGF5bG9hZDogVmFsdWVIZWxwUGF5bG9hZCB9ID0ge1xuXHRcdFx0bmFtZTogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhcInNhcC9mZS9tYWNyb3MvdmFsdWVoZWxwL1ZhbHVlSGVscERlbGVnYXRlXCIpLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IENvbW1vbkhlbHBlci5hZGRTaW5nbGVRdW90ZXMocHJvcGVydHlQYXRoKSxcblx0XHRcdFx0cXVhbGlmaWVyczoge30sXG5cdFx0XHRcdHZhbHVlSGVscFF1YWxpZmllcjogQ29tbW9uSGVscGVyLmFkZFNpbmdsZVF1b3RlcyhcIlwiKVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuIENvbW1vbkhlbHBlci5vYmplY3RUb1N0cmluZyhkZWxlZ2F0ZUNvbmZpZ3VyYXRpb24pO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZmV0Y2ggZW50aXR5IGZyb20gYSBwYXRoIGNvbnRhaW5pbmcgbXVsdGlwbGUgYXNzb2NpYXRpb25zLlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgd2hvc2UgcGF0aCBpcyB0byBiZSBjaGVja2VkXG5cdCAqIEBwYXJhbSBzUGF0aCBUaGUgcGF0aCBmcm9tIHdoaWNoIGVudGl0eSBoYXMgdG8gYmUgZmV0Y2hlZFxuXHQgKiBAcGFyYW0gc1NvdXJjZUVudGl0eSBUaGUgZW50aXR5IHBhdGggaW4gd2hpY2ggbmF2IGVudGl0eSBleGlzdHNcblx0ICogQHBhcmFtIGlTdGFydCBUaGUgc3RhcnQgaW5kZXggOiBiZWdpbm5pbmcgcGFydHMgb2YgdGhlIHBhdGggdG8gYmUgaWdub3JlZFxuXHQgKiBAcGFyYW0gaURpZmYgVGhlIGRpZmYgaW5kZXggOiBlbmQgcGFydHMgb2YgdGhlIHBhdGggdG8gYmUgaWdub3JlZFxuXHQgKiBAcmV0dXJucyBUaGUgcGF0aCBvZiB0aGUgZW50aXR5IHNldFxuXHQgKi9cblx0X2dldEVudGl0eVNldEZyb21NdWx0aUxldmVsOiBmdW5jdGlvbiAob0NvbnRleHQ6IENvbnRleHQsIHNQYXRoOiBzdHJpbmcsIHNTb3VyY2VFbnRpdHk6IHN0cmluZywgaVN0YXJ0OiBudW1iZXIsIGlEaWZmOiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdGxldCBhTmF2UGFydHMgPSBzUGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pO1xuXHRcdGFOYXZQYXJ0cyA9IGFOYXZQYXJ0cy5maWx0ZXIoZnVuY3Rpb24gKHNQYXJ0OiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBzUGFydCAhPT0gXCIkTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRcdH0pO1xuXHRcdGlmIChhTmF2UGFydHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IGlTdGFydDsgaSA8IGFOYXZQYXJ0cy5sZW5ndGggLSBpRGlmZjsgaSsrKSB7XG5cdFx0XHRcdHNTb3VyY2VFbnRpdHkgPSBcIi9cIiArIG9Db250ZXh0LmdldE9iamVjdChgJHtzU291cmNlRW50aXR5fS8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZy8ke2FOYXZQYXJ0c1tpXX1gKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHNTb3VyY2VFbnRpdHk7XG5cdH0sXG5cblx0Z2V0UGF0aEZvckljb25Tb3VyY2U6IGZ1bmN0aW9uIChzUHJvcGVydHlQYXRoPzogc3RyaW5nKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdGZvcm1hdFJlc3VsdChbcGF0aEluTW9kZWwoYCR7c1Byb3BlcnR5UGF0aH1Ab2RhdGEubWVkaWFDb250ZW50VHlwZWApXSwgXCIuX2Zvcm1hdHRlcnMuVmFsdWVGb3JtYXR0ZXIjZ2V0SWNvbkZvck1pbWVUeXBlXCIpXG5cdFx0KTtcblx0fSxcblx0Z2V0RmlsZW5hbWVFeHByOiBmdW5jdGlvbiAoc0ZpbGVuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNOb0ZpbGVuYW1lVGV4dDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoc0ZpbGVuYW1lKSB7XG5cdFx0XHRpZiAoc0ZpbGVuYW1lLmluZGV4T2YoXCJ7XCIpID09PSAwKSB7XG5cdFx0XHRcdC8vIGZpbGVuYW1lIGlzIHJlZmVyZW5jZWQgdmlhIHBhdGgsIGkuZS4gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lIDogcGF0aFxuXHRcdFx0XHRyZXR1cm4gXCJ7PSAkXCIgKyBzRmlsZW5hbWUgKyBcIiA/ICRcIiArIHNGaWxlbmFtZSArIFwiIDogJFwiICsgc05vRmlsZW5hbWVUZXh0ICsgXCJ9XCI7XG5cdFx0XHR9XG5cdFx0XHQvLyBzdGF0aWMgZmlsZW5hbWUsIGkuZS4gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lIDogJ3NvbWVTdGF0aWNOYW1lJ1xuXHRcdFx0cmV0dXJuIHNGaWxlbmFtZTtcblx0XHR9XG5cdFx0Ly8gbm8gQENvcmUuQ29udGVudERpc3Bvc2l0aW9uLkZpbGVuYW1lXG5cdFx0cmV0dXJuIHNOb0ZpbGVuYW1lVGV4dDtcblx0fSxcblxuXHRjYWxjdWxhdGVNQmZyb21CeXRlOiBmdW5jdGlvbiAoaUJ5dGU/OiBudW1iZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBpQnl0ZSA/IChpQnl0ZSAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoNikgOiB1bmRlZmluZWQ7XG5cdH0sXG5cdGdldERvd25sb2FkVXJsOiBmdW5jdGlvbiAocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiBwcm9wZXJ0eVBhdGggKyBcIns9ICR7aW50ZXJuYWw+L3N0aWNreVNlc3Npb25Ub2tlbn0gPyAoJz9TQVAtQ29udGV4dElkPScgKyAke2ludGVybmFsPi9zdGlja3lTZXNzaW9uVG9rZW59KSA6ICcnIH1cIjtcblx0fSxcblx0Z2V0TWFyZ2luQ2xhc3M6IGZ1bmN0aW9uIChjb21wYWN0U2VtYW50aWNLZXk6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiBjb21wYWN0U2VtYW50aWNLZXkgPT09IFwidHJ1ZVwiIHx8IGNvbXBhY3RTZW1hbnRpY0tleSA9PT0gdHJ1ZSA/IFwic2FwTVRhYmxlQ29udGVudE1hcmdpblwiIDogdW5kZWZpbmVkO1xuXHR9LFxuXHRnZXRSZXF1aXJlZDogZnVuY3Rpb24gKFxuXHRcdGltbXV0YWJsZUtleTogc3RyaW5nLFxuXHRcdHRhcmdldDogRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eSB8IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBEYXRhUG9pbnRUeXBlIHwgdW5kZWZpbmVkPiB8IG51bGwsXG5cdFx0cmVxdWlyZWRQcm9wZXJ0aWVzOiBzdHJpbmdbXVxuXHQpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0bGV0IHRhcmdldFJlcXVpcmVkRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+ID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdGlmICh0YXJnZXQgIT09IG51bGwpIHtcblx0XHRcdHRhcmdldFJlcXVpcmVkRXhwcmVzc2lvbiA9IGlzUmVxdWlyZWRFeHByZXNzaW9uKHRhcmdldD8udGFyZ2V0T2JqZWN0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKG9yKHRhcmdldFJlcXVpcmVkRXhwcmVzc2lvbiwgcmVxdWlyZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKGltbXV0YWJsZUtleSkpKTtcblx0fSxcblxuXHQvKipcblx0ICogVGhlIG1ldGhvZCBjaGVja3MgaWYgdGhlIGZpZWxkIGlzIGFscmVhZHkgcGFydCBvZiBhIGZvcm0uXG5cdCAqIEBwYXJhbSBkYXRhRmllbGRDb2xsZWN0aW9uIFRoZSBsaXN0IG9mIHRoZSBmaWVsZHMgb2YgdGhlIGZvcm1cblx0ICogQHBhcmFtIGRhdGFGaWVsZE9iamVjdFBhdGggVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGggb2YgdGhlIGZpZWxkIHdoaWNoIG5lZWRzIHRvIGJlIGNoZWNrZWQgaW4gdGhlIGZvcm1cblx0ICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWVsZCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIGZvcm0sIGBmYWxzZWAgb3RoZXJ3aXNlXG5cdCAqL1xuXHRpc0ZpZWxkUGFydE9mRm9ybTogZnVuY3Rpb24gKFxuXHRcdGRhdGFGaWVsZENvbGxlY3Rpb246IEZvcm1FbGVtZW50W10sXG5cdFx0ZGF0YUZpZWxkT2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPlxuXHQpOiBib29sZWFuIHtcblx0XHQvL2dlbmVyYXRpbmcga2V5IGZvciB0aGUgcmVjZWl2ZWQgZGF0YSBmaWVsZFxuXHRcdGNvbnN0IGNvbm5lY3RlZERhdGFGaWVsZEtleSA9IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkT2JqZWN0UGF0aC50YXJnZXRPYmplY3QhKTtcblx0XHQvLyB0cnlpbmcgdG8gZmluZCB0aGUgZ2VuZXJhdGVkIGtleSBpbiBhbHJlYWR5IGV4aXN0aW5nIGZvcm0gZWxlbWVudHNcblx0XHRjb25zdCBpc0ZpZWxkRm91bmQgPSBkYXRhRmllbGRDb2xsZWN0aW9uLmZpbmQoKGZpZWxkKSA9PiB7XG5cdFx0XHRyZXR1cm4gZmllbGQua2V5ID09PSBjb25uZWN0ZWREYXRhRmllbGRLZXk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGlzRmllbGRGb3VuZCA/IHRydWUgOiBmYWxzZTtcblx0fVxufTtcbihGaWVsZEhlbHBlci5maWVsZENvbnRyb2wgYXMgeyByZXF1aXJlc0lDb250ZXh0PzogYm9vbGVhbiB9KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbihGaWVsZEhlbHBlci5nZXRBUERpYWxvZ0Rpc3BsYXlGb3JtYXQgYXMgeyByZXF1aXJlc0lDb250ZXh0PzogYm9vbGVhbiB9KS5yZXF1aXJlc0lDb250ZXh0ID0gdHJ1ZTtcbihGaWVsZEhlbHBlci5jb21wdXRlTGFiZWxUZXh0IGFzIHsgcmVxdWlyZXNJQ29udGV4dD86IGJvb2xlYW4gfSkucmVxdWlyZXNJQ29udGV4dCA9IHRydWU7XG4oRmllbGRIZWxwZXIuZ2V0QWN0aW9uUGFyYW1ldGVyVmlzaWJpbGl0eSBhcyB7IHJlcXVpcmVzSUNvbnRleHQ/OiBib29sZWFuIH0pLnJlcXVpcmVzSUNvbnRleHQgPSB0cnVlO1xuXG5leHBvcnQgZGVmYXVsdCBGaWVsZEhlbHBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFEQSxNQUFNQSxXQUFXLEdBQUcsb0NBQW9DO0lBQ3ZEQyxJQUFJLEdBQUcsNkJBQTZCO0VBRXJDLE1BQU1DLFdBQVcsR0FBRztJQUNuQkMsNEJBQTRCLEVBQUUsU0FBQUEsQ0FBVUMsTUFBZSxFQUFFQyxRQUFxQyxFQUFzQjtNQUNuSDtNQUNBLElBQUksT0FBT0QsTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUMvQixNQUFNRSxRQUFRLEdBQUdGLE1BQTZCO1FBQzlDLElBQUlFLFFBQVEsSUFBSUEsUUFBUSxDQUFDQyxHQUFHLElBQUlELFFBQVEsQ0FBQ0MsR0FBRyxDQUFDQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1VBQzFEO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQSxNQUFNQyxTQUFTLEdBQUc7WUFBRUYsR0FBRyxFQUFFO1VBQUcsQ0FBdUI7VUFDbkRFLFNBQVMsQ0FBQ0YsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHRCxRQUFRLENBQUNDLEdBQUcsQ0FB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Q0FBQyxDQUFDLEdBQUdoVCxTQUFTO0lBQzlELENBQUM7SUFDRGlULGNBQWMsRUFBRSxTQUFBQSxDQUFVL0ssWUFBb0IsRUFBVTtNQUN2RCxPQUFPQSxZQUFZLEdBQUcsbUdBQW1HO0lBQzFILENBQUM7SUFDRGdMLGNBQWMsRUFBRSxTQUFBQSxDQUFVQyxrQkFBZ0QsRUFBc0I7TUFDL0YsT0FBT0Esa0JBQWtCLEtBQUssTUFBTSxJQUFJQSxrQkFBa0IsS0FBSyxJQUFJLEdBQUcsd0JBQXdCLEdBQUduVCxTQUFTO0lBQzNHLENBQUM7SUFDRG9ULFdBQVcsRUFBRSxTQUFBQSxDQUNaQyxZQUFvQixFQUNwQkMsTUFBaUcsRUFDakdDLGtCQUE0QixFQUNPO01BQ25DLElBQUlDLHdCQUEyRCxHQUFHeEYsUUFBUSxDQUFDLEtBQUssQ0FBQztNQUNqRixJQUFJc0YsTUFBTSxLQUFLLElBQUksRUFBRTtRQUNwQkUsd0JBQXdCLEdBQUdDLG9CQUFvQixDQUFDSCxNQUFNLEVBQUVoRCxZQUFZLENBQUM7TUFDdEU7TUFDQSxPQUFPbkMsaUJBQWlCLENBQUNFLEVBQUUsQ0FBQ21GLHdCQUF3QixFQUFFRCxrQkFBa0IsQ0FBQ2hULFFBQVEsQ0FBQzhTLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNDSyxpQkFBaUIsRUFBRSxTQUFBQSxDQUNsQkMsbUJBQWtDLEVBQ2xDQyxtQkFBZ0UsRUFDdEQ7TUFDVjtNQUNBLE1BQU1DLHFCQUFxQixHQUFHQyxTQUFTLENBQUNDLHdCQUF3QixDQUFDSCxtQkFBbUIsQ0FBQ3RELFlBQWEsQ0FBQztNQUNuRztNQUNBLE1BQU0wRCxZQUFZLEdBQUdMLG1CQUFtQixDQUFDeE0sSUFBSSxDQUFFOE0sS0FBSyxJQUFLO1FBQ3hELE9BQU9BLEtBQUssQ0FBQ0MsR0FBRyxLQUFLTCxxQkFBcUI7TUFDM0MsQ0FBQyxDQUFDO01BQ0YsT0FBT0csWUFBWSxHQUFHLElBQUksR0FBRyxLQUFLO0lBQ25DO0VBQ0QsQ0FBQztFQUNBM1UsV0FBVyxDQUFDd0IsWUFBWSxDQUFvQ3NULGdCQUFnQixHQUFHLElBQUk7RUFDbkY5VSxXQUFXLENBQUNvUCx3QkFBd0IsQ0FBb0MwRixnQkFBZ0IsR0FBRyxJQUFJO0VBQy9GOVUsV0FBVyxDQUFDaU8sZ0JBQWdCLENBQW9DNkcsZ0JBQWdCLEdBQUcsSUFBSTtFQUN2RjlVLFdBQVcsQ0FBQ0MsNEJBQTRCLENBQW9DNlUsZ0JBQWdCLEdBQUcsSUFBSTtFQUFDLE9BRXRGOVUsV0FBVztBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -25,8 +25,11 @@ import {
|
|
|
25
25
|
} from "sap/fe/base/BindingToolkit";
|
|
26
26
|
import type AppComponent from "sap/fe/core/AppComponent";
|
|
27
27
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
28
|
+
import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
|
|
28
29
|
import { getInvolvedDataModelObjects, type MetaModelPropertyAnnotations } from "sap/fe/core/converters/MetaModelConverter";
|
|
30
|
+
import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
|
|
29
31
|
import type { FormElement } from "sap/fe/core/converters/controls/Common/Form";
|
|
32
|
+
import FilterRestrictions from "sap/fe/core/converters/controls/Common/filter/FilterRestrictions";
|
|
30
33
|
import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
|
|
31
34
|
import { UI } from "sap/fe/core/helpers/BindingHelper";
|
|
32
35
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
@@ -224,7 +227,10 @@ const FieldHelper = {
|
|
|
224
227
|
const oModel = propertyContext.getModel() as ODataMetaModel,
|
|
225
228
|
sPropertyPath = propertyContext.getPath(),
|
|
226
229
|
sPropertyLocationPath = CommonHelper.getLocationForPropertyPath(oModel, sPropertyPath),
|
|
227
|
-
|
|
230
|
+
dataModel = MetaModelConverter.getInvolvedDataModelObjects(oModel.getContext(sPropertyLocationPath)),
|
|
231
|
+
oFilterRestrictions = FilterRestrictions.getFilterRestrictionsByDataModel(
|
|
232
|
+
dataModel as DataModelObjectPath<PageContextPathTarget>
|
|
233
|
+
);
|
|
228
234
|
if (
|
|
229
235
|
((sPropertyType === "Edm.DateTimeOffset" || sPropertyType === "Edm.Date" || sPropertyType === "Edm.TimeOfDay") &&
|
|
230
236
|
bSemanticDateRange &&
|