@sapui5/sap.fe.controls 1.148.0 → 1.148.1
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/AiNoticeHelper.js +26 -5
- package/src/sap/fe/controls/AiNoticeHelper.tsx +31 -3
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +9 -1
- package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +8 -0
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +62 -6
- package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +74 -7
- package/src/sap/fe/controls/library.js +1 -1
- package/src/sap/fe/controls/messagebundle.properties +2 -0
- package/src/sap/fe/controls/themes/base/EasyFilter.less +8 -4
|
@@ -436,6 +436,8 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
436
436
|
if (this.easyFilterInput.current?.isHistoryEnabled() ?? false) {
|
|
437
437
|
this.easyFilterInput.current?.addRecentQuery(magicQuery);
|
|
438
438
|
}
|
|
439
|
+
// Set query as successful in the input field
|
|
440
|
+
this.easyFilterInput.current?.setQuerySuccess(magicQuery);
|
|
439
441
|
if (easyFilterResult.data.version === 1) {
|
|
440
442
|
this.handleV1Success(easyFilterResult);
|
|
441
443
|
} else if (easyFilterResult.data.version === 2) {
|
|
@@ -443,6 +445,7 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
443
445
|
}
|
|
444
446
|
} else {
|
|
445
447
|
// error
|
|
448
|
+
this.easyFilterInput.current?.setQueryFailure();
|
|
446
449
|
this.removeNonMandatoryTokens();
|
|
447
450
|
this.setMessageStrip(easyFilterResult.message);
|
|
448
451
|
this.invisibleMessage.announce(this.resourceBundle.getText(easyFilterResult.message), InvisibleMessageMode.Assertive);
|
|
@@ -1071,6 +1074,9 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
1071
1074
|
</VBox>
|
|
1072
1075
|
) as VBox;
|
|
1073
1076
|
FESRHelper.setSemanticStepname($topGoBtn.current!, "press", "fe:ai:search");
|
|
1077
|
+
if (this.easyFilterInput.current) {
|
|
1078
|
+
FESRHelper.setSemanticStepname(this.easyFilterInput.current, "enterPressed", "fe:ai:search");
|
|
1079
|
+
}
|
|
1074
1080
|
return outVBox;
|
|
1075
1081
|
}
|
|
1076
1082
|
|
|
@@ -1116,6 +1122,8 @@ export default class EasyFilterBarContainer extends Control {
|
|
|
1116
1122
|
this.tokenizer.current?.getTokens().forEach((token) => token.setProperty("valueState", ValueState.None));
|
|
1117
1123
|
this.tokenizer.current?.getTokens().forEach((token) => token.setProperty("valueStateText", null));
|
|
1118
1124
|
this.clearMessageStrip(); //clear the message strip for validated filters
|
|
1125
|
+
// Clear query success status
|
|
1126
|
+
this.easyFilterInput.current?.clearQueryStatus();
|
|
1119
1127
|
}
|
|
1120
1128
|
|
|
1121
1129
|
clearFiltersAndTokens(): void {
|
|
@@ -23,6 +23,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
23
23
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
24
24
|
var defineState = ClassSupport.defineState;
|
|
25
25
|
var aggregation = ClassSupport.aggregation;
|
|
26
|
+
var not = BindingToolkit.not;
|
|
26
27
|
var lessThan = BindingToolkit.lessThan;
|
|
27
28
|
var length = BindingToolkit.length;
|
|
28
29
|
var equal = BindingToolkit.equal;
|
|
@@ -93,7 +94,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
93
94
|
_proto.createInput = function createInput() {
|
|
94
95
|
this.$searchInput = _jsx(Input, {
|
|
95
96
|
width: "100%",
|
|
96
|
-
showClearIcon:
|
|
97
|
+
showClearIcon: not(bindState(this.state, "isQuerySuccessful")),
|
|
98
|
+
showValueHelp: bindState(this.state, "isQuerySuccessful"),
|
|
99
|
+
valueHelpIconSrc: bindState(this.state, "favoriteIconName"),
|
|
100
|
+
valueHelpRequest: () => {
|
|
101
|
+
this.onFavoriteIconPress();
|
|
102
|
+
},
|
|
97
103
|
change: e => {
|
|
98
104
|
this.fireEvent("queryChanged", {
|
|
99
105
|
query: e.getParameter("value")
|
|
@@ -101,13 +107,16 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
101
107
|
},
|
|
102
108
|
liveChange: e => {
|
|
103
109
|
this.state.queryChanged = true;
|
|
110
|
+
// When user starts typing, hide favorite icon and show X
|
|
111
|
+
this.state.isQuerySuccessful = false;
|
|
112
|
+
if (e.getParameter("value") === "") {
|
|
113
|
+
this.state.currentExecutedQuery = "";
|
|
114
|
+
this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
|
|
115
|
+
}
|
|
104
116
|
this.fireEvent("liveChange");
|
|
105
117
|
if (!e.getSource().getValue() && !(this.$favoritePopover?.isOpen() ?? false)) {
|
|
106
118
|
this.openSuggestionPopover();
|
|
107
119
|
}
|
|
108
|
-
if (e.getParameter("value") === "") {
|
|
109
|
-
this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
|
|
110
|
-
}
|
|
111
120
|
if (this.$searchInput.getValueState() === ValueState.Warning) {
|
|
112
121
|
this.setAsValid();
|
|
113
122
|
}
|
|
@@ -229,6 +238,20 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
229
238
|
};
|
|
230
239
|
});
|
|
231
240
|
}
|
|
241
|
+
// Update favorite icon when query or favorites change
|
|
242
|
+
if (changedProps.includes("currentExecutedQuery") || changedProps.includes("favoriteQueries")) {
|
|
243
|
+
this.updateFavoriteIcon();
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
_proto.updateFavoriteIcon = function updateFavoriteIcon() {
|
|
247
|
+
const isFavorited = this.isCurrentQueryFavorited();
|
|
248
|
+
this.state.favoriteIconName = isFavorited ? "sap-icon://favorite" : "sap-icon://add-favorite";
|
|
249
|
+
this.state.favoriteIconEnabled = isFavorited || this.state.favoriteQueries.length < 5;
|
|
250
|
+
this.$searchInput?.toggleStyleClass("sapFEFavoriteIconDisabled", !this.state.favoriteIconEnabled);
|
|
251
|
+
const valueHelpBtn = this.$searchInput?.getDomRef()?.querySelector('[aria-label="Show Value Help"]');
|
|
252
|
+
if (valueHelpBtn) {
|
|
253
|
+
valueHelpBtn.title = this.state.favoriteIconEnabled ? this.resourceBundle.getText("M_EASY_FILTER_EMPTY_START") : this.resourceBundle.getText("M_EASY_FILTER_MAX_FAVORITE_REACHED");
|
|
254
|
+
}
|
|
232
255
|
};
|
|
233
256
|
_proto.initShellHistoryProvider = async function initShellHistoryProvider() {
|
|
234
257
|
try {
|
|
@@ -445,6 +468,35 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
445
468
|
}
|
|
446
469
|
this.state.favoriteQueries = newFavorite;
|
|
447
470
|
};
|
|
471
|
+
_proto.isCurrentQueryFavorited = function isCurrentQueryFavorited() {
|
|
472
|
+
const currentQuery = this.state.currentExecutedQuery.toLowerCase().trim();
|
|
473
|
+
return this.state.favoriteQueries.some(fav => fav.toLowerCase().trim() === currentQuery);
|
|
474
|
+
};
|
|
475
|
+
_proto.setQuerySuccess = function setQuerySuccess(query) {
|
|
476
|
+
this.state.currentExecutedQuery = query;
|
|
477
|
+
this.state.isQuerySuccessful = true;
|
|
478
|
+
this.updateFavoriteIcon();
|
|
479
|
+
};
|
|
480
|
+
_proto.setQueryFailure = function setQueryFailure() {
|
|
481
|
+
this.state.isQuerySuccessful = false;
|
|
482
|
+
this.state.currentExecutedQuery = "";
|
|
483
|
+
};
|
|
484
|
+
_proto.clearQueryStatus = function clearQueryStatus() {
|
|
485
|
+
this.state.isQuerySuccessful = false;
|
|
486
|
+
this.state.currentExecutedQuery = "";
|
|
487
|
+
};
|
|
488
|
+
_proto.onFavoriteIconPress = function onFavoriteIconPress() {
|
|
489
|
+
if (!this.state.favoriteIconEnabled) {
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
// Toggle favorite status for the current query
|
|
493
|
+
const isFavorited = this.isCurrentQueryFavorited();
|
|
494
|
+
if (isFavorited) {
|
|
495
|
+
this.removeFromFavorites(this.state.currentExecutedQuery);
|
|
496
|
+
} else {
|
|
497
|
+
this.addToFavorites(this.state.currentExecutedQuery);
|
|
498
|
+
}
|
|
499
|
+
};
|
|
448
500
|
EasyFilterInput.render = function render(rm, control) {
|
|
449
501
|
return jsx.renderUsingRenderManager(rm, control, () => {
|
|
450
502
|
return _jsx("span", {
|
|
@@ -496,11 +548,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
496
548
|
recentQueries: [],
|
|
497
549
|
recentQueriesWitFavorites: [],
|
|
498
550
|
favoriteQueries: [],
|
|
499
|
-
recommendedQueries: []
|
|
551
|
+
recommendedQueries: [],
|
|
552
|
+
currentExecutedQuery: "",
|
|
553
|
+
isQuerySuccessful: false,
|
|
554
|
+
favoriteIconName: "sap-icon://add-favorite",
|
|
555
|
+
favoriteIconEnabled: true
|
|
500
556
|
};
|
|
501
557
|
}
|
|
502
558
|
}), _class2)) || _class);
|
|
503
559
|
_exports = EasyFilterInput;
|
|
504
560
|
return _exports;
|
|
505
561
|
}, false);
|
|
506
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVySW5wdXQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiX2RlYzUiLCJldmVudCIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImRlZmluZVN0YXRlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJmYXZvcml0ZUJ1dHRvbkNsaWNrZWQiLCJfZGVzY3JpcHRvcjciLCJpbml0aWFsaXplIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFZhbHVlIiwiJHNlYXJjaElucHV0IiwiaXNIaXN0b3J5RW5hYmxlZCIsInN0YXRlIiwidmFsdWVPZiIsInNldFZhbHVlIiwidmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwicmVjb21tZW5kZWRRdWVyaWVzIiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwicG9wb3ZlckludmlzaWJsZU1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJjcmVhdGVJbnB1dCIsInNldEFzSW52YWxpZCIsIm1lc3NhZ2UiLCJzZXRWYWx1ZVN0YXRlIiwiVmFsdWVTdGF0ZSIsIldhcm5pbmciLCJzZXRWYWx1ZVN0YXRlVGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsInNldEFzVmFsaWQiLCJOb25lIiwiY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSIsIl9qc3giLCJJbnB1dCIsIndpZHRoIiwic2hvd0NsZWFySWNvbiIsImNoYW5nZSIsImUiLCJmaXJlRXZlbnQiLCJxdWVyeSIsImdldFBhcmFtZXRlciIsImxpdmVDaGFuZ2UiLCJxdWVyeUNoYW5nZWQiLCJnZXRTb3VyY2UiLCIkZmF2b3JpdGVQb3BvdmVyIiwiaXNPcGVuIiwib3BlblN1Z2dlc3Rpb25Qb3BvdmVyIiwiZ2V0VGV4dCIsImdldFZhbHVlU3RhdGUiLCJwbGFjZWhvbGRlciIsImZhdm9yaXRlUG9wb3ZlciIsImNyZWF0ZUZhdm9yaXRlUG9wb3ZlciIsImFkZERlcGVuZGVudCIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbmtleXVwIiwia2V5Iiwib25FbnRlclByZXNzZWQiLCJjbG9zZSIsIm9ua2V5ZG93biIsImxlbmd0aCIsInByZXZlbnREZWZhdWx0IiwicG9wb3ZlckNvbmFpbmVyIiwiZ2V0Q29udGVudCIsImNvbnRhaW5lckl0ZW1zIiwiZ2V0SXRlbXMiLCJmaW5kIiwiaXRlbSIsImlzRm9jdXNhYmxlIiwiZm9jdXMiLCJvbnRhcCIsIm9uZm9jdXNpbiIsInRhcmdldFRleHQiLCJ0YXJnZXQiLCJvdXRlclRleHQiLCJ0YXJnZXRJZCIsImlkIiwiaW5jbHVkZXMiLCJmYXZvcml0ZVF1ZXJpZXMiLCJmaWx0ZXIiLCJkYXRhIiwidG9Mb3dlckNhc2UiLCJyZWNlbnRRdWVyaWVzIiwib25BZnRlclJlbmRlcmluZyIsImFubm91bmNlIiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJzaGVsbEhpc3RvcnlQcm92aWRlciIsImluaXRTaGVsbEhpc3RvcnlQcm92aWRlciIsImdldEZhdm9yaXRlUXVlcmllcyIsImdldFJlY2VudFF1ZXJpZXMiLCJvcGVuQnkiLCJyZXF1ZXN0RmF2b3JpdGUiLCJtYWdpY1F1ZXJ5IiwiYWRkUmVjZW50UXVlcnkiLCJxdWVyeVN0cmluZyIsInJlcGxhY2UiLCJyZWNlbnRRdWVyeUluZGV4IiwiZmluZEluZGV4IiwiY29uY2F0Iiwic2xpY2UiLCJ1bnNoaWZ0Iiwib25TdGF0ZUNoYW5nZSIsImNoYW5nZWRQcm9wcyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInNldEZhdm9yaXRlUXVlcmllcyIsInNldFJlY2VudFF1ZXJpZXMiLCJtYXAiLCJyZWNlbnRRdWVyaWVzV2l0RmF2b3JpdGVzIiwicmVjZW50UXVlcnkiLCJ0ZXh0IiwiaXNGYXZvcml0ZSIsImZhdm9yaXRlUXVlcnkiLCJTaGVsbEhpc3RvcnlQcm92aWRlciIsImFwcElkIiwiZXJyb3IiLCJMb2ciLCJQb3BvdmVyIiwiZ2V0SWQiLCJzaG93SGVhZGVyIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInBsYWNlbWVudCIsIlBsYWNlbWVudFR5cGUiLCJCb3R0b20iLCJzaG93QXJyb3ciLCJpbml0aWFsRm9jdXMiLCJjbGFzcyIsInZpc2libGUiLCJlcXVhbCIsImJpbmRTdGF0ZSIsImNoaWxkcmVuIiwiY29udGVudCIsIkZsZXhCb3giLCJkaXJlY3Rpb24iLCJGbGV4RGlyZWN0aW9uIiwiQ29sdW1uIiwicmVuZGVyVHlwZSIsIml0ZW1zIiwiVGl0bGUiLCJ0aXRsZVN0eWxlIiwiVGl0bGVMZXZlbCIsIkg2IiwiSEJveCIsIndyYXAiLCJGbGV4V3JhcCIsIldyYXAiLCJjdHgiLCJCdXR0b24iLCJnZXRPYmplY3QiLCJwcmVzcyIsImJpbmQiLCJMaXN0Iiwibm9EYXRhIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwidGl0bGUiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkV4dHJhU21hbGwiLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRW50cmllcyIsImRlc2NyaXB0aW9uIiwiQ3VzdG9tTGlzdEl0ZW0iLCJhcmlhTGFiZWxsZWRCeSIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiX2pzeHMiLCJSb3ciLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJqdXN0aWZ5Q29udGVudCIsIkZsZXhKdXN0aWZ5Q29udGVudCIsIlNwYWNlQmV0d2VlbiIsIlRleHQiLCJ0b29sdGlwIiwid3JhcHBpbmciLCJpY29uIiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiaW5kZXgiLCJpbmRleE9mIiwiZGVwZW5kZW50cyIsIkV2ZW50RGVsZWdhdGVIb29rIiwidGFwIiwidHJpZ2dlclBYSW50ZWdyYXRpb24iLCJtb2RlIiwiTGlzdE1vZGUiLCJEZWxldGUiLCJkZWxldGUiLCJlbmFibGVkIiwibGVzc1RoYW4iLCJyZW1vdmVGcm9tRmF2b3JpdGVzIiwiYWRkVG9GYXZvcml0ZXMiLCJuZXdGYXZvcml0ZSIsInBvcCIsInJlbmRlciIsInJtIiwiY29udHJvbCIsImpzeCIsInJlbmRlclVzaW5nUmVuZGVyTWFuYWdlciIsInJlZiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGJpbmRTdGF0ZSwgZXF1YWwsIGxlbmd0aCwgbGVzc1RoYW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVTdGF0ZSwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YsIHR5cGUgU3RhdGVPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFdmVudERlbGVnYXRlSG9vayBmcm9tIFwic2FwL2ZlL2Jhc2UvRXZlbnREZWxlZ2F0ZUhvb2tcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFNoZWxsSGlzdG9yeVByb3ZpZGVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9TaGVsbEhpc3RvcnlQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCdXR0b24kUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBMaXN0IGZyb20gXCJzYXAvbS9MaXN0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RCYXNlJERlbGV0ZUV2ZW50IH0gZnJvbSBcInNhcC9tL0xpc3RCYXNlXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgU3RhbmRhcmRMaXN0SXRlbSBmcm9tIFwic2FwL20vU3RhbmRhcmRMaXN0SXRlbVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhBbGlnbkl0ZW1zLCBGbGV4RGlyZWN0aW9uLCBGbGV4SnVzdGlmeUNvbnRlbnQsIEZsZXhXcmFwLCBMaXN0TW9kZSwgUGxhY2VtZW50VHlwZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBUaXRsZUxldmVsLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IHRyaWdnZXJQWEludGVncmF0aW9uIH0gZnJvbSBcIi4vUFhGZWVkYmFja1wiO1xuXG50eXBlIFJlY2VudFR5cGUgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0aXNGYXZvcml0ZTogYm9vbGVhbjtcbn07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVySW5wdXRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJJbnB1dCBleHRlbmRzIENvbnRyb2wge1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLklucHV0XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdCRzZWFyY2hJbnB1dCE6IElucHV0O1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdHJlY29tbWVuZGVkVmFsdWVzPzogc3RyaW5nW107XG5cblx0QGV2ZW50KClcblx0cXVlcnlDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZXZlbnQoKVxuXHRlbnRlclByZXNzZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXI7XG5cblx0cHJpdmF0ZSByZXNvdXJjZUJ1bmRsZSE6IFJlc291cmNlQnVuZGxlO1xuXG5cdHNoZWxsSGlzdG9yeVByb3ZpZGVyOiBTaGVsbEhpc3RvcnlQcm92aWRlciB8IHVuZGVmaW5lZDtcblxuXHRwb3BvdmVySW52aXNpYmxlTWVzc2FnZTogSW52aXNpYmxlTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuXHQkZmF2b3JpdGVQb3BvdmVyOiBQb3BvdmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgZmF2b3JpdGVCdXR0b25DbGlja2VkID0gZmFsc2U7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRxdWVyeUNoYW5nZWQ6IGJvb2xlYW47XG5cdFx0cmVjZW50UXVlcmllczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogcmVhZG9ubHkgUmVjZW50VHlwZVtdO1xuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBzdHJpbmdbXTtcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IHN0cmluZ1tdO1xuXHR9PiA9IHtcblx0XHRxdWVyeUNoYW5nZWQ6IGZhbHNlLFxuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGZhbHNlLFxuXHRcdHJlY2VudFF1ZXJpZXM6IFtdLFxuXHRcdHJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXM6IFtdLFxuXHRcdGZhdm9yaXRlUXVlcmllczogW10gYXMgc3RyaW5nW10sXG5cdFx0cmVjb21tZW5kZWRRdWVyaWVzOiBbXSBhcyBzdHJpbmdbXVxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IHN0cmluZyB8ICgkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEVhc3lGaWx0ZXJJbnB1dD4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VmFsdWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0hpc3RvcnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQudmFsdWVPZigpO1xuXHR9XG5cblx0c2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRQbGFjZWhvbGRlcih2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLnJlY29tbWVuZGVkVmFsdWVzID8/IFtdO1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHRcdHRoaXMucG9wb3ZlckludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdFx0dGhpcy5jcmVhdGVJbnB1dCgpO1xuXHR9XG5cblx0c2V0QXNJbnZhbGlkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlU3RhdGUoVmFsdWVTdGF0ZS5XYXJuaW5nKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZVN0YXRlVGV4dChtZXNzYWdlKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdHNldEFzVmFsaWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuc2V0VmFsdWVTdGF0ZShWYWx1ZVN0YXRlLk5vbmUpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdGNyZWF0ZUlucHV0KCk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0ID0gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdHNob3dDbGVhckljb249e3RydWV9XG5cdFx0XHRcdGNoYW5nZT17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInZhbHVlXCIpIH0pO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRsaXZlQ2hhbmdlPXsoZTogSW5wdXQkTGl2ZUNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwibGl2ZUNoYW5nZVwiKTtcblx0XHRcdFx0XHRpZiAoIWUuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKSAmJiAhKHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRQbGFjZWhvbGRlcih0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlU3RhdGUoKSA9PT0gVmFsdWVTdGF0ZS5XYXJuaW5nKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEFzVmFsaWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpfVxuXHRcdFx0PjwvSW5wdXQ+XG5cdFx0KTtcblxuXHRcdGNvbnN0IGZhdm9yaXRlUG9wb3ZlciA9IHRoaXMuY3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyID0gZmF2b3JpdGVQb3BvdmVyO1xuXG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRGVwZW5kZW50KGZhdm9yaXRlUG9wb3Zlcik7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRvbmtleXVwOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZmF2b3JpdGVQb3BvdmVyICYmIHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGUua2V5ID09PSBcIlRhYlwiICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkubGVuZ3RoID09PSAwICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkgIT09IHRoaXMuJHNlYXJjaElucHV0Py5nZXRQbGFjZWhvbGRlcigpICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFBsYWNlaG9sZGVyKCkgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZSh0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0UGxhY2Vob2xkZXIoKSk7XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJsaXZlQ2hhbmdlXCIpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGUua2V5ID09PSBcIkFycm93RG93blwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wb3ZlckNvbmFpbmVyID0gdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVySXRlbXMgPSAocG9wb3ZlckNvbmFpbmVyIGFzIEZsZXhCb3gpLmdldEl0ZW1zKCk7XG5cdFx0XHRcdFx0Y29udGFpbmVySXRlbXM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uaXNGb2N1c2FibGUoKSAmJiAoaXRlbS5mb2N1cygpLCB0cnVlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvbnRhcDogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fSxcblx0XHRcdG9uZm9jdXNpbjogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlci5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0VGV4dCA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm91dGVyVGV4dDtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0SWQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5pZDtcblx0XHRcdFx0c3dpdGNoIChlLmtleSkge1xuXHRcdFx0XHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkRlbGV0ZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldElkPy5pbmNsdWRlcyhcImVhc3lGaWx0ZXJGYXZvcml0ZUl0ZW1cIikpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGEpID0+IGRhdGEudG9Mb3dlckNhc2UoKSAhPT0gdGFyZ2V0VGV4dC50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkgIT09IHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5wb3BvdmVySW52aXNpYmxlTWVzc2FnZT8uYW5ub3VuY2UoXG5cdFx0XHRcdFx0dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9FQVNZX0ZJTFRFUl9JTlBVVF9URVhUX0xJTktfUE9QT1ZFUl9BUklBXCIpLFxuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2VNb2RlLkFzc2VydGl2ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBvcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKSAmJiAoIXRoaXMuJGZhdm9yaXRlUG9wb3ZlciB8fCAhdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5pc09wZW4oKSkpIHtcblx0XHRcdC8vIE9wZW4gdGhlIGVhc3kgZmlsdGVyIHBvcG92ZXJcblx0XHRcdGlmICghdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcikge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmluaXRTaGVsbEhpc3RvcnlQcm92aWRlcigpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS5pc0hpc3RvcnlFbmFibGVkID0gdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uaXNIaXN0b3J5RW5hYmxlZCgpID8/IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSAoYXdhaXQgdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uZ2V0RmF2b3JpdGVRdWVyaWVzKCkpID8/IFtdO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gKGF3YWl0IHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmdldFJlY2VudFF1ZXJpZXMoKSkgPz8gW107XG5cdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/Lm9wZW5CeSh0aGlzLiRzZWFyY2hJbnB1dCk7XG5cdFx0fVxuXHR9XG5cblx0cmVxdWVzdEZhdm9yaXRlKGU6IEJ1dHRvbiRQcmVzc0V2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5jbG9zZSgpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShlLmdldFNvdXJjZSgpLmdldFRleHQoKSk7XG5cdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHR9XG5cblx0b25FbnRlclByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5jbG9zZSgpO1xuXHRcdHRoaXMuc3RhdGUucXVlcnlDaGFuZ2VkID0gZmFsc2U7XG5cdFx0bGV0IG1hZ2ljUXVlcnkgPSB0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKTtcblx0XHRpZiAobWFnaWNRdWVyeSA9PT0gXCJcIiAmJiB0aGlzLiRzZWFyY2hJbnB1dC5nZXRQbGFjZWhvbGRlcigpICE9PSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKSB7XG5cdFx0XHRtYWdpY1F1ZXJ5ID0gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShtYWdpY1F1ZXJ5KTtcblx0XHR9XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlU3RhdGVUZXh0KFwiXCIpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZVN0YXRlKFwiTm9uZVwiKTtcblx0XHR0aGlzLmZpcmVFdmVudChcImVudGVyUHJlc3NlZFwiLCB7IHF1ZXJ5OiBtYWdpY1F1ZXJ5IH0pO1xuXHR9XG5cblx0YWRkUmVjZW50UXVlcnkocXVlcnlTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdC8vIE5vcm1hbGl6ZSBiYWNrc2xhc2hlcyBiZWZvcmUgc3RvcmluZ1xuXHRcdHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmc/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKTtcblxuXHRcdGNvbnN0IHJlY2VudFF1ZXJ5SW5kZXggPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmluZEluZGV4KChxdWVyeSkgPT4gcXVlcnkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlTdHJpbmc/LnRvTG93ZXJDYXNlKCkpO1xuXHRcdGlmIChxdWVyeVN0cmluZyAmJiByZWNlbnRRdWVyeUluZGV4ID09PSAtMSkge1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gW3F1ZXJ5U3RyaW5nXS5jb25jYXQodGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzKTtcblx0XHRcdGlmICh0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubGVuZ3RoID4gNSkge1xuXHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuc2xpY2UoMCwgNSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChxdWVyeVN0cmluZykge1xuXHRcdFx0Y29uc3QgcmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeS50b0xvd2VyQ2FzZSgpICE9PSBxdWVyeVN0cmluZz8udG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRyZWNlbnRRdWVyaWVzLnVuc2hpZnQocXVlcnlTdHJpbmcpO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gcmVjZW50UXVlcmllcztcblx0XHR9XG5cdH1cblxuXHRvblN0YXRlQ2hhbmdlKGNoYW5nZWRQcm9wczogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJmYXZvcml0ZVF1ZXJpZXNcIikgfHwgY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwicmVjZW50UXVlcmllc1wiKSkge1xuXHRcdFx0dGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uc2V0RmF2b3JpdGVRdWVyaWVzKHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzKTtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LnNldFJlY2VudFF1ZXJpZXModGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLm1hcCgocXVlcnkpID0+IHF1ZXJ5KSk7XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubWFwKChyZWNlbnRRdWVyeSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHRleHQ6IHJlY2VudFF1ZXJ5LFxuXHRcdFx0XHRcdGlzRmF2b3JpdGU6ICEhdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmluZCgoZmF2b3JpdGVRdWVyeSkgPT4gZmF2b3JpdGVRdWVyeSA9PT0gcmVjZW50UXVlcnkpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXIgPSBhd2FpdCBTaGVsbEhpc3RvcnlQcm92aWRlci5nZXRJbnN0YW5jZSh0aGlzLmFwcElkID8/IFwiPHVua25vd25BcHA+XCIpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyBTaGVsbEhpc3RvcnlQcm92aWRlciBmb3IgZWFzeSBmaWx0ZXJcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVGYXZvcml0ZVBvcG92ZXIoKTogUG9wb3ZlciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1mYXZvcml0ZVBvcG92ZXJcIn1cblx0XHRcdFx0c2hvd0hlYWRlcj17ZmFsc2V9XG5cdFx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc9e2ZhbHNlfVxuXHRcdFx0XHRwbGFjZW1lbnQ9e1BsYWNlbWVudFR5cGUuQm90dG9tfVxuXHRcdFx0XHRzaG93QXJyb3c9e2ZhbHNlfVxuXHRcdFx0XHRpbml0aWFsRm9jdXM9e3RoaXMuJHNlYXJjaElucHV0fVxuXHRcdFx0XHRjbGFzcz17XCJzYXBGRUNvbnRyb2xzUG9wb3ZlclwifVxuXHRcdFx0XHR2aXNpYmxlPXt0aGlzLnN0YXRlLnJlY29tbWVuZGVkUXVlcmllcy5sZW5ndGggPiAwIHx8IGVxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDxGbGV4Qm94IGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Db2x1bW59IGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn0gcmVuZGVyVHlwZT17XCJCYXJlXCJ9PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX1NVR0dFU1RJT05TX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVGl0bGVCb3JkZXJcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMH1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PEhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjb21tZW5kZWRRdWVyaWVzXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwPXtGbGV4V3JhcC5XcmFwfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXt0aGlzLnN0YXRlLnJlY29tbWVuZGVkUXVlcmllcy5sZW5ndGggPiAwfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogU3RhbmRhcmRMaXN0SXRlbSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luRW5kXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLnJlcXVlc3RGYXZvcml0ZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0hCb3g+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVUaXRsZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZVN0eWxlPXtUaXRsZUxldmVsLkg2fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUaXRsZUJvcmRlclwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PExpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImZhdm9yaXRlUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9EYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuRXh0cmFTbWFsbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogU3RhbmRhcmRMaXN0SXRlbSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWQgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVJdGVtXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJGYXZvcml0ZVRpdGxlXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE9e1s8Q3VzdG9tRGF0YSBrZXk9e1widGV4dFwifSB2YWx1ZT17Y3R4LmdldE9iamVjdCgpfSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKGN0eC5nZXRPYmplY3QoKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD17XCIxMDAlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uUm93fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZW5kZXJUeXBlPXtcIkJhcmVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXtjdHguZ2V0T2JqZWN0KCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e2N0eC5nZXRPYmplY3QoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBpbmc9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcEZFQ29udHJvbHNQb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD48L1RleHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9mYXZvcml0ZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0ZJTExFRF9TVEFSXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W3RoaXMuZ2V0SWQoKSArIFwiLWVhc3lGaWx0ZXJGYXZvcml0ZUl0ZW1cIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9SZXRhaW5pbmcgdGhlIGZvY3VzIG9uIHBvcG92ZXIgZG9lc24ndCBtYWtlIHRoZSBwb3BvdmVyIGNsb3NlIG9uIGV2ZXJ5IGludGVyYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHF1ZXJ5U3RyaW5nID0gY3R4LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGluZGV4ID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuaW5kZXhPZihxdWVyeVN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChxdWVyeSkgPT4gcXVlcnkgIT09IHF1ZXJ5U3RyaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxFdmVudERlbGVnYXRlSG9va1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFwPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcImZhdm9yaXRlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MaXN0Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckxhc3RVc2VkVGl0bGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0xBU1RfVVNFRFwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGlzdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjZW50UXVlcmllc1dpdEZhdm9yaXRlc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZGU9e0xpc3RNb2RlLkRlbGV0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1t0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoZTogTGlzdEJhc2UkRGVsZXRlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gZS5nZXRQYXJhbWV0ZXIoXCJsaXN0SXRlbVwiKSBhcyBDdXN0b21MaXN0SXRlbTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtLmZvY3VzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcXVlcnlTdHJpbmcgPSBlLmdldFBhcmFtZXRlcihcImxpc3RJdGVtXCIpPy5kYXRhKFwidGV4dFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghcXVlcnlTdHJpbmcpIHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgYmVmb3JlIGNvbXBhcmluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmc/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeSAhPT0gcXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vRGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0xBU1RfVVNFRF9USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5FeHRyYVNtYWxsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlPXtJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRW50cmllc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb249e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9FTVBUWV9SRUNFTlRfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogRmxleEJveCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRJdGVtXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkudGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5cIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKS50ZXh0fSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZFRpdGxlXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPXtcIjEwMCVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Sb3d9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGbGV4QWxpZ25JdGVtcy5DZW50ZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudD17RmxleEp1c3RpZnlDb250ZW50LlNwYWNlQmV0d2Vlbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbmRlclR5cGU9e1wiQmFyZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKS50ZXh0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCkudGV4dH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBpbmc9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcEZFQ29udHJvbHNQb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD48L1RleHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGljb249e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5pc0Zhdm9yaXRlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IFwic2FwLWljb246Ly9mYXZvcml0ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwic2FwLWljb246Ly9hZGQtZmF2b3JpdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5pc0Zhdm9yaXRlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfRklMTEVEX1NUQVJcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9FTVBUWV9TVEFSVFwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2xlc3NUaGFuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJpbmRTdGF0ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJmYXZvcml0ZVF1ZXJpZXNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZEl0ZW1cIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGN0eC5nZXRPYmplY3QoKS50ZXh0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzRmF2b3JpdGUgPSBjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpc0Zhdm9yaXRlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbW92ZUZyb21GYXZvcml0ZXMocXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZFRvRmF2b3JpdGVzKHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxFdmVudERlbGVnYXRlSG9va1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFwPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgd2hlbiBjbGlja2luZyBvbiBhZGQgZmF2b3JpdGUgYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkudGV4dC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwicmVjZW50XCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MaXN0PlxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSBhcyBQb3BvdmVyO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVGcm9tRmF2b3JpdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbHRlcigoZGF0YSkgPT4gZGF0YS50b0xvd2VyQ2FzZSgpICE9PSBxdWVyeS50b0xvd2VyQ2FzZSgpKTtcblx0fVxuXG5cdHByaXZhdGUgYWRkVG9GYXZvcml0ZXMocXVlcnk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld0Zhdm9yaXRlID0gW3F1ZXJ5XS5jb25jYXQodGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuY29uY2F0KCkpO1xuXHRcdGlmIChuZXdGYXZvcml0ZS5sZW5ndGggPiA1KSB7XG5cdFx0XHRuZXdGYXZvcml0ZS5wb3AoKTtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSBuZXdGYXZvcml0ZTtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXIocm06IFJlbmRlck1hbmFnZXIsIGNvbnRyb2w6IEVhc3lGaWx0ZXJJbnB1dCk6IHZvaWQge1xuXHRcdHJldHVybiBqc3gucmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyKHJtLCBjb250cm9sLCAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8c3BhbiByZWY9e2NvbnRyb2x9IGNsYXNzPXtcInNhcEZFRWFzeUZpbHRlcklucHV0XCJ9PlxuXHRcdFx0XHRcdHtjb250cm9sLiRzZWFyY2hJbnB1dH1cblx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0KTtcblx0XHR9KTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BMENxQkEsZUFBZSxJQUFBQyxJQUFBLEdBRG5DQyxjQUFjLENBQUMsNENBQTRDLENBQUMsRUFBQUMsS0FBQSxHQUUzREMsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRSxhQUFhO0lBQUVDLFFBQVEsRUFBRSxLQUFLO0lBQUVDLFNBQVMsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3RFQyxRQUFRLENBQUM7SUFBRUosSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FHNUJELFFBQVEsQ0FBQztJQUFFSixJQUFJLEVBQUU7RUFBUSxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUczQkMsS0FBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdQRCxLQUFLLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBR1BGLEtBQUssQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FhUEMsV0FBVyxDQUFDLENBQUMsRUFBQWYsSUFBQSxDQUFBZ0IsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxRQUFBO0lBaUJkLFNBQUFuQixnQkFBWW9CLFVBQXVFLEVBQUVDLE1BQXlCLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQy9HQSxLQUFBLEdBQUFILFFBQUEsQ0FBQUksSUFBQSxPQUFNSCxVQUFVLEVBQVlDLE1BQU0sQ0FBQztNQUFDRywwQkFBQSxDQUFBRixLQUFBLGtCQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxXQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFB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
|
|
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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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import Log from "sap/base/Log";
|
|
2
2
|
import type ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
3
3
|
import type { PathInModelExpression } from "sap/fe/base/BindingToolkit";
|
|
4
|
-
import { bindState, equal, length, lessThan } from "sap/fe/base/BindingToolkit";
|
|
4
|
+
import { bindState, equal, length, lessThan, not } from "sap/fe/base/BindingToolkit";
|
|
5
5
|
import { aggregation, defineState, defineUI5Class, event, property, type PropertiesOf, type StateOf } from "sap/fe/base/ClassSupport";
|
|
6
6
|
import EventDelegateHook from "sap/fe/base/EventDelegateHook";
|
|
7
7
|
import jsx from "sap/fe/base/jsx-runtime/jsx";
|
|
@@ -77,13 +77,21 @@ export default class EasyFilterInput extends Control {
|
|
|
77
77
|
isHistoryEnabled: boolean;
|
|
78
78
|
favoriteQueries: string[];
|
|
79
79
|
recommendedQueries: string[];
|
|
80
|
+
currentExecutedQuery: string;
|
|
81
|
+
isQuerySuccessful: boolean;
|
|
82
|
+
favoriteIconName: string;
|
|
83
|
+
favoriteIconEnabled: boolean;
|
|
80
84
|
}> = {
|
|
81
85
|
queryChanged: false,
|
|
82
86
|
isHistoryEnabled: false,
|
|
83
87
|
recentQueries: [],
|
|
84
88
|
recentQueriesWitFavorites: [],
|
|
85
89
|
favoriteQueries: [] as string[],
|
|
86
|
-
recommendedQueries: [] as string[]
|
|
90
|
+
recommendedQueries: [] as string[],
|
|
91
|
+
currentExecutedQuery: "",
|
|
92
|
+
isQuerySuccessful: false,
|
|
93
|
+
favoriteIconName: "sap-icon://add-favorite",
|
|
94
|
+
favoriteIconEnabled: true
|
|
87
95
|
};
|
|
88
96
|
|
|
89
97
|
constructor(properties: string | ($ControlSettings & PropertiesOf<EasyFilterInput>), others?: $ControlSettings) {
|
|
@@ -135,25 +143,33 @@ export default class EasyFilterInput extends Control {
|
|
|
135
143
|
this.$searchInput = (
|
|
136
144
|
<Input
|
|
137
145
|
width="100%"
|
|
138
|
-
showClearIcon={
|
|
146
|
+
showClearIcon={not(bindState(this.state, "isQuerySuccessful"))}
|
|
147
|
+
showValueHelp={bindState(this.state, "isQuerySuccessful")}
|
|
148
|
+
valueHelpIconSrc={bindState(this.state, "favoriteIconName")}
|
|
149
|
+
valueHelpRequest={(): void => {
|
|
150
|
+
this.onFavoriteIconPress();
|
|
151
|
+
}}
|
|
139
152
|
change={(e): void => {
|
|
140
153
|
this.fireEvent("queryChanged", { query: e.getParameter("value") });
|
|
141
154
|
}}
|
|
142
155
|
liveChange={(e: Input$LiveChangeEvent): void => {
|
|
143
156
|
this.state.queryChanged = true;
|
|
157
|
+
// When user starts typing, hide favorite icon and show X
|
|
158
|
+
this.state.isQuerySuccessful = false;
|
|
159
|
+
if (e.getParameter("value") === "") {
|
|
160
|
+
this.state.currentExecutedQuery = "";
|
|
161
|
+
this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
|
|
162
|
+
}
|
|
144
163
|
this.fireEvent("liveChange");
|
|
145
164
|
if (!e.getSource().getValue() && !(this.$favoritePopover?.isOpen() ?? false)) {
|
|
146
165
|
this.openSuggestionPopover();
|
|
147
166
|
}
|
|
148
|
-
if (e.getParameter("value") === "") {
|
|
149
|
-
this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
|
|
150
|
-
}
|
|
151
167
|
if (this.$searchInput.getValueState() === ValueState.Warning) {
|
|
152
168
|
this.setAsValid();
|
|
153
169
|
}
|
|
154
170
|
}}
|
|
155
171
|
placeholder={this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER")}
|
|
156
|
-
|
|
172
|
+
/>
|
|
157
173
|
);
|
|
158
174
|
|
|
159
175
|
const favoritePopover = this.createFavoritePopover();
|
|
@@ -285,6 +301,23 @@ export default class EasyFilterInput extends Control {
|
|
|
285
301
|
};
|
|
286
302
|
});
|
|
287
303
|
}
|
|
304
|
+
// Update favorite icon when query or favorites change
|
|
305
|
+
if (changedProps.includes("currentExecutedQuery") || changedProps.includes("favoriteQueries")) {
|
|
306
|
+
this.updateFavoriteIcon();
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
private updateFavoriteIcon(): void {
|
|
311
|
+
const isFavorited = this.isCurrentQueryFavorited();
|
|
312
|
+
this.state.favoriteIconName = isFavorited ? "sap-icon://favorite" : "sap-icon://add-favorite";
|
|
313
|
+
this.state.favoriteIconEnabled = isFavorited || this.state.favoriteQueries.length < 5;
|
|
314
|
+
this.$searchInput?.toggleStyleClass("sapFEFavoriteIconDisabled", !this.state.favoriteIconEnabled);
|
|
315
|
+
const valueHelpBtn = this.$searchInput?.getDomRef()?.querySelector('[aria-label="Show Value Help"]') as HTMLElement | null;
|
|
316
|
+
if (valueHelpBtn) {
|
|
317
|
+
valueHelpBtn.title = this.state.favoriteIconEnabled
|
|
318
|
+
? this.resourceBundle.getText("M_EASY_FILTER_EMPTY_START")
|
|
319
|
+
: this.resourceBundle.getText("M_EASY_FILTER_MAX_FAVORITE_REACHED");
|
|
320
|
+
}
|
|
288
321
|
}
|
|
289
322
|
|
|
290
323
|
async initShellHistoryProvider(): Promise<void> {
|
|
@@ -566,6 +599,40 @@ export default class EasyFilterInput extends Control {
|
|
|
566
599
|
this.state.favoriteQueries = newFavorite;
|
|
567
600
|
}
|
|
568
601
|
|
|
602
|
+
private isCurrentQueryFavorited(): boolean {
|
|
603
|
+
const currentQuery = this.state.currentExecutedQuery.toLowerCase().trim();
|
|
604
|
+
return this.state.favoriteQueries.some((fav) => fav.toLowerCase().trim() === currentQuery);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
public setQuerySuccess(query: string): void {
|
|
608
|
+
this.state.currentExecutedQuery = query;
|
|
609
|
+
this.state.isQuerySuccessful = true;
|
|
610
|
+
this.updateFavoriteIcon();
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
public setQueryFailure(): void {
|
|
614
|
+
this.state.isQuerySuccessful = false;
|
|
615
|
+
this.state.currentExecutedQuery = "";
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
public clearQueryStatus(): void {
|
|
619
|
+
this.state.isQuerySuccessful = false;
|
|
620
|
+
this.state.currentExecutedQuery = "";
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
private onFavoriteIconPress(): void {
|
|
624
|
+
if (!this.state.favoriteIconEnabled) {
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
627
|
+
// Toggle favorite status for the current query
|
|
628
|
+
const isFavorited = this.isCurrentQueryFavorited();
|
|
629
|
+
if (isFavorited) {
|
|
630
|
+
this.removeFromFavorites(this.state.currentExecutedQuery);
|
|
631
|
+
} else {
|
|
632
|
+
this.addToFavorites(this.state.currentExecutedQuery);
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
|
|
569
636
|
static render(rm: RenderManager, control: EasyFilterInput): void {
|
|
570
637
|
return jsx.renderUsingRenderManager(rm, control, () => {
|
|
571
638
|
return (
|
|
@@ -22,7 +22,7 @@ sap.ui.define(["sap/fe/base/library", "sap/fe/controls/shortcuts/ShortcutExplana
|
|
|
22
22
|
controls: [],
|
|
23
23
|
elements: [],
|
|
24
24
|
// eslint-disable-next-line no-template-curly-in-string
|
|
25
|
-
version: "1.148.
|
|
25
|
+
version: "1.148.1",
|
|
26
26
|
noLibraryCSS: false
|
|
27
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
28
|
});
|
|
@@ -62,6 +62,8 @@ M_EASY_FILTER_POPOVER_EMPTY_LAST_USED_TITLE=No last used queries
|
|
|
62
62
|
M_EASY_FILTER_FILLED_STAR=Remove from Favorites
|
|
63
63
|
# XMSG
|
|
64
64
|
M_EASY_FILTER_EMPTY_START=Add to Favorites
|
|
65
|
+
# XMSG: Tooltip shown on the add-favorite icon when the maximum number of favorite queries has been reached
|
|
66
|
+
M_EASY_FILTER_MAX_FAVORITE_REACHED=Favorite limit reached.
|
|
65
67
|
# XMSG: Text read out by the screenreader, telling users how to move to the list under the search field containing favorite queries and last used queries, if available
|
|
66
68
|
T_EASY_FILTER_INPUT_TEXT_LINK_POPOVER_ARIA=To move to the list of favorite queries and last used queries, press the Arrow Down key
|
|
67
69
|
# XMSG
|