@sapui5/sap.fe.macros 1.138.0 → 1.139.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Breadcrumbs.js +269 -0
- package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
- package/src/sap/fe/macros/CommonHelper.js +2 -2
- package/src/sap/fe/macros/CommonHelper.ts +1 -1
- package/src/sap/fe/macros/Field.js +21 -4
- package/src/sap/fe/macros/Field.ts +21 -3
- package/src/sap/fe/macros/FooterContent.js +40 -10
- package/src/sap/fe/macros/FooterContent.tsx +44 -8
- package/src/sap/fe/macros/FormElement.js +2 -2
- package/src/sap/fe/macros/FormElement.ts +1 -2
- package/src/sap/fe/macros/MultiValueField.js +17 -4
- package/src/sap/fe/macros/MultiValueField.tsx +7 -2
- package/src/sap/fe/macros/RichTextEditor.js +30 -5
- package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
- package/src/sap/fe/macros/Share.js +73 -40
- package/src/sap/fe/macros/Share.tsx +29 -1
- package/src/sap/fe/macros/ValueHelp.js +3 -4
- package/src/sap/fe/macros/ValueHelp.tsx +2 -3
- package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
- package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
- package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
- package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
- package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
- package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
- package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
- package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
- package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
- package/src/sap/fe/macros/chart/MdcChartTemplate.js +19 -3
- package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +15 -4
- package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
- package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
- package/src/sap/fe/macros/controls/FilterBar.js +49 -2
- package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
- package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
- package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
- package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
- package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
- package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
- package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
- package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
- package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
- package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
- package/src/sap/fe/macros/field/FieldBaseDelegate.js +9 -3
- package/src/sap/fe/macros/field/FieldBaseDelegate.ts +22 -1
- package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
- package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
- package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
- package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
- package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
- package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
- package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
- package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
- package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
- package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
- package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
- package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
- package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
- package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
- package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
- package/src/sap/fe/macros/internal/DataPoint.js +2 -1
- package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
- package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
- package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
- package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
- package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
- package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
- package/src/sap/fe/macros/internal/field/DisplayStyle.js +49 -11
- package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +51 -4
- package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
- package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
- package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
- package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
- package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +7 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +8 -7
- package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
- package/src/sap/fe/macros/library.js +1 -1
- package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
- package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
- package/src/sap/fe/macros/messagebundle.properties +37 -29
- package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
- package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
- package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
- package/src/sap/fe/macros/messagebundle_da.properties +6 -4
- package/src/sap/fe/macros/messagebundle_de.properties +11 -9
- package/src/sap/fe/macros/messagebundle_el.properties +7 -5
- package/src/sap/fe/macros/messagebundle_en.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
- package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_es.properties +6 -4
- package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
- package/src/sap/fe/macros/messagebundle_et.properties +5 -3
- package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
- package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
- package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
- package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
- package/src/sap/fe/macros/messagebundle_id.properties +8 -6
- package/src/sap/fe/macros/messagebundle_it.properties +4 -2
- package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
- package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
- package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
- package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
- package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
- package/src/sap/fe/macros/messagebundle_no.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
- package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
- package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
- package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
- package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
- package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
- package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
- package/src/sap/fe/macros/messagebundle_th.properties +4 -2
- package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
- package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
- package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
- package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
- package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
- package/src/sap/fe/macros/messages/MessageButton.js +17 -19
- package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
- package/src/sap/fe/macros/table/Action.js +24 -2
- package/src/sap/fe/macros/table/Action.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroup.js +24 -2
- package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
- package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionOverride.js +24 -2
- package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
- package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
- package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
- package/src/sap/fe/macros/table/Column.js +3 -3
- package/src/sap/fe/macros/table/Column.ts +2 -2
- package/src/sap/fe/macros/table/MdcTableTemplate.js +18 -8
- package/src/sap/fe/macros/table/MdcTableTemplate.tsx +30 -5
- package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
- package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
- package/src/sap/fe/macros/table/Table.block.js +137 -108
- package/src/sap/fe/macros/table/Table.block.tsx +29 -2
- package/src/sap/fe/macros/table/TableAPI.js +143 -133
- package/src/sap/fe/macros/table/TableAPI.ts +5 -1
- package/src/sap/fe/macros/table/TableDefinition.js +4 -2
- package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
- package/src/sap/fe/macros/table/TableRuntime.js +3 -3
- package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -19
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -23
- package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
- package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
- package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
- package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
- package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
- package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +11 -6
- package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +19 -14
- package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
- package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
|
@@ -2,10 +2,10 @@
|
|
|
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/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controls/CommandExecution", "sap/fe/core/helpers/BindingHelper", "sap/m/Menu", "sap/m/MenuItem", "sap/ui/core/CustomData", "sap/ui/performance/trace/FESRHelper", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/helpers/FPMHelper", "sap/fe/macros/share/ShareOptions", "sap/m/OverflowToolbarMenuButton", "sap/ui/base/BindingInfo", "./share/MsTeamsOptions", "./share/ShareAPI", "sap/fe/base/jsx-runtime/jsx"], function (Log, BindingToolkit, ClassSupport, CommonUtils, CommandExecution, BindingHelper, Menu, MenuItem, CustomData, FESRHelper, BuildingBlock, Action, FPMHelper, ShareOptions, OverflowToolbarMenuButton, BindingInfo, MsTeamsOptions, ShareAPI, _jsx) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controls/CommandExecution", "sap/fe/core/helpers/BindingHelper", "sap/m/Menu", "sap/m/MenuItem", "sap/ui/core/CustomData", "sap/ui/performance/trace/FESRHelper", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/helpers/FPMHelper", "sap/fe/macros/share/ShareOptions", "sap/m/OverflowToolbarLayoutData", "sap/m/OverflowToolbarMenuButton", "sap/m/library", "sap/ui/base/BindingInfo", "./share/MsTeamsOptions", "./share/ShareAPI", "sap/fe/base/jsx-runtime/jsx"], function (Log, BindingToolkit, ClassSupport, CommonUtils, CommandExecution, BindingHelper, Menu, MenuItem, CustomData, FESRHelper, BuildingBlock, Action, FPMHelper, ShareOptions, OverflowToolbarLayoutData, OverflowToolbarMenuButton, library, BindingInfo, MsTeamsOptions, ShareAPI, _jsx) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18;
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20;
|
|
9
9
|
function __ui5_require_async(path) {
|
|
10
10
|
return new Promise((resolve, reject) => {
|
|
11
11
|
sap.ui.require([path], module => {
|
|
@@ -24,12 +24,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
var _exports = {};
|
|
27
|
+
var OverflowToolbarPriority = library.OverflowToolbarPriority;
|
|
27
28
|
var PRINT_ICON = Action.PRINT_ICON;
|
|
28
29
|
var EXPORT_TO_SPREADSHEET_ICON = Action.EXPORT_TO_SPREADSHEET_ICON;
|
|
29
30
|
var EXPORT_TO_PDF_ICON = Action.EXPORT_TO_PDF_ICON;
|
|
30
31
|
var EXPORT_TO_CSV_ICON = Action.EXPORT_TO_CSV_ICON;
|
|
31
32
|
var UI = BindingHelper.UI;
|
|
32
33
|
var property = ClassSupport.property;
|
|
34
|
+
var implementInterface = ClassSupport.implementInterface;
|
|
33
35
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
34
36
|
var defineReference = ClassSupport.defineReference;
|
|
35
37
|
var aggregation = ClassSupport.aggregation;
|
|
@@ -84,14 +86,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
84
86
|
*/
|
|
85
87
|
let Share = (_dec = defineUI5Class("sap.fe.macros.Share"), _dec2 = property({
|
|
86
88
|
type: "string"
|
|
87
|
-
}), _dec3 = aggregation({
|
|
89
|
+
}), _dec3 = implementInterface("sap.m.IOverflowToolbarContent"), _dec4 = aggregation({
|
|
88
90
|
type: "sap.fe.macros.share.ShareOptions",
|
|
89
91
|
defaultClass: ShareOptions,
|
|
90
92
|
isDefault: true
|
|
91
|
-
}),
|
|
93
|
+
}), _dec5 = property({
|
|
94
|
+
type: "string",
|
|
95
|
+
defaultValue: OverflowToolbarPriority.High
|
|
96
|
+
}), _dec6 = aggregation({
|
|
92
97
|
type: "sap.fe.macros.share.MsTeamsOptions",
|
|
93
98
|
defaultClass: MsTeamsOptions
|
|
94
|
-
}),
|
|
99
|
+
}), _dec7 = defineReference(), _dec8 = defineReference(), _dec9 = defineReference(), _dec10 = defineReference(), _dec11 = defineReference(), _dec12 = defineReference(), _dec13 = defineReference(), _dec14 = defineReference(), _dec15 = defineReference(), _dec16 = defineReference(), _dec17 = defineReference(), _dec18 = defineReference(), _dec19 = defineReference(), _dec20 = defineReference(), _dec21 = defineReference(), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
|
|
95
100
|
function Share(idOrProps, props) {
|
|
96
101
|
var _this;
|
|
97
102
|
let shareAPIId;
|
|
@@ -106,30 +111,32 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
106
111
|
props.id = undefined;
|
|
107
112
|
_this = _BuildingBlock.call(this, undefined, props) || this;
|
|
108
113
|
_initializerDefineProperty(_this, "shareAPIId", _descriptor, _this);
|
|
114
|
+
_initializerDefineProperty(_this, "__implements__sap_m_IOverflowToolbarContent", _descriptor2, _this);
|
|
109
115
|
/**
|
|
110
116
|
* Supported Share options {@link sap.fe.macros.share.ShareOptions}.
|
|
111
117
|
* @public
|
|
112
118
|
*/
|
|
113
|
-
_initializerDefineProperty(_this, "shareOptions",
|
|
119
|
+
_initializerDefineProperty(_this, "shareOptions", _descriptor3, _this);
|
|
120
|
+
_initializerDefineProperty(_this, "priority", _descriptor4, _this);
|
|
114
121
|
/**
|
|
115
122
|
* Supported Microsoft Teams options.
|
|
116
123
|
*/
|
|
117
|
-
_initializerDefineProperty(_this, "msTeamsOptions",
|
|
118
|
-
_initializerDefineProperty(_this, "menuButton",
|
|
119
|
-
_initializerDefineProperty(_this, "cmdExecution",
|
|
120
|
-
_initializerDefineProperty(_this, "menu",
|
|
121
|
-
_initializerDefineProperty(_this, "saveAsTileMenuItem",
|
|
122
|
-
_initializerDefineProperty(_this, "shareAsCollaborationManager",
|
|
123
|
-
_initializerDefineProperty(_this, "shareViaJAMMenuItem",
|
|
124
|
-
_initializerDefineProperty(_this, "sendEmailMenuItem",
|
|
125
|
-
_initializerDefineProperty(_this, "shareAsCardMenuItem",
|
|
126
|
-
_initializerDefineProperty(_this, "shareViaChatMenuItem",
|
|
127
|
-
_initializerDefineProperty(_this, "shareAsTabMenuItem",
|
|
128
|
-
_initializerDefineProperty(_this, "msTeamsGroupMenuItem",
|
|
129
|
-
_initializerDefineProperty(_this, "printMenuItem",
|
|
130
|
-
_initializerDefineProperty(_this, "exportToSpreadsheetMenuItem",
|
|
131
|
-
_initializerDefineProperty(_this, "exportToPDFMenuItem",
|
|
132
|
-
_initializerDefineProperty(_this, "exportToCSVMenuItem",
|
|
124
|
+
_initializerDefineProperty(_this, "msTeamsOptions", _descriptor5, _this);
|
|
125
|
+
_initializerDefineProperty(_this, "menuButton", _descriptor6, _this);
|
|
126
|
+
_initializerDefineProperty(_this, "cmdExecution", _descriptor7, _this);
|
|
127
|
+
_initializerDefineProperty(_this, "menu", _descriptor8, _this);
|
|
128
|
+
_initializerDefineProperty(_this, "saveAsTileMenuItem", _descriptor9, _this);
|
|
129
|
+
_initializerDefineProperty(_this, "shareAsCollaborationManager", _descriptor10, _this);
|
|
130
|
+
_initializerDefineProperty(_this, "shareViaJAMMenuItem", _descriptor11, _this);
|
|
131
|
+
_initializerDefineProperty(_this, "sendEmailMenuItem", _descriptor12, _this);
|
|
132
|
+
_initializerDefineProperty(_this, "shareAsCardMenuItem", _descriptor13, _this);
|
|
133
|
+
_initializerDefineProperty(_this, "shareViaChatMenuItem", _descriptor14, _this);
|
|
134
|
+
_initializerDefineProperty(_this, "shareAsTabMenuItem", _descriptor15, _this);
|
|
135
|
+
_initializerDefineProperty(_this, "msTeamsGroupMenuItem", _descriptor16, _this);
|
|
136
|
+
_initializerDefineProperty(_this, "printMenuItem", _descriptor17, _this);
|
|
137
|
+
_initializerDefineProperty(_this, "exportToSpreadsheetMenuItem", _descriptor18, _this);
|
|
138
|
+
_initializerDefineProperty(_this, "exportToPDFMenuItem", _descriptor19, _this);
|
|
139
|
+
_initializerDefineProperty(_this, "exportToCSVMenuItem", _descriptor20, _this);
|
|
133
140
|
return _this;
|
|
134
141
|
}
|
|
135
142
|
_exports = Share;
|
|
@@ -824,7 +831,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
824
831
|
this.isInitialized = this._initializeMenuItems(this.getPageController().getView(), appComponent).catch(error => {
|
|
825
832
|
Log.error(error);
|
|
826
833
|
});
|
|
834
|
+
this.setLayoutData(new OverflowToolbarLayoutData({
|
|
835
|
+
priority: this.priority
|
|
836
|
+
}));
|
|
827
837
|
return menuButton;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
/**
|
|
841
|
+
* Returns properties for the interface IOverflowToolbarContent.
|
|
842
|
+
* @returns Returns the configuration of IOverflowToolbarContent
|
|
843
|
+
*/;
|
|
844
|
+
_proto.getOverflowToolbarConfig = function getOverflowToolbarConfig() {
|
|
845
|
+
return {
|
|
846
|
+
canOverflow: true,
|
|
847
|
+
priority: this.priority
|
|
848
|
+
};
|
|
828
849
|
};
|
|
829
850
|
return Share;
|
|
830
851
|
}(BuildingBlock), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "shareAPIId", [_dec2], {
|
|
@@ -832,87 +853,99 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
832
853
|
enumerable: true,
|
|
833
854
|
writable: true,
|
|
834
855
|
initializer: null
|
|
835
|
-
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "
|
|
856
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_m_IOverflowToolbarContent", [_dec3], {
|
|
857
|
+
configurable: true,
|
|
858
|
+
enumerable: true,
|
|
859
|
+
writable: true,
|
|
860
|
+
initializer: function () {
|
|
861
|
+
return true;
|
|
862
|
+
}
|
|
863
|
+
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "shareOptions", [_dec4], {
|
|
864
|
+
configurable: true,
|
|
865
|
+
enumerable: true,
|
|
866
|
+
writable: true,
|
|
867
|
+
initializer: null
|
|
868
|
+
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "priority", [_dec5], {
|
|
836
869
|
configurable: true,
|
|
837
870
|
enumerable: true,
|
|
838
871
|
writable: true,
|
|
839
872
|
initializer: null
|
|
840
|
-
}),
|
|
873
|
+
}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "msTeamsOptions", [_dec6], {
|
|
841
874
|
configurable: true,
|
|
842
875
|
enumerable: true,
|
|
843
876
|
writable: true,
|
|
844
877
|
initializer: null
|
|
845
|
-
}),
|
|
878
|
+
}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "menuButton", [_dec7], {
|
|
846
879
|
configurable: true,
|
|
847
880
|
enumerable: true,
|
|
848
881
|
writable: true,
|
|
849
882
|
initializer: null
|
|
850
|
-
}),
|
|
883
|
+
}), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "cmdExecution", [_dec8], {
|
|
851
884
|
configurable: true,
|
|
852
885
|
enumerable: true,
|
|
853
886
|
writable: true,
|
|
854
887
|
initializer: null
|
|
855
|
-
}),
|
|
888
|
+
}), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "menu", [_dec9], {
|
|
856
889
|
configurable: true,
|
|
857
890
|
enumerable: true,
|
|
858
891
|
writable: true,
|
|
859
892
|
initializer: null
|
|
860
|
-
}),
|
|
893
|
+
}), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "saveAsTileMenuItem", [_dec10], {
|
|
861
894
|
configurable: true,
|
|
862
895
|
enumerable: true,
|
|
863
896
|
writable: true,
|
|
864
897
|
initializer: null
|
|
865
|
-
}),
|
|
898
|
+
}), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "shareAsCollaborationManager", [_dec11], {
|
|
866
899
|
configurable: true,
|
|
867
900
|
enumerable: true,
|
|
868
901
|
writable: true,
|
|
869
902
|
initializer: null
|
|
870
|
-
}),
|
|
903
|
+
}), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "shareViaJAMMenuItem", [_dec12], {
|
|
871
904
|
configurable: true,
|
|
872
905
|
enumerable: true,
|
|
873
906
|
writable: true,
|
|
874
907
|
initializer: null
|
|
875
|
-
}),
|
|
908
|
+
}), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "sendEmailMenuItem", [_dec13], {
|
|
876
909
|
configurable: true,
|
|
877
910
|
enumerable: true,
|
|
878
911
|
writable: true,
|
|
879
912
|
initializer: null
|
|
880
|
-
}),
|
|
913
|
+
}), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "shareAsCardMenuItem", [_dec14], {
|
|
881
914
|
configurable: true,
|
|
882
915
|
enumerable: true,
|
|
883
916
|
writable: true,
|
|
884
917
|
initializer: null
|
|
885
|
-
}),
|
|
918
|
+
}), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "shareViaChatMenuItem", [_dec15], {
|
|
886
919
|
configurable: true,
|
|
887
920
|
enumerable: true,
|
|
888
921
|
writable: true,
|
|
889
922
|
initializer: null
|
|
890
|
-
}),
|
|
923
|
+
}), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "shareAsTabMenuItem", [_dec16], {
|
|
891
924
|
configurable: true,
|
|
892
925
|
enumerable: true,
|
|
893
926
|
writable: true,
|
|
894
927
|
initializer: null
|
|
895
|
-
}),
|
|
928
|
+
}), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "msTeamsGroupMenuItem", [_dec17], {
|
|
896
929
|
configurable: true,
|
|
897
930
|
enumerable: true,
|
|
898
931
|
writable: true,
|
|
899
932
|
initializer: null
|
|
900
|
-
}),
|
|
933
|
+
}), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, "printMenuItem", [_dec18], {
|
|
901
934
|
configurable: true,
|
|
902
935
|
enumerable: true,
|
|
903
936
|
writable: true,
|
|
904
937
|
initializer: null
|
|
905
|
-
}),
|
|
938
|
+
}), _descriptor18 = _applyDecoratedDescriptor(_class2.prototype, "exportToSpreadsheetMenuItem", [_dec19], {
|
|
906
939
|
configurable: true,
|
|
907
940
|
enumerable: true,
|
|
908
941
|
writable: true,
|
|
909
942
|
initializer: null
|
|
910
|
-
}),
|
|
943
|
+
}), _descriptor19 = _applyDecoratedDescriptor(_class2.prototype, "exportToPDFMenuItem", [_dec20], {
|
|
911
944
|
configurable: true,
|
|
912
945
|
enumerable: true,
|
|
913
946
|
writable: true,
|
|
914
947
|
initializer: null
|
|
915
|
-
}),
|
|
948
|
+
}), _descriptor20 = _applyDecoratedDescriptor(_class2.prototype, "exportToCSVMenuItem", [_dec21], {
|
|
916
949
|
configurable: true,
|
|
917
950
|
enumerable: true,
|
|
918
951
|
writable: true,
|
|
@@ -921,4 +954,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
921
954
|
_exports = Share;
|
|
922
955
|
return _exports;
|
|
923
956
|
}, false);
|
|
924
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnVtTVNUZWFtc09wdGlvbiIsIkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEIiwiQ09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQiIsIkNPTExBQk9SQVRJT05fTVNURUFNU19DSEFUIiwiZW51bVNoYXJlT3B0aW9uIiwiU0VORF9FTUFJTCIsIlNIQVJFX0pBTSIsIlNBVkVfQVNfVElMRSIsIk1TX1RFQU1TX0dST1VQIiwiU0hBUkVfQ09MTEFCT1JBVElPTl9NQU5BR0VSIiwiU2hhcmUiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsIl9kZWMzIiwiYWdncmVnYXRpb24iLCJkZWZhdWx0Q2xhc3MiLCJTaGFyZU9wdGlvbnMiLCJpc0RlZmF1bHQiLCJfZGVjNCIsIk1zVGVhbXNPcHRpb25zIiwiX2RlYzUiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsImlkT3JQcm9wcyIsInByb3BzIiwiX3RoaXMiLCJzaGFyZUFQSUlkIiwiaWQiLCJ1bmRlZmluZWQiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwiX293bmVyQ29tcG9uZW50IiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJnZXRBcHBDb21wb25lbnQiLCJfaW5pdGlhbGl6ZU1lbnVJdGVtcyIsInZpZXciLCJhcHBDb21wb25lbnQiLCJpc1RlYW1zTW9kZUFjdGl2ZSIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiQ29sbGFib3JhdGlvbiIsImRlZmF1bHQiLCJDb2xsYWJvcmF0aW9uSGVscGVyIiwiX191aTVfcmVxdWlyZV9hc3luYyIsIm1lbnVCdXR0b24iLCJjdXJyZW50IiwidW5iaW5kUHJvcGVydHkiLCJzZXRWaXNpYmxlIiwiY29udHJvbGxlciIsImdldENvbnRyb2xsZXIiLCJzaGVsbFNlcnZpY2VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImlzUGx1Z2luSW5mb1N0YWJsZSIsIndhaXRGb3JQbHVnaW5zTG9hZCIsImludGVybmFsQnV0dG9uIiwiZ2V0QWdncmVnYXRpb24iLCJhdHRhY2hFdmVudE9uY2UiLCJfYmxvY2tJbnRlcm5hbENvbmZpZyIsIl9nZXRTaGFyZUJsb2NrQ29uZmlnIiwiX2FkZE1lbnVJdGVtcyIsInNldFNoYXJlT3B0aW9uc1Zpc2liaWxpdHkiLCJfYWRkU2VuZEVtYWlsT3B0aW9uIiwiX2FkZFNoZWxsQmFzZWRNZW51SXRlbXMiLCJfYWRkUHJpbnRPcHRpb25zIiwiX2FkZEV4cG9ydEV4Y2VsT3B0aW9ucyIsIl9hZGRFeHBvcnRDU1ZPcHRpb25zIiwiX2FkZEV4cG9ydFBERk9wdGlvbnMiLCJfY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyIsInNoYXJlT3B0aW9uUHJvcCIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJzaGFyZUFjdGlvblByb3BzIiwic2hhcmUiLCJtb2R1bGUiLCJwcmVzcyIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicmVwbGFjZSIsIm1ldGhvZCIsImxlbmd0aCIsIkZQTUhlbHBlciIsImxvYWRNb2R1bGVBbmRDYWxsTWV0aG9kIiwiTG9nIiwiZXJyb3IiLCJoYXNPd25Qcm9wZXJ0eSIsInByaW50IiwibWVudSIsImFkZEl0ZW0iLCJfanN4IiwiTWVudUl0ZW0iLCJyZWYiLCJwcmludE1lbnVJdGVtIiwidGV4dCIsImdldFRyYW5zbGF0ZWRUZXh0IiwiaWNvbiIsIlBSSU5UX0lDT04iLCJleHBvcnRUb1NwcmVhZHNoZWV0TWVudUl0ZW0iLCJFWFBPUlRfVE9fU1BSRUFEU0hFRVRfSUNPTiIsImV4cG9ydFRvQ1NWTWVudUl0ZW0iLCJFWFBPUlRfVE9fQ1NWX0lDT04iLCJleHBvcnRUb1BERk1lbnVJdGVtIiwiRVhQT1JUX1RPX1BERl9JQ09OIiwic2hhcmVPcHRpb25zIiwic2hvd1NlbmRFbWFpbCIsInNlbmRFbWFpbE1lbnVJdGVtIiwiX3RyaWdnZXJFbWFpbCIsImhhc1VzaGVsbCIsImhhc1VTaGVsbCIsIl9hZGRTaGFyZVZpYUpBTU9wdGlvbiIsIl9hZGRNU1RlYW1zT3B0aW9ucyIsIl9hZGRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbiIsIl9hZGRTYXZlQXNUaWxlT3B0aW9uIiwiY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJjb2xsYWJvcmF0aW9uT3B0aW9uIiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJPcHRpb24iLCJzaG93Q29sbGFib3JhdGlvbk1hbmFnZXIiLCJtZW51SXRlbSIsInNoYXJlQXNDb2xsYWJvcmF0aW9uTWFuYWdlciIsImV2ZW50IiwiX2NvbGxhYm9yYXRpb25NYW5hZ2VyQnV0dG9uUHJlc3MiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsImZlc3JTdGVwTmFtZSIsImVyciIsIm1lc3NhZ2UiLCJFcnJvciIsIlN0cmluZyIsImNvbGxhYm9yYXRpb25DYWxsQmFjayIsImNsaWNrZWRNZW51SXRlbSIsImdldFNvdXJjZSIsIkNvbW1vblV0aWxzIiwiZ2V0VGFyZ2V0VmlldyIsIl9hZGFwdFNoYXJlTWV0YWRhdGEiLCJzaGFyZUluZm9Nb2RlbCIsImdldE1vZGVsIiwic2hhcmVJbmZvIiwiZ2V0RGF0YSIsImNvbGxhYm9yYXRpb25JbmZvIiwiYXBwVGl0bGUiLCJ1cmwiLCJoYXNKYW0iLCJpc0phbUFjdGl2ZSIsInNoYXJlVmlhSkFNTWVudUl0ZW0iLCJfdHJpZ2dlclNoYXJlVG9KYW0iLCJzaG93TXNUZWFtc09wdGlvbnMiLCJzaGFyZUNvbGxhYm9yYXRpb25PcHRpb25zIiwiZ2V0VGVhbXNDb2xsYWJPcHRpb25zVmlhU2hhcmUiLCJpc1NoYXJlQXNDYXJkRW5hYmxlZCIsIl9nZXRJc1NoYXJlQXNDYXJkRW5hYmxlZCIsIm1lbnVJdGVtU2V0dGluZ3MiLCJfZ2V0TXNUZWFtc01lbnVJdGVtU2V0dGluZ3MiLCJzdWJPcHRpb25zIiwiaXRlbXMiLCJtZW51SXRlbUtleSIsIkFycmF5IiwiaXNBcnJheSIsImtleSIsIl9hZGRNc1RlYW1zTWVudUl0ZW0iLCJBZGRCb29rbWFya0J1dHRvbiIsImFkZEJvb2ttYXJrQnV0dG9uIiwiZ2V0RW5hYmxlZCIsInNhdmVBc1RpbGVNZW51SXRlbSIsImdldFRleHQiLCJnZXRJY29uIiwiX3NhdmVBc1RpbGUiLCJjaGlsZHJlbiIsImRlcGVuZGVudHMiLCJkZXN0cm95Iiwic2hvd1NoYXJlQXNDYXJkIiwibXNUZWFtc09wdGlvbnMiLCJlbmFibGVDYXJkIiwiQm9vbGVhbiIsIkJpbmRpbmdJbmZvIiwicGFyc2UiLCJfZ2V0TXNUZWFtc1N1Yk9wdGlvbnMiLCJjb2xsYWJvcmF0aW9uTWVudUl0ZW1QcmVzcyIsIkN1c3RvbURhdGEiLCJ2YWx1ZSIsIl9nZXRNZW51SXRlbVJlZmVyZW5jZSIsImN1c3RvbURhdGEiLCJhdHRhY2hQcmVzcyIsInJlZHVjZSIsIm1lbnVJdGVtcyIsInN1Yk9wdGlvbiIsInN1Yk1lbnVJdGVtIiwiY29sbGFib3JhdGlvbkRhdGEiLCJkYXRhIiwidGVhbXNIZWxwZXJTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGlvblNlcnZpY2VzIiwib1RlYW1zSGVscGVyU2VydmljZSIsImlzRmVhdHVyZUZsYWdFbmFibGVkIiwiY2FyZERlZmluaXRpb24iLCJnZXRDYXJkRGVmaW5pdGlvbiIsImNhcmRJZCIsInNoZWxsU2VydmljZUhlbHBlciIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyc2VTaGVsbEhhc2giLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaGFzaCIsInJlYXNvbiIsImluZm8iLCJvcHRpb25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsInZpc2libGVCaW5kaW5nRXhwcyIsImJpbmRpbmdUb29sa2l0RXhwcyIsIm9wdGlvbiIsImV4cCIsIl9nZXRTaGFyZU9wdGlvblZpc2liaWxpdHlFeHByZXNzaW9uIiwiX3NldFNoYXJlT3B0aW9uVmlzaWJpbGl0eSIsInNoYXJlQmxvY2tWaXNpYmxlRXhwIiwib3IiLCJjbWRFeGVjdXRpb24iLCJfYmluZFVJVmlzaWJpbGl0eSIsInNoYXJlQXNDYXJkTWVudUl0ZW0iLCJzaGFyZVZpYUNoYXRNZW51SXRlbSIsInNoYXJlQXNUYWJNZW51SXRlbSIsIm1zVGVhbXNHcm91cE1lbnVJdGVtIiwib3B0aW9uTWVudUl0ZW1SZWYiLCJjb25zdGFudCIsIl9nZXRNU1RlYW1zU2hhcmVPcHRpb25WaXNpYmlsaXR5IiwiX2dldENvbGxhYm9yYXRpb25PcHRpb25FeHByZXNzaW9uIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJpbnRlcm5hbE9wdGlvbiIsImlzQ29uc3RhbnQiLCJhbmQiLCJtc1RlYW1zQ29uZmlnRXhwIiwiX2dldFNob3dNc1RlYW1zT3B0aW9uc0V4cHJlc3Npb24iLCJtc1RlYW1zT3B0aW9uc1ZhbHVlIiwiYWxsTVNUZWFtc09wdGlvbnNFeHBzIiwiYmluZGluZ1Rvb2xraXRFeHAiLCJtc1RlYW1zT3B0aW9uIiwibXNUZWFtT3B0aW9uRXhwIiwib3B0aW9uRXhwIiwiaW50ZXJuYWxPcHRpb25FeHAiLCJfZ2V0U2hhcmVBc0NhcmRWaXNpYmlsaXR5Iiwic2hhcmVBc0NhcmRPcHRpb25SZWYiLCJleHBTaG93TVNUZWFtc09wdGlvbnMiLCJleHBTaG93U2hhcmVBc0NhcmQiLCJub3QiLCJVSSIsIklzRWRpdGFibGUiLCJtc1RlYW1zT3B0aW9uUmVmIiwiZXhwcmVzc2lvbiIsIm1lbnVJdGVtUmVmIiwiaXRlbSIsImNvbXBpbGVkRXhwIiwiY29tcGlsZUV4cHJlc3Npb24iLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJwYXJzZWRFeHAiLCJiaW5kUHJvcGVydHkiLCJ2aWV3U2hhcmVDb25maWdzIiwiZmVBcHBTaGFyZUNvbmZpZ3MiLCJnZXRNYW5pZmVzdEVudHJ5IiwiYXBwIiwiX2dldE9wdGlvbkJsb2NrQ29uZmlnIiwidGVhbXMiLCJhc0NhcmQiLCJmZUFwcFNldHRpbmciLCJ2aWV3TGV2ZWxTZXR0aW5nIiwiZmVBcHBFeHAiLCJ2aWV3TGV2ZWxFeHAiLCJTaGFyZUFQSSIsIk92ZXJmbG93VG9vbGJhck1lbnVCdXR0b24iLCJ0b29sdGlwIiwiTWVudSIsImdldFBhZ2VDb250cm9sbGVyIiwiZ2V0VmlldyIsImFkZERlcGVuZGVudCIsIkNvbW1hbmRFeGVjdXRpb24iLCJjb21tYW5kIiwiZXhlY3V0ZSIsImdldE1lbnUiLCJvcGVuQnkiLCJpc0luaXRpYWxpemVkIiwiY2F0Y2giLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJTaGFyZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24sIEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFuZCwgY29tcGlsZUV4cHJlc3Npb24sIGNvbnN0YW50LCBpc0NvbnN0YW50LCBub3QsIG9yLCByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBhZ2dyZWdhdGlvbiwgZGVmaW5lUmVmZXJlbmNlLCBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tYW5kRXhlY3V0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Db21tYW5kRXhlY3V0aW9uXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCBNZW51IGZyb20gXCJzYXAvbS9NZW51XCI7XG5pbXBvcnQgdHlwZSBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgdHlwZSB7ICRNZW51SXRlbVNldHRpbmdzIH0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpb25PcHRpb25LZXksIENvbGxhYm9yYXRpb25PcHRpb25zIH0gZnJvbSBcInNhcC9zdWl0ZS91aS9jb21tb25zL2NvbGxhYm9yYXRpb24vVGVhbXNIZWxwZXJTZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuXG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQge1xuXHRFWFBPUlRfVE9fQ1NWX0lDT04sXG5cdEVYUE9SVF9UT19QREZfSUNPTixcblx0RVhQT1JUX1RPX1NQUkVBRFNIRUVUX0lDT04sXG5cdFBSSU5UX0lDT05cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IEZQTUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2hhcmVPcHRpb25zIGZyb20gXCJzYXAvZmUvbWFjcm9zL3NoYXJlL1NoYXJlT3B0aW9uc1wiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhck1lbnVCdXR0b24gZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhck1lbnVCdXR0b25cIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTXNUZWFtc09wdGlvbnMgZnJvbSBcIi4vc2hhcmUvTXNUZWFtc09wdGlvbnNcIjtcbmltcG9ydCBTaGFyZUFQSSBmcm9tIFwiLi9zaGFyZS9TaGFyZUFQSVwiO1xuXG4vLyBNUyBUZWFtcyBvcHRpb25zIGFyZSBub3QgcHVibGljIHZpYSBTaGFyZSBidWlsZGluZyBibG9jay5cbi8vIFNvLCAnc2hvd01zVGVhbXNPcHRpb25zJyBpcyBpbnRlcm5hbCBhbmQgc2hhbGwgYmUgb25seSBwaWNrZWQgZnJvbSB0ZW1wbGF0ZSBtYW5pZmVzdC5cbnR5cGUgSW50ZXJuYWxTaGFyZU9wdGlvbnMgPSBQcm9wZXJ0aWVzT2Y8U2hhcmVPcHRpb25zPjtcblxudHlwZSBTaGFyZU9wdGlvbktleSA9XG5cdHwgQ29sbGFib3JhdGlvbk9wdGlvbktleVxuXHR8IFwiU0VORF9FTUFJTFwiXG5cdHwgXCJTSEFSRV9KQU1cIlxuXHR8IFwiU0FWRV9BU19USUxFXCJcblx0fCBcIk1TX1RFQU1TX0dST1VQXCJcblx0fCBcIlNIQVJFX0NPTExBQk9SQVRJT05fTUFOQUdFUlwiO1xuXG5jb25zdCBlbnVtTVNUZWFtc09wdGlvbjoge1xuXHRba2V5IGluIENvbGxhYm9yYXRpb25PcHRpb25LZXldOiBDb2xsYWJvcmF0aW9uT3B0aW9uS2V5O1xufSA9IHtcblx0Q09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkQ6IFwiQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkRcIixcblx0Q09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQjogXCJDT0xMQUJPUkFUSU9OX01TVEVBTVNfVEFCXCIsXG5cdENPTExBQk9SQVRJT05fTVNURUFNU19DSEFUOiBcIkNPTExBQk9SQVRJT05fTVNURUFNU19DSEFUXCJcbn07XG5cbmNvbnN0IGVudW1TaGFyZU9wdGlvbjoge1xuXHRba2V5IGluIFNoYXJlT3B0aW9uS2V5XTogU2hhcmVPcHRpb25LZXk7XG59ID0ge1xuXHQuLi5lbnVtTVNUZWFtc09wdGlvbixcblx0Li4ue1xuXHRcdFNFTkRfRU1BSUw6IFwiU0VORF9FTUFJTFwiLFxuXHRcdFNIQVJFX0pBTTogXCJTSEFSRV9KQU1cIixcblx0XHRTQVZFX0FTX1RJTEU6IFwiU0FWRV9BU19USUxFXCIsXG5cdFx0TVNfVEVBTVNfR1JPVVA6IFwiTVNfVEVBTVNfR1JPVVBcIixcblx0XHRTSEFSRV9DT0xMQUJPUkFUSU9OX01BTkFHRVI6IFwiU0hBUkVfQ09MTEFCT1JBVElPTl9NQU5BR0VSXCJcblx0fVxufTtcblxudHlwZSBDb25maWdPcHRpb25zID0gSW50ZXJuYWxTaGFyZU9wdGlvbnMgJiBQcm9wZXJ0aWVzT2Y8TXNUZWFtc09wdGlvbnM+O1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIHVzZWQgdG8gY3JlYXRlIHRoZSDigJhTaGFyZeKAmSBmdW5jdGlvbmFsaXR5LlxuICogPGJyPlxuICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgJ1NoYXJlIGluIFNBUCBKYW0nIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBwbGF0Zm9ybXMgdGhhdCBhcmUgaW50ZWdyYXRlZCB3aXRoIFNBUCBKYW0uXG4gKiA8YnI+XG4gKiBJZiB5b3UgYXJlIGNvbnN1bWluZyB0aGlzIG1hY3JvIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBTQVAgRmlvcmkgbGF1bmNocGFkIGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gdGhlICdTYXZlIGFzIFRpbGUnIG9wdGlvbiBpcyBub3QgdmlzaWJsZS5cbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOlNoYXJlXG4gKiBpZD1cInNvbWVJRFwiXG4gKiB2aXNpYmxlPVwidHJ1ZVwiXG4gKiAvJmd0O1xuICogPC9wcmU+XG4gKiB7QGxpbmsgZGVtbzpzYXAvZmUvY29yZS9mcG1FeHBsb3Jlci9pbmRleC5odG1sIy9idWlsZGluZ0Jsb2Nrcy9mZWF0dXJlcy9zaGFyZURlZmF1bHQgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2tzfVxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuOTMuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLlNoYXJlXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFyZSBleHRlbmRzIEJ1aWxkaW5nQmxvY2s8U2hhcmVBUEk+IHtcblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRwdWJsaWMgc2hhcmVBUElJZD86IHN0cmluZztcblxuXHQvKipcblx0ICogU3VwcG9ydGVkIFNoYXJlIG9wdGlvbnMge0BsaW5rIHNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVPcHRpb25zfS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHtcblx0XHR0eXBlOiBcInNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVPcHRpb25zXCIsXG5cdFx0ZGVmYXVsdENsYXNzOiBTaGFyZU9wdGlvbnMsXG5cdFx0aXNEZWZhdWx0OiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBzaGFyZU9wdGlvbnM/OiBTaGFyZU9wdGlvbnM7XG5cblx0LyoqXG5cdCAqIFN1cHBvcnRlZCBNaWNyb3NvZnQgVGVhbXMgb3B0aW9ucy5cblx0ICovXG5cdEBhZ2dyZWdhdGlvbih7XG5cdFx0dHlwZTogXCJzYXAuZmUubWFjcm9zLnNoYXJlLk1zVGVhbXNPcHRpb25zXCIsXG5cdFx0ZGVmYXVsdENsYXNzOiBNc1RlYW1zT3B0aW9uc1xuXHR9KVxuXHRwdWJsaWMgbXNUZWFtc09wdGlvbnM/OiBNc1RlYW1zT3B0aW9ucztcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0bWVudUJ1dHRvbiE6IFJlZjxNZW51QnV0dG9uPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0Y21kRXhlY3V0aW9uITogUmVmPENvbW1hbmRFeGVjdXRpb24+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRtZW51ITogUmVmPE1lbnU+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzYXZlQXNUaWxlTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZUFzQ29sbGFib3JhdGlvbk1hbmFnZXIhOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZVZpYUpBTU1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0c2VuZEVtYWlsTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZUFzQ2FyZE1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0c2hhcmVWaWFDaGF0TWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZUFzVGFiTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRtc1RlYW1zR3JvdXBNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHByaW50TWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRleHBvcnRUb1NwcmVhZHNoZWV0TWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRleHBvcnRUb1BERk1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZXhwb3J0VG9DU1ZNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0cHVibGljIGlzSW5pdGlhbGl6ZWQ/OiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgX2Jsb2NrSW50ZXJuYWxDb25maWchOiBDb25maWdPcHRpb25zO1xuXG5cdGNvbnN0cnVjdG9yKGlkT3JQcm9wczogc3RyaW5nIHwgKFByb3BlcnRpZXNPZjxTaGFyZT4gJiAkQ29udHJvbFNldHRpbmdzKSwgcHJvcHM/OiBQcm9wZXJ0aWVzT2Y8U2hhcmU+ICYgJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdGxldCBzaGFyZUFQSUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKHR5cGVvZiBpZE9yUHJvcHMgIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHByb3BzID0gaWRPclByb3BzO1xuXHRcdFx0c2hhcmVBUElJZCA9IHByb3BzLmlkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzaGFyZUFQSUlkID0gaWRPclByb3BzO1xuXHRcdH1cblx0XHRwcm9wcyA/Pz0ge307XG5cdFx0cHJvcHMuc2hhcmVBUElJZCA9IHNoYXJlQVBJSWQ7XG5cdFx0cHJvcHMuaWQgPSB1bmRlZmluZWQ7XG5cdFx0c3VwZXIodW5kZWZpbmVkLCBwcm9wcyk7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQpOiB2b2lkIHtcblx0XHRzdXBlci5vbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudCk7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KF9vd25lckNvbXBvbmVudC5nZXRBcHBDb21wb25lbnQoKSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBzaGFyZSBvcHRpb24gZnJvbSB0aGUgc2hlbGwgY29uZmlndXJhdGlvbiBhc3luY2hyb25vdXNseSBhbmQgcHJlcGFyZSB0aGUgY29udGVudCBvZiB0aGUgbWVudSBidXR0b24uXG5cdCAqIE9wdGlvbnMgb3JkZXIgYXJlOlxuXHQgKiAtIFNlbmQgYXMgRW1haWxcblx0ICogLSBTaGFyZSBhcyBKYW0gKGlmIGF2YWlsYWJsZSlcblx0ICogLSBUZWFtcyBvcHRpb25zIChpZiBhdmFpbGFibGUpXG5cdCAqIC0gU2F2ZSBhcyB0aWxlLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGlzIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW5cblx0ICogQHBhcmFtIGFwcENvbXBvbmVudCBUaGUgQXBwQ29tcG9uZW50IGluc3RhbmNlXG5cdCAqL1xuXHRhc3luYyBfaW5pdGlhbGl6ZU1lbnVJdGVtcyh2aWV3OiBWaWV3LCBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBpc1RlYW1zTW9kZUFjdGl2ZSA9IGZhbHNlO1xuXHRcdGlmIChhcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5Db2xsYWJvcmF0aW9uKSB7XG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IENvbGxhYm9yYXRpb25IZWxwZXIgfSA9IGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9jb21tb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkhlbHBlclwiKTtcblx0XHRcdGlzVGVhbXNNb2RlQWN0aXZlID0gYXdhaXQgQ29sbGFib3JhdGlvbkhlbHBlci5pc1RlYW1zTW9kZUFjdGl2ZSgpO1xuXHRcdH1cblxuXHRcdGlmIChpc1RlYW1zTW9kZUFjdGl2ZSkge1xuXHRcdFx0Ly9uZWVkIHRvIGNsZWFyIHRoZSB2aXNpYmxlIHByb3BlcnR5IGJpbmRpbmdzIG90aGVyd2lzZSB3aGVuIHRoZSBiaW5kaW5nIHZhbHVlIGNoYW5nZXMgdGhlbiBpdCB3aWxsIHNldCBiYWNrIHRoZSB2aXNpYmxlIHRvIHRoZSByZXNvbHZlZCB2YWx1ZVxuXHRcdFx0dGhpcy5tZW51QnV0dG9uLmN1cnJlbnQ/LnVuYmluZFByb3BlcnR5KFwidmlzaWJsZVwiLCB0cnVlKTtcblx0XHRcdHRoaXMubWVudUJ1dHRvbi5jdXJyZW50Py5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZXMgPSBhcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IGlzUGx1Z2luSW5mb1N0YWJsZSA9IGF3YWl0IHNoZWxsU2VydmljZXMud2FpdEZvclBsdWdpbnNMb2FkKCk7XG5cdFx0aWYgKCFpc1BsdWdpbkluZm9TdGFibGUpIHtcblx0XHRcdC8vIEluIGNhc2UgdGhlIHBsdWdpbiBpbmZvIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIHdlIG5lZWQgdG8gZG8gdGhpcyBjb21wdXRhdGlvbiBhZ2FpbiBvbiB0aGUgbmV4dCBidXR0b24gY2xpY2tcblx0XHRcdGNvbnN0IGludGVybmFsQnV0dG9uID0gdGhpcy5tZW51QnV0dG9uLmN1cnJlbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiX2NvbnRyb2xcIikgYXMgTWFuYWdlZE9iamVjdDtcblx0XHRcdGludGVybmFsQnV0dG9uPy5hdHRhY2hFdmVudE9uY2UoXCJwcmVzc1wiLCB7fSwgKCkgPT4gdGhpcy5faW5pdGlhbGl6ZU1lbnVJdGVtcywgdGhpcyk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZyA9IHRoaXMuX2dldFNoYXJlQmxvY2tDb25maWcodmlldyk7XG5cblx0XHRhd2FpdCB0aGlzLl9hZGRNZW51SXRlbXMoY29udHJvbGxlciwgc2hlbGxTZXJ2aWNlcywgdmlldyk7XG5cdFx0dGhpcy5zZXRTaGFyZU9wdGlvbnNWaXNpYmlsaXR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHNoYXJlIG9wdGlvbnMgYXMgbWVudSBpdGVtcyB0byB0aGUgc2hhcmUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHNoZWxsU2VydmljZXMgU2hlbGwgU2VydmljZXNcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRhc3luYyBfYWRkTWVudUl0ZW1zKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBzaGVsbFNlcnZpY2VzOiBJU2hlbGxTZXJ2aWNlcywgdmlldzogVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuX2FkZFNlbmRFbWFpbE9wdGlvbihjb250cm9sbGVyKTtcblx0XHRhd2FpdCB0aGlzLl9hZGRTaGVsbEJhc2VkTWVudUl0ZW1zKGNvbnRyb2xsZXIsIHNoZWxsU2VydmljZXMpO1xuXHRcdHRoaXMuX2FkZFByaW50T3B0aW9ucyhjb250cm9sbGVyLCB2aWV3KTtcblx0XHR0aGlzLl9hZGRFeHBvcnRFeGNlbE9wdGlvbnMoY29udHJvbGxlciwgdmlldyk7XG5cdFx0dGhpcy5fYWRkRXhwb3J0Q1NWT3B0aW9ucyhjb250cm9sbGVyLCB2aWV3KTtcblx0XHR0aGlzLl9hZGRFeHBvcnRQREZPcHRpb25zKGNvbnRyb2xsZXIsIHZpZXcpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGwgdGhlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGN1c3RvbSBoYW5kbGVycy5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoaXMgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpblxuXHQgKiBAcGFyYW0gc2hhcmVPcHRpb25Qcm9wIFRoZSBrZXkgb2YgdGhlIGFjdGlvbiB5b3Ugd2FudCB0byBjYWxsXG5cdCAqL1xuXHRfY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhcblx0XHRjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0XHR2aWV3OiBWaWV3LFxuXHRcdHNoYXJlT3B0aW9uUHJvcDogXCJwcmludFwiIHwgXCJleHBvcnRUb0NTVlwiIHwgXCJleHBvcnRUb1NwcmVhZHNoZWV0XCIgfCBcImV4cG9ydFRvUERGXCJcblx0KTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0Y29uc3Qgc2hhcmVBY3Rpb25Qcm9wcyA9IHZpZXdEYXRhPy5zaGFyZT8uW3NoYXJlT3B0aW9uUHJvcF07XG5cdFx0Y29uc3QgbW9kdWxlID0gc2hhcmVBY3Rpb25Qcm9wcz8ucHJlc3M/LnN1YnN0cmluZygwLCBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8ubGFzdEluZGV4T2YoXCIuXCIpKS5yZXBsYWNlKC9cXC4vZ2ksIFwiL1wiKTtcblx0XHRjb25zdCBtZXRob2QgPSBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8uc3Vic3RyaW5nKHNoYXJlQWN0aW9uUHJvcHM/LnByZXNzPy5sYXN0SW5kZXhPZihcIi5cIikgKyAxLCBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8ubGVuZ3RoKTtcblxuXHRcdGlmIChtb2R1bGUgJiYgbWV0aG9kKSB7XG5cdFx0XHRGUE1IZWxwZXIubG9hZE1vZHVsZUFuZENhbGxNZXRob2QobW9kdWxlLCBtZXRob2QsIHZpZXcsIGNvbnRyb2xsZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gY2FsbCBldmVudCBoYW5kbGVyLCBNb2R1bGUgYW5kL29yIE1ldGhvZCBpcyBub3Qgc2V0IHByb3Blcmx5XCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgcHJpbnQgb3B0aW9uIHRvIG1lbnUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRfYWRkUHJpbnRPcHRpb25zKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCB2aWV3OiBWaWV3KTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0aWYgKHZpZXdEYXRhPy5zaGFyZT8uaGFzT3duUHJvcGVydHkoXCJwcmludFwiKSA9PT0gdHJ1ZSAmJiB2aWV3RGF0YT8uc2hhcmU/LnByaW50Py5oYXNPd25Qcm9wZXJ0eShcInByZXNzXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRyZWY9e3RoaXMucHJpbnRNZW51SXRlbX1cblx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9TSEFSRV9DT05UUk9MX1BSSU5UXCIpfVxuXHRcdFx0XHRcdGljb249e1BSSU5UX0lDT059XG5cdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX2NhbGxNYW5pZmVzdEFjdGlvbnNFdmVudHMoY29udHJvbGxlciwgdmlldywgXCJwcmludFwiKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIEV4cG9ydCBhcyBFeGNlbCBvcHRpb24gdG8gbWVudSBidXR0b24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGlzIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW5cblx0ICovXG5cdF9hZGRFeHBvcnRFeGNlbE9wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHZpZXc6IFZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHRpZiAodmlld0RhdGE/LnNoYXJlPy5oYXNPd25Qcm9wZXJ0eShcImV4cG9ydFRvU3ByZWFkc2hlZXRcIikgPT09IHRydWUgJiYgdmlld0RhdGE/LnNoYXJlPy5wcmludD8uaGFzT3duUHJvcGVydHkoXCJwcmVzc1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmV4cG9ydFRvU3ByZWFkc2hlZXRNZW51SXRlbX1cblx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9TSEFSRV9DT05UUk9MX0VYUE9SVF9BU19FWENFTFwiKX1cblx0XHRcdFx0XHRpY29uPXtFWFBPUlRfVE9fU1BSRUFEU0hFRVRfSUNPTn1cblx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhjb250cm9sbGVyLCB2aWV3LCBcImV4cG9ydFRvU3ByZWFkc2hlZXRcIik7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBFeHBvcnQgYXMgQ1NWIG9wdGlvbiB0byBtZW51IGJ1dHRvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoaXMgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpblxuXHQgKi9cblx0X2FkZEV4cG9ydENTVk9wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHZpZXc6IFZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHRpZiAodmlld0RhdGE/LnNoYXJlPy5oYXNPd25Qcm9wZXJ0eShcImV4cG9ydFRvQ1NWXCIpID09PSB0cnVlICYmIHZpZXdEYXRhPy5zaGFyZT8ucHJpbnQ/Lmhhc093blByb3BlcnR5KFwicHJlc3NcIikgPT09IHRydWUpIHtcblx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5leHBvcnRUb0NTVk1lbnVJdGVtfVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1NIQVJFX0NPTlRST0xfRVhQT1JUX0FTX0NTVlwiKX1cblx0XHRcdFx0XHRpY29uPXtFWFBPUlRfVE9fQ1NWX0lDT059XG5cdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMuX2NhbGxNYW5pZmVzdEFjdGlvbnNFdmVudHMoY29udHJvbGxlciwgdmlldywgXCJleHBvcnRUb0NTVlwiKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIEV4cG9ydCBhcyBQREYgb3B0aW9uIHRvIG1lbnUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRfYWRkRXhwb3J0UERGT3B0aW9ucyhjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgdmlldzogVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIFZpZXdEYXRhO1xuXHRcdGlmICh2aWV3RGF0YT8uc2hhcmU/Lmhhc093blByb3BlcnR5KFwiZXhwb3J0VG9QREZcIikgPT09IHRydWUgJiYgdmlld0RhdGE/LnNoYXJlPy5wcmludD8uaGFzT3duUHJvcGVydHkoXCJwcmVzc1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmV4cG9ydFRvUERGTWVudUl0ZW19XG5cdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfU0hBUkVfQ09OVFJPTF9FWFBPUlRfQVNfUERGXCIpfVxuXHRcdFx0XHRcdGljb249e0VYUE9SVF9UT19QREZfSUNPTn1cblx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhjb250cm9sbGVyLCB2aWV3LCBcImV4cG9ydFRvUERGXCIpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgc2VuZCBlbWFpbCBvcHRpb24gdG8gbWVudSBidXR0b24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKi9cblx0X2FkZFNlbmRFbWFpbE9wdGlvbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IHZvaWQge1xuXHRcdGlmICh0aGlzLnNoYXJlT3B0aW9ucz8uc2hvd1NlbmRFbWFpbCA/PyB0cnVlKSB7XG5cdFx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRyZWY9e3RoaXMuc2VuZEVtYWlsTWVudUl0ZW19XG5cdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfU0VNQU5USUNfQ09OVFJPTF9TRU5EX0VNQUlMXCIpfVxuXHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9lbWFpbFwifVxuXHRcdFx0XHRcdHByZXNzPXthc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiBjb250cm9sbGVyLnNoYXJlLl90cmlnZ2VyRW1haWwoKX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBVU2hlbGwgYmFzZWQgc2hhcmUgb3B0aW9ucy5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSBzaGVsbFNlcnZpY2VzIFNoZWxsIFNlcnZpY2VzXG5cdCAqL1xuXHRhc3luYyBfYWRkU2hlbGxCYXNlZE1lbnVJdGVtcyhjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc2hlbGxTZXJ2aWNlczogSVNoZWxsU2VydmljZXMpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBoYXNVc2hlbGwgPSBzaGVsbFNlcnZpY2VzLmhhc1VTaGVsbCgpO1xuXHRcdGlmIChoYXNVc2hlbGwpIHtcblx0XHRcdC8vIHNoYXJlIHZpYSBKQU1cblx0XHRcdHRoaXMuX2FkZFNoYXJlVmlhSkFNT3B0aW9uKGNvbnRyb2xsZXIsIHNoZWxsU2VydmljZXMpO1xuXG5cdFx0XHQvLyBQcmVwYXJlIHRlYW1zIG1lbnUgaXRlbXNcblx0XHRcdGF3YWl0IHRoaXMuX2FkZE1TVGVhbXNPcHRpb25zKGNvbnRyb2xsZXIpO1xuXG5cdFx0XHQvLyBQcmVwYXJlIENvbGxhYm9yYXRpb24gTWFuYWdlciBPcHRpb25zXG5cdFx0XHRhd2FpdCB0aGlzLl9hZGRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbihjb250cm9sbGVyKTtcblxuXHRcdFx0Ly8gU2F2ZSBhcyBUaWxlXG5cdFx0XHRhd2FpdCB0aGlzLl9hZGRTYXZlQXNUaWxlT3B0aW9uKGNvbnRyb2xsZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgQ00gb3B0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBUaGUgY29udHJvbGxlciBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBNZW51SXRlbXNcblx0ICovXG5cdGFzeW5jIF9hZGRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aW9uT3B0aW9uID0gYXdhaXQgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZS5nZXRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbigpO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25PcHRpb24gJiYgKHRoaXMuc2hhcmVPcHRpb25zPy5zaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdGNvbnN0IG1lbnVJdGVtID0gKFxuXHRcdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdFx0cmVmPXt0aGlzLnNoYXJlQXNDb2xsYWJvcmF0aW9uTWFuYWdlcn1cblx0XHRcdFx0XHRcdHRleHQ9e2NvbGxhYm9yYXRpb25PcHRpb24udGV4dH1cblx0XHRcdFx0XHRcdGljb249e2NvbGxhYm9yYXRpb25PcHRpb24uaWNvbn1cblx0XHRcdFx0XHRcdHByZXNzPXthc3luYyAoZXZlbnQ6IFVJNUV2ZW50PHt9LCBNZW51SXRlbT4pOiBQcm9taXNlPHZvaWQ+ID0+XG5cdFx0XHRcdFx0XHRcdHRoaXMuX2NvbGxhYm9yYXRpb25NYW5hZ2VyQnV0dG9uUHJlc3MoY29sbGFib3JhdGlvbk9wdGlvbi5wcmVzcywgZXZlbnQpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0PjwvTWVudUl0ZW0+XG5cdFx0XHRcdCk7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShtZW51SXRlbSwgXCJwcmVzc1wiLCBjb2xsYWJvcmF0aW9uT3B0aW9uLmZlc3JTdGVwTmFtZSk7XG5cdFx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0obWVudUl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBBZGRpbmcgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIE9wdGlvbiA6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBfY29sbGFib3JhdGlvbk1hbmFnZXJCdXR0b25QcmVzcyhjb2xsYWJvcmF0aW9uQ2FsbEJhY2s6IEZ1bmN0aW9uLCBldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNsaWNrZWRNZW51SXRlbSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXG5cdFx0Y29uc3QgdmlldzogVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY2xpY2tlZE1lbnVJdGVtKTtcblx0XHRjb25zdCBjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXHRcdGF3YWl0IGNvbnRyb2xsZXIuc2hhcmUuX2FkYXB0U2hhcmVNZXRhZGF0YSgpO1xuXHRcdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gdmlldy5nZXRNb2RlbChcInNoYXJlSW5mb1wiKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdGNvbnN0IHNoYXJlSW5mbyA9IHNoYXJlSW5mb01vZGVsLmdldERhdGEoKTtcblx0XHRcdGNvbnN0IHsgY29sbGFib3JhdGlvbkluZm8gfSA9IHNoYXJlSW5mbztcblx0XHRcdGNvbGxhYm9yYXRpb25DYWxsQmFjayhjb2xsYWJvcmF0aW9uSW5mby5hcHBUaXRsZSwgY29sbGFib3JhdGlvbkluZm8udXJsKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHNoYXJlIHZpYSBKQU0gb3B0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHNoZWxsU2VydmljZXMgU2hlbGwgU2VydmljZXNcblx0ICovXG5cdF9hZGRTaGFyZVZpYUpBTU9wdGlvbihjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc2hlbGxTZXJ2aWNlczogSVNoZWxsU2VydmljZXMpOiB2b2lkIHtcblx0XHRjb25zdCBoYXNKYW0gPSAhIXNoZWxsU2VydmljZXMuaXNKYW1BY3RpdmU/LigpO1xuXHRcdGlmIChoYXNKYW0pIHtcblx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5zaGFyZVZpYUpBTU1lbnVJdGVtfVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX0NPTU1PTl9TQVBGRV9TSEFSRV9KQU1cIil9XG5cdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3NoYXJlLTJcIn1cblx0XHRcdFx0XHRwcmVzcz17YXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4gY29udHJvbGxlci5zaGFyZS5fdHJpZ2dlclNoYXJlVG9KYW0oKX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBvcHRpb25zIHRvIHNoYXJlIHZpYSBNaWNyb3NvZnQgVGVhbXMuXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2VDb250cm9sbGVyXG5cdCAqL1xuXHRhc3luYyBfYWRkTVNUZWFtc09wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMuX2Jsb2NrSW50ZXJuYWxDb25maWc/LnNob3dNc1RlYW1zT3B0aW9ucyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk7XG5cdFx0XHRjb25zdCBzaGFyZUNvbGxhYm9yYXRpb25PcHRpb25zID0gYXdhaXQgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZS5nZXRUZWFtc0NvbGxhYk9wdGlvbnNWaWFTaGFyZSh7XG5cdFx0XHRcdGlzU2hhcmVBc0NhcmRFbmFibGVkOiB0aGlzLl9nZXRJc1NoYXJlQXNDYXJkRW5hYmxlZCgpXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKCFzaGFyZUNvbGxhYm9yYXRpb25PcHRpb25zKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBjb2xsYWJvcmF0aW9uT3B0aW9uIG9mIHNoYXJlQ29sbGFib3JhdGlvbk9wdGlvbnMpIHtcblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1TZXR0aW5nczogJE1lbnVJdGVtU2V0dGluZ3MgPSB0aGlzLl9nZXRNc1RlYW1zTWVudUl0ZW1TZXR0aW5ncyhjb2xsYWJvcmF0aW9uT3B0aW9uKTtcblx0XHRcdFx0Y29uc3Qgc3ViT3B0aW9ucyA9IG1lbnVJdGVtU2V0dGluZ3MuaXRlbXM7XG5cdFx0XHRcdC8vIE11bHRpcGxlIHN1YiBvcHRpb25zIGFyZSBncm91cGVkIGludG8gc2luZ2xlIHRlYW1zIGdyb3VwIG1lbnUgaXRlbS5cblx0XHRcdFx0Y29uc3QgbWVudUl0ZW1LZXkgPVxuXHRcdFx0XHRcdEFycmF5LmlzQXJyYXkoc3ViT3B0aW9ucykgJiYgc3ViT3B0aW9ucy5sZW5ndGggPyBlbnVtU2hhcmVPcHRpb24uTVNfVEVBTVNfR1JPVVAgOiBjb2xsYWJvcmF0aW9uT3B0aW9uLmtleTtcblxuXHRcdFx0XHR0aGlzLl9hZGRNc1RlYW1zTWVudUl0ZW0obWVudUl0ZW1TZXR0aW5ncywgbWVudUl0ZW1LZXksIGNvbGxhYm9yYXRpb25PcHRpb24uZmVzclN0ZXBOYW1lKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnI6IHVua25vd24pIHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdFx0XHRMb2cuZXJyb3IoYEZFIDogQnVpbGRpbmdibG9jayA6IFNoYXJlIDogYWRkaW5nIE1TIHRlYW1zIG9wdGlvbnMgOiAke21lc3NhZ2V9YCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBzYXZlIGFzIHRpbGUgb3B0aW9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICovXG5cdGFzeW5jIF9hZGRTYXZlQXNUaWxlT3B0aW9uKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIHNldCBzYXZlIGFzIHRpbGVcblx0XHRcdC8vIGZvciBub3cgd2UgbmVlZCB0byBjcmVhdGUgYWRkQm9va21hcmtCdXR0b24gdG8gdXNlIHRoZSBzYXZlIGFzIHRpbGUgZmVhdHVyZS5cblx0XHRcdC8vIEluIHRoZSBmdXR1cmUgc2F2ZSBhcyB0aWxlIHNob3VsZCBiZSBhdmFpbGFibGUgYXMgYW4gQVBJIG9yIGEgTWVudUl0ZW0gc28gdGhhdCBpdCBjYW4gYmUgYWRkZWQgdG8gdGhlIE1lbnUgYnV0dG9uLlxuXHRcdFx0Ly8gVGhpcyBuZWVkcyB0byBiZSBkaXNjdXNzZWQgd2l0aCBBZGRCb29rbWFya0J1dHRvbiB0ZWFtLlxuXHRcdFx0Ly8gSW5jbHVkZWQgaW4gYSBoYXNVc2hlbGwgYnJhbmNoXG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IEFkZEJvb2ttYXJrQnV0dG9uIH0gPSBhd2FpdCBpbXBvcnQoXCJzYXAvdXNoZWxsL3VpL2Zvb3RlcmJhci9BZGRCb29rbWFya0J1dHRvblwiKTtcblx0XHRcdGNvbnN0IGFkZEJvb2ttYXJrQnV0dG9uID0gbmV3IEFkZEJvb2ttYXJrQnV0dG9uKCk7XG5cdFx0XHRpZiAoYWRkQm9va21hcmtCdXR0b24uZ2V0RW5hYmxlZCgpKSB7XG5cdFx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0XHRyZWY9e3RoaXMuc2F2ZUFzVGlsZU1lbnVJdGVtfVxuXHRcdFx0XHRcdFx0dGV4dD17YWRkQm9va21hcmtCdXR0b24uZ2V0VGV4dCgpfVxuXHRcdFx0XHRcdFx0aWNvbj17YWRkQm9va21hcmtCdXR0b24uZ2V0SWNvbigpfVxuXHRcdFx0XHRcdFx0cHJlc3M9e2FzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IGNvbnRyb2xsZXIuc2hhcmUuX3NhdmVBc1RpbGUodGhpcy5zYXZlQXNUaWxlTWVudUl0ZW0uY3VycmVudCEpfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7IGRlcGVuZGVudHM6IFthZGRCb29rbWFya0J1dHRvbl0gfX1cblx0XHRcdFx0XHQ8L01lbnVJdGVtPlxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkQm9va21hcmtCdXR0b24uZGVzdHJveSgpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogU2hhcmUgOiBhZGRpbmcgU2F2ZSBhcyB0aWxlIG9wdGlvbiA6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGlzU2hhcmVBc0NhcmRFbmFibGVkIHRvIGZldGNoIHN1cHBvcnRlZCBjb2xsYWJvcmF0aW9uIG9wdGlvbnMuXG5cdCAqIEByZXR1cm5zIEJvb2xlYW4uXG5cdCAqL1xuXHRfZ2V0SXNTaGFyZUFzQ2FyZEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc2hvd1NoYXJlQXNDYXJkID0gdGhpcy5tc1RlYW1zT3B0aW9ucz8uZW5hYmxlQ2FyZCA/PyBmYWxzZTtcblxuXHRcdGlmICh0eXBlb2Ygc2hvd1NoYXJlQXNDYXJkID09PSBcImJvb2xlYW5cIikge1xuXHRcdFx0cmV0dXJuIHNob3dTaGFyZUFzQ2FyZDtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzaG93U2hhcmVBc0NhcmQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdC8vIFwidHJ1ZVwiIG9yIGEgYmluZGluZyBleHByZXNzaW9uXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXR1cm4gc2hvd1NoYXJlQXNDYXJkID09PSBcInRydWVcIiB8fCBCb29sZWFuKEJpbmRpbmdJbmZvLnBhcnNlKHNob3dTaGFyZUFzQ2FyZCkpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IE1lbnUgSXRlbSBzZXR0aW5ncyBmb3IgbWFpbiBNUyB0ZWFtcyBvcHRpb24uXG5cdCAqIEBwYXJhbSBjb2xsYWJvcmF0aW9uT3B0aW9uIFJvb3QgQ29sbGFib3JhdGlvbiBPcHRpb25cblx0ICogQHJldHVybnMgTWVudUl0ZW1TZXR0aW5nc1xuXHQgKi9cblx0X2dldE1zVGVhbXNNZW51SXRlbVNldHRpbmdzKGNvbGxhYm9yYXRpb25PcHRpb246IENvbGxhYm9yYXRpb25PcHRpb25zKTogJE1lbnVJdGVtU2V0dGluZ3Mge1xuXHRcdGNvbnN0IGl0ZW1zID0gdGhpcy5fZ2V0TXNUZWFtc1N1Yk9wdGlvbnMoY29sbGFib3JhdGlvbk9wdGlvbj8uc3ViT3B0aW9ucyk7XG5cdFx0Y29uc3QgbWVudUl0ZW1TZXR0aW5nczogJE1lbnVJdGVtU2V0dGluZ3MgPSB7XG5cdFx0XHR0ZXh0OiBjb2xsYWJvcmF0aW9uT3B0aW9uLnRleHQsXG5cdFx0XHRpY29uOiBjb2xsYWJvcmF0aW9uT3B0aW9uLmljb24sXG5cdFx0XHRpdGVtc1xuXHRcdH07XG5cblx0XHRpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBhcmUgbm8gc3ViIG9wdGlvbiB0aGVuIHRoZSBtYWluIG9wdGlvbiBzaG91bGQgYmUgY2xpY2thYmxlXG5cdFx0XHQvLyBzbyBhZGQgYSBwcmVzcyBoYW5kbGVyLlxuXHRcdFx0bWVudUl0ZW1TZXR0aW5ncy5wcmVzcyA9IGFzeW5jIChldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5jb2xsYWJvcmF0aW9uTWVudUl0ZW1QcmVzcyhldmVudCk7XG5cdFx0XHRtZW51SXRlbVNldHRpbmdzW1wiY3VzdG9tRGF0YVwiXSA9IG5ldyBDdXN0b21EYXRhKHtcblx0XHRcdFx0a2V5OiBcImNvbGxhYm9yYXRpb25EYXRhXCIsXG5cdFx0XHRcdHZhbHVlOiBjb2xsYWJvcmF0aW9uT3B0aW9uXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbnVJdGVtU2V0dGluZ3M7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIG1haW4gTVMgVGVhbXMgTWVudSBJdGVtIHRvIHRoZSBTaGFyZSBidWlsZGluZyBibG9jayBtZW51LlxuXHQgKiBAcGFyYW0gbWVudUl0ZW1TZXR0aW5ncyBNZW51IEl0ZW0gc2V0dGluZ3Ncblx0ICogQHBhcmFtIG1lbnVJdGVtS2V5IE1TIHRlYW1zIG9wdGlvbiBrZXlcblx0ICogQHBhcmFtIGZlc3JTdGVwTmFtZSBTdGVwIG5hbWVcblx0ICovXG5cdF9hZGRNc1RlYW1zTWVudUl0ZW0obWVudUl0ZW1TZXR0aW5nczogJE1lbnVJdGVtU2V0dGluZ3MsIG1lbnVJdGVtS2V5PzogU2hhcmVPcHRpb25LZXksIGZlc3JTdGVwTmFtZT86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG1lbnVJdGVtOiBNZW51SXRlbSA9IChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRyZWY9e3RoaXMuX2dldE1lbnVJdGVtUmVmZXJlbmNlKG1lbnVJdGVtS2V5KX1cblx0XHRcdFx0dGV4dD17bWVudUl0ZW1TZXR0aW5ncy50ZXh0fVxuXHRcdFx0XHRpY29uPXttZW51SXRlbVNldHRpbmdzLmljb259XG5cdFx0XHRcdGN1c3RvbURhdGE9e21lbnVJdGVtU2V0dGluZ3MuY3VzdG9tRGF0YX1cblx0XHRcdFx0aXRlbXM9e21lbnVJdGVtU2V0dGluZ3MuaXRlbXN9XG5cdFx0XHQ+PC9NZW51SXRlbT5cblx0XHQpO1xuXHRcdGlmIChtZW51SXRlbVNldHRpbmdzLnByZXNzKSB7XG5cdFx0XHQvL1xuXHRcdFx0bWVudUl0ZW0uYXR0YWNoUHJlc3MobWVudUl0ZW1TZXR0aW5ncy5wcmVzcyk7XG5cdFx0XHRpZiAoZmVzclN0ZXBOYW1lKSB7XG5cdFx0XHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZShtZW51SXRlbSwgXCJwcmVzc1wiLCBmZXNyU3RlcE5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKG1lbnVJdGVtKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVudSBJdGVtcyBjb3JyZXNwb25kaW5nIHRvIE1TIHRlYW1zIHN1YiBvcHRpb25zLlxuXHQgKiBAcGFyYW0gc3ViT3B0aW9ucyBBcnJheSBvZiBjb2xsYWJvcmF0aW9uIG9wdGlvbnNcblx0ICogQHJldHVybnMgTWVudUl0ZW1zXG5cdCAqL1xuXHRfZ2V0TXNUZWFtc1N1Yk9wdGlvbnMoc3ViT3B0aW9ucz86IENvbGxhYm9yYXRpb25PcHRpb25zW10pOiBNZW51SXRlbVtdIHtcblx0XHRpZiAoIUFycmF5LmlzQXJyYXkoc3ViT3B0aW9ucykpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc3ViT3B0aW9ucy5yZWR1Y2UoKG1lbnVJdGVtczogTWVudUl0ZW1bXSwgc3ViT3B0aW9uOiBDb2xsYWJvcmF0aW9uT3B0aW9ucykgPT4ge1xuXHRcdFx0Y29uc3Qgc3ViTWVudUl0ZW0gPSAoXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2Uoc3ViT3B0aW9uLmtleSl9XG5cdFx0XHRcdFx0dGV4dD17c3ViT3B0aW9uLnRleHR9XG5cdFx0XHRcdFx0aWNvbj17c3ViT3B0aW9uLmljb259XG5cdFx0XHRcdFx0cHJlc3M9e2FzeW5jIChldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5jb2xsYWJvcmF0aW9uTWVudUl0ZW1QcmVzcyhldmVudCl9XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YT17XG5cdFx0XHRcdFx0XHRuZXcgQ3VzdG9tRGF0YSh7XG5cdFx0XHRcdFx0XHRcdGtleTogXCJjb2xsYWJvcmF0aW9uRGF0YVwiLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogc3ViT3B0aW9uXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0PjwvTWVudUl0ZW0+XG5cdFx0XHQpO1xuXHRcdFx0aWYgKHN1Yk9wdGlvbi5mZXNyU3RlcE5hbWUpIHtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKHN1Yk1lbnVJdGVtLCBcInByZXNzXCIsIHN1Yk9wdGlvbi5mZXNyU3RlcE5hbWUpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFsuLi5tZW51SXRlbXMsIHN1Yk1lbnVJdGVtXTtcblx0XHR9LCBbXSk7XG5cdH1cblxuXHQvKipcblx0ICogUHJlc3MgaGFuZGxlciBmb3IgY29sbGFib3JhdGlvbiBtZW51IGl0ZW1zLlxuXHQgKmBcblx0ICogQHBhcmFtIGV2ZW50IEV2ZW50IG9iamVjdFxuXHQgKi9cblx0YXN5bmMgY29sbGFib3JhdGlvbk1lbnVJdGVtUHJlc3MoZXZlbnQ6IFVJNUV2ZW50PHt9LCBNZW51SXRlbT4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBjbGlja2VkTWVudUl0ZW0gPSBldmVudC5nZXRTb3VyY2UoKTtcblxuXHRcdGNvbnN0IHZpZXc6IFZpZXcgPSBDb21tb25VdGlscy5nZXRUYXJnZXRWaWV3KGNsaWNrZWRNZW51SXRlbSk7XG5cdFx0Y29uc3QgY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcjtcblx0XHRhd2FpdCBjb250cm9sbGVyLnNoYXJlLl9hZGFwdFNoYXJlTWV0YWRhdGEoKTtcblx0XHRjb25zdCBzaGFyZUluZm9Nb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJzaGFyZUluZm9cIikgYXMgSlNPTk1vZGVsIHwgdW5kZWZpbmVkO1xuXG5cdFx0aWYgKHNoYXJlSW5mb01vZGVsKSB7XG5cdFx0XHRjb25zdCBzaGFyZUluZm8gPSBzaGFyZUluZm9Nb2RlbC5nZXREYXRhKCk7XG5cdFx0XHRjb25zdCB7IGNvbGxhYm9yYXRpb25JbmZvIH0gPSBzaGFyZUluZm87XG5cblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25EYXRhID0gY2xpY2tlZE1lbnVJdGVtLmRhdGEoXCJjb2xsYWJvcmF0aW9uRGF0YVwiKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IHRlYW1zSGVscGVyU2VydmljZSA9IChhd2FpdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlLmdldENvbGxhYm9yYXRpb25TZXJ2aWNlcygpKS5vVGVhbXNIZWxwZXJTZXJ2aWNlO1xuXHRcdFx0aWYgKGNvbGxhYm9yYXRpb25EYXRhW1wia2V5XCJdID09PSBlbnVtTVNUZWFtc09wdGlvbi5DT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0FSRCkge1xuXHRcdFx0XHRjb25zdCBpc1NoYXJlQXNDYXJkRW5hYmxlZCA9IHRlYW1zSGVscGVyU2VydmljZS5pc0ZlYXR1cmVGbGFnRW5hYmxlZCgpO1xuXHRcdFx0XHRjb25zdCBjYXJkRGVmaW5pdGlvbiA9IGlzU2hhcmVBc0NhcmRFbmFibGVkID8gYXdhaXQgY29udHJvbGxlci5zaGFyZS5nZXRDYXJkRGVmaW5pdGlvbigpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRsZXQgY2FyZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChjYXJkRGVmaW5pdGlvbikge1xuXHRcdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZUhlbHBlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRcdGNvbnN0IHsgc2VtYW50aWNPYmplY3QsIGFjdGlvbiB9ID0gc2hlbGxTZXJ2aWNlSGVscGVyLnBhcnNlU2hlbGxIYXNoKGRvY3VtZW50LmxvY2F0aW9uLmhhc2gpO1xuXHRcdFx0XHRcdGNhcmRJZCA9IGAke3NlbWFudGljT2JqZWN0fV8ke2FjdGlvbn1gO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHJlYXNvbiA9ICFpc1NoYXJlQXNDYXJkRW5hYmxlZFxuXHRcdFx0XHRcdFx0PyBcIkZlYXR1cmUgZmxhZyBkaXNhYmxlZCBpbiBjb2xsYWJvcmF0aW9uIHRlYW1zIGhlbHBlclwiXG5cdFx0XHRcdFx0XHQ6IFwiQ2FyZCBkZWZpbml0aW9uIHdhcyBub3QgY3JlYXRlZFwiO1xuXHRcdFx0XHRcdExvZy5pbmZvKGBGRSBWNCA6IFNoYXJlIGJsb2NrIDogc2hhcmUgYXMgQ2FyZCA6ICR7cmVhc29ufWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25JbmZvW1wiY2FyZE1hbmlmZXN0XCJdID0gY2FyZERlZmluaXRpb247XG5cdFx0XHRcdGNvbGxhYm9yYXRpb25JbmZvW1wiY2FyZElkXCJdID0gY2FyZElkO1xuXHRcdFx0fVxuXHRcdFx0dGVhbXNIZWxwZXJTZXJ2aWNlLnNoYXJlKGNvbGxhYm9yYXRpb25EYXRhLCBjb2xsYWJvcmF0aW9uSW5mbyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmlzaWJpbGl0eSBvZiBpbmRpdmlkdWFsIFVJIGVsZW1lbnRzIG9mIHRoZSBTaGFyZSBidWlsZGluZyBibG9jay4gTGlrZSwgTWVudUl0ZW1zLCBNZW51QnV0dG9uIGFuZCBDb21tYW5kIGV4ZWN1dGlvbi5cblx0ICovXG5cdHNldFNoYXJlT3B0aW9uc1Zpc2liaWxpdHkoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3B0aW9uS2V5cyA9IE9iamVjdC5rZXlzKGVudW1TaGFyZU9wdGlvbikgYXMgU2hhcmVPcHRpb25LZXlbXTtcblx0XHRjb25zdCB2aXNpYmxlQmluZGluZ0V4cHMgPSBvcHRpb25LZXlzLnJlZHVjZSgoYmluZGluZ1Rvb2xraXRFeHBzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXSwgb3B0aW9uOiBTaGFyZU9wdGlvbktleSkgPT4ge1xuXHRcdFx0Y29uc3QgZXhwID0gdGhpcy5fZ2V0U2hhcmVPcHRpb25WaXNpYmlsaXR5RXhwcmVzc2lvbihvcHRpb24pO1xuXHRcdFx0dGhpcy5fc2V0U2hhcmVPcHRpb25WaXNpYmlsaXR5KG9wdGlvbiwgZXhwKTtcblx0XHRcdHJldHVybiBbLi4uYmluZGluZ1Rvb2xraXRFeHBzLCBleHBdO1xuXHRcdH0sIFtdKTtcblx0XHRjb25zdCBzaGFyZUJsb2NrVmlzaWJsZUV4cCA9IG9yKC4uLnZpc2libGVCaW5kaW5nRXhwcyk7XG5cdFx0aWYgKHRoaXMubWVudUJ1dHRvbi5jdXJyZW50ICYmIHRoaXMuY21kRXhlY3V0aW9uLmN1cnJlbnQpIHtcblx0XHRcdHRoaXMuX2JpbmRVSVZpc2liaWxpdHkodGhpcy5tZW51QnV0dG9uLmN1cnJlbnQsIHNoYXJlQmxvY2tWaXNpYmxlRXhwKTtcblx0XHRcdHRoaXMuX2JpbmRVSVZpc2liaWxpdHkodGhpcy5jbWRFeGVjdXRpb24uY3VycmVudCwgc2hhcmVCbG9ja1Zpc2libGVFeHApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVudSBJdGVtIHJlZmVyZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZyBTaGFyZSBvcHRpb24uXG5cdCAqYFxuXHQgKiBAcGFyYW0gb3B0aW9uIFNoYXJlIG9wdGlvbiBrZXlcblx0ICogQHJldHVybnMgUmVmZXJlbmNlIHRvIHRoZSBNZW51IEl0ZW1cblx0ICovXG5cdF9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24/OiBTaGFyZU9wdGlvbktleSk6IFJlZjxNZW51SXRlbT4gfCB1bmRlZmluZWQge1xuXHRcdGxldCByZWY6IFJlZjxNZW51SXRlbT4gfCB1bmRlZmluZWQ7XG5cdFx0c3dpdGNoIChvcHRpb24pIHtcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEOlxuXHRcdFx0XHRyZWYgPSB0aGlzLnNoYXJlQXNDYXJkTWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NIQVQ6XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2hhcmVWaWFDaGF0TWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQjpcblx0XHRcdFx0cmVmID0gdGhpcy5zaGFyZUFzVGFiTWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0VORF9FTUFJTDpcblx0XHRcdFx0cmVmID0gdGhpcy5zZW5kRW1haWxNZW51SXRlbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TSEFSRV9KQU06XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2hhcmVWaWFKQU1NZW51SXRlbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TQVZFX0FTX1RJTEU6XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2F2ZUFzVGlsZU1lbnVJdGVtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLk1TX1RFQU1TX0dST1VQOlxuXHRcdFx0XHRyZWYgPSB0aGlzLm1zVGVhbXNHcm91cE1lbnVJdGVtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLlNIQVJFX0NPTExBQk9SQVRJT05fTUFOQUdFUjpcblx0XHRcdFx0cmVmID0gdGhpcy5zaGFyZUFzQ29sbGFib3JhdGlvbk1hbmFnZXI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlZjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHZpc2liaWxpdHkgZXhwcmVzc2lvbiBvZiBzaGFyZSBvcHRpb24gYmFzZWQgb24gdGhlIGJ1aWxkaW5nIGJsb2NrIGNvbmZpZ3VyYXRpb24uXG5cdCAqIEBwYXJhbSBvcHRpb24gU2hhcmUgb3B0aW9uIG5hbWUgb2YgdGhlIHZpc2libGUgZXhwcmVzc2lvbiB0aGF0IG5lZWRzIHRvIGJlIGZldGNoZWQuXG5cdCAqIEByZXR1cm5zIEJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uLlxuXHQgKi9cblx0X2dldFNoYXJlT3B0aW9uVmlzaWJpbGl0eUV4cHJlc3Npb24ob3B0aW9uPzogU2hhcmVPcHRpb25LZXkpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IG9wdGlvbk1lbnVJdGVtUmVmID0gdGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2Uob3B0aW9uKTtcblx0XHRpZiAoIW9wdGlvbk1lbnVJdGVtUmVmPy5jdXJyZW50KSB7XG5cdFx0XHRyZXR1cm4gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblxuXHRcdGxldCBleHA6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0XHRzd2l0Y2ggKG9wdGlvbikge1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkQ6XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5DT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0hBVDpcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19UQUI6XG5cdFx0XHRcdGV4cCA9IHRoaXMuX2dldE1TVGVhbXNTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TSEFSRV9DT0xMQUJPUkFUSU9OX01BTkFHRVI6XG5cdFx0XHRcdGV4cCA9IHRoaXMuX2dldENvbGxhYm9yYXRpb25PcHRpb25FeHByZXNzaW9uKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0VORF9FTUFJTDoge1xuXHRcdFx0XHRjb25zdCBzaG93U2VuZEVtYWlsID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4odGhpcy5zaGFyZU9wdGlvbnM/LnNob3dTZW5kRW1haWwgPz8gdHJ1ZSwgXCJib29sZWFuXCIpO1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE9wdGlvbiA9IHJlc29sdmVCaW5kaW5nU3RyaW5nKFxuXHRcdFx0XHRcdHRoaXMuX2Jsb2NrSW50ZXJuYWxDb25maWcuc2hvd1NlbmRFbWFpbCA/PyB0cnVlLFxuXHRcdFx0XHRcdFwiYm9vbGVhblwiXG5cdFx0XHRcdCkgYXMgdW5rbm93biBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0XHRcdGlmIChpc0NvbnN0YW50KGludGVybmFsT3B0aW9uKSAmJiBpbnRlcm5hbE9wdGlvbi52YWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRleHAgPSBjb25zdGFudChmYWxzZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNDb25zdGFudChpbnRlcm5hbE9wdGlvbikgJiYgaW50ZXJuYWxPcHRpb24udmFsdWUgPT09IHRydWUpIHtcblx0XHRcdFx0XHRleHAgPSAodGhpcy5zaGFyZU9wdGlvbnM/LnNob3dTZW5kRW1haWwgPz8gdHJ1ZSkgYXMgdW5rbm93biBhcyBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGV4cCA9IGFuZChzaG93U2VuZEVtYWlsLCBpbnRlcm5hbE9wdGlvbikgYXMgdW5rbm93biBhcyBFbWJlZGRlZFVJNUJpbmRpbmdFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0hBUkVfSkFNOlxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0FWRV9BU19USUxFOiB7XG5cdFx0XHRcdC8vIE5vIG92ZXJyaWRlcyBmb3IgU2hhcmUgdmlhIEphbSBhbmQgU2F2ZSBhcyB0aWxlIHlldC5cblx0XHRcdFx0ZXhwID0gY29uc3RhbnQodHJ1ZSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uTVNfVEVBTVNfR1JPVVA6IHtcblx0XHRcdFx0Y29uc3QgbXNUZWFtc0NvbmZpZ0V4cCA9IHRoaXMuX2dldFNob3dNc1RlYW1zT3B0aW9uc0V4cHJlc3Npb24oKTtcblx0XHRcdFx0Y29uc3QgbXNUZWFtc09wdGlvbnNWYWx1ZSA9IE9iamVjdC5rZXlzKGVudW1NU1RlYW1zT3B0aW9uKSBhcyBTaGFyZU9wdGlvbktleVtdO1xuXHRcdFx0XHRjb25zdCBhbGxNU1RlYW1zT3B0aW9uc0V4cHMgPSBtc1RlYW1zT3B0aW9uc1ZhbHVlLnJlZHVjZShcblx0XHRcdFx0XHQoYmluZGluZ1Rvb2xraXRFeHA6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdLCBtc1RlYW1zT3B0aW9uOiBTaGFyZU9wdGlvbktleSkgPT4ge1xuXHRcdFx0XHRcdFx0Y29uc3QgbXNUZWFtT3B0aW9uRXhwID0gdGhpcy5fZ2V0TVNUZWFtc1NoYXJlT3B0aW9uVmlzaWJpbGl0eShtc1RlYW1zT3B0aW9uKTtcblx0XHRcdFx0XHRcdHJldHVybiBbLi4uYmluZGluZ1Rvb2xraXRFeHAsIG1zVGVhbU9wdGlvbkV4cF07XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRbXSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj5bXVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRleHAgPSBhbmQobXNUZWFtc0NvbmZpZ0V4cCwgb3IoLi4uYWxsTVNUZWFtc09wdGlvbnNFeHBzKSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0ZXhwID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBleHA7XG5cdH1cblxuXHRfZ2V0Q29sbGFib3JhdGlvbk9wdGlvbkV4cHJlc3Npb24oKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0XHRjb25zdCBzaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPSB0aGlzLnNoYXJlT3B0aW9ucz8uc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyID8/IGZhbHNlO1xuXHRcdGNvbnN0IG9wdGlvbkV4cCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KHNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciwgXCJib29sZWFuXCIpO1xuXHRcdGNvbnN0IGludGVybmFsT3B0aW9uID0gdGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZy5zaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPz8gdHJ1ZTtcblx0XHRjb25zdCBpbnRlcm5hbE9wdGlvbkV4cCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KGludGVybmFsT3B0aW9uLCBcImJvb2xlYW5cIik7XG5cdFx0cmV0dXJuIGFuZChvcHRpb25FeHAsIGludGVybmFsT3B0aW9uRXhwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgZXhwcmVzc2lvbiBmb3Igc2hvd01zVGVhbXNPcHRpb25zIHNoYXJlIG9wdGlvbiBiYXNlZCBvbiB0aGUgYnVpbGRpbmcgYmxvY2sgY29uZmlndXJhdGlvbi5cblx0ICogQHJldHVybnMgQmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24uXG5cdCAqL1xuXHRfZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbigpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IGludGVybmFsT3B0aW9uID0gdGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZy5zaG93TXNUZWFtc09wdGlvbnMgPz8gdHJ1ZTtcblx0XHRyZXR1cm4gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oaW50ZXJuYWxPcHRpb24sIFwiYm9vbGVhblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gZm9yIHNoYXJlIGFzIGNhcmQgdmlzaWJpbGl0eS5cblx0ICogQHJldHVybnMgQmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24uXG5cdCAqL1xuXHRfZ2V0U2hhcmVBc0NhcmRWaXNpYmlsaXR5KCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0bGV0IGV4cDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdGNvbnN0IHNoYXJlQXNDYXJkT3B0aW9uUmVmID0gdGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2UoZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEKTtcblx0XHRpZiAoc2hhcmVBc0NhcmRPcHRpb25SZWY/LmN1cnJlbnQpIHtcblx0XHRcdGNvbnN0IGV4cFNob3dNU1RlYW1zT3B0aW9ucyA9IHRoaXMuX2dldFNob3dNc1RlYW1zT3B0aW9uc0V4cHJlc3Npb24oKTtcblx0XHRcdGNvbnN0IHNob3dTaGFyZUFzQ2FyZCA9IHRoaXMubXNUZWFtc09wdGlvbnM/LmVuYWJsZUNhcmQgPz8gdHJ1ZTtcblx0XHRcdGNvbnN0IG9wdGlvbkV4cCA9IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KHNob3dTaGFyZUFzQ2FyZCwgXCJib29sZWFuXCIpO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxPcHRpb24gPSB0aGlzLl9ibG9ja0ludGVybmFsQ29uZmlnLmVuYWJsZUNhcmQgPz8gdHJ1ZTtcblx0XHRcdGNvbnN0IGludGVybmFsT3B0aW9uRXhwID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oaW50ZXJuYWxPcHRpb24sIFwiYm9vbGVhblwiKTtcblx0XHRcdGNvbnN0IGV4cFNob3dTaGFyZUFzQ2FyZCA9IGFuZChvcHRpb25FeHAsIGludGVybmFsT3B0aW9uRXhwKTtcblx0XHRcdGV4cCA9IGFuZChub3QoVUkuSXNFZGl0YWJsZSksIGV4cFNob3dNU1RlYW1zT3B0aW9ucywgZXhwU2hvd1NoYXJlQXNDYXJkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwID0gY29uc3RhbnQoZmFsc2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gZXhwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBmb3Igc2hhcmUgb3B0aW9uJ3MgdmlzaWJpbGl0eS5cblx0ICogQHBhcmFtIG9wdGlvbiBTaGFyZSBvcHRpb24ga2V5XG5cdCAqIEByZXR1cm5zIEJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uLlxuXHQgKi9cblx0X2dldE1TVGVhbXNTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uOiBTaGFyZU9wdGlvbktleSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0aWYgKG9wdGlvbiA9PT0gZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0U2hhcmVBc0NhcmRWaXNpYmlsaXR5KCk7XG5cdFx0fVxuXHRcdC8vIE5vIG92ZXJyaWRlcyBmb3IgU2hhcmUgYXMgVGFiIGFuZCBDaGF0IHlldC5cblxuXHRcdGNvbnN0IG1zVGVhbXNPcHRpb25SZWYgPSB0aGlzLl9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24pO1xuXHRcdHJldHVybiBtc1RlYW1zT3B0aW9uUmVmPy5jdXJyZW50ID8gdGhpcy5fZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbigpIDogY29uc3RhbnQoZmFsc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB2aXNpYmxpdHkgb2YgaW5kaXZpZHVhbCBzaGFyZSBvcHRpb24ncyBNZW51SXRlbS5cblx0ICogQHBhcmFtIG9wdGlvbiBTaGFyZSBvcHRpb24ga2V5XG5cdCAqIEBwYXJhbSBleHByZXNzaW9uIFZpc2liaWxpdHkgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb25cblx0ICovXG5cdF9zZXRTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uOiBTaGFyZU9wdGlvbktleSwgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVudUl0ZW1SZWYgPSB0aGlzLl9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24pO1xuXHRcdGlmIChtZW51SXRlbVJlZj8uY3VycmVudCkge1xuXHRcdFx0dGhpcy5fYmluZFVJVmlzaWJpbGl0eShtZW51SXRlbVJlZi5jdXJyZW50LCBleHByZXNzaW9uKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQmluZCB0aGUgVUkgZWxlbWVudCdzIHZpc2liaWxpdHkgcHJvcGVydHkuXG5cdCAqIEBwYXJhbSBpdGVtIFVJIGVsZW1lbnRcblx0ICogQHBhcmFtIGV4cHJlc3Npb24gRXhwcmVzc2lvbiB0byBiaW5kLlxuXHQgKi9cblx0X2JpbmRVSVZpc2liaWxpdHkoaXRlbTogTWVudUJ1dHRvbiB8IE1lbnVJdGVtIHwgQ29tbWFuZEV4ZWN1dGlvbiwgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+KTogdm9pZCB7XG5cdFx0Ly8gTk9URTogV2UgbmVlZCBjb252ZXJ0IHRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiB0byB0aGUgZm9ybWF0IHRoYXQgY2FuIGJlIGNvbnN1bWVkIGJ5IHRoZSBVSSBlbGVtZW50LlxuXHRcdC8vIEF0IHJ1bnRpbWUsIHdlIGNhbid0IHVzZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBvciBjb21waWxlZCBleHByZXNzaW9uIGRpcmVjdGx5IHRvIGJpbmQgdGhlIHZpc2liaWxpdHkgb3Igc2V0IHRoZSB2aXNpYmxlIHByb3BlcnR5IG9yIHRoZSBVSSBlbGVtZW50LlxuXHRcdC8vIFdlIHdvdWxkIG5lZWQgdG8gY29udmVydCB0aGUgYmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24gLT4gVUk1IEJpbmRpbmdJbmZvIHRvIGJpbmQgdGhlIFVJIGVsZW1lbnQuXG5cdFx0Y29uc3QgY29tcGlsZWRFeHAgPSBjb21waWxlRXhwcmVzc2lvbihleHByZXNzaW9uKTtcblxuXHRcdGlmIChjb21waWxlZEV4cCAmJiBjb21waWxlZEV4cC5zdGFydHNXaXRoKFwie1wiKSAmJiBjb21waWxlZEV4cD8uZW5kc1dpdGgoXCJ9XCIpKSB7XG5cdFx0XHQvLyBQcm9iYWJsZSBiaW5kaW5nXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBwYXJzZWRFeHAgPSBCaW5kaW5nSW5mby5wYXJzZShjb21waWxlZEV4cCk7XG5cdFx0XHRcdGl0ZW0uYmluZFByb3BlcnR5KFwidmlzaWJsZVwiLCBwYXJzZWRFeHApO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGNvbXBpbGVkRXhwID09PSBcImZhbHNlXCIpIHtcblx0XHRcdC8vIFN0YXRpY2FsbHkgZmFsc2Vcblx0XHRcdGl0ZW0udW5iaW5kUHJvcGVydHkoXCJ2aXNpYmxlXCIsIHRydWUpO1xuXHRcdFx0aXRlbS5zZXRWaXNpYmxlKGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0U2hhcmVCbG9ja0NvbmZpZyh2aWV3OiBWaWV3KTogQ29uZmlnT3B0aW9ucyB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0Y29uc3Qgdmlld1NoYXJlQ29uZmlncyA9IHZpZXdEYXRhPy5zaGFyZTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmVBcHBTaGFyZUNvbmZpZ3MgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/LmFwcD8uc2hhcmU7XG5cblx0XHRjb25zdCBzaG93U2VuZEVtYWlsID0gdGhpcy5fZ2V0T3B0aW9uQmxvY2tDb25maWcoZmVBcHBTaGFyZUNvbmZpZ3M/LnNob3dTZW5kRW1haWwsIHZpZXdTaGFyZUNvbmZpZ3M/LnNob3dTZW5kRW1haWwpO1xuXHRcdGNvbnN0IHNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciA9IHRoaXMuX2dldE9wdGlvbkJsb2NrQ29uZmlnKFxuXHRcdFx0ZmVBcHBTaGFyZUNvbmZpZ3M/LnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlcixcblx0XHRcdHZpZXdTaGFyZUNvbmZpZ3M/LnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlclxuXHRcdCk7XG5cblx0XHRjb25zdCBzaG93TXNUZWFtc09wdGlvbnMgPSB0aGlzLl9nZXRPcHRpb25CbG9ja0NvbmZpZyhcblx0XHRcdGZlQXBwU2hhcmVDb25maWdzPy50ZWFtcz8uc2hvd01zVGVhbXNPcHRpb25zLFxuXHRcdFx0dmlld1NoYXJlQ29uZmlncz8udGVhbXM/LnNob3dNc1RlYW1zT3B0aW9uc1xuXHRcdCk7XG5cdFx0Y29uc3QgZW5hYmxlQ2FyZCA9IHRoaXMuX2dldE9wdGlvbkJsb2NrQ29uZmlnKGZlQXBwU2hhcmVDb25maWdzPy50ZWFtcz8uYXNDYXJkLCB2aWV3U2hhcmVDb25maWdzPy50ZWFtcz8uYXNDYXJkKTtcblxuXHRcdHJldHVybiB7IHNob3dTZW5kRW1haWwsIHNob3dNc1RlYW1zT3B0aW9ucywgZW5hYmxlQ2FyZCwgc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyIH07XG5cdH1cblxuXHRfZ2V0T3B0aW9uQmxvY2tDb25maWcoZmVBcHBTZXR0aW5nPzogYm9vbGVhbiB8IHN0cmluZywgdmlld0xldmVsU2V0dGluZz86IGJvb2xlYW4gfCBzdHJpbmcpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgZmVBcHBFeHAgPSB0eXBlb2YgZmVBcHBTZXR0aW5nID09PSBcInN0cmluZ1wiID8gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oZmVBcHBTZXR0aW5nKSA6IGNvbnN0YW50KGZlQXBwU2V0dGluZyA/PyB0cnVlKTtcblx0XHRjb25zdCB2aWV3TGV2ZWxFeHAgPVxuXHRcdFx0dHlwZW9mIHZpZXdMZXZlbFNldHRpbmcgPT09IFwic3RyaW5nXCIgPyByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPih2aWV3TGV2ZWxTZXR0aW5nKSA6IGNvbnN0YW50KHZpZXdMZXZlbFNldHRpbmcgPz8gdHJ1ZSk7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGFuZChmZUFwcEV4cCwgdmlld0xldmVsRXhwKSk7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogU2hhcmVBUEkge1xuXHRcdC8vIEN0cmwrU2hpZnQrUyBpcyBuZWVkZWQgZm9yIHRoZSB0aW1lIGJlaW5nIGJ1dCB0aGlzIG5lZWRzIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgYmFja2xvZyBmcm9tIG1lbnUgYnV0dG9uXG5cdFx0Y29uc3QgbWVudUJ1dHRvbiA9IChcblx0XHRcdDxTaGFyZUFQSSBpZD17dGhpcy5zaGFyZUFQSUlkfT5cblx0XHRcdFx0PE92ZXJmbG93VG9vbGJhck1lbnVCdXR0b25cblx0XHRcdFx0XHR0ZXh0PXtcIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9TQVBGRV9BQ1RJT05fU0hBUkV9XCJ9XG5cdFx0XHRcdFx0cmVmPXt0aGlzLm1lbnVCdXR0b259XG5cdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2FjdGlvblwifVxuXHRcdFx0XHRcdHRvb2x0aXA9e1wie3NhcC5mZS5pMThuPk1fQ09NTU9OX1NBUEZFX0FDVElPTl9TSEFSRX0gKEN0cmwrU2hpZnQrUylcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51IHJlZj17dGhpcy5tZW51fT48L01lbnU+XG5cdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyTWVudUJ1dHRvbj5cblx0XHRcdDwvU2hhcmVBUEk+XG5cdFx0KSBhcyBTaGFyZUFQSTtcblx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKClcblx0XHRcdC5nZXRWaWV3KClcblx0XHRcdC5hZGREZXBlbmRlbnQoXG5cdFx0XHRcdDxDb21tYW5kRXhlY3V0aW9uXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmNtZEV4ZWN1dGlvbn1cblx0XHRcdFx0XHRjb21tYW5kPVwiU2hhcmVcIlxuXHRcdFx0XHRcdGV4ZWN1dGU9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdHRoaXMubWVudUJ1dHRvbi5jdXJyZW50Py5nZXRNZW51KCkub3BlbkJ5KHRoaXMubWVudUJ1dHRvbi5jdXJyZW50LCB0cnVlKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHQvLyBUaGUgaW5pdGlhbGl6YXRpb24gaXMgYXN5bmNocm9ub3VzLCBzbyB3ZSBqdXN0IHRyaWdnZXIgaXQgYW5kIGhvcGUgZm9yIHRoZSBiZXN0IDpEXG5cdFx0dGhpcy5pc0luaXRpYWxpemVkID0gdGhpcy5faW5pdGlhbGl6ZU1lbnVJdGVtcyh0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkuZ2V0VmlldygpLCBhcHBDb21wb25lbnQpLmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1lbnVCdXR0b247XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
957
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbnVtTVNUZWFtc09wdGlvbiIsIkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEIiwiQ09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQiIsIkNPTExBQk9SQVRJT05fTVNURUFNU19DSEFUIiwiZW51bVNoYXJlT3B0aW9uIiwiU0VORF9FTUFJTCIsIlNIQVJFX0pBTSIsIlNBVkVfQVNfVElMRSIsIk1TX1RFQU1TX0dST1VQIiwiU0hBUkVfQ09MTEFCT1JBVElPTl9NQU5BR0VSIiwiU2hhcmUiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsIl9kZWMzIiwiaW1wbGVtZW50SW50ZXJmYWNlIiwiX2RlYzQiLCJhZ2dyZWdhdGlvbiIsImRlZmF1bHRDbGFzcyIsIlNoYXJlT3B0aW9ucyIsImlzRGVmYXVsdCIsIl9kZWM1IiwiZGVmYXVsdFZhbHVlIiwiT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkiLCJIaWdoIiwiX2RlYzYiLCJNc1RlYW1zT3B0aW9ucyIsIl9kZWM3IiwiZGVmaW5lUmVmZXJlbmNlIiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9kZWMyMSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsImlkT3JQcm9wcyIsInByb3BzIiwiX3RoaXMiLCJzaGFyZUFQSUlkIiwiaWQiLCJ1bmRlZmluZWQiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfb3duZXJDb21wb25lbnQiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsImdldEFwcENvbXBvbmVudCIsIl9pbml0aWFsaXplTWVudUl0ZW1zIiwidmlldyIsImFwcENvbXBvbmVudCIsImlzVGVhbXNNb2RlQWN0aXZlIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJDb2xsYWJvcmF0aW9uIiwiZGVmYXVsdCIsIkNvbGxhYm9yYXRpb25IZWxwZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwibWVudUJ1dHRvbiIsImN1cnJlbnQiLCJ1bmJpbmRQcm9wZXJ0eSIsInNldFZpc2libGUiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInNoZWxsU2VydmljZXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwiaXNQbHVnaW5JbmZvU3RhYmxlIiwid2FpdEZvclBsdWdpbnNMb2FkIiwiaW50ZXJuYWxCdXR0b24iLCJnZXRBZ2dyZWdhdGlvbiIsImF0dGFjaEV2ZW50T25jZSIsIl9ibG9ja0ludGVybmFsQ29uZmlnIiwiX2dldFNoYXJlQmxvY2tDb25maWciLCJfYWRkTWVudUl0ZW1zIiwic2V0U2hhcmVPcHRpb25zVmlzaWJpbGl0eSIsIl9hZGRTZW5kRW1haWxPcHRpb24iLCJfYWRkU2hlbGxCYXNlZE1lbnVJdGVtcyIsIl9hZGRQcmludE9wdGlvbnMiLCJfYWRkRXhwb3J0RXhjZWxPcHRpb25zIiwiX2FkZEV4cG9ydENTVk9wdGlvbnMiLCJfYWRkRXhwb3J0UERGT3B0aW9ucyIsIl9jYWxsTWFuaWZlc3RBY3Rpb25zRXZlbnRzIiwic2hhcmVPcHRpb25Qcm9wIiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInNoYXJlQWN0aW9uUHJvcHMiLCJzaGFyZSIsIm1vZHVsZSIsInByZXNzIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJyZXBsYWNlIiwibWV0aG9kIiwibGVuZ3RoIiwiRlBNSGVscGVyIiwibG9hZE1vZHVsZUFuZENhbGxNZXRob2QiLCJMb2ciLCJlcnJvciIsImhhc093blByb3BlcnR5IiwicHJpbnQiLCJtZW51IiwiYWRkSXRlbSIsIl9qc3giLCJNZW51SXRlbSIsInJlZiIsInByaW50TWVudUl0ZW0iLCJ0ZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJpY29uIiwiUFJJTlRfSUNPTiIsImV4cG9ydFRvU3ByZWFkc2hlZXRNZW51SXRlbSIsIkVYUE9SVF9UT19TUFJFQURTSEVFVF9JQ09OIiwiZXhwb3J0VG9DU1ZNZW51SXRlbSIsIkVYUE9SVF9UT19DU1ZfSUNPTiIsImV4cG9ydFRvUERGTWVudUl0ZW0iLCJFWFBPUlRfVE9fUERGX0lDT04iLCJzaGFyZU9wdGlvbnMiLCJzaG93U2VuZEVtYWlsIiwic2VuZEVtYWlsTWVudUl0ZW0iLCJfdHJpZ2dlckVtYWlsIiwiaGFzVXNoZWxsIiwiaGFzVVNoZWxsIiwiX2FkZFNoYXJlVmlhSkFNT3B0aW9uIiwiX2FkZE1TVGVhbXNPcHRpb25zIiwiX2FkZENvbGxhYm9yYXRpb25NYW5hZ2VyT3B0aW9uIiwiX2FkZFNhdmVBc1RpbGVPcHRpb24iLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImNvbGxhYm9yYXRpb25PcHRpb24iLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlck9wdGlvbiIsInNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciIsIm1lbnVJdGVtIiwic2hhcmVBc0NvbGxhYm9yYXRpb25NYW5hZ2VyIiwiZXZlbnQiLCJfY29sbGFib3JhdGlvbk1hbmFnZXJCdXR0b25QcmVzcyIsIkZFU1JIZWxwZXIiLCJzZXRTZW1hbnRpY1N0ZXBuYW1lIiwiZmVzclN0ZXBOYW1lIiwiZXJyIiwibWVzc2FnZSIsIkVycm9yIiwiU3RyaW5nIiwiY29sbGFib3JhdGlvbkNhbGxCYWNrIiwiY2xpY2tlZE1lbnVJdGVtIiwiZ2V0U291cmNlIiwiQ29tbW9uVXRpbHMiLCJnZXRUYXJnZXRWaWV3IiwiX2FkYXB0U2hhcmVNZXRhZGF0YSIsInNoYXJlSW5mb01vZGVsIiwiZ2V0TW9kZWwiLCJzaGFyZUluZm8iLCJnZXREYXRhIiwiY29sbGFib3JhdGlvbkluZm8iLCJhcHBUaXRsZSIsInVybCIsImhhc0phbSIsImlzSmFtQWN0aXZlIiwic2hhcmVWaWFKQU1NZW51SXRlbSIsIl90cmlnZ2VyU2hhcmVUb0phbSIsInNob3dNc1RlYW1zT3B0aW9ucyIsInNoYXJlQ29sbGFib3JhdGlvbk9wdGlvbnMiLCJnZXRUZWFtc0NvbGxhYk9wdGlvbnNWaWFTaGFyZSIsImlzU2hhcmVBc0NhcmRFbmFibGVkIiwiX2dldElzU2hhcmVBc0NhcmRFbmFibGVkIiwibWVudUl0ZW1TZXR0aW5ncyIsIl9nZXRNc1RlYW1zTWVudUl0ZW1TZXR0aW5ncyIsInN1Yk9wdGlvbnMiLCJpdGVtcyIsIm1lbnVJdGVtS2V5IiwiQXJyYXkiLCJpc0FycmF5Iiwia2V5IiwiX2FkZE1zVGVhbXNNZW51SXRlbSIsIkFkZEJvb2ttYXJrQnV0dG9uIiwiYWRkQm9va21hcmtCdXR0b24iLCJnZXRFbmFibGVkIiwic2F2ZUFzVGlsZU1lbnVJdGVtIiwiZ2V0VGV4dCIsImdldEljb24iLCJfc2F2ZUFzVGlsZSIsImNoaWxkcmVuIiwiZGVwZW5kZW50cyIsImRlc3Ryb3kiLCJzaG93U2hhcmVBc0NhcmQiLCJtc1RlYW1zT3B0aW9ucyIsImVuYWJsZUNhcmQiLCJCb29sZWFuIiwiQmluZGluZ0luZm8iLCJwYXJzZSIsIl9nZXRNc1RlYW1zU3ViT3B0aW9ucyIsImNvbGxhYm9yYXRpb25NZW51SXRlbVByZXNzIiwiQ3VzdG9tRGF0YSIsInZhbHVlIiwiX2dldE1lbnVJdGVtUmVmZXJlbmNlIiwiY3VzdG9tRGF0YSIsImF0dGFjaFByZXNzIiwicmVkdWNlIiwibWVudUl0ZW1zIiwic3ViT3B0aW9uIiwic3ViTWVudUl0ZW0iLCJjb2xsYWJvcmF0aW9uRGF0YSIsImRhdGEiLCJ0ZWFtc0hlbHBlclNlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aW9uU2VydmljZXMiLCJvVGVhbXNIZWxwZXJTZXJ2aWNlIiwiaXNGZWF0dXJlRmxhZ0VuYWJsZWQiLCJjYXJkRGVmaW5pdGlvbiIsImdldENhcmREZWZpbml0aW9uIiwiY2FyZElkIiwic2hlbGxTZXJ2aWNlSGVscGVyIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwicmVhc29uIiwiaW5mbyIsIm9wdGlvbktleXMiLCJPYmplY3QiLCJrZXlzIiwidmlzaWJsZUJpbmRpbmdFeHBzIiwiYmluZGluZ1Rvb2xraXRFeHBzIiwib3B0aW9uIiwiZXhwIiwiX2dldFNoYXJlT3B0aW9uVmlzaWJpbGl0eUV4cHJlc3Npb24iLCJfc2V0U2hhcmVPcHRpb25WaXNpYmlsaXR5Iiwic2hhcmVCbG9ja1Zpc2libGVFeHAiLCJvciIsImNtZEV4ZWN1dGlvbiIsIl9iaW5kVUlWaXNpYmlsaXR5Iiwic2hhcmVBc0NhcmRNZW51SXRlbSIsInNoYXJlVmlhQ2hhdE1lbnVJdGVtIiwic2hhcmVBc1RhYk1lbnVJdGVtIiwibXNUZWFtc0dyb3VwTWVudUl0ZW0iLCJvcHRpb25NZW51SXRlbVJlZiIsImNvbnN0YW50IiwiX2dldE1TVGVhbXNTaGFyZU9wdGlvblZpc2liaWxpdHkiLCJfZ2V0Q29sbGFib3JhdGlvbk9wdGlvbkV4cHJlc3Npb24iLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImludGVybmFsT3B0aW9uIiwiaXNDb25zdGFudCIsImFuZCIsIm1zVGVhbXNDb25maWdFeHAiLCJfZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbiIsIm1zVGVhbXNPcHRpb25zVmFsdWUiLCJhbGxNU1RlYW1zT3B0aW9uc0V4cHMiLCJiaW5kaW5nVG9vbGtpdEV4cCIsIm1zVGVhbXNPcHRpb24iLCJtc1RlYW1PcHRpb25FeHAiLCJvcHRpb25FeHAiLCJpbnRlcm5hbE9wdGlvbkV4cCIsIl9nZXRTaGFyZUFzQ2FyZFZpc2liaWxpdHkiLCJzaGFyZUFzQ2FyZE9wdGlvblJlZiIsImV4cFNob3dNU1RlYW1zT3B0aW9ucyIsImV4cFNob3dTaGFyZUFzQ2FyZCIsIm5vdCIsIlVJIiwiSXNFZGl0YWJsZSIsIm1zVGVhbXNPcHRpb25SZWYiLCJleHByZXNzaW9uIiwibWVudUl0ZW1SZWYiLCJpdGVtIiwiY29tcGlsZWRFeHAiLCJjb21waWxlRXhwcmVzc2lvbiIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsInBhcnNlZEV4cCIsImJpbmRQcm9wZXJ0eSIsInZpZXdTaGFyZUNvbmZpZ3MiLCJmZUFwcFNoYXJlQ29uZmlncyIsImdldE1hbmlmZXN0RW50cnkiLCJhcHAiLCJfZ2V0T3B0aW9uQmxvY2tDb25maWciLCJ0ZWFtcyIsImFzQ2FyZCIsImZlQXBwU2V0dGluZyIsInZpZXdMZXZlbFNldHRpbmciLCJmZUFwcEV4cCIsInZpZXdMZXZlbEV4cCIsIlNoYXJlQVBJIiwiT3ZlcmZsb3dUb29sYmFyTWVudUJ1dHRvbiIsInRvb2x0aXAiLCJNZW51IiwiZ2V0UGFnZUNvbnRyb2xsZXIiLCJnZXRWaWV3IiwiYWRkRGVwZW5kZW50IiwiQ29tbWFuZEV4ZWN1dGlvbiIsImNvbW1hbmQiLCJleGVjdXRlIiwiZ2V0TWVudSIsIm9wZW5CeSIsImlzSW5pdGlhbGl6ZWQiLCJjYXRjaCIsInNldExheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJnZXRPdmVyZmxvd1Rvb2xiYXJDb25maWciLCJjYW5PdmVyZmxvdyIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlNoYXJlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgRW1iZWRkZWRVSTVCaW5kaW5nRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBjb21waWxlRXhwcmVzc2lvbiwgY29uc3RhbnQsIGlzQ29uc3RhbnQsIG5vdCwgb3IsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVSZWZlcmVuY2UsIGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IHR5cGUgTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vTWVudUJ1dHRvblwiO1xuaW1wb3J0IHR5cGUgeyAkTWVudUl0ZW1TZXR0aW5ncyB9IGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IE1lbnVJdGVtIGZyb20gXCJzYXAvbS9NZW51SXRlbVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aW9uT3B0aW9uS2V5LCBDb2xsYWJvcmF0aW9uT3B0aW9ucyB9IGZyb20gXCJzYXAvc3VpdGUvdWkvY29tbW9ucy9jb2xsYWJvcmF0aW9uL1RlYW1zSGVscGVyU2VydmljZVwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgRkVTUkhlbHBlciBmcm9tIFwic2FwL3VpL3BlcmZvcm1hbmNlL3RyYWNlL0ZFU1JIZWxwZXJcIjtcblxuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHtcblx0RVhQT1JUX1RPX0NTVl9JQ09OLFxuXHRFWFBPUlRfVE9fUERGX0lDT04sXG5cdEVYUE9SVF9UT19TUFJFQURTSEVFVF9JQ09OLFxuXHRQUklOVF9JQ09OXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCBGUE1IZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFNoYXJlT3B0aW9ucyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9zaGFyZS9TaGFyZU9wdGlvbnNcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyTWVudUJ1dHRvbiBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyTWVudUJ1dHRvblwiO1xuaW1wb3J0IHsgT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEJpbmRpbmdJbmZvIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBNc1RlYW1zT3B0aW9ucyBmcm9tIFwiLi9zaGFyZS9Nc1RlYW1zT3B0aW9uc1wiO1xuaW1wb3J0IFNoYXJlQVBJIGZyb20gXCIuL3NoYXJlL1NoYXJlQVBJXCI7XG5cbi8vIE1TIFRlYW1zIG9wdGlvbnMgYXJlIG5vdCBwdWJsaWMgdmlhIFNoYXJlIGJ1aWxkaW5nIGJsb2NrLlxuLy8gU28sICdzaG93TXNUZWFtc09wdGlvbnMnIGlzIGludGVybmFsIGFuZCBzaGFsbCBiZSBvbmx5IHBpY2tlZCBmcm9tIHRlbXBsYXRlIG1hbmlmZXN0LlxudHlwZSBJbnRlcm5hbFNoYXJlT3B0aW9ucyA9IFByb3BlcnRpZXNPZjxTaGFyZU9wdGlvbnM+O1xuXG50eXBlIFNoYXJlT3B0aW9uS2V5ID1cblx0fCBDb2xsYWJvcmF0aW9uT3B0aW9uS2V5XG5cdHwgXCJTRU5EX0VNQUlMXCJcblx0fCBcIlNIQVJFX0pBTVwiXG5cdHwgXCJTQVZFX0FTX1RJTEVcIlxuXHR8IFwiTVNfVEVBTVNfR1JPVVBcIlxuXHR8IFwiU0hBUkVfQ09MTEFCT1JBVElPTl9NQU5BR0VSXCI7XG5cbmNvbnN0IGVudW1NU1RlYW1zT3B0aW9uOiB7XG5cdFtrZXkgaW4gQ29sbGFib3JhdGlvbk9wdGlvbktleV06IENvbGxhYm9yYXRpb25PcHRpb25LZXk7XG59ID0ge1xuXHRDT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0FSRDogXCJDT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0FSRFwiLFxuXHRDT0xMQUJPUkFUSU9OX01TVEVBTVNfVEFCOiBcIkNPTExBQk9SQVRJT05fTVNURUFNU19UQUJcIixcblx0Q09MTEFCT1JBVElPTl9NU1RFQU1TX0NIQVQ6IFwiQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NIQVRcIlxufTtcblxuY29uc3QgZW51bVNoYXJlT3B0aW9uOiB7XG5cdFtrZXkgaW4gU2hhcmVPcHRpb25LZXldOiBTaGFyZU9wdGlvbktleTtcbn0gPSB7XG5cdC4uLmVudW1NU1RlYW1zT3B0aW9uLFxuXHQuLi57XG5cdFx0U0VORF9FTUFJTDogXCJTRU5EX0VNQUlMXCIsXG5cdFx0U0hBUkVfSkFNOiBcIlNIQVJFX0pBTVwiLFxuXHRcdFNBVkVfQVNfVElMRTogXCJTQVZFX0FTX1RJTEVcIixcblx0XHRNU19URUFNU19HUk9VUDogXCJNU19URUFNU19HUk9VUFwiLFxuXHRcdFNIQVJFX0NPTExBQk9SQVRJT05fTUFOQUdFUjogXCJTSEFSRV9DT0xMQUJPUkFUSU9OX01BTkFHRVJcIlxuXHR9XG59O1xuXG50eXBlIENvbmZpZ09wdGlvbnMgPSBJbnRlcm5hbFNoYXJlT3B0aW9ucyAmIFByb3BlcnRpZXNPZjxNc1RlYW1zT3B0aW9ucz47XG5cbi8qKlxuICogQnVpbGRpbmcgYmxvY2sgdXNlZCB0byBjcmVhdGUgdGhlIOKAmFNoYXJl4oCZIGZ1bmN0aW9uYWxpdHkuXG4gKiA8YnI+XG4gKiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSAnU2hhcmUgaW4gU0FQIEphbScgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHBsYXRmb3JtcyB0aGF0IGFyZSBpbnRlZ3JhdGVkIHdpdGggU0FQIEphbS5cbiAqIDxicj5cbiAqIElmIHlvdSBhcmUgY29uc3VtaW5nIHRoaXMgbWFjcm8gaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIFNBUCBGaW9yaSBsYXVuY2hwYWQgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiB0aGUgJ1NhdmUgYXMgVGlsZScgb3B0aW9uIGlzIG5vdCB2aXNpYmxlLlxuICpcbiAqXG4gKiBVc2FnZSBleGFtcGxlOlxuICogPHByZT5cbiAqICZsdDttYWNyb3M6U2hhcmVcbiAqIGlkPVwic29tZUlEXCJcbiAqIHZpc2libGU9XCJ0cnVlXCJcbiAqIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqIHtAbGluayBkZW1vOnNhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2J1aWxkaW5nQmxvY2tzL2ZlYXR1cmVzL3NoYXJlRGVmYXVsdCBPdmVydmlldyBvZiBCdWlsZGluZyBCbG9ja3N9XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS45My4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5tYWNyb3MuU2hhcmVcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYXJlIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxTaGFyZUFQST4ge1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHB1YmxpYyBzaGFyZUFQSUlkPzogc3RyaW5nO1xuXG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAubS5JT3ZlcmZsb3dUb29sYmFyQ29udGVudFwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF9tX0lPdmVyZmxvd1Rvb2xiYXJDb250ZW50ID0gdHJ1ZTtcblxuXHQvKipcblx0ICogU3VwcG9ydGVkIFNoYXJlIG9wdGlvbnMge0BsaW5rIHNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVPcHRpb25zfS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHtcblx0XHR0eXBlOiBcInNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVPcHRpb25zXCIsXG5cdFx0ZGVmYXVsdENsYXNzOiBTaGFyZU9wdGlvbnMsXG5cdFx0aXNEZWZhdWx0OiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBzaGFyZU9wdGlvbnM/OiBTaGFyZU9wdGlvbnM7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdGRlZmF1bHRWYWx1ZTogT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkuSGlnaFxuXHR9KVxuXHRwcmlvcml0eT86IHN0cmluZztcblxuXHQvKipcblx0ICogU3VwcG9ydGVkIE1pY3Jvc29mdCBUZWFtcyBvcHRpb25zLlxuXHQgKi9cblx0QGFnZ3JlZ2F0aW9uKHtcblx0XHR0eXBlOiBcInNhcC5mZS5tYWNyb3Muc2hhcmUuTXNUZWFtc09wdGlvbnNcIixcblx0XHRkZWZhdWx0Q2xhc3M6IE1zVGVhbXNPcHRpb25zXG5cdH0pXG5cdHB1YmxpYyBtc1RlYW1zT3B0aW9ucz86IE1zVGVhbXNPcHRpb25zO1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRtZW51QnV0dG9uITogUmVmPE1lbnVCdXR0b24+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRjbWRFeGVjdXRpb24hOiBSZWY8Q29tbWFuZEV4ZWN1dGlvbj47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdG1lbnUhOiBSZWY8TWVudT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHNhdmVBc1RpbGVNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHNoYXJlQXNDb2xsYWJvcmF0aW9uTWFuYWdlciE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHNoYXJlVmlhSkFNTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzZW5kRW1haWxNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHNoYXJlQXNDYXJkTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRzaGFyZVZpYUNoYXRNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdHNoYXJlQXNUYWJNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdG1zVGVhbXNHcm91cE1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0cHJpbnRNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGV4cG9ydFRvU3ByZWFkc2hlZXRNZW51SXRlbSE6IFJlZjxNZW51SXRlbT47XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGV4cG9ydFRvUERGTWVudUl0ZW0hOiBSZWY8TWVudUl0ZW0+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHRleHBvcnRUb0NTVk1lbnVJdGVtITogUmVmPE1lbnVJdGVtPjtcblxuXHRwdWJsaWMgaXNJbml0aWFsaXplZD86IFByb21pc2U8dm9pZD47XG5cblx0cHJpdmF0ZSBfYmxvY2tJbnRlcm5hbENvbmZpZyE6IENvbmZpZ09wdGlvbnM7XG5cblx0Y29uc3RydWN0b3IoaWRPclByb3BzOiBzdHJpbmcgfCAoUHJvcGVydGllc09mPFNoYXJlPiAmICRDb250cm9sU2V0dGluZ3MpLCBwcm9wcz86IFByb3BlcnRpZXNPZjxTaGFyZT4gJiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0bGV0IHNoYXJlQVBJSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRpZiAodHlwZW9mIGlkT3JQcm9wcyAhPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cHJvcHMgPSBpZE9yUHJvcHM7XG5cdFx0XHRzaGFyZUFQSUlkID0gcHJvcHMuaWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNoYXJlQVBJSWQgPSBpZE9yUHJvcHM7XG5cdFx0fVxuXHRcdHByb3BzID8/PSB7fTtcblx0XHRwcm9wcy5zaGFyZUFQSUlkID0gc2hhcmVBUElJZDtcblx0XHRwcm9wcy5pZCA9IHVuZGVmaW5lZDtcblx0XHRzdXBlcih1bmRlZmluZWQsIHByb3BzKTtcblx0fVxuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50KTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoX293bmVyQ29tcG9uZW50LmdldEFwcENvbXBvbmVudCgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHNoYXJlIG9wdGlvbiBmcm9tIHRoZSBzaGVsbCBjb25maWd1cmF0aW9uIGFzeW5jaHJvbm91c2x5IGFuZCBwcmVwYXJlIHRoZSBjb250ZW50IG9mIHRoZSBtZW51IGJ1dHRvbi5cblx0ICogT3B0aW9ucyBvcmRlciBhcmU6XG5cdCAqIC0gU2VuZCBhcyBFbWFpbFxuXHQgKiAtIFNoYXJlIGFzIEphbSAoaWYgYXZhaWxhYmxlKVxuXHQgKiAtIFRlYW1zIG9wdGlvbnMgKGlmIGF2YWlsYWJsZSlcblx0ICogLSBTYXZlIGFzIHRpbGUuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoaXMgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpblxuXHQgKiBAcGFyYW0gYXBwQ29tcG9uZW50IFRoZSBBcHBDb21wb25lbnQgaW5zdGFuY2Vcblx0ICovXG5cdGFzeW5jIF9pbml0aWFsaXplTWVudUl0ZW1zKHZpZXc6IFZpZXcsIGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0bGV0IGlzVGVhbXNNb2RlQWN0aXZlID0gZmFsc2U7XG5cdFx0aWYgKGFwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkNvbGxhYm9yYXRpb24pIHtcblx0XHRcdGNvbnN0IHsgZGVmYXVsdDogQ29sbGFib3JhdGlvbkhlbHBlciB9ID0gYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL2NvbW1vbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uSGVscGVyXCIpO1xuXHRcdFx0aXNUZWFtc01vZGVBY3RpdmUgPSBhd2FpdCBDb2xsYWJvcmF0aW9uSGVscGVyLmlzVGVhbXNNb2RlQWN0aXZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzVGVhbXNNb2RlQWN0aXZlKSB7XG5cdFx0XHQvL25lZWQgdG8gY2xlYXIgdGhlIHZpc2libGUgcHJvcGVydHkgYmluZGluZ3Mgb3RoZXJ3aXNlIHdoZW4gdGhlIGJpbmRpbmcgdmFsdWUgY2hhbmdlcyB0aGVuIGl0IHdpbGwgc2V0IGJhY2sgdGhlIHZpc2libGUgdG8gdGhlIHJlc29sdmVkIHZhbHVlXG5cdFx0XHR0aGlzLm1lbnVCdXR0b24uY3VycmVudD8udW5iaW5kUHJvcGVydHkoXCJ2aXNpYmxlXCIsIHRydWUpO1xuXHRcdFx0dGhpcy5tZW51QnV0dG9uLmN1cnJlbnQ/LnNldFZpc2libGUoZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3Qgc2hlbGxTZXJ2aWNlcyA9IGFwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3QgaXNQbHVnaW5JbmZvU3RhYmxlID0gYXdhaXQgc2hlbGxTZXJ2aWNlcy53YWl0Rm9yUGx1Z2luc0xvYWQoKTtcblx0XHRpZiAoIWlzUGx1Z2luSW5mb1N0YWJsZSkge1xuXHRcdFx0Ly8gSW4gY2FzZSB0aGUgcGx1Z2luIGluZm8gaXMgbm90IHlldCBhdmFpbGFibGUgd2UgbmVlZCB0byBkbyB0aGlzIGNvbXB1dGF0aW9uIGFnYWluIG9uIHRoZSBuZXh0IGJ1dHRvbiBjbGlja1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxCdXR0b24gPSB0aGlzLm1lbnVCdXR0b24uY3VycmVudD8uZ2V0QWdncmVnYXRpb24oXCJfY29udHJvbFwiKSBhcyBNYW5hZ2VkT2JqZWN0O1xuXHRcdFx0aW50ZXJuYWxCdXR0b24/LmF0dGFjaEV2ZW50T25jZShcInByZXNzXCIsIHt9LCAoKSA9PiB0aGlzLl9pbml0aWFsaXplTWVudUl0ZW1zLCB0aGlzKTtcblx0XHR9XG5cblx0XHR0aGlzLl9ibG9ja0ludGVybmFsQ29uZmlnID0gdGhpcy5fZ2V0U2hhcmVCbG9ja0NvbmZpZyh2aWV3KTtcblxuXHRcdGF3YWl0IHRoaXMuX2FkZE1lbnVJdGVtcyhjb250cm9sbGVyLCBzaGVsbFNlcnZpY2VzLCB2aWV3KTtcblx0XHR0aGlzLnNldFNoYXJlT3B0aW9uc1Zpc2liaWxpdHkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgc2hhcmUgb3B0aW9ucyBhcyBtZW51IGl0ZW1zIHRvIHRoZSBzaGFyZSBidXR0b24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gc2hlbGxTZXJ2aWNlcyBTaGVsbCBTZXJ2aWNlc1xuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGlzIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW5cblx0ICovXG5cdGFzeW5jIF9hZGRNZW51SXRlbXMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHNoZWxsU2VydmljZXM6IElTaGVsbFNlcnZpY2VzLCB2aWV3OiBWaWV3KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5fYWRkU2VuZEVtYWlsT3B0aW9uKGNvbnRyb2xsZXIpO1xuXHRcdGF3YWl0IHRoaXMuX2FkZFNoZWxsQmFzZWRNZW51SXRlbXMoY29udHJvbGxlciwgc2hlbGxTZXJ2aWNlcyk7XG5cdFx0dGhpcy5fYWRkUHJpbnRPcHRpb25zKGNvbnRyb2xsZXIsIHZpZXcpO1xuXHRcdHRoaXMuX2FkZEV4cG9ydEV4Y2VsT3B0aW9ucyhjb250cm9sbGVyLCB2aWV3KTtcblx0XHR0aGlzLl9hZGRFeHBvcnRDU1ZPcHRpb25zKGNvbnRyb2xsZXIsIHZpZXcpO1xuXHRcdHRoaXMuX2FkZEV4cG9ydFBERk9wdGlvbnMoY29udHJvbGxlciwgdmlldyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY3VzdG9tIGhhbmRsZXJzLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqIEBwYXJhbSBzaGFyZU9wdGlvblByb3AgVGhlIGtleSBvZiB0aGUgYWN0aW9uIHlvdSB3YW50IHRvIGNhbGxcblx0ICovXG5cdF9jYWxsTWFuaWZlc3RBY3Rpb25zRXZlbnRzKFxuXHRcdGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRcdHZpZXc6IFZpZXcsXG5cdFx0c2hhcmVPcHRpb25Qcm9wOiBcInByaW50XCIgfCBcImV4cG9ydFRvQ1NWXCIgfCBcImV4cG9ydFRvU3ByZWFkc2hlZXRcIiB8IFwiZXhwb3J0VG9QREZcIlxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHRjb25zdCBzaGFyZUFjdGlvblByb3BzID0gdmlld0RhdGE/LnNoYXJlPy5bc2hhcmVPcHRpb25Qcm9wXTtcblx0XHRjb25zdCBtb2R1bGUgPSBzaGFyZUFjdGlvblByb3BzPy5wcmVzcz8uc3Vic3RyaW5nKDAsIHNoYXJlQWN0aW9uUHJvcHM/LnByZXNzPy5sYXN0SW5kZXhPZihcIi5cIikpLnJlcGxhY2UoL1xcLi9naSwgXCIvXCIpO1xuXHRcdGNvbnN0IG1ldGhvZCA9IHNoYXJlQWN0aW9uUHJvcHM/LnByZXNzPy5zdWJzdHJpbmcoc2hhcmVBY3Rpb25Qcm9wcz8ucHJlc3M/Lmxhc3RJbmRleE9mKFwiLlwiKSArIDEsIHNoYXJlQWN0aW9uUHJvcHM/LnByZXNzPy5sZW5ndGgpO1xuXG5cdFx0aWYgKG1vZHVsZSAmJiBtZXRob2QpIHtcblx0XHRcdEZQTUhlbHBlci5sb2FkTW9kdWxlQW5kQ2FsbE1ldGhvZChtb2R1bGUsIG1ldGhvZCwgdmlldywgY29udHJvbGxlcik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy5lcnJvcihcIkZhaWxlZCB0byBjYWxsIGV2ZW50IGhhbmRsZXIsIE1vZHVsZSBhbmQvb3IgTWV0aG9kIGlzIG5vdCBzZXQgcHJvcGVybHlcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBwcmludCBvcHRpb24gdG8gbWVudSBidXR0b24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGlzIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW5cblx0ICovXG5cdF9hZGRQcmludE9wdGlvbnMoY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHZpZXc6IFZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHRpZiAodmlld0RhdGE/LnNoYXJlPy5oYXNPd25Qcm9wZXJ0eShcInByaW50XCIpID09PSB0cnVlICYmIHZpZXdEYXRhPy5zaGFyZT8ucHJpbnQ/Lmhhc093blByb3BlcnR5KFwicHJlc3NcIikgPT09IHRydWUpIHtcblx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5wcmludE1lbnVJdGVtfVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1NIQVJFX0NPTlRST0xfUFJJTlRcIil9XG5cdFx0XHRcdFx0aWNvbj17UFJJTlRfSUNPTn1cblx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhjb250cm9sbGVyLCB2aWV3LCBcInByaW50XCIpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgRXhwb3J0IGFzIEV4Y2VsIG9wdGlvbiB0byBtZW51IGJ1dHRvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoaXMgYnVpbGRpbmcgYmxvY2sgaXMgdXNlZCBpblxuXHQgKi9cblx0X2FkZEV4cG9ydEV4Y2VsT3B0aW9ucyhjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgdmlldzogVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIFZpZXdEYXRhO1xuXHRcdGlmICh2aWV3RGF0YT8uc2hhcmU/Lmhhc093blByb3BlcnR5KFwiZXhwb3J0VG9TcHJlYWRzaGVldFwiKSA9PT0gdHJ1ZSAmJiB2aWV3RGF0YT8uc2hhcmU/LnByaW50Py5oYXNPd25Qcm9wZXJ0eShcInByZXNzXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRyZWY9e3RoaXMuZXhwb3J0VG9TcHJlYWRzaGVldE1lbnVJdGVtfVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJUX1NIQVJFX0NPTlRST0xfRVhQT1JUX0FTX0VYQ0VMXCIpfVxuXHRcdFx0XHRcdGljb249e0VYUE9SVF9UT19TUFJFQURTSEVFVF9JQ09OfVxuXHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl9jYWxsTWFuaWZlc3RBY3Rpb25zRXZlbnRzKGNvbnRyb2xsZXIsIHZpZXcsIFwiZXhwb3J0VG9TcHJlYWRzaGVldFwiKTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIEV4cG9ydCBhcyBDU1Ygb3B0aW9uIHRvIG1lbnUgYnV0dG9uLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhpcyBidWlsZGluZyBibG9jayBpcyB1c2VkIGluXG5cdCAqL1xuXHRfYWRkRXhwb3J0Q1NWT3B0aW9ucyhjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgdmlldzogVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gdmlldy5nZXRWaWV3RGF0YSgpIGFzIFZpZXdEYXRhO1xuXHRcdGlmICh2aWV3RGF0YT8uc2hhcmU/Lmhhc093blByb3BlcnR5KFwiZXhwb3J0VG9DU1ZcIikgPT09IHRydWUgJiYgdmlld0RhdGE/LnNoYXJlPy5wcmludD8uaGFzT3duUHJvcGVydHkoXCJwcmVzc1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0cmVmPXt0aGlzLmV4cG9ydFRvQ1NWTWVudUl0ZW19XG5cdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfU0hBUkVfQ09OVFJPTF9FWFBPUlRfQVNfQ1NWXCIpfVxuXHRcdFx0XHRcdGljb249e0VYUE9SVF9UT19DU1ZfSUNPTn1cblx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5fY2FsbE1hbmlmZXN0QWN0aW9uc0V2ZW50cyhjb250cm9sbGVyLCB2aWV3LCBcImV4cG9ydFRvQ1NWXCIpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgRXhwb3J0IGFzIFBERiBvcHRpb24gdG8gbWVudSBidXR0b24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGlzIGJ1aWxkaW5nIGJsb2NrIGlzIHVzZWQgaW5cblx0ICovXG5cdF9hZGRFeHBvcnRQREZPcHRpb25zKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCB2aWV3OiBWaWV3KTogdm9pZCB7XG5cdFx0Y29uc3Qgdmlld0RhdGEgPSB2aWV3LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGE7XG5cdFx0aWYgKHZpZXdEYXRhPy5zaGFyZT8uaGFzT3duUHJvcGVydHkoXCJleHBvcnRUb1BERlwiKSA9PT0gdHJ1ZSAmJiB2aWV3RGF0YT8uc2hhcmU/LnByaW50Py5oYXNPd25Qcm9wZXJ0eShcInByZXNzXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzPy5tZW51Py5jdXJyZW50Py5hZGRJdGVtKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRyZWY9e3RoaXMuZXhwb3J0VG9QREZNZW51SXRlbX1cblx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9TSEFSRV9DT05UUk9MX0VYUE9SVF9BU19QREZcIil9XG5cdFx0XHRcdFx0aWNvbj17RVhQT1JUX1RPX1BERl9JQ09OfVxuXHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHR0aGlzLl9jYWxsTWFuaWZlc3RBY3Rpb25zRXZlbnRzKGNvbnRyb2xsZXIsIHZpZXcsIFwiZXhwb3J0VG9QREZcIik7XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBzZW5kIGVtYWlsIG9wdGlvbiB0byBtZW51IGJ1dHRvbi5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZSBjb250cm9sbGVyXG5cdCAqL1xuXHRfYWRkU2VuZEVtYWlsT3B0aW9uKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuc2hhcmVPcHRpb25zPy5zaG93U2VuZEVtYWlsID8/IHRydWUpIHtcblx0XHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0oXG5cdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdHJlZj17dGhpcy5zZW5kRW1haWxNZW51SXRlbX1cblx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiVF9TRU1BTlRJQ19DT05UUk9MX1NFTkRfRU1BSUxcIil9XG5cdFx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL2VtYWlsXCJ9XG5cdFx0XHRcdFx0cHJlc3M9e2FzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IGNvbnRyb2xsZXIuc2hhcmUuX3RyaWdnZXJFbWFpbCgpfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIFVTaGVsbCBiYXNlZCBzaGFyZSBvcHRpb25zLlxuXHQgKiBAcGFyYW0gY29udHJvbGxlciBQYWdlIGNvbnRyb2xsZXJcblx0ICogQHBhcmFtIHNoZWxsU2VydmljZXMgU2hlbGwgU2VydmljZXNcblx0ICovXG5cdGFzeW5jIF9hZGRTaGVsbEJhc2VkTWVudUl0ZW1zKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBzaGVsbFNlcnZpY2VzOiBJU2hlbGxTZXJ2aWNlcyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGhhc1VzaGVsbCA9IHNoZWxsU2VydmljZXMuaGFzVVNoZWxsKCk7XG5cdFx0aWYgKGhhc1VzaGVsbCkge1xuXHRcdFx0Ly8gc2hhcmUgdmlhIEpBTVxuXHRcdFx0dGhpcy5fYWRkU2hhcmVWaWFKQU1PcHRpb24oY29udHJvbGxlciwgc2hlbGxTZXJ2aWNlcyk7XG5cblx0XHRcdC8vIFByZXBhcmUgdGVhbXMgbWVudSBpdGVtc1xuXHRcdFx0YXdhaXQgdGhpcy5fYWRkTVNUZWFtc09wdGlvbnMoY29udHJvbGxlcik7XG5cblx0XHRcdC8vIFByZXBhcmUgQ29sbGFib3JhdGlvbiBNYW5hZ2VyIE9wdGlvbnNcblx0XHRcdGF3YWl0IHRoaXMuX2FkZENvbGxhYm9yYXRpb25NYW5hZ2VyT3B0aW9uKGNvbnRyb2xsZXIpO1xuXG5cdFx0XHQvLyBTYXZlIGFzIFRpbGVcblx0XHRcdGF3YWl0IHRoaXMuX2FkZFNhdmVBc1RpbGVPcHRpb24oY29udHJvbGxlcik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBDTSBvcHRpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFRoZSBjb250cm9sbGVyIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIE1lbnVJdGVtc1xuXHQgKi9cblx0YXN5bmMgX2FkZENvbGxhYm9yYXRpb25NYW5hZ2VyT3B0aW9uKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpb25PcHRpb24gPSBhd2FpdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlLmdldENvbGxhYm9yYXRpb25NYW5hZ2VyT3B0aW9uKCk7XG5cdFx0XHRpZiAoY29sbGFib3JhdGlvbk9wdGlvbiAmJiAodGhpcy5zaGFyZU9wdGlvbnM/LnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciA/PyBmYWxzZSkpIHtcblx0XHRcdFx0Y29uc3QgbWVudUl0ZW0gPSAoXG5cdFx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0XHRyZWY9e3RoaXMuc2hhcmVBc0NvbGxhYm9yYXRpb25NYW5hZ2VyfVxuXHRcdFx0XHRcdFx0dGV4dD17Y29sbGFib3JhdGlvbk9wdGlvbi50ZXh0fVxuXHRcdFx0XHRcdFx0aWNvbj17Y29sbGFib3JhdGlvbk9wdGlvbi5pY29ufVxuXHRcdFx0XHRcdFx0cHJlc3M9e2FzeW5jIChldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4gPT5cblx0XHRcdFx0XHRcdFx0dGhpcy5fY29sbGFib3JhdGlvbk1hbmFnZXJCdXR0b25QcmVzcyhjb2xsYWJvcmF0aW9uT3B0aW9uLnByZXNzLCBldmVudClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQ+PC9NZW51SXRlbT5cblx0XHRcdFx0KTtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKG1lbnVJdGVtLCBcInByZXNzXCIsIGNvbGxhYm9yYXRpb25PcHRpb24uZmVzclN0ZXBOYW1lKTtcblx0XHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShtZW51SXRlbSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEFkZGluZyBDb2xsYWJvcmF0aW9uIE1hbmFnZXIgT3B0aW9uIDogJHttZXNzYWdlfWApO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9jb2xsYWJvcmF0aW9uTWFuYWdlckJ1dHRvblByZXNzKGNvbGxhYm9yYXRpb25DYWxsQmFjazogRnVuY3Rpb24sIGV2ZW50OiBVSTVFdmVudDx7fSwgTWVudUl0ZW0+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgY2xpY2tlZE1lbnVJdGVtID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cblx0XHRjb25zdCB2aWV3OiBWaWV3ID0gQ29tbW9uVXRpbHMuZ2V0VGFyZ2V0VmlldyhjbGlja2VkTWVudUl0ZW0pO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXI7XG5cdFx0YXdhaXQgY29udHJvbGxlci5zaGFyZS5fYWRhcHRTaGFyZU1ldGFkYXRhKCk7XG5cdFx0Y29uc3Qgc2hhcmVJbmZvTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwic2hhcmVJbmZvXCIpIGFzIEpTT05Nb2RlbCB8IHVuZGVmaW5lZDtcblxuXHRcdGlmIChzaGFyZUluZm9Nb2RlbCkge1xuXHRcdFx0Y29uc3Qgc2hhcmVJbmZvID0gc2hhcmVJbmZvTW9kZWwuZ2V0RGF0YSgpO1xuXHRcdFx0Y29uc3QgeyBjb2xsYWJvcmF0aW9uSW5mbyB9ID0gc2hhcmVJbmZvO1xuXHRcdFx0Y29sbGFib3JhdGlvbkNhbGxCYWNrKGNvbGxhYm9yYXRpb25JbmZvLmFwcFRpdGxlLCBjb2xsYWJvcmF0aW9uSW5mby51cmwpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgc2hhcmUgdmlhIEpBTSBvcHRpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKiBAcGFyYW0gc2hlbGxTZXJ2aWNlcyBTaGVsbCBTZXJ2aWNlc1xuXHQgKi9cblx0X2FkZFNoYXJlVmlhSkFNT3B0aW9uKGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBzaGVsbFNlcnZpY2VzOiBJU2hlbGxTZXJ2aWNlcyk6IHZvaWQge1xuXHRcdGNvbnN0IGhhc0phbSA9ICEhc2hlbGxTZXJ2aWNlcy5pc0phbUFjdGl2ZT8uKCk7XG5cdFx0aWYgKGhhc0phbSkge1xuXHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0cmVmPXt0aGlzLnNoYXJlVmlhSkFNTWVudUl0ZW19XG5cdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIlRfQ09NTU9OX1NBUEZFX1NIQVJFX0pBTVwiKX1cblx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vc2hhcmUtMlwifVxuXHRcdFx0XHRcdHByZXNzPXthc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiBjb250cm9sbGVyLnNoYXJlLl90cmlnZ2VyU2hhcmVUb0phbSgpfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIG9wdGlvbnMgdG8gc2hhcmUgdmlhIE1pY3Jvc29mdCBUZWFtcy5cblx0ICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZUNvbnRyb2xsZXJcblx0ICovXG5cdGFzeW5jIF9hZGRNU1RlYW1zT3B0aW9ucyhjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAodGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZz8uc2hvd01zVGVhbXNPcHRpb25zID09PSBmYWxzZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IHNoYXJlQ29sbGFib3JhdGlvbk9wdGlvbnMgPSBhd2FpdCBjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlLmdldFRlYW1zQ29sbGFiT3B0aW9uc1ZpYVNoYXJlKHtcblx0XHRcdFx0aXNTaGFyZUFzQ2FyZEVuYWJsZWQ6IHRoaXMuX2dldElzU2hhcmVBc0NhcmRFbmFibGVkKClcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoIXNoYXJlQ29sbGFib3JhdGlvbk9wdGlvbnMpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IGNvbGxhYm9yYXRpb25PcHRpb24gb2Ygc2hhcmVDb2xsYWJvcmF0aW9uT3B0aW9ucykge1xuXHRcdFx0XHRjb25zdCBtZW51SXRlbVNldHRpbmdzOiAkTWVudUl0ZW1TZXR0aW5ncyA9IHRoaXMuX2dldE1zVGVhbXNNZW51SXRlbVNldHRpbmdzKGNvbGxhYm9yYXRpb25PcHRpb24pO1xuXHRcdFx0XHRjb25zdCBzdWJPcHRpb25zID0gbWVudUl0ZW1TZXR0aW5ncy5pdGVtcztcblx0XHRcdFx0Ly8gTXVsdGlwbGUgc3ViIG9wdGlvbnMgYXJlIGdyb3VwZWQgaW50byBzaW5nbGUgdGVhbXMgZ3JvdXAgbWVudSBpdGVtLlxuXHRcdFx0XHRjb25zdCBtZW51SXRlbUtleSA9XG5cdFx0XHRcdFx0QXJyYXkuaXNBcnJheShzdWJPcHRpb25zKSAmJiBzdWJPcHRpb25zLmxlbmd0aCA/IGVudW1TaGFyZU9wdGlvbi5NU19URUFNU19HUk9VUCA6IGNvbGxhYm9yYXRpb25PcHRpb24ua2V5O1xuXG5cdFx0XHRcdHRoaXMuX2FkZE1zVGVhbXNNZW51SXRlbShtZW51SXRlbVNldHRpbmdzLCBtZW51SXRlbUtleSwgY29sbGFib3JhdGlvbk9wdGlvbi5mZXNyU3RlcE5hbWUpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcblx0XHRcdExvZy5lcnJvcihgRkUgOiBCdWlsZGluZ2Jsb2NrIDogU2hhcmUgOiBhZGRpbmcgTVMgdGVhbXMgb3B0aW9ucyA6ICR7bWVzc2FnZX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHNhdmUgYXMgdGlsZSBvcHRpb24uXG5cdCAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2UgY29udHJvbGxlclxuXHQgKi9cblx0YXN5bmMgX2FkZFNhdmVBc1RpbGVPcHRpb24oY29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gc2V0IHNhdmUgYXMgdGlsZVxuXHRcdFx0Ly8gZm9yIG5vdyB3ZSBuZWVkIHRvIGNyZWF0ZSBhZGRCb29rbWFya0J1dHRvbiB0byB1c2UgdGhlIHNhdmUgYXMgdGlsZSBmZWF0dXJlLlxuXHRcdFx0Ly8gSW4gdGhlIGZ1dHVyZSBzYXZlIGFzIHRpbGUgc2hvdWxkIGJlIGF2YWlsYWJsZSBhcyBhbiBBUEkgb3IgYSBNZW51SXRlbSBzbyB0aGF0IGl0IGNhbiBiZSBhZGRlZCB0byB0aGUgTWVudSBidXR0b24uXG5cdFx0XHQvLyBUaGlzIG5lZWRzIHRvIGJlIGRpc2N1c3NlZCB3aXRoIEFkZEJvb2ttYXJrQnV0dG9uIHRlYW0uXG5cdFx0XHQvLyBJbmNsdWRlZCBpbiBhIGhhc1VzaGVsbCBicmFuY2hcblx0XHRcdGNvbnN0IHsgZGVmYXVsdDogQWRkQm9va21hcmtCdXR0b24gfSA9IGF3YWl0IGltcG9ydChcInNhcC91c2hlbGwvdWkvZm9vdGVyYmFyL0FkZEJvb2ttYXJrQnV0dG9uXCIpO1xuXHRcdFx0Y29uc3QgYWRkQm9va21hcmtCdXR0b24gPSBuZXcgQWRkQm9va21hcmtCdXR0b24oKTtcblx0XHRcdGlmIChhZGRCb29rbWFya0J1dHRvbi5nZXRFbmFibGVkKCkpIHtcblx0XHRcdFx0dGhpcz8ubWVudT8uY3VycmVudD8uYWRkSXRlbShcblx0XHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRcdHJlZj17dGhpcy5zYXZlQXNUaWxlTWVudUl0ZW19XG5cdFx0XHRcdFx0XHR0ZXh0PXthZGRCb29rbWFya0J1dHRvbi5nZXRUZXh0KCl9XG5cdFx0XHRcdFx0XHRpY29uPXthZGRCb29rbWFya0J1dHRvbi5nZXRJY29uKCl9XG5cdFx0XHRcdFx0XHRwcmVzcz17YXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4gY29udHJvbGxlci5zaGFyZS5fc2F2ZUFzVGlsZSh0aGlzLnNhdmVBc1RpbGVNZW51SXRlbS5jdXJyZW50ISl9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3sgZGVwZW5kZW50czogW2FkZEJvb2ttYXJrQnV0dG9uXSB9fVxuXHRcdFx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRCb29rbWFya0J1dHRvbi5kZXN0cm95KCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG5cdFx0XHRjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuXHRcdFx0TG9nLmVycm9yKGBGRSA6IEJ1aWxkaW5nYmxvY2sgOiBTaGFyZSA6IGFkZGluZyBTYXZlIGFzIHRpbGUgb3B0aW9uIDogJHttZXNzYWdlfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgaXNTaGFyZUFzQ2FyZEVuYWJsZWQgdG8gZmV0Y2ggc3VwcG9ydGVkIGNvbGxhYm9yYXRpb24gb3B0aW9ucy5cblx0ICogQHJldHVybnMgQm9vbGVhbi5cblx0ICovXG5cdF9nZXRJc1NoYXJlQXNDYXJkRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCBzaG93U2hhcmVBc0NhcmQgPSB0aGlzLm1zVGVhbXNPcHRpb25zPy5lbmFibGVDYXJkID8/IGZhbHNlO1xuXG5cdFx0aWYgKHR5cGVvZiBzaG93U2hhcmVBc0NhcmQgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0XHRyZXR1cm4gc2hvd1NoYXJlQXNDYXJkO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHNob3dTaGFyZUFzQ2FyZCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0Ly8gXCJ0cnVlXCIgb3IgYSBiaW5kaW5nIGV4cHJlc3Npb25cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBzaG93U2hhcmVBc0NhcmQgPT09IFwidHJ1ZVwiIHx8IEJvb2xlYW4oQmluZGluZ0luZm8ucGFyc2Uoc2hvd1NoYXJlQXNDYXJkKSk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVyciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgTWVudSBJdGVtIHNldHRpbmdzIGZvciBtYWluIE1TIHRlYW1zIG9wdGlvbi5cblx0ICogQHBhcmFtIGNvbGxhYm9yYXRpb25PcHRpb24gUm9vdCBDb2xsYWJvcmF0aW9uIE9wdGlvblxuXHQgKiBAcmV0dXJucyBNZW51SXRlbVNldHRpbmdzXG5cdCAqL1xuXHRfZ2V0TXNUZWFtc01lbnVJdGVtU2V0dGluZ3MoY29sbGFib3JhdGlvbk9wdGlvbjogQ29sbGFib3JhdGlvbk9wdGlvbnMpOiAkTWVudUl0ZW1TZXR0aW5ncyB7XG5cdFx0Y29uc3QgaXRlbXMgPSB0aGlzLl9nZXRNc1RlYW1zU3ViT3B0aW9ucyhjb2xsYWJvcmF0aW9uT3B0aW9uPy5zdWJPcHRpb25zKTtcblx0XHRjb25zdCBtZW51SXRlbVNldHRpbmdzOiAkTWVudUl0ZW1TZXR0aW5ncyA9IHtcblx0XHRcdHRleHQ6IGNvbGxhYm9yYXRpb25PcHRpb24udGV4dCxcblx0XHRcdGljb246IGNvbGxhYm9yYXRpb25PcHRpb24uaWNvbixcblx0XHRcdGl0ZW1zXG5cdFx0fTtcblxuXHRcdGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdC8vIGlmIHRoZXJlIGFyZSBubyBzdWIgb3B0aW9uIHRoZW4gdGhlIG1haW4gb3B0aW9uIHNob3VsZCBiZSBjbGlja2FibGVcblx0XHRcdC8vIHNvIGFkZCBhIHByZXNzIGhhbmRsZXIuXG5cdFx0XHRtZW51SXRlbVNldHRpbmdzLnByZXNzID0gYXN5bmMgKGV2ZW50OiBVSTVFdmVudDx7fSwgTWVudUl0ZW0+KTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmNvbGxhYm9yYXRpb25NZW51SXRlbVByZXNzKGV2ZW50KTtcblx0XHRcdG1lbnVJdGVtU2V0dGluZ3NbXCJjdXN0b21EYXRhXCJdID0gbmV3IEN1c3RvbURhdGEoe1xuXHRcdFx0XHRrZXk6IFwiY29sbGFib3JhdGlvbkRhdGFcIixcblx0XHRcdFx0dmFsdWU6IGNvbGxhYm9yYXRpb25PcHRpb25cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbWVudUl0ZW1TZXR0aW5ncztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgbWFpbiBNUyBUZWFtcyBNZW51IEl0ZW0gdG8gdGhlIFNoYXJlIGJ1aWxkaW5nIGJsb2NrIG1lbnUuXG5cdCAqIEBwYXJhbSBtZW51SXRlbVNldHRpbmdzIE1lbnUgSXRlbSBzZXR0aW5nc1xuXHQgKiBAcGFyYW0gbWVudUl0ZW1LZXkgTVMgdGVhbXMgb3B0aW9uIGtleVxuXHQgKiBAcGFyYW0gZmVzclN0ZXBOYW1lIFN0ZXAgbmFtZVxuXHQgKi9cblx0X2FkZE1zVGVhbXNNZW51SXRlbShtZW51SXRlbVNldHRpbmdzOiAkTWVudUl0ZW1TZXR0aW5ncywgbWVudUl0ZW1LZXk/OiBTaGFyZU9wdGlvbktleSwgZmVzclN0ZXBOYW1lPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgbWVudUl0ZW06IE1lbnVJdGVtID0gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdHJlZj17dGhpcy5fZ2V0TWVudUl0ZW1SZWZlcmVuY2UobWVudUl0ZW1LZXkpfVxuXHRcdFx0XHR0ZXh0PXttZW51SXRlbVNldHRpbmdzLnRleHR9XG5cdFx0XHRcdGljb249e21lbnVJdGVtU2V0dGluZ3MuaWNvbn1cblx0XHRcdFx0Y3VzdG9tRGF0YT17bWVudUl0ZW1TZXR0aW5ncy5jdXN0b21EYXRhfVxuXHRcdFx0XHRpdGVtcz17bWVudUl0ZW1TZXR0aW5ncy5pdGVtc31cblx0XHRcdD48L01lbnVJdGVtPlxuXHRcdCk7XG5cdFx0aWYgKG1lbnVJdGVtU2V0dGluZ3MucHJlc3MpIHtcblx0XHRcdC8vXG5cdFx0XHRtZW51SXRlbS5hdHRhY2hQcmVzcyhtZW51SXRlbVNldHRpbmdzLnByZXNzKTtcblx0XHRcdGlmIChmZXNyU3RlcE5hbWUpIHtcblx0XHRcdFx0RkVTUkhlbHBlci5zZXRTZW1hbnRpY1N0ZXBuYW1lKG1lbnVJdGVtLCBcInByZXNzXCIsIGZlc3JTdGVwTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXM/Lm1lbnU/LmN1cnJlbnQ/LmFkZEl0ZW0obWVudUl0ZW0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBNZW51IEl0ZW1zIGNvcnJlc3BvbmRpbmcgdG8gTVMgdGVhbXMgc3ViIG9wdGlvbnMuXG5cdCAqIEBwYXJhbSBzdWJPcHRpb25zIEFycmF5IG9mIGNvbGxhYm9yYXRpb24gb3B0aW9uc1xuXHQgKiBAcmV0dXJucyBNZW51SXRlbXNcblx0ICovXG5cdF9nZXRNc1RlYW1zU3ViT3B0aW9ucyhzdWJPcHRpb25zPzogQ29sbGFib3JhdGlvbk9wdGlvbnNbXSk6IE1lbnVJdGVtW10ge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShzdWJPcHRpb25zKSkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdHJldHVybiBzdWJPcHRpb25zLnJlZHVjZSgobWVudUl0ZW1zOiBNZW51SXRlbVtdLCBzdWJPcHRpb246IENvbGxhYm9yYXRpb25PcHRpb25zKSA9PiB7XG5cdFx0XHRjb25zdCBzdWJNZW51SXRlbSA9IChcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0cmVmPXt0aGlzLl9nZXRNZW51SXRlbVJlZmVyZW5jZShzdWJPcHRpb24ua2V5KX1cblx0XHRcdFx0XHR0ZXh0PXtzdWJPcHRpb24udGV4dH1cblx0XHRcdFx0XHRpY29uPXtzdWJPcHRpb24uaWNvbn1cblx0XHRcdFx0XHRwcmVzcz17YXN5bmMgKGV2ZW50OiBVSTVFdmVudDx7fSwgTWVudUl0ZW0+KTogUHJvbWlzZTx2b2lkPiA9PiB0aGlzLmNvbGxhYm9yYXRpb25NZW51SXRlbVByZXNzKGV2ZW50KX1cblx0XHRcdFx0XHRjdXN0b21EYXRhPXtcblx0XHRcdFx0XHRcdG5ldyBDdXN0b21EYXRhKHtcblx0XHRcdFx0XHRcdFx0a2V5OiBcImNvbGxhYm9yYXRpb25EYXRhXCIsXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBzdWJPcHRpb25cblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ+PC9NZW51SXRlbT5cblx0XHRcdCk7XG5cdFx0XHRpZiAoc3ViT3B0aW9uLmZlc3JTdGVwTmFtZSkge1xuXHRcdFx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUoc3ViTWVudUl0ZW0sIFwicHJlc3NcIiwgc3ViT3B0aW9uLmZlc3JTdGVwTmFtZSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gWy4uLm1lbnVJdGVtcywgc3ViTWVudUl0ZW1dO1xuXHRcdH0sIFtdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcmVzcyBoYW5kbGVyIGZvciBjb2xsYWJvcmF0aW9uIG1lbnUgaXRlbXMuXG5cdCAqYFxuXHQgKiBAcGFyYW0gZXZlbnQgRXZlbnQgb2JqZWN0XG5cdCAqL1xuXHRhc3luYyBjb2xsYWJvcmF0aW9uTWVudUl0ZW1QcmVzcyhldmVudDogVUk1RXZlbnQ8e30sIE1lbnVJdGVtPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNsaWNrZWRNZW51SXRlbSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXG5cdFx0Y29uc3QgdmlldzogVmlldyA9IENvbW1vblV0aWxzLmdldFRhcmdldFZpZXcoY2xpY2tlZE1lbnVJdGVtKTtcblx0XHRjb25zdCBjb250cm9sbGVyOiBQYWdlQ29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyO1xuXHRcdGF3YWl0IGNvbnRyb2xsZXIuc2hhcmUuX2FkYXB0U2hhcmVNZXRhZGF0YSgpO1xuXHRcdGNvbnN0IHNoYXJlSW5mb01vZGVsID0gdmlldy5nZXRNb2RlbChcInNoYXJlSW5mb1wiKSBhcyBKU09OTW9kZWwgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoc2hhcmVJbmZvTW9kZWwpIHtcblx0XHRcdGNvbnN0IHNoYXJlSW5mbyA9IHNoYXJlSW5mb01vZGVsLmdldERhdGEoKTtcblx0XHRcdGNvbnN0IHsgY29sbGFib3JhdGlvbkluZm8gfSA9IHNoYXJlSW5mbztcblxuXHRcdFx0Y29uc3QgY29sbGFib3JhdGlvbkRhdGEgPSBjbGlja2VkTWVudUl0ZW0uZGF0YShcImNvbGxhYm9yYXRpb25EYXRhXCIpO1xuXHRcdFx0Y29uc3QgY29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgdGVhbXNIZWxwZXJTZXJ2aWNlID0gKGF3YWl0IGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UuZ2V0Q29sbGFib3JhdGlvblNlcnZpY2VzKCkpLm9UZWFtc0hlbHBlclNlcnZpY2U7XG5cdFx0XHRpZiAoY29sbGFib3JhdGlvbkRhdGFbXCJrZXlcIl0gPT09IGVudW1NU1RlYW1zT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DQVJEKSB7XG5cdFx0XHRcdGNvbnN0IGlzU2hhcmVBc0NhcmRFbmFibGVkID0gdGVhbXNIZWxwZXJTZXJ2aWNlLmlzRmVhdHVyZUZsYWdFbmFibGVkKCk7XG5cdFx0XHRcdGNvbnN0IGNhcmREZWZpbml0aW9uID0gaXNTaGFyZUFzQ2FyZEVuYWJsZWQgPyBhd2FpdCBjb250cm9sbGVyLnNoYXJlLmdldENhcmREZWZpbml0aW9uKCkgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGxldCBjYXJkSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRcdFx0aWYgKGNhcmREZWZpbml0aW9uKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2hlbGxTZXJ2aWNlSGVscGVyID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdFx0Y29uc3QgeyBzZW1hbnRpY09iamVjdCwgYWN0aW9uIH0gPSBzaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0XHRcdFx0Y2FyZElkID0gYCR7c2VtYW50aWNPYmplY3R9XyR7YWN0aW9ufWA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVhc29uID0gIWlzU2hhcmVBc0NhcmRFbmFibGVkXG5cdFx0XHRcdFx0XHQ/IFwiRmVhdHVyZSBmbGFnIGRpc2FibGVkIGluIGNvbGxhYm9yYXRpb24gdGVhbXMgaGVscGVyXCJcblx0XHRcdFx0XHRcdDogXCJDYXJkIGRlZmluaXRpb24gd2FzIG5vdCBjcmVhdGVkXCI7XG5cdFx0XHRcdFx0TG9nLmluZm8oYEZFIFY0IDogU2hhcmUgYmxvY2sgOiBzaGFyZSBhcyBDYXJkIDogJHtyZWFzb259YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29sbGFib3JhdGlvbkluZm9bXCJjYXJkTWFuaWZlc3RcIl0gPSBjYXJkRGVmaW5pdGlvbjtcblx0XHRcdFx0Y29sbGFib3JhdGlvbkluZm9bXCJjYXJkSWRcIl0gPSBjYXJkSWQ7XG5cdFx0XHR9XG5cdFx0XHR0ZWFtc0hlbHBlclNlcnZpY2Uuc2hhcmUoY29sbGFib3JhdGlvbkRhdGEsIGNvbGxhYm9yYXRpb25JbmZvKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSB2aXNpYmlsaXR5IG9mIGluZGl2aWR1YWwgVUkgZWxlbWVudHMgb2YgdGhlIFNoYXJlIGJ1aWxkaW5nIGJsb2NrLiBMaWtlLCBNZW51SXRlbXMsIE1lbnVCdXR0b24gYW5kIENvbW1hbmQgZXhlY3V0aW9uLlxuXHQgKi9cblx0c2V0U2hhcmVPcHRpb25zVmlzaWJpbGl0eSgpOiB2b2lkIHtcblx0XHRjb25zdCBvcHRpb25LZXlzID0gT2JqZWN0LmtleXMoZW51bVNoYXJlT3B0aW9uKSBhcyBTaGFyZU9wdGlvbktleVtdO1xuXHRcdGNvbnN0IHZpc2libGVCaW5kaW5nRXhwcyA9IG9wdGlvbktleXMucmVkdWNlKChiaW5kaW5nVG9vbGtpdEV4cHM6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdLCBvcHRpb246IFNoYXJlT3B0aW9uS2V5KSA9PiB7XG5cdFx0XHRjb25zdCBleHAgPSB0aGlzLl9nZXRTaGFyZU9wdGlvblZpc2liaWxpdHlFeHByZXNzaW9uKG9wdGlvbik7XG5cdFx0XHR0aGlzLl9zZXRTaGFyZU9wdGlvblZpc2liaWxpdHkob3B0aW9uLCBleHApO1xuXHRcdFx0cmV0dXJuIFsuLi5iaW5kaW5nVG9vbGtpdEV4cHMsIGV4cF07XG5cdFx0fSwgW10pO1xuXHRcdGNvbnN0IHNoYXJlQmxvY2tWaXNpYmxlRXhwID0gb3IoLi4udmlzaWJsZUJpbmRpbmdFeHBzKTtcblx0XHRpZiAodGhpcy5tZW51QnV0dG9uLmN1cnJlbnQgJiYgdGhpcy5jbWRFeGVjdXRpb24uY3VycmVudCkge1xuXHRcdFx0dGhpcy5fYmluZFVJVmlzaWJpbGl0eSh0aGlzLm1lbnVCdXR0b24uY3VycmVudCwgc2hhcmVCbG9ja1Zpc2libGVFeHApO1xuXHRcdFx0dGhpcy5fYmluZFVJVmlzaWJpbGl0eSh0aGlzLmNtZEV4ZWN1dGlvbi5jdXJyZW50LCBzaGFyZUJsb2NrVmlzaWJsZUV4cCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBNZW51IEl0ZW0gcmVmZXJlbmNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIFNoYXJlIG9wdGlvbi5cblx0ICpgXG5cdCAqIEBwYXJhbSBvcHRpb24gU2hhcmUgb3B0aW9uIGtleVxuXHQgKiBAcmV0dXJucyBSZWZlcmVuY2UgdG8gdGhlIE1lbnUgSXRlbVxuXHQgKi9cblx0X2dldE1lbnVJdGVtUmVmZXJlbmNlKG9wdGlvbj86IFNoYXJlT3B0aW9uS2V5KTogUmVmPE1lbnVJdGVtPiB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHJlZjogUmVmPE1lbnVJdGVtPiB8IHVuZGVmaW5lZDtcblx0XHRzd2l0Y2ggKG9wdGlvbikge1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkQ6XG5cdFx0XHRcdHJlZiA9IHRoaXMuc2hhcmVBc0NhcmRNZW51SXRlbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5DT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0hBVDpcblx0XHRcdFx0cmVmID0gdGhpcy5zaGFyZVZpYUNoYXRNZW51SXRlbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5DT0xMQUJPUkFUSU9OX01TVEVBTVNfVEFCOlxuXHRcdFx0XHRyZWYgPSB0aGlzLnNoYXJlQXNUYWJNZW51SXRlbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TRU5EX0VNQUlMOlxuXHRcdFx0XHRyZWYgPSB0aGlzLnNlbmRFbWFpbE1lbnVJdGVtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLlNIQVJFX0pBTTpcblx0XHRcdFx0cmVmID0gdGhpcy5zaGFyZVZpYUpBTU1lbnVJdGVtO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLlNBVkVfQVNfVElMRTpcblx0XHRcdFx0cmVmID0gdGhpcy5zYXZlQXNUaWxlTWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uTVNfVEVBTVNfR1JPVVA6XG5cdFx0XHRcdHJlZiA9IHRoaXMubXNUZWFtc0dyb3VwTWVudUl0ZW07XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uU0hBUkVfQ09MTEFCT1JBVElPTl9NQU5BR0VSOlxuXHRcdFx0XHRyZWYgPSB0aGlzLnNoYXJlQXNDb2xsYWJvcmF0aW9uTWFuYWdlcjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVmO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgdmlzaWJpbGl0eSBleHByZXNzaW9uIG9mIHNoYXJlIG9wdGlvbiBiYXNlZCBvbiB0aGUgYnVpbGRpbmcgYmxvY2sgY29uZmlndXJhdGlvbi5cblx0ICogQHBhcmFtIG9wdGlvbiBTaGFyZSBvcHRpb24gbmFtZSBvZiB0aGUgdmlzaWJsZSBleHByZXNzaW9uIHRoYXQgbmVlZHMgdG8gYmUgZmV0Y2hlZC5cblx0ICogQHJldHVybnMgQmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24uXG5cdCAqL1xuXHRfZ2V0U2hhcmVPcHRpb25WaXNpYmlsaXR5RXhwcmVzc2lvbihvcHRpb24/OiBTaGFyZU9wdGlvbktleSk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0Y29uc3Qgb3B0aW9uTWVudUl0ZW1SZWYgPSB0aGlzLl9nZXRNZW51SXRlbVJlZmVyZW5jZShvcHRpb24pO1xuXHRcdGlmICghb3B0aW9uTWVudUl0ZW1SZWY/LmN1cnJlbnQpIHtcblx0XHRcdHJldHVybiBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXG5cdFx0bGV0IGV4cDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+O1xuXHRcdHN3aXRjaCAob3B0aW9uKSB7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5DT0xMQUJPUkFUSU9OX01TVEVBTVNfQ0FSRDpcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLkNPTExBQk9SQVRJT05fTVNURUFNU19DSEFUOlxuXHRcdFx0Y2FzZSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX1RBQjpcblx0XHRcdFx0ZXhwID0gdGhpcy5fZ2V0TVNUZWFtc1NoYXJlT3B0aW9uVmlzaWJpbGl0eShvcHRpb24pO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgZW51bVNoYXJlT3B0aW9uLlNIQVJFX0NPTExBQk9SQVRJT05fTUFOQUdFUjpcblx0XHRcdFx0ZXhwID0gdGhpcy5fZ2V0Q29sbGFib3JhdGlvbk9wdGlvbkV4cHJlc3Npb24oKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TRU5EX0VNQUlMOiB7XG5cdFx0XHRcdGNvbnN0IHNob3dTZW5kRW1haWwgPSByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPih0aGlzLnNoYXJlT3B0aW9ucz8uc2hvd1NlbmRFbWFpbCA/PyB0cnVlLCBcImJvb2xlYW5cIik7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsT3B0aW9uID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmcoXG5cdFx0XHRcdFx0dGhpcy5fYmxvY2tJbnRlcm5hbENvbmZpZy5zaG93U2VuZEVtYWlsID8/IHRydWUsXG5cdFx0XHRcdFx0XCJib29sZWFuXCJcblx0XHRcdFx0KSBhcyB1bmtub3duIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPjtcblx0XHRcdFx0aWYgKGlzQ29uc3RhbnQoaW50ZXJuYWxPcHRpb24pICYmIGludGVybmFsT3B0aW9uLnZhbHVlID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdGV4cCA9IGNvbnN0YW50KGZhbHNlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChpc0NvbnN0YW50KGludGVybmFsT3B0aW9uKSAmJiBpbnRlcm5hbE9wdGlvbi52YWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV4cCA9ICh0aGlzLnNoYXJlT3B0aW9ucz8uc2hvd1NlbmRFbWFpbCA/PyB0cnVlKSBhcyB1bmtub3duIGFzIEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZXhwID0gYW5kKHNob3dTZW5kRW1haWwsIGludGVybmFsT3B0aW9uKSBhcyB1bmtub3duIGFzIEVtYmVkZGVkVUk1QmluZGluZ0V4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TSEFSRV9KQU06XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5TQVZFX0FTX1RJTEU6IHtcblx0XHRcdFx0Ly8gTm8gb3ZlcnJpZGVzIGZvciBTaGFyZSB2aWEgSmFtIGFuZCBTYXZlIGFzIHRpbGUgeWV0LlxuXHRcdFx0XHRleHAgPSBjb25zdGFudCh0cnVlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIGVudW1TaGFyZU9wdGlvbi5NU19URUFNU19HUk9VUDoge1xuXHRcdFx0XHRjb25zdCBtc1RlYW1zQ29uZmlnRXhwID0gdGhpcy5fZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbigpO1xuXHRcdFx0XHRjb25zdCBtc1RlYW1zT3B0aW9uc1ZhbHVlID0gT2JqZWN0LmtleXMoZW51bU1TVGVhbXNPcHRpb24pIGFzIFNoYXJlT3B0aW9uS2V5W107XG5cdFx0XHRcdGNvbnN0IGFsbE1TVGVhbXNPcHRpb25zRXhwcyA9IG1zVGVhbXNPcHRpb25zVmFsdWUucmVkdWNlKFxuXHRcdFx0XHRcdChiaW5kaW5nVG9vbGtpdEV4cDogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+W10sIG1zVGVhbXNPcHRpb246IFNoYXJlT3B0aW9uS2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRjb25zdCBtc1RlYW1PcHRpb25FeHAgPSB0aGlzLl9nZXRNU1RlYW1zU2hhcmVPcHRpb25WaXNpYmlsaXR5KG1zVGVhbXNPcHRpb24pO1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsuLi5iaW5kaW5nVG9vbGtpdEV4cCwgbXNUZWFtT3B0aW9uRXhwXTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFtdIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPltdXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGV4cCA9IGFuZChtc1RlYW1zQ29uZmlnRXhwLCBvciguLi5hbGxNU1RlYW1zT3B0aW9uc0V4cHMpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRleHAgPSBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV4cDtcblx0fVxuXG5cdF9nZXRDb2xsYWJvcmF0aW9uT3B0aW9uRXhwcmVzc2lvbigpOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4ge1xuXHRcdGNvbnN0IHNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciA9IHRoaXMuc2hhcmVPcHRpb25zPy5zaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgPz8gZmFsc2U7XG5cdFx0Y29uc3Qgb3B0aW9uRXhwID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyLCBcImJvb2xlYW5cIik7XG5cdFx0Y29uc3QgaW50ZXJuYWxPcHRpb24gPSB0aGlzLl9ibG9ja0ludGVybmFsQ29uZmlnLnNob3dDb2xsYWJvcmF0aW9uTWFuYWdlciA/PyB0cnVlO1xuXHRcdGNvbnN0IGludGVybmFsT3B0aW9uRXhwID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oaW50ZXJuYWxPcHRpb24sIFwiYm9vbGVhblwiKTtcblx0XHRyZXR1cm4gYW5kKG9wdGlvbkV4cCwgaW50ZXJuYWxPcHRpb25FeHApO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBleHByZXNzaW9uIGZvciBzaG93TXNUZWFtc09wdGlvbnMgc2hhcmUgb3B0aW9uIGJhc2VkIG9uIHRoZSBidWlsZGluZyBibG9jayBjb25maWd1cmF0aW9uLlxuXHQgKiBAcmV0dXJucyBCaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbi5cblx0ICovXG5cdF9nZXRTaG93TXNUZWFtc09wdGlvbnNFeHByZXNzaW9uKCk6IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPiB7XG5cdFx0Y29uc3QgaW50ZXJuYWxPcHRpb24gPSB0aGlzLl9ibG9ja0ludGVybmFsQ29uZmlnLnNob3dNc1RlYW1zT3B0aW9ucyA/PyB0cnVlO1xuXHRcdHJldHVybiByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPihpbnRlcm5hbE9wdGlvbiwgXCJib29sZWFuXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiBmb3Igc2hhcmUgYXMgY2FyZCB2aXNpYmlsaXR5LlxuXHQgKiBAcmV0dXJucyBCaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbi5cblx0ICovXG5cdF9nZXRTaGFyZUFzQ2FyZFZpc2liaWxpdHkoKTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0XHRsZXQgZXhwOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj47XG5cdFx0Y29uc3Qgc2hhcmVBc0NhcmRPcHRpb25SZWYgPSB0aGlzLl9nZXRNZW51SXRlbVJlZmVyZW5jZShlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkQpO1xuXHRcdGlmIChzaGFyZUFzQ2FyZE9wdGlvblJlZj8uY3VycmVudCkge1xuXHRcdFx0Y29uc3QgZXhwU2hvd01TVGVhbXNPcHRpb25zID0gdGhpcy5fZ2V0U2hvd01zVGVhbXNPcHRpb25zRXhwcmVzc2lvbigpO1xuXHRcdFx0Y29uc3Qgc2hvd1NoYXJlQXNDYXJkID0gdGhpcy5tc1RlYW1zT3B0aW9ucz8uZW5hYmxlQ2FyZCA/PyB0cnVlO1xuXHRcdFx0Y29uc3Qgb3B0aW9uRXhwID0gcmVzb2x2ZUJpbmRpbmdTdHJpbmc8Ym9vbGVhbj4oc2hvd1NoYXJlQXNDYXJkLCBcImJvb2xlYW5cIik7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE9wdGlvbiA9IHRoaXMuX2Jsb2NrSW50ZXJuYWxDb25maWcuZW5hYmxlQ2FyZCA/PyB0cnVlO1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxPcHRpb25FeHAgPSByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPihpbnRlcm5hbE9wdGlvbiwgXCJib29sZWFuXCIpO1xuXHRcdFx0Y29uc3QgZXhwU2hvd1NoYXJlQXNDYXJkID0gYW5kKG9wdGlvbkV4cCwgaW50ZXJuYWxPcHRpb25FeHApO1xuXHRcdFx0ZXhwID0gYW5kKG5vdChVSS5Jc0VkaXRhYmxlKSwgZXhwU2hvd01TVGVhbXNPcHRpb25zLCBleHBTaG93U2hhcmVBc0NhcmQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHAgPSBjb25zdGFudChmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBleHA7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uIGZvciBzaGFyZSBvcHRpb24ncyB2aXNpYmlsaXR5LlxuXHQgKiBAcGFyYW0gb3B0aW9uIFNoYXJlIG9wdGlvbiBrZXlcblx0ICogQHJldHVybnMgQmluZGluZyB0b29sa2l0IGV4cHJlc3Npb24uXG5cdCAqL1xuXHRfZ2V0TVNUZWFtc1NoYXJlT3B0aW9uVmlzaWJpbGl0eShvcHRpb246IFNoYXJlT3B0aW9uS2V5KTogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+IHtcblx0XHRpZiAob3B0aW9uID09PSBlbnVtU2hhcmVPcHRpb24uQ09MTEFCT1JBVElPTl9NU1RFQU1TX0NBUkQpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRTaGFyZUFzQ2FyZFZpc2liaWxpdHkoKTtcblx0XHR9XG5cdFx0Ly8gTm8gb3ZlcnJpZGVzIGZvciBTaGFyZSBhcyBUYWIgYW5kIENoYXQgeWV0LlxuXG5cdFx0Y29uc3QgbXNUZWFtc09wdGlvblJlZiA9IHRoaXMuX2dldE1lbnVJdGVtUmVmZXJlbmNlKG9wdGlvbik7XG5cdFx0cmV0dXJuIG1zVGVhbXNPcHRpb25SZWY/LmN1cnJlbnQgPyB0aGlzLl9nZXRTaG93TXNUZWFtc09wdGlvbnNFeHByZXNzaW9uKCkgOiBjb25zdGFudChmYWxzZSk7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHZpc2libGl0eSBvZiBpbmRpdmlkdWFsIHNoYXJlIG9wdGlvbidzIE1lbnVJdGVtLlxuXHQgKiBAcGFyYW0gb3B0aW9uIFNoYXJlIG9wdGlvbiBrZXlcblx0ICogQHBhcmFtIGV4cHJlc3Npb24gVmlzaWJpbGl0eSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvblxuXHQgKi9cblx0X3NldFNoYXJlT3B0aW9uVmlzaWJpbGl0eShvcHRpb246IFNoYXJlT3B0aW9uS2V5LCBleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pOiB2b2lkIHtcblx0XHRjb25zdCBtZW51SXRlbVJlZiA9IHRoaXMuX2dldE1lbnVJdGVtUmVmZXJlbmNlKG9wdGlvbik7XG5cdFx0aWYgKG1lbnVJdGVtUmVmPy5jdXJyZW50KSB7XG5cdFx0XHR0aGlzLl9iaW5kVUlWaXNpYmlsaXR5KG1lbnVJdGVtUmVmLmN1cnJlbnQsIGV4cHJlc3Npb24pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBCaW5kIHRoZSBVSSBlbGVtZW50J3MgdmlzaWJpbGl0eSBwcm9wZXJ0eS5cblx0ICogQHBhcmFtIGl0ZW0gVUkgZWxlbWVudFxuXHQgKiBAcGFyYW0gZXhwcmVzc2lvbiBFeHByZXNzaW9uIHRvIGJpbmQuXG5cdCAqL1xuXHRfYmluZFVJVmlzaWJpbGl0eShpdGVtOiBNZW51QnV0dG9uIHwgTWVudUl0ZW0gfCBDb21tYW5kRXhlY3V0aW9uLCBleHByZXNzaW9uOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pOiB2b2lkIHtcblx0XHQvLyBOT1RFOiBXZSBuZWVkIGNvbnZlcnQgdGhlIGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uIHRvIHRoZSBmb3JtYXQgdGhhdCBjYW4gYmUgY29uc3VtZWQgYnkgdGhlIFVJIGVsZW1lbnQuXG5cdFx0Ly8gQXQgcnVudGltZSwgd2UgY2FuJ3QgdXNlIGJpbmRpbmcgdG9vbGtpdCBleHByZXNzaW9uIG9yIGNvbXBpbGVkIGV4cHJlc3Npb24gZGlyZWN0bHkgdG8gYmluZCB0aGUgdmlzaWJpbGl0eSBvciBzZXQgdGhlIHZpc2libGUgcHJvcGVydHkgb3IgdGhlIFVJIGVsZW1lbnQuXG5cdFx0Ly8gV2Ugd291bGQgbmVlZCB0byBjb252ZXJ0IHRoZSBiaW5kaW5nIHRvb2xraXQgZXhwcmVzc2lvbiAtPiBVSTUgQmluZGluZ0luZm8gdG8gYmluZCB0aGUgVUkgZWxlbWVudC5cblx0XHRjb25zdCBjb21waWxlZEV4cCA9IGNvbXBpbGVFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xuXG5cdFx0aWYgKGNvbXBpbGVkRXhwICYmIGNvbXBpbGVkRXhwLnN0YXJ0c1dpdGgoXCJ7XCIpICYmIGNvbXBpbGVkRXhwPy5lbmRzV2l0aChcIn1cIikpIHtcblx0XHRcdC8vIFByb2JhYmxlIGJpbmRpbmdcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHBhcnNlZEV4cCA9IEJpbmRpbmdJbmZvLnBhcnNlKGNvbXBpbGVkRXhwKTtcblx0XHRcdFx0aXRlbS5iaW5kUHJvcGVydHkoXCJ2aXNpYmxlXCIsIHBhcnNlZEV4cCk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVyciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoY29tcGlsZWRFeHAgPT09IFwiZmFsc2VcIikge1xuXHRcdFx0Ly8gU3RhdGljYWxseSBmYWxzZVxuXHRcdFx0aXRlbS51bmJpbmRQcm9wZXJ0eShcInZpc2libGVcIiwgdHJ1ZSk7XG5cdFx0XHRpdGVtLnNldFZpc2libGUoZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRTaGFyZUJsb2NrQ29uZmlnKHZpZXc6IFZpZXcpOiBDb25maWdPcHRpb25zIHtcblx0XHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YTtcblx0XHRjb25zdCB2aWV3U2hhcmVDb25maWdzID0gdmlld0RhdGE/LnNoYXJlO1xuXHRcdGNvbnN0IGNvbnRyb2xsZXIgPSB2aWV3LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcjtcblx0XHRjb25zdCBmZUFwcFNoYXJlQ29uZmlncyA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5zaGFyZTtcblxuXHRcdGNvbnN0IHNob3dTZW5kRW1haWwgPSB0aGlzLl9nZXRPcHRpb25CbG9ja0NvbmZpZyhmZUFwcFNoYXJlQ29uZmlncz8uc2hvd1NlbmRFbWFpbCwgdmlld1NoYXJlQ29uZmlncz8uc2hvd1NlbmRFbWFpbCk7XG5cdFx0Y29uc3Qgc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyID0gdGhpcy5fZ2V0T3B0aW9uQmxvY2tDb25maWcoXG5cdFx0XHRmZUFwcFNoYXJlQ29uZmlncz8uc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyLFxuXHRcdFx0dmlld1NoYXJlQ29uZmlncz8uc2hvd0NvbGxhYm9yYXRpb25NYW5hZ2VyXG5cdFx0KTtcblxuXHRcdGNvbnN0IHNob3dNc1RlYW1zT3B0aW9ucyA9IHRoaXMuX2dldE9wdGlvbkJsb2NrQ29uZmlnKFxuXHRcdFx0ZmVBcHBTaGFyZUNvbmZpZ3M/LnRlYW1zPy5zaG93TXNUZWFtc09wdGlvbnMsXG5cdFx0XHR2aWV3U2hhcmVDb25maWdzPy50ZWFtcz8uc2hvd01zVGVhbXNPcHRpb25zXG5cdFx0KTtcblx0XHRjb25zdCBlbmFibGVDYXJkID0gdGhpcy5fZ2V0T3B0aW9uQmxvY2tDb25maWcoZmVBcHBTaGFyZUNvbmZpZ3M/LnRlYW1zPy5hc0NhcmQsIHZpZXdTaGFyZUNvbmZpZ3M/LnRlYW1zPy5hc0NhcmQpO1xuXG5cdFx0cmV0dXJuIHsgc2hvd1NlbmRFbWFpbCwgc2hvd01zVGVhbXNPcHRpb25zLCBlbmFibGVDYXJkLCBzaG93Q29sbGFib3JhdGlvbk1hbmFnZXIgfTtcblx0fVxuXG5cdF9nZXRPcHRpb25CbG9ja0NvbmZpZyhmZUFwcFNldHRpbmc/OiBib29sZWFuIHwgc3RyaW5nLCB2aWV3TGV2ZWxTZXR0aW5nPzogYm9vbGVhbiB8IHN0cmluZyk6IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIHtcblx0XHRjb25zdCBmZUFwcEV4cCA9IHR5cGVvZiBmZUFwcFNldHRpbmcgPT09IFwic3RyaW5nXCIgPyByZXNvbHZlQmluZGluZ1N0cmluZzxib29sZWFuPihmZUFwcFNldHRpbmcpIDogY29uc3RhbnQoZmVBcHBTZXR0aW5nID8/IHRydWUpO1xuXHRcdGNvbnN0IHZpZXdMZXZlbEV4cCA9XG5cdFx0XHR0eXBlb2Ygdmlld0xldmVsU2V0dGluZyA9PT0gXCJzdHJpbmdcIiA/IHJlc29sdmVCaW5kaW5nU3RyaW5nPGJvb2xlYW4+KHZpZXdMZXZlbFNldHRpbmcpIDogY29uc3RhbnQodmlld0xldmVsU2V0dGluZyA/PyB0cnVlKTtcblx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oYW5kKGZlQXBwRXhwLCB2aWV3TGV2ZWxFeHApKTtcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiBTaGFyZUFQSSB7XG5cdFx0Ly8gQ3RybCtTaGlmdCtTIGlzIG5lZWRlZCBmb3IgdGhlIHRpbWUgYmVpbmcgYnV0IHRoaXMgbmVlZHMgdG8gYmUgcmVtb3ZlZCBhZnRlciBiYWNrbG9nIGZyb20gbWVudSBidXR0b25cblx0XHRjb25zdCBtZW51QnV0dG9uID0gKFxuXHRcdFx0PFNoYXJlQVBJIGlkPXt0aGlzLnNoYXJlQVBJSWR9PlxuXHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTWVudUJ1dHRvblxuXHRcdFx0XHRcdHRleHQ9e1wie3NhcC5mZS5pMThuPk1fQ09NTU9OX1NBUEZFX0FDVElPTl9TSEFSRX1cIn1cblx0XHRcdFx0XHRyZWY9e3RoaXMubWVudUJ1dHRvbn1cblx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vYWN0aW9uXCJ9XG5cdFx0XHRcdFx0dG9vbHRpcD17XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fU0FQRkVfQUNUSU9OX1NIQVJFfSAoQ3RybCtTaGlmdCtTKVwifVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0PE1lbnUgcmVmPXt0aGlzLm1lbnV9PjwvTWVudT5cblx0XHRcdFx0PC9PdmVyZmxvd1Rvb2xiYXJNZW51QnV0dG9uPlxuXHRcdFx0PC9TaGFyZUFQST5cblx0XHQpIGFzIFNoYXJlQVBJO1xuXHRcdHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKVxuXHRcdFx0LmdldFZpZXcoKVxuXHRcdFx0LmFkZERlcGVuZGVudChcblx0XHRcdFx0PENvbW1hbmRFeGVjdXRpb25cblx0XHRcdFx0XHRyZWY9e3RoaXMuY21kRXhlY3V0aW9ufVxuXHRcdFx0XHRcdGNvbW1hbmQ9XCJTaGFyZVwiXG5cdFx0XHRcdFx0ZXhlY3V0ZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5tZW51QnV0dG9uLmN1cnJlbnQ/LmdldE1lbnUoKS5vcGVuQnkodGhpcy5tZW51QnV0dG9uLmN1cnJlbnQsIHRydWUpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdC8vIFRoZSBpbml0aWFsaXphdGlvbiBpcyBhc3luY2hyb25vdXMsIHNvIHdlIGp1c3QgdHJpZ2dlciBpdCBhbmQgaG9wZSBmb3IgdGhlIGJlc3QgOkRcblx0XHR0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0aGlzLl9pbml0aWFsaXplTWVudUl0ZW1zKHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKS5nZXRWaWV3KCksIGFwcENvbXBvbmVudCkuY2F0Y2goKGVycm9yKSA9PiB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuc2V0TGF5b3V0RGF0YShcblx0XHRcdG5ldyBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhKHtcblx0XHRcdFx0cHJpb3JpdHk6IHRoaXMucHJpb3JpdHlcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRyZXR1cm4gbWVudUJ1dHRvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHByb3BlcnRpZXMgZm9yIHRoZSBpbnRlcmZhY2UgSU92ZXJmbG93VG9vbGJhckNvbnRlbnQuXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgSU92ZXJmbG93VG9vbGJhckNvbnRlbnRcblx0ICovXG5cdGdldE92ZXJmbG93VG9vbGJhckNvbmZpZygpOiBvYmplY3Qge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjYW5PdmVyZmxvdzogdHJ1ZSxcblx0XHRc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
|