@sapui5/sap.fe.controls 1.148.1 → 1.149.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/controls/.library +1 -1
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +60 -44
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +27 -4
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +42 -14
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +26 -0
- package/src/sap/fe/controls/easyFilter/Token.js +4 -4
- package/src/sap/fe/controls/easyFilter/innerControls/MenuWithSingleSelectFactory.js +2 -2
- package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.js +7 -3
- package/src/sap/fe/controls/easyFilter/innerControls/ValueHelpPreviewFactory.ts +5 -0
- package/src/sap/fe/controls/library.js +1 -1
- package/src/sap/fe/controls/messagebundle.properties +2 -0
- package/src/sap/fe/controls/messagebundle_ar.properties +9 -3
- package/src/sap/fe/controls/messagebundle_bg.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ca.properties +9 -3
- package/src/sap/fe/controls/messagebundle_cnr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_cs.properties +9 -3
- package/src/sap/fe/controls/messagebundle_cy.properties +9 -3
- package/src/sap/fe/controls/messagebundle_da.properties +9 -3
- package/src/sap/fe/controls/messagebundle_de.properties +9 -3
- package/src/sap/fe/controls/messagebundle_el.properties +9 -3
- package/src/sap/fe/controls/messagebundle_en.properties +9 -3
- package/src/sap/fe/controls/messagebundle_en_GB.properties +9 -3
- package/src/sap/fe/controls/messagebundle_en_US_saprigi.properties +6 -3
- package/src/sap/fe/controls/messagebundle_es.properties +9 -3
- package/src/sap/fe/controls/messagebundle_es_MX.properties +9 -3
- package/src/sap/fe/controls/messagebundle_et.properties +9 -3
- package/src/sap/fe/controls/messagebundle_fi.properties +9 -3
- package/src/sap/fe/controls/messagebundle_fr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_fr_CA.properties +9 -3
- package/src/sap/fe/controls/messagebundle_hi.properties +9 -3
- package/src/sap/fe/controls/messagebundle_hr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_hu.properties +7 -1
- package/src/sap/fe/controls/messagebundle_id.properties +9 -3
- package/src/sap/fe/controls/messagebundle_it.properties +9 -3
- package/src/sap/fe/controls/messagebundle_iw.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ja.properties +9 -3
- package/src/sap/fe/controls/messagebundle_kk.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ko.properties +9 -3
- package/src/sap/fe/controls/messagebundle_lt.properties +9 -3
- package/src/sap/fe/controls/messagebundle_lv.properties +9 -3
- package/src/sap/fe/controls/messagebundle_mk.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ms.properties +9 -3
- package/src/sap/fe/controls/messagebundle_nl.properties +9 -3
- package/src/sap/fe/controls/messagebundle_no.properties +7 -1
- package/src/sap/fe/controls/messagebundle_pl.properties +7 -1
- package/src/sap/fe/controls/messagebundle_pt.properties +9 -3
- package/src/sap/fe/controls/messagebundle_pt_PT.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ro.properties +9 -3
- package/src/sap/fe/controls/messagebundle_ru.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sh.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sk.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sl.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_sv.properties +9 -3
- package/src/sap/fe/controls/messagebundle_th.properties +10 -4
- package/src/sap/fe/controls/messagebundle_tr.properties +9 -3
- package/src/sap/fe/controls/messagebundle_uk.properties +9 -3
- package/src/sap/fe/controls/messagebundle_vi.properties +9 -3
- package/src/sap/fe/controls/messagebundle_zh_CN.properties +9 -3
- package/src/sap/fe/controls/messagebundle_zh_TW.properties +9 -3
- package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.js +2 -5
- package/src/sap/fe/controls/shortcuts/popup/ShortcutTool.js +5 -8
|
@@ -285,6 +285,8 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
285
285
|
|
|
286
286
|
private shouldMessageStripRemove = true;
|
|
287
287
|
|
|
288
|
+
private ariaLabelApplied = false;
|
|
289
|
+
|
|
288
290
|
private supportsSorting = true;
|
|
289
291
|
|
|
290
292
|
private supportsGrouping = true;
|
|
@@ -380,6 +382,15 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
380
382
|
return tokens;
|
|
381
383
|
}
|
|
382
384
|
|
|
385
|
+
private buildInputAriaLabel(): string {
|
|
386
|
+
const mandatoryFields = this.filterBarMetadata?.filter((f) => f.required) ?? [];
|
|
387
|
+
if (mandatoryFields.length === 0) {
|
|
388
|
+
return "";
|
|
389
|
+
}
|
|
390
|
+
const fieldLabels = mandatoryFields.map((f) => f.label).join(", ");
|
|
391
|
+
return this.resourceBundle.getText("M_EASY_FILTER_INPUT_REQUIRED_FIELDS", [fieldLabels]);
|
|
392
|
+
}
|
|
393
|
+
|
|
383
394
|
onEnterPressed(e: UI5Event<{ query: string }, EasyFilterInput>): void {
|
|
384
395
|
this.onGoPress(e.getParameter("query"));
|
|
385
396
|
}
|
|
@@ -862,10 +873,12 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
862
873
|
this.shouldTokenChangeEventFired = true;
|
|
863
874
|
this.isResettingToDefaultTokens = false;
|
|
864
875
|
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
876
|
+
if (this.tokenizer?.current) {
|
|
877
|
+
// onsapfocusleave method in sap.m.Tokenizer is automatically converting the rendermode of tokenizer to "Narrow" from "loose"
|
|
878
|
+
// In this process there are multiple popover issues happening
|
|
879
|
+
// So as a temporary fix overriding the function
|
|
880
|
+
(this.tokenizer.current as FocusHandlingControl).onsapfocusleave = (): void => {};
|
|
881
|
+
}
|
|
869
882
|
}
|
|
870
883
|
|
|
871
884
|
private onThumbUpPressed(): void {
|
|
@@ -1266,6 +1279,16 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
1266
1279
|
| undefined;
|
|
1267
1280
|
}
|
|
1268
1281
|
|
|
1282
|
+
onAfterRendering(): void {
|
|
1283
|
+
if (!this.ariaLabelApplied && this.filterBarMetadata) {
|
|
1284
|
+
const ariaText = this.buildInputAriaLabel();
|
|
1285
|
+
if (ariaText) {
|
|
1286
|
+
this.easyFilterInput.current?.setAriaLabel(ariaText);
|
|
1287
|
+
}
|
|
1288
|
+
this.ariaLabelApplied = true;
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1269
1292
|
static render(rm: RenderManager, control: EasyFilterBarContainer): void {
|
|
1270
1293
|
return jsx.renderUsingRenderManager(rm, control, () => {
|
|
1271
1294
|
return <span ref={control}>{control.getAggregation("content")}</span>;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2026 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/ShellHistoryProvider", "sap/m/Button", "sap/m/CustomListItem", "sap/m/FlexBox", "sap/m/HBox", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/Input", "sap/m/List", "sap/m/Popover", "sap/m/Text", "sap/m/Title", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/InvisibleMessage", "sap/ui/core/Lib", "sap/ui/core/library", "./PXFeedback", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, EventDelegateHook, jsx, ShellHistoryProvider, Button, CustomListItem, FlexBox, HBox, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, Input, List, Popover, Text, Title, library, Control, CustomData, InvisibleMessage, Lib, coreLibrary, PXFeedback, _jsx, _jsxs) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/base/EventDelegateHook", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/ShellHistoryProvider", "sap/m/Button", "sap/m/CustomListItem", "sap/m/FlexBox", "sap/m/HBox", "sap/m/IllustratedMessage", "sap/m/IllustratedMessageSize", "sap/m/IllustratedMessageType", "sap/m/Input", "sap/m/List", "sap/m/Popover", "sap/m/Text", "sap/m/Title", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/InvisibleMessage", "sap/ui/core/InvisibleText", "sap/ui/core/Lib", "sap/ui/core/library", "./PXFeedback", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (Log, BindingToolkit, ClassSupport, EventDelegateHook, jsx, ShellHistoryProvider, Button, CustomListItem, FlexBox, HBox, IllustratedMessage, IllustratedMessageSize, IllustratedMessageType, Input, List, Popover, Text, Title, library, Control, CustomData, InvisibleMessage, InvisibleText, Lib, coreLibrary, PXFeedback, _jsx, _jsxs) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7;
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8;
|
|
9
9
|
var _exports = {};
|
|
10
10
|
var triggerPXIntegration = PXFeedback.triggerPXIntegration;
|
|
11
11
|
var ValueState = coreLibrary.ValueState;
|
|
@@ -41,18 +41,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
41
41
|
type: "string"
|
|
42
42
|
}), _dec4 = property({
|
|
43
43
|
type: "array"
|
|
44
|
-
}), _dec5 =
|
|
44
|
+
}), _dec5 = property({
|
|
45
|
+
type: "string"
|
|
46
|
+
}), _dec6 = event(), _dec7 = event(), _dec8 = event(), _dec9 = defineState(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
|
|
45
47
|
function EasyFilterInput(properties, others) {
|
|
46
48
|
var _this;
|
|
47
49
|
_this = _Control.call(this, properties, others) || this;
|
|
48
50
|
_initializerDefineProperty(_this, "$searchInput", _descriptor, _this);
|
|
49
51
|
_initializerDefineProperty(_this, "appId", _descriptor2, _this);
|
|
50
52
|
_initializerDefineProperty(_this, "recommendedValues", _descriptor3, _this);
|
|
51
|
-
_initializerDefineProperty(_this, "
|
|
52
|
-
_initializerDefineProperty(_this, "
|
|
53
|
-
_initializerDefineProperty(_this, "
|
|
53
|
+
_initializerDefineProperty(_this, "ariaLabel", _descriptor4, _this);
|
|
54
|
+
_initializerDefineProperty(_this, "queryChanged", _descriptor5, _this);
|
|
55
|
+
_initializerDefineProperty(_this, "enterPressed", _descriptor6, _this);
|
|
56
|
+
_initializerDefineProperty(_this, "liveChange", _descriptor7, _this);
|
|
54
57
|
_this.favoriteButtonClicked = false;
|
|
55
|
-
_initializerDefineProperty(_this, "state",
|
|
58
|
+
_initializerDefineProperty(_this, "state", _descriptor8, _this);
|
|
56
59
|
_this.initialize();
|
|
57
60
|
return _this;
|
|
58
61
|
}
|
|
@@ -76,6 +79,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
76
79
|
_proto.getPlaceholder = function getPlaceholder() {
|
|
77
80
|
return this.$searchInput.getPlaceholder();
|
|
78
81
|
};
|
|
82
|
+
_proto.setAriaLabel = function setAriaLabel(value) {
|
|
83
|
+
this.setProperty("ariaLabel", value, true);
|
|
84
|
+
if (this.$ariaDescriptionText) {
|
|
85
|
+
this.$ariaDescriptionText.setText(value);
|
|
86
|
+
} else {
|
|
87
|
+
this.$ariaDescriptionText = new InvisibleText({
|
|
88
|
+
text: value
|
|
89
|
+
});
|
|
90
|
+
this.$ariaDescriptionText.toStatic();
|
|
91
|
+
this.$searchInput?.addAriaDescribedBy(this.$ariaDescriptionText.getId());
|
|
92
|
+
}
|
|
93
|
+
return this;
|
|
94
|
+
};
|
|
79
95
|
_proto.initialize = function initialize() {
|
|
80
96
|
this.state.recommendedQueries = this.recommendedValues ?? [];
|
|
81
97
|
this.resourceBundle = Lib.getResourceBundleFor("sap.fe.controls");
|
|
@@ -92,6 +108,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
92
108
|
this.$searchInput.closeValueStateMessage();
|
|
93
109
|
};
|
|
94
110
|
_proto.createInput = function createInput() {
|
|
111
|
+
// $ariaLabelText provides the field label via aria-labelledby (reads the placeholder text)
|
|
112
|
+
this.$ariaLabelText = new InvisibleText({
|
|
113
|
+
text: this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER")
|
|
114
|
+
});
|
|
95
115
|
this.$searchInput = _jsx(Input, {
|
|
96
116
|
width: "100%",
|
|
97
117
|
showClearIcon: not(bindState(this.state, "isQuerySuccessful")),
|
|
@@ -123,6 +143,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
123
143
|
},
|
|
124
144
|
placeholder: this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER")
|
|
125
145
|
});
|
|
146
|
+
|
|
147
|
+
// aria-labelledby for field label (placeholder text), aria-describedby for mandatory hint (set later via setAriaLabel)
|
|
148
|
+
this.$ariaLabelText.toStatic();
|
|
149
|
+
this.$searchInput.addAriaLabelledBy(this.$ariaLabelText.getId());
|
|
126
150
|
const favoritePopover = this.createFavoritePopover();
|
|
127
151
|
this.$favoritePopover = favoritePopover;
|
|
128
152
|
this.$searchInput.addDependent(favoritePopover);
|
|
@@ -226,8 +250,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
226
250
|
this.state.recentQueries = recentQueries;
|
|
227
251
|
}
|
|
228
252
|
};
|
|
229
|
-
_proto.onStateChange = function onStateChange() {
|
|
230
|
-
let changedProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
253
|
+
_proto.onStateChange = function onStateChange(changedProps = []) {
|
|
231
254
|
if (changedProps.includes("favoriteQueries") || changedProps.includes("recentQueries")) {
|
|
232
255
|
this.shellHistoryProvider?.setFavoriteQueries(this.state.favoriteQueries);
|
|
233
256
|
this.shellHistoryProvider?.setRecentQueries(this.state.recentQueries.map(query => query));
|
|
@@ -522,22 +545,27 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
522
545
|
enumerable: true,
|
|
523
546
|
writable: true,
|
|
524
547
|
initializer: null
|
|
525
|
-
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "
|
|
548
|
+
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "ariaLabel", [_dec5], {
|
|
549
|
+
configurable: true,
|
|
550
|
+
enumerable: true,
|
|
551
|
+
writable: true,
|
|
552
|
+
initializer: null
|
|
553
|
+
}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "queryChanged", [_dec6], {
|
|
526
554
|
configurable: true,
|
|
527
555
|
enumerable: true,
|
|
528
556
|
writable: true,
|
|
529
557
|
initializer: null
|
|
530
|
-
}),
|
|
558
|
+
}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "enterPressed", [_dec7], {
|
|
531
559
|
configurable: true,
|
|
532
560
|
enumerable: true,
|
|
533
561
|
writable: true,
|
|
534
562
|
initializer: null
|
|
535
|
-
}),
|
|
563
|
+
}), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "liveChange", [_dec8], {
|
|
536
564
|
configurable: true,
|
|
537
565
|
enumerable: true,
|
|
538
566
|
writable: true,
|
|
539
567
|
initializer: null
|
|
540
|
-
}),
|
|
568
|
+
}), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "state", [_dec9], {
|
|
541
569
|
configurable: true,
|
|
542
570
|
enumerable: true,
|
|
543
571
|
writable: true,
|
|
@@ -559,4 +587,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
559
587
|
_exports = EasyFilterInput;
|
|
560
588
|
return _exports;
|
|
561
589
|
}, false);
|
|
562
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVySW5wdXQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiX2RlYzUiLCJldmVudCIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImRlZmluZVN0YXRlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJmYXZvcml0ZUJ1dHRvbkNsaWNrZWQiLCJfZGVzY3JpcHRvcjciLCJpbml0aWFsaXplIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFZhbHVlIiwiJHNlYXJjaElucHV0IiwiaXNIaXN0b3J5RW5hYmxlZCIsInN0YXRlIiwidmFsdWVPZiIsInNldFZhbHVlIiwidmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwicmVjb21tZW5kZWRRdWVyaWVzIiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwicG9wb3ZlckludmlzaWJsZU1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJjcmVhdGVJbnB1dCIsInNldEFzSW52YWxpZCIsIm1lc3NhZ2UiLCJzZXRWYWx1ZVN0YXRlIiwiVmFsdWVTdGF0ZSIsIldhcm5pbmciLCJzZXRWYWx1ZVN0YXRlVGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsInNldEFzVmFsaWQiLCJOb25lIiwiY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSIsIl9qc3giLCJJbnB1dCIsIndpZHRoIiwic2hvd0NsZWFySWNvbiIsIm5vdCIsImJpbmRTdGF0ZSIsInNob3dWYWx1ZUhlbHAiLCJ2YWx1ZUhlbHBJY29uU3JjIiwidmFsdWVIZWxwUmVxdWVzdCIsIm9uRmF2b3JpdGVJY29uUHJlc3MiLCJjaGFuZ2UiLCJlIiwiZmlyZUV2ZW50IiwicXVlcnkiLCJnZXRQYXJhbWV0ZXIiLCJsaXZlQ2hhbmdlIiwicXVlcnlDaGFuZ2VkIiwiaXNRdWVyeVN1Y2Nlc3NmdWwiLCJjdXJyZW50RXhlY3V0ZWRRdWVyeSIsImdldFRleHQiLCJnZXRTb3VyY2UiLCIkZmF2b3JpdGVQb3BvdmVyIiwiaXNPcGVuIiwib3BlblN1Z2dlc3Rpb25Qb3BvdmVyIiwiZ2V0VmFsdWVTdGF0ZSIsInBsYWNlaG9sZGVyIiwiZmF2b3JpdGVQb3BvdmVyIiwiY3JlYXRlRmF2b3JpdGVQb3BvdmVyIiwiYWRkRGVwZW5kZW50IiwiYWRkRXZlbnREZWxlZ2F0ZSIsIm9ua2V5dXAiLCJrZXkiLCJvbkVudGVyUHJlc3NlZCIsImNsb3NlIiwib25rZXlkb3duIiwibGVuZ3RoIiwicHJldmVudERlZmF1bHQiLCJwb3BvdmVyQ29uYWluZXIiLCJnZXRDb250ZW50IiwiY29udGFpbmVySXRlbXMiLCJnZXRJdGVtcyIsImZpbmQiLCJpdGVtIiwiaXNGb2N1c2FibGUiLCJmb2N1cyIsIm9udGFwIiwib25mb2N1c2luIiwidGFyZ2V0VGV4dCIsInRhcmdldCIsIm91dGVyVGV4dCIsInRhcmdldElkIiwiaWQiLCJpbmNsdWRlcyIsImZhdm9yaXRlUXVlcmllcyIsImZpbHRlciIsImRhdGEiLCJ0b0xvd2VyQ2FzZSIsInJlY2VudFF1ZXJpZXMiLCJvbkFmdGVyUmVuZGVyaW5nIiwiYW5ub3VuY2UiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsInNoZWxsSGlzdG9yeVByb3ZpZGVyIiwiaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyIiwiZ2V0RmF2b3JpdGVRdWVyaWVzIiwiZ2V0UmVjZW50UXVlcmllcyIsIm9wZW5CeSIsInJlcXVlc3RGYXZvcml0ZSIsIm1hZ2ljUXVlcnkiLCJhZGRSZWNlbnRRdWVyeSIsInF1ZXJ5U3RyaW5nIiwicmVwbGFjZSIsInJlY2VudFF1ZXJ5SW5kZXgiLCJmaW5kSW5kZXgiLCJjb25jYXQiLCJzbGljZSIsInVuc2hpZnQiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwic2V0RmF2b3JpdGVRdWVyaWVzIiwic2V0UmVjZW50UXVlcmllcyIsIm1hcCIsInJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXMiLCJyZWNlbnRRdWVyeSIsInRleHQiLCJpc0Zhdm9yaXRlIiwiZmF2b3JpdGVRdWVyeSIsInVwZGF0ZUZhdm9yaXRlSWNvbiIsImlzRmF2b3JpdGVkIiwiaXNDdXJyZW50UXVlcnlGYXZvcml0ZWQiLCJmYXZvcml0ZUljb25OYW1lIiwiZmF2b3JpdGVJY29uRW5hYmxlZCIsInRvZ2dsZVN0eWxlQ2xhc3MiLCJ2YWx1ZUhlbHBCdG4iLCJnZXREb21SZWYiLCJxdWVyeVNlbGVjdG9yIiwidGl0bGUiLCJTaGVsbEhpc3RvcnlQcm92aWRlciIsImFwcElkIiwiZXJyb3IiLCJMb2ciLCJQb3BvdmVyIiwiZ2V0SWQiLCJzaG93SGVhZGVyIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInBsYWNlbWVudCIsIlBsYWNlbWVudFR5cGUiLCJCb3R0b20iLCJzaG93QXJyb3ciLCJpbml0aWFsRm9jdXMiLCJjbGFzcyIsInZpc2libGUiLCJlcXVhbCIsImNoaWxkcmVuIiwiY29udGVudCIsIkZsZXhCb3giLCJkaXJlY3Rpb24iLCJGbGV4RGlyZWN0aW9uIiwiQ29sdW1uIiwicmVuZGVyVHlwZSIsIml0ZW1zIiwiVGl0bGUiLCJ0aXRsZVN0eWxlIiwiVGl0bGVMZXZlbCIsIkg2IiwiSEJveCIsIndyYXAiLCJGbGV4V3JhcCIsIldyYXAiLCJjdHgiLCJCdXR0b24iLCJnZXRPYmplY3QiLCJwcmVzcyIsImJpbmQiLCJMaXN0Iiwibm9EYXRhIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwiaWxsdXN0cmF0aW9uU2l6ZSIsIklsbHVzdHJhdGVkTWVzc2FnZVNpemUiLCJFeHRyYVNtYWxsIiwiaWxsdXN0cmF0aW9uVHlwZSIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJOb0VudHJpZXMiLCJkZXNjcmlwdGlvbiIsIkN1c3RvbUxpc3RJdGVtIiwiYXJpYUxhYmVsbGVkQnkiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsIl9qc3hzIiwiUm93IiwiYWxpZ25JdGVtcyIsIkZsZXhBbGlnbkl0ZW1zIiwiQ2VudGVyIiwianVzdGlmeUNvbnRlbnQiLCJGbGV4SnVzdGlmeUNvbnRlbnQiLCJTcGFjZUJldHdlZW4iLCJUZXh0IiwidG9vbHRpcCIsIndyYXBwaW5nIiwiaWNvbiIsIkJ1dHRvblR5cGUiLCJUcmFuc3BhcmVudCIsImluZGV4IiwiaW5kZXhPZiIsImRlcGVuZGVudHMiLCJFdmVudERlbGVnYXRlSG9vayIsInRhcCIsInRyaWdnZXJQWEludGVncmF0aW9uIiwibW9kZSIsIkxpc3RNb2RlIiwiRGVsZXRlIiwiZGVsZXRlIiwiZW5hYmxlZCIsImxlc3NUaGFuIiwicmVtb3ZlRnJvbUZhdm9yaXRlcyIsImFkZFRvRmF2b3JpdGVzIiwibmV3RmF2b3JpdGUiLCJwb3AiLCJjdXJyZW50UXVlcnkiLCJ0cmltIiwic29tZSIsImZhdiIsInNldFF1ZXJ5U3VjY2VzcyIsInNldFF1ZXJ5RmFpbHVyZSIsImNsZWFyUXVlcnlTdGF0dXMiLCJyZW5kZXIiLCJybSIsImNvbnRyb2wiLCJqc3giLCJyZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIiLCJyZWYiLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFYXN5RmlsdGVySW5wdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIHsgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBiaW5kU3RhdGUsIGVxdWFsLCBsZW5ndGgsIGxlc3NUaGFuLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVTdGF0ZSwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YsIHR5cGUgU3RhdGVPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFdmVudERlbGVnYXRlSG9vayBmcm9tIFwic2FwL2ZlL2Jhc2UvRXZlbnREZWxlZ2F0ZUhvb2tcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFNoZWxsSGlzdG9yeVByb3ZpZGVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9TaGVsbEhpc3RvcnlQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCdXR0b24kUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBMaXN0IGZyb20gXCJzYXAvbS9MaXN0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RCYXNlJERlbGV0ZUV2ZW50IH0gZnJvbSBcInNhcC9tL0xpc3RCYXNlXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgU3RhbmRhcmRMaXN0SXRlbSBmcm9tIFwic2FwL20vU3RhbmRhcmRMaXN0SXRlbVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhBbGlnbkl0ZW1zLCBGbGV4RGlyZWN0aW9uLCBGbGV4SnVzdGlmeUNvbnRlbnQsIEZsZXhXcmFwLCBMaXN0TW9kZSwgUGxhY2VtZW50VHlwZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBUaXRsZUxldmVsLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IHRyaWdnZXJQWEludGVncmF0aW9uIH0gZnJvbSBcIi4vUFhGZWVkYmFja1wiO1xuXG50eXBlIFJlY2VudFR5cGUgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0aXNGYXZvcml0ZTogYm9vbGVhbjtcbn07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVySW5wdXRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJJbnB1dCBleHRlbmRzIENvbnRyb2wge1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLklucHV0XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdCRzZWFyY2hJbnB1dCE6IElucHV0O1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdHJlY29tbWVuZGVkVmFsdWVzPzogc3RyaW5nW107XG5cblx0QGV2ZW50KClcblx0cXVlcnlDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZXZlbnQoKVxuXHRlbnRlclByZXNzZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXI7XG5cblx0cHJpdmF0ZSByZXNvdXJjZUJ1bmRsZSE6IFJlc291cmNlQnVuZGxlO1xuXG5cdHNoZWxsSGlzdG9yeVByb3ZpZGVyOiBTaGVsbEhpc3RvcnlQcm92aWRlciB8IHVuZGVmaW5lZDtcblxuXHRwb3BvdmVySW52aXNpYmxlTWVzc2FnZTogSW52aXNpYmxlTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuXHQkZmF2b3JpdGVQb3BvdmVyOiBQb3BvdmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgZmF2b3JpdGVCdXR0b25DbGlja2VkID0gZmFsc2U7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRxdWVyeUNoYW5nZWQ6IGJvb2xlYW47XG5cdFx0cmVjZW50UXVlcmllczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogcmVhZG9ubHkgUmVjZW50VHlwZVtdO1xuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBzdHJpbmdbXTtcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IHN0cmluZ1tdO1xuXHRcdGN1cnJlbnRFeGVjdXRlZFF1ZXJ5OiBzdHJpbmc7XG5cdFx0aXNRdWVyeVN1Y2Nlc3NmdWw6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVJY29uTmFtZTogc3RyaW5nO1xuXHRcdGZhdm9yaXRlSWNvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdH0+ID0ge1xuXHRcdHF1ZXJ5Q2hhbmdlZDogZmFsc2UsXG5cdFx0aXNIaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0cmVjZW50UXVlcmllczogW10sXG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogW10sXG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBbXSBhcyBzdHJpbmdbXSxcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IFtdIGFzIHN0cmluZ1tdLFxuXHRcdGN1cnJlbnRFeGVjdXRlZFF1ZXJ5OiBcIlwiLFxuXHRcdGlzUXVlcnlTdWNjZXNzZnVsOiBmYWxzZSxcblx0XHRmYXZvcml0ZUljb25OYW1lOiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCIsXG5cdFx0ZmF2b3JpdGVJY29uRW5hYmxlZDogdHJ1ZVxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IHN0cmluZyB8ICgkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEVhc3lGaWx0ZXJJbnB1dD4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VmFsdWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0hpc3RvcnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQudmFsdWVPZigpO1xuXHR9XG5cblx0c2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRQbGFjZWhvbGRlcih2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLnJlY29tbWVuZGVkVmFsdWVzID8/IFtdO1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHRcdHRoaXMucG9wb3ZlckludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdFx0dGhpcy5jcmVhdGVJbnB1dCgpO1xuXHR9XG5cblx0c2V0QXNJbnZhbGlkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlU3RhdGUoVmFsdWVTdGF0ZS5XYXJuaW5nKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZVN0YXRlVGV4dChtZXNzYWdlKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdHNldEFzVmFsaWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuc2V0VmFsdWVTdGF0ZShWYWx1ZVN0YXRlLk5vbmUpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdGNyZWF0ZUlucHV0KCk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0ID0gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdHNob3dDbGVhckljb249e25vdChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc1F1ZXJ5U3VjY2Vzc2Z1bFwiKSl9XG5cdFx0XHRcdHNob3dWYWx1ZUhlbHA9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzUXVlcnlTdWNjZXNzZnVsXCIpfVxuXHRcdFx0XHR2YWx1ZUhlbHBJY29uU3JjPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJmYXZvcml0ZUljb25OYW1lXCIpfVxuXHRcdFx0XHR2YWx1ZUhlbHBSZXF1ZXN0PXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkZhdm9yaXRlSWNvblByZXNzKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGNoYW5nZT17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInZhbHVlXCIpIH0pO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRsaXZlQ2hhbmdlPXsoZTogSW5wdXQkTGl2ZUNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdC8vIFdoZW4gdXNlciBzdGFydHMgdHlwaW5nLCBoaWRlIGZhdm9yaXRlIGljb24gYW5kIHNob3cgWFxuXHRcdFx0XHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSA9IFwiXCI7XG5cdFx0XHRcdFx0XHR0aGlzLnNldFBsYWNlaG9sZGVyKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdFx0XHRcdFx0aWYgKCFlLmdldFNvdXJjZSgpLmdldFZhbHVlKCkgJiYgISh0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmlzT3BlbigpID8/IGZhbHNlKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlU3RhdGUoKSA9PT0gVmFsdWVTdGF0ZS5XYXJuaW5nKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEFzVmFsaWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXG5cdFx0Y29uc3QgZmF2b3JpdGVQb3BvdmVyID0gdGhpcy5jcmVhdGVGYXZvcml0ZVBvcG92ZXIoKTtcblx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIgPSBmYXZvcml0ZVBvcG92ZXI7XG5cblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5hZGREZXBlbmRlbnQoZmF2b3JpdGVQb3BvdmVyKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdG9ua2V5dXA6IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG5cdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLiRmYXZvcml0ZVBvcG92ZXIgJiYgdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKSkge1xuXHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b25rZXlkb3duOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZS5rZXkgPT09IFwiVGFiXCIgJiZcblx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKS5sZW5ndGggPT09IDAgJiZcblx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKSAhPT0gdGhpcy4kc2VhcmNoSW5wdXQ/LmdldFBsYWNlaG9sZGVyKCkgJiZcblx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0UGxhY2Vob2xkZXIoKSAhPT0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKHRoaXMuJHNlYXJjaElucHV0Py5nZXRQbGFjZWhvbGRlcigpKTtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZS5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcblx0XHRcdFx0XHRjb25zdCBwb3BvdmVyQ29uYWluZXIgPSB0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmdldENvbnRlbnQoKVswXTtcblx0XHRcdFx0XHRjb25zdCBjb250YWluZXJJdGVtcyA9IChwb3BvdmVyQ29uYWluZXIgYXMgRmxleEJveCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0XHRjb250YWluZXJJdGVtcz8uZmluZCgoaXRlbSkgPT4gaXRlbS5pc0ZvY3VzYWJsZSgpICYmIChpdGVtLmZvY3VzKCksIHRydWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9udGFwOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdGF3YWl0IHRoaXMub3BlblN1Z2dlc3Rpb25Qb3BvdmVyKCk7XG5cdFx0XHR9LFxuXHRcdFx0b25mb2N1c2luOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdGF3YWl0IHRoaXMub3BlblN1Z2dlc3Rpb25Qb3BvdmVyKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyLmFkZEV2ZW50RGVsZWdhdGUoe1xuXHRcdFx0b25rZXlkb3duOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRUZXh0ID0gKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ub3V0ZXJUZXh0O1xuXHRcdFx0XHRjb25zdCB0YXJnZXRJZCA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmlkO1xuXHRcdFx0XHRzd2l0Y2ggKGUua2V5KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkVudGVyXCI6XG5cdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUodGFyZ2V0VGV4dCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRGVsZXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0SWQ/LmluY2x1ZGVzKFwiZWFzeUZpbHRlckZhdm9yaXRlSXRlbVwiKSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbHRlcihcblx0XHRcdFx0XHRcdFx0XHQoZGF0YSkgPT4gZGF0YS50b0xvd2VyQ2FzZSgpICE9PSB0YXJnZXRUZXh0LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeSAhPT0gdGFyZ2V0VGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHRcdFx0XHRpZiAodGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5pc09wZW4oKSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b25BZnRlclJlbmRlcmluZzogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnBvcG92ZXJJbnZpc2libGVNZXNzYWdlPy5hbm5vdW5jZShcblx0XHRcdFx0XHR0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX0VBU1lfRklMVEVSX0lOUFVUX1RFWFRfTElOS19QT1BPVkVSX0FSSUFcIiksXG5cdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIG9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuJHNlYXJjaElucHV0Py5nZXRWYWx1ZSgpICYmICghdGhpcy4kZmF2b3JpdGVQb3BvdmVyIHx8ICF0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmlzT3BlbigpKSkge1xuXHRcdFx0Ly8gT3BlbiB0aGUgZWFzeSBmaWx0ZXIgcG9wb3ZlclxuXHRcdFx0aWYgKCF0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQgPSB0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5pc0hpc3RvcnlFbmFibGVkKCkgPz8gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IChhd2FpdCB0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5nZXRGYXZvcml0ZVF1ZXJpZXMoKSkgPz8gW107XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSAoYXdhaXQgdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uZ2V0UmVjZW50UXVlcmllcygpKSA/PyBbXTtcblx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8ub3BlbkJ5KHRoaXMuJHNlYXJjaElucHV0KTtcblx0XHR9XG5cdH1cblxuXHRyZXF1ZXN0RmF2b3JpdGUoZTogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmNsb3NlKCk7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKGUuZ2V0U291cmNlKCkuZ2V0VGV4dCgpKTtcblx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdH1cblxuXHRvbkVudGVyUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmNsb3NlKCk7XG5cdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSBmYWxzZTtcblx0XHRsZXQgbWFnaWNRdWVyeSA9IHRoaXMuJHNlYXJjaElucHV0Py5nZXRWYWx1ZSgpO1xuXHRcdGlmIChtYWdpY1F1ZXJ5ID09PSBcIlwiICYmIHRoaXMuJHNlYXJjaElucHV0LmdldFBsYWNlaG9sZGVyKCkgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpIHtcblx0XHRcdG1hZ2ljUXVlcnkgPSB0aGlzLiRzZWFyY2hJbnB1dC5nZXRQbGFjZWhvbGRlcigpO1xuXHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKG1hZ2ljUXVlcnkpO1xuXHRcdH1cblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWVTdGF0ZVRleHQoXCJcIik7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlU3RhdGUoXCJOb25lXCIpO1xuXHRcdHRoaXMuZmlyZUV2ZW50KFwiZW50ZXJQcmVzc2VkXCIsIHsgcXVlcnk6IG1hZ2ljUXVlcnkgfSk7XG5cdH1cblxuXHRhZGRSZWNlbnRRdWVyeShxdWVyeVN0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Ly8gTm9ybWFsaXplIGJhY2tzbGFzaGVzIGJlZm9yZSBzdG9yaW5nXG5cdFx0cXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZz8ucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpO1xuXG5cdFx0Y29uc3QgcmVjZW50UXVlcnlJbmRleCA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maW5kSW5kZXgoKHF1ZXJ5KSA9PiBxdWVyeS50b0xvd2VyQ2FzZSgpID09PSBxdWVyeVN0cmluZz8udG9Mb3dlckNhc2UoKSk7XG5cdFx0aWYgKHF1ZXJ5U3RyaW5nICYmIHJlY2VudFF1ZXJ5SW5kZXggPT09IC0xKSB7XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSBbcXVlcnlTdHJpbmddLmNvbmNhdCh0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMpO1xuXHRcdFx0aWYgKHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5sZW5ndGggPiA1KSB7XG5cdFx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5zbGljZSgwLCA1KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHF1ZXJ5U3RyaW5nKSB7XG5cdFx0XHRjb25zdCByZWNlbnRRdWVyaWVzID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLmZpbHRlcigocXVlcnkpID0+IHF1ZXJ5LnRvTG93ZXJDYXNlKCkgIT09IHF1ZXJ5U3RyaW5nPy50b0xvd2VyQ2FzZSgpKTtcblx0XHRcdHJlY2VudFF1ZXJpZXMudW5zaGlmdChxdWVyeVN0cmluZyk7XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSByZWNlbnRRdWVyaWVzO1xuXHRcdH1cblx0fVxuXG5cdG9uU3RhdGVDaGFuZ2UoY2hhbmdlZFByb3BzOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcImZhdm9yaXRlUXVlcmllc1wiKSB8fCBjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJyZWNlbnRRdWVyaWVzXCIpKSB7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5zZXRGYXZvcml0ZVF1ZXJpZXModGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMpO1xuXHRcdFx0dGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uc2V0UmVjZW50UXVlcmllcyh0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubWFwKChxdWVyeSkgPT4gcXVlcnkpKTtcblx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllc1dpdEZhdm9yaXRlcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5tYXAoKHJlY2VudFF1ZXJ5KSA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGV4dDogcmVjZW50UXVlcnksXG5cdFx0XHRcdFx0aXNGYXZvcml0ZTogISF0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maW5kKChmYXZvcml0ZVF1ZXJ5KSA9PiBmYXZvcml0ZVF1ZXJ5ID09PSByZWNlbnRRdWVyeSlcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBVcGRhdGUgZmF2b3JpdGUgaWNvbiB3aGVuIHF1ZXJ5IG9yIGZhdm9yaXRlcyBjaGFuZ2Vcblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwiY3VycmVudEV4ZWN1dGVkUXVlcnlcIikgfHwgY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwiZmF2b3JpdGVRdWVyaWVzXCIpKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUZhdm9yaXRlSWNvbigpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRmF2b3JpdGVJY29uKCk6IHZvaWQge1xuXHRcdGNvbnN0IGlzRmF2b3JpdGVkID0gdGhpcy5pc0N1cnJlbnRRdWVyeUZhdm9yaXRlZCgpO1xuXHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVJY29uTmFtZSA9IGlzRmF2b3JpdGVkID8gXCJzYXAtaWNvbjovL2Zhdm9yaXRlXCIgOiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCI7XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZUljb25FbmFibGVkID0gaXNGYXZvcml0ZWQgfHwgdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMubGVuZ3RoIDwgNTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8udG9nZ2xlU3R5bGVDbGFzcyhcInNhcEZFRmF2b3JpdGVJY29uRGlzYWJsZWRcIiwgIXRoaXMuc3RhdGUuZmF2b3JpdGVJY29uRW5hYmxlZCk7XG5cdFx0Y29uc3QgdmFsdWVIZWxwQnRuID0gdGhpcy4kc2VhcmNoSW5wdXQ/LmdldERvbVJlZigpPy5xdWVyeVNlbGVjdG9yKCdbYXJpYS1sYWJlbD1cIlNob3cgVmFsdWUgSGVscFwiXScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblx0XHRpZiAodmFsdWVIZWxwQnRuKSB7XG5cdFx0XHR2YWx1ZUhlbHBCdG4udGl0bGUgPSB0aGlzLnN0YXRlLmZhdm9yaXRlSWNvbkVuYWJsZWRcblx0XHRcdFx0PyB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0VNUFRZX1NUQVJUXCIpXG5cdFx0XHRcdDogdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9NQVhfRkFWT1JJVEVfUkVBQ0hFRFwiKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXIgPSBhd2FpdCBTaGVsbEhpc3RvcnlQcm92aWRlci5nZXRJbnN0YW5jZSh0aGlzLmFwcElkID8/IFwiPHVua25vd25BcHA+XCIpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyBTaGVsbEhpc3RvcnlQcm92aWRlciBmb3IgZWFzeSBmaWx0ZXJcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVGYXZvcml0ZVBvcG92ZXIoKTogUG9wb3ZlciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1mYXZvcml0ZVBvcG92ZXJcIn1cblx0XHRcdFx0c2hvd0hlYWRlcj17ZmFsc2V9XG5cdFx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc9e2ZhbHNlfVxuXHRcdFx0XHRwbGFjZW1lbnQ9e1BsYWNlbWVudFR5cGUuQm90dG9tfVxuXHRcdFx0XHRzaG93QXJyb3c9e2ZhbHNlfVxuXHRcdFx0XHRpbml0aWFsRm9jdXM9e3RoaXMuJHNlYXJjaElucHV0fVxuXHRcdFx0XHRjbGFzcz17XCJzYXBGRUNvbnRyb2xzUG9wb3ZlclwifVxuXHRcdFx0XHR2aXNpYmxlPXt0aGlzLnN0YXRlLnJlY29tbWVuZGVkUXVlcmllcy5sZW5ndGggPiAwIHx8IGVxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDxGbGV4Qm94IGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Db2x1bW59IGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn0gcmVuZGVyVHlwZT17XCJCYXJlXCJ9PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX1NVR0dFU1RJT05TX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVGl0bGVCb3JkZXJcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMH1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PEhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjb21tZW5kZWRRdWVyaWVzXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwPXtGbGV4V3JhcC5XcmFwfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXt0aGlzLnN0YXRlLnJlY29tbWVuZGVkUXVlcmllcy5sZW5ndGggPiAwfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogU3RhbmRhcmRMaXN0SXRlbSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luRW5kXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLnJlcXVlc3RGYXZvcml0ZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0hCb3g+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVUaXRsZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZVN0eWxlPXtUaXRsZUxldmVsLkg2fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUaXRsZUJvcmRlclwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PExpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImZhdm9yaXRlUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9EYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuRXh0cmFTbWFsbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogU3RhbmRhcmRMaXN0SXRlbSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWQgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVJdGVtXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJGYXZvcml0ZVRpdGxlXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE9e1s8Q3VzdG9tRGF0YSBrZXk9e1widGV4dFwifSB2YWx1ZT17Y3R4LmdldE9iamVjdCgpfSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKGN0eC5nZXRPYmplY3QoKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD17XCIxMDAlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uUm93fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZW5kZXJUeXBlPXtcIkJhcmVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXtjdHguZ2V0T2JqZWN0KCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e2N0eC5nZXRPYmplY3QoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBpbmc9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcEZFQ29udHJvbHNQb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD48L1RleHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9mYXZvcml0ZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0ZJTExFRF9TVEFSXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W3RoaXMuZ2V0SWQoKSArIFwiLWVhc3lGaWx0ZXJGYXZvcml0ZUl0ZW1cIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9SZXRhaW5pbmcgdGhlIGZvY3VzIG9uIHBvcG92ZXIgZG9lc24ndCBtYWtlIHRoZSBwb3BvdmVyIGNsb3NlIG9uIGV2ZXJ5IGludGVyYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHF1ZXJ5U3RyaW5nID0gY3R4LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGluZGV4ID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuaW5kZXhPZihxdWVyeVN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChxdWVyeSkgPT4gcXVlcnkgIT09IHF1ZXJ5U3RyaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxFdmVudERlbGVnYXRlSG9va1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFwPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcImZhdm9yaXRlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MaXN0Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckxhc3RVc2VkVGl0bGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0xBU1RfVVNFRFwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGlzdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjZW50UXVlcmllc1dpdEZhdm9yaXRlc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZGU9e0xpc3RNb2RlLkRlbGV0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1t0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoZTogTGlzdEJhc2UkRGVsZXRlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gZS5nZXRQYXJhbWV0ZXIoXCJsaXN0SXRlbVwiKSBhcyBDdXN0b21MaXN0SXRlbTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtLmZvY3VzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcXVlcnlTdHJpbmcgPSBlLmdldFBhcmFtZXRlcihcImxpc3RJdGVtXCIpPy5kYXRhKFwidGV4dFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghcXVlcnlTdHJpbmcpIHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgYmVmb3JlIGNvbXBhcmluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmc/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeSAhPT0gcXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vRGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0xBU1RfVVNFRF9USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5FeHRyYVNtYWxsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlPXtJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRW50cmllc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb249e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9FTVBUWV9SRUNFTlRfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogRmxleEJveCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRJdGVtXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkudGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5cIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKS50ZXh0fSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZFRpdGxlXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPXtcIjEwMCVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Sb3d9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGbGV4QWxpZ25JdGVtcy5DZW50ZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudD17RmxleEp1c3RpZnlDb250ZW50LlNwYWNlQmV0d2Vlbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbmRlclR5cGU9e1wiQmFyZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKS50ZXh0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCkudGV4dH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBpbmc9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcEZFQ29udHJvbHNQb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD48L1RleHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGljb249e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5pc0Zhdm9yaXRlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IFwic2FwLWljb246Ly9mYXZvcml0ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwic2FwLWljb246Ly9hZGQtZmF2b3JpdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5pc0Zhdm9yaXRlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfRklMTEVEX1NUQVJcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9FTVBUWV9TVEFSVFwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2xlc3NUaGFuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJpbmRTdGF0ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJmYXZvcml0ZVF1ZXJpZXNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZEl0ZW1cIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGN0eC5nZXRPYmplY3QoKS50ZXh0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzRmF2b3JpdGUgPSBjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpc0Zhdm9yaXRlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbW92ZUZyb21GYXZvcml0ZXMocXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZFRvRmF2b3JpdGVzKHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxFdmVudERlbGVnYXRlSG9va1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFwPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgd2hlbiBjbGlja2luZyBvbiBhZGQgZmF2b3JpdGUgYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkudGV4dC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwicmVjZW50XCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MaXN0PlxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSBhcyBQb3BvdmVyO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVGcm9tRmF2b3JpdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbHRlcigoZGF0YSkgPT4gZGF0YS50b0xvd2VyQ2FzZSgpICE9PSBxdWVyeS50b0xvd2VyQ2FzZSgpKTtcblx0fVxuXG5cdHByaXZhdGUgYWRkVG9GYXZvcml0ZXMocXVlcnk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld0Zhdm9yaXRlID0gW3F1ZXJ5XS5jb25jYXQodGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuY29uY2F0KCkpO1xuXHRcdGlmIChuZXdGYXZvcml0ZS5sZW5ndGggPiA1KSB7XG5cdFx0XHRuZXdGYXZvcml0ZS5wb3AoKTtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSBuZXdGYXZvcml0ZTtcblx0fVxuXG5cdHByaXZhdGUgaXNDdXJyZW50UXVlcnlGYXZvcml0ZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY3VycmVudFF1ZXJ5ID0gdGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuc29tZSgoZmF2KSA9PiBmYXYudG9Mb3dlckNhc2UoKS50cmltKCkgPT09IGN1cnJlbnRRdWVyeSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UXVlcnlTdWNjZXNzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLmN1cnJlbnRFeGVjdXRlZFF1ZXJ5ID0gcXVlcnk7XG5cdFx0dGhpcy5zdGF0ZS5pc1F1ZXJ5U3VjY2Vzc2Z1bCA9IHRydWU7XG5cdFx0dGhpcy51cGRhdGVGYXZvcml0ZUljb24oKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRRdWVyeUZhaWx1cmUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5pc1F1ZXJ5U3VjY2Vzc2Z1bCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkgPSBcIlwiO1xuXHR9XG5cblx0cHVibGljIGNsZWFyUXVlcnlTdGF0dXMoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5pc1F1ZXJ5U3VjY2Vzc2Z1bCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkgPSBcIlwiO1xuXHR9XG5cblx0cHJpdmF0ZSBvbkZhdm9yaXRlSWNvblByZXNzKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5zdGF0ZS5mYXZvcml0ZUljb25FbmFibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIFRvZ2dsZSBmYXZvcml0ZSBzdGF0dXMgZm9yIHRoZSBjdXJyZW50IHF1ZXJ5XG5cdFx0Y29uc3QgaXNGYXZvcml0ZWQgPSB0aGlzLmlzQ3VycmVudFF1ZXJ5RmF2b3JpdGVkKCk7XG5cdFx0aWYgKGlzRmF2b3JpdGVkKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUZyb21GYXZvcml0ZXModGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRkVG9GYXZvcml0ZXModGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSk7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIHJlbmRlcihybTogUmVuZGVyTWFuYWdlciwgY29udHJvbDogRWFzeUZpbHRlcklucHV0KTogdm9pZCB7XG5cdFx0cmV0dXJuIGpzeC5yZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIocm0sIGNvbnRyb2wsICgpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxzcGFuIHJlZj17Y29udHJvbH0gY2xhc3M9e1wic2FwRkVFYXN5RmlsdGVySW5wdXRcIn0+XG5cdFx0XHRcdFx0e2NvbnRyb2wuJHNlYXJjaElucHV0fVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BMENxQkEsZUFBZSxJQUFBQyxJQUFBLEdBRG5DQyxjQUFjLENBQUMsNENBQTRDLENBQUMsRUFBQUMsS0FBQSxHQUUzREMsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRSxhQUFhO0lBQUVDLFFBQVEsRUFBRSxLQUFLO0lBQUVDLFNBQVMsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3RFQyxRQUFRLENBQUM7SUFBRUosSUFBSSxFQUFFO0VB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
|
|
590
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVySW5wdXQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsImV2ZW50IiwiX2RlYzciLCJfZGVjOCIsIl9kZWM5IiwiZGVmaW5lU3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2wiLCJwcm9wZXJ0aWVzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsImZhdm9yaXRlQnV0dG9uQ2xpY2tlZCIsIl9kZXNjcmlwdG9yOCIsImluaXRpYWxpemUiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0VmFsdWUiLCIkc2VhcmNoSW5wdXQiLCJpc0hpc3RvcnlFbmFibGVkIiwic3RhdGUiLCJ2YWx1ZU9mIiwic2V0VmFsdWUiLCJ2YWx1ZSIsInNldFBsYWNlaG9sZGVyIiwiZ2V0UGxhY2Vob2xkZXIiLCJzZXRBcmlhTGFiZWwiLCJzZXRQcm9wZXJ0eSIsIiRhcmlhRGVzY3JpcHRpb25UZXh0Iiwic2V0VGV4dCIsIkludmlzaWJsZVRleHQiLCJ0ZXh0IiwidG9TdGF0aWMiLCJhZGRBcmlhRGVzY3JpYmVkQnkiLCJnZXRJZCIsInJlY29tbWVuZGVkUXVlcmllcyIsInJlY29tbWVuZGVkVmFsdWVzIiwicmVzb3VyY2VCdW5kbGUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsInBvcG92ZXJJbnZpc2libGVNZXNzYWdlIiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiY3JlYXRlSW5wdXQiLCJzZXRBc0ludmFsaWQiLCJtZXNzYWdlIiwic2V0VmFsdWVTdGF0ZSIsIlZhbHVlU3RhdGUiLCJXYXJuaW5nIiwic2V0VmFsdWVTdGF0ZVRleHQiLCJvcGVuVmFsdWVTdGF0ZU1lc3NhZ2UiLCJzZXRBc1ZhbGlkIiwiTm9uZSIsImNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UiLCIkYXJpYUxhYmVsVGV4dCIsImdldFRleHQiLCJfanN4IiwiSW5wdXQiLCJ3aWR0aCIsInNob3dDbGVhckljb24iLCJub3QiLCJiaW5kU3RhdGUiLCJzaG93VmFsdWVIZWxwIiwidmFsdWVIZWxwSWNvblNyYyIsInZhbHVlSGVscFJlcXVlc3QiLCJvbkZhdm9yaXRlSWNvblByZXNzIiwiY2hhbmdlIiwiZSIsImZpcmVFdmVudCIsInF1ZXJ5IiwiZ2V0UGFyYW1ldGVyIiwibGl2ZUNoYW5nZSIsInF1ZXJ5Q2hhbmdlZCIsImlzUXVlcnlTdWNjZXNzZnVsIiwiY3VycmVudEV4ZWN1dGVkUXVlcnkiLCJnZXRTb3VyY2UiLCIkZmF2b3JpdGVQb3BvdmVyIiwiaXNPcGVuIiwib3BlblN1Z2dlc3Rpb25Qb3BvdmVyIiwiZ2V0VmFsdWVTdGF0ZSIsInBsYWNlaG9sZGVyIiwiYWRkQXJpYUxhYmVsbGVkQnkiLCJmYXZvcml0ZVBvcG92ZXIiLCJjcmVhdGVGYXZvcml0ZVBvcG92ZXIiLCJhZGREZXBlbmRlbnQiLCJhZGRFdmVudERlbGVnYXRlIiwib25rZXl1cCIsImtleSIsIm9uRW50ZXJQcmVzc2VkIiwiY2xvc2UiLCJvbmtleWRvd24iLCJsZW5ndGgiLCJwcmV2ZW50RGVmYXVsdCIsInBvcG92ZXJDb25haW5lciIsImdldENvbnRlbnQiLCJjb250YWluZXJJdGVtcyIsImdldEl0ZW1zIiwiZmluZCIsIml0ZW0iLCJpc0ZvY3VzYWJsZSIsImZvY3VzIiwib250YXAiLCJvbmZvY3VzaW4iLCJ0YXJnZXRUZXh0IiwidGFyZ2V0Iiwib3V0ZXJUZXh0IiwidGFyZ2V0SWQiLCJpZCIsImluY2x1ZGVzIiwiZmF2b3JpdGVRdWVyaWVzIiwiZmlsdGVyIiwiZGF0YSIsInRvTG93ZXJDYXNlIiwicmVjZW50UXVlcmllcyIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJhbm5vdW5jZSIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwic2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJnZXRGYXZvcml0ZVF1ZXJpZXMiLCJnZXRSZWNlbnRRdWVyaWVzIiwib3BlbkJ5IiwicmVxdWVzdEZhdm9yaXRlIiwibWFnaWNRdWVyeSIsImFkZFJlY2VudFF1ZXJ5IiwicXVlcnlTdHJpbmciLCJyZXBsYWNlIiwicmVjZW50UXVlcnlJbmRleCIsImZpbmRJbmRleCIsImNvbmNhdCIsInNsaWNlIiwidW5zaGlmdCIsIm9uU3RhdGVDaGFuZ2UiLCJjaGFuZ2VkUHJvcHMiLCJzZXRGYXZvcml0ZVF1ZXJpZXMiLCJzZXRSZWNlbnRRdWVyaWVzIiwibWFwIiwicmVjZW50UXVlcmllc1dpdEZhdm9yaXRlcyIsInJlY2VudFF1ZXJ5IiwiaXNGYXZvcml0ZSIsImZhdm9yaXRlUXVlcnkiLCJ1cGRhdGVGYXZvcml0ZUljb24iLCJpc0Zhdm9yaXRlZCIsImlzQ3VycmVudFF1ZXJ5RmF2b3JpdGVkIiwiZmF2b3JpdGVJY29uTmFtZSIsImZhdm9yaXRlSWNvbkVuYWJsZWQiLCJ0b2dnbGVTdHlsZUNsYXNzIiwidmFsdWVIZWxwQnRuIiwiZ2V0RG9tUmVmIiwicXVlcnlTZWxlY3RvciIsInRpdGxlIiwiU2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJhcHBJZCIsImVycm9yIiwiTG9nIiwiUG9wb3ZlciIsInNob3dIZWFkZXIiLCJob3Jpem9udGFsU2Nyb2xsaW5nIiwicGxhY2VtZW50IiwiUGxhY2VtZW50VHlwZSIsIkJvdHRvbSIsInNob3dBcnJvdyIsImluaXRpYWxGb2N1cyIsImNsYXNzIiwidmlzaWJsZSIsImVxdWFsIiwiY2hpbGRyZW4iLCJjb250ZW50IiwiRmxleEJveCIsImRpcmVjdGlvbiIsIkZsZXhEaXJlY3Rpb24iLCJDb2x1bW4iLCJyZW5kZXJUeXBlIiwiaXRlbXMiLCJUaXRsZSIsInRpdGxlU3R5bGUiLCJUaXRsZUxldmVsIiwiSDYiLCJIQm94Iiwid3JhcCIsIkZsZXhXcmFwIiwiV3JhcCIsImN0eCIsIkJ1dHRvbiIsImdldE9iamVjdCIsInByZXNzIiwiYmluZCIsIkxpc3QiLCJub0RhdGEiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkV4dHJhU21hbGwiLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRW50cmllcyIsImRlc2NyaXB0aW9uIiwiQ3VzdG9tTGlzdEl0ZW0iLCJhcmlhTGFiZWxsZWRCeSIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiX2pzeHMiLCJSb3ciLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJqdXN0aWZ5Q29udGVudCIsIkZsZXhKdXN0aWZ5Q29udGVudCIsIlNwYWNlQmV0d2VlbiIsIlRleHQiLCJ0b29sdGlwIiwid3JhcHBpbmciLCJpY29uIiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiaW5kZXgiLCJpbmRleE9mIiwiZGVwZW5kZW50cyIsIkV2ZW50RGVsZWdhdGVIb29rIiwidGFwIiwidHJpZ2dlclBYSW50ZWdyYXRpb24iLCJtb2RlIiwiTGlzdE1vZGUiLCJEZWxldGUiLCJkZWxldGUiLCJlbmFibGVkIiwibGVzc1RoYW4iLCJyZW1vdmVGcm9tRmF2b3JpdGVzIiwiYWRkVG9GYXZvcml0ZXMiLCJuZXdGYXZvcml0ZSIsInBvcCIsImN1cnJlbnRRdWVyeSIsInRyaW0iLCJzb21lIiwiZmF2Iiwic2V0UXVlcnlTdWNjZXNzIiwic2V0UXVlcnlGYWlsdXJlIiwiY2xlYXJRdWVyeVN0YXR1cyIsInJlbmRlciIsInJtIiwiY29udHJvbCIsImpzeCIsInJlbmRlclVzaW5nUmVuZGVyTWFuYWdlciIsInJlZiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGJpbmRTdGF0ZSwgZXF1YWwsIGxlbmd0aCwgbGVzc1RoYW4sIG5vdCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGRlZmluZVN0YXRlLCBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiwgdHlwZSBTdGF0ZU9mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEV2ZW50RGVsZWdhdGVIb29rIGZyb20gXCJzYXAvZmUvYmFzZS9FdmVudERlbGVnYXRlSG9va1wiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgU2hlbGxIaXN0b3J5UHJvdmlkZXIgZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL1NoZWxsSGlzdG9yeVByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1dHRvbiRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgQ3VzdG9tTGlzdEl0ZW0gZnJvbSBcInNhcC9tL0N1c3RvbUxpc3RJdGVtXCI7XG5pbXBvcnQgRmxleEJveCBmcm9tIFwic2FwL20vRmxleEJveFwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IElsbHVzdHJhdGVkTWVzc2FnZVNpemUgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVNpemVcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSB7IElucHV0JExpdmVDaGFuZ2VFdmVudCB9IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IElucHV0IGZyb20gXCJzYXAvbS9JbnB1dFwiO1xuaW1wb3J0IExpc3QgZnJvbSBcInNhcC9tL0xpc3RcIjtcbmltcG9ydCB0eXBlIHsgTGlzdEJhc2UkRGVsZXRlRXZlbnQgfSBmcm9tIFwic2FwL20vTGlzdEJhc2VcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBTdGFuZGFyZExpc3RJdGVtIGZyb20gXCJzYXAvbS9TdGFuZGFyZExpc3RJdGVtXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFRpdGxlIGZyb20gXCJzYXAvbS9UaXRsZVwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgRmxleEFsaWduSXRlbXMsIEZsZXhEaXJlY3Rpb24sIEZsZXhKdXN0aWZ5Q29udGVudCwgRmxleFdyYXAsIExpc3RNb2RlLCBQbGFjZW1lbnRUeXBlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCBJbnZpc2libGVUZXh0IGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVUZXh0XCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBUaXRsZUxldmVsLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IHRyaWdnZXJQWEludGVncmF0aW9uIH0gZnJvbSBcIi4vUFhGZWVkYmFja1wiO1xuXG50eXBlIFJlY2VudFR5cGUgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0aXNGYXZvcml0ZTogYm9vbGVhbjtcbn07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVySW5wdXRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJJbnB1dCBleHRlbmRzIENvbnRyb2wge1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLklucHV0XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdCRzZWFyY2hJbnB1dCE6IElucHV0O1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdHJlY29tbWVuZGVkVmFsdWVzPzogc3RyaW5nW107XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRhcmlhTGFiZWw/OiBzdHJpbmc7XG5cblx0QGV2ZW50KClcblx0cXVlcnlDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZXZlbnQoKVxuXHRlbnRlclByZXNzZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXI7XG5cblx0cHJpdmF0ZSByZXNvdXJjZUJ1bmRsZSE6IFJlc291cmNlQnVuZGxlO1xuXG5cdHNoZWxsSGlzdG9yeVByb3ZpZGVyOiBTaGVsbEhpc3RvcnlQcm92aWRlciB8IHVuZGVmaW5lZDtcblxuXHRwb3BvdmVySW52aXNpYmxlTWVzc2FnZTogSW52aXNpYmxlTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuXHQkZmF2b3JpdGVQb3BvdmVyOiBQb3BvdmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgZmF2b3JpdGVCdXR0b25DbGlja2VkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSAkYXJpYUxhYmVsVGV4dD86IEludmlzaWJsZVRleHQ7XG5cblx0cHJpdmF0ZSAkYXJpYURlc2NyaXB0aW9uVGV4dD86IEludmlzaWJsZVRleHQ7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRxdWVyeUNoYW5nZWQ6IGJvb2xlYW47XG5cdFx0cmVjZW50UXVlcmllczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogcmVhZG9ubHkgUmVjZW50VHlwZVtdO1xuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBzdHJpbmdbXTtcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IHN0cmluZ1tdO1xuXHRcdGN1cnJlbnRFeGVjdXRlZFF1ZXJ5OiBzdHJpbmc7XG5cdFx0aXNRdWVyeVN1Y2Nlc3NmdWw6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVJY29uTmFtZTogc3RyaW5nO1xuXHRcdGZhdm9yaXRlSWNvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdH0+ID0ge1xuXHRcdHF1ZXJ5Q2hhbmdlZDogZmFsc2UsXG5cdFx0aXNIaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0cmVjZW50UXVlcmllczogW10sXG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogW10sXG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBbXSBhcyBzdHJpbmdbXSxcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IFtdIGFzIHN0cmluZ1tdLFxuXHRcdGN1cnJlbnRFeGVjdXRlZFF1ZXJ5OiBcIlwiLFxuXHRcdGlzUXVlcnlTdWNjZXNzZnVsOiBmYWxzZSxcblx0XHRmYXZvcml0ZUljb25OYW1lOiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCIsXG5cdFx0ZmF2b3JpdGVJY29uRW5hYmxlZDogdHJ1ZVxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IHN0cmluZyB8ICgkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEVhc3lGaWx0ZXJJbnB1dD4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VmFsdWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0hpc3RvcnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQudmFsdWVPZigpO1xuXHR9XG5cblx0c2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRQbGFjZWhvbGRlcih2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0fVxuXG5cdHNldEFyaWFMYWJlbCh2YWx1ZTogc3RyaW5nKTogdGhpcyB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImFyaWFMYWJlbFwiLCB2YWx1ZSwgdHJ1ZSk7XG5cdFx0aWYgKHRoaXMuJGFyaWFEZXNjcmlwdGlvblRleHQpIHtcblx0XHRcdHRoaXMuJGFyaWFEZXNjcmlwdGlvblRleHQuc2V0VGV4dCh2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuJGFyaWFEZXNjcmlwdGlvblRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCh7IHRleHQ6IHZhbHVlIH0pO1xuXHRcdFx0dGhpcy4kYXJpYURlc2NyaXB0aW9uVGV4dC50b1N0YXRpYygpO1xuXHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmFkZEFyaWFEZXNjcmliZWRCeSh0aGlzLiRhcmlhRGVzY3JpcHRpb25UZXh0LmdldElkKCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLnJlY29tbWVuZGVkVmFsdWVzID8/IFtdO1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHRcdHRoaXMucG9wb3ZlckludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdFx0dGhpcy5jcmVhdGVJbnB1dCgpO1xuXHR9XG5cblx0c2V0QXNJbnZhbGlkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlU3RhdGUoVmFsdWVTdGF0ZS5XYXJuaW5nKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZVN0YXRlVGV4dChtZXNzYWdlKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdHNldEFzVmFsaWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuc2V0VmFsdWVTdGF0ZShWYWx1ZVN0YXRlLk5vbmUpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdGNyZWF0ZUlucHV0KCk6IHZvaWQge1xuXHRcdC8vICRhcmlhTGFiZWxUZXh0IHByb3ZpZGVzIHRoZSBmaWVsZCBsYWJlbCB2aWEgYXJpYS1sYWJlbGxlZGJ5IChyZWFkcyB0aGUgcGxhY2Vob2xkZXIgdGV4dClcblx0XHR0aGlzLiRhcmlhTGFiZWxUZXh0ID0gbmV3IEludmlzaWJsZVRleHQoeyB0ZXh0OiB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpIH0pO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0ID0gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdHNob3dDbGVhckljb249e25vdChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc1F1ZXJ5U3VjY2Vzc2Z1bFwiKSl9XG5cdFx0XHRcdHNob3dWYWx1ZUhlbHA9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzUXVlcnlTdWNjZXNzZnVsXCIpfVxuXHRcdFx0XHR2YWx1ZUhlbHBJY29uU3JjPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJmYXZvcml0ZUljb25OYW1lXCIpfVxuXHRcdFx0XHR2YWx1ZUhlbHBSZXF1ZXN0PXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkZhdm9yaXRlSWNvblByZXNzKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGNoYW5nZT17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInZhbHVlXCIpIH0pO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRsaXZlQ2hhbmdlPXsoZTogSW5wdXQkTGl2ZUNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdC8vIFdoZW4gdXNlciBzdGFydHMgdHlwaW5nLCBoaWRlIGZhdm9yaXRlIGljb24gYW5kIHNob3cgWFxuXHRcdFx0XHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSA9IFwiXCI7XG5cdFx0XHRcdFx0XHR0aGlzLnNldFBsYWNlaG9sZGVyKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdFx0XHRcdFx0aWYgKCFlLmdldFNvdXJjZSgpLmdldFZhbHVlKCkgJiYgISh0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmlzT3BlbigpID8/IGZhbHNlKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlU3RhdGUoKSA9PT0gVmFsdWVTdGF0ZS5XYXJuaW5nKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEFzVmFsaWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXG5cdFx0Ly8gYXJpYS1sYWJlbGxlZGJ5IGZvciBmaWVsZCBsYWJlbCAocGxhY2Vob2xkZXIgdGV4dCksIGFyaWEtZGVzY3JpYmVkYnkgZm9yIG1hbmRhdG9yeSBoaW50IChzZXQgbGF0ZXIgdmlhIHNldEFyaWFMYWJlbClcblx0XHR0aGlzLiRhcmlhTGFiZWxUZXh0LnRvU3RhdGljKCk7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkQXJpYUxhYmVsbGVkQnkodGhpcy4kYXJpYUxhYmVsVGV4dC5nZXRJZCgpKTtcblxuXHRcdGNvbnN0IGZhdm9yaXRlUG9wb3ZlciA9IHRoaXMuY3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyID0gZmF2b3JpdGVQb3BvdmVyO1xuXG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRGVwZW5kZW50KGZhdm9yaXRlUG9wb3Zlcik7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRvbmtleXVwOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZmF2b3JpdGVQb3BvdmVyICYmIHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGUua2V5ID09PSBcIlRhYlwiICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkubGVuZ3RoID09PSAwICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkgIT09IHRoaXMuJHNlYXJjaElucHV0Py5nZXRQbGFjZWhvbGRlcigpICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFBsYWNlaG9sZGVyKCkgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZSh0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0UGxhY2Vob2xkZXIoKSk7XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJsaXZlQ2hhbmdlXCIpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGUua2V5ID09PSBcIkFycm93RG93blwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wb3ZlckNvbmFpbmVyID0gdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVySXRlbXMgPSAocG9wb3ZlckNvbmFpbmVyIGFzIEZsZXhCb3gpLmdldEl0ZW1zKCk7XG5cdFx0XHRcdFx0Y29udGFpbmVySXRlbXM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uaXNGb2N1c2FibGUoKSAmJiAoaXRlbS5mb2N1cygpLCB0cnVlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvbnRhcDogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fSxcblx0XHRcdG9uZm9jdXNpbjogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlci5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0VGV4dCA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm91dGVyVGV4dDtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0SWQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5pZDtcblx0XHRcdFx0c3dpdGNoIChlLmtleSkge1xuXHRcdFx0XHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkRlbGV0ZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldElkPy5pbmNsdWRlcyhcImVhc3lGaWx0ZXJGYXZvcml0ZUl0ZW1cIikpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGEpID0+IGRhdGEudG9Mb3dlckNhc2UoKSAhPT0gdGFyZ2V0VGV4dC50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkgIT09IHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5wb3BvdmVySW52aXNpYmxlTWVzc2FnZT8uYW5ub3VuY2UoXG5cdFx0XHRcdFx0dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9FQVNZX0ZJTFRFUl9JTlBVVF9URVhUX0xJTktfUE9QT1ZFUl9BUklBXCIpLFxuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2VNb2RlLkFzc2VydGl2ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBvcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKSAmJiAoIXRoaXMuJGZhdm9yaXRlUG9wb3ZlciB8fCAhdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5pc09wZW4oKSkpIHtcblx0XHRcdC8vIE9wZW4gdGhlIGVhc3kgZmlsdGVyIHBvcG92ZXJcblx0XHRcdGlmICghdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcikge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmluaXRTaGVsbEhpc3RvcnlQcm92aWRlcigpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS5pc0hpc3RvcnlFbmFibGVkID0gdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uaXNIaXN0b3J5RW5hYmxlZCgpID8/IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSAoYXdhaXQgdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uZ2V0RmF2b3JpdGVRdWVyaWVzKCkpID8/IFtdO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gKGF3YWl0IHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmdldFJlY2VudFF1ZXJpZXMoKSkgPz8gW107XG5cdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/Lm9wZW5CeSh0aGlzLiRzZWFyY2hJbnB1dCk7XG5cdFx0fVxuXHR9XG5cblx0cmVxdWVzdEZhdm9yaXRlKGU6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5jbG9zZSgpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShlLmdldFNvdXJjZSgpLmdldFRleHQoKSk7XG5cdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHR9XG5cblx0b25FbnRlclByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5jbG9zZSgpO1xuXHRcdHRoaXMuc3RhdGUucXVlcnlDaGFuZ2VkID0gZmFsc2U7XG5cdFx0bGV0IG1hZ2ljUXVlcnkgPSB0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKTtcblx0XHRpZiAobWFnaWNRdWVyeSA9PT0gXCJcIiAmJiB0aGlzLiRzZWFyY2hJbnB1dC5nZXRQbGFjZWhvbGRlcigpICE9PSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKSB7XG5cdFx0XHRtYWdpY1F1ZXJ5ID0gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShtYWdpY1F1ZXJ5KTtcblx0XHR9XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlU3RhdGVUZXh0KFwiXCIpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZVN0YXRlKFwiTm9uZVwiKTtcblx0XHR0aGlzLmZpcmVFdmVudChcImVudGVyUHJlc3NlZFwiLCB7IHF1ZXJ5OiBtYWdpY1F1ZXJ5IH0pO1xuXHR9XG5cblx0YWRkUmVjZW50UXVlcnkocXVlcnlTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdC8vIE5vcm1hbGl6ZSBiYWNrc2xhc2hlcyBiZWZvcmUgc3RvcmluZ1xuXHRcdHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmc/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKTtcblxuXHRcdGNvbnN0IHJlY2VudFF1ZXJ5SW5kZXggPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmluZEluZGV4KChxdWVyeSkgPT4gcXVlcnkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlTdHJpbmc/LnRvTG93ZXJDYXNlKCkpO1xuXHRcdGlmIChxdWVyeVN0cmluZyAmJiByZWNlbnRRdWVyeUluZGV4ID09PSAtMSkge1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gW3F1ZXJ5U3RyaW5nXS5jb25jYXQodGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzKTtcblx0XHRcdGlmICh0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubGVuZ3RoID4gNSkge1xuXHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuc2xpY2UoMCwgNSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChxdWVyeVN0cmluZykge1xuXHRcdFx0Y29uc3QgcmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeS50b0xvd2VyQ2FzZSgpICE9PSBxdWVyeVN0cmluZz8udG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRyZWNlbnRRdWVyaWVzLnVuc2hpZnQocXVlcnlTdHJpbmcpO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gcmVjZW50UXVlcmllcztcblx0XHR9XG5cdH1cblxuXHRvblN0YXRlQ2hhbmdlKGNoYW5nZWRQcm9wczogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJmYXZvcml0ZVF1ZXJpZXNcIikgfHwgY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwicmVjZW50UXVlcmllc1wiKSkge1xuXHRcdFx0dGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uc2V0RmF2b3JpdGVRdWVyaWVzKHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzKTtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LnNldFJlY2VudFF1ZXJpZXModGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLm1hcCgocXVlcnkpID0+IHF1ZXJ5KSk7XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubWFwKChyZWNlbnRRdWVyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRleHQ6IHJlY2VudFF1ZXJ5LFxuXHRcdFx0XHRcdGlzRmF2b3JpdGU6ICEhdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmluZCgoZmF2b3JpdGVRdWVyeSkgPT4gZmF2b3JpdGVRdWVyeSA9PT0gcmVjZW50UXVlcnkpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gVXBkYXRlIGZhdm9yaXRlIGljb24gd2hlbiBxdWVyeSBvciBmYXZvcml0ZXMgY2hhbmdlXG5cdFx0aWYgKGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcImN1cnJlbnRFeGVjdXRlZFF1ZXJ5XCIpIHx8IGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcImZhdm9yaXRlUXVlcmllc1wiKSkge1xuXHRcdFx0dGhpcy51cGRhdGVGYXZvcml0ZUljb24oKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUZhdm9yaXRlSWNvbigpOiB2b2lkIHtcblx0XHRjb25zdCBpc0Zhdm9yaXRlZCA9IHRoaXMuaXNDdXJyZW50UXVlcnlGYXZvcml0ZWQoKTtcblx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlSWNvbk5hbWUgPSBpc0Zhdm9yaXRlZCA/IFwic2FwLWljb246Ly9mYXZvcml0ZVwiIDogXCJzYXAtaWNvbjovL2FkZC1mYXZvcml0ZVwiO1xuXHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVJY29uRW5hYmxlZCA9IGlzRmF2b3JpdGVkIHx8IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmxlbmd0aCA8IDU7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnRvZ2dsZVN0eWxlQ2xhc3MoXCJzYXBGRUZhdm9yaXRlSWNvbkRpc2FibGVkXCIsICF0aGlzLnN0YXRlLmZhdm9yaXRlSWNvbkVuYWJsZWQpO1xuXHRcdGNvbnN0IHZhbHVlSGVscEJ0biA9IHRoaXMuJHNlYXJjaElucHV0Py5nZXREb21SZWYoKT8ucXVlcnlTZWxlY3RvcignW2FyaWEtbGFiZWw9XCJTaG93IFZhbHVlIEhlbHBcIl0nKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG5cdFx0aWYgKHZhbHVlSGVscEJ0bikge1xuXHRcdFx0dmFsdWVIZWxwQnRuLnRpdGxlID0gdGhpcy5zdGF0ZS5mYXZvcml0ZUljb25FbmFibGVkXG5cdFx0XHRcdD8gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9FTVBUWV9TVEFSVFwiKVxuXHRcdFx0XHQ6IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTUFYX0ZBVk9SSVRFX1JFQUNIRURcIik7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyID0gYXdhaXQgU2hlbGxIaXN0b3J5UHJvdmlkZXIuZ2V0SW5zdGFuY2UodGhpcy5hcHBJZCA/PyBcIjx1bmtub3duQXBwPlwiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgU2hlbGxIaXN0b3J5UHJvdmlkZXIgZm9yIGVhc3kgZmlsdGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk6IFBvcG92ZXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZmF2b3JpdGVQb3BvdmVyXCJ9XG5cdFx0XHRcdHNob3dIZWFkZXI9e2ZhbHNlfVxuXHRcdFx0XHRob3Jpem9udGFsU2Nyb2xsaW5nPXtmYWxzZX1cblx0XHRcdFx0cGxhY2VtZW50PXtQbGFjZW1lbnRUeXBlLkJvdHRvbX1cblx0XHRcdFx0c2hvd0Fycm93PXtmYWxzZX1cblx0XHRcdFx0aW5pdGlhbEZvY3VzPXt0aGlzLiRzZWFyY2hJbnB1dH1cblx0XHRcdFx0Y2xhc3M9e1wic2FwRkVDb250cm9sc1BvcG92ZXJcIn1cblx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMCB8fCBlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8RmxleEJveCBkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uQ29sdW1ufSBjbGFzcz17XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJ9IHJlbmRlclR5cGU9e1wiQmFyZVwifT5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlU3R5bGU9e1RpdGxlTGV2ZWwuSDZ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9TVUdHRVNUSU9OU19USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e3RoaXMuc3RhdGUucmVjb21tZW5kZWRRdWVyaWVzLmxlbmd0aCA+IDB9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdDxIQm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInJlY29tbWVuZGVkUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcD17RmxleFdyYXAuV3JhcH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IFN0YW5kYXJkTGlzdEl0ZW0gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpVGlueU1hcmdpbkVuZFwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5yZXF1ZXN0RmF2b3JpdGUuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9IQm94Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckZhdm9yaXRlVGl0bGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0ZBVk9SSVRFX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVGl0bGVCb3JkZXJcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdDxMaXN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJmYXZvcml0ZVF1ZXJpZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vRGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0ZBVk9SSVRFX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25TaXplPXtJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkV4dHJhU21hbGx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU9e0lsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9FbnRyaWVzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbj17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0ZBVk9SSVRFX0RFU0NSSVBUSU9OXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IFN0YW5kYXJkTGlzdEl0ZW0gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkICsgXCItZWFzeUZpbHRlckZhdm9yaXRlSXRlbVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5CZWdpblwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKX0gLz5dfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9e1wiMTAwJVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPXtGbGV4RGlyZWN0aW9uLlJvd31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGp1c3RpZnlDb250ZW50PXtGbGV4SnVzdGlmeUNvbnRlbnQuU3BhY2VCZXR3ZWVufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVuZGVyVHlwZT17XCJCYXJlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwaW5nPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBGRUNvbnRyb2xzUG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9UZXh0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vZmF2b3JpdGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9GSUxMRURfU1RBUlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1t0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVJdGVtXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGN0eC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpbmRleCA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmluZGV4T2YocXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQocXVlcnkpID0+IHF1ZXJ5ICE9PSBxdWVyeVN0cmluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVudHM6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXZlbnREZWxlZ2F0ZUhvb2tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhcD17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuZmF2b3JpdGVCdXR0b25DbGlja2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJpZ2dlclBYSW50ZWdyYXRpb24oXCJmYXZvcml0ZVwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGlzdD4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e3RoaXMuZ2V0SWQoKSArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZFRpdGxlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlU3R5bGU9e1RpdGxlTGV2ZWwuSDZ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9MQVNUX1VTRURcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUaXRsZUJvcmRlclwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PExpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtb2RlPXtMaXN0TW9kZS5EZWxldGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbdGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckxhc3RVc2VkVGl0bGVcIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZT17KGU6IExpc3RCYXNlJERlbGV0ZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXRlbSA9IGUuZ2V0UGFyYW1ldGVyKFwibGlzdEl0ZW1cIikgYXMgQ3VzdG9tTGlzdEl0ZW07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbS5mb2N1cygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHF1ZXJ5U3RyaW5nID0gZS5nZXRQYXJhbWV0ZXIoXCJsaXN0SXRlbVwiKT8uZGF0YShcInRleHRcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsaXplIGJhY2tzbGFzaGVzIGJlZm9yZSBjb21wYXJpbmdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nPy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkgIT09IHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub0RhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9FTVBUWV9MQVNUX1VTRURfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuRXh0cmFTbWFsbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfUkVDRU5UX0RFU0NSSVBUSU9OXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IEZsZXhCb3ggPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkICsgXCItZWFzeUZpbHRlckxhc3RVc2VkSXRlbVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoY3R4LmdldE9iamVjdCgpLnRleHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YT17WzxDdXN0b21EYXRhIGtleT17XCJ0ZXh0XCJ9IHZhbHVlPXtjdHguZ2V0T2JqZWN0KCkudGV4dH0gLz5dfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD17XCIxMDAlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uUm93fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZW5kZXJUeXBlPXtcIkJhcmVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXtjdHguZ2V0T2JqZWN0KCkudGV4dH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcD17Y3R4LmdldE9iamVjdCgpLnRleHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwaW5nPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBGRUNvbnRyb2xzUG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9UZXh0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcInNhcC1pY29uOi8vZmF2b3JpdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0ZJTExFRF9TVEFSXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfRU1QVFlfU1RBUlRcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbmFibGVkPXtsZXNzVGhhbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiaW5kU3RhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiZmF2b3JpdGVRdWVyaWVzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ1XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRJdGVtXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZmF2b3JpdGVCdXR0b25DbGlja2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcXVlcnlTdHJpbmcgPSBjdHguZ2V0T2JqZWN0KCkudGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc0Zhdm9yaXRlID0gY3R4LmdldE9iamVjdCgpLmlzRmF2b3JpdGU7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaXNGYXZvcml0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVGcm9tRmF2b3JpdGVzKHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hZGRUb0Zhdm9yaXRlcyhxdWVyeVN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVudHM6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXZlbnREZWxlZ2F0ZUhvb2tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhcD17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIHdoZW4gY2xpY2tpbmcgb24gYWRkIGZhdm9yaXRlIGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuZmF2b3JpdGVCdXR0b25DbGlja2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3R4LmdldE9iamVjdCgpLnRleHQucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInJlY2VudFwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGlzdD5cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkgYXMgUG9wb3Zlcjtcblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlRnJvbUZhdm9yaXRlcyhxdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoKGRhdGEpID0+IGRhdGEudG9Mb3dlckNhc2UoKSAhPT0gcXVlcnkudG9Mb3dlckNhc2UoKSk7XG5cdH1cblxuXHRwcml2YXRlIGFkZFRvRmF2b3JpdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdGYXZvcml0ZSA9IFtxdWVyeV0uY29uY2F0KHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmNvbmNhdCgpKTtcblx0XHRpZiAobmV3RmF2b3JpdGUubGVuZ3RoID4gNSkge1xuXHRcdFx0bmV3RmF2b3JpdGUucG9wKCk7XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gbmV3RmF2b3JpdGU7XG5cdH1cblxuXHRwcml2YXRlIGlzQ3VycmVudFF1ZXJ5RmF2b3JpdGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGN1cnJlbnRRdWVyeSA9IHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cdFx0cmV0dXJuIHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLnNvbWUoKGZhdikgPT4gZmF2LnRvTG93ZXJDYXNlKCkudHJpbSgpID09PSBjdXJyZW50UXVlcnkpO1xuXHR9XG5cblx0cHVibGljIHNldFF1ZXJ5U3VjY2VzcyhxdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSA9IHF1ZXJ5O1xuXHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSB0cnVlO1xuXHRcdHRoaXMudXBkYXRlRmF2b3JpdGVJY29uKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UXVlcnlGYWlsdXJlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLmN1cnJlbnRFeGVjdXRlZFF1ZXJ5ID0gXCJcIjtcblx0fVxuXG5cdHB1YmxpYyBjbGVhclF1ZXJ5U3RhdHVzKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLmN1cnJlbnRFeGVjdXRlZFF1ZXJ5ID0gXCJcIjtcblx0fVxuXG5cdHByaXZhdGUgb25GYXZvcml0ZUljb25QcmVzcygpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuc3RhdGUuZmF2b3JpdGVJY29uRW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBUb2dnbGUgZmF2b3JpdGUgc3RhdHVzIGZvciB0aGUgY3VycmVudCBxdWVyeVxuXHRcdGNvbnN0IGlzRmF2b3JpdGVkID0gdGhpcy5pc0N1cnJlbnRRdWVyeUZhdm9yaXRlZCgpO1xuXHRcdGlmIChpc0Zhdm9yaXRlZCkge1xuXHRcdFx0dGhpcy5yZW1vdmVGcm9tRmF2b3JpdGVzKHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmFkZFRvRmF2b3JpdGVzKHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkpO1xuXHRcdH1cblx0fVxuXG5cdHN0YXRpYyByZW5kZXIocm06IFJlbmRlck1hbmFnZXIsIGNvbnRyb2w6IEVhc3lGaWx0ZXJJbnB1dCk6IHZvaWQge1xuXHRcdHJldHVybiBqc3gucmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyKHJtLCBjb250cm9sLCAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8c3BhbiByZWY9e2NvbnRyb2x9IGNsYXNzPXtcInNhcEZFRWFzeUZpbHRlcklucHV0XCJ9PlxuXHRcdFx0XHRcdHtjb250cm9sLiRzZWFyY2hJbnB1dH1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTJDcUJBLGVBQWUsSUFBQUMsSUFBQSxHQURuQ0MsY0FBYyxDQUFDLDRDQUE0QyxDQUFDLEVBQUFDLEtBQUEsR0FFM0RDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUsYUFBYTtJQUFFQyxRQUFRLEVBQUUsS0FBSztJQUFFQyxTQUFTLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUd0RUMsUUFBUSxDQUFDO0lBQUVKLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBRzVCRCxRQUFRLENBQUM7SUFBRUosSUFBSSxFQUFFO0VBQVEsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHM0JGLFFBQVEsQ0FBQztJQUFFSixJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQU8sS0FBQSxHQUc1QkMsS0FBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdQRCxLQUFLLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBR1BGLEtBQUssQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FpQlBDLFdBQVcsQ0FBQyxDQUFDLEVBQUFoQixJQUFBLENBQUFpQixNQUFBLElBQUFDLE9BQUEsMEJBQUFDLFFBQUE7SUF5QmQsU0FBQXBCLGdCQUFZcUIsVUFBdUUsRUFBRUMsTUFBeUIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDL0dBLEtBQUEsR0FBQUgsUUFBQSxDQUFBSSxJQUFBLE9BQU1ILFVBQVUsRUFBWUMsTUFBTSxDQUFDO01BQUNHLDBCQUFBLENBQUFGLEtBQUEsa0JBQUFHLFdBQUEsRUFBQUgsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLFdBQUFJLFlBQUEsRUFBQUosS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLHVCQUFBSyxZQUFBLEVBQUFMLEtBQUE7TUFBQUUs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
|
|
@@ -28,6 +28,7 @@ import type { $ControlSettings } from "sap/ui/core/Control";
|
|
|
28
28
|
import Control from "sap/ui/core/Control";
|
|
29
29
|
import CustomData from "sap/ui/core/CustomData";
|
|
30
30
|
import InvisibleMessage from "sap/ui/core/InvisibleMessage";
|
|
31
|
+
import InvisibleText from "sap/ui/core/InvisibleText";
|
|
31
32
|
import Lib from "sap/ui/core/Lib";
|
|
32
33
|
import type RenderManager from "sap/ui/core/RenderManager";
|
|
33
34
|
import { InvisibleMessageMode, TitleLevel, ValueState } from "sap/ui/core/library";
|
|
@@ -50,6 +51,9 @@ export default class EasyFilterInput extends Control {
|
|
|
50
51
|
@property({ type: "array" })
|
|
51
52
|
recommendedValues?: string[];
|
|
52
53
|
|
|
54
|
+
@property({ type: "string" })
|
|
55
|
+
ariaLabel?: string;
|
|
56
|
+
|
|
53
57
|
@event()
|
|
54
58
|
queryChanged?: EventHandler<UI5Event<{ query: string }, EasyFilterInput>>;
|
|
55
59
|
|
|
@@ -69,6 +73,10 @@ export default class EasyFilterInput extends Control {
|
|
|
69
73
|
|
|
70
74
|
private favoriteButtonClicked = false;
|
|
71
75
|
|
|
76
|
+
private $ariaLabelText?: InvisibleText;
|
|
77
|
+
|
|
78
|
+
private $ariaDescriptionText?: InvisibleText;
|
|
79
|
+
|
|
72
80
|
@defineState()
|
|
73
81
|
protected state: StateOf<{
|
|
74
82
|
queryChanged: boolean;
|
|
@@ -121,6 +129,18 @@ export default class EasyFilterInput extends Control {
|
|
|
121
129
|
return this.$searchInput.getPlaceholder();
|
|
122
130
|
}
|
|
123
131
|
|
|
132
|
+
setAriaLabel(value: string): this {
|
|
133
|
+
this.setProperty("ariaLabel", value, true);
|
|
134
|
+
if (this.$ariaDescriptionText) {
|
|
135
|
+
this.$ariaDescriptionText.setText(value);
|
|
136
|
+
} else {
|
|
137
|
+
this.$ariaDescriptionText = new InvisibleText({ text: value });
|
|
138
|
+
this.$ariaDescriptionText.toStatic();
|
|
139
|
+
this.$searchInput?.addAriaDescribedBy(this.$ariaDescriptionText.getId());
|
|
140
|
+
}
|
|
141
|
+
return this;
|
|
142
|
+
}
|
|
143
|
+
|
|
124
144
|
initialize(): void {
|
|
125
145
|
this.state.recommendedQueries = this.recommendedValues ?? [];
|
|
126
146
|
this.resourceBundle = Lib.getResourceBundleFor("sap.fe.controls")!;
|
|
@@ -140,6 +160,8 @@ export default class EasyFilterInput extends Control {
|
|
|
140
160
|
}
|
|
141
161
|
|
|
142
162
|
createInput(): void {
|
|
163
|
+
// $ariaLabelText provides the field label via aria-labelledby (reads the placeholder text)
|
|
164
|
+
this.$ariaLabelText = new InvisibleText({ text: this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER") });
|
|
143
165
|
this.$searchInput = (
|
|
144
166
|
<Input
|
|
145
167
|
width="100%"
|
|
@@ -172,6 +194,10 @@ export default class EasyFilterInput extends Control {
|
|
|
172
194
|
/>
|
|
173
195
|
);
|
|
174
196
|
|
|
197
|
+
// aria-labelledby for field label (placeholder text), aria-describedby for mandatory hint (set later via setAriaLabel)
|
|
198
|
+
this.$ariaLabelText.toStatic();
|
|
199
|
+
this.$searchInput.addAriaLabelledBy(this.$ariaLabelText.getId());
|
|
200
|
+
|
|
175
201
|
const favoritePopover = this.createFavoritePopover();
|
|
176
202
|
this.$favoritePopover = favoritePopover;
|
|
177
203
|
|