@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/controls/CommandExecution", "sap/fe/core/controls/FormElementWrapper", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/table/StandardActions", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/ActionCommand", "sap/fe/macros/CommonHelper", "sap/fe/macros/Field", "sap/fe/macros/MultiValueField", "sap/fe/macros/TSXUtils", "sap/fe/macros/draftIndicator/DraftIndicator", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/internal/helpers/ActionHelper", "sap/fe/macros/internal/helpers/TableTemplating", "sap/fe/macros/situations/SituationsIndicator", "sap/fe/macros/table/ActionsTemplating", "sap/fe/macros/table/QuickFilterSelector", "sap/fe/macros/table/SlotColumn", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/uploadTable/UploadTableTemplate", "sap/m/FlexItemData", "sap/m/HBox", "sap/m/Label", "sap/m/Menu", "sap/m/MenuItem", "sap/m/ObjectStatus", "sap/m/SegmentedButton", "sap/m/SegmentedButtonItem", "sap/m/VBox", "sap/m/library", "sap/m/plugins/CellSelector", "sap/m/plugins/ContextMenuSetting", "sap/m/plugins/CopyProvider", "sap/m/plugins/DataStateIndicator", "sap/ui/core/Lib", "sap/ui/core/library", "sap/ui/fl/variants/VariantManagement", "sap/ui/mdc/Table", "sap/ui/mdc/actiontoolbar/ActionToolbarAction", "sap/ui/mdc/enums/TableP13nMode", "sap/ui/mdc/enums/TableRowActionType", "sap/ui/mdc/p13n/PersistenceProvider", "sap/ui/mdc/table/Column", "sap/ui/mdc/table/CreationRow", "sap/ui/mdc/table/DragDropConfig", "sap/ui/mdc/table/GridTableType", "sap/ui/mdc/table/ResponsiveColumnSettings", "sap/ui/mdc/table/ResponsiveTableType", "sap/ui/mdc/table/RowActionItem", "sap/ui/mdc/table/RowSettings", "sap/ui/mdc/table/TreeTableType", "../MicroChart", "../field/FieldFormatOptions", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, CommonUtils, CommandExecution, FormElementWrapper, ManifestSettings, MetaModelConverter, DataField, StandardActions, BindingHelper, ModelHelper, StableIdHelper, TypeGuards, DataModelPathHelper, UIFormatters, ActionCommand, CommonHelper, Field, MultiValueFieldBlock, TSXUtils, DraftIndicator, FieldHelper, FieldTemplating, ActionHelper, TableTemplating, SituationsIndicator, ActionsTemplating, QuickFilterSelector, SlotColumn, TableHelper, UploadTableTemplate, FlexItemData, HBox, Label, Menu, MenuItem, ObjectStatus, SegmentedButton, SegmentedButtonItem, VBox, library, CellSelector, ContextMenuSetting, CopyProvider, DataStateIndicator, Library, coreLibrary, VariantManagement, MDCTable, ActionToolbarAction, TableP13nMode, TableRowActionType, PersistenceProvider, Column, CreationRow, DragDropConfig, GridTableType, ResponsiveColumnSettings, ResponsiveTableType, RowActionItem, RowSettings, TreeTableType, MicroChart, FieldFormatOptions, _jsx, _jsxs) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/CommonUtils", "sap/fe/core/controls/CommandExecution", "sap/fe/core/controls/FormElementWrapper", "sap/fe/core/converters/ManifestSettings", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/annotations/DataField", "sap/fe/core/converters/controls/Common/table/StandardActions", "sap/fe/core/converters/helpers/DataFieldHelper", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/ActionCommand", "sap/fe/macros/CommonHelper", "sap/fe/macros/Field", "sap/fe/macros/MultiValueField", "sap/fe/macros/TSXUtils", "sap/fe/macros/draftIndicator/DraftIndicator", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/internal/helpers/ActionHelper", "sap/fe/macros/internal/helpers/TableTemplating", "sap/fe/macros/situations/SituationsIndicator", "sap/fe/macros/table/ActionsTemplating", "sap/fe/macros/table/QuickFilterSelector", "sap/fe/macros/table/SlotColumn", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/uploadTable/UploadTableTemplate", "sap/m/FlexItemData", "sap/m/HBox", "sap/m/Label", "sap/m/Menu", "sap/m/MenuItem", "sap/m/ObjectStatus", "sap/m/SegmentedButton", "sap/m/SegmentedButtonItem", "sap/m/Text", "sap/m/VBox", "sap/m/library", "sap/m/plugins/CellSelector", "sap/m/plugins/ContextMenuSetting", "sap/m/plugins/CopyProvider", "sap/m/plugins/DataStateIndicator", "sap/ui/core/Lib", "sap/ui/core/library", "sap/ui/fl/variants/VariantManagement", "sap/ui/mdc/Table", "sap/ui/mdc/actiontoolbar/ActionToolbarAction", "sap/ui/mdc/enums/TableP13nMode", "sap/ui/mdc/enums/TableRowActionType", "sap/ui/mdc/p13n/PersistenceProvider", "sap/ui/mdc/table/Column", "sap/ui/mdc/table/CreationRow", "sap/ui/mdc/table/DragDropConfig", "sap/ui/mdc/table/GridTableType", "sap/ui/mdc/table/ResponsiveColumnSettings", "sap/ui/mdc/table/ResponsiveTableType", "sap/ui/mdc/table/RowActionItem", "sap/ui/mdc/table/RowSettings", "sap/ui/mdc/table/TreeTableType", "../MicroChart", "../field/FieldFormatOptions", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, CommonUtils, CommandExecution, FormElementWrapper, ManifestSettings, MetaModelConverter, DataField, StandardActions, DataFieldHelper, BindingHelper, ModelHelper, StableIdHelper, TypeGuards, DataModelPathHelper, UIFormatters, ActionCommand, CommonHelper, Field, MultiValueFieldBlock, TSXUtils, DraftIndicator, FieldHelper, FieldTemplating, ActionHelper, TableTemplating, SituationsIndicator, ActionsTemplating, QuickFilterSelector, SlotColumn, TableHelper, UploadTableTemplate, FlexItemData, HBox, Label, Menu, MenuItem, ObjectStatus, SegmentedButton, SegmentedButtonItem, Text, VBox, library, CellSelector, ContextMenuSetting, CopyProvider, DataStateIndicator, Library, coreLibrary, VariantManagement, MDCTable, ActionToolbarAction, TableP13nMode, TableRowActionType, PersistenceProvider, Column, CreationRow, DragDropConfig, GridTableType, ResponsiveColumnSettings, ResponsiveTableType, RowActionItem, RowSettings, TreeTableType, MicroChart, FieldFormatOptions, _jsx, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _exports = {};
|
|
@@ -26,6 +26,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
26
26
|
var generate = StableIdHelper.generate;
|
|
27
27
|
var singletonPathVisitor = BindingHelper.singletonPathVisitor;
|
|
28
28
|
var UI = BindingHelper.UI;
|
|
29
|
+
var Entity = BindingHelper.Entity;
|
|
30
|
+
var getConnectedFieldsData = DataFieldHelper.getConnectedFieldsData;
|
|
29
31
|
var StandardActionKeys = StandardActions.StandardActionKeys;
|
|
30
32
|
var isDataFieldForAnnotation = DataField.isDataFieldForAnnotation;
|
|
31
33
|
var isDataField = DataField.isDataField;
|
|
@@ -89,6 +91,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
89
91
|
function getDataStateIndicator(handlerProvider) {
|
|
90
92
|
return _jsx(DataStateIndicator, {
|
|
91
93
|
filter: handlerProvider.dataStateIndicatorFilter,
|
|
94
|
+
enabled: compileExpression(not(equal(pathInModel("enableTableDataStateIndicator", "pageInternal"), false))),
|
|
92
95
|
enableFiltering: true,
|
|
93
96
|
dataStateChange: handlerProvider.dataStateChange
|
|
94
97
|
});
|
|
@@ -622,6 +625,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
622
625
|
children: _jsx(DraftIndicator, {
|
|
623
626
|
draftIndicatorType: ObjectMarkerVisibility.IconOnly,
|
|
624
627
|
contextPath: collection.getPath(),
|
|
628
|
+
visible: or(not(Entity.IsActive), Entity.HasDraft),
|
|
625
629
|
usedInTable: true,
|
|
626
630
|
usedInAnalyticalTable: enableAnalytics
|
|
627
631
|
})
|
|
@@ -816,6 +820,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
816
820
|
* @returns The XML string representing the field.
|
|
817
821
|
*/
|
|
818
822
|
function getMacroFieldTemplate(tableId, tableDefinition, column, dataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, textAlign, ariaLabelledBy, showEmptyIndicator, className, handlerProvider) {
|
|
823
|
+
let isConnectedField = arguments.length > 16 && arguments[16] !== undefined ? arguments[16] : false;
|
|
819
824
|
const dataFieldObject = dataFieldContext.getObject();
|
|
820
825
|
let columnEditMode;
|
|
821
826
|
switch (isTableReadOnly) {
|
|
@@ -849,7 +854,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
849
854
|
ignoreNavigationAvailable: enableAnalytics ?? false,
|
|
850
855
|
isAnalytics: enableAnalytics,
|
|
851
856
|
forInlineCreationRows: creationMode?.name === "InlineCreationRows",
|
|
852
|
-
isCurrencyOrUnitAligned: true,
|
|
857
|
+
isCurrencyOrUnitAligned: isConnectedField ? false : true,
|
|
853
858
|
compactSemanticKey: isCompactType === undefined ? undefined : `${isCompactType}`,
|
|
854
859
|
dateTimeStyle: getDefaultDateTimeStyle(dataFieldContext),
|
|
855
860
|
isAnalyticalAggregatedRow: tableDefinition.control.analyticalConfiguration?.aggregationOnLeafLevel,
|
|
@@ -860,13 +865,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
860
865
|
editMode: columnEditMode,
|
|
861
866
|
contextPath: collection.getPath(),
|
|
862
867
|
metaPath: dataFieldContext.getPath(),
|
|
863
|
-
textAlign: textAlign,
|
|
868
|
+
textAlign: isConnectedField ? "Left" : textAlign,
|
|
864
869
|
wrap: tableType === "ResponsiveTable",
|
|
865
870
|
class: className,
|
|
866
871
|
liveChange: handlerProvider.fieldLiveChange,
|
|
867
|
-
ariaLabelledBy: ariaLabelledBy ?
|
|
872
|
+
ariaLabelledBy: ariaLabelledBy ? ariaLabelledBy.split(" ") : undefined,
|
|
868
873
|
navigateAfterAction: column.isNavigable,
|
|
869
874
|
showErrorObjectStatus: column.formatOptions?.showErrorObjectStatus,
|
|
875
|
+
disableStrictHandling: column.disableStrictHandling,
|
|
870
876
|
children: {
|
|
871
877
|
formatOptions: _jsx(FieldFormatOptions, {
|
|
872
878
|
...formatOptions
|
|
@@ -933,7 +939,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
933
939
|
} else if (isAnnotationOfType(dataField, "com.sap.vocabularies.UI.v1.DataFieldForAnnotation") && isAnnotationOfTerm(dataField.Target.$target, "com.sap.vocabularies.UI.v1.FieldGroup")) {
|
|
934
940
|
const fieldGroup = dataField.Target.$target;
|
|
935
941
|
const dataFieldCollectionContext = dataFieldContext.getModel().createBindingContext(dataFieldContext.getPath() + "/Target/$AnnotationPath/Data");
|
|
936
|
-
const
|
|
942
|
+
const fieldGroupCollectionLength = fieldGroup.Data.length - 1;
|
|
937
943
|
const items = fieldGroup.Data.map((fieldGroupDataField, fieldGroupDataFieldIdx) => {
|
|
938
944
|
const fieldGroupDataFieldContext = dataFieldCollectionContext.getModel().createBindingContext(dataFieldCollectionContext.getPath() + "/" + fieldGroupDataFieldIdx);
|
|
939
945
|
const fieldGroupDataFieldOP = getInvolvedDataModelObjects(fieldGroupDataFieldContext);
|
|
@@ -955,12 +961,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
955
961
|
layoutData: _jsx(FlexItemData, {
|
|
956
962
|
growFactor: "1"
|
|
957
963
|
}),
|
|
958
|
-
items: getMacroFieldTemplate(tableId, tableDefinition, column, fieldGroupDataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, undefined, isCompactType, "Left", `${TableHelper.getColumnStableId(tableId, dataFieldOP)} ${TableHelper.getFieldGroupLabelStableId(tableId, fieldGroupDataFieldOP)}`, true, TableHelper.getMarginClass(fieldGroupDataFieldContext.getObject("Target/$AnnotationPath/Visualization/$EnumMember"), fieldGroupDataFieldIdx ===
|
|
964
|
+
items: getMacroFieldTemplate(tableId, tableDefinition, column, fieldGroupDataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, undefined, isCompactType, "Left", `${TableHelper.getColumnStableId(tableId, dataFieldOP)} ${TableHelper.getFieldGroupLabelStableId(tableId, fieldGroupDataFieldOP)}`, true, TableHelper.getMarginClass(fieldGroupDataFieldContext.getObject("Target/$AnnotationPath/Visualization/$EnumMember"), fieldGroupDataFieldIdx === fieldGroupCollectionLength), handlerProvider)
|
|
959
965
|
}
|
|
960
966
|
})]
|
|
961
967
|
});
|
|
962
968
|
} else {
|
|
963
|
-
return getMacroFieldTemplate(tableId, tableDefinition, column, fieldGroupDataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, undefined, TableHelper.getColumnStableId(tableId, dataFieldOP), false, TableHelper.getMarginClass(fieldGroupDataFieldContext.getObject("Target/$AnnotationPath/Visualization/$EnumMember"), fieldGroupDataFieldIdx ===
|
|
969
|
+
return getMacroFieldTemplate(tableId, tableDefinition, column, fieldGroupDataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, undefined, TableHelper.getColumnStableId(tableId, dataFieldOP), false, TableHelper.getMarginClass(fieldGroupDataFieldContext.getObject("Target/$AnnotationPath/Visualization/$EnumMember"), fieldGroupDataFieldIdx === fieldGroupCollectionLength), handlerProvider);
|
|
964
970
|
}
|
|
965
971
|
});
|
|
966
972
|
const draftIndicator = getDraftIndicator(collection, column);
|
|
@@ -972,11 +978,85 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
972
978
|
items.push(situationIndicator);
|
|
973
979
|
}
|
|
974
980
|
template = _jsx(VBox, {
|
|
975
|
-
visible: TableHelper.getVBoxVisibility(dataFieldCollectionContext.getObject(), column.
|
|
981
|
+
visible: TableHelper.getVBoxVisibility(dataFieldCollectionContext.getObject(), column.collectionFieldsHiddenExpression, dataFieldContext.getObject()),
|
|
976
982
|
children: {
|
|
977
983
|
items: items
|
|
978
984
|
}
|
|
979
985
|
});
|
|
986
|
+
} else if (isAnnotationOfType(dataField, "com.sap.vocabularies.UI.v1.DataFieldForAnnotation") && isAnnotationOfTerm(dataField.Target.$target, "com.sap.vocabularies.UI.v1.ConnectedFields")) {
|
|
987
|
+
const connectedFields = dataField.Target.$target;
|
|
988
|
+
const connectedFieldsContext = dataFieldContext.getModel().createBindingContext(dataFieldContext.getPath() + "/Target/$AnnotationPath/Data");
|
|
989
|
+
const fieldsDelimiter = CommonHelper.getDelimiter(connectedFields.Template);
|
|
990
|
+
const connectedFieldsData = getConnectedFieldsData(connectedFields);
|
|
991
|
+
const items = connectedFieldsData.map((connectedFieldsElement, connectedFieldsElementIdx) => {
|
|
992
|
+
const connectedFieldsElementContext = dataFieldContext.getModel().createBindingContext(`${connectedFieldsContext.getPath()}/${connectedFieldsElement?.Value?.path}`);
|
|
993
|
+
const fieldTemplate = getMacroFieldTemplate(tableId, tableDefinition, column, connectedFieldsElementContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, undefined, isCompactType, "Left", `${TableHelper.getColumnStableId(tableId, dataFieldOP)}`, false, undefined, handlerProvider, true);
|
|
994
|
+
if (connectedFieldsElementIdx < connectedFieldsData.length - 1) {
|
|
995
|
+
if (tableType === "ResponsiveTable") {
|
|
996
|
+
return [fieldTemplate,
|
|
997
|
+
/*Use ObjectStatus in ResponsiveTable: its line box matches cell height,
|
|
998
|
+
so the delimiter is vertically centered in both display & edit modes.*/
|
|
999
|
+
_jsx(ObjectStatus
|
|
1000
|
+
// NBSP on both sides to keep spacing
|
|
1001
|
+
, {
|
|
1002
|
+
text: `\u00A0${fieldsDelimiter}\u00A0`,
|
|
1003
|
+
state: "None",
|
|
1004
|
+
children: {
|
|
1005
|
+
// Prevent the delimiter from being squeezed to zero width on tight layouts.
|
|
1006
|
+
layoutData: _jsx(FlexItemData, {
|
|
1007
|
+
shrinkFactor: 0
|
|
1008
|
+
})
|
|
1009
|
+
}
|
|
1010
|
+
})];
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
// Grid/Tree tables: Text works fine here (keeps baseline behavior in display, centers in edit).
|
|
1014
|
+
return [fieldTemplate, _jsx(Text
|
|
1015
|
+
// NBSP on both sides to keep spacing
|
|
1016
|
+
, {
|
|
1017
|
+
text: `\u00A0${fieldsDelimiter}\u00A0`
|
|
1018
|
+
//single line
|
|
1019
|
+
,
|
|
1020
|
+
wrapping: "false"
|
|
1021
|
+
// actually render the NBSPs
|
|
1022
|
+
,
|
|
1023
|
+
renderWhitespace: "true",
|
|
1024
|
+
children: {
|
|
1025
|
+
// Avoid squeeze-to-dot effect when space is tight.
|
|
1026
|
+
layoutData: _jsx(FlexItemData, {
|
|
1027
|
+
shrinkFactor: 0
|
|
1028
|
+
})
|
|
1029
|
+
}
|
|
1030
|
+
})];
|
|
1031
|
+
} else {
|
|
1032
|
+
return [fieldTemplate];
|
|
1033
|
+
}
|
|
1034
|
+
});
|
|
1035
|
+
|
|
1036
|
+
/* Inner container alignment:
|
|
1037
|
+
- ResponsiveTable: always center (better visual consistency)
|
|
1038
|
+
- Grid/Tree: baseline in display, center in edit (mix of Text/Input heights)*/
|
|
1039
|
+
const innerHBox = _jsx(HBox, {
|
|
1040
|
+
wrap: "NoWrap",
|
|
1041
|
+
alignItems: tableType === "ResponsiveTable" ? "Center" : compileExpression(ifElse(UI.IsEditable, constant("Center"), constant("Baseline"))),
|
|
1042
|
+
children: {
|
|
1043
|
+
items: items
|
|
1044
|
+
}
|
|
1045
|
+
});
|
|
1046
|
+
|
|
1047
|
+
// Outer wrapper: render a real box, take the row height, and center vertically.
|
|
1048
|
+
// This guarantees vertical centering of the whole connected-fields block within the cell.
|
|
1049
|
+
template = _jsx(HBox, {
|
|
1050
|
+
wrap: "NoWrap",
|
|
1051
|
+
renderType: "Div",
|
|
1052
|
+
fitContainer: true,
|
|
1053
|
+
alignItems: "Center",
|
|
1054
|
+
visible: column.collectionFieldsHiddenExpression,
|
|
1055
|
+
justifyContent: column.horizontalAlign,
|
|
1056
|
+
children: {
|
|
1057
|
+
items: [innerHBox]
|
|
1058
|
+
}
|
|
1059
|
+
});
|
|
980
1060
|
} else {
|
|
981
1061
|
template = getMacroFieldTemplate(tableId, tableDefinition, column, dataFieldContext, collection, enableAnalytics, tableType, isTableReadOnly, creationMode, fieldMode, isCompactType, undefined, undefined, false, undefined, handlerProvider);
|
|
982
1062
|
creationTemplate = getCreationTemplate(tableId, column, tableType, creationMode, isTableReadOnly, collection, dataFieldContext, fieldMode, enableAnalytics, handlerProvider);
|
|
@@ -1008,6 +1088,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1008
1088
|
const enableAutoColumnWidth = tableProperties.enableAutoColumnWidth ?? tableProperties.tableDefinition.control.enableAutoColumnWidth;
|
|
1009
1089
|
const widthIncludingColumnHeader = tableProperties.tableDefinition.control.widthIncludingColumnHeader;
|
|
1010
1090
|
const tableType = tableProperties.tableDefinition.control.type;
|
|
1091
|
+
const isConnectedField = dataFieldObject.Target?.$AnnotationPath?.includes("com.sap.vocabularies.UI.v1.ConnectedFields");
|
|
1011
1092
|
return _jsx(Column, {
|
|
1012
1093
|
id: TableHelper.getColumnStableId(tableId, dataFieldObjectModelPath),
|
|
1013
1094
|
width: !CommonUtils.isSmallDevice() || column.width ? TableHelper.getColumnWidth({
|
|
@@ -1035,7 +1116,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1035
1116
|
hAlign: column.horizontalAlign || FieldHelper.getColumnAlignment(dataFieldObject, {
|
|
1036
1117
|
collection: collection
|
|
1037
1118
|
}),
|
|
1038
|
-
headerVisible: TableHelper.setHeaderLabelVisibility(dataFieldObject, dataFieldContext.getObject("Target/$AnnotationPath/Data")),
|
|
1119
|
+
headerVisible: isConnectedField ? true : TableHelper.setHeaderLabelVisibility(dataFieldObject, dataFieldContext.getObject("Target/$AnnotationPath/Data")),
|
|
1039
1120
|
tooltip: column.tooltip,
|
|
1040
1121
|
required: tableProperties.readOnly ? undefined : column.required,
|
|
1041
1122
|
children: {
|
|
@@ -1138,11 +1219,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1138
1219
|
}
|
|
1139
1220
|
rowActionType ??= tableProperties.tableDefinition.annotation.row?.actionType === "Navigation" ? TableRowActionType.Navigation : undefined;
|
|
1140
1221
|
const showCreate = tableProperties.tableDefinition.actions.find(a => a.key === StandardActionKeys.Create)?.visible || true;
|
|
1141
|
-
|
|
1142
|
-
/**
|
|
1143
|
-
* Specifies whether the button is hidden when no data has been entered yet in the row (true/false). The default setting is `false`.
|
|
1144
|
-
*/
|
|
1145
|
-
const updatablePropertyPath = tableProperties.tableDefinition.annotation.updatablePropertyPath;
|
|
1146
1222
|
let currentPersonalization;
|
|
1147
1223
|
switch (tableProperties.personalization) {
|
|
1148
1224
|
case "false":
|
|
@@ -1224,13 +1300,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1224
1300
|
}, {
|
|
1225
1301
|
key: "actionsMultiselectDisabled",
|
|
1226
1302
|
value: multiSelectDisabledActions.length > 0 ? multiSelectDisabledActions.join(",") : undefined
|
|
1227
|
-
}, {
|
|
1228
|
-
key: "updatablePropertyPath",
|
|
1229
|
-
value: updatablePropertyPath || ""
|
|
1230
1303
|
}, {
|
|
1231
1304
|
key: "exportRequestSize",
|
|
1232
1305
|
value: tableProperties.tableDefinition.control.exportRequestSize
|
|
1233
1306
|
}];
|
|
1307
|
+
let rowPressHandler;
|
|
1308
|
+
if (tableType === "ResponsiveTable") {
|
|
1309
|
+
rowPressHandler = parameters.handlerProvider.rowPress ? parameters.handlerProvider.noop : undefined;
|
|
1310
|
+
}
|
|
1234
1311
|
return _jsx(MDCTable, {
|
|
1235
1312
|
"core:require": getCoreRequire(tableProperties.tableDefinition),
|
|
1236
1313
|
"fl:flexibility": tableProperties["fl:flexibility"],
|
|
@@ -1242,6 +1319,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1242
1319
|
busyIndicatorDelay: 0,
|
|
1243
1320
|
enableExport: tableProperties.tableDefinition.control.enableExport,
|
|
1244
1321
|
delegate: JSON.parse(delegate),
|
|
1322
|
+
rowPress: rowPressHandler,
|
|
1245
1323
|
beforeOpenContextMenu: parameters.handlerProvider.beforeOpenContextMenu,
|
|
1246
1324
|
autoBindOnInit: tableProperties.useBasicSearch || !tableProperties.filterBar,
|
|
1247
1325
|
selectionMode: tableProperties.tableDefinition.annotation.selectionMode || "None",
|
|
@@ -1281,4 +1359,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/core/Common
|
|
|
1281
1359
|
_exports.getMDCTableTemplate = getMDCTableTemplate;
|
|
1282
1360
|
return _exports;
|
|
1283
1361
|
}, false);
|
|
1284
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJfY29sbGVjdGlvbiIsInRhYmxlVHlwZSIsInNlbGVjdGlvbkxpbWl0IiwiY29sbGVjdGlvbiIsImdldE9iamVjdCIsIl9qc3giLCJHcmlkVGFibGVUeXBlIiwicm93Q291bnRNb2RlIiwiY29udHJvbCIsInJvd0NvdW50IiwiZml4ZWRDb2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50Iiwic2Nyb2xsVGhyZXNob2xkIiwiZW5hYmxlQ29sdW1uRnJlZXplIiwiVHJlZVRhYmxlVHlwZSIsIlJlc3BvbnNpdmVUYWJsZVR5cGUiLCJzaG93RGV0YWlsc0J1dHRvbiIsImRldGFpbHNCdXR0b25TZXR0aW5nIiwiUHJpb3JpdHkiLCJMb3ciLCJNZWRpdW0iLCJOb25lIiwiZ3Jvd2luZ01vZGUiLCIka2luZCIsInVuZGVmaW5lZCIsInBvcGluTGF5b3V0IiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaGFuZGxlclByb3ZpZGVyIiwiRGF0YVN0YXRlSW5kaWNhdG9yIiwiZmlsdGVyIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiZW5hYmxlRmlsdGVyaW5nIiwiZGF0YVN0YXRlQ2hhbmdlIiwiZ2V0RHJhZ0FuZERyb3BFbmFibGVkIiwiY29udGV4dE9iamVjdFBhdGgiLCJpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24iLCJpc1BhdGhVcGRhdGFibGUiLCJpZ25vcmVUYXJnZXRDb2xsZWN0aW9uIiwiYXV0aG9yaXplVW5yZXNvbHZhYmxlIiwicGF0aFZpc2l0b3IiLCJwYXRoIiwibmF2aWdhdGlvblBhdGhzIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJjb252ZXJ0ZWRUeXBlcyIsImlzUGF0aFVwZGF0YWJsZU9uVGFyZ2V0Iiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIkNvbW1vbiIsIkRyYWZ0Um9vdCIsImFuZCIsIl90eXBlIiwiaWZFbHNlIiwiaXNDb25zdGFudCIsImNvbnN0YW50IiwiaXNIaWVyYXJjaHlQYXJlbnROb2RlVXBkYXRhYmxlIiwiVUkiLCJJc0VkaXRhYmxlIiwiZ2V0RGVwZW5kZW50cyIsInRhYmxlUHJvcGVydGllcyIsInBhcmFtZXRlcnMiLCJ2YXJpYW50TWFuYWdlbWVudCIsImlkIiwiY29udGVudElkIiwidHlwZSIsImRlcGVuZGVudHMiLCJjdXRBY3Rpb24iLCJhY3Rpb25zIiwiZmluZCIsImEiLCJrZXkiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDdXQiLCJpc1RlbXBsYXRlZCIsInB1c2giLCJDb21tYW5kRXhlY3V0aW9uIiwiZXhlY3V0ZSIsImdldEN1dEhhbmRsZXIiLCJjb21tYW5kIiwiZW5hYmxlZCIsImNvcHlBY3Rpb24iLCJDb3B5IiwiZ2V0Q29weUhhbmRsZXIiLCJwYXN0ZUFjdGlvbiIsIlBhc3RlIiwidmlzaWJsZSIsImdldFBhc3RlSGFuZGxlciIsImNyZWF0ZUFjdGlvbiIsIkNyZWF0ZSIsImRlbGV0ZUFjdGlvbiIsIkRlbGV0ZSIsImFubm90YXRpb24iLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJub2RlVHlwZSIsImVuYWJsZVVwbG9hZFBsdWdpbiIsImdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsIm1vdmVVcEFjdGlvbiIsIk1vdmVVcCIsIm1vdmVEb3duQWN0aW9uIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImFjdGlvbk5hbWUiLCJjb21tYW5kQWN0aW9ucyIsImFjdGlvbiIsImFjdGlvbkNvbW1hbmQiLCJnZXRBY3Rpb25Db21tYW5kIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsImdlbmVyYXRlIiwiZm9yIiwiQ29udGV4dE1lbnVTZXR0aW5nIiwic2NvcGUiLCJnZXRVcGxvYWRQbHVnaW4iLCJfZXhwb3J0cyIsImdldEFjdGlvbnMiLCJ0YWJsZSIsImNvbGxlY3Rpb25Db250ZXh0IiwiY29sbGVjdGlvbkVudGl0eSIsImRpc3BsYXlTZWdtZW50ZWRCdXR0b24iLCJhbHBCdXR0b25JdGVtcyIsIkNvbW1vbkhlbHBlciIsImlzRGVza3RvcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJ0b29sdGlwIiwiaWNvbiIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJsYXlvdXRJbmZvcm1hdGlvbiIsImNoaWxkcmVuIiwiU2VnbWVudGVkQnV0dG9uIiwic2VsZWN0Iiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3RlZEtleSIsIml0ZW1zIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJsZW5ndGgiLCJnZXRSb3dTZXR0aW5ncyIsInJvd0FjdGlvblR5cGUiLCJyb3dBY3Rpb25JdGVtIiwiUm93QWN0aW9uSXRlbSIsInByZXNzIiwicm93UHJlc3MiLCJyb3ciLCJSb3dTZXR0aW5ncyIsIm5hdmlnYXRlZCIsInJvd05hdmlnYXRlZCIsImhpZ2hsaWdodCIsInJvd0hpZ2hsaWdodGluZyIsImhpZ2hsaWdodFRleHQiLCJyb3dBY3Rpb25zIiwiVGFibGVSb3dBY3Rpb25UeXBlIiwiTmF2aWdhdGlvbiIsImdldENvbnRleHRNZW51IiwibmF2aWdhdGlvbkluRWRpdE1vZGUiLCJtZW51SXRlbXMiLCJnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUiLCJnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZSIsImdldE9wZW5Jbk5ld1RhYlRlbXBsYXRlIiwiTWVudSIsIml0ZW1TZWxlY3RlZCIsImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwiZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51IiwidGFibGVJZCIsIk1lbnVJdGVtIiwic3RhcnRzU2VjdGlvbiIsInRleHQiLCJjb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsIm5vdCIsInBhdGhJbk1vZGVsIiwiY29udGV4dE1lbnVPcGVuSW5OZXdUYWIiLCJncmVhdGVyVGhhbiIsImVuYWJsZWRGb3JDb250ZXh0TWVudSIsImdldFZhcmlhbnRNYW5hZ2VtZW50IiwiaGVhZGVyTGV2ZWwiLCJWYXJpYW50TWFuYWdlbWVudCIsInNob3dTZXRBc0RlZmF1bHQiLCJ2YXJpYW50U2VsZWN0ZWQiLCJzYXZlIiwidmFyaWFudFNhdmVkIiwiZ2V0UXVpY2tGaWx0ZXIiLCJxdWlja0ZpbHRlcnMiLCJmaWx0ZXJzIiwiUXVpY2tGaWx0ZXJTZWxlY3RvciIsInBhdGhzIiwibWFwIiwiYW5ub3RhdGlvblBhdGgiLCJzaG93Q291bnRzIiwiZ2V0Q29weVByb3ZpZGVyIiwidmlzaWJsZUV4cHJlc3Npb24iLCJkaXNhYmxlQ29weVRvQ2xpcGJvYXJkIiwiQ29weVByb3ZpZGVyIiwiZ2V0Q2VsbFNlbGVjdG9yIiwiaW5jbHVkZXMiLCJDZWxsU2VsZWN0b3IiLCJvciIsInJhbmdlTGltaXQiLCJnZXRDcmVhdGlvblJvdyIsImNyZWF0aW9uTW9kZSIsIm5hbWUiLCJDcmVhdGlvbk1vZGUiLCJDcmVhdGlvblJvdyIsImNyZWF0aW9uUm93QWN0aW9uIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGFzIiwidmFsdWUiLCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhIiwiY3VzdG9tVmFsaWRhdGlvbkZ1bmN0aW9uIiwiYXBwbHkiLCJhcHBseUVuYWJsZWQiLCJnZXREcmFnQW5kRHJvcENvbmZpZyIsIkRyYWdEcm9wQ29uZmlnIiwiY29tcGlsZUV4cHJlc3Npb24iLCJkcm9wUG9zaXRpb24iLCJhbGxvd0Ryb3BCZXR3ZWVuTm9kZXMiLCJkcmFnZ2FibGUiLCJkcm9wcGFibGUiLCJkcmFnU3RhcnQiLCJkcmFnU3RhcnREb2N1bWVudCIsImRyYWdFbnRlciIsImRyYWdFbnRlckRvY3VtZW50IiwiZHJvcCIsImRyb3BEb2N1bWVudCIsImZvckNvbnRleHRNZW51IiwiZGF0YUZpZWxkIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsImFjdGlvbkNvbnRleHRQYXRoIiwiZ2V0QWN0aW9uQ29udGV4dCIsIm1ldGFNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYWN0aW9uQ29udGV4dCIsImRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJpc0JvdW5kIiwiQWN0aW9uVGFyZ2V0IiwiaXNPcGVyYXRpb25BdmFpbGFibGUiLCJDb3JlIiwiT3BlcmF0aW9uQXZhaWxhYmxlIiwidmFsdWVPZiIsImRpc3BsYXlDb21tYW5kQWN0aW9uIiwiVGFibGVIZWxwZXIiLCJpc0FjdGlvblNob3duSW5Db250ZXh0TWVudSIsImFjdGlvblBhcmFtZXRlcnMiLCJvbkV4ZWN1dGVBY3Rpb24iLCJnZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIiLCJvbkV4ZWN1dGVJQk4iLCJnZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIiLCJvbkV4ZWN1dGVNYW5pZmVzdCIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiaXNJQk5FbmFibGVkIiwiaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkIiwiUmVxdWlyZXNDb250ZXh0IiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsImlzQWN0aW9uRW5hYmxlZCIsImlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZCIsIkFjdGlvbiIsImVuYWJsZU9uU2VsZWN0IiwidGFyZ2V0RW50aXR5VHlwZSIsImlzRW5hYmxlZCIsImdldENvbW1hbmRFeGVjdXRpb25Gb3JBY3Rpb24iLCJnZXRDb3JlUmVxdWlyZSIsImN1c3RvbU1vZHVsZXMiLCJhZGRpdGlvbmFsUmVxdWlyZWRNb2R1bGVzIiwibW9kdWxlIiwiaW5kZXgiLCJqb2luIiwiZ2V0Q29tcHV0ZWRDb2x1bW4iLCJjb2x1bW4iLCJlbmFibGVBbmFseXRpY3MiLCJpc0RyYWZ0SW5kaWNhdG9yIiwiQ29sdW1uIiwiaGVhZGVyVmlzaWJsZSIsInByb3BlcnR5S2V5IiwiaGVhZGVyIiwibGFiZWwiLCJ3aWR0aCIsIkRyYWZ0SW5kaWNhdG9yIiwiZHJhZnRJbmRpY2F0b3JUeXBlIiwiT2JqZWN0TWFya2VyVmlzaWJpbGl0eSIsIkljb25Pbmx5IiwiY29udGV4dFBhdGgiLCJnZXRQYXRoIiwidXNlZEluVGFibGUiLCJ1c2VkSW5BbmFseXRpY2FsVGFibGUiLCJpc1NpdHVhdGlvbnNJbmRpY2F0b3IiLCJTaXR1YXRpb25zSW5kaWNhdG9yIiwiZ2V0U2xvdENvbHVtbiIsImlzUmVhZE9ubHkiLCJ0ZW1wbGF0ZSIsInN0YXJ0c1dpdGgiLCJTbG90Q29sdW1uIiwidGVtcGxhdGVJZCIsImhBbGlnbiIsImhvcml6b250YWxBbGlnbiIsInJlcXVpcmVkIiwiZXh0ZW5kZWRTZXR0aW5ncyIsIlJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyIsImltcG9ydGFuY2UiLCJnZXREcmFmdEluZGljYXRvciIsImZvcm1hdE9wdGlvbnMiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJGb3JtRWxlbWVudFdyYXBwZXIiLCJJY29uQW5kVGV4dCIsImdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmciLCJmaWVsZEdyb3VwTmFtZSIsImFyaWFMYWJlbGxlZEJ5IiwiZ2V0U2l0dWF0aW9uSW5kaWNhdG9yIiwiT2JqZWN0U3RhdHVzIiwic2hvd0Vycm9yT2JqZWN0U3RhdHVzIiwiY2xhc3MiLCJzdGF0ZSIsImdldERlZmF1bHREYXRlVGltZVN0eWxlIiwiZGF0YUZpZWxkQ29udGV4dCIsInRhcmdldE9iamVjdCIsImlzRGF0YUZpZWxkIiwiVmFsdWUiLCIkdGFyZ2V0IiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiaGFzRGF0YVBvaW50VGFyZ2V0IiwiVGFyZ2V0IiwiZ2V0Q3JlYXRpb25UZW1wbGF0ZSIsImlzVGFibGVSZWFkT25seSIsImZpZWxkTW9kZSIsImNvbHVtbkVkaXRNb2RlIiwiZGF0YUZpZWxkT2JqZWN0IiwicmVhY3RpdmVBcmVhTW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4TGVuZ3RoIiwidGV4dE1heENoYXJhY3RlcnNEaXNwbGF5IiwidGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSIsInRleHRBbGlnbk1vZGUiLCJzZW1hbnRpY0tleVN0eWxlIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJzaG93SWNvblVybCIsIklubGluZSIsIkljb25VcmwiLCJpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJkYXRlVGltZVN0eWxlIiwiRmllbGQiLCJ2aElkUHJlZml4IiwiZWRpdE1vZGUiLCJtZXRhUGF0aCIsIndyYXAiLCJjaGFuZ2UiLCJmaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJGaWVsZEZvcm1hdE9wdGlvbnMiLCJnZXRNYWNyb0ZpZWxkVGVtcGxhdGUiLCJpc0NvbXBhY3RUeXBlIiwidGV4dEFsaWduIiwic2hvd0VtcHR5SW5kaWNhdG9yIiwiY2xhc3NOYW1lIiwidHlwZUNvbmZpZyIsImlzQW5hbHl0aWNzIiwiZm9ySW5saW5lQ3JlYXRpb25Sb3dzIiwiY29tcGFjdFNlbWFudGljS2V5IiwiaXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdyIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImxpdmVDaGFuZ2UiLCJmaWVsZExpdmVDaGFuZ2UiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiaXNOYXZpZ2FibGUiLCJnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUiLCJkYXRhRmllbGRPUCIsImNyZWF0aW9uVGVtcGxhdGUiLCJyZWFkT25seSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzQW5ub3RhdGlvbk9mVGVybSIsInNob3dPbmx5Q2hhcnQiLCJzZXR0aW5ncyIsInNob3dNaWNyb0NoYXJ0TGFiZWwiLCJtaWNyb0NoYXJ0U2l6ZSIsIm1pY3JvQ2hhcnRDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCJnZXROYXZpZ2F0aW9uQ29udGV4dCIsIk1pY3JvQ2hhcnQiLCJzaXplIiwiaGlkZU9uTm9EYXRhIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImlzVHJ1dGh5IiwiSXNJbmFjdGl2ZSIsImVxdWFsIiwiTXVsdGlWYWx1ZUZpZWxkQmxvY2siLCJ1c2VQYXJlbnRCaW5kaW5nQ2FjaGUiLCJkaXNhYmxlT3duUmVxdWVzdE9uTVZGIiwiZmllbGRHcm91cCIsImRhdGFGaWVsZENvbGxlY3Rpb25Db250ZXh0IiwiZmllbGRHcm91cENvbGVjdGlvbkxlbmd0aCIsIkRhdGEiLCJmaWVsZEdyb3VwRGF0YUZpZWxkIiwiZmllbGRHcm91cERhdGFGaWVsZElkeCIsImZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0IiwiZmllbGRHcm91cERhdGFGaWVsZE9QIiwiZmllbGRHcm91cExhYmVsIiwiRmllbGRIZWxwZXIiLCJjb21wdXRlTGFiZWxUZXh0IiwiY29udGV4dCIsInNob3dEYXRhRmllbGRzTGFiZWwiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsIl9qc3hzIiwiSEJveCIsImdldFZpc2libGVFeHByZXNzaW9uIiwiYWxpZ25JdGVtcyIsImJ1aWxkRXhwcmVzc2lvbkZvckFsaWduSXRlbXMiLCJMYWJlbCIsImdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkIiwiZ2V0VGV4dCIsIlZCb3giLCJsYXlvdXREYXRhIiwiRmxleEl0ZW1EYXRhIiwiZ3Jvd0ZhY3RvciIsImdldENvbHVtblN0YWJsZUlkIiwiZ2V0TWFyZ2luQ2xhc3MiLCJkcmFmdEluZGljYXRvciIsInNpdHVhdGlvbkluZGljYXRvciIsImdldFZCb3hWaXNpYmlsaXR5IiwiRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zIiwiZ2V0Q29sdW1uVGVtcGxhdGUiLCJnZXREYXRhRmllbGREZWZhdWx0IiwiZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoIiwidGVtcGxhdGVzIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCJDb21tb25VdGlscyIsImlzU21hbGxEZXZpY2UiLCJnZXRDb2x1bW5XaWR0aCIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1pbldpZHRoIiwiZ2V0Q29sdW1uQWxpZ25tZW50Iiwic2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5IiwiY3JlYXRlQ3VzdG9tRGF0YSIsImdldENvbHVtbnMiLCJjb2x1bW5zIiwiYXZhaWxhYmlsaXR5IiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsImdldERlc2lnbnRpbWUiLCJnZXRNRENQMTNuTW9kZSIsInN0cmluZ01vZGUiLCJUYWJsZVAxM25Nb2RlIiwiQWdncmVnYXRlIiwiU29ydCIsIkZpbHRlciIsIkdyb3VwIiwiZ2V0TURDVGFibGVUZW1wbGF0ZSIsIm5hdmlnYXRpb25JbmZvIiwicm91dGVQYXRoIiwidGFyZ2V0SW5mb3JtYXRpb24iLCJhcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIm9wdGlvbnMiLCJvcGVuSW5FZGl0TW9kZSIsImZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJNb2RlbEhlbHBlciIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZGVsZWdhdGUiLCJnZXREZWxlZ2F0ZSIsImlzQWxwIiwiZW50aXR5TmFtZSIsImN1cnJlbnRIZWFkZXIiLCJoZWFkZXJCaW5kaW5nRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckhlYWRlclZpc2libGUiLCJ0YWJUaXRsZSIsIm1vZGVsQ29udGV4dENoYW5nZSIsInRhYmxlQ29udGV4dENoYW5nZSIsImxpbmVJdGVtIiwiZ2V0VWlMaW5lSXRlbU9iamVjdCIsIm5hdmlnYXRpb25QYXRoIiwiaXNTaW5nbGV0b24iLCJkcmFmdCIsImRlc2lnbnRpbWUiLCJvdmVycmlkZVJvd1ByZXNzIiwiYWN0aW9uVHlwZSIsInNob3dDcmVhdGUiLCJ1cGRhdGFibGVQcm9wZXJ0eVBhdGgiLCJjdXJyZW50UGVyc29uYWxpemF0aW9uIiwicGVyc29uYWxpemF0aW9uIiwicDEzbk1vZGUiLCJtb2RlIiwic3BsaXQiLCJ0cmltIiwiZXhjbHVkZUdyb3VwRnJvbVAxM24iLCJtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsIkFjdGlvbkhlbHBlciIsImdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zIiwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudCIsImNyZWF0ZUF0RW5kIiwiaGlkZGVuRmlsdGVycyIsImdldE5hdmlnYXRpb25BdmFpbGFibGVNYXAiLCJleHBvcnRSZXF1ZXN0U2l6ZSIsIk1EQ1RhYmxlIiwic29ydENvbmRpdGlvbnMiLCJncm91cENvbmRpdGlvbnMiLCJhZ2dyZWdhdGVDb25kaXRpb25zIiwiYnVzeUluZGljYXRvckRlbGF5IiwiZW5hYmxlRXhwb3J0IiwiSlNPTiIsInBhcnNlIiwiYmVmb3JlT3BlbkNvbnRleHRNZW51IiwiYXV0b0JpbmRPbkluaXQiLCJ1c2VCYXNpY1NlYXJjaCIsImZpbHRlckJhciIsInNlbGVjdGlvbk1vZGUiLCJzZWxlY3Rpb25DaGFuZ2UiLCJzaG93Um93Q291bnQiLCJoZWFkZXJTdHlsZSIsInRocmVzaG9sZCIsInBhc3RlIiwiYmVmb3JlRXhwb3J0IiwidXNlQ29uZGVuc2VkVGFibGVMYXlvdXQiLCJtdWx0aVNlbGVjdE1vZGUiLCJzaG93UGFzdGVCdXR0b24iLCJlbmFibGVQYXN0ZSIsImRhdGFTdGF0ZUluZGljYXRvciIsInJvd1NldHRpbmdzIiwiY29udGV4dE1lbnUiLCJkcmFnRHJvcENvbmZpZyIsImNyZWF0aW9uUm93IiwidmFyaWFudCIsInF1aWNrRmlsdGVyIiwiY29weVByb3ZpZGVyIiwiY2VsbFNlbGVjdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJNZGNUYWJsZVRlbXBsYXRlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUge1xuXHRDaGFydCxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFQb2ludCxcblx0RmllbGRHcm91cCxcblx0TGluZUl0ZW0sXG5cdFByZXNlbnRhdGlvblZhcmlhbnQsXG5cdFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnRcbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHtcblx0VUlBbm5vdGF0aW9uVGVybXMsXG5cdFVJQW5ub3RhdGlvblR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdHR5cGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgeyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Z3JlYXRlclRoYW4sXG5cdGlmRWxzZSxcblx0aXNDb25zdGFudCxcblx0aXNUcnV0aHksXG5cdG5vdCxcblx0b3IsXG5cdHBhdGhJbk1vZGVsXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YsIFN0cmljdFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgeyBDcmVhdGlvbk1vZGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgeyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGhhc0RhdGFQb2ludFRhcmdldCwgaXNEYXRhRmllbGQsIGlzRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlVHlwZSwgVGFibGVWaXN1YWxpemF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Q29tcHV0ZWRUYWJsZUNvbHVtbixcblx0Q3VzdG9tQmFzZWRUYWJsZUNvbHVtblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvQ29sdW1uc1wiO1xuaW1wb3J0IHsgU3RhbmRhcmRBY3Rpb25LZXlzLCB0eXBlIFN0YW5kYXJkQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuaW1wb3J0IHsgVUksIHNpbmdsZXRvblBhdGhWaXNpdG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1N0YWJsZUlkSGVscGVyXCI7XG5pbXBvcnQgeyBpc0Fubm90YXRpb25PZlRlcm0sIGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNTaW5nbGV0b24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgaXNQYXRoVXBkYXRhYmxlLCB0eXBlIERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IERhdGVUaW1lU3R5bGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGlzTXVsdGlWYWx1ZUZpZWxkIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBnZXRDb21tYW5kRXhlY3V0aW9uRm9yQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvQWN0aW9uQ29tbWFuZFwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9GaWVsZFwiO1xuaW1wb3J0IE11bHRpVmFsdWVGaWVsZEJsb2NrIGZyb20gXCJzYXAvZmUvbWFjcm9zL011bHRpVmFsdWVGaWVsZFwiO1xuaW1wb3J0IHsgY3JlYXRlQ3VzdG9tRGF0YSwgY3JlYXRlQ3VzdG9tRGF0YXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UU1hVdGlsc1wiO1xuaW1wb3J0IERyYWZ0SW5kaWNhdG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL2RyYWZ0SW5kaWNhdG9yL0RyYWZ0SW5kaWNhdG9yXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCB7IGdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmcsIGdldFZpc2libGVFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ludGVybmFsL2hlbHBlcnMvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgeyBidWlsZEV4cHJlc3Npb25Gb3JIZWFkZXJWaXNpYmxlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9UYWJsZVRlbXBsYXRpbmdcIjtcbmltcG9ydCBTaXR1YXRpb25zSW5kaWNhdG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL3NpdHVhdGlvbnMvU2l0dWF0aW9uc0luZGljYXRvclwiO1xuaW1wb3J0IHsgZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUsIGdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZSB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL0FjdGlvbnNUZW1wbGF0aW5nXCI7XG5pbXBvcnQgUXVpY2tGaWx0ZXJTZWxlY3RvciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9RdWlja0ZpbHRlclNlbGVjdG9yXCI7XG5pbXBvcnQgU2xvdENvbHVtbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9TbG90Q29sdW1uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IHR5cGUgVGFibGVDcmVhdGlvbk9wdGlvbnMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVDcmVhdGlvbk9wdGlvbnNcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0VXBsb2FkUGx1Z2luIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvdXBsb2FkVGFibGUvVXBsb2FkVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IEZsZXhJdGVtRGF0YSBmcm9tIFwic2FwL20vRmxleEl0ZW1EYXRhXCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IE1lbnUgZnJvbSBcInNhcC9tL01lbnVcIjtcbmltcG9ydCBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCBPYmplY3RTdGF0dXMgZnJvbSBcInNhcC9tL09iamVjdFN0YXR1c1wiO1xuaW1wb3J0IFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uSXRlbSBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uSXRlbVwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IE9iamVjdE1hcmtlclZpc2liaWxpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IENlbGxTZWxlY3RvciBmcm9tIFwic2FwL20vcGx1Z2lucy9DZWxsU2VsZWN0b3JcIjtcbmltcG9ydCBDb250ZXh0TWVudVNldHRpbmcgZnJvbSBcInNhcC9tL3BsdWdpbnMvQ29udGV4dE1lbnVTZXR0aW5nXCI7XG5pbXBvcnQgQ29weVByb3ZpZGVyIGZyb20gXCJzYXAvbS9wbHVnaW5zL0NvcHlQcm92aWRlclwiO1xuaW1wb3J0IERhdGFTdGF0ZUluZGljYXRvciBmcm9tIFwic2FwL20vcGx1Z2lucy9EYXRhU3RhdGVJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgVGl0bGVMZXZlbCB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBQcmlvcml0eSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCBUYWJsZVAxM25Nb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL1RhYmxlUDEzbk1vZGVcIjtcbmltcG9ydCBUYWJsZVJvd0FjdGlvblR5cGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvVGFibGVSb3dBY3Rpb25UeXBlXCI7XG5pbXBvcnQgUGVyc2lzdGVuY2VQcm92aWRlciBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1BlcnNpc3RlbmNlUHJvdmlkZXJcIjtcbmltcG9ydCBDb2x1bW4gZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ29sdW1uXCI7XG5pbXBvcnQgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ3JlYXRpb25Sb3dcIjtcbmltcG9ydCBEcmFnRHJvcENvbmZpZyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9EcmFnRHJvcENvbmZpZ1wiO1xuaW1wb3J0IEdyaWRUYWJsZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvR3JpZFRhYmxlVHlwZVwiO1xuaW1wb3J0IFJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9SZXNwb25zaXZlQ29sdW1uU2V0dGluZ3NcIjtcbmltcG9ydCBSZXNwb25zaXZlVGFibGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jlc3BvbnNpdmVUYWJsZVR5cGVcIjtcbmltcG9ydCBSb3dBY3Rpb25JdGVtIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jvd0FjdGlvbkl0ZW1cIjtcbmltcG9ydCBSb3dTZXR0aW5ncyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Sb3dTZXR0aW5nc1wiO1xuaW1wb3J0IFRyZWVUYWJsZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvVHJlZVRhYmxlVHlwZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBNaWNyb0NoYXJ0IGZyb20gXCIuLi9NaWNyb0NoYXJ0XCI7XG5pbXBvcnQgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCB0eXBlIFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG5leHBvcnQgdHlwZSBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzID0ge1xuXHRtZXRhUGF0aDogQ29udGV4dDtcblx0Y29udmVydGVkTWV0YWRhdGE6IENvbnZlcnRlZE1ldGFkYXRhO1xuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXI7XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRhYmxlIHR5cGUgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBfY29sbGVjdGlvblxuICogQHBhcmFtIHRhYmxlVHlwZVxuICogQHBhcmFtIHNlbGVjdGlvbkxpbWl0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgdHlwZVxuICovXG5mdW5jdGlvbiBnZXRUYWJsZVR5cGUoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRfY29sbGVjdGlvbjogQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHNlbGVjdGlvbkxpbWl0OiBudW1iZXJcbik6IFJlc3BvbnNpdmVUYWJsZVR5cGUgfCBHcmlkVGFibGVUeXBlIHwgVHJlZVRhYmxlVHlwZSB7XG5cdGNvbnN0IGNvbGxlY3Rpb24gPSBfY29sbGVjdGlvbi5nZXRPYmplY3QoKTtcblx0c3dpdGNoICh0YWJsZVR5cGUpIHtcblx0XHRjYXNlIFwiR3JpZFRhYmxlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8R3JpZFRhYmxlVHlwZVxuXHRcdFx0XHRcdHJvd0NvdW50TW9kZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnRNb2RlfVxuXHRcdFx0XHRcdHJvd0NvdW50PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudH1cblx0XHRcdFx0XHRzZWxlY3Rpb25MaW1pdD17c2VsZWN0aW9uTGltaXR9XG5cdFx0XHRcdFx0Zml4ZWRDb2x1bW5Db3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZnJvemVuQ29sdW1uQ291bnR9XG5cdFx0XHRcdFx0c2Nyb2xsVGhyZXNob2xkPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5zY3JvbGxUaHJlc2hvbGR9XG5cdFx0XHRcdFx0ZW5hYmxlQ29sdW1uRnJlZXplPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVDb2x1bW5GcmVlemV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIlRyZWVUYWJsZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFRyZWVUYWJsZVR5cGVcblx0XHRcdFx0XHRyb3dDb3VudE1vZGU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50TW9kZX1cblx0XHRcdFx0XHRyb3dDb3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnR9XG5cdFx0XHRcdFx0Zml4ZWRDb2x1bW5Db3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZnJvemVuQ29sdW1uQ291bnR9XG5cdFx0XHRcdFx0c2Nyb2xsVGhyZXNob2xkPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5zY3JvbGxUaHJlc2hvbGR9XG5cdFx0XHRcdFx0ZW5hYmxlQ29sdW1uRnJlZXplPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVDb2x1bW5GcmVlemV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxSZXNwb25zaXZlVGFibGVUeXBlXG5cdFx0XHRcdFx0c2hvd0RldGFpbHNCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0ZGV0YWlsc0J1dHRvblNldHRpbmc9e1tQcmlvcml0eS5Mb3csIFByaW9yaXR5Lk1lZGl1bSwgUHJpb3JpdHkuTm9uZV19XG5cdFx0XHRcdFx0Z3Jvd2luZ01vZGU9e2NvbGxlY3Rpb24uJGtpbmQgPT09IFwiRW50aXR5U2V0XCIgPyBcIlNjcm9sbFwiIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdHBvcGluTGF5b3V0PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5wb3BpbkxheW91dH1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIERhdGFTYXRlSW5kaWNhdG9yIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgZGF0YXN0YXRlIGluZGljYXRvclxuICovXG5mdW5jdGlvbiBnZXREYXRhU3RhdGVJbmRpY2F0b3IoaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogRGF0YVN0YXRlSW5kaWNhdG9yIHtcblx0cmV0dXJuIChcblx0XHQ8RGF0YVN0YXRlSW5kaWNhdG9yXG5cdFx0XHRmaWx0ZXI9e2hhbmRsZXJQcm92aWRlci5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJ9XG5cdFx0XHRlbmFibGVGaWx0ZXJpbmc9e3RydWV9XG5cdFx0XHRkYXRhU3RhdGVDaGFuZ2U9e2hhbmRsZXJQcm92aWRlci5kYXRhU3RhdGVDaGFuZ2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRyYWcgYW5kIGRyb3AgZW5hYmxlbWVudC5cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aFxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXREcmFnQW5kRHJvcEVuYWJsZWQoXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uID0gaXNQYXRoVXBkYXRhYmxlKGNvbnRleHRPYmplY3RQYXRoLCB7XG5cdFx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbjogdHJ1ZSxcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQgPSBpc1BhdGhVcGRhdGFibGUoY29udGV4dE9iamVjdFBhdGgsIHtcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblxuXHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdC8vIExpc3RSZXBvcnQgY2FzZTogd2UgYWxsb3cgZHJhZyBhbmQgZHJvcCBvbiBkcmFmdC1lbmFibGVkIGVudGl0aWVzXG5cdFx0aWYgKChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpLmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBhbmQoXG5cdFx0XHRcdGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0XHRcdD8gaWZFbHNlKGlzQ29uc3RhbnQoaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQpLCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHRcdFx0OiBpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24sXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSFcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE9iamVjdFBhZ2UgY2FzZTogd2UgYWxsb3cgZHJhZyBhbmQgZHJvcCBpbiBlZGl0IG1vZGVcblx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0aXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiXG5cdFx0XHRcdD8gaWZFbHNlKGlzQ29uc3RhbnQoaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQpLCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHRcdDogaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLFxuXHRcdFx0VUkuSXNFZGl0YWJsZSxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSFcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBlbmRlbnRzKFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHR2YXJpYW50TWFuYWdlbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0XG4pOiBVSTVFbGVtZW50W10ge1xuXHRjb25zdCBpZCA9IHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQ7XG5cdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb247XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlcjtcblxuXHRjb25zdCBkZXBlbmRlbnRzOiBVSTVFbGVtZW50W10gPSBbXTtcblx0Y29uc3QgY3V0QWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoY3V0QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3V0XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IGNvcHlBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNvcHkpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29weUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDb3B5XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuUGFzdGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAocGFzdGVBY3Rpb24/LnZpc2libGUgIT09IFwiZmFsc2VcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0UGFzdGVIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlXCJcblx0XHRcdFx0ZW5hYmxlZD17cGFzdGVBY3Rpb24/LmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgY3JlYXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBkZWxldGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkRlbGV0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cblx0aWYgKFxuXHRcdHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCAmJlxuXHRcdGNyZWF0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmXG5cdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUgPT09IHVuZGVmaW5lZCAmJlxuXHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbiA9PT0gZmFsc2Vcblx0KSB7XG5cdFx0Ly8gVGhlIHNob3J0Y3V0IGlzIG5vdCBlbmFibGVkIGluIGNhc2Ugb2YgYSBjcmVhdGUgbWVudSAoaS5lLiB3aGVuIG5vZGVUeXBlIGlzIGRlZmluZWQpXG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSwgZmFsc2UpfVxuXHRcdFx0XHR2aXNpYmxlPXtjcmVhdGVBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2NyZWF0ZUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkNyZWF0ZVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0aWYgKGRlbGV0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdHZpc2libGU9e2RlbGV0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17ZGVsZXRlQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRjb21tYW5kPVwiRGVsZXRlRW50cnlcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Ly8gTW92ZSB1cCBhbmQgZG93biBhY3Rpb25zXG5cdGNvbnN0IG1vdmVVcEFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgbW92ZURvd25BY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVEb3duKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKFxuXHRcdG1vdmVVcEFjdGlvbiAmJlxuXHRcdG1vdmVEb3duQWN0aW9uICYmXG5cdFx0bW92ZVVwQWN0aW9uLnZpc2libGUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdG1vdmVEb3duQWN0aW9uLnZpc2libGUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHQpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwXCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZVVwQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRNb3ZlVXBEb3duSGFuZGxlcihmYWxzZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudERvd25cIlxuXHRcdFx0XHRlbmFibGVkPXttb3ZlRG93bkFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMpIHtcblx0XHRjb25zdCBhY3Rpb24gPSB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnNbYWN0aW9uTmFtZV07XG5cdFx0Y29uc3QgYWN0aW9uQ29tbWFuZCA9IGdldEFjdGlvbkNvbW1hbmQoXG5cdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aFxuXHRcdCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblxuXHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiTm9uZVwiKSB7XG5cdFx0Ly8gUGVyc2lzdGVuY2UgcHJvdmlkZXIgb2ZmZXJzIHBlcnNpc3RpbmcgcGVyc29uYWxpemF0aW9uIGNoYW5nZXMgd2l0aG91dCB2YXJpYW50IG1hbmFnZW1lbnRcblx0XHRkZXBlbmRlbnRzLnB1c2goPFBlcnNpc3RlbmNlUHJvdmlkZXIgaWQ9e2dlbmVyYXRlKFtpZCwgXCJQZXJzaXN0ZW5jZVByb3ZpZGVyXCJdKX0gZm9yPXtpZH0gLz4pO1xuXHR9XG5cblx0ZGVwZW5kZW50cy5wdXNoKDxDb250ZXh0TWVudVNldHRpbmcgc2NvcGU9XCJTZWxlY3Rpb25cIiAvPik7XG5cblx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbikge1xuXHRcdGRlcGVuZGVudHMucHVzaChnZXRVcGxvYWRQbHVnaW4odGFibGVEZWZpbml0aW9uLCBpZCwgaGFuZGxlclByb3ZpZGVyKSk7XG5cdH1cblxuXHRyZXR1cm4gZGVwZW5kZW50cztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0YWJsZSBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0XG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eVxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRBY3Rpb25zKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IENvbnRyb2xbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFjdGlvbnM6IENvbnRyb2xbXSA9IFtdO1xuXHRpZiAodGFibGUuZGlzcGxheVNlZ21lbnRlZEJ1dHRvbikge1xuXHRcdGNvbnN0IGFscEJ1dHRvbkl0ZW1zOiBTZWdtZW50ZWRCdXR0b25JdGVtW10gPSBbXTtcblx0XHRpZiAoQ29tbW9uSGVscGVyLmlzRGVza3RvcCgpKSB7XG5cdFx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSFlCUklEX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdFx0a2V5PVwiSHlicmlkXCJcblx0XHRcdFx0XHRpY29uPVwic2FwLWljb246Ly9jaGFydC10YWJsZS12aWV3XCJcblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGFscEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0NIQVJUX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdGtleT1cIkNoYXJ0XCJcblx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vYmFyLWNoYXJ0XCJcblx0XHRcdC8+XG5cdFx0KTtcblx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0PFNlZ21lbnRlZEJ1dHRvbkl0ZW1cblx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIlxuXHRcdFx0XHRrZXk9XCJUYWJsZVwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3RhYmxlLXZpZXdcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXG5cdFx0YWN0aW9ucy5wdXNoKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0bGF5b3V0SW5mb3JtYXRpb249eyd7IGFnZ3JlZ2F0aW9uTmFtZTogXCJlbmRcIiwgYWxpZ25tZW50OiBcIkVuZFwiIH0nfVxuXHRcdFx0XHR2aXNpYmxlPXtcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSA9PT0gJ1RhYmxlJyB9XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiAoXG5cdFx0XHRcdFx0XHQ8U2VnbWVudGVkQnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pfVxuXHRcdFx0XHRcdFx0XHRzZWxlY3Q9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnNlZ21lbnRlZEJ1dHRvblByZXNzfVxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZEtleT1cIntwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogYWxwQnV0dG9uSXRlbXNcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvU2VnbWVudGVkQnV0dG9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cblx0YWN0aW9ucy5wdXNoKC4uLmdldFRhYmxlQWN0aW9uc1RlbXBsYXRlKHRhYmxlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkVudGl0eSkpO1xuXG5cdHJldHVybiBhY3Rpb25zLmxlbmd0aCA+IDAgPyBhY3Rpb25zIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93U2V0dGluZ3MoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRyb3dBY3Rpb25UeXBlOiBUYWJsZVJvd0FjdGlvblR5cGUgfCB1bmRlZmluZWQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFJvd1NldHRpbmdzIHtcblx0Y29uc3Qgcm93QWN0aW9uSXRlbSA9IChcblx0XHQ8Um93QWN0aW9uSXRlbSB0eXBlPXtcIk5hdmlnYXRpb25cIn0gcHJlc3M9e2hhbmRsZXJQcm92aWRlci5yb3dQcmVzc30gdmlzaWJsZT17dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py52aXNpYmxlfSAvPlxuXHQpO1xuXG5cdHJldHVybiAoXG5cdFx0PFJvd1NldHRpbmdzXG5cdFx0XHRuYXZpZ2F0ZWQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93TmF2aWdhdGVkfVxuXHRcdFx0aGlnaGxpZ2h0PXt0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5yb3c/LnJvd0hpZ2hsaWdodGluZ31cblx0XHRcdGhpZ2hsaWdodFRleHQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93SGlnaGxpZ2h0aW5nfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdHJvd0FjdGlvbnM6IHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uID8gcm93QWN0aW9uSXRlbSA6IHVuZGVmaW5lZFxuXHRcdFx0fX1cblx0XHQ8L1Jvd1NldHRpbmdzPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHlcbiAqIEBwYXJhbSByb3dBY3Rpb25UeXBlXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25JbkVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCBtZW51XG4gKi9cbmZ1bmN0aW9uIGdldENvbnRleHRNZW51KFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHksXG5cdHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0bmF2aWdhdGlvbkluRWRpdE1vZGU6IGJvb2xlYW5cbik6IE1lbnUgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZW51SXRlbXMgPSBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUodGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uLCBjb2xsZWN0aW9uRW50aXR5KTtcblx0aWYgKHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uICYmICFuYXZpZ2F0aW9uSW5FZGl0TW9kZSkge1xuXHRcdG1lbnVJdGVtcy5wdXNoKGdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlKHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLCB0YWJsZVByb3BlcnRpZXMuY29udGVudElkKSk7XG5cdFx0bWVudUl0ZW1zLnB1c2goZ2V0T3BlbkluTmV3VGFiVGVtcGxhdGUocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpKTtcblx0fVxuXHRpZiAobWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnUgaXRlbVNlbGVjdGVkPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZH0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHRcdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnU+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcGFyYW0gdGFibGVJZFxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIsIHRhYmxlSWQ6IHN0cmluZyk6IE1lbnVJdGVtIHtcblx0Ly8gVGhlIHZpc2libGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgYXQgcnVudGltZSB3aGVuIHRoZSBjb2xsYWJvcmF0aW9uIG1hbmFnZXIgaXMgYXZhaWxhYmxlIGFuZCBhbGwgb3RoZXIgY29uZGl0aW9ucyBhcmUgbWV0XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7QVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSSd9XCJcblx0XHRcdHN0YXJ0c1NlY3Rpb249e3RydWV9XG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ29udGV4dE1lbnVcIiwgXCJDb2xsYWJvcmF0aW9uTWFuYWdlclwiXSl9XG5cdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX0NPTlRFWFRfTUVOVV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJ9XCJcblx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJ9XG5cdFx0XHRlbmFibGVkPVwiez0gJHtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID4gMH1cIlxuXHRcdFx0dmlzaWJsZT17ZmFsc2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtLlxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRPcGVuSW5OZXdUYWJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBNZW51SXRlbSB7XG5cdC8vIFRoZSAnT3BlbiBpbiBOZXcgVGFiJyBhY3Rpb24gc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGZvciBzdGlja3kgc2Vzc2lvbnMgaW4gZWRpdCBtb2RlXG5cdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHQvLyBUaGUgc2Vjb25kIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0Y29uc3QgdmlzaWJsZSA9IGFuZChcblx0XHRub3QoYW5kKHBhdGhJbk1vZGVsKFwiL3Nlc3Npb25PblwiLCBcImludGVybmFsXCIpLCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0bm90KHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIikpXG5cdCk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7QVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSSd9XCJcblx0XHRcdHN0YXJ0c1NlY3Rpb249e3RydWV9XG5cdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX0NPTlRFWFRfTUVOVV9PUEVOX0lOX05FV19UQUJ9XCJcblx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuY29udGV4dE1lbnVPcGVuSW5OZXdUYWJ9XG5cdFx0XHRlbmFibGVkPXtncmVhdGVyVGhhbihwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L251bWJlck9mTmF2aWdhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMCl9XG5cdFx0XHR2aXNpYmxlPXt2aXNpYmxlfVxuXHRcdC8+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSBNZW51IGRlcGVuZGVudHMuXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gIHRoZSBNZW51IGRlcGVuZGVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbGxlY3Rpb246IENvbnRleHRcbik6IFVJNUVsZW1lbnRbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRlcGVuZGVudHM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjcmVhdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjcmVhdGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3JlYXRlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdHZpc2libGU9e2NyZWF0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17Y3JlYXRlQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBjdXRBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjdXRBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIodHJ1ZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDdXQ6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgY29weUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ29weSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjb3B5QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkNvcHk6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IHBhc3RlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChwYXN0ZUFjdGlvbj8udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e3Bhc3RlQWN0aW9uPy5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChkZWxldGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0dmlzaWJsZT17ZGVsZXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtkZWxldGVBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkRlbGV0ZUVudHJ5OjpDb250ZXh0TWVudVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvLyBNb3ZlIHVwIGFuZCBkb3duIGFjdGlvbnNcblx0Y29uc3QgbW92ZVVwQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXApIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlRG93bkFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24pIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0bW92ZVVwQWN0aW9uICYmXG5cdFx0bW92ZURvd25BY3Rpb24gJiZcblx0XHRtb3ZlVXBBY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0bW92ZURvd25BY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdCkge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKHRydWUsIHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVVcEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKGZhbHNlLCB0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnREb3duOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVEb3duQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zW2FjdGlvbk5hbWVdO1xuXHRcdGNvbnN0IGFjdGlvbkNvbW1hbmQgPSBnZXRBY3Rpb25Db21tYW5kKGFjdGlvbk5hbWUsIGFjdGlvbiwgdHJ1ZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlcGVuZGVudHMubGVuZ3RoID4gMCA/IGRlcGVuZGVudHMgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBWYXJpYW50TWFuYWdlbWVudCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHZhcmlhbnRNYW5hZ2VtZW50XG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSBoZWFkZXJMZXZlbFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIFZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0VmFyaWFudE1hbmFnZW1lbnQoXG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBzdHJpbmcsXG5cdGlkOiBzdHJpbmcsXG5cdGhlYWRlckxldmVsOiBUaXRsZUxldmVsLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkIHtcblx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFyaWFudE1hbmFnZW1lbnRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtpZCwgXCJWTVwiXSl9XG5cdFx0XHRcdHNob3dTZXRBc0RlZmF1bHQ9e3RydWV9XG5cdFx0XHRcdHNlbGVjdD17aGFuZGxlclByb3ZpZGVyLnZhcmlhbnRTZWxlY3RlZH1cblx0XHRcdFx0aGVhZGVyTGV2ZWw9e2hlYWRlckxldmVsfVxuXHRcdFx0XHRzYXZlPXtoYW5kbGVyUHJvdmlkZXIudmFyaWFudFNhdmVkfVxuXHRcdFx0XHRmb3I9e1tpZF19XG5cdFx0XHQ+PC9WYXJpYW50TWFuYWdlbWVudD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBRdWlja1ZhcmlhbnRTZWxlY3Rpb24gY29udHJvbCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgdGFibGUgcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIFF1aWNrVmFyaWFudFNlbGVjdGlvbiBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldFF1aWNrRmlsdGVyKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBRdWlja0ZpbHRlclNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcXVpY2tGaWx0ZXJzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycztcblx0aWYgKHF1aWNrRmlsdGVycykge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UXVpY2tGaWx0ZXJTZWxlY3RvclxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlUHJvcGVydGllcy5jb250ZW50SWQsIFwiUXVpY2tGaWx0ZXJDb250YWluZXJcIl0pfVxuXHRcdFx0XHRwYXRocz17cXVpY2tGaWx0ZXJzLnBhdGhzLm1hcCgocGF0aCkgPT4gcGF0aC5hbm5vdGF0aW9uUGF0aCl9XG5cdFx0XHRcdHNob3dDb3VudHM9e3F1aWNrRmlsdGVycy5zaG93Q291bnRzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIENvcHlQcm92aWRlciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENvcHlQcm92aWRlclxuICovXG5mdW5jdGlvbiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENvcHlQcm92aWRlciB7XG5cdGNvbnN0IGNvbnRleHRPYmplY3RQYXRoID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoO1xuXG5cdGxldCB2aXNpYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpZiAodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQpIHtcblx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEZvciBhIFRyZWVUYWJsZSwgdGhlIGNvcHkgYnV0dG9uIHNoYWxsIGJlIHZpc2libGUgb25seSB3aGVuIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWRcblx0XHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gTGlzdFJlcG9ydDogZW5hYmxlIGNvcHkgaWYgdGhlIGVudGl0eSBpcyBub3QgZHJhZnQtZW5hYmxlZFxuXHRcdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCgoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCA9PT0gdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT2JqZWN0UGFnZTogZW5hYmxlIGNvcHkgaW4gcmVhZC1vbmx5XG5cdFx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdHJldHVybiA8Q29weVByb3ZpZGVyIHZpc2libGU9e3Zpc2libGVFeHByZXNzaW9ufSAvPjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIENlbGxTZWxlY3RvciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENlbGxTZWxlY3RvclxuICovXG5mdW5jdGlvbiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENlbGxTZWxlY3RvciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRpZiAoXG5cdFx0IXRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5kaXNhYmxlQ29weVRvQ2xpcGJvYXJkICYmXG5cdFx0dGFibGVUeXBlICYmXG5cdFx0W1wiUmVzcG9uc2l2ZVRhYmxlXCIsIFwiR3JpZFRhYmxlXCIsIFwiVHJlZVRhYmxlXCJdLmluY2x1ZGVzKHRhYmxlVHlwZSlcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDZWxsU2VsZWN0b3Jcblx0XHRcdFx0ZW5hYmxlZD17b3IoXG5cdFx0XHRcdFx0dGFibGVUeXBlICE9PSBcIlRyZWVUYWJsZVwiLFxuXHRcdFx0XHRcdG5vdChnZXREcmFnQW5kRHJvcEVuYWJsZWQodGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uKSlcblx0XHRcdFx0KX1cblx0XHRcdFx0cmFuZ2VMaW1pdD17MjAwfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBDcmVhdGlvblJvdyBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIENyZWF0aW9uUm93XG4gKi9cbmZ1bmN0aW9uIGdldENyZWF0aW9uUm93KHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IENyZWF0aW9uUm93IHwgdW5kZWZpbmVkIHtcblx0aWYgKCh0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIGFzIHN0cmluZykgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdykge1xuXHRcdGNvbnN0IGNyZWF0aW9uUm93QWN0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRpb25Sb3cpIGFzXG5cdFx0XHR8IFN0YW5kYXJkQWN0aW9uXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRpZiAoY3JlYXRpb25Sb3dBY3Rpb24/LmlzVGVtcGxhdGVkKSB7XG5cdFx0XHRjb25zdCBjdXN0b21EYXRhID0gY3JlYXRlQ3VzdG9tRGF0YXMoW1xuXHRcdFx0XHR7IGtleTogXCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSB9LFxuXHRcdFx0XHR7IGtleTogXCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25cIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gfVxuXHRcdFx0XSk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxDcmVhdGlvblJvd1xuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCwgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93XSl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Y3JlYXRpb25Sb3dBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0YXBwbHk9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UsIHRydWUpfVxuXHRcdFx0XHRcdGFwcGx5RW5hYmxlZD17Y3JlYXRpb25Sb3dBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY3VzdG9tRGF0YVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ3JlYXRpb25Sb3c+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgZHJhZyBhbmQgZHJvcCBjb25maWcgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXNcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuICovXG5mdW5jdGlvbiBnZXREcmFnQW5kRHJvcENvbmZpZyhcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBEcmFnRHJvcENvbmZpZyB8IHVuZGVmaW5lZCB7XG5cdGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RHJhZ0Ryb3BDb25maWdcblx0XHRcdFx0ZW5hYmxlZD17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RHJhZ0FuZERyb3BFbmFibGVkKHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCwgdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbikpfVxuXHRcdFx0XHRkcm9wUG9zaXRpb249e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hbGxvd0Ryb3BCZXR3ZWVuTm9kZXMgPT09IHRydWUgPyBcIk9uT3JCZXR3ZWVuXCIgOiBcIk9uXCJ9XG5cdFx0XHRcdGRyYWdnYWJsZT17dHJ1ZX1cblx0XHRcdFx0ZHJvcHBhYmxlPXt0cnVlfVxuXHRcdFx0XHRkcmFnU3RhcnQ9e2hhbmRsZXJQcm92aWRlci5kcmFnU3RhcnREb2N1bWVudH1cblx0XHRcdFx0ZHJhZ0VudGVyPXtoYW5kbGVyUHJvdmlkZXIuZHJhZ0VudGVyRG9jdW1lbnR9XG5cdFx0XHRcdGRyb3A9e2hhbmRsZXJQcm92aWRlci5kcm9wRG9jdW1lbnR9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYWN0aW9uQ29tbWFuZCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGFjdGlvbkNvbW1hbmRcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uQ29tbWFuZChcblx0YWN0aW9uTmFtZTogc3RyaW5nLFxuXHRhY3Rpb246IEN1c3RvbUFjdGlvbixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxMaW5lSXRlbSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50PlxuKTogQ29tbWFuZEV4ZWN1dGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQocGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISlcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGFjdGlvbkNvbnRleHRQYXRoID8gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dCA/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBpc09wZXJhdGlvbkF2YWlsYWJsZSA9XG5cdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdGNvbnN0IGRpc3BsYXlDb21tYW5kQWN0aW9uID0gYWN0aW9uLnR5cGUgPT09IFwiRm9yQWN0aW9uXCIgPyBpc0JvdW5kICE9PSB0cnVlIHx8IGlzT3BlcmF0aW9uQXZhaWxhYmxlIDogdHJ1ZTtcblx0Y29uc3QgZW5hYmxlZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5lbmFibGVkIDogYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudTtcblx0aWYgKGRpc3BsYXlDb21tYW5kQWN0aW9uICYmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCkpKSB7XG5cdFx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblxuXHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRvbkV4ZWN1dGVBY3Rpb246IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihcblx0XHRcdFx0ZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQpLFxuXHRcdFx0b25FeGVjdXRlSUJOOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIoYWN0aW9uLCBmYWxzZSksXG5cdFx0XHRvbkV4ZWN1dGVNYW5pZmVzdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uLCBmb3JDb250ZXh0TWVudSksXG5cdFx0XHRpc0lCTkVuYWJsZWQ6XG5cdFx0XHRcdGVuYWJsZWQgPz9cblx0XHRcdFx0VGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbjogY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uOiB0YWJsZURlZmluaXRpb24gfSxcblx0XHRcdFx0XHRkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHQhIShkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5SZXF1aXJlc0NvbnRleHQsXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk5hdmlnYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdFx0KSxcblx0XHRcdGlzQWN0aW9uRW5hYmxlZDpcblx0XHRcdFx0ZW5hYmxlZCA/P1xuXHRcdFx0XHRUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdChkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckFjdGlvbikuQWN0aW9uLFxuXHRcdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0UGF0aCxcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpLFxuXHRcdFx0aXNFbmFibGVkOiBlbmFibGVkXG5cdFx0fTtcblx0XHRyZXR1cm4gZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbihjb21tYW5kLCB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMhW2FjdGlvbk5hbWVdLCBhY3Rpb25QYXJhbWV0ZXJzKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgcmVxdWlyZWQgbW9kdWxlcy5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlcXVpcmVkIG1vZHVsZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Q29yZVJlcXVpcmUodGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXN0b21Nb2R1bGVzID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyA/PyBbXTtcblxuXHRyZXR1cm4gYHtUYWJsZVJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZScsIEFQSTogJ3NhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUEknJHtjdXN0b21Nb2R1bGVzXG5cdFx0Lm1hcCgobW9kdWxlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IGAsIGN1c3RvbU1vZHVsZSR7aW5kZXggKyAxfTogJyR7bW9kdWxlfSdgKVxuXHRcdC5qb2luKFwiXCIpfX1gO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29tcHV0ZWQgY29sdW1uLlxuICogQ3VycmVudGx5LCB0aGlzIHJlcHJlc2VudHMgb25seSB0aGUgRHJhZnRJbmRpY2F0b3IgYW5kIHRoZSBTaXR1YXRpb25zSW5kaWNhdG9yLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb21wdXRlZCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dCB1c2VkIGZvciBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEByZXR1cm5zIFRoZSBjb21wdXRlZCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlZENvbHVtbihcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZFxuKTogQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNvbHVtbi5pc0RyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJkcmFmdFN0YXR1c1wiXSl9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHRcdGhlYWRlcj17Y29sdW1uLmxhYmVsfVxuXHRcdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdFx0d2lkdGg9XCIzZW1cIlxuXHRcdFx0PlxuXHRcdFx0XHQ8RHJhZnRJbmRpY2F0b3Jcblx0XHRcdFx0XHRkcmFmdEluZGljYXRvclR5cGU9e09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHl9XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdHVzZWRJblRhYmxlPXt0cnVlfVxuXHRcdFx0XHRcdHVzZWRJbkFuYWx5dGljYWxUYWJsZT17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Db2x1bW4+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChjb2x1bW4uaXNTaXR1YXRpb25zSW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJzaXR1YXRpb25zSW5kaWNhdG9yXCJdKX1cblx0XHRcdFx0cHJvcGVydHlLZXk9e2NvbHVtbi5uYW1lfVxuXHRcdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbH1cblx0XHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHR3aWR0aD1cIjRlbVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxTaXR1YXRpb25zSW5kaWNhdG9yIGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX0gLz5cblx0XHRcdDwvQ29sdW1uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgc2xvdCBjb2x1bW4uXG4gKiBUaGlzIGNvbHVtbiB3aWxsIGVpdGhlciByZXVzZSBhIHRlbXBsYXRlIGNvbnRyb2wgdGhhdCBpcyBkZWZpbmVkIGF0IHJ1bnRpbWUgKHRlbXBsYXRlSWQgY2FzZSksIG9yIGRlZmluZSBhIHNsb3Qgd2hlcmUgdGhlIFhNTCBjb250ZW50IGlzIGNvcGllZC5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgc2xvdCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGlzUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcmV0dXJucyBUaGUgc2xvdCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbG90Q29sdW1uKHRhYmxlSWQ6IHN0cmluZywgY29sdW1uOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBpc1JlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkKTogQ29sdW1uIHtcblx0Y29uc3QgdGVtcGxhdGUgPVxuXHRcdHR5cGVvZiBjb2x1bW4udGVtcGxhdGUgPT09IFwic3RyaW5nXCIgJiYgIWNvbHVtbi50ZW1wbGF0ZT8uc3RhcnRzV2l0aChcIjxcIikgPyAoXG5cdFx0XHQ8U2xvdENvbHVtbiB0ZW1wbGF0ZUlkPXtjb2x1bW4udGVtcGxhdGV9IC8+XG5cdFx0KSA6IChcblx0XHRcdGNvbHVtbi50ZW1wbGF0ZVxuXHRcdCk7XG5cdHJldHVybiAoXG5cdFx0PENvbHVtblxuXHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgY29sdW1uLmlkXSl9XG5cdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHR3aWR0aD17Y29sdW1uLndpZHRofVxuXHRcdFx0aEFsaWduPXtjb2x1bW4uaG9yaXpvbnRhbEFsaWdufVxuXHRcdFx0aGVhZGVyPXtjb2x1bW4uaGVhZGVyfVxuXHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRyZXF1aXJlZD17aXNSZWFkT25seSA/IHVuZGVmaW5lZCA6IGNvbHVtbi5yZXF1aXJlZH1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlXG5cdFx0XHR9fVxuXHRcdDwvQ29sdW1uPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBEcmFmdEluZGljYXRvci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBEcmFmdEluZGljYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERyYWZ0SW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogRm9ybUVsZW1lbnRXcmFwcGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIikgJiZcblx0XHRjb2xsZWN0aW9uLmdldE9iamVjdChcIi4vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiKSAmJlxuXHRcdGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGhcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dH1cblx0XHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Z2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyhjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cE5hbWUpfVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbXCJ0aGlzPmFyaWFMYWJlbGxlZEJ5XCJdfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Gb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgU2l0dWF0aW9uSW5kaWNhdG9yIE9iamVjdFN0YXR1cy5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIE9iamVjdFN0YXR1cy5cbiAqL1xuZnVuY3Rpb24gZ2V0U2l0dWF0aW9uSW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogT2JqZWN0U3RhdHVzIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiLi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIpICYmXG5cdFx0Y29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHR2aXNpYmxlPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzfVxuXHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPkNvbnRhaW5zX0Vycm9yc31cIlxuXHRcdFx0XHRzdGF0ZT1cIkVycm9yXCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgZGF0ZS10aW1lIGZvcm1hdCBzdHlsZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZGF0YSBmaWVsZCBjb250ZXh0LlxuICogQHBhcmFtIGRhdGFGaWVsZENvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGRhdGEgZmllbGRcbiAqIEByZXR1cm5zIFJldHVybnMgJ3Nob3J0JyBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGZpZWxkIGlzIG9mIHRoZSB0eXBlICdFZG0uVGltZU9mRGF5Jywgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCk6IERhdGVUaW1lU3R5bGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YXJnZXRPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZGF0YUZpZWxkQ29udGV4dCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoaXNEYXRhRmllbGQodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3QuVmFsdWU/LiR0YXJnZXQ/LnR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiKSB7XG5cdFx0cmV0dXJuIFwic2hvcnRcIjtcblx0fVxuXHRpZiAoXG5cdFx0aXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKHRhcmdldE9iamVjdCkgJiZcblx0XHRoYXNEYXRhUG9pbnRUYXJnZXQodGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCh0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUuJHRhcmdldC50eXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIlxuXHQpIHtcblx0XHRyZXR1cm4gXCJzaG9ydFwiO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNyZWF0aW9uIHJvdy5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dFxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBjb250ZXh0XG4gKiBAcGFyYW0gZmllbGRNb2RlIFRoZSBmaWVsZCBtb2RlXG4gKiBAcGFyYW0gZW5hYmxlQW5hbHl0aWNzIFdoZXRoZXIgYW5hbHl0aWNzIGFyZSBlbmFibGVkXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIHJvdy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNyZWF0aW9uTW9kZTogUHJvcGVydGllc09mPFRhYmxlQ3JlYXRpb25PcHRpb25zPiB8IHVuZGVmaW5lZCxcblx0aXNUYWJsZVJlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRkYXRhRmllbGQ6IENvbnRleHQsXG5cdGZpZWxkTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRlbmFibGVBbmFseXRpY3M6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKChjcmVhdGlvbk1vZGU/Lm5hbWUgYXMgc3RyaW5nKSA9PT0gXCJDcmVhdGlvblJvd1wiKSB7XG5cdFx0bGV0IGNvbHVtbkVkaXRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0c3dpdGNoIChpc1RhYmxlUmVhZE9ubHkpIHtcblx0XHRcdGNhc2UgdHJ1ZTpcblx0XHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGZhbHNlOlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGFGaWVsZE9iamVjdCA9IGRhdGFGaWVsZC5nZXRPYmplY3QoKTtcblxuXHRcdGNvbnN0IHJlYWN0aXZlQXJlYU1vZGU6IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIiB8IHVuZGVmaW5lZCA9IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT3ZlcmxheVwiIDogdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdFx0dGV4dExpbmVzRWRpdDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXQsXG5cdFx0XHR0ZXh0TWF4TGluZXM6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMsXG5cdFx0XHR0ZXh0TWF4TGVuZ3RoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aCxcblx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdFx0c2VtYW50aWNLZXlTdHlsZTogdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPYmplY3RJZGVudGlmaWVyXCIgOiBcIkxhYmVsXCIsXG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yLFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdFx0ZmllbGRHcm91cE5hbWU6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSxcblx0XHRcdHNob3dJY29uVXJsOiBkYXRhRmllbGRPYmplY3Q/LklubGluZSAmJiAhIWRhdGFGaWVsZE9iamVjdD8uSWNvblVybCxcblx0XHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdFx0ZGF0ZVRpbWVTdHlsZTogZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkKSxcblx0XHRcdHJlYWN0aXZlQXJlYU1vZGU6IHJlYWN0aXZlQXJlYU1vZGVcblx0XHR9O1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7VGFibGVSdW50aW1lOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWUnfVwiXG5cdFx0XHRcdHZoSWRQcmVmaXg9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIlRhYmxlVmFsdWVIZWxwXCJdKX1cblx0XHRcdFx0ZWRpdE1vZGU9e2NvbHVtbkVkaXRNb2RlfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGQuZ2V0UGF0aCgpfVxuXHRcdFx0XHR3cmFwPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJ9XG5cdFx0XHRcdGNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvd31cblx0XHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9GaWVsZD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG1hY3JvczpGaWVsZCBpbnNpZGUgdGhlIGNvbHVtbi5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZVxuICogQHBhcmFtIGZpZWxkTW9kZSBUaGUgZmllbGQgbW9kZVxuICogQHBhcmFtIGlzQ29tcGFjdFR5cGUgV2hldGhlciB0aGUgdGFibGUgaXMgY29tcGFjdFxuICogQHBhcmFtIHRleHRBbGlnbiBUaGUgdGV4dCBhbGlnbm1lbnRcbiAqIEBwYXJhbSBhcmlhTGFiZWxsZWRCeSBUaGUgYXJpYSBsYWJlbGxlZCBieVxuICogQHBhcmFtIHNob3dFbXB0eUluZGljYXRvciBXaGV0aGVyIHRvIHNob3cgdGhlIGVtcHR5IGluZGljYXRvclxuICogQHBhcmFtIGNsYXNzTmFtZVxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGlzVGFibGVSZWFkT25seTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y3JlYXRpb25Nb2RlOiBQcm9wZXJ0aWVzT2Y8VGFibGVDcmVhdGlvbk9wdGlvbnM+IHwgdW5kZWZpbmVkLFxuXHRmaWVsZE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aXNDb21wYWN0VHlwZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGV4dEFsaWduOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNob3dFbXB0eUluZGljYXRvcjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogc3RyaW5nIHtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKTtcblx0bGV0IGNvbHVtbkVkaXRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAoaXNUYWJsZVJlYWRPbmx5KSB7XG5cdFx0Y2FzZSB0cnVlOlxuXHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgZmFsc2U6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IHVuZGVmaW5lZDtcblx0fVxuXHRpZiAodGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luICYmIGNvbHVtbi50eXBlQ29uZmlnPy5jbGFzc05hbWUgPT09IFwiRWRtLlN0cmVhbVwiKSB7XG5cdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0fVxuXG5cdGNvbnN0IHJlYWN0aXZlQXJlYU1vZGU6IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIiB8IHVuZGVmaW5lZCA9IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBcIk92ZXJsYXlcIiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBmb3JtYXRPcHRpb25zID0ge1xuXHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdHRleHRMaW5lc0VkaXQ6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TGluZXNFZGl0LFxuXHRcdHRleHRNYXhMaW5lczogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMaW5lcyxcblx0XHR0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXksXG5cdFx0dGV4dE1heExlbmd0aDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhMZW5ndGgsXG5cdFx0dGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXksXG5cdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdHNob3dFbXB0eUluZGljYXRvcjogc2hvd0VtcHR5SW5kaWNhdG9yLFxuXHRcdHNlbWFudGljS2V5U3R5bGU6IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT2JqZWN0SWRlbnRpZmllclwiIDogXCJMYWJlbFwiLFxuXHRcdGhhc0RyYWZ0SW5kaWNhdG9yOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uaGFzRHJhZnRJbmRpY2F0b3IsXG5cdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdGZpZWxkR3JvdXBOYW1lOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cE5hbWUsXG5cdFx0c2hvd0ljb25Vcmw6IGRhdGFGaWVsZE9iamVjdD8uSW5saW5lICYmICEhZGF0YUZpZWxkT2JqZWN0Py5JY29uVXJsLFxuXHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRpc0FuYWx5dGljczogZW5hYmxlQW5hbHl0aWNzLFxuXHRcdGZvcklubGluZUNyZWF0aW9uUm93czogY3JlYXRpb25Nb2RlPy5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiLFxuXHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdGNvbXBhY3RTZW1hbnRpY0tleTogaXNDb21wYWN0VHlwZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogYCR7aXNDb21wYWN0VHlwZX1gLFxuXHRcdGRhdGVUaW1lU3R5bGU6IGdldERlZmF1bHREYXRlVGltZVN0eWxlKGRhdGFGaWVsZENvbnRleHQpLFxuXHRcdGlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3c6IHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsLFxuXHRcdHJlYWN0aXZlQXJlYU1vZGU6IHJlYWN0aXZlQXJlYU1vZGVcblx0fTtcblx0cmV0dXJuIChcblx0XHQ8RmllbGRcblx0XHRcdHZoSWRQcmVmaXg9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIlRhYmxlVmFsdWVIZWxwXCJdKX1cblx0XHRcdGVkaXRNb2RlPXtjb2x1bW5FZGl0TW9kZX1cblx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdHRleHRBbGlnbj17dGV4dEFsaWdufVxuXHRcdFx0d3JhcD17dGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwifVxuXHRcdFx0Y2xhc3M9e2NsYXNzTmFtZX1cblx0XHRcdGxpdmVDaGFuZ2U9e2hhbmRsZXJQcm92aWRlci5maWVsZExpdmVDaGFuZ2V9XG5cdFx0XHRhcmlhTGFiZWxsZWRCeT17YXJpYUxhYmVsbGVkQnkgPyBbYXJpYUxhYmVsbGVkQnldIDogdW5kZWZpbmVkfVxuXHRcdFx0bmF2aWdhdGVBZnRlckFjdGlvbj17Y29sdW1uLmlzTmF2aWdhYmxlfVxuXHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0fX1cblx0XHQ8L0ZpZWxkPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjb2x1bW4uXG4gKiBAcGFyYW0gdGFibGVJZCBUaGUgdGFibGUgSURcbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gZGF0YUZpZWxkT1AgVGhlIGRhdGEgZmllbGQgb2JqZWN0IHBhdGhcbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXIgVGhlIGhhbmRsZXIgcHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY29sdW1uLlxuICovXG5mdW5jdGlvbiBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdHRhYmxlSWQ6IHN0cmluZyxcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZE9QOiBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFGaWVsZEFic3RyYWN0VHlwZXM+LFxuXHRkYXRhRmllbGRDb250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IHsgdGVtcGxhdGU6IHN0cmluZzsgY3JlYXRpb25UZW1wbGF0ZT86IHN0cmluZyB9IHtcblx0bGV0IHRlbXBsYXRlOiBzdHJpbmc7XG5cdGxldCBjcmVhdGlvblRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3QgdGFibGVEZWZpbml0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbjtcblx0Y29uc3QgZW5hYmxlQW5hbHl0aWNzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3M7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBpc1RhYmxlUmVhZE9ubHkgPSB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHk7XG5cdGNvbnN0IGNyZWF0aW9uTW9kZSA9IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU7XG5cdGNvbnN0IGZpZWxkTW9kZSA9IHRhYmxlUHJvcGVydGllcy5maWVsZE1vZGU7XG5cdGNvbnN0IGlzQ29tcGFjdFR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuaXNDb21wYWN0VHlwZTtcblxuXHRjb25zdCBkYXRhRmllbGQgPSBkYXRhRmllbGRPUC50YXJnZXRPYmplY3QgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcztcblx0aWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0KGlzQW5ub3RhdGlvbk9mVGVybTxDaGFydD4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBVSUFubm90YXRpb25UZXJtcy5DaGFydCkgfHxcblx0XHRcdGlzQW5ub3RhdGlvbk9mVGVybTxQcmVzZW50YXRpb25WYXJpYW50PihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLlByZXNlbnRhdGlvblZhcmlhbnQpKVxuXHQpIHtcblx0XHRjb25zdCBzaG93T25seUNoYXJ0ID0gKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/ICFjb2x1bW4uc2V0dGluZ3M/LnNob3dNaWNyb0NoYXJ0TGFiZWwgOiB1bmRlZmluZWQpID8/IHRydWU7XG5cdFx0Y29uc3QgbWljcm9DaGFydFNpemUgPSB0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyBjb2x1bW4uc2V0dGluZ3M/Lm1pY3JvQ2hhcnRTaXplID8/IFwiWFNcIiA6IFwiWFNcIjtcblx0XHRsZXQgbWljcm9DaGFydENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uXG5cdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbGxlY3Rpb24uZ2V0UGF0aChkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIikpKTtcblx0XHRtaWNyb0NoYXJ0Q29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChDb21tb25IZWxwZXIuZ2V0TmF2aWdhdGlvbkNvbnRleHQobWljcm9DaGFydENvbGxlY3Rpb24pKTtcblx0XHQvL1dlIG9ubHkgY29uc2lkZXIgdGhlIGZpcnN0IHZpc3VhbGl6YXRpb24gb2YgdGhlIFBWIGluIFBWIGNhc2UgYW5kIGV4cGVjdCBpdCB0byBiZSBhIGNoYXJ0IChzaW1pbGFyIHRvIFZpc3VhbEZpbHRlcnMpXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8TWljcm9DaGFydFxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIGRhdGFGaWVsZF0pfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17bWljcm9DaGFydENvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgXCIvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiKVxuXHRcdFx0XHRcdC5nZXRQYXRoKCl9XG5cdFx0XHRcdHNob3dPbmx5Q2hhcnQ9e3Nob3dPbmx5Q2hhcnR9XG5cdFx0XHRcdHNpemU9e21pY3JvQ2hhcnRTaXplID8/IFwiWFNcIn1cblx0XHRcdFx0aGlkZU9uTm9EYXRhPXt0cnVlfVxuXHRcdFx0XHRpc0FuYWx5dGljcz17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGQ+KGRhdGFGaWVsZCwgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkKSAmJlxuXHRcdGlzTXVsdGlWYWx1ZUZpZWxkKGVuaGFuY2VEYXRhTW9kZWxQYXRoKGRhdGFGaWVsZE9QLCBkYXRhRmllbGQuVmFsdWUucGF0aCkpXG5cdCkge1xuXHRcdC8vIHdoZW4gZXZhbHVhdGluZyBcIkAkdWk1LmNvbnRleHQuaXNJbmFjdGl2ZVwiIHdlIGFyZSBmb3JjZWQgdG8gYWRkIGlzVHJ1dGh5IHRvIGZvcmNlIHRoZSBiaW5kaW5nIGV2YWx1YXRpb25cblx0XHRjb25zdCBpc1JlYWRPbmx5ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRpZkVsc2UoXG5cdFx0XHRcdG9yKGlzVGFibGVSZWFkT25seSA9PT0gdHJ1ZSwgYW5kKGlzVHJ1dGh5KFVJLklzSW5hY3RpdmUpLCBjcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIpKSxcblx0XHRcdFx0Y29uc3RhbnQodHJ1ZSksXG5cdFx0XHRcdGlmRWxzZShlcXVhbChmaWVsZE1vZGUsIFwibm93cmFwcGVyXCIpLCBjb25zdGFudCh0cnVlKSwgY29uc3RhbnQodW5kZWZpbmVkKSlcblx0XHRcdClcblx0XHQpO1xuXHRcdGlmIChpc1JlYWRPbmx5ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0ZW1wbGF0ZSA9IChcblx0XHRcdFx0PE11bHRpVmFsdWVGaWVsZEJsb2NrXG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKX1cblx0XHRcdFx0XHR1c2VQYXJlbnRCaW5kaW5nQ2FjaGU9e3RhYmxlRGVmaW5pdGlvbi5kaXNhYmxlT3duUmVxdWVzdE9uTVZGfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRCbG9ja1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0cmVhZE9ubHk9e2lzUmVhZE9ubHl9XG5cdFx0XHRcdFx0dXNlUGFyZW50QmluZGluZ0NhY2hlPXt0YWJsZURlZmluaXRpb24uZGlzYWJsZU93blJlcXVlc3RPbk1WRn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0aXNBbm5vdGF0aW9uT2ZUZXJtPEZpZWxkR3JvdXA+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuRmllbGRHcm91cClcblx0KSB7XG5cdFx0Y29uc3QgZmllbGRHcm91cDogRmllbGRHcm91cCA9IGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldDtcblx0XHRjb25zdCBkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCA9IGRhdGFGaWVsZENvbnRleHRcblx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9UYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIik7XG5cdFx0Y29uc3QgZmllbGRHcm91cENvbGVjdGlvbkxlbmd0aCA9IGZpZWxkR3JvdXAuRGF0YS5sZW5ndGggLSAxO1xuXG5cdFx0Y29uc3QgaXRlbXMgPSBmaWVsZEdyb3VwLkRhdGEubWFwKChmaWVsZEdyb3VwRGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBmaWVsZEdyb3VwRGF0YUZpZWxkSWR4OiBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0ID0gZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHRcblx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSArIFwiL1wiICsgZmllbGRHcm91cERhdGFGaWVsZElkeCk7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwRGF0YUZpZWxkT1AgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQpO1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cExhYmVsID0gRmllbGRIZWxwZXIuY29tcHV0ZUxhYmVsVGV4dChmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoKSwge1xuXHRcdFx0XHRjb250ZXh0OiBmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0fSk7XG5cdFx0XHRpZiAoY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwgJiYgISFmaWVsZEdyb3VwTGFiZWwpIHtcblx0XHRcdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLm1hY3Jvc1wiKSE7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEhCb3hcblx0XHRcdFx0XHRcdHZpc2libGU9e2dldFZpc2libGVFeHByZXNzaW9uKGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGaWVsZEhlbHBlci5idWlsZEV4cHJlc3Npb25Gb3JBbGlnbkl0ZW1zKFxuXHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIilcblx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PExhYmVsXG5cdFx0XHRcdFx0XHRcdGlkPXtUYWJsZUhlbHBlci5nZXRGaWVsZEdyb3VwTGFiZWxTdGFibGVJZCh0YWJsZUlkLCBmaWVsZEdyb3VwRGF0YUZpZWxkT1ApfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PXtyZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiSEVBREVSX0ZPUk1fTEFCRUxcIiwgW2ZpZWxkR3JvdXBMYWJlbF0pfVxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpbkVuZFwiXG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2dldFZpc2libGVFeHByZXNzaW9uKGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0PFZCb3g+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPEZsZXhJdGVtRGF0YSBncm93RmFjdG9yPVwiMVwiIC8+LFxuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHRcdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdFx0XHRcdFx0XHRcdFwiTGVmdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0YCR7VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT1ApfSAke1RhYmxlSGVscGVyLmdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkT1Bcblx0XHRcdFx0XHRcdFx0XHRcdCl9YCxcblx0XHRcdFx0XHRcdFx0XHRcdHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRNYXJnaW5DbGFzcyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9WaXN1YWxpemF0aW9uLyRFbnVtTWVtYmVyXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkSWR4ID09PSBmaWVsZEdyb3VwQ29sZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdFx0XHRpc0NvbXBhY3RUeXBlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRDb2x1bW5TdGFibGVJZCh0YWJsZUlkLCBkYXRhRmllbGRPUCksXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0TWFyZ2luQ2xhc3MoXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIiksXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkSWR4ID09PSBmaWVsZEdyb3VwQ29sZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRoYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGNvbnN0IGRyYWZ0SW5kaWNhdG9yID0gZ2V0RHJhZnRJbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoZHJhZnRJbmRpY2F0b3IpIHtcblx0XHRcdGl0ZW1zLnB1c2goZHJhZnRJbmRpY2F0b3IpO1xuXHRcdH1cblx0XHRjb25zdCBzaXR1YXRpb25JbmRpY2F0b3IgPSBnZXRTaXR1YXRpb25JbmRpY2F0b3IoY29sbGVjdGlvbiwgY29sdW1uKTtcblx0XHRpZiAoc2l0dWF0aW9uSW5kaWNhdG9yKSB7XG5cdFx0XHRpdGVtcy5wdXNoKHNpdHVhdGlvbkluZGljYXRvcik7XG5cdFx0fVxuXG5cdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHQ8VkJveFxuXHRcdFx0XHR2aXNpYmxlPXtUYWJsZUhlbHBlci5nZXRWQm94VmlzaWJpbGl0eShcblx0XHRcdFx0XHRkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRjb2x1bW4uRmllbGRHcm91cEhpZGRlbkV4cHJlc3Npb25zLFxuXHRcdFx0XHRcdGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KClcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogaXRlbXNcblx0XHRcdFx0fX1cblx0XHRcdDwvVkJveD5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRlbXBsYXRlID0gZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHRcdFx0dGFibGVJZCxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdGNvbHVtbixcblx0XHRcdGRhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0ZmllbGRNb2RlLFxuXHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0KTtcblx0XHRjcmVhdGlvblRlbXBsYXRlID0gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0XHRcdHRhYmxlSWQsXG5cdFx0XHRjb2x1bW4sXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4geyB0ZW1wbGF0ZSwgY3JlYXRpb25UZW1wbGF0ZSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRsZXQgZGF0YUZpZWxkQ29udGV4dCA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChjb2x1bW4uYW5ub3RhdGlvblBhdGgpO1xuXHRpZiAoIWRhdGFGaWVsZENvbnRleHQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGRhdGFGaWVsZENvbnRleHQgPSBjb2xsZWN0aW9uLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkRGVmYXVsdChkYXRhRmllbGRDb250ZXh0KSk7XG5cdGNvbnN0IGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihkYXRhRmllbGRDb250ZXh0LCBjb2xsZWN0aW9uKTtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dD8uZ2V0T2JqZWN0Py4oKSA/PyB7fTtcblxuXHRjb25zdCB0ZW1wbGF0ZXMgPSBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdFx0dGFibGVJZCxcblx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0Y29sdW1uLFxuXHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRkYXRhRmllbGRDb250ZXh0LFxuXHRcdGNvbGxlY3Rpb24sXG5cdFx0aGFuZGxlclByb3ZpZGVyXG5cdCk7XG5cblx0Y29uc3QgZW5hYmxlQXV0b0NvbHVtbldpZHRoID0gdGFibGVQcm9wZXJ0aWVzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoO1xuXHRjb25zdCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cblx0cmV0dXJuIChcblx0XHQ8Q29sdW1uXG5cdFx0XHRpZD17VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoKX1cblx0XHRcdHdpZHRoPXtcblx0XHRcdFx0IUNvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKSB8fCBjb2x1bW4ud2lkdGhcblx0XHRcdFx0XHQ/IFRhYmxlSGVscGVyLmdldENvbHVtbldpZHRoKFxuXHRcdFx0XHRcdFx0XHR7IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCwgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsIHRhYmxlVHlwZSB9LFxuXHRcdFx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdCxcblx0XHRcdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbnRleHQ6IGRhdGFGaWVsZENvbnRleHQgfSksXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1RpdGxlXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRtaW5XaWR0aD17XG5cdFx0XHRcdENvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKVxuXHRcdFx0XHRcdD8gVGFibGVIZWxwZXIuZ2V0Q29sdW1uV2lkdGgoXG5cdFx0XHRcdFx0XHRcdHsgZW5hYmxlQXV0b0NvbHVtbldpZHRoLCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciwgdGFibGVUeXBlIH0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRUZXh0T25BY3Rpb25GaWVsZChkYXRhRmllbGRPYmplY3QsIHsgY29udGV4dDogZGF0YUZpZWxkQ29udGV4dCB9KSxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0Rlc2NyaXB0aW9uXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbCB8fCBjb2x1bW4ubmFtZX1cblx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdGhBbGlnbj17Y29sdW1uLmhvcml6b250YWxBbGlnbiB8fCBGaWVsZEhlbHBlci5nZXRDb2x1bW5BbGlnbm1lbnQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb24gfSl9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtUYWJsZUhlbHBlci5zZXRIZWFkZXJMYWJlbFZpc2liaWxpdHkoZGF0YUZpZWxkT2JqZWN0LCBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvRGF0YVwiKSl9XG5cdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdHJlcXVpcmVkPXt0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkgPyB1bmRlZmluZWQgOiBjb2x1bW4ucmVxdWlyZWR9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogY3JlYXRlQ3VzdG9tRGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIiwgY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwpLFxuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlcy50ZW1wbGF0ZSxcblx0XHRcdFx0Y3JlYXRpb25UZW1wbGF0ZTogdGVtcGxhdGVzLmNyZWF0aW9uVGVtcGxhdGVcblx0XHRcdH19XG5cdFx0PC9Db2x1bW4+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYWxsIHRoZSBjb2x1bW5zIGluIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdXNlZCBmb3IgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbHVtbnMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbHVtbnModGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgY29sbGVjdGlvbjogQ29udGV4dCwgaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUlkID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZDtcblx0cmV0dXJuIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29sdW1uc1xuXHRcdC5tYXAoKGNvbHVtbikgPT4ge1xuXHRcdFx0aWYgKGNvbHVtbi5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiICYmIGNvbHVtbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpIHtcblx0XHRcdFx0cmV0dXJuIGdldENvbHVtblRlbXBsYXRlKHRhYmxlSWQsIHRhYmxlUHJvcGVydGllcywgY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbiwgY29sbGVjdGlvbiwgaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCIgJiYgY29sdW1uLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRTbG90Q29sdW1uKHRhYmxlSWQsIGNvbHVtbiBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJDb21wdXRlZFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihcblx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdGNvbHVtbiBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3Ncblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9KVxuXHRcdC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uICE9PSB1bmRlZmluZWQpIGFzIENvbHVtbltdO1xufVxuXG5leHBvcnQgdHlwZSBUYWJsZUJsb2NrUHJvcGVydGllcyA9IE9taXQ8U3RyaWN0UHJvcGVydGllc09mPFRhYmxlQVBJPiwgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiPiAmIHtcblx0Z2V0VHJhbnNsYXRlZFRleHQodGV4dDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogdW5rbm93bltdLCBtZXRhUGF0aD86IHN0cmluZyk6IHN0cmluZztcblx0W1wiZmw6ZmxleGliaWxpdHlcIl0/OiBzdHJpbmc7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBkZXNpZ250aW1lIGZvciB0aGUgTURDIHRhYmxlLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGR0OmRlc2lnbnRpbWVcbiAqL1xuZnVuY3Rpb24gZ2V0RGVzaWdudGltZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2Rlc2lnbnRpbWUvVGFibGUuZGVzaWdudGltZVwiO1xufVxuXG4vKipcbiAqIE1hcHMgdGhlIGludGVybmFsIFAxM24gdGFibGUgbW9kZSAoc3RyaW5nKSB0byB0aGUgY29ycmVzcG9uZGluZyBNREMgZW51bS5cbiAqIEBwYXJhbSBzdHJpbmdNb2RlXG4gKiBAcmV0dXJucyBUaGUgTURDIGVudW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0TURDUDEzbk1vZGUoc3RyaW5nTW9kZTogc3RyaW5nKTogVGFibGVQMTNuTW9kZSB7XG5cdHN3aXRjaCAoc3RyaW5nTW9kZSkge1xuXHRcdGNhc2UgXCJBZ2dyZWdhdGVcIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkFnZ3JlZ2F0ZTtcblx0XHRjYXNlIFwiU29ydFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuU29ydDtcblx0XHRjYXNlIFwiQ29sdW1uXCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5Db2x1bW47XG5cdFx0Y2FzZSBcIkZpbHRlclwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuRmlsdGVyO1xuXHRcdGNhc2UgXCJHcm91cFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuR3JvdXA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdExvZy5lcnJvcihcIlVua25vd24gUDEzbiBtb2RlOiBcIiArIHN0cmluZ01vZGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuQ29sdW1uO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNRENUYWJsZVRlbXBsYXRlKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMpOiBNRENUYWJsZSB7XG5cdC8vIEZvciBhIFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnQgZGlzcGxheWluZyBhIGRyYWZ0LWVuYWJsZWQgZW50aXR5LCB3ZSBvbmx5IGRpc3BsYXkgYWN0aXZlIGluc3RhbmNlc1xuXHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbj8ucm93Py5uYXZpZ2F0aW9uSW5mbyBhcyB7XG5cdFx0cm91dGVQYXRoPzogc3RyaW5nO1xuXHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0fTtcblx0Y29uc3QgdGFyZ2V0ID0gbmF2aWdhdGlvbkluZm8/LnJvdXRlUGF0aDtcblx0bGV0IG5hdmlnYXRpb25JbkVkaXRNb2RlID0gZmFsc2U7XG5cdGlmICh0YXJnZXQpIHtcblx0XHRjb25zdCB0YXJnZXRJbmZvcm1hdGlvbiA9IHBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuX2dldFRhcmdldEluZm9ybWF0aW9uKHRhcmdldCk7XG5cdFx0bmF2aWdhdGlvbkluRWRpdE1vZGUgPSAodGFyZ2V0SW5mb3JtYXRpb24/Lm9wdGlvbnM/LnNldHRpbmdzPy5vcGVuSW5FZGl0TW9kZSBhcyBib29sZWFuIHwgdW5kZWZpbmVkKSA/PyBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjb250ZXh0T2JqZWN0UGF0aCA9IHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aDtcblx0Y29uc3QgZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9XG5cdFx0KHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkgJiZcblx0XHRjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0ICYmXG5cdFx0TW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udGV4dE9iamVjdFBhdGgpO1xuXHRjb25zdCBkZWxlZ2F0ZSA9IFRhYmxlSGVscGVyLmdldERlbGVnYXRlKFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sXG5cdFx0dGFibGVQcm9wZXJ0aWVzLmlzQWxwID09PSB0cnVlLFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5lbnRpdHlOYW1lLFxuXHRcdGZpbHRlck9uQWN0aXZlRW50aXRpZXNcblx0KTtcblx0Y29uc3QgaGVhZGVyVmlzaWJsZSA9IHRhYmxlUHJvcGVydGllcy5oZWFkZXJWaXNpYmxlID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5oZWFkZXJWaXNpYmxlO1xuXHRjb25zdCBjdXJyZW50SGVhZGVyID0gdGFibGVQcm9wZXJ0aWVzLmhlYWRlciA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udGl0bGU7XG5cdGNvbnN0IGhlYWRlckJpbmRpbmdFeHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZShjdXJyZW50SGVhZGVyID8/IFwiXCIsIHRhYmxlUHJvcGVydGllcy50YWJUaXRsZSA/PyBcIlwiLCAhIWhlYWRlclZpc2libGUpO1xuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKTtcblx0Y29uc3QgY29sbGVjdGlvbkVudGl0eSA9IHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pLnRhcmdldCBhc1xuXHRcdHwgRW50aXR5U2V0XG5cdFx0fCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdGNvbnN0IG1vZGVsQ29udGV4dENoYW5nZSA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnRhYmxlQ29udGV4dENoYW5nZSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgbGluZUl0ZW0gPSBUYWJsZUhlbHBlci5nZXRVaUxpbmVJdGVtT2JqZWN0KHBhcmFtZXRlcnMubWV0YVBhdGgsIHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEpIGFzXG5cdFx0fCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25bXVxuXHRcdHwgdW5kZWZpbmVkO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5uYXZpZ2F0aW9uUGF0aDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uLnN0YXJ0c1dpdGgoXCIvXCIpICYmIGlzU2luZ2xldG9uKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSkge1xuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uID0gbmF2aWdhdGlvblBhdGg7XG5cdH1cblxuXHRjb25zdCBjb2xsZWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uKSE7XG5cdGNvbnN0IGRyYWZ0ID0gKGNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0Ly8gQWRkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBkZXNpZ250aW1lIGZpbGUgaWYgZGVzaWdudGltZSBpcyBlbmFibGVkIGZyb20gY29yZSBvciBsb2NhbGx5IHZpYSB1cmwgcGFyYW1ldGVyc1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRhYmxlUHJvcGVydGllcy52YXJpYW50TWFuYWdlbWVudCA/PyBcIk5vbmVcIjtcblx0Y29uc3QgZGVzaWdudGltZSA9IGdldERlc2lnbnRpbWUoKTtcblx0bGV0IHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0cm93QWN0aW9uVHlwZSA9IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uO1xuXHR9XG5cdHJvd0FjdGlvblR5cGUgPz89XG5cdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8uYWN0aW9uVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIgPyBUYWJsZVJvd0FjdGlvblR5cGUuTmF2aWdhdGlvbiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBzaG93Q3JlYXRlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKT8udmlzaWJsZSB8fCB0cnVlO1xuXG5cdC8qKlxuXHQgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgYnV0dG9uIGlzIGhpZGRlbiB3aGVuIG5vIGRhdGEgaGFzIGJlZW4gZW50ZXJlZCB5ZXQgaW4gdGhlIHJvdyAodHJ1ZS9mYWxzZSkuIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgYGZhbHNlYC5cblx0ICovXG5cdGNvbnN0IHVwZGF0YWJsZVByb3BlcnR5UGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi51cGRhdGFibGVQcm9wZXJ0eVBhdGg7XG5cblx0bGV0IGN1cnJlbnRQZXJzb25hbGl6YXRpb246IFRhYmxlUDEzbk1vZGVbXSB8IHVuZGVmaW5lZDtcblx0c3dpdGNoICh0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uKSB7XG5cdFx0Y2FzZSBcImZhbHNlXCI6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRydWVcIjpcblx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBbVGFibGVQMTNuTW9kZS5Tb3J0LCBUYWJsZVAxM25Nb2RlLkNvbHVtbiwgVGFibGVQMTNuTW9kZS5GaWx0ZXJdO1xuXHRcdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gWy4uLmN1cnJlbnRQZXJzb25hbGl6YXRpb24sIFRhYmxlUDEzbk1vZGUuR3JvdXBdO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSB1bmRlZmluZWQ6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnAxM25Nb2RlPy5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUpKTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBJbiBjYXNlIGdyb3VwaW5nIG1vZGUgaXMgZGVmaW5lZCBleHBsaWNpdGVseSBvbiB0aGUgcGVyc29uYWxpemF0aW9uLCB3ZSBvbmx5IGVuYWJsZSBpdCBmb3IgdGhlIGFuYWx5dGljYWwgYW5kIHJlc3BvbnNpdmUgdGFibGUuXG5cdFx0XHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiIHx8IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzID09PSB0cnVlKSB7XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSB0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uLnNwbGl0KFwiLFwiKS5tYXAoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUudHJpbSgpKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBleGNsdWRlR3JvdXBGcm9tUDEzbiA9IHRhYmxlUHJvcGVydGllcy5wZXJzb25hbGl6YXRpb25cblx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0LmZpbHRlcigobW9kZSkgPT4gZ2V0TURDUDEzbk1vZGUobW9kZS50cmltKCkpICE9PSBUYWJsZVAxM25Nb2RlLkdyb3VwKSBhcyBUYWJsZVAxM25Nb2RlW107XG5cdFx0XHRcdGN1cnJlbnRQZXJzb25hbGl6YXRpb24gPSBleGNsdWRlR3JvdXBGcm9tUDEzbi5sZW5ndGggPyBleGNsdWRlR3JvdXBGcm9tUDEzbiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0fVxuXG5cdGNvbnN0IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zID0gQWN0aW9uSGVscGVyLmdldE11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zKGxpbmVJdGVtKTtcblxuXHRjb25zdCBjdXN0b21EYXRhID0gW1xuXHRcdHsga2V5OiBcImtpbmRcIiwgdmFsdWU6IGNvbGxlY3Rpb25FbnRpdHkuX3R5cGUgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uUGF0aFwiLCB2YWx1ZTogbmF2aWdhdGlvblBhdGggfSxcblx0XHR7IGtleTogXCJlbmFibGVBbmFseXRpY3NcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRpb25Nb2RlXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIH0sXG5cdFx0eyBrZXk6IFwiaW5saW5lQ3JlYXRpb25Sb3dDb3VudFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlubGluZUNyZWF0aW9uUm93Q291bnQgfSxcblx0XHR7IGtleTogXCJzaG93Q3JlYXRlXCIsIHZhbHVlOiBzaG93Q3JlYXRlIH0sXG5cdFx0eyBrZXk6IFwiY3JlYXRlQXRFbmRcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5jcmVhdGlvbk1vZGU/LmNyZWF0ZUF0RW5kIH0sXG5cdFx0eyBrZXk6IFwiZGlzcGxheU1vZGVQcm9wZXJ0eUJpbmRpbmdcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy5yZWFkT25seSB9LFxuXHRcdHsga2V5OiBcInRhYmxlVHlwZVwiLCB2YWx1ZTogdGFibGVUeXBlIH0sXG5cdFx0eyBrZXk6IFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImVudGl0eVR5cGVcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSArIFwiL1wiIH0sXG5cdFx0eyBrZXk6IFwibWV0YVBhdGhcIiwgdmFsdWU6IGNvbGxlY3Rpb25Db250ZXh0LmdldFBhdGgoKSB9LFxuXHRcdHsga2V5OiBcImhpZGRlbkZpbHRlcnNcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5maWx0ZXJzPy5oaWRkZW5GaWx0ZXJzIH0sXG5cdFx0eyBrZXk6IFwicmVxdWVzdEdyb3VwSWRcIiwgdmFsdWU6IFwiJGF1dG8uV29ya2Vyc1wiIH0sXG5cdFx0eyBrZXk6IFwic2VnbWVudGVkQnV0dG9uSWRcIiwgdmFsdWU6IGdlbmVyYXRlKFt0YWJsZVByb3BlcnRpZXMuY29udGVudElkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pIH0sXG5cdFx0eyBrZXk6IFwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZFwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQgfSxcblx0XHR7IGtleTogXCJkcmFmdFwiLCB2YWx1ZTogZHJhZnQgfSxcblx0XHR7IGtleTogXCJuYXZpZ2F0aW9uQXZhaWxhYmxlTWFwXCIsIHZhbHVlOiBUYWJsZUhlbHBlci5nZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwKGxpbmVJdGVtKSB9LFxuXHRcdHtcblx0XHRcdGtleTogXCJhY3Rpb25zTXVsdGlzZWxlY3REaXNhYmxlZFwiLFxuXHRcdFx0dmFsdWU6IG11bHRpU2VsZWN0RGlzYWJsZWRBY3Rpb25zLmxlbmd0aCA+IDAgPyBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucy5qb2luKFwiLFwiKSA6IHVuZGVmaW5lZFxuXHRcdH0sXG5cdFx0eyBrZXk6IFwidXBkYXRhYmxlUHJvcGVydHlQYXRoXCIsIHZhbHVlOiB1cGRhdGFibGVQcm9wZXJ0eVBhdGggfHwgXCJcIiB9LFxuXHRcdHsga2V5OiBcImV4cG9ydFJlcXVlc3RTaXplXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemUgfVxuXHRdO1xuXG5cdHJldHVybiAoXG5cdFx0PE1EQ1RhYmxlXG5cdFx0XHRjb3JlOnJlcXVpcmU9e2dldENvcmVSZXF1aXJlKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pfVxuXHRcdFx0Zmw6ZmxleGliaWxpdHk9e3RhYmxlUHJvcGVydGllc1tcImZsOmZsZXhpYmlsaXR5XCJdfVxuXHRcdFx0c29ydENvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5zb3J0Q29uZGl0aW9uc31cblx0XHRcdGdyb3VwQ29uZGl0aW9ucz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9uc31cblx0XHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zfVxuXHRcdFx0ZHQ6ZGVzaWdudGltZT17ZGVzaWdudGltZX1cblx0XHRcdGlkPXt0YWJsZVByb3BlcnRpZXMuY29udGVudElkfVxuXHRcdFx0YnVzeUluZGljYXRvckRlbGF5PXswfVxuXHRcdFx0ZW5hYmxlRXhwb3J0PXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlRXhwb3J0fVxuXHRcdFx0ZGVsZWdhdGU9e0pTT04ucGFyc2UoZGVsZWdhdGUpfVxuXHRcdFx0YmVmb3JlT3BlbkNvbnRleHRNZW51PXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5iZWZvcmVPcGVuQ29udGV4dE1lbnV9XG5cdFx0XHRhdXRvQmluZE9uSW5pdD17dGFibGVQcm9wZXJ0aWVzLnVzZUJhc2ljU2VhcmNoIHx8ICF0YWJsZVByb3BlcnRpZXMuZmlsdGVyQmFyfVxuXHRcdFx0c2VsZWN0aW9uTW9kZT17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNlbGVjdGlvbk1vZGUgfHwgXCJOb25lXCJ9XG5cdFx0XHRzZWxlY3Rpb25DaGFuZ2U9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnNlbGVjdGlvbkNoYW5nZX1cblx0XHRcdHNob3dSb3dDb3VudD17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNob3dSb3dDb3VudH1cblx0XHRcdGhlYWRlcj17Y3VycmVudEhlYWRlcn1cblx0XHRcdGhlYWRlclZpc2libGU9e2hlYWRlckJpbmRpbmdFeHByZXNzaW9ufVxuXHRcdFx0aGVhZGVyTGV2ZWw9e3RhYmxlUHJvcGVydGllcy5oZWFkZXJMZXZlbH1cblx0XHRcdGhlYWRlclN0eWxlPXt0YWJsZVByb3BlcnRpZXMuaGVhZGVyU3R5bGV9XG5cdFx0XHR0aHJlc2hvbGQ9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50aHJlc2hvbGQgPz8gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnRocmVzaG9sZH1cblx0XHRcdHAxM25Nb2RlPXtjdXJyZW50UGVyc29uYWxpemF0aW9ufVxuXHRcdFx0cGFzdGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRiZWZvcmVFeHBvcnQ9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmJlZm9yZUV4cG9ydH1cblx0XHRcdGNsYXNzPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudXNlQ29uZGVuc2VkVGFibGVMYXlvdXQgPT09IHRydWUgPyBcInNhcFVpU2l6ZUNvbmRlbnNlZFwiIDogdW5kZWZpbmVkfVxuXHRcdFx0bXVsdGlTZWxlY3RNb2RlPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubXVsdGlTZWxlY3RNb2RlfVxuXHRcdFx0c2hvd1Bhc3RlQnV0dG9uPXt0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyBmYWxzZSA6IHBhc3RlQWN0aW9uPy52aXNpYmxlfVxuXHRcdFx0ZW5hYmxlUGFzdGU9e3RhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IGZhbHNlIDogcGFzdGVBY3Rpb24/LmVuYWJsZWR9XG5cdFx0XHRtb2RlbENvbnRleHRDaGFuZ2U9e21vZGVsQ29udGV4dENoYW5nZX1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBjcmVhdGVDdXN0b21EYXRhcyhjdXN0b21EYXRhKSxcblx0XHRcdFx0ZGF0YVN0YXRlSW5kaWNhdG9yOiBnZXREYXRhU3RhdGVJbmRpY2F0b3IocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHR0eXBlOiBnZXRUYWJsZVR5cGUoXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnNlbGVjdGlvbkxpbWl0XG5cdFx0XHRcdCksXG5cdFx0XHRcdGRlcGVuZGVudHM6IGdldERlcGVuZGVudHModGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCB2YXJpYW50TWFuYWdlbWVudCwgY29sbGVjdGlvbkNvbnRleHQpLFxuXHRcdFx0XHRhY3Rpb25zOiBnZXRBY3Rpb25zKHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycywgY29sbGVjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25FbnRpdHkpLFxuXHRcdFx0XHRyb3dTZXR0aW5nczogZ2V0Um93U2V0dGluZ3ModGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbiwgcm93QWN0aW9uVHlwZSwgdGFibGVUeXBlLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGNvbnRleHRNZW51OiBnZXRDb250ZXh0TWVudShcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0XHRcdFx0cGFyYW1ldGVycyxcblx0XHRcdFx0XHRjb2xsZWN0aW9uRW50aXR5LFxuXHRcdFx0XHRcdHJvd0FjdGlvblR5cGUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0bmF2aWdhdGlvbkluRWRpdE1vZGVcblx0XHRcdFx0KSxcblx0XHRcdFx0Y29sdW1uczogZ2V0Q29sdW1ucyh0YWJsZVByb3BlcnRpZXMsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGRyYWdEcm9wQ29uZmlnOiBnZXREcmFnQW5kRHJvcENvbmZpZyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IGdldENyZWF0aW9uUm93KHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHR2YXJpYW50OiBnZXRWYXJpYW50TWFuYWdlbWVudChcblx0XHRcdFx0XHR2YXJpYW50TWFuYWdlbWVudCxcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGVudElkLFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy5oZWFkZXJMZXZlbCxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHQpLFxuXHRcdFx0XHRxdWlja0ZpbHRlcjogZ2V0UXVpY2tGaWx0ZXIodGFibGVQcm9wZXJ0aWVzKSxcblx0XHRcdFx0Y29weVByb3ZpZGVyOiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzKSxcblx0XHRcdFx0Y2VsbFNlbGVjdG9yOiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzKVxuXHRcdFx0fX1cblx0XHQ8L01EQ1RhYmxlPlxuXHQpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNBLFlBQVlBLENBQ3BCQyxlQUFtQyxFQUNuQ0MsV0FBb0IsRUFDcEJDLFNBQW9CLEVBQ3BCQyxjQUFzQixFQUNnQztJQUN0RCxNQUFNQyxVQUFVLEdBQUdILFdBQVcsQ0FBQ0ksU0FBUyxDQUFDLENBQUM7SUFDMUMsUUFBUUgsU0FBUztNQUNoQixLQUFLLFdBQVc7UUFDZixPQUNDSSxJQUFBLENBQUNDLGFBQWE7VUFDYkMsWUFBWSxFQUFFUixlQUFlLENBQUNTLE9BQU8sQ0FBQ0QsWUFBYTtVQUNuREUsUUFBUSxFQUFFVixlQUFlLENBQUNTLE9BQU8sQ0FBQ0MsUUFBUztVQUMzQ1AsY0FBYyxFQUFFQSxjQUFlO1VBQy9CUSxnQkFBZ0IsRUFBRVgsZUFBZSxDQUFDUyxPQUFPLENBQUNHLGlCQUFrQjtVQUM1REMsZUFBZSxFQUFFYixlQUFlLENBQUNTLE9BQU8sQ0FBQ0ksZUFBZ0I7VUFDekRDLGtCQUFrQixFQUFFZCxlQUFlLENBQUNTLE9BQU8sQ0FBQ0s7UUFBbUIsQ0FDL0QsQ0FBQztNQUdKLEtBQUssV0FBVztRQUNmLE9BQ0NSLElBQUEsQ0FBQ1MsYUFBYTtVQUNi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
|
|
1362
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRUYWJsZVR5cGUiLCJ0YWJsZURlZmluaXRpb24iLCJfY29sbGVjdGlvbiIsInRhYmxlVHlwZSIsInNlbGVjdGlvbkxpbWl0IiwiY29sbGVjdGlvbiIsImdldE9iamVjdCIsIl9qc3giLCJHcmlkVGFibGVUeXBlIiwicm93Q291bnRNb2RlIiwiY29udHJvbCIsInJvd0NvdW50IiwiZml4ZWRDb2x1bW5Db3VudCIsImZyb3plbkNvbHVtbkNvdW50Iiwic2Nyb2xsVGhyZXNob2xkIiwiZW5hYmxlQ29sdW1uRnJlZXplIiwiVHJlZVRhYmxlVHlwZSIsIlJlc3BvbnNpdmVUYWJsZVR5cGUiLCJzaG93RGV0YWlsc0J1dHRvbiIsImRldGFpbHNCdXR0b25TZXR0aW5nIiwiUHJpb3JpdHkiLCJMb3ciLCJNZWRpdW0iLCJOb25lIiwiZ3Jvd2luZ01vZGUiLCIka2luZCIsInVuZGVmaW5lZCIsInBvcGluTGF5b3V0IiwiZ2V0RGF0YVN0YXRlSW5kaWNhdG9yIiwiaGFuZGxlclByb3ZpZGVyIiwiRGF0YVN0YXRlSW5kaWNhdG9yIiwiZmlsdGVyIiwiZGF0YVN0YXRlSW5kaWNhdG9yRmlsdGVyIiwiZW5hYmxlZCIsImNvbXBpbGVFeHByZXNzaW9uIiwibm90IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsImVuYWJsZUZpbHRlcmluZyIsImRhdGFTdGF0ZUNoYW5nZSIsImdldERyYWdBbmREcm9wRW5hYmxlZCIsImNvbnRleHRPYmplY3RQYXRoIiwiaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uIiwiaXNQYXRoVXBkYXRhYmxlIiwiaWdub3JlVGFyZ2V0Q29sbGVjdGlvbiIsImF1dGhvcml6ZVVucmVzb2x2YWJsZSIsInBhdGhWaXNpdG9yIiwicGF0aCIsIm5hdmlnYXRpb25QYXRocyIsInNpbmdsZXRvblBhdGhWaXNpdG9yIiwiY29udmVydGVkVHlwZXMiLCJpc1BhdGhVcGRhdGFibGVPblRhcmdldCIsInN0YXJ0aW5nRW50aXR5U2V0IiwidGFyZ2V0RW50aXR5U2V0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJhbmQiLCJfdHlwZSIsImlmRWxzZSIsImlzQ29uc3RhbnQiLCJjb25zdGFudCIsImlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSIsIlVJIiwiSXNFZGl0YWJsZSIsImdldERlcGVuZGVudHMiLCJ0YWJsZVByb3BlcnRpZXMiLCJwYXJhbWV0ZXJzIiwidmFyaWFudE1hbmFnZW1lbnQiLCJpZCIsImNvbnRlbnRJZCIsInR5cGUiLCJkZXBlbmRlbnRzIiwiY3V0QWN0aW9uIiwiYWN0aW9ucyIsImZpbmQiLCJhIiwia2V5IiwiU3RhbmRhcmRBY3Rpb25LZXlzIiwiQ3V0IiwiaXNUZW1wbGF0ZWQiLCJwdXNoIiwiQ29tbWFuZEV4ZWN1dGlvbiIsImV4ZWN1dGUiLCJnZXRDdXRIYW5kbGVyIiwiY29tbWFuZCIsImNvcHlBY3Rpb24iLCJDb3B5IiwiZ2V0Q29weUhhbmRsZXIiLCJwYXN0ZUFjdGlvbiIsIlBhc3RlIiwidmlzaWJsZSIsImdldFBhc3RlSGFuZGxlciIsImNyZWF0ZUFjdGlvbiIsIkNyZWF0ZSIsImRlbGV0ZUFjdGlvbiIsIkRlbGV0ZSIsImFubm90YXRpb24iLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJub2RlVHlwZSIsImVuYWJsZVVwbG9hZFBsdWdpbiIsImdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlciIsIm1vdmVVcEFjdGlvbiIsIk1vdmVVcCIsIm1vdmVEb3duQWN0aW9uIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duSGFuZGxlciIsImFjdGlvbk5hbWUiLCJjb21tYW5kQWN0aW9ucyIsImFjdGlvbiIsImFjdGlvbkNvbW1hbmQiLCJnZXRBY3Rpb25Db21tYW5kIiwiUGVyc2lzdGVuY2VQcm92aWRlciIsImdlbmVyYXRlIiwiZm9yIiwiQ29udGV4dE1lbnVTZXR0aW5nIiwic2NvcGUiLCJnZXRVcGxvYWRQbHVnaW4iLCJfZXhwb3J0cyIsImdldEFjdGlvbnMiLCJ0YWJsZSIsImNvbGxlY3Rpb25Db250ZXh0IiwiY29sbGVjdGlvbkVudGl0eSIsImRpc3BsYXlTZWdtZW50ZWRCdXR0b24iLCJhbHBCdXR0b25JdGVtcyIsIkNvbW1vbkhlbHBlciIsImlzRGVza3RvcCIsIlNlZ21lbnRlZEJ1dHRvbkl0ZW0iLCJ0b29sdGlwIiwiaWNvbiIsIkFjdGlvblRvb2xiYXJBY3Rpb24iLCJsYXlvdXRJbmZvcm1hdGlvbiIsImNoaWxkcmVuIiwiU2VnbWVudGVkQnV0dG9uIiwic2VsZWN0Iiwic2VnbWVudGVkQnV0dG9uUHJlc3MiLCJzZWxlY3RlZEtleSIsIml0ZW1zIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJsZW5ndGgiLCJnZXRSb3dTZXR0aW5ncyIsInJvd0FjdGlvblR5cGUiLCJyb3dBY3Rpb25JdGVtIiwiUm93QWN0aW9uSXRlbSIsInByZXNzIiwicm93UHJlc3MiLCJyb3ciLCJSb3dTZXR0aW5ncyIsIm5hdmlnYXRlZCIsInJvd05hdmlnYXRlZCIsImhpZ2hsaWdodCIsInJvd0hpZ2hsaWdodGluZyIsImhpZ2hsaWdodFRleHQiLCJyb3dBY3Rpb25zIiwiVGFibGVSb3dBY3Rpb25UeXBlIiwiTmF2aWdhdGlvbiIsImdldENvbnRleHRNZW51IiwibmF2aWdhdGlvbkluRWRpdE1vZGUiLCJtZW51SXRlbXMiLCJnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUiLCJnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZSIsImdldE9wZW5Jbk5ld1RhYlRlbXBsYXRlIiwiTWVudSIsIml0ZW1TZWxlY3RlZCIsImNvbnRleHRNZW51SXRlbVNlbGVjdGVkIiwiZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51IiwidGFibGVJZCIsIk1lbnVJdGVtIiwic3RhcnRzU2VjdGlvbiIsInRleHQiLCJjb250ZXh0TWVudVNoYXJlVG9Db2xsYWJvcmF0aW9uTWFuYWdlciIsImNvbnRleHRNZW51T3BlbkluTmV3VGFiIiwiZ3JlYXRlclRoYW4iLCJlbmFibGVkRm9yQ29udGV4dE1lbnUiLCJnZXRWYXJpYW50TWFuYWdlbWVudCIsImhlYWRlckxldmVsIiwiVmFyaWFudE1hbmFnZW1lbnQiLCJzaG93U2V0QXNEZWZhdWx0IiwidmFyaWFudFNlbGVjdGVkIiwic2F2ZSIsInZhcmlhbnRTYXZlZCIsImdldFF1aWNrRmlsdGVyIiwicXVpY2tGaWx0ZXJzIiwiZmlsdGVycyIsIlF1aWNrRmlsdGVyU2VsZWN0b3IiLCJwYXRocyIsIm1hcCIsImFubm90YXRpb25QYXRoIiwic2hvd0NvdW50cyIsImdldENvcHlQcm92aWRlciIsInZpc2libGVFeHByZXNzaW9uIiwiZGlzYWJsZUNvcHlUb0NsaXBib2FyZCIsIkNvcHlQcm92aWRlciIsImdldENlbGxTZWxlY3RvciIsImluY2x1ZGVzIiwiQ2VsbFNlbGVjdG9yIiwib3IiLCJyYW5nZUxpbWl0IiwiZ2V0Q3JlYXRpb25Sb3ciLCJjcmVhdGlvbk1vZGUiLCJuYW1lIiwiQ3JlYXRpb25Nb2RlIiwiQ3JlYXRpb25Sb3ciLCJjcmVhdGlvblJvd0FjdGlvbiIsImN1c3RvbURhdGEiLCJjcmVhdGVDdXN0b21EYXRhcyIsInZhbHVlIiwiZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSIsImN1c3RvbVZhbGlkYXRpb25GdW5jdGlvbiIsImFwcGx5IiwiYXBwbHlFbmFibGVkIiwiZ2V0RHJhZ0FuZERyb3BDb25maWciLCJEcmFnRHJvcENvbmZpZyIsImRyb3BQb3NpdGlvbiIsImFsbG93RHJvcEJldHdlZW5Ob2RlcyIsImRyYWdnYWJsZSIsImRyb3BwYWJsZSIsImRyYWdTdGFydCIsImRyYWdTdGFydERvY3VtZW50IiwiZHJhZ0VudGVyIiwiZHJhZ0VudGVyRG9jdW1lbnQiLCJkcm9wIiwiZHJvcERvY3VtZW50IiwiZm9yQ29udGV4dE1lbnUiLCJkYXRhRmllbGQiLCJjb252ZXJ0ZWRNZXRhZGF0YSIsInJlc29sdmVQYXRoIiwidGFyZ2V0IiwiYWN0aW9uQ29udGV4dFBhdGgiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJ2YWx1ZU9mIiwiZGlzcGxheUNvbW1hbmRBY3Rpb24iLCJUYWJsZUhlbHBlciIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiYWN0aW9uUGFyYW1ldGVycyIsIm9uRXhlY3V0ZUFjdGlvbiIsImdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlciIsIm9uRXhlY3V0ZUlCTiIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsIm9uRXhlY3V0ZU1hbmlmZXN0IiwiZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIiLCJpc0lCTkVuYWJsZWQiLCJpc0RhdGFGaWVsZEZvcklCTkVuYWJsZWQiLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNBY3Rpb25FbmFibGVkIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwiQWN0aW9uIiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiaXNFbmFibGVkIiwiZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbiIsImdldENvcmVSZXF1aXJlIiwiY3VzdG9tTW9kdWxlcyIsImFkZGl0aW9uYWxSZXF1aXJlZE1vZHVsZXMiLCJtb2R1bGUiLCJpbmRleCIsImpvaW4iLCJnZXRDb21wdXRlZENvbHVtbiIsImNvbHVtbiIsImVuYWJsZUFuYWx5dGljcyIsImlzRHJhZnRJbmRpY2F0b3IiLCJDb2x1bW4iLCJoZWFkZXJWaXNpYmxlIiwicHJvcGVydHlLZXkiLCJoZWFkZXIiLCJsYWJlbCIsIndpZHRoIiwiRHJhZnRJbmRpY2F0b3IiLCJkcmFmdEluZGljYXRvclR5cGUiLCJPYmplY3RNYXJrZXJWaXNpYmlsaXR5IiwiSWNvbk9ubHkiLCJjb250ZXh0UGF0aCIsImdldFBhdGgiLCJFbnRpdHkiLCJJc0FjdGl2ZSIsIkhhc0RyYWZ0IiwidXNlZEluVGFibGUiLCJ1c2VkSW5BbmFseXRpY2FsVGFibGUiLCJpc1NpdHVhdGlvbnNJbmRpY2F0b3IiLCJTaXR1YXRpb25zSW5kaWNhdG9yIiwiZ2V0U2xvdENvbHVtbiIsImlzUmVhZE9ubHkiLCJ0ZW1wbGF0ZSIsInN0YXJ0c1dpdGgiLCJTbG90Q29sdW1uIiwidGVtcGxhdGVJZCIsImhBbGlnbiIsImhvcml6b250YWxBbGlnbiIsInJlcXVpcmVkIiwiZXh0ZW5kZWRTZXR0aW5ncyIsIlJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyIsImltcG9ydGFuY2UiLCJnZXREcmFmdEluZGljYXRvciIsImZvcm1hdE9wdGlvbnMiLCJmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgiLCJGb3JtRWxlbWVudFdyYXBwZXIiLCJJY29uQW5kVGV4dCIsImdldERyYWZ0SW5kaWNhdG9yVmlzaWJsZUJpbmRpbmciLCJmaWVsZEdyb3VwTmFtZSIsImFyaWFMYWJlbGxlZEJ5IiwiZ2V0U2l0dWF0aW9uSW5kaWNhdG9yIiwiT2JqZWN0U3RhdHVzIiwic2hvd0Vycm9yT2JqZWN0U3RhdHVzIiwiY2xhc3MiLCJzdGF0ZSIsImdldERlZmF1bHREYXRlVGltZVN0eWxlIiwiZGF0YUZpZWxkQ29udGV4dCIsInRhcmdldE9iamVjdCIsImlzRGF0YUZpZWxkIiwiVmFsdWUiLCIkdGFyZ2V0IiwiaXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uIiwiaGFzRGF0YVBvaW50VGFyZ2V0IiwiVGFyZ2V0IiwiZ2V0Q3JlYXRpb25UZW1wbGF0ZSIsImlzVGFibGVSZWFkT25seSIsImZpZWxkTW9kZSIsImNvbHVtbkVkaXRNb2RlIiwiZGF0YUZpZWxkT2JqZWN0IiwicmVhY3RpdmVBcmVhTW9kZSIsInRleHRMaW5lc0VkaXQiLCJ0ZXh0TWF4TGluZXMiLCJ0ZXh0TWF4TGVuZ3RoIiwidGV4dE1heENoYXJhY3RlcnNEaXNwbGF5IiwidGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSIsInRleHRBbGlnbk1vZGUiLCJzZW1hbnRpY0tleVN0eWxlIiwiaGFzRHJhZnRJbmRpY2F0b3IiLCJzaG93SWNvblVybCIsIklubGluZSIsIkljb25VcmwiLCJpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiaXNDdXJyZW5jeU9yVW5pdEFsaWduZWQiLCJkYXRlVGltZVN0eWxlIiwiRmllbGQiLCJ2aElkUHJlZml4IiwiZWRpdE1vZGUiLCJtZXRhUGF0aCIsIndyYXAiLCJjaGFuZ2UiLCJmaWVsZENoYW5nZUluQ3JlYXRpb25Sb3ciLCJGaWVsZEZvcm1hdE9wdGlvbnMiLCJnZXRNYWNyb0ZpZWxkVGVtcGxhdGUiLCJpc0NvbXBhY3RUeXBlIiwidGV4dEFsaWduIiwic2hvd0VtcHR5SW5kaWNhdG9yIiwiY2xhc3NOYW1lIiwiaXNDb25uZWN0ZWRGaWVsZCIsImFyZ3VtZW50cyIsInR5cGVDb25maWciLCJpc0FuYWx5dGljcyIsImZvcklubGluZUNyZWF0aW9uUm93cyIsImNvbXBhY3RTZW1hbnRpY0tleSIsImlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3ciLCJhbmFseXRpY2FsQ29uZmlndXJhdGlvbiIsImFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwiLCJsaXZlQ2hhbmdlIiwiZmllbGRMaXZlQ2hhbmdlIiwic3BsaXQiLCJuYXZpZ2F0ZUFmdGVyQWN0aW9uIiwiaXNOYXZpZ2FibGUiLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUiLCJkYXRhRmllbGRPUCIsImNyZWF0aW9uVGVtcGxhdGUiLCJyZWFkT25seSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzQW5ub3RhdGlvbk9mVGVybSIsInNob3dPbmx5Q2hhcnQiLCJzZXR0aW5ncyIsInNob3dNaWNyb0NoYXJ0TGFiZWwiLCJtaWNyb0NoYXJ0U2l6ZSIsIm1pY3JvQ2hhcnRDb2xsZWN0aW9uIiwiZ2V0TW9kZWwiLCJnZXROYXZpZ2F0aW9uQ29udGV4dCIsIk1pY3JvQ2hhcnQiLCJzaXplIiwiaGlkZU9uTm9EYXRhIiwiaXNNdWx0aVZhbHVlRmllbGQiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsImlzVHJ1dGh5IiwiSXNJbmFjdGl2ZSIsIk11bHRpVmFsdWVGaWVsZEJsb2NrIiwidXNlUGFyZW50QmluZGluZ0NhY2hlIiwiZGlzYWJsZU93blJlcXVlc3RPbk1WRiIsImZpZWxkR3JvdXAiLCJkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dCIsImZpZWxkR3JvdXBDb2xsZWN0aW9uTGVuZ3RoIiwiRGF0YSIsImZpZWxkR3JvdXBEYXRhRmllbGQiLCJmaWVsZEdyb3VwRGF0YUZpZWxkSWR4IiwiZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQiLCJmaWVsZEdyb3VwRGF0YUZpZWxkT1AiLCJmaWVsZEdyb3VwTGFiZWwiLCJGaWVsZEhlbHBlciIsImNvbXB1dGVMYWJlbFRleHQiLCJjb250ZXh0Iiwic2hvd0RhdGFGaWVsZHNMYWJlbCIsInJlc291cmNlQnVuZGxlIiwiTGlicmFyeSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiX2pzeHMiLCJIQm94IiwiZ2V0VmlzaWJsZUV4cHJlc3Npb24iLCJhbGlnbkl0ZW1zIiwiYnVpbGRFeHByZXNzaW9uRm9yQWxpZ25JdGVtcyIsIkxhYmVsIiwiZ2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQiLCJnZXRUZXh0IiwiVkJveCIsImxheW91dERhdGEiLCJGbGV4SXRlbURhdGEiLCJncm93RmFjdG9yIiwiZ2V0Q29sdW1uU3RhYmxlSWQiLCJnZXRNYXJnaW5DbGFzcyIsImRyYWZ0SW5kaWNhdG9yIiwic2l0dWF0aW9uSW5kaWNhdG9yIiwiZ2V0VkJveFZpc2liaWxpdHkiLCJjb2xsZWN0aW9uRmllbGRzSGlkZGVuRXhwcmVzc2lvbiIsImNvbm5lY3RlZEZpZWxkcyIsImNvbm5lY3RlZEZpZWxkc0NvbnRleHQiLCJmaWVsZHNEZWxpbWl0ZXIiLCJnZXREZWxpbWl0ZXIiLCJUZW1wbGF0ZSIsImNvbm5lY3RlZEZpZWxkc0RhdGEiLCJnZXRDb25uZWN0ZWRGaWVsZHNEYXRhIiwiY29ubmVjdGVkRmllbGRzRWxlbWVudCIsImNvbm5lY3RlZEZpZWxkc0VsZW1lbnRJZHgiLCJjb25uZWN0ZWRGaWVsZHNFbGVtZW50Q29udGV4dCIsImZpZWxkVGVtcGxhdGUiLCJzaHJpbmtGYWN0b3IiLCJUZXh0Iiwid3JhcHBpbmciLCJyZW5kZXJXaGl0ZXNwYWNlIiwiaW5uZXJIQm94IiwicmVuZGVyVHlwZSIsImZpdENvbnRhaW5lciIsImp1c3RpZnlDb250ZW50IiwiZ2V0Q29sdW1uVGVtcGxhdGUiLCJnZXREYXRhRmllbGREZWZhdWx0IiwiZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoIiwidGVtcGxhdGVzIiwiZW5hYmxlQXV0b0NvbHVtbldpZHRoIiwid2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIiLCIkQW5ub3RhdGlvblBhdGgiLCJDb21tb25VdGlscyIsImlzU21hbGxEZXZpY2UiLCJnZXRDb2x1bW5XaWR0aCIsImdldFRleHRPbkFjdGlvbkZpZWxkIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1pbldpZHRoIiwiZ2V0Q29sdW1uQWxpZ25tZW50Iiwic2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5IiwiY3JlYXRlQ3VzdG9tRGF0YSIsImdldENvbHVtbnMiLCJjb2x1bW5zIiwiYXZhaWxhYmlsaXR5IiwiTG9nIiwiZXJyb3IiLCJFcnJvciIsImdldERlc2lnbnRpbWUiLCJnZXRNRENQMTNuTW9kZSIsInN0cmluZ01vZGUiLCJUYWJsZVAxM25Nb2RlIiwiQWdncmVnYXRlIiwiU29ydCIsIkZpbHRlciIsIkdyb3VwIiwiZ2V0TURDVGFibGVUZW1wbGF0ZSIsIm5hdmlnYXRpb25JbmZvIiwicm91dGVQYXRoIiwidGFyZ2V0SW5mb3JtYXRpb24iLCJhcHBDb21wb25lbnQiLCJnZXRSb3V0aW5nU2VydmljZSIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIm9wdGlvbnMiLCJvcGVuSW5FZGl0TW9kZSIsImZpbHRlck9uQWN0aXZlRW50aXRpZXMiLCJNb2RlbEhlbHBlciIsImlzT2JqZWN0UGF0aERyYWZ0U3VwcG9ydGVkIiwiZGVsZWdhdGUiLCJnZXREZWxlZ2F0ZSIsImlzQWxwIiwiZW50aXR5TmFtZSIsImN1cnJlbnRIZWFkZXIiLCJoZWFkZXJCaW5kaW5nRXhwcmVzc2lvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckhlYWRlclZpc2libGUiLCJ0YWJUaXRsZSIsIm1vZGVsQ29udGV4dENoYW5nZSIsInRhYmxlQ29udGV4dENoYW5nZSIsImxpbmVJdGVtIiwiZ2V0VWlMaW5lSXRlbU9iamVjdCIsIm5hdmlnYXRpb25QYXRoIiwiaXNTaW5nbGV0b24iLCJkcmFmdCIsImRlc2lnbnRpbWUiLCJvdmVycmlkZVJvd1ByZXNzIiwiYWN0aW9uVHlwZSIsInNob3dDcmVhdGUiLCJjdXJyZW50UGVyc29uYWxpemF0aW9uIiwicGVyc29uYWxpemF0aW9uIiwicDEzbk1vZGUiLCJtb2RlIiwidHJpbSIsImV4Y2x1ZGVHcm91cEZyb21QMTNuIiwibXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMiLCJBY3Rpb25IZWxwZXIiLCJnZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyIsImlubGluZUNyZWF0aW9uUm93Q291bnQiLCJjcmVhdGVBdEVuZCIsImhpZGRlbkZpbHRlcnMiLCJnZXROYXZpZ2F0aW9uQXZhaWxhYmxlTWFwIiwiZXhwb3J0UmVxdWVzdFNpemUiLCJyb3dQcmVzc0hhbmRsZXIiLCJub29wIiwiTURDVGFibGUiLCJzb3J0Q29uZGl0aW9ucyIsImdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJidXN5SW5kaWNhdG9yRGVsYXkiLCJlbmFibGVFeHBvcnQiLCJKU09OIiwicGFyc2UiLCJiZWZvcmVPcGVuQ29udGV4dE1lbnUiLCJhdXRvQmluZE9uSW5pdCIsInVzZUJhc2ljU2VhcmNoIiwiZmlsdGVyQmFyIiwic2VsZWN0aW9uTW9kZSIsInNlbGVjdGlvbkNoYW5nZSIsInNob3dSb3dDb3VudCIsImhlYWRlclN0eWxlIiwidGhyZXNob2xkIiwicGFzdGUiLCJiZWZvcmVFeHBvcnQiLCJ1c2VDb25kZW5zZWRUYWJsZUxheW91dCIsIm11bHRpU2VsZWN0TW9kZSIsInNob3dQYXN0ZUJ1dHRvbiIsImVuYWJsZVBhc3RlIiwiZGF0YVN0YXRlSW5kaWNhdG9yIiwicm93U2V0dGluZ3MiLCJjb250ZXh0TWVudSIsImRyYWdEcm9wQ29uZmlnIiwiY3JlYXRpb25Sb3ciLCJ2YXJpYW50IiwicXVpY2tGaWx0ZXIiLCJjb3B5UHJvdmlkZXIiLCJjZWxsU2VsZWN0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIk1kY1RhYmxlVGVtcGxhdGUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdENoYXJ0LFxuXHRDb25uZWN0ZWRGaWVsZHMsXG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhUG9pbnQsXG5cdEZpZWxkR3JvdXAsXG5cdExpbmVJdGVtLFxuXHRQcmVzZW50YXRpb25WYXJpYW50LFxuXHRTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50XG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7XG5cdFVJQW5ub3RhdGlvblRlcm1zLFxuXHRVSUFubm90YXRpb25UeXBlcyxcblx0dHlwZSBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHR0eXBlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQge1xuXHRhbmQsXG5cdGNvbXBpbGVFeHByZXNzaW9uLFxuXHRjb25zdGFudCxcblx0ZXF1YWwsXG5cdGdyZWF0ZXJUaGFuLFxuXHRpZkVsc2UsXG5cdGlzQ29uc3RhbnQsXG5cdGlzVHJ1dGh5LFxuXHRub3QsXG5cdG9yLFxuXHRwYXRoSW5Nb2RlbFxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mLCBTdHJpY3RQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBGb3JtRWxlbWVudFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0Zvcm1FbGVtZW50V3JhcHBlclwiO1xuaW1wb3J0IHsgQ3JlYXRpb25Nb2RlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHsgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBoYXNEYXRhUG9pbnRUYXJnZXQsIGlzRGF0YUZpZWxkLCBpc0RhdGFGaWVsZEZvckFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZVR5cGUsIFRhYmxlVmlzdWFsaXphdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9UYWJsZVwiO1xuaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdEN1c3RvbUJhc2VkVGFibGVDb2x1bW5cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL0NvbHVtbnNcIjtcbmltcG9ydCB7IFN0YW5kYXJkQWN0aW9uS2V5cywgdHlwZSBTdGFuZGFyZEFjdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi90YWJsZS9TdGFuZGFyZEFjdGlvbnNcIjtcbmltcG9ydCB7IGdldENvbm5lY3RlZEZpZWxkc0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgRW50aXR5LCBVSSwgc2luZ2xldG9uUGF0aFZpc2l0b3IgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVGVybSwgaXNBbm5vdGF0aW9uT2ZUeXBlLCBpc1NpbmdsZXRvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGVuaGFuY2VEYXRhTW9kZWxQYXRoLCBpc1BhdGhVcGRhdGFibGUsIHR5cGUgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0ZVRpbWVTdHlsZSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IHsgaXNNdWx0aVZhbHVlRmllbGQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9VSUZvcm1hdHRlcnNcIjtcbmltcG9ydCB7IGdldENvbW1hbmRFeGVjdXRpb25Gb3JBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9BY3Rpb25Db21tYW5kXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCJzYXAvZmUvbWFjcm9zL0ZpZWxkXCI7XG5pbXBvcnQgTXVsdGlWYWx1ZUZpZWxkQmxvY2sgZnJvbSBcInNhcC9mZS9tYWNyb3MvTXVsdGlWYWx1ZUZpZWxkXCI7XG5pbXBvcnQgeyBjcmVhdGVDdXN0b21EYXRhLCBjcmVhdGVDdXN0b21EYXRhcyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL1RTWFV0aWxzXCI7XG5pbXBvcnQgRHJhZnRJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3MvZHJhZnRJbmRpY2F0b3IvRHJhZnRJbmRpY2F0b3JcIjtcbmltcG9ydCBGaWVsZEhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZywgZ2V0VmlzaWJsZUV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvaGVscGVycy9BY3Rpb25IZWxwZXJcIjtcbmltcG9ydCB7IGJ1aWxkRXhwcmVzc2lvbkZvckhlYWRlclZpc2libGUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9oZWxwZXJzL1RhYmxlVGVtcGxhdGluZ1wiO1xuaW1wb3J0IFNpdHVhdGlvbnNJbmRpY2F0b3IgZnJvbSBcInNhcC9mZS9tYWNyb3Mvc2l0dWF0aW9ucy9TaXR1YXRpb25zSW5kaWNhdG9yXCI7XG5pbXBvcnQgeyBnZXRUYWJsZUFjdGlvbnNUZW1wbGF0ZSwgZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvQWN0aW9uc1RlbXBsYXRpbmdcIjtcbmltcG9ydCBRdWlja0ZpbHRlclNlbGVjdG9yIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1F1aWNrRmlsdGVyU2VsZWN0b3JcIjtcbmltcG9ydCBTbG90Q29sdW1uIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1Nsb3RDb2x1bW5cIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUNyZWF0aW9uT3B0aW9ucyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUNyZWF0aW9uT3B0aW9uc1wiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRVcGxvYWRQbHVnaW4gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS91cGxvYWRUYWJsZS9VcGxvYWRUYWJsZVRlbXBsYXRlXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE9iamVjdFN0YXR1cyBmcm9tIFwic2FwL20vT2JqZWN0U3RhdHVzXCI7XG5pbXBvcnQgU2VnbWVudGVkQnV0dG9uIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b25JdGVtIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25JdGVtXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IE9iamVjdE1hcmtlclZpc2liaWxpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IENlbGxTZWxlY3RvciBmcm9tIFwic2FwL20vcGx1Z2lucy9DZWxsU2VsZWN0b3JcIjtcbmltcG9ydCBDb250ZXh0TWVudVNldHRpbmcgZnJvbSBcInNhcC9tL3BsdWdpbnMvQ29udGV4dE1lbnVTZXR0aW5nXCI7XG5pbXBvcnQgQ29weVByb3ZpZGVyIGZyb20gXCJzYXAvbS9wbHVnaW5zL0NvcHlQcm92aWRlclwiO1xuaW1wb3J0IERhdGFTdGF0ZUluZGljYXRvciBmcm9tIFwic2FwL20vcGx1Z2lucy9EYXRhU3RhdGVJbmRpY2F0b3JcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBMaWJyYXJ5IGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIHsgVGl0bGVMZXZlbCB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBQcmlvcml0eSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IE1EQ1RhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCBUYWJsZVAxM25Nb2RlIGZyb20gXCJzYXAvdWkvbWRjL2VudW1zL1RhYmxlUDEzbk1vZGVcIjtcbmltcG9ydCBUYWJsZVJvd0FjdGlvblR5cGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvVGFibGVSb3dBY3Rpb25UeXBlXCI7XG5pbXBvcnQgUGVyc2lzdGVuY2VQcm92aWRlciBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1BlcnNpc3RlbmNlUHJvdmlkZXJcIjtcbmltcG9ydCBDb2x1bW4gZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ29sdW1uXCI7XG5pbXBvcnQgQ3JlYXRpb25Sb3cgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvQ3JlYXRpb25Sb3dcIjtcbmltcG9ydCBEcmFnRHJvcENvbmZpZyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9EcmFnRHJvcENvbmZpZ1wiO1xuaW1wb3J0IEdyaWRUYWJsZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvR3JpZFRhYmxlVHlwZVwiO1xuaW1wb3J0IFJlc3BvbnNpdmVDb2x1bW5TZXR0aW5ncyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9SZXNwb25zaXZlQ29sdW1uU2V0dGluZ3NcIjtcbmltcG9ydCBSZXNwb25zaXZlVGFibGVUeXBlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jlc3BvbnNpdmVUYWJsZVR5cGVcIjtcbmltcG9ydCBSb3dBY3Rpb25JdGVtIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1Jvd0FjdGlvbkl0ZW1cIjtcbmltcG9ydCBSb3dTZXR0aW5ncyBmcm9tIFwic2FwL3VpL21kYy90YWJsZS9Sb3dTZXR0aW5nc1wiO1xuaW1wb3J0IFRyZWVUYWJsZVR5cGUgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvVHJlZVRhYmxlVHlwZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBNaWNyb0NoYXJ0IGZyb20gXCIuLi9NaWNyb0NoYXJ0XCI7XG5pbXBvcnQgRmllbGRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi9maWVsZC9GaWVsZEZvcm1hdE9wdGlvbnNcIjtcbmltcG9ydCB0eXBlIFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG5leHBvcnQgdHlwZSBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzID0ge1xuXHRtZXRhUGF0aDogQ29udGV4dDtcblx0Y29udmVydGVkTWV0YWRhdGE6IENvbnZlcnRlZE1ldGFkYXRhO1xuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXI7XG5cdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRhYmxlIHR5cGUgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBfY29sbGVjdGlvblxuICogQHBhcmFtIHRhYmxlVHlwZVxuICogQHBhcmFtIHNlbGVjdGlvbkxpbWl0XG4gKiBAcmV0dXJucyBUaGUgdGFibGUgdHlwZVxuICovXG5mdW5jdGlvbiBnZXRUYWJsZVR5cGUoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRfY29sbGVjdGlvbjogQ29udGV4dCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHNlbGVjdGlvbkxpbWl0OiBudW1iZXJcbik6IFJlc3BvbnNpdmVUYWJsZVR5cGUgfCBHcmlkVGFibGVUeXBlIHwgVHJlZVRhYmxlVHlwZSB7XG5cdGNvbnN0IGNvbGxlY3Rpb24gPSBfY29sbGVjdGlvbi5nZXRPYmplY3QoKTtcblx0c3dpdGNoICh0YWJsZVR5cGUpIHtcblx0XHRjYXNlIFwiR3JpZFRhYmxlXCI6XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8R3JpZFRhYmxlVHlwZVxuXHRcdFx0XHRcdHJvd0NvdW50TW9kZT17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnRNb2RlfVxuXHRcdFx0XHRcdHJvd0NvdW50PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5yb3dDb3VudH1cblx0XHRcdFx0XHRzZWxlY3Rpb25MaW1pdD17c2VsZWN0aW9uTGltaXR9XG5cdFx0XHRcdFx0Zml4ZWRDb2x1bW5Db3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZnJvemVuQ29sdW1uQ291bnR9XG5cdFx0XHRcdFx0c2Nyb2xsVGhyZXNob2xkPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5zY3JvbGxUaHJlc2hvbGR9XG5cdFx0XHRcdFx0ZW5hYmxlQ29sdW1uRnJlZXplPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVDb2x1bW5GcmVlemV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcIlRyZWVUYWJsZVwiOlxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFRyZWVUYWJsZVR5cGVcblx0XHRcdFx0XHRyb3dDb3VudE1vZGU9e3RhYmxlRGVmaW5pdGlvbi5jb250cm9sLnJvd0NvdW50TW9kZX1cblx0XHRcdFx0XHRyb3dDb3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wucm93Q291bnR9XG5cdFx0XHRcdFx0Zml4ZWRDb2x1bW5Db3VudD17dGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZnJvemVuQ29sdW1uQ291bnR9XG5cdFx0XHRcdFx0c2Nyb2xsVGhyZXNob2xkPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5zY3JvbGxUaHJlc2hvbGR9XG5cdFx0XHRcdFx0ZW5hYmxlQ29sdW1uRnJlZXplPXt0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVDb2x1bW5GcmVlemV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxSZXNwb25zaXZlVGFibGVUeXBlXG5cdFx0XHRcdFx0c2hvd0RldGFpbHNCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0ZGV0YWlsc0J1dHRvblNldHRpbmc9e1tQcmlvcml0eS5Mb3csIFByaW9yaXR5Lk1lZGl1bSwgUHJpb3JpdHkuTm9uZV19XG5cdFx0XHRcdFx0Z3Jvd2luZ01vZGU9e2NvbGxlY3Rpb24uJGtpbmQgPT09IFwiRW50aXR5U2V0XCIgPyBcIlNjcm9sbFwiIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdHBvcGluTGF5b3V0PXt0YWJsZURlZmluaXRpb24uY29udHJvbC5wb3BpbkxheW91dH1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIERhdGFTYXRlSW5kaWNhdG9yIGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgZGF0YXN0YXRlIGluZGljYXRvclxuICovXG5mdW5jdGlvbiBnZXREYXRhU3RhdGVJbmRpY2F0b3IoaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogRGF0YVN0YXRlSW5kaWNhdG9yIHtcblx0cmV0dXJuIChcblx0XHQ8RGF0YVN0YXRlSW5kaWNhdG9yXG5cdFx0XHRmaWx0ZXI9e2hhbmRsZXJQcm92aWRlci5kYXRhU3RhdGVJbmRpY2F0b3JGaWx0ZXJ9XG5cdFx0XHRlbmFibGVkPXtjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwocGF0aEluTW9kZWwoXCJlbmFibGVUYWJsZURhdGFTdGF0ZUluZGljYXRvclwiLCBcInBhZ2VJbnRlcm5hbFwiKSwgZmFsc2UpKSl9XG5cdFx0XHRlbmFibGVGaWx0ZXJpbmc9e3RydWV9XG5cdFx0XHRkYXRhU3RhdGVDaGFuZ2U9e2hhbmRsZXJQcm92aWRlci5kYXRhU3RhdGVDaGFuZ2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGRyYWcgYW5kIGRyb3AgZW5hYmxlbWVudC5cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aFxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGJpbmRpbmcgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBnZXREcmFnQW5kRHJvcEVuYWJsZWQoXG5cdGNvbnRleHRPYmplY3RQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoPExpbmVJdGVtIHwgU2VsZWN0aW9uUHJlc2VudGF0aW9uVmFyaWFudCB8IFByZXNlbnRhdGlvblZhcmlhbnQ+LFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvblxuKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uID0gaXNQYXRoVXBkYXRhYmxlKGNvbnRleHRPYmplY3RQYXRoLCB7XG5cdFx0aWdub3JlVGFyZ2V0Q29sbGVjdGlvbjogdHJ1ZSxcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblx0Y29uc3QgaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQgPSBpc1BhdGhVcGRhdGFibGUoY29udGV4dE9iamVjdFBhdGgsIHtcblx0XHRhdXRob3JpemVVbnJlc29sdmFibGU6IHRydWUsXG5cdFx0cGF0aFZpc2l0b3I6IChwYXRoOiBzdHJpbmcsIG5hdmlnYXRpb25QYXRoczogc3RyaW5nW10pID0+XG5cdFx0XHRzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb250ZXh0T2JqZWN0UGF0aC5jb252ZXJ0ZWRUeXBlcywgbmF2aWdhdGlvblBhdGhzKVxuXHR9KTtcblxuXHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdC8vIExpc3RSZXBvcnQgY2FzZTogd2UgYWxsb3cgZHJhZyBhbmQgZHJvcCBvbiBkcmFmdC1lbmFibGVkIGVudGl0aWVzXG5cdFx0aWYgKChjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCBhcyBFbnRpdHlTZXQpLmFubm90YXRpb25zLkNvbW1vbj8uRHJhZnRSb290ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBhbmQoXG5cdFx0XHRcdGlzUGF0aFVwZGF0YWJsZU9uTmF2aWdhdGlvbi5fdHlwZSA9PT0gXCJVbnJlc29sdmFibGVcIlxuXHRcdFx0XHRcdD8gaWZFbHNlKGlzQ29uc3RhbnQoaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQpLCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHRcdFx0OiBpc1BhdGhVcGRhdGFibGVPbk5hdmlnYXRpb24sXG5cdFx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSFcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIE9iamVjdFBhZ2UgY2FzZTogd2UgYWxsb3cgZHJhZyBhbmQgZHJvcCBpbiBlZGl0IG1vZGVcblx0XHRyZXR1cm4gYW5kKFxuXHRcdFx0aXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLl90eXBlID09PSBcIlVucmVzb2x2YWJsZVwiXG5cdFx0XHRcdD8gaWZFbHNlKGlzQ29uc3RhbnQoaXNQYXRoVXBkYXRhYmxlT25UYXJnZXQpLCBpc1BhdGhVcGRhdGFibGVPblRhcmdldCwgY29uc3RhbnQodHJ1ZSkpXG5cdFx0XHRcdDogaXNQYXRoVXBkYXRhYmxlT25OYXZpZ2F0aW9uLFxuXHRcdFx0VUkuSXNFZGl0YWJsZSxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzSGllcmFyY2h5UGFyZW50Tm9kZVVwZGF0YWJsZSFcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBlbmRlbnRzKFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHR2YXJpYW50TWFuYWdlbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0XG4pOiBVSTVFbGVtZW50W10ge1xuXHRjb25zdCBpZCA9IHRhYmxlUHJvcGVydGllcy5jb250ZW50SWQ7XG5cdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb247XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBoYW5kbGVyUHJvdmlkZXIgPSBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlcjtcblxuXHRjb25zdCBkZXBlbmRlbnRzOiBVSTVFbGVtZW50W10gPSBbXTtcblx0Y29uc3QgY3V0QWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DdXQpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoY3V0QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIgJiYgdGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3V0XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IGNvcHlBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNvcHkpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoY29weUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDb3B5XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuUGFzdGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAocGFzdGVBY3Rpb24/LnZpc2libGUgIT09IFwiZmFsc2VcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0UGFzdGVIYW5kbGVyKGZhbHNlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlXCJcblx0XHRcdFx0ZW5hYmxlZD17cGFzdGVBY3Rpb24/LmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgY3JlYXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBkZWxldGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkRlbGV0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cblx0aWYgKFxuXHRcdHRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmlzSW5zZXJ0VXBkYXRlQWN0aW9uc1RlbXBsYXRlZCAmJlxuXHRcdGNyZWF0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiICYmXG5cdFx0dGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUgPT09IHVuZGVmaW5lZCAmJlxuXHRcdHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbiA9PT0gZmFsc2Vcblx0KSB7XG5cdFx0Ly8gVGhlIHNob3J0Y3V0IGlzIG5vdCBlbmFibGVkIGluIGNhc2Ugb2YgYSBjcmVhdGUgbWVudSAoaS5lLiB3aGVuIG5vZGVUeXBlIGlzIGRlZmluZWQpXG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldENyZWF0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSwgZmFsc2UpfVxuXHRcdFx0XHR2aXNpYmxlPXtjcmVhdGVBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2NyZWF0ZUFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkNyZWF0ZVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0aWYgKGRlbGV0ZUFjdGlvbj8uaXNUZW1wbGF0ZWQgPT09IFwidHJ1ZVwiKSB7XG5cdFx0ZGVwZW5kZW50cy5wdXNoKFxuXHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0ZXhlY3V0ZT17aGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcihmYWxzZSl9XG5cdFx0XHRcdHZpc2libGU9e2RlbGV0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17ZGVsZXRlQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRjb21tYW5kPVwiRGVsZXRlRW50cnlcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Ly8gTW92ZSB1cCBhbmQgZG93biBhY3Rpb25zXG5cdGNvbnN0IG1vdmVVcEFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZVVwKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0Y29uc3QgbW92ZURvd25BY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVEb3duKSBhcyBTdGFuZGFyZEFjdGlvbiB8IHVuZGVmaW5lZDtcblx0aWYgKFxuXHRcdG1vdmVVcEFjdGlvbiAmJlxuXHRcdG1vdmVEb3duQWN0aW9uICYmXG5cdFx0bW92ZVVwQWN0aW9uLnZpc2libGUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdG1vdmVEb3duQWN0aW9uLnZpc2libGUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIlxuXHQpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TW92ZVVwRG93bkhhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwXCJcblx0XHRcdFx0ZW5hYmxlZD17bW92ZVVwQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e2hhbmRsZXJQcm92aWRlci5nZXRNb3ZlVXBEb3duSGFuZGxlcihmYWxzZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudERvd25cIlxuXHRcdFx0XHRlbmFibGVkPXttb3ZlRG93bkFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXG5cdGZvciAoY29uc3QgYWN0aW9uTmFtZSBpbiB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMpIHtcblx0XHRjb25zdCBhY3Rpb24gPSB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnNbYWN0aW9uTmFtZV07XG5cdFx0Y29uc3QgYWN0aW9uQ29tbWFuZCA9IGdldEFjdGlvbkNvbW1hbmQoXG5cdFx0XHRhY3Rpb25OYW1lLFxuXHRcdFx0YWN0aW9uLFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aFxuXHRcdCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblxuXHRpZiAodmFyaWFudE1hbmFnZW1lbnQgPT09IFwiTm9uZVwiKSB7XG5cdFx0Ly8gUGVyc2lzdGVuY2UgcHJvdmlkZXIgb2ZmZXJzIHBlcnNpc3RpbmcgcGVyc29uYWxpemF0aW9uIGNoYW5nZXMgd2l0aG91dCB2YXJpYW50IG1hbmFnZW1lbnRcblx0XHRkZXBlbmRlbnRzLnB1c2goPFBlcnNpc3RlbmNlUHJvdmlkZXIgaWQ9e2dlbmVyYXRlKFtpZCwgXCJQZXJzaXN0ZW5jZVByb3ZpZGVyXCJdKX0gZm9yPXtpZH0gLz4pO1xuXHR9XG5cblx0ZGVwZW5kZW50cy5wdXNoKDxDb250ZXh0TWVudVNldHRpbmcgc2NvcGU9XCJTZWxlY3Rpb25cIiAvPik7XG5cblx0aWYgKHRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmVuYWJsZVVwbG9hZFBsdWdpbikge1xuXHRcdGRlcGVuZGVudHMucHVzaChnZXRVcGxvYWRQbHVnaW4odGFibGVEZWZpbml0aW9uLCBpZCwgaGFuZGxlclByb3ZpZGVyKSk7XG5cdH1cblxuXHRyZXR1cm4gZGVwZW5kZW50cztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0YWJsZSBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0XG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eVxuICogQHJldHVybnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICovXG5mdW5jdGlvbiBnZXRBY3Rpb25zKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IENvbnRyb2xbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGFjdGlvbnM6IENvbnRyb2xbXSA9IFtdO1xuXHRpZiAodGFibGUuZGlzcGxheVNlZ21lbnRlZEJ1dHRvbikge1xuXHRcdGNvbnN0IGFscEJ1dHRvbkl0ZW1zOiBTZWdtZW50ZWRCdXR0b25JdGVtW10gPSBbXTtcblx0XHRpZiAoQ29tbW9uSGVscGVyLmlzRGVza3RvcCgpKSB7XG5cdFx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSFlCUklEX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdFx0a2V5PVwiSHlicmlkXCJcblx0XHRcdFx0XHRpY29uPVwic2FwLWljb246Ly9jaGFydC10YWJsZS12aWV3XCJcblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGFscEJ1dHRvbkl0ZW1zLnB1c2goXG5cdFx0XHQ8U2VnbWVudGVkQnV0dG9uSXRlbVxuXHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0NIQVJUX1NFR01FTlRFRF9CVVRUT05fSVRFTV9UT09MVElQfVwiXG5cdFx0XHRcdGtleT1cIkNoYXJ0XCJcblx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vYmFyLWNoYXJ0XCJcblx0XHRcdC8+XG5cdFx0KTtcblx0XHRhbHBCdXR0b25JdGVtcy5wdXNoKFxuXHRcdFx0PFNlZ21lbnRlZEJ1dHRvbkl0ZW1cblx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9TRUdNRU5URURfQlVUVE9OX0lURU1fVE9PTFRJUH1cIlxuXHRcdFx0XHRrZXk9XCJUYWJsZVwiXG5cdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3RhYmxlLXZpZXdcIlxuXHRcdFx0Lz5cblx0XHQpO1xuXG5cdFx0YWN0aW9ucy5wdXNoKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0bGF5b3V0SW5mb3JtYXRpb249eyd7IGFnZ3JlZ2F0aW9uTmFtZTogXCJlbmRcIiwgYWxpZ25tZW50OiBcIkVuZFwiIH0nfVxuXHRcdFx0XHR2aXNpYmxlPXtcIns9ICR7cGFnZUludGVybmFsPmFscENvbnRlbnRWaWV3fSA9PT0gJ1RhYmxlJyB9XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiAoXG5cdFx0XHRcdFx0XHQ8U2VnbWVudGVkQnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlNlZ21lbnRlZEJ1dHRvblwiLCBcIlRlbXBsYXRlQ29udGVudFZpZXdcIl0pfVxuXHRcdFx0XHRcdFx0XHRzZWxlY3Q9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnNlZ21lbnRlZEJ1dHRvblByZXNzfVxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZEtleT1cIntwYWdlSW50ZXJuYWw+YWxwQ29udGVudFZpZXd9XCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogYWxwQnV0dG9uSXRlbXNcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvU2VnbWVudGVkQnV0dG9uPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cblx0YWN0aW9ucy5wdXNoKC4uLmdldFRhYmxlQWN0aW9uc1RlbXBsYXRlKHRhYmxlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkVudGl0eSkpO1xuXG5cdHJldHVybiBhY3Rpb25zLmxlbmd0aCA+IDAgPyBhY3Rpb25zIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um93U2V0dGluZ3MoXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRyb3dBY3Rpb25UeXBlOiBUYWJsZVJvd0FjdGlvblR5cGUgfCB1bmRlZmluZWQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFJvd1NldHRpbmdzIHtcblx0Y29uc3Qgcm93QWN0aW9uSXRlbSA9IChcblx0XHQ8Um93QWN0aW9uSXRlbSB0eXBlPXtcIk5hdmlnYXRpb25cIn0gcHJlc3M9e2hhbmRsZXJQcm92aWRlci5yb3dQcmVzc30gdmlzaWJsZT17dGFibGVEZWZpbml0aW9uLmFubm90YXRpb24ucm93Py52aXNpYmxlfSAvPlxuXHQpO1xuXG5cdHJldHVybiAoXG5cdFx0PFJvd1NldHRpbmdzXG5cdFx0XHRuYXZpZ2F0ZWQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93TmF2aWdhdGVkfVxuXHRcdFx0aGlnaGxpZ2h0PXt0YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5yb3c/LnJvd0hpZ2hsaWdodGluZ31cblx0XHRcdGhpZ2hsaWdodFRleHQ9e3RhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8ucm93SGlnaGxpZ2h0aW5nfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdHJvd0FjdGlvbnM6IHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uID8gcm93QWN0aW9uSXRlbSA6IHVuZGVmaW5lZFxuXHRcdFx0fX1cblx0XHQ8L1Jvd1NldHRpbmdzPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udGV4dCBtZW51IGZvciB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHlcbiAqIEBwYXJhbSByb3dBY3Rpb25UeXBlXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIG5hdmlnYXRpb25JbkVkaXRNb2RlXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dCBtZW51XG4gKi9cbmZ1bmN0aW9uIGdldENvbnRleHRNZW51KFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHksXG5cdHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZCxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0bmF2aWdhdGlvbkluRWRpdE1vZGU6IGJvb2xlYW5cbik6IE1lbnUgfCB1bmRlZmluZWQge1xuXHRjb25zdCBtZW51SXRlbXMgPSBnZXRUYWJsZUNvbnRleHRNZW51VGVtcGxhdGUodGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uLCBjb2xsZWN0aW9uRW50aXR5KTtcblx0aWYgKHJvd0FjdGlvblR5cGUgPT09IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uICYmICFuYXZpZ2F0aW9uSW5FZGl0TW9kZSkge1xuXHRcdG1lbnVJdGVtcy5wdXNoKGdldFNoYXJldG9Db2xsYWJvcmF0aW9uTWFuYWdlclRlbXBsYXRlKHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLCB0YWJsZVByb3BlcnRpZXMuY29udGVudElkKSk7XG5cdFx0bWVudUl0ZW1zLnB1c2goZ2V0T3BlbkluTmV3VGFiVGVtcGxhdGUocGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpKTtcblx0fVxuXHRpZiAobWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnUgaXRlbVNlbGVjdGVkPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5jb250ZXh0TWVudUl0ZW1TZWxlY3RlZH0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHRcdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuY29udGV4dE9iamVjdFBhdGgsXG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnU+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcGFyYW0gdGFibGVJZFxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRTaGFyZXRvQ29sbGFib3JhdGlvbk1hbmFnZXJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIsIHRhYmxlSWQ6IHN0cmluZyk6IE1lbnVJdGVtIHtcblx0Ly8gVGhlIHZpc2libGUgcHJvcGVydHkgd2lsbCBiZSBzZXQgYXQgcnVudGltZSB3aGVuIHRoZSBjb2xsYWJvcmF0aW9uIG1hbmFnZXIgaXMgYXZhaWxhYmxlIGFuZCBhbGwgb3RoZXIgY29uZGl0aW9ucyBhcmUgbWV0XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7QVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSSd9XCJcblx0XHRcdHN0YXJ0c1NlY3Rpb249e3RydWV9XG5cdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiQ29udGV4dE1lbnVcIiwgXCJDb2xsYWJvcmF0aW9uTWFuYWdlclwiXSl9XG5cdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX0NPTlRFWFRfTUVOVV9TSEFSRV9UT19DT0xMQUJPUkFUSU9OX01BTkFHRVJ9XCJcblx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuY29udGV4dE1lbnVTaGFyZVRvQ29sbGFib3JhdGlvbk1hbmFnZXJ9XG5cdFx0XHRlbmFibGVkPVwiez0gJHtpbnRlcm5hbD5jb250ZXh0bWVudS9udW1iZXJPZlNlbGVjdGVkQ29udGV4dHN9ID4gMH1cIlxuXHRcdFx0dmlzaWJsZT17ZmFsc2V9XG5cdFx0Lz5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHRlbXBsYXRlIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtLlxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRPcGVuSW5OZXdUYWJUZW1wbGF0ZShoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIpOiBNZW51SXRlbSB7XG5cdC8vIFRoZSAnT3BlbiBpbiBOZXcgVGFiJyBhY3Rpb24gc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGZvciBzdGlja3kgc2Vzc2lvbnMgaW4gZWRpdCBtb2RlXG5cdC8vIEZvciB0aGUgY29udGV4dCBtZW51LCB0aGUgdmlzaWJpbGl0eSBzaG91bGQgYWxzbyBjb25zaWRlciB0aGUgJ2luYWN0aXZlQ29udGV4dCcgcHJvcGVydHk6XG5cdC8vIG9ubHkgd2hlbiBhdCBsZWFzdCBvbmUgc2VsZWN0ZWQgY29udGV4dCBpcyBhY3RpdmUgKGkuZS4gXCJjb250ZXh0bWVudS9pbmFjdGl2ZUNvbnRleHRcIiBpcyBmYWxzZSksIHRoZSBhY3Rpb24gc2hvdWxkIGJlIHZpc2libGUgaW4gdGhlIGNvbnRleHQgbWVudVxuXHQvLyBUaGUgc2Vjb25kIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgdGFibGUgbWFuaWZlc3Qgc2V0dGluZyBcImNyZWF0aW9uTW9kZVwiIGlzIFwiSW5saW5lQ3JlYXRpb25Sb3dzXCJcblx0Y29uc3QgdmlzaWJsZSA9IGFuZChcblx0XHRub3QoYW5kKHBhdGhJbk1vZGVsKFwiL3Nlc3Npb25PblwiLCBcImludGVybmFsXCIpLCBVSS5Jc0VkaXRhYmxlKSksXG5cdFx0bm90KHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaW5hY3RpdmVDb250ZXh0XCIsIFwiaW50ZXJuYWxcIikpXG5cdCk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7QVBJOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSSd9XCJcblx0XHRcdHN0YXJ0c1NlY3Rpb249e3RydWV9XG5cdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX1RBQkxFX0NPTlRFWFRfTUVOVV9PUEVOX0lOX05FV19UQUJ9XCJcblx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuY29udGV4dE1lbnVPcGVuSW5OZXdUYWJ9XG5cdFx0XHRlbmFibGVkPXtncmVhdGVyVGhhbihwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L251bWJlck9mTmF2aWdhYmxlQ29udGV4dHNcIiwgXCJpbnRlcm5hbFwiKSwgMCl9XG5cdFx0XHR2aXNpYmxlPXt2aXNpYmxlfVxuXHRcdC8+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB0ZW1wbGF0ZSBzdHJpbmcgZm9yIHRoZSBNZW51IGRlcGVuZGVudHMuXG4gKiBAcGFyYW0gdGFibGVEZWZpbml0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbnRleHRPYmplY3RQYXRoXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gIHRoZSBNZW51IGRlcGVuZGVudHNcbiAqL1xuZnVuY3Rpb24gZ2V0RGVwZW5kZW50c0ZvckNvbnRleHRNZW51KFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29udGV4dE9iamVjdFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8TGluZUl0ZW0gfCBTZWxlY3Rpb25QcmVzZW50YXRpb25WYXJpYW50IHwgUHJlc2VudGF0aW9uVmFyaWFudD4sXG5cdGNvbGxlY3Rpb246IENvbnRleHRcbik6IFVJNUVsZW1lbnRbXSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRlcGVuZGVudHM6IFVJNUVsZW1lbnRbXSA9IFtdO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjcmVhdGVBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkNyZWF0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjcmVhdGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIiAmJiB0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIodHJ1ZSwgZmFsc2UpfVxuXHRcdFx0XHRjb21tYW5kPVwiQ3JlYXRlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdHZpc2libGU9e2NyZWF0ZUFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17Y3JlYXRlQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBjdXRBY3Rpb24gPSB0YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLkN1dCkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjdXRBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldEN1dEhhbmRsZXIodHJ1ZSl9XG5cdFx0XHRcdGNvbW1hbmQ9XCJDdXQ6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y3V0QWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0Y29uc3QgY29weUFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ29weSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChjb3B5QWN0aW9uPy5pc1RlbXBsYXRlZCA9PT0gXCJ0cnVlXCIpIHtcblx0XHRkZXBlbmRlbnRzLnB1c2goXG5cdFx0XHQ8Q29tbWFuZEV4ZWN1dGlvblxuXHRcdFx0XHRleGVjdXRlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRDb3B5SGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIkNvcHk6OkNvbnRleHRNZW51XCJcblx0XHRcdFx0ZW5hYmxlZD17Y29weUFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdGNvbnN0IHBhc3RlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZSkgYXMgU3RhbmRhcmRBY3Rpb24gfCB1bmRlZmluZWQ7XG5cdGlmIChwYXN0ZUFjdGlvbj8udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmIHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldFBhc3RlSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlBhc3RlOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e3Bhc3RlQWN0aW9uPy5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgZGVsZXRlQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5EZWxldGUpIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdGlmIChkZWxldGVBY3Rpb24/LmlzVGVtcGxhdGVkID09PSBcInRydWVcIikge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERlbGV0ZUJ1dHRvblByZXNzSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0dmlzaWJsZT17ZGVsZXRlQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtkZWxldGVBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Y29tbWFuZD1cIkRlbGV0ZUVudHJ5OjpDb250ZXh0TWVudVwiXG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHQvLyBNb3ZlIHVwIGFuZCBkb3duIGFjdGlvbnNcblx0Y29uc3QgbW92ZVVwQWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmFjdGlvbnMuZmluZCgoYSkgPT4gYS5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXApIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRjb25zdCBtb3ZlRG93bkFjdGlvbiA9IHRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd24pIGFzIFN0YW5kYXJkQWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRpZiAoXG5cdFx0bW92ZVVwQWN0aW9uICYmXG5cdFx0bW92ZURvd25BY3Rpb24gJiZcblx0XHRtb3ZlVXBBY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0bW92ZURvd25BY3Rpb24udmlzaWJsZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiXG5cdCkge1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKHRydWUsIHRydWUpfVxuXHRcdFx0XHRjb21tYW5kPVwiVGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVVcEFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdGRlcGVuZGVudHMucHVzaChcblx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdGV4ZWN1dGU9e3BhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1vdmVVcERvd25IYW5kbGVyKGZhbHNlLCB0cnVlKX1cblx0XHRcdFx0Y29tbWFuZD1cIlRhYmxlTW92ZUVsZW1lbnREb3duOjpDb250ZXh0TWVudVwiXG5cdFx0XHRcdGVuYWJsZWQ9e21vdmVEb3duQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IGFjdGlvbk5hbWUgaW4gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gdGFibGVEZWZpbml0aW9uLmNvbW1hbmRBY3Rpb25zW2FjdGlvbk5hbWVdO1xuXHRcdGNvbnN0IGFjdGlvbkNvbW1hbmQgPSBnZXRBY3Rpb25Db21tYW5kKGFjdGlvbk5hbWUsIGFjdGlvbiwgdHJ1ZSwgcGFyYW1ldGVycywgY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCk7XG5cdFx0aWYgKGFjdGlvbkNvbW1hbmQpIHtcblx0XHRcdGRlcGVuZGVudHMucHVzaChhY3Rpb25Db21tYW5kKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRlcGVuZGVudHMubGVuZ3RoID4gMCA/IGRlcGVuZGVudHMgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBWYXJpYW50TWFuYWdlbWVudCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHZhcmlhbnRNYW5hZ2VtZW50XG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSBoZWFkZXJMZXZlbFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIFZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0VmFyaWFudE1hbmFnZW1lbnQoXG5cdHZhcmlhbnRNYW5hZ2VtZW50OiBzdHJpbmcsXG5cdGlkOiBzdHJpbmcsXG5cdGhlYWRlckxldmVsOiBUaXRsZUxldmVsLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IFZhcmlhbnRNYW5hZ2VtZW50IHwgdW5kZWZpbmVkIHtcblx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIkNvbnRyb2xcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VmFyaWFudE1hbmFnZW1lbnRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFtpZCwgXCJWTVwiXSl9XG5cdFx0XHRcdHNob3dTZXRBc0RlZmF1bHQ9e3RydWV9XG5cdFx0XHRcdHNlbGVjdD17aGFuZGxlclByb3ZpZGVyLnZhcmlhbnRTZWxlY3RlZH1cblx0XHRcdFx0aGVhZGVyTGV2ZWw9e2hlYWRlckxldmVsfVxuXHRcdFx0XHRzYXZlPXtoYW5kbGVyUHJvdmlkZXIudmFyaWFudFNhdmVkfVxuXHRcdFx0XHRmb3I9e1tpZF19XG5cdFx0XHQ+PC9WYXJpYW50TWFuYWdlbWVudD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBRdWlja1ZhcmlhbnRTZWxlY3Rpb24gY29udHJvbCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllcyBUaGUgdGFibGUgcHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIFF1aWNrVmFyaWFudFNlbGVjdGlvbiBjb250cm9sXG4gKi9cbmZ1bmN0aW9uIGdldFF1aWNrRmlsdGVyKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMpOiBRdWlja0ZpbHRlclNlbGVjdG9yIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgcXVpY2tGaWx0ZXJzID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmZpbHRlcnM/LnF1aWNrRmlsdGVycztcblx0aWYgKHF1aWNrRmlsdGVycykge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UXVpY2tGaWx0ZXJTZWxlY3RvclxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlUHJvcGVydGllcy5jb250ZW50SWQsIFwiUXVpY2tGaWx0ZXJDb250YWluZXJcIl0pfVxuXHRcdFx0XHRwYXRocz17cXVpY2tGaWx0ZXJzLnBhdGhzLm1hcCgocGF0aCkgPT4gcGF0aC5hbm5vdGF0aW9uUGF0aCl9XG5cdFx0XHRcdHNob3dDb3VudHM9e3F1aWNrRmlsdGVycy5zaG93Q291bnRzfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIENvcHlQcm92aWRlciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENvcHlQcm92aWRlclxuICovXG5mdW5jdGlvbiBnZXRDb3B5UHJvdmlkZXIodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENvcHlQcm92aWRlciB7XG5cdGNvbnN0IGNvbnRleHRPYmplY3RQYXRoID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoO1xuXG5cdGxldCB2aXNpYmxlRXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRpZiAodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmRpc2FibGVDb3B5VG9DbGlwYm9hcmQpIHtcblx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IGNvbnN0YW50KGZhbHNlKTtcblx0fSBlbHNlIGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdC8vIEZvciBhIFRyZWVUYWJsZSwgdGhlIGNvcHkgYnV0dG9uIHNoYWxsIGJlIHZpc2libGUgb25seSB3aGVuIGRyYWcgYW5kIGRyb3AgaXMgZGlzYWJsZWRcblx0XHRpZiAoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgPT09IGNvbnRleHRPYmplY3RQYXRoLnRhcmdldEVudGl0eVNldCkge1xuXHRcdFx0Ly8gTGlzdFJlcG9ydDogZW5hYmxlIGNvcHkgaWYgdGhlIGVudGl0eSBpcyBub3QgZHJhZnQtZW5hYmxlZFxuXHRcdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCgoY29udGV4dE9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdCA9PT0gdW5kZWZpbmVkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT2JqZWN0UGFnZTogZW5hYmxlIGNvcHkgaW4gcmVhZC1vbmx5XG5cdFx0XHR2aXNpYmxlRXhwcmVzc2lvbiA9IG5vdChVSS5Jc0VkaXRhYmxlKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0dmlzaWJsZUV4cHJlc3Npb24gPSBjb25zdGFudCh0cnVlKTtcblx0fVxuXG5cdHJldHVybiA8Q29weVByb3ZpZGVyIHZpc2libGU9e3Zpc2libGVFeHByZXNzaW9ufSAvPjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIENlbGxTZWxlY3RvciBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHJldHVybnMgVGhlIENlbGxTZWxlY3RvclxuICovXG5mdW5jdGlvbiBnZXRDZWxsU2VsZWN0b3IodGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyk6IENlbGxTZWxlY3RvciB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRpZiAoXG5cdFx0IXRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5kaXNhYmxlQ29weVRvQ2xpcGJvYXJkICYmXG5cdFx0dGFibGVUeXBlICYmXG5cdFx0W1wiUmVzcG9uc2l2ZVRhYmxlXCIsIFwiR3JpZFRhYmxlXCIsIFwiVHJlZVRhYmxlXCJdLmluY2x1ZGVzKHRhYmxlVHlwZSlcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDZWxsU2VsZWN0b3Jcblx0XHRcdFx0ZW5hYmxlZD17b3IoXG5cdFx0XHRcdFx0dGFibGVUeXBlICE9PSBcIlRyZWVUYWJsZVwiLFxuXHRcdFx0XHRcdG5vdChnZXREcmFnQW5kRHJvcEVuYWJsZWQodGFibGVQcm9wZXJ0aWVzLmNvbnRleHRPYmplY3RQYXRoLCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uKSlcblx0XHRcdFx0KX1cblx0XHRcdFx0cmFuZ2VMaW1pdD17MjAwfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBDcmVhdGlvblJvdyBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIHRhYmxlUHJvcGVydGllc1xuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIENyZWF0aW9uUm93XG4gKi9cbmZ1bmN0aW9uIGdldENyZWF0aW9uUm93KHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcik6IENyZWF0aW9uUm93IHwgdW5kZWZpbmVkIHtcblx0aWYgKCh0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5uYW1lIGFzIHN0cmluZykgPT09IENyZWF0aW9uTW9kZS5DcmVhdGlvblJvdykge1xuXHRcdGNvbnN0IGNyZWF0aW9uUm93QWN0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRpb25Sb3cpIGFzXG5cdFx0XHR8IFN0YW5kYXJkQWN0aW9uXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0XHRpZiAoY3JlYXRpb25Sb3dBY3Rpb24/LmlzVGVtcGxhdGVkKSB7XG5cdFx0XHRjb25zdCBjdXN0b21EYXRhID0gY3JlYXRlQ3VzdG9tRGF0YXMoW1xuXHRcdFx0XHR7IGtleTogXCJkaXNhYmxlQWRkUm93QnV0dG9uRm9yRW1wdHlEYXRhXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZGlzYWJsZUFkZFJvd0J1dHRvbkZvckVtcHR5RGF0YSB9LFxuXHRcdFx0XHR7IGtleTogXCJjdXN0b21WYWxpZGF0aW9uRnVuY3Rpb25cIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5jdXN0b21WYWxpZGF0aW9uRnVuY3Rpb24gfVxuXHRcdFx0XSk7XG5cblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxDcmVhdGlvblJvd1xuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCwgQ3JlYXRpb25Nb2RlLkNyZWF0aW9uUm93XSl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Y3JlYXRpb25Sb3dBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0YXBwbHk9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UsIHRydWUpfVxuXHRcdFx0XHRcdGFwcGx5RW5hYmxlZD17Y3JlYXRpb25Sb3dBY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogY3VzdG9tRGF0YVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ3JlYXRpb25Sb3c+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgZHJhZyBhbmQgZHJvcCBjb25maWcgZm9yIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXNcbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBkcmFnIGFuZCBkcm9wIGNvbmZpZ1xuICovXG5mdW5jdGlvbiBnZXREcmFnQW5kRHJvcENvbmZpZyhcblx0dGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBEcmFnRHJvcENvbmZpZyB8IHVuZGVmaW5lZCB7XG5cdGlmICh0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RHJhZ0Ryb3BDb25maWdcblx0XHRcdFx0ZW5hYmxlZD17Y29tcGlsZUV4cHJlc3Npb24oZ2V0RHJhZ0FuZERyb3BFbmFibGVkKHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aCwgdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbikpfVxuXHRcdFx0XHRkcm9wUG9zaXRpb249e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hbGxvd0Ryb3BCZXR3ZWVuTm9kZXMgPT09IHRydWUgPyBcIk9uT3JCZXR3ZWVuXCIgOiBcIk9uXCJ9XG5cdFx0XHRcdGRyYWdnYWJsZT17dHJ1ZX1cblx0XHRcdFx0ZHJvcHBhYmxlPXt0cnVlfVxuXHRcdFx0XHRkcmFnU3RhcnQ9e2hhbmRsZXJQcm92aWRlci5kcmFnU3RhcnREb2N1bWVudH1cblx0XHRcdFx0ZHJhZ0VudGVyPXtoYW5kbGVyUHJvdmlkZXIuZHJhZ0VudGVyRG9jdW1lbnR9XG5cdFx0XHRcdGRyb3A9e2hhbmRsZXJQcm92aWRlci5kcm9wRG9jdW1lbnR9XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYWN0aW9uQ29tbWFuZCBmb3IgdGhlIHRhYmxlLlxuICogQHBhcmFtIGFjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEBwYXJhbSBjb250ZXh0T2JqZWN0UGF0aFxuICogQHJldHVybnMgVGhlIGFjdGlvbkNvbW1hbmRcbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uQ29tbWFuZChcblx0YWN0aW9uTmFtZTogc3RyaW5nLFxuXHRhY3Rpb246IEN1c3RvbUFjdGlvbixcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdHRhYmxlRGVmaW5pdGlvbjogVGFibGVWaXN1YWxpemF0aW9uLFxuXHRjb250ZXh0T2JqZWN0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aDxMaW5lSXRlbSB8IFNlbGVjdGlvblByZXNlbnRhdGlvblZhcmlhbnQgfCBQcmVzZW50YXRpb25WYXJpYW50PlxuKTogQ29tbWFuZEV4ZWN1dGlvbiB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBhY3Rpb25Db250ZXh0UGF0aCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQocGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISlcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IGFjdGlvbkNvbnRleHRQYXRoID8gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uQ29udGV4dFBhdGgpIDogdW5kZWZpbmVkO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dCA/IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uKSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uKT8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBpc09wZXJhdGlvbkF2YWlsYWJsZSA9XG5cdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pPy5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdGNvbnN0IGRpc3BsYXlDb21tYW5kQWN0aW9uID0gYWN0aW9uLnR5cGUgPT09IFwiRm9yQWN0aW9uXCIgPyBpc0JvdW5kICE9PSB0cnVlIHx8IGlzT3BlcmF0aW9uQXZhaWxhYmxlIDogdHJ1ZTtcblx0Y29uc3QgZW5hYmxlZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5lbmFibGVkIDogYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudTtcblx0aWYgKGRpc3BsYXlDb21tYW5kQWN0aW9uICYmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCBjb250ZXh0T2JqZWN0UGF0aCkpKSB7XG5cdFx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblxuXHRcdGNvbnN0IGFjdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRvbkV4ZWN1dGVBY3Rpb246IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihcblx0XHRcdFx0ZGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFjdGlvbixcblx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQpLFxuXHRcdFx0b25FeGVjdXRlSUJOOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIoYWN0aW9uLCBmYWxzZSksXG5cdFx0XHRvbkV4ZWN1dGVNYW5pZmVzdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uLCBmb3JDb250ZXh0TWVudSksXG5cdFx0XHRpc0lCTkVuYWJsZWQ6XG5cdFx0XHRcdGVuYWJsZWQgPz9cblx0XHRcdFx0VGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHsgY29sbGVjdGlvbjogY29sbGVjdGlvbiwgdGFibGVEZWZpbml0aW9uOiB0YWJsZURlZmluaXRpb24gfSxcblx0XHRcdFx0XHRkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0XHRcdFx0XHQhIShkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKS5SZXF1aXJlc0NvbnRleHQsXG5cdFx0XHRcdFx0KGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pLk5hdmlnYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnVcblx0XHRcdFx0KSxcblx0XHRcdGlzQWN0aW9uRW5hYmxlZDpcblx0XHRcdFx0ZW5hYmxlZCA/P1xuXHRcdFx0XHRUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdChkYXRhRmllbGQhIGFzIERhdGFGaWVsZEZvckFjdGlvbikuQWN0aW9uLFxuXHRcdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0UGF0aCxcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0XHQpLFxuXHRcdFx0aXNFbmFibGVkOiBlbmFibGVkXG5cdFx0fTtcblx0XHRyZXR1cm4gZ2V0Q29tbWFuZEV4ZWN1dGlvbkZvckFjdGlvbihjb21tYW5kLCB0YWJsZURlZmluaXRpb24uY29tbWFuZEFjdGlvbnMhW2FjdGlvbk5hbWVdLCBhY3Rpb25QYXJhbWV0ZXJzKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgdGVtcGxhdGUgc3RyaW5nIGZvciB0aGUgcmVxdWlyZWQgbW9kdWxlcy5cbiAqIEBwYXJhbSB0YWJsZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHJlcXVpcmVkIG1vZHVsZXNcbiAqL1xuZnVuY3Rpb24gZ2V0Q29yZVJlcXVpcmUodGFibGVEZWZpbml0aW9uOiBUYWJsZVZpc3VhbGl6YXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXN0b21Nb2R1bGVzID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYWRkaXRpb25hbFJlcXVpcmVkTW9kdWxlcyA/PyBbXTtcblxuXHRyZXR1cm4gYHtUYWJsZVJ1bnRpbWU6ICdzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlUnVudGltZScsIEFQSTogJ3NhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUEknJHtjdXN0b21Nb2R1bGVzXG5cdFx0Lm1hcCgobW9kdWxlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IGAsIGN1c3RvbU1vZHVsZSR7aW5kZXggKyAxfTogJyR7bW9kdWxlfSdgKVxuXHRcdC5qb2luKFwiXCIpfX1gO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29tcHV0ZWQgY29sdW1uLlxuICogQ3VycmVudGx5LCB0aGlzIHJlcHJlc2VudHMgb25seSB0aGUgRHJhZnRJbmRpY2F0b3IgYW5kIHRoZSBTaXR1YXRpb25zSW5kaWNhdG9yLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb21wdXRlZCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dCB1c2VkIGZvciBjb250ZXh0IHBhdGhcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEByZXR1cm5zIFRoZSBjb21wdXRlZCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wdXRlZENvbHVtbihcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IENvbXB1dGVkVGFibGVDb2x1bW4sXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZFxuKTogQ29sdW1uIHwgdW5kZWZpbmVkIHtcblx0aWYgKGNvbHVtbi5pc0RyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJkcmFmdFN0YXR1c1wiXSl9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHRcdGhlYWRlcj17Y29sdW1uLmxhYmVsfVxuXHRcdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdFx0d2lkdGg9XCIzZW1cIlxuXHRcdFx0PlxuXHRcdFx0XHQ8RHJhZnRJbmRpY2F0b3Jcblx0XHRcdFx0XHRkcmFmdEluZGljYXRvclR5cGU9e09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbk9ubHl9XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdHZpc2libGU9e29yKG5vdChFbnRpdHkuSXNBY3RpdmUpLCBFbnRpdHkuSGFzRHJhZnQpfVxuXHRcdFx0XHRcdHVzZWRJblRhYmxlPXt0cnVlfVxuXHRcdFx0XHRcdHVzZWRJbkFuYWx5dGljYWxUYWJsZT17ZW5hYmxlQW5hbHl0aWNzfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Db2x1bW4+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChjb2x1bW4uaXNTaXR1YXRpb25zSW5kaWNhdG9yKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb2x1bW5cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgXCJjb21wdXRlZENvbHVtbnNcIiwgXCJzaXR1YXRpb25zSW5kaWNhdG9yXCJdKX1cblx0XHRcdFx0cHJvcGVydHlLZXk9e2NvbHVtbi5uYW1lfVxuXHRcdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbH1cblx0XHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRcdGhlYWRlclZpc2libGU9e2ZhbHNlfVxuXHRcdFx0XHR3aWR0aD1cIjRlbVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxTaXR1YXRpb25zSW5kaWNhdG9yIGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX0gLz5cblx0XHRcdDwvQ29sdW1uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgc2xvdCBjb2x1bW4uXG4gKiBUaGlzIGNvbHVtbiB3aWxsIGVpdGhlciByZXVzZSBhIHRlbXBsYXRlIGNvbnRyb2wgdGhhdCBpcyBkZWZpbmVkIGF0IHJ1bnRpbWUgKHRlbXBsYXRlSWQgY2FzZSksIG9yIGRlZmluZSBhIHNsb3Qgd2hlcmUgdGhlIFhNTCBjb250ZW50IGlzIGNvcGllZC5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgc2xvdCBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGlzUmVhZE9ubHkgV2hldGhlciB0aGUgdGFibGUgaXMgcmVhZCBvbmx5XG4gKiBAcmV0dXJucyBUaGUgc2xvdCBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbG90Q29sdW1uKHRhYmxlSWQ6IHN0cmluZywgY29sdW1uOiBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCBpc1JlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkKTogQ29sdW1uIHtcblx0Y29uc3QgdGVtcGxhdGUgPVxuXHRcdHR5cGVvZiBjb2x1bW4udGVtcGxhdGUgPT09IFwic3RyaW5nXCIgJiYgIWNvbHVtbi50ZW1wbGF0ZT8uc3RhcnRzV2l0aChcIjxcIikgPyAoXG5cdFx0XHQ8U2xvdENvbHVtbiB0ZW1wbGF0ZUlkPXtjb2x1bW4udGVtcGxhdGV9IC8+XG5cdFx0KSA6IChcblx0XHRcdGNvbHVtbi50ZW1wbGF0ZVxuXHRcdCk7XG5cdHJldHVybiAoXG5cdFx0PENvbHVtblxuXHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIkNcIiwgY29sdW1uLmlkXSl9XG5cdFx0XHRwcm9wZXJ0eUtleT17Y29sdW1uLm5hbWV9XG5cdFx0XHR3aWR0aD17Y29sdW1uLndpZHRofVxuXHRcdFx0aEFsaWduPXtjb2x1bW4uaG9yaXpvbnRhbEFsaWdufVxuXHRcdFx0aGVhZGVyPXtjb2x1bW4uaGVhZGVyfVxuXHRcdFx0dG9vbHRpcD17Y29sdW1uLnRvb2x0aXB9XG5cdFx0XHRyZXF1aXJlZD17aXNSZWFkT25seSA/IHVuZGVmaW5lZCA6IGNvbHVtbi5yZXF1aXJlZH1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlXG5cdFx0XHR9fVxuXHRcdDwvQ29sdW1uPlxuXHQpO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIHRoZSBEcmFmdEluZGljYXRvci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBEcmFmdEluZGljYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERyYWZ0SW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogRm9ybUVsZW1lbnRXcmFwcGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5EcmFmdFJvb3RcIikgJiZcblx0XHRjb2xsZWN0aW9uLmdldE9iamVjdChcIi4vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TZW1hbnRpY0tleVwiKSAmJlxuXHRcdGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGhcblx0KSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dH1cblx0XHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0dmlzaWJsZT17Z2V0RHJhZnRJbmRpY2F0b3JWaXNpYmxlQmluZGluZyhjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cE5hbWUpfVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbXCJ0aGlzPmFyaWFMYWJlbGxlZEJ5XCJdfVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9Gb3JtRWxlbWVudFdyYXBwZXI+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgU2l0dWF0aW9uSW5kaWNhdG9yIE9iamVjdFN0YXR1cy5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIE9iamVjdFN0YXR1cy5cbiAqL1xuZnVuY3Rpb24gZ2V0U2l0dWF0aW9uSW5kaWNhdG9yKGNvbGxlY3Rpb246IENvbnRleHQsIGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uKTogT2JqZWN0U3RhdHVzIHwgdW5kZWZpbmVkIHtcblx0aWYgKFxuXHRcdGNvbGxlY3Rpb24uZ2V0T2JqZWN0KFwiLi9AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljS2V5XCIpICYmXG5cdFx0Y29sdW1uLmZvcm1hdE9wdGlvbnM/LmZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aFxuXHQpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE9iamVjdFN0YXR1c1xuXHRcdFx0XHR2aXNpYmxlPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzfVxuXHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPkNvbnRhaW5zX0Vycm9yc31cIlxuXHRcdFx0XHRzdGF0ZT1cIkVycm9yXCJcblx0XHRcdC8+XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGRlZmF1bHQgZGF0ZS10aW1lIGZvcm1hdCBzdHlsZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gZGF0YSBmaWVsZCBjb250ZXh0LlxuICogQHBhcmFtIGRhdGFGaWVsZENvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGRhdGEgZmllbGRcbiAqIEByZXR1cm5zIFJldHVybnMgJ3Nob3J0JyBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGZpZWxkIGlzIG9mIHRoZSB0eXBlICdFZG0uVGltZU9mRGF5Jywgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCk6IERhdGVUaW1lU3R5bGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YXJnZXRPYmplY3QgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YUZpZWxkQWJzdHJhY3RUeXBlcz4oZGF0YUZpZWxkQ29udGV4dCkudGFyZ2V0T2JqZWN0O1xuXHRpZiAoaXNEYXRhRmllbGQodGFyZ2V0T2JqZWN0KSAmJiB0YXJnZXRPYmplY3QuVmFsdWU/LiR0YXJnZXQ/LnR5cGUgPT09IFwiRWRtLlRpbWVPZkRheVwiKSB7XG5cdFx0cmV0dXJuIFwic2hvcnRcIjtcblx0fVxuXHRpZiAoXG5cdFx0aXNEYXRhRmllbGRGb3JBbm5vdGF0aW9uKHRhcmdldE9iamVjdCkgJiZcblx0XHRoYXNEYXRhUG9pbnRUYXJnZXQodGFyZ2V0T2JqZWN0KSAmJlxuXHRcdCh0YXJnZXRPYmplY3QuVGFyZ2V0LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWUuJHRhcmdldC50eXBlID09PSBcIkVkbS5UaW1lT2ZEYXlcIlxuXHQpIHtcblx0XHRyZXR1cm4gXCJzaG9ydFwiO1xuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGNyZWF0aW9uIHJvdy5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gY3JlYXRpb25Nb2RlIFRoZSBjcmVhdGlvbiBtb2RlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gY29udGV4dFxuICogQHBhcmFtIGRhdGFGaWVsZCBUaGUgZGF0YSBmaWVsZCBjb250ZXh0XG4gKiBAcGFyYW0gZmllbGRNb2RlIFRoZSBmaWVsZCBtb2RlXG4gKiBAcGFyYW0gZW5hYmxlQW5hbHl0aWNzIFdoZXRoZXIgYW5hbHl0aWNzIGFyZSBlbmFibGVkXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIHJvdy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGNyZWF0aW9uTW9kZTogUHJvcGVydGllc09mPFRhYmxlQ3JlYXRpb25PcHRpb25zPiB8IHVuZGVmaW5lZCxcblx0aXNUYWJsZVJlYWRPbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb2xsZWN0aW9uOiBDb250ZXh0LFxuXHRkYXRhRmllbGQ6IENvbnRleHQsXG5cdGZpZWxkTW9kZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRlbmFibGVBbmFseXRpY3M6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKChjcmVhdGlvbk1vZGU/Lm5hbWUgYXMgc3RyaW5nKSA9PT0gXCJDcmVhdGlvblJvd1wiKSB7XG5cdFx0bGV0IGNvbHVtbkVkaXRNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0c3dpdGNoIChpc1RhYmxlUmVhZE9ubHkpIHtcblx0XHRcdGNhc2UgdHJ1ZTpcblx0XHRcdFx0Y29sdW1uRWRpdE1vZGUgPSBcIkRpc3BsYXlcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGZhbHNlOlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRWRpdGFibGVcIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRjb2x1bW5FZGl0TW9kZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNvbnN0IGRhdGFGaWVsZE9iamVjdCA9IGRhdGFGaWVsZC5nZXRPYmplY3QoKTtcblxuXHRcdGNvbnN0IHJlYWN0aXZlQXJlYU1vZGU6IFwiSW5saW5lXCIgfCBcIk92ZXJsYXlcIiB8IHVuZGVmaW5lZCA9IHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT3ZlcmxheVwiIDogdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgZm9ybWF0T3B0aW9ucyA9IHtcblx0XHRcdGZpZWxkTW9kZTogZmllbGRNb2RlLFxuXHRcdFx0dGV4dExpbmVzRWRpdDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXQsXG5cdFx0XHR0ZXh0TWF4TGluZXM6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0TWF4TGluZXMsXG5cdFx0XHR0ZXh0TWF4TGVuZ3RoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aCxcblx0XHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHRcdHRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXk6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy50ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5LFxuXHRcdFx0dGV4dEFsaWduTW9kZTogXCJUYWJsZVwiLFxuXHRcdFx0c2VtYW50aWNLZXlTdHlsZTogdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPYmplY3RJZGVudGlmaWVyXCIgOiBcIkxhYmVsXCIsXG5cdFx0XHRoYXNEcmFmdEluZGljYXRvcjogY29sdW1uLmZvcm1hdE9wdGlvbnM/Lmhhc0RyYWZ0SW5kaWNhdG9yLFxuXHRcdFx0ZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8uZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoLFxuXHRcdFx0ZmllbGRHcm91cE5hbWU6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSxcblx0XHRcdHNob3dJY29uVXJsOiBkYXRhRmllbGRPYmplY3Q/LklubGluZSAmJiAhIWRhdGFGaWVsZE9iamVjdD8uSWNvblVybCxcblx0XHRcdGlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGU6IGVuYWJsZUFuYWx5dGljcyA/PyBmYWxzZSxcblx0XHRcdGlzQ3VycmVuY3lPclVuaXRBbGlnbmVkOiB0cnVlLFxuXHRcdFx0ZGF0ZVRpbWVTdHlsZTogZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkKSxcblx0XHRcdHJlYWN0aXZlQXJlYU1vZGU6IHJlYWN0aXZlQXJlYU1vZGVcblx0XHR9O1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWVsZFxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7VGFibGVSdW50aW1lOiAnc2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZVJ1bnRpbWUnfVwiXG5cdFx0XHRcdHZoSWRQcmVmaXg9e2dlbmVyYXRlKFt0YWJsZUlkLCBcIlRhYmxlVmFsdWVIZWxwXCJdKX1cblx0XHRcdFx0ZWRpdE1vZGU9e2NvbHVtbkVkaXRNb2RlfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdG1ldGFQYXRoPXtkYXRhRmllbGQuZ2V0UGF0aCgpfVxuXHRcdFx0XHR3cmFwPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJ9XG5cdFx0XHRcdGNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmZpZWxkQ2hhbmdlSW5DcmVhdGlvblJvd31cblx0XHRcdFx0c2hvd0Vycm9yT2JqZWN0U3RhdHVzPXtjb2x1bW4uZm9ybWF0T3B0aW9ucz8uc2hvd0Vycm9yT2JqZWN0U3RhdHVzIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RmllbGRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9GaWVsZD5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG1hY3JvczpGaWVsZCBpbnNpZGUgdGhlIGNvbHVtbi5cbiAqIEBwYXJhbSB0YWJsZUlkIFRoZSB0YWJsZSBJRFxuICogQHBhcmFtIHRhYmxlRGVmaW5pdGlvbiBUaGUgdGFibGUgZGVmaW5pdGlvblxuICogQHBhcmFtIGNvbHVtbiBUaGUgY29sdW1uIGRlZmluaXRpb25cbiAqIEBwYXJhbSBkYXRhRmllbGRDb250ZXh0IFRoZSBkYXRhIGZpZWxkIGNvbnRleHRcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHRcbiAqIEBwYXJhbSBlbmFibGVBbmFseXRpY3MgV2hldGhlciBhbmFseXRpY3MgYXJlIGVuYWJsZWRcbiAqIEBwYXJhbSB0YWJsZVR5cGUgVGhlIHR5cGUgb2YgdGhlIHRhYmxlXG4gKiBAcGFyYW0gaXNUYWJsZVJlYWRPbmx5IFdoZXRoZXIgdGhlIHRhYmxlIGlzIHJlYWQgb25seVxuICogQHBhcmFtIGNyZWF0aW9uTW9kZSBUaGUgY3JlYXRpb24gbW9kZVxuICogQHBhcmFtIGZpZWxkTW9kZSBUaGUgZmllbGQgbW9kZVxuICogQHBhcmFtIGlzQ29tcGFjdFR5cGUgV2hldGhlciB0aGUgdGFibGUgaXMgY29tcGFjdFxuICogQHBhcmFtIHRleHRBbGlnbiBUaGUgdGV4dCBhbGlnbm1lbnRcbiAqIEBwYXJhbSBhcmlhTGFiZWxsZWRCeSBUaGUgYXJpYSBsYWJlbGxlZCBieVxuICogQHBhcmFtIHNob3dFbXB0eUluZGljYXRvciBXaGV0aGVyIHRvIHNob3cgdGhlIGVtcHR5IGluZGljYXRvclxuICogQHBhcmFtIGNsYXNzTmFtZVxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZURlZmluaXRpb246IFRhYmxlVmlzdWFsaXphdGlvbixcblx0Y29sdW1uOiBBbm5vdGF0aW9uVGFibGVDb2x1bW4sXG5cdGRhdGFGaWVsZENvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb246IENvbnRleHQsXG5cdGVuYWJsZUFuYWx5dGljczogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdGlzVGFibGVSZWFkT25seTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y3JlYXRpb25Nb2RlOiBQcm9wZXJ0aWVzT2Y8VGFibGVDcmVhdGlvbk9wdGlvbnM+IHwgdW5kZWZpbmVkLFxuXHRmaWVsZE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0aXNDb21wYWN0VHlwZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0dGV4dEFsaWduOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdHNob3dFbXB0eUluZGljYXRvcjogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcixcblx0aXNDb25uZWN0ZWRGaWVsZCA9IGZhbHNlXG4pOiBzdHJpbmcge1xuXHRjb25zdCBkYXRhRmllbGRPYmplY3QgPSBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRsZXQgY29sdW1uRWRpdE1vZGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0c3dpdGNoIChpc1RhYmxlUmVhZE9ubHkpIHtcblx0XHRjYXNlIHRydWU6XG5cdFx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRGlzcGxheVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBmYWxzZTpcblx0XHRcdGNvbHVtbkVkaXRNb2RlID0gXCJFZGl0YWJsZVwiO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbHVtbkVkaXRNb2RlID0gdW5kZWZpbmVkO1xuXHR9XG5cdGlmICh0YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVVcGxvYWRQbHVnaW4gJiYgY29sdW1uLnR5cGVDb25maWc/LmNsYXNzTmFtZSA9PT0gXCJFZG0uU3RyZWFtXCIpIHtcblx0XHRjb2x1bW5FZGl0TW9kZSA9IFwiRGlzcGxheVwiO1xuXHR9XG5cblx0Y29uc3QgcmVhY3RpdmVBcmVhTW9kZTogXCJJbmxpbmVcIiB8IFwiT3ZlcmxheVwiIHwgdW5kZWZpbmVkID0gdGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiA/IFwiT3ZlcmxheVwiIDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0ZmllbGRNb2RlOiBmaWVsZE1vZGUsXG5cdFx0dGV4dExpbmVzRWRpdDogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRMaW5lc0VkaXQsXG5cdFx0dGV4dE1heExpbmVzOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExpbmVzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExpbmVzLFxuXHRcdHRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheTogY29sdW1uLmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSxcblx0XHR0ZXh0TWF4TGVuZ3RoOiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dE1heExlbmd0aCxcblx0XHR0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5OiBjb2x1bW4uZm9ybWF0T3B0aW9ucz8udGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSxcblx0XHR0ZXh0QWxpZ25Nb2RlOiBcIlRhYmxlXCIsXG5cdFx0c2hvd0VtcHR5SW5kaWNhdG9yOiBzaG93RW1wdHlJbmRpY2F0b3IsXG5cdFx0c2VtYW50aWNLZXlTdHlsZTogdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gXCJPYmplY3RJZGVudGlmaWVyXCIgOiBcIkxhYmVsXCIsXG5cdFx0aGFzRHJhZnRJbmRpY2F0b3I6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5oYXNEcmFmdEluZGljYXRvcixcblx0XHRmaWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGg6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgsXG5cdFx0ZmllbGRHcm91cE5hbWU6IGNvbHVtbi5mb3JtYXRPcHRpb25zPy5maWVsZEdyb3VwTmFtZSxcblx0XHRzaG93SWNvblVybDogZGF0YUZpZWxkT2JqZWN0Py5JbmxpbmUgJiYgISFkYXRhRmllbGRPYmplY3Q/Lkljb25VcmwsXG5cdFx0aWdub3JlTmF2aWdhdGlvbkF2YWlsYWJsZTogZW5hYmxlQW5hbHl0aWNzID8/IGZhbHNlLFxuXHRcdGlzQW5hbHl0aWNzOiBlbmFibGVBbmFseXRpY3MsXG5cdFx0Zm9ySW5saW5lQ3JlYXRpb25Sb3dzOiBjcmVhdGlvbk1vZGU/Lm5hbWUgPT09IFwiSW5saW5lQ3JlYXRpb25Sb3dzXCIsXG5cdFx0aXNDdXJyZW5jeU9yVW5pdEFsaWduZWQ6IGlzQ29ubmVjdGVkRmllbGQgPyBmYWxzZSA6IHRydWUsXG5cdFx0Y29tcGFjdFNlbWFudGljS2V5OiBpc0NvbXBhY3RUeXBlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBgJHtpc0NvbXBhY3RUeXBlfWAsXG5cdFx0ZGF0ZVRpbWVTdHlsZTogZ2V0RGVmYXVsdERhdGVUaW1lU3R5bGUoZGF0YUZpZWxkQ29udGV4dCksXG5cdFx0aXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdzogdGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwsXG5cdFx0cmVhY3RpdmVBcmVhTW9kZTogcmVhY3RpdmVBcmVhTW9kZVxuXHR9O1xuXHRyZXR1cm4gKFxuXHRcdDxGaWVsZFxuXHRcdFx0dmhJZFByZWZpeD17Z2VuZXJhdGUoW3RhYmxlSWQsIFwiVGFibGVWYWx1ZUhlbHBcIl0pfVxuXHRcdFx0ZWRpdE1vZGU9e2NvbHVtbkVkaXRNb2RlfVxuXHRcdFx0Y29udGV4dFBhdGg9e2NvbGxlY3Rpb24uZ2V0UGF0aCgpfVxuXHRcdFx0bWV0YVBhdGg9e2RhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpfVxuXHRcdFx0dGV4dEFsaWduPXtpc0Nvbm5lY3RlZEZpZWxkID8gXCJMZWZ0XCIgOiB0ZXh0QWxpZ259XG5cdFx0XHR3cmFwPXt0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCJ9XG5cdFx0XHRjbGFzcz17Y2xhc3NOYW1lfVxuXHRcdFx0bGl2ZUNoYW5nZT17aGFuZGxlclByb3ZpZGVyLmZpZWxkTGl2ZUNoYW5nZX1cblx0XHRcdGFyaWFMYWJlbGxlZEJ5PXthcmlhTGFiZWxsZWRCeSA/IGFyaWFMYWJlbGxlZEJ5LnNwbGl0KFwiIFwiKSA6IHVuZGVmaW5lZH1cblx0XHRcdG5hdmlnYXRlQWZ0ZXJBY3Rpb249e2NvbHVtbi5pc05hdmlnYWJsZX1cblx0XHRcdHNob3dFcnJvck9iamVjdFN0YXR1cz17Y29sdW1uLmZvcm1hdE9wdGlvbnM/LnNob3dFcnJvck9iamVjdFN0YXR1cyBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRkaXNhYmxlU3RyaWN0SGFuZGxpbmc9e2NvbHVtbi5kaXNhYmxlU3RyaWN0SGFuZGxpbmd9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Zm9ybWF0T3B0aW9uczogPEZpZWxkRm9ybWF0T3B0aW9ucyB7Li4uZm9ybWF0T3B0aW9uc30gLz5cblx0XHRcdH19XG5cdFx0PC9GaWVsZD5cblx0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgdGhlIHRlbXBsYXRlIGZvciB0aGUgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRoZSB0YWJsZSBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0gY29sdW1uIFRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICogQHBhcmFtIGRhdGFGaWVsZE9QIFRoZSBkYXRhIGZpZWxkIG9iamVjdCBwYXRoXG4gKiBAcGFyYW0gZGF0YUZpZWxkQ29udGV4dCBUaGUgZGF0YSBmaWVsZCBjb250ZXh0XG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0XG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbHVtbi5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29sdW1uQ29udGVudFRlbXBsYXRlKFxuXHR0YWJsZUlkOiBzdHJpbmcsXG5cdHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbHVtbjogQW5ub3RhdGlvblRhYmxlQ29sdW1uLFxuXHRkYXRhRmllbGRPUDogRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPixcblx0ZGF0YUZpZWxkQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiB7IHRlbXBsYXRlOiBzdHJpbmc7IGNyZWF0aW9uVGVtcGxhdGU/OiBzdHJpbmcgfSB7XG5cdGxldCB0ZW1wbGF0ZTogc3RyaW5nO1xuXHRsZXQgY3JlYXRpb25UZW1wbGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0IHRhYmxlRGVmaW5pdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb247XG5cdGNvbnN0IGVuYWJsZUFuYWx5dGljcyA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uZW5hYmxlQW5hbHl0aWNzO1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZTtcblx0Y29uc3QgaXNUYWJsZVJlYWRPbmx5ID0gdGFibGVQcm9wZXJ0aWVzLnJlYWRPbmx5O1xuXHRjb25zdCBjcmVhdGlvbk1vZGUgPSB0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlO1xuXHRjb25zdCBmaWVsZE1vZGUgPSB0YWJsZVByb3BlcnRpZXMuZmllbGRNb2RlO1xuXHRjb25zdCBpc0NvbXBhY3RUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmlzQ29tcGFjdFR5cGU7XG5cblx0Y29uc3QgZGF0YUZpZWxkID0gZGF0YUZpZWxkT1AudGFyZ2V0T2JqZWN0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cdGlmIChcblx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSAmJlxuXHRcdChpc0Fubm90YXRpb25PZlRlcm08Q2hhcnQ+KGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldCwgVUlBbm5vdGF0aW9uVGVybXMuQ2hhcnQpIHx8XG5cdFx0XHRpc0Fubm90YXRpb25PZlRlcm08UHJlc2VudGF0aW9uVmFyaWFudD4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBVSUFubm90YXRpb25UZXJtcy5QcmVzZW50YXRpb25WYXJpYW50KSlcblx0KSB7XG5cdFx0Y29uc3Qgc2hvd09ubHlDaGFydCA9ICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgPyAhY29sdW1uLnNldHRpbmdzPy5zaG93TWljcm9DaGFydExhYmVsIDogdW5kZWZpbmVkKSA/PyB0cnVlO1xuXHRcdGNvbnN0IG1pY3JvQ2hhcnRTaXplID0gdGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiID8gY29sdW1uLnNldHRpbmdzPy5taWNyb0NoYXJ0U2l6ZSA/PyBcIlhTXCIgOiBcIlhTXCI7XG5cdFx0bGV0IG1pY3JvQ2hhcnRDb2xsZWN0aW9uID0gY29sbGVjdGlvblxuXHRcdFx0LmdldE1vZGVsKClcblx0XHRcdC5jcmVhdGVCaW5kaW5nQ29udGV4dChjb2xsZWN0aW9uLmdldFBhdGgoZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoXCIpKSk7XG5cdFx0bWljcm9DaGFydENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoQ29tbW9uSGVscGVyLmdldE5hdmlnYXRpb25Db250ZXh0KG1pY3JvQ2hhcnRDb2xsZWN0aW9uKSk7XG5cdFx0Ly9XZSBvbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCB2aXN1YWxpemF0aW9uIG9mIHRoZSBQViBpbiBQViBjYXNlIGFuZCBleHBlY3QgaXQgdG8gYmUgYSBjaGFydCAoc2ltaWxhciB0byBWaXN1YWxGaWx0ZXJzKVxuXHRcdHRlbXBsYXRlID0gKFxuXHRcdFx0PE1pY3JvQ2hhcnRcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZUlkLCBkYXRhRmllbGRdKX1cblx0XHRcdFx0Y29udGV4dFBhdGg9e21pY3JvQ2hhcnRDb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0bWV0YVBhdGg9e2RhdGFGaWVsZENvbnRleHRcblx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdC5jcmVhdGVCaW5kaW5nQ29udGV4dChkYXRhRmllbGRDb250ZXh0LmdldFBhdGgoKSArIFwiL1RhcmdldC8kQW5ub3RhdGlvblBhdGhcIilcblx0XHRcdFx0XHQuZ2V0UGF0aCgpfVxuXHRcdFx0XHRzaG93T25seUNoYXJ0PXtzaG93T25seUNoYXJ0fVxuXHRcdFx0XHRzaXplPXttaWNyb0NoYXJ0U2l6ZSA/PyBcIlhTXCJ9XG5cdFx0XHRcdGhpZGVPbk5vRGF0YT17dHJ1ZX1cblx0XHRcdFx0aXNBbmFseXRpY3M9e2VuYWJsZUFuYWx5dGljc31cblx0XHRcdC8+XG5cdFx0KTtcblx0fSBlbHNlIGlmIChcblx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCkgJiZcblx0XHRpc011bHRpVmFsdWVGaWVsZChlbmhhbmNlRGF0YU1vZGVsUGF0aChkYXRhRmllbGRPUCwgZGF0YUZpZWxkLlZhbHVlLnBhdGgpKVxuXHQpIHtcblx0XHQvLyB3aGVuIGV2YWx1YXRpbmcgXCJAJHVpNS5jb250ZXh0LmlzSW5hY3RpdmVcIiB3ZSBhcmUgZm9yY2VkIHRvIGFkZCBpc1RydXRoeSB0byBmb3JjZSB0aGUgYmluZGluZyBldmFsdWF0aW9uXG5cdFx0Y29uc3QgaXNSZWFkT25seSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0aWZFbHNlKFxuXHRcdFx0XHRvcihpc1RhYmxlUmVhZE9ubHkgPT09IHRydWUsIGFuZChpc1RydXRoeShVSS5Jc0luYWN0aXZlKSwgY3JlYXRpb25Nb2RlPy5uYW1lID09PSBcIklubGluZUNyZWF0aW9uUm93c1wiKSksXG5cdFx0XHRcdGNvbnN0YW50KHRydWUpLFxuXHRcdFx0XHRpZkVsc2UoZXF1YWwoZmllbGRNb2RlLCBcIm5vd3JhcHBlclwiKSwgY29uc3RhbnQodHJ1ZSksIGNvbnN0YW50KHVuZGVmaW5lZCkpXG5cdFx0XHQpXG5cdFx0KTtcblx0XHRpZiAoaXNSZWFkT25seSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGVtcGxhdGUgPSAoXG5cdFx0XHRcdDxNdWx0aVZhbHVlRmllbGRCbG9ja1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoPXtjb2xsZWN0aW9uLmdldFBhdGgoKX1cblx0XHRcdFx0XHRtZXRhUGF0aD17ZGF0YUZpZWxkQ29udGV4dC5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0dXNlUGFyZW50QmluZGluZ0NhY2hlPXt0YWJsZURlZmluaXRpb24uZGlzYWJsZU93blJlcXVlc3RPbk1WRn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRlbXBsYXRlID0gKFxuXHRcdFx0XHQ8TXVsdGlWYWx1ZUZpZWxkQmxvY2tcblx0XHRcdFx0XHRjb250ZXh0UGF0aD17Y29sbGVjdGlvbi5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0bWV0YVBhdGg9e2RhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpfVxuXHRcdFx0XHRcdHJlYWRPbmx5PXtpc1JlYWRPbmx5fVxuXHRcdFx0XHRcdHVzZVBhcmVudEJpbmRpbmdDYWNoZT17dGFibGVEZWZpbml0aW9uLmRpc2FibGVPd25SZXF1ZXN0T25NVkZ9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmIChcblx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkRm9yQW5ub3RhdGlvbj4oZGF0YUZpZWxkLCBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uKSAmJlxuXHRcdGlzQW5ub3RhdGlvbk9mVGVybTxGaWVsZEdyb3VwPihkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQsIFVJQW5ub3RhdGlvblRlcm1zLkZpZWxkR3JvdXApXG5cdCkge1xuXHRcdGNvbnN0IGZpZWxkR3JvdXA6IEZpZWxkR3JvdXAgPSBkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQ7XG5cdFx0Y29uc3QgZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHQgPSBkYXRhRmllbGRDb250ZXh0XG5cdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgXCIvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhXCIpO1xuXHRcdGNvbnN0IGZpZWxkR3JvdXBDb2xsZWN0aW9uTGVuZ3RoID0gZmllbGRHcm91cC5EYXRhLmxlbmd0aCAtIDE7XG5cblx0XHRjb25zdCBpdGVtcyA9IGZpZWxkR3JvdXAuRGF0YS5tYXAoKGZpZWxkR3JvdXBEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsIGZpZWxkR3JvdXBEYXRhRmllbGRJZHg6IG51bWJlcikgPT4ge1xuXHRcdFx0Y29uc3QgZmllbGRHcm91cERhdGFGaWVsZENvbnRleHQgPSBkYXRhRmllbGRDb2xsZWN0aW9uQ29udGV4dFxuXHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHQuZ2V0UGF0aCgpICsgXCIvXCIgKyBmaWVsZEdyb3VwRGF0YUZpZWxkSWR4KTtcblx0XHRcdGNvbnN0IGZpZWxkR3JvdXBEYXRhRmllbGRPUCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dCk7XG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwTGFiZWwgPSBGaWVsZEhlbHBlci5jb21wdXRlTGFiZWxUZXh0KGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LmdldE9iamVjdCgpLCB7XG5cdFx0XHRcdGNvbnRleHQ6IGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0XG5cdFx0XHR9KTtcblx0XHRcdGlmIChjb2x1bW4uc2hvd0RhdGFGaWVsZHNMYWJlbCAmJiAhIWZpZWxkR3JvdXBMYWJlbCkge1xuXHRcdFx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUubWFjcm9zXCIpITtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8SEJveFxuXHRcdFx0XHRcdFx0dmlzaWJsZT17Z2V0VmlzaWJsZUV4cHJlc3Npb24oZmllbGRHcm91cERhdGFGaWVsZE9QKX1cblx0XHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZpZWxkSGVscGVyLmJ1aWxkRXhwcmVzc2lvbkZvckFsaWduSXRlbXMoXG5cdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVmlzdWFsaXphdGlvbi8kRW51bU1lbWJlclwiKVxuXHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8TGFiZWxcblx0XHRcdFx0XHRcdFx0aWQ9e1RhYmxlSGVscGVyLmdldEZpZWxkR3JvdXBMYWJlbFN0YWJsZUlkKHRhYmxlSWQsIGZpZWxkR3JvdXBEYXRhRmllbGRPUCl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9e3Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJIRUFERVJfRk9STV9MQUJFTFwiLCBbZmllbGRHcm91cExhYmVsXSl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzPVwic2FwVWlUaW55TWFyZ2luRW5kXCJcblx0XHRcdFx0XHRcdFx0dmlzaWJsZT17Z2V0VmlzaWJsZUV4cHJlc3Npb24oZmllbGRHcm91cERhdGFGaWVsZE9QKX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8VkJveD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8RmxleEl0ZW1EYXRhIGdyb3dGYWN0b3I9XCIxXCIgLz4sXG5cdFx0XHRcdFx0XHRcdFx0aXRlbXM6IGdldE1hY3JvRmllbGRUZW1wbGF0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdFx0XHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0XHRcdFx0XHRlbmFibGVBbmFseXRpY3MsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRpc0NvbXBhY3RUeXBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XCJMZWZ0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRgJHtUYWJsZUhlbHBlci5nZXRDb2x1bW5TdGFibGVJZCh0YWJsZUlkLCBkYXRhRmllbGRPUCl9ICR7VGFibGVIZWxwZXIuZ2V0RmllbGRHcm91cExhYmVsU3RhYmxlSWQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlSWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRPUFxuXHRcdFx0XHRcdFx0XHRcdFx0KX1gLFxuXHRcdFx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFRhYmxlSGVscGVyLmdldE1hcmdpbkNsYXNzKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRJZHggPT09IGZpZWxkR3JvdXBDb2xsZWN0aW9uTGVuZ3RoXG5cdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBnZXRNYWNyb0ZpZWxkVGVtcGxhdGUoXG5cdFx0XHRcdFx0dGFibGVJZCxcblx0XHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sdW1uLFxuXHRcdFx0XHRcdGZpZWxkR3JvdXBEYXRhRmllbGRDb250ZXh0LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdFx0XHRpc0NvbXBhY3RUeXBlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRDb2x1bW5TdGFibGVJZCh0YWJsZUlkLCBkYXRhRmllbGRPUCksXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0TWFyZ2luQ2xhc3MoXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1Zpc3VhbGl6YXRpb24vJEVudW1NZW1iZXJcIiksXG5cdFx0XHRcdFx0XHRmaWVsZEdyb3VwRGF0YUZpZWxkSWR4ID09PSBmaWVsZEdyb3VwQ29sbGVjdGlvbkxlbmd0aFxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRjb25zdCBkcmFmdEluZGljYXRvciA9IGdldERyYWZ0SW5kaWNhdG9yKGNvbGxlY3Rpb24sIGNvbHVtbik7XG5cdFx0aWYgKGRyYWZ0SW5kaWNhdG9yKSB7XG5cdFx0XHRpdGVtcy5wdXNoKGRyYWZ0SW5kaWNhdG9yKTtcblx0XHR9XG5cdFx0Y29uc3Qgc2l0dWF0aW9uSW5kaWNhdG9yID0gZ2V0U2l0dWF0aW9uSW5kaWNhdG9yKGNvbGxlY3Rpb24sIGNvbHVtbik7XG5cdFx0aWYgKHNpdHVhdGlvbkluZGljYXRvcikge1xuXHRcdFx0aXRlbXMucHVzaChzaXR1YXRpb25JbmRpY2F0b3IpO1xuXHRcdH1cblxuXHRcdHRlbXBsYXRlID0gKFxuXHRcdFx0PFZCb3hcblx0XHRcdFx0dmlzaWJsZT17VGFibGVIZWxwZXIuZ2V0VkJveFZpc2liaWxpdHkoXG5cdFx0XHRcdFx0ZGF0YUZpZWxkQ29sbGVjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0Y29sdW1uLmNvbGxlY3Rpb25GaWVsZHNIaWRkZW5FeHByZXNzaW9uLFxuXHRcdFx0XHRcdGRhdGFGaWVsZENvbnRleHQuZ2V0T2JqZWN0KClcblx0XHRcdFx0KX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogaXRlbXNcblx0XHRcdFx0fX1cblx0XHRcdDwvVkJveD5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGlzQW5ub3RhdGlvbk9mVHlwZTxEYXRhRmllbGRGb3JBbm5vdGF0aW9uPihkYXRhRmllbGQsIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pICYmXG5cdFx0aXNBbm5vdGF0aW9uT2ZUZXJtPENvbm5lY3RlZEZpZWxkcz4oZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LCBVSUFubm90YXRpb25UZXJtcy5Db25uZWN0ZWRGaWVsZHMpXG5cdCkge1xuXHRcdGNvbnN0IGNvbm5lY3RlZEZpZWxkczogQ29ubmVjdGVkRmllbGRzID0gZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0O1xuXHRcdGNvbnN0IGNvbm5lY3RlZEZpZWxkc0NvbnRleHQgPSBkYXRhRmllbGRDb250ZXh0XG5cdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGRhdGFGaWVsZENvbnRleHQuZ2V0UGF0aCgpICsgXCIvVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aC9EYXRhXCIpO1xuXHRcdGNvbnN0IGZpZWxkc0RlbGltaXRlciA9IENvbW1vbkhlbHBlci5nZXREZWxpbWl0ZXIoY29ubmVjdGVkRmllbGRzLlRlbXBsYXRlIGFzIHN0cmluZyk7XG5cdFx0Y29uc3QgY29ubmVjdGVkRmllbGRzRGF0YSA9IGdldENvbm5lY3RlZEZpZWxkc0RhdGEoY29ubmVjdGVkRmllbGRzKTtcblx0XHRjb25zdCBpdGVtcyA9IGNvbm5lY3RlZEZpZWxkc0RhdGEubWFwKChjb25uZWN0ZWRGaWVsZHNFbGVtZW50OiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLCBjb25uZWN0ZWRGaWVsZHNFbGVtZW50SWR4OiBudW1iZXIpID0+IHtcblx0XHRcdGNvbnN0IGNvbm5lY3RlZEZpZWxkc0VsZW1lbnRDb250ZXh0ID0gZGF0YUZpZWxkQ29udGV4dFxuXHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHQuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7Y29ubmVjdGVkRmllbGRzQ29udGV4dC5nZXRQYXRoKCl9LyR7KGNvbm5lY3RlZEZpZWxkc0VsZW1lbnQgYXMgRGF0YUZpZWxkKT8uVmFsdWU/LnBhdGh9YCk7XG5cdFx0XHRjb25zdCBmaWVsZFRlbXBsYXRlID0gZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHR0YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0Y29ubmVjdGVkRmllbGRzRWxlbWVudENvbnRleHQsXG5cdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRcdGNyZWF0aW9uTW9kZSxcblx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRpc0NvbXBhY3RUeXBlLFxuXHRcdFx0XHRcIkxlZnRcIixcblx0XHRcdFx0YCR7VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT1ApfWAsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdGhhbmRsZXJQcm92aWRlcixcblx0XHRcdFx0dHJ1ZVxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGNvbm5lY3RlZEZpZWxkc0VsZW1lbnRJZHggPCBjb25uZWN0ZWRGaWVsZHNEYXRhLmxlbmd0aCAtIDEpIHtcblx0XHRcdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIikge1xuXHRcdFx0XHRcdHJldHVybiBbXG5cdFx0XHRcdFx0XHRmaWVsZFRlbXBsYXRlLFxuXHRcdFx0XHRcdFx0LypVc2UgT2JqZWN0U3RhdHVzIGluIFJlc3BvbnNpdmVUYWJsZTogaXRzIGxpbmUgYm94IG1hdGNoZXMgY2VsbCBoZWlnaHQsXG4gICAgICAgIFx0XHRcdFx0c28gdGhlIGRlbGltaXRlciBpcyB2ZXJ0aWNhbGx5IGNlbnRlcmVkIGluIGJvdGggZGlzcGxheSAmIGVkaXQgbW9kZXMuKi9cblx0XHRcdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRcdFx0Ly8gTkJTUCBvbiBib3RoIHNpZGVzIHRvIGtlZXAgc3BhY2luZ1xuXHRcdFx0XHRcdFx0XHR0ZXh0PXtgXFx1MDBBMCR7ZmllbGRzRGVsaW1pdGVyfVxcdTAwQTBgfVxuXHRcdFx0XHRcdFx0XHRzdGF0ZT1cIk5vbmVcIlxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdC8vIFByZXZlbnQgdGhlIGRlbGltaXRlciBmcm9tIGJlaW5nIHNxdWVlemVkIHRvIHplcm8gd2lkdGggb24gdGlnaHQgbGF5b3V0cy5cblx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8RmxleEl0ZW1EYXRhIHNocmlua0ZhY3Rvcj17MH0gLz5cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvT2JqZWN0U3RhdHVzPlxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHcmlkL1RyZWUgdGFibGVzOiBUZXh0IHdvcmtzIGZpbmUgaGVyZSAoa2VlcHMgYmFzZWxpbmUgYmVoYXZpb3IgaW4gZGlzcGxheSwgY2VudGVycyBpbiBlZGl0KS5cblx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRmaWVsZFRlbXBsYXRlLFxuXHRcdFx0XHRcdDxUZXh0XG5cdFx0XHRcdFx0XHQvLyBOQlNQIG9uIGJvdGggc2lkZXMgdG8ga2VlcCBzcGFjaW5nXG5cdFx0XHRcdFx0XHR0ZXh0PXtgXFx1MDBBMCR7ZmllbGRzRGVsaW1pdGVyfVxcdTAwQTBgfVxuXHRcdFx0XHRcdFx0Ly9zaW5nbGUgbGluZVxuXHRcdFx0XHRcdFx0d3JhcHBpbmc9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHQvLyBhY3R1YWxseSByZW5kZXIgdGhlIE5CU1BzXG5cdFx0XHRcdFx0XHRyZW5kZXJXaGl0ZXNwYWNlPVwidHJ1ZVwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0Ly8gQXZvaWQgc3F1ZWV6ZS10by1kb3QgZWZmZWN0IHdoZW4gc3BhY2UgaXMgdGlnaHQuXG5cdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxGbGV4SXRlbURhdGEgc2hyaW5rRmFjdG9yPXswfSAvPlxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ8L1RleHQ+XG5cdFx0XHRcdF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gW2ZpZWxkVGVtcGxhdGVdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0LyogSW5uZXIgY29udGFpbmVyIGFsaWdubWVudDpcbiAgICAgICAgICAgXHRcdC0gUmVzcG9uc2l2ZVRhYmxlOiBhbHdheXMgY2VudGVyIChiZXR0ZXIgdmlzdWFsIGNvbnNpc3RlbmN5KVxuICAgICAgICAgICBcdFx0LSBHcmlkL1RyZWU6IGJhc2VsaW5lIGluIGRpc3BsYXksIGNlbnRlciBpbiBlZGl0IChtaXggb2YgVGV4dC9JbnB1dCBoZWlnaHRzKSovXG5cdFx0Y29uc3QgaW5uZXJIQm94ID0gKFxuXHRcdFx0PEhCb3hcblx0XHRcdFx0d3JhcD1cIk5vV3JhcFwiXG5cdFx0XHRcdGFsaWduSXRlbXM9e1xuXHRcdFx0XHRcdHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIlxuXHRcdFx0XHRcdFx0PyBcIkNlbnRlclwiXG5cdFx0XHRcdFx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShVSS5Jc0VkaXRhYmxlLCBjb25zdGFudChcIkNlbnRlclwiKSwgY29uc3RhbnQoXCJCYXNlbGluZVwiKSkpXG5cdFx0XHRcdH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogaXRlbXNcblx0XHRcdFx0fX1cblx0XHRcdDwvSEJveD5cblx0XHQpO1xuXG5cdFx0Ly8gT3V0ZXIgd3JhcHBlcjogcmVuZGVyIGEgcmVhbCBib3gsIHRha2UgdGhlIHJvdyBoZWlnaHQsIGFuZCBjZW50ZXIgdmVydGljYWxseS5cblx0XHQvLyBUaGlzIGd1YXJhbnRlZXMgdmVydGljYWwgY2VudGVyaW5nIG9mIHRoZSB3aG9sZSBjb25uZWN0ZWQtZmllbGRzIGJsb2NrIHdpdGhpbiB0aGUgY2VsbC5cblx0XHR0ZW1wbGF0ZSA9IChcblx0XHRcdDxIQm94XG5cdFx0XHRcdHdyYXA9XCJOb1dyYXBcIlxuXHRcdFx0XHRyZW5kZXJUeXBlPVwiRGl2XCJcblx0XHRcdFx0Zml0Q29udGFpbmVyPXt0cnVlfVxuXHRcdFx0XHRhbGlnbkl0ZW1zPVwiQ2VudGVyXCJcblx0XHRcdFx0dmlzaWJsZT17Y29sdW1uLmNvbGxlY3Rpb25GaWVsZHNIaWRkZW5FeHByZXNzaW9ufVxuXHRcdFx0XHRqdXN0aWZ5Q29udGVudD17Y29sdW1uLmhvcml6b250YWxBbGlnbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogW2lubmVySEJveF1cblx0XHRcdFx0fX1cblx0XHRcdDwvSEJveD5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHRlbXBsYXRlID0gZ2V0TWFjcm9GaWVsZFRlbXBsYXRlKFxuXHRcdFx0dGFibGVJZCxcblx0XHRcdHRhYmxlRGVmaW5pdGlvbixcblx0XHRcdGNvbHVtbixcblx0XHRcdGRhdGFGaWVsZENvbnRleHQsXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZW5hYmxlQW5hbHl0aWNzLFxuXHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0aXNUYWJsZVJlYWRPbmx5LFxuXHRcdFx0Y3JlYXRpb25Nb2RlLFxuXHRcdFx0ZmllbGRNb2RlLFxuXHRcdFx0aXNDb21wYWN0VHlwZSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdGZhbHNlLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0aGFuZGxlclByb3ZpZGVyXG5cdFx0KTtcblx0XHRjcmVhdGlvblRlbXBsYXRlID0gZ2V0Q3JlYXRpb25UZW1wbGF0ZShcblx0XHRcdHRhYmxlSWQsXG5cdFx0XHRjb2x1bW4sXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRjcmVhdGlvbk1vZGUsXG5cdFx0XHRpc1RhYmxlUmVhZE9ubHksXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0ZGF0YUZpZWxkQ29udGV4dCxcblx0XHRcdGZpZWxkTW9kZSxcblx0XHRcdGVuYWJsZUFuYWx5dGljcyxcblx0XHRcdGhhbmRsZXJQcm92aWRlclxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4geyB0ZW1wbGF0ZSwgY3JlYXRpb25UZW1wbGF0ZSB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSB0aGUgdGVtcGxhdGUgZm9yIGEgY29sdW1uLlxuICogQHBhcmFtIHRhYmxlSWQgVGhlIHRhYmxlIElEXG4gKiBAcGFyYW0gdGFibGVQcm9wZXJ0aWVzIFRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2x1bW4gVGhlIGNvbHVtbiBkZWZpbml0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiBjb250ZXh0IHVzZWQgZm9yIGNvbnRleHQgcGF0aFxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlciBUaGUgaGFuZGxlciBwcm92aWRlclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb2x1bW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2x1bW5UZW1wbGF0ZShcblx0dGFibGVJZDogc3RyaW5nLFxuXHR0YWJsZVByb3BlcnRpZXM6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRjb2x1bW46IEFubm90YXRpb25UYWJsZUNvbHVtbixcblx0Y29sbGVjdGlvbjogQ29udGV4dCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBDb2x1bW4gfCB1bmRlZmluZWQge1xuXHRsZXQgZGF0YUZpZWxkQ29udGV4dCA9IGNvbGxlY3Rpb24uZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChjb2x1bW4uYW5ub3RhdGlvblBhdGgpO1xuXHRpZiAoIWRhdGFGaWVsZENvbnRleHQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGRhdGFGaWVsZENvbnRleHQgPSBjb2xsZWN0aW9uLmdldE1vZGVsKCkuY3JlYXRlQmluZGluZ0NvbnRleHQoRmllbGRIZWxwZXIuZ2V0RGF0YUZpZWxkRGVmYXVsdChkYXRhRmllbGRDb250ZXh0KSk7XG5cdGNvbnN0IGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxEYXRhRmllbGRBYnN0cmFjdFR5cGVzPihkYXRhRmllbGRDb250ZXh0LCBjb2xsZWN0aW9uKTtcblx0Y29uc3QgZGF0YUZpZWxkT2JqZWN0ID0gZGF0YUZpZWxkQ29udGV4dD8uZ2V0T2JqZWN0Py4oKSA/PyB7fTtcblxuXHRjb25zdCB0ZW1wbGF0ZXMgPSBnZXRDb2x1bW5Db250ZW50VGVtcGxhdGUoXG5cdFx0dGFibGVJZCxcblx0XHR0YWJsZVByb3BlcnRpZXMsXG5cdFx0Y29sdW1uLFxuXHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRkYXRhRmllbGRDb250ZXh0LFxuXHRcdGNvbGxlY3Rpb24sXG5cdFx0aGFuZGxlclByb3ZpZGVyXG5cdCk7XG5cblx0Y29uc3QgZW5hYmxlQXV0b0NvbHVtbldpZHRoID0gdGFibGVQcm9wZXJ0aWVzLmVuYWJsZUF1dG9Db2x1bW5XaWR0aCA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlQXV0b0NvbHVtbldpZHRoO1xuXHRjb25zdCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC53aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlcjtcblx0Y29uc3QgdGFibGVUeXBlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnR5cGU7XG5cdGNvbnN0IGlzQ29ubmVjdGVkRmllbGQgPSBkYXRhRmllbGRPYmplY3QuVGFyZ2V0Py4kQW5ub3RhdGlvblBhdGg/LmluY2x1ZGVzKFVJQW5ub3RhdGlvblRlcm1zLkNvbm5lY3RlZEZpZWxkcyk7XG5cblx0cmV0dXJuIChcblx0XHQ8Q29sdW1uXG5cdFx0XHRpZD17VGFibGVIZWxwZXIuZ2V0Q29sdW1uU3RhYmxlSWQodGFibGVJZCwgZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoKX1cblx0XHRcdHdpZHRoPXtcblx0XHRcdFx0IUNvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKSB8fCBjb2x1bW4ud2lkdGhcblx0XHRcdFx0XHQ/IFRhYmxlSGVscGVyLmdldENvbHVtbldpZHRoKFxuXHRcdFx0XHRcdFx0XHR7IGVuYWJsZUF1dG9Db2x1bW5XaWR0aCwgd2lkdGhJbmNsdWRpbmdDb2x1bW5IZWFkZXIsIHRhYmxlVHlwZSB9LFxuXHRcdFx0XHRcdFx0XHRjb2x1bW4sXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdCxcblx0XHRcdFx0XHRcdFx0VGFibGVIZWxwZXIuZ2V0VGV4dE9uQWN0aW9uRmllbGQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbnRleHQ6IGRhdGFGaWVsZENvbnRleHQgfSksXG5cdFx0XHRcdFx0XHRcdGRhdGFGaWVsZE9iamVjdE1vZGVsUGF0aCxcblx0XHRcdFx0XHRcdFx0dHJ1ZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL1RpdGxlXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRtaW5XaWR0aD17XG5cdFx0XHRcdENvbW1vblV0aWxzLmlzU21hbGxEZXZpY2UoKVxuXHRcdFx0XHRcdD8gVGFibGVIZWxwZXIuZ2V0Q29sdW1uV2lkdGgoXG5cdFx0XHRcdFx0XHRcdHsgZW5hYmxlQXV0b0NvbHVtbldpZHRoLCB3aWR0aEluY2x1ZGluZ0NvbHVtbkhlYWRlciwgdGFibGVUeXBlIH0sXG5cdFx0XHRcdFx0XHRcdGNvbHVtbixcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRUYWJsZUhlbHBlci5nZXRUZXh0T25BY3Rpb25GaWVsZChkYXRhRmllbGRPYmplY3QsIHsgY29udGV4dDogZGF0YUZpZWxkQ29udGV4dCB9KSxcblx0XHRcdFx0XHRcdFx0ZGF0YUZpZWxkT2JqZWN0TW9kZWxQYXRoLFxuXHRcdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBkYXRhRmllbGRDb250ZXh0LmdldE9iamVjdChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGgvVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0Rlc2NyaXB0aW9uXCIpIHx8IFwiXCJcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHR9XG5cdFx0XHRoZWFkZXI9e2NvbHVtbi5sYWJlbCB8fCBjb2x1bW4ubmFtZX1cblx0XHRcdHByb3BlcnR5S2V5PXtjb2x1bW4ubmFtZX1cblx0XHRcdGhBbGlnbj17Y29sdW1uLmhvcml6b250YWxBbGlnbiB8fCBGaWVsZEhlbHBlci5nZXRDb2x1bW5BbGlnbm1lbnQoZGF0YUZpZWxkT2JqZWN0LCB7IGNvbGxlY3Rpb246IGNvbGxlY3Rpb24gfSl9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtcblx0XHRcdFx0aXNDb25uZWN0ZWRGaWVsZFxuXHRcdFx0XHRcdD8gdHJ1ZVxuXHRcdFx0XHRcdDogVGFibGVIZWxwZXIuc2V0SGVhZGVyTGFiZWxWaXNpYmlsaXR5KGRhdGFGaWVsZE9iamVjdCwgZGF0YUZpZWxkQ29udGV4dC5nZXRPYmplY3QoXCJUYXJnZXQvJEFubm90YXRpb25QYXRoL0RhdGFcIikpXG5cdFx0XHR9XG5cdFx0XHR0b29sdGlwPXtjb2x1bW4udG9vbHRpcH1cblx0XHRcdHJlcXVpcmVkPXt0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkgPyB1bmRlZmluZWQgOiBjb2x1bW4ucmVxdWlyZWR9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogY3JlYXRlQ3VzdG9tRGF0YShcInNob3dEYXRhRmllbGRzTGFiZWxcIiwgY29sdW1uLnNob3dEYXRhRmllbGRzTGFiZWwpLFxuXHRcdFx0XHRleHRlbmRlZFNldHRpbmdzOiA8UmVzcG9uc2l2ZUNvbHVtblNldHRpbmdzIGltcG9ydGFuY2U9e2NvbHVtbi5pbXBvcnRhbmNlfSAvPixcblx0XHRcdFx0dGVtcGxhdGU6IHRlbXBsYXRlcy50ZW1wbGF0ZSxcblx0XHRcdFx0Y3JlYXRpb25UZW1wbGF0ZTogdGVtcGxhdGVzLmNyZWF0aW9uVGVtcGxhdGVcblx0XHRcdH19XG5cdFx0PC9Db2x1bW4+XG5cdCk7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmb3IgYWxsIHRoZSBjb2x1bW5zIGluIHRoZSB0YWJsZS5cbiAqIEBwYXJhbSB0YWJsZVByb3BlcnRpZXMgVGhlIHRhYmxlIHByb3BlcnRpZXNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIGNvbnRleHQgdXNlZCBmb3IgY29udGV4dCBwYXRoXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyIFRoZSBoYW5kbGVyIHByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbHVtbnMuXG4gKi9cbmZ1bmN0aW9uIGdldENvbHVtbnModGFibGVQcm9wZXJ0aWVzOiBUYWJsZUJsb2NrUHJvcGVydGllcywgY29sbGVjdGlvbjogQ29udGV4dCwgaGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyKTogQ29sdW1uW10ge1xuXHRjb25zdCB0YWJsZUlkID0gdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZDtcblx0cmV0dXJuIHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29sdW1uc1xuXHRcdC5tYXAoKGNvbHVtbikgPT4ge1xuXHRcdFx0aWYgKGNvbHVtbi5hdmFpbGFiaWxpdHkgPT09IFwiRGVmYXVsdFwiICYmIGNvbHVtbi50eXBlID09PSBcIkRlZmF1bHRcIikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDdXN0b20gY29sdW1ucyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCBhcmUgbm90IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGEgdGFibGUgYnVpbGRpbmcgYmxvY2suXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJBbm5vdGF0aW9uXCIpIHtcblx0XHRcdFx0cmV0dXJuIGdldENvbHVtblRlbXBsYXRlKHRhYmxlSWQsIHRhYmxlUHJvcGVydGllcywgY29sdW1uIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbiwgY29sbGVjdGlvbiwgaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH0gZWxzZSBpZiAoY29sdW1uLmF2YWlsYWJpbGl0eSA9PT0gXCJEZWZhdWx0XCIgJiYgY29sdW1uLnR5cGUgPT09IFwiU2xvdFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRTbG90Q29sdW1uKHRhYmxlSWQsIGNvbHVtbiBhcyBDdXN0b21CYXNlZFRhYmxlQ29sdW1uLCB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkpO1xuXHRcdFx0fSBlbHNlIGlmIChjb2x1bW4uYXZhaWxhYmlsaXR5ID09PSBcIkRlZmF1bHRcIiAmJiBjb2x1bW4udHlwZSA9PT0gXCJDb21wdXRlZFwiKSB7XG5cdFx0XHRcdHJldHVybiBnZXRDb21wdXRlZENvbHVtbihcblx0XHRcdFx0XHR0YWJsZUlkLFxuXHRcdFx0XHRcdGNvbHVtbiBhcyBDb21wdXRlZFRhYmxlQ29sdW1uLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3Ncblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9KVxuXHRcdC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uICE9PSB1bmRlZmluZWQpIGFzIENvbHVtbltdO1xufVxuXG5leHBvcnQgdHlwZSBUYWJsZUJsb2NrUHJvcGVydGllcyA9IE9taXQ8U3RyaWN0UHJvcGVydGllc09mPFRhYmxlQVBJPiwgXCJtZXRhUGF0aFwiIHwgXCJjb250ZXh0UGF0aFwiPiAmIHtcblx0Z2V0VHJhbnNsYXRlZFRleHQodGV4dDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogdW5rbm93bltdLCBtZXRhUGF0aD86IHN0cmluZyk6IHN0cmluZztcblx0W1wiZmw6ZmxleGliaWxpdHlcIl0/OiBzdHJpbmc7XG59O1xuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBkZXNpZ250aW1lIGZvciB0aGUgTURDIHRhYmxlLlxuICogQHJldHVybnMgVGhlIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGR0OmRlc2lnbnRpbWVcbiAqL1xuZnVuY3Rpb24gZ2V0RGVzaWdudGltZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL2Rlc2lnbnRpbWUvVGFibGUuZGVzaWdudGltZVwiO1xufVxuXG4vKipcbiAqIE1hcHMgdGhlIGludGVybmFsIFAxM24gdGFibGUgbW9kZSAoc3RyaW5nKSB0byB0aGUgY29ycmVzcG9uZGluZyBNREMgZW51bS5cbiAqIEBwYXJhbSBzdHJpbmdNb2RlXG4gKiBAcmV0dXJucyBUaGUgTURDIGVudW0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gZ2V0TURDUDEzbk1vZGUoc3RyaW5nTW9kZTogc3RyaW5nKTogVGFibGVQMTNuTW9kZSB7XG5cdHN3aXRjaCAoc3RyaW5nTW9kZSkge1xuXHRcdGNhc2UgXCJBZ2dyZWdhdGVcIjpcblx0XHRcdHJldHVybiBUYWJsZVAxM25Nb2RlLkFnZ3JlZ2F0ZTtcblx0XHRjYXNlIFwiU29ydFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuU29ydDtcblx0XHRjYXNlIFwiQ29sdW1uXCI6XG5cdFx0XHRyZXR1cm4gVGFibGVQMTNuTW9kZS5Db2x1bW47XG5cdFx0Y2FzZSBcIkZpbHRlclwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuRmlsdGVyO1xuXHRcdGNhc2UgXCJHcm91cFwiOlxuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuR3JvdXA7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdExvZy5lcnJvcihcIlVua25vd24gUDEzbiBtb2RlOiBcIiArIHN0cmluZ01vZGUpO1xuXHRcdFx0cmV0dXJuIFRhYmxlUDEzbk1vZGUuQ29sdW1uO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNRENUYWJsZVRlbXBsYXRlKHRhYmxlUHJvcGVydGllczogVGFibGVCbG9ja1Byb3BlcnRpZXMsIHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnMpOiBNRENUYWJsZSB7XG5cdC8vIEZvciBhIFRyZWVUYWJsZSBpbiBhIExpc3RSZXBvcnQgZGlzcGxheWluZyBhIGRyYWZ0LWVuYWJsZWQgZW50aXR5LCB3ZSBvbmx5IGRpc3BsYXkgYWN0aXZlIGluc3RhbmNlc1xuXHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbj8ucm93Py5uYXZpZ2F0aW9uSW5mbyBhcyB7XG5cdFx0cm91dGVQYXRoPzogc3RyaW5nO1xuXHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlPzogYm9vbGVhbjtcblx0fTtcblx0Y29uc3QgdGFyZ2V0ID0gbmF2aWdhdGlvbkluZm8/LnJvdXRlUGF0aDtcblx0bGV0IG5hdmlnYXRpb25JbkVkaXRNb2RlID0gZmFsc2U7XG5cdGlmICh0YXJnZXQpIHtcblx0XHRjb25zdCB0YXJnZXRJbmZvcm1hdGlvbiA9IHBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuX2dldFRhcmdldEluZm9ybWF0aW9uKHRhcmdldCk7XG5cdFx0bmF2aWdhdGlvbkluRWRpdE1vZGUgPSAodGFyZ2V0SW5mb3JtYXRpb24/Lm9wdGlvbnM/LnNldHRpbmdzPy5vcGVuSW5FZGl0TW9kZSBhcyBib29sZWFuIHwgdW5kZWZpbmVkKSA/PyBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHRhYmxlVHlwZSA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRjb25zdCBjb250ZXh0T2JqZWN0UGF0aCA9IHRhYmxlUHJvcGVydGllcy5jb250ZXh0T2JqZWN0UGF0aDtcblx0Y29uc3QgZmlsdGVyT25BY3RpdmVFbnRpdGllcyA9XG5cdFx0KHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkgJiZcblx0XHRjb250ZXh0T2JqZWN0UGF0aC5zdGFydGluZ0VudGl0eVNldCA9PT0gY29udGV4dE9iamVjdFBhdGgudGFyZ2V0RW50aXR5U2V0ICYmXG5cdFx0TW9kZWxIZWxwZXIuaXNPYmplY3RQYXRoRHJhZnRTdXBwb3J0ZWQoY29udGV4dE9iamVjdFBhdGgpO1xuXHRjb25zdCBkZWxlZ2F0ZSA9IFRhYmxlSGVscGVyLmdldERlbGVnYXRlKFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sXG5cdFx0dGFibGVQcm9wZXJ0aWVzLmlzQWxwID09PSB0cnVlLFxuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5lbnRpdHlOYW1lLFxuXHRcdGZpbHRlck9uQWN0aXZlRW50aXRpZXNcblx0KTtcblx0Y29uc3QgaGVhZGVyVmlzaWJsZSA9IHRhYmxlUHJvcGVydGllcy5oZWFkZXJWaXNpYmxlID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5oZWFkZXJWaXNpYmxlO1xuXHRjb25zdCBjdXJyZW50SGVhZGVyID0gdGFibGVQcm9wZXJ0aWVzLmhlYWRlciA/PyB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmFubm90YXRpb24udGl0bGU7XG5cdGNvbnN0IGhlYWRlckJpbmRpbmdFeHByZXNzaW9uID0gYnVpbGRFeHByZXNzaW9uRm9ySGVhZGVyVmlzaWJsZShjdXJyZW50SGVhZGVyID8/IFwiXCIsIHRhYmxlUHJvcGVydGllcy50YWJUaXRsZSA/PyBcIlwiLCAhIWhlYWRlclZpc2libGUpO1xuXHRjb25zdCBwYXN0ZUFjdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYWN0aW9ucy5maW5kKChhKSA9PiBhLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLlBhc3RlKTtcblx0Y29uc3QgY29sbGVjdGlvbkVudGl0eSA9IHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgodGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNvbGxlY3Rpb24pLnRhcmdldCBhc1xuXHRcdHwgRW50aXR5U2V0XG5cdFx0fCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdGNvbnN0IG1vZGVsQ29udGV4dENoYW5nZSA9IHRhYmxlVHlwZSA9PT0gXCJUcmVlVGFibGVcIiA/IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLnRhYmxlQ29udGV4dENoYW5nZSA6IHVuZGVmaW5lZDtcblx0Y29uc3QgbGluZUl0ZW0gPSBUYWJsZUhlbHBlci5nZXRVaUxpbmVJdGVtT2JqZWN0KHBhcmFtZXRlcnMubWV0YVBhdGgsIHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEpIGFzXG5cdFx0fCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25bXVxuXHRcdHwgdW5kZWZpbmVkO1xuXHRjb25zdCBuYXZpZ2F0aW9uUGF0aCA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5uYXZpZ2F0aW9uUGF0aDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uLnN0YXJ0c1dpdGgoXCIvXCIpICYmIGlzU2luZ2xldG9uKGNvbnRleHRPYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0KSkge1xuXHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uID0gbmF2aWdhdGlvblBhdGg7XG5cdH1cblxuXHRjb25zdCBjb2xsZWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5jb2xsZWN0aW9uKSE7XG5cdGNvbnN0IGRyYWZ0ID0gKGNvbGxlY3Rpb25FbnRpdHkgYXMgRW50aXR5U2V0KS5hbm5vdGF0aW9ucy5Db21tb24/LkRyYWZ0Um9vdDtcblx0Ly8gQWRkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBkZXNpZ250aW1lIGZpbGUgaWYgZGVzaWdudGltZSBpcyBlbmFibGVkIGZyb20gY29yZSBvciBsb2NhbGx5IHZpYSB1cmwgcGFyYW1ldGVyc1xuXHRjb25zdCB2YXJpYW50TWFuYWdlbWVudCA9IHRhYmxlUHJvcGVydGllcy52YXJpYW50TWFuYWdlbWVudCA/PyBcIk5vbmVcIjtcblx0Y29uc3QgZGVzaWdudGltZSA9IGdldERlc2lnbnRpbWUoKTtcblx0bGV0IHJvd0FjdGlvblR5cGU6IFRhYmxlUm93QWN0aW9uVHlwZSB8IHVuZGVmaW5lZDtcblx0aWYgKHRhYmxlUHJvcGVydGllcy5vdmVycmlkZVJvd1ByZXNzKSB7XG5cdFx0cm93QWN0aW9uVHlwZSA9IFRhYmxlUm93QWN0aW9uVHlwZS5OYXZpZ2F0aW9uO1xuXHR9XG5cdHJvd0FjdGlvblR5cGUgPz89XG5cdFx0dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnJvdz8uYWN0aW9uVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIgPyBUYWJsZVJvd0FjdGlvblR5cGUuTmF2aWdhdGlvbiA6IHVuZGVmaW5lZDtcblxuXHRjb25zdCBzaG93Q3JlYXRlID0gdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zLmZpbmQoKGEpID0+IGEua2V5ID09PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKT8udmlzaWJsZSB8fCB0cnVlO1xuXG5cdGxldCBjdXJyZW50UGVyc29uYWxpemF0aW9uOiBUYWJsZVAxM25Nb2RlW10gfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAodGFibGVQcm9wZXJ0aWVzLnBlcnNvbmFsaXphdGlvbikge1xuXHRcdGNhc2UgXCJmYWxzZVwiOlxuXHRcdFx0Y3VycmVudFBlcnNvbmFsaXphdGlvbiA9IHVuZGVmaW5lZDtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJ0cnVlXCI6XG5cdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gW1RhYmxlUDEzbk1vZGUuU29ydCwgVGFibGVQMTNuTW9kZS5Db2x1bW4sIFRhYmxlUDEzbk1vZGUuRmlsdGVyXTtcblx0XHRcdGlmICh0YWJsZVR5cGUgPT09IFwiUmVzcG9uc2l2ZVRhYmxlXCIgfHwgdGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5lbmFibGVBbmFseXRpY3MgPT09IHRydWUpIHtcblx0XHRcdFx0Y3VycmVudFBlcnNvbmFsaXphdGlvbiA9IFsuLi5jdXJyZW50UGVyc29uYWxpemF0aW9uLCBUYWJsZVAxM25Nb2RlLkdyb3VwXTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgdW5kZWZpbmVkOlxuXHRcdFx0Y3VycmVudFBlcnNvbmFsaXphdGlvbiA9IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5wMTNuTW9kZT8ubWFwKChtb2RlKSA9PiBnZXRNRENQMTNuTW9kZShtb2RlKSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Ly8gSW4gY2FzZSBncm91cGluZyBtb2RlIGlzIGRlZmluZWQgZXhwbGljaXRlbHkgb24gdGhlIHBlcnNvbmFsaXphdGlvbiwgd2Ugb25seSBlbmFibGUgaXQgZm9yIHRoZSBhbmFseXRpY2FsIGFuZCByZXNwb25zaXZlIHRhYmxlLlxuXHRcdFx0aWYgKHRhYmxlVHlwZSA9PT0gXCJSZXNwb25zaXZlVGFibGVcIiB8fCB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gdGFibGVQcm9wZXJ0aWVzLnBlcnNvbmFsaXphdGlvbi5zcGxpdChcIixcIikubWFwKChtb2RlKSA9PiBnZXRNRENQMTNuTW9kZShtb2RlLnRyaW0oKSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZXhjbHVkZUdyb3VwRnJvbVAxM24gPSB0YWJsZVByb3BlcnRpZXMucGVyc29uYWxpemF0aW9uXG5cdFx0XHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0XHRcdC5maWx0ZXIoKG1vZGUpID0+IGdldE1EQ1AxM25Nb2RlKG1vZGUudHJpbSgpKSAhPT0gVGFibGVQMTNuTW9kZS5Hcm91cCkgYXMgVGFibGVQMTNuTW9kZVtdO1xuXHRcdFx0XHRjdXJyZW50UGVyc29uYWxpemF0aW9uID0gZXhjbHVkZUdyb3VwRnJvbVAxM24ubGVuZ3RoID8gZXhjbHVkZUdyb3VwRnJvbVAxM24gOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdH1cblxuXHRjb25zdCBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyA9IEFjdGlvbkhlbHBlci5nZXRNdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucyhsaW5lSXRlbSk7XG5cblx0Y29uc3QgY3VzdG9tRGF0YSA9IFtcblx0XHR7IGtleTogXCJraW5kXCIsIHZhbHVlOiBjb2xsZWN0aW9uRW50aXR5Ll90eXBlIH0sXG5cdFx0eyBrZXk6IFwibmF2aWdhdGlvblBhdGhcIiwgdmFsdWU6IG5hdmlnYXRpb25QYXRoIH0sXG5cdFx0eyBrZXk6IFwiZW5hYmxlQW5hbHl0aWNzXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmVuYWJsZUFuYWx5dGljcyB9LFxuXHRcdHsga2V5OiBcImNyZWF0aW9uTW9kZVwiLCB2YWx1ZTogdGFibGVQcm9wZXJ0aWVzLmNyZWF0aW9uTW9kZT8ubmFtZSB9LFxuXHRcdHsga2V5OiBcImlubGluZUNyZWF0aW9uUm93Q291bnRcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5pbmxpbmVDcmVhdGlvblJvd0NvdW50IH0sXG5cdFx0eyBrZXk6IFwic2hvd0NyZWF0ZVwiLCB2YWx1ZTogc2hvd0NyZWF0ZSB9LFxuXHRcdHsga2V5OiBcImNyZWF0ZUF0RW5kXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMuY3JlYXRpb25Nb2RlPy5jcmVhdGVBdEVuZCB9LFxuXHRcdHsga2V5OiBcImRpc3BsYXlNb2RlUHJvcGVydHlCaW5kaW5nXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMucmVhZE9ubHkgfSxcblx0XHR7IGtleTogXCJ0YWJsZVR5cGVcIiwgdmFsdWU6IHRhYmxlVHlwZSB9LFxuXHRcdHsga2V5OiBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIsIHZhbHVlOiBjb2xsZWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgfSxcblx0XHR7IGtleTogXCJlbnRpdHlUeXBlXCIsIHZhbHVlOiBjb2xsZWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgKyBcIi9cIiB9LFxuXHRcdHsga2V5OiBcIm1ldGFQYXRoXCIsIHZhbHVlOiBjb2xsZWN0aW9uQ29udGV4dC5nZXRQYXRoKCkgfSxcblx0XHR7IGtleTogXCJoaWRkZW5GaWx0ZXJzXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZmlsdGVycz8uaGlkZGVuRmlsdGVycyB9LFxuXHRcdHsga2V5OiBcInJlcXVlc3RHcm91cElkXCIsIHZhbHVlOiBcIiRhdXRvLldvcmtlcnNcIiB9LFxuXHRcdHsga2V5OiBcInNlZ21lbnRlZEJ1dHRvbklkXCIsIHZhbHVlOiBnZW5lcmF0ZShbdGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCwgXCJTZWdtZW50ZWRCdXR0b25cIiwgXCJUZW1wbGF0ZUNvbnRlbnRWaWV3XCJdKSB9LFxuXHRcdHsga2V5OiBcImRpc2FibGVDb3B5VG9DbGlwYm9hcmRcIiwgdmFsdWU6IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5kaXNhYmxlQ29weVRvQ2xpcGJvYXJkIH0sXG5cdFx0eyBrZXk6IFwiZHJhZnRcIiwgdmFsdWU6IGRyYWZ0IH0sXG5cdFx0eyBrZXk6IFwibmF2aWdhdGlvbkF2YWlsYWJsZU1hcFwiLCB2YWx1ZTogVGFibGVIZWxwZXIuZ2V0TmF2aWdhdGlvbkF2YWlsYWJsZU1hcChsaW5lSXRlbSkgfSxcblx0XHR7XG5cdFx0XHRrZXk6IFwiYWN0aW9uc011bHRpc2VsZWN0RGlzYWJsZWRcIixcblx0XHRcdHZhbHVlOiBtdWx0aVNlbGVjdERpc2FibGVkQWN0aW9ucy5sZW5ndGggPiAwID8gbXVsdGlTZWxlY3REaXNhYmxlZEFjdGlvbnMuam9pbihcIixcIikgOiB1bmRlZmluZWRcblx0XHR9LFxuXHRcdHsga2V5OiBcImV4cG9ydFJlcXVlc3RTaXplXCIsIHZhbHVlOiB0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZXhwb3J0UmVxdWVzdFNpemUgfVxuXHRdO1xuXHRsZXQgcm93UHJlc3NIYW5kbGVyO1xuXHRpZiAodGFibGVUeXBlID09PSBcIlJlc3BvbnNpdmVUYWJsZVwiKSB7XG5cdFx0cm93UHJlc3NIYW5kbGVyID0gcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIucm93UHJlc3MgPyBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5ub29wIDogdW5kZWZpbmVkO1xuXHR9XG5cdHJldHVybiAoXG5cdFx0PE1EQ1RhYmxlXG5cdFx0XHRjb3JlOnJlcXVpcmU9e2dldENvcmVSZXF1aXJlKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24pfVxuXHRcdFx0Zmw6ZmxleGliaWxpdHk9e3RhYmxlUHJvcGVydGllc1tcImZsOmZsZXhpYmlsaXR5XCJdfVxuXHRcdFx0c29ydENvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5zb3J0Q29uZGl0aW9uc31cblx0XHRcdGdyb3VwQ29uZGl0aW9ucz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9uc31cblx0XHRcdGFnZ3JlZ2F0ZUNvbmRpdGlvbnM9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zfVxuXHRcdFx0ZHQ6ZGVzaWdudGltZT17ZGVzaWdudGltZX1cblx0XHRcdGlkPXt0YWJsZVByb3BlcnRpZXMuY29udGVudElkfVxuXHRcdFx0YnVzeUluZGljYXRvckRlbGF5PXswfVxuXHRcdFx0ZW5hYmxlRXhwb3J0PXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlRXhwb3J0fVxuXHRcdFx0ZGVsZWdhdGU9e0pTT04ucGFyc2UoZGVsZWdhdGUpfVxuXHRcdFx0cm93UHJlc3M9e3Jvd1ByZXNzSGFuZGxlcn1cblx0XHRcdGJlZm9yZU9wZW5Db250ZXh0TWVudT17cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuYmVmb3JlT3BlbkNvbnRleHRNZW51fVxuXHRcdFx0YXV0b0JpbmRPbkluaXQ9e3RhYmxlUHJvcGVydGllcy51c2VCYXNpY1NlYXJjaCB8fCAhdGFibGVQcm9wZXJ0aWVzLmZpbHRlckJhcn1cblx0XHRcdHNlbGVjdGlvbk1vZGU9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5zZWxlY3Rpb25Nb2RlIHx8IFwiTm9uZVwifVxuXHRcdFx0c2VsZWN0aW9uQ2hhbmdlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5zZWxlY3Rpb25DaGFuZ2V9XG5cdFx0XHRzaG93Um93Q291bnQ9e3RhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5zaG93Um93Q291bnR9XG5cdFx0XHRoZWFkZXI9e2N1cnJlbnRIZWFkZXJ9XG5cdFx0XHRoZWFkZXJWaXNpYmxlPXtoZWFkZXJCaW5kaW5nRXhwcmVzc2lvbn1cblx0XHRcdGhlYWRlckxldmVsPXt0YWJsZVByb3BlcnRpZXMuaGVhZGVyTGV2ZWx9XG5cdFx0XHRoZWFkZXJTdHlsZT17dGFibGVQcm9wZXJ0aWVzLmhlYWRlclN0eWxlfVxuXHRcdFx0dGhyZXNob2xkPXt0YWJsZVByb3BlcnRpZXMudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudGhyZXNob2xkID8/IHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi50aHJlc2hvbGR9XG5cdFx0XHRwMTNuTW9kZT17Y3VycmVudFBlcnNvbmFsaXphdGlvbn1cblx0XHRcdHBhc3RlPXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRQYXN0ZUhhbmRsZXIoZmFsc2UpfVxuXHRcdFx0YmVmb3JlRXhwb3J0PXtwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5iZWZvcmVFeHBvcnR9XG5cdFx0XHRjbGFzcz17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLnVzZUNvbmRlbnNlZFRhYmxlTGF5b3V0ID09PSB0cnVlID8gXCJzYXBVaVNpemVDb25kZW5zZWRcIiA6IHVuZGVmaW5lZH1cblx0XHRcdG11bHRpU2VsZWN0TW9kZT17dGFibGVQcm9wZXJ0aWVzLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLm11bHRpU2VsZWN0TW9kZX1cblx0XHRcdHNob3dQYXN0ZUJ1dHRvbj17dGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiID8gZmFsc2UgOiBwYXN0ZUFjdGlvbj8udmlzaWJsZX1cblx0XHRcdGVuYWJsZVBhc3RlPXt0YWJsZVR5cGUgPT09IFwiVHJlZVRhYmxlXCIgPyBmYWxzZSA6IHBhc3RlQWN0aW9uPy5lbmFibGVkfVxuXHRcdFx0bW9kZWxDb250ZXh0Q2hhbmdlPXttb2RlbENvbnRleHRDaGFuZ2V9XG5cdFx0PlxuXHRcdFx0e3tcblx0XHRcdFx0Y3VzdG9tRGF0YTogY3JlYXRlQ3VzdG9tRGF0YXMoY3VzdG9tRGF0YSksXG5cdFx0XHRcdGRhdGFTdGF0ZUluZGljYXRvcjogZ2V0RGF0YVN0YXRlSW5kaWNhdG9yKHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0dHlwZTogZ2V0VGFibGVUeXBlKFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24uY29udHJvbC5zZWxlY3Rpb25MaW1pdFxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkZXBlbmRlbnRzOiBnZXREZXBlbmRlbnRzKHRhYmxlUHJvcGVydGllcywgcGFyYW1ldGVycywgdmFyaWFudE1hbmFnZW1lbnQsIGNvbGxlY3Rpb25Db250ZXh0KSxcblx0XHRcdFx0YWN0aW9uczogZ2V0QWN0aW9ucyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSxcblx0XHRcdFx0cm93U2V0dGluZ3M6IGdldFJvd1NldHRpbmdzKHRhYmxlUHJvcGVydGllcy50YWJsZURlZmluaXRpb24sIHJvd0FjdGlvblR5cGUsIHRhYmxlVHlwZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHRjb250ZXh0TWVudTogZ2V0Q29udGV4dE1lbnUoXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkVudGl0eSxcblx0XHRcdFx0XHRyb3dBY3Rpb25UeXBlLFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdG5hdmlnYXRpb25JbkVkaXRNb2RlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGNvbHVtbnM6IGdldENvbHVtbnModGFibGVQcm9wZXJ0aWVzLCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpLFxuXHRcdFx0XHRkcmFnRHJvcENvbmZpZzogZ2V0RHJhZ0FuZERyb3BDb25maWcodGFibGVQcm9wZXJ0aWVzLCBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlciksXG5cdFx0XHRcdGNyZWF0aW9uUm93OiBnZXRDcmVhdGlvblJvdyh0YWJsZVByb3BlcnRpZXMsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKSxcblx0XHRcdFx0dmFyaWFudDogZ2V0VmFyaWFudE1hbmFnZW1lbnQoXG5cdFx0XHRcdFx0dmFyaWFudE1hbmFnZW1lbnQsXG5cdFx0XHRcdFx0dGFibGVQcm9wZXJ0aWVzLmNvbnRlbnRJZCxcblx0XHRcdFx0XHR0YWJsZVByb3BlcnRpZXMuaGVhZGVyTGV2ZWwsXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KSxcblx0XHRcdFx0cXVpY2tGaWx0ZXI6IGdldFF1aWNrRmlsdGVyKHRhYmxlUHJvcGVydGllcyksXG5cdFx0XHRcdGNvcHlQcm92aWRlcjogZ2V0Q29weVByb3ZpZGVyKHRhYmxlUHJvcGVydGllcyksXG5cdFx0XHRcdGNlbGxTZWxlY3RvcjogZ2V0Q2VsbFNlbGVjdG9yKHRhYmxlUHJvcGVydGllcylcblx0XHRcdH19XG5cdFx0PC9NRENUYWJsZT5cblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2SEE7QUFDQTtBQUNBO0FB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
|