@sapui5/sap.fe.templates 1.120.35 → 1.120.37
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/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +24 -14
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +24 -14
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle_iw.properties +1 -1
- package/src/sap/fe/templates/messagebundle_no.properties +1 -1
package/package.json
CHANGED
|
@@ -326,27 +326,26 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
326
326
|
}
|
|
327
327
|
|
|
328
328
|
/**
|
|
329
|
-
*
|
|
329
|
+
* Add the sapUxAPObjectPageSubSectionFitContainer CSS class to every visible subsection that contains only a single GridTable or TreeTable.
|
|
330
|
+
* This makes the table fill the full height of its container so that the scrollbar appears on the table itself rather than on the page.
|
|
330
331
|
*
|
|
331
332
|
* @param subSections The sub sections to look for
|
|
332
333
|
*/;
|
|
333
334
|
_proto.checkSectionsForNonResponsiveTable = function checkSectionsForNonResponsiveTable(subSections) {
|
|
334
|
-
const changeClassForTables = (event,
|
|
335
|
+
const changeClassForTables = (event, visibleSubSection) => {
|
|
335
336
|
var _this$searchTableInBl;
|
|
336
|
-
const blocks = [...
|
|
337
|
+
const blocks = [...visibleSubSection.getBlocks(), ...visibleSubSection.getMoreBlocks()];
|
|
337
338
|
const tableType = blocks.length === 1 && ((_this$searchTableInBl = this.searchTableInBlock(blocks[0])) === null || _this$searchTableInBl === void 0 ? void 0 : _this$searchTableInBl.getType());
|
|
338
339
|
if (tableType && (tableType !== null && tableType !== void 0 && tableType.isA("sap.ui.mdc.table.GridTableType") || tableType !== null && tableType !== void 0 && tableType.isA("sap.ui.mdc.table.TreeTableType"))) {
|
|
339
340
|
//In case there is only a single table in a subSection we fit that to the whole page so that the scrollbar comes only on table and not on page
|
|
340
|
-
|
|
341
|
-
|
|
341
|
+
visibleSubSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
|
|
342
|
+
visibleSubSection.detachEvent("modelContextChange", changeClassForTables, this);
|
|
342
343
|
}
|
|
343
344
|
};
|
|
344
|
-
for (
|
|
345
|
-
if (
|
|
346
|
-
const lastVisibleSubSection = subSections[subSectionIndex];
|
|
345
|
+
for (const subSection of subSections) {
|
|
346
|
+
if (subSection.getVisible()) {
|
|
347
347
|
// We need to attach this event in order to manage the Object Page Lazy Loading mechanism
|
|
348
|
-
|
|
349
|
-
break;
|
|
348
|
+
subSection.attachEvent("modelContextChange", subSection, changeClassForTables, this);
|
|
350
349
|
}
|
|
351
350
|
}
|
|
352
351
|
}
|
|
@@ -504,8 +503,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
504
503
|
// SubSection's binding is enabled.
|
|
505
504
|
oSubSection.setBindingContext(undefined);
|
|
506
505
|
const blocks = oSubSection.getBlocks();
|
|
507
|
-
|
|
508
|
-
|
|
506
|
+
blocks.forEach(block => {
|
|
507
|
+
if (block.isA("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
|
|
508
|
+
block.content.setBindingContext(null);
|
|
509
|
+
} else {
|
|
510
|
+
block.setBindingContext(null);
|
|
511
|
+
}
|
|
512
|
+
});
|
|
509
513
|
oSubSection.getMoreBlocks().forEach(subBlock => subBlock.setBindingContext(null));
|
|
510
514
|
oSubSection.getActions().forEach(actions => actions.setBindingContext(null));
|
|
511
515
|
}
|
|
@@ -583,7 +587,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
583
587
|
_proto._handleSubSectionEnteredViewPort = function _handleSubSectionEnteredViewPort(oEvent) {
|
|
584
588
|
const oSubSection = oEvent.getParameter("subSection");
|
|
585
589
|
const blocks = oSubSection.getBlocks();
|
|
586
|
-
blocks.forEach(block =>
|
|
590
|
+
blocks.forEach(block => {
|
|
591
|
+
if (block.isA("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
|
|
592
|
+
block.content.setBindingContext(undefined);
|
|
593
|
+
} else {
|
|
594
|
+
block.setBindingContext(undefined);
|
|
595
|
+
}
|
|
596
|
+
});
|
|
587
597
|
oSubSection.getMoreBlocks().forEach(subBlock => subBlock.setBindingContext(undefined));
|
|
588
598
|
oSubSection.getActions().forEach(actions => actions.setBindingContext(undefined));
|
|
589
599
|
};
|
|
@@ -1550,4 +1560,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
1550
1560
|
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype)), _class2)) || _class);
|
|
1551
1561
|
return ObjectPageController;
|
|
1552
1562
|
}, false);
|
|
1553
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJkZWZpbmVVSTVDbGFzcyIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJtZXJnZVBhdGNoRHJhZnQiLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsInBvc2l0aXZlQWN0aW9uVmlzaWJsZSIsInBvc2l0aXZlQWN0aW9uRW5hYmxlZCIsIm9uQ2FsbEFjdGlvbiIsImVkaXRBY3Rpb25WaXNpYmxlIiwiZWRpdEFjdGlvbkVuYWJsZWQiLCJfZWRpdERvY3VtZW50IiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibGVuZ3RoIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwiaW52b2tlQWN0aW9uIiwidGhlbiIsIl9zaG93TWVzc2FnZVBvcG92ZXIiLCJiaW5kIiwiY2F0Y2giLCJvbkRhdGFQb2ludFRpdGxlUHJlc3NlZCIsIm9Tb3VyY2UiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb250cm9sQ29uZmlnIiwic0NvbGxlY3Rpb25QYXRoIiwiSlNPTiIsInBhcnNlIiwib1RhcmdldEluZm8iLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzTWV0YVBhdGgiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhTmF2aWdhdGlvbkRhdGEiLCJfZ2V0Q2hhcnRDb250ZXh0RGF0YSIsImFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm1hcCIsIm9OYXZpZ2F0aW9uRGF0YSIsIm1ldGFQYXRoIiwicGFyYW1ldGVycyIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJPYmplY3QiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwib0V2ZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNlY3Rpb25MYXlvdXQiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvT2JqZWN0UGFnZSIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsInNUaXRsZSIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib25TdGF0ZUNoYW5nZSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJoaWRlTWVzc2FnZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsInNldFByb3BlcnR5IiwicGFnZSIsInZpc2liaWxpdHkiLCJpdGVtcyIsIl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXciLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImF0dGFjaEV2ZW50IiwiX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQiLCJvSXRlbUJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwib25FeGl0IiwiZGVzdHJveSIsIm9NZXNzYWdlUG9wb3ZlciIsImlzT3BlbiIsImNsb3NlIiwiaXNLZWVwQWxpdmUiLCJzZXRLZWVwQWxpdmUiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3QiLCJ2aWV3IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsIml0ZW0iLCJmaWx0ZXIiLCJtZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsIl9zaG93TWVzc2FnZXMiLCJvVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwiY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZSIsInN1YlNlY3Rpb25zIiwiY2hhbmdlQ2xhc3NGb3JUYWJsZXMiLCJsYXN0VmlzaWJsZVN1YlNlY3Rpb24iLCJibG9ja3MiLCJnZXRCbG9ja3MiLCJnZXRNb3JlQmxvY2tzIiwidGFibGVUeXBlIiwic2VhcmNoVGFibGVJbkJsb2NrIiwiZ2V0VHlwZSIsImlzQSIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwiY29udHJvbCIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiUGFnZUNvbnRyb2xsZXIiLCJwcm90b3R5cGUiLCJhcHBseSIsIm9WaWV3RGF0YSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJDb21tb25IZWxwZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRBcHBDb21wb25lbnQiLCJvbkFmdGVyUmVuZGVyaW5nIiwiZ2V0VXNlSWNvblRhYkJhciIsInNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJfZ2V0QWxsU3ViU2VjdGlvbnMiLCJfb25CZWZvcmVCaW5kaW5nIiwiYVRhYmxlcyIsIl9maW5kVGFibGVzIiwib0ludGVybmFsTW9kZWwiLCJhQmF0Y2hHcm91cHMiLCJvRmFzdENyZWF0aW9uUm93IiwicHVzaCIsInJlYXNvbiIsIk5hdmlnYXRpb25SZWFzb24iLCJFZGl0Rmxvd0FjdGlvbiIsIl9jbG9zZVNpZGVDb250ZW50Iiwib3BDb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJzb21lIiwiZ2V0QmluZGluZyIsInJlc2V0Q2hhbmdlcyIsImkiLCJnZXRDcmVhdGlvblJvdyIsInNldEJpbmRpbmdDb250ZXh0IiwiZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uIiwiaXNGaXJzdFJlbmRlcmluZyIsImJQZXJzaXN0T1BTY3JvbGwiLCJvRGVsZWdhdGVPbkJlZm9yZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJwYWdlUmVhZHkiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiX2luaXRpYWxpemVQYWdpbmF0aW9uIiwibGlzdEJpbmRpbmciLCJfZGlzYWJsZUJsb2Nrc0JpbmRpbmdzIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZG9tRWRpdGFibGVFbGVtZW50IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsIlVJNUVsZW1lbnQiLCJjbG9zZXN0VG8iLCJfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib0ZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFBY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEVuYWJsZWQiLCJvYmplY3RQYWdlIiwiYVNlY3Rpb25zIiwiYlVzZUljb25UYWJCYXIiLCJpU2tpcCIsImJJc0luRWRpdE1vZGUiLCJiRWRpdGFibGVIZWFkZXIiLCJlZGl0YWJsZUhlYWRlckNvbnRlbnQiLCJpU2VjdGlvbiIsImFTdWJTZWN0aW9ucyIsImlTdWJTZWN0aW9uIiwiaXNWaXNpYmlsaXR5RHluYW1pYyIsImZvckVhY2giLCJzdWJCbG9jayIsImFjdGlvbnMiLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiYUZvcm1Db250YWluZXJzIiwiZ2V0Rm9ybUNvbnRhaW5lcnMiLCJnZXRDb250ZW50IiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJnZXRSZXF1aXJlZCIsImdldFZhbHVlIiwiZGVidWciLCJvTWFuZGF0b3J5RmllbGQiLCJvRmllbGRUb0ZvY3VzIiwiZ2V0Q29udGVudEVkaXQiLCJmb2N1c0luZm8iLCJnZXRGb2N1c0luZm8iLCJ0YXJnZXRJbmZvIiwic2lsZW50IiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJvdXRlclByb3h5IiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsImhpc3RvcnkiLCJiYWNrIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsImN1cnJlbnRVUkwiLCJkb2N1bWVudCIsIlVSTCIsIl9yb3V0aW5nIiwibmF2aWdhdGVCYWNrRnJvbUNvbnRleHQiLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJpbnB1dEJpbmRpbmdDb250ZXh0IiwiX3NpZGVFZmZlY3RzIiwiY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5IiwiYmluZGluZ0NvbnRleHQiLCJhSUJOQWN0aW9ucyIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJwYXJzZUN1c3RvbURhdGEiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvT2JqZWN0UGFnZVRpdGxlIiwiYUlCTkhlYWRlckFjdGlvbnMiLCJjb25jYXQiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9Nb2RlbCIsIm9GaW5hbFVJU3RhdGUiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJvQmluZGluZyIsImZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93IiwiZ2V0Q29udGV4dCIsImZuSGFuZGxlQ2hhbmdlIiwiZGV0YWNoQ2hhbmdlIiwiY29tcHV0ZUVkaXRNb2RlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjb25uZWN0Iiwib0Vycm9yIiwiX3VwZGF0ZVJlbGF0ZWRBcHBzIiwiY3VycmVudEJpbmRpbmciLCJoYW5kbGVQYXRjaFNlbnQiLCJUYWJsZVV0aWxzIiwid2hlbkJvdW5kIiwiX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMiLCJ1cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQiLCJyZWNvbW1lbmRhdGlvbnMiLCJjbGVhclJlY29tbWVuZGF0aW9ucyIsImRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZSIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwiX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0IiwiYXBwbHlBcHBTdGF0ZSIsImdldEFwcFN0YXRlSGFuZGxlciIsIndhaXRGb3IiLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImZpbmRFbGVtZW50cyIsImVsZW0iLCJtZXNzYWdlU3RyaXAiLCJiaW5kQ29udGV4dCIsIl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgiLCJnZXRCb3VuZENvbnRleHQiLCJlbnRpdHlOYW1lIiwicmVzb3VyY2VCdW5kbGUiLCJDb3JlIiwiZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlIiwiY29sbGFib3JhdGlvbk1lc3NhZ2UiLCJnZXRNZXNzYWdlTWFuYWdlciIsInJlbW92ZU1lc3NhZ2VzIiwiTWVzc2FnZSIsInR5cGUiLCJ0YXJnZXQiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJhZGRNZXNzYWdlcyIsIm9uUGFnZVJlYWR5Iiwic2V0Rm9jdXMiLCJpc0luRGlzcGxheU1vZGUiLCJvU2VsZWN0ZWRTZWN0aW9uIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiY3R4dCIsIm9CaW5kaW5nQ29udGV4dCIsImJJc1N0aWNreU1vZGUiLCJvQXBwQ29tcG9uZW50IiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInNldEJhY2tOYXZpZ2F0aW9uIiwidmlld0lkIiwiaXNFZGl0YWJsZSIsImZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMiLCJjb250ZXh0IiwiZm9yY2VGb2N1cyIsIl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiRGV2aWNlIiwic3VwcG9ydCIsInRvdWNoIiwic2F2ZUJ1dHRvbiIsImF1dG9RdWV1ZVVubG9jayIsImF1dG9RdWV1ZUxvY2siLCJpc0xvY2tlZCIsInVubG9jayIsImRldGFjaEJyb3dzZXJFdmVudCIsImF0dGFjaEJyb3dzZXJFdmVudCIsImxvY2siLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJnZXRLZXkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiX2V4ZWN1dGVUYWJTaG9ydEN1dCIsIm9FeGVjdXRpb24iLCJpU2VjdGlvbkluZGV4TWF4Iiwic0NvbW1hbmQiLCJnZXRDb21tYW5kIiwibmV3U2VjdGlvbiIsImlTZWxlY3RlZFNlY3Rpb25JbmRleCIsImluZGV4T2ZTZWN0aW9uIiwiX2dldEZvb3RlclZpc2liaWxpdHkiLCJzVmlld0lkIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsImluZGV4T2YiLCJlcnIiLCJvUmV0IiwiaXNFZGl0TW9kZSIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0Q3VycmVudEZvY3VzZWRDb250cm9sSWQiLCJpc1RyYW5zaWVudCIsImNyZWF0ZWQiLCJleGVjdXRlR2xvYmFsVmFsaWRhdGlvbiIsImJ5UGFzc1NpZGVFZmZlY3RzIiwiYXBwQ29tcG9uZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsInN5bmNUYXNrIiwiUHJvbWlzZSIsImFsbCIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImNyZWF0ZVJvb3RDb250ZXh0IiwiRHJhZnQiLCJleGVjdXRlRHJhZnRWYWxpZGF0aW9uIiwiQWN0aXZpdHlTeW5jIiwicGFyYW1zIiwibW9kZWwiLCJhd2FpdENyZWF0ZURvY3VtZW50cyIsImV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJpc0NvbGxhYm9yYXRpb25FbmFibGVkIiwiZGlhbG9nQWN0aW9uIiwiQ29sbGFib3JhdGlvbkRpc2NhcmQiLCJnZXRVc2VyQWN0aW9uIiwiY3JlYXRpb25Sb3ciLCJ0YWJsZUJpbmRpbmciLCJjb250ZXh0S2V5cyIsInN0YXJ0c1dpdGgiLCJjcmVhdGVEb2N1bWVudCIsImNyZWF0aW9uTW9kZSIsImNyZWF0ZUF0RW5kIiwic2tpcFNpZGVFZmZlY3RzIiwiYmluZGluZ3MiLCJzYXZlRG9jdW1lbnQiLCJlbnRpdHlTZXROYW1lIiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiQ29udGludWUiLCJfY2FuY2VsRG9jdW1lbnQiLCJjYW5jZWxCdXR0b24iLCJsYXN0Rm9jdXNlZENvbnRyb2xJZCIsInNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciIsImNhbmNlbERvY3VtZW50Iiwic2tpcERpc2NhcmRQb3BvdmVyIiwicHJvbWlzZVJlc3VsdCIsImFwcGx5RG9jdW1lbnQiLCJzaG93UmVsYXRlZEFwcHMiLCJ1cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMiLCJfZmluZENvbnRyb2xJblN1YlNlY3Rpb24iLCJhUGFyZW50RWxlbWVudCIsImFTdWJzZWN0aW9uIiwiYUNvbnRyb2xzIiwiYklzQ2hhcnQiLCJlbGVtZW50IiwiZ2V0QWdncmVnYXRpb24iLCJjaGFydENvbnRyb2wiLCJnZXRDaGFydENvbnRyb2wiLCJnZXRNYWluQ29udGVudCIsIl9nZXRBbGxCbG9ja3MiLCJfZmluZENoYXJ0cyIsImFDaGFydHMiLCJvQmxvY2siLCJvQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsIm9DaGFydENvbnRleHQiLCJzQ2hhcnRQYXRoIiwib0NvbnRleHREYXRhIiwib0NoYXJ0Q29udGV4dERhdGEiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX21lcmdlTXVsdGlwbGVDb250ZXh0cyIsIm9QYWdlQ29udGV4dCIsImFMaW5lQ29udGV4dCIsImFBdHRyaWJ1dGVzIiwiYVBhZ2VBdHRyaWJ1dGVzIiwic01ldGFQYXRoTGluZSIsInNQYXRoTGluZSIsInNQYWdlUGF0aCIsIm9NZXRhTW9kZWwiLCJzTWV0YVBhdGhQYWdlIiwicmVwbGFjZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwic0tleSIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJpbnRlcm5hbE1vZGVsIiwicGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJiaW5kaW5nVG9Vc2UiLCJwYWdpbmF0b3IiLCJpbml0aWFsaXplIiwiX3NldEJyZWFkY3J1bWJMaW5rcyIsImFQcm9taXNlcyIsImFTa2lwUGFyYW1ldGVyaXplZCIsInNOZXdQYXRoIiwiYVBhdGhQYXJ0cyIsInNwbGl0Iiwic1BhdGgiLCJzaGlmdCIsInNwbGljZSIsInNQYXRoUGFydCIsIm9Sb290Vmlld0NvbnRyb2xsZXIiLCJzUGFyYW1ldGVyUGF0aCIsImJSZXN1bHRDb250ZXh0IiwiZ2V0VGl0bGVJbmZvRnJvbVBhdGgiLCJ0aXRsZUhpZXJhcmNoeUluZm9zIiwiaGllcmFyY2h5UG9zaXRpb24iLCJvTGluayIsInRpdGxlSGllcmFyY2h5SW5mbyIsImdldExpbmtzIiwiTGluayIsInNldFRleHQiLCJzZXRIcmVmIiwiZW5jb2RlVVJJIiwiYWRkTGluayIsIm9EYXRhUG9pbnRzIiwiZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJnZXRPdXRib3VuZHMiLCJvU2hlbGxTZXJ2aWNlcyIsInJlcXVlc3RPYmplY3QiLCJmbkdldExpbmtzIiwiZm5PbkVycm9yIiwiZm5TZXRMaW5rRW5hYmxlbWVudCIsImlkIiwiYVN1cHBvcnRlZExpbmtzIiwic0xpbmtJZCIsInN1cHBvcnRlZCIsIm9TdWJEYXRhUG9pbnRzIiwib1BhZ2VEYXRhIiwib0RhdGFQb2ludCIsIm9MaW5rQ29udGV4dCIsIm9MaW5rRGF0YSIsIm9NaXhlZENvbnRleHQiLCJtZXJnZSIsIm9NYXBwaW5nIiwic01haW5Qcm9wZXJ0eSIsInNNYXBwZWRQcm9wZXJ0eSIsImhhc093blByb3BlcnR5Iiwib05ld01hcHBpbmciLCJpbmNsdWRlcyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsImFMaW5rcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNYXNzRWRpdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWFzc0VkaXRcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdlUmVhZHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2VSZWFkeVwiO1xuaW1wb3J0IFBhZ2luYXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBBY3Rpdml0eVN5bmMsIHsgY29ubmVjdCwgZGlzY29ubmVjdCwgaXNDb25uZWN0ZWQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eVN5bmNcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB7IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvUmVjb21tZW5kYXRpb25zL0NvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5ibG9ja1wiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9EZWxlZ2F0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIENoYXJ0QVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0QVBJXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUFQSVwiO1xuaW1wb3J0IFRhYmxlSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlSGVscGVyXCI7XG5pbXBvcnQgVGFibGVVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9VdGlsc1wiO1xuaW1wb3J0IFNlbGVjdGlvblZhcmlhbnQgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL1NlbGVjdGlvblZhcmlhbnRcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBDb2xsYWJvcmF0aW9uRGlzY2FyZCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbXBvbmVudHMvQ29sbGFib3JhdGlvbkRpc2NhcmREaWFsb2dcIjtcbmltcG9ydCB0eXBlIFN1YlNlY3Rpb25CbG9jayBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL2NvbnRyb2xzL1N1YlNlY3Rpb25CbG9ja1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IHR5cGUgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBUYWJsZVR5cGVCYXNlIGZyb20gXCJzYXAvdWkvbWRjL3RhYmxlL1RhYmxlVHlwZUJhc2VcIjtcbmltcG9ydCB0eXBlIEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9CaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIENvbnRleHQsIGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBCcmVhZENydW1icyBmcm9tIFwic2FwL3V4YXAvQnJlYWRDcnVtYnNcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29tcG9uZW50IGZyb20gXCIuL0NvbXBvbmVudFwiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXJPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCBQYWdpbmF0b3JPdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvUGFnaW5hdG9yXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxudHlwZSBCaW5kaW5nUGFyYW1zID0ge1xuXHRyZWRpcmVjdGVkVG9Ob25EcmFmdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZztcblx0c2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IFByb2dyYW1taW5nTW9kZWwgPSBGRUxpYnJhcnkuUHJvZ3JhbW1pbmdNb2RlbDtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUpKVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGFnaW5hdG9yLm92ZXJyaWRlKFBhZ2luYXRvck92ZXJyaWRlKSlcblx0cGFnaW5hdG9yITogUGFnaW5hdG9yO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cblx0cHJvdGVjdGVkIGV4dGVuc2lvbkFQST86IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgY3VycmVudEJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbjogYW55O1xuXG5cdHByaXZhdGUgY29sbGFib3JhdGlvbk1lc3NhZ2U/OiBNZXNzYWdlO1xuXG5cdHByaXZhdGUgbWVyZ2VQYXRjaERyYWZ0ID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBhdXRvUXVldWVMb2NrOiBSZXR1cm5UeXBlPE9EYXRhTW9kZWxbXCJsb2NrXCJdPiB8IHVuZGVmaW5lZDtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCkge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIiwgeyBwYWdlOiB0cnVlIH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwc1wiLCB7XG5cdFx0XHR2aXNpYmlsaXR5OiBmYWxzZSxcblx0XHRcdGl0ZW1zOiBudWxsXG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIsIHRoaXMuX2dldEJhdGNoR3JvdXBzRm9yVmlldygpKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHQvL0F0dGFjaGluZyB0aGUgZXZlbnQgdG8gbWFrZSB0aGUgc3Vic2VjdGlvbiBjb250ZXh0IGJpbmRpbmcgYWN0aXZlIHdoZW4gaXQgaXMgdmlzaWJsZS5cblx0XHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50KFwic3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydFwiLCB0aGlzLl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0LmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKTtcblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24ub0l0ZW1CaW5kaW5nLmF0dGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdEVuYWJsZWRcIiwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0VmlzaWJsZVwiLCB0cnVlKTtcblx0fVxuXG5cdG9uRXhpdCgpIHtcblx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIG9mIE9iamVjdC5rZXlzKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSkge1xuXHRcdFx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0uZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWxldGUgdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cblx0XHRjb25zdCBvTWVzc2FnZVBvcG92ZXIgPSB0aGlzLm1lc3NhZ2VCdXR0b24gPyB0aGlzLm1lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyIDogbnVsbDtcblx0XHRpZiAob01lc3NhZ2VQb3BvdmVyICYmIG9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0b01lc3NhZ2VQb3BvdmVyLmNsb3NlKCk7XG5cdFx0fVxuXHRcdC8vd2hlbiBleGl0aW5nIHdlIHNldCBrZWVwQWxpdmUgY29udGV4dCB0byBmYWxzZVxuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblx0XHRpZiAoaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKSB7XG5cdFx0XHRkaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAgb24gdGhlIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKi9cblx0X2ZuU2hvd09QTWVzc2FnZSgpIHtcblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXJcblx0XHRcdC5nZXRJdGVtcygpXG5cdFx0XHQubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpLmdldE9iamVjdCgpKVxuXHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAoZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRleHRlbnNpb25BUEkuX3Nob3dNZXNzYWdlcyhtZXNzYWdlcywgXCJCYWNrZW5kXCIpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCB0aGUgbGFzdCB2aXNpYmxlIHN1YnNlY3Rpb24gYW5kIGFkZCB0aGUgc2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyIENTUyBjbGFzcyBpZiBpdCBjb250YWlucyBvbmx5IGEgR3JpZFRhYmxlIG9yIGEgVHJlZVRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKSB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCBsYXN0VmlzaWJsZVN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBibG9ja3MgPSBbLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGNvbnN0IHRhYmxlVHlwZSA9IGJsb2Nrcy5sZW5ndGggPT09IDEgJiYgKHRoaXMuc2VhcmNoVGFibGVJbkJsb2NrKGJsb2Nrc1swXSBhcyBTdWJTZWN0aW9uQmxvY2spPy5nZXRUeXBlKCkgYXMgVGFibGVUeXBlQmFzZSk7XG5cdFx0XHRpZiAodGFibGVUeXBlICYmICh0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSB8fCB0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuVHJlZVRhYmxlVHlwZVwiKSkpIHtcblx0XHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzdWJTZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb25JbmRleCA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IHN1YlNlY3Rpb25JbmRleCA+PSAwOyBzdWJTZWN0aW9uSW5kZXgtLSkge1xuXHRcdFx0aWYgKHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF0uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3RWaXNpYmxlU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF07XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYXR0YWNoIHRoaXMgZXZlbnQgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBPYmplY3QgUGFnZSBMYXp5IExvYWRpbmcgbWVjaGFuaXNtXG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24sIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgYSB0YWJsZSBpbiBibG9ja3Mgb2Ygc2VjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGJsb2NrIE9uZSBzdWIgc2VjdGlvbiBibG9ja1xuXHQgKiBAcmV0dXJucyBUYWJsZSBpZiBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgc2VhcmNoVGFibGVJbkJsb2NrKGJsb2NrOiBTdWJTZWN0aW9uQmxvY2spIHtcblx0XHRjb25zdCBjb250cm9sID0gYmxvY2suY29udGVudDtcblx0XHRsZXQgdGFibGVBUEk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChibG9jay5pc0EoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHQvLyBUaGUgdGFibGUgbWF5IGN1cnJlbnRseSBiZSBzaG93biBpbiBhIGZ1bGwgc2NyZWVuIGRpYWxvZywgd2UgY2FuIHRoZW4gZ2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIFRhYmxlQVBJXG5cdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdGlmIChjb250cm9sLmlzQShcInNhcC5tLlBhbmVsXCIpICYmIGNvbnRyb2wuZGF0YShcIkZ1bGxTY3JlZW5UYWJsZVBsYWNlSG9sZGVyXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wgYXMgVGFibGVBUEk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGFibGVBUEkpIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlQVBJLmNvbnRlbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5vVmlld0RhdGE/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yTm9uUmVzcG9uc2l2ZVRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBDb250ZXh0LCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyA9IHt9KTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpLFxuXHRcdFx0aVZpZXdMZXZlbCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLnJlYXNvbiAhPT0gTmF2aWdhdGlvblJlYXNvbi5FZGl0Rmxvd0FjdGlvbikge1xuXHRcdFx0dGhpcy5fY2xvc2VTaWRlQ29udGVudCgpO1xuXHRcdH1cblx0XHRjb25zdCBvcENvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0aWYgKFxuXHRcdFx0b3BDb250ZXh0ICYmXG5cdFx0XHRvcENvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSAmJlxuXHRcdFx0IWFCYXRjaEdyb3Vwcy5zb21lKG9wQ29udGV4dC5nZXRNb2RlbCgpLmhhc1BlbmRpbmdDaGFuZ2VzLmJpbmQob3BDb250ZXh0LmdldE1vZGVsKCkpKVxuXHRcdCkge1xuXHRcdFx0LyogXHRJbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nIGNoYW5nZXMgZm9yIHRoZSBjcmVhdGlvbiByb3cgYW5kIG5vIG90aGVycyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRcdFx0VE9ETzogdGhpcyBpcyBqdXN0IGEgcXVpY2sgc29sdXRpb24sIHRoaXMgbmVlZHMgdG8gYmUgcmV3b3JrZWRcblx0XHRcdFx0XHRcdFx0XHQqL1xuXG5cdFx0XHRvcENvbnRleHQuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdH1cblxuXHRcdC8vIEZvciBub3cgd2UgaGF2ZSB0byBzZXQgdGhlIGJpbmRpbmcgY29udGV4dCB0byBudWxsIGZvciBldmVyeSBmYXN0IGNyZWF0aW9uIHJvd1xuXHRcdC8vIFRPRE86IEdldCByaWQgb2YgdGhpcyBjb2Rpbmcgb3IgbW92ZSBpdCB0byBhbm90aGVyIGxheWVyIC0gdG8gYmUgZGlzY3Vzc2VkIHdpdGggTURDIGFuZCBtb2RlbFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b0Zhc3RDcmVhdGlvblJvdyA9IGFUYWJsZXNbaV0uZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdGlmIChvRmFzdENyZWF0aW9uUm93KSB7XG5cdFx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cuc2V0QmluZGluZ0NvbnRleHQobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvbiBzbyB0aGF0IGJpbmRpbmdzIGFyZSBlbmFibGVkIGR1cmluZyBuYXZpZ2F0aW9uIHRocm91Z2ggcGFnaW5hdG9yIGJ1dHRvbnMsIGFzIHRoZXJlIGlzIG5vIHZpZXcgcmVyZW5kZXJpbmcvcmViaW5kXG5cdFx0Y29uc3QgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKCEob09iamVjdFBhZ2UgYXMgYW55KS5pc0ZpcnN0UmVuZGVyaW5nKCkgJiYgIW1QYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGwpIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG51bGwgYXMgYW55KTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50T25jZShcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24pO1xuXG5cdFx0Ly8gaWYgdGhlIHN0cnVjdHVyZSBvZiB0aGUgT2JqZWN0UGFnZUxheW91dCBpcyBjaGFuZ2VkIHRoZW4gc2Nyb2xsIHRvIHByZXNlbnQgU2VjdGlvblxuXHRcdC8vIEZJWE1FIElzIHRoaXMgcmVhbGx5IHdvcmtpbmcgYXMgaW50ZW5kZWQgPyBJbml0aWFsbHkgdGhpcyB3YXMgb25CZWZvcmVSZW5kZXJpbmcsIGJ1dCBuZXZlciB0cmlnZ2VyZWQgb25CZWZvcmVSZW5kZXJpbmcgYmVjYXVzZSBpdCB3YXMgcmVnaXN0ZXJlZCBhZnRlciBpdFxuXHRcdGNvbnN0IG9EZWxlZ2F0ZU9uQmVmb3JlID0ge1xuXHRcdFx0b25BZnRlclJlbmRlcmluZzogZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uXG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hZGRFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlLCB0aGlzKTtcblx0XHR0aGlzLnBhZ2VSZWFkeS5hdHRhY2hFdmVudE9uY2UoXCJwYWdlUmVhZHlcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0b09iamVjdFBhZ2UucmVtb3ZlRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSk7XG5cdFx0fSk7XG5cblx0XHQvL1NldCB0aGUgQmluZGluZyBmb3IgUGFnaW5hdG9ycyB1c2luZyBMaXN0QmluZGluZyBJRFxuXHRcdHRoaXMuX2luaXRpYWxpemVQYWdpbmF0aW9uKG9Db250ZXh0LCBvSW50ZXJuYWxNb2RlbCwgbVBhcmFtZXRlcnM/Lmxpc3RCaW5kaW5nKTtcblxuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHR0aGlzLl9kaXNhYmxlQmxvY2tzQmluZGluZ3Mob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyBhbnkpLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHRvTmF2Q29udGFpbmVyLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBnZXRGaXJzdEVkaXRhYmxlSW5wdXQoKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZG9tRWRpdGFibGVFbGVtZW50ID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk7XG5cdFx0cmV0dXJuIGRvbUVkaXRhYmxlRWxlbWVudCA/IFVJNUVsZW1lbnQuY2xvc2VzdFRvKGRvbUVkaXRhYmxlRWxlbWVudCkgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlOiBhbnkpIHtcblx0XHRsZXQgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhQWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgJiYgb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKS5nZXRBY3Rpb25zKCk7XG5cdFx0aWYgKGFBY3Rpb25zICYmIGFBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFBY3Rpb25zLmZpbmQoZnVuY3Rpb24gKG9BY3Rpb246IGFueSkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0aWYgKG9BY3Rpb24uaXNBKFwic2FwLmZlLm1hY3Jvcy5zaGFyZS5TaGFyZUFQSVwiKSkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlQVBJIGRvZXMgbm90IGhhdmUgYSBkaXNhYmxlIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiBpdCBpcyBkaXNiYWxlZCBvciBub3Rcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIW9BY3Rpb24uaXNBKFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhb0FjdGlvbi5pc0EoXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpICYmIG9BY3Rpb24uZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogRGlzYWJsZSB0aGUgYmluZGluZ3Mgb2YgYmxvY2tzIGluIG9iamVjdCBwYWdlIGxheW91dCBiYXNlZCBvbiBpdHMgb3ZlcmFsbCBjb250ZW50LlxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqZWN0UGFnZSBPYmplY3QgUGFnZSBMYXlvdXQgY29udHJvbFxuXHQgKi9cblx0X2Rpc2FibGVCbG9ja3NCaW5kaW5ncyh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb2JqZWN0UGFnZTogT2JqZWN0UGFnZUxheW91dCk6IHZvaWQge1xuXHRcdGNvbnN0IGFTZWN0aW9ucyA9IG9iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRjb25zdCBiVXNlSWNvblRhYkJhciA9IG9iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdGxldCBpU2tpcCA9IDI7XG5cdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBPYmplY3RQYWdlQ29tcG9uZW50KS5lZGl0YWJsZUhlYWRlckNvbnRlbnQ7XG5cdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRpZiAoaVNraXAgPCAxIHx8IChiVXNlSWNvblRhYkJhciAmJiAoaVNlY3Rpb24gPiAxIHx8IChpU2VjdGlvbiA9PT0gMSAmJiAhYkVkaXRhYmxlSGVhZGVyICYmICFiSXNJbkVkaXRNb2RlKSkpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNbaVN1YlNlY3Rpb25dO1xuXHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdC8vIFN1YlNlY3Rpb24ncyBiaW5kaW5nIGlzIGVuYWJsZWQuXG5cdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgY29udGVudHMgYmluZGluZyBpcyBkaXNhYmxlZC5cblx0XHRcdFx0XHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4gYmxvY2suc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpLmZvckVhY2goKHN1YkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9ucykgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dChudWxsKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKTtcblxuXHRcdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRcdGZvciAobGV0IGJsb2NrID0gMDsgYmxvY2sgPCBhQmxvY2tzLmxlbmd0aDsgYmxvY2srKykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGFCbG9ja3NbYmxvY2tdLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50ICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKSAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtQ29udGFpbmVyID0gMDsgZm9ybUNvbnRhaW5lciA8IGFGb3JtQ29udGFpbmVycy5sZW5ndGg7IGZvcm1Db250YWluZXIrKykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBhRm9ybUNvbnRhaW5lcnNbZm9ybUNvbnRhaW5lcl0uZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1FbGVtZW50ID0gMDsgZm9ybUVsZW1lbnQgPCBhRm9ybUVsZW1lbnRzLmxlbmd0aDsgZm9ybUVsZW1lbnQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gYUZvcm1FbGVtZW50c1tmb3JtRWxlbWVudF0uZ2V0RmllbGRzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IGZpZWxkIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJbnB1dEJhc2UgKGUuZy4gY291bGQgYmUgYSBUZXh0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGEgZ2V0UmVxdWlyZWQgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQgJiYgYUZpZWxkc1swXS5nZXRSZXF1aXJlZCgpICYmICFhRmllbGRzWzBdLmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhRmllbGRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGluaXRpYWwgZm9jdXMgaW4gZWRpdCBtb2RlLlxuXHQgKlxuXHQgKiBAcGFyYW0gYVN1YlNlY3Rpb25zIE9iamVjdCBwYWdlIHN1YiBzZWN0aW9uc1xuXHQgKi9cblx0X3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdHNldFRpbWVvdXQoXG5cdFx0XHRmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpOiB2b2lkIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdFx0XHRsZXQgb0ZpZWxkVG9Gb2N1cztcblx0XHRcdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvTWFuZGF0b3J5RmllbGQuY29udGVudC5nZXRDb250ZW50RWRpdCgpWzBdO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSB0aGlzLmdldEZpcnN0RWRpdGFibGVJbnB1dCgpID8/IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9GaWVsZFRvRm9jdXMpIHtcblx0XHRcdFx0XHRjb25zdCBmb2N1c0luZm8gPSBvRmllbGRUb0ZvY3VzLmdldEZvY3VzSW5mbygpIGFzIHsgdGFyZ2V0SW5mbzogb2JqZWN0IH07XG5cdFx0XHRcdFx0Zm9jdXNJbmZvLnRhcmdldEluZm8gPSB7IHNpbGVudDogdHJ1ZSB9O1xuXHRcdFx0XHRcdGlmIChvRmllbGRUb0ZvY3VzLmlzQShcInNhcC51aS5tZGMuZmllbGQuRmllbGRJbnB1dFwiKSkge1xuXHRcdFx0XHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9GaWVsZFRvRm9jdXMuZ2V0UGFyZW50KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMuZm9jdXMoZm9jdXNJbmZvKTtcblx0XHRcdFx0fVxuXHRcdFx0fS5iaW5kKHRoaXMpLFxuXHRcdFx0MFxuXHRcdCk7XG5cdH1cblxuXHRfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydChvRXZlbnQ6IGFueSkge1xuXHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0Y29uc3QgYmxvY2tzID0gb1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkgYXMgU3ViU2VjdGlvbkJsb2NrW107XG5cdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiBibG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCkuZm9yRWFjaCgoc3ViQmxvY2s6IFN1YlNlY3Rpb25CbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnM6IENvbnRyb2wpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKSk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS5jaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkpIHtcblx0XHRcdC8vIEJhY2sgbmF2IHdpbGwga2VlcCB0aGUgc2FtZSBjb250ZXh0IC0tPiBubyBuZWVkIHRvIGRpc3BsYXkgdGhlIGRpYWxvZ1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFVSTCA9IGRvY3VtZW50LlVSTDtcblx0XHRcdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBhZ2UgaW4gdGhlIGhpc3RvcnksIGhpc3RvcnkuYmFjayBkb2VzIG5vdGhpbmcuXG5cdFx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIHVzZSBuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCwgdGhhdCB3aWxsIGRpc3BsYXkgdGhlIGhvbWUgcGFnZVxuXHRcdFx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKGRvY3VtZW50LlVSTCA9PT0gY3VycmVudFVSTCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LCA1MDApO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gKHZpZXc/LmdldFZpZXdEYXRhKCkgYXMgVmlld0RhdGEpPy52aWV3TGV2ZWw7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cblx0XHR0aGlzLl9zaWRlRWZmZWN0cy5jbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkoKTtcblxuXHRcdC8vIFRPRE86IHRoaXMgaXMgb25seSBhIHRlbXAgc29sdXRpb24gYXMgbG9uZyBhcyB0aGUgbW9kZWwgZml4IHRoZSBjYWNoZSBpc3N1ZSBhbmQgd2UgdXNlIHRoaXMgYWRkaXRpb25hbFxuXHRcdC8vIGJpbmRpbmcgd2l0aCBvd25SZXF1ZXN0XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBvT2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSBhbmQgdXBkYXRlIGFjdGlvbiBlbmFibGVtZW50IGFjY29yZGluZ2x5XG5cdFx0XHRcdC8vIFdpbGwgdG8gYmUgZml4ZWQgd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTI0MzE4XG5cdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEoRGVsZWdhdGVVdGlsLmdldEN1c3RvbURhdGEob1RhYmxlLCBcIm9wZXJhdGlvbkF2YWlsYWJsZU1hcFwiKSlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRBY3Rpb25SdW50aW1lLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBbXSwgXCJ0YWJsZVwiKTtcblxuXHRcdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBhbnksIG9GaW5hbFVJU3RhdGU6IGFueTtcblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChiaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0b01vZGVsID0gYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKTtcblxuXHRcdFx0Ly8gQ29tcHV0ZSBFZGl0IE1vZGVcblx0XHRcdG9GaW5hbFVJU3RhdGUgPSB0aGlzLmVkaXRGbG93LmNvbXB1dGVFZGl0TW9kZShiaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdFx0XHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIGluIGNhc2Ugd2Ugc3dpdGNoIHRvIGFub3RoZXIgZWxlbWVudCAoZS5nLiBpbiBGQ0wpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZmluYWwgVUkgU3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHNcblx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcgJiYgYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpKSB8fCBiaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwge30sIHRoaXMuZWRpdEZsb3cuaGFuZGxlUGF0Y2hTZW50LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IG9CaW5kaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRcdC8vIGFjY2VzcyBiaW5kaW5nIG9ubHkgYWZ0ZXIgdGFibGUgaXMgYm91bmRcblx0XHRcdFx0VGFibGVVdGlscy53aGVuQm91bmQob1RhYmxlKVxuXHRcdFx0XHRcdC50aGVuKGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucylcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgdGFibGUgdG8gYmUgYm91bmRcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYmluZGluZyBpcyByZWFkeSBoZW5jZSBjYWxsaW5nIGl0IGluIG9uQWZ0ZXJCaW5kaW5nXG5cdFx0XHQob09iamVjdFBhZ2UgYXMgYW55KS5fdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cygpO1xuXG5cdFx0XHQvL1RvIENvbXB1dGUgdGhlIEVkaXQgQmluZGluZyBvZiB0aGUgc3ViT2JqZWN0IHBhZ2UgdXNpbmcgcm9vdCBvYmplY3QgcGFnZSwgY3JlYXRlIGEgY29udGV4dCBmb3IgZHJhZnQgcm9vdCBhbmQgdXBkYXRlIHRoZSBlZGl0IGJ1dHRvbiBpbiBzdWIgT1AgdXNpbmcgdGhlIGNvbnRleHRcblx0XHRcdEFjdGlvblJ1bnRpbWUudXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdFx0Ly8gd2UgYXJlIGNsZWFyaW5nIGFueSBwcmV2aW91cyBkYXRhIGZyb20gcmVjb21tZW5kYXRpb25zIGV2ZXJ5IHRpbWUgd2UgY29tZSB0byBuZXcgT1Bcblx0XHQvLyBzbyB0aGF0IGNhY2hlZCByZWNvbW1lbmRhdGlvbnMgYXJlIG5vdCBzaG93biB0byB1c2VyXG5cdFx0aWYgKHZpZXdMZXZlbCAmJiB2aWV3TGV2ZWwgPT09IDEpIHtcblx0XHRcdG9GaW5hbFVJU3RhdGU/LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlY29tbWVuZGF0aW9ucy5jbGVhclJlY29tbWVuZGF0aW9ucygpO1xuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHR0aGlzLmRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShtUGFyYW1ldGVycz8ucmVkaXJlY3RlZFRvTm9uRHJhZnQpO1xuXHRcdHRoaXMuX3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0KCk7XG5cblx0XHRjb25zdCBhcHBseUFwcFN0YXRlID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRBcHBTdGF0ZUhhbmRsZXIoKS5hcHBseUFwcFN0YXRlKHZpZXcuZ2V0SWQoKSwgdmlldyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkud2FpdEZvcihhcHBseUFwcFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCBvZiB0aGUgTWVzc2FnZXN0cmlwIE9QLlxuXHQgKi9cblx0X3NldE9QTWVzc2FnZVN0cmlwSW50ZXJuYWxDb250ZXh0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0aW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIsIHsgLi4uaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiTWVzc2FnZVN0cmlwXCIpIH0pO1xuXHRcdGlmIChpbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0KG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgdW5rbm93biBhcyBDb250cm9sKVxuXHRcdFx0XHQ/LmZpbmRFbGVtZW50cyh0cnVlLCAoZWxlbTogQ29udHJvbCkgPT4gZWxlbS5pc0EoXCJzYXAubS5NZXNzYWdlU3RyaXBcIikpXG5cdFx0XHRcdC5mb3JFYWNoKChtZXNzYWdlU3RyaXA6IFVJNUVsZW1lbnQpID0+IHtcblx0XHRcdFx0XHRtZXNzYWdlU3RyaXAuc2V0QmluZGluZ0NvbnRleHQoXG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdFx0XHQuYmluZENvbnRleHQodGhpcy5nZXRFeHRlbnNpb25BUEkoKS5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHRcdFx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSEsXG5cdFx0XHRcdFx0XHRcImludGVybmFsXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBhIG1lc3NhZ2Ugc3RyaXAgaWYgYSByZWRpcmVjdGlvbiB0byBhIG5vbi1kcmFmdCBlbGVtZW50IGhhcyBiZWVuIGRvbmUuXG5cdCAqIFJlbW92ZSB0aGUgbWVzc2FnZSBzdHJpcCBpbiBjYXNlIHdlIG5hdmlnYXRlIHRvIGFub3RoZXIgb2JqZWN0IHBhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIEVudGl0eSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2Vcblx0ICovXG5cdGRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShlbnRpdHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSkge1xuXHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLnJlbW92ZU1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0XHRkZWxldGUgdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZTtcblx0XHR9XG5cblx0XHRpZiAoZW50aXR5TmFtZSkge1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlJFUk9VVEVEX05BVklHQVRJT05fVE9fU0FWRURfVkVSU0lPTlwiLCBbZW50aXR5TmFtZV0pLFxuXHRcdFx0XHR0eXBlOiBcIkluZm9ybWF0aW9uXCIsXG5cdFx0XHRcdHRhcmdldDogdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0fSk7XG5cdFx0XHRzYXAudWkuZ2V0Q29yZSgpLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFzeW5jIG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiB7IGZvcmNlRm9jdXM6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCkgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICF0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSBDb3JlLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRjb25zdCBjdHh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvLyBzZXR0aW5nIHRoaXMgbW9kZWwgZGF0YSB0byBiZSB1c2VkIGZvciByZWNvbW1lbmRhdGlvbnMgYmluZGluZ1xuXHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvY3VycmVudEN0eHRcIiwgY3R4dCk7XG5cblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoIWJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCgpID0+IHRoaXMuX29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9CaW5kaW5nQ29udGV4dCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdC8vIGRvIG5vdCByZXF1ZXN0IHJlY29tbWVuZGF0aW9ucyBhY3Rpb24gaWYgd2UgYXJlIGluIERpc3BsYXkgbW9kZVxuXHRcdGNvbnN0IGlzRWRpdGFibGUgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0aWYgKGlzRWRpdGFibGUgJiYgb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFuZEFwcGx5UmVjb21tZW5kYXRpb25zKFt7IGNvbnRleHQ6IG9CaW5kaW5nQ29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCB9XSk7XG5cdFx0fVxuXG5cdFx0aWYgKG1QYXJhbWV0ZXJzPy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRzZXRGb2N1cygpO1xuXHRcdH1cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXG5cdFx0Ly9UaGUgZm9sbG93aW5nIGNvZGluZyBpcyBkb25lIHRvIG1lcmdlIGFuIG9wZW4gUEFUQ0ggYW5kIHRoZSBkcmFmdHByZXBhcmUvZHJhZnRhY3RpdmF0ZVxuXHRcdC8vcmVxdWVzdCBpbnRvIG9uZSAkYmF0Y2ggcmVxdWVzdFxuXHRcdC8vVG8gYWNoaWV2ZSB0aGlzIHRoZSAkYXV0byBxdWV1ZSBpcyBsb2NrZWQgYXQgdGhlIG1vdXNlZG93biBldmVudCAoYmVmb3JlIGZvY3Vzb3V0KSBpblxuXHRcdC8vb3JkZXIgdG8gd2FpdCBmb3IgdGhlIGRyYWZ0IHJlcXVlc3QgaXNzdWVkIGluIHRoZSBzYXZlIGJ1dHRvbnMgcHJlc3MgZXZlbnQgaGFuZGxlci5cblx0XHQvL1RoZSBxdWV1ZSBpcyByZWxlYXNlZCBhZ2FpbiBkdXJpbmcgbW91c2V1cCAoYmVmb3JlIHByZXNzKS5cblx0XHQvL1RoaXMgaXMgb25seSBwb3NzaWJsZSBvbiBub24gdG91Y2ggZGV2aWNlcyBiZWNhdXNlIG9uIHRvdWNoIGRldmljZXMgdGhlIGZvY3Vzb3V0IGFuZCBwcmVzc1xuXHRcdC8vZXZlbnRzIGFyZSBib3RoIGluaXRpYXRlZCBhdCB0b3VjaGVuZCBieSBzYXAubS5CdXR0b24uXG5cdFx0Ly9tb3VzZUhhbmRsZXJTZXQgaXMgdXNlZCB0byBlbnN1cmVzIHRoYXQgdGhlIGV2ZW50IGhhbmRsZXJzIGFyZSBhdHRhY2hlZCBvbmx5IG9uZSB0aW1lLlxuXHRcdC8vVGhlcmUgY2FuIGJlIG11bHRpcGxlIG9uUGFnZVJlYWR5IGUuZy4gd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBlZGl0L2Rpc3BsYXkgbW9kZVxuXHRcdGlmICghdGhpcy5tZXJnZVBhdGNoRHJhZnQgJiYgIURldmljZS5zdXBwb3J0LnRvdWNoKSB7XG5cdFx0XHRjb25zdCBzYXZlQnV0dG9uID0gb1ZpZXcuYnlJZChcImZlOjpGb290ZXJCYXI6OlN0YW5kYXJkQWN0aW9uOjpTYXZlXCIpIGFzIEJ1dHRvbjtcblx0XHRcdGNvbnN0IGF1dG9RdWV1ZVVubG9jayA9ICgpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuYXV0b1F1ZXVlTG9jaz8uaXNMb2NrZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuYXV0b1F1ZXVlTG9jay51bmxvY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0c2F2ZUJ1dHRvbi5kZXRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHR9O1xuXG5cdFx0XHRzYXZlQnV0dG9uPy5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZWRvd25cIiwgKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMuYXV0b1F1ZXVlTG9jaz8uaXNMb2NrZWQoKSkge1xuXHRcdFx0XHRcdHRoaXMuYXV0b1F1ZXVlTG9jayA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKCkubG9jayhcIiRhdXRvXCIpO1xuXHRcdFx0XHRcdC8vd2hlbiB0aGUgbW91c2UgaXMgZHJhZ2dlZCBhd2F5IGZyb20gdGhlIHNhdmUgYnV0dG9uIHdoaWxlIHByZXNzZWQgdGhlbiB0aGVyZSB3aWxsIGJlIG5vXG5cdFx0XHRcdFx0Ly9tb3VzZXVwIGV2ZW50IG9uIHRoZSBzYXZlIGJ1dHRvbi4gVGhlcmVmb3JlLCB0aGUgdW5sb2NraW5nIGlzIGRvbmUgb24gXCJtb3VzZXVwXCIgYW5kIFwiYmx1clwiXG5cdFx0XHRcdFx0c2F2ZUJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJtb3VzZXVwXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdFx0c2F2ZUJ1dHRvbi5hdHRhY2hCcm93c2VyRXZlbnQoXCJibHVyXCIsIGF1dG9RdWV1ZVVubG9jayk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHR0aGlzLm1lcmdlUGF0Y2hEcmFmdCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhOiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZCgob0VsZW1lbnQpID0+IG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZCk7XG5cdFx0aWYgKG9CdXR0b24pIHtcblx0XHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0XHR9XG5cdH1cblxuXHRfZXhlY3V0ZUZvb3RlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0Rm9vdGVyKCkgYXMgYW55KS5nZXRDb250ZW50KCkuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uQnV0dG9uXCIgJiYgb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLFxuXHRcdFx0aVNlY3Rpb25JbmRleE1heCA9IGFTZWN0aW9ucy5sZW5ndGggLSAxLFxuXHRcdFx0c0NvbW1hbmQgPSBvRXhlY3V0aW9uLm9Tb3VyY2UuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdHNhcC51aVxuXHRcdFx0LmdldENvcmUoKVxuXHRcdFx0LmdldE1lc3NhZ2VNYW5hZ2VyKClcblx0XHRcdC5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0aWYgKG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UudHlwZSA9PT0gXCJFcnJvclwiICYmIG9NZXNzYWdlLnRhcmdldC5pbmRleE9mKHNWaWV3SWQpID4gLTEpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcihlcnI/OiBhbnksIG9SZXQ/OiBhbnkpIHtcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHR9XG5cdFx0Y29uc3QgaXNFZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RWaWV3Q29udHJvbGxlcigpIGFzIGFueTtcblx0XHRjb25zdCBjdXJyZW50UGFnZVZpZXcgPSByb290Vmlld0NvbnRyb2xsZXIuaXNGY2xFbmFibGVkKClcblx0XHRcdD8gcm9vdFZpZXdDb250cm9sbGVyLmdldFJpZ2h0bW9zdFZpZXcoKVxuXHRcdFx0OiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Q29udGFpbmVyKCkgYXMgYW55KS5nZXRDdXJyZW50UGFnZSgpO1xuXHRcdGlmIChpc0VkaXRNb2RlICYmICFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdGFzeW5jIF9lZGl0RG9jdW1lbnQoKTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dD4ge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAgLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiBcdFx0LSBpZiB0aGUgY29udGV4dCBnZXRzIGRhdGEsIHdhaXQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgY29udGV4dCBhbmQgZXhlY3V0ZSB0aGUgZ2xvYmFsIHZhbGlkYXRpb25cblx0ICogXHRcdC0gaWYgbm8gZGF0YSBpcyBmb3VuZCBvbiB0aGlzIGNvbnRleHQsIG9ubHkgdGhlIHByZXBhcmVBY3Rpb24gaXMgcmVxdWVzdGVkXG5cdCAqICAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IENvcmUuYnlJZChDb3JlLmdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkKCkpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dCwgdHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvZiB0aGUgZHJhZnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAgLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqICAtIHRoZSBkcmFmdCBWYWxpZGF0aW9uIG9uIHRoZSBEcmFmdFJvb3QgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHRcblx0ICogQHBhcmFtIGJ5UGFzc1NpZGVFZmZlY3RzIE9ubHkgdGhlIGRyYWZ0IFZhbGlkYXRpb24gc3RlcCBpcyBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dDogQ29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGlmICghYnlQYXNzU2lkZUVmZmVjdHMpIHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0Y29uc3QgZ2xvYmFsU2lkZUVmZmVjdHMgPSBlbnRpdHlUeXBlID8gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoZW50aXR5VHlwZSkgOiBbXTtcblx0XHRcdC8vIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBnbG9iYWwgU2lkZUVmZmVjdHMgZm9yIHRoZSByZWxhdGVkIGVudGl0eSwgZXhlY3V0ZSBpdC90aGVtXG5cdFx0XHRpZiAoZ2xvYmFsU2lkZUVmZmVjdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGdsb2JhbFNpZGVFZmZlY3RzLm1hcCgoc2lkZUVmZmVjdHMpID0+IHRoaXMuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gKGF3YWl0IENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KFByb2dyYW1taW5nTW9kZWwuRHJhZnQsIHRoaXMuZ2V0VmlldygpLCBhcHBDb21wb25lbnQpKSBhcyBDb250ZXh0O1xuXHRcdC8vRXhlY3V0ZSB0aGUgZHJhZnRWYWxpZGF0aW9uIGlmIHRoZXJlIGlzIG5vIGdsb2JhbFNpZGVFZmZlY3RzIChpZ25vcmUgRVRhZ3MgaW4gY29sbGFib3JhdGlvbiBkcmFmdClcblx0XHRpZiAoZHJhZnRSb290Q29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0cmV0dXJuIGRyYWZ0LmV4ZWN1dGVEcmFmdFZhbGlkYXRpb24oZHJhZnRSb290Q29udGV4dCwgYXBwQ29tcG9uZW50LCBBY3Rpdml0eVN5bmMuaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2F2ZXMgdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50XG5cdCAqIFx0SWYgZGF0YSBoYXMgYmVlbiBwcm92aWRlZCBvbiB0aGUgY3JlYXRpb24gcm93cywgdGhlIHJlbGF0ZWQgZG9jdW1lbnRzIGFyZSBjcmVhdGVkXG5cdCAqIGJlZm9yZSBzYXZpbmcgdGhlIGRyYWZ0IHZlcnNpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBwYXJhbXMgUGFyYW1ldGVycyBjb250YWluaW5nIHRoZSBlbnRpdHlzZXRuYW1lLlxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBfc2F2ZURvY3VtZW50KHBhcmFtczogUGFydGlhbDx7IGVudGl0eVNldE5hbWU6IHN0cmluZyB9Pik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXHRcdC8vIGluZGljYXRlcyBpZiB3ZSBhcmUgY3JlYXRpbmcgYSBuZXcgcm93IGluIHRoZSBPUFxuXHRcdGxldCBleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG1vZGVsKTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKEFjdGl2aXR5U3luYy5pc0NvbGxhYm9yYXRpb25FbmFibGVkKHRoaXMuZ2V0VmlldygpKSkge1xuXHRcdFx0XHRjb25zdCBkaWFsb2dBY3Rpb24gPSBhd2FpdCBuZXcgQ29sbGFib3JhdGlvbkRpc2NhcmQodGhpcy5nZXRWaWV3KCksIHRydWUpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJjYW5jZWxcIikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXZSBrZWVwIHRoZSBkcmFmdCBhbmQgbGVhdmUgZm9yIExSXG5cdFx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0XHRBY3Rpdml0eVN5bmMuZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dChjb250ZXh0KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKHRhYmxlOiBUYWJsZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBjcmVhdGlvblJvdyA9IHRhYmxlLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRcdGNvbnN0IHRhYmxlQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHRLZXlzID0gT2JqZWN0LmtleXMoKGNyZWF0aW9uUm93Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkKT8uZ2V0T2JqZWN0KCkgfHwge30pO1xuXHRcdFx0XHRpZiAoY29udGV4dEtleXMuZmlsdGVyKChrZXkpID0+ICFrZXkuc3RhcnRzV2l0aChcIkAkdWk1LlwiKSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0ZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciA9IHRydWU7XG5cdFx0XHRcdFx0YXdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3dcblx0XHRcdFx0XHRcdFx0LmNyZWF0ZURvY3VtZW50KHRhYmxlQmluZGluZywge1xuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uTW9kZTogdGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGlvblJvdzogY3JlYXRpb25Sb3csXG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRlQXRFbmQ6IHRhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2tpcFNpZGVFZmZlY3RzOiB0cnVlIC8vIHRoZSBza2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXksIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LnRoZW4oKCkgPT4gdGFibGVCaW5kaW5nKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRjb25zdCBiaW5kaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGF3YWl0Q3JlYXRlRG9jdW1lbnRzKTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gZWl0aGVyIHJlamVjdCBvciByZXNvbHZlIGEgcHJvbWlzZSBoZXJlIGFuZCByZXR1cm4gaXQgc2luY2UgdGhpcyBzYXZlXG5cdFx0XHQvLyBmdW5jdGlvbiBpcyBub3Qgb25seSBjYWxsZWQgd2hlbiBwcmVzc2luZyB0aGUgc2F2ZSBidXR0b24gaW4gdGhlIGZvb3RlciwgYnV0IGFsc29cblx0XHRcdC8vIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBjcmVhdGUgb3Igc2F2ZSBpbiBhIGRhdGFsb3NzIHBvcHVwLlxuXHRcdFx0Ly8gVGhlIGxvZ2ljIG9mIHRoZSBkYXRhbG9zcyBwb3B1cCBuZWVkcyB0byBkZXRlY3QgaWYgdGhlIHNhdmUgaGFkIGVycm9ycyBvciBub3QgaW4gb3JkZXJcblx0XHRcdC8vIHRvIGRlY2lkZSBpZiB0aGUgc3Vic2VxdWVudCBhY3Rpb24gLSBsaWtlIGEgYmFjayBuYXZpZ2F0aW9uIC0gaGFzIHRvIGJlIGV4ZWN1dGVkIG9yIG5vdC5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc2F2ZURvY3VtZW50KGNvbnRleHQsIHtcblx0XHRcdFx0XHRlbnRpdHlTZXROYW1lOiBwYXJhbXM/LmVudGl0eVNldE5hbWUsXG5cdFx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdFx0YmluZGluZ3M6IGJpbmRpbmdzIGFzIHVua25vd24gYXMgT0RhdGFMaXN0QmluZGluZ1tdLFxuXHRcdFx0XHRcdG1lcmdlUGF0Y2hEcmFmdDogdGhpcy5tZXJnZVBhdGNoRHJhZnRcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHQvLyBJZiB0aGUgc2F2ZURvY3VtZW50IGluIGVkaXRGbG93IHJldHVybnMgZXJyb3JzIHdlIG5lZWRcblx0XHRcdFx0Ly8gdG8gc2hvdyB0aGUgbWVzc2FnZSBwb3BvdmVyIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHRoZVxuXHRcdFx0XHQvLyBkYXRhbG9zcyBsb2dpYyBkb2VzIG5vdCBwZXJmb3JtIHRoZSBmb2xsb3cgdXAgZnVuY3Rpb25cblx0XHRcdFx0Ly8gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uIGhlbmNlIHdlIHJldHVybiBhIHByb21pc2UgYW5kIHJlamVjdCBpdFxuXHRcdFx0XHRpZiAoZXJyb3IgIT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQ29udGludWUpIHtcblx0XHRcdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoZXJyb3IpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChtb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sobW9kZWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9jYW5jZWxEb2N1bWVudChtUGFyYW1ldGVyczogeyBjYW5jZWxCdXR0b246IHN0cmluZyB9KTogUHJvbWlzZTxDb250ZXh0IHwgdm9pZD4ge1xuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IGNhbmNlbEJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQobVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uKTsgLy90byBnZXQgdGhlIHJlZmVyZW5jZSBvZiB0aGUgY2FuY2VsIGJ1dHRvbiBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uXG5cdFx0Y29uc3QgbGFzdEZvY3VzZWRDb250cm9sSWQgPSBDb3JlLmdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkKCk7XG5cdFx0bGV0IHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IGZhbHNlO1xuXHRcdGlmIChBY3Rpdml0eVN5bmMuaXNDb2xsYWJvcmF0aW9uRW5hYmxlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgZmFsc2UpLmdldFVzZXJBY3Rpb24oKTtcblx0XHRcdC8vIFdlIGNhbmNlbCB0aGUgYWN0aW9uXG5cdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImNhbmNlbFwiKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIFdlIGtlZXAgdGhlIGRyYWZ0IGFuZCBsZWF2ZSBmb3IgTFJcblx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwia2VlcERyYWZ0XCIpIHtcblx0XHRcdFx0QWN0aXZpdHlTeW5jLmRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRhd2FpdCB0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBXZSBoYXZlIGRpc3BsYXllZCB0aGUgZGlhbG9nIGFuZCB0aGUgdXNlciBjb25maXJtZWQgdGhlIGRpc2NhcmQgLT4gV2Ugc2tpcCB0aGUgZGlzY2FyZCBjb25maXJtYXRpb25cblx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiZGlzY2FyZENvbmZpcm1lZFwiKSB7XG5cdFx0XHRcdHNob3VsZFNraXBEaXNjYXJkUG9wb3ZlciA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93XG5cdFx0XHQuY2FuY2VsRG9jdW1lbnQoY29udGV4dCwgeyBjb250cm9sOiBjYW5jZWxCdXR0b24sIHNraXBEaXNjYXJkUG9wb3Zlcjogc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIH0pXG5cdFx0XHQudGhlbigocHJvbWlzZVJlc3VsdCkgPT4ge1xuXHRcdFx0XHQvLyBmb2N1cyBpcyByZXRhaW5lZCBvbiB0aGUgbGFzdCBmb2N1c2VkIGVsZW1lbnRcblx0XHRcdFx0Q29yZS5ieUlkKGxhc3RGb2N1c2VkQ29udHJvbElkKT8uZm9jdXMoKTtcblx0XHRcdFx0cmV0dXJuIHByb21pc2VSZXN1bHQ7XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9hcHBseURvY3VtZW50KG9Db250ZXh0OiBDb250ZXh0KSB7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuYXBwbHlEb2N1bWVudChvQ29udGV4dCkuY2F0Y2goKCkgPT4gdGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKCkpO1xuXHR9XG5cblx0X3VwZGF0ZVJlbGF0ZWRBcHBzKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBzaG93UmVsYXRlZEFwcHMgPSBvT2JqZWN0UGFnZS5kYXRhKFwic2hvd1JlbGF0ZWRBcHBzXCIpO1xuXHRcdGlmIChzaG93UmVsYXRlZEFwcHMgPT09IFwidHJ1ZVwiIHx8IHNob3dSZWxhdGVkQXBwcyA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdENvbW1vblV0aWxzLnVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyhvT2JqZWN0UGFnZSwgYXBwQ29tcG9uZW50KTtcblx0XHR9XG5cdH1cblxuXHRfZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVBhcmVudEVsZW1lbnQ6IGFueSwgYVN1YnNlY3Rpb246IGFueSwgYUNvbnRyb2xzOiBhbnksIGJJc0NoYXJ0PzogYm9vbGVhbikge1xuXHRcdGZvciAobGV0IGVsZW1lbnQgPSAwOyBlbGVtZW50IDwgYVBhcmVudEVsZW1lbnQubGVuZ3RoOyBlbGVtZW50KyspIHtcblx0XHRcdGxldCBvRWxlbWVudCA9IGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiA/IGFQYXJlbnRFbGVtZW50W2VsZW1lbnRdLmdldENvbnRlbnQoKSA6IHVuZGVmaW5lZDtcblx0XHRcdGlmIChiSXNDaGFydCkge1xuXHRcdFx0XHRpZiAob0VsZW1lbnQ/LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBpdGVtcyA9IG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRcdGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdGlmIChpdGVtLmlzQTxDaGFydEFQST4oXCJzYXAuZmUubWFjcm9zLmNoYXJ0LkNoYXJ0QVBJXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGNoYXJ0Q29udHJvbCA9IGl0ZW0uZ2V0Q2hhcnRDb250cm9sKCk7XG5cdFx0XHRcdFx0XHRcdGFDb250cm9scy5wdXNoKGNoYXJ0Q29udHJvbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldE1haW5Db250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQoKTtcblx0XHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50LmdldENvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRDb250ZW50KCk7XG5cdFx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRcdGFDb250cm9scy5wdXNoKG9FbGVtZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRBbGxTdWJTZWN0aW9ucygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0bGV0IGFTdWJTZWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFTdWJTZWN0aW9ucyA9IGFTdWJTZWN0aW9ucy5jb25jYXQob1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFTdWJTZWN0aW9ucztcblx0fVxuXG5cdF9nZXRBbGxCbG9ja3MoKSB7XG5cdFx0bGV0IGFCbG9ja3M6IGFueVtdID0gW107XG5cdFx0dGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogYW55KSB7XG5cdFx0XHRhQmxvY2tzID0gYUJsb2Nrcy5jb25jYXQob1N1YlNlY3Rpb24uZ2V0QmxvY2tzKCkpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBhQmxvY2tzO1xuXHR9XG5cblx0X2ZpbmRUYWJsZXMoKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhVGFibGVzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFUYWJsZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVRhYmxlcztcblx0fVxuXG5cdF9maW5kQ2hhcnRzKCkge1xuXHRcdGNvbnN0IGFTdWJTZWN0aW9ucyA9IHRoaXMuX2dldEFsbFN1YlNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYUNoYXJ0czogYW55W10gPSBbXTtcblx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdFx0dGhpcy5fZmluZENvbnRyb2xJblN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldE1vcmVCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhQ2hhcnRzLCB0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFDaGFydHM7XG5cdH1cblxuXHRfY2xvc2VTaWRlQ29udGVudCgpIHtcblx0XHR0aGlzLl9nZXRBbGxCbG9ja3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQmxvY2s6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRlbnQgPSBvQmxvY2suZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9CbG9jay5nZXRDb250ZW50KCk7XG5cdFx0XHRpZiAob0NvbnRlbnQgJiYgb0NvbnRlbnQuaXNBICYmIG9Db250ZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdGlmIChvQ29udGVudC5zZXRTaG93U2lkZUNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuXHRcdFx0XHRcdG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFydCBDb250ZXh0IGlzIHJlc29sdmVkIGZvciAxOm4gbWljcm9jaGFydHMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ2hhcnRDb250ZXh0IFRoZSBDb250ZXh0IG9mIHRoZSBNaWNyb0NoYXJ0XG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIFRoZSBjb2xsZWN0aW9uUGF0aCBvZiB0aGUgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIEF0dHJpYnV0ZXMgb2YgdGhlIGNoYXJ0IENvbnRleHRcblx0ICovXG5cdF9nZXRDaGFydENvbnRleHREYXRhKG9DaGFydENvbnRleHQ6IGFueSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHREYXRhID0gb0NoYXJ0Q29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRsZXQgb0NoYXJ0Q29udGV4dERhdGEgPSBbb0NvbnRleHREYXRhXTtcblx0XHRpZiAob0NoYXJ0Q29udGV4dCAmJiBzQ2hhcnRQYXRoKSB7XG5cdFx0XHRpZiAob0NvbnRleHREYXRhW3NDaGFydFBhdGhdKSB7XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhID0gb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRkZWxldGUgb0NvbnRleHREYXRhW3NDaGFydFBhdGhdO1xuXHRcdFx0XHRvQ2hhcnRDb250ZXh0RGF0YS5wdXNoKG9Db250ZXh0RGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQ2hhcnRDb250ZXh0RGF0YTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTY3JvbGwgdGhlIHRhYmxlcyB0byB0aGUgcm93IHdpdGggdGhlIHNQYXRoXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUm93UGF0aCAnc1BhdGggb2YgdGhlIHRhYmxlIHJvdydcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvUm93KHNSb3dQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAodGhpcy5fZmluZFRhYmxlcyAmJiB0aGlzLl9maW5kVGFibGVzKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVRhYmxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRUYWJsZVNjcm9sbGVyLnNjcm9sbFRhYmxlVG9Sb3coYVRhYmxlc1tpXSwgc1Jvd1BhdGgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gbWVyZ2Ugc2VsZWN0ZWQgY29udGV4dHMgYW5kIGZpbHRlcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSBvUGFnZUNvbnRleHQgUGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBhTGluZUNvbnRleHQgU2VsZWN0ZWQgQ29udGV4dHNcblx0ICogQHBhcmFtIHNDaGFydFBhdGggQ29sbGVjdGlvbiBuYW1lIG9mIHRoZSBjaGFydFxuXHQgKiBAcmV0dXJucyBTZWxlY3Rpb24gVmFyaWFudCBPYmplY3Rcblx0ICovXG5cdF9tZXJnZU11bHRpcGxlQ29udGV4dHMob1BhZ2VDb250ZXh0OiBDb250ZXh0LCBhTGluZUNvbnRleHQ6IGFueVtdLCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRsZXQgYUF0dHJpYnV0ZXM6IGFueVtdID0gW10sXG5cdFx0XHRhUGFnZUF0dHJpYnV0ZXMgPSBbXSxcblx0XHRcdG9Db250ZXh0LFxuXHRcdFx0c01ldGFQYXRoTGluZTogc3RyaW5nLFxuXHRcdFx0c1BhdGhMaW5lO1xuXG5cdFx0Y29uc3Qgc1BhZ2VQYXRoID0gb1BhZ2VDb250ZXh0LmdldFBhdGgoKTtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb1BhZ2VDb250ZXh0ICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpICYmIG9QYWdlQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNNZXRhUGF0aFBhZ2UgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhZ2VQYXRoKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0Ly8gR2V0IHNpbmdsZSBsaW5lIGNvbnRleHQgaWYgbmVjZXNzYXJ5XG5cdFx0aWYgKGFMaW5lQ29udGV4dCAmJiBhTGluZUNvbnRleHQubGVuZ3RoKSB7XG5cdFx0XHRvQ29udGV4dCA9IGFMaW5lQ29udGV4dFswXTtcblx0XHRcdHNQYXRoTGluZSA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdHNNZXRhUGF0aExpbmUgPSBvTWV0YU1vZGVsICYmIG9NZXRhTW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGhMaW5lKS5yZXBsYWNlKC9eXFwvKi8sIFwiXCIpO1xuXG5cdFx0XHRhTGluZUNvbnRleHQuZm9yRWFjaCgob1NpbmdsZUNvbnRleHQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoc0NoYXJ0UGF0aCkge1xuXHRcdFx0XHRcdGNvbnN0IG9DaGFydENvbnRleHREYXRhID0gdGhpcy5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvU2luZ2xlQ29udGV4dCwgc0NoYXJ0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKG9DaGFydENvbnRleHREYXRhKSB7XG5cdFx0XHRcdFx0XHRhQXR0cmlidXRlcyA9IG9DaGFydENvbnRleHREYXRhLm1hcChmdW5jdGlvbiAob1N1YkNoYXJ0Q29udGV4dERhdGE6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU3ViQ2hhcnRDb250ZXh0RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IGAke3NNZXRhUGF0aFBhZ2V9LyR7c0NoYXJ0UGF0aH1gXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1NpbmdsZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aExpbmVcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGFQYWdlQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdGNvbnRleHREYXRhOiBvUGFnZUNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRlbnRpdHlTZXQ6IHNNZXRhUGF0aFBhZ2Vcblx0XHR9KTtcblx0XHQvLyBBZGRpbmcgUGFnZSBDb250ZXh0IHRvIHNlbGVjdGlvbiB2YXJpYW50XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzID0gdGhpcy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnJlbW92ZVNlbnNpdGl2ZURhdGEoYVBhZ2VBdHRyaWJ1dGVzLCBzTWV0YVBhdGhQYWdlKTtcblx0XHRjb25zdCBvUGFnZUxldmVsU1YgPSBDb21tb25VdGlscy5hZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudChuZXcgU2VsZWN0aW9uVmFyaWFudCgpLCBhUGFnZUF0dHJpYnV0ZXMsIHRoaXMuZ2V0VmlldygpKTtcblx0XHRhQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFBdHRyaWJ1dGVzLCBzTWV0YVBhdGhQYWdlKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudDogb1BhZ2VMZXZlbFNWLFxuXHRcdFx0YXR0cmlidXRlczogYUF0dHJpYnV0ZXNcblx0XHR9O1xuXHR9XG5cblx0X2dldEJhdGNoR3JvdXBzRm9yVmlldygpIHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSB0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSxcblx0XHRcdG9Db25maWd1cmF0aW9ucyA9IG9WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbixcblx0XHRcdGFDb25maWd1cmF0aW9ucyA9IG9Db25maWd1cmF0aW9ucyAmJiBPYmplY3Qua2V5cyhvQ29uZmlndXJhdGlvbnMpLFxuXHRcdFx0YUJhdGNoR3JvdXBzID0gW1wiJGF1dG8uSGVyb2VzXCIsIFwiJGF1dG8uRGVjb3JhdGlvblwiLCBcIiRhdXRvLldvcmtlcnNcIl07XG5cblx0XHRpZiAoYUNvbmZpZ3VyYXRpb25zICYmIGFDb25maWd1cmF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRhQ29uZmlndXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9Db25maWd1cmF0aW9uID0gb0NvbmZpZ3VyYXRpb25zW3NLZXldO1xuXHRcdFx0XHRpZiAob0NvbmZpZ3VyYXRpb24ucmVxdWVzdEdyb3VwSWQgPT09IFwiTG9uZ1J1bm5lcnNcIikge1xuXHRcdFx0XHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG8uTG9uZ1J1bm5lcnNcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gYUJhdGNoR3JvdXBzO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBpbml0aWFsaXplIHBhZ2luYXRpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHQgb2Ygb2JqZWN0IHBhZ2Vcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWwgSW50ZXJuYWwgbW9kZWxcblx0ICogQHBhcmFtIGxpc3RCaW5kaW5nIFBhcmVudCBsaXN0IGJpbmRpbmcgdG8gdXNlXG5cdCAqL1xuXHRfaW5pdGlhbGl6ZVBhZ2luYXRpb24oY29udGV4dDogQ29udGV4dCwgaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBsaXN0QmluZGluZz86IE9EYXRhTGlzdEJpbmRpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3TGV2ZWwgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YSkudmlld0xldmVsO1xuXHRcdGlmICh2aWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRjb25zdCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAocGFnaW5hdG9yQ3VycmVudENvbnRleHQpIHtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1RvVXNlID0gcGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGJpbmRpbmdUb1VzZSwgcGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChsaXN0QmluZGluZykge1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKGxpc3RCaW5kaW5nLCBjb250ZXh0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKlxuXHQgKiBSZXNldCBCcmVhZGNydW1iIGxpbmtzXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAcGFyYW0ge3NhcC5tLkJyZWFkY3J1bWJzfSBbb1NvdXJjZV0gcGFyZW50IGNvbnRyb2xcblx0ICogQGRlc2NyaXB0aW9uIFVzZWQgd2hlbiBjb250ZXh0IG9mIHRoZSBvYmplY3QgcGFnZSBjaGFuZ2VzLlxuXHQgKiAgICAgICAgICAgICAgVGhpcyBldmVudCBjYWxsYmFjayBpcyBhdHRhY2hlZCB0byBtb2RlbENvbnRleHRDaGFuZ2Vcblx0ICogICAgICAgICAgICAgIGV2ZW50IG9mIHRoZSBCcmVhZGNydW1iIGNvbnRyb2wgdG8gY2F0Y2ggY29udGV4dCBjaGFuZ2UuXG5cdCAqICAgICAgICAgICAgICBUaGVuIGVsZW1lbnQgYmluZGluZyBhbmQgaHJlZnMgYXJlIHVwZGF0ZWQgZm9yIGVhY2ggbGluay5cblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBleHBlcmltZW50YWxcblx0ICovXG5cdGFzeW5jIF9zZXRCcmVhZGNydW1iTGlua3Mob1NvdXJjZTogQnJlYWRDcnVtYnMpIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLFxuXHRcdFx0YVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXSxcblx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZDogYW55W10gPSBbXSxcblx0XHRcdHNOZXdQYXRoID0gb0NvbnRleHQ/LmdldFBhdGgoKSxcblx0XHRcdGFQYXRoUGFydHMgPSBzTmV3UGF0aD8uc3BsaXQoXCIvXCIpID8/IFtdLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQgJiYgb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRsZXQgc1BhdGggPSBcIlwiO1xuXHRcdHRyeSB7XG5cdFx0XHRhUGF0aFBhcnRzLnNoaWZ0KCk7XG5cdFx0XHRhUGF0aFBhcnRzLnNwbGljZSgtMSwgMSk7XG5cdFx0XHRhUGF0aFBhcnRzLmZvckVhY2goZnVuY3Rpb24gKHNQYXRoUGFydDogYW55KSB7XG5cdFx0XHRcdHNQYXRoICs9IGAvJHtzUGF0aFBhcnR9YDtcblx0XHRcdFx0Y29uc3Qgb1Jvb3RWaWV3Q29udHJvbGxlciA9IG9BcHBDb21wb25lbnQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCk7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aCk7XG5cdFx0XHRcdGNvbnN0IGJSZXN1bHRDb250ZXh0ID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1BhcmFtZXRlclBhdGh9L0Bjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuUmVzdWx0Q29udGV4dGApO1xuXHRcdFx0XHRpZiAoYlJlc3VsdENvbnRleHQpIHtcblx0XHRcdFx0XHQvLyBXZSBkb250IG5lZWQgdG8gY3JlYXRlIGEgYnJlYWRjcnVtYiBmb3IgUGFyYW1ldGVyIHBhdGhcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0YVByb21pc2VzLnB1c2gob1Jvb3RWaWV3Q29udHJvbGxlci5nZXRUaXRsZUluZm9Gcm9tUGF0aChzUGF0aCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCB0aXRsZUhpZXJhcmNoeUluZm9zOiBhbnlbXSA9IGF3YWl0IFByb21pc2UuYWxsKGFQcm9taXNlcyk7XG5cdFx0XHRsZXQgaGllcmFyY2h5UG9zaXRpb24sIG9MaW5rO1xuXHRcdFx0Zm9yIChjb25zdCB0aXRsZUhpZXJhcmNoeUluZm8gb2YgdGl0bGVIaWVyYXJjaHlJbmZvcykge1xuXHRcdFx0XHRoaWVyYXJjaHlQb3NpdGlvbiA9IHRpdGxlSGllcmFyY2h5SW5mb3MuaW5kZXhPZih0aXRsZUhpZXJhcmNoeUluZm8pO1xuXG5cdFx0XHRcdG9MaW5rID0gb1NvdXJjZS5nZXRMaW5rcygpW2hpZXJhcmNoeVBvc2l0aW9uXSA/IG9Tb3VyY2UuZ2V0TGlua3MoKVtoaWVyYXJjaHlQb3NpdGlvbl0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0b0xpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCkpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtoaWVyYXJjaHlQb3NpdGlvbl0pIHtcblx0XHRcdFx0XHRvU291cmNlLmFkZExpbmsob0xpbmspO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgYnJlYWRjcnVtYiBsaW5rczpcIiArIGVycm9yKTtcblx0XHR9XG5cdH1cblxuXHRfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0RhdGFQb2ludHMgPSBDb21tb25VdGlscy5nZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24oXG5cdFx0XHRvVmlldy5nZXRWaWV3RGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0aW5nU2VydmljZSgpLmdldE91dGJvdW5kcygpXG5cdFx0KTtcblx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGNvbnN0IG9QYWdlQ29udGV4dCA9IG9WaWV3ICYmIChvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImlzSGVhZGVyRFBMaW5rVmlzaWJsZVwiLCB7fSk7XG5cdFx0aWYgKG9QYWdlQ29udGV4dCkge1xuXHRcdFx0b1BhZ2VDb250ZXh0XG5cdFx0XHRcdC5yZXF1ZXN0T2JqZWN0KClcblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKG9EYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKCFzS2V5LnN0YXJ0c1dpdGgoXCJfXCIpICYmICFzS2V5LmluY2x1ZGVzKFwib2RhdGEuY29udGV4dFwiKSkge1xuXHRcdFx0XHRcdFx0XHRvUGFyYW1zW3NLZXldID0gb01peGVkQ29udGV4dFtzS2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gdmFsaWRhdGUgaWYgYSBsaW5rIG11c3QgYmUgcmVuZGVyZWRcblx0XHRcdFx0b1NoZWxsU2VydmljZXNcblx0XHRcdFx0XHQuaXNOYXZpZ2F0aW9uU3VwcG9ydGVkKFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBvRGF0YVBvaW50LmFjdGlvblxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRwYXJhbXM6IG9QYXJhbXNcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdC50aGVuKChhTGlua3MpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiBmblNldExpbmtFbmFibGVtZW50KHNJZCwgYUxpbmtzKTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmbk9uRXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdC8qKlxuXHRcdCAqIEludm9rZXMgdGhlIHBhZ2UgcHJpbWFyeSBhY3Rpb24gb24gcHJlc3Mgb2YgQ3RybCtFbnRlci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgcGFnZSBjb250cm9sbGVyXG5cdFx0ICogQHBhcmFtIG9WaWV3XG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IENvbnRleHQgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY29udGV4dHNdIE1hbmRhdG9yeSBmb3IgYSBib3VuZCBhY3Rpb24sIGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb247IGFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9uc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlXSBUaGUgdmlzaWJpbGl0eSBvZiBzZW1hdGljIHBvc2l0aXZlIGFjdGlvblxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBzZW1hbnRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25WaXNpYmxlXSBUaGUgRWRpdCBidXR0b24gdmlzaWJpbGl0eVxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWRdIFRoZSBlbmFibGVtZW50IG9mIEVkaXQgYnV0dG9uXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25QcmltYXJ5QWN0aW9uKFxuXHRcdFx0b0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLFxuXHRcdFx0b1ZpZXc6IEZFVmlldyxcblx0XHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdFx0c0FjdGlvbk5hbWU6IHN0cmluZyxcblx0XHRcdG1QYXJhbWV0ZXJzOiB1bmtub3duLFxuXHRcdFx0bUNvbmRpdGlvbnM6IHtcblx0XHRcdFx0cG9zaXRpdmVBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25WaXNpYmxlOiBib29sZWFuO1xuXHRcdFx0XHRlZGl0QWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdH1cblx0XHQpIHtcblx0XHRcdGNvbnN0IGlWaWV3TGV2ZWwgPSAob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS52aWV3TGV2ZWw7XG5cdFx0XHRpZiAobUNvbmRpdGlvbnMucG9zaXRpdmVBY3Rpb25WaXNpYmxlKSB7XG5cdFx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5oYW5kbGVycy5vbkNhbGxBY3Rpb24ob1ZpZXcsIHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkKSB7XG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIuX2VkaXREb2N1bWVudCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlWaWV3TGV2ZWwgPT09IDEgJiYgb1ZpZXcuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9zYXZlRG9jdW1lbnQoe30pO1xuXHRcdFx0fSBlbHNlIGlmIChvVmlldy5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2FwcGx5RG9jdW1lbnQob0NvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBNYW5hZ2VzIHRoZSBjb250ZXh0IGNoYW5nZSBldmVudCBvbiB0aGUgdGFibGVzLlxuXHRcdCAqIFRoZSBmb2N1cyBpcyBzZXQgaWYgdGhpcyBjaGFuZ2UgaXMgcmVsYXRlZCB0byBhbiBlZGl0RmxvdyBhY3Rpb24gYW5kXG5cdFx0ICogYW4gZXZlbnQgaXMgZmlyZWQgb24gdGhlIG9iamVjdFBhZ2UgbWVzc2FnZUJ1dHRvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB0aGlzIFRoZSBvYmplY3RQYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudFxuXHRcdCAqL1xuXHRcdGFzeW5jIG9uVGFibGVDb250ZXh0Q2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBldmVudDogVUk1RXZlbnQpIHtcblx0XHRcdGNvbnN0IHRhYmxlQVBJID0gZXZlbnQuZ2V0U291cmNlKCkgYXMgVGFibGVBUEk7XG5cdFx0XHRjb25zdCB0YWJsZSA9IHRhYmxlQVBJLmNvbnRlbnQ7XG5cdFx0XHRjb25zdCBjdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuZWRpdEZsb3cuZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdGNvbnN0IHRhYmxlQ29udGV4dHMgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcodGFibGUpPy5nZXRDdXJyZW50Q29udGV4dHMoKTtcblxuXHRcdFx0aWYgKGN1cnJlbnRBY3Rpb25Qcm9taXNlICYmIHRhYmxlQ29udGV4dHM/Lmxlbmd0aCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IGFjdGlvblJlc3BvbnNlID0gYXdhaXQgY3VycmVudEFjdGlvblByb21pc2U7XG5cdFx0XHRcdFx0aWYgKGFjdGlvblJlc3BvbnNlPy5jb250cm9sSWQgPT09IHRhYmxlLmdldElkKCkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGFjdGlvbkRhdGEgPSBhY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGtleXMgPSBhY3Rpb25SZXNwb25zZS5rZXlzO1xuXHRcdFx0XHRcdFx0Y29uc3QgbmV3SXRlbSA9IHRhYmxlQ29udGV4dHMuZmluZEluZGV4KCh0YWJsZUNvbnRleHQ6IENvbnRleHQpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgdGFibGVEYXRhID0gdGFibGVDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ga2V5cy5ldmVyeSgoa2V5OiBzdHJpbmcpID0+IHRhYmxlRGF0YVtrZXldID09PSBhY3Rpb25EYXRhW2tleV0pO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZiAobmV3SXRlbSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgZGlhbG9nID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuZmluZCgoZGlhbG9nKSA9PiBkaWFsb2cuZGF0YShcIkZ1bGxTY3JlZW5EaWFsb2dcIikgIT09IHRydWUpO1xuXHRcdFx0XHRcdFx0XHRpZiAoZGlhbG9nKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gYnkgZGVzaWduLCBhIHNhcC5tLmRpYWxvZyBzZXQgdGhlIGZvY3VzIHRvIHRoZSBwcmV2aW91cyBmb2N1c2VkIGVsZW1lbnQgd2hlbiBjbG9zaW5nLlxuXHRcdFx0XHRcdFx0XHRcdC8vIHdlIHNob3VsZCB3YWl0IGZvciB0aGUgZGlhbG9nIHRvIGJlIGNsb3NlZCBiZWZvcmUgc2V0IHRoZSBmb2N1cyB0byBhbm90aGVyIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkaWFsb2cuYXR0YWNoRXZlbnRPbmNlKFwiYWZ0ZXJDbG9zZVwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0YWJsZS5mb2N1c1JvdyhuZXdJdGVtLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0YWJsZS5mb2N1c1JvdyhuZXdJdGVtLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGBBbiBlcnJvciBvY2N1cnMgd2hpbGUgc2Nyb2xsaW5nIHRvIHRoZSBuZXdseSBjcmVhdGVkIEl0ZW06ICR7ZX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Ly8gZmlyZSBNb2RlbENvbnRleHRDaGFuZ2Ugb24gdGhlIG1lc3NhZ2UgYnV0dG9uIHdoZW5ldmVyIHRoZSB0YWJsZSBjb250ZXh0IGNoYW5nZXNcblx0XHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEludm9rZXMgYW4gYWN0aW9uIC0gYm91bmQvdW5ib3VuZCBhbmQgc2V0cyB0aGUgcGFnZSBkaXJ0eS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEByZXR1cm5zIFRoZSBhY3Rpb24gcHJvbWlzZVxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uQ2FsbEFjdGlvbihvVmlldzogYW55LCBzQWN0aW9uTmFtZTogc3RyaW5nLCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5lZGl0Rmxvd1xuXHRcdFx0XHQuaW52b2tlQWN0aW9uKHNBY3Rpb25OYW1lLCBtUGFyYW1ldGVycylcblx0XHRcdFx0LnRoZW4ob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyLCB1bmRlZmluZWQpKVxuXHRcdFx0XHQuY2F0Y2gob0NvbnRyb2xsZXIuX3Nob3dNZXNzYWdlUG9wb3Zlci5iaW5kKG9Db250cm9sbGVyKSk7XG5cdFx0fSxcblx0XHRvbkRhdGFQb2ludFRpdGxlUHJlc3NlZChvQ29udHJvbGxlcjogYW55LCBvU291cmNlOiBhbnksIG9NYW5pZmVzdE91dGJvdW5kOiBhbnksIHNDb250cm9sQ29uZmlnOiBhbnksIHNDb2xsZWN0aW9uUGF0aDogYW55KSB7XG5cdFx0XHRvTWFuaWZlc3RPdXRib3VuZCA9IHR5cGVvZiBvTWFuaWZlc3RPdXRib3VuZCA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uob01hbmlmZXN0T3V0Ym91bmQpIDogb01hbmlmZXN0T3V0Ym91bmQ7XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9NYW5pZmVzdE91dGJvdW5kW3NDb250cm9sQ29uZmlnXSxcblx0XHRcdFx0YVNlbWFudGljT2JqZWN0TWFwcGluZyA9IENvbW1vblV0aWxzLmdldFNlbWFudGljT2JqZWN0TWFwcGluZyhvVGFyZ2V0SW5mbyksXG5cdFx0XHRcdG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQgPSBvU291cmNlLmdldEJpbmRpbmdDb250ZXh0KCksXG5cdFx0XHRcdHNNZXRhUGF0aCA9IG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHRcblx0XHRcdFx0XHQuZ2V0TW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhTW9kZWwoKVxuXHRcdFx0XHRcdC5nZXRNZXRhUGF0aChvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRsZXQgYU5hdmlnYXRpb25EYXRhID0gb0NvbnRyb2xsZXIuX2dldENoYXJ0Q29udGV4dERhdGEob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCwgc0NvbGxlY3Rpb25QYXRoKTtcblx0XHRcdGxldCBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cblx0XHRcdGFOYXZpZ2F0aW9uRGF0YSA9IGFOYXZpZ2F0aW9uRGF0YS5tYXAoZnVuY3Rpb24gKG9OYXZpZ2F0aW9uRGF0YTogYW55KSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0ZGF0YTogb05hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdG1ldGFQYXRoOiBzTWV0YVBhdGggKyAoc0NvbGxlY3Rpb25QYXRoID8gYC8ke3NDb2xsZWN0aW9uUGF0aH1gIDogXCJcIilcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMgJiYgb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5nZXRPdXRib3VuZFBhcmFtcyhvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKTtcblx0XHRcdFx0aWYgKE9iamVjdC5rZXlzKG9QYXJhbXMpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMgPSBvUGFyYW1zO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QgJiYgb1RhcmdldEluZm8uYWN0aW9uKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUob1RhcmdldEluZm8uc2VtYW50aWNPYmplY3QsIG9UYXJnZXRJbmZvLmFjdGlvbiwge1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogYU5hdmlnYXRpb25EYXRhLFxuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0TWFwcGluZzogYVNlbWFudGljT2JqZWN0TWFwcGluZyxcblx0XHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyc1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8qKlxuXHRcdCAqIFRyaWdnZXJzIGFuIG91dGJvdW5kIG5hdmlnYXRpb24gd2hlbiBhIHVzZXIgY2hvb3NlcyB0aGUgY2hldnJvbi5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSBvQ29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBzT3V0Ym91bmRUYXJnZXQgTmFtZSBvZiB0aGUgb3V0Ym91bmQgdGFyZ2V0IChuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdClcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWQgKD8/PyBtYXliZSBvbmx5IG9uY2UgZmluaXNoZWQ/KVxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldDogc3RyaW5nLCBvQ29udGV4dDogYW55LCBzQ3JlYXRlUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5vbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXIsIHNPdXRib3VuZFRhcmdldCwgb0NvbnRleHQsIHNDcmVhdGVQYXRoKTtcblx0XHR9LFxuXG5cdFx0b25OYXZpZ2F0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdC8vd2lsbCBiZSBjYWxsZWQgYWx3YXlzIHdoZW4gd2UgY2xpY2sgb24gYSBzZWN0aW9uIHRhYlxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0dGhpcy5iU2VjdGlvbk5hdmlnYXRlZCA9IHRydWU7XG5cblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSAmJlxuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnNlY3Rpb25MYXlvdXQgPT09IFwiVGFic1wiICYmXG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIpID09PSBmYWxzZVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInN1YlNlY3Rpb25cIik7XG5cdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShbb1N1YlNlY3Rpb25dKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG9uVmFyaWFudFNlbGVjdGVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uVmFyaWFudFNhdmVkOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdC8vVE9ETzogU2hvdWxkIHJlbW92ZSB0aGlzIHNldFRpbWVPdXQgb25jZSBWYXJpYW50IE1hbmFnZW1lbnQgcHJvdmlkZXMgYW4gYXBpIHRvIGZldGNoIHRoZSBjdXJyZW50IHZhcmlhbnQga2V5IG9uIHNhdmVcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR9LCAyMDAwKTtcblx0XHR9LFxuXHRcdG5hdmlnYXRlVG9TdWJTZWN0aW9uOiBmdW5jdGlvbiAob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCB2RGV0YWlsQ29uZmlnOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9EZXRhaWxDb25maWcgPSB0eXBlb2YgdkRldGFpbENvbmZpZyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2UodkRldGFpbENvbmZpZykgOiB2RGV0YWlsQ29uZmlnO1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0XHRsZXQgb1NlY3Rpb247XG5cdFx0XHRsZXQgb1N1YlNlY3Rpb247XG5cdFx0XHRpZiAob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIHtcblx0XHRcdFx0b1NlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gKFxuXHRcdFx0XHRcdG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkXG5cdFx0XHRcdFx0XHQ/IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKVxuXHRcdFx0XHRcdFx0OiBvU2VjdGlvbiAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKClbMF1cblx0XHRcdFx0KSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdH0gZWxzZSBpZiAob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHRcdG9TZWN0aW9uID0gb1N1YlNlY3Rpb24gJiYgKG9TdWJTZWN0aW9uLmdldFBhcmVudCgpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRcdH1cblx0XHRcdGlmICghb1NlY3Rpb24gfHwgIW9TdWJTZWN0aW9uIHx8ICFvU2VjdGlvbi5nZXRWaXNpYmxlKCkgfHwgIW9TdWJTZWN0aW9uLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHRjb25zdCBzVGl0bGUgPSBnZXRSZXNvdXJjZU1vZGVsKG9Db250cm9sbGVyKS5nZXRUZXh0KFxuXHRcdFx0XHRcdFwiQ19ST1VUSU5HX05BVklHQVRJT05fRElTQUJMRURfVElUTEVcIixcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0KG9Db250cm9sbGVyLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZW50aXR5U2V0XG5cdFx0XHRcdCk7XG5cdFx0XHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdFx0XHRNZXNzYWdlQm94LmVycm9yKHNUaXRsZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24ob1N1YlNlY3Rpb24uZ2V0SWQoKSk7XG5cdFx0XHRcdC8vIHRyaWdnZXIgaWFwcCBzdGF0ZSBjaGFuZ2Vcblx0XHRcdFx0b09iamVjdFBhZ2UuZmlyZU5hdmlnYXRlKHtcblx0XHRcdFx0XHRzZWN0aW9uOiBvU2VjdGlvbixcblx0XHRcdFx0XHRzdWJTZWN0aW9uOiBvU3ViU2VjdGlvblxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0b25TdGF0ZUNoYW5nZSh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0Y2xvc2VPUE1lc3NhZ2VTdHJpcDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLmhpZGVNZXNzYWdlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBZ0ZBLE1BQU1BLGdCQUFnQixHQUFHQyxTQUFTLENBQUNELGdCQUFnQjtFQUFDLElBRTlDRSxvQkFBb0IsV0FEekJDLGNBQWMsQ0FBQyxrREFBa0QsQ0FBQyxVQUlqRUMsY0FBYyxDQUFDQyxXQUFXLENBQUMsVUFHM0JELGNBQWMsQ0FBQ0UsS0FBSyxDQUFDQyxRQUFRLENBQUNDLGNBQWMsQ0FBQyxDQUFDLFVBRzlDSixjQUFjLENBQUNLLGVBQWUsQ0FBQ0YsUUFBUSxDQUFDRyx1QkFBdUIsQ0FBQyxDQUFDLFVBR2pFTixjQUFjLENBQUNPLFNBQVMsQ0FBQ0osUUFBUSxDQUFDSyxpQkFBaUIsQ0FBQyxDQUFDLFVBR3JEUixjQUFjLENBQUNTLGNB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
|
|
1563
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJkZWZpbmVVSTVDbGFzcyIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJtZXJnZVBhdGNoRHJhZnQiLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsInBvc2l0aXZlQWN0aW9uVmlzaWJsZSIsInBvc2l0aXZlQWN0aW9uRW5hYmxlZCIsIm9uQ2FsbEFjdGlvbiIsImVkaXRBY3Rpb25WaXNpYmxlIiwiZWRpdEFjdGlvbkVuYWJsZWQiLCJfZWRpdERvY3VtZW50IiwiZ2V0TW9kZWwiLCJnZXRQcm9wZXJ0eSIsIl9zYXZlRG9jdW1lbnQiLCJfYXBwbHlEb2N1bWVudCIsIm9uVGFibGVDb250ZXh0Q2hhbmdlIiwiZXZlbnQiLCJ0YWJsZUFQSSIsImdldFNvdXJjZSIsInRhYmxlIiwiY29udGVudCIsImN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiZWRpdEZsb3ciLCJnZXRDdXJyZW50QWN0aW9uUHJvbWlzZSIsInRhYmxlQ29udGV4dHMiLCJfZ2V0VGFibGVCaW5kaW5nIiwiZ2V0Q3VycmVudENvbnRleHRzIiwibGVuZ3RoIiwiYWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJnZXRJZCIsImFjdGlvbkRhdGEiLCJvRGF0YSIsImtleXMiLCJuZXdJdGVtIiwiZmluZEluZGV4IiwidGFibGVDb250ZXh0IiwidGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiZXZlcnkiLCJrZXkiLCJkaWFsb2ciLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsImZpbmQiLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImUiLCJMb2ciLCJlcnJvciIsIm1lc3NhZ2VCdXR0b24iLCJmaXJlTW9kZWxDb250ZXh0Q2hhbmdlIiwiaW52b2tlQWN0aW9uIiwidGhlbiIsIl9zaG93TWVzc2FnZVBvcG92ZXIiLCJiaW5kIiwiY2F0Y2giLCJvbkRhdGFQb2ludFRpdGxlUHJlc3NlZCIsIm9Tb3VyY2UiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb250cm9sQ29uZmlnIiwic0NvbGxlY3Rpb25QYXRoIiwiSlNPTiIsInBhcnNlIiwib1RhcmdldEluZm8iLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJzTWV0YVBhdGgiLCJnZXRNZXRhTW9kZWwiLCJnZXRNZXRhUGF0aCIsImdldFBhdGgiLCJhTmF2aWdhdGlvbkRhdGEiLCJfZ2V0Q2hhcnRDb250ZXh0RGF0YSIsImFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm1hcCIsIm9OYXZpZ2F0aW9uRGF0YSIsIm1ldGFQYXRoIiwicGFyYW1ldGVycyIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJPYmplY3QiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwib0V2ZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNlY3Rpb25MYXlvdXQiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJvT2JqZWN0UGFnZSIsImJ5SWQiLCJvU2VjdGlvbiIsInNlY3Rpb25JZCIsInN1YlNlY3Rpb25JZCIsImdldFN1YlNlY3Rpb25zIiwiZ2V0UGFyZW50IiwiZ2V0VmlzaWJsZSIsInNUaXRsZSIsImdldFJlc291cmNlTW9kZWwiLCJnZXRUZXh0IiwiZW50aXR5U2V0IiwiTWVzc2FnZUJveCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInNlY3Rpb24iLCJzdWJTZWN0aW9uIiwib25TdGF0ZUNoYW5nZSIsImNsb3NlT1BNZXNzYWdlU3RyaXAiLCJoaWRlTWVzc2FnZSIsInNJZCIsIm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyIsIkV4dGVuc2lvbkFQSSIsImV4dGVuc2lvbkFQSSIsIm9uSW5pdCIsIl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCIsInNldFByb3BlcnR5IiwicGFnZSIsInZpc2liaWxpdHkiLCJpdGVtcyIsIl9nZXRCYXRjaEdyb3Vwc0ZvclZpZXciLCJnZXRFbmFibGVMYXp5TG9hZGluZyIsImF0dGFjaEV2ZW50IiwiX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQiLCJvSXRlbUJpbmRpbmciLCJhdHRhY2hDaGFuZ2UiLCJfZm5TaG93T1BNZXNzYWdlIiwib25FeGl0IiwiZGVzdHJveSIsIm9NZXNzYWdlUG9wb3ZlciIsImlzT3BlbiIsImNsb3NlIiwiaXNLZWVwQWxpdmUiLCJzZXRLZWVwQWxpdmUiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3QiLCJ2aWV3IiwibWVzc2FnZXMiLCJnZXRJdGVtcyIsIml0ZW0iLCJmaWx0ZXIiLCJtZXNzYWdlIiwiZ2V0VGFyZ2V0cyIsIl9zaG93TWVzc2FnZXMiLCJvVGFibGUiLCJnZXRSb3dCaW5kaW5nIiwiY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZSIsInN1YlNlY3Rpb25zIiwiY2hhbmdlQ2xhc3NGb3JUYWJsZXMiLCJ2aXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJ0YWJsZVR5cGUiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJnZXRUeXBlIiwiaXNBIiwiYWRkU3R5bGVDbGFzcyIsImRldGFjaEV2ZW50IiwiYmxvY2siLCJjb250cm9sIiwib25CZWZvcmVSZW5kZXJpbmciLCJQYWdlQ29udHJvbGxlciIsInByb3RvdHlwZSIsImFwcGx5Iiwib1ZpZXdEYXRhIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsIkNvbW1vbkhlbHBlciIsInNldE1ldGFNb2RlbCIsImdldEFwcENvbXBvbmVudCIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJnZXRVc2VJY29uVGFiQmFyIiwic2VjdGlvbnMiLCJnZXRTZWN0aW9ucyIsIl9nZXRBbGxTdWJTZWN0aW9ucyIsIl9vbkJlZm9yZUJpbmRpbmciLCJhVGFibGVzIiwiX2ZpbmRUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwicmVhc29uIiwiTmF2aWdhdGlvblJlYXNvbiIsIkVkaXRGbG93QWN0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsInNvbWUiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiaSIsImdldENyZWF0aW9uUm93Iiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsIm9EZWxlZ2F0ZU9uQmVmb3JlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInBhZ2VSZWFkeSIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJfaW5pdGlhbGl6ZVBhZ2luYXRpb24iLCJsaXN0QmluZGluZyIsIl9kaXNhYmxlQmxvY2tzQmluZGluZ3MiLCJwbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwic2hvd1BsYWNlaG9sZGVyIiwib05hdkNvbnRhaW5lciIsIm9Db250YWluZXIiLCJnZXRGaXJzdEVkaXRhYmxlSW5wdXQiLCJkb21FZGl0YWJsZUVsZW1lbnQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiVUk1RWxlbWVudCIsImNsb3Nlc3RUbyIsIl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJvRmlyc3RDbGlja2FibGVFbGVtZW50IiwiYUFjdGlvbnMiLCJnZXRIZWFkZXJUaXRsZSIsImdldEFjdGlvbnMiLCJvQWN0aW9uIiwiZ2V0RW5hYmxlZCIsIm9iamVjdFBhZ2UiLCJhU2VjdGlvbnMiLCJiVXNlSWNvblRhYkJhciIsImlTa2lwIiwiYklzSW5FZGl0TW9kZSIsImJFZGl0YWJsZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwiZm9yRWFjaCIsInN1YkJsb2NrIiwiYWN0aW9ucyIsIl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbiIsImFCbG9ja3MiLCJhRm9ybUNvbnRhaW5lcnMiLCJnZXRGb3JtQ29udGFpbmVycyIsImdldENvbnRlbnQiLCJmb3JtQ29udGFpbmVyIiwiYUZvcm1FbGVtZW50cyIsImdldEZvcm1FbGVtZW50cyIsImZvcm1FbGVtZW50IiwiYUZpZWxkcyIsImdldEZpZWxkcyIsImdldFJlcXVpcmVkIiwiZ2V0VmFsdWUiLCJkZWJ1ZyIsIm9NYW5kYXRvcnlGaWVsZCIsIm9GaWVsZFRvRm9jdXMiLCJnZXRDb250ZW50RWRpdCIsImZvY3VzSW5mbyIsImdldEZvY3VzSW5mbyIsInRhcmdldEluZm8iLCJzaWxlbnQiLCJmb2N1cyIsIl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdCIsIm1lc3NhZ2VIYW5kbGVyIiwicmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzIiwiZ2V0Um91dGVyUHJveHkiLCJjaGVja0lmQmFja0hhc1NhbWVDb250ZXh0IiwiaGlzdG9yeSIsImJhY2siLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiY3VycmVudFVSTCIsImRvY3VtZW50IiwiVVJMIiwiX3JvdXRpbmciLCJuYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsImlucHV0QmluZGluZ0NvbnRleHQiLCJfc2lkZUVmZmVjdHMiLCJjbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkiLCJiaW5kaW5nQ29udGV4dCIsImFJQk5BY3Rpb25zIiwiZ2V0SUJOQWN0aW9ucyIsIm9UYWJsZVJvd0JpbmRpbmciLCJNb2RlbEhlbHBlciIsImlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCIsInJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsInBhcnNlQ3VzdG9tRGF0YSIsIkRlbGVnYXRlVXRpbCIsImdldEN1c3RvbURhdGEiLCJBY3Rpb25SdW50aW1lIiwic2V0QWN0aW9uRW5hYmxlbWVudCIsImNsZWFyU2VsZWN0aW9uIiwiZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCIsIm9PYmplY3RQYWdlVGl0bGUiLCJhSUJOSGVhZGVyQWN0aW9ucyIsImNvbmNhdCIsInVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5Iiwib01vZGVsIiwib0ZpbmFsVUlTdGF0ZSIsImhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyIsIm9CaW5kaW5nIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiVGFibGVIZWxwZXIiLCJlbmFibGVGYXN0Q3JlYXRpb25Sb3ciLCJnZXRDb250ZXh0IiwiZm5IYW5kbGVDaGFuZ2UiLCJkZXRhY2hDaGFuZ2UiLCJjb21wdXRlRWRpdE1vZGUiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImNvbm5lY3QiLCJvRXJyb3IiLCJfdXBkYXRlUmVsYXRlZEFwcHMiLCJjdXJyZW50QmluZGluZyIsImhhbmRsZVBhdGNoU2VudCIsIlRhYmxlVXRpbHMiLCJ3aGVuQm91bmQiLCJfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cyIsInVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCIsInJlY29tbWVuZGF0aW9ucyIsImNsZWFyUmVjb21tZW5kYXRpb25zIiwiZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlIiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQiLCJhcHBseUFwcFN0YXRlIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwid2FpdEZvciIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZmluZEVsZW1lbnRzIiwiZWxlbSIsIm1lc3NhZ2VTdHJpcCIsImJpbmRDb250ZXh0IiwiX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCIsImdldEJvdW5kQ29udGV4dCIsImVudGl0eU5hbWUiLCJyZXNvdXJjZUJ1bmRsZSIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJjb2xsYWJvcmF0aW9uTWVzc2FnZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwicmVtb3ZlTWVzc2FnZXMiLCJNZXNzYWdlIiwidHlwZSIsInRhcmdldCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImFkZE1lc3NhZ2VzIiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9TZWxlY3RlZFNlY3Rpb24iLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJjdHh0Iiwib0JpbmRpbmdDb250ZXh0IiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ2aWV3SWQiLCJpc0VkaXRhYmxlIiwiZmV0Y2hBbmRBcHBseVJlY29tbWVuZGF0aW9ucyIsImNvbnRleHQiLCJmb3JjZUZvY3VzIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJEZXZpY2UiLCJzdXBwb3J0IiwidG91Y2giLCJzYXZlQnV0dG9uIiwiYXV0b1F1ZXVlVW5sb2NrIiwiYXV0b1F1ZXVlTG9jayIsImlzTG9ja2VkIiwidW5sb2NrIiwiZGV0YWNoQnJvd3NlckV2ZW50IiwiYXR0YWNoQnJvd3NlckV2ZW50IiwibG9jayIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiX2V4ZWN1dGVIZWFkZXJTaG9ydGN1dCIsInNCdXR0b25JZCIsIm9CdXR0b24iLCJvRWxlbWVudCIsImZpcmVCdXR0b25QcmVzcyIsIl9leGVjdXRlRm9vdGVyU2hvcnRjdXQiLCJnZXRGb290ZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJfZXhlY3V0ZVRhYlNob3J0Q3V0Iiwib0V4ZWN1dGlvbiIsImlTZWN0aW9uSW5kZXhNYXgiLCJzQ29tbWFuZCIsImdldENvbW1hbmQiLCJuZXdTZWN0aW9uIiwiaVNlbGVjdGVkU2VjdGlvbkluZGV4IiwiaW5kZXhPZlNlY3Rpb24iLCJfZ2V0Rm9vdGVyVmlzaWJpbGl0eSIsInNWaWV3SWQiLCJnZXRNZXNzYWdlTW9kZWwiLCJnZXREYXRhIiwib01lc3NhZ2UiLCJ2YWxpZGF0aW9uIiwiaW5kZXhPZiIsImVyciIsIm9SZXQiLCJpc0VkaXRNb2RlIiwicm9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY3VycmVudFBhZ2VWaWV3IiwiaXNGY2xFbmFibGVkIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFJvb3RDb250YWluZXIiLCJnZXRDdXJyZW50UGFnZSIsIm9NZXNzYWdlQnV0dG9uIiwiZ2V0TGVuZ3RoIiwic2V0VmlzaWJsZSIsIm9wZW5CeSIsIkJ1c3lMb2NrZXIiLCJlZGl0RG9jdW1lbnQiLCJmaW5hbGx5IiwiX3ZhbGlkYXRlRG9jdW1lbnQiLCJnZXRDdXJyZW50Rm9jdXNlZENvbnRyb2xJZCIsImlzVHJhbnNpZW50IiwiY3JlYXRlZCIsImV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uIiwiYnlQYXNzU2lkZUVmZmVjdHMiLCJhcHBDb21wb25lbnQiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJlbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwiZ2xvYmFsU2lkZUVmZmVjdHMiLCJnZXRHbG9iYWxPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwic3luY1Rhc2siLCJQcm9taXNlIiwiYWxsIiwic2lkZUVmZmVjdHMiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJkcmFmdFJvb3RDb250ZXh0IiwiY3JlYXRlUm9vdENvbnRleHQiLCJEcmFmdCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJBY3Rpdml0eVN5bmMiLCJwYXJhbXMiLCJtb2RlbCIsImF3YWl0Q3JlYXRlRG9jdW1lbnRzIiwiZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJkaWFsb2dBY3Rpb24iLCJDb2xsYWJvcmF0aW9uRGlzY2FyZCIsImdldFVzZXJBY3Rpb24iLCJjcmVhdGlvblJvdyIsInRhYmxlQmluZGluZyIsImNvbnRleHRLZXlzIiwic3RhcnRzV2l0aCIsImNyZWF0ZURvY3VtZW50IiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRlQXRFbmQiLCJza2lwU2lkZUVmZmVjdHMiLCJiaW5kaW5ncyIsInNhdmVEb2N1bWVudCIsImVudGl0eVNldE5hbWUiLCJiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvciIsIlJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJDb250aW51ZSIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImxhc3RGb2N1c2VkQ29udHJvbElkIiwic2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyIiwiY2FuY2VsRG9jdW1lbnQiLCJza2lwRGlzY2FyZFBvcG92ZXIiLCJwcm9taXNlUmVzdWx0IiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsImVsZW1lbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImNoYXJ0Q29udHJvbCIsImdldENoYXJ0Q29udHJvbCIsImdldE1haW5Db250ZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJyZXBsYWNlIiwib1NpbmdsZUNvbnRleHQiLCJvU3ViQ2hhcnRDb250ZXh0RGF0YSIsImNvbnRleHREYXRhIiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsIm9QYWdlTGV2ZWxTViIsImFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50IiwiU2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnQiLCJhdHRyaWJ1dGVzIiwib0NvbmZpZ3VyYXRpb25zIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJhQ29uZmlndXJhdGlvbnMiLCJzS2V5Iiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsImludGVybmFsTW9kZWwiLCJwYWdpbmF0b3JDdXJyZW50Q29udGV4dCIsImJpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJfc2V0QnJlYWRjcnVtYkxpbmtzIiwiYVByb21pc2VzIiwiYVNraXBQYXJhbWV0ZXJpemVkIiwic05ld1BhdGgiLCJhUGF0aFBhcnRzIiwic3BsaXQiLCJzUGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwic1BhdGhQYXJ0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsInNQYXJhbWV0ZXJQYXRoIiwiYlJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJoaWVyYXJjaHlQb3NpdGlvbiIsIm9MaW5rIiwidGl0bGVIaWVyYXJjaHlJbmZvIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJlbmNvZGVVUkkiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImluY2x1ZGVzIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwiYUxpbmtzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NYXNzRWRpdFwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IEFjdGl2aXR5U3luYywgeyBjb25uZWN0LCBkaXNjb25uZWN0LCBpc0Nvbm5lY3RlZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IGRyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9kcmFmdFwiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IHsgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9SZWNvbW1lbmRhdGlvbnMvQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmJsb2NrXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnRBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvQ2hhcnRBUElcIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1RhYmxlQVBJXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL1V0aWxzXCI7XG5pbXBvcnQgU2VsZWN0aW9uVmFyaWFudCBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vU2VsZWN0aW9uVmFyaWFudFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBFeHRlbnNpb25BUEkgfSBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9PYmplY3RQYWdlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25EaXNjYXJkIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29tcG9uZW50cy9Db2xsYWJvcmF0aW9uRGlzY2FyZERpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgU3ViU2VjdGlvbkJsb2NrIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL09iamVjdFBhZ2UvY29udHJvbHMvU3ViU2VjdGlvbkJsb2NrXCI7XG5pbXBvcnQgVGFibGVTY3JvbGxlciBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9UYWJsZVNjcm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCB0eXBlIFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvcmUgZnJvbSBcInNhcC91aS9jb3JlL0NvcmVcIjtcbmltcG9ydCBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIFRhYmxlVHlwZUJhc2UgZnJvbSBcInNhcC91aS9tZGMvdGFibGUvVGFibGVUeXBlQmFzZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgQ29udGV4dCwgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIEJyZWFkQ3J1bWJzIGZyb20gXCJzYXAvdXhhcC9CcmVhZENydW1ic1wiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VDb21wb25lbnQgZnJvbSBcIi4vQ29tcG9uZW50XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG50eXBlIEJpbmRpbmdQYXJhbXMgPSB7XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRyZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uO1xuXHRiUGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0bGlzdEJpbmRpbmc/OiBPRGF0YUxpc3RCaW5kaW5nO1xuXHRzaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xufTtcblxuY29uc3QgUHJvZ3JhbW1pbmdNb2RlbCA9IEZFTGlicmFyeS5Qcm9ncmFtbWluZ01vZGVsO1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpXG5jbGFzcyBPYmplY3RQYWdlQ29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0b1ZpZXchOiBhbnk7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihTaGFyZS5vdmVycmlkZShTaGFyZU92ZXJyaWRlcykpXG5cdHNoYXJlITogU2hhcmU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVybmFsUm91dGluZy5vdmVycmlkZShJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSkpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQYWdpbmF0b3Iub3ZlcnJpZGUoUGFnaW5hdG9yT3ZlcnJpZGUpKVxuXHRwYWdpbmF0b3IhOiBQYWdpbmF0b3I7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1lc3NhZ2VIYW5kbGVyLm92ZXJyaWRlKE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUpKVxuXHRtZXNzYWdlSGFuZGxlciE6IE1lc3NhZ2VIYW5kbGVyO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKHtcblx0XHRcdGdldE5hdmlnYXRpb25Nb2RlOiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0Y29uc3QgYklzU3RpY2t5RWRpdE1vZGUgPVxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlICYmXG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUoKTtcblx0XHRcdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlID8gXCJleHBsYWNlXCIgOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRfaW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFZpZXdTdGF0ZS5vdmVycmlkZShWaWV3U3RhdGVPdmVycmlkZXMpKVxuXHR2aWV3U3RhdGUhOiBWaWV3U3RhdGU7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFBhZ2VSZWFkeS5vdmVycmlkZSh7XG5cdFx0XHRpc0NvbnRleHRFeHBlY3RlZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHBhZ2VSZWFkeSE6IFBhZ2VSZWFkeTtcblxuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cblx0cHJpdmF0ZSBtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM/OiBSZWNvcmQ8c3RyaW5nLCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJPjtcblxuXHRwcm90ZWN0ZWQgZXh0ZW5zaW9uQVBJPzogT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtcblxuXHRwcml2YXRlIGJTZWN0aW9uTmF2aWdhdGVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIHN3aXRjaERyYWZ0QW5kQWN0aXZlUG9wT3Zlcj86IFBvcG92ZXI7XG5cblx0cHJpdmF0ZSBjdXJyZW50QmluZGluZz86IEJpbmRpbmc7XG5cblx0cHJpdmF0ZSBtZXNzYWdlQnV0dG9uOiBhbnk7XG5cblx0cHJpdmF0ZSBjb2xsYWJvcmF0aW9uTWVzc2FnZT86IE1lc3NhZ2U7XG5cblx0cHJpdmF0ZSBtZXJnZVBhdGNoRHJhZnQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGF1dG9RdWV1ZUxvY2s6IFJldHVyblR5cGU8T0RhdGFNb2RlbFtcImxvY2tcIl0+IHwgdW5kZWZpbmVkO1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKSB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUpO1xuXHR9XG5cblx0b25FeGl0KCkge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdGRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2hvdyB0aGUgbWVzc2FnZSBzdHJpcCBvbiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqXG5cdCAqL1xuXHRfZm5TaG93T1BNZXNzYWdlKCkge1xuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlclxuXHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIikuZ2V0T2JqZWN0KCkpXG5cdFx0XHQuZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHR9KTtcblxuXHRcdGlmIChleHRlbnNpb25BUEkpIHtcblx0XHRcdGV4dGVuc2lvbkFQSS5fc2hvd01lc3NhZ2VzKG1lc3NhZ2VzLCBcIkJhY2tlbmRcIik7XG5cdFx0fVxuXHR9XG5cblx0X2dldFRhYmxlQmluZGluZyhvVGFibGU6IGFueSkge1xuXHRcdHJldHVybiBvVGFibGUgJiYgb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhlIHNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lciBDU1MgY2xhc3MgdG8gZXZlcnkgdmlzaWJsZSBzdWJzZWN0aW9uIHRoYXQgY29udGFpbnMgb25seSBhIHNpbmdsZSBHcmlkVGFibGUgb3IgVHJlZVRhYmxlLlxuXHQgKiBUaGlzIG1ha2VzIHRoZSB0YWJsZSBmaWxsIHRoZSBmdWxsIGhlaWdodCBvZiBpdHMgY29udGFpbmVyIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBhcHBlYXJzIG9uIHRoZSB0YWJsZSBpdHNlbGYgcmF0aGVyIHRoYW4gb24gdGhlIHBhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdWJTZWN0aW9ucyBUaGUgc3ViIHNlY3Rpb25zIHRvIGxvb2sgZm9yXG5cdCAqL1xuXHRwcml2YXRlIGNoZWNrU2VjdGlvbnNGb3JOb25SZXNwb25zaXZlVGFibGUoc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW10pIHtcblx0XHRjb25zdCBjaGFuZ2VDbGFzc0ZvclRhYmxlcyA9IChldmVudDogRXZlbnQsIHZpc2libGVTdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbik6IHZvaWQgPT4ge1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gWy4uLnZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi52aXNpYmxlU3ViU2VjdGlvbi5nZXRNb3JlQmxvY2tzKCldO1xuXHRcdFx0Y29uc3QgdGFibGVUeXBlID0gYmxvY2tzLmxlbmd0aCA9PT0gMSAmJiAodGhpcy5zZWFyY2hUYWJsZUluQmxvY2soYmxvY2tzWzBdIGFzIFN1YlNlY3Rpb25CbG9jayk/LmdldFR5cGUoKSBhcyBUYWJsZVR5cGVCYXNlKTtcblx0XHRcdGlmICh0YWJsZVR5cGUgJiYgKHRhYmxlVHlwZT8uaXNBKFwic2FwLnVpLm1kYy50YWJsZS5HcmlkVGFibGVUeXBlXCIpIHx8IHRhYmxlVHlwZT8uaXNBKFwic2FwLnVpLm1kYy50YWJsZS5UcmVlVGFibGVUeXBlXCIpKSkge1xuXHRcdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHN1YlNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRcdHZpc2libGVTdWJTZWN0aW9uLmFkZFN0eWxlQ2xhc3MoXCJzYXBVeEFQT2JqZWN0UGFnZVN1YlNlY3Rpb25GaXRDb250YWluZXJcIik7XG5cdFx0XHRcdHZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAoY29uc3Qgc3ViU2VjdGlvbiBvZiBzdWJTZWN0aW9ucykge1xuXHRcdFx0aWYgKHN1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYXR0YWNoIHRoaXMgZXZlbnQgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBPYmplY3QgUGFnZSBMYXp5IExvYWRpbmcgbWVjaGFuaXNtXG5cdFx0XHRcdHN1YlNlY3Rpb24uYXR0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgc3ViU2VjdGlvbiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kIGEgdGFibGUgaW4gYmxvY2tzIG9mIHNlY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSBibG9jayBPbmUgc3ViIHNlY3Rpb24gYmxvY2tcblx0ICogQHJldHVybnMgVGFibGUgaWYgZXhpc3RzXG5cdCAqL1xuXHRwcml2YXRlIHNlYXJjaFRhYmxlSW5CbG9jayhibG9jazogU3ViU2VjdGlvbkJsb2NrKSB7XG5cdFx0Y29uc3QgY29udHJvbCA9IGJsb2NrLmNvbnRlbnQ7XG5cdFx0bGV0IHRhYmxlQVBJOiBUYWJsZUFQSSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoYmxvY2suaXNBKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0Ly8gVGhlIHRhYmxlIG1heSBjdXJyZW50bHkgYmUgc2hvd24gaW4gYSBmdWxsIHNjcmVlbiBkaWFsb2csIHdlIGNhbiB0aGVuIGdldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBUYWJsZUFQSVxuXHRcdFx0Ly8gY29udHJvbCBmcm9tIHRoZSBjdXN0b20gZGF0YSBvZiB0aGUgcGxhY2UgaG9sZGVyIHBhbmVsXG5cdFx0XHRpZiAoY29udHJvbC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBjb250cm9sLmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sIGFzIFRhYmxlQVBJO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRhYmxlQVBJKSB7XG5cdFx0XHRcdHJldHVybiB0YWJsZUFQSS5jb250ZW50O1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcub1ZpZXdEYXRhPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ICYmIENvbW1vbkhlbHBlci5nZXRNZXRhTW9kZWwoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRDb21tb25IZWxwZXIuc2V0TWV0YU1vZGVsKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0bGV0IHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xuXHRcdGlmICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcblx0XHRcdFx0c3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogQ29udGV4dCwgbVBhcmFtZXRlcnM6IEJpbmRpbmdQYXJhbXMgPSB7fSk6IHZvaWQge1xuXHRcdC8vIFRPRE86IHdlIHNob3VsZCBjaGVjayBob3cgdGhpcyBjb21lcyB0b2dldGhlciB3aXRoIHRoZSB0cmFuc2FjdGlvbiBoZWxwZXIsIHNhbWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgYWZ0ZXJCaW5kaW5nXG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKSxcblx0XHRcdG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQsXG5cdFx0XHRvSW50ZXJuYWxNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwiaW50ZXJuYWxcIiksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKSxcblx0XHRcdGlWaWV3TGV2ZWwgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbDtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5yZWFzb24gIT09IE5hdmlnYXRpb25SZWFzb24uRWRpdEZsb3dBY3Rpb24pIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG5cdFx0XHRcdFx0XHRcdFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBhVGFibGVzW2ldLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIGFueSkuaXNGaXJzdFJlbmRlcmluZygpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIGFueSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdC8vIGlmIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9iamVjdFBhZ2VMYXlvdXQgaXMgY2hhbmdlZCB0aGVuIHNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb25cblx0XHQvLyBGSVhNRSBJcyB0aGlzIHJlYWxseSB3b3JraW5nIGFzIGludGVuZGVkID8gSW5pdGlhbGx5IHRoaXMgd2FzIG9uQmVmb3JlUmVuZGVyaW5nLCBidXQgbmV2ZXIgdHJpZ2dlcmVkIG9uQmVmb3JlUmVuZGVyaW5nIGJlY2F1c2UgaXQgd2FzIHJlZ2lzdGVyZWQgYWZ0ZXIgaXRcblx0XHRjb25zdCBvRGVsZWdhdGVPbkJlZm9yZSA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvblxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSwgdGhpcyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUpO1xuXHRcdH0pO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHR0aGlzLl9pbml0aWFsaXplUGFnaW5hdGlvbihvQ29udGV4dCwgb0ludGVybmFsTW9kZWwsIG1QYXJhbWV0ZXJzPy5saXN0QmluZGluZyk7XG5cblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0dGhpcy5fZGlzYWJsZUJsb2Nrc0JpbmRpbmdzKG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlci5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpICYmIG1QYXJhbWV0ZXJzLnNob3dQbGFjZWhvbGRlcikge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9OYXZDb250YWluZXIgPSAob1ZpZXcuZ2V0UGFyZW50KCkgYXMgYW55KS5vQ29udGFpbmVyLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKG9OYXZDb250YWluZXIpIHtcblx0XHRcdFx0b05hdkNvbnRhaW5lci5zaG93UGxhY2Vob2xkZXIoe30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCk6IFVJNUVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRvbUVkaXRhYmxlRWxlbWVudCA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuX2dldEZpcnN0RWRpdGFibGVJbnB1dCgpO1xuXHRcdHJldHVybiBkb21FZGl0YWJsZUVsZW1lbnQgPyBVSTVFbGVtZW50LmNsb3Nlc3RUbyhkb21FZGl0YWJsZUVsZW1lbnQpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZTogYW55KSB7XG5cdFx0bGV0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYUFjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhQWN0aW9ucyAmJiBhQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVBUElcIikpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZUFQSSBkb2VzIG5vdCBoYXZlIGEgZGlzYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZGlzYmFsZWQgb3Igbm90XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFvQWN0aW9uLmlzQShcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIW9BY3Rpb24uaXNBKFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldFZpc2libGUoKSAmJiBvQWN0aW9uLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc2FibGUgdGhlIGJpbmRpbmdzIG9mIGJsb2NrcyBpbiBvYmplY3QgcGFnZSBsYXlvdXQgYmFzZWQgb24gaXRzIG92ZXJhbGwgY29udGVudC5cblx0ICpcblx0ICogQHBhcmFtIG9iamVjdFBhZ2UgT2JqZWN0IFBhZ2UgTGF5b3V0IGNvbnRyb2xcblx0ICovXG5cdF9kaXNhYmxlQmxvY2tzQmluZGluZ3ModGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9iamVjdFBhZ2U6IE9iamVjdFBhZ2VMYXlvdXQpOiB2b2lkIHtcblx0XHRjb25zdCBhU2VjdGlvbnMgPSBvYmplY3RQYWdlLmdldFNlY3Rpb25zKCk7XG5cdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvYmplY3RQYWdlLmdldFVzZUljb25UYWJCYXIoKTtcblx0XHRsZXQgaVNraXAgPSAyO1xuXHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0Y29uc3QgYkVkaXRhYmxlSGVhZGVyID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgT2JqZWN0UGFnZUNvbXBvbmVudCkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRjb25zdCBvU2VjdGlvbiA9IGFTZWN0aW9uc1tpU2VjdGlvbl07XG5cdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0Ly8gSW4gSWNvblRhYkJhciBtb2RlIGtlZXAgdGhlIHNlY29uZCBzZWN0aW9uIGJvdW5kIGlmIHRoZXJlIGlzIGFuIGVkaXRhYmxlIGhlYWRlciBhbmQgd2UgYXJlIHN3aXRjaGluZyB0byBkaXNwbGF5IG1vZGVcblx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRpZiAob1N1YlNlY3Rpb24uZGF0YSgpLmlzVmlzaWJpbGl0eUR5bmFtaWMgIT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRcdFx0XHQvLyBTdWJTZWN0aW9uJ3MgYmluZGluZyBpcyBlbmFibGVkLlxuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQodW5kZWZpbmVkKTtcblx0XHRcdFx0XHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpO1xuXHRcdFx0XHRcdFx0YmxvY2tzLmZvckVhY2goKGJsb2NrOiBTdWJTZWN0aW9uQmxvY2sgfCBVSTVFbGVtZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChibG9jay5pc0E8U3ViU2VjdGlvbkJsb2NrPihcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdFx0XHRcdFx0XHRibG9jay5jb250ZW50LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGJsb2NrLnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jaykgPT4gc3ViQmxvY2suc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uZ2V0QWN0aW9ucygpLmZvckVhY2goKGFjdGlvbnMpID0+IGFjdGlvbnMuc2V0QmluZGluZ0NvbnRleHQobnVsbCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGlmIChhU3ViU2VjdGlvbnMpIHtcblx0XHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IGFCbG9ja3MgPSBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCk7XG5cblx0XHRcdFx0aWYgKGFCbG9ja3MpIHtcblx0XHRcdFx0XHRmb3IgKGxldCBibG9jayA9IDA7IGJsb2NrIDwgYUJsb2Nrcy5sZW5ndGg7IGJsb2NrKyspIHtcblx0XHRcdFx0XHRcdGxldCBhRm9ybUNvbnRhaW5lcnM7XG5cblx0XHRcdFx0XHRcdGlmIChhQmxvY2tzW2Jsb2NrXS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKSkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChhRm9ybUNvbnRhaW5lcnMpIHtcblx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUNvbnRhaW5lciA9IDA7IGZvcm1Db250YWluZXIgPCBhRm9ybUNvbnRhaW5lcnMubGVuZ3RoOyBmb3JtQ29udGFpbmVyKyspIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRm9ybUVsZW1lbnRzID0gYUZvcm1Db250YWluZXJzW2Zvcm1Db250YWluZXJdLmdldEZvcm1FbGVtZW50cygpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhRm9ybUVsZW1lbnRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtRWxlbWVudCA9IDA7IGZvcm1FbGVtZW50IDwgYUZvcm1FbGVtZW50cy5sZW5ndGg7IGZvcm1FbGVtZW50KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZpZWxkcyA9IGFGb3JtRWxlbWVudHNbZm9ybUVsZW1lbnRdLmdldEZpZWxkcygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFRoZSBmaXJzdCBmaWVsZCBpcyBub3QgbmVjZXNzYXJpbHkgYW4gSW5wdXRCYXNlIChlLmcuIGNvdWxkIGJlIGEgVGV4dClcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU28gd2UgbmVlZCB0byBjaGVjayB3aGV0aGVyIGl0IGhhcyBhIGdldFJlcXVpcmVkIG1ldGhvZFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChhRmllbGRzWzBdLmdldFJlcXVpcmVkICYmIGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQoKSAmJiAhYUZpZWxkc1swXS5nZXRWYWx1ZSgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYUZpZWxkc1swXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0TG9nLmRlYnVnKGBFcnJvciB3aGVuIHNlYXJjaGluZyBmb3IgbWFuZGFvdHJ5IGVtcHR5IGZpZWxkOiAke2Vycm9yfWApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBpbml0aWFsIGZvY3VzIGluIGVkaXQgbW9kZS5cblx0ICpcblx0ICogQHBhcmFtIGFTdWJTZWN0aW9ucyBPYmplY3QgcGFnZSBzdWIgc2VjdGlvbnNcblx0ICovXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRzZXRUaW1lb3V0KFxuXHRcdFx0ZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKTogdm9pZCB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdFx0Y29uc3Qgb01hbmRhdG9yeUZpZWxkID0gdGhpcy5fZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zKTtcblx0XHRcdFx0bGV0IG9GaWVsZFRvRm9jdXM7XG5cdFx0XHRcdGlmIChvTWFuZGF0b3J5RmllbGQpIHtcblx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gb01hbmRhdG9yeUZpZWxkLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzID0gdGhpcy5nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKSA/PyB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRcdFx0Y29uc3QgZm9jdXNJbmZvID0gb0ZpZWxkVG9Gb2N1cy5nZXRGb2N1c0luZm8oKSBhcyB7IHRhcmdldEluZm86IG9iamVjdCB9O1xuXHRcdFx0XHRcdGZvY3VzSW5mby50YXJnZXRJbmZvID0geyBzaWxlbnQ6IHRydWUgfTtcblx0XHRcdFx0XHRpZiAob0ZpZWxkVG9Gb2N1cy5pc0EoXCJzYXAudWkubWRjLmZpZWxkLkZpZWxkSW5wdXRcIikpIHtcblx0XHRcdFx0XHRcdG9GaWVsZFRvRm9jdXMgPSBvRmllbGRUb0ZvY3VzLmdldFBhcmVudCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRvRmllbGRUb0ZvY3VzLmZvY3VzKGZvY3VzSW5mbyk7XG5cdFx0XHRcdH1cblx0XHRcdH0uYmluZCh0aGlzKSxcblx0XHRcdDBcblx0XHQpO1xuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdGNvbnN0IGJsb2NrcyA9IG9TdWJTZWN0aW9uLmdldEJsb2NrcygpIGFzIFN1YlNlY3Rpb25CbG9ja1tdO1xuXHRcdGJsb2Nrcy5mb3JFYWNoKChibG9jazogU3ViU2VjdGlvbkJsb2NrIHwgVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0aWYgKGJsb2NrLmlzQTxTdWJTZWN0aW9uQmxvY2s+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLmNvbnRyb2xzLlN1YlNlY3Rpb25CbG9ja1wiKSkge1xuXHRcdFx0XHRibG9jay5jb250ZW50LnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRibG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9TdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKS5mb3JFYWNoKChzdWJCbG9jazogU3ViU2VjdGlvbkJsb2NrKSA9PiBzdWJCbG9jay5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0XHRvU3ViU2VjdGlvbi5nZXRBY3Rpb25zKCkuZm9yRWFjaCgoYWN0aW9uczogQ29udHJvbCkgPT4gYWN0aW9ucy5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpKTtcblx0fVxuXG5cdF9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQ29udGV4dDogYW55KSB7XG5cdFx0dGhpcy5tZXNzYWdlSGFuZGxlci5yZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRpZiAodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb3V0ZXJQcm94eSgpLmNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQoKSkge1xuXHRcdFx0Ly8gQmFjayBuYXYgd2lsbCBrZWVwIHRoZSBzYW1lIGNvbnRleHQgLS0+IG5vIG5lZWQgdG8gZGlzcGxheSB0aGUgZGlhbG9nXG5cdFx0XHRoaXN0b3J5LmJhY2soKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50VVJMID0gZG9jdW1lbnQuVVJMO1xuXHRcdFx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0XHRcdC8vIEluIGNhc2UgdGhlcmUgaXMgbm8gcHJldmlvdXMgcGFnZSBpbiB0aGUgaGlzdG9yeSwgaGlzdG9yeS5iYWNrIGRvZXMgbm90aGluZy5cblx0XHRcdFx0XHQvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gdXNlIG5hdmlnYXRlQmFja0Zyb21Db250ZXh0LCB0aGF0IHdpbGwgZGlzcGxheSB0aGUgaG9tZSBwYWdlXG5cdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoZG9jdW1lbnQuVVJMID09PSBjdXJyZW50VVJMKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sIDUwMCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdF9vbkFmdGVyQmluZGluZyhpbnB1dEJpbmRpbmdDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkLCBtUGFyYW1ldGVyczogQmluZGluZ1BhcmFtcyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCB2aWV3TGV2ZWwgPSAodmlldz8uZ2V0Vmlld0RhdGEoKSBhcyBWaWV3RGF0YSk/LnZpZXdMZXZlbDtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3QgYVRhYmxlcyA9IHRoaXMuX2ZpbmRUYWJsZXMoKTtcblxuXHRcdHRoaXMuX3NpZGVFZmZlY3RzLmNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSgpO1xuXG5cdFx0Ly8gVE9ETzogdGhpcyBpcyBvbmx5IGEgdGVtcCBzb2x1dGlvbiBhcyBsb25nIGFzIHRoZSBtb2RlbCBmaXggdGhlIGNhY2hlIGlzc3VlIGFuZCB3ZSB1c2UgdGhpcyBhZGRpdGlvbmFsXG5cdFx0Ly8gYmluZGluZyB3aXRoIG93blJlcXVlc3Rcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblxuXHRcdGxldCBhSUJOQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TZWN0aW9uOiBhbnkpIHtcblx0XHRcdG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1N1YlNlY3Rpb246IGFueSkge1xuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1N1YlNlY3Rpb24sIGFJQk5BY3Rpb25zKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gQXNzaWduIGludGVybmFsIGJpbmRpbmcgY29udGV4dHMgdG8gb0Zvcm1Db250YWluZXI6XG5cdFx0Ly8gMS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGFzc2lnbiB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHRvIHRoZSBYTUwgZnJhZ21lbnRcblx0XHQvLyAoRm9ybUNvbnRhaW5lci5mcmFnbWVudC54bWwpIHlldCAtIGl0IGlzIHVzZWQgYWxyZWFkeSBmb3IgdGhlIGRhdGEtc3RydWN0dXJlLlxuXHRcdC8vIDIuIEFub3RoZXIgcHJvYmxlbSBpcywgdGhhdCBGb3JtQ29udGFpbmVycyBhc3NpZ25lZCB0byBhICdNb3JlQmxvY2snIGRvZXMgbm90IGhhdmUgYW5cblx0XHQvLyBpbnRlcm5hbCBtb2RlbCBjb250ZXh0IGF0IGFsbC5cblxuXHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpO1xuXHRcdFx0aWYgKG9JbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0ZpZWxkVmFsaWRpdHlcIiwge30pO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjcmVhdGlvblJvd0N1c3RvbVZhbGlkaXR5XCIsIHt9KTtcblxuXHRcdFx0XHRhSUJOQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob1RhYmxlLCBhSUJOQWN0aW9ucyk7XG5cblx0XHRcdFx0Ly8gdGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIEJDUDogMjA4MDIxODAwNFxuXHRcdFx0XHQvLyBOZWVkIHRvIGZpeCB3aXRoIEJMSTogRklPUklURUNIUDEtMTUyNzRcblx0XHRcdFx0Ly8gb25seSBmb3IgZWRpdCBtb2RlLCB3ZSBjbGVhciB0aGUgdGFibGUgY2FjaGVcblx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBzdGFydHMgaGVyZSEhXG5cdFx0XHRcdGNvbnN0IG9UYWJsZVJvd0JpbmRpbmcgPSBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHRcdFx0XHRpZiAob1RhYmxlUm93QmluZGluZykge1xuXHRcdFx0XHRcdGlmIChNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob1RhYmxlUm93QmluZGluZy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRcdFx0Ly8gYXBwbHkgZm9yIGJvdGggZWRpdCBhbmQgZGlzcGxheSBtb2RlIGluIHN0aWNreVxuXHRcdFx0XHRcdFx0b1RhYmxlUm93QmluZGluZy5yZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyhcIlwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gV29ya2Fyb3VuZCBlbmRzIGhlcmUhIVxuXG5cdFx0XHRcdC8vIENsZWFyIHRoZSBzZWxlY3Rpb24gaW4gdGhlIHRhYmxlIGFuZCB1cGRhdGUgYWN0aW9uIGVuYWJsZW1lbnQgYWNjb3JkaW5nbHlcblx0XHRcdFx0Ly8gV2lsbCB0byBiZSBmaXhlZCB3aXRoIEJMSTogRklPUklURUNIUDEtMjQzMThcblx0XHRcdFx0Y29uc3Qgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCA9IEpTT04ucGFyc2UoXG5cdFx0XHRcdFx0Q29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIFtdLCBcInRhYmxlXCIpO1xuXG5cdFx0XHRcdG9UYWJsZS5jbGVhclNlbGVjdGlvbigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwodGhpcywgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdC8vUmV0cmlldmUgT2JqZWN0IFBhZ2UgaGVhZGVyIGFjdGlvbnMgZnJvbSBPYmplY3QgUGFnZSB0aXRsZSBjb250cm9sXG5cdFx0Y29uc3Qgb09iamVjdFBhZ2VUaXRsZSA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZTtcblx0XHRsZXQgYUlCTkhlYWRlckFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YUlCTkhlYWRlckFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9PYmplY3RQYWdlVGl0bGUsIGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRhSUJOQWN0aW9ucyA9IGFJQk5BY3Rpb25zLmNvbmNhdChhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblxuXHRcdGxldCBvTW9kZWw6IGFueSwgb0ZpbmFsVUlTdGF0ZTogYW55O1xuXG5cdFx0Ly8gdGhpcyBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCB0aGUgYWxsXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9UYWJsZVxuXHRcdCAqL1xuXHRcdGNvbnN0IGhhbmRsZVRhYmxlTW9kaWZpY2F0aW9ucyA9IChvVGFibGU6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKSxcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFRhYmxlSGVscGVyLmVuYWJsZUZhc3RDcmVhdGlvblJvdyhcblx0XHRcdFx0XHRcdG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0UGF0aCgpLFxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0Q29udGV4dCgpLFxuXHRcdFx0XHRcdFx0b01vZGVsLFxuXHRcdFx0XHRcdFx0b0ZpbmFsVUlTdGF0ZVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH07XG5cblx0XHRcdGlmICghb0JpbmRpbmcpIHtcblx0XHRcdFx0TG9nLmVycm9yKGBFeHBlY3RlZCBiaW5kaW5nIG1pc3NpbmcgZm9yIHRhYmxlOiAke29UYWJsZS5nZXRJZCgpfWApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZuSGFuZGxlQ2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGlmIChvQmluZGluZy5vQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5kZXRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0aWYgKGJpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRvTW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuZWRpdEZsb3cuY29tcHV0ZUVkaXRNb2RlKGJpbmRpbmdDb250ZXh0KTtcblxuXHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0b0ZpbmFsVUlTdGF0ZVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29ubmVjdCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKSkge1xuXHRcdFx0XHRcdFx0XHRkaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gaW4gY2FzZSB3ZSBzd2l0Y2ggdG8gYW5vdGhlciBlbGVtZW50IChlLmcuIGluIEZDTClcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBmaW5hbCBVSSBTdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly8gdXBkYXRlIHJlbGF0ZWQgYXBwc1xuXHRcdFx0dGhpcy5fdXBkYXRlUmVsYXRlZEFwcHMoKTtcblxuXHRcdFx0Ly9BdHRhY2ggdGhlIHBhdGNoIHNlbnQgYW5kIHBhdGNoIGNvbXBsZXRlZCBldmVudCB0byB0aGUgb2JqZWN0IHBhZ2UgYmluZGluZyBzbyB0aGF0IHdlIGNhbiByZWFjdFxuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSAoYmluZGluZ0NvbnRleHQuZ2V0QmluZGluZyAmJiBiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IGJpbmRpbmdDb250ZXh0O1xuXG5cdFx0XHQvLyBBdHRhY2ggdGhlIGV2ZW50IGhhbmRsZXIgb25seSBvbmNlIHRvIHRoZSBzYW1lIGJpbmRpbmdcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRCaW5kaW5nICE9PSBvQmluZGluZykge1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcInBhdGNoU2VudFwiLCB7fSwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFx0Ly8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZSBpcyBib3VuZFxuXHRcdFx0XHRUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdFx0LnRoZW4oaGFuZGxlVGFibGVNb2RpZmljYXRpb25zKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdChvT2JqZWN0UGFnZSBhcyBhbnkpLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cblx0XHRcdC8vVG8gQ29tcHV0ZSB0aGUgRWRpdCBCaW5kaW5nIG9mIHRoZSBzdWJPYmplY3QgcGFnZSB1c2luZyByb290IG9iamVjdCBwYWdlLCBjcmVhdGUgYSBjb250ZXh0IGZvciBkcmFmdCByb290IGFuZCB1cGRhdGUgdGhlIGVkaXQgYnV0dG9uIGluIHN1YiBPUCB1c2luZyB0aGUgY29udGV4dFxuXHRcdFx0QWN0aW9uUnVudGltZS51cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdH1cblx0XHQvLyB3ZSBhcmUgY2xlYXJpbmcgYW55IHByZXZpb3VzIGRhdGEgZnJvbSByZWNvbW1lbmRhdGlvbnMgZXZlcnkgdGltZSB3ZSBjb21lIHRvIG5ldyBPUFxuXHRcdC8vIHNvIHRoYXQgY2FjaGVkIHJlY29tbWVuZGF0aW9ucyBhcmUgbm90IHNob3duIHRvIHVzZXJcblx0XHRpZiAodmlld0xldmVsICYmIHZpZXdMZXZlbCA9PT0gMSkge1xuXHRcdFx0b0ZpbmFsVUlTdGF0ZT8udGhlbigoKSA9PiB7XG5cdFx0XHRcdHRoaXMucmVjb21tZW5kYXRpb25zLmNsZWFyUmVjb21tZW5kYXRpb25zKCk7XG5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHRoaXMuZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKG1QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCk7XG5cdFx0dGhpcy5fc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTtcblxuXHRcdGNvbnN0IGFwcGx5QXBwU3RhdGUgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldEFwcFN0YXRlSGFuZGxlcigpLmFwcGx5QXBwU3RhdGUodmlldy5nZXRJZCgpLCB2aWV3KTtcblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKGFwcGx5QXBwU3RhdGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IG9mIHRoZSBNZXNzYWdlc3RyaXAgT1AuXG5cdCAqL1xuXHRfc2V0T1BNZXNzYWdlU3RyaXBJbnRlcm5hbENvbnRleHQoKTogdm9pZCB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIiwgeyAuLi5pbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJNZXNzYWdlU3RyaXBcIikgfSk7XG5cdFx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHQob09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyB1bmtub3duIGFzIENvbnRyb2wpXG5cdFx0XHRcdD8uZmluZEVsZW1lbnRzKHRydWUsIChlbGVtOiBDb250cm9sKSA9PiBlbGVtLmlzQShcInNhcC5tLk1lc3NhZ2VTdHJpcFwiKSlcblx0XHRcdFx0LmZvckVhY2goKG1lc3NhZ2VTdHJpcDogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0XHRcdG1lc3NhZ2VTdHJpcC5zZXRCaW5kaW5nQ29udGV4dChcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0XG5cdFx0XHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLmdldEV4dGVuc2lvbkFQSSgpLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdFx0XHRcdFx0LmdldEJvdW5kQ29udGV4dCgpISxcblx0XHRcdFx0XHRcdFwiaW50ZXJuYWxcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93IGEgbWVzc2FnZSBzdHJpcCBpZiBhIHJlZGlyZWN0aW9uIHRvIGEgbm9uLWRyYWZ0IGVsZW1lbnQgaGFzIGJlZW4gZG9uZS5cblx0ICogUmVtb3ZlIHRoZSBtZXNzYWdlIHN0cmlwIGluIGNhc2Ugd2UgbmF2aWdhdGUgdG8gYW5vdGhlciBvYmplY3QgcGFnZS5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eU5hbWUgTmFtZSBvZiB0aGUgRW50aXR5IHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbWVzc2FnZVxuXHQgKi9cblx0ZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKGVudGl0eU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IHJlc291cmNlQnVuZGxlID0gQ29yZS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblxuXHRcdGlmICh0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlKSB7XG5cdFx0XHRDb3JlLmdldE1lc3NhZ2VNYW5hZ2VyKCkucmVtb3ZlTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHRcdGRlbGV0ZSB0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlO1xuXHRcdH1cblxuXHRcdGlmIChlbnRpdHlOYW1lKSB7XG5cdFx0XHR0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlID0gbmV3IE1lc3NhZ2Uoe1xuXHRcdFx0XHRtZXNzYWdlOiByZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiUkVST1VURURfTkFWSUdBVElPTl9UT19TQVZFRF9WRVJTSU9OXCIsIFtlbnRpdHlOYW1lXSksXG5cdFx0XHRcdHR5cGU6IFwiSW5mb3JtYXRpb25cIixcblx0XHRcdFx0dGFyZ2V0OiB0aGlzLmdldFZpZXcoKT8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9KTtcblx0XHRcdHNhcC51aS5nZXRDb3JlKCkuZ2V0TWVzc2FnZU1hbmFnZXIoKS5hZGRNZXNzYWdlcyhbdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZV0pO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXN5bmMgb25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IHsgZm9yY2VGb2N1czogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgc2V0Rm9jdXMgPSAoKSA9PiB7XG5cdFx0XHQvLyBTZXQgdGhlIGZvY3VzIHRvIHRoZSBmaXJzdCBhY3Rpb24gYnV0dG9uLCBvciB0byB0aGUgZmlyc3QgZWRpdGFibGUgaW5wdXQgaWYgaW4gZWRpdGFibGUgbW9kZVxuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0Y29uc3QgaXNJbkRpc3BsYXlNb2RlID0gIXRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblxuXHRcdFx0aWYgKGlzSW5EaXNwbGF5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvRmlyc3RDbGlja2FibGVFbGVtZW50ID0gdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHRcdFx0aWYgKG9GaXJzdENsaWNrYWJsZUVsZW1lbnQpIHtcblx0XHRcdFx0XHRvRmlyc3RDbGlja2FibGVFbGVtZW50LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IG9TZWxlY3RlZFNlY3Rpb246IGFueSA9IENvcmUuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSk7XG5cdFx0XHRcdGlmIChvU2VsZWN0ZWRTZWN0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKG9TZWxlY3RlZFNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGN0eHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vIHNldHRpbmcgdGhpcyBtb2RlbCBkYXRhIHRvIGJlIHVzZWQgZm9yIHJlY29tbWVuZGF0aW9ucyBiaW5kaW5nXG5cdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9jdXJyZW50Q3R4dFwiLCBjdHh0KTtcblxuXHRcdC8vIEFwcGx5IGFwcCBzdGF0ZSBvbmx5IGFmdGVyIHRoZSBwYWdlIGlzIHJlYWR5IHdpdGggdGhlIGZpcnN0IHNlY3Rpb24gc2VsZWN0ZWRcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHQvL1Nob3cgcG9wdXAgd2hpbGUgbmF2aWdhdGluZyBiYWNrIGZyb20gb2JqZWN0IHBhZ2UgaW4gY2FzZSBvZiBkcmFmdFxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGNvbnN0IGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQoKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpIGFzIE9EYXRhTW9kZWwpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmICghYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG9WaWV3KTtcblx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24oKCkgPT4gdGhpcy5fb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0JpbmRpbmdDb250ZXh0KSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0Ly8gZG8gbm90IHJlcXVlc3QgcmVjb21tZW5kYXRpb25zIGFjdGlvbiBpZiB3ZSBhcmUgaW4gRGlzcGxheSBtb2RlXG5cdFx0Y29uc3QgaXNFZGl0YWJsZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRpZiAoaXNFZGl0YWJsZSAmJiBvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdGF3YWl0IHRoaXMucmVjb21tZW5kYXRpb25zLmZldGNoQW5kQXBwbHlSZWNvbW1lbmRhdGlvbnMoW3sgY29udGV4dDogb0JpbmRpbmdDb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0IH1dKTtcblx0XHR9XG5cblx0XHRpZiAobVBhcmFtZXRlcnM/LmZvcmNlRm9jdXMpIHtcblx0XHRcdHNldEZvY3VzKCk7XG5cdFx0fVxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cblx0XHQvL1RoZSBmb2xsb3dpbmcgY29kaW5nIGlzIGRvbmUgdG8gbWVyZ2UgYW4gb3BlbiBQQVRDSCBhbmQgdGhlIGRyYWZ0cHJlcGFyZS9kcmFmdGFjdGl2YXRlXG5cdFx0Ly9yZXF1ZXN0IGludG8gb25lICRiYXRjaCByZXF1ZXN0XG5cdFx0Ly9UbyBhY2hpZXZlIHRoaXMgdGhlICRhdXRvIHF1ZXVlIGlzIGxvY2tlZCBhdCB0aGUgbW91c2Vkb3duIGV2ZW50IChiZWZvcmUgZm9jdXNvdXQpIGluXG5cdFx0Ly9vcmRlciB0byB3YWl0IGZvciB0aGUgZHJhZnQgcmVxdWVzdCBpc3N1ZWQgaW4gdGhlIHNhdmUgYnV0dG9ucyBwcmVzcyBldmVudCBoYW5kbGVyLlxuXHRcdC8vVGhlIHF1ZXVlIGlzIHJlbGVhc2VkIGFnYWluIGR1cmluZyBtb3VzZXVwIChiZWZvcmUgcHJlc3MpLlxuXHRcdC8vVGhpcyBpcyBvbmx5IHBvc3NpYmxlIG9uIG5vbiB0b3VjaCBkZXZpY2VzIGJlY2F1c2Ugb24gdG91Y2ggZGV2aWNlcyB0aGUgZm9jdXNvdXQgYW5kIHByZXNzXG5cdFx0Ly9ldmVudHMgYXJlIGJvdGggaW5pdGlhdGVkIGF0IHRvdWNoZW5kIGJ5IHNhcC5tLkJ1dHRvbi5cblx0XHQvL21vdXNlSGFuZGxlclNldCBpcyB1c2VkIHRvIGVuc3VyZXMgdGhhdCB0aGUgZXZlbnQgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIG9ubHkgb25lIHRpbWUuXG5cdFx0Ly9UaGVyZSBjYW4gYmUgbXVsdGlwbGUgb25QYWdlUmVhZHkgZS5nLiB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGVkaXQvZGlzcGxheSBtb2RlXG5cdFx0aWYgKCF0aGlzLm1lcmdlUGF0Y2hEcmFmdCAmJiAhRGV2aWNlLnN1cHBvcnQudG91Y2gpIHtcblx0XHRcdGNvbnN0IHNhdmVCdXR0b24gPSBvVmlldy5ieUlkKFwiZmU6OkZvb3RlckJhcjo6U3RhbmRhcmRBY3Rpb246OlNhdmVcIikgYXMgQnV0dG9uO1xuXHRcdFx0Y29uc3QgYXV0b1F1ZXVlVW5sb2NrID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrLnVubG9jaygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNhdmVCdXR0b24uZGV0YWNoQnJvd3NlckV2ZW50KFwibW91c2V1cFwiLCBhdXRvUXVldWVVbmxvY2spO1xuXHRcdFx0XHRzYXZlQnV0dG9uLmRldGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdH07XG5cblx0XHRcdHNhdmVCdXR0b24/LmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNlZG93blwiLCAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5hdXRvUXVldWVMb2NrPy5pc0xvY2tlZCgpKSB7XG5cdFx0XHRcdFx0dGhpcy5hdXRvUXVldWVMb2NrID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5sb2NrKFwiJGF1dG9cIik7XG5cdFx0XHRcdFx0Ly93aGVuIHRoZSBtb3VzZSBpcyBkcmFnZ2VkIGF3YXkgZnJvbSB0aGUgc2F2ZSBidXR0b24gd2hpbGUgcHJlc3NlZCB0aGVuIHRoZXJlIHdpbGwgYmUgbm9cblx0XHRcdFx0XHQvL21vdXNldXAgZXZlbnQgb24gdGhlIHNhdmUgYnV0dG9uLiBUaGVyZWZvcmUsIHRoZSB1bmxvY2tpbmcgaXMgZG9uZSBvbiBcIm1vdXNldXBcIiBhbmQgXCJibHVyXCJcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcIm1vdXNldXBcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0XHRzYXZlQnV0dG9uLmF0dGFjaEJyb3dzZXJFdmVudChcImJsdXJcIiwgYXV0b1F1ZXVlVW5sb2NrKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMubWVyZ2VQYXRjaERyYWZ0ID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiAodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGE6IGFueSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGUgJiYgb09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRWYWx1ZSgpLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRfZXhlY3V0ZUhlYWRlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5maW5kKChvRWxlbWVudCkgPT4gb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkKTtcblx0XHRpZiAob0J1dHRvbikge1xuXHRcdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHRcdH1cblx0fVxuXG5cdF9leGVjdXRlRm9vdGVyU2hvcnRjdXQoc0lkOiBhbnkpIHtcblx0XHRjb25zdCBzQnV0dG9uSWQgPSBgJHt0aGlzLmdldFZpZXcoKS5nZXRJZCgpfS0tJHtzSWR9YCxcblx0XHRcdG9CdXR0b24gPSAodGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKS5nZXRGb290ZXIoKSBhcyBhbnkpLmdldENvbnRlbnQoKS5maW5kKGZ1bmN0aW9uIChvRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSA9PT0gXCJzYXAubS5CdXR0b25cIiAmJiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHR9KTtcblx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdH1cblxuXHRfZXhlY3V0ZVRhYlNob3J0Q3V0KG9FeGVjdXRpb246IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSxcblx0XHRcdGFTZWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCksXG5cdFx0XHRpU2VjdGlvbkluZGV4TWF4ID0gYVNlY3Rpb25zLmxlbmd0aCAtIDEsXG5cdFx0XHRzQ29tbWFuZCA9IG9FeGVjdXRpb24ub1NvdXJjZS5nZXRDb21tYW5kKCk7XG5cdFx0bGV0IG5ld1NlY3Rpb24sXG5cdFx0XHRpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPSBvT2JqZWN0UGFnZS5pbmRleE9mU2VjdGlvbih0aGlzLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpIGFzIE9iamVjdFBhZ2VTZWN0aW9uKTtcblx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAtMSAmJiBpU2VjdGlvbkluZGV4TWF4ID4gMCkge1xuXHRcdFx0aWYgKHNDb21tYW5kID09PSBcIk5leHRUYWJcIikge1xuXHRcdFx0XHRpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4IDw9IGlTZWN0aW9uSW5kZXhNYXggLSAxKSB7XG5cdFx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1srK2lTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVNlbGVjdGVkU2VjdGlvbkluZGV4ICE9PSAwKSB7XG5cdFx0XHRcdC8vIFByZXZpb3VzVGFiXG5cdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbLS1pU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAobmV3U2VjdGlvbikge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obmV3U2VjdGlvbik7XG5cdFx0XHRcdG5ld1NlY3Rpb24uZm9jdXMoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rm9vdGVyVmlzaWJpbGl0eSgpIHtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IHNWaWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCBmYWxzZSk7XG5cdFx0c2FwLnVpXG5cdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHQuZ2V0TWVzc2FnZU1hbmFnZXIoKVxuXHRcdFx0LmdldE1lc3NhZ2VNb2RlbCgpXG5cdFx0XHQuZ2V0RGF0YSgpXG5cdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAob01lc3NhZ2U6IGFueSkge1xuXHRcdFx0XHRpZiAob01lc3NhZ2UudmFsaWRhdGlvbiAmJiBvTWVzc2FnZS50eXBlID09PSBcIkVycm9yXCIgJiYgb01lc3NhZ2UudGFyZ2V0LmluZGV4T2Yoc1ZpZXdJZCkgPiAtMSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIm1lc3NhZ2VGb290ZXJDb250YWluc0Vycm9yc1wiLCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRfc2hvd01lc3NhZ2VQb3BvdmVyKGVycj86IGFueSwgb1JldD86IGFueSkge1xuXHRcdGlmIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdH1cblx0XHRjb25zdCBpc0VkaXRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKGlzRWRpdE1vZGUgJiYgIWN1cnJlbnRQYWdlVmlldy5pc0EoXCJzYXAubS5NZXNzYWdlUGFnZVwiKSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLm1lc3NhZ2VCdXR0b24sXG5cdFx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3Zlcixcblx0XHRcdFx0b0l0ZW1CaW5kaW5nID0gb01lc3NhZ2VQb3BvdmVyLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblxuXHRcdFx0aWYgKG9JdGVtQmluZGluZy5nZXRMZW5ndGgoKSA+IDAgJiYgIW9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0XHRvTWVzc2FnZUJ1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IG9NZXNzYWdlQnV0dG9uIGlzIHJlbmRlcmVkIHdoZW4gb3BlbkJ5IGlzIGNhbGxlZFxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIub3BlbkJ5KG9NZXNzYWdlQnV0dG9uKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvUmV0O1xuXHR9XG5cblx0YXN5bmMgX2VkaXREb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0PiB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5lZGl0RG9jdW1lbnQuYXBwbHkodGhpcy5lZGl0RmxvdywgW29Db250ZXh0XSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTW9kZWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBkb2N1bWVudFxuXHQgKiBPbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGlzIHRyaWdnZXJlZCBvbiB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQ6XG5cdCAqICAtIG9uIGEgdHJhbnNpZW50IGNvbnRleHQ6XG5cdCAqIFx0XHQtIGlmIHRoZSBjb250ZXh0IGdldHMgZGF0YSwgd2FpdCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBleGVjdXRlIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKiBcdFx0LSBpZiBubyBkYXRhIGlzIGZvdW5kIG9uIHRoaXMgY29udGV4dCwgb25seSB0aGUgcHJlcGFyZUFjdGlvbiBpcyByZXF1ZXN0ZWRcblx0ICogIC0gb24gYSByZWd1bGFyIGNvbnRleHQsIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBpcyByZXF1ZXN0ZWQuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIG9yIHVuZGVmaW5lZCBpZiBub3QgZXhlY3V0ZWRcblx0ICovXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBjb250cm9sID0gQ29yZS5ieUlkKENvcmUuZ2V0Q3VycmVudEZvY3VzZWRDb250cm9sSWQoKSk7XG5cdFx0Y29uc3QgY29udGV4dCA9IGNvbnRyb2w/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZDtcblxuXHRcdGlmICghY29udGV4dCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKGNvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaGFzUGVuZGluZ0NoYW5nZXMoKSkge1xuXHRcdFx0XHRhd2FpdCBjb250ZXh0LmNyZWF0ZWQoKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0LCB0cnVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIGdsb2JhbCB2YWxpZGF0aW9uIG9mIHRoZSBkcmFmdFxuXHQgKiBPbmUgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGlzIHRyaWdnZXJlZCBvbiB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnQ6XG5cdCAqICAtIHRoZSBnbG9iYWwgc2lkZSBlZmZlY3RzIGFyZSBleGVjdXRlZCBpZiB0aGVzZSBzaWRlIGVmZmVjdHMgYXJlIGRlZmluZWQgaW4gdGhlIGNvbnRleHRcblx0ICogIC0gdGhlIGRyYWZ0IFZhbGlkYXRpb24gb24gdGhlIERyYWZ0Um9vdCBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgQ29udGV4dFxuXHQgKiBAcGFyYW0gYnlQYXNzU2lkZUVmZmVjdHMgT25seSB0aGUgZHJhZnQgVmFsaWRhdGlvbiBzdGVwIGlzIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugb2YgdGhlIGdsb2JhbCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRhc3luYyBleGVjdXRlR2xvYmFsVmFsaWRhdGlvbihjb250ZXh0OiBDb250ZXh0LCBieVBhc3NTaWRlRWZmZWN0cyA9IGZhbHNlKTogUHJvbWlzZTx2b2lkIHwgdW5rbm93bltdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0aWYgKCFieVBhc3NTaWRlRWZmZWN0cykge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoZ2xvYmFsU2lkZUVmZmVjdHMubWFwKChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IGRyYWZ0Um9vdENvbnRleHQgPSAoYXdhaXQgQ29tbW9uVXRpbHMuY3JlYXRlUm9vdENvbnRleHQoUHJvZ3JhbW1pbmdNb2RlbC5EcmFmdCwgdGhpcy5nZXRWaWV3KCksIGFwcENvbXBvbmVudCkpIGFzIENvbnRleHQ7XG5cdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdGlmIChkcmFmdFJvb3RDb250ZXh0KSB7XG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIEFjdGl2aXR5U3luYy5pc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgZHJhZnQgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogXHRJZiBkYXRhIGhhcyBiZWVuIHByb3ZpZGVkIG9uIHRoZSBjcmVhdGlvbiByb3dzLCB0aGUgcmVsYXRlZCBkb2N1bWVudHMgYXJlIGNyZWF0ZWRcblx0ICogYmVmb3JlIHNhdmluZyB0aGUgZHJhZnQgdmVyc2lvbi5cblx0ICpcblx0ICogQHBhcmFtIHBhcmFtcyBQYXJhbWV0ZXJzIGNvbnRhaW5pbmcgdGhlIGVudGl0eXNldG5hbWUuXG5cdCAqIEByZXR1cm5zIFByb21pc2Vcblx0ICovXG5cdGFzeW5jIF9zYXZlRG9jdW1lbnQocGFyYW1zOiBQYXJ0aWFsPHsgZW50aXR5U2V0TmFtZTogc3RyaW5nIH0+KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50czogUHJvbWlzZTx2b2lkPltdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sobW9kZWwpO1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoQWN0aXZpdHlTeW5jLmlzQ29sbGFib3JhdGlvbkVuYWJsZWQodGhpcy5nZXRWaWV3KCkpKSB7XG5cdFx0XHRcdGNvbnN0IGRpYWxvZ0FjdGlvbiA9IGF3YWl0IG5ldyBDb2xsYWJvcmF0aW9uRGlzY2FyZCh0aGlzLmdldFZpZXcoKSwgdHJ1ZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0XHQvLyBXZSBjYW5jZWwgdGhlIGFjdGlvblxuXHRcdFx0XHRpZiAoZGlhbG9nQWN0aW9uID09PSBcImNhbmNlbFwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdlIGtlZXAgdGhlIGRyYWZ0IGFuZCBsZWF2ZSBmb3IgTFJcblx0XHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRcdEFjdGl2aXR5U3luYy5kaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnN5bmNUYXNrKCk7XG5cdFx0XHR0aGlzLl9maW5kVGFibGVzKCkuZm9yRWFjaCgodGFibGU6IFRhYmxlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNyZWF0aW9uUm93ID0gdGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblx0XHRcdFx0Y29uc3QgdGFibGVCaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKHRhYmxlKTtcblx0XHRcdFx0Y29uc3QgY29udGV4dEtleXMgPSBPYmplY3Qua2V5cygoY3JlYXRpb25Sb3c/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpPy5nZXRPYmplY3QoKSB8fCB7fSk7XG5cdFx0XHRcdGlmIChjb250ZXh0S2V5cy5maWx0ZXIoKGtleSkgPT4gIWtleS5zdGFydHNXaXRoKFwiQCR1aTUuXCIpKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRleGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0XHRhd2FpdENyZWF0ZURvY3VtZW50cy5wdXNoKFxuXHRcdFx0XHRcdFx0dGhpcy5lZGl0Rmxvd1xuXHRcdFx0XHRcdFx0XHQuY3JlYXRlRG9jdW1lbnQodGFibGVCaW5kaW5nLCB7XG5cdFx0XHRcdFx0XHRcdFx0Y3JlYXRpb25Nb2RlOiB0YWJsZS5kYXRhKFwiY3JlYXRpb25Nb2RlXCIpLFxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0aW9uUm93OiBjcmVhdGlvblJvdyxcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGVBdEVuZDogdGFibGUuZGF0YShcImNyZWF0ZUF0RW5kXCIpID09PSBcInRydWVcIixcblx0XHRcdFx0XHRcdFx0XHRza2lwU2lkZUVmZmVjdHM6IHRydWUgLy8gdGhlIHNraXBTaWRlRWZmZWN0cyBpcyBhIHBhcmFtZXRlciBjcmVhdGVkIHdoZW4gd2UgY2xpY2sgdGhlIHNhdmUga2V5LiBJZiB3ZSBwcmVzcyB0aGlzIGtleSwgd2UgZG9uJ3QgZXhlY3V0ZSB0aGUgaGFuZGxlU2lkZUVmZmVjdHMgZnVuY2l0b24gdG8gYXZvaWQgYmF0Y2ggcmVkdW5kYW5jeVxuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQudGhlbigoKSA9PiB0YWJsZUJpbmRpbmcpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IGJpbmRpbmdzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXdhaXRDcmVhdGVEb2N1bWVudHMpO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQoY29udGV4dCwge1xuXHRcdFx0XHRcdGVudGl0eVNldE5hbWU6IHBhcmFtcz8uZW50aXR5U2V0TmFtZSxcblx0XHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogZXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcixcblx0XHRcdFx0XHRiaW5kaW5nczogYmluZGluZ3MgYXMgdW5rbm93biBhcyBPRGF0YUxpc3RCaW5kaW5nW10sXG5cdFx0XHRcdFx0bWVyZ2VQYXRjaERyYWZ0OiB0aGlzLm1lcmdlUGF0Y2hEcmFmdFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdC8vIElmIHRoZSBzYXZlRG9jdW1lbnQgaW4gZWRpdEZsb3cgcmV0dXJucyBlcnJvcnMgd2UgbmVlZFxuXHRcdFx0XHQvLyB0byBzaG93IHRoZSBtZXNzYWdlIHBvcG92ZXIgaGVyZSBhbmQgZW5zdXJlIHRoYXQgdGhlXG5cdFx0XHRcdC8vIGRhdGFsb3NzIGxvZ2ljIGRvZXMgbm90IHBlcmZvcm0gdGhlIGZvbGxvdyB1cCBmdW5jdGlvblxuXHRcdFx0XHQvLyBsaWtlIGUuZy4gYSBiYWNrIG5hdmlnYXRpb24gaGVuY2Ugd2UgcmV0dXJuIGEgcHJvbWlzZSBhbmQgcmVqZWN0IGl0XG5cdFx0XHRcdGlmIChlcnJvciAhPT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Db250aW51ZSkge1xuXHRcdFx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcihlcnJvcik7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG1vZGVsKSkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhtb2RlbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgX2NhbmNlbERvY3VtZW50KG1QYXJhbWV0ZXJzOiB7IGNhbmNlbEJ1dHRvbjogc3RyaW5nIH0pOiBQcm9taXNlPENvbnRleHQgfCB2b2lkPiB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuZ2V0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0Y29uc3QgY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRjb25zdCBsYXN0Rm9jdXNlZENvbnRyb2xJZCA9IENvcmUuZ2V0Q3VycmVudEZvY3VzZWRDb250cm9sSWQoKTtcblx0XHRsZXQgc2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gZmFsc2U7XG5cdFx0aWYgKEFjdGl2aXR5U3luYy5pc0NvbGxhYm9yYXRpb25FbmFibGVkKHRoaXMuZ2V0VmlldygpKSkge1xuXHRcdFx0Y29uc3QgZGlhbG9nQWN0aW9uID0gYXdhaXQgbmV3IENvbGxhYm9yYXRpb25EaXNjYXJkKHRoaXMuZ2V0VmlldygpLCBmYWxzZSkuZ2V0VXNlckFjdGlvbigpO1xuXHRcdFx0Ly8gV2UgY2FuY2VsIHRoZSBhY3Rpb25cblx0XHRcdGlmIChkaWFsb2dBY3Rpb24gPT09IFwiY2FuY2VsXCIpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gV2Uga2VlcCB0aGUgZHJhZnQgYW5kIGxlYXZlIGZvciBMUlxuXHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJrZWVwRHJhZnRcIikge1xuXHRcdFx0XHRBY3Rpdml0eVN5bmMuZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIFdlIGhhdmUgZGlzcGxheWVkIHRoZSBkaWFsb2cgYW5kIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgZGlzY2FyZCAtPiBXZSBza2lwIHRoZSBkaXNjYXJkIGNvbmZpcm1hdGlvblxuXHRcdFx0aWYgKGRpYWxvZ0FjdGlvbiA9PT0gXCJkaXNjYXJkQ29uZmlybWVkXCIpIHtcblx0XHRcdFx0c2hvdWxkU2tpcERpc2NhcmRQb3BvdmVyID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3dcblx0XHRcdC5jYW5jZWxEb2N1bWVudChjb250ZXh0LCB7IGNvbnRyb2w6IGNhbmNlbEJ1dHRvbiwgc2tpcERpc2NhcmRQb3BvdmVyOiBzaG91bGRTa2lwRGlzY2FyZFBvcG92ZXIgfSlcblx0XHRcdC50aGVuKChwcm9taXNlUmVzdWx0KSA9PiB7XG5cdFx0XHRcdC8vIGZvY3VzIGlzIHJldGFpbmVkIG9uIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudFxuXHRcdFx0XHRDb3JlLmJ5SWQobGFzdEZvY3VzZWRDb250cm9sSWQpPy5mb2N1cygpO1xuXHRcdFx0XHRyZXR1cm4gcHJvbWlzZVJlc3VsdDtcblx0XHRcdH0pO1xuXHR9XG5cblx0X2FwcGx5RG9jdW1lbnQob0NvbnRleHQ6IENvbnRleHQpIHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5hcHBseURvY3VtZW50KG9Db250ZXh0KS5jYXRjaCgoKSA9PiB0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoKSk7XG5cdH1cblxuXHRfdXBkYXRlUmVsYXRlZEFwcHMoKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IHNob3dSZWxhdGVkQXBwcyA9IG9PYmplY3RQYWdlLmRhdGEoXCJzaG93UmVsYXRlZEFwcHNcIik7XG5cdFx0aWYgKHNob3dSZWxhdGVkQXBwcyA9PT0gXCJ0cnVlXCIgfHwgc2hvd1JlbGF0ZWRBcHBzID09PSB0cnVlKSB7XG5cdFx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0Q29tbW9uVXRpbHMudXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzKG9PYmplY3RQYWdlLCBhcHBDb21wb25lbnQpO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhUGFyZW50RWxlbWVudDogYW55LCBhU3Vic2VjdGlvbjogYW55LCBhQ29udHJvbHM6IGFueSwgYklzQ2hhcnQ/OiBib29sZWFuKSB7XG5cdFx0Zm9yIChsZXQgZWxlbWVudCA9IDA7IGVsZW1lbnQgPCBhUGFyZW50RWxlbWVudC5sZW5ndGg7IGVsZW1lbnQrKykge1xuXHRcdFx0bGV0IG9FbGVtZW50ID0gYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCgpIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudD8uZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKSkge1xuXHRcdFx0XHRcdGNvbnN0IGl0ZW1zID0gb0VsZW1lbnQuZ2V0QWdncmVnYXRpb24oXCJpdGVtc1wiKSBhcyBDb250cm9sW107XG5cdFx0XHRcdFx0aXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbTogQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0aWYgKGl0ZW0uaXNBPENoYXJ0QVBJPihcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIikpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhcnRDb250cm9sID0gaXRlbS5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2goY2hhcnRDb250cm9sKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubGF5b3V0LkR5bmFtaWNTaWRlQ29udGVudFwiKSkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRvRWxlbWVudCA9IG9FbGVtZW50WzBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUaGUgdGFibGUgbWF5IGN1cnJlbnRseSBiZSBzaG93biBpbiBhIGZ1bGwgc2NyZWVuIGRpYWxvZywgd2UgY2FuIHRoZW4gZ2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIFRhYmxlQVBJXG5cdFx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5tLlBhbmVsXCIpICYmIG9FbGVtZW50LmRhdGEoXCJGdWxsU2NyZWVuVGFibGVQbGFjZUhvbGRlclwiKSkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZGF0YShcInRhYmxlQVBJcmVmZXJlbmNlXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0Q29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIG9FbGVtZW50LmdldENvbnRlbnQoKTtcblx0XHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudFswXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gob0VsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEFsbFN1YlNlY3Rpb25zKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRsZXQgYVN1YlNlY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IGFueSkge1xuXHRcdFx0YVN1YlNlY3Rpb25zID0gYVN1YlNlY3Rpb25zLmNvbmNhdChvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYVN1YlNlY3Rpb25zO1xuXHR9XG5cblx0X2dldEFsbEJsb2NrcygpIHtcblx0XHRsZXQgYUJsb2NrczogYW55W10gPSBbXTtcblx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFCbG9ja3MgPSBhQmxvY2tzLmNvbmNhdChvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFCbG9ja3M7XG5cdH1cblxuXHRfZmluZFRhYmxlcygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFUYWJsZXM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhVGFibGVzO1xuXHR9XG5cblx0X2ZpbmRDaGFydHMoKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhQ2hhcnRzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCkge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udGVudCA9IG9CbG9jay5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0Jsb2NrLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5pc0EgJiYgb0NvbnRlbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYXJ0IENvbnRleHQgaXMgcmVzb2x2ZWQgZm9yIDE6biBtaWNyb2NoYXJ0cy5cblx0ICpcblx0ICogQHBhcmFtIG9DaGFydENvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIHNDaGFydFBhdGggVGhlIGNvbGxlY3Rpb25QYXRoIG9mIHRoZSB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgQXR0cmlidXRlcyBvZiB0aGUgY2hhcnQgQ29udGV4dFxuXHQgKi9cblx0X2dldENoYXJ0Q29udGV4dERhdGEob0NoYXJ0Q29udGV4dDogYW55LCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvQ2hhcnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGxldCBvQ2hhcnRDb250ZXh0RGF0YSA9IFtvQ29udGV4dERhdGFdO1xuXHRcdGlmIChvQ2hhcnRDb250ZXh0ICYmIHNDaGFydFBhdGgpIHtcblx0XHRcdGlmIChvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF0pIHtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEgPSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdGRlbGV0ZSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhLnB1c2gob0NvbnRleHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9DaGFydENvbnRleHREYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNjcm9sbCB0aGUgdGFibGVzIHRvIHRoZSByb3cgd2l0aCB0aGUgc1BhdGhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNSb3dQYXRoICdzUGF0aCBvZiB0aGUgdGFibGUgcm93J1xuXHQgKi9cblxuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZykge1xuXHRcdGlmICh0aGlzLl9maW5kVGFibGVzICYmIHRoaXMuX2ZpbmRUYWJsZXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVGFibGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhhVGFibGVzW2ldLCBzUm93UGF0aCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBtZXJnZSBzZWxlY3RlZCBjb250ZXh0cyBhbmQgZmlsdGVycy5cblx0ICpcblx0ICogQHBhcmFtIG9QYWdlQ29udGV4dCBQYWdlIGNvbnRleHRcblx0ICogQHBhcmFtIGFMaW5lQ29udGV4dCBTZWxlY3RlZCBDb250ZXh0c1xuXHQgKiBAcGFyYW0gc0NoYXJ0UGF0aCBDb2xsZWN0aW9uIG5hbWUgb2YgdGhlIGNoYXJ0XG5cdCAqIEByZXR1cm5zIFNlbGVjdGlvbiBWYXJpYW50IE9iamVjdFxuXHQgKi9cblx0X21lcmdlTXVsdGlwbGVDb250ZXh0cyhvUGFnZUNvbnRleHQ6IENvbnRleHQsIGFMaW5lQ29udGV4dDogYW55W10sIHNDaGFydFBhdGg6IHN0cmluZykge1xuXHRcdGxldCBhQXR0cmlidXRlczogYW55W10gPSBbXSxcblx0XHRcdGFQYWdlQXR0cmlidXRlcyA9IFtdLFxuXHRcdFx0b0NvbnRleHQsXG5cdFx0XHRzTWV0YVBhdGhMaW5lOiBzdHJpbmcsXG5cdFx0XHRzUGF0aExpbmU7XG5cblx0XHRjb25zdCBzUGFnZVBhdGggPSBvUGFnZUNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvUGFnZUNvbnRleHQgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkgJiYgb1BhZ2VDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgc01ldGFQYXRoUGFnZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGFnZVBhdGgpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHQvLyBHZXQgc2luZ2xlIGxpbmUgY29udGV4dCBpZiBuZWNlc3Nhcnlcblx0XHRpZiAoYUxpbmVDb250ZXh0ICYmIGFMaW5lQ29udGV4dC5sZW5ndGgpIHtcblx0XHRcdG9Db250ZXh0ID0gYUxpbmVDb250ZXh0WzBdO1xuXHRcdFx0c1BhdGhMaW5lID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0c01ldGFQYXRoTGluZSA9IG9NZXRhTW9kZWwgJiYgb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzUGF0aExpbmUpLnJlcGxhY2UoL15cXC8qLywgXCJcIik7XG5cblx0XHRcdGFMaW5lQ29udGV4dC5mb3JFYWNoKChvU2luZ2xlQ29udGV4dDogYW55KSA9PiB7XG5cdFx0XHRcdGlmIChzQ2hhcnRQYXRoKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NoYXJ0Q29udGV4dERhdGEgPSB0aGlzLl9nZXRDaGFydENvbnRleHREYXRhKG9TaW5nbGVDb250ZXh0LCBzQ2hhcnRQYXRoKTtcblx0XHRcdFx0XHRpZiAob0NoYXJ0Q29udGV4dERhdGEpIHtcblx0XHRcdFx0XHRcdGFBdHRyaWJ1dGVzID0gb0NoYXJ0Q29udGV4dERhdGEubWFwKGZ1bmN0aW9uIChvU3ViQ2hhcnRDb250ZXh0RGF0YTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TdWJDaGFydENvbnRleHREYXRhLFxuXHRcdFx0XHRcdFx0XHRcdGVudGl0eVNldDogYCR7c01ldGFQYXRoUGFnZX0vJHtzQ2hhcnRQYXRofWBcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhQXR0cmlidXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGNvbnRleHREYXRhOiBvU2luZ2xlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoTGluZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0YVBhZ2VBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0Y29udGV4dERhdGE6IG9QYWdlQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdGVudGl0eVNldDogc01ldGFQYXRoUGFnZVxuXHRcdH0pO1xuXHRcdC8vIEFkZGluZyBQYWdlIENvbnRleHQgdG8gc2VsZWN0aW9uIHZhcmlhbnRcblx0XHRhUGFnZUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhUGFnZUF0dHJpYnV0ZXMsIHNNZXRhUGF0aFBhZ2UpO1xuXHRcdGNvbnN0IG9QYWdlTGV2ZWxTViA9IENvbW1vblV0aWxzLmFkZFBhZ2VDb250ZXh0VG9TZWxlY3Rpb25WYXJpYW50KG5ldyBTZWxlY3Rpb25WYXJpYW50KCksIGFQYWdlQXR0cmlidXRlcywgdGhpcy5nZXRWaWV3KCkpO1xuXHRcdGFBdHRyaWJ1dGVzID0gdGhpcy5faW50ZW50QmFzZWROYXZpZ2F0aW9uLnJlbW92ZVNlbnNpdGl2ZURhdGEoYUF0dHJpYnV0ZXMsIHNNZXRhUGF0aFBhZ2UpO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50OiBvUGFnZUxldmVsU1YsXG5cdFx0XHRhdHRyaWJ1dGVzOiBhQXR0cmlidXRlc1xuXHRcdH07XG5cdH1cblxuXHRfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkge1xuXHRcdGNvbnN0IG9WaWV3RGF0YSA9IHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55LFxuXHRcdFx0b0NvbmZpZ3VyYXRpb25zID0gb1ZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uLFxuXHRcdFx0YUNvbmZpZ3VyYXRpb25zID0gb0NvbmZpZ3VyYXRpb25zICYmIE9iamVjdC5rZXlzKG9Db25maWd1cmF0aW9ucyksXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBbXCIkYXV0by5IZXJvZXNcIiwgXCIkYXV0by5EZWNvcmF0aW9uXCIsIFwiJGF1dG8uV29ya2Vyc1wiXTtcblxuXHRcdGlmIChhQ29uZmlndXJhdGlvbnMgJiYgYUNvbmZpZ3VyYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdGFDb25maWd1cmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChzS2V5OiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmZpZ3VyYXRpb24gPSBvQ29uZmlndXJhdGlvbnNbc0tleV07XG5cdFx0XHRcdGlmIChvQ29uZmlndXJhdGlvbi5yZXF1ZXN0R3JvdXBJZCA9PT0gXCJMb25nUnVubmVyc1wiKSB7XG5cdFx0XHRcdFx0YUJhdGNoR3JvdXBzLnB1c2goXCIkYXV0by5Mb25nUnVubmVyc1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBhQmF0Y2hHcm91cHM7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGluaXRpYWxpemUgcGFnaW5hdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHQgQ29udGV4dCBvZiBvYmplY3QgcGFnZVxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbCBJbnRlcm5hbCBtb2RlbFxuXHQgKiBAcGFyYW0gbGlzdEJpbmRpbmcgUGFyZW50IGxpc3QgYmluZGluZyB0byB1c2Vcblx0ICovXG5cdF9pbml0aWFsaXplUGFnaW5hdGlvbihjb250ZXh0OiBDb250ZXh0LCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGxpc3RCaW5kaW5nPzogT0RhdGFMaXN0QmluZGluZyk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdMZXZlbCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIFZpZXdEYXRhKS52aWV3TGV2ZWw7XG5cdFx0aWYgKHZpZXdMZXZlbCA+IDEpIHtcblx0XHRcdGNvbnN0IHBhZ2luYXRvckN1cnJlbnRDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiKTtcblx0XHRcdGlmIChwYWdpbmF0b3JDdXJyZW50Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nVG9Vc2UgPSBwYWdpbmF0b3JDdXJyZW50Q29udGV4dC5nZXRCaW5kaW5nKCk7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUoYmluZGluZ1RvVXNlLCBwYWdpbmF0b3JDdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIiwgbnVsbCk7XG5cdFx0XHR9IGVsc2UgaWYgKGxpc3RCaW5kaW5nKSB7XG5cdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUobGlzdEJpbmRpbmcsIGNvbnRleHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBCcmVhZENydW1icykge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkOiBhbnlbXSA9IFtdLFxuXHRcdFx0c05ld1BhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBoaWVyYXJjaHlQb3NpdGlvbiwgb0xpbms7XG5cdFx0XHRmb3IgKGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mbyBvZiB0aXRsZUhpZXJhcmNoeUluZm9zKSB7XG5cdFx0XHRcdGhpZXJhcmNoeVBvc2l0aW9uID0gdGl0bGVIaWVyYXJjaHlJbmZvcy5pbmRleE9mKHRpdGxlSGllcmFyY2h5SW5mbyk7XG5cblx0XHRcdFx0b0xpbmsgPSBvU291cmNlLmdldExpbmtzKClbaGllcmFyY2h5UG9zaXRpb25dID8gb1NvdXJjZS5nZXRMaW5rcygpW2hpZXJhcmNoeVBvc2l0aW9uXSA6IG5ldyBMaW5rKCk7XG5cdFx0XHRcdC8vc0N1cnJlbnRFbnRpdHkgaXMgYSBmYWxsYmFjayB2YWx1ZSBpbiBjYXNlIG9mIGVtcHR5IHRpdGxlXG5cdFx0XHRcdG9MaW5rLnNldFRleHQodGl0bGVIaWVyYXJjaHlJbmZvLnN1YnRpdGxlIHx8IHRpdGxlSGllcmFyY2h5SW5mby50aXRsZSk7XG5cdFx0XHRcdC8vV2UgYXBwbHkgYW4gYWRkaXRpb25hbCBlbmNvZGVVUkkgaW4gY2FzZSBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgKGllIFwiL1wiKSB1c2VkIGluIHRoZSB1cmwgdGhyb3VnaCB0aGUgc2VtYW50aWMga2V5c1xuXHRcdFx0XHRvTGluay5zZXRIcmVmKGVuY29kZVVSSSh0aXRsZUhpZXJhcmNoeUluZm8uaW50ZW50KSk7XG5cdFx0XHRcdGlmICghb1NvdXJjZS5nZXRMaW5rcygpW2hpZXJhcmNoeVBvc2l0aW9uXSkge1xuXHRcdFx0XHRcdG9Tb3VyY2UuYWRkTGluayhvTGluayk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBicmVhZGNydW1iIGxpbmtzOlwiICsgZXJyb3IpO1xuXHRcdH1cblx0fVxuXG5cdF9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvRGF0YVBvaW50cyA9IENvbW1vblV0aWxzLmdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdG9WaWV3LmdldFZpZXdEYXRhKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0T3V0Ym91bmRzKClcblx0XHQpO1xuXHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0Y29uc3Qgb1BhZ2VDb250ZXh0ID0gb1ZpZXcgJiYgKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaXNIZWFkZXJEUExpbmtWaXNpYmxlXCIsIHt9KTtcblx0XHRpZiAob1BhZ2VDb250ZXh0KSB7XG5cdFx0XHRvUGFnZUNvbnRleHRcblx0XHRcdFx0LnJlcXVlc3RPYmplY3QoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0RhdGE6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBmbkdldExpbmtzKG9EYXRhUG9pbnRzLCBvRGF0YSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgcmV0cmlldmUgdGhlIGxpbmtzIGZyb20gdGhlIHNoZWxsIHNlcnZpY2VcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9FcnJvclxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuT25FcnJvcihvRXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZm5TZXRMaW5rRW5hYmxlbWVudChpZDogc3RyaW5nLCBhU3VwcG9ydGVkTGlua3M6IGFueSkge1xuXHRcdFx0Y29uc3Qgc0xpbmtJZCA9IGlkO1xuXHRcdFx0Ly8gcHJvY2VzcyB2aWFibGUgbGlua3MgZnJvbSBnZXRMaW5rcyBmb3IgYWxsIGRhdGFwb2ludHMgaGF2aW5nIG91dGJvdW5kXG5cdFx0XHRpZiAoYVN1cHBvcnRlZExpbmtzICYmIGFTdXBwb3J0ZWRMaW5rcy5sZW5ndGggPT09IDEgJiYgYVN1cHBvcnRlZExpbmtzWzBdLnN1cHBvcnRlZCkge1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYGlzSGVhZGVyRFBMaW5rVmlzaWJsZS8ke3NMaW5rSWR9YCwgdHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHBhcmFtIG9TdWJEYXRhUG9pbnRzXG5cdFx0ICogQHBhcmFtIG9QYWdlRGF0YVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIGZuR2V0TGlua3Mob1N1YkRhdGFQb2ludHM6IGFueSwgb1BhZ2VEYXRhOiBhbnkpIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIGluIG9TdWJEYXRhUG9pbnRzKSB7XG5cdFx0XHRcdGNvbnN0IG9EYXRhUG9pbnQgPSBvU3ViRGF0YVBvaW50c1tzSWRdO1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zOiBhbnkgPSB7fTtcblx0XHRcdFx0Y29uc3Qgb0xpbmsgPSBvVmlldy5ieUlkKHNJZCk7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBmb3IgZGF0YSBwb2ludHMgY29uZmlndXJlZCBpbiBhcHAgZGVzY3JpcHRvciBidXQgbm90IGFubm90YXRlZCBpbiB0aGUgaGVhZGVyXG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgb0xpbmtDb250ZXh0ID0gb0xpbmsuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3Qgb0xpbmtEYXRhOiBhbnkgPSBvTGlua0NvbnRleHQgJiYgb0xpbmtDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRsZXQgb01peGVkQ29udGV4dDogYW55ID0gbWVyZ2Uoe30sIG9QYWdlRGF0YSwgb0xpbmtEYXRhKTtcblx0XHRcdFx0Ly8gcHJvY2VzcyBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3Ncblx0XHRcdFx0aWYgKG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0Y29uc3QgYVNlbWFudGljT2JqZWN0TWFwcGluZyA9IG9EYXRhUG9pbnQuc2VtYW50aWNPYmplY3RNYXBwaW5nO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBpbiBhU2VtYW50aWNPYmplY3RNYXBwaW5nKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IGFTZW1hbnRpY09iamVjdE1hcHBpbmdbaXRlbV07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFpblByb3BlcnR5ID0gb01hcHBpbmdbXCJMb2NhbFByb3BlcnR5XCJdW1wiJFByb3BlcnR5UGF0aFwiXTtcblx0XHRcdFx0XHRcdGNvbnN0IHNNYXBwZWRQcm9wZXJ0eSA9IG9NYXBwaW5nW1wiU2VtYW50aWNPYmplY3RQcm9wZXJ0eVwiXTtcblx0XHRcdFx0XHRcdGlmIChzTWFpblByb3BlcnR5ICE9PSBzTWFwcGVkUHJvcGVydHkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQuaGFzT3duUHJvcGVydHkoc01haW5Qcm9wZXJ0eSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmV3TWFwcGluZzogYW55ID0ge307XG5cdFx0XHRcdFx0XHRcdFx0b05ld01hcHBpbmdbc01hcHBlZFByb3BlcnR5XSA9IG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdFx0b01peGVkQ29udGV4dCA9IG1lcmdlKHt9LCBvTWl4ZWRDb250ZXh0LCBvTmV3TWFwcGluZyk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9NaXhlZENvbnRleHRbc01haW5Qcm9wZXJ0eV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAob01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBvTWl4ZWRDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRpZiAoIXNLZXkuc3RhcnRzV2l0aChcIl9cIikgJiYgIXNLZXkuaW5jbHVkZXMoXCJvZGF0YS5jb250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNbc0tleV0gPSBvTWl4ZWRDb250ZXh0W3NLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyB2YWxpZGF0ZSBpZiBhIGxpbmsgbXVzdCBiZSByZW5kZXJlZFxuXHRcdFx0XHRvU2hlbGxTZXJ2aWNlc1xuXHRcdFx0XHRcdC5pc05hdmlnYXRpb25TdXBwb3J0ZWQoW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb0RhdGFQb2ludC5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IG9EYXRhUG9pbnQuYWN0aW9uXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHBhcmFtczogb1BhcmFtc1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pXG5cdFx0XHRcdFx0LnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuU2V0TGlua0VuYWJsZW1lbnQoc0lkLCBhTGlua3MpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZuT25FcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGFuZGxlcnMgPSB7XG5cdFx0LyoqXG5cdFx0ICogSW52b2tlcyB0aGUgcGFnZSBwcmltYXJ5IGFjdGlvbiBvbiBwcmVzcyBvZiBDdHJsK0VudGVyLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyIFRoZSBwYWdlIGNvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbiwgZWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGVdIFRoZSB2aXNpYmlsaXR5IG9mIHNlbWF0aWMgcG9zaXRpdmUgYWN0aW9uXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvbkVuYWJsZWRdIFRoZSBlbmFibGVtZW50IG9mIHNlbWFudGljIHBvc2l0aXZlIGFjdGlvblxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnMuZWRpdEFjdGlvblZpc2libGVdIFRoZSBFZGl0IGJ1dHRvbiB2aXNpYmlsaXR5XG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5lZGl0QWN0aW9uRW5hYmxlZF0gVGhlIGVuYWJsZW1lbnQgb2YgRWRpdCBidXR0b25cblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvblByaW1hcnlBY3Rpb24oXG5cdFx0XHRvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsXG5cdFx0XHRvVmlldzogRkVWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHVua25vd24sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbDtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdERvY3VtZW50KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoaVZpZXdMZXZlbCA9PT0gMSAmJiBvVmlldy5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikpIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX3NhdmVEb2N1bWVudCh7fSk7XG5cdFx0XHR9IGVsc2UgaWYgKG9WaWV3LmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fYXBwbHlEb2N1bWVudChvQ29udGV4dCk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIE1hbmFnZXMgdGhlIGNvbnRleHQgY2hhbmdlIGV2ZW50IG9uIHRoZSB0YWJsZXMuXG5cdFx0ICogVGhlIGZvY3VzIGlzIHNldCBpZiB0aGlzIGNoYW5nZSBpcyByZWxhdGVkIHRvIGFuIGVkaXRGbG93IGFjdGlvbiBhbmRcblx0XHQgKiBhbiBldmVudCBpcyBmaXJlZCBvbiB0aGUgb2JqZWN0UGFnZSBtZXNzYWdlQnV0dG9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHRoaXMgVGhlIG9iamVjdFBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBldmVudCBUaGUgVUk1IGV2ZW50XG5cdFx0ICovXG5cdFx0YXN5bmMgb25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIGV2ZW50OiBVSTVFdmVudCkge1xuXHRcdFx0Y29uc3QgdGFibGVBUEkgPSBldmVudC5nZXRTb3VyY2UoKSBhcyBUYWJsZUFQSTtcblx0XHRcdGNvbnN0IHRhYmxlID0gdGFibGVBUEkuY29udGVudDtcblx0XHRcdGNvbnN0IGN1cnJlbnRBY3Rpb25Qcm9taXNlID0gdGhpcy5lZGl0Rmxvdy5nZXRDdXJyZW50QWN0aW9uUHJvbWlzZSgpO1xuXHRcdFx0Y29uc3QgdGFibGVDb250ZXh0cyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyh0YWJsZSk/LmdldEN1cnJlbnRDb250ZXh0cygpO1xuXG5cdFx0XHRpZiAoY3VycmVudEFjdGlvblByb21pc2UgJiYgdGFibGVDb250ZXh0cz8ubGVuZ3RoKSB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBjdXJyZW50QWN0aW9uUHJvbWlzZTtcblx0XHRcdFx0XHRpZiAoYWN0aW9uUmVzcG9uc2U/LmNvbnRyb2xJZCA9PT0gdGFibGUuZ2V0SWQoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYWN0aW9uRGF0YSA9IGFjdGlvblJlc3BvbnNlLm9EYXRhO1xuXHRcdFx0XHRcdFx0Y29uc3Qga2V5cyA9IGFjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRjb25zdCBuZXdJdGVtID0gdGFibGVDb250ZXh0cy5maW5kSW5kZXgoKHRhYmxlQ29udGV4dDogQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0YWJsZURhdGEgPSB0YWJsZUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLmV2ZXJ5KChrZXk6IHN0cmluZykgPT4gdGFibGVEYXRhW2tleV0gPT09IGFjdGlvbkRhdGFba2V5XSk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChuZXdJdGVtICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBkaWFsb2cgPSBJbnN0YW5jZU1hbmFnZXIuZ2V0T3BlbkRpYWxvZ3MoKS5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdGlmIChkaWFsb2cpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBieSBkZXNpZ24sIGEgc2FwLm0uZGlhbG9nIHNldCB0aGUgZm9jdXMgdG8gdGhlIHByZXZpb3VzIGZvY3VzZWQgZWxlbWVudCB3aGVuIGNsb3NpbmcuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHdhaXQgZm9yIHRoZSBkaWFsb2cgdG8gYmUgY2xvc2VkIGJlZm9yZSBzZXQgdGhlIGZvY3VzIHRvIGFub3RoZXIgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsICgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRhYmxlLmZvY3VzUm93KG5ld0l0ZW0sIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYEFuIGVycm9yIG9jY3VycyB3aGlsZSBzY3JvbGxpbmcgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgSXRlbTogJHtlfWApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHQvLyBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBvbiB0aGUgbWVzc2FnZSBidXR0b24gd2hlbmV2ZXIgdGhlIHRhYmxlIGNvbnRleHQgY2hhbmdlc1xuXHRcdFx0dGhpcy5tZXNzYWdlQnV0dG9uLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogSW52b2tlcyBhbiBhY3Rpb24gLSBib3VuZC91bmJvdW5kIGFuZCBzZXRzIHRoZSBwYWdlIGRpcnR5LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9WaWV3XG5cdFx0ICogQHBhcmFtIHNBY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb24gdG8gYmUgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVyc10gQ29udGFpbnMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMuY29udGV4dHNdIE1hbmRhdG9yeSBmb3IgYSBib3VuZCBhY3Rpb24sIGVpdGhlciBvbmUgY29udGV4dCBvciBhbiBhcnJheSB3aXRoIGNvbnRleHRzIGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnMubW9kZWxdIE1hbmRhdG9yeSBmb3IgYW4gdW5ib3VuZCBhY3Rpb247IGFuIGluc3RhbmNlIG9mIGFuIE9EYXRhIFY0IG1vZGVsXG5cdFx0ICogQHJldHVybnMgVGhlIGFjdGlvbiBwcm9taXNlXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DYWxsQWN0aW9uKG9WaWV3OiBhbnksIHNBY3Rpb25OYW1lOiBzdHJpbmcsIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLmVkaXRGbG93XG5cdFx0XHRcdC5pbnZva2VBY3Rpb24oc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKVxuXHRcdFx0XHQudGhlbihvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIsIHVuZGVmaW5lZCkpXG5cdFx0XHRcdC5jYXRjaChvQ29udHJvbGxlci5fc2hvd01lc3NhZ2VQb3BvdmVyLmJpbmQob0NvbnRyb2xsZXIpKTtcblx0XHR9LFxuXHRcdG9uRGF0YVBvaW50VGl0bGVQcmVzc2VkKG9Db250cm9sbGVyOiBhbnksIG9Tb3VyY2U6IGFueSwgb01hbmlmZXN0T3V0Ym91bmQ6IGFueSwgc0NvbnRyb2xDb25maWc6IGFueSwgc0NvbGxlY3Rpb25QYXRoOiBhbnkpIHtcblx0XHRcdG9NYW5pZmVzdE91dGJvdW5kID0gdHlwZW9mIG9NYW5pZmVzdE91dGJvdW5kID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShvTWFuaWZlc3RPdXRib3VuZCkgOiBvTWFuaWZlc3RPdXRib3VuZDtcblx0XHRcdGNvbnN0IG9UYXJnZXRJbmZvID0gb01hbmlmZXN0T3V0Ym91bmRbc0NvbnRyb2xDb25maWddLFxuXHRcdFx0XHRhU2VtYW50aWNPYmplY3RNYXBwaW5nID0gQ29tbW9uVXRpbHMuZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nKG9UYXJnZXRJbmZvKSxcblx0XHRcdFx0b0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSxcblx0XHRcdFx0c01ldGFQYXRoID0gb0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFNb2RlbCgpXG5cdFx0XHRcdFx0LmdldE1ldGFQYXRoKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdGxldCBhTmF2aWdhdGlvbkRhdGEgPSBvQ29udHJvbGxlci5fZ2V0Q2hhcnRDb250ZXh0RGF0YShvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0LCBzQ29sbGVjdGlvblBhdGgpO1xuXHRcdFx0bGV0IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycztcblxuXHRcdFx0YU5hdmlnYXRpb25EYXRhID0gYU5hdmlnYXRpb25EYXRhLm1hcChmdW5jdGlvbiAob05hdmlnYXRpb25EYXRhOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkYXRhOiBvTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0bWV0YVBhdGg6IHNNZXRhUGF0aCArIChzQ29sbGVjdGlvblBhdGggPyBgLyR7c0NvbGxlY3Rpb25QYXRofWAgOiBcIlwiKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0XHRpZiAob1RhcmdldEluZm8gJiYgb1RhcmdldEluZm8ucGFyYW1ldGVycykge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb1RhcmdldEluZm8ucGFyYW1ldGVycyAmJiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE91dGJvdW5kUGFyYW1zKG9UYXJnZXRJbmZvLnBhcmFtZXRlcnMpO1xuXHRcdFx0XHRpZiAoT2JqZWN0LmtleXMob1BhcmFtcykubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IG9QYXJhbXM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCAmJiBvVGFyZ2V0SW5mby5hY3Rpb24pIHtcblx0XHRcdFx0b0NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvVGFyZ2V0SW5mby5zZW1hbnRpY09iamVjdCwgb1RhcmdldEluZm8uYWN0aW9uLCB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbkNvbnRleHRzOiBhTmF2aWdhdGlvbkRhdGEsXG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RNYXBwaW5nOiBhU2VtYW50aWNPYmplY3RNYXBwaW5nLFxuXHRcdFx0XHRcdGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVyczogYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyoqXG5cdFx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIG9Db250cm9sbGVyXG5cdFx0ICogQHBhcmFtIHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHRcdCAqIEBwYXJhbSBzQ3JlYXRlUGF0aCBDcmVhdGUgcGF0aCB3aGVuIHRoZSBjaGV2cm9uIGlzIGNyZWF0ZWQuXG5cdFx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZCAoPz8/IG1heWJlIG9ubHkgb25jZSBmaW5pc2hlZD8pXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBhbnksIHNDcmVhdGVQYXRoOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cblx0XHRvbk5hdmlnYXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Ly93aWxsIGJlIGNhbGxlZCBhbHdheXMgd2hlbiB3ZSBjbGljayBvbiBhIHNlY3Rpb24gdGFiXG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0XHR0aGlzLmJTZWN0aW9uTmF2aWdhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpICYmXG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuc2VjdGlvbkxheW91dCA9PT0gXCJUYWJzXCIgJiZcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIikgPT09IGZhbHNlXG5cdFx0XHQpIHtcblx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRcdFx0dGhpcy5fdXBkYXRlRm9jdXNJbkVkaXRNb2RlKFtvU3ViU2VjdGlvbl0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25WYXJpYW50U2VsZWN0ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25WYXJpYW50U2F2ZWQ6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH0sXG5cdFx0bmF2aWdhdGVUb1N1YlNlY3Rpb246IGZ1bmN0aW9uIChvQ29udHJvbGxlcjogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIHZEZXRhaWxDb25maWc6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0RldGFpbENvbmZpZyA9IHR5cGVvZiB2RGV0YWlsQ29uZmlnID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZSh2RGV0YWlsQ29uZmlnKSA6IHZEZXRhaWxDb25maWc7XG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VcIikgYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdGxldCBvU2VjdGlvbjtcblx0XHRcdGxldCBvU3ViU2VjdGlvbjtcblx0XHRcdGlmIChvRGV0YWlsQ29uZmlnLnNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdFx0b1N1YlNlY3Rpb24gPSAoXG5cdFx0XHRcdFx0b0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWRcblx0XHRcdFx0XHRcdD8gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpXG5cdFx0XHRcdFx0XHQ6IG9TZWN0aW9uICYmIG9TZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkgJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKVswXVxuXHRcdFx0XHQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0fSBlbHNlIGlmIChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZCkge1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IG9Db250cm9sbGVyLmdldFZpZXcoKS5ieUlkKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSBhcyBPYmplY3RQYWdlU3ViU2VjdGlvbjtcblx0XHRcdFx0b1NlY3Rpb24gPSBvU3ViU2VjdGlvbiAmJiAob1N1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFvU2VjdGlvbiB8fCAhb1N1YlNlY3Rpb24gfHwgIW9TZWN0aW9uLmdldFZpc2libGUoKSB8fCAhb1N1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IHNUaXRsZSA9IGdldFJlc291cmNlTW9kZWwob0NvbnRyb2xsZXIpLmdldFRleHQoXG5cdFx0XHRcdFx0XCJDX1JPVVRJTkdfTkFWSUdBVElPTl9ESVNBQkxFRF9USVRMRVwiLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHQob0NvbnRyb2xsZXIuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXRcblx0XHRcdFx0KTtcblx0XHRcdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0XHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihvU3ViU2VjdGlvbi5nZXRJZCgpKTtcblx0XHRcdFx0Ly8gdHJpZ2dlciBpYXBwIHN0YXRlIGNoYW5nZVxuXHRcdFx0XHRvT2JqZWN0UGFnZS5maXJlTmF2aWdhdGUoe1xuXHRcdFx0XHRcdHNlY3Rpb246IG9TZWN0aW9uLFxuXHRcdFx0XHRcdHN1YlNlY3Rpb246IG9TdWJTZWN0aW9uXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRvblN0YXRlQ2hhbmdlKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRjbG9zZU9QTWVzc2FnZVN0cmlwOiBmdW5jdGlvbiAodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkuaGlkZU1lc3NhZ2UoKTtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFB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
|
|
@@ -240,26 +240,25 @@ class ObjectPageController extends PageController {
|
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
/**
|
|
243
|
-
*
|
|
243
|
+
* Add the sapUxAPObjectPageSubSectionFitContainer CSS class to every visible subsection that contains only a single GridTable or TreeTable.
|
|
244
|
+
* This makes the table fill the full height of its container so that the scrollbar appears on the table itself rather than on the page.
|
|
244
245
|
*
|
|
245
246
|
* @param subSections The sub sections to look for
|
|
246
247
|
*/
|
|
247
248
|
private checkSectionsForNonResponsiveTable(subSections: ObjectPageSubSection[]) {
|
|
248
|
-
const changeClassForTables = (event: Event,
|
|
249
|
-
const blocks = [...
|
|
249
|
+
const changeClassForTables = (event: Event, visibleSubSection: ObjectPageSubSection): void => {
|
|
250
|
+
const blocks = [...visibleSubSection.getBlocks(), ...visibleSubSection.getMoreBlocks()];
|
|
250
251
|
const tableType = blocks.length === 1 && (this.searchTableInBlock(blocks[0] as SubSectionBlock)?.getType() as TableTypeBase);
|
|
251
252
|
if (tableType && (tableType?.isA("sap.ui.mdc.table.GridTableType") || tableType?.isA("sap.ui.mdc.table.TreeTableType"))) {
|
|
252
253
|
//In case there is only a single table in a subSection we fit that to the whole page so that the scrollbar comes only on table and not on page
|
|
253
|
-
|
|
254
|
-
|
|
254
|
+
visibleSubSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
|
|
255
|
+
visibleSubSection.detachEvent("modelContextChange", changeClassForTables, this);
|
|
255
256
|
}
|
|
256
257
|
};
|
|
257
|
-
for (
|
|
258
|
-
if (
|
|
259
|
-
const lastVisibleSubSection = subSections[subSectionIndex];
|
|
258
|
+
for (const subSection of subSections) {
|
|
259
|
+
if (subSection.getVisible()) {
|
|
260
260
|
// We need to attach this event in order to manage the Object Page Lazy Loading mechanism
|
|
261
|
-
|
|
262
|
-
break;
|
|
261
|
+
subSection.attachEvent("modelContextChange", subSection, changeClassForTables, this);
|
|
263
262
|
}
|
|
264
263
|
}
|
|
265
264
|
}
|
|
@@ -425,9 +424,14 @@ class ObjectPageController extends PageController {
|
|
|
425
424
|
if (oSubSection.data().isVisibilityDynamic !== "true") {
|
|
426
425
|
// SubSection's binding is enabled.
|
|
427
426
|
oSubSection.setBindingContext(undefined);
|
|
428
|
-
const blocks = oSubSection.getBlocks()
|
|
429
|
-
|
|
430
|
-
|
|
427
|
+
const blocks = oSubSection.getBlocks();
|
|
428
|
+
blocks.forEach((block: SubSectionBlock | UI5Element) => {
|
|
429
|
+
if (block.isA<SubSectionBlock>("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
|
|
430
|
+
block.content.setBindingContext(null);
|
|
431
|
+
} else {
|
|
432
|
+
block.setBindingContext(null);
|
|
433
|
+
}
|
|
434
|
+
});
|
|
431
435
|
oSubSection.getMoreBlocks().forEach((subBlock) => subBlock.setBindingContext(null));
|
|
432
436
|
oSubSection.getActions().forEach((actions) => actions.setBindingContext(null));
|
|
433
437
|
}
|
|
@@ -515,7 +519,13 @@ class ObjectPageController extends PageController {
|
|
|
515
519
|
_handleSubSectionEnteredViewPort(oEvent: any) {
|
|
516
520
|
const oSubSection = oEvent.getParameter("subSection");
|
|
517
521
|
const blocks = oSubSection.getBlocks() as SubSectionBlock[];
|
|
518
|
-
blocks.forEach((block) =>
|
|
522
|
+
blocks.forEach((block: SubSectionBlock | UI5Element) => {
|
|
523
|
+
if (block.isA<SubSectionBlock>("sap.fe.templates.ObjectPage.controls.SubSectionBlock")) {
|
|
524
|
+
block.content.setBindingContext(undefined);
|
|
525
|
+
} else {
|
|
526
|
+
block.setBindingContext(undefined);
|
|
527
|
+
}
|
|
528
|
+
});
|
|
519
529
|
oSubSection.getMoreBlocks().forEach((subBlock: SubSectionBlock) => subBlock.setBindingContext(undefined));
|
|
520
530
|
oSubSection.getActions().forEach((actions: Control) => actions.setBindingContext(undefined));
|
|
521
531
|
}
|
|
@@ -36,7 +36,7 @@ sap.ui.define(["sap/f/library", "sap/fe/core/library", "sap/fe/macros/library",
|
|
|
36
36
|
controls: [],
|
|
37
37
|
elements: [],
|
|
38
38
|
// eslint-disable-next-line no-template-curly-in-string
|
|
39
|
-
version: "1.120.
|
|
39
|
+
version: "1.120.37",
|
|
40
40
|
noLibraryCSS: true
|
|
41
41
|
});
|
|
42
42
|
if (!thisLib.ObjectPage) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
T_LR_VARIANT_APPLY_AUTOMATICALLY_WHEN_FILTER_SET=\u05D0\u05DD \
|
|
3
|
+
T_LR_VARIANT_APPLY_AUTOMATICALLY_WHEN_FILTER_SET=\u05D0\u05DD \u05E2\u05E8\u05DB\u05D9 \u05DE\u05E1\u05E0\u05DF \u05DE\u05D5\u05D2\u05D3\u05E8\u05D9\u05DD \u05DE\u05E8\u05D0\u05E9 \u05D6\u05DE\u05D9\u05E0\u05D9\u05DD, \u05D4\u05EA\u05D5\u05DB\u05DF \u05E0\u05D8\u05E2\u05DF \u05D0\u05D5\u05D8\u05D5\u05DE\u05D8\u05D9\u05EA.
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
@@ -137,7 +137,7 @@ T_KEYBOARD_SHORTCUT_SAVE_MAC=Cmd+S
|
|
|
137
137
|
T_TABLE_AND_CHART_NO_DATA_TEXT=Definer relevante filtre og velg "Start" for \u00E5 starte.
|
|
138
138
|
|
|
139
139
|
|
|
140
|
-
T_TABLE_AND_CHART_NO_DATA_TEXT_WITH_FILTER=
|
|
140
|
+
T_TABLE_AND_CHART_NO_DATA_TEXT_WITH_FILTER=Finner ingen data. Juster s\u00F8ke-/filterparameterne.
|
|
141
141
|
|
|
142
142
|
M_CHART_NO_ANNOTATION_SET_TEXT=Finner ingen diagram-merknad
|
|
143
143
|
|